{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/@fiqas/angular-components/build/directives/directives/focus.ts","node_modules/@fiqas/angular-components/build/directives/directives/timeFormatter.ts","node_modules/@fiqas/angular-components/build/index.ts","node_modules/@fiqas/angular-components/node_modules/@fiqas/utils/build/datetime.ts","node_modules/@fiqas/angular-components/node_modules/@fiqas/utils/build/decorators.ts","node_modules/@fiqas/angular-components/node_modules/@fiqas/utils/build/general.ts","node_modules/@fiqas/angular-components/node_modules/@fiqas/utils/build/index.ts","node_modules/@fiqas/angular-components/node_modules/@fiqas/utils/build/keycodes.ts","node_modules/@fiqas/angular-utils/build/decorators.ts","node_modules/@fiqas/angular-utils/build/index.ts","node_modules/@fiqas/angular-utils/build/module.ts","node_modules/@fiqas/angular-utils/build/utils.ts","node_modules/@fiqas/ngcomponentrouter/build/angular_1_router.js","node_modules/@fiqas/ngcomponentrouter/build/decorators.ts","node_modules/@fiqas/ngcomponentrouter/build/index.ts","node_modules/@fiqas/utils/build/datetime.ts","node_modules/@fiqas/utils/build/decorators.ts","node_modules/@fiqas/utils/build/general.ts","node_modules/@fiqas/utils/build/index.ts","node_modules/@fiqas/utils/build/keycodes.ts","node_modules/@fiqas/utils/build/number.ts","node_modules/@iamadamjowett/angular-click-outside/clickoutside.directive.js","node_modules/angular-google-chart/ng-google-chart.js","node_modules/angular-hotkeys/build/hotkeys.js","node_modules/angular-js-xlsx/angular-js-xlsx.js","node_modules/angular-messages/angular-messages.js","node_modules/angular-messages/index.js","node_modules/angular-resizable/src/angular-resizable.js","node_modules/angular-sanitize/angular-sanitize.js","node_modules/angular-sanitize/index.js","node_modules/angular-ui-bootstrap/dist/ui-bootstrap-tpls.js","node_modules/angular-ui-bootstrap/index.js","node_modules/angular-ui-tinymce/src/tinymce.js","node_modules/base64-js/index.js","node_modules/browser-resolve/empty.js","node_modules/file-saver/dist/FileSaver.min.js","node_modules/mime-db/db.json","node_modules/mime-db/index.js","node_modules/mime-types/index.js","node_modules/path-browserify/index.js","node_modules/process/browser.js","node_modules/rxjs/AsyncSubject.js","node_modules/rxjs/BehaviorSubject.js","node_modules/rxjs/InnerSubscriber.js","node_modules/rxjs/Notification.js","node_modules/rxjs/Observable.js","node_modules/rxjs/Observer.js","node_modules/rxjs/OuterSubscriber.js","node_modules/rxjs/ReplaySubject.js","node_modules/rxjs/Rx.js","node_modules/rxjs/Scheduler.js","node_modules/rxjs/Subject.js","node_modules/rxjs/SubjectSubscription.js","node_modules/rxjs/Subscriber.js","node_modules/rxjs/Subscription.js","node_modules/rxjs/add/observable/bindCallback.js","node_modules/rxjs/add/observable/bindNodeCallback.js","node_modules/rxjs/add/observable/combineLatest.js","node_modules/rxjs/add/observable/concat.js","node_modules/rxjs/add/observable/defer.js","node_modules/rxjs/add/observable/dom/ajax.js","node_modules/rxjs/add/observable/dom/webSocket.js","node_modules/rxjs/add/observable/empty.js","node_modules/rxjs/add/observable/forkJoin.js","node_modules/rxjs/add/observable/from.js","node_modules/rxjs/add/observable/fromEvent.js","node_modules/rxjs/add/observable/fromEventPattern.js","node_modules/rxjs/add/observable/fromPromise.js","node_modules/rxjs/add/observable/generate.js","node_modules/rxjs/add/observable/if.js","node_modules/rxjs/add/observable/interval.js","node_modules/rxjs/add/observable/merge.js","node_modules/rxjs/add/observable/never.js","node_modules/rxjs/add/observable/of.js","node_modules/rxjs/add/observable/onErrorResumeNext.js","node_modules/rxjs/add/observable/pairs.js","node_modules/rxjs/add/observable/race.js","node_modules/rxjs/add/observable/range.js","node_modules/rxjs/add/observable/throw.js","node_modules/rxjs/add/observable/timer.js","node_modules/rxjs/add/observable/using.js","node_modules/rxjs/add/observable/zip.js","node_modules/rxjs/add/operator/audit.js","node_modules/rxjs/add/operator/auditTime.js","node_modules/rxjs/add/operator/buffer.js","node_modules/rxjs/add/operator/bufferCount.js","node_modules/rxjs/add/operator/bufferTime.js","node_modules/rxjs/add/operator/bufferToggle.js","node_modules/rxjs/add/operator/bufferWhen.js","node_modules/rxjs/add/operator/catch.js","node_modules/rxjs/add/operator/combineAll.js","node_modules/rxjs/add/operator/combineLatest.js","node_modules/rxjs/add/operator/concat.js","node_modules/rxjs/add/operator/concatAll.js","node_modules/rxjs/add/operator/concatMap.js","node_modules/rxjs/add/operator/concatMapTo.js","node_modules/rxjs/add/operator/count.js","node_modules/rxjs/add/operator/debounce.js","node_modules/rxjs/add/operator/debounceTime.js","node_modules/rxjs/add/operator/defaultIfEmpty.js","node_modules/rxjs/add/operator/delay.js","node_modules/rxjs/add/operator/delayWhen.js","node_modules/rxjs/add/operator/dematerialize.js","node_modules/rxjs/add/operator/distinct.js","node_modules/rxjs/add/operator/distinctUntilChanged.js","node_modules/rxjs/add/operator/distinctUntilKeyChanged.js","node_modules/rxjs/add/operator/do.js","node_modules/rxjs/add/operator/elementAt.js","node_modules/rxjs/add/operator/every.js","node_modules/rxjs/add/operator/exhaust.js","node_modules/rxjs/add/operator/exhaustMap.js","node_modules/rxjs/add/operator/expand.js","node_modules/rxjs/add/operator/filter.js","node_modules/rxjs/add/operator/finally.js","node_modules/rxjs/add/operator/find.js","node_modules/rxjs/add/operator/findIndex.js","node_modules/rxjs/add/operator/first.js","node_modules/rxjs/add/operator/groupBy.js","node_modules/rxjs/add/operator/ignoreElements.js","node_modules/rxjs/add/operator/isEmpty.js","node_modules/rxjs/add/operator/last.js","node_modules/rxjs/add/operator/let.js","node_modules/rxjs/add/operator/map.js","node_modules/rxjs/add/operator/mapTo.js","node_modules/rxjs/add/operator/materialize.js","node_modules/rxjs/add/operator/max.js","node_modules/rxjs/add/operator/merge.js","node_modules/rxjs/add/operator/mergeAll.js","node_modules/rxjs/add/operator/mergeMap.js","node_modules/rxjs/add/operator/mergeMapTo.js","node_modules/rxjs/add/operator/mergeScan.js","node_modules/rxjs/add/operator/min.js","node_modules/rxjs/add/operator/multicast.js","node_modules/rxjs/add/operator/observeOn.js","node_modules/rxjs/add/operator/onErrorResumeNext.js","node_modules/rxjs/add/operator/pairwise.js","node_modules/rxjs/add/operator/partition.js","node_modules/rxjs/add/operator/pluck.js","node_modules/rxjs/add/operator/publish.js","node_modules/rxjs/add/operator/publishBehavior.js","node_modules/rxjs/add/operator/publishLast.js","node_modules/rxjs/add/operator/publishReplay.js","node_modules/rxjs/add/operator/race.js","node_modules/rxjs/add/operator/reduce.js","node_modules/rxjs/add/operator/repeat.js","node_modules/rxjs/add/operator/repeatWhen.js","node_modules/rxjs/add/operator/retry.js","node_modules/rxjs/add/operator/retryWhen.js","node_modules/rxjs/add/operator/sample.js","node_modules/rxjs/add/operator/sampleTime.js","node_modules/rxjs/add/operator/scan.js","node_modules/rxjs/add/operator/sequenceEqual.js","node_modules/rxjs/add/operator/share.js","node_modules/rxjs/add/operator/shareReplay.js","node_modules/rxjs/add/operator/single.js","node_modules/rxjs/add/operator/skip.js","node_modules/rxjs/add/operator/skipLast.js","node_modules/rxjs/add/operator/skipUntil.js","node_modules/rxjs/add/operator/skipWhile.js","node_modules/rxjs/add/operator/startWith.js","node_modules/rxjs/add/operator/subscribeOn.js","node_modules/rxjs/add/operator/switch.js","node_modules/rxjs/add/operator/switchMap.js","node_modules/rxjs/add/operator/switchMapTo.js","node_modules/rxjs/add/operator/take.js","node_modules/rxjs/add/operator/takeLast.js","node_modules/rxjs/add/operator/takeUntil.js","node_modules/rxjs/add/operator/takeWhile.js","node_modules/rxjs/add/operator/throttle.js","node_modules/rxjs/add/operator/throttleTime.js","node_modules/rxjs/add/operator/timeInterval.js","node_modules/rxjs/add/operator/timeout.js","node_modules/rxjs/add/operator/timeoutWith.js","node_modules/rxjs/add/operator/timestamp.js","node_modules/rxjs/add/operator/toArray.js","node_modules/rxjs/add/operator/toPromise.js","node_modules/rxjs/add/operator/window.js","node_modules/rxjs/add/operator/windowCount.js","node_modules/rxjs/add/operator/windowTime.js","node_modules/rxjs/add/operator/windowToggle.js","node_modules/rxjs/add/operator/windowWhen.js","node_modules/rxjs/add/operator/withLatestFrom.js","node_modules/rxjs/add/operator/zip.js","node_modules/rxjs/add/operator/zipAll.js","node_modules/rxjs/observable/ArrayLikeObservable.js","node_modules/rxjs/observable/ArrayObservable.js","node_modules/rxjs/observable/BoundCallbackObservable.js","node_modules/rxjs/observable/BoundNodeCallbackObservable.js","node_modules/rxjs/observable/ConnectableObservable.js","node_modules/rxjs/observable/DeferObservable.js","node_modules/rxjs/observable/EmptyObservable.js","node_modules/rxjs/observable/ErrorObservable.js","node_modules/rxjs/observable/ForkJoinObservable.js","node_modules/rxjs/observable/FromEventObservable.js","node_modules/rxjs/observable/FromEventPatternObservable.js","node_modules/rxjs/observable/FromObservable.js","node_modules/rxjs/observable/GenerateObservable.js","node_modules/rxjs/observable/IfObservable.js","node_modules/rxjs/observable/IntervalObservable.js","node_modules/rxjs/observable/IteratorObservable.js","node_modules/rxjs/observable/NeverObservable.js","node_modules/rxjs/observable/PairsObservable.js","node_modules/rxjs/observable/PromiseObservable.js","node_modules/rxjs/observable/RangeObservable.js","node_modules/rxjs/observable/ScalarObservable.js","node_modules/rxjs/observable/SubscribeOnObservable.js","node_modules/rxjs/observable/TimerObservable.js","node_modules/rxjs/observable/UsingObservable.js","node_modules/rxjs/observable/bindCallback.js","node_modules/rxjs/observable/bindNodeCallback.js","node_modules/rxjs/observable/combineLatest.js","node_modules/rxjs/observable/concat.js","node_modules/rxjs/observable/defer.js","node_modules/rxjs/observable/dom/AjaxObservable.js","node_modules/rxjs/observable/dom/WebSocketSubject.js","node_modules/rxjs/observable/dom/ajax.js","node_modules/rxjs/observable/dom/webSocket.js","node_modules/rxjs/observable/empty.js","node_modules/rxjs/observable/forkJoin.js","node_modules/rxjs/observable/from.js","node_modules/rxjs/observable/fromEvent.js","node_modules/rxjs/observable/fromEventPattern.js","node_modules/rxjs/observable/fromPromise.js","node_modules/rxjs/observable/generate.js","node_modules/rxjs/observable/if.js","node_modules/rxjs/observable/interval.js","node_modules/rxjs/observable/merge.js","node_modules/rxjs/observable/never.js","node_modules/rxjs/observable/of.js","node_modules/rxjs/observable/onErrorResumeNext.js","node_modules/rxjs/observable/pairs.js","node_modules/rxjs/observable/race.js","node_modules/rxjs/observable/range.js","node_modules/rxjs/observable/throw.js","node_modules/rxjs/observable/timer.js","node_modules/rxjs/observable/using.js","node_modules/rxjs/observable/zip.js","node_modules/rxjs/operator/audit.js","node_modules/rxjs/operator/auditTime.js","node_modules/rxjs/operator/buffer.js","node_modules/rxjs/operator/bufferCount.js","node_modules/rxjs/operator/bufferTime.js","node_modules/rxjs/operator/bufferToggle.js","node_modules/rxjs/operator/bufferWhen.js","node_modules/rxjs/operator/catch.js","node_modules/rxjs/operator/combineAll.js","node_modules/rxjs/operator/combineLatest.js","node_modules/rxjs/operator/concat.js","node_modules/rxjs/operator/concatAll.js","node_modules/rxjs/operator/concatMap.js","node_modules/rxjs/operator/concatMapTo.js","node_modules/rxjs/operator/count.js","node_modules/rxjs/operator/debounce.js","node_modules/rxjs/operator/debounceTime.js","node_modules/rxjs/operator/defaultIfEmpty.js","node_modules/rxjs/operator/delay.js","node_modules/rxjs/operator/delayWhen.js","node_modules/rxjs/operator/dematerialize.js","node_modules/rxjs/operator/distinct.js","node_modules/rxjs/operator/distinctUntilChanged.js","node_modules/rxjs/operator/distinctUntilKeyChanged.js","node_modules/rxjs/operator/do.js","node_modules/rxjs/operator/elementAt.js","node_modules/rxjs/operator/every.js","node_modules/rxjs/operator/exhaust.js","node_modules/rxjs/operator/exhaustMap.js","node_modules/rxjs/operator/expand.js","node_modules/rxjs/operator/filter.js","node_modules/rxjs/operator/finally.js","node_modules/rxjs/operator/find.js","node_modules/rxjs/operator/findIndex.js","node_modules/rxjs/operator/first.js","node_modules/rxjs/operator/groupBy.js","node_modules/rxjs/operator/ignoreElements.js","node_modules/rxjs/operator/isEmpty.js","node_modules/rxjs/operator/last.js","node_modules/rxjs/operator/let.js","node_modules/rxjs/operator/map.js","node_modules/rxjs/operator/mapTo.js","node_modules/rxjs/operator/materialize.js","node_modules/rxjs/operator/max.js","node_modules/rxjs/operator/merge.js","node_modules/rxjs/operator/mergeAll.js","node_modules/rxjs/operator/mergeMap.js","node_modules/rxjs/operator/mergeMapTo.js","node_modules/rxjs/operator/mergeScan.js","node_modules/rxjs/operator/min.js","node_modules/rxjs/operator/multicast.js","node_modules/rxjs/operator/observeOn.js","node_modules/rxjs/operator/onErrorResumeNext.js","node_modules/rxjs/operator/pairwise.js","node_modules/rxjs/operator/partition.js","node_modules/rxjs/operator/pluck.js","node_modules/rxjs/operator/publish.js","node_modules/rxjs/operator/publishBehavior.js","node_modules/rxjs/operator/publishLast.js","node_modules/rxjs/operator/publishReplay.js","node_modules/rxjs/operator/race.js","node_modules/rxjs/operator/reduce.js","node_modules/rxjs/operator/repeat.js","node_modules/rxjs/operator/repeatWhen.js","node_modules/rxjs/operator/retry.js","node_modules/rxjs/operator/retryWhen.js","node_modules/rxjs/operator/sample.js","node_modules/rxjs/operator/sampleTime.js","node_modules/rxjs/operator/scan.js","node_modules/rxjs/operator/sequenceEqual.js","node_modules/rxjs/operator/share.js","node_modules/rxjs/operator/shareReplay.js","node_modules/rxjs/operator/single.js","node_modules/rxjs/operator/skip.js","node_modules/rxjs/operator/skipLast.js","node_modules/rxjs/operator/skipUntil.js","node_modules/rxjs/operator/skipWhile.js","node_modules/rxjs/operator/startWith.js","node_modules/rxjs/operator/subscribeOn.js","node_modules/rxjs/operator/switch.js","node_modules/rxjs/operator/switchMap.js","node_modules/rxjs/operator/switchMapTo.js","node_modules/rxjs/operator/take.js","node_modules/rxjs/operator/takeLast.js","node_modules/rxjs/operator/takeUntil.js","node_modules/rxjs/operator/takeWhile.js","node_modules/rxjs/operator/throttle.js","node_modules/rxjs/operator/throttleTime.js","node_modules/rxjs/operator/timeInterval.js","node_modules/rxjs/operator/timeout.js","node_modules/rxjs/operator/timeoutWith.js","node_modules/rxjs/operator/timestamp.js","node_modules/rxjs/operator/toArray.js","node_modules/rxjs/operator/window.js","node_modules/rxjs/operator/windowCount.js","node_modules/rxjs/operator/windowTime.js","node_modules/rxjs/operator/windowToggle.js","node_modules/rxjs/operator/windowWhen.js","node_modules/rxjs/operator/withLatestFrom.js","node_modules/rxjs/operator/zip.js","node_modules/rxjs/operator/zipAll.js","node_modules/rxjs/operators.js","node_modules/rxjs/operators/audit.js","node_modules/rxjs/operators/auditTime.js","node_modules/rxjs/operators/buffer.js","node_modules/rxjs/operators/bufferCount.js","node_modules/rxjs/operators/bufferTime.js","node_modules/rxjs/operators/bufferToggle.js","node_modules/rxjs/operators/bufferWhen.js","node_modules/rxjs/operators/catchError.js","node_modules/rxjs/operators/combineAll.js","node_modules/rxjs/operators/combineLatest.js","node_modules/rxjs/operators/concat.js","node_modules/rxjs/operators/concatAll.js","node_modules/rxjs/operators/concatMap.js","node_modules/rxjs/operators/concatMapTo.js","node_modules/rxjs/operators/count.js","node_modules/rxjs/operators/debounce.js","node_modules/rxjs/operators/debounceTime.js","node_modules/rxjs/operators/defaultIfEmpty.js","node_modules/rxjs/operators/delay.js","node_modules/rxjs/operators/delayWhen.js","node_modules/rxjs/operators/dematerialize.js","node_modules/rxjs/operators/distinct.js","node_modules/rxjs/operators/distinctUntilChanged.js","node_modules/rxjs/operators/distinctUntilKeyChanged.js","node_modules/rxjs/operators/elementAt.js","node_modules/rxjs/operators/every.js","node_modules/rxjs/operators/exhaust.js","node_modules/rxjs/operators/exhaustMap.js","node_modules/rxjs/operators/expand.js","node_modules/rxjs/operators/filter.js","node_modules/rxjs/operators/finalize.js","node_modules/rxjs/operators/find.js","node_modules/rxjs/operators/findIndex.js","node_modules/rxjs/operators/first.js","node_modules/rxjs/operators/groupBy.js","node_modules/rxjs/operators/ignoreElements.js","node_modules/rxjs/operators/isEmpty.js","node_modules/rxjs/operators/last.js","node_modules/rxjs/operators/map.js","node_modules/rxjs/operators/mapTo.js","node_modules/rxjs/operators/materialize.js","node_modules/rxjs/operators/max.js","node_modules/rxjs/operators/merge.js","node_modules/rxjs/operators/mergeAll.js","node_modules/rxjs/operators/mergeMap.js","node_modules/rxjs/operators/mergeMapTo.js","node_modules/rxjs/operators/mergeScan.js","node_modules/rxjs/operators/min.js","node_modules/rxjs/operators/multicast.js","node_modules/rxjs/operators/observeOn.js","node_modules/rxjs/operators/onErrorResumeNext.js","node_modules/rxjs/operators/pairwise.js","node_modules/rxjs/operators/partition.js","node_modules/rxjs/operators/pluck.js","node_modules/rxjs/operators/publish.js","node_modules/rxjs/operators/publishBehavior.js","node_modules/rxjs/operators/publishLast.js","node_modules/rxjs/operators/publishReplay.js","node_modules/rxjs/operators/race.js","node_modules/rxjs/operators/reduce.js","node_modules/rxjs/operators/refCount.js","node_modules/rxjs/operators/repeat.js","node_modules/rxjs/operators/repeatWhen.js","node_modules/rxjs/operators/retry.js","node_modules/rxjs/operators/retryWhen.js","node_modules/rxjs/operators/sample.js","node_modules/rxjs/operators/sampleTime.js","node_modules/rxjs/operators/scan.js","node_modules/rxjs/operators/sequenceEqual.js","node_modules/rxjs/operators/share.js","node_modules/rxjs/operators/shareReplay.js","node_modules/rxjs/operators/single.js","node_modules/rxjs/operators/skip.js","node_modules/rxjs/operators/skipLast.js","node_modules/rxjs/operators/skipUntil.js","node_modules/rxjs/operators/skipWhile.js","node_modules/rxjs/operators/startWith.js","node_modules/rxjs/operators/subscribeOn.js","node_modules/rxjs/operators/switchAll.js","node_modules/rxjs/operators/switchMap.js","node_modules/rxjs/operators/switchMapTo.js","node_modules/rxjs/operators/take.js","node_modules/rxjs/operators/takeLast.js","node_modules/rxjs/operators/takeUntil.js","node_modules/rxjs/operators/takeWhile.js","node_modules/rxjs/operators/tap.js","node_modules/rxjs/operators/throttle.js","node_modules/rxjs/operators/throttleTime.js","node_modules/rxjs/operators/timeInterval.js","node_modules/rxjs/operators/timeout.js","node_modules/rxjs/operators/timeoutWith.js","node_modules/rxjs/operators/timestamp.js","node_modules/rxjs/operators/toArray.js","node_modules/rxjs/operators/window.js","node_modules/rxjs/operators/windowCount.js","node_modules/rxjs/operators/windowTime.js","node_modules/rxjs/operators/windowToggle.js","node_modules/rxjs/operators/windowWhen.js","node_modules/rxjs/operators/withLatestFrom.js","node_modules/rxjs/operators/zip.js","node_modules/rxjs/operators/zipAll.js","node_modules/rxjs/scheduler/Action.js","node_modules/rxjs/scheduler/AnimationFrameAction.js","node_modules/rxjs/scheduler/AnimationFrameScheduler.js","node_modules/rxjs/scheduler/AsapAction.js","node_modules/rxjs/scheduler/AsapScheduler.js","node_modules/rxjs/scheduler/AsyncAction.js","node_modules/rxjs/scheduler/AsyncScheduler.js","node_modules/rxjs/scheduler/QueueAction.js","node_modules/rxjs/scheduler/QueueScheduler.js","node_modules/rxjs/scheduler/VirtualTimeScheduler.js","node_modules/rxjs/scheduler/animationFrame.js","node_modules/rxjs/scheduler/asap.js","node_modules/rxjs/scheduler/async.js","node_modules/rxjs/scheduler/queue.js","node_modules/rxjs/symbol/iterator.js","node_modules/rxjs/symbol/observable.js","node_modules/rxjs/symbol/rxSubscriber.js","node_modules/rxjs/testing/ColdObservable.js","node_modules/rxjs/testing/HotObservable.js","node_modules/rxjs/testing/SubscriptionLog.js","node_modules/rxjs/testing/SubscriptionLoggable.js","node_modules/rxjs/testing/TestScheduler.js","node_modules/rxjs/util/AnimationFrame.js","node_modules/rxjs/util/ArgumentOutOfRangeError.js","node_modules/rxjs/util/EmptyError.js","node_modules/rxjs/util/FastMap.js","node_modules/rxjs/util/Immediate.js","node_modules/rxjs/util/Map.js","node_modules/rxjs/util/MapPolyfill.js","node_modules/rxjs/util/ObjectUnsubscribedError.js","node_modules/rxjs/util/Set.js","node_modules/rxjs/util/TimeoutError.js","node_modules/rxjs/util/UnsubscriptionError.js","node_modules/rxjs/util/applyMixins.js","node_modules/rxjs/util/assign.js","node_modules/rxjs/util/errorObject.js","node_modules/rxjs/util/identity.js","node_modules/rxjs/util/isArray.js","node_modules/rxjs/util/isArrayLike.js","node_modules/rxjs/util/isDate.js","node_modules/rxjs/util/isFunction.js","node_modules/rxjs/util/isNumeric.js","node_modules/rxjs/util/isObject.js","node_modules/rxjs/util/isPromise.js","node_modules/rxjs/util/isScheduler.js","node_modules/rxjs/util/noop.js","node_modules/rxjs/util/not.js","node_modules/rxjs/util/pipe.js","node_modules/rxjs/util/root.js","node_modules/rxjs/util/subscribeToResult.js","node_modules/rxjs/util/toSubscriber.js","node_modules/rxjs/util/tryCatch.js","node_modules/timers-browserify/main.js","node_modules/tinymce/tinymce.js","node_modules/xlsx/dist/cpexcel.js","node_modules/xlsx/jszip.js","node_modules/xlsx/xlsx.js","ts/app.ts","ts/components/about/about.ts","ts/components/application.ts","ts/components/authentication/ChangePassword.ts","ts/components/authentication/ForgotPassword.ts","ts/components/authentication/NewPassword.ts","ts/components/authentication/login.ts","ts/components/authentication/logout.ts","ts/components/complaint/complaintBase.ts","ts/components/complaint/complaintEntry.ts","ts/components/compliment/complimentBase.ts","ts/components/compliment/complimentEntry.ts","ts/components/general/caseTypeDropdownBox.ts","ts/components/general/controlBase.ts","ts/components/general/conversation.ts","ts/components/general/conversationentry.ts","ts/components/general/customerChecklistCombo.ts","ts/components/general/customerDropdownBox.ts","ts/components/general/durationPanel.ts","ts/components/general/environmentChecklistCombo.ts","ts/components/general/environmentDropdownBox.ts","ts/components/general/fileDropdownList.ts","ts/components/general/fileUploader.ts","ts/components/general/manageWatchers.ts","ts/components/general/personTypeAhead.ts","ts/components/general/priorityChecklistCombo.ts","ts/components/general/priorityDropdownBox.ts","ts/components/general/prioritybar.ts","ts/components/general/recentCases.ts","ts/components/general/richtexteditor.ts","ts/components/general/roletoggleswitch.ts","ts/components/general/savedialog.ts","ts/components/general/serviceCaseBase.ts","ts/components/general/serviceCaseEdit.ts","ts/components/general/servicecasetable.ts","ts/components/general/severityAssessment.ts","ts/components/general/severityChecklistCombo.ts","ts/components/general/severityDropdownBox.ts","ts/components/general/severityIcon.ts","ts/components/general/severitybar.ts","ts/components/general/statusChecklistCombo.ts","ts/components/general/statusbuttons.ts","ts/components/home.ts","ts/components/mainmenu.ts","ts/components/other/other.ts","ts/components/problem/problemBase.ts","ts/components/problem/problemEdit.ts","ts/components/problem/problemEntry.ts","ts/components/reports/reports.ts","ts/components/request/requestBase.ts","ts/components/request/requestEdit.ts","ts/components/request/requestEntry.ts","ts/components/search/projectSearch.ts","ts/components/search/projectTab.ts","ts/components/search/search.ts","ts/components/search/searchtab.ts","ts/components/search/simpleSearch.ts","ts/config.ts","ts/constants.ts","ts/controls/checklist.ts","ts/controls/checklistcombo.ts","ts/controls/datatable.ts","ts/controls/datetimebox.ts","ts/controls/dropdownbox.ts","ts/controls/dropdownlist.ts","ts/controls/editor/imageplugin.ts","ts/controls/editor/pasteplugin.ts","ts/controls/editor/texteditor.ts","ts/controls/editor/theme.ts","ts/controls/fqautosizetextarea.ts","ts/controls/fqfiledrop.ts","ts/controls/fqtextarea.ts","ts/controls/inlinetexteditor.ts","ts/controls/numbereditbox.ts","ts/controls/processingIndicator.ts","ts/controls/pushbutton.ts","ts/controls/pushicon.ts","ts/controls/radiobar.ts","ts/controls/radiobuttons.ts","ts/controls/roomdivider.ts","ts/controls/scorebox.ts","ts/controls/section.ts","ts/controls/texteditbox.ts","ts/controls/toggleswitch.ts","ts/directives/applicationSetting.ts","ts/directives/broadcast-size.ts","ts/directives/min-max-date.ts","ts/directives/only-numeric.ts","ts/directives/watch-size.ts","ts/filters/Translation.ts","ts/filters/firstcapital.ts","ts/filters/htmltrusted.ts","ts/filters/isodate.ts","ts/filters/linefeedtobreak.ts","ts/interfaces/ILiteEvent.ts","ts/interfaces/iFqs.ts","ts/interfaces/iLiteEvent.ts","ts/models/complaint.ts","ts/models/compliment.ts","ts/models/file.ts","ts/models/person.ts","ts/models/recordHistory.ts","ts/models/recordReport.ts","ts/models/serviceCase.ts","ts/services/IsProcessingService.ts","ts/services/TranslationService.ts","ts/services/authenticationApiService.ts","ts/services/authenticationService.ts","ts/services/authorizationService.ts","ts/services/cache.ts","ts/services/dialogService.ts","ts/services/exportToExcelService.ts","ts/services/fileReaderService.ts","ts/services/fiqassistApi/FileService.ts","ts/services/fiqassistApi/fiqassistApiServiceBase.ts","ts/services/fiqassistApi/fiqassistService.ts","ts/services/fiqassistApi/homeService.ts","ts/services/fiqassistApi/reportService.ts","ts/services/fiqassistApi/serviceCaseService.ts","ts/services/fiqassistApi/userService.ts","ts/services/fqsService.ts","ts/services/isProcessingService.ts","ts/services/logService.ts","ts/services/ngLogListener.ts","ts/services/serviceBase.ts","ts/services/serviceCaseProjectService.ts","ts/services/serviceCaseSearchService.ts","ts/services/session.ts"],"names":[],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/iCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7nDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpuBA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpvBA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/lPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtJA;;;ACAA;AACA;AACA;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACv0QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChMA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9GA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC3jgDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC19CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC5xRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","file":"../app.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i $elem[0].focus(), 200);\r\n }\r\n}\r\n\r\n@Directive({\r\n module: FqComponents,\r\n selector: 'focusSelect'\r\n})\r\nexport class FocusSelect implements angular.IDirective {\r\n constructor( @Inject('$timeout') private $timeout: angular.ITimeoutService) {\r\n\r\n }\r\n link($scope: angular.IScope, $elem: angular.IAugmentedJQuery, $attr: angular.IAttributes) {\r\n if (!!$attr[\"focusSelect\"])\r\n this.$timeout(() => ($elem[0]).select(), 200);\r\n }\r\n};\r\n","'use strict';\r\n\r\nimport { FqComponents } from \"../index\";\r\nimport { DateTime } from \"@fiqas/utils\";\r\nimport { Directive, Inject, NgUtils } from \"@fiqas/angular-utils\";\r\nimport * as angular from 'angular';\r\n\r\nexport interface ITimeFormatterParameter {\r\n basedate: string;\r\n minvalue: string;\r\n maxvalue: string;\r\n onblur: string;\r\n}\r\n\r\n@Directive({\r\n module: FqComponents,\r\n selector: 'timeFormatter'\r\n})\r\nexport class TimeFormatter implements angular.IDirective {\r\n static numbers = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105];\r\n static arrows = [37, 38, 39, 40];\r\n static semicolon = 186;\r\n static escape = 27;\r\n static backspace = 8;\r\n static del = 46;\r\n static enter = 13;\r\n static tab = 9;\r\n static others = [TimeFormatter.backspace, TimeFormatter.tab, TimeFormatter.enter, 16, 17, 18, TimeFormatter.escape, 45, TimeFormatter.del];\r\n\r\n constructor(\r\n @Inject('$filter') private $filter: angular.IFilterService,\r\n @Inject('$timeout') private $timeout: angular.ITimeoutService,\r\n @Inject('$parse') private $parse: angular.IParseService) {\r\n }\r\n\r\n priority = 1000;\r\n restrict = 'A';\r\n require = 'ngModel';\r\n\r\n rawBaseDate: string;\r\n _baseDate: Date;\r\n get baseDate() {\r\n return this._baseDate ? this._baseDate.clone() : null;\r\n }\r\n set baseDate(value: Date) {\r\n this._baseDate = value;\r\n }\r\n\r\n rawMinValue: string;\r\n _minDate: Date;\r\n get minDate() {\r\n return !!this._minDate ? this._minDate.clone() : null;\r\n }\r\n set minDate(value: Date) {\r\n this._minDate = value;\r\n }\r\n\r\n rawMaxValue: string;\r\n _maxDate: Date;\r\n get maxDate() {\r\n return !!this._maxDate ? this._maxDate.clone() : null;\r\n }\r\n set maxDate(value: Date) {\r\n this._maxDate = value;\r\n }\r\n\r\n link($scope: angular.IScope, $elem: angular.IAugmentedJQuery, $attr: angular.IAttributes, ctrl: angular.INgModelController) {\r\n var params = angular.fromJson($attr[\"timeFormatter\"]);\r\n\r\n this.rawBaseDate = NgUtils.ParseExpressionOrValue(params.basedate, this.$parse, $scope);\r\n this.baseDate = Date.parseOrNull(this.rawBaseDate);\r\n\r\n this.rawMinValue = NgUtils.ParseExpressionOrValue(params.minvalue || \"\", this.$parse, $scope);\r\n this.minDate = !this.rawMinValue ? null :\r\n this.rawMinValue.length == 5 && this.rawMinValue.indexOf(\":\") > -1 ? DateTime.TimeToDateTime(this.rawMinValue, this.baseDate) :\r\n new Date(this.rawMinValue);\r\n\r\n this.rawMaxValue = NgUtils.ParseExpressionOrValue(params.maxvalue || \"\", this.$parse, $scope);\r\n this.maxDate = !this.rawMaxValue ? null :\r\n this.rawMaxValue.length == 5 && this.rawMaxValue.indexOf(\":\") > -1 ? DateTime.TimeToDateTime(this.rawMaxValue, this.baseDate) :\r\n Date.parseOrNull(this.rawMaxValue);\r\n\r\n $elem.bind(\"keydown\", (e) => {\r\n if (TimeFormatter.others.concat(TimeFormatter.arrows).concat(TimeFormatter.numbers).indexOf(e.keyCode) == -1) {\r\n e.preventDefault();\r\n if (e.keyCode != TimeFormatter.semicolon)\r\n return;\r\n }\r\n if (e.keyCode == 37 || e.keyCode == 39)\r\n e.stopPropagation();\r\n\r\n var value = $elem.val();\r\n if (e.keyCode == TimeFormatter.backspace || e.keyCode == TimeFormatter.del) {\r\n if (value.length == 3)\r\n $elem.val(value.replace(\":\", \"\"));\r\n } else if (e.keyCode == TimeFormatter.semicolon && value.length == 1) {\r\n $elem.val(\"0\" + value + \":\");\r\n } else if ([TimeFormatter.semicolon].concat(TimeFormatter.numbers).indexOf(e.keyCode) > -1) {\r\n if (value.length == 2)\r\n $elem.val(value + \":\");\r\n } else if (e.keyCode == TimeFormatter.escape) {\r\n $elem.val(undefined);\r\n ctrl.$rollbackViewValue();\r\n $elem.blur();\r\n } else if (e.keyCode == TimeFormatter.enter) {\r\n $elem.blur();\r\n } else if (e.keyCode == TimeFormatter.tab) {\r\n if (value.length > 0 && value.length < 5) {\r\n if (value.length == 1)\r\n value = \"0\" + value;\r\n value = (value + \"000\").split(\"\");\r\n value[2] = \":\";\r\n value = value.slice(0, 5).join(\"\");\r\n $elem.val(value);\r\n ctrl.$setViewValue(value, \"tab\");\r\n }\r\n }\r\n\r\n });\r\n\r\n $elem.bind('blur', (e) => {\r\n var onblur = this.$parse(params.onblur);\r\n if (onblur) {\r\n onblur($scope, { $value: $elem.val() });\r\n }\r\n });\r\n\r\n $elem.bind(\"keyup\", (e) => {\r\n var values = $elem.val().split(\":\");\r\n if (values.length > 1 && values[1] > 59)\r\n values[1] = 59;\r\n if (values[0] > 23) {\r\n values[0] = 24;\r\n if (values.length > 1) {\r\n var nv = \"\";\r\n for (var v = 0; v < values[1].length; v++)\r\n nv += \"0\";\r\n values[1] = nv;\r\n }\r\n }\r\n $elem.val(values.join(\":\"));\r\n });\r\n\r\n ctrl.$parsers.push(v=> this.parse(ctrl, v));\r\n ctrl.$formatters.push(v=> this.format(v));\r\n }\r\n\r\n parse(ctrl: angular.INgModelController, val: any) {\r\n if (val.toISOString)\r\n return val.toISOString();\r\n\r\n if (val.length == 5) {\r\n var date = new Date(ctrl.$modelValue);\r\n\r\n if (this.baseDate.isValid())\r\n date = this.baseDate;\r\n else if (!date.isValid())\r\n date = new Date();\r\n\r\n var minutes = val.substr(3, 2);\r\n if (minutes > 59)\r\n minutes = 59;\r\n\r\n var hours = val.substr(0, 2);\r\n if (hours > 23) {\r\n hours = 24;\r\n minutes = 0;\r\n }\r\n date.setHours(hours);\r\n date.setMinutes(minutes);\r\n\r\n if (date.isValid()) {\r\n if (this.minDate && date < this.minDate)\r\n return this.minDate.toISOString();\r\n if (this.maxDate && date > this.maxDate)\r\n return this.maxDate.toISOString();\r\n\r\n return date.toISOString();\r\n }\r\n }\r\n return ctrl.$modelValue;\r\n }\r\n\r\n format(val) {\r\n if (val) {\r\n var date = Date.parseOrNull(val)\r\n if (date != null)\r\n return this.$filter('date')(date, \"HH:mm\");\r\n }\r\n return \"\";\r\n }\r\n}","import * as angular from 'angular';\r\nimport { NgUtils } from \"@fiqas/angular-utils\";\r\nexport var FqComponents = NgUtils.DefineModule(\"FqComponents\",[]);\r\nexport * from \"./directives/focus\";\r\nexport * from \"./directives/timeFormatter\";","'use strict';\r\n\r\ndeclare global {\r\n /**\r\n * ISO 8601 formatted date time string\r\n * 'yyyy-MM-ddThh:mm:ssZ'\r\n */\r\n interface ISODateTimeString extends String { }\r\n\r\n /**\r\n * ISO 8601 formatted date time string\r\n * 'yyyy-MM-dd'\r\n */\r\n interface ISODateString extends String { }\r\n\r\n interface DateConstructor {\r\n /**\r\n * Tries to parse a Date from a string, returns 'null' on failure\r\n * @param date The date string to parse\r\n */\r\n parseOrNull(date: string | ISODateString | ISODateTimeString): Date;\r\n\r\n new (vd: ISODateString): Date;\r\n new (vd: ISODateTimeString): Date;\r\n\r\n /**\r\n * Compare two dates and return a negative, zero or positive value;\r\n * eg. negative: other is higher, zero: other is equal, positive: this is higher\r\n */\r\n compare(a: Date, b: Date): number;\r\n\r\n diff(a: Date, b: Date): { days: number, hours: number, minutes: number, seconds: number, milliseconds: number }\r\n\r\n today(): Date;\r\n\r\n }\r\n\r\n interface Date {\r\n /**\r\n * Clone this Date as a new Date object\r\n */\r\n clone(): Date;\r\n\r\n /**\r\n * Returns a new Date with n days added\r\n * @param days The number of days to add\r\n */\r\n addDays: (days: number) => Date;\r\n\r\n /**\r\n * Return a ISO8601 date string \"yyyy-MM-dd\"\r\n */\r\n toISODateString: () => ISODateString;\r\n\r\n /**\r\n * Return a ISO8601 date/time string \"yyyy-MM-ddThh:mm:ddZ\"\r\n */\r\n toISODateTimeString: () => ISODateTimeString;\r\n\r\n /**\r\n * Checks if the date is indeed valid\r\n */\r\n isValid(): boolean;\r\n\r\n /**\r\n * Compare this date to another date and return a negative, zero or positive value;\r\n * eg. negative: other is higher, zero: other is equal, positive: this is higher\r\n */\r\n compare(other: Date): number;\r\n\r\n /**\r\n * Compare this date to another date, and return if they are equal\r\n */\r\n equals(other: Date): boolean;\r\n }\r\n}\r\n\r\nDate.today = function () {\r\n var d = new Date();\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n}\r\n\r\nDate.parseOrNull = function (date: string | ISODateString | ISODateTimeString) {\r\n if (date === undefined || date === null)\r\n return null;\r\n var d = new Date(date);\r\n return d.isValid() ? d : null;\r\n}\r\n\r\nDate.compare = function (a: Date, b: Date) {\r\n if (!a && !b)\r\n return 0;\r\n if (!a && b)\r\n return 1;\r\n if (a && !b)\r\n return -1;\r\n return a.getTime() - b.getTime();\r\n}\r\n\r\nDate.diff = function (a: Date, b: Date) {\r\n if (!a)\r\n throw \"Date a cannot be null\";\r\n if (!b)\r\n throw \"Date b cannot be null\";\r\n var am = a.getTime();\r\n var bm = b.getTime();\r\n var ms = bm - am;\r\n var s = Math.round(ms / 1000);\r\n var m = Math.round(s / 60);\r\n var h = Math.round(m / 60);\r\n var d = Math.round(h / 24);\r\n return {\r\n days: d,\r\n hours: h,\r\n minutes: m,\r\n seconds: s,\r\n milliseconds: ms\r\n }\r\n}\r\n\r\nDate.prototype.compare = function (this: Date, other: Date) {\r\n return Date.compare(this, other);\r\n}\r\n\r\nDate.prototype.equals = function (this: Date, other: Date) {\r\n return this.compare(other) === 0;\r\n}\r\n\r\nDate.prototype.clone = function (this: Date) {\r\n return new Date(this.getTime());\r\n}\r\n\r\nDate.prototype.addDays = function (this: Date, days: number) {\r\n var date = this.clone();\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n}\r\n\r\nDate.prototype.toISODateString = function (this: Date) {\r\n return `${this.getFullYear()}-${(this.getMonth() + 101).toString().substr(1)}-${(this.getDate() + 100).toString().substr(1)}`;\r\n}\r\n\r\nDate.prototype.toISODateTimeString = function (this: Date) {\r\n return this.toISOString();\r\n}\r\n\r\nDate.prototype.isValid = function (this: Date) {\r\n return this.toString() != \"Invalid Date\";\r\n}\r\n\r\nexport module DateTime {\r\n /**\r\n * Takes a time formatter string (HH:mm:ss?) and sets it on a date object;\r\n * If no baseDate is supplied, today is used\r\n * @param value time string\r\n * @param baseDate optional date to set time on.\r\n */\r\n export function TimeToDateTime(value: string, baseDate?: Date) {\r\n var m = value.split(\":\");\r\n var date = (baseDate || new Date()).clone();\r\n date.setHours(parseInt(m[0]));\r\n date.setMinutes(parseInt(m[1]));\r\n return date;\r\n }\r\n}\r\n","export function Memoize(): MethodDecorator {\r\n return function memoizeDecorator(target: Object, propertyKey: string | symbol,\r\n propertyDescriptor: TypedPropertyDescriptor): TypedPropertyDescriptor | void {\r\n if (!propertyDescriptor || !propertyDescriptor.get)\r\n return;\r\n\r\n let fieldName = `_${propertyKey}.memoized`\r\n return {\r\n configurable: false,\r\n get: function () {\r\n if (this[fieldName] === undefined)\r\n this[fieldName] = propertyDescriptor.get.call(this);\r\n\r\n return this[fieldName];\r\n },\r\n set: propertyDescriptor.set ? function (value: any) {\r\n this[fieldName] = undefined;\r\n propertyDescriptor.set.call(this, value);\r\n } : function (_) {\r\n this[fieldName] = undefined;\r\n }\r\n };\r\n }\r\n}\r\n\r\nexport function LocalStorage(storageKey: string, backingfieldname?: string): MethodDecorator {\r\n return function localStorageDecorator(target: Object, propertyKey: string | symbol,\r\n propertyDescriptor: TypedPropertyDescriptor): TypedPropertyDescriptor | void {\r\n if (!propertyDescriptor || !propertyDescriptor.get)\r\n return;\r\n var cached = localStorage[storageKey];\r\n if (cached !== undefined){\r\n if(backingfieldname)\r\n target[backingfieldname] = JSON.parse(cached);\r\n else if(propertyDescriptor.set)\r\n propertyDescriptor.set.call(target, JSON.parse(cached));\r\n }\r\n\r\n var cacheValue = (value) => {\r\n if (value === null || value === undefined)\r\n localStorage.removeItem(storageKey);\r\n else\r\n localStorage[storageKey] = JSON.stringify(value);\r\n }\r\n\r\n var result: TypedPropertyDescriptor = {\r\n configurable: false,\r\n get: function () {\r\n var value = propertyDescriptor.get.call(this);\r\n cacheValue(value);\r\n return value;\r\n }\r\n };\r\n if (propertyDescriptor.set)\r\n result.set = function (value: any) {\r\n cacheValue(value)\r\n propertyDescriptor.set.call(this, value);\r\n }\r\n return result;\r\n }\r\n}","'use strict';\r\nexport module Utils {\r\n /**\r\n * Transforms a single level Json dataset to a query parameter string\r\n * @param data Single level Json dataset to convert\r\n */\r\n export function TransformJsonToFormData(data: Object) {\r\n var db: string[] = [];\r\n for (var prop in data) {\r\n if (!data.hasOwnProperty(prop))\r\n continue;\r\n db.push(`${encodeURIComponent(prop)}=${encodeURIComponent(data[prop])}`)\r\n }\r\n return db.join(\"&\").replace(/%20/g, \"+\");\r\n }\r\n /**\r\n * Iterate over all properties of type P on a given object and apply a function to each\r\n * @param {any} object target object\r\n * @param {(property:P, key:string) => void } apply function to apply\r\n * @param {(property:P, key:string) => boolean = _ => true} filter optional filter function, return false to exclude property\r\n */\r\n export function forEachProperty

(object: any, apply: (property: P, key: string) => void, filter: (property: P, key: string) => boolean = _ => true) {\r\n for (var key in object) {\r\n var prop: P = object[key];\r\n if (filter(prop, key))\r\n apply(prop, key);\r\n }\r\n }\r\n\r\n export function forEachKey(dict: { [key: string]: T }, apply: (property: T, key: string) => void, filter: (property: T, key: string) => boolean = _ => true) {\r\n return forEachProperty(dict, apply, filter);\r\n }\r\n\r\n /**\r\n * Safely get the value of a nested property, or 'undefined' on error\r\n * @param object target\r\n * @param getter property accesser\r\n */\r\n export function getNestedPropertyValue(object: T, getter: (object: T) => V): V {\r\n try {\r\n return getter(object);\r\n } catch (_) {\r\n return undefined;\r\n }\r\n\r\n }\r\n}\r\n\r\n///Generic extensions\r\nif (!(String.prototype).startsWith) {\r\n (String.prototype).startsWith = function (searchString, position) {\r\n position = position || 0;\r\n return this.substr(position, searchString.length) === searchString;\r\n };\r\n}","export * from \"./general\";\r\nexport * from \"./datetime\";\r\nexport * from \"./keycodes\";\r\nexport * from \"./decorators\";","export class KeyCodes {\r\n public static backspace = 8;\r\n public static tab = 9;\r\n public static clear = 12;\r\n public static enter = 13;\r\n public static shift = 16;\r\n public static ctrl = 17;\r\n public static alt = 18;\r\n public static pause = 19;\r\n public static break = 19;\r\n public static capsLock = 20;\r\n public static escape = 27;\r\n public static space = 32;\r\n public static pageUp = 33;\r\n public static pageDown = 34;\r\n public static end = 35;\r\n public static home = 36;\r\n public static leftArrow = 37;\r\n public static upArrow = 38;\r\n public static rightArrow = 39;\r\n public static downArrow = 40;\r\n public static select = 41;\r\n public static printScreen = 42;\r\n public static insert = 45;\r\n public static delete = 46;\r\n public static n0 = 48;\r\n public static n1 = 49;\r\n public static n2 = 50;\r\n public static n3 = 51;\r\n public static n4 = 52;\r\n public static n5 = 53;\r\n public static n6 = 54;\r\n public static n7 = 55;\r\n public static n8 = 56;\r\n public static n9 = 57;\r\n public static a = 65;\r\n public static b = 66;\r\n public static c = 67;\r\n public static d = 68;\r\n public static e = 69;\r\n public static f = 70;\r\n public static g = 71;\r\n public static h = 72;\r\n public static i = 73;\r\n public static j = 74;\r\n public static k = 75;\r\n public static l = 76;\r\n public static m = 77;\r\n public static n = 78;\r\n public static o = 79;\r\n public static p = 80;\r\n public static q = 81;\r\n public static r = 82;\r\n public static s = 83;\r\n public static t = 84;\r\n public static u = 85;\r\n public static v = 86;\r\n public static w = 87;\r\n public static x = 88;\r\n public static y = 89;\r\n public static z = 90;\r\n public static leftWindowKey = 91;\r\n public static rightWindowKey = 92;\r\n public static selectKey = 93;\r\n public static numpad0 = 96;\r\n public static numpad1 = 97;\r\n public static numpad2 = 98;\r\n public static numpad3 = 99;\r\n public static numpad4 = 100;\r\n public static numpad5 = 101;\r\n public static numpad6 = 102;\r\n public static numpad7 = 103;\r\n public static numpad8 = 104;\r\n public static numpad9 = 105;\r\n public static multiply = 106;\r\n public static add = 107;\r\n public static subtract = 109;\r\n public static decimalPoint = 110;\r\n public static divide = 111;\r\n public static f1 = 112;\r\n public static f2 = 113;\r\n public static f3 = 114;\r\n public static f4 = 115;\r\n public static f5 = 116;\r\n public static f6 = 117;\r\n public static f7 = 118;\r\n public static f8 = 119;\r\n public static f9 = 120;\r\n public static f10 = 121;\r\n public static f11 = 122;\r\n public static f12 = 123;\r\n public static numLock = 144;\r\n public static scrollLock = 145;\r\n public static semiColon = 186;\r\n public static equalSign = 187;\r\n public static comma = 188;\r\n public static dash = 189;\r\n public static period = 190;\r\n public static forwardSlash = 191;\r\n public static graveAccent = 192;\r\n public static openBracket = 219;\r\n public static backSlash = 220;\r\n public static singleQuote = 222;\r\n public static closeBraket = 221;\r\n public static numeric = [\r\n KeyCodes.n0,\r\n KeyCodes.n1,\r\n KeyCodes.n2,\r\n KeyCodes.n3,\r\n KeyCodes.n4,\r\n KeyCodes.n5,\r\n KeyCodes.n6,\r\n KeyCodes.n7,\r\n KeyCodes.n8,\r\n KeyCodes.n9,\r\n KeyCodes.numpad0,\r\n KeyCodes.numpad1,\r\n KeyCodes.numpad2,\r\n KeyCodes.numpad3,\r\n KeyCodes.numpad4,\r\n KeyCodes.numpad5,\r\n KeyCodes.numpad6,\r\n KeyCodes.numpad7,\r\n KeyCodes.numpad8,\r\n KeyCodes.numpad9,\r\n ];\r\n public static alpha = [\r\n KeyCodes.a,\r\n KeyCodes.b,\r\n KeyCodes.c,\r\n KeyCodes.d,\r\n KeyCodes.e,\r\n KeyCodes.f,\r\n KeyCodes.g,\r\n KeyCodes.h,\r\n KeyCodes.i,\r\n KeyCodes.j,\r\n KeyCodes.k,\r\n KeyCodes.l,\r\n KeyCodes.m,\r\n KeyCodes.n,\r\n KeyCodes.o,\r\n KeyCodes.p,\r\n KeyCodes.q,\r\n KeyCodes.r,\r\n KeyCodes.s,\r\n KeyCodes.t,\r\n KeyCodes.u,\r\n KeyCodes.v,\r\n KeyCodes.w,\r\n KeyCodes.x,\r\n KeyCodes.y,\r\n KeyCodes.z,\r\n ];\r\n public static Fkeys =\r\n [\r\n KeyCodes.f1,\r\n KeyCodes.f2,\r\n KeyCodes.f3,\r\n KeyCodes.f4,\r\n KeyCodes.f5,\r\n KeyCodes.f6,\r\n KeyCodes.f7,\r\n KeyCodes.f8,\r\n KeyCodes.f9,\r\n KeyCodes.f10,\r\n KeyCodes.f11,\r\n KeyCodes.f12,\r\n ];\r\n}","'use strict';\r\nimport { NgUtils } from \"./utils\";\r\nimport * as angular from 'angular';\r\n\r\ndeclare var Reflect: any;\r\n\r\nexport declare interface IDecoratorParameters {\r\n module: angular.IModule,\r\n selector: string\r\n}\r\n\r\nexport declare interface IComponentParameters extends IDecoratorParameters, angular.IComponentOptions {\r\n\r\n}\r\n\r\nexport function Component(parameters: IComponentParameters): ClassDecorator {\r\n var module = parameters.module;\r\n var selector = parameters.selector;\r\n delete parameters.module;\r\n delete parameters.selector;\r\n\r\n return (target: TFunction) => {\r\n parameters.controller = target;\r\n if (target.prototype._bindings) {\r\n parameters.bindings = parameters.bindings || {};\r\n for (var b in target.prototype._bindings) {\r\n parameters.bindings[b] = target.prototype._bindings[b];\r\n }\r\n delete target.prototype._bindings\r\n }\r\n module.component(selector, parameters);\r\n target[\"_selector\"] = selector;\r\n target[\"_moduleName\"] = module.name;\r\n return target;\r\n };\r\n}\r\n\r\nexport interface IComponent {\r\n /**\r\n * Called on each controller after all the controllers on an element have been constructed and had their bindings initialized (and before the pre & post linking functions for the directives on this element). This is a good place to put initialization code for your controller.\r\n */\r\n $onInit?(): void\r\n\r\n /**\r\n * Called whenever one-way bindings are updated. The changesObj is a hash whose keys are the names of the bound properties that have changed, and the values are an object of the form { currentValue, previousValue, isFirstChange() }. Use this hook to trigger updates within a component such as cloning the bound value to prevent accidental mutation of the outer value. \r\n */\r\n $onChanges?(changesObj: { currentValue: any, previousValue: any, isFirstChange: () => any }): void\r\n\r\n /**\r\n * Called on a controller when its containing scope is destroyed. Use this hook for releasing external resources, watches and event handlers.\r\n */\r\n $onDestroy?(): void\r\n\r\n /** \r\n * Called after this controller's element and its children have been linked. Similar to the post-link function this hook can be used to set up DOM event handlers and do direct DOM manipulation. Note that child elements that contain templateUrl directives will not have been compiled and linked since they are waiting for their template to load asynchronously and their own compilation and linking has been suspended until that occurs. This hook can be considered analogous to the ngAfterViewInit and ngAfterContentInit hooks in Angular 2. Since the compilation process is rather different in Angular 1 there is no direct mapping and care should be taken when upgrading.\r\n */\r\n $postLink?(): void\r\n}\r\n\r\n\r\nexport function Injectable(parameters: IDecoratorParameters): ClassDecorator {\r\n return (target: TFunction) => {\r\n parameters.module.service(parameters.selector, target);\r\n return target;\r\n }\r\n}\r\n\r\nexport interface IPipeParameters extends IDecoratorParameters {\r\n pure?: boolean\r\n}\r\n\r\nexport function Pipe(parameters: IPipeParameters): MethodDecorator {\r\n return (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => {\r\n var pipe: Function = target[propertyKey];\r\n if (parameters.pure !== true) {\r\n var opipe = pipe;\r\n pipe = function () {\r\n var pipefunc = opipe.apply(opipe, arguments);\r\n pipefunc.$stateful = true;\r\n return pipefunc;\r\n }\r\n if (opipe.$inject !== undefined)\r\n pipe.$inject = opipe.$inject;\r\n }\r\n parameters.module.filter(parameters.selector, pipe);\r\n return target;\r\n }\r\n}\r\n\r\nexport function Directive(parameters: IDecoratorParameters): ClassDecorator {\r\n return (target: TFunction) => {\r\n parameters.module.directive(parameters.selector, NgUtils.Factory(target));\r\n return target;\r\n }\r\n}\r\n\r\nexport function Config({ module }: { module: angular.IModule }): ClassDecorator {\r\n return (target: TFunction) => {\r\n module.config(target);\r\n return target;\r\n }\r\n}\r\n\r\n/**\r\n * Declares a data-bound input property.\r\n *\r\n * Angular automatically updates data-bound properties during change detection.\r\n *\r\n * `Input` takes an optional parameter that specifies the name\r\n * used when instantiating a component in the template. When not provided,\r\n * the name of the decorated property is used.\r\n *\r\n */\r\nexport function Input(bindingPropertyName: string = \"\"): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n target._bindings = target._bindings || {};\r\n target._bindings[propertyKey] = `<${bindingPropertyName}`;\r\n };\r\n}\r\n\r\n/**\r\n * Declares an event-bound output property.\r\n *\r\n * When an output property emits an event, an event handler attached to that event\r\n * the template is invoked.\r\n *\r\n * `Output` takes an optional parameter that specifies the name\r\n * used when instantiating a component in the template. When not provided,\r\n * the name of the decorated property is used.\r\n */\r\nexport function Output(bindingPropertyName: string = \"\", addBuffer = false): any {\r\n return function outputDecorator(target: Object, propertyKey: string | symbol, propertyDescriptor: TypedPropertyDescriptor): TypedPropertyDescriptor | void {\r\n target[\"_bindings\"] = target[\"_bindings\"] || {};\r\n target[\"_bindings\"][propertyKey] = `&${bindingPropertyName || \"\"}`;\r\n if (!addBuffer) {\r\n if (!target[propertyKey])\r\n target[propertyKey] = () => { };\r\n return;\r\n }\r\n return {\r\n configurable: false,\r\n get: (!propertyDescriptor || propertyDescriptor.get) ? function () {\r\n var val = propertyDescriptor === undefined ? this[`_${propertyKey}`] : propertyDescriptor.get.call(this);\r\n if (val !== undefined)\r\n return val;\r\n\r\n return function () {\r\n if (val !== undefined)\r\n val.apply(this, arguments);\r\n else\r\n this[`_${propertyKey}.buffer`] = (this[`_${propertyKey}.buffer`] || []).concat(arguments);\r\n }\r\n } : undefined,\r\n set: (!propertyDescriptor || propertyDescriptor.set) ? function (v: Function) {\r\n var buffer: IArguments[] = this[`_${propertyKey}.buffer`] || [];\r\n propertyDescriptor === undefined ? this[`_${propertyKey}`] = v : propertyDescriptor.set.call(this, v);\r\n if (buffer.length > 0) {\r\n for (var b of buffer) {\r\n v.apply(this, b);\r\n }\r\n this[`_${propertyKey}.buffer`] = [];\r\n }\r\n } : undefined\r\n };\r\n };\r\n}\r\n\r\nexport type OutputArgs = (args: T) => void;\r\n\r\n/**\r\n * Declares an two-way data-bound property.\r\n * \r\n * Angular automatically updates data-bound properties during change detection.\r\n *\r\n * `Binding` takes an optional parameter that specifies the name\r\n * used when instantiating a component in the template. When not provided,\r\n * the name of the decorated property is used.\r\n */\r\nexport function Binding(bindingPropertyName: string = \"\"): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n target._bindings = target._bindings || {};\r\n target._bindings[propertyKey] = `=${bindingPropertyName}`;\r\n };\r\n}\r\n\r\n/**\r\n * Declares a one time bound property.\r\n *\r\n * Angular reads the value of the attribute only once on creation\r\n * \r\n * `Attribute` takes an optional parameter that specifies the name\r\n * used when instantiating a component in the template. When not provided,\r\n * the name of the decorated property is used.\r\n */\r\nexport function Attribute(bindingPropertyName: string = \"\"): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n target._bindings = target._bindings || {};\r\n target._bindings[propertyKey] = `@${bindingPropertyName}`;\r\n };\r\n}\r\n\r\n\r\nexport function Inject(type?: string): ParameterDecorator {\r\n //var typeName = (typeof (type) == 'string') ? type : /^function\\s+([\\w\\$]+)\\s*\\(/.exec(type.toString())[1]\r\n return (target: Object, propertyKey: string | symbol, parameterIndex: number) => {\r\n var paramType: any = \"\";\r\n if (Reflect.hasMetadata('design:paramtypes', target))\r\n paramType = Reflect.getMetadata('design:paramtypes', target)[parameterIndex];\r\n type = type || paramType.selector || paramType.name\r\n if (!type)\r\n throw \"Unknown type, nothing to inject\"\r\n\r\n var injectable = propertyKey ? target[propertyKey] : target;\r\n if (!injectable.$inject)\r\n injectable.$inject = new Array();\r\n injectable.$inject[parameterIndex] = type;\r\n };\r\n}\r\n\r\nexport function Controller(parameters: IDecoratorParameters): ClassDecorator {\r\n return (target: TFunction) => {\r\n parameters.module.controller(parameters.selector, target);\r\n return target;\r\n }\r\n}\r\n\r\nexport function LegacyConstant(parameters: IDecoratorParameters): ClassDecorator {\r\n return (target: any) => {\r\n parameters.module.constant(parameters.selector, new target());\r\n return target;\r\n }\r\n}\r\n","'use strict';\r\nexport * from \"./utils\";\r\nexport * from \"./decorators\";\r\nexport * from \"./module\";","'use strict';\r\nimport * as angular from 'angular';\r\n\r\nexport class AngularModule {\r\n\tstatic Create(id: string, requires: string[]): angular.IModule {\r\n\t\treturn angular.module(id, requires);\r\n\t}\r\n}","'use strict';\r\nimport * as angular from 'angular';\r\n\r\nexport module NgUtils {\r\n export interface IInjectableFunction extends FunctionConstructor {\r\n $inject: any[];\r\n }\r\n\r\n /**\r\n * Takes a class, wraps it in a factory function which produces a class instance where the scope of all its methods are bound to itself (this)\r\n * @param type class which has a static $inject:any[] property\r\n */\r\n export function Factory(type: T): any[] {\r\n var t = ((type));\r\n t.$inject = t.$inject || [];\r\n return t.$inject.concat((...args) => {\r\n var boundType = t.bind.apply(type, [null].concat(args));\r\n var instance = new boundType();\r\n for (var prop in instance) {\r\n var func = instance[prop];\r\n if (typeof (func) == \"function\" && t.$inject.indexOf(prop) == -1)\r\n instance[prop] = func.bind(instance);\r\n }\r\n return instance;\r\n });\r\n }\r\n\r\n /**\r\n * Takes a string and recursively tries to resolve it using a given parse service and scope.\r\n * @param value Value to parse\r\n * @param $parse Parser to use\r\n * @param $scope Scope to use\r\n */\r\n export function ParseExpressionOrValue(value: string, $parse: angular.IParseService, $scope: angular.IScope) {\r\n try {\r\n var parsed = $parse(value)($scope);\r\n if (parsed !== undefined)\r\n return ParseExpressionOrValue(parsed, $parse, $scope);\r\n } catch (ex) {\r\n\r\n }\r\n return value;\r\n }\r\n\r\n export function DefineModule(moduleId: string, dependencies: string[]): angular.IModule {\r\n return angular.module(moduleId, dependencies);\r\n }\r\n}","(function(){\r\n///\r\n/**\r\n * @name ngOutlet\r\n *\r\n * @description\r\n * An ngOutlet is where resolved content goes.\r\n *\r\n * ## Use\r\n *\r\n * ```html\r\n *

\r\n * ```\r\n *\r\n * The value for the `ngOutlet` attribute is optional.\r\n */\r\nfunction ngOutletDirective($animate, $q, $rootRouter) {\r\n var rootRouter = $rootRouter;\r\n return {\r\n restrict: 'AE',\r\n transclude: 'element',\r\n terminal: true,\r\n priority: 400,\r\n require: ['?^^ngOutlet', 'ngOutlet'],\r\n link: outletLink,\r\n controller: (function () {\r\n function class_1() {\r\n }\r\n return class_1;\r\n })(),\r\n controllerAs: '$$ngOutlet'\r\n };\r\n function outletLink(scope, element, attrs, ctrls, $transclude) {\r\n var Outlet = (function () {\r\n function Outlet(controller, router) {\r\n this.controller = controller;\r\n this.router = router;\r\n }\r\n Outlet.prototype.cleanupLastView = function () {\r\n var _this = this;\r\n if (this.previousLeaveAnimation) {\r\n $animate.cancel(this.previousLeaveAnimation);\r\n this.previousLeaveAnimation = null;\r\n }\r\n if (this.currentScope) {\r\n this.currentScope.$destroy();\r\n this.currentScope = null;\r\n }\r\n if (this.currentElement) {\r\n this.previousLeaveAnimation = $animate.leave(this.currentElement);\r\n this.previousLeaveAnimation.then(function () { return _this.previousLeaveAnimation = null; });\r\n this.currentElement = null;\r\n }\r\n };\r\n Outlet.prototype.reuse = function (instruction) {\r\n var next = $q.when(true);\r\n var previousInstruction = this.currentInstruction;\r\n this.currentInstruction = instruction;\r\n if (this.currentController && this.currentController.$routerOnReuse) {\r\n next = $q.when(this.currentController.$routerOnReuse(this.currentInstruction, previousInstruction));\r\n }\r\n return next;\r\n };\r\n Outlet.prototype.routerCanReuse = function (nextInstruction) {\r\n var result;\r\n if (!this.currentInstruction ||\r\n this.currentInstruction.componentType !== nextInstruction.componentType) {\r\n result = false;\r\n }\r\n else if (this.currentController && this.currentController.$routerCanReuse) {\r\n result = this.currentController.$routerCanReuse(nextInstruction, this.currentInstruction);\r\n }\r\n else {\r\n result = nextInstruction === this.currentInstruction ||\r\n angular.equals(nextInstruction.params, this.currentInstruction.params);\r\n }\r\n return $q.when(result);\r\n };\r\n Outlet.prototype.routerCanDeactivate = function (instruction) {\r\n if (this.currentController && this.currentController.$routerCanDeactivate) {\r\n return $q.when(this.currentController.$routerCanDeactivate(instruction, this.currentInstruction));\r\n }\r\n return $q.when(true);\r\n };\r\n Outlet.prototype.deactivate = function (instruction) {\r\n if (this.currentController && this.currentController.$routerOnDeactivate) {\r\n return $q.when(this.currentController.$routerOnDeactivate(instruction, this.currentInstruction));\r\n }\r\n return $q.when();\r\n };\r\n Outlet.prototype.activate = function (instruction) {\r\n var _this = this;\r\n this.previousInstruction = this.currentInstruction;\r\n this.currentInstruction = instruction;\r\n var componentName = this.controller.$$componentName = instruction.componentType;\r\n if (typeof componentName !== 'string') {\r\n throw new Error('Component is not a string for ' + instruction.urlPath);\r\n }\r\n this.controller.$$template = '<' + dashCase(componentName) + ' $router=\"::$$router\">';\r\n this.controller.$$router = this.router.childRouter(instruction.componentType);\r\n this.controller.$$outlet = this;\r\n var newScope = scope.$new();\r\n newScope.$$router = this.controller.$$router;\r\n this.deferredActivation = $q.defer();\r\n var clone = $transclude(newScope, function (clone) {\r\n $animate.enter(clone, null, _this.currentElement || element);\r\n _this.cleanupLastView();\r\n });\r\n this.currentElement = clone;\r\n this.currentScope = newScope;\r\n return this.deferredActivation.promise;\r\n };\r\n return Outlet;\r\n })();\r\n var parentCtrl = ctrls[0], myCtrl = ctrls[1], router = (parentCtrl && parentCtrl.$$router) || rootRouter;\r\n myCtrl.$$currentComponent = null;\r\n router.registerPrimaryOutlet(new Outlet(myCtrl, router));\r\n }\r\n}\r\n/**\r\n * This directive is responsible for compiling the contents of ng-outlet\r\n */\r\nfunction ngOutletFillContentDirective($compile) {\r\n return {\r\n restrict: 'EA',\r\n priority: -400,\r\n require: 'ngOutlet',\r\n link: function (scope, element, attrs, ctrl) {\r\n var template = ctrl.$$template;\r\n element.html(template);\r\n $compile(element.contents())(scope);\r\n }\r\n };\r\n}\r\nfunction routerTriggerDirective($q) {\r\n return {\r\n require: '^ngOutlet',\r\n priority: -1000,\r\n link: function (scope, element, attr, ngOutletCtrl) {\r\n var promise = $q.when();\r\n var outlet = ngOutletCtrl.$$outlet;\r\n var currentComponent = outlet.currentController =\r\n element.controller(ngOutletCtrl.$$componentName);\r\n if (currentComponent.$routerOnActivate) {\r\n promise = $q.when(currentComponent.$routerOnActivate(outlet.currentInstruction, outlet.previousInstruction));\r\n }\r\n promise.then(outlet.deferredActivation.resolve, outlet.deferredActivation.reject);\r\n }\r\n };\r\n}\r\n/**\r\n * @name ngLink\r\n * @description\r\n * Lets you link to different parts of the app, and automatically generates hrefs.\r\n *\r\n * ## Use\r\n * The directive uses a simple syntax: `ng-link=\"componentName({ param: paramValue })\"`\r\n *\r\n * ### Example\r\n *\r\n * ```js\r\n * angular.module('myApp', ['ngComponentRouter'])\r\n * .controller('AppController', ['$rootRouter', function($rootRouter) {\r\n * $rootRouter.config({ path: '/user/:id', component: 'user' });\r\n * this.user = { name: 'Brian', id: 123 };\r\n * });\r\n * ```\r\n *\r\n * ```html\r\n *
\r\n * {{app.user.name}}\r\n *
\r\n * ```\r\n */\r\nfunction ngLinkDirective($rootRouter, $parse) {\r\n return { require: '?^^ngOutlet', restrict: 'A', link: ngLinkDirectiveLinkFn };\r\n function ngLinkDirectiveLinkFn(scope, element, attrs, ctrl) {\r\n var router = (ctrl && ctrl.$$router) || $rootRouter;\r\n if (!router) {\r\n return;\r\n }\r\n var navigationInstruction = null;\r\n var link = attrs.ngLink || '';\r\n function getLink(params) {\r\n navigationInstruction = router.generate(params);\r\n scope.$watch(function () { return router.isRouteActive(navigationInstruction); }, function (active) {\r\n if (active) {\r\n element.addClass('ng-link-active');\r\n }\r\n else {\r\n element.removeClass('ng-link-active');\r\n }\r\n });\r\n var navigationHref = navigationInstruction.toLinkUrl();\r\n return $rootRouter._location.prepareExternalUrl(navigationHref);\r\n }\r\n var routeParamsGetter = $parse(link);\r\n // we can avoid adding a watcher if it's a literal\r\n if (routeParamsGetter.constant) {\r\n var params = routeParamsGetter();\r\n element.attr('href', getLink(params));\r\n }\r\n else {\r\n scope.$watch(function () { return routeParamsGetter(scope); }, function (params) { return element.attr('href', getLink(params)); }, true);\r\n }\r\n element.on('click', function (event) {\r\n if (event.which !== 1 || !navigationInstruction) {\r\n return;\r\n }\r\n $rootRouter.navigateByInstruction(navigationInstruction);\r\n event.preventDefault();\r\n });\r\n }\r\n}\r\nfunction dashCase(str) {\r\n return str.replace(/[A-Z]/g, function (match) { return '-' + match.toLowerCase(); });\r\n}\r\n/*\r\n * A module for adding new a routing system Angular 1.\r\n */\r\nangular.module('ngComponentRouter', [])\r\n .directive('ngOutlet', ['$animate', '$q', '$rootRouter', ngOutletDirective])\r\n .directive('ngOutlet', ['$compile', ngOutletFillContentDirective])\r\n .directive('ngLink', ['$rootRouter', '$parse', ngLinkDirective])\r\n .directive('$router', ['$q', routerTriggerDirective]);\r\n\r\nangular.module('ngComponentRouter').\r\n value('$route', null). // can be overloaded with ngRouteShim\r\n // Because Angular 1 has no notion of a root component, we use an object with unique identity\r\n // to represent this. Can be overloaded with a component name\r\n value('$routerRootComponent', new Object()).\r\n\r\n // Unfortunately, $location doesn't expose what the current hashPrefix is\r\n // So we have to monkey patch the $locationProvider to capture this value\r\n provider('$locationHashPrefix', ['$locationProvider', $locationHashPrefixProvider]).\r\n factory('$rootRouter', ['$q', '$location', '$browser', '$rootScope', '$injector', '$routerRootComponent', '$locationHashPrefix', routerFactory]);\r\n\r\nfunction $locationHashPrefixProvider($locationProvider) {\r\n\r\n // Get hold of the original hashPrefix method\r\n var hashPrefixFn = $locationProvider.hashPrefix.bind($locationProvider);\r\n\r\n // Read the current hashPrefix (in case it was set before this monkey-patch occurred)\r\n var hashPrefix = hashPrefixFn();\r\n\r\n // Override the helper so that we can read any changes to the prefix (after this monkey-patch)\r\n $locationProvider.hashPrefix = function(prefix) {\r\n if (angular.isDefined(prefix)) {\r\n hashPrefix = prefix;\r\n }\r\n return hashPrefixFn(prefix);\r\n }\r\n\r\n // Return the final hashPrefix as the value of this service\r\n this.$get = function() { return hashPrefix; };\r\n}\r\n\r\nfunction routerFactory($q, $location, $browser, $rootScope, $injector, $routerRootComponent, $locationHashPrefix) {\r\n\r\n // When this file is processed, the line below is replaced with\r\n // the contents of `../lib/facades.es5`.\r\n function CONST() {\r\n return (function(target) {\r\n return target;\r\n });\r\n}\r\n\r\nfunction CONST_EXPR(expr) {\r\n return expr;\r\n}\r\n\r\nfunction isPresent (x) {\r\n return !!x;\r\n}\r\n\r\nfunction isBlank (x) {\r\n return !x;\r\n}\r\n\r\nfunction isString(obj) {\r\n return typeof obj === 'string';\r\n}\r\n\r\nfunction isType (x) {\r\n return typeof x === 'function';\r\n}\r\n\r\nfunction isStringMap(obj) {\r\n return typeof obj === 'object' && obj !== null;\r\n}\r\n\r\nfunction isArray(obj) {\r\n return Array.isArray(obj);\r\n}\r\n\r\nfunction getTypeNameForDebugging (fn) {\r\n return fn.name || 'Root';\r\n}\r\n\r\nvar PromiseWrapper = {\r\n resolve: function (reason) {\r\n return $q.when(reason);\r\n },\r\n\r\n reject: function (reason) {\r\n return $q.reject(reason);\r\n },\r\n\r\n catchError: function (promise, fn) {\r\n return promise.then(null, fn);\r\n },\r\n all: function (promises) {\r\n return $q.all(promises);\r\n }\r\n};\r\n\r\nvar RegExpWrapper = {\r\n create: function(regExpStr, flags) {\r\n flags = flags ? flags.replace(/g/g, '') : '';\r\n return new RegExp(regExpStr, flags + 'g');\r\n },\r\n firstMatch: function(regExp, input) {\r\n regExp.lastIndex = 0;\r\n return regExp.exec(input);\r\n },\r\n matcher: function (regExp, input) {\r\n regExp.lastIndex = 0;\r\n return { re: regExp, input: input };\r\n }\r\n};\r\n\r\nvar reflector = {\r\n annotations: function (fn) {\r\n //TODO: implement me\r\n return fn.annotations || [];\r\n }\r\n};\r\n\r\nvar MapWrapper = {\r\n create: function() {\r\n return new Map();\r\n },\r\n\r\n get: function(m, k) {\r\n return m.get(k);\r\n },\r\n\r\n set: function(m, k, v) {\r\n return m.set(k, v);\r\n },\r\n\r\n contains: function (m, k) {\r\n return m.has(k);\r\n },\r\n\r\n forEach: function (m, fn) {\r\n return m.forEach(fn);\r\n }\r\n};\r\n\r\nvar StringMapWrapper = {\r\n create: function () {\r\n return {};\r\n },\r\n\r\n set: function (m, k, v) {\r\n return m[k] = v;\r\n },\r\n\r\n get: function (m, k) {\r\n return m.hasOwnProperty(k) ? m[k] : undefined;\r\n },\r\n\r\n contains: function (m, k) {\r\n return m.hasOwnProperty(k);\r\n },\r\n\r\n keys: function(map) {\r\n return Object.keys(map);\r\n },\r\n\r\n isEmpty: function(map) {\r\n for (var prop in map) {\r\n if (map.hasOwnProperty(prop)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n\r\n delete: function(map, key) {\r\n delete map[key];\r\n },\r\n\r\n forEach: function (m, fn) {\r\n for (var prop in m) {\r\n if (m.hasOwnProperty(prop)) {\r\n fn(m[prop], prop);\r\n }\r\n }\r\n },\r\n\r\n equals: function (m1, m2) {\r\n var k1 = Object.keys(m1);\r\n var k2 = Object.keys(m2);\r\n if (k1.length != k2.length) {\r\n return false;\r\n }\r\n var key;\r\n for (var i = 0; i < k1.length; i++) {\r\n key = k1[i];\r\n if (m1[key] !== m2[key]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n\r\n merge: function(m1, m2) {\r\n var m = {};\r\n for (var attr in m1) {\r\n if (m1.hasOwnProperty(attr)) {\r\n m[attr] = m1[attr];\r\n }\r\n }\r\n for (var attr in m2) {\r\n if (m2.hasOwnProperty(attr)) {\r\n m[attr] = m2[attr];\r\n }\r\n }\r\n return m;\r\n }\r\n};\r\n\r\nvar List = Array;\r\nvar ListWrapper = {\r\n toJSON: function(l) {\r\n return JSON.stringify(l);\r\n },\r\n\r\n clear: function (l) {\r\n l.length = 0;\r\n },\r\n\r\n create: function () {\r\n return [];\r\n },\r\n\r\n push: function (l, v) {\r\n return l.push(v);\r\n },\r\n\r\n forEach: function (l, fn) {\r\n return l.forEach(fn);\r\n },\r\n\r\n first: function(array) {\r\n if (!array)\r\n return null;\r\n return array[0];\r\n },\r\n\r\n last: function(array) {\r\n return (array && array.length) > 0 ? array[array.length - 1] : null;\r\n },\r\n\r\n map: function (l, fn) {\r\n return l.map(fn);\r\n },\r\n\r\n join: function (l, str) {\r\n return l.join(str);\r\n },\r\n\r\n reduce: function(list, fn, init) {\r\n return list.reduce(fn, init);\r\n },\r\n\r\n filter: function(array, pred) {\r\n return array.filter(pred);\r\n },\r\n\r\n concat: function(a, b) {\r\n return a.concat(b);\r\n },\r\n\r\n slice: function(l) {\r\n var from = arguments[1] !== (void 0) ? arguments[1] : 0;\r\n var to = arguments[2] !== (void 0) ? arguments[2] : null;\r\n return l.slice(from, to === null ? undefined : to);\r\n },\r\n\r\n maximum: function(list, predicate) {\r\n if (list.length == 0) {\r\n return null;\r\n }\r\n var solution = null;\r\n var maxValue = -Infinity;\r\n for (var index = 0; index < list.length; index++) {\r\n var candidate = list[index];\r\n if (isBlank(candidate)) {\r\n continue;\r\n }\r\n var candidateValue = predicate(candidate);\r\n if (candidateValue > maxValue) {\r\n solution = candidate;\r\n maxValue = candidateValue;\r\n }\r\n }\r\n return solution;\r\n }\r\n};\r\n\r\nvar StringWrapper = {\r\n charCodeAt: function(s, i) {\r\n return s.charCodeAt(i);\r\n },\r\n\r\n equals: function (s1, s2) {\r\n return s1 === s2;\r\n },\r\n\r\n split: function(s, re) {\r\n return s.split(re);\r\n },\r\n\r\n replaceAll: function(s, from, replace) {\r\n return s.replace(from, replace);\r\n },\r\n\r\n replaceAllMapped: function(s, from, cb) {\r\n return s.replace(from, function(matches) {\r\n // Remove offset & string from the result array\r\n matches.splice(-2, 2);\r\n // The callback receives match, p1, ..., pn\r\n return cb.apply(null, matches);\r\n });\r\n },\r\n\r\n contains: function(s, substr) {\r\n return s.indexOf(substr) != -1;\r\n }\r\n\r\n};\r\n\r\n//TODO: implement?\r\n// I think it's too heavy to ask 1.x users to bring in Rx for the router...\r\nfunction EventEmitter() {}\r\n\r\nvar BaseException = Error;\r\n\r\nvar ObservableWrapper = {\r\n callNext: function(ob, val) {\r\n ob.fn(val);\r\n },\r\n callEmit: function(ob, val) {\r\n ob.fn(val);\r\n },\r\n\r\n subscribe: function(ob, fn) {\r\n ob.fn = fn;\r\n }\r\n};\r\n\r\n// TODO: https://github.com/angular/angular.js/blob/master/src/ng/browser.js#L227-L265\r\nvar $__router_47_location__ = {\r\n Location: Location\r\n};\r\n\r\nfunction Location(){}\r\nLocation.prototype.subscribe = function () {\r\n //TODO: implement\r\n};\r\nLocation.prototype.path = function () {\r\n return $location.url();\r\n};\r\nLocation.prototype.go = function (path, query) {\r\n return $location.url(path + query);\r\n};\r\nLocation.prototype.prepareExternalUrl = function(url) {\r\n if (url.length > 0 && !url.startsWith('/')) {\r\n url = '/' + url;\r\n }\r\n return $location.$$html5 ? '.' + url : '#' + $locationHashPrefix + url;\r\n};\r\n\r\n\r\n var exports = {\r\n Injectable: function () {},\r\n OpaqueToken: function () {},\r\n Inject: function () {}\r\n };\r\n var routerRequire = function () {return exports;};\r\n\r\n // When this file is processed, the line below is replaced with\r\n // the contents of the compiled TypeScript classes.\r\n var TouchMap = (function () {\r\n function TouchMap(map) {\r\n var _this = this;\r\n this.map = {};\r\n this.keys = {};\r\n if (isPresent(map)) {\r\n StringMapWrapper.forEach(map, function (value, key) {\r\n _this.map[key] = isPresent(value) ? value.toString() : null;\r\n _this.keys[key] = true;\r\n });\r\n }\r\n }\r\n TouchMap.prototype.get = function (key) {\r\n StringMapWrapper.delete(this.keys, key);\r\n return this.map[key];\r\n };\r\n TouchMap.prototype.getUnused = function () {\r\n var _this = this;\r\n var unused = {};\r\n var keys = StringMapWrapper.keys(this.keys);\r\n keys.forEach(function (key) { return unused[key] = StringMapWrapper.get(_this.map, key); });\r\n return unused;\r\n };\r\n return TouchMap;\r\n})();\r\nexports.TouchMap = TouchMap;\r\nfunction normalizeString(obj) {\r\n if (isBlank(obj)) {\r\n return null;\r\n }\r\n else {\r\n return obj.toString();\r\n }\r\n}\r\nexports.normalizeString = normalizeString;\r\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\nfunction convertUrlParamsToArray(urlParams) {\r\n var paramsArray = [];\r\n if (isBlank(urlParams)) {\r\n return [];\r\n }\r\n StringMapWrapper.forEach(urlParams, function (value, key) { paramsArray.push((value === true) ? key : key + '=' + value); });\r\n return paramsArray;\r\n}\r\nexports.convertUrlParamsToArray = convertUrlParamsToArray;\r\n// Convert an object of url parameters into a string that can be used in an URL\r\nfunction serializeParams(urlParams, joiner) {\r\n if (joiner === void 0) { joiner = '&'; }\r\n return convertUrlParamsToArray(urlParams).join(joiner);\r\n}\r\nexports.serializeParams = serializeParams;\r\n/**\r\n * This class represents a parsed URL\r\n */\r\nvar Url = (function () {\r\n function Url(path, child, auxiliary, params) {\r\n if (child === void 0) { child = null; }\r\n if (auxiliary === void 0) { auxiliary = CONST_EXPR([]); }\r\n if (params === void 0) { params = CONST_EXPR({}); }\r\n this.path = path;\r\n this.child = child;\r\n this.auxiliary = auxiliary;\r\n this.params = params;\r\n }\r\n Url.prototype.toString = function () {\r\n return this.path + this._matrixParamsToString() + this._auxToString() + this._childString();\r\n };\r\n Url.prototype.segmentToString = function () { return this.path + this._matrixParamsToString(); };\r\n /** @internal */\r\n Url.prototype._auxToString = function () {\r\n return this.auxiliary.length > 0 ?\r\n ('(' + this.auxiliary.map(function (sibling) { return sibling.toString(); }).join('//') + ')') :\r\n '';\r\n };\r\n Url.prototype._matrixParamsToString = function () {\r\n var paramString = serializeParams(this.params, ';');\r\n if (paramString.length > 0) {\r\n return ';' + paramString;\r\n }\r\n return '';\r\n };\r\n /** @internal */\r\n Url.prototype._childString = function () { return isPresent(this.child) ? ('/' + this.child.toString()) : ''; };\r\n return Url;\r\n})();\r\nexports.Url = Url;\r\nvar RootUrl = (function (_super) {\r\n __extends(RootUrl, _super);\r\n function RootUrl(path, child, auxiliary, params) {\r\n if (child === void 0) { child = null; }\r\n if (auxiliary === void 0) { auxiliary = CONST_EXPR([]); }\r\n if (params === void 0) { params = null; }\r\n _super.call(this, path, child, auxiliary, params);\r\n }\r\n RootUrl.prototype.toString = function () {\r\n return this.path + this._auxToString() + this._childString() + this._queryParamsToString();\r\n };\r\n RootUrl.prototype.segmentToString = function () { return this.path + this._queryParamsToString(); };\r\n RootUrl.prototype._queryParamsToString = function () {\r\n if (isBlank(this.params)) {\r\n return '';\r\n }\r\n return '?' + serializeParams(this.params);\r\n };\r\n return RootUrl;\r\n})(Url);\r\nexports.RootUrl = RootUrl;\r\nfunction pathSegmentsToUrl(pathSegments) {\r\n var url = new Url(pathSegments[pathSegments.length - 1]);\r\n for (var i = pathSegments.length - 2; i >= 0; i -= 1) {\r\n url = new Url(pathSegments[i], url);\r\n }\r\n return url;\r\n}\r\nexports.pathSegmentsToUrl = pathSegmentsToUrl;\r\nvar SEGMENT_RE = RegExpWrapper.create('^[^\\\\/\\\\(\\\\)\\\\?;=&#]+');\r\nfunction matchUrlSegment(str) {\r\n var match = RegExpWrapper.firstMatch(SEGMENT_RE, str);\r\n return isPresent(match) ? match[0] : '';\r\n}\r\nvar QUERY_PARAM_VALUE_RE = RegExpWrapper.create('^[^\\\\(\\\\)\\\\?;&#]+');\r\nfunction matchUrlQueryParamValue(str) {\r\n var match = RegExpWrapper.firstMatch(QUERY_PARAM_VALUE_RE, str);\r\n return isPresent(match) ? match[0] : '';\r\n}\r\nvar UrlParser = (function () {\r\n function UrlParser() {\r\n }\r\n UrlParser.prototype.peekStartsWith = function (str) { return this._remaining.startsWith(str); };\r\n UrlParser.prototype.capture = function (str) {\r\n if (!this._remaining.startsWith(str)) {\r\n throw new BaseException(\"Expected \\\"\" + str + \"\\\".\");\r\n }\r\n this._remaining = this._remaining.substring(str.length);\r\n };\r\n UrlParser.prototype.parse = function (url) {\r\n this._remaining = url;\r\n if (url == '' || url == '/') {\r\n return new Url('');\r\n }\r\n return this.parseRoot();\r\n };\r\n // segment + (aux segments) + (query params)\r\n UrlParser.prototype.parseRoot = function () {\r\n if (this.peekStartsWith('/')) {\r\n this.capture('/');\r\n }\r\n var path = matchUrlSegment(this._remaining);\r\n this.capture(path);\r\n var aux = [];\r\n if (this.peekStartsWith('(')) {\r\n aux = this.parseAuxiliaryRoutes();\r\n }\r\n if (this.peekStartsWith(';')) {\r\n // TODO: should these params just be dropped?\r\n this.parseMatrixParams();\r\n }\r\n var child = null;\r\n if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\r\n this.capture('/');\r\n child = this.parseSegment();\r\n }\r\n var queryParams = null;\r\n if (this.peekStartsWith('?')) {\r\n queryParams = this.parseQueryParams();\r\n }\r\n return new RootUrl(path, child, aux, queryParams);\r\n };\r\n // segment + (matrix params) + (aux segments)\r\n UrlParser.prototype.parseSegment = function () {\r\n if (this._remaining.length == 0) {\r\n return null;\r\n }\r\n if (this.peekStartsWith('/')) {\r\n this.capture('/');\r\n }\r\n var path = matchUrlSegment(this._remaining);\r\n this.capture(path);\r\n var matrixParams = null;\r\n if (this.peekStartsWith(';')) {\r\n matrixParams = this.parseMatrixParams();\r\n }\r\n var aux = [];\r\n if (this.peekStartsWith('(')) {\r\n aux = this.parseAuxiliaryRoutes();\r\n }\r\n var child = null;\r\n if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\r\n this.capture('/');\r\n child = this.parseSegment();\r\n }\r\n return new Url(path, child, aux, matrixParams);\r\n };\r\n UrlParser.prototype.parseQueryParams = function () {\r\n var params = {};\r\n this.capture('?');\r\n this.parseQueryParam(params);\r\n while (this._remaining.length > 0 && this.peekStartsWith('&')) {\r\n this.capture('&');\r\n this.parseQueryParam(params);\r\n }\r\n return params;\r\n };\r\n UrlParser.prototype.parseMatrixParams = function () {\r\n var params = {};\r\n while (this._remaining.length > 0 && this.peekStartsWith(';')) {\r\n this.capture(';');\r\n this.parseParam(params);\r\n }\r\n return params;\r\n };\r\n UrlParser.prototype.parseParam = function (params) {\r\n var key = matchUrlSegment(this._remaining);\r\n if (isBlank(key)) {\r\n return;\r\n }\r\n this.capture(key);\r\n var value = true;\r\n if (this.peekStartsWith('=')) {\r\n this.capture('=');\r\n var valueMatch = matchUrlSegment(this._remaining);\r\n if (isPresent(valueMatch)) {\r\n value = valueMatch;\r\n this.capture(value);\r\n }\r\n }\r\n params[key] = value;\r\n };\r\n UrlParser.prototype.parseQueryParam = function (params) {\r\n var key = matchUrlSegment(this._remaining);\r\n if (isBlank(key)) {\r\n return;\r\n }\r\n this.capture(key);\r\n var value = true;\r\n if (this.peekStartsWith('=')) {\r\n this.capture('=');\r\n var valueMatch = matchUrlQueryParamValue(this._remaining);\r\n if (isPresent(valueMatch)) {\r\n value = valueMatch;\r\n this.capture(value);\r\n }\r\n }\r\n params[key] = value;\r\n };\r\n UrlParser.prototype.parseAuxiliaryRoutes = function () {\r\n var routes = [];\r\n this.capture('(');\r\n while (!this.peekStartsWith(')') && this._remaining.length > 0) {\r\n routes.push(this.parseSegment());\r\n if (this.peekStartsWith('//')) {\r\n this.capture('//');\r\n }\r\n }\r\n this.capture(')');\r\n return routes;\r\n };\r\n return UrlParser;\r\n})();\r\nexports.UrlParser = UrlParser;\r\nexports.parser = new UrlParser();\r\nvar __decorate = (this && this.__decorate) || function (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\nvar RouteLifecycleHook = (function () {\r\n function RouteLifecycleHook(name) {\r\n this.name = name;\r\n }\r\n RouteLifecycleHook = __decorate([\r\n CONST()\r\n ], RouteLifecycleHook);\r\n return RouteLifecycleHook;\r\n})();\r\nexports.RouteLifecycleHook = RouteLifecycleHook;\r\nvar CanActivate = (function () {\r\n function CanActivate(fn) {\r\n this.fn = fn;\r\n }\r\n CanActivate = __decorate([\r\n CONST()\r\n ], CanActivate);\r\n return CanActivate;\r\n})();\r\nexports.CanActivate = CanActivate;\r\nexports.routerCanReuse = CONST_EXPR(new RouteLifecycleHook('routerCanReuse'));\r\nexports.routerCanDeactivate = CONST_EXPR(new RouteLifecycleHook('routerCanDeactivate'));\r\nexports.routerOnActivate = CONST_EXPR(new RouteLifecycleHook('routerOnActivate'));\r\nexports.routerOnReuse = CONST_EXPR(new RouteLifecycleHook('routerOnReuse'));\r\nexports.routerOnDeactivate = CONST_EXPR(new RouteLifecycleHook('routerOnDeactivate'));\r\nvar lifecycle_annotations_impl_1 = routerRequire('./lifecycle_annotations_impl');\r\nfunction hasLifecycleHook(e, type) {\r\n if (!(type instanceof Type))\r\n return false;\r\n return e.name in type.prototype;\r\n}\r\nexports.hasLifecycleHook = hasLifecycleHook;\r\nfunction getCanActivateHook(type) {\r\n var annotations = reflector.annotations(type);\r\n for (var i = 0; i < annotations.length; i += 1) {\r\n var annotation = annotations[i];\r\n if (annotation instanceof lifecycle_annotations_impl_1.CanActivate) {\r\n return annotation.fn;\r\n }\r\n }\r\n return null;\r\n}\r\nexports.getCanActivateHook = getCanActivateHook;\r\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\nvar __decorate = (this && this.__decorate) || function (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\nvar route_definition_1 = routerRequire('../route_definition');\r\nexports.RouteDefinition = route_definition_1.RouteDefinition;\r\nvar __make_dart_analyzer_happy = null;\r\n/**\r\n * The `RouteConfig` decorator defines routes for a given component.\r\n *\r\n * It takes an array of {@link RouteDefinition}s.\r\n */\r\nvar RouteConfig = (function () {\r\n function RouteConfig(configs) {\r\n this.configs = configs;\r\n }\r\n RouteConfig = __decorate([\r\n CONST()\r\n ], RouteConfig);\r\n return RouteConfig;\r\n})();\r\nexports.RouteConfig = RouteConfig;\r\nvar AbstractRoute = (function () {\r\n function AbstractRoute(_a) {\r\n var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data;\r\n this.name = name;\r\n this.useAsDefault = useAsDefault;\r\n this.path = path;\r\n this.regex = regex;\r\n this.serializer = serializer;\r\n this.data = data;\r\n }\r\n AbstractRoute = __decorate([\r\n CONST()\r\n ], AbstractRoute);\r\n return AbstractRoute;\r\n})();\r\nexports.AbstractRoute = AbstractRoute;\r\n/**\r\n * `Route` is a type of {@link RouteDefinition} used to route a path to a component.\r\n *\r\n * It has the following properties:\r\n * - `path` is a string that uses the route matcher DSL.\r\n * - `component` a component type.\r\n * - `name` is an optional `CamelCase` string representing the name of the route.\r\n * - `data` is an optional property of any type representing arbitrary route metadata for the given\r\n * route. It is injectable via {@link RouteData}.\r\n * - `useAsDefault` is a boolean value. If `true`, the child route will be navigated to if no child\r\n * route is specified during the navigation.\r\n *\r\n * ### Example\r\n * ```\r\n * import {RouteConfig, Route} from 'angular2/router';\r\n *\r\n * @RouteConfig([\r\n * new Route({path: '/home', component: HomeCmp, name: 'HomeCmp' })\r\n * ])\r\n * class MyApp {}\r\n * ```\r\n */\r\nvar Route = (function (_super) {\r\n __extends(Route, _super);\r\n function Route(_a) {\r\n var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data, component = _a.component;\r\n _super.call(this, {\r\n name: name,\r\n useAsDefault: useAsDefault,\r\n path: path,\r\n regex: regex,\r\n serializer: serializer,\r\n data: data\r\n });\r\n this.aux = null;\r\n this.component = component;\r\n }\r\n Route = __decorate([\r\n CONST()\r\n ], Route);\r\n return Route;\r\n})(AbstractRoute);\r\nexports.Route = Route;\r\n/**\r\n * `AuxRoute` is a type of {@link RouteDefinition} used to define an auxiliary route.\r\n *\r\n * It takes an object with the following properties:\r\n * - `path` is a string that uses the route matcher DSL.\r\n * - `component` a component type.\r\n * - `name` is an optional `CamelCase` string representing the name of the route.\r\n * - `data` is an optional property of any type representing arbitrary route metadata for the given\r\n * route. It is injectable via {@link RouteData}.\r\n *\r\n * ### Example\r\n * ```\r\n * import {RouteConfig, AuxRoute} from 'angular2/router';\r\n *\r\n * @RouteConfig([\r\n * new AuxRoute({path: '/home', component: HomeCmp})\r\n * ])\r\n * class MyApp {}\r\n * ```\r\n */\r\nvar AuxRoute = (function (_super) {\r\n __extends(AuxRoute, _super);\r\n function AuxRoute(_a) {\r\n var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data, component = _a.component;\r\n _super.call(this, {\r\n name: name,\r\n useAsDefault: useAsDefault,\r\n path: path,\r\n regex: regex,\r\n serializer: serializer,\r\n data: data\r\n });\r\n this.component = component;\r\n }\r\n AuxRoute = __decorate([\r\n CONST()\r\n ], AuxRoute);\r\n return AuxRoute;\r\n})(AbstractRoute);\r\nexports.AuxRoute = AuxRoute;\r\n/**\r\n * `AsyncRoute` is a type of {@link RouteDefinition} used to route a path to an asynchronously\r\n * loaded component.\r\n *\r\n * It has the following properties:\r\n * - `path` is a string that uses the route matcher DSL.\r\n * - `loader` is a function that returns a promise that resolves to a component.\r\n * - `name` is an optional `CamelCase` string representing the name of the route.\r\n * - `data` is an optional property of any type representing arbitrary route metadata for the given\r\n * route. It is injectable via {@link RouteData}.\r\n * - `useAsDefault` is a boolean value. If `true`, the child route will be navigated to if no child\r\n * route is specified during the navigation.\r\n *\r\n * ### Example\r\n * ```\r\n * import {RouteConfig, AsyncRoute} from 'angular2/router';\r\n *\r\n * @RouteConfig([\r\n * new AsyncRoute({path: '/home', loader: () => Promise.resolve(MyLoadedCmp), name:\r\n * 'MyLoadedCmp'})\r\n * ])\r\n * class MyApp {}\r\n * ```\r\n */\r\nvar AsyncRoute = (function (_super) {\r\n __extends(AsyncRoute, _super);\r\n function AsyncRoute(_a) {\r\n var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data, loader = _a.loader;\r\n _super.call(this, {\r\n name: name,\r\n useAsDefault: useAsDefault,\r\n path: path,\r\n regex: regex,\r\n serializer: serializer,\r\n data: data\r\n });\r\n this.aux = null;\r\n this.loader = loader;\r\n }\r\n AsyncRoute = __decorate([\r\n CONST()\r\n ], AsyncRoute);\r\n return AsyncRoute;\r\n})(AbstractRoute);\r\nexports.AsyncRoute = AsyncRoute;\r\n/**\r\n * `Redirect` is a type of {@link RouteDefinition} used to route a path to a canonical route.\r\n *\r\n * It has the following properties:\r\n * - `path` is a string that uses the route matcher DSL.\r\n * - `redirectTo` is an array representing the link DSL.\r\n *\r\n * Note that redirects **do not** affect how links are generated. For that, see the `useAsDefault`\r\n * option.\r\n *\r\n * ### Example\r\n * ```\r\n * import {RouteConfig, Route, Redirect} from 'angular2/router';\r\n *\r\n * @RouteConfig([\r\n * new Redirect({path: '/', redirectTo: ['/Home'] }),\r\n * new Route({path: '/home', component: HomeCmp, name: 'Home'})\r\n * ])\r\n * class MyApp {}\r\n * ```\r\n */\r\nvar Redirect = (function (_super) {\r\n __extends(Redirect, _super);\r\n function Redirect(_a) {\r\n var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data, redirectTo = _a.redirectTo;\r\n _super.call(this, {\r\n name: name,\r\n useAsDefault: useAsDefault,\r\n path: path,\r\n regex: regex,\r\n serializer: serializer,\r\n data: data\r\n });\r\n this.redirectTo = redirectTo;\r\n }\r\n Redirect = __decorate([\r\n CONST()\r\n ], Redirect);\r\n return Redirect;\r\n})(AbstractRoute);\r\nexports.Redirect = Redirect;\r\nvar route_config_decorator_1 = routerRequire('./route_config_decorator');\r\n/**\r\n * Given a JS Object that represents a route config, returns a corresponding Route, AsyncRoute,\r\n * AuxRoute or Redirect object.\r\n *\r\n * Also wraps an AsyncRoute's loader function to add the loaded component's route config to the\r\n * `RouteRegistry`.\r\n */\r\nfunction normalizeRouteConfig(config, registry) {\r\n if (config instanceof route_config_decorator_1.AsyncRoute) {\r\n var wrappedLoader = wrapLoaderToReconfigureRegistry(config.loader, registry);\r\n return new route_config_decorator_1.AsyncRoute({\r\n path: config.path,\r\n loader: wrappedLoader,\r\n name: config.name,\r\n data: config.data,\r\n useAsDefault: config.useAsDefault\r\n });\r\n }\r\n if (config instanceof route_config_decorator_1.Route || config instanceof route_config_decorator_1.Redirect || config instanceof route_config_decorator_1.AuxRoute) {\r\n return config;\r\n }\r\n if ((+!!config.component) + (+!!config.redirectTo) + (+!!config.loader) != 1) {\r\n throw new BaseException(\"Route config should contain exactly one \\\"component\\\", \\\"loader\\\", or \\\"redirectTo\\\" property.\");\r\n }\r\n if (config.as && config.name) {\r\n throw new BaseException(\"Route config should contain exactly one \\\"as\\\" or \\\"name\\\" property.\");\r\n }\r\n if (config.as) {\r\n config.name = config.as;\r\n }\r\n if (config.loader) {\r\n var wrappedLoader = wrapLoaderToReconfigureRegistry(config.loader, registry);\r\n return new route_config_decorator_1.AsyncRoute({\r\n path: config.path,\r\n loader: wrappedLoader,\r\n name: config.name,\r\n data: config.data,\r\n useAsDefault: config.useAsDefault\r\n });\r\n }\r\n if (config.aux) {\r\n return new route_config_decorator_1.AuxRoute({ path: config.aux, component: config.component, name: config.name });\r\n }\r\n if (config.component) {\r\n if (typeof config.component == 'object') {\r\n var componentDefinitionObject = config.component;\r\n if (componentDefinitionObject.type == 'constructor') {\r\n return new route_config_decorator_1.Route({\r\n path: config.path,\r\n component: componentDefinitionObject.constructor,\r\n name: config.name,\r\n data: config.data,\r\n useAsDefault: config.useAsDefault\r\n });\r\n }\r\n else if (componentDefinitionObject.type == 'loader') {\r\n return new route_config_decorator_1.AsyncRoute({\r\n path: config.path,\r\n loader: componentDefinitionObject.loader,\r\n name: config.name,\r\n data: config.data,\r\n useAsDefault: config.useAsDefault\r\n });\r\n }\r\n else {\r\n throw new BaseException(\"Invalid component type \\\"\" + componentDefinitionObject.type + \"\\\". Valid types are \\\"constructor\\\" and \\\"loader\\\".\");\r\n }\r\n }\r\n return new route_config_decorator_1.Route(config);\r\n }\r\n if (config.redirectTo) {\r\n return new route_config_decorator_1.Redirect({ path: config.path, redirectTo: config.redirectTo });\r\n }\r\n return config;\r\n}\r\nexports.normalizeRouteConfig = normalizeRouteConfig;\r\nfunction wrapLoaderToReconfigureRegistry(loader, registry) {\r\n return function () {\r\n return loader().then(function (componentType) {\r\n registry.configFromComponent(componentType);\r\n return componentType;\r\n });\r\n };\r\n}\r\nfunction assertComponentExists(component, path) {\r\n if (!isType(component)) {\r\n throw new BaseException(\"Component for route \\\"\" + path + \"\\\" is not defined, or is not a class.\");\r\n }\r\n}\r\nexports.assertComponentExists = assertComponentExists;\r\nvar instruction_1 = routerRequire('../../instruction');\r\nvar AsyncRouteHandler = (function () {\r\n function AsyncRouteHandler(_loader, data) {\r\n if (data === void 0) { data = null; }\r\n this._loader = _loader;\r\n /** @internal */\r\n this._resolvedComponent = null;\r\n this.data = isPresent(data) ? new instruction_1.RouteData(data) : instruction_1.BLANK_ROUTE_DATA;\r\n }\r\n AsyncRouteHandler.prototype.resolveComponentType = function () {\r\n var _this = this;\r\n if (isPresent(this._resolvedComponent)) {\r\n return this._resolvedComponent;\r\n }\r\n return this._resolvedComponent = this._loader().then(function (componentType) {\r\n _this.componentType = componentType;\r\n return componentType;\r\n });\r\n };\r\n return AsyncRouteHandler;\r\n})();\r\nexports.AsyncRouteHandler = AsyncRouteHandler;\r\nvar instruction_1 = routerRequire('../../instruction');\r\nvar SyncRouteHandler = (function () {\r\n function SyncRouteHandler(componentType, data) {\r\n this.componentType = componentType;\r\n /** @internal */\r\n this._resolvedComponent = null;\r\n this._resolvedComponent = PromiseWrapper.resolve(componentType);\r\n this.data = isPresent(data) ? new instruction_1.RouteData(data) : instruction_1.BLANK_ROUTE_DATA;\r\n }\r\n SyncRouteHandler.prototype.resolveComponentType = function () { return this._resolvedComponent; };\r\n return SyncRouteHandler;\r\n})();\r\nexports.SyncRouteHandler = SyncRouteHandler;\r\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\nvar url_parser_1 = routerRequire('../url_parser');\r\nvar instruction_1 = routerRequire('../instruction');\r\n// RouteMatch objects hold information about a match between a rule and a URL\r\nvar RouteMatch = (function () {\r\n function RouteMatch() {\r\n }\r\n return RouteMatch;\r\n})();\r\nexports.RouteMatch = RouteMatch;\r\nvar PathMatch = (function (_super) {\r\n __extends(PathMatch, _super);\r\n function PathMatch(instruction, remaining, remainingAux) {\r\n _super.call(this);\r\n this.instruction = instruction;\r\n this.remaining = remaining;\r\n this.remainingAux = remainingAux;\r\n }\r\n return PathMatch;\r\n})(RouteMatch);\r\nexports.PathMatch = PathMatch;\r\nvar RedirectMatch = (function (_super) {\r\n __extends(RedirectMatch, _super);\r\n function RedirectMatch(redirectTo, specificity) {\r\n _super.call(this);\r\n this.redirectTo = redirectTo;\r\n this.specificity = specificity;\r\n }\r\n return RedirectMatch;\r\n})(RouteMatch);\r\nexports.RedirectMatch = RedirectMatch;\r\nvar RedirectRule = (function () {\r\n function RedirectRule(_pathRecognizer, redirectTo) {\r\n this._pathRecognizer = _pathRecognizer;\r\n this.redirectTo = redirectTo;\r\n this.hash = this._pathRecognizer.hash;\r\n }\r\n Object.defineProperty(RedirectRule.prototype, \"path\", {\r\n get: function () { return this._pathRecognizer.toString(); },\r\n set: function (val) { throw new BaseException('you cannot set the path of a RedirectRule directly'); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns `null` or a `ParsedUrl` representing the new path to match\r\n */\r\n RedirectRule.prototype.recognize = function (beginningSegment) {\r\n var match = null;\r\n if (isPresent(this._pathRecognizer.matchUrl(beginningSegment))) {\r\n match = new RedirectMatch(this.redirectTo, this._pathRecognizer.specificity);\r\n }\r\n return PromiseWrapper.resolve(match);\r\n };\r\n RedirectRule.prototype.generate = function (params) {\r\n throw new BaseException(\"Tried to generate a redirect.\");\r\n };\r\n return RedirectRule;\r\n})();\r\nexports.RedirectRule = RedirectRule;\r\n// represents something like '/foo/:bar'\r\nvar RouteRule = (function () {\r\n // TODO: cache component instruction instances by params and by ParsedUrl instance\r\n function RouteRule(_routePath, handler, _routeName) {\r\n this._routePath = _routePath;\r\n this.handler = handler;\r\n this._routeName = _routeName;\r\n this._cache = new Map();\r\n this.specificity = this._routePath.specificity;\r\n this.hash = this._routePath.hash;\r\n this.terminal = this._routePath.terminal;\r\n }\r\n Object.defineProperty(RouteRule.prototype, \"path\", {\r\n get: function () { return this._routePath.toString(); },\r\n set: function (val) { throw new BaseException('you cannot set the path of a RouteRule directly'); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n RouteRule.prototype.recognize = function (beginningSegment) {\r\n var _this = this;\r\n var res = this._routePath.matchUrl(beginningSegment);\r\n if (isBlank(res)) {\r\n return null;\r\n }\r\n return this.handler.resolveComponentType().then(function (_) {\r\n var componentInstruction = _this._getInstruction(res.urlPath, res.urlParams, res.allParams);\r\n return new PathMatch(componentInstruction, res.rest, res.auxiliary);\r\n });\r\n };\r\n RouteRule.prototype.generate = function (params) {\r\n var generated = this._routePath.generateUrl(params);\r\n var urlPath = generated.urlPath;\r\n var urlParams = generated.urlParams;\r\n return this._getInstruction(urlPath, url_parser_1.convertUrlParamsToArray(urlParams), params);\r\n };\r\n RouteRule.prototype.generateComponentPathValues = function (params) {\r\n return this._routePath.generateUrl(params);\r\n };\r\n RouteRule.prototype._getInstruction = function (urlPath, urlParams, params) {\r\n if (isBlank(this.handler.componentType)) {\r\n throw new BaseException(\"Tried to get instruction before the type was loaded.\");\r\n }\r\n var hashKey = urlPath + '?' + urlParams.join('&');\r\n if (this._cache.has(hashKey)) {\r\n return this._cache.get(hashKey);\r\n }\r\n var instruction = new instruction_1.ComponentInstruction(urlPath, urlParams, this.handler.data, this.handler.componentType, this.terminal, this.specificity, params, this._routeName);\r\n this._cache.set(hashKey, instruction);\r\n return instruction;\r\n };\r\n return RouteRule;\r\n})();\r\nexports.RouteRule = RouteRule;\r\nvar rules_1 = routerRequire('./rules');\r\nvar route_config_impl_1 = routerRequire('../route_config/route_config_impl');\r\nvar async_route_handler_1 = routerRequire('./route_handlers/async_route_handler');\r\nvar sync_route_handler_1 = routerRequire('./route_handlers/sync_route_handler');\r\nvar param_route_path_1 = routerRequire('./route_paths/param_route_path');\r\nvar regex_route_path_1 = routerRequire('./route_paths/regex_route_path');\r\n/**\r\n * A `RuleSet` is responsible for recognizing routes for a particular component.\r\n * It is consumed by `RouteRegistry`, which knows how to recognize an entire hierarchy of\r\n * components.\r\n */\r\nvar RuleSet = (function () {\r\n function RuleSet() {\r\n this.rulesByName = new Map();\r\n // map from name to rule\r\n this.auxRulesByName = new Map();\r\n // map from starting path to rule\r\n this.auxRulesByPath = new Map();\r\n // TODO: optimize this into a trie\r\n this.rules = [];\r\n // the rule to use automatically when recognizing or generating from this rule set\r\n this.defaultRule = null;\r\n }\r\n /**\r\n * Configure additional rules in this rule set from a route definition\r\n * @returns {boolean} true if the config is terminal\r\n */\r\n RuleSet.prototype.config = function (config) {\r\n var handler;\r\n if (isPresent(config.name) && config.name[0].toUpperCase() != config.name[0]) {\r\n var suggestedName = config.name[0].toUpperCase() + config.name.substring(1);\r\n throw new BaseException(\"Route \\\"\" + config.path + \"\\\" with name \\\"\" + config.name + \"\\\" does not begin with an uppercase letter. Route names should be CamelCase like \\\"\" + suggestedName + \"\\\".\");\r\n }\r\n if (config instanceof route_config_impl_1.AuxRoute) {\r\n handler = new sync_route_handler_1.SyncRouteHandler(config.component, config.data);\r\n var routePath_1 = this._getRoutePath(config);\r\n var auxRule = new rules_1.RouteRule(routePath_1, handler, config.name);\r\n this.auxRulesByPath.set(routePath_1.toString(), auxRule);\r\n if (isPresent(config.name)) {\r\n this.auxRulesByName.set(config.name, auxRule);\r\n }\r\n return auxRule.terminal;\r\n }\r\n var useAsDefault = false;\r\n if (config instanceof route_config_impl_1.Redirect) {\r\n var routePath_2 = this._getRoutePath(config);\r\n var redirector = new rules_1.RedirectRule(routePath_2, config.redirectTo);\r\n this._assertNoHashCollision(redirector.hash, config.path);\r\n this.rules.push(redirector);\r\n return true;\r\n }\r\n if (config instanceof route_config_impl_1.Route) {\r\n handler = new sync_route_handler_1.SyncRouteHandler(config.component, config.data);\r\n useAsDefault = isPresent(config.useAsDefault) && config.useAsDefault;\r\n }\r\n else if (config instanceof route_config_impl_1.AsyncRoute) {\r\n handler = new async_route_handler_1.AsyncRouteHandler(config.loader, config.data);\r\n useAsDefault = isPresent(config.useAsDefault) && config.useAsDefault;\r\n }\r\n var routePath = this._getRoutePath(config);\r\n var newRule = new rules_1.RouteRule(routePath, handler, config.name);\r\n this._assertNoHashCollision(newRule.hash, config.path);\r\n if (useAsDefault) {\r\n if (isPresent(this.defaultRule)) {\r\n throw new BaseException(\"Only one route can be default\");\r\n }\r\n this.defaultRule = newRule;\r\n }\r\n this.rules.push(newRule);\r\n if (isPresent(config.name)) {\r\n this.rulesByName.set(config.name, newRule);\r\n }\r\n return newRule.terminal;\r\n };\r\n /**\r\n * Given a URL, returns a list of `RouteMatch`es, which are partial recognitions for some route.\r\n */\r\n RuleSet.prototype.recognize = function (urlParse) {\r\n var solutions = [];\r\n this.rules.forEach(function (routeRecognizer) {\r\n var pathMatch = routeRecognizer.recognize(urlParse);\r\n if (isPresent(pathMatch)) {\r\n solutions.push(pathMatch);\r\n }\r\n });\r\n // handle cases where we are routing just to an aux route\r\n if (solutions.length == 0 && isPresent(urlParse) && urlParse.auxiliary.length > 0) {\r\n return [PromiseWrapper.resolve(new rules_1.PathMatch(null, null, urlParse.auxiliary))];\r\n }\r\n return solutions;\r\n };\r\n RuleSet.prototype.recognizeAuxiliary = function (urlParse) {\r\n var routeRecognizer = this.auxRulesByPath.get(urlParse.path);\r\n if (isPresent(routeRecognizer)) {\r\n return [routeRecognizer.recognize(urlParse)];\r\n }\r\n return [PromiseWrapper.resolve(null)];\r\n };\r\n RuleSet.prototype.hasRoute = function (name) { return this.rulesByName.has(name); };\r\n RuleSet.prototype.componentLoaded = function (name) {\r\n return this.hasRoute(name) && isPresent(this.rulesByName.get(name).handler.componentType);\r\n };\r\n RuleSet.prototype.loadComponent = function (name) {\r\n return this.rulesByName.get(name).handler.resolveComponentType();\r\n };\r\n RuleSet.prototype.generate = function (name, params) {\r\n var rule = this.rulesByName.get(name);\r\n if (isBlank(rule)) {\r\n return null;\r\n }\r\n return rule.generate(params);\r\n };\r\n RuleSet.prototype.generateAuxiliary = function (name, params) {\r\n var rule = this.auxRulesByName.get(name);\r\n if (isBlank(rule)) {\r\n return null;\r\n }\r\n return rule.generate(params);\r\n };\r\n RuleSet.prototype._assertNoHashCollision = function (hash, path) {\r\n this.rules.forEach(function (rule) {\r\n if (hash == rule.hash) {\r\n throw new BaseException(\"Configuration '\" + path + \"' conflicts with existing route '\" + rule.path + \"'\");\r\n }\r\n });\r\n };\r\n RuleSet.prototype._getRoutePath = function (config) {\r\n if (isPresent(config.regex)) {\r\n if (isFunction(config.serializer)) {\r\n return new regex_route_path_1.RegexRoutePath(config.regex, config.serializer);\r\n }\r\n else {\r\n throw new BaseException(\"Route provides a regex property, '\" + config.regex + \"', but no serializer property\");\r\n }\r\n }\r\n if (isPresent(config.path)) {\r\n // Auxiliary routes do not have a slash at the start\r\n var path = (config instanceof route_config_impl_1.AuxRoute && config.path.startsWith('/')) ?\r\n config.path.substring(1) :\r\n config.path;\r\n return new param_route_path_1.ParamRoutePath(path);\r\n }\r\n throw new BaseException('Route must provide either a path or regex property');\r\n };\r\n return RuleSet;\r\n})();\r\nexports.RuleSet = RuleSet;\r\nvar MatchedUrl = (function () {\r\n function MatchedUrl(urlPath, urlParams, allParams, auxiliary, rest) {\r\n this.urlPath = urlPath;\r\n this.urlParams = urlParams;\r\n this.allParams = allParams;\r\n this.auxiliary = auxiliary;\r\n this.rest = rest;\r\n }\r\n return MatchedUrl;\r\n})();\r\nexports.MatchedUrl = MatchedUrl;\r\nvar GeneratedUrl = (function () {\r\n function GeneratedUrl(urlPath, urlParams) {\r\n this.urlPath = urlPath;\r\n this.urlParams = urlParams;\r\n }\r\n return GeneratedUrl;\r\n})();\r\nexports.GeneratedUrl = GeneratedUrl;\r\nvar utils_1 = routerRequire('../../utils');\r\nvar url_parser_1 = routerRequire('../../url_parser');\r\nvar route_path_1 = routerRequire('./route_path');\r\n/**\r\n * Identified by a `...` URL segment. This indicates that the\r\n * Route will continue to be matched by child `Router`s.\r\n */\r\nvar ContinuationPathSegment = (function () {\r\n function ContinuationPathSegment() {\r\n this.name = '';\r\n this.specificity = '';\r\n this.hash = '...';\r\n }\r\n ContinuationPathSegment.prototype.generate = function (params) { return ''; };\r\n ContinuationPathSegment.prototype.match = function (path) { return true; };\r\n return ContinuationPathSegment;\r\n})();\r\n/**\r\n * Identified by a string not starting with a `:` or `*`.\r\n * Only matches the URL segments that equal the segment path\r\n */\r\nvar StaticPathSegment = (function () {\r\n function StaticPathSegment(path) {\r\n this.path = path;\r\n this.name = '';\r\n this.specificity = '2';\r\n this.hash = path;\r\n }\r\n StaticPathSegment.prototype.match = function (path) { return path == this.path; };\r\n StaticPathSegment.prototype.generate = function (params) { return this.path; };\r\n return StaticPathSegment;\r\n})();\r\n/**\r\n * Identified by a string starting with `:`. Indicates a segment\r\n * that can contain a value that will be extracted and provided to\r\n * a matching `Instruction`.\r\n */\r\nvar DynamicPathSegment = (function () {\r\n function DynamicPathSegment(name) {\r\n this.name = name;\r\n this.specificity = '1';\r\n this.hash = ':';\r\n }\r\n DynamicPathSegment.prototype.match = function (path) { return path.length > 0; };\r\n DynamicPathSegment.prototype.generate = function (params) {\r\n if (!StringMapWrapper.contains(params.map, this.name)) {\r\n throw new BaseException(\"Route generator for '\" + this.name + \"' was not included in parameters passed.\");\r\n }\r\n return encodeDynamicSegment(utils_1.normalizeString(params.get(this.name)));\r\n };\r\n DynamicPathSegment.paramMatcher = /^:([^\\/]+)$/g;\r\n return DynamicPathSegment;\r\n})();\r\n/**\r\n * Identified by a string starting with `*` Indicates that all the following\r\n * segments match this route and that the value of these segments should\r\n * be provided to a matching `Instruction`.\r\n */\r\nvar StarPathSegment = (function () {\r\n function StarPathSegment(name) {\r\n this.name = name;\r\n this.specificity = '0';\r\n this.hash = '*';\r\n }\r\n StarPathSegment.prototype.match = function (path) { return true; };\r\n StarPathSegment.prototype.generate = function (params) { return utils_1.normalizeString(params.get(this.name)); };\r\n StarPathSegment.wildcardMatcher = /^\\*([^\\/]+)$/g;\r\n return StarPathSegment;\r\n})();\r\n/**\r\n * Parses a URL string using a given matcher DSL, and generates URLs from param maps\r\n */\r\nvar ParamRoutePath = (function () {\r\n /**\r\n * Takes a string representing the matcher DSL\r\n */\r\n function ParamRoutePath(routePath) {\r\n this.routePath = routePath;\r\n this.terminal = true;\r\n this._assertValidPath(routePath);\r\n this._parsePathString(routePath);\r\n this.specificity = this._calculateSpecificity();\r\n this.hash = this._calculateHash();\r\n var lastSegment = this._segments[this._segments.length - 1];\r\n this.terminal = !(lastSegment instanceof ContinuationPathSegment);\r\n }\r\n ParamRoutePath.prototype.matchUrl = function (url) {\r\n var nextUrlSegment = url;\r\n var currentUrlSegment;\r\n var positionalParams = {};\r\n var captured = [];\r\n for (var i = 0; i < this._segments.length; i += 1) {\r\n var pathSegment = this._segments[i];\r\n currentUrlSegment = nextUrlSegment;\r\n if (pathSegment instanceof ContinuationPathSegment) {\r\n break;\r\n }\r\n if (isPresent(currentUrlSegment)) {\r\n // the star segment consumes all of the remaining URL, including matrix params\r\n if (pathSegment instanceof StarPathSegment) {\r\n positionalParams[pathSegment.name] = currentUrlSegment.toString();\r\n captured.push(currentUrlSegment.toString());\r\n nextUrlSegment = null;\r\n break;\r\n }\r\n captured.push(currentUrlSegment.path);\r\n if (pathSegment instanceof DynamicPathSegment) {\r\n positionalParams[pathSegment.name] = decodeDynamicSegment(currentUrlSegment.path);\r\n }\r\n else if (!pathSegment.match(currentUrlSegment.path)) {\r\n return null;\r\n }\r\n nextUrlSegment = currentUrlSegment.child;\r\n }\r\n else if (!pathSegment.match('')) {\r\n return null;\r\n }\r\n }\r\n if (this.terminal && isPresent(nextUrlSegment)) {\r\n return null;\r\n }\r\n var urlPath = captured.join('/');\r\n var auxiliary = [];\r\n var urlParams = [];\r\n var allParams = positionalParams;\r\n if (isPresent(currentUrlSegment)) {\r\n // If this is the root component, read query params. Otherwise, read matrix params.\r\n var paramsSegment = url instanceof url_parser_1.RootUrl ? url : currentUrlSegment;\r\n if (isPresent(paramsSegment.params)) {\r\n allParams = StringMapWrapper.merge(paramsSegment.params, positionalParams);\r\n urlParams = url_parser_1.convertUrlParamsToArray(paramsSegment.params);\r\n }\r\n else {\r\n allParams = positionalParams;\r\n }\r\n auxiliary = currentUrlSegment.auxiliary;\r\n }\r\n return new route_path_1.MatchedUrl(urlPath, urlParams, allParams, auxiliary, nextUrlSegment);\r\n };\r\n ParamRoutePath.prototype.generateUrl = function (params) {\r\n var paramTokens = new utils_1.TouchMap(params);\r\n var path = [];\r\n for (var i = 0; i < this._segments.length; i++) {\r\n var segment = this._segments[i];\r\n if (!(segment instanceof ContinuationPathSegment)) {\r\n path.push(segment.generate(paramTokens));\r\n }\r\n }\r\n var urlPath = path.join('/');\r\n var nonPositionalParams = paramTokens.getUnused();\r\n var urlParams = nonPositionalParams;\r\n return new route_path_1.GeneratedUrl(urlPath, urlParams);\r\n };\r\n ParamRoutePath.prototype.toString = function () { return this.routePath; };\r\n ParamRoutePath.prototype._parsePathString = function (routePath) {\r\n // normalize route as not starting with a \"/\". Recognition will\r\n // also normalize.\r\n if (routePath.startsWith('/')) {\r\n routePath = routePath.substring(1);\r\n }\r\n var segmentStrings = routePath.split('/');\r\n this._segments = [];\r\n var limit = segmentStrings.length - 1;\r\n for (var i = 0; i <= limit; i++) {\r\n var segment = segmentStrings[i], match;\r\n if (isPresent(match = RegExpWrapper.firstMatch(DynamicPathSegment.paramMatcher, segment))) {\r\n this._segments.push(new DynamicPathSegment(match[1]));\r\n }\r\n else if (isPresent(match = RegExpWrapper.firstMatch(StarPathSegment.wildcardMatcher, segment))) {\r\n this._segments.push(new StarPathSegment(match[1]));\r\n }\r\n else if (segment == '...') {\r\n if (i < limit) {\r\n throw new BaseException(\"Unexpected \\\"...\\\" before the end of the path for \\\"\" + routePath + \"\\\".\");\r\n }\r\n this._segments.push(new ContinuationPathSegment());\r\n }\r\n else {\r\n this._segments.push(new StaticPathSegment(segment));\r\n }\r\n }\r\n };\r\n ParamRoutePath.prototype._calculateSpecificity = function () {\r\n // The \"specificity\" of a path is used to determine which route is used when multiple routes\r\n // match\r\n // a URL. Static segments (like \"/foo\") are the most specific, followed by dynamic segments\r\n // (like\r\n // \"/:id\"). Star segments add no specificity. Segments at the start of the path are more\r\n // specific\r\n // than proceeding ones.\r\n //\r\n // The code below uses place values to combine the different types of segments into a single\r\n // string that we can sort later. Each static segment is marked as a specificity of \"2,\" each\r\n // dynamic segment is worth \"1\" specificity, and stars are worth \"0\" specificity.\r\n var i, length = this._segments.length, specificity;\r\n if (length == 0) {\r\n // a single slash (or \"empty segment\" is as specific as a static segment\r\n specificity += '2';\r\n }\r\n else {\r\n specificity = '';\r\n for (i = 0; i < length; i++) {\r\n specificity += this._segments[i].specificity;\r\n }\r\n }\r\n return specificity;\r\n };\r\n ParamRoutePath.prototype._calculateHash = function () {\r\n // this function is used to determine whether a route config path like `/foo/:id` collides with\r\n // `/foo/:name`\r\n var i, length = this._segments.length;\r\n var hashParts = [];\r\n for (i = 0; i < length; i++) {\r\n hashParts.push(this._segments[i].hash);\r\n }\r\n return hashParts.join('/');\r\n };\r\n ParamRoutePath.prototype._assertValidPath = function (path) {\r\n if (StringWrapper.contains(path, '#')) {\r\n throw new BaseException(\"Path \\\"\" + path + \"\\\" should not include \\\"#\\\". Use \\\"HashLocationStrategy\\\" instead.\");\r\n }\r\n var illegalCharacter = RegExpWrapper.firstMatch(ParamRoutePath.RESERVED_CHARS, path);\r\n if (isPresent(illegalCharacter)) {\r\n throw new BaseException(\"Path \\\"\" + path + \"\\\" contains \\\"\" + illegalCharacter[0] + \"\\\" which is not allowed in a route config.\");\r\n }\r\n };\r\n ParamRoutePath.RESERVED_CHARS = RegExpWrapper.create('//|\\\\(|\\\\)|;|\\\\?|=');\r\n return ParamRoutePath;\r\n})();\r\nexports.ParamRoutePath = ParamRoutePath;\r\nvar REGEXP_PERCENT = /%/g;\r\nvar REGEXP_SLASH = /\\//g;\r\nvar REGEXP_OPEN_PARENT = /\\(/g;\r\nvar REGEXP_CLOSE_PARENT = /\\)/g;\r\nvar REGEXP_SEMICOLON = /;/g;\r\nfunction encodeDynamicSegment(value) {\r\n if (isBlank(value)) {\r\n return null;\r\n }\r\n value = StringWrapper.replaceAll(value, REGEXP_PERCENT, '%25');\r\n value = StringWrapper.replaceAll(value, REGEXP_SLASH, '%2F');\r\n value = StringWrapper.replaceAll(value, REGEXP_OPEN_PARENT, '%28');\r\n value = StringWrapper.replaceAll(value, REGEXP_CLOSE_PARENT, '%29');\r\n value = StringWrapper.replaceAll(value, REGEXP_SEMICOLON, '%3B');\r\n return value;\r\n}\r\nvar REGEXP_ENC_SEMICOLON = /%3B/ig;\r\nvar REGEXP_ENC_CLOSE_PARENT = /%29/ig;\r\nvar REGEXP_ENC_OPEN_PARENT = /%28/ig;\r\nvar REGEXP_ENC_SLASH = /%2F/ig;\r\nvar REGEXP_ENC_PERCENT = /%25/ig;\r\nfunction decodeDynamicSegment(value) {\r\n if (isBlank(value)) {\r\n return null;\r\n }\r\n value = StringWrapper.replaceAll(value, REGEXP_ENC_SEMICOLON, ';');\r\n value = StringWrapper.replaceAll(value, REGEXP_ENC_CLOSE_PARENT, ')');\r\n value = StringWrapper.replaceAll(value, REGEXP_ENC_OPEN_PARENT, '(');\r\n value = StringWrapper.replaceAll(value, REGEXP_ENC_SLASH, '/');\r\n value = StringWrapper.replaceAll(value, REGEXP_ENC_PERCENT, '%');\r\n return value;\r\n}\r\nvar route_path_1 = routerRequire('./route_path');\r\nvar RegexRoutePath = (function () {\r\n function RegexRoutePath(_reString, _serializer) {\r\n this._reString = _reString;\r\n this._serializer = _serializer;\r\n this.terminal = true;\r\n this.specificity = '2';\r\n this.hash = this._reString;\r\n this._regex = RegExpWrapper.create(this._reString);\r\n }\r\n RegexRoutePath.prototype.matchUrl = function (url) {\r\n var urlPath = url.toString();\r\n var params = {};\r\n var matcher = RegExpWrapper.matcher(this._regex, urlPath);\r\n var match = RegExpMatcherWrapper.next(matcher);\r\n if (isBlank(match)) {\r\n return null;\r\n }\r\n for (var i = 0; i < match.length; i += 1) {\r\n params[i.toString()] = match[i];\r\n }\r\n return new route_path_1.MatchedUrl(urlPath, [], params, [], null);\r\n };\r\n RegexRoutePath.prototype.generateUrl = function (params) { return this._serializer(params); };\r\n RegexRoutePath.prototype.toString = function () { return this._reString; };\r\n return RegexRoutePath;\r\n})();\r\nexports.RegexRoutePath = RegexRoutePath;\r\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\n/**\r\n * `RouteParams` is an immutable map of parameters for the given route\r\n * based on the url matcher and optional parameters for that route.\r\n *\r\n * You can inject `RouteParams` into the constructor of a component to use it.\r\n *\r\n * ### Example\r\n *\r\n * ```\r\n * import {Component} from 'angular2/core';\r\n * import {bootstrap} from 'angular2/platform/browser';\r\n * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouteParams} from\r\n * 'angular2/router';\r\n *\r\n * @Component({directives: [ROUTER_DIRECTIVES]})\r\n * @RouteConfig([\r\n * {path: '/user/:id', component: UserCmp, name: 'UserCmp'},\r\n * ])\r\n * class AppCmp {}\r\n *\r\n * @Component({ template: 'user: {{id}}' })\r\n * class UserCmp {\r\n * id: string;\r\n * constructor(params: RouteParams) {\r\n * this.id = params.get('id');\r\n * }\r\n * }\r\n *\r\n * bootstrap(AppCmp, ROUTER_PROVIDERS);\r\n * ```\r\n */\r\nvar RouteParams = (function () {\r\n function RouteParams(params) {\r\n this.params = params;\r\n }\r\n RouteParams.prototype.get = function (param) { return normalizeBlank(StringMapWrapper.get(this.params, param)); };\r\n return RouteParams;\r\n})();\r\nexports.RouteParams = RouteParams;\r\n/**\r\n * `RouteData` is an immutable map of additional data you can configure in your {@link Route}.\r\n *\r\n * You can inject `RouteData` into the constructor of a component to use it.\r\n *\r\n * ### Example\r\n *\r\n * ```\r\n * import {Component} from 'angular2/core';\r\n * import {bootstrap} from 'angular2/platform/browser';\r\n * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouteData} from\r\n * 'angular2/router';\r\n *\r\n * @Component({directives: [ROUTER_DIRECTIVES]})\r\n * @RouteConfig([\r\n * {path: '/user/:id', component: UserCmp, name: 'UserCmp', data: {isAdmin: true}},\r\n * ])\r\n * class AppCmp {}\r\n *\r\n * @Component({\r\n * ...,\r\n * template: 'user: {{isAdmin}}'\r\n * })\r\n * class UserCmp {\r\n * string: isAdmin;\r\n * constructor(data: RouteData) {\r\n * this.isAdmin = data.get('isAdmin');\r\n * }\r\n * }\r\n *\r\n * bootstrap(AppCmp, ROUTER_PROVIDERS);\r\n * ```\r\n */\r\nvar RouteData = (function () {\r\n function RouteData(data) {\r\n if (data === void 0) { data = CONST_EXPR({}); }\r\n this.data = data;\r\n }\r\n RouteData.prototype.get = function (key) { return normalizeBlank(StringMapWrapper.get(this.data, key)); };\r\n return RouteData;\r\n})();\r\nexports.RouteData = RouteData;\r\nexports.BLANK_ROUTE_DATA = new RouteData();\r\n/**\r\n * `Instruction` is a tree of {@link ComponentInstruction}s with all the information needed\r\n * to transition each component in the app to a given route, including all auxiliary routes.\r\n *\r\n * `Instruction`s can be created using {@link Router#generate}, and can be used to\r\n * perform route changes with {@link Router#navigateByInstruction}.\r\n *\r\n * ### Example\r\n *\r\n * ```\r\n * import {Component} from 'angular2/core';\r\n * import {bootstrap} from 'angular2/platform/browser';\r\n * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig} from 'angular2/router';\r\n *\r\n * @Component({directives: [ROUTER_DIRECTIVES]})\r\n * @RouteConfig([\r\n * {...},\r\n * ])\r\n * class AppCmp {\r\n * constructor(router: Router) {\r\n * var instruction = router.generate(['/MyRoute']);\r\n * router.navigateByInstruction(instruction);\r\n * }\r\n * }\r\n *\r\n * bootstrap(AppCmp, ROUTER_PROVIDERS);\r\n * ```\r\n */\r\nvar Instruction = (function () {\r\n function Instruction(component, child, auxInstruction) {\r\n this.component = component;\r\n this.child = child;\r\n this.auxInstruction = auxInstruction;\r\n }\r\n Object.defineProperty(Instruction.prototype, \"urlPath\", {\r\n get: function () { return isPresent(this.component) ? this.component.urlPath : ''; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Instruction.prototype, \"urlParams\", {\r\n get: function () { return isPresent(this.component) ? this.component.urlParams : []; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Instruction.prototype, \"specificity\", {\r\n get: function () {\r\n var total = '';\r\n if (isPresent(this.component)) {\r\n total += this.component.specificity;\r\n }\r\n if (isPresent(this.child)) {\r\n total += this.child.specificity;\r\n }\r\n return total;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * converts the instruction into a URL string\r\n */\r\n Instruction.prototype.toRootUrl = function () { return this.toUrlPath() + this.toUrlQuery(); };\r\n /** @internal */\r\n Instruction.prototype._toNonRootUrl = function () {\r\n return this._stringifyPathMatrixAuxPrefixed() +\r\n (isPresent(this.child) ? this.child._toNonRootUrl() : '');\r\n };\r\n Instruction.prototype.toUrlQuery = function () { return this.urlParams.length > 0 ? ('?' + this.urlParams.join('&')) : ''; };\r\n /**\r\n * Returns a new instruction that shares the state of the existing instruction, but with\r\n * the given child {@link Instruction} replacing the existing child.\r\n */\r\n Instruction.prototype.replaceChild = function (child) {\r\n return new ResolvedInstruction(this.component, child, this.auxInstruction);\r\n };\r\n /**\r\n * If the final URL for the instruction is ``\r\n */\r\n Instruction.prototype.toUrlPath = function () {\r\n return this.urlPath + this._stringifyAux() +\r\n (isPresent(this.child) ? this.child._toNonRootUrl() : '');\r\n };\r\n // default instructions override these\r\n Instruction.prototype.toLinkUrl = function () {\r\n return this.urlPath + this._stringifyAux() +\r\n (isPresent(this.child) ? this.child._toLinkUrl() : '') + this.toUrlQuery();\r\n };\r\n // this is the non-root version (called recursively)\r\n /** @internal */\r\n Instruction.prototype._toLinkUrl = function () {\r\n return this._stringifyPathMatrixAuxPrefixed() +\r\n (isPresent(this.child) ? this.child._toLinkUrl() : '');\r\n };\r\n /** @internal */\r\n Instruction.prototype._stringifyPathMatrixAuxPrefixed = function () {\r\n var primary = this._stringifyPathMatrixAux();\r\n if (primary.length > 0) {\r\n primary = '/' + primary;\r\n }\r\n return primary;\r\n };\r\n /** @internal */\r\n Instruction.prototype._stringifyMatrixParams = function () {\r\n return this.urlParams.length > 0 ? (';' + this.urlParams.join(';')) : '';\r\n };\r\n /** @internal */\r\n Instruction.prototype._stringifyPathMatrixAux = function () {\r\n if (isBlank(this.component)) {\r\n return '';\r\n }\r\n return this.urlPath + this._stringifyMatrixParams() + this._stringifyAux();\r\n };\r\n /** @internal */\r\n Instruction.prototype._stringifyAux = function () {\r\n var routes = [];\r\n StringMapWrapper.forEach(this.auxInstruction, function (auxInstruction, _) {\r\n routes.push(auxInstruction._stringifyPathMatrixAux());\r\n });\r\n if (routes.length > 0) {\r\n return '(' + routes.join('//') + ')';\r\n }\r\n return '';\r\n };\r\n return Instruction;\r\n})();\r\nexports.Instruction = Instruction;\r\n/**\r\n * a resolved instruction has an outlet instruction for itself, but maybe not for...\r\n */\r\nvar ResolvedInstruction = (function (_super) {\r\n __extends(ResolvedInstruction, _super);\r\n function ResolvedInstruction(component, child, auxInstruction) {\r\n _super.call(this, component, child, auxInstruction);\r\n }\r\n ResolvedInstruction.prototype.resolveComponent = function () {\r\n return PromiseWrapper.resolve(this.component);\r\n };\r\n return ResolvedInstruction;\r\n})(Instruction);\r\nexports.ResolvedInstruction = ResolvedInstruction;\r\n/**\r\n * Represents a resolved default route\r\n */\r\nvar DefaultInstruction = (function (_super) {\r\n __extends(DefaultInstruction, _super);\r\n function DefaultInstruction(component, child) {\r\n _super.call(this, component, child, {});\r\n }\r\n DefaultInstruction.prototype.toLinkUrl = function () { return ''; };\r\n /** @internal */\r\n DefaultInstruction.prototype._toLinkUrl = function () { return ''; };\r\n return DefaultInstruction;\r\n})(ResolvedInstruction);\r\nexports.DefaultInstruction = DefaultInstruction;\r\n/**\r\n * Represents a component that may need to do some redirection or lazy loading at a later time.\r\n */\r\nvar UnresolvedInstruction = (function (_super) {\r\n __extends(UnresolvedInstruction, _super);\r\n function UnresolvedInstruction(_resolver, _urlPath, _urlParams) {\r\n if (_urlPath === void 0) { _urlPath = ''; }\r\n if (_urlParams === void 0) { _urlParams = CONST_EXPR([]); }\r\n _super.call(this, null, null, {});\r\n this._resolver = _resolver;\r\n this._urlPath = _urlPath;\r\n this._urlParams = _urlParams;\r\n }\r\n Object.defineProperty(UnresolvedInstruction.prototype, \"urlPath\", {\r\n get: function () {\r\n if (isPresent(this.component)) {\r\n return this.component.urlPath;\r\n }\r\n if (isPresent(this._urlPath)) {\r\n return this._urlPath;\r\n }\r\n return '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(UnresolvedInstruction.prototype, \"urlParams\", {\r\n get: function () {\r\n if (isPresent(this.component)) {\r\n return this.component.urlParams;\r\n }\r\n if (isPresent(this._urlParams)) {\r\n return this._urlParams;\r\n }\r\n return [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n UnresolvedInstruction.prototype.resolveComponent = function () {\r\n var _this = this;\r\n if (isPresent(this.component)) {\r\n return PromiseWrapper.resolve(this.component);\r\n }\r\n return this._resolver().then(function (instruction) {\r\n _this.child = isPresent(instruction) ? instruction.child : null;\r\n return _this.component = isPresent(instruction) ? instruction.component : null;\r\n });\r\n };\r\n return UnresolvedInstruction;\r\n})(Instruction);\r\nexports.UnresolvedInstruction = UnresolvedInstruction;\r\nvar RedirectInstruction = (function (_super) {\r\n __extends(RedirectInstruction, _super);\r\n function RedirectInstruction(component, child, auxInstruction, _specificity) {\r\n _super.call(this, component, child, auxInstruction);\r\n this._specificity = _specificity;\r\n }\r\n Object.defineProperty(RedirectInstruction.prototype, \"specificity\", {\r\n get: function () { return this._specificity; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return RedirectInstruction;\r\n})(ResolvedInstruction);\r\nexports.RedirectInstruction = RedirectInstruction;\r\n/**\r\n * A `ComponentInstruction` represents the route state for a single component.\r\n *\r\n * `ComponentInstructions` is a public API. Instances of `ComponentInstruction` are passed\r\n * to route lifecycle hooks, like {@link CanActivate}.\r\n *\r\n * `ComponentInstruction`s are [hash consed](https://en.wikipedia.org/wiki/Hash_consing). You should\r\n * never construct one yourself with \"new.\" Instead, rely on {@link Router/RouteRecognizer} to\r\n * construct `ComponentInstruction`s.\r\n *\r\n * You should not modify this object. It should be treated as immutable.\r\n */\r\nvar ComponentInstruction = (function () {\r\n /**\r\n * @internal\r\n */\r\n function ComponentInstruction(urlPath, urlParams, data, componentType, terminal, specificity, params, routeName) {\r\n if (params === void 0) { params = null; }\r\n this.urlPath = urlPath;\r\n this.urlParams = urlParams;\r\n this.componentType = componentType;\r\n this.terminal = terminal;\r\n this.specificity = specificity;\r\n this.params = params;\r\n this.routeName = routeName;\r\n this.reuse = false;\r\n this.routeData = isPresent(data) ? data : exports.BLANK_ROUTE_DATA;\r\n }\r\n return ComponentInstruction;\r\n})();\r\nexports.ComponentInstruction = ComponentInstruction;\r\nvar core_1 = routerRequire('angular2/core');\r\nvar route_config_impl_1 = routerRequire('./route_config/route_config_impl');\r\nvar rules_1 = routerRequire('./rules/rules');\r\nvar rule_set_1 = routerRequire('./rules/rule_set');\r\nvar instruction_1 = routerRequire('./instruction');\r\nvar route_config_normalizer_1 = routerRequire('./route_config/route_config_normalizer');\r\nvar url_parser_1 = routerRequire('./url_parser');\r\nvar _resolveToNull = PromiseWrapper.resolve(null);\r\n// A LinkItemArray is an array, which describes a set of routes\r\n// The items in the array are found in groups:\r\n// - the first item is the name of the route\r\n// - the next items are:\r\n// - an object containing parameters\r\n// - or an array describing an aux route\r\n// export type LinkRouteItem = string | Object;\r\n// export type LinkItem = LinkRouteItem | Array;\r\n// export type LinkItemArray = Array;\r\n/**\r\n * Token used to bind the component with the top-level {@link RouteConfig}s for the\r\n * application.\r\n *\r\n * ### Example ([live demo](http://plnkr.co/edit/iRUP8B5OUbxCWQ3AcIDm))\r\n *\r\n * ```\r\n * import {Component} from 'angular2/core';\r\n * import {\r\n * ROUTER_DIRECTIVES,\r\n * ROUTER_PROVIDERS,\r\n * RouteConfig\r\n * } from 'angular2/router';\r\n *\r\n * @Component({directives: [ROUTER_DIRECTIVES]})\r\n * @RouteConfig([\r\n * {...},\r\n * ])\r\n * class AppCmp {\r\n * // ...\r\n * }\r\n *\r\n * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\r\n * ```\r\n */\r\nexports.ROUTER_PRIMARY_COMPONENT = CONST_EXPR(new core_1.OpaqueToken('RouterPrimaryComponent'));\r\n/**\r\n * The RouteRegistry holds route configurations for each component in an Angular app.\r\n * It is responsible for creating Instructions from URLs, and generating URLs based on route and\r\n * parameters.\r\n */\r\nvar RouteRegistry = (function () {\r\n function RouteRegistry(_rootComponent) {\r\n this._rootComponent = _rootComponent;\r\n this._rules = new Map();\r\n }\r\n /**\r\n * Given a component and a configuration object, add the route to this registry\r\n */\r\n RouteRegistry.prototype.config = function (parentComponent, config) {\r\n config = route_config_normalizer_1.normalizeRouteConfig(config, this);\r\n // this is here because Dart type guard reasons\r\n if (config instanceof route_config_impl_1.Route) {\r\n route_config_normalizer_1.assertComponentExists(config.component, config.path);\r\n }\r\n else if (config instanceof route_config_impl_1.AuxRoute) {\r\n route_config_normalizer_1.assertComponentExists(config.component, config.path);\r\n }\r\n var rules = this._rules.get(parentComponent);\r\n if (isBlank(rules)) {\r\n rules = new rule_set_1.RuleSet();\r\n this._rules.set(parentComponent, rules);\r\n }\r\n var terminal = rules.config(config);\r\n if (config instanceof route_config_impl_1.Route) {\r\n if (terminal) {\r\n assertTerminalComponent(config.component, config.path);\r\n }\r\n else {\r\n this.configFromComponent(config.component);\r\n }\r\n }\r\n };\r\n /**\r\n * Reads the annotations of a component and configures the registry based on them\r\n */\r\n RouteRegistry.prototype.configFromComponent = function (component) {\r\n var _this = this;\r\n if (!isType(component)) {\r\n return;\r\n }\r\n // Don't read the annotations from a type more than once –\r\n // this prevents an infinite loop if a component routes recursively.\r\n if (this._rules.has(component)) {\r\n return;\r\n }\r\n var annotations = reflector.annotations(component);\r\n if (isPresent(annotations)) {\r\n for (var i = 0; i < annotations.length; i++) {\r\n var annotation = annotations[i];\r\n if (annotation instanceof route_config_impl_1.RouteConfig) {\r\n var routeCfgs = annotation.configs;\r\n routeCfgs.forEach(function (config) { return _this.config(component, config); });\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Given a URL and a parent component, return the most specific instruction for navigating\r\n * the application into the state specified by the url\r\n */\r\n RouteRegistry.prototype.recognize = function (url, ancestorInstructions) {\r\n var parsedUrl = url_parser_1.parser.parse(url);\r\n return this._recognize(parsedUrl, []);\r\n };\r\n /**\r\n * Recognizes all parent-child routes, but creates unresolved auxiliary routes\r\n */\r\n RouteRegistry.prototype._recognize = function (parsedUrl, ancestorInstructions, _aux) {\r\n var _this = this;\r\n if (_aux === void 0) { _aux = false; }\r\n var parentInstruction = ListWrapper.last(ancestorInstructions);\r\n var parentComponent = isPresent(parentInstruction) ? parentInstruction.component.componentType :\r\n this._rootComponent;\r\n var rules = this._rules.get(parentComponent);\r\n if (isBlank(rules)) {\r\n return _resolveToNull;\r\n }\r\n // Matches some beginning part of the given URL\r\n var possibleMatches = _aux ? rules.recognizeAuxiliary(parsedUrl) : rules.recognize(parsedUrl);\r\n var matchPromises = possibleMatches.map(function (candidate) { return candidate.then(function (candidate) {\r\n if (candidate instanceof rules_1.PathMatch) {\r\n var auxParentInstructions = ancestorInstructions.length > 0 ? [ListWrapper.last(ancestorInstructions)] : [];\r\n var auxInstructions = _this._auxRoutesToUnresolved(candidate.remainingAux, auxParentInstructions);\r\n var instruction = new instruction_1.ResolvedInstruction(candidate.instruction, null, auxInstructions);\r\n if (isBlank(candidate.instruction) || candidate.instruction.terminal) {\r\n return instruction;\r\n }\r\n var newAncestorInstructions = ancestorInstructions.concat([instruction]);\r\n return _this._recognize(candidate.remaining, newAncestorInstructions)\r\n .then(function (childInstruction) {\r\n if (isBlank(childInstruction)) {\r\n return null;\r\n }\r\n // redirect instructions are already absolute\r\n if (childInstruction instanceof instruction_1.RedirectInstruction) {\r\n return childInstruction;\r\n }\r\n instruction.child = childInstruction;\r\n return instruction;\r\n });\r\n }\r\n if (candidate instanceof rules_1.RedirectMatch) {\r\n var instruction = _this.generate(candidate.redirectTo, ancestorInstructions.concat([null]));\r\n return new instruction_1.RedirectInstruction(instruction.component, instruction.child, instruction.auxInstruction, candidate.specificity);\r\n }\r\n }); });\r\n if ((isBlank(parsedUrl) || parsedUrl.path == '') && possibleMatches.length == 0) {\r\n return PromiseWrapper.resolve(this.generateDefault(parentComponent));\r\n }\r\n return PromiseWrapper.all(matchPromises).then(mostSpecific);\r\n };\r\n RouteRegistry.prototype._auxRoutesToUnresolved = function (auxRoutes, parentInstructions) {\r\n var _this = this;\r\n var unresolvedAuxInstructions = {};\r\n auxRoutes.forEach(function (auxUrl) {\r\n unresolvedAuxInstructions[auxUrl.path] = new instruction_1.UnresolvedInstruction(function () { return _this._recognize(auxUrl, parentInstructions, true); });\r\n });\r\n return unresolvedAuxInstructions;\r\n };\r\n /**\r\n * Given a normalized list with component names and params like: `['user', {id: 3 }]`\r\n * generates a url with a leading slash relative to the provided `parentComponent`.\r\n *\r\n * If the optional param `_aux` is `true`, then we generate starting at an auxiliary\r\n * route boundary.\r\n */\r\n RouteRegistry.prototype.generate = function (linkParams, ancestorInstructions, _aux) {\r\n if (_aux === void 0) { _aux = false; }\r\n var params = splitAndFlattenLinkParams(linkParams);\r\n var prevInstruction;\r\n // The first segment should be either '.' (generate from parent) or '' (generate from root).\r\n // When we normalize above, we strip all the slashes, './' becomes '.' and '/' becomes ''.\r\n if (ListWrapper.first(params) == '') {\r\n params.shift();\r\n prevInstruction = ListWrapper.first(ancestorInstructions);\r\n ancestorInstructions = [];\r\n }\r\n else {\r\n prevInstruction = ancestorInstructions.length > 0 ? ancestorInstructions.pop() : null;\r\n if (ListWrapper.first(params) == '.') {\r\n params.shift();\r\n }\r\n else if (ListWrapper.first(params) == '..') {\r\n while (ListWrapper.first(params) == '..') {\r\n if (ancestorInstructions.length <= 0) {\r\n throw new BaseException(\"Link \\\"\" + ListWrapper.toJSON(linkParams) + \"\\\" has too many \\\"../\\\" segments.\");\r\n }\r\n prevInstruction = ancestorInstructions.pop();\r\n params = ListWrapper.slice(params, 1);\r\n }\r\n }\r\n else {\r\n // we must only peak at the link param, and not consume it\r\n var routeName = ListWrapper.first(params);\r\n var parentComponentType = this._rootComponent;\r\n var grandparentComponentType = null;\r\n if (ancestorInstructions.length > 1) {\r\n var parentComponentInstruction = ancestorInstructions[ancestorInstructions.length - 1];\r\n var grandComponentInstruction = ancestorInstructions[ancestorInstructions.length - 2];\r\n parentComponentType = parentComponentInstruction.component.componentType;\r\n grandparentComponentType = grandComponentInstruction.component.componentType;\r\n }\r\n else if (ancestorInstructions.length == 1) {\r\n parentComponentType = ancestorInstructions[0].component.componentType;\r\n grandparentComponentType = this._rootComponent;\r\n }\r\n // For a link with no leading `./`, `/`, or `../`, we look for a sibling and child.\r\n // If both exist, we throw. Otherwise, we prefer whichever exists.\r\n var childRouteExists = this.hasRoute(routeName, parentComponentType);\r\n var parentRouteExists = isPresent(grandparentComponentType) &&\r\n this.hasRoute(routeName, grandparentComponentType);\r\n if (parentRouteExists && childRouteExists) {\r\n var msg = \"Link \\\"\" + ListWrapper.toJSON(linkParams) + \"\\\" is ambiguous, use \\\"./\\\" or \\\"../\\\" to disambiguate.\";\r\n throw new BaseException(msg);\r\n }\r\n if (parentRouteExists) {\r\n prevInstruction = ancestorInstructions.pop();\r\n }\r\n }\r\n }\r\n if (params[params.length - 1] == '') {\r\n params.pop();\r\n }\r\n if (params.length > 0 && params[0] == '') {\r\n params.shift();\r\n }\r\n if (params.length < 1) {\r\n var msg = \"Link \\\"\" + ListWrapper.toJSON(linkParams) + \"\\\" must include a route name.\";\r\n throw new BaseException(msg);\r\n }\r\n var generatedInstruction = this._generate(params, ancestorInstructions, prevInstruction, _aux, linkParams);\r\n // we don't clone the first (root) element\r\n for (var i = ancestorInstructions.length - 1; i >= 0; i--) {\r\n var ancestorInstruction = ancestorInstructions[i];\r\n if (isBlank(ancestorInstruction)) {\r\n break;\r\n }\r\n generatedInstruction = ancestorInstruction.replaceChild(generatedInstruction);\r\n }\r\n return generatedInstruction;\r\n };\r\n /*\r\n * Internal helper that does not make any assertions about the beginning of the link DSL.\r\n * `ancestorInstructions` are parents that will be cloned.\r\n * `prevInstruction` is the existing instruction that would be replaced, but which might have\r\n * aux routes that need to be cloned.\r\n */\r\n RouteRegistry.prototype._generate = function (linkParams, ancestorInstructions, prevInstruction, _aux, _originalLink) {\r\n var _this = this;\r\n if (_aux === void 0) { _aux = false; }\r\n var parentComponentType = this._rootComponent;\r\n var componentInstruction = null;\r\n var auxInstructions = {};\r\n var parentInstruction = ListWrapper.last(ancestorInstructions);\r\n if (isPresent(parentInstruction) && isPresent(parentInstruction.component)) {\r\n parentComponentType = parentInstruction.component.componentType;\r\n }\r\n if (linkParams.length == 0) {\r\n var defaultInstruction = this.generateDefault(parentComponentType);\r\n if (isBlank(defaultInstruction)) {\r\n throw new BaseException(\"Link \\\"\" + ListWrapper.toJSON(_originalLink) + \"\\\" does not resolve to a terminal instruction.\");\r\n }\r\n return defaultInstruction;\r\n }\r\n // for non-aux routes, we want to reuse the predecessor's existing primary and aux routes\r\n // and only override routes for which the given link DSL provides\r\n if (isPresent(prevInstruction) && !_aux) {\r\n auxInstructions = StringMapWrapper.merge(prevInstruction.auxInstruction, auxInstructions);\r\n componentInstruction = prevInstruction.component;\r\n }\r\n var rules = this._rules.get(parentComponentType);\r\n if (isBlank(rules)) {\r\n throw new BaseException(\"Component \\\"\" + getTypeNameForDebugging(parentComponentType) + \"\\\" has no route config.\");\r\n }\r\n var linkParamIndex = 0;\r\n var routeParams = {};\r\n // first, recognize the primary route if one is provided\r\n if (linkParamIndex < linkParams.length && isString(linkParams[linkParamIndex])) {\r\n var routeName = linkParams[linkParamIndex];\r\n if (routeName == '' || routeName == '.' || routeName == '..') {\r\n throw new BaseException(\"\\\"\" + routeName + \"/\\\" is only allowed at the beginning of a link DSL.\");\r\n }\r\n linkParamIndex += 1;\r\n if (linkParamIndex < linkParams.length) {\r\n var linkParam = linkParams[linkParamIndex];\r\n if (isStringMap(linkParam) && !isArray(linkParam)) {\r\n routeParams = linkParam;\r\n linkParamIndex += 1;\r\n }\r\n }\r\n var routeRecognizer = (_aux ? rules.auxRulesByName : rules.rulesByName).get(routeName);\r\n if (isBlank(routeRecognizer)) {\r\n throw new BaseException(\"Component \\\"\" + getTypeNameForDebugging(parentComponentType) + \"\\\" has no route named \\\"\" + routeName + \"\\\".\");\r\n }\r\n // Create an \"unresolved instruction\" for async routes\r\n // we'll figure out the rest of the route when we resolve the instruction and\r\n // perform a navigation\r\n if (isBlank(routeRecognizer.handler.componentType)) {\r\n var generatedUrl = routeRecognizer.generateComponentPathValues(routeParams);\r\n return new instruction_1.UnresolvedInstruction(function () {\r\n return routeRecognizer.handler.resolveComponentType().then(function (_) {\r\n return _this._generate(linkParams, ancestorInstructions, prevInstruction, _aux, _originalLink);\r\n });\r\n }, generatedUrl.urlPath, url_parser_1.convertUrlParamsToArray(generatedUrl.urlParams));\r\n }\r\n componentInstruction = _aux ? rules.generateAuxiliary(routeName, routeParams) :\r\n rules.generate(routeName, routeParams);\r\n }\r\n // Next, recognize auxiliary instructions.\r\n // If we have an ancestor instruction, we preserve whatever aux routes are active from it.\r\n while (linkParamIndex < linkParams.length && isArray(linkParams[linkParamIndex])) {\r\n var auxParentInstruction = [parentInstruction];\r\n var auxInstruction = this._generate(linkParams[linkParamIndex], auxParentInstruction, null, true, _originalLink);\r\n // TODO: this will not work for aux routes with parameters or multiple segments\r\n auxInstructions[auxInstruction.component.urlPath] = auxInstruction;\r\n linkParamIndex += 1;\r\n }\r\n var instruction = new instruction_1.ResolvedInstruction(componentInstruction, null, auxInstructions);\r\n // If the component is sync, we can generate resolved child route instructions\r\n // If not, we'll resolve the instructions at navigation time\r\n if (isPresent(componentInstruction) && isPresent(componentInstruction.componentType)) {\r\n var childInstruction = null;\r\n if (componentInstruction.terminal) {\r\n if (linkParamIndex >= linkParams.length) {\r\n }\r\n }\r\n else {\r\n var childAncestorComponents = ancestorInstructions.concat([instruction]);\r\n var remainingLinkParams = linkParams.slice(linkParamIndex);\r\n childInstruction = this._generate(remainingLinkParams, childAncestorComponents, null, false, _originalLink);\r\n }\r\n instruction.child = childInstruction;\r\n }\r\n return instruction;\r\n };\r\n RouteRegistry.prototype.hasRoute = function (name, parentComponent) {\r\n var rules = this._rules.get(parentComponent);\r\n if (isBlank(rules)) {\r\n return false;\r\n }\r\n return rules.hasRoute(name);\r\n };\r\n RouteRegistry.prototype.generateDefault = function (componentCursor) {\r\n var _this = this;\r\n if (isBlank(componentCursor)) {\r\n return null;\r\n }\r\n var rules = this._rules.get(componentCursor);\r\n if (isBlank(rules) || isBlank(rules.defaultRule)) {\r\n return null;\r\n }\r\n var defaultChild = null;\r\n if (isPresent(rules.defaultRule.handler.componentType)) {\r\n var componentInstruction = rules.defaultRule.generate({});\r\n if (!rules.defaultRule.terminal) {\r\n defaultChild = this.generateDefault(rules.defaultRule.handler.componentType);\r\n }\r\n return new instruction_1.DefaultInstruction(componentInstruction, defaultChild);\r\n }\r\n return new instruction_1.UnresolvedInstruction(function () {\r\n return rules.defaultRule.handler.resolveComponentType().then(function (_) { return _this.generateDefault(componentCursor); });\r\n });\r\n };\r\n return RouteRegistry;\r\n})();\r\nexports.RouteRegistry = RouteRegistry;\r\n/*\r\n * Given: ['/a/b', {c: 2}]\r\n * Returns: ['', 'a', 'b', {c: 2}]\r\n */\r\nfunction splitAndFlattenLinkParams(linkParams) {\r\n var accumulation = [];\r\n linkParams.forEach(function (item) {\r\n if (isString(item)) {\r\n var strItem = item;\r\n accumulation = accumulation.concat(strItem.split('/'));\r\n }\r\n else {\r\n accumulation.push(item);\r\n }\r\n });\r\n return accumulation;\r\n}\r\n/*\r\n * Given a list of instructions, returns the most specific instruction\r\n */\r\nfunction mostSpecific(instructions) {\r\n instructions = instructions.filter(function (instruction) { return isPresent(instruction); });\r\n if (instructions.length == 0) {\r\n return null;\r\n }\r\n if (instructions.length == 1) {\r\n return instructions[0];\r\n }\r\n var first = instructions[0];\r\n var rest = instructions.slice(1);\r\n return rest.reduce(function (instruction, contender) {\r\n if (compareSpecificityStrings(contender.specificity, instruction.specificity) == -1) {\r\n return contender;\r\n }\r\n return instruction;\r\n }, first);\r\n}\r\n/*\r\n * Expects strings to be in the form of \"[0-2]+\"\r\n * Returns -1 if string A should be sorted above string B, 1 if it should be sorted after,\r\n * or 0 if they are the same.\r\n */\r\nfunction compareSpecificityStrings(a, b) {\r\n var l = Math.min(a.length, b.length);\r\n for (var i = 0; i < l; i += 1) {\r\n var ai = StringWrapper.charCodeAt(a, i);\r\n var bi = StringWrapper.charCodeAt(b, i);\r\n var difference = bi - ai;\r\n if (difference != 0) {\r\n return difference;\r\n }\r\n }\r\n return a.length - b.length;\r\n}\r\nfunction assertTerminalComponent(component, path) {\r\n if (!isType(component)) {\r\n return;\r\n }\r\n var annotations = reflector.annotations(component);\r\n if (isPresent(annotations)) {\r\n for (var i = 0; i < annotations.length; i++) {\r\n var annotation = annotations[i];\r\n if (annotation instanceof route_config_impl_1.RouteConfig) {\r\n throw new BaseException(\"Child routes are not allowed for \\\"\" + path + \"\\\". Use \\\"...\\\" on the parent's route path.\");\r\n }\r\n }\r\n }\r\n}\r\nvar __extends = (this && this.__extends) || function (d, b) {\r\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\nvar route_lifecycle_reflector_1 = routerRequire('./lifecycle/route_lifecycle_reflector');\r\nvar _resolveToTrue = PromiseWrapper.resolve(true);\r\nvar _resolveToFalse = PromiseWrapper.resolve(false);\r\n/**\r\n * The `Router` is responsible for mapping URLs to components.\r\n *\r\n * You can see the state of the router by inspecting the read-only field `router.navigating`.\r\n * This may be useful for showing a spinner, for instance.\r\n *\r\n * ## Concepts\r\n *\r\n * Routers and component instances have a 1:1 correspondence.\r\n *\r\n * The router holds reference to a number of {@link RouterOutlet}.\r\n * An outlet is a placeholder that the router dynamically fills in depending on the current URL.\r\n *\r\n * When the router navigates from a URL, it must first recognize it and serialize it into an\r\n * `Instruction`.\r\n * The router uses the `RouteRegistry` to get an `Instruction`.\r\n */\r\nvar Router = (function () {\r\n function Router(registry, parent, hostComponent, root) {\r\n this.registry = registry;\r\n this.parent = parent;\r\n this.hostComponent = hostComponent;\r\n this.root = root;\r\n this.navigating = false;\r\n /**\r\n * The current `Instruction` for the router\r\n */\r\n this.currentInstruction = null;\r\n this._currentNavigation = _resolveToTrue;\r\n this._outlet = null;\r\n this._auxRouters = new Map();\r\n this._subject = new EventEmitter();\r\n }\r\n /**\r\n * Constructs a child router. You probably don't need to use this unless you're writing a reusable\r\n * component.\r\n */\r\n Router.prototype.childRouter = function (hostComponent) {\r\n return this._childRouter = new ChildRouter(this, hostComponent);\r\n };\r\n /**\r\n * Constructs a child router. You probably don't need to use this unless you're writing a reusable\r\n * component.\r\n */\r\n Router.prototype.auxRouter = function (hostComponent) { return new ChildRouter(this, hostComponent); };\r\n /**\r\n * Register an outlet to be notified of primary route changes.\r\n *\r\n * You probably don't need to use this unless you're writing a reusable component.\r\n */\r\n Router.prototype.registerPrimaryOutlet = function (outlet) {\r\n if (isPresent(outlet.name)) {\r\n throw new BaseException(\"registerPrimaryOutlet expects to be called with an unnamed outlet.\");\r\n }\r\n if (isPresent(this._outlet)) {\r\n throw new BaseException(\"Primary outlet is already registered.\");\r\n }\r\n this._outlet = outlet;\r\n if (isPresent(this.currentInstruction)) {\r\n return this.commit(this.currentInstruction, false);\r\n }\r\n return _resolveToTrue;\r\n };\r\n /**\r\n * Unregister an outlet (because it was destroyed, etc).\r\n *\r\n * You probably don't need to use this unless you're writing a custom outlet implementation.\r\n */\r\n Router.prototype.unregisterPrimaryOutlet = function (outlet) {\r\n if (isPresent(outlet.name)) {\r\n throw new BaseException(\"registerPrimaryOutlet expects to be called with an unnamed outlet.\");\r\n }\r\n this._outlet = null;\r\n };\r\n /**\r\n * Register an outlet to notified of auxiliary route changes.\r\n *\r\n * You probably don't need to use this unless you're writing a reusable component.\r\n */\r\n Router.prototype.registerAuxOutlet = function (outlet) {\r\n var outletName = outlet.name;\r\n if (isBlank(outletName)) {\r\n throw new BaseException(\"registerAuxOutlet expects to be called with an outlet with a name.\");\r\n }\r\n var router = this.auxRouter(this.hostComponent);\r\n this._auxRouters.set(outletName, router);\r\n router._outlet = outlet;\r\n var auxInstruction;\r\n if (isPresent(this.currentInstruction) &&\r\n isPresent(auxInstruction = this.currentInstruction.auxInstruction[outletName])) {\r\n return router.commit(auxInstruction);\r\n }\r\n return _resolveToTrue;\r\n };\r\n /**\r\n * Given an instruction, returns `true` if the instruction is currently active,\r\n * otherwise `false`.\r\n */\r\n Router.prototype.isRouteActive = function (instruction) {\r\n var _this = this;\r\n var router = this;\r\n if (isBlank(this.currentInstruction)) {\r\n return false;\r\n }\r\n // `instruction` corresponds to the root router\r\n while (isPresent(router.parent) && isPresent(instruction.child)) {\r\n router = router.parent;\r\n instruction = instruction.child;\r\n }\r\n if (isBlank(instruction.component) || isBlank(this.currentInstruction.component) ||\r\n this.currentInstruction.component.routeName != instruction.component.routeName) {\r\n return false;\r\n }\r\n var paramEquals = true;\r\n if (isPresent(this.currentInstruction.component.params)) {\r\n StringMapWrapper.forEach(instruction.component.params, function (value, key) {\r\n if (_this.currentInstruction.component.params[key] !== value) {\r\n paramEquals = false;\r\n }\r\n });\r\n }\r\n return paramEquals;\r\n };\r\n /**\r\n * Dynamically update the routing configuration and trigger a navigation.\r\n *\r\n * ### Usage\r\n *\r\n * ```\r\n * router.config([\r\n * { 'path': '/', 'component': IndexComp },\r\n * { 'path': '/user/:id', 'component': UserComp },\r\n * ]);\r\n * ```\r\n */\r\n Router.prototype.config = function (definitions) {\r\n var _this = this;\r\n definitions.forEach(function (routeDefinition) { _this.registry.config(_this.hostComponent, routeDefinition); });\r\n return this.renavigate();\r\n };\r\n /**\r\n * Navigate based on the provided Route Link DSL. It's preferred to navigate with this method\r\n * over `navigateByUrl`.\r\n *\r\n * ### Usage\r\n *\r\n * This method takes an array representing the Route Link DSL:\r\n * ```\r\n * ['./MyCmp', {param: 3}]\r\n * ```\r\n * See the {@link RouterLink} directive for more.\r\n */\r\n Router.prototype.navigate = function (linkParams) {\r\n var instruction = this.generate(linkParams);\r\n return this.navigateByInstruction(instruction, false);\r\n };\r\n /**\r\n * Navigate to a URL. Returns a promise that resolves when navigation is complete.\r\n * It's preferred to navigate with `navigate` instead of this method, since URLs are more brittle.\r\n *\r\n * If the given URL begins with a `/`, router will navigate absolutely.\r\n * If the given URL does not begin with `/`, the router will navigate relative to this component.\r\n */\r\n Router.prototype.navigateByUrl = function (url, _skipLocationChange) {\r\n var _this = this;\r\n if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n return this._currentNavigation = this._currentNavigation.then(function (_) {\r\n _this.lastNavigationAttempt = url;\r\n _this._startNavigating();\r\n return _this._afterPromiseFinishNavigating(_this.recognize(url).then(function (instruction) {\r\n if (isBlank(instruction)) {\r\n return false;\r\n }\r\n return _this._navigate(instruction, _skipLocationChange);\r\n }));\r\n });\r\n };\r\n /**\r\n * Navigate via the provided instruction. Returns a promise that resolves when navigation is\r\n * complete.\r\n */\r\n Router.prototype.navigateByInstruction = function (instruction, _skipLocationChange) {\r\n var _this = this;\r\n if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n if (isBlank(instruction)) {\r\n return _resolveToFalse;\r\n }\r\n return this._currentNavigation = this._currentNavigation.then(function (_) {\r\n _this._startNavigating();\r\n return _this._afterPromiseFinishNavigating(_this._navigate(instruction, _skipLocationChange));\r\n });\r\n };\r\n /** @internal */\r\n Router.prototype._settleInstruction = function (instruction) {\r\n var _this = this;\r\n return instruction.resolveComponent().then(function (_) {\r\n var unsettledInstructions = [];\r\n if (isPresent(instruction.component)) {\r\n instruction.component.reuse = false;\r\n }\r\n if (isPresent(instruction.child)) {\r\n unsettledInstructions.push(_this._settleInstruction(instruction.child));\r\n }\r\n StringMapWrapper.forEach(instruction.auxInstruction, function (instruction, _) {\r\n unsettledInstructions.push(_this._settleInstruction(instruction));\r\n });\r\n return PromiseWrapper.all(unsettledInstructions);\r\n });\r\n };\r\n /** @internal */\r\n Router.prototype._navigate = function (instruction, _skipLocationChange) {\r\n var _this = this;\r\n return this._settleInstruction(instruction)\r\n .then(function (_) { return _this._routerCanReuse(instruction); })\r\n .then(function (_) { return _this._canActivate(instruction); })\r\n .then(function (result) {\r\n if (!result) {\r\n return false;\r\n }\r\n return _this._routerCanDeactivate(instruction).then(function (result) {\r\n if (result) {\r\n return _this.commit(instruction, _skipLocationChange).then(function (_) {\r\n _this._emitNavigationFinish(instruction.toRootUrl());\r\n return true;\r\n });\r\n }\r\n });\r\n });\r\n };\r\n Router.prototype._emitNavigationFinish = function (url) { ObservableWrapper.callEmit(this._subject, url); };\r\n /** @internal */\r\n Router.prototype._emitNavigationFail = function (url) { ObservableWrapper.callError(this._subject, url); };\r\n Router.prototype._afterPromiseFinishNavigating = function (promise) {\r\n var _this = this;\r\n return PromiseWrapper.catchError(promise.then(function (_) { return _this._finishNavigating(); }), function (err) {\r\n _this._finishNavigating();\r\n throw err;\r\n });\r\n };\r\n /*\r\n * Recursively set reuse flags\r\n */\r\n /** @internal */\r\n Router.prototype._routerCanReuse = function (instruction) {\r\n var _this = this;\r\n if (isBlank(this._outlet)) {\r\n return _resolveToFalse;\r\n }\r\n if (isBlank(instruction.component)) {\r\n return _resolveToTrue;\r\n }\r\n return this._outlet.routerCanReuse(instruction.component).then(function (result) {\r\n instruction.component.reuse = result;\r\n if (result && isPresent(_this._childRouter) && isPresent(instruction.child)) {\r\n return _this._childRouter._routerCanReuse(instruction.child);\r\n }\r\n });\r\n };\r\n Router.prototype._canActivate = function (nextInstruction) {\r\n return canActivateOne(nextInstruction, this.currentInstruction);\r\n };\r\n Router.prototype._routerCanDeactivate = function (instruction) {\r\n var _this = this;\r\n if (isBlank(this._outlet)) {\r\n return _resolveToTrue;\r\n }\r\n var next;\r\n var childInstruction = null;\r\n var reuse = false;\r\n var componentInstruction = null;\r\n if (isPresent(instruction)) {\r\n childInstruction = instruction.child;\r\n componentInstruction = instruction.component;\r\n reuse = isBlank(instruction.component) || instruction.component.reuse;\r\n }\r\n if (reuse) {\r\n next = _resolveToTrue;\r\n }\r\n else {\r\n next = this._outlet.routerCanDeactivate(componentInstruction);\r\n }\r\n // TODO: aux route lifecycle hooks\r\n return next.then(function (result) {\r\n if (result == false) {\r\n return false;\r\n }\r\n if (isPresent(_this._childRouter)) {\r\n // TODO: ideally, this closure would map to async-await in Dart.\r\n // For now, casting to any to suppress an error.\r\n return _this._childRouter._routerCanDeactivate(childInstruction);\r\n }\r\n return true;\r\n });\r\n };\r\n /**\r\n * Updates this router and all descendant routers according to the given instruction\r\n */\r\n Router.prototype.commit = function (instruction, _skipLocationChange) {\r\n var _this = this;\r\n if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n this.currentInstruction = instruction;\r\n var next = _resolveToTrue;\r\n if (isPresent(this._outlet) && isPresent(instruction.component)) {\r\n var componentInstruction = instruction.component;\r\n if (componentInstruction.reuse) {\r\n next = this._outlet.reuse(componentInstruction);\r\n }\r\n else {\r\n next =\r\n this.deactivate(instruction).then(function (_) { return _this._outlet.activate(componentInstruction); });\r\n }\r\n if (isPresent(instruction.child)) {\r\n next = next.then(function (_) {\r\n if (isPresent(_this._childRouter)) {\r\n return _this._childRouter.commit(instruction.child);\r\n }\r\n });\r\n }\r\n }\r\n var promises = [];\r\n this._auxRouters.forEach(function (router, name) {\r\n if (isPresent(instruction.auxInstruction[name])) {\r\n promises.push(router.commit(instruction.auxInstruction[name]));\r\n }\r\n });\r\n return next.then(function (_) { return PromiseWrapper.all(promises); });\r\n };\r\n /** @internal */\r\n Router.prototype._startNavigating = function () { this.navigating = true; };\r\n /** @internal */\r\n Router.prototype._finishNavigating = function () { this.navigating = false; };\r\n /**\r\n * Subscribe to URL updates from the router\r\n */\r\n Router.prototype.subscribe = function (onNext, onError) {\r\n return ObservableWrapper.subscribe(this._subject, onNext, onError);\r\n };\r\n /**\r\n * Removes the contents of this router's outlet and all descendant outlets\r\n */\r\n Router.prototype.deactivate = function (instruction) {\r\n var _this = this;\r\n var childInstruction = null;\r\n var componentInstruction = null;\r\n if (isPresent(instruction)) {\r\n childInstruction = instruction.child;\r\n componentInstruction = instruction.component;\r\n }\r\n var next = _resolveToTrue;\r\n if (isPresent(this._childRouter)) {\r\n next = this._childRouter.deactivate(childInstruction);\r\n }\r\n if (isPresent(this._outlet)) {\r\n next = next.then(function (_) { return _this._outlet.deactivate(componentInstruction); });\r\n }\r\n // TODO: handle aux routes\r\n return next;\r\n };\r\n /**\r\n * Given a URL, returns an instruction representing the component graph\r\n */\r\n Router.prototype.recognize = function (url) {\r\n var ancestorComponents = this._getAncestorInstructions();\r\n return this.registry.recognize(url, ancestorComponents);\r\n };\r\n Router.prototype._getAncestorInstructions = function () {\r\n var ancestorInstructions = [this.currentInstruction];\r\n var ancestorRouter = this;\r\n while (isPresent(ancestorRouter = ancestorRouter.parent)) {\r\n ancestorInstructions.unshift(ancestorRouter.currentInstruction);\r\n }\r\n return ancestorInstructions;\r\n };\r\n /**\r\n * Navigates to either the last URL successfully navigated to, or the last URL requested if the\r\n * router has yet to successfully navigate.\r\n */\r\n Router.prototype.renavigate = function () {\r\n if (isBlank(this.lastNavigationAttempt)) {\r\n return this._currentNavigation;\r\n }\r\n return this.navigateByUrl(this.lastNavigationAttempt);\r\n };\r\n /**\r\n * Generate an `Instruction` based on the provided Route Link DSL.\r\n */\r\n Router.prototype.generate = function (linkParams) {\r\n var ancestorInstructions = this._getAncestorInstructions();\r\n return this.registry.generate(linkParams, ancestorInstructions);\r\n };\r\n return Router;\r\n})();\r\nexports.Router = Router;\r\nvar RootRouter = (function (_super) {\r\n __extends(RootRouter, _super);\r\n function RootRouter(registry, location, primaryComponent) {\r\n var _this = this;\r\n _super.call(this, registry, null, primaryComponent);\r\n this.root = this;\r\n this._location = location;\r\n this._locationSub = this._location.subscribe(function (change) {\r\n // we call recognize ourselves\r\n _this.recognize(change['url']).then(function (instruction) {\r\n if (isPresent(instruction)) {\r\n _this.navigateByInstruction(instruction, isPresent(change['pop'])).then(function (_) {\r\n // this is a popstate event; no need to change the URL\r\n if (isPresent(change['pop']) && change['type'] != 'hashchange') {\r\n return;\r\n }\r\n var emitPath = instruction.toUrlPath();\r\n var emitQuery = instruction.toUrlQuery();\r\n if (emitPath.length > 0 && emitPath[0] != '/') {\r\n emitPath = '/' + emitPath;\r\n }\r\n // We've opted to use pushstate and popState APIs regardless of whether you\r\n // an app uses HashLocationStrategy or PathLocationStrategy.\r\n // However, apps that are migrating might have hash links that operate outside\r\n // angular to which routing must respond.\r\n // Therefore we know that all hashchange events occur outside Angular.\r\n // To support these cases where we respond to hashchanges and redirect as a\r\n // result, we need to replace the top item on the stack.\r\n if (change['type'] == 'hashchange') {\r\n if (instruction.toRootUrl() != _this._location.path()) {\r\n _this._location.replaceState(emitPath, emitQuery);\r\n }\r\n }\r\n else {\r\n _this._location.go(emitPath, emitQuery);\r\n }\r\n });\r\n }\r\n else {\r\n _this._emitNavigationFail(change['url']);\r\n }\r\n });\r\n });\r\n this.registry.configFromComponent(primaryComponent);\r\n this.navigateByUrl(location.path());\r\n }\r\n RootRouter.prototype.commit = function (instruction, _skipLocationChange) {\r\n var _this = this;\r\n if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n var emitPath = instruction.toUrlPath();\r\n var emitQuery = instruction.toUrlQuery();\r\n if (emitPath.length > 0 && emitPath[0] != '/') {\r\n emitPath = '/' + emitPath;\r\n }\r\n var promise = _super.prototype.commit.call(this, instruction);\r\n if (!_skipLocationChange) {\r\n promise = promise.then(function (_) { _this._location.go(emitPath, emitQuery); });\r\n }\r\n return promise;\r\n };\r\n RootRouter.prototype.dispose = function () {\r\n if (isPresent(this._locationSub)) {\r\n ObservableWrapper.dispose(this._locationSub);\r\n this._locationSub = null;\r\n }\r\n };\r\n return RootRouter;\r\n})(Router);\r\nexports.RootRouter = RootRouter;\r\nvar ChildRouter = (function (_super) {\r\n __extends(ChildRouter, _super);\r\n function ChildRouter(parent, hostComponent) {\r\n _super.call(this, parent.registry, parent, hostComponent, parent.root);\r\n this.parent = parent;\r\n }\r\n ChildRouter.prototype.navigateByUrl = function (url, _skipLocationChange) {\r\n if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n // Delegate navigation to the root router\r\n return this.parent.navigateByUrl(url, _skipLocationChange);\r\n };\r\n ChildRouter.prototype.navigateByInstruction = function (instruction, _skipLocationChange) {\r\n if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n // Delegate navigation to the root router\r\n return this.parent.navigateByInstruction(instruction, _skipLocationChange);\r\n };\r\n return ChildRouter;\r\n})(Router);\r\nfunction canActivateOne(nextInstruction, prevInstruction) {\r\n var next = _resolveToTrue;\r\n if (isBlank(nextInstruction.component)) {\r\n return next;\r\n }\r\n if (isPresent(nextInstruction.child)) {\r\n next = canActivateOne(nextInstruction.child, isPresent(prevInstruction) ? prevInstruction.child : null);\r\n }\r\n return next.then(function (result) {\r\n if (result == false) {\r\n return false;\r\n }\r\n if (nextInstruction.component.reuse) {\r\n return true;\r\n }\r\n var hook = route_lifecycle_reflector_1.getCanActivateHook(nextInstruction.component.componentType);\r\n if (isPresent(hook)) {\r\n return hook(nextInstruction.component, isPresent(prevInstruction) ? prevInstruction.component : null);\r\n }\r\n return true;\r\n });\r\n}\r\n\r\n\r\n function getComponentConstructor(name) {\r\n var serviceName = name + 'Directive';\r\n if ($injector.has(serviceName)) {\r\n var definitions = $injector.get(serviceName);\r\n if (definitions.length > 1) {\r\n throw new BaseException('too many directives named \"' + name + '\"');\r\n }\r\n return definitions[0].controller;\r\n } else {\r\n throw new BaseException('directive \"' + name + '\" is not registered');\r\n }\r\n }\r\n\r\n //TODO: this is a hack to replace the exiting implementation at run-time\r\n exports.getCanActivateHook = function (directiveName) {\r\n var controller = getComponentConstructor(directiveName);\r\n return controller.$canActivate && function (next, prev) {\r\n return $injector.invoke(controller.$canActivate, null, {\r\n $nextInstruction: next,\r\n $prevInstruction: prev\r\n });\r\n };\r\n };\r\n\r\n // This hack removes assertions about the type of the \"component\"\r\n // property in a route config\r\n exports.assertComponentExists = function () {};\r\n\r\n angular.stringifyInstruction = function (instruction) {\r\n return instruction.toRootUrl();\r\n };\r\n\r\n var RouteRegistry = exports.RouteRegistry;\r\n var RootRouter = exports.RootRouter;\r\n\r\n // Override this method to actually get hold of the child routes\r\n RouteRegistry.prototype.configFromComponent = function (component) {\r\n var that = this;\r\n if (isString(component)) {\r\n // Don't read the annotations component a type more than once –\r\n // this prevents an infinite loop if a component routes recursively.\r\n if (this._rules.has(component)) {\r\n return;\r\n }\r\n var controller = getComponentConstructor(component);\r\n if (angular.isArray(controller.$routeConfig)) {\r\n controller.$routeConfig.forEach(function (config) {\r\n var loader = config.loader;\r\n if (isPresent(loader)) {\r\n config = angular.extend({}, config, { loader: $injector.invoke(loader) });\r\n }\r\n that.config(component, config);\r\n });\r\n }\r\n }\r\n\r\n }\r\n\r\n var registry = new RouteRegistry($routerRootComponent);\r\n var location = new Location();\r\n\r\n var router = new RootRouter(registry, location, $routerRootComponent);\r\n $rootScope.$watch(function () { return $location.url(); }, function (path) {\r\n if (router.lastNavigationAttempt !== path) {\r\n router.navigateByUrl(path);\r\n }\r\n });\r\n\r\n router.subscribe(function () {\r\n $rootScope.$broadcast('$routeChangeSuccess', {});\r\n });\r\n\r\n return router;\r\n}\r\n\r\n}());\r\n","///\r\n'use strict'\r\n\r\ntype Promise = angular.IPromise\r\n\r\nexport interface RouteDefinition {\r\n path: string;\r\n component: string;\r\n name: string;\r\n useAsDefault?:boolean;\r\n}\r\n\r\nexport interface IRoutingComponent {\r\n /**\r\n * called to to determine whether a Component can be reused across Route Definitions that match the same type of Component, or whether to destroy and instantiate a new Component every time.\r\n */\r\n $routerCanReuse?(next?: angular.ComponentInstruction, prev?: angular.ComponentInstruction) : ng.IPromise | boolean;\r\n /**\r\n * called by the Router at the end of a successful navigation. Only one of $routerOnActivate and $routerOnReuse will be called depending upon the result of a call to $routerCanReuse.\r\n */\r\n $routerOnActivate?(next?: angular.ComponentInstruction, prev?: angular.ComponentInstruction) : ng.IPromise | any;\r\n /**\r\n * called by the Router at the end of a successful navigation. Only one of $routerOnActivate and $routerOnReuse will be called depending upon the result of a call to $routerCanReuse.\r\n */\r\n $routeOnReuse?(next?: angular.ComponentInstruction, prev?: angular.ComponentInstruction) : ng.IPromise | any;\r\n /**\r\n * called by the Router to determine if a Component can be removed as part of a navigation.\r\n */\r\n $routerCanDeactivate?(next?: angular.ComponentInstruction, prev?: angular.ComponentInstruction) : ng.IPromise | boolean;\r\n /**\r\n * called by the Router before destroying a Component as part of a navigation.\r\n */\r\n $routerOnDeactivate?(next?: angular.ComponentInstruction, prev?: angular.ComponentInstruction) : ng.IPromise | any;\r\n}\r\n\r\nexport function RootRouterComponent(module: angular.IModule, selector: string) {\r\n return (target: TFunction) => {\r\n module.value(\"$routerRootComponent\", selector);\r\n return target;\r\n };\r\n}\r\n\r\nexport function RouteConfig(config: RouteDefinition[]): ClassDecorator {\r\n return (target: TFunction) => {\r\n target['$routeConfig'] = config;\r\n return target;\r\n };\r\n}","'use strict'\r\nimport \"angular\"\r\nexport * from \"./angular_1_router\"\r\nexport * from \"./decorators\";","declare global {\r\n /**\r\n * ISO 8601 formatted date time string\r\n * 'yyyy-MM-ddThh:mm:ssZ'\r\n */\r\n interface ISODateTimeString extends String { }\r\n\r\n /**\r\n * ISO 8601 formatted date time string\r\n * 'yyyy-MM-dd'\r\n */\r\n interface ISODateString extends String { }\r\n\r\n interface DateConstructor {\r\n /**\r\n * Tries to parse a Date from a string, returns 'null' on failure\r\n * @param date The date string to parse\r\n */\r\n parseOrNull(date: string | ISODateString | ISODateTimeString): Date;\r\n\r\n new(vd: ISODateString): Date;\r\n new(vd: ISODateTimeString): Date;\r\n\r\n /**\r\n * Compare two dates and return a negative, zero or positive value;\r\n * eg. negative: other is higher, zero: other is equal, positive: this is higher\r\n */\r\n compare(a: Date, b: Date): number;\r\n\r\n /**\r\n * Compare two dates and returns if they are equal\r\n */\r\n equals(a: Date, b: Date): boolean;\r\n\r\n /**\r\n * Compares the date portion of two dates and returns if they are equal\r\n */\r\n dateEquals(a: Date, b: Date): boolean;\r\n\r\n diff(a: Date, b: Date): { days: number, hours: number, minutes: number, seconds: number, milliseconds: number }\r\n\r\n today(): Date;\r\n\r\n }\r\n\r\n interface Date {\r\n /**\r\n * Clone this Date as a new Date object\r\n */\r\n clone(): Date;\r\n\r\n /**\r\n * Returns a new Date with n days added\r\n * @param days The number of days to add\r\n */\r\n addDays: (days: number) => Date;\r\n\r\n /**\r\n * Return a ISO8601 date string \"yyyy-MM-dd\"\r\n */\r\n toISODateString: () => ISODateString;\r\n\r\n /**\r\n * Return a ISO8601 date/time string \"yyyy-MM-ddThh:mm:ddZ\"\r\n */\r\n toISODateTimeString: () => ISODateTimeString;\r\n\r\n /**\r\n * Checks if the date is indeed valid\r\n */\r\n isValid(): boolean;\r\n\r\n /**\r\n * Compare this date to another date and return a negative, zero or positive value;\r\n * eg. negative: other is higher, zero: other is equal, positive: this is higher\r\n */\r\n compare(other: Date): number;\r\n\r\n /**\r\n * Compare this date to another date, and return if they are equal\r\n */\r\n equals(other: Date): boolean;\r\n\r\n /**\r\n * Compare the date portion of this date to another date, and return if they are equal\r\n */\r\n dateEquals(other: Date): boolean;\r\n\r\n /**\r\n * Get the ISO weeknumber\r\n */\r\n getWeekNumber(): number;\r\n\r\n /**\r\n * Returns a new date with time set to 00:00:00\r\n */\r\n getDatePart(): Date;\r\n }\r\n}\r\n\r\nDate.today = function () {\r\n return (new Date()).getDatePart();\r\n}\r\n\r\nDate.parseOrNull = function (date: string | ISODateString | ISODateTimeString) {\r\n if (date === undefined || date === null)\r\n return null;\r\n var d = new Date(date);\r\n return d.isValid() ? d : null;\r\n}\r\n\r\nDate.compare = function (a: Date, b: Date) {\r\n if (!a && !b)\r\n return 0;\r\n if (!a && b)\r\n return 1;\r\n if (a && !b)\r\n return -1;\r\n return a.getTime() - b.getTime();\r\n}\r\n\r\nDate.diff = function (a: Date, b: Date) {\r\n if (!a)\r\n throw \"Date a cannot be null\";\r\n if (!b)\r\n throw \"Date b cannot be null\";\r\n var am = a.getTime();\r\n var bm = b.getTime();\r\n var ms = bm - am;\r\n var s = Math.round(ms / 1000);\r\n var m = Math.round(s / 60);\r\n var h = Math.round(m / 60);\r\n var d = Math.round(h / 24);\r\n return {\r\n days: d,\r\n hours: h,\r\n minutes: m,\r\n seconds: s,\r\n milliseconds: ms\r\n }\r\n}\r\n\r\nDate.equals = function (a: Date, b: Date) {\r\n return (a == null && b == null) || (a != null && a.compare(b) === 0) || (b != null && b.compare(a) === 0);\r\n}\r\n\r\nDate.dateEquals = function (a: Date, b: Date) {\r\n return Date.equals(a ? a.getDatePart() : null, b ? b.getDatePart() : null);\r\n}\r\n\r\nDate.prototype.getDatePart = function (this: Date) {\r\n var d = this.clone();\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n}\r\n\r\nDate.prototype.compare = function (this: Date, other: Date) {\r\n return Date.compare(this, other);\r\n}\r\n\r\nDate.prototype.equals = function (this: Date, other: Date) {\r\n return Date.equals(this, other);\r\n}\r\n\r\nDate.prototype.dateEquals = function (this: Date, other: Date) {\r\n return Date.dateEquals(this, other);\r\n}\r\n\r\nDate.prototype.clone = function (this: Date) {\r\n return new Date(this.getTime());\r\n}\r\n\r\nDate.prototype.addDays = function (this: Date, days: number) {\r\n var date = this.clone();\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n}\r\n\r\nDate.prototype.toISODateString = function (this: Date) {\r\n return `${this.getFullYear()}-${(this.getMonth() + 101).toString().substr(1)}-${(this.getDate() + 100).toString().substr(1)}`;\r\n}\r\n\r\nDate.prototype.toISODateTimeString = function (this: Date) {\r\n return this.toISOString();\r\n}\r\n\r\nDate.prototype.isValid = function (this: Date) {\r\n return this.toString() != \"Invalid Date\";\r\n}\r\n\r\nDate.prototype.getWeekNumber = function () {\r\n var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));\r\n var dayNum = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\r\n var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);\r\n};\r\n\r\n\r\nexport module DateTime {\r\n /**\r\n * Takes a time formatter string (HH:mm:ss?) and sets it on a date object;\r\n * If no baseDate is supplied, today is used\r\n * @param value time string\r\n * @param baseDate optional date to set time on.\r\n */\r\n export function TimeToDateTime(value: string, baseDate?: Date) {\r\n var m = value.split(\":\");\r\n var date = (baseDate || new Date()).clone();\r\n date.setHours(parseInt(m[0]));\r\n date.setMinutes(parseInt(m[1]));\r\n return date;\r\n }\r\n}\r\n","export function Memoize(): MethodDecorator {\r\n return function memoizeDecorator(target: Object, propertyKey: string | symbol,\r\n propertyDescriptor: TypedPropertyDescriptor): TypedPropertyDescriptor | void {\r\n if (!propertyDescriptor || !propertyDescriptor.get)\r\n return;\r\n\r\n let fieldName = `_${propertyKey}.memoized`\r\n return {\r\n configurable: false,\r\n get: function () {\r\n if (this[fieldName] === undefined)\r\n this[fieldName] = propertyDescriptor.get.call(this);\r\n\r\n return this[fieldName];\r\n },\r\n set: propertyDescriptor.set ? function (value: any) {\r\n this[fieldName] = undefined;\r\n propertyDescriptor.set.call(this, value);\r\n } : function (_) {\r\n this[fieldName] = undefined;\r\n }\r\n };\r\n }\r\n}\r\n\r\nexport function LocalStorage(storageKey: string, backingfieldname?: string): MethodDecorator {\r\n return function localStorageDecorator(target: { [key: string]: any }, propertyKey: string | symbol,\r\n propertyDescriptor: TypedPropertyDescriptor): TypedPropertyDescriptor | void {\r\n if (!propertyDescriptor || !propertyDescriptor.get)\r\n return;\r\n var cached = localStorage[storageKey];\r\n if (cached !== undefined) {\r\n if (backingfieldname)\r\n target[backingfieldname] = JSON.parse(cached);\r\n else if (propertyDescriptor.set)\r\n propertyDescriptor.set.call(target, JSON.parse(cached));\r\n }\r\n\r\n var cacheValue = (value: any) => {\r\n if (value === null || value === undefined)\r\n localStorage.removeItem(storageKey);\r\n else\r\n localStorage[storageKey] = JSON.stringify(value);\r\n }\r\n\r\n var result: TypedPropertyDescriptor = {\r\n configurable: false,\r\n get: function () {\r\n var value = propertyDescriptor.get.call(this);\r\n cacheValue(value);\r\n return value;\r\n }\r\n };\r\n if (propertyDescriptor.set)\r\n result.set = function (value: any) {\r\n cacheValue(value)\r\n propertyDescriptor.set.call(this, value);\r\n }\r\n return result;\r\n }\r\n}","export module Utils {\r\n /**\r\n * Transforms a single level Json dataset to a query parameter string\r\n * @param data Single level Json dataset to convert\r\n */\r\n export function TransformJsonToFormData(data: { [key: string]: string }) {\r\n var db: string[] = [];\r\n for (var prop in data) {\r\n if (!data.hasOwnProperty(prop))\r\n continue;\r\n db.push(`${encodeURIComponent(prop)}=${encodeURIComponent(data[prop])}`)\r\n }\r\n return db.join(\"&\").replace(/%20/g, \"+\");\r\n }\r\n /**\r\n * Iterate over all properties of type P on a given object and apply a function to each\r\n * @param {any} object target object\r\n * @param {(property:P, key:string) => void } apply function to apply\r\n * @param {(property:P, key:string) => boolean = _ => true} filter optional filter function, return false to exclude property\r\n */\r\n export function forEachProperty

(object: any, apply: (property: P, key: string) => void, filter: (property: P, key: string) => boolean = _ => true) {\r\n for (var key in object) {\r\n var prop: P = object[key];\r\n if (filter(prop, key))\r\n apply(prop, key);\r\n }\r\n }\r\n\r\n export function forEachKey(dict: { [key: string]: T }, apply: (property: T, key: string) => void, filter: (property: T, key: string) => boolean = _ => true) {\r\n return forEachProperty(dict, apply, filter);\r\n }\r\n\r\n /**\r\n * Safely get the value of a nested property, or 'undefined' on error\r\n * @param object target\r\n * @param getter property accesser\r\n */\r\n export function getNestedPropertyValue(object: T, getter: (object: T) => V): V {\r\n try {\r\n return getter(object);\r\n } catch (_) {\r\n return undefined;\r\n }\r\n\r\n }\r\n}\r\n\r\n///Generic extensions\r\nif (!(String.prototype).startsWith) {\r\n (String.prototype).startsWith = function startsWith(this: String, searchString: string, position: number) {\r\n position = position || 0;\r\n return this.substr(position, searchString.length) === searchString;\r\n };\r\n}","export * from \"./general\";\r\nexport * from \"./datetime\";\r\nexport * from \"./keycodes\";\r\nexport * from \"./decorators\";\r\nexport * from \"./web\";\r\n\r\nimport \"./number\";","export class KeyCodes {\r\n public static backspace = 8;\r\n public static tab = 9;\r\n public static clear = 12;\r\n public static enter = 13;\r\n public static shift = 16;\r\n public static ctrl = 17;\r\n public static alt = 18;\r\n public static pause = 19;\r\n public static break = 19;\r\n public static capsLock = 20;\r\n public static escape = 27;\r\n public static space = 32;\r\n public static pageUp = 33;\r\n public static pageDown = 34;\r\n public static end = 35;\r\n public static home = 36;\r\n public static leftArrow = 37;\r\n public static upArrow = 38;\r\n public static rightArrow = 39;\r\n public static downArrow = 40;\r\n public static select = 41;\r\n public static printScreen = 42;\r\n public static insert = 45;\r\n public static delete = 46;\r\n public static n0 = 48;\r\n public static n1 = 49;\r\n public static n2 = 50;\r\n public static n3 = 51;\r\n public static n4 = 52;\r\n public static n5 = 53;\r\n public static n6 = 54;\r\n public static n7 = 55;\r\n public static n8 = 56;\r\n public static n9 = 57;\r\n public static a = 65;\r\n public static b = 66;\r\n public static c = 67;\r\n public static d = 68;\r\n public static e = 69;\r\n public static f = 70;\r\n public static g = 71;\r\n public static h = 72;\r\n public static i = 73;\r\n public static j = 74;\r\n public static k = 75;\r\n public static l = 76;\r\n public static m = 77;\r\n public static n = 78;\r\n public static o = 79;\r\n public static p = 80;\r\n public static q = 81;\r\n public static r = 82;\r\n public static s = 83;\r\n public static t = 84;\r\n public static u = 85;\r\n public static v = 86;\r\n public static w = 87;\r\n public static x = 88;\r\n public static y = 89;\r\n public static z = 90;\r\n public static leftWindowKey = 91;\r\n public static rightWindowKey = 92;\r\n public static selectKey = 93;\r\n public static numpad0 = 96;\r\n public static numpad1 = 97;\r\n public static numpad2 = 98;\r\n public static numpad3 = 99;\r\n public static numpad4 = 100;\r\n public static numpad5 = 101;\r\n public static numpad6 = 102;\r\n public static numpad7 = 103;\r\n public static numpad8 = 104;\r\n public static numpad9 = 105;\r\n public static multiply = 106;\r\n public static add = 107;\r\n public static subtract = 109;\r\n public static decimalPoint = 110;\r\n public static divide = 111;\r\n public static f1 = 112;\r\n public static f2 = 113;\r\n public static f3 = 114;\r\n public static f4 = 115;\r\n public static f5 = 116;\r\n public static f6 = 117;\r\n public static f7 = 118;\r\n public static f8 = 119;\r\n public static f9 = 120;\r\n public static f10 = 121;\r\n public static f11 = 122;\r\n public static f12 = 123;\r\n public static numLock = 144;\r\n public static scrollLock = 145;\r\n public static semiColon = 186;\r\n public static equalSign = 187;\r\n public static comma = 188;\r\n public static dash = 189;\r\n public static period = 190;\r\n public static forwardSlash = 191;\r\n public static graveAccent = 192;\r\n public static openBracket = 219;\r\n public static backSlash = 220;\r\n public static singleQuote = 222;\r\n public static closeBraket = 221;\r\n public static numeric = [\r\n KeyCodes.n0,\r\n KeyCodes.n1,\r\n KeyCodes.n2,\r\n KeyCodes.n3,\r\n KeyCodes.n4,\r\n KeyCodes.n5,\r\n KeyCodes.n6,\r\n KeyCodes.n7,\r\n KeyCodes.n8,\r\n KeyCodes.n9,\r\n KeyCodes.numpad0,\r\n KeyCodes.numpad1,\r\n KeyCodes.numpad2,\r\n KeyCodes.numpad3,\r\n KeyCodes.numpad4,\r\n KeyCodes.numpad5,\r\n KeyCodes.numpad6,\r\n KeyCodes.numpad7,\r\n KeyCodes.numpad8,\r\n KeyCodes.numpad9,\r\n ];\r\n public static alpha = [\r\n KeyCodes.a,\r\n KeyCodes.b,\r\n KeyCodes.c,\r\n KeyCodes.d,\r\n KeyCodes.e,\r\n KeyCodes.f,\r\n KeyCodes.g,\r\n KeyCodes.h,\r\n KeyCodes.i,\r\n KeyCodes.j,\r\n KeyCodes.k,\r\n KeyCodes.l,\r\n KeyCodes.m,\r\n KeyCodes.n,\r\n KeyCodes.o,\r\n KeyCodes.p,\r\n KeyCodes.q,\r\n KeyCodes.r,\r\n KeyCodes.s,\r\n KeyCodes.t,\r\n KeyCodes.u,\r\n KeyCodes.v,\r\n KeyCodes.w,\r\n KeyCodes.x,\r\n KeyCodes.y,\r\n KeyCodes.z,\r\n ];\r\n public static Fkeys =\r\n [\r\n KeyCodes.f1,\r\n KeyCodes.f2,\r\n KeyCodes.f3,\r\n KeyCodes.f4,\r\n KeyCodes.f5,\r\n KeyCodes.f6,\r\n KeyCodes.f7,\r\n KeyCodes.f8,\r\n KeyCodes.f9,\r\n KeyCodes.f10,\r\n KeyCodes.f11,\r\n KeyCodes.f12,\r\n ];\r\n}\r\nexport class KeyboardEventCode {\r\n public static backspace = 'Backspace';\r\n public static tab = 'Tab';\r\n public static clear = 'NumpadClear';\r\n public static enter = 'Enter';\r\n public static shiftLeft = 'ShiftLeft';\r\n public static shiftRight = 'ShiftRight';\r\n public static ctrlLeft = 'ControlLeft';\r\n public static ctrlRight = 'ControlRight';\r\n public static altLeft = 'AltLeft';\r\n public static altRight = 'AltRight';\r\n public static pause = 'Pause';\r\n public static break = 'Break';\r\n public static capsLock = 'CapsLock';\r\n public static escape = 'Escape';\r\n public static space = 'Space';\r\n public static pageUp = 'PageUp';\r\n public static pageDown = 'PageDown';\r\n public static end = 'End';\r\n public static home = 'Home';\r\n public static leftArrow = 'ArrowLeft';\r\n public static upArrow = 'ArrowUp';\r\n public static rightArrow = 'ArrowRight';\r\n public static downArrow = 'ArrorDown';\r\n public static select = 'Select';\r\n public static printScreen = 'PrintScreen';\r\n public static insert = 'Insert';\r\n public static delete = 'Delete';\r\n public static n0 = 'Digit0';\r\n public static n1 = 'Digit1';\r\n public static n2 = 'Digit2';\r\n public static n3 = 'Digit3';\r\n public static n4 = 'Digit4';\r\n public static n5 = 'Digit5';\r\n public static n6 = 'Digit6';\r\n public static n7 = 'Digit7';\r\n public static n8 = 'Digit8';\r\n public static n9 = 'Digit9';\r\n public static a = 'KeyA';\r\n public static b = 'KeyB';\r\n public static c = 'KeyC';\r\n public static d = 'KeyD';\r\n public static e = 'KeyE';\r\n public static f = 'KeyF';\r\n public static g = 'KeyG';\r\n public static h = 'KeyH';\r\n public static i = 'KeyI';\r\n public static j = 'KeyJ';\r\n public static k = 'KeyK';\r\n public static l = 'KeyL';\r\n public static m = 'KeyM';\r\n public static n = 'KeyN';\r\n public static o = 'KeyO';\r\n public static p = 'KeyP';\r\n public static q = 'KeyQ';\r\n public static r = 'KeyR';\r\n public static s = 'KeyS';\r\n public static t = 'KeyT';\r\n public static u = 'KeyU';\r\n public static v = 'KeyV';\r\n public static w = 'KeyW';\r\n public static x = 'KeyX';\r\n public static y = 'KeyY';\r\n public static z = 'KeyZ';\r\n public static leftMetaKey = 'MetaLeft';\r\n public static rightMetaKey = 'MetaRight';\r\n public static leftOSKey = 'OSLeft';\r\n public static rightOSKey = 'OSRight';\r\n public static selectKey = 'Select';\r\n public static numpad0 = 'Numpad0';\r\n public static numpad1 = 'Numpad1';\r\n public static numpad2 = 'Numpad2';\r\n public static numpad3 = 'Numpad3';\r\n public static numpad4 = 'Numpad4';\r\n public static numpad5 = 'Numpad5';\r\n public static numpad6 = 'Numpad6';\r\n public static numpad7 = 'Numpad7';\r\n public static numpad8 = 'Numpad8';\r\n public static numpad9 = 'Numpad9';\r\n public static star = 'NumpadStar'\r\n public static multiply = 'NumpadMultiply';\r\n public static add = 'NumpadAdd';\r\n public static subtract = 'NumpadSubtract';\r\n public static decimalPoint = 'NumpadDecimal';\r\n public static divide = 'NumpadDivide';\r\n public static f1 = 'F1';\r\n public static f2 = 'F2';\r\n public static f3 = 'F3';\r\n public static f4 = 'F4';\r\n public static f5 = 'F5';\r\n public static f6 = 'F6';\r\n public static f7 = 'F7';\r\n public static f8 = 'F8';\r\n public static f9 = 'F9';\r\n public static f10 = 'F10';\r\n public static f11 = 'F11';\r\n public static f12 = 'F12';\r\n public static numLock = 'NumLock';\r\n public static scrollLock = 'ScrollLock';\r\n public static semiColon = 'SemiColon';\r\n public static equalSign = 'Equals';\r\n public static comma = 'Comma';\r\n public static dash = 'Minus';\r\n public static period = 'Period';\r\n public static forwardSlash = 'Slash';\r\n public static graveAccent = 'BackQuote';\r\n public static openBracket = 'BracketLeft';\r\n public static backSlash = 'Backslash';\r\n public static singleQuote = 'Quote';\r\n public static closeBraket = 'BracketRight';\r\n public static numeric = [\r\n KeyboardEventCode.n0,\r\n KeyboardEventCode.n1,\r\n KeyboardEventCode.n2,\r\n KeyboardEventCode.n3,\r\n KeyboardEventCode.n4,\r\n KeyboardEventCode.n5,\r\n KeyboardEventCode.n6,\r\n KeyboardEventCode.n7,\r\n KeyboardEventCode.n8,\r\n KeyboardEventCode.n9,\r\n KeyboardEventCode.numpad0,\r\n KeyboardEventCode.numpad1,\r\n KeyboardEventCode.numpad2,\r\n KeyboardEventCode.numpad3,\r\n KeyboardEventCode.numpad4,\r\n KeyboardEventCode.numpad5,\r\n KeyboardEventCode.numpad6,\r\n KeyboardEventCode.numpad7,\r\n KeyboardEventCode.numpad8,\r\n KeyboardEventCode.numpad9,\r\n ];\r\n public static alpha = [\r\n KeyboardEventCode.a,\r\n KeyboardEventCode.b,\r\n KeyboardEventCode.c,\r\n KeyboardEventCode.d,\r\n KeyboardEventCode.e,\r\n KeyboardEventCode.f,\r\n KeyboardEventCode.g,\r\n KeyboardEventCode.h,\r\n KeyboardEventCode.i,\r\n KeyboardEventCode.j,\r\n KeyboardEventCode.k,\r\n KeyboardEventCode.l,\r\n KeyboardEventCode.m,\r\n KeyboardEventCode.n,\r\n KeyboardEventCode.o,\r\n KeyboardEventCode.p,\r\n KeyboardEventCode.q,\r\n KeyboardEventCode.r,\r\n KeyboardEventCode.s,\r\n KeyboardEventCode.t,\r\n KeyboardEventCode.u,\r\n KeyboardEventCode.v,\r\n KeyboardEventCode.w,\r\n KeyboardEventCode.x,\r\n KeyboardEventCode.y,\r\n KeyboardEventCode.z,\r\n ];\r\n public static shiftKeys = [\r\n KeyboardEventCode.shiftLeft,\r\n KeyboardEventCode.shiftRight\r\n ];\r\n public static ctrlKeys = [\r\n KeyboardEventCode.ctrlLeft,\r\n KeyboardEventCode.ctrlRight\r\n ];\r\n public static altKeys = [\r\n KeyboardEventCode.altLeft,\r\n KeyboardEventCode.altRight\r\n ];\r\n public static Fkeys =\r\n [\r\n KeyboardEventCode.f1,\r\n KeyboardEventCode.f2,\r\n KeyboardEventCode.f3,\r\n KeyboardEventCode.f4,\r\n KeyboardEventCode.f5,\r\n KeyboardEventCode.f6,\r\n KeyboardEventCode.f7,\r\n KeyboardEventCode.f8,\r\n KeyboardEventCode.f9,\r\n KeyboardEventCode.f10,\r\n KeyboardEventCode.f11,\r\n KeyboardEventCode.f12,\r\n ];\r\n}\r\n","export module numberext {\r\n\r\n}\r\ndeclare global {\r\n interface NumberConstructor {\r\n /**\r\n * Formats a number into a thousands seperated string.\r\n * @param number The number to parse\r\n */\r\n parseNumerToLocaleFormattedString(string: string, locals?: string | string[]): string;\r\n\r\n toLocaleFormattedString(number: Number, locals?: string | string[]): string;\r\n\r\n thousandSeperator(value: string, local: string): string;\r\n\r\n isNumeric(string: string): boolean;\r\n }\r\n\r\n interface Number {\r\n /**\r\n * Formats a number into a thousands seperated string.\r\n * @param number The number to parse\r\n */\r\n toLocaleFormattedString(locals?: string | string[]): string;\r\n }\r\n}\r\n\r\nNumber.parseNumerToLocaleFormattedString = function (string: string, locals?: string | string[]): string {\r\n if (Number.isNumeric(string)) {\r\n return Number.toLocaleFormattedString(Number(string));\r\n } else {\r\n return NaN.toString();\r\n }\r\n};\r\n\r\nNumber.toLocaleFormattedString = function (number: Number, locals?: string | string[]): string {\r\n if (Number.prototype.toLocaleString) {\r\n return number.toLocaleString(locals);\r\n } else {\r\n var singleLocal: string = (locals && locals instanceof Array) ? locals[0] : locals;\r\n return Number.thousandSeperator(number + \"\", singleLocal);\r\n }\r\n};\r\n\r\nNumber.thousandSeperator = function (value: string, local: string): string {\r\n let separator: string;\r\n let decimalsSeparator: string;\r\n switch (local) {\r\n case \"en-GB\":\r\n case \"en-US\":\r\n case \"en-CA\":\r\n separator = \",\";\r\n decimalsSeparator = \".\";\r\n break;\r\n default: // \"nl-NL\", \"de-DE\"\r\n separator = \".\";\r\n decimalsSeparator = \",\";\r\n break;\r\n }\r\n let num: string = (this + \"\");\r\n\r\n // test for and get any decimals (the later operations won't support them)\r\n let decimals: string = \"\";\r\n if (/\\./.test(num)) {\r\n // this regex grabs the decimal point as well as the decimal numbers\r\n decimals = num.replace(/^.*(\\..*)$/, \"$1\");\r\n }\r\n\r\n num = num.replace(decimals, \"\")\r\n .split(\"\").reverse().join(\"\")\r\n .match(/[0-9]{1,3}-?/g).join(separator)\r\n .split(\"\").reverse().join(\"\");\r\n\r\n return `${num}${decimalsSeparator}${decimals}`;\r\n};\r\n\r\nNumber.isNumeric = function (string: string): boolean {\r\n return !isNaN(+string);\r\n /* return (string !== string + 1) // infinity check\r\n && (coercion === +string) // cute coercion check\r\n && (typeof string !== \"object\"); // array/object check */\r\n};\r\n\r\nNumber.prototype.toLocaleFormattedString = function (this: Number, locals?: string | string[]): string {\r\n return Number.toLocaleFormattedString(this, locals);\r\n};\r\n\r\nexport module Number {}","/*global angular, navigator*/\n\n(function() {\n 'use strict';\n\n angular\n .module('angular-click-outside', [])\n .directive('clickOutside', [\n '$document', '$parse', '$timeout',\n clickOutside\n ]);\n \n /**\n * @ngdoc directive\n * @name angular-click-outside.directive:clickOutside\n * @description Directive to add click outside capabilities to DOM elements\n * @requires $document\n * @requires $parse\n * @requires $timeout\n **/\n function clickOutside($document, $parse, $timeout) {\n return {\n restrict: 'A',\n link: function($scope, elem, attr) {\n\n // postpone linking to next digest to allow for unique id generation\n $timeout(function() {\n var classList = (attr.outsideIfNot !== undefined) ? attr.outsideIfNot.split(/[ ,]+/) : [],\n fn;\n\n function eventHandler(e) {\n var i,\n element,\n r,\n id,\n classNames,\n l;\n\n // check if our element already hidden and abort if so\n if (angular.element(elem).hasClass(\"ng-hide\")) {\n return;\n }\n\n // if there is no click target, no point going on\n if (!e || !e.target) {\n return;\n }\n\n // loop through the available elements, looking for classes in the class list that might match and so will eat\n for (element = e.target; element; element = element.parentNode) {\n // check if the element is the same element the directive is attached to and exit if so (props @CosticaPuntaru)\n if (element === elem[0]) {\n return;\n }\n \n // now we have done the initial checks, start gathering id's and classes\n id = element.id,\n classNames = element.className,\n l = classList.length;\n\n // Unwrap SVGAnimatedString classes\n if (classNames && classNames.baseVal !== undefined) {\n classNames = classNames.baseVal;\n }\n\n // if there are no class names on the element clicked, skip the check\n if (classNames || id) {\n\n // loop through the elements id's and classnames looking for exceptions\n for (i = 0; i < l; i++) {\n //prepare regex for class word matching\n r = new RegExp('\\\\b' + classList[i] + '\\\\b');\n\n // check for exact matches on id's or classes, but only if they exist in the first place\n if ((id !== undefined && id === classList[i]) || (classNames && r.test(classNames))) {\n // now let's exit out as it is an element that has been defined as being ignored for clicking outside\n return;\n }\n }\n }\n }\n\n // if we have got this far, then we are good to go with processing the command passed in via the click-outside attribute\n $timeout(function() {\n fn = $parse(attr['clickOutside']);\n fn($scope, { event: e });\n });\n }\n\n // if the devices has a touchscreen, listen for this event\n if (_hasTouch()) {\n $document.on('touchstart', eventHandler);\n }\n\n // still listen for the click event even if there is touch to cater for touchscreen laptops\n $document.on('click', eventHandler);\n\n // when the scope is destroyed, clean up the documents event handlers as we don't want it hanging around\n $scope.$on('$destroy', function() {\n if (_hasTouch()) {\n $document.off('touchstart', eventHandler);\n }\n\n $document.off('click', eventHandler);\n });\n\n /**\n * @description Private function to attempt to figure out if we are on a touch device\n * @private\n **/\n function _hasTouch() {\n // works on most browsers, IE10/11 and Surface\n return 'ontouchstart' in window || navigator.maxTouchPoints;\n };\n });\n }\n };\n }\n})();\n","/*! angular-google-chart 2020-12-28 */\r\n/*\r\n* @description Google Chart Api Directive Module for AngularJS\r\n* @version 1.0.0-beta.1\r\n* @author GitHub Contributors \r\n* @license MIT\r\n* @year 2013\r\n*/\r\n/* global angular */\r\n(function(){\r\n angular.module('googlechart', [])\r\n .run(registerResizeEvent);\r\n \r\n registerResizeEvent.$inject = ['$rootScope', '$window'];\r\n \r\n function registerResizeEvent($rootScope, $window){\r\n angular.element($window).on('resize', function () {\r\n $rootScope.$emit('resizeMsg');\r\n });\r\n }\r\n})();\r\n/* global angular, google */\r\n(function(){\r\n angular.module('googlechart')\r\n .factory('FormatManager', formatManagerFactory);\r\n \r\n function formatManagerFactory(){\r\n // Handles the processing of Google Charts API Formats\r\n function FormatManager($google){\r\n var self = this;\r\n var oldFormatTemplates = {};\r\n self.iFormats = {}; // Holds instances of formats (ie. self.iFormats.date[0] = new $google.visualization.DateFormat(params))\r\n self.applyFormats = applyFormats;\r\n \r\n // apply formats of type to datatable\r\n function apply(tFormats, dataTable){\r\n var i, formatType;\r\n for (formatType in tFormats){\r\n if (tFormats.hasOwnProperty(formatType)){\r\n for (i = 0; i < self.iFormats[formatType].length; i++) {\r\n if (tFormats[formatType][i].columnNum < dataTable.getNumberOfColumns()) {\r\n self.iFormats[formatType][i].format(dataTable, tFormats[formatType][i].columnNum);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n function applyFormat(formatType, FormatClass, tFormats){\r\n var i;\r\n if (angular.isArray(tFormats[formatType])) {\r\n // basic change detection; no need to run if no changes\r\n if (!angular.equals(tFormats[formatType], oldFormatTemplates[formatType])) {\r\n oldFormatTemplates[formatType] = tFormats[formatType];\r\n self.iFormats[formatType] = [];\r\n \r\n if (formatType === 'color') {\r\n instantiateColorFormatters(tFormats);\r\n } else {\r\n for (i = 0; i < tFormats[formatType].length; i++) {\r\n self.iFormats[formatType].push(new FormatClass(\r\n tFormats[formatType][i])\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n function applyFormats(dataTable, tFormats, customFormatters) {\r\n var formatType, FormatClass, requiresHtml = false;\r\n if (!angular.isDefined(tFormats) || !angular.isDefined(dataTable)){\r\n return { requiresHtml: false };\r\n }\r\n for (formatType in tFormats){\r\n if (tFormats.hasOwnProperty(formatType)){\r\n FormatClass = getFormatClass(formatType, customFormatters);\r\n if (!angular.isFunction(FormatClass)){\r\n // if no class constructor was returned,\r\n // there's no point in completing cycle\r\n continue;\r\n }\r\n applyFormat(formatType, FormatClass, tFormats);\r\n \r\n //Many formatters require HTML tags to display special formatting\r\n if (formatType === 'arrow' || formatType === 'bar' || formatType === 'color') {\r\n requiresHtml = true;\r\n }\r\n }\r\n }\r\n apply(tFormats, dataTable);\r\n return { requiresHtml: requiresHtml };\r\n }\r\n \r\n function instantiateColorFormatters(tFormats){\r\n var t, colorFormat, i, data, formatType = 'color';\r\n for (t = 0; t < tFormats[formatType].length; t++) {\r\n colorFormat = new $google.visualization.ColorFormat();\r\n\r\n for (i = 0; i < tFormats[formatType][t].formats.length; i++) {\r\n data = tFormats[formatType][t].formats[i];\r\n\r\n if (typeof (data.fromBgColor) !== 'undefined' && typeof (data.toBgColor) !== 'undefined') {\r\n colorFormat.addGradientRange(data.from, data.to, data.color, data.fromBgColor, data.toBgColor);\r\n } else {\r\n colorFormat.addRange(data.from, data.to, data.color, data.bgcolor);\r\n }\r\n }\r\n\r\n self.iFormats[formatType].push(colorFormat);\r\n }\r\n }\r\n \r\n function getFormatClass(formatType, customFormatters){\r\n var className = formatType.charAt(0).toUpperCase() + formatType.slice(1).toLowerCase() + \"Format\";\r\n if ($google.visualization.hasOwnProperty(className)){\r\n return google.visualization[className];\r\n } else if (angular.isDefined(customFormatters) && customFormatters.hasOwnProperty(formatType)) {\r\n return customFormatters[formatType];\r\n }\r\n return;\r\n }\r\n }\r\n \r\n return FormatManager;\r\n }\r\n})();\r\n/* global angular, google */\r\n\r\n(function() {\r\n\r\n angular.module('googlechart')\r\n .controller('GoogleChartController', GoogleChartController);\r\n\r\n GoogleChartController.$inject = ['$scope', '$element', '$attrs', '$injector', '$timeout', '$window', '$rootScope', 'GoogleChartService'];\r\n\r\n function GoogleChartController($scope, $element, $attrs, $injector, $timeout, $window, $rootScope, GoogleChartService) {\r\n var self = this;\r\n var resizeHandler;\r\n var googleChartService;\r\n\r\n init();\r\n\r\n function cleanup() {\r\n resizeHandler();\r\n }\r\n\r\n function draw() {\r\n if (!draw.triggered && (self.chart !== undefined)) {\r\n draw.triggered = true;\r\n $timeout(setupAndDraw, 0, true);\r\n }\r\n else if (self.chart !== undefined) {\r\n $timeout.cancel(draw.recallTimeout);\r\n draw.recallTimeout = $timeout(draw, 10);\r\n }\r\n }\r\n\r\n // Watch function calls this.\r\n function drawAsync() {\r\n googleChartService.getReadyPromise()\r\n .then(draw);\r\n }\r\n\r\n //setupAndDraw() calls this.\r\n function drawChartWrapper() {\r\n googleChartService.draw();\r\n draw.triggered = false;\r\n }\r\n\r\n function init() {\r\n // Instantiate service\r\n googleChartService = new GoogleChartService();\r\n \r\n self.registerChartListener = googleChartService.registerChartListener;\r\n self.registerWrapperListener = googleChartService.registerWrapperListener;\r\n self.registerServiceListener = googleChartService.registerServiceListener;\r\n \r\n /* Watches, to refresh the chart when its data, formatters, options, view,\r\n or type change. All other values intentionally disregarded to avoid double\r\n calls to the draw function. Please avoid making changes to these objects\r\n directly from this directive.*/\r\n $scope.$watch(watchValue, watchHandler, true); // true is for deep object equality checking\r\n\r\n // Redraw the chart if the window is resized\r\n resizeHandler = $rootScope.$on('resizeMsg', drawAsync);\r\n\r\n //Cleanup resize handler.\r\n $scope.$on('$destroy', cleanup);\r\n }\r\n\r\n function setupAndDraw() {\r\n googleChartService.setup($element,\r\n self.chart.type,\r\n self.chart.data,\r\n self.chart.view,\r\n self.chart.options,\r\n self.chart.formatters,\r\n self.chart.customFormatters);\r\n\r\n $timeout(drawChartWrapper);\r\n }\r\n\r\n function watchHandler() {\r\n self.chart = $scope.$eval($attrs.chart);\r\n drawAsync();\r\n }\r\n\r\n function watchValue() {\r\n var chartObject = $scope.$eval($attrs.chart);\r\n if (angular.isDefined(chartObject) && angular.isObject(chartObject)) {\r\n return {\r\n customFormatters: chartObject.customFormatters,\r\n data: chartObject.data,\r\n formatters: chartObject.formatters,\r\n options: chartObject.options,\r\n type: chartObject.type,\r\n view: chartObject.view\r\n };\r\n }\r\n }\r\n }\r\n})();\r\n/* global angular */\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('agcBeforeDraw', beforeDrawDirective);\r\n \r\n function beforeDrawDirective(){\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n require: 'googleChart',\r\n link: function(scope, element, attrs, googleChartController){\r\n callback.$inject=['chartWrapper'];\r\n function callback(chartWrapper){\r\n scope.$apply(function (){\r\n scope.$eval(attrs.agcBeforeDraw, {chartWrapper: chartWrapper});\r\n });\r\n }\r\n googleChartController.registerServiceListener('beforeDraw', callback, this);\r\n }\r\n };\r\n }\r\n})();\r\n\r\n/* global angular */\r\n(function() {\r\n angular.module('googlechart')\r\n .provider('agcGstaticLoader', agcGstaticLoaderProvider);\r\n\r\n function agcGstaticLoaderProvider(){\r\n var useBothLoaders = false;\r\n var version = \"current\";\r\n var options = {\r\n packages: [\"corechart\"]\r\n };\r\n\r\n /** Add Google Visualization API package to loader configuration. */\r\n this.addPackage = function(packageName){\r\n options.packages = options.packages || [];\r\n options.packages.push(packageName);\r\n\r\n if (needsBothLoaders())\r\n useBothLoaders = true;\r\n return this;\r\n };\r\n\r\n /** Delete key from underlying loader configuration. */\r\n this.clearOption = function(key){\r\n delete this._options[key];\r\n return this;\r\n };\r\n\r\n /** Remove Google Visualization API package from loader configuration. */\r\n this.removePackage = function(packageName){\r\n options.packages = this._options.packages || [];\r\n var index = options.packages.indexOf(packageName);\r\n if (index > -1)\r\n options.packages.splice(index, 1);\r\n return this;\r\n };\r\n\r\n /** Set option to value. See developers.google.com/chart/ for information about loader options. */\r\n this.setOption = function(key, value){\r\n options[key] = value;\r\n return this;\r\n };\r\n\r\n /** Sets underlying loader options object to value provided. Replaces everything, included packages. */\r\n this.setOptions = function(value){\r\n options = value;\r\n return this;\r\n };\r\n\r\n /** Set Google Visualization API frozen version to load. Default: 'current' */\r\n this.setVersion = function(value){\r\n version = value;\r\n if (needsBothLoaders())\r\n useBothLoaders = true;\r\n return this;\r\n };\r\n\r\n /** Override for internal setting to add both loader scripts. Required under certain conditions. */\r\n this.useBothLoaders = function(value){\r\n if (typeof value === 'undefined')\r\n value = true;\r\n\r\n useBothLoaders = !!value;\r\n return this;\r\n };\r\n\r\n /** Check if conditions are correct to need both JSAPI and gstatic loader scripts. */\r\n function needsBothLoaders(){\r\n var versionCheck, packageCheck;\r\n\r\n versionCheck = !isNaN(+version) && +version < 45;\r\n packageCheck = options.packages.indexOf(\"geochart\") > -1 ||\r\n options.packages.indexOf(\"map\") > -1;\r\n\r\n return versionCheck && packageCheck;\r\n }\r\n\r\n this.$get = function($rootScope, $q, agcScriptTagHelper, $timeout){\r\n\r\n function scriptLoadCallback(){\r\n if (!google ||\r\n !google.charts ||\r\n typeof google.charts.setOnLoadCallback !== 'function'){\r\n return $q.reject(\"Google charts library loader not present.\");\r\n }\r\n \r\n var deferred = $q.defer();\r\n\r\n google.charts.load(version, options);\r\n\r\n google.charts.setOnLoadCallback(function(){\r\n $timeout(function(){\r\n deferred.resolve(google);\r\n },0 );\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n var tagPromise = agcScriptTagHelper(\"https://www.gstatic.com/charts/loader.js\");\r\n if (useBothLoaders)\r\n tagPromise = tagPromise.then(function(){ return agcScriptTagHelper(\"https://www.google.com/jsapi\");});\r\n var libraryPromise = tagPromise.then(scriptLoadCallback);\r\n\r\n return libraryPromise;\r\n };\r\n this.$get.$inject = [\"$rootScope\", \"$q\", \"agcScriptTagHelper\", \"$timeout\"];\r\n }\r\n})();\r\n\r\n/* global angular */\r\n(function() {\r\n angular.module(\"googlechart\")\r\n .factory(\"agcJsapiLoader\", agcJsapiLoaderFactory);\r\n\r\n agcJsapiLoaderFactory.$inject = [\"$rootScope\", \"$q\", \"agcScriptTagHelper\", \"googleChartApiConfig\", \"$timeout\"];\r\n function agcJsapiLoaderFactory($rootScope, $q, agcScriptTagHelper, googleChartApiConfig, $timeout){\r\n var apiReady = $q.defer();\r\n // Massage configuration as needed.\r\n googleChartApiConfig.optionalSettings = googleChartApiConfig.optionalSettings || {};\r\n\r\n var userDefinedCallback = googleChartApiConfig.optionalSettings.callback;\r\n\r\n var settings = {\r\n callback: function() {\r\n if (angular.isFunction(userDefinedCallback))\r\n userDefinedCallback.call(this);\r\n\r\n $timeout(function(){\r\n apiReady.resolve(google);\r\n }, 0);\r\n }\r\n };\r\n\r\n settings = angular.extend({}, googleChartApiConfig.optionalSettings, settings);\r\n\r\n agcScriptTagHelper(\"https://www.google.com/jsapi\")\r\n .then(function(){\r\n window.google.load('visualization', googleChartApiConfig.version || '1', settings);\r\n })\r\n .catch(function(){\r\n apiReady.reject();\r\n });\r\n\r\n return apiReady.promise;\r\n } \r\n})();\r\n\r\n/* global angular */\r\n(function(){\r\n angular.module(\"googlechart\")\r\n .provider(\"agcLibraryLoader\", AgcLibraryLoaderProvider);\r\n\r\n AgcLibraryLoaderProvider.$inject = [\"$injector\"];\r\n\r\n function AgcLibraryLoaderProvider($injector){\r\n\r\n var DEFAULT_LOADER = \"Jsapi\";\r\n\r\n this.$get = function(loader){\r\n return loader;\r\n };\r\n\r\n this.setLoader = function(loaderName){\r\n if ($injector.has(this.getProviderName(loaderName)))\r\n this.$get.$inject = [this.getProviderName(loaderName)];\r\n else {\r\n console.warn(\"[Angular-GoogleChart] Loader type \\\"\" + loaderName + \"\\\" doesn't exist. Defaulting to JSAPI loader.\");\r\n this.$get.$inject = [this.getProviderName(DEFAULT_LOADER)];\r\n }\r\n };\r\n\r\n this.getProviderName = function(loaderName){\r\n loaderName = loaderName.charAt(0).toUpperCase() + loaderName.slice(1);\r\n return \"agc\" + loaderName + \"Loader\";\r\n };\r\n\r\n this.setLoader(DEFAULT_LOADER);\r\n }\r\n})();\r\n\r\n/* global angular */\r\n(function(){\r\n angular.module(\"googlechart\")\r\n .provider(\"agcNullLoader\", AgcNullLoaderProvider);\r\n \r\n /** Fake loader strategy. Use this if you're loading the google charts library\r\n * in some non-standard way.\r\n */\r\n\r\n function AgcNullLoaderProvider(){\r\n this._hasTrigger = false;\r\n this._libraryOverride = null;\r\n this._triggerFunction = (function(){\r\n // If the trigger function is called before $get,\r\n // just act as if it was never fetched.\r\n if (this._deferred)\r\n this._deferred.resolve(this._libraryOverride || google);\r\n else\r\n this._hasTrigger = false;\r\n }).bind(this);\r\n this._deferred = null;\r\n }\r\n\r\n AgcNullLoaderProvider.prototype.$get = function($q){\r\n this._deferred = $q.defer();\r\n \r\n if (!this._hasTrigger)\r\n this._deferred.resolve(this._libraryOverride || google);\r\n \r\n return this._deferred.promise;\r\n };\r\n AgcNullLoaderProvider.prototype.$get.$inject = [\"$q\"];\r\n\r\n AgcNullLoaderProvider.prototype.getTriggerFunction = function(){\r\n // Records that the trigger function was fetched.\r\n // Will wait for it to be called to resolve.\r\n // This is useful for manual, but deferred, loading of\r\n // the google charts library.\r\n this._hasTrigger = true;\r\n return this._triggerFunction;\r\n };\r\n\r\n /** Forces angular-google-chart to load this object as the google library.\r\n * Makes no checks to ensure that the object passed is compatible. Use\r\n * at own risk.\r\n */\r\n AgcNullLoaderProvider.prototype.overrideLibrary = function(library){\r\n this._libraryOverride = library;\r\n };\r\n})();\r\n\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('agcOnClick', onClickDirective);\r\n\r\n function onClickDirective(){\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n require: 'googleChart',\r\n link: function(scope, element, attrs, googleChartController){\r\n callback.$inject = ['args', 'chart', 'chartWrapper'];\r\n function callback(args, chart, chartWrapper){\r\n scope.$apply(function (){\r\n scope.$eval(attrs.agcOnClick, {args: args, chart: chart, chartWrapper: chartWrapper});\r\n });\r\n }\r\n googleChartController.registerChartListener('click', callback, this);\r\n }\r\n };\r\n }\r\n})();\r\n\r\n/* global angular */\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('agcOnError', onErrorDirective);\r\n function onErrorDirective(){\r\n return{\r\n restrict: 'A',\r\n scope: false,\r\n require: 'googleChart',\r\n link: function(scope, element, attrs, googleChartController){\r\n callback.$inject = ['chartWrapper', 'chart', 'args'];\r\n function callback(chartWrapper, chart, args){\r\n var returnValues = {\r\n chartWrapper: chartWrapper,\r\n chart: chart,\r\n args: args,\r\n error: args[0],\r\n err: args[0],\r\n id: args[0].id,\r\n message: args[0].message\r\n };\r\n scope.$apply(function(){\r\n scope.$eval(attrs.agcOnError, returnValues);\r\n });\r\n }\r\n googleChartController.registerWrapperListener('error', callback, this);\r\n }\r\n };\r\n }\r\n})();\r\n/* global angular */\r\n\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('agcOnMouseout', agcOnMouseoutDirective);\r\n \r\n function agcOnMouseoutDirective(){\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n require: 'googleChart',\r\n link: function(scope, element, attrs, googleChartController){\r\n callback.$inject = ['args', 'chart', 'chartWrapper'];\r\n function callback(args, chart, chartWrapper){\r\n var returnParams = {\r\n chartWrapper: chartWrapper,\r\n chart: chart,\r\n args: args,\r\n column: args[0].column,\r\n row: args[0].row\r\n };\r\n scope.$apply(function () {\r\n scope.$eval(attrs.agcOnMouseout, returnParams);\r\n });\r\n }\r\n googleChartController.registerChartListener('onmouseout', callback, this);\r\n }\r\n };\r\n }\r\n})();\r\n/* global angular */\r\n\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('agcOnMouseover', agcOnMouseoverDirective);\r\n \r\n function agcOnMouseoverDirective(){\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n require: 'googleChart',\r\n link: function(scope, element, attrs, googleChartController){\r\n callback.$inject = ['args', 'chart', 'chartWrapper'];\r\n function callback(args, chart, chartWrapper){\r\n var returnParams = {\r\n chartWrapper: chartWrapper,\r\n chart: chart,\r\n args: args,\r\n column: args[0].column,\r\n row: args[0].row\r\n };\r\n scope.$apply(function () {\r\n scope.$eval(attrs.agcOnMouseover, returnParams);\r\n });\r\n }\r\n googleChartController.registerChartListener('onmouseover', callback, this);\r\n }\r\n };\r\n }\r\n})();\r\n/* global angular */\r\n\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('agcOnRangeChange', agcOnRangeChangeDirective);\r\n\r\n function agcOnRangeChangeDirective(){\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n require: 'googleChart',\r\n link: function(scope, element, attrs, googleChartController){\r\n callback.$inject = ['args', 'chart', 'chartWrapper'];\r\n function callback(args, chart, chartWrapper){\r\n var returnParams = {\r\n chartWrapper: chartWrapper,\r\n chart: chart,\r\n args: args,\r\n start: args[0].start,\r\n end: args[0].end\r\n };\r\n scope.$apply(function () {\r\n scope.$eval(attrs.agcOnRangeChange, returnParams);\r\n });\r\n }\r\n googleChartController.registerChartListener('rangechange', callback, this);\r\n }\r\n };\r\n }\r\n})();\r\n\r\n/* global angular */\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('agcOnReady', onReadyDirective);\r\n \r\n onReadyDirective.$inject = ['$timeout'];\r\n function onReadyDirective(){\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n require: 'googleChart',\r\n link: function(scope, element, attrs, googleChartController){\r\n callback.$inject=['chartWrapper'];\r\n function callback(chartWrapper){\r\n $timeout(function (){\r\n scope.$eval(attrs.agcOnReady, {chartWrapper: chartWrapper});\r\n }, 0);\r\n }\r\n googleChartController.registerWrapperListener('ready', callback, this);\r\n }\r\n };\r\n }\r\n})();\r\n\r\n/* global angular */\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('agcOnSelect', onSelectDirective);\r\n \r\n function onSelectDirective(){\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n require: 'googleChart',\r\n link: function(scope, element, attrs, googleChartController){\r\n callback.$inject = ['chartWrapper', 'chart'];\r\n function callback(chartWrapper, chart){\r\n var selectEventRetParams = { selectedItems: chart.getSelection() };\r\n // This is for backwards compatibility for people using 'selectedItem' that only wanted the first selection.\r\n selectEventRetParams.selectedItem = selectEventRetParams.selectedItems[0];\r\n selectEventRetParams.chartWrapper = chartWrapper;\r\n selectEventRetParams.chart = chart;\r\n scope.$apply(function () {\r\n scope.$eval(attrs.agcOnSelect, selectEventRetParams);\r\n });\r\n }\r\n googleChartController.registerWrapperListener('select', callback, this);\r\n }\r\n };\r\n }\r\n})();\r\n/* global angular */\r\n(function() {\r\n angular.module(\"googlechart\")\r\n .factory(\"agcScriptTagHelper\", agcScriptTagHelperFactory);\r\n\r\n agcScriptTagHelperFactory.$inject = [\"$q\", \"$document\"];\r\n function agcScriptTagHelperFactory($q, $document)\r\n {\r\n /** Add a script tag to the document's head section and return an angular\r\n * promise that resolves when the script has loaded.\r\n */\r\n function agcScriptTagHelper(url)\r\n {\r\n var deferred = $q.defer();\r\n var head = $document.find('head');\r\n var script = angular.element('');\r\n\r\n script.attr('type', 'text/javascript');\r\n\r\n script.on('load', onLoad);\r\n script.on('error', onError);\r\n\r\n script.attr('src', url);\r\n\r\n // This: head.append(script);\r\n // Adds the tag, but event handles don't work.\r\n // Workaround is to add element with native appendChild().\r\n head[0].appendChild(script[0]);\r\n\r\n function onLoad() {\r\n deferred.resolve();\r\n }\r\n\r\n function onError() {\r\n deferred.reject();\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n return agcScriptTagHelper;\r\n }\r\n})();\r\n\r\n/* global angular, google */\r\n/* jshint -W072 */\r\n(function(){\r\n angular.module('googlechart')\r\n .directive('googleChart', googleChartDirective);\r\n \r\n googleChartDirective.$inject = [];\r\n \r\n function googleChartDirective() {\r\n\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n controller: 'GoogleChartController'\r\n };\r\n }\r\n})();\r\n\r\n/* global angular */\r\n(function(){\r\n angular.module('googlechart')\r\n .value('googleChartApiConfig', {\r\n version: '1',\r\n optionalSettings: {\r\n packages: ['corechart']\r\n }\r\n });\r\n})();\r\n/* global angular */\r\n(function(){\r\n angular.module('googlechart')\r\n .factory('googleChartApiPromise', googleChartApiPromiseFactory);\r\n \r\n googleChartApiPromiseFactory.$inject = ['agcLibraryLoader'];\r\n\r\n /** Here for backward-compatibility only. */\r\n function googleChartApiPromiseFactory(agcLibraryLoader) {\r\n return agcLibraryLoader;\r\n }\r\n})();\r\n\r\n/* global angular */\r\n(function() {\r\n angular.module('googlechart')\r\n .factory('GoogleChartService', GoogleChartServiceFactory);\r\n\r\n GoogleChartServiceFactory.$inject = ['agcLibraryLoader', '$injector', '$q', 'FormatManager'];\r\n\r\n function GoogleChartServiceFactory(agcLibraryLoader, $injector, $q, FormatManager) {\r\n function GoogleChartService() {\r\n var self = this;\r\n self.draw = draw;\r\n self.getChartWrapper = getChartWrapper;\r\n self.getData = getData;\r\n self.getElement = getElement;\r\n self.getOption = getOption;\r\n self.getOptions = getOptions;\r\n self.getView = getView;\r\n self.getReadyPromise = getReadyPromise;\r\n self.isApiReady = isApiReady;\r\n self.registerChartListener = registerChartListener;\r\n self.registerServiceListener = registerServiceListener;\r\n self.registerWrapperListener = registerWrapperListener;\r\n self.setData = setData;\r\n self.setElement = setElement;\r\n self.setOption = setOption;\r\n self.setOptions = setOptions;\r\n self.setup = setup;\r\n self.setView = setView;\r\n\r\n var $google,\r\n _libraryPromise,\r\n _apiReady,\r\n _chartWrapper,\r\n _element,\r\n _chartType,\r\n _data,\r\n _view,\r\n _options,\r\n _formatters,\r\n _innerVisualization,\r\n _formatManager,\r\n _needsUpdate = true,\r\n _customFormatters,\r\n _serviceDeferred,\r\n serviceListeners = {},\r\n wrapperListeners = {},\r\n chartListeners = {};\r\n\r\n _init();\r\n\r\n function _activateServiceEvent(eventName) {\r\n var i;\r\n if (angular.isArray(serviceListeners[eventName])) {\r\n for (i = 0; i < serviceListeners[eventName].length; i++) {\r\n serviceListeners[eventName][i]();\r\n }\r\n }\r\n }\r\n\r\n function _apiLoadFail(reason) {\r\n // Not sure what to do if this does happen.\r\n // Post your suggestions in the issues tracker at\r\n // https://github.com/angular-google-chart/angular-google-chart/\r\n return reason;\r\n }\r\n\r\n function _apiLoadSuccess(g) {\r\n $google = g;\r\n _apiReady = true;\r\n _serviceDeferred.resolve();\r\n return g;\r\n }\r\n\r\n\r\n function _continueSetup() {\r\n if (!angular.isDefined(_chartWrapper)) {\r\n _chartWrapper = new $google.visualization.ChartWrapper({\r\n chartType: _chartType,\r\n dataTable: _data,\r\n view: _view,\r\n options: _options,\r\n containerId: _element[0]\r\n });\r\n _registerListenersWithGoogle(_chartWrapper, wrapperListeners);\r\n }\r\n else {\r\n _chartWrapper.setChartType(_chartType);\r\n _chartWrapper.setDataTable(_data);\r\n _chartWrapper.setView(_view);\r\n _chartWrapper.setOptions(_options);\r\n }\r\n\r\n if (!_formatManager) {\r\n _formatManager = new FormatManager($google);\r\n }\r\n\r\n if (_formatManager.applyFormats(_chartWrapper.getDataTable(),\r\n _formatters, _customFormatters).requiresHtml) {\r\n _chartWrapper.setOption('allowHtml', true);\r\n }\r\n\r\n _needsUpdate = false;\r\n }\r\n\r\n // Credit for this solution:\r\n // http://stackoverflow.com/a/20125572/3771976\r\n function _getSetDescendantProp(obj, desc, value) {\r\n var arr = desc ? desc.split(\".\") : [];\r\n\r\n while (arr.length && obj) {\r\n var comp = arr.shift();\r\n var match = new RegExp(\"(.+)\\\\[([0-9]*)\\\\]\").exec(comp);\r\n\r\n if (value) {\r\n if (obj[comp] === undefined) {\r\n obj[comp] = {};\r\n }\r\n\r\n if (arr.length === 0) {\r\n obj[comp] = value;\r\n }\r\n }\r\n\r\n obj = obj[comp];\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n function _handleReady() {\r\n // When the chartWrapper is ready, check to see if the inner chart\r\n // has changed. If it has, re-register listeners onto that chart.\r\n if (_innerVisualization !== _chartWrapper.getChart()) {\r\n _innerVisualization = _chartWrapper.getChart();\r\n _registerListenersWithGoogle(_innerVisualization, chartListeners);\r\n }\r\n }\r\n\r\n function _init() {\r\n _apiReady = false;\r\n _serviceDeferred = $q.defer();\r\n //keeps the resulting promise to chain on other actions\r\n _libraryPromise = agcLibraryLoader\r\n .then(_apiLoadSuccess)\r\n .catch(_apiLoadFail);\r\n\r\n registerWrapperListener('ready', _handleReady, self);\r\n }\r\n\r\n function _registerListener(listenerCollection, eventName, listenerFn, listenerObject) {\r\n // This is the function that will be invoked by the charts API.\r\n // Passing the wrapper function allows the use of DI for\r\n // for the called function.\r\n var listenerWrapper = function() {\r\n var locals = {\r\n chartWrapper: _chartWrapper,\r\n chart: _chartWrapper.getChart(),\r\n args: arguments\r\n };\r\n $injector.invoke(listenerFn, listenerObject || this, locals);\r\n };\r\n\r\n if (angular.isDefined(listenerCollection) && angular.isObject(listenerCollection)) {\r\n if (!angular.isArray(listenerCollection[eventName])) {\r\n listenerCollection[eventName] = [];\r\n }\r\n listenerCollection[eventName].push(listenerWrapper);\r\n return function() {\r\n if (angular.isDefined(listenerWrapper.googleListenerHandle)) {\r\n $google.visualization.events.removeListener(listenerWrapper.googleListenerHandle);\r\n }\r\n var fnIndex = listenerCollection[eventName].indexOf(listenerWrapper);\r\n listenerCollection[eventName].splice(fnIndex, 1);\r\n if (listenerCollection[eventName].length === 0) {\r\n listenerCollection[eventName] = undefined;\r\n }\r\n };\r\n }\r\n }\r\n\r\n function _registerListenersWithGoogle(eventSource, listenerCollection) {\r\n for (var eventName in listenerCollection) {\r\n if (listenerCollection.hasOwnProperty(eventName) && angular.isArray(listenerCollection[eventName])) {\r\n for (var fnIterator = 0; fnIterator < listenerCollection[eventName].length; fnIterator++) {\r\n if (angular.isFunction(listenerCollection[eventName][fnIterator])) {\r\n listenerCollection[eventName][fnIterator].googleListenerHandle =\r\n $google.visualization.events.addListener(eventSource, eventName, listenerCollection[eventName][fnIterator]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function _runDrawCycle() {\r\n _activateServiceEvent('beforeDraw');\r\n _chartWrapper.draw();\r\n }\r\n\r\n /*\r\n This function does this:\r\n - waits for API to load, if not already loaded\r\n - sets up ChartWrapper object (create or update)\r\n - schedules timeout event to draw chart\r\n */\r\n function draw() {\r\n if (_needsUpdate) {\r\n _libraryPromise = _libraryPromise.then(_continueSetup);\r\n }\r\n _libraryPromise = _libraryPromise.then(_runDrawCycle());\r\n }\r\n\r\n function getChartWrapper() {\r\n // Most get functions on this interface return copies,\r\n // this one should return reference so as to expose the \r\n //chart api to users\r\n return _chartWrapper;\r\n }\r\n\r\n function getData() {\r\n var data = _data || {};\r\n return angular.copy(data);\r\n }\r\n\r\n function getElement() {\r\n return _element;\r\n }\r\n\r\n function getOption(name) {\r\n var options = _options || {};\r\n return _getSetDescendantProp(options, name);\r\n }\r\n\r\n function getOptions() {\r\n var options = _options || {};\r\n return angular.copy(options);\r\n }\r\n\r\n function getReadyPromise() {\r\n return _serviceDeferred.promise;\r\n }\r\n\r\n function getView() {\r\n var view = _view || {};\r\n return angular.copy(view);\r\n }\r\n\r\n function isApiReady() {\r\n return _apiReady;\r\n }\r\n\r\n function registerChartListener(eventName, listenerFn, listenerObject) {\r\n return _registerListener(chartListeners, eventName, listenerFn, listenerObject);\r\n }\r\n\r\n function registerServiceListener(eventName, listenerFn, listenerObject) {\r\n return _registerListener(serviceListeners, eventName, listenerFn, listenerObject);\r\n }\r\n\r\n function registerWrapperListener(eventName, listenerFn, listenerObject) {\r\n return _registerListener(wrapperListeners, eventName, listenerFn, listenerObject);\r\n }\r\n\r\n function setData(data) {\r\n if (angular.isDefined(data)) {\r\n _data = angular.copy(data);\r\n _needsUpdate = true;\r\n }\r\n }\r\n\r\n function setElement(element) {\r\n if (angular.isElement(element) && _element !== element) {\r\n _element = element;\r\n // clear out the chartWrapper because we're going to need a new one\r\n _chartWrapper = null;\r\n _needsUpdate = true;\r\n }\r\n }\r\n\r\n function setOption(name, value) {\r\n _options = _options || {};\r\n _getSetDescendantProp(_options, name, angular.copy(value));\r\n _needsUpdate = true;\r\n }\r\n\r\n function setOptions(options) {\r\n if (angular.isDefined(options)) {\r\n _options = angular.copy(options);\r\n _needsUpdate = true;\r\n }\r\n }\r\n\r\n function setup(element, chartType, data, view, options, formatters, customFormatters) {\r\n // Keep values if already set,\r\n // can call setup() with nulls to keep\r\n // existing values\r\n _element = element || _element;\r\n _chartType = chartType || _chartType;\r\n _data = data || _data;\r\n _view = view || _view;\r\n _options = options || _options;\r\n _formatters = formatters || _formatters;\r\n _customFormatters = customFormatters || _customFormatters;\r\n\r\n _libraryPromise = _libraryPromise.then(_continueSetup);\r\n }\r\n\r\n function setView(view) {\r\n _view = angular.copy(view);\r\n }\r\n }\r\n return GoogleChartService;\r\n }\r\n})();\r\n\r\n//# sourceMappingURL=ng-google-chart.js.map","/*! \n * angular-hotkeys v1.7.0\n * https://chieffancypants.github.io/angular-hotkeys\n * Copyright (c) 2016 Wes Cruver\n * License: MIT\n */\n/*\n * angular-hotkeys\n *\n * Automatic keyboard shortcuts for your angular apps\n *\n * (c) 2016 Wes Cruver\n * License: MIT\n */\n\n(function() {\n\n 'use strict';\n\n angular.module('cfp.hotkeys', []).provider('hotkeys', ['$injector', function($injector) {\n\n /**\n * Configurable setting to disable the cheatsheet entirely\n * @type {Boolean}\n */\n this.includeCheatSheet = true;\n\n /**\n * Configurable setting to disable ngRoute hooks\n * @type {Boolean}\n */\n this.useNgRoute = $injector.has('ngViewDirective');\n\n /**\n * Configurable setting for the cheat sheet title\n * @type {String}\n */\n\n this.templateTitle = 'Keyboard Shortcuts:';\n\n /**\n * Configurable settings for the cheat sheet header and footer. Both are HTML, and the header\n * overrides the normal title if specified.\n * @type {String}\n */\n this.templateHeader = null;\n this.templateFooter = null;\n\n /**\n * Cheat sheet template in the event you want to totally customize it.\n * @type {String}\n */\n this.template = '

' +\n '

{{ title }}

' +\n '
' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
' +\n '{{ key }}' +\n '{{ hotkey.description }}
' +\n '
' +\n '
×
' +\n '
';\n\n /**\n * Configurable setting for the cheat sheet hotkey\n * @type {String}\n */\n this.cheatSheetHotkey = '?';\n\n /**\n * Configurable setting for the cheat sheet description\n * @type {String}\n */\n this.cheatSheetDescription = 'Show / hide this help menu';\n\n this.$get = ['$rootElement', '$rootScope', '$compile', '$window', '$document', function ($rootElement, $rootScope, $compile, $window, $document) {\n\n var mouseTrapEnabled = true;\n\n function pause() {\n mouseTrapEnabled = false;\n }\n\n function unpause() {\n mouseTrapEnabled = true;\n }\n\n // monkeypatch Mousetrap's stopCallback() function\n // this version doesn't return true when the element is an INPUT, SELECT, or TEXTAREA\n // (instead we will perform this check per-key in the _add() method)\n Mousetrap.prototype.stopCallback = function(event, element) {\n if (!mouseTrapEnabled) {\n return true;\n }\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n return (element.contentEditable && element.contentEditable == 'true');\n };\n\n /**\n * Convert strings like cmd into symbols like ⌘\n * @param {String} combo Key combination, e.g. 'mod+f'\n * @return {String} The key combination with symbols\n */\n function symbolize (combo) {\n var map = {\n command : '\\u2318', // ⌘\n shift : '\\u21E7', // ⇧\n left : '\\u2190', // ←\n right : '\\u2192', // →\n up : '\\u2191', // ↑\n down : '\\u2193', // ↓\n 'return' : '\\u23CE', // ⏎\n backspace : '\\u232B' // ⌫\n };\n combo = combo.split('+');\n\n for (var i = 0; i < combo.length; i++) {\n // try to resolve command / ctrl based on OS:\n if (combo[i] === 'mod') {\n if ($window.navigator && $window.navigator.platform.indexOf('Mac') >=0 ) {\n combo[i] = 'command';\n } else {\n combo[i] = 'ctrl';\n }\n }\n\n combo[i] = map[combo[i]] || combo[i];\n }\n\n return combo.join(' + ');\n }\n\n /**\n * Hotkey object used internally for consistency\n *\n * @param {array} combo The keycombo. it's an array to support multiple combos\n * @param {String} description Description for the keycombo\n * @param {Function} callback function to execute when keycombo pressed\n * @param {string} action the type of event to listen for (for mousetrap)\n * @param {array} allowIn an array of tag names to allow this combo in ('INPUT', 'SELECT', and/or 'TEXTAREA')\n * @param {Boolean} persistent Whether the hotkey persists navigation events\n */\n function Hotkey (combo, description, callback, action, allowIn, persistent) {\n // TODO: Check that the values are sane because we could\n // be trying to instantiate a new Hotkey with outside dev's\n // supplied values\n\n this.combo = combo instanceof Array ? combo : [combo];\n this.description = description;\n this.callback = callback;\n this.action = action;\n this.allowIn = allowIn;\n this.persistent = persistent;\n this._formated = null;\n }\n\n /**\n * Helper method to format (symbolize) the key combo for display\n *\n * @return {[Array]} An array of the key combination sequence\n * for example: \"command+g c i\" becomes [\"⌘ + g\", \"c\", \"i\"]\n *\n */\n Hotkey.prototype.format = function() {\n if (this._formated === null) {\n // Don't show all the possible key combos, just the first one. Not sure\n // of usecase here, so open a ticket if my assumptions are wrong\n var combo = this.combo[0];\n\n var sequence = combo.split(/[\\s]/);\n for (var i = 0; i < sequence.length; i++) {\n sequence[i] = symbolize(sequence[i]);\n }\n this._formated = sequence;\n }\n\n return this._formated;\n };\n\n /**\n * A new scope used internally for the cheatsheet\n * @type {$rootScope.Scope}\n */\n var scope = $rootScope.$new();\n\n /**\n * Holds an array of Hotkey objects currently bound\n * @type {Array}\n */\n scope.hotkeys = [];\n\n /**\n * Contains the state of the help's visibility\n * @type {Boolean}\n */\n scope.helpVisible = false;\n\n /**\n * Holds the title string for the help menu\n * @type {String}\n */\n scope.title = this.templateTitle;\n\n /**\n * Holds the header HTML for the help menu\n * @type {String}\n */\n scope.header = this.templateHeader;\n\n /**\n * Holds the footer HTML for the help menu\n * @type {String}\n */\n scope.footer = this.templateFooter;\n\n /**\n * Expose toggleCheatSheet to hotkeys scope so we can call it using\n * ng-click from the template\n * @type {function}\n */\n scope.toggleCheatSheet = toggleCheatSheet;\n\n\n /**\n * Holds references to the different scopes that have bound hotkeys\n * attached. This is useful to catch when the scopes are `$destroy`d and\n * then automatically unbind the hotkey.\n *\n * @type {Object}\n */\n var boundScopes = {};\n\n if (this.useNgRoute) {\n $rootScope.$on('$routeChangeSuccess', function (event, route) {\n purgeHotkeys();\n\n if (route && route.hotkeys) {\n angular.forEach(route.hotkeys, function (hotkey) {\n // a string was given, which implies this is a function that is to be\n // $eval()'d within that controller's scope\n // TODO: hotkey here is super confusing. sometimes a function (that gets turned into an array), sometimes a string\n var callback = hotkey[2];\n if (typeof(callback) === 'string' || callback instanceof String) {\n hotkey[2] = [callback, route];\n }\n\n // todo: perform check to make sure not already defined:\n // this came from a route, so it's likely not meant to be persistent\n hotkey[5] = false;\n _add.apply(this, hotkey);\n });\n }\n });\n }\n\n\n\n // Auto-create a help menu:\n if (this.includeCheatSheet) {\n var document = $document[0];\n var element = $rootElement[0];\n var helpMenu = angular.element(this.template);\n _add(this.cheatSheetHotkey, this.cheatSheetDescription, toggleCheatSheet);\n\n // If $rootElement is document or documentElement, then body must be used\n if (element === document || element === document.documentElement) {\n element = document.body;\n }\n\n angular.element(element).append($compile(helpMenu)(scope));\n }\n\n\n /**\n * Purges all non-persistent hotkeys (such as those defined in routes)\n *\n * Without this, the same hotkey would get recreated everytime\n * the route is accessed.\n */\n function purgeHotkeys() {\n var i = scope.hotkeys.length;\n while (i--) {\n var hotkey = scope.hotkeys[i];\n if (hotkey && !hotkey.persistent) {\n _del(hotkey);\n }\n }\n }\n\n /**\n * Toggles the help menu element's visiblity\n */\n var previousEsc = false;\n\n function toggleCheatSheet() {\n scope.helpVisible = !scope.helpVisible;\n\n // Bind to esc to remove the cheat sheet. Ideally, this would be done\n // as a directive in the template, but that would create a nasty\n // circular dependency issue that I don't feel like sorting out.\n if (scope.helpVisible) {\n previousEsc = _get('esc');\n _del('esc');\n\n // Here's an odd way to do this: we're going to use the original\n // description of the hotkey on the cheat sheet so that it shows up.\n // without it, no entry for esc will ever show up (#22)\n _add('esc', previousEsc.description, toggleCheatSheet, null, ['INPUT', 'SELECT', 'TEXTAREA']);\n } else {\n _del('esc');\n\n // restore the previously bound ESC key\n if (previousEsc !== false) {\n _add(previousEsc);\n }\n }\n }\n\n /**\n * Creates a new Hotkey and creates the Mousetrap binding\n *\n * @param {string} combo mousetrap key binding\n * @param {string} description description for the help menu\n * @param {Function} callback method to call when key is pressed\n * @param {string} action the type of event to listen for (for mousetrap)\n * @param {array} allowIn an array of tag names to allow this combo in ('INPUT', 'SELECT', and/or 'TEXTAREA')\n * @param {boolean} persistent if true, the binding is preserved upon route changes\n */\n function _add (combo, description, callback, action, allowIn, persistent) {\n\n // used to save original callback for \"allowIn\" wrapping:\n var _callback;\n\n // these elements are prevented by the default Mousetrap.stopCallback():\n var preventIn = ['INPUT', 'SELECT', 'TEXTAREA'];\n\n // Determine if object format was given:\n var objType = Object.prototype.toString.call(combo);\n\n if (objType === '[object Object]') {\n description = combo.description;\n callback = combo.callback;\n action = combo.action;\n persistent = combo.persistent;\n allowIn = combo.allowIn;\n combo = combo.combo;\n }\n\n // no duplicates please\n _del(combo);\n\n // description is optional:\n if (description instanceof Function) {\n action = callback;\n callback = description;\n description = '$$undefined$$';\n } else if (angular.isUndefined(description)) {\n description = '$$undefined$$';\n }\n\n // any items added through the public API are for controllers\n // that persist through navigation, and thus undefined should mean\n // true in this case.\n if (persistent === undefined) {\n persistent = true;\n }\n // if callback is defined, then wrap it in a function\n // that checks if the event originated from a form element.\n // the function blocks the callback from executing unless the element is specified\n // in allowIn (emulates Mousetrap.stopCallback() on a per-key level)\n if (typeof callback === 'function') {\n\n // save the original callback\n _callback = callback;\n\n // make sure allowIn is an array\n if (!(allowIn instanceof Array)) {\n allowIn = [];\n }\n\n // remove anything from preventIn that's present in allowIn\n var index;\n for (var i=0; i < allowIn.length; i++) {\n allowIn[i] = allowIn[i].toUpperCase();\n index = preventIn.indexOf(allowIn[i]);\n if (index !== -1) {\n preventIn.splice(index, 1);\n }\n }\n\n // create the new wrapper callback\n callback = function(event) {\n var shouldExecute = true;\n\n // if the callback is executed directly `hotkey.get('w').callback()`\n // there will be no event, so just execute the callback.\n if (event) {\n var target = event.target || event.srcElement; // srcElement is IE only\n var nodeName = target.nodeName.toUpperCase();\n\n // check if the input has a mousetrap class, and skip checking preventIn if so\n if ((' ' + target.className + ' ').indexOf(' mousetrap ') > -1) {\n shouldExecute = true;\n } else {\n // don't execute callback if the event was fired from inside an element listed in preventIn\n for (var i=0; i -1) {\n // if the combo has other combos bound, don't unbind the whole thing, just the one combo:\n if (scope.hotkeys[index].combo.length > 1) {\n scope.hotkeys[index].combo.splice(scope.hotkeys[index].combo.indexOf(combo), 1);\n } else {\n\n // remove hotkey from bound scopes\n angular.forEach(boundScopes, function (boundScope) {\n var scopeIndex = boundScope.indexOf(scope.hotkeys[index]);\n if (scopeIndex !== -1) {\n boundScope.splice(scopeIndex, 1);\n }\n });\n\n scope.hotkeys.splice(index, 1);\n }\n return true;\n }\n }\n\n return false;\n\n }\n\n /**\n * Get a Hotkey object by key binding\n *\n * @param {[string]} [combo] the key the Hotkey is bound to. Returns all key bindings if no key is passed\n * @return {Hotkey} The Hotkey object\n */\n function _get (combo) {\n\n if (!combo) {\n return scope.hotkeys;\n }\n\n var hotkey;\n\n for (var i = 0; i < scope.hotkeys.length; i++) {\n hotkey = scope.hotkeys[i];\n\n if (hotkey.combo.indexOf(combo) > -1) {\n return hotkey;\n }\n }\n\n return false;\n }\n\n /**\n * Binds the hotkey to a particular scope. Useful if the scope is\n * destroyed, we can automatically destroy the hotkey binding.\n *\n * @param {Object} scope The scope to bind to\n */\n function bindTo (scope) {\n // Only initialize once to allow multiple calls for same scope.\n if (!(scope.$id in boundScopes)) {\n\n // Add the scope to the list of bound scopes\n boundScopes[scope.$id] = [];\n\n scope.$on('$destroy', function () {\n var i = boundScopes[scope.$id].length;\n while (i--) {\n _del(boundScopes[scope.$id].pop());\n }\n });\n }\n // return an object with an add function so we can keep track of the\n // hotkeys and their scope that we added via this chaining method\n return {\n add: function (args) {\n var hotkey;\n\n if (arguments.length > 1) {\n hotkey = _add.apply(this, arguments);\n } else {\n hotkey = _add(args);\n }\n\n boundScopes[scope.$id].push(hotkey);\n return this;\n }\n };\n }\n\n /**\n * All callbacks sent to Mousetrap are wrapped using this function\n * so that we can force a $scope.$apply()\n *\n * @param {Function} callback [description]\n * @return {[type]} [description]\n */\n function wrapApply (callback) {\n // return mousetrap a function to call\n return function (event, combo) {\n\n // if this is an array, it means we provided a route object\n // because the scope wasn't available yet, so rewrap the callback\n // now that the scope is available:\n if (callback instanceof Array) {\n var funcString = callback[0];\n var route = callback[1];\n callback = function (event) {\n route.scope.$eval(funcString);\n };\n }\n\n // this takes place outside angular, so we'll have to call\n // $apply() to make sure angular's digest happens\n $rootScope.$apply(function() {\n // call the original hotkey callback with the keyboard event\n callback(event, _get(combo));\n });\n };\n }\n\n var publicApi = {\n add : _add,\n del : _del,\n get : _get,\n bindTo : bindTo,\n template : this.template,\n toggleCheatSheet : toggleCheatSheet,\n includeCheatSheet : this.includeCheatSheet,\n cheatSheetHotkey : this.cheatSheetHotkey,\n cheatSheetDescription : this.cheatSheetDescription,\n useNgRoute : this.useNgRoute,\n purgeHotkeys : purgeHotkeys,\n templateTitle : this.templateTitle,\n pause : pause,\n unpause : unpause\n };\n\n return publicApi;\n\n }];\n\n\n }])\n\n .directive('hotkey', ['hotkeys', function (hotkeys) {\n return {\n restrict: 'A',\n link: function (scope, el, attrs) {\n var keys = [],\n allowIn;\n\n angular.forEach(scope.$eval(attrs.hotkey), function (func, hotkey) {\n // split and trim the hotkeys string into array\n allowIn = typeof attrs.hotkeyAllowIn === \"string\" ? attrs.hotkeyAllowIn.split(/[\\s,]+/) : [];\n\n keys.push(hotkey);\n\n hotkeys.add({\n combo: hotkey,\n description: attrs.hotkeyDescription,\n callback: func,\n action: attrs.hotkeyAction,\n allowIn: allowIn\n });\n });\n\n // remove the hotkey if the directive is destroyed:\n el.bind('$destroy', function() {\n angular.forEach(keys, hotkeys.del);\n });\n }\n };\n }])\n\n .run(['hotkeys', function(hotkeys) {\n // force hotkeys to run by injecting it. Without this, hotkeys only runs\n // when a controller or something else asks for it via DI.\n }]);\n\n})();\n\n/*global define:false */\n/**\n * Copyright 2015 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.5.2\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n };\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n var _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n };\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n var _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n };\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n var _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'plus': '+',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n };\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n var _REVERSE_MAP;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n _MAP[i + 96] = i;\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys;\n var key;\n var i;\n var modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n function _belongsTo(element, ancestor) {\n if (element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return _belongsTo(element.parentNode, ancestor);\n }\n\n function Mousetrap(targetElement) {\n var self = this;\n\n targetElement = targetElement || document;\n\n if (!(self instanceof Mousetrap)) {\n return new Mousetrap(targetElement);\n }\n\n /**\n * element to attach key events to\n *\n * @type {Element}\n */\n self.target = targetElement;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n self._callbacks = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self._directMap = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n var _sequenceLevels = {};\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n var _resetTimer;\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n var _ignoreNextKeyup = false;\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n var _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n var _nextExpectedAction = false;\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i;\n var callback;\n var matches = [];\n var action = e.type;\n\n // if there are no events related to this keycode\n if (!self._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < self._callbacks[character].length; ++i) {\n callback = self._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n self._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n self._handleKey = function(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e);\n var i;\n var doNotReset = {};\n var maxLevel = 0;\n var processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n };\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n self.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n self._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' ');\n var info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n self._bindMultiple = function(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n };\n\n // start!\n _addEvent(targetElement, 'keypress', _handleKeyEvent);\n _addEvent(targetElement, 'keydown', _handleKeyEvent);\n _addEvent(targetElement, 'keyup', _handleKeyEvent);\n }\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n Mousetrap.prototype.bind = function(keys, callback, action) {\n var self = this;\n keys = keys instanceof Array ? keys : [keys];\n self._bindMultiple.call(self, keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n Mousetrap.prototype.unbind = function(keys, action) {\n var self = this;\n return self.bind.call(self, keys, function() {}, action);\n };\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n Mousetrap.prototype.trigger = function(keys, action) {\n var self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n Mousetrap.prototype.reset = function() {\n var self = this;\n self._callbacks = {};\n self._directMap = {};\n return self;\n };\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n Mousetrap.prototype.stopCallback = function(e, element) {\n var self = this;\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (_belongsTo(element, self.target)) {\n return false;\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n Mousetrap.prototype.handleKey = function() {\n var self = this;\n return self._handleKey.apply(self, arguments);\n };\n\n /**\n * Init the global mousetrap functions\n *\n * This method is needed to allow the global mousetrap functions to work\n * now that mousetrap is a constructor function.\n */\n Mousetrap.init = function() {\n var documentMousetrap = Mousetrap(document);\n for (var method in documentMousetrap) {\n if (method.charAt(0) !== '_') {\n Mousetrap[method] = (function(method) {\n return function() {\n return documentMousetrap[method].apply(documentMousetrap, arguments);\n };\n } (method));\n }\n }\n };\n\n Mousetrap.init();\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose as a common js module\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Mousetrap;\n }\n\n // expose mousetrap as an AMD module\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Mousetrap;\n });\n }\n}) (window, document);\n","'use strict';\n\nangular.module('angular-js-xlsx', [])\n .directive('jsXls', function () {\n return {\n restrict: 'E',\n template: '',\n replace: true,\n link: function (scope, element, attrs) {\n\n function handleSelect() {\n var files = this.files;\n for (var i = 0, f = files[i]; i != files.length; ++i) {\n var reader = new FileReader();\n var name = f.name;\n reader.onload = function (e) {\n if (!e) {\n var data = reader.content;\n } else {\n var data = e.target.result;\n }\n\n /* if binary string, read with type 'binary' */\n try {\n var workbook = XLS.read(data, { type: 'binary' });\n\n if (attrs.onread) {\n var handleRead = scope[attrs.onread];\n if (typeof handleRead === \"function\") {\n handleRead(workbook);\n }\n }\n } catch (e) {\n if (attrs.onerror) {\n var handleError = scope[attrs.onerror];\n if (typeof handleError === \"function\") {\n handleError(e);\n }\n }\n }\n\n // Clear input file\n element.val('');\n };\n\n //extend FileReader\n if (!FileReader.prototype.readAsBinaryString) {\n FileReader.prototype.readAsBinaryString = function (fileData) {\n var binary = \"\";\n var pt = this;\n var reader = new FileReader();\n reader.onload = function (e) {\n var bytes = new Uint8Array(reader.result);\n var length = bytes.byteLength;\n for (var i = 0; i < length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n //pt.result - readonly so assign binary\n pt.content = binary;\n $(pt).trigger('onload');\n }\n reader.readAsArrayBuffer(fileData);\n }\n }\n\n reader.readAsBinaryString(f);\n\n }\n }\n\n element.on('change', handleSelect);\n }\n };\n });\n","/**\n * @license AngularJS v1.6.4\n * (c) 2010-2017 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\nvar forEach;\nvar isArray;\nvar isString;\nvar jqLite;\n\n/**\n * @ngdoc module\n * @name ngMessages\n * @description\n *\n * The `ngMessages` module provides enhanced support for displaying messages within templates\n * (typically within forms or when rendering message objects that return key/value data).\n * Instead of relying on JavaScript code and/or complex ng-if statements within your form template to\n * show and hide error messages specific to the state of an input field, the `ngMessages` and\n * `ngMessage` directives are designed to handle the complexity, inheritance and priority\n * sequencing based on the order of how the messages are defined in the template.\n *\n * Currently, the ngMessages module only contains the code for the `ngMessages`, `ngMessagesInclude`\n * `ngMessage` and `ngMessageExp` directives.\n *\n * # Usage\n * The `ngMessages` directive allows keys in a key/value collection to be associated with a child element\n * (or 'message') that will show or hide based on the truthiness of that key's value in the collection. A common use\n * case for `ngMessages` is to display error messages for inputs using the `$error` object exposed by the\n * {@link ngModel ngModel} directive.\n *\n * The child elements of the `ngMessages` directive are matched to the collection keys by a `ngMessage` or\n * `ngMessageExp` directive. The value of these attributes must match a key in the collection that is provided by\n * the `ngMessages` directive.\n *\n * Consider the following example, which illustrates a typical use case of `ngMessages`. Within the form `myForm` we\n * have a text input named `myField` which is bound to the scope variable `field` using the {@link ngModel ngModel}\n * directive.\n *\n * The `myField` field is a required input of type `email` with a maximum length of 15 characters.\n *\n * ```html\n *
\n * \n *
\n *
Please enter a value for this field.
\n *
This field must be a valid email address.
\n *
This field can be at most 15 characters long.
\n *
\n *
\n * ```\n *\n * In order to show error messages corresponding to `myField` we first create an element with an `ngMessages` attribute\n * set to the `$error` object owned by the `myField` input in our `myForm` form.\n *\n * Within this element we then create separate elements for each of the possible errors that `myField` could have.\n * The `ngMessage` attribute is used to declare which element(s) will appear for which error - for example,\n * setting `ng-message=\"required\"` specifies that this particular element should be displayed when there\n * is no value present for the required field `myField` (because the key `required` will be `true` in the object\n * `myForm.myField.$error`).\n *\n * ### Message order\n *\n * By default, `ngMessages` will only display one message for a particular key/value collection at any time. If more\n * than one message (or error) key is currently true, then which message is shown is determined by the order of messages\n * in the HTML template code (messages declared first are prioritised). This mechanism means the developer does not have\n * to prioritize messages using custom JavaScript code.\n *\n * Given the following error object for our example (which informs us that the field `myField` currently has both the\n * `required` and `email` errors):\n *\n * ```javascript\n * \n * myField.$error = { required : true, email: true, maxlength: false };\n * ```\n * The `required` message will be displayed to the user since it appears before the `email` message in the DOM.\n * Once the user types a single character, the `required` message will disappear (since the field now has a value)\n * but the `email` message will be visible because it is still applicable.\n *\n * ### Displaying multiple messages at the same time\n *\n * While `ngMessages` will by default only display one error element at a time, the `ng-messages-multiple` attribute can\n * be applied to the `ngMessages` container element to cause it to display all applicable error messages at once:\n *\n * ```html\n * \n *
...
\n *\n * \n * ...\n * ```\n *\n * ## Reusing and Overriding Messages\n * In addition to prioritization, ngMessages also allows for including messages from a remote or an inline\n * template. This allows for generic collection of messages to be reused across multiple parts of an\n * application.\n *\n * ```html\n * \n *\n *
\n *
\n *
\n * ```\n *\n * However, including generic messages may not be useful enough to match all input fields, therefore,\n * `ngMessages` provides the ability to override messages defined in the remote template by redefining\n * them within the directive container.\n *\n * ```html\n * \n * \n *\n *
\n * \n * \n *
\n * \n *
You did not enter your email address
\n *\n * \n *
Your email address is invalid
\n *\n * \n *
\n *
\n *
\n * ```\n *\n * In the example HTML code above the message that is set on required will override the corresponding\n * required message defined within the remote template. Therefore, with particular input fields (such\n * email addresses, date fields, autocomplete inputs, etc...), specialized error messages can be applied\n * while more generic messages can be used to handle other, more general input errors.\n *\n * ## Dynamic Messaging\n * ngMessages also supports using expressions to dynamically change key values. Using arrays and\n * repeaters to list messages is also supported. This means that the code below will be able to\n * fully adapt itself and display the appropriate message when any of the expression data changes:\n *\n * ```html\n *
\n * \n *
\n *
You did not enter your email address
\n *
\n * \n *
{{ errorMessage.text }}
\n *
\n *
\n *
\n * ```\n *\n * The `errorMessage.type` expression can be a string value or it can be an array so\n * that multiple errors can be associated with a single error message:\n *\n * ```html\n * \n *
\n *
You did not enter your email address
\n *
\n * Your email must be between 5 and 100 characters long\n *
\n *
\n * ```\n *\n * Feel free to use other structural directives such as ng-if and ng-switch to further control\n * what messages are active and when. Be careful, if you place ng-message on the same element\n * as these structural directives, Angular may not be able to determine if a message is active\n * or not. Therefore it is best to place the ng-message on a child element of the structural\n * directive.\n *\n * ```html\n *
\n *
\n *
Please enter something
\n *
\n *
\n * ```\n *\n * ## Animations\n * If the `ngAnimate` module is active within the application then the `ngMessages`, `ngMessage` and\n * `ngMessageExp` directives will trigger animations whenever any messages are added and removed from\n * the DOM by the `ngMessages` directive.\n *\n * Whenever the `ngMessages` directive contains one or more visible messages then the `.ng-active` CSS\n * class will be added to the element. The `.ng-inactive` CSS class will be applied when there are no\n * messages present. Therefore, CSS transitions and keyframes as well as JavaScript animations can\n * hook into the animations whenever these classes are added/removed.\n *\n * Let's say that our HTML code for our messages container looks like so:\n *\n * ```html\n *
\n *
...
\n *
...
\n *
\n * ```\n *\n * Then the CSS animation code for the message container looks like so:\n *\n * ```css\n * .my-messages {\n * transition:1s linear all;\n * }\n * .my-messages.ng-active {\n * // messages are visible\n * }\n * .my-messages.ng-inactive {\n * // messages are hidden\n * }\n * ```\n *\n * Whenever an inner message is attached (becomes visible) or removed (becomes hidden) then the enter\n * and leave animation is triggered for each particular element bound to the `ngMessage` directive.\n *\n * Therefore, the CSS code for the inner messages looks like so:\n *\n * ```css\n * .some-message {\n * transition:1s linear all;\n * }\n *\n * .some-message.ng-enter {}\n * .some-message.ng-enter.ng-enter-active {}\n *\n * .some-message.ng-leave {}\n * .some-message.ng-leave.ng-leave-active {}\n * ```\n *\n * {@link ngAnimate Click here} to learn how to use JavaScript animations or to learn more about ngAnimate.\n */\nangular.module('ngMessages', [], function initAngularHelpers() {\n // Access helpers from angular core.\n // Do it inside a `config` block to ensure `window.angular` is available.\n forEach = angular.forEach;\n isArray = angular.isArray;\n isString = angular.isString;\n jqLite = angular.element;\n})\n .info({ angularVersion: '1.6.4' })\n\n /**\n * @ngdoc directive\n * @module ngMessages\n * @name ngMessages\n * @restrict AE\n *\n * @description\n * `ngMessages` is a directive that is designed to show and hide messages based on the state\n * of a key/value object that it listens on. The directive itself complements error message\n * reporting with the `ngModel` $error object (which stores a key/value state of validation errors).\n *\n * `ngMessages` manages the state of internal messages within its container element. The internal\n * messages use the `ngMessage` directive and will be inserted/removed from the page depending\n * on if they're present within the key/value object. By default, only one message will be displayed\n * at a time and this depends on the prioritization of the messages within the template. (This can\n * be changed by using the `ng-messages-multiple` or `multiple` attribute on the directive container.)\n *\n * A remote template can also be used to promote message reusability and messages can also be\n * overridden.\n *\n * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.\n *\n * @usage\n * ```html\n * \n * \n * ...\n * ...\n * ...\n * \n *\n * \n * \n * ...\n * ...\n * ...\n * \n * ```\n *\n * @param {string} ngMessages an angular expression evaluating to a key/value object\n * (this is typically the $error object on an ngModel instance).\n * @param {string=} ngMessagesMultiple|multiple when set, all messages will be displayed with true\n *\n * @example\n * \n * \n *
\n * \n *
myForm.myName.$error = {{ myForm.myName.$error | json }}
\n *\n *
\n *
You did not enter a field
\n *
Your field is too short
\n *
Your field is too long
\n *
\n *
\n *
\n * \n * angular.module('ngMessagesExample', ['ngMessages']);\n * \n *
\n */\n .directive('ngMessages', ['$animate', function($animate) {\n var ACTIVE_CLASS = 'ng-active';\n var INACTIVE_CLASS = 'ng-inactive';\n\n return {\n require: 'ngMessages',\n restrict: 'AE',\n controller: ['$element', '$scope', '$attrs', function NgMessagesCtrl($element, $scope, $attrs) {\n var ctrl = this;\n var latestKey = 0;\n var nextAttachId = 0;\n\n this.getAttachId = function getAttachId() { return nextAttachId++; };\n\n var messages = this.messages = {};\n var renderLater, cachedCollection;\n\n this.render = function(collection) {\n collection = collection || {};\n\n renderLater = false;\n cachedCollection = collection;\n\n // this is true if the attribute is empty or if the attribute value is truthy\n var multiple = isAttrTruthy($scope, $attrs.ngMessagesMultiple) ||\n isAttrTruthy($scope, $attrs.multiple);\n\n var unmatchedMessages = [];\n var matchedKeys = {};\n var messageItem = ctrl.head;\n var messageFound = false;\n var totalMessages = 0;\n\n // we use != instead of !== to allow for both undefined and null values\n while (messageItem != null) {\n totalMessages++;\n var messageCtrl = messageItem.message;\n\n var messageUsed = false;\n if (!messageFound) {\n forEach(collection, function(value, key) {\n if (!messageUsed && truthy(value) && messageCtrl.test(key)) {\n // this is to prevent the same error name from showing up twice\n if (matchedKeys[key]) return;\n matchedKeys[key] = true;\n\n messageUsed = true;\n messageCtrl.attach();\n }\n });\n }\n\n if (messageUsed) {\n // unless we want to display multiple messages then we should\n // set a flag here to avoid displaying the next message in the list\n messageFound = !multiple;\n } else {\n unmatchedMessages.push(messageCtrl);\n }\n\n messageItem = messageItem.next;\n }\n\n forEach(unmatchedMessages, function(messageCtrl) {\n messageCtrl.detach();\n });\n\n if (unmatchedMessages.length !== totalMessages) {\n $animate.setClass($element, ACTIVE_CLASS, INACTIVE_CLASS);\n } else {\n $animate.setClass($element, INACTIVE_CLASS, ACTIVE_CLASS);\n }\n };\n\n $scope.$watchCollection($attrs.ngMessages || $attrs['for'], ctrl.render);\n\n // If the element is destroyed, proactively destroy all the currently visible messages\n $element.on('$destroy', function() {\n forEach(messages, function(item) {\n item.message.detach();\n });\n });\n\n this.reRender = function() {\n if (!renderLater) {\n renderLater = true;\n $scope.$evalAsync(function() {\n if (renderLater && cachedCollection) {\n ctrl.render(cachedCollection);\n }\n });\n }\n };\n\n this.register = function(comment, messageCtrl) {\n var nextKey = latestKey.toString();\n messages[nextKey] = {\n message: messageCtrl\n };\n insertMessageNode($element[0], comment, nextKey);\n comment.$$ngMessageNode = nextKey;\n latestKey++;\n\n ctrl.reRender();\n };\n\n this.deregister = function(comment) {\n var key = comment.$$ngMessageNode;\n delete comment.$$ngMessageNode;\n removeMessageNode($element[0], comment, key);\n delete messages[key];\n ctrl.reRender();\n };\n\n function findPreviousMessage(parent, comment) {\n var prevNode = comment;\n var parentLookup = [];\n\n while (prevNode && prevNode !== parent) {\n var prevKey = prevNode.$$ngMessageNode;\n if (prevKey && prevKey.length) {\n return messages[prevKey];\n }\n\n // dive deeper into the DOM and examine its children for any ngMessage\n // comments that may be in an element that appears deeper in the list\n if (prevNode.childNodes.length && parentLookup.indexOf(prevNode) === -1) {\n parentLookup.push(prevNode);\n prevNode = prevNode.childNodes[prevNode.childNodes.length - 1];\n } else if (prevNode.previousSibling) {\n prevNode = prevNode.previousSibling;\n } else {\n prevNode = prevNode.parentNode;\n parentLookup.push(prevNode);\n }\n }\n }\n\n function insertMessageNode(parent, comment, key) {\n var messageNode = messages[key];\n if (!ctrl.head) {\n ctrl.head = messageNode;\n } else {\n var match = findPreviousMessage(parent, comment);\n if (match) {\n messageNode.next = match.next;\n match.next = messageNode;\n } else {\n messageNode.next = ctrl.head;\n ctrl.head = messageNode;\n }\n }\n }\n\n function removeMessageNode(parent, comment, key) {\n var messageNode = messages[key];\n\n var match = findPreviousMessage(parent, comment);\n if (match) {\n match.next = messageNode.next;\n } else {\n ctrl.head = messageNode.next;\n }\n }\n }]\n };\n\n function isAttrTruthy(scope, attr) {\n return (isString(attr) && attr.length === 0) || //empty attribute\n truthy(scope.$eval(attr));\n }\n\n function truthy(val) {\n return isString(val) ? val.length : !!val;\n }\n }])\n\n /**\n * @ngdoc directive\n * @name ngMessagesInclude\n * @restrict AE\n * @scope\n *\n * @description\n * `ngMessagesInclude` is a directive with the purpose to import existing ngMessage template\n * code from a remote template and place the downloaded template code into the exact spot\n * that the ngMessagesInclude directive is placed within the ngMessages container. This allows\n * for a series of pre-defined messages to be reused and also allows for the developer to\n * determine what messages are overridden due to the placement of the ngMessagesInclude directive.\n *\n * @usage\n * ```html\n * \n * \n * ...\n * \n *\n * \n * \n * ...\n * \n * ```\n *\n * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.\n *\n * @param {string} ngMessagesInclude|src a string value corresponding to the remote template.\n */\n .directive('ngMessagesInclude',\n ['$templateRequest', '$document', '$compile', function($templateRequest, $document, $compile) {\n\n return {\n restrict: 'AE',\n require: '^^ngMessages', // we only require this for validation sake\n link: function($scope, element, attrs) {\n var src = attrs.ngMessagesInclude || attrs.src;\n $templateRequest(src).then(function(html) {\n if ($scope.$$destroyed) return;\n\n if (isString(html) && !html.trim()) {\n // Empty template - nothing to compile\n replaceElementWithMarker(element, src);\n } else {\n // Non-empty template - compile and link\n $compile(html)($scope, function(contents) {\n element.after(contents);\n replaceElementWithMarker(element, src);\n });\n }\n });\n }\n };\n\n // Helpers\n function replaceElementWithMarker(element, src) {\n // A comment marker is placed for debugging purposes\n var comment = $compile.$$createComment ?\n $compile.$$createComment('ngMessagesInclude', src) :\n $document[0].createComment(' ngMessagesInclude: ' + src + ' ');\n var marker = jqLite(comment);\n element.after(marker);\n\n // Don't pollute the DOM anymore by keeping an empty directive element\n element.remove();\n }\n }])\n\n /**\n * @ngdoc directive\n * @name ngMessage\n * @restrict AE\n * @scope\n *\n * @description\n * `ngMessage` is a directive with the purpose to show and hide a particular message.\n * For `ngMessage` to operate, a parent `ngMessages` directive on a parent DOM element\n * must be situated since it determines which messages are visible based on the state\n * of the provided key/value map that `ngMessages` listens on.\n *\n * More information about using `ngMessage` can be found in the\n * {@link module:ngMessages `ngMessages` module documentation}.\n *\n * @usage\n * ```html\n * \n * \n * ...\n * ...\n * \n *\n * \n * \n * ...\n * ...\n * \n * ```\n *\n * @param {expression} ngMessage|when a string value corresponding to the message key.\n */\n .directive('ngMessage', ngMessageDirectiveFactory())\n\n\n /**\n * @ngdoc directive\n * @name ngMessageExp\n * @restrict AE\n * @priority 1\n * @scope\n *\n * @description\n * `ngMessageExp` is the same as {@link directive:ngMessage `ngMessage`}, but instead of a static\n * value, it accepts an expression to be evaluated for the message key.\n *\n * @usage\n * ```html\n * \n * \n * ...\n * \n *\n * \n * \n * ...\n * \n * ```\n *\n * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.\n *\n * @param {expression} ngMessageExp|whenExp an expression value corresponding to the message key.\n */\n .directive('ngMessageExp', ngMessageDirectiveFactory());\n\nfunction ngMessageDirectiveFactory() {\n return ['$animate', function($animate) {\n return {\n restrict: 'AE',\n transclude: 'element',\n priority: 1, // must run before ngBind, otherwise the text is set on the comment\n terminal: true,\n require: '^^ngMessages',\n link: function(scope, element, attrs, ngMessagesCtrl, $transclude) {\n var commentNode = element[0];\n\n var records;\n var staticExp = attrs.ngMessage || attrs.when;\n var dynamicExp = attrs.ngMessageExp || attrs.whenExp;\n var assignRecords = function(items) {\n records = items\n ? (isArray(items)\n ? items\n : items.split(/[\\s,]+/))\n : null;\n ngMessagesCtrl.reRender();\n };\n\n if (dynamicExp) {\n assignRecords(scope.$eval(dynamicExp));\n scope.$watchCollection(dynamicExp, assignRecords);\n } else {\n assignRecords(staticExp);\n }\n\n var currentElement, messageCtrl;\n ngMessagesCtrl.register(commentNode, messageCtrl = {\n test: function(name) {\n return contains(records, name);\n },\n attach: function() {\n if (!currentElement) {\n $transclude(function(elm, newScope) {\n $animate.enter(elm, null, element);\n currentElement = elm;\n\n // Each time we attach this node to a message we get a new id that we can match\n // when we are destroying the node later.\n var $$attachId = currentElement.$$attachId = ngMessagesCtrl.getAttachId();\n\n // in the event that the element or a parent element is destroyed\n // by another structural directive then it's time\n // to deregister the message from the controller\n currentElement.on('$destroy', function() {\n if (currentElement && currentElement.$$attachId === $$attachId) {\n ngMessagesCtrl.deregister(commentNode);\n messageCtrl.detach();\n }\n newScope.$destroy();\n });\n });\n }\n },\n detach: function() {\n if (currentElement) {\n var elm = currentElement;\n currentElement = null;\n $animate.leave(elm);\n }\n }\n });\n }\n };\n }];\n\n function contains(collection, key) {\n if (collection) {\n return isArray(collection)\n ? collection.indexOf(key) >= 0\n : collection.hasOwnProperty(key);\n }\n }\n}\n\n\n})(window, window.angular);\n","require('./angular-messages');\nmodule.exports = 'ngMessages';\n","angular.module('angularResizable', [])\r\n .directive('resizable', function() {\r\n var toCall;\r\n function throttle(fun) {\r\n if (toCall === undefined) {\r\n toCall = fun;\r\n setTimeout(function() {\r\n toCall();\r\n toCall = undefined;\r\n }, 100);\r\n } else {\r\n toCall = fun;\r\n }\r\n }\r\n return {\r\n restrict: 'AE',\r\n scope: {\r\n rDirections: '=',\r\n rCenteredX: '=',\r\n rCenteredY: '=',\r\n rWidth: '=',\r\n rHeight: '=',\r\n rFlex: '=',\r\n rGrabber: '@',\r\n rDisabled: '@'\r\n },\r\n link: function(scope, element, attr) {\r\n var flexBasis = 'flexBasis' in document.documentElement.style ? 'flexBasis' :\r\n 'webkitFlexBasis' in document.documentElement.style ? 'webkitFlexBasis' :\r\n 'msFlexPreferredSize' in document.documentElement.style ? 'msFlexPreferredSize' : 'flexBasis';\r\n\r\n // register watchers on width and height attributes if they are set\r\n scope.$watch('rWidth', function(value){\r\n element[0].style.width = scope.rWidth + 'px';\r\n });\r\n scope.$watch('rHeight', function(value){\r\n element[0].style.height = scope.rHeight + 'px';\r\n });\r\n\r\n element.addClass('resizable');\r\n\r\n var style = window.getComputedStyle(element[0], null),\r\n w,\r\n h,\r\n dir = scope.rDirections,\r\n vx = scope.rCenteredX ? 2 : 1, // if centered double velocity\r\n vy = scope.rCenteredY ? 2 : 1, // if centered double velocity\r\n inner = scope.rGrabber ? scope.rGrabber : '',\r\n start,\r\n dragDir,\r\n axis,\r\n info = {};\r\n\r\n var updateInfo = function(e) {\r\n info.width = false; info.height = false;\r\n if(axis === 'x')\r\n info.width = parseInt(element[0].style[scope.rFlex ? flexBasis : 'width']);\r\n else\r\n info.height = parseInt(element[0].style[scope.rFlex ? flexBasis : 'height']);\r\n info.id = element[0].id;\r\n info.evt = e;\r\n };\r\n\r\n var dragging = function(e) {\r\n var prop, offset = axis === 'x' ? start - e.clientX : start - e.clientY;\r\n switch(dragDir) {\r\n case 'top':\r\n prop = scope.rFlex ? flexBasis : 'height';\r\n element[0].style[prop] = h + (offset * vy) + 'px';\r\n break;\r\n case 'bottom':\r\n prop = scope.rFlex ? flexBasis : 'height';\r\n element[0].style[prop] = h - (offset * vy) + 'px';\r\n break;\r\n case 'right':\r\n prop = scope.rFlex ? flexBasis : 'width';\r\n element[0].style[prop] = w - (offset * vx) + 'px';\r\n break;\r\n case 'left':\r\n prop = scope.rFlex ? flexBasis : 'width';\r\n element[0].style[prop] = w + (offset * vx) + 'px';\r\n break;\r\n }\r\n updateInfo(e);\r\n throttle(function() { scope.$emit('angular-resizable.resizing', info);});\r\n };\r\n var dragEnd = function(e) {\r\n updateInfo();\r\n scope.$emit('angular-resizable.resizeEnd', info);\r\n scope.$apply();\r\n document.removeEventListener('mouseup', dragEnd, false);\r\n document.removeEventListener('mousemove', dragging, false);\r\n element.removeClass('no-transition');\r\n };\r\n var dragStart = function(e, direction) {\r\n dragDir = direction;\r\n axis = dragDir === 'left' || dragDir === 'right' ? 'x' : 'y';\r\n start = axis === 'x' ? e.clientX : e.clientY;\r\n w = parseInt(style.getPropertyValue('width'));\r\n h = parseInt(style.getPropertyValue('height'));\r\n\r\n //prevent transition while dragging\r\n element.addClass('no-transition');\r\n\r\n document.addEventListener('mouseup', dragEnd, false);\r\n document.addEventListener('mousemove', dragging, false);\r\n\r\n // Disable highlighting while dragging\r\n if(e.stopPropagation) e.stopPropagation();\r\n if(e.preventDefault) e.preventDefault();\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n\r\n updateInfo(e);\r\n scope.$emit('angular-resizable.resizeStart', info);\r\n scope.$apply();\r\n };\r\n\r\n dir.forEach(function (direction) {\r\n var grabber = document.createElement('div');\r\n\r\n // add class for styling purposes\r\n grabber.setAttribute('class', 'rg-' + direction);\r\n grabber.innerHTML = inner;\r\n element[0].appendChild(grabber);\r\n grabber.ondragstart = function() { return false; };\r\n grabber.addEventListener('mousedown', function(e) {\r\n var disabled = (scope.rDisabled === 'true');\r\n if (!disabled && e.which === 1) {\r\n // left mouse click\r\n dragStart(e, direction);\r\n }\r\n }, false);\r\n });\r\n }\r\n };\r\n });\r\n","/**\n * @license AngularJS v1.6.4\n * (c) 2010-2017 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Any commits to this file should be reviewed with security in mind. *\n * Changes to this file can potentially create security vulnerabilities. *\n * An approval from 2 Core members with history of modifying *\n * this file is required. *\n * *\n * Does the change somehow allow for arbitrary javascript to be executed? *\n * Or allows for someone to change the prototype of built-in objects? *\n * Or gives undesired access to variables likes document or window? *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\nvar bind;\nvar extend;\nvar forEach;\nvar isDefined;\nvar lowercase;\nvar noop;\nvar nodeContains;\nvar htmlParser;\nvar htmlSanitizeWriter;\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * # ngSanitize\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n *\n *
\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n * Sanitizes an html string by stripping all potentially dangerous tokens.\n *\n * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are\n * then serialized back to properly escaped html string. This means that no unsafe input can make\n * it into the returned string.\n *\n * The whitelist for URL sanitization of attribute values is configured using the functions\n * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider\n * `$compileProvider`}.\n *\n * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\n *\n * @param {string} html HTML input.\n * @returns {string} Sanitized HTML.\n *\n * @example\n \n \n \n
\n Snippet: \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
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html=\"snippet\">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value\n
<div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\">\n</div>
\n
ng-bindAutomatically escapes
<div ng-bind=\"snippet\">
</div>
\n
\n
\n \n it('should sanitize the html snippet by default', function() {\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('

an html\\nclick here\\nsnippet

');\n });\n\n it('should inline raw snippet if bound to a trusted value', function() {\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).\n toBe(\"

an html\\n\" +\n \"click here\\n\" +\n \"snippet

\");\n });\n\n it('should escape snippet without any filter', function() {\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n \"snippet</p>\");\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new text');\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('new text');\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(\n 'new text');\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\n });\n
\n
\n */\n\n\n/**\n * @ngdoc provider\n * @name $sanitizeProvider\n * @this\n *\n * @description\n * Creates and configures {@link $sanitize} instance.\n */\nfunction $SanitizeProvider() {\n var svgEnabled = false;\n\n this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n if (svgEnabled) {\n extend(validElements, svgElements);\n }\n return function(html) {\n var buf = [];\n htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\n }));\n return buf.join('');\n };\n }];\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#enableSvg\n * @kind function\n *\n * @description\n * Enables a subset of svg to be supported by the sanitizer.\n *\n *
\n *

By enabling this setting without taking other precautions, you might expose your\n * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\n * outside of the containing element and be rendered over other elements on the page (e.g. a login\n * link). Such behavior can then result in phishing incidents.

\n *\n *

To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n * tags within the sanitized content:

\n *\n *
\n *\n *
\n   *   .rootOfTheIncludedContent svg {\n   *     overflow: hidden !important;\n   *   }\n   *   
\n *
\n *\n * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\n * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called\n * without an argument or self for chaining otherwise.\n */\n this.enableSvg = function(enableSvg) {\n if (isDefined(enableSvg)) {\n svgEnabled = enableSvg;\n return this;\n } else {\n return svgEnabled;\n }\n };\n\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Private stuff\n //////////////////////////////////////////////////////////////////////////////////////////////////\n\n bind = angular.bind;\n extend = angular.extend;\n forEach = angular.forEach;\n isDefined = angular.isDefined;\n lowercase = angular.lowercase;\n noop = angular.noop;\n\n htmlParser = htmlParserImpl;\n htmlSanitizeWriter = htmlSanitizeWriterImpl;\n\n nodeContains = window.Node.prototype.contains || /** @this */ function(arg) {\n // eslint-disable-next-line no-bitwise\n return !!(this.compareDocumentPosition(arg) & 16);\n };\n\n // Regular Expressions for parsing tags and attributes\n var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n // Match everything outside of normal chars and \" (quote character)\n NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;\n\n\n // Good source of info about elements and attributes\n // http://dev.w3.org/html5/spec/Overview.html#semantics\n // http://simon.html5.org/html-elements\n\n // Safe Void Elements - HTML5\n // http://dev.w3.org/html5/spec/Overview.html#void-elements\n var voidElements = toMap('area,br,col,hr,img,wbr');\n\n // Elements that you can, intentionally, leave open (and which close themselves)\n // http://dev.w3.org/html5/spec/Overview.html#optional-tags\n var optionalEndTagBlockElements = toMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),\n optionalEndTagInlineElements = toMap('rp,rt'),\n optionalEndTagElements = extend({},\n optionalEndTagInlineElements,\n optionalEndTagBlockElements);\n\n // Safe Block Elements - HTML5\n var blockElements = extend({}, optionalEndTagBlockElements, toMap('address,article,' +\n 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));\n\n // Inline Elements - HTML5\n var inlineElements = extend({}, optionalEndTagInlineElements, toMap('a,abbr,acronym,b,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +\n 'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));\n\n // SVG Elements\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\n // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\n // They can potentially allow for arbitrary javascript to be executed. See #11290\n var svgElements = toMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +\n 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +\n 'radialGradient,rect,stop,svg,switch,text,title,tspan');\n\n // Blocked Elements (will be stripped)\n var blockedElements = toMap('script,style');\n\n var validElements = extend({},\n voidElements,\n blockElements,\n inlineElements,\n optionalEndTagElements);\n\n //Attributes that have href and hence need to be sanitized\n var uriAttrs = toMap('background,cite,href,longdesc,src,xlink:href');\n\n var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\n 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\n 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\n 'valign,value,vspace,width');\n\n // SVG attributes (without \"id\" and \"name\" attributes)\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\n var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\n 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\n 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\n 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\n 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\n 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\n 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\n 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\n 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\n 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\n 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\n 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\n 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\n 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\n 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\n\n var validAttrs = extend({},\n uriAttrs,\n svgAttrs,\n htmlAttrs);\n\n function toMap(str, lowercaseKeys) {\n var obj = {}, items = str.split(','), i;\n for (i = 0; i < items.length; i++) {\n obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\n }\n return obj;\n }\n\n var inertBodyElement;\n (function(window) {\n var doc;\n if (window.document && window.document.implementation) {\n doc = window.document.implementation.createHTMLDocument('inert');\n } else {\n throw $sanitizeMinErr('noinert', 'Can\\'t create an inert html document');\n }\n var docElement = doc.documentElement || doc.getDocumentElement();\n var bodyElements = docElement.getElementsByTagName('body');\n\n // usually there should be only one body element in the document, but IE doesn't have any, so we need to create one\n if (bodyElements.length === 1) {\n inertBodyElement = bodyElements[0];\n } else {\n var html = doc.createElement('html');\n inertBodyElement = doc.createElement('body');\n html.appendChild(inertBodyElement);\n doc.appendChild(html);\n }\n })(window);\n\n /**\n * @example\n * htmlParser(htmlString, {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\n function htmlParserImpl(html, handler) {\n if (html === null || html === undefined) {\n html = '';\n } else if (typeof html !== 'string') {\n html = '' + html;\n }\n inertBodyElement.innerHTML = html;\n\n //mXSS protection\n var mXSSAttempts = 5;\n do {\n if (mXSSAttempts === 0) {\n throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n\n // strip custom-namespaced attributes on IE<=11\n if (window.document.documentMode) {\n stripCustomNsAttrs(inertBodyElement);\n }\n html = inertBodyElement.innerHTML; //trigger mXSS\n inertBodyElement.innerHTML = html;\n } while (html !== inertBodyElement.innerHTML);\n\n var node = inertBodyElement.firstChild;\n while (node) {\n switch (node.nodeType) {\n case 1: // ELEMENT_NODE\n handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\n break;\n case 3: // TEXT NODE\n handler.chars(node.textContent);\n break;\n }\n\n var nextNode;\n if (!(nextNode = node.firstChild)) {\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n nextNode = getNonDescendant('nextSibling', node);\n if (!nextNode) {\n while (nextNode == null) {\n node = getNonDescendant('parentNode', node);\n if (node === inertBodyElement) break;\n nextNode = getNonDescendant('nextSibling', node);\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n }\n }\n }\n node = nextNode;\n }\n\n while ((node = inertBodyElement.firstChild)) {\n inertBodyElement.removeChild(node);\n }\n }\n\n function attrToMap(attrs) {\n var map = {};\n for (var i = 0, ii = attrs.length; i < ii; i++) {\n var attr = attrs[i];\n map[attr.name] = attr.value;\n }\n return map;\n }\n\n\n /**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\n function encodeEntities(value) {\n return value.\n replace(/&/g, '&').\n replace(SURROGATE_PAIR_REGEXP, function(value) {\n var hi = value.charCodeAt(0);\n var low = value.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n }).\n replace(NON_ALPHANUMERIC_REGEXP, function(value) {\n return '&#' + value.charCodeAt(0) + ';';\n }).\n replace(//g, '>');\n }\n\n /**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.join('') to get out sanitized html string\n * @returns {object} in the form of {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * }\n */\n function htmlSanitizeWriterImpl(buf, uriValidator) {\n var ignoreCurrentElement = false;\n var out = bind(buf, buf.push);\n return {\n start: function(tag, attrs) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && blockedElements[tag]) {\n ignoreCurrentElement = tag;\n }\n if (!ignoreCurrentElement && validElements[tag] === true) {\n out('<');\n out(tag);\n forEach(attrs, function(value, key) {\n var lkey = lowercase(key);\n var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n if (validAttrs[lkey] === true &&\n (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n out(' ');\n out(key);\n out('=\"');\n out(encodeEntities(value));\n out('\"');\n }\n });\n out('>');\n }\n },\n end: function(tag) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\n out('');\n }\n // eslint-disable-next-line eqeqeq\n if (tag == ignoreCurrentElement) {\n ignoreCurrentElement = false;\n }\n },\n chars: function(chars) {\n if (!ignoreCurrentElement) {\n out(encodeEntities(chars));\n }\n }\n };\n }\n\n\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\n * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\n * to allow any of these custom attributes. This method strips them all.\n *\n * @param node Root element to process\n */\n function stripCustomNsAttrs(node) {\n while (node) {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n var attrs = node.attributes;\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrNode = attrs[i];\n var attrName = attrNode.name.toLowerCase();\n if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\n node.removeAttributeNode(attrNode);\n i--;\n l--;\n }\n }\n }\n\n var nextNode = node.firstChild;\n if (nextNode) {\n stripCustomNsAttrs(nextNode);\n }\n\n node = getNonDescendant('nextSibling', node);\n }\n }\n\n function getNonDescendant(propName, node) {\n // An element is clobbered if its `propName` property points to one of its descendants\n var nextNode = node[propName];\n if (nextNode && nodeContains.call(node, nextNode)) {\n throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText);\n }\n return nextNode;\n }\n}\n\nfunction sanitizeText(chars) {\n var buf = [];\n var writer = htmlSanitizeWriter(buf, noop);\n writer.chars(chars);\n return buf.join('');\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', [])\n .provider('$sanitize', $SanitizeProvider)\n .info({ angularVersion: '1.6.4' });\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n * Can be one of:\n *\n * - `object`: A map of attributes\n * - `function`: Takes the url as a parameter and returns a map of attributes\n *\n * If the map of attributes contains a value for `target`, it overrides the value of\n * the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n \n *\n * @example\n \n \n
\n Snippet: \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
FilterSourceRendered
linky filter\n
<div ng-bind-html=\"snippet | linky\">
</div>
\n
\n
\n
linky target\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\">
</div>
\n
\n
\n
linky custom attributes\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\">
</div>
\n
\n
\n
no filter
<div ng-bind=\"snippet\">
</div>
\n \n \n angular.module('linkyExample', ['ngSanitize'])\n .controller('ExampleController', ['$scope', function($scope) {\n $scope.snippet =\n 'Pretty text with some links:\\n' +\n 'http://angularjs.org/,\\n' +\n 'mailto:us@somewhere.org,\\n' +\n 'another@somewhere.org,\\n' +\n 'and one more: ftp://127.0.0.1/.';\n $scope.snippetWithSingleURL = 'http://angularjs.org/';\n }]);\n \n \n it('should linkify the snippet with urls', function() {\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n });\n\n it('should not linkify snippet without the linky filter', function() {\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new http://link.');\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('new http://link.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n .toBe('new http://link.');\n });\n\n it('should work with the target property', function() {\n expect(element(by.id('linky-target')).\n element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n });\n\n it('should optionally add custom attributes', function() {\n expect(element(by.id('linky-custom-attributes')).\n element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\n });\n \n \n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n var LINKY_URL_REGEXP =\n /((ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\n MAILTO_REGEXP = /^mailto:/i;\n\n var linkyMinErr = angular.$$minErr('linky');\n var isDefined = angular.isDefined;\n var isFunction = angular.isFunction;\n var isObject = angular.isObject;\n var isString = angular.isString;\n\n return function(text, target, attributes) {\n if (text == null || text === '') return text;\n if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\n\n var attributesFn =\n isFunction(attributes) ? attributes :\n isObject(attributes) ? function getAttributesObject() {return attributes;} :\n function getEmptyAttributesObject() {return {};};\n\n var match;\n var raw = text;\n var html = [];\n var url;\n var i;\n while ((match = raw.match(LINKY_URL_REGEXP))) {\n // We can not end in these as they are sometimes found at the end of the sentence\n url = match[0];\n // if we did not match ftp/http/www/mailto then assume mailto\n if (!match[2] && !match[4]) {\n url = (match[3] ? 'http://' : 'mailto:') + url;\n }\n i = match.index;\n addText(raw.substr(0, i));\n addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n raw = raw.substring(i + match[0].length);\n }\n addText(raw);\n return $sanitize(html.join(''));\n\n function addText(text) {\n if (!text) {\n return;\n }\n html.push(sanitizeText(text));\n }\n\n function addLink(url, text) {\n var key, linkAttributes = attributesFn(url);\n html.push('');\n addText(text);\n html.push('');\n }\n };\n}]);\n\n\n})(window, window.angular);\n","require('./angular-sanitize');\nmodule.exports = 'ngSanitize';\n","/*\n * angular-ui-bootstrap\n * http://angular-ui.github.io/bootstrap/\n\n * Version: 2.5.0 - 2017-01-28\n * License: MIT\n */angular.module(\"ui.bootstrap\", [\"ui.bootstrap.tpls\", \"ui.bootstrap.collapse\",\"ui.bootstrap.tabindex\",\"ui.bootstrap.accordion\",\"ui.bootstrap.alert\",\"ui.bootstrap.buttons\",\"ui.bootstrap.carousel\",\"ui.bootstrap.dateparser\",\"ui.bootstrap.isClass\",\"ui.bootstrap.datepicker\",\"ui.bootstrap.position\",\"ui.bootstrap.datepickerPopup\",\"ui.bootstrap.debounce\",\"ui.bootstrap.multiMap\",\"ui.bootstrap.dropdown\",\"ui.bootstrap.stackedMap\",\"ui.bootstrap.modal\",\"ui.bootstrap.paging\",\"ui.bootstrap.pager\",\"ui.bootstrap.pagination\",\"ui.bootstrap.tooltip\",\"ui.bootstrap.popover\",\"ui.bootstrap.progressbar\",\"ui.bootstrap.rating\",\"ui.bootstrap.tabs\",\"ui.bootstrap.timepicker\",\"ui.bootstrap.typeahead\"]);\nangular.module(\"ui.bootstrap.tpls\", [\"uib/template/accordion/accordion-group.html\",\"uib/template/accordion/accordion.html\",\"uib/template/alert/alert.html\",\"uib/template/carousel/carousel.html\",\"uib/template/carousel/slide.html\",\"uib/template/datepicker/datepicker.html\",\"uib/template/datepicker/day.html\",\"uib/template/datepicker/month.html\",\"uib/template/datepicker/year.html\",\"uib/template/datepickerPopup/popup.html\",\"uib/template/modal/window.html\",\"uib/template/pager/pager.html\",\"uib/template/pagination/pagination.html\",\"uib/template/tooltip/tooltip-html-popup.html\",\"uib/template/tooltip/tooltip-popup.html\",\"uib/template/tooltip/tooltip-template-popup.html\",\"uib/template/popover/popover-html.html\",\"uib/template/popover/popover-template.html\",\"uib/template/popover/popover.html\",\"uib/template/progressbar/bar.html\",\"uib/template/progressbar/progress.html\",\"uib/template/progressbar/progressbar.html\",\"uib/template/rating/rating.html\",\"uib/template/tabs/tab.html\",\"uib/template/tabs/tabset.html\",\"uib/template/timepicker/timepicker.html\",\"uib/template/typeahead/typeahead-match.html\",\"uib/template/typeahead/typeahead-popup.html\"]);\nangular.module('ui.bootstrap.collapse', [])\n\n .directive('uibCollapse', ['$animate', '$q', '$parse', '$injector', function($animate, $q, $parse, $injector) {\n var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;\n return {\n link: function(scope, element, attrs) {\n var expandingExpr = $parse(attrs.expanding),\n expandedExpr = $parse(attrs.expanded),\n collapsingExpr = $parse(attrs.collapsing),\n collapsedExpr = $parse(attrs.collapsed),\n horizontal = false,\n css = {},\n cssTo = {};\n\n init();\n\n function init() {\n horizontal = !!('horizontal' in attrs);\n if (horizontal) {\n css = {\n width: ''\n };\n cssTo = {width: '0'};\n } else {\n css = {\n height: ''\n };\n cssTo = {height: '0'};\n }\n if (!scope.$eval(attrs.uibCollapse)) {\n element.addClass('in')\n .addClass('collapse')\n .attr('aria-expanded', true)\n .attr('aria-hidden', false)\n .css(css);\n }\n }\n\n function getScrollFromElement(element) {\n if (horizontal) {\n return {width: element.scrollWidth + 'px'};\n }\n return {height: element.scrollHeight + 'px'};\n }\n\n function expand() {\n if (element.hasClass('collapse') && element.hasClass('in')) {\n return;\n }\n\n $q.resolve(expandingExpr(scope))\n .then(function() {\n element.removeClass('collapse')\n .addClass('collapsing')\n .attr('aria-expanded', true)\n .attr('aria-hidden', false);\n\n if ($animateCss) {\n $animateCss(element, {\n addClass: 'in',\n easing: 'ease',\n css: {\n overflow: 'hidden'\n },\n to: getScrollFromElement(element[0])\n }).start()['finally'](expandDone);\n } else {\n $animate.addClass(element, 'in', {\n css: {\n overflow: 'hidden'\n },\n to: getScrollFromElement(element[0])\n }).then(expandDone);\n }\n }, angular.noop);\n }\n\n function expandDone() {\n element.removeClass('collapsing')\n .addClass('collapse')\n .css(css);\n expandedExpr(scope);\n }\n\n function collapse() {\n if (!element.hasClass('collapse') && !element.hasClass('in')) {\n return collapseDone();\n }\n\n $q.resolve(collapsingExpr(scope))\n .then(function() {\n element\n // IMPORTANT: The width must be set before adding \"collapsing\" class.\n // Otherwise, the browser attempts to animate from width 0 (in\n // collapsing class) to the given width here.\n .css(getScrollFromElement(element[0]))\n // initially all panel collapse have the collapse class, this removal\n // prevents the animation from jumping to collapsed state\n .removeClass('collapse')\n .addClass('collapsing')\n .attr('aria-expanded', false)\n .attr('aria-hidden', true);\n\n if ($animateCss) {\n $animateCss(element, {\n removeClass: 'in',\n to: cssTo\n }).start()['finally'](collapseDone);\n } else {\n $animate.removeClass(element, 'in', {\n to: cssTo\n }).then(collapseDone);\n }\n }, angular.noop);\n }\n\n function collapseDone() {\n element.css(cssTo); // Required so that collapse works when animation is disabled\n element.removeClass('collapsing')\n .addClass('collapse');\n collapsedExpr(scope);\n }\n\n scope.$watch(attrs.uibCollapse, function(shouldCollapse) {\n if (shouldCollapse) {\n collapse();\n } else {\n expand();\n }\n });\n }\n };\n }]);\n\nangular.module('ui.bootstrap.tabindex', [])\n\n.directive('uibTabindexToggle', function() {\n return {\n restrict: 'A',\n link: function(scope, elem, attrs) {\n attrs.$observe('disabled', function(disabled) {\n attrs.$set('tabindex', disabled ? -1 : null);\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse', 'ui.bootstrap.tabindex'])\n\n.constant('uibAccordionConfig', {\n closeOthers: true\n})\n\n.controller('UibAccordionController', ['$scope', '$attrs', 'uibAccordionConfig', function($scope, $attrs, accordionConfig) {\n // This array keeps track of the accordion groups\n this.groups = [];\n\n // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to\n this.closeOthers = function(openGroup) {\n var closeOthers = angular.isDefined($attrs.closeOthers) ?\n $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;\n if (closeOthers) {\n angular.forEach(this.groups, function(group) {\n if (group !== openGroup) {\n group.isOpen = false;\n }\n });\n }\n };\n\n // This is called from the accordion-group directive to add itself to the accordion\n this.addGroup = function(groupScope) {\n var that = this;\n this.groups.push(groupScope);\n\n groupScope.$on('$destroy', function(event) {\n that.removeGroup(groupScope);\n });\n };\n\n // This is called from the accordion-group directive when to remove itself\n this.removeGroup = function(group) {\n var index = this.groups.indexOf(group);\n if (index !== -1) {\n this.groups.splice(index, 1);\n }\n };\n}])\n\n// The accordion directive simply sets up the directive controller\n// and adds an accordion CSS class to itself element.\n.directive('uibAccordion', function() {\n return {\n controller: 'UibAccordionController',\n controllerAs: 'accordion',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/accordion/accordion.html';\n }\n };\n})\n\n// The accordion-group directive indicates a block of html that will expand and collapse in an accordion\n.directive('uibAccordionGroup', function() {\n return {\n require: '^uibAccordion', // We need this directive to be inside an accordion\n transclude: true, // It transcludes the contents of the directive into the template\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/accordion/accordion-group.html';\n },\n scope: {\n heading: '@', // Interpolate the heading attribute onto this scope\n panelClass: '@?', // Ditto with panelClass\n isOpen: '=?',\n isDisabled: '=?'\n },\n controller: function() {\n this.setHeading = function(element) {\n this.heading = element;\n };\n },\n link: function(scope, element, attrs, accordionCtrl) {\n element.addClass('panel');\n accordionCtrl.addGroup(scope);\n\n scope.openClass = attrs.openClass || 'panel-open';\n scope.panelClass = attrs.panelClass || 'panel-default';\n scope.$watch('isOpen', function(value) {\n element.toggleClass(scope.openClass, !!value);\n if (value) {\n accordionCtrl.closeOthers(scope);\n }\n });\n\n scope.toggleOpen = function($event) {\n if (!scope.isDisabled) {\n if (!$event || $event.which === 32) {\n scope.isOpen = !scope.isOpen;\n }\n }\n };\n\n var id = 'accordiongroup-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\n scope.headingId = id + '-tab';\n scope.panelId = id + '-panel';\n }\n };\n})\n\n// Use accordion-heading below an accordion-group to provide a heading containing HTML\n.directive('uibAccordionHeading', function() {\n return {\n transclude: true, // Grab the contents to be used as the heading\n template: '', // In effect remove this element!\n replace: true,\n require: '^uibAccordionGroup',\n link: function(scope, element, attrs, accordionGroupCtrl, transclude) {\n // Pass the heading to the accordion-group controller\n // so that it can be transcluded into the right place in the template\n // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]\n accordionGroupCtrl.setHeading(transclude(scope, angular.noop));\n }\n };\n})\n\n// Use in the accordion-group template to indicate where you want the heading to be transcluded\n// You must provide the property on the accordion-group controller that will hold the transcluded element\n.directive('uibAccordionTransclude', function() {\n return {\n require: '^uibAccordionGroup',\n link: function(scope, element, attrs, controller) {\n scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {\n if (heading) {\n var elem = angular.element(element[0].querySelector(getHeaderSelectors()));\n elem.html('');\n elem.append(heading);\n }\n });\n }\n };\n\n function getHeaderSelectors() {\n return 'uib-accordion-header,' +\n 'data-uib-accordion-header,' +\n 'x-uib-accordion-header,' +\n 'uib\\\\:accordion-header,' +\n '[uib-accordion-header],' +\n '[data-uib-accordion-header],' +\n '[x-uib-accordion-header]';\n }\n});\n\nangular.module('ui.bootstrap.alert', [])\n\n.controller('UibAlertController', ['$scope', '$element', '$attrs', '$interpolate', '$timeout', function($scope, $element, $attrs, $interpolate, $timeout) {\n $scope.closeable = !!$attrs.close;\n $element.addClass('alert');\n $attrs.$set('role', 'alert');\n if ($scope.closeable) {\n $element.addClass('alert-dismissible');\n }\n\n var dismissOnTimeout = angular.isDefined($attrs.dismissOnTimeout) ?\n $interpolate($attrs.dismissOnTimeout)($scope.$parent) : null;\n\n if (dismissOnTimeout) {\n $timeout(function() {\n $scope.close();\n }, parseInt(dismissOnTimeout, 10));\n }\n}])\n\n.directive('uibAlert', function() {\n return {\n controller: 'UibAlertController',\n controllerAs: 'alert',\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/alert/alert.html';\n },\n transclude: true,\n scope: {\n close: '&'\n }\n };\n});\n\nangular.module('ui.bootstrap.buttons', [])\n\n.constant('uibButtonConfig', {\n activeClass: 'active',\n toggleEvent: 'click'\n})\n\n.controller('UibButtonsController', ['uibButtonConfig', function(buttonConfig) {\n this.activeClass = buttonConfig.activeClass || 'active';\n this.toggleEvent = buttonConfig.toggleEvent || 'click';\n}])\n\n.directive('uibBtnRadio', ['$parse', function($parse) {\n return {\n require: ['uibBtnRadio', 'ngModel'],\n controller: 'UibButtonsController',\n controllerAs: 'buttons',\n link: function(scope, element, attrs, ctrls) {\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n var uncheckableExpr = $parse(attrs.uibUncheckable);\n\n element.find('input').css({display: 'none'});\n\n //model -> UI\n ngModelCtrl.$render = function() {\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio)));\n };\n\n //ui->model\n element.on(buttonsCtrl.toggleEvent, function() {\n if (attrs.disabled) {\n return;\n }\n\n var isActive = element.hasClass(buttonsCtrl.activeClass);\n\n if (!isActive || angular.isDefined(attrs.uncheckable)) {\n scope.$apply(function() {\n ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio));\n ngModelCtrl.$render();\n });\n }\n });\n\n if (attrs.uibUncheckable) {\n scope.$watch(uncheckableExpr, function(uncheckable) {\n attrs.$set('uncheckable', uncheckable ? '' : undefined);\n });\n }\n }\n };\n}])\n\n.directive('uibBtnCheckbox', function() {\n return {\n require: ['uibBtnCheckbox', 'ngModel'],\n controller: 'UibButtonsController',\n controllerAs: 'button',\n link: function(scope, element, attrs, ctrls) {\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n element.find('input').css({display: 'none'});\n\n function getTrueValue() {\n return getCheckboxValue(attrs.btnCheckboxTrue, true);\n }\n\n function getFalseValue() {\n return getCheckboxValue(attrs.btnCheckboxFalse, false);\n }\n\n function getCheckboxValue(attribute, defaultValue) {\n return angular.isDefined(attribute) ? scope.$eval(attribute) : defaultValue;\n }\n\n //model -> UI\n ngModelCtrl.$render = function() {\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));\n };\n\n //ui->model\n element.on(buttonsCtrl.toggleEvent, function() {\n if (attrs.disabled) {\n return;\n }\n\n scope.$apply(function() {\n ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());\n ngModelCtrl.$render();\n });\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.carousel', [])\n\n.controller('UibCarouselController', ['$scope', '$element', '$interval', '$timeout', '$animate', function($scope, $element, $interval, $timeout, $animate) {\n var self = this,\n slides = self.slides = $scope.slides = [],\n SLIDE_DIRECTION = 'uib-slideDirection',\n currentIndex = $scope.active,\n currentInterval, isPlaying;\n\n var destroyed = false;\n $element.addClass('carousel');\n\n self.addSlide = function(slide, element) {\n slides.push({\n slide: slide,\n element: element\n });\n slides.sort(function(a, b) {\n return +a.slide.index - +b.slide.index;\n });\n //if this is the first slide or the slide is set to active, select it\n if (slide.index === $scope.active || slides.length === 1 && !angular.isNumber($scope.active)) {\n if ($scope.$currentTransition) {\n $scope.$currentTransition = null;\n }\n\n currentIndex = slide.index;\n $scope.active = slide.index;\n setActive(currentIndex);\n self.select(slides[findSlideIndex(slide)]);\n if (slides.length === 1) {\n $scope.play();\n }\n }\n };\n\n self.getCurrentIndex = function() {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide.index === currentIndex) {\n return i;\n }\n }\n };\n\n self.next = $scope.next = function() {\n var newIndex = (self.getCurrentIndex() + 1) % slides.length;\n\n if (newIndex === 0 && $scope.noWrap()) {\n $scope.pause();\n return;\n }\n\n return self.select(slides[newIndex], 'next');\n };\n\n self.prev = $scope.prev = function() {\n var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;\n\n if ($scope.noWrap() && newIndex === slides.length - 1) {\n $scope.pause();\n return;\n }\n\n return self.select(slides[newIndex], 'prev');\n };\n\n self.removeSlide = function(slide) {\n var index = findSlideIndex(slide);\n\n //get the index of the slide inside the carousel\n slides.splice(index, 1);\n if (slides.length > 0 && currentIndex === index) {\n if (index >= slides.length) {\n currentIndex = slides.length - 1;\n $scope.active = currentIndex;\n setActive(currentIndex);\n self.select(slides[slides.length - 1]);\n } else {\n currentIndex = index;\n $scope.active = currentIndex;\n setActive(currentIndex);\n self.select(slides[index]);\n }\n } else if (currentIndex > index) {\n currentIndex--;\n $scope.active = currentIndex;\n }\n\n //clean the active value when no more slide\n if (slides.length === 0) {\n currentIndex = null;\n $scope.active = null;\n }\n };\n\n /* direction: \"prev\" or \"next\" */\n self.select = $scope.select = function(nextSlide, direction) {\n var nextIndex = findSlideIndex(nextSlide.slide);\n //Decide direction if it's not given\n if (direction === undefined) {\n direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';\n }\n //Prevent this user-triggered transition from occurring if there is already one in progress\n if (nextSlide.slide.index !== currentIndex &&\n !$scope.$currentTransition) {\n goNext(nextSlide.slide, nextIndex, direction);\n }\n };\n\n /* Allow outside people to call indexOf on slides array */\n $scope.indexOfSlide = function(slide) {\n return +slide.slide.index;\n };\n\n $scope.isActive = function(slide) {\n return $scope.active === slide.slide.index;\n };\n\n $scope.isPrevDisabled = function() {\n return $scope.active === 0 && $scope.noWrap();\n };\n\n $scope.isNextDisabled = function() {\n return $scope.active === slides.length - 1 && $scope.noWrap();\n };\n\n $scope.pause = function() {\n if (!$scope.noPause) {\n isPlaying = false;\n resetTimer();\n }\n };\n\n $scope.play = function() {\n if (!isPlaying) {\n isPlaying = true;\n restartTimer();\n }\n };\n\n $element.on('mouseenter', $scope.pause);\n $element.on('mouseleave', $scope.play);\n\n $scope.$on('$destroy', function() {\n destroyed = true;\n resetTimer();\n });\n\n $scope.$watch('noTransition', function(noTransition) {\n $animate.enabled($element, !noTransition);\n });\n\n $scope.$watch('interval', restartTimer);\n\n $scope.$watchCollection('slides', resetTransition);\n\n $scope.$watch('active', function(index) {\n if (angular.isNumber(index) && currentIndex !== index) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide.index === index) {\n index = i;\n break;\n }\n }\n\n var slide = slides[index];\n if (slide) {\n setActive(index);\n self.select(slides[index]);\n currentIndex = index;\n }\n }\n });\n\n function getSlideByIndex(index) {\n for (var i = 0, l = slides.length; i < l; ++i) {\n if (slides[i].index === index) {\n return slides[i];\n }\n }\n }\n\n function setActive(index) {\n for (var i = 0; i < slides.length; i++) {\n slides[i].slide.active = i === index;\n }\n }\n\n function goNext(slide, index, direction) {\n if (destroyed) {\n return;\n }\n\n angular.extend(slide, {direction: direction});\n angular.extend(slides[currentIndex].slide || {}, {direction: direction});\n if ($animate.enabled($element) && !$scope.$currentTransition &&\n slides[index].element && self.slides.length > 1) {\n slides[index].element.data(SLIDE_DIRECTION, slide.direction);\n var currentIdx = self.getCurrentIndex();\n\n if (angular.isNumber(currentIdx) && slides[currentIdx].element) {\n slides[currentIdx].element.data(SLIDE_DIRECTION, slide.direction);\n }\n\n $scope.$currentTransition = true;\n $animate.on('addClass', slides[index].element, function(element, phase) {\n if (phase === 'close') {\n $scope.$currentTransition = null;\n $animate.off('addClass', element);\n }\n });\n }\n\n $scope.active = slide.index;\n currentIndex = slide.index;\n setActive(index);\n\n //every time you change slides, reset the timer\n restartTimer();\n }\n\n function findSlideIndex(slide) {\n for (var i = 0; i < slides.length; i++) {\n if (slides[i].slide === slide) {\n return i;\n }\n }\n }\n\n function resetTimer() {\n if (currentInterval) {\n $interval.cancel(currentInterval);\n currentInterval = null;\n }\n }\n\n function resetTransition(slides) {\n if (!slides.length) {\n $scope.$currentTransition = null;\n }\n }\n\n function restartTimer() {\n resetTimer();\n var interval = +$scope.interval;\n if (!isNaN(interval) && interval > 0) {\n currentInterval = $interval(timerFn, interval);\n }\n }\n\n function timerFn() {\n var interval = +$scope.interval;\n if (isPlaying && !isNaN(interval) && interval > 0 && slides.length) {\n $scope.next();\n } else {\n $scope.pause();\n }\n }\n}])\n\n.directive('uibCarousel', function() {\n return {\n transclude: true,\n controller: 'UibCarouselController',\n controllerAs: 'carousel',\n restrict: 'A',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/carousel/carousel.html';\n },\n scope: {\n active: '=',\n interval: '=',\n noTransition: '=',\n noPause: '=',\n noWrap: '&'\n }\n };\n})\n\n.directive('uibSlide', ['$animate', function($animate) {\n return {\n require: '^uibCarousel',\n restrict: 'A',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/carousel/slide.html';\n },\n scope: {\n actual: '=?',\n index: '=?'\n },\n link: function (scope, element, attrs, carouselCtrl) {\n element.addClass('item');\n carouselCtrl.addSlide(scope, element);\n //when the scope is destroyed then remove the slide from the current slides array\n scope.$on('$destroy', function() {\n carouselCtrl.removeSlide(scope);\n });\n\n scope.$watch('active', function(active) {\n $animate[active ? 'addClass' : 'removeClass'](element, 'active');\n });\n }\n };\n}])\n\n.animation('.item', ['$animateCss',\nfunction($animateCss) {\n var SLIDE_DIRECTION = 'uib-slideDirection';\n\n function removeClass(element, className, callback) {\n element.removeClass(className);\n if (callback) {\n callback();\n }\n }\n\n return {\n beforeAddClass: function(element, className, done) {\n if (className === 'active') {\n var stopped = false;\n var direction = element.data(SLIDE_DIRECTION);\n var directionClass = direction === 'next' ? 'left' : 'right';\n var removeClassFn = removeClass.bind(this, element,\n directionClass + ' ' + direction, done);\n element.addClass(direction);\n\n $animateCss(element, {addClass: directionClass})\n .start()\n .done(removeClassFn);\n\n return function() {\n stopped = true;\n };\n }\n done();\n },\n beforeRemoveClass: function (element, className, done) {\n if (className === 'active') {\n var stopped = false;\n var direction = element.data(SLIDE_DIRECTION);\n var directionClass = direction === 'next' ? 'left' : 'right';\n var removeClassFn = removeClass.bind(this, element, directionClass, done);\n\n $animateCss(element, {addClass: directionClass})\n .start()\n .done(removeClassFn);\n\n return function() {\n stopped = true;\n };\n }\n done();\n }\n };\n}]);\n\nangular.module('ui.bootstrap.dateparser', [])\n\n.service('uibDateParser', ['$log', '$locale', 'dateFilter', 'orderByFilter', 'filterFilter', function($log, $locale, dateFilter, orderByFilter, filterFilter) {\n // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js\n var SPECIAL_CHARACTERS_REGEXP = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n var localeId;\n var formatCodeToRegex;\n\n this.init = function() {\n localeId = $locale.id;\n\n this.parsers = {};\n this.formatters = {};\n\n formatCodeToRegex = [\n {\n key: 'yyyy',\n regex: '\\\\d{4}',\n apply: function(value) { this.year = +value; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'yyyy');\n }\n },\n {\n key: 'yy',\n regex: '\\\\d{2}',\n apply: function(value) { value = +value; this.year = value < 69 ? value + 2000 : value + 1900; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'yy');\n }\n },\n {\n key: 'y',\n regex: '\\\\d{1,4}',\n apply: function(value) { this.year = +value; },\n formatter: function(date) {\n var _date = new Date();\n _date.setFullYear(Math.abs(date.getFullYear()));\n return dateFilter(_date, 'y');\n }\n },\n {\n key: 'M!',\n regex: '0?[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) {\n var value = date.getMonth();\n if (/^[0-9]$/.test(value)) {\n return dateFilter(date, 'MM');\n }\n\n return dateFilter(date, 'M');\n }\n },\n {\n key: 'MMMM',\n regex: $locale.DATETIME_FORMATS.MONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); },\n formatter: function(date) { return dateFilter(date, 'MMMM'); }\n },\n {\n key: 'MMM',\n regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); },\n formatter: function(date) { return dateFilter(date, 'MMM'); }\n },\n {\n key: 'MM',\n regex: '0[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) { return dateFilter(date, 'MM'); }\n },\n {\n key: 'M',\n regex: '[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; },\n formatter: function(date) { return dateFilter(date, 'M'); }\n },\n {\n key: 'd!',\n regex: '[0-2]?[0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) {\n var value = date.getDate();\n if (/^[1-9]$/.test(value)) {\n return dateFilter(date, 'dd');\n }\n\n return dateFilter(date, 'd');\n }\n },\n {\n key: 'dd',\n regex: '[0-2][0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) { return dateFilter(date, 'dd'); }\n },\n {\n key: 'd',\n regex: '[1-2]?[0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; },\n formatter: function(date) { return dateFilter(date, 'd'); }\n },\n {\n key: 'EEEE',\n regex: $locale.DATETIME_FORMATS.DAY.join('|'),\n formatter: function(date) { return dateFilter(date, 'EEEE'); }\n },\n {\n key: 'EEE',\n regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\n formatter: function(date) { return dateFilter(date, 'EEE'); }\n },\n {\n key: 'HH',\n regex: '(?:0|1)[0-9]|2[0-3]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'HH'); }\n },\n {\n key: 'hh',\n regex: '0[0-9]|1[0-2]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'hh'); }\n },\n {\n key: 'H',\n regex: '1?[0-9]|2[0-3]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'H'); }\n },\n {\n key: 'h',\n regex: '[0-9]|1[0-2]',\n apply: function(value) { this.hours = +value; },\n formatter: function(date) { return dateFilter(date, 'h'); }\n },\n {\n key: 'mm',\n regex: '[0-5][0-9]',\n apply: function(value) { this.minutes = +value; },\n formatter: function(date) { return dateFilter(date, 'mm'); }\n },\n {\n key: 'm',\n regex: '[0-9]|[1-5][0-9]',\n apply: function(value) { this.minutes = +value; },\n formatter: function(date) { return dateFilter(date, 'm'); }\n },\n {\n key: 'sss',\n regex: '[0-9][0-9][0-9]',\n apply: function(value) { this.milliseconds = +value; },\n formatter: function(date) { return dateFilter(date, 'sss'); }\n },\n {\n key: 'ss',\n regex: '[0-5][0-9]',\n apply: function(value) { this.seconds = +value; },\n formatter: function(date) { return dateFilter(date, 'ss'); }\n },\n {\n key: 's',\n regex: '[0-9]|[1-5][0-9]',\n apply: function(value) { this.seconds = +value; },\n formatter: function(date) { return dateFilter(date, 's'); }\n },\n {\n key: 'a',\n regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),\n apply: function(value) {\n if (this.hours === 12) {\n this.hours = 0;\n }\n\n if (value === 'PM') {\n this.hours += 12;\n }\n },\n formatter: function(date) { return dateFilter(date, 'a'); }\n },\n {\n key: 'Z',\n regex: '[+-]\\\\d{4}',\n apply: function(value) {\n var matches = value.match(/([+-])(\\d{2})(\\d{2})/),\n sign = matches[1],\n hours = matches[2],\n minutes = matches[3];\n this.hours += toInt(sign + hours);\n this.minutes += toInt(sign + minutes);\n },\n formatter: function(date) {\n return dateFilter(date, 'Z');\n }\n },\n {\n key: 'ww',\n regex: '[0-4][0-9]|5[0-3]',\n formatter: function(date) { return dateFilter(date, 'ww'); }\n },\n {\n key: 'w',\n regex: '[0-9]|[1-4][0-9]|5[0-3]',\n formatter: function(date) { return dateFilter(date, 'w'); }\n },\n {\n key: 'GGGG',\n regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\\s/g, '\\\\s'),\n formatter: function(date) { return dateFilter(date, 'GGGG'); }\n },\n {\n key: 'GGG',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'GGG'); }\n },\n {\n key: 'GG',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'GG'); }\n },\n {\n key: 'G',\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\n formatter: function(date) { return dateFilter(date, 'G'); }\n }\n ];\n\n if (angular.version.major >= 1 && angular.version.minor > 4) {\n formatCodeToRegex.push({\n key: 'LLLL',\n regex: $locale.DATETIME_FORMATS.STANDALONEMONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.STANDALONEMONTH.indexOf(value); },\n formatter: function(date) { return dateFilter(date, 'LLLL'); }\n });\n }\n };\n\n this.init();\n\n function getFormatCodeToRegex(key) {\n return filterFilter(formatCodeToRegex, {key: key}, true)[0];\n }\n\n this.getParser = function (key) {\n var f = getFormatCodeToRegex(key);\n return f && f.apply || null;\n };\n\n this.overrideParser = function (key, parser) {\n var f = getFormatCodeToRegex(key);\n if (f && angular.isFunction(parser)) {\n this.parsers = {};\n f.apply = parser;\n }\n }.bind(this);\n\n function createParser(format) {\n var map = [], regex = format.split('');\n\n // check for literal values\n var quoteIndex = format.indexOf('\\'');\n if (quoteIndex > -1) {\n var inLiteral = false;\n format = format.split('');\n for (var i = quoteIndex; i < format.length; i++) {\n if (inLiteral) {\n if (format[i] === '\\'') {\n if (i + 1 < format.length && format[i+1] === '\\'') { // escaped single quote\n format[i+1] = '$';\n regex[i+1] = '';\n } else { // end of literal\n regex[i] = '';\n inLiteral = false;\n }\n }\n format[i] = '$';\n } else {\n if (format[i] === '\\'') { // start of literal\n format[i] = '$';\n regex[i] = '';\n inLiteral = true;\n }\n }\n }\n\n format = format.join('');\n }\n\n angular.forEach(formatCodeToRegex, function(data) {\n var index = format.indexOf(data.key);\n\n if (index > -1) {\n format = format.split('');\n\n regex[index] = '(' + data.regex + ')';\n format[index] = '$'; // Custom symbol to define consumed part of format\n for (var i = index + 1, n = index + data.key.length; i < n; i++) {\n regex[i] = '';\n format[i] = '$';\n }\n format = format.join('');\n\n map.push({\n index: index,\n key: data.key,\n apply: data.apply,\n matcher: data.regex\n });\n }\n });\n\n return {\n regex: new RegExp('^' + regex.join('') + '$'),\n map: orderByFilter(map, 'index')\n };\n }\n\n function createFormatter(format) {\n var formatters = [];\n var i = 0;\n var formatter, literalIdx;\n while (i < format.length) {\n if (angular.isNumber(literalIdx)) {\n if (format.charAt(i) === '\\'') {\n if (i + 1 >= format.length || format.charAt(i + 1) !== '\\'') {\n formatters.push(constructLiteralFormatter(format, literalIdx, i));\n literalIdx = null;\n }\n } else if (i === format.length) {\n while (literalIdx < format.length) {\n formatter = constructFormatterFromIdx(format, literalIdx);\n formatters.push(formatter);\n literalIdx = formatter.endIdx;\n }\n }\n\n i++;\n continue;\n }\n\n if (format.charAt(i) === '\\'') {\n literalIdx = i;\n i++;\n continue;\n }\n\n formatter = constructFormatterFromIdx(format, i);\n\n formatters.push(formatter.parser);\n i = formatter.endIdx;\n }\n\n return formatters;\n }\n\n function constructLiteralFormatter(format, literalIdx, endIdx) {\n return function() {\n return format.substr(literalIdx + 1, endIdx - literalIdx - 1);\n };\n }\n\n function constructFormatterFromIdx(format, i) {\n var currentPosStr = format.substr(i);\n for (var j = 0; j < formatCodeToRegex.length; j++) {\n if (new RegExp('^' + formatCodeToRegex[j].key).test(currentPosStr)) {\n var data = formatCodeToRegex[j];\n return {\n endIdx: i + data.key.length,\n parser: data.formatter\n };\n }\n }\n\n return {\n endIdx: i + 1,\n parser: function() {\n return currentPosStr.charAt(0);\n }\n };\n }\n\n this.filter = function(date, format) {\n if (!angular.isDate(date) || isNaN(date) || !format) {\n return '';\n }\n\n format = $locale.DATETIME_FORMATS[format] || format;\n\n if ($locale.id !== localeId) {\n this.init();\n }\n\n if (!this.formatters[format]) {\n this.formatters[format] = createFormatter(format);\n }\n\n var formatters = this.formatters[format];\n\n return formatters.reduce(function(str, formatter) {\n return str + formatter(date);\n }, '');\n };\n\n this.parse = function(input, format, baseDate) {\n if (!angular.isString(input) || !format) {\n return input;\n }\n\n format = $locale.DATETIME_FORMATS[format] || format;\n format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\\\$&');\n\n if ($locale.id !== localeId) {\n this.init();\n }\n\n if (!this.parsers[format]) {\n this.parsers[format] = createParser(format, 'apply');\n }\n\n var parser = this.parsers[format],\n regex = parser.regex,\n map = parser.map,\n results = input.match(regex),\n tzOffset = false;\n if (results && results.length) {\n var fields, dt;\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {\n fields = {\n year: baseDate.getFullYear(),\n month: baseDate.getMonth(),\n date: baseDate.getDate(),\n hours: baseDate.getHours(),\n minutes: baseDate.getMinutes(),\n seconds: baseDate.getSeconds(),\n milliseconds: baseDate.getMilliseconds()\n };\n } else {\n if (baseDate) {\n $log.warn('dateparser:', 'baseDate is not a valid date');\n }\n fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };\n }\n\n for (var i = 1, n = results.length; i < n; i++) {\n var mapper = map[i - 1];\n if (mapper.matcher === 'Z') {\n tzOffset = true;\n }\n\n if (mapper.apply) {\n mapper.apply.call(fields, results[i]);\n }\n }\n\n var datesetter = tzOffset ? Date.prototype.setUTCFullYear :\n Date.prototype.setFullYear;\n var timesetter = tzOffset ? Date.prototype.setUTCHours :\n Date.prototype.setHours;\n\n if (isValid(fields.year, fields.month, fields.date)) {\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime()) && !tzOffset) {\n dt = new Date(baseDate);\n datesetter.call(dt, fields.year, fields.month, fields.date);\n timesetter.call(dt, fields.hours, fields.minutes,\n fields.seconds, fields.milliseconds);\n } else {\n dt = new Date(0);\n datesetter.call(dt, fields.year, fields.month, fields.date);\n timesetter.call(dt, fields.hours || 0, fields.minutes || 0,\n fields.seconds || 0, fields.milliseconds || 0);\n }\n }\n\n return dt;\n }\n };\n\n // Check if date is valid for specific month (and year for February).\n // Month: 0 = Jan, 1 = Feb, etc\n function isValid(year, month, date) {\n if (date < 1) {\n return false;\n }\n\n if (month === 1 && date > 28) {\n return date === 29 && (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);\n }\n\n if (month === 3 || month === 5 || month === 8 || month === 10) {\n return date < 31;\n }\n\n return true;\n }\n\n function toInt(str) {\n return parseInt(str, 10);\n }\n\n this.toTimezone = toTimezone;\n this.fromTimezone = fromTimezone;\n this.timezoneToOffset = timezoneToOffset;\n this.addDateMinutes = addDateMinutes;\n this.convertTimezoneToLocal = convertTimezoneToLocal;\n\n function toTimezone(date, timezone) {\n return date && timezone ? convertTimezoneToLocal(date, timezone) : date;\n }\n\n function fromTimezone(date, timezone) {\n return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;\n }\n\n //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207\n function timezoneToOffset(timezone, fallback) {\n timezone = timezone.replace(/:/g, '');\n var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n }\n\n function addDateMinutes(date, minutes) {\n date = new Date(date.getTime());\n date.setMinutes(date.getMinutes() + minutes);\n return date;\n }\n\n function convertTimezoneToLocal(date, timezone, reverse) {\n reverse = reverse ? -1 : 1;\n var dateTimezoneOffset = date.getTimezoneOffset();\n var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));\n }\n}]);\n\n// Avoiding use of ng-class as it creates a lot of watchers when a class is to be applied to\n// at most one element.\nangular.module('ui.bootstrap.isClass', [])\n.directive('uibIsClass', [\n '$animate',\nfunction ($animate) {\n // 11111111 22222222\n var ON_REGEXP = /^\\s*([\\s\\S]+?)\\s+on\\s+([\\s\\S]+?)\\s*$/;\n // 11111111 22222222\n var IS_REGEXP = /^\\s*([\\s\\S]+?)\\s+for\\s+([\\s\\S]+?)\\s*$/;\n\n var dataPerTracked = {};\n\n return {\n restrict: 'A',\n compile: function(tElement, tAttrs) {\n var linkedScopes = [];\n var instances = [];\n var expToData = {};\n var lastActivated = null;\n var onExpMatches = tAttrs.uibIsClass.match(ON_REGEXP);\n var onExp = onExpMatches[2];\n var expsStr = onExpMatches[1];\n var exps = expsStr.split(',');\n\n return linkFn;\n\n function linkFn(scope, element, attrs) {\n linkedScopes.push(scope);\n instances.push({\n scope: scope,\n element: element\n });\n\n exps.forEach(function(exp, k) {\n addForExp(exp, scope);\n });\n\n scope.$on('$destroy', removeScope);\n }\n\n function addForExp(exp, scope) {\n var matches = exp.match(IS_REGEXP);\n var clazz = scope.$eval(matches[1]);\n var compareWithExp = matches[2];\n var data = expToData[exp];\n if (!data) {\n var watchFn = function(compareWithVal) {\n var newActivated = null;\n instances.some(function(instance) {\n var thisVal = instance.scope.$eval(onExp);\n if (thisVal === compareWithVal) {\n newActivated = instance;\n return true;\n }\n });\n if (data.lastActivated !== newActivated) {\n if (data.lastActivated) {\n $animate.removeClass(data.lastActivated.element, clazz);\n }\n if (newActivated) {\n $animate.addClass(newActivated.element, clazz);\n }\n data.lastActivated = newActivated;\n }\n };\n expToData[exp] = data = {\n lastActivated: null,\n scope: scope,\n watchFn: watchFn,\n compareWithExp: compareWithExp,\n watcher: scope.$watch(compareWithExp, watchFn)\n };\n }\n data.watchFn(scope.$eval(compareWithExp));\n }\n\n function removeScope(e) {\n var removedScope = e.targetScope;\n var index = linkedScopes.indexOf(removedScope);\n linkedScopes.splice(index, 1);\n instances.splice(index, 1);\n if (linkedScopes.length) {\n var newWatchScope = linkedScopes[0];\n angular.forEach(expToData, function(data) {\n if (data.scope === removedScope) {\n data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);\n data.scope = newWatchScope;\n }\n });\n } else {\n expToData = {};\n }\n }\n }\n };\n}]);\nangular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass'])\n\n.value('$datepickerSuppressError', false)\n\n.value('$datepickerLiteralWarning', true)\n\n.constant('uibDatepickerConfig', {\n datepickerMode: 'day',\n formatDay: 'dd',\n formatMonth: 'MMMM',\n formatYear: 'yyyy',\n formatDayHeader: 'EEE',\n formatDayTitle: 'MMMM yyyy',\n formatMonthTitle: 'yyyy',\n maxDate: null,\n maxMode: 'year',\n minDate: null,\n minMode: 'day',\n monthColumns: 3,\n ngModelOptions: {},\n shortcutPropagation: false,\n showWeeks: true,\n yearColumns: 5,\n yearRows: 4\n})\n\n.controller('UibDatepickerController', ['$scope', '$element', '$attrs', '$parse', '$interpolate', '$locale', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerLiteralWarning', '$datepickerSuppressError', 'uibDateParser',\n function($scope, $element, $attrs, $parse, $interpolate, $locale, $log, dateFilter, datepickerConfig, $datepickerLiteralWarning, $datepickerSuppressError, dateParser) {\n var self = this,\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;\n ngModelOptions = {},\n watchListeners = [];\n\n $element.addClass('uib-datepicker');\n $attrs.$set('role', 'application');\n\n if (!$scope.datepickerOptions) {\n $scope.datepickerOptions = {};\n }\n\n // Modes chain\n this.modes = ['day', 'month', 'year'];\n\n [\n 'customClass',\n 'dateDisabled',\n 'datepickerMode',\n 'formatDay',\n 'formatDayHeader',\n 'formatDayTitle',\n 'formatMonth',\n 'formatMonthTitle',\n 'formatYear',\n 'maxDate',\n 'maxMode',\n 'minDate',\n 'minMode',\n 'monthColumns',\n 'showWeeks',\n 'shortcutPropagation',\n 'startingDay',\n 'yearColumns',\n 'yearRows'\n ].forEach(function(key) {\n switch (key) {\n case 'customClass':\n case 'dateDisabled':\n $scope[key] = $scope.datepickerOptions[key] || angular.noop;\n break;\n case 'datepickerMode':\n $scope.datepickerMode = angular.isDefined($scope.datepickerOptions.datepickerMode) ?\n $scope.datepickerOptions.datepickerMode : datepickerConfig.datepickerMode;\n break;\n case 'formatDay':\n case 'formatDayHeader':\n case 'formatDayTitle':\n case 'formatMonth':\n case 'formatMonthTitle':\n case 'formatYear':\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\n $interpolate($scope.datepickerOptions[key])($scope.$parent) :\n datepickerConfig[key];\n break;\n case 'monthColumns':\n case 'showWeeks':\n case 'shortcutPropagation':\n case 'yearColumns':\n case 'yearRows':\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\n $scope.datepickerOptions[key] : datepickerConfig[key];\n break;\n case 'startingDay':\n if (angular.isDefined($scope.datepickerOptions.startingDay)) {\n self.startingDay = $scope.datepickerOptions.startingDay;\n } else if (angular.isNumber(datepickerConfig.startingDay)) {\n self.startingDay = datepickerConfig.startingDay;\n } else {\n self.startingDay = ($locale.DATETIME_FORMATS.FIRSTDAYOFWEEK + 8) % 7;\n }\n\n break;\n case 'maxDate':\n case 'minDate':\n $scope.$watch('datepickerOptions.' + key, function(value) {\n if (value) {\n if (angular.isDate(value)) {\n self[key] = dateParser.fromTimezone(new Date(value), ngModelOptions.getOption('timezone'));\n } else {\n if ($datepickerLiteralWarning) {\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\n }\n\n self[key] = new Date(dateFilter(value, 'medium'));\n }\n } else {\n self[key] = datepickerConfig[key] ?\n dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.getOption('timezone')) :\n null;\n }\n\n self.refreshView();\n });\n\n break;\n case 'maxMode':\n case 'minMode':\n if ($scope.datepickerOptions[key]) {\n $scope.$watch(function() { return $scope.datepickerOptions[key]; }, function(value) {\n self[key] = $scope[key] = angular.isDefined(value) ? value : $scope.datepickerOptions[key];\n if (key === 'minMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) < self.modes.indexOf(self[key]) ||\n key === 'maxMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) > self.modes.indexOf(self[key])) {\n $scope.datepickerMode = self[key];\n $scope.datepickerOptions.datepickerMode = self[key];\n }\n });\n } else {\n self[key] = $scope[key] = datepickerConfig[key] || null;\n }\n\n break;\n }\n });\n\n $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);\n\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\n if (angular.isDefined($attrs.ngDisabled)) {\n watchListeners.push($scope.$parent.$watch($attrs.ngDisabled, function(disabled) {\n $scope.disabled = disabled;\n self.refreshView();\n }));\n }\n\n $scope.isActive = function(dateObject) {\n if (self.compare(dateObject.date, self.activeDate) === 0) {\n $scope.activeDateId = dateObject.uid;\n return true;\n }\n return false;\n };\n\n this.init = function(ngModelCtrl_) {\n ngModelCtrl = ngModelCtrl_;\n ngModelOptions = extractOptions(ngModelCtrl);\n\n if ($scope.datepickerOptions.initDate) {\n self.activeDate = dateParser.fromTimezone($scope.datepickerOptions.initDate, ngModelOptions.getOption('timezone')) || new Date();\n $scope.$watch('datepickerOptions.initDate', function(initDate) {\n if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {\n self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.getOption('timezone'));\n self.refreshView();\n }\n });\n } else {\n self.activeDate = new Date();\n }\n\n var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : new Date();\n this.activeDate = !isNaN(date) ?\n dateParser.fromTimezone(date, ngModelOptions.getOption('timezone')) :\n dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));\n\n ngModelCtrl.$render = function() {\n self.render();\n };\n };\n\n this.render = function() {\n if (ngModelCtrl.$viewValue) {\n var date = new Date(ngModelCtrl.$viewValue),\n isValid = !isNaN(date);\n\n if (isValid) {\n this.activeDate = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));\n } else if (!$datepickerSuppressError) {\n $log.error('Datepicker directive: \"ng-model\" value must be a Date object');\n }\n }\n this.refreshView();\n };\n\n this.refreshView = function() {\n if (this.element) {\n $scope.selectedDt = null;\n this._refreshView();\n if ($scope.activeDt) {\n $scope.activeDateId = $scope.activeDt.uid;\n }\n\n var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\n date = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));\n ngModelCtrl.$setValidity('dateDisabled', !date ||\n this.element && !this.isDisabled(date));\n }\n };\n\n this.createDateObject = function(date, format) {\n var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\n model = dateParser.fromTimezone(model, ngModelOptions.getOption('timezone'));\n var today = new Date();\n today = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));\n var time = this.compare(date, today);\n var dt = {\n date: date,\n label: dateParser.filter(date, format),\n selected: model && this.compare(date, model) === 0,\n disabled: this.isDisabled(date),\n past: time < 0,\n current: time === 0,\n future: time > 0,\n customClass: this.customClass(date) || null\n };\n\n if (model && this.compare(date, model) === 0) {\n $scope.selectedDt = dt;\n }\n\n if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {\n $scope.activeDt = dt;\n }\n\n return dt;\n };\n\n this.isDisabled = function(date) {\n return $scope.disabled ||\n this.minDate && this.compare(date, this.minDate) < 0 ||\n this.maxDate && this.compare(date, this.maxDate) > 0 ||\n $scope.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode});\n };\n\n this.customClass = function(date) {\n return $scope.customClass({date: date, mode: $scope.datepickerMode});\n };\n\n // Split array into smaller arrays\n this.split = function(arr, size) {\n var arrays = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n return arrays;\n };\n\n $scope.select = function(date) {\n if ($scope.datepickerMode === self.minMode) {\n var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.getOption('timezone')) : new Date(0, 0, 0, 0, 0, 0, 0);\n dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n dt = dateParser.toTimezone(dt, ngModelOptions.getOption('timezone'));\n ngModelCtrl.$setViewValue(dt);\n ngModelCtrl.$render();\n } else {\n self.activeDate = date;\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]);\n\n $scope.$emit('uib:datepicker.mode');\n }\n\n $scope.$broadcast('uib:datepicker.focus');\n };\n\n $scope.move = function(direction) {\n var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),\n month = self.activeDate.getMonth() + direction * (self.step.months || 0);\n self.activeDate.setFullYear(year, month, 1);\n self.refreshView();\n };\n\n $scope.toggleMode = function(direction) {\n direction = direction || 1;\n\n if ($scope.datepickerMode === self.maxMode && direction === 1 ||\n $scope.datepickerMode === self.minMode && direction === -1) {\n return;\n }\n\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) + direction]);\n\n $scope.$emit('uib:datepicker.mode');\n };\n\n // Key event mapper\n $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };\n\n var focusElement = function() {\n self.element[0].focus();\n };\n\n // Listen for focus requests from popup directive\n $scope.$on('uib:datepicker.focus', focusElement);\n\n $scope.keydown = function(evt) {\n var key = $scope.keys[evt.which];\n\n if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {\n return;\n }\n\n evt.preventDefault();\n if (!self.shortcutPropagation) {\n evt.stopPropagation();\n }\n\n if (key === 'enter' || key === 'space') {\n if (self.isDisabled(self.activeDate)) {\n return; // do nothing\n }\n $scope.select(self.activeDate);\n } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {\n $scope.toggleMode(key === 'up' ? 1 : -1);\n } else {\n self.handleKeyDown(key, evt);\n self.refreshView();\n }\n };\n\n $element.on('keydown', function(evt) {\n $scope.$apply(function() {\n $scope.keydown(evt);\n });\n });\n\n $scope.$on('$destroy', function() {\n //Clear all watch listeners on destroy\n while (watchListeners.length) {\n watchListeners.shift()();\n }\n });\n\n function setMode(mode) {\n $scope.datepickerMode = mode;\n $scope.datepickerOptions.datepickerMode = mode;\n }\n\n function extractOptions(ngModelCtrl) {\n var ngModelOptions;\n\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\n // guarantee a value\n ngModelOptions = ngModelCtrl.$options ||\n $scope.datepickerOptions.ngModelOptions ||\n datepickerConfig.ngModelOptions ||\n {};\n\n // mimic 1.6+ api\n ngModelOptions.getOption = function (key) {\n return ngModelOptions[key];\n };\n } else { // in angular >=1.6 $options is always present\n // ng-model-options defaults timezone to null; don't let its precedence squash a non-null value\n var timezone = ngModelCtrl.$options.getOption('timezone') ||\n ($scope.datepickerOptions.ngModelOptions ? $scope.datepickerOptions.ngModelOptions.timezone : null) ||\n (datepickerConfig.ngModelOptions ? datepickerConfig.ngModelOptions.timezone : null);\n\n // values passed to createChild override existing values\n ngModelOptions = ngModelCtrl.$options // start with a ModelOptions instance\n .createChild(datepickerConfig.ngModelOptions) // lowest precedence\n .createChild($scope.datepickerOptions.ngModelOptions)\n .createChild(ngModelCtrl.$options) // highest precedence\n .createChild({timezone: timezone}); // to keep from squashing a non-null value\n }\n\n return ngModelOptions;\n }\n}])\n\n.controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n this.step = { months: 1 };\n this.element = $element;\n function getDaysInMonth(year, month) {\n return month === 1 && year % 4 === 0 &&\n (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];\n }\n\n this.init = function(ctrl) {\n angular.extend(ctrl, this);\n scope.showWeeks = ctrl.showWeeks;\n ctrl.refreshView();\n };\n\n this.getDates = function(startDate, n) {\n var dates = new Array(n), current = new Date(startDate), i = 0, date;\n while (i < n) {\n date = new Date(current);\n dates[i++] = date;\n current.setDate(current.getDate() + 1);\n }\n return dates;\n };\n\n this._refreshView = function() {\n var year = this.activeDate.getFullYear(),\n month = this.activeDate.getMonth(),\n firstDayOfMonth = new Date(this.activeDate);\n\n firstDayOfMonth.setFullYear(year, month, 1);\n\n var difference = this.startingDay - firstDayOfMonth.getDay(),\n numDisplayedFromPreviousMonth = difference > 0 ?\n 7 - difference : - difference,\n firstDate = new Date(firstDayOfMonth);\n\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n // 42 is the number of days on a six-week calendar\n var days = this.getDates(firstDate, 42);\n for (var i = 0; i < 42; i ++) {\n days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {\n secondary: days[i].getMonth() !== month,\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.labels = new Array(7);\n for (var j = 0; j < 7; j++) {\n scope.labels[j] = {\n abbr: dateFilter(days[j].date, this.formatDayHeader),\n full: dateFilter(days[j].date, 'EEEE')\n };\n }\n\n scope.title = dateFilter(this.activeDate, this.formatDayTitle);\n scope.rows = this.split(days, 7);\n\n if (scope.showWeeks) {\n scope.weekNumbers = [];\n var thursdayIndex = (4 + 7 - this.startingDay) % 7,\n numWeeks = scope.rows.length;\n for (var curWeek = 0; curWeek < numWeeks; curWeek++) {\n scope.weekNumbers.push(\n getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));\n }\n }\n };\n\n this.compare = function(date1, date2) {\n var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n _date1.setFullYear(date1.getFullYear());\n _date2.setFullYear(date2.getFullYear());\n return _date1 - _date2;\n };\n\n function getISO8601WeekNumber(date) {\n var checkDate = new Date(date);\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday\n var time = checkDate.getTime();\n checkDate.setMonth(0); // Compare with Jan 1\n checkDate.setDate(1);\n return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n }\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getDate();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - 7;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + 7;\n } else if (key === 'pageup' || key === 'pagedown') {\n var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);\n this.activeDate.setMonth(month, 1);\n date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);\n } else if (key === 'home') {\n date = 1;\n } else if (key === 'end') {\n date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());\n }\n this.activeDate.setDate(date);\n };\n}])\n\n.controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n this.step = { years: 1 };\n this.element = $element;\n\n this.init = function(ctrl) {\n angular.extend(ctrl, this);\n ctrl.refreshView();\n };\n\n this._refreshView = function() {\n var months = new Array(12),\n year = this.activeDate.getFullYear(),\n date;\n\n for (var i = 0; i < 12; i++) {\n date = new Date(this.activeDate);\n date.setFullYear(year, i, 1);\n months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = dateFilter(this.activeDate, this.formatMonthTitle);\n scope.rows = this.split(months, this.monthColumns);\n scope.yearHeaderColspan = this.monthColumns > 3 ? this.monthColumns - 2 : 1;\n };\n\n this.compare = function(date1, date2) {\n var _date1 = new Date(date1.getFullYear(), date1.getMonth());\n var _date2 = new Date(date2.getFullYear(), date2.getMonth());\n _date1.setFullYear(date1.getFullYear());\n _date2.setFullYear(date2.getFullYear());\n return _date1 - _date2;\n };\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getMonth();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - this.monthColumns;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + this.monthColumns;\n } else if (key === 'pageup' || key === 'pagedown') {\n var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);\n this.activeDate.setFullYear(year);\n } else if (key === 'home') {\n date = 0;\n } else if (key === 'end') {\n date = 11;\n }\n this.activeDate.setMonth(date);\n };\n}])\n\n.controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\n var columns, range;\n this.element = $element;\n\n function getStartingYear(year) {\n return parseInt((year - 1) / range, 10) * range + 1;\n }\n\n this.yearpickerInit = function() {\n columns = this.yearColumns;\n range = this.yearRows * columns;\n this.step = { years: range };\n };\n\n this._refreshView = function() {\n var years = new Array(range), date;\n\n for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {\n date = new Date(this.activeDate);\n date.setFullYear(start + i, 0, 1);\n years[i] = angular.extend(this.createDateObject(date, this.formatYear), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = [years[0].label, years[range - 1].label].join(' - ');\n scope.rows = this.split(years, columns);\n scope.columns = columns;\n };\n\n this.compare = function(date1, date2) {\n return date1.getFullYear() - date2.getFullYear();\n };\n\n this.handleKeyDown = function(key, evt) {\n var date = this.activeDate.getFullYear();\n\n if (key === 'left') {\n date = date - 1;\n } else if (key === 'up') {\n date = date - columns;\n } else if (key === 'right') {\n date = date + 1;\n } else if (key === 'down') {\n date = date + columns;\n } else if (key === 'pageup' || key === 'pagedown') {\n date += (key === 'pageup' ? - 1 : 1) * range;\n } else if (key === 'home') {\n date = getStartingYear(this.activeDate.getFullYear());\n } else if (key === 'end') {\n date = getStartingYear(this.activeDate.getFullYear()) + range - 1;\n }\n this.activeDate.setFullYear(date);\n };\n}])\n\n.directive('uibDatepicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';\n },\n scope: {\n datepickerOptions: '=?'\n },\n require: ['uibDatepicker', '^ngModel'],\n restrict: 'A',\n controller: 'UibDatepickerController',\n controllerAs: 'datepicker',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n datepickerCtrl.init(ngModelCtrl);\n }\n };\n})\n\n.directive('uibDaypicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/day.html';\n },\n require: ['^uibDatepicker', 'uibDaypicker'],\n restrict: 'A',\n controller: 'UibDaypickerController',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0],\n daypickerCtrl = ctrls[1];\n\n daypickerCtrl.init(datepickerCtrl);\n }\n };\n})\n\n.directive('uibMonthpicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/month.html';\n },\n require: ['^uibDatepicker', 'uibMonthpicker'],\n restrict: 'A',\n controller: 'UibMonthpickerController',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0],\n monthpickerCtrl = ctrls[1];\n\n monthpickerCtrl.init(datepickerCtrl);\n }\n };\n})\n\n.directive('uibYearpicker', function() {\n return {\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepicker/year.html';\n },\n require: ['^uibDatepicker', 'uibYearpicker'],\n restrict: 'A',\n controller: 'UibYearpickerController',\n link: function(scope, element, attrs, ctrls) {\n var ctrl = ctrls[0];\n angular.extend(ctrl, ctrls[1]);\n ctrl.yearpickerInit();\n\n ctrl.refreshView();\n }\n };\n});\n\nangular.module('ui.bootstrap.position', [])\n\n/**\n * A set of utility methods for working with the DOM.\n * It is meant to be used where we need to absolute-position elements in\n * relation to another element (this is the case for tooltips, popovers,\n * typeahead suggestions etc.).\n */\n .factory('$uibPosition', ['$document', '$window', function($document, $window) {\n /**\n * Used by scrollbarWidth() function to cache scrollbar's width.\n * Do not access this variable directly, use scrollbarWidth() instead.\n */\n var SCROLLBAR_WIDTH;\n /**\n * scrollbar on body and html element in IE and Edge overlay\n * content and should be considered 0 width.\n */\n var BODY_SCROLLBAR_WIDTH;\n var OVERFLOW_REGEX = {\n normal: /(auto|scroll)/,\n hidden: /(auto|scroll|hidden)/\n };\n var PLACEMENT_REGEX = {\n auto: /\\s?auto?\\s?/i,\n primary: /^(top|bottom|left|right)$/,\n secondary: /^(top|bottom|left|right|center)$/,\n vertical: /^(top|bottom)$/\n };\n var BODY_REGEX = /(HTML|BODY)/;\n\n return {\n\n /**\n * Provides a raw DOM element from a jQuery/jQLite element.\n *\n * @param {element} elem - The element to convert.\n *\n * @returns {element} A HTML element.\n */\n getRawNode: function(elem) {\n return elem.nodeName ? elem : elem[0] || elem;\n },\n\n /**\n * Provides a parsed number for a style property. Strips\n * units and casts invalid numbers to 0.\n *\n * @param {string} value - The style value to parse.\n *\n * @returns {number} A valid number.\n */\n parseStyle: function(value) {\n value = parseFloat(value);\n return isFinite(value) ? value : 0;\n },\n\n /**\n * Provides the closest positioned ancestor.\n *\n * @param {element} element - The element to get the offest parent for.\n *\n * @returns {element} The closest positioned ancestor.\n */\n offsetParent: function(elem) {\n elem = this.getRawNode(elem);\n\n var offsetParent = elem.offsetParent || $document[0].documentElement;\n\n function isStaticPositioned(el) {\n return ($window.getComputedStyle(el).position || 'static') === 'static';\n }\n\n while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || $document[0].documentElement;\n },\n\n /**\n * Provides the scrollbar width, concept from TWBS measureScrollbar()\n * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js\n * In IE and Edge, scollbar on body and html element overlay and should\n * return a width of 0.\n *\n * @returns {number} The width of the browser scollbar.\n */\n scrollbarWidth: function(isBody) {\n if (isBody) {\n if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {\n var bodyElem = $document.find('body');\n bodyElem.addClass('uib-position-body-scrollbar-measure');\n BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;\n BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;\n bodyElem.removeClass('uib-position-body-scrollbar-measure');\n }\n return BODY_SCROLLBAR_WIDTH;\n }\n\n if (angular.isUndefined(SCROLLBAR_WIDTH)) {\n var scrollElem = angular.element('
');\n $document.find('body').append(scrollElem);\n SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;\n SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;\n scrollElem.remove();\n }\n\n return SCROLLBAR_WIDTH;\n },\n\n /**\n * Provides the padding required on an element to replace the scrollbar.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **scrollbarWidth**: the width of the scrollbar
  • \n *
  • **widthOverflow**: whether the the width is overflowing
  • \n *
  • **right**: the amount of right padding on the element needed to replace the scrollbar
  • \n *
  • **rightOriginal**: the amount of right padding currently on the element
  • \n *
  • **heightOverflow**: whether the the height is overflowing
  • \n *
  • **bottom**: the amount of bottom padding on the element needed to replace the scrollbar
  • \n *
  • **bottomOriginal**: the amount of bottom padding currently on the element
  • \n *
\n */\n scrollbarPadding: function(elem) {\n elem = this.getRawNode(elem);\n\n var elemStyle = $window.getComputedStyle(elem);\n var paddingRight = this.parseStyle(elemStyle.paddingRight);\n var paddingBottom = this.parseStyle(elemStyle.paddingBottom);\n var scrollParent = this.scrollParent(elem, false, true);\n var scrollbarWidth = this.scrollbarWidth(BODY_REGEX.test(scrollParent.tagName));\n\n return {\n scrollbarWidth: scrollbarWidth,\n widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,\n right: paddingRight + scrollbarWidth,\n originalRight: paddingRight,\n heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,\n bottom: paddingBottom + scrollbarWidth,\n originalBottom: paddingBottom\n };\n },\n\n /**\n * Checks to see if the element is scrollable.\n *\n * @param {element} elem - The element to check.\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\n * default is false.\n *\n * @returns {boolean} Whether the element is scrollable.\n */\n isScrollable: function(elem, includeHidden) {\n elem = this.getRawNode(elem);\n\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\n var elemStyle = $window.getComputedStyle(elem);\n return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);\n },\n\n /**\n * Provides the closest scrollable ancestor.\n * A port of the jQuery UI scrollParent method:\n * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js\n *\n * @param {element} elem - The element to find the scroll parent of.\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\n * default is false.\n * @param {boolean=} [includeSelf=false] - Should the element being passed be\n * included in the scrollable llokup.\n *\n * @returns {element} A HTML element.\n */\n scrollParent: function(elem, includeHidden, includeSelf) {\n elem = this.getRawNode(elem);\n\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\n var documentEl = $document[0].documentElement;\n var elemStyle = $window.getComputedStyle(elem);\n if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {\n return elem;\n }\n var excludeStatic = elemStyle.position === 'absolute';\n var scrollParent = elem.parentElement || documentEl;\n\n if (scrollParent === documentEl || elemStyle.position === 'fixed') {\n return documentEl;\n }\n\n while (scrollParent.parentElement && scrollParent !== documentEl) {\n var spStyle = $window.getComputedStyle(scrollParent);\n if (excludeStatic && spStyle.position !== 'static') {\n excludeStatic = false;\n }\n\n if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {\n break;\n }\n scrollParent = scrollParent.parentElement;\n }\n\n return scrollParent;\n },\n\n /**\n * Provides read-only equivalent of jQuery's position function:\n * http://api.jquery.com/position/ - distance to closest positioned\n * ancestor. Does not account for margins by default like jQuery position.\n *\n * @param {element} elem - The element to caclulate the position on.\n * @param {boolean=} [includeMargins=false] - Should margins be accounted\n * for, default is false.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **width**: the width of the element
  • \n *
  • **height**: the height of the element
  • \n *
  • **top**: distance to top edge of offset parent
  • \n *
  • **left**: distance to left edge of offset parent
  • \n *
\n */\n position: function(elem, includeMagins) {\n elem = this.getRawNode(elem);\n\n var elemOffset = this.offset(elem);\n if (includeMagins) {\n var elemStyle = $window.getComputedStyle(elem);\n elemOffset.top -= this.parseStyle(elemStyle.marginTop);\n elemOffset.left -= this.parseStyle(elemStyle.marginLeft);\n }\n var parent = this.offsetParent(elem);\n var parentOffset = {top: 0, left: 0};\n\n if (parent !== $document[0].documentElement) {\n parentOffset = this.offset(parent);\n parentOffset.top += parent.clientTop - parent.scrollTop;\n parentOffset.left += parent.clientLeft - parent.scrollLeft;\n }\n\n return {\n width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),\n height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),\n top: Math.round(elemOffset.top - parentOffset.top),\n left: Math.round(elemOffset.left - parentOffset.left)\n };\n },\n\n /**\n * Provides read-only equivalent of jQuery's offset function:\n * http://api.jquery.com/offset/ - distance to viewport. Does\n * not account for borders, margins, or padding on the body\n * element.\n *\n * @param {element} elem - The element to calculate the offset on.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **width**: the width of the element
  • \n *
  • **height**: the height of the element
  • \n *
  • **top**: distance to top edge of viewport
  • \n *
  • **right**: distance to bottom edge of viewport
  • \n *
\n */\n offset: function(elem) {\n elem = this.getRawNode(elem);\n\n var elemBCR = elem.getBoundingClientRect();\n return {\n width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),\n height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),\n top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),\n left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))\n };\n },\n\n /**\n * Provides offset distance to the closest scrollable ancestor\n * or viewport. Accounts for border and scrollbar width.\n *\n * Right and bottom dimensions represent the distance to the\n * respective edge of the viewport element. If the element\n * edge extends beyond the viewport, a negative value will be\n * reported.\n *\n * @param {element} elem - The element to get the viewport offset for.\n * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead\n * of the first scrollable element, default is false.\n * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element\n * be accounted for, default is true.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **top**: distance to the top content edge of viewport element
  • \n *
  • **bottom**: distance to the bottom content edge of viewport element
  • \n *
  • **left**: distance to the left content edge of viewport element
  • \n *
  • **right**: distance to the right content edge of viewport element
  • \n *
\n */\n viewportOffset: function(elem, useDocument, includePadding) {\n elem = this.getRawNode(elem);\n includePadding = includePadding !== false ? true : false;\n\n var elemBCR = elem.getBoundingClientRect();\n var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};\n\n var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);\n var offsetParentBCR = offsetParent.getBoundingClientRect();\n\n offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;\n offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;\n if (offsetParent === $document[0].documentElement) {\n offsetBCR.top += $window.pageYOffset;\n offsetBCR.left += $window.pageXOffset;\n }\n offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;\n offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;\n\n if (includePadding) {\n var offsetParentStyle = $window.getComputedStyle(offsetParent);\n offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);\n offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);\n offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);\n offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);\n }\n\n return {\n top: Math.round(elemBCR.top - offsetBCR.top),\n bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),\n left: Math.round(elemBCR.left - offsetBCR.left),\n right: Math.round(offsetBCR.right - elemBCR.right)\n };\n },\n\n /**\n * Provides an array of placement values parsed from a placement string.\n * Along with the 'auto' indicator, supported placement strings are:\n *
    \n *
  • top: element on top, horizontally centered on host element.
  • \n *
  • top-left: element on top, left edge aligned with host element left edge.
  • \n *
  • top-right: element on top, lerightft edge aligned with host element right edge.
  • \n *
  • bottom: element on bottom, horizontally centered on host element.
  • \n *
  • bottom-left: element on bottom, left edge aligned with host element left edge.
  • \n *
  • bottom-right: element on bottom, right edge aligned with host element right edge.
  • \n *
  • left: element on left, vertically centered on host element.
  • \n *
  • left-top: element on left, top edge aligned with host element top edge.
  • \n *
  • left-bottom: element on left, bottom edge aligned with host element bottom edge.
  • \n *
  • right: element on right, vertically centered on host element.
  • \n *
  • right-top: element on right, top edge aligned with host element top edge.
  • \n *
  • right-bottom: element on right, bottom edge aligned with host element bottom edge.
  • \n *
\n * A placement string with an 'auto' indicator is expected to be\n * space separated from the placement, i.e: 'auto bottom-left' If\n * the primary and secondary placement values do not match 'top,\n * bottom, left, right' then 'top' will be the primary placement and\n * 'center' will be the secondary placement. If 'auto' is passed, true\n * will be returned as the 3rd value of the array.\n *\n * @param {string} placement - The placement string to parse.\n *\n * @returns {array} An array with the following values\n *
    \n *
  • **[0]**: The primary placement.
  • \n *
  • **[1]**: The secondary placement.
  • \n *
  • **[2]**: If auto is passed: true, else undefined.
  • \n *
\n */\n parsePlacement: function(placement) {\n var autoPlace = PLACEMENT_REGEX.auto.test(placement);\n if (autoPlace) {\n placement = placement.replace(PLACEMENT_REGEX.auto, '');\n }\n\n placement = placement.split('-');\n\n placement[0] = placement[0] || 'top';\n if (!PLACEMENT_REGEX.primary.test(placement[0])) {\n placement[0] = 'top';\n }\n\n placement[1] = placement[1] || 'center';\n if (!PLACEMENT_REGEX.secondary.test(placement[1])) {\n placement[1] = 'center';\n }\n\n if (autoPlace) {\n placement[2] = true;\n } else {\n placement[2] = false;\n }\n\n return placement;\n },\n\n /**\n * Provides coordinates for an element to be positioned relative to\n * another element. Passing 'auto' as part of the placement parameter\n * will enable smart placement - where the element fits. i.e:\n * 'auto left-top' will check to see if there is enough space to the left\n * of the hostElem to fit the targetElem, if not place right (same for secondary\n * top placement). Available space is calculated using the viewportOffset\n * function.\n *\n * @param {element} hostElem - The element to position against.\n * @param {element} targetElem - The element to position.\n * @param {string=} [placement=top] - The placement for the targetElem,\n * default is 'top'. 'center' is assumed as secondary placement for\n * 'top', 'left', 'right', and 'bottom' placements. Available placements are:\n *
    \n *
  • top
  • \n *
  • top-right
  • \n *
  • top-left
  • \n *
  • bottom
  • \n *
  • bottom-left
  • \n *
  • bottom-right
  • \n *
  • left
  • \n *
  • left-top
  • \n *
  • left-bottom
  • \n *
  • right
  • \n *
  • right-top
  • \n *
  • right-bottom
  • \n *
\n * @param {boolean=} [appendToBody=false] - Should the top and left values returned\n * be calculated from the body element, default is false.\n *\n * @returns {object} An object with the following properties:\n *
    \n *
  • **top**: Value for targetElem top.
  • \n *
  • **left**: Value for targetElem left.
  • \n *
  • **placement**: The resolved placement.
  • \n *
\n */\n positionElements: function(hostElem, targetElem, placement, appendToBody) {\n hostElem = this.getRawNode(hostElem);\n targetElem = this.getRawNode(targetElem);\n\n // need to read from prop to support tests.\n var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');\n var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');\n\n placement = this.parsePlacement(placement);\n\n var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);\n var targetElemPos = {top: 0, left: 0, placement: ''};\n\n if (placement[2]) {\n var viewportOffset = this.viewportOffset(hostElem, appendToBody);\n\n var targetElemStyle = $window.getComputedStyle(targetElem);\n var adjustedSize = {\n width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),\n height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))\n };\n\n placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :\n placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :\n placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :\n placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :\n placement[0];\n\n placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :\n placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :\n placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :\n placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :\n placement[1];\n\n if (placement[1] === 'center') {\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n var xOverflow = hostElemPos.width / 2 - targetWidth / 2;\n if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {\n placement[1] = 'left';\n } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {\n placement[1] = 'right';\n }\n } else {\n var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;\n if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {\n placement[1] = 'top';\n } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {\n placement[1] = 'bottom';\n }\n }\n }\n }\n\n switch (placement[0]) {\n case 'top':\n targetElemPos.top = hostElemPos.top - targetHeight;\n break;\n case 'bottom':\n targetElemPos.top = hostElemPos.top + hostElemPos.height;\n break;\n case 'left':\n targetElemPos.left = hostElemPos.left - targetWidth;\n break;\n case 'right':\n targetElemPos.left = hostElemPos.left + hostElemPos.width;\n break;\n }\n\n switch (placement[1]) {\n case 'top':\n targetElemPos.top = hostElemPos.top;\n break;\n case 'bottom':\n targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;\n break;\n case 'left':\n targetElemPos.left = hostElemPos.left;\n break;\n case 'right':\n targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;\n break;\n case 'center':\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;\n } else {\n targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;\n }\n break;\n }\n\n targetElemPos.top = Math.round(targetElemPos.top);\n targetElemPos.left = Math.round(targetElemPos.left);\n targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];\n\n return targetElemPos;\n },\n\n /**\n * Provides a way to adjust the top positioning after first\n * render to correctly align element to top after content\n * rendering causes resized element height\n *\n * @param {array} placementClasses - The array of strings of classes\n * element should have.\n * @param {object} containerPosition - The object with container\n * position information\n * @param {number} initialHeight - The initial height for the elem.\n * @param {number} currentHeight - The current height for the elem.\n */\n adjustTop: function(placementClasses, containerPosition, initialHeight, currentHeight) {\n if (placementClasses.indexOf('top') !== -1 && initialHeight !== currentHeight) {\n return {\n top: containerPosition.top - currentHeight + 'px'\n };\n }\n },\n\n /**\n * Provides a way for positioning tooltip & dropdown\n * arrows when using placement options beyond the standard\n * left, right, top, or bottom.\n *\n * @param {element} elem - The tooltip/dropdown element.\n * @param {string} placement - The placement for the elem.\n */\n positionArrow: function(elem, placement) {\n elem = this.getRawNode(elem);\n\n var innerElem = elem.querySelector('.tooltip-inner, .popover-inner');\n if (!innerElem) {\n return;\n }\n\n var isTooltip = angular.element(innerElem).hasClass('tooltip-inner');\n\n var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');\n if (!arrowElem) {\n return;\n }\n\n var arrowCss = {\n top: '',\n bottom: '',\n left: '',\n right: ''\n };\n\n placement = this.parsePlacement(placement);\n if (placement[1] === 'center') {\n // no adjustment necessary - just reset styles\n angular.element(arrowElem).css(arrowCss);\n return;\n }\n\n var borderProp = 'border-' + placement[0] + '-width';\n var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];\n\n var borderRadiusProp = 'border-';\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n borderRadiusProp += placement[0] + '-' + placement[1];\n } else {\n borderRadiusProp += placement[1] + '-' + placement[0];\n }\n borderRadiusProp += '-radius';\n var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];\n\n switch (placement[0]) {\n case 'top':\n arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'bottom':\n arrowCss.top = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'left':\n arrowCss.right = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'right':\n arrowCss.left = isTooltip ? '0' : '-' + borderWidth;\n break;\n }\n\n arrowCss[placement[1]] = borderRadius;\n\n angular.element(arrowElem).css(arrowCss);\n }\n };\n }]);\n\nangular.module('ui.bootstrap.datepickerPopup', ['ui.bootstrap.datepicker', 'ui.bootstrap.position'])\n\n.value('$datepickerPopupLiteralWarning', true)\n\n.constant('uibDatepickerPopupConfig', {\n altInputFormats: [],\n appendToBody: false,\n clearText: 'Clear',\n closeOnDateSelection: true,\n closeText: 'Done',\n currentText: 'Today',\n datepickerPopup: 'yyyy-MM-dd',\n datepickerPopupTemplateUrl: 'uib/template/datepickerPopup/popup.html',\n datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',\n html5Types: {\n date: 'yyyy-MM-dd',\n 'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',\n 'month': 'yyyy-MM'\n },\n onOpenFocus: true,\n showButtonBar: true,\n placement: 'auto bottom-left'\n})\n\n.controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$log', '$parse', '$window', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig', '$datepickerPopupLiteralWarning',\nfunction($scope, $element, $attrs, $compile, $log, $parse, $window, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig, $datepickerPopupLiteralWarning) {\n var cache = {},\n isHtml5DateInput = false;\n var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,\n datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl, scrollParentEl,\n ngModel, ngModelOptions, $popup, altInputFormats, watchListeners = [];\n\n this.init = function(_ngModel_) {\n ngModel = _ngModel_;\n ngModelOptions = extractOptions(ngModel);\n closeOnDateSelection = angular.isDefined($attrs.closeOnDateSelection) ?\n $scope.$parent.$eval($attrs.closeOnDateSelection) :\n datepickerPopupConfig.closeOnDateSelection;\n appendToBody = angular.isDefined($attrs.datepickerAppendToBody) ?\n $scope.$parent.$eval($attrs.datepickerAppendToBody) :\n datepickerPopupConfig.appendToBody;\n onOpenFocus = angular.isDefined($attrs.onOpenFocus) ?\n $scope.$parent.$eval($attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;\n datepickerPopupTemplateUrl = angular.isDefined($attrs.datepickerPopupTemplateUrl) ?\n $attrs.datepickerPopupTemplateUrl :\n datepickerPopupConfig.datepickerPopupTemplateUrl;\n datepickerTemplateUrl = angular.isDefined($attrs.datepickerTemplateUrl) ?\n $attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;\n altInputFormats = angular.isDefined($attrs.altInputFormats) ?\n $scope.$parent.$eval($attrs.altInputFormats) :\n datepickerPopupConfig.altInputFormats;\n\n $scope.showButtonBar = angular.isDefined($attrs.showButtonBar) ?\n $scope.$parent.$eval($attrs.showButtonBar) :\n datepickerPopupConfig.showButtonBar;\n\n if (datepickerPopupConfig.html5Types[$attrs.type]) {\n dateFormat = datepickerPopupConfig.html5Types[$attrs.type];\n isHtml5DateInput = true;\n } else {\n dateFormat = $attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;\n $attrs.$observe('uibDatepickerPopup', function(value, oldValue) {\n var newDateFormat = value || datepickerPopupConfig.datepickerPopup;\n // Invalidate the $modelValue to ensure that formatters re-run\n // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764\n if (newDateFormat !== dateFormat) {\n dateFormat = newDateFormat;\n ngModel.$modelValue = null;\n\n if (!dateFormat) {\n throw new Error('uibDatepickerPopup must have a date format specified.');\n }\n }\n });\n }\n\n if (!dateFormat) {\n throw new Error('uibDatepickerPopup must have a date format specified.');\n }\n\n if (isHtml5DateInput && $attrs.uibDatepickerPopup) {\n throw new Error('HTML5 date input types do not support custom formats.');\n }\n\n // popup element used to display calendar\n popupEl = angular.element('
');\n\n popupEl.attr({\n 'ng-model': 'date',\n 'ng-change': 'dateSelection(date)',\n 'template-url': datepickerPopupTemplateUrl\n });\n\n // datepicker element\n datepickerEl = angular.element(popupEl.children()[0]);\n datepickerEl.attr('template-url', datepickerTemplateUrl);\n\n if (!$scope.datepickerOptions) {\n $scope.datepickerOptions = {};\n }\n\n if (isHtml5DateInput) {\n if ($attrs.type === 'month') {\n $scope.datepickerOptions.datepickerMode = 'month';\n $scope.datepickerOptions.minMode = 'month';\n }\n }\n\n datepickerEl.attr('datepicker-options', 'datepickerOptions');\n\n if (!isHtml5DateInput) {\n // Internal API to maintain the correct ng-invalid-[key] class\n ngModel.$$parserName = 'date';\n ngModel.$validators.date = validator;\n ngModel.$parsers.unshift(parseDate);\n ngModel.$formatters.push(function(value) {\n if (ngModel.$isEmpty(value)) {\n $scope.date = value;\n return value;\n }\n\n if (angular.isNumber(value)) {\n value = new Date(value);\n }\n\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));\n\n return dateParser.filter($scope.date, dateFormat);\n });\n } else {\n ngModel.$formatters.push(function(value) {\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));\n return value;\n });\n }\n\n // Detect changes in the view from the text box\n ngModel.$viewChangeListeners.push(function() {\n $scope.date = parseDateString(ngModel.$viewValue);\n });\n\n $element.on('keydown', inputKeydownBind);\n\n $popup = $compile(popupEl)($scope);\n // Prevent jQuery cache memory leak (template is now redundant after linking)\n popupEl.remove();\n\n if (appendToBody) {\n $document.find('body').append($popup);\n } else {\n $element.after($popup);\n }\n\n $scope.$on('$destroy', function() {\n if ($scope.isOpen === true) {\n if (!$rootScope.$$phase) {\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n }\n }\n\n $popup.remove();\n $element.off('keydown', inputKeydownBind);\n $document.off('click', documentClickBind);\n if (scrollParentEl) {\n scrollParentEl.off('scroll', positionPopup);\n }\n angular.element($window).off('resize', positionPopup);\n\n //Clear all watch listeners on destroy\n while (watchListeners.length) {\n watchListeners.shift()();\n }\n });\n };\n\n $scope.getText = function(key) {\n return $scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];\n };\n\n $scope.isDisabled = function(date) {\n if (date === 'today') {\n date = dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));\n }\n\n var dates = {};\n angular.forEach(['minDate', 'maxDate'], function(key) {\n if (!$scope.datepickerOptions[key]) {\n dates[key] = null;\n } else if (angular.isDate($scope.datepickerOptions[key])) {\n dates[key] = new Date($scope.datepickerOptions[key]);\n } else {\n if ($datepickerPopupLiteralWarning) {\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\n }\n\n dates[key] = new Date(dateFilter($scope.datepickerOptions[key], 'medium'));\n }\n });\n\n return $scope.datepickerOptions &&\n dates.minDate && $scope.compare(date, dates.minDate) < 0 ||\n dates.maxDate && $scope.compare(date, dates.maxDate) > 0;\n };\n\n $scope.compare = function(date1, date2) {\n return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n };\n\n // Inner change\n $scope.dateSelection = function(dt) {\n $scope.date = dt;\n var date = $scope.date ? dateParser.filter($scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function\n $element.val(date);\n ngModel.$setViewValue(date);\n\n if (closeOnDateSelection) {\n $scope.isOpen = false;\n $element[0].focus();\n }\n };\n\n $scope.keydown = function(evt) {\n if (evt.which === 27) {\n evt.stopPropagation();\n $scope.isOpen = false;\n $element[0].focus();\n }\n };\n\n $scope.select = function(date, evt) {\n evt.stopPropagation();\n\n if (date === 'today') {\n var today = new Date();\n if (angular.isDate($scope.date)) {\n date = new Date($scope.date);\n date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());\n } else {\n date = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));\n date.setHours(0, 0, 0, 0);\n }\n }\n $scope.dateSelection(date);\n };\n\n $scope.close = function(evt) {\n evt.stopPropagation();\n\n $scope.isOpen = false;\n $element[0].focus();\n };\n\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\n if ($attrs.ngDisabled) {\n watchListeners.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(disabled) {\n $scope.disabled = disabled;\n }));\n }\n\n $scope.$watch('isOpen', function(value) {\n if (value) {\n if (!$scope.disabled) {\n $timeout(function() {\n positionPopup();\n\n if (onOpenFocus) {\n $scope.$broadcast('uib:datepicker.focus');\n }\n\n $document.on('click', documentClickBind);\n\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\n if (appendToBody || $position.parsePlacement(placement)[2]) {\n scrollParentEl = scrollParentEl || angular.element($position.scrollParent($element));\n if (scrollParentEl) {\n scrollParentEl.on('scroll', positionPopup);\n }\n } else {\n scrollParentEl = null;\n }\n\n angular.element($window).on('resize', positionPopup);\n }, 0, false);\n } else {\n $scope.isOpen = false;\n }\n } else {\n $document.off('click', documentClickBind);\n if (scrollParentEl) {\n scrollParentEl.off('scroll', positionPopup);\n }\n angular.element($window).off('resize', positionPopup);\n }\n });\n\n function cameltoDash(string) {\n return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });\n }\n\n function parseDateString(viewValue) {\n var date = dateParser.parse(viewValue, dateFormat, $scope.date);\n if (isNaN(date)) {\n for (var i = 0; i < altInputFormats.length; i++) {\n date = dateParser.parse(viewValue, altInputFormats[i], $scope.date);\n if (!isNaN(date)) {\n return date;\n }\n }\n }\n return date;\n }\n\n function parseDate(viewValue) {\n if (angular.isNumber(viewValue)) {\n // presumably timestamp to date object\n viewValue = new Date(viewValue);\n }\n\n if (!viewValue) {\n return null;\n }\n\n if (angular.isDate(viewValue) && !isNaN(viewValue)) {\n return viewValue;\n }\n\n if (angular.isString(viewValue)) {\n var date = parseDateString(viewValue);\n if (!isNaN(date)) {\n return dateParser.toTimezone(date, ngModelOptions.getOption('timezone'));\n }\n }\n\n return ngModelOptions.getOption('allowInvalid') ? viewValue : undefined;\n }\n\n function validator(modelValue, viewValue) {\n var value = modelValue || viewValue;\n\n if (!$attrs.ngRequired && !value) {\n return true;\n }\n\n if (angular.isNumber(value)) {\n value = new Date(value);\n }\n\n if (!value) {\n return true;\n }\n\n if (angular.isDate(value) && !isNaN(value)) {\n return true;\n }\n\n if (angular.isString(value)) {\n return !isNaN(parseDateString(value));\n }\n\n return false;\n }\n\n function documentClickBind(event) {\n if (!$scope.isOpen && $scope.disabled) {\n return;\n }\n\n var popup = $popup[0];\n var dpContainsTarget = $element[0].contains(event.target);\n // The popup node may not be an element node\n // In some browsers (IE) only element nodes have the 'contains' function\n var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);\n if ($scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n }\n }\n\n function inputKeydownBind(evt) {\n if (evt.which === 27 && $scope.isOpen) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.$apply(function() {\n $scope.isOpen = false;\n });\n $element[0].focus();\n } else if (evt.which === 40 && !$scope.isOpen) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.$apply(function() {\n $scope.isOpen = true;\n });\n }\n }\n\n function positionPopup() {\n if ($scope.isOpen) {\n var dpElement = angular.element($popup[0].querySelector('.uib-datepicker-popup'));\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\n var position = $position.positionElements($element, dpElement, placement, appendToBody);\n dpElement.css({top: position.top + 'px', left: position.left + 'px'});\n if (dpElement.hasClass('uib-position-measure')) {\n dpElement.removeClass('uib-position-measure');\n }\n }\n }\n\n function extractOptions(ngModelCtrl) {\n var ngModelOptions;\n\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\n // guarantee a value\n ngModelOptions = angular.isObject(ngModelCtrl.$options) ?\n ngModelCtrl.$options :\n {\n timezone: null\n };\n\n // mimic 1.6+ api\n ngModelOptions.getOption = function (key) {\n return ngModelOptions[key];\n };\n } else { // in angular >=1.6 $options is always present\n ngModelOptions = ngModelCtrl.$options;\n }\n\n return ngModelOptions;\n }\n\n $scope.$on('uib:datepicker.mode', function() {\n $timeout(positionPopup, 0, false);\n });\n}])\n\n.directive('uibDatepickerPopup', function() {\n return {\n require: ['ngModel', 'uibDatepickerPopup'],\n controller: 'UibDatepickerPopupController',\n scope: {\n datepickerOptions: '=?',\n isOpen: '=?',\n currentText: '@',\n clearText: '@',\n closeText: '@'\n },\n link: function(scope, element, attrs, ctrls) {\n var ngModel = ctrls[0],\n ctrl = ctrls[1];\n\n ctrl.init(ngModel);\n }\n };\n})\n\n.directive('uibDatepickerPopupWrap', function() {\n return {\n restrict: 'A',\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/datepickerPopup/popup.html';\n }\n };\n});\n\nangular.module('ui.bootstrap.debounce', [])\n/**\n * A helper, internal service that debounces a function\n */\n .factory('$$debounce', ['$timeout', function($timeout) {\n return function(callback, debounceTime) {\n var timeoutPromise;\n\n return function() {\n var self = this;\n var args = Array.prototype.slice.call(arguments);\n if (timeoutPromise) {\n $timeout.cancel(timeoutPromise);\n }\n\n timeoutPromise = $timeout(function() {\n callback.apply(self, args);\n }, debounceTime);\n };\n };\n }]);\n\nangular.module('ui.bootstrap.multiMap', [])\n/**\n * A helper, internal data structure that stores all references attached to key\n */\n .factory('$$multiMap', function() {\n return {\n createNew: function() {\n var map = {};\n\n return {\n entries: function() {\n return Object.keys(map).map(function(key) {\n return {\n key: key,\n value: map[key]\n };\n });\n },\n get: function(key) {\n return map[key];\n },\n hasKey: function(key) {\n return !!map[key];\n },\n keys: function() {\n return Object.keys(map);\n },\n put: function(key, value) {\n if (!map[key]) {\n map[key] = [];\n }\n\n map[key].push(value);\n },\n remove: function(key, value) {\n var values = map[key];\n\n if (!values) {\n return;\n }\n\n var idx = values.indexOf(value);\n\n if (idx !== -1) {\n values.splice(idx, 1);\n }\n\n if (!values.length) {\n delete map[key];\n }\n }\n };\n }\n };\n });\n\nangular.module('ui.bootstrap.dropdown', ['ui.bootstrap.multiMap', 'ui.bootstrap.position'])\n\n.constant('uibDropdownConfig', {\n appendToOpenClass: 'uib-dropdown-open',\n openClass: 'open'\n})\n\n.service('uibDropdownService', ['$document', '$rootScope', '$$multiMap', function($document, $rootScope, $$multiMap) {\n var openScope = null;\n var openedContainers = $$multiMap.createNew();\n\n this.isOnlyOpen = function(dropdownScope, appendTo) {\n var openedDropdowns = openedContainers.get(appendTo);\n if (openedDropdowns) {\n var openDropdown = openedDropdowns.reduce(function(toClose, dropdown) {\n if (dropdown.scope === dropdownScope) {\n return dropdown;\n }\n\n return toClose;\n }, {});\n if (openDropdown) {\n return openedDropdowns.length === 1;\n }\n }\n\n return false;\n };\n\n this.open = function(dropdownScope, element, appendTo) {\n if (!openScope) {\n $document.on('click', closeDropdown);\n }\n\n if (openScope && openScope !== dropdownScope) {\n openScope.isOpen = false;\n }\n\n openScope = dropdownScope;\n\n if (!appendTo) {\n return;\n }\n\n var openedDropdowns = openedContainers.get(appendTo);\n if (openedDropdowns) {\n var openedScopes = openedDropdowns.map(function(dropdown) {\n return dropdown.scope;\n });\n if (openedScopes.indexOf(dropdownScope) === -1) {\n openedContainers.put(appendTo, {\n scope: dropdownScope\n });\n }\n } else {\n openedContainers.put(appendTo, {\n scope: dropdownScope\n });\n }\n };\n\n this.close = function(dropdownScope, element, appendTo) {\n if (openScope === dropdownScope) {\n $document.off('click', closeDropdown);\n $document.off('keydown', this.keybindFilter);\n openScope = null;\n }\n\n if (!appendTo) {\n return;\n }\n\n var openedDropdowns = openedContainers.get(appendTo);\n if (openedDropdowns) {\n var dropdownToClose = openedDropdowns.reduce(function(toClose, dropdown) {\n if (dropdown.scope === dropdownScope) {\n return dropdown;\n }\n\n return toClose;\n }, {});\n if (dropdownToClose) {\n openedContainers.remove(appendTo, dropdownToClose);\n }\n }\n };\n\n var closeDropdown = function(evt) {\n // This method may still be called during the same mouse event that\n // unbound this event handler. So check openScope before proceeding.\n if (!openScope || !openScope.isOpen) { return; }\n\n if (evt && openScope.getAutoClose() === 'disabled') { return; }\n\n if (evt && evt.which === 3) { return; }\n\n var toggleElement = openScope.getToggleElement();\n if (evt && toggleElement && toggleElement[0].contains(evt.target)) {\n return;\n }\n\n var dropdownElement = openScope.getDropdownElement();\n if (evt && openScope.getAutoClose() === 'outsideClick' &&\n dropdownElement && dropdownElement[0].contains(evt.target)) {\n return;\n }\n\n openScope.focusToggleElement();\n openScope.isOpen = false;\n\n if (!$rootScope.$$phase) {\n openScope.$apply();\n }\n };\n\n this.keybindFilter = function(evt) {\n if (!openScope) {\n // see this.close as ESC could have been pressed which kills the scope so we can not proceed\n return;\n }\n\n var dropdownElement = openScope.getDropdownElement();\n var toggleElement = openScope.getToggleElement();\n var dropdownElementTargeted = dropdownElement && dropdownElement[0].contains(evt.target);\n var toggleElementTargeted = toggleElement && toggleElement[0].contains(evt.target);\n if (evt.which === 27) {\n evt.stopPropagation();\n openScope.focusToggleElement();\n closeDropdown();\n } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen && (dropdownElementTargeted || toggleElementTargeted)) {\n evt.preventDefault();\n evt.stopPropagation();\n openScope.focusDropdownEntry(evt.which);\n }\n };\n}])\n\n.controller('UibDropdownController', ['$scope', '$element', '$attrs', '$parse', 'uibDropdownConfig', 'uibDropdownService', '$animate', '$uibPosition', '$document', '$compile', '$templateRequest', function($scope, $element, $attrs, $parse, dropdownConfig, uibDropdownService, $animate, $position, $document, $compile, $templateRequest) {\n var self = this,\n scope = $scope.$new(), // create a child scope so we are not polluting original one\n templateScope,\n appendToOpenClass = dropdownConfig.appendToOpenClass,\n openClass = dropdownConfig.openClass,\n getIsOpen,\n setIsOpen = angular.noop,\n toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,\n keynavEnabled = false,\n selectedOption = null,\n body = $document.find('body');\n\n $element.addClass('dropdown');\n\n this.init = function() {\n if ($attrs.isOpen) {\n getIsOpen = $parse($attrs.isOpen);\n setIsOpen = getIsOpen.assign;\n\n $scope.$watch(getIsOpen, function(value) {\n scope.isOpen = !!value;\n });\n }\n\n keynavEnabled = angular.isDefined($attrs.keyboardNav);\n };\n\n this.toggle = function(open) {\n scope.isOpen = arguments.length ? !!open : !scope.isOpen;\n if (angular.isFunction(setIsOpen)) {\n setIsOpen(scope, scope.isOpen);\n }\n\n return scope.isOpen;\n };\n\n // Allow other directives to watch status\n this.isOpen = function() {\n return scope.isOpen;\n };\n\n scope.getToggleElement = function() {\n return self.toggleElement;\n };\n\n scope.getAutoClose = function() {\n return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'\n };\n\n scope.getElement = function() {\n return $element;\n };\n\n scope.isKeynavEnabled = function() {\n return keynavEnabled;\n };\n\n scope.focusDropdownEntry = function(keyCode) {\n var elems = self.dropdownMenu ? //If append to body is used.\n angular.element(self.dropdownMenu).find('a') :\n $element.find('ul').eq(0).find('a');\n\n switch (keyCode) {\n case 40: {\n if (!angular.isNumber(self.selectedOption)) {\n self.selectedOption = 0;\n } else {\n self.selectedOption = self.selectedOption === elems.length - 1 ?\n self.selectedOption :\n self.selectedOption + 1;\n }\n break;\n }\n case 38: {\n if (!angular.isNumber(self.selectedOption)) {\n self.selectedOption = elems.length - 1;\n } else {\n self.selectedOption = self.selectedOption === 0 ?\n 0 : self.selectedOption - 1;\n }\n break;\n }\n }\n elems[self.selectedOption].focus();\n };\n\n scope.getDropdownElement = function() {\n return self.dropdownMenu;\n };\n\n scope.focusToggleElement = function() {\n if (self.toggleElement) {\n self.toggleElement[0].focus();\n }\n };\n\n function removeDropdownMenu() {\n $element.append(self.dropdownMenu);\n }\n\n scope.$watch('isOpen', function(isOpen, wasOpen) {\n var appendTo = null,\n appendToBody = false;\n\n if (angular.isDefined($attrs.dropdownAppendTo)) {\n var appendToEl = $parse($attrs.dropdownAppendTo)(scope);\n if (appendToEl) {\n appendTo = angular.element(appendToEl);\n }\n }\n\n if (angular.isDefined($attrs.dropdownAppendToBody)) {\n var appendToBodyValue = $parse($attrs.dropdownAppendToBody)(scope);\n if (appendToBodyValue !== false) {\n appendToBody = true;\n }\n }\n\n if (appendToBody && !appendTo) {\n appendTo = body;\n }\n\n if (appendTo && self.dropdownMenu) {\n if (isOpen) {\n appendTo.append(self.dropdownMenu);\n $element.on('$destroy', removeDropdownMenu);\n } else {\n $element.off('$destroy', removeDropdownMenu);\n removeDropdownMenu();\n }\n }\n\n if (appendTo && self.dropdownMenu) {\n var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),\n css,\n rightalign,\n scrollbarPadding,\n scrollbarWidth = 0;\n\n css = {\n top: pos.top + 'px',\n display: isOpen ? 'block' : 'none'\n };\n\n rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');\n if (!rightalign) {\n css.left = pos.left + 'px';\n css.right = 'auto';\n } else {\n css.left = 'auto';\n scrollbarPadding = $position.scrollbarPadding(appendTo);\n\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n scrollbarWidth = scrollbarPadding.scrollbarWidth;\n }\n\n css.right = window.innerWidth - scrollbarWidth -\n (pos.left + $element.prop('offsetWidth')) + 'px';\n }\n\n // Need to adjust our positioning to be relative to the appendTo container\n // if it's not the body element\n if (!appendToBody) {\n var appendOffset = $position.offset(appendTo);\n\n css.top = pos.top - appendOffset.top + 'px';\n\n if (!rightalign) {\n css.left = pos.left - appendOffset.left + 'px';\n } else {\n css.right = window.innerWidth -\n (pos.left - appendOffset.left + $element.prop('offsetWidth')) + 'px';\n }\n }\n\n self.dropdownMenu.css(css);\n }\n\n var openContainer = appendTo ? appendTo : $element;\n var dropdownOpenClass = appendTo ? appendToOpenClass : openClass;\n var hasOpenClass = openContainer.hasClass(dropdownOpenClass);\n var isOnlyOpen = uibDropdownService.isOnlyOpen($scope, appendTo);\n\n if (hasOpenClass === !isOpen) {\n var toggleClass;\n if (appendTo) {\n toggleClass = !isOnlyOpen ? 'addClass' : 'removeClass';\n } else {\n toggleClass = isOpen ? 'addClass' : 'removeClass';\n }\n $animate[toggleClass](openContainer, dropdownOpenClass).then(function() {\n if (angular.isDefined(isOpen) && isOpen !== wasOpen) {\n toggleInvoker($scope, { open: !!isOpen });\n }\n });\n }\n\n if (isOpen) {\n if (self.dropdownMenuTemplateUrl) {\n $templateRequest(self.dropdownMenuTemplateUrl).then(function(tplContent) {\n templateScope = scope.$new();\n $compile(tplContent.trim())(templateScope, function(dropdownElement) {\n var newEl = dropdownElement;\n self.dropdownMenu.replaceWith(newEl);\n self.dropdownMenu = newEl;\n $document.on('keydown', uibDropdownService.keybindFilter);\n });\n });\n } else {\n $document.on('keydown', uibDropdownService.keybindFilter);\n }\n\n scope.focusToggleElement();\n uibDropdownService.open(scope, $element, appendTo);\n } else {\n uibDropdownService.close(scope, $element, appendTo);\n if (self.dropdownMenuTemplateUrl) {\n if (templateScope) {\n templateScope.$destroy();\n }\n var newEl = angular.element('
    ');\n self.dropdownMenu.replaceWith(newEl);\n self.dropdownMenu = newEl;\n }\n\n self.selectedOption = null;\n }\n\n if (angular.isFunction(setIsOpen)) {\n setIsOpen($scope, isOpen);\n }\n });\n}])\n\n.directive('uibDropdown', function() {\n return {\n controller: 'UibDropdownController',\n link: function(scope, element, attrs, dropdownCtrl) {\n dropdownCtrl.init();\n }\n };\n})\n\n.directive('uibDropdownMenu', function() {\n return {\n restrict: 'A',\n require: '?^uibDropdown',\n link: function(scope, element, attrs, dropdownCtrl) {\n if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {\n return;\n }\n\n element.addClass('dropdown-menu');\n\n var tplUrl = attrs.templateUrl;\n if (tplUrl) {\n dropdownCtrl.dropdownMenuTemplateUrl = tplUrl;\n }\n\n if (!dropdownCtrl.dropdownMenu) {\n dropdownCtrl.dropdownMenu = element;\n }\n }\n };\n})\n\n.directive('uibDropdownToggle', function() {\n return {\n require: '?^uibDropdown',\n link: function(scope, element, attrs, dropdownCtrl) {\n if (!dropdownCtrl) {\n return;\n }\n\n element.addClass('dropdown-toggle');\n\n dropdownCtrl.toggleElement = element;\n\n var toggleDropdown = function(event) {\n event.preventDefault();\n\n if (!element.hasClass('disabled') && !attrs.disabled) {\n scope.$apply(function() {\n dropdownCtrl.toggle();\n });\n }\n };\n\n element.on('click', toggleDropdown);\n\n // WAI-ARIA\n element.attr({ 'aria-haspopup': true, 'aria-expanded': false });\n scope.$watch(dropdownCtrl.isOpen, function(isOpen) {\n element.attr('aria-expanded', !!isOpen);\n });\n\n scope.$on('$destroy', function() {\n element.off('click', toggleDropdown);\n });\n }\n };\n});\n\nangular.module('ui.bootstrap.stackedMap', [])\n/**\n * A helper, internal data structure that acts as a map but also allows getting / removing\n * elements in the LIFO order\n */\n .factory('$$stackedMap', function() {\n return {\n createNew: function() {\n var stack = [];\n\n return {\n add: function(key, value) {\n stack.push({\n key: key,\n value: value\n });\n },\n get: function(key) {\n for (var i = 0; i < stack.length; i++) {\n if (key === stack[i].key) {\n return stack[i];\n }\n }\n },\n keys: function() {\n var keys = [];\n for (var i = 0; i < stack.length; i++) {\n keys.push(stack[i].key);\n }\n return keys;\n },\n top: function() {\n return stack[stack.length - 1];\n },\n remove: function(key) {\n var idx = -1;\n for (var i = 0; i < stack.length; i++) {\n if (key === stack[i].key) {\n idx = i;\n break;\n }\n }\n return stack.splice(idx, 1)[0];\n },\n removeTop: function() {\n return stack.pop();\n },\n length: function() {\n return stack.length;\n }\n };\n }\n };\n });\nangular.module('ui.bootstrap.modal', ['ui.bootstrap.multiMap', 'ui.bootstrap.stackedMap', 'ui.bootstrap.position'])\n/**\n * Pluggable resolve mechanism for the modal resolve resolution\n * Supports UI Router's $resolve service\n */\n .provider('$uibResolve', function() {\n var resolve = this;\n this.resolver = null;\n\n this.setResolver = function(resolver) {\n this.resolver = resolver;\n };\n\n this.$get = ['$injector', '$q', function($injector, $q) {\n var resolver = resolve.resolver ? $injector.get(resolve.resolver) : null;\n return {\n resolve: function(invocables, locals, parent, self) {\n if (resolver) {\n return resolver.resolve(invocables, locals, parent, self);\n }\n\n var promises = [];\n\n angular.forEach(invocables, function(value) {\n if (angular.isFunction(value) || angular.isArray(value)) {\n promises.push($q.resolve($injector.invoke(value)));\n } else if (angular.isString(value)) {\n promises.push($q.resolve($injector.get(value)));\n } else {\n promises.push($q.resolve(value));\n }\n });\n\n return $q.all(promises).then(function(resolves) {\n var resolveObj = {};\n var resolveIter = 0;\n angular.forEach(invocables, function(value, key) {\n resolveObj[key] = resolves[resolveIter++];\n });\n\n return resolveObj;\n });\n }\n };\n }];\n })\n\n/**\n * A helper directive for the $modal service. It creates a backdrop element.\n */\n .directive('uibModalBackdrop', ['$animate', '$injector', '$uibModalStack',\n function($animate, $injector, $modalStack) {\n return {\n restrict: 'A',\n compile: function(tElement, tAttrs) {\n tElement.addClass(tAttrs.backdropClass);\n return linkFn;\n }\n };\n\n function linkFn(scope, element, attrs) {\n if (attrs.modalInClass) {\n $animate.addClass(element, attrs.modalInClass);\n\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\n var done = setIsAsync();\n if (scope.modalOptions.animation) {\n $animate.removeClass(element, attrs.modalInClass).then(done);\n } else {\n done();\n }\n });\n }\n }\n }])\n\n .directive('uibModalWindow', ['$uibModalStack', '$q', '$animateCss', '$document',\n function($modalStack, $q, $animateCss, $document) {\n return {\n scope: {\n index: '@'\n },\n restrict: 'A',\n transclude: true,\n templateUrl: function(tElement, tAttrs) {\n return tAttrs.templateUrl || 'uib/template/modal/window.html';\n },\n link: function(scope, element, attrs) {\n element.addClass(attrs.windowTopClass || '');\n scope.size = attrs.size;\n\n scope.close = function(evt) {\n var modal = $modalStack.getTop();\n if (modal && modal.value.backdrop &&\n modal.value.backdrop !== 'static' &&\n evt.target === evt.currentTarget) {\n evt.preventDefault();\n evt.stopPropagation();\n $modalStack.dismiss(modal.key, 'backdrop click');\n }\n };\n\n // moved from template to fix issue #2280\n element.on('click', scope.close);\n\n // This property is only added to the scope for the purpose of detecting when this directive is rendered.\n // We can detect that by using this property in the template associated with this directive and then use\n // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.\n scope.$isRendered = true;\n\n // Deferred object that will be resolved when this modal is rendered.\n var modalRenderDeferObj = $q.defer();\n // Resolve render promise post-digest\n scope.$$postDigest(function() {\n modalRenderDeferObj.resolve();\n });\n\n modalRenderDeferObj.promise.then(function() {\n var animationPromise = null;\n\n if (attrs.modalInClass) {\n animationPromise = $animateCss(element, {\n addClass: attrs.modalInClass\n }).start();\n\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\n var done = setIsAsync();\n $animateCss(element, {\n removeClass: attrs.modalInClass\n }).start().then(done);\n });\n }\n\n\n $q.when(animationPromise).then(function() {\n // Notify {@link $modalStack} that modal is rendered.\n var modal = $modalStack.getTop();\n if (modal) {\n $modalStack.modalRendered(modal.key);\n }\n\n /**\n * If something within the freshly-opened modal already has focus (perhaps via a\n * directive that causes focus) then there's no need to try to focus anything.\n */\n if (!($document[0].activeElement && element[0].contains($document[0].activeElement))) {\n var inputWithAutofocus = element[0].querySelector('[autofocus]');\n /**\n * Auto-focusing of a freshly-opened modal element causes any child elements\n * with the autofocus attribute to lose focus. This is an issue on touch\n * based devices which will show and then hide the onscreen keyboard.\n * Attempts to refocus the autofocus element via JavaScript will not reopen\n * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus\n * the modal element if the modal does not contain an autofocus element.\n */\n if (inputWithAutofocus) {\n inputWithAutofocus.focus();\n } else {\n element[0].focus();\n }\n }\n });\n });\n }\n };\n }])\n\n .directive('uibModalAnimationClass', function() {\n return {\n compile: function(tElement, tAttrs) {\n if (tAttrs.modalAnimation) {\n tElement.addClass(tAttrs.uibModalAnimationClass);\n }\n }\n };\n })\n\n .directive('uibModalTransclude', ['$animate', function($animate) {\n return {\n link: function(scope, element, attrs, controller, transclude) {\n transclude(scope.$parent, function(clone) {\n element.empty();\n $animate.enter(clone, element);\n });\n }\n };\n }])\n\n .factory('$uibModalStack', ['$animate', '$animateCss', '$document',\n '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap', '$uibPosition',\n function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap, $uibPosition) {\n var OPENED_MODAL_CLASS = 'modal-open';\n\n var backdropDomEl, backdropScope;\n var openedWindows = $$stackedMap.createNew();\n var openedClasses = $$multiMap.createNew();\n var $modalStack = {\n NOW_CLOSING_EVENT: 'modal.stack.now-closing'\n };\n var topModalIndex = 0;\n var previousTopOpenedModal = null;\n var ARIA_HIDDEN_ATTRIBUTE_NAME = 'data-bootstrap-modal-aria-hidden-count';\n\n //Modal focus behavior\n var tabbableSelector = 'a[href], area[href], input:not([disabled]):not([tabindex=\\'-1\\']), ' +\n 'button:not([disabled]):not([tabindex=\\'-1\\']),select:not([disabled]):not([tabindex=\\'-1\\']), textarea:not([disabled]):not([tabindex=\\'-1\\']), ' +\n 'iframe, object, embed, *[tabindex]:not([tabindex=\\'-1\\']), *[contenteditable=true]';\n var scrollbarPadding;\n var SNAKE_CASE_REGEXP = /[A-Z]/g;\n\n // TODO: extract into common dependency with tooltip\n function snake_case(name) {\n var separator = '-';\n return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n }\n\n function isVisible(element) {\n return !!(element.offsetWidth ||\n element.offsetHeight ||\n element.getClientRects().length);\n }\n\n function backdropIndex() {\n var topBackdropIndex = -1;\n var opened = openedWindows.keys();\n for (var i = 0; i < opened.length; i++) {\n if (openedWindows.get(opened[i]).value.backdrop) {\n topBackdropIndex = i;\n }\n }\n\n // If any backdrop exist, ensure that it's index is always\n // right below the top modal\n if (topBackdropIndex > -1 && topBackdropIndex < topModalIndex) {\n topBackdropIndex = topModalIndex;\n }\n return topBackdropIndex;\n }\n\n $rootScope.$watch(backdropIndex, function(newBackdropIndex) {\n if (backdropScope) {\n backdropScope.index = newBackdropIndex;\n }\n });\n\n function removeModalWindow(modalInstance, elementToReceiveFocus) {\n var modalWindow = openedWindows.get(modalInstance).value;\n var appendToElement = modalWindow.appendTo;\n\n //clean up the stack\n openedWindows.remove(modalInstance);\n previousTopOpenedModal = openedWindows.top();\n if (previousTopOpenedModal) {\n topModalIndex = parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10);\n }\n\n removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {\n var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;\n openedClasses.remove(modalBodyClass, modalInstance);\n var areAnyOpen = openedClasses.hasKey(modalBodyClass);\n appendToElement.toggleClass(modalBodyClass, areAnyOpen);\n if (!areAnyOpen && scrollbarPadding && scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n if (scrollbarPadding.originalRight) {\n appendToElement.css({paddingRight: scrollbarPadding.originalRight + 'px'});\n } else {\n appendToElement.css({paddingRight: ''});\n }\n scrollbarPadding = null;\n }\n toggleTopWindowClass(true);\n }, modalWindow.closedDeferred);\n checkRemoveBackdrop();\n\n //move focus to specified element if available, or else to body\n if (elementToReceiveFocus && elementToReceiveFocus.focus) {\n elementToReceiveFocus.focus();\n } else if (appendToElement.focus) {\n appendToElement.focus();\n }\n }\n\n // Add or remove \"windowTopClass\" from the top window in the stack\n function toggleTopWindowClass(toggleSwitch) {\n var modalWindow;\n\n if (openedWindows.length() > 0) {\n modalWindow = openedWindows.top().value;\n modalWindow.modalDomEl.toggleClass(modalWindow.windowTopClass || '', toggleSwitch);\n }\n }\n\n function checkRemoveBackdrop() {\n //remove backdrop if no longer needed\n if (backdropDomEl && backdropIndex() === -1) {\n var backdropScopeRef = backdropScope;\n removeAfterAnimate(backdropDomEl, backdropScope, function() {\n backdropScopeRef = null;\n });\n backdropDomEl = undefined;\n backdropScope = undefined;\n }\n }\n\n function removeAfterAnimate(domEl, scope, done, closedDeferred) {\n var asyncDeferred;\n var asyncPromise = null;\n var setIsAsync = function() {\n if (!asyncDeferred) {\n asyncDeferred = $q.defer();\n asyncPromise = asyncDeferred.promise;\n }\n\n return function asyncDone() {\n asyncDeferred.resolve();\n };\n };\n scope.$broadcast($modalStack.NOW_CLOSING_EVENT, setIsAsync);\n\n // Note that it's intentional that asyncPromise might be null.\n // That's when setIsAsync has not been called during the\n // NOW_CLOSING_EVENT broadcast.\n return $q.when(asyncPromise).then(afterAnimating);\n\n function afterAnimating() {\n if (afterAnimating.done) {\n return;\n }\n afterAnimating.done = true;\n\n $animate.leave(domEl).then(function() {\n if (done) {\n done();\n }\n\n domEl.remove();\n if (closedDeferred) {\n closedDeferred.resolve();\n }\n });\n\n scope.$destroy();\n }\n }\n\n $document.on('keydown', keydownListener);\n\n $rootScope.$on('$destroy', function() {\n $document.off('keydown', keydownListener);\n });\n\n function keydownListener(evt) {\n if (evt.isDefaultPrevented()) {\n return evt;\n }\n\n var modal = openedWindows.top();\n if (modal) {\n switch (evt.which) {\n case 27: {\n if (modal.value.keyboard) {\n evt.preventDefault();\n $rootScope.$apply(function() {\n $modalStack.dismiss(modal.key, 'escape key press');\n });\n }\n break;\n }\n case 9: {\n var list = $modalStack.loadFocusElementList(modal);\n var focusChanged = false;\n if (evt.shiftKey) {\n if ($modalStack.isFocusInFirstItem(evt, list) || $modalStack.isModalFocused(evt, modal)) {\n focusChanged = $modalStack.focusLastFocusableElement(list);\n }\n } else {\n if ($modalStack.isFocusInLastItem(evt, list)) {\n focusChanged = $modalStack.focusFirstFocusableElement(list);\n }\n }\n\n if (focusChanged) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n break;\n }\n }\n }\n }\n\n $modalStack.open = function(modalInstance, modal) {\n var modalOpener = $document[0].activeElement,\n modalBodyClass = modal.openedClass || OPENED_MODAL_CLASS;\n\n toggleTopWindowClass(false);\n\n // Store the current top first, to determine what index we ought to use\n // for the current top modal\n previousTopOpenedModal = openedWindows.top();\n\n openedWindows.add(modalInstance, {\n deferred: modal.deferred,\n renderDeferred: modal.renderDeferred,\n closedDeferred: modal.closedDeferred,\n modalScope: modal.scope,\n backdrop: modal.backdrop,\n keyboard: modal.keyboard,\n openedClass: modal.openedClass,\n windowTopClass: modal.windowTopClass,\n animation: modal.animation,\n appendTo: modal.appendTo\n });\n\n openedClasses.put(modalBodyClass, modalInstance);\n\n var appendToElement = modal.appendTo,\n currBackdropIndex = backdropIndex();\n\n if (currBackdropIndex >= 0 && !backdropDomEl) {\n backdropScope = $rootScope.$new(true);\n backdropScope.modalOptions = modal;\n backdropScope.index = currBackdropIndex;\n backdropDomEl = angular.element('
    ');\n backdropDomEl.attr({\n 'class': 'modal-backdrop',\n 'ng-style': '{\\'z-index\\': 1040 + (index && 1 || 0) + index*10}',\n 'uib-modal-animation-class': 'fade',\n 'modal-in-class': 'in'\n });\n if (modal.backdropClass) {\n backdropDomEl.addClass(modal.backdropClass);\n }\n\n if (modal.animation) {\n backdropDomEl.attr('modal-animation', 'true');\n }\n $compile(backdropDomEl)(backdropScope);\n $animate.enter(backdropDomEl, appendToElement);\n if ($uibPosition.isScrollable(appendToElement)) {\n scrollbarPadding = $uibPosition.scrollbarPadding(appendToElement);\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\n appendToElement.css({paddingRight: scrollbarPadding.right + 'px'});\n }\n }\n }\n\n var content;\n if (modal.component) {\n content = document.createElement(snake_case(modal.component.name));\n content = angular.element(content);\n content.attr({\n resolve: '$resolve',\n 'modal-instance': '$uibModalInstance',\n close: '$close($value)',\n dismiss: '$dismiss($value)'\n });\n } else {\n content = modal.content;\n }\n\n // Set the top modal index based on the index of the previous top modal\n topModalIndex = previousTopOpenedModal ? parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10) + 1 : 0;\n var angularDomEl = angular.element('
    ');\n angularDomEl.attr({\n 'class': 'modal',\n 'template-url': modal.windowTemplateUrl,\n 'window-top-class': modal.windowTopClass,\n 'role': 'dialog',\n 'aria-labelledby': modal.ariaLabelledBy,\n 'aria-describedby': modal.ariaDescribedBy,\n 'size': modal.size,\n 'index': topModalIndex,\n 'animate': 'animate',\n 'ng-style': '{\\'z-index\\': 1050 + $$topModalIndex*10, display: \\'block\\'}',\n 'tabindex': -1,\n 'uib-modal-animation-class': 'fade',\n 'modal-in-class': 'in'\n }).append(content);\n if (modal.windowClass) {\n angularDomEl.addClass(modal.windowClass);\n }\n\n if (modal.animation) {\n angularDomEl.attr('modal-animation', 'true');\n }\n\n appendToElement.addClass(modalBodyClass);\n if (modal.scope) {\n // we need to explicitly add the modal index to the modal scope\n // because it is needed by ngStyle to compute the zIndex property.\n modal.scope.$$topModalIndex = topModalIndex;\n }\n $animate.enter($compile(angularDomEl)(modal.scope), appendToElement);\n\n openedWindows.top().value.modalDomEl = angularDomEl;\n openedWindows.top().value.modalOpener = modalOpener;\n\n applyAriaHidden(angularDomEl);\n\n function applyAriaHidden(el) {\n if (!el || el[0].tagName === 'BODY') {\n return;\n }\n\n getSiblings(el).forEach(function(sibling) {\n var elemIsAlreadyHidden = sibling.getAttribute('aria-hidden') === 'true',\n ariaHiddenCount = parseInt(sibling.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10);\n\n if (!ariaHiddenCount) {\n ariaHiddenCount = elemIsAlreadyHidden ? 1 : 0;\n }\n\n sibling.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, ariaHiddenCount + 1);\n sibling.setAttribute('aria-hidden', 'true');\n });\n\n return applyAriaHidden(el.parent());\n\n function getSiblings(el) {\n var children = el.parent() ? el.parent().children() : [];\n\n return Array.prototype.filter.call(children, function(child) {\n return child !== el[0];\n });\n }\n }\n };\n\n function broadcastClosing(modalWindow, resultOrReason, closing) {\n return !modalWindow.value.modalScope.$broadcast('modal.closing', resultOrReason, closing).defaultPrevented;\n }\n\n function unhideBackgroundElements() {\n Array.prototype.forEach.call(\n document.querySelectorAll('[' + ARIA_HIDDEN_ATTRIBUTE_NAME + ']'),\n function(hiddenEl) {\n var ariaHiddenCount = parseInt(hiddenEl.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10),\n newHiddenCount = ariaHiddenCount - 1;\n hiddenEl.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, newHiddenCount);\n\n if (!newHiddenCount) {\n hiddenEl.removeAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME);\n hiddenEl.removeAttribute('aria-hidden');\n }\n }\n );\n }\n\n $modalStack.close = function(modalInstance, result) {\n var modalWindow = openedWindows.get(modalInstance);\n unhideBackgroundElements();\n if (modalWindow && broadcastClosing(modalWindow, result, true)) {\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\n modalWindow.value.deferred.resolve(result);\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\n return true;\n }\n\n return !modalWindow;\n };\n\n $modalStack.dismiss = function(modalInstance, reason) {\n var modalWindow = openedWindows.get(modalInstance);\n unhideBackgroundElements();\n if (modalWindow && broadcastClosing(modalWindow, reason, false)) {\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\n modalWindow.value.deferred.reject(reason);\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\n return true;\n }\n return !modalWindow;\n };\n\n $modalStack.dismissAll = function(reason) {\n var topModal = this.getTop();\n while (topModal && this.dismiss(topModal.key, reason)) {\n topModal = this.getTop();\n }\n };\n\n $modalStack.getTop = function() {\n return openedWindows.top();\n };\n\n $modalStack.modalRendered = function(modalInstance) {\n var modalWindow = openedWindows.get(modalInstance);\n if (modalWindow) {\n modalWindow.value.renderDeferred.resolve();\n }\n };\n\n $modalStack.focusFirstFocusableElement = function(list) {\n if (list.length > 0) {\n list[0].focus();\n return true;\n }\n return false;\n };\n\n $modalStack.focusLastFocusableElement = function(list) {\n if (list.length > 0) {\n list[list.length - 1].focus();\n return true;\n }\n return false;\n };\n\n $modalStack.isModalFocused = function(evt, modalWindow) {\n if (evt && modalWindow) {\n var modalDomEl = modalWindow.value.modalDomEl;\n if (modalDomEl && modalDomEl.length) {\n return (evt.target || evt.srcElement) === modalDomEl[0];\n }\n }\n return false;\n };\n\n $modalStack.isFocusInFirstItem = function(evt, list) {\n if (list.length > 0) {\n return (evt.target || evt.srcElement) === list[0];\n }\n return false;\n };\n\n $modalStack.isFocusInLastItem = function(evt, list) {\n if (list.length > 0) {\n return (evt.target || evt.srcElement) === list[list.length - 1];\n }\n return false;\n };\n\n $modalStack.loadFocusElementList = function(modalWindow) {\n if (modalWindow) {\n var modalDomE1 = modalWindow.value.modalDomEl;\n if (modalDomE1 && modalDomE1.length) {\n var elements = modalDomE1[0].querySelectorAll(tabbableSelector);\n return elements ?\n Array.prototype.filter.call(elements, function(element) {\n return isVisible(element);\n }) : elements;\n }\n }\n };\n\n return $modalStack;\n }])\n\n .provider('$uibModal', function() {\n var $modalProvider = {\n options: {\n animation: true,\n backdrop: true, //can also be false or 'static'\n keyboard: true\n },\n $get: ['$rootScope', '$q', '$document', '$templateRequest', '$controller', '$uibResolve', '$uibModalStack',\n function ($rootScope, $q, $document, $templateRequest, $controller, $uibResolve, $modalStack) {\n var $modal = {};\n\n function getTemplatePromise(options) {\n return options.template ? $q.when(options.template) :\n $templateRequest(angular.isFunction(options.templateUrl) ?\n options.templateUrl() : options.templateUrl);\n }\n\n var promiseChain = null;\n $modal.getPromiseChain = function() {\n return promiseChain;\n };\n\n $modal.open = function(modalOptions) {\n var modalResultDeferred = $q.defer();\n var modalOpenedDeferred = $q.defer();\n var modalClosedDeferred = $q.defer();\n var modalRenderDeferred = $q.defer();\n\n //prepare an instance of a modal to be injected into controllers and returned to a caller\n var modalInstance = {\n result: modalResultDeferred.promise,\n opened: modalOpenedDeferred.promise,\n closed: modalClosedDeferred.promise,\n rendered: modalRenderDeferred.promise,\n close: function (result) {\n return $modalStack.close(modalInstance, result);\n },\n dismiss: function (reason) {\n return $modalStack.dismiss(modalInstance, reason);\n }\n };\n\n //merge and clean up options\n modalOptions = angular.extend({}, $modalProvider.options, modalOptions);\n modalOptions.resolve = modalOptions.resolve || {};\n modalOptions.appendTo = modalOptions.appendTo || $document.find('body').eq(0);\n\n if (!modalOptions.appendTo.length) {\n throw new Error('appendTo element not found. Make sure that the element passed is in DOM.');\n }\n\n //verify options\n if (!modalOptions.component && !modalOptions.template && !modalOptions.templateUrl) {\n throw new Error('One of component or template or templateUrl options is required.');\n }\n\n var templateAndResolvePromise;\n if (modalOptions.component) {\n templateAndResolvePromise = $q.when($uibResolve.resolve(modalOptions.resolve, {}, null, null));\n } else {\n templateAndResolvePromise =\n $q.all([getTemplatePromise(modalOptions), $uibResolve.resolve(modalOptions.resolve, {}, null, null)]);\n }\n\n function resolveWithTemplate() {\n return templateAndResolvePromise;\n }\n\n // Wait for the resolution of the existing promise chain.\n // Then switch to our own combined promise dependency (regardless of how the previous modal fared).\n // Then add to $modalStack and resolve opened.\n // Finally clean up the chain variable if no subsequent modal has overwritten it.\n var samePromise;\n samePromise = promiseChain = $q.all([promiseChain])\n .then(resolveWithTemplate, resolveWithTemplate)\n .then(function resolveSuccess(tplAndVars) {\n var providedScope = modalOptions.scope || $rootScope;\n\n var modalScope = providedScope.$new();\n modalScope.$close = modalInstance.close;\n modalScope.$dismiss = modalInstance.dismiss;\n\n modalScope.$on('$destroy', function() {\n if (!modalScope.$$uibDestructionScheduled) {\n modalScope.$dismiss('$uibUnscheduledDestruction');\n }\n });\n\n var modal = {\n scope: modalScope,\n deferred: modalResultDeferred,\n renderDeferred: modalRenderDeferred,\n closedDeferred: modalClosedDeferred,\n animation: modalOptions.animation,\n backdrop: modalOptions.backdrop,\n keyboard: modalOptions.keyboard,\n backdropClass: modalOptions.backdropClass,\n windowTopClass: modalOptions.windowTopClass,\n windowClass: modalOptions.windowClass,\n windowTemplateUrl: modalOptions.windowTemplateUrl,\n ariaLabelledBy: modalOptions.ariaLabelledBy,\n ariaDescribedBy: modalOptions.ariaDescribedBy,\n size: modalOptions.size,\n openedClass: modalOptions.openedClass,\n appendTo: modalOptions.appendTo\n };\n\n var component = {};\n var ctrlInstance, ctrlInstantiate, ctrlLocals = {};\n\n if (modalOptions.component) {\n constructLocals(component, false, true, false);\n component.name = modalOptions.component;\n modal.component = component;\n } else if (modalOptions.controller) {\n constructLocals(ctrlLocals, true, false, true);\n\n // the third param will make the controller instantiate later,private api\n // @see https://github.com/angular/angular.js/blob/master/src/ng/controller.js#L126\n ctrlInstantiate = $controller(modalOptions.controller, ctrlLocals, true, modalOptions.controllerAs);\n if (modalOptions.controllerAs && modalOptions.bindToController) {\n ctrlInstance = ctrlInstantiate.instance;\n ctrlInstance.$close = modalScope.$close;\n ctrlInstance.$dismiss = modalScope.$dismiss;\n angular.extend(ctrlInstance, {\n $resolve: ctrlLocals.$scope.$resolve\n }, providedScope);\n }\n\n ctrlInstance = ctrlInstantiate();\n\n if (angular.isFunction(ctrlInstance.$onInit)) {\n ctrlInstance.$onInit();\n }\n }\n\n if (!modalOptions.component) {\n modal.content = tplAndVars[0];\n }\n\n $modalStack.open(modalInstance, modal);\n modalOpenedDeferred.resolve(true);\n\n function constructLocals(obj, template, instanceOnScope, injectable) {\n obj.$scope = modalScope;\n obj.$scope.$resolve = {};\n if (instanceOnScope) {\n obj.$scope.$uibModalInstance = modalInstance;\n } else {\n obj.$uibModalInstance = modalInstance;\n }\n\n var resolves = template ? tplAndVars[1] : tplAndVars;\n angular.forEach(resolves, function(value, key) {\n if (injectable) {\n obj[key] = value;\n }\n\n obj.$scope.$resolve[key] = value;\n });\n }\n }, function resolveError(reason) {\n modalOpenedDeferred.reject(reason);\n modalResultDeferred.reject(reason);\n })['finally'](function() {\n if (promiseChain === samePromise) {\n promiseChain = null;\n }\n });\n\n return modalInstance;\n };\n\n return $modal;\n }\n ]\n };\n\n return $modalProvider;\n });\n\nangular.module('ui.bootstrap.paging', [])\n/**\n * Helper internal service for generating common controller code between the\n * pager and pagination components\n */\n.factory('uibPaging', ['$parse', function($parse) {\n return {\n create: function(ctrl, $scope, $attrs) {\n ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;\n ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl\n ctrl._watchers = [];\n\n ctrl.init = function(ngModelCtrl, config) {\n ctrl.ngModelCtrl = ngModelCtrl;\n ctrl.config = config;\n\n ngModelCtrl.$render = function() {\n ctrl.render();\n };\n\n if ($attrs.itemsPerPage) {\n ctrl._watchers.push($scope.$parent.$watch($attrs.itemsPerPage, function(value) {\n ctrl.itemsPerPage = parseInt(value, 10);\n $scope.totalPages = ctrl.calculateTotalPages();\n ctrl.updatePage();\n }));\n } else {\n ctrl.itemsPerPage = config.itemsPerPage;\n }\n\n $scope.$watch('totalItems', function(newTotal, oldTotal) {\n if (angular.isDefined(newTotal) || newTotal !== oldTotal) {\n $scope.totalPages = ctrl.calculateTotalPages();\n ctrl.updatePage();\n }\n });\n };\n\n ctrl.calculateTotalPages = function() {\n var totalPages = ctrl.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / ctrl.itemsPerPage);\n return Math.max(totalPages || 0, 1);\n };\n\n ctrl.render = function() {\n $scope.page = parseInt(ctrl.ngModelCtrl.$viewValue, 10) || 1;\n };\n\n $scope.selectPage = function(page, evt) {\n if (evt) {\n evt.preventDefault();\n }\n\n var clickAllowed = !$scope.ngDisabled || !evt;\n if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {\n if (evt && evt.target) {\n evt.target.blur();\n }\n ctrl.ngModelCtrl.$setViewValue(page);\n ctrl.ngModelCtrl.$render();\n }\n };\n\n $scope.getText = function(key) {\n return $scope[key + 'Text'] || ctrl.config[key + 'Text'];\n };\n\n $scope.noPrevious = function() {\n return $scope.page === 1;\n };\n\n $scope.noNext = function() {\n return $scope.page === $scope.totalPages;\n };\n\n ctrl.updatePage = function() {\n ctrl.setNumPages($scope.$parent, $scope.totalPages); // Readonly variable\n\n if ($scope.page > $scope.totalPages) {\n $scope.selectPage($scope.totalPages);\n } else {\n ctrl.ngModelCtrl.$render();\n }\n };\n\n $scope.$on('$destroy', function() {\n while (ctrl._watchers.length) {\n ctrl._watchers.shift()();\n }\n });\n }\n };\n}]);\n\nangular.module('ui.bootstrap.pager', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\n\n.controller('UibPagerController', ['$scope', '$attrs', 'uibPaging', 'uibPagerConfig', function($scope, $attrs, uibPaging, uibPagerConfig) {\n $scope.align = angular.isDefined($attrs.align) ? $scope.$parent.$eval($attrs.align) : uibPagerConfig.align;\n\n uibPaging.create(this, $scope, $attrs);\n}])\n\n.constant('uibPagerConfig', {\n itemsPerPage: 10,\n previousText: '« Previous',\n nextText: 'Next »',\n align: true\n})\n\n.directive('uibPager', ['uibPagerConfig', function(uibPagerConfig) {\n return {\n scope: {\n totalItems: '=',\n previousText: '@',\n nextText: '@',\n ngDisabled: '='\n },\n require: ['uibPager', '?ngModel'],\n restrict: 'A',\n controller: 'UibPagerController',\n controllerAs: 'pager',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/pager/pager.html';\n },\n link: function(scope, element, attrs, ctrls) {\n element.addClass('pager');\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (!ngModelCtrl) {\n return; // do nothing if no ng-model\n }\n\n paginationCtrl.init(ngModelCtrl, uibPagerConfig);\n }\n };\n}]);\n\nangular.module('ui.bootstrap.pagination', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\n.controller('UibPaginationController', ['$scope', '$attrs', '$parse', 'uibPaging', 'uibPaginationConfig', function($scope, $attrs, $parse, uibPaging, uibPaginationConfig) {\n var ctrl = this;\n // Setup configuration parameters\n var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,\n rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,\n forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,\n boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers,\n pageLabel = angular.isDefined($attrs.pageLabel) ? function(idx) { return $scope.$parent.$eval($attrs.pageLabel, {$page: idx}); } : angular.identity;\n $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;\n $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;\n $attrs.$set('role', 'menu');\n\n uibPaging.create(this, $scope, $attrs);\n\n if ($attrs.maxSize) {\n ctrl._watchers.push($scope.$parent.$watch($parse($attrs.maxSize), function(value) {\n maxSize = parseInt(value, 10);\n ctrl.render();\n }));\n }\n\n // Create page object used in template\n function makePage(number, text, isActive) {\n return {\n number: number,\n text: text,\n active: isActive\n };\n }\n\n function getPages(currentPage, totalPages) {\n var pages = [];\n\n // Default page limits\n var startPage = 1, endPage = totalPages;\n var isMaxSized = angular.isDefined(maxSize) && maxSize < totalPages;\n\n // recompute if maxSize\n if (isMaxSized) {\n if (rotate) {\n // Current page is displayed in the middle of the visible ones\n startPage = Math.max(currentPage - Math.floor(maxSize / 2), 1);\n endPage = startPage + maxSize - 1;\n\n // Adjust if limit is exceeded\n if (endPage > totalPages) {\n endPage = totalPages;\n startPage = endPage - maxSize + 1;\n }\n } else {\n // Visible pages are paginated with maxSize\n startPage = (Math.ceil(currentPage / maxSize) - 1) * maxSize + 1;\n\n // Adjust last page if limit is exceeded\n endPage = Math.min(startPage + maxSize - 1, totalPages);\n }\n }\n\n // Add page number links\n for (var number = startPage; number <= endPage; number++) {\n var page = makePage(number, pageLabel(number), number === currentPage);\n pages.push(page);\n }\n\n // Add links to move between page sets\n if (isMaxSized && maxSize > 0 && (!rotate || forceEllipses || boundaryLinkNumbers)) {\n if (startPage > 1) {\n if (!boundaryLinkNumbers || startPage > 3) { //need ellipsis for all options unless range is too close to beginning\n var previousPageSet = makePage(startPage - 1, '...', false);\n pages.unshift(previousPageSet);\n }\n if (boundaryLinkNumbers) {\n if (startPage === 3) { //need to replace ellipsis when the buttons would be sequential\n var secondPageLink = makePage(2, '2', false);\n pages.unshift(secondPageLink);\n }\n //add the first page\n var firstPageLink = makePage(1, '1', false);\n pages.unshift(firstPageLink);\n }\n }\n\n if (endPage < totalPages) {\n if (!boundaryLinkNumbers || endPage < totalPages - 2) { //need ellipsis for all options unless range is too close to end\n var nextPageSet = makePage(endPage + 1, '...', false);\n pages.push(nextPageSet);\n }\n if (boundaryLinkNumbers) {\n if (endPage === totalPages - 2) { //need to replace ellipsis when the buttons would be sequential\n var secondToLastPageLink = makePage(totalPages - 1, totalPages - 1, false);\n pages.push(secondToLastPageLink);\n }\n //add the last page\n var lastPageLink = makePage(totalPages, totalPages, false);\n pages.push(lastPageLink);\n }\n }\n }\n return pages;\n }\n\n var originalRender = this.render;\n this.render = function() {\n originalRender();\n if ($scope.page > 0 && $scope.page <= $scope.totalPages) {\n $scope.pages = getPages($scope.page, $scope.totalPages);\n }\n };\n}])\n\n.constant('uibPaginationConfig', {\n itemsPerPage: 10,\n boundaryLinks: false,\n boundaryLinkNumbers: false,\n directionLinks: true,\n firstText: 'First',\n previousText: 'Previous',\n nextText: 'Next',\n lastText: 'Last',\n rotate: true,\n forceEllipses: false\n})\n\n.directive('uibPagination', ['$parse', 'uibPaginationConfig', function($parse, uibPaginationConfig) {\n return {\n scope: {\n totalItems: '=',\n firstText: '@',\n previousText: '@',\n nextText: '@',\n lastText: '@',\n ngDisabled:'='\n },\n require: ['uibPagination', '?ngModel'],\n restrict: 'A',\n controller: 'UibPaginationController',\n controllerAs: 'pagination',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/pagination/pagination.html';\n },\n link: function(scope, element, attrs, ctrls) {\n element.addClass('pagination');\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (!ngModelCtrl) {\n return; // do nothing if no ng-model\n }\n\n paginationCtrl.init(ngModelCtrl, uibPaginationConfig);\n }\n };\n}]);\n\n/**\n * The following features are still outstanding: animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, html tooltips, and selector delegation.\n */\nangular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.stackedMap'])\n\n/**\n * The $tooltip service creates tooltip- and popover-like directives as well as\n * houses global options for them.\n */\n.provider('$uibTooltip', function() {\n // The default options tooltip and popover.\n var defaultOptions = {\n placement: 'top',\n placementClassPrefix: '',\n animation: true,\n popupDelay: 0,\n popupCloseDelay: 0,\n useContentExp: false\n };\n\n // Default hide triggers for each show trigger\n var triggerMap = {\n 'mouseenter': 'mouseleave',\n 'click': 'click',\n 'outsideClick': 'outsideClick',\n 'focus': 'blur',\n 'none': ''\n };\n\n // The options specified to the provider globally.\n var globalOptions = {};\n\n /**\n * `options({})` allows global configuration of all tooltips in the\n * application.\n *\n * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {\n * // place tooltips left instead of top by default\n * $tooltipProvider.options( { placement: 'left' } );\n * });\n */\n\tthis.options = function(value) {\n\t\tangular.extend(globalOptions, value);\n\t};\n\n /**\n * This allows you to extend the set of trigger mappings available. E.g.:\n *\n * $tooltipProvider.setTriggers( { 'openTrigger': 'closeTrigger' } );\n */\n this.setTriggers = function setTriggers(triggers) {\n angular.extend(triggerMap, triggers);\n };\n\n /**\n * This is a helper function for translating camel-case to snake_case.\n */\n function snake_case(name) {\n var regexp = /[A-Z]/g;\n var separator = '-';\n return name.replace(regexp, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n }\n\n /**\n * Returns the actual instance of the $tooltip service.\n * TODO support multiple triggers\n */\n this.$get = ['$window', '$compile', '$timeout', '$document', '$uibPosition', '$interpolate', '$rootScope', '$parse', '$$stackedMap', function($window, $compile, $timeout, $document, $position, $interpolate, $rootScope, $parse, $$stackedMap) {\n var openedTooltips = $$stackedMap.createNew();\n $document.on('keyup', keypressListener);\n\n $rootScope.$on('$destroy', function() {\n $document.off('keyup', keypressListener);\n });\n\n function keypressListener(e) {\n if (e.which === 27) {\n var last = openedTooltips.top();\n if (last) {\n last.value.close();\n last = null;\n }\n }\n }\n\n return function $tooltip(ttType, prefix, defaultTriggerShow, options) {\n options = angular.extend({}, defaultOptions, globalOptions, options);\n\n /**\n * Returns an object of show and hide triggers.\n *\n * If a trigger is supplied,\n * it is used to show the tooltip; otherwise, it will use the `trigger`\n * option passed to the `$tooltipProvider.options` method; else it will\n * default to the trigger supplied to this directive factory.\n *\n * The hide trigger is based on the show trigger. If the `trigger` option\n * was passed to the `$tooltipProvider.options` method, it will use the\n * mapped trigger from `triggerMap` or the passed trigger if the map is\n * undefined; otherwise, it uses the `triggerMap` value of the show\n * trigger; else it will just use the show trigger.\n */\n function getTriggers(trigger) {\n var show = (trigger || options.trigger || defaultTriggerShow).split(' ');\n var hide = show.map(function(trigger) {\n return triggerMap[trigger] || trigger;\n });\n return {\n show: show,\n hide: hide\n };\n }\n\n var directiveName = snake_case(ttType);\n\n var startSym = $interpolate.startSymbol();\n var endSym = $interpolate.endSymbol();\n var template =\n '
    ' +\n '
    ';\n\n return {\n compile: function(tElem, tAttrs) {\n var tooltipLinker = $compile(template);\n\n return function link(scope, element, attrs, tooltipCtrl) {\n var tooltip;\n var tooltipLinkedScope;\n var transitionTimeout;\n var showTimeout;\n var hideTimeout;\n var positionTimeout;\n var adjustmentTimeout;\n var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;\n var triggers = getTriggers(undefined);\n var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);\n var ttScope = scope.$new(true);\n var repositionScheduled = false;\n var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;\n var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;\n var observers = [];\n var lastPlacement;\n\n var positionTooltip = function() {\n // check if tooltip exists and is not empty\n if (!tooltip || !tooltip.html()) { return; }\n\n if (!positionTimeout) {\n positionTimeout = $timeout(function() {\n var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);\n var initialHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\n var elementPos = appendToBody ? $position.offset(element) : $position.position(element);\n tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });\n var placementClasses = ttPosition.placement.split('-');\n\n if (!tooltip.hasClass(placementClasses[0])) {\n tooltip.removeClass(lastPlacement.split('-')[0]);\n tooltip.addClass(placementClasses[0]);\n }\n\n if (!tooltip.hasClass(options.placementClassPrefix + ttPosition.placement)) {\n tooltip.removeClass(options.placementClassPrefix + lastPlacement);\n tooltip.addClass(options.placementClassPrefix + ttPosition.placement);\n }\n\n adjustmentTimeout = $timeout(function() {\n var currentHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\n var adjustment = $position.adjustTop(placementClasses, elementPos, initialHeight, currentHeight);\n if (adjustment) {\n tooltip.css(adjustment);\n }\n adjustmentTimeout = null;\n }, 0, false);\n\n // first time through tt element will have the\n // uib-position-measure class or if the placement\n // has changed we need to position the arrow.\n if (tooltip.hasClass('uib-position-measure')) {\n $position.positionArrow(tooltip, ttPosition.placement);\n tooltip.removeClass('uib-position-measure');\n } else if (lastPlacement !== ttPosition.placement) {\n $position.positionArrow(tooltip, ttPosition.placement);\n }\n lastPlacement = ttPosition.placement;\n\n positionTimeout = null;\n }, 0, false);\n }\n };\n\n // Set up the correct scope to allow transclusion later\n ttScope.origScope = scope;\n\n // By default, the tooltip is not open.\n // TODO add ability to start tooltip opened\n ttScope.isOpen = false;\n\n function toggleTooltipBind() {\n if (!ttScope.isOpen) {\n showTooltipBind();\n } else {\n hideTooltipBind();\n }\n }\n\n // Show the tooltip with delay if specified, otherwise show it immediately\n function showTooltipBind() {\n if (hasEnableExp && !scope.$eval(attrs[prefix + 'Enable'])) {\n return;\n }\n\n cancelHide();\n prepareTooltip();\n\n if (ttScope.popupDelay) {\n // Do nothing if the tooltip was already scheduled to pop-up.\n // This happens if show is triggered multiple times before any hide is triggered.\n if (!showTimeout) {\n showTimeout = $timeout(show, ttScope.popupDelay, false);\n }\n } else {\n show();\n }\n }\n\n function hideTooltipBind() {\n cancelShow();\n\n if (ttScope.popupCloseDelay) {\n if (!hideTimeout) {\n hideTimeout = $timeout(hide, ttScope.popupCloseDelay, false);\n }\n } else {\n hide();\n }\n }\n\n // Show the tooltip popup element.\n function show() {\n cancelShow();\n cancelHide();\n\n // Don't show empty tooltips.\n if (!ttScope.content) {\n return angular.noop;\n }\n\n createTooltip();\n\n // And show the tooltip.\n ttScope.$evalAsync(function() {\n ttScope.isOpen = true;\n assignIsOpen(true);\n positionTooltip();\n });\n }\n\n function cancelShow() {\n if (showTimeout) {\n $timeout.cancel(showTimeout);\n showTimeout = null;\n }\n\n if (positionTimeout) {\n $timeout.cancel(positionTimeout);\n positionTimeout = null;\n }\n }\n\n // Hide the tooltip popup element.\n function hide() {\n if (!ttScope) {\n return;\n }\n\n // First things first: we don't show it anymore.\n ttScope.$evalAsync(function() {\n if (ttScope) {\n ttScope.isOpen = false;\n assignIsOpen(false);\n // And now we remove it from the DOM. However, if we have animation, we\n // need to wait for it to expire beforehand.\n // FIXME: this is a placeholder for a port of the transitions library.\n // The fade transition in TWBS is 150ms.\n if (ttScope.animation) {\n if (!transitionTimeout) {\n transitionTimeout = $timeout(removeTooltip, 150, false);\n }\n } else {\n removeTooltip();\n }\n }\n });\n }\n\n function cancelHide() {\n if (hideTimeout) {\n $timeout.cancel(hideTimeout);\n hideTimeout = null;\n }\n\n if (transitionTimeout) {\n $timeout.cancel(transitionTimeout);\n transitionTimeout = null;\n }\n }\n\n function createTooltip() {\n // There can only be one tooltip element per directive shown at once.\n if (tooltip) {\n return;\n }\n\n tooltipLinkedScope = ttScope.$new();\n tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {\n if (appendToBody) {\n $document.find('body').append(tooltip);\n } else {\n element.after(tooltip);\n }\n });\n\n openedTooltips.add(ttScope, {\n close: hide\n });\n\n prepObservers();\n }\n\n function removeTooltip() {\n cancelShow();\n cancelHide();\n unregisterObservers();\n\n if (tooltip) {\n tooltip.remove();\n \n tooltip = null;\n if (adjustmentTimeout) {\n $timeout.cancel(adjustmentTimeout);\n }\n }\n\n openedTooltips.remove(ttScope);\n \n if (tooltipLinkedScope) {\n tooltipLinkedScope.$destroy();\n tooltipLinkedScope = null;\n }\n }\n\n /**\n * Set the initial scope values. Once\n * the tooltip is created, the observers\n * will be added to keep things in sync.\n */\n function prepareTooltip() {\n ttScope.title = attrs[prefix + 'Title'];\n if (contentParse) {\n ttScope.content = contentParse(scope);\n } else {\n ttScope.content = attrs[ttType];\n }\n\n ttScope.popupClass = attrs[prefix + 'Class'];\n ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;\n var placement = $position.parsePlacement(ttScope.placement);\n lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];\n\n var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);\n var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);\n ttScope.popupDelay = !isNaN(delay) ? delay : options.popupDelay;\n ttScope.popupCloseDelay = !isNaN(closeDelay) ? closeDelay : options.popupCloseDelay;\n }\n\n function assignIsOpen(isOpen) {\n if (isOpenParse && angular.isFunction(isOpenParse.assign)) {\n isOpenParse.assign(scope, isOpen);\n }\n }\n\n ttScope.contentExp = function() {\n return ttScope.content;\n };\n\n /**\n * Observe the relevant attributes.\n */\n attrs.$observe('disabled', function(val) {\n if (val) {\n cancelShow();\n }\n\n if (val && ttScope.isOpen) {\n hide();\n }\n });\n\n if (isOpenParse) {\n scope.$watch(isOpenParse, function(val) {\n if (ttScope && !val === ttScope.isOpen) {\n toggleTooltipBind();\n }\n });\n }\n\n function prepObservers() {\n observers.length = 0;\n\n if (contentParse) {\n observers.push(\n scope.$watch(contentParse, function(val) {\n ttScope.content = val;\n if (!val && ttScope.isOpen) {\n hide();\n }\n })\n );\n\n observers.push(\n tooltipLinkedScope.$watch(function() {\n if (!repositionScheduled) {\n repositionScheduled = true;\n tooltipLinkedScope.$$postDigest(function() {\n repositionScheduled = false;\n if (ttScope && ttScope.isOpen) {\n positionTooltip();\n }\n });\n }\n })\n );\n } else {\n observers.push(\n attrs.$observe(ttType, function(val) {\n ttScope.content = val;\n if (!val && ttScope.isOpen) {\n hide();\n } else {\n positionTooltip();\n }\n })\n );\n }\n\n observers.push(\n attrs.$observe(prefix + 'Title', function(val) {\n ttScope.title = val;\n if (ttScope.isOpen) {\n positionTooltip();\n }\n })\n );\n\n observers.push(\n attrs.$observe(prefix + 'Placement', function(val) {\n ttScope.placement = val ? val : options.placement;\n if (ttScope.isOpen) {\n positionTooltip();\n }\n })\n );\n }\n\n function unregisterObservers() {\n if (observers.length) {\n angular.forEach(observers, function(observer) {\n observer();\n });\n observers.length = 0;\n }\n }\n\n // hide tooltips/popovers for outsideClick trigger\n function bodyHideTooltipBind(e) {\n if (!ttScope || !ttScope.isOpen || !tooltip) {\n return;\n }\n // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked\n if (!element[0].contains(e.target) && !tooltip[0].contains(e.target)) {\n hideTooltipBind();\n }\n }\n\n // KeyboardEvent handler to hide the tooltip on Escape key press\n function hideOnEscapeKey(e) {\n if (e.which === 27) {\n hideTooltipBind();\n }\n }\n\n var unregisterTriggers = function() {\n triggers.show.forEach(function(trigger) {\n if (trigger === 'outsideClick') {\n element.off('click', toggleTooltipBind);\n } else {\n element.off(trigger, showTooltipBind);\n element.off(trigger, toggleTooltipBind);\n }\n element.off('keypress', hideOnEscapeKey);\n });\n triggers.hide.forEach(function(trigger) {\n if (trigger === 'outsideClick') {\n $document.off('click', bodyHideTooltipBind);\n } else {\n element.off(trigger, hideTooltipBind);\n }\n });\n };\n\n function prepTriggers() {\n var showTriggers = [], hideTriggers = [];\n var val = scope.$eval(attrs[prefix + 'Trigger']);\n unregisterTriggers();\n\n if (angular.isObject(val)) {\n Object.keys(val).forEach(function(key) {\n showTriggers.push(key);\n hideTriggers.push(val[key]);\n });\n triggers = {\n show: showTriggers,\n hide: hideTriggers\n };\n } else {\n triggers = getTriggers(val);\n }\n\n if (triggers.show !== 'none') {\n triggers.show.forEach(function(trigger, idx) {\n if (trigger === 'outsideClick') {\n element.on('click', toggleTooltipBind);\n $document.on('click', bodyHideTooltipBind);\n } else if (trigger === triggers.hide[idx]) {\n element.on(trigger, toggleTooltipBind);\n } else if (trigger) {\n element.on(trigger, showTooltipBind);\n element.on(triggers.hide[idx], hideTooltipBind);\n }\n element.on('keypress', hideOnEscapeKey);\n });\n }\n }\n\n prepTriggers();\n\n var animation = scope.$eval(attrs[prefix + 'Animation']);\n ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;\n\n var appendToBodyVal;\n var appendKey = prefix + 'AppendToBody';\n if (appendKey in attrs && attrs[appendKey] === undefined) {\n appendToBodyVal = true;\n } else {\n appendToBodyVal = scope.$eval(attrs[appendKey]);\n }\n\n appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;\n\n // Make sure tooltip is destroyed and removed.\n scope.$on('$destroy', function onDestroyTooltip() {\n unregisterTriggers();\n removeTooltip();\n ttScope = null;\n });\n };\n }\n };\n };\n }];\n})\n\n// This is mostly ngInclude code but with a custom scope\n.directive('uibTooltipTemplateTransclude', [\n '$animate', '$sce', '$compile', '$templateRequest',\nfunction ($animate, $sce, $compile, $templateRequest) {\n return {\n link: function(scope, elem, attrs) {\n var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);\n\n var changeCounter = 0,\n currentScope,\n previousElement,\n currentElement;\n\n var cleanupLastIncludeContent = function() {\n if (previousElement) {\n previousElement.remove();\n previousElement = null;\n }\n\n if (currentScope) {\n currentScope.$destroy();\n currentScope = null;\n }\n\n if (currentElement) {\n $animate.leave(currentElement).then(function() {\n previousElement = null;\n });\n previousElement = currentElement;\n currentElement = null;\n }\n };\n\n scope.$watch($sce.parseAsResourceUrl(attrs.uibTooltipTemplateTransclude), function(src) {\n var thisChangeId = ++changeCounter;\n\n if (src) {\n //set the 2nd param to true to ignore the template request error so that the inner\n //contents and scope can be cleaned up.\n $templateRequest(src, true).then(function(response) {\n if (thisChangeId !== changeCounter) { return; }\n var newScope = origScope.$new();\n var template = response;\n\n var clone = $compile(template)(newScope, function(clone) {\n cleanupLastIncludeContent();\n $animate.enter(clone, elem);\n });\n\n currentScope = newScope;\n currentElement = clone;\n\n currentScope.$emit('$includeContentLoaded', src);\n }, function() {\n if (thisChangeId === changeCounter) {\n cleanupLastIncludeContent();\n scope.$emit('$includeContentError', src);\n }\n });\n scope.$emit('$includeContentRequested', src);\n } else {\n cleanupLastIncludeContent();\n }\n });\n\n scope.$on('$destroy', cleanupLastIncludeContent);\n }\n };\n}])\n\n/**\n * Note that it's intentional that these classes are *not* applied through $animate.\n * They must not be animated as they're expected to be present on the tooltip on\n * initialization.\n */\n.directive('uibTooltipClasses', ['$uibPosition', function($uibPosition) {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n // need to set the primary position so the\n // arrow has space during position measure.\n // tooltip.positionTooltip()\n if (scope.placement) {\n // // There are no top-left etc... classes\n // // in TWBS, so we need the primary position.\n var position = $uibPosition.parsePlacement(scope.placement);\n element.addClass(position[0]);\n }\n\n if (scope.popupClass) {\n element.addClass(scope.popupClass);\n }\n\n if (scope.animation) {\n element.addClass(attrs.tooltipAnimationClass);\n }\n }\n };\n}])\n\n.directive('uibTooltipPopup', function() {\n return {\n restrict: 'A',\n scope: { content: '@' },\n templateUrl: 'uib/template/tooltip/tooltip-popup.html'\n };\n})\n\n.directive('uibTooltip', [ '$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltip', 'tooltip', 'mouseenter');\n}])\n\n.directive('uibTooltipTemplatePopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&', originScope: '&' },\n templateUrl: 'uib/template/tooltip/tooltip-template-popup.html'\n };\n})\n\n.directive('uibTooltipTemplate', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltipTemplate', 'tooltip', 'mouseenter', {\n useContentExp: true\n });\n}])\n\n.directive('uibTooltipHtmlPopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&' },\n templateUrl: 'uib/template/tooltip/tooltip-html-popup.html'\n };\n})\n\n.directive('uibTooltipHtml', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltipHtml', 'tooltip', 'mouseenter', {\n useContentExp: true\n });\n}]);\n\n/**\n * The following features are still outstanding: popup delay, animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, and selector delegatation.\n */\nangular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])\n\n.directive('uibPopoverTemplatePopup', function() {\n return {\n restrict: 'A',\n scope: { uibTitle: '@', contentExp: '&', originScope: '&' },\n templateUrl: 'uib/template/popover/popover-template.html'\n };\n})\n\n.directive('uibPopoverTemplate', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopoverTemplate', 'popover', 'click', {\n useContentExp: true\n });\n}])\n\n.directive('uibPopoverHtmlPopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&', uibTitle: '@' },\n templateUrl: 'uib/template/popover/popover-html.html'\n };\n})\n\n.directive('uibPopoverHtml', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopoverHtml', 'popover', 'click', {\n useContentExp: true\n });\n}])\n\n.directive('uibPopoverPopup', function() {\n return {\n restrict: 'A',\n scope: { uibTitle: '@', content: '@' },\n templateUrl: 'uib/template/popover/popover.html'\n };\n})\n\n.directive('uibPopover', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibPopover', 'popover', 'click');\n}]);\n\nangular.module('ui.bootstrap.progressbar', [])\n\n.constant('uibProgressConfig', {\n animate: true,\n max: 100\n})\n\n.controller('UibProgressController', ['$scope', '$attrs', 'uibProgressConfig', function($scope, $attrs, progressConfig) {\n var self = this,\n animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;\n\n this.bars = [];\n $scope.max = getMaxOrDefault();\n\n this.addBar = function(bar, element, attrs) {\n if (!animate) {\n element.css({'transition': 'none'});\n }\n\n this.bars.push(bar);\n\n bar.max = getMaxOrDefault();\n bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';\n\n bar.$watch('value', function(value) {\n bar.recalculatePercentage();\n });\n\n bar.recalculatePercentage = function() {\n var totalPercentage = self.bars.reduce(function(total, bar) {\n bar.percent = +(100 * bar.value / bar.max).toFixed(2);\n return total + bar.percent;\n }, 0);\n\n if (totalPercentage > 100) {\n bar.percent -= totalPercentage - 100;\n }\n };\n\n bar.$on('$destroy', function() {\n element = null;\n self.removeBar(bar);\n });\n };\n\n this.removeBar = function(bar) {\n this.bars.splice(this.bars.indexOf(bar), 1);\n this.bars.forEach(function (bar) {\n bar.recalculatePercentage();\n });\n };\n\n //$attrs.$observe('maxParam', function(maxParam) {\n $scope.$watch('maxParam', function(maxParam) {\n self.bars.forEach(function(bar) {\n bar.max = getMaxOrDefault();\n bar.recalculatePercentage();\n });\n });\n\n function getMaxOrDefault () {\n return angular.isDefined($scope.maxParam) ? $scope.maxParam : progressConfig.max;\n }\n}])\n\n.directive('uibProgress', function() {\n return {\n replace: true,\n transclude: true,\n controller: 'UibProgressController',\n require: 'uibProgress',\n scope: {\n maxParam: '=?max'\n },\n templateUrl: 'uib/template/progressbar/progress.html'\n };\n})\n\n.directive('uibBar', function() {\n return {\n replace: true,\n transclude: true,\n require: '^uibProgress',\n scope: {\n value: '=',\n type: '@'\n },\n templateUrl: 'uib/template/progressbar/bar.html',\n link: function(scope, element, attrs, progressCtrl) {\n progressCtrl.addBar(scope, element, attrs);\n }\n };\n})\n\n.directive('uibProgressbar', function() {\n return {\n replace: true,\n transclude: true,\n controller: 'UibProgressController',\n scope: {\n value: '=',\n maxParam: '=?max',\n type: '@'\n },\n templateUrl: 'uib/template/progressbar/progressbar.html',\n link: function(scope, element, attrs, progressCtrl) {\n progressCtrl.addBar(scope, angular.element(element.children()[0]), {title: attrs.title});\n }\n };\n});\n\nangular.module('ui.bootstrap.rating', [])\n\n.constant('uibRatingConfig', {\n max: 5,\n stateOn: null,\n stateOff: null,\n enableReset: true,\n titles: ['one', 'two', 'three', 'four', 'five']\n})\n\n.controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {\n var ngModelCtrl = { $setViewValue: angular.noop },\n self = this;\n\n this.init = function(ngModelCtrl_) {\n ngModelCtrl = ngModelCtrl_;\n ngModelCtrl.$render = this.render;\n\n ngModelCtrl.$formatters.push(function(value) {\n if (angular.isNumber(value) && value << 0 !== value) {\n value = Math.round(value);\n }\n\n return value;\n });\n\n this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;\n this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;\n this.enableReset = angular.isDefined($attrs.enableReset) ?\n $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset;\n var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles;\n this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?\n tmpTitles : ratingConfig.titles;\n\n var ratingStates = angular.isDefined($attrs.ratingStates) ?\n $scope.$parent.$eval($attrs.ratingStates) :\n new Array(angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max);\n $scope.range = this.buildTemplateObjects(ratingStates);\n };\n\n this.buildTemplateObjects = function(states) {\n for (var i = 0, n = states.length; i < n; i++) {\n states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff, title: this.getTitle(i) }, states[i]);\n }\n return states;\n };\n\n this.getTitle = function(index) {\n if (index >= this.titles.length) {\n return index + 1;\n }\n\n return this.titles[index];\n };\n\n $scope.rate = function(value) {\n if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {\n var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value;\n ngModelCtrl.$setViewValue(newViewValue);\n ngModelCtrl.$render();\n }\n };\n\n $scope.enter = function(value) {\n if (!$scope.readonly) {\n $scope.value = value;\n }\n $scope.onHover({value: value});\n };\n\n $scope.reset = function() {\n $scope.value = ngModelCtrl.$viewValue;\n $scope.onLeave();\n };\n\n $scope.onKeydown = function(evt) {\n if (/(37|38|39|40)/.test(evt.which)) {\n evt.preventDefault();\n evt.stopPropagation();\n $scope.rate($scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1));\n }\n };\n\n this.render = function() {\n $scope.value = ngModelCtrl.$viewValue;\n $scope.title = self.getTitle($scope.value - 1);\n };\n}])\n\n.directive('uibRating', function() {\n return {\n require: ['uibRating', 'ngModel'],\n restrict: 'A',\n scope: {\n readonly: '=?readOnly',\n onHover: '&',\n onLeave: '&'\n },\n controller: 'UibRatingController',\n templateUrl: 'uib/template/rating/rating.html',\n link: function(scope, element, attrs, ctrls) {\n var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n ratingCtrl.init(ngModelCtrl);\n }\n };\n});\n\nangular.module('ui.bootstrap.tabs', [])\n\n.controller('UibTabsetController', ['$scope', function ($scope) {\n var ctrl = this,\n oldIndex;\n ctrl.tabs = [];\n\n ctrl.select = function(index, evt) {\n if (!destroyed) {\n var previousIndex = findTabIndex(oldIndex);\n var previousSelected = ctrl.tabs[previousIndex];\n if (previousSelected) {\n previousSelected.tab.onDeselect({\n $event: evt,\n $selectedIndex: index\n });\n if (evt && evt.isDefaultPrevented()) {\n return;\n }\n previousSelected.tab.active = false;\n }\n\n var selected = ctrl.tabs[index];\n if (selected) {\n selected.tab.onSelect({\n $event: evt\n });\n selected.tab.active = true;\n ctrl.active = selected.index;\n oldIndex = selected.index;\n } else if (!selected && angular.isDefined(oldIndex)) {\n ctrl.active = null;\n oldIndex = null;\n }\n }\n };\n\n ctrl.addTab = function addTab(tab) {\n ctrl.tabs.push({\n tab: tab,\n index: tab.index\n });\n ctrl.tabs.sort(function(t1, t2) {\n if (t1.index > t2.index) {\n return 1;\n }\n\n if (t1.index < t2.index) {\n return -1;\n }\n\n return 0;\n });\n\n if (tab.index === ctrl.active || !angular.isDefined(ctrl.active) && ctrl.tabs.length === 1) {\n var newActiveIndex = findTabIndex(tab.index);\n ctrl.select(newActiveIndex);\n }\n };\n\n ctrl.removeTab = function removeTab(tab) {\n var index;\n for (var i = 0; i < ctrl.tabs.length; i++) {\n if (ctrl.tabs[i].tab === tab) {\n index = i;\n break;\n }\n }\n\n if (ctrl.tabs[index].index === ctrl.active) {\n var newActiveTabIndex = index === ctrl.tabs.length - 1 ?\n index - 1 : index + 1 % ctrl.tabs.length;\n ctrl.select(newActiveTabIndex);\n }\n\n ctrl.tabs.splice(index, 1);\n };\n\n $scope.$watch('tabset.active', function(val) {\n if (angular.isDefined(val) && val !== oldIndex) {\n ctrl.select(findTabIndex(val));\n }\n });\n\n var destroyed;\n $scope.$on('$destroy', function() {\n destroyed = true;\n });\n\n function findTabIndex(index) {\n for (var i = 0; i < ctrl.tabs.length; i++) {\n if (ctrl.tabs[i].index === index) {\n return i;\n }\n }\n }\n}])\n\n.directive('uibTabset', function() {\n return {\n transclude: true,\n replace: true,\n scope: {},\n bindToController: {\n active: '=?',\n type: '@'\n },\n controller: 'UibTabsetController',\n controllerAs: 'tabset',\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/tabs/tabset.html';\n },\n link: function(scope, element, attrs) {\n scope.vertical = angular.isDefined(attrs.vertical) ?\n scope.$parent.$eval(attrs.vertical) : false;\n scope.justified = angular.isDefined(attrs.justified) ?\n scope.$parent.$eval(attrs.justified) : false;\n }\n };\n})\n\n.directive('uibTab', ['$parse', function($parse) {\n return {\n require: '^uibTabset',\n replace: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'uib/template/tabs/tab.html';\n },\n transclude: true,\n scope: {\n heading: '@',\n index: '=?',\n classes: '@?',\n onSelect: '&select', //This callback is called in contentHeadingTransclude\n //once it inserts the tab's content into the dom\n onDeselect: '&deselect'\n },\n controller: function() {\n //Empty controller so other directives can require being 'under' a tab\n },\n controllerAs: 'tab',\n link: function(scope, elm, attrs, tabsetCtrl, transclude) {\n scope.disabled = false;\n if (attrs.disable) {\n scope.$parent.$watch($parse(attrs.disable), function(value) {\n scope.disabled = !! value;\n });\n }\n\n if (angular.isUndefined(attrs.index)) {\n if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {\n scope.index = Math.max.apply(null, tabsetCtrl.tabs.map(function(t) { return t.index; })) + 1;\n } else {\n scope.index = 0;\n }\n }\n\n if (angular.isUndefined(attrs.classes)) {\n scope.classes = '';\n }\n\n scope.select = function(evt) {\n if (!scope.disabled) {\n var index;\n for (var i = 0; i < tabsetCtrl.tabs.length; i++) {\n if (tabsetCtrl.tabs[i].tab === scope) {\n index = i;\n break;\n }\n }\n\n tabsetCtrl.select(index, evt);\n }\n };\n\n tabsetCtrl.addTab(scope);\n scope.$on('$destroy', function() {\n tabsetCtrl.removeTab(scope);\n });\n\n //We need to transclude later, once the content container is ready.\n //when this link happens, we're inside a tab heading.\n scope.$transcludeFn = transclude;\n }\n };\n}])\n\n.directive('uibTabHeadingTransclude', function() {\n return {\n restrict: 'A',\n require: '^uibTab',\n link: function(scope, elm) {\n scope.$watch('headingElement', function updateHeadingElement(heading) {\n if (heading) {\n elm.html('');\n elm.append(heading);\n }\n });\n }\n };\n})\n\n.directive('uibTabContentTransclude', function() {\n return {\n restrict: 'A',\n require: '^uibTabset',\n link: function(scope, elm, attrs) {\n var tab = scope.$eval(attrs.uibTabContentTransclude).tab;\n\n //Now our tab is ready to be transcluded: both the tab heading area\n //and the tab content area are loaded. Transclude 'em both.\n tab.$transcludeFn(tab.$parent, function(contents) {\n angular.forEach(contents, function(node) {\n if (isTabHeading(node)) {\n //Let tabHeadingTransclude know.\n tab.headingElement = node;\n } else {\n elm.append(node);\n }\n });\n });\n }\n };\n\n function isTabHeading(node) {\n return node.tagName && (\n node.hasAttribute('uib-tab-heading') ||\n node.hasAttribute('data-uib-tab-heading') ||\n node.hasAttribute('x-uib-tab-heading') ||\n node.tagName.toLowerCase() === 'uib-tab-heading' ||\n node.tagName.toLowerCase() === 'data-uib-tab-heading' ||\n node.tagName.toLowerCase() === 'x-uib-tab-heading' ||\n node.tagName.toLowerCase() === 'uib:tab-heading'\n );\n }\n});\n\nangular.module('ui.bootstrap.timepicker', [])\n\n.constant('uibTimepickerConfig', {\n hourStep: 1,\n minuteStep: 1,\n secondStep: 1,\n showMeridian: true,\n showSeconds: false,\n meridians: null,\n readonlyInput: false,\n mousewheel: true,\n arrowkeys: true,\n showSpinners: true,\n templateUrl: 'uib/template/timepicker/timepicker.html'\n})\n\n.controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {\n var hoursModelCtrl, minutesModelCtrl, secondsModelCtrl;\n var selected = new Date(),\n watchers = [],\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl\n meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS,\n padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;\n\n $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;\n $element.removeAttr('tabindex');\n\n this.init = function(ngModelCtrl_, inputs) {\n ngModelCtrl = ngModelCtrl_;\n ngModelCtrl.$render = this.render;\n\n ngModelCtrl.$formatters.unshift(function(modelValue) {\n return modelValue ? new Date(modelValue) : null;\n });\n\n var hoursInputEl = inputs.eq(0),\n minutesInputEl = inputs.eq(1),\n secondsInputEl = inputs.eq(2);\n\n hoursModelCtrl = hoursInputEl.controller('ngModel');\n minutesModelCtrl = minutesInputEl.controller('ngModel');\n secondsModelCtrl = secondsInputEl.controller('ngModel');\n\n var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;\n\n if (mousewheel) {\n this.setupMousewheelEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n }\n\n var arrowkeys = angular.isDefined($attrs.arrowkeys) ? $scope.$parent.$eval($attrs.arrowkeys) : timepickerConfig.arrowkeys;\n if (arrowkeys) {\n this.setupArrowkeyEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n }\n\n $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;\n this.setupInputEvents(hoursInputEl, minutesInputEl, secondsInputEl);\n };\n\n var hourStep = timepickerConfig.hourStep;\n if ($attrs.hourStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.hourStep), function(value) {\n hourStep = +value;\n }));\n }\n\n var minuteStep = timepickerConfig.minuteStep;\n if ($attrs.minuteStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.minuteStep), function(value) {\n minuteStep = +value;\n }));\n }\n\n var min;\n watchers.push($scope.$parent.$watch($parse($attrs.min), function(value) {\n var dt = new Date(value);\n min = isNaN(dt) ? undefined : dt;\n }));\n\n var max;\n watchers.push($scope.$parent.$watch($parse($attrs.max), function(value) {\n var dt = new Date(value);\n max = isNaN(dt) ? undefined : dt;\n }));\n\n var disabled = false;\n if ($attrs.ngDisabled) {\n watchers.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {\n disabled = value;\n }));\n }\n\n $scope.noIncrementHours = function() {\n var incrementedSelected = addMinutes(selected, hourStep * 60);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementHours = function() {\n var decrementedSelected = addMinutes(selected, -hourStep * 60);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noIncrementMinutes = function() {\n var incrementedSelected = addMinutes(selected, minuteStep);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementMinutes = function() {\n var decrementedSelected = addMinutes(selected, -minuteStep);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noIncrementSeconds = function() {\n var incrementedSelected = addSeconds(selected, secondStep);\n return disabled || incrementedSelected > max ||\n incrementedSelected < selected && incrementedSelected < min;\n };\n\n $scope.noDecrementSeconds = function() {\n var decrementedSelected = addSeconds(selected, -secondStep);\n return disabled || decrementedSelected < min ||\n decrementedSelected > selected && decrementedSelected > max;\n };\n\n $scope.noToggleMeridian = function() {\n if (selected.getHours() < 12) {\n return disabled || addMinutes(selected, 12 * 60) > max;\n }\n\n return disabled || addMinutes(selected, -12 * 60) < min;\n };\n\n var secondStep = timepickerConfig.secondStep;\n if ($attrs.secondStep) {\n watchers.push($scope.$parent.$watch($parse($attrs.secondStep), function(value) {\n secondStep = +value;\n }));\n }\n\n $scope.showSeconds = timepickerConfig.showSeconds;\n if ($attrs.showSeconds) {\n watchers.push($scope.$parent.$watch($parse($attrs.showSeconds), function(value) {\n $scope.showSeconds = !!value;\n }));\n }\n\n // 12H / 24H mode\n $scope.showMeridian = timepickerConfig.showMeridian;\n if ($attrs.showMeridian) {\n watchers.push($scope.$parent.$watch($parse($attrs.showMeridian), function(value) {\n $scope.showMeridian = !!value;\n\n if (ngModelCtrl.$error.time) {\n // Evaluate from template\n var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();\n if (angular.isDefined(hours) && angular.isDefined(minutes)) {\n selected.setHours(hours);\n refresh();\n }\n } else {\n updateTemplate();\n }\n }));\n }\n\n // Get $scope.hours in 24H mode if valid\n function getHoursFromTemplate() {\n var hours = +$scope.hours;\n var valid = $scope.showMeridian ? hours > 0 && hours < 13 :\n hours >= 0 && hours < 24;\n if (!valid || $scope.hours === '') {\n return undefined;\n }\n\n if ($scope.showMeridian) {\n if (hours === 12) {\n hours = 0;\n }\n if ($scope.meridian === meridians[1]) {\n hours = hours + 12;\n }\n }\n return hours;\n }\n\n function getMinutesFromTemplate() {\n var minutes = +$scope.minutes;\n var valid = minutes >= 0 && minutes < 60;\n if (!valid || $scope.minutes === '') {\n return undefined;\n }\n return minutes;\n }\n\n function getSecondsFromTemplate() {\n var seconds = +$scope.seconds;\n return seconds >= 0 && seconds < 60 ? seconds : undefined;\n }\n\n function pad(value, noPad) {\n if (value === null) {\n return '';\n }\n\n return angular.isDefined(value) && value.toString().length < 2 && !noPad ?\n '0' + value : value.toString();\n }\n\n // Respond on mousewheel spin\n this.setupMousewheelEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n var isScrollingUp = function(e) {\n if (e.originalEvent) {\n e = e.originalEvent;\n }\n //pick correct delta variable depending on event\n var delta = e.wheelDelta ? e.wheelDelta : -e.deltaY;\n return e.detail || delta > 0;\n };\n\n hoursInputEl.on('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementHours() : $scope.decrementHours());\n }\n e.preventDefault();\n });\n\n minutesInputEl.on('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementMinutes() : $scope.decrementMinutes());\n }\n e.preventDefault();\n });\n\n secondsInputEl.on('mousewheel wheel', function(e) {\n if (!disabled) {\n $scope.$apply(isScrollingUp(e) ? $scope.incrementSeconds() : $scope.decrementSeconds());\n }\n e.preventDefault();\n });\n };\n\n // Respond on up/down arrowkeys\n this.setupArrowkeyEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n hoursInputEl.on('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementHours();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementHours();\n $scope.$apply();\n }\n }\n });\n\n minutesInputEl.on('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementMinutes();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementMinutes();\n $scope.$apply();\n }\n }\n });\n\n secondsInputEl.on('keydown', function(e) {\n if (!disabled) {\n if (e.which === 38) { // up\n e.preventDefault();\n $scope.incrementSeconds();\n $scope.$apply();\n } else if (e.which === 40) { // down\n e.preventDefault();\n $scope.decrementSeconds();\n $scope.$apply();\n }\n }\n });\n };\n\n this.setupInputEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {\n if ($scope.readonlyInput) {\n $scope.updateHours = angular.noop;\n $scope.updateMinutes = angular.noop;\n $scope.updateSeconds = angular.noop;\n return;\n }\n\n var invalidate = function(invalidHours, invalidMinutes, invalidSeconds) {\n ngModelCtrl.$setViewValue(null);\n ngModelCtrl.$setValidity('time', false);\n if (angular.isDefined(invalidHours)) {\n $scope.invalidHours = invalidHours;\n if (hoursModelCtrl) {\n hoursModelCtrl.$setValidity('hours', false);\n }\n }\n\n if (angular.isDefined(invalidMinutes)) {\n $scope.invalidMinutes = invalidMinutes;\n if (minutesModelCtrl) {\n minutesModelCtrl.$setValidity('minutes', false);\n }\n }\n\n if (angular.isDefined(invalidSeconds)) {\n $scope.invalidSeconds = invalidSeconds;\n if (secondsModelCtrl) {\n secondsModelCtrl.$setValidity('seconds', false);\n }\n }\n };\n\n $scope.updateHours = function() {\n var hours = getHoursFromTemplate(),\n minutes = getMinutesFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(hours) && angular.isDefined(minutes)) {\n selected.setHours(hours);\n selected.setMinutes(minutes);\n if (selected < min || selected > max) {\n invalidate(true);\n } else {\n refresh('h');\n }\n } else {\n invalidate(true);\n }\n };\n\n hoursInputEl.on('blur', function(e) {\n ngModelCtrl.$setTouched();\n if (modelIsEmpty()) {\n makeValid();\n } else if ($scope.hours === null || $scope.hours === '') {\n invalidate(true);\n } else if (!$scope.invalidHours && $scope.hours < 10) {\n $scope.$apply(function() {\n $scope.hours = pad($scope.hours, !padHours);\n });\n }\n });\n\n $scope.updateMinutes = function() {\n var minutes = getMinutesFromTemplate(),\n hours = getHoursFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(minutes) && angular.isDefined(hours)) {\n selected.setHours(hours);\n selected.setMinutes(minutes);\n if (selected < min || selected > max) {\n invalidate(undefined, true);\n } else {\n refresh('m');\n }\n } else {\n invalidate(undefined, true);\n }\n };\n\n minutesInputEl.on('blur', function(e) {\n ngModelCtrl.$setTouched();\n if (modelIsEmpty()) {\n makeValid();\n } else if ($scope.minutes === null) {\n invalidate(undefined, true);\n } else if (!$scope.invalidMinutes && $scope.minutes < 10) {\n $scope.$apply(function() {\n $scope.minutes = pad($scope.minutes);\n });\n }\n });\n\n $scope.updateSeconds = function() {\n var seconds = getSecondsFromTemplate();\n\n ngModelCtrl.$setDirty();\n\n if (angular.isDefined(seconds)) {\n selected.setSeconds(seconds);\n refresh('s');\n } else {\n invalidate(undefined, undefined, true);\n }\n };\n\n secondsInputEl.on('blur', function(e) {\n if (modelIsEmpty()) {\n makeValid();\n } else if (!$scope.invalidSeconds && $scope.seconds < 10) {\n $scope.$apply( function() {\n $scope.seconds = pad($scope.seconds);\n });\n }\n });\n\n };\n\n this.render = function() {\n var date = ngModelCtrl.$viewValue;\n\n if (isNaN(date)) {\n ngModelCtrl.$setValidity('time', false);\n $log.error('Timepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');\n } else {\n if (date) {\n selected = date;\n }\n\n if (selected < min || selected > max) {\n ngModelCtrl.$setValidity('time', false);\n $scope.invalidHours = true;\n $scope.invalidMinutes = true;\n } else {\n makeValid();\n }\n updateTemplate();\n }\n };\n\n // Call internally when we know that model is valid.\n function refresh(keyboardChange) {\n makeValid();\n ngModelCtrl.$setViewValue(new Date(selected));\n updateTemplate(keyboardChange);\n }\n\n function makeValid() {\n if (hoursModelCtrl) {\n hoursModelCtrl.$setValidity('hours', true);\n }\n\n if (minutesModelCtrl) {\n minutesModelCtrl.$setValidity('minutes', true);\n }\n\n if (secondsModelCtrl) {\n secondsModelCtrl.$setValidity('seconds', true);\n }\n\n ngModelCtrl.$setValidity('time', true);\n $scope.invalidHours = false;\n $scope.invalidMinutes = false;\n $scope.invalidSeconds = false;\n }\n\n function updateTemplate(keyboardChange) {\n if (!ngModelCtrl.$modelValue) {\n $scope.hours = null;\n $scope.minutes = null;\n $scope.seconds = null;\n $scope.meridian = meridians[0];\n } else {\n var hours = selected.getHours(),\n minutes = selected.getMinutes(),\n seconds = selected.getSeconds();\n\n if ($scope.showMeridian) {\n hours = hours === 0 || hours === 12 ? 12 : hours % 12; // Convert 24 to 12 hour system\n }\n\n $scope.hours = keyboardChange === 'h' ? hours : pad(hours, !padHours);\n if (keyboardChange !== 'm') {\n $scope.minutes = pad(minutes);\n }\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\n\n if (keyboardChange !== 's') {\n $scope.seconds = pad(seconds);\n }\n $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];\n }\n }\n\n function addSecondsToSelected(seconds) {\n selected = addSeconds(selected, seconds);\n refresh();\n }\n\n function addMinutes(selected, minutes) {\n return addSeconds(selected, minutes*60);\n }\n\n function addSeconds(date, seconds) {\n var dt = new Date(date.getTime() + seconds * 1000);\n var newDate = new Date(date);\n newDate.setHours(dt.getHours(), dt.getMinutes(), dt.getSeconds());\n return newDate;\n }\n\n function modelIsEmpty() {\n return ($scope.hours === null || $scope.hours === '') &&\n ($scope.minutes === null || $scope.minutes === '') &&\n (!$scope.showSeconds || $scope.showSeconds && ($scope.seconds === null || $scope.seconds === ''));\n }\n\n $scope.showSpinners = angular.isDefined($attrs.showSpinners) ?\n $scope.$parent.$eval($attrs.showSpinners) : timepickerConfig.showSpinners;\n\n $scope.incrementHours = function() {\n if (!$scope.noIncrementHours()) {\n addSecondsToSelected(hourStep * 60 * 60);\n }\n };\n\n $scope.decrementHours = function() {\n if (!$scope.noDecrementHours()) {\n addSecondsToSelected(-hourStep * 60 * 60);\n }\n };\n\n $scope.incrementMinutes = function() {\n if (!$scope.noIncrementMinutes()) {\n addSecondsToSelected(minuteStep * 60);\n }\n };\n\n $scope.decrementMinutes = function() {\n if (!$scope.noDecrementMinutes()) {\n addSecondsToSelected(-minuteStep * 60);\n }\n };\n\n $scope.incrementSeconds = function() {\n if (!$scope.noIncrementSeconds()) {\n addSecondsToSelected(secondStep);\n }\n };\n\n $scope.decrementSeconds = function() {\n if (!$scope.noDecrementSeconds()) {\n addSecondsToSelected(-secondStep);\n }\n };\n\n $scope.toggleMeridian = function() {\n var minutes = getMinutesFromTemplate(),\n hours = getHoursFromTemplate();\n\n if (!$scope.noToggleMeridian()) {\n if (angular.isDefined(minutes) && angular.isDefined(hours)) {\n addSecondsToSelected(12 * 60 * (selected.getHours() < 12 ? 60 : -60));\n } else {\n $scope.meridian = $scope.meridian === meridians[0] ? meridians[1] : meridians[0];\n }\n }\n };\n\n $scope.blur = function() {\n ngModelCtrl.$setTouched();\n };\n\n $scope.$on('$destroy', function() {\n while (watchers.length) {\n watchers.shift()();\n }\n });\n}])\n\n.directive('uibTimepicker', ['uibTimepickerConfig', function(uibTimepickerConfig) {\n return {\n require: ['uibTimepicker', '?^ngModel'],\n restrict: 'A',\n controller: 'UibTimepickerController',\n controllerAs: 'timepicker',\n scope: {},\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || uibTimepickerConfig.templateUrl;\n },\n link: function(scope, element, attrs, ctrls) {\n var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n if (ngModelCtrl) {\n timepickerCtrl.init(ngModelCtrl, element.find('input'));\n }\n }\n };\n}]);\n\nangular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])\n\n/**\n * A helper service that can parse typeahead's syntax (string provided by users)\n * Extracted to a separate service for ease of unit testing\n */\n .factory('uibTypeaheadParser', ['$parse', function($parse) {\n // 000001111111100000000000002222222200000000000000003333333333333330000000000044444444000\n var TYPEAHEAD_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+([\\s\\S]+?)$/;\n return {\n parse: function(input) {\n var match = input.match(TYPEAHEAD_REGEXP);\n if (!match) {\n throw new Error(\n 'Expected typeahead specification in form of \"_modelValue_ (as _label_)? for _item_ in _collection_\"' +\n ' but got \"' + input + '\".');\n }\n\n return {\n itemName: match[3],\n source: $parse(match[4]),\n viewMapper: $parse(match[2] || match[1]),\n modelMapper: $parse(match[1])\n };\n }\n };\n }])\n\n .controller('UibTypeaheadController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$$debounce', '$uibPosition', 'uibTypeaheadParser',\n function(originalScope, element, attrs, $compile, $parse, $q, $timeout, $document, $window, $rootScope, $$debounce, $position, typeaheadParser) {\n var HOT_KEYS = [9, 13, 27, 38, 40];\n var eventDebounceTime = 200;\n var modelCtrl, ngModelOptions;\n //SUPPORTED ATTRIBUTES (OPTIONS)\n\n //minimal no of characters that needs to be entered before typeahead kicks-in\n var minLength = originalScope.$eval(attrs.typeaheadMinLength);\n if (!minLength && minLength !== 0) {\n minLength = 1;\n }\n\n originalScope.$watch(attrs.typeaheadMinLength, function (newVal) {\n minLength = !newVal && newVal !== 0 ? 1 : newVal;\n });\n\n //minimal wait time after last character typed before typeahead kicks-in\n var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;\n\n //should it restrict model values to the ones selected from the popup only?\n var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;\n originalScope.$watch(attrs.typeaheadEditable, function (newVal) {\n isEditable = newVal !== false;\n });\n\n //binding to a variable that indicates if matches are being retrieved asynchronously\n var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;\n\n //a function to determine if an event should cause selection\n var isSelectEvent = attrs.typeaheadShouldSelect ? $parse(attrs.typeaheadShouldSelect) : function(scope, vals) {\n var evt = vals.$event;\n return evt.which === 13 || evt.which === 9;\n };\n\n //a callback executed when a match is selected\n var onSelectCallback = $parse(attrs.typeaheadOnSelect);\n\n //should it select highlighted popup value when losing focus?\n var isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false;\n\n //binding to a variable that indicates if there were no results after the query is completed\n var isNoResultsSetter = $parse(attrs.typeaheadNoResults).assign || angular.noop;\n\n var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;\n\n var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;\n\n var appendTo = attrs.typeaheadAppendTo ?\n originalScope.$eval(attrs.typeaheadAppendTo) : null;\n\n var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;\n\n //If input matches an item of the list exactly, select it automatically\n var selectOnExact = attrs.typeaheadSelectOnExact ? originalScope.$eval(attrs.typeaheadSelectOnExact) : false;\n\n //binding to a variable that indicates if dropdown is open\n var isOpenSetter = $parse(attrs.typeaheadIsOpen).assign || angular.noop;\n\n var showHint = originalScope.$eval(attrs.typeaheadShowHint) || false;\n\n //INTERNAL VARIABLES\n\n //model setter executed upon match selection\n var parsedModel = $parse(attrs.ngModel);\n var invokeModelSetter = $parse(attrs.ngModel + '($$$p)');\n var $setModelValue = function(scope, newValue) {\n if (angular.isFunction(parsedModel(originalScope)) &&\n ngModelOptions.getOption('getterSetter')) {\n return invokeModelSetter(scope, {$$$p: newValue});\n }\n\n return parsedModel.assign(scope, newValue);\n };\n\n //expressions used by typeahead\n var parserResult = typeaheadParser.parse(attrs.uibTypeahead);\n\n var hasFocus;\n\n //Used to avoid bug in iOS webview where iOS keyboard does not fire\n //mousedown & mouseup events\n //Issue #3699\n var selected;\n\n //create a child scope for the typeahead directive so we are not polluting original scope\n //with typeahead-specific data (matches, query etc.)\n var scope = originalScope.$new();\n var offDestroy = originalScope.$on('$destroy', function() {\n scope.$destroy();\n });\n scope.$on('$destroy', offDestroy);\n\n // WAI-ARIA\n var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\n element.attr({\n 'aria-autocomplete': 'list',\n 'aria-expanded': false,\n 'aria-owns': popupId\n });\n\n var inputsContainer, hintInputElem;\n //add read-only input to show hint\n if (showHint) {\n inputsContainer = angular.element('
    ');\n inputsContainer.css('position', 'relative');\n element.after(inputsContainer);\n hintInputElem = element.clone();\n hintInputElem.attr('placeholder', '');\n hintInputElem.attr('tabindex', '-1');\n hintInputElem.val('');\n hintInputElem.css({\n 'position': 'absolute',\n 'top': '0px',\n 'left': '0px',\n 'border-color': 'transparent',\n 'box-shadow': 'none',\n 'opacity': 1,\n 'background': 'none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)',\n 'color': '#999'\n });\n element.css({\n 'position': 'relative',\n 'vertical-align': 'top',\n 'background-color': 'transparent'\n });\n\n if (hintInputElem.attr('id')) {\n hintInputElem.removeAttr('id'); // remove duplicate id if present.\n }\n inputsContainer.append(hintInputElem);\n hintInputElem.after(element);\n }\n\n //pop-up element used to display matches\n var popUpEl = angular.element('
    ');\n popUpEl.attr({\n id: popupId,\n matches: 'matches',\n active: 'activeIdx',\n select: 'select(activeIdx, evt)',\n 'move-in-progress': 'moveInProgress',\n query: 'query',\n position: 'position',\n 'assign-is-open': 'assignIsOpen(isOpen)',\n debounce: 'debounceUpdate'\n });\n //custom item template\n if (angular.isDefined(attrs.typeaheadTemplateUrl)) {\n popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);\n }\n\n if (angular.isDefined(attrs.typeaheadPopupTemplateUrl)) {\n popUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);\n }\n\n var resetHint = function() {\n if (showHint) {\n hintInputElem.val('');\n }\n };\n\n var resetMatches = function() {\n scope.matches = [];\n scope.activeIdx = -1;\n element.attr('aria-expanded', false);\n resetHint();\n };\n\n var getMatchId = function(index) {\n return popupId + '-option-' + index;\n };\n\n // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.\n // This attribute is added or removed automatically when the `activeIdx` changes.\n scope.$watch('activeIdx', function(index) {\n if (index < 0) {\n element.removeAttr('aria-activedescendant');\n } else {\n element.attr('aria-activedescendant', getMatchId(index));\n }\n });\n\n var inputIsExactMatch = function(inputValue, index) {\n if (scope.matches.length > index && inputValue) {\n return inputValue.toUpperCase() === scope.matches[index].label.toUpperCase();\n }\n\n return false;\n };\n\n var getMatchesAsync = function(inputValue, evt) {\n var locals = {$viewValue: inputValue};\n isLoadingSetter(originalScope, true);\n isNoResultsSetter(originalScope, false);\n $q.when(parserResult.source(originalScope, locals)).then(function(matches) {\n //it might happen that several async queries were in progress if a user were typing fast\n //but we are interested only in responses that correspond to the current view value\n var onCurrentRequest = inputValue === modelCtrl.$viewValue;\n if (onCurrentRequest && hasFocus) {\n if (matches && matches.length > 0) {\n scope.activeIdx = focusFirst ? 0 : -1;\n isNoResultsSetter(originalScope, false);\n scope.matches.length = 0;\n\n //transform labels\n for (var i = 0; i < matches.length; i++) {\n locals[parserResult.itemName] = matches[i];\n scope.matches.push({\n id: getMatchId(i),\n label: parserResult.viewMapper(scope, locals),\n model: matches[i]\n });\n }\n\n scope.query = inputValue;\n //position pop-up with matches - we need to re-calculate its position each time we are opening a window\n //with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page\n //due to other elements being rendered\n recalculatePosition();\n\n element.attr('aria-expanded', true);\n\n //Select the single remaining option if user input matches\n if (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {\n if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\n $$debounce(function() {\n scope.select(0, evt);\n }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\n } else {\n scope.select(0, evt);\n }\n }\n\n if (showHint) {\n var firstLabel = scope.matches[0].label;\n if (angular.isString(inputValue) &&\n inputValue.length > 0 &&\n firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {\n hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));\n } else {\n hintInputElem.val('');\n }\n }\n } else {\n resetMatches();\n isNoResultsSetter(originalScope, true);\n }\n }\n if (onCurrentRequest) {\n isLoadingSetter(originalScope, false);\n }\n }, function() {\n resetMatches();\n isLoadingSetter(originalScope, false);\n isNoResultsSetter(originalScope, true);\n });\n };\n\n // bind events only if appendToBody params exist - performance feature\n if (appendToBody) {\n angular.element($window).on('resize', fireRecalculating);\n $document.find('body').on('scroll', fireRecalculating);\n }\n\n // Declare the debounced function outside recalculating for\n // proper debouncing\n var debouncedRecalculate = $$debounce(function() {\n // if popup is visible\n if (scope.matches.length) {\n recalculatePosition();\n }\n\n scope.moveInProgress = false;\n }, eventDebounceTime);\n\n // Default progress type\n scope.moveInProgress = false;\n\n function fireRecalculating() {\n if (!scope.moveInProgress) {\n scope.moveInProgress = true;\n scope.$digest();\n }\n\n debouncedRecalculate();\n }\n\n // recalculate actual position and set new values to scope\n // after digest loop is popup in right position\n function recalculatePosition() {\n scope.position = appendToBody ? $position.offset(element) : $position.position(element);\n scope.position.top += element.prop('offsetHeight');\n }\n\n //we need to propagate user's query so we can higlight matches\n scope.query = undefined;\n\n //Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later\n var timeoutPromise;\n\n var scheduleSearchWithTimeout = function(inputValue) {\n timeoutPromise = $timeout(function() {\n getMatchesAsync(inputValue);\n }, waitTime);\n };\n\n var cancelPreviousTimeout = function() {\n if (timeoutPromise) {\n $timeout.cancel(timeoutPromise);\n }\n };\n\n resetMatches();\n\n scope.assignIsOpen = function (isOpen) {\n isOpenSetter(originalScope, isOpen);\n };\n\n scope.select = function(activeIdx, evt) {\n //called from within the $digest() cycle\n var locals = {};\n var model, item;\n\n selected = true;\n locals[parserResult.itemName] = item = scope.matches[activeIdx].model;\n model = parserResult.modelMapper(originalScope, locals);\n $setModelValue(originalScope, model);\n modelCtrl.$setValidity('editable', true);\n modelCtrl.$setValidity('parse', true);\n\n onSelectCallback(originalScope, {\n $item: item,\n $model: model,\n $label: parserResult.viewMapper(originalScope, locals),\n $event: evt\n });\n\n resetMatches();\n\n //return focus to the input element if a match was selected via a mouse click event\n // use timeout to avoid $rootScope:inprog error\n if (scope.$eval(attrs.typeaheadFocusOnSelect) !== false) {\n $timeout(function() { element[0].focus(); }, 0, false);\n }\n };\n\n //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)\n element.on('keydown', function(evt) {\n //typeahead is open and an \"interesting\" key was pressed\n if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {\n return;\n }\n\n var shouldSelect = isSelectEvent(originalScope, {$event: evt});\n\n /**\n * if there's nothing selected (i.e. focusFirst) and enter or tab is hit\n * or\n * shift + tab is pressed to bring focus to the previous element\n * then clear the results\n */\n if (scope.activeIdx === -1 && shouldSelect || evt.which === 9 && !!evt.shiftKey) {\n resetMatches();\n scope.$digest();\n return;\n }\n\n evt.preventDefault();\n var target;\n switch (evt.which) {\n case 27: // escape\n evt.stopPropagation();\n\n resetMatches();\n originalScope.$digest();\n break;\n case 38: // up arrow\n scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;\n scope.$digest();\n target = popUpEl[0].querySelectorAll('.uib-typeahead-match')[scope.activeIdx];\n target.parentNode.scrollTop = target.offsetTop;\n break;\n case 40: // down arrow\n scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;\n scope.$digest();\n target = popUpEl[0].querySelectorAll('.uib-typeahead-match')[scope.activeIdx];\n target.parentNode.scrollTop = target.offsetTop;\n break;\n default:\n if (shouldSelect) {\n scope.$apply(function() {\n if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {\n $$debounce(function() {\n scope.select(scope.activeIdx, evt);\n }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);\n } else {\n scope.select(scope.activeIdx, evt);\n }\n });\n }\n }\n });\n\n element.on('focus', function (evt) {\n hasFocus = true;\n if (minLength === 0 && !modelCtrl.$viewValue) {\n $timeout(function() {\n getMatchesAsync(modelCtrl.$viewValue, evt);\n }, 0);\n }\n });\n\n element.on('blur', function(evt) {\n if (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {\n selected = true;\n scope.$apply(function() {\n if (angular.isObject(scope.debounceUpdate) && angular.isNumber(scope.debounceUpdate.blur)) {\n $$debounce(function() {\n scope.select(scope.activeIdx, evt);\n }, scope.debounceUpdate.blur);\n } else {\n scope.select(scope.activeIdx, evt);\n }\n });\n }\n if (!isEditable && modelCtrl.$error.editable) {\n modelCtrl.$setViewValue();\n scope.$apply(function() {\n // Reset validity as we are clearing\n modelCtrl.$setValidity('editable', true);\n modelCtrl.$setValidity('parse', true);\n });\n element.val('');\n }\n hasFocus = false;\n selected = false;\n });\n\n // Keep reference to click handler to unbind it.\n var dismissClickHandler = function(evt) {\n // Issue #3973\n // Firefox treats right click as a click on document\n if (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {\n resetMatches();\n if (!$rootScope.$$phase) {\n originalScope.$digest();\n }\n }\n };\n\n $document.on('click', dismissClickHandler);\n\n originalScope.$on('$destroy', function() {\n $document.off('click', dismissClickHandler);\n if (appendToBody || appendTo) {\n $popup.remove();\n }\n\n if (appendToBody) {\n angular.element($window).off('resize', fireRecalculating);\n $document.find('body').off('scroll', fireRecalculating);\n }\n // Prevent jQuery cache memory leak\n popUpEl.remove();\n\n if (showHint) {\n inputsContainer.remove();\n }\n });\n\n var $popup = $compile(popUpEl)(scope);\n\n if (appendToBody) {\n $document.find('body').append($popup);\n } else if (appendTo) {\n angular.element(appendTo).eq(0).append($popup);\n } else {\n element.after($popup);\n }\n\n this.init = function(_modelCtrl) {\n modelCtrl = _modelCtrl;\n ngModelOptions = extractOptions(modelCtrl);\n\n scope.debounceUpdate = $parse(ngModelOptions.getOption('debounce'))(originalScope);\n\n //plug into $parsers pipeline to open a typeahead on view changes initiated from DOM\n //$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue\n modelCtrl.$parsers.unshift(function(inputValue) {\n hasFocus = true;\n\n if (minLength === 0 || inputValue && inputValue.length >= minLength) {\n if (waitTime > 0) {\n cancelPreviousTimeout();\n scheduleSearchWithTimeout(inputValue);\n } else {\n getMatchesAsync(inputValue);\n }\n } else {\n isLoadingSetter(originalScope, false);\n cancelPreviousTimeout();\n resetMatches();\n }\n\n if (isEditable) {\n return inputValue;\n }\n\n if (!inputValue) {\n // Reset in case user had typed something previously.\n modelCtrl.$setValidity('editable', true);\n return null;\n }\n\n modelCtrl.$setValidity('editable', false);\n return undefined;\n });\n\n modelCtrl.$formatters.push(function(modelValue) {\n var candidateViewValue, emptyViewValue;\n var locals = {};\n\n // The validity may be set to false via $parsers (see above) if\n // the model is restricted to selected values. If the model\n // is set manually it is considered to be valid.\n if (!isEditable) {\n modelCtrl.$setValidity('editable', true);\n }\n\n if (inputFormatter) {\n locals.$model = modelValue;\n return inputFormatter(originalScope, locals);\n }\n\n //it might happen that we don't have enough info to properly render input value\n //we need to check for this situation and simply return model value if we can't apply custom formatting\n locals[parserResult.itemName] = modelValue;\n candidateViewValue = parserResult.viewMapper(originalScope, locals);\n locals[parserResult.itemName] = undefined;\n emptyViewValue = parserResult.viewMapper(originalScope, locals);\n\n return candidateViewValue !== emptyViewValue ? candidateViewValue : modelValue;\n });\n };\n\n function extractOptions(ngModelCtrl) {\n var ngModelOptions;\n\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\n // guarantee a value\n ngModelOptions = ngModelCtrl.$options || {};\n\n // mimic 1.6+ api\n ngModelOptions.getOption = function (key) {\n return ngModelOptions[key];\n };\n } else { // in angular >=1.6 $options is always present\n ngModelOptions = ngModelCtrl.$options;\n }\n\n return ngModelOptions;\n }\n }])\n\n .directive('uibTypeahead', function() {\n return {\n controller: 'UibTypeaheadController',\n require: ['ngModel', 'uibTypeahead'],\n link: function(originalScope, element, attrs, ctrls) {\n ctrls[1].init(ctrls[0]);\n }\n };\n })\n\n .directive('uibTypeaheadPopup', ['$$debounce', function($$debounce) {\n return {\n scope: {\n matches: '=',\n query: '=',\n active: '=',\n position: '&',\n moveInProgress: '=',\n select: '&',\n assignIsOpen: '&',\n debounce: '&'\n },\n replace: true,\n templateUrl: function(element, attrs) {\n return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';\n },\n link: function(scope, element, attrs) {\n scope.templateUrl = attrs.templateUrl;\n\n scope.isOpen = function() {\n var isDropdownOpen = scope.matches.length > 0;\n scope.assignIsOpen({ isOpen: isDropdownOpen });\n return isDropdownOpen;\n };\n\n scope.isActive = function(matchIdx) {\n return scope.active === matchIdx;\n };\n\n scope.selectActive = function(matchIdx) {\n scope.active = matchIdx;\n };\n\n scope.selectMatch = function(activeIdx, evt) {\n var debounce = scope.debounce();\n if (angular.isNumber(debounce) || angular.isObject(debounce)) {\n $$debounce(function() {\n scope.select({activeIdx: activeIdx, evt: evt});\n }, angular.isNumber(debounce) ? debounce : debounce['default']);\n } else {\n scope.select({activeIdx: activeIdx, evt: evt});\n }\n };\n }\n };\n }])\n\n .directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function($templateRequest, $compile, $parse) {\n return {\n scope: {\n index: '=',\n match: '=',\n query: '='\n },\n link: function(scope, element, attrs) {\n var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'uib/template/typeahead/typeahead-match.html';\n $templateRequest(tplUrl).then(function(tplContent) {\n var tplEl = angular.element(tplContent.trim());\n element.replaceWith(tplEl);\n $compile(tplEl)(scope);\n });\n }\n };\n }])\n\n .filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function($sce, $injector, $log) {\n var isSanitizePresent;\n isSanitizePresent = $injector.has('$sanitize');\n\n function escapeRegexp(queryToEscape) {\n // Regex: capture the whole query string and replace it with the string that will be used to match\n // the results, for example if the capture is \"a\" the result will be \\a\n return queryToEscape.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n }\n\n function containsHtml(matchItem) {\n return /<.*>/g.test(matchItem);\n }\n\n return function(matchItem, query) {\n if (!isSanitizePresent && containsHtml(matchItem)) {\n $log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger\n }\n matchItem = query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; // Replaces the capture string with a the same string inside of a \"strong\" tag\n if (!isSanitizePresent) {\n matchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive\n }\n return matchItem;\n };\n }]);\n\nangular.module(\"uib/template/accordion/accordion-group.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/accordion/accordion-group.html\",\n \"
    \\n\" +\n \"

    \\n\" +\n \" {{heading}}\\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/accordion/accordion.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/accordion/accordion.html\",\n \"
    \");\n}]);\n\nangular.module(\"uib/template/alert/alert.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/alert/alert.html\",\n \"\\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/carousel/carousel.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/carousel/carousel.html\",\n \"
    \\n\" +\n \" 1\\\">\\n\" +\n \" \\n\" +\n \" previous\\n\" +\n \"\\n\" +\n \" 1\\\">\\n\" +\n \" \\n\" +\n \" next\\n\" +\n \"\\n\" +\n \"
      1\\\">\\n\" +\n \"
    1. \\n\" +\n \" slide {{ $index + 1 }} of {{ slides.length }}, currently active\\n\" +\n \"
    2. \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/carousel/slide.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/carousel/slide.html\",\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/datepicker.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/datepicker.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/day.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/day.html\",\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 \"
    {{::label.abbr}}
    {{ weekNumbers[$index] }}\\n\" +\n \" \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/datepicker/month.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/month.html\",\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\nangular.module(\"uib/template/datepicker/year.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepicker/year.html\",\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\nangular.module(\"uib/template/datepickerPopup/popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/datepickerPopup/popup.html\",\n \"
      \\n\" +\n \"
    • \\n\" +\n \"
    • \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
    • \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/modal/window.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/modal/window.html\",\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/pager/pager.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/pager/pager.html\",\n \"
  • {{::getText('previous')}}
  • \\n\" +\n \"
  • {{::getText('next')}}
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/pagination/pagination.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/pagination/pagination.html\",\n \"
  • {{::getText('first')}}
  • \\n\" +\n \"
  • {{::getText('previous')}}
  • \\n\" +\n \"
  • {{page.text}}
  • \\n\" +\n \"
  • {{::getText('next')}}
  • \\n\" +\n \"
  • {{::getText('last')}}
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-html-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-html-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tooltip/tooltip-template-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-template-popup.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover-html.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/popover/popover-html.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover-template.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/popover/popover-template.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/popover/popover.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/popover/popover.html\",\n \"
    \\n\" +\n \"\\n\" +\n \"
    \\n\" +\n \"

    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/progressbar/bar.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/progressbar/bar.html\",\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/progressbar/progress.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/progressbar/progress.html\",\n \"
    \");\n}]);\n\nangular.module(\"uib/template/progressbar/progressbar.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/progressbar/progressbar.html\",\n \"
    \\n\" +\n \"
    \\n\" +\n \"
    \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/rating/rating.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/rating/rating.html\",\n \"\\n\" +\n \" ({{ $index < value ? '*' : ' ' }})\\n\" +\n \" \\n\" +\n \"\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tabs/tab.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tabs/tab.html\",\n \"
  • \\n\" +\n \" {{heading}}\\n\" +\n \"
  • \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/tabs/tabset.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/tabs/tabset.html\",\n \"
    \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/timepicker/timepicker.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/timepicker/timepicker.html\",\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 \" \\n\" +\n \" :\\n\" +\n \" \\n\" +\n \"
        
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/typeahead/typeahead-match.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/typeahead/typeahead-match.html\",\n \"\\n\" +\n \"\");\n}]);\n\nangular.module(\"uib/template/typeahead/typeahead-popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"uib/template/typeahead/typeahead-popup.html\",\n \"
        \\n\" +\n \"
      • \\n\" +\n \"
        \\n\" +\n \"
      • \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\nangular.module('ui.bootstrap.carousel').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibCarouselCss && angular.element(document).find('head').prepend(''); angular.$$uibCarouselCss = true; });\nangular.module('ui.bootstrap.datepicker').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibDatepickerCss && angular.element(document).find('head').prepend(''); angular.$$uibDatepickerCss = true; });\nangular.module('ui.bootstrap.position').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibPositionCss && angular.element(document).find('head').prepend(''); angular.$$uibPositionCss = true; });\nangular.module('ui.bootstrap.datepickerPopup').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibDatepickerpopupCss && angular.element(document).find('head').prepend(''); angular.$$uibDatepickerpopupCss = true; });\nangular.module('ui.bootstrap.tooltip').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTooltipCss && angular.element(document).find('head').prepend(''); angular.$$uibTooltipCss = true; });\nangular.module('ui.bootstrap.timepicker').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTimepickerCss && angular.element(document).find('head').prepend(''); angular.$$uibTimepickerCss = true; });\nangular.module('ui.bootstrap.typeahead').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uibTypeaheadCss && angular.element(document).find('head').prepend(''); angular.$$uibTypeaheadCss = true; });","require('./dist/ui-bootstrap-tpls');\n\nmodule.exports = 'ui.bootstrap';\n","/**\n * Binds a TinyMCE widget to \r\n \r\n
      \r\n \r\n `\r\n})\r\nexport class Autosize {\r\n constructor(\r\n @Inject('$element') private $element: angular.IRootElementService,\r\n @Inject('$timeout') private $timeout: ng.ITimeoutService,\r\n @Inject('$scope') private $scope: angular.IScope\r\n ) {\r\n this.$element.on('keyup', this.adjust.bind(this));\r\n }\r\n @Input() public readOnly: boolean;\r\n\r\n private _mandatory;\r\n @Attribute() public get mandatory() {\r\n return this._mandatory;\r\n }\r\n public set mandatory(val: boolean | string) {\r\n this._mandatory = val === true || val === \"true\";\r\n }\r\n private get hasValue() {\r\n return this._value !== null && this._value !== undefined && this._value !== \"\";\r\n }\r\n private get showError() {\r\n return this.mandatory && ((!this.hasfocus && this.wasFocused && !this.hasValue) || (!this.hasfocus && this.iserror));\r\n }\r\n async $onInit() {\r\n var element = this.$element;\r\n if (this.focusinput) {\r\n await this.$timeout();\r\n ((element[0].getElementsByClassName('primary').item(0))).focus();\r\n }\r\n }\r\n\r\n $postLink(){\r\n this.adjust();\r\n }\r\n\r\n adjust() {\r\n var element = this.$element;\r\n var ta1 = (element[0].getElementsByClassName('primary').item(0));\r\n var ta2 = (element[0].getElementsByClassName('hidden-area').item(0));\r\n (ta2 as any).value = (ta1 as any).value;\r\n ta2.style.width = ta1.clientWidth + \"px\";\r\n ta1.style.overflow = 'hidden';\r\n ta2.style.overflow = 'hidden';\r\n ta2.style.height = 'auto';\r\n ta1.style.height = (ta2.scrollHeight + this._heightCorrect) + \"px\";\r\n }\r\n\r\n private focusTextarea() {\r\n var element = this.$element;\r\n (element[0].getElementsByClassName('primary').item(0)).focus();\r\n }\r\n\r\n private _heightCorrect:number = 0;\r\n @Attribute() public get heightCorrect(){\r\n return this._heightCorrect.toString();\r\n }\r\n public set heightCorrect(val:string){\r\n var h = parseInt(val,10);\r\n if(!isNaN(h))\r\n this._heightCorrect = h;\r\n }\r\n\r\n private _value: string;\r\n\r\n @Input() public get value(): string {\r\n return this._value;\r\n }\r\n public set value(val: string) {\r\n if (val != this._value) {\r\n this._value = val;\r\n this.onvaluechanged({ value: val });\r\n }\r\n }\r\n @Input() public hint: string;\r\n @Input() public iserror: boolean;\r\n @Input() public focusinput: boolean;\r\n @Output() public onvaluechanged: (args: { value: string }) => void;\r\n\r\n private hasfocus: boolean = false;\r\n private wasFocused: boolean = false;\r\n private onFocus() {\r\n this.hasfocus = this.wasFocused = true;\r\n }\r\n\r\n private onBlur() {\r\n this.hasfocus = false;\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Inject } from \"@fiqas/angular-utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'fqfiledrop',\r\n template: '
      ',\r\n transclude: true\r\n})\r\nexport class FileDrop {\r\n @Output() public onfileover: (args: { status: boolean }) => void;\r\n @Output() public onfiledrop: (args: { filelist: FileList }) => void;\r\n @Input() public readOnly:boolean;\r\n private isdropping:boolean;\r\n constructor(\r\n @Inject('$element') private $element: angular.IRootElementService,\r\n @Inject('$transclude') private $transclude: angular.ITranscludeFunction,\r\n @Inject('$timeout') private $timeout: angular.ITimeoutService,\r\n @Inject('$scope') private $scope: angular.IScope\r\n ) {\r\n this.initTransclude(this.$transclude, this.$element);\r\n this.$element.on('drop', this.onDrop.bind(this));\r\n this.$element.on('dragover', this.onDragOver.bind(this));\r\n this.$element.on('dragleave', this.onDragLeave.bind(this));\r\n }\r\n\r\n initTransclude(transclude: angular.ITranscludeFunction, element: angular.IRootElementService) {\r\n transclude((e, s) =>\r\n element.children().append(e));\r\n }\r\n\r\n public onDrop(event: any): void {\r\n let transfer = this._getTransfer(event);\r\n if (this.readOnly || !transfer) {\r\n return;\r\n }\r\n this._preventAndStop(event);\r\n this.onfileover({ status: false });\r\n this.isdropping = false;\r\n this.onfiledrop({ filelist: transfer.files });\r\n this.$timeout(() => this.$scope.$digest());\r\n }\r\n\r\n public onDragOver(event: any): void {\r\n let transfer = this._getTransfer(event);\r\n if (this.readOnly || !this._haveFiles(transfer.types)) {\r\n return;\r\n }\r\n this.isdropping = true;\r\n transfer.dropEffect = 'copy';\r\n this._preventAndStop(event);\r\n this.onfileover({ status: true });\r\n }\r\n\r\n public onDragLeave(event: Event): any {\r\n if (event.currentTarget === this.$element[0]) {\r\n this.onfileover({ status: false });\r\n this.isdropping = false;\r\n return;\r\n }\r\n this._preventAndStop(event);\r\n }\r\n\r\n private _getTransfer(event: any): any {\r\n return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;\r\n }\r\n\r\n private _preventAndStop(event: any): any {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n private _haveFiles(types: any): any {\r\n if (!types) {\r\n return false;\r\n }\r\n\r\n if (types.indexOf) {\r\n return types.indexOf('Files') !== -1;\r\n } else if (types.contains) {\r\n return types.contains('Files');\r\n } else {\r\n return false;\r\n }\r\n }\r\n /*\r\n _addOverClass(item:any):any {\r\n item.addOverClass();\r\n }\r\n \r\n _removeOverClass(item:any):any {\r\n item.removeOverClass();\r\n }*/\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Inject, Attribute, OutputArgs } from \"@fiqas/angular-utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'fqtextarea',\r\n template: `
      \r\n
      \r\n {{$ctrl.hint | translate}}\r\n \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      `\r\n})\r\nexport class Autosize {\r\n constructor(\r\n @Inject('$window') private $window: angular.IWindowService,\r\n @Inject('$element') private $element: angular.IRootElementService,\r\n @Inject('$timeout') private $timeout: ng.ITimeoutService,\r\n @Inject('$scope') private $scope: angular.IScope,\r\n @Inject('hotkeys') private hotkeys: ng.hotkeys.HotkeysProvider\r\n ) {\r\n this.$element.on('keypress', () => this.ajustDynamicHTMLLayout());\r\n\r\n hotkeys.bindTo($scope);\r\n this.hotkey = [this.undoHotkeys = {\r\n combo: ['ctrl+z'],\r\n allowIn: ['INPUT', 'SELECT', 'TEXTAREA'],\r\n callback: (e) => {\r\n this.resetValue(e);\r\n }\r\n }];\r\n\r\n }\r\n @Input() public tooltipPlacement: string;\r\n @Input() public readOnly: boolean;\r\n @Input() public candelete: boolean;\r\n\r\n $postLink() {\r\n this.ajustDynamicHTMLLayout();\r\n }\r\n\r\n @Output() public onLayoutReset;\r\n @Output() public onLayoutAjust: OutputArgs<{ height: number }>;\r\n public async ajustDynamicHTMLLayout() {\r\n await this.$timeout();\r\n var element = this.$element;\r\n var ta1 = (element[0].getElementsByClassName('textarea').item(0));\r\n var oldHieght: number = ta1.clientHeight;\r\n ta1.style.height = this.minHeight\r\n ta1.style.height = `${(ta1.scrollHeight <= this._minHeightNumeric) ? this._minHeightNumeric : (ta1.scrollHeight >= this._maxHeightNumeric) ? this._maxHeightNumeric : ta1.scrollHeight}px`;\r\n if (ta1.scrollHeight > ta1.clientHeight && (!ta1.style.overflowY || ta1.style.overflowY != \"scroll\")) {\r\n ta1.style.overflowY = \"scroll\";\r\n }\r\n if (ta1.scrollHeight <= this._maxHeightNumeric && (!ta1.style.overflowY || ta1.style.overflowY != \"hidden\")) {\r\n ta1.style.overflowY = \"hidden\"\r\n }\r\n if (this.onLayoutAjust && oldHieght === ta1.clientHeight) this.onLayoutAjust({ height: ta1.clientHeight });\r\n }\r\n\r\n private hotkey: ng.hotkeys.Hotkey[];\r\n private undoHotkeys: ng.hotkeys.Hotkey;\r\n\r\n private _previousValue: string;\r\n private _textareaCleared: boolean = false;\r\n private _minHeight: string;\r\n private _minHeightNumeric: number;\r\n private get minHeight(): string {\r\n return this._minHeight;\r\n }\r\n private set minHeight(val: string) {\r\n this._minHeight = val;\r\n this._minHeightNumeric = Number(val.replace(/[^\\d]/g, \"\"));\r\n }\r\n private _maxHeight: string;\r\n private _maxHeightNumeric: number;\r\n private get maxHeight(): string {\r\n return this._maxHeight;\r\n }\r\n private set maxHeight(val: string) {\r\n this._maxHeight = val;\r\n this._maxHeightNumeric = Number(val.replace(/[^\\d]/g, \"\"));\r\n }\r\n private _mandatory;\r\n @Attribute() public get mandatory() {\r\n return this._mandatory;\r\n }\r\n public set mandatory(val: boolean | string) {\r\n this._mandatory = val === true || val === \"true\";\r\n }\r\n private get hasValue() {\r\n return this._value !== null && this._value !== undefined && this._value !== \"\";\r\n }\r\n\r\n private get showError() {\r\n return this.mandatory && ((!this.hasfocus && this.wasFocused && !this.hasValue) || (!this.hasfocus && this.iserror));\r\n }\r\n async $onInit() {\r\n var element = this.$element;\r\n if (this.focusinput) {\r\n await this.$timeout();\r\n ((element[0].getElementsByClassName('textarea').item(0))).focus();\r\n }\r\n var ta1 = (element[0].getElementsByClassName('textarea').item(0));\r\n this.minHeight = this.$window.getComputedStyle(ta1).minHeight || \"24px\";\r\n this.maxHeight = this.$window.getComputedStyle(ta1).maxHeight || \"24px\";\r\n ta1.style.minHeight = this._minHeight;\r\n ta1.style.maxHeight = this._maxHeight;\r\n ta1.style.overflow = \"hidden\";\r\n\r\n this.hotkey.forEach(key => {\r\n this.hotkeys.add(key);\r\n });\r\n\r\n }\r\n\r\n $onDestroy() {\r\n this.hotkey.forEach(key => {\r\n this.hotkeys.del(key.combo);\r\n });\r\n }\r\n\r\n private getTextarea() {\r\n const element = this.$element;\r\n return (element[0].getElementsByClassName('textarea').item(0));\r\n }\r\n\r\n private focusTextarea() {\r\n const textarea = this.getTextarea();\r\n textarea.focus();\r\n return textarea;\r\n }\r\n\r\n private _value: string = \"\";\r\n @Input() public get value(): string {\r\n return this._value;\r\n }\r\n public set value(val: string) {\r\n if (val !== this._value) {\r\n this._value = val;\r\n this.onvaluechanged({ value: val });\r\n }\r\n this.ajustDynamicHTMLLayout();\r\n }\r\n\r\n @Input() public hint: string;\r\n @Input() public iserror: boolean;\r\n @Input() public focusinput: boolean;\r\n @Output() public onvaluechanged: (args: { value: string }) => void;\r\n\r\n private hasfocus: boolean = false;\r\n private wasFocused: boolean = false;\r\n private onFocus() {\r\n this.hasfocus = this.wasFocused = true;\r\n this.ajustDynamicHTMLLayout();\r\n }\r\n\r\n private onChange() {\r\n if (this._textareaCleared) {\r\n const textarea = this.getTextarea();\r\n if (textarea.selectionStart !== textarea.selectionEnd) {\r\n const length = (this.value) ? this.value.length : 0;\r\n textarea.selectionStart = length;\r\n textarea.selectionEnd = length;\r\n }\r\n }\r\n }\r\n\r\n private onBlur() {\r\n this.hasfocus = false;\r\n if (this.onLayoutReset) this.onLayoutReset();\r\n }\r\n\r\n public ClearField() {\r\n if (this.readOnly || !this.candelete)\r\n return;\r\n\r\n this._previousValue = this._value;\r\n // This method is not correctly sipported by Firefox, so we fake a undo.\r\n // const textarea = this.focusTextarea();\r\n // textarea.select();\r\n // document.execCommand('delete');\r\n this._textareaCleared = true;\r\n this.value = '';\r\n this.onvaluechanged({ value: this._value });\r\n }\r\n\r\n private resetValue(event) {\r\n if (this._previousValue) {\r\n this.value = this._previousValue;\r\n this._previousValue = '';\r\n }\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Binding, Attribute, Inject, OutputArgs } from \"@fiqas/angular-utils\";\r\nimport { KeyCodes, KeyboardEventCode } from \"@fiqas/utils\";\r\nimport { TranslationService } from '../services/TranslationService';\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'inlineTextEditor',\r\n template: `
      \r\n {{$ctrl.value}}\r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n \r\n {{$ctrl.hint}}\r\n \r\n \r\n \r\n `\r\n})\r\nexport class InlineTextEditor {\r\n\r\n private actionClick: boolean = false;\r\n private keydown: boolean;\r\n private editvalue = '';\r\n private _editMode: boolean;\r\n\r\n private clickToEditText: string;\r\n public titleOverflow: boolean = false;\r\n public titleToolTipText: string;\r\n public titleToolTipClass: string = 'customTooltipTB';\r\n\r\n @Input() readOnly: boolean;\r\n @Input() public hint: string;\r\n\r\n private _value: string;\r\n @Input() public set value(val: string) {\r\n this.editvalue = this._value = val;\r\n //this.updateTooltipValue();\r\n }\r\n public get value() {\r\n return this._value;\r\n }\r\n\r\n @Output() public valueSubmit: (args: { value: string }) => void;\r\n @Output() public onValueChanged: OutputArgs<{ value: string }>;\r\n @Output() public editModeChanged: OutputArgs<{ value: boolean }>;\r\n\r\n constructor(\r\n @Inject(\"$element\") private $element: ng.IRootElementService,\r\n @Inject(\"$timeout\") private $timeout: ng.ITimeoutService,\r\n @Inject() private TranslationService: TranslationService,\r\n @Inject('$scope') private $scope: ng.IScope\r\n ) {\r\n\r\n }\r\n\r\n $onInit() {\r\n this.clickToEditText = this.TranslationService.Translate('CLICK_TO_EDIT');\r\n }\r\n\r\n public onBlur($event: JQueryEventObject) {\r\n if (!this.actionClick && !this.emptyEdit) {\r\n this.cancelEdit();\r\n }\r\n if (this.emptyEdit) {\r\n $event.preventDefault();\r\n this.$timeout(() => this.$element[0].getElementsByClassName('inputEdit')[0].focus(), 1);\r\n }\r\n }\r\n\r\n public commitEdit() {\r\n if (this.editvalue) {\r\n this.actionClick = false;\r\n this.editMode = false;\r\n if (this.value !== this.editvalue) {\r\n this.value = this.editvalue;\r\n this.onValueChanged({ value: this.editvalue });\r\n }\r\n }\r\n }\r\n\r\n public cancelEdit() {\r\n this.actionClick = false;\r\n this.editMode = false;\r\n }\r\n\r\n public get empty(): boolean {\r\n return !this.value || this.value.length == 0;\r\n }\r\n\r\n public get emptyEdit(): boolean {\r\n return !this.keydown && (!this.editvalue || this.editvalue.length == 0);\r\n }\r\n\r\n public set editMode(val: boolean) {\r\n const current = this._editMode;\r\n if (val && !this._editMode) {\r\n this.editvalue = this.value;\r\n this.$timeout(() => this.$element[0].getElementsByClassName('inputEdit')[0].focus(), 25);\r\n }\r\n this._editMode = val;\r\n if (current !== val) {\r\n this.editModeChanged({ value: val });\r\n }\r\n }\r\n\r\n public get editMode() {\r\n return this._editMode;\r\n }\r\n\r\n private async adjust() {\r\n const element = this.$element;\r\n const editor: HTMLInputElement = (element[0].getElementsByClassName('inputEdit').item(0));\r\n editor.size = (editor.value.length < 10) ? 10 : editor.value.length;\r\n }\r\n\r\n private onKey($event: KeyboardEvent) {\r\n this.keydown = true;\r\n if ($event.keyCode === 0) {\r\n\r\n switch ($event.code) {\r\n case KeyboardEventCode.enter:\r\n if (!this._value || this._value.length == 0) {\r\n $event.preventDefault();\r\n } else if (this.valueSubmit && !this.valueSubmit({ value: this._value }) || !this.valueSubmit) {\r\n this.commitEdit()\r\n }\r\n break;\r\n case KeyboardEventCode.escape:\r\n this.cancelEdit();\r\n break;\r\n }\r\n } else {\r\n switch ($event.keyCode) {\r\n case KeyCodes.enter:\r\n if (!this._value || this._value.length == 0) {\r\n $event.preventDefault();\r\n } else if (this.valueSubmit && !this.valueSubmit({ value: this._value }) || !this.valueSubmit) {\r\n this.commitEdit()\r\n }\r\n break;\r\n\r\n case KeyCodes.escape:\r\n this.cancelEdit();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private onKeyUp($event: KeyboardEvent) {\r\n this.keydown = false;\r\n }\r\n\r\n private isTitleOverflow(el: any, titleText: string): boolean {\r\n const curOverflow = el.style.overflow;\r\n\r\n el.innerHTML = titleText;\r\n\r\n if (!curOverflow || curOverflow === \"visible\") {\r\n el.style.overflow = \"hidden\";\r\n }\r\n\r\n const titleOverflow = el.clientWidth < el.scrollWidth\r\n || el.clientHeight < el.scrollHeight;\r\n\r\n el.style.overflow = curOverflow;\r\n return titleOverflow;\r\n }\r\n\r\n public get getTitleOverflow(): boolean {\r\n this.titleOverflow = true;\r\n\r\n const displayElement = this.$element[0].getElementsByClassName('display').item(0);\r\n\r\n if (displayElement && this.value) {\r\n this.titleOverflow = this.isTitleOverflow(displayElement, this.value);\r\n }\r\n return this.titleOverflow;\r\n }\r\n\r\n public get getTooltipText() {\r\n const displayElement = this.$element[0].getElementsByClassName('display').item(0);\r\n\r\n if (displayElement && this.value) {\r\n\r\n if (this.isTitleOverflow(displayElement, this.value)) {\r\n this.titleToolTipText = this.value;\r\n if (!this.readOnly) {\r\n return `${this.titleToolTipText}\\r\\n(${this.clickToEditText})`;\r\n } else {\r\n return this.titleToolTipText;\r\n }\r\n } else {\r\n return this.clickToEditText;\r\n }\r\n }\r\n }\r\n\r\n public get getTooltipClass() {\r\n const displayElement = this.$element[0].getElementsByClassName('display').item(0);\r\n\r\n this.titleToolTipClass = 'customTooltipTB';\r\n if (displayElement && this.value) {\r\n if (this.isTitleOverflow(displayElement, this.value)) {\r\n this.titleToolTipClass = 'customTooltipDesc';\r\n } else {\r\n this.titleToolTipClass = 'customTooltipTB';\r\n }\r\n }\r\n return this.titleToolTipClass;\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Binding, Attribute, Inject } from \"@fiqas/angular-utils\";\r\nimport { KeyCodes, KeyboardEventCode } from \"@fiqas/utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'numbereditbox',\r\n template: `
      \r\n
      \r\n {{$ctrl._displayedHint | translate}}\r\n \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      `\r\n})\r\nexport class NumberEditBox {\r\n private _value: string;\r\n private _hint: string;\r\n private _displayedHint: string;\r\n private _hasFocus: boolean = false;\r\n private wasFocused: boolean = false;\r\n private _dirty: boolean = false;\r\n\r\n @Input() public readOnly: boolean;\r\n\r\n constructor(\r\n @Inject('$timeout') private $timeout: ng.ITimeoutService,\r\n @Inject('$element') private $element: angular.IRootElementService) {\r\n }\r\n\r\n private get hasValue() {\r\n return this._value !== null && this._value !== undefined && this._value !== \"\" && this._value !== \" \";\r\n }\r\n\r\n private get showError() {\r\n return this.mandatory && ((!this._hasFocus && this.wasFocused && !this.hasValue) || (!this._hasFocus && this.iserror));\r\n }\r\n\r\n private _childClasses;\r\n @Attribute() public get childClasses() {\r\n return this._childClasses;\r\n }\r\n public set childClasses(val: string) {\r\n this._childClasses = val;\r\n }\r\n\r\n private _mandatory;\r\n @Attribute() public get mandatory() {\r\n return this._mandatory;\r\n }\r\n public set mandatory(val: boolean | string) {\r\n this._mandatory = val === true || val === \"true\";\r\n }\r\n @Input() public active: boolean;\r\n @Input() public get value() {\r\n return this._value;\r\n }\r\n public set value(val: string) {\r\n val = typeof val === 'string' ? val.replace(/[^-0-9]+/g, '') : val;\r\n if (val != this._value) {\r\n this._value = val;\r\n if (!this.changeonblur) {\r\n this.valueChanged({ value: this._value });\r\n } else {\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n\r\n @Input()\r\n public get hint(): string {\r\n return this._hint;\r\n }\r\n public set hint(theHint: string) {\r\n this._hint = theHint;\r\n this._displayedHint = this._hasFocus ? '' : this._hint;\r\n }\r\n\r\n @Input() public focusinput: boolean;\r\n @Input() public candelete: boolean;\r\n @Input() public iserror: boolean;\r\n @Input() public changeonblur: boolean = false;\r\n\r\n @Input() public debounce: number = 0;\r\n\r\n @Output() public valueChanged: (args: { value: string }) => void;\r\n @Output() public valueSubmit: (args: { value: string }) => void;\r\n\r\n private onKey($event: KeyboardEvent) {\r\n if (\r\n ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-'].indexOf($event.key) > -1\r\n || $event.which >= 48 && $event.which <= 57\r\n || $event.which === 0 && $event.charCode === 0\r\n || $event.keyCode === KeyCodes.backspace\r\n || $event.keyCode === KeyCodes.tab\r\n || $event.keyCode === KeyCodes.home\r\n || $event.keyCode === KeyCodes.end\r\n || $event.keyCode === KeyCodes.leftArrow\r\n || $event.keyCode === KeyCodes.rightArrow\r\n || $event.keyCode === KeyCodes.upArrow\r\n || $event.keyCode === KeyCodes.downArrow\r\n || $event.keyCode === KeyCodes.delete\r\n || $event.code === KeyboardEventCode.backspace\r\n || $event.code === KeyboardEventCode.tab\r\n || $event.code === KeyboardEventCode.home\r\n || $event.code === KeyboardEventCode.end\r\n || $event.code === KeyboardEventCode.leftArrow\r\n || $event.code === KeyboardEventCode.rightArrow\r\n || $event.code === KeyboardEventCode.upArrow\r\n || $event.code === KeyboardEventCode.downArrow\r\n || $event.code === KeyboardEventCode.delete\r\n || $event.keyCode === KeyCodes.subtract\r\n || $event.keyCode === KeyCodes.dash\r\n || $event.keyCode === KeyCodes.numpad1\r\n || $event.keyCode === KeyCodes.numpad2\r\n || $event.keyCode === KeyCodes.numpad3\r\n || $event.keyCode === KeyCodes.numpad4\r\n || $event.keyCode === KeyCodes.numpad5\r\n || $event.keyCode === KeyCodes.numpad6\r\n || $event.keyCode === KeyCodes.numpad7\r\n || $event.keyCode === KeyCodes.numpad8\r\n || $event.keyCode === KeyCodes.numpad9\r\n || $event.keyCode === KeyCodes.numpad0\r\n || (\r\n ['z', 'x', 'c', 'v', 'a'].indexOf($event.key) > -1\r\n || $event.keyCode === KeyCodes.a\r\n || $event.keyCode === KeyCodes.v\r\n || $event.keyCode === KeyCodes.c\r\n || $event.keyCode === KeyCodes.x\r\n || $event.keyCode === KeyCodes.z\r\n ) && ($event.ctrlKey || $event.metaKey)\r\n ) {\r\n // to allow numbers\r\n return true;\r\n } else if ($event.keyCode === KeyCodes.enter) {\r\n $event.preventDefault();\r\n this.valueSubmit({ value: this._value });\r\n return false;\r\n } else {\r\n // to stop others\r\n $event.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n private onFocus() {\r\n this._hasFocus = this.wasFocused = true;\r\n }\r\n\r\n private onBlur() {\r\n this._hasFocus = false;\r\n if (!this.hasValue)\r\n this._displayedHint = this._hint;\r\n if (this.readOnly)\r\n return;\r\n if (this.changeonblur && this._dirty) {\r\n this._dirty = false;\r\n this.valueChanged({ value: this._value });\r\n }\r\n }\r\n\r\n private onChange(event: any) {\r\n if (this.readOnly)\r\n return;\r\n if (this.changeonblur) {\r\n this._dirty = true;\r\n } else {\r\n this.valueChanged({ value: this._value });\r\n }\r\n }\r\n\r\n async $postLink() {\r\n if (this.focusinput) {\r\n await this.$timeout(25);\r\n this.focusField();\r\n }\r\n }\r\n\r\n private focusField() {\r\n var element = this.$element;\r\n var field = (element[0].getElementsByClassName('numbereditarea').item(0));\r\n if (field)\r\n field.focus();\r\n }\r\n\r\n public ClearField() {\r\n if (this.readOnly || !this.candelete)\r\n return;\r\n\r\n this.focusField();\r\n this._value = '';\r\n this.valueChanged({ value: this._value });\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Inject } from \"@fiqas/angular-utils\";\r\nimport { IsProcessingService } from \"../services/isProcessingService\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'processingindicator',\r\n template: `
      \r\n\t
      \r\n
      `\r\n})\r\nexport class ProcessingIndicator {\r\n\r\n public isprocessing: boolean;\r\n private undoWatch: any = null;\r\n\r\n constructor(\r\n @Inject('$scope') private $scope : ng.IScope,\r\n @Inject() private isProcessingService: IsProcessingService) {\r\n }\r\n\r\n public $onInit() {\r\n this.undoWatch = this.isProcessingService.addListener((status) => {\r\n this.isprocessing = status;\r\n });\r\n this.isprocessing = this.isProcessingService.IsProcessing;\r\n }\r\n\r\n public $onDestroy() {\r\n this.undoWatch();\r\n }\r\n}\r\n\r\n","import { FIQAssist } from \"../app\";\r\nimport {Component, Attribute, Input, Output, Inject} from '@fiqas/angular-utils';\r\nimport { KeyCodes, KeyboardEventCode } from \"@fiqas/utils\"\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'pushbutton',\r\n transclude: true,\r\n template: `
      \r\n \r\n \r\n \r\n {{$ctrl.buttontext}}\r\n \r\n \r\n \r\n
      `\r\n})\r\nexport class Pushbutton {\r\n @Input() public isdisabled: boolean;\r\n\r\n @Attribute() public indicatorColor: string;\r\n @Attribute() public buttontext: string;\r\n @Attribute() public link: string;\r\n @Attribute() public arrow: 'none' | 'left' | 'right';\r\n\r\n @Output()\r\n public onclicked: () => void;\r\n\r\n public get indicatorStyle() {\r\n return this.indicatorColor ? { 'background-color': this.indicatorColor } : {};\r\n }\r\n\r\n constructor(\r\n @Inject('$transclude') $transclude: angular.ITranscludeFunction\r\n ) {\r\n\r\n }\r\n\r\n public onClick(event: Event) {\r\n if (this.isdisabled !== true)\r\n this.onclicked();\r\n }\r\n\r\n public onKey(event: KeyboardEvent) {\r\n if ((event.keyCode == KeyCodes.enter || event.code == KeyboardEventCode.enter) && !this.isdisabled) {\r\n event.preventDefault();\r\n this.onclicked();\r\n }\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Attribute, Output, Input } from \"@fiqas/angular-utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'pushicon',\r\n template: `
      \r\n \r\n
      `\r\n})\r\nexport class Pushicon {\r\n @Attribute() public icon: string;\r\n @Attribute() public link: string;\r\n @Attribute() public arrow: 'none' | 'left' | 'right';\r\n\r\n @Input() enabled: boolean;\r\n\r\n @Output()\r\n public onclicked: () => void;\r\n\r\n public $onInit() {\r\n if (this.enabled === undefined)\r\n this.enabled = true;\r\n }\r\n\r\n public onClick(event: Event) {\r\n event.preventDefault();\r\n if (this.enabled)\r\n this.onclicked();\r\n }\r\n\r\n public onKey(event: KeyboardEvent) {\r\n if (event.keyCode == 32 || event.keyCode == 13) {\r\n event.preventDefault();\r\n if (this.enabled)\r\n this.onclicked();\r\n }\r\n }\r\n\r\n private isfocus: boolean = false;\r\n\r\n public onFocus() {\r\n this.isfocus = true;\r\n }\r\n\r\n public onBlur() {\r\n this.isfocus = false;\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Attribute, Inject } from \"@fiqas/angular-utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'radiobar',\r\n transclude: true,\r\n template: `
      `\r\n})\r\nexport class RadioBar {\r\n private _element: angular.IRootElementService;\r\n private _transclude: angular.ITranscludeFunction;\r\n\r\n private _readOnly:boolean;\r\n @Input() public get readOnly(){\r\n return this._readOnly;\r\n }\r\n public set readOnly(readOnly:boolean){\r\n this._readOnly = readOnly;\r\n if(this._options)\r\n this.options.forEach(o=>o.readOnly = this.readOnly);\r\n }\r\n\r\n constructor(\r\n @Inject('$element') private $element: angular.IRootElementService,\r\n @Inject('$transclude') $transclude: angular.ITranscludeFunction\r\n ) {\r\n this._element = $element;\r\n this._transclude = $transclude;\r\n this.initTransclude(this._transclude, this._element);\r\n }\r\n\r\n initTransclude(transclude: angular.ITranscludeFunction, element: angular.IRootElementService) {\r\n transclude((e, s) =>\r\n element.children().children().append(e));\r\n }\r\n\r\n public addOption(option: BarOption): (sender: BarOption, value: boolean) => void {\r\n this.options = this.options.concat(option);\r\n option.readOnly = this.readOnly;\r\n return (s, v) => {\r\n if (v) {\r\n this.options.filter(o => o != s).forEach(o => o.active = false);\r\n this.checkActive();\r\n }\r\n };\r\n }\r\n\r\n @Output() public onoptionchanged: (args: { value: any, text: string }) => void;\r\n\r\n\r\n public get options(): BarOption[] {\r\n return this._options || [];\r\n }\r\n\r\n public set options(value: BarOption[]) {\r\n this._options = value;\r\n if (value && value.length > 0 && value.filter(o => o.active).length > 1) {\r\n value.filter(o => o.active).slice(1).forEach(o => o.active = false);\r\n }\r\n this.checkActive();\r\n }\r\n\r\n @Input()\r\n public get value() {\r\n return this._activeOption ? this._activeOption.value : undefined;\r\n }\r\n public set value(val) {\r\n if (val !== undefined) {\r\n var o = this.options.filter(op => op.value == val);\r\n if (o.length === 1) {\r\n o[0].active = true;\r\n if (this._activeOption !== o[0])\r\n this._activeOption = o[0];\r\n }\r\n }\r\n }\r\n\r\n private _options;\r\n\r\n private _activeOption: BarOption;\r\n\r\n private checkActive() {\r\n var a = this.options.filter(v => v.active).pop();\r\n if (a !== this._activeOption) {\r\n this._activeOption = a;\r\n var value = a ? a.value : null;\r\n var text = a ? a.text : null;\r\n this.onoptionchanged({ value: value, text: text });\r\n }\r\n }\r\n\r\n private onKey($event: KeyboardEvent) {\r\n if(this.readOnly)\r\n return;\r\n\r\n switch ($event.keyCode) {\r\n case 37:\r\n case 38:\r\n this.move(-1);\r\n break;\r\n\r\n case 39:\r\n case 40:\r\n this.move(1);\r\n break;\r\n }\r\n }\r\n\r\n private move(direction: number) {\r\n if (this.options.length > 0) {\r\n var newindex = Math.max(0, Math.min(this.options.length - 1, this.options.indexOf(this._activeOption) + direction));\r\n if (!this.options[newindex].notallowed) {\r\n this.value = this.options[newindex].value;\r\n this.onoptionchanged({ value: this.value, text: this.options[newindex].text });\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: \"radiobaroption\",\r\n controllerAs: \"baroption\",\r\n require: {\r\n radioBar: \"^radiobar\"\r\n },\r\n template: `
      \r\n
      {{baroption.text}}
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      `\r\n})\r\n\r\nexport class BarOption {\r\n @Input() public readOnly:boolean;\r\n constructor(\r\n @Inject('$scope') $scope\r\n ) {\r\n this.activecolor = this.activecolor || \"grey\";\r\n }\r\n\r\n private click(){\r\n if(!this.readOnly)\r\n this.active = true && !this.notallowed;\r\n }\r\n\r\n private _radioBar: RadioBar;\r\n public get radioBar() {\r\n return this._radioBar;\r\n }\r\n\r\n public set radioBar(b: RadioBar) {\r\n this._radioBar = b;\r\n }\r\n\r\n public $onInit() {\r\n if (this._radioBar)\r\n this.activeChanged = this._radioBar.addOption(this);\r\n\r\n if(!this.hint)\r\n this.hint = ''; // this.text\r\n }\r\n\r\n private activeChanged: (sender: BarOption, value: boolean) => void;\r\n private onActiveChanged() {\r\n if (this.activeChanged)\r\n this.activeChanged(this, this.active);\r\n }\r\n private _active: boolean;\r\n\r\n @Input()\r\n public get active(): boolean {\r\n return !!this._active;\r\n }\r\n public set active(value) {\r\n if (value !== undefined) {\r\n var a = this.active;\r\n this._active = (value === \"false\" ? false : !!value);\r\n if (this.active !== a)\r\n this.onActiveChanged();\r\n }\r\n }\r\n\r\n @Input() public value: any;\r\n @Input() public text: string;\r\n @Input() public hint: string;\r\n @Attribute() public labelbehind: boolean;\r\n @Input() public notallowed: boolean;\r\n @Input() public activecolor: string;\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Attribute, Inject } from \"@fiqas/angular-utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'radiobuttons',\r\n transclude: true,\r\n template: `
      `\r\n})\r\nexport class RadioButtons {\r\n\r\n private _element: angular.IRootElementService;\r\n private _transclude: angular.ITranscludeFunction;\r\n private _initialized: boolean = true;\r\n\r\n private _readOnly: boolean;\r\n @Input() public get readOnly() {\r\n return this._readOnly;\r\n }\r\n public set readOnly(readOnly: boolean) {\r\n this._readOnly = readOnly;\r\n if (this._options)\r\n this.options.forEach(o => o.readOnly = this.readOnly);\r\n }\r\n\r\n constructor(\r\n @Inject('$element') private $element: angular.IRootElementService,\r\n @Inject('$transclude') $transclude: angular.ITranscludeFunction\r\n ) {\r\n this._element = $element;\r\n this._transclude = $transclude;\r\n this.initTransclude(this._transclude, this._element);\r\n }\r\n\r\n initTransclude(transclude: angular.ITranscludeFunction, element: angular.IRootElementService) {\r\n transclude((e, s) =>\r\n element.children().append(e));\r\n }\r\n\r\n public $onInit() {\r\n this._initialized = true;\r\n }\r\n\r\n public addOption(option: Option): (sender: Option, value: boolean) => void {\r\n this.options = this.options.concat(option);\r\n option.readOnly = this.readOnly;\r\n if (this.activeOptionValue !== undefined && option.value == this.activeOptionValue)\r\n option.active = true;\r\n return (s, v) => {\r\n if (v) {\r\n this.options.filter(o => o != s).forEach(o => o.active = false);\r\n this.activeOptionValue = s.value;\r\n this.checkActive();\r\n }\r\n };\r\n }\r\n\r\n @Output() public onoptionchanged: (args: { group: string, value: any, text: string }) => void;\r\n\r\n public get options(): Option[] {\r\n return this._options || [];\r\n }\r\n\r\n public set options(value: Option[]) {\r\n if (this._initialized) {\r\n this._options = value;\r\n if (value && value.length > 0 && value.filter(o => o.active).length > 1) {\r\n value.filter(o => o.active).slice(1).forEach(o => o.active = false);\r\n }\r\n this.checkActive();\r\n }\r\n }\r\n\r\n @Input()\r\n public get value() {\r\n return this._activeOption ? this._activeOption.value : undefined;\r\n }\r\n\r\n public set value(val) {\r\n if (this._initialized && val !== undefined) {\r\n var o = this.options.filter(op => op.value == val);\r\n if (o.length === 1) {\r\n this.options.filter(op => op.value != val).forEach(o => o.active = false);\r\n o[0].active = true;\r\n if (this._activeOption !== o[0])\r\n this._activeOption = o[0];\r\n this.activeOptionValue = val;\r\n }\r\n if (this.options.length == 0)\r\n this.activeOptionValue = val;\r\n }\r\n }\r\n\r\n private onKey($event: KeyboardEvent) {\r\n if (this.readOnly)\r\n return;\r\n switch ($event.keyCode) {\r\n case 37:\r\n case 38:\r\n this.move(-1);\r\n break;\r\n\r\n case 39:\r\n case 40:\r\n this.move(1);\r\n break;\r\n }\r\n }\r\n\r\n private move(direction: number) {\r\n if (this.options.length > 0) {\r\n var newindex = Math.max(0, Math.min(this.options.length - 1, this.options.indexOf(this._activeOption) + direction));\r\n this.value = this.options[newindex].value;\r\n this.onoptionchanged({ group: this.group, value: this.value, text: this.options[newindex].text });\r\n }\r\n }\r\n\r\n\r\n @Input() public group: string;\r\n\r\n private _options;\r\n\r\n private activeOptionValue: any;\r\n private _activeOption: Option;\r\n\r\n private checkActive() {\r\n var a = this.options.filter(v => v.active).pop();\r\n if (a !== this._activeOption) {\r\n this._activeOption = a;\r\n var value = a ? a.value : null;\r\n var text = a ? a.text : null;\r\n this.onoptionchanged({ group: this.group, value: value, text: text });\r\n }\r\n }\r\n}\r\n@Component({\r\n module: FIQAssist,\r\n selector: \"radiooption\",\r\n controllerAs: \"option\",\r\n require: {\r\n radioButtons: \"^radiobuttons\"\r\n },\r\n template: `\r\n {{option.labelbehind ? '' : option.text}} \r\n
      \r\n {{option.labelbehind ? option.text : '' }} \r\n
      `\r\n})\r\nexport class Option {\r\n @Input() public readOnly: boolean;\r\n private _radioButtons: RadioButtons;\r\n private _initialized: boolean = false;\r\n public get radioButtons() {\r\n return this._radioButtons;\r\n };\r\n public set radioButtons(b: RadioButtons) {\r\n this._radioButtons = b;\r\n };\r\n constructor( @Inject('$scope') $scope) {\r\n\r\n }\r\n\r\n public $onInit() {\r\n this._initialized = true;\r\n if (this.radioButtons)\r\n this.activeChanged = this.radioButtons.addOption(this);\r\n }\r\n\r\n private activeChanged: (sender: Option, value: boolean) => void;\r\n private onActiveChanged() {\r\n if (this.activeChanged)\r\n this.activeChanged(this, this.active);\r\n }\r\n private _active: boolean;\r\n\r\n @Input()\r\n public get active(): boolean {\r\n return this._active;\r\n }\r\n public set active(value: boolean) {\r\n if (this._initialized && value !== undefined) {\r\n this._active = (value === false ? false : !!value);\r\n }\r\n }\r\n\r\n public clickActive() {\r\n if (this.readOnly)\r\n return;\r\n var a = this._active;\r\n this.active = true;\r\n if (this._active !== a)\r\n this.onActiveChanged();\r\n }\r\n\r\n @Input() public value: any;\r\n @Input() public text: string;\r\n @Input() public labelbehind: boolean;\r\n @Input() public notallowed: boolean;\r\n}","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Attribute, Inject } from \"@fiqas/angular-utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'roomdivider',\r\n transclude: true,\r\n template: `
      \r\n
      `\r\n})\r\nexport class RoomDivider {\r\n\r\n private _element: angular.IRootElementService;\r\n private _transclude: angular.ITranscludeFunction;\r\n private _initialized: boolean = true;\r\n\r\n constructor(\r\n @Inject('$element') private $element: angular.IRootElementService,\r\n @Inject('$transclude') $transclude: angular.ITranscludeFunction\r\n ) {\r\n this._element = $element;\r\n this._transclude = $transclude;\r\n this.initTransclude(this._transclude, this._element);\r\n }\r\n\r\n @Input() maxperctop: number;\r\n @Input() maxpercbottom: number;\r\n\r\n initTransclude(transclude: angular.ITranscludeFunction, element: angular.IRootElementService) {\r\n var index = 1;\r\n transclude((e, s) => {\r\n angular.forEach(e, x => {\r\n if (x.nodeType === 1) {\r\n var divEl = document.createElement(\"div\");\r\n divEl.classList.add(\"division\");\r\n divEl.classList.add(\"division-\" + index++);\r\n angular.element(divEl).append(x);\r\n element.children().append(divEl);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public $onInit() {\r\n this._initialized = true;\r\n\r\n// this.resize();\r\n }\r\n\r\n resize() {\r\n if (this.maxperctop && this.maxpercbottom) {\r\n var container = this.$element.children()[0];\r\n var total = container.clientHeight;\r\n var maxheight1 = this.maxperctop * total / 100;\r\n var maxheight2 = this.maxpercbottom * total / 100;\r\n\r\n var el1 = this.$element.children().children()[0];\r\n var el2 = this.$element.children().children()[1];\r\n\r\n el1.style.maxHeight = maxheight1 + \"px\";\r\n el2.style.maxHeight = maxheight2 + \"px\";\r\n }\r\n }\r\n\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Attribute, Input, Output, Inject } from \"@fiqas/angular-utils\";\r\nimport { CacheService } from \"../services/cache\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'scorebox',\r\n template: `
      \r\n \r\n {{$ctrl._score}}\r\n \r\n \r\n {{$ctrl.label}}\r\n \r\n
      `\r\n})\r\nexport class ScoreBox {\r\n private _score: number;\r\n private _level: string;\r\n\r\n private initialized: boolean = false;\r\n\r\n @Input()\r\n public get score(): number {\r\n return this._score;\r\n }\r\n public set score(val: number) {\r\n if (this.initialized && val !== undefined)\r\n this._score = val;\r\n }\r\n\r\n @Input()\r\n public get level(): string {\r\n return this._level;\r\n }\r\n public set level(val: string) {\r\n if (this.initialized && val)\r\n this._level = val;\r\n }\r\n\r\n @Input() public loading: boolean;\r\n @Input() public label: string;\r\n @Input() public hint: string;\r\n @Input() public compact: boolean;\r\n @Attribute() public storeid: string;\r\n\r\n @Output() public onclicked: (args: { source: ScoreBox }) => void;\r\n\r\n public click(event: JQueryEventObject) {\r\n this.onclicked({ source: this });\r\n }\r\n\r\n public constructor(\r\n @Inject() private cacheService: CacheService\r\n ) {\r\n }\r\n\r\n public $onInit() {\r\n if (this.storeid) {\r\n this._score = this.cacheService.getValue(\"scorebox.\" + this.storeid + \".score\") || 0;\r\n this._level = this.cacheService.getValue(\"scorebox.\" + this.storeid + \".level\") || \"none\";\r\n }\r\n else {\r\n this._score = 0;\r\n this._level = 'none';\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n public $onDestroy() {\r\n if (this.storeid) {\r\n this.cacheService.setValue(\"scorebox.\" + this.storeid + \".score\", this.score);\r\n this.cacheService.setValue(\"scorebox.\" + this.storeid + \".level\", this.level);\r\n }\r\n }\r\n\r\n private onKey($event: KeyboardEvent) {\r\n switch ($event.keyCode) {\r\n case 13:\r\n case 32:\r\n $event.preventDefault();\r\n this.onclicked({ source: this });\r\n break;\r\n }\r\n }\r\n\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Attribute, Inject } from \"@fiqas/angular-utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'section',\r\n transclude: false,\r\n template: `
      \r\n
      \r\n
      This is the header whose height is unknown
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      This is the scrollable content whose height is unknown
      \r\n
      This is the scrollable content whose height is unknown
      \r\n
      This is the scrollable content whose height is unknown
      \r\n
      This is the scrollable content whose height is unknown
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      This is the header whose height is unknown
      \r\n \r\n
      \r\n
      `\r\n})\r\nexport class Section {\r\n\r\n private _element: angular.IRootElementService;\r\n private _transclude: angular.ITranscludeFunction;\r\n\r\n constructor(\r\n @Inject('$element') private $element: angular.IRootElementService,\r\n @Inject('$transclude') $transclude: angular.ITranscludeFunction\r\n ) {\r\n //this._element = $element;\r\n //this._transclude = $transclude;\r\n //this.initTransclude(this._transclude, this._element);\r\n }\r\n\r\n initTransclude(transclude: angular.ITranscludeFunction, element: angular.IRootElementService) {\r\n transclude((e, s) =>\r\n element.children().append(e));\r\n }\r\n\r\n}","import { FIQAssist } from \"../app\";\r\nimport { Component, Input, Output, Binding, Attribute, Inject } from \"@fiqas/angular-utils\";\r\nimport { KeyCodes, KeyboardEventCode } from \"@fiqas/utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'texteditbox',\r\n template: `
      \r\n
      \r\n {{$ctrl._displayedHint | translate}}\r\n \r\n
      \r\n \r\n \r\n
      \r\n \r\n
      \r\n
      `\r\n})\r\nexport class TextEditBox {\r\n private _value: string;\r\n private _hint: string;\r\n private _displayedHint: string;\r\n private _hasFocus: boolean = false;\r\n private wasFocused: boolean = false;\r\n private _dirty: boolean = false;\r\n\r\n @Input() public readOnly: boolean;\r\n\r\n constructor(\r\n @Inject('$timeout') private $timeout: ng.ITimeoutService,\r\n @Inject('$element') private $element: angular.IRootElementService) {\r\n }\r\n\r\n private get hasValue() {\r\n return this._value !== null && this._value !== undefined && this._value !== \"\" && this._value !== \" \";\r\n }\r\n\r\n private get showError() {\r\n return this.mandatory && ((!this._hasFocus && this.wasFocused && !this.hasValue) || (!this._hasFocus && this.iserror));\r\n }\r\n\r\n private _childClasses;\r\n @Attribute() public get childClasses() {\r\n return this._childClasses;\r\n }\r\n public set childClasses(val: string) {\r\n this._childClasses = val;\r\n }\r\n\r\n private _mandatory;\r\n @Attribute() public get mandatory() {\r\n return this._mandatory;\r\n }\r\n public set mandatory(val: boolean | string) {\r\n this._mandatory = val === true || val === \"true\";\r\n }\r\n @Input() public active: boolean;\r\n @Input() public get value() {\r\n return this._value;\r\n }\r\n public set value(val: string) {\r\n if (val != this._value) {\r\n this._value = val;\r\n if (!this.changeonblur) {\r\n this.valueChanged({ value: this._value });\r\n } else {\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n\r\n @Input()\r\n public get hint(): string {\r\n return this._hint;\r\n }\r\n public set hint(theHint: string) {\r\n this._hint = theHint;\r\n this._displayedHint = this._hasFocus ? '' : this._hint;\r\n }\r\n\r\n @Input() public multiline: boolean;\r\n @Input() public focusinput: boolean;\r\n @Input() public candelete: boolean;\r\n @Input() public ispassword: boolean;\r\n @Input() public iserror: boolean;\r\n @Input() public changeonblur: boolean = false;\r\n\r\n @Input() public debounce: number = 0;\r\n\r\n @Output() public valueChanged: (args: { value: string }) => void;\r\n @Output() public valueSubmit: (args: { value: string }) => void;\r\n\r\n private onKey($event: KeyboardEvent) {\r\n // ToDo (BZ): be aware there are multiple ways how changes are detected and 'broadcasted'.\r\n // The test for this.valueSubmit is always true.\r\n if (this.valueSubmit && ($event.keyCode === KeyCodes.enter || $event.code === KeyboardEventCode.enter)) {\r\n $event.preventDefault();\r\n this.valueSubmit({value: this._value});\r\n }\r\n }\r\n\r\n private onFocus() {\r\n this._hasFocus = this.wasFocused = true;\r\n }\r\n\r\n private onBlur() {\r\n this._hasFocus = false;\r\n if (!this.hasValue)\r\n this._displayedHint = this._hint;\r\n if (this.readOnly)\r\n return;\r\n if (this.changeonblur && this._dirty) {\r\n this._dirty = false;\r\n this.valueChanged({ value: this._value });\r\n }\r\n }\r\n\r\n private onChange(event: any) {\r\n if (this.readOnly)\r\n return;\r\n if (this.changeonblur) {\r\n this._dirty = true;\r\n } else {\r\n this.valueChanged({ value: this._value });\r\n }\r\n }\r\n\r\n async $postLink() {\r\n if (this.focusinput) {\r\n await this.$timeout(25);\r\n this.focusField();\r\n }\r\n }\r\n\r\n private focusField() {\r\n var element = this.$element;\r\n var field = (element[0].getElementsByClassName(this.multiline ? 'texteditarea' : 'texteditbox').item(0));\r\n if (field)\r\n field.focus();\r\n }\r\n\r\n public ClearField() {\r\n if (this.readOnly || !this.candelete)\r\n return;\r\n\r\n this.focusField();\r\n this._value = '';\r\n this.valueChanged({ value: this._value });\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { IParent, IMediator, IMediatedChild } from \"../interfaces/IParentChild\";\r\nimport { Component, Input, Output, Attribute, Inject } from \"@fiqas/angular-utils\";\r\n\r\n@Component({\r\n module: FIQAssist,\r\n selector: 'toggleswitch',\r\n template: `
      \r\n \r\n \r\n \r\n
      `\r\n})\r\nexport class Toggleswitch implements IMediatedChild {\r\n @Input() public readOnly: boolean;\r\n @Input() public ignoreKeys: boolean;\r\n private _initialized = false;\r\n constructor(\r\n @Inject('$element') private $element: angular.IRootElementService,\r\n @Inject('$rootScope') private $rootScope: angular.IRootScopeService\r\n ) {\r\n }\r\n\r\n public $onInit() {\r\n this._initialized = true;\r\n this.$rootScope.$on('eventCleared', (event) => {\r\n if (this.$element[0].classList.contains('my-service-cases')) {\r\n this.active = false;\r\n }\r\n });\r\n }\r\n\r\n @Input() tabIndex: number;\r\n\r\n private _parent: IParent = null;\r\n @Input()\r\n public set parent(value: IParent) {\r\n if (value != null && this.parent !== value) {\r\n this._parent = value;\r\n this.parent.addChild(this);\r\n if (this._mediator)\r\n this._mediator.parent = this._parent;\r\n }\r\n }\r\n public get parent(): IParent {\r\n return this._parent;\r\n }\r\n\r\n private _mediator: IMediator = null;\r\n @Input()\r\n public set mediator(value: IMediator) {\r\n if (value != null && this._mediator !== value) {\r\n this._mediator = value;\r\n this._mediator.child = this;\r\n if (this._parent)\r\n this._mediator.parent = this._parent;\r\n }\r\n }\r\n public get mediator(): IMediator {\r\n return this._mediator;\r\n }\r\n\r\n public get switchClass() {\r\n return `icon-checkbox${this.active ? 'ON' : this.readOnly ? 'DIS' : 'OFF'}${this.hasfocus && !this.readOnly ? '-Focus' : ''}`;\r\n }\r\n\r\n @Input() public key: any;\r\n\r\n private _active: boolean;\r\n\r\n @Input() public get active() {\r\n return this._active;\r\n }\r\n public set active(val: boolean) {\r\n var v = this._active;\r\n this._active = !!val;\r\n if (this._initialized && v !== val)\r\n this.activechanged({ source: this, active: val });\r\n }\r\n @Output() public activechanged: (args: { source: Toggleswitch, active: boolean }) => void;\r\n\r\n public toggle($event: JQueryEventObject | KeyboardEvent) {\r\n $event.preventDefault();\r\n if (!this.hasfocus) {\r\n this.hasfocus = true;\r\n }\r\n if (!this.readOnly) {\r\n this.active = !this.active;\r\n }\r\n }\r\n\r\n public onKeydown($event: KeyboardEvent) {\r\n if (this.readOnly || this.ignoreKeys)\r\n return;\r\n switch ($event.keyCode) {\r\n case 13:\r\n break;\r\n case 32:\r\n this.toggle($event);\r\n break;\r\n\r\n case 37:\r\n $event.preventDefault();\r\n this.active = false;\r\n break;\r\n\r\n case 39:\r\n $event.preventDefault();\r\n this.active = true;\r\n break;\r\n }\r\n\r\n }\r\n\r\n private _focus: boolean = false;\r\n public get hasfocus() {\r\n return this._focus;\r\n }\r\n public set hasfocus(val: boolean) {\r\n if (this._focus !== val) {\r\n if (val && document.activeElement !== this.$element[0]) {\r\n this.$element[0].querySelector('.toggleswitch').focus();\r\n }\r\n this._focus = val;\r\n }\r\n }\r\n private onFocus() {\r\n }\r\n private onBlur() {\r\n this.hasfocus = false;\r\n }\r\n}\r\n\r\n","import { FIQAssist } from \"../app\"\r\nimport { Directive, Inject } from \"@fiqas/angular-utils\";\r\nimport { Utils } from \"@fiqas/utils\";\r\nimport { Application } from \"../components/application\";\r\n@Directive({\r\n selector: ApplicationSetting.selector,\r\n module: FIQAssist\r\n})\r\nexport class ApplicationSetting {\r\n public static selector = \"applicationSetting\";\r\n public require = \"^application\"\r\n constructor() {\r\n\r\n }\r\n public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, application:Application): void {\r\n Utils.forEachProperty(attrs, (p, k) => application.Settings[k] = p, (p, k) => k.indexOf(\"$\") !== 0);\r\n }\r\n}","import { FIQAssist } from \"../app\"\r\nimport { Directive, Inject } from \"@fiqas/angular-utils\";\r\nimport { CacheService } from \"../services/cache\";\r\n@Directive({\r\n selector: BroadcastSize.selector,\r\n module: FIQAssist\r\n})\r\nexport class BroadcastSize {\r\n public static selector = \"broadcastSize\";\r\n public static SizeEventName = \"sizeEventName\";\r\n public static SizeEventWatch = \"sizeEventWatch\";\r\n constructor(\r\n @Inject('$window') private $window: ng.IWindowService,\r\n @Inject() private cacheService: CacheService\r\n ) {\r\n }\r\n\r\n public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes): void {\r\n var sizeEventName: string = attrs[BroadcastSize.SizeEventName];\r\n var sizeEventNameArgs: { height: number, width: number } = { height: -1, width: -1 };\r\n sizeEventNameArgs.height = element[0].offsetHeight;\r\n sizeEventNameArgs.width = element[0].offsetWidth;\r\n this.cacheService.setValue(`size:${sizeEventName}`, sizeEventNameArgs);\r\n var action = differendArgumentsNotUsed => {\r\n if ((sizeEventNameArgs.height != element[0].offsetHeight || sizeEventNameArgs.width != element[0].offsetWidth) && !!scope && !!scope.$root && !!scope.$root.$broadcast) {\r\n sizeEventNameArgs.height = element[0].offsetHeight;\r\n sizeEventNameArgs.width = element[0].offsetWidth;\r\n scope.$root.$broadcast(`size:${sizeEventName}`, sizeEventNameArgs);\r\n }\r\n }\r\n // WARNING action doesn't use the `newValue`, `oldValue` and `scope` arguments\r\n scope.$watch(attrs[BroadcastSize.SizeEventWatch], action);\r\n // WARNING action doesn't use the `window`, `view` arguments\r\n this.$window.addEventListener('resize', action);\r\n action(null);\r\n }\r\n}","import { Directive } from \"@fiqas/angular-utils\";\r\nimport { FIQAssist } from \"../app\";\r\n\r\n@Directive({\r\n module: FIQAssist,\r\n selector: ValidateMaxDate.selector\r\n})\r\nexport class ValidateMaxDate implements ng.IDirective {\r\n public static selector = \"validateMaxDate\";\r\n public require = \"ngModel\";\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, ctrl: ng.INgModelController): void {\r\n var maxDate: Date = null;\r\n scope.$watch(attrs[ValidateMaxDate.selector], val => {\r\n maxDate = val;\r\n });\r\n ctrl.$validators[\"maxDate\"] = (modelValue: Date, viewValue: Date) => {\r\n if (!maxDate || ctrl.$isEmpty(modelValue))\r\n return true;\r\n\r\n var valid = modelValue.getTime() <= maxDate.getTime();\r\n return valid;\r\n };\r\n }\r\n}\r\n@Directive({\r\n module: FIQAssist,\r\n selector: ValidateMinDate.selector,\r\n})\r\nexport class ValidateMinDate implements ng.IDirective {\r\n public static selector = \"validateMinDate\";\r\n public require = \"ngModel\";\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, ctrl: ng.INgModelController): void {\r\n var minDate: Date = null;\r\n scope.$watch(attrs[ValidateMinDate.selector], val => {\r\n minDate = val;\r\n });\r\n ctrl.$validators[\"minDate\"] = (modelValue: Date, viewValue: Date) => {\r\n if (!minDate || ctrl.$isEmpty(modelValue))\r\n return true;\r\n\r\n var valid = minDate.getTime() <= modelValue.getTime();\r\n return valid;\r\n };\r\n }\r\n} ","import { FIQAssist } from \"../app\"\r\nimport { Directive } from \"@fiqas/angular-utils\";\r\nimport { KeyCodes, KeyboardEventCode } from \"@fiqas/utils\";\r\n\r\n@Directive({\r\n selector: 'onlyNumeric',\r\n module: FIQAssist\r\n})\r\nexport class OnlyNumeric {\r\n\r\n constructor() {}\r\n\r\n public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes): void {\r\n\r\n element.on('keypress', function (event: any) {\r\n if (event.which >= 48 && event.which <= 57\r\n || event.which === 0 && event.charCode === 0\r\n || event.keyCode === KeyCodes.backspace\r\n || event.keyCode === KeyCodes.delete\r\n || event.keyCode === KeyCodes.dash\r\n || event.keyCode === KeyCodes.subtract\r\n || event.code === KeyboardEventCode.backspace\r\n || event.code === KeyboardEventCode.delete\r\n || event.code === KeyboardEventCode.dash\r\n || event.code === KeyboardEventCode.subtract\r\n || event.key === '-'\r\n ) {\r\n // to allow numbers\r\n return true;\r\n } else {\r\n // to stop others\r\n event.preventDefault();\r\n return false;\r\n }\r\n });\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\"\r\nimport { Directive, Inject, NgUtils } from \"@fiqas/angular-utils\";\r\nimport { CacheService } from \"../services/cache\";\r\n@Directive({\r\n selector: WatchSize.Selector,\r\n module: FIQAssist\r\n})\r\nexport class WatchSize {\r\n public static Selector = \"watchSize\";\r\n public static SizeEventName = \"sizeEventName\";\r\n public static SizeEventHandler = \"sizeEventHandler\";\r\n constructor(\r\n @Inject('$window') private $window: ng.IWindowService,\r\n @Inject('$parse') private $parse: ng.IParseService,\r\n @Inject() private cacheService: CacheService\r\n ) {\r\n }\r\n\r\n public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes): void {\r\n var sizeEventName: string = attrs[WatchSize.SizeEventName];\r\n // var sizeEventHandler = this.$parse(attrs[WatchSize.SizeEventHandler]);\r\n var sizeEventArgs: { height: number, width: number } = this.cacheService.getValue<{ height: number, width: number }>(`size:${sizeEventName}`);\r\n var sizeHeaderEventArgs: { height: number, width: number } = this.cacheService.getValue<{ height: number, width: number }>(`size:Header`);\r\n var action = () => {\r\n if (sizeHeaderEventArgs && sizeEventArgs) {\r\n var rightspace = (sizeHeaderEventArgs.width - 1200) / 2;\r\n if (sizeEventArgs.width < rightspace) element.css('max-width', `100%`);\r\n else element.css('max-width', `calc(100% - ${sizeEventArgs.width - rightspace}px)`);\r\n }\r\n }\r\n scope.$root.$on(`size:${sizeEventName}`, (event, args) => {\r\n sizeEventArgs = args;\r\n action();\r\n });\r\n scope.$root.$on(`size:Header`, (event, args) => {\r\n sizeHeaderEventArgs = args;\r\n action();\r\n });\r\n action();\r\n }\r\n}","import { Inject, Pipe, Injectable } from \"@fiqas/angular-utils\"\r\nimport { FIQAssist } from \"../app\";\r\nimport { TranslationService } from \"../services/TranslationService\";\r\nimport { LocalizationData } from \"../models/localization\";\r\n\r\nexport class TranslationFilter {\r\n\r\n @Pipe({\r\n module: FIQAssist,\r\n selector: 'translate',\r\n pure: false\r\n })\r\n public static TranslationFilter( @Inject('TranslationService') translationService: TranslationService) {\r\n\r\n return (key: string): string => {\r\n return translationService.Translate(key);\r\n };\r\n }\r\n\r\n @Pipe({\r\n module: FIQAssist,\r\n selector: 'translateAvailable',\r\n pure: false\r\n })\r\n public static TranslationAvailabileFilter( @Inject('TranslationService') translationService: TranslationService) {\r\n\r\n return (key: string): string => {\r\n return translationService.Translate(key, true);\r\n };\r\n }\r\n}\r\n","import { Inject, Pipe, Injectable } from \"@fiqas/angular-utils\"\r\nimport { FIQAssist } from \"../app\";\r\nimport { TranslationService } from \"../services/TranslationService\";\r\nimport { LocalizationData } from \"../models/localization\";\r\n\r\nexport class FirstCapitalFilter {\r\n\r\n @Pipe({\r\n module: FIQAssist,\r\n selector: 'firstcapital',\r\n pure: false\r\n })\r\n public static FirstCapitalFilter() {\r\n\r\n return (key: string): string => {\r\n return (key.substr(0, 1) ||'').toUpperCase() + (key.substr(1)||'').toLowerCase();\r\n };\r\n }\r\n}\r\n","import { Inject, Pipe, Injectable } from \"@fiqas/angular-utils\"\r\nimport { FIQAssist } from \"../app\";\r\n\r\nexport class HtmlTrusted {\r\n @Pipe({\r\n module: FIQAssist,\r\n selector: 'htmltrusted',\r\n pure:true\r\n })\r\n public static HtmlTrusted( @Inject ('$sce') $sce: ng.ISCEService) {\r\n return (html: string): any => {\r\n if(html === undefined)\r\n return null;\r\n return $sce.trustAsHtml(html);\r\n };\r\n }\r\n }","import { Inject, Pipe, Injectable } from \"@fiqas/angular-utils\"\r\nimport { FIQAssist } from \"../app\";\r\n\r\nexport class IsoDateFilter {\r\n @Pipe({\r\n module: FIQAssist,\r\n selector: 'isotodate',\r\n pure:true\r\n })\r\n public static IsoToDate() {\r\n return (dateString: string):Date => {\r\n if(dateString === undefined)\r\n return null;\r\n return Date.parseOrNull(dateString);\r\n };\r\n }\r\n }","import { Inject, Pipe, Injectable } from \"@fiqas/angular-utils\"\r\nimport { FIQAssist } from \"../app\";\r\nimport { TranslationService } from \"../services/TranslationService\";\r\nimport { LocalizationData } from \"../models/localization\";\r\n\r\nexport class LinefeedToBreakFilter {\r\n\r\n @Pipe({\r\n module: FIQAssist,\r\n selector: 'linefeedtobreak',\r\n pure: true\r\n })\r\n public static LinefeedToBreakFilter() {\r\n return (text: string): string => text ? text.replace(/(?:\\r\\n|\\r|\\n)/g, '
      ') : \"\";\r\n }\r\n}\r\n","export interface ILiteEvent {\r\n on(handler: { (data?: T): void }): void;\r\n off(handler: { (data?: T): void }): void;\r\n}\r\n\r\nexport class LiteEvent implements ILiteEvent {\r\n private handlers: { (data?: T): void; }[] = [];\r\n\r\n public on(handler: { (data?: T): void }) {\r\n this.handlers.push(handler);\r\n }\r\n\r\n public off(handler: { (data?: T): void }) {\r\n this.handlers = this.handlers.filter(h => h !== handler);\r\n }\r\n\r\n public trigger(data?: T) {\r\n this.handlers.slice(0).forEach(h => h(data));\r\n }\r\n}","import \"../app\";\r\nimport { WebLink, HTTPMethod } from \"../models/base\"\r\n\r\nexport interface IFqsResult {\r\n _embedded: IIdentifiable[];\r\n _actions?: { [groupname: string]: { [name: string]: { href: string, method?: HTTPMethod } } };\r\n _curies: { name: string, href: string }[];\r\n}\r\n\r\nexport type ActionLinkAction = (data?: D, urlparams?: { [key: string]: P }) => ng.IPromise;\r\n\r\nexport interface IIdentityLink extends WebLink {\r\n fullHref: string;\r\n equals(link: WebLink): boolean;\r\n}\r\n\r\nexport interface IResourceLink extends IIdentityLink {\r\n ref: string;\r\n _ref: string;\r\n}\r\n\r\nexport interface IIdentifiable {\r\n id: IIdentityLink;\r\n}\r\nexport interface IResource extends IIdentifiable {\r\n id: IResourceLink;\r\n}\r\n\r\nexport interface IIdentityResolver extends IIdentityLink {\r\n value: angular.IPromise;\r\n}\r\n\r\nexport interface IResourceResolver extends IIdentityResolver, IResourceLink {\r\n value: angular.IPromise;\r\n}\r\n\r\nexport interface IIdentifiableOf extends IIdentifiable {\r\n id: IIdentityResolver;\r\n}\r\n\r\nexport interface IResourceOf extends IIdentifiableOf, IResource {\r\n id: IResourceResolver;\r\n}\r\n\r\nexport interface IIdentifiableCollection extends IIdentifiable {\r\n items: any[]\r\n}\r\n\r\nexport interface IIdentifiableCollectionOf extends IIdentifiableCollection {\r\n items: T[]\r\n}\r\n\r\nexport interface IIdentifiablePagedCollection extends IIdentifiableCollection {\r\n page: number\r\n pageCount?: number\r\n prev?: IIdentityLink\r\n next?: IIdentityLink\r\n first?: IIdentityLink\r\n last?: IIdentityLink\r\n}\r\n\r\nexport interface IIdentifiablePagedCollectionOf extends IIdentifiableCollectionOf, IIdentifiablePagedCollection {\r\n items: T[]\r\n}\r\n\r\nexport interface CollectionResult extends IIdentifiableCollectionOf {\r\n page: number;\r\n pageCount: number;\r\n count: number;\r\n}\r\n\r\nexport type IIdentifiableCollectionProperty = IIdentifiableCollection | IIdentityResolver\r\n\r\nexport type IIdentifiableCollectionPropertyOf = IIdentifiableCollectionOf | IIdentityResolver>\r\n\r\nexport type IIdentifiablePagedCollectionProperty = IIdentifiablePagedCollection | IIdentityResolver\r\n\r\nexport type IIdentifiablePagedCollectionPropertyOf = IIdentifiablePagedCollectionOf | IIdentityResolver>\r\n\r\n","export interface ILiteEvent {\r\n on(handler: { (data?: T): void }): void;\r\n off(handler: { (data?: T): void }): void;\r\n}\r\n\r\nexport class LiteEvent implements ILiteEvent {\r\n private handlers: { (data?: T): void; }[] = [];\r\n\r\n public on(handler: { (data?: T): void }) {\r\n this.handlers.push(handler);\r\n }\r\n\r\n public off(handler: { (data?: T): void }) {\r\n this.handlers = this.handlers.filter(h => h !== handler);\r\n }\r\n\r\n public trigger(data?: T) {\r\n this.handlers.slice(0).forEach(h => h(data));\r\n }\r\n}","import \"../app\";\r\nimport { IResourceOf } from \"../interfaces/iFqs\"\r\n\r\nexport interface Complaint extends IResourceOf, ComplaintData { }\r\n\r\nexport interface ComplaintData {\r\n Content: string;\r\n}","import \"../app\";\r\nimport { IResourceOf } from \"../interfaces/iFqs\"\r\nexport interface Compliment extends IResourceOf, ComplimentData { }\r\n\r\nexport interface ComplimentData {\r\n Content: string;\r\n}","import \"@fiqas/utils\"\r\nimport { FIQAssist } from \"../app\";\r\nimport { IResourceOf } from \"../interfaces/iFqs\"\r\nimport { WebLink } from \"./base\"\r\n\r\nexport interface CaseFileData {\r\n createdBy: string;\r\n createdOn: ISODateTimeString;\r\n modifiedBy: string;\r\n modifiedOn: ISODateTimeString;\r\n description: string;\r\n filename: string;\r\n content: string;\r\n}\r\n\r\nexport interface CaseFile extends IResourceOf, CaseFileData { }","import \"../app\";\r\nimport \"@fiqas/utils\"\r\nimport { IIdentifiableCollectionOf, IResourceOf } from \"../interfaces/iFqs\"\r\nimport { WebLink } from \"./base\"\r\n\r\nexport interface GetPersonsResult extends IIdentifiableCollectionOf { }\r\n\r\nexport interface CompactPerson extends IResourceOf {\r\n name: string;\r\n isFiqasEmployee: boolean;\r\n isFormerEmployee: boolean;\r\n hasLogin: boolean;\r\n}\r\n\r\nexport interface Person extends IResourceOf, PersonData { }\r\n\r\nexport interface PersonData {\r\n firstName: string;\r\n middleName: string;\r\n lastName: string;\r\n initials: string;\r\n email: string;\r\n phone: string[];\r\n name: string;\r\n}\r\n\r\nexport interface FiqasEmployee extends Person { }\r\n","import \"../app\";\r\nimport \"@fiqas/utils\"\r\nimport { IResourceOf, IResourceResolver } from \"../interfaces/iFqs\"\r\nimport { Person } from \"./person\"\r\n\r\nexport type RecordHistoryType = \"document\" | \"description\" | \"property\" | \"feedbackStatus\" | \"watch\" | \"title\";\r\n\r\nexport interface RecordHistory extends IResourceOf {\r\n modifiedBy: string;\r\n modifiedById: IResourceResolver;\r\n modifiedOn: ISODateTimeString;\r\n oldContent: string\r\n newContent: string;\r\n itemName: string;\r\n itemDesc: string;\r\n itemType: RecordHistoryType;\r\n}\r\n","import \"@fiqas/utils\"\r\nimport { IIdentityLink } from \"../interfaces/iFqs\";\r\nimport { CaseType } from \"./serviceCase\";\r\n\r\nexport interface ReportCollection {\r\n id: IIdentityLink,\r\n desc: string,\r\n value: any,\r\n items: ReportCollectionItem[],\r\n records: IIdentityLink,\r\n _curies: { name: string, href: string }[],\r\n}\r\n\r\nexport interface ReportCollectionItem {\r\n desc: string,\r\n value: any,\r\n items?: ReportCollectionItem[],\r\n records?: IIdentityLink,\r\n}\r\n\r\nexport type ReportAngle = string;\r\nexport type ReportType = \"active\" | \"project\" | \"historic\" | \"balance\";\r\nexport type ReportPeriod = \"year\" | \"month\" | \"week\" | \"day\";\r\nexport type CaseState = \"new\" | \"closed\" | \"all\";\r\nexport type BalanceCaseType = \"request\" | \"bug\" | \"all\";\r\n\r\nexport interface ReportParameters {\r\n reportType?: ReportType;\r\n angle: ReportAngle;\r\n projectTreeOfNumber: string;\r\n from?: ISODateString;\r\n until?: ISODateString;\r\n cid: number[];\r\n caseType: CaseType[];\r\n activeCasesOnly: boolean;\r\n}\r\nexport interface BalanceReportParameters {\r\n from?: ISODateString;\r\n until?: ISODateString;\r\n caseType: BalanceCaseType;\r\n period: ReportPeriod;\r\n caseState: CaseState;\r\n cid: number[];\r\n}\r\n","import \"../app\";\r\nimport \"@fiqas/utils\"\r\nimport { IResourceOf, IResourceResolver, IResourceLink, IIdentifiableCollectionPropertyOf, IIdentifiablePagedCollectionPropertyOf, ActionLinkAction } from \"../interfaces/iFqs\"\r\nimport { Person, FiqasEmployee, GetPersonsResult } from \"./person\"\r\nimport { Customer } from \"./customer\"\r\nimport { WebLink } from \"./base\"\r\nimport { CaseFile } from \"./file\"\r\nimport { RecordHistory } from \"./recordHistory\"\r\n\r\nexport type Priority = \"high\" | \"medium\" | \"low\" | \"_unsupported\";\r\nexport type Status = \"waitingForRelease\" | \"approved\" | \"analysis\" | \"waitingForUat\" | \"readyForUat\" | \"delivered\" | \"rework\" | \"inProgress\" | \"closed\" | \"open\" | \"parked\" | \"cancelled\" | \"explained\" | \"_unsupported\";\r\nexport type CaseType = \"bug\" | \"request\" | \"support\";\r\nexport type Severity = \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level99\" | \"_unsupported\";\r\nexport type Impact = \"low\" | \"medium\" | \"high\" | \"_unsupported\";\r\nexport type Environment = \"dev\" | \"test\" | \"uat\" | \"prod\" | \"na\";\r\nexport type FeedbackStatus = 'provided' | 'requested' | 'notRequired' | '_unsupported';\r\nexport type CorrespondenceType = 'email' | 'feedbackFromCustomer' | 'taskDescriptionHtml' | 'taskDescription' | 'generalNote' | 'feedbackRequest' | 'feedbackReply' | 'internal' | '_unsupported';\r\nexport type CaseOwnership = \"serviceDesk\" | \"billingBureau\" | \"projectManagement\" | \"sales\" | \"_unsupported\";\r\nexport type CaseCause = \"uat\" | \"billableSupport\" | \"configBug\" | \"toBeDetermined\" | \"custKnowlegdeIssue\" | \"custData\" | \"custConfig\" | \"custVersionControlIssue\" | \"custRequest\" | \"incorrectRequirements\" | \"changedRequirements\" | \"softwareBug\" | \"databaseIssue\" | \"versionControlIssue\" | \"other\" | \"usabilityImprovement\" | \"paymentProcessing\" | \"userMaintenance\" | \"dBAActivitice\" | \"network\" | \"thirdParty\" | \"_unsupported\";\r\nexport type ResponsibleSDEmployee = \"stefan\" | \"dave\" | \"ilse01\" | \"ingeborg\" | \"tbd\" | \"fintern\";\r\n\r\nexport interface RecentServiceCasesResult extends IResourceOf {\r\n items: CompactRecentServiceCase[];\r\n}\r\n\r\nexport interface ServiceCaseRef {\r\n number: string,\r\n id: IResourceLink,\r\n type: CaseType\r\n title?: string\r\n}\r\n\r\nexport interface CompactServiceCase extends IResourceOf {\r\n customer: IResourceResolver;\r\n contactPerson: IResourceResolver;\r\n start: ISODateTimeString;\r\n modifiedOn: ISODateTimeString;\r\n modifiedBy: string;\r\n title: string;\r\n caseNumber: string;\r\n parentCaseNumber: string;\r\n childCaseNumbers: Array;\r\n customerDesc: string;\r\n customerReference: string;\r\n createdBy: string;\r\n statusDesc: string;\r\n status: Status;\r\n type: CaseType;\r\n severity: Severity;\r\n priority: Priority;\r\n feedbackStatus: FeedbackStatus;\r\n actionRequired: boolean;\r\n requestedDeadline?: ISODateString;\r\n rememberMeDate?: ISODateString;\r\n rememberMeReason: string;\r\n}\r\n\r\nexport interface CompactRecentServiceCase extends CompactServiceCase {\r\n lastOpened: ISODateTimeString;\r\n}\r\n\r\nexport interface CompactSearchServiceCase extends CompactServiceCase {\r\n modifiedOn: ISODateTimeString;\r\n}\r\n\r\nexport interface GeneralLink {\r\n action: ActionLinkAction;\r\n}\r\n\r\nexport interface StatusLink {\r\n action: ActionLinkAction;\r\n}\r\n\r\nexport interface FeedbackLink {\r\n action: ActionLinkAction<{ correspondence: CorrespondenceData }, void, void>;\r\n}\r\n\r\n\r\n\r\nexport interface ActionLinks {\r\n [actiongroup: string]: { [key: string]: GeneralLink }\r\n statusLinks?: { [key: string]: StatusLink }\r\n feedbackStatusLinks?: { [key: string]: FeedbackLink }\r\n generalLinks?: {\r\n hasChanged?: GeneralLink\r\n watch?: GeneralLink\r\n unwatch?: GeneralLink\r\n addWatchers: GeneralLink\r\n getWatchers: GeneralLink\r\n removeWatchers: GeneralLink\r\n }\r\n}\r\n\r\nexport interface HasActions {\r\n actionLinks: ActionLinks\r\n}\r\n\r\nexport interface ServiceCase extends IResourceOf, ServiceCaseData, HasActions {\r\n customer: IResourceResolver\r\n fiqasOwnership: IResourceResolver\r\n contactPerson: IResourceResolver\r\n files: IIdentifiableCollectionPropertyOf\r\n correspondence: IIdentifiablePagedCollectionPropertyOf & { generalLinks?: GeneralLink[] }\r\n history: IIdentifiableCollectionPropertyOf\r\n watcherCount: Number\r\n}\r\n\r\nexport interface ServiceCaseData {\r\n start: ISODateTimeString,\r\n end?: ISODateTimeString,\r\n title: string,\r\n description: string,\r\n customer: IResourceLink,\r\n fiqasOwnership: IResourceLink,\r\n contactPerson: WebLink,\r\n status: Status,\r\n type?: CaseType,\r\n priority: Priority,\r\n internalTaskLink: string,\r\n caseNumber: string,\r\n feedbackStatus?: FeedbackStatus,\r\n parentCaseNumber: string,\r\n increasedPriority: boolean,\r\n requestedDeadline?: ISODateString,\r\n customerReference: string,\r\n actionRequired?: boolean,\r\n duration?: number,\r\n createdOn: ISODateTimeString,\r\n createdBy: string,\r\n caseCause?: CaseCause,\r\n caseOwnership?: CaseOwnership,\r\n responsibleSDEmployee?: ResponsibleSDEmployee\r\n budgetIndication?: number,\r\n approvedHoursMin?: number,\r\n approvedHoursMax?: number,\r\n actualHoursSpent: number;\r\n approvedHoursCommentBySD: string,\r\n spTsTask: string,\r\n rememberMeDate?: ISODateString,\r\n rememberMeReason: string,\r\n ignoreChatMemoSequence: string;\r\n ignoreMailing?: boolean;\r\n}\r\n\r\nexport interface Problem extends ServiceCase, IResourceOf, ProblemData, HasActions {\r\n id: IResourceResolver;\r\n customer: IResourceResolver,\r\n contactPerson: IResourceResolver,\r\n fiqasOwnership: IResourceResolver\r\n}\r\n\r\nexport interface ProblemData extends ServiceCaseData {\r\n severity: Severity,\r\n environment?: Environment,\r\n systemDown?: boolean,\r\n impactCategory?: Impact,\r\n workaroundAvailable: boolean\r\n}\r\n\r\nexport interface Request extends ServiceCase, IResourceOf, RequestData, HasActions {\r\n id: IResourceResolver;\r\n customer: IResourceResolver,\r\n contactPerson: IResourceResolver,\r\n fiqasOwnership: IResourceResolver\r\n}\r\n\r\nexport interface RequestData extends ServiceCaseData { }\r\n\r\nexport interface Correspondence extends IResourceOf, CorrespondenceData {\r\n createdById: IResourceResolver\r\n correspondenceType: CorrespondenceType,\r\n originalContent: string,\r\n}\r\n\r\nexport interface CorrespondenceData {\r\n content: string,\r\n createdOn: ISODateTimeString,\r\n createdBy: string,\r\n bySupportEmployee: boolean,\r\n byInternalCustomer: boolean,\r\n byCustomer: boolean,\r\n correspondenceType?: CorrespondenceType\r\n}\r\n\r\nexport interface SearchInfo { }\r\n\r\nexport interface SearchData {\r\n caseStatuses?: Status[];\r\n feedbackStatuses?: FeedbackStatus[];\r\n createdOnOrAfter?: ISODateString;\r\n createdBefore?: ISODateString;\r\n modifiedOnOrAfter?: ISODateString;\r\n modifiedBefore?: ISODateString;\r\n deadlineOnOrAfter?: ISODateString;\r\n deadlineBefore?: ISODateString;\r\n rememberOnOrAfter?: ISODateString;\r\n rememberBefore?: ISODateString;\r\n caseTypes?: CaseType[];\r\n correspondenceContent?: string;\r\n severities?: Severity[];\r\n priorities?: Priority[];\r\n environments?: Environment[];\r\n createdBy?: string;\r\n createdById?: WebLink;\r\n watchedById?: WebLink;\r\n contactPersonId?: WebLink;\r\n contactPerson?: string;\r\n caseNumber?: string;\r\n description?: string;\r\n title?: string;\r\n customerRef?: string;\r\n openCasesOnly?: boolean;\r\n projectTreeOfNumber?: string;\r\n includeNeighbour?: boolean;\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { LiteEvent } from \"../interfaces/iLiteEvent\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: IsProcessingService.selector\r\n})\r\n/**\r\n * Session class, stores values as JSON in local browser storage.\r\n */\r\nexport class IsProcessingService {\r\n public static selector = \"IsProcessingService\";\r\n\r\n public IsProcessing: boolean = false;\r\n private busyCount: number = 0;\r\n private publisher: LiteEvent;\r\n constructor() {\r\n this.publisher = new LiteEvent();\r\n }\r\n\r\n public StartProcessing() {\r\n this.busyCount++;\r\n\r\n if (!this.IsProcessing) {\r\n this.IsProcessing = true;\r\n this.publisher.trigger(this.IsProcessing);\r\n }\r\n }\r\n public StopProcessing() {\r\n if (this.busyCount > 0)\r\n this.busyCount--;\r\n\r\n if (this.busyCount == 0) {\r\n this.IsProcessing = false;\r\n this.publisher.trigger(this.IsProcessing);\r\n }\r\n }\r\n\r\n public addListener(listener: (boolean) => void): () => void {\r\n this.publisher.on(listener);\r\n return () => { this.publisher.off(listener); };\r\n }\r\n\r\n public reset() {\r\n this.IsProcessing = false;\r\n this.busyCount = 0;\r\n this.publisher.trigger(this.IsProcessing);\r\n }\r\n}","import { FIQAssist } from \"../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { Memoize, LocalStorage } from \"@fiqas/utils\";\r\nimport { LocalizationData } from \"../models/localization\";\r\nimport * as Rx from \"rxjs\"\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: TranslationService.selector\r\n})\r\nexport class TranslationService {\r\n public static selector = \"TranslationService\"\r\n private loaded;\r\n private _translationTable: { [key: string]: LocalizationData };\r\n\r\n constructor(\r\n @Inject('$http') private $http: ng.IHttpService,\r\n @Inject('$timeout') private $timeout: ng.ITimeoutService,\r\n @Inject('$q') private $q: ng.IQService\r\n ) {\r\n $timeout().then(() => { var _ = this.translationData; })\r\n this.onLoaded = $q(resolver => this._onLoaded = resolver);\r\n this.onLoadedLocal = $q(resolver => this._onLoadedLocal = resolver);\r\n }\r\n\r\n private _onLoadedLocal: ng.IQResolveReject;\r\n private _onLoaded: ng.IQResolveReject;\r\n public onLoadedLocal: angular.IPromise;\r\n public onLoaded: angular.IPromise;\r\n\r\n private get translationTable(): { [key: string]: LocalizationData } {\r\n if (!this._translationTable) {\r\n var cached = localStorage.getItem('_translationData');\r\n this._translationTable = cached ? JSON.parse(cached) : {};\r\n this.local.then(data => {\r\n this._local = (data.length == 2) ? `${data}-${data.toUpperCase()}` : data;\r\n this._onLoadedLocal();\r\n });\r\n this.translationData.then(data => {\r\n for (let d of data)\r\n this._translationTable[d.name] = d;\r\n localStorage['_translationData'] = JSON.stringify(this._translationTable);\r\n this.loaded = true;\r\n this._onLoaded();\r\n });\r\n }\r\n return this._translationTable;\r\n }\r\n\r\n @Memoize()\r\n private get translationData() {\r\n var p = this.getAllTranslations(\"Global\");\r\n p.catch(() => this.translationData = null);\r\n return p;\r\n }\r\n private set translationData(_) { }\r\n\r\n private async getAllTranslations(filename: string) {\r\n var url = `api/translation/${filename}`;\r\n var response = await this.$http.get(url);\r\n return response.data;\r\n }\r\n\r\n private _local: string;\r\n @Memoize()\r\n private get local() {\r\n var local = this.getLocalName();\r\n local.catch(() => this._local = 'nl-NL')\r\n return local;\r\n }\r\n private set local(_local) { }\r\n private async getLocalName() {\r\n var url = `api/translation/local`;\r\n var response = await this.$http.get(url);\r\n return response.data;\r\n }\r\n public getLocal() {\r\n (async () => (await this.onLoadedLocal))();\r\n return this._local;\r\n }\r\n\r\n public TranslateObservable(key: string) {\r\n var subject = new Rx.Subject();\r\n this.$timeout().then(() => {\r\n if (!this.loaded)\r\n subject.next(\"loading...\");\r\n this.translationData.then(_ => {\r\n subject.next(this.Translate(key));\r\n subject.complete();\r\n })\r\n });\r\n return subject.asObservable();\r\n }\r\n\r\n public async TranslateAsync(key: string, returnundefined: boolean = false) {\r\n var _ = await this.translationData;\r\n var item = this.translationTable[key.toUpperCase()];\r\n return item ? item.value : (returnundefined) ? undefined : key;\r\n }\r\n\r\n public async FormatAsync(key: string, args: string[], returnundefined: boolean = false) {\r\n var _ = await this.translationData;\r\n var item = this.translationTable[key.toUpperCase()];\r\n return item ? item.value.replace(/{(\\d+)}/g, function (match, number) {\r\n return typeof args[number] != 'undefined' ? args[number] : match;\r\n }) : (returnundefined) ? undefined : key;\r\n }\r\n\r\n public Translate(key: string, returnundefined: boolean = false): string {\r\n if (key) {\r\n var t = this.translationTable[key.toUpperCase()];\r\n return t ? t.value : !this.loaded ? 'loading...' : (returnundefined) ? undefined : key;\r\n }\r\n return key;\r\n }\r\n\r\n public Format(key: string, args: string[], returnundefined: boolean = false) {\r\n if (key) {\r\n var t = this.translationTable[key.toUpperCase()];\r\n return t ? t.value.replace(/{(\\d+)}/g, function (match, number) {\r\n return typeof args[number] != 'undefined' ? args[number] : match;\r\n }) : !this.loaded ? 'loading...' : (returnundefined) ? undefined : key;\r\n }\r\n return key;\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { AuthenticationApiURL } from \"../constants\"\r\nimport { Utils } from \"@fiqas/utils\"\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: AuthenticationApiService.selector\r\n})\r\nexport class AuthenticationApiService {\r\n public static selector = \"AuthenticationApiService\"\r\n constructor(\r\n @Inject('$http') private $http: angular.IHttpService,\r\n @Inject('AuthenticationApiURL') private AuthenticationApiURL: AuthenticationApiURL\r\n ) {\r\n\r\n }\r\n\r\n public Authenticate({username, password}: { username: string, password: string }): ng.IHttpPromise {\r\n var request: AccessTokenRequest = {\r\n grant_type: \"password\",\r\n client_id: \"Fiqassist.api\",\r\n username: username,\r\n password: password\r\n };\r\n return this.requestToken(request);\r\n }\r\n\r\n public SynchronousRefreshToken(token: string): AccessTokenResponse {\r\n var request: AccessTokenRequest = {\r\n grant_type: \"refresh_token\",\r\n client_id: \"Fiqassist.api\",\r\n refresh_token: token\r\n };\r\n return this.requestSynchronousOperation(`token`, request);\r\n }\r\n\r\n public RefreshToken(token: string): ng.IHttpPromise {\r\n var request: AccessTokenRequest = {\r\n grant_type: \"refresh_token\",\r\n client_id: \"Fiqassist.api\",\r\n refresh_token: token\r\n };\r\n return this.requestToken(request);\r\n }\r\n\r\n private requestToken(request: AccessTokenRequest): ng.IHttpPromise {\r\n return this.requestOperation(`token`, request);\r\n }\r\n\r\n public changePassword(userName: string, oldPassword: string, newPassword: string, culture: string): ng.IHttpPromise {\r\n var request = {\r\n userName: userName,\r\n oldPassword: oldPassword,\r\n newPassword: newPassword,\r\n culture: culture\r\n };\r\n return this.requestOperation('password/change', request);\r\n }\r\n\r\n public changePasswordWithToken(userName: string, password: string, resetToken: string, culture: string): ng.IHttpPromise {\r\n var request = {\r\n userName: userName,\r\n password: password,\r\n resetToken: resetToken,\r\n culture: culture\r\n };\r\n return this.requestOperation('password/changewithtoken', request);\r\n }\r\n\r\n public resetPassword(email: string, resetLink: string, culture: string): ng.IHttpPromise {\r\n var request = {\r\n email: email,\r\n resetLink: resetLink,\r\n culture: culture\r\n };\r\n return this.requestOperation('password/reset', request);\r\n }\r\n\r\n private requestOperation(operation: string, data: D): ng.IHttpPromise {\r\n var config: ng.IRequestConfig = {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\r\n url: `${this.AuthenticationApiURL}/${operation}`,\r\n data: Utils.TransformJsonToFormData(data as any)\r\n };\r\n return this.$http(config);\r\n }\r\n\r\n private requestSynchronousOperation(operation: string, data: D): any {\r\n var request = new XMLHttpRequest();\r\n request.open('POST', `${this.AuthenticationApiURL}/${operation}`, false); // `false` makes the request synchronous\r\n request.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n request.send(Utils.TransformJsonToFormData(data as any));\r\n if (request.status === 200) {\r\n return JSON.parse(request.responseText);\r\n }\r\n return null;\r\n }\r\n\r\n}\r\ndeclare interface AccessTokenRequest {\r\n grant_type: string;\r\n client_id: string;\r\n\r\n scope?: string;\r\n code?: string;\r\n redirect_uri?: string;\r\n username?: string;\r\n password?: string;\r\n refresh_token?: string;\r\n}\r\n\r\nexport interface AccessTokenResponse {\r\n access_token: string;\r\n token_type: string;\r\n expires_in: number;\r\n refresh_token: string;\r\n}\r\n","import { SessionService } from \"./session\";\r\nimport { FIQAssist } from \"../app\";\r\nimport { Utils, DateTime } from \"@fiqas/utils\";\r\nimport { Injectable, Inject } from \"@fiqas/angular-utils\";\r\nimport { AuthenticationApiService, AccessTokenResponse } from \"./authenticationApiService\";\r\nimport { IsProcessingService } from \"./isProcessingService\";\r\nimport { FiqassistRole } from \"../models/user\";\r\n\r\nconst CREDENTIALSKEY = \"credentials\";\r\nconst TOKENUSER = \"tokenUser\";\r\nconst TOKENKEY = \"token\";\r\nconst TOKENEXPIRE = \"tokenExpire\";\r\nconst REFRESHKEY = \"refresh\";\r\nconst REFRESH_MARGIN = 300000; //ms;\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: AuthenticationService.selector\r\n})\r\nexport class AuthenticationService {\r\n public static selector = \"AuthenticationService\"\r\n\r\n constructor(\r\n @Inject('$q') private $q: angular.IQService,\r\n @Inject() private api: AuthenticationApiService,\r\n @Inject() private session: SessionService,\r\n @Inject('$timeout') private $timeout: angular.ITimeoutService\r\n ) {\r\n }\r\n public async authenticate(credentials: { username: string, password: string }, persistent: boolean) {\r\n try {\r\n var response = await this.api.Authenticate(credentials);\r\n this.handleTokenResponse(credentials.username, response.data, persistent);\r\n this.onLogin(credentials.username);\r\n } catch (reason) {\r\n this.session.clear(CREDENTIALSKEY);\r\n this.session.clear(TOKENUSER);\r\n this.session.clear(TOKENKEY);\r\n this.session.clear(TOKENEXPIRE);\r\n this.session.clear(REFRESHKEY);\r\n throw reason;\r\n }\r\n }\r\n\r\n private logoutHandlers: ((sender: AuthenticationService) => boolean | void)[] = [];\r\n\r\n public addLogoutHandler(handler: (sender: AuthenticationService) => boolean | void) {\r\n if (!this.logoutHandlers.some(h => h === handler))\r\n this.logoutHandlers.push(handler);\r\n }\r\n\r\n public removeLogoutHandler(handler: (sender: AuthenticationService) => boolean | void) {\r\n this.logoutHandlers = this.logoutHandlers.filter(h => h !== handler);\r\n }\r\n\r\n private onLogout() {\r\n var handled = false;\r\n for (var handler of this.logoutHandlers)\r\n handled = handler(this) === true || handled;\r\n return !handled;\r\n }\r\n\r\n private loginHandlers: ((sender: AuthenticationService, username: string) => boolean | void)[] = [];\r\n\r\n public addLoginHandler(handler: (sender: AuthenticationService, username: string) => boolean | void) {\r\n if (!this.loginHandlers.some(h => h === handler))\r\n this.loginHandlers.push(handler);\r\n }\r\n\r\n public removeLoginHandler(handler: (sender: AuthenticationService) => boolean | void) {\r\n this.loginHandlers = this.loginHandlers.filter(h => h !== handler);\r\n }\r\n\r\n private onLogin(username: string) {\r\n var handled = false;\r\n for (var handler of this.loginHandlers) {\r\n handled = handler(this, username) === true || handled;\r\n }\r\n return !handled;\r\n }\r\n\r\n public async logout(delayEvent: number = 0) {\r\n this.session.clear(CREDENTIALSKEY);\r\n this.session.clear(TOKENUSER);\r\n this.session.clear(TOKENKEY);\r\n this.session.clear(TOKENEXPIRE);\r\n this.session.clear(REFRESHKEY);\r\n if (delayEvent)\r\n await this.$timeout(delayEvent);\r\n this.onLogout();\r\n }\r\n\r\n public get username(): string {\r\n var c = this.credentials;\r\n return c ? c.username : \"\";\r\n }\r\n\r\n public get token(): string {\r\n var c = this.credentials;\r\n return c && c.token ? c.token.access_token : \"\";\r\n }\r\n\r\n /**\r\n * Looksup the credentials in localStorage or sessionStorage\r\n *\r\n * returns credential meta data\r\n * with refresh key\r\n * optionaly if not expired with token key\r\n *\r\n * returns undefined, when no credentials are found\r\n *\r\n * @readonly\r\n * @private\r\n * @type {Credentials}\r\n * @memberof AuthenticationService\r\n */\r\n private get credentials(): Credentials {\r\n let cred = this.session.getValue(CREDENTIALSKEY);\r\n let username = this.session.getValue(TOKENUSER);\r\n if (cred) {\r\n let expire: number = this.session.getValue(TOKENEXPIRE);\r\n if (cred.username && expire !== undefined && new Date(expire) > new Date(new Date().getTime() + REFRESH_MARGIN)) {\r\n if (username === undefined) {\r\n this.session.setValue(TOKENUSER, cred.username, false, false);\r\n cred.token.access_token = this.session.getValue(TOKENKEY);\r\n } else if (cred.username === username) {\r\n cred.token.access_token = this.session.getValue(TOKENKEY);\r\n } else {\r\n this.session.clear(TOKENKEY);\r\n this.session.clear(TOKENEXPIRE);\r\n }\r\n } else {\r\n this.session.clear(TOKENKEY);\r\n this.session.clear(TOKENUSER);\r\n this.session.clear(TOKENEXPIRE);\r\n }\r\n cred.token.refresh_token = this.session.getValue(REFRESHKEY);\r\n }\r\n return cred;\r\n }\r\n\r\n private handleTokenResponse(user: string, response: AccessTokenResponse, persistent: boolean): boolean {\r\n if (!(response && response.access_token && response.refresh_token && response.expires_in)) {\r\n this.session.clear(TOKENKEY);\r\n this.session.clear(TOKENEXPIRE);\r\n this.session.clear(REFRESHKEY);\r\n this.session.clear(CREDENTIALSKEY);\r\n return false;\r\n }\r\n var expires = new Date().getTime() + (response.expires_in * 1000);\r\n\r\n this.session.setValue(TOKENKEY, response.access_token, false, false);\r\n this.session.setValue(TOKENEXPIRE, expires, false, false);\r\n this.session.setValue(REFRESHKEY, response.refresh_token, false, true);\r\n this.session.setValue(CREDENTIALSKEY, {\r\n username: user,\r\n token: {\r\n },\r\n persistent: persistent\r\n }, false, true);\r\n return true;\r\n }\r\n\r\n private setTokenHeader(config: ng.IRequestConfig): ng.IRequestConfig {\r\n var tokendata = this.credentials != null ? this.credentials.token : null;\r\n if (!!tokendata && !!tokendata.access_token) {\r\n config.headers[\"Authorization\"] = `Bearer ${tokendata.access_token}`;\r\n }\r\n return config;\r\n }\r\n\r\n // check credentials lifetime before api calls\r\n public AuthenticationSetter(config: ng.IRequestConfig): ng.IPromise {\r\n this.isAlive();\r\n return this.$q(resolver => resolver(this.setTokenHeader(config)));\r\n }\r\n\r\n // check credentials lifetime (before angular component activation, $canActivate)\r\n public isAlive() {\r\n var tokendata = this.credentials != null ? this.credentials.token : null;\r\n if (tokendata == null || tokendata.refresh_token == null) {\r\n return false;\r\n } else if (tokendata.access_token) {\r\n return true;\r\n } else {\r\n var response = this.api.SynchronousRefreshToken(tokendata.refresh_token);\r\n return this.handleTokenResponse(this.username, response, this.credentials.persistent);\r\n }\r\n }\r\n\r\n public changePassword(userName: string, oldPassword: string, newPassword: string, culture: string): ng.IPromise {\r\n return this.api.changePassword(userName, oldPassword, newPassword, culture);\r\n }\r\n\r\n public changePasswordWithResetToken(userName: string, password: string, resetToken: string, culture: string): ng.IPromise {\r\n return this.api.changePasswordWithToken(userName, password, resetToken, culture);\r\n }\r\n\r\n public resetPassword(emailAddress: string, resetLink: string, culture: string): ng.IPromise {\r\n return this.api.resetPassword(emailAddress, resetLink, culture);\r\n }\r\n\r\n public static AuthenticationCheck = function AuthenticationCheck(AuthenticationService: AuthenticationService, $rootRouter: angular.Router, $location: angular.ILocationService, IsProcessingService: IsProcessingService) {\r\n var isAlive = AuthenticationService.isAlive();\r\n if (!isAlive) {\r\n var current = $location.url();\r\n if (current.indexOf(\"/newpassword\") >= 0\r\n || current.indexOf(\"/forgotpassword\") >= 0\r\n || current.indexOf(\"/login\") >= 0)\r\n return;\r\n\r\n var target: any[] = ['Login'];\r\n if (current.indexOf(\"/login\") == -1 && current.length > 1)\r\n target = target.concat({ source: encodeURIComponent($location.url()) })\r\n\r\n var instuction = $rootRouter.generate(target);\r\n IsProcessingService.reset();\r\n $rootRouter.navigateByInstruction(instuction);\r\n }\r\n return isAlive;\r\n }\r\n}\r\nAuthenticationService.AuthenticationCheck.$inject = ['AuthenticationService', '$rootRouter', '$location', 'IsProcessingService']\r\n\r\n\r\ndeclare interface Credentials {\r\n username: string;\r\n token: {\r\n access_token?: string;\r\n refresh_token?: string;\r\n },\r\n persistent: boolean\r\n}\r\n","import { SessionService } from \"./session\";\r\nimport { FIQAssist } from \"../app\";\r\nimport { Utils, DateTime } from \"@fiqas/utils\";\r\nimport { Injectable, Inject } from \"@fiqas/angular-utils\";\r\nimport { AuthenticationApiService, AccessTokenResponse } from \"./authenticationApiService\";\r\nimport { IsProcessingService } from \"./isProcessingService\";\r\nimport { FiqassistRole, User } from \"../models/user\";\r\nimport { AuthenticationService } from \"./authenticationService\";\r\nimport { StartResult } from \"../models/home\";\r\nimport { FqsService } from \"./fqsService\";\r\nimport { FiqassistApiURL } from \"../constants\";\r\nimport { ParsedResult } from \"../models/base\";\r\nimport * as Rx from \"rxjs/Rx\";\r\nimport { Observable } from \"rxjs/Observable\";\r\nimport { Subscription } from \"rxjs/Subscription\";\r\nimport { SaveDialog } from \"../components/general/savedialog\";\r\n\r\nconst ROLEKEY: string = \"AuthorizationCurrentRoleKey\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: AuthorizationService.selector\r\n})\r\nexport class AuthorizationService extends FqsService {\r\n public static selector = \"AuthorizationService\"\r\n private roleChangedSubject: Rx.Subject<{ newRole: FiqassistRole, oldRole: FiqassistRole }>;\r\n\r\n constructor(\r\n @Inject() private saveDialog: SaveDialog,\r\n @Inject('$q') $q: angular.IQService,\r\n @Inject('$http') $http: angular.IHttpService,\r\n @Inject() private authenticationService: AuthenticationService,\r\n @Inject() private session: SessionService,\r\n @Inject('FiqassistApiURL') private FiqassistApiURL: FiqassistApiURL,\r\n ) {\r\n super($q, $http);\r\n this.doSetBearer(c => this.authenticationService.AuthenticationSetter(c))\r\n this.authenticationService.addLoginHandler((sender, username: string) => this.init(username));\r\n this.authenticationService.addLogoutHandler(() => {;\r\n this._lowrole = null;\r\n this.session.clear(ROLEKEY);\r\n this._highrole = null;\r\n this._roles = null;\r\n });\r\n this.roleChangedSubject = new Rx.Subject<{ newRole: FiqassistRole, oldRole: FiqassistRole }>();\r\n this.init(this.authenticationService.username);\r\n }\r\n public get loaded(): boolean {\r\n return this.currentRole != undefined && this.roles != undefined;\r\n }\r\n private initializing = false;\r\n private _onLoaded: ng.IQResolveReject;\r\n public roleLoaded: angular.IPromise;\r\n private init(username: string) {\r\n if (this.loaded) {\r\n this._onLoaded();\r\n }\r\n if (this.initializing || this.loaded) {\r\n return;\r\n }\r\n this.roleLoaded = this.$q(resolver => this._onLoaded = resolver);\r\n this.initializing = true;\r\n if (username) {\r\n this.start(username).then(\r\n (user) => {\r\n let roles = user.authorizedFiqassistRoles;\r\n if (roles) {\r\n this._roles = roles;\r\n if (this._roles) {\r\n this._lowrole = roles[0];\r\n this._highrole = roles[roles.length - 1];\r\n\r\n if (this.currentRole == null || roles.indexOf(this.currentRole) == -1) {\r\n this.session.setValue(ROLEKEY, roles.filter(role => role.toUpperCase() === user.fiqassistRole.toUpperCase())[0], false, false);\r\n this.roleChangedSubject.next({ newRole: this.currentRole, oldRole: undefined });\r\n }\r\n } else {\r\n this._lowrole = null;\r\n this.session.clear(ROLEKEY);\r\n this._highrole = null;\r\n }\r\n } else {\r\n this._lowrole = null;\r\n this.session.clear(ROLEKEY);\r\n this._highrole = null;\r\n this._roles = null;\r\n }\r\n this._onLoaded();\r\n this.initializing = false;\r\n },\r\n (reject) => {\r\n this._onLoaded();\r\n this.initializing = false;\r\n }\r\n );\r\n } else {\r\n this._lowrole = null;\r\n this.session.clear(ROLEKEY);\r\n this._highrole = null;\r\n this._roles = null;\r\n this.initializing = false;\r\n this._onLoaded();\r\n }\r\n }\r\n\r\n public static RoleCheck = function RoleCheck(authenticationService: AuthenticationService, $rootRouter: angular.Router, $location: angular.ILocationService, IsProcessingService: IsProcessingService, AuthorizationService: AuthorizationService) {\r\n return AuthenticationService.AuthenticationCheck(authenticationService, $rootRouter, $location, IsProcessingService);\r\n }\r\n\r\n // check credentials lifetime before api calls\r\n public RoleHeaderSetter(config: ng.IRequestConfig): ng.IPromise {\r\n return this.$q(resolver => resolver(this.setRoleHeader(config)));\r\n }\r\n\r\n private setRoleHeader(config: ng.IRequestConfig): ng.IRequestConfig {\r\n if (!!this.currentRole) {\r\n config.headers[\"Fiqassist-Role\"] = `${this.currentRole}`;\r\n }\r\n return config;\r\n }\r\n\r\n public currentRoleIn(roles: FiqassistRole[]) {\r\n return roles.some(r => r == this.currentRole);\r\n }\r\n\r\n public get currentRole(): FiqassistRole {\r\n return this.session.getValue(ROLEKEY) as FiqassistRole;\r\n }\r\n private _lowrole: FiqassistRole;\r\n public get lowRole(): FiqassistRole {\r\n return this._lowrole;\r\n }\r\n private _highrole: FiqassistRole;\r\n public get highRole(): FiqassistRole {\r\n return this._highrole;\r\n }\r\n private _roles: FiqassistRole[];\r\n public get roles(): FiqassistRole[] {\r\n return this._roles;\r\n }\r\n\r\n public dirty: boolean = false;\r\n public switchRole(role: FiqassistRole | boolean) {\r\n if (this.dirty) {\r\n try {\r\n this.saveDialog.Save().then(\r\n (response) => {\r\n if (response === SaveDialog.Discard) {\r\n this.dirty = false;\r\n this.switchRole(role);\r\n }\r\n }\r\n );\r\n } finally {\r\n this._elevated = this._highrole === this.currentRole;\r\n this.elevated = null; // trigger get binders\r\n return;\r\n }\r\n }\r\n\r\n var old = this.currentRole;\r\n if (role === false) {\r\n if (this.currentRole !== this._lowrole) {\r\n this.session.setValue(ROLEKEY, this._lowrole, false, false);\r\n this.roleChangedSubject.next({ newRole: this.currentRole, oldRole: old });\r\n }\r\n } else if (role === true) {\r\n if (this.currentRole !== this._highrole) {\r\n this.session.setValue(ROLEKEY, this._highrole, false, false);\r\n this.roleChangedSubject.next({ newRole: this.currentRole, oldRole: old });\r\n }\r\n } else if (this._roles && this._roles.length > 0 && this._roles.indexOf(role) >= 0) {\r\n if (this.currentRole !== role) {\r\n this.session.setValue(ROLEKEY, role, false, false);\r\n this.roleChangedSubject.next({ newRole: this.currentRole, oldRole: old });\r\n }\r\n } else {\r\n throw new Error(\"Role not found\");\r\n }\r\n this._elevated = this._highrole === this.currentRole;\r\n this.elevated = null; // trigger get binders\r\n }\r\n private _elevated: boolean = false;\r\n public get elevated(): boolean { return this._elevated; }\r\n public set elevated(val: boolean) { }\r\n\r\n public onRoleChanged(onNext: (next: { newRole: FiqassistRole, oldRole: FiqassistRole }) => void): Subscription {\r\n return this.roleChangedSubject.subscribe(onNext);\r\n }\r\n public start(user: string) {\r\n return this.performRequest(\"GET\", `${this.FiqassistApiURL}/user/${user}`);\r\n }\r\n\r\n public get isFiqasEmployee(): boolean {\r\n return this.currentRoleIn([\"SD\", \"FQS\"]);\r\n }\r\n}\r\nAuthorizationService.RoleCheck.$inject = ['AuthenticationService', '$rootRouter', '$location', 'IsProcessingService', 'AuthorizationService'];\r\n","import { FIQAssist } from \"../app\";\r\nimport { Injectable, Inject } from \"@fiqas/angular-utils\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: CacheService.selector\r\n})\r\n/**\r\n * Cache class, stores values as JSON in memory.\r\n */\r\nexport class CacheService {\r\n public static selector = \"Cache\" \r\n private static cacheditems: CacheItem[] = [];\r\n\r\n constructor() {\r\n }\r\n \r\n /**\r\n * Get a value by key.\r\n * @param {string} key Key of the value to get.\r\n * @returns T Item from session or null if not found.\r\n */\r\n public getValue(key: string): T {\r\n if (key) {\r\n var entry = CacheService.cacheditems.filter(x => x.key == key).shift();\r\n if (entry)\r\n return entry.value;\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Store a value in the session.\r\n * @param {string} key The key to store the value with.\r\n * @param {T} value The value to store.\r\n */\r\n public setValue(key: string, value: T) {\r\n if (key) {\r\n var entry = CacheService.cacheditems.filter(x => x.key == key).shift();\r\n if (entry) {\r\n entry.value = value;\r\n }\r\n else\r\n CacheService.cacheditems.push({ key: key, value: value });\r\n }\r\n }\r\n\r\n /**\r\n * Clear a value by key, or all values if key is omitted.\r\n * @param {string} key Optional key of value to remove.\r\n */\r\n public clear(key?: string) {\r\n if (key) {\r\n var entry = CacheService.cacheditems.filter(x => x.key == key).shift();\r\n if (entry) {\r\n entry.value = undefined;\r\n }\r\n } else {\r\n CacheService.cacheditems = [];\r\n }\r\n }\r\n}\r\n\r\ninterface CacheItem {\r\n key: string;\r\n value: any;\r\n}","import { Injectable, Inject } from \"@fiqas/angular-utils\";\r\nimport { FIQAssist } from \"../app\";\r\nimport { LogService } from \"./logService\";\r\nimport { TranslationService } from \"./TranslationService\";\r\nimport { CSharpException, ParsedResult, ValidationResult } from \"../models/base\";\r\nimport { Application } from \"../components/application\";\r\nimport { StartVersion } from \"../models/version\";\r\n\r\nexport type dialogType = 'info' | 'warning' | 'error';\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: DialogService.selector\r\n})\r\nexport class DialogService {\r\n public static selector: string = 'dialogManager';\r\n\r\n constructor(\r\n @Inject('$uibModal') private $modal: angular.ui.bootstrap.IModalService,\r\n @Inject() private logService: LogService,\r\n @Inject() private translationService: TranslationService\r\n ) {\r\n }\r\n\r\n public async showMessageDialog(type: dialogType, title: string, message: string\r\n , { titleArgs, messageArgs, translate, onclose }\r\n : { titleArgs?: string[], messageArgs?: string[], translate?: boolean, errorResult?: ParsedResult, onclose?: () => void }\r\n = { translate: true }) {\r\n if (translate) {\r\n title = titleArgs ? this.translationService.Format(title, titleArgs) : this.translationService.Translate(title);\r\n message = messageArgs ? this.translationService.Format(message, messageArgs) : this.translationService.Translate(message);\r\n }\r\n return this.$modal.open({\r\n templateUrl: 'messageDialog.html',\r\n controllerAs: \"$messageModal\",\r\n controller: MessageBox,\r\n backdrop: 'static',\r\n resolve: {\r\n data: () => {\r\n return {\r\n type: type,\r\n title: title,\r\n message: message,\r\n onclose: (onclose) ? onclose : () => {}\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public async showConfirmationDialog(type: dialogType, title: string, message: string, buttonOk?: string, buttonCancel?: string\r\n , { titleArgs, messageArgs, translate, onclose, ondismiss }\r\n : { titleArgs?: string[], messageArgs?: string[], translate?: boolean, errorResult?: ParsedResult, onclose?: () => void, ondismiss?: () => void }\r\n = { translate: true }) {\r\n if (translate) {\r\n title = titleArgs ? this.translationService.Format(title, titleArgs) : this.translationService.Translate(title);\r\n message = messageArgs ? this.translationService.Format(message, messageArgs) : this.translationService.Translate(message);\r\n buttonOk = buttonOk ? this.translationService.Translate(buttonOk): this.translationService.Translate('DIALOG_CONFIRM_OK');\r\n buttonCancel = buttonCancel ? this.translationService.Translate(buttonCancel): this.translationService.Translate('DIALOG_CONFIRM_CANCEL');\r\n }\r\n\r\n return this.$modal.open({\r\n templateUrl: 'confirmationDialog.html',\r\n controllerAs: \"$confirmationModal\",\r\n controller: ConfirmationBox,\r\n backdrop: 'static',\r\n resolve: {\r\n data: () => {\r\n return {\r\n type: type,\r\n title: title,\r\n message: message,\r\n buttonOk: buttonOk,\r\n buttonCancel: buttonCancel,\r\n onclose: (onclose) ? onclose : () => {},\r\n ondismiss: (ondismiss) ? ondismiss : () => {}\r\n }\r\n }\r\n }\r\n }).result;\r\n }\r\n\r\n public async showErrorDialog(type: dialogType, title: string, message: string\r\n , { information, titleArgs, messageArgs, informationArgs, translate, errorResult }\r\n : { information?: string, titleArgs?: string[], messageArgs?: string[], informationArgs?: string[], translate?: boolean, errorResult?: ParsedResult }\r\n = { translate: true }) {\r\n\r\n if (translate) {\r\n title = titleArgs ? this.translationService.Format(title, titleArgs) : this.translationService.Translate(title);\r\n message = messageArgs ? this.translationService.Format(message, messageArgs) : this.translationService.Translate(message);\r\n information = informationArgs ? this.translationService.Format(information, informationArgs) : this.translationService.Translate(information);\r\n }\r\n return this.$modal.open({\r\n templateUrl: 'errorDialog.html',\r\n controllerAs: \"$errorModal\",\r\n controller: ErrorBox,\r\n backdrop: 'static',\r\n resolve: {\r\n data: () => {\r\n return {\r\n type: type,\r\n title: title,\r\n message: message,\r\n exception: (errorResult && errorResult.exception) ? errorResult.exception : null,\r\n validation: (errorResult && errorResult.validation) ? errorResult.validation : null,\r\n seqrequestid: (errorResult && errorResult.seqrequestid) ? errorResult.seqrequestid : null,\r\n sequrl: (errorResult && errorResult.sequrl) ? errorResult.sequrl : null\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n public async showAbout(application: Application) {\r\n return this.$modal.open({\r\n animation: false,\r\n templateUrl: 'aboutDialog.html',\r\n controller: AboutComponent,\r\n controllerAs: '$modal',\r\n resolve: {\r\n page: () => application\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport class MessageBox {\r\n constructor(\r\n @Inject('$uibModalInstance') private $modalInstance: angular.ui.bootstrap.IModalServiceInstance,\r\n @Inject('data') public data: { type: string, title: string, message: string, onclose: () => void }\r\n ) {\r\n }\r\n\r\n public Ok() {\r\n this.$modalInstance.close();\r\n this.data.onclose();\r\n }\r\n}\r\n\r\nexport class ConfirmationBox {\r\n constructor(\r\n @Inject('$uibModalInstance') private $modalInstance: angular.ui.bootstrap.IModalServiceInstance,\r\n @Inject('data') public data: { type: string, title: string, message: string, buttonOk: string, buttonCancel: string, onclose: () => void },\r\n @Inject('$window') private $window: ng.IWindowService\r\n ) {\r\n // manually remove the 'modal-open' class, as the $uibModal does not do this correctly when the the big editorscreen is open too.\r\n this.$modalInstance.closed.then(() => {\r\n if (this.$window.document.body) {\r\n this.$window.document.body.classList.remove('modal-open');\r\n }\r\n });\r\n }\r\n\r\n public Ok() {\r\n this.$modalInstance.close();\r\n this.data.onclose();\r\n }\r\n public Cancel() {\r\n this.$modalInstance.dismiss();\r\n }\r\n}\r\n\r\nexport class ErrorBox {\r\n constructor(\r\n @Inject('$uibModalInstance') private $modalInstance: angular.ui.bootstrap.IModalServiceInstance,\r\n @Inject('data') public data: { error: Error, validation: ValidationResult, exception: CSharpException, seqrequestid: string, sequrl: string },\r\n ) {\r\n }\r\n\r\n public showInformation: boolean;\r\n\r\n public Ok() {\r\n this.$modalInstance.close();\r\n }\r\n}\r\n\r\nexport class AboutComponent {\r\n static controllerId = 'AboutComponent';\r\n public apiVersion: StartVersion;\r\n\r\n constructor(\r\n @Inject('$uibModalInstance') private $modalInstance: angular.ui.bootstrap.IModalServiceInstance,\r\n @Inject('page') public page: Application\r\n ) {\r\n this.apiVersion = page.apiVersion\r\n if (!this.apiVersion) {\r\n page.recieveApiVersion((value: StartVersion) => this.apiVersion = value);\r\n }\r\n }\r\n\r\n public Close() {\r\n this.$modalInstance.close();\r\n }\r\n}\r\n","import * as XLSX from 'xlsx';\r\nimport { Injectable, Inject } from \"@fiqas/angular-utils\";\r\nimport { FIQAssist } from \"../app\";\r\nimport { saveAs } from 'file-saver'\r\nimport { CompactServiceCase } from \"../models/serviceCase\";\r\nimport { TranslationService } from \"./TranslationService\";\r\nimport { AuthorizationService } from './authorizationService';\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: ExportService.selector\r\n})\r\nexport class ExportService {\r\n public static selector = \"ExportService\"\r\n\r\n constructor(\r\n @Inject() private translationService: TranslationService,\r\n @Inject() private authorizationService: AuthorizationService\r\n ) {\r\n }\r\n\r\n saveExcelFromJson(content: CompactServiceCase[], params: any) {\r\n let fileNamePresent = params && params.fileName && params.fileName.length !== 0;\r\n let date = new Date();\r\n let formattedDate = [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()].join('');\r\n let fileName = fileNamePresent ? params.fileName : `FIQAssistResultsExport${formattedDate}`;\r\n\r\n let workbooksheet = this.cases_to_sheet(content);\r\n var workbook: XLSX.WorkBook = { SheetNames: [\"SheetJS\"], Sheets: { SheetJS: workbooksheet } };\r\n let wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary', cellDates: true });\r\n saveAs(new Blob([this.s2ab(wbout)], { type: \"application/octet-stream\" }), fileName + \".xlsx\");\r\n }\r\n\r\n s2ab(s) {\r\n let buf = new ArrayBuffer(s.length);\r\n let view = new Uint8Array(buf);\r\n for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n return buf;\r\n }\r\n\r\n public cases_to_sheet(cases: CompactServiceCase[], opts?): XLSX.Sheet {\r\n var options = opts || {};\r\n var worksheet = ({});\r\n let cell = {};\r\n var range: XLSX.Range = ({ s: { c: 0, r: 0 }, e: { c: 0, r: cases.length } });\r\n var headers = this.authorizationService.currentRoleIn([\"FQS\", \"SD\"]) ? [\r\n \"caseNumber\",\r\n \"parentCaseNumber\",\r\n \"fiqasOwnershipDesc\", // [\"FQS\", \"SD\"]\r\n \"caseOwnership\", // [\"FQS\", \"SD\"]\r\n \"start\",\r\n \"modifiedOn\", // [\"FQS\", \"SD\"]\r\n \"title\",\r\n \"caseCause\", // [\"FQS\", \"SD\"]\r\n \"spTsTask\", // [\"FQS\", \"SD\"]\r\n \"customerDesc\",\r\n \"customerReference\",\r\n \"contactPersonDesc\",\r\n \"createdBy\",\r\n \"status\",\r\n \"type\",\r\n \"severity\",\r\n \"priority\",\r\n \"budgetIndication\", // [\"FQS\", \"SD\"]\r\n \"approvedHoursMin\", // [\"FQS\", \"SD\"]\r\n \"approvedHoursMax\", // [\"FQS\", \"SD\"]\r\n \"actualHoursSpent\", // [\"FQS\", \"SD\"]\r\n \"approvedHoursCommentBySD\", // [\"FQS\", \"SD\"]\r\n \"feedbackStatus\",\r\n \"actionRequired\",\r\n \"requestedDeadline\",\r\n \"rememberMeDate\", // [\"FQS\", \"SD\"]\r\n \"rememberMeReason\" // [\"FQS\", \"SD\"]\r\n ] : [\r\n \"caseNumber\",\r\n \"parentCaseNumber\",\r\n \"start\",\r\n \"title\",\r\n \"customerDesc\",\r\n \"customerReference\",\r\n \"contactPersonDesc\",\r\n \"createdBy\",\r\n \"status\",\r\n \"type\",\r\n \"severity\",\r\n \"priority\",\r\n \"feedbackStatus\",\r\n \"actionRequired\",\r\n \"requestedDeadline\"\r\n ];\r\n cases.forEach((value: CompactServiceCase, caseIndex) => {\r\n Object.keys(value).forEach((columnName) => {\r\n if (headers.indexOf(columnName) == -1)\r\n return;\r\n var v = value[columnName];\r\n var t = 'z'; // emtpy cell\r\n var z;\r\n switch (columnName) {\r\n case \"start\":\r\n case \"modifiedOn\":\r\n t = 'd';\r\n z = 'dd/mm/yyyy hh:MM';\r\n break;\r\n case \"requestedDeadline\":\r\n case \"rememberMeDate\":\r\n t = 'd';\r\n z = 'dd/mm/yyyy';\r\n break;\r\n case \"caseNumber\":\r\n t = 'n';\r\n // case has no parentCaseNumber but has child relate cases output it own id for easy project sorting/grouping in excel.\r\n if (value['parentCaseNumber'] == undefined && value['childCaseNumbers'] != null && value['childCaseNumbers'].length > 0) {\r\n worksheet[XLSX.utils.encode_cell({ c: headers.indexOf('parentCaseNumber'), r: caseIndex + 1 })] = cell = ((z) ? { t: t, v: v, z: z } : { t: t, v: v });\r\n }\r\n break;\r\n case \"parentCaseNumber\":\r\n case \"approvedHoursMin\":\r\n case \"approvedHoursMax\":\r\n case \"actualHoursSpent\":\r\n t = 'n';\r\n break;\r\n case \"caseOwnership\":\r\n case \"actionRequired\":\r\n case \"feedbackStatus\":\r\n case \"severity\":\r\n case \"priority\":\r\n case \"caseCause\":\r\n case \"type\":\r\n t = 's';\r\n v = this.translationService.Translate(`XLS_${columnName}_${v}`);\r\n break;\r\n case \"status\":\r\n t = 's';\r\n v = this.translationService.Translate(v);\r\n break;\r\n default:\r\n t = 's';\r\n break;\r\n }\r\n worksheet[XLSX.utils.encode_cell({ c: headers.indexOf(columnName), r: caseIndex + 1 })] = cell = ((z) ? { t: t, v: v, z: z } : { t: t, v: v });\r\n })\r\n });\r\n range.e.c = headers.length;\r\n headers.map((value, index) => worksheet[XLSX.utils.encode_col(index) + \"1\"] = { t: 's', v: this.translationService.Translate(`XLS_${value}`), bold: true });\r\n worksheet['!ref'] = XLSX.utils.encode_range(range);\r\n worksheet['!cols'] = this.authorizationService.currentRoleIn([\"FQS\", \"SD\"]) ? [\r\n { wch: 8 }, // \"caseNumber\",\r\n { wch: 8 }, // \"parentCaseNumber\",\r\n { wch: 20 }, // \"fiqasOwnershipDesc\", // [\"FQS\", \"SD\"]\r\n { wch: 20 }, // \"caseOwnership\", // [\"FQS\", \"SD\"]\r\n { wch: 16 }, // \"start\",\r\n { wch: 16 }, // \"modifiedOn\", // [\"FQS\", \"SD\"]\r\n { wch: 32 }, // \"title\",\r\n { wch: 8 }, // \"caseCause\", // [\"FQS\", \"SD\"]\r\n { wch: 8 }, // \"spTsTask\", // [\"FQS\", \"SD\"]\r\n { wch: 20 }, // \"customerDesc\",\r\n { wch: 20 }, // \"customerReference\",\r\n { wch: 20 }, // \"contactPersonDesc\",\r\n { wch: 20 }, // \"createdBy\",\r\n { wch: 16 }, // \"status\",\r\n { wch: 8 }, // \"type\",\r\n { wch: 8 }, // \"severity\",\r\n { wch: 8 }, // \"priority\",\r\n { wch: 8 }, // \"budgetIndication\", // [\"FQS\", \"SD\"]\r\n { wch: 8 }, // \"approvedHoursMin\", // [\"FQS\", \"SD\"]\r\n { wch: 8 }, // \"approvedHoursMax\", // [\"FQS\", \"SD\"]\r\n { wch: 8 }, // \"actualHoursSpent\", // [\"FQS\", \"SD\"]\r\n { wch: 32 }, // \"approvedHoursCommentBySD\", // [\"FQS\", \"SD\"]\r\n { wch: 16 }, // \"feedbackStatus\",\r\n { wch: 8 }, // \"actionRequired\",\r\n { wch: 9 }, // \"requestedDeadline\",\r\n { wch: 9 }, // \"rememberMeDate\", // [\"FQS\", \"SD\"]\r\n { wch: 20 }, // \"rememberMeReason\" // [\"FQS\", \"SD\"]\r\n ] : [\r\n { wch: 8 }, // \"caseNumber\",\r\n { wch: 8 }, // \"parentCaseNumber\",\r\n { wch: 16 }, // \"start\",\r\n { wch: 32 }, // \"title\",\r\n { wch: 20 }, // \"customerDesc\",\r\n { wch: 20 }, // \"customerReference\",\r\n { wch: 20 }, // \"contactPersonDesc\",\r\n { wch: 20 }, // \"createdBy\",\r\n { wch: 16 }, // \"status\",\r\n { wch: 8 }, // \"type\",\r\n { wch: 8 }, // \"severity\",\r\n { wch: 8 }, // \"priority\",\r\n { wch: 16 }, // \"feedbackStatus\",\r\n { wch: 8 }, // \"actionRequired\",\r\n { wch: 9 } // \"requestedDeadline\",\r\n ];\r\n return worksheet;\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: FileReaderService.selector\r\n})\r\n/**\r\n * Session class, stores values as JSON in local browser storage.\r\n */\r\nexport class FileReaderService {\r\n public static selector = \"fileReaderService\";\r\n\r\n constructor(\r\n @Inject('$q') private $q: ng.IQService) {\r\n }\r\n\r\n private getReader(deferred): FileReader {\r\n var reader = new FileReader();\r\n\r\n reader.onload = function () {\r\n deferred.resolve(reader.result);\r\n };\r\n\r\n reader.onerror = function () {\r\n deferred.reject(reader.error);\r\n };\r\n\r\n return reader;\r\n }\r\n\r\n public ReadAsDataUrl(file: File) {\r\n var deferred = this.$q.defer(),\r\n reader = this.getReader(deferred);\r\n reader.readAsDataURL(file);\r\n return deferred.promise;\r\n }\r\n\r\n public ReadAsText(file: File): ng.IPromise {\r\n var deferred = this.$q.defer(),\r\n reader = this.getReader(deferred);\r\n reader.readAsText(file);\r\n return deferred.promise;\r\n }\r\n\r\n public ReadAsArrayBuffer(file: File): ng.IPromise {\r\n var deferred = this.$q.defer(),\r\n reader = this.getReader(deferred);\r\n reader.readAsArrayBuffer(file);\r\n return deferred.promise;\r\n }\r\n\r\n public ReadAsBinaryString(file: File): ng.IPromise {\r\n if (FileReader.prototype.readAsBinaryString) {\r\n var deferred = this.$q.defer(),\r\n reader = this.getReader(deferred);\r\n reader.readAsBinaryString(file);\r\n return deferred.promise;\r\n }\r\n return this.ReadAsArrayBuffer(file).then(x => {\r\n var u8Array = new Uint8Array(x);\r\n var i, len = u8Array.length, b_str = \"\";\r\n for (i = 0; i < len; i++) {\r\n b_str += String.fromCharCode(u8Array[i]);\r\n }\r\n return b_str;\r\n });\r\n }\r\n}","import { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport * as base64js from 'base64-js';\r\nimport * as mime from 'mime-types';\r\nimport { saveAs } from 'file-saver';\r\nimport { FIQAssist } from \"../../app\";\r\nimport { FiqassistApiFile } from \"../../interfaces/filetype\";\r\nimport { IIdentityLink } from \"../../interfaces/iFqs\";\r\nimport { FiqassistApiServiceBase } from \"./fiqassistApiServiceBase\";\r\nimport { AuthenticationService } from \"../authenticationService\";\r\nimport { AuthorizationService } from \"../authorizationService\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: FileService.selector\r\n})\r\nexport class FileService extends FiqassistApiServiceBase {\r\n public static selector = \"FileService\"\r\n\r\n constructor(\r\n @Inject('$q') $q: angular.IQService,\r\n @Inject('$http') $http: angular.IHttpService,\r\n @Inject() authenticationService: AuthenticationService,\r\n @Inject() authorizationService: AuthorizationService,\r\n ) {\r\n super($q, $http, authenticationService, authorizationService);\r\n }\r\n\r\n public GetFile(id: IIdentityLink) {\r\n return this.GetFileFromUrl(id.fullHref);\r\n }\r\n\r\n public GetFileFromUrl(url: string) {\r\n return this.performRequest(\"GET\", url, null, null, null, true);\r\n }\r\n\r\n public GenerateImageSource(file: FiqassistApiFile) {\r\n let fileName = file.filename || file.description;\r\n return `data: ${mime.lookup(fileName)};base64,${file.content}`;\r\n }\r\n\r\n public ImageNotFoundSource() {\r\n return `data:image/png;base64,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UmVhZHlxyWU8AAADKGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1M0FBNUZFRkQ1Q0YxMUU2QURDQkM0N0NGQTQ0NjAzRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1M0FBNUZGMEQ1Q0YxMUU2QURDQkM0N0NGQTQ0NjAzRCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjUzQUE1RkVERDVDRjExRTZBRENCQzQ3Q0ZBNDQ2MDNEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjUzQUE1RkVFRDVDRjExRTZBRENCQzQ3Q0ZBNDQ2MDNEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SpksZgAAQWxJREFUeNrs3Qm8HFWdL/ATkUXAJaiIG2JABNnU4L49neAwuC/BBWee89TE3RnxvcRlRlwnGUVHXJC4zogbV3AdlyE6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`;\r\n }\r\n\r\n\r\n public FileSaveAs(file: FiqassistApiFile) {\r\n let fileName = file.filename || file.description;\r\n let fileByteArray = base64js.toByteArray(file.content);\r\n saveAs(new Blob([fileByteArray], { type: mime.lookup(fileName) || \"application/octet-stream\" }), fileName);\r\n }\r\n}\r\n","import \"../fqsService\";\r\nimport \"../authenticationService\"\r\nimport { Inject } from \"@fiqas/angular-utils\";\r\nimport { AuthenticationService } from \"../authenticationService\"\r\nimport { AuthorizationService } from \"../authorizationService\";\r\nimport { FqsService } from \"../fqsService\";\r\nimport {\r\n IIdentityLink, IIdentifiableCollectionProperty, IIdentifiableCollectionPropertyOf, IIdentifiableCollectionOf,\r\n IIdentifiablePagedCollectionPropertyOf, IIdentifiablePagedCollectionOf\r\n} from \"../../interfaces/iFqs\"\r\nimport { CSharpException, ValidationResult, ParsedResult } from \"../../models/base\";\r\n\r\nexport abstract class FiqassistApiServiceBase extends FqsService {\r\n constructor(\r\n $q: angular.IQService,\r\n $http: angular.IHttpService,\r\n protected authenticationService: AuthenticationService,\r\n protected authorizationService: AuthorizationService\r\n ) {\r\n super($q, $http);\r\n this.addHttpErrorInterceptor((e, ex) => this.onAuthorizedInterceptor(e, ex), 0);\r\n this.addHttpErrorInterceptor((e, ex) => this.seqInterceptor(e, ex), 10);\r\n this.addHttpErrorInterceptor((e, ex) => this.validationErrorInterceptor(e, ex), 20);\r\n this.addHttpErrorInterceptor((e, ex) => this.csSharpInterceptor(e, ex), 30);\r\n this.doSetBearer(c => this.authenticationService.AuthenticationSetter(c));\r\n this.doSetRoles(c => this.authorizationService.RoleHeaderSetter(c));\r\n }\r\n\r\n private unauthorizedHandlers: ((sender: FiqassistApiServiceBase, url: string) => boolean | void)[] = [];\r\n\r\n public addUnauthorizedHandler(handler: (sender: FiqassistApiServiceBase, url: string) => boolean | void) {\r\n if (!this.unauthorizedHandlers.some(h => h === handler))\r\n this.unauthorizedHandlers.push(handler);\r\n }\r\n\r\n public removeUnauthorizedHandler(handler: (sender: FiqassistApiServiceBase, url: string) => boolean | void) {\r\n this.unauthorizedHandlers = this.unauthorizedHandlers.filter(h => h !== handler);\r\n }\r\n\r\n private onAuthorizedInterceptor(response: ng.IHttpPromiseCallbackArg, result: ParsedResult) {\r\n if (response.status !== 401)\r\n return;\r\n\r\n return this.onUnauthorized(response.config.url);\r\n }\r\n\r\n public csSharpInterceptor(response: ng.IHttpPromiseCallbackArg, result: ParsedResult) {\r\n if (response.status !== 500 || !response.data.Exception || !result)\r\n return;\r\n\r\n var exception: CSharpException = response.data.Exception;\r\n if (!exception)\r\n return;\r\n\r\n result.exception = exception;\r\n return result;\r\n }\r\n\r\n public validationErrorInterceptor(response: ng.IHttpPromiseCallbackArg, result: ParsedResult) {\r\n if (response.status !== 400 || !response.data || !result)\r\n return;\r\n\r\n var validationResult: ValidationResult = response.data;\r\n if (!validationResult)\r\n return;\r\n\r\n result.validation = validationResult;\r\n return result;\r\n }\r\n\r\n // add this as fist interceptor\r\n public seqInterceptor(response: ng.IHttpPromiseCallbackArg, result: ParsedResult) {\r\n if (!result || !response || !response.headers)\r\n return;\r\n\r\n var seqRequestId: string = response.headers(\"X-Correlation-ID\");\r\n if (seqRequestId)\r\n result.seqrequestid = seqRequestId;\r\n }\r\n\r\n private onUnauthorized(url: string) {\r\n var handled = false;\r\n for (var handler of this.unauthorizedHandlers)\r\n handled = handler(this, url) === true || handled;\r\n return handled;\r\n }\r\n\r\n public GetIIdentifiablePagedCollectionPropertyOf(property: IIdentifiablePagedCollectionPropertyOf, force: boolean = false): ng.IPromise> {\r\n return this.GetIIdentifiableCollectionPropertyOf(property, force);\r\n }\r\n}\r\n","import { FIQAssist } from \"../../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { FiqassistApiServiceBase } from \"./fiqassistApiServiceBase\";\r\nimport { AuthenticationService } from \"../authenticationService\"\r\nimport { FqsService } from \"../fqsService\"\r\nimport { AuthorizationService } from \"../authorizationService\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: FiqassistService.selector\r\n})\r\nexport class FiqassistService extends FiqassistApiServiceBase {\r\n public static selector = \"FiqassistService\"\r\n constructor(\r\n @Inject('$q') $q: angular.IQService,\r\n @Inject('$http') $http: angular.IHttpService,\r\n @Inject() authenticationService: AuthenticationService,\r\n @Inject() authorizationService: AuthorizationService,\r\n ) {\r\n super($q, $http, authenticationService, authorizationService);\r\n }\r\n}\r\n","import { FIQAssist } from \"../../app\";\r\nimport { Memoize } from \"@fiqas/utils\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { FiqassistApiServiceBase } from \"./fiqassistApiServiceBase\";\r\nimport { StartResult } from \"../../models/home\";\r\nimport { FiqassistApiURL, FiqassistVersion } from \"../../constants\";\r\nimport { AuthenticationService } from \"../authenticationService\";\r\nimport { FqsService } from \"../fqsService\";\r\nimport { StartVersion } from \"../../models/version\";\r\nimport { LogService } from \"../logService\";\r\nimport { User } from \"../../models/user\";\r\nimport { AuthorizationService } from \"../authorizationService\";\r\n\r\nconst ApiNotAvailible: StartVersion = { apiVersion: \"Not availible\", domainVersion: \"Not availible\", version: \"Not availible\" };\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: HomeService.selector\r\n})\r\nexport class HomeService extends FiqassistApiServiceBase {\r\n public static selector = \"HomeService\"\r\n public static ApiNotAvailible: StartVersion = ApiNotAvailible;\r\n public fiqassistApiVersion: StartVersion = HomeService.ApiNotAvailible;\r\n\r\n constructor(\r\n @Inject('$q') $q: angular.IQService,\r\n @Inject('$http') $http: angular.IHttpService,\r\n @Inject() authenticationService: AuthenticationService,\r\n @Inject() authorizationService: AuthorizationService,\r\n @Inject('FiqassistApiURL') private FiqassistApiURL: FiqassistApiURL,\r\n @Inject('FiqassistVersion') public fiqassistClientVersion: FiqassistVersion,\r\n @Inject() private logService: LogService,\r\n ) {\r\n super($q, $http, authenticationService, authorizationService);\r\n authenticationService.addLoginHandler(() => this.resetMemoizedProperties());\r\n authenticationService.addLogoutHandler(() => this.resetMemoizedProperties());\r\n authorizationService.onRoleChanged(() => this.resetMemoizedProperties());\r\n this.recieveAPIVersion((apiVersion: StartVersion) => this.fiqassistApiVersion = apiVersion);\r\n }\r\n\r\n public recieveAPIVersion(action: (apiVersion: StartVersion) => void) {\r\n this.performRequest(\"GET\", `${this.FiqassistApiURL}/Home/Version`)\r\n .then(\r\n succes => { this.fiqassistApiVersion = succes; },\r\n failure => { this.fiqassistApiVersion = HomeService.ApiNotAvailible }\r\n ).finally(\r\n () => { if (action) action(this.fiqassistApiVersion); }\r\n );\r\n }\r\n\r\n private resetMemoizedProperties() {\r\n this.StartResult = null;\r\n }\r\n\r\n @Memoize()\r\n public get StartResult() {\r\n if (this.authorizationService && this.authenticationService && this.authenticationService.username) {\r\n var p = this.start(this.authenticationService.username);\r\n p.catch(() => this.StartResult = null);\r\n return p;\r\n }\r\n return null;\r\n }\r\n private async start(user: string) {\r\n await this.authorizationService.roleLoaded;\r\n return this.performRequest(\"GET\", `${this.FiqassistApiURL}/Home/${user}`);\r\n }\r\n\r\n public set StartResult(value: angular.IPromise) { }\r\n}\r\n","import { FIQAssist } from \"../../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { FiqassistApiServiceBase } from \"./fiqassistApiServiceBase\";\r\nimport { WebLink } from \"../../models/base\";\r\nimport { IIdentityLink, IIdentityResolver, CollectionResult } from \"../../interfaces/iFqs\"\r\nimport { Person, PersonData } from \"../../models/person\";\r\nimport { AuthenticationService } from \"../authenticationService\";\r\nimport { FqsService } from \"../fqsService\";\r\nimport { HomeService } from \"./homeService\";\r\nimport { ReportParameters, ReportCollection, BalanceReportParameters } from \"../../models/recordReport\";\r\nimport { CompactServiceCase } from \"../../models/serviceCase\";\r\nimport { AuthorizationService } from \"../authorizationService\";\r\n\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: ReportService.selector\r\n})\r\nexport class ReportService extends FiqassistApiServiceBase {\r\n public static selector = \"ReportService\"\r\n\r\n private apiUrl;\r\n\r\n constructor(\r\n @Inject('$q') $q: angular.IQService,\r\n @Inject('$http') $http: angular.IHttpService,\r\n @Inject() authenticationService: AuthenticationService,\r\n @Inject() authorizationService: AuthorizationService\r\n ) {\r\n super($q, $http, authenticationService, authorizationService);\r\n }\r\n\r\n public async GetReport(url: string, parameters: ReportParameters | BalanceReportParameters) {\r\n return this.performRequest(\"GET\", url, parameters);\r\n }\r\n\r\n public async GetReportCases(url: string) {\r\n return this.performRequest>(\"GET\", url);\r\n }\r\n}\r\n","import { FIQAssist } from \"../../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { FiqassistApiServiceBase } from \"./fiqassistApiServiceBase\";\r\nimport { ValidationResult } from \"../../models/base\";\r\nimport { IIdentityLink, IIdentityResolver, IIdentifiableCollectionPropertyOf, CollectionResult } from \"../../interfaces/iFqs\"\r\nimport { SearchInfo, SearchData, ProblemData, CompactServiceCase, ServiceCase, ServiceCaseData, RequestData, CorrespondenceData, Correspondence, CaseType } from \"../../models/serviceCase\";\r\nimport { ComplaintData } from \"../../models/complaint\";\r\nimport { ComplimentData } from \"../../models/compliment\";\r\nimport { CaseFileData } from \"../../models/file\";\r\nimport { AuthenticationService } from \"../authenticationService\";\r\nimport { HomeService } from \"./homeService\";\r\nimport { AuthorizationService } from \"../authorizationService\";\r\nimport { FileService } from \"./FileService\";\r\nimport { LogService } from \"../logService\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: ServiceCaseService.selector\r\n})\r\nexport class ServiceCaseService extends FiqassistApiServiceBase {\r\n public static selector = \"ServiceCaseService\"\r\n\r\n private maxLimit: number = 100;\r\n private exportLimit: number = 500;\r\n\r\n constructor(\r\n @Inject('$q') $q: angular.IQService,\r\n @Inject('$http') $http: angular.IHttpService,\r\n @Inject() private homeService: HomeService,\r\n @Inject() authenticationService: AuthenticationService,\r\n @Inject() authorizationService: AuthorizationService,\r\n @Inject() protected fileService: FileService,\r\n @Inject() protected logService: LogService\r\n ) {\r\n super($q, $http, authenticationService, authorizationService);\r\n }\r\n\r\n public async SearchInfo(customers: number[]) {\r\n return this.PreformSearch({ cid: customers });\r\n }\r\n public async AdvancedSearch(data: SearchData, customers: number[], limit: number = null, skip: number = null) {\r\n return this.PreformSearch({ cid: customers, limit: (limit > this.maxLimit) ? this.maxLimit : limit, skip: skip }, data);\r\n }\r\n public async FilteredSearch(search: string, customers: number[], limit: number = null, skip: number = null, data: SearchData = null) {\r\n return this.PreformSearch({ q: search, cid: customers, limit: (limit > this.maxLimit) ? this.maxLimit : limit, skip: skip }, data);\r\n }\r\n public async AdvancedExport(data: SearchData = null, customers: number[]) {\r\n return this.PreformSearch({ cid: customers, limit: this.exportLimit, skip: 0 }, data);\r\n }\r\n public async FilteredExport(search: string, customers: number[], data: SearchData = null) {\r\n return this.PreformSearch({ q: search, cid: customers, limit: this.exportLimit, skip: 0 }, data);\r\n }\r\n private async PreformSearch(params?: { [key: string]: any;}, body?: SearchData) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest>(\"POST\", res.searchCases.fullHref.replace(/{.*}/, \"\"), params, body);\r\n }\r\n\r\n public async NewProblem(problem: ProblemData) {\r\n var res = await this.homeService.StartResult;\r\n var response = await this.performRequestWithFullResponse(\"POST\", res.newProblem.fullHref, {}, problem, { \"Content-Type\": \"application/json; charset=utf-8\" });\r\n if (response.status != 201)\r\n throw `ServiceCaseService.NewProblem() Expected 201, received ${response.status}`;\r\n\r\n var newId = response.headers(\"Location\");\r\n return >this.createIdentityLink({ href: newId });\r\n }\r\n\r\n\r\n public async UpdateProblem(id: IIdentityLink, problem: ProblemData) {\r\n return this.UpdateCase(id, problem);\r\n }\r\n\r\n public async UpdateCase(id: IIdentityLink, data: C) {\r\n let fullHref = id.fullHref;\r\n if (data.type === \"bug\") {\r\n fullHref = fullHref.replace('request', 'problem');\r\n } else if (data.type === \"request\") {\r\n fullHref = fullHref.replace('problem', 'request');\r\n }\r\n var response = await this.performRequestWithFullResponse(\"PUT\", fullHref, {}, this.sanitizeCase(data), { \"Content-Type\": \"application/json; charset=utf-8\" });\r\n if (response.status != 204)\r\n throw `ServiceCaseService.UpdateCase() Expected 204, received ${response.status}`;\r\n }\r\n // remove image src if it was added by FE.\r\n private sanitizeCase(serviceCase: C) {\r\n // Spread work aounded. Spreading of generic is fixed in TypeScript Version 3.2.\r\n let sanatizeServiceCase = { ...(serviceCase as object) } as C;\r\n // find all images\r\n let images = sanatizeServiceCase.description.match(/]*>/g) || [];\r\n images.forEach(fqsImgWithSrc => {\r\n // find the 2 required attributes and src, that makes 3 (src shouldn't be filled for storage, except newly added images, which won't have an data-fileid)\r\n let attrs = fqsImgWithSrc.match(/((src|data-fileid|data-filename)=\"[^<>\"]*\")/g) || [];\r\n // let assume the image attributes are alway uniquely named for ease and preformance.\r\n if (attrs.length == 3) {\r\n let santizedFqsImg = fqsImgWithSrc.replace(/\\ src=\"[^<>\"]*\"/g, \"\");\r\n let restoredBeSrcFqsImg = santizedFqsImg.replace(/\\ srcFromBe=\"([^<>\"]*)\"/g, \" src=\\\"$1\\\"\");\r\n // only change the found image so no other changes will be made to description\r\n sanatizeServiceCase.description = sanatizeServiceCase.description.replace(fqsImgWithSrc, restoredBeSrcFqsImg);\r\n }\r\n });\r\n return sanatizeServiceCase;\r\n }\r\n\r\n public async NewRequest(request: RequestData) {\r\n var res = await this.homeService.StartResult;\r\n var response = await this.performRequestWithFullResponse(\"POST\", res.newRequest.fullHref, {}, request, { \"Content-Type\": \"application/json; charset=utf-8\" });\r\n if (response.status != 201)\r\n throw `ServiceCaseService.NewProblem() Expected 201, received ${response.status}`;\r\n\r\n var newId = response.headers(\"Location\");\r\n return >this.createIdentityLink({ href: newId });\r\n }\r\n\r\n public async UpdateRequest(id: IIdentityLink, request: RequestData) {\r\n return this.UpdateCase(id, request);\r\n }\r\n\r\n public async NewComplaint(cid: string, complaint: ComplaintData) {\r\n var res = await this.homeService.StartResult;\r\n var response = await this.performRequestWithFullResponse(\"POST\", res.addComplaint.fullHref.replace(/\\{cid\\}/, cid), {}, complaint, { \"Content-Type\": \"application/json; charset=utf-8\" })\r\n if (response.status != 204)\r\n throw `ServiceCaseService.NewComplaint() Expected 204, received ${response.status}`;\r\n }\r\n\r\n public async NewCompliment(cid: string, compliment: ComplimentData) {\r\n var res = await this.homeService.StartResult;\r\n var response = await this.performRequestWithFullResponse(\"POST\", res.addCompliment.fullHref.replace(/\\{cid\\}/, cid), {}, compliment, { \"Content-Type\": \"application/json; charset=utf-8\" });\r\n if (response.status != 204)\r\n throw `ServiceCaseService.NewCompliment() Expected 204, received ${response.status}`;\r\n }\r\n\r\n public GetById(id: IIdentityLink, resolveOnReject: boolean = false) {\r\n return this.performRequest(\"GET\", id.fullHref, null, null, null, resolveOnReject).then(sc => { return this.fillImageSources(sc); });\r\n }\r\n public async GetByNumber(cid: number, resolveOnReject: boolean = false) {\r\n var res = await this.homeService.StartResult;\r\n var id = res.caseByNumber.fullHref.replace(\"{number}\", cid + \"\");\r\n return this.performRequest(\"GET\", id, null, null, null, resolveOnReject).then(sc => { return this.fillImageSources(sc); });\r\n }\r\n // load images and apply as base64 data.\r\n public fillImageSources(serviceCase: T) {\r\n let imageFilePromises: ng.IPromise[] = [];\r\n let imageData: { [key: string]: string } = {};\r\n\r\n // find all images\r\n let images = serviceCase.description.match(/]*>/g) || [];\r\n images.forEach(fqsImgWithSrc => {\r\n // find the 2 required attributes\r\n let attrs = fqsImgWithSrc.match(/(data-fileid|data-filename)=\"([^<>\"]*)\"/g) || [];\r\n // let assume the image attributes are alway uniquely named for ease and preformance.\r\n if (attrs.length === 2) {\r\n // probally unneeded as it should not be there, but remove src from img any ways if browser deside to add src themself\r\n let santizedFqsImg = fqsImgWithSrc.replace(/\\ src=\"([^<>\"]*)\"/g, \" srcFromBe=\\\"$1\\\"\");\r\n // only change the found image so no other changes will be made to description\r\n serviceCase.description = serviceCase.description.replace(fqsImgWithSrc, santizedFqsImg);\r\n // find file id & name\r\n let dataFileIdMatch = fqsImgWithSrc.match(/\\ data-fileid=\"([^<>\"]*)\"/i) || [];\r\n let dataFileNameMatch = fqsImgWithSrc.match(/\\ data-filename=\"([^<>\"]*)\"/i) || [];\r\n if (dataFileIdMatch.length === 2 && dataFileNameMatch.length === 2) {\r\n let dataFileid = dataFileIdMatch[1];\r\n let dataFileName = dataFileNameMatch[1];\r\n // create promise(s) from id and put it in imageData; filename keyed.\r\n let promise = this.fileService.GetFileFromUrl(dataFileid).then(file => { imageData[dataFileName] = this.fileService.GenerateImageSource(file); }, error => { imageData[dataFileName] = this.fileService.ImageNotFoundSource(); this.logService.error(`fillImageSources`, `image promise failed`, error); })\r\n imageFilePromises.push(promise);\r\n }\r\n }\r\n });\r\n return this.$q.all(imageFilePromises).then(_ => {\r\n Object.keys(imageData).forEach(dataFileName => {\r\n // apply images based on filename.\r\n serviceCase.description = serviceCase.description.replace(` data-filename=\"${dataFileName}\"`, ` data-filename=\"${dataFileName}\" src=\"${imageData[dataFileName]}\"`);\r\n });\r\n return serviceCase;\r\n }) as angular.IPromise;\r\n }\r\n\r\n\r\n public async AddCorrespondence(property: IIdentifiableCollectionPropertyOf, correspondence: CorrespondenceData) {\r\n return this.AddIIdentifiableCollectionPropertyOf(property, correspondence, null);\r\n }\r\n\r\n public async UpdateCorrespondence(correspondence: Correspondence) {\r\n return this.performRequest(\"PUT\", correspondence.id.fullHref, null, correspondence);\r\n }\r\n\r\n public async ActiveCases(customers: number[], limit: number, mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest>(\"GET\", res.activeCases.fullHref.replace(/{.*}/, \"\"), { cid: customers, limit: (limit > this.maxLimit) ? this.maxLimit : limit, forActiveUser: !!mycases });\r\n }\r\n\r\n public async ActiveCasesExport(customers: number[], mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest(\"GET\", res.activeCases.fullHref.replace(/{.*}/, \"\"), { cid: customers, limit: this.exportLimit, skip: 0, forActiveUser: !!mycases });\r\n }\r\n\r\n public async ActiveCasesCount(customers: number[], mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest(\"GET\", res.activeCasesCount.fullHref.replace(/{.*}/, \"\"), { cid: customers, forActiveUser: !!mycases });\r\n }\r\n\r\n public async ActionRequired(customers: number[], limit: number, mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest>(\"GET\", res.actionRequiredCases.fullHref.replace(/{.*}/, \"\"), { cid: customers, limit: (limit > this.maxLimit) ? this.maxLimit : limit, forActiveUser: !!mycases });\r\n }\r\n\r\n public async ActionRequiredExport(customers: number[], mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest(\"GET\", res.actionRequiredCases.fullHref.replace(/{.*}/, \"\"), { cid: customers, limit: this.exportLimit, skip: 0, forActiveUser: !!mycases });\r\n }\r\n\r\n public async ActionRequiredCount(customers: number[], mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest(\"GET\", res.actionRequiredCasesCount.fullHref.replace(/{.*}/, \"\"), { cid: customers, forActiveUser: !!mycases });\r\n }\r\n\r\n public async AwaitingFeedback(customers: number[], limit: number, mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest>(\"GET\", res.awaitingFeedbackCases.fullHref.replace(/{.*}/, \"\"), { cid: customers, limit: (limit > this.maxLimit) ? this.maxLimit : limit, forActiveUser: !!mycases });\r\n }\r\n\r\n public async AwaitingFeedbackExport(customers: number[], mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest(\"GET\", res.awaitingFeedbackCases.fullHref.replace(/{.*}/, \"\"), { cid: customers, limit: this.exportLimit, skip: 0, forActiveUser: !!mycases });\r\n }\r\n\r\n public async AwaitingFeedbackCount(customers: number[], mycases?: boolean) {\r\n var res = await this.homeService.StartResult;\r\n return this.performRequest(\"GET\", res.awaitingFeedbackCasesCount.fullHref.replace(/{.*}/, \"\"), { cid: customers, forActiveUser: !!mycases });\r\n }\r\n\r\n public async AddFile(property: IIdentifiableCollectionPropertyOf, file: CaseFileData) {\r\n return this.AddIIdentifiableCollectionPropertyOf(property, file, null);\r\n }\r\n\r\n public async DeleteFile(id: IIdentityLink) {\r\n return this.performRequest(\"DELETE\", id.fullHref);\r\n }\r\n}\r\n","import { FIQAssist } from \"../../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { FiqassistApiServiceBase } from \"./fiqassistApiServiceBase\";\r\nimport { GetCustomersResult } from \"../../models/customer\";\r\nimport { User, FiqassistRole } from \"../../models/user\";\r\nimport { StartResult } from \"../../models/home\"\r\nimport { AuthenticationService } from \"../authenticationService\"\r\nimport { IIdentityLink } from \"../../interfaces/iFqs\";\r\nimport { HomeService } from \"./homeService\";\r\nimport { FqsService } from \"../fqsService\";\r\nimport { RecentServiceCasesResult } from \"../../models/serviceCase\";\r\nimport { Memoize } from \"@fiqas/utils\";\r\nimport { LogService } from \"../logService\";\r\nimport { GetPersonsResult } from \"../../models/person\";\r\nimport { retry } from \"rxjs/operator/retry\";\r\nimport { AuthorizationService } from \"../authorizationService\";\r\nimport { Subscription } from \"rxjs/Subscription\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: UserService.selector\r\n})\r\nexport class UserService extends FiqassistApiServiceBase {\r\n public static selector = \"UserService\";\r\n\r\n constructor(\r\n @Inject('$q') $q: ng.IQService,\r\n @Inject('$http') $http: angular.IHttpService,\r\n @Inject() authenticationService: AuthenticationService,\r\n @Inject() authorizationService: AuthorizationService,\r\n @Inject() private homeService: HomeService,\r\n @Inject() private logService: LogService\r\n ) {\r\n super($q, $http, authenticationService, authorizationService);\r\n\r\n authenticationService.addLoginHandler(() => this.resetMemoizedProperties());\r\n authenticationService.addLogoutHandler(() => this.resetMemoizedProperties());\r\n authorizationService.onRoleChanged(() => this.resetMemoizedProperties());\r\n }\r\n\r\n private resetMemoizedProperties() {\r\n this.Customers = null;\r\n }\r\n\r\n private async getCustomers() {\r\n try {\r\n var startResult = await this.homeService.StartResult;\r\n if (startResult === null) return null;\r\n return startResult.customers.value;\r\n } catch (e) {\r\n this.logService.error('UserService', 'Error retrieving customer', e);\r\n }\r\n }\r\n\r\n @Memoize()\r\n public get Customers() {\r\n var p = this.getCustomers();\r\n p.catch(() => this.Customers = null);\r\n return p;\r\n }\r\n public set Customers(_) { }\r\n\r\n public async getFiqasEmployees() {\r\n try {\r\n var startResult = await this.homeService.StartResult;\r\n if (startResult === null) return null;\r\n var pers = startResult.persons;\r\n return this.performRequest(\"GET\", pers.fullHref, {});\r\n } catch (e) {\r\n this.logService.error('UserService', 'Error retrieving fiqas employees', e);\r\n }\r\n }\r\n\r\n public async getPersons(customerIds: string[] = null) {\r\n try {\r\n var startResult = await this.homeService.StartResult;\r\n if (startResult === null) return null;\r\n var customers = await this.Customers;\r\n var pers = startResult.persons;\r\n return this.performRequest(\"GET\", pers.fullHref, { cid: customerIds || customers.items.map(c => c.id.ref) });\r\n } catch (e) {\r\n this.logService.error('UserService', 'Error retrieving persons', e);\r\n }\r\n }\r\n\r\n public async RecentServiceCases(customers: number[], maxItems: number): Promise {\r\n try {\r\n var startResult = await this.homeService.StartResult;\r\n if (startResult === null) return null;\r\n return this.performRequest(\"GET\", startResult.recentCases.fullHref, { cid: customers, limit: maxItems })\r\n } catch (e) {\r\n this.logService.error('UserService', 'Error retrieving recentservicecases', e);\r\n }\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\"\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { Utils } from \"@fiqas/utils\";\r\nimport { ServiceBase } from \"./serviceBase\"\r\nimport { WebLink, ValidationResult, HTTPMethod } from \"../models/base\";\r\nimport {\r\n IFqsResult, IIdentifiable, IIdentityLink, IIdentifiableCollectionProperty,\r\n IIdentifiableCollectionPropertyOf, IIdentifiableCollectionOf,\r\n IIdentifiablePagedCollectionOf, IIdentityResolver, IResourceLink, IResourceResolver, IResource\r\n} from \"../interfaces/iFqs\"\r\n\r\nclass ActionDictionary {\r\n [key: string]: {\r\n action: (data?: D, urlparams?: { [key: string]: any }) => ng.IPromise\r\n }\r\n watch: any;\r\n unwatch: any;\r\n}\r\nActionDictionary.prototype.watch = undefined;\r\nActionDictionary.prototype.unwatch = undefined;\r\nclass ActionGroup extends ActionDictionary {\r\n\r\n}\r\n\r\nexport class FqsService extends ServiceBase {\r\n public static selector = \"fqsService\"\r\n\r\n constructor(\r\n $q: angular.IQService,\r\n $http: angular.IHttpService\r\n ) {\r\n super($q, $http);\r\n this.addResponseTransformer((d, h, s) => this.defaultResponseTransformer(d, h, s), 0);\r\n this.addRequestTransformers((d, h) => this.jsonRequestTransformer(d, h), 100);\r\n this.addHeaderSetter(this.defaultHeaderSetter);\r\n }\r\n public $onInit() {\r\n\r\n }\r\n\r\n private defaultHeaderSetter(h: ng.IHttpRequestConfigHeaders) {\r\n h[\"Accept\"] = \"application/fqs+json,application/json; charset=utf-8\";\r\n return h;\r\n }\r\n\r\n private defaultResponseTransformer(data: any, headersGetter: ng.IHttpHeadersGetter, status: number) {\r\n var contentType = headersGetter(\"Content-Type\") || \"\";\r\n if (data) {\r\n if (contentType.indexOf(\"application/fqs+json\") > -1) {\r\n data = JSON.parse(data);\r\n if (!angular.isArray(data))\r\n data = this.parseFqsResult(data);\r\n } else if (contentType.indexOf(\"application/json\") > -1) {\r\n data = JSON.parse(data);\r\n } else if (contentType.indexOf(\"text/plain\") > -1) {\r\n data = data;\r\n }\r\n }\r\n return { data: data, continue: true };\r\n }\r\n\r\n private jsonRequestTransformer(data: any, headersGetter: ng.IHttpHeadersGetter) {\r\n return { data: data ? JSON.stringify(data) : data, continue: true };\r\n }\r\n\r\n private handleRequest(element: any, operation: string, what: string, url: string) {\r\n Utils.forEachProperty(element, (p, k) => {\r\n element[k] = { href: p.fullHref }\r\n }, p => p.href !== undefined && p.hasOwnProperty(\"value\"));\r\n if (element.actionLinks !== undefined)\r\n delete element.actionLinks;\r\n return element;\r\n }\r\n\r\n private handleFqsResponse(data: any, operation: string, what: string, url: string, response: any, deferred: ng.IDeferred) {\r\n if (response.headers('Content-Type').indexOf('application/fqs+json') > -1) {\r\n if (data.constructor === Array) {\r\n return data;\r\n } else {\r\n return this.parseFqsResult(data);\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n private parseFqsResult(result: IFqsResult & R): R {\r\n var curies: { [id: string]: string } = {};\r\n (result._curies || []).forEach(c => curies[c.name] = c.href);\r\n var curieGetter = k => curies[k];\r\n\r\n var embedded: { [id: string]: IIdentifiable } = {};\r\n (result._embedded || []).filter(p => p.id.href !== undefined).forEach(p => {\r\n var href = ResourceLink.parseLink(p.id.href)[0];\r\n embedded[href] = p;\r\n });\r\n\r\n Utils.forEachProperty(embedded,\r\n (p, k) => embedded[k] = this.promisifyIdentityProperties(p, embedded, curieGetter),\r\n (p, k) => (embedded).hasOwnProperty(k));\r\n\r\n if (result._actions) {\r\n var actionLinks: { [groupkey: string]: ActionDictionary } = {};\r\n Utils.forEachKey(result._actions, (groups, groupkey) => {\r\n actionLinks[groupkey] = new ActionGroup();\r\n Utils.forEachKey(groups, (action, actionkey) => {\r\n actionLinks[groupkey][actionkey] = {\r\n action: (data: D = null, urlparams: { [key: string]: any } = null) => this.performActionLinkRequest(action, curieGetter, urlparams, data)\r\n }\r\n })\r\n })\r\n result['actionLinks'] = actionLinks;\r\n delete result._actions;\r\n }\r\n delete result._embedded;\r\n delete result._curies;\r\n\r\n return this.promisifyIdentityProperties(result, embedded, curieGetter);\r\n }\r\n\r\n private performActionLinkRequest(action: { href: string, method?: HTTPMethod }, curieGetter: (k: any) => string, urlparams: { [key: string]: any }, data: D) {\r\n var method = (action.method || \"GET\").toUpperCase()\r\n var link = new IdentityLink(action.href, curieGetter, null);\r\n var match = RegExp(/{\\?([\\w,]*)}/).exec(link.fullHref);\r\n var keys = match && match[1] ? match[1].split(',').map(m => { return { key: m, value: null } }) : [];\r\n for (let k of keys) {\r\n k.value = urlparams ? urlparams[k.key] : undefined;\r\n }\r\n var paramstring = keys.filter(k => k.value).map(k => {\r\n return k.value && k.value.length !== undefined ?\r\n (k.value).map(v => `${k.key}=${encodeURIComponent(v)}`).join(\"&\") :\r\n `${k.key}=${encodeURIComponent(k.value)}`\r\n }).join(\"&\");\r\n if (paramstring)\r\n paramstring = \"?\" + paramstring;\r\n var url = link.fullHref.replace(/{.*}/, paramstring);\r\n\r\n return this.performRequest(method, url, null, data ? data : null);\r\n }\r\n\r\n private promisifyIdentityProperties(item: T & Object, resources: { [id: string]: IIdentifiable }, getCurie: (key: string) => string): T {\r\n var handleValue = (po, k) => {\r\n if (po.href !== undefined) {\r\n if (k === \"id\") {\r\n var res: { [id: string]: IIdentifiable } = {};\r\n var href = ResourceLink.parseLink(po.href)[0];\r\n res[href] = item;\r\n }\r\n return this.promisifyIdentityLink(po, res || resources, getCurie);\r\n } else if (po.constructor !== String) {\r\n return this.promisifyIdentityProperties(po, resources, getCurie);\r\n }\r\n return po;\r\n };\r\n\r\n Utils.forEachProperty(item, (p, k) => {\r\n if (p.constructor === Array) {\r\n item[k] = (p).map(handleValue);\r\n } else {\r\n item[k] = handleValue(p, k);\r\n }\r\n }, (p, k) => k.indexOf('_') !== 0 && !!p && item.hasOwnProperty(k));\r\n return item;\r\n }\r\n\r\n private promisifyIdentityLink(link: IIdentityLink | IResourceLink, resources: { [id: string]: IIdentifiable }, getCurie: (key: string) => string): IIdentityLink {\r\n var resource;\r\n var getter = (l: IIdentityLink) => {\r\n if (!resource)\r\n resource = this.getResource(l, resources);\r\n return resource;\r\n };\r\n return link['ref'] ? new ResourceLink(link.href, (link).ref, getCurie, getter) : new IdentityLink(link.href, getCurie, getter);\r\n }\r\n\r\n private getResource(link: IIdentityLink, resources: { [id: string]: IIdentifiable }): ng.IPromise {\r\n var resource = resources[link.href];\r\n if (resource !== undefined) {\r\n return this.$q(resolve => resolve(resource));\r\n } else {\r\n return this.performRequest(\"GET\", link.fullHref);\r\n }\r\n }\r\n\r\n public createIdentityLink(link: WebLink) {\r\n return new IdentityLink(link.href, _ => _, (link: ResourceLink) => this.getResource(link, {}));\r\n }\r\n\r\n public GetIIdentifiableCollectionPropertyOf(property: IIdentifiableCollectionPropertyOf, force: boolean = false): ng.IPromise> {\r\n if ((>property).id !== undefined) {\r\n if (force) {\r\n return this.performRequest>(\"GET\", (>property).id.fullHref);\r\n } else {\r\n return this.$q(resolve => resolve(>property));\r\n }\r\n }\r\n return this.performRequest>(\"GET\", (>>property).fullHref);\r\n }\r\n\r\n public AddIIdentifiableCollectionPropertyOf(property: IIdentifiableCollectionPropertyOf, item: T, params: any): ng.IPromise> {\r\n var fullRef = '';\r\n if ((>property).id !== undefined) {\r\n fullRef = (>property).id.fullHref;\r\n } else {\r\n fullRef = (>>property).fullHref;\r\n }\r\n return this.performRequestWithFullResponse(\"POST\", fullRef, params, item, { \"Content-Type\": \"application/json; charset=utf-8\" })\r\n .then(response => {\r\n return this.$q((resolve, reject) => {\r\n if (response.status != 201)\r\n reject(`AddIIdentifiableCollectionPropertyOf Expected 201, received ${response.status}`);\r\n var newId = response.headers(\"Location\");\r\n resolve(this.createIdentityLink({ href: newId }));\r\n });\r\n });\r\n\r\n }\r\n}\r\n\r\n\r\n\r\n\r\nexport class IdentityLink implements IIdentityLink, IIdentityResolver {\r\n constructor(\r\n rawvalue: string,\r\n protected curieGetter: (name: string) => string,\r\n protected objectGetter: (link: IdentityLink) => ng.IPromise) {\r\n this.link = IdentityLink.parseLink(rawvalue);\r\n }\r\n\r\n public static fromLink(source: T): IdentityLink {\r\n if (source['fullHref']) {\r\n if (source['ref'])\r\n return ((source)).toIdentityLink();\r\n return ((source));\r\n }\r\n return new IdentityLink(source.href, _ => _, _ => null);\r\n }\r\n\r\n public equals(link: WebLink) {\r\n return (link['fullHref'] || link.href) == this.fullHref;\r\n }\r\n\r\n private link: [string, string] = [\"\", \"\"];\r\n\r\n public static parseLink(value: string) {\r\n var result: [string, string] = [\"\", \"\"];\r\n if (value[0] === '[' && value[value.length - 1] === ']') {\r\n var l = value.substr(1, value.length - 2).split(':').reverse();\r\n result[0] = l[0];\r\n result[1] = l[1];\r\n } else {\r\n result[0] = value;\r\n }\r\n return result;\r\n }\r\n public get href(): string {\r\n return this.link[0]\r\n }\r\n public set href(value: string) {\r\n this.link = IdentityLink.parseLink(value);\r\n }\r\n public get fullHref() {\r\n return this.curieGetter(this.link[1]) + this.link[0];\r\n }\r\n\r\n public toString() {\r\n return this.fullHref;\r\n }\r\n\r\n public get base() {\r\n return this.link[1];\r\n }\r\n public get value() {\r\n return this.objectGetter(this);\r\n }\r\n public toJSON(): string | WebLink {\r\n return { href: this.fullHref };\r\n }\r\n}\r\n\r\nexport class ResourceLink extends IdentityLink implements IResourceResolver {\r\n constructor(\r\n private rawvalue: string,\r\n ref: string,\r\n curieGetter: (name: string) => string,\r\n resourceGetter: (link: ResourceLink) => ng.IPromise) {\r\n super(rawvalue, curieGetter, resourceGetter);\r\n this._ref = ref;\r\n }\r\n public _ref: string;\r\n\r\n public get ref() {\r\n return this._ref;\r\n }\r\n public toJSON() {\r\n return this._ref;\r\n }\r\n public toIdentityLink() {\r\n return new IdentityLink(this.rawvalue, this.curieGetter, this.objectGetter);\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { LiteEvent } from \"../interfaces/iLiteEvent\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: IsProcessingService.selector\r\n})\r\n/**\r\n * Session class, stores values as JSON in local browser storage.\r\n */\r\nexport class IsProcessingService {\r\n public static selector = \"IsProcessingService\";\r\n\r\n public IsProcessing: boolean = false;\r\n private busyCount: number = 0;\r\n private publisher: LiteEvent;\r\n constructor() {\r\n this.publisher = new LiteEvent();\r\n }\r\n\r\n public StartProcessing() {\r\n this.busyCount++;\r\n\r\n if (!this.IsProcessing) {\r\n this.IsProcessing = true;\r\n this.publisher.trigger(this.IsProcessing);\r\n }\r\n }\r\n public StopProcessing() {\r\n if (this.busyCount > 0)\r\n this.busyCount--;\r\n\r\n if (this.busyCount == 0) {\r\n this.IsProcessing = false;\r\n this.publisher.trigger(this.IsProcessing);\r\n }\r\n }\r\n\r\n public addListener(listener: (boolean) => void): () => void {\r\n this.publisher.on(listener);\r\n return () => { this.publisher.off(listener); };\r\n }\r\n\r\n public reset() {\r\n this.IsProcessing = false;\r\n this.busyCount = 0;\r\n this.publisher.trigger(this.IsProcessing);\r\n }\r\n}","import { Injectable } from \"@fiqas/angular-utils\";\r\nimport { FIQAssist } from \"../app\";\r\nimport { IDisposable } from \"../interfaces/general\";\r\nimport { ValidationResult } from \"../models/base\";\r\n\r\nexport interface LogListener {\r\n onDebug(message: LogMessage): void;\r\n onInfo(message: LogMessage): void;\r\n onWarning(message: LogMessage): void;\r\n onError(message: LogMessage): void;\r\n onAny(message: LogMessage): void;\r\n}\r\n\r\nexport interface LogMessage {\r\n source: string;\r\n error?: Error | ValidationResult;\r\n message: string;\r\n level: logLevel;\r\n}\r\n\r\nexport type logLevel = 'debug' | 'info' | 'warning' | 'error';\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: LogService.selector\r\n})\r\nexport class LogService {\r\n public static selector = \"logService\";\r\n constructor() {\r\n\r\n }\r\n\r\n private listeners: LogListener[] = [];\r\n public registerListner(listner: LogListener): IDisposable {\r\n this.listeners.push(listner);\r\n return () => this.listeners = this.listeners.filter(l => l != listner);\r\n }\r\n\r\n public debug(source:string, message:string, error?:Error) {\r\n this.listeners.forEach(l=>{\r\n var msg:LogMessage = {\r\n source:source,\r\n message:message,\r\n error:error,\r\n level:'debug'\r\n }\r\n l.onDebug(msg);\r\n l.onAny(msg);\r\n })\r\n }\r\n\r\n public info(source:string, message:string, error?:Error) {\r\n this.listeners.forEach(l=>{\r\n var msg:LogMessage = {\r\n source:source,\r\n message:message,\r\n error:error,\r\n level:'info'\r\n }\r\n l.onInfo(msg);\r\n l.onAny(msg);\r\n })\r\n }\r\n\r\n public warning(source:string, message:string, error?:Error) {\r\n this.listeners.forEach(l=>{\r\n var msg:LogMessage = {\r\n source:source,\r\n message:message,\r\n error:error,\r\n level:'warning'\r\n }\r\n l.onWarning(msg);\r\n l.onAny(msg);\r\n })\r\n }\r\n\r\n public error(source:string, message:string, error?:Error) {\r\n this.listeners.forEach(l=>{\r\n var msg:LogMessage = {\r\n source:source,\r\n message:message,\r\n error:error,\r\n level:'error'\r\n }\r\n l.onError(msg);\r\n l.onAny(msg);\r\n })\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\"\r\nimport { Injectable, Inject } from \"@fiqas/angular-utils\"\r\nimport { LogListener, LogMessage } from \"./logService\"\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: NgLogListener.selector\r\n})\r\nexport class NgLogListener implements LogListener {\r\n public static selector: string = \"ngLogListener\";\r\n constructor(\r\n @Inject('$log') private ngLogService: ng.ILogService\r\n ) {\r\n\r\n }\r\n public onDebug(message: LogMessage): void {\r\n this.ngLogService.debug(`${message.source}:${message.message}${(message.error ? ` error:${JSON.stringify(message.error)}` : \"\")}`);\r\n }\r\n public onInfo(message: LogMessage): void {\r\n this.ngLogService.info(`${message.source}:${message.message}${(message.error ? ` error:${JSON.stringify(message.error)}` : \"\")}`);\r\n }\r\n public onWarning(message: LogMessage): void {\r\n this.ngLogService.warn(`${message.source}:${message.message}${(message.error ? ` error:${JSON.stringify(message.error)}` : \"\")}`);\r\n }\r\n public onError(message: LogMessage): void {\r\n this.ngLogService.error(`${message.source}:${message.message}${(message.error ? ` error:${JSON.stringify(message.error)}` : \"\")}`);\r\n }\r\n public onAny(message: LogMessage): void {\r\n\r\n }\r\n}\r\n","import { HTTPMethod, ParsedResult } from \"../models/base\";\r\n\r\nexport class ServiceUtils {\r\n public static IsUnauthorizedResponse(error: any) {\r\n return error && error.response && error.response.status == 401;\r\n }\r\n}\r\n\r\nexport abstract class ServiceBase {\r\n constructor(\r\n protected $q: angular.IQService,\r\n private $http: angular.IHttpService\r\n ) {\r\n this.dontSetBearer();\r\n this.dontSetRoles();\r\n }\r\n public doSetRoles(headerSetter: (config: ng.IRequestConfig) => angular.IPromise) {\r\n this.RoleSetter = headerSetter;\r\n }\r\n public dontSetRoles(): void {\r\n this.RoleSetter = config => this.$q(resolve => resolve(config));\r\n }\r\n public doSetBearer(headerSetter: (config: ng.IRequestConfig) => angular.IPromise) {\r\n this.AuthenticationSetter = headerSetter;\r\n }\r\n public dontSetBearer(): void {\r\n this.AuthenticationSetter = config => this.$q(resolve => resolve(config));\r\n }\r\n protected performRequest(method: HTTPMethod, url: string, params: { [key: string]: any } = null, data: RequestType = null, headers: any = null, resolveOnReject: boolean = false): ng.IPromise {\r\n return this.internalPerformRequest(method, url, params, data, headers, false, resolveOnReject);\r\n }\r\n\r\n protected performRequestWithFullResponse(method: HTTPMethod, url: string, params: { [key: string]: any } = null, data: RequestType = null, headers: any = null, resolveOnReject: boolean = false): ng.IPromise> {\r\n return this.internalPerformRequest>(method, url, params, data, headers, true, resolveOnReject);\r\n }\r\n\r\n private internalPerformRequest(method: HTTPMethod, url: string, params: { [key: string]: any }, data: RequestType, headers: any, fullResponse: boolean, resolveOnReject: boolean): ng.IPromise {\r\n var config: angular.IRequestConfig = {\r\n method: method,\r\n url: url,\r\n params: params,\r\n data: data,\r\n headers: this.setHeaders(headers),\r\n transformResponse: this.transformResponse.bind(this),\r\n transformRequest: this.transformRequest.bind(this)\r\n };\r\n return this.$q((resolve: ng.IQResolveReject, reject: ng.IQResolveReject) => {\r\n this.AuthenticationSetter(config).then(c => this.RoleSetter(c).then(ac => {\r\n this.$http(ac)\r\n .then(\r\n resp => resolve(this.handleResponse(resp, fullResponse)),\r\n e => {\r\n var handled = this.handleError(e);\r\n if (handled !== true)\r\n reject(handled);\r\n else if (resolveOnReject)\r\n resolve({});\r\n })\r\n .catch(e => {\r\n var handled = this.handleError(e);\r\n if (handled !== true)\r\n reject(handled);\r\n else if (resolveOnReject)\r\n resolve({});\r\n });\r\n }))\r\n });\r\n }\r\n\r\n private AuthenticationSetter: (config: ng.IRequestConfig) => angular.IPromise\r\n private RoleSetter: (config: ng.IRequestConfig) => angular.IPromise\r\n\r\n private httpErrorInterceptors: ([number, ((args: ng.IHttpPromiseCallbackArg, result: ParsedResult) => boolean | any)])[] = [];\r\n\r\n protected addHttpErrorInterceptor(interceptor: (args: ng.IHttpPromiseCallbackArg, result: ParsedResult) => boolean | any, chainPosition: number = 100) {\r\n if (this.httpErrorInterceptors.some(x => x[0] == chainPosition)) {\r\n console.log(\"chainPosition in httpErrorInterceptors taken!\");\r\n return;\r\n }\r\n this.httpErrorInterceptors.push([chainPosition, interceptor]);\r\n }\r\n\r\n private handleError(error: ng.IHttpPromiseCallbackArg) {\r\n var result: ParsedResult = {};\r\n for (var interceptor of this.httpErrorInterceptors.sort((a, b) => a[0] - b[0]).map(i => i[1])) {\r\n var handled = interceptor(error, result);\r\n if (handled === true)\r\n return true;\r\n else if (handled !== false && handled !== undefined)\r\n return handled;\r\n }\r\n result.response = error;\r\n return result;\r\n }\r\n\r\n private httpResponseInterceptors: ([number, ((args: ng.IHttpPromiseCallbackArg) => boolean)])[] = [];\r\n\r\n protected addHttpResponseInterceptor(interceptor: (args: ng.IHttpPromiseCallbackArg) => boolean, priority: number = 100) {\r\n this.httpResponseInterceptors.push([priority, interceptor]);\r\n }\r\n\r\n private handleResponse(response: ng.IHttpPromiseCallbackArg, fullResponse: boolean = false): ResultType {\r\n for (var interceptor of this.httpResponseInterceptors.sort((a, b) => a[0] - b[0])) {\r\n if (interceptor[1](response) === true)\r\n return;\r\n }\r\n return fullResponse ? response : response.data;\r\n }\r\n\r\n private headerSetters: ([number, (headers: ng.IHttpRequestConfigHeaders) => ng.IHttpRequestConfigHeaders])[] = [];\r\n\r\n public addHeaderSetter(headerSetter: (headers: ng.IHttpRequestConfigHeaders) => ng.IHttpRequestConfigHeaders, priority: number = 100) {\r\n this.headerSetters.push([priority, headerSetter]);\r\n }\r\n\r\n public removeHeaderSetter(priority: number) {\r\n this.headerSetters = this.headerSetters.filter(hs => hs[0] != priority);\r\n }\r\n\r\n private setHeaders(headers: ng.IHttpRequestConfigHeaders): ng.IHttpRequestConfigHeaders {\r\n headers = headers || {};\r\n this.headerSetters.sort((a, b) => a[0] - b[0]).forEach(hs => headers = hs[1](headers));\r\n return headers;\r\n }\r\n\r\n private requestTransformers: ([number, (data: any, headersGetter: ng.IHttpHeadersGetter) => { data: any, continue: boolean }])[] = [];\r\n\r\n public addRequestTransformers(requestTransformer: (data: any, headersGetter: ng.IHttpHeadersGetter) => { data: any, continue: boolean }, priority: number = 100) {\r\n this.requestTransformers.push([priority, requestTransformer]);\r\n }\r\n\r\n private transformRequest(data: any, headersGetter: ng.IHttpHeadersGetter): any {\r\n for (var transformer of this.requestTransformers.sort((a, b) => a[0] - b[0])) {\r\n var res = transformer[1](data, headersGetter);\r\n data = res.data;\r\n if (!res.continue)\r\n break;\r\n }\r\n return data;\r\n }\r\n private responseTransformers: ([number, (data: any, headersGetter: ng.IHttpHeadersGetter, status: number) => { data: any, continue: boolean }])[] = [];\r\n\r\n public addResponseTransformer(responseTransformer: (data: any, headersGetter: ng.IHttpHeadersGetter, status: number) => { data: any, continue: boolean }, priority: number = 100) {\r\n this.responseTransformers.push([priority, responseTransformer]);\r\n }\r\n\r\n private transformResponse(data: any, headersGetter: ng.IHttpHeadersGetter, status: number): any {\r\n for (var transformer of this.responseTransformers.sort((a, b) => a[0] - b[0])) {\r\n var res = transformer[1](data, headersGetter, status);\r\n data = res.data;\r\n if (!res.continue)\r\n break;\r\n }\r\n return data;\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { ServiceCaseService } from \"./fiqassistApi/serviceCaseService\";\r\nimport * as Rx from \"rxjs\"\r\nimport { LogService } from \"./logService\";\r\nimport { SearchData, CompactServiceCase } from \"../models/serviceCase\";\r\nimport { CollectionResult } from \"../interfaces/iFqs\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: ServiceCaseProjectService.selector\r\n})\r\nexport class ServiceCaseProjectService {\r\n public static selector = \"serviceCaseProjectService\";\r\n\r\n constructor(\r\n @Inject() private serviceCaseService: ServiceCaseService,\r\n @Inject() private logService: LogService,\r\n ) {\r\n\r\n }\r\n private _currentSearchSubscription: Rx.Subscription;\r\n private get currentSearch(): Rx.Subscription {\r\n return this._currentSearchSubscription;\r\n }\r\n private set currentSearch(subscription: Rx.Subscription) {\r\n if (this._currentSearchSubscription) {\r\n this._currentSearchSubscription.unsubscribe();\r\n }\r\n this._currentSearchSubscription = subscription;\r\n }\r\n\r\n private _currentSubject: Rx.Subject>;\r\n private get currentSubject(): Rx.Subject> {\r\n return this._currentSubject;\r\n }\r\n\r\n private set currentSubject(subject: Rx.Subject>) {\r\n if (this._currentSubject) {\r\n this._currentSubject.complete();\r\n }\r\n this._currentSubject = subject;\r\n }\r\n\r\n private _currentResult: CollectionResult;\r\n public get CurrentResult(): CollectionResult {\r\n return this._currentResult;\r\n }\r\n\r\n public get CaseNumber() {\r\n return this.searching;\r\n }\r\n private searching = false;\r\n\r\n public Search(caseNumber: string, customers: any[], limit: number = 100, skip: number = 0, fullTree = false) {\r\n this._currentResult = null;\r\n var subject = new Rx.Subject>();\r\n this.searching = true;\r\n var subscription = Rx.Observable.fromPromise(\r\n this.serviceCaseService.AdvancedSearch((fullTree ? { includeProjectTree: true, caseNumber: caseNumber } : { includeNeighbour: true, caseNumber: caseNumber }) as SearchData, customers, limit, skip)\r\n ).subscribe({\r\n next: result => {\r\n this._currentResult = result;\r\n subject.next(this._currentResult);\r\n },\r\n error: error => {\r\n this.logService.error('ServiceCaseProjectService', 'Error while searching', error);\r\n subject.error(error);\r\n },\r\n complete: () => {\r\n this.searching = false;\r\n subject.complete();\r\n }\r\n });\r\n this.currentSearch = subscription;\r\n this.currentSubject = subject;\r\n return subject.asObservable();\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Inject, Injectable } from \"@fiqas/angular-utils\";\r\nimport { ServiceCaseService } from \"./fiqassistApi/serviceCaseService\";\r\nimport * as Rx from \"rxjs\"\r\nimport { LogService } from \"./logService\";\r\nimport { CompactServiceCase } from \"../models/serviceCase\";\r\nimport { User } from \"../models/user\";\r\nimport { CollectionResult } from \"../interfaces/iFqs\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: ServiceCaseSearchService.selector\r\n})\r\nexport class ServiceCaseSearchService {\r\n public static selector = \"serviceCaseSearchService\";\r\n\r\n constructor(\r\n @Inject() private serviceCaseService: ServiceCaseService,\r\n @Inject() private logService: LogService,\r\n ) {\r\n\r\n }\r\n private _currentSearchSubscription: Rx.Subscription;\r\n private get currentSearch(): Rx.Subscription {\r\n return this._currentSearchSubscription;\r\n }\r\n private set currentSearch(subscription: Rx.Subscription) {\r\n if (this._currentSearchSubscription) {\r\n this._currentSearchSubscription.unsubscribe();\r\n }\r\n this._currentSearchSubscription = subscription;\r\n }\r\n\r\n private _currentSubject: Rx.Subject>;\r\n private get currentSubject(): Rx.Subject> {\r\n return this._currentSubject;\r\n }\r\n\r\n private set currentSubject(subject: Rx.Subject>) {\r\n if (this._currentSubject) {\r\n this._currentSubject.complete();\r\n }\r\n this._currentSubject = subject;\r\n }\r\n\r\n private _currentResult: CollectionResult;\r\n public get CurrentResult(): CollectionResult {\r\n return this._currentResult;\r\n }\r\n\r\n public get Searching() {\r\n return this.searching;\r\n }\r\n private searching = false;\r\n\r\n public Search(searchString: string, customers: any[], limit: number, skip: number, user: User = null) {\r\n this._currentResult = null;\r\n var subject = new Rx.Subject>();\r\n this.searching = true;\r\n var subscription = Rx.Observable.fromPromise(\r\n this.serviceCaseService.FilteredSearch(searchString, customers, 100, 0, user ? { createdById: user.personId } : undefined)\r\n ).subscribe({\r\n next: result => {\r\n this._currentResult = result;\r\n if (result.count === 0) {\r\n var subscription = Rx.Observable.fromPromise(\r\n this.serviceCaseService.FilteredSearch(searchString, customers, 2, 0, user ? { createdById: user.personId, caseStatuses: ['cancelled', 'closed'] } : { caseStatuses: ['cancelled', 'closed'] })\r\n ).subscribe({\r\n next: result => {\r\n if (result.count <= 1) {\r\n subject.next(result);\r\n } else {\r\n subject.next(this._currentResult);\r\n }\r\n },\r\n error: error => {\r\n this.logService.error('ServiceCaseSearchService', 'Error while searching', error);\r\n subject.error(error);\r\n },\r\n complete: () => {\r\n this.searching = false;\r\n subject.complete();\r\n }\r\n });\r\n this.currentSearch = subscription;\r\n } else {\r\n subject.next(this._currentResult);\r\n }\r\n },\r\n error: error => {\r\n this.logService.error('ServiceCaseSearchService', 'Error while searching', error);\r\n subject.error(error);\r\n },\r\n complete: () => {\r\n this.searching = false;\r\n subject.complete();\r\n }\r\n });\r\n this.currentSearch = subscription;\r\n this.currentSubject = subject;\r\n return subject.asObservable();\r\n }\r\n}\r\n","import { FIQAssist } from \"../app\";\r\nimport { Injectable, Inject } from \"@fiqas/angular-utils\";\r\nimport { LogService } from \"./logService\";\r\n\r\n@Injectable({\r\n module: FIQAssist,\r\n selector: SessionService.selector\r\n})\r\n/**\r\n * Session class, stores values as JSON in local browser storage.\r\n */\r\nexport class SessionService {\r\n public static selector = \"Session\"\r\n\r\n private sessionprefix: string = \"Fiqassist.Session\";\r\n constructor(\r\n @Inject() private logService: LogService\r\n ) {\r\n\r\n }\r\n\r\n /**\r\n * Get a value by key.\r\n * @param {string} key Key of the value to get.\r\n * @returns T Item from session or null if not found.\r\n */\r\n public getValue(key: string): T {\r\n var item = this.retrieve(key);\r\n if (item != null)\r\n return item.value;\r\n\r\n return undefined;\r\n }\r\n\r\n private retrieve(key): Item {\r\n var item = sessionStorage.getItem(`${this.sessionprefix}.${key}`);\r\n if (item != null)\r\n return >JSON.parse(item);\r\n\r\n item = localStorage.getItem(`${this.sessionprefix}.${key}`);\r\n if (item != null)\r\n return >JSON.parse(item);\r\n\r\n return undefined;\r\n }\r\n\r\n private store(key: string, value: T, readonly: boolean, persistent: boolean): boolean {\r\n try {\r\n var item: Item = { value: value, readonly: readonly };\r\n var storage = persistent ? localStorage : sessionStorage;\r\n storage.setItem(`${this.sessionprefix}.${key}`, JSON.stringify(item));\r\n\r\n } catch (ex) {\r\n this.logService.info('Session', `item cannot be set for key ${key}, ${ex}`, ex);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Store a value in the session.\r\n * @param {string} key The key to store the value with.\r\n * @param {T} value The value to store.\r\n * @param {boolean=false} readonly Set value as readonly.\r\n * @returns boolean A boolean indicating if the value was stored successfully.\r\n */\r\n public setValue(key: string, value: T, readonly: boolean = false, persistent: boolean = true): boolean {\r\n var item = this.retrieve(key);\r\n if (item && item.readonly)\r\n throw new Error(`${key} is readonly and cannot be set`);\r\n\r\n return this.store(key, value, readonly, persistent);\r\n }\r\n\r\n /**\r\n * Clear a value by key, or all values if key is omitted.\r\n * @param {string} key Optional key of value to remove.\r\n */\r\n public clear(key?: string) {\r\n if (key) {\r\n localStorage.removeItem(`${this.sessionprefix}.${key}`);\r\n sessionStorage.removeItem(`${this.sessionprefix}.${key}`);\r\n } else {\r\n var items = [];\r\n for (var i = 0; i < localStorage.length; i++) {\r\n var k = localStorage.key(i);\r\n if (k.indexOf(this.sessionprefix) == 0)\r\n items.push(k)\r\n }\r\n items.forEach(item => localStorage.removeItem(item));\r\n\r\n items = [];\r\n for (var i = 0; i < sessionStorage.length; i++) {\r\n var k = sessionStorage.key(i);\r\n if (k.indexOf(this.sessionprefix) == 0)\r\n items.push(k)\r\n }\r\n items.forEach(item => sessionStorage.removeItem(item));\r\n }\r\n }\r\n}\r\n\r\ninterface Item {\r\n readonly: boolean;\r\n value: T;\r\n}"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvQGZpcWFzL2FuZ3VsYXItY29tcG9uZW50cy9idWlsZC9kaXJlY3RpdmVzL2RpcmVjdGl2ZXMvZm9jdXMudHMiLCJub2RlX21vZHVsZXMvQGZpcWFzL2FuZ3VsYXItY29tcG9uZW50cy9idWlsZC9kaXJlY3RpdmVzL2RpcmVjdGl2ZXMvdGltZUZvcm1hdHRlci50cyIsIm5vZGVfbW9kdWxlcy9AZmlxYXMvYW5ndWxhci1jb21wb25lbnRzL2J1aWxkL2luZGV4LnRzIiwibm9kZV9tb2R1bGVzL0BmaXFhcy9hbmd1bGFyLWNvbXBvbmVudHMvbm9kZV9tb2R1bGVzL0BmaXFhcy91dGlscy9idWlsZC9kYXRldGltZS50cyIsIm5vZGVfbW9kdWxlcy9AZmlxYXMvYW5ndWxhci1jb21wb25lbnRzL25vZGVfbW9kdWxlcy9AZmlxYXMvdXRpbHMvYnVpbGQvZGVjb3JhdG9ycy50cyIsIm5vZGVfbW9kdWxlcy9AZmlxYXMvYW5ndWxhci1jb21wb25lbnRzL25vZGVfbW9kdWxlcy9AZmlxYXMvdXRpbHMvYnVpbGQvZ2VuZXJhbC50cyIsIm5vZGVfbW9kdWxlcy9AZmlxYXMvYW5ndWxhci1jb21wb25lbnRzL25vZGVfbW9kdWxlcy9AZmlxYXMvdXRpbHMvYnVpbGQvaW5kZXgudHMiLCJub2RlX21vZHVsZXMvQGZpcWFzL2FuZ3VsYXItY29tcG9uZW50cy9ub2RlX21vZHVsZXMvQGZpcWFzL3V0aWxzL2J1aWxkL2tleWNvZGVzLnRzIiwibm9kZV9tb2R1bGVzL0BmaXFhcy9hbmd1bGFyLXV0aWxzL2J1aWxkL2RlY29yYXRvcnMudHMiLCJub2RlX21vZHVsZXMvQGZpcWFzL2FuZ3VsYXItdXRpbHMvYnVpbGQvaW5kZXgudHMiLCJub2RlX21vZHVsZXMvQGZpcWFzL2FuZ3VsYXItdXRpbHMvYnVpbGQvbW9kdWxlLnRzIiwibm9kZV9tb2R1bGVzL0BmaXFhcy9hbmd1bGFyLXV0aWxzL2J1aWxkL3V0aWxzLnRzIiwibm9kZV9tb2R1bGVzL0BmaXFhcy9uZ2NvbXBvbmVudHJvdXRlci9idWlsZC9hbmd1bGFyXzFfcm91dGVyLmpzIiwibm9kZV9tb2R1bGVzL0BmaXFhcy9uZ2NvbXBvbmVudHJvdXRlci9idWlsZC9kZWNvcmF0b3JzLnRzIiwibm9kZV9tb2R1bGVzL0BmaXFhcy9uZ2NvbXBvbmVudHJvdXRlci9idWlsZC9pbmRleC50cyIsIm5vZGVfbW9kdWxlcy9AZmlxYXMvdXRpbHMvYnVpbGQvZGF0ZXRpbWUudHMiLCJub2RlX21vZHVsZXMvQGZpcWFzL3V0aWxzL2J1aWxkL2RlY29yYXRvcnMudHMiLCJub2RlX21vZHVsZXMvQGZpcWFzL3V0aWxzL2J1aWxkL2dlbmVyYWwudHMiLCJub2RlX21vZHVsZXMvQGZpcWFzL3V0aWxzL2J1aWxkL2luZGV4LnRzIiwibm9kZV9tb2R1bGVzL0BmaXFhcy91dGlscy9idWlsZC9rZXljb2Rlcy50cyIsIm5vZGVfbW9kdWxlcy9AZmlxYXMvdXRpbHMvYnVpbGQvbnVtYmVyLnRzIiwibm9kZV9tb2R1bGVzL0BpYW1hZGFtam93ZXR0L2FuZ3VsYXItY2xpY2stb3V0c2lkZS9jbGlja291dHNpZGUuZGlyZWN0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2FuZ3VsYXItZ29vZ2xlLWNoYXJ0L25nLWdvb2dsZS1jaGFydC5qcyIsIm5vZGVfbW9kdWxlcy9hbmd1bGFyLWhvdGtleXMvYnVpbGQvaG90a2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9hbmd1bGFyLWpzLXhsc3gvYW5ndWxhci1qcy14bHN4LmpzIiwibm9kZV9tb2R1bGVzL2FuZ3VsYXItbWVzc2FnZXMvYW5ndWxhci1tZXNzYWdlcy5qcyIsIm5vZGVfbW9kdWxlcy9hbmd1bGFyLW1lc3NhZ2VzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FuZ3VsYXItcmVzaXphYmxlL3NyYy9hbmd1bGFyLXJlc2l6YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9hbmd1bGFyLXNhbml0aXplL2FuZ3VsYXItc2FuaXRpemUuanMiLCJub2RlX21vZHVsZXMvYW5ndWxhci1zYW5pdGl6ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbmd1bGFyLXVpLWJvb3RzdHJhcC9kaXN0L3VpLWJvb3RzdHJhcC10cGxzLmpzIiwibm9kZV9tb2R1bGVzL2FuZ3VsYXItdWktYm9vdHN0cmFwL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FuZ3VsYXItdWktdGlueW1jZS9zcmMvdGlueW1jZS5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3Nlci1yZXNvbHZlL2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2ZpbGUtc2F2ZXIvZGlzdC9GaWxlU2F2ZXIubWluLmpzIiwibm9kZV9tb2R1bGVzL21pbWUtZGIvZGIuanNvbiIsIm5vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGF0aC1icm93c2VyaWZ5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL0FzeW5jU3ViamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL0JlaGF2aW9yU3ViamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL0lubmVyU3Vic2NyaWJlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL05vdGlmaWNhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL09ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9PYnNlcnZlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL091dGVyU3Vic2NyaWJlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL1JlcGxheVN1YmplY3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9SeC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL1NjaGVkdWxlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL1N1YmplY3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9TdWJqZWN0U3Vic2NyaXB0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvU3Vic2NyaWJlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL1N1YnNjcmlwdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL2JpbmRDYWxsYmFjay5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL2JpbmROb2RlQ2FsbGJhY2suanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29ic2VydmFibGUvY29uY2F0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29ic2VydmFibGUvZGVmZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS9kb20vYWpheC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL2RvbS93ZWJTb2NrZXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL2ZvcmtKb2luLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29ic2VydmFibGUvZnJvbS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL2Zyb21FdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tUHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL2dlbmVyYXRlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29ic2VydmFibGUvaWYuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS9pbnRlcnZhbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29ic2VydmFibGUvbmV2ZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS9vZi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL29uRXJyb3JSZXN1bWVOZXh0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29ic2VydmFibGUvcGFpcnMuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS9yYWNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29ic2VydmFibGUvcmFuZ2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS90aHJvdy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vYnNlcnZhYmxlL3RpbWVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29ic2VydmFibGUvdXNpbmcuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb2JzZXJ2YWJsZS96aXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvYXVkaXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvYXVkaXRUaW1lLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2J1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9idWZmZXJDb3VudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9idWZmZXJUaW1lLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2J1ZmZlclRvZ2dsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9idWZmZXJXaGVuLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2NhdGNoLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2NvbWJpbmVBbGwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvY29tYmluZUxhdGVzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvY29uY2F0QWxsLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2NvbmNhdE1hcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9jb25jYXRNYXBUby5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9jb3VudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9kZWJvdW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9kZWJvdW5jZVRpbWUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZGVmYXVsdElmRW1wdHkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZGVsYXkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZGVsYXlXaGVuLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2RlbWF0ZXJpYWxpemUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZGlzdGluY3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZGlzdGluY3RVbnRpbENoYW5nZWQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZGlzdGluY3RVbnRpbEtleUNoYW5nZWQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZG8uanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZWxlbWVudEF0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2V2ZXJ5LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2V4aGF1c3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZXhoYXVzdE1hcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9leHBhbmQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2ZpbmFsbHkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZmluZC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9maW5kSW5kZXguanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZmlyc3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvZ3JvdXBCeS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9pZ25vcmVFbGVtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9pc0VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL2xhc3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvbGV0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL21hcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9tYXBUby5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9tYXRlcmlhbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9tYXguanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VBbGwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXBUby5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9tZXJnZVNjYW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvbWluLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL211bHRpY2FzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9vYnNlcnZlT24uanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3Ivb25FcnJvclJlc3VtZU5leHQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvcGFpcndpc2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvcGFydGl0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3BsdWNrLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3B1Ymxpc2guanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvcHVibGlzaEJlaGF2aW9yLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3B1Ymxpc2hMYXN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3B1Ymxpc2hSZXBsYXkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvcmFjZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9yZWR1Y2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvcmVwZWF0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3JlcGVhdFdoZW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvcmV0cnkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvcmV0cnlXaGVuLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3NhbXBsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9zYW1wbGVUaW1lLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3NjYW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3Ivc2VxdWVuY2VFcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9zaGFyZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9zaGFyZVJlcGxheS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9zaW5nbGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3Ivc2tpcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9za2lwTGFzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9za2lwVW50aWwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3Ivc2tpcFdoaWxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3N0YXJ0V2l0aC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9zdWJzY3JpYmVPbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci9zd2l0Y2guanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3Ivc3dpdGNoTWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3N3aXRjaE1hcFRvLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3Rha2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvdGFrZUxhc3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvdGFrZVVudGlsLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3Rha2VXaGlsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci90aHJvdHRsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci90aHJvdHRsZVRpbWUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvdGltZUludGVydmFsLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3RpbWVvdXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvdGltZW91dFdpdGguanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvdGltZXN0YW1wLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3RvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9hZGQvb3BlcmF0b3IvdG9Qcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3dpbmRvdy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci93aW5kb3dDb3VudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci93aW5kb3dUaW1lLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3dpbmRvd1RvZ2dsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci93aW5kb3dXaGVuLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3dpdGhMYXRlc3RGcm9tLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvYWRkL29wZXJhdG9yL3ppcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL2FkZC9vcGVyYXRvci96aXBBbGwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL0FycmF5TGlrZU9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL0FycmF5T2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvQm91bmRDYWxsYmFja09ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL0JvdW5kTm9kZUNhbGxiYWNrT2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9EZWZlck9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL0VtcHR5T2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvRXJyb3JPYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9Gb3JrSm9pbk9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL0Zyb21FdmVudE9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL0Zyb21FdmVudFBhdHRlcm5PYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9Gcm9tT2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvR2VuZXJhdGVPYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9JZk9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL0ludGVydmFsT2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvSXRlcmF0b3JPYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9OZXZlck9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL1BhaXJzT2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvUHJvbWlzZU9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL1JhbmdlT2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvU2NhbGFyT2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvU3Vic2NyaWJlT25PYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9UaW1lck9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL1VzaW5nT2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL2RlZmVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9kb20vQWpheE9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL2RvbS9XZWJTb2NrZXRTdWJqZWN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9kb20vYWpheC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvZG9tL3dlYlNvY2tldC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvZW1wdHkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL2ZvcmtKb2luLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9mcm9tLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9mcm9tRXZlbnQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL2Zyb21Qcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvaWYuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL2ludGVydmFsLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvbmV2ZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL29mLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS9vbkVycm9yUmVzdW1lTmV4dC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvcGFpcnMuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL3JhY2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL3JhbmdlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS90aHJvdy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29ic2VydmFibGUvdGltZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vYnNlcnZhYmxlL3VzaW5nLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb2JzZXJ2YWJsZS96aXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9hdWRpdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2F1ZGl0VGltZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2J1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2J1ZmZlckNvdW50LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvYnVmZmVyVGltZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2J1ZmZlclRvZ2dsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2J1ZmZlcldoZW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9jYXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2NvbWJpbmVBbGwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9jb21iaW5lTGF0ZXN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvY29uY2F0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvY29uY2F0QWxsLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvY29uY2F0TWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvY29uY2F0TWFwVG8uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9jb3VudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvZGVib3VuY2VUaW1lLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvZGVmYXVsdElmRW1wdHkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9kZWxheS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2RlbGF5V2hlbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2RlbWF0ZXJpYWxpemUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9kaXN0aW5jdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvZGlzdGluY3RVbnRpbEtleUNoYW5nZWQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9kby5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2VsZW1lbnRBdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2V2ZXJ5LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvZXhoYXVzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2V4aGF1c3RNYXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9leHBhbmQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9maW5hbGx5LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvZmluZC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2ZpbmRJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2ZpcnN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvZ3JvdXBCeS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2lnbm9yZUVsZW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvaXNFbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL2xhc3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9sZXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9tYXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9tYXBUby5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL21hdGVyaWFsaXplLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvbWF4LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9tZXJnZUFsbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL21lcmdlTWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvbWVyZ2VNYXBUby5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL21lcmdlU2Nhbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL211bHRpY2FzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL29ic2VydmVPbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL29uRXJyb3JSZXN1bWVOZXh0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvcGFpcndpc2UuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9wYXJ0aXRpb24uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9wbHVjay5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3B1Ymxpc2guanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9wdWJsaXNoQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9wdWJsaXNoTGFzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3B1Ymxpc2hSZXBsYXkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9yYWNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvcmVkdWNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvcmVwZWF0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvcmVwZWF0V2hlbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3JldHJ5LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvcmV0cnlXaGVuLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3Ivc2FtcGxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3Ivc2FtcGxlVGltZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3NjYW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9zZXF1ZW5jZUVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3Ivc2hhcmUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9zaGFyZVJlcGxheS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3NpbmdsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3NraXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci9za2lwTGFzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3NraXBVbnRpbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3NraXBXaGlsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3N0YXJ0V2l0aC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3N1YnNjcmliZU9uLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3Ivc3dpdGNoLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3Ivc3dpdGNoTWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3Ivc3dpdGNoTWFwVG8uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci90YWtlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3IvdGFrZUxhc3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci90YWtlVW50aWwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci90YWtlV2hpbGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci90aHJvdHRsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3Rocm90dGxlVGltZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3RpbWVJbnRlcnZhbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3RpbWVvdXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci90aW1lb3V0V2l0aC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3RpbWVzdGFtcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3RvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci93aW5kb3cuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci93aW5kb3dDb3VudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9yL3dpbmRvd1RpbWUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci93aW5kb3dUb2dnbGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci93aW5kb3dXaGVuLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3Ivd2l0aExhdGVzdEZyb20uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci96aXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvci96aXBBbGwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvYXVkaXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvYXVkaXRUaW1lLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2J1ZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2J1ZmZlclRvZ2dsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9idWZmZXJXaGVuLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2NhdGNoRXJyb3IuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvY29tYmluZUFsbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2NvbmNhdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9jb25jYXRBbGwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvY29uY2F0TWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2NvdW50LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2RlYm91bmNlVGltZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9kZWxheS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9kZWxheVdoZW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9kaXN0aW5jdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsQ2hhbmdlZC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9lbGVtZW50QXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvZXZlcnkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvZXhoYXVzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2V4cGFuZC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvZmluYWxpemUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvZmluZC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9maW5kSW5kZXguanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvZmlyc3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvZ3JvdXBCeS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9pZ25vcmVFbGVtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9pc0VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL2xhc3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvbWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL21hcFRvLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL21heC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9tZXJnZUFsbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9tZXJnZU1hcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9tZXJnZU1hcFRvLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL21lcmdlU2Nhbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9taW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9wYWlyd2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9wYXJ0aXRpb24uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvcGx1Y2suanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvcHVibGlzaC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3IuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvcHVibGlzaExhc3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvcHVibGlzaFJlcGxheS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9yYWNlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3JlZHVjZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9yZWZDb3VudC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9yZXBlYXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvcmVwZWF0V2hlbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9yZXRyeS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9yZXRyeVdoZW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvc2FtcGxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3NhbXBsZVRpbWUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvc2Nhbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9zZXF1ZW5jZUVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3NoYXJlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3NpbmdsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9za2lwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3NraXBMYXN0LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3NraXBVbnRpbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9za2lwV2hpbGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvc3RhcnRXaXRoLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3N1YnNjcmliZU9uLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy9zd2l0Y2hNYXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvdGFrZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy90YWtlTGFzdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy90YWtlVW50aWwuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvdGFrZVdoaWxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3RhcC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy90aHJvdHRsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL29wZXJhdG9ycy90aHJvdHRsZVRpbWUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvdGltZUludGVydmFsLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3RpbWVvdXQuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvdGltZXN0YW1wLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3RvQXJyYXkuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3dpbmRvd0NvdW50LmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3dpbmRvd1RpbWUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvd2luZG93VG9nZ2xlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3dpbmRvd1doZW4uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvd2l0aExhdGVzdEZyb20uanMiLCJub2RlX21vZHVsZXMvcnhqcy9vcGVyYXRvcnMvemlwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvb3BlcmF0b3JzL3ppcEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3NjaGVkdWxlci9BY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcnhqcy9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVBY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcnhqcy9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy9zY2hlZHVsZXIvQXNhcEFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3NjaGVkdWxlci9Bc2FwU2NoZWR1bGVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvc2NoZWR1bGVyL0FzeW5jQWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvc2NoZWR1bGVyL2FzYXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy9zY2hlZHVsZXIvYXN5bmMuanMiLCJub2RlX21vZHVsZXMvcnhqcy9zY2hlZHVsZXIvcXVldWUuanMiLCJub2RlX21vZHVsZXMvcnhqcy9zeW1ib2wvaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvcnhqcy9zeW1ib2wvb2JzZXJ2YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3N5bWJvbC9yeFN1YnNjcmliZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy90ZXN0aW5nL0NvbGRPYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdGVzdGluZy9Ib3RPYnNlcnZhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdGVzdGluZy9TdWJzY3JpcHRpb25Mb2cuanMiLCJub2RlX21vZHVsZXMvcnhqcy90ZXN0aW5nL1N1YnNjcmlwdGlvbkxvZ2dhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdGVzdGluZy9UZXN0U2NoZWR1bGVyLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdXRpbC9BbmltYXRpb25GcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL0VtcHR5RXJyb3IuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL0Zhc3RNYXAuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL0ltbWVkaWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvTWFwLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdXRpbC9NYXBQb2x5ZmlsbC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL1NldC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvVGltZW91dEVycm9yLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdXRpbC9hcHBseU1peGlucy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdXRpbC9lcnJvck9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvaWRlbnRpdHkuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL2lzQXJyYXkuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL2lzQXJyYXlMaWtlLmpzIiwibm9kZV9tb2R1bGVzL3J4anMvdXRpbC9pc0RhdGUuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL2lzRnVuY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL2lzTnVtZXJpYy5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvaXNPYmplY3QuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL2lzUHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvaXNTY2hlZHVsZXIuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL25vb3AuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL25vdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvcGlwZS5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvcm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQuanMiLCJub2RlX21vZHVsZXMvcnhqcy91dGlsL3RvU3Vic2NyaWJlci5qcyIsIm5vZGVfbW9kdWxlcy9yeGpzL3V0aWwvdHJ5Q2F0Y2guanMiLCJub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy90aW55bWNlL3RpbnltY2UuanMiLCJub2RlX21vZHVsZXMveGxzeC9kaXN0L2NwZXhjZWwuanMiLCJub2RlX21vZHVsZXMveGxzeC9qc3ppcC5qcyIsIm5vZGVfbW9kdWxlcy94bHN4L3hsc3guanMiLCJ0cy9hcHAudHMiLCJ0cy9jb21wb25lbnRzL2Fib3V0L2Fib3V0LnRzIiwidHMvY29tcG9uZW50cy9hcHBsaWNhdGlvbi50cyIsInRzL2NvbXBvbmVudHMvYXV0aGVudGljYXRpb24vQ2hhbmdlUGFzc3dvcmQudHMiLCJ0cy9jb21wb25lbnRzL2F1dGhlbnRpY2F0aW9uL0ZvcmdvdFBhc3N3b3JkLnRzIiwidHMvY29tcG9uZW50cy9hdXRoZW50aWNhdGlvbi9OZXdQYXNzd29yZC50cyIsInRzL2NvbXBvbmVudHMvYXV0aGVudGljYXRpb24vbG9naW4udHMiLCJ0cy9jb21wb25lbnRzL2F1dGhlbnRpY2F0aW9uL2xvZ291dC50cyIsInRzL2NvbXBvbmVudHMvY29tcGxhaW50L2NvbXBsYWludEJhc2UudHMiLCJ0cy9jb21wb25lbnRzL2NvbXBsYWludC9jb21wbGFpbnRFbnRyeS50cyIsInRzL2NvbXBvbmVudHMvY29tcGxpbWVudC9jb21wbGltZW50QmFzZS50cyIsInRzL2NvbXBvbmVudHMvY29tcGxpbWVudC9jb21wbGltZW50RW50cnkudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvY2FzZVR5cGVEcm9wZG93bkJveC50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9jb250cm9sQmFzZS50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9jb252ZXJzYXRpb24udHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvY29udmVyc2F0aW9uZW50cnkudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvY3VzdG9tZXJDaGVja2xpc3RDb21iby50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9jdXN0b21lckRyb3Bkb3duQm94LnRzIiwidHMvY29tcG9uZW50cy9nZW5lcmFsL2R1cmF0aW9uUGFuZWwudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvZW52aXJvbm1lbnRDaGVja2xpc3RDb21iby50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9lbnZpcm9ubWVudERyb3Bkb3duQm94LnRzIiwidHMvY29tcG9uZW50cy9nZW5lcmFsL2ZpbGVEcm9wZG93bkxpc3QudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvZmlsZVVwbG9hZGVyLnRzIiwidHMvY29tcG9uZW50cy9nZW5lcmFsL21hbmFnZVdhdGNoZXJzLnRzIiwidHMvY29tcG9uZW50cy9nZW5lcmFsL3BlcnNvblR5cGVBaGVhZC50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9wcmlvcml0eUNoZWNrbGlzdENvbWJvLnRzIiwidHMvY29tcG9uZW50cy9nZW5lcmFsL3ByaW9yaXR5RHJvcGRvd25Cb3gudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvcHJpb3JpdHliYXIudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvcmVjZW50Q2FzZXMudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvcmljaHRleHRlZGl0b3IudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvcm9sZXRvZ2dsZXN3aXRjaC50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9zYXZlZGlhbG9nLnRzIiwidHMvY29tcG9uZW50cy9nZW5lcmFsL3NlcnZpY2VDYXNlQmFzZS50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9zZXJ2aWNlQ2FzZUVkaXQudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvc2VydmljZWNhc2V0YWJsZS50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9zZXZlcml0eUFzc2Vzc21lbnQudHMiLCJ0cy9jb21wb25lbnRzL2dlbmVyYWwvc2V2ZXJpdHlDaGVja2xpc3RDb21iby50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9zZXZlcml0eURyb3Bkb3duQm94LnRzIiwidHMvY29tcG9uZW50cy9nZW5lcmFsL3NldmVyaXR5SWNvbi50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9zZXZlcml0eWJhci50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9zdGF0dXNDaGVja2xpc3RDb21iby50cyIsInRzL2NvbXBvbmVudHMvZ2VuZXJhbC9zdGF0dXNidXR0b25zLnRzIiwidHMvY29tcG9uZW50cy9ob21lLnRzIiwidHMvY29tcG9uZW50cy9tYWlubWVudS50cyIsInRzL2NvbXBvbmVudHMvb3RoZXIvb3RoZXIudHMiLCJ0cy9jb21wb25lbnRzL3Byb2JsZW0vcHJvYmxlbUJhc2UudHMiLCJ0cy9jb21wb25lbnRzL3Byb2JsZW0vcHJvYmxlbUVkaXQudHMiLCJ0cy9jb21wb25lbnRzL3Byb2JsZW0vcHJvYmxlbUVudHJ5LnRzIiwidHMvY29tcG9uZW50cy9yZXBvcnRzL3JlcG9ydHMudHMiLCJ0cy9jb21wb25lbnRzL3JlcXVlc3QvcmVxdWVzdEJhc2UudHMiLCJ0cy9jb21wb25lbnRzL3JlcXVlc3QvcmVxdWVzdEVkaXQudHMiLCJ0cy9jb21wb25lbnRzL3JlcXVlc3QvcmVxdWVzdEVudHJ5LnRzIiwidHMvY29tcG9uZW50cy9zZWFyY2gvcHJvamVjdFNlYXJjaC50cyIsInRzL2NvbXBvbmVudHMvc2VhcmNoL3Byb2plY3RUYWIudHMiLCJ0cy9jb21wb25lbnRzL3NlYXJjaC9zZWFyY2gudHMiLCJ0cy9jb21wb25lbnRzL3NlYXJjaC9zZWFyY2h0YWIudHMiLCJ0cy9jb21wb25lbnRzL3NlYXJjaC9zaW1wbGVTZWFyY2gudHMiLCJ0cy9jb25maWcudHMiLCJ0cy9jb25zdGFudHMudHMiLCJ0cy9jb250cm9scy9jaGVja2xpc3QudHMiLCJ0cy9jb250cm9scy9jaGVja2xpc3Rjb21iby50cyIsInRzL2NvbnRyb2xzL2RhdGF0YWJsZS50cyIsInRzL2NvbnRyb2xzL2RhdGV0aW1lYm94LnRzIiwidHMvY29udHJvbHMvZHJvcGRvd25ib3gudHMiLCJ0cy9jb250cm9scy9kcm9wZG93bmxpc3QudHMiLCJ0cy9jb250cm9scy9lZGl0b3IvaW1hZ2VwbHVnaW4udHMiLCJ0cy9jb250cm9scy9lZGl0b3IvcGFzdGVwbHVnaW4udHMiLCJ0cy9jb250cm9scy9lZGl0b3IvdGV4dGVkaXRvci50cyIsInRzL2NvbnRyb2xzL2VkaXRvci90aGVtZS50cyIsInRzL2NvbnRyb2xzL2ZxYXV0b3NpemV0ZXh0YXJlYS50cyIsInRzL2NvbnRyb2xzL2ZxZmlsZWRyb3AudHMiLCJ0cy9jb250cm9scy9mcXRleHRhcmVhLnRzIiwidHMvY29udHJvbHMvaW5saW5ldGV4dGVkaXRvci50cyIsInRzL2NvbnRyb2xzL251bWJlcmVkaXRib3gudHMiLCJ0cy9jb250cm9scy9wcm9jZXNzaW5nSW5kaWNhdG9yLnRzIiwidHMvY29udHJvbHMvcHVzaGJ1dHRvbi50cyIsInRzL2NvbnRyb2xzL3B1c2hpY29uLnRzIiwidHMvY29udHJvbHMvcmFkaW9iYXIudHMiLCJ0cy9jb250cm9scy9yYWRpb2J1dHRvbnMudHMiLCJ0cy9jb250cm9scy9yb29tZGl2aWRlci50cyIsInRzL2NvbnRyb2xzL3Njb3JlYm94LnRzIiwidHMvY29udHJvbHMvc2VjdGlvbi50cyIsInRzL2NvbnRyb2xzL3RleHRlZGl0Ym94LnRzIiwidHMvY29udHJvbHMvdG9nZ2xlc3dpdGNoLnRzIiwidHMvZGlyZWN0aXZlcy9hcHBsaWNhdGlvblNldHRpbmcudHMiLCJ0cy9kaXJlY3RpdmVzL2Jyb2FkY2FzdC1zaXplLnRzIiwidHMvZGlyZWN0aXZlcy9taW4tbWF4LWRhdGUudHMiLCJ0cy9kaXJlY3RpdmVzL29ubHktbnVtZXJpYy50cyIsInRzL2RpcmVjdGl2ZXMvd2F0Y2gtc2l6ZS50cyIsInRzL2ZpbHRlcnMvVHJhbnNsYXRpb24udHMiLCJ0cy9maWx0ZXJzL2ZpcnN0Y2FwaXRhbC50cyIsInRzL2ZpbHRlcnMvaHRtbHRydXN0ZWQudHMiLCJ0cy9maWx0ZXJzL2lzb2RhdGUudHMiLCJ0cy9maWx0ZXJzL2xpbmVmZWVkdG9icmVhay50cyIsInRzL2ludGVyZmFjZXMvSUxpdGVFdmVudC50cyIsInRzL2ludGVyZmFjZXMvaUZxcy50cyIsInRzL2ludGVyZmFjZXMvaUxpdGVFdmVudC50cyIsInRzL21vZGVscy9jb21wbGFpbnQudHMiLCJ0cy9tb2RlbHMvY29tcGxpbWVudC50cyIsInRzL21vZGVscy9maWxlLnRzIiwidHMvbW9kZWxzL3BlcnNvbi50cyIsInRzL21vZGVscy9yZWNvcmRIaXN0b3J5LnRzIiwidHMvbW9kZWxzL3JlY29yZFJlcG9ydC50cyIsInRzL21vZGVscy9zZXJ2aWNlQ2FzZS50cyIsInRzL3NlcnZpY2VzL0lzUHJvY2Vzc2luZ1NlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9UcmFuc2xhdGlvblNlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbkFwaVNlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvblNlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZS50cyIsInRzL3NlcnZpY2VzL2NhY2hlLnRzIiwidHMvc2VydmljZXMvZGlhbG9nU2VydmljZS50cyIsInRzL3NlcnZpY2VzL2V4cG9ydFRvRXhjZWxTZXJ2aWNlLnRzIiwidHMvc2VydmljZXMvZmlsZVJlYWRlclNlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvRmlsZVNlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvZmlxYXNzaXN0QXBpU2VydmljZUJhc2UudHMiLCJ0cy9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvZmlxYXNzaXN0U2VydmljZS50cyIsInRzL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9ob21lU2VydmljZS50cyIsInRzL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9yZXBvcnRTZXJ2aWNlLnRzIiwidHMvc2VydmljZXMvZmlxYXNzaXN0QXBpL3NlcnZpY2VDYXNlU2VydmljZS50cyIsInRzL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS91c2VyU2VydmljZS50cyIsInRzL3NlcnZpY2VzL2Zxc1NlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9pc1Byb2Nlc3NpbmdTZXJ2aWNlLnRzIiwidHMvc2VydmljZXMvbG9nU2VydmljZS50cyIsInRzL3NlcnZpY2VzL25nTG9nTGlzdGVuZXIudHMiLCJ0cy9zZXJ2aWNlcy9zZXJ2aWNlQmFzZS50cyIsInRzL3NlcnZpY2VzL3NlcnZpY2VDYXNlUHJvamVjdFNlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9zZXJ2aWNlQ2FzZVNlYXJjaFNlcnZpY2UudHMiLCJ0cy9zZXJ2aWNlcy9zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUEsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQUViLGtDQUF3QztBQUN4QyxzREFBdUQ7QUFDdkQsaUNBQW1DO0FBTW5DLElBQWEsVUFBVTtJQUNuQixvQkFBeUMsUUFBaUM7UUFBakMsYUFBUSxHQUFSLFFBQVEsQ0FBeUI7SUFFMUUsQ0FBQztJQUNELHlCQUFJLEdBQUosVUFBSyxNQUFzQixFQUFFLEtBQStCLEVBQUUsS0FBMEI7UUFDcEYsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQU0sT0FBQSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxF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LE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlHLENBQUMsQ0FBQTtBQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFPLEVBQUUsQ0FBTztJQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUE7QUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRztJQUN6QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2IsQ0FBQyxDQUFBO0FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBc0IsS0FBVztJQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFBO0FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBc0IsS0FBVztJQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFBO0FB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O1FBQ1gsUUFBUSxDQUFDLEVBQUU7UUFDWCxRQUFRLENBQUMsRUFBRTtRQUNYLFFBQVEsQ0FBQyxFQUFFO1FBQ1gsUUFBUSxDQUFDLEVBQUU7UUFDWCxRQUFRLENBQUMsRUFBRTtRQUNYLFFBQVEsQ0FBQyxFQUFFO1FBQ1gsUUFBUSxDQUFDLEVBQUU7UUFDWCxRQUFRLENBQUMsRUFBRTtRQUNYLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO1FBQ2hCLFFBQVEsQ0FBQyxPQUFPO0tBQ25CLENBQUM7SUFDWSxjQUFLLEdBQUc7UUFDbEIsUUFBUSxDQUFDLENBQUM7UUFDVixRQUFRLENBQUMsQ0FBQztRQUNWLFFBQVEsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxDQUFDLENBQUM7UUFDVixRQUFRLENBQUMsQ0FBQztRQUNWLFFBQVEsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxDQUFDLENBQUM7UUFDVixRQUFRLENBQUMsQ0FBQztRQUNWLFFBQVEsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxDQUFDLENBQUM7UUFDVixRQUFRLENBQUMsQ0FBQztRQUNWLFFBQVEsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxDQUFDLENBQUM7UUFDVixRQUFRLENBQUMsQ0FBQztRQUNWLFFBQVEsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxDQUFDLENBQUM7UUFDVixRQUFRLENBQUMsQ0FBQztRQUNWLFFBQVEsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxDQUFDLENBQUM7UUFDVixRQUFRLENBQUMsQ0FBQztRQUNWLFFBQVEsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxDQUFDLENBQUM7UUFDVixRQUFRLENBQUMsQ0FBQztRQUNWLFFBQVEsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxDQUFDLENBQUM7UUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvaUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3bkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3B1QkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcHZCQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9sUEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTs7O0FDQUE7QUFDQTtBQUNBOzs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3YwUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDOVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6YUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDelBBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMzamdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzE5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNXhSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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akMsQ0FBQztJQUNMLENBQUM7SUFFTSxpREFBdUIsR0FBOUIsVUFBK0IsS0FBVTtRQUNyQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNmLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdEIsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFFTSxpREFBdUIsR0FBOUIsVUFBK0IsS0FBVTtRQUNyQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNmLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdEIsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFFTSxpREFBdUIsR0FBOUIsVUFBK0IsS0FBVTtRQUNyQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNmLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdEIsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFD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QUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUU5RSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUMvRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUVoRixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUM3RSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtTQUMvRSxDQUFDO1FBRU0sY0FBUyxHQUF5RjtZQUN0RyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUVwRixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUM5RSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUU3RSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxF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d0JBQ3hELEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1RCxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUQsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzFELEtBQUssQ0FBQztvQkFDUCxLQUFLLENBQUM7d0JBQ0wsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hELEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1RCxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUQsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzFELEtBQUssQ0FBQztvQkFDUCxLQUFLLENBQUM7d0JBQ0wsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hELEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1RCxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUQsR0FBRyxDQUFD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LENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNYLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNYLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNYLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNYLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNYLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNYLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNYLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNWLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtTQUNkLEdBQUc7WUFDQSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDVixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDWCxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDWCxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDWCxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDWCxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDWCxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDWCxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDWCxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDVixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDVixFQUFF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QUssQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUEvQixDQUErQixDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNMLENBQUM7SUFDTCxxQkFBQztBQUFELENBekZBLEFBeUZDLElBQUE7QUF4RmlCLHVCQUFRLEdBQUcsU0FBUyxDQUFBO0FBRHpCLGNBQWM7SUFQMUIsMEJBQVUsQ0FBQztRQUNSLE1BQU0sRUFBRSxlQUFTO1FBQ2pCLFFBQVEsRUFBRSxnQkFBYyxDQUFDLFFBQVE7S0FDcEMsQ0FBQztJQVNPLFdBQUEsc0JBQU0sRUFBRSxDQUFBO3FDQUFxQix1QkFBVTtHQUxuQyxjQUFjLENBeUYxQjtBQXpGWSx3Q0FBYyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCB7IEZxQ29tcG9uZW50cyB9IGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCJcclxuaW1wb3J0ICogYXMgYW5ndWxhciBmcm9tICdhbmd1bGFyJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgbW9kdWxlOiBGcUNvbXBvbmVudHMsXHJcbiAgICBzZWxlY3RvcjogJ2ZpcnN0Rm9jdXMnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaXJzdEZvY3VzIGltcGxlbWVudHMgYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGNvbnN0cnVjdG9yKCBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlKSB7XHJcblxyXG4gICAgfVxyXG4gICAgbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCAkZWxlbTogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LCAkYXR0cjogYW5ndWxhci5JQXR0cmlidXRlcykge1xyXG4gICAgICAgIGlmICghISRhdHRyW1wiZmlyc3RGb2N1c1wiXSlcclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiAkZWxlbVswXS5mb2N1cygpLCAyMDApO1xyXG4gICAgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIG1vZHVsZTogRnFDb21wb25lbnRzLFxyXG4gICAgc2VsZWN0b3I6ICdmb2N1c1NlbGVjdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvY3VzU2VsZWN0IGltcGxlbWVudHMgYW5ndWxhci5JRGlyZWN0aXZlIHtcclxuICAgIGNvbnN0cnVjdG9yKCBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlKSB7XHJcblxyXG4gICAgfVxyXG4gICAgbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCAkZWxlbTogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LCAkYXR0cjogYW5ndWxhci5JQXR0cmlidXRlcykge1xyXG4gICAgICAgIGlmICghISRhdHRyW1wiZm9jdXNTZWxlY3RcIl0pXHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4gKDxIVE1MSW5wdXRFbGVtZW50PiRlbGVtWzBdKS5zZWxlY3QoKSwgMjAwKTtcclxuICAgIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IHsgRnFDb21wb25lbnRzIH0gZnJvbSBcIi4uL2luZGV4XCI7XHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcIkBmaXFhcy91dGlsc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdCwgTmdVdGlscyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgKiBhcyBhbmd1bGFyIGZyb20gJ2FuZ3VsYXInO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGltZUZvcm1hdHRlclBhcmFtZXRlciB7XHJcbiAgICBiYXNlZGF0ZTogc3RyaW5nO1xyXG4gICAgbWludmFsdWU6IHN0cmluZztcclxuICAgIG1heHZhbHVlOiBzdHJpbmc7XHJcbiAgICBvbmJsdXI6IHN0cmluZztcclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBtb2R1bGU6IEZxQ29tcG9uZW50cyxcclxuICAgIHNlbGVjdG9yOiAndGltZUZvcm1hdHRlcidcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWVGb3JtYXR0ZXIgaW1wbGVtZW50cyBhbmd1bGFyLklEaXJlY3RpdmUge1xyXG4gICAgc3RhdGljIG51bWJlcnMgPSBbNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1XTtcclxuICAgIHN0YXRpYyBhcnJvd3MgPSBbMzcsIDM4LCAzOSwgNDBdO1xyXG4gICAgc3RhdGljIHNlbWljb2xvbiA9IDE4NjtcclxuICAgIHN0YXRpYyBlc2NhcGUgPSAyNztcclxuICAgIHN0YXRpYyBiYWNrc3BhY2UgPSA4O1xyXG4gICAgc3RhdGljIGRlbCA9IDQ2O1xyXG4gICAgc3RhdGljIGVudGVyID0gMTM7XHJcbiAgICBzdGF0aWMgdGFiID0gOTtcclxuICAgIHN0YXRpYyBvdGhlcnMgPSBbVGltZUZvcm1hdHRlci5iYWNrc3BhY2UsIFRpbWVGb3JtYXR0ZXIudGFiLCBUaW1lRm9ybWF0dGVyLmVudGVyLCAxNiwgMTcsIDE4LCBUaW1lRm9ybWF0dGVyLmVzY2FwZSwgNDUsIFRpbWVGb3JtYXR0ZXIuZGVsXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckZmlsdGVyJykgcHJpdmF0ZSAkZmlsdGVyOiBhbmd1bGFyLklGaWx0ZXJTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHBhcnNlJykgcHJpdmF0ZSAkcGFyc2U6IGFuZ3VsYXIuSVBhcnNlU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHByaW9yaXR5ID0gMTAwMDtcclxuICAgIHJlc3RyaWN0ID0gJ0EnO1xyXG4gICAgcmVxdWlyZSA9ICduZ01vZGVsJztcclxuXHJcbiAgICByYXdCYXNlRGF0ZTogc3RyaW5nO1xyXG4gICAgX2Jhc2VEYXRlOiBEYXRlO1xyXG4gICAgZ2V0IGJhc2VEYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlRGF0ZSA/IHRoaXMuX2Jhc2VEYXRlLmNsb25lKCkgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgc2V0IGJhc2VEYXRlKHZhbHVlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fYmFzZURhdGUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByYXdNaW5WYWx1ZTogc3RyaW5nO1xyXG4gICAgX21pbkRhdGU6IERhdGU7XHJcbiAgICBnZXQgbWluRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLl9taW5EYXRlID8gdGhpcy5fbWluRGF0ZS5jbG9uZSgpIDogbnVsbDtcclxuICAgIH1cclxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fbWluRGF0ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJhd01heFZhbHVlOiBzdHJpbmc7XHJcbiAgICBfbWF4RGF0ZTogRGF0ZTtcclxuICAgIGdldCBtYXhEYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuX21heERhdGUgPyB0aGlzLl9tYXhEYXRlLmNsb25lKCkgOiBudWxsO1xyXG4gICAgfVxyXG4gICAgc2V0IG1heERhdGUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICB0aGlzLl9tYXhEYXRlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGluaygkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLCAkZWxlbTogYW5ndWxhci5JQXVnbWVudGVkSlF1ZXJ5LCAkYXR0cjogYW5ndWxhci5JQXR0cmlidXRlcywgY3RybDogYW5ndWxhci5JTmdNb2RlbENvbnRyb2xsZXIpIHtcclxuICAgICAgICB2YXIgcGFyYW1zID0gPElUaW1lRm9ybWF0dGVyUGFyYW1ldGVyPmFuZ3VsYXIuZnJvbUpzb24oJGF0dHJbXCJ0aW1lRm9ybWF0dGVyXCJdKTtcclxuXHJcbiAgICAgICAgdGhpcy5yYXdCYXNlRGF0ZSA9IE5nVXRpbHMuUGFyc2VFeHByZXNzaW9uT3JWYWx1ZShwYXJhbXMuYmFzZWRhdGUsIHRoaXMuJHBhcnNlLCAkc2NvcGUpO1xyXG4gICAgICAgIHRoaXMuYmFzZURhdGUgPSBEYXRlLnBhcnNlT3JOdWxsKHRoaXMucmF3QmFzZURhdGUpO1xyXG5cclxuICAgICAgICB0aGlzLnJhd01pblZhbHVlID0gTmdVdGlscy5QYXJzZUV4cHJlc3Npb25PclZhbHVlKHBhcmFtcy5taW52YWx1ZSB8fCBcIlwiLCB0aGlzLiRwYXJzZSwgJHNjb3BlKTtcclxuICAgICAgICB0aGlzLm1pbkRhdGUgPSAhdGhpcy5yYXdNaW5WYWx1ZSA/IG51bGwgOlxyXG4gICAgICAgICAgICB0aGlzLnJhd01pblZhbHVlLmxlbmd0aCA9PSA1ICYmIHRoaXMucmF3TWluVmFsdWUuaW5kZXhPZihcIjpcIikgPiAtMSA/IERhdGVUaW1lLlRpbWVUb0RhdGVUaW1lKHRoaXMucmF3TWluVmFsdWUsIHRoaXMuYmFzZURhdGUpIDpcclxuICAgICAgICAgICAgICAgIDxEYXRlPm5ldyBEYXRlKHRoaXMucmF3TWluVmFsdWUpO1xyXG5cclxuICAgICAgICB0aGlzLnJhd01heFZhbHVlID0gTmdVdGlscy5QYXJzZUV4cHJlc3Npb25PclZhbHVlKHBhcmFtcy5tYXh2YWx1ZSB8fCBcIlwiLCB0aGlzLiRwYXJzZSwgJHNjb3BlKTtcclxuICAgICAgICB0aGlzLm1heERhdGUgPSAhdGhpcy5yYXdNYXhWYWx1ZSA/IG51bGwgOlxyXG4gICAgICAgICAgICB0aGlzLnJhd01heFZhbHVlLmxlbmd0aCA9PSA1ICYmIHRoaXMucmF3TWF4VmFsdWUuaW5kZXhPZihcIjpcIikgPiAtMSA/IERhdGVUaW1lLlRpbWVUb0RhdGVUaW1lKHRoaXMucmF3TWF4VmFsdWUsIHRoaXMuYmFzZURhdGUpIDpcclxuICAgICAgICAgICAgICAgIERhdGUucGFyc2VPck51bGwodGhpcy5yYXdNYXhWYWx1ZSk7XHJcblxyXG4gICAgICAgICRlbGVtLmJpbmQoXCJrZXlkb3duXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChUaW1lRm9ybWF0dGVyLm90aGVycy5jb25jYXQoVGltZUZvcm1hdHRlci5hcnJvd3MpLmNvbmNhdChUaW1lRm9ybWF0dGVyLm51bWJlcnMpLmluZGV4T2YoZS5rZXlDb2RlKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSAhPSBUaW1lRm9ybWF0dGVyLnNlbWljb2xvbilcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAzNyB8fCBlLmtleUNvZGUgPT0gMzkpXHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gJGVsZW0udmFsKCk7XHJcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gVGltZUZvcm1hdHRlci5iYWNrc3BhY2UgfHwgZS5rZXlDb2RlID09IFRpbWVGb3JtYXR0ZXIuZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDMpXHJcbiAgICAgICAgICAgICAgICAgICAgJGVsZW0udmFsKHZhbHVlLnJlcGxhY2UoXCI6XCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT0gVGltZUZvcm1hdHRlci5zZW1pY29sb24gJiYgdmFsdWUubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICRlbGVtLnZhbChcIjBcIiArIHZhbHVlICsgXCI6XCIpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtUaW1lRm9ybWF0dGVyLnNlbWljb2xvbl0uY29uY2F0KFRpbWVGb3JtYXR0ZXIubnVtYmVycykuaW5kZXhPZihlLmtleUNvZGUpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMilcclxuICAgICAgICAgICAgICAgICAgICAkZWxlbS52YWwodmFsdWUgKyBcIjpcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IFRpbWVGb3JtYXR0ZXIuZXNjYXBlKSB7XHJcbiAgICAgICAgICAgICAgICAkZWxlbS52YWwodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIGN0cmwuJHJvbGxiYWNrVmlld1ZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAkZWxlbS5ibHVyKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IFRpbWVGb3JtYXR0ZXIuZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgICRlbGVtLmJsdXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT0gVGltZUZvcm1hdHRlci50YWIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA8IDUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXCIwXCIgKyB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSArIFwiMDAwXCIpLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlWzJdID0gXCI6XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtLnZhbCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3RybC4kc2V0Vmlld1ZhbHVlKHZhbHVlLCBcInRhYlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJGVsZW0uYmluZCgnYmx1cicsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBvbmJsdXIgPSB0aGlzLiRwYXJzZShwYXJhbXMub25ibHVyKTtcclxuICAgICAgICAgICAgaWYgKG9uYmx1cikge1xyXG4gICAgICAgICAgICAgICAgb25ibHVyKCRzY29wZSwgeyAkdmFsdWU6ICRlbGVtLnZhbCgpIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRlbGVtLmJpbmQoXCJrZXl1cFwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gJGVsZW0udmFsKCkuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDEgJiYgdmFsdWVzWzFdID4gNTkpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXNbMV0gPSA1OTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlc1swXSA+IDIzKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSAyNDtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBudiA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCB2YWx1ZXNbMV0ubGVuZ3RoOyB2KyspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG52ICs9IFwiMFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1sxXSA9IG52O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICRlbGVtLnZhbCh2YWx1ZXMuam9pbihcIjpcIikpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjdHJsLiRwYXJzZXJzLnB1c2godj0+IHRoaXMucGFyc2UoY3RybCwgdikpO1xyXG4gICAgICAgIGN0cmwuJGZvcm1hdHRlcnMucHVzaCh2PT4gdGhpcy5mb3JtYXQodikpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlKGN0cmw6IGFuZ3VsYXIuSU5nTW9kZWxDb250cm9sbGVyLCB2YWw6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWwudG9JU09TdHJpbmcpXHJcbiAgICAgICAgICAgIHJldHVybiB2YWwudG9JU09TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbC5sZW5ndGggPT0gNSkge1xyXG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGN0cmwuJG1vZGVsVmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZURhdGUuaXNWYWxpZCgpKVxyXG4gICAgICAgICAgICAgICAgZGF0ZSA9IHRoaXMuYmFzZURhdGU7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFkYXRlLmlzVmFsaWQoKSlcclxuICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbnV0ZXMgPSB2YWwuc3Vic3RyKDMsIDIpO1xyXG4gICAgICAgICAgICBpZiAobWludXRlcyA+IDU5KVxyXG4gICAgICAgICAgICAgICAgbWludXRlcyA9IDU5O1xyXG5cclxuICAgICAgICAgICAgdmFyIGhvdXJzID0gdmFsLnN1YnN0cigwLCAyKTtcclxuICAgICAgICAgICAgaWYgKGhvdXJzID4gMjMpIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzID0gMjQ7XHJcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKGhvdXJzKTtcclxuICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKG1pbnV0ZXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5taW5EYXRlICYmIGRhdGUgPCB0aGlzLm1pbkRhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWluRGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSAmJiBkYXRlID4gdGhpcy5tYXhEYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1heERhdGUudG9JU09TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdHJsLiRtb2RlbFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdCh2YWwpIHtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRlID0gRGF0ZS5wYXJzZU9yTnVsbCh2YWwpXHJcbiAgICAgICAgICAgIGlmIChkYXRlICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZmlsdGVyKCdkYXRlJykoZGF0ZSwgXCJISDptbVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgKiBhcyBhbmd1bGFyIGZyb20gJ2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBOZ1V0aWxzIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmV4cG9ydCB2YXIgRnFDb21wb25lbnRzID0gTmdVdGlscy5EZWZpbmVNb2R1bGUoXCJGcUNvbXBvbmVudHNcIixbXSk7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2RpcmVjdGl2ZXMvZm9jdXNcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vZGlyZWN0aXZlcy90aW1lRm9ybWF0dGVyXCI7IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gICAgLyoqXHJcbiAgICAqIElTTyA4NjAxIGZvcm1hdHRlZCBkYXRlIHRpbWUgc3RyaW5nXHJcbiAgICAqICd5eXl5LU1NLWRkVGhoOm1tOnNzWidcclxuICAgICovXHJcbiAgICBpbnRlcmZhY2UgSVNPRGF0ZVRpbWVTdHJpbmcgZXh0ZW5kcyBTdHJpbmcgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIElTTyA4NjAxIGZvcm1hdHRlZCBkYXRlIHRpbWUgc3RyaW5nXHJcbiAgICAqICd5eXl5LU1NLWRkJ1xyXG4gICAgKi9cclxuICAgIGludGVyZmFjZSBJU09EYXRlU3RyaW5nIGV4dGVuZHMgU3RyaW5nIHsgfVxyXG5cclxuICAgIGludGVyZmFjZSBEYXRlQ29uc3RydWN0b3Ige1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogVHJpZXMgdG8gcGFyc2UgYSBEYXRlIGZyb20gYSBzdHJpbmcsIHJldHVybnMgJ251bGwnIG9uIGZhaWx1cmVcclxuICAgICAgICAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHN0cmluZyB0byBwYXJzZVxyXG4gICAgICAgICovXHJcbiAgICAgICAgcGFyc2VPck51bGwoZGF0ZTogc3RyaW5nIHwgSVNPRGF0ZVN0cmluZyB8IElTT0RhdGVUaW1lU3RyaW5nKTogRGF0ZTtcclxuXHJcbiAgICAgICAgbmV3ICh2ZDogSVNPRGF0ZVN0cmluZyk6IERhdGU7XHJcbiAgICAgICAgbmV3ICh2ZDogSVNPRGF0ZVRpbWVTdHJpbmcpOiBEYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb21wYXJlIHR3byBkYXRlcyBhbmQgcmV0dXJuIGEgbmVnYXRpdmUsIHplcm8gb3IgcG9zaXRpdmUgdmFsdWU7XHJcbiAgICAgICAgICogZWcuIG5lZ2F0aXZlOiBvdGhlciBpcyBoaWdoZXIsIHplcm86IG90aGVyIGlzIGVxdWFsLCBwb3NpdGl2ZTogdGhpcyBpcyBoaWdoZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb21wYXJlKGE6IERhdGUsIGI6IERhdGUpOiBudW1iZXI7XHJcblxyXG4gICAgICAgIGRpZmYoYTogRGF0ZSwgYjogRGF0ZSk6IHsgZGF5czogbnVtYmVyLCBob3VyczogbnVtYmVyLCBtaW51dGVzOiBudW1iZXIsIHNlY29uZHM6IG51bWJlciwgbWlsbGlzZWNvbmRzOiBudW1iZXIgfVxyXG5cclxuICAgICAgICB0b2RheSgpOiBEYXRlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgRGF0ZSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBDbG9uZSB0aGlzIERhdGUgYXMgYSBuZXcgRGF0ZSBvYmplY3RcclxuICAgICAgICAqL1xyXG4gICAgICAgIGNsb25lKCk6IERhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogUmV0dXJucyBhIG5ldyBEYXRlIHdpdGggbiBkYXlzIGFkZGVkXHJcbiAgICAgICAgKiBAcGFyYW0gZGF5cyBUaGUgbnVtYmVyIG9mIGRheXMgdG8gYWRkXHJcbiAgICAgICAgKi9cclxuICAgICAgICBhZGREYXlzOiAoZGF5czogbnVtYmVyKSA9PiBEYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZXR1cm4gYSBJU084NjAxIGRhdGUgc3RyaW5nIFwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9JU09EYXRlU3RyaW5nOiAoKSA9PiBJU09EYXRlU3RyaW5nO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZXR1cm4gYSBJU084NjAxIGRhdGUvdGltZSBzdHJpbmcgXCJ5eXl5LU1NLWRkVGhoOm1tOmRkWlwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9JU09EYXRlVGltZVN0cmluZzogKCkgPT4gSVNPRGF0ZVRpbWVTdHJpbmc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENoZWNrcyBpZiB0aGUgZGF0ZSBpcyBpbmRlZWQgdmFsaWRcclxuICAgICAgICAgKi9cclxuICAgICAgICBpc1ZhbGlkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbXBhcmUgdGhpcyBkYXRlIHRvIGFub3RoZXIgZGF0ZSBhbmQgcmV0dXJuIGEgbmVnYXRpdmUsIHplcm8gb3IgcG9zaXRpdmUgdmFsdWU7XHJcbiAgICAgICAgICogZWcuIG5lZ2F0aXZlOiBvdGhlciBpcyBoaWdoZXIsIHplcm86IG90aGVyIGlzIGVxdWFsLCBwb3NpdGl2ZTogdGhpcyBpcyBoaWdoZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb21wYXJlKG90aGVyOiBEYXRlKTogbnVtYmVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb21wYXJlIHRoaXMgZGF0ZSB0byBhbm90aGVyIGRhdGUsIGFuZCByZXR1cm4gaWYgdGhleSBhcmUgZXF1YWxcclxuICAgICAgICAgKi9cclxuICAgICAgICBlcXVhbHMob3RoZXI6IERhdGUpOiBib29sZWFuO1xyXG4gICAgfVxyXG59XHJcblxyXG5EYXRlLnRvZGF5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgZC5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIHJldHVybiBkO1xyXG59XHJcblxyXG5EYXRlLnBhcnNlT3JOdWxsID0gZnVuY3Rpb24gKGRhdGU6IHN0cmluZyB8IElTT0RhdGVTdHJpbmcgfCBJU09EYXRlVGltZVN0cmluZykge1xyXG4gICAgaWYgKGRhdGUgPT09IHVuZGVmaW5lZCB8fCBkYXRlID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgdmFyIGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgIHJldHVybiBkLmlzVmFsaWQoKSA/IGQgOiBudWxsO1xyXG59XHJcblxyXG5EYXRlLmNvbXBhcmUgPSBmdW5jdGlvbiAoYTogRGF0ZSwgYjogRGF0ZSkge1xyXG4gICAgaWYgKCFhICYmICFiKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgaWYgKCFhICYmIGIpXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICBpZiAoYSAmJiAhYilcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICByZXR1cm4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKTtcclxufVxyXG5cclxuRGF0ZS5kaWZmID0gZnVuY3Rpb24gKGE6IERhdGUsIGI6IERhdGUpIHtcclxuICAgIGlmICghYSlcclxuICAgICAgICB0aHJvdyBcIkRhdGUgYSBjYW5ub3QgYmUgbnVsbFwiO1xyXG4gICAgaWYgKCFiKVxyXG4gICAgICAgIHRocm93IFwiRGF0ZSBiIGNhbm5vdCBiZSBudWxsXCI7XHJcbiAgICB2YXIgYW0gPSBhLmdldFRpbWUoKTtcclxuICAgIHZhciBibSA9IGIuZ2V0VGltZSgpO1xyXG4gICAgdmFyIG1zID0gYm0gLSBhbTtcclxuICAgIHZhciBzID0gTWF0aC5yb3VuZChtcyAvIDEwMDApO1xyXG4gICAgdmFyIG0gPSBNYXRoLnJvdW5kKHMgLyA2MCk7XHJcbiAgICB2YXIgaCA9IE1hdGgucm91bmQobSAvIDYwKTtcclxuICAgIHZhciBkID0gTWF0aC5yb3VuZChoIC8gMjQpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkYXlzOiBkLFxyXG4gICAgICAgIGhvdXJzOiBoLFxyXG4gICAgICAgIG1pbnV0ZXM6IG0sXHJcbiAgICAgICAgc2Vjb25kczogcyxcclxuICAgICAgICBtaWxsaXNlY29uZHM6IG1zXHJcbiAgICB9XHJcbn1cclxuXHJcbkRhdGUucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAodGhpczogRGF0ZSwgb3RoZXI6IERhdGUpIHtcclxuICAgIHJldHVybiBEYXRlLmNvbXBhcmUodGhpcywgb3RoZXIpO1xyXG59XHJcblxyXG5EYXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAodGhpczogRGF0ZSwgb3RoZXI6IERhdGUpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBhcmUob3RoZXIpID09PSAwO1xyXG59XHJcblxyXG5EYXRlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICh0aGlzOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5nZXRUaW1lKCkpO1xyXG59XHJcblxyXG5EYXRlLnByb3RvdHlwZS5hZGREYXlzID0gZnVuY3Rpb24gKHRoaXM6IERhdGUsIGRheXM6IG51bWJlcikge1xyXG4gICAgdmFyIGRhdGUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkYXlzKTtcclxuICAgIHJldHVybiBkYXRlO1xyXG59XHJcblxyXG5EYXRlLnByb3RvdHlwZS50b0lTT0RhdGVTdHJpbmcgPSBmdW5jdGlvbiAodGhpczogRGF0ZSkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuZ2V0RnVsbFllYXIoKX0tJHsodGhpcy5nZXRNb250aCgpICsgMTAxKS50b1N0cmluZygpLnN1YnN0cigxKX0tJHsodGhpcy5nZXREYXRlKCkgKyAxMDApLnRvU3RyaW5nKCkuc3Vic3RyKDEpfWA7XHJcbn1cclxuXHJcbkRhdGUucHJvdG90eXBlLnRvSVNPRGF0ZVRpbWVTdHJpbmcgPSBmdW5jdGlvbiAodGhpczogRGF0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTtcclxufVxyXG5cclxuRGF0ZS5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uICh0aGlzOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b1N0cmluZygpICE9IFwiSW52YWxpZCBEYXRlXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBtb2R1bGUgRGF0ZVRpbWUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHRpbWUgZm9ybWF0dGVyIHN0cmluZyAoSEg6bW06c3M/KSBhbmQgc2V0cyBpdCBvbiBhIGRhdGUgb2JqZWN0O1xyXG4gICAgICogSWYgbm8gYmFzZURhdGUgaXMgc3VwcGxpZWQsIHRvZGF5IGlzIHVzZWRcclxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aW1lIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIGJhc2VEYXRlIG9wdGlvbmFsIGRhdGUgdG8gc2V0IHRpbWUgb24uXHJcbiAgICAgKi9cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBUaW1lVG9EYXRlVGltZSh2YWx1ZTogc3RyaW5nLCBiYXNlRGF0ZT86IERhdGUpIHtcclxuICAgICAgICB2YXIgbSA9IHZhbHVlLnNwbGl0KFwiOlwiKTtcclxuICAgICAgICB2YXIgZGF0ZSA9IChiYXNlRGF0ZSB8fCBuZXcgRGF0ZSgpKS5jbG9uZSgpO1xyXG4gICAgICAgIGRhdGUuc2V0SG91cnMocGFyc2VJbnQobVswXSkpO1xyXG4gICAgICAgIGRhdGUuc2V0TWludXRlcyhwYXJzZUludChtWzFdKSk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGZ1bmN0aW9uIE1lbW9pemUoKTogTWV0aG9kRGVjb3JhdG9yIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBtZW1vaXplRGVjb3JhdG9yKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLFxyXG4gICAgICAgIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4gfCB2b2lkIHtcclxuICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvciB8fCAhcHJvcGVydHlEZXNjcmlwdG9yLmdldClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgZmllbGROYW1lID0gYF8ke3Byb3BlcnR5S2V5fS5tZW1vaXplZGBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ZpZWxkTmFtZV0gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzW2ZpZWxkTmFtZV0gPSBwcm9wZXJ0eURlc2NyaXB0b3IuZ2V0LmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbZmllbGROYW1lXTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0OiBwcm9wZXJ0eURlc2NyaXB0b3Iuc2V0ID8gZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNbZmllbGROYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5RGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gOiBmdW5jdGlvbiAoXykge1xyXG4gICAgICAgICAgICAgICAgdGhpc1tmaWVsZE5hbWVdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIExvY2FsU3RvcmFnZShzdG9yYWdlS2V5OiBzdHJpbmcsIGJhY2tpbmdmaWVsZG5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGxvY2FsU3RvcmFnZURlY29yYXRvcih0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCxcclxuICAgICAgICBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+IHwgdm9pZCB7XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IgfHwgIXByb3BlcnR5RGVzY3JpcHRvci5nZXQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB2YXIgY2FjaGVkID0gbG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldO1xyXG4gICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIGlmKGJhY2tpbmdmaWVsZG5hbWUpXHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbYmFja2luZ2ZpZWxkbmFtZV0gPSBKU09OLnBhcnNlKGNhY2hlZCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYocHJvcGVydHlEZXNjcmlwdG9yLnNldClcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5RGVzY3JpcHRvci5zZXQuY2FsbCh0YXJnZXQsIEpTT04ucGFyc2UoY2FjaGVkKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FjaGVWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JhZ2VLZXkpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Vbc3RvcmFnZUtleV0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+ID0ge1xyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnR5RGVzY3JpcHRvci5nZXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlVmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocHJvcGVydHlEZXNjcmlwdG9yLnNldClcclxuICAgICAgICAgICAgcmVzdWx0LnNldCA9IGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZVZhbHVlKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlEZXNjcmlwdG9yLnNldC5jYWxsKHRoaXMsIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn0iLCIndXNlIHN0cmljdCc7XHJcbmV4cG9ydCBtb2R1bGUgVXRpbHMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm1zIGEgc2luZ2xlIGxldmVsIEpzb24gZGF0YXNldCB0byBhIHF1ZXJ5IHBhcmFtZXRlciBzdHJpbmdcclxuICAgICAqIEBwYXJhbSBkYXRhIFNpbmdsZSBsZXZlbCBKc29uIGRhdGFzZXQgdG8gY29udmVydFxyXG4gICAgICovXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gVHJhbnNmb3JtSnNvblRvRm9ybURhdGEoZGF0YTogT2JqZWN0KSB7XHJcbiAgICAgICAgdmFyIGRiOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuaGFzT3duUHJvcGVydHkocHJvcCkpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgZGIucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRhdGFbcHJvcF0pfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYi5qb2luKFwiJlwiKS5yZXBsYWNlKC8lMjAvZywgXCIrXCIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdHlwZSBQIG9uIGEgZ2l2ZW4gb2JqZWN0IGFuZCBhcHBseSBhIGZ1bmN0aW9uIHRvIGVhY2hcclxuICAgICAqIEBwYXJhbSAge2FueX0gb2JqZWN0IHRhcmdldCBvYmplY3RcclxuICAgICAqIEBwYXJhbSAgeyhwcm9wZXJ0eTpQLCBrZXk6c3RyaW5nKSA9PiB2b2lkIH0gYXBwbHkgZnVuY3Rpb24gdG8gYXBwbHlcclxuICAgICAqIEBwYXJhbSAgeyhwcm9wZXJ0eTpQLCBrZXk6c3RyaW5nKSA9PiBib29sZWFuID0gXyA9PiB0cnVlfSBmaWx0ZXIgb3B0aW9uYWwgZmlsdGVyIGZ1bmN0aW9uLCByZXR1cm4gZmFsc2UgdG8gZXhjbHVkZSBwcm9wZXJ0eVxyXG4gICAgICovXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gZm9yRWFjaFByb3BlcnR5PFA+KG9iamVjdDogYW55LCBhcHBseTogKHByb3BlcnR5OiBQLCBrZXk6IHN0cmluZykgPT4gdm9pZCwgZmlsdGVyOiAocHJvcGVydHk6IFAsIGtleTogc3RyaW5nKSA9PiBib29sZWFuID0gXyA9PiB0cnVlKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcDogUCA9IG9iamVjdFtrZXldO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyKHByb3AsIGtleSkpXHJcbiAgICAgICAgICAgICAgICBhcHBseShwcm9wLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gZm9yRWFjaEtleTxUPihkaWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgYXBwbHk6IChwcm9wZXJ0eTogVCwga2V5OiBzdHJpbmcpID0+IHZvaWQsIGZpbHRlcjogKHByb3BlcnR5OiBULCBrZXk6IHN0cmluZykgPT4gYm9vbGVhbiA9IF8gPT4gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiBmb3JFYWNoUHJvcGVydHkoZGljdCwgYXBwbHksIGZpbHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYWZlbHkgZ2V0IHRoZSB2YWx1ZSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSwgb3IgJ3VuZGVmaW5lZCcgb24gZXJyb3JcclxuICAgICAqIEBwYXJhbSBvYmplY3QgdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gZ2V0dGVyIHByb3BlcnR5IGFjY2Vzc2VyXHJcbiAgICAgKi9cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlPFQsIFY+KG9iamVjdDogVCwgZ2V0dGVyOiAob2JqZWN0OiBUKSA9PiBWKTogViB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldHRlcihvYmplY3QpO1xyXG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG4vLy9HZW5lcmljIGV4dGVuc2lvbnNcclxuaWYgKCEoPGFueT5TdHJpbmcucHJvdG90eXBlKS5zdGFydHNXaXRoKSB7XHJcbiAgICAoPGFueT5TdHJpbmcucHJvdG90eXBlKS5zdGFydHNXaXRoID0gZnVuY3Rpb24gKHNlYXJjaFN0cmluZywgcG9zaXRpb24pIHtcclxuICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIHx8IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Vic3RyKHBvc2l0aW9uLCBzZWFyY2hTdHJpbmcubGVuZ3RoKSA9PT0gc2VhcmNoU3RyaW5nO1xyXG4gICAgfTtcclxufSIsImV4cG9ydCAqIGZyb20gXCIuL2dlbmVyYWxcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vZGF0ZXRpbWVcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4va2V5Y29kZXNcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiOyIsImV4cG9ydCBjbGFzcyBLZXlDb2RlcyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJhY2tzcGFjZSA9IDg7XHJcbiAgICBwdWJsaWMgc3RhdGljIHRhYiA9IDk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNsZWFyID0gMTI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVudGVyID0gMTM7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNoaWZ0ID0gMTY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGN0cmwgPSAxNztcclxuICAgIHB1YmxpYyBzdGF0aWMgYWx0ID0gMTg7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBhdXNlID0gMTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJyZWFrID0gMTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNhcHNMb2NrID0gMjA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVzY2FwZSA9IDI3O1xyXG4gICAgcHVibGljIHN0YXRpYyBzcGFjZSA9IDMyO1xyXG4gICAgcHVibGljIHN0YXRpYyBwYWdlVXAgPSAzMztcclxuICAgIHB1YmxpYyBzdGF0aWMgcGFnZURvd24gPSAzNDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZW5kID0gMzU7XHJcbiAgICBwdWJsaWMgc3RhdGljIGhvbWUgPSAzNjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbGVmdEFycm93ID0gMzc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHVwQXJyb3cgPSAzODtcclxuICAgIHB1YmxpYyBzdGF0aWMgcmlnaHRBcnJvdyA9IDM5O1xyXG4gICAgcHVibGljIHN0YXRpYyBkb3duQXJyb3cgPSA0MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0ID0gNDE7XHJcbiAgICBwdWJsaWMgc3RhdGljIHByaW50U2NyZWVuID0gNDI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGluc2VydCA9IDQ1O1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWxldGUgPSA0NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjAgPSA0ODtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjEgPSA0OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjIgPSA1MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjMgPSA1MTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjQgPSA1MjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjUgPSA1MztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjYgPSA1NDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjcgPSA1NTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjggPSA1NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjkgPSA1NztcclxuICAgIHB1YmxpYyBzdGF0aWMgYSA9IDY1O1xyXG4gICAgcHVibGljIHN0YXRpYyBiID0gNjY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGMgPSA2NztcclxuICAgIHB1YmxpYyBzdGF0aWMgZCA9IDY4O1xyXG4gICAgcHVibGljIHN0YXRpYyBlID0gNjk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGYgPSA3MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZyA9IDcxO1xyXG4gICAgcHVibGljIHN0YXRpYyBoID0gNzI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGkgPSA3MztcclxuICAgIHB1YmxpYyBzdGF0aWMgaiA9IDc0O1xyXG4gICAgcHVibGljIHN0YXRpYyBrID0gNzU7XHJcbiAgICBwdWJsaWMgc3RhdGljIGwgPSA3NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbSA9IDc3O1xyXG4gICAgcHVibGljIHN0YXRpYyBuID0gNzg7XHJcbiAgICBwdWJsaWMgc3RhdGljIG8gPSA3OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgcCA9IDgwO1xyXG4gICAgcHVibGljIHN0YXRpYyBxID0gODE7XHJcbiAgICBwdWJsaWMgc3RhdGljIHIgPSA4MjtcclxuICAgIHB1YmxpYyBzdGF0aWMgcyA9IDgzO1xyXG4gICAgcHVibGljIHN0YXRpYyB0ID0gODQ7XHJcbiAgICBwdWJsaWMgc3RhdGljIHUgPSA4NTtcclxuICAgIHB1YmxpYyBzdGF0aWMgdiA9IDg2O1xyXG4gICAgcHVibGljIHN0YXRpYyB3ID0gODc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHggPSA4ODtcclxuICAgIHB1YmxpYyBzdGF0aWMgeSA9IDg5O1xyXG4gICAgcHVibGljIHN0YXRpYyB6ID0gOTA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGxlZnRXaW5kb3dLZXkgPSA5MTtcclxuICAgIHB1YmxpYyBzdGF0aWMgcmlnaHRXaW5kb3dLZXkgPSA5MjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0S2V5ID0gOTM7XHJcbiAgICBwdWJsaWMgc3RhdGljIG51bXBhZDAgPSA5NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkMSA9IDk3O1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQyID0gOTg7XHJcbiAgICBwdWJsaWMgc3RhdGljIG51bXBhZDMgPSA5OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkNCA9IDEwMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkNSA9IDEwMTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkNiA9IDEwMjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkNyA9IDEwMztcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkOCA9IDEwNDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkOSA9IDEwNTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbXVsdGlwbHkgPSAxMDY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFkZCA9IDEwNztcclxuICAgIHB1YmxpYyBzdGF0aWMgc3VidHJhY3QgPSAxMDk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRlY2ltYWxQb2ludCA9IDExMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZGl2aWRlID0gMTExO1xyXG4gICAgcHVibGljIHN0YXRpYyBmMSA9IDExMjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZjIgPSAxMTM7XHJcbiAgICBwdWJsaWMgc3RhdGljIGYzID0gMTE0O1xyXG4gICAgcHVibGljIHN0YXRpYyBmNCA9IDExNTtcclxuICAgIHB1YmxpYyBzdGF0aWMgZjUgPSAxMTY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGY2ID0gMTE3O1xyXG4gICAgcHVibGljIHN0YXRpYyBmNyA9IDExODtcclxuICAgIHB1YmxpYyBzdGF0aWMgZjggPSAxMTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGY5ID0gMTIwO1xyXG4gICAgcHVibGljIHN0YXRpYyBmMTAgPSAxMjE7XHJcbiAgICBwdWJsaWMgc3RhdGljIGYxMSA9IDEyMjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZjEyID0gMTIzO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1Mb2NrID0gMTQ0O1xyXG4gICAgcHVibGljIHN0YXRpYyBzY3JvbGxMb2NrID0gMTQ1O1xyXG4gICAgcHVibGljIHN0YXRpYyBzZW1pQ29sb24gPSAxODY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVxdWFsU2lnbiA9IDE4NztcclxuICAgIHB1YmxpYyBzdGF0aWMgY29tbWEgPSAxODg7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRhc2ggPSAxODk7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBlcmlvZCA9IDE5MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZm9yd2FyZFNsYXNoID0gMTkxO1xyXG4gICAgcHVibGljIHN0YXRpYyBncmF2ZUFjY2VudCA9IDE5MjtcclxuICAgIHB1YmxpYyBzdGF0aWMgb3BlbkJyYWNrZXQgPSAyMTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJhY2tTbGFzaCA9IDIyMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2luZ2xlUXVvdGUgPSAyMjI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNsb3NlQnJha2V0ID0gMjIxO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1lcmljID0gW1xyXG4gICAgICAgIEtleUNvZGVzLm4wLFxyXG4gICAgICAgIEtleUNvZGVzLm4xLFxyXG4gICAgICAgIEtleUNvZGVzLm4yLFxyXG4gICAgICAgIEtleUNvZGVzLm4zLFxyXG4gICAgICAgIEtleUNvZGVzLm40LFxyXG4gICAgICAgIEtleUNvZGVzLm41LFxyXG4gICAgICAgIEtleUNvZGVzLm42LFxyXG4gICAgICAgIEtleUNvZGVzLm43LFxyXG4gICAgICAgIEtleUNvZGVzLm44LFxyXG4gICAgICAgIEtleUNvZGVzLm45LFxyXG4gICAgICAgIEtleUNvZGVzLm51bXBhZDAsXHJcbiAgICAgICAgS2V5Q29kZXMubnVtcGFkMSxcclxuICAgICAgICBLZXlDb2Rlcy5udW1wYWQyLFxyXG4gICAgICAgIEtleUNvZGVzLm51bXBhZDMsXHJcbiAgICAgICAgS2V5Q29kZXMubnVtcGFkNCxcclxuICAgICAgICBLZXlDb2Rlcy5udW1wYWQ1LFxyXG4gICAgICAgIEtleUNvZGVzLm51bXBhZDYsXHJcbiAgICAgICAgS2V5Q29kZXMubnVtcGFkNyxcclxuICAgICAgICBLZXlDb2Rlcy5udW1wYWQ4LFxyXG4gICAgICAgIEtleUNvZGVzLm51bXBhZDksXHJcbiAgICBdO1xyXG4gICAgcHVibGljIHN0YXRpYyBhbHBoYSA9IFtcclxuICAgICAgICBLZXlDb2Rlcy5hLFxyXG4gICAgICAgIEtleUNvZGVzLmIsXHJcbiAgICAgICAgS2V5Q29kZXMuYyxcclxuICAgICAgICBLZXlDb2Rlcy5kLFxyXG4gICAgICAgIEtleUNvZGVzLmUsXHJcbiAgICAgICAgS2V5Q29kZXMuZixcclxuICAgICAgICBLZXlDb2Rlcy5nLFxyXG4gICAgICAgIEtleUNvZGVzLmgsXHJcbiAgICAgICAgS2V5Q29kZXMuaSxcclxuICAgICAgICBLZXlDb2Rlcy5qLFxyXG4gICAgICAgIEtleUNvZGVzLmssXHJcbiAgICAgICAgS2V5Q29kZXMubCxcclxuICAgICAgICBLZXlDb2Rlcy5tLFxyXG4gICAgICAgIEtleUNvZGVzLm4sXHJcbiAgICAgICAgS2V5Q29kZXMubyxcclxuICAgICAgICBLZXlDb2Rlcy5wLFxyXG4gICAgICAgIEtleUNvZGVzLnEsXHJcbiAgICAgICAgS2V5Q29kZXMucixcclxuICAgICAgICBLZXlDb2Rlcy5zLFxyXG4gICAgICAgIEtleUNvZGVzLnQsXHJcbiAgICAgICAgS2V5Q29kZXMudSxcclxuICAgICAgICBLZXlDb2Rlcy52LFxyXG4gICAgICAgIEtleUNvZGVzLncsXHJcbiAgICAgICAgS2V5Q29kZXMueCxcclxuICAgICAgICBLZXlDb2Rlcy55LFxyXG4gICAgICAgIEtleUNvZGVzLnosXHJcbiAgICBdO1xyXG4gICAgcHVibGljIHN0YXRpYyBGa2V5cyA9XHJcbiAgICBbXHJcbiAgICAgICAgS2V5Q29kZXMuZjEsXHJcbiAgICAgICAgS2V5Q29kZXMuZjIsXHJcbiAgICAgICAgS2V5Q29kZXMuZjMsXHJcbiAgICAgICAgS2V5Q29kZXMuZjQsXHJcbiAgICAgICAgS2V5Q29kZXMuZjUsXHJcbiAgICAgICAgS2V5Q29kZXMuZjYsXHJcbiAgICAgICAgS2V5Q29kZXMuZjcsXHJcbiAgICAgICAgS2V5Q29kZXMuZjgsXHJcbiAgICAgICAgS2V5Q29kZXMuZjksXHJcbiAgICAgICAgS2V5Q29kZXMuZjEwLFxyXG4gICAgICAgIEtleUNvZGVzLmYxMSxcclxuICAgICAgICBLZXlDb2Rlcy5mMTIsXHJcbiAgICBdO1xyXG59IiwiJ3VzZSBzdHJpY3QnO1xyXG5pbXBvcnQgeyBOZ1V0aWxzIH0gZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0ICogYXMgYW5ndWxhciBmcm9tICdhbmd1bGFyJztcclxuXHJcbmRlY2xhcmUgdmFyIFJlZmxlY3Q6IGFueTtcclxuXHJcbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJRGVjb3JhdG9yUGFyYW1ldGVycyB7XHJcbiAgICBtb2R1bGU6IGFuZ3VsYXIuSU1vZHVsZSxcclxuICAgIHNlbGVjdG9yOiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElDb21wb25lbnRQYXJhbWV0ZXJzIGV4dGVuZHMgSURlY29yYXRvclBhcmFtZXRlcnMsIGFuZ3VsYXIuSUNvbXBvbmVudE9wdGlvbnMge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENvbXBvbmVudChwYXJhbWV0ZXJzOiBJQ29tcG9uZW50UGFyYW1ldGVycyk6IENsYXNzRGVjb3JhdG9yIHtcclxuICAgIHZhciBtb2R1bGUgPSBwYXJhbWV0ZXJzLm1vZHVsZTtcclxuICAgIHZhciBzZWxlY3RvciA9IHBhcmFtZXRlcnMuc2VsZWN0b3I7XHJcbiAgICBkZWxldGUgcGFyYW1ldGVycy5tb2R1bGU7XHJcbiAgICBkZWxldGUgcGFyYW1ldGVycy5zZWxlY3RvcjtcclxuXHJcbiAgICByZXR1cm4gPFRGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uPih0YXJnZXQ6IFRGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgIHBhcmFtZXRlcnMuY29udHJvbGxlciA9IDxhbnk+dGFyZ2V0O1xyXG4gICAgICAgIGlmICh0YXJnZXQucHJvdG90eXBlLl9iaW5kaW5ncykge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLmJpbmRpbmdzID0gcGFyYW1ldGVycy5iaW5kaW5ncyB8fCB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgYiBpbiB0YXJnZXQucHJvdG90eXBlLl9iaW5kaW5ncykge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycy5iaW5kaW5nc1tiXSA9IHRhcmdldC5wcm90b3R5cGUuX2JpbmRpbmdzW2JdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQucHJvdG90eXBlLl9iaW5kaW5nc1xyXG4gICAgICAgIH1cclxuICAgICAgICBtb2R1bGUuY29tcG9uZW50KHNlbGVjdG9yLCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0YXJnZXRbXCJfc2VsZWN0b3JcIl0gPSBzZWxlY3RvcjtcclxuICAgICAgICB0YXJnZXRbXCJfbW9kdWxlTmFtZVwiXSA9IG1vZHVsZS5uYW1lO1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb25lbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgb24gZWFjaCBjb250cm9sbGVyIGFmdGVyIGFsbCB0aGUgY29udHJvbGxlcnMgb24gYW4gZWxlbWVudCBoYXZlIGJlZW4gY29uc3RydWN0ZWQgYW5kIGhhZCB0aGVpciBiaW5kaW5ncyBpbml0aWFsaXplZCAoYW5kIGJlZm9yZSB0aGUgcHJlICYgcG9zdCBsaW5raW5nIGZ1bmN0aW9ucyBmb3IgdGhlIGRpcmVjdGl2ZXMgb24gdGhpcyBlbGVtZW50KS4gVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gcHV0IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIHlvdXIgY29udHJvbGxlci5cclxuICAgICAqL1xyXG4gICAgJG9uSW5pdD8oKTogdm9pZFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW5ldmVyIG9uZS13YXkgYmluZGluZ3MgYXJlIHVwZGF0ZWQuIFRoZSBjaGFuZ2VzT2JqIGlzIGEgaGFzaCB3aG9zZSBrZXlzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGJvdW5kIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQsIGFuZCB0aGUgdmFsdWVzIGFyZSBhbiBvYmplY3Qgb2YgdGhlIGZvcm0geyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUsIGlzRmlyc3RDaGFuZ2UoKSB9LiBVc2UgdGhpcyBob29rIHRvIHRyaWdnZXIgdXBkYXRlcyB3aXRoaW4gYSBjb21wb25lbnQgc3VjaCBhcyBjbG9uaW5nIHRoZSBib3VuZCB2YWx1ZSB0byBwcmV2ZW50IGFjY2lkZW50YWwgbXV0YXRpb24gb2YgdGhlIG91dGVyIHZhbHVlLiBcclxuICAgICovXHJcbiAgICAkb25DaGFuZ2VzPyhjaGFuZ2VzT2JqOiB7IGN1cnJlbnRWYWx1ZTogYW55LCBwcmV2aW91c1ZhbHVlOiBhbnksIGlzRmlyc3RDaGFuZ2U6ICgpID0+IGFueSB9KTogdm9pZFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIG9uIGEgY29udHJvbGxlciB3aGVuIGl0cyBjb250YWluaW5nIHNjb3BlIGlzIGRlc3Ryb3llZC4gVXNlIHRoaXMgaG9vayBmb3IgcmVsZWFzaW5nIGV4dGVybmFsIHJlc291cmNlcywgd2F0Y2hlcyBhbmQgZXZlbnQgaGFuZGxlcnMuXHJcbiAgICAgKi9cclxuICAgICRvbkRlc3Ryb3k/KCk6IHZvaWRcclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBDYWxsZWQgYWZ0ZXIgdGhpcyBjb250cm9sbGVyJ3MgZWxlbWVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBsaW5rZWQuIFNpbWlsYXIgdG8gdGhlIHBvc3QtbGluayBmdW5jdGlvbiB0aGlzIGhvb2sgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIERPTSBldmVudCBoYW5kbGVycyBhbmQgZG8gZGlyZWN0IERPTSBtYW5pcHVsYXRpb24uIE5vdGUgdGhhdCBjaGlsZCBlbGVtZW50cyB0aGF0IGNvbnRhaW4gdGVtcGxhdGVVcmwgZGlyZWN0aXZlcyB3aWxsIG5vdCBoYXZlIGJlZW4gY29tcGlsZWQgYW5kIGxpbmtlZCBzaW5jZSB0aGV5IGFyZSB3YWl0aW5nIGZvciB0aGVpciB0ZW1wbGF0ZSB0byBsb2FkIGFzeW5jaHJvbm91c2x5IGFuZCB0aGVpciBvd24gY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgaGFzIGJlZW4gc3VzcGVuZGVkIHVudGlsIHRoYXQgb2NjdXJzLiBUaGlzIGhvb2sgY2FuIGJlIGNvbnNpZGVyZWQgYW5hbG9nb3VzIHRvIHRoZSBuZ0FmdGVyVmlld0luaXQgYW5kIG5nQWZ0ZXJDb250ZW50SW5pdCBob29rcyBpbiBBbmd1bGFyIDIuIFNpbmNlIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGlzIHJhdGhlciBkaWZmZXJlbnQgaW4gQW5ndWxhciAxIHRoZXJlIGlzIG5vIGRpcmVjdCBtYXBwaW5nIGFuZCBjYXJlIHNob3VsZCBiZSB0YWtlbiB3aGVuIHVwZ3JhZGluZy5cclxuICAgICovXHJcbiAgICAkcG9zdExpbms/KCk6IHZvaWRcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJbmplY3RhYmxlKHBhcmFtZXRlcnM6IElEZWNvcmF0b3JQYXJhbWV0ZXJzKTogQ2xhc3NEZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuIDxURnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbj4odGFyZ2V0OiBURnVuY3Rpb24pID0+IHtcclxuICAgICAgICBwYXJhbWV0ZXJzLm1vZHVsZS5zZXJ2aWNlKHBhcmFtZXRlcnMuc2VsZWN0b3IsIHRhcmdldCk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGlwZVBhcmFtZXRlcnMgZXh0ZW5kcyBJRGVjb3JhdG9yUGFyYW1ldGVycyB7XHJcbiAgICBwdXJlPzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGlwZShwYXJhbWV0ZXJzOiBJUGlwZVBhcmFtZXRlcnMpOiBNZXRob2REZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuIDxUPih0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD4pID0+IHtcclxuICAgICAgICB2YXIgcGlwZTogRnVuY3Rpb24gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLnB1cmUgIT09IHRydWUpIHtcclxuICAgICAgICAgICAgdmFyIG9waXBlID0gcGlwZTtcclxuICAgICAgICAgICAgcGlwZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwaXBlZnVuYyA9IG9waXBlLmFwcGx5KG9waXBlLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgcGlwZWZ1bmMuJHN0YXRlZnVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwaXBlZnVuYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob3BpcGUuJGluamVjdCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgcGlwZS4kaW5qZWN0ID0gb3BpcGUuJGluamVjdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVycy5tb2R1bGUuZmlsdGVyKHBhcmFtZXRlcnMuc2VsZWN0b3IsIHBpcGUpO1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEaXJlY3RpdmUocGFyYW1ldGVyczogSURlY29yYXRvclBhcmFtZXRlcnMpOiBDbGFzc0RlY29yYXRvciB7XHJcbiAgICByZXR1cm4gPFRGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uPih0YXJnZXQ6IFRGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgIHBhcmFtZXRlcnMubW9kdWxlLmRpcmVjdGl2ZShwYXJhbWV0ZXJzLnNlbGVjdG9yLCBOZ1V0aWxzLkZhY3RvcnkodGFyZ2V0KSk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpZyh7IG1vZHVsZSB9OiB7IG1vZHVsZTogYW5ndWxhci5JTW9kdWxlIH0pOiBDbGFzc0RlY29yYXRvciB7XHJcbiAgICByZXR1cm4gPFRGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uPih0YXJnZXQ6IFRGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgIG1vZHVsZS5jb25maWcodGFyZ2V0KTtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogRGVjbGFyZXMgYSBkYXRhLWJvdW5kIGlucHV0IHByb3BlcnR5LlxyXG4gKlxyXG4gKiBBbmd1bGFyIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyBkYXRhLWJvdW5kIHByb3BlcnRpZXMgZHVyaW5nIGNoYW5nZSBkZXRlY3Rpb24uXHJcbiAqXHJcbiAqIGBJbnB1dGAgdGFrZXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lXHJcbiAqIHVzZWQgd2hlbiBpbnN0YW50aWF0aW5nIGEgY29tcG9uZW50IGluIHRoZSB0ZW1wbGF0ZS4gV2hlbiBub3QgcHJvdmlkZWQsXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgaXMgdXNlZC5cclxuICpcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBJbnB1dChiaW5kaW5nUHJvcGVydHlOYW1lOiBzdHJpbmcgPSBcIlwiKTogUHJvcGVydHlEZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4ge1xyXG4gICAgICAgIHRhcmdldC5fYmluZGluZ3MgPSB0YXJnZXQuX2JpbmRpbmdzIHx8IHt9O1xyXG4gICAgICAgIHRhcmdldC5fYmluZGluZ3NbcHJvcGVydHlLZXldID0gYDwke2JpbmRpbmdQcm9wZXJ0eU5hbWV9YDtcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWNsYXJlcyBhbiBldmVudC1ib3VuZCBvdXRwdXQgcHJvcGVydHkuXHJcbiAqXHJcbiAqIFdoZW4gYW4gb3V0cHV0IHByb3BlcnR5IGVtaXRzIGFuIGV2ZW50LCBhbiBldmVudCBoYW5kbGVyIGF0dGFjaGVkIHRvIHRoYXQgZXZlbnRcclxuICogdGhlIHRlbXBsYXRlIGlzIGludm9rZWQuXHJcbiAqXHJcbiAqIGBPdXRwdXRgIHRha2VzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgbmFtZVxyXG4gKiB1c2VkIHdoZW4gaW5zdGFudGlhdGluZyBhIGNvbXBvbmVudCBpbiB0aGUgdGVtcGxhdGUuIFdoZW4gbm90IHByb3ZpZGVkLFxyXG4gKiB0aGUgbmFtZSBvZiB0aGUgZGVjb3JhdGVkIHByb3BlcnR5IGlzIHVzZWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gT3V0cHV0KGJpbmRpbmdQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFwiXCIsIGFkZEJ1ZmZlciA9IGZhbHNlKTogYW55IHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvdXRwdXREZWNvcmF0b3IodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4gfCB2b2lkIHtcclxuICAgICAgICB0YXJnZXRbXCJfYmluZGluZ3NcIl0gPSB0YXJnZXRbXCJfYmluZGluZ3NcIl0gfHwge307XHJcbiAgICAgICAgdGFyZ2V0W1wiX2JpbmRpbmdzXCJdW3Byb3BlcnR5S2V5XSA9IGAmJHtiaW5kaW5nUHJvcGVydHlOYW1lIHx8IFwiXCJ9YDtcclxuICAgICAgICBpZiAoIWFkZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICBpZiAoIXRhcmdldFtwcm9wZXJ0eUtleV0pXHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcGVydHlLZXldID0gKCkgPT4geyB9O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGdldDogKCFwcm9wZXJ0eURlc2NyaXB0b3IgfHwgcHJvcGVydHlEZXNjcmlwdG9yLmdldCkgPyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gcHJvcGVydHlEZXNjcmlwdG9yID09PSB1bmRlZmluZWQgPyB0aGlzW2BfJHtwcm9wZXJ0eUtleX1gXSA6IHByb3BlcnR5RGVzY3JpcHRvci5nZXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbYF8ke3Byb3BlcnR5S2V5fS5idWZmZXJgXSA9ICh0aGlzW2BfJHtwcm9wZXJ0eUtleX0uYnVmZmVyYF0gfHwgW10pLmNvbmNhdChhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzZXQ6ICghcHJvcGVydHlEZXNjcmlwdG9yIHx8IHByb3BlcnR5RGVzY3JpcHRvci5zZXQpID8gZnVuY3Rpb24gKHY6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyOiBJQXJndW1lbnRzW10gPSB0aGlzW2BfJHtwcm9wZXJ0eUtleX0uYnVmZmVyYF0gfHwgW107XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eURlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCA/IHRoaXNbYF8ke3Byb3BlcnR5S2V5fWBdID0gdiA6IHByb3BlcnR5RGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2KTtcclxuICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGIgb2YgYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHYuYXBwbHkodGhpcywgYik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbYF8ke3Byb3BlcnR5S2V5fS5idWZmZXJgXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE91dHB1dEFyZ3M8VD4gPSAoYXJnczogVCkgPT4gdm9pZDtcclxuXHJcbi8qKlxyXG4gKiBEZWNsYXJlcyBhbiB0d28td2F5IGRhdGEtYm91bmQgcHJvcGVydHkuXHJcbiAqIFxyXG4gKiBBbmd1bGFyIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyBkYXRhLWJvdW5kIHByb3BlcnRpZXMgZHVyaW5nIGNoYW5nZSBkZXRlY3Rpb24uXHJcbiAqXHJcbiAqIGBCaW5kaW5nYCB0YWtlcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWVcclxuICogdXNlZCB3aGVuIGluc3RhbnRpYXRpbmcgYSBjb21wb25lbnQgaW4gdGhlIHRlbXBsYXRlLiBXaGVuIG5vdCBwcm92aWRlZCxcclxuICogdGhlIG5hbWUgb2YgdGhlIGRlY29yYXRlZCBwcm9wZXJ0eSBpcyB1c2VkLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEJpbmRpbmcoYmluZGluZ1Byb3BlcnR5TmFtZTogc3RyaW5nID0gXCJcIik6IFByb3BlcnR5RGVjb3JhdG9yIHtcclxuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcclxuICAgICAgICB0YXJnZXQuX2JpbmRpbmdzID0gdGFyZ2V0Ll9iaW5kaW5ncyB8fCB7fTtcclxuICAgICAgICB0YXJnZXQuX2JpbmRpbmdzW3Byb3BlcnR5S2V5XSA9IGA9JHtiaW5kaW5nUHJvcGVydHlOYW1lfWA7XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogRGVjbGFyZXMgYSBvbmUgdGltZSBib3VuZCBwcm9wZXJ0eS5cclxuICpcclxuICogQW5ndWxhciByZWFkcyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBvbmx5IG9uY2Ugb24gY3JlYXRpb25cclxuICogXHJcbiAqIGBBdHRyaWJ1dGVgIHRha2VzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgbmFtZVxyXG4gKiB1c2VkIHdoZW4gaW5zdGFudGlhdGluZyBhIGNvbXBvbmVudCBpbiB0aGUgdGVtcGxhdGUuIFdoZW4gbm90IHByb3ZpZGVkLFxyXG4gKiB0aGUgbmFtZSBvZiB0aGUgZGVjb3JhdGVkIHByb3BlcnR5IGlzIHVzZWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQXR0cmlidXRlKGJpbmRpbmdQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFwiXCIpOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XHJcbiAgICAgICAgdGFyZ2V0Ll9iaW5kaW5ncyA9IHRhcmdldC5fYmluZGluZ3MgfHwge307XHJcbiAgICAgICAgdGFyZ2V0Ll9iaW5kaW5nc1twcm9wZXJ0eUtleV0gPSBgQCR7YmluZGluZ1Byb3BlcnR5TmFtZX1gO1xyXG4gICAgfTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJbmplY3QodHlwZT86IHN0cmluZyk6IFBhcmFtZXRlckRlY29yYXRvciB7XHJcbiAgICAvL3ZhciB0eXBlTmFtZSA9ICh0eXBlb2YgKHR5cGUpID09ICdzdHJpbmcnKSA/IHR5cGUgOiAvXmZ1bmN0aW9uXFxzKyhbXFx3XFwkXSspXFxzKlxcKC8uZXhlYyh0eXBlLnRvU3RyaW5nKCkpWzFdXHJcbiAgICByZXR1cm4gKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbWV0ZXJJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdmFyIHBhcmFtVHlwZTogYW55ID0gXCJcIjtcclxuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YSgnZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQpKVxyXG4gICAgICAgICAgICBwYXJhbVR5cGUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldClbcGFyYW1ldGVySW5kZXhdO1xyXG4gICAgICAgIHR5cGUgPSB0eXBlIHx8IHBhcmFtVHlwZS5zZWxlY3RvciB8fCBwYXJhbVR5cGUubmFtZVxyXG4gICAgICAgIGlmICghdHlwZSlcclxuICAgICAgICAgICAgdGhyb3cgXCJVbmtub3duIHR5cGUsIG5vdGhpbmcgdG8gaW5qZWN0XCJcclxuXHJcbiAgICAgICAgdmFyIGluamVjdGFibGUgPSBwcm9wZXJ0eUtleSA/IDxhbnk+dGFyZ2V0W3Byb3BlcnR5S2V5XSA6IDxhbnk+dGFyZ2V0O1xyXG4gICAgICAgIGlmICghaW5qZWN0YWJsZS4kaW5qZWN0KVxyXG4gICAgICAgICAgICBpbmplY3RhYmxlLiRpbmplY3QgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBpbmplY3RhYmxlLiRpbmplY3RbcGFyYW1ldGVySW5kZXhdID0gdHlwZTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBDb250cm9sbGVyKHBhcmFtZXRlcnM6IElEZWNvcmF0b3JQYXJhbWV0ZXJzKTogQ2xhc3NEZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuIDxURnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbj4odGFyZ2V0OiBURnVuY3Rpb24pID0+IHtcclxuICAgICAgICBwYXJhbWV0ZXJzLm1vZHVsZS5jb250cm9sbGVyKHBhcmFtZXRlcnMuc2VsZWN0b3IsIDxhbnk+dGFyZ2V0KTtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGVnYWN5Q29uc3RhbnQocGFyYW1ldGVyczogSURlY29yYXRvclBhcmFtZXRlcnMpOiBDbGFzc0RlY29yYXRvciB7XHJcbiAgICByZXR1cm4gPFRGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uPih0YXJnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHBhcmFtZXRlcnMubW9kdWxlLmNvbnN0YW50KHBhcmFtZXRlcnMuc2VsZWN0b3IsIG5ldyB0YXJnZXQoKSk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxufVxyXG4iLCIndXNlIHN0cmljdCc7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vbW9kdWxlXCI7IiwiJ3VzZSBzdHJpY3QnO1xyXG5pbXBvcnQgKiBhcyBhbmd1bGFyIGZyb20gJ2FuZ3VsYXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNb2R1bGUge1xyXG5cdHN0YXRpYyBDcmVhdGUoaWQ6IHN0cmluZywgcmVxdWlyZXM6IHN0cmluZ1tdKTogYW5ndWxhci5JTW9kdWxlIHtcclxuXHRcdHJldHVybiBhbmd1bGFyLm1vZHVsZShpZCwgcmVxdWlyZXMpO1xyXG5cdH1cclxufSIsIid1c2Ugc3RyaWN0JztcclxuaW1wb3J0ICogYXMgYW5ndWxhciBmcm9tICdhbmd1bGFyJztcclxuXHJcbmV4cG9ydCBtb2R1bGUgTmdVdGlscyB7XHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIElJbmplY3RhYmxlRnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbkNvbnN0cnVjdG9yIHtcclxuICAgICAgICAkaW5qZWN0OiBhbnlbXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgY2xhc3MsIHdyYXBzIGl0IGluIGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCBwcm9kdWNlcyBhIGNsYXNzIGluc3RhbmNlIHdoZXJlIHRoZSBzY29wZSBvZiBhbGwgaXRzIG1ldGhvZHMgYXJlIGJvdW5kIHRvIGl0c2VsZiAodGhpcylcclxuICAgICAqIEBwYXJhbSB0eXBlIGNsYXNzIHdoaWNoIGhhcyBhIHN0YXRpYyAkaW5qZWN0OmFueVtdIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBGYWN0b3J5PFQ+KHR5cGU6IFQpOiBhbnlbXSB7XHJcbiAgICAgICAgdmFyIHQgPSAoPElJbmplY3RhYmxlRnVuY3Rpb24+KDxhbnk+dHlwZSkpO1xyXG4gICAgICAgIHQuJGluamVjdCA9IHQuJGluamVjdCB8fCBbXTtcclxuICAgICAgICByZXR1cm4gdC4kaW5qZWN0LmNvbmNhdCgoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICB2YXIgYm91bmRUeXBlID0gdC5iaW5kLmFwcGx5KHR5cGUsIFtudWxsXS5jb25jYXQoYXJncykpO1xyXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgYm91bmRUeXBlKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmdW5jID0gaW5zdGFuY2VbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmdW5jKSA9PSBcImZ1bmN0aW9uXCIgJiYgdC4kaW5qZWN0LmluZGV4T2YocHJvcCkgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbcHJvcF0gPSBmdW5jLmJpbmQoaW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc3RyaW5nIGFuZCByZWN1cnNpdmVseSB0cmllcyB0byByZXNvbHZlIGl0IHVzaW5nIGEgZ2l2ZW4gcGFyc2Ugc2VydmljZSBhbmQgc2NvcGUuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gcGFyc2VcclxuICAgICAqIEBwYXJhbSAkcGFyc2UgUGFyc2VyIHRvIHVzZVxyXG4gICAgICogQHBhcmFtICRzY29wZSBTY29wZSB0byB1c2VcclxuICAgICAqL1xyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIFBhcnNlRXhwcmVzc2lvbk9yVmFsdWUodmFsdWU6IHN0cmluZywgJHBhcnNlOiBhbmd1bGFyLklQYXJzZVNlcnZpY2UsICRzY29wZTogYW5ndWxhci5JU2NvcGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgcGFyc2VkID0gJHBhcnNlKHZhbHVlKSgkc2NvcGUpO1xyXG4gICAgICAgICAgICBpZiAocGFyc2VkICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VFeHByZXNzaW9uT3JWYWx1ZShwYXJzZWQsICRwYXJzZSwgJHNjb3BlKTtcclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBEZWZpbmVNb2R1bGUobW9kdWxlSWQ6IHN0cmluZywgZGVwZW5kZW5jaWVzOiBzdHJpbmdbXSk6IGFuZ3VsYXIuSU1vZHVsZSB7XHJcbiAgICAgICAgcmV0dXJuIGFuZ3VsYXIubW9kdWxlKG1vZHVsZUlkLCBkZXBlbmRlbmNpZXMpO1xyXG4gICAgfVxyXG59IiwiKGZ1bmN0aW9uKCl7XHJcbi8vLzxyZWZlcmVuY2UgcGF0aD1cIi4uL3R5cGluZ3MvYW5ndWxhcmpzL2FuZ3VsYXIuZC50c1wiLz5cclxuLyoqXHJcbiAqIEBuYW1lIG5nT3V0bGV0XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBbiBuZ091dGxldCBpcyB3aGVyZSByZXNvbHZlZCBjb250ZW50IGdvZXMuXHJcbiAqXHJcbiAqICMjIFVzZVxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxkaXYgbmctb3V0bGV0PVwibmFtZVwiPjwvZGl2PlxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIHZhbHVlIGZvciB0aGUgYG5nT3V0bGV0YCBhdHRyaWJ1dGUgaXMgb3B0aW9uYWwuXHJcbiAqL1xyXG5mdW5jdGlvbiBuZ091dGxldERpcmVjdGl2ZSgkYW5pbWF0ZSwgJHEsICRyb290Um91dGVyKSB7XHJcbiAgICB2YXIgcm9vdFJvdXRlciA9ICRyb290Um91dGVyO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogJ0FFJyxcclxuICAgICAgICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsXHJcbiAgICAgICAgdGVybWluYWw6IHRydWUsXHJcbiAgICAgICAgcHJpb3JpdHk6IDQwMCxcclxuICAgICAgICByZXF1aXJlOiBbJz9eXm5nT3V0bGV0JywgJ25nT3V0bGV0J10sXHJcbiAgICAgICAgbGluazogb3V0bGV0TGluayxcclxuICAgICAgICBjb250cm9sbGVyOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGFzc18xKCkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjbGFzc18xO1xyXG4gICAgICAgIH0pKCksXHJcbiAgICAgICAgY29udHJvbGxlckFzOiAnJCRuZ091dGxldCdcclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBvdXRsZXRMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMsICR0cmFuc2NsdWRlKSB7XHJcbiAgICAgICAgdmFyIE91dGxldCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIE91dGxldChjb250cm9sbGVyLCByb3V0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBPdXRsZXQucHJvdG90eXBlLmNsZWFudXBMYXN0VmlldyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c0xlYXZlQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJGFuaW1hdGUuY2FuY2VsKHRoaXMucHJldmlvdXNMZWF2ZUFuaW1hdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0xlYXZlQW5pbWF0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTY29wZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNjb3BlLiRkZXN0cm95KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzTGVhdmVBbmltYXRpb24gPSAkYW5pbWF0ZS5sZWF2ZSh0aGlzLmN1cnJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzTGVhdmVBbmltYXRpb24udGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5wcmV2aW91c0xlYXZlQW5pbWF0aW9uID0gbnVsbDsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE91dGxldC5wcm90b3R5cGUucmV1c2UgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gJHEud2hlbih0cnVlKTtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0luc3RydWN0aW9uID0gdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENvbnRyb2xsZXIgJiYgdGhpcy5jdXJyZW50Q29udHJvbGxlci4kcm91dGVyT25SZXVzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSAkcS53aGVuKHRoaXMuY3VycmVudENvbnRyb2xsZXIuJHJvdXRlck9uUmV1c2UodGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24sIHByZXZpb3VzSW5zdHJ1Y3Rpb24pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBPdXRsZXQucHJvdG90eXBlLnJvdXRlckNhblJldXNlID0gZnVuY3Rpb24gKG5leHRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24gfHxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbi5jb21wb25lbnRUeXBlICE9PSBuZXh0SW5zdHJ1Y3Rpb24uY29tcG9uZW50VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50Q29udHJvbGxlciAmJiB0aGlzLmN1cnJlbnRDb250cm9sbGVyLiRyb3V0ZXJDYW5SZXVzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuY3VycmVudENvbnRyb2xsZXIuJHJvdXRlckNhblJldXNlKG5leHRJbnN0cnVjdGlvbiwgdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV4dEluc3RydWN0aW9uID09PSB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmVxdWFscyhuZXh0SW5zdHJ1Y3Rpb24ucGFyYW1zLCB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbi5wYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICRxLndoZW4ocmVzdWx0KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgT3V0bGV0LnByb3RvdHlwZS5yb3V0ZXJDYW5EZWFjdGl2YXRlID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29udHJvbGxlciAmJiB0aGlzLmN1cnJlbnRDb250cm9sbGVyLiRyb3V0ZXJDYW5EZWFjdGl2YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRxLndoZW4odGhpcy5jdXJyZW50Q29udHJvbGxlci4kcm91dGVyQ2FuRGVhY3RpdmF0ZShpbnN0cnVjdGlvbiwgdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAkcS53aGVuKHRydWUpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBPdXRsZXQucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDb250cm9sbGVyICYmIHRoaXMuY3VycmVudENvbnRyb2xsZXIuJHJvdXRlck9uRGVhY3RpdmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkcS53aGVuKHRoaXMuY3VycmVudENvbnRyb2xsZXIuJHJvdXRlck9uRGVhY3RpdmF0ZShpbnN0cnVjdGlvbiwgdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAkcS53aGVuKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIE91dGxldC5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzSW5zdHJ1Y3Rpb24gPSB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IHRoaXMuY29udHJvbGxlci4kJGNvbXBvbmVudE5hbWUgPSBpbnN0cnVjdGlvbi5jb21wb25lbnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnROYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGlzIG5vdCBhIHN0cmluZyBmb3IgJyArIGluc3RydWN0aW9uLnVybFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLiQkdGVtcGxhdGUgPSAnPCcgKyBkYXNoQ2FzZShjb21wb25lbnROYW1lKSArICcgJHJvdXRlcj1cIjo6JCRyb3V0ZXJcIj48LycgK1xyXG4gICAgICAgICAgICAgICAgICAgIGRhc2hDYXNlKGNvbXBvbmVudE5hbWUpICsgJz4nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLiQkcm91dGVyID0gdGhpcy5yb3V0ZXIuY2hpbGRSb3V0ZXIoaW5zdHJ1Y3Rpb24uY29tcG9uZW50VHlwZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuJCRvdXRsZXQgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1Njb3BlID0gc2NvcGUuJG5ldygpO1xyXG4gICAgICAgICAgICAgICAgbmV3U2NvcGUuJCRyb3V0ZXIgPSB0aGlzLmNvbnRyb2xsZXIuJCRyb3V0ZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmVycmVkQWN0aXZhdGlvbiA9ICRxLmRlZmVyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkdHJhbnNjbHVkZShuZXdTY29wZSwgZnVuY3Rpb24gKGNsb25lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJGFuaW1hdGUuZW50ZXIoY2xvbmUsIG51bGwsIF90aGlzLmN1cnJlbnRFbGVtZW50IHx8IGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmNsZWFudXBMYXN0VmlldygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbGVtZW50ID0gY2xvbmU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTY29wZSA9IG5ld1Njb3BlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmZXJyZWRBY3RpdmF0aW9uLnByb21pc2U7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBPdXRsZXQ7XHJcbiAgICAgICAgfSkoKTtcclxuICAgICAgICB2YXIgcGFyZW50Q3RybCA9IGN0cmxzWzBdLCBteUN0cmwgPSBjdHJsc1sxXSwgcm91dGVyID0gKHBhcmVudEN0cmwgJiYgcGFyZW50Q3RybC4kJHJvdXRlcikgfHwgcm9vdFJvdXRlcjtcclxuICAgICAgICBteUN0cmwuJCRjdXJyZW50Q29tcG9uZW50ID0gbnVsbDtcclxuICAgICAgICByb3V0ZXIucmVnaXN0ZXJQcmltYXJ5T3V0bGV0KG5ldyBPdXRsZXQobXlDdHJsLCByb3V0ZXIpKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBkaXJlY3RpdmUgaXMgcmVzcG9uc2libGUgZm9yIGNvbXBpbGluZyB0aGUgY29udGVudHMgb2Ygbmctb3V0bGV0XHJcbiAqL1xyXG5mdW5jdGlvbiBuZ091dGxldEZpbGxDb250ZW50RGlyZWN0aXZlKCRjb21waWxlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3RyaWN0OiAnRUEnLFxyXG4gICAgICAgIHByaW9yaXR5OiAtNDAwLFxyXG4gICAgICAgIHJlcXVpcmU6ICduZ091dGxldCcsXHJcbiAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybCkge1xyXG4gICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBjdHJsLiQkdGVtcGxhdGU7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuaHRtbCh0ZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgICRjb21waWxlKGVsZW1lbnQuY29udGVudHMoKSkoc2NvcGUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gcm91dGVyVHJpZ2dlckRpcmVjdGl2ZSgkcSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXF1aXJlOiAnXm5nT3V0bGV0JyxcclxuICAgICAgICBwcmlvcml0eTogLTEwMDAsXHJcbiAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBuZ091dGxldEN0cmwpIHtcclxuICAgICAgICAgICAgdmFyIHByb21pc2UgPSAkcS53aGVuKCk7XHJcbiAgICAgICAgICAgIHZhciBvdXRsZXQgPSBuZ091dGxldEN0cmwuJCRvdXRsZXQ7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50Q29tcG9uZW50ID0gb3V0bGV0LmN1cnJlbnRDb250cm9sbGVyID1cclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJvbGxlcihuZ091dGxldEN0cmwuJCRjb21wb25lbnROYW1lKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21wb25lbnQuJHJvdXRlck9uQWN0aXZhdGUpIHtcclxuICAgICAgICAgICAgICAgIHByb21pc2UgPSAkcS53aGVuKGN1cnJlbnRDb21wb25lbnQuJHJvdXRlck9uQWN0aXZhdGUob3V0bGV0LmN1cnJlbnRJbnN0cnVjdGlvbiwgb3V0bGV0LnByZXZpb3VzSW5zdHJ1Y3Rpb24pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4ob3V0bGV0LmRlZmVycmVkQWN0aXZhdGlvbi5yZXNvbHZlLCBvdXRsZXQuZGVmZXJyZWRBY3RpdmF0aW9uLnJlamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQG5hbWUgbmdMaW5rXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBMZXRzIHlvdSBsaW5rIHRvIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgYXBwLCBhbmQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgaHJlZnMuXHJcbiAqXHJcbiAqICMjIFVzZVxyXG4gKiBUaGUgZGlyZWN0aXZlIHVzZXMgYSBzaW1wbGUgc3ludGF4OiBgbmctbGluaz1cImNvbXBvbmVudE5hbWUoeyBwYXJhbTogcGFyYW1WYWx1ZSB9KVwiYFxyXG4gKlxyXG4gKiAjIyMgRXhhbXBsZVxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiBhbmd1bGFyLm1vZHVsZSgnbXlBcHAnLCBbJ25nQ29tcG9uZW50Um91dGVyJ10pXHJcbiAqICAgLmNvbnRyb2xsZXIoJ0FwcENvbnRyb2xsZXInLCBbJyRyb290Um91dGVyJywgZnVuY3Rpb24oJHJvb3RSb3V0ZXIpIHtcclxuICogICAgICRyb290Um91dGVyLmNvbmZpZyh7IHBhdGg6ICcvdXNlci86aWQnLCBjb21wb25lbnQ6ICd1c2VyJyB9KTtcclxuICogICAgIHRoaXMudXNlciA9IHsgbmFtZTogJ0JyaWFuJywgaWQ6IDEyMyB9O1xyXG4gKiAgIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJBcHBDb250cm9sbGVyIGFzIGFwcFwiPlxyXG4gKiAgIDxhIG5nLWxpbms9XCJ1c2VyKHtpZDogYXBwLnVzZXIuaWR9KVwiPnt7YXBwLnVzZXIubmFtZX19PC9hPlxyXG4gKiA8L2Rpdj5cclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBuZ0xpbmtEaXJlY3RpdmUoJHJvb3RSb3V0ZXIsICRwYXJzZSkge1xyXG4gICAgcmV0dXJuIHsgcmVxdWlyZTogJz9eXm5nT3V0bGV0JywgcmVzdHJpY3Q6ICdBJywgbGluazogbmdMaW5rRGlyZWN0aXZlTGlua0ZuIH07XHJcbiAgICBmdW5jdGlvbiBuZ0xpbmtEaXJlY3RpdmVMaW5rRm4oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBjdHJsKSB7XHJcbiAgICAgICAgdmFyIHJvdXRlciA9IChjdHJsICYmIGN0cmwuJCRyb3V0ZXIpIHx8ICRyb290Um91dGVyO1xyXG4gICAgICAgIGlmICghcm91dGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5hdmlnYXRpb25JbnN0cnVjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdmFyIGxpbmsgPSBhdHRycy5uZ0xpbmsgfHwgJyc7XHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0TGluayhwYXJhbXMpIHtcclxuICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uID0gcm91dGVyLmdlbmVyYXRlKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaChmdW5jdGlvbiAoKSB7IHJldHVybiByb3V0ZXIuaXNSb3V0ZUFjdGl2ZShuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24pOyB9LCBmdW5jdGlvbiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRDbGFzcygnbmctbGluay1hY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ25nLWxpbmstYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgbmF2aWdhdGlvbkhyZWYgPSBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24udG9MaW5rVXJsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAkcm9vdFJvdXRlci5fbG9jYXRpb24ucHJlcGFyZUV4dGVybmFsVXJsKG5hdmlnYXRpb25IcmVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJvdXRlUGFyYW1zR2V0dGVyID0gJHBhcnNlKGxpbmspO1xyXG4gICAgICAgIC8vIHdlIGNhbiBhdm9pZCBhZGRpbmcgYSB3YXRjaGVyIGlmIGl0J3MgYSBsaXRlcmFsXHJcbiAgICAgICAgaWYgKHJvdXRlUGFyYW1zR2V0dGVyLmNvbnN0YW50KSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSByb3V0ZVBhcmFtc0dldHRlcigpO1xyXG4gICAgICAgICAgICBlbGVtZW50LmF0dHIoJ2hyZWYnLCBnZXRMaW5rKHBhcmFtcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJvdXRlUGFyYW1zR2V0dGVyKHNjb3BlKTsgfSwgZnVuY3Rpb24gKHBhcmFtcykgeyByZXR1cm4gZWxlbWVudC5hdHRyKCdocmVmJywgZ2V0TGluayhwYXJhbXMpKTsgfSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC53aGljaCAhPT0gMSB8fCAhbmF2aWdhdGlvbkluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJHJvb3RSb3V0ZXIubmF2aWdhdGVCeUluc3RydWN0aW9uKG5hdmlnYXRpb25JbnN0cnVjdGlvbik7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gZGFzaENhc2Uoc3RyKSB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uIChtYXRjaCkgeyByZXR1cm4gJy0nICsgbWF0Y2gudG9Mb3dlckNhc2UoKTsgfSk7XHJcbn1cclxuLypcclxuICogQSBtb2R1bGUgZm9yIGFkZGluZyBuZXcgYSByb3V0aW5nIHN5c3RlbSBBbmd1bGFyIDEuXHJcbiAqL1xyXG5hbmd1bGFyLm1vZHVsZSgnbmdDb21wb25lbnRSb3V0ZXInLCBbXSlcclxuICAgIC5kaXJlY3RpdmUoJ25nT3V0bGV0JywgWyckYW5pbWF0ZScsICckcScsICckcm9vdFJvdXRlcicsIG5nT3V0bGV0RGlyZWN0aXZlXSlcclxuICAgIC5kaXJlY3RpdmUoJ25nT3V0bGV0JywgWyckY29tcGlsZScsIG5nT3V0bGV0RmlsbENvbnRlbnREaXJlY3RpdmVdKVxyXG4gICAgLmRpcmVjdGl2ZSgnbmdMaW5rJywgWyckcm9vdFJvdXRlcicsICckcGFyc2UnLCBuZ0xpbmtEaXJlY3RpdmVdKVxyXG4gICAgLmRpcmVjdGl2ZSgnJHJvdXRlcicsIFsnJHEnLCByb3V0ZXJUcmlnZ2VyRGlyZWN0aXZlXSk7XHJcblxyXG5hbmd1bGFyLm1vZHVsZSgnbmdDb21wb25lbnRSb3V0ZXInKS5cclxuICAgIHZhbHVlKCckcm91dGUnLCBudWxsKS4gLy8gY2FuIGJlIG92ZXJsb2FkZWQgd2l0aCBuZ1JvdXRlU2hpbVxyXG4gICAgLy8gQmVjYXVzZSBBbmd1bGFyIDEgaGFzIG5vIG5vdGlvbiBvZiBhIHJvb3QgY29tcG9uZW50LCB3ZSB1c2UgYW4gb2JqZWN0IHdpdGggdW5pcXVlIGlkZW50aXR5XHJcbiAgICAvLyB0byByZXByZXNlbnQgdGhpcy4gQ2FuIGJlIG92ZXJsb2FkZWQgd2l0aCBhIGNvbXBvbmVudCBuYW1lXHJcbiAgICB2YWx1ZSgnJHJvdXRlclJvb3RDb21wb25lbnQnLCBuZXcgT2JqZWN0KCkpLlxyXG5cclxuICAgIC8vIFVuZm9ydHVuYXRlbHksICRsb2NhdGlvbiBkb2Vzbid0IGV4cG9zZSB3aGF0IHRoZSBjdXJyZW50IGhhc2hQcmVmaXggaXNcclxuICAgIC8vIFNvIHdlIGhhdmUgdG8gbW9ua2V5IHBhdGNoIHRoZSAkbG9jYXRpb25Qcm92aWRlciB0byBjYXB0dXJlIHRoaXMgdmFsdWVcclxuICAgIHByb3ZpZGVyKCckbG9jYXRpb25IYXNoUHJlZml4JywgWyckbG9jYXRpb25Qcm92aWRlcicsICRsb2NhdGlvbkhhc2hQcmVmaXhQcm92aWRlcl0pLlxyXG4gICAgZmFjdG9yeSgnJHJvb3RSb3V0ZXInLCBbJyRxJywgJyRsb2NhdGlvbicsICckYnJvd3NlcicsICckcm9vdFNjb3BlJywgJyRpbmplY3RvcicsICckcm91dGVyUm9vdENvbXBvbmVudCcsICckbG9jYXRpb25IYXNoUHJlZml4Jywgcm91dGVyRmFjdG9yeV0pO1xyXG5cclxuZnVuY3Rpb24gJGxvY2F0aW9uSGFzaFByZWZpeFByb3ZpZGVyKCRsb2NhdGlvblByb3ZpZGVyKSB7XHJcblxyXG4gIC8vIEdldCBob2xkIG9mIHRoZSBvcmlnaW5hbCBoYXNoUHJlZml4IG1ldGhvZFxyXG4gIHZhciBoYXNoUHJlZml4Rm4gPSAkbG9jYXRpb25Qcm92aWRlci5oYXNoUHJlZml4LmJpbmQoJGxvY2F0aW9uUHJvdmlkZXIpO1xyXG5cclxuICAvLyBSZWFkIHRoZSBjdXJyZW50IGhhc2hQcmVmaXggKGluIGNhc2UgaXQgd2FzIHNldCBiZWZvcmUgdGhpcyBtb25rZXktcGF0Y2ggb2NjdXJyZWQpXHJcbiAgdmFyIGhhc2hQcmVmaXggPSBoYXNoUHJlZml4Rm4oKTtcclxuXHJcbiAgLy8gT3ZlcnJpZGUgdGhlIGhlbHBlciBzbyB0aGF0IHdlIGNhbiByZWFkIGFueSBjaGFuZ2VzIHRvIHRoZSBwcmVmaXggKGFmdGVyIHRoaXMgbW9ua2V5LXBhdGNoKVxyXG4gICRsb2NhdGlvblByb3ZpZGVyLmhhc2hQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgpIHtcclxuICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChwcmVmaXgpKSB7XHJcbiAgICAgIGhhc2hQcmVmaXggPSBwcmVmaXg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGFzaFByZWZpeEZuKHByZWZpeCk7XHJcbiAgfVxyXG5cclxuICAvLyBSZXR1cm4gdGhlIGZpbmFsIGhhc2hQcmVmaXggYXMgdGhlIHZhbHVlIG9mIHRoaXMgc2VydmljZVxyXG4gIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzaFByZWZpeDsgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gcm91dGVyRmFjdG9yeSgkcSwgJGxvY2F0aW9uLCAkYnJvd3NlciwgJHJvb3RTY29wZSwgJGluamVjdG9yLCAkcm91dGVyUm9vdENvbXBvbmVudCwgJGxvY2F0aW9uSGFzaFByZWZpeCkge1xyXG5cclxuICAvLyBXaGVuIHRoaXMgZmlsZSBpcyBwcm9jZXNzZWQsIHRoZSBsaW5lIGJlbG93IGlzIHJlcGxhY2VkIHdpdGhcclxuICAvLyB0aGUgY29udGVudHMgb2YgYC4uL2xpYi9mYWNhZGVzLmVzNWAuXHJcbiAgZnVuY3Rpb24gQ09OU1QoKSB7XHJcbiAgcmV0dXJuIChmdW5jdGlvbih0YXJnZXQpIHtcclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENPTlNUX0VYUFIoZXhwcikge1xyXG4gIHJldHVybiBleHByO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ByZXNlbnQgKHgpIHtcclxuICByZXR1cm4gISF4O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0JsYW5rICh4KSB7XHJcbiAgcmV0dXJuICF4O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcclxuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZyc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVHlwZSAoeCkge1xyXG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTdHJpbmdNYXAob2JqKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBcnJheShvYmopIHtcclxuICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUeXBlTmFtZUZvckRlYnVnZ2luZyAoZm4pIHtcclxuICByZXR1cm4gZm4ubmFtZSB8fCAnUm9vdCc7XHJcbn1cclxuXHJcbnZhciBQcm9taXNlV3JhcHBlciA9IHtcclxuICByZXNvbHZlOiBmdW5jdGlvbiAocmVhc29uKSB7XHJcbiAgICByZXR1cm4gJHEud2hlbihyZWFzb24pO1xyXG4gIH0sXHJcblxyXG4gIHJlamVjdDogZnVuY3Rpb24gKHJlYXNvbikge1xyXG4gICAgcmV0dXJuICRxLnJlamVjdChyZWFzb24pO1xyXG4gIH0sXHJcblxyXG4gIGNhdGNoRXJyb3I6IGZ1bmN0aW9uIChwcm9taXNlLCBmbikge1xyXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihudWxsLCBmbik7XHJcbiAgfSxcclxuICBhbGw6IGZ1bmN0aW9uIChwcm9taXNlcykge1xyXG4gICAgcmV0dXJuICRxLmFsbChwcm9taXNlcyk7XHJcbiAgfVxyXG59O1xyXG5cclxudmFyIFJlZ0V4cFdyYXBwZXIgPSB7XHJcbiAgY3JlYXRlOiBmdW5jdGlvbihyZWdFeHBTdHIsIGZsYWdzKSB7XHJcbiAgICBmbGFncyA9IGZsYWdzID8gZmxhZ3MucmVwbGFjZSgvZy9nLCAnJykgOiAnJztcclxuICAgIHJldHVybiBuZXcgUmVnRXhwKHJlZ0V4cFN0ciwgZmxhZ3MgKyAnZycpO1xyXG4gIH0sXHJcbiAgZmlyc3RNYXRjaDogZnVuY3Rpb24ocmVnRXhwLCBpbnB1dCkge1xyXG4gICAgcmVnRXhwLmxhc3RJbmRleCA9IDA7XHJcbiAgICByZXR1cm4gcmVnRXhwLmV4ZWMoaW5wdXQpO1xyXG4gIH0sXHJcbiAgbWF0Y2hlcjogZnVuY3Rpb24gKHJlZ0V4cCwgaW5wdXQpIHtcclxuICAgIHJlZ0V4cC5sYXN0SW5kZXggPSAwO1xyXG4gICAgcmV0dXJuIHsgcmU6IHJlZ0V4cCwgaW5wdXQ6IGlucHV0IH07XHJcbiAgfVxyXG59O1xyXG5cclxudmFyIHJlZmxlY3RvciA9IHtcclxuICBhbm5vdGF0aW9uczogZnVuY3Rpb24gKGZuKSB7XHJcbiAgICAvL1RPRE86IGltcGxlbWVudCBtZVxyXG4gICAgcmV0dXJuIGZuLmFubm90YXRpb25zIHx8IFtdO1xyXG4gIH1cclxufTtcclxuXHJcbnZhciBNYXBXcmFwcGVyID0ge1xyXG4gIGNyZWF0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IE1hcCgpO1xyXG4gIH0sXHJcblxyXG4gIGdldDogZnVuY3Rpb24obSwgaykge1xyXG4gICAgcmV0dXJuIG0uZ2V0KGspO1xyXG4gIH0sXHJcblxyXG4gIHNldDogZnVuY3Rpb24obSwgaywgdikge1xyXG4gICAgcmV0dXJuIG0uc2V0KGssIHYpO1xyXG4gIH0sXHJcblxyXG4gIGNvbnRhaW5zOiBmdW5jdGlvbiAobSwgaykge1xyXG4gICAgcmV0dXJuIG0uaGFzKGspO1xyXG4gIH0sXHJcblxyXG4gIGZvckVhY2g6IGZ1bmN0aW9uIChtLCBmbikge1xyXG4gICAgcmV0dXJuIG0uZm9yRWFjaChmbik7XHJcbiAgfVxyXG59O1xyXG5cclxudmFyIFN0cmluZ01hcFdyYXBwZXIgPSB7XHJcbiAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfSxcclxuXHJcbiAgc2V0OiBmdW5jdGlvbiAobSwgaywgdikge1xyXG4gICAgcmV0dXJuIG1ba10gPSB2O1xyXG4gIH0sXHJcblxyXG4gIGdldDogZnVuY3Rpb24gKG0sIGspIHtcclxuICAgIHJldHVybiBtLmhhc093blByb3BlcnR5KGspID8gbVtrXSA6IHVuZGVmaW5lZDtcclxuICB9LFxyXG5cclxuICBjb250YWluczogZnVuY3Rpb24gKG0sIGspIHtcclxuICAgIHJldHVybiBtLmhhc093blByb3BlcnR5KGspO1xyXG4gIH0sXHJcblxyXG4gIGtleXM6IGZ1bmN0aW9uKG1hcCkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XHJcbiAgfSxcclxuXHJcbiAgaXNFbXB0eTogZnVuY3Rpb24obWFwKSB7XHJcbiAgICBmb3IgKHZhciBwcm9wIGluIG1hcCkge1xyXG4gICAgICBpZiAobWFwLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBkZWxldGU6IGZ1bmN0aW9uKG1hcCwga2V5KSB7XHJcbiAgICBkZWxldGUgbWFwW2tleV07XHJcbiAgfSxcclxuXHJcbiAgZm9yRWFjaDogZnVuY3Rpb24gKG0sIGZuKSB7XHJcbiAgICBmb3IgKHZhciBwcm9wIGluIG0pIHtcclxuICAgICAgaWYgKG0uaGFzT3duUHJvcGVydHkocHJvcCkpIHtcclxuICAgICAgICBmbihtW3Byb3BdLCBwcm9wKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGVxdWFsczogZnVuY3Rpb24gKG0xLCBtMikge1xyXG4gICAgdmFyIGsxID0gT2JqZWN0LmtleXMobTEpO1xyXG4gICAgdmFyIGsyID0gT2JqZWN0LmtleXMobTIpO1xyXG4gICAgaWYgKGsxLmxlbmd0aCAhPSBrMi5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgazEubGVuZ3RoOyBpKyspIHtcclxuICAgICAga2V5ID0gazFbaV07XHJcbiAgICAgIGlmIChtMVtrZXldICE9PSBtMltrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9LFxyXG5cclxuICBtZXJnZTogZnVuY3Rpb24obTEsIG0yKSB7XHJcbiAgICB2YXIgbSA9IHt9O1xyXG4gICAgZm9yICh2YXIgYXR0ciBpbiBtMSkge1xyXG4gICAgICBpZiAobTEuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcclxuICAgICAgICBtW2F0dHJdID0gbTFbYXR0cl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGF0dHIgaW4gbTIpIHtcclxuICAgICAgaWYgKG0yLmhhc093blByb3BlcnR5KGF0dHIpKSB7XHJcbiAgICAgICAgbVthdHRyXSA9IG0yW2F0dHJdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbTtcclxuICB9XHJcbn07XHJcblxyXG52YXIgTGlzdCA9IEFycmF5O1xyXG52YXIgTGlzdFdyYXBwZXIgPSB7XHJcbiAgdG9KU09OOiBmdW5jdGlvbihsKSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobCk7XHJcbiAgfSxcclxuXHJcbiAgY2xlYXI6IGZ1bmN0aW9uIChsKSB7XHJcbiAgICBsLmxlbmd0aCA9IDA7XHJcbiAgfSxcclxuXHJcbiAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfSxcclxuXHJcbiAgcHVzaDogZnVuY3Rpb24gKGwsIHYpIHtcclxuICAgIHJldHVybiBsLnB1c2godik7XHJcbiAgfSxcclxuXHJcbiAgZm9yRWFjaDogZnVuY3Rpb24gKGwsIGZuKSB7XHJcbiAgICByZXR1cm4gbC5mb3JFYWNoKGZuKTtcclxuICB9LFxyXG5cclxuICBmaXJzdDogZnVuY3Rpb24oYXJyYXkpIHtcclxuICAgIGlmICghYXJyYXkpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIGFycmF5WzBdO1xyXG4gIH0sXHJcblxyXG4gIGxhc3Q6IGZ1bmN0aW9uKGFycmF5KSB7XHJcbiAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPiAwID8gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV0gOiBudWxsO1xyXG4gIH0sXHJcblxyXG4gIG1hcDogZnVuY3Rpb24gKGwsIGZuKSB7XHJcbiAgICByZXR1cm4gbC5tYXAoZm4pO1xyXG4gIH0sXHJcblxyXG4gIGpvaW46IGZ1bmN0aW9uIChsLCBzdHIpIHtcclxuICAgIHJldHVybiBsLmpvaW4oc3RyKTtcclxuICB9LFxyXG5cclxuICByZWR1Y2U6IGZ1bmN0aW9uKGxpc3QsIGZuLCBpbml0KSB7XHJcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZm4sIGluaXQpO1xyXG4gIH0sXHJcblxyXG4gIGZpbHRlcjogZnVuY3Rpb24oYXJyYXksIHByZWQpIHtcclxuICAgIHJldHVybiBhcnJheS5maWx0ZXIocHJlZCk7XHJcbiAgfSxcclxuXHJcbiAgY29uY2F0OiBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gYS5jb25jYXQoYik7XHJcbiAgfSxcclxuXHJcbiAgc2xpY2U6IGZ1bmN0aW9uKGwpIHtcclxuICAgIHZhciBmcm9tID0gYXJndW1lbnRzWzFdICE9PSAodm9pZCAwKSA/IGFyZ3VtZW50c1sxXSA6IDA7XHJcbiAgICB2YXIgdG8gPSBhcmd1bWVudHNbMl0gIT09ICh2b2lkIDApID8gYXJndW1lbnRzWzJdIDogbnVsbDtcclxuICAgIHJldHVybiBsLnNsaWNlKGZyb20sIHRvID09PSBudWxsID8gdW5kZWZpbmVkIDogdG8pO1xyXG4gIH0sXHJcblxyXG4gIG1heGltdW06IGZ1bmN0aW9uKGxpc3QsIHByZWRpY2F0ZSkge1xyXG4gICAgaWYgKGxpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2YXIgc29sdXRpb24gPSBudWxsO1xyXG4gICAgdmFyIG1heFZhbHVlID0gLUluZmluaXR5O1xyXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHZhciBjYW5kaWRhdGUgPSBsaXN0W2luZGV4XTtcclxuICAgICAgaWYgKGlzQmxhbmsoY2FuZGlkYXRlKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBjYW5kaWRhdGVWYWx1ZSA9IHByZWRpY2F0ZShjYW5kaWRhdGUpO1xyXG4gICAgICBpZiAoY2FuZGlkYXRlVmFsdWUgPiBtYXhWYWx1ZSkge1xyXG4gICAgICAgIHNvbHV0aW9uID0gY2FuZGlkYXRlO1xyXG4gICAgICAgIG1heFZhbHVlID0gY2FuZGlkYXRlVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzb2x1dGlvbjtcclxuICB9XHJcbn07XHJcblxyXG52YXIgU3RyaW5nV3JhcHBlciA9IHtcclxuICBjaGFyQ29kZUF0OiBmdW5jdGlvbihzLCBpKSB7XHJcbiAgICByZXR1cm4gcy5jaGFyQ29kZUF0KGkpO1xyXG4gIH0sXHJcblxyXG4gIGVxdWFsczogZnVuY3Rpb24gKHMxLCBzMikge1xyXG4gICAgcmV0dXJuIHMxID09PSBzMjtcclxuICB9LFxyXG5cclxuICBzcGxpdDogZnVuY3Rpb24ocywgcmUpIHtcclxuICAgIHJldHVybiBzLnNwbGl0KHJlKTtcclxuICB9LFxyXG5cclxuICByZXBsYWNlQWxsOiBmdW5jdGlvbihzLCBmcm9tLCByZXBsYWNlKSB7XHJcbiAgICByZXR1cm4gcy5yZXBsYWNlKGZyb20sIHJlcGxhY2UpO1xyXG4gIH0sXHJcblxyXG4gIHJlcGxhY2VBbGxNYXBwZWQ6IGZ1bmN0aW9uKHMsIGZyb20sIGNiKSB7XHJcbiAgICByZXR1cm4gcy5yZXBsYWNlKGZyb20sIGZ1bmN0aW9uKG1hdGNoZXMpIHtcclxuICAgICAgLy8gUmVtb3ZlIG9mZnNldCAmIHN0cmluZyBmcm9tIHRoZSByZXN1bHQgYXJyYXlcclxuICAgICAgbWF0Y2hlcy5zcGxpY2UoLTIsIDIpO1xyXG4gICAgICAvLyBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgbWF0Y2gsIHAxLCAuLi4sIHBuXHJcbiAgICAgIHJldHVybiBjYi5hcHBseShudWxsLCBtYXRjaGVzKTtcclxuICAgIH0pO1xyXG4gIH0sXHJcblxyXG4gIGNvbnRhaW5zOiBmdW5jdGlvbihzLCBzdWJzdHIpIHtcclxuICAgIHJldHVybiBzLmluZGV4T2Yoc3Vic3RyKSAhPSAtMTtcclxuICB9XHJcblxyXG59O1xyXG5cclxuLy9UT0RPOiBpbXBsZW1lbnQ/XHJcbi8vIEkgdGhpbmsgaXQncyB0b28gaGVhdnkgdG8gYXNrIDEueCB1c2VycyB0byBicmluZyBpbiBSeCBmb3IgdGhlIHJvdXRlci4uLlxyXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7fVxyXG5cclxudmFyIEJhc2VFeGNlcHRpb24gPSBFcnJvcjtcclxuXHJcbnZhciBPYnNlcnZhYmxlV3JhcHBlciA9IHtcclxuICBjYWxsTmV4dDogZnVuY3Rpb24ob2IsIHZhbCkge1xyXG4gICAgb2IuZm4odmFsKTtcclxuICB9LFxyXG4gIGNhbGxFbWl0OiBmdW5jdGlvbihvYiwgdmFsKSB7XHJcbiAgICBvYi5mbih2YWwpO1xyXG4gIH0sXHJcblxyXG4gIHN1YnNjcmliZTogZnVuY3Rpb24ob2IsIGZuKSB7XHJcbiAgICBvYi5mbiA9IGZuO1xyXG4gIH1cclxufTtcclxuXHJcbi8vIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvYmxvYi9tYXN0ZXIvc3JjL25nL2Jyb3dzZXIuanMjTDIyNy1MMjY1XHJcbnZhciAkX19yb3V0ZXJfNDdfbG9jYXRpb25fXyA9IHtcclxuICBMb2NhdGlvbjogTG9jYXRpb25cclxufTtcclxuXHJcbmZ1bmN0aW9uIExvY2F0aW9uKCl7fVxyXG5Mb2NhdGlvbi5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gIC8vVE9ETzogaW1wbGVtZW50XHJcbn07XHJcbkxvY2F0aW9uLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gKCkge1xyXG4gIHJldHVybiAkbG9jYXRpb24udXJsKCk7XHJcbn07XHJcbkxvY2F0aW9uLnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIChwYXRoLCBxdWVyeSkge1xyXG4gIHJldHVybiAkbG9jYXRpb24udXJsKHBhdGggKyBxdWVyeSk7XHJcbn07XHJcbkxvY2F0aW9uLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmwgPSBmdW5jdGlvbih1cmwpIHtcclxuICBpZiAodXJsLmxlbmd0aCA+IDAgJiYgIXVybC5zdGFydHNXaXRoKCcvJykpIHtcclxuICAgIHVybCA9ICcvJyArIHVybDtcclxuICB9XHJcbiAgcmV0dXJuICRsb2NhdGlvbi4kJGh0bWw1ID8gJy4nICsgdXJsIDogJyMnICsgJGxvY2F0aW9uSGFzaFByZWZpeCArIHVybDtcclxufTtcclxuXHJcblxyXG4gIHZhciBleHBvcnRzID0ge1xyXG4gICAgSW5qZWN0YWJsZTogZnVuY3Rpb24gKCkge30sXHJcbiAgICBPcGFxdWVUb2tlbjogZnVuY3Rpb24gKCkge30sXHJcbiAgICBJbmplY3Q6IGZ1bmN0aW9uICgpIHt9XHJcbiAgfTtcclxuICB2YXIgcm91dGVyUmVxdWlyZSA9IGZ1bmN0aW9uICgpIHtyZXR1cm4gZXhwb3J0czt9O1xyXG5cclxuICAvLyBXaGVuIHRoaXMgZmlsZSBpcyBwcm9jZXNzZWQsIHRoZSBsaW5lIGJlbG93IGlzIHJlcGxhY2VkIHdpdGhcclxuICAvLyB0aGUgY29udGVudHMgb2YgdGhlIGNvbXBpbGVkIFR5cGVTY3JpcHQgY2xhc3Nlcy5cclxuICB2YXIgVG91Y2hNYXAgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVG91Y2hNYXAobWFwKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLm1hcCA9IHt9O1xyXG4gICAgICAgIHRoaXMua2V5cyA9IHt9O1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQobWFwKSkge1xyXG4gICAgICAgICAgICBTdHJpbmdNYXBXcmFwcGVyLmZvckVhY2gobWFwLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubWFwW2tleV0gPSBpc1ByZXNlbnQodmFsdWUpID8gdmFsdWUudG9TdHJpbmcoKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5rZXlzW2tleV0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBUb3VjaE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIFN0cmluZ01hcFdyYXBwZXIuZGVsZXRlKHRoaXMua2V5cywga2V5KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXBba2V5XTtcclxuICAgIH07XHJcbiAgICBUb3VjaE1hcC5wcm90b3R5cGUuZ2V0VW51c2VkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVudXNlZCA9IHt9O1xyXG4gICAgICAgIHZhciBrZXlzID0gU3RyaW5nTWFwV3JhcHBlci5rZXlzKHRoaXMua2V5cyk7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHVudXNlZFtrZXldID0gU3RyaW5nTWFwV3JhcHBlci5nZXQoX3RoaXMubWFwLCBrZXkpOyB9KTtcclxuICAgICAgICByZXR1cm4gdW51c2VkO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBUb3VjaE1hcDtcclxufSkoKTtcclxuZXhwb3J0cy5Ub3VjaE1hcCA9IFRvdWNoTWFwO1xyXG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmcob2JqKSB7XHJcbiAgICBpZiAoaXNCbGFuayhvYmopKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5ub3JtYWxpemVTdHJpbmcgPSBub3JtYWxpemVTdHJpbmc7XHJcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn07XHJcbmZ1bmN0aW9uIGNvbnZlcnRVcmxQYXJhbXNUb0FycmF5KHVybFBhcmFtcykge1xyXG4gICAgdmFyIHBhcmFtc0FycmF5ID0gW107XHJcbiAgICBpZiAoaXNCbGFuayh1cmxQYXJhbXMpKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgU3RyaW5nTWFwV3JhcHBlci5mb3JFYWNoKHVybFBhcmFtcywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsgcGFyYW1zQXJyYXkucHVzaCgodmFsdWUgPT09IHRydWUpID8ga2V5IDoga2V5ICsgJz0nICsgdmFsdWUpOyB9KTtcclxuICAgIHJldHVybiBwYXJhbXNBcnJheTtcclxufVxyXG5leHBvcnRzLmNvbnZlcnRVcmxQYXJhbXNUb0FycmF5ID0gY29udmVydFVybFBhcmFtc1RvQXJyYXk7XHJcbi8vIENvbnZlcnQgYW4gb2JqZWN0IG9mIHVybCBwYXJhbWV0ZXJzIGludG8gYSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbiBVUkxcclxuZnVuY3Rpb24gc2VyaWFsaXplUGFyYW1zKHVybFBhcmFtcywgam9pbmVyKSB7XHJcbiAgICBpZiAoam9pbmVyID09PSB2b2lkIDApIHsgam9pbmVyID0gJyYnOyB9XHJcbiAgICByZXR1cm4gY29udmVydFVybFBhcmFtc1RvQXJyYXkodXJsUGFyYW1zKS5qb2luKGpvaW5lcik7XHJcbn1cclxuZXhwb3J0cy5zZXJpYWxpemVQYXJhbXMgPSBzZXJpYWxpemVQYXJhbXM7XHJcbi8qKlxyXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwYXJzZWQgVVJMXHJcbiAqL1xyXG52YXIgVXJsID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFVybChwYXRoLCBjaGlsZCwgYXV4aWxpYXJ5LCBwYXJhbXMpIHtcclxuICAgICAgICBpZiAoY2hpbGQgPT09IHZvaWQgMCkgeyBjaGlsZCA9IG51bGw7IH1cclxuICAgICAgICBpZiAoYXV4aWxpYXJ5ID09PSB2b2lkIDApIHsgYXV4aWxpYXJ5ID0gQ09OU1RfRVhQUihbXSk7IH1cclxuICAgICAgICBpZiAocGFyYW1zID09PSB2b2lkIDApIHsgcGFyYW1zID0gQ09OU1RfRVhQUih7fSk7IH1cclxuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xyXG4gICAgICAgIHRoaXMuY2hpbGQgPSBjaGlsZDtcclxuICAgICAgICB0aGlzLmF1eGlsaWFyeSA9IGF1eGlsaWFyeTtcclxuICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIH1cclxuICAgIFVybC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGF0aCArIHRoaXMuX21hdHJpeFBhcmFtc1RvU3RyaW5nKCkgKyB0aGlzLl9hdXhUb1N0cmluZygpICsgdGhpcy5fY2hpbGRTdHJpbmcoKTtcclxuICAgIH07XHJcbiAgICBVcmwucHJvdG90eXBlLnNlZ21lbnRUb1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucGF0aCArIHRoaXMuX21hdHJpeFBhcmFtc1RvU3RyaW5nKCk7IH07XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBVcmwucHJvdG90eXBlLl9hdXhUb1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnkubGVuZ3RoID4gMCA/XHJcbiAgICAgICAgICAgICgnKCcgKyB0aGlzLmF1eGlsaWFyeS5tYXAoZnVuY3Rpb24gKHNpYmxpbmcpIHsgcmV0dXJuIHNpYmxpbmcudG9TdHJpbmcoKTsgfSkuam9pbignLy8nKSArICcpJykgOlxyXG4gICAgICAgICAgICAnJztcclxuICAgIH07XHJcbiAgICBVcmwucHJvdG90eXBlLl9tYXRyaXhQYXJhbXNUb1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcGFyYW1TdHJpbmcgPSBzZXJpYWxpemVQYXJhbXModGhpcy5wYXJhbXMsICc7Jyk7XHJcbiAgICAgICAgaWYgKHBhcmFtU3RyaW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuICc7JyArIHBhcmFtU3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9O1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgVXJsLnByb3RvdHlwZS5fY2hpbGRTdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpc1ByZXNlbnQodGhpcy5jaGlsZCkgPyAoJy8nICsgdGhpcy5jaGlsZC50b1N0cmluZygpKSA6ICcnOyB9O1xyXG4gICAgcmV0dXJuIFVybDtcclxufSkoKTtcclxuZXhwb3J0cy5VcmwgPSBVcmw7XHJcbnZhciBSb290VXJsID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhSb290VXJsLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gUm9vdFVybChwYXRoLCBjaGlsZCwgYXV4aWxpYXJ5LCBwYXJhbXMpIHtcclxuICAgICAgICBpZiAoY2hpbGQgPT09IHZvaWQgMCkgeyBjaGlsZCA9IG51bGw7IH1cclxuICAgICAgICBpZiAoYXV4aWxpYXJ5ID09PSB2b2lkIDApIHsgYXV4aWxpYXJ5ID0gQ09OU1RfRVhQUihbXSk7IH1cclxuICAgICAgICBpZiAocGFyYW1zID09PSB2b2lkIDApIHsgcGFyYW1zID0gbnVsbDsgfVxyXG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIHBhdGgsIGNoaWxkLCBhdXhpbGlhcnksIHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBSb290VXJsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXRoICsgdGhpcy5fYXV4VG9TdHJpbmcoKSArIHRoaXMuX2NoaWxkU3RyaW5nKCkgKyB0aGlzLl9xdWVyeVBhcmFtc1RvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG4gICAgUm9vdFVybC5wcm90b3R5cGUuc2VnbWVudFRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5wYXRoICsgdGhpcy5fcXVlcnlQYXJhbXNUb1N0cmluZygpOyB9O1xyXG4gICAgUm9vdFVybC5wcm90b3R5cGUuX3F1ZXJ5UGFyYW1zVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGlzQmxhbmsodGhpcy5wYXJhbXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICc/JyArIHNlcmlhbGl6ZVBhcmFtcyh0aGlzLnBhcmFtcyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJvb3RVcmw7XHJcbn0pKFVybCk7XHJcbmV4cG9ydHMuUm9vdFVybCA9IFJvb3RVcmw7XHJcbmZ1bmN0aW9uIHBhdGhTZWdtZW50c1RvVXJsKHBhdGhTZWdtZW50cykge1xyXG4gICAgdmFyIHVybCA9IG5ldyBVcmwocGF0aFNlZ21lbnRzW3BhdGhTZWdtZW50cy5sZW5ndGggLSAxXSk7XHJcbiAgICBmb3IgKHZhciBpID0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAxKSB7XHJcbiAgICAgICAgdXJsID0gbmV3IFVybChwYXRoU2VnbWVudHNbaV0sIHVybCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXJsO1xyXG59XHJcbmV4cG9ydHMucGF0aFNlZ21lbnRzVG9VcmwgPSBwYXRoU2VnbWVudHNUb1VybDtcclxudmFyIFNFR01FTlRfUkUgPSBSZWdFeHBXcmFwcGVyLmNyZWF0ZSgnXlteXFxcXC9cXFxcKFxcXFwpXFxcXD87PSYjXSsnKTtcclxuZnVuY3Rpb24gbWF0Y2hVcmxTZWdtZW50KHN0cikge1xyXG4gICAgdmFyIG1hdGNoID0gUmVnRXhwV3JhcHBlci5maXJzdE1hdGNoKFNFR01FTlRfUkUsIHN0cik7XHJcbiAgICByZXR1cm4gaXNQcmVzZW50KG1hdGNoKSA/IG1hdGNoWzBdIDogJyc7XHJcbn1cclxudmFyIFFVRVJZX1BBUkFNX1ZBTFVFX1JFID0gUmVnRXhwV3JhcHBlci5jcmVhdGUoJ15bXlxcXFwoXFxcXClcXFxcPzsmI10rJyk7XHJcbmZ1bmN0aW9uIG1hdGNoVXJsUXVlcnlQYXJhbVZhbHVlKHN0cikge1xyXG4gICAgdmFyIG1hdGNoID0gUmVnRXhwV3JhcHBlci5maXJzdE1hdGNoKFFVRVJZX1BBUkFNX1ZBTFVFX1JFLCBzdHIpO1xyXG4gICAgcmV0dXJuIGlzUHJlc2VudChtYXRjaCkgPyBtYXRjaFswXSA6ICcnO1xyXG59XHJcbnZhciBVcmxQYXJzZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVXJsUGFyc2VyKCkge1xyXG4gICAgfVxyXG4gICAgVXJsUGFyc2VyLnByb3RvdHlwZS5wZWVrU3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHRoaXMuX3JlbWFpbmluZy5zdGFydHNXaXRoKHN0cik7IH07XHJcbiAgICBVcmxQYXJzZXIucHJvdG90eXBlLmNhcHR1cmUgPSBmdW5jdGlvbiAoc3RyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9yZW1haW5pbmcuc3RhcnRzV2l0aChzdHIpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiRXhwZWN0ZWQgXFxcIlwiICsgc3RyICsgXCJcXFwiLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmVtYWluaW5nID0gdGhpcy5fcmVtYWluaW5nLnN1YnN0cmluZyhzdHIubGVuZ3RoKTtcclxuICAgIH07XHJcbiAgICBVcmxQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHRoaXMuX3JlbWFpbmluZyA9IHVybDtcclxuICAgICAgICBpZiAodXJsID09ICcnIHx8IHVybCA9PSAnLycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVcmwoJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVJvb3QoKTtcclxuICAgIH07XHJcbiAgICAvLyBzZWdtZW50ICsgKGF1eCBzZWdtZW50cykgKyAocXVlcnkgcGFyYW1zKVxyXG4gICAgVXJsUGFyc2VyLnByb3RvdHlwZS5wYXJzZVJvb3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJy8nKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHR1cmUoJy8nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBhdGggPSBtYXRjaFVybFNlZ21lbnQodGhpcy5fcmVtYWluaW5nKTtcclxuICAgICAgICB0aGlzLmNhcHR1cmUocGF0aCk7XHJcbiAgICAgICAgdmFyIGF1eCA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCcoJykpIHtcclxuICAgICAgICAgICAgYXV4ID0gdGhpcy5wYXJzZUF1eGlsaWFyeVJvdXRlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wZWVrU3RhcnRzV2l0aCgnOycpKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCB0aGVzZSBwYXJhbXMganVzdCBiZSBkcm9wcGVkP1xyXG4gICAgICAgICAgICB0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJy8nKSAmJiAhdGhpcy5wZWVrU3RhcnRzV2l0aCgnLy8nKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHR1cmUoJy8nKTtcclxuICAgICAgICAgICAgY2hpbGQgPSB0aGlzLnBhcnNlU2VnbWVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCc/JykpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB0aGlzLnBhcnNlUXVlcnlQYXJhbXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSb290VXJsKHBhdGgsIGNoaWxkLCBhdXgsIHF1ZXJ5UGFyYW1zKTtcclxuICAgIH07XHJcbiAgICAvLyBzZWdtZW50ICsgKG1hdHJpeCBwYXJhbXMpICsgKGF1eCBzZWdtZW50cylcclxuICAgIFVybFBhcnNlci5wcm90b3R5cGUucGFyc2VTZWdtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXB0dXJlKCcvJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwYXRoID0gbWF0Y2hVcmxTZWdtZW50KHRoaXMuX3JlbWFpbmluZyk7XHJcbiAgICAgICAgdGhpcy5jYXB0dXJlKHBhdGgpO1xyXG4gICAgICAgIHZhciBtYXRyaXhQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnBlZWtTdGFydHNXaXRoKCc7JykpIHtcclxuICAgICAgICAgICAgbWF0cml4UGFyYW1zID0gdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYXV4ID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJygnKSkge1xyXG4gICAgICAgICAgICBhdXggPSB0aGlzLnBhcnNlQXV4aWxpYXJ5Um91dGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJy8nKSAmJiAhdGhpcy5wZWVrU3RhcnRzV2l0aCgnLy8nKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHR1cmUoJy8nKTtcclxuICAgICAgICAgICAgY2hpbGQgPSB0aGlzLnBhcnNlU2VnbWVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFVybChwYXRoLCBjaGlsZCwgYXV4LCBtYXRyaXhQYXJhbXMpO1xyXG4gICAgfTtcclxuICAgIFVybFBhcnNlci5wcm90b3R5cGUucGFyc2VRdWVyeVBhcmFtcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcGFyYW1zID0ge307XHJcbiAgICAgICAgdGhpcy5jYXB0dXJlKCc/Jyk7XHJcbiAgICAgICAgdGhpcy5wYXJzZVF1ZXJ5UGFyYW0ocGFyYW1zKTtcclxuICAgICAgICB3aGlsZSAodGhpcy5fcmVtYWluaW5nLmxlbmd0aCA+IDAgJiYgdGhpcy5wZWVrU3RhcnRzV2l0aCgnJicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZSgnJicpO1xyXG4gICAgICAgICAgICB0aGlzLnBhcnNlUXVlcnlQYXJhbShwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfTtcclxuICAgIFVybFBhcnNlci5wcm90b3R5cGUucGFyc2VNYXRyaXhQYXJhbXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHdoaWxlICh0aGlzLl9yZW1haW5pbmcubGVuZ3RoID4gMCAmJiB0aGlzLnBlZWtTdGFydHNXaXRoKCc7JykpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXB0dXJlKCc7Jyk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyc2VQYXJhbShwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfTtcclxuICAgIFVybFBhcnNlci5wcm90b3R5cGUucGFyc2VQYXJhbSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuICAgICAgICB2YXIga2V5ID0gbWF0Y2hVcmxTZWdtZW50KHRoaXMuX3JlbWFpbmluZyk7XHJcbiAgICAgICAgaWYgKGlzQmxhbmsoa2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FwdHVyZShrZXkpO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJz0nKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHR1cmUoJz0nKTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlTWF0Y2ggPSBtYXRjaFVybFNlZ21lbnQodGhpcy5fcmVtYWluaW5nKTtcclxuICAgICAgICAgICAgaWYgKGlzUHJlc2VudCh2YWx1ZU1hdGNoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZU1hdGNoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXB0dXJlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbXNba2V5XSA9IHZhbHVlO1xyXG4gICAgfTtcclxuICAgIFVybFBhcnNlci5wcm90b3R5cGUucGFyc2VRdWVyeVBhcmFtID0gZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgIHZhciBrZXkgPSBtYXRjaFVybFNlZ21lbnQodGhpcy5fcmVtYWluaW5nKTtcclxuICAgICAgICBpZiAoaXNCbGFuayhrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXB0dXJlKGtleSk7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5wZWVrU3RhcnRzV2l0aCgnPScpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZSgnPScpO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVNYXRjaCA9IG1hdGNoVXJsUXVlcnlQYXJhbVZhbHVlKHRoaXMuX3JlbWFpbmluZyk7XHJcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQodmFsdWVNYXRjaCkpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVNYXRjaDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FwdHVyZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1zW2tleV0gPSB2YWx1ZTtcclxuICAgIH07XHJcbiAgICBVcmxQYXJzZXIucHJvdG90eXBlLnBhcnNlQXV4aWxpYXJ5Um91dGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByb3V0ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmNhcHR1cmUoJygnKTtcclxuICAgICAgICB3aGlsZSAoIXRoaXMucGVla1N0YXJ0c1dpdGgoJyknKSAmJiB0aGlzLl9yZW1haW5pbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByb3V0ZXMucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGVla1N0YXJ0c1dpdGgoJy8vJykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FwdHVyZSgnLy8nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhcHR1cmUoJyknKTtcclxuICAgICAgICByZXR1cm4gcm91dGVzO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBVcmxQYXJzZXI7XHJcbn0pKCk7XHJcbmV4cG9ydHMuVXJsUGFyc2VyID0gVXJsUGFyc2VyO1xyXG5leHBvcnRzLnBhcnNlciA9IG5ldyBVcmxQYXJzZXIoKTtcclxudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufTtcclxudmFyIFJvdXRlTGlmZWN5Y2xlSG9vayA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSb3V0ZUxpZmVjeWNsZUhvb2sobmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcbiAgICBSb3V0ZUxpZmVjeWNsZUhvb2sgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBDT05TVCgpXHJcbiAgICBdLCBSb3V0ZUxpZmVjeWNsZUhvb2spO1xyXG4gICAgcmV0dXJuIFJvdXRlTGlmZWN5Y2xlSG9vaztcclxufSkoKTtcclxuZXhwb3J0cy5Sb3V0ZUxpZmVjeWNsZUhvb2sgPSBSb3V0ZUxpZmVjeWNsZUhvb2s7XHJcbnZhciBDYW5BY3RpdmF0ZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDYW5BY3RpdmF0ZShmbikge1xyXG4gICAgICAgIHRoaXMuZm4gPSBmbjtcclxuICAgIH1cclxuICAgIENhbkFjdGl2YXRlID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgQ09OU1QoKVxyXG4gICAgXSwgQ2FuQWN0aXZhdGUpO1xyXG4gICAgcmV0dXJuIENhbkFjdGl2YXRlO1xyXG59KSgpO1xyXG5leHBvcnRzLkNhbkFjdGl2YXRlID0gQ2FuQWN0aXZhdGU7XHJcbmV4cG9ydHMucm91dGVyQ2FuUmV1c2UgPSBDT05TVF9FWFBSKG5ldyBSb3V0ZUxpZmVjeWNsZUhvb2soJ3JvdXRlckNhblJldXNlJykpO1xyXG5leHBvcnRzLnJvdXRlckNhbkRlYWN0aXZhdGUgPSBDT05TVF9FWFBSKG5ldyBSb3V0ZUxpZmVjeWNsZUhvb2soJ3JvdXRlckNhbkRlYWN0aXZhdGUnKSk7XHJcbmV4cG9ydHMucm91dGVyT25BY3RpdmF0ZSA9IENPTlNUX0VYUFIobmV3IFJvdXRlTGlmZWN5Y2xlSG9vaygncm91dGVyT25BY3RpdmF0ZScpKTtcclxuZXhwb3J0cy5yb3V0ZXJPblJldXNlID0gQ09OU1RfRVhQUihuZXcgUm91dGVMaWZlY3ljbGVIb29rKCdyb3V0ZXJPblJldXNlJykpO1xyXG5leHBvcnRzLnJvdXRlck9uRGVhY3RpdmF0ZSA9IENPTlNUX0VYUFIobmV3IFJvdXRlTGlmZWN5Y2xlSG9vaygncm91dGVyT25EZWFjdGl2YXRlJykpO1xyXG52YXIgbGlmZWN5Y2xlX2Fubm90YXRpb25zX2ltcGxfMSA9IHJvdXRlclJlcXVpcmUoJy4vbGlmZWN5Y2xlX2Fubm90YXRpb25zX2ltcGwnKTtcclxuZnVuY3Rpb24gaGFzTGlmZWN5Y2xlSG9vayhlLCB0eXBlKSB7XHJcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgVHlwZSkpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIGUubmFtZSBpbiB0eXBlLnByb3RvdHlwZTtcclxufVxyXG5leHBvcnRzLmhhc0xpZmVjeWNsZUhvb2sgPSBoYXNMaWZlY3ljbGVIb29rO1xyXG5mdW5jdGlvbiBnZXRDYW5BY3RpdmF0ZUhvb2sodHlwZSkge1xyXG4gICAgdmFyIGFubm90YXRpb25zID0gcmVmbGVjdG9yLmFubm90YXRpb25zKHR5cGUpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIHZhciBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaV07XHJcbiAgICAgICAgaWYgKGFubm90YXRpb24gaW5zdGFuY2VvZiBsaWZlY3ljbGVfYW5ub3RhdGlvbnNfaW1wbF8xLkNhbkFjdGl2YXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLmZuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcbmV4cG9ydHMuZ2V0Q2FuQWN0aXZhdGVIb29rID0gZ2V0Q2FuQWN0aXZhdGVIb29rO1xyXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59O1xyXG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59O1xyXG52YXIgcm91dGVfZGVmaW5pdGlvbl8xID0gcm91dGVyUmVxdWlyZSgnLi4vcm91dGVfZGVmaW5pdGlvbicpO1xyXG5leHBvcnRzLlJvdXRlRGVmaW5pdGlvbiA9IHJvdXRlX2RlZmluaXRpb25fMS5Sb3V0ZURlZmluaXRpb247XHJcbnZhciBfX21ha2VfZGFydF9hbmFseXplcl9oYXBweSA9IG51bGw7XHJcbi8qKlxyXG4gKiBUaGUgYFJvdXRlQ29uZmlnYCBkZWNvcmF0b3IgZGVmaW5lcyByb3V0ZXMgZm9yIGEgZ2l2ZW4gY29tcG9uZW50LlxyXG4gKlxyXG4gKiBJdCB0YWtlcyBhbiBhcnJheSBvZiB7QGxpbmsgUm91dGVEZWZpbml0aW9ufXMuXHJcbiAqL1xyXG52YXIgUm91dGVDb25maWcgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUm91dGVDb25maWcoY29uZmlncykge1xyXG4gICAgICAgIHRoaXMuY29uZmlncyA9IGNvbmZpZ3M7XHJcbiAgICB9XHJcbiAgICBSb3V0ZUNvbmZpZyA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIENPTlNUKClcclxuICAgIF0sIFJvdXRlQ29uZmlnKTtcclxuICAgIHJldHVybiBSb3V0ZUNvbmZpZztcclxufSkoKTtcclxuZXhwb3J0cy5Sb3V0ZUNvbmZpZyA9IFJvdXRlQ29uZmlnO1xyXG52YXIgQWJzdHJhY3RSb3V0ZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBBYnN0cmFjdFJvdXRlKF9hKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBfYS5uYW1lLCB1c2VBc0RlZmF1bHQgPSBfYS51c2VBc0RlZmF1bHQsIHBhdGggPSBfYS5wYXRoLCByZWdleCA9IF9hLnJlZ2V4LCBzZXJpYWxpemVyID0gX2Euc2VyaWFsaXplciwgZGF0YSA9IF9hLmRhdGE7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLnVzZUFzRGVmYXVsdCA9IHVzZUFzRGVmYXVsdDtcclxuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xyXG4gICAgICAgIHRoaXMucmVnZXggPSByZWdleDtcclxuICAgICAgICB0aGlzLnNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICBBYnN0cmFjdFJvdXRlID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgQ09OU1QoKVxyXG4gICAgXSwgQWJzdHJhY3RSb3V0ZSk7XHJcbiAgICByZXR1cm4gQWJzdHJhY3RSb3V0ZTtcclxufSkoKTtcclxuZXhwb3J0cy5BYnN0cmFjdFJvdXRlID0gQWJzdHJhY3RSb3V0ZTtcclxuLyoqXHJcbiAqIGBSb3V0ZWAgaXMgYSB0eXBlIG9mIHtAbGluayBSb3V0ZURlZmluaXRpb259IHVzZWQgdG8gcm91dGUgYSBwYXRoIHRvIGEgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBJdCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gKiAtIGBwYXRoYCBpcyBhIHN0cmluZyB0aGF0IHVzZXMgdGhlIHJvdXRlIG1hdGNoZXIgRFNMLlxyXG4gKiAtIGBjb21wb25lbnRgIGEgY29tcG9uZW50IHR5cGUuXHJcbiAqIC0gYG5hbWVgIGlzIGFuIG9wdGlvbmFsIGBDYW1lbENhc2VgIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHJvdXRlLlxyXG4gKiAtIGBkYXRhYCBpcyBhbiBvcHRpb25hbCBwcm9wZXJ0eSBvZiBhbnkgdHlwZSByZXByZXNlbnRpbmcgYXJiaXRyYXJ5IHJvdXRlIG1ldGFkYXRhIGZvciB0aGUgZ2l2ZW5cclxuICogcm91dGUuIEl0IGlzIGluamVjdGFibGUgdmlhIHtAbGluayBSb3V0ZURhdGF9LlxyXG4gKiAtIGB1c2VBc0RlZmF1bHRgIGlzIGEgYm9vbGVhbiB2YWx1ZS4gSWYgYHRydWVgLCB0aGUgY2hpbGQgcm91dGUgd2lsbCBiZSBuYXZpZ2F0ZWQgdG8gaWYgbm8gY2hpbGRcclxuICogcm91dGUgaXMgc3BlY2lmaWVkIGR1cmluZyB0aGUgbmF2aWdhdGlvbi5cclxuICpcclxuICogIyMjIEV4YW1wbGVcclxuICogYGBgXHJcbiAqIGltcG9ydCB7Um91dGVDb25maWcsIFJvdXRlfSBmcm9tICdhbmd1bGFyMi9yb3V0ZXInO1xyXG4gKlxyXG4gKiBAUm91dGVDb25maWcoW1xyXG4gKiAgIG5ldyBSb3V0ZSh7cGF0aDogJy9ob21lJywgY29tcG9uZW50OiBIb21lQ21wLCBuYW1lOiAnSG9tZUNtcCcgfSlcclxuICogXSlcclxuICogY2xhc3MgTXlBcHAge31cclxuICogYGBgXHJcbiAqL1xyXG52YXIgUm91dGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKFJvdXRlLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gUm91dGUoX2EpIHtcclxuICAgICAgICB2YXIgbmFtZSA9IF9hLm5hbWUsIHVzZUFzRGVmYXVsdCA9IF9hLnVzZUFzRGVmYXVsdCwgcGF0aCA9IF9hLnBhdGgsIHJlZ2V4ID0gX2EucmVnZXgsIHNlcmlhbGl6ZXIgPSBfYS5zZXJpYWxpemVyLCBkYXRhID0gX2EuZGF0YSwgY29tcG9uZW50ID0gX2EuY29tcG9uZW50O1xyXG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIHtcclxuICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgdXNlQXNEZWZhdWx0OiB1c2VBc0RlZmF1bHQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIHJlZ2V4OiByZWdleCxcclxuICAgICAgICAgICAgc2VyaWFsaXplcjogc2VyaWFsaXplcixcclxuICAgICAgICAgICAgZGF0YTogZGF0YVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYXV4ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgIH1cclxuICAgIFJvdXRlID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgQ09OU1QoKVxyXG4gICAgXSwgUm91dGUpO1xyXG4gICAgcmV0dXJuIFJvdXRlO1xyXG59KShBYnN0cmFjdFJvdXRlKTtcclxuZXhwb3J0cy5Sb3V0ZSA9IFJvdXRlO1xyXG4vKipcclxuICogYEF1eFJvdXRlYCBpcyBhIHR5cGUgb2Yge0BsaW5rIFJvdXRlRGVmaW5pdGlvbn0gdXNlZCB0byBkZWZpbmUgYW4gYXV4aWxpYXJ5IHJvdXRlLlxyXG4gKlxyXG4gKiBJdCB0YWtlcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAqIC0gYHBhdGhgIGlzIGEgc3RyaW5nIHRoYXQgdXNlcyB0aGUgcm91dGUgbWF0Y2hlciBEU0wuXHJcbiAqIC0gYGNvbXBvbmVudGAgYSBjb21wb25lbnQgdHlwZS5cclxuICogLSBgbmFtZWAgaXMgYW4gb3B0aW9uYWwgYENhbWVsQ2FzZWAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgcm91dGUuXHJcbiAqIC0gYGRhdGFgIGlzIGFuIG9wdGlvbmFsIHByb3BlcnR5IG9mIGFueSB0eXBlIHJlcHJlc2VudGluZyBhcmJpdHJhcnkgcm91dGUgbWV0YWRhdGEgZm9yIHRoZSBnaXZlblxyXG4gKiByb3V0ZS4gSXQgaXMgaW5qZWN0YWJsZSB2aWEge0BsaW5rIFJvdXRlRGF0YX0uXHJcbiAqXHJcbiAqICMjIyBFeGFtcGxlXHJcbiAqIGBgYFxyXG4gKiBpbXBvcnQge1JvdXRlQ29uZmlnLCBBdXhSb3V0ZX0gZnJvbSAnYW5ndWxhcjIvcm91dGVyJztcclxuICpcclxuICogQFJvdXRlQ29uZmlnKFtcclxuICogICBuZXcgQXV4Um91dGUoe3BhdGg6ICcvaG9tZScsIGNvbXBvbmVudDogSG9tZUNtcH0pXHJcbiAqIF0pXHJcbiAqIGNsYXNzIE15QXBwIHt9XHJcbiAqIGBgYFxyXG4gKi9cclxudmFyIEF1eFJvdXRlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhBdXhSb3V0ZSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEF1eFJvdXRlKF9hKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBfYS5uYW1lLCB1c2VBc0RlZmF1bHQgPSBfYS51c2VBc0RlZmF1bHQsIHBhdGggPSBfYS5wYXRoLCByZWdleCA9IF9hLnJlZ2V4LCBzZXJpYWxpemVyID0gX2Euc2VyaWFsaXplciwgZGF0YSA9IF9hLmRhdGEsIGNvbXBvbmVudCA9IF9hLmNvbXBvbmVudDtcclxuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCB7XHJcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgIHVzZUFzRGVmYXVsdDogdXNlQXNEZWZhdWx0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICByZWdleDogcmVnZXgsXHJcbiAgICAgICAgICAgIHNlcmlhbGl6ZXI6IHNlcmlhbGl6ZXIsXHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgIH1cclxuICAgIEF1eFJvdXRlID0gX19kZWNvcmF0ZShbXHJcbiAgICAgICAgQ09OU1QoKVxyXG4gICAgXSwgQXV4Um91dGUpO1xyXG4gICAgcmV0dXJuIEF1eFJvdXRlO1xyXG59KShBYnN0cmFjdFJvdXRlKTtcclxuZXhwb3J0cy5BdXhSb3V0ZSA9IEF1eFJvdXRlO1xyXG4vKipcclxuICogYEFzeW5jUm91dGVgIGlzIGEgdHlwZSBvZiB7QGxpbmsgUm91dGVEZWZpbml0aW9ufSB1c2VkIHRvIHJvdXRlIGEgcGF0aCB0byBhbiBhc3luY2hyb25vdXNseVxyXG4gKiBsb2FkZWQgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBJdCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gKiAtIGBwYXRoYCBpcyBhIHN0cmluZyB0aGF0IHVzZXMgdGhlIHJvdXRlIG1hdGNoZXIgRFNMLlxyXG4gKiAtIGBsb2FkZXJgIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgY29tcG9uZW50LlxyXG4gKiAtIGBuYW1lYCBpcyBhbiBvcHRpb25hbCBgQ2FtZWxDYXNlYCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSByb3V0ZS5cclxuICogLSBgZGF0YWAgaXMgYW4gb3B0aW9uYWwgcHJvcGVydHkgb2YgYW55IHR5cGUgcmVwcmVzZW50aW5nIGFyYml0cmFyeSByb3V0ZSBtZXRhZGF0YSBmb3IgdGhlIGdpdmVuXHJcbiAqIHJvdXRlLiBJdCBpcyBpbmplY3RhYmxlIHZpYSB7QGxpbmsgUm91dGVEYXRhfS5cclxuICogLSBgdXNlQXNEZWZhdWx0YCBpcyBhIGJvb2xlYW4gdmFsdWUuIElmIGB0cnVlYCwgdGhlIGNoaWxkIHJvdXRlIHdpbGwgYmUgbmF2aWdhdGVkIHRvIGlmIG5vIGNoaWxkXHJcbiAqIHJvdXRlIGlzIHNwZWNpZmllZCBkdXJpbmcgdGhlIG5hdmlnYXRpb24uXHJcbiAqXHJcbiAqICMjIyBFeGFtcGxlXHJcbiAqIGBgYFxyXG4gKiBpbXBvcnQge1JvdXRlQ29uZmlnLCBBc3luY1JvdXRlfSBmcm9tICdhbmd1bGFyMi9yb3V0ZXInO1xyXG4gKlxyXG4gKiBAUm91dGVDb25maWcoW1xyXG4gKiAgIG5ldyBBc3luY1JvdXRlKHtwYXRoOiAnL2hvbWUnLCBsb2FkZXI6ICgpID0+IFByb21pc2UucmVzb2x2ZShNeUxvYWRlZENtcCksIG5hbWU6XHJcbiAqICdNeUxvYWRlZENtcCd9KVxyXG4gKiBdKVxyXG4gKiBjbGFzcyBNeUFwcCB7fVxyXG4gKiBgYGBcclxuICovXHJcbnZhciBBc3luY1JvdXRlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhBc3luY1JvdXRlLCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gQXN5bmNSb3V0ZShfYSkge1xyXG4gICAgICAgIHZhciBuYW1lID0gX2EubmFtZSwgdXNlQXNEZWZhdWx0ID0gX2EudXNlQXNEZWZhdWx0LCBwYXRoID0gX2EucGF0aCwgcmVnZXggPSBfYS5yZWdleCwgc2VyaWFsaXplciA9IF9hLnNlcmlhbGl6ZXIsIGRhdGEgPSBfYS5kYXRhLCBsb2FkZXIgPSBfYS5sb2FkZXI7XHJcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywge1xyXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICB1c2VBc0RlZmF1bHQ6IHVzZUFzRGVmYXVsdCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgcmVnZXg6IHJlZ2V4LFxyXG4gICAgICAgICAgICBzZXJpYWxpemVyOiBzZXJpYWxpemVyLFxyXG4gICAgICAgICAgICBkYXRhOiBkYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXggPSBudWxsO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gbG9hZGVyO1xyXG4gICAgfVxyXG4gICAgQXN5bmNSb3V0ZSA9IF9fZGVjb3JhdGUoW1xyXG4gICAgICAgIENPTlNUKClcclxuICAgIF0sIEFzeW5jUm91dGUpO1xyXG4gICAgcmV0dXJuIEFzeW5jUm91dGU7XHJcbn0pKEFic3RyYWN0Um91dGUpO1xyXG5leHBvcnRzLkFzeW5jUm91dGUgPSBBc3luY1JvdXRlO1xyXG4vKipcclxuICogYFJlZGlyZWN0YCBpcyBhIHR5cGUgb2Yge0BsaW5rIFJvdXRlRGVmaW5pdGlvbn0gdXNlZCB0byByb3V0ZSBhIHBhdGggdG8gYSBjYW5vbmljYWwgcm91dGUuXHJcbiAqXHJcbiAqIEl0IGhhcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAqIC0gYHBhdGhgIGlzIGEgc3RyaW5nIHRoYXQgdXNlcyB0aGUgcm91dGUgbWF0Y2hlciBEU0wuXHJcbiAqIC0gYHJlZGlyZWN0VG9gIGlzIGFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgbGluayBEU0wuXHJcbiAqXHJcbiAqIE5vdGUgdGhhdCByZWRpcmVjdHMgKipkbyBub3QqKiBhZmZlY3QgaG93IGxpbmtzIGFyZSBnZW5lcmF0ZWQuIEZvciB0aGF0LCBzZWUgdGhlIGB1c2VBc0RlZmF1bHRgXHJcbiAqIG9wdGlvbi5cclxuICpcclxuICogIyMjIEV4YW1wbGVcclxuICogYGBgXHJcbiAqIGltcG9ydCB7Um91dGVDb25maWcsIFJvdXRlLCBSZWRpcmVjdH0gZnJvbSAnYW5ndWxhcjIvcm91dGVyJztcclxuICpcclxuICogQFJvdXRlQ29uZmlnKFtcclxuICogICBuZXcgUmVkaXJlY3Qoe3BhdGg6ICcvJywgcmVkaXJlY3RUbzogWycvSG9tZSddIH0pLFxyXG4gKiAgIG5ldyBSb3V0ZSh7cGF0aDogJy9ob21lJywgY29tcG9uZW50OiBIb21lQ21wLCBuYW1lOiAnSG9tZSd9KVxyXG4gKiBdKVxyXG4gKiBjbGFzcyBNeUFwcCB7fVxyXG4gKiBgYGBcclxuICovXHJcbnZhciBSZWRpcmVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoUmVkaXJlY3QsIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBSZWRpcmVjdChfYSkge1xyXG4gICAgICAgIHZhciBuYW1lID0gX2EubmFtZSwgdXNlQXNEZWZhdWx0ID0gX2EudXNlQXNEZWZhdWx0LCBwYXRoID0gX2EucGF0aCwgcmVnZXggPSBfYS5yZWdleCwgc2VyaWFsaXplciA9IF9hLnNlcmlhbGl6ZXIsIGRhdGEgPSBfYS5kYXRhLCByZWRpcmVjdFRvID0gX2EucmVkaXJlY3RUbztcclxuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCB7XHJcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgIHVzZUFzRGVmYXVsdDogdXNlQXNEZWZhdWx0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICByZWdleDogcmVnZXgsXHJcbiAgICAgICAgICAgIHNlcmlhbGl6ZXI6IHNlcmlhbGl6ZXIsXHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xyXG4gICAgfVxyXG4gICAgUmVkaXJlY3QgPSBfX2RlY29yYXRlKFtcclxuICAgICAgICBDT05TVCgpXHJcbiAgICBdLCBSZWRpcmVjdCk7XHJcbiAgICByZXR1cm4gUmVkaXJlY3Q7XHJcbn0pKEFic3RyYWN0Um91dGUpO1xyXG5leHBvcnRzLlJlZGlyZWN0ID0gUmVkaXJlY3Q7XHJcbnZhciByb3V0ZV9jb25maWdfZGVjb3JhdG9yXzEgPSByb3V0ZXJSZXF1aXJlKCcuL3JvdXRlX2NvbmZpZ19kZWNvcmF0b3InKTtcclxuLyoqXHJcbiAqIEdpdmVuIGEgSlMgT2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHJvdXRlIGNvbmZpZywgcmV0dXJucyBhIGNvcnJlc3BvbmRpbmcgUm91dGUsIEFzeW5jUm91dGUsXHJcbiAqIEF1eFJvdXRlIG9yIFJlZGlyZWN0IG9iamVjdC5cclxuICpcclxuICogQWxzbyB3cmFwcyBhbiBBc3luY1JvdXRlJ3MgbG9hZGVyIGZ1bmN0aW9uIHRvIGFkZCB0aGUgbG9hZGVkIGNvbXBvbmVudCdzIHJvdXRlIGNvbmZpZyB0byB0aGVcclxuICogYFJvdXRlUmVnaXN0cnlgLlxyXG4gKi9cclxuZnVuY3Rpb24gbm9ybWFsaXplUm91dGVDb25maWcoY29uZmlnLCByZWdpc3RyeSkge1xyXG4gICAgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIHJvdXRlX2NvbmZpZ19kZWNvcmF0b3JfMS5Bc3luY1JvdXRlKSB7XHJcbiAgICAgICAgdmFyIHdyYXBwZWRMb2FkZXIgPSB3cmFwTG9hZGVyVG9SZWNvbmZpZ3VyZVJlZ2lzdHJ5KGNvbmZpZy5sb2FkZXIsIHJlZ2lzdHJ5KTtcclxuICAgICAgICByZXR1cm4gbmV3IHJvdXRlX2NvbmZpZ19kZWNvcmF0b3JfMS5Bc3luY1JvdXRlKHtcclxuICAgICAgICAgICAgcGF0aDogY29uZmlnLnBhdGgsXHJcbiAgICAgICAgICAgIGxvYWRlcjogd3JhcHBlZExvYWRlcixcclxuICAgICAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXHJcbiAgICAgICAgICAgIGRhdGE6IGNvbmZpZy5kYXRhLFxyXG4gICAgICAgICAgICB1c2VBc0RlZmF1bHQ6IGNvbmZpZy51c2VBc0RlZmF1bHRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiByb3V0ZV9jb25maWdfZGVjb3JhdG9yXzEuUm91dGUgfHwgY29uZmlnIGluc3RhbmNlb2Ygcm91dGVfY29uZmlnX2RlY29yYXRvcl8xLlJlZGlyZWN0IHx8IGNvbmZpZyBpbnN0YW5jZW9mIHJvdXRlX2NvbmZpZ19kZWNvcmF0b3JfMS5BdXhSb3V0ZSkge1xyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcbiAgICBpZiAoKCshIWNvbmZpZy5jb21wb25lbnQpICsgKCshIWNvbmZpZy5yZWRpcmVjdFRvKSArICgrISFjb25maWcubG9hZGVyKSAhPSAxKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oXCJSb3V0ZSBjb25maWcgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSBvbmUgXFxcImNvbXBvbmVudFxcXCIsIFxcXCJsb2FkZXJcXFwiLCBvciBcXFwicmVkaXJlY3RUb1xcXCIgcHJvcGVydHkuXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbmZpZy5hcyAmJiBjb25maWcubmFtZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiUm91dGUgY29uZmlnIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25lIFxcXCJhc1xcXCIgb3IgXFxcIm5hbWVcXFwiIHByb3BlcnR5LlwiKTtcclxuICAgIH1cclxuICAgIGlmIChjb25maWcuYXMpIHtcclxuICAgICAgICBjb25maWcubmFtZSA9IGNvbmZpZy5hcztcclxuICAgIH1cclxuICAgIGlmIChjb25maWcubG9hZGVyKSB7XHJcbiAgICAgICAgdmFyIHdyYXBwZWRMb2FkZXIgPSB3cmFwTG9hZGVyVG9SZWNvbmZpZ3VyZVJlZ2lzdHJ5KGNvbmZpZy5sb2FkZXIsIHJlZ2lzdHJ5KTtcclxuICAgICAgICByZXR1cm4gbmV3IHJvdXRlX2NvbmZpZ19kZWNvcmF0b3JfMS5Bc3luY1JvdXRlKHtcclxuICAgICAgICAgICAgcGF0aDogY29uZmlnLnBhdGgsXHJcbiAgICAgICAgICAgIGxvYWRlcjogd3JhcHBlZExvYWRlcixcclxuICAgICAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXHJcbiAgICAgICAgICAgIGRhdGE6IGNvbmZpZy5kYXRhLFxyXG4gICAgICAgICAgICB1c2VBc0RlZmF1bHQ6IGNvbmZpZy51c2VBc0RlZmF1bHRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChjb25maWcuYXV4KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyByb3V0ZV9jb25maWdfZGVjb3JhdG9yXzEuQXV4Um91dGUoeyBwYXRoOiBjb25maWcuYXV4LCBjb21wb25lbnQ6IGNvbmZpZy5jb21wb25lbnQsIG5hbWU6IGNvbmZpZy5uYW1lIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbmZpZy5jb21wb25lbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5jb21wb25lbnQgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFyIGNvbXBvbmVudERlZmluaXRpb25PYmplY3QgPSBjb25maWcuY29tcG9uZW50O1xyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50RGVmaW5pdGlvbk9iamVjdC50eXBlID09ICdjb25zdHJ1Y3RvcicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgcm91dGVfY29uZmlnX2RlY29yYXRvcl8xLlJvdXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjb25maWcucGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudERlZmluaXRpb25PYmplY3QuY29uc3RydWN0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY29uZmlnLmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQXNEZWZhdWx0OiBjb25maWcudXNlQXNEZWZhdWx0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb21wb25lbnREZWZpbml0aW9uT2JqZWN0LnR5cGUgPT0gJ2xvYWRlcicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgcm91dGVfY29uZmlnX2RlY29yYXRvcl8xLkFzeW5jUm91dGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGNvbmZpZy5wYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlcjogY29tcG9uZW50RGVmaW5pdGlvbk9iamVjdC5sb2FkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY29uZmlnLmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQXNEZWZhdWx0OiBjb25maWcudXNlQXNEZWZhdWx0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiSW52YWxpZCBjb21wb25lbnQgdHlwZSBcXFwiXCIgKyBjb21wb25lbnREZWZpbml0aW9uT2JqZWN0LnR5cGUgKyBcIlxcXCIuIFZhbGlkIHR5cGVzIGFyZSBcXFwiY29uc3RydWN0b3JcXFwiIGFuZCBcXFwibG9hZGVyXFxcIi5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyByb3V0ZV9jb25maWdfZGVjb3JhdG9yXzEuUm91dGUoY29uZmlnKTtcclxuICAgIH1cclxuICAgIGlmIChjb25maWcucmVkaXJlY3RUbykge1xyXG4gICAgICAgIHJldHVybiBuZXcgcm91dGVfY29uZmlnX2RlY29yYXRvcl8xLlJlZGlyZWN0KHsgcGF0aDogY29uZmlnLnBhdGgsIHJlZGlyZWN0VG86IGNvbmZpZy5yZWRpcmVjdFRvIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZztcclxufVxyXG5leHBvcnRzLm5vcm1hbGl6ZVJvdXRlQ29uZmlnID0gbm9ybWFsaXplUm91dGVDb25maWc7XHJcbmZ1bmN0aW9uIHdyYXBMb2FkZXJUb1JlY29uZmlndXJlUmVnaXN0cnkobG9hZGVyLCByZWdpc3RyeSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbG9hZGVyKCkudGhlbihmdW5jdGlvbiAoY29tcG9uZW50VHlwZSkge1xyXG4gICAgICAgICAgICByZWdpc3RyeS5jb25maWdGcm9tQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50VHlwZTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gYXNzZXJ0Q29tcG9uZW50RXhpc3RzKGNvbXBvbmVudCwgcGF0aCkge1xyXG4gICAgaWYgKCFpc1R5cGUoY29tcG9uZW50KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiQ29tcG9uZW50IGZvciByb3V0ZSBcXFwiXCIgKyBwYXRoICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkLCBvciBpcyBub3QgYSBjbGFzcy5cIik7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5hc3NlcnRDb21wb25lbnRFeGlzdHMgPSBhc3NlcnRDb21wb25lbnRFeGlzdHM7XHJcbnZhciBpbnN0cnVjdGlvbl8xID0gcm91dGVyUmVxdWlyZSgnLi4vLi4vaW5zdHJ1Y3Rpb24nKTtcclxudmFyIEFzeW5jUm91dGVIYW5kbGVyID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFzeW5jUm91dGVIYW5kbGVyKF9sb2FkZXIsIGRhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YSA9PT0gdm9pZCAwKSB7IGRhdGEgPSBudWxsOyB9XHJcbiAgICAgICAgdGhpcy5fbG9hZGVyID0gX2xvYWRlcjtcclxuICAgICAgICAvKiogQGludGVybmFsICovXHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZWRDb21wb25lbnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGlzUHJlc2VudChkYXRhKSA/IG5ldyBpbnN0cnVjdGlvbl8xLlJvdXRlRGF0YShkYXRhKSA6IGluc3RydWN0aW9uXzEuQkxBTktfUk9VVEVfREFUQTtcclxuICAgIH1cclxuICAgIEFzeW5jUm91dGVIYW5kbGVyLnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50VHlwZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5fcmVzb2x2ZWRDb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZENvbXBvbmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkQ29tcG9uZW50ID0gdGhpcy5fbG9hZGVyKCkudGhlbihmdW5jdGlvbiAoY29tcG9uZW50VHlwZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5jb21wb25lbnRUeXBlID0gY29tcG9uZW50VHlwZTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudFR5cGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEFzeW5jUm91dGVIYW5kbGVyO1xyXG59KSgpO1xyXG5leHBvcnRzLkFzeW5jUm91dGVIYW5kbGVyID0gQXN5bmNSb3V0ZUhhbmRsZXI7XHJcbnZhciBpbnN0cnVjdGlvbl8xID0gcm91dGVyUmVxdWlyZSgnLi4vLi4vaW5zdHJ1Y3Rpb24nKTtcclxudmFyIFN5bmNSb3V0ZUhhbmRsZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU3luY1JvdXRlSGFuZGxlcihjb21wb25lbnRUeXBlLCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gY29tcG9uZW50VHlwZTtcclxuICAgICAgICAvKiogQGludGVybmFsICovXHJcbiAgICAgICAgdGhpcy5fcmVzb2x2ZWRDb21wb25lbnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmVkQ29tcG9uZW50ID0gUHJvbWlzZVdyYXBwZXIucmVzb2x2ZShjb21wb25lbnRUeXBlKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBpc1ByZXNlbnQoZGF0YSkgPyBuZXcgaW5zdHJ1Y3Rpb25fMS5Sb3V0ZURhdGEoZGF0YSkgOiBpbnN0cnVjdGlvbl8xLkJMQU5LX1JPVVRFX0RBVEE7XHJcbiAgICB9XHJcbiAgICBTeW5jUm91dGVIYW5kbGVyLnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50VHlwZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3Jlc29sdmVkQ29tcG9uZW50OyB9O1xyXG4gICAgcmV0dXJuIFN5bmNSb3V0ZUhhbmRsZXI7XHJcbn0pKCk7XHJcbmV4cG9ydHMuU3luY1JvdXRlSGFuZGxlciA9IFN5bmNSb3V0ZUhhbmRsZXI7XHJcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn07XHJcbnZhciB1cmxfcGFyc2VyXzEgPSByb3V0ZXJSZXF1aXJlKCcuLi91cmxfcGFyc2VyJyk7XHJcbnZhciBpbnN0cnVjdGlvbl8xID0gcm91dGVyUmVxdWlyZSgnLi4vaW5zdHJ1Y3Rpb24nKTtcclxuLy8gUm91dGVNYXRjaCBvYmplY3RzIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYSBtYXRjaCBiZXR3ZWVuIGEgcnVsZSBhbmQgYSBVUkxcclxudmFyIFJvdXRlTWF0Y2ggPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUm91dGVNYXRjaCgpIHtcclxuICAgIH1cclxuICAgIHJldHVybiBSb3V0ZU1hdGNoO1xyXG59KSgpO1xyXG5leHBvcnRzLlJvdXRlTWF0Y2ggPSBSb3V0ZU1hdGNoO1xyXG52YXIgUGF0aE1hdGNoID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhQYXRoTWF0Y2gsIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBQYXRoTWF0Y2goaW5zdHJ1Y3Rpb24sIHJlbWFpbmluZywgcmVtYWluaW5nQXV4KSB7XHJcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5pbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uO1xyXG4gICAgICAgIHRoaXMucmVtYWluaW5nID0gcmVtYWluaW5nO1xyXG4gICAgICAgIHRoaXMucmVtYWluaW5nQXV4ID0gcmVtYWluaW5nQXV4O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFBhdGhNYXRjaDtcclxufSkoUm91dGVNYXRjaCk7XHJcbmV4cG9ydHMuUGF0aE1hdGNoID0gUGF0aE1hdGNoO1xyXG52YXIgUmVkaXJlY3RNYXRjaCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoUmVkaXJlY3RNYXRjaCwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFJlZGlyZWN0TWF0Y2gocmVkaXJlY3RUbywgc3BlY2lmaWNpdHkpIHtcclxuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xyXG4gICAgICAgIHRoaXMuc3BlY2lmaWNpdHkgPSBzcGVjaWZpY2l0eTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZWRpcmVjdE1hdGNoO1xyXG59KShSb3V0ZU1hdGNoKTtcclxuZXhwb3J0cy5SZWRpcmVjdE1hdGNoID0gUmVkaXJlY3RNYXRjaDtcclxudmFyIFJlZGlyZWN0UnVsZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZWRpcmVjdFJ1bGUoX3BhdGhSZWNvZ25pemVyLCByZWRpcmVjdFRvKSB7XHJcbiAgICAgICAgdGhpcy5fcGF0aFJlY29nbml6ZXIgPSBfcGF0aFJlY29nbml6ZXI7XHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdFRvID0gcmVkaXJlY3RUbztcclxuICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLl9wYXRoUmVjb2duaXplci5oYXNoO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0UnVsZS5wcm90b3R5cGUsIFwicGF0aFwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wYXRoUmVjb2duaXplci50b1N0cmluZygpOyB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkgeyB0aHJvdyBuZXcgQmFzZUV4Y2VwdGlvbigneW91IGNhbm5vdCBzZXQgdGhlIHBhdGggb2YgYSBSZWRpcmVjdFJ1bGUgZGlyZWN0bHknKTsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYG51bGxgIG9yIGEgYFBhcnNlZFVybGAgcmVwcmVzZW50aW5nIHRoZSBuZXcgcGF0aCB0byBtYXRjaFxyXG4gICAgICovXHJcbiAgICBSZWRpcmVjdFJ1bGUucHJvdG90eXBlLnJlY29nbml6ZSA9IGZ1bmN0aW9uIChiZWdpbm5pbmdTZWdtZW50KSB7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gbnVsbDtcclxuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuX3BhdGhSZWNvZ25pemVyLm1hdGNoVXJsKGJlZ2lubmluZ1NlZ21lbnQpKSkge1xyXG4gICAgICAgICAgICBtYXRjaCA9IG5ldyBSZWRpcmVjdE1hdGNoKHRoaXMucmVkaXJlY3RUbywgdGhpcy5fcGF0aFJlY29nbml6ZXIuc3BlY2lmaWNpdHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZVdyYXBwZXIucmVzb2x2ZShtYXRjaCk7XHJcbiAgICB9O1xyXG4gICAgUmVkaXJlY3RSdWxlLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuICAgICAgICB0aHJvdyBuZXcgQmFzZUV4Y2VwdGlvbihcIlRyaWVkIHRvIGdlbmVyYXRlIGEgcmVkaXJlY3QuXCIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSZWRpcmVjdFJ1bGU7XHJcbn0pKCk7XHJcbmV4cG9ydHMuUmVkaXJlY3RSdWxlID0gUmVkaXJlY3RSdWxlO1xyXG4vLyByZXByZXNlbnRzIHNvbWV0aGluZyBsaWtlICcvZm9vLzpiYXInXHJcbnZhciBSb3V0ZVJ1bGUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gVE9ETzogY2FjaGUgY29tcG9uZW50IGluc3RydWN0aW9uIGluc3RhbmNlcyBieSBwYXJhbXMgYW5kIGJ5IFBhcnNlZFVybCBpbnN0YW5jZVxyXG4gICAgZnVuY3Rpb24gUm91dGVSdWxlKF9yb3V0ZVBhdGgsIGhhbmRsZXIsIF9yb3V0ZU5hbWUpIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZVBhdGggPSBfcm91dGVQYXRoO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgICAgICAgdGhpcy5fcm91dGVOYW1lID0gX3JvdXRlTmFtZTtcclxuICAgICAgICB0aGlzLl9jYWNoZSA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLnNwZWNpZmljaXR5ID0gdGhpcy5fcm91dGVQYXRoLnNwZWNpZmljaXR5O1xyXG4gICAgICAgIHRoaXMuaGFzaCA9IHRoaXMuX3JvdXRlUGF0aC5oYXNoO1xyXG4gICAgICAgIHRoaXMudGVybWluYWwgPSB0aGlzLl9yb3V0ZVBhdGgudGVybWluYWw7XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUm91dGVSdWxlLnByb3RvdHlwZSwgXCJwYXRoXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlUGF0aC50b1N0cmluZygpOyB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkgeyB0aHJvdyBuZXcgQmFzZUV4Y2VwdGlvbigneW91IGNhbm5vdCBzZXQgdGhlIHBhdGggb2YgYSBSb3V0ZVJ1bGUgZGlyZWN0bHknKTsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBSb3V0ZVJ1bGUucHJvdG90eXBlLnJlY29nbml6ZSA9IGZ1bmN0aW9uIChiZWdpbm5pbmdTZWdtZW50KSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5fcm91dGVQYXRoLm1hdGNoVXJsKGJlZ2lubmluZ1NlZ21lbnQpO1xyXG4gICAgICAgIGlmIChpc0JsYW5rKHJlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIucmVzb2x2ZUNvbXBvbmVudFR5cGUoKS50aGVuKGZ1bmN0aW9uIChfKSB7XHJcbiAgICAgICAgICAgIHZhciBjb21wb25lbnRJbnN0cnVjdGlvbiA9IF90aGlzLl9nZXRJbnN0cnVjdGlvbihyZXMudXJsUGF0aCwgcmVzLnVybFBhcmFtcywgcmVzLmFsbFBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUGF0aE1hdGNoKGNvbXBvbmVudEluc3RydWN0aW9uLCByZXMucmVzdCwgcmVzLmF1eGlsaWFyeSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgUm91dGVSdWxlLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuICAgICAgICB2YXIgZ2VuZXJhdGVkID0gdGhpcy5fcm91dGVQYXRoLmdlbmVyYXRlVXJsKHBhcmFtcyk7XHJcbiAgICAgICAgdmFyIHVybFBhdGggPSBnZW5lcmF0ZWQudXJsUGF0aDtcclxuICAgICAgICB2YXIgdXJsUGFyYW1zID0gZ2VuZXJhdGVkLnVybFBhcmFtcztcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0SW5zdHJ1Y3Rpb24odXJsUGF0aCwgdXJsX3BhcnNlcl8xLmNvbnZlcnRVcmxQYXJhbXNUb0FycmF5KHVybFBhcmFtcyksIHBhcmFtcyk7XHJcbiAgICB9O1xyXG4gICAgUm91dGVSdWxlLnByb3RvdHlwZS5nZW5lcmF0ZUNvbXBvbmVudFBhdGhWYWx1ZXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlUGF0aC5nZW5lcmF0ZVVybChwYXJhbXMpO1xyXG4gICAgfTtcclxuICAgIFJvdXRlUnVsZS5wcm90b3R5cGUuX2dldEluc3RydWN0aW9uID0gZnVuY3Rpb24gKHVybFBhdGgsIHVybFBhcmFtcywgcGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKGlzQmxhbmsodGhpcy5oYW5kbGVyLmNvbXBvbmVudFR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiVHJpZWQgdG8gZ2V0IGluc3RydWN0aW9uIGJlZm9yZSB0aGUgdHlwZSB3YXMgbG9hZGVkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhc2hLZXkgPSB1cmxQYXRoICsgJz8nICsgdXJsUGFyYW1zLmpvaW4oJyYnKTtcclxuICAgICAgICBpZiAodGhpcy5fY2FjaGUuaGFzKGhhc2hLZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5nZXQoaGFzaEtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBpbnN0cnVjdGlvbl8xLkNvbXBvbmVudEluc3RydWN0aW9uKHVybFBhdGgsIHVybFBhcmFtcywgdGhpcy5oYW5kbGVyLmRhdGEsIHRoaXMuaGFuZGxlci5jb21wb25lbnRUeXBlLCB0aGlzLnRlcm1pbmFsLCB0aGlzLnNwZWNpZmljaXR5LCBwYXJhbXMsIHRoaXMuX3JvdXRlTmFtZSk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuc2V0KGhhc2hLZXksIGluc3RydWN0aW9uKTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJvdXRlUnVsZTtcclxufSkoKTtcclxuZXhwb3J0cy5Sb3V0ZVJ1bGUgPSBSb3V0ZVJ1bGU7XHJcbnZhciBydWxlc18xID0gcm91dGVyUmVxdWlyZSgnLi9ydWxlcycpO1xyXG52YXIgcm91dGVfY29uZmlnX2ltcGxfMSA9IHJvdXRlclJlcXVpcmUoJy4uL3JvdXRlX2NvbmZpZy9yb3V0ZV9jb25maWdfaW1wbCcpO1xyXG52YXIgYXN5bmNfcm91dGVfaGFuZGxlcl8xID0gcm91dGVyUmVxdWlyZSgnLi9yb3V0ZV9oYW5kbGVycy9hc3luY19yb3V0ZV9oYW5kbGVyJyk7XHJcbnZhciBzeW5jX3JvdXRlX2hhbmRsZXJfMSA9IHJvdXRlclJlcXVpcmUoJy4vcm91dGVfaGFuZGxlcnMvc3luY19yb3V0ZV9oYW5kbGVyJyk7XHJcbnZhciBwYXJhbV9yb3V0ZV9wYXRoXzEgPSByb3V0ZXJSZXF1aXJlKCcuL3JvdXRlX3BhdGhzL3BhcmFtX3JvdXRlX3BhdGgnKTtcclxudmFyIHJlZ2V4X3JvdXRlX3BhdGhfMSA9IHJvdXRlclJlcXVpcmUoJy4vcm91dGVfcGF0aHMvcmVnZXhfcm91dGVfcGF0aCcpO1xyXG4vKipcclxuICogQSBgUnVsZVNldGAgaXMgcmVzcG9uc2libGUgZm9yIHJlY29nbml6aW5nIHJvdXRlcyBmb3IgYSBwYXJ0aWN1bGFyIGNvbXBvbmVudC5cclxuICogSXQgaXMgY29uc3VtZWQgYnkgYFJvdXRlUmVnaXN0cnlgLCB3aGljaCBrbm93cyBob3cgdG8gcmVjb2duaXplIGFuIGVudGlyZSBoaWVyYXJjaHkgb2ZcclxuICogY29tcG9uZW50cy5cclxuICovXHJcbnZhciBSdWxlU2V0ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFJ1bGVTZXQoKSB7XHJcbiAgICAgICAgdGhpcy5ydWxlc0J5TmFtZSA9IG5ldyBNYXAoKTtcclxuICAgICAgICAvLyBtYXAgZnJvbSBuYW1lIHRvIHJ1bGVcclxuICAgICAgICB0aGlzLmF1eFJ1bGVzQnlOYW1lID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIC8vIG1hcCBmcm9tIHN0YXJ0aW5nIHBhdGggdG8gcnVsZVxyXG4gICAgICAgIHRoaXMuYXV4UnVsZXNCeVBhdGggPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgLy8gVE9ETzogb3B0aW1pemUgdGhpcyBpbnRvIGEgdHJpZVxyXG4gICAgICAgIHRoaXMucnVsZXMgPSBbXTtcclxuICAgICAgICAvLyB0aGUgcnVsZSB0byB1c2UgYXV0b21hdGljYWxseSB3aGVuIHJlY29nbml6aW5nIG9yIGdlbmVyYXRpbmcgZnJvbSB0aGlzIHJ1bGUgc2V0XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0UnVsZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENvbmZpZ3VyZSBhZGRpdGlvbmFsIHJ1bGVzIGluIHRoaXMgcnVsZSBzZXQgZnJvbSBhIHJvdXRlIGRlZmluaXRpb25cclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBjb25maWcgaXMgdGVybWluYWxcclxuICAgICAqL1xyXG4gICAgUnVsZVNldC5wcm90b3R5cGUuY29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykge1xyXG4gICAgICAgIHZhciBoYW5kbGVyO1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoY29uZmlnLm5hbWUpICYmIGNvbmZpZy5uYW1lWzBdLnRvVXBwZXJDYXNlKCkgIT0gY29uZmlnLm5hbWVbMF0pIHtcclxuICAgICAgICAgICAgdmFyIHN1Z2dlc3RlZE5hbWUgPSBjb25maWcubmFtZVswXS50b1VwcGVyQ2FzZSgpICsgY29uZmlnLm5hbWUuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQmFzZUV4Y2VwdGlvbihcIlJvdXRlIFxcXCJcIiArIGNvbmZpZy5wYXRoICsgXCJcXFwiIHdpdGggbmFtZSBcXFwiXCIgKyBjb25maWcubmFtZSArIFwiXFxcIiBkb2VzIG5vdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuIFJvdXRlIG5hbWVzIHNob3VsZCBiZSBDYW1lbENhc2UgbGlrZSBcXFwiXCIgKyBzdWdnZXN0ZWROYW1lICsgXCJcXFwiLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIHJvdXRlX2NvbmZpZ19pbXBsXzEuQXV4Um91dGUpIHtcclxuICAgICAgICAgICAgaGFuZGxlciA9IG5ldyBzeW5jX3JvdXRlX2hhbmRsZXJfMS5TeW5jUm91dGVIYW5kbGVyKGNvbmZpZy5jb21wb25lbnQsIGNvbmZpZy5kYXRhKTtcclxuICAgICAgICAgICAgdmFyIHJvdXRlUGF0aF8xID0gdGhpcy5fZ2V0Um91dGVQYXRoKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIHZhciBhdXhSdWxlID0gbmV3IHJ1bGVzXzEuUm91dGVSdWxlKHJvdXRlUGF0aF8xLCBoYW5kbGVyLCBjb25maWcubmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYXV4UnVsZXNCeVBhdGguc2V0KHJvdXRlUGF0aF8xLnRvU3RyaW5nKCksIGF1eFJ1bGUpO1xyXG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGNvbmZpZy5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXhSdWxlc0J5TmFtZS5zZXQoY29uZmlnLm5hbWUsIGF1eFJ1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhdXhSdWxlLnRlcm1pbmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdXNlQXNEZWZhdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIHJvdXRlX2NvbmZpZ19pbXBsXzEuUmVkaXJlY3QpIHtcclxuICAgICAgICAgICAgdmFyIHJvdXRlUGF0aF8yID0gdGhpcy5fZ2V0Um91dGVQYXRoKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIHZhciByZWRpcmVjdG9yID0gbmV3IHJ1bGVzXzEuUmVkaXJlY3RSdWxlKHJvdXRlUGF0aF8yLCBjb25maWcucmVkaXJlY3RUbyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Fzc2VydE5vSGFzaENvbGxpc2lvbihyZWRpcmVjdG9yLmhhc2gsIGNvbmZpZy5wYXRoKTtcclxuICAgICAgICAgICAgdGhpcy5ydWxlcy5wdXNoKHJlZGlyZWN0b3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIHJvdXRlX2NvbmZpZ19pbXBsXzEuUm91dGUpIHtcclxuICAgICAgICAgICAgaGFuZGxlciA9IG5ldyBzeW5jX3JvdXRlX2hhbmRsZXJfMS5TeW5jUm91dGVIYW5kbGVyKGNvbmZpZy5jb21wb25lbnQsIGNvbmZpZy5kYXRhKTtcclxuICAgICAgICAgICAgdXNlQXNEZWZhdWx0ID0gaXNQcmVzZW50KGNvbmZpZy51c2VBc0RlZmF1bHQpICYmIGNvbmZpZy51c2VBc0RlZmF1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIHJvdXRlX2NvbmZpZ19pbXBsXzEuQXN5bmNSb3V0ZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVyID0gbmV3IGFzeW5jX3JvdXRlX2hhbmRsZXJfMS5Bc3luY1JvdXRlSGFuZGxlcihjb25maWcubG9hZGVyLCBjb25maWcuZGF0YSk7XHJcbiAgICAgICAgICAgIHVzZUFzRGVmYXVsdCA9IGlzUHJlc2VudChjb25maWcudXNlQXNEZWZhdWx0KSAmJiBjb25maWcudXNlQXNEZWZhdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcm91dGVQYXRoID0gdGhpcy5fZ2V0Um91dGVQYXRoKGNvbmZpZyk7XHJcbiAgICAgICAgdmFyIG5ld1J1bGUgPSBuZXcgcnVsZXNfMS5Sb3V0ZVJ1bGUocm91dGVQYXRoLCBoYW5kbGVyLCBjb25maWcubmFtZSk7XHJcbiAgICAgICAgdGhpcy5fYXNzZXJ0Tm9IYXNoQ29sbGlzaW9uKG5ld1J1bGUuaGFzaCwgY29uZmlnLnBhdGgpO1xyXG4gICAgICAgIGlmICh1c2VBc0RlZmF1bHQpIHtcclxuICAgICAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmRlZmF1bHRSdWxlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oXCJPbmx5IG9uZSByb3V0ZSBjYW4gYmUgZGVmYXVsdFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRSdWxlID0gbmV3UnVsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ydWxlcy5wdXNoKG5ld1J1bGUpO1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoY29uZmlnLm5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVsZXNCeU5hbWUuc2V0KGNvbmZpZy5uYW1lLCBuZXdSdWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld1J1bGUudGVybWluYWw7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIFVSTCwgcmV0dXJucyBhIGxpc3Qgb2YgYFJvdXRlTWF0Y2hgZXMsIHdoaWNoIGFyZSBwYXJ0aWFsIHJlY29nbml0aW9ucyBmb3Igc29tZSByb3V0ZS5cclxuICAgICAqL1xyXG4gICAgUnVsZVNldC5wcm90b3R5cGUucmVjb2duaXplID0gZnVuY3Rpb24gKHVybFBhcnNlKSB7XHJcbiAgICAgICAgdmFyIHNvbHV0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMucnVsZXMuZm9yRWFjaChmdW5jdGlvbiAocm91dGVSZWNvZ25pemVyKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXRoTWF0Y2ggPSByb3V0ZVJlY29nbml6ZXIucmVjb2duaXplKHVybFBhcnNlKTtcclxuICAgICAgICAgICAgaWYgKGlzUHJlc2VudChwYXRoTWF0Y2gpKSB7XHJcbiAgICAgICAgICAgICAgICBzb2x1dGlvbnMucHVzaChwYXRoTWF0Y2gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGFyZSByb3V0aW5nIGp1c3QgdG8gYW4gYXV4IHJvdXRlXHJcbiAgICAgICAgaWYgKHNvbHV0aW9ucy5sZW5ndGggPT0gMCAmJiBpc1ByZXNlbnQodXJsUGFyc2UpICYmIHVybFBhcnNlLmF1eGlsaWFyeS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbUHJvbWlzZVdyYXBwZXIucmVzb2x2ZShuZXcgcnVsZXNfMS5QYXRoTWF0Y2gobnVsbCwgbnVsbCwgdXJsUGFyc2UuYXV4aWxpYXJ5KSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc29sdXRpb25zO1xyXG4gICAgfTtcclxuICAgIFJ1bGVTZXQucHJvdG90eXBlLnJlY29nbml6ZUF1eGlsaWFyeSA9IGZ1bmN0aW9uICh1cmxQYXJzZSkge1xyXG4gICAgICAgIHZhciByb3V0ZVJlY29nbml6ZXIgPSB0aGlzLmF1eFJ1bGVzQnlQYXRoLmdldCh1cmxQYXJzZS5wYXRoKTtcclxuICAgICAgICBpZiAoaXNQcmVzZW50KHJvdXRlUmVjb2duaXplcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtyb3V0ZVJlY29nbml6ZXIucmVjb2duaXplKHVybFBhcnNlKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbUHJvbWlzZVdyYXBwZXIucmVzb2x2ZShudWxsKV07XHJcbiAgICB9O1xyXG4gICAgUnVsZVNldC5wcm90b3R5cGUuaGFzUm91dGUgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gdGhpcy5ydWxlc0J5TmFtZS5oYXMobmFtZSk7IH07XHJcbiAgICBSdWxlU2V0LnByb3RvdHlwZS5jb21wb25lbnRMb2FkZWQgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc1JvdXRlKG5hbWUpICYmIGlzUHJlc2VudCh0aGlzLnJ1bGVzQnlOYW1lLmdldChuYW1lKS5oYW5kbGVyLmNvbXBvbmVudFR5cGUpO1xyXG4gICAgfTtcclxuICAgIFJ1bGVTZXQucHJvdG90eXBlLmxvYWRDb21wb25lbnQgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bGVzQnlOYW1lLmdldChuYW1lKS5oYW5kbGVyLnJlc29sdmVDb21wb25lbnRUeXBlKCk7XHJcbiAgICB9O1xyXG4gICAgUnVsZVNldC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAobmFtZSwgcGFyYW1zKSB7XHJcbiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLnJ1bGVzQnlOYW1lLmdldChuYW1lKTtcclxuICAgICAgICBpZiAoaXNCbGFuayhydWxlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJ1bGUuZ2VuZXJhdGUocGFyYW1zKTtcclxuICAgIH07XHJcbiAgICBSdWxlU2V0LnByb3RvdHlwZS5nZW5lcmF0ZUF1eGlsaWFyeSA9IGZ1bmN0aW9uIChuYW1lLCBwYXJhbXMpIHtcclxuICAgICAgICB2YXIgcnVsZSA9IHRoaXMuYXV4UnVsZXNCeU5hbWUuZ2V0KG5hbWUpO1xyXG4gICAgICAgIGlmIChpc0JsYW5rKHJ1bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcnVsZS5nZW5lcmF0ZShwYXJhbXMpO1xyXG4gICAgfTtcclxuICAgIFJ1bGVTZXQucHJvdG90eXBlLl9hc3NlcnROb0hhc2hDb2xsaXNpb24gPSBmdW5jdGlvbiAoaGFzaCwgcGF0aCkge1xyXG4gICAgICAgIHRoaXMucnVsZXMuZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xyXG4gICAgICAgICAgICBpZiAoaGFzaCA9PSBydWxlLmhhc2gpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiQ29uZmlndXJhdGlvbiAnXCIgKyBwYXRoICsgXCInIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIHJvdXRlICdcIiArIHJ1bGUucGF0aCArIFwiJ1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFJ1bGVTZXQucHJvdG90eXBlLl9nZXRSb3V0ZVBhdGggPSBmdW5jdGlvbiAoY29uZmlnKSB7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChjb25maWcucmVnZXgpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNvbmZpZy5zZXJpYWxpemVyKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyByZWdleF9yb3V0ZV9wYXRoXzEuUmVnZXhSb3V0ZVBhdGgoY29uZmlnLnJlZ2V4LCBjb25maWcuc2VyaWFsaXplcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFzZUV4Y2VwdGlvbihcIlJvdXRlIHByb3ZpZGVzIGEgcmVnZXggcHJvcGVydHksICdcIiArIGNvbmZpZy5yZWdleCArIFwiJywgYnV0IG5vIHNlcmlhbGl6ZXIgcHJvcGVydHlcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChjb25maWcucGF0aCkpIHtcclxuICAgICAgICAgICAgLy8gQXV4aWxpYXJ5IHJvdXRlcyBkbyBub3QgaGF2ZSBhIHNsYXNoIGF0IHRoZSBzdGFydFxyXG4gICAgICAgICAgICB2YXIgcGF0aCA9IChjb25maWcgaW5zdGFuY2VvZiByb3V0ZV9jb25maWdfaW1wbF8xLkF1eFJvdXRlICYmIGNvbmZpZy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkgP1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLnBhdGguc3Vic3RyaW5nKDEpIDpcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5wYXRoO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IHBhcmFtX3JvdXRlX3BhdGhfMS5QYXJhbVJvdXRlUGF0aChwYXRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oJ1JvdXRlIG11c3QgcHJvdmlkZSBlaXRoZXIgYSBwYXRoIG9yIHJlZ2V4IHByb3BlcnR5Jyk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJ1bGVTZXQ7XHJcbn0pKCk7XHJcbmV4cG9ydHMuUnVsZVNldCA9IFJ1bGVTZXQ7XHJcbnZhciBNYXRjaGVkVXJsID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE1hdGNoZWRVcmwodXJsUGF0aCwgdXJsUGFyYW1zLCBhbGxQYXJhbXMsIGF1eGlsaWFyeSwgcmVzdCkge1xyXG4gICAgICAgIHRoaXMudXJsUGF0aCA9IHVybFBhdGg7XHJcbiAgICAgICAgdGhpcy51cmxQYXJhbXMgPSB1cmxQYXJhbXM7XHJcbiAgICAgICAgdGhpcy5hbGxQYXJhbXMgPSBhbGxQYXJhbXM7XHJcbiAgICAgICAgdGhpcy5hdXhpbGlhcnkgPSBhdXhpbGlhcnk7XHJcbiAgICAgICAgdGhpcy5yZXN0ID0gcmVzdDtcclxuICAgIH1cclxuICAgIHJldHVybiBNYXRjaGVkVXJsO1xyXG59KSgpO1xyXG5leHBvcnRzLk1hdGNoZWRVcmwgPSBNYXRjaGVkVXJsO1xyXG52YXIgR2VuZXJhdGVkVXJsID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEdlbmVyYXRlZFVybCh1cmxQYXRoLCB1cmxQYXJhbXMpIHtcclxuICAgICAgICB0aGlzLnVybFBhdGggPSB1cmxQYXRoO1xyXG4gICAgICAgIHRoaXMudXJsUGFyYW1zID0gdXJsUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEdlbmVyYXRlZFVybDtcclxufSkoKTtcclxuZXhwb3J0cy5HZW5lcmF0ZWRVcmwgPSBHZW5lcmF0ZWRVcmw7XHJcbnZhciB1dGlsc18xID0gcm91dGVyUmVxdWlyZSgnLi4vLi4vdXRpbHMnKTtcclxudmFyIHVybF9wYXJzZXJfMSA9IHJvdXRlclJlcXVpcmUoJy4uLy4uL3VybF9wYXJzZXInKTtcclxudmFyIHJvdXRlX3BhdGhfMSA9IHJvdXRlclJlcXVpcmUoJy4vcm91dGVfcGF0aCcpO1xyXG4vKipcclxuICogSWRlbnRpZmllZCBieSBhIGAuLi5gIFVSTCBzZWdtZW50LiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZVxyXG4gKiBSb3V0ZSB3aWxsIGNvbnRpbnVlIHRvIGJlIG1hdGNoZWQgYnkgY2hpbGQgYFJvdXRlcmBzLlxyXG4gKi9cclxudmFyIENvbnRpbnVhdGlvblBhdGhTZWdtZW50ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENvbnRpbnVhdGlvblBhdGhTZWdtZW50KCkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3BlY2lmaWNpdHkgPSAnJztcclxuICAgICAgICB0aGlzLmhhc2ggPSAnLi4uJztcclxuICAgIH1cclxuICAgIENvbnRpbnVhdGlvblBhdGhTZWdtZW50LnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHsgcmV0dXJuICcnOyB9O1xyXG4gICAgQ29udGludWF0aW9uUGF0aFNlZ21lbnQucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHRydWU7IH07XHJcbiAgICByZXR1cm4gQ29udGludWF0aW9uUGF0aFNlZ21lbnQ7XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBJZGVudGlmaWVkIGJ5IGEgc3RyaW5nIG5vdCBzdGFydGluZyB3aXRoIGEgYDpgIG9yIGAqYC5cclxuICogT25seSBtYXRjaGVzIHRoZSBVUkwgc2VnbWVudHMgdGhhdCBlcXVhbCB0aGUgc2VnbWVudCBwYXRoXHJcbiAqL1xyXG52YXIgU3RhdGljUGF0aFNlZ21lbnQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gU3RhdGljUGF0aFNlZ21lbnQocGF0aCkge1xyXG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5zcGVjaWZpY2l0eSA9ICcyJztcclxuICAgICAgICB0aGlzLmhhc2ggPSBwYXRoO1xyXG4gICAgfVxyXG4gICAgU3RhdGljUGF0aFNlZ21lbnQucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHBhdGggPT0gdGhpcy5wYXRoOyB9O1xyXG4gICAgU3RhdGljUGF0aFNlZ21lbnQucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gKHBhcmFtcykgeyByZXR1cm4gdGhpcy5wYXRoOyB9O1xyXG4gICAgcmV0dXJuIFN0YXRpY1BhdGhTZWdtZW50O1xyXG59KSgpO1xyXG4vKipcclxuICogSWRlbnRpZmllZCBieSBhIHN0cmluZyBzdGFydGluZyB3aXRoIGA6YC4gSW5kaWNhdGVzIGEgc2VnbWVudFxyXG4gKiB0aGF0IGNhbiBjb250YWluIGEgdmFsdWUgdGhhdCB3aWxsIGJlIGV4dHJhY3RlZCBhbmQgcHJvdmlkZWQgdG9cclxuICogYSBtYXRjaGluZyBgSW5zdHJ1Y3Rpb25gLlxyXG4gKi9cclxudmFyIER5bmFtaWNQYXRoU2VnbWVudCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBEeW5hbWljUGF0aFNlZ21lbnQobmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5zcGVjaWZpY2l0eSA9ICcxJztcclxuICAgICAgICB0aGlzLmhhc2ggPSAnOic7XHJcbiAgICB9XHJcbiAgICBEeW5hbWljUGF0aFNlZ21lbnQucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHBhdGgubGVuZ3RoID4gMDsgfTtcclxuICAgIER5bmFtaWNQYXRoU2VnbWVudC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFTdHJpbmdNYXBXcmFwcGVyLmNvbnRhaW5zKHBhcmFtcy5tYXAsIHRoaXMubmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oXCJSb3V0ZSBnZW5lcmF0b3IgZm9yICdcIiArIHRoaXMubmFtZSArIFwiJyB3YXMgbm90IGluY2x1ZGVkIGluIHBhcmFtZXRlcnMgcGFzc2VkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVuY29kZUR5bmFtaWNTZWdtZW50KHV0aWxzXzEubm9ybWFsaXplU3RyaW5nKHBhcmFtcy5nZXQodGhpcy5uYW1lKSkpO1xyXG4gICAgfTtcclxuICAgIER5bmFtaWNQYXRoU2VnbWVudC5wYXJhbU1hdGNoZXIgPSAvXjooW15cXC9dKykkL2c7XHJcbiAgICByZXR1cm4gRHluYW1pY1BhdGhTZWdtZW50O1xyXG59KSgpO1xyXG4vKipcclxuICogSWRlbnRpZmllZCBieSBhIHN0cmluZyBzdGFydGluZyB3aXRoIGAqYCBJbmRpY2F0ZXMgdGhhdCBhbGwgdGhlIGZvbGxvd2luZ1xyXG4gKiBzZWdtZW50cyBtYXRjaCB0aGlzIHJvdXRlIGFuZCB0aGF0IHRoZSB2YWx1ZSBvZiB0aGVzZSBzZWdtZW50cyBzaG91bGRcclxuICogYmUgcHJvdmlkZWQgdG8gYSBtYXRjaGluZyBgSW5zdHJ1Y3Rpb25gLlxyXG4gKi9cclxudmFyIFN0YXJQYXRoU2VnbWVudCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTdGFyUGF0aFNlZ21lbnQobmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5zcGVjaWZpY2l0eSA9ICcwJztcclxuICAgICAgICB0aGlzLmhhc2ggPSAnKic7XHJcbiAgICB9XHJcbiAgICBTdGFyUGF0aFNlZ21lbnQucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHRydWU7IH07XHJcbiAgICBTdGFyUGF0aFNlZ21lbnQucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gKHBhcmFtcykgeyByZXR1cm4gdXRpbHNfMS5ub3JtYWxpemVTdHJpbmcocGFyYW1zLmdldCh0aGlzLm5hbWUpKTsgfTtcclxuICAgIFN0YXJQYXRoU2VnbWVudC53aWxkY2FyZE1hdGNoZXIgPSAvXlxcKihbXlxcL10rKSQvZztcclxuICAgIHJldHVybiBTdGFyUGF0aFNlZ21lbnQ7XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBQYXJzZXMgYSBVUkwgc3RyaW5nIHVzaW5nIGEgZ2l2ZW4gbWF0Y2hlciBEU0wsIGFuZCBnZW5lcmF0ZXMgVVJMcyBmcm9tIHBhcmFtIG1hcHNcclxuICovXHJcbnZhciBQYXJhbVJvdXRlUGF0aCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbWF0Y2hlciBEU0xcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUGFyYW1Sb3V0ZVBhdGgocm91dGVQYXRoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZVBhdGggPSByb3V0ZVBhdGg7XHJcbiAgICAgICAgdGhpcy50ZXJtaW5hbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fYXNzZXJ0VmFsaWRQYXRoKHJvdXRlUGF0aCk7XHJcbiAgICAgICAgdGhpcy5fcGFyc2VQYXRoU3RyaW5nKHJvdXRlUGF0aCk7XHJcbiAgICAgICAgdGhpcy5zcGVjaWZpY2l0eSA9IHRoaXMuX2NhbGN1bGF0ZVNwZWNpZmljaXR5KCk7XHJcbiAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5fY2FsY3VsYXRlSGFzaCgpO1xyXG4gICAgICAgIHZhciBsYXN0U2VnbWVudCA9IHRoaXMuX3NlZ21lbnRzW3RoaXMuX3NlZ21lbnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIHRoaXMudGVybWluYWwgPSAhKGxhc3RTZWdtZW50IGluc3RhbmNlb2YgQ29udGludWF0aW9uUGF0aFNlZ21lbnQpO1xyXG4gICAgfVxyXG4gICAgUGFyYW1Sb3V0ZVBhdGgucHJvdG90eXBlLm1hdGNoVXJsID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHZhciBuZXh0VXJsU2VnbWVudCA9IHVybDtcclxuICAgICAgICB2YXIgY3VycmVudFVybFNlZ21lbnQ7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uYWxQYXJhbXMgPSB7fTtcclxuICAgICAgICB2YXIgY2FwdHVyZWQgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlZ21lbnRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXRoU2VnbWVudCA9IHRoaXMuX3NlZ21lbnRzW2ldO1xyXG4gICAgICAgICAgICBjdXJyZW50VXJsU2VnbWVudCA9IG5leHRVcmxTZWdtZW50O1xyXG4gICAgICAgICAgICBpZiAocGF0aFNlZ21lbnQgaW5zdGFuY2VvZiBDb250aW51YXRpb25QYXRoU2VnbWVudCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzUHJlc2VudChjdXJyZW50VXJsU2VnbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFyIHNlZ21lbnQgY29uc3VtZXMgYWxsIG9mIHRoZSByZW1haW5pbmcgVVJMLCBpbmNsdWRpbmcgbWF0cml4IHBhcmFtc1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGhTZWdtZW50IGluc3RhbmNlb2YgU3RhclBhdGhTZWdtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtc1twYXRoU2VnbWVudC5uYW1lXSA9IGN1cnJlbnRVcmxTZWdtZW50LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWQucHVzaChjdXJyZW50VXJsU2VnbWVudC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0VXJsU2VnbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXB0dXJlZC5wdXNoKGN1cnJlbnRVcmxTZWdtZW50LnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGhTZWdtZW50IGluc3RhbmNlb2YgRHluYW1pY1BhdGhTZWdtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtc1twYXRoU2VnbWVudC5uYW1lXSA9IGRlY29kZUR5bmFtaWNTZWdtZW50KGN1cnJlbnRVcmxTZWdtZW50LnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXBhdGhTZWdtZW50Lm1hdGNoKGN1cnJlbnRVcmxTZWdtZW50LnBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXh0VXJsU2VnbWVudCA9IGN1cnJlbnRVcmxTZWdtZW50LmNoaWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFwYXRoU2VnbWVudC5tYXRjaCgnJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRlcm1pbmFsICYmIGlzUHJlc2VudChuZXh0VXJsU2VnbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB1cmxQYXRoID0gY2FwdHVyZWQuam9pbignLycpO1xyXG4gICAgICAgIHZhciBhdXhpbGlhcnkgPSBbXTtcclxuICAgICAgICB2YXIgdXJsUGFyYW1zID0gW107XHJcbiAgICAgICAgdmFyIGFsbFBhcmFtcyA9IHBvc2l0aW9uYWxQYXJhbXM7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChjdXJyZW50VXJsU2VnbWVudCkpIHtcclxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgcm9vdCBjb21wb25lbnQsIHJlYWQgcXVlcnkgcGFyYW1zLiBPdGhlcndpc2UsIHJlYWQgbWF0cml4IHBhcmFtcy5cclxuICAgICAgICAgICAgdmFyIHBhcmFtc1NlZ21lbnQgPSB1cmwgaW5zdGFuY2VvZiB1cmxfcGFyc2VyXzEuUm9vdFVybCA/IHVybCA6IGN1cnJlbnRVcmxTZWdtZW50O1xyXG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KHBhcmFtc1NlZ21lbnQucGFyYW1zKSkge1xyXG4gICAgICAgICAgICAgICAgYWxsUGFyYW1zID0gU3RyaW5nTWFwV3JhcHBlci5tZXJnZShwYXJhbXNTZWdtZW50LnBhcmFtcywgcG9zaXRpb25hbFBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXMgPSB1cmxfcGFyc2VyXzEuY29udmVydFVybFBhcmFtc1RvQXJyYXkocGFyYW1zU2VnbWVudC5wYXJhbXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWxsUGFyYW1zID0gcG9zaXRpb25hbFBhcmFtcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhdXhpbGlhcnkgPSBjdXJyZW50VXJsU2VnbWVudC5hdXhpbGlhcnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgcm91dGVfcGF0aF8xLk1hdGNoZWRVcmwodXJsUGF0aCwgdXJsUGFyYW1zLCBhbGxQYXJhbXMsIGF1eGlsaWFyeSwgbmV4dFVybFNlZ21lbnQpO1xyXG4gICAgfTtcclxuICAgIFBhcmFtUm91dGVQYXRoLnByb3RvdHlwZS5nZW5lcmF0ZVVybCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuICAgICAgICB2YXIgcGFyYW1Ub2tlbnMgPSBuZXcgdXRpbHNfMS5Ub3VjaE1hcChwYXJhbXMpO1xyXG4gICAgICAgIHZhciBwYXRoID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWdtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc2VnbWVudCA9IHRoaXMuX3NlZ21lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIShzZWdtZW50IGluc3RhbmNlb2YgQ29udGludWF0aW9uUGF0aFNlZ21lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2goc2VnbWVudC5nZW5lcmF0ZShwYXJhbVRva2VucykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB1cmxQYXRoID0gcGF0aC5qb2luKCcvJyk7XHJcbiAgICAgICAgdmFyIG5vblBvc2l0aW9uYWxQYXJhbXMgPSBwYXJhbVRva2Vucy5nZXRVbnVzZWQoKTtcclxuICAgICAgICB2YXIgdXJsUGFyYW1zID0gbm9uUG9zaXRpb25hbFBhcmFtcztcclxuICAgICAgICByZXR1cm4gbmV3IHJvdXRlX3BhdGhfMS5HZW5lcmF0ZWRVcmwodXJsUGF0aCwgdXJsUGFyYW1zKTtcclxuICAgIH07XHJcbiAgICBQYXJhbVJvdXRlUGF0aC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnJvdXRlUGF0aDsgfTtcclxuICAgIFBhcmFtUm91dGVQYXRoLnByb3RvdHlwZS5fcGFyc2VQYXRoU3RyaW5nID0gZnVuY3Rpb24gKHJvdXRlUGF0aCkge1xyXG4gICAgICAgIC8vIG5vcm1hbGl6ZSByb3V0ZSBhcyBub3Qgc3RhcnRpbmcgd2l0aCBhIFwiL1wiLiBSZWNvZ25pdGlvbiB3aWxsXHJcbiAgICAgICAgLy8gYWxzbyBub3JtYWxpemUuXHJcbiAgICAgICAgaWYgKHJvdXRlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgICAgcm91dGVQYXRoID0gcm91dGVQYXRoLnN1YnN0cmluZygxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlZ21lbnRTdHJpbmdzID0gcm91dGVQYXRoLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgdGhpcy5fc2VnbWVudHMgPSBbXTtcclxuICAgICAgICB2YXIgbGltaXQgPSBzZWdtZW50U3RyaW5ncy5sZW5ndGggLSAxO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGxpbWl0OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50U3RyaW5nc1tpXSwgbWF0Y2g7XHJcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQobWF0Y2ggPSBSZWdFeHBXcmFwcGVyLmZpcnN0TWF0Y2goRHluYW1pY1BhdGhTZWdtZW50LnBhcmFtTWF0Y2hlciwgc2VnbWVudCkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50cy5wdXNoKG5ldyBEeW5hbWljUGF0aFNlZ21lbnQobWF0Y2hbMV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ByZXNlbnQobWF0Y2ggPSBSZWdFeHBXcmFwcGVyLmZpcnN0TWF0Y2goU3RhclBhdGhTZWdtZW50LndpbGRjYXJkTWF0Y2hlciwgc2VnbWVudCkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50cy5wdXNoKG5ldyBTdGFyUGF0aFNlZ21lbnQobWF0Y2hbMV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzZWdtZW50ID09ICcuLi4nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA8IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oXCJVbmV4cGVjdGVkIFxcXCIuLi5cXFwiIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBwYXRoIGZvciBcXFwiXCIgKyByb3V0ZVBhdGggKyBcIlxcXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudHMucHVzaChuZXcgQ29udGludWF0aW9uUGF0aFNlZ21lbnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50cy5wdXNoKG5ldyBTdGF0aWNQYXRoU2VnbWVudChzZWdtZW50KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgUGFyYW1Sb3V0ZVBhdGgucHJvdG90eXBlLl9jYWxjdWxhdGVTcGVjaWZpY2l0eSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBUaGUgXCJzcGVjaWZpY2l0eVwiIG9mIGEgcGF0aCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCByb3V0ZSBpcyB1c2VkIHdoZW4gbXVsdGlwbGUgcm91dGVzXHJcbiAgICAgICAgLy8gbWF0Y2hcclxuICAgICAgICAvLyBhIFVSTC4gU3RhdGljIHNlZ21lbnRzIChsaWtlIFwiL2Zvb1wiKSBhcmUgdGhlIG1vc3Qgc3BlY2lmaWMsIGZvbGxvd2VkIGJ5IGR5bmFtaWMgc2VnbWVudHNcclxuICAgICAgICAvLyAobGlrZVxyXG4gICAgICAgIC8vIFwiLzppZFwiKS4gU3RhciBzZWdtZW50cyBhZGQgbm8gc3BlY2lmaWNpdHkuIFNlZ21lbnRzIGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0aCBhcmUgbW9yZVxyXG4gICAgICAgIC8vIHNwZWNpZmljXHJcbiAgICAgICAgLy8gdGhhbiBwcm9jZWVkaW5nIG9uZXMuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyB1c2VzIHBsYWNlIHZhbHVlcyB0byBjb21iaW5lIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VnbWVudHMgaW50byBhIHNpbmdsZVxyXG4gICAgICAgIC8vIHN0cmluZyB0aGF0IHdlIGNhbiBzb3J0IGxhdGVyLiBFYWNoIHN0YXRpYyBzZWdtZW50IGlzIG1hcmtlZCBhcyBhIHNwZWNpZmljaXR5IG9mIFwiMixcIiBlYWNoXHJcbiAgICAgICAgLy8gZHluYW1pYyBzZWdtZW50IGlzIHdvcnRoIFwiMVwiIHNwZWNpZmljaXR5LCBhbmQgc3RhcnMgYXJlIHdvcnRoIFwiMFwiIHNwZWNpZmljaXR5LlxyXG4gICAgICAgIHZhciBpLCBsZW5ndGggPSB0aGlzLl9zZWdtZW50cy5sZW5ndGgsIHNwZWNpZmljaXR5O1xyXG4gICAgICAgIGlmIChsZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBhIHNpbmdsZSBzbGFzaCAob3IgXCJlbXB0eSBzZWdtZW50XCIgaXMgYXMgc3BlY2lmaWMgYXMgYSBzdGF0aWMgc2VnbWVudFxyXG4gICAgICAgICAgICBzcGVjaWZpY2l0eSArPSAnMic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzcGVjaWZpY2l0eSA9ICcnO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHNwZWNpZmljaXR5ICs9IHRoaXMuX3NlZ21lbnRzW2ldLnNwZWNpZmljaXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzcGVjaWZpY2l0eTtcclxuICAgIH07XHJcbiAgICBQYXJhbVJvdXRlUGF0aC5wcm90b3R5cGUuX2NhbGN1bGF0ZUhhc2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcm91dGUgY29uZmlnIHBhdGggbGlrZSBgL2Zvby86aWRgIGNvbGxpZGVzIHdpdGhcclxuICAgICAgICAvLyBgL2Zvby86bmFtZWBcclxuICAgICAgICB2YXIgaSwgbGVuZ3RoID0gdGhpcy5fc2VnbWVudHMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBoYXNoUGFydHMgPSBbXTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaGFzaFBhcnRzLnB1c2godGhpcy5fc2VnbWVudHNbaV0uaGFzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBoYXNoUGFydHMuam9pbignLycpO1xyXG4gICAgfTtcclxuICAgIFBhcmFtUm91dGVQYXRoLnByb3RvdHlwZS5fYXNzZXJ0VmFsaWRQYXRoID0gZnVuY3Rpb24gKHBhdGgpIHtcclxuICAgICAgICBpZiAoU3RyaW5nV3JhcHBlci5jb250YWlucyhwYXRoLCAnIycpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiUGF0aCBcXFwiXCIgKyBwYXRoICsgXCJcXFwiIHNob3VsZCBub3QgaW5jbHVkZSBcXFwiI1xcXCIuIFVzZSBcXFwiSGFzaExvY2F0aW9uU3RyYXRlZ3lcXFwiIGluc3RlYWQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWxsZWdhbENoYXJhY3RlciA9IFJlZ0V4cFdyYXBwZXIuZmlyc3RNYXRjaChQYXJhbVJvdXRlUGF0aC5SRVNFUlZFRF9DSEFSUywgcGF0aCk7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChpbGxlZ2FsQ2hhcmFjdGVyKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQmFzZUV4Y2VwdGlvbihcIlBhdGggXFxcIlwiICsgcGF0aCArIFwiXFxcIiBjb250YWlucyBcXFwiXCIgKyBpbGxlZ2FsQ2hhcmFjdGVyWzBdICsgXCJcXFwiIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGluIGEgcm91dGUgY29uZmlnLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgUGFyYW1Sb3V0ZVBhdGguUkVTRVJWRURfQ0hBUlMgPSBSZWdFeHBXcmFwcGVyLmNyZWF0ZSgnLy98XFxcXCh8XFxcXCl8O3xcXFxcP3w9Jyk7XHJcbiAgICByZXR1cm4gUGFyYW1Sb3V0ZVBhdGg7XHJcbn0pKCk7XHJcbmV4cG9ydHMuUGFyYW1Sb3V0ZVBhdGggPSBQYXJhbVJvdXRlUGF0aDtcclxudmFyIFJFR0VYUF9QRVJDRU5UID0gLyUvZztcclxudmFyIFJFR0VYUF9TTEFTSCA9IC9cXC8vZztcclxudmFyIFJFR0VYUF9PUEVOX1BBUkVOVCA9IC9cXCgvZztcclxudmFyIFJFR0VYUF9DTE9TRV9QQVJFTlQgPSAvXFwpL2c7XHJcbnZhciBSRUdFWFBfU0VNSUNPTE9OID0gLzsvZztcclxuZnVuY3Rpb24gZW5jb2RlRHluYW1pY1NlZ21lbnQodmFsdWUpIHtcclxuICAgIGlmIChpc0JsYW5rKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdmFsdWUgPSBTdHJpbmdXcmFwcGVyLnJlcGxhY2VBbGwodmFsdWUsIFJFR0VYUF9QRVJDRU5ULCAnJTI1Jyk7XHJcbiAgICB2YWx1ZSA9IFN0cmluZ1dyYXBwZXIucmVwbGFjZUFsbCh2YWx1ZSwgUkVHRVhQX1NMQVNILCAnJTJGJyk7XHJcbiAgICB2YWx1ZSA9IFN0cmluZ1dyYXBwZXIucmVwbGFjZUFsbCh2YWx1ZSwgUkVHRVhQX09QRU5fUEFSRU5ULCAnJTI4Jyk7XHJcbiAgICB2YWx1ZSA9IFN0cmluZ1dyYXBwZXIucmVwbGFjZUFsbCh2YWx1ZSwgUkVHRVhQX0NMT1NFX1BBUkVOVCwgJyUyOScpO1xyXG4gICAgdmFsdWUgPSBTdHJpbmdXcmFwcGVyLnJlcGxhY2VBbGwodmFsdWUsIFJFR0VYUF9TRU1JQ09MT04sICclM0InKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG52YXIgUkVHRVhQX0VOQ19TRU1JQ09MT04gPSAvJTNCL2lnO1xyXG52YXIgUkVHRVhQX0VOQ19DTE9TRV9QQVJFTlQgPSAvJTI5L2lnO1xyXG52YXIgUkVHRVhQX0VOQ19PUEVOX1BBUkVOVCA9IC8lMjgvaWc7XHJcbnZhciBSRUdFWFBfRU5DX1NMQVNIID0gLyUyRi9pZztcclxudmFyIFJFR0VYUF9FTkNfUEVSQ0VOVCA9IC8lMjUvaWc7XHJcbmZ1bmN0aW9uIGRlY29kZUR5bmFtaWNTZWdtZW50KHZhbHVlKSB7XHJcbiAgICBpZiAoaXNCbGFuayh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHZhbHVlID0gU3RyaW5nV3JhcHBlci5yZXBsYWNlQWxsKHZhbHVlLCBSRUdFWFBfRU5DX1NFTUlDT0xPTiwgJzsnKTtcclxuICAgIHZhbHVlID0gU3RyaW5nV3JhcHBlci5yZXBsYWNlQWxsKHZhbHVlLCBSRUdFWFBfRU5DX0NMT1NFX1BBUkVOVCwgJyknKTtcclxuICAgIHZhbHVlID0gU3RyaW5nV3JhcHBlci5yZXBsYWNlQWxsKHZhbHVlLCBSRUdFWFBfRU5DX09QRU5fUEFSRU5ULCAnKCcpO1xyXG4gICAgdmFsdWUgPSBTdHJpbmdXcmFwcGVyLnJlcGxhY2VBbGwodmFsdWUsIFJFR0VYUF9FTkNfU0xBU0gsICcvJyk7XHJcbiAgICB2YWx1ZSA9IFN0cmluZ1dyYXBwZXIucmVwbGFjZUFsbCh2YWx1ZSwgUkVHRVhQX0VOQ19QRVJDRU5ULCAnJScpO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbnZhciByb3V0ZV9wYXRoXzEgPSByb3V0ZXJSZXF1aXJlKCcuL3JvdXRlX3BhdGgnKTtcclxudmFyIFJlZ2V4Um91dGVQYXRoID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFJlZ2V4Um91dGVQYXRoKF9yZVN0cmluZywgX3NlcmlhbGl6ZXIpIHtcclxuICAgICAgICB0aGlzLl9yZVN0cmluZyA9IF9yZVN0cmluZztcclxuICAgICAgICB0aGlzLl9zZXJpYWxpemVyID0gX3NlcmlhbGl6ZXI7XHJcbiAgICAgICAgdGhpcy50ZXJtaW5hbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zcGVjaWZpY2l0eSA9ICcyJztcclxuICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLl9yZVN0cmluZztcclxuICAgICAgICB0aGlzLl9yZWdleCA9IFJlZ0V4cFdyYXBwZXIuY3JlYXRlKHRoaXMuX3JlU3RyaW5nKTtcclxuICAgIH1cclxuICAgIFJlZ2V4Um91dGVQYXRoLnByb3RvdHlwZS5tYXRjaFVybCA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgdXJsUGF0aCA9IHVybC50b1N0cmluZygpO1xyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fTtcclxuICAgICAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cFdyYXBwZXIubWF0Y2hlcih0aGlzLl9yZWdleCwgdXJsUGF0aCk7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gUmVnRXhwTWF0Y2hlcldyYXBwZXIubmV4dChtYXRjaGVyKTtcclxuICAgICAgICBpZiAoaXNCbGFuayhtYXRjaCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2gubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICAgICAgcGFyYW1zW2kudG9TdHJpbmcoKV0gPSBtYXRjaFtpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyByb3V0ZV9wYXRoXzEuTWF0Y2hlZFVybCh1cmxQYXRoLCBbXSwgcGFyYW1zLCBbXSwgbnVsbCk7XHJcbiAgICB9O1xyXG4gICAgUmVnZXhSb3V0ZVBhdGgucHJvdG90eXBlLmdlbmVyYXRlVXJsID0gZnVuY3Rpb24gKHBhcmFtcykgeyByZXR1cm4gdGhpcy5fc2VyaWFsaXplcihwYXJhbXMpOyB9O1xyXG4gICAgUmVnZXhSb3V0ZVBhdGgucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcmVTdHJpbmc7IH07XHJcbiAgICByZXR1cm4gUmVnZXhSb3V0ZVBhdGg7XHJcbn0pKCk7XHJcbmV4cG9ydHMuUmVnZXhSb3V0ZVBhdGggPSBSZWdleFJvdXRlUGF0aDtcclxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufTtcclxuLyoqXHJcbiAqIGBSb3V0ZVBhcmFtc2AgaXMgYW4gaW1tdXRhYmxlIG1hcCBvZiBwYXJhbWV0ZXJzIGZvciB0aGUgZ2l2ZW4gcm91dGVcclxuICogYmFzZWQgb24gdGhlIHVybCBtYXRjaGVyIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGF0IHJvdXRlLlxyXG4gKlxyXG4gKiBZb3UgY2FuIGluamVjdCBgUm91dGVQYXJhbXNgIGludG8gdGhlIGNvbnN0cnVjdG9yIG9mIGEgY29tcG9uZW50IHRvIHVzZSBpdC5cclxuICpcclxuICogIyMjIEV4YW1wbGVcclxuICpcclxuICogYGBgXHJcbiAqIGltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdhbmd1bGFyMi9jb3JlJztcclxuICogaW1wb3J0IHtib290c3RyYXB9IGZyb20gJ2FuZ3VsYXIyL3BsYXRmb3JtL2Jyb3dzZXInO1xyXG4gKiBpbXBvcnQge1JvdXRlciwgUk9VVEVSX0RJUkVDVElWRVMsIFJPVVRFUl9QUk9WSURFUlMsIFJvdXRlQ29uZmlnLCBSb3V0ZVBhcmFtc30gZnJvbVxyXG4gKiAnYW5ndWxhcjIvcm91dGVyJztcclxuICpcclxuICogQENvbXBvbmVudCh7ZGlyZWN0aXZlczogW1JPVVRFUl9ESVJFQ1RJVkVTXX0pXHJcbiAqIEBSb3V0ZUNvbmZpZyhbXHJcbiAqICB7cGF0aDogJy91c2VyLzppZCcsIGNvbXBvbmVudDogVXNlckNtcCwgbmFtZTogJ1VzZXJDbXAnfSxcclxuICogXSlcclxuICogY2xhc3MgQXBwQ21wIHt9XHJcbiAqXHJcbiAqIEBDb21wb25lbnQoeyB0ZW1wbGF0ZTogJ3VzZXI6IHt7aWR9fScgfSlcclxuICogY2xhc3MgVXNlckNtcCB7XHJcbiAqICAgaWQ6IHN0cmluZztcclxuICogICBjb25zdHJ1Y3RvcihwYXJhbXM6IFJvdXRlUGFyYW1zKSB7XHJcbiAqICAgICB0aGlzLmlkID0gcGFyYW1zLmdldCgnaWQnKTtcclxuICogICB9XHJcbiAqIH1cclxuICpcclxuICogYm9vdHN0cmFwKEFwcENtcCwgUk9VVEVSX1BST1ZJREVSUyk7XHJcbiAqIGBgYFxyXG4gKi9cclxudmFyIFJvdXRlUGFyYW1zID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFJvdXRlUGFyYW1zKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgfVxyXG4gICAgUm91dGVQYXJhbXMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbSkgeyByZXR1cm4gbm9ybWFsaXplQmxhbmsoU3RyaW5nTWFwV3JhcHBlci5nZXQodGhpcy5wYXJhbXMsIHBhcmFtKSk7IH07XHJcbiAgICByZXR1cm4gUm91dGVQYXJhbXM7XHJcbn0pKCk7XHJcbmV4cG9ydHMuUm91dGVQYXJhbXMgPSBSb3V0ZVBhcmFtcztcclxuLyoqXHJcbiAqIGBSb3V0ZURhdGFgIGlzIGFuIGltbXV0YWJsZSBtYXAgb2YgYWRkaXRpb25hbCBkYXRhIHlvdSBjYW4gY29uZmlndXJlIGluIHlvdXIge0BsaW5rIFJvdXRlfS5cclxuICpcclxuICogWW91IGNhbiBpbmplY3QgYFJvdXRlRGF0YWAgaW50byB0aGUgY29uc3RydWN0b3Igb2YgYSBjb21wb25lbnQgdG8gdXNlIGl0LlxyXG4gKlxyXG4gKiAjIyMgRXhhbXBsZVxyXG4gKlxyXG4gKiBgYGBcclxuICogaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ2FuZ3VsYXIyL2NvcmUnO1xyXG4gKiBpbXBvcnQge2Jvb3RzdHJhcH0gZnJvbSAnYW5ndWxhcjIvcGxhdGZvcm0vYnJvd3Nlcic7XHJcbiAqIGltcG9ydCB7Um91dGVyLCBST1VURVJfRElSRUNUSVZFUywgUk9VVEVSX1BST1ZJREVSUywgUm91dGVDb25maWcsIFJvdXRlRGF0YX0gZnJvbVxyXG4gKiAnYW5ndWxhcjIvcm91dGVyJztcclxuICpcclxuICogQENvbXBvbmVudCh7ZGlyZWN0aXZlczogW1JPVVRFUl9ESVJFQ1RJVkVTXX0pXHJcbiAqIEBSb3V0ZUNvbmZpZyhbXHJcbiAqICB7cGF0aDogJy91c2VyLzppZCcsIGNvbXBvbmVudDogVXNlckNtcCwgbmFtZTogJ1VzZXJDbXAnLCBkYXRhOiB7aXNBZG1pbjogdHJ1ZX19LFxyXG4gKiBdKVxyXG4gKiBjbGFzcyBBcHBDbXAge31cclxuICpcclxuICogQENvbXBvbmVudCh7XHJcbiAqICAgLi4uLFxyXG4gKiAgIHRlbXBsYXRlOiAndXNlcjoge3tpc0FkbWlufX0nXHJcbiAqIH0pXHJcbiAqIGNsYXNzIFVzZXJDbXAge1xyXG4gKiAgIHN0cmluZzogaXNBZG1pbjtcclxuICogICBjb25zdHJ1Y3RvcihkYXRhOiBSb3V0ZURhdGEpIHtcclxuICogICAgIHRoaXMuaXNBZG1pbiA9IGRhdGEuZ2V0KCdpc0FkbWluJyk7XHJcbiAqICAgfVxyXG4gKiB9XHJcbiAqXHJcbiAqIGJvb3RzdHJhcChBcHBDbXAsIFJPVVRFUl9QUk9WSURFUlMpO1xyXG4gKiBgYGBcclxuICovXHJcbnZhciBSb3V0ZURhdGEgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUm91dGVEYXRhKGRhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YSA9PT0gdm9pZCAwKSB7IGRhdGEgPSBDT05TVF9FWFBSKHt9KTsgfVxyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICBSb3V0ZURhdGEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG5vcm1hbGl6ZUJsYW5rKFN0cmluZ01hcFdyYXBwZXIuZ2V0KHRoaXMuZGF0YSwga2V5KSk7IH07XHJcbiAgICByZXR1cm4gUm91dGVEYXRhO1xyXG59KSgpO1xyXG5leHBvcnRzLlJvdXRlRGF0YSA9IFJvdXRlRGF0YTtcclxuZXhwb3J0cy5CTEFOS19ST1VURV9EQVRBID0gbmV3IFJvdXRlRGF0YSgpO1xyXG4vKipcclxuICogYEluc3RydWN0aW9uYCBpcyBhIHRyZWUgb2Yge0BsaW5rIENvbXBvbmVudEluc3RydWN0aW9ufXMgd2l0aCBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZFxyXG4gKiB0byB0cmFuc2l0aW9uIGVhY2ggY29tcG9uZW50IGluIHRoZSBhcHAgdG8gYSBnaXZlbiByb3V0ZSwgaW5jbHVkaW5nIGFsbCBhdXhpbGlhcnkgcm91dGVzLlxyXG4gKlxyXG4gKiBgSW5zdHJ1Y3Rpb25gcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB7QGxpbmsgUm91dGVyI2dlbmVyYXRlfSwgYW5kIGNhbiBiZSB1c2VkIHRvXHJcbiAqIHBlcmZvcm0gcm91dGUgY2hhbmdlcyB3aXRoIHtAbGluayBSb3V0ZXIjbmF2aWdhdGVCeUluc3RydWN0aW9ufS5cclxuICpcclxuICogIyMjIEV4YW1wbGVcclxuICpcclxuICogYGBgXHJcbiAqIGltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdhbmd1bGFyMi9jb3JlJztcclxuICogaW1wb3J0IHtib290c3RyYXB9IGZyb20gJ2FuZ3VsYXIyL3BsYXRmb3JtL2Jyb3dzZXInO1xyXG4gKiBpbXBvcnQge1JvdXRlciwgUk9VVEVSX0RJUkVDVElWRVMsIFJPVVRFUl9QUk9WSURFUlMsIFJvdXRlQ29uZmlnfSBmcm9tICdhbmd1bGFyMi9yb3V0ZXInO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtkaXJlY3RpdmVzOiBbUk9VVEVSX0RJUkVDVElWRVNdfSlcclxuICogQFJvdXRlQ29uZmlnKFtcclxuICogIHsuLi59LFxyXG4gKiBdKVxyXG4gKiBjbGFzcyBBcHBDbXAge1xyXG4gKiAgIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyKSB7XHJcbiAqICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSByb3V0ZXIuZ2VuZXJhdGUoWycvTXlSb3V0ZSddKTtcclxuICogICAgIHJvdXRlci5uYXZpZ2F0ZUJ5SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pO1xyXG4gKiAgIH1cclxuICogfVxyXG4gKlxyXG4gKiBib290c3RyYXAoQXBwQ21wLCBST1VURVJfUFJPVklERVJTKTtcclxuICogYGBgXHJcbiAqL1xyXG52YXIgSW5zdHJ1Y3Rpb24gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gSW5zdHJ1Y3Rpb24oY29tcG9uZW50LCBjaGlsZCwgYXV4SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgICAgICB0aGlzLmNoaWxkID0gY2hpbGQ7XHJcbiAgICAgICAgdGhpcy5hdXhJbnN0cnVjdGlvbiA9IGF1eEluc3RydWN0aW9uO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RydWN0aW9uLnByb3RvdHlwZSwgXCJ1cmxQYXRoXCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzUHJlc2VudCh0aGlzLmNvbXBvbmVudCkgPyB0aGlzLmNvbXBvbmVudC51cmxQYXRoIDogJyc7IH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluc3RydWN0aW9uLnByb3RvdHlwZSwgXCJ1cmxQYXJhbXNcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaXNQcmVzZW50KHRoaXMuY29tcG9uZW50KSA/IHRoaXMuY29tcG9uZW50LnVybFBhcmFtcyA6IFtdOyB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnN0cnVjdGlvbi5wcm90b3R5cGUsIFwic3BlY2lmaWNpdHlcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgdG90YWwgPSAnJztcclxuICAgICAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuY29tcG9uZW50LnNwZWNpZmljaXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5jaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuY2hpbGQuc3BlY2lmaWNpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBjb252ZXJ0cyB0aGUgaW5zdHJ1Y3Rpb24gaW50byBhIFVSTCBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLnRvUm9vdFVybCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudG9VcmxQYXRoKCkgKyB0aGlzLnRvVXJsUXVlcnkoKTsgfTtcclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEluc3RydWN0aW9uLnByb3RvdHlwZS5fdG9Ob25Sb290VXJsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJpbmdpZnlQYXRoTWF0cml4QXV4UHJlZml4ZWQoKSArXHJcbiAgICAgICAgICAgIChpc1ByZXNlbnQodGhpcy5jaGlsZCkgPyB0aGlzLmNoaWxkLl90b05vblJvb3RVcmwoKSA6ICcnKTtcclxuICAgIH07XHJcbiAgICBJbnN0cnVjdGlvbi5wcm90b3R5cGUudG9VcmxRdWVyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudXJsUGFyYW1zLmxlbmd0aCA+IDAgPyAoJz8nICsgdGhpcy51cmxQYXJhbXMuam9pbignJicpKSA6ICcnOyB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbmV3IGluc3RydWN0aW9uIHRoYXQgc2hhcmVzIHRoZSBzdGF0ZSBvZiB0aGUgZXhpc3RpbmcgaW5zdHJ1Y3Rpb24sIGJ1dCB3aXRoXHJcbiAgICAgKiB0aGUgZ2l2ZW4gY2hpbGQge0BsaW5rIEluc3RydWN0aW9ufSByZXBsYWNpbmcgdGhlIGV4aXN0aW5nIGNoaWxkLlxyXG4gICAgICovXHJcbiAgICBJbnN0cnVjdGlvbi5wcm90b3R5cGUucmVwbGFjZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNvbHZlZEluc3RydWN0aW9uKHRoaXMuY29tcG9uZW50LCBjaGlsZCwgdGhpcy5hdXhJbnN0cnVjdGlvbik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgZmluYWwgVVJMIGZvciB0aGUgaW5zdHJ1Y3Rpb24gaXMgYGBcclxuICAgICAqL1xyXG4gICAgSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLnRvVXJsUGF0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmxQYXRoICsgdGhpcy5fc3RyaW5naWZ5QXV4KCkgK1xyXG4gICAgICAgICAgICAoaXNQcmVzZW50KHRoaXMuY2hpbGQpID8gdGhpcy5jaGlsZC5fdG9Ob25Sb290VXJsKCkgOiAnJyk7XHJcbiAgICB9O1xyXG4gICAgLy8gZGVmYXVsdCBpbnN0cnVjdGlvbnMgb3ZlcnJpZGUgdGhlc2VcclxuICAgIEluc3RydWN0aW9uLnByb3RvdHlwZS50b0xpbmtVcmwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsUGF0aCArIHRoaXMuX3N0cmluZ2lmeUF1eCgpICtcclxuICAgICAgICAgICAgKGlzUHJlc2VudCh0aGlzLmNoaWxkKSA/IHRoaXMuY2hpbGQuX3RvTGlua1VybCgpIDogJycpICsgdGhpcy50b1VybFF1ZXJ5KCk7XHJcbiAgICB9O1xyXG4gICAgLy8gdGhpcyBpcyB0aGUgbm9uLXJvb3QgdmVyc2lvbiAoY2FsbGVkIHJlY3Vyc2l2ZWx5KVxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLl90b0xpbmtVcmwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ2lmeVBhdGhNYXRyaXhBdXhQcmVmaXhlZCgpICtcclxuICAgICAgICAgICAgKGlzUHJlc2VudCh0aGlzLmNoaWxkKSA/IHRoaXMuY2hpbGQuX3RvTGlua1VybCgpIDogJycpO1xyXG4gICAgfTtcclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEluc3RydWN0aW9uLnByb3RvdHlwZS5fc3RyaW5naWZ5UGF0aE1hdHJpeEF1eFByZWZpeGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwcmltYXJ5ID0gdGhpcy5fc3RyaW5naWZ5UGF0aE1hdHJpeEF1eCgpO1xyXG4gICAgICAgIGlmIChwcmltYXJ5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcHJpbWFyeSA9ICcvJyArIHByaW1hcnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcmltYXJ5O1xyXG4gICAgfTtcclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEluc3RydWN0aW9uLnByb3RvdHlwZS5fc3RyaW5naWZ5TWF0cml4UGFyYW1zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybFBhcmFtcy5sZW5ndGggPiAwID8gKCc7JyArIHRoaXMudXJsUGFyYW1zLmpvaW4oJzsnKSkgOiAnJztcclxuICAgIH07XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBJbnN0cnVjdGlvbi5wcm90b3R5cGUuX3N0cmluZ2lmeVBhdGhNYXRyaXhBdXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGlzQmxhbmsodGhpcy5jb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsUGF0aCArIHRoaXMuX3N0cmluZ2lmeU1hdHJpeFBhcmFtcygpICsgdGhpcy5fc3RyaW5naWZ5QXV4KCk7XHJcbiAgICB9O1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLl9zdHJpbmdpZnlBdXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHJvdXRlcyA9IFtdO1xyXG4gICAgICAgIFN0cmluZ01hcFdyYXBwZXIuZm9yRWFjaCh0aGlzLmF1eEluc3RydWN0aW9uLCBmdW5jdGlvbiAoYXV4SW5zdHJ1Y3Rpb24sIF8pIHtcclxuICAgICAgICAgICAgcm91dGVzLnB1c2goYXV4SW5zdHJ1Y3Rpb24uX3N0cmluZ2lmeVBhdGhNYXRyaXhBdXgoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHJvdXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnKCcgKyByb3V0ZXMuam9pbignLy8nKSArICcpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBJbnN0cnVjdGlvbjtcclxufSkoKTtcclxuZXhwb3J0cy5JbnN0cnVjdGlvbiA9IEluc3RydWN0aW9uO1xyXG4vKipcclxuICogYSByZXNvbHZlZCBpbnN0cnVjdGlvbiBoYXMgYW4gb3V0bGV0IGluc3RydWN0aW9uIGZvciBpdHNlbGYsIGJ1dCBtYXliZSBub3QgZm9yLi4uXHJcbiAqL1xyXG52YXIgUmVzb2x2ZWRJbnN0cnVjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoUmVzb2x2ZWRJbnN0cnVjdGlvbiwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFJlc29sdmVkSW5zdHJ1Y3Rpb24oY29tcG9uZW50LCBjaGlsZCwgYXV4SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBjb21wb25lbnQsIGNoaWxkLCBhdXhJbnN0cnVjdGlvbik7XHJcbiAgICB9XHJcbiAgICBSZXNvbHZlZEluc3RydWN0aW9uLnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlV3JhcHBlci5yZXNvbHZlKHRoaXMuY29tcG9uZW50KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVzb2x2ZWRJbnN0cnVjdGlvbjtcclxufSkoSW5zdHJ1Y3Rpb24pO1xyXG5leHBvcnRzLlJlc29sdmVkSW5zdHJ1Y3Rpb24gPSBSZXNvbHZlZEluc3RydWN0aW9uO1xyXG4vKipcclxuICogUmVwcmVzZW50cyBhIHJlc29sdmVkIGRlZmF1bHQgcm91dGVcclxuICovXHJcbnZhciBEZWZhdWx0SW5zdHJ1Y3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKERlZmF1bHRJbnN0cnVjdGlvbiwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIERlZmF1bHRJbnN0cnVjdGlvbihjb21wb25lbnQsIGNoaWxkKSB7XHJcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgY29tcG9uZW50LCBjaGlsZCwge30pO1xyXG4gICAgfVxyXG4gICAgRGVmYXVsdEluc3RydWN0aW9uLnByb3RvdHlwZS50b0xpbmtVcmwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnJzsgfTtcclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIERlZmF1bHRJbnN0cnVjdGlvbi5wcm90b3R5cGUuX3RvTGlua1VybCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcnOyB9O1xyXG4gICAgcmV0dXJuIERlZmF1bHRJbnN0cnVjdGlvbjtcclxufSkoUmVzb2x2ZWRJbnN0cnVjdGlvbik7XHJcbmV4cG9ydHMuRGVmYXVsdEluc3RydWN0aW9uID0gRGVmYXVsdEluc3RydWN0aW9uO1xyXG4vKipcclxuICogUmVwcmVzZW50cyBhIGNvbXBvbmVudCB0aGF0IG1heSBuZWVkIHRvIGRvIHNvbWUgcmVkaXJlY3Rpb24gb3IgbGF6eSBsb2FkaW5nIGF0IGEgbGF0ZXIgdGltZS5cclxuICovXHJcbnZhciBVbnJlc29sdmVkSW5zdHJ1Y3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKFVucmVzb2x2ZWRJbnN0cnVjdGlvbiwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFVucmVzb2x2ZWRJbnN0cnVjdGlvbihfcmVzb2x2ZXIsIF91cmxQYXRoLCBfdXJsUGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKF91cmxQYXRoID09PSB2b2lkIDApIHsgX3VybFBhdGggPSAnJzsgfVxyXG4gICAgICAgIGlmIChfdXJsUGFyYW1zID09PSB2b2lkIDApIHsgX3VybFBhcmFtcyA9IENPTlNUX0VYUFIoW10pOyB9XHJcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgbnVsbCwgbnVsbCwge30pO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmVyID0gX3Jlc29sdmVyO1xyXG4gICAgICAgIHRoaXMuX3VybFBhdGggPSBfdXJsUGF0aDtcclxuICAgICAgICB0aGlzLl91cmxQYXJhbXMgPSBfdXJsUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFVucmVzb2x2ZWRJbnN0cnVjdGlvbi5wcm90b3R5cGUsIFwidXJsUGF0aFwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5jb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnQudXJsUGF0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuX3VybFBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXJsUGF0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVW5yZXNvbHZlZEluc3RydWN0aW9uLnByb3RvdHlwZSwgXCJ1cmxQYXJhbXNcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuY29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LnVybFBhcmFtcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuX3VybFBhcmFtcykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91cmxQYXJhbXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgVW5yZXNvbHZlZEluc3RydWN0aW9uLnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2VXcmFwcGVyLnJlc29sdmUodGhpcy5jb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZXIoKS50aGVuKGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICBfdGhpcy5jaGlsZCA9IGlzUHJlc2VudChpbnN0cnVjdGlvbikgPyBpbnN0cnVjdGlvbi5jaGlsZCA6IG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5jb21wb25lbnQgPSBpc1ByZXNlbnQoaW5zdHJ1Y3Rpb24pID8gaW5zdHJ1Y3Rpb24uY29tcG9uZW50IDogbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVW5yZXNvbHZlZEluc3RydWN0aW9uO1xyXG59KShJbnN0cnVjdGlvbik7XHJcbmV4cG9ydHMuVW5yZXNvbHZlZEluc3RydWN0aW9uID0gVW5yZXNvbHZlZEluc3RydWN0aW9uO1xyXG52YXIgUmVkaXJlY3RJbnN0cnVjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoUmVkaXJlY3RJbnN0cnVjdGlvbiwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFJlZGlyZWN0SW5zdHJ1Y3Rpb24oY29tcG9uZW50LCBjaGlsZCwgYXV4SW5zdHJ1Y3Rpb24sIF9zcGVjaWZpY2l0eSkge1xyXG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGNvbXBvbmVudCwgY2hpbGQsIGF1eEluc3RydWN0aW9uKTtcclxuICAgICAgICB0aGlzLl9zcGVjaWZpY2l0eSA9IF9zcGVjaWZpY2l0eTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWRpcmVjdEluc3RydWN0aW9uLnByb3RvdHlwZSwgXCJzcGVjaWZpY2l0eVwiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zcGVjaWZpY2l0eTsgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gUmVkaXJlY3RJbnN0cnVjdGlvbjtcclxufSkoUmVzb2x2ZWRJbnN0cnVjdGlvbik7XHJcbmV4cG9ydHMuUmVkaXJlY3RJbnN0cnVjdGlvbiA9IFJlZGlyZWN0SW5zdHJ1Y3Rpb247XHJcbi8qKlxyXG4gKiBBIGBDb21wb25lbnRJbnN0cnVjdGlvbmAgcmVwcmVzZW50cyB0aGUgcm91dGUgc3RhdGUgZm9yIGEgc2luZ2xlIGNvbXBvbmVudC5cclxuICpcclxuICogYENvbXBvbmVudEluc3RydWN0aW9uc2AgaXMgYSBwdWJsaWMgQVBJLiBJbnN0YW5jZXMgb2YgYENvbXBvbmVudEluc3RydWN0aW9uYCBhcmUgcGFzc2VkXHJcbiAqIHRvIHJvdXRlIGxpZmVjeWNsZSBob29rcywgbGlrZSB7QGxpbmsgQ2FuQWN0aXZhdGV9LlxyXG4gKlxyXG4gKiBgQ29tcG9uZW50SW5zdHJ1Y3Rpb25gcyBhcmUgW2hhc2ggY29uc2VkXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYXNoX2NvbnNpbmcpLiBZb3Ugc2hvdWxkXHJcbiAqIG5ldmVyIGNvbnN0cnVjdCBvbmUgeW91cnNlbGYgd2l0aCBcIm5ldy5cIiBJbnN0ZWFkLCByZWx5IG9uIHtAbGluayBSb3V0ZXIvUm91dGVSZWNvZ25pemVyfSB0b1xyXG4gKiBjb25zdHJ1Y3QgYENvbXBvbmVudEluc3RydWN0aW9uYHMuXHJcbiAqXHJcbiAqIFlvdSBzaG91bGQgbm90IG1vZGlmeSB0aGlzIG9iamVjdC4gSXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaW1tdXRhYmxlLlxyXG4gKi9cclxudmFyIENvbXBvbmVudEluc3RydWN0aW9uID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIENvbXBvbmVudEluc3RydWN0aW9uKHVybFBhdGgsIHVybFBhcmFtcywgZGF0YSwgY29tcG9uZW50VHlwZSwgdGVybWluYWwsIHNwZWNpZmljaXR5LCBwYXJhbXMsIHJvdXRlTmFtZSkge1xyXG4gICAgICAgIGlmIChwYXJhbXMgPT09IHZvaWQgMCkgeyBwYXJhbXMgPSBudWxsOyB9XHJcbiAgICAgICAgdGhpcy51cmxQYXRoID0gdXJsUGF0aDtcclxuICAgICAgICB0aGlzLnVybFBhcmFtcyA9IHVybFBhcmFtcztcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlO1xyXG4gICAgICAgIHRoaXMudGVybWluYWwgPSB0ZXJtaW5hbDtcclxuICAgICAgICB0aGlzLnNwZWNpZmljaXR5ID0gc3BlY2lmaWNpdHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgdGhpcy5yb3V0ZU5hbWUgPSByb3V0ZU5hbWU7XHJcbiAgICAgICAgdGhpcy5yZXVzZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhID0gaXNQcmVzZW50KGRhdGEpID8gZGF0YSA6IGV4cG9ydHMuQkxBTktfUk9VVEVfREFUQTtcclxuICAgIH1cclxuICAgIHJldHVybiBDb21wb25lbnRJbnN0cnVjdGlvbjtcclxufSkoKTtcclxuZXhwb3J0cy5Db21wb25lbnRJbnN0cnVjdGlvbiA9IENvbXBvbmVudEluc3RydWN0aW9uO1xyXG52YXIgY29yZV8xID0gcm91dGVyUmVxdWlyZSgnYW5ndWxhcjIvY29yZScpO1xyXG52YXIgcm91dGVfY29uZmlnX2ltcGxfMSA9IHJvdXRlclJlcXVpcmUoJy4vcm91dGVfY29uZmlnL3JvdXRlX2NvbmZpZ19pbXBsJyk7XHJcbnZhciBydWxlc18xID0gcm91dGVyUmVxdWlyZSgnLi9ydWxlcy9ydWxlcycpO1xyXG52YXIgcnVsZV9zZXRfMSA9IHJvdXRlclJlcXVpcmUoJy4vcnVsZXMvcnVsZV9zZXQnKTtcclxudmFyIGluc3RydWN0aW9uXzEgPSByb3V0ZXJSZXF1aXJlKCcuL2luc3RydWN0aW9uJyk7XHJcbnZhciByb3V0ZV9jb25maWdfbm9ybWFsaXplcl8xID0gcm91dGVyUmVxdWlyZSgnLi9yb3V0ZV9jb25maWcvcm91dGVfY29uZmlnX25vcm1hbGl6ZXInKTtcclxudmFyIHVybF9wYXJzZXJfMSA9IHJvdXRlclJlcXVpcmUoJy4vdXJsX3BhcnNlcicpO1xyXG52YXIgX3Jlc29sdmVUb051bGwgPSBQcm9taXNlV3JhcHBlci5yZXNvbHZlKG51bGwpO1xyXG4vLyBBIExpbmtJdGVtQXJyYXkgaXMgYW4gYXJyYXksIHdoaWNoIGRlc2NyaWJlcyBhIHNldCBvZiByb3V0ZXNcclxuLy8gVGhlIGl0ZW1zIGluIHRoZSBhcnJheSBhcmUgZm91bmQgaW4gZ3JvdXBzOlxyXG4vLyAtIHRoZSBmaXJzdCBpdGVtIGlzIHRoZSBuYW1lIG9mIHRoZSByb3V0ZVxyXG4vLyAtIHRoZSBuZXh0IGl0ZW1zIGFyZTpcclxuLy8gICAtIGFuIG9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnNcclxuLy8gICAtIG9yIGFuIGFycmF5IGRlc2NyaWJpbmcgYW4gYXV4IHJvdXRlXHJcbi8vIGV4cG9ydCB0eXBlIExpbmtSb3V0ZUl0ZW0gPSBzdHJpbmcgfCBPYmplY3Q7XHJcbi8vIGV4cG9ydCB0eXBlIExpbmtJdGVtID0gTGlua1JvdXRlSXRlbSB8IEFycmF5PExpbmtSb3V0ZUl0ZW0+O1xyXG4vLyBleHBvcnQgdHlwZSBMaW5rSXRlbUFycmF5ID0gQXJyYXk8TGlua0l0ZW0+O1xyXG4vKipcclxuICogVG9rZW4gdXNlZCB0byBiaW5kIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgdG9wLWxldmVsIHtAbGluayBSb3V0ZUNvbmZpZ31zIGZvciB0aGVcclxuICogYXBwbGljYXRpb24uXHJcbiAqXHJcbiAqICMjIyBFeGFtcGxlIChbbGl2ZSBkZW1vXShodHRwOi8vcGxua3IuY28vZWRpdC9pUlVQOEI1T1VieENXUTNBY0lEbSkpXHJcbiAqXHJcbiAqIGBgYFxyXG4gKiBpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnYW5ndWxhcjIvY29yZSc7XHJcbiAqIGltcG9ydCB7XHJcbiAqICAgUk9VVEVSX0RJUkVDVElWRVMsXHJcbiAqICAgUk9VVEVSX1BST1ZJREVSUyxcclxuICogICBSb3V0ZUNvbmZpZ1xyXG4gKiB9IGZyb20gJ2FuZ3VsYXIyL3JvdXRlcic7XHJcbiAqXHJcbiAqIEBDb21wb25lbnQoe2RpcmVjdGl2ZXM6IFtST1VURVJfRElSRUNUSVZFU119KVxyXG4gKiBAUm91dGVDb25maWcoW1xyXG4gKiAgey4uLn0sXHJcbiAqIF0pXHJcbiAqIGNsYXNzIEFwcENtcCB7XHJcbiAqICAgLy8gLi4uXHJcbiAqIH1cclxuICpcclxuICogYm9vdHN0cmFwKEFwcENtcCwgW1JPVVRFUl9QUk9WSURFUlNdKTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnRzLlJPVVRFUl9QUklNQVJZX0NPTVBPTkVOVCA9IENPTlNUX0VYUFIobmV3IGNvcmVfMS5PcGFxdWVUb2tlbignUm91dGVyUHJpbWFyeUNvbXBvbmVudCcpKTtcclxuLyoqXHJcbiAqIFRoZSBSb3V0ZVJlZ2lzdHJ5IGhvbGRzIHJvdXRlIGNvbmZpZ3VyYXRpb25zIGZvciBlYWNoIGNvbXBvbmVudCBpbiBhbiBBbmd1bGFyIGFwcC5cclxuICogSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIEluc3RydWN0aW9ucyBmcm9tIFVSTHMsIGFuZCBnZW5lcmF0aW5nIFVSTHMgYmFzZWQgb24gcm91dGUgYW5kXHJcbiAqIHBhcmFtZXRlcnMuXHJcbiAqL1xyXG52YXIgUm91dGVSZWdpc3RyeSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSb3V0ZVJlZ2lzdHJ5KF9yb290Q29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdENvbXBvbmVudCA9IF9yb290Q29tcG9uZW50O1xyXG4gICAgICAgIHRoaXMuX3J1bGVzID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIGNvbXBvbmVudCBhbmQgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgYWRkIHRoZSByb3V0ZSB0byB0aGlzIHJlZ2lzdHJ5XHJcbiAgICAgKi9cclxuICAgIFJvdXRlUmVnaXN0cnkucHJvdG90eXBlLmNvbmZpZyA9IGZ1bmN0aW9uIChwYXJlbnRDb21wb25lbnQsIGNvbmZpZykge1xyXG4gICAgICAgIGNvbmZpZyA9IHJvdXRlX2NvbmZpZ19ub3JtYWxpemVyXzEubm9ybWFsaXplUm91dGVDb25maWcoY29uZmlnLCB0aGlzKTtcclxuICAgICAgICAvLyB0aGlzIGlzIGhlcmUgYmVjYXVzZSBEYXJ0IHR5cGUgZ3VhcmQgcmVhc29uc1xyXG4gICAgICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiByb3V0ZV9jb25maWdfaW1wbF8xLlJvdXRlKSB7XHJcbiAgICAgICAgICAgIHJvdXRlX2NvbmZpZ19ub3JtYWxpemVyXzEuYXNzZXJ0Q29tcG9uZW50RXhpc3RzKGNvbmZpZy5jb21wb25lbnQsIGNvbmZpZy5wYXRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29uZmlnIGluc3RhbmNlb2Ygcm91dGVfY29uZmlnX2ltcGxfMS5BdXhSb3V0ZSkge1xyXG4gICAgICAgICAgICByb3V0ZV9jb25maWdfbm9ybWFsaXplcl8xLmFzc2VydENvbXBvbmVudEV4aXN0cyhjb25maWcuY29tcG9uZW50LCBjb25maWcucGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX3J1bGVzLmdldChwYXJlbnRDb21wb25lbnQpO1xyXG4gICAgICAgIGlmIChpc0JsYW5rKHJ1bGVzKSkge1xyXG4gICAgICAgICAgICBydWxlcyA9IG5ldyBydWxlX3NldF8xLlJ1bGVTZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5fcnVsZXMuc2V0KHBhcmVudENvbXBvbmVudCwgcnVsZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGVybWluYWwgPSBydWxlcy5jb25maWcoY29uZmlnKTtcclxuICAgICAgICBpZiAoY29uZmlnIGluc3RhbmNlb2Ygcm91dGVfY29uZmlnX2ltcGxfMS5Sb3V0ZSkge1xyXG4gICAgICAgICAgICBpZiAodGVybWluYWwpIHtcclxuICAgICAgICAgICAgICAgIGFzc2VydFRlcm1pbmFsQ29tcG9uZW50KGNvbmZpZy5jb21wb25lbnQsIGNvbmZpZy5wYXRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRnJvbUNvbXBvbmVudChjb25maWcuY29tcG9uZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlYWRzIHRoZSBhbm5vdGF0aW9ucyBvZiBhIGNvbXBvbmVudCBhbmQgY29uZmlndXJlcyB0aGUgcmVnaXN0cnkgYmFzZWQgb24gdGhlbVxyXG4gICAgICovXHJcbiAgICBSb3V0ZVJlZ2lzdHJ5LnByb3RvdHlwZS5jb25maWdGcm9tQ29tcG9uZW50ID0gZnVuY3Rpb24gKGNvbXBvbmVudCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFpc1R5cGUoY29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIERvbid0IHJlYWQgdGhlIGFubm90YXRpb25zIGZyb20gYSB0eXBlIG1vcmUgdGhhbiBvbmNlIOKAk1xyXG4gICAgICAgIC8vIHRoaXMgcHJldmVudHMgYW4gaW5maW5pdGUgbG9vcCBpZiBhIGNvbXBvbmVudCByb3V0ZXMgcmVjdXJzaXZlbHkuXHJcbiAgICAgICAgaWYgKHRoaXMuX3J1bGVzLmhhcyhjb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGFubm90YXRpb25zID0gcmVmbGVjdG9yLmFubm90YXRpb25zKGNvbXBvbmVudCk7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChhbm5vdGF0aW9ucykpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uIGluc3RhbmNlb2Ygcm91dGVfY29uZmlnX2ltcGxfMS5Sb3V0ZUNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByb3V0ZUNmZ3MgPSBhbm5vdGF0aW9uLmNvbmZpZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgcm91dGVDZmdzLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZykgeyByZXR1cm4gX3RoaXMuY29uZmlnKGNvbXBvbmVudCwgY29uZmlnKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIFVSTCBhbmQgYSBwYXJlbnQgY29tcG9uZW50LCByZXR1cm4gdGhlIG1vc3Qgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZm9yIG5hdmlnYXRpbmdcclxuICAgICAqIHRoZSBhcHBsaWNhdGlvbiBpbnRvIHRoZSBzdGF0ZSBzcGVjaWZpZWQgYnkgdGhlIHVybFxyXG4gICAgICovXHJcbiAgICBSb3V0ZVJlZ2lzdHJ5LnByb3RvdHlwZS5yZWNvZ25pemUgPSBmdW5jdGlvbiAodXJsLCBhbmNlc3Rvckluc3RydWN0aW9ucykge1xyXG4gICAgICAgIHZhciBwYXJzZWRVcmwgPSB1cmxfcGFyc2VyXzEucGFyc2VyLnBhcnNlKHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29nbml6ZShwYXJzZWRVcmwsIFtdKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlY29nbml6ZXMgYWxsIHBhcmVudC1jaGlsZCByb3V0ZXMsIGJ1dCBjcmVhdGVzIHVucmVzb2x2ZWQgYXV4aWxpYXJ5IHJvdXRlc1xyXG4gICAgICovXHJcbiAgICBSb3V0ZVJlZ2lzdHJ5LnByb3RvdHlwZS5fcmVjb2duaXplID0gZnVuY3Rpb24gKHBhcnNlZFVybCwgYW5jZXN0b3JJbnN0cnVjdGlvbnMsIF9hdXgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChfYXV4ID09PSB2b2lkIDApIHsgX2F1eCA9IGZhbHNlOyB9XHJcbiAgICAgICAgdmFyIHBhcmVudEluc3RydWN0aW9uID0gTGlzdFdyYXBwZXIubGFzdChhbmNlc3Rvckluc3RydWN0aW9ucyk7XHJcbiAgICAgICAgdmFyIHBhcmVudENvbXBvbmVudCA9IGlzUHJlc2VudChwYXJlbnRJbnN0cnVjdGlvbikgPyBwYXJlbnRJbnN0cnVjdGlvbi5jb21wb25lbnQuY29tcG9uZW50VHlwZSA6XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3RDb21wb25lbnQ7XHJcbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXMuZ2V0KHBhcmVudENvbXBvbmVudCk7XHJcbiAgICAgICAgaWYgKGlzQmxhbmsocnVsZXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzb2x2ZVRvTnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTWF0Y2hlcyBzb21lIGJlZ2lubmluZyBwYXJ0IG9mIHRoZSBnaXZlbiBVUkxcclxuICAgICAgICB2YXIgcG9zc2libGVNYXRjaGVzID0gX2F1eCA/IHJ1bGVzLnJlY29nbml6ZUF1eGlsaWFyeShwYXJzZWRVcmwpIDogcnVsZXMucmVjb2duaXplKHBhcnNlZFVybCk7XHJcbiAgICAgICAgdmFyIG1hdGNoUHJvbWlzZXMgPSBwb3NzaWJsZU1hdGNoZXMubWFwKGZ1bmN0aW9uIChjYW5kaWRhdGUpIHsgcmV0dXJuIGNhbmRpZGF0ZS50aGVuKGZ1bmN0aW9uIChjYW5kaWRhdGUpIHtcclxuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIHJ1bGVzXzEuUGF0aE1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXV4UGFyZW50SW5zdHJ1Y3Rpb25zID0gYW5jZXN0b3JJbnN0cnVjdGlvbnMubGVuZ3RoID4gMCA/IFtMaXN0V3JhcHBlci5sYXN0KGFuY2VzdG9ySW5zdHJ1Y3Rpb25zKV0gOiBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdXhJbnN0cnVjdGlvbnMgPSBfdGhpcy5fYXV4Um91dGVzVG9VbnJlc29sdmVkKGNhbmRpZGF0ZS5yZW1haW5pbmdBdXgsIGF1eFBhcmVudEluc3RydWN0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBuZXcgaW5zdHJ1Y3Rpb25fMS5SZXNvbHZlZEluc3RydWN0aW9uKGNhbmRpZGF0ZS5pbnN0cnVjdGlvbiwgbnVsbCwgYXV4SW5zdHJ1Y3Rpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0JsYW5rKGNhbmRpZGF0ZS5pbnN0cnVjdGlvbikgfHwgY2FuZGlkYXRlLmluc3RydWN0aW9uLnRlcm1pbmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld0FuY2VzdG9ySW5zdHJ1Y3Rpb25zID0gYW5jZXN0b3JJbnN0cnVjdGlvbnMuY29uY2F0KFtpbnN0cnVjdGlvbl0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9yZWNvZ25pemUoY2FuZGlkYXRlLnJlbWFpbmluZywgbmV3QW5jZXN0b3JJbnN0cnVjdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNoaWxkSW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCbGFuayhjaGlsZEluc3RydWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgaW5zdHJ1Y3Rpb25zIGFyZSBhbHJlYWR5IGFic29sdXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSW5zdHJ1Y3Rpb24gaW5zdGFuY2VvZiBpbnN0cnVjdGlvbl8xLlJlZGlyZWN0SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkSW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLmNoaWxkID0gY2hpbGRJbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2FuZGlkYXRlIGluc3RhbmNlb2YgcnVsZXNfMS5SZWRpcmVjdE1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSBfdGhpcy5nZW5lcmF0ZShjYW5kaWRhdGUucmVkaXJlY3RUbywgYW5jZXN0b3JJbnN0cnVjdGlvbnMuY29uY2F0KFtudWxsXSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBpbnN0cnVjdGlvbl8xLlJlZGlyZWN0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24uY29tcG9uZW50LCBpbnN0cnVjdGlvbi5jaGlsZCwgaW5zdHJ1Y3Rpb24uYXV4SW5zdHJ1Y3Rpb24sIGNhbmRpZGF0ZS5zcGVjaWZpY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTsgfSk7XHJcbiAgICAgICAgaWYgKChpc0JsYW5rKHBhcnNlZFVybCkgfHwgcGFyc2VkVXJsLnBhdGggPT0gJycpICYmIHBvc3NpYmxlTWF0Y2hlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZVdyYXBwZXIucmVzb2x2ZSh0aGlzLmdlbmVyYXRlRGVmYXVsdChwYXJlbnRDb21wb25lbnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2VXcmFwcGVyLmFsbChtYXRjaFByb21pc2VzKS50aGVuKG1vc3RTcGVjaWZpYyk7XHJcbiAgICB9O1xyXG4gICAgUm91dGVSZWdpc3RyeS5wcm90b3R5cGUuX2F1eFJvdXRlc1RvVW5yZXNvbHZlZCA9IGZ1bmN0aW9uIChhdXhSb3V0ZXMsIHBhcmVudEluc3RydWN0aW9ucykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVucmVzb2x2ZWRBdXhJbnN0cnVjdGlvbnMgPSB7fTtcclxuICAgICAgICBhdXhSb3V0ZXMuZm9yRWFjaChmdW5jdGlvbiAoYXV4VXJsKSB7XHJcbiAgICAgICAgICAgIHVucmVzb2x2ZWRBdXhJbnN0cnVjdGlvbnNbYXV4VXJsLnBhdGhdID0gbmV3IGluc3RydWN0aW9uXzEuVW5yZXNvbHZlZEluc3RydWN0aW9uKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9yZWNvZ25pemUoYXV4VXJsLCBwYXJlbnRJbnN0cnVjdGlvbnMsIHRydWUpOyB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdW5yZXNvbHZlZEF1eEluc3RydWN0aW9ucztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgbm9ybWFsaXplZCBsaXN0IHdpdGggY29tcG9uZW50IG5hbWVzIGFuZCBwYXJhbXMgbGlrZTogYFsndXNlcicsIHtpZDogMyB9XWBcclxuICAgICAqIGdlbmVyYXRlcyBhIHVybCB3aXRoIGEgbGVhZGluZyBzbGFzaCByZWxhdGl2ZSB0byB0aGUgcHJvdmlkZWQgYHBhcmVudENvbXBvbmVudGAuXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIG9wdGlvbmFsIHBhcmFtIGBfYXV4YCBpcyBgdHJ1ZWAsIHRoZW4gd2UgZ2VuZXJhdGUgc3RhcnRpbmcgYXQgYW4gYXV4aWxpYXJ5XHJcbiAgICAgKiByb3V0ZSBib3VuZGFyeS5cclxuICAgICAqL1xyXG4gICAgUm91dGVSZWdpc3RyeS5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAobGlua1BhcmFtcywgYW5jZXN0b3JJbnN0cnVjdGlvbnMsIF9hdXgpIHtcclxuICAgICAgICBpZiAoX2F1eCA9PT0gdm9pZCAwKSB7IF9hdXggPSBmYWxzZTsgfVxyXG4gICAgICAgIHZhciBwYXJhbXMgPSBzcGxpdEFuZEZsYXR0ZW5MaW5rUGFyYW1zKGxpbmtQYXJhbXMpO1xyXG4gICAgICAgIHZhciBwcmV2SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgLy8gVGhlIGZpcnN0IHNlZ21lbnQgc2hvdWxkIGJlIGVpdGhlciAnLicgKGdlbmVyYXRlIGZyb20gcGFyZW50KSBvciAnJyAoZ2VuZXJhdGUgZnJvbSByb290KS5cclxuICAgICAgICAvLyBXaGVuIHdlIG5vcm1hbGl6ZSBhYm92ZSwgd2Ugc3RyaXAgYWxsIHRoZSBzbGFzaGVzLCAnLi8nIGJlY29tZXMgJy4nIGFuZCAnLycgYmVjb21lcyAnJy5cclxuICAgICAgICBpZiAoTGlzdFdyYXBwZXIuZmlyc3QocGFyYW1zKSA9PSAnJykge1xyXG4gICAgICAgICAgICBwYXJhbXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgcHJldkluc3RydWN0aW9uID0gTGlzdFdyYXBwZXIuZmlyc3QoYW5jZXN0b3JJbnN0cnVjdGlvbnMpO1xyXG4gICAgICAgICAgICBhbmNlc3Rvckluc3RydWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcHJldkluc3RydWN0aW9uID0gYW5jZXN0b3JJbnN0cnVjdGlvbnMubGVuZ3RoID4gMCA/IGFuY2VzdG9ySW5zdHJ1Y3Rpb25zLnBvcCgpIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKExpc3RXcmFwcGVyLmZpcnN0KHBhcmFtcykgPT0gJy4nKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChMaXN0V3JhcHBlci5maXJzdChwYXJhbXMpID09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChMaXN0V3JhcHBlci5maXJzdChwYXJhbXMpID09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYW5jZXN0b3JJbnN0cnVjdGlvbnMubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oXCJMaW5rIFxcXCJcIiArIExpc3RXcmFwcGVyLnRvSlNPTihsaW5rUGFyYW1zKSArIFwiXFxcIiBoYXMgdG9vIG1hbnkgXFxcIi4uL1xcXCIgc2VnbWVudHMuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcmV2SW5zdHJ1Y3Rpb24gPSBhbmNlc3Rvckluc3RydWN0aW9ucy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBMaXN0V3JhcHBlci5zbGljZShwYXJhbXMsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gd2UgbXVzdCBvbmx5IHBlYWsgYXQgdGhlIGxpbmsgcGFyYW0sIGFuZCBub3QgY29uc3VtZSBpdFxyXG4gICAgICAgICAgICAgICAgdmFyIHJvdXRlTmFtZSA9IExpc3RXcmFwcGVyLmZpcnN0KHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50Q29tcG9uZW50VHlwZSA9IHRoaXMuX3Jvb3RDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ3JhbmRwYXJlbnRDb21wb25lbnRUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChhbmNlc3Rvckluc3RydWN0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudENvbXBvbmVudEluc3RydWN0aW9uID0gYW5jZXN0b3JJbnN0cnVjdGlvbnNbYW5jZXN0b3JJbnN0cnVjdGlvbnMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyYW5kQ29tcG9uZW50SW5zdHJ1Y3Rpb24gPSBhbmNlc3Rvckluc3RydWN0aW9uc1thbmNlc3Rvckluc3RydWN0aW9ucy5sZW5ndGggLSAyXTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb21wb25lbnRUeXBlID0gcGFyZW50Q29tcG9uZW50SW5zdHJ1Y3Rpb24uY29tcG9uZW50LmNvbXBvbmVudFR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnRDb21wb25lbnRUeXBlID0gZ3JhbmRDb21wb25lbnRJbnN0cnVjdGlvbi5jb21wb25lbnQuY29tcG9uZW50VHlwZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFuY2VzdG9ySW5zdHJ1Y3Rpb25zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50VHlwZSA9IGFuY2VzdG9ySW5zdHJ1Y3Rpb25zWzBdLmNvbXBvbmVudC5jb21wb25lbnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50Q29tcG9uZW50VHlwZSA9IHRoaXMuX3Jvb3RDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3IgYSBsaW5rIHdpdGggbm8gbGVhZGluZyBgLi9gLCBgL2AsIG9yIGAuLi9gLCB3ZSBsb29rIGZvciBhIHNpYmxpbmcgYW5kIGNoaWxkLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgYm90aCBleGlzdCwgd2UgdGhyb3cuIE90aGVyd2lzZSwgd2UgcHJlZmVyIHdoaWNoZXZlciBleGlzdHMuXHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRSb3V0ZUV4aXN0cyA9IHRoaXMuaGFzUm91dGUocm91dGVOYW1lLCBwYXJlbnRDb21wb25lbnRUeXBlKTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRSb3V0ZUV4aXN0cyA9IGlzUHJlc2VudChncmFuZHBhcmVudENvbXBvbmVudFR5cGUpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNSb3V0ZShyb3V0ZU5hbWUsIGdyYW5kcGFyZW50Q29tcG9uZW50VHlwZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Um91dGVFeGlzdHMgJiYgY2hpbGRSb3V0ZUV4aXN0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtc2cgPSBcIkxpbmsgXFxcIlwiICsgTGlzdFdyYXBwZXIudG9KU09OKGxpbmtQYXJhbXMpICsgXCJcXFwiIGlzIGFtYmlndW91cywgdXNlIFxcXCIuL1xcXCIgb3IgXFxcIi4uL1xcXCIgdG8gZGlzYW1iaWd1YXRlLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKG1zZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Um91dGVFeGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2SW5zdHJ1Y3Rpb24gPSBhbmNlc3Rvckluc3RydWN0aW9ucy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1zW3BhcmFtcy5sZW5ndGggLSAxXSA9PSAnJykge1xyXG4gICAgICAgICAgICBwYXJhbXMucG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMCAmJiBwYXJhbXNbMF0gPT0gJycpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnNoaWZ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICB2YXIgbXNnID0gXCJMaW5rIFxcXCJcIiArIExpc3RXcmFwcGVyLnRvSlNPTihsaW5rUGFyYW1zKSArIFwiXFxcIiBtdXN0IGluY2x1ZGUgYSByb3V0ZSBuYW1lLlwiO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQmFzZUV4Y2VwdGlvbihtc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZ2VuZXJhdGVkSW5zdHJ1Y3Rpb24gPSB0aGlzLl9nZW5lcmF0ZShwYXJhbXMsIGFuY2VzdG9ySW5zdHJ1Y3Rpb25zLCBwcmV2SW5zdHJ1Y3Rpb24sIF9hdXgsIGxpbmtQYXJhbXMpO1xyXG4gICAgICAgIC8vIHdlIGRvbid0IGNsb25lIHRoZSBmaXJzdCAocm9vdCkgZWxlbWVudFxyXG4gICAgICAgIGZvciAodmFyIGkgPSBhbmNlc3Rvckluc3RydWN0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICB2YXIgYW5jZXN0b3JJbnN0cnVjdGlvbiA9IGFuY2VzdG9ySW5zdHJ1Y3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAoaXNCbGFuayhhbmNlc3Rvckluc3RydWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2VuZXJhdGVkSW5zdHJ1Y3Rpb24gPSBhbmNlc3Rvckluc3RydWN0aW9uLnJlcGxhY2VDaGlsZChnZW5lcmF0ZWRJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBnZW5lcmF0ZWRJbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICAvKlxyXG4gICAgICogSW50ZXJuYWwgaGVscGVyIHRoYXQgZG9lcyBub3QgbWFrZSBhbnkgYXNzZXJ0aW9ucyBhYm91dCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5rIERTTC5cclxuICAgICAqIGBhbmNlc3Rvckluc3RydWN0aW9uc2AgYXJlIHBhcmVudHMgdGhhdCB3aWxsIGJlIGNsb25lZC5cclxuICAgICAqIGBwcmV2SW5zdHJ1Y3Rpb25gIGlzIHRoZSBleGlzdGluZyBpbnN0cnVjdGlvbiB0aGF0IHdvdWxkIGJlIHJlcGxhY2VkLCBidXQgd2hpY2ggbWlnaHQgaGF2ZVxyXG4gICAgICogYXV4IHJvdXRlcyB0aGF0IG5lZWQgdG8gYmUgY2xvbmVkLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZVJlZ2lzdHJ5LnByb3RvdHlwZS5fZ2VuZXJhdGUgPSBmdW5jdGlvbiAobGlua1BhcmFtcywgYW5jZXN0b3JJbnN0cnVjdGlvbnMsIHByZXZJbnN0cnVjdGlvbiwgX2F1eCwgX29yaWdpbmFsTGluaykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKF9hdXggPT09IHZvaWQgMCkgeyBfYXV4ID0gZmFsc2U7IH1cclxuICAgICAgICB2YXIgcGFyZW50Q29tcG9uZW50VHlwZSA9IHRoaXMuX3Jvb3RDb21wb25lbnQ7XHJcbiAgICAgICAgdmFyIGNvbXBvbmVudEluc3RydWN0aW9uID0gbnVsbDtcclxuICAgICAgICB2YXIgYXV4SW5zdHJ1Y3Rpb25zID0ge307XHJcbiAgICAgICAgdmFyIHBhcmVudEluc3RydWN0aW9uID0gTGlzdFdyYXBwZXIubGFzdChhbmNlc3Rvckluc3RydWN0aW9ucyk7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChwYXJlbnRJbnN0cnVjdGlvbikgJiYgaXNQcmVzZW50KHBhcmVudEluc3RydWN0aW9uLmNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgcGFyZW50Q29tcG9uZW50VHlwZSA9IHBhcmVudEluc3RydWN0aW9uLmNvbXBvbmVudC5jb21wb25lbnRUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlua1BhcmFtcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdEluc3RydWN0aW9uID0gdGhpcy5nZW5lcmF0ZURlZmF1bHQocGFyZW50Q29tcG9uZW50VHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChpc0JsYW5rKGRlZmF1bHRJbnN0cnVjdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiTGluayBcXFwiXCIgKyBMaXN0V3JhcHBlci50b0pTT04oX29yaWdpbmFsTGluaykgKyBcIlxcXCIgZG9lcyBub3QgcmVzb2x2ZSB0byBhIHRlcm1pbmFsIGluc3RydWN0aW9uLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEluc3RydWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmb3Igbm9uLWF1eCByb3V0ZXMsIHdlIHdhbnQgdG8gcmV1c2UgdGhlIHByZWRlY2Vzc29yJ3MgZXhpc3RpbmcgcHJpbWFyeSBhbmQgYXV4IHJvdXRlc1xyXG4gICAgICAgIC8vIGFuZCBvbmx5IG92ZXJyaWRlIHJvdXRlcyBmb3Igd2hpY2ggdGhlIGdpdmVuIGxpbmsgRFNMIHByb3ZpZGVzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChwcmV2SW5zdHJ1Y3Rpb24pICYmICFfYXV4KSB7XHJcbiAgICAgICAgICAgIGF1eEluc3RydWN0aW9ucyA9IFN0cmluZ01hcFdyYXBwZXIubWVyZ2UocHJldkluc3RydWN0aW9uLmF1eEluc3RydWN0aW9uLCBhdXhJbnN0cnVjdGlvbnMpO1xyXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0cnVjdGlvbiA9IHByZXZJbnN0cnVjdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX3J1bGVzLmdldChwYXJlbnRDb21wb25lbnRUeXBlKTtcclxuICAgICAgICBpZiAoaXNCbGFuayhydWxlcykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oXCJDb21wb25lbnQgXFxcIlwiICsgZ2V0VHlwZU5hbWVGb3JEZWJ1Z2dpbmcocGFyZW50Q29tcG9uZW50VHlwZSkgKyBcIlxcXCIgaGFzIG5vIHJvdXRlIGNvbmZpZy5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaW5rUGFyYW1JbmRleCA9IDA7XHJcbiAgICAgICAgdmFyIHJvdXRlUGFyYW1zID0ge307XHJcbiAgICAgICAgLy8gZmlyc3QsIHJlY29nbml6ZSB0aGUgcHJpbWFyeSByb3V0ZSBpZiBvbmUgaXMgcHJvdmlkZWRcclxuICAgICAgICBpZiAobGlua1BhcmFtSW5kZXggPCBsaW5rUGFyYW1zLmxlbmd0aCAmJiBpc1N0cmluZyhsaW5rUGFyYW1zW2xpbmtQYXJhbUluZGV4XSkpIHtcclxuICAgICAgICAgICAgdmFyIHJvdXRlTmFtZSA9IGxpbmtQYXJhbXNbbGlua1BhcmFtSW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAocm91dGVOYW1lID09ICcnIHx8IHJvdXRlTmFtZSA9PSAnLicgfHwgcm91dGVOYW1lID09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiXFxcIlwiICsgcm91dGVOYW1lICsgXCIvXFxcIiBpcyBvbmx5IGFsbG93ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmsgRFNMLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaW5rUGFyYW1JbmRleCArPSAxO1xyXG4gICAgICAgICAgICBpZiAobGlua1BhcmFtSW5kZXggPCBsaW5rUGFyYW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpbmtQYXJhbSA9IGxpbmtQYXJhbXNbbGlua1BhcmFtSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nTWFwKGxpbmtQYXJhbSkgJiYgIWlzQXJyYXkobGlua1BhcmFtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlUGFyYW1zID0gbGlua1BhcmFtO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmtQYXJhbUluZGV4ICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHJvdXRlUmVjb2duaXplciA9IChfYXV4ID8gcnVsZXMuYXV4UnVsZXNCeU5hbWUgOiBydWxlcy5ydWxlc0J5TmFtZSkuZ2V0KHJvdXRlTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpc0JsYW5rKHJvdXRlUmVjb2duaXplcikpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwiQ29tcG9uZW50IFxcXCJcIiArIGdldFR5cGVOYW1lRm9yRGVidWdnaW5nKHBhcmVudENvbXBvbmVudFR5cGUpICsgXCJcXFwiIGhhcyBubyByb3V0ZSBuYW1lZCBcXFwiXCIgKyByb3V0ZU5hbWUgKyBcIlxcXCIuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhbiBcInVucmVzb2x2ZWQgaW5zdHJ1Y3Rpb25cIiBmb3IgYXN5bmMgcm91dGVzXHJcbiAgICAgICAgICAgIC8vIHdlJ2xsIGZpZ3VyZSBvdXQgdGhlIHJlc3Qgb2YgdGhlIHJvdXRlIHdoZW4gd2UgcmVzb2x2ZSB0aGUgaW5zdHJ1Y3Rpb24gYW5kXHJcbiAgICAgICAgICAgIC8vIHBlcmZvcm0gYSBuYXZpZ2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChpc0JsYW5rKHJvdXRlUmVjb2duaXplci5oYW5kbGVyLmNvbXBvbmVudFR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2VuZXJhdGVkVXJsID0gcm91dGVSZWNvZ25pemVyLmdlbmVyYXRlQ29tcG9uZW50UGF0aFZhbHVlcyhyb3V0ZVBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGluc3RydWN0aW9uXzEuVW5yZXNvbHZlZEluc3RydWN0aW9uKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm91dGVSZWNvZ25pemVyLmhhbmRsZXIucmVzb2x2ZUNvbXBvbmVudFR5cGUoKS50aGVuKGZ1bmN0aW9uIChfKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fZ2VuZXJhdGUobGlua1BhcmFtcywgYW5jZXN0b3JJbnN0cnVjdGlvbnMsIHByZXZJbnN0cnVjdGlvbiwgX2F1eCwgX29yaWdpbmFsTGluayk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LCBnZW5lcmF0ZWRVcmwudXJsUGF0aCwgdXJsX3BhcnNlcl8xLmNvbnZlcnRVcmxQYXJhbXNUb0FycmF5KGdlbmVyYXRlZFVybC51cmxQYXJhbXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0cnVjdGlvbiA9IF9hdXggPyBydWxlcy5nZW5lcmF0ZUF1eGlsaWFyeShyb3V0ZU5hbWUsIHJvdXRlUGFyYW1zKSA6XHJcbiAgICAgICAgICAgICAgICBydWxlcy5nZW5lcmF0ZShyb3V0ZU5hbWUsIHJvdXRlUGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTmV4dCwgcmVjb2duaXplIGF1eGlsaWFyeSBpbnN0cnVjdGlvbnMuXHJcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBhbmNlc3RvciBpbnN0cnVjdGlvbiwgd2UgcHJlc2VydmUgd2hhdGV2ZXIgYXV4IHJvdXRlcyBhcmUgYWN0aXZlIGZyb20gaXQuXHJcbiAgICAgICAgd2hpbGUgKGxpbmtQYXJhbUluZGV4IDwgbGlua1BhcmFtcy5sZW5ndGggJiYgaXNBcnJheShsaW5rUGFyYW1zW2xpbmtQYXJhbUluZGV4XSkpIHtcclxuICAgICAgICAgICAgdmFyIGF1eFBhcmVudEluc3RydWN0aW9uID0gW3BhcmVudEluc3RydWN0aW9uXTtcclxuICAgICAgICAgICAgdmFyIGF1eEluc3RydWN0aW9uID0gdGhpcy5fZ2VuZXJhdGUobGlua1BhcmFtc1tsaW5rUGFyYW1JbmRleF0sIGF1eFBhcmVudEluc3RydWN0aW9uLCBudWxsLCB0cnVlLCBfb3JpZ2luYWxMaW5rKTtcclxuICAgICAgICAgICAgLy8gVE9ETzogdGhpcyB3aWxsIG5vdCB3b3JrIGZvciBhdXggcm91dGVzIHdpdGggcGFyYW1ldGVycyBvciBtdWx0aXBsZSBzZWdtZW50c1xyXG4gICAgICAgICAgICBhdXhJbnN0cnVjdGlvbnNbYXV4SW5zdHJ1Y3Rpb24uY29tcG9uZW50LnVybFBhdGhdID0gYXV4SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgIGxpbmtQYXJhbUluZGV4ICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpbnN0cnVjdGlvbiA9IG5ldyBpbnN0cnVjdGlvbl8xLlJlc29sdmVkSW5zdHJ1Y3Rpb24oY29tcG9uZW50SW5zdHJ1Y3Rpb24sIG51bGwsIGF1eEluc3RydWN0aW9ucyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGNvbXBvbmVudCBpcyBzeW5jLCB3ZSBjYW4gZ2VuZXJhdGUgcmVzb2x2ZWQgY2hpbGQgcm91dGUgaW5zdHJ1Y3Rpb25zXHJcbiAgICAgICAgLy8gSWYgbm90LCB3ZSdsbCByZXNvbHZlIHRoZSBpbnN0cnVjdGlvbnMgYXQgbmF2aWdhdGlvbiB0aW1lXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChjb21wb25lbnRJbnN0cnVjdGlvbikgJiYgaXNQcmVzZW50KGNvbXBvbmVudEluc3RydWN0aW9uLmNvbXBvbmVudFR5cGUpKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZEluc3RydWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudEluc3RydWN0aW9uLnRlcm1pbmFsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGlua1BhcmFtSW5kZXggPj0gbGlua1BhcmFtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGlsZEFuY2VzdG9yQ29tcG9uZW50cyA9IGFuY2VzdG9ySW5zdHJ1Y3Rpb25zLmNvbmNhdChbaW5zdHJ1Y3Rpb25dKTtcclxuICAgICAgICAgICAgICAgIHZhciByZW1haW5pbmdMaW5rUGFyYW1zID0gbGlua1BhcmFtcy5zbGljZShsaW5rUGFyYW1JbmRleCk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZEluc3RydWN0aW9uID0gdGhpcy5fZ2VuZXJhdGUocmVtYWluaW5nTGlua1BhcmFtcywgY2hpbGRBbmNlc3RvckNvbXBvbmVudHMsIG51bGwsIGZhbHNlLCBfb3JpZ2luYWxMaW5rKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbi5jaGlsZCA9IGNoaWxkSW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH07XHJcbiAgICBSb3V0ZVJlZ2lzdHJ5LnByb3RvdHlwZS5oYXNSb3V0ZSA9IGZ1bmN0aW9uIChuYW1lLCBwYXJlbnRDb21wb25lbnQpIHtcclxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9ydWxlcy5nZXQocGFyZW50Q29tcG9uZW50KTtcclxuICAgICAgICBpZiAoaXNCbGFuayhydWxlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcnVsZXMuaGFzUm91dGUobmFtZSk7XHJcbiAgICB9O1xyXG4gICAgUm91dGVSZWdpc3RyeS5wcm90b3R5cGUuZ2VuZXJhdGVEZWZhdWx0ID0gZnVuY3Rpb24gKGNvbXBvbmVudEN1cnNvcikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGlzQmxhbmsoY29tcG9uZW50Q3Vyc29yKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fcnVsZXMuZ2V0KGNvbXBvbmVudEN1cnNvcik7XHJcbiAgICAgICAgaWYgKGlzQmxhbmsocnVsZXMpIHx8IGlzQmxhbmsocnVsZXMuZGVmYXVsdFJ1bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGVmYXVsdENoaWxkID0gbnVsbDtcclxuICAgICAgICBpZiAoaXNQcmVzZW50KHJ1bGVzLmRlZmF1bHRSdWxlLmhhbmRsZXIuY29tcG9uZW50VHlwZSkpIHtcclxuICAgICAgICAgICAgdmFyIGNvbXBvbmVudEluc3RydWN0aW9uID0gcnVsZXMuZGVmYXVsdFJ1bGUuZ2VuZXJhdGUoe30pO1xyXG4gICAgICAgICAgICBpZiAoIXJ1bGVzLmRlZmF1bHRSdWxlLnRlcm1pbmFsKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2hpbGQgPSB0aGlzLmdlbmVyYXRlRGVmYXVsdChydWxlcy5kZWZhdWx0UnVsZS5oYW5kbGVyLmNvbXBvbmVudFR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgaW5zdHJ1Y3Rpb25fMS5EZWZhdWx0SW5zdHJ1Y3Rpb24oY29tcG9uZW50SW5zdHJ1Y3Rpb24sIGRlZmF1bHRDaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgaW5zdHJ1Y3Rpb25fMS5VbnJlc29sdmVkSW5zdHJ1Y3Rpb24oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZGVmYXVsdFJ1bGUuaGFuZGxlci5yZXNvbHZlQ29tcG9uZW50VHlwZSgpLnRoZW4oZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF90aGlzLmdlbmVyYXRlRGVmYXVsdChjb21wb25lbnRDdXJzb3IpOyB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUm91dGVSZWdpc3RyeTtcclxufSkoKTtcclxuZXhwb3J0cy5Sb3V0ZVJlZ2lzdHJ5ID0gUm91dGVSZWdpc3RyeTtcclxuLypcclxuICogR2l2ZW46IFsnL2EvYicsIHtjOiAyfV1cclxuICogUmV0dXJuczogWycnLCAnYScsICdiJywge2M6IDJ9XVxyXG4gKi9cclxuZnVuY3Rpb24gc3BsaXRBbmRGbGF0dGVuTGlua1BhcmFtcyhsaW5rUGFyYW1zKSB7XHJcbiAgICB2YXIgYWNjdW11bGF0aW9uID0gW107XHJcbiAgICBsaW5rUGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXNTdHJpbmcoaXRlbSkpIHtcclxuICAgICAgICAgICAgdmFyIHN0ckl0ZW0gPSBpdGVtO1xyXG4gICAgICAgICAgICBhY2N1bXVsYXRpb24gPSBhY2N1bXVsYXRpb24uY29uY2F0KHN0ckl0ZW0uc3BsaXQoJy8nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhY2N1bXVsYXRpb24ucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhY2N1bXVsYXRpb247XHJcbn1cclxuLypcclxuICogR2l2ZW4gYSBsaXN0IG9mIGluc3RydWN0aW9ucywgcmV0dXJucyB0aGUgbW9zdCBzcGVjaWZpYyBpbnN0cnVjdGlvblxyXG4gKi9cclxuZnVuY3Rpb24gbW9zdFNwZWNpZmljKGluc3RydWN0aW9ucykge1xyXG4gICAgaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIGlzUHJlc2VudChpbnN0cnVjdGlvbik7IH0pO1xyXG4gICAgaWYgKGluc3RydWN0aW9ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGluc3RydWN0aW9ucy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbnNbMF07XHJcbiAgICB9XHJcbiAgICB2YXIgZmlyc3QgPSBpbnN0cnVjdGlvbnNbMF07XHJcbiAgICB2YXIgcmVzdCA9IGluc3RydWN0aW9ucy5zbGljZSgxKTtcclxuICAgIHJldHVybiByZXN0LnJlZHVjZShmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24sIGNvbnRlbmRlcikge1xyXG4gICAgICAgIGlmIChjb21wYXJlU3BlY2lmaWNpdHlTdHJpbmdzKGNvbnRlbmRlci5zcGVjaWZpY2l0eSwgaW5zdHJ1Y3Rpb24uc3BlY2lmaWNpdHkpID09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZW5kZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbjtcclxuICAgIH0sIGZpcnN0KTtcclxufVxyXG4vKlxyXG4gKiBFeHBlY3RzIHN0cmluZ3MgdG8gYmUgaW4gdGhlIGZvcm0gb2YgXCJbMC0yXStcIlxyXG4gKiBSZXR1cm5zIC0xIGlmIHN0cmluZyBBIHNob3VsZCBiZSBzb3J0ZWQgYWJvdmUgc3RyaW5nIEIsIDEgaWYgaXQgc2hvdWxkIGJlIHNvcnRlZCBhZnRlcixcclxuICogb3IgMCBpZiB0aGV5IGFyZSB0aGUgc2FtZS5cclxuICovXHJcbmZ1bmN0aW9uIGNvbXBhcmVTcGVjaWZpY2l0eVN0cmluZ3MoYSwgYikge1xyXG4gICAgdmFyIGwgPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpICs9IDEpIHtcclxuICAgICAgICB2YXIgYWkgPSBTdHJpbmdXcmFwcGVyLmNoYXJDb2RlQXQoYSwgaSk7XHJcbiAgICAgICAgdmFyIGJpID0gU3RyaW5nV3JhcHBlci5jaGFyQ29kZUF0KGIsIGkpO1xyXG4gICAgICAgIHZhciBkaWZmZXJlbmNlID0gYmkgLSBhaTtcclxuICAgICAgICBpZiAoZGlmZmVyZW5jZSAhPSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmZXJlbmNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoO1xyXG59XHJcbmZ1bmN0aW9uIGFzc2VydFRlcm1pbmFsQ29tcG9uZW50KGNvbXBvbmVudCwgcGF0aCkge1xyXG4gICAgaWYgKCFpc1R5cGUoY29tcG9uZW50KSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBhbm5vdGF0aW9ucyA9IHJlZmxlY3Rvci5hbm5vdGF0aW9ucyhjb21wb25lbnQpO1xyXG4gICAgaWYgKGlzUHJlc2VudChhbm5vdGF0aW9ucykpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFubm90YXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uIGluc3RhbmNlb2Ygcm91dGVfY29uZmlnX2ltcGxfMS5Sb3V0ZUNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oXCJDaGlsZCByb3V0ZXMgYXJlIG5vdCBhbGxvd2VkIGZvciBcXFwiXCIgKyBwYXRoICsgXCJcXFwiLiBVc2UgXFxcIi4uLlxcXCIgb24gdGhlIHBhcmVudCdzIHJvdXRlIHBhdGguXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn07XHJcbnZhciByb3V0ZV9saWZlY3ljbGVfcmVmbGVjdG9yXzEgPSByb3V0ZXJSZXF1aXJlKCcuL2xpZmVjeWNsZS9yb3V0ZV9saWZlY3ljbGVfcmVmbGVjdG9yJyk7XHJcbnZhciBfcmVzb2x2ZVRvVHJ1ZSA9IFByb21pc2VXcmFwcGVyLnJlc29sdmUodHJ1ZSk7XHJcbnZhciBfcmVzb2x2ZVRvRmFsc2UgPSBQcm9taXNlV3JhcHBlci5yZXNvbHZlKGZhbHNlKTtcclxuLyoqXHJcbiAqIFRoZSBgUm91dGVyYCBpcyByZXNwb25zaWJsZSBmb3IgbWFwcGluZyBVUkxzIHRvIGNvbXBvbmVudHMuXHJcbiAqXHJcbiAqIFlvdSBjYW4gc2VlIHRoZSBzdGF0ZSBvZiB0aGUgcm91dGVyIGJ5IGluc3BlY3RpbmcgdGhlIHJlYWQtb25seSBmaWVsZCBgcm91dGVyLm5hdmlnYXRpbmdgLlxyXG4gKiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHNob3dpbmcgYSBzcGlubmVyLCBmb3IgaW5zdGFuY2UuXHJcbiAqXHJcbiAqICMjIENvbmNlcHRzXHJcbiAqXHJcbiAqIFJvdXRlcnMgYW5kIGNvbXBvbmVudCBpbnN0YW5jZXMgaGF2ZSBhIDE6MSBjb3JyZXNwb25kZW5jZS5cclxuICpcclxuICogVGhlIHJvdXRlciBob2xkcyByZWZlcmVuY2UgdG8gYSBudW1iZXIgb2Yge0BsaW5rIFJvdXRlck91dGxldH0uXHJcbiAqIEFuIG91dGxldCBpcyBhIHBsYWNlaG9sZGVyIHRoYXQgdGhlIHJvdXRlciBkeW5hbWljYWxseSBmaWxscyBpbiBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgVVJMLlxyXG4gKlxyXG4gKiBXaGVuIHRoZSByb3V0ZXIgbmF2aWdhdGVzIGZyb20gYSBVUkwsIGl0IG11c3QgZmlyc3QgcmVjb2duaXplIGl0IGFuZCBzZXJpYWxpemUgaXQgaW50byBhblxyXG4gKiBgSW5zdHJ1Y3Rpb25gLlxyXG4gKiBUaGUgcm91dGVyIHVzZXMgdGhlIGBSb3V0ZVJlZ2lzdHJ5YCB0byBnZXQgYW4gYEluc3RydWN0aW9uYC5cclxuICovXHJcbnZhciBSb3V0ZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUm91dGVyKHJlZ2lzdHJ5LCBwYXJlbnQsIGhvc3RDb21wb25lbnQsIHJvb3QpIHtcclxuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICAgICAgdGhpcy5ob3N0Q29tcG9uZW50ID0gaG9zdENvbXBvbmVudDtcclxuICAgICAgICB0aGlzLnJvb3QgPSByb290O1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBjdXJyZW50IGBJbnN0cnVjdGlvbmAgZm9yIHRoZSByb3V0ZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudE5hdmlnYXRpb24gPSBfcmVzb2x2ZVRvVHJ1ZTtcclxuICAgICAgICB0aGlzLl9vdXRsZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2F1eFJvdXRlcnMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5fc3ViamVjdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0cyBhIGNoaWxkIHJvdXRlci4gWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gdXNlIHRoaXMgdW5sZXNzIHlvdSdyZSB3cml0aW5nIGEgcmV1c2FibGVcclxuICAgICAqIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5jaGlsZFJvdXRlciA9IGZ1bmN0aW9uIChob3N0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkUm91dGVyID0gbmV3IENoaWxkUm91dGVyKHRoaXMsIGhvc3RDb21wb25lbnQpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0cyBhIGNoaWxkIHJvdXRlci4gWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gdXNlIHRoaXMgdW5sZXNzIHlvdSdyZSB3cml0aW5nIGEgcmV1c2FibGVcclxuICAgICAqIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5hdXhSb3V0ZXIgPSBmdW5jdGlvbiAoaG9zdENvbXBvbmVudCkgeyByZXR1cm4gbmV3IENoaWxkUm91dGVyKHRoaXMsIGhvc3RDb21wb25lbnQpOyB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlciBhbiBvdXRsZXQgdG8gYmUgbm90aWZpZWQgb2YgcHJpbWFyeSByb3V0ZSBjaGFuZ2VzLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzIHVubGVzcyB5b3UncmUgd3JpdGluZyBhIHJldXNhYmxlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5yZWdpc3RlclByaW1hcnlPdXRsZXQgPSBmdW5jdGlvbiAob3V0bGV0KSB7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChvdXRsZXQubmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEJhc2VFeGNlcHRpb24oXCJyZWdpc3RlclByaW1hcnlPdXRsZXQgZXhwZWN0cyB0byBiZSBjYWxsZWQgd2l0aCBhbiB1bm5hbWVkIG91dGxldC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5fb3V0bGV0KSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQmFzZUV4Y2VwdGlvbihcIlByaW1hcnkgb3V0bGV0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX291dGxldCA9IG91dGxldDtcclxuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuY3VycmVudEluc3RydWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21taXQodGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24sIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yZXNvbHZlVG9UcnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVW5yZWdpc3RlciBhbiBvdXRsZXQgKGJlY2F1c2UgaXQgd2FzIGRlc3Ryb3llZCwgZXRjKS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byB1c2UgdGhpcyB1bmxlc3MgeW91J3JlIHdyaXRpbmcgYSBjdXN0b20gb3V0bGV0IGltcGxlbWVudGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLnVucmVnaXN0ZXJQcmltYXJ5T3V0bGV0ID0gZnVuY3Rpb24gKG91dGxldCkge1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQob3V0bGV0Lm5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwicmVnaXN0ZXJQcmltYXJ5T3V0bGV0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggYW4gdW5uYW1lZCBvdXRsZXQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9vdXRsZXQgPSBudWxsO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgYW4gb3V0bGV0IHRvIG5vdGlmaWVkIG9mIGF1eGlsaWFyeSByb3V0ZSBjaGFuZ2VzLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzIHVubGVzcyB5b3UncmUgd3JpdGluZyBhIHJldXNhYmxlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5yZWdpc3RlckF1eE91dGxldCA9IGZ1bmN0aW9uIChvdXRsZXQpIHtcclxuICAgICAgICB2YXIgb3V0bGV0TmFtZSA9IG91dGxldC5uYW1lO1xyXG4gICAgICAgIGlmIChpc0JsYW5rKG91dGxldE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKFwicmVnaXN0ZXJBdXhPdXRsZXQgZXhwZWN0cyB0byBiZSBjYWxsZWQgd2l0aCBhbiBvdXRsZXQgd2l0aCBhIG5hbWUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5hdXhSb3V0ZXIodGhpcy5ob3N0Q29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLl9hdXhSb3V0ZXJzLnNldChvdXRsZXROYW1lLCByb3V0ZXIpO1xyXG4gICAgICAgIHJvdXRlci5fb3V0bGV0ID0gb3V0bGV0O1xyXG4gICAgICAgIHZhciBhdXhJbnN0cnVjdGlvbjtcclxuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuY3VycmVudEluc3RydWN0aW9uKSAmJlxyXG4gICAgICAgICAgICBpc1ByZXNlbnQoYXV4SW5zdHJ1Y3Rpb24gPSB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbi5hdXhJbnN0cnVjdGlvbltvdXRsZXROYW1lXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJvdXRlci5jb21taXQoYXV4SW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jlc29sdmVUb1RydWU7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhbiBpbnN0cnVjdGlvbiwgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGluc3RydWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUsXHJcbiAgICAgKiBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5pc1JvdXRlQWN0aXZlID0gZnVuY3Rpb24gKGluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgcm91dGVyID0gdGhpcztcclxuICAgICAgICBpZiAoaXNCbGFuayh0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBgaW5zdHJ1Y3Rpb25gIGNvcnJlc3BvbmRzIHRvIHRoZSByb290IHJvdXRlclxyXG4gICAgICAgIHdoaWxlIChpc1ByZXNlbnQocm91dGVyLnBhcmVudCkgJiYgaXNQcmVzZW50KGluc3RydWN0aW9uLmNoaWxkKSkge1xyXG4gICAgICAgICAgICByb3V0ZXIgPSByb3V0ZXIucGFyZW50O1xyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLmNoaWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNCbGFuayhpbnN0cnVjdGlvbi5jb21wb25lbnQpIHx8IGlzQmxhbmsodGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24uY29tcG9uZW50KSB8fFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbi5jb21wb25lbnQucm91dGVOYW1lICE9IGluc3RydWN0aW9uLmNvbXBvbmVudC5yb3V0ZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGFyYW1FcXVhbHMgPSB0cnVlO1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24uY29tcG9uZW50LnBhcmFtcykpIHtcclxuICAgICAgICAgICAgU3RyaW5nTWFwV3JhcHBlci5mb3JFYWNoKGluc3RydWN0aW9uLmNvbXBvbmVudC5wYXJhbXMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuY3VycmVudEluc3RydWN0aW9uLmNvbXBvbmVudC5wYXJhbXNba2V5XSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbUVxdWFscyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtRXF1YWxzO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRHluYW1pY2FsbHkgdXBkYXRlIHRoZSByb3V0aW5nIGNvbmZpZ3VyYXRpb24gYW5kIHRyaWdnZXIgYSBuYXZpZ2F0aW9uLlxyXG4gICAgICpcclxuICAgICAqICMjIyBVc2FnZVxyXG4gICAgICpcclxuICAgICAqIGBgYFxyXG4gICAgICogcm91dGVyLmNvbmZpZyhbXHJcbiAgICAgKiAgIHsgJ3BhdGgnOiAnLycsICdjb21wb25lbnQnOiBJbmRleENvbXAgfSxcclxuICAgICAqICAgeyAncGF0aCc6ICcvdXNlci86aWQnLCAnY29tcG9uZW50JzogVXNlckNvbXAgfSxcclxuICAgICAqIF0pO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuY29uZmlnID0gZnVuY3Rpb24gKGRlZmluaXRpb25zKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBkZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChyb3V0ZURlZmluaXRpb24pIHsgX3RoaXMucmVnaXN0cnkuY29uZmlnKF90aGlzLmhvc3RDb21wb25lbnQsIHJvdXRlRGVmaW5pdGlvbik7IH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbmF2aWdhdGUoKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBSb3V0ZSBMaW5rIERTTC4gSXQncyBwcmVmZXJyZWQgdG8gbmF2aWdhdGUgd2l0aCB0aGlzIG1ldGhvZFxyXG4gICAgICogb3ZlciBgbmF2aWdhdGVCeVVybGAuXHJcbiAgICAgKlxyXG4gICAgICogIyMjIFVzYWdlXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBtZXRob2QgdGFrZXMgYW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBSb3V0ZSBMaW5rIERTTDpcclxuICAgICAqIGBgYFxyXG4gICAgICogWycuL015Q21wJywge3BhcmFtOiAzfV1cclxuICAgICAqIGBgYFxyXG4gICAgICogU2VlIHRoZSB7QGxpbmsgUm91dGVyTGlua30gZGlyZWN0aXZlIGZvciBtb3JlLlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLm5hdmlnYXRlID0gZnVuY3Rpb24gKGxpbmtQYXJhbXMpIHtcclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSB0aGlzLmdlbmVyYXRlKGxpbmtQYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiwgZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTmF2aWdhdGUgdG8gYSBVUkwuIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBuYXZpZ2F0aW9uIGlzIGNvbXBsZXRlLlxyXG4gICAgICogSXQncyBwcmVmZXJyZWQgdG8gbmF2aWdhdGUgd2l0aCBgbmF2aWdhdGVgIGluc3RlYWQgb2YgdGhpcyBtZXRob2QsIHNpbmNlIFVSTHMgYXJlIG1vcmUgYnJpdHRsZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZ2l2ZW4gVVJMIGJlZ2lucyB3aXRoIGEgYC9gLCByb3V0ZXIgd2lsbCBuYXZpZ2F0ZSBhYnNvbHV0ZWx5LlxyXG4gICAgICogSWYgdGhlIGdpdmVuIFVSTCBkb2VzIG5vdCBiZWdpbiB3aXRoIGAvYCwgdGhlIHJvdXRlciB3aWxsIG5hdmlnYXRlIHJlbGF0aXZlIHRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLm5hdmlnYXRlQnlVcmwgPSBmdW5jdGlvbiAodXJsLCBfc2tpcExvY2F0aW9uQ2hhbmdlKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoX3NraXBMb2NhdGlvbkNoYW5nZSA9PT0gdm9pZCAwKSB7IF9za2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50TmF2aWdhdGlvbiA9IHRoaXMuX2N1cnJlbnROYXZpZ2F0aW9uLnRoZW4oZnVuY3Rpb24gKF8pIHtcclxuICAgICAgICAgICAgX3RoaXMubGFzdE5hdmlnYXRpb25BdHRlbXB0ID0gdXJsO1xyXG4gICAgICAgICAgICBfdGhpcy5fc3RhcnROYXZpZ2F0aW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5fYWZ0ZXJQcm9taXNlRmluaXNoTmF2aWdhdGluZyhfdGhpcy5yZWNvZ25pemUodXJsKS50aGVuKGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQmxhbmsoaW5zdHJ1Y3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9uYXZpZ2F0ZShpbnN0cnVjdGlvbiwgX3NraXBMb2NhdGlvbkNoYW5nZSk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlIHZpYSB0aGUgcHJvdmlkZWQgaW5zdHJ1Y3Rpb24uIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBuYXZpZ2F0aW9uIGlzXHJcbiAgICAgKiBjb21wbGV0ZS5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5uYXZpZ2F0ZUJ5SW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24sIF9za2lwTG9jYXRpb25DaGFuZ2UpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChfc2tpcExvY2F0aW9uQ2hhbmdlID09PSB2b2lkIDApIHsgX3NraXBMb2NhdGlvbkNoYW5nZSA9IGZhbHNlOyB9XHJcbiAgICAgICAgaWYgKGlzQmxhbmsoaW5zdHJ1Y3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzb2x2ZVRvRmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50TmF2aWdhdGlvbiA9IHRoaXMuX2N1cnJlbnROYXZpZ2F0aW9uLnRoZW4oZnVuY3Rpb24gKF8pIHtcclxuICAgICAgICAgICAgX3RoaXMuX3N0YXJ0TmF2aWdhdGluZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuX2FmdGVyUHJvbWlzZUZpbmlzaE5hdmlnYXRpbmcoX3RoaXMuX25hdmlnYXRlKGluc3RydWN0aW9uLCBfc2tpcExvY2F0aW9uQ2hhbmdlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5fc2V0dGxlSW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbi5yZXNvbHZlQ29tcG9uZW50KCkudGhlbihmdW5jdGlvbiAoXykge1xyXG4gICAgICAgICAgICB2YXIgdW5zZXR0bGVkSW5zdHJ1Y3Rpb25zID0gW107XHJcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQoaW5zdHJ1Y3Rpb24uY29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uY29tcG9uZW50LnJldXNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzUHJlc2VudChpbnN0cnVjdGlvbi5jaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgIHVuc2V0dGxlZEluc3RydWN0aW9ucy5wdXNoKF90aGlzLl9zZXR0bGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbi5jaGlsZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFN0cmluZ01hcFdyYXBwZXIuZm9yRWFjaChpbnN0cnVjdGlvbi5hdXhJbnN0cnVjdGlvbiwgZnVuY3Rpb24gKGluc3RydWN0aW9uLCBfKSB7XHJcbiAgICAgICAgICAgICAgICB1bnNldHRsZWRJbnN0cnVjdGlvbnMucHVzaChfdGhpcy5fc2V0dGxlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlV3JhcHBlci5hbGwodW5zZXR0bGVkSW5zdHJ1Y3Rpb25zKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLl9uYXZpZ2F0ZSA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbiwgX3NraXBMb2NhdGlvbkNoYW5nZSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRsZUluc3RydWN0aW9uKGluc3RydWN0aW9uKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoXykgeyByZXR1cm4gX3RoaXMuX3JvdXRlckNhblJldXNlKGluc3RydWN0aW9uKTsgfSlcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF90aGlzLl9jYW5BY3RpdmF0ZShpbnN0cnVjdGlvbik7IH0pXHJcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuX3JvdXRlckNhbkRlYWN0aXZhdGUoaW5zdHJ1Y3Rpb24pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5jb21taXQoaW5zdHJ1Y3Rpb24sIF9za2lwTG9jYXRpb25DaGFuZ2UpLnRoZW4oZnVuY3Rpb24gKF8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2VtaXROYXZpZ2F0aW9uRmluaXNoKGluc3RydWN0aW9uLnRvUm9vdFVybCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFJvdXRlci5wcm90b3R5cGUuX2VtaXROYXZpZ2F0aW9uRmluaXNoID0gZnVuY3Rpb24gKHVybCkgeyBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLl9zdWJqZWN0LCB1cmwpOyB9O1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5fZW1pdE5hdmlnYXRpb25GYWlsID0gZnVuY3Rpb24gKHVybCkgeyBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRXJyb3IodGhpcy5fc3ViamVjdCwgdXJsKTsgfTtcclxuICAgIFJvdXRlci5wcm90b3R5cGUuX2FmdGVyUHJvbWlzZUZpbmlzaE5hdmlnYXRpbmcgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2VXcmFwcGVyLmNhdGNoRXJyb3IocHJvbWlzZS50aGVuKGZ1bmN0aW9uIChfKSB7IHJldHVybiBfdGhpcy5fZmluaXNoTmF2aWdhdGluZygpOyB9KSwgZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICBfdGhpcy5fZmluaXNoTmF2aWdhdGluZygpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLypcclxuICAgICAqIFJlY3Vyc2l2ZWx5IHNldCByZXVzZSBmbGFnc1xyXG4gICAgICovXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLl9yb3V0ZXJDYW5SZXVzZSA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGlzQmxhbmsodGhpcy5fb3V0bGV0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc29sdmVUb0ZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNCbGFuayhpbnN0cnVjdGlvbi5jb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzb2x2ZVRvVHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX291dGxldC5yb3V0ZXJDYW5SZXVzZShpbnN0cnVjdGlvbi5jb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpbnN0cnVjdGlvbi5jb21wb25lbnQucmV1c2UgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcmVzZW50KF90aGlzLl9jaGlsZFJvdXRlcikgJiYgaXNQcmVzZW50KGluc3RydWN0aW9uLmNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9jaGlsZFJvdXRlci5fcm91dGVyQ2FuUmV1c2UoaW5zdHJ1Y3Rpb24uY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5fY2FuQWN0aXZhdGUgPSBmdW5jdGlvbiAobmV4dEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhbkFjdGl2YXRlT25lKG5leHRJbnN0cnVjdGlvbiwgdGhpcy5jdXJyZW50SW5zdHJ1Y3Rpb24pO1xyXG4gICAgfTtcclxuICAgIFJvdXRlci5wcm90b3R5cGUuX3JvdXRlckNhbkRlYWN0aXZhdGUgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChpc0JsYW5rKHRoaXMuX291dGxldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZXNvbHZlVG9UcnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbmV4dDtcclxuICAgICAgICB2YXIgY2hpbGRJbnN0cnVjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdmFyIHJldXNlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvbXBvbmVudEluc3RydWN0aW9uID0gbnVsbDtcclxuICAgICAgICBpZiAoaXNQcmVzZW50KGluc3RydWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjaGlsZEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24uY2hpbGQ7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24uY29tcG9uZW50O1xyXG4gICAgICAgICAgICByZXVzZSA9IGlzQmxhbmsoaW5zdHJ1Y3Rpb24uY29tcG9uZW50KSB8fCBpbnN0cnVjdGlvbi5jb21wb25lbnQucmV1c2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXVzZSkge1xyXG4gICAgICAgICAgICBuZXh0ID0gX3Jlc29sdmVUb1RydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuZXh0ID0gdGhpcy5fb3V0bGV0LnJvdXRlckNhbkRlYWN0aXZhdGUoY29tcG9uZW50SW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBhdXggcm91dGUgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgICAgICAgcmV0dXJuIG5leHQudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KF90aGlzLl9jaGlsZFJvdXRlcikpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGlkZWFsbHksIHRoaXMgY2xvc3VyZSB3b3VsZCBtYXAgdG8gYXN5bmMtYXdhaXQgaW4gRGFydC5cclxuICAgICAgICAgICAgICAgIC8vIEZvciBub3csIGNhc3RpbmcgdG8gYW55IHRvIHN1cHByZXNzIGFuIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9jaGlsZFJvdXRlci5fcm91dGVyQ2FuRGVhY3RpdmF0ZShjaGlsZEluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhpcyByb3V0ZXIgYW5kIGFsbCBkZXNjZW5kYW50IHJvdXRlcnMgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBpbnN0cnVjdGlvblxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLmNvbW1pdCA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbiwgX3NraXBMb2NhdGlvbkNoYW5nZSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKF9za2lwTG9jYXRpb25DaGFuZ2UgPT09IHZvaWQgMCkgeyBfc2tpcExvY2F0aW9uQ2hhbmdlID0gZmFsc2U7IH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uO1xyXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc29sdmVUb1RydWU7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLl9vdXRsZXQpICYmIGlzUHJlc2VudChpbnN0cnVjdGlvbi5jb21wb25lbnQpKSB7XHJcbiAgICAgICAgICAgIHZhciBjb21wb25lbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLmNvbXBvbmVudDtcclxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudEluc3RydWN0aW9uLnJldXNlKSB7XHJcbiAgICAgICAgICAgICAgICBuZXh0ID0gdGhpcy5fb3V0bGV0LnJldXNlKGNvbXBvbmVudEluc3RydWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5leHQgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZShpbnN0cnVjdGlvbikudGhlbihmdW5jdGlvbiAoXykgeyByZXR1cm4gX3RoaXMuX291dGxldC5hY3RpdmF0ZShjb21wb25lbnRJbnN0cnVjdGlvbik7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQoaW5zdHJ1Y3Rpb24uY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICBuZXh0ID0gbmV4dC50aGVuKGZ1bmN0aW9uIChfKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJlc2VudChfdGhpcy5fY2hpbGRSb3V0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fY2hpbGRSb3V0ZXIuY29tbWl0KGluc3RydWN0aW9uLmNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICB0aGlzLl9hdXhSb3V0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHJvdXRlciwgbmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGluc3RydWN0aW9uLmF1eEluc3RydWN0aW9uW25hbWVdKSkge1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChyb3V0ZXIuY29tbWl0KGluc3RydWN0aW9uLmF1eEluc3RydWN0aW9uW25hbWVdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbmV4dC50aGVuKGZ1bmN0aW9uIChfKSB7IHJldHVybiBQcm9taXNlV3JhcHBlci5hbGwocHJvbWlzZXMpOyB9KTtcclxuICAgIH07XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLl9zdGFydE5hdmlnYXRpbmcgPSBmdW5jdGlvbiAoKSB7IHRoaXMubmF2aWdhdGluZyA9IHRydWU7IH07XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLl9maW5pc2hOYXZpZ2F0aW5nID0gZnVuY3Rpb24gKCkgeyB0aGlzLm5hdmlnYXRpbmcgPSBmYWxzZTsgfTtcclxuICAgIC8qKlxyXG4gICAgICogU3Vic2NyaWJlIHRvIFVSTCB1cGRhdGVzIGZyb20gdGhlIHJvdXRlclxyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvbk5leHQsIG9uRXJyb3IpIHtcclxuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZVdyYXBwZXIuc3Vic2NyaWJlKHRoaXMuX3N1YmplY3QsIG9uTmV4dCwgb25FcnJvcik7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBjb250ZW50cyBvZiB0aGlzIHJvdXRlcidzIG91dGxldCBhbmQgYWxsIGRlc2NlbmRhbnQgb3V0bGV0c1xyXG4gICAgICovXHJcbiAgICBSb3V0ZXIucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbiAoaW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjaGlsZEluc3RydWN0aW9uID0gbnVsbDtcclxuICAgICAgICB2YXIgY29tcG9uZW50SW5zdHJ1Y3Rpb24gPSBudWxsO1xyXG4gICAgICAgIGlmIChpc1ByZXNlbnQoaW5zdHJ1Y3Rpb24pKSB7XHJcbiAgICAgICAgICAgIGNoaWxkSW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5jaGlsZDtcclxuICAgICAgICAgICAgY29tcG9uZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBuZXh0ID0gX3Jlc29sdmVUb1RydWU7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLl9jaGlsZFJvdXRlcikpIHtcclxuICAgICAgICAgICAgbmV4dCA9IHRoaXMuX2NoaWxkUm91dGVyLmRlYWN0aXZhdGUoY2hpbGRJbnN0cnVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5fb3V0bGV0KSkge1xyXG4gICAgICAgICAgICBuZXh0ID0gbmV4dC50aGVuKGZ1bmN0aW9uIChfKSB7IHJldHVybiBfdGhpcy5fb3V0bGV0LmRlYWN0aXZhdGUoY29tcG9uZW50SW5zdHJ1Y3Rpb24pOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIGF1eCByb3V0ZXNcclxuICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgVVJMLCByZXR1cm5zIGFuIGluc3RydWN0aW9uIHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGdyYXBoXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUucmVjb2duaXplID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHZhciBhbmNlc3RvckNvbXBvbmVudHMgPSB0aGlzLl9nZXRBbmNlc3Rvckluc3RydWN0aW9ucygpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LnJlY29nbml6ZSh1cmwsIGFuY2VzdG9yQ29tcG9uZW50cyk7XHJcbiAgICB9O1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5fZ2V0QW5jZXN0b3JJbnN0cnVjdGlvbnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFuY2VzdG9ySW5zdHJ1Y3Rpb25zID0gW3RoaXMuY3VycmVudEluc3RydWN0aW9uXTtcclxuICAgICAgICB2YXIgYW5jZXN0b3JSb3V0ZXIgPSB0aGlzO1xyXG4gICAgICAgIHdoaWxlIChpc1ByZXNlbnQoYW5jZXN0b3JSb3V0ZXIgPSBhbmNlc3RvclJvdXRlci5wYXJlbnQpKSB7XHJcbiAgICAgICAgICAgIGFuY2VzdG9ySW5zdHJ1Y3Rpb25zLnVuc2hpZnQoYW5jZXN0b3JSb3V0ZXIuY3VycmVudEluc3RydWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5zdHJ1Y3Rpb25zO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogTmF2aWdhdGVzIHRvIGVpdGhlciB0aGUgbGFzdCBVUkwgc3VjY2Vzc2Z1bGx5IG5hdmlnYXRlZCB0bywgb3IgdGhlIGxhc3QgVVJMIHJlcXVlc3RlZCBpZiB0aGVcclxuICAgICAqIHJvdXRlciBoYXMgeWV0IHRvIHN1Y2Nlc3NmdWxseSBuYXZpZ2F0ZS5cclxuICAgICAqL1xyXG4gICAgUm91dGVyLnByb3RvdHlwZS5yZW5hdmlnYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChpc0JsYW5rKHRoaXMubGFzdE5hdmlnYXRpb25BdHRlbXB0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudE5hdmlnYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5sYXN0TmF2aWdhdGlvbkF0dGVtcHQpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgYW4gYEluc3RydWN0aW9uYCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgUm91dGUgTGluayBEU0wuXHJcbiAgICAgKi9cclxuICAgIFJvdXRlci5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAobGlua1BhcmFtcykge1xyXG4gICAgICAgIHZhciBhbmNlc3Rvckluc3RydWN0aW9ucyA9IHRoaXMuX2dldEFuY2VzdG9ySW5zdHJ1Y3Rpb25zKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuZ2VuZXJhdGUobGlua1BhcmFtcywgYW5jZXN0b3JJbnN0cnVjdGlvbnMpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBSb3V0ZXI7XHJcbn0pKCk7XHJcbmV4cG9ydHMuUm91dGVyID0gUm91dGVyO1xyXG52YXIgUm9vdFJvdXRlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoUm9vdFJvdXRlciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIFJvb3RSb3V0ZXIocmVnaXN0cnksIGxvY2F0aW9uLCBwcmltYXJ5Q29tcG9uZW50KSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCByZWdpc3RyeSwgbnVsbCwgcHJpbWFyeUNvbXBvbmVudCk7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcztcclxuICAgICAgICB0aGlzLl9sb2NhdGlvbiA9IGxvY2F0aW9uO1xyXG4gICAgICAgIHRoaXMuX2xvY2F0aW9uU3ViID0gdGhpcy5fbG9jYXRpb24uc3Vic2NyaWJlKGZ1bmN0aW9uIChjaGFuZ2UpIHtcclxuICAgICAgICAgICAgLy8gd2UgY2FsbCByZWNvZ25pemUgb3Vyc2VsdmVzXHJcbiAgICAgICAgICAgIF90aGlzLnJlY29nbml6ZShjaGFuZ2VbJ3VybCddKS50aGVuKGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUHJlc2VudChpbnN0cnVjdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5uYXZpZ2F0ZUJ5SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24sIGlzUHJlc2VudChjaGFuZ2VbJ3BvcCddKSkudGhlbihmdW5jdGlvbiAoXykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgcG9wc3RhdGUgZXZlbnQ7IG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBVUkxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJlc2VudChjaGFuZ2VbJ3BvcCddKSAmJiBjaGFuZ2VbJ3R5cGUnXSAhPSAnaGFzaGNoYW5nZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1pdFBhdGggPSBpbnN0cnVjdGlvbi50b1VybFBhdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtaXRRdWVyeSA9IGluc3RydWN0aW9uLnRvVXJsUXVlcnkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtaXRQYXRoLmxlbmd0aCA+IDAgJiYgZW1pdFBhdGhbMF0gIT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0UGF0aCA9ICcvJyArIGVtaXRQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIG9wdGVkIHRvIHVzZSBwdXNoc3RhdGUgYW5kIHBvcFN0YXRlIEFQSXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHlvdVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbiBhcHAgdXNlcyBIYXNoTG9jYXRpb25TdHJhdGVneSBvciBQYXRoTG9jYXRpb25TdHJhdGVneS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciwgYXBwcyB0aGF0IGFyZSBtaWdyYXRpbmcgbWlnaHQgaGF2ZSBoYXNoIGxpbmtzIHRoYXQgb3BlcmF0ZSBvdXRzaWRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZ3VsYXIgdG8gd2hpY2ggcm91dGluZyBtdXN0IHJlc3BvbmQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBrbm93IHRoYXQgYWxsIGhhc2hjaGFuZ2UgZXZlbnRzIG9jY3VyIG91dHNpZGUgQW5ndWxhci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG8gc3VwcG9ydCB0aGVzZSBjYXNlcyB3aGVyZSB3ZSByZXNwb25kIHRvIGhhc2hjaGFuZ2VzIGFuZCByZWRpcmVjdCBhcyBhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc3VsdCwgd2UgbmVlZCB0byByZXBsYWNlIHRoZSB0b3AgaXRlbSBvbiB0aGUgc3RhY2suXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VbJ3R5cGUnXSA9PSAnaGFzaGNoYW5nZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi50b1Jvb3RVcmwoKSAhPSBfdGhpcy5fbG9jYXRpb24ucGF0aCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2xvY2F0aW9uLnJlcGxhY2VTdGF0ZShlbWl0UGF0aCwgZW1pdFF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9sb2NhdGlvbi5nbyhlbWl0UGF0aCwgZW1pdFF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2VtaXROYXZpZ2F0aW9uRmFpbChjaGFuZ2VbJ3VybCddKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RyeS5jb25maWdGcm9tQ29tcG9uZW50KHByaW1hcnlDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVCeVVybChsb2NhdGlvbi5wYXRoKCkpO1xyXG4gICAgfVxyXG4gICAgUm9vdFJvdXRlci5wcm90b3R5cGUuY29tbWl0ID0gZnVuY3Rpb24gKGluc3RydWN0aW9uLCBfc2tpcExvY2F0aW9uQ2hhbmdlKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoX3NraXBMb2NhdGlvbkNoYW5nZSA9PT0gdm9pZCAwKSB7IF9za2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIHZhciBlbWl0UGF0aCA9IGluc3RydWN0aW9uLnRvVXJsUGF0aCgpO1xyXG4gICAgICAgIHZhciBlbWl0UXVlcnkgPSBpbnN0cnVjdGlvbi50b1VybFF1ZXJ5KCk7XHJcbiAgICAgICAgaWYgKGVtaXRQYXRoLmxlbmd0aCA+IDAgJiYgZW1pdFBhdGhbMF0gIT0gJy8nKSB7XHJcbiAgICAgICAgICAgIGVtaXRQYXRoID0gJy8nICsgZW1pdFBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwcm9taXNlID0gX3N1cGVyLnByb3RvdHlwZS5jb21taXQuY2FsbCh0aGlzLCBpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgaWYgKCFfc2tpcExvY2F0aW9uQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKF8pIHsgX3RoaXMuX2xvY2F0aW9uLmdvKGVtaXRQYXRoLCBlbWl0UXVlcnkpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XHJcbiAgICB9O1xyXG4gICAgUm9vdFJvdXRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuX2xvY2F0aW9uU3ViKSkge1xyXG4gICAgICAgICAgICBPYnNlcnZhYmxlV3JhcHBlci5kaXNwb3NlKHRoaXMuX2xvY2F0aW9uU3ViKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9jYXRpb25TdWIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gUm9vdFJvdXRlcjtcclxufSkoUm91dGVyKTtcclxuZXhwb3J0cy5Sb290Um91dGVyID0gUm9vdFJvdXRlcjtcclxudmFyIENoaWxkUm91dGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhDaGlsZFJvdXRlciwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIENoaWxkUm91dGVyKHBhcmVudCwgaG9zdENvbXBvbmVudCkge1xyXG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIHBhcmVudC5yZWdpc3RyeSwgcGFyZW50LCBob3N0Q29tcG9uZW50LCBwYXJlbnQucm9vdCk7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB9XHJcbiAgICBDaGlsZFJvdXRlci5wcm90b3R5cGUubmF2aWdhdGVCeVVybCA9IGZ1bmN0aW9uICh1cmwsIF9za2lwTG9jYXRpb25DaGFuZ2UpIHtcclxuICAgICAgICBpZiAoX3NraXBMb2NhdGlvbkNoYW5nZSA9PT0gdm9pZCAwKSB7IF9za2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTsgfVxyXG4gICAgICAgIC8vIERlbGVnYXRlIG5hdmlnYXRpb24gdG8gdGhlIHJvb3Qgcm91dGVyXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lm5hdmlnYXRlQnlVcmwodXJsLCBfc2tpcExvY2F0aW9uQ2hhbmdlKTtcclxuICAgIH07XHJcbiAgICBDaGlsZFJvdXRlci5wcm90b3R5cGUubmF2aWdhdGVCeUluc3RydWN0aW9uID0gZnVuY3Rpb24gKGluc3RydWN0aW9uLCBfc2tpcExvY2F0aW9uQ2hhbmdlKSB7XHJcbiAgICAgICAgaWYgKF9za2lwTG9jYXRpb25DaGFuZ2UgPT09IHZvaWQgMCkgeyBfc2tpcExvY2F0aW9uQ2hhbmdlID0gZmFsc2U7IH1cclxuICAgICAgICAvLyBEZWxlZ2F0ZSBuYXZpZ2F0aW9uIHRvIHRoZSByb290IHJvdXRlclxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5uYXZpZ2F0ZUJ5SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24sIF9za2lwTG9jYXRpb25DaGFuZ2UpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBDaGlsZFJvdXRlcjtcclxufSkoUm91dGVyKTtcclxuZnVuY3Rpb24gY2FuQWN0aXZhdGVPbmUobmV4dEluc3RydWN0aW9uLCBwcmV2SW5zdHJ1Y3Rpb24pIHtcclxuICAgIHZhciBuZXh0ID0gX3Jlc29sdmVUb1RydWU7XHJcbiAgICBpZiAoaXNCbGFuayhuZXh0SW5zdHJ1Y3Rpb24uY29tcG9uZW50KSkge1xyXG4gICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgfVxyXG4gICAgaWYgKGlzUHJlc2VudChuZXh0SW5zdHJ1Y3Rpb24uY2hpbGQpKSB7XHJcbiAgICAgICAgbmV4dCA9IGNhbkFjdGl2YXRlT25lKG5leHRJbnN0cnVjdGlvbi5jaGlsZCwgaXNQcmVzZW50KHByZXZJbnN0cnVjdGlvbikgPyBwcmV2SW5zdHJ1Y3Rpb24uY2hpbGQgOiBudWxsKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0LnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dEluc3RydWN0aW9uLmNvbXBvbmVudC5yZXVzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhvb2sgPSByb3V0ZV9saWZlY3ljbGVfcmVmbGVjdG9yXzEuZ2V0Q2FuQWN0aXZhdGVIb29rKG5leHRJbnN0cnVjdGlvbi5jb21wb25lbnQuY29tcG9uZW50VHlwZSk7XHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChob29rKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaG9vayhuZXh0SW5zdHJ1Y3Rpb24uY29tcG9uZW50LCBpc1ByZXNlbnQocHJldkluc3RydWN0aW9uKSA/IHByZXZJbnN0cnVjdGlvbi5jb21wb25lbnQgOiBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50Q29uc3RydWN0b3IobmFtZSkge1xyXG4gICAgdmFyIHNlcnZpY2VOYW1lID0gbmFtZSArICdEaXJlY3RpdmUnO1xyXG4gICAgaWYgKCRpbmplY3Rvci5oYXMoc2VydmljZU5hbWUpKSB7XHJcbiAgICAgIHZhciBkZWZpbml0aW9ucyA9ICRpbmplY3Rvci5nZXQoc2VydmljZU5hbWUpO1xyXG4gICAgICBpZiAoZGVmaW5pdGlvbnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKCd0b28gbWFueSBkaXJlY3RpdmVzIG5hbWVkIFwiJyArIG5hbWUgKyAnXCInKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbnNbMF0uY29udHJvbGxlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBCYXNlRXhjZXB0aW9uKCdkaXJlY3RpdmUgXCInICsgbmFtZSArICdcIiBpcyBub3QgcmVnaXN0ZXJlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9UT0RPOiB0aGlzIGlzIGEgaGFjayB0byByZXBsYWNlIHRoZSBleGl0aW5nIGltcGxlbWVudGF0aW9uIGF0IHJ1bi10aW1lXHJcbiAgZXhwb3J0cy5nZXRDYW5BY3RpdmF0ZUhvb2sgPSBmdW5jdGlvbiAoZGlyZWN0aXZlTmFtZSkge1xyXG4gICAgdmFyIGNvbnRyb2xsZXIgPSBnZXRDb21wb25lbnRDb25zdHJ1Y3RvcihkaXJlY3RpdmVOYW1lKTtcclxuICAgIHJldHVybiBjb250cm9sbGVyLiRjYW5BY3RpdmF0ZSAmJiBmdW5jdGlvbiAobmV4dCwgcHJldikge1xyXG4gICAgICByZXR1cm4gJGluamVjdG9yLmludm9rZShjb250cm9sbGVyLiRjYW5BY3RpdmF0ZSwgbnVsbCwge1xyXG4gICAgICAgICRuZXh0SW5zdHJ1Y3Rpb246IG5leHQsXHJcbiAgICAgICAgJHByZXZJbnN0cnVjdGlvbjogcHJldlxyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gVGhpcyBoYWNrIHJlbW92ZXMgYXNzZXJ0aW9ucyBhYm91dCB0aGUgdHlwZSBvZiB0aGUgXCJjb21wb25lbnRcIlxyXG4gIC8vIHByb3BlcnR5IGluIGEgcm91dGUgY29uZmlnXHJcbiAgZXhwb3J0cy5hc3NlcnRDb21wb25lbnRFeGlzdHMgPSBmdW5jdGlvbiAoKSB7fTtcclxuXHJcbiAgYW5ndWxhci5zdHJpbmdpZnlJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xyXG4gICAgcmV0dXJuIGluc3RydWN0aW9uLnRvUm9vdFVybCgpO1xyXG4gIH07XHJcblxyXG4gIHZhciBSb3V0ZVJlZ2lzdHJ5ID0gZXhwb3J0cy5Sb3V0ZVJlZ2lzdHJ5O1xyXG4gIHZhciBSb290Um91dGVyID0gZXhwb3J0cy5Sb290Um91dGVyO1xyXG5cclxuICAvLyBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhY3R1YWxseSBnZXQgaG9sZCBvZiB0aGUgY2hpbGQgcm91dGVzXHJcbiAgUm91dGVSZWdpc3RyeS5wcm90b3R5cGUuY29uZmlnRnJvbUNvbXBvbmVudCA9IGZ1bmN0aW9uIChjb21wb25lbnQpIHtcclxuICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgIGlmIChpc1N0cmluZyhjb21wb25lbnQpKSB7XHJcbiAgICAgIC8vIERvbid0IHJlYWQgdGhlIGFubm90YXRpb25zIGNvbXBvbmVudCBhIHR5cGUgbW9yZSB0aGFuIG9uY2Ug4oCTXHJcbiAgICAgIC8vIHRoaXMgcHJldmVudHMgYW4gaW5maW5pdGUgbG9vcCBpZiBhIGNvbXBvbmVudCByb3V0ZXMgcmVjdXJzaXZlbHkuXHJcbiAgICAgIGlmICh0aGlzLl9ydWxlcy5oYXMoY29tcG9uZW50KSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB2YXIgY29udHJvbGxlciA9IGdldENvbXBvbmVudENvbnN0cnVjdG9yKGNvbXBvbmVudCk7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoY29udHJvbGxlci4kcm91dGVDb25maWcpKSB7XHJcbiAgICAgICAgY29udHJvbGxlci4kcm91dGVDb25maWcuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnKSB7XHJcbiAgICAgICAgICB2YXIgbG9hZGVyID0gY29uZmlnLmxvYWRlcjtcclxuICAgICAgICAgIGlmIChpc1ByZXNlbnQobG9hZGVyKSkge1xyXG4gICAgICAgICAgICBjb25maWcgPSBhbmd1bGFyLmV4dGVuZCh7fSwgY29uZmlnLCB7IGxvYWRlcjogJGluamVjdG9yLmludm9rZShsb2FkZXIpIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhhdC5jb25maWcoY29tcG9uZW50LCBjb25maWcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdmFyIHJlZ2lzdHJ5ID0gbmV3IFJvdXRlUmVnaXN0cnkoJHJvdXRlclJvb3RDb21wb25lbnQpO1xyXG4gIHZhciBsb2NhdGlvbiA9IG5ldyBMb2NhdGlvbigpO1xyXG5cclxuICB2YXIgcm91dGVyID0gbmV3IFJvb3RSb3V0ZXIocmVnaXN0cnksIGxvY2F0aW9uLCAkcm91dGVyUm9vdENvbXBvbmVudCk7XHJcbiAgJHJvb3RTY29wZS4kd2F0Y2goZnVuY3Rpb24gKCkgeyByZXR1cm4gJGxvY2F0aW9uLnVybCgpOyB9LCBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgaWYgKHJvdXRlci5sYXN0TmF2aWdhdGlvbkF0dGVtcHQgIT09IHBhdGgpIHtcclxuICAgICAgcm91dGVyLm5hdmlnYXRlQnlVcmwocGF0aCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJvdXRlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xyXG4gICAgJHJvb3RTY29wZS4kYnJvYWRjYXN0KCckcm91dGVDaGFuZ2VTdWNjZXNzJywge30pO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcm91dGVyO1xyXG59XHJcblxyXG59KCkpO1xyXG4iLCIvLy88cmVmZXJlbmNlIHBhdGg9XCIuL3R5cGluZ3MvYnJvd3Nlci5kLnRzXCIgLz5cclxuJ3VzZSBzdHJpY3QnXHJcblxyXG50eXBlIFByb21pc2U8VD4gPSBhbmd1bGFyLklQcm9taXNlPFQ+XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlRGVmaW5pdGlvbiB7XHJcbiAgICBwYXRoOiBzdHJpbmc7XHJcbiAgICBjb21wb25lbnQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHVzZUFzRGVmYXVsdD86Ym9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUm91dGluZ0NvbXBvbmVudCB7XHJcbiAgICAvKipcclxuICAgICAqIGNhbGxlZCB0byB0byBkZXRlcm1pbmUgd2hldGhlciBhIENvbXBvbmVudCBjYW4gYmUgcmV1c2VkIGFjcm9zcyBSb3V0ZSBEZWZpbml0aW9ucyB0aGF0IG1hdGNoIHRoZSBzYW1lIHR5cGUgb2YgQ29tcG9uZW50LCBvciB3aGV0aGVyIHRvIGRlc3Ryb3kgYW5kIGluc3RhbnRpYXRlIGEgbmV3IENvbXBvbmVudCBldmVyeSB0aW1lLlxyXG4gICAgICovXHJcbiAgICAkcm91dGVyQ2FuUmV1c2U/KG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbikgOiBuZy5JUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIGNhbGxlZCBieSB0aGUgUm91dGVyIGF0IHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsIG5hdmlnYXRpb24uIE9ubHkgb25lIG9mICRyb3V0ZXJPbkFjdGl2YXRlIGFuZCAkcm91dGVyT25SZXVzZSB3aWxsIGJlIGNhbGxlZCBkZXBlbmRpbmcgdXBvbiB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byAkcm91dGVyQ2FuUmV1c2UuXHJcbiAgICAgKi9cclxuICAgICRyb3V0ZXJPbkFjdGl2YXRlPyhuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIDogbmcuSVByb21pc2U8YW55PiB8IGFueTtcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGVkIGJ5IHRoZSBSb3V0ZXIgYXQgdGhlIGVuZCBvZiBhIHN1Y2Nlc3NmdWwgbmF2aWdhdGlvbi4gT25seSBvbmUgb2YgJHJvdXRlck9uQWN0aXZhdGUgYW5kICRyb3V0ZXJPblJldXNlIHdpbGwgYmUgY2FsbGVkIGRlcGVuZGluZyB1cG9uIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvICRyb3V0ZXJDYW5SZXVzZS5cclxuICAgICAqL1xyXG4gICAgJHJvdXRlT25SZXVzZT8obmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSA6IG5nLklQcm9taXNlPGFueT4gfCBhbnk7XHJcbiAgICAvKipcclxuICAgICAqIGNhbGxlZCBieSB0aGUgUm91dGVyIHRvIGRldGVybWluZSBpZiBhIENvbXBvbmVudCBjYW4gYmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIGEgbmF2aWdhdGlvbi5cclxuICAgICAqL1xyXG4gICAgJHJvdXRlckNhbkRlYWN0aXZhdGU/KG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbikgOiBuZy5JUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIGNhbGxlZCBieSB0aGUgUm91dGVyIGJlZm9yZSBkZXN0cm95aW5nIGEgQ29tcG9uZW50IGFzIHBhcnQgb2YgYSBuYXZpZ2F0aW9uLlxyXG4gICAgICovXHJcbiAgICAkcm91dGVyT25EZWFjdGl2YXRlPyhuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIDogbmcuSVByb21pc2U8YW55PiB8IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFJvb3RSb3V0ZXJDb21wb25lbnQobW9kdWxlOiBhbmd1bGFyLklNb2R1bGUsIHNlbGVjdG9yOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiA8VEZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24+KHRhcmdldDogVEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgbW9kdWxlLnZhbHVlKFwiJHJvdXRlclJvb3RDb21wb25lbnRcIiwgc2VsZWN0b3IpO1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUm91dGVDb25maWcoY29uZmlnOiBSb3V0ZURlZmluaXRpb25bXSk6IENsYXNzRGVjb3JhdG9yIHtcclxuICAgIHJldHVybiA8VEZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24+KHRhcmdldDogVEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgdGFyZ2V0Wyckcm91dGVDb25maWcnXSA9IGNvbmZpZztcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfTtcclxufSIsIid1c2Ugc3RyaWN0J1xyXG5pbXBvcnQgXCJhbmd1bGFyXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vYW5ndWxhcl8xX3JvdXRlclwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjsiLCJkZWNsYXJlIGdsb2JhbCB7XHJcbiAgICAvKipcclxuICAgICogSVNPIDg2MDEgZm9ybWF0dGVkIGRhdGUgdGltZSBzdHJpbmdcclxuICAgICogJ3l5eXktTU0tZGRUaGg6bW06c3NaJ1xyXG4gICAgKi9cclxuICAgIGludGVyZmFjZSBJU09EYXRlVGltZVN0cmluZyBleHRlbmRzIFN0cmluZyB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICogSVNPIDg2MDEgZm9ybWF0dGVkIGRhdGUgdGltZSBzdHJpbmdcclxuICAgICogJ3l5eXktTU0tZGQnXHJcbiAgICAqL1xyXG4gICAgaW50ZXJmYWNlIElTT0RhdGVTdHJpbmcgZXh0ZW5kcyBTdHJpbmcgeyB9XHJcblxyXG4gICAgaW50ZXJmYWNlIERhdGVDb25zdHJ1Y3RvciB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBUcmllcyB0byBwYXJzZSBhIERhdGUgZnJvbSBhIHN0cmluZywgcmV0dXJucyAnbnVsbCcgb24gZmFpbHVyZVxyXG4gICAgICAgICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlXHJcbiAgICAgICAgKi9cclxuICAgICAgICBwYXJzZU9yTnVsbChkYXRlOiBzdHJpbmcgfCBJU09EYXRlU3RyaW5nIHwgSVNPRGF0ZVRpbWVTdHJpbmcpOiBEYXRlO1xyXG5cclxuICAgICAgICBuZXcodmQ6IElTT0RhdGVTdHJpbmcpOiBEYXRlO1xyXG4gICAgICAgIG5ldyh2ZDogSVNPRGF0ZVRpbWVTdHJpbmcpOiBEYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb21wYXJlIHR3byBkYXRlcyBhbmQgcmV0dXJuIGEgbmVnYXRpdmUsIHplcm8gb3IgcG9zaXRpdmUgdmFsdWU7XHJcbiAgICAgICAgICogZWcuIG5lZ2F0aXZlOiBvdGhlciBpcyBoaWdoZXIsIHplcm86IG90aGVyIGlzIGVxdWFsLCBwb3NpdGl2ZTogdGhpcyBpcyBoaWdoZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb21wYXJlKGE6IERhdGUsIGI6IERhdGUpOiBudW1iZXI7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbXBhcmUgdHdvIGRhdGVzIGFuZCByZXR1cm5zIGlmIHRoZXkgYXJlIGVxdWFsXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZXF1YWxzKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb21wYXJlcyB0aGUgZGF0ZSBwb3J0aW9uIG9mIHR3byBkYXRlcyBhbmQgcmV0dXJucyBpZiB0aGV5IGFyZSBlcXVhbFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRhdGVFcXVhbHMoYTogRGF0ZSwgYjogRGF0ZSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGRpZmYoYTogRGF0ZSwgYjogRGF0ZSk6IHsgZGF5czogbnVtYmVyLCBob3VyczogbnVtYmVyLCBtaW51dGVzOiBudW1iZXIsIHNlY29uZHM6IG51bWJlciwgbWlsbGlzZWNvbmRzOiBudW1iZXIgfVxyXG5cclxuICAgICAgICB0b2RheSgpOiBEYXRlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgRGF0ZSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBDbG9uZSB0aGlzIERhdGUgYXMgYSBuZXcgRGF0ZSBvYmplY3RcclxuICAgICAgICAqL1xyXG4gICAgICAgIGNsb25lKCk6IERhdGU7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICogUmV0dXJucyBhIG5ldyBEYXRlIHdpdGggbiBkYXlzIGFkZGVkXHJcbiAgICAgICAgKiBAcGFyYW0gZGF5cyBUaGUgbnVtYmVyIG9mIGRheXMgdG8gYWRkXHJcbiAgICAgICAgKi9cclxuICAgICAgICBhZGREYXlzOiAoZGF5czogbnVtYmVyKSA9PiBEYXRlO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZXR1cm4gYSBJU084NjAxIGRhdGUgc3RyaW5nIFwieXl5eS1NTS1kZFwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9JU09EYXRlU3RyaW5nOiAoKSA9PiBJU09EYXRlU3RyaW5nO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZXR1cm4gYSBJU084NjAxIGRhdGUvdGltZSBzdHJpbmcgXCJ5eXl5LU1NLWRkVGhoOm1tOmRkWlwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9JU09EYXRlVGltZVN0cmluZzogKCkgPT4gSVNPRGF0ZVRpbWVTdHJpbmc7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENoZWNrcyBpZiB0aGUgZGF0ZSBpcyBpbmRlZWQgdmFsaWRcclxuICAgICAgICAgKi9cclxuICAgICAgICBpc1ZhbGlkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbXBhcmUgdGhpcyBkYXRlIHRvIGFub3RoZXIgZGF0ZSBhbmQgcmV0dXJuIGEgbmVnYXRpdmUsIHplcm8gb3IgcG9zaXRpdmUgdmFsdWU7XHJcbiAgICAgICAgICogZWcuIG5lZ2F0aXZlOiBvdGhlciBpcyBoaWdoZXIsIHplcm86IG90aGVyIGlzIGVxdWFsLCBwb3NpdGl2ZTogdGhpcyBpcyBoaWdoZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb21wYXJlKG90aGVyOiBEYXRlKTogbnVtYmVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb21wYXJlIHRoaXMgZGF0ZSB0byBhbm90aGVyIGRhdGUsIGFuZCByZXR1cm4gaWYgdGhleSBhcmUgZXF1YWxcclxuICAgICAgICAgKi9cclxuICAgICAgICBlcXVhbHMob3RoZXI6IERhdGUpOiBib29sZWFuO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb21wYXJlIHRoZSBkYXRlIHBvcnRpb24gb2YgdGhpcyAgZGF0ZSB0byBhbm90aGVyIGRhdGUsIGFuZCByZXR1cm4gaWYgdGhleSBhcmUgZXF1YWxcclxuICAgICAgICAgKi9cclxuICAgICAgICBkYXRlRXF1YWxzKG90aGVyOiBEYXRlKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2V0IHRoZSBJU08gd2Vla251bWJlclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFdlZWtOdW1iZXIoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZXR1cm5zIGEgbmV3IGRhdGUgd2l0aCB0aW1lIHNldCB0byAwMDowMDowMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldERhdGVQYXJ0KCk6IERhdGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbkRhdGUudG9kYXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gKG5ldyBEYXRlKCkpLmdldERhdGVQYXJ0KCk7XHJcbn1cclxuXHJcbkRhdGUucGFyc2VPck51bGwgPSBmdW5jdGlvbiAoZGF0ZTogc3RyaW5nIHwgSVNPRGF0ZVN0cmluZyB8IElTT0RhdGVUaW1lU3RyaW5nKSB7XHJcbiAgICBpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkIHx8IGRhdGUgPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB2YXIgZCA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgcmV0dXJuIGQuaXNWYWxpZCgpID8gZCA6IG51bGw7XHJcbn1cclxuXHJcbkRhdGUuY29tcGFyZSA9IGZ1bmN0aW9uIChhOiBEYXRlLCBiOiBEYXRlKSB7XHJcbiAgICBpZiAoIWEgJiYgIWIpXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICBpZiAoIWEgJiYgYilcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIGlmIChhICYmICFiKVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIHJldHVybiBhLmdldFRpbWUoKSAtIGIuZ2V0VGltZSgpO1xyXG59XHJcblxyXG5EYXRlLmRpZmYgPSBmdW5jdGlvbiAoYTogRGF0ZSwgYjogRGF0ZSkge1xyXG4gICAgaWYgKCFhKVxyXG4gICAgICAgIHRocm93IFwiRGF0ZSBhIGNhbm5vdCBiZSBudWxsXCI7XHJcbiAgICBpZiAoIWIpXHJcbiAgICAgICAgdGhyb3cgXCJEYXRlIGIgY2Fubm90IGJlIG51bGxcIjtcclxuICAgIHZhciBhbSA9IGEuZ2V0VGltZSgpO1xyXG4gICAgdmFyIGJtID0gYi5nZXRUaW1lKCk7XHJcbiAgICB2YXIgbXMgPSBibSAtIGFtO1xyXG4gICAgdmFyIHMgPSBNYXRoLnJvdW5kKG1zIC8gMTAwMCk7XHJcbiAgICB2YXIgbSA9IE1hdGgucm91bmQocyAvIDYwKTtcclxuICAgIHZhciBoID0gTWF0aC5yb3VuZChtIC8gNjApO1xyXG4gICAgdmFyIGQgPSBNYXRoLnJvdW5kKGggLyAyNCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRheXM6IGQsXHJcbiAgICAgICAgaG91cnM6IGgsXHJcbiAgICAgICAgbWludXRlczogbSxcclxuICAgICAgICBzZWNvbmRzOiBzLFxyXG4gICAgICAgIG1pbGxpc2Vjb25kczogbXNcclxuICAgIH1cclxufVxyXG5cclxuRGF0ZS5lcXVhbHMgPSBmdW5jdGlvbiAoYTogRGF0ZSwgYjogRGF0ZSkge1xyXG4gICAgcmV0dXJuIChhID09IG51bGwgJiYgYiA9PSBudWxsKSB8fCAoYSAhPSBudWxsICYmIGEuY29tcGFyZShiKSA9PT0gMCkgfHwgKGIgIT0gbnVsbCAmJiBiLmNvbXBhcmUoYSkgPT09IDApO1xyXG59XHJcblxyXG5EYXRlLmRhdGVFcXVhbHMgPSBmdW5jdGlvbiAoYTogRGF0ZSwgYjogRGF0ZSkge1xyXG4gICAgcmV0dXJuIERhdGUuZXF1YWxzKGEgPyBhLmdldERhdGVQYXJ0KCkgOiBudWxsLCBiID8gYi5nZXREYXRlUGFydCgpIDogbnVsbCk7XHJcbn1cclxuXHJcbkRhdGUucHJvdG90eXBlLmdldERhdGVQYXJ0ID0gZnVuY3Rpb24gKHRoaXM6IERhdGUpIHtcclxuICAgIHZhciBkID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgZC5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIHJldHVybiBkO1xyXG59XHJcblxyXG5EYXRlLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKHRoaXM6IERhdGUsIG90aGVyOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5jb21wYXJlKHRoaXMsIG90aGVyKTtcclxufVxyXG5cclxuRGF0ZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKHRoaXM6IERhdGUsIG90aGVyOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5lcXVhbHModGhpcywgb3RoZXIpO1xyXG59XHJcblxyXG5EYXRlLnByb3RvdHlwZS5kYXRlRXF1YWxzID0gZnVuY3Rpb24gKHRoaXM6IERhdGUsIG90aGVyOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5kYXRlRXF1YWxzKHRoaXMsIG90aGVyKTtcclxufVxyXG5cclxuRGF0ZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAodGhpczogRGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0VGltZSgpKTtcclxufVxyXG5cclxuRGF0ZS5wcm90b3R5cGUuYWRkRGF5cyA9IGZ1bmN0aW9uICh0aGlzOiBEYXRlLCBkYXlzOiBudW1iZXIpIHtcclxuICAgIHZhciBkYXRlID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XHJcbiAgICByZXR1cm4gZGF0ZTtcclxufVxyXG5cclxuRGF0ZS5wcm90b3R5cGUudG9JU09EYXRlU3RyaW5nID0gZnVuY3Rpb24gKHRoaXM6IERhdGUpIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmdldEZ1bGxZZWFyKCl9LSR7KHRoaXMuZ2V0TW9udGgoKSArIDEwMSkudG9TdHJpbmcoKS5zdWJzdHIoMSl9LSR7KHRoaXMuZ2V0RGF0ZSgpICsgMTAwKS50b1N0cmluZygpLnN1YnN0cigxKX1gO1xyXG59XHJcblxyXG5EYXRlLnByb3RvdHlwZS50b0lTT0RhdGVUaW1lU3RyaW5nID0gZnVuY3Rpb24gKHRoaXM6IERhdGUpIHtcclxuICAgIHJldHVybiB0aGlzLnRvSVNPU3RyaW5nKCk7XHJcbn1cclxuXHJcbkRhdGUucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbiAodGhpczogRGF0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKSAhPSBcIkludmFsaWQgRGF0ZVwiO1xyXG59XHJcblxyXG5EYXRlLnByb3RvdHlwZS5nZXRXZWVrTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGQgPSBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLmdldEZ1bGxZZWFyKCksIHRoaXMuZ2V0TW9udGgoKSwgdGhpcy5nZXREYXRlKCkpKTtcclxuICAgIHZhciBkYXlOdW0gPSBkLmdldFVUQ0RheSgpIHx8IDc7XHJcbiAgICBkLnNldFVUQ0RhdGUoZC5nZXRVVENEYXRlKCkgKyA0IC0gZGF5TnVtKTtcclxuICAgIHZhciB5ZWFyU3RhcnQgPSBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKTtcclxuICAgIHJldHVybiBNYXRoLmNlaWwoKCgoPGFueT5kIC0gPGFueT55ZWFyU3RhcnQpIC8gODY0MDAwMDApICsgMSkgLyA3KTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgbW9kdWxlIERhdGVUaW1lIHtcclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSB0aW1lIGZvcm1hdHRlciBzdHJpbmcgKEhIOm1tOnNzPykgYW5kIHNldHMgaXQgb24gYSBkYXRlIG9iamVjdDtcclxuICAgICAqIElmIG5vIGJhc2VEYXRlIGlzIHN1cHBsaWVkLCB0b2RheSBpcyB1c2VkXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgdGltZSBzdHJpbmdcclxuICAgICAqIEBwYXJhbSBiYXNlRGF0ZSBvcHRpb25hbCBkYXRlIHRvIHNldCB0aW1lIG9uLlxyXG4gICAgICovXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gVGltZVRvRGF0ZVRpbWUodmFsdWU6IHN0cmluZywgYmFzZURhdGU/OiBEYXRlKSB7XHJcbiAgICAgICAgdmFyIG0gPSB2YWx1ZS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgdmFyIGRhdGUgPSAoYmFzZURhdGUgfHwgbmV3IERhdGUoKSkuY2xvbmUoKTtcclxuICAgICAgICBkYXRlLnNldEhvdXJzKHBhcnNlSW50KG1bMF0pKTtcclxuICAgICAgICBkYXRlLnNldE1pbnV0ZXMocGFyc2VJbnQobVsxXSkpO1xyXG4gICAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBmdW5jdGlvbiBNZW1vaXplKCk6IE1ldGhvZERlY29yYXRvciB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVtb2l6ZURlY29yYXRvcih0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCxcclxuICAgICAgICBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+IHwgdm9pZCB7XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IgfHwgIXByb3BlcnR5RGVzY3JpcHRvci5nZXQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGZpZWxkTmFtZSA9IGBfJHtwcm9wZXJ0eUtleX0ubWVtb2l6ZWRgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tmaWVsZE5hbWVdID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tmaWVsZE5hbWVdID0gcHJvcGVydHlEZXNjcmlwdG9yLmdldC5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldDogcHJvcGVydHlEZXNjcmlwdG9yLnNldCA/IGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2ZpZWxkTmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eURlc2NyaXB0b3Iuc2V0LmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICB9IDogZnVuY3Rpb24gKF8pIHtcclxuICAgICAgICAgICAgICAgIHRoaXNbZmllbGROYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2NhbFN0b3JhZ2Uoc3RvcmFnZUtleTogc3RyaW5nLCBiYWNraW5nZmllbGRuYW1lPzogc3RyaW5nKTogTWV0aG9kRGVjb3JhdG9yIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBsb2NhbFN0b3JhZ2VEZWNvcmF0b3IodGFyZ2V0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLFxyXG4gICAgICAgIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4gfCB2b2lkIHtcclxuICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvciB8fCAhcHJvcGVydHlEZXNjcmlwdG9yLmdldClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHZhciBjYWNoZWQgPSBsb2NhbFN0b3JhZ2Vbc3RvcmFnZUtleV07XHJcbiAgICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChiYWNraW5nZmllbGRuYW1lKVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W2JhY2tpbmdmaWVsZG5hbWVdID0gSlNPTi5wYXJzZShjYWNoZWQpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eURlc2NyaXB0b3Iuc2V0KVxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlEZXNjcmlwdG9yLnNldC5jYWxsKHRhcmdldCwgSlNPTi5wYXJzZShjYWNoZWQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYWNoZVZhbHVlID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShzdG9yYWdlS2V5KTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdDogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55PiA9IHtcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eURlc2NyaXB0b3IuZ2V0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBjYWNoZVZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHByb3BlcnR5RGVzY3JpcHRvci5zZXQpXHJcbiAgICAgICAgICAgIHJlc3VsdC5zZXQgPSBmdW5jdGlvbiAodmFsdWU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVWYWx1ZSh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5RGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IG1vZHVsZSBVdGlscyB7XHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybXMgYSBzaW5nbGUgbGV2ZWwgSnNvbiBkYXRhc2V0IHRvIGEgcXVlcnkgcGFyYW1ldGVyIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIGRhdGEgU2luZ2xlIGxldmVsIEpzb24gZGF0YXNldCB0byBjb252ZXJ0XHJcbiAgICAgKi9cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBUcmFuc2Zvcm1Kc29uVG9Gb3JtRGF0YShkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XHJcbiAgICAgICAgdmFyIGRiOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuaGFzT3duUHJvcGVydHkocHJvcCkpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgZGIucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRhdGFbcHJvcF0pfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYi5qb2luKFwiJlwiKS5yZXBsYWNlKC8lMjAvZywgXCIrXCIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdHlwZSBQIG9uIGEgZ2l2ZW4gb2JqZWN0IGFuZCBhcHBseSBhIGZ1bmN0aW9uIHRvIGVhY2hcclxuICAgICAqIEBwYXJhbSAge2FueX0gb2JqZWN0IHRhcmdldCBvYmplY3RcclxuICAgICAqIEBwYXJhbSAgeyhwcm9wZXJ0eTpQLCBrZXk6c3RyaW5nKSA9PiB2b2lkIH0gYXBwbHkgZnVuY3Rpb24gdG8gYXBwbHlcclxuICAgICAqIEBwYXJhbSAgeyhwcm9wZXJ0eTpQLCBrZXk6c3RyaW5nKSA9PiBib29sZWFuID0gXyA9PiB0cnVlfSBmaWx0ZXIgb3B0aW9uYWwgZmlsdGVyIGZ1bmN0aW9uLCByZXR1cm4gZmFsc2UgdG8gZXhjbHVkZSBwcm9wZXJ0eVxyXG4gICAgICovXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gZm9yRWFjaFByb3BlcnR5PFA+KG9iamVjdDogYW55LCBhcHBseTogKHByb3BlcnR5OiBQLCBrZXk6IHN0cmluZykgPT4gdm9pZCwgZmlsdGVyOiAocHJvcGVydHk6IFAsIGtleTogc3RyaW5nKSA9PiBib29sZWFuID0gXyA9PiB0cnVlKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcDogUCA9IG9iamVjdFtrZXldO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyKHByb3AsIGtleSkpXHJcbiAgICAgICAgICAgICAgICBhcHBseShwcm9wLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gZm9yRWFjaEtleTxUPihkaWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgYXBwbHk6IChwcm9wZXJ0eTogVCwga2V5OiBzdHJpbmcpID0+IHZvaWQsIGZpbHRlcjogKHByb3BlcnR5OiBULCBrZXk6IHN0cmluZykgPT4gYm9vbGVhbiA9IF8gPT4gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiBmb3JFYWNoUHJvcGVydHkoZGljdCwgYXBwbHksIGZpbHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYWZlbHkgZ2V0IHRoZSB2YWx1ZSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSwgb3IgJ3VuZGVmaW5lZCcgb24gZXJyb3JcclxuICAgICAqIEBwYXJhbSBvYmplY3QgdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gZ2V0dGVyIHByb3BlcnR5IGFjY2Vzc2VyXHJcbiAgICAgKi9cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlPFQsIFY+KG9iamVjdDogVCwgZ2V0dGVyOiAob2JqZWN0OiBUKSA9PiBWKTogViB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldHRlcihvYmplY3QpO1xyXG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG4vLy9HZW5lcmljIGV4dGVuc2lvbnNcclxuaWYgKCEoPGFueT5TdHJpbmcucHJvdG90eXBlKS5zdGFydHNXaXRoKSB7XHJcbiAgICAoPGFueT5TdHJpbmcucHJvdG90eXBlKS5zdGFydHNXaXRoID0gZnVuY3Rpb24gc3RhcnRzV2l0aCh0aGlzOiBTdHJpbmcsIHNlYXJjaFN0cmluZzogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiB8fCAwO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YnN0cihwb3NpdGlvbiwgc2VhcmNoU3RyaW5nLmxlbmd0aCkgPT09IHNlYXJjaFN0cmluZztcclxuICAgIH07XHJcbn0iLCJleHBvcnQgKiBmcm9tIFwiLi9nZW5lcmFsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGV0aW1lXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2tleWNvZGVzXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vd2ViXCI7XHJcblxyXG5pbXBvcnQgXCIuL251bWJlclwiOyIsImV4cG9ydCBjbGFzcyBLZXlDb2RlcyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJhY2tzcGFjZSA9IDg7XHJcbiAgICBwdWJsaWMgc3RhdGljIHRhYiA9IDk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNsZWFyID0gMTI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVudGVyID0gMTM7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNoaWZ0ID0gMTY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGN0cmwgPSAxNztcclxuICAgIHB1YmxpYyBzdGF0aWMgYWx0ID0gMTg7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBhdXNlID0gMTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJyZWFrID0gMTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNhcHNMb2NrID0gMjA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVzY2FwZSA9IDI3O1xyXG4gICAgcHVibGljIHN0YXRpYyBzcGFjZSA9IDMyO1xyXG4gICAgcHVibGljIHN0YXRpYyBwYWdlVXAgPSAzMztcclxuICAgIHB1YmxpYyBzdGF0aWMgcGFnZURvd24gPSAzNDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZW5kID0gMzU7XHJcbiAgICBwdWJsaWMgc3RhdGljIGhvbWUgPSAzNjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbGVmdEFycm93ID0gMzc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHVwQXJyb3cgPSAzODtcclxuICAgIHB1YmxpYyBzdGF0aWMgcmlnaHRBcnJvdyA9IDM5O1xyXG4gICAgcHVibGljIHN0YXRpYyBkb3duQXJyb3cgPSA0MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0ID0gNDE7XHJcbiAgICBwdWJsaWMgc3RhdGljIHByaW50U2NyZWVuID0gNDI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGluc2VydCA9IDQ1O1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWxldGUgPSA0NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjAgPSA0ODtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjEgPSA0OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjIgPSA1MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjMgPSA1MTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjQgPSA1MjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjUgPSA1MztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjYgPSA1NDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjcgPSA1NTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjggPSA1NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbjkgPSA1NztcclxuICAgIHB1YmxpYyBzdGF0aWMgYSA9IDY1O1xyXG4gICAgcHVibGljIHN0YXRpYyBiID0gNjY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGMgPSA2NztcclxuICAgIHB1YmxpYyBzdGF0aWMgZCA9IDY4O1xyXG4gICAgcHVibGljIHN0YXRpYyBlID0gNjk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGYgPSA3MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZyA9IDcxO1xyXG4gICAgcHVibGljIHN0YXRpYyBoID0gNzI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGkgPSA3MztcclxuICAgIHB1YmxpYyBzdGF0aWMgaiA9IDc0O1xyXG4gICAgcHVibGljIHN0YXRpYyBrID0gNzU7XHJcbiAgICBwdWJsaWMgc3RhdGljIGwgPSA3NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbSA9IDc3O1xyXG4gICAgcHVibGljIHN0YXRpYyBuID0gNzg7XHJcbiAgICBwdWJsaWMgc3RhdGljIG8gPSA3OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgcCA9IDgwO1xyXG4gICAgcHVibGljIHN0YXRpYyBxID0gODE7XHJcbiAgICBwdWJsaWMgc3RhdGljIHIgPSA4MjtcclxuICAgIHB1YmxpYyBzdGF0aWMgcyA9IDgzO1xyXG4gICAgcHVibGljIHN0YXRpYyB0ID0gODQ7XHJcbiAgICBwdWJsaWMgc3RhdGljIHUgPSA4NTtcclxuICAgIHB1YmxpYyBzdGF0aWMgdiA9IDg2O1xyXG4gICAgcHVibGljIHN0YXRpYyB3ID0gODc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHggPSA4ODtcclxuICAgIHB1YmxpYyBzdGF0aWMgeSA9IDg5O1xyXG4gICAgcHVibGljIHN0YXRpYyB6ID0gOTA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGxlZnRXaW5kb3dLZXkgPSA5MTtcclxuICAgIHB1YmxpYyBzdGF0aWMgcmlnaHRXaW5kb3dLZXkgPSA5MjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0S2V5ID0gOTM7XHJcbiAgICBwdWJsaWMgc3RhdGljIG51bXBhZDAgPSA5NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkMSA9IDk3O1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQyID0gOTg7XHJcbiAgICBwdWJsaWMgc3RhdGljIG51bXBhZDMgPSA5OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkNCA9IDEwMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkNSA9IDEwMTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkNiA9IDEwMjtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkNyA9IDEwMztcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkOCA9IDEwNDtcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtcGFkOSA9IDEwNTtcclxuICAgIHB1YmxpYyBzdGF0aWMgbXVsdGlwbHkgPSAxMDY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGFkZCA9IDEwNztcclxuICAgIHB1YmxpYyBzdGF0aWMgc3VidHJhY3QgPSAxMDk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRlY2ltYWxQb2ludCA9IDExMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZGl2aWRlID0gMTExO1xyXG4gICAgcHVibGljIHN0YXRpYyBmMSA9IDExMjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZjIgPSAxMTM7XHJcbiAgICBwdWJsaWMgc3RhdGljIGYzID0gMTE0O1xyXG4gICAgcHVibGljIHN0YXRpYyBmNCA9IDExNTtcclxuICAgIHB1YmxpYyBzdGF0aWMgZjUgPSAxMTY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGY2ID0gMTE3O1xyXG4gICAgcHVibGljIHN0YXRpYyBmNyA9IDExODtcclxuICAgIHB1YmxpYyBzdGF0aWMgZjggPSAxMTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGY5ID0gMTIwO1xyXG4gICAgcHVibGljIHN0YXRpYyBmMTAgPSAxMjE7XHJcbiAgICBwdWJsaWMgc3RhdGljIGYxMSA9IDEyMjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZjEyID0gMTIzO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1Mb2NrID0gMTQ0O1xyXG4gICAgcHVibGljIHN0YXRpYyBzY3JvbGxMb2NrID0gMTQ1O1xyXG4gICAgcHVibGljIHN0YXRpYyBzZW1pQ29sb24gPSAxODY7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVxdWFsU2lnbiA9IDE4NztcclxuICAgIHB1YmxpYyBzdGF0aWMgY29tbWEgPSAxODg7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRhc2ggPSAxODk7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBlcmlvZCA9IDE5MDtcclxuICAgIHB1YmxpYyBzdGF0aWMgZm9yd2FyZFNsYXNoID0gMTkxO1xyXG4gICAgcHVibGljIHN0YXRpYyBncmF2ZUFjY2VudCA9IDE5MjtcclxuICAgIHB1YmxpYyBzdGF0aWMgb3BlbkJyYWNrZXQgPSAyMTk7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJhY2tTbGFzaCA9IDIyMDtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2luZ2xlUXVvdGUgPSAyMjI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNsb3NlQnJha2V0ID0gMjIxO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1lcmljID0gW1xyXG4gICAgICAgIEtleUNvZGVzLm4wLFxyXG4gICAgICAgIEtleUNvZGVzLm4xLFxyXG4gICAgICAgIEtleUNvZGVzLm4yLFxyXG4gICAgICAgIEtleUNvZGVzLm4zLFxyXG4gICAgICAgIEtleUNvZGVzLm40LFxyXG4gICAgICAgIEtleUNvZGVzLm41LFxyXG4gICAgICAgIEtleUNvZGVzLm42LFxyXG4gICAgICAgIEtleUNvZGVzLm43LFxyXG4gICAgICAgIEtleUNvZGVzLm44LFxyXG4gICAgICAgIEtleUNvZGVzLm45LFxyXG4gICAgICAgIEtleUNvZGVzLm51bXBhZDAsXHJcbiAgICAgICAgS2V5Q29kZXMubnVtcGFkMSxcclxuICAgICAgICBLZXlDb2Rlcy5udW1wYWQyLFxyXG4gICAgICAgIEtleUNvZGVzLm51bXBhZDMsXHJcbiAgICAgICAgS2V5Q29kZXMubnVtcGFkNCxcclxuICAgICAgICBLZXlDb2Rlcy5udW1wYWQ1LFxyXG4gICAgICAgIEtleUNvZGVzLm51bXBhZDYsXHJcbiAgICAgICAgS2V5Q29kZXMubnVtcGFkNyxcclxuICAgICAgICBLZXlDb2Rlcy5udW1wYWQ4LFxyXG4gICAgICAgIEtleUNvZGVzLm51bXBhZDksXHJcbiAgICBdO1xyXG4gICAgcHVibGljIHN0YXRpYyBhbHBoYSA9IFtcclxuICAgICAgICBLZXlDb2Rlcy5hLFxyXG4gICAgICAgIEtleUNvZGVzLmIsXHJcbiAgICAgICAgS2V5Q29kZXMuYyxcclxuICAgICAgICBLZXlDb2Rlcy5kLFxyXG4gICAgICAgIEtleUNvZGVzLmUsXHJcbiAgICAgICAgS2V5Q29kZXMuZixcclxuICAgICAgICBLZXlDb2Rlcy5nLFxyXG4gICAgICAgIEtleUNvZGVzLmgsXHJcbiAgICAgICAgS2V5Q29kZXMuaSxcclxuICAgICAgICBLZXlDb2Rlcy5qLFxyXG4gICAgICAgIEtleUNvZGVzLmssXHJcbiAgICAgICAgS2V5Q29kZXMubCxcclxuICAgICAgICBLZXlDb2Rlcy5tLFxyXG4gICAgICAgIEtleUNvZGVzLm4sXHJcbiAgICAgICAgS2V5Q29kZXMubyxcclxuICAgICAgICBLZXlDb2Rlcy5wLFxyXG4gICAgICAgIEtleUNvZGVzLnEsXHJcbiAgICAgICAgS2V5Q29kZXMucixcclxuICAgICAgICBLZXlDb2Rlcy5zLFxyXG4gICAgICAgIEtleUNvZGVzLnQsXHJcbiAgICAgICAgS2V5Q29kZXMudSxcclxuICAgICAgICBLZXlDb2Rlcy52LFxyXG4gICAgICAgIEtleUNvZGVzLncsXHJcbiAgICAgICAgS2V5Q29kZXMueCxcclxuICAgICAgICBLZXlDb2Rlcy55LFxyXG4gICAgICAgIEtleUNvZGVzLnosXHJcbiAgICBdO1xyXG4gICAgcHVibGljIHN0YXRpYyBGa2V5cyA9XHJcbiAgICBbXHJcbiAgICAgICAgS2V5Q29kZXMuZjEsXHJcbiAgICAgICAgS2V5Q29kZXMuZjIsXHJcbiAgICAgICAgS2V5Q29kZXMuZjMsXHJcbiAgICAgICAgS2V5Q29kZXMuZjQsXHJcbiAgICAgICAgS2V5Q29kZXMuZjUsXHJcbiAgICAgICAgS2V5Q29kZXMuZjYsXHJcbiAgICAgICAgS2V5Q29kZXMuZjcsXHJcbiAgICAgICAgS2V5Q29kZXMuZjgsXHJcbiAgICAgICAgS2V5Q29kZXMuZjksXHJcbiAgICAgICAgS2V5Q29kZXMuZjEwLFxyXG4gICAgICAgIEtleUNvZGVzLmYxMSxcclxuICAgICAgICBLZXlDb2Rlcy5mMTIsXHJcbiAgICBdO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBLZXlib2FyZEV2ZW50Q29kZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJhY2tzcGFjZSA9ICdCYWNrc3BhY2UnO1xyXG4gICAgcHVibGljIHN0YXRpYyB0YWIgPSAnVGFiJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY2xlYXIgPSAnTnVtcGFkQ2xlYXInO1xyXG4gICAgcHVibGljIHN0YXRpYyBlbnRlciA9ICdFbnRlcic7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNoaWZ0TGVmdCA9ICdTaGlmdExlZnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBzaGlmdFJpZ2h0ID0gJ1NoaWZ0UmlnaHQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBjdHJsTGVmdCA9ICdDb250cm9sTGVmdCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGN0cmxSaWdodCA9ICdDb250cm9sUmlnaHQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhbHRMZWZ0ID0gJ0FsdExlZnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBhbHRSaWdodCA9ICdBbHRSaWdodCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBhdXNlID0gJ1BhdXNlJztcclxuICAgIHB1YmxpYyBzdGF0aWMgYnJlYWsgPSAnQnJlYWsnO1xyXG4gICAgcHVibGljIHN0YXRpYyBjYXBzTG9jayA9ICdDYXBzTG9jayc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVzY2FwZSA9ICdFc2NhcGUnO1xyXG4gICAgcHVibGljIHN0YXRpYyBzcGFjZSA9ICdTcGFjZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHBhZ2VVcCA9ICdQYWdlVXAnO1xyXG4gICAgcHVibGljIHN0YXRpYyBwYWdlRG93biA9ICdQYWdlRG93bic7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVuZCA9ICdFbmQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBob21lID0gJ0hvbWUnO1xyXG4gICAgcHVibGljIHN0YXRpYyBsZWZ0QXJyb3cgPSAnQXJyb3dMZWZ0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgdXBBcnJvdyA9ICdBcnJvd1VwJztcclxuICAgIHB1YmxpYyBzdGF0aWMgcmlnaHRBcnJvdyA9ICdBcnJvd1JpZ2h0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgZG93bkFycm93ID0gJ0Fycm9yRG93bic7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdCA9ICdTZWxlY3QnO1xyXG4gICAgcHVibGljIHN0YXRpYyBwcmludFNjcmVlbiA9ICdQcmludFNjcmVlbic7XHJcbiAgICBwdWJsaWMgc3RhdGljIGluc2VydCA9ICdJbnNlcnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWxldGUgPSAnRGVsZXRlJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjAgPSAnRGlnaXQwJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjEgPSAnRGlnaXQxJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjIgPSAnRGlnaXQyJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjMgPSAnRGlnaXQzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjQgPSAnRGlnaXQ0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjUgPSAnRGlnaXQ1JztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjYgPSAnRGlnaXQ2JztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjcgPSAnRGlnaXQ3JztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjggPSAnRGlnaXQ4JztcclxuICAgIHB1YmxpYyBzdGF0aWMgbjkgPSAnRGlnaXQ5JztcclxuICAgIHB1YmxpYyBzdGF0aWMgYSA9ICdLZXlBJztcclxuICAgIHB1YmxpYyBzdGF0aWMgYiA9ICdLZXlCJztcclxuICAgIHB1YmxpYyBzdGF0aWMgYyA9ICdLZXlDJztcclxuICAgIHB1YmxpYyBzdGF0aWMgZCA9ICdLZXlEJztcclxuICAgIHB1YmxpYyBzdGF0aWMgZSA9ICdLZXlFJztcclxuICAgIHB1YmxpYyBzdGF0aWMgZiA9ICdLZXlGJztcclxuICAgIHB1YmxpYyBzdGF0aWMgZyA9ICdLZXlHJztcclxuICAgIHB1YmxpYyBzdGF0aWMgaCA9ICdLZXlIJztcclxuICAgIHB1YmxpYyBzdGF0aWMgaSA9ICdLZXlJJztcclxuICAgIHB1YmxpYyBzdGF0aWMgaiA9ICdLZXlKJztcclxuICAgIHB1YmxpYyBzdGF0aWMgayA9ICdLZXlLJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbCA9ICdLZXlMJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbSA9ICdLZXlNJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbiA9ICdLZXlOJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbyA9ICdLZXlPJztcclxuICAgIHB1YmxpYyBzdGF0aWMgcCA9ICdLZXlQJztcclxuICAgIHB1YmxpYyBzdGF0aWMgcSA9ICdLZXlRJztcclxuICAgIHB1YmxpYyBzdGF0aWMgciA9ICdLZXlSJztcclxuICAgIHB1YmxpYyBzdGF0aWMgcyA9ICdLZXlTJztcclxuICAgIHB1YmxpYyBzdGF0aWMgdCA9ICdLZXlUJztcclxuICAgIHB1YmxpYyBzdGF0aWMgdSA9ICdLZXlVJztcclxuICAgIHB1YmxpYyBzdGF0aWMgdiA9ICdLZXlWJztcclxuICAgIHB1YmxpYyBzdGF0aWMgdyA9ICdLZXlXJztcclxuICAgIHB1YmxpYyBzdGF0aWMgeCA9ICdLZXlYJztcclxuICAgIHB1YmxpYyBzdGF0aWMgeSA9ICdLZXlZJztcclxuICAgIHB1YmxpYyBzdGF0aWMgeiA9ICdLZXlaJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbGVmdE1ldGFLZXkgPSAnTWV0YUxlZnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyByaWdodE1ldGFLZXkgPSAnTWV0YVJpZ2h0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgbGVmdE9TS2V5ID0gJ09TTGVmdCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJpZ2h0T1NLZXkgPSAnT1NSaWdodCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdEtleSA9ICdTZWxlY3QnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQwID0gJ051bXBhZDAnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQxID0gJ051bXBhZDEnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQyID0gJ051bXBhZDInO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQzID0gJ051bXBhZDMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQ0ID0gJ051bXBhZDQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQ1ID0gJ051bXBhZDUnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQ2ID0gJ051bXBhZDYnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQ3ID0gJ051bXBhZDcnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQ4ID0gJ051bXBhZDgnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1wYWQ5ID0gJ051bXBhZDknO1xyXG4gICAgcHVibGljIHN0YXRpYyBzdGFyID0gJ051bXBhZFN0YXInXHJcbiAgICBwdWJsaWMgc3RhdGljIG11bHRpcGx5ID0gJ051bXBhZE11bHRpcGx5JztcclxuICAgIHB1YmxpYyBzdGF0aWMgYWRkID0gJ051bXBhZEFkZCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIHN1YnRyYWN0ID0gJ051bXBhZFN1YnRyYWN0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgZGVjaW1hbFBvaW50ID0gJ051bXBhZERlY2ltYWwnO1xyXG4gICAgcHVibGljIHN0YXRpYyBkaXZpZGUgPSAnTnVtcGFkRGl2aWRlJztcclxuICAgIHB1YmxpYyBzdGF0aWMgZjEgPSAnRjEnO1xyXG4gICAgcHVibGljIHN0YXRpYyBmMiA9ICdGMic7XHJcbiAgICBwdWJsaWMgc3RhdGljIGYzID0gJ0YzJztcclxuICAgIHB1YmxpYyBzdGF0aWMgZjQgPSAnRjQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBmNSA9ICdGNSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGY2ID0gJ0Y2JztcclxuICAgIHB1YmxpYyBzdGF0aWMgZjcgPSAnRjcnO1xyXG4gICAgcHVibGljIHN0YXRpYyBmOCA9ICdGOCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGY5ID0gJ0Y5JztcclxuICAgIHB1YmxpYyBzdGF0aWMgZjEwID0gJ0YxMCc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGYxMSA9ICdGMTEnO1xyXG4gICAgcHVibGljIHN0YXRpYyBmMTIgPSAnRjEyJztcclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtTG9jayA9ICdOdW1Mb2NrJztcclxuICAgIHB1YmxpYyBzdGF0aWMgc2Nyb2xsTG9jayA9ICdTY3JvbGxMb2NrJztcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VtaUNvbG9uID0gJ1NlbWlDb2xvbic7XHJcbiAgICBwdWJsaWMgc3RhdGljIGVxdWFsU2lnbiA9ICdFcXVhbHMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBjb21tYSA9ICdDb21tYSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGRhc2ggPSAnTWludXMnO1xyXG4gICAgcHVibGljIHN0YXRpYyBwZXJpb2QgPSAnUGVyaW9kJztcclxuICAgIHB1YmxpYyBzdGF0aWMgZm9yd2FyZFNsYXNoID0gJ1NsYXNoJztcclxuICAgIHB1YmxpYyBzdGF0aWMgZ3JhdmVBY2NlbnQgPSAnQmFja1F1b3RlJztcclxuICAgIHB1YmxpYyBzdGF0aWMgb3BlbkJyYWNrZXQgPSAnQnJhY2tldExlZnQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBiYWNrU2xhc2ggPSAnQmFja3NsYXNoJztcclxuICAgIHB1YmxpYyBzdGF0aWMgc2luZ2xlUXVvdGUgPSAnUXVvdGUnO1xyXG4gICAgcHVibGljIHN0YXRpYyBjbG9zZUJyYWtldCA9ICdCcmFja2V0UmlnaHQnO1xyXG4gICAgcHVibGljIHN0YXRpYyBudW1lcmljID0gW1xyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm4wLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm4xLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm4yLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm4zLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm40LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm41LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm42LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm43LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm44LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm45LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDAsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUubnVtcGFkMSxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5udW1wYWQyLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDMsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUubnVtcGFkNCxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5udW1wYWQ1LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDYsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUubnVtcGFkNyxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5udW1wYWQ4LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDksXHJcbiAgICBdO1xyXG4gICAgcHVibGljIHN0YXRpYyBhbHBoYSA9IFtcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5hLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLmIsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuYyxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5kLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLmUsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZixcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5nLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLmgsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuaSxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5qLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLmssXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUubCxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5tLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLm4sXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUubyxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5wLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLnEsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUucixcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5zLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLnQsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUudSxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS52LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLncsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUueCxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS55LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLnosXHJcbiAgICBdO1xyXG4gICAgcHVibGljIHN0YXRpYyBzaGlmdEtleXMgPSBbXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuc2hpZnRMZWZ0LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLnNoaWZ0UmlnaHRcclxuICAgIF07XHJcbiAgICBwdWJsaWMgc3RhdGljIGN0cmxLZXlzID0gW1xyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLmN0cmxMZWZ0LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLmN0cmxSaWdodFxyXG4gICAgXTtcclxuICAgIHB1YmxpYyBzdGF0aWMgYWx0S2V5cyA9IFtcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5hbHRMZWZ0LFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLmFsdFJpZ2h0XHJcbiAgICBdO1xyXG4gICAgcHVibGljIHN0YXRpYyBGa2V5cyA9XHJcbiAgICBbXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjEsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjIsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjMsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjQsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjUsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjYsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjcsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjgsXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjksXHJcbiAgICAgICAgS2V5Ym9hcmRFdmVudENvZGUuZjEwLFxyXG4gICAgICAgIEtleWJvYXJkRXZlbnRDb2RlLmYxMSxcclxuICAgICAgICBLZXlib2FyZEV2ZW50Q29kZS5mMTIsXHJcbiAgICBdO1xyXG59XHJcbiIsImV4cG9ydCBtb2R1bGUgbnVtYmVyZXh0IHtcclxuXHJcbn1cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gICAgaW50ZXJmYWNlIE51bWJlckNvbnN0cnVjdG9yIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGb3JtYXRzIGEgbnVtYmVyIGludG8gYSB0aG91c2FuZHMgc2VwZXJhdGVkIHN0cmluZy5cclxuICAgICAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcGFyc2VcclxuICAgICAgICAgKi9cclxuICAgICAgICBwYXJzZU51bWVyVG9Mb2NhbGVGb3JtYXR0ZWRTdHJpbmcoc3RyaW5nOiBzdHJpbmcsIGxvY2Fscz86IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nO1xyXG5cclxuICAgICAgICB0b0xvY2FsZUZvcm1hdHRlZFN0cmluZyhudW1iZXI6IE51bWJlciwgbG9jYWxzPzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIHRob3VzYW5kU2VwZXJhdG9yKHZhbHVlOiBzdHJpbmcsIGxvY2FsOiBzdHJpbmcpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIGlzTnVtZXJpYyhzdHJpbmc6IHN0cmluZyk6IGJvb2xlYW47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIE51bWJlciB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRm9ybWF0cyBhIG51bWJlciBpbnRvIGEgdGhvdXNhbmRzIHNlcGVyYXRlZCBzdHJpbmcuXHJcbiAgICAgICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIHBhcnNlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9Mb2NhbGVGb3JtYXR0ZWRTdHJpbmcobG9jYWxzPzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuXHJcbk51bWJlci5wYXJzZU51bWVyVG9Mb2NhbGVGb3JtYXR0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc3RyaW5nOiBzdHJpbmcsIGxvY2Fscz86IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGlmIChOdW1iZXIuaXNOdW1lcmljKHN0cmluZykpIHtcclxuICAgICAgICByZXR1cm4gTnVtYmVyLnRvTG9jYWxlRm9ybWF0dGVkU3RyaW5nKE51bWJlcihzdHJpbmcpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE5hTi50b1N0cmluZygpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuTnVtYmVyLnRvTG9jYWxlRm9ybWF0dGVkU3RyaW5nID0gZnVuY3Rpb24gKG51bWJlcjogTnVtYmVyLCBsb2NhbHM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBpZiAoTnVtYmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBudW1iZXIudG9Mb2NhbGVTdHJpbmcobG9jYWxzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIHNpbmdsZUxvY2FsOiBzdHJpbmcgPSAobG9jYWxzICYmIGxvY2FscyBpbnN0YW5jZW9mIEFycmF5KSA/IGxvY2Fsc1swXSA6IDxzdHJpbmc+bG9jYWxzO1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIudGhvdXNhbmRTZXBlcmF0b3IobnVtYmVyICsgXCJcIiwgc2luZ2xlTG9jYWwpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuTnVtYmVyLnRob3VzYW5kU2VwZXJhdG9yID0gZnVuY3Rpb24gKHZhbHVlOiBzdHJpbmcsIGxvY2FsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzZXBhcmF0b3I6IHN0cmluZztcclxuICAgICAgICBsZXQgZGVjaW1hbHNTZXBhcmF0b3I6IHN0cmluZztcclxuICAgICAgICBzd2l0Y2ggKGxvY2FsKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJlbi1HQlwiOlxyXG4gICAgICAgICAgICBjYXNlIFwiZW4tVVNcIjpcclxuICAgICAgICAgICAgY2FzZSBcImVuLUNBXCI6XHJcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgPSBcIixcIjtcclxuICAgICAgICAgICAgICAgIGRlY2ltYWxzU2VwYXJhdG9yID0gXCIuXCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiAvLyBcIm5sLU5MXCIsIFwiZGUtREVcIlxyXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yID0gXCIuXCI7XHJcbiAgICAgICAgICAgICAgICBkZWNpbWFsc1NlcGFyYXRvciA9IFwiLFwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG51bTogc3RyaW5nID0gKHRoaXMgKyBcIlwiKTtcclxuXHJcbiAgICAgICAgLy8gdGVzdCBmb3IgYW5kIGdldCBhbnkgZGVjaW1hbHMgKHRoZSBsYXRlciBvcGVyYXRpb25zIHdvbid0IHN1cHBvcnQgdGhlbSlcclxuICAgICAgICBsZXQgZGVjaW1hbHM6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKC9cXC4vLnRlc3QobnVtKSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzIHJlZ2V4IGdyYWJzIHRoZSBkZWNpbWFsIHBvaW50IGFzIHdlbGwgYXMgdGhlIGRlY2ltYWwgbnVtYmVyc1xyXG4gICAgICAgICAgICBkZWNpbWFscyA9IG51bS5yZXBsYWNlKC9eLiooXFwuLiopJC8sIFwiJDFcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBudW0gPSBudW0ucmVwbGFjZShkZWNpbWFscywgXCJcIilcclxuICAgICAgICAgICAgLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpXHJcbiAgICAgICAgICAgIC5tYXRjaCgvWzAtOV17MSwzfS0/L2cpLmpvaW4oc2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcblxyXG4gICAgICAgIHJldHVybiBgJHtudW19JHtkZWNpbWFsc1NlcGFyYXRvcn0ke2RlY2ltYWxzfWA7XHJcbn07XHJcblxyXG5OdW1iZXIuaXNOdW1lcmljID0gZnVuY3Rpb24gKHN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIWlzTmFOKCtzdHJpbmcpO1xyXG4gICAgLyogcmV0dXJuIChzdHJpbmcgIT09IHN0cmluZyArIDEpIC8vIGluZmluaXR5IGNoZWNrXHJcbiAgICAgICAgJiYgKGNvZXJjaW9uID09PSArc3RyaW5nKSAvLyBjdXRlIGNvZXJjaW9uIGNoZWNrXHJcbiAgICAgICAgJiYgKHR5cGVvZiBzdHJpbmcgIT09IFwib2JqZWN0XCIpOyAvLyBhcnJheS9vYmplY3QgY2hlY2sgKi9cclxufTtcclxuXHJcbk51bWJlci5wcm90b3R5cGUudG9Mb2NhbGVGb3JtYXR0ZWRTdHJpbmcgPSBmdW5jdGlvbiAodGhpczogTnVtYmVyLCBsb2NhbHM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTnVtYmVyLnRvTG9jYWxlRm9ybWF0dGVkU3RyaW5nKHRoaXMsIGxvY2Fscyk7XHJcbn07XHJcblxyXG5leHBvcnQgbW9kdWxlIE51bWJlciB7fSIsIi8qZ2xvYmFsIGFuZ3VsYXIsIG5hdmlnYXRvciovXG5cbihmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBhbmd1bGFyXG4gICAgICAgIC5tb2R1bGUoJ2FuZ3VsYXItY2xpY2stb3V0c2lkZScsIFtdKVxuICAgICAgICAuZGlyZWN0aXZlKCdjbGlja091dHNpZGUnLCBbXG4gICAgICAgICAgICAnJGRvY3VtZW50JywgJyRwYXJzZScsICckdGltZW91dCcsXG4gICAgICAgICAgICBjbGlja091dHNpZGVcbiAgICAgICAgXSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogQG5nZG9jIGRpcmVjdGl2ZVxuICAgICAqIEBuYW1lIGFuZ3VsYXItY2xpY2stb3V0c2lkZS5kaXJlY3RpdmU6Y2xpY2tPdXRzaWRlXG4gICAgICogQGRlc2NyaXB0aW9uIERpcmVjdGl2ZSB0byBhZGQgY2xpY2sgb3V0c2lkZSBjYXBhYmlsaXRpZXMgdG8gRE9NIGVsZW1lbnRzXG4gICAgICogQHJlcXVpcmVzICRkb2N1bWVudFxuICAgICAqIEByZXF1aXJlcyAkcGFyc2VcbiAgICAgKiBAcmVxdWlyZXMgJHRpbWVvdXRcbiAgICAgKiovXG4gICAgZnVuY3Rpb24gY2xpY2tPdXRzaWRlKCRkb2N1bWVudCwgJHBhcnNlLCAkdGltZW91dCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzdHJpY3Q6ICdBJyxcbiAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uKCRzY29wZSwgZWxlbSwgYXR0cikge1xuXG4gICAgICAgICAgICAgICAgLy8gcG9zdHBvbmUgbGlua2luZyB0byBuZXh0IGRpZ2VzdCB0byBhbGxvdyBmb3IgdW5pcXVlIGlkIGdlbmVyYXRpb25cbiAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNsYXNzTGlzdCA9IChhdHRyLm91dHNpZGVJZk5vdCAhPT0gdW5kZWZpbmVkKSA/IGF0dHIub3V0c2lkZUlmTm90LnNwbGl0KC9bICxdKy8pIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBmbjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBldmVudEhhbmRsZXIoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgb3VyIGVsZW1lbnQgYWxyZWFkeSBoaWRkZW4gYW5kIGFib3J0IGlmIHNvXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5lbGVtZW50KGVsZW0pLmhhc0NsYXNzKFwibmctaGlkZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gY2xpY2sgdGFyZ2V0LCBubyBwb2ludCBnb2luZyBvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBhdmFpbGFibGUgZWxlbWVudHMsIGxvb2tpbmcgZm9yIGNsYXNzZXMgaW4gdGhlIGNsYXNzIGxpc3QgdGhhdCBtaWdodCBtYXRjaCBhbmQgc28gd2lsbCBlYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZWxlbWVudCA9IGUudGFyZ2V0OyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgdGhlIHNhbWUgZWxlbWVudCB0aGUgZGlyZWN0aXZlIGlzIGF0dGFjaGVkIHRvIGFuZCBleGl0IGlmIHNvIChwcm9wcyBAQ29zdGljYVB1bnRhcnUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IGVsZW1bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3cgd2UgaGF2ZSBkb25lIHRoZSBpbml0aWFsIGNoZWNrcywgc3RhcnQgZ2F0aGVyaW5nIGlkJ3MgYW5kIGNsYXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IGVsZW1lbnQuY2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBjbGFzc0xpc3QubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW53cmFwIFNWR0FuaW1hdGVkU3RyaW5nIGNsYXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzLmJhc2VWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0gY2xhc3NOYW1lcy5iYXNlVmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBubyBjbGFzcyBuYW1lcyBvbiB0aGUgZWxlbWVudCBjbGlja2VkLCBza2lwIHRoZSBjaGVja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWVzIHx8IGlkKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBlbGVtZW50cyBpZCdzIGFuZCBjbGFzc25hbWVzIGxvb2tpbmcgZm9yIGV4Y2VwdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmVwYXJlIHJlZ2V4IGZvciBjbGFzcyB3b3JkIG1hdGNoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgY2xhc3NMaXN0W2ldICsgJ1xcXFxiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBleGFjdCBtYXRjaGVzIG9uIGlkJ3Mgb3IgY2xhc3NlcywgYnV0IG9ubHkgaWYgdGhleSBleGlzdCBpbiB0aGUgZmlyc3QgcGxhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaWQgIT09IHVuZGVmaW5lZCAmJiBpZCA9PT0gY2xhc3NMaXN0W2ldKSB8fCAoY2xhc3NOYW1lcyAmJiByLnRlc3QoY2xhc3NOYW1lcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm93IGxldCdzIGV4aXQgb3V0IGFzIGl0IGlzIGFuIGVsZW1lbnQgdGhhdCBoYXMgYmVlbiBkZWZpbmVkIGFzIGJlaW5nIGlnbm9yZWQgZm9yIGNsaWNraW5nIG91dHNpZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgZ290IHRoaXMgZmFyLCB0aGVuIHdlIGFyZSBnb29kIHRvIGdvIHdpdGggcHJvY2Vzc2luZyB0aGUgY29tbWFuZCBwYXNzZWQgaW4gdmlhIHRoZSBjbGljay1vdXRzaWRlIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSAkcGFyc2UoYXR0clsnY2xpY2tPdXRzaWRlJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuKCRzY29wZSwgeyBldmVudDogZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGRldmljZXMgaGFzIGEgdG91Y2hzY3JlZW4sIGxpc3RlbiBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgICAgICAgICBpZiAoX2hhc1RvdWNoKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRkb2N1bWVudC5vbigndG91Y2hzdGFydCcsIGV2ZW50SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCBsaXN0ZW4gZm9yIHRoZSBjbGljayBldmVudCBldmVuIGlmIHRoZXJlIGlzIHRvdWNoIHRvIGNhdGVyIGZvciB0b3VjaHNjcmVlbiBsYXB0b3BzXG4gICAgICAgICAgICAgICAgICAgICRkb2N1bWVudC5vbignY2xpY2snLCBldmVudEhhbmRsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHNjb3BlIGlzIGRlc3Ryb3llZCwgY2xlYW4gdXAgdGhlIGRvY3VtZW50cyBldmVudCBoYW5kbGVycyBhcyB3ZSBkb24ndCB3YW50IGl0IGhhbmdpbmcgYXJvdW5kXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2hhc1RvdWNoKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG9jdW1lbnQub2ZmKCd0b3VjaHN0YXJ0JywgZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgJGRvY3VtZW50Lm9mZignY2xpY2snLCBldmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIFByaXZhdGUgZnVuY3Rpb24gdG8gYXR0ZW1wdCB0byBmaWd1cmUgb3V0IGlmIHdlIGFyZSBvbiBhIHRvdWNoIGRldmljZVxuICAgICAgICAgICAgICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgICAgICAgICAgICAgKiovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9oYXNUb3VjaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdvcmtzIG9uIG1vc3QgYnJvd3NlcnMsIElFMTAvMTEgYW5kIFN1cmZhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn0pKCk7XG4iLCIvKiEgYW5ndWxhci1nb29nbGUtY2hhcnQgMjAyMC0xMi0yOCAqL1xyXG4vKlxyXG4qIEBkZXNjcmlwdGlvbiBHb29nbGUgQ2hhcnQgQXBpIERpcmVjdGl2ZSBNb2R1bGUgZm9yIEFuZ3VsYXJKU1xyXG4qIEB2ZXJzaW9uIDEuMC4wLWJldGEuMVxyXG4qIEBhdXRob3IgR2l0SHViIENvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXItZ29vZ2xlLWNoYXJ0L2FuZ3VsYXItZ29vZ2xlLWNoYXJ0L2dyYXBocy9jb250cmlidXRvcnM+IFxyXG4qIEBsaWNlbnNlIE1JVFxyXG4qIEB5ZWFyIDIwMTNcclxuKi9cclxuLyogZ2xvYmFsIGFuZ3VsYXIgKi9cclxuKGZ1bmN0aW9uKCl7XHJcbiAgICBhbmd1bGFyLm1vZHVsZSgnZ29vZ2xlY2hhcnQnLCBbXSlcclxuICAgICAgICAucnVuKHJlZ2lzdGVyUmVzaXplRXZlbnQpO1xyXG4gICAgICAgIFxyXG4gICAgcmVnaXN0ZXJSZXNpemVFdmVudC4kaW5qZWN0ID0gWyckcm9vdFNjb3BlJywgJyR3aW5kb3cnXTtcclxuICAgIFxyXG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJSZXNpemVFdmVudCgkcm9vdFNjb3BlLCAkd2luZG93KXtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoJHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICRyb290U2NvcGUuJGVtaXQoJ3Jlc2l6ZU1zZycpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufSkoKTtcclxuLyogZ2xvYmFsIGFuZ3VsYXIsIGdvb2dsZSAqL1xyXG4oZnVuY3Rpb24oKXtcclxuICAgIGFuZ3VsYXIubW9kdWxlKCdnb29nbGVjaGFydCcpXHJcbiAgICAgICAgLmZhY3RvcnkoJ0Zvcm1hdE1hbmFnZXInLCBmb3JtYXRNYW5hZ2VyRmFjdG9yeSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZnVuY3Rpb24gZm9ybWF0TWFuYWdlckZhY3RvcnkoKXtcclxuICAgICAgICAgICAgLy8gSGFuZGxlcyB0aGUgcHJvY2Vzc2luZyBvZiBHb29nbGUgQ2hhcnRzIEFQSSBGb3JtYXRzXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIEZvcm1hdE1hbmFnZXIoJGdvb2dsZSl7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkRm9ybWF0VGVtcGxhdGVzID0ge307XHJcbiAgICAgICAgICAgICAgICBzZWxmLmlGb3JtYXRzID0ge307IC8vIEhvbGRzIGluc3RhbmNlcyBvZiBmb3JtYXRzIChpZS4gc2VsZi5pRm9ybWF0cy5kYXRlWzBdID0gbmV3ICRnb29nbGUudmlzdWFsaXphdGlvbi5EYXRlRm9ybWF0KHBhcmFtcykpXHJcbiAgICAgICAgICAgICAgICBzZWxmLmFwcGx5Rm9ybWF0cyA9IGFwcGx5Rm9ybWF0cztcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gYXBwbHkgZm9ybWF0cyBvZiB0eXBlIHRvIGRhdGF0YWJsZVxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHkodEZvcm1hdHMsIGRhdGFUYWJsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGksIGZvcm1hdFR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChmb3JtYXRUeXBlIGluIHRGb3JtYXRzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRGb3JtYXRzLmhhc093blByb3BlcnR5KGZvcm1hdFR5cGUpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLmlGb3JtYXRzW2Zvcm1hdFR5cGVdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRGb3JtYXRzW2Zvcm1hdFR5cGVdW2ldLmNvbHVtbk51bSA8IGRhdGFUYWJsZS5nZXROdW1iZXJPZkNvbHVtbnMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlGb3JtYXRzW2Zvcm1hdFR5cGVdW2ldLmZvcm1hdChkYXRhVGFibGUsIHRGb3JtYXRzW2Zvcm1hdFR5cGVdW2ldLmNvbHVtbk51bSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcHBseUZvcm1hdChmb3JtYXRUeXBlLCBGb3JtYXRDbGFzcywgdEZvcm1hdHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkodEZvcm1hdHNbZm9ybWF0VHlwZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhc2ljIGNoYW5nZSBkZXRlY3Rpb247IG5vIG5lZWQgdG8gcnVuIGlmIG5vIGNoYW5nZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmd1bGFyLmVxdWFscyh0Rm9ybWF0c1tmb3JtYXRUeXBlXSwgb2xkRm9ybWF0VGVtcGxhdGVzW2Zvcm1hdFR5cGVdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkRm9ybWF0VGVtcGxhdGVzW2Zvcm1hdFR5cGVdID0gdEZvcm1hdHNbZm9ybWF0VHlwZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlGb3JtYXRzW2Zvcm1hdFR5cGVdID0gW107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdFR5cGUgPT09ICdjb2xvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZUNvbG9yRm9ybWF0dGVycyh0Rm9ybWF0cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0Rm9ybWF0c1tmb3JtYXRUeXBlXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlGb3JtYXRzW2Zvcm1hdFR5cGVdLnB1c2gobmV3IEZvcm1hdENsYXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEZvcm1hdHNbZm9ybWF0VHlwZV1baV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcHBseUZvcm1hdHMoZGF0YVRhYmxlLCB0Rm9ybWF0cywgY3VzdG9tRm9ybWF0dGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXRUeXBlLCBGb3JtYXRDbGFzcywgcmVxdWlyZXNIdG1sID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmd1bGFyLmlzRGVmaW5lZCh0Rm9ybWF0cykgfHwgIWFuZ3VsYXIuaXNEZWZpbmVkKGRhdGFUYWJsZSkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlc0h0bWw6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoZm9ybWF0VHlwZSBpbiB0Rm9ybWF0cyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Rm9ybWF0cy5oYXNPd25Qcm9wZXJ0eShmb3JtYXRUeXBlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXRDbGFzcyA9IGdldEZvcm1hdENsYXNzKGZvcm1hdFR5cGUsIGN1c3RvbUZvcm1hdHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmd1bGFyLmlzRnVuY3Rpb24oRm9ybWF0Q2xhc3MpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBubyBjbGFzcyBjb25zdHJ1Y3RvciB3YXMgcmV0dXJuZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUncyBubyBwb2ludCBpbiBjb21wbGV0aW5nIGN5Y2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseUZvcm1hdChmb3JtYXRUeXBlLCBGb3JtYXRDbGFzcywgdEZvcm1hdHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hbnkgZm9ybWF0dGVycyByZXF1aXJlIEhUTUwgdGFncyB0byBkaXNwbGF5IHNwZWNpYWwgZm9ybWF0dGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdFR5cGUgPT09ICdhcnJvdycgfHwgZm9ybWF0VHlwZSA9PT0gJ2JhcicgfHwgZm9ybWF0VHlwZSA9PT0gJ2NvbG9yJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzSHRtbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwbHkodEZvcm1hdHMsIGRhdGFUYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZXNIdG1sOiByZXF1aXJlc0h0bWwgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5zdGFudGlhdGVDb2xvckZvcm1hdHRlcnModEZvcm1hdHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0LCBjb2xvckZvcm1hdCwgaSwgZGF0YSwgZm9ybWF0VHlwZSA9ICdjb2xvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gMDsgdCA8IHRGb3JtYXRzW2Zvcm1hdFR5cGVdLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gbmV3ICRnb29nbGUudmlzdWFsaXphdGlvbi5Db2xvckZvcm1hdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRGb3JtYXRzW2Zvcm1hdFR5cGVdW3RdLmZvcm1hdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0Rm9ybWF0c1tmb3JtYXRUeXBlXVt0XS5mb3JtYXRzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGRhdGEuZnJvbUJnQ29sb3IpICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKGRhdGEudG9CZ0NvbG9yKSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckZvcm1hdC5hZGRHcmFkaWVudFJhbmdlKGRhdGEuZnJvbSwgZGF0YS50bywgZGF0YS5jb2xvciwgZGF0YS5mcm9tQmdDb2xvciwgZGF0YS50b0JnQ29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckZvcm1hdC5hZGRSYW5nZShkYXRhLmZyb20sIGRhdGEudG8sIGRhdGEuY29sb3IsIGRhdGEuYmdjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaUZvcm1hdHNbZm9ybWF0VHlwZV0ucHVzaChjb2xvckZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRGb3JtYXRDbGFzcyhmb3JtYXRUeXBlLCBjdXN0b21Gb3JtYXR0ZXJzKXtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gZm9ybWF0VHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZvcm1hdFR5cGUuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSArIFwiRm9ybWF0XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRnb29nbGUudmlzdWFsaXphdGlvbi5oYXNPd25Qcm9wZXJ0eShjbGFzc05hbWUpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdvb2dsZS52aXN1YWxpemF0aW9uW2NsYXNzTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbmd1bGFyLmlzRGVmaW5lZChjdXN0b21Gb3JtYXR0ZXJzKSAmJiBjdXN0b21Gb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGZvcm1hdFR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21Gb3JtYXR0ZXJzW2Zvcm1hdFR5cGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiBGb3JtYXRNYW5hZ2VyO1xyXG4gICAgICAgIH1cclxufSkoKTtcclxuLyogZ2xvYmFsIGFuZ3VsYXIsIGdvb2dsZSAqL1xyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIGFuZ3VsYXIubW9kdWxlKCdnb29nbGVjaGFydCcpXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoJ0dvb2dsZUNoYXJ0Q29udHJvbGxlcicsIEdvb2dsZUNoYXJ0Q29udHJvbGxlcik7XHJcblxyXG4gICAgR29vZ2xlQ2hhcnRDb250cm9sbGVyLiRpbmplY3QgPSBbJyRzY29wZScsICckZWxlbWVudCcsICckYXR0cnMnLCAnJGluamVjdG9yJywgJyR0aW1lb3V0JywgJyR3aW5kb3cnLCAnJHJvb3RTY29wZScsICdHb29nbGVDaGFydFNlcnZpY2UnXTtcclxuXHJcbiAgICBmdW5jdGlvbiBHb29nbGVDaGFydENvbnRyb2xsZXIoJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzLCAkaW5qZWN0b3IsICR0aW1lb3V0LCAkd2luZG93LCAkcm9vdFNjb3BlLCBHb29nbGVDaGFydFNlcnZpY2UpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHJlc2l6ZUhhbmRsZXI7XHJcbiAgICAgICAgdmFyIGdvb2dsZUNoYXJ0U2VydmljZTtcclxuXHJcbiAgICAgICAgaW5pdCgpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjbGVhbnVwKCkge1xyXG4gICAgICAgICAgICByZXNpemVIYW5kbGVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBkcmF3KCkge1xyXG4gICAgICAgICAgICBpZiAoIWRyYXcudHJpZ2dlcmVkICYmIChzZWxmLmNoYXJ0ICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICBkcmF3LnRyaWdnZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAkdGltZW91dChzZXR1cEFuZERyYXcsIDAsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY2hhcnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgJHRpbWVvdXQuY2FuY2VsKGRyYXcucmVjYWxsVGltZW91dCk7XHJcbiAgICAgICAgICAgICAgICBkcmF3LnJlY2FsbFRpbWVvdXQgPSAkdGltZW91dChkcmF3LCAxMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFdhdGNoIGZ1bmN0aW9uIGNhbGxzIHRoaXMuXHJcbiAgICAgICAgZnVuY3Rpb24gZHJhd0FzeW5jKCkge1xyXG4gICAgICAgICAgICBnb29nbGVDaGFydFNlcnZpY2UuZ2V0UmVhZHlQcm9taXNlKClcclxuICAgICAgICAgICAgICAgIC50aGVuKGRyYXcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9zZXR1cEFuZERyYXcoKSBjYWxscyB0aGlzLlxyXG4gICAgICAgIGZ1bmN0aW9uIGRyYXdDaGFydFdyYXBwZXIoKSB7XHJcbiAgICAgICAgICAgIGdvb2dsZUNoYXJ0U2VydmljZS5kcmF3KCk7XHJcbiAgICAgICAgICAgIGRyYXcudHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgICAgICAvLyBJbnN0YW50aWF0ZSBzZXJ2aWNlXHJcbiAgICAgICAgICAgIGdvb2dsZUNoYXJ0U2VydmljZSA9IG5ldyBHb29nbGVDaGFydFNlcnZpY2UoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHNlbGYucmVnaXN0ZXJDaGFydExpc3RlbmVyID0gZ29vZ2xlQ2hhcnRTZXJ2aWNlLnJlZ2lzdGVyQ2hhcnRMaXN0ZW5lcjtcclxuICAgICAgICAgICAgc2VsZi5yZWdpc3RlcldyYXBwZXJMaXN0ZW5lciA9IGdvb2dsZUNoYXJ0U2VydmljZS5yZWdpc3RlcldyYXBwZXJMaXN0ZW5lcjtcclxuICAgICAgICAgICAgc2VsZi5yZWdpc3RlclNlcnZpY2VMaXN0ZW5lciA9IGdvb2dsZUNoYXJ0U2VydmljZS5yZWdpc3RlclNlcnZpY2VMaXN0ZW5lcjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qIFdhdGNoZXMsIHRvIHJlZnJlc2ggdGhlIGNoYXJ0IHdoZW4gaXRzIGRhdGEsIGZvcm1hdHRlcnMsIG9wdGlvbnMsIHZpZXcsXHJcbiAgICAgICAgICAgIG9yIHR5cGUgY2hhbmdlLiBBbGwgb3RoZXIgdmFsdWVzIGludGVudGlvbmFsbHkgZGlzcmVnYXJkZWQgdG8gYXZvaWQgZG91YmxlXHJcbiAgICAgICAgICAgIGNhbGxzIHRvIHRoZSBkcmF3IGZ1bmN0aW9uLiBQbGVhc2UgYXZvaWQgbWFraW5nIGNoYW5nZXMgdG8gdGhlc2Ugb2JqZWN0c1xyXG4gICAgICAgICAgICBkaXJlY3RseSBmcm9tIHRoaXMgZGlyZWN0aXZlLiovXHJcbiAgICAgICAgICAgICRzY29wZS4kd2F0Y2god2F0Y2hWYWx1ZSwgd2F0Y2hIYW5kbGVyLCB0cnVlKTsgLy8gdHJ1ZSBpcyBmb3IgZGVlcCBvYmplY3QgZXF1YWxpdHkgY2hlY2tpbmdcclxuXHJcbiAgICAgICAgICAgIC8vIFJlZHJhdyB0aGUgY2hhcnQgaWYgdGhlIHdpbmRvdyBpcyByZXNpemVkXHJcbiAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIgPSAkcm9vdFNjb3BlLiRvbigncmVzaXplTXNnJywgZHJhd0FzeW5jKTtcclxuXHJcbiAgICAgICAgICAgIC8vQ2xlYW51cCByZXNpemUgaGFuZGxlci5cclxuICAgICAgICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCBjbGVhbnVwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHNldHVwQW5kRHJhdygpIHtcclxuICAgICAgICAgICAgZ29vZ2xlQ2hhcnRTZXJ2aWNlLnNldHVwKCRlbGVtZW50LFxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0LnR5cGUsXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnQuZGF0YSxcclxuICAgICAgICAgICAgc2VsZi5jaGFydC52aWV3LFxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0Lm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnQuZm9ybWF0dGVycyxcclxuICAgICAgICAgICAgc2VsZi5jaGFydC5jdXN0b21Gb3JtYXR0ZXJzKTtcclxuXHJcbiAgICAgICAgICAgICR0aW1lb3V0KGRyYXdDaGFydFdyYXBwZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd2F0Y2hIYW5kbGVyKCkge1xyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0ID0gJHNjb3BlLiRldmFsKCRhdHRycy5jaGFydCk7XHJcbiAgICAgICAgICAgIGRyYXdBc3luYygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd2F0Y2hWYWx1ZSgpIHtcclxuICAgICAgICAgICAgdmFyIGNoYXJ0T2JqZWN0ID0gJHNjb3BlLiRldmFsKCRhdHRycy5jaGFydCk7XHJcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChjaGFydE9iamVjdCkgJiYgYW5ndWxhci5pc09iamVjdChjaGFydE9iamVjdCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRm9ybWF0dGVyczogY2hhcnRPYmplY3QuY3VzdG9tRm9ybWF0dGVycyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjaGFydE9iamVjdC5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcnM6IGNoYXJ0T2JqZWN0LmZvcm1hdHRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogY2hhcnRPYmplY3Qub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGFydE9iamVjdC50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IGNoYXJ0T2JqZWN0LnZpZXdcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pKCk7XHJcbi8qIGdsb2JhbCBhbmd1bGFyICovXHJcbihmdW5jdGlvbigpe1xyXG4gICAgYW5ndWxhci5tb2R1bGUoJ2dvb2dsZWNoYXJ0JylcclxuICAgICAgICAuZGlyZWN0aXZlKCdhZ2NCZWZvcmVEcmF3JywgYmVmb3JlRHJhd0RpcmVjdGl2ZSk7XHJcbiAgICAgICAgXHJcbiAgICBmdW5jdGlvbiBiZWZvcmVEcmF3RGlyZWN0aXZlKCl7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgICAgICAgc2NvcGU6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXF1aXJlOiAnZ29vZ2xlQ2hhcnQnLFxyXG4gICAgICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGdvb2dsZUNoYXJ0Q29udHJvbGxlcil7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay4kaW5qZWN0PVsnY2hhcnRXcmFwcGVyJ107XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhjaGFydFdyYXBwZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGV2YWwoYXR0cnMuYWdjQmVmb3JlRHJhdywge2NoYXJ0V3JhcHBlcjogY2hhcnRXcmFwcGVyfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBnb29nbGVDaGFydENvbnRyb2xsZXIucmVnaXN0ZXJTZXJ2aWNlTGlzdGVuZXIoJ2JlZm9yZURyYXcnLCBjYWxsYmFjaywgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59KSgpO1xyXG5cclxuLyogZ2xvYmFsIGFuZ3VsYXIgKi9cclxuKGZ1bmN0aW9uKCkge1xyXG4gICAgYW5ndWxhci5tb2R1bGUoJ2dvb2dsZWNoYXJ0JylcclxuICAgICAgICAucHJvdmlkZXIoJ2FnY0dzdGF0aWNMb2FkZXInLCBhZ2NHc3RhdGljTG9hZGVyUHJvdmlkZXIpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFnY0dzdGF0aWNMb2FkZXJQcm92aWRlcigpe1xyXG4gICAgICAgIHZhciB1c2VCb3RoTG9hZGVycyA9IGZhbHNlO1xyXG4gICAgICAgIHZhciB2ZXJzaW9uID0gXCJjdXJyZW50XCI7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHBhY2thZ2VzOiBbXCJjb3JlY2hhcnRcIl1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogQWRkIEdvb2dsZSBWaXN1YWxpemF0aW9uIEFQSSBwYWNrYWdlIHRvIGxvYWRlciBjb25maWd1cmF0aW9uLiAqL1xyXG4gICAgICAgIHRoaXMuYWRkUGFja2FnZSA9IGZ1bmN0aW9uKHBhY2thZ2VOYW1lKXtcclxuICAgICAgICAgICAgb3B0aW9ucy5wYWNrYWdlcyA9IG9wdGlvbnMucGFja2FnZXMgfHwgW107XHJcbiAgICAgICAgICAgIG9wdGlvbnMucGFja2FnZXMucHVzaChwYWNrYWdlTmFtZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobmVlZHNCb3RoTG9hZGVycygpKVxyXG4gICAgICAgICAgICAgICAgdXNlQm90aExvYWRlcnMgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogRGVsZXRlIGtleSBmcm9tIHVuZGVybHlpbmcgbG9hZGVyIGNvbmZpZ3VyYXRpb24uICovXHJcbiAgICAgICAgdGhpcy5jbGVhck9wdGlvbiA9IGZ1bmN0aW9uKGtleSl7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zW2tleV07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBSZW1vdmUgR29vZ2xlIFZpc3VhbGl6YXRpb24gQVBJIHBhY2thZ2UgZnJvbSBsb2FkZXIgY29uZmlndXJhdGlvbi4gKi9cclxuICAgICAgICB0aGlzLnJlbW92ZVBhY2thZ2UgPSBmdW5jdGlvbihwYWNrYWdlTmFtZSl7XHJcbiAgICAgICAgICAgIG9wdGlvbnMucGFja2FnZXMgPSB0aGlzLl9vcHRpb25zLnBhY2thZ2VzIHx8IFtdO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBvcHRpb25zLnBhY2thZ2VzLmluZGV4T2YocGFja2FnZU5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSlcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMucGFja2FnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIFNldCBvcHRpb24gdG8gdmFsdWUuIFNlZSBkZXZlbG9wZXJzLmdvb2dsZS5jb20vY2hhcnQvIGZvciBpbmZvcm1hdGlvbiBhYm91dCBsb2FkZXIgb3B0aW9ucy4gKi9cclxuICAgICAgICB0aGlzLnNldE9wdGlvbiA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xyXG4gICAgICAgICAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIFNldHMgdW5kZXJseWluZyBsb2FkZXIgb3B0aW9ucyBvYmplY3QgdG8gdmFsdWUgcHJvdmlkZWQuIFJlcGxhY2VzIGV2ZXJ5dGhpbmcsIGluY2x1ZGVkIHBhY2thZ2VzLiAqL1xyXG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKXtcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogU2V0IEdvb2dsZSBWaXN1YWxpemF0aW9uIEFQSSBmcm96ZW4gdmVyc2lvbiB0byBsb2FkLiBEZWZhdWx0OiAnY3VycmVudCcgKi9cclxuICAgICAgICB0aGlzLnNldFZlcnNpb24gPSBmdW5jdGlvbih2YWx1ZSl7XHJcbiAgICAgICAgICAgIHZlcnNpb24gPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKG5lZWRzQm90aExvYWRlcnMoKSlcclxuICAgICAgICAgICAgICAgIHVzZUJvdGhMb2FkZXJzID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIE92ZXJyaWRlIGZvciBpbnRlcm5hbCBzZXR0aW5nIHRvIGFkZCBib3RoIGxvYWRlciBzY3JpcHRzLiBSZXF1aXJlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuICovXHJcbiAgICAgICAgdGhpcy51c2VCb3RoTG9hZGVycyA9IGZ1bmN0aW9uKHZhbHVlKXtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB1c2VCb3RoTG9hZGVycyA9ICEhdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBDaGVjayBpZiBjb25kaXRpb25zIGFyZSBjb3JyZWN0IHRvIG5lZWQgYm90aCBKU0FQSSBhbmQgZ3N0YXRpYyBsb2FkZXIgc2NyaXB0cy4gKi9cclxuICAgICAgICBmdW5jdGlvbiBuZWVkc0JvdGhMb2FkZXJzKCl7XHJcbiAgICAgICAgICAgIHZhciB2ZXJzaW9uQ2hlY2ssIHBhY2thZ2VDaGVjaztcclxuXHJcbiAgICAgICAgICAgIHZlcnNpb25DaGVjayA9ICFpc05hTigrdmVyc2lvbikgJiYgK3ZlcnNpb24gPCA0NTtcclxuICAgICAgICAgICAgcGFja2FnZUNoZWNrID0gb3B0aW9ucy5wYWNrYWdlcy5pbmRleE9mKFwiZ2VvY2hhcnRcIikgPiAtMSB8fFxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5wYWNrYWdlcy5pbmRleE9mKFwibWFwXCIpID4gLTE7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdmVyc2lvbkNoZWNrICYmIHBhY2thZ2VDaGVjaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuJGdldCA9IGZ1bmN0aW9uKCRyb290U2NvcGUsICRxLCBhZ2NTY3JpcHRUYWdIZWxwZXIsICR0aW1lb3V0KXtcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHNjcmlwdExvYWRDYWxsYmFjaygpe1xyXG4gICAgICAgICAgICAgICAgaWYgKCFnb29nbGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAhZ29vZ2xlLmNoYXJ0cyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrICE9PSAnZnVuY3Rpb24nKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHEucmVqZWN0KFwiR29vZ2xlIGNoYXJ0cyBsaWJyYXJ5IGxvYWRlciBub3QgcHJlc2VudC5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZ29vZ2xlLmNoYXJ0cy5sb2FkKHZlcnNpb24sIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGdvb2dsZS5jaGFydHMuc2V0T25Mb2FkQ2FsbGJhY2soZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGdvb2dsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwwICk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHRhZ1Byb21pc2UgPSBhZ2NTY3JpcHRUYWdIZWxwZXIoXCJodHRwczovL3d3dy5nc3RhdGljLmNvbS9jaGFydHMvbG9hZGVyLmpzXCIpO1xyXG4gICAgICAgICAgICBpZiAodXNlQm90aExvYWRlcnMpXHJcbiAgICAgICAgICAgICAgICB0YWdQcm9taXNlID0gdGFnUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7IHJldHVybiBhZ2NTY3JpcHRUYWdIZWxwZXIoXCJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpXCIpO30pO1xyXG4gICAgICAgICAgICB2YXIgbGlicmFyeVByb21pc2UgPSB0YWdQcm9taXNlLnRoZW4oc2NyaXB0TG9hZENhbGxiYWNrKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBsaWJyYXJ5UHJvbWlzZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuJGdldC4kaW5qZWN0ID0gW1wiJHJvb3RTY29wZVwiLCBcIiRxXCIsIFwiYWdjU2NyaXB0VGFnSGVscGVyXCIsIFwiJHRpbWVvdXRcIl07XHJcbiAgICB9XHJcbn0pKCk7XHJcblxyXG4vKiBnbG9iYWwgYW5ndWxhciAqL1xyXG4oZnVuY3Rpb24oKSB7XHJcbiAgICBhbmd1bGFyLm1vZHVsZShcImdvb2dsZWNoYXJ0XCIpXHJcbiAgICAgICAgLmZhY3RvcnkoXCJhZ2NKc2FwaUxvYWRlclwiLCBhZ2NKc2FwaUxvYWRlckZhY3RvcnkpO1xyXG5cclxuICAgIGFnY0pzYXBpTG9hZGVyRmFjdG9yeS4kaW5qZWN0ID0gW1wiJHJvb3RTY29wZVwiLCBcIiRxXCIsIFwiYWdjU2NyaXB0VGFnSGVscGVyXCIsIFwiZ29vZ2xlQ2hhcnRBcGlDb25maWdcIiwgXCIkdGltZW91dFwiXTtcclxuICAgIGZ1bmN0aW9uIGFnY0pzYXBpTG9hZGVyRmFjdG9yeSgkcm9vdFNjb3BlLCAkcSwgYWdjU2NyaXB0VGFnSGVscGVyLCBnb29nbGVDaGFydEFwaUNvbmZpZywgJHRpbWVvdXQpe1xyXG4gICAgICAgIHZhciBhcGlSZWFkeSA9ICRxLmRlZmVyKCk7XHJcbiAgICAgICAgLy8gTWFzc2FnZSBjb25maWd1cmF0aW9uIGFzIG5lZWRlZC5cclxuICAgICAgICBnb29nbGVDaGFydEFwaUNvbmZpZy5vcHRpb25hbFNldHRpbmdzID0gZ29vZ2xlQ2hhcnRBcGlDb25maWcub3B0aW9uYWxTZXR0aW5ncyB8fCB7fTtcclxuXHJcbiAgICAgICAgdmFyIHVzZXJEZWZpbmVkQ2FsbGJhY2sgPSBnb29nbGVDaGFydEFwaUNvbmZpZy5vcHRpb25hbFNldHRpbmdzLmNhbGxiYWNrO1xyXG5cclxuICAgICAgICB2YXIgc2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24odXNlckRlZmluZWRDYWxsYmFjaykpXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlckRlZmluZWRDYWxsYmFjay5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpUmVhZHkucmVzb2x2ZShnb29nbGUpO1xyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBzZXR0aW5ncyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCBnb29nbGVDaGFydEFwaUNvbmZpZy5vcHRpb25hbFNldHRpbmdzLCBzZXR0aW5ncyk7XHJcblxyXG4gICAgICAgIGFnY1NjcmlwdFRhZ0hlbHBlcihcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGlcIilcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5nb29nbGUubG9hZCgndmlzdWFsaXphdGlvbicsIGdvb2dsZUNoYXJ0QXBpQ29uZmlnLnZlcnNpb24gfHwgJzEnLCBzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgYXBpUmVhZHkucmVqZWN0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYXBpUmVhZHkucHJvbWlzZTtcclxuICAgIH0gICBcclxufSkoKTtcclxuXHJcbi8qIGdsb2JhbCBhbmd1bGFyICovXHJcbihmdW5jdGlvbigpe1xyXG4gICAgYW5ndWxhci5tb2R1bGUoXCJnb29nbGVjaGFydFwiKVxyXG4gICAgICAgIC5wcm92aWRlcihcImFnY0xpYnJhcnlMb2FkZXJcIiwgQWdjTGlicmFyeUxvYWRlclByb3ZpZGVyKTtcclxuXHJcbiAgICBBZ2NMaWJyYXJ5TG9hZGVyUHJvdmlkZXIuJGluamVjdCA9IFtcIiRpbmplY3RvclwiXTtcclxuXHJcbiAgICBmdW5jdGlvbiBBZ2NMaWJyYXJ5TG9hZGVyUHJvdmlkZXIoJGluamVjdG9yKXtcclxuXHJcbiAgICAgICAgdmFyIERFRkFVTFRfTE9BREVSID0gXCJKc2FwaVwiO1xyXG5cclxuICAgICAgICB0aGlzLiRnZXQgPSBmdW5jdGlvbihsb2FkZXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gbG9hZGVyO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0TG9hZGVyID0gZnVuY3Rpb24obG9hZGVyTmFtZSl7XHJcbiAgICAgICAgICAgIGlmICgkaW5qZWN0b3IuaGFzKHRoaXMuZ2V0UHJvdmlkZXJOYW1lKGxvYWRlck5hbWUpKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuJGdldC4kaW5qZWN0ID0gW3RoaXMuZ2V0UHJvdmlkZXJOYW1lKGxvYWRlck5hbWUpXTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbQW5ndWxhci1Hb29nbGVDaGFydF0gTG9hZGVyIHR5cGUgXFxcIlwiICsgbG9hZGVyTmFtZSArIFwiXFxcIiBkb2Vzbid0IGV4aXN0LiBEZWZhdWx0aW5nIHRvIEpTQVBJIGxvYWRlci5cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRnZXQuJGluamVjdCA9IFt0aGlzLmdldFByb3ZpZGVyTmFtZShERUZBVUxUX0xPQURFUildO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRQcm92aWRlck5hbWUgPSBmdW5jdGlvbihsb2FkZXJOYW1lKXtcclxuICAgICAgICAgICAgbG9hZGVyTmFtZSA9IGxvYWRlck5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsb2FkZXJOYW1lLnNsaWNlKDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJhZ2NcIiArIGxvYWRlck5hbWUgKyBcIkxvYWRlclwiO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0TG9hZGVyKERFRkFVTFRfTE9BREVSKTtcclxuICAgIH1cclxufSkoKTtcclxuXHJcbi8qIGdsb2JhbCBhbmd1bGFyICovXHJcbihmdW5jdGlvbigpe1xyXG4gICAgYW5ndWxhci5tb2R1bGUoXCJnb29nbGVjaGFydFwiKVxyXG4gICAgICAgIC5wcm92aWRlcihcImFnY051bGxMb2FkZXJcIiwgQWdjTnVsbExvYWRlclByb3ZpZGVyKTtcclxuICAgIFxyXG4gICAgLyoqIEZha2UgbG9hZGVyIHN0cmF0ZWd5LiBVc2UgdGhpcyBpZiB5b3UncmUgbG9hZGluZyB0aGUgZ29vZ2xlIGNoYXJ0cyBsaWJyYXJ5XHJcbiAgICAgKiAgaW4gc29tZSBub24tc3RhbmRhcmQgd2F5LlxyXG4gICAgICovXHJcblxyXG4gICAgZnVuY3Rpb24gQWdjTnVsbExvYWRlclByb3ZpZGVyKCl7XHJcbiAgICAgICAgdGhpcy5faGFzVHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2xpYnJhcnlPdmVycmlkZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fdHJpZ2dlckZ1bmN0aW9uID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgJGdldCxcclxuICAgICAgICAgICAgLy8ganVzdCBhY3QgYXMgaWYgaXQgd2FzIG5ldmVyIGZldGNoZWQuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWZlcnJlZClcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlZmVycmVkLnJlc29sdmUodGhpcy5fbGlicmFyeU92ZXJyaWRlIHx8IGdvb2dsZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhc1RyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICB9KS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuX2RlZmVycmVkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBBZ2NOdWxsTG9hZGVyUHJvdmlkZXIucHJvdG90eXBlLiRnZXQgPSBmdW5jdGlvbigkcSl7XHJcbiAgICAgICAgdGhpcy5fZGVmZXJyZWQgPSAkcS5kZWZlcigpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdGhpcy5faGFzVHJpZ2dlcilcclxuICAgICAgICAgICAgdGhpcy5fZGVmZXJyZWQucmVzb2x2ZSh0aGlzLl9saWJyYXJ5T3ZlcnJpZGUgfHwgZ29vZ2xlKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTtcclxuICAgIH07XHJcbiAgICBBZ2NOdWxsTG9hZGVyUHJvdmlkZXIucHJvdG90eXBlLiRnZXQuJGluamVjdCA9IFtcIiRxXCJdO1xyXG5cclxuICAgIEFnY051bGxMb2FkZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJpZ2dlckZ1bmN0aW9uID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAvLyBSZWNvcmRzIHRoYXQgdGhlIHRyaWdnZXIgZnVuY3Rpb24gd2FzIGZldGNoZWQuXHJcbiAgICAgICAgLy8gV2lsbCB3YWl0IGZvciBpdCB0byBiZSBjYWxsZWQgdG8gcmVzb2x2ZS5cclxuICAgICAgICAvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgbWFudWFsLCBidXQgZGVmZXJyZWQsIGxvYWRpbmcgb2ZcclxuICAgICAgICAvLyB0aGUgZ29vZ2xlIGNoYXJ0cyBsaWJyYXJ5LlxyXG4gICAgICAgIHRoaXMuX2hhc1RyaWdnZXIgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmlnZ2VyRnVuY3Rpb247XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKiBGb3JjZXMgYW5ndWxhci1nb29nbGUtY2hhcnQgdG8gbG9hZCB0aGlzIG9iamVjdCBhcyB0aGUgZ29vZ2xlIGxpYnJhcnkuXHJcbiAgICAgKiAgTWFrZXMgbm8gY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgcGFzc2VkIGlzIGNvbXBhdGlibGUuIFVzZVxyXG4gICAgICogIGF0IG93biByaXNrLlxyXG4gICAgICovXHJcbiAgICBBZ2NOdWxsTG9hZGVyUHJvdmlkZXIucHJvdG90eXBlLm92ZXJyaWRlTGlicmFyeSA9IGZ1bmN0aW9uKGxpYnJhcnkpe1xyXG4gICAgICAgIHRoaXMuX2xpYnJhcnlPdmVycmlkZSA9IGxpYnJhcnk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuKGZ1bmN0aW9uKCl7XHJcbiAgICBhbmd1bGFyLm1vZHVsZSgnZ29vZ2xlY2hhcnQnKVxyXG4gICAgICAgIC5kaXJlY3RpdmUoJ2FnY09uQ2xpY2snLCBvbkNsaWNrRGlyZWN0aXZlKTtcclxuXHJcbiAgICBmdW5jdGlvbiBvbkNsaWNrRGlyZWN0aXZlKCl7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgICAgICAgc2NvcGU6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXF1aXJlOiAnZ29vZ2xlQ2hhcnQnLFxyXG4gICAgICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGdvb2dsZUNoYXJ0Q29udHJvbGxlcil7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay4kaW5qZWN0ID0gWydhcmdzJywgJ2NoYXJ0JywgJ2NoYXJ0V3JhcHBlciddO1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soYXJncywgY2hhcnQsIGNoYXJ0V3JhcHBlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kZXZhbChhdHRycy5hZ2NPbkNsaWNrLCB7YXJnczogYXJncywgY2hhcnQ6IGNoYXJ0LCBjaGFydFdyYXBwZXI6IGNoYXJ0V3JhcHBlcn0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ29vZ2xlQ2hhcnRDb250cm9sbGVyLnJlZ2lzdGVyQ2hhcnRMaXN0ZW5lcignY2xpY2snLCBjYWxsYmFjaywgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59KSgpO1xyXG5cclxuLyogZ2xvYmFsIGFuZ3VsYXIgKi9cclxuKGZ1bmN0aW9uKCl7XHJcbiAgICBhbmd1bGFyLm1vZHVsZSgnZ29vZ2xlY2hhcnQnKVxyXG4gICAgICAgIC5kaXJlY3RpdmUoJ2FnY09uRXJyb3InLCBvbkVycm9yRGlyZWN0aXZlKTtcclxuICAgIGZ1bmN0aW9uIG9uRXJyb3JEaXJlY3RpdmUoKXtcclxuICAgICAgICByZXR1cm57XHJcbiAgICAgICAgICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAgICAgICAgIHNjb3BlOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVxdWlyZTogJ2dvb2dsZUNoYXJ0JyxcclxuICAgICAgICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBnb29nbGVDaGFydENvbnRyb2xsZXIpe1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suJGluamVjdCA9IFsnY2hhcnRXcmFwcGVyJywgJ2NoYXJ0JywgJ2FyZ3MnXTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGNoYXJ0V3JhcHBlciwgY2hhcnQsIGFyZ3Mpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5WYWx1ZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0V3JhcHBlcjogY2hhcnRXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydDogY2hhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBhcmdzWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnI6IGFyZ3NbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhcmdzWzBdLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhcmdzWzBdLm1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kZXZhbChhdHRycy5hZ2NPbkVycm9yLCByZXR1cm5WYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ29vZ2xlQ2hhcnRDb250cm9sbGVyLnJlZ2lzdGVyV3JhcHBlckxpc3RlbmVyKCdlcnJvcicsIGNhbGxiYWNrLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn0pKCk7XHJcbi8qIGdsb2JhbCBhbmd1bGFyICovXHJcblxyXG4oZnVuY3Rpb24oKXtcclxuICAgIGFuZ3VsYXIubW9kdWxlKCdnb29nbGVjaGFydCcpXHJcbiAgICAgICAgLmRpcmVjdGl2ZSgnYWdjT25Nb3VzZW91dCcsIGFnY09uTW91c2VvdXREaXJlY3RpdmUpO1xyXG4gICAgXHJcbiAgICBmdW5jdGlvbiBhZ2NPbk1vdXNlb3V0RGlyZWN0aXZlKCl7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgICAgICAgc2NvcGU6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXF1aXJlOiAnZ29vZ2xlQ2hhcnQnLFxyXG4gICAgICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGdvb2dsZUNoYXJ0Q29udHJvbGxlcil7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay4kaW5qZWN0ID0gWydhcmdzJywgJ2NoYXJ0JywgJ2NoYXJ0V3JhcHBlciddO1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soYXJncywgY2hhcnQsIGNoYXJ0V3JhcHBlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVyblBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRXcmFwcGVyOiBjaGFydFdyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0OiBjaGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBhcmdzWzBdLmNvbHVtbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBhcmdzWzBdLnJvd1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGV2YWwoYXR0cnMuYWdjT25Nb3VzZW91dCwgcmV0dXJuUGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGdvb2dsZUNoYXJ0Q29udHJvbGxlci5yZWdpc3RlckNoYXJ0TGlzdGVuZXIoJ29ubW91c2VvdXQnLCBjYWxsYmFjaywgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59KSgpO1xyXG4vKiBnbG9iYWwgYW5ndWxhciAqL1xyXG5cclxuKGZ1bmN0aW9uKCl7XHJcbiAgICBhbmd1bGFyLm1vZHVsZSgnZ29vZ2xlY2hhcnQnKVxyXG4gICAgICAgIC5kaXJlY3RpdmUoJ2FnY09uTW91c2VvdmVyJywgYWdjT25Nb3VzZW92ZXJEaXJlY3RpdmUpO1xyXG4gICAgXHJcbiAgICBmdW5jdGlvbiBhZ2NPbk1vdXNlb3ZlckRpcmVjdGl2ZSgpe1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAgICAgICAgIHNjb3BlOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVxdWlyZTogJ2dvb2dsZUNoYXJ0JyxcclxuICAgICAgICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBnb29nbGVDaGFydENvbnRyb2xsZXIpe1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suJGluamVjdCA9IFsnYXJncycsICdjaGFydCcsICdjaGFydFdyYXBwZXInXTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGFyZ3MsIGNoYXJ0LCBjaGFydFdyYXBwZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0V3JhcHBlcjogY2hhcnRXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydDogY2hhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogYXJnc1swXS5jb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogYXJnc1swXS5yb3dcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRldmFsKGF0dHJzLmFnY09uTW91c2VvdmVyLCByZXR1cm5QYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ29vZ2xlQ2hhcnRDb250cm9sbGVyLnJlZ2lzdGVyQ2hhcnRMaXN0ZW5lcignb25tb3VzZW92ZXInLCBjYWxsYmFjaywgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59KSgpO1xyXG4vKiBnbG9iYWwgYW5ndWxhciAqL1xyXG5cclxuKGZ1bmN0aW9uKCl7XHJcbiAgICBhbmd1bGFyLm1vZHVsZSgnZ29vZ2xlY2hhcnQnKVxyXG4gICAgICAgIC5kaXJlY3RpdmUoJ2FnY09uUmFuZ2VDaGFuZ2UnLCBhZ2NPblJhbmdlQ2hhbmdlRGlyZWN0aXZlKTtcclxuXHJcbiAgICBmdW5jdGlvbiBhZ2NPblJhbmdlQ2hhbmdlRGlyZWN0aXZlKCl7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgICAgICAgc2NvcGU6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXF1aXJlOiAnZ29vZ2xlQ2hhcnQnLFxyXG4gICAgICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGdvb2dsZUNoYXJ0Q29udHJvbGxlcil7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay4kaW5qZWN0ID0gWydhcmdzJywgJ2NoYXJ0JywgJ2NoYXJ0V3JhcHBlciddO1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soYXJncywgY2hhcnQsIGNoYXJ0V3JhcHBlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVyblBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRXcmFwcGVyOiBjaGFydFdyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0OiBjaGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGFyZ3NbMF0uc3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogYXJnc1swXS5lbmRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRldmFsKGF0dHJzLmFnY09uUmFuZ2VDaGFuZ2UsIHJldHVyblBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBnb29nbGVDaGFydENvbnRyb2xsZXIucmVnaXN0ZXJDaGFydExpc3RlbmVyKCdyYW5nZWNoYW5nZScsIGNhbGxiYWNrLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn0pKCk7XHJcblxyXG4vKiBnbG9iYWwgYW5ndWxhciAqL1xyXG4oZnVuY3Rpb24oKXtcclxuICAgIGFuZ3VsYXIubW9kdWxlKCdnb29nbGVjaGFydCcpXHJcbiAgICAgICAgLmRpcmVjdGl2ZSgnYWdjT25SZWFkeScsIG9uUmVhZHlEaXJlY3RpdmUpO1xyXG4gICAgICAgIFxyXG4gICAgb25SZWFkeURpcmVjdGl2ZS4kaW5qZWN0ID0gWyckdGltZW91dCddO1xyXG4gICAgZnVuY3Rpb24gb25SZWFkeURpcmVjdGl2ZSgpe1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAgICAgICAgIHNjb3BlOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVxdWlyZTogJ2dvb2dsZUNoYXJ0JyxcclxuICAgICAgICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBnb29nbGVDaGFydENvbnRyb2xsZXIpe1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suJGluamVjdD1bJ2NoYXJ0V3JhcHBlciddO1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soY2hhcnRXcmFwcGVyKXtcclxuICAgICAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGV2YWwoYXR0cnMuYWdjT25SZWFkeSwge2NoYXJ0V3JhcHBlcjogY2hhcnRXcmFwcGVyfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBnb29nbGVDaGFydENvbnRyb2xsZXIucmVnaXN0ZXJXcmFwcGVyTGlzdGVuZXIoJ3JlYWR5JywgY2FsbGJhY2ssIHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufSkoKTtcclxuXHJcbi8qIGdsb2JhbCBhbmd1bGFyICovXHJcbihmdW5jdGlvbigpe1xyXG4gICAgYW5ndWxhci5tb2R1bGUoJ2dvb2dsZWNoYXJ0JylcclxuICAgICAgICAuZGlyZWN0aXZlKCdhZ2NPblNlbGVjdCcsIG9uU2VsZWN0RGlyZWN0aXZlKTtcclxuICAgICAgICBcclxuICAgIGZ1bmN0aW9uIG9uU2VsZWN0RGlyZWN0aXZlKCl7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgICAgICAgc2NvcGU6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXF1aXJlOiAnZ29vZ2xlQ2hhcnQnLFxyXG4gICAgICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGdvb2dsZUNoYXJ0Q29udHJvbGxlcil7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay4kaW5qZWN0ID0gWydjaGFydFdyYXBwZXInLCAnY2hhcnQnXTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGNoYXJ0V3JhcHBlciwgY2hhcnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RFdmVudFJldFBhcmFtcyA9IHsgc2VsZWN0ZWRJdGVtczogY2hhcnQuZ2V0U2VsZWN0aW9uKCkgfTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgcGVvcGxlIHVzaW5nICdzZWxlY3RlZEl0ZW0nIHRoYXQgb25seSB3YW50ZWQgdGhlIGZpcnN0IHNlbGVjdGlvbi5cclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFdmVudFJldFBhcmFtcy5zZWxlY3RlZEl0ZW0gPSBzZWxlY3RFdmVudFJldFBhcmFtcy5zZWxlY3RlZEl0ZW1zWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEV2ZW50UmV0UGFyYW1zLmNoYXJ0V3JhcHBlciA9IGNoYXJ0V3JhcHBlcjtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFdmVudFJldFBhcmFtcy5jaGFydCA9IGNoYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRldmFsKGF0dHJzLmFnY09uU2VsZWN0LCBzZWxlY3RFdmVudFJldFBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBnb29nbGVDaGFydENvbnRyb2xsZXIucmVnaXN0ZXJXcmFwcGVyTGlzdGVuZXIoJ3NlbGVjdCcsIGNhbGxiYWNrLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn0pKCk7XHJcbi8qIGdsb2JhbCBhbmd1bGFyICovXHJcbihmdW5jdGlvbigpIHtcclxuICAgIGFuZ3VsYXIubW9kdWxlKFwiZ29vZ2xlY2hhcnRcIilcclxuICAgICAgICAuZmFjdG9yeShcImFnY1NjcmlwdFRhZ0hlbHBlclwiLCBhZ2NTY3JpcHRUYWdIZWxwZXJGYWN0b3J5KTtcclxuXHJcbiAgICBhZ2NTY3JpcHRUYWdIZWxwZXJGYWN0b3J5LiRpbmplY3QgPSBbXCIkcVwiLCBcIiRkb2N1bWVudFwiXTtcclxuICAgIGZ1bmN0aW9uIGFnY1NjcmlwdFRhZ0hlbHBlckZhY3RvcnkoJHEsICRkb2N1bWVudClcclxuICAgIHtcclxuICAgICAgICAvKiogQWRkIGEgc2NyaXB0IHRhZyB0byB0aGUgZG9jdW1lbnQncyBoZWFkIHNlY3Rpb24gYW5kIHJldHVybiBhbiBhbmd1bGFyXHJcbiAgICAgICAgICAqIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY3JpcHQgaGFzIGxvYWRlZC5cclxuICAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb24gYWdjU2NyaXB0VGFnSGVscGVyKHVybClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCk7XHJcbiAgICAgICAgICAgIHZhciBoZWFkID0gJGRvY3VtZW50LmZpbmQoJ2hlYWQnKTtcclxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGFuZ3VsYXIuZWxlbWVudCgnPHNjcmlwdD48L3NjcmlwdD4nKTtcclxuXHJcbiAgICAgICAgICAgIHNjcmlwdC5hdHRyKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xyXG5cclxuICAgICAgICAgICAgc2NyaXB0Lm9uKCdsb2FkJywgb25Mb2FkKTtcclxuICAgICAgICAgICAgc2NyaXB0Lm9uKCdlcnJvcicsIG9uRXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgc2NyaXB0LmF0dHIoJ3NyYycsIHVybCk7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGlzOiBoZWFkLmFwcGVuZChzY3JpcHQpO1xyXG4gICAgICAgICAgICAvLyBBZGRzIHRoZSB0YWcsIGJ1dCBldmVudCBoYW5kbGVzIGRvbid0IHdvcmsuXHJcbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgaXMgdG8gYWRkIGVsZW1lbnQgd2l0aCBuYXRpdmUgYXBwZW5kQ2hpbGQoKS5cclxuICAgICAgICAgICAgaGVhZFswXS5hcHBlbmRDaGlsZChzY3JpcHRbMF0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gb25Mb2FkKCkge1xyXG4gICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBvbkVycm9yKCkge1xyXG4gICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFnY1NjcmlwdFRhZ0hlbHBlcjtcclxuICAgIH1cclxufSkoKTtcclxuXHJcbi8qIGdsb2JhbCBhbmd1bGFyLCBnb29nbGUgKi9cclxuLyoganNoaW50IC1XMDcyICovXHJcbihmdW5jdGlvbigpe1xyXG4gICAgYW5ndWxhci5tb2R1bGUoJ2dvb2dsZWNoYXJ0JylcclxuICAgICAgICAuZGlyZWN0aXZlKCdnb29nbGVDaGFydCcsIGdvb2dsZUNoYXJ0RGlyZWN0aXZlKTtcclxuICAgICAgICBcclxuICAgIGdvb2dsZUNoYXJ0RGlyZWN0aXZlLiRpbmplY3QgPSBbXTtcclxuICAgICAgICBcclxuICAgIGZ1bmN0aW9uIGdvb2dsZUNoYXJ0RGlyZWN0aXZlKCkge1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICAgICAgICBzY29wZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6ICdHb29nbGVDaGFydENvbnRyb2xsZXInXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufSkoKTtcclxuXHJcbi8qIGdsb2JhbCBhbmd1bGFyICovXHJcbihmdW5jdGlvbigpe1xyXG4gICAgYW5ndWxhci5tb2R1bGUoJ2dvb2dsZWNoYXJ0JylcclxuICAgICAgICAudmFsdWUoJ2dvb2dsZUNoYXJ0QXBpQ29uZmlnJywge1xyXG4gICAgICAgICAgICB2ZXJzaW9uOiAnMScsXHJcbiAgICAgICAgICAgIG9wdGlvbmFsU2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgICAgIHBhY2thZ2VzOiBbJ2NvcmVjaGFydCddXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxufSkoKTtcclxuLyogZ2xvYmFsIGFuZ3VsYXIgKi9cclxuKGZ1bmN0aW9uKCl7XHJcbiAgICBhbmd1bGFyLm1vZHVsZSgnZ29vZ2xlY2hhcnQnKVxyXG4gICAgICAgIC5mYWN0b3J5KCdnb29nbGVDaGFydEFwaVByb21pc2UnLCBnb29nbGVDaGFydEFwaVByb21pc2VGYWN0b3J5KTtcclxuICAgICAgICBcclxuICAgIGdvb2dsZUNoYXJ0QXBpUHJvbWlzZUZhY3RvcnkuJGluamVjdCA9IFsnYWdjTGlicmFyeUxvYWRlciddO1xyXG5cclxuICAgIC8qKiBIZXJlIGZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IG9ubHkuICovXHJcbiAgICBmdW5jdGlvbiBnb29nbGVDaGFydEFwaVByb21pc2VGYWN0b3J5KGFnY0xpYnJhcnlMb2FkZXIpIHtcclxuICAgICAgICByZXR1cm4gYWdjTGlicmFyeUxvYWRlcjtcclxuICAgIH1cclxufSkoKTtcclxuXHJcbi8qIGdsb2JhbCBhbmd1bGFyICovXHJcbihmdW5jdGlvbigpIHtcclxuICAgIGFuZ3VsYXIubW9kdWxlKCdnb29nbGVjaGFydCcpXHJcbiAgICAgICAgLmZhY3RvcnkoJ0dvb2dsZUNoYXJ0U2VydmljZScsIEdvb2dsZUNoYXJ0U2VydmljZUZhY3RvcnkpO1xyXG5cclxuICAgIEdvb2dsZUNoYXJ0U2VydmljZUZhY3RvcnkuJGluamVjdCA9IFsnYWdjTGlicmFyeUxvYWRlcicsICckaW5qZWN0b3InLCAnJHEnLCAnRm9ybWF0TWFuYWdlciddO1xyXG5cclxuICAgIGZ1bmN0aW9uIEdvb2dsZUNoYXJ0U2VydmljZUZhY3RvcnkoYWdjTGlicmFyeUxvYWRlciwgJGluamVjdG9yLCAkcSwgRm9ybWF0TWFuYWdlcikge1xyXG4gICAgICAgIGZ1bmN0aW9uIEdvb2dsZUNoYXJ0U2VydmljZSgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICBzZWxmLmRyYXcgPSBkcmF3O1xyXG4gICAgICAgICAgICBzZWxmLmdldENoYXJ0V3JhcHBlciA9IGdldENoYXJ0V3JhcHBlcjtcclxuICAgICAgICAgICAgc2VsZi5nZXREYXRhID0gZ2V0RGF0YTtcclxuICAgICAgICAgICAgc2VsZi5nZXRFbGVtZW50ID0gZ2V0RWxlbWVudDtcclxuICAgICAgICAgICAgc2VsZi5nZXRPcHRpb24gPSBnZXRPcHRpb247XHJcbiAgICAgICAgICAgIHNlbGYuZ2V0T3B0aW9ucyA9IGdldE9wdGlvbnM7XHJcbiAgICAgICAgICAgIHNlbGYuZ2V0VmlldyA9IGdldFZpZXc7XHJcbiAgICAgICAgICAgIHNlbGYuZ2V0UmVhZHlQcm9taXNlID0gZ2V0UmVhZHlQcm9taXNlO1xyXG4gICAgICAgICAgICBzZWxmLmlzQXBpUmVhZHkgPSBpc0FwaVJlYWR5O1xyXG4gICAgICAgICAgICBzZWxmLnJlZ2lzdGVyQ2hhcnRMaXN0ZW5lciA9IHJlZ2lzdGVyQ2hhcnRMaXN0ZW5lcjtcclxuICAgICAgICAgICAgc2VsZi5yZWdpc3RlclNlcnZpY2VMaXN0ZW5lciA9IHJlZ2lzdGVyU2VydmljZUxpc3RlbmVyO1xyXG4gICAgICAgICAgICBzZWxmLnJlZ2lzdGVyV3JhcHBlckxpc3RlbmVyID0gcmVnaXN0ZXJXcmFwcGVyTGlzdGVuZXI7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0RGF0YSA9IHNldERhdGE7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0RWxlbWVudCA9IHNldEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0T3B0aW9uID0gc2V0T3B0aW9uO1xyXG4gICAgICAgICAgICBzZWxmLnNldE9wdGlvbnMgPSBzZXRPcHRpb25zO1xyXG4gICAgICAgICAgICBzZWxmLnNldHVwID0gc2V0dXA7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0VmlldyA9IHNldFZpZXc7XHJcblxyXG4gICAgICAgICAgICB2YXIgJGdvb2dsZSxcclxuICAgICAgICAgICAgICAgIF9saWJyYXJ5UHJvbWlzZSxcclxuICAgICAgICAgICAgICAgIF9hcGlSZWFkeSxcclxuICAgICAgICAgICAgICAgIF9jaGFydFdyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICBfZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIF9jaGFydFR5cGUsXHJcbiAgICAgICAgICAgICAgICBfZGF0YSxcclxuICAgICAgICAgICAgICAgIF92aWV3LFxyXG4gICAgICAgICAgICAgICAgX29wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICBfZm9ybWF0dGVycyxcclxuICAgICAgICAgICAgICAgIF9pbm5lclZpc3VhbGl6YXRpb24sXHJcbiAgICAgICAgICAgICAgICBfZm9ybWF0TWFuYWdlcixcclxuICAgICAgICAgICAgICAgIF9uZWVkc1VwZGF0ZSA9IHRydWUsXHJcbiAgICAgICAgICAgICAgICBfY3VzdG9tRm9ybWF0dGVycyxcclxuICAgICAgICAgICAgICAgIF9zZXJ2aWNlRGVmZXJyZWQsXHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlTGlzdGVuZXJzID0ge30sXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyTGlzdGVuZXJzID0ge30sXHJcbiAgICAgICAgICAgICAgICBjaGFydExpc3RlbmVycyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgX2luaXQoKTtcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIF9hY3RpdmF0ZVNlcnZpY2VFdmVudChldmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShzZXJ2aWNlTGlzdGVuZXJzW2V2ZW50TmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlcnZpY2VMaXN0ZW5lcnNbZXZlbnROYW1lXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTGlzdGVuZXJzW2V2ZW50TmFtZV1baV0oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIF9hcGlMb2FkRmFpbChyZWFzb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdCBzdXJlIHdoYXQgdG8gZG8gaWYgdGhpcyBkb2VzIGhhcHBlbi5cclxuICAgICAgICAgICAgICAgIC8vIFBvc3QgeW91ciBzdWdnZXN0aW9ucyBpbiB0aGUgaXNzdWVzIHRyYWNrZXIgYXRcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyLWdvb2dsZS1jaGFydC9hbmd1bGFyLWdvb2dsZS1jaGFydC9cclxuICAgICAgICAgICAgICAgIHJldHVybiByZWFzb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIF9hcGlMb2FkU3VjY2VzcyhnKSB7XHJcbiAgICAgICAgICAgICAgICAkZ29vZ2xlID0gZztcclxuICAgICAgICAgICAgICAgIF9hcGlSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBfc2VydmljZURlZmVycmVkLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gX2NvbnRpbnVlU2V0dXAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFuZ3VsYXIuaXNEZWZpbmVkKF9jaGFydFdyYXBwZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NoYXJ0V3JhcHBlciA9IG5ldyAkZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ2hhcnRXcmFwcGVyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRUeXBlOiBfY2hhcnRUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVGFibGU6IF9kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3OiBfdmlldyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcklkOiBfZWxlbWVudFswXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZWdpc3Rlckxpc3RlbmVyc1dpdGhHb29nbGUoX2NoYXJ0V3JhcHBlciwgd3JhcHBlckxpc3RlbmVycyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfY2hhcnRXcmFwcGVyLnNldENoYXJ0VHlwZShfY2hhcnRUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBfY2hhcnRXcmFwcGVyLnNldERhdGFUYWJsZShfZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NoYXJ0V3JhcHBlci5zZXRWaWV3KF92aWV3KTtcclxuICAgICAgICAgICAgICAgICAgICBfY2hhcnRXcmFwcGVyLnNldE9wdGlvbnMoX29wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghX2Zvcm1hdE1hbmFnZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBfZm9ybWF0TWFuYWdlciA9IG5ldyBGb3JtYXRNYW5hZ2VyKCRnb29nbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfZm9ybWF0TWFuYWdlci5hcHBseUZvcm1hdHMoX2NoYXJ0V3JhcHBlci5nZXREYXRhVGFibGUoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2Zvcm1hdHRlcnMsIF9jdXN0b21Gb3JtYXR0ZXJzKS5yZXF1aXJlc0h0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBfY2hhcnRXcmFwcGVyLnNldE9wdGlvbignYWxsb3dIdG1sJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX25lZWRzVXBkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIENyZWRpdCBmb3IgdGhpcyBzb2x1dGlvbjpcclxuICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjAxMjU1NzIvMzc3MTk3NlxyXG4gICAgICAgICAgICBmdW5jdGlvbiBfZ2V0U2V0RGVzY2VuZGFudFByb3Aob2JqLCBkZXNjLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IGRlc2MgPyBkZXNjLnNwbGl0KFwiLlwiKSA6IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChhcnIubGVuZ3RoICYmIG9iaikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wID0gYXJyLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbmV3IFJlZ0V4cChcIiguKylcXFxcWyhbMC05XSopXFxcXF1cIikuZXhlYyhjb21wKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmpbY29tcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2NvbXBdID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpbY29tcF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gb2JqW2NvbXBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIF9oYW5kbGVSZWFkeSgpIHtcclxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNoYXJ0V3JhcHBlciBpcyByZWFkeSwgY2hlY2sgdG8gc2VlIGlmIHRoZSBpbm5lciBjaGFydFxyXG4gICAgICAgICAgICAgICAgLy8gaGFzIGNoYW5nZWQuIElmIGl0IGhhcywgcmUtcmVnaXN0ZXIgbGlzdGVuZXJzIG9udG8gdGhhdCBjaGFydC5cclxuICAgICAgICAgICAgICAgIGlmIChfaW5uZXJWaXN1YWxpemF0aW9uICE9PSBfY2hhcnRXcmFwcGVyLmdldENoYXJ0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaW5uZXJWaXN1YWxpemF0aW9uID0gX2NoYXJ0V3JhcHBlci5nZXRDaGFydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZWdpc3Rlckxpc3RlbmVyc1dpdGhHb29nbGUoX2lubmVyVmlzdWFsaXphdGlvbiwgY2hhcnRMaXN0ZW5lcnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBfaW5pdCgpIHtcclxuICAgICAgICAgICAgICAgIF9hcGlSZWFkeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgX3NlcnZpY2VEZWZlcnJlZCA9ICRxLmRlZmVyKCk7XHJcbiAgICAgICAgICAgICAgICAvL2tlZXBzIHRoZSByZXN1bHRpbmcgcHJvbWlzZSB0byBjaGFpbiBvbiBvdGhlciBhY3Rpb25zXHJcbiAgICAgICAgICAgICAgICBfbGlicmFyeVByb21pc2UgPSBhZ2NMaWJyYXJ5TG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oX2FwaUxvYWRTdWNjZXNzKVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChfYXBpTG9hZEZhaWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyV3JhcHBlckxpc3RlbmVyKCdyZWFkeScsIF9oYW5kbGVSZWFkeSwgc2VsZik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIF9yZWdpc3Rlckxpc3RlbmVyKGxpc3RlbmVyQ29sbGVjdGlvbiwgZXZlbnROYW1lLCBsaXN0ZW5lckZuLCBsaXN0ZW5lck9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgYnkgdGhlIGNoYXJ0cyBBUEkuXHJcbiAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIHRoZSB3cmFwcGVyIGZ1bmN0aW9uIGFsbG93cyB0aGUgdXNlIG9mIERJIGZvclxyXG4gICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBjYWxsZWQgZnVuY3Rpb24uXHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXJXcmFwcGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2FscyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRXcmFwcGVyOiBfY2hhcnRXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydDogX2NoYXJ0V3JhcHBlci5nZXRDaGFydCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmd1bWVudHNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICRpbmplY3Rvci5pbnZva2UobGlzdGVuZXJGbiwgbGlzdGVuZXJPYmplY3QgfHwgdGhpcywgbG9jYWxzKTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGxpc3RlbmVyQ29sbGVjdGlvbikgJiYgYW5ndWxhci5pc09iamVjdChsaXN0ZW5lckNvbGxlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmd1bGFyLmlzQXJyYXkobGlzdGVuZXJDb2xsZWN0aW9uW2V2ZW50TmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQ29sbGVjdGlvbltldmVudE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQ29sbGVjdGlvbltldmVudE5hbWVdLnB1c2gobGlzdGVuZXJXcmFwcGVyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChsaXN0ZW5lcldyYXBwZXIuZ29vZ2xlTGlzdGVuZXJIYW5kbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ29vZ2xlLnZpc3VhbGl6YXRpb24uZXZlbnRzLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyV3JhcHBlci5nb29nbGVMaXN0ZW5lckhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuSW5kZXggPSBsaXN0ZW5lckNvbGxlY3Rpb25bZXZlbnROYW1lXS5pbmRleE9mKGxpc3RlbmVyV3JhcHBlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQ29sbGVjdGlvbltldmVudE5hbWVdLnNwbGljZShmbkluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyQ29sbGVjdGlvbltldmVudE5hbWVdLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJDb2xsZWN0aW9uW2V2ZW50TmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBfcmVnaXN0ZXJMaXN0ZW5lcnNXaXRoR29vZ2xlKGV2ZW50U291cmNlLCBsaXN0ZW5lckNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBsaXN0ZW5lckNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJDb2xsZWN0aW9uLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkgJiYgYW5ndWxhci5pc0FycmF5KGxpc3RlbmVyQ29sbGVjdGlvbltldmVudE5hbWVdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBmbkl0ZXJhdG9yID0gMDsgZm5JdGVyYXRvciA8IGxpc3RlbmVyQ29sbGVjdGlvbltldmVudE5hbWVdLmxlbmd0aDsgZm5JdGVyYXRvcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGxpc3RlbmVyQ29sbGVjdGlvbltldmVudE5hbWVdW2ZuSXRlcmF0b3JdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQ29sbGVjdGlvbltldmVudE5hbWVdW2ZuSXRlcmF0b3JdLmdvb2dsZUxpc3RlbmVySGFuZGxlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdvb2dsZS52aXN1YWxpemF0aW9uLmV2ZW50cy5hZGRMaXN0ZW5lcihldmVudFNvdXJjZSwgZXZlbnROYW1lLCBsaXN0ZW5lckNvbGxlY3Rpb25bZXZlbnROYW1lXVtmbkl0ZXJhdG9yXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIF9ydW5EcmF3Q3ljbGUoKSB7XHJcbiAgICAgICAgICAgICAgICBfYWN0aXZhdGVTZXJ2aWNlRXZlbnQoJ2JlZm9yZURyYXcnKTtcclxuICAgICAgICAgICAgICAgIF9jaGFydFdyYXBwZXIuZHJhdygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhpczpcclxuICAgICAgICAgICAgICAgIC0gd2FpdHMgZm9yIEFQSSB0byBsb2FkLCBpZiBub3QgYWxyZWFkeSBsb2FkZWRcclxuICAgICAgICAgICAgICAgIC0gc2V0cyB1cCBDaGFydFdyYXBwZXIgb2JqZWN0IChjcmVhdGUgb3IgdXBkYXRlKVxyXG4gICAgICAgICAgICAgICAgLSBzY2hlZHVsZXMgdGltZW91dCBldmVudCB0byBkcmF3IGNoYXJ0XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRyYXcoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX25lZWRzVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2xpYnJhcnlQcm9taXNlID0gX2xpYnJhcnlQcm9taXNlLnRoZW4oX2NvbnRpbnVlU2V0dXApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgX2xpYnJhcnlQcm9taXNlID0gX2xpYnJhcnlQcm9taXNlLnRoZW4oX3J1bkRyYXdDeWNsZSgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2hhcnRXcmFwcGVyKCkge1xyXG4gICAgICAgICAgICAgICAgLy8gTW9zdCBnZXQgZnVuY3Rpb25zIG9uIHRoaXMgaW50ZXJmYWNlIHJldHVybiBjb3BpZXMsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzIG9uZSBzaG91bGQgcmV0dXJuIHJlZmVyZW5jZSBzbyBhcyB0byBleHBvc2UgdGhlIFxyXG4gICAgICAgICAgICAgICAgLy9jaGFydCBhcGkgdG8gdXNlcnNcclxuICAgICAgICAgICAgICAgIHJldHVybiBfY2hhcnRXcmFwcGVyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXREYXRhKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfZGF0YSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhbmd1bGFyLmNvcHkoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEVsZW1lbnQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX2VsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldE9wdGlvbihuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXRTZXREZXNjZW5kYW50UHJvcChvcHRpb25zLCBuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0T3B0aW9ucygpIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gX29wdGlvbnMgfHwge307XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYW5ndWxhci5jb3B5KG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRSZWFkeVByb21pc2UoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3NlcnZpY2VEZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRWaWV3KCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBfdmlldyB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhbmd1bGFyLmNvcHkodmlldyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGlzQXBpUmVhZHkoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX2FwaVJlYWR5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWdpc3RlckNoYXJ0TGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lckZuLCBsaXN0ZW5lck9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdpc3Rlckxpc3RlbmVyKGNoYXJ0TGlzdGVuZXJzLCBldmVudE5hbWUsIGxpc3RlbmVyRm4sIGxpc3RlbmVyT2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXJTZXJ2aWNlTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lckZuLCBsaXN0ZW5lck9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdpc3Rlckxpc3RlbmVyKHNlcnZpY2VMaXN0ZW5lcnMsIGV2ZW50TmFtZSwgbGlzdGVuZXJGbiwgbGlzdGVuZXJPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWdpc3RlcldyYXBwZXJMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyRm4sIGxpc3RlbmVyT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2lzdGVyTGlzdGVuZXIod3JhcHBlckxpc3RlbmVycywgZXZlbnROYW1lLCBsaXN0ZW5lckZuLCBsaXN0ZW5lck9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHNldERhdGEoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2RhdGEgPSBhbmd1bGFyLmNvcHkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gc2V0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0VsZW1lbnQoZWxlbWVudCkgJiYgX2VsZW1lbnQgIT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBfZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgb3V0IHRoZSBjaGFydFdyYXBwZXIgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byBuZWVkIGEgbmV3IG9uZVxyXG4gICAgICAgICAgICAgICAgICAgIF9jaGFydFdyYXBwZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIF9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHNldE9wdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgX29wdGlvbnMgPSBfb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICAgICAgICAgIF9nZXRTZXREZXNjZW5kYW50UHJvcChfb3B0aW9ucywgbmFtZSwgYW5ndWxhci5jb3B5KHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICBfbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChvcHRpb25zKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9vcHRpb25zID0gYW5ndWxhci5jb3B5KG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwKGVsZW1lbnQsIGNoYXJ0VHlwZSwgZGF0YSwgdmlldywgb3B0aW9ucywgZm9ybWF0dGVycywgY3VzdG9tRm9ybWF0dGVycykge1xyXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB2YWx1ZXMgaWYgYWxyZWFkeSBzZXQsXHJcbiAgICAgICAgICAgICAgICAvLyBjYW4gY2FsbCBzZXR1cCgpIHdpdGggbnVsbHMgdG8ga2VlcFxyXG4gICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICBfZWxlbWVudCA9IGVsZW1lbnQgfHwgX2VsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBfY2hhcnRUeXBlID0gY2hhcnRUeXBlIHx8IF9jaGFydFR5cGU7XHJcbiAgICAgICAgICAgICAgICBfZGF0YSA9IGRhdGEgfHwgX2RhdGE7XHJcbiAgICAgICAgICAgICAgICBfdmlldyA9IHZpZXcgfHwgX3ZpZXc7XHJcbiAgICAgICAgICAgICAgICBfb3B0aW9ucyA9IG9wdGlvbnMgfHwgX29wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBfZm9ybWF0dGVycyA9IGZvcm1hdHRlcnMgfHwgX2Zvcm1hdHRlcnM7XHJcbiAgICAgICAgICAgICAgICBfY3VzdG9tRm9ybWF0dGVycyA9IGN1c3RvbUZvcm1hdHRlcnMgfHwgX2N1c3RvbUZvcm1hdHRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgX2xpYnJhcnlQcm9taXNlID0gX2xpYnJhcnlQcm9taXNlLnRoZW4oX2NvbnRpbnVlU2V0dXApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZXRWaWV3KHZpZXcpIHtcclxuICAgICAgICAgICAgICAgIF92aWV3ID0gYW5ndWxhci5jb3B5KHZpZXcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBHb29nbGVDaGFydFNlcnZpY2U7XHJcbiAgICB9XHJcbn0pKCk7XHJcblxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZy1nb29nbGUtY2hhcnQuanMubWFwIiwiLyohIFxuICogYW5ndWxhci1ob3RrZXlzIHYxLjcuMFxuICogaHR0cHM6Ly9jaGllZmZhbmN5cGFudHMuZ2l0aHViLmlvL2FuZ3VsYXItaG90a2V5c1xuICogQ29weXJpZ2h0IChjKSAyMDE2IFdlcyBDcnV2ZXJcbiAqIExpY2Vuc2U6IE1JVFxuICovXG4vKlxuICogYW5ndWxhci1ob3RrZXlzXG4gKlxuICogQXV0b21hdGljIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgeW91ciBhbmd1bGFyIGFwcHNcbiAqXG4gKiAoYykgMjAxNiBXZXMgQ3J1dmVyXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG5cbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGFuZ3VsYXIubW9kdWxlKCdjZnAuaG90a2V5cycsIFtdKS5wcm92aWRlcignaG90a2V5cycsIFsnJGluamVjdG9yJywgZnVuY3Rpb24oJGluamVjdG9yKSB7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmFibGUgc2V0dGluZyB0byBkaXNhYmxlIHRoZSBjaGVhdHNoZWV0IGVudGlyZWx5XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pbmNsdWRlQ2hlYXRTaGVldCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmFibGUgc2V0dGluZyB0byBkaXNhYmxlIG5nUm91dGUgaG9va3NcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnVzZU5nUm91dGUgPSAkaW5qZWN0b3IuaGFzKCduZ1ZpZXdEaXJlY3RpdmUnKTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYWJsZSBzZXR0aW5nIGZvciB0aGUgY2hlYXQgc2hlZXQgdGl0bGVcbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuXG4gICAgdGhpcy50ZW1wbGF0ZVRpdGxlID0gJ0tleWJvYXJkIFNob3J0Y3V0czonO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhYmxlIHNldHRpbmdzIGZvciB0aGUgY2hlYXQgc2hlZXQgaGVhZGVyIGFuZCBmb290ZXIuICBCb3RoIGFyZSBIVE1MLCBhbmQgdGhlIGhlYWRlclxuICAgICAqIG92ZXJyaWRlcyB0aGUgbm9ybWFsIHRpdGxlIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMudGVtcGxhdGVIZWFkZXIgPSBudWxsO1xuICAgIHRoaXMudGVtcGxhdGVGb290ZXIgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2hlYXQgc2hlZXQgdGVtcGxhdGUgaW4gdGhlIGV2ZW50IHlvdSB3YW50IHRvIHRvdGFsbHkgY3VzdG9taXplIGl0LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy50ZW1wbGF0ZSA9ICc8ZGl2IGNsYXNzPVwiY2ZwLWhvdGtleXMtY29udGFpbmVyIGZhZGVcIiBuZy1jbGFzcz1cIntpbjogaGVscFZpc2libGV9XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjxkaXYgY2xhc3M9XCJjZnAtaG90a2V5c1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICc8aDQgY2xhc3M9XCJjZnAtaG90a2V5cy10aXRsZVwiIG5nLWlmPVwiIWhlYWRlclwiPnt7IHRpdGxlIH19PC9oND4nICtcbiAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBuZy1iaW5kLWh0bWw9XCJoZWFkZXJcIiBuZy1pZj1cImhlYWRlclwiPjwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAgICc8dGFibGU+PHRib2R5PicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzx0ciBuZy1yZXBlYXQ9XCJob3RrZXkgaW4gaG90a2V5cyB8IGZpbHRlcjp7IGRlc2NyaXB0aW9uOiBcXCchJCR1bmRlZmluZWQkJFxcJyB9XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8dGQgY2xhc3M9XCJjZnAtaG90a2V5cy1rZXlzXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIG5nLXJlcGVhdD1cImtleSBpbiBob3RrZXkuZm9ybWF0KCkgdHJhY2sgYnkgJGluZGV4XCIgY2xhc3M9XCJjZnAtaG90a2V5cy1rZXlcIj57eyBrZXkgfX08L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8L3RkPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPVwiY2ZwLWhvdGtleXMtdGV4dFwiPnt7IGhvdGtleS5kZXNjcmlwdGlvbiB9fTwvdGQ+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC90cj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAnPC90Ym9keT48L3RhYmxlPicgK1xuICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IG5nLWJpbmQtaHRtbD1cImZvb3RlclwiIG5nLWlmPVwiZm9vdGVyXCI+PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjZnAtaG90a2V5cy1jbG9zZVwiIG5nLWNsaWNrPVwidG9nZ2xlQ2hlYXRTaGVldCgpXCI+JiMyMTU7PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj48L2Rpdj4nO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhYmxlIHNldHRpbmcgZm9yIHRoZSBjaGVhdCBzaGVldCBob3RrZXlcbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY2hlYXRTaGVldEhvdGtleSA9ICc/JztcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYWJsZSBzZXR0aW5nIGZvciB0aGUgY2hlYXQgc2hlZXQgZGVzY3JpcHRpb25cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY2hlYXRTaGVldERlc2NyaXB0aW9uID0gJ1Nob3cgLyBoaWRlIHRoaXMgaGVscCBtZW51JztcblxuICAgIHRoaXMuJGdldCA9IFsnJHJvb3RFbGVtZW50JywgJyRyb290U2NvcGUnLCAnJGNvbXBpbGUnLCAnJHdpbmRvdycsICckZG9jdW1lbnQnLCBmdW5jdGlvbiAoJHJvb3RFbGVtZW50LCAkcm9vdFNjb3BlLCAkY29tcGlsZSwgJHdpbmRvdywgJGRvY3VtZW50KSB7XG5cbiAgICAgIHZhciBtb3VzZVRyYXBFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgICAgIG1vdXNlVHJhcEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdW5wYXVzZSgpIHtcbiAgICAgICAgbW91c2VUcmFwRW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIG1vbmtleXBhdGNoIE1vdXNldHJhcCdzIHN0b3BDYWxsYmFjaygpIGZ1bmN0aW9uXG4gICAgICAvLyB0aGlzIHZlcnNpb24gZG9lc24ndCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBlbGVtZW50IGlzIGFuIElOUFVULCBTRUxFQ1QsIG9yIFRFWFRBUkVBXG4gICAgICAvLyAoaW5zdGVhZCB3ZSB3aWxsIHBlcmZvcm0gdGhpcyBjaGVjayBwZXIta2V5IGluIHRoZSBfYWRkKCkgbWV0aG9kKVxuICAgICAgTW91c2V0cmFwLnByb3RvdHlwZS5zdG9wQ2FsbGJhY2sgPSBmdW5jdGlvbihldmVudCwgZWxlbWVudCkge1xuICAgICAgICBpZiAoIW1vdXNlVHJhcEVuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3MgXCJtb3VzZXRyYXBcIiB0aGVuIG5vIG5lZWQgdG8gc3RvcFxuICAgICAgICBpZiAoKCcgJyArIGVsZW1lbnQuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgbW91c2V0cmFwICcpID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGVsZW1lbnQuY29udGVudEVkaXRhYmxlICYmIGVsZW1lbnQuY29udGVudEVkaXRhYmxlID09ICd0cnVlJyk7XG4gICAgICB9O1xuXG4gICAgICAvKipcbiAgICAgICAqIENvbnZlcnQgc3RyaW5ncyBsaWtlIGNtZCBpbnRvIHN5bWJvbHMgbGlrZSDijJhcbiAgICAgICAqIEBwYXJhbSAge1N0cmluZ30gY29tYm8gS2V5IGNvbWJpbmF0aW9uLCBlLmcuICdtb2QrZidcbiAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgVGhlIGtleSBjb21iaW5hdGlvbiB3aXRoIHN5bWJvbHNcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gc3ltYm9saXplIChjb21ibykge1xuICAgICAgICB2YXIgbWFwID0ge1xuICAgICAgICAgIGNvbW1hbmQgICA6ICdcXHUyMzE4JywgICAgIC8vIOKMmFxuICAgICAgICAgIHNoaWZ0ICAgICA6ICdcXHUyMUU3JywgICAgIC8vIOKHp1xuICAgICAgICAgIGxlZnQgICAgICA6ICdcXHUyMTkwJywgICAgIC8vIOKGkFxuICAgICAgICAgIHJpZ2h0ICAgICA6ICdcXHUyMTkyJywgICAgIC8vIOKGklxuICAgICAgICAgIHVwICAgICAgICA6ICdcXHUyMTkxJywgICAgIC8vIOKGkVxuICAgICAgICAgIGRvd24gICAgICA6ICdcXHUyMTkzJywgICAgIC8vIOKGk1xuICAgICAgICAgICdyZXR1cm4nICA6ICdcXHUyM0NFJywgICAgIC8vIOKPjlxuICAgICAgICAgIGJhY2tzcGFjZSA6ICdcXHUyMzJCJyAgICAgIC8vIOKMq1xuICAgICAgICB9O1xuICAgICAgICBjb21ibyA9IGNvbWJvLnNwbGl0KCcrJyk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21iby5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIC8vIHRyeSB0byByZXNvbHZlIGNvbW1hbmQgLyBjdHJsIGJhc2VkIG9uIE9TOlxuICAgICAgICAgIGlmIChjb21ib1tpXSA9PT0gJ21vZCcpIHtcbiAgICAgICAgICAgIGlmICgkd2luZG93Lm5hdmlnYXRvciAmJiAkd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdNYWMnKSA+PTAgKSB7XG4gICAgICAgICAgICAgIGNvbWJvW2ldID0gJ2NvbW1hbmQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29tYm9baV0gPSAnY3RybCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tYm9baV0gPSBtYXBbY29tYm9baV1dIHx8IGNvbWJvW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbWJvLmpvaW4oJyArICcpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEhvdGtleSBvYmplY3QgdXNlZCBpbnRlcm5hbGx5IGZvciBjb25zaXN0ZW5jeVxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7YXJyYXl9ICAgIGNvbWJvICAgICAgIFRoZSBrZXljb21iby4gaXQncyBhbiBhcnJheSB0byBzdXBwb3J0IG11bHRpcGxlIGNvbWJvc1xuICAgICAgICogQHBhcmFtIHtTdHJpbmd9ICAgZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gZm9yIHRoZSBrZXljb21ib1xuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIGtleWNvbWJvIHByZXNzZWRcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSAgIGFjdGlvbiAgICAgIHRoZSB0eXBlIG9mIGV2ZW50IHRvIGxpc3RlbiBmb3IgKGZvciBtb3VzZXRyYXApXG4gICAgICAgKiBAcGFyYW0ge2FycmF5fSAgICBhbGxvd0luICAgICBhbiBhcnJheSBvZiB0YWcgbmFtZXMgdG8gYWxsb3cgdGhpcyBjb21ibyBpbiAoJ0lOUFVUJywgJ1NFTEVDVCcsIGFuZC9vciAnVEVYVEFSRUEnKVxuICAgICAgICogQHBhcmFtIHtCb29sZWFufSAgcGVyc2lzdGVudCAgV2hldGhlciB0aGUgaG90a2V5IHBlcnNpc3RzIG5hdmlnYXRpb24gZXZlbnRzXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIEhvdGtleSAoY29tYm8sIGRlc2NyaXB0aW9uLCBjYWxsYmFjaywgYWN0aW9uLCBhbGxvd0luLCBwZXJzaXN0ZW50KSB7XG4gICAgICAgIC8vIFRPRE86IENoZWNrIHRoYXQgdGhlIHZhbHVlcyBhcmUgc2FuZSBiZWNhdXNlIHdlIGNvdWxkXG4gICAgICAgIC8vIGJlIHRyeWluZyB0byBpbnN0YW50aWF0ZSBhIG5ldyBIb3RrZXkgd2l0aCBvdXRzaWRlIGRldidzXG4gICAgICAgIC8vIHN1cHBsaWVkIHZhbHVlc1xuXG4gICAgICAgIHRoaXMuY29tYm8gPSBjb21ibyBpbnN0YW5jZW9mIEFycmF5ID8gY29tYm8gOiBbY29tYm9dO1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgICAgIHRoaXMuYWxsb3dJbiA9IGFsbG93SW47XG4gICAgICAgIHRoaXMucGVyc2lzdGVudCA9IHBlcnNpc3RlbnQ7XG4gICAgICAgIHRoaXMuX2Zvcm1hdGVkID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIGZvcm1hdCAoc3ltYm9saXplKSB0aGUga2V5IGNvbWJvIGZvciBkaXNwbGF5XG4gICAgICAgKlxuICAgICAgICogQHJldHVybiB7W0FycmF5XX0gQW4gYXJyYXkgb2YgdGhlIGtleSBjb21iaW5hdGlvbiBzZXF1ZW5jZVxuICAgICAgICogICBmb3IgZXhhbXBsZTogXCJjb21tYW5kK2cgYyBpXCIgYmVjb21lcyBbXCLijJggKyBnXCIsIFwiY1wiLCBcImlcIl1cbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgIEhvdGtleS5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtYXRlZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIERvbid0IHNob3cgYWxsIHRoZSBwb3NzaWJsZSBrZXkgY29tYm9zLCBqdXN0IHRoZSBmaXJzdCBvbmUuICBOb3Qgc3VyZVxuICAgICAgICAgIC8vIG9mIHVzZWNhc2UgaGVyZSwgc28gb3BlbiBhIHRpY2tldCBpZiBteSBhc3N1bXB0aW9ucyBhcmUgd3JvbmdcbiAgICAgICAgICB2YXIgY29tYm8gPSB0aGlzLmNvbWJvWzBdO1xuXG4gICAgICAgICAgdmFyIHNlcXVlbmNlID0gY29tYm8uc3BsaXQoL1tcXHNdLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXF1ZW5jZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2VxdWVuY2VbaV0gPSBzeW1ib2xpemUoc2VxdWVuY2VbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9mb3JtYXRlZCA9IHNlcXVlbmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdGVkO1xuICAgICAgfTtcblxuICAgICAgLyoqXG4gICAgICAgKiBBIG5ldyBzY29wZSB1c2VkIGludGVybmFsbHkgZm9yIHRoZSBjaGVhdHNoZWV0XG4gICAgICAgKiBAdHlwZSB7JHJvb3RTY29wZS5TY29wZX1cbiAgICAgICAqL1xuICAgICAgdmFyIHNjb3BlID0gJHJvb3RTY29wZS4kbmV3KCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogSG9sZHMgYW4gYXJyYXkgb2YgSG90a2V5IG9iamVjdHMgY3VycmVudGx5IGJvdW5kXG4gICAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICAgKi9cbiAgICAgIHNjb3BlLmhvdGtleXMgPSBbXTtcblxuICAgICAgLyoqXG4gICAgICAgKiBDb250YWlucyB0aGUgc3RhdGUgb2YgdGhlIGhlbHAncyB2aXNpYmlsaXR5XG4gICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgICAqL1xuICAgICAgc2NvcGUuaGVscFZpc2libGUgPSBmYWxzZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBIb2xkcyB0aGUgdGl0bGUgc3RyaW5nIGZvciB0aGUgaGVscCBtZW51XG4gICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICovXG4gICAgICBzY29wZS50aXRsZSA9IHRoaXMudGVtcGxhdGVUaXRsZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBIb2xkcyB0aGUgaGVhZGVyIEhUTUwgZm9yIHRoZSBoZWxwIG1lbnVcbiAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgKi9cbiAgICAgIHNjb3BlLmhlYWRlciA9IHRoaXMudGVtcGxhdGVIZWFkZXI7XG5cbiAgICAgIC8qKlxuICAgICAgICogSG9sZHMgdGhlIGZvb3RlciBIVE1MIGZvciB0aGUgaGVscCBtZW51XG4gICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICovXG4gICAgICBzY29wZS5mb290ZXIgPSB0aGlzLnRlbXBsYXRlRm9vdGVyO1xuXG4gICAgICAvKipcbiAgICAgICAqIEV4cG9zZSB0b2dnbGVDaGVhdFNoZWV0IHRvIGhvdGtleXMgc2NvcGUgc28gd2UgY2FuIGNhbGwgaXQgdXNpbmdcbiAgICAgICAqIG5nLWNsaWNrIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XG4gICAgICAgKi9cbiAgICAgIHNjb3BlLnRvZ2dsZUNoZWF0U2hlZXQgPSB0b2dnbGVDaGVhdFNoZWV0O1xuXG5cbiAgICAgIC8qKlxuICAgICAgICogSG9sZHMgcmVmZXJlbmNlcyB0byB0aGUgZGlmZmVyZW50IHNjb3BlcyB0aGF0IGhhdmUgYm91bmQgaG90a2V5c1xuICAgICAgICogYXR0YWNoZWQuICBUaGlzIGlzIHVzZWZ1bCB0byBjYXRjaCB3aGVuIHRoZSBzY29wZXMgYXJlIGAkZGVzdHJveWBkIGFuZFxuICAgICAgICogdGhlbiBhdXRvbWF0aWNhbGx5IHVuYmluZCB0aGUgaG90a2V5LlxuICAgICAgICpcbiAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgKi9cbiAgICAgIHZhciBib3VuZFNjb3BlcyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy51c2VOZ1JvdXRlKSB7XG4gICAgICAgICRyb290U2NvcGUuJG9uKCckcm91dGVDaGFuZ2VTdWNjZXNzJywgZnVuY3Rpb24gKGV2ZW50LCByb3V0ZSkge1xuICAgICAgICAgIHB1cmdlSG90a2V5cygpO1xuXG4gICAgICAgICAgaWYgKHJvdXRlICYmIHJvdXRlLmhvdGtleXMpIHtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyb3V0ZS5ob3RrZXlzLCBmdW5jdGlvbiAoaG90a2V5KSB7XG4gICAgICAgICAgICAgIC8vIGEgc3RyaW5nIHdhcyBnaXZlbiwgd2hpY2ggaW1wbGllcyB0aGlzIGlzIGEgZnVuY3Rpb24gdGhhdCBpcyB0byBiZVxuICAgICAgICAgICAgICAvLyAkZXZhbCgpJ2Qgd2l0aGluIHRoYXQgY29udHJvbGxlcidzIHNjb3BlXG4gICAgICAgICAgICAgIC8vIFRPRE86IGhvdGtleSBoZXJlIGlzIHN1cGVyIGNvbmZ1c2luZy4gIHNvbWV0aW1lcyBhIGZ1bmN0aW9uICh0aGF0IGdldHMgdHVybmVkIGludG8gYW4gYXJyYXkpLCBzb21ldGltZXMgYSBzdHJpbmdcbiAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gaG90a2V5WzJdO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mKGNhbGxiYWNrKSA9PT0gJ3N0cmluZycgfHwgY2FsbGJhY2sgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBob3RrZXlbMl0gPSBbY2FsbGJhY2ssIHJvdXRlXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIHRvZG86IHBlcmZvcm0gY2hlY2sgdG8gbWFrZSBzdXJlIG5vdCBhbHJlYWR5IGRlZmluZWQ6XG4gICAgICAgICAgICAgIC8vIHRoaXMgY2FtZSBmcm9tIGEgcm91dGUsIHNvIGl0J3MgbGlrZWx5IG5vdCBtZWFudCB0byBiZSBwZXJzaXN0ZW50XG4gICAgICAgICAgICAgIGhvdGtleVs1XSA9IGZhbHNlO1xuICAgICAgICAgICAgICBfYWRkLmFwcGx5KHRoaXMsIGhvdGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG5cblxuICAgICAgLy8gQXV0by1jcmVhdGUgYSBoZWxwIG1lbnU6XG4gICAgICBpZiAodGhpcy5pbmNsdWRlQ2hlYXRTaGVldCkge1xuICAgICAgICB2YXIgZG9jdW1lbnQgPSAkZG9jdW1lbnRbMF07XG4gICAgICAgIHZhciBlbGVtZW50ID0gJHJvb3RFbGVtZW50WzBdO1xuICAgICAgICB2YXIgaGVscE1lbnUgPSBhbmd1bGFyLmVsZW1lbnQodGhpcy50ZW1wbGF0ZSk7XG4gICAgICAgIF9hZGQodGhpcy5jaGVhdFNoZWV0SG90a2V5LCB0aGlzLmNoZWF0U2hlZXREZXNjcmlwdGlvbiwgdG9nZ2xlQ2hlYXRTaGVldCk7XG5cbiAgICAgICAgLy8gSWYgJHJvb3RFbGVtZW50IGlzIGRvY3VtZW50IG9yIGRvY3VtZW50RWxlbWVudCwgdGhlbiBib2R5IG11c3QgYmUgdXNlZFxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIH1cblxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoZWxlbWVudCkuYXBwZW5kKCRjb21waWxlKGhlbHBNZW51KShzY29wZSkpO1xuICAgICAgfVxuXG5cbiAgICAgIC8qKlxuICAgICAgICogUHVyZ2VzIGFsbCBub24tcGVyc2lzdGVudCBob3RrZXlzIChzdWNoIGFzIHRob3NlIGRlZmluZWQgaW4gcm91dGVzKVxuICAgICAgICpcbiAgICAgICAqIFdpdGhvdXQgdGhpcywgdGhlIHNhbWUgaG90a2V5IHdvdWxkIGdldCByZWNyZWF0ZWQgZXZlcnl0aW1lXG4gICAgICAgKiB0aGUgcm91dGUgaXMgYWNjZXNzZWQuXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIHB1cmdlSG90a2V5cygpIHtcbiAgICAgICAgdmFyIGkgPSBzY29wZS5ob3RrZXlzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIHZhciBob3RrZXkgPSBzY29wZS5ob3RrZXlzW2ldO1xuICAgICAgICAgIGlmIChob3RrZXkgJiYgIWhvdGtleS5wZXJzaXN0ZW50KSB7XG4gICAgICAgICAgICBfZGVsKGhvdGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVG9nZ2xlcyB0aGUgaGVscCBtZW51IGVsZW1lbnQncyB2aXNpYmxpdHlcbiAgICAgICAqL1xuICAgICAgdmFyIHByZXZpb3VzRXNjID0gZmFsc2U7XG5cbiAgICAgIGZ1bmN0aW9uIHRvZ2dsZUNoZWF0U2hlZXQoKSB7XG4gICAgICAgIHNjb3BlLmhlbHBWaXNpYmxlID0gIXNjb3BlLmhlbHBWaXNpYmxlO1xuXG4gICAgICAgIC8vIEJpbmQgdG8gZXNjIHRvIHJlbW92ZSB0aGUgY2hlYXQgc2hlZXQuICBJZGVhbGx5LCB0aGlzIHdvdWxkIGJlIGRvbmVcbiAgICAgICAgLy8gYXMgYSBkaXJlY3RpdmUgaW4gdGhlIHRlbXBsYXRlLCBidXQgdGhhdCB3b3VsZCBjcmVhdGUgYSBuYXN0eVxuICAgICAgICAvLyBjaXJjdWxhciBkZXBlbmRlbmN5IGlzc3VlIHRoYXQgSSBkb24ndCBmZWVsIGxpa2Ugc29ydGluZyBvdXQuXG4gICAgICAgIGlmIChzY29wZS5oZWxwVmlzaWJsZSkge1xuICAgICAgICAgIHByZXZpb3VzRXNjID0gX2dldCgnZXNjJyk7XG4gICAgICAgICAgX2RlbCgnZXNjJyk7XG5cbiAgICAgICAgICAvLyBIZXJlJ3MgYW4gb2RkIHdheSB0byBkbyB0aGlzOiB3ZSdyZSBnb2luZyB0byB1c2UgdGhlIG9yaWdpbmFsXG4gICAgICAgICAgLy8gZGVzY3JpcHRpb24gb2YgdGhlIGhvdGtleSBvbiB0aGUgY2hlYXQgc2hlZXQgc28gdGhhdCBpdCBzaG93cyB1cC5cbiAgICAgICAgICAvLyB3aXRob3V0IGl0LCBubyBlbnRyeSBmb3IgZXNjIHdpbGwgZXZlciBzaG93IHVwICgjMjIpXG4gICAgICAgICAgX2FkZCgnZXNjJywgcHJldmlvdXNFc2MuZGVzY3JpcHRpb24sIHRvZ2dsZUNoZWF0U2hlZXQsIG51bGwsIFsnSU5QVVQnLCAnU0VMRUNUJywgJ1RFWFRBUkVBJ10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9kZWwoJ2VzYycpO1xuXG4gICAgICAgICAgLy8gcmVzdG9yZSB0aGUgcHJldmlvdXNseSBib3VuZCBFU0Mga2V5XG4gICAgICAgICAgaWYgKHByZXZpb3VzRXNjICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgX2FkZChwcmV2aW91c0VzYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIG5ldyBIb3RrZXkgYW5kIGNyZWF0ZXMgdGhlIE1vdXNldHJhcCBiaW5kaW5nXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9ICAgY29tYm8gICAgICAgbW91c2V0cmFwIGtleSBiaW5kaW5nXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gICBkZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiBmb3IgdGhlIGhlbHAgbWVudVxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgbWV0aG9kIHRvIGNhbGwgd2hlbiBrZXkgaXMgcHJlc3NlZFxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9ICAgYWN0aW9uICAgICAgdGhlIHR5cGUgb2YgZXZlbnQgdG8gbGlzdGVuIGZvciAoZm9yIG1vdXNldHJhcClcbiAgICAgICAqIEBwYXJhbSB7YXJyYXl9ICAgIGFsbG93SW4gICAgIGFuIGFycmF5IG9mIHRhZyBuYW1lcyB0byBhbGxvdyB0aGlzIGNvbWJvIGluICgnSU5QVVQnLCAnU0VMRUNUJywgYW5kL29yICdURVhUQVJFQScpXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBwZXJzaXN0ZW50ICBpZiB0cnVlLCB0aGUgYmluZGluZyBpcyBwcmVzZXJ2ZWQgdXBvbiByb3V0ZSBjaGFuZ2VzXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIF9hZGQgKGNvbWJvLCBkZXNjcmlwdGlvbiwgY2FsbGJhY2ssIGFjdGlvbiwgYWxsb3dJbiwgcGVyc2lzdGVudCkge1xuXG4gICAgICAgIC8vIHVzZWQgdG8gc2F2ZSBvcmlnaW5hbCBjYWxsYmFjayBmb3IgXCJhbGxvd0luXCIgd3JhcHBpbmc6XG4gICAgICAgIHZhciBfY2FsbGJhY2s7XG5cbiAgICAgICAgLy8gdGhlc2UgZWxlbWVudHMgYXJlIHByZXZlbnRlZCBieSB0aGUgZGVmYXVsdCBNb3VzZXRyYXAuc3RvcENhbGxiYWNrKCk6XG4gICAgICAgIHZhciBwcmV2ZW50SW4gPSBbJ0lOUFVUJywgJ1NFTEVDVCcsICdURVhUQVJFQSddO1xuXG4gICAgICAgIC8vIERldGVybWluZSBpZiBvYmplY3QgZm9ybWF0IHdhcyBnaXZlbjpcbiAgICAgICAgdmFyIG9ialR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY29tYm8pO1xuXG4gICAgICAgIGlmIChvYmpUeXBlID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgIGRlc2NyaXB0aW9uID0gY29tYm8uZGVzY3JpcHRpb247XG4gICAgICAgICAgY2FsbGJhY2sgICAgPSBjb21iby5jYWxsYmFjaztcbiAgICAgICAgICBhY3Rpb24gICAgICA9IGNvbWJvLmFjdGlvbjtcbiAgICAgICAgICBwZXJzaXN0ZW50ICA9IGNvbWJvLnBlcnNpc3RlbnQ7XG4gICAgICAgICAgYWxsb3dJbiAgICAgPSBjb21iby5hbGxvd0luO1xuICAgICAgICAgIGNvbWJvICAgICAgID0gY29tYm8uY29tYm87XG4gICAgICAgIH1cblxuICAgICAgICAvLyBubyBkdXBsaWNhdGVzIHBsZWFzZVxuICAgICAgICBfZGVsKGNvbWJvKTtcblxuICAgICAgICAvLyBkZXNjcmlwdGlvbiBpcyBvcHRpb25hbDpcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICBhY3Rpb24gPSBjYWxsYmFjaztcbiAgICAgICAgICBjYWxsYmFjayA9IGRlc2NyaXB0aW9uO1xuICAgICAgICAgIGRlc2NyaXB0aW9uID0gJyQkdW5kZWZpbmVkJCQnO1xuICAgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNVbmRlZmluZWQoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgZGVzY3JpcHRpb24gPSAnJCR1bmRlZmluZWQkJCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbnkgaXRlbXMgYWRkZWQgdGhyb3VnaCB0aGUgcHVibGljIEFQSSBhcmUgZm9yIGNvbnRyb2xsZXJzXG4gICAgICAgIC8vIHRoYXQgcGVyc2lzdCB0aHJvdWdoIG5hdmlnYXRpb24sIGFuZCB0aHVzIHVuZGVmaW5lZCBzaG91bGQgbWVhblxuICAgICAgICAvLyB0cnVlIGluIHRoaXMgY2FzZS5cbiAgICAgICAgaWYgKHBlcnNpc3RlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBlcnNpc3RlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGNhbGxiYWNrIGlzIGRlZmluZWQsIHRoZW4gd3JhcCBpdCBpbiBhIGZ1bmN0aW9uXG4gICAgICAgIC8vIHRoYXQgY2hlY2tzIGlmIHRoZSBldmVudCBvcmlnaW5hdGVkIGZyb20gYSBmb3JtIGVsZW1lbnQuXG4gICAgICAgIC8vIHRoZSBmdW5jdGlvbiBibG9ja3MgdGhlIGNhbGxiYWNrIGZyb20gZXhlY3V0aW5nIHVubGVzcyB0aGUgZWxlbWVudCBpcyBzcGVjaWZpZWRcbiAgICAgICAgLy8gaW4gYWxsb3dJbiAoZW11bGF0ZXMgTW91c2V0cmFwLnN0b3BDYWxsYmFjaygpIG9uIGEgcGVyLWtleSBsZXZlbClcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAgICAgLy8gc2F2ZSB0aGUgb3JpZ2luYWwgY2FsbGJhY2tcbiAgICAgICAgICBfY2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgICAgIC8vIG1ha2Ugc3VyZSBhbGxvd0luIGlzIGFuIGFycmF5XG4gICAgICAgICAgaWYgKCEoYWxsb3dJbiBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICAgICAgYWxsb3dJbiA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlbW92ZSBhbnl0aGluZyBmcm9tIHByZXZlbnRJbiB0aGF0J3MgcHJlc2VudCBpbiBhbGxvd0luXG4gICAgICAgICAgdmFyIGluZGV4O1xuICAgICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGFsbG93SW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFsbG93SW5baV0gPSBhbGxvd0luW2ldLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBpbmRleCA9IHByZXZlbnRJbi5pbmRleE9mKGFsbG93SW5baV0pO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBwcmV2ZW50SW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjcmVhdGUgdGhlIG5ldyB3cmFwcGVyIGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIHNob3VsZEV4ZWN1dGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgZGlyZWN0bHkgYGhvdGtleS5nZXQoJ3cnKS5jYWxsYmFjaygpYFxuICAgICAgICAgICAgLy8gdGhlcmUgd2lsbCBiZSBubyBldmVudCwgc28ganVzdCBleGVjdXRlIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7IC8vIHNyY0VsZW1lbnQgaXMgSUUgb25seVxuICAgICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSB0YXJnZXQubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgaW5wdXQgaGFzIGEgbW91c2V0cmFwIGNsYXNzLCBhbmQgc2tpcCBjaGVja2luZyBwcmV2ZW50SW4gaWYgc29cbiAgICAgICAgICAgICAgaWYgKCgnICcgKyB0YXJnZXQuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgbW91c2V0cmFwICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzaG91bGRFeGVjdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkb24ndCBleGVjdXRlIGNhbGxiYWNrIGlmIHRoZSBldmVudCB3YXMgZmlyZWQgZnJvbSBpbnNpZGUgYW4gZWxlbWVudCBsaXN0ZWQgaW4gcHJldmVudEluXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHByZXZlbnRJbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgaWYgKHByZXZlbnRJbltpXSA9PT0gbm9kZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkRXhlY3V0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGUpIHtcbiAgICAgICAgICAgICAgd3JhcEFwcGx5KF9jYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZihhY3Rpb24pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIE1vdXNldHJhcC5iaW5kKGNvbWJvLCB3cmFwQXBwbHkoY2FsbGJhY2spLCBhY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE1vdXNldHJhcC5iaW5kKGNvbWJvLCB3cmFwQXBwbHkoY2FsbGJhY2spKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBob3RrZXkgPSBuZXcgSG90a2V5KGNvbWJvLCBkZXNjcmlwdGlvbiwgY2FsbGJhY2ssIGFjdGlvbiwgYWxsb3dJbiwgcGVyc2lzdGVudCk7XG4gICAgICAgIHNjb3BlLmhvdGtleXMucHVzaChob3RrZXkpO1xuICAgICAgICByZXR1cm4gaG90a2V5O1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIGRlbGV0ZSBhbmQgdW5iaW5kIGEgSG90a2V5XG4gICAgICAgKlxuICAgICAgICogQHBhcmFtICB7bWl4ZWR9IGhvdGtleSAgIEVpdGhlciB0aGUgYm91bmQga2V5IG9yIGFuIGluc3RhbmNlIG9mIEhvdGtleVxuICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgIHRydWUgaWYgc3VjY2Vzc2Z1bFxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBfZGVsIChob3RrZXkpIHtcbiAgICAgICAgdmFyIGNvbWJvID0gKGhvdGtleSBpbnN0YW5jZW9mIEhvdGtleSkgPyBob3RrZXkuY29tYm8gOiBob3RrZXk7XG5cbiAgICAgICAgTW91c2V0cmFwLnVuYmluZChjb21ibyk7XG5cbiAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShjb21ibykpIHtcbiAgICAgICAgICB2YXIgcmV0U3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICB2YXIgaSA9IGNvbWJvLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICByZXRTdGF0dXMgPSBfZGVsKGNvbWJvW2ldKSAmJiByZXRTdGF0dXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXRTdGF0dXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gc2NvcGUuaG90a2V5cy5pbmRleE9mKF9nZXQoY29tYm8pKTtcblxuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgY29tYm8gaGFzIG90aGVyIGNvbWJvcyBib3VuZCwgZG9uJ3QgdW5iaW5kIHRoZSB3aG9sZSB0aGluZywganVzdCB0aGUgb25lIGNvbWJvOlxuICAgICAgICAgICAgaWYgKHNjb3BlLmhvdGtleXNbaW5kZXhdLmNvbWJvLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgc2NvcGUuaG90a2V5c1tpbmRleF0uY29tYm8uc3BsaWNlKHNjb3BlLmhvdGtleXNbaW5kZXhdLmNvbWJvLmluZGV4T2YoY29tYm8pLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIGhvdGtleSBmcm9tIGJvdW5kIHNjb3Blc1xuICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYm91bmRTY29wZXMsIGZ1bmN0aW9uIChib3VuZFNjb3BlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNjb3BlSW5kZXggPSBib3VuZFNjb3BlLmluZGV4T2Yoc2NvcGUuaG90a2V5c1tpbmRleF0pO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBib3VuZFNjb3BlLnNwbGljZShzY29wZUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHNjb3BlLmhvdGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEdldCBhIEhvdGtleSBvYmplY3QgYnkga2V5IGJpbmRpbmdcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gIHtbc3RyaW5nXX0gW2NvbWJvXSAgdGhlIGtleSB0aGUgSG90a2V5IGlzIGJvdW5kIHRvLiBSZXR1cm5zIGFsbCBrZXkgYmluZGluZ3MgaWYgbm8ga2V5IGlzIHBhc3NlZFxuICAgICAgICogQHJldHVybiB7SG90a2V5fSAgICAgICAgICBUaGUgSG90a2V5IG9iamVjdFxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBfZ2V0IChjb21ibykge1xuXG4gICAgICAgIGlmICghY29tYm8pIHtcbiAgICAgICAgICByZXR1cm4gc2NvcGUuaG90a2V5cztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBob3RrZXk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY29wZS5ob3RrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaG90a2V5ID0gc2NvcGUuaG90a2V5c1tpXTtcblxuICAgICAgICAgIGlmIChob3RrZXkuY29tYm8uaW5kZXhPZihjb21ibykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGhvdGtleTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQmluZHMgdGhlIGhvdGtleSB0byBhIHBhcnRpY3VsYXIgc2NvcGUuICBVc2VmdWwgaWYgdGhlIHNjb3BlIGlzXG4gICAgICAgKiBkZXN0cm95ZWQsIHdlIGNhbiBhdXRvbWF0aWNhbGx5IGRlc3Ryb3kgdGhlIGhvdGtleSBiaW5kaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSAge09iamVjdH0gc2NvcGUgVGhlIHNjb3BlIHRvIGJpbmQgdG9cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gYmluZFRvIChzY29wZSkge1xuICAgICAgICAvLyBPbmx5IGluaXRpYWxpemUgb25jZSB0byBhbGxvdyBtdWx0aXBsZSBjYWxscyBmb3Igc2FtZSBzY29wZS5cbiAgICAgICAgaWYgKCEoc2NvcGUuJGlkIGluIGJvdW5kU2NvcGVzKSkge1xuXG4gICAgICAgICAgLy8gQWRkIHRoZSBzY29wZSB0byB0aGUgbGlzdCBvZiBib3VuZCBzY29wZXNcbiAgICAgICAgICBib3VuZFNjb3Blc1tzY29wZS4kaWRdID0gW107XG5cbiAgICAgICAgICBzY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGkgPSBib3VuZFNjb3Blc1tzY29wZS4kaWRdLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgX2RlbChib3VuZFNjb3Blc1tzY29wZS4kaWRdLnBvcCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gYW4gb2JqZWN0IHdpdGggYW4gYWRkIGZ1bmN0aW9uIHNvIHdlIGNhbiBrZWVwIHRyYWNrIG9mIHRoZVxuICAgICAgICAvLyBob3RrZXlzIGFuZCB0aGVpciBzY29wZSB0aGF0IHdlIGFkZGVkIHZpYSB0aGlzIGNoYWluaW5nIG1ldGhvZFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBob3RrZXk7XG5cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBob3RrZXkgPSBfYWRkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBob3RrZXkgPSBfYWRkKGFyZ3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib3VuZFNjb3Blc1tzY29wZS4kaWRdLnB1c2goaG90a2V5KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBBbGwgY2FsbGJhY2tzIHNlbnQgdG8gTW91c2V0cmFwIGFyZSB3cmFwcGVkIHVzaW5nIHRoaXMgZnVuY3Rpb25cbiAgICAgICAqIHNvIHRoYXQgd2UgY2FuIGZvcmNlIGEgJHNjb3BlLiRhcHBseSgpXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIFtkZXNjcmlwdGlvbl1cbiAgICAgICAqIEByZXR1cm4ge1t0eXBlXX0gICAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIHdyYXBBcHBseSAoY2FsbGJhY2spIHtcbiAgICAgICAgLy8gcmV0dXJuIG1vdXNldHJhcCBhIGZ1bmN0aW9uIHRvIGNhbGxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCwgY29tYm8pIHtcblxuICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYW4gYXJyYXksIGl0IG1lYW5zIHdlIHByb3ZpZGVkIGEgcm91dGUgb2JqZWN0XG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGUgc2NvcGUgd2Fzbid0IGF2YWlsYWJsZSB5ZXQsIHNvIHJld3JhcCB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAvLyBub3cgdGhhdCB0aGUgc2NvcGUgaXMgYXZhaWxhYmxlOlxuICAgICAgICAgIGlmIChjYWxsYmFjayBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICB2YXIgZnVuY1N0cmluZyA9IGNhbGxiYWNrWzBdO1xuICAgICAgICAgICAgdmFyIHJvdXRlID0gY2FsbGJhY2tbMV07XG4gICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICByb3V0ZS5zY29wZS4kZXZhbChmdW5jU3RyaW5nKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdGhpcyB0YWtlcyBwbGFjZSBvdXRzaWRlIGFuZ3VsYXIsIHNvIHdlJ2xsIGhhdmUgdG8gY2FsbFxuICAgICAgICAgIC8vICRhcHBseSgpIHRvIG1ha2Ugc3VyZSBhbmd1bGFyJ3MgZGlnZXN0IGhhcHBlbnNcbiAgICAgICAgICAkcm9vdFNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIGNhbGwgdGhlIG9yaWdpbmFsIGhvdGtleSBjYWxsYmFjayB3aXRoIHRoZSBrZXlib2FyZCBldmVudFxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQsIF9nZXQoY29tYm8pKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIHB1YmxpY0FwaSA9IHtcbiAgICAgICAgYWRkICAgICAgICAgICAgICAgICAgIDogX2FkZCxcbiAgICAgICAgZGVsICAgICAgICAgICAgICAgICAgIDogX2RlbCxcbiAgICAgICAgZ2V0ICAgICAgICAgICAgICAgICAgIDogX2dldCxcbiAgICAgICAgYmluZFRvICAgICAgICAgICAgICAgIDogYmluZFRvLFxuICAgICAgICB0ZW1wbGF0ZSAgICAgICAgICAgICAgOiB0aGlzLnRlbXBsYXRlLFxuICAgICAgICB0b2dnbGVDaGVhdFNoZWV0ICAgICAgOiB0b2dnbGVDaGVhdFNoZWV0LFxuICAgICAgICBpbmNsdWRlQ2hlYXRTaGVldCAgICAgOiB0aGlzLmluY2x1ZGVDaGVhdFNoZWV0LFxuICAgICAgICBjaGVhdFNoZWV0SG90a2V5ICAgICAgOiB0aGlzLmNoZWF0U2hlZXRIb3RrZXksXG4gICAgICAgIGNoZWF0U2hlZXREZXNjcmlwdGlvbiA6IHRoaXMuY2hlYXRTaGVldERlc2NyaXB0aW9uLFxuICAgICAgICB1c2VOZ1JvdXRlICAgICAgICAgICAgOiB0aGlzLnVzZU5nUm91dGUsXG4gICAgICAgIHB1cmdlSG90a2V5cyAgICAgICAgICA6IHB1cmdlSG90a2V5cyxcbiAgICAgICAgdGVtcGxhdGVUaXRsZSAgICAgICAgIDogdGhpcy50ZW1wbGF0ZVRpdGxlLFxuICAgICAgICBwYXVzZSAgICAgICAgICAgICAgICAgOiBwYXVzZSxcbiAgICAgICAgdW5wYXVzZSAgICAgICAgICAgICAgIDogdW5wYXVzZVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHB1YmxpY0FwaTtcblxuICAgIH1dO1xuXG5cbiAgfV0pXG5cbiAgLmRpcmVjdGl2ZSgnaG90a2V5JywgWydob3RrZXlzJywgZnVuY3Rpb24gKGhvdGtleXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdBJyxcbiAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWwsIGF0dHJzKSB7XG4gICAgICAgIHZhciBrZXlzID0gW10sXG4gICAgICAgICAgICBhbGxvd0luO1xuXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzY29wZS4kZXZhbChhdHRycy5ob3RrZXkpLCBmdW5jdGlvbiAoZnVuYywgaG90a2V5KSB7XG4gICAgICAgICAgLy8gc3BsaXQgYW5kIHRyaW0gdGhlIGhvdGtleXMgc3RyaW5nIGludG8gYXJyYXlcbiAgICAgICAgICBhbGxvd0luID0gdHlwZW9mIGF0dHJzLmhvdGtleUFsbG93SW4gPT09IFwic3RyaW5nXCIgPyBhdHRycy5ob3RrZXlBbGxvd0luLnNwbGl0KC9bXFxzLF0rLykgOiBbXTtcblxuICAgICAgICAgIGtleXMucHVzaChob3RrZXkpO1xuXG4gICAgICAgICAgaG90a2V5cy5hZGQoe1xuICAgICAgICAgICAgY29tYm86IGhvdGtleSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhdHRycy5ob3RrZXlEZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jLFxuICAgICAgICAgICAgYWN0aW9uOiBhdHRycy5ob3RrZXlBY3Rpb24sXG4gICAgICAgICAgICBhbGxvd0luOiBhbGxvd0luXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgaG90a2V5IGlmIHRoZSBkaXJlY3RpdmUgaXMgZGVzdHJveWVkOlxuICAgICAgICBlbC5iaW5kKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChrZXlzLCBob3RrZXlzLmRlbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH1dKVxuXG4gIC5ydW4oWydob3RrZXlzJywgZnVuY3Rpb24oaG90a2V5cykge1xuICAgIC8vIGZvcmNlIGhvdGtleXMgdG8gcnVuIGJ5IGluamVjdGluZyBpdC4gV2l0aG91dCB0aGlzLCBob3RrZXlzIG9ubHkgcnVuc1xuICAgIC8vIHdoZW4gYSBjb250cm9sbGVyIG9yIHNvbWV0aGluZyBlbHNlIGFza3MgZm9yIGl0IHZpYSBESS5cbiAgfV0pO1xuXG59KSgpO1xuXG4vKmdsb2JhbCBkZWZpbmU6ZmFsc2UgKi9cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUgQ3JhaWcgQ2FtcGJlbGxcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBNb3VzZXRyYXAgaXMgYSBzaW1wbGUga2V5Ym9hcmQgc2hvcnRjdXQgbGlicmFyeSBmb3IgSmF2YXNjcmlwdCB3aXRoXG4gKiBubyBleHRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqXG4gKiBAdmVyc2lvbiAxLjUuMlxuICogQHVybCBjcmFpZy5pcy9raWxsaW5nL21pY2VcbiAqL1xuKGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkge1xuXG4gICAgLyoqXG4gICAgICogbWFwcGluZyBvZiBzcGVjaWFsIGtleWNvZGVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcga2V5c1xuICAgICAqXG4gICAgICogZXZlcnl0aGluZyBpbiB0aGlzIGRpY3Rpb25hcnkgY2Fubm90IHVzZSBrZXlwcmVzcyBldmVudHNcbiAgICAgKiBzbyBpdCBoYXMgdG8gYmUgaGVyZSB0byBtYXAgdG8gdGhlIGNvcnJlY3Qga2V5Y29kZXMgZm9yXG4gICAgICoga2V5dXAva2V5ZG93biBldmVudHNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdmFyIF9NQVAgPSB7XG4gICAgICAgIDg6ICdiYWNrc3BhY2UnLFxuICAgICAgICA5OiAndGFiJyxcbiAgICAgICAgMTM6ICdlbnRlcicsXG4gICAgICAgIDE2OiAnc2hpZnQnLFxuICAgICAgICAxNzogJ2N0cmwnLFxuICAgICAgICAxODogJ2FsdCcsXG4gICAgICAgIDIwOiAnY2Fwc2xvY2snLFxuICAgICAgICAyNzogJ2VzYycsXG4gICAgICAgIDMyOiAnc3BhY2UnLFxuICAgICAgICAzMzogJ3BhZ2V1cCcsXG4gICAgICAgIDM0OiAncGFnZWRvd24nLFxuICAgICAgICAzNTogJ2VuZCcsXG4gICAgICAgIDM2OiAnaG9tZScsXG4gICAgICAgIDM3OiAnbGVmdCcsXG4gICAgICAgIDM4OiAndXAnLFxuICAgICAgICAzOTogJ3JpZ2h0JyxcbiAgICAgICAgNDA6ICdkb3duJyxcbiAgICAgICAgNDU6ICdpbnMnLFxuICAgICAgICA0NjogJ2RlbCcsXG4gICAgICAgIDkxOiAnbWV0YScsXG4gICAgICAgIDkzOiAnbWV0YScsXG4gICAgICAgIDIyNDogJ21ldGEnXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIG1hcHBpbmcgZm9yIHNwZWNpYWwgY2hhcmFjdGVycyBzbyB0aGV5IGNhbiBzdXBwb3J0XG4gICAgICpcbiAgICAgKiB0aGlzIGRpY3Rpb25hcnkgaXMgb25seSB1c2VkIGluY2FzZSB5b3Ugd2FudCB0byBiaW5kIGFcbiAgICAgKiBrZXl1cCBvciBrZXlkb3duIGV2ZW50IHRvIG9uZSBvZiB0aGVzZSBrZXlzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHZhciBfS0VZQ09ERV9NQVAgPSB7XG4gICAgICAgIDEwNjogJyonLFxuICAgICAgICAxMDc6ICcrJyxcbiAgICAgICAgMTA5OiAnLScsXG4gICAgICAgIDExMDogJy4nLFxuICAgICAgICAxMTEgOiAnLycsXG4gICAgICAgIDE4NjogJzsnLFxuICAgICAgICAxODc6ICc9JyxcbiAgICAgICAgMTg4OiAnLCcsXG4gICAgICAgIDE4OTogJy0nLFxuICAgICAgICAxOTA6ICcuJyxcbiAgICAgICAgMTkxOiAnLycsXG4gICAgICAgIDE5MjogJ2AnLFxuICAgICAgICAyMTk6ICdbJyxcbiAgICAgICAgMjIwOiAnXFxcXCcsXG4gICAgICAgIDIyMTogJ10nLFxuICAgICAgICAyMjI6ICdcXCcnXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHRoaXMgaXMgYSBtYXBwaW5nIG9mIGtleXMgdGhhdCByZXF1aXJlIHNoaWZ0IG9uIGEgVVMga2V5cGFkXG4gICAgICogYmFjayB0byB0aGUgbm9uIHNoaWZ0IGVxdWl2ZWxlbnRzXG4gICAgICpcbiAgICAgKiB0aGlzIGlzIHNvIHlvdSBjYW4gdXNlIGtleXVwIGV2ZW50cyB3aXRoIHRoZXNlIGtleXNcbiAgICAgKlxuICAgICAqIG5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB3b3JrIHJlbGlhYmx5IG9uIFVTIGtleWJvYXJkc1xuICAgICAqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB2YXIgX1NISUZUX01BUCA9IHtcbiAgICAgICAgJ34nOiAnYCcsXG4gICAgICAgICchJzogJzEnLFxuICAgICAgICAnQCc6ICcyJyxcbiAgICAgICAgJyMnOiAnMycsXG4gICAgICAgICckJzogJzQnLFxuICAgICAgICAnJSc6ICc1JyxcbiAgICAgICAgJ14nOiAnNicsXG4gICAgICAgICcmJzogJzcnLFxuICAgICAgICAnKic6ICc4JyxcbiAgICAgICAgJygnOiAnOScsXG4gICAgICAgICcpJzogJzAnLFxuICAgICAgICAnXyc6ICctJyxcbiAgICAgICAgJysnOiAnPScsXG4gICAgICAgICc6JzogJzsnLFxuICAgICAgICAnXFxcIic6ICdcXCcnLFxuICAgICAgICAnPCc6ICcsJyxcbiAgICAgICAgJz4nOiAnLicsXG4gICAgICAgICc/JzogJy8nLFxuICAgICAgICAnfCc6ICdcXFxcJ1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIGlzIGEgbGlzdCBvZiBzcGVjaWFsIHN0cmluZ3MgeW91IGNhbiB1c2UgdG8gbWFwXG4gICAgICogdG8gbW9kaWZpZXIga2V5cyB3aGVuIHlvdSBzcGVjaWZ5IHlvdXIga2V5Ym9hcmQgc2hvcnRjdXRzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHZhciBfU1BFQ0lBTF9BTElBU0VTID0ge1xuICAgICAgICAnb3B0aW9uJzogJ2FsdCcsXG4gICAgICAgICdjb21tYW5kJzogJ21ldGEnLFxuICAgICAgICAncmV0dXJuJzogJ2VudGVyJyxcbiAgICAgICAgJ2VzY2FwZSc6ICdlc2MnLFxuICAgICAgICAncGx1cyc6ICcrJyxcbiAgICAgICAgJ21vZCc6IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pID8gJ21ldGEnIDogJ2N0cmwnXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBmbGlwcGVkIHZlcnNpb24gb2YgX01BUCBmcm9tIGFib3ZlXG4gICAgICogbmVlZGVkIHRvIGNoZWNrIGlmIHdlIHNob3VsZCB1c2Uga2V5cHJlc3Mgb3Igbm90IHdoZW4gbm8gYWN0aW9uXG4gICAgICogaXMgc3BlY2lmaWVkXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB2YXIgX1JFVkVSU0VfTUFQO1xuXG4gICAgLyoqXG4gICAgICogbG9vcCB0aHJvdWdoIHRoZSBmIGtleXMsIGYxIHRvIGYxOSBhbmQgYWRkIHRoZW0gdG8gdGhlIG1hcFxuICAgICAqIHByb2dyYW1hdGljYWxseVxuICAgICAqL1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMjA7ICsraSkge1xuICAgICAgICBfTUFQWzExMSArIGldID0gJ2YnICsgaTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb29wIHRocm91Z2ggdG8gbWFwIG51bWJlcnMgb24gdGhlIG51bWVyaWMga2V5cGFkXG4gICAgICovXG4gICAgZm9yIChpID0gMDsgaSA8PSA5OyArK2kpIHtcbiAgICAgICAgX01BUFtpICsgOTZdID0gaTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcm9zcyBicm93c2VyIGFkZCBldmVudCBtZXRob2RcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RWxlbWVudHxIVE1MRG9jdW1lbnR9IG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcmV0dXJucyB2b2lkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2FkZEV2ZW50KG9iamVjdCwgdHlwZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JqZWN0LmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGFrZXMgdGhlIGV2ZW50IGFuZCByZXR1cm5zIHRoZSBrZXkgY2hhcmFjdGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9jaGFyYWN0ZXJGcm9tRXZlbnQoZSkge1xuXG4gICAgICAgIC8vIGZvciBrZXlwcmVzcyBldmVudHMgd2Ugc2hvdWxkIHJldHVybiB0aGUgY2hhcmFjdGVyIGFzIGlzXG4gICAgICAgIGlmIChlLnR5cGUgPT0gJ2tleXByZXNzJykge1xuICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS53aGljaCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZSBzaGlmdCBrZXkgaXMgbm90IHByZXNzZWQgdGhlbiBpdCBpcyBzYWZlIHRvIGFzc3VtZVxuICAgICAgICAgICAgLy8gdGhhdCB3ZSB3YW50IHRoZSBjaGFyYWN0ZXIgdG8gYmUgbG93ZXJjYXNlLiAgdGhpcyBtZWFucyBpZlxuICAgICAgICAgICAgLy8geW91IGFjY2lkZW50YWxseSBoYXZlIGNhcHMgbG9jayBvbiB0aGVuIHlvdXIga2V5IGJpbmRpbmdzXG4gICAgICAgICAgICAvLyB3aWxsIGNvbnRpbnVlIHRvIHdvcmtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyB0aGUgb25seSBzaWRlIGVmZmVjdCB0aGF0IG1pZ2h0IG5vdCBiZSBkZXNpcmVkIGlzIGlmIHlvdVxuICAgICAgICAgICAgLy8gYmluZCBzb21ldGhpbmcgbGlrZSAnQScgY2F1c2UgeW91IHdhbnQgdG8gdHJpZ2dlciBhblxuICAgICAgICAgICAgLy8gZXZlbnQgd2hlbiBjYXBpdGFsIEEgaXMgcHJlc3NlZCBjYXBzIGxvY2sgd2lsbCBubyBsb25nZXJcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgdGhlIGV2ZW50LiAgc2hpZnQrYSB3aWxsIHRob3VnaC5cbiAgICAgICAgICAgIGlmICghZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3Rlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm9yIG5vbiBrZXlwcmVzcyBldmVudHMgdGhlIHNwZWNpYWwgbWFwcyBhcmUgbmVlZGVkXG4gICAgICAgIGlmIChfTUFQW2Uud2hpY2hdKSB7XG4gICAgICAgICAgICByZXR1cm4gX01BUFtlLndoaWNoXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfS0VZQ09ERV9NQVBbZS53aGljaF0pIHtcbiAgICAgICAgICAgIHJldHVybiBfS0VZQ09ERV9NQVBbZS53aGljaF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBpdCBpcyBub3QgaW4gdGhlIHNwZWNpYWwgbWFwXG5cbiAgICAgICAgLy8gd2l0aCBrZXlkb3duIGFuZCBrZXl1cCBldmVudHMgdGhlIGNoYXJhY3RlciBzZWVtcyB0byBhbHdheXNcbiAgICAgICAgLy8gY29tZSBpbiBhcyBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyIHdoZXRoZXIgeW91IGFyZSBwcmVzc2luZyBzaGlmdFxuICAgICAgICAvLyBvciBub3QuICB3ZSBzaG91bGQgbWFrZSBzdXJlIGl0IGlzIGFsd2F5cyBsb3dlcmNhc2UgZm9yIGNvbXBhcmlzb25zXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2hlY2tzIGlmIHR3byBhcnJheXMgYXJlIGVxdWFsXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBtb2RpZmllcnMxXG4gICAgICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzMlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tb2RpZmllcnNNYXRjaChtb2RpZmllcnMxLCBtb2RpZmllcnMyKSB7XG4gICAgICAgIHJldHVybiBtb2RpZmllcnMxLnNvcnQoKS5qb2luKCcsJykgPT09IG1vZGlmaWVyczIuc29ydCgpLmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0YWtlcyBhIGtleSBldmVudCBhbmQgZmlndXJlcyBvdXQgd2hhdCB0aGUgbW9kaWZpZXJzIGFyZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfZXZlbnRNb2RpZmllcnMoZSkge1xuICAgICAgICB2YXIgbW9kaWZpZXJzID0gW107XG5cbiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKCdzaGlmdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUuYWx0S2V5KSB7XG4gICAgICAgICAgICBtb2RpZmllcnMucHVzaCgnYWx0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICBtb2RpZmllcnMucHVzaCgnY3RybCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUubWV0YUtleSkge1xuICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goJ21ldGEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb2RpZmllcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcHJldmVudHMgZGVmYXVsdCBmb3IgdGhpcyBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfcHJldmVudERlZmF1bHQoZSkge1xuICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHN0b3BzIHByb3BvZ2F0aW9uIGZvciB0aGlzIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICogQHJldHVybnMgdm9pZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9zdG9wUHJvcGFnYXRpb24oZSkge1xuICAgICAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGV0ZXJtaW5lcyBpZiB0aGUga2V5Y29kZSBzcGVjaWZpZWQgaXMgYSBtb2RpZmllciBrZXkgb3Igbm90XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gX2lzTW9kaWZpZXIoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NoaWZ0JyB8fCBrZXkgPT0gJ2N0cmwnIHx8IGtleSA9PSAnYWx0JyB8fCBrZXkgPT0gJ21ldGEnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldmVyc2VzIHRoZSBtYXAgbG9va3VwIHNvIHRoYXQgd2UgY2FuIGxvb2sgZm9yIHNwZWNpZmljIGtleXNcbiAgICAgKiB0byBzZWUgd2hhdCBjYW4gYW5kIGNhbid0IHVzZSBrZXlwcmVzc1xuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9nZXRSZXZlcnNlTWFwKCkge1xuICAgICAgICBpZiAoIV9SRVZFUlNFX01BUCkge1xuICAgICAgICAgICAgX1JFVkVSU0VfTUFQID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gX01BUCkge1xuXG4gICAgICAgICAgICAgICAgLy8gcHVsbCBvdXQgdGhlIG51bWVyaWMga2V5cGFkIGZyb20gaGVyZSBjYXVzZSBrZXlwcmVzcyBzaG91bGRcbiAgICAgICAgICAgICAgICAvLyBiZSBhYmxlIHRvIGRldGVjdCB0aGUga2V5cyBmcm9tIHRoZSBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID4gOTUgJiYga2V5IDwgMTEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChfTUFQLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX1JFVkVSU0VfTUFQW19NQVBba2V5XV0gPSBrZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfUkVWRVJTRV9NQVA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcGlja3MgdGhlIGJlc3QgYWN0aW9uIGJhc2VkIG9uIHRoZSBrZXkgY29tYmluYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBjaGFyYWN0ZXIgZm9yIGtleVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gYWN0aW9uIHBhc3NlZCBpblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9waWNrQmVzdEFjdGlvbihrZXksIG1vZGlmaWVycywgYWN0aW9uKSB7XG5cbiAgICAgICAgLy8gaWYgbm8gYWN0aW9uIHdhcyBwaWNrZWQgaW4gd2Ugc2hvdWxkIHRyeSB0byBwaWNrIHRoZSBvbmVcbiAgICAgICAgLy8gdGhhdCB3ZSB0aGluayB3b3VsZCB3b3JrIGJlc3QgZm9yIHRoaXMga2V5XG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICBhY3Rpb24gPSBfZ2V0UmV2ZXJzZU1hcCgpW2tleV0gPyAna2V5ZG93bicgOiAna2V5cHJlc3MnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW9kaWZpZXIga2V5cyBkb24ndCB3b3JrIGFzIGV4cGVjdGVkIHdpdGgga2V5cHJlc3MsXG4gICAgICAgIC8vIHN3aXRjaCB0byBrZXlkb3duXG4gICAgICAgIGlmIChhY3Rpb24gPT0gJ2tleXByZXNzJyAmJiBtb2RpZmllcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhY3Rpb24gPSAna2V5ZG93bic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGZyb20gYSBzdHJpbmcga2V5IGNvbWJpbmF0aW9uIHRvIGFuIGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNvbWJpbmF0aW9uIGxpa2UgXCJjb21tYW5kK3NoaWZ0K2xcIlxuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9rZXlzRnJvbVN0cmluZyhjb21iaW5hdGlvbikge1xuICAgICAgICBpZiAoY29tYmluYXRpb24gPT09ICcrJykge1xuICAgICAgICAgICAgcmV0dXJuIFsnKyddO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tYmluYXRpb24gPSBjb21iaW5hdGlvbi5yZXBsYWNlKC9cXCt7Mn0vZywgJytwbHVzJyk7XG4gICAgICAgIHJldHVybiBjb21iaW5hdGlvbi5zcGxpdCgnKycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgaW5mbyBmb3IgYSBzcGVjaWZpYyBrZXkgY29tYmluYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gY29tYmluYXRpb24ga2V5IGNvbWJpbmF0aW9uIChcImNvbW1hbmQrc1wiIG9yIFwiYVwiIG9yIFwiKlwiKVxuICAgICAqIEBwYXJhbSAge3N0cmluZz19IGFjdGlvblxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgICovXG4gICAgZnVuY3Rpb24gX2dldEtleUluZm8oY29tYmluYXRpb24sIGFjdGlvbikge1xuICAgICAgICB2YXIga2V5cztcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBtb2RpZmllcnMgPSBbXTtcblxuICAgICAgICAvLyB0YWtlIHRoZSBrZXlzIGZyb20gdGhpcyBwYXR0ZXJuIGFuZCBmaWd1cmUgb3V0IHdoYXQgdGhlIGFjdHVhbFxuICAgICAgICAvLyBwYXR0ZXJuIGlzIGFsbCBhYm91dFxuICAgICAgICBrZXlzID0gX2tleXNGcm9tU3RyaW5nKGNvbWJpbmF0aW9uKTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAga2V5ID0ga2V5c1tpXTtcblxuICAgICAgICAgICAgLy8gbm9ybWFsaXplIGtleSBuYW1lc1xuICAgICAgICAgICAgaWYgKF9TUEVDSUFMX0FMSUFTRVNba2V5XSkge1xuICAgICAgICAgICAgICAgIGtleSA9IF9TUEVDSUFMX0FMSUFTRVNba2V5XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBub3QgYSBrZXlwcmVzcyBldmVudCB0aGVuIHdlIHNob3VsZFxuICAgICAgICAgICAgLy8gYmUgc21hcnQgYWJvdXQgdXNpbmcgc2hpZnQga2V5c1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG9ubHkgd29yayBmb3IgVVMga2V5Ym9hcmRzIGhvd2V2ZXJcbiAgICAgICAgICAgIGlmIChhY3Rpb24gJiYgYWN0aW9uICE9ICdrZXlwcmVzcycgJiYgX1NISUZUX01BUFtrZXldKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gX1NISUZUX01BUFtrZXldO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKCdzaGlmdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGtleSBpcyBhIG1vZGlmaWVyIHRoZW4gYWRkIGl0IHRvIHRoZSBsaXN0IG9mIG1vZGlmaWVyc1xuICAgICAgICAgICAgaWYgKF9pc01vZGlmaWVyKGtleSkpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHdoYXQgdGhlIGtleSBjb21iaW5hdGlvbiBpc1xuICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBwaWNrIHRoZSBiZXN0IGV2ZW50IGZvciBpdFxuICAgICAgICBhY3Rpb24gPSBfcGlja0Jlc3RBY3Rpb24oa2V5LCBtb2RpZmllcnMsIGFjdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbW9kaWZpZXJzOiBtb2RpZmllcnMsXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9iZWxvbmdzVG8oZWxlbWVudCwgYW5jZXN0b3IpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IGRvY3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gYW5jZXN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9iZWxvbmdzVG8oZWxlbWVudC5wYXJlbnROb2RlLCBhbmNlc3Rvcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTW91c2V0cmFwKHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRhcmdldEVsZW1lbnQgPSB0YXJnZXRFbGVtZW50IHx8IGRvY3VtZW50O1xuXG4gICAgICAgIGlmICghKHNlbGYgaW5zdGFuY2VvZiBNb3VzZXRyYXApKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vdXNldHJhcCh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBlbGVtZW50IHRvIGF0dGFjaCBrZXkgZXZlbnRzIHRvXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlIHtFbGVtZW50fVxuICAgICAgICAgKi9cbiAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXRFbGVtZW50O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhIGxpc3Qgb2YgYWxsIHRoZSBjYWxsYmFja3Mgc2V0dXAgdmlhIE1vdXNldHJhcC5iaW5kKClcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIHNlbGYuX2NhbGxiYWNrcyA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBkaXJlY3QgbWFwIG9mIHN0cmluZyBjb21iaW5hdGlvbnMgdG8gY2FsbGJhY2tzIHVzZWQgZm9yIHRyaWdnZXIoKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgc2VsZi5fZGlyZWN0TWFwID0ge307XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGtlZXBzIHRyYWNrIG9mIHdoYXQgbGV2ZWwgZWFjaCBzZXF1ZW5jZSBpcyBhdCBzaW5jZSBtdWx0aXBsZVxuICAgICAgICAgKiBzZXF1ZW5jZXMgY2FuIHN0YXJ0IG91dCB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgX3NlcXVlbmNlTGV2ZWxzID0ge307XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBzZXRUaW1lb3V0IGNhbGxcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge251bGx8bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIF9yZXNldFRpbWVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0ZW1wb3Jhcnkgc3RhdGUgd2hlcmUgd2Ugd2lsbCBpZ25vcmUgdGhlIG5leHQga2V5dXBcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW58c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIF9pZ25vcmVOZXh0S2V5dXAgPSBmYWxzZTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogdGVtcG9yYXJ5IHN0YXRlIHdoZXJlIHdlIHdpbGwgaWdub3JlIHRoZSBuZXh0IGtleXByZXNzXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIF9pZ25vcmVOZXh0S2V5cHJlc3MgPSBmYWxzZTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogYXJlIHdlIGN1cnJlbnRseSBpbnNpZGUgb2YgYSBzZXF1ZW5jZT9cbiAgICAgICAgICogdHlwZSBvZiBhY3Rpb24gKFwia2V5dXBcIiBvciBcImtleWRvd25cIiBvciBcImtleXByZXNzXCIpIG9yIGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufHN0cmluZ31cbiAgICAgICAgICovXG4gICAgICAgIHZhciBfbmV4dEV4cGVjdGVkQWN0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJlc2V0cyBhbGwgc2VxdWVuY2UgY291bnRlcnMgZXhjZXB0IGZvciB0aGUgb25lcyBwYXNzZWQgaW5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGRvTm90UmVzZXRcbiAgICAgICAgICogQHJldHVybnMgdm9pZFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gX3Jlc2V0U2VxdWVuY2VzKGRvTm90UmVzZXQpIHtcbiAgICAgICAgICAgIGRvTm90UmVzZXQgPSBkb05vdFJlc2V0IHx8IHt9O1xuXG4gICAgICAgICAgICB2YXIgYWN0aXZlU2VxdWVuY2VzID0gZmFsc2UsXG4gICAgICAgICAgICAgICAga2V5O1xuXG4gICAgICAgICAgICBmb3IgKGtleSBpbiBfc2VxdWVuY2VMZXZlbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9Ob3RSZXNldFtrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVNlcXVlbmNlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfc2VxdWVuY2VMZXZlbHNba2V5XSA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWN0aXZlU2VxdWVuY2VzKSB7XG4gICAgICAgICAgICAgICAgX25leHRFeHBlY3RlZEFjdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZpbmRzIGFsbCBjYWxsYmFja3MgdGhhdCBtYXRjaCBiYXNlZCBvbiB0aGUga2V5Y29kZSwgbW9kaWZpZXJzLFxuICAgICAgICAgKiBhbmQgYWN0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyYWN0ZXJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR8T2JqZWN0fSBlXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gc2VxdWVuY2VOYW1lIC0gbmFtZSBvZiB0aGUgc2VxdWVuY2Ugd2UgYXJlIGxvb2tpbmcgZm9yXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gY29tYmluYXRpb25cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXI9fSBsZXZlbFxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBfZ2V0TWF0Y2hlcyhjaGFyYWN0ZXIsIG1vZGlmaWVycywgZSwgc2VxdWVuY2VOYW1lLCBjb21iaW5hdGlvbiwgbGV2ZWwpIHtcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrO1xuICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBhY3Rpb24gPSBlLnR5cGU7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBubyBldmVudHMgcmVsYXRlZCB0byB0aGlzIGtleWNvZGVcbiAgICAgICAgICAgIGlmICghc2VsZi5fY2FsbGJhY2tzW2NoYXJhY3Rlcl0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGEgbW9kaWZpZXIga2V5IGlzIGNvbWluZyB1cCBvbiBpdHMgb3duIHdlIHNob3VsZCBhbGxvdyBpdFxuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSAna2V5dXAnICYmIF9pc01vZGlmaWVyKGNoYXJhY3RlcikpIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMgPSBbY2hhcmFjdGVyXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBrZXkgdGhhdCB3YXMgcHJlc3NlZFxuICAgICAgICAgICAgLy8gYW5kIHNlZSBpZiBhbnkgb2YgdGhlbSBtYXRjaFxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlbGYuX2NhbGxiYWNrc1tjaGFyYWN0ZXJdLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBzZWxmLl9jYWxsYmFja3NbY2hhcmFjdGVyXVtpXTtcblxuICAgICAgICAgICAgICAgIC8vIGlmIGEgc2VxdWVuY2UgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBidXQgdGhpcyBpcyBhIHNlcXVlbmNlIGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIHdyb25nIGxldmVsIHRoZW4gbW92ZSBvbnRvIHRoZSBuZXh0IG1hdGNoXG4gICAgICAgICAgICAgICAgaWYgKCFzZXF1ZW5jZU5hbWUgJiYgY2FsbGJhY2suc2VxICYmIF9zZXF1ZW5jZUxldmVsc1tjYWxsYmFjay5zZXFdICE9IGNhbGxiYWNrLmxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBhY3Rpb24gd2UgYXJlIGxvb2tpbmcgZm9yIGRvZXNuJ3QgbWF0Y2ggdGhlIGFjdGlvbiB3ZSBnb3RcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIHNob3VsZCBrZWVwIGdvaW5nXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBjYWxsYmFjay5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGtleXByZXNzIGV2ZW50IGFuZCB0aGUgbWV0YSBrZXkgYW5kIGNvbnRyb2wga2V5XG4gICAgICAgICAgICAgICAgLy8gYXJlIG5vdCBwcmVzc2VkIHRoYXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIG9ubHkgbG9vayBhdCB0aGVcbiAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIsIG90aGVyd2lzZSBjaGVjayB0aGUgbW9kaWZpZXJzIGFzIHdlbGxcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIGNocm9tZSB3aWxsIG5vdCBmaXJlIGEga2V5cHJlc3MgaWYgbWV0YSBvciBjb250cm9sIGlzIGRvd25cbiAgICAgICAgICAgICAgICAvLyBzYWZhcmkgd2lsbCBmaXJlIGEga2V5cHJlc3MgaWYgbWV0YSBvciBtZXRhK3NoaWZ0IGlzIGRvd25cbiAgICAgICAgICAgICAgICAvLyBmaXJlZm94IHdpbGwgZmlyZSBhIGtleXByZXNzIGlmIG1ldGEgb3IgY29udHJvbCBpcyBkb3duXG4gICAgICAgICAgICAgICAgaWYgKChhY3Rpb24gPT0gJ2tleXByZXNzJyAmJiAhZS5tZXRhS2V5ICYmICFlLmN0cmxLZXkpIHx8IF9tb2RpZmllcnNNYXRjaChtb2RpZmllcnMsIGNhbGxiYWNrLm1vZGlmaWVycykpIHtcblxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHlvdSBiaW5kIGEgY29tYmluYXRpb24gb3Igc2VxdWVuY2UgYSBzZWNvbmQgdGltZSBpdFxuICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgb3ZlcndyaXRlIHRoZSBmaXJzdCBvbmUuICBpZiBhIHNlcXVlbmNlTmFtZSBvclxuICAgICAgICAgICAgICAgICAgICAvLyBjb21iaW5hdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhpcyBjYWxsIGl0IGRvZXMganVzdCB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0b2RvIG1ha2UgZGVsZXRpbmcgaXRzIG93biBtZXRob2Q/XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWxldGVDb21ibyA9ICFzZXF1ZW5jZU5hbWUgJiYgY2FsbGJhY2suY29tYm8gPT0gY29tYmluYXRpb247XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWxldGVTZXF1ZW5jZSA9IHNlcXVlbmNlTmFtZSAmJiBjYWxsYmFjay5zZXEgPT0gc2VxdWVuY2VOYW1lICYmIGNhbGxiYWNrLmxldmVsID09IGxldmVsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlQ29tYm8gfHwgZGVsZXRlU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrc1tjaGFyYWN0ZXJdLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhY3R1YWxseSBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgICAgICpcbiAgICAgICAgICogaWYgeW91ciBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHRoaXMgd2lsbCB1c2UgdGhlIGpxdWVyeVxuICAgICAgICAgKiBjb252ZW50aW9uIC0gcHJldmVudCBkZWZhdWx0IGFuZCBzdG9wIHByb3BvZ2F0aW9uIG9uIHRoZSBldmVudFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIF9maXJlQ2FsbGJhY2soY2FsbGJhY2ssIGUsIGNvbWJvLCBzZXF1ZW5jZSkge1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGV2ZW50IHNob3VsZCBub3QgaGFwcGVuIHN0b3AgaGVyZVxuICAgICAgICAgICAgaWYgKHNlbGYuc3RvcENhbGxiYWNrKGUsIGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudCwgY29tYm8sIHNlcXVlbmNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGUsIGNvbWJvKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgICAgICAgICAgX3N0b3BQcm9wYWdhdGlvbihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBoYW5kbGVzIGEgY2hhcmFjdGVyIGtleSBldmVudFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgICAgICovXG4gICAgICAgIHNlbGYuX2hhbmRsZUtleSA9IGZ1bmN0aW9uKGNoYXJhY3RlciwgbW9kaWZpZXJzLCBlKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gX2dldE1hdGNoZXMoY2hhcmFjdGVyLCBtb2RpZmllcnMsIGUpO1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICB2YXIgZG9Ob3RSZXNldCA9IHt9O1xuICAgICAgICAgICAgdmFyIG1heExldmVsID0gMDtcbiAgICAgICAgICAgIHZhciBwcm9jZXNzZWRTZXF1ZW5jZUNhbGxiYWNrID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbWF4TGV2ZWwgZm9yIHNlcXVlbmNlcyBzbyB3ZSBjYW4gb25seSBleGVjdXRlIHRoZSBsb25nZXN0IGNhbGxiYWNrIHNlcXVlbmNlXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrc1tpXS5zZXEpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBNYXRoLm1heChtYXhMZXZlbCwgY2FsbGJhY2tzW2ldLmxldmVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBtYXRjaGluZyBjYWxsYmFja3MgZm9yIHRoaXMga2V5IGV2ZW50XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgKytpKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBmaXJlIGZvciBhbGwgc2VxdWVuY2UgY2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBiZWNhdXNlIGlmIGZvciBleGFtcGxlIHlvdSBoYXZlIG11bHRpcGxlIHNlcXVlbmNlc1xuICAgICAgICAgICAgICAgIC8vIGJvdW5kIHN1Y2ggYXMgXCJnIGlcIiBhbmQgXCJnIHRcIiB0aGV5IGJvdGggbmVlZCB0byBmaXJlIHRoZVxuICAgICAgICAgICAgICAgIC8vIGNhbGxiYWNrIGZvciBtYXRjaGluZyBnIGNhdXNlIG90aGVyd2lzZSB5b3UgY2FuIG9ubHkgZXZlclxuICAgICAgICAgICAgICAgIC8vIG1hdGNoIHRoZSBmaXJzdCBvbmVcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzW2ldLnNlcSkge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgZmlyZSBjYWxsYmFja3MgZm9yIHRoZSBtYXhMZXZlbCB0byBwcmV2ZW50XG4gICAgICAgICAgICAgICAgICAgIC8vIHN1YnNlcXVlbmNlcyBmcm9tIGFsc28gZmlyaW5nXG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvciBleGFtcGxlICdhIG9wdGlvbiBiJyBzaG91bGQgbm90IGNhdXNlICdvcHRpb24gYicgdG8gZmlyZVxuICAgICAgICAgICAgICAgICAgICAvLyBldmVuIHRob3VnaCAnb3B0aW9uIGInIGlzIHBhcnQgb2YgdGhlIG90aGVyIHNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIC8vIGFueSBzZXF1ZW5jZXMgdGhhdCBkbyBub3QgbWF0Y2ggaGVyZSB3aWxsIGJlIGRpc2NhcmRlZFxuICAgICAgICAgICAgICAgICAgICAvLyBiZWxvdyBieSB0aGUgX3Jlc2V0U2VxdWVuY2VzIGNhbGxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrc1tpXS5sZXZlbCAhPSBtYXhMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTZXF1ZW5jZUNhbGxiYWNrID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGEgbGlzdCBvZiB3aGljaCBzZXF1ZW5jZXMgd2VyZSBtYXRjaGVzIGZvciBsYXRlclxuICAgICAgICAgICAgICAgICAgICBkb05vdFJlc2V0W2NhbGxiYWNrc1tpXS5zZXFdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgX2ZpcmVDYWxsYmFjayhjYWxsYmFja3NbaV0uY2FsbGJhY2ssIGUsIGNhbGxiYWNrc1tpXS5jb21ibywgY2FsbGJhY2tzW2ldLnNlcSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdlcmUgbm8gc2VxdWVuY2UgbWF0Y2hlcyBidXQgd2UgYXJlIHN0aWxsIGhlcmVcbiAgICAgICAgICAgICAgICAvLyB0aGF0IG1lYW5zIHRoaXMgaXMgYSByZWd1bGFyIG1hdGNoIHNvIHdlIHNob3VsZCBmaXJlIHRoYXRcbiAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NlZFNlcXVlbmNlQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgX2ZpcmVDYWxsYmFjayhjYWxsYmFja3NbaV0uY2FsbGJhY2ssIGUsIGNhbGxiYWNrc1tpXS5jb21ibyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUga2V5IHlvdSBwcmVzc2VkIG1hdGNoZXMgdGhlIHR5cGUgb2Ygc2VxdWVuY2Ugd2l0aG91dFxuICAgICAgICAgICAgLy8gYmVpbmcgYSBtb2RpZmllciAoaWUgXCJrZXl1cFwiIG9yIFwia2V5cHJlc3NcIikgdGhlbiB3ZSBzaG91bGRcbiAgICAgICAgICAgIC8vIHJlc2V0IGFsbCBzZXF1ZW5jZXMgdGhhdCB3ZXJlIG5vdCBtYXRjaGVkIGJ5IHRoaXMgZXZlbnRcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyB0aGlzIGlzIHNvLCBmb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgdGhlIHNlcXVlbmNlIFwiaCBhIHRcIiBhbmQgeW91XG4gICAgICAgICAgICAvLyB0eXBlIFwiaCBlIGEgciB0XCIgaXQgZG9lcyBub3QgbWF0Y2guICBpbiB0aGlzIGNhc2UgdGhlIFwiZVwiIHdpbGxcbiAgICAgICAgICAgIC8vIGNhdXNlIHRoZSBzZXF1ZW5jZSB0byByZXNldFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIG1vZGlmaWVyIGtleXMgYXJlIGlnbm9yZWQgYmVjYXVzZSB5b3UgY2FuIGhhdmUgYSBzZXF1ZW5jZVxuICAgICAgICAgICAgLy8gdGhhdCBjb250YWlucyBtb2RpZmllcnMgc3VjaCBhcyBcImVudGVyIGN0cmwrc3BhY2VcIiBhbmQgaW4gbW9zdFxuICAgICAgICAgICAgLy8gY2FzZXMgdGhlIG1vZGlmaWVyIGtleSB3aWxsIGJlIHByZXNzZWQgYmVmb3JlIHRoZSBuZXh0IGtleVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIGFsc28gaWYgeW91IGhhdmUgYSBzZXF1ZW5jZSBzdWNoIGFzIFwiY3RybCtiIGFcIiB0aGVuIHByZXNzaW5nIHRoZVxuICAgICAgICAgICAgLy8gXCJiXCIga2V5IHdpbGwgdHJpZ2dlciBhIFwia2V5cHJlc3NcIiBhbmQgYSBcImtleWRvd25cIlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIHRoZSBcImtleWRvd25cIiBpcyBleHBlY3RlZCB3aGVuIHRoZXJlIGlzIGEgbW9kaWZpZXIsIGJ1dCB0aGVcbiAgICAgICAgICAgIC8vIFwia2V5cHJlc3NcIiBlbmRzIHVwIG1hdGNoaW5nIHRoZSBfbmV4dEV4cGVjdGVkQWN0aW9uIHNpbmNlIGl0IG9jY3Vyc1xuICAgICAgICAgICAgLy8gYWZ0ZXIgYW5kIHRoYXQgY2F1c2VzIHRoZSBzZXF1ZW5jZSB0byByZXNldFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIHdlIGlnbm9yZSBrZXlwcmVzc2VzIGluIGEgc2VxdWVuY2UgdGhhdCBkaXJlY3RseSBmb2xsb3cgYSBrZXlkb3duXG4gICAgICAgICAgICAvLyBmb3IgdGhlIHNhbWUgY2hhcmFjdGVyXG4gICAgICAgICAgICB2YXIgaWdub3JlVGhpc0tleXByZXNzID0gZS50eXBlID09ICdrZXlwcmVzcycgJiYgX2lnbm9yZU5leHRLZXlwcmVzcztcbiAgICAgICAgICAgIGlmIChlLnR5cGUgPT0gX25leHRFeHBlY3RlZEFjdGlvbiAmJiAhX2lzTW9kaWZpZXIoY2hhcmFjdGVyKSAmJiAhaWdub3JlVGhpc0tleXByZXNzKSB7XG4gICAgICAgICAgICAgICAgX3Jlc2V0U2VxdWVuY2VzKGRvTm90UmVzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfaWdub3JlTmV4dEtleXByZXNzID0gcHJvY2Vzc2VkU2VxdWVuY2VDYWxsYmFjayAmJiBlLnR5cGUgPT0gJ2tleWRvd24nO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBoYW5kbGVzIGEga2V5ZG93biBldmVudFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIF9oYW5kbGVLZXlFdmVudChlKSB7XG5cbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBlLndoaWNoIGZvciBrZXkgZXZlbnRzXG4gICAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDI4NTYyNy9qYXZhc2NyaXB0LWtleWNvZGUtdnMtY2hhcmNvZGUtdXR0ZXItY29uZnVzaW9uXG4gICAgICAgICAgICBpZiAodHlwZW9mIGUud2hpY2ggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgZS53aGljaCA9IGUua2V5Q29kZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IF9jaGFyYWN0ZXJGcm9tRXZlbnQoZSk7XG5cbiAgICAgICAgICAgIC8vIG5vIGNoYXJhY3RlciBmb3VuZCB0aGVuIHN0b3BcbiAgICAgICAgICAgIGlmICghY2hhcmFjdGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBuZWVkIHRvIHVzZSA9PT0gZm9yIHRoZSBjaGFyYWN0ZXIgY2hlY2sgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGNhbiBiZSAwXG4gICAgICAgICAgICBpZiAoZS50eXBlID09ICdrZXl1cCcgJiYgX2lnbm9yZU5leHRLZXl1cCA9PT0gY2hhcmFjdGVyKSB7XG4gICAgICAgICAgICAgICAgX2lnbm9yZU5leHRLZXl1cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZi5oYW5kbGVLZXkoY2hhcmFjdGVyLCBfZXZlbnRNb2RpZmllcnMoZSksIGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNhbGxlZCB0byBzZXQgYSAxIHNlY29uZCB0aW1lb3V0IG9uIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2VcbiAgICAgICAgICpcbiAgICAgICAgICogdGhpcyBpcyBzbyBhZnRlciBlYWNoIGtleSBwcmVzcyBpbiB0aGUgc2VxdWVuY2UgeW91IGhhdmUgMSBzZWNvbmRcbiAgICAgICAgICogdG8gcHJlc3MgdGhlIG5leHQga2V5IGJlZm9yZSB5b3UgaGF2ZSB0byBzdGFydCBvdmVyXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIF9yZXNldFNlcXVlbmNlVGltZXIoKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoX3Jlc2V0VGltZXIpO1xuICAgICAgICAgICAgX3Jlc2V0VGltZXIgPSBzZXRUaW1lb3V0KF9yZXNldFNlcXVlbmNlcywgMTAwMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogYmluZHMgYSBrZXkgc2VxdWVuY2UgdG8gYW4gZXZlbnRcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbWJvIC0gY29tYm8gc3BlY2lmaWVkIGluIGJpbmQgY2FsbFxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBrZXlzXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gYWN0aW9uXG4gICAgICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIF9iaW5kU2VxdWVuY2UoY29tYm8sIGtleXMsIGNhbGxiYWNrLCBhY3Rpb24pIHtcblxuICAgICAgICAgICAgLy8gc3RhcnQgb2ZmIGJ5IGFkZGluZyBhIHNlcXVlbmNlIGxldmVsIHJlY29yZCBmb3IgdGhpcyBjb21iaW5hdGlvblxuICAgICAgICAgICAgLy8gYW5kIHNldHRpbmcgdGhlIGxldmVsIHRvIDBcbiAgICAgICAgICAgIF9zZXF1ZW5jZUxldmVsc1tjb21ib10gPSAwO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGNhbGxiYWNrIHRvIGluY3JlYXNlIHRoZSBzZXF1ZW5jZSBsZXZlbCBmb3IgdGhpcyBzZXF1ZW5jZSBhbmQgcmVzZXRcbiAgICAgICAgICAgICAqIGFsbCBvdGhlciBzZXF1ZW5jZXMgdGhhdCB3ZXJlIGFjdGl2ZVxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXh0QWN0aW9uXG4gICAgICAgICAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmNyZWFzZVNlcXVlbmNlKG5leHRBY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIF9uZXh0RXhwZWN0ZWRBY3Rpb24gPSBuZXh0QWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICArK19zZXF1ZW5jZUxldmVsc1tjb21ib107XG4gICAgICAgICAgICAgICAgICAgIF9yZXNldFNlcXVlbmNlVGltZXIoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHdyYXBzIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24gaW4gb3JkZXJcbiAgICAgICAgICAgICAqIHRvIHJlc2V0IGFsbCBzZXF1ZW5jZSBjb3VudGVycyBhcyBzb29uIGFzIHRoaXMgc2VxdWVuY2UgaXMgZG9uZVxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgICAgICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZnVuY3Rpb24gX2NhbGxiYWNrQW5kUmVzZXQoZSkge1xuICAgICAgICAgICAgICAgIF9maXJlQ2FsbGJhY2soY2FsbGJhY2ssIGUsIGNvbWJvKTtcblxuICAgICAgICAgICAgICAgIC8vIHdlIHNob3VsZCBpZ25vcmUgdGhlIG5leHQga2V5IHVwIGlmIHRoZSBhY3Rpb24gaXMga2V5IGRvd25cbiAgICAgICAgICAgICAgICAvLyBvciBrZXlwcmVzcy4gIHRoaXMgaXMgc28gaWYgeW91IGZpbmlzaCBhIHNlcXVlbmNlIGFuZFxuICAgICAgICAgICAgICAgIC8vIHJlbGVhc2UgdGhlIGtleSB0aGUgZmluYWwga2V5IHdpbGwgbm90IHRyaWdnZXIgYSBrZXl1cFxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gIT09ICdrZXl1cCcpIHtcbiAgICAgICAgICAgICAgICAgICAgX2lnbm9yZU5leHRLZXl1cCA9IF9jaGFyYWN0ZXJGcm9tRXZlbnQoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gd2VpcmQgcmFjZSBjb25kaXRpb24gaWYgYSBzZXF1ZW5jZSBlbmRzIHdpdGggdGhlIGtleVxuICAgICAgICAgICAgICAgIC8vIGFub3RoZXIgc2VxdWVuY2UgYmVnaW5zIHdpdGhcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KF9yZXNldFNlcXVlbmNlcywgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2gga2V5cyBvbmUgYXQgYSB0aW1lIGFuZCBiaW5kIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja1xuICAgICAgICAgICAgLy8gZnVuY3Rpb24uICBmb3IgYW55IGtleSBsZWFkaW5nIHVwIHRvIHRoZSBmaW5hbCBvbmUgaXQgc2hvdWxkXG4gICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgc2VxdWVuY2UuIGFmdGVyIHRoZSBmaW5hbCwgaXQgc2hvdWxkIHJlc2V0IGFsbCBzZXF1ZW5jZXNcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBpZiBhbiBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBvcmlnaW5hbCBiaW5kIGNhbGwgdGhlbiB0aGF0IHdpbGxcbiAgICAgICAgICAgIC8vIGJlIHVzZWQgdGhyb3VnaG91dC4gIG90aGVyd2lzZSB3ZSB3aWxsIHBhc3MgdGhlIGFjdGlvbiB0aGF0IHRoZVxuICAgICAgICAgICAgLy8gbmV4dCBrZXkgaW4gdGhlIHNlcXVlbmNlIHNob3VsZCBtYXRjaC4gIHRoaXMgYWxsb3dzIGEgc2VxdWVuY2VcbiAgICAgICAgICAgIC8vIHRvIG1peCBhbmQgbWF0Y2gga2V5cHJlc3MgYW5kIGtleWRvd24gZXZlbnRzIGRlcGVuZGluZyBvbiB3aGljaFxuICAgICAgICAgICAgLy8gb25lcyBhcmUgYmV0dGVyIHN1aXRlZCB0byB0aGUga2V5IHByb3ZpZGVkXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNGaW5hbCA9IGkgKyAxID09PSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlZENhbGxiYWNrID0gaXNGaW5hbCA/IF9jYWxsYmFja0FuZFJlc2V0IDogX2luY3JlYXNlU2VxdWVuY2UoYWN0aW9uIHx8IF9nZXRLZXlJbmZvKGtleXNbaSArIDFdKS5hY3Rpb24pO1xuICAgICAgICAgICAgICAgIF9iaW5kU2luZ2xlKGtleXNbaV0sIHdyYXBwZWRDYWxsYmFjaywgYWN0aW9uLCBjb21ibywgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogYmluZHMgYSBzaW5nbGUga2V5Ym9hcmQgY29tYmluYXRpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbWJpbmF0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gYWN0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gc2VxdWVuY2VOYW1lIC0gbmFtZSBvZiBzZXF1ZW5jZSBpZiBwYXJ0IG9mIHNlcXVlbmNlXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbGV2ZWwgLSB3aGF0IHBhcnQgb2YgdGhlIHNlcXVlbmNlIHRoZSBjb21tYW5kIGlzXG4gICAgICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIF9iaW5kU2luZ2xlKGNvbWJpbmF0aW9uLCBjYWxsYmFjaywgYWN0aW9uLCBzZXF1ZW5jZU5hbWUsIGxldmVsKSB7XG5cbiAgICAgICAgICAgIC8vIHN0b3JlIGEgZGlyZWN0IG1hcHBlZCByZWZlcmVuY2UgZm9yIHVzZSB3aXRoIE1vdXNldHJhcC50cmlnZ2VyXG4gICAgICAgICAgICBzZWxmLl9kaXJlY3RNYXBbY29tYmluYXRpb24gKyAnOicgKyBhY3Rpb25dID0gY2FsbGJhY2s7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBtdWx0aXBsZSBzcGFjZXMgaW4gYSByb3cgYmVjb21lIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgICAgICBjb21iaW5hdGlvbiA9IGNvbWJpbmF0aW9uLnJlcGxhY2UoL1xccysvZywgJyAnKTtcblxuICAgICAgICAgICAgdmFyIHNlcXVlbmNlID0gY29tYmluYXRpb24uc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIHZhciBpbmZvO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIHBhdHRlcm4gaXMgYSBzZXF1ZW5jZSBvZiBrZXlzIHRoZW4gcnVuIHRocm91Z2ggdGhpcyBtZXRob2RcbiAgICAgICAgICAgIC8vIHRvIHJlcHJvY2VzcyBlYWNoIHBhdHRlcm4gb25lIGtleSBhdCBhIHRpbWVcbiAgICAgICAgICAgIGlmIChzZXF1ZW5jZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgX2JpbmRTZXF1ZW5jZShjb21iaW5hdGlvbiwgc2VxdWVuY2UsIGNhbGxiYWNrLCBhY3Rpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5mbyA9IF9nZXRLZXlJbmZvKGNvbWJpbmF0aW9uLCBhY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdG8gaW5pdGlhbGl6ZSBhcnJheSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICAvLyBhIGNhbGxiYWNrIGlzIGFkZGVkIGZvciB0aGlzIGtleVxuICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2tzW2luZm8ua2V5XSA9IHNlbGYuX2NhbGxiYWNrc1tpbmZvLmtleV0gfHwgW107XG5cbiAgICAgICAgICAgIC8vIHJlbW92ZSBhbiBleGlzdGluZyBtYXRjaCBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgICAgIF9nZXRNYXRjaGVzKGluZm8ua2V5LCBpbmZvLm1vZGlmaWVycywge3R5cGU6IGluZm8uYWN0aW9ufSwgc2VxdWVuY2VOYW1lLCBjb21iaW5hdGlvbiwgbGV2ZWwpO1xuXG4gICAgICAgICAgICAvLyBhZGQgdGhpcyBjYWxsIGJhY2sgdG8gdGhlIGFycmF5XG4gICAgICAgICAgICAvLyBpZiBpdCBpcyBhIHNlcXVlbmNlIHB1dCBpdCBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgICAvLyBpZiBub3QgcHV0IGl0IGF0IHRoZSBlbmRcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSB3YXkgdGhlc2UgYXJlIHByb2Nlc3NlZCBleHBlY3RzXG4gICAgICAgICAgICAvLyB0aGUgc2VxdWVuY2Ugb25lcyB0byBjb21lIGZpcnN0XG4gICAgICAgICAgICBzZWxmLl9jYWxsYmFja3NbaW5mby5rZXldW3NlcXVlbmNlTmFtZSA/ICd1bnNoaWZ0JyA6ICdwdXNoJ10oe1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICAgICAgICAgICAgICBtb2RpZmllcnM6IGluZm8ubW9kaWZpZXJzLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogaW5mby5hY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VxOiBzZXF1ZW5jZU5hbWUsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsLFxuICAgICAgICAgICAgICAgIGNvbWJvOiBjb21iaW5hdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogYmluZHMgbXVsdGlwbGUgY29tYmluYXRpb25zIHRvIHRoZSBzYW1lIGNhbGxiYWNrXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGNvbWJpbmF0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGFjdGlvblxuICAgICAgICAgKiBAcmV0dXJucyB2b2lkXG4gICAgICAgICAqL1xuICAgICAgICBzZWxmLl9iaW5kTXVsdGlwbGUgPSBmdW5jdGlvbihjb21iaW5hdGlvbnMsIGNhbGxiYWNrLCBhY3Rpb24pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tYmluYXRpb25zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgX2JpbmRTaW5nbGUoY29tYmluYXRpb25zW2ldLCBjYWxsYmFjaywgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBzdGFydCFcbiAgICAgICAgX2FkZEV2ZW50KHRhcmdldEVsZW1lbnQsICdrZXlwcmVzcycsIF9oYW5kbGVLZXlFdmVudCk7XG4gICAgICAgIF9hZGRFdmVudCh0YXJnZXRFbGVtZW50LCAna2V5ZG93bicsIF9oYW5kbGVLZXlFdmVudCk7XG4gICAgICAgIF9hZGRFdmVudCh0YXJnZXRFbGVtZW50LCAna2V5dXAnLCBfaGFuZGxlS2V5RXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGJpbmRzIGFuIGV2ZW50IHRvIG1vdXNldHJhcFxuICAgICAqXG4gICAgICogY2FuIGJlIGEgc2luZ2xlIGtleSwgYSBjb21iaW5hdGlvbiBvZiBrZXlzIHNlcGFyYXRlZCB3aXRoICssXG4gICAgICogYW4gYXJyYXkgb2Yga2V5cywgb3IgYSBzZXF1ZW5jZSBvZiBrZXlzIHNlcGFyYXRlZCBieSBzcGFjZXNcbiAgICAgKlxuICAgICAqIGJlIHN1cmUgdG8gbGlzdCB0aGUgbW9kaWZpZXIga2V5cyBmaXJzdCB0byBtYWtlIHN1cmUgdGhhdCB0aGVcbiAgICAgKiBjb3JyZWN0IGtleSBlbmRzIHVwIGdldHRpbmcgYm91bmQgKHRoZSBsYXN0IGtleSBpbiB0aGUgcGF0dGVybilcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEFycmF5fSBrZXlzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZz19IGFjdGlvbiAtICdrZXlwcmVzcycsICdrZXlkb3duJywgb3IgJ2tleXVwJ1xuICAgICAqIEByZXR1cm5zIHZvaWRcbiAgICAgKi9cbiAgICBNb3VzZXRyYXAucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihrZXlzLCBjYWxsYmFjaywgYWN0aW9uKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAga2V5cyA9IGtleXMgaW5zdGFuY2VvZiBBcnJheSA/IGtleXMgOiBba2V5c107XG4gICAgICAgIHNlbGYuX2JpbmRNdWx0aXBsZS5jYWxsKHNlbGYsIGtleXMsIGNhbGxiYWNrLCBhY3Rpb24pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogdW5iaW5kcyBhbiBldmVudCB0byBtb3VzZXRyYXBcbiAgICAgKlxuICAgICAqIHRoZSB1bmJpbmRpbmcgc2V0cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIHNwZWNpZmllZCBrZXkgY29tYm9cbiAgICAgKiB0byBhbiBlbXB0eSBmdW5jdGlvbiBhbmQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBrZXkgaW4gdGhlXG4gICAgICogX2RpcmVjdE1hcCBkaWN0LlxuICAgICAqXG4gICAgICogVE9ETzogYWN0dWFsbHkgcmVtb3ZlIHRoaXMgZnJvbSB0aGUgX2NhbGxiYWNrcyBkaWN0aW9uYXJ5IGluc3RlYWRcbiAgICAgKiBvZiBiaW5kaW5nIGFuIGVtcHR5IGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiB0aGUga2V5Y29tYm8rYWN0aW9uIGhhcyB0byBiZSBleGFjdGx5IHRoZSBzYW1lIGFzXG4gICAgICogaXQgd2FzIGRlZmluZWQgaW4gdGhlIGJpbmQgbWV0aG9kXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xBcnJheX0ga2V5c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAgICAgKiBAcmV0dXJucyB2b2lkXG4gICAgICovXG4gICAgTW91c2V0cmFwLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbihrZXlzLCBhY3Rpb24pIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gc2VsZi5iaW5kLmNhbGwoc2VsZiwga2V5cywgZnVuY3Rpb24oKSB7fSwgYWN0aW9uKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogdHJpZ2dlcnMgYW4gZXZlbnQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGJvdW5kXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gYWN0aW9uXG4gICAgICogQHJldHVybnMgdm9pZFxuICAgICAqL1xuICAgIE1vdXNldHJhcC5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uKGtleXMsIGFjdGlvbikge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLl9kaXJlY3RNYXBba2V5cyArICc6JyArIGFjdGlvbl0pIHtcbiAgICAgICAgICAgIHNlbGYuX2RpcmVjdE1hcFtrZXlzICsgJzonICsgYWN0aW9uXSh7fSwga2V5cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIHJlc2V0cyB0aGUgbGlicmFyeSBiYWNrIHRvIGl0cyBpbml0aWFsIHN0YXRlLiAgdGhpcyBpcyB1c2VmdWxcbiAgICAgKiBpZiB5b3Ugd2FudCB0byBjbGVhciBvdXQgdGhlIGN1cnJlbnQga2V5Ym9hcmQgc2hvcnRjdXRzIGFuZCBiaW5kXG4gICAgICogbmV3IG9uZXMgLSBmb3IgZXhhbXBsZSBpZiB5b3Ugc3dpdGNoIHRvIGFub3RoZXIgcGFnZVxuICAgICAqXG4gICAgICogQHJldHVybnMgdm9pZFxuICAgICAqL1xuICAgIE1vdXNldHJhcC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSB7fTtcbiAgICAgICAgc2VsZi5fZGlyZWN0TWFwID0ge307XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBzaG91bGQgd2Ugc3RvcCB0aGlzIGV2ZW50IGJlZm9yZSBmaXJpbmcgb2ZmIGNhbGxiYWNrc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgTW91c2V0cmFwLnByb3RvdHlwZS5zdG9wQ2FsbGJhY2sgPSBmdW5jdGlvbihlLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzIFwibW91c2V0cmFwXCIgdGhlbiBubyBuZWVkIHRvIHN0b3BcbiAgICAgICAgaWYgKCgnICcgKyBlbGVtZW50LmNsYXNzTmFtZSArICcgJykuaW5kZXhPZignIG1vdXNldHJhcCAnKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2JlbG9uZ3NUbyhlbGVtZW50LCBzZWxmLnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN0b3AgZm9yIGlucHV0LCBzZWxlY3QsIGFuZCB0ZXh0YXJlYVxuICAgICAgICByZXR1cm4gZWxlbWVudC50YWdOYW1lID09ICdJTlBVVCcgfHwgZWxlbWVudC50YWdOYW1lID09ICdTRUxFQ1QnIHx8IGVsZW1lbnQudGFnTmFtZSA9PSAnVEVYVEFSRUEnIHx8IGVsZW1lbnQuaXNDb250ZW50RWRpdGFibGU7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGV4cG9zZXMgX2hhbmRsZUtleSBwdWJsaWNseSBzbyBpdCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgZXh0ZW5zaW9uc1xuICAgICAqL1xuICAgIE1vdXNldHJhcC5wcm90b3R5cGUuaGFuZGxlS2V5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZUtleS5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbml0IHRoZSBnbG9iYWwgbW91c2V0cmFwIGZ1bmN0aW9uc1xuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGFsbG93IHRoZSBnbG9iYWwgbW91c2V0cmFwIGZ1bmN0aW9ucyB0byB3b3JrXG4gICAgICogbm93IHRoYXQgbW91c2V0cmFwIGlzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgTW91c2V0cmFwLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRvY3VtZW50TW91c2V0cmFwID0gTW91c2V0cmFwKGRvY3VtZW50KTtcbiAgICAgICAgZm9yICh2YXIgbWV0aG9kIGluIGRvY3VtZW50TW91c2V0cmFwKSB7XG4gICAgICAgICAgICBpZiAobWV0aG9kLmNoYXJBdCgwKSAhPT0gJ18nKSB7XG4gICAgICAgICAgICAgICAgTW91c2V0cmFwW21ldGhvZF0gPSAoZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudE1vdXNldHJhcFttZXRob2RdLmFwcGx5KGRvY3VtZW50TW91c2V0cmFwLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gKG1ldGhvZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIE1vdXNldHJhcC5pbml0KCk7XG5cbiAgICAvLyBleHBvc2UgbW91c2V0cmFwIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgd2luZG93Lk1vdXNldHJhcCA9IE1vdXNldHJhcDtcblxuICAgIC8vIGV4cG9zZSBhcyBhIGNvbW1vbiBqcyBtb2R1bGVcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBNb3VzZXRyYXA7XG4gICAgfVxuXG4gICAgLy8gZXhwb3NlIG1vdXNldHJhcCBhcyBhbiBBTUQgbW9kdWxlXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gTW91c2V0cmFwO1xuICAgICAgICB9KTtcbiAgICB9XG59KSAod2luZG93LCBkb2N1bWVudCk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmFuZ3VsYXIubW9kdWxlKCdhbmd1bGFyLWpzLXhsc3gnLCBbXSlcbiAgLmRpcmVjdGl2ZSgnanNYbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICB0ZW1wbGF0ZTogJzxpbnB1dCB0eXBlPVwiZmlsZVwiIC8+JyxcbiAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XG5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlU2VsZWN0KCkge1xuICAgICAgICAgIHZhciBmaWxlcyA9IHRoaXMuZmlsZXM7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGYgPSBmaWxlc1tpXTsgaSAhPSBmaWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGYubmFtZTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICBpZiAoIWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlYWRlci5jb250ZW50O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLyogaWYgYmluYXJ5IHN0cmluZywgcmVhZCB3aXRoIHR5cGUgJ2JpbmFyeScgKi9cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgd29ya2Jvb2sgPSBYTFMucmVhZChkYXRhLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJzLm9ucmVhZCkge1xuICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZVJlYWQgPSBzY29wZVthdHRycy5vbnJlYWRdO1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVSZWFkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlUmVhZCh3b3JrYm9vayk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJzLm9uZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVFcnJvciA9IHNjb3BlW2F0dHJzLm9uZXJyb3JdO1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIENsZWFyIGlucHV0IGZpbGVcbiAgICAgICAgICAgICAgZWxlbWVudC52YWwoJycpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy9leHRlbmQgRmlsZVJlYWRlclxuICAgICAgICAgICAgaWYgKCFGaWxlUmVhZGVyLnByb3RvdHlwZS5yZWFkQXNCaW5hcnlTdHJpbmcpIHtcbiAgICAgICAgICAgICAgRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZEFzQmluYXJ5U3RyaW5nID0gZnVuY3Rpb24gKGZpbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJpbmFyeSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgdmFyIHB0ID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KHJlYWRlci5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGJ5dGVzLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vcHQucmVzdWx0ICAtIHJlYWRvbmx5IHNvIGFzc2lnbiBiaW5hcnlcbiAgICAgICAgICAgICAgICAgIHB0LmNvbnRlbnQgPSBiaW5hcnk7XG4gICAgICAgICAgICAgICAgICAkKHB0KS50cmlnZ2VyKCdvbmxvYWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGVEYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGYpO1xuXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5vbignY2hhbmdlJywgaGFuZGxlU2VsZWN0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbiIsIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhckpTIHYxLjYuNFxuICogKGMpIDIwMTAtMjAxNyBHb29nbGUsIEluYy4gaHR0cDovL2FuZ3VsYXJqcy5vcmdcbiAqIExpY2Vuc2U6IE1JVFxuICovXG4oZnVuY3Rpb24od2luZG93LCBhbmd1bGFyKSB7J3VzZSBzdHJpY3QnO1xuXG52YXIgZm9yRWFjaDtcbnZhciBpc0FycmF5O1xudmFyIGlzU3RyaW5nO1xudmFyIGpxTGl0ZTtcblxuLyoqXG4gKiBAbmdkb2MgbW9kdWxlXG4gKiBAbmFtZSBuZ01lc3NhZ2VzXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBUaGUgYG5nTWVzc2FnZXNgIG1vZHVsZSBwcm92aWRlcyBlbmhhbmNlZCBzdXBwb3J0IGZvciBkaXNwbGF5aW5nIG1lc3NhZ2VzIHdpdGhpbiB0ZW1wbGF0ZXNcbiAqICh0eXBpY2FsbHkgd2l0aGluIGZvcm1zIG9yIHdoZW4gcmVuZGVyaW5nIG1lc3NhZ2Ugb2JqZWN0cyB0aGF0IHJldHVybiBrZXkvdmFsdWUgZGF0YSkuXG4gKiBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gSmF2YVNjcmlwdCBjb2RlIGFuZC9vciBjb21wbGV4IG5nLWlmIHN0YXRlbWVudHMgd2l0aGluIHlvdXIgZm9ybSB0ZW1wbGF0ZSB0b1xuICogc2hvdyBhbmQgaGlkZSBlcnJvciBtZXNzYWdlcyBzcGVjaWZpYyB0byB0aGUgc3RhdGUgb2YgYW4gaW5wdXQgZmllbGQsIHRoZSBgbmdNZXNzYWdlc2AgYW5kXG4gKiBgbmdNZXNzYWdlYCBkaXJlY3RpdmVzIGFyZSBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGNvbXBsZXhpdHksIGluaGVyaXRhbmNlIGFuZCBwcmlvcml0eVxuICogc2VxdWVuY2luZyBiYXNlZCBvbiB0aGUgb3JkZXIgb2YgaG93IHRoZSBtZXNzYWdlcyBhcmUgZGVmaW5lZCBpbiB0aGUgdGVtcGxhdGUuXG4gKlxuICogQ3VycmVudGx5LCB0aGUgbmdNZXNzYWdlcyBtb2R1bGUgb25seSBjb250YWlucyB0aGUgY29kZSBmb3IgdGhlIGBuZ01lc3NhZ2VzYCwgYG5nTWVzc2FnZXNJbmNsdWRlYFxuICogYG5nTWVzc2FnZWAgYW5kIGBuZ01lc3NhZ2VFeHBgIGRpcmVjdGl2ZXMuXG4gKlxuICogIyBVc2FnZVxuICogVGhlIGBuZ01lc3NhZ2VzYCBkaXJlY3RpdmUgYWxsb3dzIGtleXMgaW4gYSBrZXkvdmFsdWUgY29sbGVjdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBjaGlsZCBlbGVtZW50XG4gKiAob3IgJ21lc3NhZ2UnKSB0aGF0IHdpbGwgc2hvdyBvciBoaWRlIGJhc2VkIG9uIHRoZSB0cnV0aGluZXNzIG9mIHRoYXQga2V5J3MgdmFsdWUgaW4gdGhlIGNvbGxlY3Rpb24uIEEgY29tbW9uIHVzZVxuICogY2FzZSBmb3IgYG5nTWVzc2FnZXNgIGlzIHRvIGRpc3BsYXkgZXJyb3IgbWVzc2FnZXMgZm9yIGlucHV0cyB1c2luZyB0aGUgYCRlcnJvcmAgb2JqZWN0IGV4cG9zZWQgYnkgdGhlXG4gKiB7QGxpbmsgbmdNb2RlbCBuZ01vZGVsfSBkaXJlY3RpdmUuXG4gKlxuICogVGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBgbmdNZXNzYWdlc2AgZGlyZWN0aXZlIGFyZSBtYXRjaGVkIHRvIHRoZSBjb2xsZWN0aW9uIGtleXMgYnkgYSBgbmdNZXNzYWdlYCBvclxuICogYG5nTWVzc2FnZUV4cGAgZGlyZWN0aXZlLiBUaGUgdmFsdWUgb2YgdGhlc2UgYXR0cmlidXRlcyBtdXN0IG1hdGNoIGEga2V5IGluIHRoZSBjb2xsZWN0aW9uIHRoYXQgaXMgcHJvdmlkZWQgYnlcbiAqIHRoZSBgbmdNZXNzYWdlc2AgZGlyZWN0aXZlLlxuICpcbiAqIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2hpY2ggaWxsdXN0cmF0ZXMgYSB0eXBpY2FsIHVzZSBjYXNlIG9mIGBuZ01lc3NhZ2VzYC4gV2l0aGluIHRoZSBmb3JtIGBteUZvcm1gIHdlXG4gKiBoYXZlIGEgdGV4dCBpbnB1dCBuYW1lZCBgbXlGaWVsZGAgd2hpY2ggaXMgYm91bmQgdG8gdGhlIHNjb3BlIHZhcmlhYmxlIGBmaWVsZGAgdXNpbmcgdGhlIHtAbGluayBuZ01vZGVsIG5nTW9kZWx9XG4gKiBkaXJlY3RpdmUuXG4gKlxuICogVGhlIGBteUZpZWxkYCBmaWVsZCBpcyBhIHJlcXVpcmVkIGlucHV0IG9mIHR5cGUgYGVtYWlsYCB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgMTUgY2hhcmFjdGVycy5cbiAqXG4gKiBgYGBodG1sXG4gKiA8Zm9ybSBuYW1lPVwibXlGb3JtXCI+XG4gKiAgIDxsYWJlbD5cbiAqICAgICBFbnRlciB0ZXh0OlxuICogICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBuZy1tb2RlbD1cImZpZWxkXCIgbmFtZT1cIm15RmllbGRcIiByZXF1aXJlZCBtYXhsZW5ndGg9XCIxNVwiIC8+XG4gKiAgIDwvbGFiZWw+XG4gKiAgIDxkaXYgbmctbWVzc2FnZXM9XCJteUZvcm0ubXlGaWVsZC4kZXJyb3JcIiByb2xlPVwiYWxlcnRcIj5cbiAqICAgICA8ZGl2IG5nLW1lc3NhZ2U9XCJyZXF1aXJlZFwiPlBsZWFzZSBlbnRlciBhIHZhbHVlIGZvciB0aGlzIGZpZWxkLjwvZGl2PlxuICogICAgIDxkaXYgbmctbWVzc2FnZT1cImVtYWlsXCI+VGhpcyBmaWVsZCBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcy48L2Rpdj5cbiAqICAgICA8ZGl2IG5nLW1lc3NhZ2U9XCJtYXhsZW5ndGhcIj5UaGlzIGZpZWxkIGNhbiBiZSBhdCBtb3N0IDE1IGNoYXJhY3RlcnMgbG9uZy48L2Rpdj5cbiAqICAgPC9kaXY+XG4gKiA8L2Zvcm0+XG4gKiBgYGBcbiAqXG4gKiBJbiBvcmRlciB0byBzaG93IGVycm9yIG1lc3NhZ2VzIGNvcnJlc3BvbmRpbmcgdG8gYG15RmllbGRgIHdlIGZpcnN0IGNyZWF0ZSBhbiBlbGVtZW50IHdpdGggYW4gYG5nTWVzc2FnZXNgIGF0dHJpYnV0ZVxuICogc2V0IHRvIHRoZSBgJGVycm9yYCBvYmplY3Qgb3duZWQgYnkgdGhlIGBteUZpZWxkYCBpbnB1dCBpbiBvdXIgYG15Rm9ybWAgZm9ybS5cbiAqXG4gKiBXaXRoaW4gdGhpcyBlbGVtZW50IHdlIHRoZW4gY3JlYXRlIHNlcGFyYXRlIGVsZW1lbnRzIGZvciBlYWNoIG9mIHRoZSBwb3NzaWJsZSBlcnJvcnMgdGhhdCBgbXlGaWVsZGAgY291bGQgaGF2ZS5cbiAqIFRoZSBgbmdNZXNzYWdlYCBhdHRyaWJ1dGUgaXMgdXNlZCB0byBkZWNsYXJlIHdoaWNoIGVsZW1lbnQocykgd2lsbCBhcHBlYXIgZm9yIHdoaWNoIGVycm9yIC0gZm9yIGV4YW1wbGUsXG4gKiBzZXR0aW5nIGBuZy1tZXNzYWdlPVwicmVxdWlyZWRcImAgc3BlY2lmaWVzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQgc2hvdWxkIGJlIGRpc3BsYXllZCB3aGVuIHRoZXJlXG4gKiBpcyBubyB2YWx1ZSBwcmVzZW50IGZvciB0aGUgcmVxdWlyZWQgZmllbGQgYG15RmllbGRgIChiZWNhdXNlIHRoZSBrZXkgYHJlcXVpcmVkYCB3aWxsIGJlIGB0cnVlYCBpbiB0aGUgb2JqZWN0XG4gKiBgbXlGb3JtLm15RmllbGQuJGVycm9yYCkuXG4gKlxuICogIyMjIE1lc3NhZ2Ugb3JkZXJcbiAqXG4gKiBCeSBkZWZhdWx0LCBgbmdNZXNzYWdlc2Agd2lsbCBvbmx5IGRpc3BsYXkgb25lIG1lc3NhZ2UgZm9yIGEgcGFydGljdWxhciBrZXkvdmFsdWUgY29sbGVjdGlvbiBhdCBhbnkgdGltZS4gSWYgbW9yZVxuICogdGhhbiBvbmUgbWVzc2FnZSAob3IgZXJyb3IpIGtleSBpcyBjdXJyZW50bHkgdHJ1ZSwgdGhlbiB3aGljaCBtZXNzYWdlIGlzIHNob3duIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIG9mIG1lc3NhZ2VzXG4gKiBpbiB0aGUgSFRNTCB0ZW1wbGF0ZSBjb2RlIChtZXNzYWdlcyBkZWNsYXJlZCBmaXJzdCBhcmUgcHJpb3JpdGlzZWQpLiBUaGlzIG1lY2hhbmlzbSBtZWFucyB0aGUgZGV2ZWxvcGVyIGRvZXMgbm90IGhhdmVcbiAqIHRvIHByaW9yaXRpemUgbWVzc2FnZXMgdXNpbmcgY3VzdG9tIEphdmFTY3JpcHQgY29kZS5cbiAqXG4gKiBHaXZlbiB0aGUgZm9sbG93aW5nIGVycm9yIG9iamVjdCBmb3Igb3VyIGV4YW1wbGUgKHdoaWNoIGluZm9ybXMgdXMgdGhhdCB0aGUgZmllbGQgYG15RmllbGRgIGN1cnJlbnRseSBoYXMgYm90aCB0aGVcbiAqIGByZXF1aXJlZGAgYW5kIGBlbWFpbGAgZXJyb3JzKTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiA8IS0tIGtlZXAgaW4gbWluZCB0aGF0IG5nTW9kZWwgYXV0b21hdGljYWxseSBzZXRzIHRoZXNlIGVycm9yIGZsYWdzIC0tPlxuICogbXlGaWVsZC4kZXJyb3IgPSB7IHJlcXVpcmVkIDogdHJ1ZSwgZW1haWw6IHRydWUsIG1heGxlbmd0aDogZmFsc2UgfTtcbiAqIGBgYFxuICogVGhlIGByZXF1aXJlZGAgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciBzaW5jZSBpdCBhcHBlYXJzIGJlZm9yZSB0aGUgYGVtYWlsYCBtZXNzYWdlIGluIHRoZSBET00uXG4gKiBPbmNlIHRoZSB1c2VyIHR5cGVzIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIGByZXF1aXJlZGAgbWVzc2FnZSB3aWxsIGRpc2FwcGVhciAoc2luY2UgdGhlIGZpZWxkIG5vdyBoYXMgYSB2YWx1ZSlcbiAqIGJ1dCB0aGUgYGVtYWlsYCBtZXNzYWdlIHdpbGwgYmUgdmlzaWJsZSBiZWNhdXNlIGl0IGlzIHN0aWxsIGFwcGxpY2FibGUuXG4gKlxuICogIyMjIERpc3BsYXlpbmcgbXVsdGlwbGUgbWVzc2FnZXMgYXQgdGhlIHNhbWUgdGltZVxuICpcbiAqIFdoaWxlIGBuZ01lc3NhZ2VzYCB3aWxsIGJ5IGRlZmF1bHQgb25seSBkaXNwbGF5IG9uZSBlcnJvciBlbGVtZW50IGF0IGEgdGltZSwgdGhlIGBuZy1tZXNzYWdlcy1tdWx0aXBsZWAgYXR0cmlidXRlIGNhblxuICogYmUgYXBwbGllZCB0byB0aGUgYG5nTWVzc2FnZXNgIGNvbnRhaW5lciBlbGVtZW50IHRvIGNhdXNlIGl0IHRvIGRpc3BsYXkgYWxsIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZXMgYXQgb25jZTpcbiAqXG4gKiBgYGBodG1sXG4gKiA8IS0tIGF0dHJpYnV0ZS1zdHlsZSB1c2FnZSAtLT5cbiAqIDxkaXYgbmctbWVzc2FnZXM9XCJteUZvcm0ubXlGaWVsZC4kZXJyb3JcIiBuZy1tZXNzYWdlcy1tdWx0aXBsZT4uLi48L2Rpdj5cbiAqXG4gKiA8IS0tIGVsZW1lbnQtc3R5bGUgdXNhZ2UgLS0+XG4gKiA8bmctbWVzc2FnZXMgZm9yPVwibXlGb3JtLm15RmllbGQuJGVycm9yXCIgbXVsdGlwbGU+Li4uPC9uZy1tZXNzYWdlcz5cbiAqIGBgYFxuICpcbiAqICMjIFJldXNpbmcgYW5kIE92ZXJyaWRpbmcgTWVzc2FnZXNcbiAqIEluIGFkZGl0aW9uIHRvIHByaW9yaXRpemF0aW9uLCBuZ01lc3NhZ2VzIGFsc28gYWxsb3dzIGZvciBpbmNsdWRpbmcgbWVzc2FnZXMgZnJvbSBhIHJlbW90ZSBvciBhbiBpbmxpbmVcbiAqIHRlbXBsYXRlLiBUaGlzIGFsbG93cyBmb3IgZ2VuZXJpYyBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzIHRvIGJlIHJldXNlZCBhY3Jvc3MgbXVsdGlwbGUgcGFydHMgb2YgYW5cbiAqIGFwcGxpY2F0aW9uLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzY3JpcHQgdHlwZT1cInRleHQvbmctdGVtcGxhdGVcIiBpZD1cImVycm9yLW1lc3NhZ2VzXCI+XG4gKiAgIDxkaXYgbmctbWVzc2FnZT1cInJlcXVpcmVkXCI+VGhpcyBmaWVsZCBpcyByZXF1aXJlZDwvZGl2PlxuICogICA8ZGl2IG5nLW1lc3NhZ2U9XCJtaW5sZW5ndGhcIj5UaGlzIGZpZWxkIGlzIHRvbyBzaG9ydDwvZGl2PlxuICogPC9zY3JpcHQ+XG4gKlxuICogPGRpdiBuZy1tZXNzYWdlcz1cIm15Rm9ybS5teUZpZWxkLiRlcnJvclwiIHJvbGU9XCJhbGVydFwiPlxuICogICA8ZGl2IG5nLW1lc3NhZ2VzLWluY2x1ZGU9XCJlcnJvci1tZXNzYWdlc1wiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBIb3dldmVyLCBpbmNsdWRpbmcgZ2VuZXJpYyBtZXNzYWdlcyBtYXkgbm90IGJlIHVzZWZ1bCBlbm91Z2ggdG8gbWF0Y2ggYWxsIGlucHV0IGZpZWxkcywgdGhlcmVmb3JlLFxuICogYG5nTWVzc2FnZXNgIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG92ZXJyaWRlIG1lc3NhZ2VzIGRlZmluZWQgaW4gdGhlIHJlbW90ZSB0ZW1wbGF0ZSBieSByZWRlZmluaW5nXG4gKiB0aGVtIHdpdGhpbiB0aGUgZGlyZWN0aXZlIGNvbnRhaW5lci5cbiAqXG4gKiBgYGBodG1sXG4gKiA8IS0tIGEgZ2VuZXJpYyB0ZW1wbGF0ZSBvZiBlcnJvciBtZXNzYWdlcyBrbm93biBhcyBcIm15LWN1c3RvbS1tZXNzYWdlc1wiIC0tPlxuICogPHNjcmlwdCB0eXBlPVwidGV4dC9uZy10ZW1wbGF0ZVwiIGlkPVwibXktY3VzdG9tLW1lc3NhZ2VzXCI+XG4gKiAgIDxkaXYgbmctbWVzc2FnZT1cInJlcXVpcmVkXCI+VGhpcyBmaWVsZCBpcyByZXF1aXJlZDwvZGl2PlxuICogICA8ZGl2IG5nLW1lc3NhZ2U9XCJtaW5sZW5ndGhcIj5UaGlzIGZpZWxkIGlzIHRvbyBzaG9ydDwvZGl2PlxuICogPC9zY3JpcHQ+XG4gKlxuICogPGZvcm0gbmFtZT1cIm15Rm9ybVwiPlxuICogICA8bGFiZWw+XG4gKiAgICAgRW1haWwgYWRkcmVzc1xuICogICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIlxuICogICAgICAgICAgICBpZD1cImVtYWlsXCJcbiAqICAgICAgICAgICAgbmFtZT1cIm15RW1haWxcIlxuICogICAgICAgICAgICBuZy1tb2RlbD1cImVtYWlsXCJcbiAqICAgICAgICAgICAgbWlubGVuZ3RoPVwiNVwiXG4gKiAgICAgICAgICAgIHJlcXVpcmVkIC8+XG4gKiAgIDwvbGFiZWw+XG4gKiAgIDwhLS0gYW55IG5nLW1lc3NhZ2UgZWxlbWVudHMgdGhhdCBhcHBlYXIgQkVGT1JFIHRoZSBuZy1tZXNzYWdlcy1pbmNsdWRlIHdpbGxcbiAqICAgICAgICBvdmVycmlkZSB0aGUgbWVzc2FnZXMgcHJlc2VudCBpbiB0aGUgbmctbWVzc2FnZXMtaW5jbHVkZSB0ZW1wbGF0ZSAtLT5cbiAqICAgPGRpdiBuZy1tZXNzYWdlcz1cIm15Rm9ybS5teUVtYWlsLiRlcnJvclwiIHJvbGU9XCJhbGVydFwiPlxuICogICAgIDwhLS0gdGhpcyByZXF1aXJlZCBtZXNzYWdlIGhhcyBvdmVycmlkZGVuIHRoZSB0ZW1wbGF0ZSBtZXNzYWdlIC0tPlxuICogICAgIDxkaXYgbmctbWVzc2FnZT1cInJlcXVpcmVkXCI+WW91IGRpZCBub3QgZW50ZXIgeW91ciBlbWFpbCBhZGRyZXNzPC9kaXY+XG4gKlxuICogICAgIDwhLS0gdGhpcyBpcyBhIGJyYW5kIG5ldyBtZXNzYWdlIGFuZCB3aWxsIGFwcGVhciBsYXN0IGluIHRoZSBwcmlvcml0aXphdGlvbiAtLT5cbiAqICAgICA8ZGl2IG5nLW1lc3NhZ2U9XCJlbWFpbFwiPllvdXIgZW1haWwgYWRkcmVzcyBpcyBpbnZhbGlkPC9kaXY+XG4gKlxuICogICAgIDwhLS0gYW5kIGhlcmUgYXJlIHRoZSBnZW5lcmljIGVycm9yIG1lc3NhZ2VzIC0tPlxuICogICAgIDxkaXYgbmctbWVzc2FnZXMtaW5jbHVkZT1cIm15LWN1c3RvbS1tZXNzYWdlc1wiPjwvZGl2PlxuICogICA8L2Rpdj5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqIEluIHRoZSBleGFtcGxlIEhUTUwgY29kZSBhYm92ZSB0aGUgbWVzc2FnZSB0aGF0IGlzIHNldCBvbiByZXF1aXJlZCB3aWxsIG92ZXJyaWRlIHRoZSBjb3JyZXNwb25kaW5nXG4gKiByZXF1aXJlZCBtZXNzYWdlIGRlZmluZWQgd2l0aGluIHRoZSByZW1vdGUgdGVtcGxhdGUuIFRoZXJlZm9yZSwgd2l0aCBwYXJ0aWN1bGFyIGlucHV0IGZpZWxkcyAoc3VjaFxuICogZW1haWwgYWRkcmVzc2VzLCBkYXRlIGZpZWxkcywgYXV0b2NvbXBsZXRlIGlucHV0cywgZXRjLi4uKSwgc3BlY2lhbGl6ZWQgZXJyb3IgbWVzc2FnZXMgY2FuIGJlIGFwcGxpZWRcbiAqIHdoaWxlIG1vcmUgZ2VuZXJpYyBtZXNzYWdlcyBjYW4gYmUgdXNlZCB0byBoYW5kbGUgb3RoZXIsIG1vcmUgZ2VuZXJhbCBpbnB1dCBlcnJvcnMuXG4gKlxuICogIyMgRHluYW1pYyBNZXNzYWdpbmdcbiAqIG5nTWVzc2FnZXMgYWxzbyBzdXBwb3J0cyB1c2luZyBleHByZXNzaW9ucyB0byBkeW5hbWljYWxseSBjaGFuZ2Uga2V5IHZhbHVlcy4gVXNpbmcgYXJyYXlzIGFuZFxuICogcmVwZWF0ZXJzIHRvIGxpc3QgbWVzc2FnZXMgaXMgYWxzbyBzdXBwb3J0ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29kZSBiZWxvdyB3aWxsIGJlIGFibGUgdG9cbiAqIGZ1bGx5IGFkYXB0IGl0c2VsZiBhbmQgZGlzcGxheSB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSB3aGVuIGFueSBvZiB0aGUgZXhwcmVzc2lvbiBkYXRhIGNoYW5nZXM6XG4gKlxuICogYGBgaHRtbFxuICogPGZvcm0gbmFtZT1cIm15Rm9ybVwiPlxuICogICA8bGFiZWw+XG4gKiAgICAgRW1haWwgYWRkcmVzc1xuICogICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIlxuICogICAgICAgICAgICBuYW1lPVwibXlFbWFpbFwiXG4gKiAgICAgICAgICAgIG5nLW1vZGVsPVwiZW1haWxcIlxuICogICAgICAgICAgICBtaW5sZW5ndGg9XCI1XCJcbiAqICAgICAgICAgICAgcmVxdWlyZWQgLz5cbiAqICAgPC9sYWJlbD5cbiAqICAgPGRpdiBuZy1tZXNzYWdlcz1cIm15Rm9ybS5teUVtYWlsLiRlcnJvclwiIHJvbGU9XCJhbGVydFwiPlxuICogICAgIDxkaXYgbmctbWVzc2FnZT1cInJlcXVpcmVkXCI+WW91IGRpZCBub3QgZW50ZXIgeW91ciBlbWFpbCBhZGRyZXNzPC9kaXY+XG4gKiAgICAgPGRpdiBuZy1yZXBlYXQ9XCJlcnJvck1lc3NhZ2UgaW4gZXJyb3JNZXNzYWdlc1wiPlxuICogICAgICAgPCEtLSB1c2UgbmctbWVzc2FnZS1leHAgZm9yIGEgbWVzc2FnZSB3aG9zZSBrZXkgaXMgZ2l2ZW4gYnkgYW4gZXhwcmVzc2lvbiAtLT5cbiAqICAgICAgIDxkaXYgbmctbWVzc2FnZS1leHA9XCJlcnJvck1lc3NhZ2UudHlwZVwiPnt7IGVycm9yTWVzc2FnZS50ZXh0IH19PC9kaXY+XG4gKiAgICAgPC9kaXY+XG4gKiAgIDwvZGl2PlxuICogPC9mb3JtPlxuICogYGBgXG4gKlxuICogVGhlIGBlcnJvck1lc3NhZ2UudHlwZWAgZXhwcmVzc2lvbiBjYW4gYmUgYSBzdHJpbmcgdmFsdWUgb3IgaXQgY2FuIGJlIGFuIGFycmF5IHNvXG4gKiB0aGF0IG11bHRpcGxlIGVycm9ycyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIGVycm9yIG1lc3NhZ2U6XG4gKlxuICogYGBgaHRtbFxuICogICA8bGFiZWw+XG4gKiAgICAgRW1haWwgYWRkcmVzc1xuICogICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIlxuICogICAgICAgICAgICBuZy1tb2RlbD1cImRhdGEuZW1haWxcIlxuICogICAgICAgICAgICBuYW1lPVwibXlFbWFpbFwiXG4gKiAgICAgICAgICAgIG5nLW1pbmxlbmd0aD1cIjVcIlxuICogICAgICAgICAgICBuZy1tYXhsZW5ndGg9XCIxMDBcIlxuICogICAgICAgICAgICByZXF1aXJlZCAvPlxuICogICA8L2xhYmVsPlxuICogICA8ZGl2IG5nLW1lc3NhZ2VzPVwibXlGb3JtLm15RW1haWwuJGVycm9yXCIgcm9sZT1cImFsZXJ0XCI+XG4gKiAgICAgPGRpdiBuZy1tZXNzYWdlLWV4cD1cIidyZXF1aXJlZCdcIj5Zb3UgZGlkIG5vdCBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3M8L2Rpdj5cbiAqICAgICA8ZGl2IG5nLW1lc3NhZ2UtZXhwPVwiWydtaW5sZW5ndGgnLCAnbWF4bGVuZ3RoJ11cIj5cbiAqICAgICAgIFlvdXIgZW1haWwgbXVzdCBiZSBiZXR3ZWVuIDUgYW5kIDEwMCBjaGFyYWN0ZXJzIGxvbmdcbiAqICAgICA8L2Rpdj5cbiAqICAgPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBGZWVsIGZyZWUgdG8gdXNlIG90aGVyIHN0cnVjdHVyYWwgZGlyZWN0aXZlcyBzdWNoIGFzIG5nLWlmIGFuZCBuZy1zd2l0Y2ggdG8gZnVydGhlciBjb250cm9sXG4gKiB3aGF0IG1lc3NhZ2VzIGFyZSBhY3RpdmUgYW5kIHdoZW4uIEJlIGNhcmVmdWwsIGlmIHlvdSBwbGFjZSBuZy1tZXNzYWdlIG9uIHRoZSBzYW1lIGVsZW1lbnRcbiAqIGFzIHRoZXNlIHN0cnVjdHVyYWwgZGlyZWN0aXZlcywgQW5ndWxhciBtYXkgbm90IGJlIGFibGUgdG8gZGV0ZXJtaW5lIGlmIGEgbWVzc2FnZSBpcyBhY3RpdmVcbiAqIG9yIG5vdC4gVGhlcmVmb3JlIGl0IGlzIGJlc3QgdG8gcGxhY2UgdGhlIG5nLW1lc3NhZ2Ugb24gYSBjaGlsZCBlbGVtZW50IG9mIHRoZSBzdHJ1Y3R1cmFsXG4gKiBkaXJlY3RpdmUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBuZy1tZXNzYWdlcz1cIm15Rm9ybS5teUVtYWlsLiRlcnJvclwiIHJvbGU9XCJhbGVydFwiPlxuICogICA8ZGl2IG5nLWlmPVwic2hvd1JlcXVpcmVkRXJyb3JcIj5cbiAqICAgICA8ZGl2IG5nLW1lc3NhZ2U9XCJyZXF1aXJlZFwiPlBsZWFzZSBlbnRlciBzb21ldGhpbmc8L2Rpdj5cbiAqICAgPC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqICMjIEFuaW1hdGlvbnNcbiAqIElmIHRoZSBgbmdBbmltYXRlYCBtb2R1bGUgaXMgYWN0aXZlIHdpdGhpbiB0aGUgYXBwbGljYXRpb24gdGhlbiB0aGUgYG5nTWVzc2FnZXNgLCBgbmdNZXNzYWdlYCBhbmRcbiAqIGBuZ01lc3NhZ2VFeHBgIGRpcmVjdGl2ZXMgd2lsbCB0cmlnZ2VyIGFuaW1hdGlvbnMgd2hlbmV2ZXIgYW55IG1lc3NhZ2VzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBmcm9tXG4gKiB0aGUgRE9NIGJ5IHRoZSBgbmdNZXNzYWdlc2AgZGlyZWN0aXZlLlxuICpcbiAqIFdoZW5ldmVyIHRoZSBgbmdNZXNzYWdlc2AgZGlyZWN0aXZlIGNvbnRhaW5zIG9uZSBvciBtb3JlIHZpc2libGUgbWVzc2FnZXMgdGhlbiB0aGUgYC5uZy1hY3RpdmVgIENTU1xuICogY2xhc3Mgd2lsbCBiZSBhZGRlZCB0byB0aGUgZWxlbWVudC4gVGhlIGAubmctaW5hY3RpdmVgIENTUyBjbGFzcyB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGVyZSBhcmUgbm9cbiAqIG1lc3NhZ2VzIHByZXNlbnQuIFRoZXJlZm9yZSwgQ1NTIHRyYW5zaXRpb25zIGFuZCBrZXlmcmFtZXMgYXMgd2VsbCBhcyBKYXZhU2NyaXB0IGFuaW1hdGlvbnMgY2FuXG4gKiBob29rIGludG8gdGhlIGFuaW1hdGlvbnMgd2hlbmV2ZXIgdGhlc2UgY2xhc3NlcyBhcmUgYWRkZWQvcmVtb3ZlZC5cbiAqXG4gKiBMZXQncyBzYXkgdGhhdCBvdXIgSFRNTCBjb2RlIGZvciBvdXIgbWVzc2FnZXMgY29udGFpbmVyIGxvb2tzIGxpa2Ugc286XG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBuZy1tZXNzYWdlcz1cIm15TWVzc2FnZXNcIiBjbGFzcz1cIm15LW1lc3NhZ2VzXCIgcm9sZT1cImFsZXJ0XCI+XG4gKiAgIDxkaXYgbmctbWVzc2FnZT1cImFsZXJ0XCIgY2xhc3M9XCJzb21lLW1lc3NhZ2VcIj4uLi48L2Rpdj5cbiAqICAgPGRpdiBuZy1tZXNzYWdlPVwiZmFpbFwiIGNsYXNzPVwic29tZS1tZXNzYWdlXCI+Li4uPC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIFRoZW4gdGhlIENTUyBhbmltYXRpb24gY29kZSBmb3IgdGhlIG1lc3NhZ2UgY29udGFpbmVyIGxvb2tzIGxpa2Ugc286XG4gKlxuICogYGBgY3NzXG4gKiAubXktbWVzc2FnZXMge1xuICogICB0cmFuc2l0aW9uOjFzIGxpbmVhciBhbGw7XG4gKiB9XG4gKiAubXktbWVzc2FnZXMubmctYWN0aXZlIHtcbiAqICAgLy8gbWVzc2FnZXMgYXJlIHZpc2libGVcbiAqIH1cbiAqIC5teS1tZXNzYWdlcy5uZy1pbmFjdGl2ZSB7XG4gKiAgIC8vIG1lc3NhZ2VzIGFyZSBoaWRkZW5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW5ldmVyIGFuIGlubmVyIG1lc3NhZ2UgaXMgYXR0YWNoZWQgKGJlY29tZXMgdmlzaWJsZSkgb3IgcmVtb3ZlZCAoYmVjb21lcyBoaWRkZW4pIHRoZW4gdGhlIGVudGVyXG4gKiBhbmQgbGVhdmUgYW5pbWF0aW9uIGlzIHRyaWdnZXJlZCBmb3IgZWFjaCBwYXJ0aWN1bGFyIGVsZW1lbnQgYm91bmQgdG8gdGhlIGBuZ01lc3NhZ2VgIGRpcmVjdGl2ZS5cbiAqXG4gKiBUaGVyZWZvcmUsIHRoZSBDU1MgY29kZSBmb3IgdGhlIGlubmVyIG1lc3NhZ2VzIGxvb2tzIGxpa2Ugc286XG4gKlxuICogYGBgY3NzXG4gKiAuc29tZS1tZXNzYWdlIHtcbiAqICAgdHJhbnNpdGlvbjoxcyBsaW5lYXIgYWxsO1xuICogfVxuICpcbiAqIC5zb21lLW1lc3NhZ2UubmctZW50ZXIge31cbiAqIC5zb21lLW1lc3NhZ2UubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHt9XG4gKlxuICogLnNvbWUtbWVzc2FnZS5uZy1sZWF2ZSB7fVxuICogLnNvbWUtbWVzc2FnZS5uZy1sZWF2ZS5uZy1sZWF2ZS1hY3RpdmUge31cbiAqIGBgYFxuICpcbiAqIHtAbGluayBuZ0FuaW1hdGUgQ2xpY2sgaGVyZX0gdG8gbGVhcm4gaG93IHRvIHVzZSBKYXZhU2NyaXB0IGFuaW1hdGlvbnMgb3IgdG8gbGVhcm4gbW9yZSBhYm91dCBuZ0FuaW1hdGUuXG4gKi9cbmFuZ3VsYXIubW9kdWxlKCduZ01lc3NhZ2VzJywgW10sIGZ1bmN0aW9uIGluaXRBbmd1bGFySGVscGVycygpIHtcbiAgLy8gQWNjZXNzIGhlbHBlcnMgZnJvbSBhbmd1bGFyIGNvcmUuXG4gIC8vIERvIGl0IGluc2lkZSBhIGBjb25maWdgIGJsb2NrIHRvIGVuc3VyZSBgd2luZG93LmFuZ3VsYXJgIGlzIGF2YWlsYWJsZS5cbiAgZm9yRWFjaCA9IGFuZ3VsYXIuZm9yRWFjaDtcbiAgaXNBcnJheSA9IGFuZ3VsYXIuaXNBcnJheTtcbiAgaXNTdHJpbmcgPSBhbmd1bGFyLmlzU3RyaW5nO1xuICBqcUxpdGUgPSBhbmd1bGFyLmVsZW1lbnQ7XG59KVxuICAuaW5mbyh7IGFuZ3VsYXJWZXJzaW9uOiAnMS42LjQnIH0pXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAgICogQG1vZHVsZSBuZ01lc3NhZ2VzXG4gICAqIEBuYW1lIG5nTWVzc2FnZXNcbiAgICogQHJlc3RyaWN0IEFFXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBgbmdNZXNzYWdlc2AgaXMgYSBkaXJlY3RpdmUgdGhhdCBpcyBkZXNpZ25lZCB0byBzaG93IGFuZCBoaWRlIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSBzdGF0ZVxuICAgKiBvZiBhIGtleS92YWx1ZSBvYmplY3QgdGhhdCBpdCBsaXN0ZW5zIG9uLiBUaGUgZGlyZWN0aXZlIGl0c2VsZiBjb21wbGVtZW50cyBlcnJvciBtZXNzYWdlXG4gICAqIHJlcG9ydGluZyB3aXRoIHRoZSBgbmdNb2RlbGAgJGVycm9yIG9iamVjdCAod2hpY2ggc3RvcmVzIGEga2V5L3ZhbHVlIHN0YXRlIG9mIHZhbGlkYXRpb24gZXJyb3JzKS5cbiAgICpcbiAgICogYG5nTWVzc2FnZXNgIG1hbmFnZXMgdGhlIHN0YXRlIG9mIGludGVybmFsIG1lc3NhZ2VzIHdpdGhpbiBpdHMgY29udGFpbmVyIGVsZW1lbnQuIFRoZSBpbnRlcm5hbFxuICAgKiBtZXNzYWdlcyB1c2UgdGhlIGBuZ01lc3NhZ2VgIGRpcmVjdGl2ZSBhbmQgd2lsbCBiZSBpbnNlcnRlZC9yZW1vdmVkIGZyb20gdGhlIHBhZ2UgZGVwZW5kaW5nXG4gICAqIG9uIGlmIHRoZXkncmUgcHJlc2VudCB3aXRoaW4gdGhlIGtleS92YWx1ZSBvYmplY3QuIEJ5IGRlZmF1bHQsIG9ubHkgb25lIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWRcbiAgICogYXQgYSB0aW1lIGFuZCB0aGlzIGRlcGVuZHMgb24gdGhlIHByaW9yaXRpemF0aW9uIG9mIHRoZSBtZXNzYWdlcyB3aXRoaW4gdGhlIHRlbXBsYXRlLiAoVGhpcyBjYW5cbiAgICogYmUgY2hhbmdlZCBieSB1c2luZyB0aGUgYG5nLW1lc3NhZ2VzLW11bHRpcGxlYCBvciBgbXVsdGlwbGVgIGF0dHJpYnV0ZSBvbiB0aGUgZGlyZWN0aXZlIGNvbnRhaW5lci4pXG4gICAqXG4gICAqIEEgcmVtb3RlIHRlbXBsYXRlIGNhbiBhbHNvIGJlIHVzZWQgdG8gcHJvbW90ZSBtZXNzYWdlIHJldXNhYmlsaXR5IGFuZCBtZXNzYWdlcyBjYW4gYWxzbyBiZVxuICAgKiBvdmVycmlkZGVuLlxuICAgKlxuICAgKiB7QGxpbmsgbW9kdWxlOm5nTWVzc2FnZXMgQ2xpY2sgaGVyZX0gdG8gbGVhcm4gbW9yZSBhYm91dCBgbmdNZXNzYWdlc2AgYW5kIGBuZ01lc3NhZ2VgLlxuICAgKlxuICAgKiBAdXNhZ2VcbiAgICogYGBgaHRtbFxuICAgKiA8IS0tIHVzaW5nIGF0dHJpYnV0ZSBkaXJlY3RpdmVzIC0tPlxuICAgKiA8QU5ZIG5nLW1lc3NhZ2VzPVwiZXhwcmVzc2lvblwiIHJvbGU9XCJhbGVydFwiPlxuICAgKiAgIDxBTlkgbmctbWVzc2FnZT1cInN0cmluZ1ZhbHVlXCI+Li4uPC9BTlk+XG4gICAqICAgPEFOWSBuZy1tZXNzYWdlPVwic3RyaW5nVmFsdWUxLCBzdHJpbmdWYWx1ZTIsIC4uLlwiPi4uLjwvQU5ZPlxuICAgKiAgIDxBTlkgbmctbWVzc2FnZS1leHA9XCJleHByZXNzaW9uVmFsdWVcIj4uLi48L0FOWT5cbiAgICogPC9BTlk+XG4gICAqXG4gICAqIDwhLS0gb3IgYnkgdXNpbmcgZWxlbWVudCBkaXJlY3RpdmVzIC0tPlxuICAgKiA8bmctbWVzc2FnZXMgZm9yPVwiZXhwcmVzc2lvblwiIHJvbGU9XCJhbGVydFwiPlxuICAgKiAgIDxuZy1tZXNzYWdlIHdoZW49XCJzdHJpbmdWYWx1ZVwiPi4uLjwvbmctbWVzc2FnZT5cbiAgICogICA8bmctbWVzc2FnZSB3aGVuPVwic3RyaW5nVmFsdWUxLCBzdHJpbmdWYWx1ZTIsIC4uLlwiPi4uLjwvbmctbWVzc2FnZT5cbiAgICogICA8bmctbWVzc2FnZSB3aGVuLWV4cD1cImV4cHJlc3Npb25WYWx1ZVwiPi4uLjwvbmctbWVzc2FnZT5cbiAgICogPC9uZy1tZXNzYWdlcz5cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01lc3NhZ2VzIGFuIGFuZ3VsYXIgZXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIGEga2V5L3ZhbHVlIG9iamVjdFxuICAgKiAgICAgICAgICAgICAgICAgKHRoaXMgaXMgdHlwaWNhbGx5IHRoZSAkZXJyb3Igb2JqZWN0IG9uIGFuIG5nTW9kZWwgaW5zdGFuY2UpLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nTWVzc2FnZXNNdWx0aXBsZXxtdWx0aXBsZSB3aGVuIHNldCwgYWxsIG1lc3NhZ2VzIHdpbGwgYmUgZGlzcGxheWVkIHdpdGggdHJ1ZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiA8ZXhhbXBsZSBuYW1lPVwibmdNZXNzYWdlcy1kaXJlY3RpdmVcIiBtb2R1bGU9XCJuZ01lc3NhZ2VzRXhhbXBsZVwiXG4gICAqICAgICAgICAgIGRlcHM9XCJhbmd1bGFyLW1lc3NhZ2VzLmpzXCJcbiAgICogICAgICAgICAgYW5pbWF0aW9ucz1cInRydWVcIiBmaXhCYXNlPVwidHJ1ZVwiPlxuICAgKiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAqICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCI+XG4gICAqICAgICAgIDxsYWJlbD5cbiAgICogICAgICAgICBFbnRlciB5b3VyIG5hbWU6XG4gICAqICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICogICAgICAgICAgICAgICAgbmFtZT1cIm15TmFtZVwiXG4gICAqICAgICAgICAgICAgICAgIG5nLW1vZGVsPVwibmFtZVwiXG4gICAqICAgICAgICAgICAgICAgIG5nLW1pbmxlbmd0aD1cIjVcIlxuICAgKiAgICAgICAgICAgICAgICBuZy1tYXhsZW5ndGg9XCIyMFwiXG4gICAqICAgICAgICAgICAgICAgIHJlcXVpcmVkIC8+XG4gICAqICAgICAgIDwvbGFiZWw+XG4gICAqICAgICAgIDxwcmU+bXlGb3JtLm15TmFtZS4kZXJyb3IgPSB7eyBteUZvcm0ubXlOYW1lLiRlcnJvciB8IGpzb24gfX08L3ByZT5cbiAgICpcbiAgICogICAgICAgPGRpdiBuZy1tZXNzYWdlcz1cIm15Rm9ybS5teU5hbWUuJGVycm9yXCIgc3R5bGU9XCJjb2xvcjptYXJvb25cIiByb2xlPVwiYWxlcnRcIj5cbiAgICogICAgICAgICA8ZGl2IG5nLW1lc3NhZ2U9XCJyZXF1aXJlZFwiPllvdSBkaWQgbm90IGVudGVyIGEgZmllbGQ8L2Rpdj5cbiAgICogICAgICAgICA8ZGl2IG5nLW1lc3NhZ2U9XCJtaW5sZW5ndGhcIj5Zb3VyIGZpZWxkIGlzIHRvbyBzaG9ydDwvZGl2PlxuICAgKiAgICAgICAgIDxkaXYgbmctbWVzc2FnZT1cIm1heGxlbmd0aFwiPllvdXIgZmllbGQgaXMgdG9vIGxvbmc8L2Rpdj5cbiAgICogICAgICAgPC9kaXY+XG4gICAqICAgICA8L2Zvcm0+XG4gICAqICAgPC9maWxlPlxuICAgKiAgIDxmaWxlIG5hbWU9XCJzY3JpcHQuanNcIj5cbiAgICogICAgIGFuZ3VsYXIubW9kdWxlKCduZ01lc3NhZ2VzRXhhbXBsZScsIFsnbmdNZXNzYWdlcyddKTtcbiAgICogICA8L2ZpbGU+XG4gICAqIDwvZXhhbXBsZT5cbiAgICovXG4gIC5kaXJlY3RpdmUoJ25nTWVzc2FnZXMnLCBbJyRhbmltYXRlJywgZnVuY3Rpb24oJGFuaW1hdGUpIHtcbiAgICB2YXIgQUNUSVZFX0NMQVNTID0gJ25nLWFjdGl2ZSc7XG4gICAgdmFyIElOQUNUSVZFX0NMQVNTID0gJ25nLWluYWN0aXZlJztcblxuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlOiAnbmdNZXNzYWdlcycsXG4gICAgICByZXN0cmljdDogJ0FFJyxcbiAgICAgIGNvbnRyb2xsZXI6IFsnJGVsZW1lbnQnLCAnJHNjb3BlJywgJyRhdHRycycsIGZ1bmN0aW9uIE5nTWVzc2FnZXNDdHJsKCRlbGVtZW50LCAkc2NvcGUsICRhdHRycykge1xuICAgICAgICB2YXIgY3RybCA9IHRoaXM7XG4gICAgICAgIHZhciBsYXRlc3RLZXkgPSAwO1xuICAgICAgICB2YXIgbmV4dEF0dGFjaElkID0gMDtcblxuICAgICAgICB0aGlzLmdldEF0dGFjaElkID0gZnVuY3Rpb24gZ2V0QXR0YWNoSWQoKSB7IHJldHVybiBuZXh0QXR0YWNoSWQrKzsgfTtcblxuICAgICAgICB2YXIgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzID0ge307XG4gICAgICAgIHZhciByZW5kZXJMYXRlciwgY2FjaGVkQ29sbGVjdGlvbjtcblxuICAgICAgICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICBjb2xsZWN0aW9uID0gY29sbGVjdGlvbiB8fCB7fTtcblxuICAgICAgICAgIHJlbmRlckxhdGVyID0gZmFsc2U7XG4gICAgICAgICAgY2FjaGVkQ29sbGVjdGlvbiA9IGNvbGxlY3Rpb247XG5cbiAgICAgICAgICAvLyB0aGlzIGlzIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBlbXB0eSBvciBpZiB0aGUgYXR0cmlidXRlIHZhbHVlIGlzIHRydXRoeVxuICAgICAgICAgIHZhciBtdWx0aXBsZSA9IGlzQXR0clRydXRoeSgkc2NvcGUsICRhdHRycy5uZ01lc3NhZ2VzTXVsdGlwbGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgaXNBdHRyVHJ1dGh5KCRzY29wZSwgJGF0dHJzLm11bHRpcGxlKTtcblxuICAgICAgICAgIHZhciB1bm1hdGNoZWRNZXNzYWdlcyA9IFtdO1xuICAgICAgICAgIHZhciBtYXRjaGVkS2V5cyA9IHt9O1xuICAgICAgICAgIHZhciBtZXNzYWdlSXRlbSA9IGN0cmwuaGVhZDtcbiAgICAgICAgICB2YXIgbWVzc2FnZUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgdmFyIHRvdGFsTWVzc2FnZXMgPSAwO1xuXG4gICAgICAgICAgLy8gd2UgdXNlICE9IGluc3RlYWQgb2YgIT09IHRvIGFsbG93IGZvciBib3RoIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXNcbiAgICAgICAgICB3aGlsZSAobWVzc2FnZUl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdG90YWxNZXNzYWdlcysrO1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2VDdHJsID0gbWVzc2FnZUl0ZW0ubWVzc2FnZTtcblxuICAgICAgICAgICAgdmFyIG1lc3NhZ2VVc2VkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VGb3VuZCkge1xuICAgICAgICAgICAgICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1lc3NhZ2VVc2VkICYmIHRydXRoeSh2YWx1ZSkgJiYgbWVzc2FnZUN0cmwudGVzdChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHRvIHByZXZlbnQgdGhlIHNhbWUgZXJyb3IgbmFtZSBmcm9tIHNob3dpbmcgdXAgdHdpY2VcbiAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkS2V5c1trZXldKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBtYXRjaGVkS2V5c1trZXldID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgbWVzc2FnZVVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZUN0cmwuYXR0YWNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1lc3NhZ2VVc2VkKSB7XG4gICAgICAgICAgICAgIC8vIHVubGVzcyB3ZSB3YW50IHRvIGRpc3BsYXkgbXVsdGlwbGUgbWVzc2FnZXMgdGhlbiB3ZSBzaG91bGRcbiAgICAgICAgICAgICAgLy8gc2V0IGEgZmxhZyBoZXJlIHRvIGF2b2lkIGRpc3BsYXlpbmcgdGhlIG5leHQgbWVzc2FnZSBpbiB0aGUgbGlzdFxuICAgICAgICAgICAgICBtZXNzYWdlRm91bmQgPSAhbXVsdGlwbGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bm1hdGNoZWRNZXNzYWdlcy5wdXNoKG1lc3NhZ2VDdHJsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWVzc2FnZUl0ZW0gPSBtZXNzYWdlSXRlbS5uZXh0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvckVhY2godW5tYXRjaGVkTWVzc2FnZXMsIGZ1bmN0aW9uKG1lc3NhZ2VDdHJsKSB7XG4gICAgICAgICAgICBtZXNzYWdlQ3RybC5kZXRhY2goKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh1bm1hdGNoZWRNZXNzYWdlcy5sZW5ndGggIT09IHRvdGFsTWVzc2FnZXMpIHtcbiAgICAgICAgICAgICRhbmltYXRlLnNldENsYXNzKCRlbGVtZW50LCBBQ1RJVkVfQ0xBU1MsIElOQUNUSVZFX0NMQVNTKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFuaW1hdGUuc2V0Q2xhc3MoJGVsZW1lbnQsIElOQUNUSVZFX0NMQVNTLCBBQ1RJVkVfQ0xBU1MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbigkYXR0cnMubmdNZXNzYWdlcyB8fCAkYXR0cnNbJ2ZvciddLCBjdHJsLnJlbmRlcik7XG5cbiAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgZGVzdHJveWVkLCBwcm9hY3RpdmVseSBkZXN0cm95IGFsbCB0aGUgY3VycmVudGx5IHZpc2libGUgbWVzc2FnZXNcbiAgICAgICAgJGVsZW1lbnQub24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZm9yRWFjaChtZXNzYWdlcywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgaXRlbS5tZXNzYWdlLmRldGFjaCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlUmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFyZW5kZXJMYXRlcikge1xuICAgICAgICAgICAgcmVuZGVyTGF0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgJHNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGlmIChyZW5kZXJMYXRlciAmJiBjYWNoZWRDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY3RybC5yZW5kZXIoY2FjaGVkQ29sbGVjdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29tbWVudCwgbWVzc2FnZUN0cmwpIHtcbiAgICAgICAgICB2YXIgbmV4dEtleSA9IGxhdGVzdEtleS50b1N0cmluZygpO1xuICAgICAgICAgIG1lc3NhZ2VzW25leHRLZXldID0ge1xuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZUN0cmxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGluc2VydE1lc3NhZ2VOb2RlKCRlbGVtZW50WzBdLCBjb21tZW50LCBuZXh0S2V5KTtcbiAgICAgICAgICBjb21tZW50LiQkbmdNZXNzYWdlTm9kZSA9IG5leHRLZXk7XG4gICAgICAgICAgbGF0ZXN0S2V5Kys7XG5cbiAgICAgICAgICBjdHJsLnJlUmVuZGVyKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5kZXJlZ2lzdGVyID0gZnVuY3Rpb24oY29tbWVudCkge1xuICAgICAgICAgIHZhciBrZXkgPSBjb21tZW50LiQkbmdNZXNzYWdlTm9kZTtcbiAgICAgICAgICBkZWxldGUgY29tbWVudC4kJG5nTWVzc2FnZU5vZGU7XG4gICAgICAgICAgcmVtb3ZlTWVzc2FnZU5vZGUoJGVsZW1lbnRbMF0sIGNvbW1lbnQsIGtleSk7XG4gICAgICAgICAgZGVsZXRlIG1lc3NhZ2VzW2tleV07XG4gICAgICAgICAgY3RybC5yZVJlbmRlcigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRQcmV2aW91c01lc3NhZ2UocGFyZW50LCBjb21tZW50KSB7XG4gICAgICAgICAgdmFyIHByZXZOb2RlID0gY29tbWVudDtcbiAgICAgICAgICB2YXIgcGFyZW50TG9va3VwID0gW107XG5cbiAgICAgICAgICB3aGlsZSAocHJldk5vZGUgJiYgcHJldk5vZGUgIT09IHBhcmVudCkge1xuICAgICAgICAgICAgdmFyIHByZXZLZXkgPSBwcmV2Tm9kZS4kJG5nTWVzc2FnZU5vZGU7XG4gICAgICAgICAgICBpZiAocHJldktleSAmJiBwcmV2S2V5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZXNbcHJldktleV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRpdmUgZGVlcGVyIGludG8gdGhlIERPTSBhbmQgZXhhbWluZSBpdHMgY2hpbGRyZW4gZm9yIGFueSBuZ01lc3NhZ2VcbiAgICAgICAgICAgIC8vIGNvbW1lbnRzIHRoYXQgbWF5IGJlIGluIGFuIGVsZW1lbnQgdGhhdCBhcHBlYXJzIGRlZXBlciBpbiB0aGUgbGlzdFxuICAgICAgICAgICAgaWYgKHByZXZOb2RlLmNoaWxkTm9kZXMubGVuZ3RoICYmIHBhcmVudExvb2t1cC5pbmRleE9mKHByZXZOb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcGFyZW50TG9va3VwLnB1c2gocHJldk5vZGUpO1xuICAgICAgICAgICAgICBwcmV2Tm9kZSA9IHByZXZOb2RlLmNoaWxkTm9kZXNbcHJldk5vZGUuY2hpbGROb2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldk5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgICAgICAgIHByZXZOb2RlID0gcHJldk5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICBwYXJlbnRMb29rdXAucHVzaChwcmV2Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW5zZXJ0TWVzc2FnZU5vZGUocGFyZW50LCBjb21tZW50LCBrZXkpIHtcbiAgICAgICAgICB2YXIgbWVzc2FnZU5vZGUgPSBtZXNzYWdlc1trZXldO1xuICAgICAgICAgIGlmICghY3RybC5oZWFkKSB7XG4gICAgICAgICAgICBjdHJsLmhlYWQgPSBtZXNzYWdlTm9kZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG1hdGNoID0gZmluZFByZXZpb3VzTWVzc2FnZShwYXJlbnQsIGNvbW1lbnQpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VOb2RlLm5leHQgPSBtYXRjaC5uZXh0O1xuICAgICAgICAgICAgICBtYXRjaC5uZXh0ID0gbWVzc2FnZU5vZGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtZXNzYWdlTm9kZS5uZXh0ID0gY3RybC5oZWFkO1xuICAgICAgICAgICAgICBjdHJsLmhlYWQgPSBtZXNzYWdlTm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZW1vdmVNZXNzYWdlTm9kZShwYXJlbnQsIGNvbW1lbnQsIGtleSkge1xuICAgICAgICAgIHZhciBtZXNzYWdlTm9kZSA9IG1lc3NhZ2VzW2tleV07XG5cbiAgICAgICAgICB2YXIgbWF0Y2ggPSBmaW5kUHJldmlvdXNNZXNzYWdlKHBhcmVudCwgY29tbWVudCk7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBtYXRjaC5uZXh0ID0gbWVzc2FnZU5vZGUubmV4dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3RybC5oZWFkID0gbWVzc2FnZU5vZGUubmV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGlzQXR0clRydXRoeShzY29wZSwgYXR0cikge1xuICAgICByZXR1cm4gKGlzU3RyaW5nKGF0dHIpICYmIGF0dHIubGVuZ3RoID09PSAwKSB8fCAvL2VtcHR5IGF0dHJpYnV0ZVxuICAgICAgICAgICAgdHJ1dGh5KHNjb3BlLiRldmFsKGF0dHIpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cnV0aHkodmFsKSB7XG4gICAgICByZXR1cm4gaXNTdHJpbmcodmFsKSA/IHZhbC5sZW5ndGggOiAhIXZhbDtcbiAgICB9XG4gIH1dKVxuXG4gIC8qKlxuICAgKiBAbmdkb2MgZGlyZWN0aXZlXG4gICAqIEBuYW1lIG5nTWVzc2FnZXNJbmNsdWRlXG4gICAqIEByZXN0cmljdCBBRVxuICAgKiBAc2NvcGVcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIGBuZ01lc3NhZ2VzSW5jbHVkZWAgaXMgYSBkaXJlY3RpdmUgd2l0aCB0aGUgcHVycG9zZSB0byBpbXBvcnQgZXhpc3RpbmcgbmdNZXNzYWdlIHRlbXBsYXRlXG4gICAqIGNvZGUgZnJvbSBhIHJlbW90ZSB0ZW1wbGF0ZSBhbmQgcGxhY2UgdGhlIGRvd25sb2FkZWQgdGVtcGxhdGUgY29kZSBpbnRvIHRoZSBleGFjdCBzcG90XG4gICAqIHRoYXQgdGhlIG5nTWVzc2FnZXNJbmNsdWRlIGRpcmVjdGl2ZSBpcyBwbGFjZWQgd2l0aGluIHRoZSBuZ01lc3NhZ2VzIGNvbnRhaW5lci4gVGhpcyBhbGxvd3NcbiAgICogZm9yIGEgc2VyaWVzIG9mIHByZS1kZWZpbmVkIG1lc3NhZ2VzIHRvIGJlIHJldXNlZCBhbmQgYWxzbyBhbGxvd3MgZm9yIHRoZSBkZXZlbG9wZXIgdG9cbiAgICogZGV0ZXJtaW5lIHdoYXQgbWVzc2FnZXMgYXJlIG92ZXJyaWRkZW4gZHVlIHRvIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5nTWVzc2FnZXNJbmNsdWRlIGRpcmVjdGl2ZS5cbiAgICpcbiAgICogQHVzYWdlXG4gICAqIGBgYGh0bWxcbiAgICogPCEtLSB1c2luZyBhdHRyaWJ1dGUgZGlyZWN0aXZlcyAtLT5cbiAgICogPEFOWSBuZy1tZXNzYWdlcz1cImV4cHJlc3Npb25cIiByb2xlPVwiYWxlcnRcIj5cbiAgICogICA8QU5ZIG5nLW1lc3NhZ2VzLWluY2x1ZGU9XCJyZW1vdGVUcGxTdHJpbmdcIj4uLi48L0FOWT5cbiAgICogPC9BTlk+XG4gICAqXG4gICAqIDwhLS0gb3IgYnkgdXNpbmcgZWxlbWVudCBkaXJlY3RpdmVzIC0tPlxuICAgKiA8bmctbWVzc2FnZXMgZm9yPVwiZXhwcmVzc2lvblwiIHJvbGU9XCJhbGVydFwiPlxuICAgKiAgIDxuZy1tZXNzYWdlcy1pbmNsdWRlIHNyYz1cImV4cHJlc3Npb25WYWx1ZTFcIj4uLi48L25nLW1lc3NhZ2VzLWluY2x1ZGU+XG4gICAqIDwvbmctbWVzc2FnZXM+XG4gICAqIGBgYFxuICAgKlxuICAgKiB7QGxpbmsgbW9kdWxlOm5nTWVzc2FnZXMgQ2xpY2sgaGVyZX0gdG8gbGVhcm4gbW9yZSBhYm91dCBgbmdNZXNzYWdlc2AgYW5kIGBuZ01lc3NhZ2VgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNZXNzYWdlc0luY2x1ZGV8c3JjIGEgc3RyaW5nIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlbW90ZSB0ZW1wbGF0ZS5cbiAgICovXG4gIC5kaXJlY3RpdmUoJ25nTWVzc2FnZXNJbmNsdWRlJyxcbiAgICBbJyR0ZW1wbGF0ZVJlcXVlc3QnLCAnJGRvY3VtZW50JywgJyRjb21waWxlJywgZnVuY3Rpb24oJHRlbXBsYXRlUmVxdWVzdCwgJGRvY3VtZW50LCAkY29tcGlsZSkge1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnQUUnLFxuICAgICAgcmVxdWlyZTogJ15ebmdNZXNzYWdlcycsIC8vIHdlIG9ubHkgcmVxdWlyZSB0aGlzIGZvciB2YWxpZGF0aW9uIHNha2VcbiAgICAgIGxpbms6IGZ1bmN0aW9uKCRzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgICAgdmFyIHNyYyA9IGF0dHJzLm5nTWVzc2FnZXNJbmNsdWRlIHx8IGF0dHJzLnNyYztcbiAgICAgICAgJHRlbXBsYXRlUmVxdWVzdChzcmMpLnRoZW4oZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICAgIGlmICgkc2NvcGUuJCRkZXN0cm95ZWQpIHJldHVybjtcblxuICAgICAgICAgIGlmIChpc1N0cmluZyhodG1sKSAmJiAhaHRtbC50cmltKCkpIHtcbiAgICAgICAgICAgIC8vIEVtcHR5IHRlbXBsYXRlIC0gbm90aGluZyB0byBjb21waWxlXG4gICAgICAgICAgICByZXBsYWNlRWxlbWVudFdpdGhNYXJrZXIoZWxlbWVudCwgc3JjKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm9uLWVtcHR5IHRlbXBsYXRlIC0gY29tcGlsZSBhbmQgbGlua1xuICAgICAgICAgICAgJGNvbXBpbGUoaHRtbCkoJHNjb3BlLCBmdW5jdGlvbihjb250ZW50cykge1xuICAgICAgICAgICAgICBlbGVtZW50LmFmdGVyKGNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgcmVwbGFjZUVsZW1lbnRXaXRoTWFya2VyKGVsZW1lbnQsIHNyYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBIZWxwZXJzXG4gICAgZnVuY3Rpb24gcmVwbGFjZUVsZW1lbnRXaXRoTWFya2VyKGVsZW1lbnQsIHNyYykge1xuICAgICAgLy8gQSBjb21tZW50IG1hcmtlciBpcyBwbGFjZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgICAgdmFyIGNvbW1lbnQgPSAkY29tcGlsZS4kJGNyZWF0ZUNvbW1lbnQgP1xuICAgICAgICAgICRjb21waWxlLiQkY3JlYXRlQ29tbWVudCgnbmdNZXNzYWdlc0luY2x1ZGUnLCBzcmMpIDpcbiAgICAgICAgICAkZG9jdW1lbnRbMF0uY3JlYXRlQ29tbWVudCgnIG5nTWVzc2FnZXNJbmNsdWRlOiAnICsgc3JjICsgJyAnKTtcbiAgICAgIHZhciBtYXJrZXIgPSBqcUxpdGUoY29tbWVudCk7XG4gICAgICBlbGVtZW50LmFmdGVyKG1hcmtlcik7XG5cbiAgICAgIC8vIERvbid0IHBvbGx1dGUgdGhlIERPTSBhbnltb3JlIGJ5IGtlZXBpbmcgYW4gZW1wdHkgZGlyZWN0aXZlIGVsZW1lbnRcbiAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgfVxuICB9XSlcblxuICAvKipcbiAgICogQG5nZG9jIGRpcmVjdGl2ZVxuICAgKiBAbmFtZSBuZ01lc3NhZ2VcbiAgICogQHJlc3RyaWN0IEFFXG4gICAqIEBzY29wZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogYG5nTWVzc2FnZWAgaXMgYSBkaXJlY3RpdmUgd2l0aCB0aGUgcHVycG9zZSB0byBzaG93IGFuZCBoaWRlIGEgcGFydGljdWxhciBtZXNzYWdlLlxuICAgKiBGb3IgYG5nTWVzc2FnZWAgdG8gb3BlcmF0ZSwgYSBwYXJlbnQgYG5nTWVzc2FnZXNgIGRpcmVjdGl2ZSBvbiBhIHBhcmVudCBET00gZWxlbWVudFxuICAgKiBtdXN0IGJlIHNpdHVhdGVkIHNpbmNlIGl0IGRldGVybWluZXMgd2hpY2ggbWVzc2FnZXMgYXJlIHZpc2libGUgYmFzZWQgb24gdGhlIHN0YXRlXG4gICAqIG9mIHRoZSBwcm92aWRlZCBrZXkvdmFsdWUgbWFwIHRoYXQgYG5nTWVzc2FnZXNgIGxpc3RlbnMgb24uXG4gICAqXG4gICAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgYG5nTWVzc2FnZWAgY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgKiB7QGxpbmsgbW9kdWxlOm5nTWVzc2FnZXMgYG5nTWVzc2FnZXNgIG1vZHVsZSBkb2N1bWVudGF0aW9ufS5cbiAgICpcbiAgICogQHVzYWdlXG4gICAqIGBgYGh0bWxcbiAgICogPCEtLSB1c2luZyBhdHRyaWJ1dGUgZGlyZWN0aXZlcyAtLT5cbiAgICogPEFOWSBuZy1tZXNzYWdlcz1cImV4cHJlc3Npb25cIiByb2xlPVwiYWxlcnRcIj5cbiAgICogICA8QU5ZIG5nLW1lc3NhZ2U9XCJzdHJpbmdWYWx1ZVwiPi4uLjwvQU5ZPlxuICAgKiAgIDxBTlkgbmctbWVzc2FnZT1cInN0cmluZ1ZhbHVlMSwgc3RyaW5nVmFsdWUyLCAuLi5cIj4uLi48L0FOWT5cbiAgICogPC9BTlk+XG4gICAqXG4gICAqIDwhLS0gb3IgYnkgdXNpbmcgZWxlbWVudCBkaXJlY3RpdmVzIC0tPlxuICAgKiA8bmctbWVzc2FnZXMgZm9yPVwiZXhwcmVzc2lvblwiIHJvbGU9XCJhbGVydFwiPlxuICAgKiAgIDxuZy1tZXNzYWdlIHdoZW49XCJzdHJpbmdWYWx1ZVwiPi4uLjwvbmctbWVzc2FnZT5cbiAgICogICA8bmctbWVzc2FnZSB3aGVuPVwic3RyaW5nVmFsdWUxLCBzdHJpbmdWYWx1ZTIsIC4uLlwiPi4uLjwvbmctbWVzc2FnZT5cbiAgICogPC9uZy1tZXNzYWdlcz5cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNZXNzYWdlfHdoZW4gYSBzdHJpbmcgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWVzc2FnZSBrZXkuXG4gICAqL1xuICAuZGlyZWN0aXZlKCduZ01lc3NhZ2UnLCBuZ01lc3NhZ2VEaXJlY3RpdmVGYWN0b3J5KCkpXG5cblxuICAvKipcbiAgICogQG5nZG9jIGRpcmVjdGl2ZVxuICAgKiBAbmFtZSBuZ01lc3NhZ2VFeHBcbiAgICogQHJlc3RyaWN0IEFFXG4gICAqIEBwcmlvcml0eSAxXG4gICAqIEBzY29wZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogYG5nTWVzc2FnZUV4cGAgaXMgdGhlIHNhbWUgYXMge0BsaW5rIGRpcmVjdGl2ZTpuZ01lc3NhZ2UgYG5nTWVzc2FnZWB9LCBidXQgaW5zdGVhZCBvZiBhIHN0YXRpY1xuICAgKiB2YWx1ZSwgaXQgYWNjZXB0cyBhbiBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBmb3IgdGhlIG1lc3NhZ2Uga2V5LlxuICAgKlxuICAgKiBAdXNhZ2VcbiAgICogYGBgaHRtbFxuICAgKiA8IS0tIHVzaW5nIGF0dHJpYnV0ZSBkaXJlY3RpdmVzIC0tPlxuICAgKiA8QU5ZIG5nLW1lc3NhZ2VzPVwiZXhwcmVzc2lvblwiPlxuICAgKiAgIDxBTlkgbmctbWVzc2FnZS1leHA9XCJleHByZXNzaW9uVmFsdWVcIj4uLi48L0FOWT5cbiAgICogPC9BTlk+XG4gICAqXG4gICAqIDwhLS0gb3IgYnkgdXNpbmcgZWxlbWVudCBkaXJlY3RpdmVzIC0tPlxuICAgKiA8bmctbWVzc2FnZXMgZm9yPVwiZXhwcmVzc2lvblwiPlxuICAgKiAgIDxuZy1tZXNzYWdlIHdoZW4tZXhwPVwiZXhwcmVzc2lvblZhbHVlXCI+Li4uPC9uZy1tZXNzYWdlPlxuICAgKiA8L25nLW1lc3NhZ2VzPlxuICAgKiBgYGBcbiAgICpcbiAgICoge0BsaW5rIG1vZHVsZTpuZ01lc3NhZ2VzIENsaWNrIGhlcmV9IHRvIGxlYXJuIG1vcmUgYWJvdXQgYG5nTWVzc2FnZXNgIGFuZCBgbmdNZXNzYWdlYC5cbiAgICpcbiAgICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01lc3NhZ2VFeHB8d2hlbkV4cCBhbiBleHByZXNzaW9uIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1lc3NhZ2Uga2V5LlxuICAgKi9cbiAgLmRpcmVjdGl2ZSgnbmdNZXNzYWdlRXhwJywgbmdNZXNzYWdlRGlyZWN0aXZlRmFjdG9yeSgpKTtcblxuZnVuY3Rpb24gbmdNZXNzYWdlRGlyZWN0aXZlRmFjdG9yeSgpIHtcbiAgcmV0dXJuIFsnJGFuaW1hdGUnLCBmdW5jdGlvbigkYW5pbWF0ZSkge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0FFJyxcbiAgICAgIHRyYW5zY2x1ZGU6ICdlbGVtZW50JyxcbiAgICAgIHByaW9yaXR5OiAxLCAvLyBtdXN0IHJ1biBiZWZvcmUgbmdCaW5kLCBvdGhlcndpc2UgdGhlIHRleHQgaXMgc2V0IG9uIHRoZSBjb21tZW50XG4gICAgICB0ZXJtaW5hbDogdHJ1ZSxcbiAgICAgIHJlcXVpcmU6ICdeXm5nTWVzc2FnZXMnLFxuICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBuZ01lc3NhZ2VzQ3RybCwgJHRyYW5zY2x1ZGUpIHtcbiAgICAgICAgdmFyIGNvbW1lbnROb2RlID0gZWxlbWVudFswXTtcblxuICAgICAgICB2YXIgcmVjb3JkcztcbiAgICAgICAgdmFyIHN0YXRpY0V4cCA9IGF0dHJzLm5nTWVzc2FnZSB8fCBhdHRycy53aGVuO1xuICAgICAgICB2YXIgZHluYW1pY0V4cCA9IGF0dHJzLm5nTWVzc2FnZUV4cCB8fCBhdHRycy53aGVuRXhwO1xuICAgICAgICB2YXIgYXNzaWduUmVjb3JkcyA9IGZ1bmN0aW9uKGl0ZW1zKSB7XG4gICAgICAgICAgcmVjb3JkcyA9IGl0ZW1zXG4gICAgICAgICAgICAgID8gKGlzQXJyYXkoaXRlbXMpXG4gICAgICAgICAgICAgICAgICA/IGl0ZW1zXG4gICAgICAgICAgICAgICAgICA6IGl0ZW1zLnNwbGl0KC9bXFxzLF0rLykpXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBuZ01lc3NhZ2VzQ3RybC5yZVJlbmRlcigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChkeW5hbWljRXhwKSB7XG4gICAgICAgICAgYXNzaWduUmVjb3JkcyhzY29wZS4kZXZhbChkeW5hbWljRXhwKSk7XG4gICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbihkeW5hbWljRXhwLCBhc3NpZ25SZWNvcmRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhc3NpZ25SZWNvcmRzKHN0YXRpY0V4cCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudEVsZW1lbnQsIG1lc3NhZ2VDdHJsO1xuICAgICAgICBuZ01lc3NhZ2VzQ3RybC5yZWdpc3Rlcihjb21tZW50Tm9kZSwgbWVzc2FnZUN0cmwgPSB7XG4gICAgICAgICAgdGVzdDogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHJlY29yZHMsIG5hbWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0YWNoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICghY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgJHRyYW5zY2x1ZGUoZnVuY3Rpb24oZWxtLCBuZXdTY29wZSkge1xuICAgICAgICAgICAgICAgICRhbmltYXRlLmVudGVyKGVsbSwgbnVsbCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPSBlbG07XG5cbiAgICAgICAgICAgICAgICAvLyBFYWNoIHRpbWUgd2UgYXR0YWNoIHRoaXMgbm9kZSB0byBhIG1lc3NhZ2Ugd2UgZ2V0IGEgbmV3IGlkIHRoYXQgd2UgY2FuIG1hdGNoXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSBhcmUgZGVzdHJveWluZyB0aGUgbm9kZSBsYXRlci5cbiAgICAgICAgICAgICAgICB2YXIgJCRhdHRhY2hJZCA9IGN1cnJlbnRFbGVtZW50LiQkYXR0YWNoSWQgPSBuZ01lc3NhZ2VzQ3RybC5nZXRBdHRhY2hJZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGVsZW1lbnQgb3IgYSBwYXJlbnQgZWxlbWVudCBpcyBkZXN0cm95ZWRcbiAgICAgICAgICAgICAgICAvLyBieSBhbm90aGVyIHN0cnVjdHVyYWwgZGlyZWN0aXZlIHRoZW4gaXQncyB0aW1lXG4gICAgICAgICAgICAgICAgLy8gdG8gZGVyZWdpc3RlciB0aGUgbWVzc2FnZSBmcm9tIHRoZSBjb250cm9sbGVyXG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQub24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQuJCRhdHRhY2hJZCA9PT0gJCRhdHRhY2hJZCkge1xuICAgICAgICAgICAgICAgICAgICBuZ01lc3NhZ2VzQ3RybC5kZXJlZ2lzdGVyKGNvbW1lbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUN0cmwuZGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBuZXdTY29wZS4kZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGRldGFjaDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgdmFyIGVsbSA9IGN1cnJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICAgICRhbmltYXRlLmxlYXZlKGVsbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XTtcblxuICBmdW5jdGlvbiBjb250YWlucyhjb2xsZWN0aW9uLCBrZXkpIHtcbiAgICBpZiAoY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGlzQXJyYXkoY29sbGVjdGlvbilcbiAgICAgICAgICA/IGNvbGxlY3Rpb24uaW5kZXhPZihrZXkpID49IDBcbiAgICAgICAgICA6IGNvbGxlY3Rpb24uaGFzT3duUHJvcGVydHkoa2V5KTtcbiAgICB9XG4gIH1cbn1cblxuXG59KSh3aW5kb3csIHdpbmRvdy5hbmd1bGFyKTtcbiIsInJlcXVpcmUoJy4vYW5ndWxhci1tZXNzYWdlcycpO1xubW9kdWxlLmV4cG9ydHMgPSAnbmdNZXNzYWdlcyc7XG4iLCJhbmd1bGFyLm1vZHVsZSgnYW5ndWxhclJlc2l6YWJsZScsIFtdKVxyXG4gICAgLmRpcmVjdGl2ZSgncmVzaXphYmxlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHRvQ2FsbDtcclxuICAgICAgICBmdW5jdGlvbiB0aHJvdHRsZShmdW4pIHtcclxuICAgICAgICAgICAgaWYgKHRvQ2FsbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0b0NhbGwgPSBmdW47XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvQ2FsbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvQ2FsbCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0b0NhbGwgPSBmdW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdHJpY3Q6ICdBRScsXHJcbiAgICAgICAgICAgIHNjb3BlOiB7XHJcbiAgICAgICAgICAgICAgICByRGlyZWN0aW9uczogJz0nLFxyXG4gICAgICAgICAgICAgICAgckNlbnRlcmVkWDogJz0nLFxyXG4gICAgICAgICAgICAgICAgckNlbnRlcmVkWTogJz0nLFxyXG4gICAgICAgICAgICAgICAgcldpZHRoOiAnPScsXHJcbiAgICAgICAgICAgICAgICBySGVpZ2h0OiAnPScsXHJcbiAgICAgICAgICAgICAgICByRmxleDogJz0nLFxyXG4gICAgICAgICAgICAgICAgckdyYWJiZXI6ICdAJyxcclxuICAgICAgICAgICAgICAgIHJEaXNhYmxlZDogJ0AnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmxleEJhc2lzID0gJ2ZsZXhCYXNpcycgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlID8gJ2ZsZXhCYXNpcycgOlxyXG4gICAgICAgICAgICAgICAgICAgICd3ZWJraXRGbGV4QmFzaXMnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSA/ICd3ZWJraXRGbGV4QmFzaXMnIDpcclxuICAgICAgICAgICAgICAgICAgICAnbXNGbGV4UHJlZmVycmVkU2l6ZScgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlID8gJ21zRmxleFByZWZlcnJlZFNpemUnIDogJ2ZsZXhCYXNpcyc7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgd2F0Y2hlcnMgb24gd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIGlmIHRoZXkgYXJlIHNldFxyXG4gICAgICAgICAgICAgICAgc2NvcGUuJHdhdGNoKCdyV2lkdGgnLCBmdW5jdGlvbih2YWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFswXS5zdHlsZS53aWR0aCA9IHNjb3BlLnJXaWR0aCArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNjb3BlLiR3YXRjaCgnckhlaWdodCcsIGZ1bmN0aW9uKHZhbHVlKXtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50WzBdLnN0eWxlLmhlaWdodCA9IHNjb3BlLnJIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRDbGFzcygncmVzaXphYmxlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudFswXSwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICAgICAgdyxcclxuICAgICAgICAgICAgICAgICAgICBoLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpciA9IHNjb3BlLnJEaXJlY3Rpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgIHZ4ID0gc2NvcGUuckNlbnRlcmVkWCA/IDIgOiAxLCAvLyBpZiBjZW50ZXJlZCBkb3VibGUgdmVsb2NpdHlcclxuICAgICAgICAgICAgICAgICAgICB2eSA9IHNjb3BlLnJDZW50ZXJlZFkgPyAyIDogMSwgLy8gaWYgY2VudGVyZWQgZG91YmxlIHZlbG9jaXR5XHJcbiAgICAgICAgICAgICAgICAgICAgaW5uZXIgPSBzY29wZS5yR3JhYmJlciA/IHNjb3BlLnJHcmFiYmVyIDogJzxzcGFuPjwvc3Bhbj4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdEaXIsXHJcbiAgICAgICAgICAgICAgICAgICAgYXhpcyxcclxuICAgICAgICAgICAgICAgICAgICBpbmZvID0ge307XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHVwZGF0ZUluZm8gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mby53aWR0aCA9IGZhbHNlOyBpbmZvLmhlaWdodCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGF4aXMgPT09ICd4JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mby53aWR0aCA9IHBhcnNlSW50KGVsZW1lbnRbMF0uc3R5bGVbc2NvcGUuckZsZXggPyBmbGV4QmFzaXMgOiAnd2lkdGgnXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmhlaWdodCA9IHBhcnNlSW50KGVsZW1lbnRbMF0uc3R5bGVbc2NvcGUuckZsZXggPyBmbGV4QmFzaXMgOiAnaGVpZ2h0J10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGluZm8uaWQgPSBlbGVtZW50WzBdLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGluZm8uZXZ0ID0gZTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGRyYWdnaW5nID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wLCBvZmZzZXQgPSBheGlzID09PSAneCcgPyBzdGFydCAtIGUuY2xpZW50WCA6IHN0YXJ0IC0gZS5jbGllbnRZO1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaChkcmFnRGlyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0gc2NvcGUuckZsZXggPyBmbGV4QmFzaXMgOiAnaGVpZ2h0JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRbMF0uc3R5bGVbcHJvcF0gPSBoICsgKG9mZnNldCAqIHZ5KSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSBzY29wZS5yRmxleCA/IGZsZXhCYXNpcyA6ICdoZWlnaHQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFswXS5zdHlsZVtwcm9wXSA9IGggLSAob2Zmc2V0ICogdnkpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0gc2NvcGUuckZsZXggPyBmbGV4QmFzaXMgOiAnd2lkdGgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFswXS5zdHlsZVtwcm9wXSA9IHcgLSAob2Zmc2V0ICogdngpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsZWZ0JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSBzY29wZS5yRmxleCA/IGZsZXhCYXNpcyA6ICd3aWR0aCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50WzBdLnN0eWxlW3Byb3BdID0gdyArIChvZmZzZXQgKiB2eCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUluZm8oZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3R0bGUoZnVuY3Rpb24oKSB7IHNjb3BlLiRlbWl0KCdhbmd1bGFyLXJlc2l6YWJsZS5yZXNpemluZycsIGluZm8pO30pO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHZhciBkcmFnRW5kID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUluZm8oKTtcclxuICAgICAgICAgICAgICAgICAgICBzY29wZS4kZW1pdCgnYW5ndWxhci1yZXNpemFibGUucmVzaXplRW5kJywgaW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGRyYWdFbmQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBkcmFnZ2luZywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ25vLXRyYW5zaXRpb24nKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB2YXIgZHJhZ1N0YXJ0ID0gZnVuY3Rpb24oZSwgZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ0RpciA9IGRpcmVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBheGlzID0gZHJhZ0RpciA9PT0gJ2xlZnQnIHx8IGRyYWdEaXIgPT09ICdyaWdodCcgPyAneCcgOiAneSc7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBheGlzID09PSAneCcgPyBlLmNsaWVudFggOiBlLmNsaWVudFk7XHJcbiAgICAgICAgICAgICAgICAgICAgdyA9IHBhcnNlSW50KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGggPSBwYXJzZUludChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vcHJldmVudCB0cmFuc2l0aW9uIHdoaWxlIGRyYWdnaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRDbGFzcygnbm8tdHJhbnNpdGlvbicpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZHJhZ0VuZCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGRyYWdnaW5nLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIERpc2FibGUgaGlnaGxpZ2h0aW5nIHdoaWxlIGRyYWdnaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZS5zdG9wUHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZS5wcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUluZm8oZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGVtaXQoJ2FuZ3VsYXItcmVzaXphYmxlLnJlc2l6ZVN0YXJ0JywgaW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGRpci5mb3JFYWNoKGZ1bmN0aW9uIChkaXJlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhYmJlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgY2xhc3MgZm9yIHN0eWxpbmcgcHVycG9zZXNcclxuICAgICAgICAgICAgICAgICAgICBncmFiYmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncmctJyArIGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JhYmJlci5pbm5lckhUTUwgPSBpbm5lcjtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50WzBdLmFwcGVuZENoaWxkKGdyYWJiZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYWJiZXIub25kcmFnc3RhcnQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGdyYWJiZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSAoc2NvcGUuckRpc2FibGVkID09PSAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc2FibGVkICYmIGUud2hpY2ggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlZnQgbW91c2UgY2xpY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdTdGFydChlLCBkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbiIsIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhckpTIHYxLjYuNFxuICogKGMpIDIwMTAtMjAxNyBHb29nbGUsIEluYy4gaHR0cDovL2FuZ3VsYXJqcy5vcmdcbiAqIExpY2Vuc2U6IE1JVFxuICovXG4oZnVuY3Rpb24od2luZG93LCBhbmd1bGFyKSB7J3VzZSBzdHJpY3QnO1xuXG4vKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqXG4gKiAgICAgQW55IGNvbW1pdHMgdG8gdGhpcyBmaWxlIHNob3VsZCBiZSByZXZpZXdlZCB3aXRoIHNlY3VyaXR5IGluIG1pbmQuICAqXG4gKiAgIENoYW5nZXMgdG8gdGhpcyBmaWxlIGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiAqXG4gKiAgICAgICAgICBBbiBhcHByb3ZhbCBmcm9tIDIgQ29yZSBtZW1iZXJzIHdpdGggaGlzdG9yeSBvZiBtb2RpZnlpbmcgICAgICAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgaXMgcmVxdWlyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiAgRG9lcyB0aGUgY2hhbmdlIHNvbWVob3cgYWxsb3cgZm9yIGFyYml0cmFyeSBqYXZhc2NyaXB0IHRvIGJlIGV4ZWN1dGVkPyAqXG4gKiAgICBPciBhbGxvd3MgZm9yIHNvbWVvbmUgdG8gY2hhbmdlIHRoZSBwcm90b3R5cGUgb2YgYnVpbHQtaW4gb2JqZWN0cz8gICAqXG4gKiAgICAgT3IgZ2l2ZXMgdW5kZXNpcmVkIGFjY2VzcyB0byB2YXJpYWJsZXMgbGlrZXMgZG9jdW1lbnQgb3Igd2luZG93PyAgICAqXG4gKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqL1xuXG52YXIgJHNhbml0aXplTWluRXJyID0gYW5ndWxhci4kJG1pbkVycignJHNhbml0aXplJyk7XG52YXIgYmluZDtcbnZhciBleHRlbmQ7XG52YXIgZm9yRWFjaDtcbnZhciBpc0RlZmluZWQ7XG52YXIgbG93ZXJjYXNlO1xudmFyIG5vb3A7XG52YXIgbm9kZUNvbnRhaW5zO1xudmFyIGh0bWxQYXJzZXI7XG52YXIgaHRtbFNhbml0aXplV3JpdGVyO1xuXG4vKipcbiAqIEBuZ2RvYyBtb2R1bGVcbiAqIEBuYW1lIG5nU2FuaXRpemVcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqICMgbmdTYW5pdGl6ZVxuICpcbiAqIFRoZSBgbmdTYW5pdGl6ZWAgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gc2FuaXRpemUgSFRNTC5cbiAqXG4gKlxuICogPGRpdiBkb2MtbW9kdWxlLWNvbXBvbmVudHM9XCJuZ1Nhbml0aXplXCI+PC9kaXY+XG4gKlxuICogU2VlIHtAbGluayBuZ1Nhbml0aXplLiRzYW5pdGl6ZSBgJHNhbml0aXplYH0gZm9yIHVzYWdlLlxuICovXG5cbi8qKlxuICogQG5nZG9jIHNlcnZpY2VcbiAqIEBuYW1lICRzYW5pdGl6ZVxuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqICAgU2FuaXRpemVzIGFuIGh0bWwgc3RyaW5nIGJ5IHN0cmlwcGluZyBhbGwgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIHRva2Vucy5cbiAqXG4gKiAgIFRoZSBpbnB1dCBpcyBzYW5pdGl6ZWQgYnkgcGFyc2luZyB0aGUgSFRNTCBpbnRvIHRva2Vucy4gQWxsIHNhZmUgdG9rZW5zIChmcm9tIGEgd2hpdGVsaXN0KSBhcmVcbiAqICAgdGhlbiBzZXJpYWxpemVkIGJhY2sgdG8gcHJvcGVybHkgZXNjYXBlZCBodG1sIHN0cmluZy4gVGhpcyBtZWFucyB0aGF0IG5vIHVuc2FmZSBpbnB1dCBjYW4gbWFrZVxuICogICBpdCBpbnRvIHRoZSByZXR1cm5lZCBzdHJpbmcuXG4gKlxuICogICBUaGUgd2hpdGVsaXN0IGZvciBVUkwgc2FuaXRpemF0aW9uIG9mIGF0dHJpYnV0ZSB2YWx1ZXMgaXMgY29uZmlndXJlZCB1c2luZyB0aGUgZnVuY3Rpb25zXG4gKiAgIGBhSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdGAgYW5kIGBpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3RgIG9mIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyXG4gKiAgIGAkY29tcGlsZVByb3ZpZGVyYH0uXG4gKlxuICogICBUaGUgaW5wdXQgbWF5IGFsc28gY29udGFpbiBTVkcgbWFya3VwIGlmIHRoaXMgaXMgZW5hYmxlZCB2aWEge0BsaW5rICRzYW5pdGl6ZVByb3ZpZGVyfS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbCBIVE1MIGlucHV0LlxuICogQHJldHVybnMge3N0cmluZ30gU2FuaXRpemVkIEhUTUwuXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlIG1vZHVsZT1cInNhbml0aXplRXhhbXBsZVwiIGRlcHM9XCJhbmd1bGFyLXNhbml0aXplLmpzXCIgbmFtZT1cInNhbml0aXplLXNlcnZpY2VcIj5cbiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgIDxzY3JpcHQ+XG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnc2FuaXRpemVFeGFtcGxlJywgWyduZ1Nhbml0aXplJ10pXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRzY2UnLCBmdW5jdGlvbigkc2NvcGUsICRzY2UpIHtcbiAgICAgICAgICAgICAkc2NvcGUuc25pcHBldCA9XG4gICAgICAgICAgICAgICAnPHAgc3R5bGU9XCJjb2xvcjpibHVlXCI+YW4gaHRtbFxcbicgK1xuICAgICAgICAgICAgICAgJzxlbSBvbm1vdXNlb3Zlcj1cInRoaXMudGV4dENvbnRlbnQ9XFwnUFdOM0QhXFwnXCI+Y2xpY2sgaGVyZTwvZW0+XFxuJyArXG4gICAgICAgICAgICAgICAnc25pcHBldDwvcD4nO1xuICAgICAgICAgICAgICRzY29wZS5kZWxpYmVyYXRlbHlUcnVzdERhbmdlcm91c1NuaXBwZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgIHJldHVybiAkc2NlLnRydXN0QXNIdG1sKCRzY29wZS5zbmlwcGV0KTtcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICB9XSk7XG4gICAgIDwvc2NyaXB0PlxuICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICBTbmlwcGV0OiA8dGV4dGFyZWEgbmctbW9kZWw9XCJzbmlwcGV0XCIgY29scz1cIjYwXCIgcm93cz1cIjNcIj48L3RleHRhcmVhPlxuICAgICAgIDx0YWJsZT5cbiAgICAgICAgIDx0cj5cbiAgICAgICAgICAgPHRkPkRpcmVjdGl2ZTwvdGQ+XG4gICAgICAgICAgIDx0ZD5Ib3c8L3RkPlxuICAgICAgICAgICA8dGQ+U291cmNlPC90ZD5cbiAgICAgICAgICAgPHRkPlJlbmRlcmVkPC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgICA8dHIgaWQ9XCJiaW5kLWh0bWwtd2l0aC1zYW5pdGl6ZVwiPlxuICAgICAgICAgICA8dGQ+bmctYmluZC1odG1sPC90ZD5cbiAgICAgICAgICAgPHRkPkF1dG9tYXRpY2FsbHkgdXNlcyAkc2FuaXRpemU8L3RkPlxuICAgICAgICAgICA8dGQ+PHByZT4mbHQ7ZGl2IG5nLWJpbmQtaHRtbD1cInNuaXBwZXRcIiZndDs8YnIvPiZsdDsvZGl2Jmd0OzwvcHJlPjwvdGQ+XG4gICAgICAgICAgIDx0ZD48ZGl2IG5nLWJpbmQtaHRtbD1cInNuaXBwZXRcIj48L2Rpdj48L3RkPlxuICAgICAgICAgPC90cj5cbiAgICAgICAgIDx0ciBpZD1cImJpbmQtaHRtbC13aXRoLXRydXN0XCI+XG4gICAgICAgICAgIDx0ZD5uZy1iaW5kLWh0bWw8L3RkPlxuICAgICAgICAgICA8dGQ+QnlwYXNzICRzYW5pdGl6ZSBieSBleHBsaWNpdGx5IHRydXN0aW5nIHRoZSBkYW5nZXJvdXMgdmFsdWU8L3RkPlxuICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgIDxwcmU+Jmx0O2RpdiBuZy1iaW5kLWh0bWw9XCJkZWxpYmVyYXRlbHlUcnVzdERhbmdlcm91c1NuaXBwZXQoKVwiJmd0O1xuJmx0Oy9kaXYmZ3Q7PC9wcmU+XG4gICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgIDx0ZD48ZGl2IG5nLWJpbmQtaHRtbD1cImRlbGliZXJhdGVseVRydXN0RGFuZ2Vyb3VzU25pcHBldCgpXCI+PC9kaXY+PC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgICA8dHIgaWQ9XCJiaW5kLWRlZmF1bHRcIj5cbiAgICAgICAgICAgPHRkPm5nLWJpbmQ8L3RkPlxuICAgICAgICAgICA8dGQ+QXV0b21hdGljYWxseSBlc2NhcGVzPC90ZD5cbiAgICAgICAgICAgPHRkPjxwcmU+Jmx0O2RpdiBuZy1iaW5kPVwic25pcHBldFwiJmd0Ozxici8+Jmx0Oy9kaXYmZ3Q7PC9wcmU+PC90ZD5cbiAgICAgICAgICAgPHRkPjxkaXYgbmctYmluZD1cInNuaXBwZXRcIj48L2Rpdj48L3RkPlxuICAgICAgICAgPC90cj5cbiAgICAgICA8L3RhYmxlPlxuICAgICAgIDwvZGl2PlxuICAgPC9maWxlPlxuICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICBpdCgnc2hvdWxkIHNhbml0aXplIHRoZSBodG1sIHNuaXBwZXQgYnkgZGVmYXVsdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtaHRtbC13aXRoLXNhbml0aXplIGRpdicpKS5nZXRBdHRyaWJ1dGUoJ2lubmVySFRNTCcpKS5cbiAgICAgICAgIHRvQmUoJzxwPmFuIGh0bWxcXG48ZW0+Y2xpY2sgaGVyZTwvZW0+XFxuc25pcHBldDwvcD4nKTtcbiAgICAgfSk7XG5cbiAgICAgaXQoJ3Nob3VsZCBpbmxpbmUgcmF3IHNuaXBwZXQgaWYgYm91bmQgdG8gYSB0cnVzdGVkIHZhbHVlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcjYmluZC1odG1sLXdpdGgtdHJ1c3QgZGl2JykpLmdldEF0dHJpYnV0ZSgnaW5uZXJIVE1MJykpLlxuICAgICAgICAgdG9CZShcIjxwIHN0eWxlPVxcXCJjb2xvcjpibHVlXFxcIj5hbiBodG1sXFxuXCIgK1xuICAgICAgICAgICAgICBcIjxlbSBvbm1vdXNlb3Zlcj1cXFwidGhpcy50ZXh0Q29udGVudD0nUFdOM0QhJ1xcXCI+Y2xpY2sgaGVyZTwvZW0+XFxuXCIgK1xuICAgICAgICAgICAgICBcInNuaXBwZXQ8L3A+XCIpO1xuICAgICB9KTtcblxuICAgICBpdCgnc2hvdWxkIGVzY2FwZSBzbmlwcGV0IHdpdGhvdXQgYW55IGZpbHRlcicsIGZ1bmN0aW9uKCkge1xuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtZGVmYXVsdCBkaXYnKSkuZ2V0QXR0cmlidXRlKCdpbm5lckhUTUwnKSkuXG4gICAgICAgICB0b0JlKFwiJmx0O3Agc3R5bGU9XFxcImNvbG9yOmJsdWVcXFwiJmd0O2FuIGh0bWxcXG5cIiArXG4gICAgICAgICAgICAgIFwiJmx0O2VtIG9ubW91c2VvdmVyPVxcXCJ0aGlzLnRleHRDb250ZW50PSdQV04zRCEnXFxcIiZndDtjbGljayBoZXJlJmx0Oy9lbSZndDtcXG5cIiArXG4gICAgICAgICAgICAgIFwic25pcHBldCZsdDsvcCZndDtcIik7XG4gICAgIH0pO1xuXG4gICAgIGl0KCdzaG91bGQgdXBkYXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgZWxlbWVudChieS5tb2RlbCgnc25pcHBldCcpKS5jbGVhcigpO1xuICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3NuaXBwZXQnKSkuc2VuZEtleXMoJ25ldyA8YiBvbmNsaWNrPVwiYWxlcnQoMSlcIj50ZXh0PC9iPicpO1xuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtaHRtbC13aXRoLXNhbml0aXplIGRpdicpKS5nZXRBdHRyaWJ1dGUoJ2lubmVySFRNTCcpKS5cbiAgICAgICAgIHRvQmUoJ25ldyA8Yj50ZXh0PC9iPicpO1xuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtaHRtbC13aXRoLXRydXN0IGRpdicpKS5nZXRBdHRyaWJ1dGUoJ2lubmVySFRNTCcpKS50b0JlKFxuICAgICAgICAgJ25ldyA8YiBvbmNsaWNrPVwiYWxlcnQoMSlcIj50ZXh0PC9iPicpO1xuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtZGVmYXVsdCBkaXYnKSkuZ2V0QXR0cmlidXRlKCdpbm5lckhUTUwnKSkudG9CZShcbiAgICAgICAgIFwibmV3ICZsdDtiIG9uY2xpY2s9XFxcImFsZXJ0KDEpXFxcIiZndDt0ZXh0Jmx0Oy9iJmd0O1wiKTtcbiAgICAgfSk7XG4gICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBwcm92aWRlclxuICogQG5hbWUgJHNhbml0aXplUHJvdmlkZXJcbiAqIEB0aGlzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGFuZCBjb25maWd1cmVzIHtAbGluayAkc2FuaXRpemV9IGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiAkU2FuaXRpemVQcm92aWRlcigpIHtcbiAgdmFyIHN2Z0VuYWJsZWQgPSBmYWxzZTtcblxuICB0aGlzLiRnZXQgPSBbJyQkc2FuaXRpemVVcmknLCBmdW5jdGlvbigkJHNhbml0aXplVXJpKSB7XG4gICAgaWYgKHN2Z0VuYWJsZWQpIHtcbiAgICAgIGV4dGVuZCh2YWxpZEVsZW1lbnRzLCBzdmdFbGVtZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbihodG1sKSB7XG4gICAgICB2YXIgYnVmID0gW107XG4gICAgICBodG1sUGFyc2VyKGh0bWwsIGh0bWxTYW5pdGl6ZVdyaXRlcihidWYsIGZ1bmN0aW9uKHVyaSwgaXNJbWFnZSkge1xuICAgICAgICByZXR1cm4gIS9edW5zYWZlOi8udGVzdCgkJHNhbml0aXplVXJpKHVyaSwgaXNJbWFnZSkpO1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIGJ1Zi5qb2luKCcnKTtcbiAgICB9O1xuICB9XTtcblxuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lICRzYW5pdGl6ZVByb3ZpZGVyI2VuYWJsZVN2Z1xuICAgKiBAa2luZCBmdW5jdGlvblxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRW5hYmxlcyBhIHN1YnNldCBvZiBzdmcgdG8gYmUgc3VwcG9ydGVkIGJ5IHRoZSBzYW5pdGl6ZXIuXG4gICAqXG4gICAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XG4gICAqICAgPHA+QnkgZW5hYmxpbmcgdGhpcyBzZXR0aW5nIHdpdGhvdXQgdGFraW5nIG90aGVyIHByZWNhdXRpb25zLCB5b3UgbWlnaHQgZXhwb3NlIHlvdXJcbiAgICogICBhcHBsaWNhdGlvbiB0byBjbGljay1oaWphY2tpbmcgYXR0YWNrcy4gSW4gdGhlc2UgYXR0YWNrcywgc2FuaXRpemVkIHN2ZyBlbGVtZW50cyBjb3VsZCBiZSBwb3NpdGlvbmVkXG4gICAqICAgb3V0c2lkZSBvZiB0aGUgY29udGFpbmluZyBlbGVtZW50IGFuZCBiZSByZW5kZXJlZCBvdmVyIG90aGVyIGVsZW1lbnRzIG9uIHRoZSBwYWdlIChlLmcuIGEgbG9naW5cbiAgICogICBsaW5rKS4gU3VjaCBiZWhhdmlvciBjYW4gdGhlbiByZXN1bHQgaW4gcGhpc2hpbmcgaW5jaWRlbnRzLjwvcD5cbiAgICpcbiAgICogICA8cD5UbyBwcm90ZWN0IGFnYWluc3QgdGhlc2UsIGV4cGxpY2l0bHkgc2V0dXAgYG92ZXJmbG93OiBoaWRkZW5gIGNzcyBydWxlIGZvciBhbGwgcG90ZW50aWFsIHN2Z1xuICAgKiAgIHRhZ3Mgd2l0aGluIHRoZSBzYW5pdGl6ZWQgY29udGVudDo8L3A+XG4gICAqXG4gICAqICAgPGJyPlxuICAgKlxuICAgKiAgIDxwcmU+PGNvZGU+XG4gICAqICAgLnJvb3RPZlRoZUluY2x1ZGVkQ29udGVudCBzdmcge1xuICAgKiAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgKiAgIH1cbiAgICogICA8L2NvZGU+PC9wcmU+XG4gICAqIDwvZGl2PlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBmbGFnIEVuYWJsZSBvciBkaXNhYmxlIFNWRyBzdXBwb3J0IGluIHRoZSBzYW5pdGl6ZXIuXG4gICAqIEByZXR1cm5zIHtib29sZWFufG5nLiRzYW5pdGl6ZVByb3ZpZGVyfSBSZXR1cm5zIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCB2YWx1ZSBpZiBjYWxsZWRcbiAgICogICAgd2l0aG91dCBhbiBhcmd1bWVudCBvciBzZWxmIGZvciBjaGFpbmluZyBvdGhlcndpc2UuXG4gICAqL1xuICB0aGlzLmVuYWJsZVN2ZyA9IGZ1bmN0aW9uKGVuYWJsZVN2Zykge1xuICAgIGlmIChpc0RlZmluZWQoZW5hYmxlU3ZnKSkge1xuICAgICAgc3ZnRW5hYmxlZCA9IGVuYWJsZVN2ZztcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3ZnRW5hYmxlZDtcbiAgICB9XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHJpdmF0ZSBzdHVmZlxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGJpbmQgPSBhbmd1bGFyLmJpbmQ7XG4gIGV4dGVuZCA9IGFuZ3VsYXIuZXh0ZW5kO1xuICBmb3JFYWNoID0gYW5ndWxhci5mb3JFYWNoO1xuICBpc0RlZmluZWQgPSBhbmd1bGFyLmlzRGVmaW5lZDtcbiAgbG93ZXJjYXNlID0gYW5ndWxhci5sb3dlcmNhc2U7XG4gIG5vb3AgPSBhbmd1bGFyLm5vb3A7XG5cbiAgaHRtbFBhcnNlciA9IGh0bWxQYXJzZXJJbXBsO1xuICBodG1sU2FuaXRpemVXcml0ZXIgPSBodG1sU2FuaXRpemVXcml0ZXJJbXBsO1xuXG4gIG5vZGVDb250YWlucyA9IHdpbmRvdy5Ob2RlLnByb3RvdHlwZS5jb250YWlucyB8fCAvKiogQHRoaXMgKi8gZnVuY3Rpb24oYXJnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICByZXR1cm4gISEodGhpcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhcmcpICYgMTYpO1xuICB9O1xuXG4gIC8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xuICB2YXIgU1VSUk9HQVRFX1BBSVJfUkVHRVhQID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZyxcbiAgICAvLyBNYXRjaCBldmVyeXRoaW5nIG91dHNpZGUgb2Ygbm9ybWFsIGNoYXJzIGFuZCBcIiAocXVvdGUgY2hhcmFjdGVyKVxuICAgIE5PTl9BTFBIQU5VTUVSSUNfUkVHRVhQID0gLyhbXiMtfiB8IV0pL2c7XG5cblxuICAvLyBHb29kIHNvdXJjZSBvZiBpbmZvIGFib3V0IGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzXG4gIC8vIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNzZW1hbnRpY3NcbiAgLy8gaHR0cDovL3NpbW9uLmh0bWw1Lm9yZy9odG1sLWVsZW1lbnRzXG5cbiAgLy8gU2FmZSBWb2lkIEVsZW1lbnRzIC0gSFRNTDVcbiAgLy8gaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1sI3ZvaWQtZWxlbWVudHNcbiAgdmFyIHZvaWRFbGVtZW50cyA9IHRvTWFwKCdhcmVhLGJyLGNvbCxocixpbWcsd2JyJyk7XG5cbiAgLy8gRWxlbWVudHMgdGhhdCB5b3UgY2FuLCBpbnRlbnRpb25hbGx5LCBsZWF2ZSBvcGVuIChhbmQgd2hpY2ggY2xvc2UgdGhlbXNlbHZlcylcbiAgLy8gaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1sI29wdGlvbmFsLXRhZ3NcbiAgdmFyIG9wdGlvbmFsRW5kVGFnQmxvY2tFbGVtZW50cyA9IHRvTWFwKCdjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyJyksXG4gICAgICBvcHRpb25hbEVuZFRhZ0lubGluZUVsZW1lbnRzID0gdG9NYXAoJ3JwLHJ0JyksXG4gICAgICBvcHRpb25hbEVuZFRhZ0VsZW1lbnRzID0gZXh0ZW5kKHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsRW5kVGFnSW5saW5lRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxFbmRUYWdCbG9ja0VsZW1lbnRzKTtcblxuICAvLyBTYWZlIEJsb2NrIEVsZW1lbnRzIC0gSFRNTDVcbiAgdmFyIGJsb2NrRWxlbWVudHMgPSBleHRlbmQoe30sIG9wdGlvbmFsRW5kVGFnQmxvY2tFbGVtZW50cywgdG9NYXAoJ2FkZHJlc3MsYXJ0aWNsZSwnICtcbiAgICAgICAgICAnYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsJyArXG4gICAgICAgICAgJ2g2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbix0YWJsZSx1bCcpKTtcblxuICAvLyBJbmxpbmUgRWxlbWVudHMgLSBIVE1MNVxuICB2YXIgaW5saW5lRWxlbWVudHMgPSBleHRlbmQoe30sIG9wdGlvbmFsRW5kVGFnSW5saW5lRWxlbWVudHMsIHRvTWFwKCdhLGFiYnIsYWNyb255bSxiLCcgK1xuICAgICAgICAgICdiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscSxydWJ5LHJwLHJ0LHMsJyArXG4gICAgICAgICAgJ3NhbXAsc21hbGwsc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGltZSx0dCx1LHZhcicpKTtcblxuICAvLyBTVkcgRWxlbWVudHNcbiAgLy8gaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9TYW5pdGl6YXRpb25fcnVsZXMjc3ZnX0VsZW1lbnRzXG4gIC8vIE5vdGU6IHRoZSBlbGVtZW50cyBhbmltYXRlLGFuaW1hdGVDb2xvcixhbmltYXRlTW90aW9uLGFuaW1hdGVUcmFuc2Zvcm0sc2V0IGFyZSBpbnRlbnRpb25hbGx5IG9taXR0ZWQuXG4gIC8vIFRoZXkgY2FuIHBvdGVudGlhbGx5IGFsbG93IGZvciBhcmJpdHJhcnkgamF2YXNjcmlwdCB0byBiZSBleGVjdXRlZC4gU2VlICMxMTI5MFxuICB2YXIgc3ZnRWxlbWVudHMgPSB0b01hcCgnY2lyY2xlLGRlZnMsZGVzYyxlbGxpcHNlLGZvbnQtZmFjZSxmb250LWZhY2UtbmFtZSxmb250LWZhY2Utc3JjLGcsZ2x5cGgsJyArXG4gICAgICAgICAgJ2hrZXJuLGltYWdlLGxpbmVhckdyYWRpZW50LGxpbmUsbWFya2VyLG1ldGFkYXRhLG1pc3NpbmctZ2x5cGgsbXBhdGgscGF0aCxwb2x5Z29uLHBvbHlsaW5lLCcgK1xuICAgICAgICAgICdyYWRpYWxHcmFkaWVudCxyZWN0LHN0b3Asc3ZnLHN3aXRjaCx0ZXh0LHRpdGxlLHRzcGFuJyk7XG5cbiAgLy8gQmxvY2tlZCBFbGVtZW50cyAod2lsbCBiZSBzdHJpcHBlZClcbiAgdmFyIGJsb2NrZWRFbGVtZW50cyA9IHRvTWFwKCdzY3JpcHQsc3R5bGUnKTtcblxuICB2YXIgdmFsaWRFbGVtZW50cyA9IGV4dGVuZCh7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbEVuZFRhZ0VsZW1lbnRzKTtcblxuICAvL0F0dHJpYnV0ZXMgdGhhdCBoYXZlIGhyZWYgYW5kIGhlbmNlIG5lZWQgdG8gYmUgc2FuaXRpemVkXG4gIHZhciB1cmlBdHRycyA9IHRvTWFwKCdiYWNrZ3JvdW5kLGNpdGUsaHJlZixsb25nZGVzYyxzcmMseGxpbms6aHJlZicpO1xuXG4gIHZhciBodG1sQXR0cnMgPSB0b01hcCgnYWJicixhbGlnbixhbHQsYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhciwnICtcbiAgICAgICdjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb29yZHMsZGlyLGZhY2UsaGVhZGVycyxoZWlnaHQsaHJlZmxhbmcsaHNwYWNlLCcgK1xuICAgICAgJ2lzbWFwLGxhbmcsbGFuZ3VhZ2Usbm9ocmVmLG5vd3JhcCxyZWwscmV2LHJvd3Mscm93c3BhbixydWxlcywnICtcbiAgICAgICdzY29wZSxzY3JvbGxpbmcsc2hhcGUsc2l6ZSxzcGFuLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHR5cGUsJyArXG4gICAgICAndmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCcpO1xuXG4gIC8vIFNWRyBhdHRyaWJ1dGVzICh3aXRob3V0IFwiaWRcIiBhbmQgXCJuYW1lXCIgYXR0cmlidXRlcylcbiAgLy8gaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9TYW5pdGl6YXRpb25fcnVsZXMjc3ZnX0F0dHJpYnV0ZXNcbiAgdmFyIHN2Z0F0dHJzID0gdG9NYXAoJ2FjY2VudC1oZWlnaHQsYWNjdW11bGF0ZSxhZGRpdGl2ZSxhbHBoYWJldGljLGFyYWJpYy1mb3JtLGFzY2VudCwnICtcbiAgICAgICdiYXNlUHJvZmlsZSxiYm94LGJlZ2luLGJ5LGNhbGNNb2RlLGNhcC1oZWlnaHQsY2xhc3MsY29sb3IsY29sb3ItcmVuZGVyaW5nLGNvbnRlbnQsJyArXG4gICAgICAnY3gsY3ksZCxkeCxkeSxkZXNjZW50LGRpc3BsYXksZHVyLGVuZCxmaWxsLGZpbGwtcnVsZSxmb250LWZhbWlseSxmb250LXNpemUsZm9udC1zdHJldGNoLCcgK1xuICAgICAgJ2ZvbnQtc3R5bGUsZm9udC12YXJpYW50LGZvbnQtd2VpZ2h0LGZyb20sZngsZnksZzEsZzIsZ2x5cGgtbmFtZSxncmFkaWVudFVuaXRzLGhhbmdpbmcsJyArXG4gICAgICAnaGVpZ2h0LGhvcml6LWFkdi14LGhvcml6LW9yaWdpbi14LGlkZW9ncmFwaGljLGssa2V5UG9pbnRzLGtleVNwbGluZXMsa2V5VGltZXMsbGFuZywnICtcbiAgICAgICdtYXJrZXItZW5kLG1hcmtlci1taWQsbWFya2VyLXN0YXJ0LG1hcmtlckhlaWdodCxtYXJrZXJVbml0cyxtYXJrZXJXaWR0aCxtYXRoZW1hdGljYWwsJyArXG4gICAgICAnbWF4LG1pbixvZmZzZXQsb3BhY2l0eSxvcmllbnQsb3JpZ2luLG92ZXJsaW5lLXBvc2l0aW9uLG92ZXJsaW5lLXRoaWNrbmVzcyxwYW5vc2UtMSwnICtcbiAgICAgICdwYXRoLHBhdGhMZW5ndGgscG9pbnRzLHByZXNlcnZlQXNwZWN0UmF0aW8scixyZWZYLHJlZlkscmVwZWF0Q291bnQscmVwZWF0RHVyLCcgK1xuICAgICAgJ3JlcXVpcmVkRXh0ZW5zaW9ucyxyZXF1aXJlZEZlYXR1cmVzLHJlc3RhcnQscm90YXRlLHJ4LHJ5LHNsb3BlLHN0ZW1oLHN0ZW12LHN0b3AtY29sb3IsJyArXG4gICAgICAnc3RvcC1vcGFjaXR5LHN0cmlrZXRocm91Z2gtcG9zaXRpb24sc3RyaWtldGhyb3VnaC10aGlja25lc3Msc3Ryb2tlLHN0cm9rZS1kYXNoYXJyYXksJyArXG4gICAgICAnc3Ryb2tlLWRhc2hvZmZzZXQsc3Ryb2tlLWxpbmVjYXAsc3Ryb2tlLWxpbmVqb2luLHN0cm9rZS1taXRlcmxpbWl0LHN0cm9rZS1vcGFjaXR5LCcgK1xuICAgICAgJ3N0cm9rZS13aWR0aCxzeXN0ZW1MYW5ndWFnZSx0YXJnZXQsdGV4dC1hbmNob3IsdG8sdHJhbnNmb3JtLHR5cGUsdTEsdTIsdW5kZXJsaW5lLXBvc2l0aW9uLCcgK1xuICAgICAgJ3VuZGVybGluZS10aGlja25lc3MsdW5pY29kZSx1bmljb2RlLXJhbmdlLHVuaXRzLXBlci1lbSx2YWx1ZXMsdmVyc2lvbix2aWV3Qm94LHZpc2liaWxpdHksJyArXG4gICAgICAnd2lkdGgsd2lkdGhzLHgseC1oZWlnaHQseDEseDIseGxpbms6YWN0dWF0ZSx4bGluazphcmNyb2xlLHhsaW5rOnJvbGUseGxpbms6c2hvdyx4bGluazp0aXRsZSwnICtcbiAgICAgICd4bGluazp0eXBlLHhtbDpiYXNlLHhtbDpsYW5nLHhtbDpzcGFjZSx4bWxucyx4bWxuczp4bGluayx5LHkxLHkyLHpvb21BbmRQYW4nLCB0cnVlKTtcblxuICB2YXIgdmFsaWRBdHRycyA9IGV4dGVuZCh7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlBdHRycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdBdHRycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sQXR0cnMpO1xuXG4gIGZ1bmN0aW9uIHRvTWFwKHN0ciwgbG93ZXJjYXNlS2V5cykge1xuICAgIHZhciBvYmogPSB7fSwgaXRlbXMgPSBzdHIuc3BsaXQoJywnKSwgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9ialtsb3dlcmNhc2VLZXlzID8gbG93ZXJjYXNlKGl0ZW1zW2ldKSA6IGl0ZW1zW2ldXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgaW5lcnRCb2R5RWxlbWVudDtcbiAgKGZ1bmN0aW9uKHdpbmRvdykge1xuICAgIHZhciBkb2M7XG4gICAgaWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIGRvYyA9IHdpbmRvdy5kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ2luZXJ0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93ICRzYW5pdGl6ZU1pbkVycignbm9pbmVydCcsICdDYW5cXCd0IGNyZWF0ZSBhbiBpbmVydCBodG1sIGRvY3VtZW50Jyk7XG4gICAgfVxuICAgIHZhciBkb2NFbGVtZW50ID0gZG9jLmRvY3VtZW50RWxlbWVudCB8fCBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7XG4gICAgdmFyIGJvZHlFbGVtZW50cyA9IGRvY0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKTtcblxuICAgIC8vIHVzdWFsbHkgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQsIGJ1dCBJRSBkb2Vzbid0IGhhdmUgYW55LCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICBpZiAoYm9keUVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaW5lcnRCb2R5RWxlbWVudCA9IGJvZHlFbGVtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGh0bWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnaHRtbCcpO1xuICAgICAgaW5lcnRCb2R5RWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdib2R5Jyk7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGluZXJ0Qm9keUVsZW1lbnQpO1xuICAgICAgZG9jLmFwcGVuZENoaWxkKGh0bWwpO1xuICAgIH1cbiAgfSkod2luZG93KTtcblxuICAvKipcbiAgICogQGV4YW1wbGVcbiAgICogaHRtbFBhcnNlcihodG1sU3RyaW5nLCB7XG4gICAqICAgICBzdGFydDogZnVuY3Rpb24odGFnLCBhdHRycykge30sXG4gICAqICAgICBlbmQ6IGZ1bmN0aW9uKHRhZykge30sXG4gICAqICAgICBjaGFyczogZnVuY3Rpb24odGV4dCkge30sXG4gICAqICAgICBjb21tZW50OiBmdW5jdGlvbih0ZXh0KSB7fVxuICAgKiB9KTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgc3RyaW5nXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBoYW5kbGVyXG4gICAqL1xuICBmdW5jdGlvbiBodG1sUGFyc2VySW1wbChodG1sLCBoYW5kbGVyKSB7XG4gICAgaWYgKGh0bWwgPT09IG51bGwgfHwgaHRtbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBodG1sID0gJyc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaHRtbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGh0bWwgPSAnJyArIGh0bWw7XG4gICAgfVxuICAgIGluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgIC8vbVhTUyBwcm90ZWN0aW9uXG4gICAgdmFyIG1YU1NBdHRlbXB0cyA9IDU7XG4gICAgZG8ge1xuICAgICAgaWYgKG1YU1NBdHRlbXB0cyA9PT0gMCkge1xuICAgICAgICB0aHJvdyAkc2FuaXRpemVNaW5FcnIoJ3VpbnB1dCcsICdGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZScpO1xuICAgICAgfVxuICAgICAgbVhTU0F0dGVtcHRzLS07XG5cbiAgICAgIC8vIHN0cmlwIGN1c3RvbS1uYW1lc3BhY2VkIGF0dHJpYnV0ZXMgb24gSUU8PTExXG4gICAgICBpZiAod2luZG93LmRvY3VtZW50LmRvY3VtZW50TW9kZSkge1xuICAgICAgICBzdHJpcEN1c3RvbU5zQXR0cnMoaW5lcnRCb2R5RWxlbWVudCk7XG4gICAgICB9XG4gICAgICBodG1sID0gaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw7IC8vdHJpZ2dlciBtWFNTXG4gICAgICBpbmVydEJvZHlFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgfSB3aGlsZSAoaHRtbCAhPT0gaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgdmFyIG5vZGUgPSBpbmVydEJvZHlFbGVtZW50LmZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgICBjYXNlIDE6IC8vIEVMRU1FTlRfTk9ERVxuICAgICAgICAgIGhhbmRsZXIuc3RhcnQobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBhdHRyVG9NYXAobm9kZS5hdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogLy8gVEVYVCBOT0RFXG4gICAgICAgICAgaGFuZGxlci5jaGFycyhub2RlLnRleHRDb250ZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIG5leHROb2RlO1xuICAgICAgaWYgKCEobmV4dE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSB7XG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgaGFuZGxlci5lbmQobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0Tm9kZSA9IGdldE5vbkRlc2NlbmRhbnQoJ25leHRTaWJsaW5nJywgbm9kZSk7XG4gICAgICAgIGlmICghbmV4dE5vZGUpIHtcbiAgICAgICAgICB3aGlsZSAobmV4dE5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgbm9kZSA9IGdldE5vbkRlc2NlbmRhbnQoJ3BhcmVudE5vZGUnLCBub2RlKTtcbiAgICAgICAgICAgIGlmIChub2RlID09PSBpbmVydEJvZHlFbGVtZW50KSBicmVhaztcbiAgICAgICAgICAgIG5leHROb2RlID0gZ2V0Tm9uRGVzY2VuZGFudCgnbmV4dFNpYmxpbmcnLCBub2RlKTtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICAgIGhhbmRsZXIuZW5kKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG4gICAgfVxuXG4gICAgd2hpbGUgKChub2RlID0gaW5lcnRCb2R5RWxlbWVudC5maXJzdENoaWxkKSkge1xuICAgICAgaW5lcnRCb2R5RWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyVG9NYXAoYXR0cnMpIHtcbiAgICB2YXIgbWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXR0cnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGF0dHIgPSBhdHRyc1tpXTtcbiAgICAgIG1hcFthdHRyLm5hbWVdID0gYXR0ci52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEVzY2FwZXMgYWxsIHBvdGVudGlhbGx5IGRhbmdlcm91cyBjaGFyYWN0ZXJzLCBzbyB0aGF0IHRoZVxuICAgKiByZXN1bHRpbmcgc3RyaW5nIGNhbiBiZSBzYWZlbHkgaW5zZXJ0ZWQgaW50byBhdHRyaWJ1dGUgb3JcbiAgICogZWxlbWVudCB0ZXh0LlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ30gZXNjYXBlZCB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBlbmNvZGVFbnRpdGllcyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5cbiAgICAgIHJlcGxhY2UoLyYvZywgJyZhbXA7JykuXG4gICAgICByZXBsYWNlKFNVUlJPR0FURV9QQUlSX1JFR0VYUCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGhpID0gdmFsdWUuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdmFyIGxvdyA9IHZhbHVlLmNoYXJDb2RlQXQoMSk7XG4gICAgICAgIHJldHVybiAnJiMnICsgKCgoaGkgLSAweEQ4MDApICogMHg0MDApICsgKGxvdyAtIDB4REMwMCkgKyAweDEwMDAwKSArICc7JztcbiAgICAgIH0pLlxuICAgICAgcmVwbGFjZShOT05fQUxQSEFOVU1FUklDX1JFR0VYUCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICcmIycgKyB2YWx1ZS5jaGFyQ29kZUF0KDApICsgJzsnO1xuICAgICAgfSkuXG4gICAgICByZXBsYWNlKC88L2csICcmbHQ7JykuXG4gICAgICByZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGFuIEhUTUwvWE1MIHdyaXRlciB3aGljaCB3cml0ZXMgdG8gYnVmZmVyXG4gICAqIEBwYXJhbSB7QXJyYXl9IGJ1ZiB1c2UgYnVmLmpvaW4oJycpIHRvIGdldCBvdXQgc2FuaXRpemVkIGh0bWwgc3RyaW5nXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IGluIHRoZSBmb3JtIG9mIHtcbiAgICogICAgIHN0YXJ0OiBmdW5jdGlvbih0YWcsIGF0dHJzKSB7fSxcbiAgICogICAgIGVuZDogZnVuY3Rpb24odGFnKSB7fSxcbiAgICogICAgIGNoYXJzOiBmdW5jdGlvbih0ZXh0KSB7fSxcbiAgICogICAgIGNvbW1lbnQ6IGZ1bmN0aW9uKHRleHQpIHt9XG4gICAqIH1cbiAgICovXG4gIGZ1bmN0aW9uIGh0bWxTYW5pdGl6ZVdyaXRlckltcGwoYnVmLCB1cmlWYWxpZGF0b3IpIHtcbiAgICB2YXIgaWdub3JlQ3VycmVudEVsZW1lbnQgPSBmYWxzZTtcbiAgICB2YXIgb3V0ID0gYmluZChidWYsIGJ1Zi5wdXNoKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IGZ1bmN0aW9uKHRhZywgYXR0cnMpIHtcbiAgICAgICAgdGFnID0gbG93ZXJjYXNlKHRhZyk7XG4gICAgICAgIGlmICghaWdub3JlQ3VycmVudEVsZW1lbnQgJiYgYmxvY2tlZEVsZW1lbnRzW3RhZ10pIHtcbiAgICAgICAgICBpZ25vcmVDdXJyZW50RWxlbWVudCA9IHRhZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlnbm9yZUN1cnJlbnRFbGVtZW50ICYmIHZhbGlkRWxlbWVudHNbdGFnXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG91dCgnPCcpO1xuICAgICAgICAgIG91dCh0YWcpO1xuICAgICAgICAgIGZvckVhY2goYXR0cnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgIHZhciBsa2V5ID0gbG93ZXJjYXNlKGtleSk7XG4gICAgICAgICAgICB2YXIgaXNJbWFnZSA9ICh0YWcgPT09ICdpbWcnICYmIGxrZXkgPT09ICdzcmMnKSB8fCAobGtleSA9PT0gJ2JhY2tncm91bmQnKTtcbiAgICAgICAgICAgIGlmICh2YWxpZEF0dHJzW2xrZXldID09PSB0cnVlICYmXG4gICAgICAgICAgICAgICh1cmlBdHRyc1tsa2V5XSAhPT0gdHJ1ZSB8fCB1cmlWYWxpZGF0b3IodmFsdWUsIGlzSW1hZ2UpKSkge1xuICAgICAgICAgICAgICBvdXQoJyAnKTtcbiAgICAgICAgICAgICAgb3V0KGtleSk7XG4gICAgICAgICAgICAgIG91dCgnPVwiJyk7XG4gICAgICAgICAgICAgIG91dChlbmNvZGVFbnRpdGllcyh2YWx1ZSkpO1xuICAgICAgICAgICAgICBvdXQoJ1wiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0KCc+Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlbmQ6IGZ1bmN0aW9uKHRhZykge1xuICAgICAgICB0YWcgPSBsb3dlcmNhc2UodGFnKTtcbiAgICAgICAgaWYgKCFpZ25vcmVDdXJyZW50RWxlbWVudCAmJiB2YWxpZEVsZW1lbnRzW3RhZ10gPT09IHRydWUgJiYgdm9pZEVsZW1lbnRzW3RhZ10gIT09IHRydWUpIHtcbiAgICAgICAgICBvdXQoJzwvJyk7XG4gICAgICAgICAgb3V0KHRhZyk7XG4gICAgICAgICAgb3V0KCc+Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICBpZiAodGFnID09IGlnbm9yZUN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgaWdub3JlQ3VycmVudEVsZW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNoYXJzOiBmdW5jdGlvbihjaGFycykge1xuICAgICAgICBpZiAoIWlnbm9yZUN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgb3V0KGVuY29kZUVudGl0aWVzKGNoYXJzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cblxuICAvKipcbiAgICogV2hlbiBJRTktMTEgY29tZXMgYWNyb3NzIGFuIHVua25vd24gbmFtZXNwYWNlZCBhdHRyaWJ1dGUgZS5nLiAneGxpbms6Zm9vJyBpdCBhZGRzICd4bWxuczpuczEnIGF0dHJpYnV0ZSB0byBkZWNsYXJlXG4gICAqIG5zMSBuYW1lc3BhY2UgYW5kIHByZWZpeGVzIHRoZSBhdHRyaWJ1dGUgd2l0aCAnbnMxJyAoZS5nLiAnbnMxOnhsaW5rOmZvbycpLiBUaGlzIGlzIHVuZGVzaXJhYmxlIHNpbmNlIHdlIGRvbid0IHdhbnRcbiAgICogdG8gYWxsb3cgYW55IG9mIHRoZXNlIGN1c3RvbSBhdHRyaWJ1dGVzLiBUaGlzIG1ldGhvZCBzdHJpcHMgdGhlbSBhbGwuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIFJvb3QgZWxlbWVudCB0byBwcm9jZXNzXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpcEN1c3RvbU5zQXR0cnMobm9kZSkge1xuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gd2luZG93Lk5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHZhciBhdHRycyA9IG5vZGUuYXR0cmlidXRlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIgYXR0ck5vZGUgPSBhdHRyc1tpXTtcbiAgICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyTm9kZS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGF0dHJOYW1lID09PSAneG1sbnM6bnMxJyB8fCBhdHRyTmFtZS5sYXN0SW5kZXhPZignbnMxOicsIDApID09PSAwKSB7XG4gICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZU5vZGUoYXR0ck5vZGUpO1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgbC0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbmV4dE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICBpZiAobmV4dE5vZGUpIHtcbiAgICAgICAgc3RyaXBDdXN0b21Oc0F0dHJzKG5leHROb2RlKTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IGdldE5vbkRlc2NlbmRhbnQoJ25leHRTaWJsaW5nJywgbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Tm9uRGVzY2VuZGFudChwcm9wTmFtZSwgbm9kZSkge1xuICAgIC8vIEFuIGVsZW1lbnQgaXMgY2xvYmJlcmVkIGlmIGl0cyBgcHJvcE5hbWVgIHByb3BlcnR5IHBvaW50cyB0byBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzXG4gICAgdmFyIG5leHROb2RlID0gbm9kZVtwcm9wTmFtZV07XG4gICAgaWYgKG5leHROb2RlICYmIG5vZGVDb250YWlucy5jYWxsKG5vZGUsIG5leHROb2RlKSkge1xuICAgICAgdGhyb3cgJHNhbml0aXplTWluRXJyKCdlbGNsb2InLCAnRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6IHswfScsIG5vZGUub3V0ZXJIVE1MIHx8IG5vZGUub3V0ZXJUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHROb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplVGV4dChjaGFycykge1xuICB2YXIgYnVmID0gW107XG4gIHZhciB3cml0ZXIgPSBodG1sU2FuaXRpemVXcml0ZXIoYnVmLCBub29wKTtcbiAgd3JpdGVyLmNoYXJzKGNoYXJzKTtcbiAgcmV0dXJuIGJ1Zi5qb2luKCcnKTtcbn1cblxuXG4vLyBkZWZpbmUgbmdTYW5pdGl6ZSBtb2R1bGUgYW5kIHJlZ2lzdGVyICRzYW5pdGl6ZSBzZXJ2aWNlXG5hbmd1bGFyLm1vZHVsZSgnbmdTYW5pdGl6ZScsIFtdKVxuICAucHJvdmlkZXIoJyRzYW5pdGl6ZScsICRTYW5pdGl6ZVByb3ZpZGVyKVxuICAuaW5mbyh7IGFuZ3VsYXJWZXJzaW9uOiAnMS42LjQnIH0pO1xuXG4vKipcbiAqIEBuZ2RvYyBmaWx0ZXJcbiAqIEBuYW1lIGxpbmt5XG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRmluZHMgbGlua3MgaW4gdGV4dCBpbnB1dCBhbmQgdHVybnMgdGhlbSBpbnRvIGh0bWwgbGlua3MuIFN1cHBvcnRzIGBodHRwL2h0dHBzL2Z0cC9tYWlsdG9gIGFuZFxuICogcGxhaW4gZW1haWwgYWRkcmVzcyBsaW5rcy5cbiAqXG4gKiBSZXF1aXJlcyB0aGUge0BsaW5rIG5nU2FuaXRpemUgYG5nU2FuaXRpemVgfSBtb2R1bGUgdG8gYmUgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IElucHV0IHRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IFdpbmRvdyAoYF9ibGFua3xfc2VsZnxfcGFyZW50fF90b3BgKSBvciBuYW1lZCBmcmFtZSB0byBvcGVuIGxpbmtzIGluLlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb24odXJsKX0gW2F0dHJpYnV0ZXNdIEFkZCBjdXN0b20gYXR0cmlidXRlcyB0byB0aGUgbGluayBlbGVtZW50LlxuICpcbiAqICAgIENhbiBiZSBvbmUgb2Y6XG4gKlxuICogICAgLSBgb2JqZWN0YDogQSBtYXAgb2YgYXR0cmlidXRlc1xuICogICAgLSBgZnVuY3Rpb25gOiBUYWtlcyB0aGUgdXJsIGFzIGEgcGFyYW1ldGVyIGFuZCByZXR1cm5zIGEgbWFwIG9mIGF0dHJpYnV0ZXNcbiAqXG4gKiAgICBJZiB0aGUgbWFwIG9mIGF0dHJpYnV0ZXMgY29udGFpbnMgYSB2YWx1ZSBmb3IgYHRhcmdldGAsIGl0IG92ZXJyaWRlcyB0aGUgdmFsdWUgb2ZcbiAqICAgIHRoZSB0YXJnZXQgcGFyYW1ldGVyLlxuICpcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIdG1sLWxpbmtpZmllZCBhbmQge0BsaW5rICRzYW5pdGl6ZSBzYW5pdGl6ZWR9IHRleHQuXG4gKlxuICogQHVzYWdlXG4gICA8c3BhbiBuZy1iaW5kLWh0bWw9XCJsaW5reV9leHByZXNzaW9uIHwgbGlua3lcIj48L3NwYW4+XG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlIG1vZHVsZT1cImxpbmt5RXhhbXBsZVwiIGRlcHM9XCJhbmd1bGFyLXNhbml0aXplLmpzXCIgbmFtZT1cImxpbmt5LWZpbHRlclwiPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgU25pcHBldDogPHRleHRhcmVhIG5nLW1vZGVsPVwic25pcHBldFwiIGNvbHM9XCI2MFwiIHJvd3M9XCIzXCI+PC90ZXh0YXJlYT5cbiAgICAgICA8dGFibGU+XG4gICAgICAgICA8dHI+XG4gICAgICAgICAgIDx0aD5GaWx0ZXI8L3RoPlxuICAgICAgICAgICA8dGg+U291cmNlPC90aD5cbiAgICAgICAgICAgPHRoPlJlbmRlcmVkPC90aD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgICA8dHIgaWQ9XCJsaW5reS1maWx0ZXJcIj5cbiAgICAgICAgICAgPHRkPmxpbmt5IGZpbHRlcjwvdGQ+XG4gICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICA8cHJlPiZsdDtkaXYgbmctYmluZC1odG1sPVwic25pcHBldCB8IGxpbmt5XCImZ3Q7PGJyPiZsdDsvZGl2Jmd0OzwvcHJlPlxuICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgPGRpdiBuZy1iaW5kLWh0bWw9XCJzbmlwcGV0IHwgbGlua3lcIj48L2Rpdj5cbiAgICAgICAgICAgPC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgICA8dHIgaWQ9XCJsaW5reS10YXJnZXRcIj5cbiAgICAgICAgICA8dGQ+bGlua3kgdGFyZ2V0PC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8cHJlPiZsdDtkaXYgbmctYmluZC1odG1sPVwic25pcHBldFdpdGhTaW5nbGVVUkwgfCBsaW5reTonX2JsYW5rJ1wiJmd0Ozxicj4mbHQ7L2RpdiZndDs8L3ByZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxkaXYgbmctYmluZC1odG1sPVwic25pcHBldFdpdGhTaW5nbGVVUkwgfCBsaW5reTonX2JsYW5rJ1wiPjwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICA8L3RyPlxuICAgICAgICAgPHRyIGlkPVwibGlua3ktY3VzdG9tLWF0dHJpYnV0ZXNcIj5cbiAgICAgICAgICA8dGQ+bGlua3kgY3VzdG9tIGF0dHJpYnV0ZXM8L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxwcmU+Jmx0O2RpdiBuZy1iaW5kLWh0bWw9XCJzbmlwcGV0V2l0aFNpbmdsZVVSTCB8IGxpbmt5Oidfc2VsZic6e3JlbDogJ25vZm9sbG93J31cIiZndDs8YnI+Jmx0Oy9kaXYmZ3Q7PC9wcmU+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8ZGl2IG5nLWJpbmQtaHRtbD1cInNuaXBwZXRXaXRoU2luZ2xlVVJMIHwgbGlua3k6J19zZWxmJzp7cmVsOiAnbm9mb2xsb3cnfVwiPjwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICA8L3RyPlxuICAgICAgICAgPHRyIGlkPVwiZXNjYXBlZC1odG1sXCI+XG4gICAgICAgICAgIDx0ZD5ubyBmaWx0ZXI8L3RkPlxuICAgICAgICAgICA8dGQ+PHByZT4mbHQ7ZGl2IG5nLWJpbmQ9XCJzbmlwcGV0XCImZ3Q7PGJyPiZsdDsvZGl2Jmd0OzwvcHJlPjwvdGQ+XG4gICAgICAgICAgIDx0ZD48ZGl2IG5nLWJpbmQ9XCJzbmlwcGV0XCI+PC9kaXY+PC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgPC90YWJsZT5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XG4gICAgICAgYW5ndWxhci5tb2R1bGUoJ2xpbmt5RXhhbXBsZScsIFsnbmdTYW5pdGl6ZSddKVxuICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAgJHNjb3BlLnNuaXBwZXQgPVxuICAgICAgICAgICAgICdQcmV0dHkgdGV4dCB3aXRoIHNvbWUgbGlua3M6XFxuJyArXG4gICAgICAgICAgICAgJ2h0dHA6Ly9hbmd1bGFyanMub3JnLyxcXG4nICtcbiAgICAgICAgICAgICAnbWFpbHRvOnVzQHNvbWV3aGVyZS5vcmcsXFxuJyArXG4gICAgICAgICAgICAgJ2Fub3RoZXJAc29tZXdoZXJlLm9yZyxcXG4nICtcbiAgICAgICAgICAgICAnYW5kIG9uZSBtb3JlOiBmdHA6Ly8xMjcuMC4wLjEvLic7XG4gICAgICAgICAgICRzY29wZS5zbmlwcGV0V2l0aFNpbmdsZVVSTCA9ICdodHRwOi8vYW5ndWxhcmpzLm9yZy8nO1xuICAgICAgICAgfV0pO1xuICAgICA8L2ZpbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgICBpdCgnc2hvdWxkIGxpbmtpZnkgdGhlIHNuaXBwZXQgd2l0aCB1cmxzJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGlua3ktZmlsdGVyJykpLmVsZW1lbnQoYnkuYmluZGluZygnc25pcHBldCB8IGxpbmt5JykpLmdldFRleHQoKSkuXG4gICAgICAgICAgICAgdG9CZSgnUHJldHR5IHRleHQgd2l0aCBzb21lIGxpbmtzOiBodHRwOi8vYW5ndWxhcmpzLm9yZy8sIHVzQHNvbWV3aGVyZS5vcmcsICcgK1xuICAgICAgICAgICAgICAgICAgJ2Fub3RoZXJAc29tZXdoZXJlLm9yZywgYW5kIG9uZSBtb3JlOiBmdHA6Ly8xMjcuMC4wLjEvLicpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQuYWxsKGJ5LmNzcygnI2xpbmt5LWZpbHRlciBhJykpLmNvdW50KCkpLnRvRXF1YWwoNCk7XG4gICAgICAgfSk7XG5cbiAgICAgICBpdCgnc2hvdWxkIG5vdCBsaW5raWZ5IHNuaXBwZXQgd2l0aG91dCB0aGUgbGlua3kgZmlsdGVyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnZXNjYXBlZC1odG1sJykpLmVsZW1lbnQoYnkuYmluZGluZygnc25pcHBldCcpKS5nZXRUZXh0KCkpLlxuICAgICAgICAgICAgIHRvQmUoJ1ByZXR0eSB0ZXh0IHdpdGggc29tZSBsaW5rczogaHR0cDovL2FuZ3VsYXJqcy5vcmcvLCBtYWlsdG86dXNAc29tZXdoZXJlLm9yZywgJyArXG4gICAgICAgICAgICAgICAgICAnYW5vdGhlckBzb21ld2hlcmUub3JnLCBhbmQgb25lIG1vcmU6IGZ0cDovLzEyNy4wLjAuMS8uJyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudC5hbGwoYnkuY3NzKCcjZXNjYXBlZC1odG1sIGEnKSkuY291bnQoKSkudG9FcXVhbCgwKTtcbiAgICAgICB9KTtcblxuICAgICAgIGl0KCdzaG91bGQgdXBkYXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdzbmlwcGV0JykpLmNsZWFyKCk7XG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdzbmlwcGV0JykpLnNlbmRLZXlzKCduZXcgaHR0cDovL2xpbmsuJyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGlua3ktZmlsdGVyJykpLmVsZW1lbnQoYnkuYmluZGluZygnc25pcHBldCB8IGxpbmt5JykpLmdldFRleHQoKSkuXG4gICAgICAgICAgICAgdG9CZSgnbmV3IGh0dHA6Ly9saW5rLicpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQuYWxsKGJ5LmNzcygnI2xpbmt5LWZpbHRlciBhJykpLmNvdW50KCkpLnRvRXF1YWwoMSk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnZXNjYXBlZC1odG1sJykpLmVsZW1lbnQoYnkuYmluZGluZygnc25pcHBldCcpKS5nZXRUZXh0KCkpXG4gICAgICAgICAgICAgLnRvQmUoJ25ldyBodHRwOi8vbGluay4nKTtcbiAgICAgICB9KTtcblxuICAgICAgIGl0KCdzaG91bGQgd29yayB3aXRoIHRoZSB0YXJnZXQgcHJvcGVydHknLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmt5LXRhcmdldCcpKS5cbiAgICAgICAgICAgIGVsZW1lbnQoYnkuYmluZGluZyhcInNuaXBwZXRXaXRoU2luZ2xlVVJMIHwgbGlua3k6J19ibGFuaydcIikpLmdldFRleHQoKSkuXG4gICAgICAgICAgICB0b0JlKCdodHRwOi8vYW5ndWxhcmpzLm9yZy8nKTtcbiAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcjbGlua3ktdGFyZ2V0IGEnKSkuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKSkudG9FcXVhbCgnX2JsYW5rJyk7XG4gICAgICAgfSk7XG5cbiAgICAgICBpdCgnc2hvdWxkIG9wdGlvbmFsbHkgYWRkIGN1c3RvbSBhdHRyaWJ1dGVzJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5reS1jdXN0b20tYXR0cmlidXRlcycpKS5cbiAgICAgICAgICAgIGVsZW1lbnQoYnkuYmluZGluZyhcInNuaXBwZXRXaXRoU2luZ2xlVVJMIHwgbGlua3k6J19zZWxmJzp7cmVsOiAnbm9mb2xsb3cnfVwiKSkuZ2V0VGV4dCgpKS5cbiAgICAgICAgICAgIHRvQmUoJ2h0dHA6Ly9hbmd1bGFyanMub3JnLycpO1xuICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJyNsaW5reS1jdXN0b20tYXR0cmlidXRlcyBhJykpLmdldEF0dHJpYnV0ZSgncmVsJykpLnRvRXF1YWwoJ25vZm9sbG93Jyk7XG4gICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuYW5ndWxhci5tb2R1bGUoJ25nU2FuaXRpemUnKS5maWx0ZXIoJ2xpbmt5JywgWyckc2FuaXRpemUnLCBmdW5jdGlvbigkc2FuaXRpemUpIHtcbiAgdmFyIExJTktZX1VSTF9SRUdFWFAgPVxuICAgICAgICAvKChmdHB8aHR0cHM/KTpcXC9cXC98KHd3d1xcLil8KG1haWx0bzopP1tBLVphLXowLTkuXyUrLV0rQClcXFMqW15cXHMuOywoKXt9PD5cIlxcdTIwMWRcXHUyMDE5XS9pLFxuICAgICAgTUFJTFRPX1JFR0VYUCA9IC9ebWFpbHRvOi9pO1xuXG4gIHZhciBsaW5reU1pbkVyciA9IGFuZ3VsYXIuJCRtaW5FcnIoJ2xpbmt5Jyk7XG4gIHZhciBpc0RlZmluZWQgPSBhbmd1bGFyLmlzRGVmaW5lZDtcbiAgdmFyIGlzRnVuY3Rpb24gPSBhbmd1bGFyLmlzRnVuY3Rpb247XG4gIHZhciBpc09iamVjdCA9IGFuZ3VsYXIuaXNPYmplY3Q7XG4gIHZhciBpc1N0cmluZyA9IGFuZ3VsYXIuaXNTdHJpbmc7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHRleHQsIHRhcmdldCwgYXR0cmlidXRlcykge1xuICAgIGlmICh0ZXh0ID09IG51bGwgfHwgdGV4dCA9PT0gJycpIHJldHVybiB0ZXh0O1xuICAgIGlmICghaXNTdHJpbmcodGV4dCkpIHRocm93IGxpbmt5TWluRXJyKCdub3RzdHJpbmcnLCAnRXhwZWN0ZWQgc3RyaW5nIGJ1dCByZWNlaXZlZDogezB9JywgdGV4dCk7XG5cbiAgICB2YXIgYXR0cmlidXRlc0ZuID1cbiAgICAgIGlzRnVuY3Rpb24oYXR0cmlidXRlcykgPyBhdHRyaWJ1dGVzIDpcbiAgICAgIGlzT2JqZWN0KGF0dHJpYnV0ZXMpID8gZnVuY3Rpb24gZ2V0QXR0cmlidXRlc09iamVjdCgpIHtyZXR1cm4gYXR0cmlidXRlczt9IDpcbiAgICAgIGZ1bmN0aW9uIGdldEVtcHR5QXR0cmlidXRlc09iamVjdCgpIHtyZXR1cm4ge307fTtcblxuICAgIHZhciBtYXRjaDtcbiAgICB2YXIgcmF3ID0gdGV4dDtcbiAgICB2YXIgaHRtbCA9IFtdO1xuICAgIHZhciB1cmw7XG4gICAgdmFyIGk7XG4gICAgd2hpbGUgKChtYXRjaCA9IHJhdy5tYXRjaChMSU5LWV9VUkxfUkVHRVhQKSkpIHtcbiAgICAgIC8vIFdlIGNhbiBub3QgZW5kIGluIHRoZXNlIGFzIHRoZXkgYXJlIHNvbWV0aW1lcyBmb3VuZCBhdCB0aGUgZW5kIG9mIHRoZSBzZW50ZW5jZVxuICAgICAgdXJsID0gbWF0Y2hbMF07XG4gICAgICAvLyBpZiB3ZSBkaWQgbm90IG1hdGNoIGZ0cC9odHRwL3d3dy9tYWlsdG8gdGhlbiBhc3N1bWUgbWFpbHRvXG4gICAgICBpZiAoIW1hdGNoWzJdICYmICFtYXRjaFs0XSkge1xuICAgICAgICB1cmwgPSAobWF0Y2hbM10gPyAnaHR0cDovLycgOiAnbWFpbHRvOicpICsgdXJsO1xuICAgICAgfVxuICAgICAgaSA9IG1hdGNoLmluZGV4O1xuICAgICAgYWRkVGV4dChyYXcuc3Vic3RyKDAsIGkpKTtcbiAgICAgIGFkZExpbmsodXJsLCBtYXRjaFswXS5yZXBsYWNlKE1BSUxUT19SRUdFWFAsICcnKSk7XG4gICAgICByYXcgPSByYXcuc3Vic3RyaW5nKGkgKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgIH1cbiAgICBhZGRUZXh0KHJhdyk7XG4gICAgcmV0dXJuICRzYW5pdGl6ZShodG1sLmpvaW4oJycpKTtcblxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dCkge1xuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGh0bWwucHVzaChzYW5pdGl6ZVRleHQodGV4dCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZExpbmsodXJsLCB0ZXh0KSB7XG4gICAgICB2YXIga2V5LCBsaW5rQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXNGbih1cmwpO1xuICAgICAgaHRtbC5wdXNoKCc8YSAnKTtcblxuICAgICAgZm9yIChrZXkgaW4gbGlua0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgaHRtbC5wdXNoKGtleSArICc9XCInICsgbGlua0F0dHJpYnV0ZXNba2V5XSArICdcIiAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGVmaW5lZCh0YXJnZXQpICYmICEoJ3RhcmdldCcgaW4gbGlua0F0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGh0bWwucHVzaCgndGFyZ2V0PVwiJyxcbiAgICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICdcIiAnKTtcbiAgICAgIH1cbiAgICAgIGh0bWwucHVzaCgnaHJlZj1cIicsXG4gICAgICAgICAgICAgICAgdXJsLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKSxcbiAgICAgICAgICAgICAgICAnXCI+Jyk7XG4gICAgICBhZGRUZXh0KHRleHQpO1xuICAgICAgaHRtbC5wdXNoKCc8L2E+Jyk7XG4gICAgfVxuICB9O1xufV0pO1xuXG5cbn0pKHdpbmRvdywgd2luZG93LmFuZ3VsYXIpO1xuIiwicmVxdWlyZSgnLi9hbmd1bGFyLXNhbml0aXplJyk7XG5tb2R1bGUuZXhwb3J0cyA9ICduZ1Nhbml0aXplJztcbiIsIi8qXG4gKiBhbmd1bGFyLXVpLWJvb3RzdHJhcFxuICogaHR0cDovL2FuZ3VsYXItdWkuZ2l0aHViLmlvL2Jvb3RzdHJhcC9cblxuICogVmVyc2lvbjogMi41LjAgLSAyMDE3LTAxLTI4XG4gKiBMaWNlbnNlOiBNSVRcbiAqL2FuZ3VsYXIubW9kdWxlKFwidWkuYm9vdHN0cmFwXCIsIFtcInVpLmJvb3RzdHJhcC50cGxzXCIsIFwidWkuYm9vdHN0cmFwLmNvbGxhcHNlXCIsXCJ1aS5ib290c3RyYXAudGFiaW5kZXhcIixcInVpLmJvb3RzdHJhcC5hY2NvcmRpb25cIixcInVpLmJvb3RzdHJhcC5hbGVydFwiLFwidWkuYm9vdHN0cmFwLmJ1dHRvbnNcIixcInVpLmJvb3RzdHJhcC5jYXJvdXNlbFwiLFwidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXJcIixcInVpLmJvb3RzdHJhcC5pc0NsYXNzXCIsXCJ1aS5ib290c3RyYXAuZGF0ZXBpY2tlclwiLFwidWkuYm9vdHN0cmFwLnBvc2l0aW9uXCIsXCJ1aS5ib290c3RyYXAuZGF0ZXBpY2tlclBvcHVwXCIsXCJ1aS5ib290c3RyYXAuZGVib3VuY2VcIixcInVpLmJvb3RzdHJhcC5tdWx0aU1hcFwiLFwidWkuYm9vdHN0cmFwLmRyb3Bkb3duXCIsXCJ1aS5ib290c3RyYXAuc3RhY2tlZE1hcFwiLFwidWkuYm9vdHN0cmFwLm1vZGFsXCIsXCJ1aS5ib290c3RyYXAucGFnaW5nXCIsXCJ1aS5ib290c3RyYXAucGFnZXJcIixcInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uXCIsXCJ1aS5ib290c3RyYXAudG9vbHRpcFwiLFwidWkuYm9vdHN0cmFwLnBvcG92ZXJcIixcInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhclwiLFwidWkuYm9vdHN0cmFwLnJhdGluZ1wiLFwidWkuYm9vdHN0cmFwLnRhYnNcIixcInVpLmJvb3RzdHJhcC50aW1lcGlja2VyXCIsXCJ1aS5ib290c3RyYXAudHlwZWFoZWFkXCJdKTtcbmFuZ3VsYXIubW9kdWxlKFwidWkuYm9vdHN0cmFwLnRwbHNcIiwgW1widWliL3RlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbFwiLFwidWliL3RlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbFwiLFwidWliL3RlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWxcIixcInVpYi90ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sXCIsXCJ1aWIvdGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbFwiLFwidWliL3RlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sXCIsXCJ1aWIvdGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbFwiLFwidWliL3RlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbFwiLFwidWliL3RlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sXCIsXCJ1aWIvdGVtcGxhdGUvZGF0ZXBpY2tlclBvcHVwL3BvcHVwLmh0bWxcIixcInVpYi90ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbFwiLFwidWliL3RlbXBsYXRlL3BhZ2VyL3BhZ2VyLmh0bWxcIixcInVpYi90ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbFwiLFwidWliL3RlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXBvcHVwLmh0bWxcIixcInVpYi90ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbFwiLFwidWliL3RlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC10ZW1wbGF0ZS1wb3B1cC5odG1sXCIsXCJ1aWIvdGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLWh0bWwuaHRtbFwiLFwidWliL3RlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci10ZW1wbGF0ZS5odG1sXCIsXCJ1aWIvdGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWxcIixcInVpYi90ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbFwiLFwidWliL3RlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWxcIixcInVpYi90ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sXCIsXCJ1aWIvdGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sXCIsXCJ1aWIvdGVtcGxhdGUvdGFicy90YWIuaHRtbFwiLFwidWliL3RlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWxcIixcInVpYi90ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbFwiLFwidWliL3RlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbFwiLFwidWliL3RlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbFwiXSk7XG5hbmd1bGFyLm1vZHVsZSgndWkuYm9vdHN0cmFwLmNvbGxhcHNlJywgW10pXG5cbiAgLmRpcmVjdGl2ZSgndWliQ29sbGFwc2UnLCBbJyRhbmltYXRlJywgJyRxJywgJyRwYXJzZScsICckaW5qZWN0b3InLCBmdW5jdGlvbigkYW5pbWF0ZSwgJHEsICRwYXJzZSwgJGluamVjdG9yKSB7XG4gICAgdmFyICRhbmltYXRlQ3NzID0gJGluamVjdG9yLmhhcygnJGFuaW1hdGVDc3MnKSA/ICRpbmplY3Rvci5nZXQoJyRhbmltYXRlQ3NzJykgOiBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgICAgdmFyIGV4cGFuZGluZ0V4cHIgPSAkcGFyc2UoYXR0cnMuZXhwYW5kaW5nKSxcbiAgICAgICAgICBleHBhbmRlZEV4cHIgPSAkcGFyc2UoYXR0cnMuZXhwYW5kZWQpLFxuICAgICAgICAgIGNvbGxhcHNpbmdFeHByID0gJHBhcnNlKGF0dHJzLmNvbGxhcHNpbmcpLFxuICAgICAgICAgIGNvbGxhcHNlZEV4cHIgPSAkcGFyc2UoYXR0cnMuY29sbGFwc2VkKSxcbiAgICAgICAgICBob3Jpem9udGFsID0gZmFsc2UsXG4gICAgICAgICAgY3NzID0ge30sXG4gICAgICAgICAgY3NzVG8gPSB7fTtcblxuICAgICAgICBpbml0KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgICBob3Jpem9udGFsID0gISEoJ2hvcml6b250YWwnIGluIGF0dHJzKTtcbiAgICAgICAgICBpZiAoaG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgY3NzID0ge1xuICAgICAgICAgICAgICB3aWR0aDogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjc3NUbyA9IHt3aWR0aDogJzAnfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3NzID0ge1xuICAgICAgICAgICAgICBoZWlnaHQ6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY3NzVG8gPSB7aGVpZ2h0OiAnMCd9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXNjb3BlLiRldmFsKGF0dHJzLnVpYkNvbGxhcHNlKSkge1xuICAgICAgICAgICAgZWxlbWVudC5hZGRDbGFzcygnaW4nKVxuICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNlJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxuICAgICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSlcbiAgICAgICAgICAgICAgLmNzcyhjc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFNjcm9sbEZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgICBpZiAoaG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHt3aWR0aDogZWxlbWVudC5zY3JvbGxXaWR0aCArICdweCd9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge2hlaWdodDogZWxlbWVudC5zY3JvbGxIZWlnaHQgKyAncHgnfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGV4cGFuZCgpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnY29sbGFwc2UnKSAmJiBlbGVtZW50Lmhhc0NsYXNzKCdpbicpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJHEucmVzb2x2ZShleHBhbmRpbmdFeHByKHNjb3BlKSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCdjb2xsYXBzZScpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdjb2xsYXBzaW5nJylcbiAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFsc2UpO1xuXG4gICAgICAgICAgICAgIGlmICgkYW5pbWF0ZUNzcykge1xuICAgICAgICAgICAgICAgICRhbmltYXRlQ3NzKGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgIGFkZENsYXNzOiAnaW4nLFxuICAgICAgICAgICAgICAgICAgZWFzaW5nOiAnZWFzZScsXG4gICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdG86IGdldFNjcm9sbEZyb21FbGVtZW50KGVsZW1lbnRbMF0pXG4gICAgICAgICAgICAgICAgfSkuc3RhcnQoKVsnZmluYWxseSddKGV4cGFuZERvbmUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRhbmltYXRlLmFkZENsYXNzKGVsZW1lbnQsICdpbicsIHtcbiAgICAgICAgICAgICAgICAgIGNzczoge1xuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB0bzogZ2V0U2Nyb2xsRnJvbUVsZW1lbnQoZWxlbWVudFswXSlcbiAgICAgICAgICAgICAgICB9KS50aGVuKGV4cGFuZERvbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBhbmd1bGFyLm5vb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXhwYW5kRG9uZSgpIHtcbiAgICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCdjb2xsYXBzaW5nJylcbiAgICAgICAgICAgIC5hZGRDbGFzcygnY29sbGFwc2UnKVxuICAgICAgICAgICAgLmNzcyhjc3MpO1xuICAgICAgICAgIGV4cGFuZGVkRXhwcihzY29wZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjb2xsYXBzZSgpIHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQ2xhc3MoJ2NvbGxhcHNlJykgJiYgIWVsZW1lbnQuaGFzQ2xhc3MoJ2luJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xsYXBzZURvbmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkcS5yZXNvbHZlKGNvbGxhcHNpbmdFeHByKHNjb3BlKSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBlbGVtZW50XG4gICAgICAgICAgICAgIC8vIElNUE9SVEFOVDogVGhlIHdpZHRoIG11c3QgYmUgc2V0IGJlZm9yZSBhZGRpbmcgXCJjb2xsYXBzaW5nXCIgY2xhc3MuXG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdGhlIGJyb3dzZXIgYXR0ZW1wdHMgdG8gYW5pbWF0ZSBmcm9tIHdpZHRoIDAgKGluXG4gICAgICAgICAgICAgIC8vIGNvbGxhcHNpbmcgY2xhc3MpIHRvIHRoZSBnaXZlbiB3aWR0aCBoZXJlLlxuICAgICAgICAgICAgICAgIC5jc3MoZ2V0U2Nyb2xsRnJvbUVsZW1lbnQoZWxlbWVudFswXSkpXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGx5IGFsbCBwYW5lbCBjb2xsYXBzZSBoYXZlIHRoZSBjb2xsYXBzZSBjbGFzcywgdGhpcyByZW1vdmFsXG4gICAgICAgICAgICAgICAgLy8gcHJldmVudHMgdGhlIGFuaW1hdGlvbiBmcm9tIGp1bXBpbmcgdG8gY29sbGFwc2VkIHN0YXRlXG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdjb2xsYXBzZScpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdjb2xsYXBzaW5nJylcbiAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuXG4gICAgICAgICAgICAgIGlmICgkYW5pbWF0ZUNzcykge1xuICAgICAgICAgICAgICAgICRhbmltYXRlQ3NzKGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzOiAnaW4nLFxuICAgICAgICAgICAgICAgICAgdG86IGNzc1RvXG4gICAgICAgICAgICAgICAgfSkuc3RhcnQoKVsnZmluYWxseSddKGNvbGxhcHNlRG9uZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2luJywge1xuICAgICAgICAgICAgICAgICAgdG86IGNzc1RvXG4gICAgICAgICAgICAgICAgfSkudGhlbihjb2xsYXBzZURvbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBhbmd1bGFyLm5vb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY29sbGFwc2VEb25lKCkge1xuICAgICAgICAgIGVsZW1lbnQuY3NzKGNzc1RvKTsgLy8gUmVxdWlyZWQgc28gdGhhdCBjb2xsYXBzZSB3b3JrcyB3aGVuIGFuaW1hdGlvbiBpcyBkaXNhYmxlZFxuICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNpbmcnKVxuICAgICAgICAgICAgLmFkZENsYXNzKCdjb2xsYXBzZScpO1xuICAgICAgICAgIGNvbGxhcHNlZEV4cHIoc2NvcGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHJzLnVpYkNvbGxhcHNlLCBmdW5jdGlvbihzaG91bGRDb2xsYXBzZSkge1xuICAgICAgICAgIGlmIChzaG91bGRDb2xsYXBzZSkge1xuICAgICAgICAgICAgY29sbGFwc2UoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwYW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAudGFiaW5kZXgnLCBbXSlcblxuLmRpcmVjdGl2ZSgndWliVGFiaW5kZXhUb2dnbGUnLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgYXR0cnMuJG9ic2VydmUoJ2Rpc2FibGVkJywgZnVuY3Rpb24oZGlzYWJsZWQpIHtcbiAgICAgICAgYXR0cnMuJHNldCgndGFiaW5kZXgnLCBkaXNhYmxlZCA/IC0xIDogbnVsbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59KTtcblxuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5hY2NvcmRpb24nLCBbJ3VpLmJvb3RzdHJhcC5jb2xsYXBzZScsICd1aS5ib290c3RyYXAudGFiaW5kZXgnXSlcblxuLmNvbnN0YW50KCd1aWJBY2NvcmRpb25Db25maWcnLCB7XG4gIGNsb3NlT3RoZXJzOiB0cnVlXG59KVxuXG4uY29udHJvbGxlcignVWliQWNjb3JkaW9uQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRhdHRycycsICd1aWJBY2NvcmRpb25Db25maWcnLCBmdW5jdGlvbigkc2NvcGUsICRhdHRycywgYWNjb3JkaW9uQ29uZmlnKSB7XG4gIC8vIFRoaXMgYXJyYXkga2VlcHMgdHJhY2sgb2YgdGhlIGFjY29yZGlvbiBncm91cHNcbiAgdGhpcy5ncm91cHMgPSBbXTtcblxuICAvLyBFbnN1cmUgdGhhdCBhbGwgdGhlIGdyb3VwcyBpbiB0aGlzIGFjY29yZGlvbiBhcmUgY2xvc2VkLCB1bmxlc3MgY2xvc2Utb3RoZXJzIGV4cGxpY2l0bHkgc2F5cyBub3QgdG9cbiAgdGhpcy5jbG9zZU90aGVycyA9IGZ1bmN0aW9uKG9wZW5Hcm91cCkge1xuICAgIHZhciBjbG9zZU90aGVycyA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5jbG9zZU90aGVycykgP1xuICAgICAgJHNjb3BlLiRldmFsKCRhdHRycy5jbG9zZU90aGVycykgOiBhY2NvcmRpb25Db25maWcuY2xvc2VPdGhlcnM7XG4gICAgaWYgKGNsb3NlT3RoZXJzKSB7XG4gICAgICBhbmd1bGFyLmZvckVhY2godGhpcy5ncm91cHMsIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIGlmIChncm91cCAhPT0gb3Blbkdyb3VwKSB7XG4gICAgICAgICAgZ3JvdXAuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBhY2NvcmRpb24tZ3JvdXAgZGlyZWN0aXZlIHRvIGFkZCBpdHNlbGYgdG8gdGhlIGFjY29yZGlvblxuICB0aGlzLmFkZEdyb3VwID0gZnVuY3Rpb24oZ3JvdXBTY29wZSkge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICB0aGlzLmdyb3Vwcy5wdXNoKGdyb3VwU2NvcGUpO1xuXG4gICAgZ3JvdXBTY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIHRoYXQucmVtb3ZlR3JvdXAoZ3JvdXBTY29wZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgYWNjb3JkaW9uLWdyb3VwIGRpcmVjdGl2ZSB3aGVuIHRvIHJlbW92ZSBpdHNlbGZcbiAgdGhpcy5yZW1vdmVHcm91cCA9IGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5ncm91cHMuaW5kZXhPZihncm91cCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5ncm91cHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH07XG59XSlcblxuLy8gVGhlIGFjY29yZGlvbiBkaXJlY3RpdmUgc2ltcGx5IHNldHMgdXAgdGhlIGRpcmVjdGl2ZSBjb250cm9sbGVyXG4vLyBhbmQgYWRkcyBhbiBhY2NvcmRpb24gQ1NTIGNsYXNzIHRvIGl0c2VsZiBlbGVtZW50LlxuLmRpcmVjdGl2ZSgndWliQWNjb3JkaW9uJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgY29udHJvbGxlcjogJ1VpYkFjY29yZGlvbkNvbnRyb2xsZXInLFxuICAgIGNvbnRyb2xsZXJBczogJ2FjY29yZGlvbicsXG4gICAgdHJhbnNjbHVkZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIHJldHVybiBhdHRycy50ZW1wbGF0ZVVybCB8fCAndWliL3RlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCc7XG4gICAgfVxuICB9O1xufSlcblxuLy8gVGhlIGFjY29yZGlvbi1ncm91cCBkaXJlY3RpdmUgaW5kaWNhdGVzIGEgYmxvY2sgb2YgaHRtbCB0aGF0IHdpbGwgZXhwYW5kIGFuZCBjb2xsYXBzZSBpbiBhbiBhY2NvcmRpb25cbi5kaXJlY3RpdmUoJ3VpYkFjY29yZGlvbkdyb3VwJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWlyZTogJ151aWJBY2NvcmRpb24nLCAgICAgICAgIC8vIFdlIG5lZWQgdGhpcyBkaXJlY3RpdmUgdG8gYmUgaW5zaWRlIGFuIGFjY29yZGlvblxuICAgIHRyYW5zY2x1ZGU6IHRydWUsICAgICAgICAgICAgICAvLyBJdCB0cmFuc2NsdWRlcyB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdGl2ZSBpbnRvIHRoZSB0ZW1wbGF0ZVxuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgdGVtcGxhdGVVcmw6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICByZXR1cm4gYXR0cnMudGVtcGxhdGVVcmwgfHwgJ3VpYi90ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwnO1xuICAgIH0sXG4gICAgc2NvcGU6IHtcbiAgICAgIGhlYWRpbmc6ICdAJywgICAgICAgICAgICAgICAvLyBJbnRlcnBvbGF0ZSB0aGUgaGVhZGluZyBhdHRyaWJ1dGUgb250byB0aGlzIHNjb3BlXG4gICAgICBwYW5lbENsYXNzOiAnQD8nLCAgICAgICAgICAgLy8gRGl0dG8gd2l0aCBwYW5lbENsYXNzXG4gICAgICBpc09wZW46ICc9PycsXG4gICAgICBpc0Rpc2FibGVkOiAnPT8nXG4gICAgfSxcbiAgICBjb250cm9sbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc2V0SGVhZGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5oZWFkaW5nID0gZWxlbWVudDtcbiAgICAgIH07XG4gICAgfSxcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGFjY29yZGlvbkN0cmwpIHtcbiAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ3BhbmVsJyk7XG4gICAgICBhY2NvcmRpb25DdHJsLmFkZEdyb3VwKHNjb3BlKTtcblxuICAgICAgc2NvcGUub3BlbkNsYXNzID0gYXR0cnMub3BlbkNsYXNzIHx8ICdwYW5lbC1vcGVuJztcbiAgICAgIHNjb3BlLnBhbmVsQ2xhc3MgPSBhdHRycy5wYW5lbENsYXNzIHx8ICdwYW5lbC1kZWZhdWx0JztcbiAgICAgIHNjb3BlLiR3YXRjaCgnaXNPcGVuJywgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC50b2dnbGVDbGFzcyhzY29wZS5vcGVuQ2xhc3MsICEhdmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBhY2NvcmRpb25DdHJsLmNsb3NlT3RoZXJzKHNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLnRvZ2dsZU9wZW4gPSBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgaWYgKCFzY29wZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgaWYgKCEkZXZlbnQgfHwgJGV2ZW50LndoaWNoID09PSAzMikge1xuICAgICAgICAgICAgc2NvcGUuaXNPcGVuID0gIXNjb3BlLmlzT3BlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBpZCA9ICdhY2NvcmRpb25ncm91cC0nICsgc2NvcGUuJGlkICsgJy0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDApO1xuICAgICAgc2NvcGUuaGVhZGluZ0lkID0gaWQgKyAnLXRhYic7XG4gICAgICBzY29wZS5wYW5lbElkID0gaWQgKyAnLXBhbmVsJztcbiAgICB9XG4gIH07XG59KVxuXG4vLyBVc2UgYWNjb3JkaW9uLWhlYWRpbmcgYmVsb3cgYW4gYWNjb3JkaW9uLWdyb3VwIHRvIHByb3ZpZGUgYSBoZWFkaW5nIGNvbnRhaW5pbmcgSFRNTFxuLmRpcmVjdGl2ZSgndWliQWNjb3JkaW9uSGVhZGluZycsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHRyYW5zY2x1ZGU6IHRydWUsICAgLy8gR3JhYiB0aGUgY29udGVudHMgdG8gYmUgdXNlZCBhcyB0aGUgaGVhZGluZ1xuICAgIHRlbXBsYXRlOiAnJywgICAgICAgLy8gSW4gZWZmZWN0IHJlbW92ZSB0aGlzIGVsZW1lbnQhXG4gICAgcmVwbGFjZTogdHJ1ZSxcbiAgICByZXF1aXJlOiAnXnVpYkFjY29yZGlvbkdyb3VwJyxcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGFjY29yZGlvbkdyb3VwQ3RybCwgdHJhbnNjbHVkZSkge1xuICAgICAgLy8gUGFzcyB0aGUgaGVhZGluZyB0byB0aGUgYWNjb3JkaW9uLWdyb3VwIGNvbnRyb2xsZXJcbiAgICAgIC8vIHNvIHRoYXQgaXQgY2FuIGJlIHRyYW5zY2x1ZGVkIGludG8gdGhlIHJpZ2h0IHBsYWNlIGluIHRoZSB0ZW1wbGF0ZVxuICAgICAgLy8gW1RoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIHRyYW5zY2x1ZGUgY2F1c2VzIHRoZSBlbGVtZW50cyB0byBiZSBjbG9uZWQgc28gdGhhdCB0aGV5IHdvcmsgaW4gbmctcmVwZWF0XVxuICAgICAgYWNjb3JkaW9uR3JvdXBDdHJsLnNldEhlYWRpbmcodHJhbnNjbHVkZShzY29wZSwgYW5ndWxhci5ub29wKSk7XG4gICAgfVxuICB9O1xufSlcblxuLy8gVXNlIGluIHRoZSBhY2NvcmRpb24tZ3JvdXAgdGVtcGxhdGUgdG8gaW5kaWNhdGUgd2hlcmUgeW91IHdhbnQgdGhlIGhlYWRpbmcgdG8gYmUgdHJhbnNjbHVkZWRcbi8vIFlvdSBtdXN0IHByb3ZpZGUgdGhlIHByb3BlcnR5IG9uIHRoZSBhY2NvcmRpb24tZ3JvdXAgY29udHJvbGxlciB0aGF0IHdpbGwgaG9sZCB0aGUgdHJhbnNjbHVkZWQgZWxlbWVudFxuLmRpcmVjdGl2ZSgndWliQWNjb3JkaW9uVHJhbnNjbHVkZScsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHJlcXVpcmU6ICdedWliQWNjb3JkaW9uR3JvdXAnLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY29udHJvbGxlcikge1xuICAgICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uKCkgeyByZXR1cm4gY29udHJvbGxlclthdHRycy51aWJBY2NvcmRpb25UcmFuc2NsdWRlXTsgfSwgZnVuY3Rpb24oaGVhZGluZykge1xuICAgICAgICBpZiAoaGVhZGluZykge1xuICAgICAgICAgIHZhciBlbGVtID0gYW5ndWxhci5lbGVtZW50KGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcihnZXRIZWFkZXJTZWxlY3RvcnMoKSkpO1xuICAgICAgICAgIGVsZW0uaHRtbCgnJyk7XG4gICAgICAgICAgZWxlbS5hcHBlbmQoaGVhZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBnZXRIZWFkZXJTZWxlY3RvcnMoKSB7XG4gICAgICByZXR1cm4gJ3VpYi1hY2NvcmRpb24taGVhZGVyLCcgK1xuICAgICAgICAgICdkYXRhLXVpYi1hY2NvcmRpb24taGVhZGVyLCcgK1xuICAgICAgICAgICd4LXVpYi1hY2NvcmRpb24taGVhZGVyLCcgK1xuICAgICAgICAgICd1aWJcXFxcOmFjY29yZGlvbi1oZWFkZXIsJyArXG4gICAgICAgICAgJ1t1aWItYWNjb3JkaW9uLWhlYWRlcl0sJyArXG4gICAgICAgICAgJ1tkYXRhLXVpYi1hY2NvcmRpb24taGVhZGVyXSwnICtcbiAgICAgICAgICAnW3gtdWliLWFjY29yZGlvbi1oZWFkZXJdJztcbiAgfVxufSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAuYWxlcnQnLCBbXSlcblxuLmNvbnRyb2xsZXIoJ1VpYkFsZXJ0Q29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRlbGVtZW50JywgJyRhdHRycycsICckaW50ZXJwb2xhdGUnLCAnJHRpbWVvdXQnLCBmdW5jdGlvbigkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsICRpbnRlcnBvbGF0ZSwgJHRpbWVvdXQpIHtcbiAgJHNjb3BlLmNsb3NlYWJsZSA9ICEhJGF0dHJzLmNsb3NlO1xuICAkZWxlbWVudC5hZGRDbGFzcygnYWxlcnQnKTtcbiAgJGF0dHJzLiRzZXQoJ3JvbGUnLCAnYWxlcnQnKTtcbiAgaWYgKCRzY29wZS5jbG9zZWFibGUpIHtcbiAgICAkZWxlbWVudC5hZGRDbGFzcygnYWxlcnQtZGlzbWlzc2libGUnKTtcbiAgfVxuXG4gIHZhciBkaXNtaXNzT25UaW1lb3V0ID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLmRpc21pc3NPblRpbWVvdXQpID9cbiAgICAkaW50ZXJwb2xhdGUoJGF0dHJzLmRpc21pc3NPblRpbWVvdXQpKCRzY29wZS4kcGFyZW50KSA6IG51bGw7XG5cbiAgaWYgKGRpc21pc3NPblRpbWVvdXQpIHtcbiAgICAkdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICRzY29wZS5jbG9zZSgpO1xuICAgIH0sIHBhcnNlSW50KGRpc21pc3NPblRpbWVvdXQsIDEwKSk7XG4gIH1cbn1dKVxuXG4uZGlyZWN0aXZlKCd1aWJBbGVydCcsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIGNvbnRyb2xsZXI6ICdVaWJBbGVydENvbnRyb2xsZXInLFxuICAgIGNvbnRyb2xsZXJBczogJ2FsZXJ0JyxcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIHRlbXBsYXRlVXJsOiBmdW5jdGlvbihlbGVtZW50LCBhdHRycykge1xuICAgICAgcmV0dXJuIGF0dHJzLnRlbXBsYXRlVXJsIHx8ICd1aWIvdGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCc7XG4gICAgfSxcbiAgICB0cmFuc2NsdWRlOiB0cnVlLFxuICAgIHNjb3BlOiB7XG4gICAgICBjbG9zZTogJyYnXG4gICAgfVxuICB9O1xufSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAuYnV0dG9ucycsIFtdKVxuXG4uY29uc3RhbnQoJ3VpYkJ1dHRvbkNvbmZpZycsIHtcbiAgYWN0aXZlQ2xhc3M6ICdhY3RpdmUnLFxuICB0b2dnbGVFdmVudDogJ2NsaWNrJ1xufSlcblxuLmNvbnRyb2xsZXIoJ1VpYkJ1dHRvbnNDb250cm9sbGVyJywgWyd1aWJCdXR0b25Db25maWcnLCBmdW5jdGlvbihidXR0b25Db25maWcpIHtcbiAgdGhpcy5hY3RpdmVDbGFzcyA9IGJ1dHRvbkNvbmZpZy5hY3RpdmVDbGFzcyB8fCAnYWN0aXZlJztcbiAgdGhpcy50b2dnbGVFdmVudCA9IGJ1dHRvbkNvbmZpZy50b2dnbGVFdmVudCB8fCAnY2xpY2snO1xufV0pXG5cbi5kaXJlY3RpdmUoJ3VpYkJ0blJhZGlvJywgWyckcGFyc2UnLCBmdW5jdGlvbigkcGFyc2UpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1aXJlOiBbJ3VpYkJ0blJhZGlvJywgJ25nTW9kZWwnXSxcbiAgICBjb250cm9sbGVyOiAnVWliQnV0dG9uc0NvbnRyb2xsZXInLFxuICAgIGNvbnRyb2xsZXJBczogJ2J1dHRvbnMnLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMpIHtcbiAgICAgIHZhciBidXR0b25zQ3RybCA9IGN0cmxzWzBdLCBuZ01vZGVsQ3RybCA9IGN0cmxzWzFdO1xuICAgICAgdmFyIHVuY2hlY2thYmxlRXhwciA9ICRwYXJzZShhdHRycy51aWJVbmNoZWNrYWJsZSk7XG5cbiAgICAgIGVsZW1lbnQuZmluZCgnaW5wdXQnKS5jc3Moe2Rpc3BsYXk6ICdub25lJ30pO1xuXG4gICAgICAvL21vZGVsIC0+IFVJXG4gICAgICBuZ01vZGVsQ3RybC4kcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGVsZW1lbnQudG9nZ2xlQ2xhc3MoYnV0dG9uc0N0cmwuYWN0aXZlQ2xhc3MsIGFuZ3VsYXIuZXF1YWxzKG5nTW9kZWxDdHJsLiRtb2RlbFZhbHVlLCBzY29wZS4kZXZhbChhdHRycy51aWJCdG5SYWRpbykpKTtcbiAgICAgIH07XG5cbiAgICAgIC8vdWktPm1vZGVsXG4gICAgICBlbGVtZW50Lm9uKGJ1dHRvbnNDdHJsLnRvZ2dsZUV2ZW50LCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGF0dHJzLmRpc2FibGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGlzQWN0aXZlID0gZWxlbWVudC5oYXNDbGFzcyhidXR0b25zQ3RybC5hY3RpdmVDbGFzcyk7XG5cbiAgICAgICAgaWYgKCFpc0FjdGl2ZSB8fCBhbmd1bGFyLmlzRGVmaW5lZChhdHRycy51bmNoZWNrYWJsZSkpIHtcbiAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBuZ01vZGVsQ3RybC4kc2V0Vmlld1ZhbHVlKGlzQWN0aXZlID8gbnVsbCA6IHNjb3BlLiRldmFsKGF0dHJzLnVpYkJ0blJhZGlvKSk7XG4gICAgICAgICAgICBuZ01vZGVsQ3RybC4kcmVuZGVyKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYXR0cnMudWliVW5jaGVja2FibGUpIHtcbiAgICAgICAgc2NvcGUuJHdhdGNoKHVuY2hlY2thYmxlRXhwciwgZnVuY3Rpb24odW5jaGVja2FibGUpIHtcbiAgICAgICAgICBhdHRycy4kc2V0KCd1bmNoZWNrYWJsZScsIHVuY2hlY2thYmxlID8gJycgOiB1bmRlZmluZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XSlcblxuLmRpcmVjdGl2ZSgndWliQnRuQ2hlY2tib3gnLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1aXJlOiBbJ3VpYkJ0bkNoZWNrYm94JywgJ25nTW9kZWwnXSxcbiAgICBjb250cm9sbGVyOiAnVWliQnV0dG9uc0NvbnRyb2xsZXInLFxuICAgIGNvbnRyb2xsZXJBczogJ2J1dHRvbicsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBjdHJscykge1xuICAgICAgdmFyIGJ1dHRvbnNDdHJsID0gY3RybHNbMF0sIG5nTW9kZWxDdHJsID0gY3RybHNbMV07XG5cbiAgICAgIGVsZW1lbnQuZmluZCgnaW5wdXQnKS5jc3Moe2Rpc3BsYXk6ICdub25lJ30pO1xuXG4gICAgICBmdW5jdGlvbiBnZXRUcnVlVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBnZXRDaGVja2JveFZhbHVlKGF0dHJzLmJ0bkNoZWNrYm94VHJ1ZSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdldEZhbHNlVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBnZXRDaGVja2JveFZhbHVlKGF0dHJzLmJ0bkNoZWNrYm94RmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZ2V0Q2hlY2tib3hWYWx1ZShhdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYW5ndWxhci5pc0RlZmluZWQoYXR0cmlidXRlKSA/IHNjb3BlLiRldmFsKGF0dHJpYnV0ZSkgOiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vbW9kZWwgLT4gVUlcbiAgICAgIG5nTW9kZWxDdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZWxlbWVudC50b2dnbGVDbGFzcyhidXR0b25zQ3RybC5hY3RpdmVDbGFzcywgYW5ndWxhci5lcXVhbHMobmdNb2RlbEN0cmwuJG1vZGVsVmFsdWUsIGdldFRydWVWYWx1ZSgpKSk7XG4gICAgICB9O1xuXG4gICAgICAvL3VpLT5tb2RlbFxuICAgICAgZWxlbWVudC5vbihidXR0b25zQ3RybC50b2dnbGVFdmVudCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChhdHRycy5kaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICBuZ01vZGVsQ3RybC4kc2V0Vmlld1ZhbHVlKGVsZW1lbnQuaGFzQ2xhc3MoYnV0dG9uc0N0cmwuYWN0aXZlQ2xhc3MpID8gZ2V0RmFsc2VWYWx1ZSgpIDogZ2V0VHJ1ZVZhbHVlKCkpO1xuICAgICAgICAgIG5nTW9kZWxDdHJsLiRyZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59KTtcblxuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5jYXJvdXNlbCcsIFtdKVxuXG4uY29udHJvbGxlcignVWliQ2Fyb3VzZWxDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGVsZW1lbnQnLCAnJGludGVydmFsJywgJyR0aW1lb3V0JywgJyRhbmltYXRlJywgZnVuY3Rpb24oJHNjb3BlLCAkZWxlbWVudCwgJGludGVydmFsLCAkdGltZW91dCwgJGFuaW1hdGUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzLFxuICAgIHNsaWRlcyA9IHNlbGYuc2xpZGVzID0gJHNjb3BlLnNsaWRlcyA9IFtdLFxuICAgIFNMSURFX0RJUkVDVElPTiA9ICd1aWItc2xpZGVEaXJlY3Rpb24nLFxuICAgIGN1cnJlbnRJbmRleCA9ICRzY29wZS5hY3RpdmUsXG4gICAgY3VycmVudEludGVydmFsLCBpc1BsYXlpbmc7XG5cbiAgdmFyIGRlc3Ryb3llZCA9IGZhbHNlO1xuICAkZWxlbWVudC5hZGRDbGFzcygnY2Fyb3VzZWwnKTtcblxuICBzZWxmLmFkZFNsaWRlID0gZnVuY3Rpb24oc2xpZGUsIGVsZW1lbnQpIHtcbiAgICBzbGlkZXMucHVzaCh7XG4gICAgICBzbGlkZTogc2xpZGUsXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gICAgc2xpZGVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgcmV0dXJuICthLnNsaWRlLmluZGV4IC0gK2Iuc2xpZGUuaW5kZXg7XG4gICAgfSk7XG4gICAgLy9pZiB0aGlzIGlzIHRoZSBmaXJzdCBzbGlkZSBvciB0aGUgc2xpZGUgaXMgc2V0IHRvIGFjdGl2ZSwgc2VsZWN0IGl0XG4gICAgaWYgKHNsaWRlLmluZGV4ID09PSAkc2NvcGUuYWN0aXZlIHx8IHNsaWRlcy5sZW5ndGggPT09IDEgJiYgIWFuZ3VsYXIuaXNOdW1iZXIoJHNjb3BlLmFjdGl2ZSkpIHtcbiAgICAgIGlmICgkc2NvcGUuJGN1cnJlbnRUcmFuc2l0aW9uKSB7XG4gICAgICAgICRzY29wZS4kY3VycmVudFRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50SW5kZXggPSBzbGlkZS5pbmRleDtcbiAgICAgICRzY29wZS5hY3RpdmUgPSBzbGlkZS5pbmRleDtcbiAgICAgIHNldEFjdGl2ZShjdXJyZW50SW5kZXgpO1xuICAgICAgc2VsZi5zZWxlY3Qoc2xpZGVzW2ZpbmRTbGlkZUluZGV4KHNsaWRlKV0pO1xuICAgICAgaWYgKHNsaWRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgJHNjb3BlLnBsYXkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc2VsZi5nZXRDdXJyZW50SW5kZXggPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHNsaWRlc1tpXS5zbGlkZS5pbmRleCA9PT0gY3VycmVudEluZGV4KSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzZWxmLm5leHQgPSAkc2NvcGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuZXdJbmRleCA9IChzZWxmLmdldEN1cnJlbnRJbmRleCgpICsgMSkgJSBzbGlkZXMubGVuZ3RoO1xuXG4gICAgaWYgKG5ld0luZGV4ID09PSAwICYmICRzY29wZS5ub1dyYXAoKSkge1xuICAgICAgJHNjb3BlLnBhdXNlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGYuc2VsZWN0KHNsaWRlc1tuZXdJbmRleF0sICduZXh0Jyk7XG4gIH07XG5cbiAgc2VsZi5wcmV2ID0gJHNjb3BlLnByZXYgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbmV3SW5kZXggPSBzZWxmLmdldEN1cnJlbnRJbmRleCgpIC0gMSA8IDAgPyBzbGlkZXMubGVuZ3RoIC0gMSA6IHNlbGYuZ2V0Q3VycmVudEluZGV4KCkgLSAxO1xuXG4gICAgaWYgKCRzY29wZS5ub1dyYXAoKSAmJiBuZXdJbmRleCA9PT0gc2xpZGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICRzY29wZS5wYXVzZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxmLnNlbGVjdChzbGlkZXNbbmV3SW5kZXhdLCAncHJldicpO1xuICB9O1xuXG4gIHNlbGYucmVtb3ZlU2xpZGUgPSBmdW5jdGlvbihzbGlkZSkge1xuICAgIHZhciBpbmRleCA9IGZpbmRTbGlkZUluZGV4KHNsaWRlKTtcblxuICAgIC8vZ2V0IHRoZSBpbmRleCBvZiB0aGUgc2xpZGUgaW5zaWRlIHRoZSBjYXJvdXNlbFxuICAgIHNsaWRlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGlmIChzbGlkZXMubGVuZ3RoID4gMCAmJiBjdXJyZW50SW5kZXggPT09IGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPj0gc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICBjdXJyZW50SW5kZXggPSBzbGlkZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgJHNjb3BlLmFjdGl2ZSA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgc2V0QWN0aXZlKGN1cnJlbnRJbmRleCk7XG4gICAgICAgIHNlbGYuc2VsZWN0KHNsaWRlc1tzbGlkZXMubGVuZ3RoIC0gMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgICRzY29wZS5hY3RpdmUgPSBjdXJyZW50SW5kZXg7XG4gICAgICAgIHNldEFjdGl2ZShjdXJyZW50SW5kZXgpO1xuICAgICAgICBzZWxmLnNlbGVjdChzbGlkZXNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRJbmRleCA+IGluZGV4KSB7XG4gICAgICBjdXJyZW50SW5kZXgtLTtcbiAgICAgICRzY29wZS5hY3RpdmUgPSBjdXJyZW50SW5kZXg7XG4gICAgfVxuXG4gICAgLy9jbGVhbiB0aGUgYWN0aXZlIHZhbHVlIHdoZW4gbm8gbW9yZSBzbGlkZVxuICAgIGlmIChzbGlkZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjdXJyZW50SW5kZXggPSBudWxsO1xuICAgICAgJHNjb3BlLmFjdGl2ZSA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIC8qIGRpcmVjdGlvbjogXCJwcmV2XCIgb3IgXCJuZXh0XCIgKi9cbiAgc2VsZi5zZWxlY3QgPSAkc2NvcGUuc2VsZWN0ID0gZnVuY3Rpb24obmV4dFNsaWRlLCBkaXJlY3Rpb24pIHtcbiAgICB2YXIgbmV4dEluZGV4ID0gZmluZFNsaWRlSW5kZXgobmV4dFNsaWRlLnNsaWRlKTtcbiAgICAvL0RlY2lkZSBkaXJlY3Rpb24gaWYgaXQncyBub3QgZ2l2ZW5cbiAgICBpZiAoZGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRpcmVjdGlvbiA9IG5leHRJbmRleCA+IHNlbGYuZ2V0Q3VycmVudEluZGV4KCkgPyAnbmV4dCcgOiAncHJldic7XG4gICAgfVxuICAgIC8vUHJldmVudCB0aGlzIHVzZXItdHJpZ2dlcmVkIHRyYW5zaXRpb24gZnJvbSBvY2N1cnJpbmcgaWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUgaW4gcHJvZ3Jlc3NcbiAgICBpZiAobmV4dFNsaWRlLnNsaWRlLmluZGV4ICE9PSBjdXJyZW50SW5kZXggJiZcbiAgICAgICEkc2NvcGUuJGN1cnJlbnRUcmFuc2l0aW9uKSB7XG4gICAgICBnb05leHQobmV4dFNsaWRlLnNsaWRlLCBuZXh0SW5kZXgsIGRpcmVjdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIC8qIEFsbG93IG91dHNpZGUgcGVvcGxlIHRvIGNhbGwgaW5kZXhPZiBvbiBzbGlkZXMgYXJyYXkgKi9cbiAgJHNjb3BlLmluZGV4T2ZTbGlkZSA9IGZ1bmN0aW9uKHNsaWRlKSB7XG4gICAgcmV0dXJuICtzbGlkZS5zbGlkZS5pbmRleDtcbiAgfTtcblxuICAkc2NvcGUuaXNBY3RpdmUgPSBmdW5jdGlvbihzbGlkZSkge1xuICAgIHJldHVybiAkc2NvcGUuYWN0aXZlID09PSBzbGlkZS5zbGlkZS5pbmRleDtcbiAgfTtcblxuICAkc2NvcGUuaXNQcmV2RGlzYWJsZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHNjb3BlLmFjdGl2ZSA9PT0gMCAmJiAkc2NvcGUubm9XcmFwKCk7XG4gIH07XG5cbiAgJHNjb3BlLmlzTmV4dERpc2FibGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICRzY29wZS5hY3RpdmUgPT09IHNsaWRlcy5sZW5ndGggLSAxICYmICRzY29wZS5ub1dyYXAoKTtcbiAgfTtcblxuICAkc2NvcGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoISRzY29wZS5ub1BhdXNlKSB7XG4gICAgICBpc1BsYXlpbmcgPSBmYWxzZTtcbiAgICAgIHJlc2V0VGltZXIoKTtcbiAgICB9XG4gIH07XG5cbiAgJHNjb3BlLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIWlzUGxheWluZykge1xuICAgICAgaXNQbGF5aW5nID0gdHJ1ZTtcbiAgICAgIHJlc3RhcnRUaW1lcigpO1xuICAgIH1cbiAgfTtcblxuICAkZWxlbWVudC5vbignbW91c2VlbnRlcicsICRzY29wZS5wYXVzZSk7XG4gICRlbGVtZW50Lm9uKCdtb3VzZWxlYXZlJywgJHNjb3BlLnBsYXkpO1xuXG4gICRzY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgZGVzdHJveWVkID0gdHJ1ZTtcbiAgICByZXNldFRpbWVyKCk7XG4gIH0pO1xuXG4gICRzY29wZS4kd2F0Y2goJ25vVHJhbnNpdGlvbicsIGZ1bmN0aW9uKG5vVHJhbnNpdGlvbikge1xuICAgICRhbmltYXRlLmVuYWJsZWQoJGVsZW1lbnQsICFub1RyYW5zaXRpb24pO1xuICB9KTtcblxuICAkc2NvcGUuJHdhdGNoKCdpbnRlcnZhbCcsIHJlc3RhcnRUaW1lcik7XG5cbiAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ3NsaWRlcycsIHJlc2V0VHJhbnNpdGlvbik7XG5cbiAgJHNjb3BlLiR3YXRjaCgnYWN0aXZlJywgZnVuY3Rpb24oaW5kZXgpIHtcbiAgICBpZiAoYW5ndWxhci5pc051bWJlcihpbmRleCkgJiYgY3VycmVudEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNsaWRlc1tpXS5zbGlkZS5pbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlID0gc2xpZGVzW2luZGV4XTtcbiAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICBzZXRBY3RpdmUoaW5kZXgpO1xuICAgICAgICBzZWxmLnNlbGVjdChzbGlkZXNbaW5kZXhdKTtcbiAgICAgICAgY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBnZXRTbGlkZUJ5SW5kZXgoaW5kZXgpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNsaWRlcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgIGlmIChzbGlkZXNbaV0uaW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgIHJldHVybiBzbGlkZXNbaV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0QWN0aXZlKGluZGV4KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNsaWRlc1tpXS5zbGlkZS5hY3RpdmUgPSBpID09PSBpbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnb05leHQoc2xpZGUsIGluZGV4LCBkaXJlY3Rpb24pIHtcbiAgICBpZiAoZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYW5ndWxhci5leHRlbmQoc2xpZGUsIHtkaXJlY3Rpb246IGRpcmVjdGlvbn0pO1xuICAgIGFuZ3VsYXIuZXh0ZW5kKHNsaWRlc1tjdXJyZW50SW5kZXhdLnNsaWRlIHx8IHt9LCB7ZGlyZWN0aW9uOiBkaXJlY3Rpb259KTtcbiAgICBpZiAoJGFuaW1hdGUuZW5hYmxlZCgkZWxlbWVudCkgJiYgISRzY29wZS4kY3VycmVudFRyYW5zaXRpb24gJiZcbiAgICAgIHNsaWRlc1tpbmRleF0uZWxlbWVudCAmJiBzZWxmLnNsaWRlcy5sZW5ndGggPiAxKSB7XG4gICAgICBzbGlkZXNbaW5kZXhdLmVsZW1lbnQuZGF0YShTTElERV9ESVJFQ1RJT04sIHNsaWRlLmRpcmVjdGlvbik7XG4gICAgICB2YXIgY3VycmVudElkeCA9IHNlbGYuZ2V0Q3VycmVudEluZGV4KCk7XG5cbiAgICAgIGlmIChhbmd1bGFyLmlzTnVtYmVyKGN1cnJlbnRJZHgpICYmIHNsaWRlc1tjdXJyZW50SWR4XS5lbGVtZW50KSB7XG4gICAgICAgIHNsaWRlc1tjdXJyZW50SWR4XS5lbGVtZW50LmRhdGEoU0xJREVfRElSRUNUSU9OLCBzbGlkZS5kaXJlY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICAkc2NvcGUuJGN1cnJlbnRUcmFuc2l0aW9uID0gdHJ1ZTtcbiAgICAgICRhbmltYXRlLm9uKCdhZGRDbGFzcycsIHNsaWRlc1tpbmRleF0uZWxlbWVudCwgZnVuY3Rpb24oZWxlbWVudCwgcGhhc2UpIHtcbiAgICAgICAgaWYgKHBoYXNlID09PSAnY2xvc2UnKSB7XG4gICAgICAgICAgJHNjb3BlLiRjdXJyZW50VHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgICAgJGFuaW1hdGUub2ZmKCdhZGRDbGFzcycsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAkc2NvcGUuYWN0aXZlID0gc2xpZGUuaW5kZXg7XG4gICAgY3VycmVudEluZGV4ID0gc2xpZGUuaW5kZXg7XG4gICAgc2V0QWN0aXZlKGluZGV4KTtcblxuICAgIC8vZXZlcnkgdGltZSB5b3UgY2hhbmdlIHNsaWRlcywgcmVzZXQgdGhlIHRpbWVyXG4gICAgcmVzdGFydFRpbWVyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kU2xpZGVJbmRleChzbGlkZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc2xpZGVzW2ldLnNsaWRlID09PSBzbGlkZSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRpbWVyKCkge1xuICAgIGlmIChjdXJyZW50SW50ZXJ2YWwpIHtcbiAgICAgICRpbnRlcnZhbC5jYW5jZWwoY3VycmVudEludGVydmFsKTtcbiAgICAgIGN1cnJlbnRJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcmFuc2l0aW9uKHNsaWRlcykge1xuICAgIGlmICghc2xpZGVzLmxlbmd0aCkge1xuICAgICAgJHNjb3BlLiRjdXJyZW50VHJhbnNpdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdGFydFRpbWVyKCkge1xuICAgIHJlc2V0VGltZXIoKTtcbiAgICB2YXIgaW50ZXJ2YWwgPSArJHNjb3BlLmludGVydmFsO1xuICAgIGlmICghaXNOYU4oaW50ZXJ2YWwpICYmIGludGVydmFsID4gMCkge1xuICAgICAgY3VycmVudEludGVydmFsID0gJGludGVydmFsKHRpbWVyRm4sIGludGVydmFsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0aW1lckZuKCkge1xuICAgIHZhciBpbnRlcnZhbCA9ICskc2NvcGUuaW50ZXJ2YWw7XG4gICAgaWYgKGlzUGxheWluZyAmJiAhaXNOYU4oaW50ZXJ2YWwpICYmIGludGVydmFsID4gMCAmJiBzbGlkZXMubGVuZ3RoKSB7XG4gICAgICAkc2NvcGUubmV4dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkc2NvcGUucGF1c2UoKTtcbiAgICB9XG4gIH1cbn1dKVxuXG4uZGlyZWN0aXZlKCd1aWJDYXJvdXNlbCcsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHRyYW5zY2x1ZGU6IHRydWUsXG4gICAgY29udHJvbGxlcjogJ1VpYkNhcm91c2VsQ29udHJvbGxlcicsXG4gICAgY29udHJvbGxlckFzOiAnY2Fyb3VzZWwnLFxuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgdGVtcGxhdGVVcmw6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICByZXR1cm4gYXR0cnMudGVtcGxhdGVVcmwgfHwgJ3VpYi90ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sJztcbiAgICB9LFxuICAgIHNjb3BlOiB7XG4gICAgICBhY3RpdmU6ICc9JyxcbiAgICAgIGludGVydmFsOiAnPScsXG4gICAgICBub1RyYW5zaXRpb246ICc9JyxcbiAgICAgIG5vUGF1c2U6ICc9JyxcbiAgICAgIG5vV3JhcDogJyYnXG4gICAgfVxuICB9O1xufSlcblxuLmRpcmVjdGl2ZSgndWliU2xpZGUnLCBbJyRhbmltYXRlJywgZnVuY3Rpb24oJGFuaW1hdGUpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1aXJlOiAnXnVpYkNhcm91c2VsJyxcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIHRyYW5zY2x1ZGU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICByZXR1cm4gYXR0cnMudGVtcGxhdGVVcmwgfHwgJ3VpYi90ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sJztcbiAgICB9LFxuICAgIHNjb3BlOiB7XG4gICAgICBhY3R1YWw6ICc9PycsXG4gICAgICBpbmRleDogJz0/J1xuICAgIH0sXG4gICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY2Fyb3VzZWxDdHJsKSB7XG4gICAgICBlbGVtZW50LmFkZENsYXNzKCdpdGVtJyk7XG4gICAgICBjYXJvdXNlbEN0cmwuYWRkU2xpZGUoc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgLy93aGVuIHRoZSBzY29wZSBpcyBkZXN0cm95ZWQgdGhlbiByZW1vdmUgdGhlIHNsaWRlIGZyb20gdGhlIGN1cnJlbnQgc2xpZGVzIGFycmF5XG4gICAgICBzY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhcm91c2VsQ3RybC5yZW1vdmVTbGlkZShzY29wZSk7XG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuJHdhdGNoKCdhY3RpdmUnLCBmdW5jdGlvbihhY3RpdmUpIHtcbiAgICAgICAgJGFuaW1hdGVbYWN0aXZlID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKGVsZW1lbnQsICdhY3RpdmUnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1dKVxuXG4uYW5pbWF0aW9uKCcuaXRlbScsIFsnJGFuaW1hdGVDc3MnLFxuZnVuY3Rpb24oJGFuaW1hdGVDc3MpIHtcbiAgdmFyIFNMSURFX0RJUkVDVElPTiA9ICd1aWItc2xpZGVEaXJlY3Rpb24nO1xuXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSwgY2FsbGJhY2spIHtcbiAgICBlbGVtZW50LnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmVmb3JlQWRkQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSwgZG9uZSkge1xuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgdmFyIHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGVsZW1lbnQuZGF0YShTTElERV9ESVJFQ1RJT04pO1xuICAgICAgICB2YXIgZGlyZWN0aW9uQ2xhc3MgPSBkaXJlY3Rpb24gPT09ICduZXh0JyA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICAgIHZhciByZW1vdmVDbGFzc0ZuID0gcmVtb3ZlQ2xhc3MuYmluZCh0aGlzLCBlbGVtZW50LFxuICAgICAgICAgIGRpcmVjdGlvbkNsYXNzICsgJyAnICsgZGlyZWN0aW9uLCBkb25lKTtcbiAgICAgICAgZWxlbWVudC5hZGRDbGFzcyhkaXJlY3Rpb24pO1xuXG4gICAgICAgICRhbmltYXRlQ3NzKGVsZW1lbnQsIHthZGRDbGFzczogZGlyZWN0aW9uQ2xhc3N9KVxuICAgICAgICAgIC5zdGFydCgpXG4gICAgICAgICAgLmRvbmUocmVtb3ZlQ2xhc3NGbik7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZG9uZSgpO1xuICAgIH0sXG4gICAgYmVmb3JlUmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc05hbWUsIGRvbmUpIHtcbiAgICAgIGlmIChjbGFzc05hbWUgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgIHZhciBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBlbGVtZW50LmRhdGEoU0xJREVfRElSRUNUSU9OKTtcbiAgICAgICAgdmFyIGRpcmVjdGlvbkNsYXNzID0gZGlyZWN0aW9uID09PSAnbmV4dCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgICB2YXIgcmVtb3ZlQ2xhc3NGbiA9IHJlbW92ZUNsYXNzLmJpbmQodGhpcywgZWxlbWVudCwgZGlyZWN0aW9uQ2xhc3MsIGRvbmUpO1xuXG4gICAgICAgICRhbmltYXRlQ3NzKGVsZW1lbnQsIHthZGRDbGFzczogZGlyZWN0aW9uQ2xhc3N9KVxuICAgICAgICAgIC5zdGFydCgpXG4gICAgICAgICAgLmRvbmUocmVtb3ZlQ2xhc3NGbik7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgfTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5kYXRlcGFyc2VyJywgW10pXG5cbi5zZXJ2aWNlKCd1aWJEYXRlUGFyc2VyJywgWyckbG9nJywgJyRsb2NhbGUnLCAnZGF0ZUZpbHRlcicsICdvcmRlckJ5RmlsdGVyJywgJ2ZpbHRlckZpbHRlcicsIGZ1bmN0aW9uKCRsb2csICRsb2NhbGUsIGRhdGVGaWx0ZXIsIG9yZGVyQnlGaWx0ZXIsIGZpbHRlckZpbHRlcikge1xuICAvLyBQdWxsZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWJvc3RvY2svZDMvYmxvYi9tYXN0ZXIvc3JjL2Zvcm1hdC9yZXF1b3RlLmpzXG4gIHZhciBTUEVDSUFMX0NIQVJBQ1RFUlNfUkVHRVhQID0gL1tcXFxcXFxeXFwkXFwqXFwrXFw/XFx8XFxbXFxdXFwoXFwpXFwuXFx7XFx9XS9nO1xuXG4gIHZhciBsb2NhbGVJZDtcbiAgdmFyIGZvcm1hdENvZGVUb1JlZ2V4O1xuXG4gIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGxvY2FsZUlkID0gJGxvY2FsZS5pZDtcblxuICAgIHRoaXMucGFyc2VycyA9IHt9O1xuICAgIHRoaXMuZm9ybWF0dGVycyA9IHt9O1xuXG4gICAgZm9ybWF0Q29kZVRvUmVnZXggPSBbXG4gICAgICB7XG4gICAgICAgIGtleTogJ3l5eXknLFxuICAgICAgICByZWdleDogJ1xcXFxkezR9JyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMueWVhciA9ICt2YWx1ZTsgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICAgICAgdmFyIF9kYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICBfZGF0ZS5zZXRGdWxsWWVhcihNYXRoLmFicyhkYXRlLmdldEZ1bGxZZWFyKCkpKTtcbiAgICAgICAgICByZXR1cm4gZGF0ZUZpbHRlcihfZGF0ZSwgJ3l5eXknKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAneXknLFxuICAgICAgICByZWdleDogJ1xcXFxkezJ9JyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHZhbHVlID0gK3ZhbHVlOyB0aGlzLnllYXIgPSB2YWx1ZSA8IDY5ID8gdmFsdWUgKyAyMDAwIDogdmFsdWUgKyAxOTAwOyB9LFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgICAgICB2YXIgX2RhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgIF9kYXRlLnNldEZ1bGxZZWFyKE1hdGguYWJzKGRhdGUuZ2V0RnVsbFllYXIoKSkpO1xuICAgICAgICAgIHJldHVybiBkYXRlRmlsdGVyKF9kYXRlLCAneXknKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAneScsXG4gICAgICAgIHJlZ2V4OiAnXFxcXGR7MSw0fScsXG4gICAgICAgIGFwcGx5OiBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLnllYXIgPSArdmFsdWU7IH0sXG4gICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgICAgIHZhciBfZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgX2RhdGUuc2V0RnVsbFllYXIoTWF0aC5hYnMoZGF0ZS5nZXRGdWxsWWVhcigpKSk7XG4gICAgICAgICAgcmV0dXJuIGRhdGVGaWx0ZXIoX2RhdGUsICd5Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ00hJyxcbiAgICAgICAgcmVnZXg6ICcwP1sxLTldfDFbMC0yXScsXG4gICAgICAgIGFwcGx5OiBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLm1vbnRoID0gdmFsdWUgLSAxOyB9LFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgaWYgKC9eWzAtOV0kLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ01NJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ00nKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnTU1NTScsXG4gICAgICAgIHJlZ2V4OiAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFMuTU9OVEguam9pbignfCcpLFxuICAgICAgICBhcHBseTogZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5tb250aCA9ICRsb2NhbGUuREFURVRJTUVfRk9STUFUUy5NT05USC5pbmRleE9mKHZhbHVlKTsgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICdNTU1NJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ01NTScsXG4gICAgICAgIHJlZ2V4OiAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFMuU0hPUlRNT05USC5qb2luKCd8JyksXG4gICAgICAgIGFwcGx5OiBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLm1vbnRoID0gJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguaW5kZXhPZih2YWx1ZSk7IH0sXG4gICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oZGF0ZSkgeyByZXR1cm4gZGF0ZUZpbHRlcihkYXRlLCAnTU1NJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ01NJyxcbiAgICAgICAgcmVnZXg6ICcwWzEtOV18MVswLTJdJyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMubW9udGggPSB2YWx1ZSAtIDE7IH0sXG4gICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oZGF0ZSkgeyByZXR1cm4gZGF0ZUZpbHRlcihkYXRlLCAnTU0nKTsgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnTScsXG4gICAgICAgIHJlZ2V4OiAnWzEtOV18MVswLTJdJyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMubW9udGggPSB2YWx1ZSAtIDE7IH0sXG4gICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oZGF0ZSkgeyByZXR1cm4gZGF0ZUZpbHRlcihkYXRlLCAnTScpOyB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdkIScsXG4gICAgICAgIHJlZ2V4OiAnWzAtMl0/WzAtOV17MX18M1swLTFdezF9JyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuZGF0ZSA9ICt2YWx1ZTsgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgICAgaWYgKC9eWzEtOV0kLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ2RkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ2QnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZGQnLFxuICAgICAgICByZWdleDogJ1swLTJdWzAtOV17MX18M1swLTFdezF9JyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuZGF0ZSA9ICt2YWx1ZTsgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICdkZCcpOyB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdkJyxcbiAgICAgICAgcmVnZXg6ICdbMS0yXT9bMC05XXsxfXwzWzAtMV17MX0nLFxuICAgICAgICBhcHBseTogZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5kYXRlID0gK3ZhbHVlOyB9LFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ2QnKTsgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnRUVFRScsXG4gICAgICAgIHJlZ2V4OiAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFMuREFZLmpvaW4oJ3wnKSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICdFRUVFJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ0VFRScsXG4gICAgICAgIHJlZ2V4OiAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFMuU0hPUlREQVkuam9pbignfCcpLFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ0VFRScpOyB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdISCcsXG4gICAgICAgIHJlZ2V4OiAnKD86MHwxKVswLTldfDJbMC0zXScsXG4gICAgICAgIGFwcGx5OiBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLmhvdXJzID0gK3ZhbHVlOyB9LFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ0hIJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2hoJyxcbiAgICAgICAgcmVnZXg6ICcwWzAtOV18MVswLTJdJyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuaG91cnMgPSArdmFsdWU7IH0sXG4gICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oZGF0ZSkgeyByZXR1cm4gZGF0ZUZpbHRlcihkYXRlLCAnaGgnKTsgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnSCcsXG4gICAgICAgIHJlZ2V4OiAnMT9bMC05XXwyWzAtM10nLFxuICAgICAgICBhcHBseTogZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5ob3VycyA9ICt2YWx1ZTsgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICdIJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2gnLFxuICAgICAgICByZWdleDogJ1swLTldfDFbMC0yXScsXG4gICAgICAgIGFwcGx5OiBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLmhvdXJzID0gK3ZhbHVlOyB9LFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ2gnKTsgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnbW0nLFxuICAgICAgICByZWdleDogJ1swLTVdWzAtOV0nLFxuICAgICAgICBhcHBseTogZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5taW51dGVzID0gK3ZhbHVlOyB9LFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ21tJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ20nLFxuICAgICAgICByZWdleDogJ1swLTldfFsxLTVdWzAtOV0nLFxuICAgICAgICBhcHBseTogZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5taW51dGVzID0gK3ZhbHVlOyB9LFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ20nKTsgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnc3NzJyxcbiAgICAgICAgcmVnZXg6ICdbMC05XVswLTldWzAtOV0nLFxuICAgICAgICBhcHBseTogZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5taWxsaXNlY29uZHMgPSArdmFsdWU7IH0sXG4gICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oZGF0ZSkgeyByZXR1cm4gZGF0ZUZpbHRlcihkYXRlLCAnc3NzJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3NzJyxcbiAgICAgICAgcmVnZXg6ICdbMC01XVswLTldJyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuc2Vjb25kcyA9ICt2YWx1ZTsgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICdzcycpOyB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdzJyxcbiAgICAgICAgcmVnZXg6ICdbMC05XXxbMS01XVswLTldJyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuc2Vjb25kcyA9ICt2YWx1ZTsgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICdzJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2EnLFxuICAgICAgICByZWdleDogJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTLkFNUE1TLmpvaW4oJ3wnKSxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaG91cnMgPT09IDEyKSB7XG4gICAgICAgICAgICB0aGlzLmhvdXJzID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICdQTScpIHtcbiAgICAgICAgICAgIHRoaXMuaG91cnMgKz0gMTI7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ2EnKTsgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnWicsXG4gICAgICAgIHJlZ2V4OiAnWystXVxcXFxkezR9JyxcbiAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIG1hdGNoZXMgPSB2YWx1ZS5tYXRjaCgvKFsrLV0pKFxcZHsyfSkoXFxkezJ9KS8pLFxuICAgICAgICAgICAgc2lnbiA9IG1hdGNoZXNbMV0sXG4gICAgICAgICAgICBob3VycyA9IG1hdGNoZXNbMl0sXG4gICAgICAgICAgICBtaW51dGVzID0gbWF0Y2hlc1szXTtcbiAgICAgICAgICB0aGlzLmhvdXJzICs9IHRvSW50KHNpZ24gKyBob3Vycyk7XG4gICAgICAgICAgdGhpcy5taW51dGVzICs9IHRvSW50KHNpZ24gKyBtaW51dGVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ1onKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnd3cnLFxuICAgICAgICByZWdleDogJ1swLTRdWzAtOV18NVswLTNdJyxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICd3dycpOyB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3JyxcbiAgICAgICAgcmVnZXg6ICdbMC05XXxbMS00XVswLTldfDVbMC0zXScsXG4gICAgICAgIGZvcm1hdHRlcjogZnVuY3Rpb24oZGF0ZSkgeyByZXR1cm4gZGF0ZUZpbHRlcihkYXRlLCAndycpOyB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdHR0dHJyxcbiAgICAgICAgcmVnZXg6ICRsb2NhbGUuREFURVRJTUVfRk9STUFUUy5FUkFOQU1FUy5qb2luKCd8JykucmVwbGFjZSgvXFxzL2csICdcXFxccycpLFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ0dHR0cnKTsgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnR0dHJyxcbiAgICAgICAgcmVnZXg6ICRsb2NhbGUuREFURVRJTUVfRk9STUFUUy5FUkFTLmpvaW4oJ3wnKSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICdHR0cnKTsgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnR0cnLFxuICAgICAgICByZWdleDogJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTLkVSQVMuam9pbignfCcpLFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ0dHJyk7IH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ0cnLFxuICAgICAgICByZWdleDogJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTLkVSQVMuam9pbignfCcpLFxuICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKGRhdGUpIHsgcmV0dXJuIGRhdGVGaWx0ZXIoZGF0ZSwgJ0cnKTsgfVxuICAgICAgfVxuICAgIF07XG5cbiAgICBpZiAoYW5ndWxhci52ZXJzaW9uLm1ham9yID49IDEgJiYgYW5ndWxhci52ZXJzaW9uLm1pbm9yID4gNCkge1xuICAgICAgZm9ybWF0Q29kZVRvUmVnZXgucHVzaCh7XG4gICAgICAgIGtleTogJ0xMTEwnLFxuICAgICAgICByZWdleDogJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTLlNUQU5EQUxPTkVNT05USC5qb2luKCd8JyksXG4gICAgICAgIGFwcGx5OiBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLm1vbnRoID0gJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTLlNUQU5EQUxPTkVNT05USC5pbmRleE9mKHZhbHVlKTsgfSxcbiAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbihkYXRlKSB7IHJldHVybiBkYXRlRmlsdGVyKGRhdGUsICdMTExMJyk7IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmluaXQoKTtcblxuICBmdW5jdGlvbiBnZXRGb3JtYXRDb2RlVG9SZWdleChrZXkpIHtcbiAgICByZXR1cm4gZmlsdGVyRmlsdGVyKGZvcm1hdENvZGVUb1JlZ2V4LCB7a2V5OiBrZXl9LCB0cnVlKVswXTtcbiAgfVxuXG4gIHRoaXMuZ2V0UGFyc2VyID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBmID0gZ2V0Rm9ybWF0Q29kZVRvUmVnZXgoa2V5KTtcbiAgICByZXR1cm4gZiAmJiBmLmFwcGx5IHx8IG51bGw7XG4gIH07XG5cbiAgdGhpcy5vdmVycmlkZVBhcnNlciA9IGZ1bmN0aW9uIChrZXksIHBhcnNlcikge1xuICAgIHZhciBmID0gZ2V0Rm9ybWF0Q29kZVRvUmVnZXgoa2V5KTtcbiAgICBpZiAoZiAmJiBhbmd1bGFyLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgdGhpcy5wYXJzZXJzID0ge307XG4gICAgICBmLmFwcGx5ID0gcGFyc2VyO1xuICAgIH1cbiAgfS5iaW5kKHRoaXMpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhcnNlcihmb3JtYXQpIHtcbiAgICB2YXIgbWFwID0gW10sIHJlZ2V4ID0gZm9ybWF0LnNwbGl0KCcnKTtcblxuICAgIC8vIGNoZWNrIGZvciBsaXRlcmFsIHZhbHVlc1xuICAgIHZhciBxdW90ZUluZGV4ID0gZm9ybWF0LmluZGV4T2YoJ1xcJycpO1xuICAgIGlmIChxdW90ZUluZGV4ID4gLTEpIHtcbiAgICAgIHZhciBpbkxpdGVyYWwgPSBmYWxzZTtcbiAgICAgIGZvcm1hdCA9IGZvcm1hdC5zcGxpdCgnJyk7XG4gICAgICBmb3IgKHZhciBpID0gcXVvdGVJbmRleDsgaSA8IGZvcm1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5MaXRlcmFsKSB7XG4gICAgICAgICAgaWYgKGZvcm1hdFtpXSA9PT0gJ1xcJycpIHtcbiAgICAgICAgICAgIGlmIChpICsgMSA8IGZvcm1hdC5sZW5ndGggJiYgZm9ybWF0W2krMV0gPT09ICdcXCcnKSB7IC8vIGVzY2FwZWQgc2luZ2xlIHF1b3RlXG4gICAgICAgICAgICAgIGZvcm1hdFtpKzFdID0gJyQnO1xuICAgICAgICAgICAgICByZWdleFtpKzFdID0gJyc7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBlbmQgb2YgbGl0ZXJhbFxuICAgICAgICAgICAgICByZWdleFtpXSA9ICcnO1xuICAgICAgICAgICAgICBpbkxpdGVyYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9ybWF0W2ldID0gJyQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmb3JtYXRbaV0gPT09ICdcXCcnKSB7IC8vIHN0YXJ0IG9mIGxpdGVyYWxcbiAgICAgICAgICAgIGZvcm1hdFtpXSA9ICckJztcbiAgICAgICAgICAgIHJlZ2V4W2ldID0gJyc7XG4gICAgICAgICAgICBpbkxpdGVyYWwgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3JtYXQgPSBmb3JtYXQuam9pbignJyk7XG4gICAgfVxuXG4gICAgYW5ndWxhci5mb3JFYWNoKGZvcm1hdENvZGVUb1JlZ2V4LCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXIgaW5kZXggPSBmb3JtYXQuaW5kZXhPZihkYXRhLmtleSk7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdC5zcGxpdCgnJyk7XG5cbiAgICAgICAgcmVnZXhbaW5kZXhdID0gJygnICsgZGF0YS5yZWdleCArICcpJztcbiAgICAgICAgZm9ybWF0W2luZGV4XSA9ICckJzsgLy8gQ3VzdG9tIHN5bWJvbCB0byBkZWZpbmUgY29uc3VtZWQgcGFydCBvZiBmb3JtYXRcbiAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4ICsgMSwgbiA9IGluZGV4ICsgZGF0YS5rZXkubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcmVnZXhbaV0gPSAnJztcbiAgICAgICAgICBmb3JtYXRbaV0gPSAnJCc7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0LmpvaW4oJycpO1xuXG4gICAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAga2V5OiBkYXRhLmtleSxcbiAgICAgICAgICBhcHBseTogZGF0YS5hcHBseSxcbiAgICAgICAgICBtYXRjaGVyOiBkYXRhLnJlZ2V4XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKCdeJyArIHJlZ2V4LmpvaW4oJycpICsgJyQnKSxcbiAgICAgIG1hcDogb3JkZXJCeUZpbHRlcihtYXAsICdpbmRleCcpXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlcihmb3JtYXQpIHtcbiAgICB2YXIgZm9ybWF0dGVycyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgZm9ybWF0dGVyLCBsaXRlcmFsSWR4O1xuICAgIHdoaWxlIChpIDwgZm9ybWF0Lmxlbmd0aCkge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNOdW1iZXIobGl0ZXJhbElkeCkpIHtcbiAgICAgICAgaWYgKGZvcm1hdC5jaGFyQXQoaSkgPT09ICdcXCcnKSB7XG4gICAgICAgICAgaWYgKGkgKyAxID49IGZvcm1hdC5sZW5ndGggfHwgZm9ybWF0LmNoYXJBdChpICsgMSkgIT09ICdcXCcnKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZXJzLnB1c2goY29uc3RydWN0TGl0ZXJhbEZvcm1hdHRlcihmb3JtYXQsIGxpdGVyYWxJZHgsIGkpKTtcbiAgICAgICAgICAgIGxpdGVyYWxJZHggPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBmb3JtYXQubGVuZ3RoKSB7XG4gICAgICAgICAgd2hpbGUgKGxpdGVyYWxJZHggPCBmb3JtYXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZXIgPSBjb25zdHJ1Y3RGb3JtYXR0ZXJGcm9tSWR4KGZvcm1hdCwgbGl0ZXJhbElkeCk7XG4gICAgICAgICAgICBmb3JtYXR0ZXJzLnB1c2goZm9ybWF0dGVyKTtcbiAgICAgICAgICAgIGxpdGVyYWxJZHggPSBmb3JtYXR0ZXIuZW5kSWR4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQuY2hhckF0KGkpID09PSAnXFwnJykge1xuICAgICAgICBsaXRlcmFsSWR4ID0gaTtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9ybWF0dGVyID0gY29uc3RydWN0Rm9ybWF0dGVyRnJvbUlkeChmb3JtYXQsIGkpO1xuXG4gICAgICBmb3JtYXR0ZXJzLnB1c2goZm9ybWF0dGVyLnBhcnNlcik7XG4gICAgICBpID0gZm9ybWF0dGVyLmVuZElkeDtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVycztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN0cnVjdExpdGVyYWxGb3JtYXR0ZXIoZm9ybWF0LCBsaXRlcmFsSWR4LCBlbmRJZHgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZm9ybWF0LnN1YnN0cihsaXRlcmFsSWR4ICsgMSwgZW5kSWR4IC0gbGl0ZXJhbElkeCAtIDEpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdHJ1Y3RGb3JtYXR0ZXJGcm9tSWR4KGZvcm1hdCwgaSkge1xuICAgIHZhciBjdXJyZW50UG9zU3RyID0gZm9ybWF0LnN1YnN0cihpKTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvcm1hdENvZGVUb1JlZ2V4Lmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAobmV3IFJlZ0V4cCgnXicgKyBmb3JtYXRDb2RlVG9SZWdleFtqXS5rZXkpLnRlc3QoY3VycmVudFBvc1N0cikpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBmb3JtYXRDb2RlVG9SZWdleFtqXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmRJZHg6IGkgKyBkYXRhLmtleS5sZW5ndGgsXG4gICAgICAgICAgcGFyc2VyOiBkYXRhLmZvcm1hdHRlclxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbmRJZHg6IGkgKyAxLFxuICAgICAgcGFyc2VyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NTdHIuY2hhckF0KDApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB0aGlzLmZpbHRlciA9IGZ1bmN0aW9uKGRhdGUsIGZvcm1hdCkge1xuICAgIGlmICghYW5ndWxhci5pc0RhdGUoZGF0ZSkgfHwgaXNOYU4oZGF0ZSkgfHwgIWZvcm1hdCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZvcm1hdCA9ICRsb2NhbGUuREFURVRJTUVfRk9STUFUU1tmb3JtYXRdIHx8IGZvcm1hdDtcblxuICAgIGlmICgkbG9jYWxlLmlkICE9PSBsb2NhbGVJZCkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZvcm1hdHRlcnNbZm9ybWF0XSkge1xuICAgICAgdGhpcy5mb3JtYXR0ZXJzW2Zvcm1hdF0gPSBjcmVhdGVGb3JtYXR0ZXIoZm9ybWF0KTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0dGVycyA9IHRoaXMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXG4gICAgcmV0dXJuIGZvcm1hdHRlcnMucmVkdWNlKGZ1bmN0aW9uKHN0ciwgZm9ybWF0dGVyKSB7XG4gICAgICByZXR1cm4gc3RyICsgZm9ybWF0dGVyKGRhdGUpO1xuICAgIH0sICcnKTtcbiAgfTtcblxuICB0aGlzLnBhcnNlID0gZnVuY3Rpb24oaW5wdXQsIGZvcm1hdCwgYmFzZURhdGUpIHtcbiAgICBpZiAoIWFuZ3VsYXIuaXNTdHJpbmcoaW5wdXQpIHx8ICFmb3JtYXQpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBmb3JtYXQgPSAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFNbZm9ybWF0XSB8fCBmb3JtYXQ7XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoU1BFQ0lBTF9DSEFSQUNURVJTX1JFR0VYUCwgJ1xcXFwkJicpO1xuXG4gICAgaWYgKCRsb2NhbGUuaWQgIT09IGxvY2FsZUlkKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucGFyc2Vyc1tmb3JtYXRdKSB7XG4gICAgICB0aGlzLnBhcnNlcnNbZm9ybWF0XSA9IGNyZWF0ZVBhcnNlcihmb3JtYXQsICdhcHBseScpO1xuICAgIH1cblxuICAgIHZhciBwYXJzZXIgPSB0aGlzLnBhcnNlcnNbZm9ybWF0XSxcbiAgICAgICAgcmVnZXggPSBwYXJzZXIucmVnZXgsXG4gICAgICAgIG1hcCA9IHBhcnNlci5tYXAsXG4gICAgICAgIHJlc3VsdHMgPSBpbnB1dC5tYXRjaChyZWdleCksXG4gICAgICAgIHR6T2Zmc2V0ID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgIHZhciBmaWVsZHMsIGR0O1xuICAgICAgaWYgKGFuZ3VsYXIuaXNEYXRlKGJhc2VEYXRlKSAmJiAhaXNOYU4oYmFzZURhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICBmaWVsZHMgPSB7XG4gICAgICAgICAgeWVhcjogYmFzZURhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICBtb250aDogYmFzZURhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICBkYXRlOiBiYXNlRGF0ZS5nZXREYXRlKCksXG4gICAgICAgICAgaG91cnM6IGJhc2VEYXRlLmdldEhvdXJzKCksXG4gICAgICAgICAgbWludXRlczogYmFzZURhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICAgIHNlY29uZHM6IGJhc2VEYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgICBtaWxsaXNlY29uZHM6IGJhc2VEYXRlLmdldE1pbGxpc2Vjb25kcygpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYmFzZURhdGUpIHtcbiAgICAgICAgICAkbG9nLndhcm4oJ2RhdGVwYXJzZXI6JywgJ2Jhc2VEYXRlIGlzIG5vdCBhIHZhbGlkIGRhdGUnKTtcbiAgICAgICAgfVxuICAgICAgICBmaWVsZHMgPSB7IHllYXI6IDE5MDAsIG1vbnRoOiAwLCBkYXRlOiAxLCBob3VyczogMCwgbWludXRlczogMCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH07XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAxLCBuID0gcmVzdWx0cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgdmFyIG1hcHBlciA9IG1hcFtpIC0gMV07XG4gICAgICAgIGlmIChtYXBwZXIubWF0Y2hlciA9PT0gJ1onKSB7XG4gICAgICAgICAgdHpPZmZzZXQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hcHBlci5hcHBseSkge1xuICAgICAgICAgIG1hcHBlci5hcHBseS5jYWxsKGZpZWxkcywgcmVzdWx0c1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGRhdGVzZXR0ZXIgPSB0ek9mZnNldCA/IERhdGUucHJvdG90eXBlLnNldFVUQ0Z1bGxZZWFyIDpcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUuc2V0RnVsbFllYXI7XG4gICAgICB2YXIgdGltZXNldHRlciA9IHR6T2Zmc2V0ID8gRGF0ZS5wcm90b3R5cGUuc2V0VVRDSG91cnMgOlxuICAgICAgICBEYXRlLnByb3RvdHlwZS5zZXRIb3VycztcblxuICAgICAgaWYgKGlzVmFsaWQoZmllbGRzLnllYXIsIGZpZWxkcy5tb250aCwgZmllbGRzLmRhdGUpKSB7XG4gICAgICAgIGlmIChhbmd1bGFyLmlzRGF0ZShiYXNlRGF0ZSkgJiYgIWlzTmFOKGJhc2VEYXRlLmdldFRpbWUoKSkgJiYgIXR6T2Zmc2V0KSB7XG4gICAgICAgICAgZHQgPSBuZXcgRGF0ZShiYXNlRGF0ZSk7XG4gICAgICAgICAgZGF0ZXNldHRlci5jYWxsKGR0LCBmaWVsZHMueWVhciwgZmllbGRzLm1vbnRoLCBmaWVsZHMuZGF0ZSk7XG4gICAgICAgICAgdGltZXNldHRlci5jYWxsKGR0LCBmaWVsZHMuaG91cnMsIGZpZWxkcy5taW51dGVzLFxuICAgICAgICAgICAgZmllbGRzLnNlY29uZHMsIGZpZWxkcy5taWxsaXNlY29uZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGR0ID0gbmV3IERhdGUoMCk7XG4gICAgICAgICAgZGF0ZXNldHRlci5jYWxsKGR0LCBmaWVsZHMueWVhciwgZmllbGRzLm1vbnRoLCBmaWVsZHMuZGF0ZSk7XG4gICAgICAgICAgdGltZXNldHRlci5jYWxsKGR0LCBmaWVsZHMuaG91cnMgfHwgMCwgZmllbGRzLm1pbnV0ZXMgfHwgMCxcbiAgICAgICAgICAgIGZpZWxkcy5zZWNvbmRzIHx8IDAsIGZpZWxkcy5taWxsaXNlY29uZHMgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGR0O1xuICAgIH1cbiAgfTtcblxuICAvLyBDaGVjayBpZiBkYXRlIGlzIHZhbGlkIGZvciBzcGVjaWZpYyBtb250aCAoYW5kIHllYXIgZm9yIEZlYnJ1YXJ5KS5cbiAgLy8gTW9udGg6IDAgPSBKYW4sIDEgPSBGZWIsIGV0Y1xuICBmdW5jdGlvbiBpc1ZhbGlkKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gICAgaWYgKGRhdGUgPCAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG1vbnRoID09PSAxICYmIGRhdGUgPiAyOCkge1xuICAgICAgcmV0dXJuIGRhdGUgPT09IDI5ICYmICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xuICAgIH1cblxuICAgIGlmIChtb250aCA9PT0gMyB8fCBtb250aCA9PT0gNSB8fCBtb250aCA9PT0gOCB8fCBtb250aCA9PT0gMTApIHtcbiAgICAgIHJldHVybiBkYXRlIDwgMzE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiB0b0ludChzdHIpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyLCAxMCk7XG4gIH1cblxuICB0aGlzLnRvVGltZXpvbmUgPSB0b1RpbWV6b25lO1xuICB0aGlzLmZyb21UaW1lem9uZSA9IGZyb21UaW1lem9uZTtcbiAgdGhpcy50aW1lem9uZVRvT2Zmc2V0ID0gdGltZXpvbmVUb09mZnNldDtcbiAgdGhpcy5hZGREYXRlTWludXRlcyA9IGFkZERhdGVNaW51dGVzO1xuICB0aGlzLmNvbnZlcnRUaW1lem9uZVRvTG9jYWwgPSBjb252ZXJ0VGltZXpvbmVUb0xvY2FsO1xuXG4gIGZ1bmN0aW9uIHRvVGltZXpvbmUoZGF0ZSwgdGltZXpvbmUpIHtcbiAgICByZXR1cm4gZGF0ZSAmJiB0aW1lem9uZSA/IGNvbnZlcnRUaW1lem9uZVRvTG9jYWwoZGF0ZSwgdGltZXpvbmUpIDogZGF0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZyb21UaW1lem9uZShkYXRlLCB0aW1lem9uZSkge1xuICAgIHJldHVybiBkYXRlICYmIHRpbWV6b25lID8gY29udmVydFRpbWV6b25lVG9Mb2NhbChkYXRlLCB0aW1lem9uZSwgdHJ1ZSkgOiBkYXRlO1xuICB9XG5cbiAgLy9odHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL2Jsb2IvNjIyYzQyMTY5Njk5ZWMwN2ZjNmRhYWExOWZlNmQyMjRlNWQyZjcwZS9zcmMvQW5ndWxhci5qcyNMMTIwN1xuICBmdW5jdGlvbiB0aW1lem9uZVRvT2Zmc2V0KHRpbWV6b25lLCBmYWxsYmFjaykge1xuICAgIHRpbWV6b25lID0gdGltZXpvbmUucmVwbGFjZSgvOi9nLCAnJyk7XG4gICAgdmFyIHJlcXVlc3RlZFRpbWV6b25lT2Zmc2V0ID0gRGF0ZS5wYXJzZSgnSmFuIDAxLCAxOTcwIDAwOjAwOjAwICcgKyB0aW1lem9uZSkgLyA2MDAwMDtcbiAgICByZXR1cm4gaXNOYU4ocmVxdWVzdGVkVGltZXpvbmVPZmZzZXQpID8gZmFsbGJhY2sgOiByZXF1ZXN0ZWRUaW1lem9uZU9mZnNldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZERhdGVNaW51dGVzKGRhdGUsIG1pbnV0ZXMpIHtcbiAgICBkYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXMpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFRpbWV6b25lVG9Mb2NhbChkYXRlLCB0aW1lem9uZSwgcmV2ZXJzZSkge1xuICAgIHJldmVyc2UgPSByZXZlcnNlID8gLTEgOiAxO1xuICAgIHZhciBkYXRlVGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gdGltZXpvbmVUb09mZnNldCh0aW1lem9uZSwgZGF0ZVRpbWV6b25lT2Zmc2V0KTtcbiAgICByZXR1cm4gYWRkRGF0ZU1pbnV0ZXMoZGF0ZSwgcmV2ZXJzZSAqICh0aW1lem9uZU9mZnNldCAtIGRhdGVUaW1lem9uZU9mZnNldCkpO1xuICB9XG59XSk7XG5cbi8vIEF2b2lkaW5nIHVzZSBvZiBuZy1jbGFzcyBhcyBpdCBjcmVhdGVzIGEgbG90IG9mIHdhdGNoZXJzIHdoZW4gYSBjbGFzcyBpcyB0byBiZSBhcHBsaWVkIHRvXG4vLyBhdCBtb3N0IG9uZSBlbGVtZW50LlxuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5pc0NsYXNzJywgW10pXG4uZGlyZWN0aXZlKCd1aWJJc0NsYXNzJywgW1xuICAgICAgICAgJyRhbmltYXRlJyxcbmZ1bmN0aW9uICgkYW5pbWF0ZSkge1xuICAvLyAgICAgICAgICAgICAgICAgICAgMTExMTExMTEgICAgICAgICAgMjIyMjIyMjJcbiAgdmFyIE9OX1JFR0VYUCA9IC9eXFxzKihbXFxzXFxTXSs/KVxccytvblxccysoW1xcc1xcU10rPylcXHMqJC87XG4gIC8vICAgICAgICAgICAgICAgICAgICAxMTExMTExMSAgICAgICAgICAgMjIyMjIyMjJcbiAgdmFyIElTX1JFR0VYUCA9IC9eXFxzKihbXFxzXFxTXSs/KVxccytmb3JcXHMrKFtcXHNcXFNdKz8pXFxzKiQvO1xuXG4gIHZhciBkYXRhUGVyVHJhY2tlZCA9IHt9O1xuXG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICBjb21waWxlOiBmdW5jdGlvbih0RWxlbWVudCwgdEF0dHJzKSB7XG4gICAgICB2YXIgbGlua2VkU2NvcGVzID0gW107XG4gICAgICB2YXIgaW5zdGFuY2VzID0gW107XG4gICAgICB2YXIgZXhwVG9EYXRhID0ge307XG4gICAgICB2YXIgbGFzdEFjdGl2YXRlZCA9IG51bGw7XG4gICAgICB2YXIgb25FeHBNYXRjaGVzID0gdEF0dHJzLnVpYklzQ2xhc3MubWF0Y2goT05fUkVHRVhQKTtcbiAgICAgIHZhciBvbkV4cCA9IG9uRXhwTWF0Y2hlc1syXTtcbiAgICAgIHZhciBleHBzU3RyID0gb25FeHBNYXRjaGVzWzFdO1xuICAgICAgdmFyIGV4cHMgPSBleHBzU3RyLnNwbGl0KCcsJyk7XG5cbiAgICAgIHJldHVybiBsaW5rRm47XG5cbiAgICAgIGZ1bmN0aW9uIGxpbmtGbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgICAgbGlua2VkU2NvcGVzLnB1c2goc2NvcGUpO1xuICAgICAgICBpbnN0YW5jZXMucHVzaCh7XG4gICAgICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhwcy5mb3JFYWNoKGZ1bmN0aW9uKGV4cCwgaykge1xuICAgICAgICAgIGFkZEZvckV4cChleHAsIHNjb3BlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2NvcGUuJG9uKCckZGVzdHJveScsIHJlbW92ZVNjb3BlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gYWRkRm9yRXhwKGV4cCwgc2NvcGUpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBleHAubWF0Y2goSVNfUkVHRVhQKTtcbiAgICAgICAgdmFyIGNsYXp6ID0gc2NvcGUuJGV2YWwobWF0Y2hlc1sxXSk7XG4gICAgICAgIHZhciBjb21wYXJlV2l0aEV4cCA9IG1hdGNoZXNbMl07XG4gICAgICAgIHZhciBkYXRhID0gZXhwVG9EYXRhW2V4cF07XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIHZhciB3YXRjaEZuID0gZnVuY3Rpb24oY29tcGFyZVdpdGhWYWwpIHtcbiAgICAgICAgICAgIHZhciBuZXdBY3RpdmF0ZWQgPSBudWxsO1xuICAgICAgICAgICAgaW5zdGFuY2VzLnNvbWUoZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgdmFyIHRoaXNWYWwgPSBpbnN0YW5jZS5zY29wZS4kZXZhbChvbkV4cCk7XG4gICAgICAgICAgICAgIGlmICh0aGlzVmFsID09PSBjb21wYXJlV2l0aFZhbCkge1xuICAgICAgICAgICAgICAgIG5ld0FjdGl2YXRlZCA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkYXRhLmxhc3RBY3RpdmF0ZWQgIT09IG5ld0FjdGl2YXRlZCkge1xuICAgICAgICAgICAgICBpZiAoZGF0YS5sYXN0QWN0aXZhdGVkKSB7XG4gICAgICAgICAgICAgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3MoZGF0YS5sYXN0QWN0aXZhdGVkLmVsZW1lbnQsIGNsYXp6KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAobmV3QWN0aXZhdGVkKSB7XG4gICAgICAgICAgICAgICAgJGFuaW1hdGUuYWRkQ2xhc3MobmV3QWN0aXZhdGVkLmVsZW1lbnQsIGNsYXp6KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkYXRhLmxhc3RBY3RpdmF0ZWQgPSBuZXdBY3RpdmF0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBleHBUb0RhdGFbZXhwXSA9IGRhdGEgPSB7XG4gICAgICAgICAgICBsYXN0QWN0aXZhdGVkOiBudWxsLFxuICAgICAgICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgICAgICAgd2F0Y2hGbjogd2F0Y2hGbixcbiAgICAgICAgICAgIGNvbXBhcmVXaXRoRXhwOiBjb21wYXJlV2l0aEV4cCxcbiAgICAgICAgICAgIHdhdGNoZXI6IHNjb3BlLiR3YXRjaChjb21wYXJlV2l0aEV4cCwgd2F0Y2hGbilcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGRhdGEud2F0Y2hGbihzY29wZS4kZXZhbChjb21wYXJlV2l0aEV4cCkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZW1vdmVTY29wZShlKSB7XG4gICAgICAgIHZhciByZW1vdmVkU2NvcGUgPSBlLnRhcmdldFNjb3BlO1xuICAgICAgICB2YXIgaW5kZXggPSBsaW5rZWRTY29wZXMuaW5kZXhPZihyZW1vdmVkU2NvcGUpO1xuICAgICAgICBsaW5rZWRTY29wZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgaW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGlmIChsaW5rZWRTY29wZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIG5ld1dhdGNoU2NvcGUgPSBsaW5rZWRTY29wZXNbMF07XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGV4cFRvRGF0YSwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRhdGEuc2NvcGUgPT09IHJlbW92ZWRTY29wZSkge1xuICAgICAgICAgICAgICBkYXRhLndhdGNoZXIgPSBuZXdXYXRjaFNjb3BlLiR3YXRjaChkYXRhLmNvbXBhcmVXaXRoRXhwLCBkYXRhLndhdGNoRm4pO1xuICAgICAgICAgICAgICBkYXRhLnNjb3BlID0gbmV3V2F0Y2hTY29wZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHBUb0RhdGEgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1dKTtcbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAuZGF0ZXBpY2tlcicsIFsndWkuYm9vdHN0cmFwLmRhdGVwYXJzZXInLCAndWkuYm9vdHN0cmFwLmlzQ2xhc3MnXSlcblxuLnZhbHVlKCckZGF0ZXBpY2tlclN1cHByZXNzRXJyb3InLCBmYWxzZSlcblxuLnZhbHVlKCckZGF0ZXBpY2tlckxpdGVyYWxXYXJuaW5nJywgdHJ1ZSlcblxuLmNvbnN0YW50KCd1aWJEYXRlcGlja2VyQ29uZmlnJywge1xuICBkYXRlcGlja2VyTW9kZTogJ2RheScsXG4gIGZvcm1hdERheTogJ2RkJyxcbiAgZm9ybWF0TW9udGg6ICdNTU1NJyxcbiAgZm9ybWF0WWVhcjogJ3l5eXknLFxuICBmb3JtYXREYXlIZWFkZXI6ICdFRUUnLFxuICBmb3JtYXREYXlUaXRsZTogJ01NTU0geXl5eScsXG4gIGZvcm1hdE1vbnRoVGl0bGU6ICd5eXl5JyxcbiAgbWF4RGF0ZTogbnVsbCxcbiAgbWF4TW9kZTogJ3llYXInLFxuICBtaW5EYXRlOiBudWxsLFxuICBtaW5Nb2RlOiAnZGF5JyxcbiAgbW9udGhDb2x1bW5zOiAzLFxuICBuZ01vZGVsT3B0aW9uczoge30sXG4gIHNob3J0Y3V0UHJvcGFnYXRpb246IGZhbHNlLFxuICBzaG93V2Vla3M6IHRydWUsXG4gIHllYXJDb2x1bW5zOiA1LFxuICB5ZWFyUm93czogNFxufSlcblxuLmNvbnRyb2xsZXIoJ1VpYkRhdGVwaWNrZXJDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGVsZW1lbnQnLCAnJGF0dHJzJywgJyRwYXJzZScsICckaW50ZXJwb2xhdGUnLCAnJGxvY2FsZScsICckbG9nJywgJ2RhdGVGaWx0ZXInLCAndWliRGF0ZXBpY2tlckNvbmZpZycsICckZGF0ZXBpY2tlckxpdGVyYWxXYXJuaW5nJywgJyRkYXRlcGlja2VyU3VwcHJlc3NFcnJvcicsICd1aWJEYXRlUGFyc2VyJyxcbiAgZnVuY3Rpb24oJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzLCAkcGFyc2UsICRpbnRlcnBvbGF0ZSwgJGxvY2FsZSwgJGxvZywgZGF0ZUZpbHRlciwgZGF0ZXBpY2tlckNvbmZpZywgJGRhdGVwaWNrZXJMaXRlcmFsV2FybmluZywgJGRhdGVwaWNrZXJTdXBwcmVzc0Vycm9yLCBkYXRlUGFyc2VyKSB7XG4gIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIG5nTW9kZWxDdHJsID0geyAkc2V0Vmlld1ZhbHVlOiBhbmd1bGFyLm5vb3AgfSwgLy8gbnVsbE1vZGVsQ3RybDtcbiAgICAgIG5nTW9kZWxPcHRpb25zID0ge30sXG4gICAgICB3YXRjaExpc3RlbmVycyA9IFtdO1xuXG4gICRlbGVtZW50LmFkZENsYXNzKCd1aWItZGF0ZXBpY2tlcicpO1xuICAkYXR0cnMuJHNldCgncm9sZScsICdhcHBsaWNhdGlvbicpO1xuXG4gIGlmICghJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zKSB7XG4gICAgJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zID0ge307XG4gIH1cblxuICAvLyBNb2RlcyBjaGFpblxuICB0aGlzLm1vZGVzID0gWydkYXknLCAnbW9udGgnLCAneWVhciddO1xuXG4gIFtcbiAgICAnY3VzdG9tQ2xhc3MnLFxuICAgICdkYXRlRGlzYWJsZWQnLFxuICAgICdkYXRlcGlja2VyTW9kZScsXG4gICAgJ2Zvcm1hdERheScsXG4gICAgJ2Zvcm1hdERheUhlYWRlcicsXG4gICAgJ2Zvcm1hdERheVRpdGxlJyxcbiAgICAnZm9ybWF0TW9udGgnLFxuICAgICdmb3JtYXRNb250aFRpdGxlJyxcbiAgICAnZm9ybWF0WWVhcicsXG4gICAgJ21heERhdGUnLFxuICAgICdtYXhNb2RlJyxcbiAgICAnbWluRGF0ZScsXG4gICAgJ21pbk1vZGUnLFxuICAgICdtb250aENvbHVtbnMnLFxuICAgICdzaG93V2Vla3MnLFxuICAgICdzaG9ydGN1dFByb3BhZ2F0aW9uJyxcbiAgICAnc3RhcnRpbmdEYXknLFxuICAgICd5ZWFyQ29sdW1ucycsXG4gICAgJ3llYXJSb3dzJ1xuICBdLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ2N1c3RvbUNsYXNzJzpcbiAgICAgIGNhc2UgJ2RhdGVEaXNhYmxlZCc6XG4gICAgICAgICRzY29wZVtrZXldID0gJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zW2tleV0gfHwgYW5ndWxhci5ub29wO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhdGVwaWNrZXJNb2RlJzpcbiAgICAgICAgJHNjb3BlLmRhdGVwaWNrZXJNb2RlID0gYW5ndWxhci5pc0RlZmluZWQoJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zLmRhdGVwaWNrZXJNb2RlKSA/XG4gICAgICAgICAgJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zLmRhdGVwaWNrZXJNb2RlIDogZGF0ZXBpY2tlckNvbmZpZy5kYXRlcGlja2VyTW9kZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmb3JtYXREYXknOlxuICAgICAgY2FzZSAnZm9ybWF0RGF5SGVhZGVyJzpcbiAgICAgIGNhc2UgJ2Zvcm1hdERheVRpdGxlJzpcbiAgICAgIGNhc2UgJ2Zvcm1hdE1vbnRoJzpcbiAgICAgIGNhc2UgJ2Zvcm1hdE1vbnRoVGl0bGUnOlxuICAgICAgY2FzZSAnZm9ybWF0WWVhcic6XG4gICAgICAgIHNlbGZba2V5XSA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRzY29wZS5kYXRlcGlja2VyT3B0aW9uc1trZXldKSA/XG4gICAgICAgICAgJGludGVycG9sYXRlKCRzY29wZS5kYXRlcGlja2VyT3B0aW9uc1trZXldKSgkc2NvcGUuJHBhcmVudCkgOlxuICAgICAgICAgIGRhdGVwaWNrZXJDb25maWdba2V5XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtb250aENvbHVtbnMnOlxuICAgICAgY2FzZSAnc2hvd1dlZWtzJzpcbiAgICAgIGNhc2UgJ3Nob3J0Y3V0UHJvcGFnYXRpb24nOlxuICAgICAgY2FzZSAneWVhckNvbHVtbnMnOlxuICAgICAgY2FzZSAneWVhclJvd3MnOlxuICAgICAgICBzZWxmW2tleV0gPSBhbmd1bGFyLmlzRGVmaW5lZCgkc2NvcGUuZGF0ZXBpY2tlck9wdGlvbnNba2V5XSkgP1xuICAgICAgICAgICRzY29wZS5kYXRlcGlja2VyT3B0aW9uc1trZXldIDogZGF0ZXBpY2tlckNvbmZpZ1trZXldO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0YXJ0aW5nRGF5JzpcbiAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKCRzY29wZS5kYXRlcGlja2VyT3B0aW9ucy5zdGFydGluZ0RheSkpIHtcbiAgICAgICAgICBzZWxmLnN0YXJ0aW5nRGF5ID0gJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zLnN0YXJ0aW5nRGF5O1xuICAgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNOdW1iZXIoZGF0ZXBpY2tlckNvbmZpZy5zdGFydGluZ0RheSkpIHtcbiAgICAgICAgICBzZWxmLnN0YXJ0aW5nRGF5ID0gZGF0ZXBpY2tlckNvbmZpZy5zdGFydGluZ0RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLnN0YXJ0aW5nRGF5ID0gKCRsb2NhbGUuREFURVRJTUVfRk9STUFUUy5GSVJTVERBWU9GV0VFSyArIDgpICUgNztcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWF4RGF0ZSc6XG4gICAgICBjYXNlICdtaW5EYXRlJzpcbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnZGF0ZXBpY2tlck9wdGlvbnMuJyArIGtleSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgc2VsZltrZXldID0gZGF0ZVBhcnNlci5mcm9tVGltZXpvbmUobmV3IERhdGUodmFsdWUpLCBuZ01vZGVsT3B0aW9ucy5nZXRPcHRpb24oJ3RpbWV6b25lJykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCRkYXRlcGlja2VyTGl0ZXJhbFdhcm5pbmcpIHtcbiAgICAgICAgICAgICAgICAkbG9nLndhcm4oJ0xpdGVyYWwgZGF0ZSBzdXBwb3J0IGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8gZGF0ZSBvYmplY3QgdXNhZ2UnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNlbGZba2V5XSA9IG5ldyBEYXRlKGRhdGVGaWx0ZXIodmFsdWUsICdtZWRpdW0nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGZba2V5XSA9IGRhdGVwaWNrZXJDb25maWdba2V5XSA/XG4gICAgICAgICAgICAgIGRhdGVQYXJzZXIuZnJvbVRpbWV6b25lKG5ldyBEYXRlKGRhdGVwaWNrZXJDb25maWdba2V5XSksIG5nTW9kZWxPcHRpb25zLmdldE9wdGlvbigndGltZXpvbmUnKSkgOlxuICAgICAgICAgICAgICBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlbGYucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtYXhNb2RlJzpcbiAgICAgIGNhc2UgJ21pbk1vZGUnOlxuICAgICAgICBpZiAoJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zW2tleV0pIHtcbiAgICAgICAgICAkc2NvcGUuJHdhdGNoKGZ1bmN0aW9uKCkgeyByZXR1cm4gJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zW2tleV07IH0sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBzZWxmW2tleV0gPSAkc2NvcGVba2V5XSA9IGFuZ3VsYXIuaXNEZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zW2tleV07XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnbWluTW9kZScgJiYgc2VsZi5tb2Rlcy5pbmRleE9mKCRzY29wZS5kYXRlcGlja2VyT3B0aW9ucy5kYXRlcGlja2VyTW9kZSkgPCBzZWxmLm1vZGVzLmluZGV4T2Yoc2VsZltrZXldKSB8fFxuICAgICAgICAgICAgICBrZXkgPT09ICdtYXhNb2RlJyAmJiBzZWxmLm1vZGVzLmluZGV4T2YoJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zLmRhdGVwaWNrZXJNb2RlKSA+IHNlbGYubW9kZXMuaW5kZXhPZihzZWxmW2tleV0pKSB7XG4gICAgICAgICAgICAgICRzY29wZS5kYXRlcGlja2VyTW9kZSA9IHNlbGZba2V5XTtcbiAgICAgICAgICAgICAgJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zLmRhdGVwaWNrZXJNb2RlID0gc2VsZltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGZba2V5XSA9ICRzY29wZVtrZXldID0gZGF0ZXBpY2tlckNvbmZpZ1trZXldIHx8IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xuXG4gICRzY29wZS51bmlxdWVJZCA9ICdkYXRlcGlja2VyLScgKyAkc2NvcGUuJGlkICsgJy0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDApO1xuXG4gICRzY29wZS5kaXNhYmxlZCA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5kaXNhYmxlZCkgfHwgZmFsc2U7XG4gIGlmIChhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMubmdEaXNhYmxlZCkpIHtcbiAgICB3YXRjaExpc3RlbmVycy5wdXNoKCRzY29wZS4kcGFyZW50LiR3YXRjaCgkYXR0cnMubmdEaXNhYmxlZCwgZnVuY3Rpb24oZGlzYWJsZWQpIHtcbiAgICAgICRzY29wZS5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgc2VsZi5yZWZyZXNoVmlldygpO1xuICAgIH0pKTtcbiAgfVxuXG4gICRzY29wZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKGRhdGVPYmplY3QpIHtcbiAgICBpZiAoc2VsZi5jb21wYXJlKGRhdGVPYmplY3QuZGF0ZSwgc2VsZi5hY3RpdmVEYXRlKSA9PT0gMCkge1xuICAgICAgJHNjb3BlLmFjdGl2ZURhdGVJZCA9IGRhdGVPYmplY3QudWlkO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICB0aGlzLmluaXQgPSBmdW5jdGlvbihuZ01vZGVsQ3RybF8pIHtcbiAgICBuZ01vZGVsQ3RybCA9IG5nTW9kZWxDdHJsXztcbiAgICBuZ01vZGVsT3B0aW9ucyA9IGV4dHJhY3RPcHRpb25zKG5nTW9kZWxDdHJsKTtcblxuICAgIGlmICgkc2NvcGUuZGF0ZXBpY2tlck9wdGlvbnMuaW5pdERhdGUpIHtcbiAgICAgIHNlbGYuYWN0aXZlRGF0ZSA9IGRhdGVQYXJzZXIuZnJvbVRpbWV6b25lKCRzY29wZS5kYXRlcGlja2VyT3B0aW9ucy5pbml0RGF0ZSwgbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uKCd0aW1lem9uZScpKSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgJHNjb3BlLiR3YXRjaCgnZGF0ZXBpY2tlck9wdGlvbnMuaW5pdERhdGUnLCBmdW5jdGlvbihpbml0RGF0ZSkge1xuICAgICAgICBpZiAoaW5pdERhdGUgJiYgKG5nTW9kZWxDdHJsLiRpc0VtcHR5KG5nTW9kZWxDdHJsLiRtb2RlbFZhbHVlKSB8fCBuZ01vZGVsQ3RybC4kaW52YWxpZCkpIHtcbiAgICAgICAgICBzZWxmLmFjdGl2ZURhdGUgPSBkYXRlUGFyc2VyLmZyb21UaW1lem9uZShpbml0RGF0ZSwgbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uKCd0aW1lem9uZScpKTtcbiAgICAgICAgICBzZWxmLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIHZhciBkYXRlID0gbmdNb2RlbEN0cmwuJG1vZGVsVmFsdWUgPyBuZXcgRGF0ZShuZ01vZGVsQ3RybC4kbW9kZWxWYWx1ZSkgOiBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuYWN0aXZlRGF0ZSA9ICFpc05hTihkYXRlKSA/XG4gICAgICBkYXRlUGFyc2VyLmZyb21UaW1lem9uZShkYXRlLCBuZ01vZGVsT3B0aW9ucy5nZXRPcHRpb24oJ3RpbWV6b25lJykpIDpcbiAgICAgIGRhdGVQYXJzZXIuZnJvbVRpbWV6b25lKG5ldyBEYXRlKCksIG5nTW9kZWxPcHRpb25zLmdldE9wdGlvbigndGltZXpvbmUnKSk7XG5cbiAgICBuZ01vZGVsQ3RybC4kcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLnJlbmRlcigpO1xuICAgIH07XG4gIH07XG5cbiAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAobmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSkge1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShuZ01vZGVsQ3RybC4kdmlld1ZhbHVlKSxcbiAgICAgICAgICBpc1ZhbGlkID0gIWlzTmFOKGRhdGUpO1xuXG4gICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlUGFyc2VyLmZyb21UaW1lem9uZShkYXRlLCBuZ01vZGVsT3B0aW9ucy5nZXRPcHRpb24oJ3RpbWV6b25lJykpO1xuICAgICAgfSBlbHNlIGlmICghJGRhdGVwaWNrZXJTdXBwcmVzc0Vycm9yKSB7XG4gICAgICAgICRsb2cuZXJyb3IoJ0RhdGVwaWNrZXIgZGlyZWN0aXZlOiBcIm5nLW1vZGVsXCIgdmFsdWUgbXVzdCBiZSBhIERhdGUgb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgfTtcblxuICB0aGlzLnJlZnJlc2hWaWV3ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgICAgJHNjb3BlLnNlbGVjdGVkRHQgPSBudWxsO1xuICAgICAgdGhpcy5fcmVmcmVzaFZpZXcoKTtcbiAgICAgIGlmICgkc2NvcGUuYWN0aXZlRHQpIHtcbiAgICAgICAgJHNjb3BlLmFjdGl2ZURhdGVJZCA9ICRzY29wZS5hY3RpdmVEdC51aWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBkYXRlID0gbmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSA/IG5ldyBEYXRlKG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUpIDogbnVsbDtcbiAgICAgIGRhdGUgPSBkYXRlUGFyc2VyLmZyb21UaW1lem9uZShkYXRlLCBuZ01vZGVsT3B0aW9ucy5nZXRPcHRpb24oJ3RpbWV6b25lJykpO1xuICAgICAgbmdNb2RlbEN0cmwuJHNldFZhbGlkaXR5KCdkYXRlRGlzYWJsZWQnLCAhZGF0ZSB8fFxuICAgICAgICB0aGlzLmVsZW1lbnQgJiYgIXRoaXMuaXNEaXNhYmxlZChkYXRlKSk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuY3JlYXRlRGF0ZU9iamVjdCA9IGZ1bmN0aW9uKGRhdGUsIGZvcm1hdCkge1xuICAgIHZhciBtb2RlbCA9IG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUgPyBuZXcgRGF0ZShuZ01vZGVsQ3RybC4kdmlld1ZhbHVlKSA6IG51bGw7XG4gICAgbW9kZWwgPSBkYXRlUGFyc2VyLmZyb21UaW1lem9uZShtb2RlbCwgbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uKCd0aW1lem9uZScpKTtcbiAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIHRvZGF5ID0gZGF0ZVBhcnNlci5mcm9tVGltZXpvbmUodG9kYXksIG5nTW9kZWxPcHRpb25zLmdldE9wdGlvbigndGltZXpvbmUnKSk7XG4gICAgdmFyIHRpbWUgPSB0aGlzLmNvbXBhcmUoZGF0ZSwgdG9kYXkpO1xuICAgIHZhciBkdCA9IHtcbiAgICAgIGRhdGU6IGRhdGUsXG4gICAgICBsYWJlbDogZGF0ZVBhcnNlci5maWx0ZXIoZGF0ZSwgZm9ybWF0KSxcbiAgICAgIHNlbGVjdGVkOiBtb2RlbCAmJiB0aGlzLmNvbXBhcmUoZGF0ZSwgbW9kZWwpID09PSAwLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlZChkYXRlKSxcbiAgICAgIHBhc3Q6IHRpbWUgPCAwLFxuICAgICAgY3VycmVudDogdGltZSA9PT0gMCxcbiAgICAgIGZ1dHVyZTogdGltZSA+IDAsXG4gICAgICBjdXN0b21DbGFzczogdGhpcy5jdXN0b21DbGFzcyhkYXRlKSB8fCBudWxsXG4gICAgfTtcblxuICAgIGlmIChtb2RlbCAmJiB0aGlzLmNvbXBhcmUoZGF0ZSwgbW9kZWwpID09PSAwKSB7XG4gICAgICAkc2NvcGUuc2VsZWN0ZWREdCA9IGR0O1xuICAgIH1cblxuICAgIGlmIChzZWxmLmFjdGl2ZURhdGUgJiYgdGhpcy5jb21wYXJlKGR0LmRhdGUsIHNlbGYuYWN0aXZlRGF0ZSkgPT09IDApIHtcbiAgICAgICRzY29wZS5hY3RpdmVEdCA9IGR0O1xuICAgIH1cblxuICAgIHJldHVybiBkdDtcbiAgfTtcblxuICB0aGlzLmlzRGlzYWJsZWQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuICRzY29wZS5kaXNhYmxlZCB8fFxuICAgICAgdGhpcy5taW5EYXRlICYmIHRoaXMuY29tcGFyZShkYXRlLCB0aGlzLm1pbkRhdGUpIDwgMCB8fFxuICAgICAgdGhpcy5tYXhEYXRlICYmIHRoaXMuY29tcGFyZShkYXRlLCB0aGlzLm1heERhdGUpID4gMCB8fFxuICAgICAgJHNjb3BlLmRhdGVEaXNhYmxlZCAmJiAkc2NvcGUuZGF0ZURpc2FibGVkKHtkYXRlOiBkYXRlLCBtb2RlOiAkc2NvcGUuZGF0ZXBpY2tlck1vZGV9KTtcbiAgfTtcblxuICB0aGlzLmN1c3RvbUNsYXNzID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiAkc2NvcGUuY3VzdG9tQ2xhc3Moe2RhdGU6IGRhdGUsIG1vZGU6ICRzY29wZS5kYXRlcGlja2VyTW9kZX0pO1xuICB9O1xuXG4gIC8vIFNwbGl0IGFycmF5IGludG8gc21hbGxlciBhcnJheXNcbiAgdGhpcy5zcGxpdCA9IGZ1bmN0aW9uKGFyciwgc2l6ZSkge1xuICAgIHZhciBhcnJheXMgPSBbXTtcbiAgICB3aGlsZSAoYXJyLmxlbmd0aCA+IDApIHtcbiAgICAgIGFycmF5cy5wdXNoKGFyci5zcGxpY2UoMCwgc2l6ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXlzO1xuICB9O1xuXG4gICRzY29wZS5zZWxlY3QgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgaWYgKCRzY29wZS5kYXRlcGlja2VyTW9kZSA9PT0gc2VsZi5taW5Nb2RlKSB7XG4gICAgICB2YXIgZHQgPSBuZ01vZGVsQ3RybC4kdmlld1ZhbHVlID8gZGF0ZVBhcnNlci5mcm9tVGltZXpvbmUobmV3IERhdGUobmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSksIG5nTW9kZWxPcHRpb25zLmdldE9wdGlvbigndGltZXpvbmUnKSkgOiBuZXcgRGF0ZSgwLCAwLCAwLCAwLCAwLCAwLCAwKTtcbiAgICAgIGR0LnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICBkdCA9IGRhdGVQYXJzZXIudG9UaW1lem9uZShkdCwgbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uKCd0aW1lem9uZScpKTtcbiAgICAgIG5nTW9kZWxDdHJsLiRzZXRWaWV3VmFsdWUoZHQpO1xuICAgICAgbmdNb2RlbEN0cmwuJHJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmFjdGl2ZURhdGUgPSBkYXRlO1xuICAgICAgc2V0TW9kZShzZWxmLm1vZGVzW3NlbGYubW9kZXMuaW5kZXhPZigkc2NvcGUuZGF0ZXBpY2tlck1vZGUpIC0gMV0pO1xuXG4gICAgICAkc2NvcGUuJGVtaXQoJ3VpYjpkYXRlcGlja2VyLm1vZGUnKTtcbiAgICB9XG5cbiAgICAkc2NvcGUuJGJyb2FkY2FzdCgndWliOmRhdGVwaWNrZXIuZm9jdXMnKTtcbiAgfTtcblxuICAkc2NvcGUubW92ZSA9IGZ1bmN0aW9uKGRpcmVjdGlvbikge1xuICAgIHZhciB5ZWFyID0gc2VsZi5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkgKyBkaXJlY3Rpb24gKiAoc2VsZi5zdGVwLnllYXJzIHx8IDApLFxuICAgICAgICBtb250aCA9IHNlbGYuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgZGlyZWN0aW9uICogKHNlbGYuc3RlcC5tb250aHMgfHwgMCk7XG4gICAgc2VsZi5hY3RpdmVEYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCAxKTtcbiAgICBzZWxmLnJlZnJlc2hWaWV3KCk7XG4gIH07XG5cbiAgJHNjb3BlLnRvZ2dsZU1vZGUgPSBmdW5jdGlvbihkaXJlY3Rpb24pIHtcbiAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgMTtcblxuICAgIGlmICgkc2NvcGUuZGF0ZXBpY2tlck1vZGUgPT09IHNlbGYubWF4TW9kZSAmJiBkaXJlY3Rpb24gPT09IDEgfHxcbiAgICAgICRzY29wZS5kYXRlcGlja2VyTW9kZSA9PT0gc2VsZi5taW5Nb2RlICYmIGRpcmVjdGlvbiA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRNb2RlKHNlbGYubW9kZXNbc2VsZi5tb2Rlcy5pbmRleE9mKCRzY29wZS5kYXRlcGlja2VyTW9kZSkgKyBkaXJlY3Rpb25dKTtcblxuICAgICRzY29wZS4kZW1pdCgndWliOmRhdGVwaWNrZXIubW9kZScpO1xuICB9O1xuXG4gIC8vIEtleSBldmVudCBtYXBwZXJcbiAgJHNjb3BlLmtleXMgPSB7IDEzOiAnZW50ZXInLCAzMjogJ3NwYWNlJywgMzM6ICdwYWdldXAnLCAzNDogJ3BhZ2Vkb3duJywgMzU6ICdlbmQnLCAzNjogJ2hvbWUnLCAzNzogJ2xlZnQnLCAzODogJ3VwJywgMzk6ICdyaWdodCcsIDQwOiAnZG93bicgfTtcblxuICB2YXIgZm9jdXNFbGVtZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbGVtZW50WzBdLmZvY3VzKCk7XG4gIH07XG5cbiAgLy8gTGlzdGVuIGZvciBmb2N1cyByZXF1ZXN0cyBmcm9tIHBvcHVwIGRpcmVjdGl2ZVxuICAkc2NvcGUuJG9uKCd1aWI6ZGF0ZXBpY2tlci5mb2N1cycsIGZvY3VzRWxlbWVudCk7XG5cbiAgJHNjb3BlLmtleWRvd24gPSBmdW5jdGlvbihldnQpIHtcbiAgICB2YXIga2V5ID0gJHNjb3BlLmtleXNbZXZ0LndoaWNoXTtcblxuICAgIGlmICgha2V5IHx8IGV2dC5zaGlmdEtleSB8fCBldnQuYWx0S2V5IHx8ICRzY29wZS5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghc2VsZi5zaG9ydGN1dFByb3BhZ2F0aW9uKSB7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2VudGVyJyB8fCBrZXkgPT09ICdzcGFjZScpIHtcbiAgICAgIGlmIChzZWxmLmlzRGlzYWJsZWQoc2VsZi5hY3RpdmVEYXRlKSkge1xuICAgICAgICByZXR1cm47IC8vIGRvIG5vdGhpbmdcbiAgICAgIH1cbiAgICAgICRzY29wZS5zZWxlY3Qoc2VsZi5hY3RpdmVEYXRlKTtcbiAgICB9IGVsc2UgaWYgKGV2dC5jdHJsS2V5ICYmIChrZXkgPT09ICd1cCcgfHwga2V5ID09PSAnZG93bicpKSB7XG4gICAgICAkc2NvcGUudG9nZ2xlTW9kZShrZXkgPT09ICd1cCcgPyAxIDogLTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmhhbmRsZUtleURvd24oa2V5LCBldnQpO1xuICAgICAgc2VsZi5yZWZyZXNoVmlldygpO1xuICAgIH1cbiAgfTtcblxuICAkZWxlbWVudC5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2dCkge1xuICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XG4gICAgICAkc2NvcGUua2V5ZG93bihldnQpO1xuICAgIH0pO1xuICB9KTtcblxuICAkc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIC8vQ2xlYXIgYWxsIHdhdGNoIGxpc3RlbmVycyBvbiBkZXN0cm95XG4gICAgd2hpbGUgKHdhdGNoTGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgd2F0Y2hMaXN0ZW5lcnMuc2hpZnQoKSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gc2V0TW9kZShtb2RlKSB7XG4gICAgJHNjb3BlLmRhdGVwaWNrZXJNb2RlID0gbW9kZTtcbiAgICAkc2NvcGUuZGF0ZXBpY2tlck9wdGlvbnMuZGF0ZXBpY2tlck1vZGUgPSBtb2RlO1xuICB9XG5cbiAgZnVuY3Rpb24gZXh0cmFjdE9wdGlvbnMobmdNb2RlbEN0cmwpIHtcbiAgICB2YXIgbmdNb2RlbE9wdGlvbnM7XG5cbiAgICBpZiAoYW5ndWxhci52ZXJzaW9uLm1pbm9yIDwgNikgeyAvLyBpbiBhbmd1bGFyIDwgMS42ICRvcHRpb25zIGNvdWxkIGJlIG1pc3NpbmdcbiAgICAgIC8vIGd1YXJhbnRlZSBhIHZhbHVlXG4gICAgICBuZ01vZGVsT3B0aW9ucyA9IG5nTW9kZWxDdHJsLiRvcHRpb25zIHx8XG4gICAgICAgICRzY29wZS5kYXRlcGlja2VyT3B0aW9ucy5uZ01vZGVsT3B0aW9ucyB8fFxuICAgICAgICBkYXRlcGlja2VyQ29uZmlnLm5nTW9kZWxPcHRpb25zIHx8XG4gICAgICAgIHt9O1xuXG4gICAgICAvLyBtaW1pYyAxLjYrIGFwaVxuICAgICAgbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gbmdNb2RlbE9wdGlvbnNba2V5XTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHsgLy8gaW4gYW5ndWxhciA+PTEuNiAkb3B0aW9ucyBpcyBhbHdheXMgcHJlc2VudFxuICAgICAgLy8gbmctbW9kZWwtb3B0aW9ucyBkZWZhdWx0cyB0aW1lem9uZSB0byBudWxsOyBkb24ndCBsZXQgaXRzIHByZWNlZGVuY2Ugc3F1YXNoIGEgbm9uLW51bGwgdmFsdWVcbiAgICAgIHZhciB0aW1lem9uZSA9IG5nTW9kZWxDdHJsLiRvcHRpb25zLmdldE9wdGlvbigndGltZXpvbmUnKSB8fFxuICAgICAgICAoJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zLm5nTW9kZWxPcHRpb25zID8gJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zLm5nTW9kZWxPcHRpb25zLnRpbWV6b25lIDogbnVsbCkgfHxcbiAgICAgICAgKGRhdGVwaWNrZXJDb25maWcubmdNb2RlbE9wdGlvbnMgPyBkYXRlcGlja2VyQ29uZmlnLm5nTW9kZWxPcHRpb25zLnRpbWV6b25lIDogbnVsbCk7XG5cbiAgICAgIC8vIHZhbHVlcyBwYXNzZWQgdG8gY3JlYXRlQ2hpbGQgb3ZlcnJpZGUgZXhpc3RpbmcgdmFsdWVzXG4gICAgICBuZ01vZGVsT3B0aW9ucyA9IG5nTW9kZWxDdHJsLiRvcHRpb25zIC8vIHN0YXJ0IHdpdGggYSBNb2RlbE9wdGlvbnMgaW5zdGFuY2VcbiAgICAgICAgLmNyZWF0ZUNoaWxkKGRhdGVwaWNrZXJDb25maWcubmdNb2RlbE9wdGlvbnMpIC8vIGxvd2VzdCBwcmVjZWRlbmNlXG4gICAgICAgIC5jcmVhdGVDaGlsZCgkc2NvcGUuZGF0ZXBpY2tlck9wdGlvbnMubmdNb2RlbE9wdGlvbnMpXG4gICAgICAgIC5jcmVhdGVDaGlsZChuZ01vZGVsQ3RybC4kb3B0aW9ucykgLy8gaGlnaGVzdCBwcmVjZWRlbmNlXG4gICAgICAgIC5jcmVhdGVDaGlsZCh7dGltZXpvbmU6IHRpbWV6b25lfSk7IC8vIHRvIGtlZXAgZnJvbSBzcXVhc2hpbmcgYSBub24tbnVsbCB2YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBuZ01vZGVsT3B0aW9ucztcbiAgfVxufV0pXG5cbi5jb250cm9sbGVyKCdVaWJEYXlwaWNrZXJDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGVsZW1lbnQnLCAnZGF0ZUZpbHRlcicsIGZ1bmN0aW9uKHNjb3BlLCAkZWxlbWVudCwgZGF0ZUZpbHRlcikge1xuICB2YXIgREFZU19JTl9NT05USCA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcblxuICB0aGlzLnN0ZXAgPSB7IG1vbnRoczogMSB9O1xuICB0aGlzLmVsZW1lbnQgPSAkZWxlbWVudDtcbiAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICByZXR1cm4gbW9udGggPT09IDEgJiYgeWVhciAlIDQgPT09IDAgJiZcbiAgICAgICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApID8gMjkgOiBEQVlTX0lOX01PTlRIW21vbnRoXTtcbiAgfVxuXG4gIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKGN0cmwpIHtcbiAgICBhbmd1bGFyLmV4dGVuZChjdHJsLCB0aGlzKTtcbiAgICBzY29wZS5zaG93V2Vla3MgPSBjdHJsLnNob3dXZWVrcztcbiAgICBjdHJsLnJlZnJlc2hWaWV3KCk7XG4gIH07XG5cbiAgdGhpcy5nZXREYXRlcyA9IGZ1bmN0aW9uKHN0YXJ0RGF0ZSwgbikge1xuICAgIHZhciBkYXRlcyA9IG5ldyBBcnJheShuKSwgY3VycmVudCA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSksIGkgPSAwLCBkYXRlO1xuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnQpO1xuICAgICAgZGF0ZXNbaSsrXSA9IGRhdGU7XG4gICAgICBjdXJyZW50LnNldERhdGUoY3VycmVudC5nZXREYXRlKCkgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9O1xuXG4gIHRoaXMuX3JlZnJlc2hWaWV3ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHllYXIgPSB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIG1vbnRoID0gdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksXG4gICAgICBmaXJzdERheU9mTW9udGggPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUpO1xuXG4gICAgZmlyc3REYXlPZk1vbnRoLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCAxKTtcblxuICAgIHZhciBkaWZmZXJlbmNlID0gdGhpcy5zdGFydGluZ0RheSAtIGZpcnN0RGF5T2ZNb250aC5nZXREYXkoKSxcbiAgICAgIG51bURpc3BsYXllZEZyb21QcmV2aW91c01vbnRoID0gZGlmZmVyZW5jZSA+IDAgP1xuICAgICAgICA3IC0gZGlmZmVyZW5jZSA6IC0gZGlmZmVyZW5jZSxcbiAgICAgIGZpcnN0RGF0ZSA9IG5ldyBEYXRlKGZpcnN0RGF5T2ZNb250aCk7XG5cbiAgICBpZiAobnVtRGlzcGxheWVkRnJvbVByZXZpb3VzTW9udGggPiAwKSB7XG4gICAgICBmaXJzdERhdGUuc2V0RGF0ZSgtbnVtRGlzcGxheWVkRnJvbVByZXZpb3VzTW9udGggKyAxKTtcbiAgICB9XG5cbiAgICAvLyA0MiBpcyB0aGUgbnVtYmVyIG9mIGRheXMgb24gYSBzaXgtd2VlayBjYWxlbmRhclxuICAgIHZhciBkYXlzID0gdGhpcy5nZXREYXRlcyhmaXJzdERhdGUsIDQyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQyOyBpICsrKSB7XG4gICAgICBkYXlzW2ldID0gYW5ndWxhci5leHRlbmQodGhpcy5jcmVhdGVEYXRlT2JqZWN0KGRheXNbaV0sIHRoaXMuZm9ybWF0RGF5KSwge1xuICAgICAgICBzZWNvbmRhcnk6IGRheXNbaV0uZ2V0TW9udGgoKSAhPT0gbW9udGgsXG4gICAgICAgIHVpZDogc2NvcGUudW5pcXVlSWQgKyAnLScgKyBpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzY29wZS5sYWJlbHMgPSBuZXcgQXJyYXkoNyk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCA3OyBqKyspIHtcbiAgICAgIHNjb3BlLmxhYmVsc1tqXSA9IHtcbiAgICAgICAgYWJicjogZGF0ZUZpbHRlcihkYXlzW2pdLmRhdGUsIHRoaXMuZm9ybWF0RGF5SGVhZGVyKSxcbiAgICAgICAgZnVsbDogZGF0ZUZpbHRlcihkYXlzW2pdLmRhdGUsICdFRUVFJylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgc2NvcGUudGl0bGUgPSBkYXRlRmlsdGVyKHRoaXMuYWN0aXZlRGF0ZSwgdGhpcy5mb3JtYXREYXlUaXRsZSk7XG4gICAgc2NvcGUucm93cyA9IHRoaXMuc3BsaXQoZGF5cywgNyk7XG5cbiAgICBpZiAoc2NvcGUuc2hvd1dlZWtzKSB7XG4gICAgICBzY29wZS53ZWVrTnVtYmVycyA9IFtdO1xuICAgICAgdmFyIHRodXJzZGF5SW5kZXggPSAoNCArIDcgLSB0aGlzLnN0YXJ0aW5nRGF5KSAlIDcsXG4gICAgICAgICAgbnVtV2Vla3MgPSBzY29wZS5yb3dzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGN1cldlZWsgPSAwOyBjdXJXZWVrIDwgbnVtV2Vla3M7IGN1cldlZWsrKykge1xuICAgICAgICBzY29wZS53ZWVrTnVtYmVycy5wdXNoKFxuICAgICAgICAgIGdldElTTzg2MDFXZWVrTnVtYmVyKHNjb3BlLnJvd3NbY3VyV2Vla11bdGh1cnNkYXlJbmRleF0uZGF0ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB0aGlzLmNvbXBhcmUgPSBmdW5jdGlvbihkYXRlMSwgZGF0ZTIpIHtcbiAgICB2YXIgX2RhdGUxID0gbmV3IERhdGUoZGF0ZTEuZ2V0RnVsbFllYXIoKSwgZGF0ZTEuZ2V0TW9udGgoKSwgZGF0ZTEuZ2V0RGF0ZSgpKTtcbiAgICB2YXIgX2RhdGUyID0gbmV3IERhdGUoZGF0ZTIuZ2V0RnVsbFllYXIoKSwgZGF0ZTIuZ2V0TW9udGgoKSwgZGF0ZTIuZ2V0RGF0ZSgpKTtcbiAgICBfZGF0ZTEuc2V0RnVsbFllYXIoZGF0ZTEuZ2V0RnVsbFllYXIoKSk7XG4gICAgX2RhdGUyLnNldEZ1bGxZZWFyKGRhdGUyLmdldEZ1bGxZZWFyKCkpO1xuICAgIHJldHVybiBfZGF0ZTEgLSBfZGF0ZTI7XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0SVNPODYwMVdlZWtOdW1iZXIoZGF0ZSkge1xuICAgIHZhciBjaGVja0RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICBjaGVja0RhdGUuc2V0RGF0ZShjaGVja0RhdGUuZ2V0RGF0ZSgpICsgNCAtIChjaGVja0RhdGUuZ2V0RGF5KCkgfHwgNykpOyAvLyBUaHVyc2RheVxuICAgIHZhciB0aW1lID0gY2hlY2tEYXRlLmdldFRpbWUoKTtcbiAgICBjaGVja0RhdGUuc2V0TW9udGgoMCk7IC8vIENvbXBhcmUgd2l0aCBKYW4gMVxuICAgIGNoZWNrRGF0ZS5zZXREYXRlKDEpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucm91bmQoKHRpbWUgLSBjaGVja0RhdGUpIC8gODY0MDAwMDApIC8gNykgKyAxO1xuICB9XG5cbiAgdGhpcy5oYW5kbGVLZXlEb3duID0gZnVuY3Rpb24oa2V5LCBldnQpIHtcbiAgICB2YXIgZGF0ZSA9IHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCk7XG5cbiAgICBpZiAoa2V5ID09PSAnbGVmdCcpIHtcbiAgICAgIGRhdGUgPSBkYXRlIC0gMTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3VwJykge1xuICAgICAgZGF0ZSA9IGRhdGUgLSA3O1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncmlnaHQnKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdkb3duJykge1xuICAgICAgZGF0ZSA9IGRhdGUgKyA3O1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncGFnZXVwJyB8fCBrZXkgPT09ICdwYWdlZG93bicpIHtcbiAgICAgIHZhciBtb250aCA9IHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgKGtleSA9PT0gJ3BhZ2V1cCcgPyAtIDEgOiAxKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZS5zZXRNb250aChtb250aCwgMSk7XG4gICAgICBkYXRlID0gTWF0aC5taW4oZ2V0RGF5c0luTW9udGgodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpKSwgZGF0ZSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdob21lJykge1xuICAgICAgZGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdlbmQnKSB7XG4gICAgICBkYXRlID0gZ2V0RGF5c0luTW9udGgodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVEYXRlLnNldERhdGUoZGF0ZSk7XG4gIH07XG59XSlcblxuLmNvbnRyb2xsZXIoJ1VpYk1vbnRocGlja2VyQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRlbGVtZW50JywgJ2RhdGVGaWx0ZXInLCBmdW5jdGlvbihzY29wZSwgJGVsZW1lbnQsIGRhdGVGaWx0ZXIpIHtcbiAgdGhpcy5zdGVwID0geyB5ZWFyczogMSB9O1xuICB0aGlzLmVsZW1lbnQgPSAkZWxlbWVudDtcblxuICB0aGlzLmluaXQgPSBmdW5jdGlvbihjdHJsKSB7XG4gICAgYW5ndWxhci5leHRlbmQoY3RybCwgdGhpcyk7XG4gICAgY3RybC5yZWZyZXNoVmlldygpO1xuICB9O1xuXG4gIHRoaXMuX3JlZnJlc2hWaWV3ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG1vbnRocyA9IG5ldyBBcnJheSgxMiksXG4gICAgICAgIHllYXIgPSB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgZGF0ZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIGksIDEpO1xuICAgICAgbW9udGhzW2ldID0gYW5ndWxhci5leHRlbmQodGhpcy5jcmVhdGVEYXRlT2JqZWN0KGRhdGUsIHRoaXMuZm9ybWF0TW9udGgpLCB7XG4gICAgICAgIHVpZDogc2NvcGUudW5pcXVlSWQgKyAnLScgKyBpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzY29wZS50aXRsZSA9IGRhdGVGaWx0ZXIodGhpcy5hY3RpdmVEYXRlLCB0aGlzLmZvcm1hdE1vbnRoVGl0bGUpO1xuICAgIHNjb3BlLnJvd3MgPSB0aGlzLnNwbGl0KG1vbnRocywgdGhpcy5tb250aENvbHVtbnMpO1xuICAgIHNjb3BlLnllYXJIZWFkZXJDb2xzcGFuID0gdGhpcy5tb250aENvbHVtbnMgPiAzID8gdGhpcy5tb250aENvbHVtbnMgLSAyIDogMTtcbiAgfTtcblxuICB0aGlzLmNvbXBhcmUgPSBmdW5jdGlvbihkYXRlMSwgZGF0ZTIpIHtcbiAgICB2YXIgX2RhdGUxID0gbmV3IERhdGUoZGF0ZTEuZ2V0RnVsbFllYXIoKSwgZGF0ZTEuZ2V0TW9udGgoKSk7XG4gICAgdmFyIF9kYXRlMiA9IG5ldyBEYXRlKGRhdGUyLmdldEZ1bGxZZWFyKCksIGRhdGUyLmdldE1vbnRoKCkpO1xuICAgIF9kYXRlMS5zZXRGdWxsWWVhcihkYXRlMS5nZXRGdWxsWWVhcigpKTtcbiAgICBfZGF0ZTIuc2V0RnVsbFllYXIoZGF0ZTIuZ2V0RnVsbFllYXIoKSk7XG4gICAgcmV0dXJuIF9kYXRlMSAtIF9kYXRlMjtcbiAgfTtcblxuICB0aGlzLmhhbmRsZUtleURvd24gPSBmdW5jdGlvbihrZXksIGV2dCkge1xuICAgIHZhciBkYXRlID0gdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCk7XG5cbiAgICBpZiAoa2V5ID09PSAnbGVmdCcpIHtcbiAgICAgIGRhdGUgPSBkYXRlIC0gMTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3VwJykge1xuICAgICAgZGF0ZSA9IGRhdGUgLSB0aGlzLm1vbnRoQ29sdW1ucztcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgZGF0ZSA9IGRhdGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZG93bicpIHtcbiAgICAgIGRhdGUgPSBkYXRlICsgdGhpcy5tb250aENvbHVtbnM7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYWdldXAnIHx8IGtleSA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgdmFyIHllYXIgPSB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSArIChrZXkgPT09ICdwYWdldXAnID8gLSAxIDogMSk7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoeWVhcik7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdob21lJykge1xuICAgICAgZGF0ZSA9IDA7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdlbmQnKSB7XG4gICAgICBkYXRlID0gMTE7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRGF0ZS5zZXRNb250aChkYXRlKTtcbiAgfTtcbn1dKVxuXG4uY29udHJvbGxlcignVWliWWVhcnBpY2tlckNvbnRyb2xsZXInLCBbJyRzY29wZScsICckZWxlbWVudCcsICdkYXRlRmlsdGVyJywgZnVuY3Rpb24oc2NvcGUsICRlbGVtZW50LCBkYXRlRmlsdGVyKSB7XG4gIHZhciBjb2x1bW5zLCByYW5nZTtcbiAgdGhpcy5lbGVtZW50ID0gJGVsZW1lbnQ7XG5cbiAgZnVuY3Rpb24gZ2V0U3RhcnRpbmdZZWFyKHllYXIpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoKHllYXIgLSAxKSAvIHJhbmdlLCAxMCkgKiByYW5nZSArIDE7XG4gIH1cblxuICB0aGlzLnllYXJwaWNrZXJJbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29sdW1ucyA9IHRoaXMueWVhckNvbHVtbnM7XG4gICAgcmFuZ2UgPSB0aGlzLnllYXJSb3dzICogY29sdW1ucztcbiAgICB0aGlzLnN0ZXAgPSB7IHllYXJzOiByYW5nZSB9O1xuICB9O1xuXG4gIHRoaXMuX3JlZnJlc2hWaWV3ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHllYXJzID0gbmV3IEFycmF5KHJhbmdlKSwgZGF0ZTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBzdGFydCA9IGdldFN0YXJ0aW5nWWVhcih0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk7IGkgPCByYW5nZTsgaSsrKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgIGRhdGUuc2V0RnVsbFllYXIoc3RhcnQgKyBpLCAwLCAxKTtcbiAgICAgIHllYXJzW2ldID0gYW5ndWxhci5leHRlbmQodGhpcy5jcmVhdGVEYXRlT2JqZWN0KGRhdGUsIHRoaXMuZm9ybWF0WWVhciksIHtcbiAgICAgICAgdWlkOiBzY29wZS51bmlxdWVJZCArICctJyArIGlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNjb3BlLnRpdGxlID0gW3llYXJzWzBdLmxhYmVsLCB5ZWFyc1tyYW5nZSAtIDFdLmxhYmVsXS5qb2luKCcgLSAnKTtcbiAgICBzY29wZS5yb3dzID0gdGhpcy5zcGxpdCh5ZWFycywgY29sdW1ucyk7XG4gICAgc2NvcGUuY29sdW1ucyA9IGNvbHVtbnM7XG4gIH07XG5cbiAgdGhpcy5jb21wYXJlID0gZnVuY3Rpb24oZGF0ZTEsIGRhdGUyKSB7XG4gICAgcmV0dXJuIGRhdGUxLmdldEZ1bGxZZWFyKCkgLSBkYXRlMi5nZXRGdWxsWWVhcigpO1xuICB9O1xuXG4gIHRoaXMuaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uKGtleSwgZXZ0KSB7XG4gICAgdmFyIGRhdGUgPSB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgIGlmIChrZXkgPT09ICdsZWZ0Jykge1xuICAgICAgZGF0ZSA9IGRhdGUgLSAxO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndXAnKSB7XG4gICAgICBkYXRlID0gZGF0ZSAtIGNvbHVtbnM7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdyaWdodCcpIHtcbiAgICAgIGRhdGUgPSBkYXRlICsgMTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2Rvd24nKSB7XG4gICAgICBkYXRlID0gZGF0ZSArIGNvbHVtbnM7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYWdldXAnIHx8IGtleSA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgZGF0ZSArPSAoa2V5ID09PSAncGFnZXVwJyA/IC0gMSA6IDEpICogcmFuZ2U7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdob21lJykge1xuICAgICAgZGF0ZSA9IGdldFN0YXJ0aW5nWWVhcih0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdlbmQnKSB7XG4gICAgICBkYXRlID0gZ2V0U3RhcnRpbmdZZWFyKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKSArIHJhbmdlIC0gMTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVEYXRlLnNldEZ1bGxZZWFyKGRhdGUpO1xuICB9O1xufV0pXG5cbi5kaXJlY3RpdmUoJ3VpYkRhdGVwaWNrZXInLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZW1wbGF0ZVVybDogZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIHJldHVybiBhdHRycy50ZW1wbGF0ZVVybCB8fCAndWliL3RlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sJztcbiAgICB9LFxuICAgIHNjb3BlOiB7XG4gICAgICBkYXRlcGlja2VyT3B0aW9uczogJz0/J1xuICAgIH0sXG4gICAgcmVxdWlyZTogWyd1aWJEYXRlcGlja2VyJywgJ15uZ01vZGVsJ10sXG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICBjb250cm9sbGVyOiAnVWliRGF0ZXBpY2tlckNvbnRyb2xsZXInLFxuICAgIGNvbnRyb2xsZXJBczogJ2RhdGVwaWNrZXInLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMpIHtcbiAgICAgIHZhciBkYXRlcGlja2VyQ3RybCA9IGN0cmxzWzBdLCBuZ01vZGVsQ3RybCA9IGN0cmxzWzFdO1xuXG4gICAgICBkYXRlcGlja2VyQ3RybC5pbml0KG5nTW9kZWxDdHJsKTtcbiAgICB9XG4gIH07XG59KVxuXG4uZGlyZWN0aXZlKCd1aWJEYXlwaWNrZXInLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZW1wbGF0ZVVybDogZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIHJldHVybiBhdHRycy50ZW1wbGF0ZVVybCB8fCAndWliL3RlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwnO1xuICAgIH0sXG4gICAgcmVxdWlyZTogWydedWliRGF0ZXBpY2tlcicsICd1aWJEYXlwaWNrZXInXSxcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIGNvbnRyb2xsZXI6ICdVaWJEYXlwaWNrZXJDb250cm9sbGVyJyxcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGN0cmxzKSB7XG4gICAgICB2YXIgZGF0ZXBpY2tlckN0cmwgPSBjdHJsc1swXSxcbiAgICAgICAgZGF5cGlja2VyQ3RybCA9IGN0cmxzWzFdO1xuXG4gICAgICBkYXlwaWNrZXJDdHJsLmluaXQoZGF0ZXBpY2tlckN0cmwpO1xuICAgIH1cbiAgfTtcbn0pXG5cbi5kaXJlY3RpdmUoJ3VpYk1vbnRocGlja2VyJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgdGVtcGxhdGVVcmw6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICByZXR1cm4gYXR0cnMudGVtcGxhdGVVcmwgfHwgJ3VpYi90ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwnO1xuICAgIH0sXG4gICAgcmVxdWlyZTogWydedWliRGF0ZXBpY2tlcicsICd1aWJNb250aHBpY2tlciddLFxuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgY29udHJvbGxlcjogJ1VpYk1vbnRocGlja2VyQ29udHJvbGxlcicsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBjdHJscykge1xuICAgICAgdmFyIGRhdGVwaWNrZXJDdHJsID0gY3RybHNbMF0sXG4gICAgICAgIG1vbnRocGlja2VyQ3RybCA9IGN0cmxzWzFdO1xuXG4gICAgICBtb250aHBpY2tlckN0cmwuaW5pdChkYXRlcGlja2VyQ3RybCk7XG4gICAgfVxuICB9O1xufSlcblxuLmRpcmVjdGl2ZSgndWliWWVhcnBpY2tlcicsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHRlbXBsYXRlVXJsOiBmdW5jdGlvbihlbGVtZW50LCBhdHRycykge1xuICAgICAgcmV0dXJuIGF0dHJzLnRlbXBsYXRlVXJsIHx8ICd1aWIvdGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwnO1xuICAgIH0sXG4gICAgcmVxdWlyZTogWydedWliRGF0ZXBpY2tlcicsICd1aWJZZWFycGlja2VyJ10sXG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICBjb250cm9sbGVyOiAnVWliWWVhcnBpY2tlckNvbnRyb2xsZXInLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMpIHtcbiAgICAgIHZhciBjdHJsID0gY3RybHNbMF07XG4gICAgICBhbmd1bGFyLmV4dGVuZChjdHJsLCBjdHJsc1sxXSk7XG4gICAgICBjdHJsLnllYXJwaWNrZXJJbml0KCk7XG5cbiAgICAgIGN0cmwucmVmcmVzaFZpZXcoKTtcbiAgICB9XG4gIH07XG59KTtcblxuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5wb3NpdGlvbicsIFtdKVxuXG4vKipcbiAqIEEgc2V0IG9mIHV0aWxpdHkgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIHRoZSBET00uXG4gKiBJdCBpcyBtZWFudCB0byBiZSB1c2VkIHdoZXJlIHdlIG5lZWQgdG8gYWJzb2x1dGUtcG9zaXRpb24gZWxlbWVudHMgaW5cbiAqIHJlbGF0aW9uIHRvIGFub3RoZXIgZWxlbWVudCAodGhpcyBpcyB0aGUgY2FzZSBmb3IgdG9vbHRpcHMsIHBvcG92ZXJzLFxuICogdHlwZWFoZWFkIHN1Z2dlc3Rpb25zIGV0Yy4pLlxuICovXG4gIC5mYWN0b3J5KCckdWliUG9zaXRpb24nLCBbJyRkb2N1bWVudCcsICckd2luZG93JywgZnVuY3Rpb24oJGRvY3VtZW50LCAkd2luZG93KSB7XG4gICAgLyoqXG4gICAgICogVXNlZCBieSBzY3JvbGxiYXJXaWR0aCgpIGZ1bmN0aW9uIHRvIGNhY2hlIHNjcm9sbGJhcidzIHdpZHRoLlxuICAgICAqIERvIG5vdCBhY2Nlc3MgdGhpcyB2YXJpYWJsZSBkaXJlY3RseSwgdXNlIHNjcm9sbGJhcldpZHRoKCkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICB2YXIgU0NST0xMQkFSX1dJRFRIO1xuICAgIC8qKlxuICAgICAqIHNjcm9sbGJhciBvbiBib2R5IGFuZCBodG1sIGVsZW1lbnQgaW4gSUUgYW5kIEVkZ2Ugb3ZlcmxheVxuICAgICAqIGNvbnRlbnQgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIDAgd2lkdGguXG4gICAgICovXG4gICAgdmFyIEJPRFlfU0NST0xMQkFSX1dJRFRIO1xuICAgIHZhciBPVkVSRkxPV19SRUdFWCA9IHtcbiAgICAgIG5vcm1hbDogLyhhdXRvfHNjcm9sbCkvLFxuICAgICAgaGlkZGVuOiAvKGF1dG98c2Nyb2xsfGhpZGRlbikvXG4gICAgfTtcbiAgICB2YXIgUExBQ0VNRU5UX1JFR0VYID0ge1xuICAgICAgYXV0bzogL1xccz9hdXRvP1xccz8vaSxcbiAgICAgIHByaW1hcnk6IC9eKHRvcHxib3R0b218bGVmdHxyaWdodCkkLyxcbiAgICAgIHNlY29uZGFyeTogL14odG9wfGJvdHRvbXxsZWZ0fHJpZ2h0fGNlbnRlcikkLyxcbiAgICAgIHZlcnRpY2FsOiAvXih0b3B8Ym90dG9tKSQvXG4gICAgfTtcbiAgICB2YXIgQk9EWV9SRUdFWCA9IC8oSFRNTHxCT0RZKS87XG5cbiAgICByZXR1cm4ge1xuXG4gICAgICAvKipcbiAgICAgICAqIFByb3ZpZGVzIGEgcmF3IERPTSBlbGVtZW50IGZyb20gYSBqUXVlcnkvalFMaXRlIGVsZW1lbnQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtlbGVtZW50fSBlbGVtIC0gVGhlIGVsZW1lbnQgdG8gY29udmVydC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7ZWxlbWVudH0gQSBIVE1MIGVsZW1lbnQuXG4gICAgICAgKi9cbiAgICAgIGdldFJhd05vZGU6IGZ1bmN0aW9uKGVsZW0pIHtcbiAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgPyBlbGVtIDogZWxlbVswXSB8fCBlbGVtO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBQcm92aWRlcyBhIHBhcnNlZCBudW1iZXIgZm9yIGEgc3R5bGUgcHJvcGVydHkuICBTdHJpcHNcbiAgICAgICAqIHVuaXRzIGFuZCBjYXN0cyBpbnZhbGlkIG51bWJlcnMgdG8gMC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBUaGUgc3R5bGUgdmFsdWUgdG8gcGFyc2UuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge251bWJlcn0gQSB2YWxpZCBudW1iZXIuXG4gICAgICAgKi9cbiAgICAgIHBhcnNlU3R5bGU6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IDA7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFByb3ZpZGVzIHRoZSBjbG9zZXN0IHBvc2l0aW9uZWQgYW5jZXN0b3IuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtlbGVtZW50fSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gZ2V0IHRoZSBvZmZlc3QgcGFyZW50IGZvci5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7ZWxlbWVudH0gVGhlIGNsb3Nlc3QgcG9zaXRpb25lZCBhbmNlc3Rvci5cbiAgICAgICAqL1xuICAgICAgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbihlbGVtKSB7XG4gICAgICAgIGVsZW0gPSB0aGlzLmdldFJhd05vZGUoZWxlbSk7XG5cbiAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8ICRkb2N1bWVudFswXS5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgZnVuY3Rpb24gaXNTdGF0aWNQb3NpdGlvbmVkKGVsKSB7XG4gICAgICAgICAgcmV0dXJuICgkd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLnBvc2l0aW9uIHx8ICdzdGF0aWMnKSA9PT0gJ3N0YXRpYyc7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gJGRvY3VtZW50WzBdLmRvY3VtZW50RWxlbWVudCAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8ICRkb2N1bWVudFswXS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFByb3ZpZGVzIHRoZSBzY3JvbGxiYXIgd2lkdGgsIGNvbmNlcHQgZnJvbSBUV0JTIG1lYXN1cmVTY3JvbGxiYXIoKVxuICAgICAgICogZnVuY3Rpb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL2pzL21vZGFsLmpzXG4gICAgICAgKiBJbiBJRSBhbmQgRWRnZSwgc2NvbGxiYXIgb24gYm9keSBhbmQgaHRtbCBlbGVtZW50IG92ZXJsYXkgYW5kIHNob3VsZFxuICAgICAgICogcmV0dXJuIGEgd2lkdGggb2YgMC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgd2lkdGggb2YgdGhlIGJyb3dzZXIgc2NvbGxiYXIuXG4gICAgICAgKi9cbiAgICAgIHNjcm9sbGJhcldpZHRoOiBmdW5jdGlvbihpc0JvZHkpIHtcbiAgICAgICAgaWYgKGlzQm9keSkge1xuICAgICAgICAgIGlmIChhbmd1bGFyLmlzVW5kZWZpbmVkKEJPRFlfU0NST0xMQkFSX1dJRFRIKSkge1xuICAgICAgICAgICAgdmFyIGJvZHlFbGVtID0gJGRvY3VtZW50LmZpbmQoJ2JvZHknKTtcbiAgICAgICAgICAgIGJvZHlFbGVtLmFkZENsYXNzKCd1aWItcG9zaXRpb24tYm9keS1zY3JvbGxiYXItbWVhc3VyZScpO1xuICAgICAgICAgICAgQk9EWV9TQ1JPTExCQVJfV0lEVEggPSAkd2luZG93LmlubmVyV2lkdGggLSBib2R5RWxlbVswXS5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIEJPRFlfU0NST0xMQkFSX1dJRFRIID0gaXNGaW5pdGUoQk9EWV9TQ1JPTExCQVJfV0lEVEgpID8gQk9EWV9TQ1JPTExCQVJfV0lEVEggOiAwO1xuICAgICAgICAgICAgYm9keUVsZW0ucmVtb3ZlQ2xhc3MoJ3VpYi1wb3NpdGlvbi1ib2R5LXNjcm9sbGJhci1tZWFzdXJlJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBCT0RZX1NDUk9MTEJBUl9XSURUSDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbmd1bGFyLmlzVW5kZWZpbmVkKFNDUk9MTEJBUl9XSURUSCkpIHtcbiAgICAgICAgICB2YXIgc2Nyb2xsRWxlbSA9IGFuZ3VsYXIuZWxlbWVudCgnPGRpdiBjbGFzcz1cInVpYi1wb3NpdGlvbi1zY3JvbGxiYXItbWVhc3VyZVwiPjwvZGl2PicpO1xuICAgICAgICAgICRkb2N1bWVudC5maW5kKCdib2R5JykuYXBwZW5kKHNjcm9sbEVsZW0pO1xuICAgICAgICAgIFNDUk9MTEJBUl9XSURUSCA9IHNjcm9sbEVsZW1bMF0ub2Zmc2V0V2lkdGggLSBzY3JvbGxFbGVtWzBdLmNsaWVudFdpZHRoO1xuICAgICAgICAgIFNDUk9MTEJBUl9XSURUSCA9IGlzRmluaXRlKFNDUk9MTEJBUl9XSURUSCkgPyBTQ1JPTExCQVJfV0lEVEggOiAwO1xuICAgICAgICAgIHNjcm9sbEVsZW0ucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU0NST0xMQkFSX1dJRFRIO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBQcm92aWRlcyB0aGUgcGFkZGluZyByZXF1aXJlZCBvbiBhbiBlbGVtZW50IHRvIHJlcGxhY2UgdGhlIHNjcm9sbGJhci5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgICAgKiAgIDx1bD5cbiAgICAgICAqICAgICA8bGk+KipzY3JvbGxiYXJXaWR0aCoqOiB0aGUgd2lkdGggb2YgdGhlIHNjcm9sbGJhcjwvbGk+XG4gICAgICAgKiAgICAgPGxpPioqd2lkdGhPdmVyZmxvdyoqOiB3aGV0aGVyIHRoZSB0aGUgd2lkdGggaXMgb3ZlcmZsb3dpbmc8L2xpPlxuICAgICAgICogICAgIDxsaT4qKnJpZ2h0Kio6IHRoZSBhbW91bnQgb2YgcmlnaHQgcGFkZGluZyBvbiB0aGUgZWxlbWVudCBuZWVkZWQgdG8gcmVwbGFjZSB0aGUgc2Nyb2xsYmFyPC9saT5cbiAgICAgICAqICAgICA8bGk+KipyaWdodE9yaWdpbmFsKio6IHRoZSBhbW91bnQgb2YgcmlnaHQgcGFkZGluZyBjdXJyZW50bHkgb24gdGhlIGVsZW1lbnQ8L2xpPlxuICAgICAgICogICAgIDxsaT4qKmhlaWdodE92ZXJmbG93Kio6IHdoZXRoZXIgdGhlIHRoZSBoZWlnaHQgaXMgb3ZlcmZsb3dpbmc8L2xpPlxuICAgICAgICogICAgIDxsaT4qKmJvdHRvbSoqOiB0aGUgYW1vdW50IG9mIGJvdHRvbSBwYWRkaW5nIG9uIHRoZSBlbGVtZW50IG5lZWRlZCB0byByZXBsYWNlIHRoZSBzY3JvbGxiYXI8L2xpPlxuICAgICAgICogICAgIDxsaT4qKmJvdHRvbU9yaWdpbmFsKio6IHRoZSBhbW91bnQgb2YgYm90dG9tIHBhZGRpbmcgY3VycmVudGx5IG9uIHRoZSBlbGVtZW50PC9saT5cbiAgICAgICAqICAgPC91bD5cbiAgICAgICAqL1xuICAgICAgc2Nyb2xsYmFyUGFkZGluZzogZnVuY3Rpb24oZWxlbSkge1xuICAgICAgICBlbGVtID0gdGhpcy5nZXRSYXdOb2RlKGVsZW0pO1xuXG4gICAgICAgIHZhciBlbGVtU3R5bGUgPSAkd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbSk7XG4gICAgICAgIHZhciBwYWRkaW5nUmlnaHQgPSB0aGlzLnBhcnNlU3R5bGUoZWxlbVN0eWxlLnBhZGRpbmdSaWdodCk7XG4gICAgICAgIHZhciBwYWRkaW5nQm90dG9tID0gdGhpcy5wYXJzZVN0eWxlKGVsZW1TdHlsZS5wYWRkaW5nQm90dG9tKTtcbiAgICAgICAgdmFyIHNjcm9sbFBhcmVudCA9IHRoaXMuc2Nyb2xsUGFyZW50KGVsZW0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgdmFyIHNjcm9sbGJhcldpZHRoID0gdGhpcy5zY3JvbGxiYXJXaWR0aChCT0RZX1JFR0VYLnRlc3Qoc2Nyb2xsUGFyZW50LnRhZ05hbWUpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbGJhcldpZHRoOiBzY3JvbGxiYXJXaWR0aCxcbiAgICAgICAgICB3aWR0aE92ZXJmbG93OiBzY3JvbGxQYXJlbnQuc2Nyb2xsV2lkdGggPiBzY3JvbGxQYXJlbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgcmlnaHQ6IHBhZGRpbmdSaWdodCArIHNjcm9sbGJhcldpZHRoLFxuICAgICAgICAgIG9yaWdpbmFsUmlnaHQ6IHBhZGRpbmdSaWdodCxcbiAgICAgICAgICBoZWlnaHRPdmVyZmxvdzogc2Nyb2xsUGFyZW50LnNjcm9sbEhlaWdodCA+IHNjcm9sbFBhcmVudC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgYm90dG9tOiBwYWRkaW5nQm90dG9tICsgc2Nyb2xsYmFyV2lkdGgsXG4gICAgICAgICAgb3JpZ2luYWxCb3R0b206IHBhZGRpbmdCb3R0b21cbiAgICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGVsZW1lbnQgaXMgc2Nyb2xsYWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2VsZW1lbnR9IGVsZW0gLSBUaGUgZWxlbWVudCB0byBjaGVjay5cbiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IFtpbmNsdWRlSGlkZGVuPWZhbHNlXSAtIFNob3VsZCBzY3JvbGwgc3R5bGUgb2YgJ2hpZGRlbicgYmUgY29uc2lkZXJlZCxcbiAgICAgICAqICAgZGVmYXVsdCBpcyBmYWxzZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZWxlbWVudCBpcyBzY3JvbGxhYmxlLlxuICAgICAgICovXG4gICAgICBpc1Njcm9sbGFibGU6IGZ1bmN0aW9uKGVsZW0sIGluY2x1ZGVIaWRkZW4pIHtcbiAgICAgICAgZWxlbSA9IHRoaXMuZ2V0UmF3Tm9kZShlbGVtKTtcblxuICAgICAgICB2YXIgb3ZlcmZsb3dSZWdleCA9IGluY2x1ZGVIaWRkZW4gPyBPVkVSRkxPV19SRUdFWC5oaWRkZW4gOiBPVkVSRkxPV19SRUdFWC5ub3JtYWw7XG4gICAgICAgIHZhciBlbGVtU3R5bGUgPSAkd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbSk7XG4gICAgICAgIHJldHVybiBvdmVyZmxvd1JlZ2V4LnRlc3QoZWxlbVN0eWxlLm92ZXJmbG93ICsgZWxlbVN0eWxlLm92ZXJmbG93WSArIGVsZW1TdHlsZS5vdmVyZmxvd1gpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBQcm92aWRlcyB0aGUgY2xvc2VzdCBzY3JvbGxhYmxlIGFuY2VzdG9yLlxuICAgICAgICogQSBwb3J0IG9mIHRoZSBqUXVlcnkgVUkgc2Nyb2xsUGFyZW50IG1ldGhvZDpcbiAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5LXVpL2Jsb2IvbWFzdGVyL3VpL3Njcm9sbC1wYXJlbnQuanNcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2VsZW1lbnR9IGVsZW0gLSBUaGUgZWxlbWVudCB0byBmaW5kIHRoZSBzY3JvbGwgcGFyZW50IG9mLlxuICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gW2luY2x1ZGVIaWRkZW49ZmFsc2VdIC0gU2hvdWxkIHNjcm9sbCBzdHlsZSBvZiAnaGlkZGVuJyBiZSBjb25zaWRlcmVkLFxuICAgICAgICogICBkZWZhdWx0IGlzIGZhbHNlLlxuICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gW2luY2x1ZGVTZWxmPWZhbHNlXSAtIFNob3VsZCB0aGUgZWxlbWVudCBiZWluZyBwYXNzZWQgYmVcbiAgICAgICAqIGluY2x1ZGVkIGluIHRoZSBzY3JvbGxhYmxlIGxsb2t1cC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7ZWxlbWVudH0gQSBIVE1MIGVsZW1lbnQuXG4gICAgICAgKi9cbiAgICAgIHNjcm9sbFBhcmVudDogZnVuY3Rpb24oZWxlbSwgaW5jbHVkZUhpZGRlbiwgaW5jbHVkZVNlbGYpIHtcbiAgICAgICAgZWxlbSA9IHRoaXMuZ2V0UmF3Tm9kZShlbGVtKTtcblxuICAgICAgICB2YXIgb3ZlcmZsb3dSZWdleCA9IGluY2x1ZGVIaWRkZW4gPyBPVkVSRkxPV19SRUdFWC5oaWRkZW4gOiBPVkVSRkxPV19SRUdFWC5ub3JtYWw7XG4gICAgICAgIHZhciBkb2N1bWVudEVsID0gJGRvY3VtZW50WzBdLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgdmFyIGVsZW1TdHlsZSA9ICR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtKTtcbiAgICAgICAgaWYgKGluY2x1ZGVTZWxmICYmIG92ZXJmbG93UmVnZXgudGVzdChlbGVtU3R5bGUub3ZlcmZsb3cgKyBlbGVtU3R5bGUub3ZlcmZsb3dZICsgZWxlbVN0eWxlLm92ZXJmbG93WCkpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXhjbHVkZVN0YXRpYyA9IGVsZW1TdHlsZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJztcbiAgICAgICAgdmFyIHNjcm9sbFBhcmVudCA9IGVsZW0ucGFyZW50RWxlbWVudCB8fCBkb2N1bWVudEVsO1xuXG4gICAgICAgIGlmIChzY3JvbGxQYXJlbnQgPT09IGRvY3VtZW50RWwgfHwgZWxlbVN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50RWw7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoc2Nyb2xsUGFyZW50LnBhcmVudEVsZW1lbnQgJiYgc2Nyb2xsUGFyZW50ICE9PSBkb2N1bWVudEVsKSB7XG4gICAgICAgICAgdmFyIHNwU3R5bGUgPSAkd2luZG93LmdldENvbXB1dGVkU3R5bGUoc2Nyb2xsUGFyZW50KTtcbiAgICAgICAgICBpZiAoZXhjbHVkZVN0YXRpYyAmJiBzcFN0eWxlLnBvc2l0aW9uICE9PSAnc3RhdGljJykge1xuICAgICAgICAgICAgZXhjbHVkZVN0YXRpYyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZXhjbHVkZVN0YXRpYyAmJiBvdmVyZmxvd1JlZ2V4LnRlc3Qoc3BTdHlsZS5vdmVyZmxvdyArIHNwU3R5bGUub3ZlcmZsb3dZICsgc3BTdHlsZS5vdmVyZmxvd1gpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsUGFyZW50ID0gc2Nyb2xsUGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2Nyb2xsUGFyZW50O1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBQcm92aWRlcyByZWFkLW9ubHkgZXF1aXZhbGVudCBvZiBqUXVlcnkncyBwb3NpdGlvbiBmdW5jdGlvbjpcbiAgICAgICAqIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9wb3NpdGlvbi8gLSBkaXN0YW5jZSB0byBjbG9zZXN0IHBvc2l0aW9uZWRcbiAgICAgICAqIGFuY2VzdG9yLiAgRG9lcyBub3QgYWNjb3VudCBmb3IgbWFyZ2lucyBieSBkZWZhdWx0IGxpa2UgalF1ZXJ5IHBvc2l0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7ZWxlbWVudH0gZWxlbSAtIFRoZSBlbGVtZW50IHRvIGNhY2x1bGF0ZSB0aGUgcG9zaXRpb24gb24uXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBbaW5jbHVkZU1hcmdpbnM9ZmFsc2VdIC0gU2hvdWxkIG1hcmdpbnMgYmUgYWNjb3VudGVkXG4gICAgICAgKiBmb3IsIGRlZmF1bHQgaXMgZmFsc2UuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgICAgICogICA8dWw+XG4gICAgICAgKiAgICAgPGxpPioqd2lkdGgqKjogdGhlIHdpZHRoIG9mIHRoZSBlbGVtZW50PC9saT5cbiAgICAgICAqICAgICA8bGk+KipoZWlnaHQqKjogdGhlIGhlaWdodCBvZiB0aGUgZWxlbWVudDwvbGk+XG4gICAgICAgKiAgICAgPGxpPioqdG9wKio6IGRpc3RhbmNlIHRvIHRvcCBlZGdlIG9mIG9mZnNldCBwYXJlbnQ8L2xpPlxuICAgICAgICogICAgIDxsaT4qKmxlZnQqKjogZGlzdGFuY2UgdG8gbGVmdCBlZGdlIG9mIG9mZnNldCBwYXJlbnQ8L2xpPlxuICAgICAgICogICA8L3VsPlxuICAgICAgICovXG4gICAgICBwb3NpdGlvbjogZnVuY3Rpb24oZWxlbSwgaW5jbHVkZU1hZ2lucykge1xuICAgICAgICBlbGVtID0gdGhpcy5nZXRSYXdOb2RlKGVsZW0pO1xuXG4gICAgICAgIHZhciBlbGVtT2Zmc2V0ID0gdGhpcy5vZmZzZXQoZWxlbSk7XG4gICAgICAgIGlmIChpbmNsdWRlTWFnaW5zKSB7XG4gICAgICAgICAgdmFyIGVsZW1TdHlsZSA9ICR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtKTtcbiAgICAgICAgICBlbGVtT2Zmc2V0LnRvcCAtPSB0aGlzLnBhcnNlU3R5bGUoZWxlbVN0eWxlLm1hcmdpblRvcCk7XG4gICAgICAgICAgZWxlbU9mZnNldC5sZWZ0IC09IHRoaXMucGFyc2VTdHlsZShlbGVtU3R5bGUubWFyZ2luTGVmdCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KGVsZW0pO1xuICAgICAgICB2YXIgcGFyZW50T2Zmc2V0ID0ge3RvcDogMCwgbGVmdDogMH07XG5cbiAgICAgICAgaWYgKHBhcmVudCAhPT0gJGRvY3VtZW50WzBdLmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgIHBhcmVudE9mZnNldCA9IHRoaXMub2Zmc2V0KHBhcmVudCk7XG4gICAgICAgICAgcGFyZW50T2Zmc2V0LnRvcCArPSBwYXJlbnQuY2xpZW50VG9wIC0gcGFyZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICBwYXJlbnRPZmZzZXQubGVmdCArPSBwYXJlbnQuY2xpZW50TGVmdCAtIHBhcmVudC5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3aWR0aDogTWF0aC5yb3VuZChhbmd1bGFyLmlzTnVtYmVyKGVsZW1PZmZzZXQud2lkdGgpID8gZWxlbU9mZnNldC53aWR0aCA6IGVsZW0ub2Zmc2V0V2lkdGgpLFxuICAgICAgICAgIGhlaWdodDogTWF0aC5yb3VuZChhbmd1bGFyLmlzTnVtYmVyKGVsZW1PZmZzZXQuaGVpZ2h0KSA/IGVsZW1PZmZzZXQuaGVpZ2h0IDogZWxlbS5vZmZzZXRIZWlnaHQpLFxuICAgICAgICAgIHRvcDogTWF0aC5yb3VuZChlbGVtT2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3ApLFxuICAgICAgICAgIGxlZnQ6IE1hdGgucm91bmQoZWxlbU9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQpXG4gICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFByb3ZpZGVzIHJlYWQtb25seSBlcXVpdmFsZW50IG9mIGpRdWVyeSdzIG9mZnNldCBmdW5jdGlvbjpcbiAgICAgICAqIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9vZmZzZXQvIC0gZGlzdGFuY2UgdG8gdmlld3BvcnQuICBEb2VzXG4gICAgICAgKiBub3QgYWNjb3VudCBmb3IgYm9yZGVycywgbWFyZ2lucywgb3IgcGFkZGluZyBvbiB0aGUgYm9keVxuICAgICAgICogZWxlbWVudC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2VsZW1lbnR9IGVsZW0gLSBUaGUgZWxlbWVudCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCBvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgICAgKiAgIDx1bD5cbiAgICAgICAqICAgICA8bGk+Kip3aWR0aCoqOiB0aGUgd2lkdGggb2YgdGhlIGVsZW1lbnQ8L2xpPlxuICAgICAgICogICAgIDxsaT4qKmhlaWdodCoqOiB0aGUgaGVpZ2h0IG9mIHRoZSBlbGVtZW50PC9saT5cbiAgICAgICAqICAgICA8bGk+Kip0b3AqKjogZGlzdGFuY2UgdG8gdG9wIGVkZ2Ugb2Ygdmlld3BvcnQ8L2xpPlxuICAgICAgICogICAgIDxsaT4qKnJpZ2h0Kio6IGRpc3RhbmNlIHRvIGJvdHRvbSBlZGdlIG9mIHZpZXdwb3J0PC9saT5cbiAgICAgICAqICAgPC91bD5cbiAgICAgICAqL1xuICAgICAgb2Zmc2V0OiBmdW5jdGlvbihlbGVtKSB7XG4gICAgICAgIGVsZW0gPSB0aGlzLmdldFJhd05vZGUoZWxlbSk7XG5cbiAgICAgICAgdmFyIGVsZW1CQ1IgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKGFuZ3VsYXIuaXNOdW1iZXIoZWxlbUJDUi53aWR0aCkgPyBlbGVtQkNSLndpZHRoIDogZWxlbS5vZmZzZXRXaWR0aCksXG4gICAgICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGFuZ3VsYXIuaXNOdW1iZXIoZWxlbUJDUi5oZWlnaHQpID8gZWxlbUJDUi5oZWlnaHQgOiBlbGVtLm9mZnNldEhlaWdodCksXG4gICAgICAgICAgdG9wOiBNYXRoLnJvdW5kKGVsZW1CQ1IudG9wICsgKCR3aW5kb3cucGFnZVlPZmZzZXQgfHwgJGRvY3VtZW50WzBdLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApKSxcbiAgICAgICAgICBsZWZ0OiBNYXRoLnJvdW5kKGVsZW1CQ1IubGVmdCArICgkd2luZG93LnBhZ2VYT2Zmc2V0IHx8ICRkb2N1bWVudFswXS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkpXG4gICAgICAgIH07XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFByb3ZpZGVzIG9mZnNldCBkaXN0YW5jZSB0byB0aGUgY2xvc2VzdCBzY3JvbGxhYmxlIGFuY2VzdG9yXG4gICAgICAgKiBvciB2aWV3cG9ydC4gIEFjY291bnRzIGZvciBib3JkZXIgYW5kIHNjcm9sbGJhciB3aWR0aC5cbiAgICAgICAqXG4gICAgICAgKiBSaWdodCBhbmQgYm90dG9tIGRpbWVuc2lvbnMgcmVwcmVzZW50IHRoZSBkaXN0YW5jZSB0byB0aGVcbiAgICAgICAqIHJlc3BlY3RpdmUgZWRnZSBvZiB0aGUgdmlld3BvcnQgZWxlbWVudC4gIElmIHRoZSBlbGVtZW50XG4gICAgICAgKiBlZGdlIGV4dGVuZHMgYmV5b25kIHRoZSB2aWV3cG9ydCwgYSBuZWdhdGl2ZSB2YWx1ZSB3aWxsIGJlXG4gICAgICAgKiByZXBvcnRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2VsZW1lbnR9IGVsZW0gLSBUaGUgZWxlbWVudCB0byBnZXQgdGhlIHZpZXdwb3J0IG9mZnNldCBmb3IuXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBbdXNlRG9jdW1lbnQ9ZmFsc2VdIC0gU2hvdWxkIHRoZSB2aWV3cG9ydCBiZSB0aGUgZG9jdW1lbnQgZWxlbWVudCBpbnN0ZWFkXG4gICAgICAgKiBvZiB0aGUgZmlyc3Qgc2Nyb2xsYWJsZSBlbGVtZW50LCBkZWZhdWx0IGlzIGZhbHNlLlxuICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gW2luY2x1ZGVQYWRkaW5nPXRydWVdIC0gU2hvdWxkIHRoZSBwYWRkaW5nIG9uIHRoZSBvZmZzZXQgcGFyZW50IGVsZW1lbnRcbiAgICAgICAqIGJlIGFjY291bnRlZCBmb3IsIGRlZmF1bHQgaXMgdHJ1ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgICAgKiAgIDx1bD5cbiAgICAgICAqICAgICA8bGk+Kip0b3AqKjogZGlzdGFuY2UgdG8gdGhlIHRvcCBjb250ZW50IGVkZ2Ugb2Ygdmlld3BvcnQgZWxlbWVudDwvbGk+XG4gICAgICAgKiAgICAgPGxpPioqYm90dG9tKio6IGRpc3RhbmNlIHRvIHRoZSBib3R0b20gY29udGVudCBlZGdlIG9mIHZpZXdwb3J0IGVsZW1lbnQ8L2xpPlxuICAgICAgICogICAgIDxsaT4qKmxlZnQqKjogZGlzdGFuY2UgdG8gdGhlIGxlZnQgY29udGVudCBlZGdlIG9mIHZpZXdwb3J0IGVsZW1lbnQ8L2xpPlxuICAgICAgICogICAgIDxsaT4qKnJpZ2h0Kio6IGRpc3RhbmNlIHRvIHRoZSByaWdodCBjb250ZW50IGVkZ2Ugb2Ygdmlld3BvcnQgZWxlbWVudDwvbGk+XG4gICAgICAgKiAgIDwvdWw+XG4gICAgICAgKi9cbiAgICAgIHZpZXdwb3J0T2Zmc2V0OiBmdW5jdGlvbihlbGVtLCB1c2VEb2N1bWVudCwgaW5jbHVkZVBhZGRpbmcpIHtcbiAgICAgICAgZWxlbSA9IHRoaXMuZ2V0UmF3Tm9kZShlbGVtKTtcbiAgICAgICAgaW5jbHVkZVBhZGRpbmcgPSBpbmNsdWRlUGFkZGluZyAhPT0gZmFsc2UgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgICAgdmFyIGVsZW1CQ1IgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB2YXIgb2Zmc2V0QkNSID0ge3RvcDogMCwgbGVmdDogMCwgYm90dG9tOiAwLCByaWdodDogMH07XG5cbiAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IHVzZURvY3VtZW50ID8gJGRvY3VtZW50WzBdLmRvY3VtZW50RWxlbWVudCA6IHRoaXMuc2Nyb2xsUGFyZW50KGVsZW0pO1xuICAgICAgICB2YXIgb2Zmc2V0UGFyZW50QkNSID0gb2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIG9mZnNldEJDUi50b3AgPSBvZmZzZXRQYXJlbnRCQ1IudG9wICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICAgICAgb2Zmc2V0QkNSLmxlZnQgPSBvZmZzZXRQYXJlbnRCQ1IubGVmdCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgICBpZiAob2Zmc2V0UGFyZW50ID09PSAkZG9jdW1lbnRbMF0uZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgb2Zmc2V0QkNSLnRvcCArPSAkd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgICAgICAgIG9mZnNldEJDUi5sZWZ0ICs9ICR3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0QkNSLmJvdHRvbSA9IG9mZnNldEJDUi50b3AgKyBvZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICBvZmZzZXRCQ1IucmlnaHQgPSBvZmZzZXRCQ1IubGVmdCArIG9mZnNldFBhcmVudC5jbGllbnRXaWR0aDtcblxuICAgICAgICBpZiAoaW5jbHVkZVBhZGRpbmcpIHtcbiAgICAgICAgICB2YXIgb2Zmc2V0UGFyZW50U3R5bGUgPSAkd2luZG93LmdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KTtcbiAgICAgICAgICBvZmZzZXRCQ1IudG9wICs9IHRoaXMucGFyc2VTdHlsZShvZmZzZXRQYXJlbnRTdHlsZS5wYWRkaW5nVG9wKTtcbiAgICAgICAgICBvZmZzZXRCQ1IuYm90dG9tIC09IHRoaXMucGFyc2VTdHlsZShvZmZzZXRQYXJlbnRTdHlsZS5wYWRkaW5nQm90dG9tKTtcbiAgICAgICAgICBvZmZzZXRCQ1IubGVmdCArPSB0aGlzLnBhcnNlU3R5bGUob2Zmc2V0UGFyZW50U3R5bGUucGFkZGluZ0xlZnQpO1xuICAgICAgICAgIG9mZnNldEJDUi5yaWdodCAtPSB0aGlzLnBhcnNlU3R5bGUob2Zmc2V0UGFyZW50U3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9wOiBNYXRoLnJvdW5kKGVsZW1CQ1IudG9wIC0gb2Zmc2V0QkNSLnRvcCksXG4gICAgICAgICAgYm90dG9tOiBNYXRoLnJvdW5kKG9mZnNldEJDUi5ib3R0b20gLSBlbGVtQkNSLmJvdHRvbSksXG4gICAgICAgICAgbGVmdDogTWF0aC5yb3VuZChlbGVtQkNSLmxlZnQgLSBvZmZzZXRCQ1IubGVmdCksXG4gICAgICAgICAgcmlnaHQ6IE1hdGgucm91bmQob2Zmc2V0QkNSLnJpZ2h0IC0gZWxlbUJDUi5yaWdodClcbiAgICAgICAgfTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogUHJvdmlkZXMgYW4gYXJyYXkgb2YgcGxhY2VtZW50IHZhbHVlcyBwYXJzZWQgZnJvbSBhIHBsYWNlbWVudCBzdHJpbmcuXG4gICAgICAgKiBBbG9uZyB3aXRoIHRoZSAnYXV0bycgaW5kaWNhdG9yLCBzdXBwb3J0ZWQgcGxhY2VtZW50IHN0cmluZ3MgYXJlOlxuICAgICAgICogICA8dWw+XG4gICAgICAgKiAgICAgPGxpPnRvcDogZWxlbWVudCBvbiB0b3AsIGhvcml6b250YWxseSBjZW50ZXJlZCBvbiBob3N0IGVsZW1lbnQuPC9saT5cbiAgICAgICAqICAgICA8bGk+dG9wLWxlZnQ6IGVsZW1lbnQgb24gdG9wLCBsZWZ0IGVkZ2UgYWxpZ25lZCB3aXRoIGhvc3QgZWxlbWVudCBsZWZ0IGVkZ2UuPC9saT5cbiAgICAgICAqICAgICA8bGk+dG9wLXJpZ2h0OiBlbGVtZW50IG9uIHRvcCwgbGVyaWdodGZ0IGVkZ2UgYWxpZ25lZCB3aXRoIGhvc3QgZWxlbWVudCByaWdodCBlZGdlLjwvbGk+XG4gICAgICAgKiAgICAgPGxpPmJvdHRvbTogZWxlbWVudCBvbiBib3R0b20sIGhvcml6b250YWxseSBjZW50ZXJlZCBvbiBob3N0IGVsZW1lbnQuPC9saT5cbiAgICAgICAqICAgICA8bGk+Ym90dG9tLWxlZnQ6IGVsZW1lbnQgb24gYm90dG9tLCBsZWZ0IGVkZ2UgYWxpZ25lZCB3aXRoIGhvc3QgZWxlbWVudCBsZWZ0IGVkZ2UuPC9saT5cbiAgICAgICAqICAgICA8bGk+Ym90dG9tLXJpZ2h0OiBlbGVtZW50IG9uIGJvdHRvbSwgcmlnaHQgZWRnZSBhbGlnbmVkIHdpdGggaG9zdCBlbGVtZW50IHJpZ2h0IGVkZ2UuPC9saT5cbiAgICAgICAqICAgICA8bGk+bGVmdDogZWxlbWVudCBvbiBsZWZ0LCB2ZXJ0aWNhbGx5IGNlbnRlcmVkIG9uIGhvc3QgZWxlbWVudC48L2xpPlxuICAgICAgICogICAgIDxsaT5sZWZ0LXRvcDogZWxlbWVudCBvbiBsZWZ0LCB0b3AgZWRnZSBhbGlnbmVkIHdpdGggaG9zdCBlbGVtZW50IHRvcCBlZGdlLjwvbGk+XG4gICAgICAgKiAgICAgPGxpPmxlZnQtYm90dG9tOiBlbGVtZW50IG9uIGxlZnQsIGJvdHRvbSBlZGdlIGFsaWduZWQgd2l0aCBob3N0IGVsZW1lbnQgYm90dG9tIGVkZ2UuPC9saT5cbiAgICAgICAqICAgICA8bGk+cmlnaHQ6IGVsZW1lbnQgb24gcmlnaHQsIHZlcnRpY2FsbHkgY2VudGVyZWQgb24gaG9zdCBlbGVtZW50LjwvbGk+XG4gICAgICAgKiAgICAgPGxpPnJpZ2h0LXRvcDogZWxlbWVudCBvbiByaWdodCwgdG9wIGVkZ2UgYWxpZ25lZCB3aXRoIGhvc3QgZWxlbWVudCB0b3AgZWRnZS48L2xpPlxuICAgICAgICogICAgIDxsaT5yaWdodC1ib3R0b206IGVsZW1lbnQgb24gcmlnaHQsIGJvdHRvbSBlZGdlIGFsaWduZWQgd2l0aCBob3N0IGVsZW1lbnQgYm90dG9tIGVkZ2UuPC9saT5cbiAgICAgICAqICAgPC91bD5cbiAgICAgICAqIEEgcGxhY2VtZW50IHN0cmluZyB3aXRoIGFuICdhdXRvJyBpbmRpY2F0b3IgaXMgZXhwZWN0ZWQgdG8gYmVcbiAgICAgICAqIHNwYWNlIHNlcGFyYXRlZCBmcm9tIHRoZSBwbGFjZW1lbnQsIGkuZTogJ2F1dG8gYm90dG9tLWxlZnQnICBJZlxuICAgICAgICogdGhlIHByaW1hcnkgYW5kIHNlY29uZGFyeSBwbGFjZW1lbnQgdmFsdWVzIGRvIG5vdCBtYXRjaCAndG9wLFxuICAgICAgICogYm90dG9tLCBsZWZ0LCByaWdodCcgdGhlbiAndG9wJyB3aWxsIGJlIHRoZSBwcmltYXJ5IHBsYWNlbWVudCBhbmRcbiAgICAgICAqICdjZW50ZXInIHdpbGwgYmUgdGhlIHNlY29uZGFyeSBwbGFjZW1lbnQuICBJZiAnYXV0bycgaXMgcGFzc2VkLCB0cnVlXG4gICAgICAgKiB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSAzcmQgdmFsdWUgb2YgdGhlIGFycmF5LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwbGFjZW1lbnQgLSBUaGUgcGxhY2VtZW50IHN0cmluZyB0byBwYXJzZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7YXJyYXl9IEFuIGFycmF5IHdpdGggdGhlIGZvbGxvd2luZyB2YWx1ZXNcbiAgICAgICAqIDx1bD5cbiAgICAgICAqICAgPGxpPioqWzBdKio6IFRoZSBwcmltYXJ5IHBsYWNlbWVudC48L2xpPlxuICAgICAgICogICA8bGk+KipbMV0qKjogVGhlIHNlY29uZGFyeSBwbGFjZW1lbnQuPC9saT5cbiAgICAgICAqICAgPGxpPioqWzJdKio6IElmIGF1dG8gaXMgcGFzc2VkOiB0cnVlLCBlbHNlIHVuZGVmaW5lZC48L2xpPlxuICAgICAgICogPC91bD5cbiAgICAgICAqL1xuICAgICAgcGFyc2VQbGFjZW1lbnQ6IGZ1bmN0aW9uKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgYXV0b1BsYWNlID0gUExBQ0VNRU5UX1JFR0VYLmF1dG8udGVzdChwbGFjZW1lbnQpO1xuICAgICAgICBpZiAoYXV0b1BsYWNlKSB7XG4gICAgICAgICAgcGxhY2VtZW50ID0gcGxhY2VtZW50LnJlcGxhY2UoUExBQ0VNRU5UX1JFR0VYLmF1dG8sICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpO1xuXG4gICAgICAgIHBsYWNlbWVudFswXSA9IHBsYWNlbWVudFswXSB8fCAndG9wJztcbiAgICAgICAgaWYgKCFQTEFDRU1FTlRfUkVHRVgucHJpbWFyeS50ZXN0KHBsYWNlbWVudFswXSkpIHtcbiAgICAgICAgICBwbGFjZW1lbnRbMF0gPSAndG9wJztcbiAgICAgICAgfVxuXG4gICAgICAgIHBsYWNlbWVudFsxXSA9IHBsYWNlbWVudFsxXSB8fCAnY2VudGVyJztcbiAgICAgICAgaWYgKCFQTEFDRU1FTlRfUkVHRVguc2Vjb25kYXJ5LnRlc3QocGxhY2VtZW50WzFdKSkge1xuICAgICAgICAgIHBsYWNlbWVudFsxXSA9ICdjZW50ZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF1dG9QbGFjZSkge1xuICAgICAgICAgIHBsYWNlbWVudFsyXSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGxhY2VtZW50WzJdID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGxhY2VtZW50O1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBQcm92aWRlcyBjb29yZGluYXRlcyBmb3IgYW4gZWxlbWVudCB0byBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlIHRvXG4gICAgICAgKiBhbm90aGVyIGVsZW1lbnQuICBQYXNzaW5nICdhdXRvJyBhcyBwYXJ0IG9mIHRoZSBwbGFjZW1lbnQgcGFyYW1ldGVyXG4gICAgICAgKiB3aWxsIGVuYWJsZSBzbWFydCBwbGFjZW1lbnQgLSB3aGVyZSB0aGUgZWxlbWVudCBmaXRzLiBpLmU6XG4gICAgICAgKiAnYXV0byBsZWZ0LXRvcCcgd2lsbCBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIHRvIHRoZSBsZWZ0XG4gICAgICAgKiBvZiB0aGUgaG9zdEVsZW0gdG8gZml0IHRoZSB0YXJnZXRFbGVtLCBpZiBub3QgcGxhY2UgcmlnaHQgKHNhbWUgZm9yIHNlY29uZGFyeVxuICAgICAgICogdG9wIHBsYWNlbWVudCkuICBBdmFpbGFibGUgc3BhY2UgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgdmlld3BvcnRPZmZzZXRcbiAgICAgICAqIGZ1bmN0aW9uLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7ZWxlbWVudH0gaG9zdEVsZW0gLSBUaGUgZWxlbWVudCB0byBwb3NpdGlvbiBhZ2FpbnN0LlxuICAgICAgICogQHBhcmFtIHtlbGVtZW50fSB0YXJnZXRFbGVtIC0gVGhlIGVsZW1lbnQgdG8gcG9zaXRpb24uXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZz19IFtwbGFjZW1lbnQ9dG9wXSAtIFRoZSBwbGFjZW1lbnQgZm9yIHRoZSB0YXJnZXRFbGVtLFxuICAgICAgICogICBkZWZhdWx0IGlzICd0b3AnLiAnY2VudGVyJyBpcyBhc3N1bWVkIGFzIHNlY29uZGFyeSBwbGFjZW1lbnQgZm9yXG4gICAgICAgKiAgICd0b3AnLCAnbGVmdCcsICdyaWdodCcsIGFuZCAnYm90dG9tJyBwbGFjZW1lbnRzLiAgQXZhaWxhYmxlIHBsYWNlbWVudHMgYXJlOlxuICAgICAgICogICA8dWw+XG4gICAgICAgKiAgICAgPGxpPnRvcDwvbGk+XG4gICAgICAgKiAgICAgPGxpPnRvcC1yaWdodDwvbGk+XG4gICAgICAgKiAgICAgPGxpPnRvcC1sZWZ0PC9saT5cbiAgICAgICAqICAgICA8bGk+Ym90dG9tPC9saT5cbiAgICAgICAqICAgICA8bGk+Ym90dG9tLWxlZnQ8L2xpPlxuICAgICAgICogICAgIDxsaT5ib3R0b20tcmlnaHQ8L2xpPlxuICAgICAgICogICAgIDxsaT5sZWZ0PC9saT5cbiAgICAgICAqICAgICA8bGk+bGVmdC10b3A8L2xpPlxuICAgICAgICogICAgIDxsaT5sZWZ0LWJvdHRvbTwvbGk+XG4gICAgICAgKiAgICAgPGxpPnJpZ2h0PC9saT5cbiAgICAgICAqICAgICA8bGk+cmlnaHQtdG9wPC9saT5cbiAgICAgICAqICAgICA8bGk+cmlnaHQtYm90dG9tPC9saT5cbiAgICAgICAqICAgPC91bD5cbiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IFthcHBlbmRUb0JvZHk9ZmFsc2VdIC0gU2hvdWxkIHRoZSB0b3AgYW5kIGxlZnQgdmFsdWVzIHJldHVybmVkXG4gICAgICAgKiAgIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgYm9keSBlbGVtZW50LCBkZWZhdWx0IGlzIGZhbHNlLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICAgICAqICAgPHVsPlxuICAgICAgICogICAgIDxsaT4qKnRvcCoqOiBWYWx1ZSBmb3IgdGFyZ2V0RWxlbSB0b3AuPC9saT5cbiAgICAgICAqICAgICA8bGk+KipsZWZ0Kio6IFZhbHVlIGZvciB0YXJnZXRFbGVtIGxlZnQuPC9saT5cbiAgICAgICAqICAgICA8bGk+KipwbGFjZW1lbnQqKjogVGhlIHJlc29sdmVkIHBsYWNlbWVudC48L2xpPlxuICAgICAgICogICA8L3VsPlxuICAgICAgICovXG4gICAgICBwb3NpdGlvbkVsZW1lbnRzOiBmdW5jdGlvbihob3N0RWxlbSwgdGFyZ2V0RWxlbSwgcGxhY2VtZW50LCBhcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgaG9zdEVsZW0gPSB0aGlzLmdldFJhd05vZGUoaG9zdEVsZW0pO1xuICAgICAgICB0YXJnZXRFbGVtID0gdGhpcy5nZXRSYXdOb2RlKHRhcmdldEVsZW0pO1xuXG4gICAgICAgIC8vIG5lZWQgdG8gcmVhZCBmcm9tIHByb3AgdG8gc3VwcG9ydCB0ZXN0cy5cbiAgICAgICAgdmFyIHRhcmdldFdpZHRoID0gYW5ndWxhci5pc0RlZmluZWQodGFyZ2V0RWxlbS5vZmZzZXRXaWR0aCkgPyB0YXJnZXRFbGVtLm9mZnNldFdpZHRoIDogdGFyZ2V0RWxlbS5wcm9wKCdvZmZzZXRXaWR0aCcpO1xuICAgICAgICB2YXIgdGFyZ2V0SGVpZ2h0ID0gYW5ndWxhci5pc0RlZmluZWQodGFyZ2V0RWxlbS5vZmZzZXRIZWlnaHQpID8gdGFyZ2V0RWxlbS5vZmZzZXRIZWlnaHQgOiB0YXJnZXRFbGVtLnByb3AoJ29mZnNldEhlaWdodCcpO1xuXG4gICAgICAgIHBsYWNlbWVudCA9IHRoaXMucGFyc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgICAgICB2YXIgaG9zdEVsZW1Qb3MgPSBhcHBlbmRUb0JvZHkgPyB0aGlzLm9mZnNldChob3N0RWxlbSkgOiB0aGlzLnBvc2l0aW9uKGhvc3RFbGVtKTtcbiAgICAgICAgdmFyIHRhcmdldEVsZW1Qb3MgPSB7dG9wOiAwLCBsZWZ0OiAwLCBwbGFjZW1lbnQ6ICcnfTtcblxuICAgICAgICBpZiAocGxhY2VtZW50WzJdKSB7XG4gICAgICAgICAgdmFyIHZpZXdwb3J0T2Zmc2V0ID0gdGhpcy52aWV3cG9ydE9mZnNldChob3N0RWxlbSwgYXBwZW5kVG9Cb2R5KTtcblxuICAgICAgICAgIHZhciB0YXJnZXRFbGVtU3R5bGUgPSAkd2luZG93LmdldENvbXB1dGVkU3R5bGUodGFyZ2V0RWxlbSk7XG4gICAgICAgICAgdmFyIGFkanVzdGVkU2l6ZSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB0YXJnZXRXaWR0aCArIE1hdGgucm91bmQoTWF0aC5hYnModGhpcy5wYXJzZVN0eWxlKHRhcmdldEVsZW1TdHlsZS5tYXJnaW5MZWZ0KSArIHRoaXMucGFyc2VTdHlsZSh0YXJnZXRFbGVtU3R5bGUubWFyZ2luUmlnaHQpKSksXG4gICAgICAgICAgICBoZWlnaHQ6IHRhcmdldEhlaWdodCArIE1hdGgucm91bmQoTWF0aC5hYnModGhpcy5wYXJzZVN0eWxlKHRhcmdldEVsZW1TdHlsZS5tYXJnaW5Ub3ApICsgdGhpcy5wYXJzZVN0eWxlKHRhcmdldEVsZW1TdHlsZS5tYXJnaW5Cb3R0b20pKSlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcGxhY2VtZW50WzBdID0gcGxhY2VtZW50WzBdID09PSAndG9wJyAmJiBhZGp1c3RlZFNpemUuaGVpZ2h0ID4gdmlld3BvcnRPZmZzZXQudG9wICYmIGFkanVzdGVkU2l6ZS5oZWlnaHQgPD0gdmlld3BvcnRPZmZzZXQuYm90dG9tID8gJ2JvdHRvbScgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudFswXSA9PT0gJ2JvdHRvbScgJiYgYWRqdXN0ZWRTaXplLmhlaWdodCA+IHZpZXdwb3J0T2Zmc2V0LmJvdHRvbSAmJiBhZGp1c3RlZFNpemUuaGVpZ2h0IDw9IHZpZXdwb3J0T2Zmc2V0LnRvcCA/ICd0b3AnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRbMF0gPT09ICdsZWZ0JyAmJiBhZGp1c3RlZFNpemUud2lkdGggPiB2aWV3cG9ydE9mZnNldC5sZWZ0ICYmIGFkanVzdGVkU2l6ZS53aWR0aCA8PSB2aWV3cG9ydE9mZnNldC5yaWdodCA/ICdyaWdodCcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudFswXSA9PT0gJ3JpZ2h0JyAmJiBhZGp1c3RlZFNpemUud2lkdGggPiB2aWV3cG9ydE9mZnNldC5yaWdodCAmJiBhZGp1c3RlZFNpemUud2lkdGggPD0gdmlld3BvcnRPZmZzZXQubGVmdCA/ICdsZWZ0JyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50WzBdO1xuXG4gICAgICAgICAgcGxhY2VtZW50WzFdID0gcGxhY2VtZW50WzFdID09PSAndG9wJyAmJiBhZGp1c3RlZFNpemUuaGVpZ2h0IC0gaG9zdEVsZW1Qb3MuaGVpZ2h0ID4gdmlld3BvcnRPZmZzZXQuYm90dG9tICYmIGFkanVzdGVkU2l6ZS5oZWlnaHQgLSBob3N0RWxlbVBvcy5oZWlnaHQgPD0gdmlld3BvcnRPZmZzZXQudG9wID8gJ2JvdHRvbScgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudFsxXSA9PT0gJ2JvdHRvbScgJiYgYWRqdXN0ZWRTaXplLmhlaWdodCAtIGhvc3RFbGVtUG9zLmhlaWdodCA+IHZpZXdwb3J0T2Zmc2V0LnRvcCAmJiBhZGp1c3RlZFNpemUuaGVpZ2h0IC0gaG9zdEVsZW1Qb3MuaGVpZ2h0IDw9IHZpZXdwb3J0T2Zmc2V0LmJvdHRvbSA/ICd0b3AnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRbMV0gPT09ICdsZWZ0JyAmJiBhZGp1c3RlZFNpemUud2lkdGggLSBob3N0RWxlbVBvcy53aWR0aCA+IHZpZXdwb3J0T2Zmc2V0LnJpZ2h0ICYmIGFkanVzdGVkU2l6ZS53aWR0aCAtIGhvc3RFbGVtUG9zLndpZHRoIDw9IHZpZXdwb3J0T2Zmc2V0LmxlZnQgPyAncmlnaHQnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRbMV0gPT09ICdyaWdodCcgJiYgYWRqdXN0ZWRTaXplLndpZHRoIC0gaG9zdEVsZW1Qb3Mud2lkdGggPiB2aWV3cG9ydE9mZnNldC5sZWZ0ICYmIGFkanVzdGVkU2l6ZS53aWR0aCAtIGhvc3RFbGVtUG9zLndpZHRoIDw9IHZpZXdwb3J0T2Zmc2V0LnJpZ2h0ID8gJ2xlZnQnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRbMV07XG5cbiAgICAgICAgICBpZiAocGxhY2VtZW50WzFdID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgaWYgKFBMQUNFTUVOVF9SRUdFWC52ZXJ0aWNhbC50ZXN0KHBsYWNlbWVudFswXSkpIHtcbiAgICAgICAgICAgICAgdmFyIHhPdmVyZmxvdyA9IGhvc3RFbGVtUG9zLndpZHRoIC8gMiAtIHRhcmdldFdpZHRoIC8gMjtcbiAgICAgICAgICAgICAgaWYgKHZpZXdwb3J0T2Zmc2V0LmxlZnQgKyB4T3ZlcmZsb3cgPCAwICYmIGFkanVzdGVkU2l6ZS53aWR0aCAtIGhvc3RFbGVtUG9zLndpZHRoIDw9IHZpZXdwb3J0T2Zmc2V0LnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50WzFdID0gJ2xlZnQnO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZpZXdwb3J0T2Zmc2V0LnJpZ2h0ICsgeE92ZXJmbG93IDwgMCAmJiBhZGp1c3RlZFNpemUud2lkdGggLSBob3N0RWxlbVBvcy53aWR0aCA8PSB2aWV3cG9ydE9mZnNldC5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50WzFdID0gJ3JpZ2h0JztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHlPdmVyZmxvdyA9IGhvc3RFbGVtUG9zLmhlaWdodCAvIDIgLSBhZGp1c3RlZFNpemUuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgaWYgKHZpZXdwb3J0T2Zmc2V0LnRvcCArIHlPdmVyZmxvdyA8IDAgJiYgYWRqdXN0ZWRTaXplLmhlaWdodCAtIGhvc3RFbGVtUG9zLmhlaWdodCA8PSB2aWV3cG9ydE9mZnNldC5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRbMV0gPSAndG9wJztcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3cG9ydE9mZnNldC5ib3R0b20gKyB5T3ZlcmZsb3cgPCAwICYmIGFkanVzdGVkU2l6ZS5oZWlnaHQgLSBob3N0RWxlbVBvcy5oZWlnaHQgPD0gdmlld3BvcnRPZmZzZXQudG9wKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50WzFdID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHBsYWNlbWVudFswXSkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICB0YXJnZXRFbGVtUG9zLnRvcCA9IGhvc3RFbGVtUG9zLnRvcCAtIHRhcmdldEhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICB0YXJnZXRFbGVtUG9zLnRvcCA9IGhvc3RFbGVtUG9zLnRvcCArIGhvc3RFbGVtUG9zLmhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgdGFyZ2V0RWxlbVBvcy5sZWZ0ID0gaG9zdEVsZW1Qb3MubGVmdCAtIHRhcmdldFdpZHRoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgdGFyZ2V0RWxlbVBvcy5sZWZ0ID0gaG9zdEVsZW1Qb3MubGVmdCArIGhvc3RFbGVtUG9zLndpZHRoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHBsYWNlbWVudFsxXSkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICB0YXJnZXRFbGVtUG9zLnRvcCA9IGhvc3RFbGVtUG9zLnRvcDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICB0YXJnZXRFbGVtUG9zLnRvcCA9IGhvc3RFbGVtUG9zLnRvcCArIGhvc3RFbGVtUG9zLmhlaWdodCAtIHRhcmdldEhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgdGFyZ2V0RWxlbVBvcy5sZWZ0ID0gaG9zdEVsZW1Qb3MubGVmdDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHRhcmdldEVsZW1Qb3MubGVmdCA9IGhvc3RFbGVtUG9zLmxlZnQgKyBob3N0RWxlbVBvcy53aWR0aCAtIHRhcmdldFdpZHRoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgIGlmIChQTEFDRU1FTlRfUkVHRVgudmVydGljYWwudGVzdChwbGFjZW1lbnRbMF0pKSB7XG4gICAgICAgICAgICAgIHRhcmdldEVsZW1Qb3MubGVmdCA9IGhvc3RFbGVtUG9zLmxlZnQgKyBob3N0RWxlbVBvcy53aWR0aCAvIDIgLSB0YXJnZXRXaWR0aCAvIDI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YXJnZXRFbGVtUG9zLnRvcCA9IGhvc3RFbGVtUG9zLnRvcCArIGhvc3RFbGVtUG9zLmhlaWdodCAvIDIgLSB0YXJnZXRIZWlnaHQgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRFbGVtUG9zLnRvcCA9IE1hdGgucm91bmQodGFyZ2V0RWxlbVBvcy50b3ApO1xuICAgICAgICB0YXJnZXRFbGVtUG9zLmxlZnQgPSBNYXRoLnJvdW5kKHRhcmdldEVsZW1Qb3MubGVmdCk7XG4gICAgICAgIHRhcmdldEVsZW1Qb3MucGxhY2VtZW50ID0gcGxhY2VtZW50WzFdID09PSAnY2VudGVyJyA/IHBsYWNlbWVudFswXSA6IHBsYWNlbWVudFswXSArICctJyArIHBsYWNlbWVudFsxXTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0RWxlbVBvcztcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogUHJvdmlkZXMgYSB3YXkgdG8gYWRqdXN0IHRoZSB0b3AgcG9zaXRpb25pbmcgYWZ0ZXIgZmlyc3RcbiAgICAgICAqIHJlbmRlciB0byBjb3JyZWN0bHkgYWxpZ24gZWxlbWVudCB0byB0b3AgYWZ0ZXIgY29udGVudFxuICAgICAgICogcmVuZGVyaW5nIGNhdXNlcyByZXNpemVkIGVsZW1lbnQgaGVpZ2h0XG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHthcnJheX0gcGxhY2VtZW50Q2xhc3NlcyAtIFRoZSBhcnJheSBvZiBzdHJpbmdzIG9mIGNsYXNzZXNcbiAgICAgICAqIGVsZW1lbnQgc2hvdWxkIGhhdmUuXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gY29udGFpbmVyUG9zaXRpb24gLSBUaGUgb2JqZWN0IHdpdGggY29udGFpbmVyXG4gICAgICAgKiBwb3NpdGlvbiBpbmZvcm1hdGlvblxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGluaXRpYWxIZWlnaHQgLSBUaGUgaW5pdGlhbCBoZWlnaHQgZm9yIHRoZSBlbGVtLlxuICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRIZWlnaHQgLSBUaGUgY3VycmVudCBoZWlnaHQgZm9yIHRoZSBlbGVtLlxuICAgICAgICovXG4gICAgICBhZGp1c3RUb3A6IGZ1bmN0aW9uKHBsYWNlbWVudENsYXNzZXMsIGNvbnRhaW5lclBvc2l0aW9uLCBpbml0aWFsSGVpZ2h0LCBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGlmIChwbGFjZW1lbnRDbGFzc2VzLmluZGV4T2YoJ3RvcCcpICE9PSAtMSAmJiBpbml0aWFsSGVpZ2h0ICE9PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogY29udGFpbmVyUG9zaXRpb24udG9wIC0gY3VycmVudEhlaWdodCArICdweCdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFByb3ZpZGVzIGEgd2F5IGZvciBwb3NpdGlvbmluZyB0b29sdGlwICYgZHJvcGRvd25cbiAgICAgICAqIGFycm93cyB3aGVuIHVzaW5nIHBsYWNlbWVudCBvcHRpb25zIGJleW9uZCB0aGUgc3RhbmRhcmRcbiAgICAgICAqIGxlZnQsIHJpZ2h0LCB0b3AsIG9yIGJvdHRvbS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2VsZW1lbnR9IGVsZW0gLSBUaGUgdG9vbHRpcC9kcm9wZG93biBlbGVtZW50LlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBsYWNlbWVudCAtIFRoZSBwbGFjZW1lbnQgZm9yIHRoZSBlbGVtLlxuICAgICAgICovXG4gICAgICBwb3NpdGlvbkFycm93OiBmdW5jdGlvbihlbGVtLCBwbGFjZW1lbnQpIHtcbiAgICAgICAgZWxlbSA9IHRoaXMuZ2V0UmF3Tm9kZShlbGVtKTtcblxuICAgICAgICB2YXIgaW5uZXJFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKCcudG9vbHRpcC1pbm5lciwgLnBvcG92ZXItaW5uZXInKTtcbiAgICAgICAgaWYgKCFpbm5lckVsZW0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXNUb29sdGlwID0gYW5ndWxhci5lbGVtZW50KGlubmVyRWxlbSkuaGFzQ2xhc3MoJ3Rvb2x0aXAtaW5uZXInKTtcblxuICAgICAgICB2YXIgYXJyb3dFbGVtID0gaXNUb29sdGlwID8gZWxlbS5xdWVyeVNlbGVjdG9yKCcudG9vbHRpcC1hcnJvdycpIDogZWxlbS5xdWVyeVNlbGVjdG9yKCcuYXJyb3cnKTtcbiAgICAgICAgaWYgKCFhcnJvd0VsZW0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXJyb3dDc3MgPSB7XG4gICAgICAgICAgdG9wOiAnJyxcbiAgICAgICAgICBib3R0b206ICcnLFxuICAgICAgICAgIGxlZnQ6ICcnLFxuICAgICAgICAgIHJpZ2h0OiAnJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHBsYWNlbWVudCA9IHRoaXMucGFyc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgICAgICAgaWYgKHBsYWNlbWVudFsxXSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAvLyBubyBhZGp1c3RtZW50IG5lY2Vzc2FyeSAtIGp1c3QgcmVzZXQgc3R5bGVzXG4gICAgICAgICAgYW5ndWxhci5lbGVtZW50KGFycm93RWxlbSkuY3NzKGFycm93Q3NzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYm9yZGVyUHJvcCA9ICdib3JkZXItJyArIHBsYWNlbWVudFswXSArICctd2lkdGgnO1xuICAgICAgICB2YXIgYm9yZGVyV2lkdGggPSAkd2luZG93LmdldENvbXB1dGVkU3R5bGUoYXJyb3dFbGVtKVtib3JkZXJQcm9wXTtcblxuICAgICAgICB2YXIgYm9yZGVyUmFkaXVzUHJvcCA9ICdib3JkZXItJztcbiAgICAgICAgaWYgKFBMQUNFTUVOVF9SRUdFWC52ZXJ0aWNhbC50ZXN0KHBsYWNlbWVudFswXSkpIHtcbiAgICAgICAgICBib3JkZXJSYWRpdXNQcm9wICs9IHBsYWNlbWVudFswXSArICctJyArIHBsYWNlbWVudFsxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib3JkZXJSYWRpdXNQcm9wICs9IHBsYWNlbWVudFsxXSArICctJyArIHBsYWNlbWVudFswXTtcbiAgICAgICAgfVxuICAgICAgICBib3JkZXJSYWRpdXNQcm9wICs9ICctcmFkaXVzJztcbiAgICAgICAgdmFyIGJvcmRlclJhZGl1cyA9ICR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpc1Rvb2x0aXAgPyBpbm5lckVsZW0gOiBlbGVtKVtib3JkZXJSYWRpdXNQcm9wXTtcblxuICAgICAgICBzd2l0Y2ggKHBsYWNlbWVudFswXSkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICBhcnJvd0Nzcy5ib3R0b20gPSBpc1Rvb2x0aXAgPyAnMCcgOiAnLScgKyBib3JkZXJXaWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICBhcnJvd0Nzcy50b3AgPSBpc1Rvb2x0aXAgPyAnMCcgOiAnLScgKyBib3JkZXJXaWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgYXJyb3dDc3MucmlnaHQgPSBpc1Rvb2x0aXAgPyAnMCcgOiAnLScgKyBib3JkZXJXaWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIGFycm93Q3NzLmxlZnQgPSBpc1Rvb2x0aXAgPyAnMCcgOiAnLScgKyBib3JkZXJXaWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyb3dDc3NbcGxhY2VtZW50WzFdXSA9IGJvcmRlclJhZGl1cztcblxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoYXJyb3dFbGVtKS5jc3MoYXJyb3dDc3MpO1xuICAgICAgfVxuICAgIH07XG4gIH1dKTtcblxuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5kYXRlcGlja2VyUG9wdXAnLCBbJ3VpLmJvb3RzdHJhcC5kYXRlcGlja2VyJywgJ3VpLmJvb3RzdHJhcC5wb3NpdGlvbiddKVxuXG4udmFsdWUoJyRkYXRlcGlja2VyUG9wdXBMaXRlcmFsV2FybmluZycsIHRydWUpXG5cbi5jb25zdGFudCgndWliRGF0ZXBpY2tlclBvcHVwQ29uZmlnJywge1xuICBhbHRJbnB1dEZvcm1hdHM6IFtdLFxuICBhcHBlbmRUb0JvZHk6IGZhbHNlLFxuICBjbGVhclRleHQ6ICdDbGVhcicsXG4gIGNsb3NlT25EYXRlU2VsZWN0aW9uOiB0cnVlLFxuICBjbG9zZVRleHQ6ICdEb25lJyxcbiAgY3VycmVudFRleHQ6ICdUb2RheScsXG4gIGRhdGVwaWNrZXJQb3B1cDogJ3l5eXktTU0tZGQnLFxuICBkYXRlcGlja2VyUG9wdXBUZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS9kYXRlcGlja2VyUG9wdXAvcG9wdXAuaHRtbCcsXG4gIGRhdGVwaWNrZXJUZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCcsXG4gIGh0bWw1VHlwZXM6IHtcbiAgICBkYXRlOiAneXl5eS1NTS1kZCcsXG4gICAgJ2RhdGV0aW1lLWxvY2FsJzogJ3l5eXktTU0tZGRUSEg6bW06c3Muc3NzJyxcbiAgICAnbW9udGgnOiAneXl5eS1NTSdcbiAgfSxcbiAgb25PcGVuRm9jdXM6IHRydWUsXG4gIHNob3dCdXR0b25CYXI6IHRydWUsXG4gIHBsYWNlbWVudDogJ2F1dG8gYm90dG9tLWxlZnQnXG59KVxuXG4uY29udHJvbGxlcignVWliRGF0ZXBpY2tlclBvcHVwQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRlbGVtZW50JywgJyRhdHRycycsICckY29tcGlsZScsICckbG9nJywgJyRwYXJzZScsICckd2luZG93JywgJyRkb2N1bWVudCcsICckcm9vdFNjb3BlJywgJyR1aWJQb3NpdGlvbicsICdkYXRlRmlsdGVyJywgJ3VpYkRhdGVQYXJzZXInLCAndWliRGF0ZXBpY2tlclBvcHVwQ29uZmlnJywgJyR0aW1lb3V0JywgJ3VpYkRhdGVwaWNrZXJDb25maWcnLCAnJGRhdGVwaWNrZXJQb3B1cExpdGVyYWxXYXJuaW5nJyxcbmZ1bmN0aW9uKCRzY29wZSwgJGVsZW1lbnQsICRhdHRycywgJGNvbXBpbGUsICRsb2csICRwYXJzZSwgJHdpbmRvdywgJGRvY3VtZW50LCAkcm9vdFNjb3BlLCAkcG9zaXRpb24sIGRhdGVGaWx0ZXIsIGRhdGVQYXJzZXIsIGRhdGVwaWNrZXJQb3B1cENvbmZpZywgJHRpbWVvdXQsIGRhdGVwaWNrZXJDb25maWcsICRkYXRlcGlja2VyUG9wdXBMaXRlcmFsV2FybmluZykge1xuICB2YXIgY2FjaGUgPSB7fSxcbiAgICBpc0h0bWw1RGF0ZUlucHV0ID0gZmFsc2U7XG4gIHZhciBkYXRlRm9ybWF0LCBjbG9zZU9uRGF0ZVNlbGVjdGlvbiwgYXBwZW5kVG9Cb2R5LCBvbk9wZW5Gb2N1cyxcbiAgICBkYXRlcGlja2VyUG9wdXBUZW1wbGF0ZVVybCwgZGF0ZXBpY2tlclRlbXBsYXRlVXJsLCBwb3B1cEVsLCBkYXRlcGlja2VyRWwsIHNjcm9sbFBhcmVudEVsLFxuICAgIG5nTW9kZWwsIG5nTW9kZWxPcHRpb25zLCAkcG9wdXAsIGFsdElucHV0Rm9ybWF0cywgd2F0Y2hMaXN0ZW5lcnMgPSBbXTtcblxuICB0aGlzLmluaXQgPSBmdW5jdGlvbihfbmdNb2RlbF8pIHtcbiAgICBuZ01vZGVsID0gX25nTW9kZWxfO1xuICAgIG5nTW9kZWxPcHRpb25zID0gZXh0cmFjdE9wdGlvbnMobmdNb2RlbCk7XG4gICAgY2xvc2VPbkRhdGVTZWxlY3Rpb24gPSBhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMuY2xvc2VPbkRhdGVTZWxlY3Rpb24pID9cbiAgICAgICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5jbG9zZU9uRGF0ZVNlbGVjdGlvbikgOlxuICAgICAgZGF0ZXBpY2tlclBvcHVwQ29uZmlnLmNsb3NlT25EYXRlU2VsZWN0aW9uO1xuICAgIGFwcGVuZFRvQm9keSA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KSA/XG4gICAgICAkc2NvcGUuJHBhcmVudC4kZXZhbCgkYXR0cnMuZGF0ZXBpY2tlckFwcGVuZFRvQm9keSkgOlxuICAgICAgZGF0ZXBpY2tlclBvcHVwQ29uZmlnLmFwcGVuZFRvQm9keTtcbiAgICBvbk9wZW5Gb2N1cyA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5vbk9wZW5Gb2N1cykgP1xuICAgICAgJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLm9uT3BlbkZvY3VzKSA6IGRhdGVwaWNrZXJQb3B1cENvbmZpZy5vbk9wZW5Gb2N1cztcbiAgICBkYXRlcGlja2VyUG9wdXBUZW1wbGF0ZVVybCA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5kYXRlcGlja2VyUG9wdXBUZW1wbGF0ZVVybCkgP1xuICAgICAgJGF0dHJzLmRhdGVwaWNrZXJQb3B1cFRlbXBsYXRlVXJsIDpcbiAgICAgIGRhdGVwaWNrZXJQb3B1cENvbmZpZy5kYXRlcGlja2VyUG9wdXBUZW1wbGF0ZVVybDtcbiAgICBkYXRlcGlja2VyVGVtcGxhdGVVcmwgPSBhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMuZGF0ZXBpY2tlclRlbXBsYXRlVXJsKSA/XG4gICAgICAkYXR0cnMuZGF0ZXBpY2tlclRlbXBsYXRlVXJsIDogZGF0ZXBpY2tlclBvcHVwQ29uZmlnLmRhdGVwaWNrZXJUZW1wbGF0ZVVybDtcbiAgICBhbHRJbnB1dEZvcm1hdHMgPSBhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMuYWx0SW5wdXRGb3JtYXRzKSA/XG4gICAgICAkc2NvcGUuJHBhcmVudC4kZXZhbCgkYXR0cnMuYWx0SW5wdXRGb3JtYXRzKSA6XG4gICAgICBkYXRlcGlja2VyUG9wdXBDb25maWcuYWx0SW5wdXRGb3JtYXRzO1xuXG4gICAgJHNjb3BlLnNob3dCdXR0b25CYXIgPSBhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMuc2hvd0J1dHRvbkJhcikgP1xuICAgICAgJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLnNob3dCdXR0b25CYXIpIDpcbiAgICAgIGRhdGVwaWNrZXJQb3B1cENvbmZpZy5zaG93QnV0dG9uQmFyO1xuXG4gICAgaWYgKGRhdGVwaWNrZXJQb3B1cENvbmZpZy5odG1sNVR5cGVzWyRhdHRycy50eXBlXSkge1xuICAgICAgZGF0ZUZvcm1hdCA9IGRhdGVwaWNrZXJQb3B1cENvbmZpZy5odG1sNVR5cGVzWyRhdHRycy50eXBlXTtcbiAgICAgIGlzSHRtbDVEYXRlSW5wdXQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlRm9ybWF0ID0gJGF0dHJzLnVpYkRhdGVwaWNrZXJQb3B1cCB8fCBkYXRlcGlja2VyUG9wdXBDb25maWcuZGF0ZXBpY2tlclBvcHVwO1xuICAgICAgJGF0dHJzLiRvYnNlcnZlKCd1aWJEYXRlcGlja2VyUG9wdXAnLCBmdW5jdGlvbih2YWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgdmFyIG5ld0RhdGVGb3JtYXQgPSB2YWx1ZSB8fCBkYXRlcGlja2VyUG9wdXBDb25maWcuZGF0ZXBpY2tlclBvcHVwO1xuICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSAkbW9kZWxWYWx1ZSB0byBlbnN1cmUgdGhhdCBmb3JtYXR0ZXJzIHJlLXJ1blxuICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3Igd2hlbiBQUiBpcyBtZXJnZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvcHVsbC8xMDc2NFxuICAgICAgICBpZiAobmV3RGF0ZUZvcm1hdCAhPT0gZGF0ZUZvcm1hdCkge1xuICAgICAgICAgIGRhdGVGb3JtYXQgPSBuZXdEYXRlRm9ybWF0O1xuICAgICAgICAgIG5nTW9kZWwuJG1vZGVsVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKCFkYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VpYkRhdGVwaWNrZXJQb3B1cCBtdXN0IGhhdmUgYSBkYXRlIGZvcm1hdCBzcGVjaWZpZWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGVGb3JtYXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndWliRGF0ZXBpY2tlclBvcHVwIG11c3QgaGF2ZSBhIGRhdGUgZm9ybWF0IHNwZWNpZmllZC4nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIdG1sNURhdGVJbnB1dCAmJiAkYXR0cnMudWliRGF0ZXBpY2tlclBvcHVwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hUTUw1IGRhdGUgaW5wdXQgdHlwZXMgZG8gbm90IHN1cHBvcnQgY3VzdG9tIGZvcm1hdHMuJyk7XG4gICAgfVxuXG4gICAgLy8gcG9wdXAgZWxlbWVudCB1c2VkIHRvIGRpc3BsYXkgY2FsZW5kYXJcbiAgICBwb3B1cEVsID0gYW5ndWxhci5lbGVtZW50KCc8ZGl2IHVpYi1kYXRlcGlja2VyLXBvcHVwLXdyYXA+PGRpdiB1aWItZGF0ZXBpY2tlcj48L2Rpdj48L2Rpdj4nKTtcblxuICAgIHBvcHVwRWwuYXR0cih7XG4gICAgICAnbmctbW9kZWwnOiAnZGF0ZScsXG4gICAgICAnbmctY2hhbmdlJzogJ2RhdGVTZWxlY3Rpb24oZGF0ZSknLFxuICAgICAgJ3RlbXBsYXRlLXVybCc6IGRhdGVwaWNrZXJQb3B1cFRlbXBsYXRlVXJsXG4gICAgfSk7XG5cbiAgICAvLyBkYXRlcGlja2VyIGVsZW1lbnRcbiAgICBkYXRlcGlja2VyRWwgPSBhbmd1bGFyLmVsZW1lbnQocG9wdXBFbC5jaGlsZHJlbigpWzBdKTtcbiAgICBkYXRlcGlja2VyRWwuYXR0cigndGVtcGxhdGUtdXJsJywgZGF0ZXBpY2tlclRlbXBsYXRlVXJsKTtcblxuICAgIGlmICghJHNjb3BlLmRhdGVwaWNrZXJPcHRpb25zKSB7XG4gICAgICAkc2NvcGUuZGF0ZXBpY2tlck9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoaXNIdG1sNURhdGVJbnB1dCkge1xuICAgICAgaWYgKCRhdHRycy50eXBlID09PSAnbW9udGgnKSB7XG4gICAgICAgICRzY29wZS5kYXRlcGlja2VyT3B0aW9ucy5kYXRlcGlja2VyTW9kZSA9ICdtb250aCc7XG4gICAgICAgICRzY29wZS5kYXRlcGlja2VyT3B0aW9ucy5taW5Nb2RlID0gJ21vbnRoJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRlcGlja2VyRWwuYXR0cignZGF0ZXBpY2tlci1vcHRpb25zJywgJ2RhdGVwaWNrZXJPcHRpb25zJyk7XG5cbiAgICBpZiAoIWlzSHRtbDVEYXRlSW5wdXQpIHtcbiAgICAgIC8vIEludGVybmFsIEFQSSB0byBtYWludGFpbiB0aGUgY29ycmVjdCBuZy1pbnZhbGlkLVtrZXldIGNsYXNzXG4gICAgICBuZ01vZGVsLiQkcGFyc2VyTmFtZSA9ICdkYXRlJztcbiAgICAgIG5nTW9kZWwuJHZhbGlkYXRvcnMuZGF0ZSA9IHZhbGlkYXRvcjtcbiAgICAgIG5nTW9kZWwuJHBhcnNlcnMudW5zaGlmdChwYXJzZURhdGUpO1xuICAgICAgbmdNb2RlbC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmIChuZ01vZGVsLiRpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICRzY29wZS5kYXRlID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFuZ3VsYXIuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkc2NvcGUuZGF0ZSA9IGRhdGVQYXJzZXIuZnJvbVRpbWV6b25lKHZhbHVlLCBuZ01vZGVsT3B0aW9ucy5nZXRPcHRpb24oJ3RpbWV6b25lJykpO1xuXG4gICAgICAgIHJldHVybiBkYXRlUGFyc2VyLmZpbHRlcigkc2NvcGUuZGF0ZSwgZGF0ZUZvcm1hdCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmdNb2RlbC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICRzY29wZS5kYXRlID0gZGF0ZVBhcnNlci5mcm9tVGltZXpvbmUodmFsdWUsIG5nTW9kZWxPcHRpb25zLmdldE9wdGlvbigndGltZXpvbmUnKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIERldGVjdCBjaGFuZ2VzIGluIHRoZSB2aWV3IGZyb20gdGhlIHRleHQgYm94XG4gICAgbmdNb2RlbC4kdmlld0NoYW5nZUxpc3RlbmVycy5wdXNoKGZ1bmN0aW9uKCkge1xuICAgICAgJHNjb3BlLmRhdGUgPSBwYXJzZURhdGVTdHJpbmcobmdNb2RlbC4kdmlld1ZhbHVlKTtcbiAgICB9KTtcblxuICAgICRlbGVtZW50Lm9uKCdrZXlkb3duJywgaW5wdXRLZXlkb3duQmluZCk7XG5cbiAgICAkcG9wdXAgPSAkY29tcGlsZShwb3B1cEVsKSgkc2NvcGUpO1xuICAgIC8vIFByZXZlbnQgalF1ZXJ5IGNhY2hlIG1lbW9yeSBsZWFrICh0ZW1wbGF0ZSBpcyBub3cgcmVkdW5kYW50IGFmdGVyIGxpbmtpbmcpXG4gICAgcG9wdXBFbC5yZW1vdmUoKTtcblxuICAgIGlmIChhcHBlbmRUb0JvZHkpIHtcbiAgICAgICRkb2N1bWVudC5maW5kKCdib2R5JykuYXBwZW5kKCRwb3B1cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRlbGVtZW50LmFmdGVyKCRwb3B1cCk7XG4gICAgfVxuXG4gICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgkc2NvcGUuaXNPcGVuID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghJHJvb3RTY29wZS4kJHBoYXNlKSB7XG4gICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICRzY29wZS5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAkcG9wdXAucmVtb3ZlKCk7XG4gICAgICAkZWxlbWVudC5vZmYoJ2tleWRvd24nLCBpbnB1dEtleWRvd25CaW5kKTtcbiAgICAgICRkb2N1bWVudC5vZmYoJ2NsaWNrJywgZG9jdW1lbnRDbGlja0JpbmQpO1xuICAgICAgaWYgKHNjcm9sbFBhcmVudEVsKSB7XG4gICAgICAgIHNjcm9sbFBhcmVudEVsLm9mZignc2Nyb2xsJywgcG9zaXRpb25Qb3B1cCk7XG4gICAgICB9XG4gICAgICBhbmd1bGFyLmVsZW1lbnQoJHdpbmRvdykub2ZmKCdyZXNpemUnLCBwb3NpdGlvblBvcHVwKTtcblxuICAgICAgLy9DbGVhciBhbGwgd2F0Y2ggbGlzdGVuZXJzIG9uIGRlc3Ryb3lcbiAgICAgIHdoaWxlICh3YXRjaExpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgICAgd2F0Y2hMaXN0ZW5lcnMuc2hpZnQoKSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gICRzY29wZS5nZXRUZXh0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuICRzY29wZVtrZXkgKyAnVGV4dCddIHx8IGRhdGVwaWNrZXJQb3B1cENvbmZpZ1trZXkgKyAnVGV4dCddO1xuICB9O1xuXG4gICRzY29wZS5pc0Rpc2FibGVkID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIGlmIChkYXRlID09PSAndG9kYXknKSB7XG4gICAgICBkYXRlID0gZGF0ZVBhcnNlci5mcm9tVGltZXpvbmUobmV3IERhdGUoKSwgbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uKCd0aW1lem9uZScpKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0ZXMgPSB7fTtcbiAgICBhbmd1bGFyLmZvckVhY2goWydtaW5EYXRlJywgJ21heERhdGUnXSwgZnVuY3Rpb24oa2V5KSB7XG4gICAgICBpZiAoISRzY29wZS5kYXRlcGlja2VyT3B0aW9uc1trZXldKSB7XG4gICAgICAgIGRhdGVzW2tleV0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChhbmd1bGFyLmlzRGF0ZSgkc2NvcGUuZGF0ZXBpY2tlck9wdGlvbnNba2V5XSkpIHtcbiAgICAgICAgZGF0ZXNba2V5XSA9IG5ldyBEYXRlKCRzY29wZS5kYXRlcGlja2VyT3B0aW9uc1trZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkZGF0ZXBpY2tlclBvcHVwTGl0ZXJhbFdhcm5pbmcpIHtcbiAgICAgICAgICAkbG9nLndhcm4oJ0xpdGVyYWwgZGF0ZSBzdXBwb3J0IGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8gZGF0ZSBvYmplY3QgdXNhZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGVzW2tleV0gPSBuZXcgRGF0ZShkYXRlRmlsdGVyKCRzY29wZS5kYXRlcGlja2VyT3B0aW9uc1trZXldLCAnbWVkaXVtJykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRzY29wZS5kYXRlcGlja2VyT3B0aW9ucyAmJlxuICAgICAgZGF0ZXMubWluRGF0ZSAmJiAkc2NvcGUuY29tcGFyZShkYXRlLCBkYXRlcy5taW5EYXRlKSA8IDAgfHxcbiAgICAgIGRhdGVzLm1heERhdGUgJiYgJHNjb3BlLmNvbXBhcmUoZGF0ZSwgZGF0ZXMubWF4RGF0ZSkgPiAwO1xuICB9O1xuXG4gICRzY29wZS5jb21wYXJlID0gZnVuY3Rpb24oZGF0ZTEsIGRhdGUyKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUxLmdldEZ1bGxZZWFyKCksIGRhdGUxLmdldE1vbnRoKCksIGRhdGUxLmdldERhdGUoKSkgLSBuZXcgRGF0ZShkYXRlMi5nZXRGdWxsWWVhcigpLCBkYXRlMi5nZXRNb250aCgpLCBkYXRlMi5nZXREYXRlKCkpO1xuICB9O1xuXG4gIC8vIElubmVyIGNoYW5nZVxuICAkc2NvcGUuZGF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGR0KSB7XG4gICAgJHNjb3BlLmRhdGUgPSBkdDtcbiAgICB2YXIgZGF0ZSA9ICRzY29wZS5kYXRlID8gZGF0ZVBhcnNlci5maWx0ZXIoJHNjb3BlLmRhdGUsIGRhdGVGb3JtYXQpIDogbnVsbDsgLy8gU2V0dGluZyB0byBOVUxMIGlzIG5lY2Vzc2FyeSBmb3IgZm9ybSB2YWxpZGF0b3JzIHRvIGZ1bmN0aW9uXG4gICAgJGVsZW1lbnQudmFsKGRhdGUpO1xuICAgIG5nTW9kZWwuJHNldFZpZXdWYWx1ZShkYXRlKTtcblxuICAgIGlmIChjbG9zZU9uRGF0ZVNlbGVjdGlvbikge1xuICAgICAgJHNjb3BlLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgJGVsZW1lbnRbMF0uZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgJHNjb3BlLmtleWRvd24gPSBmdW5jdGlvbihldnQpIHtcbiAgICBpZiAoZXZ0LndoaWNoID09PSAyNykge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJHNjb3BlLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgJGVsZW1lbnRbMF0uZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgJHNjb3BlLnNlbGVjdCA9IGZ1bmN0aW9uKGRhdGUsIGV2dCkge1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmIChkYXRlID09PSAndG9kYXknKSB7XG4gICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKGFuZ3VsYXIuaXNEYXRlKCRzY29wZS5kYXRlKSkge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoJHNjb3BlLmRhdGUpO1xuICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIHRvZGF5LmdldERhdGUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRlID0gZGF0ZVBhcnNlci5mcm9tVGltZXpvbmUodG9kYXksIG5nTW9kZWxPcHRpb25zLmdldE9wdGlvbigndGltZXpvbmUnKSk7XG4gICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgICRzY29wZS5kYXRlU2VsZWN0aW9uKGRhdGUpO1xuICB9O1xuXG4gICRzY29wZS5jbG9zZSA9IGZ1bmN0aW9uKGV2dCkge1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICRzY29wZS5pc09wZW4gPSBmYWxzZTtcbiAgICAkZWxlbWVudFswXS5mb2N1cygpO1xuICB9O1xuXG4gICRzY29wZS5kaXNhYmxlZCA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5kaXNhYmxlZCkgfHwgZmFsc2U7XG4gIGlmICgkYXR0cnMubmdEaXNhYmxlZCkge1xuICAgIHdhdGNoTGlzdGVuZXJzLnB1c2goJHNjb3BlLiRwYXJlbnQuJHdhdGNoKCRwYXJzZSgkYXR0cnMubmdEaXNhYmxlZCksIGZ1bmN0aW9uKGRpc2FibGVkKSB7XG4gICAgICAkc2NvcGUuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB9KSk7XG4gIH1cblxuICAkc2NvcGUuJHdhdGNoKCdpc09wZW4nLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKCEkc2NvcGUuZGlzYWJsZWQpIHtcbiAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcG9zaXRpb25Qb3B1cCgpO1xuXG4gICAgICAgICAgaWYgKG9uT3BlbkZvY3VzKSB7XG4gICAgICAgICAgICAkc2NvcGUuJGJyb2FkY2FzdCgndWliOmRhdGVwaWNrZXIuZm9jdXMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkZG9jdW1lbnQub24oJ2NsaWNrJywgZG9jdW1lbnRDbGlja0JpbmQpO1xuXG4gICAgICAgICAgdmFyIHBsYWNlbWVudCA9ICRhdHRycy5wb3B1cFBsYWNlbWVudCA/ICRhdHRycy5wb3B1cFBsYWNlbWVudCA6IGRhdGVwaWNrZXJQb3B1cENvbmZpZy5wbGFjZW1lbnQ7XG4gICAgICAgICAgaWYgKGFwcGVuZFRvQm9keSB8fCAkcG9zaXRpb24ucGFyc2VQbGFjZW1lbnQocGxhY2VtZW50KVsyXSkge1xuICAgICAgICAgICAgc2Nyb2xsUGFyZW50RWwgPSBzY3JvbGxQYXJlbnRFbCB8fCBhbmd1bGFyLmVsZW1lbnQoJHBvc2l0aW9uLnNjcm9sbFBhcmVudCgkZWxlbWVudCkpO1xuICAgICAgICAgICAgaWYgKHNjcm9sbFBhcmVudEVsKSB7XG4gICAgICAgICAgICAgIHNjcm9sbFBhcmVudEVsLm9uKCdzY3JvbGwnLCBwb3NpdGlvblBvcHVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2Nyb2xsUGFyZW50RWwgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCgkd2luZG93KS5vbigncmVzaXplJywgcG9zaXRpb25Qb3B1cCk7XG4gICAgICAgIH0sIDAsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRzY29wZS5pc09wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgJGRvY3VtZW50Lm9mZignY2xpY2snLCBkb2N1bWVudENsaWNrQmluZCk7XG4gICAgICBpZiAoc2Nyb2xsUGFyZW50RWwpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50RWwub2ZmKCdzY3JvbGwnLCBwb3NpdGlvblBvcHVwKTtcbiAgICAgIH1cbiAgICAgIGFuZ3VsYXIuZWxlbWVudCgkd2luZG93KS5vZmYoJ3Jlc2l6ZScsIHBvc2l0aW9uUG9wdXApO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2FtZWx0b0Rhc2goc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uKCQxKSB7IHJldHVybiAnLScgKyAkMS50b0xvd2VyQ2FzZSgpOyB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRGF0ZVN0cmluZyh2aWV3VmFsdWUpIHtcbiAgICB2YXIgZGF0ZSA9IGRhdGVQYXJzZXIucGFyc2Uodmlld1ZhbHVlLCBkYXRlRm9ybWF0LCAkc2NvcGUuZGF0ZSk7XG4gICAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsdElucHV0Rm9ybWF0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkYXRlID0gZGF0ZVBhcnNlci5wYXJzZSh2aWV3VmFsdWUsIGFsdElucHV0Rm9ybWF0c1tpXSwgJHNjb3BlLmRhdGUpO1xuICAgICAgICBpZiAoIWlzTmFOKGRhdGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZURhdGUodmlld1ZhbHVlKSB7XG4gICAgaWYgKGFuZ3VsYXIuaXNOdW1iZXIodmlld1ZhbHVlKSkge1xuICAgICAgLy8gcHJlc3VtYWJseSB0aW1lc3RhbXAgdG8gZGF0ZSBvYmplY3RcbiAgICAgIHZpZXdWYWx1ZSA9IG5ldyBEYXRlKHZpZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF2aWV3VmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhbmd1bGFyLmlzRGF0ZSh2aWV3VmFsdWUpICYmICFpc05hTih2aWV3VmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmlld1ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHZpZXdWYWx1ZSkpIHtcbiAgICAgIHZhciBkYXRlID0gcGFyc2VEYXRlU3RyaW5nKHZpZXdWYWx1ZSk7XG4gICAgICBpZiAoIWlzTmFOKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiBkYXRlUGFyc2VyLnRvVGltZXpvbmUoZGF0ZSwgbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uKCd0aW1lem9uZScpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uKCdhbGxvd0ludmFsaWQnKSA/IHZpZXdWYWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRvcihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHtcbiAgICB2YXIgdmFsdWUgPSBtb2RlbFZhbHVlIHx8IHZpZXdWYWx1ZTtcblxuICAgIGlmICghJGF0dHJzLm5nUmVxdWlyZWQgJiYgIXZhbHVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoYW5ndWxhci5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChhbmd1bGFyLmlzRGF0ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRGF0ZVN0cmluZyh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRvY3VtZW50Q2xpY2tCaW5kKGV2ZW50KSB7XG4gICAgaWYgKCEkc2NvcGUuaXNPcGVuICYmICRzY29wZS5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwb3B1cCA9ICRwb3B1cFswXTtcbiAgICB2YXIgZHBDb250YWluc1RhcmdldCA9ICRlbGVtZW50WzBdLmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgLy8gVGhlIHBvcHVwIG5vZGUgbWF5IG5vdCBiZSBhbiBlbGVtZW50IG5vZGVcbiAgICAvLyBJbiBzb21lIGJyb3dzZXJzIChJRSkgb25seSBlbGVtZW50IG5vZGVzIGhhdmUgdGhlICdjb250YWlucycgZnVuY3Rpb25cbiAgICB2YXIgcG9wdXBDb250YWluc1RhcmdldCA9IHBvcHVwLmNvbnRhaW5zICE9PSB1bmRlZmluZWQgJiYgcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoJHNjb3BlLmlzT3BlbiAmJiAhKGRwQ29udGFpbnNUYXJnZXQgfHwgcG9wdXBDb250YWluc1RhcmdldCkpIHtcbiAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICRzY29wZS5pc09wZW4gPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlucHV0S2V5ZG93bkJpbmQoZXZ0KSB7XG4gICAgaWYgKGV2dC53aGljaCA9PT0gMjcgJiYgJHNjb3BlLmlzT3Blbikge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICAkc2NvcGUuaXNPcGVuID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgICRlbGVtZW50WzBdLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChldnQud2hpY2ggPT09IDQwICYmICEkc2NvcGUuaXNPcGVuKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICRzY29wZS5pc09wZW4gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcG9zaXRpb25Qb3B1cCgpIHtcbiAgICBpZiAoJHNjb3BlLmlzT3Blbikge1xuICAgICAgdmFyIGRwRWxlbWVudCA9IGFuZ3VsYXIuZWxlbWVudCgkcG9wdXBbMF0ucXVlcnlTZWxlY3RvcignLnVpYi1kYXRlcGlja2VyLXBvcHVwJykpO1xuICAgICAgdmFyIHBsYWNlbWVudCA9ICRhdHRycy5wb3B1cFBsYWNlbWVudCA/ICRhdHRycy5wb3B1cFBsYWNlbWVudCA6IGRhdGVwaWNrZXJQb3B1cENvbmZpZy5wbGFjZW1lbnQ7XG4gICAgICB2YXIgcG9zaXRpb24gPSAkcG9zaXRpb24ucG9zaXRpb25FbGVtZW50cygkZWxlbWVudCwgZHBFbGVtZW50LCBwbGFjZW1lbnQsIGFwcGVuZFRvQm9keSk7XG4gICAgICBkcEVsZW1lbnQuY3NzKHt0b3A6IHBvc2l0aW9uLnRvcCArICdweCcsIGxlZnQ6IHBvc2l0aW9uLmxlZnQgKyAncHgnfSk7XG4gICAgICBpZiAoZHBFbGVtZW50Lmhhc0NsYXNzKCd1aWItcG9zaXRpb24tbWVhc3VyZScpKSB7XG4gICAgICAgIGRwRWxlbWVudC5yZW1vdmVDbGFzcygndWliLXBvc2l0aW9uLW1lYXN1cmUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHRyYWN0T3B0aW9ucyhuZ01vZGVsQ3RybCkge1xuICAgIHZhciBuZ01vZGVsT3B0aW9ucztcblxuICAgIGlmIChhbmd1bGFyLnZlcnNpb24ubWlub3IgPCA2KSB7IC8vIGluIGFuZ3VsYXIgPCAxLjYgJG9wdGlvbnMgY291bGQgYmUgbWlzc2luZ1xuICAgICAgLy8gZ3VhcmFudGVlIGEgdmFsdWVcbiAgICAgIG5nTW9kZWxPcHRpb25zID0gYW5ndWxhci5pc09iamVjdChuZ01vZGVsQ3RybC4kb3B0aW9ucykgP1xuICAgICAgICBuZ01vZGVsQ3RybC4kb3B0aW9ucyA6XG4gICAgICAgIHtcbiAgICAgICAgICB0aW1lem9uZTogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAvLyBtaW1pYyAxLjYrIGFwaVxuICAgICAgbmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gbmdNb2RlbE9wdGlvbnNba2V5XTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHsgLy8gaW4gYW5ndWxhciA+PTEuNiAkb3B0aW9ucyBpcyBhbHdheXMgcHJlc2VudFxuICAgICAgbmdNb2RlbE9wdGlvbnMgPSBuZ01vZGVsQ3RybC4kb3B0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gbmdNb2RlbE9wdGlvbnM7XG4gIH1cblxuICAkc2NvcGUuJG9uKCd1aWI6ZGF0ZXBpY2tlci5tb2RlJywgZnVuY3Rpb24oKSB7XG4gICAgJHRpbWVvdXQocG9zaXRpb25Qb3B1cCwgMCwgZmFsc2UpO1xuICB9KTtcbn1dKVxuXG4uZGlyZWN0aXZlKCd1aWJEYXRlcGlja2VyUG9wdXAnLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1aXJlOiBbJ25nTW9kZWwnLCAndWliRGF0ZXBpY2tlclBvcHVwJ10sXG4gICAgY29udHJvbGxlcjogJ1VpYkRhdGVwaWNrZXJQb3B1cENvbnRyb2xsZXInLFxuICAgIHNjb3BlOiB7XG4gICAgICBkYXRlcGlja2VyT3B0aW9uczogJz0/JyxcbiAgICAgIGlzT3BlbjogJz0/JyxcbiAgICAgIGN1cnJlbnRUZXh0OiAnQCcsXG4gICAgICBjbGVhclRleHQ6ICdAJyxcbiAgICAgIGNsb3NlVGV4dDogJ0AnXG4gICAgfSxcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGN0cmxzKSB7XG4gICAgICB2YXIgbmdNb2RlbCA9IGN0cmxzWzBdLFxuICAgICAgICBjdHJsID0gY3RybHNbMV07XG5cbiAgICAgIGN0cmwuaW5pdChuZ01vZGVsKTtcbiAgICB9XG4gIH07XG59KVxuXG4uZGlyZWN0aXZlKCd1aWJEYXRlcGlja2VyUG9wdXBXcmFwJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICB0cmFuc2NsdWRlOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiBmdW5jdGlvbihlbGVtZW50LCBhdHRycykge1xuICAgICAgcmV0dXJuIGF0dHJzLnRlbXBsYXRlVXJsIHx8ICd1aWIvdGVtcGxhdGUvZGF0ZXBpY2tlclBvcHVwL3BvcHVwLmh0bWwnO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5hbmd1bGFyLm1vZHVsZSgndWkuYm9vdHN0cmFwLmRlYm91bmNlJywgW10pXG4vKipcbiAqIEEgaGVscGVyLCBpbnRlcm5hbCBzZXJ2aWNlIHRoYXQgZGVib3VuY2VzIGEgZnVuY3Rpb25cbiAqL1xuICAuZmFjdG9yeSgnJCRkZWJvdW5jZScsIFsnJHRpbWVvdXQnLCBmdW5jdGlvbigkdGltZW91dCkge1xuICAgIHJldHVybiBmdW5jdGlvbihjYWxsYmFjaywgZGVib3VuY2VUaW1lKSB7XG4gICAgICB2YXIgdGltZW91dFByb21pc2U7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIGlmICh0aW1lb3V0UHJvbWlzZSkge1xuICAgICAgICAgICR0aW1lb3V0LmNhbmNlbCh0aW1lb3V0UHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lb3V0UHJvbWlzZSA9ICR0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgICB9LCBkZWJvdW5jZVRpbWUpO1xuICAgICAgfTtcbiAgICB9O1xuICB9XSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAubXVsdGlNYXAnLCBbXSlcbi8qKlxuICogQSBoZWxwZXIsIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHRoYXQgc3RvcmVzIGFsbCByZWZlcmVuY2VzIGF0dGFjaGVkIHRvIGtleVxuICovXG4gIC5mYWN0b3J5KCckJG11bHRpTWFwJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZU5ldzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtYXAgPSB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVudHJpZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG1hcCkubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXBba2V5XVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcFtrZXldO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFzS2V5OiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiAhIW1hcFtrZXldO1xuICAgICAgICAgIH0sXG4gICAgICAgICAga2V5czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1dDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFtYXBba2V5XSkge1xuICAgICAgICAgICAgICBtYXBba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXBba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG1hcFtrZXldO1xuXG4gICAgICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpZHggPSB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBtYXBba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAuZHJvcGRvd24nLCBbJ3VpLmJvb3RzdHJhcC5tdWx0aU1hcCcsICd1aS5ib290c3RyYXAucG9zaXRpb24nXSlcblxuLmNvbnN0YW50KCd1aWJEcm9wZG93bkNvbmZpZycsIHtcbiAgYXBwZW5kVG9PcGVuQ2xhc3M6ICd1aWItZHJvcGRvd24tb3BlbicsXG4gIG9wZW5DbGFzczogJ29wZW4nXG59KVxuXG4uc2VydmljZSgndWliRHJvcGRvd25TZXJ2aWNlJywgWyckZG9jdW1lbnQnLCAnJHJvb3RTY29wZScsICckJG11bHRpTWFwJywgZnVuY3Rpb24oJGRvY3VtZW50LCAkcm9vdFNjb3BlLCAkJG11bHRpTWFwKSB7XG4gIHZhciBvcGVuU2NvcGUgPSBudWxsO1xuICB2YXIgb3BlbmVkQ29udGFpbmVycyA9ICQkbXVsdGlNYXAuY3JlYXRlTmV3KCk7XG5cbiAgdGhpcy5pc09ubHlPcGVuID0gZnVuY3Rpb24oZHJvcGRvd25TY29wZSwgYXBwZW5kVG8pIHtcbiAgICB2YXIgb3BlbmVkRHJvcGRvd25zID0gb3BlbmVkQ29udGFpbmVycy5nZXQoYXBwZW5kVG8pO1xuICAgIGlmIChvcGVuZWREcm9wZG93bnMpIHtcbiAgICAgIHZhciBvcGVuRHJvcGRvd24gPSBvcGVuZWREcm9wZG93bnMucmVkdWNlKGZ1bmN0aW9uKHRvQ2xvc2UsIGRyb3Bkb3duKSB7XG4gICAgICAgIGlmIChkcm9wZG93bi5zY29wZSA9PT0gZHJvcGRvd25TY29wZSkge1xuICAgICAgICAgIHJldHVybiBkcm9wZG93bjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b0Nsb3NlO1xuICAgICAgfSwge30pO1xuICAgICAgaWYgKG9wZW5Ecm9wZG93bikge1xuICAgICAgICByZXR1cm4gb3BlbmVkRHJvcGRvd25zLmxlbmd0aCA9PT0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgdGhpcy5vcGVuID0gZnVuY3Rpb24oZHJvcGRvd25TY29wZSwgZWxlbWVudCwgYXBwZW5kVG8pIHtcbiAgICBpZiAoIW9wZW5TY29wZSkge1xuICAgICAgJGRvY3VtZW50Lm9uKCdjbGljaycsIGNsb3NlRHJvcGRvd24pO1xuICAgIH1cblxuICAgIGlmIChvcGVuU2NvcGUgJiYgb3BlblNjb3BlICE9PSBkcm9wZG93blNjb3BlKSB7XG4gICAgICBvcGVuU2NvcGUuaXNPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb3BlblNjb3BlID0gZHJvcGRvd25TY29wZTtcblxuICAgIGlmICghYXBwZW5kVG8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3BlbmVkRHJvcGRvd25zID0gb3BlbmVkQ29udGFpbmVycy5nZXQoYXBwZW5kVG8pO1xuICAgIGlmIChvcGVuZWREcm9wZG93bnMpIHtcbiAgICAgIHZhciBvcGVuZWRTY29wZXMgPSBvcGVuZWREcm9wZG93bnMubWFwKGZ1bmN0aW9uKGRyb3Bkb3duKSB7XG4gICAgICAgIHJldHVybiBkcm9wZG93bi5zY29wZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG9wZW5lZFNjb3Blcy5pbmRleE9mKGRyb3Bkb3duU2NvcGUpID09PSAtMSkge1xuICAgICAgICBvcGVuZWRDb250YWluZXJzLnB1dChhcHBlbmRUbywge1xuICAgICAgICAgIHNjb3BlOiBkcm9wZG93blNjb3BlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcGVuZWRDb250YWluZXJzLnB1dChhcHBlbmRUbywge1xuICAgICAgICBzY29wZTogZHJvcGRvd25TY29wZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuY2xvc2UgPSBmdW5jdGlvbihkcm9wZG93blNjb3BlLCBlbGVtZW50LCBhcHBlbmRUbykge1xuICAgIGlmIChvcGVuU2NvcGUgPT09IGRyb3Bkb3duU2NvcGUpIHtcbiAgICAgICRkb2N1bWVudC5vZmYoJ2NsaWNrJywgY2xvc2VEcm9wZG93bik7XG4gICAgICAkZG9jdW1lbnQub2ZmKCdrZXlkb3duJywgdGhpcy5rZXliaW5kRmlsdGVyKTtcbiAgICAgIG9wZW5TY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFhcHBlbmRUbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBvcGVuZWREcm9wZG93bnMgPSBvcGVuZWRDb250YWluZXJzLmdldChhcHBlbmRUbyk7XG4gICAgaWYgKG9wZW5lZERyb3Bkb3ducykge1xuICAgICAgdmFyIGRyb3Bkb3duVG9DbG9zZSA9IG9wZW5lZERyb3Bkb3ducy5yZWR1Y2UoZnVuY3Rpb24odG9DbG9zZSwgZHJvcGRvd24pIHtcbiAgICAgICAgaWYgKGRyb3Bkb3duLnNjb3BlID09PSBkcm9wZG93blNjb3BlKSB7XG4gICAgICAgICAgcmV0dXJuIGRyb3Bkb3duO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvQ2xvc2U7XG4gICAgICB9LCB7fSk7XG4gICAgICBpZiAoZHJvcGRvd25Ub0Nsb3NlKSB7XG4gICAgICAgIG9wZW5lZENvbnRhaW5lcnMucmVtb3ZlKGFwcGVuZFRvLCBkcm9wZG93blRvQ2xvc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgY2xvc2VEcm9wZG93biA9IGZ1bmN0aW9uKGV2dCkge1xuICAgIC8vIFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBjYWxsZWQgZHVyaW5nIHRoZSBzYW1lIG1vdXNlIGV2ZW50IHRoYXRcbiAgICAvLyB1bmJvdW5kIHRoaXMgZXZlbnQgaGFuZGxlci4gU28gY2hlY2sgb3BlblNjb3BlIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAgIGlmICghb3BlblNjb3BlIHx8ICFvcGVuU2NvcGUuaXNPcGVuKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKGV2dCAmJiBvcGVuU2NvcGUuZ2V0QXV0b0Nsb3NlKCkgPT09ICdkaXNhYmxlZCcpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAoZXZ0ICYmIGV2dC53aGljaCA9PT0gMykgeyByZXR1cm47IH1cblxuICAgIHZhciB0b2dnbGVFbGVtZW50ID0gb3BlblNjb3BlLmdldFRvZ2dsZUVsZW1lbnQoKTtcbiAgICBpZiAoZXZ0ICYmIHRvZ2dsZUVsZW1lbnQgJiYgdG9nZ2xlRWxlbWVudFswXS5jb250YWlucyhldnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkcm9wZG93bkVsZW1lbnQgPSBvcGVuU2NvcGUuZ2V0RHJvcGRvd25FbGVtZW50KCk7XG4gICAgaWYgKGV2dCAmJiBvcGVuU2NvcGUuZ2V0QXV0b0Nsb3NlKCkgPT09ICdvdXRzaWRlQ2xpY2snICYmXG4gICAgICBkcm9wZG93bkVsZW1lbnQgJiYgZHJvcGRvd25FbGVtZW50WzBdLmNvbnRhaW5zKGV2dC50YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3BlblNjb3BlLmZvY3VzVG9nZ2xlRWxlbWVudCgpO1xuICAgIG9wZW5TY29wZS5pc09wZW4gPSBmYWxzZTtcblxuICAgIGlmICghJHJvb3RTY29wZS4kJHBoYXNlKSB7XG4gICAgICBvcGVuU2NvcGUuJGFwcGx5KCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMua2V5YmluZEZpbHRlciA9IGZ1bmN0aW9uKGV2dCkge1xuICAgIGlmICghb3BlblNjb3BlKSB7XG4gICAgICAvLyBzZWUgdGhpcy5jbG9zZSBhcyBFU0MgY291bGQgaGF2ZSBiZWVuIHByZXNzZWQgd2hpY2gga2lsbHMgdGhlIHNjb3BlIHNvIHdlIGNhbiBub3QgcHJvY2VlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkcm9wZG93bkVsZW1lbnQgPSBvcGVuU2NvcGUuZ2V0RHJvcGRvd25FbGVtZW50KCk7XG4gICAgdmFyIHRvZ2dsZUVsZW1lbnQgPSBvcGVuU2NvcGUuZ2V0VG9nZ2xlRWxlbWVudCgpO1xuICAgIHZhciBkcm9wZG93bkVsZW1lbnRUYXJnZXRlZCA9IGRyb3Bkb3duRWxlbWVudCAmJiBkcm9wZG93bkVsZW1lbnRbMF0uY29udGFpbnMoZXZ0LnRhcmdldCk7XG4gICAgdmFyIHRvZ2dsZUVsZW1lbnRUYXJnZXRlZCA9IHRvZ2dsZUVsZW1lbnQgJiYgdG9nZ2xlRWxlbWVudFswXS5jb250YWlucyhldnQudGFyZ2V0KTtcbiAgICBpZiAoZXZ0LndoaWNoID09PSAyNykge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgb3BlblNjb3BlLmZvY3VzVG9nZ2xlRWxlbWVudCgpO1xuICAgICAgY2xvc2VEcm9wZG93bigpO1xuICAgIH0gZWxzZSBpZiAob3BlblNjb3BlLmlzS2V5bmF2RW5hYmxlZCgpICYmIFszOCwgNDBdLmluZGV4T2YoZXZ0LndoaWNoKSAhPT0gLTEgJiYgb3BlblNjb3BlLmlzT3BlbiAmJiAoZHJvcGRvd25FbGVtZW50VGFyZ2V0ZWQgfHwgdG9nZ2xlRWxlbWVudFRhcmdldGVkKSkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBvcGVuU2NvcGUuZm9jdXNEcm9wZG93bkVudHJ5KGV2dC53aGljaCk7XG4gICAgfVxuICB9O1xufV0pXG5cbi5jb250cm9sbGVyKCdVaWJEcm9wZG93bkNvbnRyb2xsZXInLCBbJyRzY29wZScsICckZWxlbWVudCcsICckYXR0cnMnLCAnJHBhcnNlJywgJ3VpYkRyb3Bkb3duQ29uZmlnJywgJ3VpYkRyb3Bkb3duU2VydmljZScsICckYW5pbWF0ZScsICckdWliUG9zaXRpb24nLCAnJGRvY3VtZW50JywgJyRjb21waWxlJywgJyR0ZW1wbGF0ZVJlcXVlc3QnLCBmdW5jdGlvbigkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsICRwYXJzZSwgZHJvcGRvd25Db25maWcsIHVpYkRyb3Bkb3duU2VydmljZSwgJGFuaW1hdGUsICRwb3NpdGlvbiwgJGRvY3VtZW50LCAkY29tcGlsZSwgJHRlbXBsYXRlUmVxdWVzdCkge1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgc2NvcGUgPSAkc2NvcGUuJG5ldygpLCAvLyBjcmVhdGUgYSBjaGlsZCBzY29wZSBzbyB3ZSBhcmUgbm90IHBvbGx1dGluZyBvcmlnaW5hbCBvbmVcbiAgICB0ZW1wbGF0ZVNjb3BlLFxuICAgIGFwcGVuZFRvT3BlbkNsYXNzID0gZHJvcGRvd25Db25maWcuYXBwZW5kVG9PcGVuQ2xhc3MsXG4gICAgb3BlbkNsYXNzID0gZHJvcGRvd25Db25maWcub3BlbkNsYXNzLFxuICAgIGdldElzT3BlbixcbiAgICBzZXRJc09wZW4gPSBhbmd1bGFyLm5vb3AsXG4gICAgdG9nZ2xlSW52b2tlciA9ICRhdHRycy5vblRvZ2dsZSA/ICRwYXJzZSgkYXR0cnMub25Ub2dnbGUpIDogYW5ndWxhci5ub29wLFxuICAgIGtleW5hdkVuYWJsZWQgPSBmYWxzZSxcbiAgICBzZWxlY3RlZE9wdGlvbiA9IG51bGwsXG4gICAgYm9keSA9ICRkb2N1bWVudC5maW5kKCdib2R5Jyk7XG5cbiAgJGVsZW1lbnQuYWRkQ2xhc3MoJ2Ryb3Bkb3duJyk7XG5cbiAgdGhpcy5pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCRhdHRycy5pc09wZW4pIHtcbiAgICAgIGdldElzT3BlbiA9ICRwYXJzZSgkYXR0cnMuaXNPcGVuKTtcbiAgICAgIHNldElzT3BlbiA9IGdldElzT3Blbi5hc3NpZ247XG5cbiAgICAgICRzY29wZS4kd2F0Y2goZ2V0SXNPcGVuLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBzY29wZS5pc09wZW4gPSAhIXZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAga2V5bmF2RW5hYmxlZCA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5rZXlib2FyZE5hdik7XG4gIH07XG5cbiAgdGhpcy50b2dnbGUgPSBmdW5jdGlvbihvcGVuKSB7XG4gICAgc2NvcGUuaXNPcGVuID0gYXJndW1lbnRzLmxlbmd0aCA/ICEhb3BlbiA6ICFzY29wZS5pc09wZW47XG4gICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihzZXRJc09wZW4pKSB7XG4gICAgICBzZXRJc09wZW4oc2NvcGUsIHNjb3BlLmlzT3Blbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjb3BlLmlzT3BlbjtcbiAgfTtcblxuICAvLyBBbGxvdyBvdGhlciBkaXJlY3RpdmVzIHRvIHdhdGNoIHN0YXR1c1xuICB0aGlzLmlzT3BlbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzY29wZS5pc09wZW47XG4gIH07XG5cbiAgc2NvcGUuZ2V0VG9nZ2xlRWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZWxmLnRvZ2dsZUVsZW1lbnQ7XG4gIH07XG5cbiAgc2NvcGUuZ2V0QXV0b0Nsb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICRhdHRycy5hdXRvQ2xvc2UgfHwgJ2Fsd2F5cyc7IC8vb3IgJ291dHNpZGVDbGljaycgb3IgJ2Rpc2FibGVkJ1xuICB9O1xuXG4gIHNjb3BlLmdldEVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJGVsZW1lbnQ7XG4gIH07XG5cbiAgc2NvcGUuaXNLZXluYXZFbmFibGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGtleW5hdkVuYWJsZWQ7XG4gIH07XG5cbiAgc2NvcGUuZm9jdXNEcm9wZG93bkVudHJ5ID0gZnVuY3Rpb24oa2V5Q29kZSkge1xuICAgIHZhciBlbGVtcyA9IHNlbGYuZHJvcGRvd25NZW51ID8gLy9JZiBhcHBlbmQgdG8gYm9keSBpcyB1c2VkLlxuICAgICAgYW5ndWxhci5lbGVtZW50KHNlbGYuZHJvcGRvd25NZW51KS5maW5kKCdhJykgOlxuICAgICAgJGVsZW1lbnQuZmluZCgndWwnKS5lcSgwKS5maW5kKCdhJyk7XG5cbiAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgIGNhc2UgNDA6IHtcbiAgICAgICAgaWYgKCFhbmd1bGFyLmlzTnVtYmVyKHNlbGYuc2VsZWN0ZWRPcHRpb24pKSB7XG4gICAgICAgICAgc2VsZi5zZWxlY3RlZE9wdGlvbiA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi5zZWxlY3RlZE9wdGlvbiA9IHNlbGYuc2VsZWN0ZWRPcHRpb24gPT09IGVsZW1zLmxlbmd0aCAtIDEgP1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE9wdGlvbiA6XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkT3B0aW9uICsgMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzg6IHtcbiAgICAgICAgaWYgKCFhbmd1bGFyLmlzTnVtYmVyKHNlbGYuc2VsZWN0ZWRPcHRpb24pKSB7XG4gICAgICAgICAgc2VsZi5zZWxlY3RlZE9wdGlvbiA9IGVsZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi5zZWxlY3RlZE9wdGlvbiA9IHNlbGYuc2VsZWN0ZWRPcHRpb24gPT09IDAgP1xuICAgICAgICAgICAgMCA6IHNlbGYuc2VsZWN0ZWRPcHRpb24gLSAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBlbGVtc1tzZWxmLnNlbGVjdGVkT3B0aW9uXS5mb2N1cygpO1xuICB9O1xuXG4gIHNjb3BlLmdldERyb3Bkb3duRWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZWxmLmRyb3Bkb3duTWVudTtcbiAgfTtcblxuICBzY29wZS5mb2N1c1RvZ2dsZUVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoc2VsZi50b2dnbGVFbGVtZW50KSB7XG4gICAgICBzZWxmLnRvZ2dsZUVsZW1lbnRbMF0uZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRHJvcGRvd25NZW51KCkge1xuICAgICRlbGVtZW50LmFwcGVuZChzZWxmLmRyb3Bkb3duTWVudSk7XG4gIH1cblxuICBzY29wZS4kd2F0Y2goJ2lzT3BlbicsIGZ1bmN0aW9uKGlzT3Blbiwgd2FzT3Blbikge1xuICAgIHZhciBhcHBlbmRUbyA9IG51bGwsXG4gICAgICBhcHBlbmRUb0JvZHkgPSBmYWxzZTtcblxuICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMuZHJvcGRvd25BcHBlbmRUbykpIHtcbiAgICAgIHZhciBhcHBlbmRUb0VsID0gJHBhcnNlKCRhdHRycy5kcm9wZG93bkFwcGVuZFRvKShzY29wZSk7XG4gICAgICBpZiAoYXBwZW5kVG9FbCkge1xuICAgICAgICBhcHBlbmRUbyA9IGFuZ3VsYXIuZWxlbWVudChhcHBlbmRUb0VsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLmRyb3Bkb3duQXBwZW5kVG9Cb2R5KSkge1xuICAgICAgdmFyIGFwcGVuZFRvQm9keVZhbHVlID0gJHBhcnNlKCRhdHRycy5kcm9wZG93bkFwcGVuZFRvQm9keSkoc2NvcGUpO1xuICAgICAgaWYgKGFwcGVuZFRvQm9keVZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICBhcHBlbmRUb0JvZHkgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcHBlbmRUb0JvZHkgJiYgIWFwcGVuZFRvKSB7XG4gICAgICBhcHBlbmRUbyA9IGJvZHk7XG4gICAgfVxuXG4gICAgaWYgKGFwcGVuZFRvICYmIHNlbGYuZHJvcGRvd25NZW51KSB7XG4gICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgIGFwcGVuZFRvLmFwcGVuZChzZWxmLmRyb3Bkb3duTWVudSk7XG4gICAgICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsIHJlbW92ZURyb3Bkb3duTWVudSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZWxlbWVudC5vZmYoJyRkZXN0cm95JywgcmVtb3ZlRHJvcGRvd25NZW51KTtcbiAgICAgICAgcmVtb3ZlRHJvcGRvd25NZW51KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFwcGVuZFRvICYmIHNlbGYuZHJvcGRvd25NZW51KSB7XG4gICAgICB2YXIgcG9zID0gJHBvc2l0aW9uLnBvc2l0aW9uRWxlbWVudHMoJGVsZW1lbnQsIHNlbGYuZHJvcGRvd25NZW51LCAnYm90dG9tLWxlZnQnLCB0cnVlKSxcbiAgICAgICAgY3NzLFxuICAgICAgICByaWdodGFsaWduLFxuICAgICAgICBzY3JvbGxiYXJQYWRkaW5nLFxuICAgICAgICBzY3JvbGxiYXJXaWR0aCA9IDA7XG5cbiAgICAgIGNzcyA9IHtcbiAgICAgICAgdG9wOiBwb3MudG9wICsgJ3B4JyxcbiAgICAgICAgZGlzcGxheTogaXNPcGVuID8gJ2Jsb2NrJyA6ICdub25lJ1xuICAgICAgfTtcblxuICAgICAgcmlnaHRhbGlnbiA9IHNlbGYuZHJvcGRvd25NZW51Lmhhc0NsYXNzKCdkcm9wZG93bi1tZW51LXJpZ2h0Jyk7XG4gICAgICBpZiAoIXJpZ2h0YWxpZ24pIHtcbiAgICAgICAgY3NzLmxlZnQgPSBwb3MubGVmdCArICdweCc7XG4gICAgICAgIGNzcy5yaWdodCA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcy5sZWZ0ID0gJ2F1dG8nO1xuICAgICAgICBzY3JvbGxiYXJQYWRkaW5nID0gJHBvc2l0aW9uLnNjcm9sbGJhclBhZGRpbmcoYXBwZW5kVG8pO1xuXG4gICAgICAgIGlmIChzY3JvbGxiYXJQYWRkaW5nLmhlaWdodE92ZXJmbG93ICYmIHNjcm9sbGJhclBhZGRpbmcuc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgICBzY3JvbGxiYXJXaWR0aCA9IHNjcm9sbGJhclBhZGRpbmcuc2Nyb2xsYmFyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjc3MucmlnaHQgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIHNjcm9sbGJhcldpZHRoIC1cbiAgICAgICAgICAocG9zLmxlZnQgKyAkZWxlbWVudC5wcm9wKCdvZmZzZXRXaWR0aCcpKSArICdweCc7XG4gICAgICB9XG5cbiAgICAgIC8vIE5lZWQgdG8gYWRqdXN0IG91ciBwb3NpdGlvbmluZyB0byBiZSByZWxhdGl2ZSB0byB0aGUgYXBwZW5kVG8gY29udGFpbmVyXG4gICAgICAvLyBpZiBpdCdzIG5vdCB0aGUgYm9keSBlbGVtZW50XG4gICAgICBpZiAoIWFwcGVuZFRvQm9keSkge1xuICAgICAgICB2YXIgYXBwZW5kT2Zmc2V0ID0gJHBvc2l0aW9uLm9mZnNldChhcHBlbmRUbyk7XG5cbiAgICAgICAgY3NzLnRvcCA9IHBvcy50b3AgLSBhcHBlbmRPZmZzZXQudG9wICsgJ3B4JztcblxuICAgICAgICBpZiAoIXJpZ2h0YWxpZ24pIHtcbiAgICAgICAgICBjc3MubGVmdCA9IHBvcy5sZWZ0IC0gYXBwZW5kT2Zmc2V0LmxlZnQgKyAncHgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNzcy5yaWdodCA9IHdpbmRvdy5pbm5lcldpZHRoIC1cbiAgICAgICAgICAgIChwb3MubGVmdCAtIGFwcGVuZE9mZnNldC5sZWZ0ICsgJGVsZW1lbnQucHJvcCgnb2Zmc2V0V2lkdGgnKSkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlbGYuZHJvcGRvd25NZW51LmNzcyhjc3MpO1xuICAgIH1cblxuICAgIHZhciBvcGVuQ29udGFpbmVyID0gYXBwZW5kVG8gPyBhcHBlbmRUbyA6ICRlbGVtZW50O1xuICAgIHZhciBkcm9wZG93bk9wZW5DbGFzcyA9IGFwcGVuZFRvID8gYXBwZW5kVG9PcGVuQ2xhc3MgOiBvcGVuQ2xhc3M7XG4gICAgdmFyIGhhc09wZW5DbGFzcyA9IG9wZW5Db250YWluZXIuaGFzQ2xhc3MoZHJvcGRvd25PcGVuQ2xhc3MpO1xuICAgIHZhciBpc09ubHlPcGVuID0gdWliRHJvcGRvd25TZXJ2aWNlLmlzT25seU9wZW4oJHNjb3BlLCBhcHBlbmRUbyk7XG5cbiAgICBpZiAoaGFzT3BlbkNsYXNzID09PSAhaXNPcGVuKSB7XG4gICAgICB2YXIgdG9nZ2xlQ2xhc3M7XG4gICAgICBpZiAoYXBwZW5kVG8pIHtcbiAgICAgICAgdG9nZ2xlQ2xhc3MgPSAhaXNPbmx5T3BlbiA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9nZ2xlQ2xhc3MgPSBpc09wZW4gPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJztcbiAgICAgIH1cbiAgICAgICRhbmltYXRlW3RvZ2dsZUNsYXNzXShvcGVuQ29udGFpbmVyLCBkcm9wZG93bk9wZW5DbGFzcykudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGlzT3BlbikgJiYgaXNPcGVuICE9PSB3YXNPcGVuKSB7XG4gICAgICAgICAgdG9nZ2xlSW52b2tlcigkc2NvcGUsIHsgb3BlbjogISFpc09wZW4gfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIGlmIChzZWxmLmRyb3Bkb3duTWVudVRlbXBsYXRlVXJsKSB7XG4gICAgICAgICR0ZW1wbGF0ZVJlcXVlc3Qoc2VsZi5kcm9wZG93bk1lbnVUZW1wbGF0ZVVybCkudGhlbihmdW5jdGlvbih0cGxDb250ZW50KSB7XG4gICAgICAgICAgdGVtcGxhdGVTY29wZSA9IHNjb3BlLiRuZXcoKTtcbiAgICAgICAgICAkY29tcGlsZSh0cGxDb250ZW50LnRyaW0oKSkodGVtcGxhdGVTY29wZSwgZnVuY3Rpb24oZHJvcGRvd25FbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgbmV3RWwgPSBkcm9wZG93bkVsZW1lbnQ7XG4gICAgICAgICAgICBzZWxmLmRyb3Bkb3duTWVudS5yZXBsYWNlV2l0aChuZXdFbCk7XG4gICAgICAgICAgICBzZWxmLmRyb3Bkb3duTWVudSA9IG5ld0VsO1xuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCdrZXlkb3duJywgdWliRHJvcGRvd25TZXJ2aWNlLmtleWJpbmRGaWx0ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRkb2N1bWVudC5vbigna2V5ZG93bicsIHVpYkRyb3Bkb3duU2VydmljZS5rZXliaW5kRmlsdGVyKTtcbiAgICAgIH1cblxuICAgICAgc2NvcGUuZm9jdXNUb2dnbGVFbGVtZW50KCk7XG4gICAgICB1aWJEcm9wZG93blNlcnZpY2Uub3BlbihzY29wZSwgJGVsZW1lbnQsIGFwcGVuZFRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdWliRHJvcGRvd25TZXJ2aWNlLmNsb3NlKHNjb3BlLCAkZWxlbWVudCwgYXBwZW5kVG8pO1xuICAgICAgaWYgKHNlbGYuZHJvcGRvd25NZW51VGVtcGxhdGVVcmwpIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlU2NvcGUpIHtcbiAgICAgICAgICB0ZW1wbGF0ZVNjb3BlLiRkZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld0VsID0gYW5ndWxhci5lbGVtZW50KCc8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+PC91bD4nKTtcbiAgICAgICAgc2VsZi5kcm9wZG93bk1lbnUucmVwbGFjZVdpdGgobmV3RWwpO1xuICAgICAgICBzZWxmLmRyb3Bkb3duTWVudSA9IG5ld0VsO1xuICAgICAgfVxuXG4gICAgICBzZWxmLnNlbGVjdGVkT3B0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHNldElzT3BlbikpIHtcbiAgICAgIHNldElzT3Blbigkc2NvcGUsIGlzT3Blbik7XG4gICAgfVxuICB9KTtcbn1dKVxuXG4uZGlyZWN0aXZlKCd1aWJEcm9wZG93bicsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIGNvbnRyb2xsZXI6ICdVaWJEcm9wZG93bkNvbnRyb2xsZXInLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgZHJvcGRvd25DdHJsKSB7XG4gICAgICBkcm9wZG93bkN0cmwuaW5pdCgpO1xuICAgIH1cbiAgfTtcbn0pXG5cbi5kaXJlY3RpdmUoJ3VpYkRyb3Bkb3duTWVudScsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgcmVxdWlyZTogJz9edWliRHJvcGRvd24nLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgZHJvcGRvd25DdHJsKSB7XG4gICAgICBpZiAoIWRyb3Bkb3duQ3RybCB8fCBhbmd1bGFyLmlzRGVmaW5lZChhdHRycy5kcm9wZG93bk5lc3RlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50LmFkZENsYXNzKCdkcm9wZG93bi1tZW51Jyk7XG5cbiAgICAgIHZhciB0cGxVcmwgPSBhdHRycy50ZW1wbGF0ZVVybDtcbiAgICAgIGlmICh0cGxVcmwpIHtcbiAgICAgICAgZHJvcGRvd25DdHJsLmRyb3Bkb3duTWVudVRlbXBsYXRlVXJsID0gdHBsVXJsO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRyb3Bkb3duQ3RybC5kcm9wZG93bk1lbnUpIHtcbiAgICAgICAgZHJvcGRvd25DdHJsLmRyb3Bkb3duTWVudSA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSlcblxuLmRpcmVjdGl2ZSgndWliRHJvcGRvd25Ub2dnbGUnLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1aXJlOiAnP151aWJEcm9wZG93bicsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBkcm9wZG93bkN0cmwpIHtcbiAgICAgIGlmICghZHJvcGRvd25DdHJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudC5hZGRDbGFzcygnZHJvcGRvd24tdG9nZ2xlJyk7XG5cbiAgICAgIGRyb3Bkb3duQ3RybC50b2dnbGVFbGVtZW50ID0gZWxlbWVudDtcblxuICAgICAgdmFyIHRvZ2dsZURyb3Bkb3duID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQ2xhc3MoJ2Rpc2FibGVkJykgJiYgIWF0dHJzLmRpc2FibGVkKSB7XG4gICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZHJvcGRvd25DdHJsLnRvZ2dsZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBlbGVtZW50Lm9uKCdjbGljaycsIHRvZ2dsZURyb3Bkb3duKTtcblxuICAgICAgLy8gV0FJLUFSSUFcbiAgICAgIGVsZW1lbnQuYXR0cih7ICdhcmlhLWhhc3BvcHVwJzogdHJ1ZSwgJ2FyaWEtZXhwYW5kZWQnOiBmYWxzZSB9KTtcbiAgICAgIHNjb3BlLiR3YXRjaChkcm9wZG93bkN0cmwuaXNPcGVuLCBmdW5jdGlvbihpc09wZW4pIHtcbiAgICAgICAgZWxlbWVudC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgISFpc09wZW4pO1xuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZWxlbWVudC5vZmYoJ2NsaWNrJywgdG9nZ2xlRHJvcGRvd24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAuc3RhY2tlZE1hcCcsIFtdKVxuLyoqXG4gKiBBIGhlbHBlciwgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBhY3RzIGFzIGEgbWFwIGJ1dCBhbHNvIGFsbG93cyBnZXR0aW5nIC8gcmVtb3ZpbmdcbiAqIGVsZW1lbnRzIGluIHRoZSBMSUZPIG9yZGVyXG4gKi9cbiAgLmZhY3RvcnkoJyQkc3RhY2tlZE1hcCcsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVOZXc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc3RhY2sgPSBbXTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gc3RhY2tbaV0ua2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrW2ldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBrZXlzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGtleXMucHVzaChzdGFja1tpXS5rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHZhciBpZHggPSAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gc3RhY2tbaV0ua2V5KSB7XG4gICAgICAgICAgICAgICAgaWR4ID0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnNwbGljZShpZHgsIDEpWzBdO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVtb3ZlVG9wOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFjay5wb3AoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2subGVuZ3RoO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAubW9kYWwnLCBbJ3VpLmJvb3RzdHJhcC5tdWx0aU1hcCcsICd1aS5ib290c3RyYXAuc3RhY2tlZE1hcCcsICd1aS5ib290c3RyYXAucG9zaXRpb24nXSlcbi8qKlxuICogUGx1Z2dhYmxlIHJlc29sdmUgbWVjaGFuaXNtIGZvciB0aGUgbW9kYWwgcmVzb2x2ZSByZXNvbHV0aW9uXG4gKiBTdXBwb3J0cyBVSSBSb3V0ZXIncyAkcmVzb2x2ZSBzZXJ2aWNlXG4gKi9cbiAgLnByb3ZpZGVyKCckdWliUmVzb2x2ZScsIGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNvbHZlID0gdGhpcztcbiAgICB0aGlzLnJlc29sdmVyID0gbnVsbDtcblxuICAgIHRoaXMuc2V0UmVzb2x2ZXIgPSBmdW5jdGlvbihyZXNvbHZlcikge1xuICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyO1xuICAgIH07XG5cbiAgICB0aGlzLiRnZXQgPSBbJyRpbmplY3RvcicsICckcScsIGZ1bmN0aW9uKCRpbmplY3RvciwgJHEpIHtcbiAgICAgIHZhciByZXNvbHZlciA9IHJlc29sdmUucmVzb2x2ZXIgPyAkaW5qZWN0b3IuZ2V0KHJlc29sdmUucmVzb2x2ZXIpIDogbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKGludm9jYWJsZXMsIGxvY2FscywgcGFyZW50LCBzZWxmKSB7XG4gICAgICAgICAgaWYgKHJlc29sdmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZShpbnZvY2FibGVzLCBsb2NhbHMsIHBhcmVudCwgc2VsZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHByb21pc2VzID0gW107XG5cbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goaW52b2NhYmxlcywgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24odmFsdWUpIHx8IGFuZ3VsYXIuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCgkcS5yZXNvbHZlKCRpbmplY3Rvci5pbnZva2UodmFsdWUpKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2goJHEucmVzb2x2ZSgkaW5qZWN0b3IuZ2V0KHZhbHVlKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCgkcS5yZXNvbHZlKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gJHEuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKHJlc29sdmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzb2x2ZU9iaiA9IHt9O1xuICAgICAgICAgICAgdmFyIHJlc29sdmVJdGVyID0gMDtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChpbnZvY2FibGVzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICAgIHJlc29sdmVPYmpba2V5XSA9IHJlc29sdmVzW3Jlc29sdmVJdGVyKytdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlT2JqO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1dO1xuICB9KVxuXG4vKipcbiAqIEEgaGVscGVyIGRpcmVjdGl2ZSBmb3IgdGhlICRtb2RhbCBzZXJ2aWNlLiBJdCBjcmVhdGVzIGEgYmFja2Ryb3AgZWxlbWVudC5cbiAqL1xuICAuZGlyZWN0aXZlKCd1aWJNb2RhbEJhY2tkcm9wJywgWyckYW5pbWF0ZScsICckaW5qZWN0b3InLCAnJHVpYk1vZGFsU3RhY2snLFxuICBmdW5jdGlvbigkYW5pbWF0ZSwgJGluamVjdG9yLCAkbW9kYWxTdGFjaykge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0EnLFxuICAgICAgY29tcGlsZTogZnVuY3Rpb24odEVsZW1lbnQsIHRBdHRycykge1xuICAgICAgICB0RWxlbWVudC5hZGRDbGFzcyh0QXR0cnMuYmFja2Ryb3BDbGFzcyk7XG4gICAgICAgIHJldHVybiBsaW5rRm47XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxpbmtGbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIGlmIChhdHRycy5tb2RhbEluQ2xhc3MpIHtcbiAgICAgICAgJGFuaW1hdGUuYWRkQ2xhc3MoZWxlbWVudCwgYXR0cnMubW9kYWxJbkNsYXNzKTtcblxuICAgICAgICBzY29wZS4kb24oJG1vZGFsU3RhY2suTk9XX0NMT1NJTkdfRVZFTlQsIGZ1bmN0aW9uKGUsIHNldElzQXN5bmMpIHtcbiAgICAgICAgICB2YXIgZG9uZSA9IHNldElzQXN5bmMoKTtcbiAgICAgICAgICBpZiAoc2NvcGUubW9kYWxPcHRpb25zLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3MoZWxlbWVudCwgYXR0cnMubW9kYWxJbkNsYXNzKS50aGVuKGRvbmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKVxuXG4gIC5kaXJlY3RpdmUoJ3VpYk1vZGFsV2luZG93JywgWyckdWliTW9kYWxTdGFjaycsICckcScsICckYW5pbWF0ZUNzcycsICckZG9jdW1lbnQnLFxuICBmdW5jdGlvbigkbW9kYWxTdGFjaywgJHEsICRhbmltYXRlQ3NzLCAkZG9jdW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NvcGU6IHtcbiAgICAgICAgaW5kZXg6ICdAJ1xuICAgICAgfSxcbiAgICAgIHJlc3RyaWN0OiAnQScsXG4gICAgICB0cmFuc2NsdWRlOiB0cnVlLFxuICAgICAgdGVtcGxhdGVVcmw6IGZ1bmN0aW9uKHRFbGVtZW50LCB0QXR0cnMpIHtcbiAgICAgICAgcmV0dXJuIHRBdHRycy50ZW1wbGF0ZVVybCB8fCAndWliL3RlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sJztcbiAgICAgIH0sXG4gICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgICAgZWxlbWVudC5hZGRDbGFzcyhhdHRycy53aW5kb3dUb3BDbGFzcyB8fCAnJyk7XG4gICAgICAgIHNjb3BlLnNpemUgPSBhdHRycy5zaXplO1xuXG4gICAgICAgIHNjb3BlLmNsb3NlID0gZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAgICAgdmFyIG1vZGFsID0gJG1vZGFsU3RhY2suZ2V0VG9wKCk7XG4gICAgICAgICAgaWYgKG1vZGFsICYmIG1vZGFsLnZhbHVlLmJhY2tkcm9wICYmXG4gICAgICAgICAgICBtb2RhbC52YWx1ZS5iYWNrZHJvcCAhPT0gJ3N0YXRpYycgJiZcbiAgICAgICAgICAgIGV2dC50YXJnZXQgPT09IGV2dC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRtb2RhbFN0YWNrLmRpc21pc3MobW9kYWwua2V5LCAnYmFja2Ryb3AgY2xpY2snKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gbW92ZWQgZnJvbSB0ZW1wbGF0ZSB0byBmaXggaXNzdWUgIzIyODBcbiAgICAgICAgZWxlbWVudC5vbignY2xpY2snLCBzY29wZS5jbG9zZSk7XG5cbiAgICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IGFkZGVkIHRvIHRoZSBzY29wZSBmb3IgdGhlIHB1cnBvc2Ugb2YgZGV0ZWN0aW5nIHdoZW4gdGhpcyBkaXJlY3RpdmUgaXMgcmVuZGVyZWQuXG4gICAgICAgIC8vIFdlIGNhbiBkZXRlY3QgdGhhdCBieSB1c2luZyB0aGlzIHByb3BlcnR5IGluIHRoZSB0ZW1wbGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkaXJlY3RpdmUgYW5kIHRoZW4gdXNlXG4gICAgICAgIC8vIHtAbGluayBBdHRyaWJ1dGUjJG9ic2VydmV9IG9uIGl0LiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBzZWUge0BsaW5rIFRhYmxlQ29sdW1uUmVzaXplfS5cbiAgICAgICAgc2NvcGUuJGlzUmVuZGVyZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIERlZmVycmVkIG9iamVjdCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGlzIG1vZGFsIGlzIHJlbmRlcmVkLlxuICAgICAgICB2YXIgbW9kYWxSZW5kZXJEZWZlck9iaiA9ICRxLmRlZmVyKCk7XG4gICAgICAgIC8vIFJlc29sdmUgcmVuZGVyIHByb21pc2UgcG9zdC1kaWdlc3RcbiAgICAgICAgc2NvcGUuJCRwb3N0RGlnZXN0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIG1vZGFsUmVuZGVyRGVmZXJPYmoucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBtb2RhbFJlbmRlckRlZmVyT2JqLnByb21pc2UudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYW5pbWF0aW9uUHJvbWlzZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoYXR0cnMubW9kYWxJbkNsYXNzKSB7XG4gICAgICAgICAgICBhbmltYXRpb25Qcm9taXNlID0gJGFuaW1hdGVDc3MoZWxlbWVudCwge1xuICAgICAgICAgICAgICBhZGRDbGFzczogYXR0cnMubW9kYWxJbkNsYXNzXG4gICAgICAgICAgICB9KS5zdGFydCgpO1xuXG4gICAgICAgICAgICBzY29wZS4kb24oJG1vZGFsU3RhY2suTk9XX0NMT1NJTkdfRVZFTlQsIGZ1bmN0aW9uKGUsIHNldElzQXN5bmMpIHtcbiAgICAgICAgICAgICAgdmFyIGRvbmUgPSBzZXRJc0FzeW5jKCk7XG4gICAgICAgICAgICAgICRhbmltYXRlQ3NzKGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzczogYXR0cnMubW9kYWxJbkNsYXNzXG4gICAgICAgICAgICAgIH0pLnN0YXJ0KCkudGhlbihkb25lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuXG4gICAgICAgICAgJHEud2hlbihhbmltYXRpb25Qcm9taXNlKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gTm90aWZ5IHtAbGluayAkbW9kYWxTdGFja30gdGhhdCBtb2RhbCBpcyByZW5kZXJlZC5cbiAgICAgICAgICAgIHZhciBtb2RhbCA9ICRtb2RhbFN0YWNrLmdldFRvcCgpO1xuICAgICAgICAgICAgaWYgKG1vZGFsKSB7XG4gICAgICAgICAgICAgICRtb2RhbFN0YWNrLm1vZGFsUmVuZGVyZWQobW9kYWwua2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiBzb21ldGhpbmcgd2l0aGluIHRoZSBmcmVzaGx5LW9wZW5lZCBtb2RhbCBhbHJlYWR5IGhhcyBmb2N1cyAocGVyaGFwcyB2aWEgYVxuICAgICAgICAgICAgICogZGlyZWN0aXZlIHRoYXQgY2F1c2VzIGZvY3VzKSB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0byB0cnkgdG8gZm9jdXMgYW55dGhpbmcuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghKCRkb2N1bWVudFswXS5hY3RpdmVFbGVtZW50ICYmIGVsZW1lbnRbMF0uY29udGFpbnMoJGRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpKSkge1xuICAgICAgICAgICAgICB2YXIgaW5wdXRXaXRoQXV0b2ZvY3VzID0gZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCdbYXV0b2ZvY3VzXScpO1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogQXV0by1mb2N1c2luZyBvZiBhIGZyZXNobHktb3BlbmVkIG1vZGFsIGVsZW1lbnQgY2F1c2VzIGFueSBjaGlsZCBlbGVtZW50c1xuICAgICAgICAgICAgICAgKiB3aXRoIHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlIHRvIGxvc2UgZm9jdXMuIFRoaXMgaXMgYW4gaXNzdWUgb24gdG91Y2hcbiAgICAgICAgICAgICAgICogYmFzZWQgZGV2aWNlcyB3aGljaCB3aWxsIHNob3cgYW5kIHRoZW4gaGlkZSB0aGUgb25zY3JlZW4ga2V5Ym9hcmQuXG4gICAgICAgICAgICAgICAqIEF0dGVtcHRzIHRvIHJlZm9jdXMgdGhlIGF1dG9mb2N1cyBlbGVtZW50IHZpYSBKYXZhU2NyaXB0IHdpbGwgbm90IHJlb3BlblxuICAgICAgICAgICAgICAgKiB0aGUgb25zY3JlZW4ga2V5Ym9hcmQuIEZpeGVkIGJ5IHVwZGF0ZWQgdGhlIGZvY3VzaW5nIGxvZ2ljIHRvIG9ubHkgYXV0b2ZvY3VzXG4gICAgICAgICAgICAgICAqIHRoZSBtb2RhbCBlbGVtZW50IGlmIHRoZSBtb2RhbCBkb2VzIG5vdCBjb250YWluIGFuIGF1dG9mb2N1cyBlbGVtZW50LlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgaWYgKGlucHV0V2l0aEF1dG9mb2N1cykge1xuICAgICAgICAgICAgICAgIGlucHV0V2l0aEF1dG9mb2N1cy5mb2N1cygpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRbMF0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSlcblxuICAuZGlyZWN0aXZlKCd1aWJNb2RhbEFuaW1hdGlvbkNsYXNzJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBpbGU6IGZ1bmN0aW9uKHRFbGVtZW50LCB0QXR0cnMpIHtcbiAgICAgICAgaWYgKHRBdHRycy5tb2RhbEFuaW1hdGlvbikge1xuICAgICAgICAgIHRFbGVtZW50LmFkZENsYXNzKHRBdHRycy51aWJNb2RhbEFuaW1hdGlvbkNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0pXG5cbiAgLmRpcmVjdGl2ZSgndWliTW9kYWxUcmFuc2NsdWRlJywgWyckYW5pbWF0ZScsIGZ1bmN0aW9uKCRhbmltYXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY29udHJvbGxlciwgdHJhbnNjbHVkZSkge1xuICAgICAgICB0cmFuc2NsdWRlKHNjb3BlLiRwYXJlbnQsIGZ1bmN0aW9uKGNsb25lKSB7XG4gICAgICAgICAgZWxlbWVudC5lbXB0eSgpO1xuICAgICAgICAgICRhbmltYXRlLmVudGVyKGNsb25lLCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfV0pXG5cbiAgLmZhY3RvcnkoJyR1aWJNb2RhbFN0YWNrJywgWyckYW5pbWF0ZScsICckYW5pbWF0ZUNzcycsICckZG9jdW1lbnQnLFxuICAgICckY29tcGlsZScsICckcm9vdFNjb3BlJywgJyRxJywgJyQkbXVsdGlNYXAnLCAnJCRzdGFja2VkTWFwJywgJyR1aWJQb3NpdGlvbicsXG4gICAgZnVuY3Rpb24oJGFuaW1hdGUsICRhbmltYXRlQ3NzLCAkZG9jdW1lbnQsICRjb21waWxlLCAkcm9vdFNjb3BlLCAkcSwgJCRtdWx0aU1hcCwgJCRzdGFja2VkTWFwLCAkdWliUG9zaXRpb24pIHtcbiAgICAgIHZhciBPUEVORURfTU9EQUxfQ0xBU1MgPSAnbW9kYWwtb3Blbic7XG5cbiAgICAgIHZhciBiYWNrZHJvcERvbUVsLCBiYWNrZHJvcFNjb3BlO1xuICAgICAgdmFyIG9wZW5lZFdpbmRvd3MgPSAkJHN0YWNrZWRNYXAuY3JlYXRlTmV3KCk7XG4gICAgICB2YXIgb3BlbmVkQ2xhc3NlcyA9ICQkbXVsdGlNYXAuY3JlYXRlTmV3KCk7XG4gICAgICB2YXIgJG1vZGFsU3RhY2sgPSB7XG4gICAgICAgIE5PV19DTE9TSU5HX0VWRU5UOiAnbW9kYWwuc3RhY2subm93LWNsb3NpbmcnXG4gICAgICB9O1xuICAgICAgdmFyIHRvcE1vZGFsSW5kZXggPSAwO1xuICAgICAgdmFyIHByZXZpb3VzVG9wT3BlbmVkTW9kYWwgPSBudWxsO1xuICAgICAgdmFyIEFSSUFfSElEREVOX0FUVFJJQlVURV9OQU1FID0gJ2RhdGEtYm9vdHN0cmFwLW1vZGFsLWFyaWEtaGlkZGVuLWNvdW50JztcblxuICAgICAgLy9Nb2RhbCBmb2N1cyBiZWhhdmlvclxuICAgICAgdmFyIHRhYmJhYmxlU2VsZWN0b3IgPSAnYVtocmVmXSwgYXJlYVtocmVmXSwgaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9XFwnLTFcXCddKSwgJyArXG4gICAgICAgICdidXR0b246bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9XFwnLTFcXCddKSxzZWxlY3Q6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9XFwnLTFcXCddKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9XFwnLTFcXCddKSwgJyArXG4gICAgICAgICdpZnJhbWUsIG9iamVjdCwgZW1iZWQsICpbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XFwnLTFcXCddKSwgKltjb250ZW50ZWRpdGFibGU9dHJ1ZV0nO1xuICAgICAgdmFyIHNjcm9sbGJhclBhZGRpbmc7XG4gICAgICB2YXIgU05BS0VfQ0FTRV9SRUdFWFAgPSAvW0EtWl0vZztcblxuICAgICAgLy8gVE9ETzogZXh0cmFjdCBpbnRvIGNvbW1vbiBkZXBlbmRlbmN5IHdpdGggdG9vbHRpcFxuICAgICAgZnVuY3Rpb24gc25ha2VfY2FzZShuYW1lKSB7XG4gICAgICAgIHZhciBzZXBhcmF0b3IgPSAnLSc7XG4gICAgICAgIHJldHVybiBuYW1lLnJlcGxhY2UoU05BS0VfQ0FTRV9SRUdFWFAsIGZ1bmN0aW9uKGxldHRlciwgcG9zKSB7XG4gICAgICAgICAgcmV0dXJuIChwb3MgPyBzZXBhcmF0b3IgOiAnJykgKyBsZXR0ZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGlzVmlzaWJsZShlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiAhIShlbGVtZW50Lm9mZnNldFdpZHRoIHx8XG4gICAgICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQgfHxcbiAgICAgICAgICBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gYmFja2Ryb3BJbmRleCgpIHtcbiAgICAgICAgdmFyIHRvcEJhY2tkcm9wSW5kZXggPSAtMTtcbiAgICAgICAgdmFyIG9wZW5lZCA9IG9wZW5lZFdpbmRvd3Mua2V5cygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wZW5lZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChvcGVuZWRXaW5kb3dzLmdldChvcGVuZWRbaV0pLnZhbHVlLmJhY2tkcm9wKSB7XG4gICAgICAgICAgICB0b3BCYWNrZHJvcEluZGV4ID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhbnkgYmFja2Ryb3AgZXhpc3QsIGVuc3VyZSB0aGF0IGl0J3MgaW5kZXggaXMgYWx3YXlzXG4gICAgICAgIC8vIHJpZ2h0IGJlbG93IHRoZSB0b3AgbW9kYWxcbiAgICAgICAgaWYgKHRvcEJhY2tkcm9wSW5kZXggPiAtMSAmJiB0b3BCYWNrZHJvcEluZGV4IDwgdG9wTW9kYWxJbmRleCkge1xuICAgICAgICAgIHRvcEJhY2tkcm9wSW5kZXggPSB0b3BNb2RhbEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3BCYWNrZHJvcEluZGV4O1xuICAgICAgfVxuXG4gICAgICAkcm9vdFNjb3BlLiR3YXRjaChiYWNrZHJvcEluZGV4LCBmdW5jdGlvbihuZXdCYWNrZHJvcEluZGV4KSB7XG4gICAgICAgIGlmIChiYWNrZHJvcFNjb3BlKSB7XG4gICAgICAgICAgYmFja2Ryb3BTY29wZS5pbmRleCA9IG5ld0JhY2tkcm9wSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiByZW1vdmVNb2RhbFdpbmRvdyhtb2RhbEluc3RhbmNlLCBlbGVtZW50VG9SZWNlaXZlRm9jdXMpIHtcbiAgICAgICAgdmFyIG1vZGFsV2luZG93ID0gb3BlbmVkV2luZG93cy5nZXQobW9kYWxJbnN0YW5jZSkudmFsdWU7XG4gICAgICAgIHZhciBhcHBlbmRUb0VsZW1lbnQgPSBtb2RhbFdpbmRvdy5hcHBlbmRUbztcblxuICAgICAgICAvL2NsZWFuIHVwIHRoZSBzdGFja1xuICAgICAgICBvcGVuZWRXaW5kb3dzLnJlbW92ZShtb2RhbEluc3RhbmNlKTtcbiAgICAgICAgcHJldmlvdXNUb3BPcGVuZWRNb2RhbCA9IG9wZW5lZFdpbmRvd3MudG9wKCk7XG4gICAgICAgIGlmIChwcmV2aW91c1RvcE9wZW5lZE1vZGFsKSB7XG4gICAgICAgICAgdG9wTW9kYWxJbmRleCA9IHBhcnNlSW50KHByZXZpb3VzVG9wT3BlbmVkTW9kYWwudmFsdWUubW9kYWxEb21FbC5hdHRyKCdpbmRleCcpLCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZW1vdmVBZnRlckFuaW1hdGUobW9kYWxXaW5kb3cubW9kYWxEb21FbCwgbW9kYWxXaW5kb3cubW9kYWxTY29wZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIG1vZGFsQm9keUNsYXNzID0gbW9kYWxXaW5kb3cub3BlbmVkQ2xhc3MgfHwgT1BFTkVEX01PREFMX0NMQVNTO1xuICAgICAgICAgIG9wZW5lZENsYXNzZXMucmVtb3ZlKG1vZGFsQm9keUNsYXNzLCBtb2RhbEluc3RhbmNlKTtcbiAgICAgICAgICB2YXIgYXJlQW55T3BlbiA9IG9wZW5lZENsYXNzZXMuaGFzS2V5KG1vZGFsQm9keUNsYXNzKTtcbiAgICAgICAgICBhcHBlbmRUb0VsZW1lbnQudG9nZ2xlQ2xhc3MobW9kYWxCb2R5Q2xhc3MsIGFyZUFueU9wZW4pO1xuICAgICAgICAgIGlmICghYXJlQW55T3BlbiAmJiBzY3JvbGxiYXJQYWRkaW5nICYmIHNjcm9sbGJhclBhZGRpbmcuaGVpZ2h0T3ZlcmZsb3cgJiYgc2Nyb2xsYmFyUGFkZGluZy5zY3JvbGxiYXJXaWR0aCkge1xuICAgICAgICAgICAgaWYgKHNjcm9sbGJhclBhZGRpbmcub3JpZ2luYWxSaWdodCkge1xuICAgICAgICAgICAgICBhcHBlbmRUb0VsZW1lbnQuY3NzKHtwYWRkaW5nUmlnaHQ6IHNjcm9sbGJhclBhZGRpbmcub3JpZ2luYWxSaWdodCArICdweCd9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFwcGVuZFRvRWxlbWVudC5jc3Moe3BhZGRpbmdSaWdodDogJyd9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcm9sbGJhclBhZGRpbmcgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2dnbGVUb3BXaW5kb3dDbGFzcyh0cnVlKTtcbiAgICAgICAgfSwgbW9kYWxXaW5kb3cuY2xvc2VkRGVmZXJyZWQpO1xuICAgICAgICBjaGVja1JlbW92ZUJhY2tkcm9wKCk7XG5cbiAgICAgICAgLy9tb3ZlIGZvY3VzIHRvIHNwZWNpZmllZCBlbGVtZW50IGlmIGF2YWlsYWJsZSwgb3IgZWxzZSB0byBib2R5XG4gICAgICAgIGlmIChlbGVtZW50VG9SZWNlaXZlRm9jdXMgJiYgZWxlbWVudFRvUmVjZWl2ZUZvY3VzLmZvY3VzKSB7XG4gICAgICAgICAgZWxlbWVudFRvUmVjZWl2ZUZvY3VzLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBwZW5kVG9FbGVtZW50LmZvY3VzKSB7XG4gICAgICAgICAgYXBwZW5kVG9FbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIG9yIHJlbW92ZSBcIndpbmRvd1RvcENsYXNzXCIgZnJvbSB0aGUgdG9wIHdpbmRvdyBpbiB0aGUgc3RhY2tcbiAgICAgIGZ1bmN0aW9uIHRvZ2dsZVRvcFdpbmRvd0NsYXNzKHRvZ2dsZVN3aXRjaCkge1xuICAgICAgICB2YXIgbW9kYWxXaW5kb3c7XG5cbiAgICAgICAgaWYgKG9wZW5lZFdpbmRvd3MubGVuZ3RoKCkgPiAwKSB7XG4gICAgICAgICAgbW9kYWxXaW5kb3cgPSBvcGVuZWRXaW5kb3dzLnRvcCgpLnZhbHVlO1xuICAgICAgICAgIG1vZGFsV2luZG93Lm1vZGFsRG9tRWwudG9nZ2xlQ2xhc3MobW9kYWxXaW5kb3cud2luZG93VG9wQ2xhc3MgfHwgJycsIHRvZ2dsZVN3aXRjaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2hlY2tSZW1vdmVCYWNrZHJvcCgpIHtcbiAgICAgICAgLy9yZW1vdmUgYmFja2Ryb3AgaWYgbm8gbG9uZ2VyIG5lZWRlZFxuICAgICAgICBpZiAoYmFja2Ryb3BEb21FbCAmJiBiYWNrZHJvcEluZGV4KCkgPT09IC0xKSB7XG4gICAgICAgICAgdmFyIGJhY2tkcm9wU2NvcGVSZWYgPSBiYWNrZHJvcFNjb3BlO1xuICAgICAgICAgIHJlbW92ZUFmdGVyQW5pbWF0ZShiYWNrZHJvcERvbUVsLCBiYWNrZHJvcFNjb3BlLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGJhY2tkcm9wU2NvcGVSZWYgPSBudWxsO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJhY2tkcm9wRG9tRWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgYmFja2Ryb3BTY29wZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZW1vdmVBZnRlckFuaW1hdGUoZG9tRWwsIHNjb3BlLCBkb25lLCBjbG9zZWREZWZlcnJlZCkge1xuICAgICAgICB2YXIgYXN5bmNEZWZlcnJlZDtcbiAgICAgICAgdmFyIGFzeW5jUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIHZhciBzZXRJc0FzeW5jID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFhc3luY0RlZmVycmVkKSB7XG4gICAgICAgICAgICBhc3luY0RlZmVycmVkID0gJHEuZGVmZXIoKTtcbiAgICAgICAgICAgIGFzeW5jUHJvbWlzZSA9IGFzeW5jRGVmZXJyZWQucHJvbWlzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gYXN5bmNEb25lKCkge1xuICAgICAgICAgICAgYXN5bmNEZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuJGJyb2FkY2FzdCgkbW9kYWxTdGFjay5OT1dfQ0xPU0lOR19FVkVOVCwgc2V0SXNBc3luYyk7XG5cbiAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3MgaW50ZW50aW9uYWwgdGhhdCBhc3luY1Byb21pc2UgbWlnaHQgYmUgbnVsbC5cbiAgICAgICAgLy8gVGhhdCdzIHdoZW4gc2V0SXNBc3luYyBoYXMgbm90IGJlZW4gY2FsbGVkIGR1cmluZyB0aGVcbiAgICAgICAgLy8gTk9XX0NMT1NJTkdfRVZFTlQgYnJvYWRjYXN0LlxuICAgICAgICByZXR1cm4gJHEud2hlbihhc3luY1Byb21pc2UpLnRoZW4oYWZ0ZXJBbmltYXRpbmcpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFmdGVyQW5pbWF0aW5nKCkge1xuICAgICAgICAgIGlmIChhZnRlckFuaW1hdGluZy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGFmdGVyQW5pbWF0aW5nLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgJGFuaW1hdGUubGVhdmUoZG9tRWwpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbUVsLnJlbW92ZSgpO1xuICAgICAgICAgICAgaWYgKGNsb3NlZERlZmVycmVkKSB7XG4gICAgICAgICAgICAgIGNsb3NlZERlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNjb3BlLiRkZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJGRvY3VtZW50Lm9uKCdrZXlkb3duJywga2V5ZG93bkxpc3RlbmVyKTtcblxuICAgICAgJHJvb3RTY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICRkb2N1bWVudC5vZmYoJ2tleWRvd24nLCBrZXlkb3duTGlzdGVuZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIGtleWRvd25MaXN0ZW5lcihldnQpIHtcbiAgICAgICAgaWYgKGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybiBldnQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbW9kYWwgPSBvcGVuZWRXaW5kb3dzLnRvcCgpO1xuICAgICAgICBpZiAobW9kYWwpIHtcbiAgICAgICAgICBzd2l0Y2ggKGV2dC53aGljaCkge1xuICAgICAgICAgICAgY2FzZSAyNzoge1xuICAgICAgICAgICAgICBpZiAobW9kYWwudmFsdWUua2V5Ym9hcmQpIHtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAkcm9vdFNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICRtb2RhbFN0YWNrLmRpc21pc3MobW9kYWwua2V5LCAnZXNjYXBlIGtleSBwcmVzcycpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSA5OiB7XG4gICAgICAgICAgICAgIHZhciBsaXN0ID0gJG1vZGFsU3RhY2subG9hZEZvY3VzRWxlbWVudExpc3QobW9kYWwpO1xuICAgICAgICAgICAgICB2YXIgZm9jdXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChldnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoJG1vZGFsU3RhY2suaXNGb2N1c0luRmlyc3RJdGVtKGV2dCwgbGlzdCkgfHwgJG1vZGFsU3RhY2suaXNNb2RhbEZvY3VzZWQoZXZ0LCBtb2RhbCkpIHtcbiAgICAgICAgICAgICAgICAgIGZvY3VzQ2hhbmdlZCA9ICRtb2RhbFN0YWNrLmZvY3VzTGFzdEZvY3VzYWJsZUVsZW1lbnQobGlzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICgkbW9kYWxTdGFjay5pc0ZvY3VzSW5MYXN0SXRlbShldnQsIGxpc3QpKSB7XG4gICAgICAgICAgICAgICAgICBmb2N1c0NoYW5nZWQgPSAkbW9kYWxTdGFjay5mb2N1c0ZpcnN0Rm9jdXNhYmxlRWxlbWVudChsaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZm9jdXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICRtb2RhbFN0YWNrLm9wZW4gPSBmdW5jdGlvbihtb2RhbEluc3RhbmNlLCBtb2RhbCkge1xuICAgICAgICB2YXIgbW9kYWxPcGVuZXIgPSAkZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCxcbiAgICAgICAgICBtb2RhbEJvZHlDbGFzcyA9IG1vZGFsLm9wZW5lZENsYXNzIHx8IE9QRU5FRF9NT0RBTF9DTEFTUztcblxuICAgICAgICB0b2dnbGVUb3BXaW5kb3dDbGFzcyhmYWxzZSk7XG5cbiAgICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgdG9wIGZpcnN0LCB0byBkZXRlcm1pbmUgd2hhdCBpbmRleCB3ZSBvdWdodCB0byB1c2VcbiAgICAgICAgLy8gZm9yIHRoZSBjdXJyZW50IHRvcCBtb2RhbFxuICAgICAgICBwcmV2aW91c1RvcE9wZW5lZE1vZGFsID0gb3BlbmVkV2luZG93cy50b3AoKTtcblxuICAgICAgICBvcGVuZWRXaW5kb3dzLmFkZChtb2RhbEluc3RhbmNlLCB7XG4gICAgICAgICAgZGVmZXJyZWQ6IG1vZGFsLmRlZmVycmVkLFxuICAgICAgICAgIHJlbmRlckRlZmVycmVkOiBtb2RhbC5yZW5kZXJEZWZlcnJlZCxcbiAgICAgICAgICBjbG9zZWREZWZlcnJlZDogbW9kYWwuY2xvc2VkRGVmZXJyZWQsXG4gICAgICAgICAgbW9kYWxTY29wZTogbW9kYWwuc2NvcGUsXG4gICAgICAgICAgYmFja2Ryb3A6IG1vZGFsLmJhY2tkcm9wLFxuICAgICAgICAgIGtleWJvYXJkOiBtb2RhbC5rZXlib2FyZCxcbiAgICAgICAgICBvcGVuZWRDbGFzczogbW9kYWwub3BlbmVkQ2xhc3MsXG4gICAgICAgICAgd2luZG93VG9wQ2xhc3M6IG1vZGFsLndpbmRvd1RvcENsYXNzLFxuICAgICAgICAgIGFuaW1hdGlvbjogbW9kYWwuYW5pbWF0aW9uLFxuICAgICAgICAgIGFwcGVuZFRvOiBtb2RhbC5hcHBlbmRUb1xuICAgICAgICB9KTtcblxuICAgICAgICBvcGVuZWRDbGFzc2VzLnB1dChtb2RhbEJvZHlDbGFzcywgbW9kYWxJbnN0YW5jZSk7XG5cbiAgICAgICAgdmFyIGFwcGVuZFRvRWxlbWVudCA9IG1vZGFsLmFwcGVuZFRvLFxuICAgICAgICAgICAgY3VyckJhY2tkcm9wSW5kZXggPSBiYWNrZHJvcEluZGV4KCk7XG5cbiAgICAgICAgaWYgKGN1cnJCYWNrZHJvcEluZGV4ID49IDAgJiYgIWJhY2tkcm9wRG9tRWwpIHtcbiAgICAgICAgICBiYWNrZHJvcFNjb3BlID0gJHJvb3RTY29wZS4kbmV3KHRydWUpO1xuICAgICAgICAgIGJhY2tkcm9wU2NvcGUubW9kYWxPcHRpb25zID0gbW9kYWw7XG4gICAgICAgICAgYmFja2Ryb3BTY29wZS5pbmRleCA9IGN1cnJCYWNrZHJvcEluZGV4O1xuICAgICAgICAgIGJhY2tkcm9wRG9tRWwgPSBhbmd1bGFyLmVsZW1lbnQoJzxkaXYgdWliLW1vZGFsLWJhY2tkcm9wPVwibW9kYWwtYmFja2Ryb3BcIj48L2Rpdj4nKTtcbiAgICAgICAgICBiYWNrZHJvcERvbUVsLmF0dHIoe1xuICAgICAgICAgICAgJ2NsYXNzJzogJ21vZGFsLWJhY2tkcm9wJyxcbiAgICAgICAgICAgICduZy1zdHlsZSc6ICd7XFwnei1pbmRleFxcJzogMTA0MCArIChpbmRleCAmJiAxIHx8IDApICsgaW5kZXgqMTB9JyxcbiAgICAgICAgICAgICd1aWItbW9kYWwtYW5pbWF0aW9uLWNsYXNzJzogJ2ZhZGUnLFxuICAgICAgICAgICAgJ21vZGFsLWluLWNsYXNzJzogJ2luJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChtb2RhbC5iYWNrZHJvcENsYXNzKSB7XG4gICAgICAgICAgICBiYWNrZHJvcERvbUVsLmFkZENsYXNzKG1vZGFsLmJhY2tkcm9wQ2xhc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtb2RhbC5hbmltYXRpb24pIHtcbiAgICAgICAgICAgIGJhY2tkcm9wRG9tRWwuYXR0cignbW9kYWwtYW5pbWF0aW9uJywgJ3RydWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgJGNvbXBpbGUoYmFja2Ryb3BEb21FbCkoYmFja2Ryb3BTY29wZSk7XG4gICAgICAgICAgJGFuaW1hdGUuZW50ZXIoYmFja2Ryb3BEb21FbCwgYXBwZW5kVG9FbGVtZW50KTtcbiAgICAgICAgICBpZiAoJHVpYlBvc2l0aW9uLmlzU2Nyb2xsYWJsZShhcHBlbmRUb0VsZW1lbnQpKSB7XG4gICAgICAgICAgICBzY3JvbGxiYXJQYWRkaW5nID0gJHVpYlBvc2l0aW9uLnNjcm9sbGJhclBhZGRpbmcoYXBwZW5kVG9FbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzY3JvbGxiYXJQYWRkaW5nLmhlaWdodE92ZXJmbG93ICYmIHNjcm9sbGJhclBhZGRpbmcuc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgICAgICAgYXBwZW5kVG9FbGVtZW50LmNzcyh7cGFkZGluZ1JpZ2h0OiBzY3JvbGxiYXJQYWRkaW5nLnJpZ2h0ICsgJ3B4J30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250ZW50O1xuICAgICAgICBpZiAobW9kYWwuY29tcG9uZW50KSB7XG4gICAgICAgICAgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoc25ha2VfY2FzZShtb2RhbC5jb21wb25lbnQubmFtZSkpO1xuICAgICAgICAgIGNvbnRlbnQgPSBhbmd1bGFyLmVsZW1lbnQoY29udGVudCk7XG4gICAgICAgICAgY29udGVudC5hdHRyKHtcbiAgICAgICAgICAgIHJlc29sdmU6ICckcmVzb2x2ZScsXG4gICAgICAgICAgICAnbW9kYWwtaW5zdGFuY2UnOiAnJHVpYk1vZGFsSW5zdGFuY2UnLFxuICAgICAgICAgICAgY2xvc2U6ICckY2xvc2UoJHZhbHVlKScsXG4gICAgICAgICAgICBkaXNtaXNzOiAnJGRpc21pc3MoJHZhbHVlKSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZW50ID0gbW9kYWwuY29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgdG9wIG1vZGFsIGluZGV4IGJhc2VkIG9uIHRoZSBpbmRleCBvZiB0aGUgcHJldmlvdXMgdG9wIG1vZGFsXG4gICAgICAgIHRvcE1vZGFsSW5kZXggPSBwcmV2aW91c1RvcE9wZW5lZE1vZGFsID8gcGFyc2VJbnQocHJldmlvdXNUb3BPcGVuZWRNb2RhbC52YWx1ZS5tb2RhbERvbUVsLmF0dHIoJ2luZGV4JyksIDEwKSArIDEgOiAwO1xuICAgICAgICB2YXIgYW5ndWxhckRvbUVsID0gYW5ndWxhci5lbGVtZW50KCc8ZGl2IHVpYi1tb2RhbC13aW5kb3c9XCJtb2RhbC13aW5kb3dcIj48L2Rpdj4nKTtcbiAgICAgICAgYW5ndWxhckRvbUVsLmF0dHIoe1xuICAgICAgICAgICdjbGFzcyc6ICdtb2RhbCcsXG4gICAgICAgICAgJ3RlbXBsYXRlLXVybCc6IG1vZGFsLndpbmRvd1RlbXBsYXRlVXJsLFxuICAgICAgICAgICd3aW5kb3ctdG9wLWNsYXNzJzogbW9kYWwud2luZG93VG9wQ2xhc3MsXG4gICAgICAgICAgJ3JvbGUnOiAnZGlhbG9nJyxcbiAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbW9kYWwuYXJpYUxhYmVsbGVkQnksXG4gICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBtb2RhbC5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgJ3NpemUnOiBtb2RhbC5zaXplLFxuICAgICAgICAgICdpbmRleCc6IHRvcE1vZGFsSW5kZXgsXG4gICAgICAgICAgJ2FuaW1hdGUnOiAnYW5pbWF0ZScsXG4gICAgICAgICAgJ25nLXN0eWxlJzogJ3tcXCd6LWluZGV4XFwnOiAxMDUwICsgJCR0b3BNb2RhbEluZGV4KjEwLCBkaXNwbGF5OiBcXCdibG9ja1xcJ30nLFxuICAgICAgICAgICd0YWJpbmRleCc6IC0xLFxuICAgICAgICAgICd1aWItbW9kYWwtYW5pbWF0aW9uLWNsYXNzJzogJ2ZhZGUnLFxuICAgICAgICAgICdtb2RhbC1pbi1jbGFzcyc6ICdpbidcbiAgICAgICAgfSkuYXBwZW5kKGNvbnRlbnQpO1xuICAgICAgICBpZiAobW9kYWwud2luZG93Q2xhc3MpIHtcbiAgICAgICAgICBhbmd1bGFyRG9tRWwuYWRkQ2xhc3MobW9kYWwud2luZG93Q2xhc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsLmFuaW1hdGlvbikge1xuICAgICAgICAgIGFuZ3VsYXJEb21FbC5hdHRyKCdtb2RhbC1hbmltYXRpb24nLCAndHJ1ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwZW5kVG9FbGVtZW50LmFkZENsYXNzKG1vZGFsQm9keUNsYXNzKTtcbiAgICAgICAgaWYgKG1vZGFsLnNjb3BlKSB7XG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGFkZCB0aGUgbW9kYWwgaW5kZXggdG8gdGhlIG1vZGFsIHNjb3BlXG4gICAgICAgICAgLy8gYmVjYXVzZSBpdCBpcyBuZWVkZWQgYnkgbmdTdHlsZSB0byBjb21wdXRlIHRoZSB6SW5kZXggcHJvcGVydHkuXG4gICAgICAgICAgbW9kYWwuc2NvcGUuJCR0b3BNb2RhbEluZGV4ID0gdG9wTW9kYWxJbmRleDtcbiAgICAgICAgfVxuICAgICAgICAkYW5pbWF0ZS5lbnRlcigkY29tcGlsZShhbmd1bGFyRG9tRWwpKG1vZGFsLnNjb3BlKSwgYXBwZW5kVG9FbGVtZW50KTtcblxuICAgICAgICBvcGVuZWRXaW5kb3dzLnRvcCgpLnZhbHVlLm1vZGFsRG9tRWwgPSBhbmd1bGFyRG9tRWw7XG4gICAgICAgIG9wZW5lZFdpbmRvd3MudG9wKCkudmFsdWUubW9kYWxPcGVuZXIgPSBtb2RhbE9wZW5lcjtcblxuICAgICAgICBhcHBseUFyaWFIaWRkZW4oYW5ndWxhckRvbUVsKTtcblxuICAgICAgICBmdW5jdGlvbiBhcHBseUFyaWFIaWRkZW4oZWwpIHtcbiAgICAgICAgICBpZiAoIWVsIHx8IGVsWzBdLnRhZ05hbWUgPT09ICdCT0RZJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdldFNpYmxpbmdzKGVsKS5mb3JFYWNoKGZ1bmN0aW9uKHNpYmxpbmcpIHtcbiAgICAgICAgICAgIHZhciBlbGVtSXNBbHJlYWR5SGlkZGVuID0gc2libGluZy5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT09ICd0cnVlJyxcbiAgICAgICAgICAgICAgYXJpYUhpZGRlbkNvdW50ID0gcGFyc2VJbnQoc2libGluZy5nZXRBdHRyaWJ1dGUoQVJJQV9ISURERU5fQVRUUklCVVRFX05BTUUpLCAxMCk7XG5cbiAgICAgICAgICAgIGlmICghYXJpYUhpZGRlbkNvdW50KSB7XG4gICAgICAgICAgICAgIGFyaWFIaWRkZW5Db3VudCA9IGVsZW1Jc0FscmVhZHlIaWRkZW4gPyAxIDogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2libGluZy5zZXRBdHRyaWJ1dGUoQVJJQV9ISURERU5fQVRUUklCVVRFX05BTUUsIGFyaWFIaWRkZW5Db3VudCArIDEpO1xuICAgICAgICAgICAgc2libGluZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBhcHBseUFyaWFIaWRkZW4oZWwucGFyZW50KCkpO1xuXG4gICAgICAgICAgZnVuY3Rpb24gZ2V0U2libGluZ3MoZWwpIHtcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGVsLnBhcmVudCgpID8gZWwucGFyZW50KCkuY2hpbGRyZW4oKSA6IFtdO1xuXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICAgICAgICByZXR1cm4gY2hpbGQgIT09IGVsWzBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmdW5jdGlvbiBicm9hZGNhc3RDbG9zaW5nKG1vZGFsV2luZG93LCByZXN1bHRPclJlYXNvbiwgY2xvc2luZykge1xuICAgICAgICByZXR1cm4gIW1vZGFsV2luZG93LnZhbHVlLm1vZGFsU2NvcGUuJGJyb2FkY2FzdCgnbW9kYWwuY2xvc2luZycsIHJlc3VsdE9yUmVhc29uLCBjbG9zaW5nKS5kZWZhdWx0UHJldmVudGVkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1bmhpZGVCYWNrZ3JvdW5kRWxlbWVudHMoKSB7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnWycgKyBBUklBX0hJRERFTl9BVFRSSUJVVEVfTkFNRSArICddJyksXG4gICAgICAgICAgZnVuY3Rpb24oaGlkZGVuRWwpIHtcbiAgICAgICAgICAgIHZhciBhcmlhSGlkZGVuQ291bnQgPSBwYXJzZUludChoaWRkZW5FbC5nZXRBdHRyaWJ1dGUoQVJJQV9ISURERU5fQVRUUklCVVRFX05BTUUpLCAxMCksXG4gICAgICAgICAgICAgIG5ld0hpZGRlbkNvdW50ID0gYXJpYUhpZGRlbkNvdW50IC0gMTtcbiAgICAgICAgICAgIGhpZGRlbkVsLnNldEF0dHJpYnV0ZShBUklBX0hJRERFTl9BVFRSSUJVVEVfTkFNRSwgbmV3SGlkZGVuQ291bnQpO1xuXG4gICAgICAgICAgICBpZiAoIW5ld0hpZGRlbkNvdW50KSB7XG4gICAgICAgICAgICAgIGhpZGRlbkVsLnJlbW92ZUF0dHJpYnV0ZShBUklBX0hJRERFTl9BVFRSSUJVVEVfTkFNRSk7XG4gICAgICAgICAgICAgIGhpZGRlbkVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgICRtb2RhbFN0YWNrLmNsb3NlID0gZnVuY3Rpb24obW9kYWxJbnN0YW5jZSwgcmVzdWx0KSB7XG4gICAgICAgIHZhciBtb2RhbFdpbmRvdyA9IG9wZW5lZFdpbmRvd3MuZ2V0KG1vZGFsSW5zdGFuY2UpO1xuICAgICAgICB1bmhpZGVCYWNrZ3JvdW5kRWxlbWVudHMoKTtcbiAgICAgICAgaWYgKG1vZGFsV2luZG93ICYmIGJyb2FkY2FzdENsb3NpbmcobW9kYWxXaW5kb3csIHJlc3VsdCwgdHJ1ZSkpIHtcbiAgICAgICAgICBtb2RhbFdpbmRvdy52YWx1ZS5tb2RhbFNjb3BlLiQkdWliRGVzdHJ1Y3Rpb25TY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICAgIG1vZGFsV2luZG93LnZhbHVlLmRlZmVycmVkLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICByZW1vdmVNb2RhbFdpbmRvdyhtb2RhbEluc3RhbmNlLCBtb2RhbFdpbmRvdy52YWx1ZS5tb2RhbE9wZW5lcik7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIW1vZGFsV2luZG93O1xuICAgICAgfTtcblxuICAgICAgJG1vZGFsU3RhY2suZGlzbWlzcyA9IGZ1bmN0aW9uKG1vZGFsSW5zdGFuY2UsIHJlYXNvbikge1xuICAgICAgICB2YXIgbW9kYWxXaW5kb3cgPSBvcGVuZWRXaW5kb3dzLmdldChtb2RhbEluc3RhbmNlKTtcbiAgICAgICAgdW5oaWRlQmFja2dyb3VuZEVsZW1lbnRzKCk7XG4gICAgICAgIGlmIChtb2RhbFdpbmRvdyAmJiBicm9hZGNhc3RDbG9zaW5nKG1vZGFsV2luZG93LCByZWFzb24sIGZhbHNlKSkge1xuICAgICAgICAgIG1vZGFsV2luZG93LnZhbHVlLm1vZGFsU2NvcGUuJCR1aWJEZXN0cnVjdGlvblNjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgICAgbW9kYWxXaW5kb3cudmFsdWUuZGVmZXJyZWQucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgcmVtb3ZlTW9kYWxXaW5kb3cobW9kYWxJbnN0YW5jZSwgbW9kYWxXaW5kb3cudmFsdWUubW9kYWxPcGVuZXIpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhbW9kYWxXaW5kb3c7XG4gICAgICB9O1xuXG4gICAgICAkbW9kYWxTdGFjay5kaXNtaXNzQWxsID0gZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIHZhciB0b3BNb2RhbCA9IHRoaXMuZ2V0VG9wKCk7XG4gICAgICAgIHdoaWxlICh0b3BNb2RhbCAmJiB0aGlzLmRpc21pc3ModG9wTW9kYWwua2V5LCByZWFzb24pKSB7XG4gICAgICAgICAgdG9wTW9kYWwgPSB0aGlzLmdldFRvcCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAkbW9kYWxTdGFjay5nZXRUb3AgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG9wZW5lZFdpbmRvd3MudG9wKCk7XG4gICAgICB9O1xuXG4gICAgICAkbW9kYWxTdGFjay5tb2RhbFJlbmRlcmVkID0gZnVuY3Rpb24obW9kYWxJbnN0YW5jZSkge1xuICAgICAgICB2YXIgbW9kYWxXaW5kb3cgPSBvcGVuZWRXaW5kb3dzLmdldChtb2RhbEluc3RhbmNlKTtcbiAgICAgICAgaWYgKG1vZGFsV2luZG93KSB7XG4gICAgICAgICAgbW9kYWxXaW5kb3cudmFsdWUucmVuZGVyRGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAkbW9kYWxTdGFjay5mb2N1c0ZpcnN0Rm9jdXNhYmxlRWxlbWVudCA9IGZ1bmN0aW9uKGxpc3QpIHtcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxpc3RbMF0uZm9jdXMoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9O1xuXG4gICAgICAkbW9kYWxTdGFjay5mb2N1c0xhc3RGb2N1c2FibGVFbGVtZW50ID0gZnVuY3Rpb24obGlzdCkge1xuICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGlzdFtsaXN0Lmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcblxuICAgICAgJG1vZGFsU3RhY2suaXNNb2RhbEZvY3VzZWQgPSBmdW5jdGlvbihldnQsIG1vZGFsV2luZG93KSB7XG4gICAgICAgIGlmIChldnQgJiYgbW9kYWxXaW5kb3cpIHtcbiAgICAgICAgICB2YXIgbW9kYWxEb21FbCA9IG1vZGFsV2luZG93LnZhbHVlLm1vZGFsRG9tRWw7XG4gICAgICAgICAgaWYgKG1vZGFsRG9tRWwgJiYgbW9kYWxEb21FbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAoZXZ0LnRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkgPT09IG1vZGFsRG9tRWxbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgICRtb2RhbFN0YWNrLmlzRm9jdXNJbkZpcnN0SXRlbSA9IGZ1bmN0aW9uKGV2dCwgbGlzdCkge1xuICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChldnQudGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KSA9PT0gbGlzdFswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9O1xuXG4gICAgICAkbW9kYWxTdGFjay5pc0ZvY3VzSW5MYXN0SXRlbSA9IGZ1bmN0aW9uKGV2dCwgbGlzdCkge1xuICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChldnQudGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KSA9PT0gbGlzdFtsaXN0Lmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgICRtb2RhbFN0YWNrLmxvYWRGb2N1c0VsZW1lbnRMaXN0ID0gZnVuY3Rpb24obW9kYWxXaW5kb3cpIHtcbiAgICAgICAgaWYgKG1vZGFsV2luZG93KSB7XG4gICAgICAgICAgdmFyIG1vZGFsRG9tRTEgPSBtb2RhbFdpbmRvdy52YWx1ZS5tb2RhbERvbUVsO1xuICAgICAgICAgIGlmIChtb2RhbERvbUUxICYmIG1vZGFsRG9tRTEubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBtb2RhbERvbUUxWzBdLnF1ZXJ5U2VsZWN0b3JBbGwodGFiYmFibGVTZWxlY3Rvcik7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudHMgP1xuICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNWaXNpYmxlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICB9KSA6IGVsZW1lbnRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuICRtb2RhbFN0YWNrO1xuICAgIH1dKVxuXG4gIC5wcm92aWRlcignJHVpYk1vZGFsJywgZnVuY3Rpb24oKSB7XG4gICAgdmFyICRtb2RhbFByb3ZpZGVyID0ge1xuICAgICAgb3B0aW9uczoge1xuICAgICAgICBhbmltYXRpb246IHRydWUsXG4gICAgICAgIGJhY2tkcm9wOiB0cnVlLCAvL2NhbiBhbHNvIGJlIGZhbHNlIG9yICdzdGF0aWMnXG4gICAgICAgIGtleWJvYXJkOiB0cnVlXG4gICAgICB9LFxuICAgICAgJGdldDogWyckcm9vdFNjb3BlJywgJyRxJywgJyRkb2N1bWVudCcsICckdGVtcGxhdGVSZXF1ZXN0JywgJyRjb250cm9sbGVyJywgJyR1aWJSZXNvbHZlJywgJyR1aWJNb2RhbFN0YWNrJyxcbiAgICAgICAgZnVuY3Rpb24gKCRyb290U2NvcGUsICRxLCAkZG9jdW1lbnQsICR0ZW1wbGF0ZVJlcXVlc3QsICRjb250cm9sbGVyLCAkdWliUmVzb2x2ZSwgJG1vZGFsU3RhY2spIHtcbiAgICAgICAgICB2YXIgJG1vZGFsID0ge307XG5cbiAgICAgICAgICBmdW5jdGlvbiBnZXRUZW1wbGF0ZVByb21pc2Uob3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMudGVtcGxhdGUgPyAkcS53aGVuKG9wdGlvbnMudGVtcGxhdGUpIDpcbiAgICAgICAgICAgICAgJHRlbXBsYXRlUmVxdWVzdChhbmd1bGFyLmlzRnVuY3Rpb24ob3B0aW9ucy50ZW1wbGF0ZVVybCkgP1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudGVtcGxhdGVVcmwoKSA6IG9wdGlvbnMudGVtcGxhdGVVcmwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBwcm9taXNlQ2hhaW4gPSBudWxsO1xuICAgICAgICAgICRtb2RhbC5nZXRQcm9taXNlQ2hhaW4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG4gICAgICAgICAgfTtcblxuICAgICAgICAgICRtb2RhbC5vcGVuID0gZnVuY3Rpb24obW9kYWxPcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgbW9kYWxSZXN1bHREZWZlcnJlZCA9ICRxLmRlZmVyKCk7XG4gICAgICAgICAgICB2YXIgbW9kYWxPcGVuZWREZWZlcnJlZCA9ICRxLmRlZmVyKCk7XG4gICAgICAgICAgICB2YXIgbW9kYWxDbG9zZWREZWZlcnJlZCA9ICRxLmRlZmVyKCk7XG4gICAgICAgICAgICB2YXIgbW9kYWxSZW5kZXJEZWZlcnJlZCA9ICRxLmRlZmVyKCk7XG5cbiAgICAgICAgICAgIC8vcHJlcGFyZSBhbiBpbnN0YW5jZSBvZiBhIG1vZGFsIHRvIGJlIGluamVjdGVkIGludG8gY29udHJvbGxlcnMgYW5kIHJldHVybmVkIHRvIGEgY2FsbGVyXG4gICAgICAgICAgICB2YXIgbW9kYWxJbnN0YW5jZSA9IHtcbiAgICAgICAgICAgICAgcmVzdWx0OiBtb2RhbFJlc3VsdERlZmVycmVkLnByb21pc2UsXG4gICAgICAgICAgICAgIG9wZW5lZDogbW9kYWxPcGVuZWREZWZlcnJlZC5wcm9taXNlLFxuICAgICAgICAgICAgICBjbG9zZWQ6IG1vZGFsQ2xvc2VkRGVmZXJyZWQucHJvbWlzZSxcbiAgICAgICAgICAgICAgcmVuZGVyZWQ6IG1vZGFsUmVuZGVyRGVmZXJyZWQucHJvbWlzZSxcbiAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJG1vZGFsU3RhY2suY2xvc2UobW9kYWxJbnN0YW5jZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGlzbWlzczogZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiAkbW9kYWxTdGFjay5kaXNtaXNzKG1vZGFsSW5zdGFuY2UsIHJlYXNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vbWVyZ2UgYW5kIGNsZWFuIHVwIG9wdGlvbnNcbiAgICAgICAgICAgIG1vZGFsT3B0aW9ucyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCAkbW9kYWxQcm92aWRlci5vcHRpb25zLCBtb2RhbE9wdGlvbnMpO1xuICAgICAgICAgICAgbW9kYWxPcHRpb25zLnJlc29sdmUgPSBtb2RhbE9wdGlvbnMucmVzb2x2ZSB8fCB7fTtcbiAgICAgICAgICAgIG1vZGFsT3B0aW9ucy5hcHBlbmRUbyA9IG1vZGFsT3B0aW9ucy5hcHBlbmRUbyB8fCAkZG9jdW1lbnQuZmluZCgnYm9keScpLmVxKDApO1xuXG4gICAgICAgICAgICBpZiAoIW1vZGFsT3B0aW9ucy5hcHBlbmRUby5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcHBlbmRUbyBlbGVtZW50IG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnQgcGFzc2VkIGlzIGluIERPTS4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy92ZXJpZnkgb3B0aW9uc1xuICAgICAgICAgICAgaWYgKCFtb2RhbE9wdGlvbnMuY29tcG9uZW50ICYmICFtb2RhbE9wdGlvbnMudGVtcGxhdGUgJiYgIW1vZGFsT3B0aW9ucy50ZW1wbGF0ZVVybCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09uZSBvZiBjb21wb25lbnQgb3IgdGVtcGxhdGUgb3IgdGVtcGxhdGVVcmwgb3B0aW9ucyBpcyByZXF1aXJlZC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHRlbXBsYXRlQW5kUmVzb2x2ZVByb21pc2U7XG4gICAgICAgICAgICBpZiAobW9kYWxPcHRpb25zLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZUFuZFJlc29sdmVQcm9taXNlID0gJHEud2hlbigkdWliUmVzb2x2ZS5yZXNvbHZlKG1vZGFsT3B0aW9ucy5yZXNvbHZlLCB7fSwgbnVsbCwgbnVsbCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGVBbmRSZXNvbHZlUHJvbWlzZSA9XG4gICAgICAgICAgICAgICAgJHEuYWxsKFtnZXRUZW1wbGF0ZVByb21pc2UobW9kYWxPcHRpb25zKSwgJHVpYlJlc29sdmUucmVzb2x2ZShtb2RhbE9wdGlvbnMucmVzb2x2ZSwge30sIG51bGwsIG51bGwpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVXaXRoVGVtcGxhdGUoKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUFuZFJlc29sdmVQcm9taXNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZXhpc3RpbmcgcHJvbWlzZSBjaGFpbi5cbiAgICAgICAgICAgIC8vIFRoZW4gc3dpdGNoIHRvIG91ciBvd24gY29tYmluZWQgcHJvbWlzZSBkZXBlbmRlbmN5IChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgcHJldmlvdXMgbW9kYWwgZmFyZWQpLlxuICAgICAgICAgICAgLy8gVGhlbiBhZGQgdG8gJG1vZGFsU3RhY2sgYW5kIHJlc29sdmUgb3BlbmVkLlxuICAgICAgICAgICAgLy8gRmluYWxseSBjbGVhbiB1cCB0aGUgY2hhaW4gdmFyaWFibGUgaWYgbm8gc3Vic2VxdWVudCBtb2RhbCBoYXMgb3ZlcndyaXR0ZW4gaXQuXG4gICAgICAgICAgICB2YXIgc2FtZVByb21pc2U7XG4gICAgICAgICAgICBzYW1lUHJvbWlzZSA9IHByb21pc2VDaGFpbiA9ICRxLmFsbChbcHJvbWlzZUNoYWluXSlcbiAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZVdpdGhUZW1wbGF0ZSwgcmVzb2x2ZVdpdGhUZW1wbGF0ZSlcbiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gcmVzb2x2ZVN1Y2Nlc3ModHBsQW5kVmFycykge1xuICAgICAgICAgICAgICAgIHZhciBwcm92aWRlZFNjb3BlID0gbW9kYWxPcHRpb25zLnNjb3BlIHx8ICRyb290U2NvcGU7XG5cbiAgICAgICAgICAgICAgICB2YXIgbW9kYWxTY29wZSA9IHByb3ZpZGVkU2NvcGUuJG5ldygpO1xuICAgICAgICAgICAgICAgIG1vZGFsU2NvcGUuJGNsb3NlID0gbW9kYWxJbnN0YW5jZS5jbG9zZTtcbiAgICAgICAgICAgICAgICBtb2RhbFNjb3BlLiRkaXNtaXNzID0gbW9kYWxJbnN0YW5jZS5kaXNtaXNzO1xuXG4gICAgICAgICAgICAgICAgbW9kYWxTY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW1vZGFsU2NvcGUuJCR1aWJEZXN0cnVjdGlvblNjaGVkdWxlZCkge1xuICAgICAgICAgICAgICAgICAgICBtb2RhbFNjb3BlLiRkaXNtaXNzKCckdWliVW5zY2hlZHVsZWREZXN0cnVjdGlvbicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1vZGFsID0ge1xuICAgICAgICAgICAgICAgICAgc2NvcGU6IG1vZGFsU2NvcGUsXG4gICAgICAgICAgICAgICAgICBkZWZlcnJlZDogbW9kYWxSZXN1bHREZWZlcnJlZCxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckRlZmVycmVkOiBtb2RhbFJlbmRlckRlZmVycmVkLFxuICAgICAgICAgICAgICAgICAgY2xvc2VkRGVmZXJyZWQ6IG1vZGFsQ2xvc2VkRGVmZXJyZWQsXG4gICAgICAgICAgICAgICAgICBhbmltYXRpb246IG1vZGFsT3B0aW9ucy5hbmltYXRpb24sXG4gICAgICAgICAgICAgICAgICBiYWNrZHJvcDogbW9kYWxPcHRpb25zLmJhY2tkcm9wLFxuICAgICAgICAgICAgICAgICAga2V5Ym9hcmQ6IG1vZGFsT3B0aW9ucy5rZXlib2FyZCxcbiAgICAgICAgICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6IG1vZGFsT3B0aW9ucy5iYWNrZHJvcENsYXNzLFxuICAgICAgICAgICAgICAgICAgd2luZG93VG9wQ2xhc3M6IG1vZGFsT3B0aW9ucy53aW5kb3dUb3BDbGFzcyxcbiAgICAgICAgICAgICAgICAgIHdpbmRvd0NsYXNzOiBtb2RhbE9wdGlvbnMud2luZG93Q2xhc3MsXG4gICAgICAgICAgICAgICAgICB3aW5kb3dUZW1wbGF0ZVVybDogbW9kYWxPcHRpb25zLndpbmRvd1RlbXBsYXRlVXJsLFxuICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsbGVkQnk6IG1vZGFsT3B0aW9ucy5hcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeTogbW9kYWxPcHRpb25zLmFyaWFEZXNjcmliZWRCeSxcbiAgICAgICAgICAgICAgICAgIHNpemU6IG1vZGFsT3B0aW9ucy5zaXplLFxuICAgICAgICAgICAgICAgICAgb3BlbmVkQ2xhc3M6IG1vZGFsT3B0aW9ucy5vcGVuZWRDbGFzcyxcbiAgICAgICAgICAgICAgICAgIGFwcGVuZFRvOiBtb2RhbE9wdGlvbnMuYXBwZW5kVG9cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHt9O1xuICAgICAgICAgICAgICAgIHZhciBjdHJsSW5zdGFuY2UsIGN0cmxJbnN0YW50aWF0ZSwgY3RybExvY2FscyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKG1vZGFsT3B0aW9ucy5jb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdExvY2Fscyhjb21wb25lbnQsIGZhbHNlLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICBjb21wb25lbnQubmFtZSA9IG1vZGFsT3B0aW9ucy5jb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICBtb2RhbC5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RhbE9wdGlvbnMuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgY29uc3RydWN0TG9jYWxzKGN0cmxMb2NhbHMsIHRydWUsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgLy8gdGhlIHRoaXJkIHBhcmFtIHdpbGwgbWFrZSB0aGUgY29udHJvbGxlciBpbnN0YW50aWF0ZSBsYXRlcixwcml2YXRlIGFwaVxuICAgICAgICAgICAgICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL2Jsb2IvbWFzdGVyL3NyYy9uZy9jb250cm9sbGVyLmpzI0wxMjZcbiAgICAgICAgICAgICAgICAgIGN0cmxJbnN0YW50aWF0ZSA9ICRjb250cm9sbGVyKG1vZGFsT3B0aW9ucy5jb250cm9sbGVyLCBjdHJsTG9jYWxzLCB0cnVlLCBtb2RhbE9wdGlvbnMuY29udHJvbGxlckFzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtb2RhbE9wdGlvbnMuY29udHJvbGxlckFzICYmIG1vZGFsT3B0aW9ucy5iaW5kVG9Db250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0cmxJbnN0YW5jZSA9IGN0cmxJbnN0YW50aWF0ZS5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgY3RybEluc3RhbmNlLiRjbG9zZSA9IG1vZGFsU2NvcGUuJGNsb3NlO1xuICAgICAgICAgICAgICAgICAgICBjdHJsSW5zdGFuY2UuJGRpc21pc3MgPSBtb2RhbFNjb3BlLiRkaXNtaXNzO1xuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmV4dGVuZChjdHJsSW5zdGFuY2UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAkcmVzb2x2ZTogY3RybExvY2Fscy4kc2NvcGUuJHJlc29sdmVcbiAgICAgICAgICAgICAgICAgICAgfSwgcHJvdmlkZWRTY29wZSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGN0cmxJbnN0YW5jZSA9IGN0cmxJbnN0YW50aWF0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGN0cmxJbnN0YW5jZS4kb25Jbml0KSkge1xuICAgICAgICAgICAgICAgICAgICBjdHJsSW5zdGFuY2UuJG9uSW5pdCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghbW9kYWxPcHRpb25zLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgbW9kYWwuY29udGVudCA9IHRwbEFuZFZhcnNbMF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJG1vZGFsU3RhY2sub3Blbihtb2RhbEluc3RhbmNlLCBtb2RhbCk7XG4gICAgICAgICAgICAgICAgbW9kYWxPcGVuZWREZWZlcnJlZC5yZXNvbHZlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY29uc3RydWN0TG9jYWxzKG9iaiwgdGVtcGxhdGUsIGluc3RhbmNlT25TY29wZSwgaW5qZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgb2JqLiRzY29wZSA9IG1vZGFsU2NvcGU7XG4gICAgICAgICAgICAgICAgICBvYmouJHNjb3BlLiRyZXNvbHZlID0ge307XG4gICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VPblNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iai4kc2NvcGUuJHVpYk1vZGFsSW5zdGFuY2UgPSBtb2RhbEluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLiR1aWJNb2RhbEluc3RhbmNlID0gbW9kYWxJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmVzID0gdGVtcGxhdGUgPyB0cGxBbmRWYXJzWzFdIDogdHBsQW5kVmFycztcbiAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyZXNvbHZlcywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5qZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBvYmouJHNjb3BlLiRyZXNvbHZlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIHJlc29sdmVFcnJvcihyZWFzb24pIHtcbiAgICAgICAgICAgICAgbW9kYWxPcGVuZWREZWZlcnJlZC5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgbW9kYWxSZXN1bHREZWZlcnJlZC5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgIH0pWydmaW5hbGx5J10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGlmIChwcm9taXNlQ2hhaW4gPT09IHNhbWVQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZUNoYWluID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBtb2RhbEluc3RhbmNlO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gJG1vZGFsO1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiAkbW9kYWxQcm92aWRlcjtcbiAgfSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAucGFnaW5nJywgW10pXG4vKipcbiAqIEhlbHBlciBpbnRlcm5hbCBzZXJ2aWNlIGZvciBnZW5lcmF0aW5nIGNvbW1vbiBjb250cm9sbGVyIGNvZGUgYmV0d2VlbiB0aGVcbiAqIHBhZ2VyIGFuZCBwYWdpbmF0aW9uIGNvbXBvbmVudHNcbiAqL1xuLmZhY3RvcnkoJ3VpYlBhZ2luZycsIFsnJHBhcnNlJywgZnVuY3Rpb24oJHBhcnNlKSB7XG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBmdW5jdGlvbihjdHJsLCAkc2NvcGUsICRhdHRycykge1xuICAgICAgY3RybC5zZXROdW1QYWdlcyA9ICRhdHRycy5udW1QYWdlcyA/ICRwYXJzZSgkYXR0cnMubnVtUGFnZXMpLmFzc2lnbiA6IGFuZ3VsYXIubm9vcDtcbiAgICAgIGN0cmwubmdNb2RlbEN0cmwgPSB7ICRzZXRWaWV3VmFsdWU6IGFuZ3VsYXIubm9vcCB9OyAvLyBudWxsTW9kZWxDdHJsXG4gICAgICBjdHJsLl93YXRjaGVycyA9IFtdO1xuXG4gICAgICBjdHJsLmluaXQgPSBmdW5jdGlvbihuZ01vZGVsQ3RybCwgY29uZmlnKSB7XG4gICAgICAgIGN0cmwubmdNb2RlbEN0cmwgPSBuZ01vZGVsQ3RybDtcbiAgICAgICAgY3RybC5jb25maWcgPSBjb25maWc7XG5cbiAgICAgICAgbmdNb2RlbEN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGN0cmwucmVuZGVyKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCRhdHRycy5pdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICBjdHJsLl93YXRjaGVycy5wdXNoKCRzY29wZS4kcGFyZW50LiR3YXRjaCgkYXR0cnMuaXRlbXNQZXJQYWdlLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgY3RybC5pdGVtc1BlclBhZ2UgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICAgICAgJHNjb3BlLnRvdGFsUGFnZXMgPSBjdHJsLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKTtcbiAgICAgICAgICAgIGN0cmwudXBkYXRlUGFnZSgpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHJsLml0ZW1zUGVyUGFnZSA9IGNvbmZpZy5pdGVtc1BlclBhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICAkc2NvcGUuJHdhdGNoKCd0b3RhbEl0ZW1zJywgZnVuY3Rpb24obmV3VG90YWwsIG9sZFRvdGFsKSB7XG4gICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKG5ld1RvdGFsKSB8fCBuZXdUb3RhbCAhPT0gb2xkVG90YWwpIHtcbiAgICAgICAgICAgICRzY29wZS50b3RhbFBhZ2VzID0gY3RybC5jYWxjdWxhdGVUb3RhbFBhZ2VzKCk7XG4gICAgICAgICAgICBjdHJsLnVwZGF0ZVBhZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY3RybC5jYWxjdWxhdGVUb3RhbFBhZ2VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB0b3RhbFBhZ2VzID0gY3RybC5pdGVtc1BlclBhZ2UgPCAxID8gMSA6IE1hdGguY2VpbCgkc2NvcGUudG90YWxJdGVtcyAvIGN0cmwuaXRlbXNQZXJQYWdlKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRvdGFsUGFnZXMgfHwgMCwgMSk7XG4gICAgICB9O1xuXG4gICAgICBjdHJsLnJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAkc2NvcGUucGFnZSA9IHBhcnNlSW50KGN0cmwubmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSwgMTApIHx8IDE7XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUuc2VsZWN0UGFnZSA9IGZ1bmN0aW9uKHBhZ2UsIGV2dCkge1xuICAgICAgICBpZiAoZXZ0KSB7XG4gICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2xpY2tBbGxvd2VkID0gISRzY29wZS5uZ0Rpc2FibGVkIHx8ICFldnQ7XG4gICAgICAgIGlmIChjbGlja0FsbG93ZWQgJiYgJHNjb3BlLnBhZ2UgIT09IHBhZ2UgJiYgcGFnZSA+IDAgJiYgcGFnZSA8PSAkc2NvcGUudG90YWxQYWdlcykge1xuICAgICAgICAgIGlmIChldnQgJiYgZXZ0LnRhcmdldCkge1xuICAgICAgICAgICAgZXZ0LnRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN0cmwubmdNb2RlbEN0cmwuJHNldFZpZXdWYWx1ZShwYWdlKTtcbiAgICAgICAgICBjdHJsLm5nTW9kZWxDdHJsLiRyZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgJHNjb3BlLmdldFRleHQgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuICRzY29wZVtrZXkgKyAnVGV4dCddIHx8IGN0cmwuY29uZmlnW2tleSArICdUZXh0J107XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUubm9QcmV2aW91cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJHNjb3BlLnBhZ2UgPT09IDE7XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUubm9OZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAkc2NvcGUucGFnZSA9PT0gJHNjb3BlLnRvdGFsUGFnZXM7XG4gICAgICB9O1xuXG4gICAgICBjdHJsLnVwZGF0ZVBhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY3RybC5zZXROdW1QYWdlcygkc2NvcGUuJHBhcmVudCwgJHNjb3BlLnRvdGFsUGFnZXMpOyAvLyBSZWFkb25seSB2YXJpYWJsZVxuXG4gICAgICAgIGlmICgkc2NvcGUucGFnZSA+ICRzY29wZS50b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgJHNjb3BlLnNlbGVjdFBhZ2UoJHNjb3BlLnRvdGFsUGFnZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0cmwubmdNb2RlbEN0cmwuJHJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB3aGlsZSAoY3RybC5fd2F0Y2hlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgY3RybC5fd2F0Y2hlcnMuc2hpZnQoKSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAucGFnZXInLCBbJ3VpLmJvb3RzdHJhcC5wYWdpbmcnLCAndWkuYm9vdHN0cmFwLnRhYmluZGV4J10pXG5cbi5jb250cm9sbGVyKCdVaWJQYWdlckNvbnRyb2xsZXInLCBbJyRzY29wZScsICckYXR0cnMnLCAndWliUGFnaW5nJywgJ3VpYlBhZ2VyQ29uZmlnJywgZnVuY3Rpb24oJHNjb3BlLCAkYXR0cnMsIHVpYlBhZ2luZywgdWliUGFnZXJDb25maWcpIHtcbiAgJHNjb3BlLmFsaWduID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLmFsaWduKSA/ICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5hbGlnbikgOiB1aWJQYWdlckNvbmZpZy5hbGlnbjtcblxuICB1aWJQYWdpbmcuY3JlYXRlKHRoaXMsICRzY29wZSwgJGF0dHJzKTtcbn1dKVxuXG4uY29uc3RhbnQoJ3VpYlBhZ2VyQ29uZmlnJywge1xuICBpdGVtc1BlclBhZ2U6IDEwLFxuICBwcmV2aW91c1RleHQ6ICfCqyBQcmV2aW91cycsXG4gIG5leHRUZXh0OiAnTmV4dCDCuycsXG4gIGFsaWduOiB0cnVlXG59KVxuXG4uZGlyZWN0aXZlKCd1aWJQYWdlcicsIFsndWliUGFnZXJDb25maWcnLCBmdW5jdGlvbih1aWJQYWdlckNvbmZpZykge1xuICByZXR1cm4ge1xuICAgIHNjb3BlOiB7XG4gICAgICB0b3RhbEl0ZW1zOiAnPScsXG4gICAgICBwcmV2aW91c1RleHQ6ICdAJyxcbiAgICAgIG5leHRUZXh0OiAnQCcsXG4gICAgICBuZ0Rpc2FibGVkOiAnPSdcbiAgICB9LFxuICAgIHJlcXVpcmU6IFsndWliUGFnZXInLCAnP25nTW9kZWwnXSxcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIGNvbnRyb2xsZXI6ICdVaWJQYWdlckNvbnRyb2xsZXInLFxuICAgIGNvbnRyb2xsZXJBczogJ3BhZ2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIHJldHVybiBhdHRycy50ZW1wbGF0ZVVybCB8fCAndWliL3RlbXBsYXRlL3BhZ2VyL3BhZ2VyLmh0bWwnO1xuICAgIH0sXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBjdHJscykge1xuICAgICAgZWxlbWVudC5hZGRDbGFzcygncGFnZXInKTtcbiAgICAgIHZhciBwYWdpbmF0aW9uQ3RybCA9IGN0cmxzWzBdLCBuZ01vZGVsQ3RybCA9IGN0cmxzWzFdO1xuXG4gICAgICBpZiAoIW5nTW9kZWxDdHJsKSB7XG4gICAgICAgIHJldHVybjsgLy8gZG8gbm90aGluZyBpZiBubyBuZy1tb2RlbFxuICAgICAgfVxuXG4gICAgICBwYWdpbmF0aW9uQ3RybC5pbml0KG5nTW9kZWxDdHJsLCB1aWJQYWdlckNvbmZpZyk7XG4gICAgfVxuICB9O1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZSgndWkuYm9vdHN0cmFwLnBhZ2luYXRpb24nLCBbJ3VpLmJvb3RzdHJhcC5wYWdpbmcnLCAndWkuYm9vdHN0cmFwLnRhYmluZGV4J10pXG4uY29udHJvbGxlcignVWliUGFnaW5hdGlvbkNvbnRyb2xsZXInLCBbJyRzY29wZScsICckYXR0cnMnLCAnJHBhcnNlJywgJ3VpYlBhZ2luZycsICd1aWJQYWdpbmF0aW9uQ29uZmlnJywgZnVuY3Rpb24oJHNjb3BlLCAkYXR0cnMsICRwYXJzZSwgdWliUGFnaW5nLCB1aWJQYWdpbmF0aW9uQ29uZmlnKSB7XG4gIHZhciBjdHJsID0gdGhpcztcbiAgLy8gU2V0dXAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4gIHZhciBtYXhTaXplID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLm1heFNpemUpID8gJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLm1heFNpemUpIDogdWliUGFnaW5hdGlvbkNvbmZpZy5tYXhTaXplLFxuICAgIHJvdGF0ZSA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5yb3RhdGUpID8gJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLnJvdGF0ZSkgOiB1aWJQYWdpbmF0aW9uQ29uZmlnLnJvdGF0ZSxcbiAgICBmb3JjZUVsbGlwc2VzID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLmZvcmNlRWxsaXBzZXMpID8gJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLmZvcmNlRWxsaXBzZXMpIDogdWliUGFnaW5hdGlvbkNvbmZpZy5mb3JjZUVsbGlwc2VzLFxuICAgIGJvdW5kYXJ5TGlua051bWJlcnMgPSBhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMuYm91bmRhcnlMaW5rTnVtYmVycykgPyAkc2NvcGUuJHBhcmVudC4kZXZhbCgkYXR0cnMuYm91bmRhcnlMaW5rTnVtYmVycykgOiB1aWJQYWdpbmF0aW9uQ29uZmlnLmJvdW5kYXJ5TGlua051bWJlcnMsXG4gICAgcGFnZUxhYmVsID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLnBhZ2VMYWJlbCkgPyBmdW5jdGlvbihpZHgpIHsgcmV0dXJuICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5wYWdlTGFiZWwsIHskcGFnZTogaWR4fSk7IH0gOiBhbmd1bGFyLmlkZW50aXR5O1xuICAkc2NvcGUuYm91bmRhcnlMaW5rcyA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5ib3VuZGFyeUxpbmtzKSA/ICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5ib3VuZGFyeUxpbmtzKSA6IHVpYlBhZ2luYXRpb25Db25maWcuYm91bmRhcnlMaW5rcztcbiAgJHNjb3BlLmRpcmVjdGlvbkxpbmtzID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLmRpcmVjdGlvbkxpbmtzKSA/ICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5kaXJlY3Rpb25MaW5rcykgOiB1aWJQYWdpbmF0aW9uQ29uZmlnLmRpcmVjdGlvbkxpbmtzO1xuICAkYXR0cnMuJHNldCgncm9sZScsICdtZW51Jyk7XG5cbiAgdWliUGFnaW5nLmNyZWF0ZSh0aGlzLCAkc2NvcGUsICRhdHRycyk7XG5cbiAgaWYgKCRhdHRycy5tYXhTaXplKSB7XG4gICAgY3RybC5fd2F0Y2hlcnMucHVzaCgkc2NvcGUuJHBhcmVudC4kd2F0Y2goJHBhcnNlKCRhdHRycy5tYXhTaXplKSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIG1heFNpemUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgY3RybC5yZW5kZXIoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvLyBDcmVhdGUgcGFnZSBvYmplY3QgdXNlZCBpbiB0ZW1wbGF0ZVxuICBmdW5jdGlvbiBtYWtlUGFnZShudW1iZXIsIHRleHQsIGlzQWN0aXZlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIGFjdGl2ZTogaXNBY3RpdmVcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGFnZXMoY3VycmVudFBhZ2UsIHRvdGFsUGFnZXMpIHtcbiAgICB2YXIgcGFnZXMgPSBbXTtcblxuICAgIC8vIERlZmF1bHQgcGFnZSBsaW1pdHNcbiAgICB2YXIgc3RhcnRQYWdlID0gMSwgZW5kUGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgdmFyIGlzTWF4U2l6ZWQgPSBhbmd1bGFyLmlzRGVmaW5lZChtYXhTaXplKSAmJiBtYXhTaXplIDwgdG90YWxQYWdlcztcblxuICAgIC8vIHJlY29tcHV0ZSBpZiBtYXhTaXplXG4gICAgaWYgKGlzTWF4U2l6ZWQpIHtcbiAgICAgIGlmIChyb3RhdGUpIHtcbiAgICAgICAgLy8gQ3VycmVudCBwYWdlIGlzIGRpc3BsYXllZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB2aXNpYmxlIG9uZXNcbiAgICAgICAgc3RhcnRQYWdlID0gTWF0aC5tYXgoY3VycmVudFBhZ2UgLSBNYXRoLmZsb29yKG1heFNpemUgLyAyKSwgMSk7XG4gICAgICAgIGVuZFBhZ2UgPSBzdGFydFBhZ2UgKyBtYXhTaXplIC0gMTtcblxuICAgICAgICAvLyBBZGp1c3QgaWYgbGltaXQgaXMgZXhjZWVkZWRcbiAgICAgICAgaWYgKGVuZFBhZ2UgPiB0b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgZW5kUGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgICAgICAgc3RhcnRQYWdlID0gZW5kUGFnZSAtIG1heFNpemUgKyAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBWaXNpYmxlIHBhZ2VzIGFyZSBwYWdpbmF0ZWQgd2l0aCBtYXhTaXplXG4gICAgICAgIHN0YXJ0UGFnZSA9IChNYXRoLmNlaWwoY3VycmVudFBhZ2UgLyBtYXhTaXplKSAtIDEpICogbWF4U2l6ZSArIDE7XG5cbiAgICAgICAgLy8gQWRqdXN0IGxhc3QgcGFnZSBpZiBsaW1pdCBpcyBleGNlZWRlZFxuICAgICAgICBlbmRQYWdlID0gTWF0aC5taW4oc3RhcnRQYWdlICsgbWF4U2l6ZSAtIDEsIHRvdGFsUGFnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBwYWdlIG51bWJlciBsaW5rc1xuICAgIGZvciAodmFyIG51bWJlciA9IHN0YXJ0UGFnZTsgbnVtYmVyIDw9IGVuZFBhZ2U7IG51bWJlcisrKSB7XG4gICAgICB2YXIgcGFnZSA9IG1ha2VQYWdlKG51bWJlciwgcGFnZUxhYmVsKG51bWJlciksIG51bWJlciA9PT0gY3VycmVudFBhZ2UpO1xuICAgICAgcGFnZXMucHVzaChwYWdlKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgbGlua3MgdG8gbW92ZSBiZXR3ZWVuIHBhZ2Ugc2V0c1xuICAgIGlmIChpc01heFNpemVkICYmIG1heFNpemUgPiAwICYmICghcm90YXRlIHx8IGZvcmNlRWxsaXBzZXMgfHwgYm91bmRhcnlMaW5rTnVtYmVycykpIHtcbiAgICAgIGlmIChzdGFydFBhZ2UgPiAxKSB7XG4gICAgICAgIGlmICghYm91bmRhcnlMaW5rTnVtYmVycyB8fCBzdGFydFBhZ2UgPiAzKSB7IC8vbmVlZCBlbGxpcHNpcyBmb3IgYWxsIG9wdGlvbnMgdW5sZXNzIHJhbmdlIGlzIHRvbyBjbG9zZSB0byBiZWdpbm5pbmdcbiAgICAgICAgdmFyIHByZXZpb3VzUGFnZVNldCA9IG1ha2VQYWdlKHN0YXJ0UGFnZSAtIDEsICcuLi4nLCBmYWxzZSk7XG4gICAgICAgIHBhZ2VzLnVuc2hpZnQocHJldmlvdXNQYWdlU2V0KTtcbiAgICAgIH1cbiAgICAgICAgaWYgKGJvdW5kYXJ5TGlua051bWJlcnMpIHtcbiAgICAgICAgICBpZiAoc3RhcnRQYWdlID09PSAzKSB7IC8vbmVlZCB0byByZXBsYWNlIGVsbGlwc2lzIHdoZW4gdGhlIGJ1dHRvbnMgd291bGQgYmUgc2VxdWVudGlhbFxuICAgICAgICAgICAgdmFyIHNlY29uZFBhZ2VMaW5rID0gbWFrZVBhZ2UoMiwgJzInLCBmYWxzZSk7XG4gICAgICAgICAgICBwYWdlcy51bnNoaWZ0KHNlY29uZFBhZ2VMaW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9hZGQgdGhlIGZpcnN0IHBhZ2VcbiAgICAgICAgICB2YXIgZmlyc3RQYWdlTGluayA9IG1ha2VQYWdlKDEsICcxJywgZmFsc2UpO1xuICAgICAgICAgIHBhZ2VzLnVuc2hpZnQoZmlyc3RQYWdlTGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVuZFBhZ2UgPCB0b3RhbFBhZ2VzKSB7XG4gICAgICAgIGlmICghYm91bmRhcnlMaW5rTnVtYmVycyB8fCBlbmRQYWdlIDwgdG90YWxQYWdlcyAtIDIpIHsgLy9uZWVkIGVsbGlwc2lzIGZvciBhbGwgb3B0aW9ucyB1bmxlc3MgcmFuZ2UgaXMgdG9vIGNsb3NlIHRvIGVuZFxuICAgICAgICB2YXIgbmV4dFBhZ2VTZXQgPSBtYWtlUGFnZShlbmRQYWdlICsgMSwgJy4uLicsIGZhbHNlKTtcbiAgICAgICAgcGFnZXMucHVzaChuZXh0UGFnZVNldCk7XG4gICAgICB9XG4gICAgICAgIGlmIChib3VuZGFyeUxpbmtOdW1iZXJzKSB7XG4gICAgICAgICAgaWYgKGVuZFBhZ2UgPT09IHRvdGFsUGFnZXMgLSAyKSB7IC8vbmVlZCB0byByZXBsYWNlIGVsbGlwc2lzIHdoZW4gdGhlIGJ1dHRvbnMgd291bGQgYmUgc2VxdWVudGlhbFxuICAgICAgICAgICAgdmFyIHNlY29uZFRvTGFzdFBhZ2VMaW5rID0gbWFrZVBhZ2UodG90YWxQYWdlcyAtIDEsIHRvdGFsUGFnZXMgLSAxLCBmYWxzZSk7XG4gICAgICAgICAgICBwYWdlcy5wdXNoKHNlY29uZFRvTGFzdFBhZ2VMaW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9hZGQgdGhlIGxhc3QgcGFnZVxuICAgICAgICAgIHZhciBsYXN0UGFnZUxpbmsgPSBtYWtlUGFnZSh0b3RhbFBhZ2VzLCB0b3RhbFBhZ2VzLCBmYWxzZSk7XG4gICAgICAgICAgcGFnZXMucHVzaChsYXN0UGFnZUxpbmspO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG4gIHZhciBvcmlnaW5hbFJlbmRlciA9IHRoaXMucmVuZGVyO1xuICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgIG9yaWdpbmFsUmVuZGVyKCk7XG4gICAgaWYgKCRzY29wZS5wYWdlID4gMCAmJiAkc2NvcGUucGFnZSA8PSAkc2NvcGUudG90YWxQYWdlcykge1xuICAgICAgJHNjb3BlLnBhZ2VzID0gZ2V0UGFnZXMoJHNjb3BlLnBhZ2UsICRzY29wZS50b3RhbFBhZ2VzKTtcbiAgICB9XG4gIH07XG59XSlcblxuLmNvbnN0YW50KCd1aWJQYWdpbmF0aW9uQ29uZmlnJywge1xuICBpdGVtc1BlclBhZ2U6IDEwLFxuICBib3VuZGFyeUxpbmtzOiBmYWxzZSxcbiAgYm91bmRhcnlMaW5rTnVtYmVyczogZmFsc2UsXG4gIGRpcmVjdGlvbkxpbmtzOiB0cnVlLFxuICBmaXJzdFRleHQ6ICdGaXJzdCcsXG4gIHByZXZpb3VzVGV4dDogJ1ByZXZpb3VzJyxcbiAgbmV4dFRleHQ6ICdOZXh0JyxcbiAgbGFzdFRleHQ6ICdMYXN0JyxcbiAgcm90YXRlOiB0cnVlLFxuICBmb3JjZUVsbGlwc2VzOiBmYWxzZVxufSlcblxuLmRpcmVjdGl2ZSgndWliUGFnaW5hdGlvbicsIFsnJHBhcnNlJywgJ3VpYlBhZ2luYXRpb25Db25maWcnLCBmdW5jdGlvbigkcGFyc2UsIHVpYlBhZ2luYXRpb25Db25maWcpIHtcbiAgcmV0dXJuIHtcbiAgICBzY29wZToge1xuICAgICAgdG90YWxJdGVtczogJz0nLFxuICAgICAgZmlyc3RUZXh0OiAnQCcsXG4gICAgICBwcmV2aW91c1RleHQ6ICdAJyxcbiAgICAgIG5leHRUZXh0OiAnQCcsXG4gICAgICBsYXN0VGV4dDogJ0AnLFxuICAgICAgbmdEaXNhYmxlZDonPSdcbiAgICB9LFxuICAgIHJlcXVpcmU6IFsndWliUGFnaW5hdGlvbicsICc/bmdNb2RlbCddLFxuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgY29udHJvbGxlcjogJ1VpYlBhZ2luYXRpb25Db250cm9sbGVyJyxcbiAgICBjb250cm9sbGVyQXM6ICdwYWdpbmF0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogZnVuY3Rpb24oZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgIHJldHVybiBhdHRycy50ZW1wbGF0ZVVybCB8fCAndWliL3RlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sJztcbiAgICB9LFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMpIHtcbiAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ3BhZ2luYXRpb24nKTtcbiAgICAgIHZhciBwYWdpbmF0aW9uQ3RybCA9IGN0cmxzWzBdLCBuZ01vZGVsQ3RybCA9IGN0cmxzWzFdO1xuXG4gICAgICBpZiAoIW5nTW9kZWxDdHJsKSB7XG4gICAgICAgICByZXR1cm47IC8vIGRvIG5vdGhpbmcgaWYgbm8gbmctbW9kZWxcbiAgICAgIH1cblxuICAgICAgcGFnaW5hdGlvbkN0cmwuaW5pdChuZ01vZGVsQ3RybCwgdWliUGFnaW5hdGlvbkNvbmZpZyk7XG4gICAgfVxuICB9O1xufV0pO1xuXG4vKipcbiAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN0aWxsIG91dHN0YW5kaW5nOiBhbmltYXRpb24gYXMgYVxuICogZnVuY3Rpb24sIHBsYWNlbWVudCBhcyBhIGZ1bmN0aW9uLCBpbnNpZGUsIHN1cHBvcnQgZm9yIG1vcmUgdHJpZ2dlcnMgdGhhblxuICoganVzdCBtb3VzZSBlbnRlci9sZWF2ZSwgaHRtbCB0b29sdGlwcywgYW5kIHNlbGVjdG9yIGRlbGVnYXRpb24uXG4gKi9cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAudG9vbHRpcCcsIFsndWkuYm9vdHN0cmFwLnBvc2l0aW9uJywgJ3VpLmJvb3RzdHJhcC5zdGFja2VkTWFwJ10pXG5cbi8qKlxuICogVGhlICR0b29sdGlwIHNlcnZpY2UgY3JlYXRlcyB0b29sdGlwLSBhbmQgcG9wb3Zlci1saWtlIGRpcmVjdGl2ZXMgYXMgd2VsbCBhc1xuICogaG91c2VzIGdsb2JhbCBvcHRpb25zIGZvciB0aGVtLlxuICovXG4ucHJvdmlkZXIoJyR1aWJUb29sdGlwJywgZnVuY3Rpb24oKSB7XG4gIC8vIFRoZSBkZWZhdWx0IG9wdGlvbnMgdG9vbHRpcCBhbmQgcG9wb3Zlci5cbiAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgcGxhY2VtZW50Q2xhc3NQcmVmaXg6ICcnLFxuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICBwb3B1cERlbGF5OiAwLFxuICAgIHBvcHVwQ2xvc2VEZWxheTogMCxcbiAgICB1c2VDb250ZW50RXhwOiBmYWxzZVxuICB9O1xuXG4gIC8vIERlZmF1bHQgaGlkZSB0cmlnZ2VycyBmb3IgZWFjaCBzaG93IHRyaWdnZXJcbiAgdmFyIHRyaWdnZXJNYXAgPSB7XG4gICAgJ21vdXNlZW50ZXInOiAnbW91c2VsZWF2ZScsXG4gICAgJ2NsaWNrJzogJ2NsaWNrJyxcbiAgICAnb3V0c2lkZUNsaWNrJzogJ291dHNpZGVDbGljaycsXG4gICAgJ2ZvY3VzJzogJ2JsdXInLFxuICAgICdub25lJzogJydcbiAgfTtcblxuICAvLyBUaGUgb3B0aW9ucyBzcGVjaWZpZWQgdG8gdGhlIHByb3ZpZGVyIGdsb2JhbGx5LlxuICB2YXIgZ2xvYmFsT3B0aW9ucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBgb3B0aW9ucyh7fSlgIGFsbG93cyBnbG9iYWwgY29uZmlndXJhdGlvbiBvZiBhbGwgdG9vbHRpcHMgaW4gdGhlXG4gICAqIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiAgIHZhciBhcHAgPSBhbmd1bGFyLm1vZHVsZSggJ0FwcCcsIFsndWkuYm9vdHN0cmFwLnRvb2x0aXAnXSwgZnVuY3Rpb24oICR0b29sdGlwUHJvdmlkZXIgKSB7XG4gICAqICAgICAvLyBwbGFjZSB0b29sdGlwcyBsZWZ0IGluc3RlYWQgb2YgdG9wIGJ5IGRlZmF1bHRcbiAgICogICAgICR0b29sdGlwUHJvdmlkZXIub3B0aW9ucyggeyBwbGFjZW1lbnQ6ICdsZWZ0JyB9ICk7XG4gICAqICAgfSk7XG4gICAqL1xuXHR0aGlzLm9wdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdGFuZ3VsYXIuZXh0ZW5kKGdsb2JhbE9wdGlvbnMsIHZhbHVlKTtcblx0fTtcblxuICAvKipcbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIGV4dGVuZCB0aGUgc2V0IG9mIHRyaWdnZXIgbWFwcGluZ3MgYXZhaWxhYmxlLiBFLmcuOlxuICAgKlxuICAgKiAgICR0b29sdGlwUHJvdmlkZXIuc2V0VHJpZ2dlcnMoIHsgJ29wZW5UcmlnZ2VyJzogJ2Nsb3NlVHJpZ2dlcicgfSApO1xuICAgKi9cbiAgdGhpcy5zZXRUcmlnZ2VycyA9IGZ1bmN0aW9uIHNldFRyaWdnZXJzKHRyaWdnZXJzKSB7XG4gICAgYW5ndWxhci5leHRlbmQodHJpZ2dlck1hcCwgdHJpZ2dlcnMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0cmFuc2xhdGluZyBjYW1lbC1jYXNlIHRvIHNuYWtlX2Nhc2UuXG4gICAqL1xuICBmdW5jdGlvbiBzbmFrZV9jYXNlKG5hbWUpIHtcbiAgICB2YXIgcmVnZXhwID0gL1tBLVpdL2c7XG4gICAgdmFyIHNlcGFyYXRvciA9ICctJztcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKHJlZ2V4cCwgZnVuY3Rpb24obGV0dGVyLCBwb3MpIHtcbiAgICAgIHJldHVybiAocG9zID8gc2VwYXJhdG9yIDogJycpICsgbGV0dGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYWN0dWFsIGluc3RhbmNlIG9mIHRoZSAkdG9vbHRpcCBzZXJ2aWNlLlxuICAgKiBUT0RPIHN1cHBvcnQgbXVsdGlwbGUgdHJpZ2dlcnNcbiAgICovXG4gIHRoaXMuJGdldCA9IFsnJHdpbmRvdycsICckY29tcGlsZScsICckdGltZW91dCcsICckZG9jdW1lbnQnLCAnJHVpYlBvc2l0aW9uJywgJyRpbnRlcnBvbGF0ZScsICckcm9vdFNjb3BlJywgJyRwYXJzZScsICckJHN0YWNrZWRNYXAnLCBmdW5jdGlvbigkd2luZG93LCAkY29tcGlsZSwgJHRpbWVvdXQsICRkb2N1bWVudCwgJHBvc2l0aW9uLCAkaW50ZXJwb2xhdGUsICRyb290U2NvcGUsICRwYXJzZSwgJCRzdGFja2VkTWFwKSB7XG4gICAgdmFyIG9wZW5lZFRvb2x0aXBzID0gJCRzdGFja2VkTWFwLmNyZWF0ZU5ldygpO1xuICAgICRkb2N1bWVudC5vbigna2V5dXAnLCBrZXlwcmVzc0xpc3RlbmVyKTtcblxuICAgICRyb290U2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgJGRvY3VtZW50Lm9mZigna2V5dXAnLCBrZXlwcmVzc0xpc3RlbmVyKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGtleXByZXNzTGlzdGVuZXIoZSkge1xuICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XG4gICAgICAgIHZhciBsYXN0ID0gb3BlbmVkVG9vbHRpcHMudG9wKCk7XG4gICAgICAgIGlmIChsYXN0KSB7XG4gICAgICAgICAgbGFzdC52YWx1ZS5jbG9zZSgpO1xuICAgICAgICAgIGxhc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICR0b29sdGlwKHR0VHlwZSwgcHJlZml4LCBkZWZhdWx0VHJpZ2dlclNob3csIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBhbmd1bGFyLmV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIGdsb2JhbE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAvKipcbiAgICAgICAqIFJldHVybnMgYW4gb2JqZWN0IG9mIHNob3cgYW5kIGhpZGUgdHJpZ2dlcnMuXG4gICAgICAgKlxuICAgICAgICogSWYgYSB0cmlnZ2VyIGlzIHN1cHBsaWVkLFxuICAgICAgICogaXQgaXMgdXNlZCB0byBzaG93IHRoZSB0b29sdGlwOyBvdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdHJpZ2dlcmBcbiAgICAgICAqIG9wdGlvbiBwYXNzZWQgdG8gdGhlIGAkdG9vbHRpcFByb3ZpZGVyLm9wdGlvbnNgIG1ldGhvZDsgZWxzZSBpdCB3aWxsXG4gICAgICAgKiBkZWZhdWx0IHRvIHRoZSB0cmlnZ2VyIHN1cHBsaWVkIHRvIHRoaXMgZGlyZWN0aXZlIGZhY3RvcnkuXG4gICAgICAgKlxuICAgICAgICogVGhlIGhpZGUgdHJpZ2dlciBpcyBiYXNlZCBvbiB0aGUgc2hvdyB0cmlnZ2VyLiBJZiB0aGUgYHRyaWdnZXJgIG9wdGlvblxuICAgICAgICogd2FzIHBhc3NlZCB0byB0aGUgYCR0b29sdGlwUHJvdmlkZXIub3B0aW9uc2AgbWV0aG9kLCBpdCB3aWxsIHVzZSB0aGVcbiAgICAgICAqIG1hcHBlZCB0cmlnZ2VyIGZyb20gYHRyaWdnZXJNYXBgIG9yIHRoZSBwYXNzZWQgdHJpZ2dlciBpZiB0aGUgbWFwIGlzXG4gICAgICAgKiB1bmRlZmluZWQ7IG90aGVyd2lzZSwgaXQgdXNlcyB0aGUgYHRyaWdnZXJNYXBgIHZhbHVlIG9mIHRoZSBzaG93XG4gICAgICAgKiB0cmlnZ2VyOyBlbHNlIGl0IHdpbGwganVzdCB1c2UgdGhlIHNob3cgdHJpZ2dlci5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZ2V0VHJpZ2dlcnModHJpZ2dlcikge1xuICAgICAgICB2YXIgc2hvdyA9ICh0cmlnZ2VyIHx8IG9wdGlvbnMudHJpZ2dlciB8fCBkZWZhdWx0VHJpZ2dlclNob3cpLnNwbGl0KCcgJyk7XG4gICAgICAgIHZhciBoaWRlID0gc2hvdy5tYXAoZnVuY3Rpb24odHJpZ2dlcikge1xuICAgICAgICAgIHJldHVybiB0cmlnZ2VyTWFwW3RyaWdnZXJdIHx8IHRyaWdnZXI7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNob3c6IHNob3csXG4gICAgICAgICAgaGlkZTogaGlkZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aXZlTmFtZSA9IHNuYWtlX2Nhc2UodHRUeXBlKTtcblxuICAgICAgdmFyIHN0YXJ0U3ltID0gJGludGVycG9sYXRlLnN0YXJ0U3ltYm9sKCk7XG4gICAgICB2YXIgZW5kU3ltID0gJGludGVycG9sYXRlLmVuZFN5bWJvbCgpO1xuICAgICAgdmFyIHRlbXBsYXRlID1cbiAgICAgICAgJzxkaXYgJysgZGlyZWN0aXZlTmFtZSArICctcG9wdXAgJyArXG4gICAgICAgICAgJ3VpYi10aXRsZT1cIicgKyBzdGFydFN5bSArICd0aXRsZScgKyBlbmRTeW0gKyAnXCIgJyArXG4gICAgICAgICAgKG9wdGlvbnMudXNlQ29udGVudEV4cCA/XG4gICAgICAgICAgICAnY29udGVudC1leHA9XCJjb250ZW50RXhwKClcIiAnIDpcbiAgICAgICAgICAgICdjb250ZW50PVwiJyArIHN0YXJ0U3ltICsgJ2NvbnRlbnQnICsgZW5kU3ltICsgJ1wiICcpICtcbiAgICAgICAgICAnb3JpZ2luLXNjb3BlPVwib3JpZ1Njb3BlXCIgJyArXG4gICAgICAgICAgJ2NsYXNzPVwidWliLXBvc2l0aW9uLW1lYXN1cmUgJyArIHByZWZpeCArICdcIiAnICtcbiAgICAgICAgICAndG9vbHRpcC1hbmltYXRpb24tY2xhc3M9XCJmYWRlXCInICtcbiAgICAgICAgICAndWliLXRvb2x0aXAtY2xhc3NlcyAnICtcbiAgICAgICAgICAnbmctY2xhc3M9XCJ7IGluOiBpc09wZW4gfVwiICcgK1xuICAgICAgICAgICc+JyArXG4gICAgICAgICc8L2Rpdj4nO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21waWxlOiBmdW5jdGlvbih0RWxlbSwgdEF0dHJzKSB7XG4gICAgICAgICAgdmFyIHRvb2x0aXBMaW5rZXIgPSAkY29tcGlsZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbGluayhzY29wZSwgZWxlbWVudCwgYXR0cnMsIHRvb2x0aXBDdHJsKSB7XG4gICAgICAgICAgICB2YXIgdG9vbHRpcDtcbiAgICAgICAgICAgIHZhciB0b29sdGlwTGlua2VkU2NvcGU7XG4gICAgICAgICAgICB2YXIgdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICAgICAgICB2YXIgc2hvd1RpbWVvdXQ7XG4gICAgICAgICAgICB2YXIgaGlkZVRpbWVvdXQ7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb25UaW1lb3V0O1xuICAgICAgICAgICAgdmFyIGFkanVzdG1lbnRUaW1lb3V0O1xuICAgICAgICAgICAgdmFyIGFwcGVuZFRvQm9keSA9IGFuZ3VsYXIuaXNEZWZpbmVkKG9wdGlvbnMuYXBwZW5kVG9Cb2R5KSA/IG9wdGlvbnMuYXBwZW5kVG9Cb2R5IDogZmFsc2U7XG4gICAgICAgICAgICB2YXIgdHJpZ2dlcnMgPSBnZXRUcmlnZ2Vycyh1bmRlZmluZWQpO1xuICAgICAgICAgICAgdmFyIGhhc0VuYWJsZUV4cCA9IGFuZ3VsYXIuaXNEZWZpbmVkKGF0dHJzW3ByZWZpeCArICdFbmFibGUnXSk7XG4gICAgICAgICAgICB2YXIgdHRTY29wZSA9IHNjb3BlLiRuZXcodHJ1ZSk7XG4gICAgICAgICAgICB2YXIgcmVwb3NpdGlvblNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGlzT3BlblBhcnNlID0gYW5ndWxhci5pc0RlZmluZWQoYXR0cnNbcHJlZml4ICsgJ0lzT3BlbiddKSA/ICRwYXJzZShhdHRyc1twcmVmaXggKyAnSXNPcGVuJ10pIDogZmFsc2U7XG4gICAgICAgICAgICB2YXIgY29udGVudFBhcnNlID0gb3B0aW9ucy51c2VDb250ZW50RXhwID8gJHBhcnNlKGF0dHJzW3R0VHlwZV0pIDogZmFsc2U7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gW107XG4gICAgICAgICAgICB2YXIgbGFzdFBsYWNlbWVudDtcblxuICAgICAgICAgICAgdmFyIHBvc2l0aW9uVG9vbHRpcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0b29sdGlwIGV4aXN0cyBhbmQgaXMgbm90IGVtcHR5XG4gICAgICAgICAgICAgIGlmICghdG9vbHRpcCB8fCAhdG9vbHRpcC5odG1sKCkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICAgICAgaWYgKCFwb3NpdGlvblRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvblRpbWVvdXQgPSAkdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB0dFBvc2l0aW9uID0gJHBvc2l0aW9uLnBvc2l0aW9uRWxlbWVudHMoZWxlbWVudCwgdG9vbHRpcCwgdHRTY29wZS5wbGFjZW1lbnQsIGFwcGVuZFRvQm9keSk7XG4gICAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbEhlaWdodCA9IGFuZ3VsYXIuaXNEZWZpbmVkKHRvb2x0aXAub2Zmc2V0SGVpZ2h0KSA/IHRvb2x0aXAub2Zmc2V0SGVpZ2h0IDogdG9vbHRpcC5wcm9wKCdvZmZzZXRIZWlnaHQnKTtcbiAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50UG9zID0gYXBwZW5kVG9Cb2R5ID8gJHBvc2l0aW9uLm9mZnNldChlbGVtZW50KSA6ICRwb3NpdGlvbi5wb3NpdGlvbihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXAuY3NzKHsgdG9wOiB0dFBvc2l0aW9uLnRvcCArICdweCcsIGxlZnQ6IHR0UG9zaXRpb24ubGVmdCArICdweCcgfSk7XG4gICAgICAgICAgICAgICAgICB2YXIgcGxhY2VtZW50Q2xhc3NlcyA9IHR0UG9zaXRpb24ucGxhY2VtZW50LnNwbGl0KCctJyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICghdG9vbHRpcC5oYXNDbGFzcyhwbGFjZW1lbnRDbGFzc2VzWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICB0b29sdGlwLnJlbW92ZUNsYXNzKGxhc3RQbGFjZW1lbnQuc3BsaXQoJy0nKVswXSk7XG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuYWRkQ2xhc3MocGxhY2VtZW50Q2xhc3Nlc1swXSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICghdG9vbHRpcC5oYXNDbGFzcyhvcHRpb25zLnBsYWNlbWVudENsYXNzUHJlZml4ICsgdHRQb3NpdGlvbi5wbGFjZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAucmVtb3ZlQ2xhc3Mob3B0aW9ucy5wbGFjZW1lbnRDbGFzc1ByZWZpeCArIGxhc3RQbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB0b29sdGlwLmFkZENsYXNzKG9wdGlvbnMucGxhY2VtZW50Q2xhc3NQcmVmaXggKyB0dFBvc2l0aW9uLnBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGFkanVzdG1lbnRUaW1lb3V0ID0gJHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gYW5ndWxhci5pc0RlZmluZWQodG9vbHRpcC5vZmZzZXRIZWlnaHQpID8gdG9vbHRpcC5vZmZzZXRIZWlnaHQgOiB0b29sdGlwLnByb3AoJ29mZnNldEhlaWdodCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWRqdXN0bWVudCA9ICRwb3NpdGlvbi5hZGp1c3RUb3AocGxhY2VtZW50Q2xhc3NlcywgZWxlbWVudFBvcywgaW5pdGlhbEhlaWdodCwgY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGp1c3RtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC5jc3MoYWRqdXN0bWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0bWVudFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfSwgMCwgZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAvLyBmaXJzdCB0aW1lIHRocm91Z2ggdHQgZWxlbWVudCB3aWxsIGhhdmUgdGhlXG4gICAgICAgICAgICAgICAgICAvLyB1aWItcG9zaXRpb24tbWVhc3VyZSBjbGFzcyBvciBpZiB0aGUgcGxhY2VtZW50XG4gICAgICAgICAgICAgICAgICAvLyBoYXMgY2hhbmdlZCB3ZSBuZWVkIHRvIHBvc2l0aW9uIHRoZSBhcnJvdy5cbiAgICAgICAgICAgICAgICAgIGlmICh0b29sdGlwLmhhc0NsYXNzKCd1aWItcG9zaXRpb24tbWVhc3VyZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICRwb3NpdGlvbi5wb3NpdGlvbkFycm93KHRvb2x0aXAsIHR0UG9zaXRpb24ucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC5yZW1vdmVDbGFzcygndWliLXBvc2l0aW9uLW1lYXN1cmUnKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdFBsYWNlbWVudCAhPT0gdHRQb3NpdGlvbi5wbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgJHBvc2l0aW9uLnBvc2l0aW9uQXJyb3codG9vbHRpcCwgdHRQb3NpdGlvbi5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgbGFzdFBsYWNlbWVudCA9IHR0UG9zaXRpb24ucGxhY2VtZW50O1xuXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvblRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0sIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gU2V0IHVwIHRoZSBjb3JyZWN0IHNjb3BlIHRvIGFsbG93IHRyYW5zY2x1c2lvbiBsYXRlclxuICAgICAgICAgICAgdHRTY29wZS5vcmlnU2NvcGUgPSBzY29wZTtcblxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgdGhlIHRvb2x0aXAgaXMgbm90IG9wZW4uXG4gICAgICAgICAgICAvLyBUT0RPIGFkZCBhYmlsaXR5IHRvIHN0YXJ0IHRvb2x0aXAgb3BlbmVkXG4gICAgICAgICAgICB0dFNjb3BlLmlzT3BlbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB0b2dnbGVUb29sdGlwQmluZCgpIHtcbiAgICAgICAgICAgICAgaWYgKCF0dFNjb3BlLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHNob3dUb29sdGlwQmluZCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpZGVUb29sdGlwQmluZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNob3cgdGhlIHRvb2x0aXAgd2l0aCBkZWxheSBpZiBzcGVjaWZpZWQsIG90aGVyd2lzZSBzaG93IGl0IGltbWVkaWF0ZWx5XG4gICAgICAgICAgICBmdW5jdGlvbiBzaG93VG9vbHRpcEJpbmQoKSB7XG4gICAgICAgICAgICAgIGlmIChoYXNFbmFibGVFeHAgJiYgIXNjb3BlLiRldmFsKGF0dHJzW3ByZWZpeCArICdFbmFibGUnXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYW5jZWxIaWRlKCk7XG4gICAgICAgICAgICAgIHByZXBhcmVUb29sdGlwKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHR0U2NvcGUucG9wdXBEZWxheSkge1xuICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIHRvb2x0aXAgd2FzIGFscmVhZHkgc2NoZWR1bGVkIHRvIHBvcC11cC5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgaWYgc2hvdyBpcyB0cmlnZ2VyZWQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIGFueSBoaWRlIGlzIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoIXNob3dUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICBzaG93VGltZW91dCA9ICR0aW1lb3V0KHNob3csIHR0U2NvcGUucG9wdXBEZWxheSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gaGlkZVRvb2x0aXBCaW5kKCkge1xuICAgICAgICAgICAgICBjYW5jZWxTaG93KCk7XG5cbiAgICAgICAgICAgICAgaWYgKHR0U2NvcGUucG9wdXBDbG9zZURlbGF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoaWRlVGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgaGlkZVRpbWVvdXQgPSAkdGltZW91dChoaWRlLCB0dFNjb3BlLnBvcHVwQ2xvc2VEZWxheSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaWRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2hvdyB0aGUgdG9vbHRpcCBwb3B1cCBlbGVtZW50LlxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgICAgICAgICAgY2FuY2VsU2hvdygpO1xuICAgICAgICAgICAgICBjYW5jZWxIaWRlKCk7XG5cbiAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2hvdyBlbXB0eSB0b29sdGlwcy5cbiAgICAgICAgICAgICAgaWYgKCF0dFNjb3BlLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYW5ndWxhci5ub29wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3JlYXRlVG9vbHRpcCgpO1xuXG4gICAgICAgICAgICAgIC8vIEFuZCBzaG93IHRoZSB0b29sdGlwLlxuICAgICAgICAgICAgICB0dFNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdHRTY29wZS5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFzc2lnbklzT3Blbih0cnVlKTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvblRvb2x0aXAoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNhbmNlbFNob3coKSB7XG4gICAgICAgICAgICAgIGlmIChzaG93VGltZW91dCkge1xuICAgICAgICAgICAgICAgICR0aW1lb3V0LmNhbmNlbChzaG93VGltZW91dCk7XG4gICAgICAgICAgICAgICAgc2hvd1RpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uVGltZW91dCkge1xuICAgICAgICAgICAgICAgICR0aW1lb3V0LmNhbmNlbChwb3NpdGlvblRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSGlkZSB0aGUgdG9vbHRpcCBwb3B1cCBlbGVtZW50LlxuICAgICAgICAgICAgZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgICAgICAgICAgaWYgKCF0dFNjb3BlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gRmlyc3QgdGhpbmdzIGZpcnN0OiB3ZSBkb24ndCBzaG93IGl0IGFueW1vcmUuXG4gICAgICAgICAgICAgIHR0U2NvcGUuJGV2YWxBc3luYyhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodHRTY29wZSkge1xuICAgICAgICAgICAgICAgICAgdHRTY29wZS5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGFzc2lnbklzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAvLyBBbmQgbm93IHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBET00uIEhvd2V2ZXIsIGlmIHdlIGhhdmUgYW5pbWF0aW9uLCB3ZVxuICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byB3YWl0IGZvciBpdCB0byBleHBpcmUgYmVmb3JlaGFuZC5cbiAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEgcG9ydCBvZiB0aGUgdHJhbnNpdGlvbnMgbGlicmFyeS5cbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBmYWRlIHRyYW5zaXRpb24gaW4gVFdCUyBpcyAxNTBtcy5cbiAgICAgICAgICAgICAgICAgIGlmICh0dFNjb3BlLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRyYW5zaXRpb25UaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRpbWVvdXQgPSAkdGltZW91dChyZW1vdmVUb29sdGlwLCAxNTAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVG9vbHRpcCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNhbmNlbEhpZGUoKSB7XG4gICAgICAgICAgICAgIGlmIChoaWRlVGltZW91dCkge1xuICAgICAgICAgICAgICAgICR0aW1lb3V0LmNhbmNlbChoaWRlVGltZW91dCk7XG4gICAgICAgICAgICAgICAgaGlkZVRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgJHRpbWVvdXQuY2FuY2VsKHRyYW5zaXRpb25UaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVG9vbHRpcCgpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lIHRvb2x0aXAgZWxlbWVudCBwZXIgZGlyZWN0aXZlIHNob3duIGF0IG9uY2UuXG4gICAgICAgICAgICAgIGlmICh0b29sdGlwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdG9vbHRpcExpbmtlZFNjb3BlID0gdHRTY29wZS4kbmV3KCk7XG4gICAgICAgICAgICAgIHRvb2x0aXAgPSB0b29sdGlwTGlua2VyKHRvb2x0aXBMaW5rZWRTY29wZSwgZnVuY3Rpb24odG9vbHRpcCkge1xuICAgICAgICAgICAgICAgIGlmIChhcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgICAgICAgICAgICRkb2N1bWVudC5maW5kKCdib2R5JykuYXBwZW5kKHRvb2x0aXApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmFmdGVyKHRvb2x0aXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgb3BlbmVkVG9vbHRpcHMuYWRkKHR0U2NvcGUsIHtcbiAgICAgICAgICAgICAgICBjbG9zZTogaGlkZVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBwcmVwT2JzZXJ2ZXJzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZVRvb2x0aXAoKSB7XG4gICAgICAgICAgICAgIGNhbmNlbFNob3coKTtcbiAgICAgICAgICAgICAgY2FuY2VsSGlkZSgpO1xuICAgICAgICAgICAgICB1bnJlZ2lzdGVyT2JzZXJ2ZXJzKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChhZGp1c3RtZW50VGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgJHRpbWVvdXQuY2FuY2VsKGFkanVzdG1lbnRUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvcGVuZWRUb29sdGlwcy5yZW1vdmUodHRTY29wZSk7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBpZiAodG9vbHRpcExpbmtlZFNjb3BlKSB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcExpbmtlZFNjb3BlLiRkZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdG9vbHRpcExpbmtlZFNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNldCB0aGUgaW5pdGlhbCBzY29wZSB2YWx1ZXMuIE9uY2VcbiAgICAgICAgICAgICAqIHRoZSB0b29sdGlwIGlzIGNyZWF0ZWQsIHRoZSBvYnNlcnZlcnNcbiAgICAgICAgICAgICAqIHdpbGwgYmUgYWRkZWQgdG8ga2VlcCB0aGluZ3MgaW4gc3luYy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZnVuY3Rpb24gcHJlcGFyZVRvb2x0aXAoKSB7XG4gICAgICAgICAgICAgIHR0U2NvcGUudGl0bGUgPSBhdHRyc1twcmVmaXggKyAnVGl0bGUnXTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRQYXJzZSkge1xuICAgICAgICAgICAgICAgIHR0U2NvcGUuY29udGVudCA9IGNvbnRlbnRQYXJzZShzY29wZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHRTY29wZS5jb250ZW50ID0gYXR0cnNbdHRUeXBlXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHR0U2NvcGUucG9wdXBDbGFzcyA9IGF0dHJzW3ByZWZpeCArICdDbGFzcyddO1xuICAgICAgICAgICAgICB0dFNjb3BlLnBsYWNlbWVudCA9IGFuZ3VsYXIuaXNEZWZpbmVkKGF0dHJzW3ByZWZpeCArICdQbGFjZW1lbnQnXSkgPyBhdHRyc1twcmVmaXggKyAnUGxhY2VtZW50J10gOiBvcHRpb25zLnBsYWNlbWVudDtcbiAgICAgICAgICAgICAgdmFyIHBsYWNlbWVudCA9ICRwb3NpdGlvbi5wYXJzZVBsYWNlbWVudCh0dFNjb3BlLnBsYWNlbWVudCk7XG4gICAgICAgICAgICAgIGxhc3RQbGFjZW1lbnQgPSBwbGFjZW1lbnRbMV0gPyBwbGFjZW1lbnRbMF0gKyAnLScgKyBwbGFjZW1lbnRbMV0gOiBwbGFjZW1lbnRbMF07XG5cbiAgICAgICAgICAgICAgdmFyIGRlbGF5ID0gcGFyc2VJbnQoYXR0cnNbcHJlZml4ICsgJ1BvcHVwRGVsYXknXSwgMTApO1xuICAgICAgICAgICAgICB2YXIgY2xvc2VEZWxheSA9IHBhcnNlSW50KGF0dHJzW3ByZWZpeCArICdQb3B1cENsb3NlRGVsYXknXSwgMTApO1xuICAgICAgICAgICAgICB0dFNjb3BlLnBvcHVwRGVsYXkgPSAhaXNOYU4oZGVsYXkpID8gZGVsYXkgOiBvcHRpb25zLnBvcHVwRGVsYXk7XG4gICAgICAgICAgICAgIHR0U2NvcGUucG9wdXBDbG9zZURlbGF5ID0gIWlzTmFOKGNsb3NlRGVsYXkpID8gY2xvc2VEZWxheSA6IG9wdGlvbnMucG9wdXBDbG9zZURlbGF5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBhc3NpZ25Jc09wZW4oaXNPcGVuKSB7XG4gICAgICAgICAgICAgIGlmIChpc09wZW5QYXJzZSAmJiBhbmd1bGFyLmlzRnVuY3Rpb24oaXNPcGVuUGFyc2UuYXNzaWduKSkge1xuICAgICAgICAgICAgICAgIGlzT3BlblBhcnNlLmFzc2lnbihzY29wZSwgaXNPcGVuKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0dFNjb3BlLmNvbnRlbnRFeHAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHR0U2NvcGUuY29udGVudDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogT2JzZXJ2ZSB0aGUgcmVsZXZhbnQgYXR0cmlidXRlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXR0cnMuJG9ic2VydmUoJ2Rpc2FibGVkJywgZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxTaG93KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodmFsICYmIHR0U2NvcGUuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgaGlkZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlzT3BlblBhcnNlKSB7XG4gICAgICAgICAgICAgIHNjb3BlLiR3YXRjaChpc09wZW5QYXJzZSwgZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR0U2NvcGUgJiYgIXZhbCA9PT0gdHRTY29wZS5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgIHRvZ2dsZVRvb2x0aXBCaW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcHJlcE9ic2VydmVycygpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXJzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRQYXJzZSkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgc2NvcGUuJHdhdGNoKGNvbnRlbnRQYXJzZSwgZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHR0U2NvcGUuY29udGVudCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWwgJiYgdHRTY29wZS5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICBoaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIG9ic2VydmVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgdG9vbHRpcExpbmtlZFNjb3BlLiR3YXRjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXBvc2l0aW9uU2NoZWR1bGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdGlvblNjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcExpbmtlZFNjb3BlLiQkcG9zdERpZ2VzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRpb25TY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dFNjb3BlICYmIHR0U2NvcGUuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uVG9vbHRpcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICBhdHRycy4kb2JzZXJ2ZSh0dFR5cGUsIGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICB0dFNjb3BlLmNvbnRlbnQgPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsICYmIHR0U2NvcGUuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uVG9vbHRpcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvYnNlcnZlcnMucHVzaChcbiAgICAgICAgICAgICAgICBhdHRycy4kb2JzZXJ2ZShwcmVmaXggKyAnVGl0bGUnLCBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgIHR0U2NvcGUudGl0bGUgPSB2YWw7XG4gICAgICAgICAgICAgICAgICBpZiAodHRTY29wZS5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25Ub29sdGlwKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBvYnNlcnZlcnMucHVzaChcbiAgICAgICAgICAgICAgICBhdHRycy4kb2JzZXJ2ZShwcmVmaXggKyAnUGxhY2VtZW50JywgZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICB0dFNjb3BlLnBsYWNlbWVudCA9IHZhbCA/IHZhbCA6IG9wdGlvbnMucGxhY2VtZW50O1xuICAgICAgICAgICAgICAgICAgaWYgKHR0U2NvcGUuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uVG9vbHRpcCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHVucmVnaXN0ZXJPYnNlcnZlcnMoKSB7XG4gICAgICAgICAgICAgIGlmIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9ic2VydmVycywgZnVuY3Rpb24ob2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGlkZSB0b29sdGlwcy9wb3BvdmVycyBmb3Igb3V0c2lkZUNsaWNrIHRyaWdnZXJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGJvZHlIaWRlVG9vbHRpcEJpbmQoZSkge1xuICAgICAgICAgICAgICBpZiAoIXR0U2NvcGUgfHwgIXR0U2NvcGUuaXNPcGVuIHx8ICF0b29sdGlwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdG9vbHRpcC9wb3BvdmVyIGxpbmsgb3IgdG9vbCB0b29sdGlwL3BvcG92ZXIgaXRzZWxmIHdlcmUgbm90IGNsaWNrZWRcbiAgICAgICAgICAgICAgaWYgKCFlbGVtZW50WzBdLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiAhdG9vbHRpcFswXS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBoaWRlVG9vbHRpcEJpbmQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBLZXlib2FyZEV2ZW50IGhhbmRsZXIgdG8gaGlkZSB0aGUgdG9vbHRpcCBvbiBFc2NhcGUga2V5IHByZXNzXG4gICAgICAgICAgICBmdW5jdGlvbiBoaWRlT25Fc2NhcGVLZXkoZSkge1xuICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gMjcpIHtcbiAgICAgICAgICAgICAgICBoaWRlVG9vbHRpcEJpbmQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdW5yZWdpc3RlclRyaWdnZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRyaWdnZXJzLnNob3cuZm9yRWFjaChmdW5jdGlvbih0cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRyaWdnZXIgPT09ICdvdXRzaWRlQ2xpY2snKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50Lm9mZignY2xpY2snLCB0b2dnbGVUb29sdGlwQmluZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQub2ZmKHRyaWdnZXIsIHNob3dUb29sdGlwQmluZCk7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50Lm9mZih0cmlnZ2VyLCB0b2dnbGVUb29sdGlwQmluZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnQub2ZmKCdrZXlwcmVzcycsIGhpZGVPbkVzY2FwZUtleSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0cmlnZ2Vycy5oaWRlLmZvckVhY2goZnVuY3Rpb24odHJpZ2dlcikge1xuICAgICAgICAgICAgICAgIGlmICh0cmlnZ2VyID09PSAnb3V0c2lkZUNsaWNrJykge1xuICAgICAgICAgICAgICAgICAgJGRvY3VtZW50Lm9mZignY2xpY2snLCBib2R5SGlkZVRvb2x0aXBCaW5kKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5vZmYodHJpZ2dlciwgaGlkZVRvb2x0aXBCaW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gcHJlcFRyaWdnZXJzKCkge1xuICAgICAgICAgICAgICB2YXIgc2hvd1RyaWdnZXJzID0gW10sIGhpZGVUcmlnZ2VycyA9IFtdO1xuICAgICAgICAgICAgICB2YXIgdmFsID0gc2NvcGUuJGV2YWwoYXR0cnNbcHJlZml4ICsgJ1RyaWdnZXInXSk7XG4gICAgICAgICAgICAgIHVucmVnaXN0ZXJUcmlnZ2VycygpO1xuXG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWwpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgICBzaG93VHJpZ2dlcnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgaGlkZVRyaWdnZXJzLnB1c2godmFsW2tleV0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJzID0ge1xuICAgICAgICAgICAgICAgICAgc2hvdzogc2hvd1RyaWdnZXJzLFxuICAgICAgICAgICAgICAgICAgaGlkZTogaGlkZVRyaWdnZXJzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VycyA9IGdldFRyaWdnZXJzKHZhbCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodHJpZ2dlcnMuc2hvdyAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcnMuc2hvdy5mb3JFYWNoKGZ1bmN0aW9uKHRyaWdnZXIsIGlkeCkge1xuICAgICAgICAgICAgICAgICAgaWYgKHRyaWdnZXIgPT09ICdvdXRzaWRlQ2xpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQub24oJ2NsaWNrJywgdG9nZ2xlVG9vbHRpcEJpbmQpO1xuICAgICAgICAgICAgICAgICAgICAkZG9jdW1lbnQub24oJ2NsaWNrJywgYm9keUhpZGVUb29sdGlwQmluZCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgPT09IHRyaWdnZXJzLmhpZGVbaWR4XSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9uKHRyaWdnZXIsIHRvZ2dsZVRvb2x0aXBCaW5kKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHJpZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9uKHRyaWdnZXIsIHNob3dUb29sdGlwQmluZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQub24odHJpZ2dlcnMuaGlkZVtpZHhdLCBoaWRlVG9vbHRpcEJpbmQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5vbigna2V5cHJlc3MnLCBoaWRlT25Fc2NhcGVLZXkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXBUcmlnZ2VycygpO1xuXG4gICAgICAgICAgICB2YXIgYW5pbWF0aW9uID0gc2NvcGUuJGV2YWwoYXR0cnNbcHJlZml4ICsgJ0FuaW1hdGlvbiddKTtcbiAgICAgICAgICAgIHR0U2NvcGUuYW5pbWF0aW9uID0gYW5ndWxhci5pc0RlZmluZWQoYW5pbWF0aW9uKSA/ICEhYW5pbWF0aW9uIDogb3B0aW9ucy5hbmltYXRpb247XG5cbiAgICAgICAgICAgIHZhciBhcHBlbmRUb0JvZHlWYWw7XG4gICAgICAgICAgICB2YXIgYXBwZW5kS2V5ID0gcHJlZml4ICsgJ0FwcGVuZFRvQm9keSc7XG4gICAgICAgICAgICBpZiAoYXBwZW5kS2V5IGluIGF0dHJzICYmIGF0dHJzW2FwcGVuZEtleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBhcHBlbmRUb0JvZHlWYWwgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXBwZW5kVG9Cb2R5VmFsID0gc2NvcGUuJGV2YWwoYXR0cnNbYXBwZW5kS2V5XSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGVuZFRvQm9keSA9IGFuZ3VsYXIuaXNEZWZpbmVkKGFwcGVuZFRvQm9keVZhbCkgPyBhcHBlbmRUb0JvZHlWYWwgOiBhcHBlbmRUb0JvZHk7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0b29sdGlwIGlzIGRlc3Ryb3llZCBhbmQgcmVtb3ZlZC5cbiAgICAgICAgICAgIHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbiBvbkRlc3Ryb3lUb29sdGlwKCkge1xuICAgICAgICAgICAgICB1bnJlZ2lzdGVyVHJpZ2dlcnMoKTtcbiAgICAgICAgICAgICAgcmVtb3ZlVG9vbHRpcCgpO1xuICAgICAgICAgICAgICB0dFNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgfV07XG59KVxuXG4vLyBUaGlzIGlzIG1vc3RseSBuZ0luY2x1ZGUgY29kZSBidXQgd2l0aCBhIGN1c3RvbSBzY29wZVxuLmRpcmVjdGl2ZSgndWliVG9vbHRpcFRlbXBsYXRlVHJhbnNjbHVkZScsIFtcbiAgICAgICAgICckYW5pbWF0ZScsICckc2NlJywgJyRjb21waWxlJywgJyR0ZW1wbGF0ZVJlcXVlc3QnLFxuZnVuY3Rpb24gKCRhbmltYXRlLCAkc2NlLCAkY29tcGlsZSwgJHRlbXBsYXRlUmVxdWVzdCkge1xuICByZXR1cm4ge1xuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgdmFyIG9yaWdTY29wZSA9IHNjb3BlLiRldmFsKGF0dHJzLnRvb2x0aXBUZW1wbGF0ZVRyYW5zY2x1ZGVTY29wZSk7XG5cbiAgICAgIHZhciBjaGFuZ2VDb3VudGVyID0gMCxcbiAgICAgICAgY3VycmVudFNjb3BlLFxuICAgICAgICBwcmV2aW91c0VsZW1lbnQsXG4gICAgICAgIGN1cnJlbnRFbGVtZW50O1xuXG4gICAgICB2YXIgY2xlYW51cExhc3RJbmNsdWRlQ29udGVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAocHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgICAgcHJldmlvdXNFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgIHByZXZpb3VzRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudFNjb3BlKSB7XG4gICAgICAgICAgY3VycmVudFNjb3BlLiRkZXN0cm95KCk7XG4gICAgICAgICAgY3VycmVudFNjb3BlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICRhbmltYXRlLmxlYXZlKGN1cnJlbnRFbGVtZW50KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSBjdXJyZW50RWxlbWVudDtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNjb3BlLiR3YXRjaCgkc2NlLnBhcnNlQXNSZXNvdXJjZVVybChhdHRycy51aWJUb29sdGlwVGVtcGxhdGVUcmFuc2NsdWRlKSwgZnVuY3Rpb24oc3JjKSB7XG4gICAgICAgIHZhciB0aGlzQ2hhbmdlSWQgPSArK2NoYW5nZUNvdW50ZXI7XG5cbiAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgIC8vc2V0IHRoZSAybmQgcGFyYW0gdG8gdHJ1ZSB0byBpZ25vcmUgdGhlIHRlbXBsYXRlIHJlcXVlc3QgZXJyb3Igc28gdGhhdCB0aGUgaW5uZXJcbiAgICAgICAgICAvL2NvbnRlbnRzIGFuZCBzY29wZSBjYW4gYmUgY2xlYW5lZCB1cC5cbiAgICAgICAgICAkdGVtcGxhdGVSZXF1ZXN0KHNyYywgdHJ1ZSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgaWYgKHRoaXNDaGFuZ2VJZCAhPT0gY2hhbmdlQ291bnRlcikgeyByZXR1cm47IH1cbiAgICAgICAgICAgIHZhciBuZXdTY29wZSA9IG9yaWdTY29wZS4kbmV3KCk7XG4gICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSByZXNwb25zZTtcblxuICAgICAgICAgICAgdmFyIGNsb25lID0gJGNvbXBpbGUodGVtcGxhdGUpKG5ld1Njb3BlLCBmdW5jdGlvbihjbG9uZSkge1xuICAgICAgICAgICAgICBjbGVhbnVwTGFzdEluY2x1ZGVDb250ZW50KCk7XG4gICAgICAgICAgICAgICRhbmltYXRlLmVudGVyKGNsb25lLCBlbGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjdXJyZW50U2NvcGUgPSBuZXdTY29wZTtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY2xvbmU7XG5cbiAgICAgICAgICAgIGN1cnJlbnRTY29wZS4kZW1pdCgnJGluY2x1ZGVDb250ZW50TG9hZGVkJywgc3JjKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzQ2hhbmdlSWQgPT09IGNoYW5nZUNvdW50ZXIpIHtcbiAgICAgICAgICAgICAgY2xlYW51cExhc3RJbmNsdWRlQ29udGVudCgpO1xuICAgICAgICAgICAgICBzY29wZS4kZW1pdCgnJGluY2x1ZGVDb250ZW50RXJyb3InLCBzcmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNjb3BlLiRlbWl0KCckaW5jbHVkZUNvbnRlbnRSZXF1ZXN0ZWQnLCBzcmMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsZWFudXBMYXN0SW5jbHVkZUNvbnRlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLiRvbignJGRlc3Ryb3knLCBjbGVhbnVwTGFzdEluY2x1ZGVDb250ZW50KTtcbiAgICB9XG4gIH07XG59XSlcblxuLyoqXG4gKiBOb3RlIHRoYXQgaXQncyBpbnRlbnRpb25hbCB0aGF0IHRoZXNlIGNsYXNzZXMgYXJlICpub3QqIGFwcGxpZWQgdGhyb3VnaCAkYW5pbWF0ZS5cbiAqIFRoZXkgbXVzdCBub3QgYmUgYW5pbWF0ZWQgYXMgdGhleSdyZSBleHBlY3RlZCB0byBiZSBwcmVzZW50IG9uIHRoZSB0b29sdGlwIG9uXG4gKiBpbml0aWFsaXphdGlvbi5cbiAqL1xuLmRpcmVjdGl2ZSgndWliVG9vbHRpcENsYXNzZXMnLCBbJyR1aWJQb3NpdGlvbicsIGZ1bmN0aW9uKCR1aWJQb3NpdGlvbikge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICAvLyBuZWVkIHRvIHNldCB0aGUgcHJpbWFyeSBwb3NpdGlvbiBzbyB0aGVcbiAgICAgIC8vIGFycm93IGhhcyBzcGFjZSBkdXJpbmcgcG9zaXRpb24gbWVhc3VyZS5cbiAgICAgIC8vIHRvb2x0aXAucG9zaXRpb25Ub29sdGlwKClcbiAgICAgIGlmIChzY29wZS5wbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gLy8gVGhlcmUgYXJlIG5vIHRvcC1sZWZ0IGV0Yy4uLiBjbGFzc2VzXG4gICAgICAgIC8vIC8vIGluIFRXQlMsIHNvIHdlIG5lZWQgdGhlIHByaW1hcnkgcG9zaXRpb24uXG4gICAgICAgIHZhciBwb3NpdGlvbiA9ICR1aWJQb3NpdGlvbi5wYXJzZVBsYWNlbWVudChzY29wZS5wbGFjZW1lbnQpO1xuICAgICAgICBlbGVtZW50LmFkZENsYXNzKHBvc2l0aW9uWzBdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3BlLnBvcHVwQ2xhc3MpIHtcbiAgICAgICAgZWxlbWVudC5hZGRDbGFzcyhzY29wZS5wb3B1cENsYXNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3BlLmFuaW1hdGlvbikge1xuICAgICAgICBlbGVtZW50LmFkZENsYXNzKGF0dHJzLnRvb2x0aXBBbmltYXRpb25DbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufV0pXG5cbi5kaXJlY3RpdmUoJ3VpYlRvb2x0aXBQb3B1cCcsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgc2NvcGU6IHsgY29udGVudDogJ0AnIH0sXG4gICAgdGVtcGxhdGVVcmw6ICd1aWIvdGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwnXG4gIH07XG59KVxuXG4uZGlyZWN0aXZlKCd1aWJUb29sdGlwJywgWyAnJHVpYlRvb2x0aXAnLCBmdW5jdGlvbigkdWliVG9vbHRpcCkge1xuICByZXR1cm4gJHVpYlRvb2x0aXAoJ3VpYlRvb2x0aXAnLCAndG9vbHRpcCcsICdtb3VzZWVudGVyJyk7XG59XSlcblxuLmRpcmVjdGl2ZSgndWliVG9vbHRpcFRlbXBsYXRlUG9wdXAnLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIHNjb3BlOiB7IGNvbnRlbnRFeHA6ICcmJywgb3JpZ2luU2NvcGU6ICcmJyB9LFxuICAgIHRlbXBsYXRlVXJsOiAndWliL3RlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC10ZW1wbGF0ZS1wb3B1cC5odG1sJ1xuICB9O1xufSlcblxuLmRpcmVjdGl2ZSgndWliVG9vbHRpcFRlbXBsYXRlJywgWyckdWliVG9vbHRpcCcsIGZ1bmN0aW9uKCR1aWJUb29sdGlwKSB7XG4gIHJldHVybiAkdWliVG9vbHRpcCgndWliVG9vbHRpcFRlbXBsYXRlJywgJ3Rvb2x0aXAnLCAnbW91c2VlbnRlcicsIHtcbiAgICB1c2VDb250ZW50RXhwOiB0cnVlXG4gIH0pO1xufV0pXG5cbi5kaXJlY3RpdmUoJ3VpYlRvb2x0aXBIdG1sUG9wdXAnLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIHNjb3BlOiB7IGNvbnRlbnRFeHA6ICcmJyB9LFxuICAgIHRlbXBsYXRlVXJsOiAndWliL3RlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXBvcHVwLmh0bWwnXG4gIH07XG59KVxuXG4uZGlyZWN0aXZlKCd1aWJUb29sdGlwSHRtbCcsIFsnJHVpYlRvb2x0aXAnLCBmdW5jdGlvbigkdWliVG9vbHRpcCkge1xuICByZXR1cm4gJHVpYlRvb2x0aXAoJ3VpYlRvb2x0aXBIdG1sJywgJ3Rvb2x0aXAnLCAnbW91c2VlbnRlcicsIHtcbiAgICB1c2VDb250ZW50RXhwOiB0cnVlXG4gIH0pO1xufV0pO1xuXG4vKipcbiAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN0aWxsIG91dHN0YW5kaW5nOiBwb3B1cCBkZWxheSwgYW5pbWF0aW9uIGFzIGFcbiAqIGZ1bmN0aW9uLCBwbGFjZW1lbnQgYXMgYSBmdW5jdGlvbiwgaW5zaWRlLCBzdXBwb3J0IGZvciBtb3JlIHRyaWdnZXJzIHRoYW5cbiAqIGp1c3QgbW91c2UgZW50ZXIvbGVhdmUsIGFuZCBzZWxlY3RvciBkZWxlZ2F0YXRpb24uXG4gKi9cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAucG9wb3ZlcicsIFsndWkuYm9vdHN0cmFwLnRvb2x0aXAnXSlcblxuLmRpcmVjdGl2ZSgndWliUG9wb3ZlclRlbXBsYXRlUG9wdXAnLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIHNjb3BlOiB7IHVpYlRpdGxlOiAnQCcsIGNvbnRlbnRFeHA6ICcmJywgb3JpZ2luU2NvcGU6ICcmJyB9LFxuICAgIHRlbXBsYXRlVXJsOiAndWliL3RlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci10ZW1wbGF0ZS5odG1sJ1xuICB9O1xufSlcblxuLmRpcmVjdGl2ZSgndWliUG9wb3ZlclRlbXBsYXRlJywgWyckdWliVG9vbHRpcCcsIGZ1bmN0aW9uKCR1aWJUb29sdGlwKSB7XG4gIHJldHVybiAkdWliVG9vbHRpcCgndWliUG9wb3ZlclRlbXBsYXRlJywgJ3BvcG92ZXInLCAnY2xpY2snLCB7XG4gICAgdXNlQ29udGVudEV4cDogdHJ1ZVxuICB9KTtcbn1dKVxuXG4uZGlyZWN0aXZlKCd1aWJQb3BvdmVySHRtbFBvcHVwJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICBzY29wZTogeyBjb250ZW50RXhwOiAnJicsIHVpYlRpdGxlOiAnQCcgfSxcbiAgICB0ZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXItaHRtbC5odG1sJ1xuICB9O1xufSlcblxuLmRpcmVjdGl2ZSgndWliUG9wb3Zlckh0bWwnLCBbJyR1aWJUb29sdGlwJywgZnVuY3Rpb24oJHVpYlRvb2x0aXApIHtcbiAgcmV0dXJuICR1aWJUb29sdGlwKCd1aWJQb3BvdmVySHRtbCcsICdwb3BvdmVyJywgJ2NsaWNrJywge1xuICAgIHVzZUNvbnRlbnRFeHA6IHRydWVcbiAgfSk7XG59XSlcblxuLmRpcmVjdGl2ZSgndWliUG9wb3ZlclBvcHVwJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICBzY29wZTogeyB1aWJUaXRsZTogJ0AnLCBjb250ZW50OiAnQCcgfSxcbiAgICB0ZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCdcbiAgfTtcbn0pXG5cbi5kaXJlY3RpdmUoJ3VpYlBvcG92ZXInLCBbJyR1aWJUb29sdGlwJywgZnVuY3Rpb24oJHVpYlRvb2x0aXApIHtcbiAgcmV0dXJuICR1aWJUb29sdGlwKCd1aWJQb3BvdmVyJywgJ3BvcG92ZXInLCAnY2xpY2snKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5wcm9ncmVzc2JhcicsIFtdKVxuXG4uY29uc3RhbnQoJ3VpYlByb2dyZXNzQ29uZmlnJywge1xuICBhbmltYXRlOiB0cnVlLFxuICBtYXg6IDEwMFxufSlcblxuLmNvbnRyb2xsZXIoJ1VpYlByb2dyZXNzQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRhdHRycycsICd1aWJQcm9ncmVzc0NvbmZpZycsIGZ1bmN0aW9uKCRzY29wZSwgJGF0dHJzLCBwcm9ncmVzc0NvbmZpZykge1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBhbmltYXRlID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLmFuaW1hdGUpID8gJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLmFuaW1hdGUpIDogcHJvZ3Jlc3NDb25maWcuYW5pbWF0ZTtcblxuICB0aGlzLmJhcnMgPSBbXTtcbiAgJHNjb3BlLm1heCA9IGdldE1heE9yRGVmYXVsdCgpO1xuXG4gIHRoaXMuYWRkQmFyID0gZnVuY3Rpb24oYmFyLCBlbGVtZW50LCBhdHRycykge1xuICAgIGlmICghYW5pbWF0ZSkge1xuICAgICAgZWxlbWVudC5jc3Moeyd0cmFuc2l0aW9uJzogJ25vbmUnfSk7XG4gICAgfVxuXG4gICAgdGhpcy5iYXJzLnB1c2goYmFyKTtcblxuICAgIGJhci5tYXggPSBnZXRNYXhPckRlZmF1bHQoKTtcbiAgICBiYXIudGl0bGUgPSBhdHRycyAmJiBhbmd1bGFyLmlzRGVmaW5lZChhdHRycy50aXRsZSkgPyBhdHRycy50aXRsZSA6ICdwcm9ncmVzc2Jhcic7XG5cbiAgICBiYXIuJHdhdGNoKCd2YWx1ZScsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBiYXIucmVjYWxjdWxhdGVQZXJjZW50YWdlKCk7XG4gICAgfSk7XG5cbiAgICBiYXIucmVjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG90YWxQZXJjZW50YWdlID0gc2VsZi5iYXJzLnJlZHVjZShmdW5jdGlvbih0b3RhbCwgYmFyKSB7XG4gICAgICAgIGJhci5wZXJjZW50ID0gKygxMDAgKiBiYXIudmFsdWUgLyBiYXIubWF4KS50b0ZpeGVkKDIpO1xuICAgICAgICByZXR1cm4gdG90YWwgKyBiYXIucGVyY2VudDtcbiAgICAgIH0sIDApO1xuXG4gICAgICBpZiAodG90YWxQZXJjZW50YWdlID4gMTAwKSB7XG4gICAgICAgIGJhci5wZXJjZW50IC09IHRvdGFsUGVyY2VudGFnZSAtIDEwMDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYmFyLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICAgIGVsZW1lbnQgPSBudWxsO1xuICAgICAgc2VsZi5yZW1vdmVCYXIoYmFyKTtcbiAgICB9KTtcbiAgfTtcblxuICB0aGlzLnJlbW92ZUJhciA9IGZ1bmN0aW9uKGJhcikge1xuICAgIHRoaXMuYmFycy5zcGxpY2UodGhpcy5iYXJzLmluZGV4T2YoYmFyKSwgMSk7XG4gICAgdGhpcy5iYXJzLmZvckVhY2goZnVuY3Rpb24gKGJhcikge1xuICAgICAgYmFyLnJlY2FsY3VsYXRlUGVyY2VudGFnZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vJGF0dHJzLiRvYnNlcnZlKCdtYXhQYXJhbScsIGZ1bmN0aW9uKG1heFBhcmFtKSB7XG4gICRzY29wZS4kd2F0Y2goJ21heFBhcmFtJywgZnVuY3Rpb24obWF4UGFyYW0pIHtcbiAgICBzZWxmLmJhcnMuZm9yRWFjaChmdW5jdGlvbihiYXIpIHtcbiAgICAgIGJhci5tYXggPSBnZXRNYXhPckRlZmF1bHQoKTtcbiAgICAgIGJhci5yZWNhbGN1bGF0ZVBlcmNlbnRhZ2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0TWF4T3JEZWZhdWx0ICgpIHtcbiAgICByZXR1cm4gYW5ndWxhci5pc0RlZmluZWQoJHNjb3BlLm1heFBhcmFtKSA/ICRzY29wZS5tYXhQYXJhbSA6IHByb2dyZXNzQ29uZmlnLm1heDtcbiAgfVxufV0pXG5cbi5kaXJlY3RpdmUoJ3VpYlByb2dyZXNzJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVwbGFjZTogdHJ1ZSxcbiAgICB0cmFuc2NsdWRlOiB0cnVlLFxuICAgIGNvbnRyb2xsZXI6ICdVaWJQcm9ncmVzc0NvbnRyb2xsZXInLFxuICAgIHJlcXVpcmU6ICd1aWJQcm9ncmVzcycsXG4gICAgc2NvcGU6IHtcbiAgICAgIG1heFBhcmFtOiAnPT9tYXgnXG4gICAgfSxcbiAgICB0ZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sJ1xuICB9O1xufSlcblxuLmRpcmVjdGl2ZSgndWliQmFyJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVwbGFjZTogdHJ1ZSxcbiAgICB0cmFuc2NsdWRlOiB0cnVlLFxuICAgIHJlcXVpcmU6ICdedWliUHJvZ3Jlc3MnLFxuICAgIHNjb3BlOiB7XG4gICAgICB2YWx1ZTogJz0nLFxuICAgICAgdHlwZTogJ0AnXG4gICAgfSxcbiAgICB0ZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCcsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBwcm9ncmVzc0N0cmwpIHtcbiAgICAgIHByb2dyZXNzQ3RybC5hZGRCYXIoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKTtcbiAgICB9XG4gIH07XG59KVxuXG4uZGlyZWN0aXZlKCd1aWJQcm9ncmVzc2JhcicsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHJlcGxhY2U6IHRydWUsXG4gICAgdHJhbnNjbHVkZTogdHJ1ZSxcbiAgICBjb250cm9sbGVyOiAnVWliUHJvZ3Jlc3NDb250cm9sbGVyJyxcbiAgICBzY29wZToge1xuICAgICAgdmFsdWU6ICc9JyxcbiAgICAgIG1heFBhcmFtOiAnPT9tYXgnLFxuICAgICAgdHlwZTogJ0AnXG4gICAgfSxcbiAgICB0ZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sJyxcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIHByb2dyZXNzQ3RybCkge1xuICAgICAgcHJvZ3Jlc3NDdHJsLmFkZEJhcihzY29wZSwgYW5ndWxhci5lbGVtZW50KGVsZW1lbnQuY2hpbGRyZW4oKVswXSksIHt0aXRsZTogYXR0cnMudGl0bGV9KTtcbiAgICB9XG4gIH07XG59KTtcblxuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5yYXRpbmcnLCBbXSlcblxuLmNvbnN0YW50KCd1aWJSYXRpbmdDb25maWcnLCB7XG4gIG1heDogNSxcbiAgc3RhdGVPbjogbnVsbCxcbiAgc3RhdGVPZmY6IG51bGwsXG4gIGVuYWJsZVJlc2V0OiB0cnVlLFxuICB0aXRsZXM6IFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJywgJ2ZpdmUnXVxufSlcblxuLmNvbnRyb2xsZXIoJ1VpYlJhdGluZ0NvbnRyb2xsZXInLCBbJyRzY29wZScsICckYXR0cnMnLCAndWliUmF0aW5nQ29uZmlnJywgZnVuY3Rpb24oJHNjb3BlLCAkYXR0cnMsIHJhdGluZ0NvbmZpZykge1xuICB2YXIgbmdNb2RlbEN0cmwgPSB7ICRzZXRWaWV3VmFsdWU6IGFuZ3VsYXIubm9vcCB9LFxuICAgIHNlbGYgPSB0aGlzO1xuXG4gIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKG5nTW9kZWxDdHJsXykge1xuICAgIG5nTW9kZWxDdHJsID0gbmdNb2RlbEN0cmxfO1xuICAgIG5nTW9kZWxDdHJsLiRyZW5kZXIgPSB0aGlzLnJlbmRlcjtcblxuICAgIG5nTW9kZWxDdHJsLiRmb3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGlmIChhbmd1bGFyLmlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSA8PCAwICE9PSB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlT24gPSBhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMuc3RhdGVPbikgPyAkc2NvcGUuJHBhcmVudC4kZXZhbCgkYXR0cnMuc3RhdGVPbikgOiByYXRpbmdDb25maWcuc3RhdGVPbjtcbiAgICB0aGlzLnN0YXRlT2ZmID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLnN0YXRlT2ZmKSA/ICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5zdGF0ZU9mZikgOiByYXRpbmdDb25maWcuc3RhdGVPZmY7XG4gICAgdGhpcy5lbmFibGVSZXNldCA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5lbmFibGVSZXNldCkgP1xuICAgICAgJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLmVuYWJsZVJlc2V0KSA6IHJhdGluZ0NvbmZpZy5lbmFibGVSZXNldDtcbiAgICB2YXIgdG1wVGl0bGVzID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLnRpdGxlcykgPyAkc2NvcGUuJHBhcmVudC4kZXZhbCgkYXR0cnMudGl0bGVzKSA6IHJhdGluZ0NvbmZpZy50aXRsZXM7XG4gICAgdGhpcy50aXRsZXMgPSBhbmd1bGFyLmlzQXJyYXkodG1wVGl0bGVzKSAmJiB0bXBUaXRsZXMubGVuZ3RoID4gMCA/XG4gICAgICB0bXBUaXRsZXMgOiByYXRpbmdDb25maWcudGl0bGVzO1xuXG4gICAgdmFyIHJhdGluZ1N0YXRlcyA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5yYXRpbmdTdGF0ZXMpID9cbiAgICAgICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5yYXRpbmdTdGF0ZXMpIDpcbiAgICAgIG5ldyBBcnJheShhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMubWF4KSA/ICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5tYXgpIDogcmF0aW5nQ29uZmlnLm1heCk7XG4gICAgJHNjb3BlLnJhbmdlID0gdGhpcy5idWlsZFRlbXBsYXRlT2JqZWN0cyhyYXRpbmdTdGF0ZXMpO1xuICB9O1xuXG4gIHRoaXMuYnVpbGRUZW1wbGF0ZU9iamVjdHMgPSBmdW5jdGlvbihzdGF0ZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHN0YXRlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIHN0YXRlc1tpXSA9IGFuZ3VsYXIuZXh0ZW5kKHsgaW5kZXg6IGkgfSwgeyBzdGF0ZU9uOiB0aGlzLnN0YXRlT24sIHN0YXRlT2ZmOiB0aGlzLnN0YXRlT2ZmLCB0aXRsZTogdGhpcy5nZXRUaXRsZShpKSB9LCBzdGF0ZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGVzO1xuICB9O1xuXG4gIHRoaXMuZ2V0VGl0bGUgPSBmdW5jdGlvbihpbmRleCkge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnRpdGxlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGl0bGVzW2luZGV4XTtcbiAgfTtcblxuICAkc2NvcGUucmF0ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKCEkc2NvcGUucmVhZG9ubHkgJiYgdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAkc2NvcGUucmFuZ2UubGVuZ3RoKSB7XG4gICAgICB2YXIgbmV3Vmlld1ZhbHVlID0gc2VsZi5lbmFibGVSZXNldCAmJiBuZ01vZGVsQ3RybC4kdmlld1ZhbHVlID09PSB2YWx1ZSA/IDAgOiB2YWx1ZTtcbiAgICAgIG5nTW9kZWxDdHJsLiRzZXRWaWV3VmFsdWUobmV3Vmlld1ZhbHVlKTtcbiAgICAgIG5nTW9kZWxDdHJsLiRyZW5kZXIoKTtcbiAgICB9XG4gIH07XG5cbiAgJHNjb3BlLmVudGVyID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAoISRzY29wZS5yZWFkb25seSkge1xuICAgICAgJHNjb3BlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgICRzY29wZS5vbkhvdmVyKHt2YWx1ZTogdmFsdWV9KTtcbiAgfTtcblxuICAkc2NvcGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAkc2NvcGUudmFsdWUgPSBuZ01vZGVsQ3RybC4kdmlld1ZhbHVlO1xuICAgICRzY29wZS5vbkxlYXZlKCk7XG4gIH07XG5cbiAgJHNjb3BlLm9uS2V5ZG93biA9IGZ1bmN0aW9uKGV2dCkge1xuICAgIGlmICgvKDM3fDM4fDM5fDQwKS8udGVzdChldnQud2hpY2gpKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRzY29wZS5yYXRlKCRzY29wZS52YWx1ZSArIChldnQud2hpY2ggPT09IDM4IHx8IGV2dC53aGljaCA9PT0gMzkgPyAxIDogLTEpKTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICAkc2NvcGUudmFsdWUgPSBuZ01vZGVsQ3RybC4kdmlld1ZhbHVlO1xuICAgICRzY29wZS50aXRsZSA9IHNlbGYuZ2V0VGl0bGUoJHNjb3BlLnZhbHVlIC0gMSk7XG4gIH07XG59XSlcblxuLmRpcmVjdGl2ZSgndWliUmF0aW5nJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWlyZTogWyd1aWJSYXRpbmcnLCAnbmdNb2RlbCddLFxuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgc2NvcGU6IHtcbiAgICAgIHJlYWRvbmx5OiAnPT9yZWFkT25seScsXG4gICAgICBvbkhvdmVyOiAnJicsXG4gICAgICBvbkxlYXZlOiAnJidcbiAgICB9LFxuICAgIGNvbnRyb2xsZXI6ICdVaWJSYXRpbmdDb250cm9sbGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwnLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMpIHtcbiAgICAgIHZhciByYXRpbmdDdHJsID0gY3RybHNbMF0sIG5nTW9kZWxDdHJsID0gY3RybHNbMV07XG4gICAgICByYXRpbmdDdHJsLmluaXQobmdNb2RlbEN0cmwpO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5hbmd1bGFyLm1vZHVsZSgndWkuYm9vdHN0cmFwLnRhYnMnLCBbXSlcblxuLmNvbnRyb2xsZXIoJ1VpYlRhYnNldENvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uICgkc2NvcGUpIHtcbiAgdmFyIGN0cmwgPSB0aGlzLFxuICAgIG9sZEluZGV4O1xuICBjdHJsLnRhYnMgPSBbXTtcblxuICBjdHJsLnNlbGVjdCA9IGZ1bmN0aW9uKGluZGV4LCBldnQpIHtcbiAgICBpZiAoIWRlc3Ryb3llZCkge1xuICAgICAgdmFyIHByZXZpb3VzSW5kZXggPSBmaW5kVGFiSW5kZXgob2xkSW5kZXgpO1xuICAgICAgdmFyIHByZXZpb3VzU2VsZWN0ZWQgPSBjdHJsLnRhYnNbcHJldmlvdXNJbmRleF07XG4gICAgICBpZiAocHJldmlvdXNTZWxlY3RlZCkge1xuICAgICAgICBwcmV2aW91c1NlbGVjdGVkLnRhYi5vbkRlc2VsZWN0KHtcbiAgICAgICAgICAkZXZlbnQ6IGV2dCxcbiAgICAgICAgICAkc2VsZWN0ZWRJbmRleDogaW5kZXhcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChldnQgJiYgZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzU2VsZWN0ZWQudGFiLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZWN0ZWQgPSBjdHJsLnRhYnNbaW5kZXhdO1xuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIHNlbGVjdGVkLnRhYi5vblNlbGVjdCh7XG4gICAgICAgICAgJGV2ZW50OiBldnRcbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGVjdGVkLnRhYi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBjdHJsLmFjdGl2ZSA9IHNlbGVjdGVkLmluZGV4O1xuICAgICAgICBvbGRJbmRleCA9IHNlbGVjdGVkLmluZGV4O1xuICAgICAgfSBlbHNlIGlmICghc2VsZWN0ZWQgJiYgYW5ndWxhci5pc0RlZmluZWQob2xkSW5kZXgpKSB7XG4gICAgICAgIGN0cmwuYWN0aXZlID0gbnVsbDtcbiAgICAgICAgb2xkSW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjdHJsLmFkZFRhYiA9IGZ1bmN0aW9uIGFkZFRhYih0YWIpIHtcbiAgICBjdHJsLnRhYnMucHVzaCh7XG4gICAgICB0YWI6IHRhYixcbiAgICAgIGluZGV4OiB0YWIuaW5kZXhcbiAgICB9KTtcbiAgICBjdHJsLnRhYnMuc29ydChmdW5jdGlvbih0MSwgdDIpIHtcbiAgICAgIGlmICh0MS5pbmRleCA+IHQyLmluZGV4KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAodDEuaW5kZXggPCB0Mi5pbmRleCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuXG4gICAgaWYgKHRhYi5pbmRleCA9PT0gY3RybC5hY3RpdmUgfHwgIWFuZ3VsYXIuaXNEZWZpbmVkKGN0cmwuYWN0aXZlKSAmJiBjdHJsLnRhYnMubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBmaW5kVGFiSW5kZXgodGFiLmluZGV4KTtcbiAgICAgIGN0cmwuc2VsZWN0KG5ld0FjdGl2ZUluZGV4KTtcbiAgICB9XG4gIH07XG5cbiAgY3RybC5yZW1vdmVUYWIgPSBmdW5jdGlvbiByZW1vdmVUYWIodGFiKSB7XG4gICAgdmFyIGluZGV4O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3RybC50YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3RybC50YWJzW2ldLnRhYiA9PT0gdGFiKSB7XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN0cmwudGFic1tpbmRleF0uaW5kZXggPT09IGN0cmwuYWN0aXZlKSB7XG4gICAgICB2YXIgbmV3QWN0aXZlVGFiSW5kZXggPSBpbmRleCA9PT0gY3RybC50YWJzLmxlbmd0aCAtIDEgP1xuICAgICAgICBpbmRleCAtIDEgOiBpbmRleCArIDEgJSBjdHJsLnRhYnMubGVuZ3RoO1xuICAgICAgY3RybC5zZWxlY3QobmV3QWN0aXZlVGFiSW5kZXgpO1xuICAgIH1cblxuICAgIGN0cmwudGFicy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9O1xuXG4gICRzY29wZS4kd2F0Y2goJ3RhYnNldC5hY3RpdmUnLCBmdW5jdGlvbih2YWwpIHtcbiAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQodmFsKSAmJiB2YWwgIT09IG9sZEluZGV4KSB7XG4gICAgICBjdHJsLnNlbGVjdChmaW5kVGFiSW5kZXgodmFsKSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgZGVzdHJveWVkO1xuICAkc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIGRlc3Ryb3llZCA9IHRydWU7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGZpbmRUYWJJbmRleChpbmRleCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3RybC50YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3RybC50YWJzW2ldLmluZGV4ID09PSBpbmRleCkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1dKVxuXG4uZGlyZWN0aXZlKCd1aWJUYWJzZXQnLCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2NsdWRlOiB0cnVlLFxuICAgIHJlcGxhY2U6IHRydWUsXG4gICAgc2NvcGU6IHt9LFxuICAgIGJpbmRUb0NvbnRyb2xsZXI6IHtcbiAgICAgIGFjdGl2ZTogJz0/JyxcbiAgICAgIHR5cGU6ICdAJ1xuICAgIH0sXG4gICAgY29udHJvbGxlcjogJ1VpYlRhYnNldENvbnRyb2xsZXInLFxuICAgIGNvbnRyb2xsZXJBczogJ3RhYnNldCcsXG4gICAgdGVtcGxhdGVVcmw6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICByZXR1cm4gYXR0cnMudGVtcGxhdGVVcmwgfHwgJ3VpYi90ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sJztcbiAgICB9LFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycykge1xuICAgICAgc2NvcGUudmVydGljYWwgPSBhbmd1bGFyLmlzRGVmaW5lZChhdHRycy52ZXJ0aWNhbCkgP1xuICAgICAgICBzY29wZS4kcGFyZW50LiRldmFsKGF0dHJzLnZlcnRpY2FsKSA6IGZhbHNlO1xuICAgICAgc2NvcGUuanVzdGlmaWVkID0gYW5ndWxhci5pc0RlZmluZWQoYXR0cnMuanVzdGlmaWVkKSA/XG4gICAgICAgIHNjb3BlLiRwYXJlbnQuJGV2YWwoYXR0cnMuanVzdGlmaWVkKSA6IGZhbHNlO1xuICAgIH1cbiAgfTtcbn0pXG5cbi5kaXJlY3RpdmUoJ3VpYlRhYicsIFsnJHBhcnNlJywgZnVuY3Rpb24oJHBhcnNlKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWlyZTogJ151aWJUYWJzZXQnLFxuICAgIHJlcGxhY2U6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICByZXR1cm4gYXR0cnMudGVtcGxhdGVVcmwgfHwgJ3VpYi90ZW1wbGF0ZS90YWJzL3RhYi5odG1sJztcbiAgICB9LFxuICAgIHRyYW5zY2x1ZGU6IHRydWUsXG4gICAgc2NvcGU6IHtcbiAgICAgIGhlYWRpbmc6ICdAJyxcbiAgICAgIGluZGV4OiAnPT8nLFxuICAgICAgY2xhc3NlczogJ0A/JyxcbiAgICAgIG9uU2VsZWN0OiAnJnNlbGVjdCcsIC8vVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgaW4gY29udGVudEhlYWRpbmdUcmFuc2NsdWRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25jZSBpdCBpbnNlcnRzIHRoZSB0YWIncyBjb250ZW50IGludG8gdGhlIGRvbVxuICAgICAgb25EZXNlbGVjdDogJyZkZXNlbGVjdCdcbiAgICB9LFxuICAgIGNvbnRyb2xsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgLy9FbXB0eSBjb250cm9sbGVyIHNvIG90aGVyIGRpcmVjdGl2ZXMgY2FuIHJlcXVpcmUgYmVpbmcgJ3VuZGVyJyBhIHRhYlxuICAgIH0sXG4gICAgY29udHJvbGxlckFzOiAndGFiJyxcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxtLCBhdHRycywgdGFic2V0Q3RybCwgdHJhbnNjbHVkZSkge1xuICAgICAgc2NvcGUuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGlmIChhdHRycy5kaXNhYmxlKSB7XG4gICAgICAgIHNjb3BlLiRwYXJlbnQuJHdhdGNoKCRwYXJzZShhdHRycy5kaXNhYmxlKSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBzY29wZS5kaXNhYmxlZCA9ICEhIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFuZ3VsYXIuaXNVbmRlZmluZWQoYXR0cnMuaW5kZXgpKSB7XG4gICAgICAgIGlmICh0YWJzZXRDdHJsLnRhYnMgJiYgdGFic2V0Q3RybC50YWJzLmxlbmd0aCkge1xuICAgICAgICAgIHNjb3BlLmluZGV4ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgdGFic2V0Q3RybC50YWJzLm1hcChmdW5jdGlvbih0KSB7IHJldHVybiB0LmluZGV4OyB9KSkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjb3BlLmluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYW5ndWxhci5pc1VuZGVmaW5lZChhdHRycy5jbGFzc2VzKSkge1xuICAgICAgICBzY29wZS5jbGFzc2VzID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHNjb3BlLnNlbGVjdCA9IGZ1bmN0aW9uKGV2dCkge1xuICAgICAgICBpZiAoIXNjb3BlLmRpc2FibGVkKSB7XG4gICAgICAgICAgdmFyIGluZGV4O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFic2V0Q3RybC50YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGFic2V0Q3RybC50YWJzW2ldLnRhYiA9PT0gc2NvcGUpIHtcbiAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWJzZXRDdHJsLnNlbGVjdChpbmRleCwgZXZ0KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGFic2V0Q3RybC5hZGRUYWIoc2NvcGUpO1xuICAgICAgc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0YWJzZXRDdHJsLnJlbW92ZVRhYihzY29wZSk7XG4gICAgICB9KTtcblxuICAgICAgLy9XZSBuZWVkIHRvIHRyYW5zY2x1ZGUgbGF0ZXIsIG9uY2UgdGhlIGNvbnRlbnQgY29udGFpbmVyIGlzIHJlYWR5LlxuICAgICAgLy93aGVuIHRoaXMgbGluayBoYXBwZW5zLCB3ZSdyZSBpbnNpZGUgYSB0YWIgaGVhZGluZy5cbiAgICAgIHNjb3BlLiR0cmFuc2NsdWRlRm4gPSB0cmFuc2NsdWRlO1xuICAgIH1cbiAgfTtcbn1dKVxuXG4uZGlyZWN0aXZlKCd1aWJUYWJIZWFkaW5nVHJhbnNjbHVkZScsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgcmVxdWlyZTogJ151aWJUYWInLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0pIHtcbiAgICAgIHNjb3BlLiR3YXRjaCgnaGVhZGluZ0VsZW1lbnQnLCBmdW5jdGlvbiB1cGRhdGVIZWFkaW5nRWxlbWVudChoZWFkaW5nKSB7XG4gICAgICAgIGlmIChoZWFkaW5nKSB7XG4gICAgICAgICAgZWxtLmh0bWwoJycpO1xuICAgICAgICAgIGVsbS5hcHBlbmQoaGVhZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn0pXG5cbi5kaXJlY3RpdmUoJ3VpYlRhYkNvbnRlbnRUcmFuc2NsdWRlJywgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICByZXF1aXJlOiAnXnVpYlRhYnNldCcsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsbSwgYXR0cnMpIHtcbiAgICAgIHZhciB0YWIgPSBzY29wZS4kZXZhbChhdHRycy51aWJUYWJDb250ZW50VHJhbnNjbHVkZSkudGFiO1xuXG4gICAgICAvL05vdyBvdXIgdGFiIGlzIHJlYWR5IHRvIGJlIHRyYW5zY2x1ZGVkOiBib3RoIHRoZSB0YWIgaGVhZGluZyBhcmVhXG4gICAgICAvL2FuZCB0aGUgdGFiIGNvbnRlbnQgYXJlYSBhcmUgbG9hZGVkLiAgVHJhbnNjbHVkZSAnZW0gYm90aC5cbiAgICAgIHRhYi4kdHJhbnNjbHVkZUZuKHRhYi4kcGFyZW50LCBmdW5jdGlvbihjb250ZW50cykge1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goY29udGVudHMsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICBpZiAoaXNUYWJIZWFkaW5nKG5vZGUpKSB7XG4gICAgICAgICAgICAvL0xldCB0YWJIZWFkaW5nVHJhbnNjbHVkZSBrbm93LlxuICAgICAgICAgICAgdGFiLmhlYWRpbmdFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxtLmFwcGVuZChub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzVGFiSGVhZGluZyhub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudGFnTmFtZSAmJiAoXG4gICAgICBub2RlLmhhc0F0dHJpYnV0ZSgndWliLXRhYi1oZWFkaW5nJykgfHxcbiAgICAgIG5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLXVpYi10YWItaGVhZGluZycpIHx8XG4gICAgICBub2RlLmhhc0F0dHJpYnV0ZSgneC11aWItdGFiLWhlYWRpbmcnKSB8fFxuICAgICAgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd1aWItdGFiLWhlYWRpbmcnIHx8XG4gICAgICBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2RhdGEtdWliLXRhYi1oZWFkaW5nJyB8fFxuICAgICAgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd4LXVpYi10YWItaGVhZGluZycgfHxcbiAgICAgIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndWliOnRhYi1oZWFkaW5nJ1xuICAgICk7XG4gIH1cbn0pO1xuXG5hbmd1bGFyLm1vZHVsZSgndWkuYm9vdHN0cmFwLnRpbWVwaWNrZXInLCBbXSlcblxuLmNvbnN0YW50KCd1aWJUaW1lcGlja2VyQ29uZmlnJywge1xuICBob3VyU3RlcDogMSxcbiAgbWludXRlU3RlcDogMSxcbiAgc2Vjb25kU3RlcDogMSxcbiAgc2hvd01lcmlkaWFuOiB0cnVlLFxuICBzaG93U2Vjb25kczogZmFsc2UsXG4gIG1lcmlkaWFuczogbnVsbCxcbiAgcmVhZG9ubHlJbnB1dDogZmFsc2UsXG4gIG1vdXNld2hlZWw6IHRydWUsXG4gIGFycm93a2V5czogdHJ1ZSxcbiAgc2hvd1NwaW5uZXJzOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJ3VpYi90ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCdcbn0pXG5cbi5jb250cm9sbGVyKCdVaWJUaW1lcGlja2VyQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRlbGVtZW50JywgJyRhdHRycycsICckcGFyc2UnLCAnJGxvZycsICckbG9jYWxlJywgJ3VpYlRpbWVwaWNrZXJDb25maWcnLCBmdW5jdGlvbigkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsICRwYXJzZSwgJGxvZywgJGxvY2FsZSwgdGltZXBpY2tlckNvbmZpZykge1xuICB2YXIgaG91cnNNb2RlbEN0cmwsIG1pbnV0ZXNNb2RlbEN0cmwsIHNlY29uZHNNb2RlbEN0cmw7XG4gIHZhciBzZWxlY3RlZCA9IG5ldyBEYXRlKCksXG4gICAgd2F0Y2hlcnMgPSBbXSxcbiAgICBuZ01vZGVsQ3RybCA9IHsgJHNldFZpZXdWYWx1ZTogYW5ndWxhci5ub29wIH0sIC8vIG51bGxNb2RlbEN0cmxcbiAgICBtZXJpZGlhbnMgPSBhbmd1bGFyLmlzRGVmaW5lZCgkYXR0cnMubWVyaWRpYW5zKSA/ICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5tZXJpZGlhbnMpIDogdGltZXBpY2tlckNvbmZpZy5tZXJpZGlhbnMgfHwgJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTLkFNUE1TLFxuICAgIHBhZEhvdXJzID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLnBhZEhvdXJzKSA/ICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5wYWRIb3VycykgOiB0cnVlO1xuXG4gICRzY29wZS50YWJpbmRleCA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy50YWJpbmRleCkgPyAkYXR0cnMudGFiaW5kZXggOiAwO1xuICAkZWxlbWVudC5yZW1vdmVBdHRyKCd0YWJpbmRleCcpO1xuXG4gIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKG5nTW9kZWxDdHJsXywgaW5wdXRzKSB7XG4gICAgbmdNb2RlbEN0cmwgPSBuZ01vZGVsQ3RybF87XG4gICAgbmdNb2RlbEN0cmwuJHJlbmRlciA9IHRoaXMucmVuZGVyO1xuXG4gICAgbmdNb2RlbEN0cmwuJGZvcm1hdHRlcnMudW5zaGlmdChmdW5jdGlvbihtb2RlbFZhbHVlKSB7XG4gICAgICByZXR1cm4gbW9kZWxWYWx1ZSA/IG5ldyBEYXRlKG1vZGVsVmFsdWUpIDogbnVsbDtcbiAgICB9KTtcblxuICAgIHZhciBob3Vyc0lucHV0RWwgPSBpbnB1dHMuZXEoMCksXG4gICAgICAgIG1pbnV0ZXNJbnB1dEVsID0gaW5wdXRzLmVxKDEpLFxuICAgICAgICBzZWNvbmRzSW5wdXRFbCA9IGlucHV0cy5lcSgyKTtcblxuICAgIGhvdXJzTW9kZWxDdHJsID0gaG91cnNJbnB1dEVsLmNvbnRyb2xsZXIoJ25nTW9kZWwnKTtcbiAgICBtaW51dGVzTW9kZWxDdHJsID0gbWludXRlc0lucHV0RWwuY29udHJvbGxlcignbmdNb2RlbCcpO1xuICAgIHNlY29uZHNNb2RlbEN0cmwgPSBzZWNvbmRzSW5wdXRFbC5jb250cm9sbGVyKCduZ01vZGVsJyk7XG5cbiAgICB2YXIgbW91c2V3aGVlbCA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5tb3VzZXdoZWVsKSA/ICRzY29wZS4kcGFyZW50LiRldmFsKCRhdHRycy5tb3VzZXdoZWVsKSA6IHRpbWVwaWNrZXJDb25maWcubW91c2V3aGVlbDtcblxuICAgIGlmIChtb3VzZXdoZWVsKSB7XG4gICAgICB0aGlzLnNldHVwTW91c2V3aGVlbEV2ZW50cyhob3Vyc0lucHV0RWwsIG1pbnV0ZXNJbnB1dEVsLCBzZWNvbmRzSW5wdXRFbCk7XG4gICAgfVxuXG4gICAgdmFyIGFycm93a2V5cyA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5hcnJvd2tleXMpID8gJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLmFycm93a2V5cykgOiB0aW1lcGlja2VyQ29uZmlnLmFycm93a2V5cztcbiAgICBpZiAoYXJyb3drZXlzKSB7XG4gICAgICB0aGlzLnNldHVwQXJyb3drZXlFdmVudHMoaG91cnNJbnB1dEVsLCBtaW51dGVzSW5wdXRFbCwgc2Vjb25kc0lucHV0RWwpO1xuICAgIH1cblxuICAgICRzY29wZS5yZWFkb25seUlucHV0ID0gYW5ndWxhci5pc0RlZmluZWQoJGF0dHJzLnJlYWRvbmx5SW5wdXQpID8gJHNjb3BlLiRwYXJlbnQuJGV2YWwoJGF0dHJzLnJlYWRvbmx5SW5wdXQpIDogdGltZXBpY2tlckNvbmZpZy5yZWFkb25seUlucHV0O1xuICAgIHRoaXMuc2V0dXBJbnB1dEV2ZW50cyhob3Vyc0lucHV0RWwsIG1pbnV0ZXNJbnB1dEVsLCBzZWNvbmRzSW5wdXRFbCk7XG4gIH07XG5cbiAgdmFyIGhvdXJTdGVwID0gdGltZXBpY2tlckNvbmZpZy5ob3VyU3RlcDtcbiAgaWYgKCRhdHRycy5ob3VyU3RlcCkge1xuICAgIHdhdGNoZXJzLnB1c2goJHNjb3BlLiRwYXJlbnQuJHdhdGNoKCRwYXJzZSgkYXR0cnMuaG91clN0ZXApLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaG91clN0ZXAgPSArdmFsdWU7XG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIG1pbnV0ZVN0ZXAgPSB0aW1lcGlja2VyQ29uZmlnLm1pbnV0ZVN0ZXA7XG4gIGlmICgkYXR0cnMubWludXRlU3RlcCkge1xuICAgIHdhdGNoZXJzLnB1c2goJHNjb3BlLiRwYXJlbnQuJHdhdGNoKCRwYXJzZSgkYXR0cnMubWludXRlU3RlcCksIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBtaW51dGVTdGVwID0gK3ZhbHVlO1xuICAgIH0pKTtcbiAgfVxuXG4gIHZhciBtaW47XG4gIHdhdGNoZXJzLnB1c2goJHNjb3BlLiRwYXJlbnQuJHdhdGNoKCRwYXJzZSgkYXR0cnMubWluKSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgZHQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgbWluID0gaXNOYU4oZHQpID8gdW5kZWZpbmVkIDogZHQ7XG4gIH0pKTtcblxuICB2YXIgbWF4O1xuICB3YXRjaGVycy5wdXNoKCRzY29wZS4kcGFyZW50LiR3YXRjaCgkcGFyc2UoJGF0dHJzLm1heCksIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIGR0ID0gbmV3IERhdGUodmFsdWUpO1xuICAgIG1heCA9IGlzTmFOKGR0KSA/IHVuZGVmaW5lZCA6IGR0O1xuICB9KSk7XG5cbiAgdmFyIGRpc2FibGVkID0gZmFsc2U7XG4gIGlmICgkYXR0cnMubmdEaXNhYmxlZCkge1xuICAgIHdhdGNoZXJzLnB1c2goJHNjb3BlLiRwYXJlbnQuJHdhdGNoKCRwYXJzZSgkYXR0cnMubmdEaXNhYmxlZCksIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICAgIH0pKTtcbiAgfVxuXG4gICRzY29wZS5ub0luY3JlbWVudEhvdXJzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGluY3JlbWVudGVkU2VsZWN0ZWQgPSBhZGRNaW51dGVzKHNlbGVjdGVkLCBob3VyU3RlcCAqIDYwKTtcbiAgICByZXR1cm4gZGlzYWJsZWQgfHwgaW5jcmVtZW50ZWRTZWxlY3RlZCA+IG1heCB8fFxuICAgICAgaW5jcmVtZW50ZWRTZWxlY3RlZCA8IHNlbGVjdGVkICYmIGluY3JlbWVudGVkU2VsZWN0ZWQgPCBtaW47XG4gIH07XG5cbiAgJHNjb3BlLm5vRGVjcmVtZW50SG91cnMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGVjcmVtZW50ZWRTZWxlY3RlZCA9IGFkZE1pbnV0ZXMoc2VsZWN0ZWQsIC1ob3VyU3RlcCAqIDYwKTtcbiAgICByZXR1cm4gZGlzYWJsZWQgfHwgZGVjcmVtZW50ZWRTZWxlY3RlZCA8IG1pbiB8fFxuICAgICAgZGVjcmVtZW50ZWRTZWxlY3RlZCA+IHNlbGVjdGVkICYmIGRlY3JlbWVudGVkU2VsZWN0ZWQgPiBtYXg7XG4gIH07XG5cbiAgJHNjb3BlLm5vSW5jcmVtZW50TWludXRlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbmNyZW1lbnRlZFNlbGVjdGVkID0gYWRkTWludXRlcyhzZWxlY3RlZCwgbWludXRlU3RlcCk7XG4gICAgcmV0dXJuIGRpc2FibGVkIHx8IGluY3JlbWVudGVkU2VsZWN0ZWQgPiBtYXggfHxcbiAgICAgIGluY3JlbWVudGVkU2VsZWN0ZWQgPCBzZWxlY3RlZCAmJiBpbmNyZW1lbnRlZFNlbGVjdGVkIDwgbWluO1xuICB9O1xuXG4gICRzY29wZS5ub0RlY3JlbWVudE1pbnV0ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGVjcmVtZW50ZWRTZWxlY3RlZCA9IGFkZE1pbnV0ZXMoc2VsZWN0ZWQsIC1taW51dGVTdGVwKTtcbiAgICByZXR1cm4gZGlzYWJsZWQgfHwgZGVjcmVtZW50ZWRTZWxlY3RlZCA8IG1pbiB8fFxuICAgICAgZGVjcmVtZW50ZWRTZWxlY3RlZCA+IHNlbGVjdGVkICYmIGRlY3JlbWVudGVkU2VsZWN0ZWQgPiBtYXg7XG4gIH07XG5cbiAgJHNjb3BlLm5vSW5jcmVtZW50U2Vjb25kcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbmNyZW1lbnRlZFNlbGVjdGVkID0gYWRkU2Vjb25kcyhzZWxlY3RlZCwgc2Vjb25kU3RlcCk7XG4gICAgcmV0dXJuIGRpc2FibGVkIHx8IGluY3JlbWVudGVkU2VsZWN0ZWQgPiBtYXggfHxcbiAgICAgIGluY3JlbWVudGVkU2VsZWN0ZWQgPCBzZWxlY3RlZCAmJiBpbmNyZW1lbnRlZFNlbGVjdGVkIDwgbWluO1xuICB9O1xuXG4gICRzY29wZS5ub0RlY3JlbWVudFNlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGVjcmVtZW50ZWRTZWxlY3RlZCA9IGFkZFNlY29uZHMoc2VsZWN0ZWQsIC1zZWNvbmRTdGVwKTtcbiAgICByZXR1cm4gZGlzYWJsZWQgfHwgZGVjcmVtZW50ZWRTZWxlY3RlZCA8IG1pbiB8fFxuICAgICAgZGVjcmVtZW50ZWRTZWxlY3RlZCA+IHNlbGVjdGVkICYmIGRlY3JlbWVudGVkU2VsZWN0ZWQgPiBtYXg7XG4gIH07XG5cbiAgJHNjb3BlLm5vVG9nZ2xlTWVyaWRpYW4gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoc2VsZWN0ZWQuZ2V0SG91cnMoKSA8IDEyKSB7XG4gICAgICByZXR1cm4gZGlzYWJsZWQgfHwgYWRkTWludXRlcyhzZWxlY3RlZCwgMTIgKiA2MCkgPiBtYXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc2FibGVkIHx8IGFkZE1pbnV0ZXMoc2VsZWN0ZWQsIC0xMiAqIDYwKSA8IG1pbjtcbiAgfTtcblxuICB2YXIgc2Vjb25kU3RlcCA9IHRpbWVwaWNrZXJDb25maWcuc2Vjb25kU3RlcDtcbiAgaWYgKCRhdHRycy5zZWNvbmRTdGVwKSB7XG4gICAgd2F0Y2hlcnMucHVzaCgkc2NvcGUuJHBhcmVudC4kd2F0Y2goJHBhcnNlKCRhdHRycy5zZWNvbmRTdGVwKSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHNlY29uZFN0ZXAgPSArdmFsdWU7XG4gICAgfSkpO1xuICB9XG5cbiAgJHNjb3BlLnNob3dTZWNvbmRzID0gdGltZXBpY2tlckNvbmZpZy5zaG93U2Vjb25kcztcbiAgaWYgKCRhdHRycy5zaG93U2Vjb25kcykge1xuICAgIHdhdGNoZXJzLnB1c2goJHNjb3BlLiRwYXJlbnQuJHdhdGNoKCRwYXJzZSgkYXR0cnMuc2hvd1NlY29uZHMpLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgJHNjb3BlLnNob3dTZWNvbmRzID0gISF2YWx1ZTtcbiAgICB9KSk7XG4gIH1cblxuICAvLyAxMkggLyAyNEggbW9kZVxuICAkc2NvcGUuc2hvd01lcmlkaWFuID0gdGltZXBpY2tlckNvbmZpZy5zaG93TWVyaWRpYW47XG4gIGlmICgkYXR0cnMuc2hvd01lcmlkaWFuKSB7XG4gICAgd2F0Y2hlcnMucHVzaCgkc2NvcGUuJHBhcmVudC4kd2F0Y2goJHBhcnNlKCRhdHRycy5zaG93TWVyaWRpYW4pLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgJHNjb3BlLnNob3dNZXJpZGlhbiA9ICEhdmFsdWU7XG5cbiAgICAgIGlmIChuZ01vZGVsQ3RybC4kZXJyb3IudGltZSkge1xuICAgICAgICAvLyBFdmFsdWF0ZSBmcm9tIHRlbXBsYXRlXG4gICAgICAgIHZhciBob3VycyA9IGdldEhvdXJzRnJvbVRlbXBsYXRlKCksIG1pbnV0ZXMgPSBnZXRNaW51dGVzRnJvbVRlbXBsYXRlKCk7XG4gICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChob3VycykgJiYgYW5ndWxhci5pc0RlZmluZWQobWludXRlcykpIHtcbiAgICAgICAgICBzZWxlY3RlZC5zZXRIb3Vycyhob3Vycyk7XG4gICAgICAgICAgcmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVUZW1wbGF0ZSgpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIC8vIEdldCAkc2NvcGUuaG91cnMgaW4gMjRIIG1vZGUgaWYgdmFsaWRcbiAgZnVuY3Rpb24gZ2V0SG91cnNGcm9tVGVtcGxhdGUoKSB7XG4gICAgdmFyIGhvdXJzID0gKyRzY29wZS5ob3VycztcbiAgICB2YXIgdmFsaWQgPSAkc2NvcGUuc2hvd01lcmlkaWFuID8gaG91cnMgPiAwICYmIGhvdXJzIDwgMTMgOlxuICAgICAgaG91cnMgPj0gMCAmJiBob3VycyA8IDI0O1xuICAgIGlmICghdmFsaWQgfHwgJHNjb3BlLmhvdXJzID09PSAnJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoJHNjb3BlLnNob3dNZXJpZGlhbikge1xuICAgICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgICBob3VycyA9IDA7XG4gICAgICB9XG4gICAgICBpZiAoJHNjb3BlLm1lcmlkaWFuID09PSBtZXJpZGlhbnNbMV0pIHtcbiAgICAgICAgaG91cnMgPSBob3VycyArIDEyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaG91cnM7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRNaW51dGVzRnJvbVRlbXBsYXRlKCkge1xuICAgIHZhciBtaW51dGVzID0gKyRzY29wZS5taW51dGVzO1xuICAgIHZhciB2YWxpZCA9IG1pbnV0ZXMgPj0gMCAmJiBtaW51dGVzIDwgNjA7XG4gICAgaWYgKCF2YWxpZCB8fCAkc2NvcGUubWludXRlcyA9PT0gJycpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBtaW51dGVzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2Vjb25kc0Zyb21UZW1wbGF0ZSgpIHtcbiAgICB2YXIgc2Vjb25kcyA9ICskc2NvcGUuc2Vjb25kcztcbiAgICByZXR1cm4gc2Vjb25kcyA+PSAwICYmIHNlY29uZHMgPCA2MCA/IHNlY29uZHMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBwYWQodmFsdWUsIG5vUGFkKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuZ3VsYXIuaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA8IDIgJiYgIW5vUGFkID9cbiAgICAgICcwJyArIHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8vIFJlc3BvbmQgb24gbW91c2V3aGVlbCBzcGluXG4gIHRoaXMuc2V0dXBNb3VzZXdoZWVsRXZlbnRzID0gZnVuY3Rpb24oaG91cnNJbnB1dEVsLCBtaW51dGVzSW5wdXRFbCwgc2Vjb25kc0lucHV0RWwpIHtcbiAgICB2YXIgaXNTY3JvbGxpbmdVcCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgICAgIH1cbiAgICAgIC8vcGljayBjb3JyZWN0IGRlbHRhIHZhcmlhYmxlIGRlcGVuZGluZyBvbiBldmVudFxuICAgICAgdmFyIGRlbHRhID0gZS53aGVlbERlbHRhID8gZS53aGVlbERlbHRhIDogLWUuZGVsdGFZO1xuICAgICAgcmV0dXJuIGUuZGV0YWlsIHx8IGRlbHRhID4gMDtcbiAgICB9O1xuXG4gICAgaG91cnNJbnB1dEVsLm9uKCdtb3VzZXdoZWVsIHdoZWVsJywgZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAkc2NvcGUuJGFwcGx5KGlzU2Nyb2xsaW5nVXAoZSkgPyAkc2NvcGUuaW5jcmVtZW50SG91cnMoKSA6ICRzY29wZS5kZWNyZW1lbnRIb3VycygpKTtcbiAgICAgIH1cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcblxuICAgIG1pbnV0ZXNJbnB1dEVsLm9uKCdtb3VzZXdoZWVsIHdoZWVsJywgZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAkc2NvcGUuJGFwcGx5KGlzU2Nyb2xsaW5nVXAoZSkgPyAkc2NvcGUuaW5jcmVtZW50TWludXRlcygpIDogJHNjb3BlLmRlY3JlbWVudE1pbnV0ZXMoKSk7XG4gICAgICB9XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7XG5cbiAgICAgc2Vjb25kc0lucHV0RWwub24oJ21vdXNld2hlZWwgd2hlZWwnLCBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgICRzY29wZS4kYXBwbHkoaXNTY3JvbGxpbmdVcChlKSA/ICRzY29wZS5pbmNyZW1lbnRTZWNvbmRzKCkgOiAkc2NvcGUuZGVjcmVtZW50U2Vjb25kcygpKTtcbiAgICAgIH1cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBSZXNwb25kIG9uIHVwL2Rvd24gYXJyb3drZXlzXG4gIHRoaXMuc2V0dXBBcnJvd2tleUV2ZW50cyA9IGZ1bmN0aW9uKGhvdXJzSW5wdXRFbCwgbWludXRlc0lucHV0RWwsIHNlY29uZHNJbnB1dEVsKSB7XG4gICAgaG91cnNJbnB1dEVsLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMzgpIHsgLy8gdXBcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgJHNjb3BlLmluY3JlbWVudEhvdXJzKCk7XG4gICAgICAgICAgJHNjb3BlLiRhcHBseSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT09IDQwKSB7IC8vIGRvd25cbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgJHNjb3BlLmRlY3JlbWVudEhvdXJzKCk7XG4gICAgICAgICAgJHNjb3BlLiRhcHBseSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBtaW51dGVzSW5wdXRFbC5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDM4KSB7IC8vIHVwXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICRzY29wZS5pbmNyZW1lbnRNaW51dGVzKCk7XG4gICAgICAgICAgJHNjb3BlLiRhcHBseSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT09IDQwKSB7IC8vIGRvd25cbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgJHNjb3BlLmRlY3JlbWVudE1pbnV0ZXMoKTtcbiAgICAgICAgICAkc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNlY29uZHNJbnB1dEVsLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMzgpIHsgLy8gdXBcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgJHNjb3BlLmluY3JlbWVudFNlY29uZHMoKTtcbiAgICAgICAgICAkc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PT0gNDApIHsgLy8gZG93blxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAkc2NvcGUuZGVjcmVtZW50U2Vjb25kcygpO1xuICAgICAgICAgICRzY29wZS4kYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHRoaXMuc2V0dXBJbnB1dEV2ZW50cyA9IGZ1bmN0aW9uKGhvdXJzSW5wdXRFbCwgbWludXRlc0lucHV0RWwsIHNlY29uZHNJbnB1dEVsKSB7XG4gICAgaWYgKCRzY29wZS5yZWFkb25seUlucHV0KSB7XG4gICAgICAkc2NvcGUudXBkYXRlSG91cnMgPSBhbmd1bGFyLm5vb3A7XG4gICAgICAkc2NvcGUudXBkYXRlTWludXRlcyA9IGFuZ3VsYXIubm9vcDtcbiAgICAgICRzY29wZS51cGRhdGVTZWNvbmRzID0gYW5ndWxhci5ub29wO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbnZhbGlkYXRlID0gZnVuY3Rpb24oaW52YWxpZEhvdXJzLCBpbnZhbGlkTWludXRlcywgaW52YWxpZFNlY29uZHMpIHtcbiAgICAgIG5nTW9kZWxDdHJsLiRzZXRWaWV3VmFsdWUobnVsbCk7XG4gICAgICBuZ01vZGVsQ3RybC4kc2V0VmFsaWRpdHkoJ3RpbWUnLCBmYWxzZSk7XG4gICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoaW52YWxpZEhvdXJzKSkge1xuICAgICAgICAkc2NvcGUuaW52YWxpZEhvdXJzID0gaW52YWxpZEhvdXJzO1xuICAgICAgICBpZiAoaG91cnNNb2RlbEN0cmwpIHtcbiAgICAgICAgICBob3Vyc01vZGVsQ3RybC4kc2V0VmFsaWRpdHkoJ2hvdXJzJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChpbnZhbGlkTWludXRlcykpIHtcbiAgICAgICAgJHNjb3BlLmludmFsaWRNaW51dGVzID0gaW52YWxpZE1pbnV0ZXM7XG4gICAgICAgIGlmIChtaW51dGVzTW9kZWxDdHJsKSB7XG4gICAgICAgICAgbWludXRlc01vZGVsQ3RybC4kc2V0VmFsaWRpdHkoJ21pbnV0ZXMnLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGludmFsaWRTZWNvbmRzKSkge1xuICAgICAgICAkc2NvcGUuaW52YWxpZFNlY29uZHMgPSBpbnZhbGlkU2Vjb25kcztcbiAgICAgICAgaWYgKHNlY29uZHNNb2RlbEN0cmwpIHtcbiAgICAgICAgICBzZWNvbmRzTW9kZWxDdHJsLiRzZXRWYWxpZGl0eSgnc2Vjb25kcycsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAkc2NvcGUudXBkYXRlSG91cnMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBob3VycyA9IGdldEhvdXJzRnJvbVRlbXBsYXRlKCksXG4gICAgICAgIG1pbnV0ZXMgPSBnZXRNaW51dGVzRnJvbVRlbXBsYXRlKCk7XG5cbiAgICAgIG5nTW9kZWxDdHJsLiRzZXREaXJ0eSgpO1xuXG4gICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoaG91cnMpICYmIGFuZ3VsYXIuaXNEZWZpbmVkKG1pbnV0ZXMpKSB7XG4gICAgICAgIHNlbGVjdGVkLnNldEhvdXJzKGhvdXJzKTtcbiAgICAgICAgc2VsZWN0ZWQuc2V0TWludXRlcyhtaW51dGVzKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkIDwgbWluIHx8IHNlbGVjdGVkID4gbWF4KSB7XG4gICAgICAgICAgaW52YWxpZGF0ZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKCdoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludmFsaWRhdGUodHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGhvdXJzSW5wdXRFbC5vbignYmx1cicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIG5nTW9kZWxDdHJsLiRzZXRUb3VjaGVkKCk7XG4gICAgICBpZiAobW9kZWxJc0VtcHR5KCkpIHtcbiAgICAgICAgbWFrZVZhbGlkKCk7XG4gICAgICB9IGVsc2UgaWYgKCRzY29wZS5ob3VycyA9PT0gbnVsbCB8fCAkc2NvcGUuaG91cnMgPT09ICcnKSB7XG4gICAgICAgIGludmFsaWRhdGUodHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCEkc2NvcGUuaW52YWxpZEhvdXJzICYmICRzY29wZS5ob3VycyA8IDEwKSB7XG4gICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJHNjb3BlLmhvdXJzID0gcGFkKCRzY29wZS5ob3VycywgIXBhZEhvdXJzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkc2NvcGUudXBkYXRlTWludXRlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG1pbnV0ZXMgPSBnZXRNaW51dGVzRnJvbVRlbXBsYXRlKCksXG4gICAgICAgIGhvdXJzID0gZ2V0SG91cnNGcm9tVGVtcGxhdGUoKTtcblxuICAgICAgbmdNb2RlbEN0cmwuJHNldERpcnR5KCk7XG5cbiAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChtaW51dGVzKSAmJiBhbmd1bGFyLmlzRGVmaW5lZChob3VycykpIHtcbiAgICAgICAgc2VsZWN0ZWQuc2V0SG91cnMoaG91cnMpO1xuICAgICAgICBzZWxlY3RlZC5zZXRNaW51dGVzKG1pbnV0ZXMpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQgPCBtaW4gfHwgc2VsZWN0ZWQgPiBtYXgpIHtcbiAgICAgICAgICBpbnZhbGlkYXRlKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmcmVzaCgnbScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnZhbGlkYXRlKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIG1pbnV0ZXNJbnB1dEVsLm9uKCdibHVyJywgZnVuY3Rpb24oZSkge1xuICAgICAgbmdNb2RlbEN0cmwuJHNldFRvdWNoZWQoKTtcbiAgICAgIGlmIChtb2RlbElzRW1wdHkoKSkge1xuICAgICAgICBtYWtlVmFsaWQoKTtcbiAgICAgIH0gZWxzZSBpZiAoJHNjb3BlLm1pbnV0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgaW52YWxpZGF0ZSh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmICghJHNjb3BlLmludmFsaWRNaW51dGVzICYmICRzY29wZS5taW51dGVzIDwgMTApIHtcbiAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAkc2NvcGUubWludXRlcyA9IHBhZCgkc2NvcGUubWludXRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJHNjb3BlLnVwZGF0ZVNlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzZWNvbmRzID0gZ2V0U2Vjb25kc0Zyb21UZW1wbGF0ZSgpO1xuXG4gICAgICBuZ01vZGVsQ3RybC4kc2V0RGlydHkoKTtcblxuICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHNlY29uZHMpKSB7XG4gICAgICAgIHNlbGVjdGVkLnNldFNlY29uZHMoc2Vjb25kcyk7XG4gICAgICAgIHJlZnJlc2goJ3MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludmFsaWRhdGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZWNvbmRzSW5wdXRFbC5vbignYmx1cicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmIChtb2RlbElzRW1wdHkoKSkge1xuICAgICAgICBtYWtlVmFsaWQoKTtcbiAgICAgIH0gZWxzZSBpZiAoISRzY29wZS5pbnZhbGlkU2Vjb25kcyAmJiAkc2NvcGUuc2Vjb25kcyA8IDEwKSB7XG4gICAgICAgICRzY29wZS4kYXBwbHkoIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRzY29wZS5zZWNvbmRzID0gcGFkKCRzY29wZS5zZWNvbmRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfTtcblxuICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXRlID0gbmdNb2RlbEN0cmwuJHZpZXdWYWx1ZTtcblxuICAgIGlmIChpc05hTihkYXRlKSkge1xuICAgICAgbmdNb2RlbEN0cmwuJHNldFZhbGlkaXR5KCd0aW1lJywgZmFsc2UpO1xuICAgICAgJGxvZy5lcnJvcignVGltZXBpY2tlciBkaXJlY3RpdmU6IFwibmctbW9kZWxcIiB2YWx1ZSBtdXN0IGJlIGEgRGF0ZSBvYmplY3QsIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAwMS4wMS4xOTcwIG9yIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBSRkMyODIyIG9yIElTTyA4NjAxIGRhdGUuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgIHNlbGVjdGVkID0gZGF0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGVkIDwgbWluIHx8IHNlbGVjdGVkID4gbWF4KSB7XG4gICAgICAgIG5nTW9kZWxDdHJsLiRzZXRWYWxpZGl0eSgndGltZScsIGZhbHNlKTtcbiAgICAgICAgJHNjb3BlLmludmFsaWRIb3VycyA9IHRydWU7XG4gICAgICAgICRzY29wZS5pbnZhbGlkTWludXRlcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYWtlVmFsaWQoKTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZVRlbXBsYXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENhbGwgaW50ZXJuYWxseSB3aGVuIHdlIGtub3cgdGhhdCBtb2RlbCBpcyB2YWxpZC5cbiAgZnVuY3Rpb24gcmVmcmVzaChrZXlib2FyZENoYW5nZSkge1xuICAgIG1ha2VWYWxpZCgpO1xuICAgIG5nTW9kZWxDdHJsLiRzZXRWaWV3VmFsdWUobmV3IERhdGUoc2VsZWN0ZWQpKTtcbiAgICB1cGRhdGVUZW1wbGF0ZShrZXlib2FyZENoYW5nZSk7XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlVmFsaWQoKSB7XG4gICAgaWYgKGhvdXJzTW9kZWxDdHJsKSB7XG4gICAgICBob3Vyc01vZGVsQ3RybC4kc2V0VmFsaWRpdHkoJ2hvdXJzJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXNNb2RlbEN0cmwpIHtcbiAgICAgIG1pbnV0ZXNNb2RlbEN0cmwuJHNldFZhbGlkaXR5KCdtaW51dGVzJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHNNb2RlbEN0cmwpIHtcbiAgICAgIHNlY29uZHNNb2RlbEN0cmwuJHNldFZhbGlkaXR5KCdzZWNvbmRzJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdNb2RlbEN0cmwuJHNldFZhbGlkaXR5KCd0aW1lJywgdHJ1ZSk7XG4gICAgJHNjb3BlLmludmFsaWRIb3VycyA9IGZhbHNlO1xuICAgICRzY29wZS5pbnZhbGlkTWludXRlcyA9IGZhbHNlO1xuICAgICRzY29wZS5pbnZhbGlkU2Vjb25kcyA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGVtcGxhdGUoa2V5Ym9hcmRDaGFuZ2UpIHtcbiAgICBpZiAoIW5nTW9kZWxDdHJsLiRtb2RlbFZhbHVlKSB7XG4gICAgICAkc2NvcGUuaG91cnMgPSBudWxsO1xuICAgICAgJHNjb3BlLm1pbnV0ZXMgPSBudWxsO1xuICAgICAgJHNjb3BlLnNlY29uZHMgPSBudWxsO1xuICAgICAgJHNjb3BlLm1lcmlkaWFuID0gbWVyaWRpYW5zWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaG91cnMgPSBzZWxlY3RlZC5nZXRIb3VycygpLFxuICAgICAgICBtaW51dGVzID0gc2VsZWN0ZWQuZ2V0TWludXRlcygpLFxuICAgICAgICBzZWNvbmRzID0gc2VsZWN0ZWQuZ2V0U2Vjb25kcygpO1xuXG4gICAgICBpZiAoJHNjb3BlLnNob3dNZXJpZGlhbikge1xuICAgICAgICBob3VycyA9IGhvdXJzID09PSAwIHx8IGhvdXJzID09PSAxMiA/IDEyIDogaG91cnMgJSAxMjsgLy8gQ29udmVydCAyNCB0byAxMiBob3VyIHN5c3RlbVxuICAgICAgfVxuXG4gICAgICAkc2NvcGUuaG91cnMgPSBrZXlib2FyZENoYW5nZSA9PT0gJ2gnID8gaG91cnMgOiBwYWQoaG91cnMsICFwYWRIb3Vycyk7XG4gICAgICBpZiAoa2V5Ym9hcmRDaGFuZ2UgIT09ICdtJykge1xuICAgICAgICAkc2NvcGUubWludXRlcyA9IHBhZChtaW51dGVzKTtcbiAgICAgIH1cbiAgICAgICRzY29wZS5tZXJpZGlhbiA9IHNlbGVjdGVkLmdldEhvdXJzKCkgPCAxMiA/IG1lcmlkaWFuc1swXSA6IG1lcmlkaWFuc1sxXTtcblxuICAgICAgaWYgKGtleWJvYXJkQ2hhbmdlICE9PSAncycpIHtcbiAgICAgICAgJHNjb3BlLnNlY29uZHMgPSBwYWQoc2Vjb25kcyk7XG4gICAgICB9XG4gICAgICAkc2NvcGUubWVyaWRpYW4gPSBzZWxlY3RlZC5nZXRIb3VycygpIDwgMTIgPyBtZXJpZGlhbnNbMF0gOiBtZXJpZGlhbnNbMV07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkU2Vjb25kc1RvU2VsZWN0ZWQoc2Vjb25kcykge1xuICAgIHNlbGVjdGVkID0gYWRkU2Vjb25kcyhzZWxlY3RlZCwgc2Vjb25kcyk7XG4gICAgcmVmcmVzaCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkTWludXRlcyhzZWxlY3RlZCwgbWludXRlcykge1xuICAgIHJldHVybiBhZGRTZWNvbmRzKHNlbGVjdGVkLCBtaW51dGVzKjYwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFNlY29uZHMoZGF0ZSwgc2Vjb25kcykge1xuICAgIHZhciBkdCA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgc2Vjb25kcyAqIDEwMDApO1xuICAgIHZhciBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgbmV3RGF0ZS5zZXRIb3VycyhkdC5nZXRIb3VycygpLCBkdC5nZXRNaW51dGVzKCksIGR0LmdldFNlY29uZHMoKSk7XG4gICAgcmV0dXJuIG5ld0RhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBtb2RlbElzRW1wdHkoKSB7XG4gICAgcmV0dXJuICgkc2NvcGUuaG91cnMgPT09IG51bGwgfHwgJHNjb3BlLmhvdXJzID09PSAnJykgJiZcbiAgICAgICgkc2NvcGUubWludXRlcyA9PT0gbnVsbCB8fCAkc2NvcGUubWludXRlcyA9PT0gJycpICYmXG4gICAgICAoISRzY29wZS5zaG93U2Vjb25kcyB8fCAkc2NvcGUuc2hvd1NlY29uZHMgJiYgKCRzY29wZS5zZWNvbmRzID09PSBudWxsIHx8ICRzY29wZS5zZWNvbmRzID09PSAnJykpO1xuICB9XG5cbiAgJHNjb3BlLnNob3dTcGlubmVycyA9IGFuZ3VsYXIuaXNEZWZpbmVkKCRhdHRycy5zaG93U3Bpbm5lcnMpID9cbiAgICAkc2NvcGUuJHBhcmVudC4kZXZhbCgkYXR0cnMuc2hvd1NwaW5uZXJzKSA6IHRpbWVwaWNrZXJDb25maWcuc2hvd1NwaW5uZXJzO1xuXG4gICRzY29wZS5pbmNyZW1lbnRIb3VycyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghJHNjb3BlLm5vSW5jcmVtZW50SG91cnMoKSkge1xuICAgICAgYWRkU2Vjb25kc1RvU2VsZWN0ZWQoaG91clN0ZXAgKiA2MCAqIDYwKTtcbiAgICB9XG4gIH07XG5cbiAgJHNjb3BlLmRlY3JlbWVudEhvdXJzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEkc2NvcGUubm9EZWNyZW1lbnRIb3VycygpKSB7XG4gICAgICBhZGRTZWNvbmRzVG9TZWxlY3RlZCgtaG91clN0ZXAgKiA2MCAqIDYwKTtcbiAgICB9XG4gIH07XG5cbiAgJHNjb3BlLmluY3JlbWVudE1pbnV0ZXMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoISRzY29wZS5ub0luY3JlbWVudE1pbnV0ZXMoKSkge1xuICAgICAgYWRkU2Vjb25kc1RvU2VsZWN0ZWQobWludXRlU3RlcCAqIDYwKTtcbiAgICB9XG4gIH07XG5cbiAgJHNjb3BlLmRlY3JlbWVudE1pbnV0ZXMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoISRzY29wZS5ub0RlY3JlbWVudE1pbnV0ZXMoKSkge1xuICAgICAgYWRkU2Vjb25kc1RvU2VsZWN0ZWQoLW1pbnV0ZVN0ZXAgKiA2MCk7XG4gICAgfVxuICB9O1xuXG4gICRzY29wZS5pbmNyZW1lbnRTZWNvbmRzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEkc2NvcGUubm9JbmNyZW1lbnRTZWNvbmRzKCkpIHtcbiAgICAgIGFkZFNlY29uZHNUb1NlbGVjdGVkKHNlY29uZFN0ZXApO1xuICAgIH1cbiAgfTtcblxuICAkc2NvcGUuZGVjcmVtZW50U2Vjb25kcyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghJHNjb3BlLm5vRGVjcmVtZW50U2Vjb25kcygpKSB7XG4gICAgICBhZGRTZWNvbmRzVG9TZWxlY3RlZCgtc2Vjb25kU3RlcCk7XG4gICAgfVxuICB9O1xuXG4gICRzY29wZS50b2dnbGVNZXJpZGlhbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtaW51dGVzID0gZ2V0TWludXRlc0Zyb21UZW1wbGF0ZSgpLFxuICAgICAgICBob3VycyA9IGdldEhvdXJzRnJvbVRlbXBsYXRlKCk7XG5cbiAgICBpZiAoISRzY29wZS5ub1RvZ2dsZU1lcmlkaWFuKCkpIHtcbiAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChtaW51dGVzKSAmJiBhbmd1bGFyLmlzRGVmaW5lZChob3VycykpIHtcbiAgICAgICAgYWRkU2Vjb25kc1RvU2VsZWN0ZWQoMTIgKiA2MCAqIChzZWxlY3RlZC5nZXRIb3VycygpIDwgMTIgPyA2MCA6IC02MCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHNjb3BlLm1lcmlkaWFuID0gJHNjb3BlLm1lcmlkaWFuID09PSBtZXJpZGlhbnNbMF0gPyBtZXJpZGlhbnNbMV0gOiBtZXJpZGlhbnNbMF07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gICRzY29wZS5ibHVyID0gZnVuY3Rpb24oKSB7XG4gICAgbmdNb2RlbEN0cmwuJHNldFRvdWNoZWQoKTtcbiAgfTtcblxuICAkc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgIHdoaWxlICh3YXRjaGVycy5sZW5ndGgpIHtcbiAgICAgIHdhdGNoZXJzLnNoaWZ0KCkoKTtcbiAgICB9XG4gIH0pO1xufV0pXG5cbi5kaXJlY3RpdmUoJ3VpYlRpbWVwaWNrZXInLCBbJ3VpYlRpbWVwaWNrZXJDb25maWcnLCBmdW5jdGlvbih1aWJUaW1lcGlja2VyQ29uZmlnKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWlyZTogWyd1aWJUaW1lcGlja2VyJywgJz9ebmdNb2RlbCddLFxuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgY29udHJvbGxlcjogJ1VpYlRpbWVwaWNrZXJDb250cm9sbGVyJyxcbiAgICBjb250cm9sbGVyQXM6ICd0aW1lcGlja2VyJyxcbiAgICBzY29wZToge30sXG4gICAgdGVtcGxhdGVVcmw6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICByZXR1cm4gYXR0cnMudGVtcGxhdGVVcmwgfHwgdWliVGltZXBpY2tlckNvbmZpZy50ZW1wbGF0ZVVybDtcbiAgICB9LFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMpIHtcbiAgICAgIHZhciB0aW1lcGlja2VyQ3RybCA9IGN0cmxzWzBdLCBuZ01vZGVsQ3RybCA9IGN0cmxzWzFdO1xuXG4gICAgICBpZiAobmdNb2RlbEN0cmwpIHtcbiAgICAgICAgdGltZXBpY2tlckN0cmwuaW5pdChuZ01vZGVsQ3RybCwgZWxlbWVudC5maW5kKCdpbnB1dCcpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAudHlwZWFoZWFkJywgWyd1aS5ib290c3RyYXAuZGVib3VuY2UnLCAndWkuYm9vdHN0cmFwLnBvc2l0aW9uJ10pXG5cbi8qKlxuICogQSBoZWxwZXIgc2VydmljZSB0aGF0IGNhbiBwYXJzZSB0eXBlYWhlYWQncyBzeW50YXggKHN0cmluZyBwcm92aWRlZCBieSB1c2VycylcbiAqIEV4dHJhY3RlZCB0byBhIHNlcGFyYXRlIHNlcnZpY2UgZm9yIGVhc2Ugb2YgdW5pdCB0ZXN0aW5nXG4gKi9cbiAgLmZhY3RvcnkoJ3VpYlR5cGVhaGVhZFBhcnNlcicsIFsnJHBhcnNlJywgZnVuY3Rpb24oJHBhcnNlKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDAwMDAxMTExMTExMTAwMDAwMDAwMDAwMDAyMjIyMjIyMjAwMDAwMDAwMDAwMDAwMDAzMzMzMzMzMzMzMzMzMzMwMDAwMDAwMDAwMDQ0NDQ0NDQ0MDAwXG4gICAgdmFyIFRZUEVBSEVBRF9SRUdFWFAgPSAvXlxccyooW1xcc1xcU10rPykoPzpcXHMrYXNcXHMrKFtcXHNcXFNdKz8pKT9cXHMrZm9yXFxzKyg/OihbXFwkXFx3XVtcXCRcXHdcXGRdKikpXFxzK2luXFxzKyhbXFxzXFxTXSs/KSQvO1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZTogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gaW5wdXQubWF0Y2goVFlQRUFIRUFEX1JFR0VYUCk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnRXhwZWN0ZWQgdHlwZWFoZWFkIHNwZWNpZmljYXRpb24gaW4gZm9ybSBvZiBcIl9tb2RlbFZhbHVlXyAoYXMgX2xhYmVsXyk/IGZvciBfaXRlbV8gaW4gX2NvbGxlY3Rpb25fXCInICtcbiAgICAgICAgICAgICAgJyBidXQgZ290IFwiJyArIGlucHV0ICsgJ1wiLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpdGVtTmFtZTogbWF0Y2hbM10sXG4gICAgICAgICAgc291cmNlOiAkcGFyc2UobWF0Y2hbNF0pLFxuICAgICAgICAgIHZpZXdNYXBwZXI6ICRwYXJzZShtYXRjaFsyXSB8fCBtYXRjaFsxXSksXG4gICAgICAgICAgbW9kZWxNYXBwZXI6ICRwYXJzZShtYXRjaFsxXSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSlcblxuICAuY29udHJvbGxlcignVWliVHlwZWFoZWFkQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRlbGVtZW50JywgJyRhdHRycycsICckY29tcGlsZScsICckcGFyc2UnLCAnJHEnLCAnJHRpbWVvdXQnLCAnJGRvY3VtZW50JywgJyR3aW5kb3cnLCAnJHJvb3RTY29wZScsICckJGRlYm91bmNlJywgJyR1aWJQb3NpdGlvbicsICd1aWJUeXBlYWhlYWRQYXJzZXInLFxuICAgIGZ1bmN0aW9uKG9yaWdpbmFsU2NvcGUsIGVsZW1lbnQsIGF0dHJzLCAkY29tcGlsZSwgJHBhcnNlLCAkcSwgJHRpbWVvdXQsICRkb2N1bWVudCwgJHdpbmRvdywgJHJvb3RTY29wZSwgJCRkZWJvdW5jZSwgJHBvc2l0aW9uLCB0eXBlYWhlYWRQYXJzZXIpIHtcbiAgICB2YXIgSE9UX0tFWVMgPSBbOSwgMTMsIDI3LCAzOCwgNDBdO1xuICAgIHZhciBldmVudERlYm91bmNlVGltZSA9IDIwMDtcbiAgICB2YXIgbW9kZWxDdHJsLCBuZ01vZGVsT3B0aW9ucztcbiAgICAvL1NVUFBPUlRFRCBBVFRSSUJVVEVTIChPUFRJT05TKVxuXG4gICAgLy9taW5pbWFsIG5vIG9mIGNoYXJhY3RlcnMgdGhhdCBuZWVkcyB0byBiZSBlbnRlcmVkIGJlZm9yZSB0eXBlYWhlYWQga2lja3MtaW5cbiAgICB2YXIgbWluTGVuZ3RoID0gb3JpZ2luYWxTY29wZS4kZXZhbChhdHRycy50eXBlYWhlYWRNaW5MZW5ndGgpO1xuICAgIGlmICghbWluTGVuZ3RoICYmIG1pbkxlbmd0aCAhPT0gMCkge1xuICAgICAgbWluTGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICBvcmlnaW5hbFNjb3BlLiR3YXRjaChhdHRycy50eXBlYWhlYWRNaW5MZW5ndGgsIGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgbWluTGVuZ3RoID0gIW5ld1ZhbCAmJiBuZXdWYWwgIT09IDAgPyAxIDogbmV3VmFsO1xuICAgIH0pO1xuXG4gICAgLy9taW5pbWFsIHdhaXQgdGltZSBhZnRlciBsYXN0IGNoYXJhY3RlciB0eXBlZCBiZWZvcmUgdHlwZWFoZWFkIGtpY2tzLWluXG4gICAgdmFyIHdhaXRUaW1lID0gb3JpZ2luYWxTY29wZS4kZXZhbChhdHRycy50eXBlYWhlYWRXYWl0TXMpIHx8IDA7XG5cbiAgICAvL3Nob3VsZCBpdCByZXN0cmljdCBtb2RlbCB2YWx1ZXMgdG8gdGhlIG9uZXMgc2VsZWN0ZWQgZnJvbSB0aGUgcG9wdXAgb25seT9cbiAgICB2YXIgaXNFZGl0YWJsZSA9IG9yaWdpbmFsU2NvcGUuJGV2YWwoYXR0cnMudHlwZWFoZWFkRWRpdGFibGUpICE9PSBmYWxzZTtcbiAgICBvcmlnaW5hbFNjb3BlLiR3YXRjaChhdHRycy50eXBlYWhlYWRFZGl0YWJsZSwgZnVuY3Rpb24gKG5ld1ZhbCkge1xuICAgICAgaXNFZGl0YWJsZSA9IG5ld1ZhbCAhPT0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICAvL2JpbmRpbmcgdG8gYSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBpZiBtYXRjaGVzIGFyZSBiZWluZyByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHlcbiAgICB2YXIgaXNMb2FkaW5nU2V0dGVyID0gJHBhcnNlKGF0dHJzLnR5cGVhaGVhZExvYWRpbmcpLmFzc2lnbiB8fCBhbmd1bGFyLm5vb3A7XG5cbiAgICAvL2EgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGFuIGV2ZW50IHNob3VsZCBjYXVzZSBzZWxlY3Rpb25cbiAgICB2YXIgaXNTZWxlY3RFdmVudCA9IGF0dHJzLnR5cGVhaGVhZFNob3VsZFNlbGVjdCA/ICRwYXJzZShhdHRycy50eXBlYWhlYWRTaG91bGRTZWxlY3QpIDogZnVuY3Rpb24oc2NvcGUsIHZhbHMpIHtcbiAgICAgIHZhciBldnQgPSB2YWxzLiRldmVudDtcbiAgICAgIHJldHVybiBldnQud2hpY2ggPT09IDEzIHx8IGV2dC53aGljaCA9PT0gOTtcbiAgICB9O1xuXG4gICAgLy9hIGNhbGxiYWNrIGV4ZWN1dGVkIHdoZW4gYSBtYXRjaCBpcyBzZWxlY3RlZFxuICAgIHZhciBvblNlbGVjdENhbGxiYWNrID0gJHBhcnNlKGF0dHJzLnR5cGVhaGVhZE9uU2VsZWN0KTtcblxuICAgIC8vc2hvdWxkIGl0IHNlbGVjdCBoaWdobGlnaHRlZCBwb3B1cCB2YWx1ZSB3aGVuIGxvc2luZyBmb2N1cz9cbiAgICB2YXIgaXNTZWxlY3RPbkJsdXIgPSBhbmd1bGFyLmlzRGVmaW5lZChhdHRycy50eXBlYWhlYWRTZWxlY3RPbkJsdXIpID8gb3JpZ2luYWxTY29wZS4kZXZhbChhdHRycy50eXBlYWhlYWRTZWxlY3RPbkJsdXIpIDogZmFsc2U7XG5cbiAgICAvL2JpbmRpbmcgdG8gYSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBpZiB0aGVyZSB3ZXJlIG5vIHJlc3VsdHMgYWZ0ZXIgdGhlIHF1ZXJ5IGlzIGNvbXBsZXRlZFxuICAgIHZhciBpc05vUmVzdWx0c1NldHRlciA9ICRwYXJzZShhdHRycy50eXBlYWhlYWROb1Jlc3VsdHMpLmFzc2lnbiB8fCBhbmd1bGFyLm5vb3A7XG5cbiAgICB2YXIgaW5wdXRGb3JtYXR0ZXIgPSBhdHRycy50eXBlYWhlYWRJbnB1dEZvcm1hdHRlciA/ICRwYXJzZShhdHRycy50eXBlYWhlYWRJbnB1dEZvcm1hdHRlcikgOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgYXBwZW5kVG9Cb2R5ID0gYXR0cnMudHlwZWFoZWFkQXBwZW5kVG9Cb2R5ID8gb3JpZ2luYWxTY29wZS4kZXZhbChhdHRycy50eXBlYWhlYWRBcHBlbmRUb0JvZHkpIDogZmFsc2U7XG5cbiAgICB2YXIgYXBwZW5kVG8gPSBhdHRycy50eXBlYWhlYWRBcHBlbmRUbyA/XG4gICAgICBvcmlnaW5hbFNjb3BlLiRldmFsKGF0dHJzLnR5cGVhaGVhZEFwcGVuZFRvKSA6IG51bGw7XG5cbiAgICB2YXIgZm9jdXNGaXJzdCA9IG9yaWdpbmFsU2NvcGUuJGV2YWwoYXR0cnMudHlwZWFoZWFkRm9jdXNGaXJzdCkgIT09IGZhbHNlO1xuXG4gICAgLy9JZiBpbnB1dCBtYXRjaGVzIGFuIGl0ZW0gb2YgdGhlIGxpc3QgZXhhY3RseSwgc2VsZWN0IGl0IGF1dG9tYXRpY2FsbHlcbiAgICB2YXIgc2VsZWN0T25FeGFjdCA9IGF0dHJzLnR5cGVhaGVhZFNlbGVjdE9uRXhhY3QgPyBvcmlnaW5hbFNjb3BlLiRldmFsKGF0dHJzLnR5cGVhaGVhZFNlbGVjdE9uRXhhY3QpIDogZmFsc2U7XG5cbiAgICAvL2JpbmRpbmcgdG8gYSB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyBpZiBkcm9wZG93biBpcyBvcGVuXG4gICAgdmFyIGlzT3BlblNldHRlciA9ICRwYXJzZShhdHRycy50eXBlYWhlYWRJc09wZW4pLmFzc2lnbiB8fCBhbmd1bGFyLm5vb3A7XG5cbiAgICB2YXIgc2hvd0hpbnQgPSBvcmlnaW5hbFNjb3BlLiRldmFsKGF0dHJzLnR5cGVhaGVhZFNob3dIaW50KSB8fCBmYWxzZTtcblxuICAgIC8vSU5URVJOQUwgVkFSSUFCTEVTXG5cbiAgICAvL21vZGVsIHNldHRlciBleGVjdXRlZCB1cG9uIG1hdGNoIHNlbGVjdGlvblxuICAgIHZhciBwYXJzZWRNb2RlbCA9ICRwYXJzZShhdHRycy5uZ01vZGVsKTtcbiAgICB2YXIgaW52b2tlTW9kZWxTZXR0ZXIgPSAkcGFyc2UoYXR0cnMubmdNb2RlbCArICcoJCQkcCknKTtcbiAgICB2YXIgJHNldE1vZGVsVmFsdWUgPSBmdW5jdGlvbihzY29wZSwgbmV3VmFsdWUpIHtcbiAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ocGFyc2VkTW9kZWwob3JpZ2luYWxTY29wZSkpICYmXG4gICAgICAgIG5nTW9kZWxPcHRpb25zLmdldE9wdGlvbignZ2V0dGVyU2V0dGVyJykpIHtcbiAgICAgICAgcmV0dXJuIGludm9rZU1vZGVsU2V0dGVyKHNjb3BlLCB7JCQkcDogbmV3VmFsdWV9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZE1vZGVsLmFzc2lnbihzY29wZSwgbmV3VmFsdWUpO1xuICAgIH07XG5cbiAgICAvL2V4cHJlc3Npb25zIHVzZWQgYnkgdHlwZWFoZWFkXG4gICAgdmFyIHBhcnNlclJlc3VsdCA9IHR5cGVhaGVhZFBhcnNlci5wYXJzZShhdHRycy51aWJUeXBlYWhlYWQpO1xuXG4gICAgdmFyIGhhc0ZvY3VzO1xuXG4gICAgLy9Vc2VkIHRvIGF2b2lkIGJ1ZyBpbiBpT1Mgd2VidmlldyB3aGVyZSBpT1Mga2V5Ym9hcmQgZG9lcyBub3QgZmlyZVxuICAgIC8vbW91c2Vkb3duICYgbW91c2V1cCBldmVudHNcbiAgICAvL0lzc3VlICMzNjk5XG4gICAgdmFyIHNlbGVjdGVkO1xuXG4gICAgLy9jcmVhdGUgYSBjaGlsZCBzY29wZSBmb3IgdGhlIHR5cGVhaGVhZCBkaXJlY3RpdmUgc28gd2UgYXJlIG5vdCBwb2xsdXRpbmcgb3JpZ2luYWwgc2NvcGVcbiAgICAvL3dpdGggdHlwZWFoZWFkLXNwZWNpZmljIGRhdGEgKG1hdGNoZXMsIHF1ZXJ5IGV0Yy4pXG4gICAgdmFyIHNjb3BlID0gb3JpZ2luYWxTY29wZS4kbmV3KCk7XG4gICAgdmFyIG9mZkRlc3Ryb3kgPSBvcmlnaW5hbFNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICAgIHNjb3BlLiRkZXN0cm95KCk7XG4gICAgfSk7XG4gICAgc2NvcGUuJG9uKCckZGVzdHJveScsIG9mZkRlc3Ryb3kpO1xuXG4gICAgLy8gV0FJLUFSSUFcbiAgICB2YXIgcG9wdXBJZCA9ICd0eXBlYWhlYWQtJyArIHNjb3BlLiRpZCArICctJyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwKTtcbiAgICBlbGVtZW50LmF0dHIoe1xuICAgICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogJ2xpc3QnLFxuICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBmYWxzZSxcbiAgICAgICdhcmlhLW93bnMnOiBwb3B1cElkXG4gICAgfSk7XG5cbiAgICB2YXIgaW5wdXRzQ29udGFpbmVyLCBoaW50SW5wdXRFbGVtO1xuICAgIC8vYWRkIHJlYWQtb25seSBpbnB1dCB0byBzaG93IGhpbnRcbiAgICBpZiAoc2hvd0hpbnQpIHtcbiAgICAgIGlucHV0c0NvbnRhaW5lciA9IGFuZ3VsYXIuZWxlbWVudCgnPGRpdj48L2Rpdj4nKTtcbiAgICAgIGlucHV0c0NvbnRhaW5lci5jc3MoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICBlbGVtZW50LmFmdGVyKGlucHV0c0NvbnRhaW5lcik7XG4gICAgICBoaW50SW5wdXRFbGVtID0gZWxlbWVudC5jbG9uZSgpO1xuICAgICAgaGludElucHV0RWxlbS5hdHRyKCdwbGFjZWhvbGRlcicsICcnKTtcbiAgICAgIGhpbnRJbnB1dEVsZW0uYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIGhpbnRJbnB1dEVsZW0udmFsKCcnKTtcbiAgICAgIGhpbnRJbnB1dEVsZW0uY3NzKHtcbiAgICAgICAgJ3Bvc2l0aW9uJzogJ2Fic29sdXRlJyxcbiAgICAgICAgJ3RvcCc6ICcwcHgnLFxuICAgICAgICAnbGVmdCc6ICcwcHgnLFxuICAgICAgICAnYm9yZGVyLWNvbG9yJzogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgJ2JveC1zaGFkb3cnOiAnbm9uZScsXG4gICAgICAgICdvcGFjaXR5JzogMSxcbiAgICAgICAgJ2JhY2tncm91bmQnOiAnbm9uZSAwJSAwJSAvIGF1dG8gcmVwZWF0IHNjcm9sbCBwYWRkaW5nLWJveCBib3JkZXItYm94IHJnYigyNTUsIDI1NSwgMjU1KScsXG4gICAgICAgICdjb2xvcic6ICcjOTk5J1xuICAgICAgfSk7XG4gICAgICBlbGVtZW50LmNzcyh7XG4gICAgICAgICdwb3NpdGlvbic6ICdyZWxhdGl2ZScsXG4gICAgICAgICd2ZXJ0aWNhbC1hbGlnbic6ICd0b3AnLFxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICd0cmFuc3BhcmVudCdcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaGludElucHV0RWxlbS5hdHRyKCdpZCcpKSB7XG4gICAgICAgIGhpbnRJbnB1dEVsZW0ucmVtb3ZlQXR0cignaWQnKTsgLy8gcmVtb3ZlIGR1cGxpY2F0ZSBpZCBpZiBwcmVzZW50LlxuICAgICAgfVxuICAgICAgaW5wdXRzQ29udGFpbmVyLmFwcGVuZChoaW50SW5wdXRFbGVtKTtcbiAgICAgIGhpbnRJbnB1dEVsZW0uYWZ0ZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy9wb3AtdXAgZWxlbWVudCB1c2VkIHRvIGRpc3BsYXkgbWF0Y2hlc1xuICAgIHZhciBwb3BVcEVsID0gYW5ndWxhci5lbGVtZW50KCc8ZGl2IHVpYi10eXBlYWhlYWQtcG9wdXA+PC9kaXY+Jyk7XG4gICAgcG9wVXBFbC5hdHRyKHtcbiAgICAgIGlkOiBwb3B1cElkLFxuICAgICAgbWF0Y2hlczogJ21hdGNoZXMnLFxuICAgICAgYWN0aXZlOiAnYWN0aXZlSWR4JyxcbiAgICAgIHNlbGVjdDogJ3NlbGVjdChhY3RpdmVJZHgsIGV2dCknLFxuICAgICAgJ21vdmUtaW4tcHJvZ3Jlc3MnOiAnbW92ZUluUHJvZ3Jlc3MnLFxuICAgICAgcXVlcnk6ICdxdWVyeScsXG4gICAgICBwb3NpdGlvbjogJ3Bvc2l0aW9uJyxcbiAgICAgICdhc3NpZ24taXMtb3Blbic6ICdhc3NpZ25Jc09wZW4oaXNPcGVuKScsXG4gICAgICBkZWJvdW5jZTogJ2RlYm91bmNlVXBkYXRlJ1xuICAgIH0pO1xuICAgIC8vY3VzdG9tIGl0ZW0gdGVtcGxhdGVcbiAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoYXR0cnMudHlwZWFoZWFkVGVtcGxhdGVVcmwpKSB7XG4gICAgICBwb3BVcEVsLmF0dHIoJ3RlbXBsYXRlLXVybCcsIGF0dHJzLnR5cGVhaGVhZFRlbXBsYXRlVXJsKTtcbiAgICB9XG5cbiAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoYXR0cnMudHlwZWFoZWFkUG9wdXBUZW1wbGF0ZVVybCkpIHtcbiAgICAgIHBvcFVwRWwuYXR0cigncG9wdXAtdGVtcGxhdGUtdXJsJywgYXR0cnMudHlwZWFoZWFkUG9wdXBUZW1wbGF0ZVVybCk7XG4gICAgfVxuXG4gICAgdmFyIHJlc2V0SGludCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNob3dIaW50KSB7XG4gICAgICAgIGhpbnRJbnB1dEVsZW0udmFsKCcnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHJlc2V0TWF0Y2hlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2NvcGUubWF0Y2hlcyA9IFtdO1xuICAgICAgc2NvcGUuYWN0aXZlSWR4ID0gLTE7XG4gICAgICBlbGVtZW50LmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gICAgICByZXNldEhpbnQoKTtcbiAgICB9O1xuXG4gICAgdmFyIGdldE1hdGNoSWQgPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgcmV0dXJuIHBvcHVwSWQgKyAnLW9wdGlvbi0nICsgaW5kZXg7XG4gICAgfTtcblxuICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIHNwZWNpZmllZCBtYXRjaCBpcyB0aGUgYWN0aXZlIChwcmUtc2VsZWN0ZWQpIGl0ZW0gaW4gdGhlIGxpc3Qgb3duZWQgYnkgdGhpcyB0eXBlYWhlYWQuXG4gICAgLy8gVGhpcyBhdHRyaWJ1dGUgaXMgYWRkZWQgb3IgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGBhY3RpdmVJZHhgIGNoYW5nZXMuXG4gICAgc2NvcGUuJHdhdGNoKCdhY3RpdmVJZHgnLCBmdW5jdGlvbihpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBnZXRNYXRjaElkKGluZGV4KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgaW5wdXRJc0V4YWN0TWF0Y2ggPSBmdW5jdGlvbihpbnB1dFZhbHVlLCBpbmRleCkge1xuICAgICAgaWYgKHNjb3BlLm1hdGNoZXMubGVuZ3RoID4gaW5kZXggJiYgaW5wdXRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZS50b1VwcGVyQ2FzZSgpID09PSBzY29wZS5tYXRjaGVzW2luZGV4XS5sYWJlbC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIHZhciBnZXRNYXRjaGVzQXN5bmMgPSBmdW5jdGlvbihpbnB1dFZhbHVlLCBldnQpIHtcbiAgICAgIHZhciBsb2NhbHMgPSB7JHZpZXdWYWx1ZTogaW5wdXRWYWx1ZX07XG4gICAgICBpc0xvYWRpbmdTZXR0ZXIob3JpZ2luYWxTY29wZSwgdHJ1ZSk7XG4gICAgICBpc05vUmVzdWx0c1NldHRlcihvcmlnaW5hbFNjb3BlLCBmYWxzZSk7XG4gICAgICAkcS53aGVuKHBhcnNlclJlc3VsdC5zb3VyY2Uob3JpZ2luYWxTY29wZSwgbG9jYWxzKSkudGhlbihmdW5jdGlvbihtYXRjaGVzKSB7XG4gICAgICAgIC8vaXQgbWlnaHQgaGFwcGVuIHRoYXQgc2V2ZXJhbCBhc3luYyBxdWVyaWVzIHdlcmUgaW4gcHJvZ3Jlc3MgaWYgYSB1c2VyIHdlcmUgdHlwaW5nIGZhc3RcbiAgICAgICAgLy9idXQgd2UgYXJlIGludGVyZXN0ZWQgb25seSBpbiByZXNwb25zZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBjdXJyZW50IHZpZXcgdmFsdWVcbiAgICAgICAgdmFyIG9uQ3VycmVudFJlcXVlc3QgPSBpbnB1dFZhbHVlID09PSBtb2RlbEN0cmwuJHZpZXdWYWx1ZTtcbiAgICAgICAgaWYgKG9uQ3VycmVudFJlcXVlc3QgJiYgaGFzRm9jdXMpIHtcbiAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNjb3BlLmFjdGl2ZUlkeCA9IGZvY3VzRmlyc3QgPyAwIDogLTE7XG4gICAgICAgICAgICBpc05vUmVzdWx0c1NldHRlcihvcmlnaW5hbFNjb3BlLCBmYWxzZSk7XG4gICAgICAgICAgICBzY29wZS5tYXRjaGVzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgIC8vdHJhbnNmb3JtIGxhYmVsc1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGxvY2Fsc1twYXJzZXJSZXN1bHQuaXRlbU5hbWVdID0gbWF0Y2hlc1tpXTtcbiAgICAgICAgICAgICAgc2NvcGUubWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogZ2V0TWF0Y2hJZChpKSxcbiAgICAgICAgICAgICAgICBsYWJlbDogcGFyc2VyUmVzdWx0LnZpZXdNYXBwZXIoc2NvcGUsIGxvY2FscyksXG4gICAgICAgICAgICAgICAgbW9kZWw6IG1hdGNoZXNbaV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLnF1ZXJ5ID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgIC8vcG9zaXRpb24gcG9wLXVwIHdpdGggbWF0Y2hlcyAtIHdlIG5lZWQgdG8gcmUtY2FsY3VsYXRlIGl0cyBwb3NpdGlvbiBlYWNoIHRpbWUgd2UgYXJlIG9wZW5pbmcgYSB3aW5kb3dcbiAgICAgICAgICAgIC8vd2l0aCBtYXRjaGVzIGFzIGEgcG9wLXVwIG1pZ2h0IGJlIGFic29sdXRlLXBvc2l0aW9uZWQgYW5kIHBvc2l0aW9uIG9mIGFuIGlucHV0IG1pZ2h0IGhhdmUgY2hhbmdlZCBvbiBhIHBhZ2VcbiAgICAgICAgICAgIC8vZHVlIHRvIG90aGVyIGVsZW1lbnRzIGJlaW5nIHJlbmRlcmVkXG4gICAgICAgICAgICByZWNhbGN1bGF0ZVBvc2l0aW9uKCk7XG5cbiAgICAgICAgICAgIGVsZW1lbnQuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuXG4gICAgICAgICAgICAvL1NlbGVjdCB0aGUgc2luZ2xlIHJlbWFpbmluZyBvcHRpb24gaWYgdXNlciBpbnB1dCBtYXRjaGVzXG4gICAgICAgICAgICBpZiAoc2VsZWN0T25FeGFjdCAmJiBzY29wZS5tYXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBpbnB1dElzRXhhY3RNYXRjaChpbnB1dFZhbHVlLCAwKSkge1xuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc051bWJlcihzY29wZS5kZWJvdW5jZVVwZGF0ZSkgfHwgYW5ndWxhci5pc09iamVjdChzY29wZS5kZWJvdW5jZVVwZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAkJGRlYm91bmNlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgc2NvcGUuc2VsZWN0KDAsIGV2dCk7XG4gICAgICAgICAgICAgICAgfSwgYW5ndWxhci5pc051bWJlcihzY29wZS5kZWJvdW5jZVVwZGF0ZSkgPyBzY29wZS5kZWJvdW5jZVVwZGF0ZSA6IHNjb3BlLmRlYm91bmNlVXBkYXRlWydkZWZhdWx0J10pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjb3BlLnNlbGVjdCgwLCBldnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG93SGludCkge1xuICAgICAgICAgICAgICB2YXIgZmlyc3RMYWJlbCA9IHNjb3BlLm1hdGNoZXNbMF0ubGFiZWw7XG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKGlucHV0VmFsdWUpICYmXG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgZmlyc3RMYWJlbC5zbGljZSgwLCBpbnB1dFZhbHVlLmxlbmd0aCkudG9VcHBlckNhc2UoKSA9PT0gaW5wdXRWYWx1ZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgaGludElucHV0RWxlbS52YWwoaW5wdXRWYWx1ZSArIGZpcnN0TGFiZWwuc2xpY2UoaW5wdXRWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaW50SW5wdXRFbGVtLnZhbCgnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRNYXRjaGVzKCk7XG4gICAgICAgICAgICBpc05vUmVzdWx0c1NldHRlcihvcmlnaW5hbFNjb3BlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uQ3VycmVudFJlcXVlc3QpIHtcbiAgICAgICAgICBpc0xvYWRpbmdTZXR0ZXIob3JpZ2luYWxTY29wZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzZXRNYXRjaGVzKCk7XG4gICAgICAgIGlzTG9hZGluZ1NldHRlcihvcmlnaW5hbFNjb3BlLCBmYWxzZSk7XG4gICAgICAgIGlzTm9SZXN1bHRzU2V0dGVyKG9yaWdpbmFsU2NvcGUsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIGJpbmQgZXZlbnRzIG9ubHkgaWYgYXBwZW5kVG9Cb2R5IHBhcmFtcyBleGlzdCAtIHBlcmZvcm1hbmNlIGZlYXR1cmVcbiAgICBpZiAoYXBwZW5kVG9Cb2R5KSB7XG4gICAgICBhbmd1bGFyLmVsZW1lbnQoJHdpbmRvdykub24oJ3Jlc2l6ZScsIGZpcmVSZWNhbGN1bGF0aW5nKTtcbiAgICAgICRkb2N1bWVudC5maW5kKCdib2R5Jykub24oJ3Njcm9sbCcsIGZpcmVSZWNhbGN1bGF0aW5nKTtcbiAgICB9XG5cbiAgICAvLyBEZWNsYXJlIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gb3V0c2lkZSByZWNhbGN1bGF0aW5nIGZvclxuICAgIC8vIHByb3BlciBkZWJvdW5jaW5nXG4gICAgdmFyIGRlYm91bmNlZFJlY2FsY3VsYXRlID0gJCRkZWJvdW5jZShmdW5jdGlvbigpIHtcbiAgICAgIC8vIGlmIHBvcHVwIGlzIHZpc2libGVcbiAgICAgIGlmIChzY29wZS5tYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICByZWNhbGN1bGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHNjb3BlLm1vdmVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgfSwgZXZlbnREZWJvdW5jZVRpbWUpO1xuXG4gICAgLy8gRGVmYXVsdCBwcm9ncmVzcyB0eXBlXG4gICAgc2NvcGUubW92ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGZpcmVSZWNhbGN1bGF0aW5nKCkge1xuICAgICAgaWYgKCFzY29wZS5tb3ZlSW5Qcm9ncmVzcykge1xuICAgICAgICBzY29wZS5tb3ZlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgIH1cblxuICAgICAgZGVib3VuY2VkUmVjYWxjdWxhdGUoKTtcbiAgICB9XG5cbiAgICAvLyByZWNhbGN1bGF0ZSBhY3R1YWwgcG9zaXRpb24gYW5kIHNldCBuZXcgdmFsdWVzIHRvIHNjb3BlXG4gICAgLy8gYWZ0ZXIgZGlnZXN0IGxvb3AgaXMgcG9wdXAgaW4gcmlnaHQgcG9zaXRpb25cbiAgICBmdW5jdGlvbiByZWNhbGN1bGF0ZVBvc2l0aW9uKCkge1xuICAgICAgc2NvcGUucG9zaXRpb24gPSBhcHBlbmRUb0JvZHkgPyAkcG9zaXRpb24ub2Zmc2V0KGVsZW1lbnQpIDogJHBvc2l0aW9uLnBvc2l0aW9uKGVsZW1lbnQpO1xuICAgICAgc2NvcGUucG9zaXRpb24udG9wICs9IGVsZW1lbnQucHJvcCgnb2Zmc2V0SGVpZ2h0Jyk7XG4gICAgfVxuXG4gICAgLy93ZSBuZWVkIHRvIHByb3BhZ2F0ZSB1c2VyJ3MgcXVlcnkgc28gd2UgY2FuIGhpZ2xpZ2h0IG1hdGNoZXNcbiAgICBzY29wZS5xdWVyeSA9IHVuZGVmaW5lZDtcblxuICAgIC8vRGVjbGFyZSB0aGUgdGltZW91dCBwcm9taXNlIHZhciBvdXRzaWRlIHRoZSBmdW5jdGlvbiBzY29wZSBzbyB0aGF0IHN0YWNrZWQgY2FsbHMgY2FuIGJlIGNhbmNlbGxlZCBsYXRlclxuICAgIHZhciB0aW1lb3V0UHJvbWlzZTtcblxuICAgIHZhciBzY2hlZHVsZVNlYXJjaFdpdGhUaW1lb3V0ID0gZnVuY3Rpb24oaW5wdXRWYWx1ZSkge1xuICAgICAgdGltZW91dFByb21pc2UgPSAkdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgZ2V0TWF0Y2hlc0FzeW5jKGlucHV0VmFsdWUpO1xuICAgICAgfSwgd2FpdFRpbWUpO1xuICAgIH07XG5cbiAgICB2YXIgY2FuY2VsUHJldmlvdXNUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGltZW91dFByb21pc2UpIHtcbiAgICAgICAgJHRpbWVvdXQuY2FuY2VsKHRpbWVvdXRQcm9taXNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVzZXRNYXRjaGVzKCk7XG5cbiAgICBzY29wZS5hc3NpZ25Jc09wZW4gPSBmdW5jdGlvbiAoaXNPcGVuKSB7XG4gICAgICBpc09wZW5TZXR0ZXIob3JpZ2luYWxTY29wZSwgaXNPcGVuKTtcbiAgICB9O1xuXG4gICAgc2NvcGUuc2VsZWN0ID0gZnVuY3Rpb24oYWN0aXZlSWR4LCBldnQpIHtcbiAgICAgIC8vY2FsbGVkIGZyb20gd2l0aGluIHRoZSAkZGlnZXN0KCkgY3ljbGVcbiAgICAgIHZhciBsb2NhbHMgPSB7fTtcbiAgICAgIHZhciBtb2RlbCwgaXRlbTtcblxuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgbG9jYWxzW3BhcnNlclJlc3VsdC5pdGVtTmFtZV0gPSBpdGVtID0gc2NvcGUubWF0Y2hlc1thY3RpdmVJZHhdLm1vZGVsO1xuICAgICAgbW9kZWwgPSBwYXJzZXJSZXN1bHQubW9kZWxNYXBwZXIob3JpZ2luYWxTY29wZSwgbG9jYWxzKTtcbiAgICAgICRzZXRNb2RlbFZhbHVlKG9yaWdpbmFsU2NvcGUsIG1vZGVsKTtcbiAgICAgIG1vZGVsQ3RybC4kc2V0VmFsaWRpdHkoJ2VkaXRhYmxlJywgdHJ1ZSk7XG4gICAgICBtb2RlbEN0cmwuJHNldFZhbGlkaXR5KCdwYXJzZScsIHRydWUpO1xuXG4gICAgICBvblNlbGVjdENhbGxiYWNrKG9yaWdpbmFsU2NvcGUsIHtcbiAgICAgICAgJGl0ZW06IGl0ZW0sXG4gICAgICAgICRtb2RlbDogbW9kZWwsXG4gICAgICAgICRsYWJlbDogcGFyc2VyUmVzdWx0LnZpZXdNYXBwZXIob3JpZ2luYWxTY29wZSwgbG9jYWxzKSxcbiAgICAgICAgJGV2ZW50OiBldnRcbiAgICAgIH0pO1xuXG4gICAgICByZXNldE1hdGNoZXMoKTtcblxuICAgICAgLy9yZXR1cm4gZm9jdXMgdG8gdGhlIGlucHV0IGVsZW1lbnQgaWYgYSBtYXRjaCB3YXMgc2VsZWN0ZWQgdmlhIGEgbW91c2UgY2xpY2sgZXZlbnRcbiAgICAgIC8vIHVzZSB0aW1lb3V0IHRvIGF2b2lkICRyb290U2NvcGU6aW5wcm9nIGVycm9yXG4gICAgICBpZiAoc2NvcGUuJGV2YWwoYXR0cnMudHlwZWFoZWFkRm9jdXNPblNlbGVjdCkgIT09IGZhbHNlKSB7XG4gICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCkgeyBlbGVtZW50WzBdLmZvY3VzKCk7IH0sIDAsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy9iaW5kIGtleWJvYXJkIGV2ZW50czogYXJyb3dzIHVwKDM4KSAvIGRvd24oNDApLCBlbnRlcigxMykgYW5kIHRhYig5KSwgZXNjKDI3KVxuICAgIGVsZW1lbnQub24oJ2tleWRvd24nLCBmdW5jdGlvbihldnQpIHtcbiAgICAgIC8vdHlwZWFoZWFkIGlzIG9wZW4gYW5kIGFuIFwiaW50ZXJlc3RpbmdcIiBrZXkgd2FzIHByZXNzZWRcbiAgICAgIGlmIChzY29wZS5tYXRjaGVzLmxlbmd0aCA9PT0gMCB8fCBIT1RfS0VZUy5pbmRleE9mKGV2dC53aGljaCkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3VsZFNlbGVjdCA9IGlzU2VsZWN0RXZlbnQob3JpZ2luYWxTY29wZSwgeyRldmVudDogZXZ0fSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogaWYgdGhlcmUncyBub3RoaW5nIHNlbGVjdGVkIChpLmUuIGZvY3VzRmlyc3QpIGFuZCBlbnRlciBvciB0YWIgaXMgaGl0XG4gICAgICAgKiBvclxuICAgICAgICogc2hpZnQgKyB0YWIgaXMgcHJlc3NlZCB0byBicmluZyBmb2N1cyB0byB0aGUgcHJldmlvdXMgZWxlbWVudFxuICAgICAgICogdGhlbiBjbGVhciB0aGUgcmVzdWx0c1xuICAgICAgICovXG4gICAgICBpZiAoc2NvcGUuYWN0aXZlSWR4ID09PSAtMSAmJiBzaG91bGRTZWxlY3QgfHwgZXZ0LndoaWNoID09PSA5ICYmICEhZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICAgIHJlc2V0TWF0Y2hlcygpO1xuICAgICAgICBzY29wZS4kZGlnZXN0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgdGFyZ2V0O1xuICAgICAgc3dpdGNoIChldnQud2hpY2gpIHtcbiAgICAgICAgY2FzZSAyNzogLy8gZXNjYXBlXG4gICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgcmVzZXRNYXRjaGVzKCk7XG4gICAgICAgICAgb3JpZ2luYWxTY29wZS4kZGlnZXN0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzg6IC8vIHVwIGFycm93XG4gICAgICAgICAgc2NvcGUuYWN0aXZlSWR4ID0gKHNjb3BlLmFjdGl2ZUlkeCA+IDAgPyBzY29wZS5hY3RpdmVJZHggOiBzY29wZS5tYXRjaGVzLmxlbmd0aCkgLSAxO1xuICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgICB0YXJnZXQgPSBwb3BVcEVsWzBdLnF1ZXJ5U2VsZWN0b3JBbGwoJy51aWItdHlwZWFoZWFkLW1hdGNoJylbc2NvcGUuYWN0aXZlSWR4XTtcbiAgICAgICAgICB0YXJnZXQucGFyZW50Tm9kZS5zY3JvbGxUb3AgPSB0YXJnZXQub2Zmc2V0VG9wO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwOiAvLyBkb3duIGFycm93XG4gICAgICAgICAgc2NvcGUuYWN0aXZlSWR4ID0gKHNjb3BlLmFjdGl2ZUlkeCArIDEpICUgc2NvcGUubWF0Y2hlcy5sZW5ndGg7XG4gICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICAgIHRhcmdldCA9IHBvcFVwRWxbMF0ucXVlcnlTZWxlY3RvckFsbCgnLnVpYi10eXBlYWhlYWQtbWF0Y2gnKVtzY29wZS5hY3RpdmVJZHhdO1xuICAgICAgICAgIHRhcmdldC5wYXJlbnROb2RlLnNjcm9sbFRvcCA9IHRhcmdldC5vZmZzZXRUb3A7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHNob3VsZFNlbGVjdCkge1xuICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc051bWJlcihzY29wZS5kZWJvdW5jZVVwZGF0ZSkgfHwgYW5ndWxhci5pc09iamVjdChzY29wZS5kZWJvdW5jZVVwZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAkJGRlYm91bmNlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgc2NvcGUuc2VsZWN0KHNjb3BlLmFjdGl2ZUlkeCwgZXZ0KTtcbiAgICAgICAgICAgICAgICB9LCBhbmd1bGFyLmlzTnVtYmVyKHNjb3BlLmRlYm91bmNlVXBkYXRlKSA/IHNjb3BlLmRlYm91bmNlVXBkYXRlIDogc2NvcGUuZGVib3VuY2VVcGRhdGVbJ2RlZmF1bHQnXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuc2VsZWN0KHNjb3BlLmFjdGl2ZUlkeCwgZXZ0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWxlbWVudC5vbignZm9jdXMnLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICBoYXNGb2N1cyA9IHRydWU7XG4gICAgICBpZiAobWluTGVuZ3RoID09PSAwICYmICFtb2RlbEN0cmwuJHZpZXdWYWx1ZSkge1xuICAgICAgICAkdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBnZXRNYXRjaGVzQXN5bmMobW9kZWxDdHJsLiR2aWV3VmFsdWUsIGV2dCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWxlbWVudC5vbignYmx1cicsIGZ1bmN0aW9uKGV2dCkge1xuICAgICAgaWYgKGlzU2VsZWN0T25CbHVyICYmIHNjb3BlLm1hdGNoZXMubGVuZ3RoICYmIHNjb3BlLmFjdGl2ZUlkeCAhPT0gLTEgJiYgIXNlbGVjdGVkKSB7XG4gICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChhbmd1bGFyLmlzT2JqZWN0KHNjb3BlLmRlYm91bmNlVXBkYXRlKSAmJiBhbmd1bGFyLmlzTnVtYmVyKHNjb3BlLmRlYm91bmNlVXBkYXRlLmJsdXIpKSB7XG4gICAgICAgICAgICAkJGRlYm91bmNlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBzY29wZS5zZWxlY3Qoc2NvcGUuYWN0aXZlSWR4LCBldnQpO1xuICAgICAgICAgICAgfSwgc2NvcGUuZGVib3VuY2VVcGRhdGUuYmx1cik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjb3BlLnNlbGVjdChzY29wZS5hY3RpdmVJZHgsIGV2dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNFZGl0YWJsZSAmJiBtb2RlbEN0cmwuJGVycm9yLmVkaXRhYmxlKSB7XG4gICAgICAgIG1vZGVsQ3RybC4kc2V0Vmlld1ZhbHVlKCk7XG4gICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyBSZXNldCB2YWxpZGl0eSBhcyB3ZSBhcmUgY2xlYXJpbmdcbiAgICAgICAgICBtb2RlbEN0cmwuJHNldFZhbGlkaXR5KCdlZGl0YWJsZScsIHRydWUpO1xuICAgICAgICAgIG1vZGVsQ3RybC4kc2V0VmFsaWRpdHkoJ3BhcnNlJywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LnZhbCgnJyk7XG4gICAgICB9XG4gICAgICBoYXNGb2N1cyA9IGZhbHNlO1xuICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIGNsaWNrIGhhbmRsZXIgdG8gdW5iaW5kIGl0LlxuICAgIHZhciBkaXNtaXNzQ2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAvLyBJc3N1ZSAjMzk3M1xuICAgICAgLy8gRmlyZWZveCB0cmVhdHMgcmlnaHQgY2xpY2sgYXMgYSBjbGljayBvbiBkb2N1bWVudFxuICAgICAgaWYgKGVsZW1lbnRbMF0gIT09IGV2dC50YXJnZXQgJiYgZXZ0LndoaWNoICE9PSAzICYmIHNjb3BlLm1hdGNoZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJlc2V0TWF0Y2hlcygpO1xuICAgICAgICBpZiAoISRyb290U2NvcGUuJCRwaGFzZSkge1xuICAgICAgICAgIG9yaWdpbmFsU2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgICRkb2N1bWVudC5vbignY2xpY2snLCBkaXNtaXNzQ2xpY2tIYW5kbGVyKTtcblxuICAgIG9yaWdpbmFsU2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgJGRvY3VtZW50Lm9mZignY2xpY2snLCBkaXNtaXNzQ2xpY2tIYW5kbGVyKTtcbiAgICAgIGlmIChhcHBlbmRUb0JvZHkgfHwgYXBwZW5kVG8pIHtcbiAgICAgICAgJHBvcHVwLnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXBwZW5kVG9Cb2R5KSB7XG4gICAgICAgIGFuZ3VsYXIuZWxlbWVudCgkd2luZG93KS5vZmYoJ3Jlc2l6ZScsIGZpcmVSZWNhbGN1bGF0aW5nKTtcbiAgICAgICAgJGRvY3VtZW50LmZpbmQoJ2JvZHknKS5vZmYoJ3Njcm9sbCcsIGZpcmVSZWNhbGN1bGF0aW5nKTtcbiAgICAgIH1cbiAgICAgIC8vIFByZXZlbnQgalF1ZXJ5IGNhY2hlIG1lbW9yeSBsZWFrXG4gICAgICBwb3BVcEVsLnJlbW92ZSgpO1xuXG4gICAgICBpZiAoc2hvd0hpbnQpIHtcbiAgICAgICAgICBpbnB1dHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgJHBvcHVwID0gJGNvbXBpbGUocG9wVXBFbCkoc2NvcGUpO1xuXG4gICAgaWYgKGFwcGVuZFRvQm9keSkge1xuICAgICAgJGRvY3VtZW50LmZpbmQoJ2JvZHknKS5hcHBlbmQoJHBvcHVwKTtcbiAgICB9IGVsc2UgaWYgKGFwcGVuZFRvKSB7XG4gICAgICBhbmd1bGFyLmVsZW1lbnQoYXBwZW5kVG8pLmVxKDApLmFwcGVuZCgkcG9wdXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LmFmdGVyKCRwb3B1cCk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oX21vZGVsQ3RybCkge1xuICAgICAgbW9kZWxDdHJsID0gX21vZGVsQ3RybDtcbiAgICAgIG5nTW9kZWxPcHRpb25zID0gZXh0cmFjdE9wdGlvbnMobW9kZWxDdHJsKTtcblxuICAgICAgc2NvcGUuZGVib3VuY2VVcGRhdGUgPSAkcGFyc2UobmdNb2RlbE9wdGlvbnMuZ2V0T3B0aW9uKCdkZWJvdW5jZScpKShvcmlnaW5hbFNjb3BlKTtcblxuICAgICAgLy9wbHVnIGludG8gJHBhcnNlcnMgcGlwZWxpbmUgdG8gb3BlbiBhIHR5cGVhaGVhZCBvbiB2aWV3IGNoYW5nZXMgaW5pdGlhdGVkIGZyb20gRE9NXG4gICAgICAvLyRwYXJzZXJzIGtpY2staW4gb24gYWxsIHRoZSBjaGFuZ2VzIGNvbWluZyBmcm9tIHRoZSB2aWV3IGFzIHdlbGwgYXMgbWFudWFsbHkgdHJpZ2dlcmVkIGJ5ICRzZXRWaWV3VmFsdWVcbiAgICAgIG1vZGVsQ3RybC4kcGFyc2Vycy51bnNoaWZ0KGZ1bmN0aW9uKGlucHV0VmFsdWUpIHtcbiAgICAgICAgaGFzRm9jdXMgPSB0cnVlO1xuXG4gICAgICAgIGlmIChtaW5MZW5ndGggPT09IDAgfHwgaW5wdXRWYWx1ZSAmJiBpbnB1dFZhbHVlLmxlbmd0aCA+PSBtaW5MZW5ndGgpIHtcbiAgICAgICAgICBpZiAod2FpdFRpbWUgPiAwKSB7XG4gICAgICAgICAgICBjYW5jZWxQcmV2aW91c1RpbWVvdXQoKTtcbiAgICAgICAgICAgIHNjaGVkdWxlU2VhcmNoV2l0aFRpbWVvdXQoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldE1hdGNoZXNBc3luYyhpbnB1dFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNMb2FkaW5nU2V0dGVyKG9yaWdpbmFsU2NvcGUsIGZhbHNlKTtcbiAgICAgICAgICBjYW5jZWxQcmV2aW91c1RpbWVvdXQoKTtcbiAgICAgICAgICByZXNldE1hdGNoZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIGlucHV0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICAvLyBSZXNldCBpbiBjYXNlIHVzZXIgaGFkIHR5cGVkIHNvbWV0aGluZyBwcmV2aW91c2x5LlxuICAgICAgICAgIG1vZGVsQ3RybC4kc2V0VmFsaWRpdHkoJ2VkaXRhYmxlJywgdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBtb2RlbEN0cmwuJHNldFZhbGlkaXR5KCdlZGl0YWJsZScsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICBtb2RlbEN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbihtb2RlbFZhbHVlKSB7XG4gICAgICAgIHZhciBjYW5kaWRhdGVWaWV3VmFsdWUsIGVtcHR5Vmlld1ZhbHVlO1xuICAgICAgICB2YXIgbG9jYWxzID0ge307XG5cbiAgICAgICAgLy8gVGhlIHZhbGlkaXR5IG1heSBiZSBzZXQgdG8gZmFsc2UgdmlhICRwYXJzZXJzIChzZWUgYWJvdmUpIGlmXG4gICAgICAgIC8vIHRoZSBtb2RlbCBpcyByZXN0cmljdGVkIHRvIHNlbGVjdGVkIHZhbHVlcy4gSWYgdGhlIG1vZGVsXG4gICAgICAgIC8vIGlzIHNldCBtYW51YWxseSBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIHZhbGlkLlxuICAgICAgICBpZiAoIWlzRWRpdGFibGUpIHtcbiAgICAgICAgICBtb2RlbEN0cmwuJHNldFZhbGlkaXR5KCdlZGl0YWJsZScsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlucHV0Rm9ybWF0dGVyKSB7XG4gICAgICAgICAgbG9jYWxzLiRtb2RlbCA9IG1vZGVsVmFsdWU7XG4gICAgICAgICAgcmV0dXJuIGlucHV0Rm9ybWF0dGVyKG9yaWdpbmFsU2NvcGUsIGxvY2Fscyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2l0IG1pZ2h0IGhhcHBlbiB0aGF0IHdlIGRvbid0IGhhdmUgZW5vdWdoIGluZm8gdG8gcHJvcGVybHkgcmVuZGVyIGlucHV0IHZhbHVlXG4gICAgICAgIC8vd2UgbmVlZCB0byBjaGVjayBmb3IgdGhpcyBzaXR1YXRpb24gYW5kIHNpbXBseSByZXR1cm4gbW9kZWwgdmFsdWUgaWYgd2UgY2FuJ3QgYXBwbHkgY3VzdG9tIGZvcm1hdHRpbmdcbiAgICAgICAgbG9jYWxzW3BhcnNlclJlc3VsdC5pdGVtTmFtZV0gPSBtb2RlbFZhbHVlO1xuICAgICAgICBjYW5kaWRhdGVWaWV3VmFsdWUgPSBwYXJzZXJSZXN1bHQudmlld01hcHBlcihvcmlnaW5hbFNjb3BlLCBsb2NhbHMpO1xuICAgICAgICBsb2NhbHNbcGFyc2VyUmVzdWx0Lml0ZW1OYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZW1wdHlWaWV3VmFsdWUgPSBwYXJzZXJSZXN1bHQudmlld01hcHBlcihvcmlnaW5hbFNjb3BlLCBsb2NhbHMpO1xuXG4gICAgICAgIHJldHVybiBjYW5kaWRhdGVWaWV3VmFsdWUgIT09IGVtcHR5Vmlld1ZhbHVlID8gY2FuZGlkYXRlVmlld1ZhbHVlIDogbW9kZWxWYWx1ZTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0T3B0aW9ucyhuZ01vZGVsQ3RybCkge1xuICAgICAgdmFyIG5nTW9kZWxPcHRpb25zO1xuXG4gICAgICBpZiAoYW5ndWxhci52ZXJzaW9uLm1pbm9yIDwgNikgeyAvLyBpbiBhbmd1bGFyIDwgMS42ICRvcHRpb25zIGNvdWxkIGJlIG1pc3NpbmdcbiAgICAgICAgLy8gZ3VhcmFudGVlIGEgdmFsdWVcbiAgICAgICAgbmdNb2RlbE9wdGlvbnMgPSBuZ01vZGVsQ3RybC4kb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICAvLyBtaW1pYyAxLjYrIGFwaVxuICAgICAgICBuZ01vZGVsT3B0aW9ucy5nZXRPcHRpb24gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIG5nTW9kZWxPcHRpb25zW2tleV07XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgeyAvLyBpbiBhbmd1bGFyID49MS42ICRvcHRpb25zIGlzIGFsd2F5cyBwcmVzZW50XG4gICAgICAgIG5nTW9kZWxPcHRpb25zID0gbmdNb2RlbEN0cmwuJG9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZ01vZGVsT3B0aW9ucztcbiAgICB9XG4gIH1dKVxuXG4gIC5kaXJlY3RpdmUoJ3VpYlR5cGVhaGVhZCcsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250cm9sbGVyOiAnVWliVHlwZWFoZWFkQ29udHJvbGxlcicsXG4gICAgICByZXF1aXJlOiBbJ25nTW9kZWwnLCAndWliVHlwZWFoZWFkJ10sXG4gICAgICBsaW5rOiBmdW5jdGlvbihvcmlnaW5hbFNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMpIHtcbiAgICAgICAgY3RybHNbMV0uaW5pdChjdHJsc1swXSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSlcblxuICAuZGlyZWN0aXZlKCd1aWJUeXBlYWhlYWRQb3B1cCcsIFsnJCRkZWJvdW5jZScsIGZ1bmN0aW9uKCQkZGVib3VuY2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NvcGU6IHtcbiAgICAgICAgbWF0Y2hlczogJz0nLFxuICAgICAgICBxdWVyeTogJz0nLFxuICAgICAgICBhY3RpdmU6ICc9JyxcbiAgICAgICAgcG9zaXRpb246ICcmJyxcbiAgICAgICAgbW92ZUluUHJvZ3Jlc3M6ICc9JyxcbiAgICAgICAgc2VsZWN0OiAnJicsXG4gICAgICAgIGFzc2lnbklzT3BlbjogJyYnLFxuICAgICAgICBkZWJvdW5jZTogJyYnXG4gICAgICB9LFxuICAgICAgcmVwbGFjZTogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlVXJsOiBmdW5jdGlvbihlbGVtZW50LCBhdHRycykge1xuICAgICAgICByZXR1cm4gYXR0cnMucG9wdXBUZW1wbGF0ZVVybCB8fCAndWliL3RlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCc7XG4gICAgICB9LFxuICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICAgIHNjb3BlLnRlbXBsYXRlVXJsID0gYXR0cnMudGVtcGxhdGVVcmw7XG5cbiAgICAgICAgc2NvcGUuaXNPcGVuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGlzRHJvcGRvd25PcGVuID0gc2NvcGUubWF0Y2hlcy5sZW5ndGggPiAwO1xuICAgICAgICAgIHNjb3BlLmFzc2lnbklzT3Blbih7IGlzT3BlbjogaXNEcm9wZG93bk9wZW4gfSk7XG4gICAgICAgICAgcmV0dXJuIGlzRHJvcGRvd25PcGVuO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLmlzQWN0aXZlID0gZnVuY3Rpb24obWF0Y2hJZHgpIHtcbiAgICAgICAgICByZXR1cm4gc2NvcGUuYWN0aXZlID09PSBtYXRjaElkeDtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5zZWxlY3RBY3RpdmUgPSBmdW5jdGlvbihtYXRjaElkeCkge1xuICAgICAgICAgIHNjb3BlLmFjdGl2ZSA9IG1hdGNoSWR4O1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnNlbGVjdE1hdGNoID0gZnVuY3Rpb24oYWN0aXZlSWR4LCBldnQpIHtcbiAgICAgICAgICB2YXIgZGVib3VuY2UgPSBzY29wZS5kZWJvdW5jZSgpO1xuICAgICAgICAgIGlmIChhbmd1bGFyLmlzTnVtYmVyKGRlYm91bmNlKSB8fCBhbmd1bGFyLmlzT2JqZWN0KGRlYm91bmNlKSkge1xuICAgICAgICAgICAgJCRkZWJvdW5jZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgc2NvcGUuc2VsZWN0KHthY3RpdmVJZHg6IGFjdGl2ZUlkeCwgZXZ0OiBldnR9KTtcbiAgICAgICAgICAgIH0sIGFuZ3VsYXIuaXNOdW1iZXIoZGVib3VuY2UpID8gZGVib3VuY2UgOiBkZWJvdW5jZVsnZGVmYXVsdCddKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2NvcGUuc2VsZWN0KHthY3RpdmVJZHg6IGFjdGl2ZUlkeCwgZXZ0OiBldnR9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgfV0pXG5cbiAgLmRpcmVjdGl2ZSgndWliVHlwZWFoZWFkTWF0Y2gnLCBbJyR0ZW1wbGF0ZVJlcXVlc3QnLCAnJGNvbXBpbGUnLCAnJHBhcnNlJywgZnVuY3Rpb24oJHRlbXBsYXRlUmVxdWVzdCwgJGNvbXBpbGUsICRwYXJzZSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY29wZToge1xuICAgICAgICBpbmRleDogJz0nLFxuICAgICAgICBtYXRjaDogJz0nLFxuICAgICAgICBxdWVyeTogJz0nXG4gICAgICB9LFxuICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICAgIHZhciB0cGxVcmwgPSAkcGFyc2UoYXR0cnMudGVtcGxhdGVVcmwpKHNjb3BlLiRwYXJlbnQpIHx8ICd1aWIvdGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sJztcbiAgICAgICAgJHRlbXBsYXRlUmVxdWVzdCh0cGxVcmwpLnRoZW4oZnVuY3Rpb24odHBsQ29udGVudCkge1xuICAgICAgICAgIHZhciB0cGxFbCA9IGFuZ3VsYXIuZWxlbWVudCh0cGxDb250ZW50LnRyaW0oKSk7XG4gICAgICAgICAgZWxlbWVudC5yZXBsYWNlV2l0aCh0cGxFbCk7XG4gICAgICAgICAgJGNvbXBpbGUodHBsRWwpKHNjb3BlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfV0pXG5cbiAgLmZpbHRlcigndWliVHlwZWFoZWFkSGlnaGxpZ2h0JywgWyckc2NlJywgJyRpbmplY3RvcicsICckbG9nJywgZnVuY3Rpb24oJHNjZSwgJGluamVjdG9yLCAkbG9nKSB7XG4gICAgdmFyIGlzU2FuaXRpemVQcmVzZW50O1xuICAgIGlzU2FuaXRpemVQcmVzZW50ID0gJGluamVjdG9yLmhhcygnJHNhbml0aXplJyk7XG5cbiAgICBmdW5jdGlvbiBlc2NhcGVSZWdleHAocXVlcnlUb0VzY2FwZSkge1xuICAgICAgLy8gUmVnZXg6IGNhcHR1cmUgdGhlIHdob2xlIHF1ZXJ5IHN0cmluZyBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gbWF0Y2hcbiAgICAgIC8vIHRoZSByZXN1bHRzLCBmb3IgZXhhbXBsZSBpZiB0aGUgY2FwdHVyZSBpcyBcImFcIiB0aGUgcmVzdWx0IHdpbGwgYmUgXFxhXG4gICAgICByZXR1cm4gcXVlcnlUb0VzY2FwZS5yZXBsYWNlKC8oWy4/KiteJFtcXF1cXFxcKCl7fXwtXSkvZywgJ1xcXFwkMScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnRhaW5zSHRtbChtYXRjaEl0ZW0pIHtcbiAgICAgIHJldHVybiAvPC4qPi9nLnRlc3QobWF0Y2hJdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24obWF0Y2hJdGVtLCBxdWVyeSkge1xuICAgICAgaWYgKCFpc1Nhbml0aXplUHJlc2VudCAmJiBjb250YWluc0h0bWwobWF0Y2hJdGVtKSkge1xuICAgICAgICAkbG9nLndhcm4oJ1Vuc2FmZSB1c2Ugb2YgdHlwZWFoZWFkIHBsZWFzZSB1c2UgbmdTYW5pdGl6ZScpOyAvLyBXYXJuIHRoZSB1c2VyIGFib3V0IHRoZSBkYW5nZXJcbiAgICAgIH1cbiAgICAgIG1hdGNoSXRlbSA9IHF1ZXJ5ID8gKCcnICsgbWF0Y2hJdGVtKS5yZXBsYWNlKG5ldyBSZWdFeHAoZXNjYXBlUmVnZXhwKHF1ZXJ5KSwgJ2dpJyksICc8c3Ryb25nPiQmPC9zdHJvbmc+JykgOiBtYXRjaEl0ZW07IC8vIFJlcGxhY2VzIHRoZSBjYXB0dXJlIHN0cmluZyB3aXRoIGEgdGhlIHNhbWUgc3RyaW5nIGluc2lkZSBvZiBhIFwic3Ryb25nXCIgdGFnXG4gICAgICBpZiAoIWlzU2FuaXRpemVQcmVzZW50KSB7XG4gICAgICAgIG1hdGNoSXRlbSA9ICRzY2UudHJ1c3RBc0h0bWwobWF0Y2hJdGVtKTsgLy8gSWYgJHNhbml0aXplIGlzIG5vdCBwcmVzZW50IHdlIHBhY2sgdGhlIHN0cmluZyBpbiBhICRzY2Ugb2JqZWN0IGZvciB0aGUgbmctYmluZC1odG1sIGRpcmVjdGl2ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoSXRlbTtcbiAgICB9O1xuICB9XSk7XG5cbmFuZ3VsYXIubW9kdWxlKFwidWliL3RlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWxcIixcbiAgICBcIjxkaXYgcm9sZT1cXFwidGFiXFxcIiBpZD1cXFwie3s6OmhlYWRpbmdJZH19XFxcIiBhcmlhLXNlbGVjdGVkPVxcXCJ7e2lzT3Blbn19XFxcIiBjbGFzcz1cXFwicGFuZWwtaGVhZGluZ1xcXCIgbmcta2V5cHJlc3M9XFxcInRvZ2dsZU9wZW4oJGV2ZW50KVxcXCI+XFxuXCIgK1xuICAgIFwiICA8aDQgY2xhc3M9XFxcInBhbmVsLXRpdGxlXFxcIj5cXG5cIiArXG4gICAgXCIgICAgPGEgcm9sZT1cXFwiYnV0dG9uXFxcIiBkYXRhLXRvZ2dsZT1cXFwiY29sbGFwc2VcXFwiIGhyZWYgYXJpYS1leHBhbmRlZD1cXFwie3tpc09wZW59fVxcXCIgYXJpYS1jb250cm9scz1cXFwie3s6OnBhbmVsSWR9fVxcXCIgdGFiaW5kZXg9XFxcIjBcXFwiIGNsYXNzPVxcXCJhY2NvcmRpb24tdG9nZ2xlXFxcIiBuZy1jbGljaz1cXFwidG9nZ2xlT3BlbigpXFxcIiB1aWItYWNjb3JkaW9uLXRyYW5zY2x1ZGU9XFxcImhlYWRpbmdcXFwiIG5nLWRpc2FibGVkPVxcXCJpc0Rpc2FibGVkXFxcIiB1aWItdGFiaW5kZXgtdG9nZ2xlPjxzcGFuIHVpYi1hY2NvcmRpb24taGVhZGVyIG5nLWNsYXNzPVxcXCJ7J3RleHQtbXV0ZWQnOiBpc0Rpc2FibGVkfVxcXCI+e3toZWFkaW5nfX08L3NwYW4+PC9hPlxcblwiICtcbiAgICBcIiAgPC9oND5cXG5cIiArXG4gICAgXCI8L2Rpdj5cXG5cIiArXG4gICAgXCI8ZGl2IGlkPVxcXCJ7ezo6cGFuZWxJZH19XFxcIiBhcmlhLWxhYmVsbGVkYnk9XFxcInt7OjpoZWFkaW5nSWR9fVxcXCIgYXJpYS1oaWRkZW49XFxcInt7IWlzT3Blbn19XFxcIiByb2xlPVxcXCJ0YWJwYW5lbFxcXCIgY2xhc3M9XFxcInBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlXFxcIiB1aWItY29sbGFwc2U9XFxcIiFpc09wZW5cXFwiPlxcblwiICtcbiAgICBcIiAgPGRpdiBjbGFzcz1cXFwicGFuZWwtYm9keVxcXCIgbmctdHJhbnNjbHVkZT48L2Rpdj5cXG5cIiArXG4gICAgXCI8L2Rpdj5cXG5cIiArXG4gICAgXCJcIik7XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKFwidWliL3RlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWxcIixcbiAgICBcIjxkaXYgcm9sZT1cXFwidGFibGlzdFxcXCIgY2xhc3M9XFxcInBhbmVsLWdyb3VwXFxcIiBuZy10cmFuc2NsdWRlPjwvZGl2PlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sXCIsXG4gICAgXCI8YnV0dG9uIG5nLXNob3c9XFxcImNsb3NlYWJsZVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiY2xvc2VcXFwiIG5nLWNsaWNrPVxcXCJjbG9zZSh7JGV2ZW50OiAkZXZlbnR9KVxcXCI+XFxuXCIgK1xuICAgIFwiICA8c3BhbiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCI+JnRpbWVzOzwvc3Bhbj5cXG5cIiArXG4gICAgXCIgIDxzcGFuIGNsYXNzPVxcXCJzci1vbmx5XFxcIj5DbG9zZTwvc3Bhbj5cXG5cIiArXG4gICAgXCI8L2J1dHRvbj5cXG5cIiArXG4gICAgXCI8ZGl2IG5nLXRyYW5zY2x1ZGU+PC9kaXY+XFxuXCIgK1xuICAgIFwiXCIpO1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZShcInVpYi90ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWxcIixcbiAgICBcIjxkaXYgY2xhc3M9XFxcImNhcm91c2VsLWlubmVyXFxcIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxcblwiICtcbiAgICBcIjxhIHJvbGU9XFxcImJ1dHRvblxcXCIgaHJlZiBjbGFzcz1cXFwibGVmdCBjYXJvdXNlbC1jb250cm9sXFxcIiBuZy1jbGljaz1cXFwicHJldigpXFxcIiBuZy1jbGFzcz1cXFwieyBkaXNhYmxlZDogaXNQcmV2RGlzYWJsZWQoKSB9XFxcIiBuZy1zaG93PVxcXCJzbGlkZXMubGVuZ3RoID4gMVxcXCI+XFxuXCIgK1xuICAgIFwiICA8c3BhbiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCIgY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0XFxcIj48L3NwYW4+XFxuXCIgK1xuICAgIFwiICA8c3BhbiBjbGFzcz1cXFwic3Itb25seVxcXCI+cHJldmlvdXM8L3NwYW4+XFxuXCIgK1xuICAgIFwiPC9hPlxcblwiICtcbiAgICBcIjxhIHJvbGU9XFxcImJ1dHRvblxcXCIgaHJlZiBjbGFzcz1cXFwicmlnaHQgY2Fyb3VzZWwtY29udHJvbFxcXCIgbmctY2xpY2s9XFxcIm5leHQoKVxcXCIgbmctY2xhc3M9XFxcInsgZGlzYWJsZWQ6IGlzTmV4dERpc2FibGVkKCkgfVxcXCIgbmctc2hvdz1cXFwic2xpZGVzLmxlbmd0aCA+IDFcXFwiPlxcblwiICtcbiAgICBcIiAgPHNwYW4gYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHRcXFwiPjwvc3Bhbj5cXG5cIiArXG4gICAgXCIgIDxzcGFuIGNsYXNzPVxcXCJzci1vbmx5XFxcIj5uZXh0PC9zcGFuPlxcblwiICtcbiAgICBcIjwvYT5cXG5cIiArXG4gICAgXCI8b2wgY2xhc3M9XFxcImNhcm91c2VsLWluZGljYXRvcnNcXFwiIG5nLXNob3c9XFxcInNsaWRlcy5sZW5ndGggPiAxXFxcIj5cXG5cIiArXG4gICAgXCIgIDxsaSBuZy1yZXBlYXQ9XFxcInNsaWRlIGluIHNsaWRlcyB8IG9yZGVyQnk6aW5kZXhPZlNsaWRlIHRyYWNrIGJ5ICRpbmRleFxcXCIgbmctY2xhc3M9XFxcInsgYWN0aXZlOiBpc0FjdGl2ZShzbGlkZSkgfVxcXCIgbmctY2xpY2s9XFxcInNlbGVjdChzbGlkZSlcXFwiPlxcblwiICtcbiAgICBcIiAgICA8c3BhbiBjbGFzcz1cXFwic3Itb25seVxcXCI+c2xpZGUge3sgJGluZGV4ICsgMSB9fSBvZiB7eyBzbGlkZXMubGVuZ3RoIH19PHNwYW4gbmctaWY9XFxcImlzQWN0aXZlKHNsaWRlKVxcXCI+LCBjdXJyZW50bHkgYWN0aXZlPC9zcGFuPjwvc3Bhbj5cXG5cIiArXG4gICAgXCIgIDwvbGk+XFxuXCIgK1xuICAgIFwiPC9vbD5cXG5cIiArXG4gICAgXCJcIik7XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKFwidWliL3RlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbFwiLFxuICAgIFwiPGRpdiBjbGFzcz1cXFwidGV4dC1jZW50ZXJcXFwiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XFxuXCIgK1xuICAgIFwiXCIpO1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZShcInVpYi90ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbFwiLFxuICAgIFwiPGRpdiBuZy1zd2l0Y2g9XFxcImRhdGVwaWNrZXJNb2RlXFxcIj5cXG5cIiArXG4gICAgXCIgIDxkaXYgdWliLWRheXBpY2tlciBuZy1zd2l0Y2gtd2hlbj1cXFwiZGF5XFxcIiB0YWJpbmRleD1cXFwiMFxcXCIgY2xhc3M9XFxcInVpYi1kYXlwaWNrZXJcXFwiPjwvZGl2PlxcblwiICtcbiAgICBcIiAgPGRpdiB1aWItbW9udGhwaWNrZXIgbmctc3dpdGNoLXdoZW49XFxcIm1vbnRoXFxcIiB0YWJpbmRleD1cXFwiMFxcXCIgY2xhc3M9XFxcInVpYi1tb250aHBpY2tlclxcXCI+PC9kaXY+XFxuXCIgK1xuICAgIFwiICA8ZGl2IHVpYi15ZWFycGlja2VyIG5nLXN3aXRjaC13aGVuPVxcXCJ5ZWFyXFxcIiB0YWJpbmRleD1cXFwiMFxcXCIgY2xhc3M9XFxcInVpYi15ZWFycGlja2VyXFxcIj48L2Rpdj5cXG5cIiArXG4gICAgXCI8L2Rpdj5cXG5cIiArXG4gICAgXCJcIik7XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKFwidWliL3RlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbFwiLFxuICAgIFwiPHRhYmxlIHJvbGU9XFxcImdyaWRcXFwiIGFyaWEtbGFiZWxsZWRieT1cXFwie3s6OnVuaXF1ZUlkfX0tdGl0bGVcXFwiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD1cXFwie3thY3RpdmVEYXRlSWR9fVxcXCI+XFxuXCIgK1xuICAgIFwiICA8dGhlYWQ+XFxuXCIgK1xuICAgIFwiICAgIDx0cj5cXG5cIiArXG4gICAgXCIgICAgICA8dGg+PGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCB1aWItbGVmdFxcXCIgbmctY2xpY2s9XFxcIm1vdmUoLTEpXFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjxpIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnRcXFwiPjwvaT48c3BhbiBjbGFzcz1cXFwic3Itb25seVxcXCI+cHJldmlvdXM8L3NwYW4+PC9idXR0b24+PC90aD5cXG5cIiArXG4gICAgXCIgICAgICA8dGggY29sc3Bhbj1cXFwie3s6OjUgKyBzaG93V2Vla3N9fVxcXCI+PGJ1dHRvbiBpZD1cXFwie3s6OnVuaXF1ZUlkfX0tdGl0bGVcXFwiIHJvbGU9XFxcImhlYWRpbmdcXFwiIGFyaWEtbGl2ZT1cXFwiYXNzZXJ0aXZlXFxcIiBhcmlhLWF0b21pYz1cXFwidHJ1ZVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSB1aWItdGl0bGVcXFwiIG5nLWNsaWNrPVxcXCJ0b2dnbGVNb2RlKClcXFwiIG5nLWRpc2FibGVkPVxcXCJkYXRlcGlja2VyTW9kZSA9PT0gbWF4TW9kZVxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XFxuXCIgK1xuICAgIFwiICAgICAgPHRoPjxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IHVpYi1yaWdodFxcXCIgbmctY2xpY2s9XFxcIm1vdmUoMSlcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PGkgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHRcXFwiPjwvaT48c3BhbiBjbGFzcz1cXFwic3Itb25seVxcXCI+bmV4dDwvc3Bhbj48L2J1dHRvbj48L3RoPlxcblwiICtcbiAgICBcIiAgICA8L3RyPlxcblwiICtcbiAgICBcIiAgICA8dHI+XFxuXCIgK1xuICAgIFwiICAgICAgPHRoIG5nLWlmPVxcXCJzaG93V2Vla3NcXFwiIGNsYXNzPVxcXCJ0ZXh0LWNlbnRlclxcXCI+PC90aD5cXG5cIiArXG4gICAgXCIgICAgICA8dGggbmctcmVwZWF0PVxcXCJsYWJlbCBpbiA6OmxhYmVscyB0cmFjayBieSAkaW5kZXhcXFwiIGNsYXNzPVxcXCJ0ZXh0LWNlbnRlclxcXCI+PHNtYWxsIGFyaWEtbGFiZWw9XFxcInt7OjpsYWJlbC5mdWxsfX1cXFwiPnt7OjpsYWJlbC5hYmJyfX08L3NtYWxsPjwvdGg+XFxuXCIgK1xuICAgIFwiICAgIDwvdHI+XFxuXCIgK1xuICAgIFwiICA8L3RoZWFkPlxcblwiICtcbiAgICBcIiAgPHRib2R5PlxcblwiICtcbiAgICBcIiAgICA8dHIgY2xhc3M9XFxcInVpYi13ZWVrc1xcXCIgbmctcmVwZWF0PVxcXCJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXhcXFwiIHJvbGU9XFxcInJvd1xcXCI+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIG5nLWlmPVxcXCJzaG93V2Vla3NcXFwiIGNsYXNzPVxcXCJ0ZXh0LWNlbnRlciBoNlxcXCI+PGVtPnt7IHdlZWtOdW1iZXJzWyRpbmRleF0gfX08L2VtPjwvdGQ+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIG5nLXJlcGVhdD1cXFwiZHQgaW4gcm93XFxcIiBjbGFzcz1cXFwidWliLWRheSB0ZXh0LWNlbnRlclxcXCIgcm9sZT1cXFwiZ3JpZGNlbGxcXFwiXFxuXCIgK1xuICAgIFwiICAgICAgICBpZD1cXFwie3s6OmR0LnVpZH19XFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgbmctY2xhc3M9XFxcIjo6ZHQuY3VzdG9tQ2xhc3NcXFwiPlxcblwiICtcbiAgICBcIiAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtXFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgICB1aWItaXMtY2xhc3M9XFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgICAgICdidG4taW5mbycgZm9yIHNlbGVjdGVkRHQsXFxuXCIgK1xuICAgIFwiICAgICAgICAgICAgJ2FjdGl2ZScgZm9yIGFjdGl2ZUR0XFxuXCIgK1xuICAgIFwiICAgICAgICAgICAgb24gZHRcXFwiXFxuXCIgK1xuICAgIFwiICAgICAgICAgIG5nLWNsaWNrPVxcXCJzZWxlY3QoZHQuZGF0ZSlcXFwiXFxuXCIgK1xuICAgIFwiICAgICAgICAgIG5nLWRpc2FibGVkPVxcXCI6OmR0LmRpc2FibGVkXFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgICB0YWJpbmRleD1cXFwiLTFcXFwiPjxzcGFuIG5nLWNsYXNzPVxcXCI6OnsndGV4dC1tdXRlZCc6IGR0LnNlY29uZGFyeSwgJ3RleHQtaW5mbyc6IGR0LmN1cnJlbnR9XFxcIj57ezo6ZHQubGFiZWx9fTwvc3Bhbj48L2J1dHRvbj5cXG5cIiArXG4gICAgXCIgICAgICA8L3RkPlxcblwiICtcbiAgICBcIiAgICA8L3RyPlxcblwiICtcbiAgICBcIiAgPC90Ym9keT5cXG5cIiArXG4gICAgXCI8L3RhYmxlPlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbFwiLFxuICAgIFwiPHRhYmxlIHJvbGU9XFxcImdyaWRcXFwiIGFyaWEtbGFiZWxsZWRieT1cXFwie3s6OnVuaXF1ZUlkfX0tdGl0bGVcXFwiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD1cXFwie3thY3RpdmVEYXRlSWR9fVxcXCI+XFxuXCIgK1xuICAgIFwiICA8dGhlYWQ+XFxuXCIgK1xuICAgIFwiICAgIDx0cj5cXG5cIiArXG4gICAgXCIgICAgICA8dGg+PGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCB1aWItbGVmdFxcXCIgbmctY2xpY2s9XFxcIm1vdmUoLTEpXFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjxpIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnRcXFwiPjwvaT48c3BhbiBjbGFzcz1cXFwic3Itb25seVxcXCI+cHJldmlvdXM8L3NwYW4+PC9idXR0b24+PC90aD5cXG5cIiArXG4gICAgXCIgICAgICA8dGggY29sc3Bhbj1cXFwie3s6OnllYXJIZWFkZXJDb2xzcGFufX1cXFwiPjxidXR0b24gaWQ9XFxcInt7Ojp1bmlxdWVJZH19LXRpdGxlXFxcIiByb2xlPVxcXCJoZWFkaW5nXFxcIiBhcmlhLWxpdmU9XFxcImFzc2VydGl2ZVxcXCIgYXJpYS1hdG9taWM9XFxcInRydWVcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdCBidG4tc20gdWliLXRpdGxlXFxcIiBuZy1jbGljaz1cXFwidG9nZ2xlTW9kZSgpXFxcIiBuZy1kaXNhYmxlZD1cXFwiZGF0ZXBpY2tlck1vZGUgPT09IG1heE1vZGVcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxcblwiICtcbiAgICBcIiAgICAgIDx0aD48YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCB1aWItcmlnaHRcXFwiIG5nLWNsaWNrPVxcXCJtb3ZlKDEpXFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjxpIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0XFxcIj48L2k+PHNwYW4gY2xhc3M9XFxcInNyLW9ubHlcXFwiPm5leHQ8L3NwYW4+PC9pPjwvYnV0dG9uPjwvdGg+XFxuXCIgK1xuICAgIFwiICAgIDwvdHI+XFxuXCIgK1xuICAgIFwiICA8L3RoZWFkPlxcblwiICtcbiAgICBcIiAgPHRib2R5PlxcblwiICtcbiAgICBcIiAgICA8dHIgY2xhc3M9XFxcInVpYi1tb250aHNcXFwiIG5nLXJlcGVhdD1cXFwicm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4XFxcIiByb2xlPVxcXCJyb3dcXFwiPlxcblwiICtcbiAgICBcIiAgICAgIDx0ZCBuZy1yZXBlYXQ9XFxcImR0IGluIHJvd1xcXCIgY2xhc3M9XFxcInVpYi1tb250aCB0ZXh0LWNlbnRlclxcXCIgcm9sZT1cXFwiZ3JpZGNlbGxcXFwiXFxuXCIgK1xuICAgIFwiICAgICAgICBpZD1cXFwie3s6OmR0LnVpZH19XFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgbmctY2xhc3M9XFxcIjo6ZHQuY3VzdG9tQ2xhc3NcXFwiPlxcblwiICtcbiAgICBcIiAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHRcXFwiXFxuXCIgK1xuICAgIFwiICAgICAgICAgIHVpYi1pcy1jbGFzcz1cXFwiXFxuXCIgK1xuICAgIFwiICAgICAgICAgICAgJ2J0bi1pbmZvJyBmb3Igc2VsZWN0ZWREdCxcXG5cIiArXG4gICAgXCIgICAgICAgICAgICAnYWN0aXZlJyBmb3IgYWN0aXZlRHRcXG5cIiArXG4gICAgXCIgICAgICAgICAgICBvbiBkdFxcXCJcXG5cIiArXG4gICAgXCIgICAgICAgICAgbmctY2xpY2s9XFxcInNlbGVjdChkdC5kYXRlKVxcXCJcXG5cIiArXG4gICAgXCIgICAgICAgICAgbmctZGlzYWJsZWQ9XFxcIjo6ZHQuZGlzYWJsZWRcXFwiXFxuXCIgK1xuICAgIFwiICAgICAgICAgIHRhYmluZGV4PVxcXCItMVxcXCI+PHNwYW4gbmctY2xhc3M9XFxcIjo6eyd0ZXh0LWluZm8nOiBkdC5jdXJyZW50fVxcXCI+e3s6OmR0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XFxuXCIgK1xuICAgIFwiICAgICAgPC90ZD5cXG5cIiArXG4gICAgXCIgICAgPC90cj5cXG5cIiArXG4gICAgXCIgIDwvdGJvZHk+XFxuXCIgK1xuICAgIFwiPC90YWJsZT5cXG5cIiArXG4gICAgXCJcIik7XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKFwidWliL3RlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sXCIsXG4gICAgXCI8dGFibGUgcm9sZT1cXFwiZ3JpZFxcXCIgYXJpYS1sYWJlbGxlZGJ5PVxcXCJ7ezo6dW5pcXVlSWR9fS10aXRsZVxcXCIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PVxcXCJ7e2FjdGl2ZURhdGVJZH19XFxcIj5cXG5cIiArXG4gICAgXCIgIDx0aGVhZD5cXG5cIiArXG4gICAgXCIgICAgPHRyPlxcblwiICtcbiAgICBcIiAgICAgIDx0aD48YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IHVpYi1sZWZ0XFxcIiBuZy1jbGljaz1cXFwibW92ZSgtMSlcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PGkgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdFxcXCI+PC9pPjxzcGFuIGNsYXNzPVxcXCJzci1vbmx5XFxcIj5wcmV2aW91czwvc3Bhbj48L2J1dHRvbj48L3RoPlxcblwiICtcbiAgICBcIiAgICAgIDx0aCBjb2xzcGFuPVxcXCJ7ezo6Y29sdW1ucyAtIDJ9fVxcXCI+PGJ1dHRvbiBpZD1cXFwie3s6OnVuaXF1ZUlkfX0tdGl0bGVcXFwiIHJvbGU9XFxcImhlYWRpbmdcXFwiIGFyaWEtbGl2ZT1cXFwiYXNzZXJ0aXZlXFxcIiBhcmlhLWF0b21pYz1cXFwidHJ1ZVxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSB1aWItdGl0bGVcXFwiIG5nLWNsaWNrPVxcXCJ0b2dnbGVNb2RlKClcXFwiIG5nLWRpc2FibGVkPVxcXCJkYXRlcGlja2VyTW9kZSA9PT0gbWF4TW9kZVxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XFxuXCIgK1xuICAgIFwiICAgICAgPHRoPjxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IHVpYi1yaWdodFxcXCIgbmctY2xpY2s9XFxcIm1vdmUoMSlcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PGkgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHRcXFwiPjwvaT48c3BhbiBjbGFzcz1cXFwic3Itb25seVxcXCI+bmV4dDwvc3Bhbj48L2J1dHRvbj48L3RoPlxcblwiICtcbiAgICBcIiAgICA8L3RyPlxcblwiICtcbiAgICBcIiAgPC90aGVhZD5cXG5cIiArXG4gICAgXCIgIDx0Ym9keT5cXG5cIiArXG4gICAgXCIgICAgPHRyIGNsYXNzPVxcXCJ1aWIteWVhcnNcXFwiIG5nLXJlcGVhdD1cXFwicm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4XFxcIiByb2xlPVxcXCJyb3dcXFwiPlxcblwiICtcbiAgICBcIiAgICAgIDx0ZCBuZy1yZXBlYXQ9XFxcImR0IGluIHJvd1xcXCIgY2xhc3M9XFxcInVpYi15ZWFyIHRleHQtY2VudGVyXFxcIiByb2xlPVxcXCJncmlkY2VsbFxcXCJcXG5cIiArXG4gICAgXCIgICAgICAgIGlkPVxcXCJ7ezo6ZHQudWlkfX1cXFwiXFxuXCIgK1xuICAgIFwiICAgICAgICBuZy1jbGFzcz1cXFwiOjpkdC5jdXN0b21DbGFzc1xcXCI+XFxuXCIgK1xuICAgIFwiICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdFxcXCJcXG5cIiArXG4gICAgXCIgICAgICAgICAgdWliLWlzLWNsYXNzPVxcXCJcXG5cIiArXG4gICAgXCIgICAgICAgICAgICAnYnRuLWluZm8nIGZvciBzZWxlY3RlZER0LFxcblwiICtcbiAgICBcIiAgICAgICAgICAgICdhY3RpdmUnIGZvciBhY3RpdmVEdFxcblwiICtcbiAgICBcIiAgICAgICAgICAgIG9uIGR0XFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgICBuZy1jbGljaz1cXFwic2VsZWN0KGR0LmRhdGUpXFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgICBuZy1kaXNhYmxlZD1cXFwiOjpkdC5kaXNhYmxlZFxcXCJcXG5cIiArXG4gICAgXCIgICAgICAgICAgdGFiaW5kZXg9XFxcIi0xXFxcIj48c3BhbiBuZy1jbGFzcz1cXFwiOjp7J3RleHQtaW5mbyc6IGR0LmN1cnJlbnR9XFxcIj57ezo6ZHQubGFiZWx9fTwvc3Bhbj48L2J1dHRvbj5cXG5cIiArXG4gICAgXCIgICAgICA8L3RkPlxcblwiICtcbiAgICBcIiAgICA8L3RyPlxcblwiICtcbiAgICBcIiAgPC90Ym9keT5cXG5cIiArXG4gICAgXCI8L3RhYmxlPlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvZGF0ZXBpY2tlclBvcHVwL3BvcHVwLmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvZGF0ZXBpY2tlclBvcHVwL3BvcHVwLmh0bWxcIixcbiAgICBcIjx1bCByb2xlPVxcXCJwcmVzZW50YXRpb25cXFwiIGNsYXNzPVxcXCJ1aWItZGF0ZXBpY2tlci1wb3B1cCBkcm9wZG93bi1tZW51IHVpYi1wb3NpdGlvbi1tZWFzdXJlXFxcIiBkcm9wZG93bi1uZXN0ZWQgbmctaWY9XFxcImlzT3BlblxcXCIgbmcta2V5ZG93bj1cXFwia2V5ZG93bigkZXZlbnQpXFxcIiBuZy1jbGljaz1cXFwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXFxcIj5cXG5cIiArXG4gICAgXCIgIDxsaSBuZy10cmFuc2NsdWRlPjwvbGk+XFxuXCIgK1xuICAgIFwiICA8bGkgbmctaWY9XFxcInNob3dCdXR0b25CYXJcXFwiIGNsYXNzPVxcXCJ1aWItYnV0dG9uLWJhclxcXCI+XFxuXCIgK1xuICAgIFwiICAgIDxzcGFuIGNsYXNzPVxcXCJidG4tZ3JvdXAgcHVsbC1sZWZ0XFxcIj5cXG5cIiArXG4gICAgXCIgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tc20gYnRuLWluZm8gdWliLWRhdGVwaWNrZXItY3VycmVudFxcXCIgbmctY2xpY2s9XFxcInNlbGVjdCgndG9kYXknLCAkZXZlbnQpXFxcIiBuZy1kaXNhYmxlZD1cXFwiaXNEaXNhYmxlZCgndG9kYXknKVxcXCI+e3sgZ2V0VGV4dCgnY3VycmVudCcpIH19PC9idXR0b24+XFxuXCIgK1xuICAgIFwiICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXNtIGJ0bi1kYW5nZXIgdWliLWNsZWFyXFxcIiBuZy1jbGljaz1cXFwic2VsZWN0KG51bGwsICRldmVudClcXFwiPnt7IGdldFRleHQoJ2NsZWFyJykgfX08L2J1dHRvbj5cXG5cIiArXG4gICAgXCIgICAgPC9zcGFuPlxcblwiICtcbiAgICBcIiAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tc20gYnRuLXN1Y2Nlc3MgcHVsbC1yaWdodCB1aWItY2xvc2VcXFwiIG5nLWNsaWNrPVxcXCJjbG9zZSgkZXZlbnQpXFxcIj57eyBnZXRUZXh0KCdjbG9zZScpIH19PC9idXR0b24+XFxuXCIgK1xuICAgIFwiICA8L2xpPlxcblwiICtcbiAgICBcIjwvdWw+XFxuXCIgK1xuICAgIFwiXCIpO1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZShcInVpYi90ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbFwiLFxuICAgIFwiPGRpdiBjbGFzcz1cXFwibW9kYWwtZGlhbG9nIHt7c2l6ZSA/ICdtb2RhbC0nICsgc2l6ZSA6ICcnfX1cXFwiPjxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiIHVpYi1tb2RhbC10cmFuc2NsdWRlPjwvZGl2PjwvZGl2PlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvcGFnZXIvcGFnZXIuaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9wYWdlci9wYWdlci5odG1sXCIsXG4gICAgXCI8bGkgbmctY2xhc3M9XFxcIntkaXNhYmxlZDogbm9QcmV2aW91cygpfHxuZ0Rpc2FibGVkLCBwcmV2aW91czogYWxpZ259XFxcIj48YSBocmVmIG5nLWNsaWNrPVxcXCJzZWxlY3RQYWdlKHBhZ2UgLSAxLCAkZXZlbnQpXFxcIiBuZy1kaXNhYmxlZD1cXFwibm9QcmV2aW91cygpfHxuZ0Rpc2FibGVkXFxcIiB1aWItdGFiaW5kZXgtdG9nZ2xlPnt7OjpnZXRUZXh0KCdwcmV2aW91cycpfX08L2E+PC9saT5cXG5cIiArXG4gICAgXCI8bGkgbmctY2xhc3M9XFxcIntkaXNhYmxlZDogbm9OZXh0KCl8fG5nRGlzYWJsZWQsIG5leHQ6IGFsaWdufVxcXCI+PGEgaHJlZiBuZy1jbGljaz1cXFwic2VsZWN0UGFnZShwYWdlICsgMSwgJGV2ZW50KVxcXCIgbmctZGlzYWJsZWQ9XFxcIm5vTmV4dCgpfHxuZ0Rpc2FibGVkXFxcIiB1aWItdGFiaW5kZXgtdG9nZ2xlPnt7OjpnZXRUZXh0KCduZXh0Jyl9fTwvYT48L2xpPlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWxcIixcbiAgICBcIjxsaSByb2xlPVxcXCJtZW51aXRlbVxcXCIgbmctaWY9XFxcIjo6Ym91bmRhcnlMaW5rc1xcXCIgbmctY2xhc3M9XFxcIntkaXNhYmxlZDogbm9QcmV2aW91cygpfHxuZ0Rpc2FibGVkfVxcXCIgY2xhc3M9XFxcInBhZ2luYXRpb24tZmlyc3RcXFwiPjxhIGhyZWYgbmctY2xpY2s9XFxcInNlbGVjdFBhZ2UoMSwgJGV2ZW50KVxcXCIgbmctZGlzYWJsZWQ9XFxcIm5vUHJldmlvdXMoKXx8bmdEaXNhYmxlZFxcXCIgdWliLXRhYmluZGV4LXRvZ2dsZT57ezo6Z2V0VGV4dCgnZmlyc3QnKX19PC9hPjwvbGk+XFxuXCIgK1xuICAgIFwiPGxpIHJvbGU9XFxcIm1lbnVpdGVtXFxcIiBuZy1pZj1cXFwiOjpkaXJlY3Rpb25MaW5rc1xcXCIgbmctY2xhc3M9XFxcIntkaXNhYmxlZDogbm9QcmV2aW91cygpfHxuZ0Rpc2FibGVkfVxcXCIgY2xhc3M9XFxcInBhZ2luYXRpb24tcHJldlxcXCI+PGEgaHJlZiBuZy1jbGljaz1cXFwic2VsZWN0UGFnZShwYWdlIC0gMSwgJGV2ZW50KVxcXCIgbmctZGlzYWJsZWQ9XFxcIm5vUHJldmlvdXMoKXx8bmdEaXNhYmxlZFxcXCIgdWliLXRhYmluZGV4LXRvZ2dsZT57ezo6Z2V0VGV4dCgncHJldmlvdXMnKX19PC9hPjwvbGk+XFxuXCIgK1xuICAgIFwiPGxpIHJvbGU9XFxcIm1lbnVpdGVtXFxcIiBuZy1yZXBlYXQ9XFxcInBhZ2UgaW4gcGFnZXMgdHJhY2sgYnkgJGluZGV4XFxcIiBuZy1jbGFzcz1cXFwie2FjdGl2ZTogcGFnZS5hY3RpdmUsZGlzYWJsZWQ6IG5nRGlzYWJsZWQmJiFwYWdlLmFjdGl2ZX1cXFwiIGNsYXNzPVxcXCJwYWdpbmF0aW9uLXBhZ2VcXFwiPjxhIGhyZWYgbmctY2xpY2s9XFxcInNlbGVjdFBhZ2UocGFnZS5udW1iZXIsICRldmVudClcXFwiIG5nLWRpc2FibGVkPVxcXCJuZ0Rpc2FibGVkJiYhcGFnZS5hY3RpdmVcXFwiIHVpYi10YWJpbmRleC10b2dnbGU+e3twYWdlLnRleHR9fTwvYT48L2xpPlxcblwiICtcbiAgICBcIjxsaSByb2xlPVxcXCJtZW51aXRlbVxcXCIgbmctaWY9XFxcIjo6ZGlyZWN0aW9uTGlua3NcXFwiIG5nLWNsYXNzPVxcXCJ7ZGlzYWJsZWQ6IG5vTmV4dCgpfHxuZ0Rpc2FibGVkfVxcXCIgY2xhc3M9XFxcInBhZ2luYXRpb24tbmV4dFxcXCI+PGEgaHJlZiBuZy1jbGljaz1cXFwic2VsZWN0UGFnZShwYWdlICsgMSwgJGV2ZW50KVxcXCIgbmctZGlzYWJsZWQ9XFxcIm5vTmV4dCgpfHxuZ0Rpc2FibGVkXFxcIiB1aWItdGFiaW5kZXgtdG9nZ2xlPnt7OjpnZXRUZXh0KCduZXh0Jyl9fTwvYT48L2xpPlxcblwiICtcbiAgICBcIjxsaSByb2xlPVxcXCJtZW51aXRlbVxcXCIgbmctaWY9XFxcIjo6Ym91bmRhcnlMaW5rc1xcXCIgbmctY2xhc3M9XFxcIntkaXNhYmxlZDogbm9OZXh0KCl8fG5nRGlzYWJsZWR9XFxcIiBjbGFzcz1cXFwicGFnaW5hdGlvbi1sYXN0XFxcIj48YSBocmVmIG5nLWNsaWNrPVxcXCJzZWxlY3RQYWdlKHRvdGFsUGFnZXMsICRldmVudClcXFwiIG5nLWRpc2FibGVkPVxcXCJub05leHQoKXx8bmdEaXNhYmxlZFxcXCIgdWliLXRhYmluZGV4LXRvZ2dsZT57ezo6Z2V0VGV4dCgnbGFzdCcpfX08L2E+PC9saT5cXG5cIiArXG4gICAgXCJcIik7XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKFwidWliL3RlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXBvcHVwLmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtcG9wdXAuaHRtbFwiLFxuICAgIFwiPGRpdiBjbGFzcz1cXFwidG9vbHRpcC1hcnJvd1xcXCI+PC9kaXY+XFxuXCIgK1xuICAgIFwiPGRpdiBjbGFzcz1cXFwidG9vbHRpcC1pbm5lclxcXCIgbmctYmluZC1odG1sPVxcXCJjb250ZW50RXhwKClcXFwiPjwvZGl2PlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWxcIixcbiAgICBcIjxkaXYgY2xhc3M9XFxcInRvb2x0aXAtYXJyb3dcXFwiPjwvZGl2PlxcblwiICtcbiAgICBcIjxkaXYgY2xhc3M9XFxcInRvb2x0aXAtaW5uZXJcXFwiIG5nLWJpbmQ9XFxcImNvbnRlbnRcXFwiPjwvZGl2PlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXRlbXBsYXRlLXBvcHVwLmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXRlbXBsYXRlLXBvcHVwLmh0bWxcIixcbiAgICBcIjxkaXYgY2xhc3M9XFxcInRvb2x0aXAtYXJyb3dcXFwiPjwvZGl2PlxcblwiICtcbiAgICBcIjxkaXYgY2xhc3M9XFxcInRvb2x0aXAtaW5uZXJcXFwiXFxuXCIgK1xuICAgIFwiICB1aWItdG9vbHRpcC10ZW1wbGF0ZS10cmFuc2NsdWRlPVxcXCJjb250ZW50RXhwKClcXFwiXFxuXCIgK1xuICAgIFwiICB0b29sdGlwLXRlbXBsYXRlLXRyYW5zY2x1ZGUtc2NvcGU9XFxcIm9yaWdpblNjb3BlKClcXFwiPjwvZGl2PlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLWh0bWwuaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXItaHRtbC5odG1sXCIsXG4gICAgXCI8ZGl2IGNsYXNzPVxcXCJhcnJvd1xcXCI+PC9kaXY+XFxuXCIgK1xuICAgIFwiXFxuXCIgK1xuICAgIFwiPGRpdiBjbGFzcz1cXFwicG9wb3Zlci1pbm5lclxcXCI+XFxuXCIgK1xuICAgIFwiICAgIDxoMyBjbGFzcz1cXFwicG9wb3Zlci10aXRsZVxcXCIgbmctYmluZD1cXFwidWliVGl0bGVcXFwiIG5nLWlmPVxcXCJ1aWJUaXRsZVxcXCI+PC9oMz5cXG5cIiArXG4gICAgXCIgICAgPGRpdiBjbGFzcz1cXFwicG9wb3Zlci1jb250ZW50XFxcIiBuZy1iaW5kLWh0bWw9XFxcImNvbnRlbnRFeHAoKVxcXCI+PC9kaXY+XFxuXCIgK1xuICAgIFwiPC9kaXY+XFxuXCIgK1xuICAgIFwiXCIpO1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZShcInVpYi90ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXItdGVtcGxhdGUuaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXItdGVtcGxhdGUuaHRtbFwiLFxuICAgIFwiPGRpdiBjbGFzcz1cXFwiYXJyb3dcXFwiPjwvZGl2PlxcblwiICtcbiAgICBcIlxcblwiICtcbiAgICBcIjxkaXYgY2xhc3M9XFxcInBvcG92ZXItaW5uZXJcXFwiPlxcblwiICtcbiAgICBcIiAgICA8aDMgY2xhc3M9XFxcInBvcG92ZXItdGl0bGVcXFwiIG5nLWJpbmQ9XFxcInVpYlRpdGxlXFxcIiBuZy1pZj1cXFwidWliVGl0bGVcXFwiPjwvaDM+XFxuXCIgK1xuICAgIFwiICAgIDxkaXYgY2xhc3M9XFxcInBvcG92ZXItY29udGVudFxcXCJcXG5cIiArXG4gICAgXCIgICAgICB1aWItdG9vbHRpcC10ZW1wbGF0ZS10cmFuc2NsdWRlPVxcXCJjb250ZW50RXhwKClcXFwiXFxuXCIgK1xuICAgIFwiICAgICAgdG9vbHRpcC10ZW1wbGF0ZS10cmFuc2NsdWRlLXNjb3BlPVxcXCJvcmlnaW5TY29wZSgpXFxcIj48L2Rpdj5cXG5cIiArXG4gICAgXCI8L2Rpdj5cXG5cIiArXG4gICAgXCJcIik7XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKFwidWliL3RlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sXCIsXG4gICAgXCI8ZGl2IGNsYXNzPVxcXCJhcnJvd1xcXCI+PC9kaXY+XFxuXCIgK1xuICAgIFwiXFxuXCIgK1xuICAgIFwiPGRpdiBjbGFzcz1cXFwicG9wb3Zlci1pbm5lclxcXCI+XFxuXCIgK1xuICAgIFwiICAgIDxoMyBjbGFzcz1cXFwicG9wb3Zlci10aXRsZVxcXCIgbmctYmluZD1cXFwidWliVGl0bGVcXFwiIG5nLWlmPVxcXCJ1aWJUaXRsZVxcXCI+PC9oMz5cXG5cIiArXG4gICAgXCIgICAgPGRpdiBjbGFzcz1cXFwicG9wb3Zlci1jb250ZW50XFxcIiBuZy1iaW5kPVxcXCJjb250ZW50XFxcIj48L2Rpdj5cXG5cIiArXG4gICAgXCI8L2Rpdj5cXG5cIiArXG4gICAgXCJcIik7XG59XSk7XG5cbmFuZ3VsYXIubW9kdWxlKFwidWliL3RlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sXCIsXG4gICAgXCI8ZGl2IGNsYXNzPVxcXCJwcm9ncmVzcy1iYXJcXFwiIG5nLWNsYXNzPVxcXCJ0eXBlICYmICdwcm9ncmVzcy1iYXItJyArIHR5cGVcXFwiIHJvbGU9XFxcInByb2dyZXNzYmFyXFxcIiBhcmlhLXZhbHVlbm93PVxcXCJ7e3ZhbHVlfX1cXFwiIGFyaWEtdmFsdWVtaW49XFxcIjBcXFwiIGFyaWEtdmFsdWVtYXg9XFxcInt7bWF4fX1cXFwiIG5nLXN0eWxlPVxcXCJ7d2lkdGg6IChwZXJjZW50IDwgMTAwID8gcGVyY2VudCA6IDEwMCkgKyAnJSd9XFxcIiBhcmlhLXZhbHVldGV4dD1cXFwie3twZXJjZW50IHwgbnVtYmVyOjB9fSVcXFwiIGFyaWEtbGFiZWxsZWRieT1cXFwie3s6OnRpdGxlfX1cXFwiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XFxuXCIgK1xuICAgIFwiXCIpO1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZShcInVpYi90ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWxcIixcbiAgICBcIjxkaXYgY2xhc3M9XFxcInByb2dyZXNzXFxcIiBuZy10cmFuc2NsdWRlIGFyaWEtbGFiZWxsZWRieT1cXFwie3s6OnRpdGxlfX1cXFwiPjwvZGl2PlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbFwiLCBbXSkucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dChcInVpYi90ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sXCIsXG4gICAgXCI8ZGl2IGNsYXNzPVxcXCJwcm9ncmVzc1xcXCI+XFxuXCIgK1xuICAgIFwiICA8ZGl2IGNsYXNzPVxcXCJwcm9ncmVzcy1iYXJcXFwiIG5nLWNsYXNzPVxcXCJ0eXBlICYmICdwcm9ncmVzcy1iYXItJyArIHR5cGVcXFwiIHJvbGU9XFxcInByb2dyZXNzYmFyXFxcIiBhcmlhLXZhbHVlbm93PVxcXCJ7e3ZhbHVlfX1cXFwiIGFyaWEtdmFsdWVtaW49XFxcIjBcXFwiIGFyaWEtdmFsdWVtYXg9XFxcInt7bWF4fX1cXFwiIG5nLXN0eWxlPVxcXCJ7d2lkdGg6IChwZXJjZW50IDwgMTAwID8gcGVyY2VudCA6IDEwMCkgKyAnJSd9XFxcIiBhcmlhLXZhbHVldGV4dD1cXFwie3twZXJjZW50IHwgbnVtYmVyOjB9fSVcXFwiIGFyaWEtbGFiZWxsZWRieT1cXFwie3s6OnRpdGxlfX1cXFwiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XFxuXCIgK1xuICAgIFwiPC9kaXY+XFxuXCIgK1xuICAgIFwiXCIpO1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZShcInVpYi90ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sXCIsXG4gICAgXCI8c3BhbiBuZy1tb3VzZWxlYXZlPVxcXCJyZXNldCgpXFxcIiBuZy1rZXlkb3duPVxcXCJvbktleWRvd24oJGV2ZW50KVxcXCIgdGFiaW5kZXg9XFxcIjBcXFwiIHJvbGU9XFxcInNsaWRlclxcXCIgYXJpYS12YWx1ZW1pbj1cXFwiMFxcXCIgYXJpYS12YWx1ZW1heD1cXFwie3tyYW5nZS5sZW5ndGh9fVxcXCIgYXJpYS12YWx1ZW5vdz1cXFwie3t2YWx1ZX19XFxcIiBhcmlhLXZhbHVldGV4dD1cXFwie3t0aXRsZX19XFxcIj5cXG5cIiArXG4gICAgXCIgICAgPHNwYW4gbmctcmVwZWF0LXN0YXJ0PVxcXCJyIGluIHJhbmdlIHRyYWNrIGJ5ICRpbmRleFxcXCIgY2xhc3M9XFxcInNyLW9ubHlcXFwiPih7eyAkaW5kZXggPCB2YWx1ZSA/ICcqJyA6ICcgJyB9fSk8L3NwYW4+XFxuXCIgK1xuICAgIFwiICAgIDxpIG5nLXJlcGVhdC1lbmQgbmctbW91c2VlbnRlcj1cXFwiZW50ZXIoJGluZGV4ICsgMSlcXFwiIG5nLWNsaWNrPVxcXCJyYXRlKCRpbmRleCArIDEpXFxcIiBjbGFzcz1cXFwiZ2x5cGhpY29uXFxcIiBuZy1jbGFzcz1cXFwiJGluZGV4IDwgdmFsdWUgJiYgKHIuc3RhdGVPbiB8fCAnZ2x5cGhpY29uLXN0YXInKSB8fCAoci5zdGF0ZU9mZiB8fCAnZ2x5cGhpY29uLXN0YXItZW1wdHknKVxcXCIgbmctYXR0ci10aXRsZT1cXFwie3tyLnRpdGxlfX1cXFwiPjwvaT5cXG5cIiArXG4gICAgXCI8L3NwYW4+XFxuXCIgK1xuICAgIFwiXCIpO1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZShcInVpYi90ZW1wbGF0ZS90YWJzL3RhYi5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL3RhYnMvdGFiLmh0bWxcIixcbiAgICBcIjxsaSBuZy1jbGFzcz1cXFwiW3thY3RpdmU6IGFjdGl2ZSwgZGlzYWJsZWQ6IGRpc2FibGVkfSwgY2xhc3Nlc11cXFwiIGNsYXNzPVxcXCJ1aWItdGFiIG5hdi1pdGVtXFxcIj5cXG5cIiArXG4gICAgXCIgIDxhIGhyZWYgbmctY2xpY2s9XFxcInNlbGVjdCgkZXZlbnQpXFxcIiBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIHVpYi10YWItaGVhZGluZy10cmFuc2NsdWRlPnt7aGVhZGluZ319PC9hPlxcblwiICtcbiAgICBcIjwvbGk+XFxuXCIgK1xuICAgIFwiXCIpO1xufV0pO1xuXG5hbmd1bGFyLm1vZHVsZShcInVpYi90ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWxcIixcbiAgICBcIjxkaXY+XFxuXCIgK1xuICAgIFwiICA8dWwgY2xhc3M9XFxcIm5hdiBuYXYte3t0YWJzZXQudHlwZSB8fCAndGFicyd9fVxcXCIgbmctY2xhc3M9XFxcInsnbmF2LXN0YWNrZWQnOiB2ZXJ0aWNhbCwgJ25hdi1qdXN0aWZpZWQnOiBqdXN0aWZpZWR9XFxcIiBuZy10cmFuc2NsdWRlPjwvdWw+XFxuXCIgK1xuICAgIFwiICA8ZGl2IGNsYXNzPVxcXCJ0YWItY29udGVudFxcXCI+XFxuXCIgK1xuICAgIFwiICAgIDxkaXYgY2xhc3M9XFxcInRhYi1wYW5lXFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgIG5nLXJlcGVhdD1cXFwidGFiIGluIHRhYnNldC50YWJzXFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgIG5nLWNsYXNzPVxcXCJ7YWN0aXZlOiB0YWJzZXQuYWN0aXZlID09PSB0YWIuaW5kZXh9XFxcIlxcblwiICtcbiAgICBcIiAgICAgICAgIHVpYi10YWItY29udGVudC10cmFuc2NsdWRlPVxcXCJ0YWJcXFwiPlxcblwiICtcbiAgICBcIiAgICA8L2Rpdj5cXG5cIiArXG4gICAgXCIgIDwvZGl2PlxcblwiICtcbiAgICBcIjwvZGl2PlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWxcIiwgW10pLnJ1bihbXCIkdGVtcGxhdGVDYWNoZVwiLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoXCJ1aWIvdGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWxcIixcbiAgICBcIjx0YWJsZSBjbGFzcz1cXFwidWliLXRpbWVwaWNrZXJcXFwiPlxcblwiICtcbiAgICBcIiAgPHRib2R5PlxcblwiICtcbiAgICBcIiAgICA8dHIgY2xhc3M9XFxcInRleHQtY2VudGVyXFxcIiBuZy1zaG93PVxcXCI6OnNob3dTcGlubmVyc1xcXCI+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIGNsYXNzPVxcXCJ1aWItaW5jcmVtZW50IGhvdXJzXFxcIj48YSBuZy1jbGljaz1cXFwiaW5jcmVtZW50SG91cnMoKVxcXCIgbmctY2xhc3M9XFxcIntkaXNhYmxlZDogbm9JbmNyZW1lbnRIb3VycygpfVxcXCIgY2xhc3M9XFxcImJ0biBidG4tbGlua1xcXCIgbmctZGlzYWJsZWQ9XFxcIm5vSW5jcmVtZW50SG91cnMoKVxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj48c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXVwXFxcIj48L3NwYW4+PC9hPjwvdGQ+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkPiZuYnNwOzwvdGQ+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIGNsYXNzPVxcXCJ1aWItaW5jcmVtZW50IG1pbnV0ZXNcXFwiPjxhIG5nLWNsaWNrPVxcXCJpbmNyZW1lbnRNaW51dGVzKClcXFwiIG5nLWNsYXNzPVxcXCJ7ZGlzYWJsZWQ6IG5vSW5jcmVtZW50TWludXRlcygpfVxcXCIgY2xhc3M9XFxcImJ0biBidG4tbGlua1xcXCIgbmctZGlzYWJsZWQ9XFxcIm5vSW5jcmVtZW50TWludXRlcygpXFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tdXBcXFwiPjwvc3Bhbj48L2E+PC90ZD5cXG5cIiArXG4gICAgXCIgICAgICA8dGQgbmctc2hvdz1cXFwic2hvd1NlY29uZHNcXFwiPiZuYnNwOzwvdGQ+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIG5nLXNob3c9XFxcInNob3dTZWNvbmRzXFxcIiBjbGFzcz1cXFwidWliLWluY3JlbWVudCBzZWNvbmRzXFxcIj48YSBuZy1jbGljaz1cXFwiaW5jcmVtZW50U2Vjb25kcygpXFxcIiBuZy1jbGFzcz1cXFwie2Rpc2FibGVkOiBub0luY3JlbWVudFNlY29uZHMoKX1cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWxpbmtcXFwiIG5nLWRpc2FibGVkPVxcXCJub0luY3JlbWVudFNlY29uZHMoKVxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj48c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXVwXFxcIj48L3NwYW4+PC9hPjwvdGQ+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIG5nLXNob3c9XFxcInNob3dNZXJpZGlhblxcXCI+PC90ZD5cXG5cIiArXG4gICAgXCIgICAgPC90cj5cXG5cIiArXG4gICAgXCIgICAgPHRyPlxcblwiICtcbiAgICBcIiAgICAgIDx0ZCBjbGFzcz1cXFwiZm9ybS1ncm91cCB1aWItdGltZSBob3Vyc1xcXCIgbmctY2xhc3M9XFxcInsnaGFzLWVycm9yJzogaW52YWxpZEhvdXJzfVxcXCI+XFxuXCIgK1xuICAgIFwiICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgcGxhY2Vob2xkZXI9XFxcIkhIXFxcIiBuZy1tb2RlbD1cXFwiaG91cnNcXFwiIG5nLWNoYW5nZT1cXFwidXBkYXRlSG91cnMoKVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbCB0ZXh0LWNlbnRlclxcXCIgbmctcmVhZG9ubHk9XFxcIjo6cmVhZG9ubHlJbnB1dFxcXCIgbWF4bGVuZ3RoPVxcXCIyXFxcIiB0YWJpbmRleD1cXFwie3s6OnRhYmluZGV4fX1cXFwiIG5nLWRpc2FibGVkPVxcXCJub0luY3JlbWVudEhvdXJzKClcXFwiIG5nLWJsdXI9XFxcImJsdXIoKVxcXCI+XFxuXCIgK1xuICAgIFwiICAgICAgPC90ZD5cXG5cIiArXG4gICAgXCIgICAgICA8dGQgY2xhc3M9XFxcInVpYi1zZXBhcmF0b3JcXFwiPjo8L3RkPlxcblwiICtcbiAgICBcIiAgICAgIDx0ZCBjbGFzcz1cXFwiZm9ybS1ncm91cCB1aWItdGltZSBtaW51dGVzXFxcIiBuZy1jbGFzcz1cXFwieydoYXMtZXJyb3InOiBpbnZhbGlkTWludXRlc31cXFwiPlxcblwiICtcbiAgICBcIiAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHBsYWNlaG9sZGVyPVxcXCJNTVxcXCIgbmctbW9kZWw9XFxcIm1pbnV0ZXNcXFwiIG5nLWNoYW5nZT1cXFwidXBkYXRlTWludXRlcygpXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHRleHQtY2VudGVyXFxcIiBuZy1yZWFkb25seT1cXFwiOjpyZWFkb25seUlucHV0XFxcIiBtYXhsZW5ndGg9XFxcIjJcXFwiIHRhYmluZGV4PVxcXCJ7ezo6dGFiaW5kZXh9fVxcXCIgbmctZGlzYWJsZWQ9XFxcIm5vSW5jcmVtZW50TWludXRlcygpXFxcIiBuZy1ibHVyPVxcXCJibHVyKClcXFwiPlxcblwiICtcbiAgICBcIiAgICAgIDwvdGQ+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIG5nLXNob3c9XFxcInNob3dTZWNvbmRzXFxcIiBjbGFzcz1cXFwidWliLXNlcGFyYXRvclxcXCI+OjwvdGQ+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIGNsYXNzPVxcXCJmb3JtLWdyb3VwIHVpYi10aW1lIHNlY29uZHNcXFwiIG5nLWNsYXNzPVxcXCJ7J2hhcy1lcnJvcic6IGludmFsaWRTZWNvbmRzfVxcXCIgbmctc2hvdz1cXFwic2hvd1NlY29uZHNcXFwiPlxcblwiICtcbiAgICBcIiAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHBsYWNlaG9sZGVyPVxcXCJTU1xcXCIgbmctbW9kZWw9XFxcInNlY29uZHNcXFwiIG5nLWNoYW5nZT1cXFwidXBkYXRlU2Vjb25kcygpXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHRleHQtY2VudGVyXFxcIiBuZy1yZWFkb25seT1cXFwicmVhZG9ubHlJbnB1dFxcXCIgbWF4bGVuZ3RoPVxcXCIyXFxcIiB0YWJpbmRleD1cXFwie3s6OnRhYmluZGV4fX1cXFwiIG5nLWRpc2FibGVkPVxcXCJub0luY3JlbWVudFNlY29uZHMoKVxcXCIgbmctYmx1cj1cXFwiYmx1cigpXFxcIj5cXG5cIiArXG4gICAgXCIgICAgICA8L3RkPlxcblwiICtcbiAgICBcIiAgICAgIDx0ZCBuZy1zaG93PVxcXCJzaG93TWVyaWRpYW5cXFwiIGNsYXNzPVxcXCJ1aWItdGltZSBhbS1wbVxcXCI+PGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIG5nLWNsYXNzPVxcXCJ7ZGlzYWJsZWQ6IG5vVG9nZ2xlTWVyaWRpYW4oKX1cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHQgdGV4dC1jZW50ZXJcXFwiIG5nLWNsaWNrPVxcXCJ0b2dnbGVNZXJpZGlhbigpXFxcIiBuZy1kaXNhYmxlZD1cXFwibm9Ub2dnbGVNZXJpZGlhbigpXFxcIiB0YWJpbmRleD1cXFwie3s6OnRhYmluZGV4fX1cXFwiPnt7bWVyaWRpYW59fTwvYnV0dG9uPjwvdGQ+XFxuXCIgK1xuICAgIFwiICAgIDwvdHI+XFxuXCIgK1xuICAgIFwiICAgIDx0ciBjbGFzcz1cXFwidGV4dC1jZW50ZXJcXFwiIG5nLXNob3c9XFxcIjo6c2hvd1NwaW5uZXJzXFxcIj5cXG5cIiArXG4gICAgXCIgICAgICA8dGQgY2xhc3M9XFxcInVpYi1kZWNyZW1lbnQgaG91cnNcXFwiPjxhIG5nLWNsaWNrPVxcXCJkZWNyZW1lbnRIb3VycygpXFxcIiBuZy1jbGFzcz1cXFwie2Rpc2FibGVkOiBub0RlY3JlbWVudEhvdXJzKCl9XFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1saW5rXFxcIiBuZy1kaXNhYmxlZD1cXFwibm9EZWNyZW1lbnRIb3VycygpXFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tZG93blxcXCI+PC9zcGFuPjwvYT48L3RkPlxcblwiICtcbiAgICBcIiAgICAgIDx0ZD4mbmJzcDs8L3RkPlxcblwiICtcbiAgICBcIiAgICAgIDx0ZCBjbGFzcz1cXFwidWliLWRlY3JlbWVudCBtaW51dGVzXFxcIj48YSBuZy1jbGljaz1cXFwiZGVjcmVtZW50TWludXRlcygpXFxcIiBuZy1jbGFzcz1cXFwie2Rpc2FibGVkOiBub0RlY3JlbWVudE1pbnV0ZXMoKX1cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWxpbmtcXFwiIG5nLWRpc2FibGVkPVxcXCJub0RlY3JlbWVudE1pbnV0ZXMoKVxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj48c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWRvd25cXFwiPjwvc3Bhbj48L2E+PC90ZD5cXG5cIiArXG4gICAgXCIgICAgICA8dGQgbmctc2hvdz1cXFwic2hvd1NlY29uZHNcXFwiPiZuYnNwOzwvdGQ+XFxuXCIgK1xuICAgIFwiICAgICAgPHRkIG5nLXNob3c9XFxcInNob3dTZWNvbmRzXFxcIiBjbGFzcz1cXFwidWliLWRlY3JlbWVudCBzZWNvbmRzXFxcIj48YSBuZy1jbGljaz1cXFwiZGVjcmVtZW50U2Vjb25kcygpXFxcIiBuZy1jbGFzcz1cXFwie2Rpc2FibGVkOiBub0RlY3JlbWVudFNlY29uZHMoKX1cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWxpbmtcXFwiIG5nLWRpc2FibGVkPVxcXCJub0RlY3JlbWVudFNlY29uZHMoKVxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj48c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWRvd25cXFwiPjwvc3Bhbj48L2E+PC90ZD5cXG5cIiArXG4gICAgXCIgICAgICA8dGQgbmctc2hvdz1cXFwic2hvd01lcmlkaWFuXFxcIj48L3RkPlxcblwiICtcbiAgICBcIiAgICA8L3RyPlxcblwiICtcbiAgICBcIiAgPC90Ym9keT5cXG5cIiArXG4gICAgXCI8L3RhYmxlPlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbFwiLFxuICAgIFwiPGEgaHJlZlxcblwiICtcbiAgICBcIiAgIHRhYmluZGV4PVxcXCItMVxcXCJcXG5cIiArXG4gICAgXCIgICBuZy1iaW5kLWh0bWw9XFxcIm1hdGNoLmxhYmVsIHwgdWliVHlwZWFoZWFkSGlnaGxpZ2h0OnF1ZXJ5XFxcIlxcblwiICtcbiAgICBcIiAgIG5nLWF0dHItdGl0bGU9XFxcInt7bWF0Y2gubGFiZWx9fVxcXCI+PC9hPlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcblxuYW5ndWxhci5tb2R1bGUoXCJ1aWIvdGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sXCIsIFtdKS5ydW4oW1wiJHRlbXBsYXRlQ2FjaGVcIiwgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KFwidWliL3RlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbFwiLFxuICAgIFwiPHVsIGNsYXNzPVxcXCJkcm9wZG93bi1tZW51XFxcIiBuZy1zaG93PVxcXCJpc09wZW4oKSAmJiAhbW92ZUluUHJvZ3Jlc3NcXFwiIG5nLXN0eWxlPVxcXCJ7dG9wOiBwb3NpdGlvbigpLnRvcCsncHgnLCBsZWZ0OiBwb3NpdGlvbigpLmxlZnQrJ3B4J31cXFwiIHJvbGU9XFxcImxpc3Rib3hcXFwiIGFyaWEtaGlkZGVuPVxcXCJ7eyFpc09wZW4oKX19XFxcIj5cXG5cIiArXG4gICAgXCIgICAgPGxpIGNsYXNzPVxcXCJ1aWItdHlwZWFoZWFkLW1hdGNoXFxcIiBuZy1yZXBlYXQ9XFxcIm1hdGNoIGluIG1hdGNoZXMgdHJhY2sgYnkgJGluZGV4XFxcIiBuZy1jbGFzcz1cXFwie2FjdGl2ZTogaXNBY3RpdmUoJGluZGV4KSB9XFxcIiBuZy1tb3VzZWVudGVyPVxcXCJzZWxlY3RBY3RpdmUoJGluZGV4KVxcXCIgbmctY2xpY2s9XFxcInNlbGVjdE1hdGNoKCRpbmRleCwgJGV2ZW50KVxcXCIgcm9sZT1cXFwib3B0aW9uXFxcIiBpZD1cXFwie3s6Om1hdGNoLmlkfX1cXFwiPlxcblwiICtcbiAgICBcIiAgICAgICAgPGRpdiB1aWItdHlwZWFoZWFkLW1hdGNoIGluZGV4PVxcXCIkaW5kZXhcXFwiIG1hdGNoPVxcXCJtYXRjaFxcXCIgcXVlcnk9XFxcInF1ZXJ5XFxcIiB0ZW1wbGF0ZS11cmw9XFxcInRlbXBsYXRlVXJsXFxcIj48L2Rpdj5cXG5cIiArXG4gICAgXCIgICAgPC9saT5cXG5cIiArXG4gICAgXCI8L3VsPlxcblwiICtcbiAgICBcIlwiKTtcbn1dKTtcbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAuY2Fyb3VzZWwnKS5ydW4oZnVuY3Rpb24oKSB7IWFuZ3VsYXIuJCRjc3AoKS5ub0lubGluZVN0eWxlICYmICFhbmd1bGFyLiQkdWliQ2Fyb3VzZWxDc3MgJiYgYW5ndWxhci5lbGVtZW50KGRvY3VtZW50KS5maW5kKCdoZWFkJykucHJlcGVuZCgnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPi5uZy1hbmltYXRlLml0ZW06bm90KC5sZWZ0KTpub3QoLnJpZ2h0KXstd2Via2l0LXRyYW5zaXRpb246MHMgZWFzZS1pbi1vdXQgbGVmdDt0cmFuc2l0aW9uOjBzIGVhc2UtaW4tb3V0IGxlZnR9PC9zdHlsZT4nKTsgYW5ndWxhci4kJHVpYkNhcm91c2VsQ3NzID0gdHJ1ZTsgfSk7XG5hbmd1bGFyLm1vZHVsZSgndWkuYm9vdHN0cmFwLmRhdGVwaWNrZXInKS5ydW4oZnVuY3Rpb24oKSB7IWFuZ3VsYXIuJCRjc3AoKS5ub0lubGluZVN0eWxlICYmICFhbmd1bGFyLiQkdWliRGF0ZXBpY2tlckNzcyAmJiBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQpLmZpbmQoJ2hlYWQnKS5wcmVwZW5kKCc8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+LnVpYi1kYXRlcGlja2VyIC51aWItdGl0bGV7d2lkdGg6MTAwJTt9LnVpYi1kYXkgYnV0dG9uLC51aWItbW9udGggYnV0dG9uLC51aWIteWVhciBidXR0b257bWluLXdpZHRoOjEwMCU7fS51aWItbGVmdCwudWliLXJpZ2h0e3dpZHRoOjEwMCV9PC9zdHlsZT4nKTsgYW5ndWxhci4kJHVpYkRhdGVwaWNrZXJDc3MgPSB0cnVlOyB9KTtcbmFuZ3VsYXIubW9kdWxlKCd1aS5ib290c3RyYXAucG9zaXRpb24nKS5ydW4oZnVuY3Rpb24oKSB7IWFuZ3VsYXIuJCRjc3AoKS5ub0lubGluZVN0eWxlICYmICFhbmd1bGFyLiQkdWliUG9zaXRpb25Dc3MgJiYgYW5ndWxhci5lbGVtZW50KGRvY3VtZW50KS5maW5kKCdoZWFkJykucHJlcGVuZCgnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPi51aWItcG9zaXRpb24tbWVhc3VyZXtkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4gIWltcG9ydGFudDtwb3NpdGlvbjphYnNvbHV0ZSAhaW1wb3J0YW50O3RvcDotOTk5OXB4ICFpbXBvcnRhbnQ7bGVmdDotOTk5OXB4ICFpbXBvcnRhbnQ7fS51aWItcG9zaXRpb24tc2Nyb2xsYmFyLW1lYXN1cmV7cG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudDt0b3A6LTk5OTlweCAhaW1wb3J0YW50O3dpZHRoOjUwcHggIWltcG9ydGFudDtoZWlnaHQ6NTBweCAhaW1wb3J0YW50O292ZXJmbG93OnNjcm9sbCAhaW1wb3J0YW50O30udWliLXBvc2l0aW9uLWJvZHktc2Nyb2xsYmFyLW1lYXN1cmV7b3ZlcmZsb3c6c2Nyb2xsICFpbXBvcnRhbnQ7fTwvc3R5bGU+Jyk7IGFuZ3VsYXIuJCR1aWJQb3NpdGlvbkNzcyA9IHRydWU7IH0pO1xuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC5kYXRlcGlja2VyUG9wdXAnKS5ydW4oZnVuY3Rpb24oKSB7IWFuZ3VsYXIuJCRjc3AoKS5ub0lubGluZVN0eWxlICYmICFhbmd1bGFyLiQkdWliRGF0ZXBpY2tlcnBvcHVwQ3NzICYmIGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudCkuZmluZCgnaGVhZCcpLnByZXBlbmQoJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj4udWliLWRhdGVwaWNrZXItcG9wdXAuZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7bWFyZ2luOjA7fS51aWItYnV0dG9uLWJhcntwYWRkaW5nOjEwcHggOXB4IDJweDt9PC9zdHlsZT4nKTsgYW5ndWxhci4kJHVpYkRhdGVwaWNrZXJwb3B1cENzcyA9IHRydWU7IH0pO1xuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC50b29sdGlwJykucnVuKGZ1bmN0aW9uKCkgeyFhbmd1bGFyLiQkY3NwKCkubm9JbmxpbmVTdHlsZSAmJiAhYW5ndWxhci4kJHVpYlRvb2x0aXBDc3MgJiYgYW5ndWxhci5lbGVtZW50KGRvY3VtZW50KS5maW5kKCdoZWFkJykucHJlcGVuZCgnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlt1aWItdG9vbHRpcC1wb3B1cF0udG9vbHRpcC50b3AtbGVmdCA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC1wb3B1cF0udG9vbHRpcC50b3AtcmlnaHQgPiAudG9vbHRpcC1hcnJvdyxbdWliLXRvb2x0aXAtcG9wdXBdLnRvb2x0aXAuYm90dG9tLWxlZnQgPiAudG9vbHRpcC1hcnJvdyxbdWliLXRvb2x0aXAtcG9wdXBdLnRvb2x0aXAuYm90dG9tLXJpZ2h0ID4gLnRvb2x0aXAtYXJyb3csW3VpYi10b29sdGlwLXBvcHVwXS50b29sdGlwLmxlZnQtdG9wID4gLnRvb2x0aXAtYXJyb3csW3VpYi10b29sdGlwLXBvcHVwXS50b29sdGlwLmxlZnQtYm90dG9tID4gLnRvb2x0aXAtYXJyb3csW3VpYi10b29sdGlwLXBvcHVwXS50b29sdGlwLnJpZ2h0LXRvcCA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC1wb3B1cF0udG9vbHRpcC5yaWdodC1ib3R0b20gPiAudG9vbHRpcC1hcnJvdyxbdWliLXRvb2x0aXAtaHRtbC1wb3B1cF0udG9vbHRpcC50b3AtbGVmdCA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC1odG1sLXBvcHVwXS50b29sdGlwLnRvcC1yaWdodCA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC1odG1sLXBvcHVwXS50b29sdGlwLmJvdHRvbS1sZWZ0ID4gLnRvb2x0aXAtYXJyb3csW3VpYi10b29sdGlwLWh0bWwtcG9wdXBdLnRvb2x0aXAuYm90dG9tLXJpZ2h0ID4gLnRvb2x0aXAtYXJyb3csW3VpYi10b29sdGlwLWh0bWwtcG9wdXBdLnRvb2x0aXAubGVmdC10b3AgPiAudG9vbHRpcC1hcnJvdyxbdWliLXRvb2x0aXAtaHRtbC1wb3B1cF0udG9vbHRpcC5sZWZ0LWJvdHRvbSA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC1odG1sLXBvcHVwXS50b29sdGlwLnJpZ2h0LXRvcCA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC1odG1sLXBvcHVwXS50b29sdGlwLnJpZ2h0LWJvdHRvbSA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC10ZW1wbGF0ZS1wb3B1cF0udG9vbHRpcC50b3AtbGVmdCA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC10ZW1wbGF0ZS1wb3B1cF0udG9vbHRpcC50b3AtcmlnaHQgPiAudG9vbHRpcC1hcnJvdyxbdWliLXRvb2x0aXAtdGVtcGxhdGUtcG9wdXBdLnRvb2x0aXAuYm90dG9tLWxlZnQgPiAudG9vbHRpcC1hcnJvdyxbdWliLXRvb2x0aXAtdGVtcGxhdGUtcG9wdXBdLnRvb2x0aXAuYm90dG9tLXJpZ2h0ID4gLnRvb2x0aXAtYXJyb3csW3VpYi10b29sdGlwLXRlbXBsYXRlLXBvcHVwXS50b29sdGlwLmxlZnQtdG9wID4gLnRvb2x0aXAtYXJyb3csW3VpYi10b29sdGlwLXRlbXBsYXRlLXBvcHVwXS50b29sdGlwLmxlZnQtYm90dG9tID4gLnRvb2x0aXAtYXJyb3csW3VpYi10b29sdGlwLXRlbXBsYXRlLXBvcHVwXS50b29sdGlwLnJpZ2h0LXRvcCA+IC50b29sdGlwLWFycm93LFt1aWItdG9vbHRpcC10ZW1wbGF0ZS1wb3B1cF0udG9vbHRpcC5yaWdodC1ib3R0b20gPiAudG9vbHRpcC1hcnJvdyxbdWliLXBvcG92ZXItcG9wdXBdLnBvcG92ZXIudG9wLWxlZnQgPiAuYXJyb3csW3VpYi1wb3BvdmVyLXBvcHVwXS5wb3BvdmVyLnRvcC1yaWdodCA+IC5hcnJvdyxbdWliLXBvcG92ZXItcG9wdXBdLnBvcG92ZXIuYm90dG9tLWxlZnQgPiAuYXJyb3csW3VpYi1wb3BvdmVyLXBvcHVwXS5wb3BvdmVyLmJvdHRvbS1yaWdodCA+IC5hcnJvdyxbdWliLXBvcG92ZXItcG9wdXBdLnBvcG92ZXIubGVmdC10b3AgPiAuYXJyb3csW3VpYi1wb3BvdmVyLXBvcHVwXS5wb3BvdmVyLmxlZnQtYm90dG9tID4gLmFycm93LFt1aWItcG9wb3Zlci1wb3B1cF0ucG9wb3Zlci5yaWdodC10b3AgPiAuYXJyb3csW3VpYi1wb3BvdmVyLXBvcHVwXS5wb3BvdmVyLnJpZ2h0LWJvdHRvbSA+IC5hcnJvdyxbdWliLXBvcG92ZXItaHRtbC1wb3B1cF0ucG9wb3Zlci50b3AtbGVmdCA+IC5hcnJvdyxbdWliLXBvcG92ZXItaHRtbC1wb3B1cF0ucG9wb3Zlci50b3AtcmlnaHQgPiAuYXJyb3csW3VpYi1wb3BvdmVyLWh0bWwtcG9wdXBdLnBvcG92ZXIuYm90dG9tLWxlZnQgPiAuYXJyb3csW3VpYi1wb3BvdmVyLWh0bWwtcG9wdXBdLnBvcG92ZXIuYm90dG9tLXJpZ2h0ID4gLmFycm93LFt1aWItcG9wb3Zlci1odG1sLXBvcHVwXS5wb3BvdmVyLmxlZnQtdG9wID4gLmFycm93LFt1aWItcG9wb3Zlci1odG1sLXBvcHVwXS5wb3BvdmVyLmxlZnQtYm90dG9tID4gLmFycm93LFt1aWItcG9wb3Zlci1odG1sLXBvcHVwXS5wb3BvdmVyLnJpZ2h0LXRvcCA+IC5hcnJvdyxbdWliLXBvcG92ZXItaHRtbC1wb3B1cF0ucG9wb3Zlci5yaWdodC1ib3R0b20gPiAuYXJyb3csW3VpYi1wb3BvdmVyLXRlbXBsYXRlLXBvcHVwXS5wb3BvdmVyLnRvcC1sZWZ0ID4gLmFycm93LFt1aWItcG9wb3Zlci10ZW1wbGF0ZS1wb3B1cF0ucG9wb3Zlci50b3AtcmlnaHQgPiAuYXJyb3csW3VpYi1wb3BvdmVyLXRlbXBsYXRlLXBvcHVwXS5wb3BvdmVyLmJvdHRvbS1sZWZ0ID4gLmFycm93LFt1aWItcG9wb3Zlci10ZW1wbGF0ZS1wb3B1cF0ucG9wb3Zlci5ib3R0b20tcmlnaHQgPiAuYXJyb3csW3VpYi1wb3BvdmVyLXRlbXBsYXRlLXBvcHVwXS5wb3BvdmVyLmxlZnQtdG9wID4gLmFycm93LFt1aWItcG9wb3Zlci10ZW1wbGF0ZS1wb3B1cF0ucG9wb3Zlci5sZWZ0LWJvdHRvbSA+IC5hcnJvdyxbdWliLXBvcG92ZXItdGVtcGxhdGUtcG9wdXBdLnBvcG92ZXIucmlnaHQtdG9wID4gLmFycm93LFt1aWItcG9wb3Zlci10ZW1wbGF0ZS1wb3B1cF0ucG9wb3Zlci5yaWdodC1ib3R0b20gPiAuYXJyb3d7dG9wOmF1dG87Ym90dG9tOmF1dG87bGVmdDphdXRvO3JpZ2h0OmF1dG87bWFyZ2luOjA7fVt1aWItcG9wb3Zlci1wb3B1cF0ucG9wb3ZlcixbdWliLXBvcG92ZXItaHRtbC1wb3B1cF0ucG9wb3ZlcixbdWliLXBvcG92ZXItdGVtcGxhdGUtcG9wdXBdLnBvcG92ZXJ7ZGlzcGxheTpibG9jayAhaW1wb3J0YW50O308L3N0eWxlPicpOyBhbmd1bGFyLiQkdWliVG9vbHRpcENzcyA9IHRydWU7IH0pO1xuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC50aW1lcGlja2VyJykucnVuKGZ1bmN0aW9uKCkgeyFhbmd1bGFyLiQkY3NwKCkubm9JbmxpbmVTdHlsZSAmJiAhYW5ndWxhci4kJHVpYlRpbWVwaWNrZXJDc3MgJiYgYW5ndWxhci5lbGVtZW50KGRvY3VtZW50KS5maW5kKCdoZWFkJykucHJlcGVuZCgnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPi51aWItdGltZSBpbnB1dHt3aWR0aDo1MHB4O308L3N0eWxlPicpOyBhbmd1bGFyLiQkdWliVGltZXBpY2tlckNzcyA9IHRydWU7IH0pO1xuYW5ndWxhci5tb2R1bGUoJ3VpLmJvb3RzdHJhcC50eXBlYWhlYWQnKS5ydW4oZnVuY3Rpb24oKSB7IWFuZ3VsYXIuJCRjc3AoKS5ub0lubGluZVN0eWxlICYmICFhbmd1bGFyLiQkdWliVHlwZWFoZWFkQ3NzICYmIGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudCkuZmluZCgnaGVhZCcpLnByZXBlbmQoJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5bdWliLXR5cGVhaGVhZC1wb3B1cF0uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrO308L3N0eWxlPicpOyBhbmd1bGFyLiQkdWliVHlwZWFoZWFkQ3NzID0gdHJ1ZTsgfSk7IiwicmVxdWlyZSgnLi9kaXN0L3VpLWJvb3RzdHJhcC10cGxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJ3VpLmJvb3RzdHJhcCc7XG4iLCIvKipcbiAqIEJpbmRzIGEgVGlueU1DRSB3aWRnZXQgdG8gPHRleHRhcmVhPiBlbGVtZW50cy5cbiAqL1xuYW5ndWxhci5tb2R1bGUoJ3VpLnRpbnltY2UnLCBbXSlcbiAgLnZhbHVlKCd1aVRpbnltY2VDb25maWcnLCB7fSlcbiAgLmRpcmVjdGl2ZSgndWlUaW55bWNlJywgWyckcm9vdFNjb3BlJywgJyRjb21waWxlJywgJyR0aW1lb3V0JywgJyR3aW5kb3cnLCAnJHNjZScsICd1aVRpbnltY2VDb25maWcnLCAndWlUaW55bWNlU2VydmljZScsIGZ1bmN0aW9uKCRyb290U2NvcGUsICRjb21waWxlLCAkdGltZW91dCwgJHdpbmRvdywgJHNjZSwgdWlUaW55bWNlQ29uZmlnLCB1aVRpbnltY2VTZXJ2aWNlKSB7XG4gICAgdWlUaW55bWNlQ29uZmlnID0gdWlUaW55bWNlQ29uZmlnIHx8IHt9O1xuXG4gICAgaWYgKHVpVGlueW1jZUNvbmZpZy5iYXNlVXJsKSB7XG4gICAgICB0aW55bWNlLmJhc2VVUkwgPSB1aVRpbnltY2VDb25maWcuYmFzZVVybDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVxdWlyZTogWyduZ01vZGVsJywgJ14/Zm9ybSddLFxuICAgICAgcHJpb3JpdHk6IDU5OSxcbiAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybHMpIHtcbiAgICAgICAgaWYgKCEkd2luZG93LnRpbnltY2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmdNb2RlbCA9IGN0cmxzWzBdLFxuICAgICAgICAgIGZvcm0gPSBjdHJsc1sxXSB8fCBudWxsO1xuXG4gICAgICAgIHZhciBleHByZXNzaW9uLCBvcHRpb25zID0ge1xuICAgICAgICAgIGRlYm91bmNlOiB0cnVlXG4gICAgICAgIH0sIHRpbnlJbnN0YW5jZSxcbiAgICAgICAgICB1cGRhdGVWaWV3ID0gZnVuY3Rpb24oZWRpdG9yKSB7XG4gICAgICAgICAgICB2YXIgY29udGVudCA9IGVkaXRvci5nZXRDb250ZW50KHtmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0fSkudHJpbSgpO1xuICAgICAgICAgICAgY29udGVudCA9ICRzY2UudHJ1c3RBc0h0bWwoY29udGVudCk7XG5cbiAgICAgICAgICAgIG5nTW9kZWwuJHNldFZpZXdWYWx1ZShjb250ZW50KTtcbiAgICAgICAgICAgIGlmICghJHJvb3RTY29wZS4kJHBoYXNlKSB7XG4gICAgICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHRvZ2dsZURpc2FibGUoZGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGVuc3VyZUluc3RhbmNlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aW55SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgdGlueUluc3RhbmNlLmdldEJvZHkoKS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5zdXJlSW5zdGFuY2UoKTtcblxuICAgICAgICAgICAgaWYgKHRpbnlJbnN0YW5jZSAmJiAhdGlueUluc3RhbmNlLnNldHRpbmdzLnJlYWRvbmx5ICYmIHRpbnlJbnN0YW5jZS5nZXREb2MoKSkge1xuICAgICAgICAgICAgICB0aW55SW5zdGFuY2UuZ2V0Qm9keSgpLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmV0Y2ggYSB1bmlxdWUgSUQgZnJvbSB0aGUgc2VydmljZVxuICAgICAgICB2YXIgdW5pcXVlSWQgPSB1aVRpbnltY2VTZXJ2aWNlLmdldFVuaXF1ZUlkKCk7XG4gICAgICAgIGF0dHJzLiRzZXQoJ2lkJywgdW5pcXVlSWQpO1xuXG4gICAgICAgIGV4cHJlc3Npb24gPSB7fTtcblxuICAgICAgICBhbmd1bGFyLmV4dGVuZChleHByZXNzaW9uLCBzY29wZS4kZXZhbChhdHRycy51aVRpbnltY2UpKTtcblxuICAgICAgICAvL0RlYm91bmNlIHVwZGF0ZSBhbmQgc2F2ZSBhY3Rpb25cbiAgICAgICAgdmFyIGRlYm91bmNlZFVwZGF0ZSA9IChmdW5jdGlvbihkZWJvdW5jZWRVcGRhdGVEZWxheSkge1xuICAgICAgICAgIHZhciBkZWJvdW5jZWRVcGRhdGVUaW1lcjtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWQpIHtcblx0ICAgICAgICAkdGltZW91dC5jYW5jZWwoZGVib3VuY2VkVXBkYXRlVGltZXIpO1xuXHQgICAgICAgICBkZWJvdW5jZWRVcGRhdGVUaW1lciA9ICR0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVkLmlzRGlydHkoKSkge1xuICAgICAgICAgICAgICAgICAgZWQuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgdXBkYXRlVmlldyhlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KShlZCk7XG4gICAgICAgICAgICB9LCBkZWJvdW5jZWRVcGRhdGVEZWxheSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSkoNDAwKTtcblxuICAgICAgICB2YXIgc2V0dXBPcHRpb25zID0ge1xuICAgICAgICAgIC8vIFVwZGF0ZSBtb2RlbCB3aGVuIGNhbGxpbmcgc2V0Q29udGVudFxuICAgICAgICAgIC8vIChzdWNoIGFzIGZyb20gdGhlIHNvdXJjZSBlZGl0b3IgcG9wdXApXG4gICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKGVkKSB7XG4gICAgICAgICAgICBlZC5vbignaW5pdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBuZ01vZGVsLiRyZW5kZXIoKTtcbiAgICAgICAgICAgICAgbmdNb2RlbC4kc2V0UHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICBuZ01vZGVsLiRzZXRVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICBmb3JtLiRzZXRQcmlzdGluZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIG1vZGVsIHdoZW46XG4gICAgICAgICAgICAvLyAtIGEgYnV0dG9uIGhhcyBiZWVuIGNsaWNrZWQgW0V4ZWNDb21tYW5kXVxuICAgICAgICAgICAgLy8gLSB0aGUgZWRpdG9yIGNvbnRlbnQgaGFzIGJlZW4gbW9kaWZpZWQgW2NoYW5nZV1cbiAgICAgICAgICAgIC8vIC0gdGhlIG5vZGUgaGFzIGNoYW5nZWQgW05vZGVDaGFuZ2VdXG4gICAgICAgICAgICAvLyAtIGFuIG9iamVjdCBoYXMgYmVlbiByZXNpemVkICh0YWJsZSwgaW1hZ2UpIFtPYmplY3RSZXNpemVkXVxuICAgICAgICAgICAgZWQub24oJ0V4ZWNDb21tYW5kIGNoYW5nZSBOb2RlQ2hhbmdlIE9iamVjdFJlc2l6ZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmRlYm91bmNlKSB7XG4gICAgICAgICAgICAgICAgZWQuc2F2ZSgpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVZpZXcoZWQpO1xuICAgICAgICAgICAgICBcdHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGUoZWQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVkLm9uKCdibHVyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnRbMF0uYmx1cigpO1xuICAgICAgICAgICAgICBuZ01vZGVsLiRzZXRUb3VjaGVkKCk7XG4gICAgICAgICAgICAgIGlmICghJHJvb3RTY29wZS4kJHBoYXNlKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWQub24oJ3JlbW92ZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh1aVRpbnltY2VDb25maWcuc2V0dXApIHtcbiAgICAgICAgICAgICAgdWlUaW55bWNlQ29uZmlnLnNldHVwKGVkLCB7XG4gICAgICAgICAgICAgICAgdXBkYXRlVmlldzogdXBkYXRlVmlld1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uc2V0dXApIHtcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbi5zZXR1cChlZCwge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVZpZXc6IHVwZGF0ZVZpZXdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb3JtYXQ6IGV4cHJlc3Npb24uZm9ybWF0IHx8ICdodG1sJyxcbiAgICAgICAgICBzZWxlY3RvcjogJyMnICsgYXR0cnMuaWRcbiAgICAgICAgfTtcbiAgICAgICAgLy8gZXh0ZW5kIG9wdGlvbnMgd2l0aCBpbml0aWFsIHVpVGlueW1jZUNvbmZpZyBhbmRcbiAgICAgICAgLy8gb3B0aW9ucyBmcm9tIGRpcmVjdGl2ZSBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgYW5ndWxhci5leHRlbmQob3B0aW9ucywgdWlUaW55bWNlQ29uZmlnLCBleHByZXNzaW9uLCBzZXR1cE9wdGlvbnMpO1xuICAgICAgICAvLyBXcmFwcGVkIGluICR0aW1lb3V0IGR1ZSB0byAkdGlueW1jZTpyZWZyZXNoIGltcGxlbWVudGF0aW9uLCByZXF1aXJlc1xuICAgICAgICAvLyBlbGVtZW50IHRvIGJlIHByZXNlbnQgaW4gRE9NIGJlZm9yZSBpbnN0YW50aWF0aW5nIGVkaXRvciB3aGVuXG4gICAgICAgIC8vIHJlLXJlbmRlcmluZyBkaXJlY3RpdmVcbiAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmFzZVVSTCl7XG4gICAgICAgICAgICB0aW55bWNlLmJhc2VVUkwgPSBvcHRpb25zLmJhc2VVUkw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBtYXliZUluaXRQcm9taXNlID0gdGlueW1jZS5pbml0KG9wdGlvbnMpO1xuICAgICAgICAgIGlmKG1heWJlSW5pdFByb21pc2UgJiYgdHlwZW9mIG1heWJlSW5pdFByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbWF5YmVJbml0UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB0b2dnbGVEaXNhYmxlKHNjb3BlLiRldmFsKGF0dHJzLm5nRGlzYWJsZWQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2dnbGVEaXNhYmxlKHNjb3BlLiRldmFsKGF0dHJzLm5nRGlzYWJsZWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5nTW9kZWwuJGZvcm1hdHRlcnMudW5zaGlmdChmdW5jdGlvbihtb2RlbFZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIG1vZGVsVmFsdWUgPyAkc2NlLnRydXN0QXNIdG1sKG1vZGVsVmFsdWUpIDogJyc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5nTW9kZWwuJHBhcnNlcnMudW5zaGlmdChmdW5jdGlvbih2aWV3VmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmlld1ZhbHVlID8gJHNjZS5nZXRUcnVzdGVkSHRtbCh2aWV3VmFsdWUpIDogJyc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5nTW9kZWwuJHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGVuc3VyZUluc3RhbmNlKCk7XG5cbiAgICAgICAgICB2YXIgdmlld1ZhbHVlID0gbmdNb2RlbC4kdmlld1ZhbHVlID9cbiAgICAgICAgICAgICRzY2UuZ2V0VHJ1c3RlZEh0bWwobmdNb2RlbC4kdmlld1ZhbHVlKSA6ICcnO1xuXG4gICAgICAgICAgLy8gaW5zdGFuY2UuZ2V0RG9jKCkgY2hlY2sgaXMgYSBndWFyZCBhZ2FpbnN0IG51bGwgdmFsdWVcbiAgICAgICAgICAvLyB3aGVuIGRlc3RydWN0aW9uICYgcmVjcmVhdGlvbiBvZiBpbnN0YW5jZXMgaGFwcGVuXG4gICAgICAgICAgaWYgKHRpbnlJbnN0YW5jZSAmJlxuICAgICAgICAgICAgdGlueUluc3RhbmNlLmdldERvYygpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aW55SW5zdGFuY2Uuc2V0Q29udGVudCh2aWV3VmFsdWUpO1xuICAgICAgICAgICAgLy8gVHJpZ2dlcmluZyBjaGFuZ2UgZXZlbnQgZHVlIHRvIFRpbnlNQ0Ugbm90IGZpcmluZyBldmVudCAmXG4gICAgICAgICAgICAvLyBiZWNvbWluZyBvdXQgb2Ygc3luYyBmb3IgY2hhbmdlIGNhbGxiYWNrc1xuICAgICAgICAgICAgdGlueUluc3RhbmNlLmZpcmUoJ2NoYW5nZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBhdHRycy4kb2JzZXJ2ZSgnZGlzYWJsZWQnLCB0b2dnbGVEaXNhYmxlKTtcblxuICAgICAgICAvLyBUaGlzIGJsb2NrIGlzIGJlY2F1c2Ugb2YgVGlueU1DRSBub3QgcGxheWluZyB3ZWxsIHdpdGggcmVtb3ZhbCBhbmRcbiAgICAgICAgLy8gcmVjcmVhdGlvbiBvZiBpbnN0YW5jZXMsIHJlcXVpcmluZyBpbnN0YW5jZXMgdG8gaGF2ZSBkaWZmZXJlbnRcbiAgICAgICAgLy8gc2VsZWN0b3JzIGluIG9yZGVyIHRvIHJlbmRlciBuZXcgaW5zdGFuY2VzIHByb3Blcmx5XG4gICAgICAgIHNjb3BlLiRvbignJHRpbnltY2U6cmVmcmVzaCcsIGZ1bmN0aW9uKGUsIGlkKSB7XG4gICAgICAgICAgdmFyIGVpZCA9IGF0dHJzLmlkO1xuICAgICAgICAgIGlmIChhbmd1bGFyLmlzVW5kZWZpbmVkKGlkKSB8fCBpZCA9PT0gZWlkKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50KCk7XG4gICAgICAgICAgICB2YXIgY2xvbmVkRWxlbWVudCA9IGVsZW1lbnQuY2xvbmUoKTtcbiAgICAgICAgICAgIGNsb25lZEVsZW1lbnQucmVtb3ZlQXR0cignaWQnKTtcbiAgICAgICAgICAgIGNsb25lZEVsZW1lbnQucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgICAgICAgIGNsb25lZEVsZW1lbnQucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICAgIHRpbnltY2UuZXhlY0NvbW1hbmQoJ21jZVJlbW92ZUVkaXRvcicsIGZhbHNlLCBlaWQpO1xuICAgICAgICAgICAgcGFyZW50RWxlbWVudC5hcHBlbmQoJGNvbXBpbGUoY2xvbmVkRWxlbWVudCkoc2NvcGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbnN1cmVJbnN0YW5jZSgpO1xuXG4gICAgICAgICAgaWYgKHRpbnlJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGlueUluc3RhbmNlLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGlueUluc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGVuc3VyZUluc3RhbmNlKCkge1xuICAgICAgICAgIGlmICghdGlueUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aW55SW5zdGFuY2UgPSB0aW55bWNlLmdldChhdHRycy5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfV0pXG4gIC5zZXJ2aWNlKCd1aVRpbnltY2VTZXJ2aWNlJywgW1xuICAgIC8qKlxuICAgICAqIEEgc2VydmljZSBpcyB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUgSUQncywgdGhpcyBwcmV2ZW50cyBkdXBsaWNhdGUgSUQncyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZWRpdG9ycyBvbiBzY3JlZW4uXG4gICAgICovXG4gICAgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgVUlUaW55bWNlU2VydmljZSA9IGZ1bmN0aW9uKCkge1xuICAgXHQgICAgdmFyIElEX0FUVFIgPSAndWktdGlueW1jZSc7XG4gICAgXHQvLyB1bmlxdWVJZCBrZWVwcyB0cmFjayBvZiB0aGUgbGF0ZXN0IGFzc2lnbmVkIElEXG4gICAgXHR2YXIgdW5pcXVlSWQgPSAwO1xuICAgICAgICAvLyBnZXRVbmlxdWVJZCByZXR1cm5zIGEgdW5pcXVlIElEXG4gICAgXHR2YXIgZ2V0VW5pcXVlSWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB1bmlxdWVJZCArKztcbiAgICAgICAgICByZXR1cm4gSURfQVRUUiArICctJyArIHVuaXF1ZUlkO1xuICAgICAgICB9O1xuICAgICAgICAvLyByZXR1cm4gdGhlIGZ1bmN0aW9uIGFzIGEgcHVibGljIG1ldGhvZCBvZiB0aGUgc2VydmljZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICBcdGdldFVuaXF1ZUlkOiBnZXRVbmlxdWVJZFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIC8vIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgc2VydmljZVxuICAgICAgcmV0dXJuIG5ldyBVSVRpbnltY2VTZXJ2aWNlKCk7XG4gICAgfVxuICBdKTtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiIiwiKGZ1bmN0aW9uKGEsYil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxiKTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBleHBvcnRzKWIoKTtlbHNle2IoKSxhLkZpbGVTYXZlcj17ZXhwb3J0czp7fX0uZXhwb3J0c319KSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihhLGIpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiBiP2I9e2F1dG9Cb206ITF9Olwib2JqZWN0XCIhPXR5cGVvZiBiJiYoY29uc29sZS53YXJuKFwiRGVwcmVjYXRlZDogRXhwZWN0ZWQgdGhpcmQgYXJndW1lbnQgdG8gYmUgYSBvYmplY3RcIiksYj17YXV0b0JvbTohYn0pLGIuYXV0b0JvbSYmL15cXHMqKD86dGV4dFxcL1xcUyp8YXBwbGljYXRpb25cXC94bWx8XFxTKlxcL1xcUypcXCt4bWwpXFxzKjsuKmNoYXJzZXRcXHMqPVxccyp1dGYtOC9pLnRlc3QoYS50eXBlKT9uZXcgQmxvYihbXCJcXHVGRUZGXCIsYV0se3R5cGU6YS50eXBlfSk6YX1mdW5jdGlvbiBjKGEsYixjKXt2YXIgZD1uZXcgWE1MSHR0cFJlcXVlc3Q7ZC5vcGVuKFwiR0VUXCIsYSksZC5yZXNwb25zZVR5cGU9XCJibG9iXCIsZC5vbmxvYWQ9ZnVuY3Rpb24oKXtnKGQucmVzcG9uc2UsYixjKX0sZC5vbmVycm9yPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcImNvdWxkIG5vdCBkb3dubG9hZCBmaWxlXCIpfSxkLnNlbmQoKX1mdW5jdGlvbiBkKGEpe3ZhciBiPW5ldyBYTUxIdHRwUmVxdWVzdDtiLm9wZW4oXCJIRUFEXCIsYSwhMSk7dHJ5e2Iuc2VuZCgpfWNhdGNoKGEpe31yZXR1cm4gMjAwPD1iLnN0YXR1cyYmMjk5Pj1iLnN0YXR1c31mdW5jdGlvbiBlKGEpe3RyeXthLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKSl9Y2F0Y2goYyl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJNb3VzZUV2ZW50c1wiKTtiLmluaXRNb3VzZUV2ZW50KFwiY2xpY2tcIiwhMCwhMCx3aW5kb3csMCwwLDAsODAsMjAsITEsITEsITEsITEsMCxudWxsKSxhLmRpc3BhdGNoRXZlbnQoYil9fXZhciBmPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy53aW5kb3c9PT13aW5kb3c/d2luZG93Olwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLnNlbGY9PT1zZWxmP3NlbGY6XCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLmdsb2JhbD09PWdsb2JhbD9nbG9iYWw6dm9pZCAwLGE9Zi5uYXZpZ2F0b3ImJi9NYWNpbnRvc2gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIS9TYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZz1mLnNhdmVBc3x8KFwib2JqZWN0XCIhPXR5cGVvZiB3aW5kb3d8fHdpbmRvdyE9PWY/ZnVuY3Rpb24oKXt9OlwiZG93bmxvYWRcImluIEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSYmIWE/ZnVuY3Rpb24oYixnLGgpe3ZhciBpPWYuVVJMfHxmLndlYmtpdFVSTCxqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2c9Z3x8Yi5uYW1lfHxcImRvd25sb2FkXCIsai5kb3dubG9hZD1nLGoucmVsPVwibm9vcGVuZXJcIixcInN0cmluZ1wiPT10eXBlb2YgYj8oai5ocmVmPWIsai5vcmlnaW49PT1sb2NhdGlvbi5vcmlnaW4/ZShqKTpkKGouaHJlZik/YyhiLGcsaCk6ZShqLGoudGFyZ2V0PVwiX2JsYW5rXCIpKTooai5ocmVmPWkuY3JlYXRlT2JqZWN0VVJMKGIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLnJldm9rZU9iamVjdFVSTChqLmhyZWYpfSw0RTQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlKGopfSwwKSl9OlwibXNTYXZlT3JPcGVuQmxvYlwiaW4gbmF2aWdhdG9yP2Z1bmN0aW9uKGYsZyxoKXtpZihnPWd8fGYubmFtZXx8XCJkb3dubG9hZFwiLFwic3RyaW5nXCIhPXR5cGVvZiBmKW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGIoZixoKSxnKTtlbHNlIGlmKGQoZikpYyhmLGcsaCk7ZWxzZXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtpLmhyZWY9ZixpLnRhcmdldD1cIl9ibGFua1wiLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlKGkpfSl9fTpmdW5jdGlvbihiLGQsZSxnKXtpZihnPWd8fG9wZW4oXCJcIixcIl9ibGFua1wiKSxnJiYoZy5kb2N1bWVudC50aXRsZT1nLmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0PVwiZG93bmxvYWRpbmcuLi5cIiksXCJzdHJpbmdcIj09dHlwZW9mIGIpcmV0dXJuIGMoYixkLGUpO3ZhciBoPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI9PT1iLnR5cGUsaT0vY29uc3RydWN0b3IvaS50ZXN0KGYuSFRNTEVsZW1lbnQpfHxmLnNhZmFyaSxqPS9DcmlPU1xcL1tcXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZigoanx8aCYmaXx8YSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBGaWxlUmVhZGVyKXt2YXIgaz1uZXcgRmlsZVJlYWRlcjtrLm9ubG9hZGVuZD1mdW5jdGlvbigpe3ZhciBhPWsucmVzdWx0O2E9aj9hOmEucmVwbGFjZSgvXmRhdGE6W147XSo7LyxcImRhdGE6YXR0YWNobWVudC9maWxlO1wiKSxnP2cubG9jYXRpb24uaHJlZj1hOmxvY2F0aW9uPWEsZz1udWxsfSxrLnJlYWRBc0RhdGFVUkwoYil9ZWxzZXt2YXIgbD1mLlVSTHx8Zi53ZWJraXRVUkwsbT1sLmNyZWF0ZU9iamVjdFVSTChiKTtnP2cubG9jYXRpb249bTpsb2NhdGlvbi5ocmVmPW0sZz1udWxsLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtsLnJldm9rZU9iamVjdFVSTChtKX0sNEU0KX19KTtmLnNhdmVBcz1nLnNhdmVBcz1nLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJihtb2R1bGUuZXhwb3J0cz1nKX0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1GaWxlU2F2ZXIubWluLmpzLm1hcCIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJhcHBsaWNhdGlvbi8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwZGFzaC1xb2UtcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwcC1pbXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwcGhhbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwcGhhbGZvcm1zK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hMmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWNlK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWN0aXZlbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hY3Rpdml0eStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1jb3N0bWFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWNvc3RtYXBmaWx0ZXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZGlyZWN0b3J5K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50Y29zdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1lbmRwb2ludGNvc3RwYXJhbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZW5kcG9pbnRwcm9wK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50cHJvcHBhcmFtcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1lcnJvcitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1uZXR3b3JrbWFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLW5ldHdvcmttYXBmaWx0ZXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tdXBkYXRlc3RyZWFtY29udHJvbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by11cGRhdGVzdHJlYW1wYXJhbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbmRyZXctaW5zZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FwcGxlZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hcHBsaXh3YXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0K2p3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRmeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRvbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21jYXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdG9tY2F0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRvbWRlbGV0ZWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdG9tZGVsZXRlZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21pY21haWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRvbXN2Yyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF0b21zdmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdHNjLWR3ZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR3ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0c2MtZHluYW1pYy1ldmVudC1tZXNzYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0c2MtaGVsZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhlbGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdHNjLXJkdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRzYy1yc2F0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNhdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0eG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F1dGgtcG9saWN5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2JhY25ldC14ZGQremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2JhdGNoLXNtdHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYmRvY1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkb2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9iZWVwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2FsZW5kYXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhbGVuZGFyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2FsbC1jb21wbGV0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhbHMtMTg0MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYXB0aXZlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nib3Itc2VxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NjY2V4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NjbXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2N4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjY3htbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkZngreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZGZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RtaS1jYXBhYmlsaXR5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaWFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkbWljXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RtaS1kb21haW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZG1pZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbWktb2JqZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaXFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG5pXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NlYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZWEtMjAxOCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZWxsbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2Z3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NpdHkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NsclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbHVlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NsdWVfaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY25ycCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb2FwLWdyb3VwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb2FwLXBheWxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29tbW9uZ3JvdW5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NvbmZlcmVuY2UtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb3NlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nvc2Uta2V5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nvc2Uta2V5LXNldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jcGwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3JhdHRyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3RhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NzdGFkYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nzdm0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2N1LXNlZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjdVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2N3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jeWJlcmNhc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGFydFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rhc2greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kYXNoLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGFzaGRlbHRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rhdm1vdW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGF2bW91bnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kY2EtcmZ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RjZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kZWMtZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGlhbG9nLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGljb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGljb20ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpY29tK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kaXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG5zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rucytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG5zLW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG9jYm9vayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGJrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG90cytjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rza3BwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rzc2MrZGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHNzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rzc2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZHNzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2R2Y3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXNcIixcImVjbWFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGktY29uc2VudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGkteDEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VkaWZhY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWZpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VsbStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbG0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuY2FwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuY29tbWVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5jb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLmRldmljZWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuZWNhbGwubXNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLnByb3ZpZGVyaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zZXJ2aWNlaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zdWJzY3JpYmVyaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS52ZWRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtbWEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlbW1hXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1vdGlvbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW1vdGlvbm1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW5jYXBydHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZXBwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VwdWIremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXB1YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VzaG9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2V4aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV4aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2V4cGVjdC1jdC1yZXBvcnQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2V4cHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mYXN0c29hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mZHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9maGlyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZoaXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9maWRvLnRydXN0ZWQtYXBwcytqc29uXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZml0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mbGV4ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZvbnQtc2ZudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mb250LXRkcGZyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGZyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZm9udC13b2ZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZyYW1ld29yay1hdHRyaWJ1dGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dlbytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZW9qc29uXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ2VvK2pzb24tc2VxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dlb3BhY2thZ2Urc3FsaXRlM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nZW94YWNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nbHRmLWJ1ZmZlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ncHgreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdweFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2d4ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3hmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaDIyNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9oZWxkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2hqc29uXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGpzb25cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9odHRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2h5cGVyc3R1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWJlLWtleS1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2liZS1wa2ctcmVwbHkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWJlLXBwLWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbS1pc2NvbXBvc2luZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4LmNtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbmRleC5vYmpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgucmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgudm5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lua21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW5rXCIsXCJpbmttbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lvdHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaXBmaXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpcGZpeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pc3VwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2l0cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIml0c1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamFyXCIsXCJ3YXJcIixcImVhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtdm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsYXNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc1wiLFwibWpzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vamYyZmVlZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vam9zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qb3NlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qcmQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzY2FsZW5kYXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianNvblwiLFwibWFwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbi1zZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbjVcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc29uNVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzb25tbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpzb25tbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2p3aytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vandrLXNldCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2twbWwtcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9rcG1sLXJlc3BvbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpzb25sZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xncit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxnclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xpbmstZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xvYWQtY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9sb3N0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibG9zdHhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xvc3RzeW5jK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xwZit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbHhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hYy1iaW5oZXg0MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhxeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYWN3cml0ZWlpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYWRzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFuaWZlc3QranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3ZWJtYW5pZmVzdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hcmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYXJjeG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXJjeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhlbWF0aWNhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFcIixcIm5iXCIsXCJtYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hdGhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbC1jb250ZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbC1wcmVzZW50YXRpb24reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1hc3NvY2lhdGVkLXByb2NlZHVyZS1kZXNjcmlwdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLWRlcmVnaXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1lbnZlbG9wZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLW1zayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLW1zay1yZXNwb25zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXByb3RlY3Rpb24tZGVzY3JpcHRpb24reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1yZWNlcHRpb24tcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtcmVnaXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1yZWdpc3Rlci1yZXNwb25zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXNjaGVkdWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtdXNlci1zZXJ2aWNlLWRlc2NyaXB0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ib3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYm94XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVkaWEtcG9saWN5LWRhdGFzZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZWRpYV9jb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21lZGlhc2VydmVyY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zY21sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVyZ2UtcGF0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ldGFsaW5rK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZXRhbGlua1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ldGFsaW5rNCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ldGE0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWV0cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ldHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZjRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWlrZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWlwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9taXNzaW5nLWJsb2NrcytjYm9yLXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tbXQtYWVpK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFlaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21tdC11c2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdXNkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9kcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1vZHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tb3NzLWtleXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zcy1zaWduYXR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zc2tleS1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21vc3NrZXktcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcDIxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTIxXCIsXCJtcDIxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXA0c1wiLFwibTRwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXBlZzQtZ2VuZXJpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcGVnNC1pb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXBlZzQtaW9kLXhtdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcmItY29uc3VtZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXJiLXB1Ymxpc2greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXNjLWl2cit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zYy1taXhlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY1wiLFwiZG90XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXVkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tdWx0aXBhcnQtY29yZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9teGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uLXF1YWRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uLXRyaXBsZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJudFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL25hc2RhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmV3cy1jaGVja2dyb3Vwc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVMtQVNDSUlcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL25ld3MtZ3JvdXBpbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVUy1BU0NJSVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmV3cy10cmFuc21pc3Npb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmxzbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbm9kZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNqc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL25zc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vYXV0aC1hdXRoei1yZXErand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL29ibGl2aW91cy1kbnMtbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vY3NwLXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2NzcC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiaW5cIixcImRtc1wiLFwibHJmXCIsXCJtYXJcIixcInNvXCIsXCJkaXN0XCIsXCJkaXN0elwiLFwicGtnXCIsXCJicGtcIixcImR1bXBcIixcImVsY1wiLFwiZGVwbG95XCIsXCJleGVcIixcImRsbFwiLFwiZGViXCIsXCJkbWdcIixcImlzb1wiLFwiaW1nXCIsXCJtc2lcIixcIm1zcFwiLFwibXNtXCIsXCJidWZmZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZG0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvcGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZ2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZ3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vbWRvYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib21kb2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vbmVub3RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvbmV0b2NcIixcIm9uZXRvYzJcIixcIm9uZXRtcFwiLFwib25lcGtnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb3BjLW5vZGVzZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb3Njb3JlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL294cHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJveHBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcDIxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3AyMSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcDJwLW92ZXJsYXkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZWxvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bhc3Nwb3J0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BhdGNoLW9wcy1lcnJvcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhlclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BkeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wZW0tY2VydGlmaWNhdGUtY2hhaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBncFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BncC1rZXlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXNjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFzY1wiLFwic2lnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGljcy1ydWxlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHJmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGlkZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BpZGYtZGlmZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3MxMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInAxMFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3MxMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzNy1taW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdtXCIsXCJwN2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwN3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInA4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtjczgtZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtYXR0ci1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LWNlcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LWNybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtcGtpcGF0aFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBraXBhdGhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4Y21wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGtpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGxzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcG9jLXNldHRpbmdzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcG9zdHNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWlcIixcImVwc1wiLFwicHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcHNwLXRyYWNrZXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Byb2JsZW0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Byb2JsZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJvdmVuYW5jZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByb3Z4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmFsdmVzdHJhbmQudGl0cmF4LXNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5jd3dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjd3dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMuY3luXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCI3LUJJVFwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmhwdWIremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5ucHJlbmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnBsdWNrZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnJkZi14bWwtY3J5cHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnhzZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wc2tjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHNrY3htbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3B2ZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcXNpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yYW1sK3lhbWxcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJhbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmRhcCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmRmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmRmXCIsXCJvd2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZWdpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVsYXgtbmctY29tcGFjdC1zeW50YXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZW1vdGUtcHJpbnRpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVwdXRvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzLWRpZmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmlzY29zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JsbWkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmxzLXNlcnZpY2VzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yb3V0ZS1hcGQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXBkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcm91dGUtcy10c2lkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2xzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcm91dGUtdXNkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnVzZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktZ2hvc3RidXN0ZXJzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2JyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnBraS1tYW5pZmVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1mdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktcHVibGljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnBraS1yb2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyb2FcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ycGtpLXVwZG93blwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yc2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJzZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJydGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ydHBsb29wYmFja1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ydHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2FtbGFzc2VydGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zYW1sbWV0YWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2FyaWYranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NhcmlmLWV4dGVybmFsLXByb3BlcnRpZXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NiZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zYm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2JtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjYWlwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjaW0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjcVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcHFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3BwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2RwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VjZXZlbnQrand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VubWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VubWx4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VubWwtZXRjaCtjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sLWV0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sLWV4aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5zbWwrY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5zbWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NlbnNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlbnNtbHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5zbWwtZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NlcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXAtZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlc3Npb24taW5mb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcGF5bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcGF5bWVudC1pbml0aWF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2V0cGF5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcmVnaXN0cmF0aW9uLWluaXRpYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZXRyZWdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZ21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NnbWwtb3Blbi1jYXRhbG9nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NoZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpZXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2l2XCIsXCJzaWV2ZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpbXBsZS1maWx0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2ltcGxlLW1lc3NhZ2Utc3VtbWFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaW1wbGVzeW1ib2xjb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2lwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbWlsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NtaWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbWlcIixcInNtaWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbXB0ZTMzNm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc29hcCtmYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zb2FwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcnhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcGR4K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcGlyaXRzLWV2ZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NxbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3JhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NyZ3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncnhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NydSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNydVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NzZGwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zc21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3NtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3N0aXgranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3N3aWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzd2lkdGFnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1hcGV4LXVwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLWFwZXgtdXBkYXRlLWNvbmZpcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1jb21tdW5pdHktdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtY29tbXVuaXR5LXVwZGF0ZS1jb25maXJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtZXJyb3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1zZXF1ZW5jZS1hZGp1c3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1zZXF1ZW5jZS1hZGp1c3QtY29uZmlybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXN0YXR1cy1xdWVyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXN0YXR1cy1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXVwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXVwZGF0ZS1jb25maXJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhclwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RheGlpK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90ZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGVpK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGVpXCIsXCJ0ZWljb3JwdXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90ZXRyYV9pc2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGhyYXVkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGZpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGltZXN0YW1wLXF1ZXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RpbWVzdGFtcC1yZXBseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90aW1lc3RhbXBlZC1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHNkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGxzcnB0K2d6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGxzcnB0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90bmF1dGhsaXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Rva2VuLWludHJvc3BlY3Rpb24rand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RvbWxcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRvbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90cmlja2xlLWljZS1zZHBmcmFnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RyaWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cmlnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR0bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90dmUtdHJpZ2dlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90emlmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3R6aWYtbGVhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91Ympzb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1YmpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91bHBmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdXJjLWdycHNoZWV0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3VyYy1yZXNzaGVldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJzaGVldFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3VyYy10YXJnZXRkZXNjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91cmMtdWlzb2NrZXRkZXNjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZjYXJkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92Y2FyZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92ZW1taVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92aXZpZGVuY2Uuc2NyaXB0ZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4xMDAwbWluZHMuZGVjaXNpb24tbW9kZWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIxa21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC1wcm9zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC1wcm9zZS1wYzNjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC12MngtbG9jYWwtc2VydmljZS1pbmZvcm1hdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC41Z25hc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5hY2Nlc3MtdHJhbnNmZXItZXZlbnRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLmJzZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5nbW9wK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLmd0cGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuaW50ZXJ3b3JraW5nLWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubHBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jLXNpZ25hbGxpbmctZWFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1hZmZpbGlhdGlvbi1jb21tYW5kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1wYXlsb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1zZXJ2aWNlLWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY2RhdGEtc2lnbmFsbGluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY2RhdGEtdWUtY29uZmlnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS11c2VyLXByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtYWZmaWxpYXRpb24tY29tbWFuZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1mbG9vci1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtbG9jYXRpb24taW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1tYm1zLXVzYWdlLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtc2VydmljZS1jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtc2lnbmVkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LXVlLWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC11ZS1pbml0LWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC11c2VyLXByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby1hZmZpbGlhdGlvbi1jb21tYW5kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tYWZmaWxpYXRpb24taW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3ZpZGVvLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby1sb2NhdGlvbi1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tbWJtcy11c2FnZS1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tc2VydmljZS1jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby10cmFuc21pc3Npb24tcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3ZpZGVvLXVlLWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3ZpZGVvLXVzZXItcHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5taWQtY2FsbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5uZ2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnBmY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LWxhcmdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXNtYWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHNiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXZhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB2YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnMxYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc21zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNtcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zcnZjYy1leHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc3J2Y2MtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zdGF0ZS1hbmQtZXZlbnQtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC51c3NkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi5iY21jc2luZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAyLnNtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcDIudGNhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRjYXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2xpZ2h0c3NvZnR3YXJlLmltYWdlc2NhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM20ucG9zdC1pdC1ub3Rlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB3blwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmFzb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFzb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmltcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImltcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb2JvbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFjdVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb3JwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRjXCIsXCJhY3V0Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5haXItYXBwbGljYXRpb24taW5zdGFsbGVyLXBhY2thZ2UremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUuZmxhc2gubW92aWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLmZvcm1zY2VudHJhbC5mY2R0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmNkdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5meHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmeHBcIixcImZ4cGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUucGFydGlhbC11cGxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLnhkcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS54ZmRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGZkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZXRoZXIuaW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLmFmcGxpbmVkYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLmFmcGxpbmVkYXRhLXBhZ2VkZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMuY21vY2EtY21yZXNvdXJjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5mb2NhLWNoYXJzZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMuZm9jYS1jb2RlZGZvbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMuZm9jYS1jb2RlcGFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYS1jbXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLm1vZGNhLWZvcm1kZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMubW9kY2EtbWVkaXVtbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLm1vZGNhLW9iamVjdGNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYS1vdmVybGF5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLm1vZGNhLXBhZ2VzZWdtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZ2VcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWgtYmFyY29kZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWhlYWQuc3BhY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaGVhZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5haXJ6aXAuZmlsZXNlY3VyZS5hemZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhemZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWlyemlwLmZpbGVzZWN1cmUuYXpzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXpzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtYWRldXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF6d1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24ubW9iaTgtZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtZXJpY2FuZHluYW1pY3MuYWNjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtaWdhLmFtaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFtaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbXVuZHNlbi5tYXplK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLm90YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwa1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbmtpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItY2VydGlmaWNhdGUtaXNzdWUtaW5pdGlhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNpaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItZnVuZHMtdHJhbnNmZXItaW5pdGlhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnRpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFudGl4LmdhbWUtY29tcG9uZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS5hcnJvdy5maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUuYXJyb3cuc3RyZWFtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUudGhyaWZ0LmJpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnRocmlmdC5jb21wYWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUudGhyaWZ0Lmpzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwaStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwbGV4dG9yLndhcnJwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBvdGhla2VuZGUucmVzZXJ2YXRpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5pbnN0YWxsZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGtnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLmtleW5vdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZXlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm0zdThcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUubnVtYmVyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm51bWJlcnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUucGFnZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYWdlc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5wa3Bhc3NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwa3Bhc3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXJhc3RyYS5zd2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFyaXN0YW5ldHdvcmtzLnN3aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN3aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcnRpc2FuK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXJ0c3F1YXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hc3RyYWVhLXNvZnR3YXJlLmlvdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpb3RhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmF1ZGlvZ3JhcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXV0b3BhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmF2YWxvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmF2aXN0YXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibW1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtcHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbmFuYS1hY2NvdW50aW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iYmYudXNwLmVycm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iYmYudXNwLm1zZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYmJmLnVzcC5tc2cranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iZWtpdHp1ci1zdGVjaCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJpbnQubWVkLWNvbnRlbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJpb3BheC5yZGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJsaW5rLWlkYi12YWx1ZS13cmFwcGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVlaWNlLm11bHRpcGFzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVldG9vdGguZXAub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVldG9vdGgubGUub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibWlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibWlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnBmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5icGYzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5idXNpbmVzc29iamVjdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnl1LnVhcGkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jYWItanNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2Fub24tY3BkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2Fub24tbGlwc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2FwYXN5c3RlbXMtcGcranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jZW5kaW8udGhpbmxpbmMuY2xpZW50Y29uZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2VudHVyeS1zeXN0ZW1zLnRjcF9zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNoZW1kcmF3K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2R4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2hlc3MtcGduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaGlwbnV0cy5rYXJhb2tlLW1tZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1tZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaWVkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2luZGVyZWxsYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkeVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaXJwYWNrLmlzZG4tZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaXRhdGlvbnN0eWxlcy5zdHlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNzbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbGF5bW9yZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbG9hbnRvLnJwOVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJwOVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbG9uay5jNGdyb3VwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYzRnXCIsXCJjNGRcIixcImM0ZlwiLFwiYzRwXCIsXCJjNHVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2x1ZXRydXN0LmNhcnRvbW9iaWxlLWNvbmZpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImMxMWFtY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnLXBrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImMxMWFtelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2ZmZWVzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxhYmlvLnhvZG9jdW1lbnRzLmRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5kb2N1bWVudC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGFiaW8ueG9kb2N1bWVudHMucHJlc2VudGF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5wcmVzZW50YXRpb24tdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxhYmlvLnhvZG9jdW1lbnRzLnNwcmVhZHNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5zcHJlYWRzaGVldC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxlY3Rpb24uZG9jK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbi5uZXh0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29taWNib29rK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29taWNib29rLXJhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29tbWVyY2UtYmF0dGVsbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbW1vbnNwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbnRhY3QuY21zZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkYmNtc2dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29yZW9zLmlnbml0aW9uK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29zbW9jYWxsZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsa3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5rZXlib2FyZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsa2tcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5wYWxldHRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLndvcmRiYW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcml0aWNhbHRvb2xzLndicyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndic1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcnlwdGlpLnBpcGUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcnlwdG8tc2hhZGUtZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3J5cHRvbWF0b3IuZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcnlwdG9tYXRvci52YXVsdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3RjLXBvc21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN0Y3Qud3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXBvc3RzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcHBkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHBkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcmFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXJhd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3VybC5jYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXJsLnBjdXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY3VybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWFuLmRlYW4ucm9vdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3liYW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWNsb25lZHgranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWNsb25lZHgreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmQybC5jb3Vyc2VwYWNrYWdlMXAwK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZDNtLWRhdGFzZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmQzbS1wcm9ibGVtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkYXJ0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRhdGEtdmlzaW9uLnJkelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJkelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kYXRhcGFja2FnZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRhdGFyZXNvdXJjZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRiZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRiZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWJpYW4uYmluYXJ5LXBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2ZlwiLFwidXZ2ZlwiLFwidXZkXCIsXCJ1dnZkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UudHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2dFwiLFwidXZ2dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWNlLnVuc3BlY2lmaWVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZ4XCIsXCJ1dnZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UuemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZ6XCIsXCJ1dnZ6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlbm92by5mY3NlbGF5b3V0LWxpbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZV9sYXVuY2hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGVzbXVtZS5tb3ZpZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGlyLWJpLnBsYXRlLWRsLW5vc3VmZml4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kbS5kZWxlZ2F0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kbmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkbmFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG9jdW1lbnQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1scFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tb2JpbGUuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG9sYnkubW9iaWxlLjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRvcmVtaXIuc2NvcmVjbG91ZC1iaW5hcnktZG9jdW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRwZ3JhcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkcGdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHJlYW1mYWN0b3J5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGZhY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcml2ZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRzLWtleXBvaW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrcHh4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR0Zy5sb2NhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHRnLmxvY2FsLmZsYXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdGcubG9jYWwuaHRtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmFpdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFpdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZHZiaXNsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZHZialwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmVzZ2NvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNkZnRub3RpZmFjY2Vzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dhY2Nlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjZXNnYWNjZXNzMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dwZGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjcm9hbWluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwdHYuYWxmZWMtYmFzZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwdHYuYWxmZWMtZW5oYW5jZW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1hZ2dyZWdhdGUtcm9vdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWNvbnRhaW5lcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWdlbmVyaWMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1tc2dsaXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaWEtcmVnaXN0cmF0aW9uLXJlcXVlc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1yZWdpc3RyYXRpb24tcmVzcG9uc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pbml0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIucGZyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuc2VydmljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5keHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR5bmFnZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHpyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lYXN5a2FyYW9rZS5jZGdkb3dubG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNkaXMtdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY2lwLnJscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNsaXBzZS5kaXR0bytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5jaGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uZmlsZXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5maWxldXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uc2VyaWVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uc2VyaWVzcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNvd2luLnNlcmllc3VwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWZpLmltZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWZpLmlzb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZW1jbGllbnQuYWNjZXNzcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZW5saXZlblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5tbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lbnBoYXNlLmVudm95XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHJpbnRzLmRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLmVzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5tc2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXBzb24ucXVpY2thbmltZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5zYWx0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2x0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLnNzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcmljc3Nvbi5xdWlja2NhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVzcGFzcy1lc3Bhc3MremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lc3ppZ25vMyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzM1wiLFwiZXQzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuYW9jK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmFzaWMtZSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuYXNpYy1zK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5jdWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dmNvbW1hbmQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dmRpc2NvdmVyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2cHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLWJjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZzYWQtY29kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZzYWQtbnB2cit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2VydmljZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c3luYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2dWVwcm9maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLm1jaWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kubWhlZzVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kub3ZlcmxvYWQtY29udHJvbC1wb2xpY3ktZGF0YXNldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5wc3RuK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnNjaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5zaW1zZXJ2cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS50aW1lc3RhbXAtdG9rZW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kudHNsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnRzbC5kZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV1Lmthc3Bhcmlhbi5jYXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldWRvcmEuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXZvbHYuZWNpZy5wcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldm9sdi5lY2lnLnNldHRpbmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldm9sdi5lY2lnLnRoZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5leHN0cmVhbS1lbXBvd2VyK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXhzdHJlYW0tcGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXpwaXgtYWxidW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlejJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXpwaXgtcGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV6M1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mLXNlY3VyZS5tb2JpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZhbWlseXNlYXJjaC5nZWRjb20remlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mYXN0Y29weS1kaXNrLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmRzbi5tc2VlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZWVkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZkc24uc2VlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlZWRcIixcImRhdGFsZXNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZmc25zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5maWNsYWIuZmxiK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmlsbWl0LnpmY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmludHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZpcmVtb25rZXlzLmNsb3VkY2VsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmxvZ3JhcGhpdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdwaFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mbHV4dGltZS5jbGlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnRjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZvbnQtZm9udGZvcmdlLXNmZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJhbWVtYWtlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZtXCIsXCJmcmFtZVwiLFwibWFrZXJcIixcImJvb2tcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5mbmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5sdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnNjLndlYmxhdW5jaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppZmlsbS5mYi5kb2N1d29ya3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1amlmaWxtLmZiLmRvY3V3b3Jrcy5iaW5kZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1amlmaWxtLmZiLmRvY3V3b3Jrcy5jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1amlmaWxtLmZiLmpmaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9hc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9hMlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9hM1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzZ3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZzVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c3Byc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJoMlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guYXJ0LWV4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guYXJ0NFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRkZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRkZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZG9jdXdvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGR3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MuYmluZGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGJkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MuY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guaGJwbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnV0LW1pc25ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnV0b2luK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1dG9pbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1enp5c2hlZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmenNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2Vub21hdGl4LnR1eGVkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR4ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW50aWNzLmdyZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlbytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb2N1YmUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb2dlYnJhLmZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZ2JcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvZ2VicmEuc2xpZGVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS50b29sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2d0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2V4XCIsXCJncmVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvbmV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd4dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9wbGFuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzJ3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb3NwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzN3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlcmJlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2xvYmFscGxhdGZvcm0uY2FyZC1jb250ZW50LW1ndFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2xvYmFscGxhdGZvcm0uY2FyZC1jb250ZW50LW1ndC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ214XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ214XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLmRvY3VtZW50XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2RvY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5wcmVzZW50YXRpb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnc2xpZGVzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnNwcmVhZHNoZWV0XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3NoZWV0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1lYXJ0aC5rbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmttelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImttelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb3Yuc2suZS1mb3JtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb3Yuc2suZS1mb3JtK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLnhtbGRhdGFjb250YWluZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyYWZlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdxZlwiLFwiZ3FzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyaWRtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWFjY291bnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWhlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWlkZW50aXR5LW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWluamVjdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3J2XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJndG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXRvb2wtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXZjYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhhbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhhbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhhbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oYW5kaGVsZC1lbnRlcnRhaW5tZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiem1tXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhiY2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoYmNpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhjK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGNsLWJpcmVwb3J0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGR0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oZXJva3UranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oaGUubGVzc29uLXBsYXllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxlc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5obDdjZGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGw3djIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBnbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhwZ2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhwaWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLWpseXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtcGNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLXBjbHhsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNseGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHR0cGhvbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5ZHJvc3RhdGl4LnNvZi1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2ZkLWhkc3R4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5cGVyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHlwZXItaXRlbStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5cGVyZHJpdmUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oem4tM2QtY3Jvc3N3b3JkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0uYWZwbGluZWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlibS5lbGVjdHJvbmljLW1lZGlhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ubWluaXBheVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1weVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ubW9kY2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWZwXCIsXCJsaXN0YWZwXCIsXCJsaXN0MzgyMFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ucmlnaHRzLW1hbmFnZW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpcm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLnNlY3VyZS1jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pY2Nwcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNjXCIsXCJpY21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWVlZS4xOTA1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pZ2xvYWRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbWFnZW1ldGVyLmZvbGRlcit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltYWdlbWV0ZXIuaW1hZ2UremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbW1lcnZpc2lvbi1pdnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpdnBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZ1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXZ1XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5pbXNjY3YxcDFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5pbXNjY3YxcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5pbXNjY3YxcDNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5saXMudjIucmVzdWx0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmx0aS52Mi50b29sY29uc3VtZXJwcm9maWxlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmx0aS52Mi50b29scHJveHkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xwcm94eS5pZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5sdGkudjIudG9vbHNldHRpbmdzK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmx0aS52Mi50b29sc2V0dGluZ3Muc2ltcGxlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5mb3JtZWRjb250cm9sLnJtcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5mb3JtaXgtdmlzaW9uYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbmZvdGVjaC5wcm9qZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbmZvdGVjaC5wcm9qZWN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbm5vcGF0aC53YW1wLm5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5zb3JzLmlnbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcmNvbi5mb3JtbmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHB3XCIsXCJ4cHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJnZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpMmdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJ0cnVzdC5kaWdpYm94XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcnRydXN0Lm5uY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludHUucWJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicWJvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludHUucWZ4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicWZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIuY2F0YWxvZ2l0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIuY29uY2VwdGl0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIua25vd2xlZGdlaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5uZXdzaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5uZXdzbWVzc2FnZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wYWNrYWdlaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wbGFubmluZ2l0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdW5wbHVnZ2VkLnJjcHJvZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJjcHJvZmlsZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcmVwb3NpdG9yeS5wYWNrYWdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXJwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlzLXhwclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pc2FjLmZjc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZjc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pc28xMTc4My0xMCt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImphbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1kaXJlY3Rvcnktc2VydmljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtanBuc3RvcmUtd2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1wYXltZW50LXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtcmVnaXN0cmF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1yZWdpc3RyYXRpb24td2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1zZXRzdG9yZS13YWtldXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LXZlcmlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtdmVyaWZpY2F0aW9uLXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamNwLmphdmFtZS5taWRsZXQtcm1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm1zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmppc3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqaXNwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmpvb3N0LmpvZGEtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpvZGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuanNrLmlzZG4tbmduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rYWhvb3R6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3R6XCIsXCJrdHJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmthcmJvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImthcmJvblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2NoYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2hydFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2Zvcm11bGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZm9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtpdmlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmx3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rb250b3VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia29uXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rcHJlc2VudGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3ByXCIsXCJrcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtzcHJlYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrc3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmt3b3JkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3dkXCIsXCJrd3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2VuYW1lYWFwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0a2VcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2lkc3BpcmF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia2lhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtpbmFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia25lXCIsXCJrbnBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua29hblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNrcFwiLFwic2tkXCIsXCJza3RcIixcInNrbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rb2Rhay1kZXNjcmlwdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3NlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxhc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGFzLmxhcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxhcy5sYXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsYXN4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGFzemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sZWFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGliZXJ0eS1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sbGFtYWdyYXBoaWNzLmxpZmUtYmFsYW5jZS5kZXNrdG9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGJkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmV4Y2hhbmdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGJlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvZ2lwaXBlLmNpcmN1aXQremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb29tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy0xLTItM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjEyM1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy1hcHByb2FjaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy1mcmVlbGFuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcmVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtb3JnYW5pemVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3JnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLXNjcmVlbmNhbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibHdwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hY3BvcnRzLnBvcnRwa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwb3J0cGtnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hcGJveC12ZWN0b3ItdGlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm12dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLmFjdGlvbnRva2VuK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLmNvbmZ0b2tlbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWFybGluLmRybS5saWNlbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLm1kY2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hc29uK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWF4YXIuYXJjaGl2ZS4zdHoremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXhtaW5kLm1heG1pbmQtZGJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1jZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZWRjYWxjZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jMVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZWRpYXN0YXRpb24uY2RrZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZGtleVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZXJpZGlhbi1zbGluZ3Nob3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1mZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtd2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWZtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1mbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWNybytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguZmxvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguaWd4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWd4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5wb3J0YWJsZS1leGVjdXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQud2luZG93cy50aHVtYm5haWwtY2FjaGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pZWxlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWlmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWlmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pbmlzb2Z0LWhwMzAwMC1zYXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taXRzdWJpc2hpLm1pc3R5LWd1YXJkLnRydXN0d2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMuZGFmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGFmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkaXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLm1ia1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ia1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMubXF5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXF5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLnBsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMudHhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHhmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vcGh1bi5hcHBsaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uY2VydGlmaWNhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUuYWRzaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmZpc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmdvdGFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUua21yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUudHRjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUud2VtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5pcHJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3ppbGxhLnh1bCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh1bFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy0zbWZkb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtYXJ0Z2FscnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtYXNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNhYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1jb2xvci5pY2Nwcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGxzXCIsXCJ4bG1cIixcInhsYVwiLFwieGxjXCIsXCJ4bHRcIixcInhsd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bGFtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHNiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsc21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGx0bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlb3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtaW1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW1zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWxybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxybVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZleCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNldGhlbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0aG14XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLW9wZW50eXBlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtb3V0bG9va1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wYWNrYWdlLm9iZnVzY2F0ZWQtb3BlbnR5cGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcGtpLnNlY2NhdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2F0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBraS5zdGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0bFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wbGF5cmVhZHkuaW5pdGlhdG9yK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHB0XCIsXCJwcHNcIixcInBvdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LmFkZGluLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwYW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5wcmVzZW50YXRpb24ubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHB0bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNsZG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5zbGlkZXNob3cubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHBzbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnRlbXBsYXRlLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBvdG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcHJpbnRkZXZpY2VjYXBhYmlsaXRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXByaW50aW5nLnByaW50dGlja2V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXByaW50c2NoZW1hdGlja2V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wcm9qZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBwXCIsXCJtcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtdG5lZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd2luZG93cy5kZXZpY2VwYWlyaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLm53cHJpbnRpbmcub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLnByaW50ZXJwYWlyaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLndzZC5vb2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLmxpYy1jaGxnLXJlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd21kcm0ubGljLXJlc3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLm1ldGVyLWNobGctcmVxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13bWRybS5tZXRlci1yZXNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13b3JkLmRvY3VtZW50Lm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd29yZC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkb3RtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3BzXCIsXCJ3a3NcIixcIndjbVwiLFwid2RiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdwbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndwbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy14cHNkb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tc2EtZGlzay1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZXFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXNpZ25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm11bHRpYWQuY3JlYXRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVsdGlhZC5jcmVhdG9yLmNpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVzaWMtbmlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVzaWNpYW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXV2ZWUuc3R5bGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc3R5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm15bmZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGFnbGV0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5hY2FtYXIueWJyaWQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uY2QuY29udHJvbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmNkLnJlZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmVhcnN0Lmluditqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5lYnVtaW5kLmxpbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5lcnZhbmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5ldGZweFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmV1cm9sYW5ndWFnZS5ubHVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubHVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmltblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmludGVuZG8ubml0cm8ucm9tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uaW50ZW5kby5zbmVzLnJvbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubml0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm50ZlwiLFwibml0ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1kaXJlY3RvcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtc2VhbGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibm5zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LXdlYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5ud1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5jYXRhbG9nc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuY29ubWwrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmNvbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5pcHR2LmNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuaXNkcy1yYWRpby1wcmVzZXRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5sYW5kbWFyayt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubGFuZG1hcmsreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmxhbmRtYXJrY29sbGVjdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmFjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuZ2RhdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2Uuc3ltYmlhbi5pbnN0YWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibi1nYWdlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLm5jZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucGNkK3dieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5wY2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLnJhZGlvLXByZXNldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJwc3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJwc3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWRtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWRtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVkeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5leHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLmNvbnRlbnQtc2hhcmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5maWxlLXRyYW5zZmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwub2d3X3JlbW90ZS1hY2Nlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5zaXAtdGFfcmVtb3RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwuc2lwLXRhX3RjcF9zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5jaGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuY2hhcnQtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmRhdGFiYXNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhLXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RmdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmdyYXBoaWNzLXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uLXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtbWFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3R0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LXdlYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90aFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYm5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9jZitjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vY2kuaW1hZ2UubWFuaWZlc3QudjEranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vZnRuLmwxMG4ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNvbnRlbnRhY2Nlc3Nkb3dubG9hZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5jb250ZW50YWNjZXNzc3RyZWFtaW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNzcGctaGV4YmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmRhZS5zdmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYuZGFlLnhodG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLm1pcHB2Y29udHJvbG1lc3NhZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYucGFlLmdlbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5zcGRpc2NvdmVyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5zcGRsaXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLnVlcHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi51c2VycHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2xwYy1zdWdhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS1zY3dzLWNvbmZpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLXNjd3MtaHR0cC1yZXF1ZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEtc2N3cy1odHRwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QuYXNzb2NpYXRlZC1wcm9jZWR1cmUtcGFyYW1ldGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QuZHJtLXRyaWdnZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5pbWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5sdGttXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Qubm90aWZpY2F0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QucHJvdmlzaW9uaW5ndHJpZ2dlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnYm9vdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnZGQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zZ2R1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc2ltcGxlLXN5bWJvbC1jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zbWFydGNhcmQtdHJpZ2dlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNwcm92K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc3RrbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1hZGRyZXNzLWJvb2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5jYWItZmVhdHVyZS1oYW5kbGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLXBjYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1zdWJzLWludml0ZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi11c2VyLXByZWZzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGNkY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmRkMit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRkMlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZHJtLnJpc2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5ncm91cC11c2FnZS1saXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEubHdtMm0rY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmx3bTJtK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmx3bTJtK3RsdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBhbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5kZXRhaWxlZC1wcm9ncmVzcy1yZXBvcnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2MuZmluYWwtcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLmdyb3Vwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5pbnZvY2F0aW9uLWRlc2NyaXB0b3IreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2Mub3B0aW1pemVkLXByb2dyZXNzLXJlcG9ydCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnB1c2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5zY2lkbS5tZXNzYWdlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnhjYXAtZGlyZWN0b3J5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFkcy1lbWFpbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFkcy1maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYWRzLWZvbGRlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFsb2Mtc3VwbC1pbml0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub25lcGFnZXJ0YW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlcnRhbXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VydGF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlcnRhdHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VydGF0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbmJsb3guZ2FtZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9iZ3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbmJsb3guZ2FtZS1iaW5hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5leWUub2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVub2ZmaWNlb3JnLmV4dGVuc2lvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3h0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5zdHJlZXRtYXAuZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9zbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVudGltZXN0YW1wcy5vdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b214bWxwcm9wZXJ0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1jb2xvcnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1sYXlvdXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtc3R5bGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLmNvbW1lbnRhdXRob3JzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5jb21tZW50cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuaGFuZG91dG1hc3Rlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwubm90ZXNtYXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLm5vdGVzc2xpZGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uLm1haW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNwcm9wcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbGR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZWxheW91dCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVtYXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwc3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93Lm1haW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRldXBkYXRlaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGFibGVzdHlsZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnRhZ3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG90eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZS5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC52aWV3cHJvcHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY2NoYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxsaW5rK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Y2FjaGVkZWZpbml0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Y2FjaGVyZWNvcmRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90dGFibGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnl0YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbmhlYWRlcnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25sb2creG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkc3RyaW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsc3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0bWV0YWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlc2luZ2xlY2VsbHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VybmFtZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudm9sYXRpbGVkZXBlbmRlbmNpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVvdmVycmlkZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sZHJhd2luZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5jb21tZW50cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5nbG9zc2FyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmVuZG5vdGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmZvbnR0YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5mb290ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZm9vdG5vdGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLm51bWJlcmluZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5zZXR0aW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5zdHlsZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkb3R4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUubWFpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC53ZWJzZXR0aW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuZGlnaXRhbC1zaWduYXR1cmUteG1sc2lnbmF0dXJlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9yYWNsZS5yZXNvdXJjZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9yYW5nZS5pbmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zYS5uZXRkZXBsb3lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2VvLm1hcGd1aWRlLnBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZ3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3NnaS5idW5kbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2kuZHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vc2dpLnN1YnN5c3RlbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vdHBzLmN0LWtpcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3hsaS5jb3VudGdyYXBoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYWdlcmR1dHkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYWxtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGRiXCIsXCJwcWFcIixcIm9wcmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGFub3BseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGFvcy54bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhdGVudGRpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhdGllbnRlY29tbXNkb2NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhd2FhZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBhd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wY29zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wZy5mb3JtYXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGcub3Nhc2xpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWk2XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBpYWNjZXNzLmFwcGxpY2F0aW9uLWxpY2VuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBpY3NlbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVmaWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG1pLndpZGdldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvYy5ncm91cC1hZHZlcnRpc2VtZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb2NrZXRsZWFyblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGJkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjYtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyN1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNy1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3NVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNzUtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHJlbWluZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnByZXZpZXdzeXN0ZW1zLmJveFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJveFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wcm90ZXVzLm1hZ2F6aW5lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWd6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBzZnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnB1Ymxpc2hhcmUtZGVsdGEtdHJlZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wdmkucHRpZDFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwdGlkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnB3Zy1tdWx0aXBsZXhlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHdnLXhodG1sLXByaW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFsY29tbS5icmV3LWFwcC1yZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnF1YXJhbnRhaW5lbmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInF4ZFwiLFwicXh0XCIsXCJxd2RcIixcInF3dFwiLFwicXhsXCIsXCJxeGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucXVvYmplY3QtcXVveGRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1vbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQtY29uZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0LWNvbm4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1kaWFsb2creG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1zdHJlYW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1jb25mK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWJhc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctZmF4LWRldGVjdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1mYXgtc2VuZHJlY3YreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctZ3JvdXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctc3BlZWNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLXRyYW5zZm9ybSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFpbnN0b3IuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFwaWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZWFsdm5jLmJlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJlZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZWNvcmRhcmUubXVzaWN4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVjb3JkYXJlLm11c2ljeG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXVzaWN4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVubGVhcm4ucmxwcmludFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVzaWxpZW50LmxvZ2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZXN0ZnVsK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmlnLmNyeXB0b25vdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcnlwdG9ub3RlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJpbS5jb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNvZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYS12YnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtdmJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucm91dGU2Ni5saW5rNjYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsaW5rNjZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucnMtMjc0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucnVja3VzLmRvd25sb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zM3Ntc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2FpbGluZ3RyYWNrZXIudHJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNibS5jaWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNibS5taWQyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zY3JpYnVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuM2RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuY3NmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuZG9jXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuZW1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQubWh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQubmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQucHB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQudGlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLnhsc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwuaHRtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwucGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWVtYWlsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlaXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFkZS1zYXZlLWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIml0cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5pbnRlcmNoYW5nZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlpZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXBrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNob290cHJvb2YranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaG9wa2ljaytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNocFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2h4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaWdyb2suc2Vzc2lvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2ltdGVjaC1taW5kbWFwcGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHdkXCIsXCJ0d2RzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNpcmVuK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc21hZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1tZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zbWFydC5ub3RlYm9va1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc21hcnQudGVhY2hlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRlYWNoZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc25lc2Rldi1wYWdlLXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zb2Z0d2FyZTYwMi5maWxsZXIuZm9ybSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNvZnR3YXJlNjAyLmZpbGxlci5mb3JtLXhtbC16aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RrbVwiLFwic2RrZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zcG90ZmlyZS5keHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkeHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3BvdGZpcmUuc2ZzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2ZzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNxbGl0ZTNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNzcy1jb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNzcy1kdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNzcy1udGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5jYWxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmRyYXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uaW1wcmVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5tYXRoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2R3XCIsXCJ2b3JcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlci1nbG9iYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNnbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEucGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNtemlwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0ZXBtYW5pYS5zdGVwY2hhcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdHJlZXQtc3RyZWFtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ud2FkbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3LnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5tYXRoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4d1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci5nbG9iYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4Z1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3R3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN1c1wiLFwic3VzcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3dpZnR2aWV3LWljc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3ljbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5ZnQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW1iaWFuLmluc3RhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpc1wiLFwic2lzeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhzbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0rd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0ubm90aWZpY2F0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG1kZGYrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbWRkZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbXRuZHMrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbXRuZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRzLm5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudGFibGVzY2hlbWEranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50YW8uaW50ZW50LW1vZHVsZS1hcmNoaXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGFvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjYXBcIixcImNhcFwiLFwiZG1wXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRoaW5rLWNlbGwucHB0dGMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50bWQubWVkaWFmbGV4LmFwaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50bW9iaWxlLWxpdmV0dlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRtb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cmkub25lc291cmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cmlkLnRwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRwdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cmlzY2FwZS5teHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudHJ1ZWFwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRyYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cnVlZG9jXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51Ymlzb2Z0LndlYnBsYXllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudWZkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVmZFwiLFwidWZkbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51aXEudGhlbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dHpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudW1hamluXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widW1qXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVuaXR5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widW5pdHl3ZWJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudW9tbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVvbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5hbGVydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5hbGVydC13YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5iZWFyZXItY2hvaWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmJlYXJlci1jaG9pY2Utd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuY2FjaGVvcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jYWNoZW9wLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmNoYW5uZWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuY2hhbm5lbC13YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0Lmxpc3Qtd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQubGlzdGNtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0Y21kLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LnNpZ25hbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXJpLW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmFsdmUuc291cmNlLm1hdGVyaWFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52Y3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmQtc3R1ZHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlY3RvcndvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZXJpbWF0cml4LnZjYXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlcml0b25lLmFpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZXJ5YW50LnRoaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlcy5lbmNyeXB0ZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpZHNvZnQudmlkY29uZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmlzaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2c2RcIixcInZzdFwiLFwidnNzXCIsXCJ2c3dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmlzaW9uYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmlzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpdmlkZW5jZS5zY3JpcHRmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52c2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2c2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLnNpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLnNsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLndieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YnhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53YXAud21sY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtbGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLndtbHNjcmlwdGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZWJ0dXJib1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInd0YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEuZHBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEucDJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEud3NjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53aW5kb3dzLmRldmljZXBhaXJpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndtY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud21mLmJvb3RzdHJhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5tYXRoZW1hdGljYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5tYXRoZW1hdGljYS5wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53b2xmcmFtLnBsYXllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5icFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53b3JkcGVyZmVjdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndwZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53cWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3JxLWhwMzAwMC1sYWJlbGxlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3Quc3RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd2LmNzcCt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3YuY3NwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53di5zc3AreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhhY21sK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueGFyYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54ZmRsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGZkbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54ZmRsLndlYmZvcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUuY3BrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUuZHBrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUucGxhblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUucHBrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUueGxpbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LWRpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuaHYtc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHZzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi12b2ljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3NmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5vcGVuc2NvcmVmb3JtYXQub3NmcHZnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3NmcHZnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5yZW1vdGUtc2V0dXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5zbWFmLWF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2FmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5zbWFmLXBocmFzZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNwZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEudGhyb3VnaC1uZ25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS50dW5uZWwtdWRwZW5jYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhb3dlbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnllbGxvd3JpdmVyLWN1c3RvbS1tZW51XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY21wXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlvdXR1YmUueXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnp1bFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInppclwiLFwiemlyelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC56emF6ei5kZWNrK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiemF6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm9pY2V4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2eG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm91Y2hlci1jbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZxLXJ0Y3B4clwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93YXNtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YXNtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2F0Y2hlcmluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3aWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93ZWJwdXNoLW9wdGlvbnMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dob2lzcHAtcXVlcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2hvaXNwcC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aWRnZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3Z3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aW5obHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhscFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dpdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd29yZHBlcmZlY3Q1LjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd3NkbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93c3BvbGljeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzcG9saWN5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCI3elwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYWJpd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWJ3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hY2UtY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hbWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWFwcGxlLWRpc2tpbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG1nXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hcmpcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcmpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhYWJcIixcIngzMlwiLFwidTMyXCIsXCJ2b3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhYW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtc2VnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhYXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJjcGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiY3Bpb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYmRvY1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkb2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRvcnJlbnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJsb3JiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibGJcIixcImJsb3JiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1iemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJielwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYnppcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJ6MlwiLFwiYm96XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jYnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNiclwiLFwiY2JhXCIsXCJjYnRcIixcImNielwiLFwiY2I3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jZGxpbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZjZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2ZzLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNmc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2hhdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2hhdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2hlc3MtcGduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZ25cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNocm9tZS1leHRlbnNpb25cIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcnhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNvY29hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNjb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY29tcHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNvbmZlcmVuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5zY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY3Bpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3Bpb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY3NoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjc2hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRlYlwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRlYmlhbi1wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZWJcIixcInVkZWJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRnYy1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZ2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRpcmVjdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkaXJcIixcImRjclwiLFwiZHhyXCIsXCJjc3RcIixcImNjdFwiLFwiY3h0XCIsXCJ3M2RcIixcImZnZFwiLFwic3dhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kb29tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWR0Ym5jeCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmN4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kdGJvb2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR0YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZHRicmVzb3VyY2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJlc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZHZpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdmlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWVudm95XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJldnlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWV2YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXZhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWJkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWRvc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1mcmFtZW1ha2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWdob3N0c2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtbGliZ3J4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHNmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXBjZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXNuZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic25mXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXNwZWVkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1zdW5vcy1uZXdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXR5cGUxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZmFcIixcInBmYlwiLFwicGZtXCIsXCJhZm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtdmZvbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZyZWVhcmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFyY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZnV0dXJlc3BsYXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWdjYS1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnY2FcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWdsdWx4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1bHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWdudW1lcmljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnbnVtZXJpY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ3JhbXBzLXhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3JhbXBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1ndGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJndGFyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1nemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1oZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwaHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWluc3RhbGwtaW5zdHJ1Y3Rpb25zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpbnN0YWxsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1pc285NjYwLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpc29cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWl3b3JrLWtleW5vdGUtc2Zma2V5XCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia2V5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1pd29yay1udW1iZXJzLXNmZm51bWJlcnNcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJudW1iZXJzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1pd29yay1wYWdlcy1zZmZwYWdlc1wiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBhZ2VzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1qYXZhLWFyY2hpdmUtZGlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYXJkaWZmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1qYXZhLWpubHAtZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiam5scFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gta2VlcGFzczJcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZGJ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1sYXRleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGF0ZXhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWx1YS1ieXRlY29kZVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx1YWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWx6aC1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsemhcIixcImxoYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbWFrZXNlbGZcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnVuXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1taWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1pZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9va1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHJjXCIsXCJtb2JpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcGVndXJsXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXMtYXBwbGljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwcGxpY2F0aW9uXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcy1zaG9ydGN1dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibG5rXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcy13bWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXMtd216XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bXpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLXhiYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhiYXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zYWNjZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zYmluZGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zY2FyZGZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNyZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNjbGlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zZG9zLXByb2dyYW1cIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleGVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zZG93bmxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV4ZVwiLFwiZGxsXCIsXCJjb21cIixcImJhdFwiLFwibXNpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc21lZGlhdmlld1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXZiXCIsXCJtMTNcIixcIm0xNFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNtZXRhZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21mXCIsXCJ3bXpcIixcImVtZlwiLFwiZW16XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc21vbmV5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbnlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zcHVibGlzaGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwdWJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zc2NoZWR1bGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXN0ZXJtaW5hbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHJtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc3dyaXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cmlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW5ldGNkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmNcIixcImNkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGFjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1uemJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm56YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcGVybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwbFwiLFwicG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXBpbG90XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByY1wiLFwicGRiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2NzMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInAxMlwiLFwicGZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0aWZpY2F0ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInA3YlwiLFwic3BjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0cmVxcmVzcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2ktbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJlZGhhdC1wYWNrYWdlLW1hbmFnZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnBtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1yZXNlYXJjaC1pbmZvLXN5c3RlbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJpc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2VhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNoYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoYXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3dmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodC1hcHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN0dWZmaXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3R1ZmZpdHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN1YnJpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3J0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zdjRjcGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdjRjcGlvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zdjRjcmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2NGNyY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdDN2bS1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widDNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRhZHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0Y2xcIixcInRrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRleFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGV4LXRmbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXhpbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0ZXhpbmZvXCIsXCJ0ZXhpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10Z2lmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYmpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXVzdGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1c3RhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1oZGRcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhkZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmFcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm92YVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmZcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm92ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12Ym94XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Ym94XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZib3gtZXh0cGFja1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZib3gtZXh0cGFja1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12ZGlcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZkaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12aGRcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZoZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12bWRrXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2bWRrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC13YWlzLXNvdXJjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3JjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC13ZWItYXBwLW1hbmlmZXN0K2pzb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYmFwcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGVyXCIsXCJjcnRcIixcInBlbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1jYS1yYS1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1uZXh0LWNhLWNlcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC14ZmlnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmaWdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXhsaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXhwaW5zdGFsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHBpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC14elwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXptYWNoaW5lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ6MVwiLFwiejJcIixcInozXCIsXCJ6NFwiLFwiejVcIixcIno2XCIsXCJ6N1wiLFwiejhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94NDAwLWJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hhY21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hhbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLWF0dCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhdlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtY2Fwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhjYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtZGlmZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtZWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLWVycm9yK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtbnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y29uLWNvbmZlcmVuY2UtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y29uLWNvbmZlcmVuY2UtaW5mby1kaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hlbmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZW5jXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGh0bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4aHRtbFwiLFwieGh0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGh0bWwtdm9pY2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94bGlmZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG1sXCIsXCJ4c2xcIixcInhzZFwiLFwicm5nXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLWR0ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHRkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLWV4dGVybmFsLXBhcnNlZC1lbnRpdHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htcHAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG9wK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG9wXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veHByb2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hzbHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4c2xcIixcInhzbHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94c3BmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4c3BmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veHYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteG1sXCIsXCJ4aHZtbFwiLFwieHZtbFwiLFwieHZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veWFuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInlhbmdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLWRhdGEranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lhbmctZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLXBhdGNoK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInlpblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInppcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3psaWJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24venN0ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vMzJrYWRwY21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vM2dwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNncHBcIl1cbiAgfSxcbiAgXCJhdWRpby8zZ3BwMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYWMzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2FkcGNtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZHBcIl1cbiAgfSxcbiAgXCJhdWRpby9hbXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhbXJcIl1cbiAgfSxcbiAgXCJhdWRpby9hbXItd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYW1yLXdiK1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hcHR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2FzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hdHJhYy1hZHZhbmNlZC1sb3NzbGVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hdHJhYy14XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2F0cmFjM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9iYXNpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF1XCIsXCJzbmRcIl1cbiAgfSxcbiAgXCJhdWRpby9idjE2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2J2MzJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vY2xlYXJtb2RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2NuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2RhdDEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Rsc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kc3ItZXMyMDExMDhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHNyLWVzMjAyMDUwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Rzci1lczIwMjIxMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kc3ItZXMyMDIyMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHZpNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9lYWMzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYy1xY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYzBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY2IwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmNiMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjbndcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY253MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjbncxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmN3YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjd2IwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmN3YjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2ZsZXhmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZndkcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MTEtMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzE5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyMjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTE2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjYtMjRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyNi0zMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyOVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5MVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nc21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZ3NtLWVmclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nc20taHItMDhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vaWxiY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9pcC1tcl92Mi41XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2lzYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhdWRpby9sMTZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbDIwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2wyNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhdWRpby9sOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9scGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbWVscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwMTIwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwMjQwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwNjAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21oYXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbWlkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWlkXCIsXCJtaWRpXCIsXCJrYXJcIixcInJtaVwiXVxuICB9LFxuICBcImF1ZGlvL21vYmlsZS14bWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteG1mXCJdXG4gIH0sXG4gIFwiYXVkaW8vbXAzXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXAzXCJdXG4gIH0sXG4gIFwiYXVkaW8vbXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTRhXCIsXCJtcDRhXCJdXG4gIH0sXG4gIFwiYXVkaW8vbXA0YS1sYXRtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21wYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tcGEtcm9idXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGdhXCIsXCJtcDJcIixcIm1wMmFcIixcIm1wM1wiLFwibTJhXCIsXCJtM2FcIl1cbiAgfSxcbiAgXCJhdWRpby9tcGVnNC1nZW5lcmljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL211c2VwYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXVkaW8vb2dnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2dhXCIsXCJvZ2dcIixcInNweFwiLFwib3B1c1wiXVxuICB9LFxuICBcImF1ZGlvL29wdXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3BjbWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcGNtYS13YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9wY211XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3BjbXUtd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcHJzLnNpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9xY2VscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3J0cC1lbmMtYWVzY20xMjhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcnRwLW1pZGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcnR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3MzbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiczNtXCJdXG4gIH0sXG4gIFwiYXVkaW8vc2NpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zaWxrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaWxcIl1cbiAgfSxcbiAgXCJhdWRpby9zbXZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vc212LXFjcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zbXYwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3NvZmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vc3AtbWlkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zcGVleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby90MTQwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby90MzhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdGVsZXBob25lLWV2ZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3RldHJhX2FjZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3RldHJhX2FjZWxwX2JiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3RvbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdHN2Y2lzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3VlbWNsaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdWxwZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3VzYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdmR2aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bXItd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLjNncHAuaXVmcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuNHNiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5hdWRpb2tvelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuY2VscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuY2lzY28ubnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5jbWxlcy5yYWRpby1ldmVudHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmNucy5hbnAxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5jbnMuaW5mMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZGVjZS5hdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2YVwiLFwidXZ2YVwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kaWdpdGFsLXdpbmRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW9sXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRsbmEuYWR0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkuaGVhYWMuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkuaGVhYWMuMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkubWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5kb2xieS5tcHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LnBsMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucGwyeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucGwyelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucHVsc2UuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZHJhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHJhXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmR0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR0c1wiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdHMuaGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdHNoZFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdHMudWhkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdmIuZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZXZlcmFkLnBsalwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuaG5zLmF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5sdWNlbnQudm9pY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdnBcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQubXMtcGxheXJlYWR5Lm1lZGlhLnB5YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB5YVwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5ub2tpYS5tb2JpbGUteG1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5ub3J0ZWwudmJrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5udWVyYS5lY2VscDQ4MDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlY2VscDQ4MDBcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQubnVlcmEuZWNlbHA3NDcwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWNlbHA3NDcwXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLm51ZXJhLmVjZWxwOTYwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVjZWxwOTYwMFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5vY3RlbC5zYmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnByZXNvbnVzLm11bHRpdHJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnFjZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5yaGV0b3JleC4zMmthZHBjbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQucmlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlwXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnJuLXJlYWxhdWRpb1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhdWRpby92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwubXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQudm14LmN2c2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLndhdmVcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXVkaW8vdm9yYmlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImF1ZGlvL3ZvcmJpcy1jb25maWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vd2F2XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2F2XCJdXG4gIH0sXG4gIFwiYXVkaW8vd2F2ZVwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhdlwiXVxuICB9LFxuICBcImF1ZGlvL3dlYm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYmFcIl1cbiAgfSxcbiAgXCJhdWRpby94LWFhY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWFjXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1haWZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaWZcIixcImFpZmZcIixcImFpZmNcIl1cbiAgfSxcbiAgXCJhdWRpby94LWNhZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2FmXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1mbGFjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbGFjXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tNGFcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTRhXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tYXRyb3NrYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWthXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tcGVndXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtM3VcIl1cbiAgfSxcbiAgXCJhdWRpby94LW1zLXdheFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2F4XCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tcy13bWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtYVwiXVxuICB9LFxuICBcImF1ZGlvL3gtcG4tcmVhbGF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYW1cIixcInJhXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybXBcIl1cbiAgfSxcbiAgXCJhdWRpby94LXJlYWxhdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYVwiXVxuICB9LFxuICBcImF1ZGlvL3gtdHRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXVkaW8veC13YXZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhdlwiXVxuICB9LFxuICBcImF1ZGlvL3htXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bVwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtY2R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZHhcIl1cbiAgfSxcbiAgXCJjaGVtaWNhbC94LWNpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2lmXCJdXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jbWRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWRmXCJdXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNtbFwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtY3NtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NtbFwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtcGRiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiY2hlbWljYWwveC14eXpcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh5elwiXVxuICB9LFxuICBcImZvbnQvY29sbGVjdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR0Y1wiXVxuICB9LFxuICBcImZvbnQvb3RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGZcIl1cbiAgfSxcbiAgXCJmb250L3NmbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiZm9udC90dGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR0ZlwiXVxuICB9LFxuICBcImZvbnQvd29mZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndvZmZcIl1cbiAgfSxcbiAgXCJmb250L3dvZmYyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid29mZjJcIl1cbiAgfSxcbiAgXCJpbWFnZS9hY2VzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXhyXCJdXG4gIH0sXG4gIFwiaW1hZ2UvYXBuZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwbmdcIl1cbiAgfSxcbiAgXCJpbWFnZS9hdmNpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXZjaVwiXVxuICB9LFxuICBcImltYWdlL2F2Y3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdmNzXCJdXG4gIH0sXG4gIFwiaW1hZ2UvYXZpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF2aWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9ibXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJtcFwiXVxuICB9LFxuICBcImltYWdlL2NnbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNnbVwiXVxuICB9LFxuICBcImltYWdlL2RpY29tLXJsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRybGVcIl1cbiAgfSxcbiAgXCJpbWFnZS9lbWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlbWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9maXRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZml0c1wiXVxuICB9LFxuICBcImltYWdlL2czZmF4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzNcIl1cbiAgfSxcbiAgXCJpbWFnZS9naWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9oZWljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGVpY1wiXVxuICB9LFxuICBcImltYWdlL2hlaWMtc2VxdWVuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoZWljc1wiXVxuICB9LFxuICBcImltYWdlL2hlaWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoZWlmXCJdXG4gIH0sXG4gIFwiaW1hZ2UvaGVpZi1zZXF1ZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhlaWZzXCJdXG4gIH0sXG4gIFwiaW1hZ2UvaGVqMmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoZWoyXCJdXG4gIH0sXG4gIFwiaW1hZ2UvaHNqMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhzajJcIl1cbiAgfSxcbiAgXCJpbWFnZS9pZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9qbHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbHNcIl1cbiAgfSxcbiAgXCJpbWFnZS9qcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcDJcIixcImpwZzJcIl1cbiAgfSxcbiAgXCJpbWFnZS9qcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianBlZ1wiLFwianBnXCIsXCJqcGVcIl1cbiAgfSxcbiAgXCJpbWFnZS9qcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcGhcIl1cbiAgfSxcbiAgXCJpbWFnZS9qcGhjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamhjXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanBtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianBtXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanB4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianB4XCIsXCJqcGZcIl1cbiAgfSxcbiAgXCJpbWFnZS9qeHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeHJcIl1cbiAgfSxcbiAgXCJpbWFnZS9qeHJhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhyYVwiXVxuICB9LFxuICBcImltYWdlL2p4cnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeHJzXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanhzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhzXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanhzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImp4c2NcIl1cbiAgfSxcbiAgXCJpbWFnZS9qeHNpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhzaVwiXVxuICB9LFxuICBcImltYWdlL2p4c3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeHNzXCJdXG4gIH0sXG4gIFwiaW1hZ2Uva3R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3R4XCJdXG4gIH0sXG4gIFwiaW1hZ2Uva3R4MlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImt0eDJcIl1cbiAgfSxcbiAgXCJpbWFnZS9uYXBscHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2UvcGpwZWdcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiaW1hZ2UvcG5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG5nXCJdXG4gIH0sXG4gIFwiaW1hZ2UvcHJzLmJ0aWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJidGlmXCJdXG4gIH0sXG4gIFwiaW1hZ2UvcHJzLnB0aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB0aVwiXVxuICB9LFxuICBcImltYWdlL3B3Zy1yYXN0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvc2dpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZ2lcIl1cbiAgfSxcbiAgXCJpbWFnZS9zdmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdmdcIixcInN2Z3pcIl1cbiAgfSxcbiAgXCJpbWFnZS90MzhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0MzhcIl1cbiAgfSxcbiAgXCJpbWFnZS90aWZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGlmXCIsXCJ0aWZmXCJdXG4gIH0sXG4gIFwiaW1hZ2UvdGlmZi1meFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRmeFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBzZFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5haXJ6aXAuYWNjZWxlcmF0b3IuYXp2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXp2XCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmNucy5pbmYyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5kZWNlLmdyYXBoaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dmlcIixcInV2dmlcIixcInV2Z1wiLFwidXZ2Z1wiXVxuICB9LFxuICBcImltYWdlL3ZuZC5kanZ1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGp2dVwiLFwiZGp2XCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmR2Yi5zdWJ0aXRsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN1YlwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5kd2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkd2dcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZHhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHhmXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZhc3RiaWRzaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZic1wiXVxuICB9LFxuICBcImltYWdlL3ZuZC5mcHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmcHhcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZnN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnN0XCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZ1aml4ZXJveC5lZG1pY3MtbW1yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibW1yXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZ1aml4ZXJveC5lZG1pY3MtcmxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmxjXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmdsb2JhbGdyYXBoaWNzLnBnYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQubWljcm9zb2Z0Lmljb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImljb1wiXVxuICB9LFxuICBcImltYWdlL3ZuZC5taXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLm1vemlsbGEuYXBuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQubXMtZGRzXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZHNcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQubXMtbW9kaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1kaVwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5tcy1waG90b1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2RwXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLm5ldC1mcHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJucHhcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQucGNvLmIxNlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImIxNlwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5yYWRpYW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuc2VhbGVkLnBuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwuZ2lmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5qcGdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnN2ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQudGVuY2VudC50YXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0YXBcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQudmFsdmUuc291cmNlLnRleHR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2dGZcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQud2FwLndibXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3Ym1wXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnhpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4aWZcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuemJydXNoLnBjeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjeFwiXVxuICB9LFxuICBcImltYWdlL3dlYnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYnBcIl1cbiAgfSxcbiAgXCJpbWFnZS93bWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWZcIl1cbiAgfSxcbiAgXCJpbWFnZS94LTNkc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2RzXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1jbXUtcmFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXNcIl1cbiAgfSxcbiAgXCJpbWFnZS94LWNteFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY214XCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1mcmVlaGFuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmhcIixcImZoY1wiLFwiZmg0XCIsXCJmaDVcIixcImZoN1wiXVxuICB9LFxuICBcImltYWdlL3gtaWNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpY29cIl1cbiAgfSxcbiAgXCJpbWFnZS94LWpuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbmdcIl1cbiAgfSxcbiAgXCJpbWFnZS94LW1yc2lkLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaWRcIl1cbiAgfSxcbiAgXCJpbWFnZS94LW1zLWJtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJtcFwiXVxuICB9LFxuICBcImltYWdlL3gtcGN4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY3hcIl1cbiAgfSxcbiAgXCJpbWFnZS94LXBpY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBpY1wiLFwicGN0XCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1wb3J0YWJsZS1hbnltYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBubVwiXVxuICB9LFxuICBcImltYWdlL3gtcG9ydGFibGUtYml0bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYm1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXBvcnRhYmxlLWdyYXltYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBnbVwiXVxuICB9LFxuICBcImltYWdlL3gtcG9ydGFibGUtcGl4bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcG1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXJnYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmdiXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC10Z2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRnYVwiXVxuICB9LFxuICBcImltYWdlL3gteGJpdG1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGJtXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC14Y2ZcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiaW1hZ2UveC14cGl4bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4cG1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXh3aW5kb3dkdW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4d2RcIl1cbiAgfSxcbiAgXCJtZXNzYWdlL2NwaW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9kZWxpdmVyeS1zdGF0dXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXG4gICAgICBcImRpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiXG4gICAgXVxuICB9LFxuICBcIm1lc3NhZ2UvZXh0ZXJuYWwtYm9keVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2ZlZWRiYWNrLXJlcG9ydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2dsb2JhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInU4bXNnXCJdXG4gIH0sXG4gIFwibWVzc2FnZS9nbG9iYWwtZGVsaXZlcnktc3RhdHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widThkc25cIl1cbiAgfSxcbiAgXCJtZXNzYWdlL2dsb2JhbC1kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1OG1kblwiXVxuICB9LFxuICBcIm1lc3NhZ2UvZ2xvYmFsLWhlYWRlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1OGhkclwiXVxuICB9LFxuICBcIm1lc3NhZ2UvaHR0cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtZXNzYWdlL2ltZG4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwibWVzc2FnZS9uZXdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvcGFydGlhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtZXNzYWdlL3JmYzgyMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW1sXCIsXCJtaW1lXCJdXG4gIH0sXG4gIFwibWVzc2FnZS9zLWh0dHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9zaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9zaXBmcmFnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvdHJhY2tpbmctc3RhdHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2Uvdm5kLnNpLnNpbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS92bmQud2ZhLndzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzY1wiXVxuICB9LFxuICBcIm1vZGVsLzNtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNtZlwiXVxuICB9LFxuICBcIm1vZGVsL2U1N1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC9nbHRmK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdsdGZcIl1cbiAgfSxcbiAgXCJtb2RlbC9nbHRmLWJpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2xiXCJdXG4gIH0sXG4gIFwibW9kZWwvaWdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnc1wiLFwiaWdlc1wiXVxuICB9LFxuICBcIm1vZGVsL21lc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2hcIixcIm1lc2hcIixcInNpbG9cIl1cbiAgfSxcbiAgXCJtb2RlbC9tdGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdGxcIl1cbiAgfSxcbiAgXCJtb2RlbC9vYmpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYmpcIl1cbiAgfSxcbiAgXCJtb2RlbC9zdGVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3N0ZXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHB4XCJdXG4gIH0sXG4gIFwibW9kZWwvc3RlcCt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHB6XCJdXG4gIH0sXG4gIFwibW9kZWwvc3RlcC14bWwremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RweHpcIl1cbiAgfSxcbiAgXCJtb2RlbC9zdGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGxcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQuY29sbGFkYSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRhZVwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5kd2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkd2ZcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQuZmxhdGxhbmQuM2RtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC92bmQuZ2RsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2RsXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLmdzLWdkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5ncy5nZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwvdm5kLmd0d1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd0d1wiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5tb21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcIm1vZGVsL3ZuZC5tdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdHNcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQub3BlbmdleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9nZXhcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQucGFyYXNvbGlkLnRyYW5zbWl0LmJpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhfYlwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5wYXJhc29saWQudHJhbnNtaXQudGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhfdFwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5weXRoYS5weW94XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5yb3NldHRlLmFubm90YXRlZC1kYXRhLW1vZGVsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5zYXAudmRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmRzXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLnVzZHoremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXNkelwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC52YWx2ZS5zb3VyY2UuY29tcGlsZWQtbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYnNwXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLnZ0dVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZ0dVwiXVxuICB9LFxuICBcIm1vZGVsL3ZybWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cmxcIixcInZybWxcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QrYmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4M2RiXCIsXCJ4M2RielwiXVxuICB9LFxuICBcIm1vZGVsL3gzZCtmYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIngzZGJcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QrdnJtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieDNkdlwiLFwieDNkdnpcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4M2RcIixcIngzZHpcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QtdnJtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIngzZHZcIl1cbiAgfSxcbiAgXCJtdWx0aXBhcnQvYWx0ZXJuYXRpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2FwcGxlZG91YmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9ieXRlcmFuZ2VzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9kaWdlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2VuY3J5cHRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcIm11bHRpcGFydC9oZWFkZXItc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9taXhlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvbXVsdGlsaW5ndWFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9wYXJhbGxlbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvcmVsYXRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtdWx0aXBhcnQvcmVwb3J0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9zaWduZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3ZuZC5iaW50Lm1lZC1wbHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC92b2ljZS1tZXNzYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC94LW1peGVkLXJlcGxhY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9jYWNoZS1tYW5pZmVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXBwY2FjaGVcIixcIm1hbmlmZXN0XCJdXG4gIH0sXG4gIFwidGV4dC9jYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImljc1wiLFwiaWZiXCJdXG4gIH0sXG4gIFwidGV4dC9jYWxlbmRlclwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcInRleHQvY21kXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC9jb2ZmZWVzY3JpcHRcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjb2ZmZWVcIixcImxpdGNvZmZlZVwiXVxuICB9LFxuICBcInRleHQvY3FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvY3FsLWV4cHJlc3Npb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9jcWwtaWRlbnRpZmllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2Nzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjc3NcIl1cbiAgfSxcbiAgXCJ0ZXh0L2NzdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3N2XCJdXG4gIH0sXG4gIFwidGV4dC9jc3Ytc2NoZW1hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZGlyZWN0b3J5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZG5zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZWNtYXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZW5yaWNoZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9maGlycGF0aFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2ZsZXhmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9md2RyZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9nZmYzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZ3JhbW1hci1yZWYtbGlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2h0bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0bWxcIixcImh0bVwiLFwic2h0bWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L2phZGVcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYWRlXCJdXG4gIH0sXG4gIFwidGV4dC9qYXZhc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC9qY3ItY25kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvanN4XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc3hcIl1cbiAgfSxcbiAgXCJ0ZXh0L2xlc3NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxlc3NcIl1cbiAgfSxcbiAgXCJ0ZXh0L21hcmtkb3duXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYXJrZG93blwiLFwibWRcIl1cbiAgfSxcbiAgXCJ0ZXh0L21hdGhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L21keFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWR4XCJdXG4gIH0sXG4gIFwidGV4dC9taXphclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L24zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm4zXCJdXG4gIH0sXG4gIFwidGV4dC9wYXJhbWV0ZXJzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiXG4gIH0sXG4gIFwidGV4dC9wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9wbGFpblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHh0XCIsXCJ0ZXh0XCIsXCJjb25mXCIsXCJkZWZcIixcImxpc3RcIixcImxvZ1wiLFwiaW5cIixcImluaVwiXVxuICB9LFxuICBcInRleHQvcHJvdmVuYW5jZS1ub3RhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIlxuICB9LFxuICBcInRleHQvcHJzLmZhbGxlbnN0ZWluLnJzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3Bycy5saW5lcy50YWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkc2NcIl1cbiAgfSxcbiAgXCJ0ZXh0L3Bycy5wcm9wLmxvZ2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmFwdG9yZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmZjODIyLWhlYWRlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9yaWNodGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnR4XCJdXG4gIH0sXG4gIFwidGV4dC9ydGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJ0ZlwiXVxuICB9LFxuICBcInRleHQvcnRwLWVuYy1hZXNjbTEyOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3J0cGxvb3BiYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcnR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvc2dtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNnbWxcIixcInNnbVwiXVxuICB9LFxuICBcInRleHQvc2hhY2xjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvc2hleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoZXhcIl1cbiAgfSxcbiAgXCJ0ZXh0L3NsaW1cIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbGltXCIsXCJzbG1cIl1cbiAgfSxcbiAgXCJ0ZXh0L3NwZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcGR4XCJdXG4gIH0sXG4gIFwidGV4dC9zdHJpbmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvc3R5bHVzXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3R5bHVzXCIsXCJzdHlsXCJdXG4gIH0sXG4gIFwidGV4dC90MTQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRzdlwiXVxuICB9LFxuICBcInRleHQvdHJvZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0XCIsXCJ0clwiLFwicm9mZlwiLFwibWFuXCIsXCJtZVwiLFwibXNcIl1cbiAgfSxcbiAgXCJ0ZXh0L3R1cnRsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHRsXCJdXG4gIH0sXG4gIFwidGV4dC91bHBmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC91cmktbGlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXJpXCIsXCJ1cmlzXCIsXCJ1cmxzXCJdXG4gIH0sXG4gIFwidGV4dC92Y2FyZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNhcmRcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmFiY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hc2NpaS1hcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImN1cmxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5jdXJsLmRjdXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkY3VybFwiXVxuICB9LFxuICBcInRleHQvdm5kLmN1cmwubWN1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jdXJsXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybC5zY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2N1cmxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5kZWJpYW4uY29weXJpZ2h0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiXG4gIH0sXG4gIFwidGV4dC92bmQuZG1jbGllbnRzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuZHZiLnN1YnRpdGxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3ViXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuZXNtZXJ0ZWMudGhlbWUtZGVzY3JpcHRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIlxuICB9LFxuICBcInRleHQvdm5kLmZhbWlseXNlYXJjaC5nZWRjb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZWRcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5maWNsYWIuZmx0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmZseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZseVwiXVxuICB9LFxuICBcInRleHQvdm5kLmZtaS5mbGV4c3RvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZseFwiXVxuICB9LFxuICBcInRleHQvdm5kLmdtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5ncmFwaHZpelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd2XCJdXG4gIH0sXG4gIFwidGV4dC92bmQuaGFuc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5oZ2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuaW4zZC4zZG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2RtbFwiXVxuICB9LFxuICBcInRleHQvdm5kLmluM2Quc3BvdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNwb3RcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5pcHRjLm5ld3NtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5pcHRjLm5pdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQubGF0ZXgtelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5tb3Rvcm9sYS5yZWZsZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQubXMtbWVkaWFwYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLm5ldDJwaG9uZS5jb21tY2VudGVyLmNvbW1hbmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQucmFkaXN5cy5tc21sLWJhc2ljLWxheW91dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5zZW54LndhcnBzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuc2kudXJpY2F0YWxvZ3VlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLnNvc2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuc3VuLmoybWUuYXBwLWRlc2NyaXB0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImphZFwiXVxuICB9LFxuICBcInRleHQvdm5kLnRyb2xsdGVjaC5saW5ndWlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIlxuICB9LFxuICBcInRleHQvdm5kLndhcC5zaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC53YXAuc2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQud2FwLndtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtbFwiXVxuICB9LFxuICBcInRleHQvdm5kLndhcC53bWxzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxzXCJdXG4gIH0sXG4gIFwidGV4dC92dHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widnR0XCJdXG4gIH0sXG4gIFwidGV4dC94LWFzbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic1wiLFwiYXNtXCJdXG4gIH0sXG4gIFwidGV4dC94LWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNcIixcImNjXCIsXCJjeHhcIixcImNwcFwiLFwiaFwiLFwiaGhcIixcImRpY1wiXVxuICB9LFxuICBcInRleHQveC1jb21wb25lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHRjXCJdXG4gIH0sXG4gIFwidGV4dC94LWZvcnRyYW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZcIixcImZvclwiLFwiZjc3XCIsXCJmOTBcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtZ3d0LXJwY1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcInRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGJzXCJdXG4gIH0sXG4gIFwidGV4dC94LWphdmEtc291cmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYXZhXCJdXG4gIH0sXG4gIFwidGV4dC94LWpxdWVyeS10bXBsXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC94LWx1YVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx1YVwiXVxuICB9LFxuICBcInRleHQveC1tYXJrZG93blwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWtkXCJdXG4gIH0sXG4gIFwidGV4dC94LW5mb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmZvXCJdXG4gIH0sXG4gIFwidGV4dC94LW9wbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9wbWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtb3JnXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvcmdcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtcGFzY2FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwXCIsXCJwYXNcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtcHJvY2Vzc2luZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGRlXCJdXG4gIH0sXG4gIFwidGV4dC94LXNhc3NcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzYXNzXCJdXG4gIH0sXG4gIFwidGV4dC94LXNjc3NcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY3NzXCJdXG4gIH0sXG4gIFwidGV4dC94LXNldGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXR4XCJdXG4gIH0sXG4gIFwidGV4dC94LXNmdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2Z2XCJdXG4gIH0sXG4gIFwidGV4dC94LXN1c2UteW1wXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ5bXBcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtdXVlbmNvZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV1XCJdXG4gIH0sXG4gIFwidGV4dC94LXZjYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNzXCJdXG4gIH0sXG4gIFwidGV4dC94LXZjYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y2ZcIl1cbiAgfSxcbiAgXCJ0ZXh0L3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG1sXCJdXG4gIH0sXG4gIFwidGV4dC94bWwtZXh0ZXJuYWwtcGFyc2VkLWVudGl0eVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3lhbWxcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInlhbWxcIixcInltbFwiXVxuICB9LFxuICBcInZpZGVvLzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby8zZ3BwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2dwXCIsXCIzZ3BwXCJdXG4gIH0sXG4gIFwidmlkZW8vM2dwcC10dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby8zZ3BwMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNnMlwiXVxuICB9LFxuICBcInZpZGVvL2F2MVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9ibXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9idDY1NlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9jZWxiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2R2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2ZmdjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vZmxleGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjYxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaDI2MVwiXVxuICB9LFxuICBcInZpZGVvL2gyNjNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoMjYzXCJdXG4gIH0sXG4gIFwidmlkZW8vaDI2My0xOTk4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2gyNjMtMjAwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjY0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaDI2NFwiXVxuICB9LFxuICBcInZpZGVvL2gyNjQtcmNkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjY0LXN2Y1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjY1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2lzby5zZWdtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTRzXCJdXG4gIH0sXG4gIFwidmlkZW8vanBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpwZ3ZcIl1cbiAgfSxcbiAgXCJ2aWRlby9qcGVnMjAwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9qcG1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpwbVwiLFwianBnbVwiXVxuICB9LFxuICBcInZpZGVvL2p4c3ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vbWoyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWoyXCIsXCJtanAyXCJdXG4gIH0sXG4gIFwidmlkZW8vbXAxc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9tcDJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL21wMnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0c1wiXVxuICB9LFxuICBcInZpZGVvL21wNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wNFwiLFwibXA0dlwiLFwibXBnNFwiXVxuICB9LFxuICBcInZpZGVvL21wNHYtZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vbXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wZWdcIixcIm1wZ1wiLFwibXBlXCIsXCJtMXZcIixcIm0ydlwiXVxuICB9LFxuICBcInZpZGVvL21wZWc0LWdlbmVyaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vbXB2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL252XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL29nZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9ndlwiXVxuICB9LFxuICBcInZpZGVvL3Bhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9wb2ludGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3F1aWNrdGltZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInF0XCIsXCJtb3ZcIl1cbiAgfSxcbiAgXCJ2aWRlby9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vcmF3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3J0cC1lbmMtYWVzY20xMjhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vcnR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3NjaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vc21wdGUyOTFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vc21wdGUyOTJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3VscGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92YzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdmMyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5jY3R2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLmhkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZoXCIsXCJ1dnZoXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UubW9iaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZtXCIsXCJ1dnZtXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UubXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLnBkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZwXCIsXCJ1dnZwXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2Uuc2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnNcIixcInV2dnNcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQuZGVjZS52aWRlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2dlwiLFwidXZ2dlwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5kaXJlY3R2Lm1wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRpcmVjdHYubXBlZy10dHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRsbmEubXBlZy10dHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmR2Yi5maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHZiXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmZ2dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZ2dFwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5obnMudmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4xZHBhcml0eWZlYy0xMDEwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0uMWRwYXJpdHlmZWMtMjAwNVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLjJkcGFyaXR5ZmVjLTEwMTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4yZHBhcml0eWZlYy0yMDA1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0udHRzYXZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0udHRzbXBlZzJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm1vdG9yb2xhLnZpZGVvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5tb3Rvcm9sYS52aWRlb3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm1wZWd1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteHVcIixcIm00dVwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHl2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHl2XCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLm5va2lhLmludGVybGVhdmVkLW11bHRpbWVkaWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm5va2lhLm1wNHZyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5ub2tpYS52aWRlb3ZvaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm9iamVjdHZpZGVvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5yYWRnYW1ldHRvb2xzLmJpbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnJhZGdhbWV0dG9vbHMuc21hY2tlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuc2VhbGVkLm1wZWcxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5zZWFsZWQubXBlZzRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnNlYWxlZC5zd2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLm1vdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQudXZ2dS5tcDRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnVcIixcInV2dnVcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQudml2b1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZpdlwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC55b3V0dWJlLnl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZwOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92cDlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vd2VibVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2VibVwiXVxuICB9LFxuICBcInZpZGVvL3gtZjR2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmNHZcIl1cbiAgfSxcbiAgXCJ2aWRlby94LWZsaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxpXCJdXG4gIH0sXG4gIFwidmlkZW8veC1mbHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZsdlwiXVxuICB9LFxuICBcInZpZGVvL3gtbTR2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtNHZcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1hdHJvc2thXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJta3ZcIixcIm1rM2RcIixcIm1rc1wiXVxuICB9LFxuICBcInZpZGVvL3gtbW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbmdcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLWFzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXNmXCIsXCJhc3hcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLXZvYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widm9iXCJdXG4gIH0sXG4gIFwidmlkZW8veC1tcy13bVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21cIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLXdtdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid212XCJdXG4gIH0sXG4gIFwidmlkZW8veC1tcy13bXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndteFwiXVxuICB9LFxuICBcInZpZGVvL3gtbXMtd3Z4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3dnhcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zdmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF2aVwiXVxuICB9LFxuICBcInZpZGVvL3gtc2dpLW1vdmllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtb3ZpZVwiXVxuICB9LFxuICBcInZpZGVvL3gtc212XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbXZcIl1cbiAgfSxcbiAgXCJ4LWNvbmZlcmVuY2UveC1jb29sdGFsa1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNlXCJdXG4gIH0sXG4gIFwieC1zaGFkZXIveC1mcmFnbWVudFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcIngtc2hhZGVyL3gtdmVydGV4XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH1cbn1cbiIsIi8qIVxuICogbWltZS1kYlxuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNS0yMDIyIERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kYi5qc29uJylcbiIsIi8qIVxuICogbWltZS10eXBlc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRiID0gcmVxdWlyZSgnbWltZS1kYicpXG52YXIgZXh0bmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5leHRuYW1lXG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIEVYVFJBQ1RfVFlQRV9SRUdFWFAgPSAvXlxccyooW147XFxzXSopKD86O3xcXHN8JCkvXG52YXIgVEVYVF9UWVBFX1JFR0VYUCA9IC9edGV4dFxcLy9pXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0cy5jaGFyc2V0ID0gY2hhcnNldFxuZXhwb3J0cy5jaGFyc2V0cyA9IHsgbG9va3VwOiBjaGFyc2V0IH1cbmV4cG9ydHMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuZXhwb3J0cy5leHRlbnNpb24gPSBleHRlbnNpb25cbmV4cG9ydHMuZXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbClcbmV4cG9ydHMubG9va3VwID0gbG9va3VwXG5leHBvcnRzLnR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vLyBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucy90eXBlcyBtYXBzXG5wb3B1bGF0ZU1hcHMoZXhwb3J0cy5leHRlbnNpb25zLCBleHBvcnRzLnR5cGVzKVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBjaGFyc2V0IGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY2hhcnNldCAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG4gIHZhciBtaW1lID0gbWF0Y2ggJiYgZGJbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAobWltZSAmJiBtaW1lLmNoYXJzZXQpIHtcbiAgICByZXR1cm4gbWltZS5jaGFyc2V0XG4gIH1cblxuICAvLyBkZWZhdWx0IHRleHQvKiB0byB1dGYtOFxuICBpZiAobWF0Y2ggJiYgVEVYVF9UWVBFX1JFR0VYUC50ZXN0KG1hdGNoWzFdKSkge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmdWxsIENvbnRlbnQtVHlwZSBoZWFkZXIgZ2l2ZW4gYSBNSU1FIHR5cGUgb3IgZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNvbnRlbnRUeXBlIChzdHIpIHtcbiAgLy8gVE9ETzogc2hvdWxkIHRoaXMgZXZlbiBiZSBpbiB0aGlzIG1vZHVsZT9cbiAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBtaW1lID0gc3RyLmluZGV4T2YoJy8nKSA9PT0gLTFcbiAgICA/IGV4cG9ydHMubG9va3VwKHN0cilcbiAgICA6IHN0clxuXG4gIGlmICghbWltZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIGNvbnRlbnQtdHlwZSBvciBvdGhlciBtb2R1bGVcbiAgaWYgKG1pbWUuaW5kZXhPZignY2hhcnNldCcpID09PSAtMSkge1xuICAgIHZhciBjaGFyc2V0ID0gZXhwb3J0cy5jaGFyc2V0KG1pbWUpXG4gICAgaWYgKGNoYXJzZXQpIG1pbWUgKz0gJzsgY2hhcnNldD0nICsgY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gbWltZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBleHRlbnNpb24gKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuXG4gIC8vIGdldCBleHRlbnNpb25zXG4gIHZhciBleHRzID0gbWF0Y2ggJiYgZXhwb3J0cy5leHRlbnNpb25zW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4dHNbMF1cbn1cblxuLyoqXG4gKiBMb29rdXAgdGhlIE1JTUUgdHlwZSBmb3IgYSBmaWxlIHBhdGgvZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBsb29rdXAgKHBhdGgpIHtcbiAgaWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gZ2V0IHRoZSBleHRlbnNpb24gKFwiZXh0XCIgb3IgXCIuZXh0XCIgb3IgZnVsbCBwYXRoKVxuICB2YXIgZXh0ZW5zaW9uID0gZXh0bmFtZSgneC4nICsgcGF0aClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zdWJzdHIoMSlcblxuICBpZiAoIWV4dGVuc2lvbikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHMudHlwZXNbZXh0ZW5zaW9uXSB8fCBmYWxzZVxufVxuXG4vKipcbiAqIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zIGFuZCB0eXBlcyBtYXBzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwb3B1bGF0ZU1hcHMgKGV4dGVuc2lvbnMsIHR5cGVzKSB7XG4gIC8vIHNvdXJjZSBwcmVmZXJlbmNlIChsZWFzdCAtPiBtb3N0KVxuICB2YXIgcHJlZmVyZW5jZSA9IFsnbmdpbngnLCAnYXBhY2hlJywgdW5kZWZpbmVkLCAnaWFuYSddXG5cbiAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaE1pbWVUeXBlICh0eXBlKSB7XG4gICAgdmFyIG1pbWUgPSBkYlt0eXBlXVxuICAgIHZhciBleHRzID0gbWltZS5leHRlbnNpb25zXG5cbiAgICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBtaW1lIC0+IGV4dGVuc2lvbnNcbiAgICBleHRlbnNpb25zW3R5cGVdID0gZXh0c1xuXG4gICAgLy8gZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBleHRlbnNpb24gPSBleHRzW2ldXG5cbiAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dKSB7XG4gICAgICAgIHZhciBmcm9tID0gcHJlZmVyZW5jZS5pbmRleE9mKGRiW3R5cGVzW2V4dGVuc2lvbl1dLnNvdXJjZSlcbiAgICAgICAgdmFyIHRvID0gcHJlZmVyZW5jZS5pbmRleE9mKG1pbWUuc291cmNlKVxuXG4gICAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dICE9PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyAmJlxuICAgICAgICAgIChmcm9tID4gdG8gfHwgKGZyb20gPT09IHRvICYmIHR5cGVzW2V4dGVuc2lvbl0uc3Vic3RyKDAsIDEyKSA9PT0gJ2FwcGxpY2F0aW9uLycpKSkge1xuICAgICAgICAgIC8vIHNraXAgdGhlIHJlbWFwcGluZ1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHRoZSBleHRlbnNpb24gLT4gbWltZVxuICAgICAgdHlwZXNbZXh0ZW5zaW9uXSA9IHR5cGVcbiAgICB9XG4gIH0pXG59XG4iLCIvLyAuZGlybmFtZSwgLmJhc2VuYW1lLCBhbmQgLmV4dG5hbWUgbWV0aG9kcyBhcmUgZXh0cmFjdGVkIGZyb20gTm9kZS5qcyB2OC4xMS4xLFxuLy8gYmFja3BvcnRlZCBhbmQgdHJhbnNwbGl0ZWQgd2l0aCBCYWJlbCwgd2l0aCBiYWNrd2FyZHMtY29tcGF0IGZpeGVzXG5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyByZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggYXJyYXkgd2l0aCBkaXJlY3RvcnkgbmFtZXMgdGhlcmVcbi8vIG11c3QgYmUgbm8gc2xhc2hlcywgZW1wdHkgZWxlbWVudHMsIG9yIGRldmljZSBuYW1lcyAoYzpcXCkgaW4gdGhlIGFycmF5XG4vLyAoc28gYWxzbyBubyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIC0gaXQgZG9lcyBub3QgZGlzdGluZ3Vpc2hcbi8vIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocylcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KHBhcnRzLCBhbGxvd0Fib3ZlUm9vdCkge1xuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydHM7XG59XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHBhdGggPSBwYXRoICsgJyc7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG4gIHZhciBoYXNSb290ID0gY29kZSA9PT0gNDcgLyovKi87XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMTsgLS1pKSB7XG4gICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSByZXR1cm4gaGFzUm9vdCA/ICcvJyA6ICcuJztcbiAgaWYgKGhhc1Jvb3QgJiYgZW5kID09PSAxKSB7XG4gICAgLy8gcmV0dXJuICcvLyc7XG4gICAgLy8gQmFja3dhcmRzLWNvbXBhdCBmaXg6XG4gICAgcmV0dXJuICcvJztcbiAgfVxuICByZXR1cm4gcGF0aC5zbGljZSgwLCBlbmQpO1xufTtcblxuZnVuY3Rpb24gYmFzZW5hbWUocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aCArICcnO1xuXG4gIHZhciBzdGFydCA9IDA7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIHZhciBpO1xuXG4gIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIHBhdGggY29tcG9uZW50XG4gICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgIGVuZCA9IGkgKyAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSByZXR1cm4gJyc7XG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xufVxuXG4vLyBVc2VzIGEgbWl4ZWQgYXBwcm9hY2ggZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LCBhcyBleHQgYmVoYXZpb3IgY2hhbmdlZFxuLy8gaW4gbmV3IE5vZGUuanMgdmVyc2lvbnMsIHNvIG9ubHkgYmFzZW5hbWUoKSBhYm92ZSBpcyBiYWNrcG9ydGVkIGhlcmVcbmV4cG9ydHMuYmFzZW5hbWUgPSBmdW5jdGlvbiAocGF0aCwgZXh0KSB7XG4gIHZhciBmID0gYmFzZW5hbWUocGF0aCk7XG4gIGlmIChleHQgJiYgZi5zdWJzdHIoLTEgKiBleHQubGVuZ3RoKSA9PT0gZXh0KSB7XG4gICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIGY7XG59O1xuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbiAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aCArICcnO1xuICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgdmFyIHN0YXJ0UGFydCA9IDA7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgdmFyIHByZURvdFN0YXRlID0gMDtcbiAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDQ2IC8qLiovKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgb3VyIGZpcnN0IGRvdCwgbWFyayBpdCBhcyB0aGUgc3RhcnQgb2Ygb3VyIGV4dGVuc2lvblxuICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKVxuICAgICAgICAgIHN0YXJ0RG90ID0gaTtcbiAgICAgICAgZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpXG4gICAgICAgICAgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICAgIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xufTtcblxuZnVuY3Rpb24gZmlsdGVyICh4cywgZikge1xuICAgIGlmICh4cy5maWx0ZXIpIHJldHVybiB4cy5maWx0ZXIoZik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGYoeHNbaV0sIGksIHhzKSkgcmVzLnB1c2goeHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciAtIG5lZ2F0aXZlIGluZGV4IGRvbid0IHdvcmsgaW4gSUU4XG52YXIgc3Vic3RyID0gJ2FiJy5zdWJzdHIoLTEpID09PSAnYidcbiAgICA/IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHsgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbikgfVxuICAgIDogZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikge1xuICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IHN0ci5sZW5ndGggKyBzdGFydDtcbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbik7XG4gICAgfVxuO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZSgnLi9TdWJqZWN0Jyk7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuL1N1YnNjcmlwdGlvbicpO1xuLyoqXG4gKiBAY2xhc3MgQXN5bmNTdWJqZWN0PFQ+XG4gKi9cbnZhciBBc3luY1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTdWJqZWN0KCkge1xuICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFzTmV4dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gQXN5bmNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhpcy50aHJvd25FcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaGFzQ29tcGxldGVkICYmIHRoaXMuaGFzTmV4dCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fc3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBBc3luY1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5oYXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBpZiAoIXRoaXMuaGFzQ29tcGxldGVkKSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmhhc05leHQpIHtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBBc3luY1N1YmplY3Q7XG59KFN1YmplY3RfMS5TdWJqZWN0KSk7XG5leHBvcnRzLkFzeW5jU3ViamVjdCA9IEFzeW5jU3ViamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jU3ViamVjdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoJy4vU3ViamVjdCcpO1xudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yXzEgPSByZXF1aXJlKCcuL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InKTtcbi8qKlxuICogQGNsYXNzIEJlaGF2aW9yU3ViamVjdDxUPlxuICovXG52YXIgQmVoYXZpb3JTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQmVoYXZpb3JTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJlaGF2aW9yU3ViamVjdChfdmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gX3ZhbHVlO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBfc3VwZXIucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbiAmJiAhc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMudGhyb3duRXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB0aGlzLl92YWx1ZSA9IHZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBCZWhhdmlvclN1YmplY3Q7XG59KFN1YmplY3RfMS5TdWJqZWN0KSk7XG5leHBvcnRzLkJlaGF2aW9yU3ViamVjdCA9IEJlaGF2aW9yU3ViamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJlaGF2aW9yU3ViamVjdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4vU3Vic2NyaWJlcicpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBJbm5lclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhJbm5lclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSW5uZXJTdWJzY3JpYmVyKHBhcmVudCwgb3V0ZXJWYWx1ZSwgb3V0ZXJJbmRleCkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMub3V0ZXJWYWx1ZSA9IG91dGVyVmFsdWU7XG4gICAgICAgIHRoaXMub3V0ZXJJbmRleCA9IG91dGVySW5kZXg7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgIH1cbiAgICBJbm5lclN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMucGFyZW50Lm5vdGlmeU5leHQodGhpcy5vdXRlclZhbHVlLCB2YWx1ZSwgdGhpcy5vdXRlckluZGV4LCB0aGlzLmluZGV4KyssIHRoaXMpO1xuICAgIH07XG4gICAgSW5uZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQubm90aWZ5RXJyb3IoZXJyb3IsIHRoaXMpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICBJbm5lclN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQubm90aWZ5Q29tcGxldGUodGhpcyk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHJldHVybiBJbm5lclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG5leHBvcnRzLklubmVyU3Vic2NyaWJlciA9IElubmVyU3Vic2NyaWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlubmVyU3Vic2NyaWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL09ic2VydmFibGUnKTtcbi8qKlxuICogUmVwcmVzZW50cyBhIHB1c2gtYmFzZWQgZXZlbnQgb3IgdmFsdWUgdGhhdCBhbiB7QGxpbmsgT2JzZXJ2YWJsZX0gY2FuIGVtaXQuXG4gKiBUaGlzIGNsYXNzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG9wZXJhdG9ycyB0aGF0IG1hbmFnZSBub3RpZmljYXRpb25zLFxuICogbGlrZSB7QGxpbmsgbWF0ZXJpYWxpemV9LCB7QGxpbmsgZGVtYXRlcmlhbGl6ZX0sIHtAbGluayBvYnNlcnZlT259LCBhbmRcbiAqIG90aGVycy4gQmVzaWRlcyB3cmFwcGluZyB0aGUgYWN0dWFsIGRlbGl2ZXJlZCB2YWx1ZSwgaXQgYWxzbyBhbm5vdGF0ZXMgaXRcbiAqIHdpdGggbWV0YWRhdGEgb2YsIGZvciBpbnN0YW5jZSwgd2hhdCB0eXBlIG9mIHB1c2ggbWVzc2FnZSBpdCBpcyAoYG5leHRgLFxuICogYGVycm9yYCwgb3IgYGNvbXBsZXRlYCkuXG4gKlxuICogQHNlZSB7QGxpbmsgbWF0ZXJpYWxpemV9XG4gKiBAc2VlIHtAbGluayBkZW1hdGVyaWFsaXplfVxuICogQHNlZSB7QGxpbmsgb2JzZXJ2ZU9ufVxuICpcbiAqIEBjbGFzcyBOb3RpZmljYXRpb248VD5cbiAqL1xudmFyIE5vdGlmaWNhdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm90aWZpY2F0aW9uKGtpbmQsIHZhbHVlLCBlcnJvcikge1xuICAgICAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGtpbmQgPT09ICdOJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsaXZlcnMgdG8gdGhlIGdpdmVuIGBvYnNlcnZlcmAgdGhlIHZhbHVlIHdyYXBwZWQgYnkgdGhpcyBOb3RpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcbiAgICAgKiBAcmV0dXJuXG4gICAgICovXG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIubmV4dCAmJiBvYnNlcnZlci5uZXh0KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgY2FzZSAnRSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yICYmIG9ic2VydmVyLmVycm9yKHRoaXMuZXJyb3IpO1xuICAgICAgICAgICAgY2FzZSAnQyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmNvbXBsZXRlICYmIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEdpdmVuIHNvbWUge0BsaW5rIE9ic2VydmVyfSBjYWxsYmFja3MsIGRlbGl2ZXIgdGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZVxuICAgICAqIGN1cnJlbnQgTm90aWZpY2F0aW9uIHRvIHRoZSBjb3JyZWN0bHkgY29ycmVzcG9uZGluZyBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBUKTogdm9pZH0gbmV4dCBBbiBPYnNlcnZlciBgbmV4dGAgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihlcnI6IGFueSk6IHZvaWR9IFtlcnJvcl0gQW4gT2JzZXJ2ZXIgYGVycm9yYCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IHZvaWR9IFtjb21wbGV0ZV0gQW4gT2JzZXJ2ZXIgYGNvbXBsZXRlYCBjYWxsYmFjay5cbiAgICAgKiBAcmV0dXJuIHthbnl9XG4gICAgICovXG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIGtpbmQgPSB0aGlzLmtpbmQ7XG4gICAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQgJiYgbmV4dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgJ0UnOlxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvcih0aGlzLmVycm9yKTtcbiAgICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZSAmJiBjb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUYWtlcyBhbiBPYnNlcnZlciBvciBpdHMgaW5kaXZpZHVhbCBjYWxsYmFjayBmdW5jdGlvbnMsIGFuZCBjYWxscyBgb2JzZXJ2ZWBcbiAgICAgKiBvciBgZG9gIG1ldGhvZHMgYWNjb3JkaW5nbHkuXG4gICAgICogQHBhcmFtIHtPYnNlcnZlcnxmdW5jdGlvbih2YWx1ZTogVCk6IHZvaWR9IG5leHRPck9ic2VydmVyIEFuIE9ic2VydmVyIG9yXG4gICAgICogdGhlIGBuZXh0YCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGVycjogYW55KTogdm9pZH0gW2Vycm9yXSBBbiBPYnNlcnZlciBgZXJyb3JgIGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogdm9pZH0gW2NvbXBsZXRlXSBBbiBPYnNlcnZlciBgY29tcGxldGVgIGNhbGxiYWNrLlxuICAgICAqIEByZXR1cm4ge2FueX1cbiAgICAgKi9cbiAgICBOb3RpZmljYXRpb24ucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIChuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIGlmIChuZXh0T3JPYnNlcnZlciAmJiB0eXBlb2YgbmV4dE9yT2JzZXJ2ZXIubmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2ZShuZXh0T3JPYnNlcnZlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHNpbXBsZSBPYnNlcnZhYmxlIHRoYXQganVzdCBkZWxpdmVycyB0aGUgbm90aWZpY2F0aW9uIHJlcHJlc2VudGVkXG4gICAgICogYnkgdGhpcyBOb3RpZmljYXRpb24gaW5zdGFuY2UuXG4gICAgICogQHJldHVybiB7YW55fVxuICAgICAqL1xuICAgIE5vdGlmaWNhdGlvbi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIga2luZCA9IHRoaXMua2luZDtcbiAgICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUub2YodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBjYXNlICdFJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUudGhyb3codGhpcy5lcnJvcik7XG4gICAgICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUuZW1wdHkoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgbm90aWZpY2F0aW9uIGtpbmQgdmFsdWUnKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEEgc2hvcnRjdXQgdG8gY3JlYXRlIGEgTm90aWZpY2F0aW9uIGluc3RhbmNlIG9mIHRoZSB0eXBlIGBuZXh0YCBmcm9tIGFcbiAgICAgKiBnaXZlbiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge1R9IHZhbHVlIFRoZSBgbmV4dGAgdmFsdWUuXG4gICAgICogQHJldHVybiB7Tm90aWZpY2F0aW9uPFQ+fSBUaGUgXCJuZXh0XCIgTm90aWZpY2F0aW9uIHJlcHJlc2VudGluZyB0aGVcbiAgICAgKiBhcmd1bWVudC5cbiAgICAgKi9cbiAgICBOb3RpZmljYXRpb24uY3JlYXRlTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24oJ04nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbi51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEEgc2hvcnRjdXQgdG8gY3JlYXRlIGEgTm90aWZpY2F0aW9uIGluc3RhbmNlIG9mIHRoZSB0eXBlIGBlcnJvcmAgZnJvbSBhXG4gICAgICogZ2l2ZW4gZXJyb3IuXG4gICAgICogQHBhcmFtIHthbnl9IFtlcnJdIFRoZSBgZXJyb3JgIGVycm9yLlxuICAgICAqIEByZXR1cm4ge05vdGlmaWNhdGlvbjxUPn0gVGhlIFwiZXJyb3JcIiBOb3RpZmljYXRpb24gcmVwcmVzZW50aW5nIHRoZVxuICAgICAqIGFyZ3VtZW50LlxuICAgICAqL1xuICAgIE5vdGlmaWNhdGlvbi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24oJ0UnLCB1bmRlZmluZWQsIGVycik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBIHNob3J0Y3V0IHRvIGNyZWF0ZSBhIE5vdGlmaWNhdGlvbiBpbnN0YW5jZSBvZiB0aGUgdHlwZSBgY29tcGxldGVgLlxuICAgICAqIEByZXR1cm4ge05vdGlmaWNhdGlvbjxhbnk+fSBUaGUgdmFsdWVsZXNzIFwiY29tcGxldGVcIiBOb3RpZmljYXRpb24uXG4gICAgICovXG4gICAgTm90aWZpY2F0aW9uLmNyZWF0ZUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uLmNvbXBsZXRlTm90aWZpY2F0aW9uO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLmNvbXBsZXRlTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbignQycpO1xuICAgIE5vdGlmaWNhdGlvbi51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oJ04nLCB1bmRlZmluZWQpO1xuICAgIHJldHVybiBOb3RpZmljYXRpb247XG59KCkpO1xuZXhwb3J0cy5Ob3RpZmljYXRpb24gPSBOb3RpZmljYXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob3RpZmljYXRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcm9vdF8xID0gcmVxdWlyZSgnLi91dGlsL3Jvb3QnKTtcbnZhciB0b1N1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4vdXRpbC90b1N1YnNjcmliZXInKTtcbnZhciBvYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL3N5bWJvbC9vYnNlcnZhYmxlJyk7XG52YXIgcGlwZV8xID0gcmVxdWlyZSgnLi91dGlsL3BpcGUnKTtcbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBvZiBhbnkgc2V0IG9mIHZhbHVlcyBvdmVyIGFueSBhbW91bnQgb2YgdGltZS4gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBidWlsZGluZyBibG9ja1xuICogb2YgUnhKUy5cbiAqXG4gKiBAY2xhc3MgT2JzZXJ2YWJsZTxUPlxuICovXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3Vic2NyaWJlIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBPYnNlcnZhYmxlIGlzXG4gICAgICogaW5pdGlhbGx5IHN1YnNjcmliZWQgdG8uIFRoaXMgZnVuY3Rpb24gaXMgZ2l2ZW4gYSBTdWJzY3JpYmVyLCB0byB3aGljaCBuZXcgdmFsdWVzXG4gICAgICogY2FuIGJlIGBuZXh0YGVkLCBvciBhbiBgZXJyb3JgIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHJhaXNlIGFuIGVycm9yLCBvclxuICAgICAqIGBjb21wbGV0ZWAgY2FuIGJlIGNhbGxlZCB0byBub3RpZnkgb2YgYSBzdWNjZXNzZnVsIGNvbXBsZXRpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgdGhpcy5faXNTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgT2JzZXJ2YWJsZSwgd2l0aCB0aGlzIE9ic2VydmFibGUgYXMgdGhlIHNvdXJjZSwgYW5kIHRoZSBwYXNzZWRcbiAgICAgKiBvcGVyYXRvciBkZWZpbmVkIGFzIHRoZSBuZXcgb2JzZXJ2YWJsZSdzIG9wZXJhdG9yLlxuICAgICAqIEBtZXRob2QgbGlmdFxuICAgICAqIEBwYXJhbSB7T3BlcmF0b3J9IG9wZXJhdG9yIHRoZSBvcGVyYXRvciBkZWZpbmluZyB0aGUgb3BlcmF0aW9uIHRvIHRha2Ugb24gdGhlIG9ic2VydmFibGVcbiAgICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBhIG5ldyBvYnNlcnZhYmxlIHdpdGggdGhlIE9wZXJhdG9yIGFwcGxpZWRcbiAgICAgKi9cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSW52b2tlcyBhbiBleGVjdXRpb24gb2YgYW4gT2JzZXJ2YWJsZSBhbmQgcmVnaXN0ZXJzIE9ic2VydmVyIGhhbmRsZXJzIGZvciBub3RpZmljYXRpb25zIGl0IHdpbGwgZW1pdC5cbiAgICAgKlxuICAgICAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5Vc2UgaXQgd2hlbiB5b3UgaGF2ZSBhbGwgdGhlc2UgT2JzZXJ2YWJsZXMsIGJ1dCBzdGlsbCBub3RoaW5nIGlzIGhhcHBlbmluZy48L3NwYW4+XG4gICAgICpcbiAgICAgKiBgc3Vic2NyaWJlYCBpcyBub3QgYSByZWd1bGFyIG9wZXJhdG9yLCBidXQgYSBtZXRob2QgdGhhdCBjYWxscyBPYnNlcnZhYmxlJ3MgaW50ZXJuYWwgYHN1YnNjcmliZWAgZnVuY3Rpb24uIEl0XG4gICAgICogbWlnaHQgYmUgZm9yIGV4YW1wbGUgYSBmdW5jdGlvbiB0aGF0IHlvdSBwYXNzZWQgdG8gYSB7QGxpbmsgY3JlYXRlfSBzdGF0aWMgZmFjdG9yeSwgYnV0IG1vc3Qgb2YgdGhlIHRpbWUgaXQgaXNcbiAgICAgKiBhIGxpYnJhcnkgaW1wbGVtZW50YXRpb24sIHdoaWNoIGRlZmluZXMgd2hhdCBhbmQgd2hlbiB3aWxsIGJlIGVtaXR0ZWQgYnkgYW4gT2JzZXJ2YWJsZS4gVGhpcyBtZWFucyB0aGF0IGNhbGxpbmdcbiAgICAgKiBgc3Vic2NyaWJlYCBpcyBhY3R1YWxseSB0aGUgbW9tZW50IHdoZW4gT2JzZXJ2YWJsZSBzdGFydHMgaXRzIHdvcmssIG5vdCB3aGVuIGl0IGlzIGNyZWF0ZWQsIGFzIGl0IGlzIG9mdGVuXG4gICAgICogdGhvdWdodC5cbiAgICAgKlxuICAgICAqIEFwYXJ0IGZyb20gc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbiBvZiBhbiBPYnNlcnZhYmxlLCB0aGlzIG1ldGhvZCBhbGxvd3MgeW91IHRvIGxpc3RlbiBmb3IgdmFsdWVzXG4gICAgICogdGhhdCBhbiBPYnNlcnZhYmxlIGVtaXRzLCBhcyB3ZWxsIGFzIGZvciB3aGVuIGl0IGNvbXBsZXRlcyBvciBlcnJvcnMuIFlvdSBjYW4gYWNoaWV2ZSB0aGlzIGluIHR3b1xuICAgICAqIGZvbGxvd2luZyB3YXlzLlxuICAgICAqXG4gICAgICogVGhlIGZpcnN0IHdheSBpcyBjcmVhdGluZyBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBPYnNlcnZlcn0gaW50ZXJmYWNlLiBJdCBzaG91bGQgaGF2ZSBtZXRob2RzXG4gICAgICogZGVmaW5lZCBieSB0aGF0IGludGVyZmFjZSwgYnV0IG5vdGUgdGhhdCBpdCBzaG91bGQgYmUganVzdCBhIHJlZ3VsYXIgSmF2YVNjcmlwdCBvYmplY3QsIHdoaWNoIHlvdSBjYW4gY3JlYXRlXG4gICAgICogeW91cnNlbGYgaW4gYW55IHdheSB5b3Ugd2FudCAoRVM2IGNsYXNzLCBjbGFzc2ljIGZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBvYmplY3QgbGl0ZXJhbCBldGMuKS4gSW4gcGFydGljdWxhciBkb1xuICAgICAqIG5vdCBhdHRlbXB0IHRvIHVzZSBhbnkgUnhKUyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGNyZWF0ZSBPYnNlcnZlcnMgLSB5b3UgZG9uJ3QgbmVlZCB0aGVtLiBSZW1lbWJlciBhbHNvXG4gICAgICogdGhhdCB5b3VyIG9iamVjdCBkb2VzIG5vdCBoYXZlIHRvIGltcGxlbWVudCBhbGwgbWV0aG9kcy4gSWYgeW91IGZpbmQgeW91cnNlbGYgY3JlYXRpbmcgYSBtZXRob2QgdGhhdCBkb2Vzbid0XG4gICAgICogZG8gYW55dGhpbmcsIHlvdSBjYW4gc2ltcGx5IG9taXQgaXQuIE5vdGUgaG93ZXZlciwgdGhhdCBpZiBgZXJyb3JgIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIGFsbCBlcnJvcnMgd2lsbFxuICAgICAqIGJlIGxlZnQgdW5jYXVnaHQuXG4gICAgICpcbiAgICAgKiBUaGUgc2Vjb25kIHdheSBpcyB0byBnaXZlIHVwIG9uIE9ic2VydmVyIG9iamVjdCBhbHRvZ2V0aGVyIGFuZCBzaW1wbHkgcHJvdmlkZSBjYWxsYmFjayBmdW5jdGlvbnMgaW4gcGxhY2Ugb2YgaXRzIG1ldGhvZHMuXG4gICAgICogVGhpcyBtZWFucyB5b3UgY2FuIHByb3ZpZGUgdGhyZWUgZnVuY3Rpb25zIGFzIGFyZ3VtZW50cyB0byBgc3Vic2NyaWJlYCwgd2hlcmUgZmlyc3QgZnVuY3Rpb24gaXMgZXF1aXZhbGVudFxuICAgICAqIG9mIGEgYG5leHRgIG1ldGhvZCwgc2Vjb25kIG9mIGFuIGBlcnJvcmAgbWV0aG9kIGFuZCB0aGlyZCBvZiBhIGBjb21wbGV0ZWAgbWV0aG9kLiBKdXN0IGFzIGluIGNhc2Ugb2YgT2JzZXJ2ZXIsXG4gICAgICogaWYgeW91IGRvIG5vdCBuZWVkIHRvIGxpc3RlbiBmb3Igc29tZXRoaW5nLCB5b3UgY2FuIG9taXQgYSBmdW5jdGlvbiwgcHJlZmVyYWJseSBieSBwYXNzaW5nIGB1bmRlZmluZWRgIG9yIGBudWxsYCxcbiAgICAgKiBzaW5jZSBgc3Vic2NyaWJlYCByZWNvZ25pemVzIHRoZXNlIGZ1bmN0aW9ucyBieSB3aGVyZSB0aGV5IHdlcmUgcGxhY2VkIGluIGZ1bmN0aW9uIGNhbGwuIFdoZW4gaXQgY29tZXNcbiAgICAgKiB0byBgZXJyb3JgIGZ1bmN0aW9uLCBqdXN0IGFzIGJlZm9yZSwgaWYgbm90IHByb3ZpZGVkLCBlcnJvcnMgZW1pdHRlZCBieSBhbiBPYnNlcnZhYmxlIHdpbGwgYmUgdGhyb3duLlxuICAgICAqXG4gICAgICogV2hhdGV2ZXIgc3R5bGUgb2YgY2FsbGluZyBgc3Vic2NyaWJlYCB5b3UgdXNlLCBpbiBib3RoIGNhc2VzIGl0IHJldHVybnMgYSBTdWJzY3JpcHRpb24gb2JqZWN0LlxuICAgICAqIFRoaXMgb2JqZWN0IGFsbG93cyB5b3UgdG8gY2FsbCBgdW5zdWJzY3JpYmVgIG9uIGl0LCB3aGljaCBpbiB0dXJuIHdpbGwgc3RvcCB3b3JrIHRoYXQgYW4gT2JzZXJ2YWJsZSBkb2VzIGFuZCB3aWxsIGNsZWFuXG4gICAgICogdXAgYWxsIHJlc291cmNlcyB0aGF0IGFuIE9ic2VydmFibGUgdXNlZC4gTm90ZSB0aGF0IGNhbmNlbGxpbmcgYSBzdWJzY3JpcHRpb24gd2lsbCBub3QgY2FsbCBgY29tcGxldGVgIGNhbGxiYWNrXG4gICAgICogcHJvdmlkZWQgdG8gYHN1YnNjcmliZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHJlc2VydmVkIGZvciBhIHJlZ3VsYXIgY29tcGxldGlvbiBzaWduYWwgdGhhdCBjb21lcyBmcm9tIGFuIE9ic2VydmFibGUuXG4gICAgICpcbiAgICAgKiBSZW1lbWJlciB0aGF0IGNhbGxiYWNrcyBwcm92aWRlZCB0byBgc3Vic2NyaWJlYCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5LlxuICAgICAqIEl0IGlzIGFuIE9ic2VydmFibGUgaXRzZWxmIHRoYXQgZGVjaWRlcyB3aGVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZC4gRm9yIGV4YW1wbGUge0BsaW5rIG9mfVxuICAgICAqIGJ5IGRlZmF1bHQgZW1pdHMgYWxsIGl0cyB2YWx1ZXMgc3luY2hyb25vdXNseS4gQWx3YXlzIGNoZWNrIGRvY3VtZW50YXRpb24gZm9yIGhvdyBnaXZlbiBPYnNlcnZhYmxlXG4gICAgICogd2lsbCBiZWhhdmUgd2hlbiBzdWJzY3JpYmVkIGFuZCBpZiBpdHMgZGVmYXVsdCBiZWhhdmlvciBjYW4gYmUgbW9kaWZpZWQgd2l0aCBhIHtAbGluayBTY2hlZHVsZXJ9LlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+U3Vic2NyaWJlIHdpdGggYW4gT2JzZXJ2ZXI8L2NhcHRpb24+XG4gICAgICogY29uc3Qgc3VtT2JzZXJ2ZXIgPSB7XG4gICAgICogICBzdW06IDAsXG4gICAgICogICBuZXh0KHZhbHVlKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdBZGRpbmc6ICcgKyB2YWx1ZSk7XG4gICAgICogICAgIHRoaXMuc3VtID0gdGhpcy5zdW0gKyB2YWx1ZTtcbiAgICAgKiAgIH0sXG4gICAgICogICBlcnJvcigpIHsgLy8gV2UgYWN0dWFsbHkgY291bGQganVzdCByZW1vdmUgdGhpcyBtZXRob2QsXG4gICAgICogICB9LCAgICAgICAgLy8gc2luY2Ugd2UgZG8gbm90IHJlYWxseSBjYXJlIGFib3V0IGVycm9ycyByaWdodCBub3cuXG4gICAgICogICBjb21wbGV0ZSgpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ1N1bSBlcXVhbHM6ICcgKyB0aGlzLnN1bSk7XG4gICAgICogICB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIFJ4Lk9ic2VydmFibGUub2YoMSwgMiwgMykgLy8gU3luY2hyb25vdXNseSBlbWl0cyAxLCAyLCAzIGFuZCB0aGVuIGNvbXBsZXRlcy5cbiAgICAgKiAuc3Vic2NyaWJlKHN1bU9ic2VydmVyKTtcbiAgICAgKlxuICAgICAqIC8vIExvZ3M6XG4gICAgICogLy8gXCJBZGRpbmc6IDFcIlxuICAgICAqIC8vIFwiQWRkaW5nOiAyXCJcbiAgICAgKiAvLyBcIkFkZGluZzogM1wiXG4gICAgICogLy8gXCJTdW0gZXF1YWxzOiA2XCJcbiAgICAgKlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+U3Vic2NyaWJlIHdpdGggZnVuY3Rpb25zPC9jYXB0aW9uPlxuICAgICAqIGxldCBzdW0gPSAwO1xuICAgICAqXG4gICAgICogUnguT2JzZXJ2YWJsZS5vZigxLCAyLCAzKVxuICAgICAqIC5zdWJzY3JpYmUoXG4gICAgICogICBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnQWRkaW5nOiAnICsgdmFsdWUpO1xuICAgICAqICAgICBzdW0gPSBzdW0gKyB2YWx1ZTtcbiAgICAgKiAgIH0sXG4gICAgICogICB1bmRlZmluZWQsXG4gICAgICogICBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ1N1bSBlcXVhbHM6ICcgKyBzdW0pO1xuICAgICAqICAgfVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiAvLyBMb2dzOlxuICAgICAqIC8vIFwiQWRkaW5nOiAxXCJcbiAgICAgKiAvLyBcIkFkZGluZzogMlwiXG4gICAgICogLy8gXCJBZGRpbmc6IDNcIlxuICAgICAqIC8vIFwiU3VtIGVxdWFsczogNlwiXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPkNhbmNlbCBhIHN1YnNjcmlwdGlvbjwvY2FwdGlvbj5cbiAgICAgKiBjb25zdCBzdWJzY3JpcHRpb24gPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnN1YnNjcmliZShcbiAgICAgKiAgIG51bSA9PiBjb25zb2xlLmxvZyhudW0pLFxuICAgICAqICAgdW5kZWZpbmVkLFxuICAgICAqICAgKCkgPT4gY29uc29sZS5sb2coJ2NvbXBsZXRlZCEnKSAvLyBXaWxsIG5vdCBiZSBjYWxsZWQsIGV2ZW5cbiAgICAgKiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBjYW5jZWxsaW5nIHN1YnNjcmlwdGlvblxuICAgICAqXG4gICAgICpcbiAgICAgKiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgKiAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAqICAgY29uc29sZS5sb2coJ3Vuc3Vic2NyaWJlZCEnKTtcbiAgICAgKiB9LCAyNTAwKTtcbiAgICAgKlxuICAgICAqIC8vIExvZ3M6XG4gICAgICogLy8gMCBhZnRlciAxc1xuICAgICAqIC8vIDEgYWZ0ZXIgMnNcbiAgICAgKiAvLyBcInVuc3Vic2NyaWJlZCFcIiBhZnRlciAyLjVzXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JzZXJ2ZXJ8RnVuY3Rpb259IG9ic2VydmVyT3JOZXh0IChvcHRpb25hbCkgRWl0aGVyIGFuIG9ic2VydmVyIHdpdGggbWV0aG9kcyB0byBiZSBjYWxsZWQsXG4gICAgICogIG9yIHRoZSBmaXJzdCBvZiB0aHJlZSBwb3NzaWJsZSBoYW5kbGVycywgd2hpY2ggaXMgdGhlIGhhbmRsZXIgZm9yIGVhY2ggdmFsdWUgZW1pdHRlZCBmcm9tIHRoZSBzdWJzY3JpYmVkXG4gICAgICogIE9ic2VydmFibGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3IgKG9wdGlvbmFsKSBBIGhhbmRsZXIgZm9yIGEgdGVybWluYWwgZXZlbnQgcmVzdWx0aW5nIGZyb20gYW4gZXJyb3IuIElmIG5vIGVycm9yIGhhbmRsZXIgaXMgcHJvdmlkZWQsXG4gICAgICogIHRoZSBlcnJvciB3aWxsIGJlIHRocm93biBhcyB1bmhhbmRsZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGxldGUgKG9wdGlvbmFsKSBBIGhhbmRsZXIgZm9yIGEgdGVybWluYWwgZXZlbnQgcmVzdWx0aW5nIGZyb20gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLlxuICAgICAqIEByZXR1cm4ge0lTdWJzY3JpcHRpb259IGEgc3Vic2NyaXB0aW9uIHJlZmVyZW5jZSB0byB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVyc1xuICAgICAqIEBtZXRob2Qgc3Vic2NyaWJlXG4gICAgICovXG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIG9wZXJhdG9yID0gdGhpcy5vcGVyYXRvcjtcbiAgICAgICAgdmFyIHNpbmsgPSB0b1N1YnNjcmliZXJfMS50b1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGlmIChvcGVyYXRvcikge1xuICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzaW5rLCB0aGlzLnNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzaW5rLmFkZCh0aGlzLnNvdXJjZSB8fCAhc2luay5zeW5jRXJyb3JUaHJvd2FibGUgPyB0aGlzLl9zdWJzY3JpYmUoc2luaykgOiB0aGlzLl90cnlTdWJzY3JpYmUoc2luaykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaW5rLnN5bmNFcnJvclRocm93YWJsZSkge1xuICAgICAgICAgICAgc2luay5zeW5jRXJyb3JUaHJvd2FibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzaW5rLnN5bmNFcnJvclRocm93bikge1xuICAgICAgICAgICAgICAgIHRocm93IHNpbmsuc3luY0Vycm9yVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNpbms7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5zeW5jRXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICAgICAgc2luay5zeW5jRXJyb3JWYWx1ZSA9IGVycjtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogQG1ldGhvZCBmb3JFYWNoXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dCBhIGhhbmRsZXIgZm9yIGVhY2ggdmFsdWUgZW1pdHRlZCBieSB0aGUgb2JzZXJ2YWJsZVxuICAgICAqIEBwYXJhbSB7UHJvbWlzZUNvbnN0cnVjdG9yfSBbUHJvbWlzZUN0b3JdIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUgUHJvbWlzZVxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IGVpdGhlciByZXNvbHZlcyBvbiBvYnNlcnZhYmxlIGNvbXBsZXRpb24gb3JcbiAgICAgKiAgcmVqZWN0cyB3aXRoIHRoZSBoYW5kbGVkIGVycm9yXG4gICAgICovXG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBQcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIVByb21pc2VDdG9yKSB7XG4gICAgICAgICAgICBpZiAocm9vdF8xLnJvb3QuUnggJiYgcm9vdF8xLnJvb3QuUnguY29uZmlnICYmIHJvb3RfMS5yb290LlJ4LmNvbmZpZy5Qcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZUN0b3IgPSByb290XzEucm9vdC5SeC5jb25maWcuUHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJvb3RfMS5yb290LlByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBQcm9taXNlQ3RvciA9IHJvb3RfMS5yb290LlByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFQcm9taXNlQ3Rvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBQcm9taXNlIGltcGwgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIC8vIE11c3QgYmUgZGVjbGFyZWQgaW4gYSBzZXBhcmF0ZSBzdGF0ZW1lbnQgdG8gYXZvaWQgYSBSZWZlcm5jZUVycm9yIHdoZW5cbiAgICAgICAgICAgIC8vIGFjY2Vzc2luZyBzdWJzY3JpcHRpb24gYmVsb3cgaW4gdGhlIGNsb3N1cmUgZHVlIHRvIFRlbXBvcmFsIERlYWQgWm9uZS5cbiAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb247XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24gPSBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHN1YnNjcmlwdGlvbiwgdGhlbiB3ZSBjYW4gc3VybWlzZVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCBoYW5kbGluZyBpcyBhc3luY2hyb25vdXMuIEFueSBlcnJvcnMgdGhyb3duXG4gICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgcmVqZWN0ZWQgZXhwbGljaXRseSBhbmQgdW5zdWJzY3JpYmUgbXVzdCBiZVxuICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWQgbWFudWFsbHlcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIE5PIHN1YnNjcmlwdGlvbiwgdGhlbiB3ZSdyZSBnZXR0aW5nIGEgbmV4dGVkXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIHN5bmNocm9ub3VzbHkgZHVyaW5nIHN1YnNjcmlwdGlvbi4gV2UgY2FuIGp1c3QgY2FsbCBpdC5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgZXJyb3JzLCBPYnNlcnZhYmxlJ3MgYHN1YnNjcmliZWAgd2lsbCBlbnN1cmUgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuc3Vic2NyaXB0aW9uIGxvZ2ljIGlzIGNhbGxlZCwgdGhlbiBzeW5jaHJvbm91c2x5IHJldGhyb3cgdGhlIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICAvLyBBZnRlciB0aGF0LCBQcm9taXNlIHdpbGwgdHJhcCB0aGUgZXJyb3IgYW5kIHNlbmQgaXRcbiAgICAgICAgICAgICAgICAgICAgLy8gZG93biB0aGUgcmVqZWN0aW9uIHBhdGguXG4gICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHJlamVjdCwgcmVzb2x2ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQW4gaW50ZXJvcCBwb2ludCBkZWZpbmVkIGJ5IHRoZSBlczctb2JzZXJ2YWJsZSBzcGVjIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbiAgICAgKiBAbWV0aG9kIFN5bWJvbC5vYnNlcnZhYmxlXG4gICAgICogQHJldHVybiB7T2JzZXJ2YWJsZX0gdGhpcyBpbnN0YW5jZSBvZiB0aGUgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVfMS5vYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gc3RpdGNoIHRvZ2V0aGVyIGZ1bmN0aW9uYWwgb3BlcmF0b3JzIGludG8gYSBjaGFpbi5cbiAgICAgKiBAbWV0aG9kIHBpcGVcbiAgICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSB0aGUgT2JzZXJ2YWJsZSByZXN1bHQgb2YgYWxsIG9mIHRoZSBvcGVyYXRvcnMgaGF2aW5nXG4gICAgICogYmVlbiBjYWxsZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXNzZWQgaW4uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogaW1wb3J0IHsgbWFwLCBmaWx0ZXIsIHNjYW4gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG4gICAgICpcbiAgICAgKiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApXG4gICAgICogICAucGlwZShcbiAgICAgKiAgICAgZmlsdGVyKHggPT4geCAlIDIgPT09IDApLFxuICAgICAqICAgICBtYXAoeCA9PiB4ICsgeCksXG4gICAgICogICAgIHNjYW4oKGFjYywgeCkgPT4gYWNjICsgeClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSlcbiAgICAgKi9cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlXzEucGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIC8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKFByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghUHJvbWlzZUN0b3IpIHtcbiAgICAgICAgICAgIGlmIChyb290XzEucm9vdC5SeCAmJiByb290XzEucm9vdC5SeC5jb25maWcgJiYgcm9vdF8xLnJvb3QuUnguY29uZmlnLlByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBQcm9taXNlQ3RvciA9IHJvb3RfMS5yb290LlJ4LmNvbmZpZy5Qcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocm9vdF8xLnJvb3QuUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIFByb21pc2VDdG9yID0gcm9vdF8xLnJvb3QuUHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIVByb21pc2VDdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIFByb21pc2UgaW1wbCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiB2YWx1ZSA9IHg7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gSEFDSzogU2luY2UgVHlwZVNjcmlwdCBpbmhlcml0cyBzdGF0aWMgcHJvcGVydGllcyB0b28sIHdlIGhhdmUgdG9cbiAgICAvLyBmaWdodCBhZ2FpbnN0IFR5cGVTY3JpcHQgaGVyZSBzbyBTdWJqZWN0IGNhbiBoYXZlIGEgZGlmZmVyZW50IHN0YXRpYyBjcmVhdGUgc2lnbmF0dXJlXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb2xkIE9ic2VydmFibGUgYnkgY2FsbGluZyB0aGUgT2JzZXJ2YWJsZSBjb25zdHJ1Y3RvclxuICAgICAqIEBzdGF0aWMgdHJ1ZVxuICAgICAqIEBvd25lciBPYnNlcnZhYmxlXG4gICAgICogQG1ldGhvZCBjcmVhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdWJzY3JpYmU/IHRoZSBzdWJzY3JpYmVyIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZCB0byB0aGUgT2JzZXJ2YWJsZSBjb25zdHJ1Y3RvclxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGV9IGEgbmV3IGNvbGQgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmV4cG9ydHMuT2JzZXJ2YWJsZSA9IE9ic2VydmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuZXhwb3J0cy5lbXB0eSA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7IH0sXG4gICAgZXJyb3I6IGZ1bmN0aW9uIChlcnIpIHsgdGhyb3cgZXJyOyB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PYnNlcnZlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4vU3Vic2NyaWJlcicpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBPdXRlclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPdXRlclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3V0ZXJTdWJzY3JpYmVyKCkge1xuICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgT3V0ZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChpbm5lclZhbHVlKTtcbiAgICB9O1xuICAgIE91dGVyU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgT3V0ZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gT3V0ZXJTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5PdXRlclN1YnNjcmliZXIgPSBPdXRlclN1YnNjcmliZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PdXRlclN1YnNjcmliZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKCcuL1N1YmplY3QnKTtcbnZhciBxdWV1ZV8xID0gcmVxdWlyZSgnLi9zY2hlZHVsZXIvcXVldWUnKTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoJy4vU3Vic2NyaXB0aW9uJyk7XG52YXIgb2JzZXJ2ZU9uXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9vYnNlcnZlT24nKTtcbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xID0gcmVxdWlyZSgnLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yJyk7XG52YXIgU3ViamVjdFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZSgnLi9TdWJqZWN0U3Vic2NyaXB0aW9uJyk7XG4vKipcbiAqIEBjbGFzcyBSZXBsYXlTdWJqZWN0PFQ+XG4gKi9cbnZhciBSZXBsYXlTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmVwbGF5U3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlcikge1xuICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9PT0gdm9pZCAwKSB7IGJ1ZmZlclNpemUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICAgICAgaWYgKHdpbmRvd1RpbWUgPT09IHZvaWQgMCkgeyB3aW5kb3dUaW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyB9XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMuX2J1ZmZlclNpemUgPSBidWZmZXJTaXplIDwgMSA/IDEgOiBidWZmZXJTaXplO1xuICAgICAgICB0aGlzLl93aW5kb3dUaW1lID0gd2luZG93VGltZSA8IDEgPyAxIDogd2luZG93VGltZTtcbiAgICB9XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgbm93ID0gdGhpcy5fZ2V0Tm93KCk7XG4gICAgICAgIHRoaXMuX2V2ZW50cy5wdXNoKG5ldyBSZXBsYXlFdmVudChub3csIHZhbHVlKSk7XG4gICAgICAgIHRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCk7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9ldmVudHMgPSB0aGlzLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cygpO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb247XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yXzEuT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXcgU3ViamVjdFN1YnNjcmlwdGlvbl8xLlN1YmplY3RTdWJzY3JpcHRpb24odGhpcywgc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVkdWxlcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoc3Vic2NyaWJlciA9IG5ldyBvYnNlcnZlT25fMS5PYnNlcnZlT25TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHNjaGVkdWxlcikpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW4gPSBfZXZlbnRzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4gJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChfZXZlbnRzW2ldLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aGlzLnRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgfTtcbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5fZ2V0Tm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2NoZWR1bGVyIHx8IHF1ZXVlXzEucXVldWUpLm5vdygpO1xuICAgIH07XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbm93ID0gdGhpcy5fZ2V0Tm93KCk7XG4gICAgICAgIHZhciBfYnVmZmVyU2l6ZSA9IHRoaXMuX2J1ZmZlclNpemU7XG4gICAgICAgIHZhciBfd2luZG93VGltZSA9IHRoaXMuX3dpbmRvd1RpbWU7XG4gICAgICAgIHZhciBfZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgICB2YXIgZXZlbnRzQ291bnQgPSBfZXZlbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIHNwbGljZUNvdW50ID0gMDtcbiAgICAgICAgLy8gVHJpbSBldmVudHMgdGhhdCBmYWxsIG91dCBvZiB0aGUgdGltZSB3aW5kb3cuXG4gICAgICAgIC8vIFN0YXJ0IGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gQnJlYWsgZWFybHkgb25jZVxuICAgICAgICAvLyB3ZSBlbmNvdW50ZXIgYW4gZXZlbnQgdGhhdCBmYWxscyB3aXRoaW4gdGhlIHdpbmRvdy5cbiAgICAgICAgd2hpbGUgKHNwbGljZUNvdW50IDwgZXZlbnRzQ291bnQpIHtcbiAgICAgICAgICAgIGlmICgobm93IC0gX2V2ZW50c1tzcGxpY2VDb3VudF0udGltZSkgPCBfd2luZG93VGltZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BsaWNlQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnRzQ291bnQgPiBfYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgc3BsaWNlQ291bnQgPSBNYXRoLm1heChzcGxpY2VDb3VudCwgZXZlbnRzQ291bnQgLSBfYnVmZmVyU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwbGljZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgX2V2ZW50cy5zcGxpY2UoMCwgc3BsaWNlQ291bnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfZXZlbnRzO1xuICAgIH07XG4gICAgcmV0dXJuIFJlcGxheVN1YmplY3Q7XG59KFN1YmplY3RfMS5TdWJqZWN0KSk7XG5leHBvcnRzLlJlcGxheVN1YmplY3QgPSBSZXBsYXlTdWJqZWN0O1xudmFyIFJlcGxheUV2ZW50ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXBsYXlFdmVudCh0aW1lLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBSZXBsYXlFdmVudDtcbn0oKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZXBsYXlTdWJqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlICovXG4vLyBTdWJqZWN0IGltcG9ydGVkIGJlZm9yZSBPYnNlcnZhYmxlIHRvIGJ5cGFzcyBjaXJjdWxhciBkZXBlbmRlbmN5IGlzc3VlIHNpbmNlXG4vLyBTdWJqZWN0IGV4dGVuZHMgT2JzZXJ2YWJsZSBhbmQgT2JzZXJ2YWJsZSByZWZlcmVuY2VzIFN1YmplY3QgaW4gaXQnc1xuLy8gZGVmaW5pdGlvblxudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoJy4vU3ViamVjdCcpO1xuZXhwb3J0cy5TdWJqZWN0ID0gU3ViamVjdF8xLlN1YmplY3Q7XG5leHBvcnRzLkFub255bW91c1N1YmplY3QgPSBTdWJqZWN0XzEuQW5vbnltb3VzU3ViamVjdDtcbi8qIHRzbGludDplbmFibGU6bm8tdW51c2VkLXZhcmlhYmxlICovXG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9PYnNlcnZhYmxlJyk7XG5leHBvcnRzLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZTtcbi8vIHN0YXRpY3Ncbi8qIHRzbGludDpkaXNhYmxlOm5vLXVzZS1iZWZvcmUtZGVjbGFyZSAqL1xucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9iaW5kQ2FsbGJhY2snKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjaycpO1xucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0Jyk7XG5yZXF1aXJlKCcuL2FkZC9vYnNlcnZhYmxlL2NvbmNhdCcpO1xucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9kZWZlcicpO1xucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9lbXB0eScpO1xucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9mb3JrSm9pbicpO1xucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9mcm9tJyk7XG5yZXF1aXJlKCcuL2FkZC9vYnNlcnZhYmxlL2Zyb21FdmVudCcpO1xucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9mcm9tRXZlbnRQYXR0ZXJuJyk7XG5yZXF1aXJlKCcuL2FkZC9vYnNlcnZhYmxlL2Zyb21Qcm9taXNlJyk7XG5yZXF1aXJlKCcuL2FkZC9vYnNlcnZhYmxlL2dlbmVyYXRlJyk7XG5yZXF1aXJlKCcuL2FkZC9vYnNlcnZhYmxlL2lmJyk7XG5yZXF1aXJlKCcuL2FkZC9vYnNlcnZhYmxlL2ludGVydmFsJyk7XG5yZXF1aXJlKCcuL2FkZC9vYnNlcnZhYmxlL21lcmdlJyk7XG5yZXF1aXJlKCcuL2FkZC9vYnNlcnZhYmxlL3JhY2UnKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvbmV2ZXInKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvb2YnKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHQnKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvcGFpcnMnKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvcmFuZ2UnKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvdXNpbmcnKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvdGhyb3cnKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvdGltZXInKTtcbnJlcXVpcmUoJy4vYWRkL29ic2VydmFibGUvemlwJyk7XG4vL2RvbVxucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9kb20vYWpheCcpO1xucmVxdWlyZSgnLi9hZGQvb2JzZXJ2YWJsZS9kb20vd2ViU29ja2V0Jyk7XG4vL29wZXJhdG9yc1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvYnVmZmVyJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9idWZmZXJDb3VudCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvYnVmZmVyVGltZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvYnVmZmVyVG9nZ2xlJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9idWZmZXJXaGVuJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9jYXRjaCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvY29tYmluZUFsbCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvY29tYmluZUxhdGVzdCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvY29uY2F0Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9jb25jYXRBbGwnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2NvbmNhdE1hcCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvY29uY2F0TWFwVG8nKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2NvdW50Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9kZW1hdGVyaWFsaXplJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9kZWJvdW5jZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvZGVib3VuY2VUaW1lJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9kZWZhdWx0SWZFbXB0eScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvZGVsYXknKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2RlbGF5V2hlbicpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvZGlzdGluY3QnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2Rpc3RpbmN0VW50aWxDaGFuZ2VkJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvZG8nKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2V4aGF1c3QnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2V4aGF1c3RNYXAnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2V4cGFuZCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvZWxlbWVudEF0Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9maWx0ZXInKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2ZpbmFsbHknKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2ZpbmQnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2ZpbmRJbmRleCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvZmlyc3QnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2dyb3VwQnknKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2lnbm9yZUVsZW1lbnRzJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9pc0VtcHR5Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9hdWRpdCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvYXVkaXRUaW1lJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9sYXN0Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9sZXQnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL2V2ZXJ5Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9tYXAnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL21hcFRvJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9tYXRlcmlhbGl6ZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvbWF4Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9tZXJnZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvbWVyZ2VBbGwnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL21lcmdlTWFwJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9tZXJnZU1hcFRvJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9tZXJnZVNjYW4nKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL21pbicpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvbXVsdGljYXN0Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9vYnNlcnZlT24nKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL29uRXJyb3JSZXN1bWVOZXh0Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9wYWlyd2lzZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvcGFydGl0aW9uJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9wbHVjaycpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvcHVibGlzaCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvcHVibGlzaEJlaGF2aW9yJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9wdWJsaXNoUmVwbGF5Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9wdWJsaXNoTGFzdCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvcmFjZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvcmVkdWNlJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9yZXBlYXQnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3JlcGVhdFdoZW4nKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3JldHJ5Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9yZXRyeVdoZW4nKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3NhbXBsZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3Ivc2FtcGxlVGltZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3Ivc2NhbicpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3Ivc2VxdWVuY2VFcXVhbCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3Ivc2hhcmUnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3NoYXJlUmVwbGF5Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9zaW5nbGUnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3NraXAnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3NraXBMYXN0Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9za2lwVW50aWwnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3NraXBXaGlsZScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3Ivc3RhcnRXaXRoJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9zdWJzY3JpYmVPbicpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3Ivc3dpdGNoJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci9zd2l0Y2hNYXAnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3N3aXRjaE1hcFRvJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci90YWtlJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci90YWtlTGFzdCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvdGFrZVVudGlsJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci90YWtlV2hpbGUnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3Rocm90dGxlJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci90aHJvdHRsZVRpbWUnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3RpbWVJbnRlcnZhbCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvdGltZW91dCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvdGltZW91dFdpdGgnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3RpbWVzdGFtcCcpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvdG9BcnJheScpO1xucmVxdWlyZSgnLi9hZGQvb3BlcmF0b3IvdG9Qcm9taXNlJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci93aW5kb3cnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3dpbmRvd0NvdW50Jyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci93aW5kb3dUaW1lJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci93aW5kb3dUb2dnbGUnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3dpbmRvd1doZW4nKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3dpdGhMYXRlc3RGcm9tJyk7XG5yZXF1aXJlKCcuL2FkZC9vcGVyYXRvci96aXAnKTtcbnJlcXVpcmUoJy4vYWRkL29wZXJhdG9yL3ppcEFsbCcpO1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlICovXG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuL1N1YnNjcmlwdGlvbicpO1xuZXhwb3J0cy5TdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb247XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi9TdWJzY3JpYmVyJyk7XG5leHBvcnRzLlN1YnNjcmliZXIgPSBTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcjtcbnZhciBBc3luY1N1YmplY3RfMSA9IHJlcXVpcmUoJy4vQXN5bmNTdWJqZWN0Jyk7XG5leHBvcnRzLkFzeW5jU3ViamVjdCA9IEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdDtcbnZhciBSZXBsYXlTdWJqZWN0XzEgPSByZXF1aXJlKCcuL1JlcGxheVN1YmplY3QnKTtcbmV4cG9ydHMuUmVwbGF5U3ViamVjdCA9IFJlcGxheVN1YmplY3RfMS5SZXBsYXlTdWJqZWN0O1xudmFyIEJlaGF2aW9yU3ViamVjdF8xID0gcmVxdWlyZSgnLi9CZWhhdmlvclN1YmplY3QnKTtcbmV4cG9ydHMuQmVoYXZpb3JTdWJqZWN0ID0gQmVoYXZpb3JTdWJqZWN0XzEuQmVoYXZpb3JTdWJqZWN0O1xudmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZScpO1xuZXhwb3J0cy5Db25uZWN0YWJsZU9ic2VydmFibGUgPSBDb25uZWN0YWJsZU9ic2VydmFibGVfMS5Db25uZWN0YWJsZU9ic2VydmFibGU7XG52YXIgTm90aWZpY2F0aW9uXzEgPSByZXF1aXJlKCcuL05vdGlmaWNhdGlvbicpO1xuZXhwb3J0cy5Ob3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb247XG52YXIgRW1wdHlFcnJvcl8xID0gcmVxdWlyZSgnLi91dGlsL0VtcHR5RXJyb3InKTtcbmV4cG9ydHMuRW1wdHlFcnJvciA9IEVtcHR5RXJyb3JfMS5FbXB0eUVycm9yO1xudmFyIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEgPSByZXF1aXJlKCcuL3V0aWwvQXJndW1lbnRPdXRPZlJhbmdlRXJyb3InKTtcbmV4cG9ydHMuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcl8xLkFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yO1xudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yXzEgPSByZXF1aXJlKCcuL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InKTtcbmV4cG9ydHMuT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yO1xudmFyIFRpbWVvdXRFcnJvcl8xID0gcmVxdWlyZSgnLi91dGlsL1RpbWVvdXRFcnJvcicpO1xuZXhwb3J0cy5UaW1lb3V0RXJyb3IgPSBUaW1lb3V0RXJyb3JfMS5UaW1lb3V0RXJyb3I7XG52YXIgVW5zdWJzY3JpcHRpb25FcnJvcl8xID0gcmVxdWlyZSgnLi91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3InKTtcbmV4cG9ydHMuVW5zdWJzY3JpcHRpb25FcnJvciA9IFVuc3Vic2NyaXB0aW9uRXJyb3JfMS5VbnN1YnNjcmlwdGlvbkVycm9yO1xudmFyIHRpbWVJbnRlcnZhbF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvci90aW1lSW50ZXJ2YWwnKTtcbmV4cG9ydHMuVGltZUludGVydmFsID0gdGltZUludGVydmFsXzEuVGltZUludGVydmFsO1xudmFyIHRpbWVzdGFtcF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvdGltZXN0YW1wJyk7XG5leHBvcnRzLlRpbWVzdGFtcCA9IHRpbWVzdGFtcF8xLlRpbWVzdGFtcDtcbnZhciBUZXN0U2NoZWR1bGVyXzEgPSByZXF1aXJlKCcuL3Rlc3RpbmcvVGVzdFNjaGVkdWxlcicpO1xuZXhwb3J0cy5UZXN0U2NoZWR1bGVyID0gVGVzdFNjaGVkdWxlcl8xLlRlc3RTY2hlZHVsZXI7XG52YXIgVmlydHVhbFRpbWVTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4vc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyJyk7XG5leHBvcnRzLlZpcnR1YWxUaW1lU2NoZWR1bGVyID0gVmlydHVhbFRpbWVTY2hlZHVsZXJfMS5WaXJ0dWFsVGltZVNjaGVkdWxlcjtcbnZhciBBamF4T2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9vYnNlcnZhYmxlL2RvbS9BamF4T2JzZXJ2YWJsZScpO1xuZXhwb3J0cy5BamF4UmVzcG9uc2UgPSBBamF4T2JzZXJ2YWJsZV8xLkFqYXhSZXNwb25zZTtcbmV4cG9ydHMuQWpheEVycm9yID0gQWpheE9ic2VydmFibGVfMS5BamF4RXJyb3I7XG5leHBvcnRzLkFqYXhUaW1lb3V0RXJyb3IgPSBBamF4T2JzZXJ2YWJsZV8xLkFqYXhUaW1lb3V0RXJyb3I7XG52YXIgcGlwZV8xID0gcmVxdWlyZSgnLi91dGlsL3BpcGUnKTtcbmV4cG9ydHMucGlwZSA9IHBpcGVfMS5waXBlO1xudmFyIGFzYXBfMSA9IHJlcXVpcmUoJy4vc2NoZWR1bGVyL2FzYXAnKTtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi9zY2hlZHVsZXIvYXN5bmMnKTtcbnZhciBxdWV1ZV8xID0gcmVxdWlyZSgnLi9zY2hlZHVsZXIvcXVldWUnKTtcbnZhciBhbmltYXRpb25GcmFtZV8xID0gcmVxdWlyZSgnLi9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUnKTtcbnZhciByeFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4vc3ltYm9sL3J4U3Vic2NyaWJlcicpO1xudmFyIGl0ZXJhdG9yXzEgPSByZXF1aXJlKCcuL3N5bWJvbC9pdGVyYXRvcicpO1xudmFyIG9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vc3ltYm9sL29ic2VydmFibGUnKTtcbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMnKTtcbmV4cG9ydHMub3BlcmF0b3JzID0gX29wZXJhdG9ycztcbi8qIHRzbGludDplbmFibGU6bm8tdW51c2VkLXZhcmlhYmxlICovXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJ4LlNjaGVkdWxlclxuICogQHByb3BlcnR5IHtTY2hlZHVsZXJ9IHF1ZXVlIFNjaGVkdWxlcyBvbiBhIHF1ZXVlIGluIHRoZSBjdXJyZW50IGV2ZW50IGZyYW1lXG4gKiAodHJhbXBvbGluZSBzY2hlZHVsZXIpLiBVc2UgdGhpcyBmb3IgaXRlcmF0aW9uIG9wZXJhdGlvbnMuXG4gKiBAcHJvcGVydHkge1NjaGVkdWxlcn0gYXNhcCBTY2hlZHVsZXMgb24gdGhlIG1pY3JvIHRhc2sgcXVldWUsIHdoaWNoIHVzZXMgdGhlXG4gKiBmYXN0ZXN0IHRyYW5zcG9ydCBtZWNoYW5pc20gYXZhaWxhYmxlLCBlaXRoZXIgTm9kZS5qcycgYHByb2Nlc3MubmV4dFRpY2soKWBcbiAqIG9yIFdlYiBXb3JrZXIgTWVzc2FnZUNoYW5uZWwgb3Igc2V0VGltZW91dCBvciBvdGhlcnMuIFVzZSB0aGlzIGZvclxuICogYXN5bmNocm9ub3VzIGNvbnZlcnNpb25zLlxuICogQHByb3BlcnR5IHtTY2hlZHVsZXJ9IGFzeW5jIFNjaGVkdWxlcyB3b3JrIHdpdGggYHNldEludGVydmFsYC4gVXNlIHRoaXMgZm9yXG4gKiB0aW1lLWJhc2VkIG9wZXJhdGlvbnMuXG4gKiBAcHJvcGVydHkge1NjaGVkdWxlcn0gYW5pbWF0aW9uRnJhbWUgU2NoZWR1bGVzIHdvcmsgd2l0aCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC5cbiAqIFVzZSB0aGlzIGZvciBzeW5jaHJvbml6aW5nIHdpdGggdGhlIHBsYXRmb3JtJ3MgcGFpbnRpbmdcbiAqL1xudmFyIFNjaGVkdWxlciA9IHtcbiAgICBhc2FwOiBhc2FwXzEuYXNhcCxcbiAgICBxdWV1ZTogcXVldWVfMS5xdWV1ZSxcbiAgICBhbmltYXRpb25GcmFtZTogYW5pbWF0aW9uRnJhbWVfMS5hbmltYXRpb25GcmFtZSxcbiAgICBhc3luYzogYXN5bmNfMS5hc3luY1xufTtcbmV4cG9ydHMuU2NoZWR1bGVyID0gU2NoZWR1bGVyO1xuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSeC5TeW1ib2xcbiAqIEBwcm9wZXJ0eSB7U3ltYm9sfHN0cmluZ30gcnhTdWJzY3JpYmVyIEEgc3ltYm9sIHRvIHVzZSBhcyBhIHByb3BlcnR5IG5hbWUgdG9cbiAqIHJldHJpZXZlIGFuIFwiUnggc2FmZVwiIE9ic2VydmVyIGZyb20gYW4gb2JqZWN0LiBcIlJ4IHNhZmV0eVwiIGNhbiBiZSBkZWZpbmVkIGFzXG4gKiBhbiBvYmplY3QgdGhhdCBoYXMgYWxsIG9mIHRoZSB0cmFpdHMgb2YgYW4gUnggU3Vic2NyaWJlciwgaW5jbHVkaW5nIHRoZVxuICogYWJpbGl0eSB0byBhZGQgYW5kIHJlbW92ZSBzdWJzY3JpcHRpb25zIHRvIHRoZSBzdWJzY3JpcHRpb24gY2hhaW4gYW5kXG4gKiBndWFyYW50ZWVzIGludm9sdmluZyBldmVudCB0cmlnZ2VyaW5nIChjYW4ndCBcIm5leHRcIiBhZnRlciB1bnN1YnNjcmlwdGlvbixcbiAqIGV0YykuXG4gKiBAcHJvcGVydHkge1N5bWJvbHxzdHJpbmd9IG9ic2VydmFibGUgQSBzeW1ib2wgdG8gdXNlIGFzIGEgcHJvcGVydHkgbmFtZSB0b1xuICogcmV0cmlldmUgYW4gT2JzZXJ2YWJsZSBhcyBkZWZpbmVkIGJ5IHRoZSBbRUNNQVNjcmlwdCBcIk9ic2VydmFibGVcIiBzcGVjXShodHRwczovL2dpdGh1Yi5jb20vemVucGFyc2luZy9lcy1vYnNlcnZhYmxlKS5cbiAqIEBwcm9wZXJ0eSB7U3ltYm9sfHN0cmluZ30gaXRlcmF0b3IgVGhlIEVTNiBzeW1ib2wgdG8gdXNlIGFzIGEgcHJvcGVydHkgbmFtZVxuICogdG8gcmV0cmlldmUgYW4gaXRlcmF0b3IgZnJvbSBhbiBvYmplY3QuXG4gKi9cbnZhciBTeW1ib2wgPSB7XG4gICAgcnhTdWJzY3JpYmVyOiByeFN1YnNjcmliZXJfMS5yeFN1YnNjcmliZXIsXG4gICAgb2JzZXJ2YWJsZTogb2JzZXJ2YWJsZV8xLm9ic2VydmFibGUsXG4gICAgaXRlcmF0b3I6IGl0ZXJhdG9yXzEuaXRlcmF0b3Jcbn07XG5leHBvcnRzLlN5bWJvbCA9IFN5bWJvbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJ4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBBbiBleGVjdXRpb24gY29udGV4dCBhbmQgYSBkYXRhIHN0cnVjdHVyZSB0byBvcmRlciB0YXNrcyBhbmQgc2NoZWR1bGUgdGhlaXJcbiAqIGV4ZWN1dGlvbi4gUHJvdmlkZXMgYSBub3Rpb24gb2YgKHBvdGVudGlhbGx5IHZpcnR1YWwpIHRpbWUsIHRocm91Z2ggdGhlXG4gKiBgbm93KClgIGdldHRlciBtZXRob2QuXG4gKlxuICogRWFjaCB1bml0IG9mIHdvcmsgaW4gYSBTY2hlZHVsZXIgaXMgY2FsbGVkIGFuIHtAbGluayBBY3Rpb259LlxuICpcbiAqIGBgYHRzXG4gKiBjbGFzcyBTY2hlZHVsZXIge1xuICogICBub3coKTogbnVtYmVyO1xuICogICBzY2hlZHVsZSh3b3JrLCBkZWxheT8sIHN0YXRlPyk6IFN1YnNjcmlwdGlvbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBjbGFzcyBTY2hlZHVsZXJcbiAqL1xudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuU2NoZWR1bGVyQWN0aW9uID0gU2NoZWR1bGVyQWN0aW9uO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2NoZWR1bGVzIGEgZnVuY3Rpb24sIGB3b3JrYCwgZm9yIGV4ZWN1dGlvbi4gTWF5IGhhcHBlbiBhdCBzb21lIHBvaW50IGluXG4gICAgICogdGhlIGZ1dHVyZSwgYWNjb3JkaW5nIHRvIHRoZSBgZGVsYXlgIHBhcmFtZXRlciwgaWYgc3BlY2lmaWVkLiBNYXkgYmUgcGFzc2VkXG4gICAgICogc29tZSBjb250ZXh0IG9iamVjdCwgYHN0YXRlYCwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGB3b3JrYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBnaXZlbiBhcmd1bWVudHMgd2lsbCBiZSBwcm9jZXNzZWQgYW4gc3RvcmVkIGFzIGFuIEFjdGlvbiBvYmplY3QgaW4gYVxuICAgICAqIHF1ZXVlIG9mIGFjdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0YXRlOiA/VCk6ID9TdWJzY3JpcHRpb259IHdvcmsgQSBmdW5jdGlvbiByZXByZXNlbnRpbmcgYVxuICAgICAqIHRhc2ssIG9yIHNvbWUgdW5pdCBvZiB3b3JrIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBTY2hlZHVsZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWxheV0gVGltZSB0byB3YWl0IGJlZm9yZSBleGVjdXRpbmcgdGhlIHdvcmssIHdoZXJlIHRoZVxuICAgICAqIHRpbWUgdW5pdCBpcyBpbXBsaWNpdCBhbmQgZGVmaW5lZCBieSB0aGUgU2NoZWR1bGVyIGl0c2VsZi5cbiAgICAgKiBAcGFyYW0ge1R9IFtzdGF0ZV0gU29tZSBjb250ZXh0dWFsIGRhdGEgdGhhdCB0aGUgYHdvcmtgIGZ1bmN0aW9uIHVzZXMgd2hlblxuICAgICAqIGNhbGxlZCBieSB0aGUgU2NoZWR1bGVyLlxuICAgICAqIEByZXR1cm4ge1N1YnNjcmlwdGlvbn0gQSBzdWJzY3JpcHRpb24gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1bnN1YnNjcmliZVxuICAgICAqIHRoZSBzY2hlZHVsZWQgd29yay5cbiAgICAgKi9cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlNjaGVkdWxlckFjdGlvbih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IERhdGUubm93ID8gRGF0ZS5ub3cgOiBmdW5jdGlvbiAoKSB7IHJldHVybiArbmV3IERhdGUoKTsgfTtcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcbmV4cG9ydHMuU2NoZWR1bGVyID0gU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2NoZWR1bGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9PYnNlcnZhYmxlJyk7XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi9TdWJzY3JpYmVyJyk7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuL1N1YnNjcmlwdGlvbicpO1xudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yXzEgPSByZXF1aXJlKCcuL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InKTtcbnZhciBTdWJqZWN0U3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuL1N1YmplY3RTdWJzY3JpcHRpb24nKTtcbnZhciByeFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4vc3ltYm9sL3J4U3Vic2NyaWJlcicpO1xuLyoqXG4gKiBAY2xhc3MgU3ViamVjdFN1YnNjcmliZXI8VD5cbiAqL1xudmFyIFN1YmplY3RTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgfVxuICAgIHJldHVybiBTdWJqZWN0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbmV4cG9ydHMuU3ViamVjdFN1YnNjcmliZXIgPSBTdWJqZWN0U3Vic2NyaWJlcjtcbi8qKlxuICogQGNsYXNzIFN1YmplY3Q8VD5cbiAqL1xudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZVtyeFN1YnNjcmliZXJfMS5yeFN1YnNjcmliZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFN1YmplY3RTdWJzY3JpYmVyKHRoaXMpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgdmFyIGxlbiA9IG9ic2VydmVycy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgY29weSA9IG9ic2VydmVycy5zbGljZSgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGNvcHlbaV0ubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7XG4gICAgICAgIHRoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzO1xuICAgICAgICB2YXIgbGVuID0gb2JzZXJ2ZXJzLmxlbmd0aDtcbiAgICAgICAgdmFyIGNvcHkgPSBvYnNlcnZlcnMuc2xpY2UoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY29weVtpXS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aCA9IDA7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JfMS5PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzO1xuICAgICAgICB2YXIgbGVuID0gb2JzZXJ2ZXJzLmxlbmd0aDtcbiAgICAgICAgdmFyIGNvcHkgPSBvYnNlcnZlcnMuc2xpY2UoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY29weVtpXS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aCA9IDA7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcl8xLk9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JfMS5PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhpcy50aHJvd25FcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3ViamVjdFN1YnNjcmlwdGlvbl8xLlN1YmplY3RTdWJzY3JpcHRpb24odGhpcywgc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLlN1YmplY3QgPSBTdWJqZWN0O1xuLyoqXG4gKiBAY2xhc3MgQW5vbnltb3VzU3ViamVjdDxUPlxuICovXG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbiAmJiBkZXN0aW5hdGlvbi5uZXh0KSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbiAmJiBkZXN0aW5hdGlvbi5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uICYmIGRlc3RpbmF0aW9uLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuc291cmNlO1xuICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcbmV4cG9ydHMuQW5vbnltb3VzU3ViamVjdCA9IEFub255bW91c1N1YmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuL1N1YnNjcmlwdGlvbicpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBTdWJqZWN0U3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdFN1YnNjcmlwdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0U3Vic2NyaXB0aW9uKHN1YmplY3QsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuc3ViamVjdCA9IHN1YmplY3Q7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlciA9IHN1YnNjcmliZXI7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgfVxuICAgIFN1YmplY3RTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0O1xuICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gc3ViamVjdC5vYnNlcnZlcnM7XG4gICAgICAgIHRoaXMuc3ViamVjdCA9IG51bGw7XG4gICAgICAgIGlmICghb2JzZXJ2ZXJzIHx8IG9ic2VydmVycy5sZW5ndGggPT09IDAgfHwgc3ViamVjdC5pc1N0b3BwZWQgfHwgc3ViamVjdC5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3Vic2NyaWJlckluZGV4ID0gb2JzZXJ2ZXJzLmluZGV4T2YodGhpcy5zdWJzY3JpYmVyKTtcbiAgICAgICAgaWYgKHN1YnNjcmliZXJJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIG9ic2VydmVycy5zcGxpY2Uoc3Vic2NyaWJlckluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3RTdWJzY3JpcHRpb247XG59KFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbikpO1xuZXhwb3J0cy5TdWJqZWN0U3Vic2NyaXB0aW9uID0gU3ViamVjdFN1YnNjcmlwdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YmplY3RTdWJzY3JpcHRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKCcuL3V0aWwvaXNGdW5jdGlvbicpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZSgnLi9TdWJzY3JpcHRpb24nKTtcbnZhciBPYnNlcnZlcl8xID0gcmVxdWlyZSgnLi9PYnNlcnZlcicpO1xudmFyIHJ4U3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi9zeW1ib2wvcnhTdWJzY3JpYmVyJyk7XG4vKipcbiAqIEltcGxlbWVudHMgdGhlIHtAbGluayBPYnNlcnZlcn0gaW50ZXJmYWNlIGFuZCBleHRlbmRzIHRoZVxuICoge0BsaW5rIFN1YnNjcmlwdGlvbn0gY2xhc3MuIFdoaWxlIHRoZSB7QGxpbmsgT2JzZXJ2ZXJ9IGlzIHRoZSBwdWJsaWMgQVBJIGZvclxuICogY29uc3VtaW5nIHRoZSB2YWx1ZXMgb2YgYW4ge0BsaW5rIE9ic2VydmFibGV9LCBhbGwgT2JzZXJ2ZXJzIGdldCBjb252ZXJ0ZWQgdG9cbiAqIGEgU3Vic2NyaWJlciwgaW4gb3JkZXIgdG8gcHJvdmlkZSBTdWJzY3JpcHRpb24tbGlrZSBjYXBhYmlsaXRpZXMgc3VjaCBhc1xuICogYHVuc3Vic2NyaWJlYC4gU3Vic2NyaWJlciBpcyBhIGNvbW1vbiB0eXBlIGluIFJ4SlMsIGFuZCBjcnVjaWFsIGZvclxuICogaW1wbGVtZW50aW5nIG9wZXJhdG9ycywgYnV0IGl0IGlzIHJhcmVseSB1c2VkIGFzIGEgcHVibGljIEFQSS5cbiAqXG4gKiBAY2xhc3MgU3Vic2NyaWJlcjxUPlxuICovXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtPYnNlcnZlcnxmdW5jdGlvbih2YWx1ZTogVCk6IHZvaWR9IFtkZXN0aW5hdGlvbk9yTmV4dF0gQSBwYXJ0aWFsbHlcbiAgICAgKiBkZWZpbmVkIE9ic2VydmVyIG9yIGEgYG5leHRgIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oZTogP2FueSk6IHZvaWR9IFtlcnJvcl0gVGhlIGBlcnJvcmAgY2FsbGJhY2sgb2YgYW5cbiAgICAgKiBPYnNlcnZlci5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IHZvaWR9IFtjb21wbGV0ZV0gVGhlIGBjb21wbGV0ZWAgY2FsbGJhY2sgb2YgYW5cbiAgICAgKiBPYnNlcnZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuc3luY0Vycm9yVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnN5bmNFcnJvclRocm93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN5bmNFcnJvclRocm93YWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gT2JzZXJ2ZXJfMS5lbXB0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9uT3JOZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBPYnNlcnZlcl8xLmVtcHR5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXN0aW5hdGlvbk9yTmV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSEFDSyhiZW5sZXNoKTogVG8gcmVzb2x2ZSBhbiBpc3N1ZSB3aGVyZSBOb2RlIHVzZXJzIG1heSBoYXZlIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvcGllcyBvZiByeGpzIGluIHRoZWlyIG5vZGVfbW9kdWxlcyBkaXJlY3RvcnkuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RydXN0ZWRTdWJzY3JpYmVyKGRlc3RpbmF0aW9uT3JOZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRydXN0ZWRTdWJzY3JpYmVyID0gZGVzdGluYXRpb25Pck5leHRbcnhTdWJzY3JpYmVyXzEucnhTdWJzY3JpYmVyXSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRXJyb3JUaHJvd2FibGUgPSB0cnVzdGVkU3Vic2NyaWJlci5zeW5jRXJyb3JUaHJvd2FibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gdHJ1c3RlZFN1YnNjcmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnVzdGVkU3Vic2NyaWJlci5hZGQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFcnJvclRocm93YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbmV3IFNhZmVTdWJzY3JpYmVyKHRoaXMsIGRlc3RpbmF0aW9uT3JOZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuc3luY0Vycm9yVGhyb3dhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbmV3IFNhZmVTdWJzY3JpYmVyKHRoaXMsIGRlc3RpbmF0aW9uT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIFN1YnNjcmliZXIucHJvdG90eXBlW3J4U3Vic2NyaWJlcl8xLnJ4U3Vic2NyaWJlcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgIC8qKlxuICAgICAqIEEgc3RhdGljIGZhY3RvcnkgZm9yIGEgU3Vic2NyaWJlciwgZ2l2ZW4gYSAocG90ZW50aWFsbHkgcGFydGlhbCkgZGVmaW5pdGlvblxuICAgICAqIG9mIGFuIE9ic2VydmVyLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oeDogP1QpOiB2b2lkfSBbbmV4dF0gVGhlIGBuZXh0YCBjYWxsYmFjayBvZiBhbiBPYnNlcnZlci5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGU6ID9hbnkpOiB2b2lkfSBbZXJyb3JdIFRoZSBgZXJyb3JgIGNhbGxiYWNrIG9mIGFuXG4gICAgICogT2JzZXJ2ZXIuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbigpOiB2b2lkfSBbY29tcGxldGVdIFRoZSBgY29tcGxldGVgIGNhbGxiYWNrIG9mIGFuXG4gICAgICogT2JzZXJ2ZXIuXG4gICAgICogQHJldHVybiB7U3Vic2NyaWJlcjxUPn0gQSBTdWJzY3JpYmVyIHdyYXBwaW5nIHRoZSAocGFydGlhbGx5IGRlZmluZWQpXG4gICAgICogT2JzZXJ2ZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBzdWJzY3JpYmVyLnN5bmNFcnJvclRocm93YWJsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRoZSB7QGxpbmsgT2JzZXJ2ZXJ9IGNhbGxiYWNrIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyBvZiB0eXBlIGBuZXh0YCBmcm9tXG4gICAgICogdGhlIE9ic2VydmFibGUsIHdpdGggYSB2YWx1ZS4gVGhlIE9ic2VydmFibGUgbWF5IGNhbGwgdGhpcyBtZXRob2QgMCBvciBtb3JlXG4gICAgICogdGltZXMuXG4gICAgICogQHBhcmFtIHtUfSBbdmFsdWVdIFRoZSBgbmV4dGAgdmFsdWUuXG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKi9cbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGUge0BsaW5rIE9ic2VydmVyfSBjYWxsYmFjayB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgb2YgdHlwZSBgZXJyb3JgIGZyb21cbiAgICAgKiB0aGUgT2JzZXJ2YWJsZSwgd2l0aCBhbiBhdHRhY2hlZCB7QGxpbmsgRXJyb3J9LiBOb3RpZmllcyB0aGUgT2JzZXJ2ZXIgdGhhdFxuICAgICAqIHRoZSBPYnNlcnZhYmxlIGhhcyBleHBlcmllbmNlZCBhbiBlcnJvciBjb25kaXRpb24uXG4gICAgICogQHBhcmFtIHthbnl9IFtlcnJdIFRoZSBgZXJyb3JgIGV4Y2VwdGlvbi5cbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGUge0BsaW5rIE9ic2VydmVyfSBjYWxsYmFjayB0byByZWNlaXZlIGEgdmFsdWVsZXNzIG5vdGlmaWNhdGlvbiBvZiB0eXBlXG4gICAgICogYGNvbXBsZXRlYCBmcm9tIHRoZSBPYnNlcnZhYmxlLiBOb3RpZmllcyB0aGUgT2JzZXJ2ZXIgdGhhdCB0aGUgT2JzZXJ2YWJsZVxuICAgICAqIGhhcyBmaW5pc2hlZCBzZW5kaW5nIHB1c2gtYmFzZWQgbm90aWZpY2F0aW9ucy5cbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgX3BhcmVudCA9IF9hLl9wYXJlbnQsIF9wYXJlbnRzID0gX2EuX3BhcmVudHM7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3BhcmVudHMgPSBudWxsO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IF9wYXJlbnQ7XG4gICAgICAgIHRoaXMuX3BhcmVudHMgPSBfcGFyZW50cztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKSk7XG5leHBvcnRzLlN1YnNjcmliZXIgPSBTdWJzY3JpYmVyO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKF9wYXJlbnRTdWJzY3JpYmVyLCBvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLl9wYXJlbnRTdWJzY3JpYmVyID0gX3BhcmVudFN1YnNjcmliZXI7XG4gICAgICAgIHZhciBuZXh0O1xuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uXzEuaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkpIHtcbiAgICAgICAgICAgIG5leHQgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgbmV4dCA9IG9ic2VydmVyT3JOZXh0Lm5leHQ7XG4gICAgICAgICAgICBlcnJvciA9IG9ic2VydmVyT3JOZXh0LmVycm9yO1xuICAgICAgICAgICAgY29tcGxldGUgPSBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlck9yTmV4dCAhPT0gT2JzZXJ2ZXJfMS5lbXB0eSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24oY29udGV4dC51bnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQoY29udGV4dC51bnN1YnNjcmliZS5iaW5kKGNvbnRleHQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGV4dC51bnN1YnNjcmliZSA9IHRoaXMudW5zdWJzY3JpYmUuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5fbmV4dCA9IG5leHQ7XG4gICAgICAgIHRoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRlID0gY29tcGxldGU7XG4gICAgfVxuICAgIFNhZmVTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQgJiYgdGhpcy5fbmV4dCkge1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRTdWJzY3JpYmVyID0gdGhpcy5fcGFyZW50U3Vic2NyaWJlcjtcbiAgICAgICAgICAgIGlmICghX3BhcmVudFN1YnNjcmliZXIuc3luY0Vycm9yVGhyb3dhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fbmV4dCwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fX3RyeU9yU2V0RXJyb3IoX3BhcmVudFN1YnNjcmliZXIsIHRoaXMuX25leHQsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU2FmZVN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB2YXIgX3BhcmVudFN1YnNjcmliZXIgPSB0aGlzLl9wYXJlbnRTdWJzY3JpYmVyO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfcGFyZW50U3Vic2NyaWJlci5zeW5jRXJyb3JUaHJvd2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fZXJyb3IsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX190cnlPclNldEVycm9yKF9wYXJlbnRTdWJzY3JpYmVyLCB0aGlzLl9lcnJvciwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFfcGFyZW50U3Vic2NyaWJlci5zeW5jRXJyb3JUaHJvd2FibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgX3BhcmVudFN1YnNjcmliZXIuc3luY0Vycm9yVmFsdWUgPSBlcnI7XG4gICAgICAgICAgICAgICAgX3BhcmVudFN1YnNjcmliZXIuc3luY0Vycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNhZmVTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRTdWJzY3JpYmVyID0gdGhpcy5fcGFyZW50U3Vic2NyaWJlcjtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHZhciB3cmFwcGVkQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fY29tcGxldGUuY2FsbChfdGhpcy5fY29udGV4dCk7IH07XG4gICAgICAgICAgICAgICAgaWYgKCFfcGFyZW50U3Vic2NyaWJlci5zeW5jRXJyb3JUaHJvd2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX3RyeU9yVW5zdWIod3JhcHBlZENvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX3RyeU9yU2V0RXJyb3IoX3BhcmVudFN1YnNjcmliZXIsIHdyYXBwZWRDb21wbGV0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNhZmVTdWJzY3JpYmVyLnByb3RvdHlwZS5fX3RyeU9yVW5zdWIgPSBmdW5jdGlvbiAoZm4sIHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbi5jYWxsKHRoaXMuX2NvbnRleHQsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNhZmVTdWJzY3JpYmVyLnByb3RvdHlwZS5fX3RyeU9yU2V0RXJyb3IgPSBmdW5jdGlvbiAocGFyZW50LCBmbiwgdmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpcy5fY29udGV4dCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHBhcmVudC5zeW5jRXJyb3JWYWx1ZSA9IGVycjtcbiAgICAgICAgICAgIHBhcmVudC5zeW5jRXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFNhZmVTdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfcGFyZW50U3Vic2NyaWJlciA9IHRoaXMuX3BhcmVudFN1YnNjcmliZXI7XG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuICAgICAgICB0aGlzLl9wYXJlbnRTdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgX3BhcmVudFN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaXNUcnVzdGVkU3Vic2NyaWJlcihvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgU3Vic2NyaWJlciB8fCAoJ3N5bmNFcnJvclRocm93YWJsZScgaW4gb2JqICYmIG9ialtyeFN1YnNjcmliZXJfMS5yeFN1YnNjcmliZXJdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YnNjcmliZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgaXNBcnJheV8xID0gcmVxdWlyZSgnLi91dGlsL2lzQXJyYXknKTtcbnZhciBpc09iamVjdF8xID0gcmVxdWlyZSgnLi91dGlsL2lzT2JqZWN0Jyk7XG52YXIgaXNGdW5jdGlvbl8xID0gcmVxdWlyZSgnLi91dGlsL2lzRnVuY3Rpb24nKTtcbnZhciB0cnlDYXRjaF8xID0gcmVxdWlyZSgnLi91dGlsL3RyeUNhdGNoJyk7XG52YXIgZXJyb3JPYmplY3RfMSA9IHJlcXVpcmUoJy4vdXRpbC9lcnJvck9iamVjdCcpO1xudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3JfMSA9IHJlcXVpcmUoJy4vdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yJyk7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBkaXNwb3NhYmxlIHJlc291cmNlLCBzdWNoIGFzIHRoZSBleGVjdXRpb24gb2YgYW4gT2JzZXJ2YWJsZS4gQVxuICogU3Vic2NyaXB0aW9uIGhhcyBvbmUgaW1wb3J0YW50IG1ldGhvZCwgYHVuc3Vic2NyaWJlYCwgdGhhdCB0YWtlcyBubyBhcmd1bWVudFxuICogYW5kIGp1c3QgZGlzcG9zZXMgdGhlIHJlc291cmNlIGhlbGQgYnkgdGhlIHN1YnNjcmlwdGlvbi5cbiAqXG4gKiBBZGRpdGlvbmFsbHksIHN1YnNjcmlwdGlvbnMgbWF5IGJlIGdyb3VwZWQgdG9nZXRoZXIgdGhyb3VnaCB0aGUgYGFkZCgpYFxuICogbWV0aG9kLCB3aGljaCB3aWxsIGF0dGFjaCBhIGNoaWxkIFN1YnNjcmlwdGlvbiB0byB0aGUgY3VycmVudCBTdWJzY3JpcHRpb24uXG4gKiBXaGVuIGEgU3Vic2NyaXB0aW9uIGlzIHVuc3Vic2NyaWJlZCwgYWxsIGl0cyBjaGlsZHJlbiAoYW5kIGl0cyBncmFuZGNoaWxkcmVuKVxuICogd2lsbCBiZSB1bnN1YnNjcmliZWQgYXMgd2VsbC5cbiAqXG4gKiBAY2xhc3MgU3Vic2NyaXB0aW9uXG4gKi9cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogdm9pZH0gW3Vuc3Vic2NyaWJlXSBBIGZ1bmN0aW9uIGRlc2NyaWJpbmcgaG93IHRvXG4gICAgICogcGVyZm9ybSB0aGUgZGlzcG9zYWwgb2YgcmVzb3VyY2VzIHdoZW4gdGhlIGB1bnN1YnNjcmliZWAgbWV0aG9kIGlzIGNhbGxlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24odW5zdWJzY3JpYmUpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMgU3Vic2NyaXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdW5zdWJzY3JpYmVkLlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3BhcmVudHMgPSBudWxsO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gbnVsbDtcbiAgICAgICAgaWYgKHVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZSA9IHVuc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc3Bvc2VzIHRoZSByZXNvdXJjZXMgaGVsZCBieSB0aGUgc3Vic2NyaXB0aW9uLiBNYXksIGZvciBpbnN0YW5jZSwgY2FuY2VsXG4gICAgICogYW4gb25nb2luZyBPYnNlcnZhYmxlIGV4ZWN1dGlvbiBvciBjYW5jZWwgYW55IG90aGVyIHR5cGUgb2Ygd29yayB0aGF0XG4gICAgICogc3RhcnRlZCB3aGVuIHRoZSBTdWJzY3JpcHRpb24gd2FzIGNyZWF0ZWQuXG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKi9cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9wYXJlbnQgPSBfYS5fcGFyZW50LCBfcGFyZW50cyA9IF9hLl9wYXJlbnRzLCBfdW5zdWJzY3JpYmUgPSBfYS5fdW5zdWJzY3JpYmUsIF9zdWJzY3JpcHRpb25zID0gX2EuX3N1YnNjcmlwdGlvbnM7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGFyZW50cyA9IG51bGw7XG4gICAgICAgIC8vIG51bGwgb3V0IF9zdWJzY3JpcHRpb25zIGZpcnN0IHNvIGFueSBjaGlsZCBzdWJzY3JpcHRpb25zIHRoYXQgYXR0ZW1wdFxuICAgICAgICAvLyB0byByZW1vdmUgdGhlbXNlbHZlcyBmcm9tIHRoaXMgc3Vic2NyaXB0aW9uIHdpbGwgbm9vcFxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gbnVsbDtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIHZhciBsZW4gPSBfcGFyZW50cyA/IF9wYXJlbnRzLmxlbmd0aCA6IDA7XG4gICAgICAgIC8vIGlmIHRoaXMuX3BhcmVudCBpcyBudWxsLCB0aGVuIHNvIGlzIHRoaXMuX3BhcmVudHMsIGFuZCB3ZVxuICAgICAgICAvLyBkb24ndCBoYXZlIHRvIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSBhbnkgcGFyZW50IHN1YnNjcmlwdGlvbnMuXG4gICAgICAgIHdoaWxlIChfcGFyZW50KSB7XG4gICAgICAgICAgICBfcGFyZW50LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIC8vIGlmIHRoaXMuX3BhcmVudHMgaXMgbnVsbCBvciBpbmRleCA+PSBsZW4sXG4gICAgICAgICAgICAvLyB0aGVuIF9wYXJlbnQgaXMgc2V0IHRvIG51bGwsIGFuZCB0aGUgbG9vcCBleGl0c1xuICAgICAgICAgICAgX3BhcmVudCA9ICsraW5kZXggPCBsZW4gJiYgX3BhcmVudHNbaW5kZXhdIHx8IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKF91bnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHZhciB0cmlhbCA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2goX3Vuc3Vic2NyaWJlKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHRyaWFsID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgfHwgKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3JfMS5VbnN1YnNjcmlwdGlvbkVycm9yID9cbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlblVuc3Vic2NyaXB0aW9uRXJyb3JzKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZS5lcnJvcnMpIDogW2Vycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5XzEuaXNBcnJheShfc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBsZW4gPSBfc3Vic2NyaXB0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbikge1xuICAgICAgICAgICAgICAgIHZhciBzdWIgPSBfc3Vic2NyaXB0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0XzEuaXNPYmplY3Qoc3ViKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpYWwgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHN1Yi51bnN1YnNjcmliZSkuY2FsbChzdWIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJpYWwgPT09IGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdC5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3JfMS5VbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChmbGF0dGVuVW5zdWJzY3JpcHRpb25FcnJvcnMoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcl8xLlVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHRlYXIgZG93biB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSB1bnN1YnNjcmliZSgpIG9mIHRoaXNcbiAgICAgKiBTdWJzY3JpcHRpb24uXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdGVhciBkb3duIGJlaW5nIGFkZGVkIGlzIGEgc3Vic2NyaXB0aW9uIHRoYXQgaXMgYWxyZWFkeVxuICAgICAqIHVuc3Vic2NyaWJlZCwgaXMgdGhlIHNhbWUgcmVmZXJlbmNlIGBhZGRgIGlzIGJlaW5nIGNhbGxlZCBvbiwgb3IgaXNcbiAgICAgKiBgU3Vic2NyaXB0aW9uLkVNUFRZYCwgaXQgd2lsbCBub3QgYmUgYWRkZWQuXG4gICAgICpcbiAgICAgKiBJZiB0aGlzIHN1YnNjcmlwdGlvbiBpcyBhbHJlYWR5IGluIGFuIGBjbG9zZWRgIHN0YXRlLCB0aGUgcGFzc2VkXG4gICAgICogdGVhciBkb3duIGxvZ2ljIHdpbGwgYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1RlYXJkb3duTG9naWN9IHRlYXJkb3duIFRoZSBhZGRpdGlvbmFsIGxvZ2ljIHRvIGV4ZWN1dGUgb25cbiAgICAgKiB0ZWFyZG93bi5cbiAgICAgKiBAcmV0dXJuIHtTdWJzY3JpcHRpb259IFJldHVybnMgdGhlIFN1YnNjcmlwdGlvbiB1c2VkIG9yIGNyZWF0ZWQgdG8gYmVcbiAgICAgKiBhZGRlZCB0byB0aGUgaW5uZXIgc3Vic2NyaXB0aW9ucyBsaXN0LiBUaGlzIFN1YnNjcmlwdGlvbiBjYW4gYmUgdXNlZCB3aXRoXG4gICAgICogYHJlbW92ZSgpYCB0byByZW1vdmUgdGhlIHBhc3NlZCB0ZWFyZG93biBsb2dpYyBmcm9tIHRoZSBpbm5lciBzdWJzY3JpcHRpb25zXG4gICAgICogbGlzdC5cbiAgICAgKi9cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICBpZiAoIXRlYXJkb3duIHx8ICh0ZWFyZG93biA9PT0gU3Vic2NyaXB0aW9uLkVNUFRZKSkge1xuICAgICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVhcmRvd24gPT09IHRoaXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0ZWFyZG93bjtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdGVhcmRvd24pIHtcbiAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKHRlYXJkb3duKTtcbiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbi5jbG9zZWQgfHwgdHlwZW9mIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbi5fYWRkUGFyZW50ICE9PSAnZnVuY3Rpb24nIC8qIHF1YWNrIHF1YWNrICovKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSBzdWJzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLl9zdWJzY3JpcHRpb25zID0gW3RtcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VucmVjb2duaXplZCB0ZWFyZG93biAnICsgdGVhcmRvd24gKyAnIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3Vic2NyaXB0aW9ucyA9IHRoaXMuX3N1YnNjcmlwdGlvbnMgfHwgKHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgICAgICBzdWJzY3JpcHRpb24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBTdWJzY3JpcHRpb24gZnJvbSB0aGUgaW50ZXJuYWwgbGlzdCBvZiBzdWJzY3JpcHRpb25zIHRoYXQgd2lsbFxuICAgICAqIHVuc3Vic2NyaWJlIGR1cmluZyB0aGUgdW5zdWJzY3JpYmUgcHJvY2VzcyBvZiB0aGlzIFN1YnNjcmlwdGlvbi5cbiAgICAgKiBAcGFyYW0ge1N1YnNjcmlwdGlvbn0gc3Vic2NyaXB0aW9uIFRoZSBzdWJzY3JpcHRpb24gdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICovXG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb25zID0gdGhpcy5fc3Vic2NyaXB0aW9ucztcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb25JbmRleCA9IHN1YnNjcmlwdGlvbnMuaW5kZXhPZihzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuc3BsaWNlKHN1YnNjcmlwdGlvbkluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfcGFyZW50ID0gX2EuX3BhcmVudCwgX3BhcmVudHMgPSBfYS5fcGFyZW50cztcbiAgICAgICAgaWYgKCFfcGFyZW50IHx8IF9wYXJlbnQgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHBhcmVudCwgb3IgdGhlIG5ldyBwYXJlbnQgaXMgdGhlIHNhbWUgYXMgdGhlXG4gICAgICAgICAgICAvLyBjdXJyZW50IHBhcmVudCwgdGhlbiBzZXQgdGhpcy5fcGFyZW50IHRvIHRoZSBuZXcgcGFyZW50LlxuICAgICAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFfcGFyZW50cykge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5IG9uZSBwYXJlbnQsIGJ1dCBub3QgbXVsdGlwbGUsIGFsbG9jYXRlIGFuIEFycmF5IHRvXG4gICAgICAgICAgICAvLyBzdG9yZSB0aGUgcmVzdCBvZiB0aGUgcGFyZW50IFN1YnNjcmlwdGlvbnMuXG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRzID0gW3BhcmVudF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoX3BhcmVudHMuaW5kZXhPZihwYXJlbnQpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gT25seSBhZGQgdGhlIG5ldyBwYXJlbnQgdG8gdGhlIF9wYXJlbnRzIGxpc3QgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZS5cbiAgICAgICAgICAgIF9wYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uIChlbXB0eSkge1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfShuZXcgU3Vic2NyaXB0aW9uKCkpKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbmV4cG9ydHMuU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uO1xuZnVuY3Rpb24gZmxhdHRlblVuc3Vic2NyaXB0aW9uRXJyb3JzKGVycm9ycykge1xuICAgIHJldHVybiBlcnJvcnMucmVkdWNlKGZ1bmN0aW9uIChlcnJzLCBlcnIpIHsgcmV0dXJuIGVycnMuY29uY2F0KChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yXzEuVW5zdWJzY3JpcHRpb25FcnJvcikgPyBlcnIuZXJyb3JzIDogZXJyKTsgfSwgW10pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3Vic2NyaXB0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBiaW5kQ2FsbGJhY2tfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvYmluZENhbGxiYWNrJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5iaW5kQ2FsbGJhY2sgPSBiaW5kQ2FsbGJhY2tfMS5iaW5kQ2FsbGJhY2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iaW5kQ2FsbGJhY2suanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGJpbmROb2RlQ2FsbGJhY2tfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjaycpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUuYmluZE5vZGVDYWxsYmFjayA9IGJpbmROb2RlQ2FsbGJhY2tfMS5iaW5kTm9kZUNhbGxiYWNrO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZE5vZGVDYWxsYmFjay5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgY29tYmluZUxhdGVzdF8xID0gcmVxdWlyZSgnLi4vLi4vb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5jb21iaW5lTGF0ZXN0ID0gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvY29uY2F0Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5jb25jYXQgPSBjb25jYXRfMS5jb25jYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGRlZmVyXzEgPSByZXF1aXJlKCcuLi8uLi9vYnNlcnZhYmxlL2RlZmVyJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5kZWZlciA9IGRlZmVyXzEuZGVmZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgYWpheF8xID0gcmVxdWlyZSgnLi4vLi4vLi4vb2JzZXJ2YWJsZS9kb20vYWpheCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUuYWpheCA9IGFqYXhfMS5hamF4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWpheC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgd2ViU29ja2V0XzEgPSByZXF1aXJlKCcuLi8uLi8uLi9vYnNlcnZhYmxlL2RvbS93ZWJTb2NrZXQnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLndlYlNvY2tldCA9IHdlYlNvY2tldF8xLndlYlNvY2tldDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYlNvY2tldC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZW1wdHlfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvZW1wdHknKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLmVtcHR5ID0gZW1wdHlfMS5lbXB0eTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBmb3JrSm9pbl8xID0gcmVxdWlyZSgnLi4vLi4vb2JzZXJ2YWJsZS9mb3JrSm9pbicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUuZm9ya0pvaW4gPSBmb3JrSm9pbl8xLmZvcmtKb2luO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ya0pvaW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGZyb21fMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvZnJvbScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUuZnJvbSA9IGZyb21fMS5mcm9tO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZnJvbUV2ZW50XzEgPSByZXF1aXJlKCcuLi8uLi9vYnNlcnZhYmxlL2Zyb21FdmVudCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUuZnJvbUV2ZW50ID0gZnJvbUV2ZW50XzEuZnJvbUV2ZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBmcm9tRXZlbnRQYXR0ZXJuXzEgPSByZXF1aXJlKCcuLi8uLi9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4nKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLmZyb21FdmVudFBhdHRlcm4gPSBmcm9tRXZlbnRQYXR0ZXJuXzEuZnJvbUV2ZW50UGF0dGVybjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21FdmVudFBhdHRlcm4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGZyb21Qcm9taXNlXzEgPSByZXF1aXJlKCcuLi8uLi9vYnNlcnZhYmxlL2Zyb21Qcm9taXNlJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5mcm9tUHJvbWlzZSA9IGZyb21Qcm9taXNlXzEuZnJvbVByb21pc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tUHJvbWlzZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZ2VuZXJhdGVfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvZ2VuZXJhdGUnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLmdlbmVyYXRlID0gZ2VuZXJhdGVfMS5nZW5lcmF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdlbmVyYXRlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBpZl8xID0gcmVxdWlyZSgnLi4vLi4vb2JzZXJ2YWJsZS9pZicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUuaWYgPSBpZl8xLl9pZjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlmLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBpbnRlcnZhbF8xID0gcmVxdWlyZSgnLi4vLi4vb2JzZXJ2YWJsZS9pbnRlcnZhbCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUuaW50ZXJ2YWwgPSBpbnRlcnZhbF8xLmludGVydmFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJ2YWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIG1lcmdlXzEgPSByZXF1aXJlKCcuLi8uLi9vYnNlcnZhYmxlL21lcmdlJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5tZXJnZSA9IG1lcmdlXzEubWVyZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgbmV2ZXJfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvbmV2ZXInKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLm5ldmVyID0gbmV2ZXJfMS5uZXZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5ldmVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBvZl8xID0gcmVxdWlyZSgnLi4vLi4vb2JzZXJ2YWJsZS9vZicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUub2YgPSBvZl8xLm9mO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIG9uRXJyb3JSZXN1bWVOZXh0XzEgPSByZXF1aXJlKCcuLi8uLi9vYnNlcnZhYmxlL29uRXJyb3JSZXN1bWVOZXh0Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5vbkVycm9yUmVzdW1lTmV4dCA9IG9uRXJyb3JSZXN1bWVOZXh0XzEub25FcnJvclJlc3VtZU5leHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkVycm9yUmVzdW1lTmV4dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgcGFpcnNfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvcGFpcnMnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnBhaXJzID0gcGFpcnNfMS5wYWlycztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhaXJzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciByYWNlXzEgPSByZXF1aXJlKCcuLi8uLi9vYnNlcnZhYmxlL3JhY2UnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnJhY2UgPSByYWNlXzEucmFjZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhY2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHJhbmdlXzEgPSByZXF1aXJlKCcuLi8uLi9vYnNlcnZhYmxlL3JhbmdlJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5yYW5nZSA9IHJhbmdlXzEucmFuZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYW5nZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgdGhyb3dfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvdGhyb3cnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnRocm93ID0gdGhyb3dfMS5fdGhyb3c7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgdGltZXJfMSA9IHJlcXVpcmUoJy4uLy4uL29ic2VydmFibGUvdGltZXInKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnRpbWVyID0gdGltZXJfMS50aW1lcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB1c2luZ18xID0gcmVxdWlyZSgnLi4vLi4vb2JzZXJ2YWJsZS91c2luZycpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUudXNpbmcgPSB1c2luZ18xLnVzaW5nO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNpbmcuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHppcF8xID0gcmVxdWlyZSgnLi4vLi4vb2JzZXJ2YWJsZS96aXAnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnppcCA9IHppcF8xLnppcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgYXVkaXRfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2F1ZGl0Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuYXVkaXQgPSBhdWRpdF8xLmF1ZGl0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVkaXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGF1ZGl0VGltZV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvYXVkaXRUaW1lJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuYXVkaXRUaW1lID0gYXVkaXRUaW1lXzEuYXVkaXRUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVkaXRUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBidWZmZXJfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2J1ZmZlcicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmJ1ZmZlciA9IGJ1ZmZlcl8xLmJ1ZmZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgYnVmZmVyQ291bnRfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2J1ZmZlckNvdW50Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuYnVmZmVyQ291bnQgPSBidWZmZXJDb3VudF8xLmJ1ZmZlckNvdW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyQ291bnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGJ1ZmZlclRpbWVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2J1ZmZlclRpbWUnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5idWZmZXJUaW1lID0gYnVmZmVyVGltZV8xLmJ1ZmZlclRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBidWZmZXJUb2dnbGVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2J1ZmZlclRvZ2dsZScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmJ1ZmZlclRvZ2dsZSA9IGJ1ZmZlclRvZ2dsZV8xLmJ1ZmZlclRvZ2dsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlclRvZ2dsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgYnVmZmVyV2hlbl8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvYnVmZmVyV2hlbicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmJ1ZmZlcldoZW4gPSBidWZmZXJXaGVuXzEuYnVmZmVyV2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlcldoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGNhdGNoXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9jYXRjaCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmNhdGNoID0gY2F0Y2hfMS5fY2F0Y2g7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuX2NhdGNoID0gY2F0Y2hfMS5fY2F0Y2g7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYXRjaC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgY29tYmluZUFsbF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvY29tYmluZUFsbCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmNvbWJpbmVBbGwgPSBjb21iaW5lQWxsXzEuY29tYmluZUFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGNvbWJpbmVMYXRlc3RfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2NvbWJpbmVMYXRlc3QnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5jb21iaW5lTGF0ZXN0ID0gY29tYmluZUxhdGVzdF8xLmNvbWJpbmVMYXRlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2NvbmNhdCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmNvbmNhdCA9IGNvbmNhdF8xLmNvbmNhdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgY29uY2F0QWxsXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9jb25jYXRBbGwnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5jb25jYXRBbGwgPSBjb25jYXRBbGxfMS5jb25jYXRBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGNvbmNhdE1hcF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvY29uY2F0TWFwJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuY29uY2F0TWFwID0gY29uY2F0TWFwXzEuY29uY2F0TWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0TWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBjb25jYXRNYXBUb18xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvY29uY2F0TWFwVG8nKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5jb25jYXRNYXBUbyA9IGNvbmNhdE1hcFRvXzEuY29uY2F0TWFwVG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRNYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgY291bnRfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2NvdW50Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuY291bnQgPSBjb3VudF8xLmNvdW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y291bnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGRlYm91bmNlXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9kZWJvdW5jZScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmRlYm91bmNlID0gZGVib3VuY2VfMS5kZWJvdW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYm91bmNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBkZWJvdW5jZVRpbWVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2RlYm91bmNlVGltZScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmRlYm91bmNlVGltZSA9IGRlYm91bmNlVGltZV8xLmRlYm91bmNlVGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYm91bmNlVGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2RlZmF1bHRJZkVtcHR5Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuZGVmYXVsdElmRW1wdHkgPSBkZWZhdWx0SWZFbXB0eV8xLmRlZmF1bHRJZkVtcHR5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmYXVsdElmRW1wdHkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGRlbGF5XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9kZWxheScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmRlbGF5ID0gZGVsYXlfMS5kZWxheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBkZWxheVdoZW5fMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2RlbGF5V2hlbicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmRlbGF5V2hlbiA9IGRlbGF5V2hlbl8xLmRlbGF5V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZGVtYXRlcmlhbGl6ZV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvZGVtYXRlcmlhbGl6ZScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmRlbWF0ZXJpYWxpemUgPSBkZW1hdGVyaWFsaXplXzEuZGVtYXRlcmlhbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbWF0ZXJpYWxpemUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGRpc3RpbmN0XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9kaXN0aW5jdCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmRpc3RpbmN0ID0gZGlzdGluY3RfMS5kaXN0aW5jdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc3RpbmN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBkaXN0aW5jdFVudGlsQ2hhbmdlZF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvZGlzdGluY3RVbnRpbENoYW5nZWQnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5kaXN0aW5jdFVudGlsQ2hhbmdlZCA9IGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEuZGlzdGluY3RVbnRpbENoYW5nZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdFVudGlsQ2hhbmdlZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuZGlzdGluY3RVbnRpbEtleUNoYW5nZWQgPSBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZF8xLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3RVbnRpbEtleUNoYW5nZWQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGRvXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9kbycpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmRvID0gZG9fMS5fZG87XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuX2RvID0gZG9fMS5fZG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZWxlbWVudEF0XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9lbGVtZW50QXQnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5lbGVtZW50QXQgPSBlbGVtZW50QXRfMS5lbGVtZW50QXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbGVtZW50QXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGV2ZXJ5XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9ldmVyeScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmV2ZXJ5ID0gZXZlcnlfMS5ldmVyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZXJ5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBleGhhdXN0XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9leGhhdXN0Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuZXhoYXVzdCA9IGV4aGF1c3RfMS5leGhhdXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhoYXVzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZXhoYXVzdE1hcF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvZXhoYXVzdE1hcCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmV4aGF1c3RNYXAgPSBleGhhdXN0TWFwXzEuZXhoYXVzdE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4aGF1c3RNYXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGV4cGFuZF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvZXhwYW5kJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuZXhwYW5kID0gZXhwYW5kXzEuZXhwYW5kO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwYW5kLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBmaWx0ZXJfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2ZpbHRlcicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmZpbHRlciA9IGZpbHRlcl8xLmZpbHRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbHRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZmluYWxseV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvZmluYWxseScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmZpbmFsbHkgPSBmaW5hbGx5XzEuX2ZpbmFsbHk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuX2ZpbmFsbHkgPSBmaW5hbGx5XzEuX2ZpbmFsbHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5hbGx5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBmaW5kXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9maW5kJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuZmluZCA9IGZpbmRfMS5maW5kO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgZmluZEluZGV4XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9maW5kSW5kZXgnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5maW5kSW5kZXggPSBmaW5kSW5kZXhfMS5maW5kSW5kZXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5kSW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGZpcnN0XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9maXJzdCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLmZpcnN0ID0gZmlyc3RfMS5maXJzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBncm91cEJ5XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9ncm91cEJ5Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuZ3JvdXBCeSA9IGdyb3VwQnlfMS5ncm91cEJ5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JvdXBCeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgaWdub3JlRWxlbWVudHNfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2lnbm9yZUVsZW1lbnRzJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuaWdub3JlRWxlbWVudHMgPSBpZ25vcmVFbGVtZW50c18xLmlnbm9yZUVsZW1lbnRzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWdub3JlRWxlbWVudHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIGlzRW1wdHlfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL2lzRW1wdHknKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5pc0VtcHR5ID0gaXNFbXB0eV8xLmlzRW1wdHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0VtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBsYXN0XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9sYXN0Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUubGFzdCA9IGxhc3RfMS5sYXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgbGV0XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9sZXQnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5sZXQgPSBsZXRfMS5sZXRQcm90bztcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5sZXRCaW5kID0gbGV0XzEubGV0UHJvdG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sZXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIG1hcF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvbWFwJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUubWFwID0gbWFwXzEubWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBtYXBUb18xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvbWFwVG8nKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5tYXBUbyA9IG1hcFRvXzEubWFwVG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgbWF0ZXJpYWxpemVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL21hdGVyaWFsaXplJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUubWF0ZXJpYWxpemUgPSBtYXRlcmlhbGl6ZV8xLm1hdGVyaWFsaXplO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWF0ZXJpYWxpemUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIG1heF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvbWF4Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUubWF4ID0gbWF4XzEubWF4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWF4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBtZXJnZV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvbWVyZ2UnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5tZXJnZSA9IG1lcmdlXzEubWVyZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgbWVyZ2VBbGxfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL21lcmdlQWxsJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUubWVyZ2VBbGwgPSBtZXJnZUFsbF8xLm1lcmdlQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9tZXJnZU1hcCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLm1lcmdlTWFwID0gbWVyZ2VNYXBfMS5tZXJnZU1hcDtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5mbGF0TWFwID0gbWVyZ2VNYXBfMS5tZXJnZU1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlTWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBtZXJnZU1hcFRvXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9tZXJnZU1hcFRvJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuZmxhdE1hcFRvID0gbWVyZ2VNYXBUb18xLm1lcmdlTWFwVG87XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUubWVyZ2VNYXBUbyA9IG1lcmdlTWFwVG9fMS5tZXJnZU1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VNYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgbWVyZ2VTY2FuXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9tZXJnZVNjYW4nKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5tZXJnZVNjYW4gPSBtZXJnZVNjYW5fMS5tZXJnZVNjYW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZVNjYW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIG1pbl8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvbWluJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUubWluID0gbWluXzEubWluO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWluLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL211bHRpY2FzdCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLm11bHRpY2FzdCA9IG11bHRpY2FzdF8xLm11bHRpY2FzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11bHRpY2FzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgb2JzZXJ2ZU9uXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9vYnNlcnZlT24nKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5vYnNlcnZlT24gPSBvYnNlcnZlT25fMS5vYnNlcnZlT247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYnNlcnZlT24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIG9uRXJyb3JSZXN1bWVOZXh0XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9vbkVycm9yUmVzdW1lTmV4dCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLm9uRXJyb3JSZXN1bWVOZXh0ID0gb25FcnJvclJlc3VtZU5leHRfMS5vbkVycm9yUmVzdW1lTmV4dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uRXJyb3JSZXN1bWVOZXh0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBwYWlyd2lzZV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvcGFpcndpc2UnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5wYWlyd2lzZSA9IHBhaXJ3aXNlXzEucGFpcndpc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWlyd2lzZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgcGFydGl0aW9uXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9wYXJ0aXRpb24nKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5wYXJ0aXRpb24gPSBwYXJ0aXRpb25fMS5wYXJ0aXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJ0aXRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHBsdWNrXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9wbHVjaycpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnBsdWNrID0gcGx1Y2tfMS5wbHVjaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWNrLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBwdWJsaXNoXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9wdWJsaXNoJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUucHVibGlzaCA9IHB1Ymxpc2hfMS5wdWJsaXNoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgcHVibGlzaEJlaGF2aW9yXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9wdWJsaXNoQmVoYXZpb3InKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5wdWJsaXNoQmVoYXZpb3IgPSBwdWJsaXNoQmVoYXZpb3JfMS5wdWJsaXNoQmVoYXZpb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoQmVoYXZpb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHB1Ymxpc2hMYXN0XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9wdWJsaXNoTGFzdCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnB1Ymxpc2hMYXN0ID0gcHVibGlzaExhc3RfMS5wdWJsaXNoTGFzdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hMYXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBwdWJsaXNoUmVwbGF5XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9wdWJsaXNoUmVwbGF5Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUucHVibGlzaFJlcGxheSA9IHB1Ymxpc2hSZXBsYXlfMS5wdWJsaXNoUmVwbGF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaFJlcGxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgcmFjZV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvcmFjZScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnJhY2UgPSByYWNlXzEucmFjZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhY2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvcmVkdWNlJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUucmVkdWNlID0gcmVkdWNlXzEucmVkdWNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdWNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciByZXBlYXRfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3JlcGVhdCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnJlcGVhdCA9IHJlcGVhdF8xLnJlcGVhdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgcmVwZWF0V2hlbl8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvcmVwZWF0V2hlbicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnJlcGVhdFdoZW4gPSByZXBlYXRXaGVuXzEucmVwZWF0V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdFdoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHJldHJ5XzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9yZXRyeScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnJldHJ5ID0gcmV0cnlfMS5yZXRyeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciByZXRyeVdoZW5fMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3JldHJ5V2hlbicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnJldHJ5V2hlbiA9IHJldHJ5V2hlbl8xLnJldHJ5V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgc2FtcGxlXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9zYW1wbGUnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5zYW1wbGUgPSBzYW1wbGVfMS5zYW1wbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW1wbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHNhbXBsZVRpbWVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3NhbXBsZVRpbWUnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5zYW1wbGVUaW1lID0gc2FtcGxlVGltZV8xLnNhbXBsZVRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW1wbGVUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBzY2FuXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9zY2FuJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuc2NhbiA9IHNjYW5fMS5zY2FuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2Nhbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgc2VxdWVuY2VFcXVhbF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3Ivc2VxdWVuY2VFcXVhbCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnNlcXVlbmNlRXF1YWwgPSBzZXF1ZW5jZUVxdWFsXzEuc2VxdWVuY2VFcXVhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcXVlbmNlRXF1YWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHNoYXJlXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9zaGFyZScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnNoYXJlID0gc2hhcmVfMS5zaGFyZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNoYXJlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBzaGFyZVJlcGxheV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3Ivc2hhcmVSZXBsYXknKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5zaGFyZVJlcGxheSA9IHNoYXJlUmVwbGF5XzEuc2hhcmVSZXBsYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZVJlcGxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgc2luZ2xlXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9zaW5nbGUnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5zaW5nbGUgPSBzaW5nbGVfMS5zaW5nbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaW5nbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHNraXBfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3NraXAnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5za2lwID0gc2tpcF8xLnNraXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBza2lwTGFzdF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3Ivc2tpcExhc3QnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5za2lwTGFzdCA9IHNraXBMYXN0XzEuc2tpcExhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwTGFzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgc2tpcFVudGlsXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9za2lwVW50aWwnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5za2lwVW50aWwgPSBza2lwVW50aWxfMS5za2lwVW50aWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwVW50aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHNraXBXaGlsZV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3Ivc2tpcFdoaWxlJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuc2tpcFdoaWxlID0gc2tpcFdoaWxlXzEuc2tpcFdoaWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcFdoaWxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBzdGFydFdpdGhfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3N0YXJ0V2l0aCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnN0YXJ0V2l0aCA9IHN0YXJ0V2l0aF8xLnN0YXJ0V2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXJ0V2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgc3Vic2NyaWJlT25fMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3N1YnNjcmliZU9uJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlT24gPSBzdWJzY3JpYmVPbl8xLnN1YnNjcmliZU9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NyaWJlT24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHN3aXRjaF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3Ivc3dpdGNoJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3dpdGNoID0gc3dpdGNoXzEuX3N3aXRjaDtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5fc3dpdGNoID0gc3dpdGNoXzEuX3N3aXRjaDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgc3dpdGNoTWFwXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9zd2l0Y2hNYXAnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS5zd2l0Y2hNYXAgPSBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hNYXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHN3aXRjaE1hcFRvXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci9zd2l0Y2hNYXBUbycpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnN3aXRjaE1hcFRvID0gc3dpdGNoTWFwVG9fMS5zd2l0Y2hNYXBUbztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaE1hcFRvLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB0YWtlXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci90YWtlJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUudGFrZSA9IHRha2VfMS50YWtlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgdGFrZUxhc3RfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3Rha2VMYXN0Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUudGFrZUxhc3QgPSB0YWtlTGFzdF8xLnRha2VMYXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZUxhc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHRha2VVbnRpbF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvdGFrZVVudGlsJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUudGFrZVVudGlsID0gdGFrZVVudGlsXzEudGFrZVVudGlsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZVVudGlsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB0YWtlV2hpbGVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3Rha2VXaGlsZScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnRha2VXaGlsZSA9IHRha2VXaGlsZV8xLnRha2VXaGlsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2VXaGlsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgdGhyb3R0bGVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3Rocm90dGxlJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUudGhyb3R0bGUgPSB0aHJvdHRsZV8xLnRocm90dGxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3R0bGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHRocm90dGxlVGltZV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvdGhyb3R0bGVUaW1lJyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUudGhyb3R0bGVUaW1lID0gdGhyb3R0bGVUaW1lXzEudGhyb3R0bGVUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3R0bGVUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB0aW1lSW50ZXJ2YWxfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3RpbWVJbnRlcnZhbCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnRpbWVJbnRlcnZhbCA9IHRpbWVJbnRlcnZhbF8xLnRpbWVJbnRlcnZhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVJbnRlcnZhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgdGltZW91dF8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvdGltZW91dCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnRpbWVvdXQgPSB0aW1lb3V0XzEudGltZW91dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVvdXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHRpbWVvdXRXaXRoXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci90aW1lb3V0V2l0aCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnRpbWVvdXRXaXRoID0gdGltZW91dFdpdGhfMS50aW1lb3V0V2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVvdXRXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB0aW1lc3RhbXBfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3RpbWVzdGFtcCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnRpbWVzdGFtcCA9IHRpbWVzdGFtcF8xLnRpbWVzdGFtcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVzdGFtcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgdG9BcnJheV8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3IvdG9BcnJheScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnRvQXJyYXkgPSB0b0FycmF5XzEudG9BcnJheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvQXJyYXkuanMubWFwIiwiLy8gSEFDSzogZG9lcyBub3RoaW5nLCBiZWNhdXNlIGB0b1Byb21pc2VgIG5vdyBsaXZlcyBvbiB0aGUgYE9ic2VydmFibGVgIGl0c2VsZi5cbi8vIGxlYXZpbmcgdGhpcyBtb2R1bGUgaGVyZSB0byBwcmV2ZW50IGJyZWFrYWdlLlxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9Qcm9taXNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB3aW5kb3dfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3dpbmRvdycpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLndpbmRvdyA9IHdpbmRvd18xLndpbmRvdztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvdy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgd2luZG93Q291bnRfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3dpbmRvd0NvdW50Jyk7XG5PYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZS5wcm90b3R5cGUud2luZG93Q291bnQgPSB3aW5kb3dDb3VudF8xLndpbmRvd0NvdW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93Q291bnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHdpbmRvd1RpbWVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3dpbmRvd1RpbWUnKTtcbk9ic2VydmFibGVfMS5PYnNlcnZhYmxlLnByb3RvdHlwZS53aW5kb3dUaW1lID0gd2luZG93VGltZV8xLndpbmRvd1RpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB3aW5kb3dUb2dnbGVfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3dpbmRvd1RvZ2dsZScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLndpbmRvd1RvZ2dsZSA9IHdpbmRvd1RvZ2dsZV8xLndpbmRvd1RvZ2dsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvd1RvZ2dsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgd2luZG93V2hlbl8xID0gcmVxdWlyZSgnLi4vLi4vb3BlcmF0b3Ivd2luZG93V2hlbicpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLndpbmRvd1doZW4gPSB3aW5kb3dXaGVuXzEud2luZG93V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvd1doZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vLi4vT2JzZXJ2YWJsZScpO1xudmFyIHdpdGhMYXRlc3RGcm9tXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvci93aXRoTGF0ZXN0RnJvbScpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLndpdGhMYXRlc3RGcm9tID0gd2l0aExhdGVzdEZyb21fMS53aXRoTGF0ZXN0RnJvbTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpdGhMYXRlc3RGcm9tLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB6aXBfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3ppcCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnppcCA9IHppcF8xLnppcFByb3RvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciB6aXBBbGxfMSA9IHJlcXVpcmUoJy4uLy4uL29wZXJhdG9yL3ppcEFsbCcpO1xuT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUucHJvdG90eXBlLnppcEFsbCA9IHppcEFsbF8xLnppcEFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcEFsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBTY2FsYXJPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL1NjYWxhck9ic2VydmFibGUnKTtcbnZhciBFbXB0eU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vRW1wdHlPYnNlcnZhYmxlJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqIEBoaWRlIHRydWVcbiAqL1xudmFyIEFycmF5TGlrZU9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBcnJheUxpa2VPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFycmF5TGlrZU9ic2VydmFibGUoYXJyYXlMaWtlLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuYXJyYXlMaWtlID0gYXJyYXlMaWtlO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgaWYgKCFzY2hlZHVsZXIgJiYgYXJyYXlMaWtlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5faXNTY2FsYXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGFycmF5TGlrZVswXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBBcnJheUxpa2VPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChhcnJheUxpa2UsIHNjaGVkdWxlcikge1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFbXB0eU9ic2VydmFibGVfMS5FbXB0eU9ic2VydmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2NhbGFyT2JzZXJ2YWJsZV8xLlNjYWxhck9ic2VydmFibGUoYXJyYXlMaWtlWzBdLCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpa2VPYnNlcnZhYmxlKGFycmF5TGlrZSwgc2NoZWR1bGVyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXJyYXlMaWtlT2JzZXJ2YWJsZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgYXJyYXlMaWtlID0gc3RhdGUuYXJyYXlMaWtlLCBpbmRleCA9IHN0YXRlLmluZGV4LCBsZW5ndGggPSBzdGF0ZS5sZW5ndGgsIHN1YnNjcmliZXIgPSBzdGF0ZS5zdWJzY3JpYmVyO1xuICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5TGlrZVtpbmRleF0pO1xuICAgICAgICBzdGF0ZS5pbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZShzdGF0ZSk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gQXJyYXlMaWtlT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGFycmF5TGlrZSA9IF9hLmFycmF5TGlrZSwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICB2YXIgbGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcbiAgICAgICAgaWYgKHNjaGVkdWxlcikge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShBcnJheUxpa2VPYnNlcnZhYmxlLmRpc3BhdGNoLCAwLCB7XG4gICAgICAgICAgICAgICAgYXJyYXlMaWtlOiBhcnJheUxpa2UsIGluZGV4OiBpbmRleCwgbGVuZ3RoOiBsZW5ndGgsIHN1YnNjcmliZXI6IHN1YnNjcmliZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlMaWtlW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFycmF5TGlrZU9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkFycmF5TGlrZU9ic2VydmFibGUgPSBBcnJheUxpa2VPYnNlcnZhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXJyYXlMaWtlT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBTY2FsYXJPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL1NjYWxhck9ic2VydmFibGUnKTtcbnZhciBFbXB0eU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vRW1wdHlPYnNlcnZhYmxlJyk7XG52YXIgaXNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNTY2hlZHVsZXInKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgQXJyYXlPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXJyYXlPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFycmF5T2JzZXJ2YWJsZShhcnJheSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBpZiAoIXNjaGVkdWxlciAmJiBhcnJheS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzU2NhbGFyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBhcnJheVswXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBBcnJheU9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKGFycmF5LCBzY2hlZHVsZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheU9ic2VydmFibGUoYXJyYXksIHNjaGVkdWxlcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBzb21lIHZhbHVlcyB5b3Ugc3BlY2lmeSBhcyBhcmd1bWVudHMsXG4gICAgICogaW1tZWRpYXRlbHkgb25lIGFmdGVyIHRoZSBvdGhlciwgYW5kIHRoZW4gZW1pdHMgYSBjb21wbGV0ZSBub3RpZmljYXRpb24uXG4gICAgICpcbiAgICAgKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RW1pdHMgdGhlIGFyZ3VtZW50cyB5b3UgcHJvdmlkZSwgdGhlbiBjb21wbGV0ZXMuXG4gICAgICogPC9zcGFuPlxuICAgICAqXG4gICAgICogPGltZyBzcmM9XCIuL2ltZy9vZi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAgICAgKlxuICAgICAqIFRoaXMgc3RhdGljIG9wZXJhdG9yIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYSBzaW1wbGUgT2JzZXJ2YWJsZSB0aGF0IG9ubHlcbiAgICAgKiBlbWl0cyB0aGUgYXJndW1lbnRzIGdpdmVuLCBhbmQgdGhlIGNvbXBsZXRlIG5vdGlmaWNhdGlvbiB0aGVyZWFmdGVyLiBJdCBjYW5cbiAgICAgKiBiZSB1c2VkIGZvciBjb21wb3Npbmcgd2l0aCBvdGhlciBPYnNlcnZhYmxlcywgc3VjaCBhcyB3aXRoIHtAbGluayBjb25jYXR9LlxuICAgICAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgYSBgbnVsbGAgSVNjaGVkdWxlciwgd2hpY2ggbWVhbnMgdGhlIGBuZXh0YFxuICAgICAqIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgc3luY2hyb25vdXNseSwgYWx0aG91Z2ggd2l0aCBhIGRpZmZlcmVudCBJU2NoZWR1bGVyXG4gICAgICogaXQgaXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIHdoZW4gdGhvc2Ugbm90aWZpY2F0aW9ucyB3aWxsIGJlIGRlbGl2ZXJlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgMTAsIDIwLCAzMCwgdGhlbiAnYScsICdiJywgJ2MnLCB0aGVuIHN0YXJ0IHRpY2tpbmcgZXZlcnkgc2Vjb25kLjwvY2FwdGlvbj5cbiAgICAgKiB2YXIgbnVtYmVycyA9IFJ4Lk9ic2VydmFibGUub2YoMTAsIDIwLCAzMCk7XG4gICAgICogdmFyIGxldHRlcnMgPSBSeC5PYnNlcnZhYmxlLm9mKCdhJywgJ2InLCAnYycpO1xuICAgICAqIHZhciBpbnRlcnZhbCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gICAgICogdmFyIHJlc3VsdCA9IG51bWJlcnMuY29uY2F0KGxldHRlcnMpLmNvbmNhdChpbnRlcnZhbCk7XG4gICAgICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGNyZWF0ZX1cbiAgICAgKiBAc2VlIHtAbGluayBlbXB0eX1cbiAgICAgKiBAc2VlIHtAbGluayBuZXZlcn1cbiAgICAgKiBAc2VlIHtAbGluayB0aHJvd31cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Li4uVH0gdmFsdWVzIEFyZ3VtZW50cyB0aGF0IHJlcHJlc2VudCBgbmV4dGAgdmFsdWVzIHRvIGJlIGVtaXR0ZWQuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXJdIEEge0BsaW5rIElTY2hlZHVsZXJ9IHRvIHVzZSBmb3Igc2NoZWR1bGluZ1xuICAgICAqIHRoZSBlbWlzc2lvbnMgb2YgdGhlIGBuZXh0YCBub3RpZmljYXRpb25zLlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBlYWNoIGdpdmVuIGlucHV0IHZhbHVlLlxuICAgICAqIEBzdGF0aWMgdHJ1ZVxuICAgICAqIEBuYW1lIG9mXG4gICAgICogQG93bmVyIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBBcnJheU9ic2VydmFibGUub2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJyYXlbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihzY2hlZHVsZXIpKSB7XG4gICAgICAgICAgICBhcnJheS5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlPYnNlcnZhYmxlKGFycmF5LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxlbiA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTY2FsYXJPYnNlcnZhYmxlXzEuU2NhbGFyT2JzZXJ2YWJsZShhcnJheVswXSwgc2NoZWR1bGVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRW1wdHlPYnNlcnZhYmxlXzEuRW1wdHlPYnNlcnZhYmxlKHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFycmF5T2JzZXJ2YWJsZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgYXJyYXkgPSBzdGF0ZS5hcnJheSwgaW5kZXggPSBzdGF0ZS5pbmRleCwgY291bnQgPSBzdGF0ZS5jb3VudCwgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXI7XG4gICAgICAgIGlmIChpbmRleCA+PSBjb3VudCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpbmRleF0pO1xuICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5pbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZShzdGF0ZSk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gQXJyYXlPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIGFycmF5ID0gdGhpcy5hcnJheTtcbiAgICAgICAgdmFyIGNvdW50ID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoQXJyYXlPYnNlcnZhYmxlLmRpc3BhdGNoLCAwLCB7XG4gICAgICAgICAgICAgICAgYXJyYXk6IGFycmF5LCBpbmRleDogaW5kZXgsIGNvdW50OiBjb3VudCwgc3Vic2NyaWJlcjogc3Vic2NyaWJlclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50ICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFycmF5T2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuQXJyYXlPYnNlcnZhYmxlID0gQXJyYXlPYnNlcnZhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXJyYXlPYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vT2JzZXJ2YWJsZScpO1xudmFyIHRyeUNhdGNoXzEgPSByZXF1aXJlKCcuLi91dGlsL3RyeUNhdGNoJyk7XG52YXIgZXJyb3JPYmplY3RfMSA9IHJlcXVpcmUoJy4uL3V0aWwvZXJyb3JPYmplY3QnKTtcbnZhciBBc3luY1N1YmplY3RfMSA9IHJlcXVpcmUoJy4uL0FzeW5jU3ViamVjdCcpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKiBAaGlkZSB0cnVlXG4gKi9cbnZhciBCb3VuZENhbGxiYWNrT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJvdW5kQ2FsbGJhY2tPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJvdW5kQ2FsbGJhY2tPYnNlcnZhYmxlKGNhbGxiYWNrRnVuYywgc2VsZWN0b3IsIGFyZ3MsIGNvbnRleHQsIHNjaGVkdWxlcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5jYWxsYmFja0Z1bmMgPSBjYWxsYmFja0Z1bmM7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIC8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBjYWxsYmFjayBBUEkgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZS5cbiAgICAgKlxuICAgICAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5HaXZlIGl0IGEgZnVuY3Rpb24gYGZgIG9mIHR5cGUgYGYoeCwgY2FsbGJhY2spYCBhbmRcbiAgICAgKiBpdCB3aWxsIHJldHVybiBhIGZ1bmN0aW9uIGBnYCB0aGF0IHdoZW4gY2FsbGVkIGFzIGBnKHgpYCB3aWxsIG91dHB1dCBhblxuICAgICAqIE9ic2VydmFibGUuPC9zcGFuPlxuICAgICAqXG4gICAgICogYGJpbmRDYWxsYmFja2AgaXMgbm90IGFuIG9wZXJhdG9yIGJlY2F1c2UgaXRzIGlucHV0IGFuZCBvdXRwdXQgYXJlIG5vdFxuICAgICAqIE9ic2VydmFibGVzLiBUaGUgaW5wdXQgaXMgYSBmdW5jdGlvbiBgZnVuY2Agd2l0aCBzb21lIHBhcmFtZXRlcnMsIHRoZVxuICAgICAqIGxhc3QgcGFyYW1ldGVyIG11c3QgYmUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGBmdW5jYCBjYWxscyB3aGVuIGl0IGlzXG4gICAgICogZG9uZS5cbiAgICAgKlxuICAgICAqIFRoZSBvdXRwdXQgb2YgYGJpbmRDYWxsYmFja2AgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnNcbiAgICAgKiBhcyBgZnVuY2AsIGV4Y2VwdCB0aGUgbGFzdCBvbmUgKHRoZSBjYWxsYmFjaykuIFdoZW4gdGhlIG91dHB1dCBmdW5jdGlvblxuICAgICAqIGlzIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyBpdCB3aWxsIHJldHVybiBhbiBPYnNlcnZhYmxlLiBJZiBmdW5jdGlvbiBgZnVuY2BcbiAgICAgKiBjYWxscyBpdHMgY2FsbGJhY2sgd2l0aCBvbmUgYXJndW1lbnQgdGhlIE9ic2VydmFibGUgd2lsbCBlbWl0IHRoYXQgdmFsdWUuXG4gICAgICogSWYgb24gdGhlIG90aGVyIGhhbmQgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIG11bHRpcGxlIHZhbHVlcyB0aGUgcmVzdWx0aW5nXG4gICAgICogT2JzZXJ2YWJsZSB3aWxsIGVtaXQgYW4gYXJyYXkgd2l0aCBzYWlkIHZhbHVlcyBhcyBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGlucHV0IGZ1bmN0aW9uIGBmdW5jYCBpcyBub3QgY2FsbGVkXG4gICAgICogd2hlbiB0aGUgb3V0cHV0IGZ1bmN0aW9uIGlzLCBidXQgcmF0aGVyIHdoZW4gdGhlIE9ic2VydmFibGUgcmV0dXJuZWQgYnkgdGhlIG91dHB1dFxuICAgICAqIGZ1bmN0aW9uIGlzIHN1YnNjcmliZWQuIFRoaXMgbWVhbnMgaWYgYGZ1bmNgIG1ha2VzIGFuIEFKQVggcmVxdWVzdCwgdGhhdCByZXF1ZXN0XG4gICAgICogd2lsbCBiZSBtYWRlIGV2ZXJ5IHRpbWUgc29tZW9uZSBzdWJzY3JpYmVzIHRvIHRoZSByZXN1bHRpbmcgT2JzZXJ2YWJsZSwgYnV0IG5vdCBiZWZvcmUuXG4gICAgICpcbiAgICAgKiBPcHRpb25hbGx5LCBhIHNlbGVjdG9yIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgdG8gYGJpbmRPYnNlcnZhYmxlYC4gVGhlIHNlbGVjdG9yIGZ1bmN0aW9uXG4gICAgICogdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBjYWxsYmFjayBhbmQgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgYnkgdGhlIE9ic2VydmFibGUuXG4gICAgICogRXZlbiB0aG91Z2ggYnkgZGVmYXVsdCBtdWx0aXBsZSBhcmd1bWVudHMgcGFzc2VkIHRvIGNhbGxiYWNrIGFwcGVhciBpbiB0aGUgc3RyZWFtIGFzIGFuIGFycmF5XG4gICAgICogdGhlIHNlbGVjdG9yIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzIGRpcmVjdGx5LCBqdXN0IGFzIHRoZSBjYWxsYmFjayB3b3VsZC5cbiAgICAgKiBUaGlzIG1lYW5zIHlvdSBjYW4gaW1hZ2luZSB0aGUgZGVmYXVsdCBzZWxlY3RvciAod2hlbiBvbmUgaXMgbm90IHByb3ZpZGVkIGV4cGxpY2l0bHkpXG4gICAgICogYXMgYSBmdW5jdGlvbiB0aGF0IGFnZ3JlZ2F0ZXMgYWxsIGl0cyBhcmd1bWVudHMgaW50byBhbiBhcnJheSwgb3Igc2ltcGx5IHJldHVybnMgZmlyc3QgYXJndW1lbnRcbiAgICAgKiBpZiB0aGVyZSBpcyBvbmx5IG9uZS5cbiAgICAgKlxuICAgICAqIFRoZSBsYXN0IG9wdGlvbmFsIHBhcmFtZXRlciAtIHtAbGluayBTY2hlZHVsZXJ9IC0gY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGVuIHRoZSBjYWxsXG4gICAgICogdG8gYGZ1bmNgIGhhcHBlbnMgYWZ0ZXIgc29tZW9uZSBzdWJzY3JpYmVzIHRvIE9ic2VydmFibGUsIGFzIHdlbGwgYXMgd2hlbiByZXN1bHRzXG4gICAgICogcGFzc2VkIHRvIGNhbGxiYWNrIHdpbGwgYmUgZW1pdHRlZC4gQnkgZGVmYXVsdCwgdGhlIHN1YnNjcmlwdGlvbiB0byAgYW4gT2JzZXJ2YWJsZSBjYWxscyBgZnVuY2BcbiAgICAgKiBzeW5jaHJvbm91c2x5LCBidXQgdXNpbmcgYFNjaGVkdWxlci5hc3luY2AgYXMgdGhlIGxhc3QgcGFyYW1ldGVyIHdpbGwgZGVmZXIgdGhlIGNhbGwgdG8gYGZ1bmNgLFxuICAgICAqIGp1c3QgbGlrZSB3cmFwcGluZyB0aGUgY2FsbCBpbiBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgIHdvdWxkLiBJZiB5b3UgdXNlIHRoZSBhc3luYyBTY2hlZHVsZXJcbiAgICAgKiBhbmQgY2FsbCBgc3Vic2NyaWJlYCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYWxsIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXJlIGN1cnJlbnRseSBleGVjdXRpbmdcbiAgICAgKiB3aWxsIGVuZCBiZWZvcmUgYGZ1bmNgIGlzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBCeSBkZWZhdWx0IHJlc3VsdHMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBhcmUgZW1pdHRlZCBpbW1lZGlhdGVseSBhZnRlciBgZnVuY2AgaW52b2tlcyB0aGUgY2FsbGJhY2suXG4gICAgICogSW4gcGFydGljdWxhciwgaWYgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHRoZSBzdWJzY3JpcHRpb24gb2YgdGhlIHJlc3VsdGluZyBPYnNlcnZhYmxlXG4gICAgICogd2lsbCBjYWxsIHRoZSBgbmV4dGAgZnVuY3Rpb24gc3luY2hyb25vdXNseSBhcyB3ZWxsLiAgSWYgeW91IHdhbnQgdG8gZGVmZXIgdGhhdCBjYWxsLFxuICAgICAqIHlvdSBtYXkgdXNlIGBTY2hlZHVsZXIuYXN5bmNgIGp1c3QgYXMgYmVmb3JlLiAgVGhpcyBtZWFucyB0aGF0IGJ5IHVzaW5nIGBTY2hlZHVsZXIuYXN5bmNgIHlvdSBjYW5cbiAgICAgKiBlbnN1cmUgdGhhdCBgZnVuY2AgYWx3YXlzIGNhbGxzIGl0cyBjYWxsYmFjayBhc3luY2hyb25vdXNseSwgdGh1cyBhdm9pZGluZyB0ZXJyaWZ5aW5nIFphbGdvLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHRoZSBPYnNlcnZhYmxlIGNyZWF0ZWQgYnkgdGhlIG91dHB1dCBmdW5jdGlvbiB3aWxsIGFsd2F5cyBlbWl0IGEgc2luZ2xlIHZhbHVlXG4gICAgICogYW5kIHRoZW4gY29tcGxldGUgaW1tZWRpYXRlbHkuIElmIGBmdW5jYCBjYWxscyB0aGUgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXMsIHZhbHVlcyBmcm9tIHN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIHN0cmVhbS4gSWYgeW91IG5lZWQgdG8gbGlzdGVuIGZvciBtdWx0aXBsZSBjYWxscyxcbiAgICAgKiAgeW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHtAbGluayBmcm9tRXZlbnR9IG9yIHtAbGluayBmcm9tRXZlbnRQYXR0ZXJufSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogSWYgYGZ1bmNgIGRlcGVuZHMgb24gc29tZSBjb250ZXh0IChgdGhpc2AgcHJvcGVydHkpIGFuZCBpcyBub3QgYWxyZWFkeSBib3VuZCB0aGUgY29udGV4dCBvZiBgZnVuY2BcbiAgICAgKiB3aWxsIGJlIHRoZSBjb250ZXh0IHRoYXQgdGhlIG91dHB1dCBmdW5jdGlvbiBoYXMgYXQgY2FsbCB0aW1lLiBJbiBwYXJ0aWN1bGFyLCBpZiBgZnVuY2BcbiAgICAgKiBpcyBjYWxsZWQgYXMgYSBtZXRob2Qgb2Ygc29tZSBvYmplYyBhbmQgaWYgYGZ1bmNgIGlzIG5vdCBhbHJlYWR5IGJvdW5kLCBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgY29udGV4dFxuICAgICAqIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIGNvbnRleHQgb2YgdGhlIG91dHB1dCBmdW5jdGlvbiBpcyBzZXQgdG8gdGhhdCBvYmplY3QgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBpbnB1dCBmdW5jdGlvbiBjYWxscyBpdHMgY2FsbGJhY2sgaW4gdGhlIFwibm9kZSBzdHlsZVwiIChpLmUuIGZpcnN0IGFyZ3VtZW50IHRvIGNhbGxiYWNrIGlzXG4gICAgICogb3B0aW9uYWwgZXJyb3IgcGFyYW1ldGVyIHNpZ25hbGluZyB3aGV0aGVyIHRoZSBjYWxsIGZhaWxlZCBvciBub3QpLCB7QGxpbmsgYmluZE5vZGVDYWxsYmFja31cbiAgICAgKiBwcm92aWRlcyBjb252ZW5pZW50IGVycm9yIGhhbmRsaW5nIGFuZCBwcm9iYWJseSBpcyBhIGJldHRlciBjaG9pY2UuXG4gICAgICogYGJpbmRDYWxsYmFja2Agd2lsbCB0cmVhdCBzdWNoIGZ1bmN0aW9ucyB0aGUgc2FtZSBhcyBhbnkgb3RoZXIgYW5kIGVycm9yIHBhcmFtZXRlcnNcbiAgICAgKiAod2hldGhlciBwYXNzZWQgb3Igbm90KSB3aWxsIGFsd2F5cyBiZSBpbnRlcnByZXRlZCBhcyByZWd1bGFyIGNhbGxiYWNrIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db252ZXJ0IGpRdWVyeSdzIGdldEpTT04gdG8gYW4gT2JzZXJ2YWJsZSBBUEk8L2NhcHRpb24+XG4gICAgICogLy8gU3VwcG9zZSB3ZSBoYXZlIGpRdWVyeS5nZXRKU09OKCcvbXkvdXJsJywgY2FsbGJhY2spXG4gICAgICogdmFyIGdldEpTT05Bc09ic2VydmFibGUgPSBSeC5PYnNlcnZhYmxlLmJpbmRDYWxsYmFjayhqUXVlcnkuZ2V0SlNPTik7XG4gICAgICogdmFyIHJlc3VsdCA9IGdldEpTT05Bc09ic2VydmFibGUoJy9teS91cmwnKTtcbiAgICAgKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCksIGUgPT4gY29uc29sZS5lcnJvcihlKSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPlJlY2VpdmUgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHBhc3NlZCB0byBhIGNhbGxiYWNrPC9jYXB0aW9uPlxuICAgICAqIHNvbWVGdW5jdGlvbigoYSwgYiwgYykgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coYSk7IC8vIDVcbiAgICAgKiAgIGNvbnNvbGUubG9nKGIpOyAvLyAnc29tZSBzdHJpbmcnXG4gICAgICogICBjb25zb2xlLmxvZyhjKTsgLy8ge3NvbWVQcm9wZXJ0eTogJ3NvbWVWYWx1ZSd9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBjb25zdCBib3VuZFNvbWVGdW5jdGlvbiA9IFJ4Lk9ic2VydmFibGUuYmluZENhbGxiYWNrKHNvbWVGdW5jdGlvbik7XG4gICAgICogYm91bmRTb21lRnVuY3Rpb24oKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlcykgLy8gWzUsICdzb21lIHN0cmluZycsIHtzb21lUHJvcGVydHk6ICdzb21lVmFsdWUnfV1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIGJpbmRDYWxsYmFjayB3aXRoIGEgc2VsZWN0b3IgZnVuY3Rpb248L2NhcHRpb24+XG4gICAgICogc29tZUZ1bmN0aW9uKChhLCBiLCBjKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyhhKTsgLy8gJ2EnXG4gICAgICogICBjb25zb2xlLmxvZyhiKTsgLy8gJ2InXG4gICAgICogICBjb25zb2xlLmxvZyhjKTsgLy8gJ2MnXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBjb25zdCBib3VuZFNvbWVGdW5jdGlvbiA9IFJ4Lk9ic2VydmFibGUuYmluZENhbGxiYWNrKHNvbWVGdW5jdGlvbiwgKGEsIGIsIGMpID0+IGEgKyBiICsgYyk7XG4gICAgICogYm91bmRTb21lRnVuY3Rpb24oKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2codmFsdWUpIC8vICdhYmMnXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbXBhcmUgYmVoYXZpb3VyIHdpdGggYW5kIHdpdGhvdXQgYXN5bmMgU2NoZWR1bGVyPC9jYXB0aW9uPlxuICAgICAqIGZ1bmN0aW9uIGlDYWxsTXlDYWxsYmFja1N5bmNocm9ub3VzbHkoY2IpIHtcbiAgICAgKiAgIGNiKCk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgYm91bmRTeW5jRm4gPSBSeC5PYnNlcnZhYmxlLmJpbmRDYWxsYmFjayhpQ2FsbE15Q2FsbGJhY2tTeW5jaHJvbm91c2x5KTtcbiAgICAgKiBjb25zdCBib3VuZEFzeW5jRm4gPSBSeC5PYnNlcnZhYmxlLmJpbmRDYWxsYmFjayhpQ2FsbE15Q2FsbGJhY2tTeW5jaHJvbm91c2x5LCBudWxsLCBSeC5TY2hlZHVsZXIuYXN5bmMpO1xuICAgICAqXG4gICAgICogYm91bmRTeW5jRm4oKS5zdWJzY3JpYmUoKCkgPT4gY29uc29sZS5sb2coJ0kgd2FzIHN5bmMhJykpO1xuICAgICAqIGJvdW5kQXN5bmNGbigpLnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZygnSSB3YXMgYXN5bmMhJykpO1xuICAgICAqIGNvbnNvbGUubG9nKCdUaGlzIGhhcHBlbmVkLi4uJyk7XG4gICAgICpcbiAgICAgKiAvLyBMb2dzOlxuICAgICAqIC8vIEkgd2FzIHN5bmMhXG4gICAgICogLy8gVGhpcyBoYXBwZW5lZC4uLlxuICAgICAqIC8vIEkgd2FzIGFzeW5jIVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5Vc2UgYmluZENhbGxiYWNrIG9uIGFuIG9iamVjdCBtZXRob2Q8L2NhcHRpb24+XG4gICAgICogY29uc3QgYm91bmRNZXRob2QgPSBSeC5PYnNlcnZhYmxlLmJpbmRDYWxsYmFjayhzb21lT2JqZWN0Lm1ldGhvZFdpdGhDYWxsYmFjayk7XG4gICAgICogYm91bmRNZXRob2QuY2FsbChzb21lT2JqZWN0KSAvLyBtYWtlIHN1cmUgbWV0aG9kV2l0aENhbGxiYWNrIGhhcyBhY2Nlc3MgdG8gc29tZU9iamVjdFxuICAgICAqIC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGJpbmROb2RlQ2FsbGJhY2t9XG4gICAgICogQHNlZSB7QGxpbmsgZnJvbX1cbiAgICAgKiBAc2VlIHtAbGluayBmcm9tUHJvbWlzZX1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgQSBmdW5jdGlvbiB3aXRoIGEgY2FsbGJhY2sgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtzZWxlY3Rvcl0gQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgYXJndW1lbnRzIGZyb20gdGhlXG4gICAgICogY2FsbGJhY2sgYW5kIG1hcHMgdGhlbSB0byBhIHZhbHVlIHRoYXQgaXMgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXJdIFRoZSBzY2hlZHVsZXIgb24gd2hpY2ggdG8gc2NoZWR1bGUgdGhlXG4gICAgICogY2FsbGJhY2tzLlxuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKC4uLnBhcmFtczogKik6IE9ic2VydmFibGV9IEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGVcbiAgICAgKiBPYnNlcnZhYmxlIHRoYXQgZGVsaXZlcnMgdGhlIHNhbWUgdmFsdWVzIHRoZSBjYWxsYmFjayB3b3VsZCBkZWxpdmVyLlxuICAgICAqIEBzdGF0aWMgdHJ1ZVxuICAgICAqIEBuYW1lIGJpbmRDYWxsYmFja1xuICAgICAqIEBvd25lciBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgQm91bmRDYWxsYmFja09ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKGZ1bmMsIHNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgaWYgKHNlbGVjdG9yID09PSB2b2lkIDApIHsgc2VsZWN0b3IgPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJvdW5kQ2FsbGJhY2tPYnNlcnZhYmxlKGZ1bmMsIHNlbGVjdG9yLCBhcmdzLCB0aGlzLCBzY2hlZHVsZXIpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIEJvdW5kQ2FsbGJhY2tPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrRnVuYyA9IHRoaXMuY2FsbGJhY2tGdW5jO1xuICAgICAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICB2YXIgc3ViamVjdCA9IHRoaXMuc3ViamVjdDtcbiAgICAgICAgaWYgKCFzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIGlmICghc3ViamVjdCkge1xuICAgICAgICAgICAgICAgIHN1YmplY3QgPSB0aGlzLnN1YmplY3QgPSBuZXcgQXN5bmNTdWJqZWN0XzEuQXN5bmNTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyRm4oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbm5lckFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQXJnc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gaGFuZGxlckZuLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gc291cmNlLnNlbGVjdG9yLCBzdWJqZWN0ID0gc291cmNlLnN1YmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdF8xID0gdHJ5Q2F0Y2hfMS50cnlDYXRjaChzZWxlY3RvcikuYXBwbHkodGhpcywgaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRfMSA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuZXJyb3IoZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdC5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChyZXN1bHRfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KGlubmVyQXJncy5sZW5ndGggPD0gMSA/IGlubmVyQXJnc1swXSA6IGlubmVyQXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIHVzZSBuYW1lZCBmdW5jdGlvbiBpbnN0YW5jZSB0byBhdm9pZCBjbG9zdXJlLlxuICAgICAgICAgICAgICAgIGhhbmRsZXIuc291cmNlID0gdGhpcztcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2hfMS50cnlDYXRjaChjYWxsYmFja0Z1bmMpLmFwcGx5KHRoaXMuY29udGV4dCwgYXJncy5jb25jYXQoaGFuZGxlcikpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWJqZWN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoQm91bmRDYWxsYmFja09ic2VydmFibGUuZGlzcGF0Y2gsIDAsIHsgc291cmNlOiB0aGlzLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyLCBjb250ZXh0OiB0aGlzLmNvbnRleHQgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJvdW5kQ2FsbGJhY2tPYnNlcnZhYmxlLmRpc3BhdGNoID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIHNvdXJjZSA9IHN0YXRlLnNvdXJjZSwgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXIsIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0O1xuICAgICAgICB2YXIgY2FsbGJhY2tGdW5jID0gc291cmNlLmNhbGxiYWNrRnVuYywgYXJncyA9IHNvdXJjZS5hcmdzLCBzY2hlZHVsZXIgPSBzb3VyY2Uuc2NoZWR1bGVyO1xuICAgICAgICB2YXIgc3ViamVjdCA9IHNvdXJjZS5zdWJqZWN0O1xuICAgICAgICBpZiAoIXN1YmplY3QpIHtcbiAgICAgICAgICAgIHN1YmplY3QgPSBzb3VyY2Uuc3ViamVjdCA9IG5ldyBBc3luY1N1YmplY3RfMS5Bc3luY1N1YmplY3QoKTtcbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlckZuKCkge1xuICAgICAgICAgICAgICAgIHZhciBpbm5lckFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBpbm5lckFyZ3NbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBoYW5kbGVyRm4uc291cmNlO1xuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvciA9IHNvdXJjZS5zZWxlY3Rvciwgc3ViamVjdCA9IHNvdXJjZS5zdWJqZWN0O1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0XzIgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHNlbGVjdG9yKS5hcHBseSh0aGlzLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0XzIgPT09IGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaEVycm9yLCAwLCB7IGVycjogZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdC5lLCBzdWJqZWN0OiBzdWJqZWN0IH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaE5leHQsIDAsIHsgdmFsdWU6IHJlc3VsdF8yLCBzdWJqZWN0OiBzdWJqZWN0IH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaW5uZXJBcmdzLmxlbmd0aCA8PSAxID8gaW5uZXJBcmdzWzBdIDogaW5uZXJBcmdzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hOZXh0LCAwLCB7IHZhbHVlOiB2YWx1ZSwgc3ViamVjdDogc3ViamVjdCB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIHVzZSBuYW1lZCBmdW5jdGlvbiB0byBwYXNzIHZhbHVlcyBpbiB3aXRob3V0IGNsb3N1cmVcbiAgICAgICAgICAgIGhhbmRsZXIuc291cmNlID0gc291cmNlO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2goY2FsbGJhY2tGdW5jKS5hcHBseShjb250ZXh0LCBhcmdzLmNvbmNhdChoYW5kbGVyKSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuYWRkKHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBCb3VuZENhbGxiYWNrT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuQm91bmRDYWxsYmFja09ic2VydmFibGUgPSBCb3VuZENhbGxiYWNrT2JzZXJ2YWJsZTtcbmZ1bmN0aW9uIGRpc3BhdGNoTmV4dChhcmcpIHtcbiAgICB2YXIgdmFsdWUgPSBhcmcudmFsdWUsIHN1YmplY3QgPSBhcmcuc3ViamVjdDtcbiAgICBzdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIHN1YmplY3QuY29tcGxldGUoKTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IoYXJnKSB7XG4gICAgdmFyIGVyciA9IGFyZy5lcnIsIHN1YmplY3QgPSBhcmcuc3ViamVjdDtcbiAgICBzdWJqZWN0LmVycm9yKGVycik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Cb3VuZENhbGxiYWNrT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciB0cnlDYXRjaF8xID0gcmVxdWlyZSgnLi4vdXRpbC90cnlDYXRjaCcpO1xudmFyIGVycm9yT2JqZWN0XzEgPSByZXF1aXJlKCcuLi91dGlsL2Vycm9yT2JqZWN0Jyk7XG52YXIgQXN5bmNTdWJqZWN0XzEgPSByZXF1aXJlKCcuLi9Bc3luY1N1YmplY3QnKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgQm91bmROb2RlQ2FsbGJhY2tPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQm91bmROb2RlQ2FsbGJhY2tPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJvdW5kTm9kZUNhbGxiYWNrT2JzZXJ2YWJsZShjYWxsYmFja0Z1bmMsIHNlbGVjdG9yLCBhcmdzLCBjb250ZXh0LCBzY2hlZHVsZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tGdW5jID0gY2FsbGJhY2tGdW5jO1xuICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICAvKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgTm9kZS5qcy1zdHlsZSBjYWxsYmFjayBBUEkgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW5cbiAgICAgKiBPYnNlcnZhYmxlLlxuICAgICAqXG4gICAgICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MganVzdCBsaWtlIHtAbGluayBiaW5kQ2FsbGJhY2t9LCBidXQgdGhlXG4gICAgICogY2FsbGJhY2sgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdHlwZSBgY2FsbGJhY2soZXJyb3IsIHJlc3VsdClgLjwvc3Bhbj5cbiAgICAgKlxuICAgICAqIGBiaW5kTm9kZUNhbGxiYWNrYCBpcyBub3QgYW4gb3BlcmF0b3IgYmVjYXVzZSBpdHMgaW5wdXQgYW5kIG91dHB1dCBhcmUgbm90XG4gICAgICogT2JzZXJ2YWJsZXMuIFRoZSBpbnB1dCBpcyBhIGZ1bmN0aW9uIGBmdW5jYCB3aXRoIHNvbWUgcGFyYW1ldGVycywgYnV0IHRoZVxuICAgICAqIGxhc3QgcGFyYW1ldGVyIG11c3QgYmUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGBmdW5jYCBjYWxscyB3aGVuIGl0IGlzXG4gICAgICogZG9uZS4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGZvbGxvdyBOb2RlLmpzIGNvbnZlbnRpb25zLFxuICAgICAqIHdoZXJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgaXMgYW4gZXJyb3Igb2JqZWN0LCBzaWduYWxpbmdcbiAgICAgKiB3aGV0aGVyIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuIElmIHRoYXQgb2JqZWN0IGlzIHBhc3NlZCB0byBjYWxsYmFjaywgaXQgbWVhbnNcbiAgICAgKiBzb21ldGhpbmcgd2VudCB3cm9uZy5cbiAgICAgKlxuICAgICAqIFRoZSBvdXRwdXQgb2YgYGJpbmROb2RlQ2FsbGJhY2tgIGlzIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgc2FtZVxuICAgICAqIHBhcmFtZXRlcnMgYXMgYGZ1bmNgLCBleGNlcHQgdGhlIGxhc3Qgb25lICh0aGUgY2FsbGJhY2spLiBXaGVuIHRoZSBvdXRwdXRcbiAgICAgKiBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudHMsIGl0IHdpbGwgcmV0dXJuIGFuIE9ic2VydmFibGUuXG4gICAgICogSWYgYGZ1bmNgIGNhbGxzIGl0cyBjYWxsYmFjayB3aXRoIGVycm9yIHBhcmFtZXRlciBwcmVzZW50LCBPYnNlcnZhYmxlIHdpbGxcbiAgICAgKiBlcnJvciB3aXRoIHRoYXQgdmFsdWUgYXMgd2VsbC4gSWYgZXJyb3IgcGFyYW1ldGVyIGlzIG5vdCBwYXNzZWQsIE9ic2VydmFibGUgd2lsbCBlbWl0XG4gICAgICogc2Vjb25kIHBhcmFtZXRlci4gSWYgdGhlcmUgYXJlIG1vcmUgcGFyYW1ldGVycyAodGhpcmQgYW5kIHNvIG9uKSxcbiAgICAgKiBPYnNlcnZhYmxlIHdpbGwgZW1pdCBhbiBhcnJheSB3aXRoIGFsbCBhcmd1bWVudHMsIGV4Y2VwdCBmaXJzdCBlcnJvciBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsbHkgYGJpbmROb2RlQ2FsbGJhY2tgIGFjY2VwdHMgc2VsZWN0b3IgZnVuY3Rpb24sIHdoaWNoIGFsbG93cyB5b3UgdG9cbiAgICAgKiBtYWtlIHJlc3VsdGluZyBPYnNlcnZhYmxlIGVtaXQgdmFsdWUgY29tcHV0ZWQgYnkgc2VsZWN0b3IsIGluc3RlYWQgb2YgcmVndWxhclxuICAgICAqIGNhbGxiYWNrIGFyZ3VtZW50cy4gSXQgd29ya3Mgc2ltaWxhcmx5IHRvIHtAbGluayBiaW5kQ2FsbGJhY2t9IHNlbGVjdG9yLCBidXRcbiAgICAgKiBOb2RlLmpzLXN0eWxlIGVycm9yIGFyZ3VtZW50IHdpbGwgbmV2ZXIgYmUgcGFzc2VkIHRvIHRoYXQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgYGZ1bmNgIHdpbGwgbm90IGJlIGNhbGxlZCBhdCB0aGUgc2FtZSB0aW1lIG91dHB1dCBmdW5jdGlvbiBpcyxcbiAgICAgKiBidXQgcmF0aGVyIHdoZW5ldmVyIHJlc3VsdGluZyBPYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuIEJ5IGRlZmF1bHQgY2FsbCB0b1xuICAgICAqIGBmdW5jYCB3aWxsIGhhcHBlbiBzeW5jaHJvbm91c2x5IGFmdGVyIHN1YnNjcmlwdGlvbiwgYnV0IHRoYXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgKiB3aXRoIHByb3BlciB7QGxpbmsgU2NoZWR1bGVyfSBwcm92aWRlZCBhcyBvcHRpb25hbCB0aGlyZCBwYXJhbWV0ZXIuIFNjaGVkdWxlclxuICAgICAqIGNhbiBhbHNvIGNvbnRyb2wgd2hlbiB2YWx1ZXMgZnJvbSBjYWxsYmFjayB3aWxsIGJlIGVtaXR0ZWQgYnkgT2JzZXJ2YWJsZS5cbiAgICAgKiBUbyBmaW5kIG91dCBtb3JlLCBjaGVjayBvdXQgZG9jdW1lbnRhdGlvbiBmb3Ige0BsaW5rIGJpbmRDYWxsYmFja30sIHdoZXJlXG4gICAgICogU2NoZWR1bGVyIHdvcmtzIGV4YWN0bHkgdGhlIHNhbWUuXG4gICAgICpcbiAgICAgKiBBcyBpbiB7QGxpbmsgYmluZENhbGxiYWNrfSwgY29udGV4dCAoYHRoaXNgIHByb3BlcnR5KSBvZiBpbnB1dCBmdW5jdGlvbiB3aWxsIGJlIHNldCB0byBjb250ZXh0XG4gICAgICogb2YgcmV0dXJuZWQgZnVuY3Rpb24sIHdoZW4gaXQgaXMgY2FsbGVkLlxuICAgICAqXG4gICAgICogQWZ0ZXIgT2JzZXJ2YWJsZSBlbWl0cyB2YWx1ZSwgaXQgd2lsbCBjb21wbGV0ZSBpbW1lZGlhdGVseS4gVGhpcyBtZWFuc1xuICAgICAqIGV2ZW4gaWYgYGZ1bmNgIGNhbGxzIGNhbGxiYWNrIGFnYWluLCB2YWx1ZXMgZnJvbSBzZWNvbmQgYW5kIGNvbnNlY3V0aXZlXG4gICAgICogY2FsbHMgd2lsbCBuZXZlciBhcHBlYXIgb24gdGhlIHN0cmVhbS4gSWYgeW91IG5lZWQgdG8gaGFuZGxlIGZ1bmN0aW9uc1xuICAgICAqIHRoYXQgY2FsbCBjYWxsYmFja3MgbXVsdGlwbGUgdGltZXMsIGNoZWNrIG91dCB7QGxpbmsgZnJvbUV2ZW50fSBvclxuICAgICAqIHtAbGluayBmcm9tRXZlbnRQYXR0ZXJufSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGBiaW5kTm9kZUNhbGxiYWNrYCBjYW4gYmUgdXNlZCBpbiBub24tTm9kZS5qcyBlbnZpcm9ubWVudHMgYXMgd2VsbC5cbiAgICAgKiBcIk5vZGUuanMtc3R5bGVcIiBjYWxsYmFja3MgYXJlIGp1c3QgYSBjb252ZW50aW9uLCBzbyBpZiB5b3Ugd3JpdGUgZm9yXG4gICAgICogYnJvd3NlcnMgb3IgYW55IG90aGVyIGVudmlyb25tZW50IGFuZCBBUEkgeW91IHVzZSBpbXBsZW1lbnRzIHRoYXQgY2FsbGJhY2sgc3R5bGUsXG4gICAgICogYGJpbmROb2RlQ2FsbGJhY2tgIGNhbiBiZSBzYWZlbHkgdXNlZCBvbiB0aGF0IEFQSSBmdW5jdGlvbnMgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqIFJlbWVtYmVyIHRoYXQgRXJyb3Igb2JqZWN0IHBhc3NlZCB0byBjYWxsYmFjayBkb2VzIG5vdCBoYXZlIHRvIGJlIGFuIGluc3RhbmNlXG4gICAgICogb2YgSmF2YVNjcmlwdCBidWlsdC1pbiBgRXJyb3JgIG9iamVjdC4gSW4gZmFjdCwgaXQgZG9lcyBub3QgZXZlbiBoYXZlIHRvIGFuIG9iamVjdC5cbiAgICAgKiBFcnJvciBwYXJhbWV0ZXIgb2YgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW50ZXJwcmV0ZWQgYXMgXCJwcmVzZW50XCIsIHdoZW4gdmFsdWVcbiAgICAgKiBvZiB0aGF0IHBhcmFtZXRlciBpcyB0cnV0aHkuIEl0IGNvdWxkIGJlLCBmb3IgZXhhbXBsZSwgbm9uLXplcm8gbnVtYmVyLCBub24tZW1wdHlcbiAgICAgKiBzdHJpbmcgb3IgYm9vbGVhbiBgdHJ1ZWAuIEluIGFsbCBvZiB0aGVzZSBjYXNlcyByZXN1bHRpbmcgT2JzZXJ2YWJsZSB3b3VsZCBlcnJvclxuICAgICAqIHdpdGggdGhhdCB2YWx1ZS4gVGhpcyBtZWFucyB1c3VhbGx5IHJlZ3VsYXIgc3R5bGUgY2FsbGJhY2tzIHdpbGwgZmFpbCB2ZXJ5IG9mdGVuIHdoZW5cbiAgICAgKiBgYmluZE5vZGVDYWxsYmFja2AgaXMgdXNlZC4gSWYgeW91ciBPYnNlcnZhYmxlIGVycm9ycyBtdWNoIG1vcmUgb2Z0ZW4gdGhlbiB5b3VcbiAgICAgKiB3b3VsZCBleHBlY3QsIGNoZWNrIGlmIGNhbGxiYWNrIHJlYWxseSBpcyBjYWxsZWQgaW4gTm9kZS5qcy1zdHlsZSBhbmQsIGlmIG5vdCxcbiAgICAgKiBzd2l0Y2ggdG8ge0BsaW5rIGJpbmRDYWxsYmFja30gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBldmVuIGlmIGVycm9yIHBhcmFtZXRlciBpcyB0ZWNobmljYWxseSBwcmVzZW50IGluIGNhbGxiYWNrLCBidXQgaXRzIHZhbHVlXG4gICAgICogaXMgZmFsc3ksIGl0IHN0aWxsIHdvbid0IGFwcGVhciBpbiBhcnJheSBlbWl0dGVkIGJ5IE9ic2VydmFibGUgb3IgaW4gc2VsZWN0b3IgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPlJlYWQgYSBmaWxlIGZyb20gdGhlIGZpbGVzeXN0ZW0gYW5kIGdldCB0aGUgZGF0YSBhcyBhbiBPYnNlcnZhYmxlPC9jYXB0aW9uPlxuICAgICAqIGltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbiAgICAgKiB2YXIgcmVhZEZpbGVBc09ic2VydmFibGUgPSBSeC5PYnNlcnZhYmxlLmJpbmROb2RlQ2FsbGJhY2soZnMucmVhZEZpbGUpO1xuICAgICAqIHZhciByZXN1bHQgPSByZWFkRmlsZUFzT2JzZXJ2YWJsZSgnLi9yb2FkTmFtZXMudHh0JywgJ3V0ZjgnKTtcbiAgICAgKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCksIGUgPT4gY29uc29sZS5lcnJvcihlKSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPlVzZSBvbiBmdW5jdGlvbiBjYWxsaW5nIGNhbGxiYWNrIHdpdGggbXVsdGlwbGUgYXJndW1lbnRzPC9jYXB0aW9uPlxuICAgICAqIHNvbWVGdW5jdGlvbigoZXJyLCBhLCBiKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyhlcnIpOyAvLyBudWxsXG4gICAgICogICBjb25zb2xlLmxvZyhhKTsgLy8gNVxuICAgICAqICAgY29uc29sZS5sb2coYik7IC8vIFwic29tZSBzdHJpbmdcIlxuICAgICAqIH0pO1xuICAgICAqIHZhciBib3VuZFNvbWVGdW5jdGlvbiA9IFJ4Lk9ic2VydmFibGUuYmluZE5vZGVDYWxsYmFjayhzb21lRnVuY3Rpb24pO1xuICAgICAqIGJvdW5kU29tZUZ1bmN0aW9uKClcbiAgICAgKiAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTsgLy8gWzUsIFwic29tZSBzdHJpbmdcIl1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIHdpdGggc2VsZWN0b3IgZnVuY3Rpb248L2NhcHRpb24+XG4gICAgICogc29tZUZ1bmN0aW9uKChlcnIsIGEsIGIpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGVycik7IC8vIHVuZGVmaW5lZFxuICAgICAqICAgY29uc29sZS5sb2coYSk7IC8vIFwiYWJjXCJcbiAgICAgKiAgIGNvbnNvbGUubG9nKGIpOyAvLyBcIkRFRlwiXG4gICAgICogfSk7XG4gICAgICogdmFyIGJvdW5kU29tZUZ1bmN0aW9uID0gUnguT2JzZXJ2YWJsZS5iaW5kTm9kZUNhbGxiYWNrKHNvbWVGdW5jdGlvbiwgKGEsIGIpID0+IGEgKyBiKTtcbiAgICAgKiBib3VuZFNvbWVGdW5jdGlvbigpXG4gICAgICogLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyh2YWx1ZSk7IC8vIFwiYWJjREVGXCJcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIG9uIGZ1bmN0aW9uIGNhbGxpbmcgY2FsbGJhY2sgaW4gcmVndWxhciBzdHlsZTwvY2FwdGlvbj5cbiAgICAgKiBzb21lRnVuY3Rpb24oYSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyhhKTsgLy8gNVxuICAgICAqIH0pO1xuICAgICAqIHZhciBib3VuZFNvbWVGdW5jdGlvbiA9IFJ4Lk9ic2VydmFibGUuYmluZE5vZGVDYWxsYmFjayhzb21lRnVuY3Rpb24pO1xuICAgICAqIGJvdW5kU29tZUZ1bmN0aW9uKClcbiAgICAgKiAuc3Vic2NyaWJlKFxuICAgICAqICAgdmFsdWUgPT4ge30gICAgICAgICAgICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICAgKiAgIGVyciA9PiBjb25zb2xlLmxvZyhlcnIpIC8vIDVcbiAgICAgKik7XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGJpbmRDYWxsYmFja31cbiAgICAgKiBAc2VlIHtAbGluayBmcm9tfVxuICAgICAqIEBzZWUge0BsaW5rIGZyb21Qcm9taXNlfVxuICAgICAqXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuYyBGdW5jdGlvbiB3aXRoIGEgTm9kZS5qcy1zdHlsZSBjYWxsYmFjayBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW3NlbGVjdG9yXSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBhcmd1bWVudHMgZnJvbSB0aGVcbiAgICAgKiBjYWxsYmFjayBhbmQgbWFwcyB0aG9zZSB0byBhIHZhbHVlIHRvIGVtaXQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyXSBUaGUgc2NoZWR1bGVyIG9uIHdoaWNoIHRvIHNjaGVkdWxlIHRoZVxuICAgICAqIGNhbGxiYWNrcy5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbiguLi5wYXJhbXM6ICopOiBPYnNlcnZhYmxlfSBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlXG4gICAgICogT2JzZXJ2YWJsZSB0aGF0IGRlbGl2ZXJzIHRoZSBzYW1lIHZhbHVlcyB0aGUgTm9kZS5qcyBjYWxsYmFjayB3b3VsZFxuICAgICAqIGRlbGl2ZXIuXG4gICAgICogQHN0YXRpYyB0cnVlXG4gICAgICogQG5hbWUgYmluZE5vZGVDYWxsYmFja1xuICAgICAqIEBvd25lciBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgQm91bmROb2RlQ2FsbGJhY2tPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChmdW5jLCBzZWxlY3Rvciwgc2NoZWR1bGVyKSB7XG4gICAgICAgIGlmIChzZWxlY3RvciA9PT0gdm9pZCAwKSB7IHNlbGVjdG9yID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pIC0gMF0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCb3VuZE5vZGVDYWxsYmFja09ic2VydmFibGUoZnVuYywgc2VsZWN0b3IsIGFyZ3MsIHRoaXMsIHNjaGVkdWxlcik7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gQm91bmROb2RlQ2FsbGJhY2tPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrRnVuYyA9IHRoaXMuY2FsbGJhY2tGdW5jO1xuICAgICAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICB2YXIgc3ViamVjdCA9IHRoaXMuc3ViamVjdDtcbiAgICAgICAgaWYgKCFzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIGlmICghc3ViamVjdCkge1xuICAgICAgICAgICAgICAgIHN1YmplY3QgPSB0aGlzLnN1YmplY3QgPSBuZXcgQXN5bmNTdWJqZWN0XzEuQXN5bmNTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyRm4oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbm5lckFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQXJnc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gaGFuZGxlckZuLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gc291cmNlLnNlbGVjdG9yLCBzdWJqZWN0ID0gc291cmNlLnN1YmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBpbm5lckFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0XzEgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHNlbGVjdG9yKS5hcHBseSh0aGlzLCBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdF8xID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KHJlc3VsdF8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQoaW5uZXJBcmdzLmxlbmd0aCA8PSAxID8gaW5uZXJBcmdzWzBdIDogaW5uZXJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgLy8gdXNlIG5hbWVkIGZ1bmN0aW9uIGluc3RhbmNlIHRvIGF2b2lkIGNsb3N1cmUuXG4gICAgICAgICAgICAgICAgaGFuZGxlci5zb3VyY2UgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKGNhbGxiYWNrRnVuYykuYXBwbHkodGhpcy5jb250ZXh0LCBhcmdzLmNvbmNhdChoYW5kbGVyKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaCwgMCwgeyBzb3VyY2U6IHRoaXMsIHN1YnNjcmliZXI6IHN1YnNjcmliZXIsIGNvbnRleHQ6IHRoaXMuY29udGV4dCB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEJvdW5kTm9kZUNhbGxiYWNrT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuQm91bmROb2RlQ2FsbGJhY2tPYnNlcnZhYmxlID0gQm91bmROb2RlQ2FsbGJhY2tPYnNlcnZhYmxlO1xuZnVuY3Rpb24gZGlzcGF0Y2goc3RhdGUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHNvdXJjZSA9IHN0YXRlLnNvdXJjZSwgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXIsIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0O1xuICAgIC8vIFhYWDogY2FzdCB0byBgYW55YCB0byBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgZmllbGQgaW4gYHNvdXJjZWAuXG4gICAgdmFyIF9hID0gc291cmNlLCBjYWxsYmFja0Z1bmMgPSBfYS5jYWxsYmFja0Z1bmMsIGFyZ3MgPSBfYS5hcmdzLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgdmFyIHN1YmplY3QgPSBzb3VyY2Uuc3ViamVjdDtcbiAgICBpZiAoIXN1YmplY3QpIHtcbiAgICAgICAgc3ViamVjdCA9IHNvdXJjZS5zdWJqZWN0ID0gbmV3IEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdCgpO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXJGbigpIHtcbiAgICAgICAgICAgIHZhciBpbm5lckFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJBcmdzW19pIC0gMF0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGhhbmRsZXJGbi5zb3VyY2U7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBzb3VyY2Uuc2VsZWN0b3IsIHN1YmplY3QgPSBzb3VyY2Uuc3ViamVjdDtcbiAgICAgICAgICAgIHZhciBlcnIgPSBpbm5lckFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hFcnJvciwgMCwgeyBlcnI6IGVyciwgc3ViamVjdDogc3ViamVjdCB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHRfMiA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2goc2VsZWN0b3IpLmFwcGx5KHRoaXMsIGlubmVyQXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdF8yID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaEVycm9yLCAwLCB7IGVycjogZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdC5lLCBzdWJqZWN0OiBzdWJqZWN0IH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaE5leHQsIDAsIHsgdmFsdWU6IHJlc3VsdF8yLCBzdWJqZWN0OiBzdWJqZWN0IH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpbm5lckFyZ3MubGVuZ3RoIDw9IDEgPyBpbm5lckFyZ3NbMF0gOiBpbm5lckFyZ3M7XG4gICAgICAgICAgICAgICAgc2VsZi5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoTmV4dCwgMCwgeyB2YWx1ZTogdmFsdWUsIHN1YmplY3Q6IHN1YmplY3QgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyB1c2UgbmFtZWQgZnVuY3Rpb24gdG8gcGFzcyB2YWx1ZXMgaW4gd2l0aG91dCBjbG9zdXJlXG4gICAgICAgIGhhbmRsZXIuc291cmNlID0gc291cmNlO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2hfMS50cnlDYXRjaChjYWxsYmFja0Z1bmMpLmFwcGx5KGNvbnRleHQsIGFyZ3MuY29uY2F0KGhhbmRsZXIpKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgc2VsZi5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoRXJyb3IsIDAsIHsgZXJyOiBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUsIHN1YmplY3Q6IHN1YmplY3QgfSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGYuYWRkKHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoTmV4dChhcmcpIHtcbiAgICB2YXIgdmFsdWUgPSBhcmcudmFsdWUsIHN1YmplY3QgPSBhcmcuc3ViamVjdDtcbiAgICBzdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIHN1YmplY3QuY29tcGxldGUoKTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IoYXJnKSB7XG4gICAgdmFyIGVyciA9IGFyZy5lcnIsIHN1YmplY3QgPSBhcmcuc3ViamVjdDtcbiAgICBzdWJqZWN0LmVycm9yKGVycik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Cb3VuZE5vZGVDYWxsYmFja09ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKCcuLi9TdWJqZWN0Jyk7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vT2JzZXJ2YWJsZScpO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmlwdGlvbicpO1xudmFyIHJlZkNvdW50XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvcmVmQ291bnQnKTtcbi8qKlxuICogQGNsYXNzIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTxUPlxuICovXG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29ubmVjdGFibGVPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSgvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gc291cmNlLCBcbiAgICAgICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIHN1YmplY3RGYWN0b3J5KSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgdGhpcy5zdWJqZWN0RmFjdG9yeSA9IHN1YmplY3RGYWN0b3J5O1xuICAgICAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gdGhpcy5fcmVmQ291bnQgPSAwO1xuICAgICAgICB0aGlzLl9pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSB0aGlzLl9zdWJqZWN0O1xuICAgICAgICBpZiAoIXN1YmplY3QgfHwgc3ViamVjdC5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YmplY3QgPSB0aGlzLnN1YmplY3RGYWN0b3J5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmplY3Q7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjtcbiAgICAgICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbiA9IG5ldyBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uYWRkKHRoaXMuc291cmNlXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShuZXcgQ29ubmVjdGFibGVTdWJzY3JpYmVyKHRoaXMuZ2V0U3ViamVjdCgpLCB0aGlzKSkpO1xuICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5yZWZDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlZkNvdW50XzEucmVmQ291bnQoKSh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkNvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IENvbm5lY3RhYmxlT2JzZXJ2YWJsZTtcbnZhciBjb25uZWN0YWJsZVByb3RvID0gQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZTtcbmV4cG9ydHMuY29ubmVjdGFibGVPYnNlcnZhYmxlRGVzY3JpcHRvciA9IHtcbiAgICBvcGVyYXRvcjogeyB2YWx1ZTogbnVsbCB9LFxuICAgIF9yZWZDb3VudDogeyB2YWx1ZTogMCwgd3JpdGFibGU6IHRydWUgfSxcbiAgICBfc3ViamVjdDogeyB2YWx1ZTogbnVsbCwgd3JpdGFibGU6IHRydWUgfSxcbiAgICBfY29ubmVjdGlvbjogeyB2YWx1ZTogbnVsbCwgd3JpdGFibGU6IHRydWUgfSxcbiAgICBfc3Vic2NyaWJlOiB7IHZhbHVlOiBjb25uZWN0YWJsZVByb3RvLl9zdWJzY3JpYmUgfSxcbiAgICBfaXNDb21wbGV0ZTogeyB2YWx1ZTogY29ubmVjdGFibGVQcm90by5faXNDb21wbGV0ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICBnZXRTdWJqZWN0OiB7IHZhbHVlOiBjb25uZWN0YWJsZVByb3RvLmdldFN1YmplY3QgfSxcbiAgICBjb25uZWN0OiB7IHZhbHVlOiBjb25uZWN0YWJsZVByb3RvLmNvbm5lY3QgfSxcbiAgICByZWZDb3VudDogeyB2YWx1ZTogY29ubmVjdGFibGVQcm90by5yZWZDb3VudCB9XG59O1xudmFyIENvbm5lY3RhYmxlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKENvbm5lY3RhYmxlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb25uZWN0YWJsZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIGNvbm5lY3RhYmxlKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5jb25uZWN0YWJsZSA9IGNvbm5lY3RhYmxlO1xuICAgIH1cbiAgICBDb25uZWN0YWJsZVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZXJyb3IuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGFibGUuX2lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIENvbm5lY3RhYmxlU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29ubmVjdGFibGUgPSB0aGlzLmNvbm5lY3RhYmxlO1xuICAgICAgICBpZiAoY29ubmVjdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGFibGUgPSBudWxsO1xuICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBjb25uZWN0YWJsZS5fY29ubmVjdGlvbjtcbiAgICAgICAgICAgIGNvbm5lY3RhYmxlLl9yZWZDb3VudCA9IDA7XG4gICAgICAgICAgICBjb25uZWN0YWJsZS5fc3ViamVjdCA9IG51bGw7XG4gICAgICAgICAgICBjb25uZWN0YWJsZS5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbm5lY3RhYmxlU3Vic2NyaWJlcjtcbn0oU3ViamVjdF8xLlN1YmplY3RTdWJzY3JpYmVyKSk7XG52YXIgUmVmQ291bnRPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVmQ291bnRPcGVyYXRvcihjb25uZWN0YWJsZSkge1xuICAgICAgICB0aGlzLmNvbm5lY3RhYmxlID0gY29ubmVjdGFibGU7XG4gICAgfVxuICAgIFJlZkNvdW50T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHZhciBjb25uZWN0YWJsZSA9IHRoaXMuY29ubmVjdGFibGU7XG4gICAgICAgIGNvbm5lY3RhYmxlLl9yZWZDb3VudCsrO1xuICAgICAgICB2YXIgcmVmQ291bnRlciA9IG5ldyBSZWZDb3VudFN1YnNjcmliZXIoc3Vic2NyaWJlciwgY29ubmVjdGFibGUpO1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShyZWZDb3VudGVyKTtcbiAgICAgICAgaWYgKCFyZWZDb3VudGVyLmNsb3NlZCkge1xuICAgICAgICAgICAgcmVmQ291bnRlci5jb25uZWN0aW9uID0gY29ubmVjdGFibGUuY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgfTtcbiAgICByZXR1cm4gUmVmQ291bnRPcGVyYXRvcjtcbn0oKSk7XG52YXIgUmVmQ291bnRTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmVmQ291bnRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlZkNvdW50U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY29ubmVjdGFibGUpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmNvbm5lY3RhYmxlID0gY29ubmVjdGFibGU7XG4gICAgfVxuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBSZWZDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl91bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbm5lY3RhYmxlID0gdGhpcy5jb25uZWN0YWJsZTtcbiAgICAgICAgaWYgKCFjb25uZWN0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbm5lY3RhYmxlID0gbnVsbDtcbiAgICAgICAgdmFyIHJlZkNvdW50ID0gY29ubmVjdGFibGUuX3JlZkNvdW50O1xuICAgICAgICBpZiAocmVmQ291bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25uZWN0YWJsZS5fcmVmQ291bnQgPSByZWZDb3VudCAtIDE7XG4gICAgICAgIGlmIChyZWZDb3VudCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8vXG4gICAgICAgIC8vIENvbXBhcmUgdGhlIGxvY2FsIFJlZkNvdW50U3Vic2NyaWJlcidzIGNvbm5lY3Rpb24gU3Vic2NyaXB0aW9uIHRvIHRoZVxuICAgICAgICAvLyBjb25uZWN0aW9uIFN1YnNjcmlwdGlvbiBvbiB0aGUgc2hhcmVkIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS4gSW4gY2FzZXNcbiAgICAgICAgLy8gd2hlcmUgdGhlIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSBzb3VyY2Ugc3luY2hyb25vdXNseSBlbWl0cyB2YWx1ZXMsIGFuZFxuICAgICAgICAvLyB0aGUgUmVmQ291bnRTdWJzY3JpYmVyJ3MgZG93bnN0cmVhbSBPYnNlcnZlcnMgc3luY2hyb25vdXNseSB1bnN1YnNjcmliZSxcbiAgICAgICAgLy8gZXhlY3V0aW9uIGNvbnRpbnVlcyB0byBoZXJlIGJlZm9yZSB0aGUgUmVmQ291bnRPcGVyYXRvciBoYXMgYSBjaGFuY2UgdG9cbiAgICAgICAgLy8gc3VwcGx5IHRoZSBSZWZDb3VudFN1YnNjcmliZXIgd2l0aCB0aGUgc2hhcmVkIGNvbm5lY3Rpb24gU3Vic2NyaXB0aW9uLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZTpcbiAgICAgICAgLy8gYGBgXG4gICAgICAgIC8vIE9ic2VydmFibGUucmFuZ2UoMCwgMTApXG4gICAgICAgIC8vICAgLnB1Ymxpc2goKVxuICAgICAgICAvLyAgIC5yZWZDb3VudCgpXG4gICAgICAgIC8vICAgLnRha2UoNSlcbiAgICAgICAgLy8gICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIGBgYFxuICAgICAgICAvLyBJbiBvcmRlciB0byBhY2NvdW50IGZvciB0aGlzIGNhc2UsIFJlZkNvdW50U3Vic2NyaWJlciBzaG91bGQgb25seSBkaXNwb3NlXG4gICAgICAgIC8vIHRoZSBDb25uZWN0YWJsZU9ic2VydmFibGUncyBzaGFyZWQgY29ubmVjdGlvbiBTdWJzY3JpcHRpb24gaWYgdGhlXG4gICAgICAgIC8vIGNvbm5lY3Rpb24gU3Vic2NyaXB0aW9uIGV4aXN0cywgKmFuZCogZWl0aGVyOlxuICAgICAgICAvLyAgIGEuIFJlZkNvdW50U3Vic2NyaWJlciBkb2Vzbid0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIHNoYXJlZCBjb25uZWN0aW9uXG4gICAgICAgIC8vICAgICAgU3Vic2NyaXB0aW9uIHlldCwgb3IsXG4gICAgICAgIC8vICAgYi4gUmVmQ291bnRTdWJzY3JpYmVyJ3MgY29ubmVjdGlvbiBTdWJzY3JpcHRpb24gcmVmZXJlbmNlIGlzIGlkZW50aWNhbFxuICAgICAgICAvLyAgICAgIHRvIHRoZSBzaGFyZWQgY29ubmVjdGlvbiBTdWJzY3JpcHRpb25cbiAgICAgICAgLy8vXG4gICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9uO1xuICAgICAgICB2YXIgc2hhcmVkQ29ubmVjdGlvbiA9IGNvbm5lY3RhYmxlLl9jb25uZWN0aW9uO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICBpZiAoc2hhcmVkQ29ubmVjdGlvbiAmJiAoIWNvbm5lY3Rpb24gfHwgc2hhcmVkQ29ubmVjdGlvbiA9PT0gY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIHNoYXJlZENvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFJlZkNvdW50U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbm5lY3RhYmxlT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqIEBoaWRlIHRydWVcbiAqL1xudmFyIERlZmVyT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKERlZmVyT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBEZWZlck9ic2VydmFibGUob2JzZXJ2YWJsZUZhY3RvcnkpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMub2JzZXJ2YWJsZUZhY3RvcnkgPSBvYnNlcnZhYmxlRmFjdG9yeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBPYnNlcnZhYmxlIHRoYXQsIG9uIHN1YnNjcmliZSwgY2FsbHMgYW4gT2JzZXJ2YWJsZSBmYWN0b3J5IHRvXG4gICAgICogbWFrZSBhbiBPYnNlcnZhYmxlIGZvciBlYWNoIG5ldyBPYnNlcnZlci5cbiAgICAgKlxuICAgICAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5DcmVhdGVzIHRoZSBPYnNlcnZhYmxlIGxhemlseSwgdGhhdCBpcywgb25seSB3aGVuIGl0XG4gICAgICogaXMgc3Vic2NyaWJlZC5cbiAgICAgKiA8L3NwYW4+XG4gICAgICpcbiAgICAgKiA8aW1nIHNyYz1cIi4vaW1nL2RlZmVyLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAqXG4gICAgICogYGRlZmVyYCBhbGxvd3MgeW91IHRvIGNyZWF0ZSB0aGUgT2JzZXJ2YWJsZSBvbmx5IHdoZW4gdGhlIE9ic2VydmVyXG4gICAgICogc3Vic2NyaWJlcywgYW5kIGNyZWF0ZSBhIGZyZXNoIE9ic2VydmFibGUgZm9yIGVhY2ggT2JzZXJ2ZXIuIEl0IHdhaXRzIHVudGlsXG4gICAgICogYW4gT2JzZXJ2ZXIgc3Vic2NyaWJlcyB0byBpdCwgYW5kIHRoZW4gaXQgZ2VuZXJhdGVzIGFuIE9ic2VydmFibGUsXG4gICAgICogdHlwaWNhbGx5IHdpdGggYW4gT2JzZXJ2YWJsZSBmYWN0b3J5IGZ1bmN0aW9uLiBJdCBkb2VzIHRoaXMgYWZyZXNoIGZvciBlYWNoXG4gICAgICogc3Vic2NyaWJlciwgc28gYWx0aG91Z2ggZWFjaCBzdWJzY3JpYmVyIG1heSB0aGluayBpdCBpcyBzdWJzY3JpYmluZyB0byB0aGVcbiAgICAgKiBzYW1lIE9ic2VydmFibGUsIGluIGZhY3QgZWFjaCBzdWJzY3JpYmVyIGdldHMgaXRzIG93biBpbmRpdmlkdWFsXG4gICAgICogT2JzZXJ2YWJsZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPlN1YnNjcmliZSB0byBlaXRoZXIgYW4gT2JzZXJ2YWJsZSBvZiBjbGlja3Mgb3IgYW4gT2JzZXJ2YWJsZSBvZiBpbnRlcnZhbCwgYXQgcmFuZG9tPC9jYXB0aW9uPlxuICAgICAqIHZhciBjbGlja3NPckludGVydmFsID0gUnguT2JzZXJ2YWJsZS5kZWZlcihmdW5jdGlvbiAoKSB7XG4gICAgICogICBpZiAoTWF0aC5yYW5kb20oKSA+IDAuNSkge1xuICAgICAqICAgICByZXR1cm4gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICAgICAqICAgfSBlbHNlIHtcbiAgICAgKiAgICAgcmV0dXJuIFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogY2xpY2tzT3JJbnRlcnZhbC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gICAgICpcbiAgICAgKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3I6XG4gICAgICogLy8gSWYgdGhlIHJlc3VsdCBvZiBNYXRoLnJhbmRvbSgpIGlzIGdyZWF0ZXIgdGhhbiAwLjUgaXQgd2lsbCBsaXN0ZW5cbiAgICAgKiAvLyBmb3IgY2xpY2tzIGFueXdoZXJlIG9uIHRoZSBcImRvY3VtZW50XCI7IHdoZW4gZG9jdW1lbnQgaXMgY2xpY2tlZCBpdFxuICAgICAqIC8vIHdpbGwgbG9nIGEgTW91c2VFdmVudCBvYmplY3QgdG8gdGhlIGNvbnNvbGUuIElmIHRoZSByZXN1bHQgaXMgbGVzc1xuICAgICAqIC8vIHRoYW4gMC41IGl0IHdpbGwgZW1pdCBhc2NlbmRpbmcgbnVtYmVycywgb25lIGV2ZXJ5IHNlY29uZCgxMDAwbXMpLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgY3JlYXRlfVxuICAgICAqXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbigpOiBTdWJzY3JpYmFibGVPclByb21pc2V9IG9ic2VydmFibGVGYWN0b3J5IFRoZSBPYnNlcnZhYmxlXG4gICAgICogZmFjdG9yeSBmdW5jdGlvbiB0byBpbnZva2UgZm9yIGVhY2ggT2JzZXJ2ZXIgdGhhdCBzdWJzY3JpYmVzIHRvIHRoZSBvdXRwdXRcbiAgICAgKiBPYnNlcnZhYmxlLiBNYXkgYWxzbyByZXR1cm4gYSBQcm9taXNlLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCBvbiB0aGUgZmx5XG4gICAgICogdG8gYW4gT2JzZXJ2YWJsZS5cbiAgICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHdob3NlIE9ic2VydmVycycgc3Vic2NyaXB0aW9ucyB0cmlnZ2VyXG4gICAgICogYW4gaW52b2NhdGlvbiBvZiB0aGUgZ2l2ZW4gT2JzZXJ2YWJsZSBmYWN0b3J5IGZ1bmN0aW9uLlxuICAgICAqIEBzdGF0aWMgdHJ1ZVxuICAgICAqIEBuYW1lIGRlZmVyXG4gICAgICogQG93bmVyIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBEZWZlck9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKG9ic2VydmFibGVGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVmZXJPYnNlcnZhYmxlKG9ic2VydmFibGVGYWN0b3J5KTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBEZWZlck9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IERlZmVyU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLm9ic2VydmFibGVGYWN0b3J5KTtcbiAgICB9O1xuICAgIHJldHVybiBEZWZlck9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkRlZmVyT2JzZXJ2YWJsZSA9IERlZmVyT2JzZXJ2YWJsZTtcbnZhciBEZWZlclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEZWZlclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRGVmZXJTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBmYWN0b3J5KSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICAgICAgdGhpcy50cnlEZWZlcigpO1xuICAgIH1cbiAgICBEZWZlclN1YnNjcmliZXIucHJvdG90eXBlLnRyeURlZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fY2FsbEZhY3RvcnkoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEZWZlclN1YnNjcmliZXIucHJvdG90eXBlLl9jYWxsRmFjdG9yeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZmFjdG9yeSgpO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHJlc3VsdCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRGVmZXJTdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURlZmVyT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgRW1wdHlPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRW1wdHlPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEVtcHR5T2JzZXJ2YWJsZShzY2hlZHVsZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBubyBpdGVtcyB0byB0aGUgT2JzZXJ2ZXIgYW5kIGltbWVkaWF0ZWx5XG4gICAgICogZW1pdHMgYSBjb21wbGV0ZSBub3RpZmljYXRpb24uXG4gICAgICpcbiAgICAgKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SnVzdCBlbWl0cyAnY29tcGxldGUnLCBhbmQgbm90aGluZyBlbHNlLlxuICAgICAqIDwvc3Bhbj5cbiAgICAgKlxuICAgICAqIDxpbWcgc3JjPVwiLi9pbWcvZW1wdHkucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICpcbiAgICAgKiBUaGlzIHN0YXRpYyBvcGVyYXRvciBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIGEgc2ltcGxlIE9ic2VydmFibGUgdGhhdCBvbmx5XG4gICAgICogZW1pdHMgdGhlIGNvbXBsZXRlIG5vdGlmaWNhdGlvbi4gSXQgY2FuIGJlIHVzZWQgZm9yIGNvbXBvc2luZyB3aXRoIG90aGVyXG4gICAgICogT2JzZXJ2YWJsZXMsIHN1Y2ggYXMgaW4gYSB7QGxpbmsgbWVyZ2VNYXB9LlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCB0aGUgbnVtYmVyIDcsIHRoZW4gY29tcGxldGUuPC9jYXB0aW9uPlxuICAgICAqIHZhciByZXN1bHQgPSBSeC5PYnNlcnZhYmxlLmVtcHR5KCkuc3RhcnRXaXRoKDcpO1xuICAgICAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5NYXAgYW5kIGZsYXR0ZW4gb25seSBvZGQgbnVtYmVycyB0byB0aGUgc2VxdWVuY2UgJ2EnLCAnYicsICdjJzwvY2FwdGlvbj5cbiAgICAgKiB2YXIgaW50ZXJ2YWwgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICAgICAqIHZhciByZXN1bHQgPSBpbnRlcnZhbC5tZXJnZU1hcCh4ID0+XG4gICAgICogICB4ICUgMiA9PT0gMSA/IFJ4Lk9ic2VydmFibGUub2YoJ2EnLCAnYicsICdjJykgOiBSeC5PYnNlcnZhYmxlLmVtcHR5KClcbiAgICAgKiApO1xuICAgICAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gICAgICpcbiAgICAgKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGNvbnNvbGU6XG4gICAgICogLy8geCBpcyBlcXVhbCB0byB0aGUgY291bnQgb24gdGhlIGludGVydmFsIGVnKDAsMSwyLDMsLi4uKVxuICAgICAqIC8vIHggd2lsbCBvY2N1ciBldmVyeSAxMDAwbXNcbiAgICAgKiAvLyBpZiB4ICUgMiBpcyBlcXVhbCB0byAxIHByaW50IGFiY1xuICAgICAqIC8vIGlmIHggJSAyIGlzIG5vdCBlcXVhbCB0byAxIG5vdGhpbmcgd2lsbCBiZSBvdXRwdXRcbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGNyZWF0ZX1cbiAgICAgKiBAc2VlIHtAbGluayBuZXZlcn1cbiAgICAgKiBAc2VlIHtAbGluayBvZn1cbiAgICAgKiBAc2VlIHtAbGluayB0aHJvd31cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyXSBBIHtAbGluayBJU2NoZWR1bGVyfSB0byB1c2UgZm9yIHNjaGVkdWxpbmdcbiAgICAgKiB0aGUgZW1pc3Npb24gb2YgdGhlIGNvbXBsZXRlIG5vdGlmaWNhdGlvbi5cbiAgICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBcImVtcHR5XCIgT2JzZXJ2YWJsZTogZW1pdHMgb25seSB0aGUgY29tcGxldGVcbiAgICAgKiBub3RpZmljYXRpb24uXG4gICAgICogQHN0YXRpYyB0cnVlXG4gICAgICogQG5hbWUgZW1wdHlcbiAgICAgKiBAb3duZXIgT2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIEVtcHR5T2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc2NoZWR1bGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRW1wdHlPYnNlcnZhYmxlKHNjaGVkdWxlcik7XG4gICAgfTtcbiAgICBFbXB0eU9ic2VydmFibGUuZGlzcGF0Y2ggPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gYXJnLnN1YnNjcmliZXI7XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBFbXB0eU9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoRW1wdHlPYnNlcnZhYmxlLmRpc3BhdGNoLCAwLCB7IHN1YnNjcmliZXI6IHN1YnNjcmliZXIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBFbXB0eU9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkVtcHR5T2JzZXJ2YWJsZSA9IEVtcHR5T2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVtcHR5T2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgRXJyb3JPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRXJyb3JPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEVycm9yT2JzZXJ2YWJsZShlcnJvciwgc2NoZWR1bGVyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBubyBpdGVtcyB0byB0aGUgT2JzZXJ2ZXIgYW5kIGltbWVkaWF0ZWx5XG4gICAgICogZW1pdHMgYW4gZXJyb3Igbm90aWZpY2F0aW9uLlxuICAgICAqXG4gICAgICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkp1c3QgZW1pdHMgJ2Vycm9yJywgYW5kIG5vdGhpbmcgZWxzZS5cbiAgICAgKiA8L3NwYW4+XG4gICAgICpcbiAgICAgKiA8aW1nIHNyYz1cIi4vaW1nL3Rocm93LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAqXG4gICAgICogVGhpcyBzdGF0aWMgb3BlcmF0b3IgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBhIHNpbXBsZSBPYnNlcnZhYmxlIHRoYXQgb25seVxuICAgICAqIGVtaXRzIHRoZSBlcnJvciBub3RpZmljYXRpb24uIEl0IGNhbiBiZSB1c2VkIGZvciBjb21wb3Npbmcgd2l0aCBvdGhlclxuICAgICAqIE9ic2VydmFibGVzLCBzdWNoIGFzIGluIGEge0BsaW5rIG1lcmdlTWFwfS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgdGhlIG51bWJlciA3LCB0aGVuIGVtaXQgYW4gZXJyb3IuPC9jYXB0aW9uPlxuICAgICAqIHZhciByZXN1bHQgPSBSeC5PYnNlcnZhYmxlLnRocm93KG5ldyBFcnJvcignb29wcyEnKSkuc3RhcnRXaXRoKDcpO1xuICAgICAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSwgZSA9PiBjb25zb2xlLmVycm9yKGUpKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPk1hcCBhbmQgZmxhdHRlbiBudW1iZXJzIHRvIHRoZSBzZXF1ZW5jZSAnYScsICdiJywgJ2MnLCBidXQgdGhyb3cgYW4gZXJyb3IgZm9yIDEzPC9jYXB0aW9uPlxuICAgICAqIHZhciBpbnRlcnZhbCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gICAgICogdmFyIHJlc3VsdCA9IGludGVydmFsLm1lcmdlTWFwKHggPT5cbiAgICAgKiAgIHggPT09IDEzID9cbiAgICAgKiAgICAgUnguT2JzZXJ2YWJsZS50aHJvdygnVGhpcnRlZW5zIGFyZSBiYWQnKSA6XG4gICAgICogICAgIFJ4Lk9ic2VydmFibGUub2YoJ2EnLCAnYicsICdjJylcbiAgICAgKiApO1xuICAgICAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSwgZSA9PiBjb25zb2xlLmVycm9yKGUpKTtcbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGNyZWF0ZX1cbiAgICAgKiBAc2VlIHtAbGluayBlbXB0eX1cbiAgICAgKiBAc2VlIHtAbGluayBuZXZlcn1cbiAgICAgKiBAc2VlIHtAbGluayBvZn1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7YW55fSBlcnJvciBUaGUgcGFydGljdWxhciBFcnJvciB0byBwYXNzIHRvIHRoZSBlcnJvciBub3RpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXJdIEEge0BsaW5rIElTY2hlZHVsZXJ9IHRvIHVzZSBmb3Igc2NoZWR1bGluZ1xuICAgICAqIHRoZSBlbWlzc2lvbiBvZiB0aGUgZXJyb3Igbm90aWZpY2F0aW9uLlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIGVycm9yIE9ic2VydmFibGU6IGVtaXRzIG9ubHkgdGhlIGVycm9yIG5vdGlmaWNhdGlvblxuICAgICAqIHVzaW5nIHRoZSBnaXZlbiBlcnJvciBhcmd1bWVudC5cbiAgICAgKiBAc3RhdGljIHRydWVcbiAgICAgKiBAbmFtZSB0aHJvd1xuICAgICAqIEBvd25lciBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgRXJyb3JPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChlcnJvciwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3JPYnNlcnZhYmxlKGVycm9yLCBzY2hlZHVsZXIpO1xuICAgIH07XG4gICAgRXJyb3JPYnNlcnZhYmxlLmRpc3BhdGNoID0gZnVuY3Rpb24gKGFyZykge1xuICAgICAgICB2YXIgZXJyb3IgPSBhcmcuZXJyb3IsIHN1YnNjcmliZXIgPSBhcmcuc3Vic2NyaWJlcjtcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gRXJyb3JPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5lcnJvcjtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBzdWJzY3JpYmVyLnN5bmNFcnJvclRocm93YWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoRXJyb3JPYnNlcnZhYmxlLmRpc3BhdGNoLCAwLCB7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRXJyb3JPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5FcnJvck9ic2VydmFibGUgPSBFcnJvck9ic2VydmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FcnJvck9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgRW1wdHlPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0VtcHR5T2JzZXJ2YWJsZScpO1xudmFyIGlzQXJyYXlfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNBcnJheScpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgRm9ya0pvaW5PYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRm9ya0pvaW5PYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZvcmtKb2luT2JzZXJ2YWJsZShzb3VyY2VzLCByZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5zb3VyY2VzID0gc291cmNlcztcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9yO1xuICAgIH1cbiAgICAvKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuICAgIC8qKlxuICAgICAqIEpvaW5zIGxhc3QgdmFsdWVzIGVtaXR0ZWQgYnkgcGFzc2VkIE9ic2VydmFibGVzLlxuICAgICAqXG4gICAgICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPldhaXQgZm9yIE9ic2VydmFibGVzIHRvIGNvbXBsZXRlIGFuZCB0aGVuIGNvbWJpbmUgbGFzdCB2YWx1ZXMgdGhleSBlbWl0dGVkLjwvc3Bhbj5cbiAgICAgKlxuICAgICAqIDxpbWcgc3JjPVwiLi9pbWcvZm9ya0pvaW4ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICpcbiAgICAgKiBgZm9ya0pvaW5gIGlzIGFuIG9wZXJhdG9yIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBPYnNlcnZhYmxlcyB3aGljaCBjYW4gYmUgcGFzc2VkIGVpdGhlciBhcyBhbiBhcnJheVxuICAgICAqIG9yIGRpcmVjdGx5IGFzIGFyZ3VtZW50cy4gSWYgbm8gaW5wdXQgT2JzZXJ2YWJsZXMgYXJlIHByb3ZpZGVkLCByZXN1bHRpbmcgc3RyZWFtIHdpbGwgY29tcGxldGVcbiAgICAgKiBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIGBmb3JrSm9pbmAgd2lsbCB3YWl0IGZvciBhbGwgcGFzc2VkIE9ic2VydmFibGVzIHRvIGNvbXBsZXRlIGFuZCB0aGVuIGl0IHdpbGwgZW1pdCBhbiBhcnJheSB3aXRoIGxhc3RcbiAgICAgKiB2YWx1ZXMgZnJvbSBjb3JyZXNwb25kaW5nIE9ic2VydmFibGVzLiBTbyBpZiB5b3UgcGFzcyBgbmAgT2JzZXJ2YWJsZXMgdG8gdGhlIG9wZXJhdG9yLCByZXN1bHRpbmdcbiAgICAgKiBhcnJheSB3aWxsIGhhdmUgYG5gIHZhbHVlcywgd2hlcmUgZmlyc3QgdmFsdWUgaXMgdGhlIGxhc3QgdGhpbmcgZW1pdHRlZCBieSB0aGUgZmlyc3QgT2JzZXJ2YWJsZSxcbiAgICAgKiBzZWNvbmQgdmFsdWUgaXMgdGhlIGxhc3QgdGhpbmcgZW1pdHRlZCBieSB0aGUgc2Vjb25kIE9ic2VydmFibGUgYW5kIHNvIG9uLiBUaGF0IG1lYW5zIGBmb3JrSm9pbmAgd2lsbFxuICAgICAqIG5vdCBlbWl0IG1vcmUgdGhhbiBvbmNlIGFuZCBpdCB3aWxsIGNvbXBsZXRlIGFmdGVyIHRoYXQuIElmIHlvdSBuZWVkIHRvIGVtaXQgY29tYmluZWQgdmFsdWVzIG5vdCBvbmx5XG4gICAgICogYXQgdGhlIGVuZCBvZiBsaWZlY3ljbGUgb2YgcGFzc2VkIE9ic2VydmFibGVzLCBidXQgYWxzbyB0aHJvdWdob3V0IGl0LCB0cnkgb3V0IHtAbGluayBjb21iaW5lTGF0ZXN0fVxuICAgICAqIG9yIHtAbGluayB6aXB9IGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBJbiBvcmRlciBmb3IgcmVzdWx0aW5nIGFycmF5IHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBudW1iZXIgb2YgaW5wdXQgT2JzZXJ2YWJsZXMsIHdoZW5ldmVyIGFueSBvZlxuICAgICAqIHRoYXQgT2JzZXJ2YWJsZXMgY29tcGxldGVzIHdpdGhvdXQgZW1pdHRpbmcgYW55IHZhbHVlLCBgZm9ya0pvaW5gIHdpbGwgY29tcGxldGUgYXQgdGhhdCBtb21lbnQgYXMgd2VsbFxuICAgICAqIGFuZCBpdCB3aWxsIG5vdCBlbWl0IGFueXRoaW5nIGVpdGhlciwgZXZlbiBpZiBpdCBhbHJlYWR5IGhhcyBzb21lIGxhc3QgdmFsdWVzIGZyb20gb3RoZXIgT2JzZXJ2YWJsZXMuXG4gICAgICogQ29udmVyc2VseSwgaWYgdGhlcmUgaXMgYW4gT2JzZXJ2YWJsZSB0aGF0IG5ldmVyIGNvbXBsZXRlcywgYGZvcmtKb2luYCB3aWxsIG5ldmVyIGNvbXBsZXRlIGFzIHdlbGwsXG4gICAgICogdW5sZXNzIGF0IGFueSBwb2ludCBzb21lIG90aGVyIE9ic2VydmFibGUgY29tcGxldGVzIHdpdGhvdXQgZW1pdHRpbmcgdmFsdWUsIHdoaWNoIGJyaW5ncyB1cyBiYWNrIHRvXG4gICAgICogdGhlIHByZXZpb3VzIGNhc2UuIE92ZXJhbGwsIGluIG9yZGVyIGZvciBgZm9ya0pvaW5gIHRvIGVtaXQgYSB2YWx1ZSwgYWxsIE9ic2VydmFibGVzIHBhc3NlZCBhcyBhcmd1bWVudHNcbiAgICAgKiBoYXZlIHRvIGVtaXQgc29tZXRoaW5nIGF0IGxlYXN0IG9uY2UgYW5kIGNvbXBsZXRlLlxuICAgICAqXG4gICAgICogSWYgYW55IGlucHV0IE9ic2VydmFibGUgZXJyb3JzIGF0IHNvbWUgcG9pbnQsIGBmb3JrSm9pbmAgd2lsbCBlcnJvciBhcyB3ZWxsIGFuZCBhbGwgb3RoZXIgT2JzZXJ2YWJsZXNcbiAgICAgKiB3aWxsIGJlIGltbWVkaWF0ZWx5IHVuc3Vic2NyaWJlZC5cbiAgICAgKlxuICAgICAqIE9wdGlvbmFsbHkgYGZvcmtKb2luYCBhY2NlcHRzIHByb2plY3QgZnVuY3Rpb24sIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB2YWx1ZXMgd2hpY2ggbm9ybWFsbHlcbiAgICAgKiB3b3VsZCBsYW5kIGluIGVtaXR0ZWQgYXJyYXkuIFdoYXRldmVyIGlzIHJldHVybmVkIGJ5IHByb2plY3QgZnVuY3Rpb24sIHdpbGwgYXBwZWFyIGluIG91dHB1dFxuICAgICAqIE9ic2VydmFibGUgaW5zdGVhZC4gVGhpcyBtZWFucyB0aGF0IGRlZmF1bHQgcHJvamVjdCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXNcbiAgICAgKiBhbGwgaXRzIGFyZ3VtZW50cyBhbmQgcHV0cyB0aGVtIGludG8gYW4gYXJyYXkuIE5vdGUgdGhhdCBwcm9qZWN0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9ubHlcbiAgICAgKiB3aGVuIG91dHB1dCBPYnNlcnZhYmxlIGlzIHN1cHBvc2VkIHRvIGVtaXQgYSByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5Vc2UgZm9ya0pvaW4gd2l0aCBvcGVyYXRvciBlbWl0dGluZyBpbW1lZGlhdGVseTwvY2FwdGlvbj5cbiAgICAgKiBjb25zdCBvYnNlcnZhYmxlID0gUnguT2JzZXJ2YWJsZS5mb3JrSm9pbihcbiAgICAgKiAgIFJ4Lk9ic2VydmFibGUub2YoMSwgMiwgMywgNCksXG4gICAgICogICBSeC5PYnNlcnZhYmxlLm9mKDUsIDYsIDcsIDgpXG4gICAgICogKTtcbiAgICAgKiBvYnNlcnZhYmxlLnN1YnNjcmliZShcbiAgICAgKiAgIHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSxcbiAgICAgKiAgIGVyciA9PiB7fSxcbiAgICAgKiAgICgpID0+IGNvbnNvbGUubG9nKCdUaGlzIGlzIGhvdyBpdCBlbmRzIScpXG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIC8vIExvZ3M6XG4gICAgICogLy8gWzQsIDhdXG4gICAgICogLy8gXCJUaGlzIGlzIGhvdyBpdCBlbmRzIVwiXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPlVzZSBmb3JrSm9pbiB3aXRoIG9wZXJhdG9yIGVtaXR0aW5nIGFmdGVyIHNvbWUgdGltZTwvY2FwdGlvbj5cbiAgICAgKiBjb25zdCBvYnNlcnZhYmxlID0gUnguT2JzZXJ2YWJsZS5mb3JrSm9pbihcbiAgICAgKiAgIFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSgzKSwgLy8gZW1pdCAwLCAxLCAyIGV2ZXJ5IHNlY29uZCBhbmQgY29tcGxldGVcbiAgICAgKiAgIFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoNTAwKS50YWtlKDQpIC8vIGVtaXQgMCwgMSwgMiwgMyBldmVyeSBoYWxmIGEgc2Vjb25kIGFuZCBjb21wbGV0ZVxuICAgICAqICk7XG4gICAgICogb2JzZXJ2YWJsZS5zdWJzY3JpYmUoXG4gICAgICogICB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksXG4gICAgICogICBlcnIgPT4ge30sXG4gICAgICogICAoKSA9PiBjb25zb2xlLmxvZygnVGhpcyBpcyBob3cgaXQgZW5kcyEnKVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiAvLyBMb2dzOlxuICAgICAqIC8vIFsyLCAzXSBhZnRlciAzIHNlY29uZHNcbiAgICAgKiAvLyBcIlRoaXMgaXMgaG93IGl0IGVuZHMhXCIgaW1tZWRpYXRlbHkgYWZ0ZXJcbiAgICAgKlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIGZvcmtKb2luIHdpdGggcHJvamVjdCBmdW5jdGlvbjwvY2FwdGlvbj5cbiAgICAgKiBjb25zdCBvYnNlcnZhYmxlID0gUnguT2JzZXJ2YWJsZS5mb3JrSm9pbihcbiAgICAgKiAgIFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSgzKSwgLy8gZW1pdCAwLCAxLCAyIGV2ZXJ5IHNlY29uZCBhbmQgY29tcGxldGVcbiAgICAgKiAgIFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoNTAwKS50YWtlKDQpLCAvLyBlbWl0IDAsIDEsIDIsIDMgZXZlcnkgaGFsZiBhIHNlY29uZCBhbmQgY29tcGxldGVcbiAgICAgKiAgIChuLCBtKSA9PiBuICsgbVxuICAgICAqICk7XG4gICAgICogb2JzZXJ2YWJsZS5zdWJzY3JpYmUoXG4gICAgICogICB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksXG4gICAgICogICBlcnIgPT4ge30sXG4gICAgICogICAoKSA9PiBjb25zb2xlLmxvZygnVGhpcyBpcyBob3cgaXQgZW5kcyEnKVxuICAgICAqICk7XG4gICAgICpcbiAgICAgKiAvLyBMb2dzOlxuICAgICAqIC8vIDUgYWZ0ZXIgMyBzZWNvbmRzXG4gICAgICogLy8gXCJUaGlzIGlzIGhvdyBpdCBlbmRzIVwiIGltbWVkaWF0ZWx5IGFmdGVyXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBjb21iaW5lTGF0ZXN0fVxuICAgICAqIEBzZWUge0BsaW5rIHppcH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Li4uU3Vic2NyaWJhYmxlT3JQcm9taXNlfSBzb3VyY2VzIEFueSBudW1iZXIgb2YgT2JzZXJ2YWJsZXMgcHJvdmlkZWQgZWl0aGVyIGFzIGFuIGFycmF5IG9yIGFzIGFuIGFyZ3VtZW50c1xuICAgICAqIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgb3BlcmF0b3IuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW3Byb2plY3RdIEZ1bmN0aW9uIHRoYXQgdGFrZXMgdmFsdWVzIGVtaXR0ZWQgYnkgaW5wdXQgT2JzZXJ2YWJsZXMgYW5kIHJldHVybnMgdmFsdWVcbiAgICAgKiB0aGF0IHdpbGwgYXBwZWFyIGluIHJlc3VsdGluZyBPYnNlcnZhYmxlIGluc3RlYWQgb2YgZGVmYXVsdCBhcnJheS5cbiAgICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBPYnNlcnZhYmxlIGVtaXR0aW5nIGVpdGhlciBhbiBhcnJheSBvZiBsYXN0IHZhbHVlcyBlbWl0dGVkIGJ5IHBhc3NlZCBPYnNlcnZhYmxlc1xuICAgICAqIG9yIHZhbHVlIGZyb20gcHJvamVjdCBmdW5jdGlvbi5cbiAgICAgKiBAc3RhdGljIHRydWVcbiAgICAgKiBAbmFtZSBmb3JrSm9pblxuICAgICAqIEBvd25lciBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgRm9ya0pvaW5PYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHNvdXJjZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZXMgPT09IG51bGwgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFbXB0eU9ic2VydmFibGVfMS5FbXB0eU9ic2VydmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0U2VsZWN0b3IgPSBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZXNbc291cmNlcy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVzdWx0U2VsZWN0b3IgPSBzb3VyY2VzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgb25seSBvdGhlciBhcmd1bWVudCBiZXNpZGVzIHRoZSByZXN1bHRTZWxlY3RvciBpcyBhbiBhcnJheVxuICAgICAgICAvLyBhc3N1bWUgaXQncyBiZWVuIGNhbGxlZCB3aXRoIGBmb3JrSm9pbihbb2JzMSwgb2JzMiwgb2JzM10sIHJlc3VsdFNlbGVjdG9yKWBcbiAgICAgICAgaWYgKHNvdXJjZXMubGVuZ3RoID09PSAxICYmIGlzQXJyYXlfMS5pc0FycmF5KHNvdXJjZXNbMF0pKSB7XG4gICAgICAgICAgICBzb3VyY2VzID0gc291cmNlc1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc291cmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRW1wdHlPYnNlcnZhYmxlXzEuRW1wdHlPYnNlcnZhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBGb3JrSm9pbk9ic2VydmFibGUoc291cmNlcywgcmVzdWx0U2VsZWN0b3IpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIEZvcmtKb2luT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ya0pvaW5TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuc291cmNlcywgdGhpcy5yZXN1bHRTZWxlY3Rvcik7XG4gICAgfTtcbiAgICByZXR1cm4gRm9ya0pvaW5PYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5Gb3JrSm9pbk9ic2VydmFibGUgPSBGb3JrSm9pbk9ic2VydmFibGU7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIEZvcmtKb2luU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZvcmtKb2luU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGb3JrSm9pblN1YnNjcmliZXIoZGVzdGluYXRpb24sIHNvdXJjZXMsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5zb3VyY2VzID0gc291cmNlcztcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9yO1xuICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IDA7XG4gICAgICAgIHRoaXMuaGF2ZVZhbHVlcyA9IDA7XG4gICAgICAgIHZhciBsZW4gPSBzb3VyY2VzLmxlbmd0aDtcbiAgICAgICAgdGhpcy50b3RhbCA9IGxlbjtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBuZXcgQXJyYXkobGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaV07XG4gICAgICAgICAgICB2YXIgaW5uZXJTdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHNvdXJjZSwgbnVsbCwgaSk7XG4gICAgICAgICAgICBpZiAoaW5uZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmlwdGlvbi5vdXRlckluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChpbm5lclN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgRm9ya0pvaW5TdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMudmFsdWVzW291dGVySW5kZXhdID0gaW5uZXJWYWx1ZTtcbiAgICAgICAgaWYgKCFpbm5lclN1Yi5faGFzVmFsdWUpIHtcbiAgICAgICAgICAgIGlubmVyU3ViLl9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhdmVWYWx1ZXMrKztcbiAgICAgICAgfVxuICAgIH07XG4gICAgRm9ya0pvaW5TdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXZlVmFsdWVzID0gX2EuaGF2ZVZhbHVlcywgcmVzdWx0U2VsZWN0b3IgPSBfYS5yZXN1bHRTZWxlY3RvciwgdmFsdWVzID0gX2EudmFsdWVzO1xuICAgICAgICB2YXIgbGVuID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFpbm5lclN1Yi5faGFzVmFsdWUpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wbGV0ZWQrKztcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkICE9PSBsZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGF2ZVZhbHVlcyA9PT0gbGVuKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHRTZWxlY3RvciA/IHJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsIHZhbHVlcykgOiB2YWx1ZXM7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIEZvcmtKb2luU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Gb3JrSm9pbk9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgdHJ5Q2F0Y2hfMSA9IHJlcXVpcmUoJy4uL3V0aWwvdHJ5Q2F0Y2gnKTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzRnVuY3Rpb24nKTtcbnZhciBlcnJvck9iamVjdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9lcnJvck9iamVjdCcpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaXB0aW9uJyk7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIoc291cmNlT2JqKSB7XG4gICAgcmV0dXJuICEhc291cmNlT2JqICYmIHR5cGVvZiBzb3VyY2VPYmouYWRkTGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNvdXJjZU9iai5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIoc291cmNlT2JqKSB7XG4gICAgcmV0dXJuICEhc291cmNlT2JqICYmIHR5cGVvZiBzb3VyY2VPYmoub24gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNvdXJjZU9iai5vZmYgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBpc05vZGVMaXN0KHNvdXJjZU9iaikge1xuICAgIHJldHVybiAhIXNvdXJjZU9iaiAmJiB0b1N0cmluZy5jYWxsKHNvdXJjZU9iaikgPT09ICdbb2JqZWN0IE5vZGVMaXN0XSc7XG59XG5mdW5jdGlvbiBpc0hUTUxDb2xsZWN0aW9uKHNvdXJjZU9iaikge1xuICAgIHJldHVybiAhIXNvdXJjZU9iaiAmJiB0b1N0cmluZy5jYWxsKHNvdXJjZU9iaikgPT09ICdbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSc7XG59XG5mdW5jdGlvbiBpc0V2ZW50VGFyZ2V0KHNvdXJjZU9iaikge1xuICAgIHJldHVybiAhIXNvdXJjZU9iaiAmJiB0eXBlb2Ygc291cmNlT2JqLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNvdXJjZU9iai5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nO1xufVxuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKiBAaGlkZSB0cnVlXG4gKi9cbnZhciBGcm9tRXZlbnRPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRnJvbUV2ZW50T2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGcm9tRXZlbnRPYnNlcnZhYmxlKHNvdXJjZU9iaiwgZXZlbnROYW1lLCBzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5zb3VyY2VPYmogPSBzb3VyY2VPYmo7XG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xuICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgZXZlbnRzIG9mIGEgc3BlY2lmaWMgdHlwZSBjb21pbmcgZnJvbSB0aGVcbiAgICAgKiBnaXZlbiBldmVudCB0YXJnZXQuXG4gICAgICpcbiAgICAgKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Q3JlYXRlcyBhbiBPYnNlcnZhYmxlIGZyb20gRE9NIGV2ZW50cywgb3IgTm9kZS5qc1xuICAgICAqIEV2ZW50RW1pdHRlciBldmVudHMgb3Igb3RoZXJzLjwvc3Bhbj5cbiAgICAgKlxuICAgICAqIDxpbWcgc3JjPVwiLi9pbWcvZnJvbUV2ZW50LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAqXG4gICAgICogYGZyb21FdmVudGAgYWNjZXB0cyBhcyBhIGZpcnN0IGFyZ3VtZW50IGV2ZW50IHRhcmdldCwgd2hpY2ggaXMgYW4gb2JqZWN0IHdpdGggbWV0aG9kc1xuICAgICAqIGZvciByZWdpc3RlcmluZyBldmVudCBoYW5kbGVyIGZ1bmN0aW9ucy4gQXMgYSBzZWNvbmQgYXJndW1lbnQgaXQgdGFrZXMgc3RyaW5nIHRoYXQgaW5kaWNhdGVzXG4gICAgICogdHlwZSBvZiBldmVudCB3ZSB3YW50IHRvIGxpc3RlbiBmb3IuIGBmcm9tRXZlbnRgIHN1cHBvcnRzIHNlbGVjdGVkIHR5cGVzIG9mIGV2ZW50IHRhcmdldHMsXG4gICAgICogd2hpY2ggYXJlIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuIElmIHlvdXIgZXZlbnQgdGFyZ2V0IGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgb25lcyBsaXN0ZWQsXG4gICAgICogeW91IHNob3VsZCB1c2Uge0BsaW5rIGZyb21FdmVudFBhdHRlcm59LCB3aGljaCBjYW4gYmUgdXNlZCBvbiBhcmJpdHJhcnkgQVBJcy5cbiAgICAgKiBXaGVuIGl0IGNvbWVzIHRvIEFQSXMgc3VwcG9ydGVkIGJ5IGBmcm9tRXZlbnRgLCB0aGVpciBtZXRob2RzIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGV2ZW50XG4gICAgICogaGFuZGxlciBmdW5jdGlvbnMgaGF2ZSBkaWZmZXJlbnQgbmFtZXMsIGJ1dCB0aGV5IGFsbCBhY2NlcHQgYSBzdHJpbmcgZGVzY3JpYmluZyBldmVudCB0eXBlXG4gICAgICogYW5kIGZ1bmN0aW9uIGl0c2VsZiwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgc2FpZCBldmVudCBoYXBwZW5zLlxuICAgICAqXG4gICAgICogRXZlcnkgdGltZSByZXN1bHRpbmcgT2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkLCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpbGwgYmUgcmVnaXN0ZXJlZFxuICAgICAqIHRvIGV2ZW50IHRhcmdldCBvbiBnaXZlbiBldmVudCB0eXBlLiBXaGVuIHRoYXQgZXZlbnQgZmlyZXMsIHZhbHVlXG4gICAgICogcGFzc2VkIGFzIGEgZmlyc3QgYXJndW1lbnQgdG8gcmVnaXN0ZXJlZCBmdW5jdGlvbiB3aWxsIGJlIGVtaXR0ZWQgYnkgb3V0cHV0IE9ic2VydmFibGUuXG4gICAgICogV2hlbiBPYnNlcnZhYmxlIGlzIHVuc3Vic2NyaWJlZCwgZnVuY3Rpb24gd2lsbCBiZSB1bnJlZ2lzdGVyZWQgZnJvbSBldmVudCB0YXJnZXQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgaWYgZXZlbnQgdGFyZ2V0IGNhbGxzIHJlZ2lzdGVyZWQgZnVuY3Rpb24gd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBzZWNvbmRcbiAgICAgKiBhbmQgZm9sbG93aW5nIGFyZ3VtZW50cyB3aWxsIG5vdCBhcHBlYXIgaW4gcmVzdWx0aW5nIHN0cmVhbS4gSW4gb3JkZXIgdG8gZ2V0IGFjY2VzcyB0byB0aGVtLFxuICAgICAqIHlvdSBjYW4gcGFzcyB0byBgZnJvbUV2ZW50YCBvcHRpb25hbCBwcm9qZWN0IGZ1bmN0aW9uLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFsbCBhcmd1bWVudHNcbiAgICAgKiBwYXNzZWQgdG8gZXZlbnQgaGFuZGxlci4gT3V0cHV0IE9ic2VydmFibGUgd2lsbCB0aGVuIGVtaXQgdmFsdWUgcmV0dXJuZWQgYnkgcHJvamVjdCBmdW5jdGlvbixcbiAgICAgKiBpbnN0ZWFkIG9mIHRoZSB1c3VhbCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIFJlbWVtYmVyIHRoYXQgZXZlbnQgdGFyZ2V0cyBsaXN0ZWQgYmVsb3cgYXJlIGNoZWNrZWQgdmlhIGR1Y2sgdHlwaW5nLiBJdCBtZWFucyB0aGF0XG4gICAgICogbm8gbWF0dGVyIHdoYXQga2luZCBvZiBvYmplY3QgeW91IGhhdmUgYW5kIG5vIG1hdHRlciB3aGF0IGVudmlyb25tZW50IHlvdSB3b3JrIGluLFxuICAgICAqIHlvdSBjYW4gc2FmZWx5IHVzZSBgZnJvbUV2ZW50YCBvbiB0aGF0IG9iamVjdCBpZiBpdCBleHBvc2VzIGRlc2NyaWJlZCBtZXRob2RzIChwcm92aWRlZFxuICAgICAqIG9mIGNvdXJzZSB0aGV5IGJlaGF2ZSBhcyB3YXMgZGVzY3JpYmVkIGFib3ZlKS4gU28gZm9yIGV4YW1wbGUgaWYgTm9kZS5qcyBsaWJyYXJ5IGV4cG9zZXNcbiAgICAgKiBldmVudCB0YXJnZXQgd2hpY2ggaGFzIHRoZSBzYW1lIG1ldGhvZCBuYW1lcyBhcyBET00gRXZlbnRUYXJnZXQsIGBmcm9tRXZlbnRgIGlzIHN0aWxsXG4gICAgICogYSBnb29kIGNob2ljZS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBBUEkgeW91IHVzZSBpcyBtb3JlIGNhbGxiYWNrIHRoZW4gZXZlbnQgaGFuZGxlciBvcmllbnRlZCAoc3Vic2NyaWJlZFxuICAgICAqIGNhbGxiYWNrIGZ1bmN0aW9uIGZpcmVzIG9ubHkgb25jZSBhbmQgdGh1cyB0aGVyZSBpcyBubyBuZWVkIHRvIG1hbnVhbGx5XG4gICAgICogdW5yZWdpc3RlciBpdCksIHlvdSBzaG91bGQgdXNlIHtAbGluayBiaW5kQ2FsbGJhY2t9IG9yIHtAbGluayBiaW5kTm9kZUNhbGxiYWNrfVxuICAgICAqIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBgZnJvbUV2ZW50YCBzdXBwb3J0cyBmb2xsb3dpbmcgdHlwZXMgb2YgZXZlbnQgdGFyZ2V0czpcbiAgICAgKlxuICAgICAqICoqRE9NIEV2ZW50VGFyZ2V0KipcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYW4gb2JqZWN0IHdpdGggYGFkZEV2ZW50TGlzdGVuZXJgIGFuZCBgcmVtb3ZlRXZlbnRMaXN0ZW5lcmAgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIEluIHRoZSBicm93c2VyLCBgYWRkRXZlbnRMaXN0ZW5lcmAgYWNjZXB0cyAtIGFwYXJ0IGZyb20gZXZlbnQgdHlwZSBzdHJpbmcgYW5kIGV2ZW50XG4gICAgICogaGFuZGxlciBmdW5jdGlvbiBhcmd1bWVudHMgLSBvcHRpb25hbCB0aGlyZCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGVpdGhlciBhbiBvYmplY3Qgb3IgYm9vbGVhbixcbiAgICAgKiBib3RoIHVzZWQgZm9yIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBob3cgYW5kIHdoZW4gcGFzc2VkIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLiBXaGVuXG4gICAgICogYGZyb21FdmVudGAgaXMgdXNlZCB3aXRoIGV2ZW50IHRhcmdldCBvZiB0aGF0IHR5cGUsIHlvdSBjYW4gcHJvdmlkZSB0aGlzIHZhbHVlc1xuICAgICAqIGFzIHRoaXJkIHBhcmFtZXRlciBhcyB3ZWxsLlxuICAgICAqXG4gICAgICogKipOb2RlLmpzIEV2ZW50RW1pdHRlcioqXG4gICAgICpcbiAgICAgKiBBbiBvYmplY3Qgd2l0aCBgYWRkTGlzdGVuZXJgIGFuZCBgcmVtb3ZlTGlzdGVuZXJgIG1ldGhvZHMuXG4gICAgICpcbiAgICAgKiAqKkpRdWVyeS1zdHlsZSBldmVudCB0YXJnZXQqKlxuICAgICAqXG4gICAgICogQW4gb2JqZWN0IHdpdGggYG9uYCBhbmQgYG9mZmAgbWV0aG9kc1xuICAgICAqXG4gICAgICogKipET00gTm9kZUxpc3QqKlxuICAgICAqXG4gICAgICogTGlzdCBvZiBET00gTm9kZXMsIHJldHVybmVkIGZvciBleGFtcGxlIGJ5IGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYCBvciBgTm9kZS5jaGlsZE5vZGVzYC5cbiAgICAgKlxuICAgICAqIEFsdGhvdWdoIHRoaXMgY29sbGVjdGlvbiBpcyBub3QgZXZlbnQgdGFyZ2V0IGluIGl0c2VsZiwgYGZyb21FdmVudGAgd2lsbCBpdGVyYXRlIG92ZXIgYWxsIE5vZGVzXG4gICAgICogaXQgY29udGFpbnMgYW5kIGluc3RhbGwgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBpbiBldmVyeSBvZiB0aGVtLiBXaGVuIHJldHVybmVkIE9ic2VydmFibGVcbiAgICAgKiBpcyB1bnN1YnNjcmliZWQsIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGFsbCBOb2Rlcy5cbiAgICAgKlxuICAgICAqICoqRE9NIEh0bWxDb2xsZWN0aW9uKipcbiAgICAgKlxuICAgICAqIEp1c3QgYXMgaW4gY2FzZSBvZiBOb2RlTGlzdCBpdCBpcyBhIGNvbGxlY3Rpb24gb2YgRE9NIG5vZGVzLiBIZXJlIGFzIHdlbGwgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiBpc1xuICAgICAqIGluc3RhbGxlZCBhbmQgcmVtb3ZlZCBpbiBlYWNoIG9mIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0cyBjbGlja3MgaGFwcGVuaW5nIG9uIHRoZSBET00gZG9jdW1lbnQ8L2NhcHRpb24+XG4gICAgICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAgICAgKiBjbGlja3Muc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICAgICAqXG4gICAgICogLy8gUmVzdWx0cyBpbjpcbiAgICAgKiAvLyBNb3VzZUV2ZW50IG9iamVjdCBsb2dnZWQgdG8gY29uc29sZSBldmVyeSB0aW1lIGEgY2xpY2tcbiAgICAgKiAvLyBvY2N1cnMgb24gdGhlIGRvY3VtZW50LlxuICAgICAqXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5Vc2UgYWRkRXZlbnRMaXN0ZW5lciB3aXRoIGNhcHR1cmUgb3B0aW9uPC9jYXB0aW9uPlxuICAgICAqIHZhciBjbGlja3NJbkRvY3VtZW50ID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRydWUpOyAvLyBub3RlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIGFkZEV2ZW50TGlzdGVuZXJcbiAgICAgKiB2YXIgY2xpY2tzSW5EaXYgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChzb21lRGl2SW5Eb2N1bWVudCwgJ2NsaWNrJyk7XG4gICAgICpcbiAgICAgKiBjbGlja3NJbkRvY3VtZW50LnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZygnZG9jdW1lbnQnKSk7XG4gICAgICogY2xpY2tzSW5EaXYuc3Vic2NyaWJlKCgpID0+IGNvbnNvbGUubG9nKCdkaXYnKSk7XG4gICAgICpcbiAgICAgKiAvLyBCeSBkZWZhdWx0IGV2ZW50cyBidWJibGUgVVAgaW4gRE9NIHRyZWUsIHNvIG5vcm1hbGx5XG4gICAgICogLy8gd2hlbiB3ZSB3b3VsZCBjbGljayBvbiBkaXYgaW4gZG9jdW1lbnRcbiAgICAgKiAvLyBcImRpdlwiIHdvdWxkIGJlIGxvZ2dlZCBmaXJzdCBhbmQgdGhlbiBcImRvY3VtZW50XCIuXG4gICAgICogLy8gU2luY2Ugd2Ugc3BlY2lmaWVkIG9wdGlvbmFsIGBjYXB0dXJlYCBvcHRpb24sIGRvY3VtZW50XG4gICAgICogLy8gd2lsbCBjYXRjaCBldmVudCB3aGVuIGl0IGdvZXMgRE9XTiBET00gdHJlZSwgc28gY29uc29sZVxuICAgICAqIC8vIHdpbGwgbG9nIFwiZG9jdW1lbnRcIiBhbmQgdGhlbiBcImRpdlwiLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgYmluZENhbGxiYWNrfVxuICAgICAqIEBzZWUge0BsaW5rIGJpbmROb2RlQ2FsbGJhY2t9XG4gICAgICogQHNlZSB7QGxpbmsgZnJvbUV2ZW50UGF0dGVybn1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RXZlbnRUYXJnZXRMaWtlfSB0YXJnZXQgVGhlIERPTSBFdmVudFRhcmdldCwgTm9kZS5qc1xuICAgICAqIEV2ZW50RW1pdHRlciwgSlF1ZXJ5LWxpa2UgZXZlbnQgdGFyZ2V0LCBOb2RlTGlzdCBvciBIVE1MQ29sbGVjdGlvbiB0byBhdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgdG8uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgZXZlbnQgbmFtZSBvZiBpbnRlcmVzdCwgYmVpbmcgZW1pdHRlZCBieSB0aGVcbiAgICAgKiBgdGFyZ2V0YC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50TGlzdGVuZXJPcHRpb25zfSBbb3B0aW9uc10gT3B0aW9ucyB0byBwYXNzIHRocm91Z2ggdG8gYWRkRXZlbnRMaXN0ZW5lclxuICAgICAqIEBwYXJhbSB7U2VsZWN0b3JNZXRob2RTaWduYXR1cmU8VD59IFtzZWxlY3Rvcl0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdG9cbiAgICAgKiBwb3N0LXByb2Nlc3MgcmVzdWx0cy4gSXQgdGFrZXMgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBldmVudCBoYW5kbGVyIGFuZFxuICAgICAqIHNob3VsZCByZXR1cm4gYSBzaW5nbGUgdmFsdWUuXG4gICAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn1cbiAgICAgKiBAc3RhdGljIHRydWVcbiAgICAgKiBAbmFtZSBmcm9tRXZlbnRcbiAgICAgKiBAb3duZXIgT2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIEZyb21FdmVudE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCBzZWxlY3Rvcikge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbl8xLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHNlbGVjdG9yID0gb3B0aW9ucztcbiAgICAgICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBGcm9tRXZlbnRPYnNlcnZhYmxlKHRhcmdldCwgZXZlbnROYW1lLCBzZWxlY3Rvciwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBGcm9tRXZlbnRPYnNlcnZhYmxlLnNldHVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHNvdXJjZU9iaiwgZXZlbnROYW1lLCBoYW5kbGVyLCBzdWJzY3JpYmVyLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciB1bnN1YnNjcmliZTtcbiAgICAgICAgaWYgKGlzTm9kZUxpc3Qoc291cmNlT2JqKSB8fCBpc0hUTUxDb2xsZWN0aW9uKHNvdXJjZU9iaikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VPYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBGcm9tRXZlbnRPYnNlcnZhYmxlLnNldHVwU3Vic2NyaXB0aW9uKHNvdXJjZU9ialtpXSwgZXZlbnROYW1lLCBoYW5kbGVyLCBzdWJzY3JpYmVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0V2ZW50VGFyZ2V0KHNvdXJjZU9iaikpIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2VfMSA9IHNvdXJjZU9iajtcbiAgICAgICAgICAgIHNvdXJjZU9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZV8xLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKTsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0pRdWVyeVN0eWxlRXZlbnRFbWl0dGVyKHNvdXJjZU9iaikpIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2VfMiA9IHNvdXJjZU9iajtcbiAgICAgICAgICAgIHNvdXJjZU9iai5vbihldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzb3VyY2VfMi5vZmYoZXZlbnROYW1lLCBoYW5kbGVyKTsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc05vZGVTdHlsZUV2ZW50RW1pdHRlcihzb3VyY2VPYmopKSB7XG4gICAgICAgICAgICB2YXIgc291cmNlXzMgPSBzb3VyY2VPYmo7XG4gICAgICAgICAgICBzb3VyY2VPYmouYWRkTGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc291cmNlXzMucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZXZlbnQgdGFyZ2V0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5hZGQobmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbih1bnN1YnNjcmliZSkpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIEZyb21FdmVudE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc291cmNlT2JqID0gdGhpcy5zb3VyY2VPYmo7XG4gICAgICAgIHZhciBldmVudE5hbWUgPSB0aGlzLmV2ZW50TmFtZTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3I7XG4gICAgICAgIHZhciBoYW5kbGVyID0gc2VsZWN0b3IgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pIC0gMF0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2goc2VsZWN0b3IpLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gc3Vic2NyaWJlci5uZXh0KGUpOyB9O1xuICAgICAgICBGcm9tRXZlbnRPYnNlcnZhYmxlLnNldHVwU3Vic2NyaXB0aW9uKHNvdXJjZU9iaiwgZXZlbnROYW1lLCBoYW5kbGVyLCBzdWJzY3JpYmVyLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBGcm9tRXZlbnRPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5Gcm9tRXZlbnRPYnNlcnZhYmxlID0gRnJvbUV2ZW50T2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZyb21FdmVudE9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBpc0Z1bmN0aW9uXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzRnVuY3Rpb24nKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpcHRpb24nKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgRnJvbUV2ZW50UGF0dGVybk9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGcm9tRXZlbnRQYXR0ZXJuT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGcm9tRXZlbnRQYXR0ZXJuT2JzZXJ2YWJsZShhZGRIYW5kbGVyLCByZW1vdmVIYW5kbGVyLCBzZWxlY3Rvcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5hZGRIYW5kbGVyID0gYWRkSGFuZGxlcjtcbiAgICAgICAgdGhpcy5yZW1vdmVIYW5kbGVyID0gcmVtb3ZlSGFuZGxlcjtcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgZnJvbSBhbiBBUEkgYmFzZWQgb24gYWRkSGFuZGxlci9yZW1vdmVIYW5kbGVyXG4gICAgICogZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbnZlcnRzIGFueSBhZGRIYW5kbGVyL3JlbW92ZUhhbmRsZXIgQVBJIHRvIGFuXG4gICAgICogT2JzZXJ2YWJsZS48L3NwYW4+XG4gICAgICpcbiAgICAgKiA8aW1nIHNyYz1cIi4vaW1nL2Zyb21FdmVudFBhdHRlcm4ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICpcbiAgICAgKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgYnkgdXNpbmcgdGhlIGBhZGRIYW5kbGVyYCBhbmQgYHJlbW92ZUhhbmRsZXJgXG4gICAgICogZnVuY3Rpb25zIHRvIGFkZCBhbmQgcmVtb3ZlIHRoZSBoYW5kbGVycywgd2l0aCBhbiBvcHRpb25hbCBzZWxlY3RvclxuICAgICAqIGZ1bmN0aW9uIHRvIHByb2plY3QgdGhlIGV2ZW50IGFyZ3VtZW50cyB0byBhIHJlc3VsdC4gVGhlIGBhZGRIYW5kbGVyYCBpc1xuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkLCBhbmQgYHJlbW92ZUhhbmRsZXJgIGlzXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIFN1YnNjcmlwdGlvbiBpcyB1bnN1YnNjcmliZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0cyBjbGlja3MgaGFwcGVuaW5nIG9uIHRoZSBET00gZG9jdW1lbnQ8L2NhcHRpb24+XG4gICAgICogZnVuY3Rpb24gYWRkQ2xpY2tIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICAgKiAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gcmVtb3ZlQ2xpY2tIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICAgKiAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50UGF0dGVybihcbiAgICAgKiAgIGFkZENsaWNrSGFuZGxlcixcbiAgICAgKiAgIHJlbW92ZUNsaWNrSGFuZGxlclxuICAgICAqICk7XG4gICAgICogY2xpY2tzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGZyb219XG4gICAgICogQHNlZSB7QGxpbmsgZnJvbUV2ZW50fVxuICAgICAqXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihoYW5kbGVyOiBGdW5jdGlvbik6IGFueX0gYWRkSGFuZGxlciBBIGZ1bmN0aW9uIHRoYXQgdGFrZXNcbiAgICAgKiBhIGBoYW5kbGVyYCBmdW5jdGlvbiBhcyBhcmd1bWVudCBhbmQgYXR0YWNoZXMgaXQgc29tZWhvdyB0byB0aGUgYWN0dWFsXG4gICAgICogc291cmNlIG9mIGV2ZW50cy5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGhhbmRsZXI6IEZ1bmN0aW9uLCBzaWduYWw/OiBhbnkpOiB2b2lkfSBbcmVtb3ZlSGFuZGxlcl0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdFxuICAgICAqIHRha2VzIGEgYGhhbmRsZXJgIGZ1bmN0aW9uIGFzIGFyZ3VtZW50IGFuZCByZW1vdmVzIGl0IGluIGNhc2UgaXQgd2FzXG4gICAgICogcHJldmlvdXNseSBhdHRhY2hlZCB1c2luZyBgYWRkSGFuZGxlcmAuIGlmIGFkZEhhbmRsZXIgcmV0dXJucyBzaWduYWwgdG8gdGVhcmRvd24gd2hlbiByZW1vdmUsXG4gICAgICogcmVtb3ZlSGFuZGxlciBmdW5jdGlvbiB3aWxsIGZvcndhcmQgaXQuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbiguLi5hcmdzOiBhbnkpOiBUfSBbc2VsZWN0b3JdIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvXG4gICAgICogcG9zdC1wcm9jZXNzIHJlc3VsdHMuIEl0IHRha2VzIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBhbmRcbiAgICAgKiBzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHZhbHVlLlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGU8VD59XG4gICAgICogQHN0YXRpYyB0cnVlXG4gICAgICogQG5hbWUgZnJvbUV2ZW50UGF0dGVyblxuICAgICAqIEBvd25lciBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgRnJvbUV2ZW50UGF0dGVybk9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKGFkZEhhbmRsZXIsIHJlbW92ZUhhbmRsZXIsIHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJvbUV2ZW50UGF0dGVybk9ic2VydmFibGUoYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlciwgc2VsZWN0b3IpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIEZyb21FdmVudFBhdHRlcm5PYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHJlbW92ZUhhbmRsZXIgPSB0aGlzLnJlbW92ZUhhbmRsZXI7XG4gICAgICAgIHZhciBoYW5kbGVyID0gISF0aGlzLnNlbGVjdG9yID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLl9jYWxsU2VsZWN0b3Ioc3Vic2NyaWJlciwgYXJncyk7XG4gICAgICAgIH0gOiBmdW5jdGlvbiAoZSkgeyBzdWJzY3JpYmVyLm5leHQoZSk7IH07XG4gICAgICAgIHZhciByZXRWYWx1ZSA9IHRoaXMuX2NhbGxBZGRIYW5kbGVyKGhhbmRsZXIsIHN1YnNjcmliZXIpO1xuICAgICAgICBpZiAoIWlzRnVuY3Rpb25fMS5pc0Z1bmN0aW9uKHJlbW92ZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5hZGQobmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvL1RPRE86IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBmb3J3YXJkIHRvIGVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgIHJlbW92ZUhhbmRsZXIoaGFuZGxlciwgcmV0VmFsdWUpO1xuICAgICAgICB9KSk7XG4gICAgfTtcbiAgICBGcm9tRXZlbnRQYXR0ZXJuT2JzZXJ2YWJsZS5wcm90b3R5cGUuX2NhbGxTZWxlY3RvciA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBhcmdzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zZWxlY3Rvci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBGcm9tRXZlbnRQYXR0ZXJuT2JzZXJ2YWJsZS5wcm90b3R5cGUuX2NhbGxBZGRIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIsIGVycm9yU3Vic2NyaWJlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkSGFuZGxlcihoYW5kbGVyKSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvclN1YnNjcmliZXIuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBGcm9tRXZlbnRQYXR0ZXJuT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuRnJvbUV2ZW50UGF0dGVybk9ic2VydmFibGUgPSBGcm9tRXZlbnRQYXR0ZXJuT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZyb21FdmVudFBhdHRlcm5PYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgaXNBcnJheV8xID0gcmVxdWlyZSgnLi4vdXRpbC9pc0FycmF5Jyk7XG52YXIgaXNBcnJheUxpa2VfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNBcnJheUxpa2UnKTtcbnZhciBpc1Byb21pc2VfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNQcm9taXNlJyk7XG52YXIgUHJvbWlzZU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vUHJvbWlzZU9ic2VydmFibGUnKTtcbnZhciBJdGVyYXRvck9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vSXRlcmF0b3JPYnNlcnZhYmxlJyk7XG52YXIgQXJyYXlPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0FycmF5T2JzZXJ2YWJsZScpO1xudmFyIEFycmF5TGlrZU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vQXJyYXlMaWtlT2JzZXJ2YWJsZScpO1xudmFyIGl0ZXJhdG9yXzEgPSByZXF1aXJlKCcuLi9zeW1ib2wvaXRlcmF0b3InKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgb2JzZXJ2ZU9uXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvb2JzZXJ2ZU9uJyk7XG52YXIgb2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vc3ltYm9sL29ic2VydmFibGUnKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgRnJvbU9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGcm9tT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGcm9tT2JzZXJ2YWJsZShpc2gsIHNjaGVkdWxlcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBudWxsKTtcbiAgICAgICAgdGhpcy5pc2ggPSBpc2g7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgZnJvbSBhbiBBcnJheSwgYW4gYXJyYXktbGlrZSBvYmplY3QsIGEgUHJvbWlzZSwgYW5cbiAgICAgKiBpdGVyYWJsZSBvYmplY3QsIG9yIGFuIE9ic2VydmFibGUtbGlrZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Q29udmVydHMgYWxtb3N0IGFueXRoaW5nIHRvIGFuIE9ic2VydmFibGUuPC9zcGFuPlxuICAgICAqXG4gICAgICogPGltZyBzcmM9XCIuL2ltZy9mcm9tLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAqXG4gICAgICogQ29udmVydCB2YXJpb3VzIG90aGVyIG9iamVjdHMgYW5kIGRhdGEgdHlwZXMgaW50byBPYnNlcnZhYmxlcy4gYGZyb21gXG4gICAgICogY29udmVydHMgYSBQcm9taXNlIG9yIGFuIGFycmF5LWxpa2Ugb3IgYW5cbiAgICAgKiBbaXRlcmFibGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHMjaXRlcmFibGUpXG4gICAgICogb2JqZWN0IGludG8gYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBpdGVtcyBpbiB0aGF0IHByb21pc2Ugb3IgYXJyYXkgb3JcbiAgICAgKiBpdGVyYWJsZS4gQSBTdHJpbmcsIGluIHRoaXMgY29udGV4dCwgaXMgdHJlYXRlZCBhcyBhbiBhcnJheSBvZiBjaGFyYWN0ZXJzLlxuICAgICAqIE9ic2VydmFibGUtbGlrZSBvYmplY3RzIChjb250YWlucyBhIGZ1bmN0aW9uIG5hbWVkIHdpdGggdGhlIEVTMjAxNSBTeW1ib2xcbiAgICAgKiBmb3IgT2JzZXJ2YWJsZSkgY2FuIGFsc28gYmUgY29udmVydGVkIHRocm91Z2ggdGhpcyBvcGVyYXRvci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbnZlcnRzIGFuIGFycmF5IHRvIGFuIE9ic2VydmFibGU8L2NhcHRpb24+XG4gICAgICogdmFyIGFycmF5ID0gWzEwLCAyMCwgMzBdO1xuICAgICAqIHZhciByZXN1bHQgPSBSeC5PYnNlcnZhYmxlLmZyb20oYXJyYXkpO1xuICAgICAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gICAgICpcbiAgICAgKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gICAgICogLy8gMTAgMjAgMzBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbnZlcnQgYW4gaW5maW5pdGUgaXRlcmFibGUgKGZyb20gYSBnZW5lcmF0b3IpIHRvIGFuIE9ic2VydmFibGU8L2NhcHRpb24+XG4gICAgICogZnVuY3Rpb24qIGdlbmVyYXRlRG91YmxlcyhzZWVkKSB7XG4gICAgICogICB2YXIgaSA9IHNlZWQ7XG4gICAgICogICB3aGlsZSAodHJ1ZSkge1xuICAgICAqICAgICB5aWVsZCBpO1xuICAgICAqICAgICBpID0gMiAqIGk7IC8vIGRvdWJsZSBpdFxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBpdGVyYXRvciA9IGdlbmVyYXRlRG91YmxlcygzKTtcbiAgICAgKiB2YXIgcmVzdWx0ID0gUnguT2JzZXJ2YWJsZS5mcm9tKGl0ZXJhdG9yKS50YWtlKDEwKTtcbiAgICAgKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICAgICAqXG4gICAgICogLy8gUmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOlxuICAgICAqIC8vIDMgNiAxMiAyNCA0OCA5NiAxOTIgMzg0IDc2OCAxNTM2XG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBjcmVhdGV9XG4gICAgICogQHNlZSB7QGxpbmsgZnJvbUV2ZW50fVxuICAgICAqIEBzZWUge0BsaW5rIGZyb21FdmVudFBhdHRlcm59XG4gICAgICogQHNlZSB7QGxpbmsgZnJvbVByb21pc2V9XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09ic2VydmFibGVJbnB1dDxUPn0gaXNoIEEgc3Vic2NyaWJhYmxlIG9iamVjdCwgYSBQcm9taXNlLCBhblxuICAgICAqIE9ic2VydmFibGUtbGlrZSwgYW4gQXJyYXksIGFuIGl0ZXJhYmxlIG9yIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHRvIGJlXG4gICAgICogY29udmVydGVkLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyXSBUaGUgc2NoZWR1bGVyIG9uIHdoaWNoIHRvIHNjaGVkdWxlIHRoZVxuICAgICAqIGVtaXNzaW9ucyBvZiB2YWx1ZXMuXG4gICAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gVGhlIE9ic2VydmFibGUgd2hvc2UgdmFsdWVzIGFyZSBvcmlnaW5hbGx5IGZyb20gdGhlXG4gICAgICogaW5wdXQgb2JqZWN0IHRoYXQgd2FzIGNvbnZlcnRlZC5cbiAgICAgKiBAc3RhdGljIHRydWVcbiAgICAgKiBAbmFtZSBmcm9tXG4gICAgICogQG93bmVyIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBGcm9tT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoaXNoLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgaWYgKGlzaCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzaFtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNoIGluc3RhbmNlb2YgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUgJiYgIXNjaGVkdWxlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZyb21PYnNlcnZhYmxlKGlzaCwgc2NoZWR1bGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlfMS5pc0FycmF5KGlzaCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5T2JzZXJ2YWJsZV8xLkFycmF5T2JzZXJ2YWJsZShpc2gsIHNjaGVkdWxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1Byb21pc2VfMS5pc1Byb21pc2UoaXNoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZU9ic2VydmFibGVfMS5Qcm9taXNlT2JzZXJ2YWJsZShpc2gsIHNjaGVkdWxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaXNoW2l0ZXJhdG9yXzEuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpc2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvck9ic2VydmFibGVfMS5JdGVyYXRvck9ic2VydmFibGUoaXNoLCBzY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUxpa2VfMS5pc0FycmF5TGlrZShpc2gpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpa2VPYnNlcnZhYmxlXzEuQXJyYXlMaWtlT2JzZXJ2YWJsZShpc2gsIHNjaGVkdWxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigoaXNoICE9PSBudWxsICYmIHR5cGVvZiBpc2ggfHwgaXNoKSArICcgaXMgbm90IG9ic2VydmFibGUnKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBGcm9tT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpc2ggPSB0aGlzLmlzaDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoc2NoZWR1bGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBpc2hbb2JzZXJ2YWJsZV8xLm9ic2VydmFibGVdKCkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzaFtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0oKS5zdWJzY3JpYmUobmV3IG9ic2VydmVPbl8xLk9ic2VydmVPblN1YnNjcmliZXIoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCAwKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBGcm9tT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuRnJvbU9ic2VydmFibGUgPSBGcm9tT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZyb21PYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vT2JzZXJ2YWJsZScpO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzU2NoZWR1bGVyJyk7XG52YXIgc2VsZlNlbGVjdG9yID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgR2VuZXJhdGVPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoR2VuZXJhdGVPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEdlbmVyYXRlT2JzZXJ2YWJsZShpbml0aWFsU3RhdGUsIGNvbmRpdGlvbiwgaXRlcmF0ZSwgcmVzdWx0U2VsZWN0b3IsIHNjaGVkdWxlcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5pbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xuICAgICAgICB0aGlzLml0ZXJhdGUgPSBpdGVyYXRlO1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICBHZW5lcmF0ZU9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKGluaXRpYWxTdGF0ZU9yT3B0aW9ucywgY29uZGl0aW9uLCBpdGVyYXRlLCByZXN1bHRTZWxlY3Rvck9yT2JzZXJ2YWJsZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2VuZXJhdGVPYnNlcnZhYmxlKGluaXRpYWxTdGF0ZU9yT3B0aW9ucy5pbml0aWFsU3RhdGUsIGluaXRpYWxTdGF0ZU9yT3B0aW9ucy5jb25kaXRpb24sIGluaXRpYWxTdGF0ZU9yT3B0aW9ucy5pdGVyYXRlLCBpbml0aWFsU3RhdGVPck9wdGlvbnMucmVzdWx0U2VsZWN0b3IgfHwgc2VsZlNlbGVjdG9yLCBpbml0aWFsU3RhdGVPck9wdGlvbnMuc2NoZWR1bGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0U2VsZWN0b3JPck9ic2VydmFibGUgPT09IHVuZGVmaW5lZCB8fCBpc1NjaGVkdWxlcl8xLmlzU2NoZWR1bGVyKHJlc3VsdFNlbGVjdG9yT3JPYnNlcnZhYmxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmF0ZU9ic2VydmFibGUoaW5pdGlhbFN0YXRlT3JPcHRpb25zLCBjb25kaXRpb24sIGl0ZXJhdGUsIHNlbGZTZWxlY3RvciwgcmVzdWx0U2VsZWN0b3JPck9ic2VydmFibGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgR2VuZXJhdGVPYnNlcnZhYmxlKGluaXRpYWxTdGF0ZU9yT3B0aW9ucywgY29uZGl0aW9uLCBpdGVyYXRlLCByZXN1bHRTZWxlY3Rvck9yT2JzZXJ2YWJsZSwgc2NoZWR1bGVyKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBHZW5lcmF0ZU9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLmluaXRpYWxTdGF0ZTtcbiAgICAgICAgaWYgKHRoaXMuc2NoZWR1bGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoR2VuZXJhdGVPYnNlcnZhYmxlLmRpc3BhdGNoLCAwLCB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlcjogc3Vic2NyaWJlcixcbiAgICAgICAgICAgICAgICBpdGVyYXRlOiB0aGlzLml0ZXJhdGUsXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiB0aGlzLmNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICByZXN1bHRTZWxlY3RvcjogdGhpcy5yZXN1bHRTZWxlY3RvcixcbiAgICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9hID0gdGhpcywgY29uZGl0aW9uID0gX2EuY29uZGl0aW9uLCByZXN1bHRTZWxlY3RvciA9IF9hLnJlc3VsdFNlbGVjdG9yLCBpdGVyYXRlID0gX2EuaXRlcmF0ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBjb25kaXRpb25SZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gY29uZGl0aW9uKHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25SZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2b2lkIDA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0U2VsZWN0b3Ioc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXRlID0gaXRlcmF0ZShzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgfTtcbiAgICBHZW5lcmF0ZU9ic2VydmFibGUuZGlzcGF0Y2ggPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBzdGF0ZS5zdWJzY3JpYmVyLCBjb25kaXRpb24gPSBzdGF0ZS5jb25kaXRpb247XG4gICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5uZWVkSXRlcmF0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IHN0YXRlLml0ZXJhdGUoc3RhdGUuc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5uZWVkSXRlcmF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgdmFyIGNvbmRpdGlvblJlc3VsdCA9IHZvaWQgMDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gY29uZGl0aW9uKHN0YXRlLnN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjb25kaXRpb25SZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gc3RhdGUucmVzdWx0U2VsZWN0b3Ioc3RhdGUuc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZShzdGF0ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gR2VuZXJhdGVPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5HZW5lcmF0ZU9ic2VydmFibGUgPSBHZW5lcmF0ZU9ic2VydmFibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1HZW5lcmF0ZU9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKiBAaGlkZSB0cnVlXG4gKi9cbnZhciBJZk9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhJZk9ic2VydmFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSWZPYnNlcnZhYmxlKGNvbmRpdGlvbiwgdGhlblNvdXJjZSwgZWxzZVNvdXJjZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgICAgIHRoaXMudGhlblNvdXJjZSA9IHRoZW5Tb3VyY2U7XG4gICAgICAgIHRoaXMuZWxzZVNvdXJjZSA9IGVsc2VTb3VyY2U7XG4gICAgfVxuICAgIElmT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCB0aGVuU291cmNlLCBlbHNlU291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWZPYnNlcnZhYmxlKGNvbmRpdGlvbiwgdGhlblNvdXJjZSwgZWxzZVNvdXJjZSk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gSWZPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgY29uZGl0aW9uID0gX2EuY29uZGl0aW9uLCB0aGVuU291cmNlID0gX2EudGhlblNvdXJjZSwgZWxzZVNvdXJjZSA9IF9hLmVsc2VTb3VyY2U7XG4gICAgICAgIHJldHVybiBuZXcgSWZTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGNvbmRpdGlvbiwgdGhlblNvdXJjZSwgZWxzZVNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gSWZPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5JZk9ic2VydmFibGUgPSBJZk9ic2VydmFibGU7XG52YXIgSWZTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoSWZTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIElmU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY29uZGl0aW9uLCB0aGVuU291cmNlLCBlbHNlU291cmNlKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgICAgIHRoaXMudGhlblNvdXJjZSA9IHRoZW5Tb3VyY2U7XG4gICAgICAgIHRoaXMuZWxzZVNvdXJjZSA9IGVsc2VTb3VyY2U7XG4gICAgICAgIHRoaXMudHJ5SWYoKTtcbiAgICB9XG4gICAgSWZTdWJzY3JpYmVyLnByb3RvdHlwZS50cnlJZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgY29uZGl0aW9uID0gX2EuY29uZGl0aW9uLCB0aGVuU291cmNlID0gX2EudGhlblNvdXJjZSwgZWxzZVNvdXJjZSA9IF9hLmVsc2VTb3VyY2U7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjb25kaXRpb24oKTtcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSByZXN1bHQgPyB0aGVuU291cmNlIDogZWxzZVNvdXJjZTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHNvdXJjZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gSWZTdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlmT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIGlzTnVtZXJpY18xID0gcmVxdWlyZSgnLi4vdXRpbC9pc051bWVyaWMnKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKiBAaGlkZSB0cnVlXG4gKi9cbnZhciBJbnRlcnZhbE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhJbnRlcnZhbE9ic2VydmFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSW50ZXJ2YWxPYnNlcnZhYmxlKHBlcmlvZCwgc2NoZWR1bGVyKSB7XG4gICAgICAgIGlmIChwZXJpb2QgPT09IHZvaWQgMCkgeyBwZXJpb2QgPSAwOyB9XG4gICAgICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jOyB9XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnBlcmlvZCA9IHBlcmlvZDtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIGlmICghaXNOdW1lcmljXzEuaXNOdW1lcmljKHBlcmlvZCkgfHwgcGVyaW9kIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5wZXJpb2QgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2NoZWR1bGVyIHx8IHR5cGVvZiBzY2hlZHVsZXIuc2NoZWR1bGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBzZXF1ZW50aWFsIG51bWJlcnMgZXZlcnkgc3BlY2lmaWVkXG4gICAgICogaW50ZXJ2YWwgb2YgdGltZSwgb24gYSBzcGVjaWZpZWQgSVNjaGVkdWxlci5cbiAgICAgKlxuICAgICAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbWl0cyBpbmNyZW1lbnRhbCBudW1iZXJzIHBlcmlvZGljYWxseSBpbiB0aW1lLlxuICAgICAqIDwvc3Bhbj5cbiAgICAgKlxuICAgICAqIDxpbWcgc3JjPVwiLi9pbWcvaW50ZXJ2YWwucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICpcbiAgICAgKiBgaW50ZXJ2YWxgIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGluZmluaXRlIHNlcXVlbmNlIG9mXG4gICAgICogYXNjZW5kaW5nIGludGVnZXJzLCB3aXRoIGEgY29uc3RhbnQgaW50ZXJ2YWwgb2YgdGltZSBvZiB5b3VyIGNob29zaW5nXG4gICAgICogYmV0d2VlbiB0aG9zZSBlbWlzc2lvbnMuIFRoZSBmaXJzdCBlbWlzc2lvbiBpcyBub3Qgc2VudCBpbW1lZGlhdGVseSwgYnV0XG4gICAgICogb25seSBhZnRlciB0aGUgZmlyc3QgcGVyaW9kIGhhcyBwYXNzZWQuIEJ5IGRlZmF1bHQsIHRoaXMgb3BlcmF0b3IgdXNlcyB0aGVcbiAgICAgKiBgYXN5bmNgIElTY2hlZHVsZXIgdG8gcHJvdmlkZSBhIG5vdGlvbiBvZiB0aW1lLCBidXQgeW91IG1heSBwYXNzIGFueVxuICAgICAqIElTY2hlZHVsZXIgdG8gaXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0cyBhc2NlbmRpbmcgbnVtYmVycywgb25lIGV2ZXJ5IHNlY29uZCAoMTAwMG1zKTwvY2FwdGlvbj5cbiAgICAgKiB2YXIgbnVtYmVycyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gICAgICogbnVtYmVycy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayB0aW1lcn1cbiAgICAgKiBAc2VlIHtAbGluayBkZWxheX1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcGVyaW9kPTBdIFRoZSBpbnRlcnZhbCBzaXplIGluIG1pbGxpc2Vjb25kcyAoYnkgZGVmYXVsdClcbiAgICAgKiBvciB0aGUgdGltZSB1bml0IGRldGVybWluZWQgYnkgdGhlIHNjaGVkdWxlcidzIGNsb2NrLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyPWFzeW5jXSBUaGUgSVNjaGVkdWxlciB0byB1c2UgZm9yIHNjaGVkdWxpbmdcbiAgICAgKiB0aGUgZW1pc3Npb24gb2YgdmFsdWVzLCBhbmQgcHJvdmlkaW5nIGEgbm90aW9uIG9mIFwidGltZVwiLlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIHNlcXVlbnRpYWwgbnVtYmVyIGVhY2ggdGltZVxuICAgICAqIGludGVydmFsLlxuICAgICAqIEBzdGF0aWMgdHJ1ZVxuICAgICAqIEBuYW1lIGludGVydmFsXG4gICAgICogQG93bmVyIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBJbnRlcnZhbE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHBlcmlvZCwgc2NoZWR1bGVyKSB7XG4gICAgICAgIGlmIChwZXJpb2QgPT09IHZvaWQgMCkgeyBwZXJpb2QgPSAwOyB9XG4gICAgICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jOyB9XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWxPYnNlcnZhYmxlKHBlcmlvZCwgc2NoZWR1bGVyKTtcbiAgICB9O1xuICAgIEludGVydmFsT2JzZXJ2YWJsZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCwgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXIsIHBlcmlvZCA9IHN0YXRlLnBlcmlvZDtcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGluZGV4KTtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuaW5kZXggKz0gMTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZShzdGF0ZSwgcGVyaW9kKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBJbnRlcnZhbE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgcGVyaW9kID0gdGhpcy5wZXJpb2Q7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgc3Vic2NyaWJlci5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKEludGVydmFsT2JzZXJ2YWJsZS5kaXNwYXRjaCwgcGVyaW9kLCB7XG4gICAgICAgICAgICBpbmRleDogaW5kZXgsIHN1YnNjcmliZXI6IHN1YnNjcmliZXIsIHBlcmlvZDogcGVyaW9kXG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIHJldHVybiBJbnRlcnZhbE9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkludGVydmFsT2JzZXJ2YWJsZSA9IEludGVydmFsT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUludGVydmFsT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIHJvb3RfMSA9IHJlcXVpcmUoJy4uL3V0aWwvcm9vdCcpO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBpdGVyYXRvcl8xID0gcmVxdWlyZSgnLi4vc3ltYm9sL2l0ZXJhdG9yJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqIEBoaWRlIHRydWVcbiAqL1xudmFyIEl0ZXJhdG9yT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEl0ZXJhdG9yT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBJdGVyYXRvck9ic2VydmFibGUoaXRlcmF0b3IsIHNjaGVkdWxlcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIGlmIChpdGVyYXRvciA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2l0ZXJhdG9yIGNhbm5vdCBiZSBudWxsLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYXRvcik7XG4gICAgfVxuICAgIEl0ZXJhdG9yT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIHNjaGVkdWxlcikge1xuICAgICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yT2JzZXJ2YWJsZShpdGVyYXRvciwgc2NoZWR1bGVyKTtcbiAgICB9O1xuICAgIEl0ZXJhdG9yT2JzZXJ2YWJsZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCwgaGFzRXJyb3IgPSBzdGF0ZS5oYXNFcnJvciwgaXRlcmF0b3IgPSBzdGF0ZS5pdGVyYXRvciwgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXI7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihzdGF0ZS5lcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgIHN0YXRlLmluZGV4ID0gaW5kZXggKyAxO1xuICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3IucmV0dXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZShzdGF0ZSk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gSXRlcmF0b3JPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaXRlcmF0b3IgPSBfYS5pdGVyYXRvciwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICBpZiAoc2NoZWR1bGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKEl0ZXJhdG9yT2JzZXJ2YWJsZS5kaXNwYXRjaCwgMCwge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCwgaXRlcmF0b3I6IGl0ZXJhdG9yLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yLnJldHVybiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBJdGVyYXRvck9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkl0ZXJhdG9yT2JzZXJ2YWJsZSA9IEl0ZXJhdG9yT2JzZXJ2YWJsZTtcbnZhciBTdHJpbmdJdGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3RyaW5nSXRlcmF0b3Ioc3RyLCBpZHgsIGxlbikge1xuICAgICAgICBpZiAoaWR4ID09PSB2b2lkIDApIHsgaWR4ID0gMDsgfVxuICAgICAgICBpZiAobGVuID09PSB2b2lkIDApIHsgbGVuID0gc3RyLmxlbmd0aDsgfVxuICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgdGhpcy5pZHggPSBpZHg7XG4gICAgICAgIHRoaXMubGVuID0gbGVuO1xuICAgIH1cbiAgICBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGVbaXRlcmF0b3JfMS5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcyk7IH07XG4gICAgU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkeCA8IHRoaXMubGVuID8ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zdHIuY2hhckF0KHRoaXMuaWR4KyspXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFN0cmluZ0l0ZXJhdG9yO1xufSgpKTtcbnZhciBBcnJheUl0ZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBcnJheUl0ZXJhdG9yKGFyciwgaWR4LCBsZW4pIHtcbiAgICAgICAgaWYgKGlkeCA9PT0gdm9pZCAwKSB7IGlkeCA9IDA7IH1cbiAgICAgICAgaWYgKGxlbiA9PT0gdm9pZCAwKSB7IGxlbiA9IHRvTGVuZ3RoKGFycik7IH1cbiAgICAgICAgdGhpcy5hcnIgPSBhcnI7XG4gICAgICAgIHRoaXMuaWR4ID0gaWR4O1xuICAgICAgICB0aGlzLmxlbiA9IGxlbjtcbiAgICB9XG4gICAgQXJyYXlJdGVyYXRvci5wcm90b3R5cGVbaXRlcmF0b3JfMS5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgIEFycmF5SXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkeCA8IHRoaXMubGVuID8ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5hcnJbdGhpcy5pZHgrK11cbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIGRvbmU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gQXJyYXlJdGVyYXRvcjtcbn0oKSk7XG5mdW5jdGlvbiBnZXRJdGVyYXRvcihvYmopIHtcbiAgICB2YXIgaSA9IG9ialtpdGVyYXRvcl8xLml0ZXJhdG9yXTtcbiAgICBpZiAoIWkgJiYgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdJdGVyYXRvcihvYmopO1xuICAgIH1cbiAgICBpZiAoIWkgJiYgb2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJyYXlJdGVyYXRvcihvYmopO1xuICAgIH1cbiAgICBpZiAoIWkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb2JqZWN0IGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqW2l0ZXJhdG9yXzEuaXRlcmF0b3JdKCk7XG59XG52YXIgbWF4U2FmZUludGVnZXIgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuZnVuY3Rpb24gdG9MZW5ndGgobykge1xuICAgIHZhciBsZW4gPSArby5sZW5ndGg7XG4gICAgaWYgKGlzTmFOKGxlbikpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChsZW4gPT09IDAgfHwgIW51bWJlcklzRmluaXRlKGxlbikpIHtcbiAgICAgICAgcmV0dXJuIGxlbjtcbiAgICB9XG4gICAgbGVuID0gc2lnbihsZW4pICogTWF0aC5mbG9vcihNYXRoLmFicyhsZW4pKTtcbiAgICBpZiAobGVuIDw9IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChsZW4gPiBtYXhTYWZlSW50ZWdlcikge1xuICAgICAgICByZXR1cm4gbWF4U2FmZUludGVnZXI7XG4gICAgfVxuICAgIHJldHVybiBsZW47XG59XG5mdW5jdGlvbiBudW1iZXJJc0Zpbml0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHJvb3RfMS5yb290LmlzRmluaXRlKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHNpZ24odmFsdWUpIHtcbiAgICB2YXIgdmFsdWVBc051bWJlciA9ICt2YWx1ZTtcbiAgICBpZiAodmFsdWVBc051bWJlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdmFsdWVBc051bWJlcjtcbiAgICB9XG4gICAgaWYgKGlzTmFOKHZhbHVlQXNOdW1iZXIpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZUFzTnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVBc051bWJlciA8IDAgPyAtMSA6IDE7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JdGVyYXRvck9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgbm9vcF8xID0gcmVxdWlyZSgnLi4vdXRpbC9ub29wJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqIEBoaWRlIHRydWVcbiAqL1xudmFyIE5ldmVyT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE5ldmVyT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBOZXZlck9ic2VydmFibGUoKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBubyBpdGVtcyB0byB0aGUgT2JzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+QW4gT2JzZXJ2YWJsZSB0aGF0IG5ldmVyIGVtaXRzIGFueXRoaW5nLjwvc3Bhbj5cbiAgICAgKlxuICAgICAqIDxpbWcgc3JjPVwiLi9pbWcvbmV2ZXIucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gICAgICpcbiAgICAgKiBUaGlzIHN0YXRpYyBvcGVyYXRvciBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIGEgc2ltcGxlIE9ic2VydmFibGUgdGhhdCBlbWl0c1xuICAgICAqIG5laXRoZXIgdmFsdWVzIG5vciBlcnJvcnMgbm9yIHRoZSBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4gSXQgY2FuIGJlIHVzZWRcbiAgICAgKiBmb3IgdGVzdGluZyBwdXJwb3NlcyBvciBmb3IgY29tcG9zaW5nIHdpdGggb3RoZXIgT2JzZXJ2YWJsZXMuIFBsZWFzZSBub3RlXG4gICAgICogdGhhdCBieSBuZXZlciBlbWl0dGluZyBhIGNvbXBsZXRlIG5vdGlmaWNhdGlvbiwgdGhpcyBPYnNlcnZhYmxlIGtlZXBzIHRoZVxuICAgICAqIHN1YnNjcmlwdGlvbiBmcm9tIGJlaW5nIGRpc3Bvc2VkIGF1dG9tYXRpY2FsbHkuIFN1YnNjcmlwdGlvbnMgbmVlZCB0byBiZVxuICAgICAqIG1hbnVhbGx5IGRpc3Bvc2VkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCB0aGUgbnVtYmVyIDcsIHRoZW4gbmV2ZXIgZW1pdCBhbnl0aGluZyBlbHNlIChub3QgZXZlbiBjb21wbGV0ZSkuPC9jYXB0aW9uPlxuICAgICAqIGZ1bmN0aW9uIGluZm8oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnV2lsbCBub3QgYmUgY2FsbGVkJyk7XG4gICAgICogfVxuICAgICAqIHZhciByZXN1bHQgPSBSeC5PYnNlcnZhYmxlLm5ldmVyKCkuc3RhcnRXaXRoKDcpO1xuICAgICAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSwgaW5mbywgaW5mbyk7XG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBjcmVhdGV9XG4gICAgICogQHNlZSB7QGxpbmsgZW1wdHl9XG4gICAgICogQHNlZSB7QGxpbmsgb2Z9XG4gICAgICogQHNlZSB7QGxpbmsgdGhyb3d9XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBIFwibmV2ZXJcIiBPYnNlcnZhYmxlOiBuZXZlciBlbWl0cyBhbnl0aGluZy5cbiAgICAgKiBAc3RhdGljIHRydWVcbiAgICAgKiBAbmFtZSBuZXZlclxuICAgICAqIEBvd25lciBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgTmV2ZXJPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOZXZlck9ic2VydmFibGUoKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBOZXZlck9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBub29wXzEubm9vcCgpO1xuICAgIH07XG4gICAgcmV0dXJuIE5ldmVyT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuTmV2ZXJPYnNlcnZhYmxlID0gTmV2ZXJPYnNlcnZhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmV2ZXJPYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vT2JzZXJ2YWJsZScpO1xuZnVuY3Rpb24gZGlzcGF0Y2goc3RhdGUpIHtcbiAgICB2YXIgb2JqID0gc3RhdGUub2JqLCBrZXlzID0gc3RhdGUua2V5cywgbGVuZ3RoID0gc3RhdGUubGVuZ3RoLCBpbmRleCA9IHN0YXRlLmluZGV4LCBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlcjtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgIHN1YnNjcmliZXIubmV4dChba2V5LCBvYmpba2V5XV0pO1xuICAgIHN0YXRlLmluZGV4ID0gaW5kZXggKyAxO1xuICAgIHRoaXMuc2NoZWR1bGUoc3RhdGUpO1xufVxuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKiBAaGlkZSB0cnVlXG4gKi9cbnZhciBQYWlyc09ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQYWlyc09ic2VydmFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFpcnNPYnNlcnZhYmxlKG9iaiwgc2NoZWR1bGVyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLm9iaiA9IG9iajtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYW4gb2JzZXJ2YWJsZSBzZXF1ZW5jZSBvZiBba2V5LCB2YWx1ZV0gcGFpcnNcbiAgICAgKiB1c2luZyBhbiBvcHRpb25hbCBJU2NoZWR1bGVyIHRvIGVudW1lcmF0ZSB0aGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+Q29udmVydHMgYSBqYXZhc2NyaXB0IG9iamVjdCB0byBhbiBPYnNlcnZhYmxlPC9jYXB0aW9uPlxuICAgICAqIHZhciBvYmogPSB7XG4gICAgICogICBmb286IDQyLFxuICAgICAqICAgYmFyOiA1NixcbiAgICAgKiAgIGJhejogNzhcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIHNvdXJjZSA9IFJ4Lk9ic2VydmFibGUucGFpcnMob2JqKTtcbiAgICAgKlxuICAgICAqIHZhciBzdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKFxuICAgICAqICAgZnVuY3Rpb24gKHgpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ05leHQ6ICVzJywgeCk7XG4gICAgICogICB9LFxuICAgICAqICAgZnVuY3Rpb24gKGVycikge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnRXJyb3I6ICVzJywgZXJyKTtcbiAgICAgKiAgIH0sXG4gICAgICogICBmdW5jdGlvbiAoKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdDb21wbGV0ZWQnKTtcbiAgICAgKiAgIH0pO1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGluc3BlY3QgYW5kIHR1cm4gaW50byBhblxuICAgICAqIE9ic2VydmFibGUgc2VxdWVuY2UuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXJdIEFuIG9wdGlvbmFsIElTY2hlZHVsZXIgdG8gcnVuIHRoZVxuICAgICAqIGVudW1lcmF0aW9uIG9mIHRoZSBpbnB1dCBzZXF1ZW5jZSBvbi5cbiAgICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8QXJyYXk8c3RyaW5nIHwgVD4+KX0gQW4gb2JzZXJ2YWJsZSBzZXF1ZW5jZSBvZlxuICAgICAqIFtrZXksIHZhbHVlXSBwYWlycyBmcm9tIHRoZSBvYmplY3QuXG4gICAgICovXG4gICAgUGFpcnNPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChvYmosIHNjaGVkdWxlcikge1xuICAgICAgICByZXR1cm4gbmV3IFBhaXJzT2JzZXJ2YWJsZShvYmosIHNjaGVkdWxlcik7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gUGFpcnNPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywga2V5cyA9IF9hLmtleXMsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICBpZiAoc2NoZWR1bGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoLCAwLCB7XG4gICAgICAgICAgICAgICAgb2JqOiB0aGlzLm9iaiwga2V5czoga2V5cywgbGVuZ3RoOiBsZW5ndGgsIGluZGV4OiAwLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpZHhdO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChba2V5LCB0aGlzLm9ialtrZXldXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBQYWlyc09ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLlBhaXJzT2JzZXJ2YWJsZSA9IFBhaXJzT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBhaXJzT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIHJvb3RfMSA9IHJlcXVpcmUoJy4uL3V0aWwvcm9vdCcpO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgUHJvbWlzZU9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQcm9taXNlT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBQcm9taXNlT2JzZXJ2YWJsZShwcm9taXNlLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIFByb21pc2UgdG8gYW4gT2JzZXJ2YWJsZS5cbiAgICAgKlxuICAgICAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5SZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBqdXN0IGVtaXRzIHRoZSBQcm9taXNlJ3NcbiAgICAgKiByZXNvbHZlZCB2YWx1ZSwgdGhlbiBjb21wbGV0ZXMuPC9zcGFuPlxuICAgICAqXG4gICAgICogQ29udmVydHMgYW4gRVMyMDE1IFByb21pc2Ugb3IgYSBQcm9taXNlcy9BKyBzcGVjIGNvbXBsaWFudCBQcm9taXNlIHRvIGFuXG4gICAgICogT2JzZXJ2YWJsZS4gSWYgdGhlIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhIHZhbHVlLCB0aGUgb3V0cHV0IE9ic2VydmFibGVcbiAgICAgKiBlbWl0cyB0aGF0IHJlc29sdmVkIHZhbHVlIGFzIGEgYG5leHRgLCBhbmQgdGhlbiBjb21wbGV0ZXMuIElmIHRoZSBQcm9taXNlXG4gICAgICogaXMgcmVqZWN0ZWQsIHRoZW4gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGVtaXRzIHRoZSBjb3JyZXNwb25kaW5nIEVycm9yLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+Q29udmVydCB0aGUgUHJvbWlzZSByZXR1cm5lZCBieSBGZXRjaCB0byBhbiBPYnNlcnZhYmxlPC9jYXB0aW9uPlxuICAgICAqIHZhciByZXN1bHQgPSBSeC5PYnNlcnZhYmxlLmZyb21Qcm9taXNlKGZldGNoKCdodHRwOi8vbXlzZXJ2ZXIuY29tLycpKTtcbiAgICAgKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCksIGUgPT4gY29uc29sZS5lcnJvcihlKSk7XG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBiaW5kQ2FsbGJhY2t9XG4gICAgICogQHNlZSB7QGxpbmsgZnJvbX1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvbWlzZUxpa2U8VD59IHByb21pc2UgVGhlIHByb21pc2UgdG8gYmUgY29udmVydGVkLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyXSBBbiBvcHRpb25hbCBJU2NoZWR1bGVyIHRvIHVzZSBmb3Igc2NoZWR1bGluZ1xuICAgICAqIHRoZSBkZWxpdmVyeSBvZiB0aGUgcmVzb2x2ZWQgdmFsdWUgKG9yIHRoZSByZWplY3Rpb24pLlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgd2hpY2ggd3JhcHMgdGhlIFByb21pc2UuXG4gICAgICogQHN0YXRpYyB0cnVlXG4gICAgICogQG5hbWUgZnJvbVByb21pc2VcbiAgICAgKiBAb3duZXIgT2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIFByb21pc2VPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChwcm9taXNlLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlT2JzZXJ2YWJsZShwcm9taXNlLCBzY2hlZHVsZXIpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFByb21pc2VPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKHNjaGVkdWxlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNTY2FsYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2lzU2NhbGFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4obnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2NhcGUgdGhlIHByb21pc2UgdHJhcCwgdGhyb3cgdW5oYW5kbGVkIGVycm9yc1xuICAgICAgICAgICAgICAgICAgICByb290XzEucm9vdC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhyb3cgZXJyOyB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1NjYWxhcikge1xuICAgICAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaE5leHQsIDAsIHsgdmFsdWU6IHRoaXMudmFsdWUsIHN1YnNjcmliZXI6IHN1YnNjcmliZXIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5faXNTY2FsYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hOZXh0LCAwLCB7IHZhbHVlOiB2YWx1ZSwgc3Vic2NyaWJlcjogc3Vic2NyaWJlciB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaEVycm9yLCAwLCB7IGVycjogZXJyLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHRoZSBwcm9taXNlIHRyYXAsIHRocm93IHVuaGFuZGxlZCBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgcm9vdF8xLnJvb3Quc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRocm93IGVycjsgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBQcm9taXNlT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuUHJvbWlzZU9ic2VydmFibGUgPSBQcm9taXNlT2JzZXJ2YWJsZTtcbmZ1bmN0aW9uIGRpc3BhdGNoTmV4dChhcmcpIHtcbiAgICB2YXIgdmFsdWUgPSBhcmcudmFsdWUsIHN1YnNjcmliZXIgPSBhcmcuc3Vic2NyaWJlcjtcbiAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkaXNwYXRjaEVycm9yKGFyZykge1xuICAgIHZhciBlcnIgPSBhcmcuZXJyLCBzdWJzY3JpYmVyID0gYXJnLnN1YnNjcmliZXI7XG4gICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UHJvbWlzZU9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqIEBoaWRlIHRydWVcbiAqL1xudmFyIFJhbmdlT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJhbmdlT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSYW5nZU9ic2VydmFibGUoc3RhcnQsIGNvdW50LCBzY2hlZHVsZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgdGhpcy5fY291bnQgPSBjb3VudDtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgc2VxdWVuY2Ugb2YgbnVtYmVycyB3aXRoaW4gYSBzcGVjaWZpZWRcbiAgICAgKiByYW5nZS5cbiAgICAgKlxuICAgICAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbWl0cyBhIHNlcXVlbmNlIG9mIG51bWJlcnMgaW4gYSByYW5nZS48L3NwYW4+XG4gICAgICpcbiAgICAgKiA8aW1nIHNyYz1cIi4vaW1nL3JhbmdlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAqXG4gICAgICogYHJhbmdlYCBvcGVyYXRvciBlbWl0cyBhIHJhbmdlIG9mIHNlcXVlbnRpYWwgaW50ZWdlcnMsIGluIG9yZGVyLCB3aGVyZSB5b3VcbiAgICAgKiBzZWxlY3QgdGhlIGBzdGFydGAgb2YgdGhlIHJhbmdlIGFuZCBpdHMgYGxlbmd0aGAuIEJ5IGRlZmF1bHQsIHVzZXMgbm9cbiAgICAgKiBJU2NoZWR1bGVyIGFuZCBqdXN0IGRlbGl2ZXJzIHRoZSBub3RpZmljYXRpb25zIHN5bmNocm9ub3VzbHksIGJ1dCBtYXkgdXNlXG4gICAgICogYW4gb3B0aW9uYWwgSVNjaGVkdWxlciB0byByZWd1bGF0ZSB0aG9zZSBkZWxpdmVyaWVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdHMgdGhlIG51bWJlcnMgMSB0byAxMDwvY2FwdGlvbj5cbiAgICAgKiB2YXIgbnVtYmVycyA9IFJ4Lk9ic2VydmFibGUucmFuZ2UoMSwgMTApO1xuICAgICAqIG51bWJlcnMuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgdGltZXJ9XG4gICAgICogQHNlZSB7QGxpbmsgaW50ZXJ2YWx9XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW50ZWdlciBpbiB0aGUgc2VxdWVuY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb3VudD0wXSBUaGUgbnVtYmVyIG9mIHNlcXVlbnRpYWwgaW50ZWdlcnMgdG8gZ2VuZXJhdGUuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXJdIEEge0BsaW5rIElTY2hlZHVsZXJ9IHRvIHVzZSBmb3Igc2NoZWR1bGluZ1xuICAgICAqIHRoZSBlbWlzc2lvbnMgb2YgdGhlIG5vdGlmaWNhdGlvbnMuXG4gICAgICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSBvZiBudW1iZXJzIHRoYXQgZW1pdHMgYSBmaW5pdGUgcmFuZ2Ugb2ZcbiAgICAgKiBzZXF1ZW50aWFsIGludGVnZXJzLlxuICAgICAqIEBzdGF0aWMgdHJ1ZVxuICAgICAqIEBuYW1lIHJhbmdlXG4gICAgICogQG93bmVyIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBSYW5nZU9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN0YXJ0LCBjb3VudCwgc2NoZWR1bGVyKSB7XG4gICAgICAgIGlmIChzdGFydCA9PT0gdm9pZCAwKSB7IHN0YXJ0ID0gMDsgfVxuICAgICAgICBpZiAoY291bnQgPT09IHZvaWQgMCkgeyBjb3VudCA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZU9ic2VydmFibGUoc3RhcnQsIGNvdW50LCBzY2hlZHVsZXIpO1xuICAgIH07XG4gICAgUmFuZ2VPYnNlcnZhYmxlLmRpc3BhdGNoID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBzdGFydCA9IHN0YXRlLnN0YXJ0LCBpbmRleCA9IHN0YXRlLmluZGV4LCBjb3VudCA9IHN0YXRlLmNvdW50LCBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlcjtcbiAgICAgICAgaWYgKGluZGV4ID49IGNvdW50KSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHN0YXJ0KTtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuaW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgIHN0YXRlLnN0YXJ0ID0gc3RhcnQgKyAxO1xuICAgICAgICB0aGlzLnNjaGVkdWxlKHN0YXRlKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBSYW5nZU9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0O1xuICAgICAgICB2YXIgY291bnQgPSB0aGlzLl9jb3VudDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoc2NoZWR1bGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKFJhbmdlT2JzZXJ2YWJsZS5kaXNwYXRjaCwgMCwge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCwgY291bnQ6IGNvdW50LCBzdGFydDogc3RhcnQsIHN1YnNjcmliZXI6IHN1YnNjcmliZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCsrID49IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChzdGFydCsrKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSYW5nZU9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLlJhbmdlT2JzZXJ2YWJsZSA9IFJhbmdlT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJhbmdlT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgU2NhbGFyT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNjYWxhck9ic2VydmFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2NhbGFyT2JzZXJ2YWJsZSh2YWx1ZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICB0aGlzLl9pc1NjYWxhciA9IHRydWU7XG4gICAgICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzU2NhbGFyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgU2NhbGFyT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAodmFsdWUsIHNjaGVkdWxlcikge1xuICAgICAgICByZXR1cm4gbmV3IFNjYWxhck9ic2VydmFibGUodmFsdWUsIHNjaGVkdWxlcik7XG4gICAgfTtcbiAgICBTY2FsYXJPYnNlcnZhYmxlLmRpc3BhdGNoID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBkb25lID0gc3RhdGUuZG9uZSwgdmFsdWUgPSBzdGF0ZS52YWx1ZSwgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXI7XG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGUoc3RhdGUpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFNjYWxhck9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoU2NhbGFyT2JzZXJ2YWJsZS5kaXNwYXRjaCwgMCwge1xuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLCB2YWx1ZTogdmFsdWUsIHN1YnNjcmliZXI6IHN1YnNjcmliZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTY2FsYXJPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5TY2FsYXJPYnNlcnZhYmxlID0gU2NhbGFyT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNjYWxhck9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgYXNhcF8xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzYXAnKTtcbnZhciBpc051bWVyaWNfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNOdW1lcmljJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqIEBoaWRlIHRydWVcbiAqL1xudmFyIFN1YnNjcmliZU9uT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZU9uT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVPbk9ic2VydmFibGUoc291cmNlLCBkZWxheVRpbWUsIHNjaGVkdWxlcikge1xuICAgICAgICBpZiAoZGVsYXlUaW1lID09PSB2b2lkIDApIHsgZGVsYXlUaW1lID0gMDsgfVxuICAgICAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXNhcF8xLmFzYXA7IH1cbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLmRlbGF5VGltZSA9IGRlbGF5VGltZTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIGlmICghaXNOdW1lcmljXzEuaXNOdW1lcmljKGRlbGF5VGltZSkgfHwgZGVsYXlUaW1lIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5kZWxheVRpbWUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2NoZWR1bGVyIHx8IHR5cGVvZiBzY2hlZHVsZXIuc2NoZWR1bGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVyID0gYXNhcF8xLmFzYXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgU3Vic2NyaWJlT25PYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlbGF5LCBzY2hlZHVsZXIpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc2FwXzEuYXNhcDsgfVxuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmliZU9uT2JzZXJ2YWJsZShzb3VyY2UsIGRlbGF5LCBzY2hlZHVsZXIpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlT25PYnNlcnZhYmxlLmRpc3BhdGNoID0gZnVuY3Rpb24gKGFyZykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJnLnNvdXJjZSwgc3Vic2NyaWJlciA9IGFyZy5zdWJzY3JpYmVyO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGQoc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gU3Vic2NyaWJlT25PYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGRlbGF5ID0gdGhpcy5kZWxheVRpbWU7XG4gICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKFN1YnNjcmliZU9uT2JzZXJ2YWJsZS5kaXNwYXRjaCwgZGVsYXksIHtcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZU9uT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuU3Vic2NyaWJlT25PYnNlcnZhYmxlID0gU3Vic2NyaWJlT25PYnNlcnZhYmxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3Vic2NyaWJlT25PYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgaXNOdW1lcmljXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzTnVtZXJpYycpO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG52YXIgaXNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNTY2hlZHVsZXInKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNEYXRlJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqIEBoaWRlIHRydWVcbiAqL1xudmFyIFRpbWVyT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRpbWVyT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUaW1lck9ic2VydmFibGUoZHVlVGltZSwgcGVyaW9kLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgaWYgKGR1ZVRpbWUgPT09IHZvaWQgMCkgeyBkdWVUaW1lID0gMDsgfVxuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5wZXJpb2QgPSAtMTtcbiAgICAgICAgdGhpcy5kdWVUaW1lID0gMDtcbiAgICAgICAgaWYgKGlzTnVtZXJpY18xLmlzTnVtZXJpYyhwZXJpb2QpKSB7XG4gICAgICAgICAgICB0aGlzLnBlcmlvZCA9IE51bWJlcihwZXJpb2QpIDwgMSAmJiAxIHx8IE51bWJlcihwZXJpb2QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIocGVyaW9kKSkge1xuICAgICAgICAgICAgc2NoZWR1bGVyID0gcGVyaW9kO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihzY2hlZHVsZXIpKSB7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICB0aGlzLmR1ZVRpbWUgPSBpc0RhdGVfMS5pc0RhdGUoZHVlVGltZSkgP1xuICAgICAgICAgICAgKCtkdWVUaW1lIC0gdGhpcy5zY2hlZHVsZXIubm93KCkpIDpcbiAgICAgICAgICAgIGR1ZVRpbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gT2JzZXJ2YWJsZSB0aGF0IHN0YXJ0cyBlbWl0dGluZyBhZnRlciBhbiBgaW5pdGlhbERlbGF5YCBhbmRcbiAgICAgKiBlbWl0cyBldmVyIGluY3JlYXNpbmcgbnVtYmVycyBhZnRlciBlYWNoIGBwZXJpb2RgIG9mIHRpbWUgdGhlcmVhZnRlci5cbiAgICAgKlxuICAgICAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdHMgbGlrZSB7QGxpbmsgaW50ZXJ2YWx9LCBidXQgeW91IGNhbiBzcGVjaWZ5IHdoZW5cbiAgICAgKiBzaG91bGQgdGhlIGVtaXNzaW9ucyBzdGFydC48L3NwYW4+XG4gICAgICpcbiAgICAgKiA8aW1nIHNyYz1cIi4vaW1nL3RpbWVyLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAqXG4gICAgICogYHRpbWVyYCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBpbmZpbml0ZSBzZXF1ZW5jZSBvZiBhc2NlbmRpbmdcbiAgICAgKiBpbnRlZ2Vycywgd2l0aCBhIGNvbnN0YW50IGludGVydmFsIG9mIHRpbWUsIGBwZXJpb2RgIG9mIHlvdXIgY2hvb3NpbmdcbiAgICAgKiBiZXR3ZWVuIHRob3NlIGVtaXNzaW9ucy4gVGhlIGZpcnN0IGVtaXNzaW9uIGhhcHBlbnMgYWZ0ZXIgdGhlIHNwZWNpZmllZFxuICAgICAqIGBpbml0aWFsRGVsYXlgLiBUaGUgaW5pdGlhbCBkZWxheSBtYXkgYmUgYSB7QGxpbmsgRGF0ZX0uIEJ5IGRlZmF1bHQsIHRoaXNcbiAgICAgKiBvcGVyYXRvciB1c2VzIHRoZSBgYXN5bmNgIElTY2hlZHVsZXIgdG8gcHJvdmlkZSBhIG5vdGlvbiBvZiB0aW1lLCBidXQgeW91XG4gICAgICogbWF5IHBhc3MgYW55IElTY2hlZHVsZXIgdG8gaXQuIElmIGBwZXJpb2RgIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBvdXRwdXRcbiAgICAgKiBPYnNlcnZhYmxlIGVtaXRzIG9ubHkgb25lIHZhbHVlLCBgMGAuIE90aGVyd2lzZSwgaXQgZW1pdHMgYW4gaW5maW5pdGVcbiAgICAgKiBzZXF1ZW5jZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXRzIGFzY2VuZGluZyBudW1iZXJzLCBvbmUgZXZlcnkgc2Vjb25kICgxMDAwbXMpLCBzdGFydGluZyBhZnRlciAzIHNlY29uZHM8L2NhcHRpb24+XG4gICAgICogdmFyIG51bWJlcnMgPSBSeC5PYnNlcnZhYmxlLnRpbWVyKDMwMDAsIDEwMDApO1xuICAgICAqIG51bWJlcnMuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdHMgb25lIG51bWJlciBhZnRlciBmaXZlIHNlY29uZHM8L2NhcHRpb24+XG4gICAgICogdmFyIG51bWJlcnMgPSBSeC5PYnNlcnZhYmxlLnRpbWVyKDUwMDApO1xuICAgICAqIG51bWJlcnMuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaW50ZXJ2YWx9XG4gICAgICogQHNlZSB7QGxpbmsgZGVsYXl9XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcnxEYXRlfSBpbml0aWFsRGVsYXkgVGhlIGluaXRpYWwgZGVsYXkgdGltZSB0byB3YWl0IGJlZm9yZVxuICAgICAqIGVtaXR0aW5nIHRoZSBmaXJzdCB2YWx1ZSBvZiBgMGAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwZXJpb2RdIFRoZSBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIGVtaXNzaW9ucyBvZiB0aGVcbiAgICAgKiBzdWJzZXF1ZW50IG51bWJlcnMuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXI9YXN5bmNdIFRoZSBJU2NoZWR1bGVyIHRvIHVzZSBmb3Igc2NoZWR1bGluZ1xuICAgICAqIHRoZSBlbWlzc2lvbiBvZiB2YWx1ZXMsIGFuZCBwcm92aWRpbmcgYSBub3Rpb24gb2YgXCJ0aW1lXCIuXG4gICAgICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgYDBgIGFmdGVyIHRoZVxuICAgICAqIGBpbml0aWFsRGVsYXlgIGFuZCBldmVyIGluY3JlYXNpbmcgbnVtYmVycyBhZnRlciBlYWNoIGBwZXJpb2RgIG9mIHRpbWVcbiAgICAgKiB0aGVyZWFmdGVyLlxuICAgICAqIEBzdGF0aWMgdHJ1ZVxuICAgICAqIEBuYW1lIHRpbWVyXG4gICAgICogQG93bmVyIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBUaW1lck9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKGluaXRpYWxEZWxheSwgcGVyaW9kLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgaWYgKGluaXRpYWxEZWxheSA9PT0gdm9pZCAwKSB7IGluaXRpYWxEZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyBUaW1lck9ic2VydmFibGUoaW5pdGlhbERlbGF5LCBwZXJpb2QsIHNjaGVkdWxlcik7XG4gICAgfTtcbiAgICBUaW1lck9ic2VydmFibGUuZGlzcGF0Y2ggPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgsIHBlcmlvZCA9IHN0YXRlLnBlcmlvZCwgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXI7XG4gICAgICAgIHZhciBhY3Rpb24gPSB0aGlzO1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5kZXgpO1xuICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwZXJpb2QgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmluZGV4ID0gaW5kZXggKyAxO1xuICAgICAgICBhY3Rpb24uc2NoZWR1bGUoc3RhdGUsIHBlcmlvZCk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gVGltZXJPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgcGVyaW9kID0gX2EucGVyaW9kLCBkdWVUaW1lID0gX2EuZHVlVGltZSwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKFRpbWVyT2JzZXJ2YWJsZS5kaXNwYXRjaCwgZHVlVGltZSwge1xuICAgICAgICAgICAgaW5kZXg6IGluZGV4LCBwZXJpb2Q6IHBlcmlvZCwgc3Vic2NyaWJlcjogc3Vic2NyaWJlclxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBUaW1lck9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLlRpbWVyT2JzZXJ2YWJsZSA9IFRpbWVyT2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRpbWVyT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqIEBoaWRlIHRydWVcbiAqL1xudmFyIFVzaW5nT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFVzaW5nT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBVc2luZ09ic2VydmFibGUocmVzb3VyY2VGYWN0b3J5LCBvYnNlcnZhYmxlRmFjdG9yeSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZUZhY3RvcnkgPSByZXNvdXJjZUZhY3Rvcnk7XG4gICAgICAgIHRoaXMub2JzZXJ2YWJsZUZhY3RvcnkgPSBvYnNlcnZhYmxlRmFjdG9yeTtcbiAgICB9XG4gICAgVXNpbmdPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChyZXNvdXJjZUZhY3RvcnksIG9ic2VydmFibGVGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBuZXcgVXNpbmdPYnNlcnZhYmxlKHJlc291cmNlRmFjdG9yeSwgb2JzZXJ2YWJsZUZhY3RvcnkpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFVzaW5nT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHJlc291cmNlRmFjdG9yeSA9IF9hLnJlc291cmNlRmFjdG9yeSwgb2JzZXJ2YWJsZUZhY3RvcnkgPSBfYS5vYnNlcnZhYmxlRmFjdG9yeTtcbiAgICAgICAgdmFyIHJlc291cmNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnkoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVXNpbmdTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHJlc291cmNlLCBvYnNlcnZhYmxlRmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gVXNpbmdPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5Vc2luZ09ic2VydmFibGUgPSBVc2luZ09ic2VydmFibGU7XG52YXIgVXNpbmdTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVXNpbmdTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFVzaW5nU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcmVzb3VyY2UsIG9ic2VydmFibGVGYWN0b3J5KSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlO1xuICAgICAgICB0aGlzLm9ic2VydmFibGVGYWN0b3J5ID0gb2JzZXJ2YWJsZUZhY3Rvcnk7XG4gICAgICAgIGRlc3RpbmF0aW9uLmFkZChyZXNvdXJjZSk7XG4gICAgICAgIHRoaXMudHJ5VXNlKCk7XG4gICAgfVxuICAgIFVzaW5nU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5VXNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMub2JzZXJ2YWJsZUZhY3RvcnkuY2FsbCh0aGlzLCB0aGlzLnJlc291cmNlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHNvdXJjZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBVc2luZ1N1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VXNpbmdPYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEJvdW5kQ2FsbGJhY2tPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0JvdW5kQ2FsbGJhY2tPYnNlcnZhYmxlJyk7XG5leHBvcnRzLmJpbmRDYWxsYmFjayA9IEJvdW5kQ2FsbGJhY2tPYnNlcnZhYmxlXzEuQm91bmRDYWxsYmFja09ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZENhbGxiYWNrLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEJvdW5kTm9kZUNhbGxiYWNrT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9Cb3VuZE5vZGVDYWxsYmFja09ic2VydmFibGUnKTtcbmV4cG9ydHMuYmluZE5vZGVDYWxsYmFjayA9IEJvdW5kTm9kZUNhbGxiYWNrT2JzZXJ2YWJsZV8xLkJvdW5kTm9kZUNhbGxiYWNrT2JzZXJ2YWJsZS5jcmVhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iaW5kTm9kZUNhbGxiYWNrLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzU2NoZWR1bGVyJyk7XG52YXIgaXNBcnJheV8xID0gcmVxdWlyZSgnLi4vdXRpbC9pc0FycmF5Jyk7XG52YXIgQXJyYXlPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0FycmF5T2JzZXJ2YWJsZScpO1xudmFyIGNvbWJpbmVMYXRlc3RfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0Jyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBPYnNlcnZhYmxlcyB0byBjcmVhdGUgYW4gT2JzZXJ2YWJsZSB3aG9zZSB2YWx1ZXMgYXJlXG4gKiBjYWxjdWxhdGVkIGZyb20gdGhlIGxhdGVzdCB2YWx1ZXMgb2YgZWFjaCBvZiBpdHMgaW5wdXQgT2JzZXJ2YWJsZXMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPldoZW5ldmVyIGFueSBpbnB1dCBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUsIGl0XG4gKiBjb21wdXRlcyBhIGZvcm11bGEgdXNpbmcgdGhlIGxhdGVzdCB2YWx1ZXMgZnJvbSBhbGwgdGhlIGlucHV0cywgdGhlbiBlbWl0c1xuICogdGhlIG91dHB1dCBvZiB0aGF0IGZvcm11bGEuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvY29tYmluZUxhdGVzdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgY29tYmluZUxhdGVzdGAgY29tYmluZXMgdGhlIHZhbHVlcyBmcm9tIGFsbCB0aGUgT2JzZXJ2YWJsZXMgcGFzc2VkIGFzXG4gKiBhcmd1bWVudHMuIFRoaXMgaXMgZG9uZSBieSBzdWJzY3JpYmluZyB0byBlYWNoIE9ic2VydmFibGUgaW4gb3JkZXIgYW5kLFxuICogd2hlbmV2ZXIgYW55IE9ic2VydmFibGUgZW1pdHMsIGNvbGxlY3RpbmcgYW4gYXJyYXkgb2YgdGhlIG1vc3QgcmVjZW50XG4gKiB2YWx1ZXMgZnJvbSBlYWNoIE9ic2VydmFibGUuIFNvIGlmIHlvdSBwYXNzIGBuYCBPYnNlcnZhYmxlcyB0byBvcGVyYXRvcixcbiAqIHJldHVybmVkIE9ic2VydmFibGUgd2lsbCBhbHdheXMgZW1pdCBhbiBhcnJheSBvZiBgbmAgdmFsdWVzLCBpbiBvcmRlclxuICogY29ycmVzcG9uZGluZyB0byBvcmRlciBvZiBwYXNzZWQgT2JzZXJ2YWJsZXMgKHZhbHVlIGZyb20gdGhlIGZpcnN0IE9ic2VydmFibGVcbiAqIG9uIHRoZSBmaXJzdCBwbGFjZSBhbmQgc28gb24pLlxuICpcbiAqIFN0YXRpYyB2ZXJzaW9uIG9mIGBjb21iaW5lTGF0ZXN0YCBhY2NlcHRzIGVpdGhlciBhbiBhcnJheSBvZiBPYnNlcnZhYmxlc1xuICogb3IgZWFjaCBPYnNlcnZhYmxlIGNhbiBiZSBwdXQgZGlyZWN0bHkgYXMgYW4gYXJndW1lbnQuIE5vdGUgdGhhdCBhcnJheSBvZlxuICogT2JzZXJ2YWJsZXMgaXMgZ29vZCBjaG9pY2UsIGlmIHlvdSBkb24ndCBrbm93IGJlZm9yZWhhbmQgaG93IG1hbnkgT2JzZXJ2YWJsZXNcbiAqIHlvdSB3aWxsIGNvbWJpbmUuIFBhc3NpbmcgZW1wdHkgYXJyYXkgd2lsbCByZXN1bHQgaW4gT2JzZXJ2YWJsZSB0aGF0XG4gKiBjb21wbGV0ZXMgaW1tZWRpYXRlbHkuXG4gKlxuICogVG8gZW5zdXJlIG91dHB1dCBhcnJheSBoYXMgYWx3YXlzIHRoZSBzYW1lIGxlbmd0aCwgYGNvbWJpbmVMYXRlc3RgIHdpbGxcbiAqIGFjdHVhbGx5IHdhaXQgZm9yIGFsbCBpbnB1dCBPYnNlcnZhYmxlcyB0byBlbWl0IGF0IGxlYXN0IG9uY2UsXG4gKiBiZWZvcmUgaXQgc3RhcnRzIGVtaXR0aW5nIHJlc3VsdHMuIFRoaXMgbWVhbnMgaWYgc29tZSBPYnNlcnZhYmxlIGVtaXRzXG4gKiB2YWx1ZXMgYmVmb3JlIG90aGVyIE9ic2VydmFibGVzIHN0YXJ0ZWQgZW1pdHRpbmcsIGFsbCB0aGF0IHZhbHVlcyBidXQgbGFzdFxuICogd2lsbCBiZSBsb3N0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaXMgc29tZSBPYnNlcnZhYmxlIGRvZXMgbm90IGVtaXQgdmFsdWUgYnV0XG4gKiBjb21wbGV0ZXMsIHJlc3VsdGluZyBPYnNlcnZhYmxlIHdpbGwgY29tcGxldGUgYXQgdGhlIHNhbWUgbW9tZW50IHdpdGhvdXRcbiAqIGVtaXR0aW5nIGFueXRoaW5nLCBzaW5jZSBpdCB3aWxsIGJlIG5vdyBpbXBvc3NpYmxlIHRvIGluY2x1ZGUgdmFsdWUgZnJvbVxuICogY29tcGxldGVkIE9ic2VydmFibGUgaW4gcmVzdWx0aW5nIGFycmF5LiBBbHNvLCBpZiBzb21lIGlucHV0IE9ic2VydmFibGUgZG9lc1xuICogbm90IGVtaXQgYW55IHZhbHVlIGFuZCBuZXZlciBjb21wbGV0ZXMsIGBjb21iaW5lTGF0ZXN0YCB3aWxsIGFsc28gbmV2ZXIgZW1pdFxuICogYW5kIG5ldmVyIGNvbXBsZXRlLCBzaW5jZSwgYWdhaW4sIGl0IHdpbGwgd2FpdCBmb3IgYWxsIHN0cmVhbXMgdG8gZW1pdCBzb21lXG4gKiB2YWx1ZS5cbiAqXG4gKiBJZiBhdCBsZWFzdCBvbmUgT2JzZXJ2YWJsZSB3YXMgcGFzc2VkIHRvIGBjb21iaW5lTGF0ZXN0YCBhbmQgYWxsIHBhc3NlZCBPYnNlcnZhYmxlc1xuICogZW1pdHRlZCBzb21ldGhpbmcsIHJlc3VsdGluZyBPYnNlcnZhYmxlIHdpbGwgY29tcGxldGUgd2hlbiBhbGwgY29tYmluZWRcbiAqIHN0cmVhbXMgY29tcGxldGUuIFNvIGV2ZW4gaWYgc29tZSBPYnNlcnZhYmxlIGNvbXBsZXRlcywgcmVzdWx0IG9mXG4gKiBgY29tYmluZUxhdGVzdGAgd2lsbCBzdGlsbCBlbWl0IHZhbHVlcyB3aGVuIG90aGVyIE9ic2VydmFibGVzIGRvLiBJbiBjYXNlXG4gKiBvZiBjb21wbGV0ZWQgT2JzZXJ2YWJsZSwgaXRzIHZhbHVlIGZyb20gbm93IG9uIHdpbGwgYWx3YXlzIGJlIHRoZSBsYXN0XG4gKiBlbWl0dGVkIHZhbHVlLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW55IE9ic2VydmFibGUgZXJyb3JzLCBgY29tYmluZUxhdGVzdGBcbiAqIHdpbGwgZXJyb3IgaW1tZWRpYXRlbHkgYXMgd2VsbCwgYW5kIGFsbCBvdGhlciBPYnNlcnZhYmxlcyB3aWxsIGJlIHVuc3Vic2NyaWJlZC5cbiAqXG4gKiBgY29tYmluZUxhdGVzdGAgYWNjZXB0cyBhcyBvcHRpb25hbCBwYXJhbWV0ZXIgYHByb2plY3RgIGZ1bmN0aW9uLCB3aGljaCB0YWtlc1xuICogYXMgYXJndW1lbnRzIGFsbCB2YWx1ZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBlbWl0dGVkIGJ5IHJlc3VsdGluZyBPYnNlcnZhYmxlLlxuICogYHByb2plY3RgIGNhbiByZXR1cm4gYW55IGtpbmQgb2YgdmFsdWUsIHdoaWNoIHdpbGwgYmUgdGhlbiBlbWl0dGVkIGJ5IE9ic2VydmFibGVcbiAqIGluc3RlYWQgb2YgZGVmYXVsdCBhcnJheS4gTm90ZSB0aGF0IGBwcm9qZWN0YCBkb2VzIG5vdCB0YWtlIGFzIGFyZ3VtZW50IHRoYXQgYXJyYXlcbiAqIG9mIHZhbHVlcywgYnV0IHZhbHVlcyB0aGVtc2VsdmVzLiBUaGF0IG1lYW5zIGRlZmF1bHQgYHByb2plY3RgIGNhbiBiZSBpbWFnaW5lZFxuICogYXMgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbGwgaXRzIGFyZ3VtZW50cyBhbmQgcHV0cyB0aGVtIGludG8gYW4gYXJyYXkuXG4gKlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbWJpbmUgdHdvIHRpbWVyIE9ic2VydmFibGVzPC9jYXB0aW9uPlxuICogY29uc3QgZmlyc3RUaW1lciA9IFJ4Lk9ic2VydmFibGUudGltZXIoMCwgMTAwMCk7IC8vIGVtaXQgMCwgMSwgMi4uLiBhZnRlciBldmVyeSBzZWNvbmQsIHN0YXJ0aW5nIGZyb20gbm93XG4gKiBjb25zdCBzZWNvbmRUaW1lciA9IFJ4Lk9ic2VydmFibGUudGltZXIoNTAwLCAxMDAwKTsgLy8gZW1pdCAwLCAxLCAyLi4uIGFmdGVyIGV2ZXJ5IHNlY29uZCwgc3RhcnRpbmcgMCw1cyBmcm9tIG5vd1xuICogY29uc3QgY29tYmluZWRUaW1lcnMgPSBSeC5PYnNlcnZhYmxlLmNvbWJpbmVMYXRlc3QoZmlyc3RUaW1lciwgc2Vjb25kVGltZXIpO1xuICogY29tYmluZWRUaW1lcnMuc3Vic2NyaWJlKHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSk7XG4gKiAvLyBMb2dzXG4gKiAvLyBbMCwgMF0gYWZ0ZXIgMC41c1xuICogLy8gWzEsIDBdIGFmdGVyIDFzXG4gKiAvLyBbMSwgMV0gYWZ0ZXIgMS41c1xuICogLy8gWzIsIDFdIGFmdGVyIDJzXG4gKlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbWJpbmUgYW4gYXJyYXkgb2YgT2JzZXJ2YWJsZXM8L2NhcHRpb24+XG4gKiBjb25zdCBvYnNlcnZhYmxlcyA9IFsxLCA1LCAxMF0ubWFwKFxuICogICBuID0+IFJ4Lk9ic2VydmFibGUub2YobikuZGVsYXkobiAqIDEwMDApLnN0YXJ0V2l0aCgwKSAvLyBlbWl0IDAgYW5kIHRoZW4gZW1pdCBuIGFmdGVyIG4gc2Vjb25kc1xuICogKTtcbiAqIGNvbnN0IGNvbWJpbmVkID0gUnguT2JzZXJ2YWJsZS5jb21iaW5lTGF0ZXN0KG9ic2VydmFibGVzKTtcbiAqIGNvbWJpbmVkLnN1YnNjcmliZSh2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSkpO1xuICogLy8gTG9nc1xuICogLy8gWzAsIDAsIDBdIGltbWVkaWF0ZWx5XG4gKiAvLyBbMSwgMCwgMF0gYWZ0ZXIgMXNcbiAqIC8vIFsxLCA1LCAwXSBhZnRlciA1c1xuICogLy8gWzEsIDUsIDEwXSBhZnRlciAxMHNcbiAqXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIHByb2plY3QgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgY2FsY3VsYXRlIHRoZSBCb2R5LU1hc3MgSW5kZXg8L2NhcHRpb24+XG4gKiB2YXIgd2VpZ2h0ID0gUnguT2JzZXJ2YWJsZS5vZig3MCwgNzIsIDc2LCA3OSwgNzUpO1xuICogdmFyIGhlaWdodCA9IFJ4Lk9ic2VydmFibGUub2YoMS43NiwgMS43NywgMS43OCk7XG4gKiB2YXIgYm1pID0gUnguT2JzZXJ2YWJsZS5jb21iaW5lTGF0ZXN0KHdlaWdodCwgaGVpZ2h0LCAodywgaCkgPT4gdyAvIChoICogaCkpO1xuICogYm1pLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKCdCTUkgaXMgJyArIHgpKTtcbiAqXG4gKiAvLyBXaXRoIG91dHB1dCB0byBjb25zb2xlOlxuICogLy8gQk1JIGlzIDI0LjIxMjI5MzM4ODQyOTc1M1xuICogLy8gQk1JIGlzIDIzLjkzOTQ4MDk5MjA1MjA5XG4gKiAvLyBCTUkgaXMgMjMuNjcxMjUzNjI5NTkyMjIyXG4gKlxuICpcbiAqIEBzZWUge0BsaW5rIGNvbWJpbmVBbGx9XG4gKiBAc2VlIHtAbGluayBtZXJnZX1cbiAqIEBzZWUge0BsaW5rIHdpdGhMYXRlc3RGcm9tfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBvYnNlcnZhYmxlMSBBbiBpbnB1dCBPYnNlcnZhYmxlIHRvIGNvbWJpbmUgd2l0aCBvdGhlciBPYnNlcnZhYmxlcy5cbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBvYnNlcnZhYmxlMiBBbiBpbnB1dCBPYnNlcnZhYmxlIHRvIGNvbWJpbmUgd2l0aCBvdGhlciBPYnNlcnZhYmxlcy5cbiAqIE1vcmUgdGhhbiBvbmUgaW5wdXQgT2JzZXJ2YWJsZXMgbWF5IGJlIGdpdmVuIGFzIGFyZ3VtZW50c1xuICogb3IgYW4gYXJyYXkgb2YgT2JzZXJ2YWJsZXMgbWF5IGJlIGdpdmVuIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtwcm9qZWN0XSBBbiBvcHRpb25hbCBmdW5jdGlvbiB0byBwcm9qZWN0IHRoZSB2YWx1ZXMgZnJvbVxuICogdGhlIGNvbWJpbmVkIGxhdGVzdCB2YWx1ZXMgaW50byBhIG5ldyB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1udWxsXSBUaGUgSVNjaGVkdWxlciB0byB1c2UgZm9yIHN1YnNjcmliaW5nIHRvXG4gKiBlYWNoIGlucHV0IE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIHByb2plY3RlZCB2YWx1ZXMgZnJvbSB0aGUgbW9zdCByZWNlbnRcbiAqIHZhbHVlcyBmcm9tIGVhY2ggaW5wdXQgT2JzZXJ2YWJsZSwgb3IgYW4gYXJyYXkgb2YgdGhlIG1vc3QgcmVjZW50IHZhbHVlcyBmcm9tXG4gKiBlYWNoIGlucHV0IE9ic2VydmFibGUuXG4gKiBAc3RhdGljIHRydWVcbiAqIEBuYW1lIGNvbWJpbmVMYXRlc3RcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVMYXRlc3QoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBwcm9qZWN0ID0gbnVsbDtcbiAgICB2YXIgc2NoZWR1bGVyID0gbnVsbDtcbiAgICBpZiAoaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihvYnNlcnZhYmxlc1tvYnNlcnZhYmxlcy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgc2NoZWR1bGVyID0gb2JzZXJ2YWJsZXMucG9wKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JzZXJ2YWJsZXNbb2JzZXJ2YWJsZXMubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvamVjdCA9IG9ic2VydmFibGVzLnBvcCgpO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgZmlyc3QgYW5kIG9ubHkgb3RoZXIgYXJndW1lbnQgYmVzaWRlcyB0aGUgcmVzdWx0U2VsZWN0b3IgaXMgYW4gYXJyYXlcbiAgICAvLyBhc3N1bWUgaXQncyBiZWVuIGNhbGxlZCB3aXRoIGBjb21iaW5lTGF0ZXN0KFtvYnMxLCBvYnMyLCBvYnMzXSwgcHJvamVjdClgXG4gICAgaWYgKG9ic2VydmFibGVzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5XzEuaXNBcnJheShvYnNlcnZhYmxlc1swXSkpIHtcbiAgICAgICAgb2JzZXJ2YWJsZXMgPSBvYnNlcnZhYmxlc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBcnJheU9ic2VydmFibGVfMS5BcnJheU9ic2VydmFibGUob2JzZXJ2YWJsZXMsIHNjaGVkdWxlcikubGlmdChuZXcgY29tYmluZUxhdGVzdF8xLkNvbWJpbmVMYXRlc3RPcGVyYXRvcihwcm9qZWN0KSk7XG59XG5leHBvcnRzLmNvbWJpbmVMYXRlc3QgPSBjb21iaW5lTGF0ZXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUxhdGVzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBpc1NjaGVkdWxlcl8xID0gcmVxdWlyZSgnLi4vdXRpbC9pc1NjaGVkdWxlcicpO1xudmFyIG9mXzEgPSByZXF1aXJlKCcuL29mJyk7XG52YXIgZnJvbV8xID0gcmVxdWlyZSgnLi9mcm9tJyk7XG52YXIgY29uY2F0QWxsXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvY29uY2F0QWxsJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBDcmVhdGVzIGFuIG91dHB1dCBPYnNlcnZhYmxlIHdoaWNoIHNlcXVlbnRpYWxseSBlbWl0cyBhbGwgdmFsdWVzIGZyb20gZ2l2ZW5cbiAqIE9ic2VydmFibGUgYW5kIHRoZW4gbW92ZXMgb24gdG8gdGhlIG5leHQuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbmNhdGVuYXRlcyBtdWx0aXBsZSBPYnNlcnZhYmxlcyB0b2dldGhlciBieVxuICogc2VxdWVudGlhbGx5IGVtaXR0aW5nIHRoZWlyIHZhbHVlcywgb25lIE9ic2VydmFibGUgYWZ0ZXIgdGhlIG90aGVyLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2NvbmNhdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgY29uY2F0YCBqb2lucyBtdWx0aXBsZSBPYnNlcnZhYmxlcyB0b2dldGhlciwgYnkgc3Vic2NyaWJpbmcgdG8gdGhlbSBvbmUgYXQgYSB0aW1lIGFuZFxuICogbWVyZ2luZyB0aGVpciByZXN1bHRzIGludG8gdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBZb3UgY2FuIHBhc3MgZWl0aGVyIGFuIGFycmF5IG9mXG4gKiBPYnNlcnZhYmxlcywgb3IgcHV0IHRoZW0gZGlyZWN0bHkgYXMgYXJndW1lbnRzLiBQYXNzaW5nIGFuIGVtcHR5IGFycmF5IHdpbGwgcmVzdWx0XG4gKiBpbiBPYnNlcnZhYmxlIHRoYXQgY29tcGxldGVzIGltbWVkaWF0ZWx5LlxuICpcbiAqIGBjb25jYXRgIHdpbGwgc3Vic2NyaWJlIHRvIGZpcnN0IGlucHV0IE9ic2VydmFibGUgYW5kIGVtaXQgYWxsIGl0cyB2YWx1ZXMsIHdpdGhvdXRcbiAqIGNoYW5naW5nIG9yIGFmZmVjdGluZyB0aGVtIGluIGFueSB3YXkuIFdoZW4gdGhhdCBPYnNlcnZhYmxlIGNvbXBsZXRlcywgaXQgd2lsbFxuICogc3Vic2NyaWJlIHRvIHRoZW4gbmV4dCBPYnNlcnZhYmxlIHBhc3NlZCBhbmQsIGFnYWluLCBlbWl0IGl0cyB2YWx1ZXMuIFRoaXMgd2lsbCBiZVxuICogcmVwZWF0ZWQsIHVudGlsIHRoZSBvcGVyYXRvciBydW5zIG91dCBvZiBPYnNlcnZhYmxlcy4gV2hlbiBsYXN0IGlucHV0IE9ic2VydmFibGUgY29tcGxldGVzLFxuICogYGNvbmNhdGAgd2lsbCBjb21wbGV0ZSBhcyB3ZWxsLiBBdCBhbnkgZ2l2ZW4gbW9tZW50IG9ubHkgb25lIE9ic2VydmFibGUgcGFzc2VkIHRvIG9wZXJhdG9yXG4gKiBlbWl0cyB2YWx1ZXMuIElmIHlvdSB3b3VsZCBsaWtlIHRvIGVtaXQgdmFsdWVzIGZyb20gcGFzc2VkIE9ic2VydmFibGVzIGNvbmN1cnJlbnRseSwgY2hlY2sgb3V0XG4gKiB7QGxpbmsgbWVyZ2V9IGluc3RlYWQsIGVzcGVjaWFsbHkgd2l0aCBvcHRpb25hbCBgY29uY3VycmVudGAgcGFyYW1ldGVyLiBBcyBhIG1hdHRlciBvZiBmYWN0LFxuICogYGNvbmNhdGAgaXMgYW4gZXF1aXZhbGVudCBvZiBgbWVyZ2VgIG9wZXJhdG9yIHdpdGggYGNvbmN1cnJlbnRgIHBhcmFtZXRlciBzZXQgdG8gYDFgLlxuICpcbiAqIE5vdGUgdGhhdCBpZiBzb21lIGlucHV0IE9ic2VydmFibGUgbmV2ZXIgY29tcGxldGVzLCBgY29uY2F0YCB3aWxsIGFsc28gbmV2ZXIgY29tcGxldGVcbiAqIGFuZCBPYnNlcnZhYmxlcyBmb2xsb3dpbmcgdGhlIG9uZSB0aGF0IGRpZCBub3QgY29tcGxldGUgd2lsbCBuZXZlciBiZSBzdWJzY3JpYmVkLiBPbiB0aGUgb3RoZXJcbiAqIGhhbmQsIGlmIHNvbWUgT2JzZXJ2YWJsZSBzaW1wbHkgY29tcGxldGVzIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHN1YnNjcmliZWQsIGl0IHdpbGwgYmVcbiAqIGludmlzaWJsZSBmb3IgYGNvbmNhdGAsIHdoaWNoIHdpbGwganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IE9ic2VydmFibGUuXG4gKlxuICogSWYgYW55IE9ic2VydmFibGUgaW4gY2hhaW4gZXJyb3JzLCBpbnN0ZWFkIG9mIHBhc3NpbmcgY29udHJvbCB0byB0aGUgbmV4dCBPYnNlcnZhYmxlLFxuICogYGNvbmNhdGAgd2lsbCBlcnJvciBpbW1lZGlhdGVseSBhcyB3ZWxsLiBPYnNlcnZhYmxlcyB0aGF0IHdvdWxkIGJlIHN1YnNjcmliZWQgYWZ0ZXJcbiAqIHRoZSBvbmUgdGhhdCBlbWl0dGVkIGVycm9yLCBuZXZlciB3aWxsLlxuICpcbiAqIElmIHlvdSBwYXNzIHRvIGBjb25jYXRgIHRoZSBzYW1lIE9ic2VydmFibGUgbWFueSB0aW1lcywgaXRzIHN0cmVhbSBvZiB2YWx1ZXNcbiAqIHdpbGwgYmUgXCJyZXBsYXllZFwiIG9uIGV2ZXJ5IHN1YnNjcmlwdGlvbiwgd2hpY2ggbWVhbnMgeW91IGNhbiByZXBlYXQgZ2l2ZW4gT2JzZXJ2YWJsZVxuICogYXMgbWFueSB0aW1lcyBhcyB5b3UgbGlrZS4gSWYgcGFzc2luZyB0aGUgc2FtZSBPYnNlcnZhYmxlIHRvIGBjb25jYXRgIDEwMDAgdGltZXMgYmVjb21lcyB0ZWRpb3VzLFxuICogeW91IGNhbiBhbHdheXMgdXNlIHtAbGluayByZXBlYXR9LlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbmNhdGVuYXRlIGEgdGltZXIgY291bnRpbmcgZnJvbSAwIHRvIDMgd2l0aCBhIHN5bmNocm9ub3VzIHNlcXVlbmNlIGZyb20gMSB0byAxMDwvY2FwdGlvbj5cbiAqIHZhciB0aW1lciA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSg0KTtcbiAqIHZhciBzZXF1ZW5jZSA9IFJ4Lk9ic2VydmFibGUucmFuZ2UoMSwgMTApO1xuICogdmFyIHJlc3VsdCA9IFJ4Lk9ic2VydmFibGUuY29uY2F0KHRpbWVyLCBzZXF1ZW5jZSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIHJlc3VsdHMgaW46XG4gKiAvLyAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAyIC0xMDAwbXMtPiAzIC1pbW1lZGlhdGUtPiAxIC4uLiAxMFxuICpcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db25jYXRlbmF0ZSBhbiBhcnJheSBvZiAzIE9ic2VydmFibGVzPC9jYXB0aW9uPlxuICogdmFyIHRpbWVyMSA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSgxMCk7XG4gKiB2YXIgdGltZXIyID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgyMDAwKS50YWtlKDYpO1xuICogdmFyIHRpbWVyMyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoNTAwKS50YWtlKDEwKTtcbiAqIHZhciByZXN1bHQgPSBSeC5PYnNlcnZhYmxlLmNvbmNhdChbdGltZXIxLCB0aW1lcjIsIHRpbWVyM10pOyAvLyBub3RlIHRoYXQgYXJyYXkgaXMgcGFzc2VkXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzpcbiAqIC8vIChQcmludHMgdG8gY29uc29sZSBzZXF1ZW50aWFsbHkpXG4gKiAvLyAtMTAwMG1zLT4gMCAtMTAwMG1zLT4gMSAtMTAwMG1zLT4gLi4uIDlcbiAqIC8vIC0yMDAwbXMtPiAwIC0yMDAwbXMtPiAxIC0yMDAwbXMtPiAuLi4gNVxuICogLy8gLTUwMG1zLT4gMCAtNTAwbXMtPiAxIC01MDBtcy0+IC4uLiA5XG4gKlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbmNhdGVuYXRlIHRoZSBzYW1lIE9ic2VydmFibGUgdG8gcmVwZWF0IGl0PC9jYXB0aW9uPlxuICogY29uc3QgdGltZXIgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoMik7XG4gKlxuICogUnguT2JzZXJ2YWJsZS5jb25jYXQodGltZXIsIHRpbWVyKSAvLyBjb25jYXRpbmcgdGhlIHNhbWUgT2JzZXJ2YWJsZSFcbiAqIC5zdWJzY3JpYmUoXG4gKiAgIHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSxcbiAqICAgZXJyID0+IHt9LFxuICogICAoKSA9PiBjb25zb2xlLmxvZygnLi4uYW5kIGl0IGlzIGRvbmUhJylcbiAqICk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIDAgYWZ0ZXIgMXNcbiAqIC8vIDEgYWZ0ZXIgMnNcbiAqIC8vIDAgYWZ0ZXIgM3NcbiAqIC8vIDEgYWZ0ZXIgNHNcbiAqIC8vIFwiLi4uYW5kIGl0IGlzIGRvbmUhXCIgYWxzbyBhZnRlciA0c1xuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdEFsbH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcFRvfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBpbnB1dDEgQW4gaW5wdXQgT2JzZXJ2YWJsZSB0byBjb25jYXRlbmF0ZSB3aXRoIG90aGVycy5cbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBpbnB1dDIgQW4gaW5wdXQgT2JzZXJ2YWJsZSB0byBjb25jYXRlbmF0ZSB3aXRoIG90aGVycy5cbiAqIE1vcmUgdGhhbiBvbmUgaW5wdXQgT2JzZXJ2YWJsZXMgbWF5IGJlIGdpdmVuIGFzIGFyZ3VtZW50LlxuICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXI9bnVsbF0gQW4gb3B0aW9uYWwgSVNjaGVkdWxlciB0byBzY2hlZHVsZSBlYWNoXG4gKiBPYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBvbi5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFsbCB2YWx1ZXMgb2YgZWFjaCBwYXNzZWQgT2JzZXJ2YWJsZSBtZXJnZWQgaW50byBhXG4gKiBzaW5nbGUgT2JzZXJ2YWJsZSwgaW4gb3JkZXIsIGluIHNlcmlhbCBmYXNoaW9uLlxuICogQHN0YXRpYyB0cnVlXG4gKiBAbmFtZSBjb25jYXRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgaWYgKG9ic2VydmFibGVzLmxlbmd0aCA9PT0gMSB8fCAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAyICYmIGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIob2JzZXJ2YWJsZXNbMV0pKSkge1xuICAgICAgICByZXR1cm4gZnJvbV8xLmZyb20ob2JzZXJ2YWJsZXNbMF0pO1xuICAgIH1cbiAgICByZXR1cm4gY29uY2F0QWxsXzEuY29uY2F0QWxsKCkob2ZfMS5vZi5hcHBseSh2b2lkIDAsIG9ic2VydmFibGVzKSk7XG59XG5leHBvcnRzLmNvbmNhdCA9IGNvbmNhdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBEZWZlck9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vRGVmZXJPYnNlcnZhYmxlJyk7XG5leHBvcnRzLmRlZmVyID0gRGVmZXJPYnNlcnZhYmxlXzEuRGVmZXJPYnNlcnZhYmxlLmNyZWF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgcm9vdF8xID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9yb290Jyk7XG52YXIgdHJ5Q2F0Y2hfMSA9IHJlcXVpcmUoJy4uLy4uL3V0aWwvdHJ5Q2F0Y2gnKTtcbnZhciBlcnJvck9iamVjdF8xID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9lcnJvck9iamVjdCcpO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uLy4uL09ic2VydmFibGUnKTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi8uLi9TdWJzY3JpYmVyJyk7XG52YXIgbWFwXzEgPSByZXF1aXJlKCcuLi8uLi9vcGVyYXRvcnMvbWFwJyk7XG5mdW5jdGlvbiBnZXRDT1JTUmVxdWVzdCgpIHtcbiAgICBpZiAocm9vdF8xLnJvb3QuWE1MSHR0cFJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyByb290XzEucm9vdC5YTUxIdHRwUmVxdWVzdCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghIXJvb3RfMS5yb290LlhEb21haW5SZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiBuZXcgcm9vdF8xLnJvb3QuWERvbWFpblJlcXVlc3QoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ09SUyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlcicpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFhNTEh0dHBSZXF1ZXN0KCkge1xuICAgIGlmIChyb290XzEucm9vdC5YTUxIdHRwUmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gbmV3IHJvb3RfMS5yb290LlhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcHJvZ0lkID0gdm9pZCAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHByb2dJZHMgPSBbJ01zeG1sMi5YTUxIVFRQJywgJ01pY3Jvc29mdC5YTUxIVFRQJywgJ01zeG1sMi5YTUxIVFRQLjQuMCddO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBwcm9nSWQgPSBwcm9nSWRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3IHJvb3RfMS5yb290LkFjdGl2ZVhPYmplY3QocHJvZ0lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3RfMS5yb290LkFjdGl2ZVhPYmplY3QocHJvZ0lkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdYTUxIdHRwUmVxdWVzdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlcicpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYWpheEdldCh1cmwsIGhlYWRlcnMpIHtcbiAgICBpZiAoaGVhZGVycyA9PT0gdm9pZCAwKSB7IGhlYWRlcnMgPSBudWxsOyB9XG4gICAgcmV0dXJuIG5ldyBBamF4T2JzZXJ2YWJsZSh7IG1ldGhvZDogJ0dFVCcsIHVybDogdXJsLCBoZWFkZXJzOiBoZWFkZXJzIH0pO1xufVxuZXhwb3J0cy5hamF4R2V0ID0gYWpheEdldDtcbjtcbmZ1bmN0aW9uIGFqYXhQb3N0KHVybCwgYm9keSwgaGVhZGVycykge1xuICAgIHJldHVybiBuZXcgQWpheE9ic2VydmFibGUoeyBtZXRob2Q6ICdQT1NUJywgdXJsOiB1cmwsIGJvZHk6IGJvZHksIGhlYWRlcnM6IGhlYWRlcnMgfSk7XG59XG5leHBvcnRzLmFqYXhQb3N0ID0gYWpheFBvc3Q7XG47XG5mdW5jdGlvbiBhamF4RGVsZXRlKHVybCwgaGVhZGVycykge1xuICAgIHJldHVybiBuZXcgQWpheE9ic2VydmFibGUoeyBtZXRob2Q6ICdERUxFVEUnLCB1cmw6IHVybCwgaGVhZGVyczogaGVhZGVycyB9KTtcbn1cbmV4cG9ydHMuYWpheERlbGV0ZSA9IGFqYXhEZWxldGU7XG47XG5mdW5jdGlvbiBhamF4UHV0KHVybCwgYm9keSwgaGVhZGVycykge1xuICAgIHJldHVybiBuZXcgQWpheE9ic2VydmFibGUoeyBtZXRob2Q6ICdQVVQnLCB1cmw6IHVybCwgYm9keTogYm9keSwgaGVhZGVyczogaGVhZGVycyB9KTtcbn1cbmV4cG9ydHMuYWpheFB1dCA9IGFqYXhQdXQ7XG47XG5mdW5jdGlvbiBhamF4UGF0Y2godXJsLCBib2R5LCBoZWFkZXJzKSB7XG4gICAgcmV0dXJuIG5ldyBBamF4T2JzZXJ2YWJsZSh7IG1ldGhvZDogJ1BBVENIJywgdXJsOiB1cmwsIGJvZHk6IGJvZHksIGhlYWRlcnM6IGhlYWRlcnMgfSk7XG59XG5leHBvcnRzLmFqYXhQYXRjaCA9IGFqYXhQYXRjaDtcbjtcbnZhciBtYXBSZXNwb25zZSA9IG1hcF8xLm1hcChmdW5jdGlvbiAoeCwgaW5kZXgpIHsgcmV0dXJuIHgucmVzcG9uc2U7IH0pO1xuZnVuY3Rpb24gYWpheEdldEpTT04odXJsLCBoZWFkZXJzKSB7XG4gICAgcmV0dXJuIG1hcFJlc3BvbnNlKG5ldyBBamF4T2JzZXJ2YWJsZSh7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgaGVhZGVyczogaGVhZGVyc1xuICAgIH0pKTtcbn1cbmV4cG9ydHMuYWpheEdldEpTT04gPSBhamF4R2V0SlNPTjtcbjtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgQWpheE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBamF4T2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBamF4T2JzZXJ2YWJsZSh1cmxPclJlcXVlc3QpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVYSFI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcm9zc0RvbWFpbiA/IGdldENPUlNSZXF1ZXN0LmNhbGwodGhpcykgOiBnZXRYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyb3NzRG9tYWluOiBmYWxzZSxcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGVvZiB1cmxPclJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnVybCA9IHVybE9yUmVxdWVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gdXJsT3JSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybE9yUmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0W3Byb3BdID0gdXJsT3JSZXF1ZXN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gQWpheE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFqYXhTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMucmVxdWVzdCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9ic2VydmFibGUgZm9yIGFuIEFqYXggcmVxdWVzdCB3aXRoIGVpdGhlciBhIHJlcXVlc3Qgb2JqZWN0IHdpdGhcbiAgICAgKiB1cmwsIGhlYWRlcnMsIGV0YyBvciBhIHN0cmluZyBmb3IgYSBVUkwuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHNvdXJjZSA9IFJ4Lk9ic2VydmFibGUuYWpheCgnL3Byb2R1Y3RzJyk7XG4gICAgICogc291cmNlID0gUnguT2JzZXJ2YWJsZS5hamF4KHsgdXJsOiAncHJvZHVjdHMnLCBtZXRob2Q6ICdHRVQnIH0pO1xuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSByZXF1ZXN0IENhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKiAgIEEgc3RyaW5nIG9mIHRoZSBVUkwgdG8gbWFrZSB0aGUgQWpheCBjYWxsLlxuICAgICAqICAgQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzXG4gICAgICogICAtIHVybDogVVJMIG9mIHRoZSByZXF1ZXN0XG4gICAgICogICAtIGJvZHk6IFRoZSBib2R5IG9mIHRoZSByZXF1ZXN0XG4gICAgICogICAtIG1ldGhvZDogTWV0aG9kIG9mIHRoZSByZXF1ZXN0LCBzdWNoIGFzIEdFVCwgUE9TVCwgUFVULCBQQVRDSCwgREVMRVRFXG4gICAgICogICAtIGFzeW5jOiBXaGV0aGVyIHRoZSByZXF1ZXN0IGlzIGFzeW5jXG4gICAgICogICAtIGhlYWRlcnM6IE9wdGlvbmFsIGhlYWRlcnNcbiAgICAgKiAgIC0gY3Jvc3NEb21haW46IHRydWUgaWYgYSBjcm9zcyBkb21haW4gcmVxdWVzdCwgZWxzZSBmYWxzZVxuICAgICAqICAgLSBjcmVhdGVYSFI6IGEgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgaWYgeW91IG5lZWQgdG8gdXNlIGFuIGFsdGVybmF0ZVxuICAgICAqICAgWE1MSHR0cFJlcXVlc3QgaW1wbGVtZW50YXRpb24uXG4gICAgICogICAtIHJlc3VsdFNlbGVjdG9yOiBhIGZ1bmN0aW9uIHRvIHVzZSB0byBhbHRlciB0aGUgb3V0cHV0IHZhbHVlIHR5cGUgb2ZcbiAgICAgKiAgIHRoZSBPYnNlcnZhYmxlLiBHZXRzIHtAbGluayBBamF4UmVzcG9uc2V9IGFzIGFuIGFyZ3VtZW50LlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIG9ic2VydmFibGUgc2VxdWVuY2UgY29udGFpbmluZyB0aGUgWE1MSHR0cFJlcXVlc3QuXG4gICAgICogQHN0YXRpYyB0cnVlXG4gICAgICogQG5hbWUgYWpheFxuICAgICAqIEBvd25lciBPYnNlcnZhYmxlXG4gICAgKi9cbiAgICBBamF4T2JzZXJ2YWJsZS5jcmVhdGUgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3JlYXRlID0gZnVuY3Rpb24gKHVybE9yUmVxdWVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBamF4T2JzZXJ2YWJsZSh1cmxPclJlcXVlc3QpO1xuICAgICAgICB9O1xuICAgICAgICBjcmVhdGUuZ2V0ID0gYWpheEdldDtcbiAgICAgICAgY3JlYXRlLnBvc3QgPSBhamF4UG9zdDtcbiAgICAgICAgY3JlYXRlLmRlbGV0ZSA9IGFqYXhEZWxldGU7XG4gICAgICAgIGNyZWF0ZS5wdXQgPSBhamF4UHV0O1xuICAgICAgICBjcmVhdGUucGF0Y2ggPSBhamF4UGF0Y2g7XG4gICAgICAgIGNyZWF0ZS5nZXRKU09OID0gYWpheEdldEpTT047XG4gICAgICAgIHJldHVybiBjcmVhdGU7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gQWpheE9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG5leHBvcnRzLkFqYXhPYnNlcnZhYmxlID0gQWpheE9ic2VydmFibGU7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIEFqYXhTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWpheFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWpheFN1YnNjcmliZXIoZGVzdGluYXRpb24sIHJlcXVlc3QpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMgfHwge307XG4gICAgICAgIC8vIGZvcmNlIENPUlMgaWYgcmVxdWVzdGVkXG4gICAgICAgIGlmICghcmVxdWVzdC5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1snWC1SZXF1ZXN0ZWQtV2l0aCddKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydYLVJlcXVlc3RlZC1XaXRoJ10gPSAnWE1MSHR0cFJlcXVlc3QnO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVuc3VyZSBjb250ZW50IHR5cGUgaXMgc2V0XG4gICAgICAgIGlmICghKCdDb250ZW50LVR5cGUnIGluIGhlYWRlcnMpICYmICEocm9vdF8xLnJvb3QuRm9ybURhdGEgJiYgcmVxdWVzdC5ib2R5IGluc3RhbmNlb2Ygcm9vdF8xLnJvb3QuRm9ybURhdGEpICYmIHR5cGVvZiByZXF1ZXN0LmJvZHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgnO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByb3Blcmx5IHNlcmlhbGl6ZSBib2R5XG4gICAgICAgIHJlcXVlc3QuYm9keSA9IHRoaXMuc2VyaWFsaXplQm9keShyZXF1ZXN0LmJvZHksIHJlcXVlc3QuaGVhZGVyc1snQ29udGVudC1UeXBlJ10pO1xuICAgICAgICB0aGlzLnNlbmQoKTtcbiAgICB9XG4gICAgQWpheFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCB4aHIgPSBfYS54aHIsIHJlcXVlc3QgPSBfYS5yZXF1ZXN0LCBkZXN0aW5hdGlvbiA9IF9hLmRlc3RpbmF0aW9uO1xuICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgQWpheFJlc3BvbnNlKGUsIHhociwgcmVxdWVzdCk7XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQocmVzcG9uc2UpO1xuICAgIH07XG4gICAgQWpheFN1YnNjcmliZXIucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHJlcXVlc3QgPSBfYS5yZXF1ZXN0LCBfYiA9IF9hLnJlcXVlc3QsIHVzZXIgPSBfYi51c2VyLCBtZXRob2QgPSBfYi5tZXRob2QsIHVybCA9IF9iLnVybCwgYXN5bmMgPSBfYi5hc3luYywgcGFzc3dvcmQgPSBfYi5wYXNzd29yZCwgaGVhZGVycyA9IF9iLmhlYWRlcnMsIGJvZHkgPSBfYi5ib2R5O1xuICAgICAgICB2YXIgY3JlYXRlWEhSID0gcmVxdWVzdC5jcmVhdGVYSFI7XG4gICAgICAgIHZhciB4aHIgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKGNyZWF0ZVhIUikuY2FsbChyZXF1ZXN0KTtcbiAgICAgICAgaWYgKHhociA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy54aHIgPSB4aHI7XG4gICAgICAgICAgICAvLyBzZXQgdXAgdGhlIGV2ZW50cyBiZWZvcmUgb3BlbiBYSFJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdFxuICAgICAgICAgICAgLy8gWW91IG5lZWQgdG8gYWRkIHRoZSBldmVudCBsaXN0ZW5lcnMgYmVmb3JlIGNhbGxpbmcgb3BlbigpIG9uIHRoZSByZXF1ZXN0LlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBwcm9ncmVzcyBldmVudHMgd2lsbCBub3QgZmlyZS5cbiAgICAgICAgICAgIHRoaXMuc2V0dXBFdmVudHMoeGhyLCByZXF1ZXN0KTtcbiAgICAgICAgICAgIC8vIG9wZW4gWEhSXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHhoci5vcGVuKS5jYWxsKHhociwgbWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBwYXNzd29yZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHhoci5vcGVuKS5jYWxsKHhociwgbWV0aG9kLCB1cmwsIGFzeW5jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aW1lb3V0LCByZXNwb25zZVR5cGUgYW5kIHdpdGhDcmVkZW50aWFscyBjYW4gYmUgc2V0IG9uY2UgdGhlIFhIUiBpcyBvcGVuXG4gICAgICAgICAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB4aHIudGltZW91dCA9IHJlcXVlc3QudGltZW91dDtcbiAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gcmVxdWVzdC5yZXNwb25zZVR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB7XG4gICAgICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9ICEhcmVxdWVzdC53aXRoQ3JlZGVudGlhbHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzZXQgaGVhZGVyc1xuICAgICAgICAgICAgdGhpcy5zZXRIZWFkZXJzKHhociwgaGVhZGVycyk7XG4gICAgICAgICAgICAvLyBmaW5hbGx5IHNlbmQgdGhlIHJlcXVlc3RcbiAgICAgICAgICAgIHJlc3VsdCA9IGJvZHkgPyB0cnlDYXRjaF8xLnRyeUNhdGNoKHhoci5zZW5kKS5jYWxsKHhociwgYm9keSkgOiB0cnlDYXRjaF8xLnRyeUNhdGNoKHhoci5zZW5kKS5jYWxsKHhocik7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4aHI7XG4gICAgfTtcbiAgICBBamF4U3Vic2NyaWJlci5wcm90b3R5cGUuc2VyaWFsaXplQm9keSA9IGZ1bmN0aW9uIChib2R5LCBjb250ZW50VHlwZSkge1xuICAgICAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyb290XzEucm9vdC5Gb3JtRGF0YSAmJiBib2R5IGluc3RhbmNlb2Ygcm9vdF8xLnJvb3QuRm9ybURhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIHNwbGl0SW5kZXggPSBjb250ZW50VHlwZS5pbmRleE9mKCc7Jyk7XG4gICAgICAgICAgICBpZiAoc3BsaXRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLnN1YnN0cmluZygwLCBzcGxpdEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhib2R5KS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoYm9keVtrZXldKSk7IH0pLmpvaW4oJyYnKTtcbiAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFqYXhTdWJzY3JpYmVyLnByb3RvdHlwZS5zZXRIZWFkZXJzID0gZnVuY3Rpb24gKHhociwgaGVhZGVycykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgaGVhZGVyc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQWpheFN1YnNjcmliZXIucHJvdG90eXBlLnNldHVwRXZlbnRzID0gZnVuY3Rpb24gKHhociwgcmVxdWVzdCkge1xuICAgICAgICB2YXIgcHJvZ3Jlc3NTdWJzY3JpYmVyID0gcmVxdWVzdC5wcm9ncmVzc1N1YnNjcmliZXI7XG4gICAgICAgIGZ1bmN0aW9uIHhoclRpbWVvdXQoZSkge1xuICAgICAgICAgICAgdmFyIF9hID0geGhyVGltZW91dCwgc3Vic2NyaWJlciA9IF9hLnN1YnNjcmliZXIsIHByb2dyZXNzU3Vic2NyaWJlciA9IF9hLnByb2dyZXNzU3Vic2NyaWJlciwgcmVxdWVzdCA9IF9hLnJlcXVlc3Q7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NTdWJzY3JpYmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihuZXcgQWpheFRpbWVvdXRFcnJvcih0aGlzLCByZXF1ZXN0KSk7IC8vVE9ETzogTWFrZSBiZXR0ZXJlci5cbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIHhoci5vbnRpbWVvdXQgPSB4aHJUaW1lb3V0O1xuICAgICAgICB4aHJUaW1lb3V0LnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICB4aHJUaW1lb3V0LnN1YnNjcmliZXIgPSB0aGlzO1xuICAgICAgICB4aHJUaW1lb3V0LnByb2dyZXNzU3Vic2NyaWJlciA9IHByb2dyZXNzU3Vic2NyaWJlcjtcbiAgICAgICAgaWYgKHhoci51cGxvYWQgJiYgJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKSB7XG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3NTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHhoclByb2dyZXNzXzE7XG4gICAgICAgICAgICAgICAgeGhyUHJvZ3Jlc3NfMSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzc1N1YnNjcmliZXIgPSB4aHJQcm9ncmVzc18xLnByb2dyZXNzU3Vic2NyaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NTdWJzY3JpYmVyLm5leHQoZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAocm9vdF8xLnJvb3QuWERvbWFpblJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgeGhyLm9ucHJvZ3Jlc3MgPSB4aHJQcm9ncmVzc18xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgeGhyLnVwbG9hZC5vbnByb2dyZXNzID0geGhyUHJvZ3Jlc3NfMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyUHJvZ3Jlc3NfMS5wcm9ncmVzc1N1YnNjcmliZXIgPSBwcm9ncmVzc1N1YnNjcmliZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgeGhyRXJyb3JfMTtcbiAgICAgICAgICAgIHhockVycm9yXzEgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYSA9IHhockVycm9yXzEsIHByb2dyZXNzU3Vic2NyaWJlciA9IF9hLnByb2dyZXNzU3Vic2NyaWJlciwgc3Vic2NyaWJlciA9IF9hLnN1YnNjcmliZXIsIHJlcXVlc3QgPSBfYS5yZXF1ZXN0O1xuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc1N1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NTdWJzY3JpYmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKG5ldyBBamF4RXJyb3IoJ2FqYXggZXJyb3InLCB0aGlzLCByZXF1ZXN0KSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSB4aHJFcnJvcl8xO1xuICAgICAgICAgICAgeGhyRXJyb3JfMS5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgICAgIHhockVycm9yXzEuc3Vic2NyaWJlciA9IHRoaXM7XG4gICAgICAgICAgICB4aHJFcnJvcl8xLnByb2dyZXNzU3Vic2NyaWJlciA9IHByb2dyZXNzU3Vic2NyaWJlcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB4aHJSZWFkeVN0YXRlQ2hhbmdlKGUpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHhoclJlYWR5U3RhdGVDaGFuZ2UsIHN1YnNjcmliZXIgPSBfYS5zdWJzY3JpYmVyLCBwcm9ncmVzc1N1YnNjcmliZXIgPSBfYS5wcm9ncmVzc1N1YnNjcmliZXIsIHJlcXVlc3QgPSBfYS5yZXF1ZXN0O1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSBJRTkgYnVnIChodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xNDUwKVxuICAgICAgICAgICAgICAgIHZhciBzdGF0dXNfMSA9IHRoaXMuc3RhdHVzID09PSAxMjIzID8gMjA0IDogdGhpcy5zdGF0dXM7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gKHRoaXMucmVzcG9uc2VUeXBlID09PSAndGV4dCcgPyAodGhpcy5yZXNwb25zZSB8fCB0aGlzLnJlc3BvbnNlVGV4dCkgOiB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAvLyBmaXggc3RhdHVzIGNvZGUgd2hlbiBpdCBpcyAwICgwIHN0YXR1cyBpcyB1bmRvY3VtZW50ZWQpLlxuICAgICAgICAgICAgICAgIC8vIE9jY3VycyB3aGVuIGFjY2Vzc2luZyBmaWxlIHJlc291cmNlcyBvciBvbiBBbmRyb2lkIDQuMSBzdG9jayBicm93c2VyXG4gICAgICAgICAgICAgICAgLy8gd2hpbGUgcmV0cmlldmluZyBmaWxlcyBmcm9tIGFwcGxpY2F0aW9uIGNhY2hlLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXNfMSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMSA9IHJlc3BvbnNlID8gMjAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKDIwMCA8PSBzdGF0dXNfMSAmJiBzdGF0dXNfMSA8IDMwMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc1N1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZSk7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc1N1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzU3Vic2NyaWJlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKG5ldyBBamF4RXJyb3IoJ2FqYXggZXJyb3IgJyArIHN0YXR1c18xLCB0aGlzLCByZXF1ZXN0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHhoclJlYWR5U3RhdGVDaGFuZ2U7XG4gICAgICAgIHhoclJlYWR5U3RhdGVDaGFuZ2Uuc3Vic2NyaWJlciA9IHRoaXM7XG4gICAgICAgIHhoclJlYWR5U3RhdGVDaGFuZ2UucHJvZ3Jlc3NTdWJzY3JpYmVyID0gcHJvZ3Jlc3NTdWJzY3JpYmVyO1xuICAgICAgICB4aHJSZWFkeVN0YXRlQ2hhbmdlLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIH07XG4gICAgQWpheFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBkb25lID0gX2EuZG9uZSwgeGhyID0gX2EueGhyO1xuICAgICAgICBpZiAoIWRvbmUgJiYgeGhyICYmIHhoci5yZWFkeVN0YXRlICE9PSA0ICYmIHR5cGVvZiB4aHIuYWJvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHhoci5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBBamF4U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbmV4cG9ydHMuQWpheFN1YnNjcmliZXIgPSBBamF4U3Vic2NyaWJlcjtcbi8qKlxuICogQSBub3JtYWxpemVkIEFKQVggcmVzcG9uc2UuXG4gKlxuICogQHNlZSB7QGxpbmsgYWpheH1cbiAqXG4gKiBAY2xhc3MgQWpheFJlc3BvbnNlXG4gKi9cbnZhciBBamF4UmVzcG9uc2UgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFqYXhSZXNwb25zZShvcmlnaW5hbEV2ZW50LCB4aHIsIHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gb3JpZ2luYWxFdmVudDtcbiAgICAgICAgdGhpcy54aHIgPSB4aHI7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgIHRoaXMuc3RhdHVzID0geGhyLnN0YXR1cztcbiAgICAgICAgdGhpcy5yZXNwb25zZVR5cGUgPSB4aHIucmVzcG9uc2VUeXBlIHx8IHJlcXVlc3QucmVzcG9uc2VUeXBlO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcGFyc2VYaHJSZXNwb25zZSh0aGlzLnJlc3BvbnNlVHlwZSwgeGhyKTtcbiAgICB9XG4gICAgcmV0dXJuIEFqYXhSZXNwb25zZTtcbn0oKSk7XG5leHBvcnRzLkFqYXhSZXNwb25zZSA9IEFqYXhSZXNwb25zZTtcbi8qKlxuICogQSBub3JtYWxpemVkIEFKQVggZXJyb3IuXG4gKlxuICogQHNlZSB7QGxpbmsgYWpheH1cbiAqXG4gKiBAY2xhc3MgQWpheEVycm9yXG4gKi9cbnZhciBBamF4RXJyb3IgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBamF4RXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWpheEVycm9yKG1lc3NhZ2UsIHhociwgcmVxdWVzdCkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy54aHIgPSB4aHI7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgIHRoaXMuc3RhdHVzID0geGhyLnN0YXR1cztcbiAgICAgICAgdGhpcy5yZXNwb25zZVR5cGUgPSB4aHIucmVzcG9uc2VUeXBlIHx8IHJlcXVlc3QucmVzcG9uc2VUeXBlO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcGFyc2VYaHJSZXNwb25zZSh0aGlzLnJlc3BvbnNlVHlwZSwgeGhyKTtcbiAgICB9XG4gICAgcmV0dXJuIEFqYXhFcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuQWpheEVycm9yID0gQWpheEVycm9yO1xuZnVuY3Rpb24gcGFyc2VYaHJSZXNwb25zZShyZXNwb25zZVR5cGUsIHhocikge1xuICAgIHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICAgICAgaWYgKCdyZXNwb25zZScgaW4geGhyKSB7XG4gICAgICAgICAgICAgICAgLy9JRSBkb2VzIG5vdCBzdXBwb3J0IGpzb24gYXMgcmVzcG9uc2VUeXBlLCBwYXJzZSBpdCBpbnRlcm5hbGx5XG4gICAgICAgICAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVR5cGUgPyB4aHIucmVzcG9uc2UgOiBKU09OLnBhcnNlKHhoci5yZXNwb25zZSB8fCB4aHIucmVzcG9uc2VUZXh0IHx8ICdudWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLKGJlbmxlc2gpOiBUeXBlU2NyaXB0IHNoZW5uYW5pZ2Fuc1xuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgbGF0ZXN0IFRTIHNlZW1zIHRvIHRoaW5rIHhociBpcyBcIm5ldmVyXCIgaGVyZS5cbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0IHx8ICdudWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlWE1MO1xuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEhBQ0soYmVubGVzaCk6IFR5cGVTY3JpcHQgc2hlbm5hbmlnYW5zXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55IGxhdGVzdCBUUyBzZWVtcyB0byB0aGluayB4aHIgaXMgXCJuZXZlclwiIGhlcmUuXG4gICAgICAgICAgICByZXR1cm4gKCdyZXNwb25zZScgaW4geGhyKSA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHQ7XG4gICAgfVxufVxuLyoqXG4gKiBAc2VlIHtAbGluayBhamF4fVxuICpcbiAqIEBjbGFzcyBBamF4VGltZW91dEVycm9yXG4gKi9cbnZhciBBamF4VGltZW91dEVycm9yID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWpheFRpbWVvdXRFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBamF4VGltZW91dEVycm9yKHhociwgcmVxdWVzdCkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCAnYWpheCB0aW1lb3V0JywgeGhyLCByZXF1ZXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIEFqYXhUaW1lb3V0RXJyb3I7XG59KEFqYXhFcnJvcikpO1xuZXhwb3J0cy5BamF4VGltZW91dEVycm9yID0gQWpheFRpbWVvdXRFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFqYXhPYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZSgnLi4vLi4vU3ViamVjdCcpO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uLy4uL1N1YnNjcmliZXInKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi8uLi9PYnNlcnZhYmxlJyk7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuLi8uLi9TdWJzY3JpcHRpb24nKTtcbnZhciByb290XzEgPSByZXF1aXJlKCcuLi8uLi91dGlsL3Jvb3QnKTtcbnZhciBSZXBsYXlTdWJqZWN0XzEgPSByZXF1aXJlKCcuLi8uLi9SZXBsYXlTdWJqZWN0Jyk7XG52YXIgdHJ5Q2F0Y2hfMSA9IHJlcXVpcmUoJy4uLy4uL3V0aWwvdHJ5Q2F0Y2gnKTtcbnZhciBlcnJvck9iamVjdF8xID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9lcnJvck9iamVjdCcpO1xudmFyIGFzc2lnbl8xID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9hc3NpZ24nKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICogQGhpZGUgdHJ1ZVxuICovXG52YXIgV2ViU29ja2V0U3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFdlYlNvY2tldFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gV2ViU29ja2V0U3ViamVjdCh1cmxDb25maWdPclNvdXJjZSwgZGVzdGluYXRpb24pIHtcbiAgICAgICAgaWYgKHVybENvbmZpZ09yU291cmNlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uLCB1cmxDb25maWdPclNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuV2ViU29ja2V0Q3RvciA9IHJvb3RfMS5yb290LldlYlNvY2tldDtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dCA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB1cmxDb25maWdPclNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVybCA9IHVybENvbmZpZ09yU291cmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV0FSTklORzogY29uZmlnIG9iamVjdCBjb3VsZCBvdmVycmlkZSBpbXBvcnRhbnQgbWVtYmVycyBoZXJlLlxuICAgICAgICAgICAgICAgIGFzc2lnbl8xLmFzc2lnbih0aGlzLCB1cmxDb25maWdPclNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuV2ViU29ja2V0Q3Rvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gV2ViU29ja2V0IGNvbnN0cnVjdG9yIGNhbiBiZSBmb3VuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBSZXBsYXlTdWJqZWN0XzEuUmVwbGF5U3ViamVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFdlYlNvY2tldFN1YmplY3QucHJvdG90eXBlLnJlc3VsdFNlbGVjdG9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFdyYXBwZXIgYXJvdW5kIHRoZSB3M2MtY29tcGF0aWJsZSBXZWJTb2NrZXQgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+V3JhcHMgYnJvd3NlciBXZWJTb2NrZXQ8L2NhcHRpb24+XG4gICAgICpcbiAgICAgKiBsZXQgc29ja2V0JCA9IE9ic2VydmFibGUud2ViU29ja2V0KCd3czovL2xvY2FsaG9zdDo4MDgxJyk7XG4gICAgICpcbiAgICAgKiBzb2NrZXQkLnN1YnNjcmliZShcbiAgICAgKiAgICAobXNnKSA9PiBjb25zb2xlLmxvZygnbWVzc2FnZSByZWNlaXZlZDogJyArIG1zZyksXG4gICAgICogICAgKGVycikgPT4gY29uc29sZS5sb2coZXJyKSxcbiAgICAgKiAgICAoKSA9PiBjb25zb2xlLmxvZygnY29tcGxldGUnKVxuICAgICAqICApO1xuICAgICAqXG4gICAgICogc29ja2V0JC5uZXh0KEpTT04uc3RyaW5naWZ5KHsgb3A6ICdoZWxsbycgfSkpO1xuICAgICAqXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+V3JhcHMgV2ViU29ja2V0IGZyb20gbm9kZWpzLXdlYnNvY2tldCAodXNpbmcgbm9kZS5qcyk8L2NhcHRpb24+XG4gICAgICpcbiAgICAgKiBpbXBvcnQgeyB3M2N3ZWJzb2NrZXQgfSBmcm9tICd3ZWJzb2NrZXQnO1xuICAgICAqXG4gICAgICogbGV0IHNvY2tldCQgPSBPYnNlcnZhYmxlLndlYlNvY2tldCh7XG4gICAgICogICB1cmw6ICd3czovL2xvY2FsaG9zdDo4MDgxJyxcbiAgICAgKiAgIFdlYlNvY2tldEN0b3I6IHczY3dlYnNvY2tldFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc29ja2V0JC5zdWJzY3JpYmUoXG4gICAgICogICAgKG1zZykgPT4gY29uc29sZS5sb2coJ21lc3NhZ2UgcmVjZWl2ZWQ6ICcgKyBtc2cpLFxuICAgICAqICAgIChlcnIpID0+IGNvbnNvbGUubG9nKGVyciksXG4gICAgICogICAgKCkgPT4gY29uc29sZS5sb2coJ2NvbXBsZXRlJylcbiAgICAgKiAgKTtcbiAgICAgKlxuICAgICAqIHNvY2tldCQubmV4dChKU09OLnN0cmluZ2lmeSh7IG9wOiAnaGVsbG8nIH0pKTtcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgV2ViU29ja2V0U3ViamVjdENvbmZpZ30gdXJsQ29uZmlnT3JTb3VyY2UgdGhlIHNvdXJjZSBvZiB0aGUgd2Vic29ja2V0IGFzIGFuIHVybCBvciBhIHN0cnVjdHVyZSBkZWZpbmluZyB0aGUgd2Vic29ja2V0IG9iamVjdFxuICAgICAqIEByZXR1cm4ge1dlYlNvY2tldFN1YmplY3R9XG4gICAgICogQHN0YXRpYyB0cnVlXG4gICAgICogQG5hbWUgd2ViU29ja2V0XG4gICAgICogQG93bmVyIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBXZWJTb2NrZXRTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uICh1cmxDb25maWdPclNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IFdlYlNvY2tldFN1YmplY3QodXJsQ29uZmlnT3JTb3VyY2UpO1xuICAgIH07XG4gICAgV2ViU29ja2V0U3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc29jayA9IG5ldyBXZWJTb2NrZXRTdWJqZWN0KHRoaXMsIHRoaXMuZGVzdGluYXRpb24pO1xuICAgICAgICBzb2NrLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzb2NrO1xuICAgIH07XG4gICAgV2ViU29ja2V0U3ViamVjdC5wcm90b3R5cGUuX3Jlc2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBSZXBsYXlTdWJqZWN0XzEuUmVwbGF5U3ViamVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX291dHB1dCA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgIH07XG4gICAgLy8gVE9ETzogZmFjdG9yIHRoaXMgb3V0IHRvIGJlIGEgcHJvcGVyIE9wZXJhdG9yL1N1YnNjcmliZXIgaW1wbGVtZW50YXRpb24gYW5kIGVsaW1pbmF0ZSBjbG9zdXJlc1xuICAgIFdlYlNvY2tldFN1YmplY3QucHJvdG90eXBlLm11bHRpcGxleCA9IGZ1bmN0aW9uIChzdWJNc2csIHVuc3ViTXNnLCBtZXNzYWdlRmlsdGVyKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHN1Yk1zZykoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gc2VsZi5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2hfMS50cnlDYXRjaChtZXNzYWdlRmlsdGVyKSh4KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIG9ic2VydmVyLmVycm9yKGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9ic2VydmVyLmNvbXBsZXRlKCk7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2hfMS50cnlDYXRjaCh1bnN1Yk1zZykoKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm5leHQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFdlYlNvY2tldFN1YmplY3QucHJvdG90eXBlLl9jb25uZWN0U29ja2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgV2ViU29ja2V0Q3RvciA9IHRoaXMuV2ViU29ja2V0Q3RvcjtcbiAgICAgICAgdmFyIG9ic2VydmVyID0gdGhpcy5fb3V0cHV0O1xuICAgICAgICB2YXIgc29ja2V0ID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNvY2tldCA9IHRoaXMucHJvdG9jb2wgP1xuICAgICAgICAgICAgICAgIG5ldyBXZWJTb2NrZXRDdG9yKHRoaXMudXJsLCB0aGlzLnByb3RvY29sKSA6XG4gICAgICAgICAgICAgICAgbmV3IFdlYlNvY2tldEN0b3IodGhpcy51cmwpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgICAgICBpZiAodGhpcy5iaW5hcnlUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuYmluYXJ5VHlwZSA9IHRoaXMuYmluYXJ5VHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuc29ja2V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChzb2NrZXQgJiYgc29ja2V0LnJlYWR5U3RhdGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIG9wZW5PYnNlcnZlciA9IF90aGlzLm9wZW5PYnNlcnZlcjtcbiAgICAgICAgICAgIGlmIChvcGVuT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBvcGVuT2JzZXJ2ZXIubmV4dChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBxdWV1ZSA9IF90aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBTdWJzY3JpYmVyXzEuU3Vic2NyaWJlci5jcmVhdGUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHNvY2tldC5yZWFkeVN0YXRlID09PSAxICYmIHNvY2tldC5zZW5kKHgpOyB9LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHZhciBjbG9zaW5nT2JzZXJ2ZXIgPSBfdGhpcy5jbG9zaW5nT2JzZXJ2ZXI7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3NpbmdPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nT2JzZXJ2ZXIubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LmNsb3NlKGUuY29kZSwgZS5yZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IFR5cGVFcnJvcignV2ViU29ja2V0U3ViamVjdC5lcnJvciBtdXN0IGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCB3aXRoIGFuIGVycm9yIGNvZGUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCBhbiBvcHRpb25hbCByZWFzb246IHsgY29kZTogbnVtYmVyLCByZWFzb246IHN0cmluZyB9JykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVzZXRTdGF0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBjbG9zaW5nT2JzZXJ2ZXIgPSBfdGhpcy5jbG9zaW5nT2JzZXJ2ZXI7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3NpbmdPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nT2JzZXJ2ZXIubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVzZXRTdGF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocXVldWUgJiYgcXVldWUgaW5zdGFuY2VvZiBSZXBsYXlTdWJqZWN0XzEuUmVwbGF5U3ViamVjdCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5hZGQocXVldWUuc3Vic2NyaWJlKF90aGlzLmRlc3RpbmF0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIF90aGlzLl9yZXNldFN0YXRlKCk7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfTtcbiAgICAgICAgc29ja2V0Lm9uY2xvc2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgX3RoaXMuX3Jlc2V0U3RhdGUoKTtcbiAgICAgICAgICAgIHZhciBjbG9zZU9ic2VydmVyID0gX3RoaXMuY2xvc2VPYnNlcnZlcjtcbiAgICAgICAgICAgIGlmIChjbG9zZU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgY2xvc2VPYnNlcnZlci5uZXh0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUud2FzQ2xlYW4pIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNvY2tldC5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2goX3RoaXMucmVzdWx0U2VsZWN0b3IpKGUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gV2ViU29ja2V0U3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5fY29ubmVjdFNvY2tldCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5hZGQodGhpcy5fb3V0cHV0LnN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNvY2tldCA9IF90aGlzLnNvY2tldDtcbiAgICAgICAgICAgIGlmIChfdGhpcy5fb3V0cHV0Lm9ic2VydmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5yZWFkeVN0YXRlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVzZXRTdGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIFdlYlNvY2tldFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBzb3VyY2UgPSBfYS5zb3VyY2UsIHNvY2tldCA9IF9hLnNvY2tldDtcbiAgICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gMSkge1xuICAgICAgICAgICAgc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBSZXBsYXlTdWJqZWN0XzEuUmVwbGF5U3ViamVjdCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gV2ViU29ja2V0U3ViamVjdDtcbn0oU3ViamVjdF8xLkFub255bW91c1N1YmplY3QpKTtcbmV4cG9ydHMuV2ViU29ja2V0U3ViamVjdCA9IFdlYlNvY2tldFN1YmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1XZWJTb2NrZXRTdWJqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEFqYXhPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0FqYXhPYnNlcnZhYmxlJyk7XG5leHBvcnRzLmFqYXggPSBBamF4T2JzZXJ2YWJsZV8xLkFqYXhPYnNlcnZhYmxlLmNyZWF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFqYXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgV2ViU29ja2V0U3ViamVjdF8xID0gcmVxdWlyZSgnLi9XZWJTb2NrZXRTdWJqZWN0Jyk7XG5leHBvcnRzLndlYlNvY2tldCA9IFdlYlNvY2tldFN1YmplY3RfMS5XZWJTb2NrZXRTdWJqZWN0LmNyZWF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYlNvY2tldC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBFbXB0eU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vRW1wdHlPYnNlcnZhYmxlJyk7XG5leHBvcnRzLmVtcHR5ID0gRW1wdHlPYnNlcnZhYmxlXzEuRW1wdHlPYnNlcnZhYmxlLmNyZWF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEZvcmtKb2luT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9Gb3JrSm9pbk9ic2VydmFibGUnKTtcbmV4cG9ydHMuZm9ya0pvaW4gPSBGb3JrSm9pbk9ic2VydmFibGVfMS5Gb3JrSm9pbk9ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ya0pvaW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgRnJvbU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vRnJvbU9ic2VydmFibGUnKTtcbmV4cG9ydHMuZnJvbSA9IEZyb21PYnNlcnZhYmxlXzEuRnJvbU9ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBGcm9tRXZlbnRPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0Zyb21FdmVudE9ic2VydmFibGUnKTtcbmV4cG9ydHMuZnJvbUV2ZW50ID0gRnJvbUV2ZW50T2JzZXJ2YWJsZV8xLkZyb21FdmVudE9ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEZyb21FdmVudFBhdHRlcm5PYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0Zyb21FdmVudFBhdHRlcm5PYnNlcnZhYmxlJyk7XG5leHBvcnRzLmZyb21FdmVudFBhdHRlcm4gPSBGcm9tRXZlbnRQYXR0ZXJuT2JzZXJ2YWJsZV8xLkZyb21FdmVudFBhdHRlcm5PYnNlcnZhYmxlLmNyZWF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21FdmVudFBhdHRlcm4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUHJvbWlzZU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vUHJvbWlzZU9ic2VydmFibGUnKTtcbmV4cG9ydHMuZnJvbVByb21pc2UgPSBQcm9taXNlT2JzZXJ2YWJsZV8xLlByb21pc2VPYnNlcnZhYmxlLmNyZWF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21Qcm9taXNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEdlbmVyYXRlT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9HZW5lcmF0ZU9ic2VydmFibGUnKTtcbmV4cG9ydHMuZ2VuZXJhdGUgPSBHZW5lcmF0ZU9ic2VydmFibGVfMS5HZW5lcmF0ZU9ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2VuZXJhdGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgSWZPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0lmT2JzZXJ2YWJsZScpO1xuZXhwb3J0cy5faWYgPSBJZk9ic2VydmFibGVfMS5JZk9ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWYuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgSW50ZXJ2YWxPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0ludGVydmFsT2JzZXJ2YWJsZScpO1xuZXhwb3J0cy5pbnRlcnZhbCA9IEludGVydmFsT2JzZXJ2YWJsZV8xLkludGVydmFsT2JzZXJ2YWJsZS5jcmVhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcnZhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgQXJyYXlPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0FycmF5T2JzZXJ2YWJsZScpO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzU2NoZWR1bGVyJyk7XG52YXIgbWVyZ2VBbGxfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9tZXJnZUFsbCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogQ3JlYXRlcyBhbiBvdXRwdXQgT2JzZXJ2YWJsZSB3aGljaCBjb25jdXJyZW50bHkgZW1pdHMgYWxsIHZhbHVlcyBmcm9tIGV2ZXJ5XG4gKiBnaXZlbiBpbnB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GbGF0dGVucyBtdWx0aXBsZSBPYnNlcnZhYmxlcyB0b2dldGhlciBieSBibGVuZGluZ1xuICogdGhlaXIgdmFsdWVzIGludG8gb25lIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbWVyZ2UucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYG1lcmdlYCBzdWJzY3JpYmVzIHRvIGVhY2ggZ2l2ZW4gaW5wdXQgT2JzZXJ2YWJsZSAoYXMgYXJndW1lbnRzKSwgYW5kIHNpbXBseVxuICogZm9yd2FyZHMgKHdpdGhvdXQgZG9pbmcgYW55IHRyYW5zZm9ybWF0aW9uKSBhbGwgdGhlIHZhbHVlcyBmcm9tIGFsbCB0aGUgaW5wdXRcbiAqIE9ic2VydmFibGVzIHRvIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS4gVGhlIG91dHB1dCBPYnNlcnZhYmxlIG9ubHkgY29tcGxldGVzXG4gKiBvbmNlIGFsbCBpbnB1dCBPYnNlcnZhYmxlcyBoYXZlIGNvbXBsZXRlZC4gQW55IGVycm9yIGRlbGl2ZXJlZCBieSBhbiBpbnB1dFxuICogT2JzZXJ2YWJsZSB3aWxsIGJlIGltbWVkaWF0ZWx5IGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPk1lcmdlIHRvZ2V0aGVyIHR3byBPYnNlcnZhYmxlczogMXMgaW50ZXJ2YWwgYW5kIGNsaWNrczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgdGltZXIgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICogdmFyIGNsaWNrc09yVGltZXIgPSBSeC5PYnNlcnZhYmxlLm1lcmdlKGNsaWNrcywgdGltZXIpO1xuICogY2xpY2tzT3JUaW1lci5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOlxuICogLy8gdGltZXIgd2lsbCBlbWl0IGFzY2VuZGluZyB2YWx1ZXMsIG9uZSBldmVyeSBzZWNvbmQoMTAwMG1zKSB0byBjb25zb2xlXG4gKiAvLyBjbGlja3MgbG9ncyBNb3VzZUV2ZW50cyB0byBjb25zb2xlIGV2ZXJ5dGltZSB0aGUgXCJkb2N1bWVudFwiIGlzIGNsaWNrZWRcbiAqIC8vIFNpbmNlIHRoZSB0d28gc3RyZWFtcyBhcmUgbWVyZ2VkIHlvdSBzZWUgdGhlc2UgaGFwcGVuaW5nXG4gKiAvLyBhcyB0aGV5IG9jY3VyLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPk1lcmdlIHRvZ2V0aGVyIDMgT2JzZXJ2YWJsZXMsIGJ1dCBvbmx5IDIgcnVuIGNvbmN1cnJlbnRseTwvY2FwdGlvbj5cbiAqIHZhciB0aW1lcjEgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoMTApO1xuICogdmFyIHRpbWVyMiA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMjAwMCkudGFrZSg2KTtcbiAqIHZhciB0aW1lcjMgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDUwMCkudGFrZSgxMCk7XG4gKiB2YXIgY29uY3VycmVudCA9IDI7IC8vIHRoZSBhcmd1bWVudFxuICogdmFyIG1lcmdlZCA9IFJ4Lk9ic2VydmFibGUubWVyZ2UodGltZXIxLCB0aW1lcjIsIHRpbWVyMywgY29uY3VycmVudCk7XG4gKiBtZXJnZWQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzpcbiAqIC8vIC0gRmlyc3QgdGltZXIxIGFuZCB0aW1lcjIgd2lsbCBydW4gY29uY3VycmVudGx5XG4gKiAvLyAtIHRpbWVyMSB3aWxsIGVtaXQgYSB2YWx1ZSBldmVyeSAxMDAwbXMgZm9yIDEwIGl0ZXJhdGlvbnNcbiAqIC8vIC0gdGltZXIyIHdpbGwgZW1pdCBhIHZhbHVlIGV2ZXJ5IDIwMDBtcyBmb3IgNiBpdGVyYXRpb25zXG4gKiAvLyAtIGFmdGVyIHRpbWVyMSBoaXRzIGl0J3MgbWF4IGl0ZXJhdGlvbiwgdGltZXIyIHdpbGxcbiAqIC8vICAgY29udGludWUsIGFuZCB0aW1lcjMgd2lsbCBzdGFydCB0byBydW4gY29uY3VycmVudGx5IHdpdGggdGltZXIyXG4gKiAvLyAtIHdoZW4gdGltZXIyIGhpdHMgaXQncyBtYXggaXRlcmF0aW9uIGl0IHRlcm1pbmF0ZXMsIGFuZFxuICogLy8gICB0aW1lcjMgd2lsbCBjb250aW51ZSB0byBlbWl0IGEgdmFsdWUgZXZlcnkgNTAwbXMgdW50aWwgaXQgaXMgY29tcGxldGVcbiAqXG4gKiBAc2VlIHtAbGluayBtZXJnZUFsbH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXBUb31cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqXG4gKiBAcGFyYW0gey4uLk9ic2VydmFibGVJbnB1dH0gb2JzZXJ2YWJsZXMgSW5wdXQgT2JzZXJ2YWJsZXMgdG8gbWVyZ2UgdG9nZXRoZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXSBNYXhpbXVtIG51bWJlciBvZiBpbnB1dFxuICogT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0byBjb25jdXJyZW50bHkuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1udWxsXSBUaGUgSVNjaGVkdWxlciB0byB1c2UgZm9yIG1hbmFnaW5nXG4gKiBjb25jdXJyZW5jeSBvZiBpbnB1dCBPYnNlcnZhYmxlcy5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyB0aGF0IGFyZSB0aGUgcmVzdWx0IG9mXG4gKiBldmVyeSBpbnB1dCBPYnNlcnZhYmxlLlxuICogQHN0YXRpYyB0cnVlXG4gKiBAbmFtZSBtZXJnZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBjb25jdXJyZW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIHZhciBzY2hlZHVsZXIgPSBudWxsO1xuICAgIHZhciBsYXN0ID0gb2JzZXJ2YWJsZXNbb2JzZXJ2YWJsZXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIobGFzdCkpIHtcbiAgICAgICAgc2NoZWR1bGVyID0gb2JzZXJ2YWJsZXMucG9wKCk7XG4gICAgICAgIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPiAxICYmIHR5cGVvZiBvYnNlcnZhYmxlc1tvYnNlcnZhYmxlcy5sZW5ndGggLSAxXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbnQgPSBvYnNlcnZhYmxlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgbGFzdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uY3VycmVudCA9IG9ic2VydmFibGVzLnBvcCgpO1xuICAgIH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSBudWxsICYmIG9ic2VydmFibGVzLmxlbmd0aCA9PT0gMSAmJiBvYnNlcnZhYmxlc1swXSBpbnN0YW5jZW9mIE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlQWxsXzEubWVyZ2VBbGwoY29uY3VycmVudCkobmV3IEFycmF5T2JzZXJ2YWJsZV8xLkFycmF5T2JzZXJ2YWJsZShvYnNlcnZhYmxlcywgc2NoZWR1bGVyKSk7XG59XG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBOZXZlck9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vTmV2ZXJPYnNlcnZhYmxlJyk7XG5leHBvcnRzLm5ldmVyID0gTmV2ZXJPYnNlcnZhYmxlXzEuTmV2ZXJPYnNlcnZhYmxlLmNyZWF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5ldmVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEFycmF5T2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9BcnJheU9ic2VydmFibGUnKTtcbmV4cG9ydHMub2YgPSBBcnJheU9ic2VydmFibGVfMS5BcnJheU9ic2VydmFibGUub2Y7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBvbkVycm9yUmVzdW1lTmV4dF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0Jyk7XG5leHBvcnRzLm9uRXJyb3JSZXN1bWVOZXh0ID0gb25FcnJvclJlc3VtZU5leHRfMS5vbkVycm9yUmVzdW1lTmV4dFN0YXRpYztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uRXJyb3JSZXN1bWVOZXh0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIFBhaXJzT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9QYWlyc09ic2VydmFibGUnKTtcbmV4cG9ydHMucGFpcnMgPSBQYWlyc09ic2VydmFibGVfMS5QYWlyc09ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFpcnMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBpc0FycmF5XzEgPSByZXF1aXJlKCcuLi91dGlsL2lzQXJyYXknKTtcbnZhciBBcnJheU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL29ic2VydmFibGUvQXJyYXlPYnNlcnZhYmxlJyk7XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xuZnVuY3Rpb24gcmFjZSgpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgLy8gaWYgdGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gYXJyYXksIGl0IHdhcyBtb3N0IGxpa2VseSBjYWxsZWQgd2l0aFxuICAgIC8vIGByYWNlKFtvYnMxLCBvYnMyLCAuLi5dKWBcbiAgICBpZiAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmIChpc0FycmF5XzEuaXNBcnJheShvYnNlcnZhYmxlc1swXSkpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGVzID0gb2JzZXJ2YWJsZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZXNbMF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBcnJheU9ic2VydmFibGVfMS5BcnJheU9ic2VydmFibGUob2JzZXJ2YWJsZXMpLmxpZnQobmV3IFJhY2VPcGVyYXRvcigpKTtcbn1cbmV4cG9ydHMucmFjZSA9IHJhY2U7XG52YXIgUmFjZU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSYWNlT3BlcmF0b3IoKSB7XG4gICAgfVxuICAgIFJhY2VPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFJhY2VTdWJzY3JpYmVyKHN1YnNjcmliZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBSYWNlT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5SYWNlT3BlcmF0b3IgPSBSYWNlT3BlcmF0b3I7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFJhY2VTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmFjZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmFjZVN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmhhc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMub2JzZXJ2YWJsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxuICAgIFJhY2VTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uIChvYnNlcnZhYmxlKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2YWJsZXMucHVzaChvYnNlcnZhYmxlKTtcbiAgICB9O1xuICAgIFJhY2VTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlcyA9IHRoaXMub2JzZXJ2YWJsZXM7XG4gICAgICAgIHZhciBsZW4gPSBvYnNlcnZhYmxlcy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuICYmICF0aGlzLmhhc0ZpcnN0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG9ic2VydmFibGVzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIG9ic2VydmFibGUsIG9ic2VydmFibGUsIGkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSYWNlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICBpZiAoIXRoaXMuaGFzRmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSAhPT0gb3V0ZXJJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChpbm5lclZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBSYWNlU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG5leHBvcnRzLlJhY2VTdWJzY3JpYmVyID0gUmFjZVN1YnNjcmliZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYWNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIFJhbmdlT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9SYW5nZU9ic2VydmFibGUnKTtcbmV4cG9ydHMucmFuZ2UgPSBSYW5nZU9ic2VydmFibGVfMS5SYW5nZU9ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmFuZ2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgRXJyb3JPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0Vycm9yT2JzZXJ2YWJsZScpO1xuZXhwb3J0cy5fdGhyb3cgPSBFcnJvck9ic2VydmFibGVfMS5FcnJvck9ic2VydmFibGUuY3JlYXRlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3cuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgVGltZXJPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL1RpbWVyT2JzZXJ2YWJsZScpO1xuZXhwb3J0cy50aW1lciA9IFRpbWVyT2JzZXJ2YWJsZV8xLlRpbWVyT2JzZXJ2YWJsZS5jcmVhdGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBVc2luZ09ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4vVXNpbmdPYnNlcnZhYmxlJyk7XG5leHBvcnRzLnVzaW5nID0gVXNpbmdPYnNlcnZhYmxlXzEuVXNpbmdPYnNlcnZhYmxlLmNyZWF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzaW5nLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHppcF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3ppcCcpO1xuZXhwb3J0cy56aXAgPSB6aXBfMS56aXBTdGF0aWM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD16aXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYXVkaXRfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9hdWRpdCcpO1xuLyoqXG4gKiBJZ25vcmVzIHNvdXJjZSB2YWx1ZXMgZm9yIGEgZHVyYXRpb24gZGV0ZXJtaW5lZCBieSBhbm90aGVyIE9ic2VydmFibGUsIHRoZW5cbiAqIGVtaXRzIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdGhlbiByZXBlYXRzIHRoaXNcbiAqIHByb2Nlc3MuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgYXVkaXRUaW1lfSwgYnV0IHRoZSBzaWxlbmNpbmdcbiAqIGR1cmF0aW9uIGlzIGRldGVybWluZWQgYnkgYSBzZWNvbmQgT2JzZXJ2YWJsZS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9hdWRpdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgYXVkaXRgIGlzIHNpbWlsYXIgdG8gYHRocm90dGxlYCwgYnV0IGVtaXRzIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlIHNpbGVuY2VkXG4gKiB0aW1lIHdpbmRvdywgaW5zdGVhZCBvZiB0aGUgZmlyc3QgdmFsdWUuIGBhdWRpdGAgZW1pdHMgdGhlIG1vc3QgcmVjZW50IHZhbHVlXG4gKiBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYXMgc29vbiBhcyBpdHMgaW50ZXJuYWxcbiAqIHRpbWVyIGJlY29tZXMgZGlzYWJsZWQsIGFuZCBpZ25vcmVzIHNvdXJjZSB2YWx1ZXMgd2hpbGUgdGhlIHRpbWVyIGlzIGVuYWJsZWQuXG4gKiBJbml0aWFsbHksIHRoZSB0aW1lciBpcyBkaXNhYmxlZC4gQXMgc29vbiBhcyB0aGUgZmlyc3Qgc291cmNlIHZhbHVlIGFycml2ZXMsXG4gKiB0aGUgdGltZXIgaXMgZW5hYmxlZCBieSBjYWxsaW5nIHRoZSBgZHVyYXRpb25TZWxlY3RvcmAgZnVuY3Rpb24gd2l0aCB0aGVcbiAqIHNvdXJjZSB2YWx1ZSwgd2hpY2ggcmV0dXJucyB0aGUgXCJkdXJhdGlvblwiIE9ic2VydmFibGUuIFdoZW4gdGhlIGR1cmF0aW9uXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUgb3IgY29tcGxldGVzLCB0aGUgdGltZXIgaXMgZGlzYWJsZWQsIHRoZW4gdGhlIG1vc3RcbiAqIHJlY2VudCBzb3VyY2UgdmFsdWUgaXMgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUsIGFuZCB0aGlzIHByb2Nlc3NcbiAqIHJlcGVhdHMgZm9yIHRoZSBuZXh0IHNvdXJjZSB2YWx1ZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IGNsaWNrcyBhdCBhIHJhdGUgb2YgYXQgbW9zdCBvbmUgY2xpY2sgcGVyIHNlY29uZDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmF1ZGl0KGV2ID0+IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdFRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5V2hlbn1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQpOiBTdWJzY3JpYmFibGVPclByb21pc2V9IGR1cmF0aW9uU2VsZWN0b3IgQSBmdW5jdGlvblxuICogdGhhdCByZWNlaXZlcyBhIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBmb3IgY29tcHV0aW5nIHRoZSBzaWxlbmNpbmdcbiAqIGR1cmF0aW9uLCByZXR1cm5lZCBhcyBhbiBPYnNlcnZhYmxlIG9yIGEgUHJvbWlzZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBwZXJmb3JtcyByYXRlLWxpbWl0aW5nIG9mXG4gKiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIGF1ZGl0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBhdWRpdChkdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGF1ZGl0XzEuYXVkaXQoZHVyYXRpb25TZWxlY3RvcikodGhpcyk7XG59XG5leHBvcnRzLmF1ZGl0ID0gYXVkaXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdWRpdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG52YXIgYXVkaXRUaW1lXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvYXVkaXRUaW1lJyk7XG4vKipcbiAqIElnbm9yZXMgc291cmNlIHZhbHVlcyBmb3IgYGR1cmF0aW9uYCBtaWxsaXNlY29uZHMsIHRoZW4gZW1pdHMgdGhlIG1vc3QgcmVjZW50XG4gKiB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdGhlbiByZXBlYXRzIHRoaXMgcHJvY2Vzcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+V2hlbiBpdCBzZWVzIGEgc291cmNlIHZhbHVlcywgaXQgaWdub3JlcyB0aGF0IHBsdXNcbiAqIHRoZSBuZXh0IG9uZXMgZm9yIGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBpdCBlbWl0cyB0aGUgbW9zdCByZWNlbnRcbiAqIHZhbHVlIGZyb20gdGhlIHNvdXJjZS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9hdWRpdFRpbWUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGF1ZGl0VGltZWAgaXMgc2ltaWxhciB0byBgdGhyb3R0bGVUaW1lYCwgYnV0IGVtaXRzIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlXG4gKiBzaWxlbmNlZCB0aW1lIHdpbmRvdywgaW5zdGVhZCBvZiB0aGUgZmlyc3QgdmFsdWUuIGBhdWRpdFRpbWVgIGVtaXRzIHRoZSBtb3N0XG4gKiByZWNlbnQgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGFzIHNvb24gYXNcbiAqIGl0cyBpbnRlcm5hbCB0aW1lciBiZWNvbWVzIGRpc2FibGVkLCBhbmQgaWdub3JlcyBzb3VyY2UgdmFsdWVzIHdoaWxlIHRoZVxuICogdGltZXIgaXMgZW5hYmxlZC4gSW5pdGlhbGx5LCB0aGUgdGltZXIgaXMgZGlzYWJsZWQuIEFzIHNvb24gYXMgdGhlIGZpcnN0XG4gKiBzb3VyY2UgdmFsdWUgYXJyaXZlcywgdGhlIHRpbWVyIGlzIGVuYWJsZWQuIEFmdGVyIGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzIChvclxuICogdGhlIHRpbWUgdW5pdCBkZXRlcm1pbmVkIGludGVybmFsbHkgYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgKSBoYXMgcGFzc2VkLFxuICogdGhlIHRpbWVyIGlzIGRpc2FibGVkLCB0aGVuIHRoZSBtb3N0IHJlY2VudCBzb3VyY2UgdmFsdWUgaXMgZW1pdHRlZCBvbiB0aGVcbiAqIG91dHB1dCBPYnNlcnZhYmxlLCBhbmQgdGhpcyBwcm9jZXNzIHJlcGVhdHMgZm9yIHRoZSBuZXh0IHNvdXJjZSB2YWx1ZS5cbiAqIE9wdGlvbmFsbHkgdGFrZXMgYSB7QGxpbmsgSVNjaGVkdWxlcn0gZm9yIG1hbmFnaW5nIHRpbWVycy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IGNsaWNrcyBhdCBhIHJhdGUgb2YgYXQgbW9zdCBvbmUgY2xpY2sgcGVyIHNlY29uZDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmF1ZGl0VGltZSgxMDAwKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXR9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWxheX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZVRpbWV9XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZVRpbWV9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIFRpbWUgdG8gd2FpdCBiZWZvcmUgZW1pdHRpbmcgdGhlIG1vc3QgcmVjZW50IHNvdXJjZVxuICogdmFsdWUsIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcyBvciB0aGUgdGltZSB1bml0IGRldGVybWluZWQgaW50ZXJuYWxseVxuICogYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgLlxuICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXI9YXN5bmNdIFRoZSB7QGxpbmsgSVNjaGVkdWxlcn0gdG8gdXNlIGZvclxuICogbWFuYWdpbmcgdGhlIHRpbWVycyB0aGF0IGhhbmRsZSB0aGUgcmF0ZS1saW1pdGluZyBiZWhhdmlvci5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBwZXJmb3JtcyByYXRlLWxpbWl0aW5nIG9mXG4gKiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIGF1ZGl0VGltZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gYXVkaXRUaW1lKGR1cmF0aW9uLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHJldHVybiBhdWRpdFRpbWVfMS5hdWRpdFRpbWUoZHVyYXRpb24sIHNjaGVkdWxlcikodGhpcyk7XG59XG5leHBvcnRzLmF1ZGl0VGltZSA9IGF1ZGl0VGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1ZGl0VGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBidWZmZXJfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9idWZmZXInKTtcbi8qKlxuICogQnVmZmVycyB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIHVudGlsIGBjbG9zaW5nTm90aWZpZXJgIGVtaXRzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5Db2xsZWN0cyB2YWx1ZXMgZnJvbSB0aGUgcGFzdCBhcyBhbiBhcnJheSwgYW5kIGVtaXRzXG4gKiB0aGF0IGFycmF5IG9ubHkgd2hlbiBhbm90aGVyIE9ic2VydmFibGUgZW1pdHMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvYnVmZmVyLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEJ1ZmZlcnMgdGhlIGluY29taW5nIE9ic2VydmFibGUgdmFsdWVzIHVudGlsIHRoZSBnaXZlbiBgY2xvc2luZ05vdGlmaWVyYFxuICogT2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlLCBhdCB3aGljaCBwb2ludCBpdCBlbWl0cyB0aGUgYnVmZmVyIG9uIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUgYW5kIHN0YXJ0cyBhIG5ldyBidWZmZXIgaW50ZXJuYWxseSwgYXdhaXRpbmcgdGhlIG5leHQgdGltZVxuICogYGNsb3NpbmdOb3RpZmllcmAgZW1pdHMuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+T24gZXZlcnkgY2xpY2ssIGVtaXQgYXJyYXkgb2YgbW9zdCByZWNlbnQgaW50ZXJ2YWwgZXZlbnRzPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBpbnRlcnZhbCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgYnVmZmVyZWQgPSBpbnRlcnZhbC5idWZmZXIoY2xpY2tzKTtcbiAqIGJ1ZmZlcmVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJDb3VudH1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRpbWV9XG4gKiBAc2VlIHtAbGluayBidWZmZXJUb2dnbGV9XG4gKiBAc2VlIHtAbGluayBidWZmZXJXaGVufVxuICogQHNlZSB7QGxpbmsgd2luZG93fVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZTxhbnk+fSBjbG9zaW5nTm90aWZpZXIgQW4gT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgdGhlXG4gKiBidWZmZXIgdG8gYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRbXT59IEFuIE9ic2VydmFibGUgb2YgYnVmZmVycywgd2hpY2ggYXJlIGFycmF5cyBvZlxuICogdmFsdWVzLlxuICogQG1ldGhvZCBidWZmZXJcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlcihjbG9zaW5nTm90aWZpZXIpIHtcbiAgICByZXR1cm4gYnVmZmVyXzEuYnVmZmVyKGNsb3NpbmdOb3RpZmllcikodGhpcyk7XG59XG5leHBvcnRzLmJ1ZmZlciA9IGJ1ZmZlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBidWZmZXJDb3VudF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2J1ZmZlckNvdW50Jyk7XG4vKipcbiAqIEJ1ZmZlcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyB1bnRpbCB0aGUgc2l6ZSBoaXRzIHRoZSBtYXhpbXVtXG4gKiBgYnVmZmVyU2l6ZWAgZ2l2ZW4uXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbGxlY3RzIHZhbHVlcyBmcm9tIHRoZSBwYXN0IGFzIGFuIGFycmF5LCBhbmQgZW1pdHNcbiAqIHRoYXQgYXJyYXkgb25seSB3aGVuIGl0cyBzaXplIHJlYWNoZXMgYGJ1ZmZlclNpemVgLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2J1ZmZlckNvdW50LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEJ1ZmZlcnMgYSBudW1iZXIgb2YgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IGBidWZmZXJTaXplYCB0aGVuXG4gKiBlbWl0cyB0aGUgYnVmZmVyIGFuZCBjbGVhcnMgaXQsIGFuZCBzdGFydHMgYSBuZXcgYnVmZmVyIGVhY2hcbiAqIGBzdGFydEJ1ZmZlckV2ZXJ5YCB2YWx1ZXMuIElmIGBzdGFydEJ1ZmZlckV2ZXJ5YCBpcyBub3QgcHJvdmlkZWQgb3IgaXNcbiAqIGBudWxsYCwgdGhlbiBuZXcgYnVmZmVycyBhcmUgc3RhcnRlZCBpbW1lZGlhdGVseSBhdCB0aGUgc3RhcnQgb2YgdGhlIHNvdXJjZVxuICogYW5kIHdoZW4gZWFjaCBidWZmZXIgY2xvc2VzIGFuZCBpcyBlbWl0dGVkLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgdGhlIGxhc3QgdHdvIGNsaWNrIGV2ZW50cyBhcyBhbiBhcnJheTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgYnVmZmVyZWQgPSBjbGlja3MuYnVmZmVyQ291bnQoMik7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+T24gZXZlcnkgY2xpY2ssIGVtaXQgdGhlIGxhc3QgdHdvIGNsaWNrIGV2ZW50cyBhcyBhbiBhcnJheTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgYnVmZmVyZWQgPSBjbGlja3MuYnVmZmVyQ291bnQoMiwgMSk7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYnVmZmVyfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVGltZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRvZ2dsZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcldoZW59XG4gKiBAc2VlIHtAbGluayBwYWlyd2lzZX1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd0NvdW50fVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBidWZmZXJTaXplIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBlbWl0dGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydEJ1ZmZlckV2ZXJ5XSBJbnRlcnZhbCBhdCB3aGljaCB0byBzdGFydCBhIG5ldyBidWZmZXIuXG4gKiBGb3IgZXhhbXBsZSBpZiBgc3RhcnRCdWZmZXJFdmVyeWAgaXMgYDJgLCB0aGVuIGEgbmV3IGJ1ZmZlciB3aWxsIGJlIHN0YXJ0ZWRcbiAqIG9uIGV2ZXJ5IG90aGVyIHZhbHVlIGZyb20gdGhlIHNvdXJjZS4gQSBuZXcgYnVmZmVyIGlzIHN0YXJ0ZWQgYXQgdGhlXG4gKiBiZWdpbm5pbmcgb2YgdGhlIHNvdXJjZSBieSBkZWZhdWx0LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUW10+fSBBbiBPYnNlcnZhYmxlIG9mIGFycmF5cyBvZiBidWZmZXJlZCB2YWx1ZXMuXG4gKiBAbWV0aG9kIGJ1ZmZlckNvdW50XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBidWZmZXJDb3VudChidWZmZXJTaXplLCBzdGFydEJ1ZmZlckV2ZXJ5KSB7XG4gICAgaWYgKHN0YXJ0QnVmZmVyRXZlcnkgPT09IHZvaWQgMCkgeyBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsgfVxuICAgIHJldHVybiBidWZmZXJDb3VudF8xLmJ1ZmZlckNvdW50KGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpKHRoaXMpO1xufVxuZXhwb3J0cy5idWZmZXJDb3VudCA9IGJ1ZmZlckNvdW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyQ291bnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xudmFyIGlzU2NoZWR1bGVyXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzU2NoZWR1bGVyJyk7XG52YXIgYnVmZmVyVGltZV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2J1ZmZlclRpbWUnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIEJ1ZmZlcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyBmb3IgYSBzcGVjaWZpYyB0aW1lIHBlcmlvZC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Q29sbGVjdHMgdmFsdWVzIGZyb20gdGhlIHBhc3QgYXMgYW4gYXJyYXksIGFuZCBlbWl0c1xuICogdGhvc2UgYXJyYXlzIHBlcmlvZGljYWxseSBpbiB0aW1lLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2J1ZmZlclRpbWUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQnVmZmVycyB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIGZvciBhIHNwZWNpZmljIHRpbWUgZHVyYXRpb24gYGJ1ZmZlclRpbWVTcGFuYC5cbiAqIFVubGVzcyB0aGUgb3B0aW9uYWwgYXJndW1lbnQgYGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWxgIGlzIGdpdmVuLCBpdCBlbWl0cyBhbmRcbiAqIHJlc2V0cyB0aGUgYnVmZmVyIGV2ZXJ5IGBidWZmZXJUaW1lU3BhbmAgbWlsbGlzZWNvbmRzLiBJZlxuICogYGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWxgIGlzIGdpdmVuLCB0aGlzIG9wZXJhdG9yIG9wZW5zIHRoZSBidWZmZXIgZXZlcnlcbiAqIGBidWZmZXJDcmVhdGlvbkludGVydmFsYCBtaWxsaXNlY29uZHMgYW5kIGNsb3NlcyAoZW1pdHMgYW5kIHJlc2V0cykgdGhlXG4gKiBidWZmZXIgZXZlcnkgYGJ1ZmZlclRpbWVTcGFuYCBtaWxsaXNlY29uZHMuIFdoZW4gdGhlIG9wdGlvbmFsIGFyZ3VtZW50XG4gKiBgbWF4QnVmZmVyU2l6ZWAgaXMgc3BlY2lmaWVkLCB0aGUgYnVmZmVyIHdpbGwgYmUgY2xvc2VkIGVpdGhlciBhZnRlclxuICogYGJ1ZmZlclRpbWVTcGFuYCBtaWxsaXNlY29uZHMgb3Igd2hlbiBpdCBjb250YWlucyBgbWF4QnVmZmVyU2l6ZWAgZWxlbWVudHMuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXZlcnkgc2Vjb25kLCBlbWl0IGFuIGFycmF5IG9mIHRoZSByZWNlbnQgY2xpY2sgZXZlbnRzPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBidWZmZXJlZCA9IGNsaWNrcy5idWZmZXJUaW1lKDEwMDApO1xuICogYnVmZmVyZWQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkV2ZXJ5IDUgc2Vjb25kcywgZW1pdCB0aGUgY2xpY2sgZXZlbnRzIGZyb20gdGhlIG5leHQgMiBzZWNvbmRzPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBidWZmZXJlZCA9IGNsaWNrcy5idWZmZXJUaW1lKDIwMDAsIDUwMDApO1xuICogYnVmZmVyZWQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlckNvdW50fVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVG9nZ2xlfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyV2hlbn1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1RpbWV9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGJ1ZmZlclRpbWVTcGFuIFRoZSBhbW91bnQgb2YgdGltZSB0byBmaWxsIGVhY2ggYnVmZmVyIGFycmF5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtidWZmZXJDcmVhdGlvbkludGVydmFsXSBUaGUgaW50ZXJ2YWwgYXQgd2hpY2ggdG8gc3RhcnQgbmV3XG4gKiBidWZmZXJzLlxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhCdWZmZXJTaXplXSBUaGUgbWF4aW11bSBidWZmZXIgc2l6ZS5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyPWFzeW5jXSBUaGUgc2NoZWR1bGVyIG9uIHdoaWNoIHRvIHNjaGVkdWxlIHRoZVxuICogaW50ZXJ2YWxzIHRoYXQgZGV0ZXJtaW5lIGJ1ZmZlciBib3VuZGFyaWVzLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUW10+fSBBbiBvYnNlcnZhYmxlIG9mIGFycmF5cyBvZiBidWZmZXJlZCB2YWx1ZXMuXG4gKiBAbWV0aG9kIGJ1ZmZlclRpbWVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlclRpbWUoYnVmZmVyVGltZVNwYW4pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYztcbiAgICBpZiAoaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICBzY2hlZHVsZXIgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBsZW5ndGgtLTtcbiAgICB9XG4gICAgdmFyIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSBudWxsO1xuICAgIGlmIChsZW5ndGggPj0gMikge1xuICAgICAgICBidWZmZXJDcmVhdGlvbkludGVydmFsID0gYXJndW1lbnRzWzFdO1xuICAgIH1cbiAgICB2YXIgbWF4QnVmZmVyU2l6ZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBpZiAobGVuZ3RoID49IDMpIHtcbiAgICAgICAgbWF4QnVmZmVyU2l6ZSA9IGFyZ3VtZW50c1syXTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlclRpbWVfMS5idWZmZXJUaW1lKGJ1ZmZlclRpbWVTcGFuLCBidWZmZXJDcmVhdGlvbkludGVydmFsLCBtYXhCdWZmZXJTaXplLCBzY2hlZHVsZXIpKHRoaXMpO1xufVxuZXhwb3J0cy5idWZmZXJUaW1lID0gYnVmZmVyVGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlclRpbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYnVmZmVyVG9nZ2xlXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvYnVmZmVyVG9nZ2xlJyk7XG4vKipcbiAqIEJ1ZmZlcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyBzdGFydGluZyBmcm9tIGFuIGVtaXNzaW9uIGZyb21cbiAqIGBvcGVuaW5nc2AgYW5kIGVuZGluZyB3aGVuIHRoZSBvdXRwdXQgb2YgYGNsb3NpbmdTZWxlY3RvcmAgZW1pdHMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbGxlY3RzIHZhbHVlcyBmcm9tIHRoZSBwYXN0IGFzIGFuIGFycmF5LiBTdGFydHNcbiAqIGNvbGxlY3Rpbmcgb25seSB3aGVuIGBvcGVuaW5nYCBlbWl0cywgYW5kIGNhbGxzIHRoZSBgY2xvc2luZ1NlbGVjdG9yYFxuICogZnVuY3Rpb24gdG8gZ2V0IGFuIE9ic2VydmFibGUgdGhhdCB0ZWxscyB3aGVuIHRvIGNsb3NlIHRoZSBidWZmZXIuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvYnVmZmVyVG9nZ2xlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEJ1ZmZlcnMgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBieSBvcGVuaW5nIHRoZSBidWZmZXIgdmlhIHNpZ25hbHMgZnJvbSBhblxuICogT2JzZXJ2YWJsZSBwcm92aWRlZCB0byBgb3BlbmluZ3NgLCBhbmQgY2xvc2luZyBhbmQgc2VuZGluZyB0aGUgYnVmZmVycyB3aGVuXG4gKiBhIFN1YnNjcmliYWJsZSBvciBQcm9taXNlIHJldHVybmVkIGJ5IHRoZSBgY2xvc2luZ1NlbGVjdG9yYCBmdW5jdGlvbiBlbWl0cy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FdmVyeSBvdGhlciBzZWNvbmQsIGVtaXQgdGhlIGNsaWNrIGV2ZW50cyBmcm9tIHRoZSBuZXh0IDUwMG1zPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBvcGVuaW5ncyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgYnVmZmVyZWQgPSBjbGlja3MuYnVmZmVyVG9nZ2xlKG9wZW5pbmdzLCBpID0+XG4gKiAgIGkgJSAyID8gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCg1MDApIDogUnguT2JzZXJ2YWJsZS5lbXB0eSgpXG4gKiApO1xuICogYnVmZmVyZWQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlckNvdW50fVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVGltZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcldoZW59XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUb2dnbGV9XG4gKlxuICogQHBhcmFtIHtTdWJzY3JpYmFibGVPclByb21pc2U8Tz59IG9wZW5pbmdzIEEgU3Vic2NyaWJhYmxlIG9yIFByb21pc2Ugb2Ygbm90aWZpY2F0aW9ucyB0byBzdGFydCBuZXdcbiAqIGJ1ZmZlcnMuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBPKTogU3Vic2NyaWJhYmxlT3JQcm9taXNlfSBjbG9zaW5nU2VsZWN0b3IgQSBmdW5jdGlvbiB0aGF0IHRha2VzXG4gKiB0aGUgdmFsdWUgZW1pdHRlZCBieSB0aGUgYG9wZW5pbmdzYCBvYnNlcnZhYmxlIGFuZCByZXR1cm5zIGEgU3Vic2NyaWJhYmxlIG9yIFByb21pc2UsXG4gKiB3aGljaCwgd2hlbiBpdCBlbWl0cywgc2lnbmFscyB0aGF0IHRoZSBhc3NvY2lhdGVkIGJ1ZmZlciBzaG91bGQgYmUgZW1pdHRlZFxuICogYW5kIGNsZWFyZWQuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRbXT59IEFuIG9ic2VydmFibGUgb2YgYXJyYXlzIG9mIGJ1ZmZlcmVkIHZhbHVlcy5cbiAqIEBtZXRob2QgYnVmZmVyVG9nZ2xlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBidWZmZXJUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBidWZmZXJUb2dnbGVfMS5idWZmZXJUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3RvcikodGhpcyk7XG59XG5leHBvcnRzLmJ1ZmZlclRvZ2dsZSA9IGJ1ZmZlclRvZ2dsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlclRvZ2dsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBidWZmZXJXaGVuXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvYnVmZmVyV2hlbicpO1xuLyoqXG4gKiBCdWZmZXJzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMsIHVzaW5nIGEgZmFjdG9yeSBmdW5jdGlvbiBvZiBjbG9zaW5nXG4gKiBPYnNlcnZhYmxlcyB0byBkZXRlcm1pbmUgd2hlbiB0byBjbG9zZSwgZW1pdCwgYW5kIHJlc2V0IHRoZSBidWZmZXIuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbGxlY3RzIHZhbHVlcyBmcm9tIHRoZSBwYXN0IGFzIGFuIGFycmF5LiBXaGVuIGl0XG4gKiBzdGFydHMgY29sbGVjdGluZyB2YWx1ZXMsIGl0IGNhbGxzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdFxuICogdGVsbHMgd2hlbiB0byBjbG9zZSB0aGUgYnVmZmVyIGFuZCByZXN0YXJ0IGNvbGxlY3RpbmcuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvYnVmZmVyV2hlbi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBPcGVucyBhIGJ1ZmZlciBpbW1lZGlhdGVseSwgdGhlbiBjbG9zZXMgdGhlIGJ1ZmZlciB3aGVuIHRoZSBvYnNlcnZhYmxlXG4gKiByZXR1cm5lZCBieSBjYWxsaW5nIGBjbG9zaW5nU2VsZWN0b3JgIGZ1bmN0aW9uIGVtaXRzIGEgdmFsdWUuIFdoZW4gaXQgY2xvc2VzXG4gKiB0aGUgYnVmZmVyLCBpdCBpbW1lZGlhdGVseSBvcGVucyBhIG5ldyBidWZmZXIgYW5kIHJlcGVhdHMgdGhlIHByb2Nlc3MuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCBhbiBhcnJheSBvZiB0aGUgbGFzdCBjbGlja3MgZXZlcnkgWzEtNV0gcmFuZG9tIHNlY29uZHM8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGJ1ZmZlcmVkID0gY2xpY2tzLmJ1ZmZlcldoZW4oKCkgPT5cbiAqICAgUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwICsgTWF0aC5yYW5kb20oKSAqIDQwMDApXG4gKiApO1xuICogYnVmZmVyZWQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlckNvdW50fVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVGltZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRvZ2dsZX1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1doZW59XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbigpOiBPYnNlcnZhYmxlfSBjbG9zaW5nU2VsZWN0b3IgQSBmdW5jdGlvbiB0aGF0IHRha2VzIG5vXG4gKiBhcmd1bWVudHMgYW5kIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgYnVmZmVyIGNsb3N1cmUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRbXT59IEFuIG9ic2VydmFibGUgb2YgYXJyYXlzIG9mIGJ1ZmZlcmVkIHZhbHVlcy5cbiAqIEBtZXRob2QgYnVmZmVyV2hlblxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gYnVmZmVyV2hlbihjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gYnVmZmVyV2hlbl8xLmJ1ZmZlcldoZW4oY2xvc2luZ1NlbGVjdG9yKSh0aGlzKTtcbn1cbmV4cG9ydHMuYnVmZmVyV2hlbiA9IGJ1ZmZlcldoZW47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJXaGVuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGNhdGNoRXJyb3JfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9jYXRjaEVycm9yJyk7XG4vKipcbiAqIENhdGNoZXMgZXJyb3JzIG9uIHRoZSBvYnNlcnZhYmxlIHRvIGJlIGhhbmRsZWQgYnkgcmV0dXJuaW5nIGEgbmV3IG9ic2VydmFibGUgb3IgdGhyb3dpbmcgYW4gZXJyb3IuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9jYXRjaC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db250aW51ZXMgd2l0aCBhIGRpZmZlcmVudCBPYnNlcnZhYmxlIHdoZW4gdGhlcmUncyBhbiBlcnJvcjwvY2FwdGlvbj5cbiAqXG4gKiBPYnNlcnZhYmxlLm9mKDEsIDIsIDMsIDQsIDUpXG4gKiAgIC5tYXAobiA9PiB7XG4gKiBcdCAgIGlmIChuID09IDQpIHtcbiAqIFx0ICAgICB0aHJvdyAnZm91ciEnO1xuICogICAgIH1cbiAqXHQgICByZXR1cm4gbjtcbiAqICAgfSlcbiAqICAgLmNhdGNoKGVyciA9PiBPYnNlcnZhYmxlLm9mKCdJJywgJ0lJJywgJ0lJSScsICdJVicsICdWJykpXG4gKiAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiAgIC8vIDEsIDIsIDMsIEksIElJLCBJSUksIElWLCBWXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+UmV0cmllcyB0aGUgY2F1Z2h0IHNvdXJjZSBPYnNlcnZhYmxlIGFnYWluIGluIGNhc2Ugb2YgZXJyb3IsIHNpbWlsYXIgdG8gcmV0cnkoKSBvcGVyYXRvcjwvY2FwdGlvbj5cbiAqXG4gKiBPYnNlcnZhYmxlLm9mKDEsIDIsIDMsIDQsIDUpXG4gKiAgIC5tYXAobiA9PiB7XG4gKiBcdCAgIGlmIChuID09PSA0KSB7XG4gKiBcdCAgICAgdGhyb3cgJ2ZvdXIhJztcbiAqICAgICB9XG4gKiBcdCAgIHJldHVybiBuO1xuICogICB9KVxuICogICAuY2F0Y2goKGVyciwgY2F1Z2h0KSA9PiBjYXVnaHQpXG4gKiAgIC50YWtlKDMwKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICogICAvLyAxLCAyLCAzLCAxLCAyLCAzLCAuLi5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5UaHJvd3MgYSBuZXcgZXJyb3Igd2hlbiB0aGUgc291cmNlIE9ic2VydmFibGUgdGhyb3dzIGFuIGVycm9yPC9jYXB0aW9uPlxuICpcbiAqIE9ic2VydmFibGUub2YoMSwgMiwgMywgNCwgNSlcbiAqICAgLm1hcChuID0+IHtcbiAqICAgICBpZiAobiA9PSA0KSB7XG4gKiAgICAgICB0aHJvdyAnZm91ciEnO1xuICogICAgIH1cbiAqICAgICByZXR1cm4gbjtcbiAqICAgfSlcbiAqICAgLmNhdGNoKGVyciA9PiB7XG4gKiAgICAgdGhyb3cgJ2Vycm9yIGluIHNvdXJjZS4gRGV0YWlsczogJyArIGVycjtcbiAqICAgfSlcbiAqICAgLnN1YnNjcmliZShcbiAqICAgICB4ID0+IGNvbnNvbGUubG9nKHgpLFxuICogICAgIGVyciA9PiBjb25zb2xlLmxvZyhlcnIpXG4gKiAgICk7XG4gKiAgIC8vIDEsIDIsIDMsIGVycm9yIGluIHNvdXJjZS4gRGV0YWlsczogZm91ciFcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzZWxlY3RvciBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXMgYXJndW1lbnRzIGBlcnJgLCB3aGljaCBpcyB0aGUgZXJyb3IsIGFuZCBgY2F1Z2h0YCwgd2hpY2hcbiAqICBpcyB0aGUgc291cmNlIG9ic2VydmFibGUsIGluIGNhc2UgeW91J2QgbGlrZSB0byBcInJldHJ5XCIgdGhhdCBvYnNlcnZhYmxlIGJ5IHJldHVybmluZyBpdCBhZ2Fpbi4gV2hhdGV2ZXIgb2JzZXJ2YWJsZVxuICogIGlzIHJldHVybmVkIGJ5IHRoZSBgc2VsZWN0b3JgIHdpbGwgYmUgdXNlZCB0byBjb250aW51ZSB0aGUgb2JzZXJ2YWJsZSBjaGFpbi5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIG9ic2VydmFibGUgdGhhdCBvcmlnaW5hdGVzIGZyb20gZWl0aGVyIHRoZSBzb3VyY2Ugb3IgdGhlIG9ic2VydmFibGUgcmV0dXJuZWQgYnkgdGhlXG4gKiAgY2F0Y2ggYHNlbGVjdG9yYCBmdW5jdGlvbi5cbiAqIEBtZXRob2QgY2F0Y2hcbiAqIEBuYW1lIGNhdGNoXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBfY2F0Y2goc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gY2F0Y2hFcnJvcl8xLmNhdGNoRXJyb3Ioc2VsZWN0b3IpKHRoaXMpO1xufVxuZXhwb3J0cy5fY2F0Y2ggPSBfY2F0Y2g7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYXRjaC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBjb21iaW5lQWxsXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvY29tYmluZUFsbCcpO1xuLyoqXG4gKiBDb252ZXJ0cyBhIGhpZ2hlci1vcmRlciBPYnNlcnZhYmxlIGludG8gYSBmaXJzdC1vcmRlciBPYnNlcnZhYmxlIGJ5IHdhaXRpbmdcbiAqIGZvciB0aGUgb3V0ZXIgT2JzZXJ2YWJsZSB0byBjb21wbGV0ZSwgdGhlbiBhcHBseWluZyB7QGxpbmsgY29tYmluZUxhdGVzdH0uXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkZsYXR0ZW5zIGFuIE9ic2VydmFibGUtb2YtT2JzZXJ2YWJsZXMgYnkgYXBwbHlpbmdcbiAqIHtAbGluayBjb21iaW5lTGF0ZXN0fSB3aGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzIGNvbXBsZXRlcy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9jb21iaW5lQWxsLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFRha2VzIGFuIE9ic2VydmFibGUgb2YgT2JzZXJ2YWJsZXMsIGFuZCBjb2xsZWN0cyBhbGwgT2JzZXJ2YWJsZXMgZnJvbSBpdC5cbiAqIE9uY2UgdGhlIG91dGVyIE9ic2VydmFibGUgY29tcGxldGVzLCBpdCBzdWJzY3JpYmVzIHRvIGFsbCBjb2xsZWN0ZWRcbiAqIE9ic2VydmFibGVzIGFuZCBjb21iaW5lcyB0aGVpciB2YWx1ZXMgdXNpbmcgdGhlIHtAbGluayBjb21iaW5lTGF0ZXN0fVxuICogc3RyYXRlZ3ksIHN1Y2ggdGhhdDpcbiAqIC0gRXZlcnkgdGltZSBhbiBpbm5lciBPYnNlcnZhYmxlIGVtaXRzLCB0aGUgb3V0cHV0IE9ic2VydmFibGUgZW1pdHMuXG4gKiAtIFdoZW4gdGhlIHJldHVybmVkIG9ic2VydmFibGUgZW1pdHMsIGl0IGVtaXRzIGFsbCBvZiB0aGUgbGF0ZXN0IHZhbHVlcyBieTpcbiAqICAgLSBJZiBhIGBwcm9qZWN0YCBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgaXMgY2FsbGVkIHdpdGggZWFjaCByZWNlbnQgdmFsdWVcbiAqICAgICBmcm9tIGVhY2ggaW5uZXIgT2JzZXJ2YWJsZSBpbiB3aGF0ZXZlciBvcmRlciB0aGV5IGFycml2ZWQsIGFuZCB0aGUgcmVzdWx0XG4gKiAgICAgb2YgdGhlIGBwcm9qZWN0YCBmdW5jdGlvbiBpcyB3aGF0IGlzIGVtaXR0ZWQgYnkgdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICogICAtIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0YCBmdW5jdGlvbiwgYW4gYXJyYXkgb2YgYWxsIG9mIHRoZSBtb3N0IHJlY2VudFxuICogICAgIHZhbHVlcyBpcyBlbWl0dGVkIGJ5IHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5NYXAgdHdvIGNsaWNrIGV2ZW50cyB0byBhIGZpbml0ZSBpbnRlcnZhbCBPYnNlcnZhYmxlLCB0aGVuIGFwcGx5IGNvbWJpbmVBbGw8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGhpZ2hlck9yZGVyID0gY2xpY2tzLm1hcChldiA9PlxuICogICBSeC5PYnNlcnZhYmxlLmludGVydmFsKE1hdGgucmFuZG9tKCkqMjAwMCkudGFrZSgzKVxuICogKS50YWtlKDIpO1xuICogdmFyIHJlc3VsdCA9IGhpZ2hlck9yZGVyLmNvbWJpbmVBbGwoKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUxhdGVzdH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlQWxsfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtwcm9qZWN0XSBBbiBvcHRpb25hbCBmdW5jdGlvbiB0byBtYXAgdGhlIG1vc3QgcmVjZW50XG4gKiB2YWx1ZXMgZnJvbSBlYWNoIGlubmVyIE9ic2VydmFibGUgaW50byBhIG5ldyByZXN1bHQuIFRha2VzIGVhY2ggb2YgdGhlIG1vc3RcbiAqIHJlY2VudCB2YWx1ZXMgZnJvbSBlYWNoIGNvbGxlY3RlZCBpbm5lciBPYnNlcnZhYmxlIGFzIGFyZ3VtZW50cywgaW4gb3JkZXIuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIHByb2plY3RlZCByZXN1bHRzIG9yIGFycmF5cyBvZiByZWNlbnRcbiAqIHZhbHVlcy5cbiAqIEBtZXRob2QgY29tYmluZUFsbFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gY29tYmluZUFsbChwcm9qZWN0KSB7XG4gICAgcmV0dXJuIGNvbWJpbmVBbGxfMS5jb21iaW5lQWxsKHByb2plY3QpKHRoaXMpO1xufVxuZXhwb3J0cy5jb21iaW5lQWxsID0gY29tYmluZUFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY29tYmluZUxhdGVzdF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3QnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIE9ic2VydmFibGVzIHRvIGNyZWF0ZSBhbiBPYnNlcnZhYmxlIHdob3NlIHZhbHVlcyBhcmVcbiAqIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbGF0ZXN0IHZhbHVlcyBvZiBlYWNoIG9mIGl0cyBpbnB1dCBPYnNlcnZhYmxlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+V2hlbmV2ZXIgYW55IGlucHV0IE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZSwgaXRcbiAqIGNvbXB1dGVzIGEgZm9ybXVsYSB1c2luZyB0aGUgbGF0ZXN0IHZhbHVlcyBmcm9tIGFsbCB0aGUgaW5wdXRzLCB0aGVuIGVtaXRzXG4gKiB0aGUgb3V0cHV0IG9mIHRoYXQgZm9ybXVsYS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9jb21iaW5lTGF0ZXN0LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBjb21iaW5lTGF0ZXN0YCBjb21iaW5lcyB0aGUgdmFsdWVzIGZyb20gdGhpcyBPYnNlcnZhYmxlIHdpdGggdmFsdWVzIGZyb21cbiAqIE9ic2VydmFibGVzIHBhc3NlZCBhcyBhcmd1bWVudHMuIFRoaXMgaXMgZG9uZSBieSBzdWJzY3JpYmluZyB0byBlYWNoXG4gKiBPYnNlcnZhYmxlLCBpbiBvcmRlciwgYW5kIGNvbGxlY3RpbmcgYW4gYXJyYXkgb2YgZWFjaCBvZiB0aGUgbW9zdCByZWNlbnRcbiAqIHZhbHVlcyBhbnkgdGltZSBhbnkgb2YgdGhlIGlucHV0IE9ic2VydmFibGVzIGVtaXRzLCB0aGVuIGVpdGhlciB0YWtpbmcgdGhhdFxuICogYXJyYXkgYW5kIHBhc3NpbmcgaXQgYXMgYXJndW1lbnRzIHRvIGFuIG9wdGlvbmFsIGBwcm9qZWN0YCBmdW5jdGlvbiBhbmRcbiAqIGVtaXR0aW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCwgb3IganVzdCBlbWl0dGluZyB0aGUgYXJyYXkgb2YgcmVjZW50XG4gKiB2YWx1ZXMgZGlyZWN0bHkgaWYgdGhlcmUgaXMgbm8gYHByb2plY3RgIGZ1bmN0aW9uLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkR5bmFtaWNhbGx5IGNhbGN1bGF0ZSB0aGUgQm9keS1NYXNzIEluZGV4IGZyb20gYW4gT2JzZXJ2YWJsZSBvZiB3ZWlnaHQgYW5kIG9uZSBmb3IgaGVpZ2h0PC9jYXB0aW9uPlxuICogdmFyIHdlaWdodCA9IFJ4Lk9ic2VydmFibGUub2YoNzAsIDcyLCA3NiwgNzksIDc1KTtcbiAqIHZhciBoZWlnaHQgPSBSeC5PYnNlcnZhYmxlLm9mKDEuNzYsIDEuNzcsIDEuNzgpO1xuICogdmFyIGJtaSA9IHdlaWdodC5jb21iaW5lTGF0ZXN0KGhlaWdodCwgKHcsIGgpID0+IHcgLyAoaCAqIGgpKTtcbiAqIGJtaS5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZygnQk1JIGlzICcgKyB4KSk7XG4gKlxuICogLy8gV2l0aCBvdXRwdXQgdG8gY29uc29sZTpcbiAqIC8vIEJNSSBpcyAyNC4yMTIyOTMzODg0Mjk3NTNcbiAqIC8vIEJNSSBpcyAyMy45Mzk0ODA5OTIwNTIwOVxuICogLy8gQk1JIGlzIDIzLjY3MTI1MzYyOTU5MjIyMlxuICpcbiAqIEBzZWUge0BsaW5rIGNvbWJpbmVBbGx9XG4gKiBAc2VlIHtAbGluayBtZXJnZX1cbiAqIEBzZWUge0BsaW5rIHdpdGhMYXRlc3RGcm9tfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBvdGhlciBBbiBpbnB1dCBPYnNlcnZhYmxlIHRvIGNvbWJpbmUgd2l0aCB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBNb3JlIHRoYW4gb25lIGlucHV0IE9ic2VydmFibGVzIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtwcm9qZWN0XSBBbiBvcHRpb25hbCBmdW5jdGlvbiB0byBwcm9qZWN0IHRoZSB2YWx1ZXMgZnJvbVxuICogdGhlIGNvbWJpbmVkIGxhdGVzdCB2YWx1ZXMgaW50byBhIG5ldyB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIHByb2plY3RlZCB2YWx1ZXMgZnJvbSB0aGUgbW9zdCByZWNlbnRcbiAqIHZhbHVlcyBmcm9tIGVhY2ggaW5wdXQgT2JzZXJ2YWJsZSwgb3IgYW4gYXJyYXkgb2YgdGhlIG1vc3QgcmVjZW50IHZhbHVlcyBmcm9tXG4gKiBlYWNoIGlucHV0IE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIGNvbWJpbmVMYXRlc3RcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVMYXRlc3QoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0XzEuY29tYmluZUxhdGVzdC5hcHBseSh2b2lkIDAsIG9ic2VydmFibGVzKSh0aGlzKTtcbn1cbmV4cG9ydHMuY29tYmluZUxhdGVzdCA9IGNvbWJpbmVMYXRlc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGNvbmNhdF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2NvbmNhdCcpO1xudmFyIGNvbmNhdF8yID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9jb25jYXQnKTtcbmV4cG9ydHMuY29uY2F0U3RhdGljID0gY29uY2F0XzIuY29uY2F0O1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogQ3JlYXRlcyBhbiBvdXRwdXQgT2JzZXJ2YWJsZSB3aGljaCBzZXF1ZW50aWFsbHkgZW1pdHMgYWxsIHZhbHVlcyBmcm9tIGV2ZXJ5XG4gKiBnaXZlbiBpbnB1dCBPYnNlcnZhYmxlIGFmdGVyIHRoZSBjdXJyZW50IE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbmNhdGVuYXRlcyBtdWx0aXBsZSBPYnNlcnZhYmxlcyB0b2dldGhlciBieVxuICogc2VxdWVudGlhbGx5IGVtaXR0aW5nIHRoZWlyIHZhbHVlcywgb25lIE9ic2VydmFibGUgYWZ0ZXIgdGhlIG90aGVyLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2NvbmNhdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBKb2lucyB0aGlzIE9ic2VydmFibGUgd2l0aCBtdWx0aXBsZSBvdGhlciBPYnNlcnZhYmxlcyBieSBzdWJzY3JpYmluZyB0byB0aGVtXG4gKiBvbmUgYXQgYSB0aW1lLCBzdGFydGluZyB3aXRoIHRoZSBzb3VyY2UsIGFuZCBtZXJnaW5nIHRoZWlyIHJlc3VsdHMgaW50byB0aGVcbiAqIG91dHB1dCBPYnNlcnZhYmxlLiBXaWxsIHdhaXQgZm9yIGVhY2ggT2JzZXJ2YWJsZSB0byBjb21wbGV0ZSBiZWZvcmUgbW92aW5nXG4gKiBvbiB0byB0aGUgbmV4dC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db25jYXRlbmF0ZSBhIHRpbWVyIGNvdW50aW5nIGZyb20gMCB0byAzIHdpdGggYSBzeW5jaHJvbm91cyBzZXF1ZW5jZSBmcm9tIDEgdG8gMTA8L2NhcHRpb24+XG4gKiB2YXIgdGltZXIgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoNCk7XG4gKiB2YXIgc2VxdWVuY2UgPSBSeC5PYnNlcnZhYmxlLnJhbmdlKDEsIDEwKTtcbiAqIHZhciByZXN1bHQgPSB0aW1lci5jb25jYXQoc2VxdWVuY2UpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyByZXN1bHRzIGluOlxuICogLy8gMTAwMG1zLT4gMCAtMTAwMG1zLT4gMSAtMTAwMG1zLT4gMiAtMTAwMG1zLT4gMyAtaW1tZWRpYXRlLT4gMSAuLi4gMTBcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db25jYXRlbmF0ZSAzIE9ic2VydmFibGVzPC9jYXB0aW9uPlxuICogdmFyIHRpbWVyMSA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSgxMCk7XG4gKiB2YXIgdGltZXIyID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgyMDAwKS50YWtlKDYpO1xuICogdmFyIHRpbWVyMyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoNTAwKS50YWtlKDEwKTtcbiAqIHZhciByZXN1bHQgPSB0aW1lcjEuY29uY2F0KHRpbWVyMiwgdGltZXIzKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOlxuICogLy8gKFByaW50cyB0byBjb25zb2xlIHNlcXVlbnRpYWxseSlcbiAqIC8vIC0xMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAuLi4gOVxuICogLy8gLTIwMDBtcy0+IDAgLTIwMDBtcy0+IDEgLTIwMDBtcy0+IC4uLiA1XG4gKiAvLyAtNTAwbXMtPiAwIC01MDBtcy0+IDEgLTUwMG1zLT4gLi4uIDlcbiAqXG4gKiBAc2VlIHtAbGluayBjb25jYXRBbGx9XG4gKiBAc2VlIHtAbGluayBjb25jYXRNYXB9XG4gKiBAc2VlIHtAbGluayBjb25jYXRNYXBUb31cbiAqXG4gKiBAcGFyYW0ge09ic2VydmFibGVJbnB1dH0gb3RoZXIgQW4gaW5wdXQgT2JzZXJ2YWJsZSB0byBjb25jYXRlbmF0ZSBhZnRlciB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBNb3JlIHRoYW4gb25lIGlucHV0IE9ic2VydmFibGVzIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudC5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyPW51bGxdIEFuIG9wdGlvbmFsIElTY2hlZHVsZXIgdG8gc2NoZWR1bGUgZWFjaFxuICogT2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gb24uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbGwgdmFsdWVzIG9mIGVhY2ggcGFzc2VkIE9ic2VydmFibGUgbWVyZ2VkIGludG8gYVxuICogc2luZ2xlIE9ic2VydmFibGUsIGluIG9yZGVyLCBpbiBzZXJpYWwgZmFzaGlvbi5cbiAqIEBtZXRob2QgY29uY2F0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRfMS5jb25jYXQuYXBwbHkodm9pZCAwLCBvYnNlcnZhYmxlcykodGhpcyk7XG59XG5leHBvcnRzLmNvbmNhdCA9IGNvbmNhdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBjb25jYXRBbGxfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9jb25jYXRBbGwnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIENvbnZlcnRzIGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUgaW50byBhIGZpcnN0LW9yZGVyIE9ic2VydmFibGUgYnlcbiAqIGNvbmNhdGVuYXRpbmcgdGhlIGlubmVyIE9ic2VydmFibGVzIGluIG9yZGVyLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GbGF0dGVucyBhbiBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzIGJ5IHB1dHRpbmcgb25lXG4gKiBpbm5lciBPYnNlcnZhYmxlIGFmdGVyIHRoZSBvdGhlci48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9jb25jYXRBbGwucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogSm9pbnMgZXZlcnkgT2JzZXJ2YWJsZSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgKGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUpLCBpblxuICogYSBzZXJpYWwgZmFzaGlvbi4gSXQgc3Vic2NyaWJlcyB0byBlYWNoIGlubmVyIE9ic2VydmFibGUgb25seSBhZnRlciB0aGVcbiAqIHByZXZpb3VzIGlubmVyIE9ic2VydmFibGUgaGFzIGNvbXBsZXRlZCwgYW5kIG1lcmdlcyBhbGwgb2YgdGhlaXIgdmFsdWVzIGludG9cbiAqIHRoZSByZXR1cm5lZCBvYnNlcnZhYmxlLlxuICpcbiAqIF9fV2FybmluZzpfXyBJZiB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHMgT2JzZXJ2YWJsZXMgcXVpY2tseSBhbmRcbiAqIGVuZGxlc3NseSwgYW5kIHRoZSBpbm5lciBPYnNlcnZhYmxlcyBpdCBlbWl0cyBnZW5lcmFsbHkgY29tcGxldGUgc2xvd2VyIHRoYW5cbiAqIHRoZSBzb3VyY2UgZW1pdHMsIHlvdSBjYW4gcnVuIGludG8gbWVtb3J5IGlzc3VlcyBhcyB0aGUgaW5jb21pbmcgT2JzZXJ2YWJsZXNcbiAqIGNvbGxlY3QgaW4gYW4gdW5ib3VuZGVkIGJ1ZmZlci5cbiAqXG4gKiBOb3RlOiBgY29uY2F0QWxsYCBpcyBlcXVpdmFsZW50IHRvIGBtZXJnZUFsbGAgd2l0aCBjb25jdXJyZW5jeSBwYXJhbWV0ZXIgc2V0XG4gKiB0byBgMWAuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Rm9yIGVhY2ggY2xpY2sgZXZlbnQsIHRpY2sgZXZlcnkgc2Vjb25kIGZyb20gMCB0byAzLCB3aXRoIG5vIGNvbmN1cnJlbmN5PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBoaWdoZXJPcmRlciA9IGNsaWNrcy5tYXAoZXYgPT4gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKS50YWtlKDQpKTtcbiAqIHZhciBmaXJzdE9yZGVyID0gaGlnaGVyT3JkZXIuY29uY2F0QWxsKCk7XG4gKiBmaXJzdE9yZGVyLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAocmVzdWx0cyBhcmUgbm90IGNvbmN1cnJlbnQpXG4gKiAvLyBGb3IgZXZlcnkgY2xpY2sgb24gdGhlIFwiZG9jdW1lbnRcIiBpdCB3aWxsIGVtaXQgdmFsdWVzIDAgdG8gMyBzcGFjZWRcbiAqIC8vIG9uIGEgMTAwMG1zIGludGVydmFsXG4gKiAvLyBvbmUgY2xpY2sgPSAxMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAyIC0xMDAwbXMtPiAzXG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUFsbH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcFRvfVxuICogQHNlZSB7QGxpbmsgZXhoYXVzdH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlQWxsfVxuICogQHNlZSB7QGxpbmsgc3dpdGNofVxuICogQHNlZSB7QGxpbmsgemlwQWxsfVxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgZW1pdHRpbmcgdmFsdWVzIGZyb20gYWxsIHRoZSBpbm5lclxuICogT2JzZXJ2YWJsZXMgY29uY2F0ZW5hdGVkLlxuICogQG1ldGhvZCBjb25jYXRBbGxcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdEFsbCgpIHtcbiAgICByZXR1cm4gY29uY2F0QWxsXzEuY29uY2F0QWxsKCkodGhpcyk7XG59XG5leHBvcnRzLmNvbmNhdEFsbCA9IGNvbmNhdEFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdEFsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBjb25jYXRNYXBfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9jb25jYXRNYXAnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFByb2plY3RzIGVhY2ggc291cmNlIHZhbHVlIHRvIGFuIE9ic2VydmFibGUgd2hpY2ggaXMgbWVyZ2VkIGluIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUsIGluIGEgc2VyaWFsaXplZCBmYXNoaW9uIHdhaXRpbmcgZm9yIGVhY2ggb25lIHRvIGNvbXBsZXRlIGJlZm9yZVxuICogbWVyZ2luZyB0aGUgbmV4dC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TWFwcyBlYWNoIHZhbHVlIHRvIGFuIE9ic2VydmFibGUsIHRoZW4gZmxhdHRlbnMgYWxsIG9mXG4gKiB0aGVzZSBpbm5lciBPYnNlcnZhYmxlcyB1c2luZyB7QGxpbmsgY29uY2F0QWxsfS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9jb25jYXRNYXAucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYmFzZWQgb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0aGF0IHlvdVxuICogc3VwcGx5IHRvIGVhY2ggaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgd2hlcmUgdGhhdCBmdW5jdGlvblxuICogcmV0dXJucyBhbiAoc28tY2FsbGVkIFwiaW5uZXJcIikgT2JzZXJ2YWJsZS4gRWFjaCBuZXcgaW5uZXIgT2JzZXJ2YWJsZSBpc1xuICogY29uY2F0ZW5hdGVkIHdpdGggdGhlIHByZXZpb3VzIGlubmVyIE9ic2VydmFibGUuXG4gKlxuICogX19XYXJuaW5nOl9fIGlmIHNvdXJjZSB2YWx1ZXMgYXJyaXZlIGVuZGxlc3NseSBhbmQgZmFzdGVyIHRoYW4gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgaW5uZXIgT2JzZXJ2YWJsZXMgY2FuIGNvbXBsZXRlLCBpdCB3aWxsIHJlc3VsdCBpbiBtZW1vcnkgaXNzdWVzXG4gKiBhcyBpbm5lciBPYnNlcnZhYmxlcyBhbWFzcyBpbiBhbiB1bmJvdW5kZWQgYnVmZmVyIHdhaXRpbmcgZm9yIHRoZWlyIHR1cm4gdG9cbiAqIGJlIHN1YnNjcmliZWQgdG8uXG4gKlxuICogTm90ZTogYGNvbmNhdE1hcGAgaXMgZXF1aXZhbGVudCB0byBgbWVyZ2VNYXBgIHdpdGggY29uY3VycmVuY3kgcGFyYW1ldGVyIHNldFxuICogdG8gYDFgLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkZvciBlYWNoIGNsaWNrIGV2ZW50LCB0aWNrIGV2ZXJ5IHNlY29uZCBmcm9tIDAgdG8gMywgd2l0aCBubyBjb25jdXJyZW5jeTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmNvbmNhdE1hcChldiA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoNCkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAocmVzdWx0cyBhcmUgbm90IGNvbmN1cnJlbnQpXG4gKiAvLyBGb3IgZXZlcnkgY2xpY2sgb24gdGhlIFwiZG9jdW1lbnRcIiBpdCB3aWxsIGVtaXQgdmFsdWVzIDAgdG8gMyBzcGFjZWRcbiAqIC8vIG9uIGEgMTAwMG1zIGludGVydmFsXG4gKiAvLyBvbmUgY2xpY2sgPSAxMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAyIC0xMDAwbXMtPiAzXG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0fVxuICogQHNlZSB7QGxpbmsgY29uY2F0QWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwVG99XG4gKiBAc2VlIHtAbGluayBleGhhdXN0TWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXB9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hNYXB9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgP2luZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlSW5wdXR9IHByb2plY3QgQSBmdW5jdGlvblxuICogdGhhdCwgd2hlbiBhcHBsaWVkIHRvIGFuIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIHJldHVybnMgYW5cbiAqIE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKG91dGVyVmFsdWU6IFQsIGlubmVyVmFsdWU6IEksIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKTogYW55fSBbcmVzdWx0U2VsZWN0b3JdXG4gKiBBIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHZhbHVlIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiYXNlZCBvbiB0aGUgdmFsdWVzXG4gKiBhbmQgdGhlIGluZGljZXMgb2YgdGhlIHNvdXJjZSAob3V0ZXIpIGVtaXNzaW9uIGFuZCB0aGUgaW5uZXIgT2JzZXJ2YWJsZVxuICogZW1pc3Npb24uIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlOlxuICogLSBgb3V0ZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lclZhbHVlYDogdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogLSBgb3V0ZXJJbmRleGA6IHRoZSBcImluZGV4XCIgb2YgdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBzb3VyY2VcbiAqIC0gYGlubmVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlXG4gKiBwcm9qZWN0aW9uIGZ1bmN0aW9uIChhbmQgdGhlIG9wdGlvbmFsIGByZXN1bHRTZWxlY3RvcmApIHRvIGVhY2ggaXRlbSBlbWl0dGVkXG4gKiBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIHRha2luZyB2YWx1ZXMgZnJvbSBlYWNoIHByb2plY3RlZCBpbm5lclxuICogT2JzZXJ2YWJsZSBzZXF1ZW50aWFsbHkuXG4gKiBAbWV0aG9kIGNvbmNhdE1hcFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gY29uY2F0TWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbmNhdE1hcF8xLmNvbmNhdE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvcikodGhpcyk7XG59XG5leHBvcnRzLmNvbmNhdE1hcCA9IGNvbmNhdE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdE1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBjb25jYXRNYXBUb18xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2NvbmNhdE1hcFRvJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgc2FtZSBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBtdWx0aXBsZVxuICogdGltZXMgaW4gYSBzZXJpYWxpemVkIGZhc2hpb24gb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGNvbmNhdE1hcH0sIGJ1dCBtYXBzIGVhY2ggdmFsdWVcbiAqIGFsd2F5cyB0byB0aGUgc2FtZSBpbm5lciBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2NvbmNhdE1hcFRvLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIE1hcHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gdGhlIGdpdmVuIE9ic2VydmFibGUgYGlubmVyT2JzZXJ2YWJsZWAgcmVnYXJkbGVzc1xuICogb2YgdGhlIHNvdXJjZSB2YWx1ZSwgYW5kIHRoZW4gZmxhdHRlbnMgdGhvc2UgcmVzdWx0aW5nIE9ic2VydmFibGVzIGludG8gb25lXG4gKiBzaW5nbGUgT2JzZXJ2YWJsZSwgd2hpY2ggaXMgdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBFYWNoIG5ldyBgaW5uZXJPYnNlcnZhYmxlYFxuICogaW5zdGFuY2UgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgaXMgY29uY2F0ZW5hdGVkIHdpdGggdGhlIHByZXZpb3VzXG4gKiBgaW5uZXJPYnNlcnZhYmxlYCBpbnN0YW5jZS5cbiAqXG4gKiBfX1dhcm5pbmc6X18gaWYgc291cmNlIHZhbHVlcyBhcnJpdmUgZW5kbGVzc2x5IGFuZCBmYXN0ZXIgdGhhbiB0aGVpclxuICogY29ycmVzcG9uZGluZyBpbm5lciBPYnNlcnZhYmxlcyBjYW4gY29tcGxldGUsIGl0IHdpbGwgcmVzdWx0IGluIG1lbW9yeSBpc3N1ZXNcbiAqIGFzIGlubmVyIE9ic2VydmFibGVzIGFtYXNzIGluIGFuIHVuYm91bmRlZCBidWZmZXIgd2FpdGluZyBmb3IgdGhlaXIgdHVybiB0b1xuICogYmUgc3Vic2NyaWJlZCB0by5cbiAqXG4gKiBOb3RlOiBgY29uY2F0TWFwVG9gIGlzIGVxdWl2YWxlbnQgdG8gYG1lcmdlTWFwVG9gIHdpdGggY29uY3VycmVuY3kgcGFyYW1ldGVyXG4gKiBzZXQgdG8gYDFgLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkZvciBlYWNoIGNsaWNrIGV2ZW50LCB0aWNrIGV2ZXJ5IHNlY29uZCBmcm9tIDAgdG8gMywgd2l0aCBubyBjb25jdXJyZW5jeTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmNvbmNhdE1hcFRvKFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSg0KSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzpcbiAqIC8vIChyZXN1bHRzIGFyZSBub3QgY29uY3VycmVudClcbiAqIC8vIEZvciBldmVyeSBjbGljayBvbiB0aGUgXCJkb2N1bWVudFwiIGl0IHdpbGwgZW1pdCB2YWx1ZXMgMCB0byAzIHNwYWNlZFxuICogLy8gb24gYSAxMDAwbXMgaW50ZXJ2YWxcbiAqIC8vIG9uZSBjbGljayA9IDEwMDBtcy0+IDAgLTEwMDBtcy0+IDEgLTEwMDBtcy0+IDIgLTEwMDBtcy0+IDNcbiAqXG4gKiBAc2VlIHtAbGluayBjb25jYXR9XG4gKiBAc2VlIHtAbGluayBjb25jYXRBbGx9XG4gKiBAc2VlIHtAbGluayBjb25jYXRNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcFRvfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwVG99XG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlSW5wdXR9IGlubmVyT2JzZXJ2YWJsZSBBbiBPYnNlcnZhYmxlIHRvIHJlcGxhY2UgZWFjaCB2YWx1ZSBmcm9tXG4gKiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKG91dGVyVmFsdWU6IFQsIGlubmVyVmFsdWU6IEksIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKTogYW55fSBbcmVzdWx0U2VsZWN0b3JdXG4gKiBBIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHZhbHVlIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiYXNlZCBvbiB0aGUgdmFsdWVzXG4gKiBhbmQgdGhlIGluZGljZXMgb2YgdGhlIHNvdXJjZSAob3V0ZXIpIGVtaXNzaW9uIGFuZCB0aGUgaW5uZXIgT2JzZXJ2YWJsZVxuICogZW1pc3Npb24uIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlOlxuICogLSBgb3V0ZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lclZhbHVlYDogdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogLSBgb3V0ZXJJbmRleGA6IHRoZSBcImluZGV4XCIgb2YgdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBzb3VyY2VcbiAqIC0gYGlubmVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gb2JzZXJ2YWJsZSBvZiB2YWx1ZXMgbWVyZ2VkIHRvZ2V0aGVyIGJ5IGpvaW5pbmcgdGhlXG4gKiBwYXNzZWQgb2JzZXJ2YWJsZSB3aXRoIGl0c2VsZiwgb25lIGFmdGVyIHRoZSBvdGhlciwgZm9yIGVhY2ggdmFsdWUgZW1pdHRlZFxuICogZnJvbSB0aGUgc291cmNlLlxuICogQG1ldGhvZCBjb25jYXRNYXBUb1xuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gY29uY2F0TWFwVG8oaW5uZXJPYnNlcnZhYmxlLCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBjb25jYXRNYXBUb18xLmNvbmNhdE1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpKHRoaXMpO1xufVxuZXhwb3J0cy5jb25jYXRNYXBUbyA9IGNvbmNhdE1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0TWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY291bnRfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9jb3VudCcpO1xuLyoqXG4gKiBDb3VudHMgdGhlIG51bWJlciBvZiBlbWlzc2lvbnMgb24gdGhlIHNvdXJjZSBhbmQgZW1pdHMgdGhhdCBudW1iZXIgd2hlbiB0aGVcbiAqIHNvdXJjZSBjb21wbGV0ZXMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlRlbGxzIGhvdyBtYW55IHZhbHVlcyB3ZXJlIGVtaXR0ZWQsIHdoZW4gdGhlIHNvdXJjZVxuICogY29tcGxldGVzLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2NvdW50LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBjb3VudGAgdHJhbnNmb3JtcyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdmFsdWVzIGludG8gYW4gT2JzZXJ2YWJsZSB0aGF0XG4gKiBlbWl0cyBhIHNpbmdsZSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiB2YWx1ZXMgZW1pdHRlZCBieSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlLiBJZiB0aGUgc291cmNlIE9ic2VydmFibGUgdGVybWluYXRlcyB3aXRoIGFuIGVycm9yLCBgY291bnRgXG4gKiB3aWxsIHBhc3MgdGhpcyBlcnJvciBub3RpZmljYXRpb24gYWxvbmcgd2l0aG91dCBlbWl0dGluZyBhIHZhbHVlIGZpcnN0LiBJZlxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGRvZXMgbm90IHRlcm1pbmF0ZSBhdCBhbGwsIGBjb3VudGAgd2lsbCBuZWl0aGVyIGVtaXRcbiAqIGEgdmFsdWUgbm9yIHRlcm1pbmF0ZS4gVGhpcyBvcGVyYXRvciB0YWtlcyBhbiBvcHRpb25hbCBgcHJlZGljYXRlYCBmdW5jdGlvblxuICogYXMgYXJndW1lbnQsIGluIHdoaWNoIGNhc2UgdGhlIG91dHB1dCBlbWlzc2lvbiB3aWxsIHJlcHJlc2VudCB0aGUgbnVtYmVyIG9mXG4gKiBzb3VyY2UgdmFsdWVzIHRoYXQgbWF0Y2hlZCBgdHJ1ZWAgd2l0aCB0aGUgYHByZWRpY2F0ZWAuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q291bnRzIGhvdyBtYW55IHNlY29uZHMgaGF2ZSBwYXNzZWQgYmVmb3JlIHRoZSBmaXJzdCBjbGljayBoYXBwZW5lZDwvY2FwdGlvbj5cbiAqIHZhciBzZWNvbmRzID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKTtcbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgc2Vjb25kc0JlZm9yZUNsaWNrID0gc2Vjb25kcy50YWtlVW50aWwoY2xpY2tzKTtcbiAqIHZhciByZXN1bHQgPSBzZWNvbmRzQmVmb3JlQ2xpY2suY291bnQoKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q291bnRzIGhvdyBtYW55IG9kZCBudW1iZXJzIGFyZSB0aGVyZSBiZXR3ZWVuIDEgYW5kIDc8L2NhcHRpb24+XG4gKiB2YXIgbnVtYmVycyA9IFJ4Lk9ic2VydmFibGUucmFuZ2UoMSwgNyk7XG4gKiB2YXIgcmVzdWx0ID0gbnVtYmVycy5jb3VudChpID0+IGkgJSAyID09PSAxKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbjpcbiAqIC8vIDRcbiAqXG4gKiBAc2VlIHtAbGluayBtYXh9XG4gKiBAc2VlIHtAbGluayBtaW59XG4gKiBAc2VlIHtAbGluayByZWR1Y2V9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaTogbnVtYmVyLCBzb3VyY2U6IE9ic2VydmFibGU8VD4pOiBib29sZWFufSBbcHJlZGljYXRlXSBBXG4gKiBib29sZWFuIGZ1bmN0aW9uIHRvIHNlbGVjdCB3aGF0IHZhbHVlcyBhcmUgdG8gYmUgY291bnRlZC4gSXQgaXMgcHJvdmlkZWQgd2l0aFxuICogYXJndW1lbnRzIG9mOlxuICogLSBgdmFsdWVgOiB0aGUgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiAtIGBpbmRleGA6IHRoZSAoemVyby1iYXNlZCkgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIC0gYHNvdXJjZWA6IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBpbnN0YW5jZSBpdHNlbGYuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIG9uZSBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSBjb3VudCBhc1xuICogZGVzY3JpYmVkIGFib3ZlLlxuICogQG1ldGhvZCBjb3VudFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gY291bnQocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGNvdW50XzEuY291bnQocHJlZGljYXRlKSh0aGlzKTtcbn1cbmV4cG9ydHMuY291bnQgPSBjb3VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvdW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGRlYm91bmNlXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZGVib3VuY2UnKTtcbi8qKlxuICogRW1pdHMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBvbmx5IGFmdGVyIGEgcGFydGljdWxhciB0aW1lIHNwYW5cbiAqIGRldGVybWluZWQgYnkgYW5vdGhlciBPYnNlcnZhYmxlIGhhcyBwYXNzZWQgd2l0aG91dCBhbm90aGVyIHNvdXJjZSBlbWlzc2lvbi5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBkZWJvdW5jZVRpbWV9LCBidXQgdGhlIHRpbWUgc3BhbiBvZlxuICogZW1pc3Npb24gc2lsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvZGVib3VuY2UucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGRlYm91bmNlYCBkZWxheXMgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBidXQgZHJvcHMgcHJldmlvdXNcbiAqIHBlbmRpbmcgZGVsYXllZCBlbWlzc2lvbnMgaWYgYSBuZXcgdmFsdWUgYXJyaXZlcyBvbiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBUaGlzIG9wZXJhdG9yIGtlZXBzIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIGFuZCBzcGF3bnMgYSBkdXJhdGlvbiBPYnNlcnZhYmxlIGJ5IGNhbGxpbmcgdGhlXG4gKiBgZHVyYXRpb25TZWxlY3RvcmAgZnVuY3Rpb24uIFRoZSB2YWx1ZSBpcyBlbWl0dGVkIG9ubHkgd2hlbiB0aGUgZHVyYXRpb25cbiAqIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZSBvciBjb21wbGV0ZXMsIGFuZCBpZiBubyBvdGhlciB2YWx1ZSB3YXMgZW1pdHRlZCBvblxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHNpbmNlIHRoZSBkdXJhdGlvbiBPYnNlcnZhYmxlIHdhcyBzcGF3bmVkLiBJZiBhIG5ld1xuICogdmFsdWUgYXBwZWFycyBiZWZvcmUgdGhlIGR1cmF0aW9uIE9ic2VydmFibGUgZW1pdHMsIHRoZSBwcmV2aW91cyB2YWx1ZSB3aWxsXG4gKiBiZSBkcm9wcGVkIGFuZCB3aWxsIG5vdCBiZSBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBMaWtlIHtAbGluayBkZWJvdW5jZVRpbWV9LCB0aGlzIGlzIGEgcmF0ZS1saW1pdGluZyBvcGVyYXRvciwgYW5kIGFsc28gYVxuICogZGVsYXktbGlrZSBvcGVyYXRvciBzaW5jZSBvdXRwdXQgZW1pc3Npb25zIGRvIG5vdCBuZWNlc3NhcmlseSBvY2N1ciBhdCB0aGVcbiAqIHNhbWUgdGltZSBhcyB0aGV5IGRpZCBvbiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCB0aGUgbW9zdCByZWNlbnQgY2xpY2sgYWZ0ZXIgYSBidXJzdCBvZiBjbGlja3M8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5kZWJvdW5jZSgoKSA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXR9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWxheVdoZW59XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZX1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBUKTogU3Vic2NyaWJhYmxlT3JQcm9taXNlfSBkdXJhdGlvblNlbGVjdG9yIEEgZnVuY3Rpb25cbiAqIHRoYXQgcmVjZWl2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgZm9yIGNvbXB1dGluZyB0aGUgdGltZW91dFxuICogZHVyYXRpb24gZm9yIGVhY2ggc291cmNlIHZhbHVlLCByZXR1cm5lZCBhcyBhbiBPYnNlcnZhYmxlIG9yIGEgUHJvbWlzZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBkZWxheXMgdGhlIGVtaXNzaW9ucyBvZiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGJ5IHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gT2JzZXJ2YWJsZSByZXR1cm5lZCBieVxuICogYGR1cmF0aW9uU2VsZWN0b3JgLCBhbmQgbWF5IGRyb3Agc29tZSB2YWx1ZXMgaWYgdGhleSBvY2N1ciB0b28gZnJlcXVlbnRseS5cbiAqIEBtZXRob2QgZGVib3VuY2VcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZGVib3VuY2VfMS5kZWJvdW5jZShkdXJhdGlvblNlbGVjdG9yKSh0aGlzKTtcbn1cbmV4cG9ydHMuZGVib3VuY2UgPSBkZWJvdW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYm91bmNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKCcuLi9zY2hlZHVsZXIvYXN5bmMnKTtcbnZhciBkZWJvdW5jZVRpbWVfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9kZWJvdW5jZVRpbWUnKTtcbi8qKlxuICogRW1pdHMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBvbmx5IGFmdGVyIGEgcGFydGljdWxhciB0aW1lIHNwYW5cbiAqIGhhcyBwYXNzZWQgd2l0aG91dCBhbm90aGVyIHNvdXJjZSBlbWlzc2lvbi5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBkZWxheX0sIGJ1dCBwYXNzZXMgb25seSB0aGUgbW9zdFxuICogcmVjZW50IHZhbHVlIGZyb20gZWFjaCBidXJzdCBvZiBlbWlzc2lvbnMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvZGVib3VuY2VUaW1lLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBkZWJvdW5jZVRpbWVgIGRlbGF5cyB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIGJ1dCBkcm9wc1xuICogcHJldmlvdXMgcGVuZGluZyBkZWxheWVkIGVtaXNzaW9ucyBpZiBhIG5ldyB2YWx1ZSBhcnJpdmVzIG9uIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoaXMgb3BlcmF0b3Iga2VlcHMgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50IHZhbHVlIGZyb20gdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZSwgYW5kIGVtaXRzIHRoYXQgb25seSB3aGVuIGBkdWVUaW1lYCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkXG4gKiB3aXRob3V0IGFueSBvdGhlciB2YWx1ZSBhcHBlYXJpbmcgb24gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJZiBhIG5ldyB2YWx1ZVxuICogYXBwZWFycyBiZWZvcmUgYGR1ZVRpbWVgIHNpbGVuY2Ugb2NjdXJzLCB0aGUgcHJldmlvdXMgdmFsdWUgd2lsbCBiZSBkcm9wcGVkXG4gKiBhbmQgd2lsbCBub3QgYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKlxuICogVGhpcyBpcyBhIHJhdGUtbGltaXRpbmcgb3BlcmF0b3IsIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFuIG9uZVxuICogdmFsdWUgdG8gYmUgZW1pdHRlZCBpbiBhbnkgdGltZSB3aW5kb3cgb2YgZHVyYXRpb24gYGR1ZVRpbWVgLCBidXQgaXQgaXMgYWxzb1xuICogYSBkZWxheS1saWtlIG9wZXJhdG9yIHNpbmNlIG91dHB1dCBlbWlzc2lvbnMgZG8gbm90IG9jY3VyIGF0IHRoZSBzYW1lIHRpbWUgYXNcbiAqIHRoZXkgZGlkIG9uIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS4gT3B0aW9uYWxseSB0YWtlcyBhIHtAbGluayBJU2NoZWR1bGVyfSBmb3JcbiAqIG1hbmFnaW5nIHRpbWVycy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IHRoZSBtb3N0IHJlY2VudCBjbGljayBhZnRlciBhIGJ1cnN0IG9mIGNsaWNrczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmRlYm91bmNlVGltZSgxMDAwKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXRUaW1lfVxuICogQHNlZSB7QGxpbmsgZGVib3VuY2V9XG4gKiBAc2VlIHtAbGluayBkZWxheX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZVRpbWV9XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZVRpbWV9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGR1ZVRpbWUgVGhlIHRpbWVvdXQgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIChvciB0aGUgdGltZVxuICogdW5pdCBkZXRlcm1pbmVkIGludGVybmFsbHkgYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgKSBmb3IgdGhlIHdpbmRvdyBvZlxuICogdGltZSByZXF1aXJlZCB0byB3YWl0IGZvciBlbWlzc2lvbiBzaWxlbmNlIGJlZm9yZSBlbWl0dGluZyB0aGUgbW9zdCByZWNlbnRcbiAqIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyPWFzeW5jXSBUaGUge0BsaW5rIElTY2hlZHVsZXJ9IHRvIHVzZSBmb3JcbiAqIG1hbmFnaW5nIHRoZSB0aW1lcnMgdGhhdCBoYW5kbGUgdGhlIHRpbWVvdXQgZm9yIGVhY2ggdmFsdWUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZGVsYXlzIHRoZSBlbWlzc2lvbnMgb2YgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBieSB0aGUgc3BlY2lmaWVkIGBkdWVUaW1lYCwgYW5kIG1heSBkcm9wIHNvbWUgdmFsdWVzIGlmIHRoZXkgb2NjdXJcbiAqIHRvbyBmcmVxdWVudGx5LlxuICogQG1ldGhvZCBkZWJvdW5jZVRpbWVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlVGltZShkdWVUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHJldHVybiBkZWJvdW5jZVRpbWVfMS5kZWJvdW5jZVRpbWUoZHVlVGltZSwgc2NoZWR1bGVyKSh0aGlzKTtcbn1cbmV4cG9ydHMuZGVib3VuY2VUaW1lID0gZGVib3VuY2VUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVib3VuY2VUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGRlZmF1bHRJZkVtcHR5XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZGVmYXVsdElmRW1wdHknKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIEVtaXRzIGEgZ2l2ZW4gdmFsdWUgaWYgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGNvbXBsZXRlcyB3aXRob3V0IGVtaXR0aW5nIGFueVxuICogYG5leHRgIHZhbHVlLCBvdGhlcndpc2UgbWlycm9ycyB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPklmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0dXJucyBvdXQgdG8gYmUgZW1wdHksIHRoZW5cbiAqIHRoaXMgb3BlcmF0b3Igd2lsbCBlbWl0IGEgZGVmYXVsdCB2YWx1ZS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9kZWZhdWx0SWZFbXB0eS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgZGVmYXVsdElmRW1wdHlgIGVtaXRzIHRoZSB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgb3IgYVxuICogc3BlY2lmaWVkIGRlZmF1bHQgdmFsdWUgaWYgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGlzIGVtcHR5IChjb21wbGV0ZXMgd2l0aG91dFxuICogaGF2aW5nIGVtaXR0ZWQgYW55IGBuZXh0YCB2YWx1ZSkuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+SWYgbm8gY2xpY2tzIGhhcHBlbiBpbiA1IHNlY29uZHMsIHRoZW4gZW1pdCBcIm5vIGNsaWNrc1wiPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBjbGlja3NCZWZvcmVGaXZlID0gY2xpY2tzLnRha2VVbnRpbChSeC5PYnNlcnZhYmxlLmludGVydmFsKDUwMDApKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3NCZWZvcmVGaXZlLmRlZmF1bHRJZkVtcHR5KCdubyBjbGlja3MnKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgZW1wdHl9XG4gKiBAc2VlIHtAbGluayBsYXN0fVxuICpcbiAqIEBwYXJhbSB7YW55fSBbZGVmYXVsdFZhbHVlPW51bGxdIFRoZSBkZWZhdWx0IHZhbHVlIHVzZWQgaWYgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBpcyBlbXB0eS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBlaXRoZXIgdGhlIHNwZWNpZmllZFxuICogYGRlZmF1bHRWYWx1ZWAgaWYgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGVtaXRzIG5vIGl0ZW1zLCBvciB0aGUgdmFsdWVzIGVtaXR0ZWRcbiAqIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2QgZGVmYXVsdElmRW1wdHlcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHZvaWQgMCkgeyBkZWZhdWx0VmFsdWUgPSBudWxsOyB9XG4gICAgcmV0dXJuIGRlZmF1bHRJZkVtcHR5XzEuZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlKSh0aGlzKTtcbn1cbmV4cG9ydHMuZGVmYXVsdElmRW1wdHkgPSBkZWZhdWx0SWZFbXB0eTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRJZkVtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKCcuLi9zY2hlZHVsZXIvYXN5bmMnKTtcbnZhciBkZWxheV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2RlbGF5Jyk7XG4vKipcbiAqIERlbGF5cyB0aGUgZW1pc3Npb24gb2YgaXRlbXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgYnkgYSBnaXZlbiB0aW1lb3V0IG9yXG4gKiB1bnRpbCBhIGdpdmVuIERhdGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlRpbWUgc2hpZnRzIGVhY2ggaXRlbSBieSBzb21lIHNwZWNpZmllZCBhbW91bnQgb2ZcbiAqIG1pbGxpc2Vjb25kcy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9kZWxheS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBJZiB0aGUgZGVsYXkgYXJndW1lbnQgaXMgYSBOdW1iZXIsIHRoaXMgb3BlcmF0b3IgdGltZSBzaGlmdHMgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBieSB0aGF0IGFtb3VudCBvZiB0aW1lIGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMuIFRoZSByZWxhdGl2ZVxuICogdGltZSBpbnRlcnZhbHMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQuXG4gKlxuICogSWYgdGhlIGRlbGF5IGFyZ3VtZW50IGlzIGEgRGF0ZSwgdGhpcyBvcGVyYXRvciB0aW1lIHNoaWZ0cyB0aGUgc3RhcnQgb2YgdGhlXG4gKiBPYnNlcnZhYmxlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgZ2l2ZW4gZGF0ZSBvY2N1cnMuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RGVsYXkgZWFjaCBjbGljayBieSBvbmUgc2Vjb25kPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBkZWxheWVkQ2xpY2tzID0gY2xpY2tzLmRlbGF5KDEwMDApOyAvLyBlYWNoIGNsaWNrIGVtaXR0ZWQgYWZ0ZXIgMSBzZWNvbmRcbiAqIGRlbGF5ZWRDbGlja3Muc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkRlbGF5IGFsbCBjbGlja3MgdW50aWwgYSBmdXR1cmUgZGF0ZSBoYXBwZW5zPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBkYXRlID0gbmV3IERhdGUoJ01hcmNoIDE1LCAyMDUwIDEyOjAwOjAwJyk7IC8vIGluIHRoZSBmdXR1cmVcbiAqIHZhciBkZWxheWVkQ2xpY2tzID0gY2xpY2tzLmRlbGF5KGRhdGUpOyAvLyBjbGljayBlbWl0dGVkIG9ubHkgYWZ0ZXIgdGhhdCBkYXRlXG4gKiBkZWxheWVkQ2xpY2tzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWxheVdoZW59XG4gKlxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGVsYXkgVGhlIGRlbGF5IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyAoYSBgbnVtYmVyYCkgb3JcbiAqIGEgYERhdGVgIHVudGlsIHdoaWNoIHRoZSBlbWlzc2lvbiBvZiB0aGUgc291cmNlIGl0ZW1zIGlzIGRlbGF5ZWQuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1hc3luY10gVGhlIElTY2hlZHVsZXIgdG8gdXNlIGZvclxuICogbWFuYWdpbmcgdGhlIHRpbWVycyB0aGF0IGhhbmRsZSB0aGUgdGltZS1zaGlmdCBmb3IgZWFjaCBpdGVtLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGRlbGF5cyB0aGUgZW1pc3Npb25zIG9mIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgYnkgdGhlIHNwZWNpZmllZCB0aW1lb3V0IG9yIERhdGUuXG4gKiBAbWV0aG9kIGRlbGF5XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBkZWxheShkZWxheSwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmM7IH1cbiAgICByZXR1cm4gZGVsYXlfMS5kZWxheShkZWxheSwgc2NoZWR1bGVyKSh0aGlzKTtcbn1cbmV4cG9ydHMuZGVsYXkgPSBkZWxheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGRlbGF5V2hlbl8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2RlbGF5V2hlbicpO1xuLyoqXG4gKiBEZWxheXMgdGhlIGVtaXNzaW9uIG9mIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IGEgZ2l2ZW4gdGltZSBzcGFuXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBlbWlzc2lvbnMgb2YgYW5vdGhlciBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGRlbGF5fSwgYnV0IHRoZSB0aW1lIHNwYW4gb2YgdGhlXG4gKiBkZWxheSBkdXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvZGVsYXlXaGVuLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBkZWxheVdoZW5gIHRpbWUgc2hpZnRzIGVhY2ggZW1pdHRlZCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBieSBhXG4gKiB0aW1lIHNwYW4gZGV0ZXJtaW5lZCBieSBhbm90aGVyIE9ic2VydmFibGUuIFdoZW4gdGhlIHNvdXJjZSBlbWl0cyBhIHZhbHVlLFxuICogdGhlIGBkZWxheUR1cmF0aW9uU2VsZWN0b3JgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBzb3VyY2UgdmFsdWUgYXNcbiAqIGFyZ3VtZW50LCBhbmQgc2hvdWxkIHJldHVybiBhbiBPYnNlcnZhYmxlLCBjYWxsZWQgdGhlIFwiZHVyYXRpb25cIiBPYnNlcnZhYmxlLlxuICogVGhlIHNvdXJjZSB2YWx1ZSBpcyBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBvbmx5IHdoZW4gdGhlIGR1cmF0aW9uXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUgb3IgY29tcGxldGVzLlxuICpcbiAqIE9wdGlvbmFsbHksIGBkZWxheVdoZW5gIHRha2VzIGEgc2Vjb25kIGFyZ3VtZW50LCBgc3Vic2NyaXB0aW9uRGVsYXlgLCB3aGljaFxuICogaXMgYW4gT2JzZXJ2YWJsZS4gV2hlbiBgc3Vic2NyaXB0aW9uRGVsYXlgIGVtaXRzIGl0cyBmaXJzdCB2YWx1ZSBvclxuICogY29tcGxldGVzLCB0aGUgc291cmNlIE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZCB0byBhbmQgc3RhcnRzIGJlaGF2aW5nIGxpa2VcbiAqIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLiBJZiBgc3Vic2NyaXB0aW9uRGVsYXlgIGlzIG5vdCBwcm92aWRlZCxcbiAqIGBkZWxheVdoZW5gIHdpbGwgc3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyBzb29uIGFzIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5EZWxheSBlYWNoIGNsaWNrIGJ5IGEgcmFuZG9tIGFtb3VudCBvZiB0aW1lLCBiZXR3ZWVuIDAgYW5kIDUgc2Vjb25kczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgZGVsYXllZENsaWNrcyA9IGNsaWNrcy5kZWxheVdoZW4oZXZlbnQgPT5cbiAqICAgUnguT2JzZXJ2YWJsZS5pbnRlcnZhbChNYXRoLnJhbmRvbSgpICogNTAwMClcbiAqICk7XG4gKiBkZWxheWVkQ2xpY2tzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQpOiBPYnNlcnZhYmxlfSBkZWxheUR1cmF0aW9uU2VsZWN0b3IgQSBmdW5jdGlvbiB0aGF0XG4gKiByZXR1cm5zIGFuIE9ic2VydmFibGUgZm9yIGVhY2ggdmFsdWUgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIHdoaWNoXG4gKiBpcyB0aGVuIHVzZWQgdG8gZGVsYXkgdGhlIGVtaXNzaW9uIG9mIHRoYXQgaXRlbSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGVcbiAqIHVudGlsIHRoZSBPYnNlcnZhYmxlIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiBlbWl0cyBhIHZhbHVlLlxuICogQHBhcmFtIHtPYnNlcnZhYmxlfSBzdWJzY3JpcHRpb25EZWxheSBBbiBPYnNlcnZhYmxlIHRoYXQgdHJpZ2dlcnMgdGhlXG4gKiBzdWJzY3JpcHRpb24gdG8gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIG9uY2UgaXQgZW1pdHMgYW55IHZhbHVlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGRlbGF5cyB0aGUgZW1pc3Npb25zIG9mIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgYnkgYW4gYW1vdW50IG9mIHRpbWUgc3BlY2lmaWVkIGJ5IHRoZSBPYnNlcnZhYmxlIHJldHVybmVkIGJ5XG4gKiBgZGVsYXlEdXJhdGlvblNlbGVjdG9yYC5cbiAqIEBtZXRob2QgZGVsYXlXaGVuXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBkZWxheVdoZW4oZGVsYXlEdXJhdGlvblNlbGVjdG9yLCBzdWJzY3JpcHRpb25EZWxheSkge1xuICAgIHJldHVybiBkZWxheVdoZW5fMS5kZWxheVdoZW4oZGVsYXlEdXJhdGlvblNlbGVjdG9yLCBzdWJzY3JpcHRpb25EZWxheSkodGhpcyk7XG59XG5leHBvcnRzLmRlbGF5V2hlbiA9IGRlbGF5V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBkZW1hdGVyaWFsaXplXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZScpO1xuLyoqXG4gKiBDb252ZXJ0cyBhbiBPYnNlcnZhYmxlIG9mIHtAbGluayBOb3RpZmljYXRpb259IG9iamVjdHMgaW50byB0aGUgZW1pc3Npb25zXG4gKiB0aGF0IHRoZXkgcmVwcmVzZW50LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5VbndyYXBzIHtAbGluayBOb3RpZmljYXRpb259IG9iamVjdHMgYXMgYWN0dWFsIGBuZXh0YCxcbiAqIGBlcnJvcmAgYW5kIGBjb21wbGV0ZWAgZW1pc3Npb25zLiBUaGUgb3Bwb3NpdGUgb2Yge0BsaW5rIG1hdGVyaWFsaXplfS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9kZW1hdGVyaWFsaXplLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBkZW1hdGVyaWFsaXplYCBpcyBhc3N1bWVkIHRvIG9wZXJhdGUgYW4gT2JzZXJ2YWJsZSB0aGF0IG9ubHkgZW1pdHNcbiAqIHtAbGluayBOb3RpZmljYXRpb259IG9iamVjdHMgYXMgYG5leHRgIGVtaXNzaW9ucywgYW5kIGRvZXMgbm90IGVtaXQgYW55XG4gKiBgZXJyb3JgLiBTdWNoIE9ic2VydmFibGUgaXMgdGhlIG91dHB1dCBvZiBhIGBtYXRlcmlhbGl6ZWAgb3BlcmF0aW9uLiBUaG9zZVxuICogbm90aWZpY2F0aW9ucyBhcmUgdGhlbiB1bndyYXBwZWQgdXNpbmcgdGhlIG1ldGFkYXRhIHRoZXkgY29udGFpbiwgYW5kIGVtaXR0ZWRcbiAqIGFzIGBuZXh0YCwgYGVycm9yYCwgYW5kIGBjb21wbGV0ZWAgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIFVzZSB0aGlzIG9wZXJhdG9yIGluIGNvbmp1bmN0aW9uIHdpdGgge0BsaW5rIG1hdGVyaWFsaXplfS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db252ZXJ0IGFuIE9ic2VydmFibGUgb2YgTm90aWZpY2F0aW9ucyB0byBhbiBhY3R1YWwgT2JzZXJ2YWJsZTwvY2FwdGlvbj5cbiAqIHZhciBub3RpZkEgPSBuZXcgUnguTm90aWZpY2F0aW9uKCdOJywgJ0EnKTtcbiAqIHZhciBub3RpZkIgPSBuZXcgUnguTm90aWZpY2F0aW9uKCdOJywgJ0InKTtcbiAqIHZhciBub3RpZkUgPSBuZXcgUnguTm90aWZpY2F0aW9uKCdFJywgdm9pZCAwLFxuICogICBuZXcgVHlwZUVycm9yKCd4LnRvVXBwZXJDYXNlIGlzIG5vdCBhIGZ1bmN0aW9uJylcbiAqICk7XG4gKiB2YXIgbWF0ZXJpYWxpemVkID0gUnguT2JzZXJ2YWJsZS5vZihub3RpZkEsIG5vdGlmQiwgbm90aWZFKTtcbiAqIHZhciB1cHBlckNhc2UgPSBtYXRlcmlhbGl6ZWQuZGVtYXRlcmlhbGl6ZSgpO1xuICogdXBwZXJDYXNlLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpLCBlID0+IGNvbnNvbGUuZXJyb3IoZSkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW46XG4gKiAvLyBBXG4gKiAvLyBCXG4gKiAvLyBUeXBlRXJyb3I6IHgudG9VcHBlckNhc2UgaXMgbm90IGEgZnVuY3Rpb25cbiAqXG4gKiBAc2VlIHtAbGluayBOb3RpZmljYXRpb259XG4gKiBAc2VlIHtAbGluayBtYXRlcmlhbGl6ZX1cbiAqXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYW5kIG5vdGlmaWNhdGlvbnNcbiAqIGVtYmVkZGVkIGluIE5vdGlmaWNhdGlvbiBvYmplY3RzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBkZW1hdGVyaWFsaXplXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBkZW1hdGVyaWFsaXplKCkge1xuICAgIHJldHVybiBkZW1hdGVyaWFsaXplXzEuZGVtYXRlcmlhbGl6ZSgpKHRoaXMpO1xufVxuZXhwb3J0cy5kZW1hdGVyaWFsaXplID0gZGVtYXRlcmlhbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbWF0ZXJpYWxpemUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZGlzdGluY3RfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9kaXN0aW5jdCcpO1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbGwgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgdGhhdCBhcmUgZGlzdGluY3QgYnkgY29tcGFyaXNvbiBmcm9tIHByZXZpb3VzIGl0ZW1zLlxuICpcbiAqIElmIGEga2V5U2VsZWN0b3IgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoZW4gaXQgd2lsbCBwcm9qZWN0IGVhY2ggdmFsdWUgZnJvbSB0aGUgc291cmNlIG9ic2VydmFibGUgaW50byBhIG5ldyB2YWx1ZSB0aGF0IGl0IHdpbGxcbiAqIGNoZWNrIGZvciBlcXVhbGl0eSB3aXRoIHByZXZpb3VzbHkgcHJvamVjdGVkIHZhbHVlcy4gSWYgYSBrZXlTZWxlY3RvciBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQsIGl0IHdpbGwgdXNlIGVhY2ggdmFsdWUgZnJvbSB0aGVcbiAqIHNvdXJjZSBvYnNlcnZhYmxlIGRpcmVjdGx5IHdpdGggYW4gZXF1YWxpdHkgY2hlY2sgYWdhaW5zdCBwcmV2aW91cyB2YWx1ZXMuXG4gKlxuICogSW4gSmF2YVNjcmlwdCBydW50aW1lcyB0aGF0IHN1cHBvcnQgYFNldGAsIHRoaXMgb3BlcmF0b3Igd2lsbCB1c2UgYSBgU2V0YCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIHRoZSBkaXN0aW5jdCB2YWx1ZSBjaGVja2luZy5cbiAqXG4gKiBJbiBvdGhlciBydW50aW1lcywgdGhpcyBvcGVyYXRvciB3aWxsIHVzZSBhIG1pbmltYWwgaW1wbGVtZW50YXRpb24gb2YgYFNldGAgdGhhdCByZWxpZXMgb24gYW4gYEFycmF5YCBhbmQgYGluZGV4T2ZgIHVuZGVyIHRoZVxuICogaG9vZCwgc28gcGVyZm9ybWFuY2Ugd2lsbCBkZWdyYWRlIGFzIG1vcmUgdmFsdWVzIGFyZSBjaGVja2VkIGZvciBkaXN0aW5jdGlvbi4gRXZlbiBpbiBuZXdlciBicm93c2VycywgYSBsb25nLXJ1bm5pbmcgYGRpc3RpbmN0YFxuICogdXNlIG1pZ2h0IHJlc3VsdCBpbiBtZW1vcnkgbGVha3MuIFRvIGhlbHAgYWxsZXZpYXRlIHRoaXMgaW4gc29tZSBzY2VuYXJpb3MsIGFuIG9wdGlvbmFsIGBmbHVzaGVzYCBwYXJhbWV0ZXIgaXMgYWxzbyBwcm92aWRlZCBzb1xuICogdGhhdCB0aGUgaW50ZXJuYWwgYFNldGAgY2FuIGJlIFwiZmx1c2hlZFwiLCBiYXNpY2FsbHkgY2xlYXJpbmcgaXQgb2YgdmFsdWVzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkEgc2ltcGxlIGV4YW1wbGUgd2l0aCBudW1iZXJzPC9jYXB0aW9uPlxuICogT2JzZXJ2YWJsZS5vZigxLCAxLCAyLCAyLCAyLCAxLCAyLCAzLCA0LCAzLCAyLCAxKVxuICogICAuZGlzdGluY3QoKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpOyAvLyAxLCAyLCAzLCA0XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QW4gZXhhbXBsZSB1c2luZyBhIGtleVNlbGVjdG9yIGZ1bmN0aW9uPC9jYXB0aW9uPlxuICogaW50ZXJmYWNlIFBlcnNvbiB7XG4gKiAgICBhZ2U6IG51bWJlcixcbiAqICAgIG5hbWU6IHN0cmluZ1xuICogfVxuICpcbiAqIE9ic2VydmFibGUub2Y8UGVyc29uPihcbiAqICAgICB7IGFnZTogNCwgbmFtZTogJ0Zvbyd9LFxuICogICAgIHsgYWdlOiA3LCBuYW1lOiAnQmFyJ30sXG4gKiAgICAgeyBhZ2U6IDUsIG5hbWU6ICdGb28nfSlcbiAqICAgICAuZGlzdGluY3QoKHA6IFBlcnNvbikgPT4gcC5uYW1lKVxuICogICAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gZGlzcGxheXM6XG4gKiAvLyB7IGFnZTogNCwgbmFtZTogJ0ZvbycgfVxuICogLy8geyBhZ2U6IDcsIG5hbWU6ICdCYXInIH1cbiAqXG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdFVudGlsQ2hhbmdlZH1cbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtrZXlTZWxlY3Rvcl0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gc2VsZWN0IHdoaWNoIHZhbHVlIHlvdSB3YW50IHRvIGNoZWNrIGFzIGRpc3RpbmN0LlxuICogQHBhcmFtIHtPYnNlcnZhYmxlfSBbZmx1c2hlc10gT3B0aW9uYWwgT2JzZXJ2YWJsZSBmb3IgZmx1c2hpbmcgdGhlIGludGVybmFsIEhhc2hTZXQgb2YgdGhlIG9wZXJhdG9yLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggZGlzdGluY3QgdmFsdWVzLlxuICogQG1ldGhvZCBkaXN0aW5jdFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gZGlzdGluY3Qoa2V5U2VsZWN0b3IsIGZsdXNoZXMpIHtcbiAgICByZXR1cm4gZGlzdGluY3RfMS5kaXN0aW5jdChrZXlTZWxlY3RvciwgZmx1c2hlcykodGhpcyk7XG59XG5leHBvcnRzLmRpc3RpbmN0ID0gZGlzdGluY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBkaXN0aW5jdFVudGlsQ2hhbmdlZF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbGwgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgdGhhdCBhcmUgZGlzdGluY3QgYnkgY29tcGFyaXNvbiBmcm9tIHRoZSBwcmV2aW91cyBpdGVtLlxuICpcbiAqIElmIGEgY29tcGFyYXRvciBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBpdGVtIHRvIHRlc3QgZm9yIHdoZXRoZXIgb3Igbm90IHRoYXQgdmFsdWUgc2hvdWxkIGJlIGVtaXR0ZWQuXG4gKlxuICogSWYgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZCwgYW4gZXF1YWxpdHkgY2hlY2sgaXMgdXNlZCBieSBkZWZhdWx0LlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkEgc2ltcGxlIGV4YW1wbGUgd2l0aCBudW1iZXJzPC9jYXB0aW9uPlxuICogT2JzZXJ2YWJsZS5vZigxLCAxLCAyLCAyLCAyLCAxLCAxLCAyLCAzLCAzLCA0KVxuICogICAuZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpOyAvLyAxLCAyLCAxLCAyLCAzLCA0XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QW4gZXhhbXBsZSB1c2luZyBhIGNvbXBhcmUgZnVuY3Rpb248L2NhcHRpb24+XG4gKiBpbnRlcmZhY2UgUGVyc29uIHtcbiAqICAgIGFnZTogbnVtYmVyLFxuICogICAgbmFtZTogc3RyaW5nXG4gKiB9XG4gKlxuICogT2JzZXJ2YWJsZS5vZjxQZXJzb24+KFxuICogICAgIHsgYWdlOiA0LCBuYW1lOiAnRm9vJ30sXG4gKiAgICAgeyBhZ2U6IDcsIG5hbWU6ICdCYXInfSxcbiAqICAgICB7IGFnZTogNSwgbmFtZTogJ0Zvbyd9KVxuICogICAgIHsgYWdlOiA2LCBuYW1lOiAnRm9vJ30pXG4gKiAgICAgLmRpc3RpbmN0VW50aWxDaGFuZ2VkKChwOiBQZXJzb24sIHE6IFBlcnNvbikgPT4gcC5uYW1lID09PSBxLm5hbWUpXG4gKiAgICAgLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBkaXNwbGF5czpcbiAqIC8vIHsgYWdlOiA0LCBuYW1lOiAnRm9vJyB9XG4gKiAvLyB7IGFnZTogNywgbmFtZTogJ0JhcicgfVxuICogLy8geyBhZ2U6IDUsIG5hbWU6ICdGb28nIH1cbiAqXG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdH1cbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjb21wYXJlXSBPcHRpb25hbCBjb21wYXJpc29uIGZ1bmN0aW9uIGNhbGxlZCB0byB0ZXN0IGlmIGFuIGl0ZW0gaXMgZGlzdGluY3QgZnJvbSB0aGUgcHJldmlvdXMgaXRlbSBpbiB0aGUgc291cmNlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggZGlzdGluY3QgdmFsdWVzLlxuICogQG1ldGhvZCBkaXN0aW5jdFVudGlsQ2hhbmdlZFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gZGlzdGluY3RVbnRpbENoYW5nZWQoY29tcGFyZSwga2V5U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZGlzdGluY3RVbnRpbENoYW5nZWRfMS5kaXN0aW5jdFVudGlsQ2hhbmdlZChjb21wYXJlLCBrZXlTZWxlY3RvcikodGhpcyk7XG59XG5leHBvcnRzLmRpc3RpbmN0VW50aWxDaGFuZ2VkID0gZGlzdGluY3RVbnRpbENoYW5nZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdFVudGlsQ2hhbmdlZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbGwgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgdGhhdCBhcmUgZGlzdGluY3QgYnkgY29tcGFyaXNvbiBmcm9tIHRoZSBwcmV2aW91cyBpdGVtLFxuICogdXNpbmcgYSBwcm9wZXJ0eSBhY2Nlc3NlZCBieSB1c2luZyB0aGUga2V5IHByb3ZpZGVkIHRvIGNoZWNrIGlmIHRoZSB0d28gaXRlbXMgYXJlIGRpc3RpbmN0LlxuICpcbiAqIElmIGEgY29tcGFyYXRvciBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBpdGVtIHRvIHRlc3QgZm9yIHdoZXRoZXIgb3Igbm90IHRoYXQgdmFsdWUgc2hvdWxkIGJlIGVtaXR0ZWQuXG4gKlxuICogSWYgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZCwgYW4gZXF1YWxpdHkgY2hlY2sgaXMgdXNlZCBieSBkZWZhdWx0LlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkFuIGV4YW1wbGUgY29tcGFyaW5nIHRoZSBuYW1lIG9mIHBlcnNvbnM8L2NhcHRpb24+XG4gKlxuICogIGludGVyZmFjZSBQZXJzb24ge1xuICogICAgIGFnZTogbnVtYmVyLFxuICogICAgIG5hbWU6IHN0cmluZ1xuICogIH1cbiAqXG4gKiBPYnNlcnZhYmxlLm9mPFBlcnNvbj4oXG4gKiAgICAgeyBhZ2U6IDQsIG5hbWU6ICdGb28nfSxcbiAqICAgICB7IGFnZTogNywgbmFtZTogJ0Jhcid9LFxuICogICAgIHsgYWdlOiA1LCBuYW1lOiAnRm9vJ30sXG4gKiAgICAgeyBhZ2U6IDYsIG5hbWU6ICdGb28nfSlcbiAqICAgICAuZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoJ25hbWUnKVxuICogICAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gZGlzcGxheXM6XG4gKiAvLyB7IGFnZTogNCwgbmFtZTogJ0ZvbycgfVxuICogLy8geyBhZ2U6IDcsIG5hbWU6ICdCYXInIH1cbiAqIC8vIHsgYWdlOiA1LCBuYW1lOiAnRm9vJyB9XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QW4gZXhhbXBsZSBjb21wYXJpbmcgdGhlIGZpcnN0IGxldHRlcnMgb2YgdGhlIG5hbWU8L2NhcHRpb24+XG4gKlxuICogaW50ZXJmYWNlIFBlcnNvbiB7XG4gKiAgICAgYWdlOiBudW1iZXIsXG4gKiAgICAgbmFtZTogc3RyaW5nXG4gKiAgfVxuICpcbiAqIE9ic2VydmFibGUub2Y8UGVyc29uPihcbiAqICAgICB7IGFnZTogNCwgbmFtZTogJ0ZvbzEnfSxcbiAqICAgICB7IGFnZTogNywgbmFtZTogJ0Jhcid9LFxuICogICAgIHsgYWdlOiA1LCBuYW1lOiAnRm9vMid9LFxuICogICAgIHsgYWdlOiA2LCBuYW1lOiAnRm9vMyd9KVxuICogICAgIC5kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCgnbmFtZScsICh4OiBzdHJpbmcsIHk6IHN0cmluZykgPT4geC5zdWJzdHJpbmcoMCwgMykgPT09IHkuc3Vic3RyaW5nKDAsIDMpKVxuICogICAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gZGlzcGxheXM6XG4gKiAvLyB7IGFnZTogNCwgbmFtZTogJ0ZvbzEnIH1cbiAqIC8vIHsgYWdlOiA3LCBuYW1lOiAnQmFyJyB9XG4gKiAvLyB7IGFnZTogNSwgbmFtZTogJ0ZvbzInIH1cbiAqXG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdH1cbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0VW50aWxDaGFuZ2VkfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgU3RyaW5nIGtleSBmb3Igb2JqZWN0IHByb3BlcnR5IGxvb2t1cCBvbiBlYWNoIGl0ZW0uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY29tcGFyZV0gT3B0aW9uYWwgY29tcGFyaXNvbiBmdW5jdGlvbiBjYWxsZWQgdG8gdGVzdCBpZiBhbiBpdGVtIGlzIGRpc3RpbmN0IGZyb20gdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIHNvdXJjZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aXRoIGRpc3RpbmN0IHZhbHVlcyBiYXNlZCBvbiB0aGUga2V5IHNwZWNpZmllZC5cbiAqIEBtZXRob2QgZGlzdGluY3RVbnRpbEtleUNoYW5nZWRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKGtleSwgY29tcGFyZSkge1xuICAgIHJldHVybiBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZF8xLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKGtleSwgY29tcGFyZSkodGhpcyk7XG59XG5leHBvcnRzLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkID0gZGlzdGluY3RVbnRpbEtleUNoYW5nZWQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB0YXBfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy90YXAnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFBlcmZvcm0gYSBzaWRlIGVmZmVjdCBmb3IgZXZlcnkgZW1pc3Npb24gb24gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBidXQgcmV0dXJuXG4gKiBhbiBPYnNlcnZhYmxlIHRoYXQgaXMgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkludGVyY2VwdHMgZWFjaCBlbWlzc2lvbiBvbiB0aGUgc291cmNlIGFuZCBydW5zIGFcbiAqIGZ1bmN0aW9uLCBidXQgcmV0dXJucyBhbiBvdXRwdXQgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UgYXMgbG9uZyBhcyBlcnJvcnMgZG9uJ3Qgb2NjdXIuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvZG8ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogUmV0dXJucyBhIG1pcnJvcmVkIE9ic2VydmFibGUgb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBidXQgbW9kaWZpZWQgc28gdGhhdFxuICogdGhlIHByb3ZpZGVkIE9ic2VydmVyIGlzIGNhbGxlZCB0byBwZXJmb3JtIGEgc2lkZSBlZmZlY3QgZm9yIGV2ZXJ5IHZhbHVlLFxuICogZXJyb3IsIGFuZCBjb21wbGV0aW9uIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZS4gQW55IGVycm9ycyB0aGF0IGFyZSB0aHJvd24gaW5cbiAqIHRoZSBhZm9yZW1lbnRpb25lZCBPYnNlcnZlciBvciBoYW5kbGVycyBhcmUgc2FmZWx5IHNlbnQgZG93biB0aGUgZXJyb3IgcGF0aFxuICogb2YgdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIFRoaXMgb3BlcmF0b3IgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgeW91ciBPYnNlcnZhYmxlcyBmb3IgdGhlIGNvcnJlY3QgdmFsdWVzXG4gKiBvciBwZXJmb3JtaW5nIG90aGVyIHNpZGUgZWZmZWN0cy5cbiAqXG4gKiBOb3RlOiB0aGlzIGlzIGRpZmZlcmVudCB0byBhIGBzdWJzY3JpYmVgIG9uIHRoZSBPYnNlcnZhYmxlLiBJZiB0aGUgT2JzZXJ2YWJsZVxuICogcmV0dXJuZWQgYnkgYGRvYCBpcyBub3Qgc3Vic2NyaWJlZCwgdGhlIHNpZGUgZWZmZWN0cyBzcGVjaWZpZWQgYnkgdGhlXG4gKiBPYnNlcnZlciB3aWxsIG5ldmVyIGhhcHBlbi4gYGRvYCB0aGVyZWZvcmUgc2ltcGx5IHNwaWVzIG9uIGV4aXN0aW5nXG4gKiBleGVjdXRpb24sIGl0IGRvZXMgbm90IHRyaWdnZXIgYW4gZXhlY3V0aW9uIHRvIGhhcHBlbiBsaWtlIGBzdWJzY3JpYmVgIGRvZXMuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWFwIGV2ZXJ5IGNsaWNrIHRvIHRoZSBjbGllbnRYIHBvc2l0aW9uIG9mIHRoYXQgY2xpY2ssIHdoaWxlIGFsc28gbG9nZ2luZyB0aGUgY2xpY2sgZXZlbnQ8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHBvc2l0aW9ucyA9IGNsaWNrc1xuICogICAuZG8oZXYgPT4gY29uc29sZS5sb2coZXYpKVxuICogICAubWFwKGV2ID0+IGV2LmNsaWVudFgpO1xuICogcG9zaXRpb25zLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBtYXB9XG4gKiBAc2VlIHtAbGluayBzdWJzY3JpYmV9XG4gKlxuICogQHBhcmFtIHtPYnNlcnZlcnxmdW5jdGlvbn0gW25leHRPck9ic2VydmVyXSBBIG5vcm1hbCBPYnNlcnZlciBvYmplY3Qgb3IgYVxuICogY2FsbGJhY2sgZm9yIGBuZXh0YC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtlcnJvcl0gQ2FsbGJhY2sgZm9yIGVycm9ycyBpbiB0aGUgc291cmNlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2NvbXBsZXRlXSBDYWxsYmFjayBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHNvdXJjZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgaWRlbnRpY2FsIHRvIHRoZSBzb3VyY2UsIGJ1dCBydW5zIHRoZVxuICogc3BlY2lmaWVkIE9ic2VydmVyIG9yIGNhbGxiYWNrKHMpIGZvciBlYWNoIGl0ZW0uXG4gKiBAbWV0aG9kIGRvXG4gKiBAbmFtZSBkb1xuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gX2RvKG5leHRPck9ic2VydmVyLCBlcnJvciwgY29tcGxldGUpIHtcbiAgICByZXR1cm4gdGFwXzEudGFwKG5leHRPck9ic2VydmVyLCBlcnJvciwgY29tcGxldGUpKHRoaXMpO1xufVxuZXhwb3J0cy5fZG8gPSBfZG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBlbGVtZW50QXRfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9lbGVtZW50QXQnKTtcbi8qKlxuICogRW1pdHMgdGhlIHNpbmdsZSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIGBpbmRleGAgaW4gYSBzZXF1ZW5jZSBvZiBlbWlzc2lvbnNcbiAqIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbWl0cyBvbmx5IHRoZSBpLXRoIHZhbHVlLCB0aGVuIGNvbXBsZXRlcy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9lbGVtZW50QXQucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGVsZW1lbnRBdGAgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGl0ZW0gYXQgdGhlIHNwZWNpZmllZFxuICogYGluZGV4YCBpbiB0aGUgc291cmNlIE9ic2VydmFibGUsIG9yIGEgZGVmYXVsdCB2YWx1ZSBpZiB0aGF0IGBpbmRleGAgaXMgb3V0XG4gKiBvZiByYW5nZSBhbmQgdGhlIGBkZWZhdWx0YCBhcmd1bWVudCBpcyBwcm92aWRlZC4gSWYgdGhlIGBkZWZhdWx0YCBhcmd1bWVudCBpc1xuICogbm90IGdpdmVuIGFuZCB0aGUgYGluZGV4YCBpcyBvdXQgb2YgcmFuZ2UsIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSB3aWxsIGVtaXQgYW5cbiAqIGBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcmAgZXJyb3IuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCBvbmx5IHRoZSB0aGlyZCBjbGljayBldmVudDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmVsZW1lbnRBdCgyKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbjpcbiAqIC8vIGNsaWNrIDEgPSBub3RoaW5nXG4gKiAvLyBjbGljayAyID0gbm90aGluZ1xuICogLy8gY2xpY2sgMyA9IE1vdXNlRXZlbnQgb2JqZWN0IGxvZ2dlZCB0byBjb25zb2xlXG4gKlxuICogQHNlZSB7QGxpbmsgZmlyc3R9XG4gKiBAc2VlIHtAbGluayBsYXN0fVxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqIEBzZWUge0BsaW5rIHNpbmdsZX1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHRocm93cyB7QXJndW1lbnRPdXRPZlJhbmdlRXJyb3J9IFdoZW4gdXNpbmcgYGVsZW1lbnRBdChpKWAsIGl0IGRlbGl2ZXJzIGFuXG4gKiBBcmd1bWVudE91dE9yUmFuZ2VFcnJvciB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgIGNhbGxiYWNrIGlmIGBpIDwgMGAgb3IgdGhlXG4gKiBPYnNlcnZhYmxlIGhhcyBjb21wbGV0ZWQgYmVmb3JlIGVtaXR0aW5nIHRoZSBpLXRoIGBuZXh0YCBub3RpZmljYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IElzIHRoZSBudW1iZXIgYGlgIGZvciB0aGUgaS10aCBzb3VyY2UgZW1pc3Npb24gdGhhdCBoYXNcbiAqIGhhcHBlbmVkIHNpbmNlIHRoZSBzdWJzY3JpcHRpb24sIHN0YXJ0aW5nIGZyb20gdGhlIG51bWJlciBgMGAuXG4gKiBAcGFyYW0ge1R9IFtkZWZhdWx0VmFsdWVdIFRoZSBkZWZhdWx0IHZhbHVlIHJldHVybmVkIGZvciBtaXNzaW5nIGluZGljZXMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYSBzaW5nbGUgaXRlbSwgaWYgaXQgaXMgZm91bmQuXG4gKiBPdGhlcndpc2UsIHdpbGwgZW1pdCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBnaXZlbi4gSWYgbm90LCB0aGVuIGVtaXRzIGFuIGVycm9yLlxuICogQG1ldGhvZCBlbGVtZW50QXRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGVsZW1lbnRBdChpbmRleCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRBdF8xLmVsZW1lbnRBdChpbmRleCwgZGVmYXVsdFZhbHVlKSh0aGlzKTtcbn1cbmV4cG9ydHMuZWxlbWVudEF0ID0gZWxlbWVudEF0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZWxlbWVudEF0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGV2ZXJ5XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZXZlcnknKTtcbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hldGhlciBvciBub3QgZXZlcnkgaXRlbSBvZiB0aGUgc291cmNlIHNhdGlzZmllcyB0aGUgY29uZGl0aW9uIHNwZWNpZmllZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5BIHNpbXBsZSBleGFtcGxlIGVtaXR0aW5nIHRydWUgaWYgYWxsIGVsZW1lbnRzIGFyZSBsZXNzIHRoYW4gNSwgZmFsc2Ugb3RoZXJ3aXNlPC9jYXB0aW9uPlxuICogIE9ic2VydmFibGUub2YoMSwgMiwgMywgNCwgNSwgNilcbiAqICAgICAuZXZlcnkoeCA9PiB4IDwgNSlcbiAqICAgICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpOyAvLyAtPiBmYWxzZVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHByZWRpY2F0ZSBBIGZ1bmN0aW9uIGZvciBkZXRlcm1pbmluZyBpZiBhbiBpdGVtIG1lZXRzIGEgc3BlY2lmaWVkIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSB7YW55fSBbdGhpc0FyZ10gT3B0aW9uYWwgb2JqZWN0IHRvIHVzZSBmb3IgYHRoaXNgIGluIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgb2YgYm9vbGVhbnMgdGhhdCBkZXRlcm1pbmVzIGlmIGFsbCBpdGVtcyBvZiB0aGUgc291cmNlIE9ic2VydmFibGUgbWVldCB0aGUgY29uZGl0aW9uIHNwZWNpZmllZC5cbiAqIEBtZXRob2QgZXZlcnlcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGV2ZXJ5KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBldmVyeV8xLmV2ZXJ5KHByZWRpY2F0ZSwgdGhpc0FyZykodGhpcyk7XG59XG5leHBvcnRzLmV2ZXJ5ID0gZXZlcnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ldmVyeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBleGhhdXN0XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZXhoYXVzdCcpO1xuLyoqXG4gKiBDb252ZXJ0cyBhIGhpZ2hlci1vcmRlciBPYnNlcnZhYmxlIGludG8gYSBmaXJzdC1vcmRlciBPYnNlcnZhYmxlIGJ5IGRyb3BwaW5nXG4gKiBpbm5lciBPYnNlcnZhYmxlcyB3aGlsZSB0aGUgcHJldmlvdXMgaW5uZXIgT2JzZXJ2YWJsZSBoYXMgbm90IHlldCBjb21wbGV0ZWQuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkZsYXR0ZW5zIGFuIE9ic2VydmFibGUtb2YtT2JzZXJ2YWJsZXMgYnkgZHJvcHBpbmcgdGhlXG4gKiBuZXh0IGlubmVyIE9ic2VydmFibGVzIHdoaWxlIHRoZSBjdXJyZW50IGlubmVyIGlzIHN0aWxsIGV4ZWN1dGluZy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9leGhhdXN0LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBleGhhdXN0YCBzdWJzY3JpYmVzIHRvIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBPYnNlcnZhYmxlcywgYWxzbyBrbm93biBhcyBhXG4gKiBoaWdoZXItb3JkZXIgT2JzZXJ2YWJsZS4gRWFjaCB0aW1lIGl0IG9ic2VydmVzIG9uZSBvZiB0aGVzZSBlbWl0dGVkIGlubmVyXG4gKiBPYnNlcnZhYmxlcywgdGhlIG91dHB1dCBPYnNlcnZhYmxlIGJlZ2lucyBlbWl0dGluZyB0aGUgaXRlbXMgZW1pdHRlZCBieSB0aGF0XG4gKiBpbm5lciBPYnNlcnZhYmxlLiBTbyBmYXIsIGl0IGJlaGF2ZXMgbGlrZSB7QGxpbmsgbWVyZ2VBbGx9LiBIb3dldmVyLFxuICogYGV4aGF1c3RgIGlnbm9yZXMgZXZlcnkgbmV3IGlubmVyIE9ic2VydmFibGUgaWYgdGhlIHByZXZpb3VzIE9ic2VydmFibGUgaGFzXG4gKiBub3QgeWV0IGNvbXBsZXRlZC4gT25jZSB0aGF0IG9uZSBjb21wbGV0ZXMsIGl0IHdpbGwgYWNjZXB0IGFuZCBmbGF0dGVuIHRoZVxuICogbmV4dCBpbm5lciBPYnNlcnZhYmxlIGFuZCByZXBlYXQgdGhpcyBwcm9jZXNzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlJ1biBhIGZpbml0ZSB0aW1lciBmb3IgZWFjaCBjbGljaywgb25seSBpZiB0aGVyZSBpcyBubyBjdXJyZW50bHkgYWN0aXZlIHRpbWVyPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBoaWdoZXJPcmRlciA9IGNsaWNrcy5tYXAoKGV2KSA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoNSkpO1xuICogdmFyIHJlc3VsdCA9IGhpZ2hlck9yZGVyLmV4aGF1c3QoKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUFsbH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdEFsbH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlQWxsfVxuICogQHNlZSB7QGxpbmsgZXhoYXVzdE1hcH1cbiAqIEBzZWUge0BsaW5rIHppcEFsbH1cbiAqXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgdGFrZXMgYSBzb3VyY2Ugb2YgT2JzZXJ2YWJsZXMgYW5kIHByb3BhZ2F0ZXMgdGhlIGZpcnN0IG9ic2VydmFibGVcbiAqIGV4Y2x1c2l2ZWx5IHVudGlsIGl0IGNvbXBsZXRlcyBiZWZvcmUgc3Vic2NyaWJpbmcgdG8gdGhlIG5leHQuXG4gKiBAbWV0aG9kIGV4aGF1c3RcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGV4aGF1c3QoKSB7XG4gICAgcmV0dXJuIGV4aGF1c3RfMS5leGhhdXN0KCkodGhpcyk7XG59XG5leHBvcnRzLmV4aGF1c3QgPSBleGhhdXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhoYXVzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBleGhhdXN0TWFwXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZXhoYXVzdE1hcCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUHJvamVjdHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSB3aGljaCBpcyBtZXJnZWQgaW4gdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZSBvbmx5IGlmIHRoZSBwcmV2aW91cyBwcm9qZWN0ZWQgT2JzZXJ2YWJsZSBoYXMgY29tcGxldGVkLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5NYXBzIGVhY2ggdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSwgdGhlbiBmbGF0dGVucyBhbGwgb2ZcbiAqIHRoZXNlIGlubmVyIE9ic2VydmFibGVzIHVzaW5nIHtAbGluayBleGhhdXN0fS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9leGhhdXN0TWFwLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGJhc2VkIG9uIGFwcGx5aW5nIGEgZnVuY3Rpb24gdGhhdCB5b3VcbiAqIHN1cHBseSB0byBlYWNoIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIHdoZXJlIHRoYXQgZnVuY3Rpb25cbiAqIHJldHVybnMgYW4gKHNvLWNhbGxlZCBcImlubmVyXCIpIE9ic2VydmFibGUuIFdoZW4gaXQgcHJvamVjdHMgYSBzb3VyY2UgdmFsdWUgdG9cbiAqIGFuIE9ic2VydmFibGUsIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiZWdpbnMgZW1pdHRpbmcgdGhlIGl0ZW1zIGVtaXR0ZWQgYnlcbiAqIHRoYXQgcHJvamVjdGVkIE9ic2VydmFibGUuIEhvd2V2ZXIsIGBleGhhdXN0TWFwYCBpZ25vcmVzIGV2ZXJ5IG5ldyBwcm9qZWN0ZWRcbiAqIE9ic2VydmFibGUgaWYgdGhlIHByZXZpb3VzIHByb2plY3RlZCBPYnNlcnZhYmxlIGhhcyBub3QgeWV0IGNvbXBsZXRlZC4gT25jZVxuICogdGhhdCBvbmUgY29tcGxldGVzLCBpdCB3aWxsIGFjY2VwdCBhbmQgZmxhdHRlbiB0aGUgbmV4dCBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogYW5kIHJlcGVhdCB0aGlzIHByb2Nlc3MuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+UnVuIGEgZmluaXRlIHRpbWVyIGZvciBlYWNoIGNsaWNrLCBvbmx5IGlmIHRoZXJlIGlzIG5vIGN1cnJlbnRseSBhY3RpdmUgdGltZXI8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5leGhhdXN0TWFwKChldikgPT4gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKS50YWtlKDUpKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwfVxuICogQHNlZSB7QGxpbmsgZXhoYXVzdH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwfVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsID9pbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZUlucHV0fSBwcm9qZWN0IEEgZnVuY3Rpb25cbiAqIHRoYXQsIHdoZW4gYXBwbGllZCB0byBhbiBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCByZXR1cm5zIGFuXG4gKiBPYnNlcnZhYmxlLlxuICogQHBhcmFtIHtmdW5jdGlvbihvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBJLCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcik6IGFueX0gW3Jlc3VsdFNlbGVjdG9yXVxuICogQSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYmFzZWQgb24gdGhlIHZhbHVlc1xuICogYW5kIHRoZSBpbmRpY2VzIG9mIHRoZSBzb3VyY2UgKG91dGVyKSBlbWlzc2lvbiBhbmQgdGhlIGlubmVyIE9ic2VydmFibGVcbiAqIGVtaXNzaW9uLiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYG91dGVyVmFsdWVgOiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHNvdXJjZVxuICogLSBgaW5uZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIC0gYG91dGVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lckluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgY29udGFpbmluZyBwcm9qZWN0ZWQgT2JzZXJ2YWJsZXNcbiAqIG9mIGVhY2ggaXRlbSBvZiB0aGUgc291cmNlLCBpZ25vcmluZyBwcm9qZWN0ZWQgT2JzZXJ2YWJsZXMgdGhhdCBzdGFydCBiZWZvcmVcbiAqIHRoZWlyIHByZWNlZGluZyBPYnNlcnZhYmxlIGhhcyBjb21wbGV0ZWQuXG4gKiBAbWV0aG9kIGV4aGF1c3RNYXBcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGV4aGF1c3RNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZXhoYXVzdE1hcF8xLmV4aGF1c3RNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpKHRoaXMpO1xufVxuZXhwb3J0cy5leGhhdXN0TWFwID0gZXhoYXVzdE1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4aGF1c3RNYXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZXhwYW5kXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZXhwYW5kJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZWN1cnNpdmVseSBwcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBpblxuICogdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIHNpbWlsYXIgdG8ge0BsaW5rIG1lcmdlTWFwfSwgYnV0IGFwcGxpZXMgdGhlXG4gKiBwcm9qZWN0aW9uIGZ1bmN0aW9uIHRvIGV2ZXJ5IHNvdXJjZSB2YWx1ZSBhcyB3ZWxsIGFzIGV2ZXJ5IG91dHB1dCB2YWx1ZS5cbiAqIEl0J3MgcmVjdXJzaXZlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2V4cGFuZC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBiYXNlZCBvbiBhcHBseWluZyBhIGZ1bmN0aW9uIHRoYXQgeW91XG4gKiBzdXBwbHkgdG8gZWFjaCBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB3aGVyZSB0aGF0IGZ1bmN0aW9uXG4gKiByZXR1cm5zIGFuIE9ic2VydmFibGUsIGFuZCB0aGVuIG1lcmdpbmcgdGhvc2UgcmVzdWx0aW5nIE9ic2VydmFibGVzIGFuZFxuICogZW1pdHRpbmcgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXJnZXIuICpFeHBhbmQqIHdpbGwgcmUtZW1pdCBvbiB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlIGV2ZXJ5IHNvdXJjZSB2YWx1ZS4gVGhlbiwgZWFjaCBvdXRwdXQgdmFsdWUgaXMgZ2l2ZW4gdG8gdGhlXG4gKiBgcHJvamVjdGAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBpbm5lciBPYnNlcnZhYmxlIHRvIGJlIG1lcmdlZCBvbiB0aGVcbiAqIG91dHB1dCBPYnNlcnZhYmxlLiBUaG9zZSBvdXRwdXQgdmFsdWVzIHJlc3VsdGluZyBmcm9tIHRoZSBwcm9qZWN0aW9uIGFyZSBhbHNvXG4gKiBnaXZlbiB0byB0aGUgYHByb2plY3RgIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3IG91dHB1dCB2YWx1ZXMuIFRoaXMgaXMgaG93XG4gKiAqZXhwYW5kKiBiZWhhdmVzIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlN0YXJ0IGVtaXR0aW5nIHRoZSBwb3dlcnMgb2YgdHdvIG9uIGV2ZXJ5IGNsaWNrLCBhdCBtb3N0IDEwIG9mIHRoZW08L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHBvd2Vyc09mVHdvID0gY2xpY2tzXG4gKiAgIC5tYXBUbygxKVxuICogICAuZXhwYW5kKHggPT4gUnguT2JzZXJ2YWJsZS5vZigyICogeCkuZGVsYXkoMTAwMCkpXG4gKiAgIC50YWtlKDEwKTtcbiAqIHBvd2Vyc09mVHdvLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPYnNlcnZhYmxlfSBwcm9qZWN0IEEgZnVuY3Rpb25cbiAqIHRoYXQsIHdoZW4gYXBwbGllZCB0byBhbiBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBvciB0aGUgb3V0cHV0IE9ic2VydmFibGUsXG4gKiByZXR1cm5zIGFuIE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXSBNYXhpbXVtIG51bWJlciBvZiBpbnB1dFxuICogT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0byBjb25jdXJyZW50bHkuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1udWxsXSBUaGUgSVNjaGVkdWxlciB0byB1c2UgZm9yIHN1YnNjcmliaW5nIHRvXG4gKiBlYWNoIHByb2plY3RlZCBpbm5lciBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzb3VyY2UgdmFsdWVzIGFuZCBhbHNvXG4gKiByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIHByb2plY3Rpb24gZnVuY3Rpb24gdG8gZWFjaCB2YWx1ZSBlbWl0dGVkIG9uIHRoZVxuICogb3V0cHV0IE9ic2VydmFibGUgYW5kIGFuZCBtZXJnaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBPYnNlcnZhYmxlcyBvYnRhaW5lZFxuICogZnJvbSB0aGlzIHRyYW5zZm9ybWF0aW9uLlxuICogQG1ldGhvZCBleHBhbmRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGV4cGFuZChwcm9qZWN0LCBjb25jdXJyZW50LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gdW5kZWZpbmVkOyB9XG4gICAgY29uY3VycmVudCA9IChjb25jdXJyZW50IHx8IDApIDwgMSA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IGNvbmN1cnJlbnQ7XG4gICAgcmV0dXJuIGV4cGFuZF8xLmV4cGFuZChwcm9qZWN0LCBjb25jdXJyZW50LCBzY2hlZHVsZXIpKHRoaXMpO1xufVxuZXhwb3J0cy5leHBhbmQgPSBleHBhbmQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHBhbmQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZmlsdGVyJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBGaWx0ZXIgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYnkgb25seSBlbWl0dGluZyB0aG9zZSB0aGF0XG4gKiBzYXRpc2Z5IGEgc3BlY2lmaWVkIHByZWRpY2F0ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TGlrZVxuICogW0FycmF5LnByb3RvdHlwZS5maWx0ZXIoKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZmlsdGVyKSxcbiAqIGl0IG9ubHkgZW1pdHMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgaWYgaXQgcGFzc2VzIGEgY3JpdGVyaW9uIGZ1bmN0aW9uLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2ZpbHRlci5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBTaW1pbGFyIHRvIHRoZSB3ZWxsLWtub3duIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2QsIHRoaXMgb3BlcmF0b3JcbiAqIHRha2VzIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgcGFzc2VzIHRoZW0gdGhyb3VnaCBhIGBwcmVkaWNhdGVgXG4gKiBmdW5jdGlvbiBhbmQgb25seSBlbWl0cyB0aG9zZSB2YWx1ZXMgdGhhdCB5aWVsZGVkIGB0cnVlYC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IG9ubHkgY2xpY2sgZXZlbnRzIHdob3NlIHRhcmdldCB3YXMgYSBESVYgZWxlbWVudDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgY2xpY2tzT25EaXZzID0gY2xpY2tzLmZpbHRlcihldiA9PiBldi50YXJnZXQudGFnTmFtZSA9PT0gJ0RJVicpO1xuICogY2xpY2tzT25EaXZzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdH1cbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0VW50aWxDaGFuZ2VkfVxuICogQHNlZSB7QGxpbmsgZGlzdGluY3RVbnRpbEtleUNoYW5nZWR9XG4gKiBAc2VlIHtAbGluayBpZ25vcmVFbGVtZW50c31cbiAqIEBzZWUge0BsaW5rIHBhcnRpdGlvbn1cbiAqIEBzZWUge0BsaW5rIHNraXB9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW59IHByZWRpY2F0ZSBBIGZ1bmN0aW9uIHRoYXRcbiAqIGV2YWx1YXRlcyBlYWNoIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJZiBpdCByZXR1cm5zIGB0cnVlYCxcbiAqIHRoZSB2YWx1ZSBpcyBlbWl0dGVkLCBpZiBgZmFsc2VgIHRoZSB2YWx1ZSBpcyBub3QgcGFzc2VkIHRvIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUuIFRoZSBgaW5kZXhgIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIGBpYCBmb3IgdGhlIGktdGggc291cmNlXG4gKiBlbWlzc2lvbiB0aGF0IGhhcyBoYXBwZW5lZCBzaW5jZSB0aGUgc3Vic2NyaXB0aW9uLCBzdGFydGluZyBmcm9tIHRoZSBudW1iZXJcbiAqIGAwYC5cbiAqIEBwYXJhbSB7YW55fSBbdGhpc0FyZ10gQW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiBgdGhpc2BcbiAqIGluIHRoZSBgcHJlZGljYXRlYCBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgb2YgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSB0aGF0IHdlcmVcbiAqIGFsbG93ZWQgYnkgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogQG1ldGhvZCBmaWx0ZXJcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlcihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZmlsdGVyXzEuZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykodGhpcyk7XG59XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbHRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBmaW5hbGl6ZV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2ZpbmFsaXplJyk7XG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBidXQgd2lsbCBjYWxsIGEgc3BlY2lmaWVkIGZ1bmN0aW9uIHdoZW5cbiAqIHRoZSBzb3VyY2UgdGVybWluYXRlcyBvbiBjb21wbGV0ZSBvciBlcnJvci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHNvdXJjZSB0ZXJtaW5hdGVzLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIHNvdXJjZSwgYnV0IHdpbGwgY2FsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIG9uIHRlcm1pbmF0aW9uLlxuICogQG1ldGhvZCBmaW5hbGx5XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBfZmluYWxseShjYWxsYmFjaykge1xuICAgIHJldHVybiBmaW5hbGl6ZV8xLmZpbmFsaXplKGNhbGxiYWNrKSh0aGlzKTtcbn1cbmV4cG9ydHMuX2ZpbmFsbHkgPSBfZmluYWxseTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbmFsbHkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZmluZF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2ZpbmQnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGZpcnN0IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWVldHMgc29tZVxuICogY29uZGl0aW9uLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GaW5kcyB0aGUgZmlyc3QgdmFsdWUgdGhhdCBwYXNzZXMgc29tZSB0ZXN0IGFuZCBlbWl0c1xuICogdGhhdC48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9maW5kLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBmaW5kYCBzZWFyY2hlcyBmb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWF0Y2hlcyB0aGVcbiAqIHNwZWNpZmllZCBjb25kaXRpb24gZW1ib2RpZWQgYnkgdGhlIGBwcmVkaWNhdGVgLCBhbmQgcmV0dXJucyB0aGUgZmlyc3RcbiAqIG9jY3VycmVuY2UgaW4gdGhlIHNvdXJjZS4gVW5saWtlIHtAbGluayBmaXJzdH0sIHRoZSBgcHJlZGljYXRlYCBpcyByZXF1aXJlZFxuICogaW4gYGZpbmRgLCBhbmQgZG9lcyBub3QgZW1pdCBhbiBlcnJvciBpZiBhIHZhbGlkIHZhbHVlIGlzIG5vdCBmb3VuZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5GaW5kIGFuZCBlbWl0IHRoZSBmaXJzdCBjbGljayB0aGF0IGhhcHBlbnMgb24gYSBESVYgZWxlbWVudDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmZpbmQoZXYgPT4gZXYudGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgZmlsdGVyfVxuICogQHNlZSB7QGxpbmsgZmlyc3R9XG4gKiBAc2VlIHtAbGluayBmaW5kSW5kZXh9XG4gKiBAc2VlIHtAbGluayB0YWtlfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPik6IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCBlYWNoIGl0ZW0gdG8gdGVzdCBmb3IgY29uZGl0aW9uIG1hdGNoaW5nLlxuICogQHBhcmFtIHthbnl9IFt0aGlzQXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIGB0aGlzYFxuICogaW4gdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSBvZiB0aGUgZmlyc3QgaXRlbSB0aGF0IG1hdGNoZXMgdGhlXG4gKiBjb25kaXRpb24uXG4gKiBAbWV0aG9kIGZpbmRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGZpbmQocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGZpbmRfMS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZykodGhpcyk7XG59XG5leHBvcnRzLmZpbmQgPSBmaW5kO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBmaW5kSW5kZXhfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9maW5kSW5kZXgnKTtcbi8qKlxuICogRW1pdHMgb25seSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXRcbiAqIG1lZXRzIHNvbWUgY29uZGl0aW9uLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGZpbmR9LCBidXQgZW1pdHMgdGhlIGluZGV4IG9mIHRoZVxuICogZm91bmQgdmFsdWUsIG5vdCB0aGUgdmFsdWUgaXRzZWxmLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2ZpbmRJbmRleC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgZmluZEluZGV4YCBzZWFyY2hlcyBmb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWF0Y2hlc1xuICogdGhlIHNwZWNpZmllZCBjb25kaXRpb24gZW1ib2RpZWQgYnkgdGhlIGBwcmVkaWNhdGVgLCBhbmQgcmV0dXJucyB0aGVcbiAqICh6ZXJvLWJhc2VkKSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgc291cmNlLiBVbmxpa2VcbiAqIHtAbGluayBmaXJzdH0sIHRoZSBgcHJlZGljYXRlYCBpcyByZXF1aXJlZCBpbiBgZmluZEluZGV4YCwgYW5kIGRvZXMgbm90IGVtaXRcbiAqIGFuIGVycm9yIGlmIGEgdmFsaWQgdmFsdWUgaXMgbm90IGZvdW5kLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgdGhlIGluZGV4IG9mIGZpcnN0IGNsaWNrIHRoYXQgaGFwcGVucyBvbiBhIERJViBlbGVtZW50PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3MuZmluZEluZGV4KGV2ID0+IGV2LnRhcmdldC50YWdOYW1lID09PSAnRElWJyk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGZpbHRlcn1cbiAqIEBzZWUge0BsaW5rIGZpbmR9XG4gKiBAc2VlIHtAbGluayBmaXJzdH1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogYm9vbGVhbn0gcHJlZGljYXRlXG4gKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIGVhY2ggaXRlbSB0byB0ZXN0IGZvciBjb25kaXRpb24gbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge2FueX0gW3RoaXNBcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgYHRoaXNgXG4gKiBpbiB0aGUgYHByZWRpY2F0ZWAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbSB0aGF0XG4gKiBtYXRjaGVzIHRoZSBjb25kaXRpb24uXG4gKiBAbWV0aG9kIGZpbmRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZmluZEluZGV4XzEuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZykodGhpcyk7XG59XG5leHBvcnRzLmZpbmRJbmRleCA9IGZpbmRJbmRleDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbmRJbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBmaXJzdF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2ZpcnN0Jyk7XG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGZpcnN0IHZhbHVlIChvciB0aGUgZmlyc3QgdmFsdWUgdGhhdCBtZWV0cyBzb21lIGNvbmRpdGlvbilcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbWl0cyBvbmx5IHRoZSBmaXJzdCB2YWx1ZS4gT3IgZW1pdHMgb25seSB0aGUgZmlyc3RcbiAqIHZhbHVlIHRoYXQgcGFzc2VzIHNvbWUgdGVzdC48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9maXJzdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMsIGBmaXJzdGAgZW1pdHMgdGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIHRoZW4gY29tcGxldGVzLiBJZiBjYWxsZWQgd2l0aCBhIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLCBgZmlyc3RgXG4gKiBlbWl0cyB0aGUgZmlyc3QgdmFsdWUgb2YgdGhlIHNvdXJjZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjb25kaXRpb24uIEl0XG4gKiBtYXkgYWxzbyB0YWtlIGEgYHJlc3VsdFNlbGVjdG9yYCBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSBvdXRwdXQgdmFsdWUgZnJvbVxuICogdGhlIGlucHV0IHZhbHVlLCBhbmQgYSBgZGVmYXVsdFZhbHVlYCB0byBlbWl0IGluIGNhc2UgdGhlIHNvdXJjZSBjb21wbGV0ZXNcbiAqIGJlZm9yZSBpdCBpcyBhYmxlIHRvIGVtaXQgYSB2YWxpZCB2YWx1ZS4gVGhyb3dzIGFuIGVycm9yIGlmIGBkZWZhdWx0VmFsdWVgXG4gKiB3YXMgbm90IHByb3ZpZGVkIGFuZCBhIG1hdGNoaW5nIGVsZW1lbnQgaXMgbm90IGZvdW5kLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgb25seSB0aGUgZmlyc3QgY2xpY2sgdGhhdCBoYXBwZW5zIG9uIHRoZSBET008L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5maXJzdCgpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0cyB0aGUgZmlyc3QgY2xpY2sgdGhhdCBoYXBwZW5zIG9uIGEgRElWPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3MuZmlyc3QoZXYgPT4gZXYudGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgZmlsdGVyfVxuICogQHNlZSB7QGxpbmsgZmluZH1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHRocm93cyB7RW1wdHlFcnJvcn0gRGVsaXZlcnMgYW4gRW1wdHlFcnJvciB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgXG4gKiBjYWxsYmFjayBpZiB0aGUgT2JzZXJ2YWJsZSBjb21wbGV0ZXMgYmVmb3JlIGFueSBgbmV4dGAgbm90aWZpY2F0aW9uIHdhcyBzZW50LlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPik6IGJvb2xlYW59IFtwcmVkaWNhdGVdXG4gKiBBbiBvcHRpb25hbCBmdW5jdGlvbiBjYWxsZWQgd2l0aCBlYWNoIGl0ZW0gdG8gdGVzdCBmb3IgY29uZGl0aW9uIG1hdGNoaW5nLlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IFJ9IFtyZXN1bHRTZWxlY3Rvcl0gQSBmdW5jdGlvbiB0b1xuICogcHJvZHVjZSB0aGUgdmFsdWUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZXNcbiAqIGFuZCB0aGUgaW5kaWNlcyBvZiB0aGUgc291cmNlIE9ic2VydmFibGUuIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXNcbiAqIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYHZhbHVlYDogdGhlIHZhbHVlIHRoYXQgd2FzIGVtaXR0ZWQgb24gdGhlIHNvdXJjZS5cbiAqIC0gYGluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgc291cmNlLlxuICogQHBhcmFtIHtSfSBbZGVmYXVsdFZhbHVlXSBUaGUgZGVmYXVsdCB2YWx1ZSBlbWl0dGVkIGluIGNhc2Ugbm8gdmFsaWQgdmFsdWVcbiAqIHdhcyBmb3VuZCBvbiB0aGUgc291cmNlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUfFI+fSBBbiBPYnNlcnZhYmxlIG9mIHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGVcbiAqIGNvbmRpdGlvbi5cbiAqIEBtZXRob2QgZmlyc3RcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGZpcnN0KHByZWRpY2F0ZSwgcmVzdWx0U2VsZWN0b3IsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBmaXJzdF8xLmZpcnN0KHByZWRpY2F0ZSwgcmVzdWx0U2VsZWN0b3IsIGRlZmF1bHRWYWx1ZSkodGhpcyk7XG59XG5leHBvcnRzLmZpcnN0ID0gZmlyc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maXJzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBncm91cEJ5XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvZ3JvdXBCeScpO1xuZXhwb3J0cy5Hcm91cGVkT2JzZXJ2YWJsZSA9IGdyb3VwQnlfMS5Hcm91cGVkT2JzZXJ2YWJsZTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIEdyb3VwcyB0aGUgaXRlbXMgZW1pdHRlZCBieSBhbiBPYnNlcnZhYmxlIGFjY29yZGluZyB0byBhIHNwZWNpZmllZCBjcml0ZXJpb24sXG4gKiBhbmQgZW1pdHMgdGhlc2UgZ3JvdXBlZCBpdGVtcyBhcyBgR3JvdXBlZE9ic2VydmFibGVzYCwgb25lXG4gKiB7QGxpbmsgR3JvdXBlZE9ic2VydmFibGV9IHBlciBncm91cC5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2dyb3VwQnkucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+R3JvdXAgb2JqZWN0cyBieSBpZCBhbmQgcmV0dXJuIGFzIGFycmF5PC9jYXB0aW9uPlxuICogT2JzZXJ2YWJsZS5vZjxPYmo+KHtpZDogMSwgbmFtZTogJ2F6ZTEnfSxcbiAqICAgICAgICAgICAgICAgICAgICB7aWQ6IDIsIG5hbWU6ICdzZjInfSxcbiAqICAgICAgICAgICAgICAgICAgICB7aWQ6IDIsIG5hbWU6ICdkZzInfSxcbiAqICAgICAgICAgICAgICAgICAgICB7aWQ6IDEsIG5hbWU6ICdlcmcxJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAxLCBuYW1lOiAnZGYxJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAyLCBuYW1lOiAnc2ZxZmIyJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAzLCBuYW1lOiAncWZzMyd9LFxuICogICAgICAgICAgICAgICAgICAgIHtpZDogMiwgbmFtZTogJ3FzZ3FzZmcyJ31cbiAqICAgICApXG4gKiAgICAgLmdyb3VwQnkocCA9PiBwLmlkKVxuICogICAgIC5mbGF0TWFwKCAoZ3JvdXAkKSA9PiBncm91cCQucmVkdWNlKChhY2MsIGN1cikgPT4gWy4uLmFjYywgY3VyXSwgW10pKVxuICogICAgIC5zdWJzY3JpYmUocCA9PiBjb25zb2xlLmxvZyhwKSk7XG4gKlxuICogLy8gZGlzcGxheXM6XG4gKiAvLyBbIHsgaWQ6IDEsIG5hbWU6ICdhemUxJyB9LFxuICogLy8gICB7IGlkOiAxLCBuYW1lOiAnZXJnMScgfSxcbiAqIC8vICAgeyBpZDogMSwgbmFtZTogJ2RmMScgfSBdXG4gKiAvL1xuICogLy8gWyB7IGlkOiAyLCBuYW1lOiAnc2YyJyB9LFxuICogLy8gICB7IGlkOiAyLCBuYW1lOiAnZGcyJyB9LFxuICogLy8gICB7IGlkOiAyLCBuYW1lOiAnc2ZxZmIyJyB9LFxuICogLy8gICB7IGlkOiAyLCBuYW1lOiAncXNncXNmZzInIH0gXVxuICogLy9cbiAqIC8vIFsgeyBpZDogMywgbmFtZTogJ3FmczMnIH0gXVxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlBpdm90IGRhdGEgb24gdGhlIGlkIGZpZWxkPC9jYXB0aW9uPlxuICogT2JzZXJ2YWJsZS5vZjxPYmo+KHtpZDogMSwgbmFtZTogJ2F6ZTEnfSxcbiAqICAgICAgICAgICAgICAgICAgICB7aWQ6IDIsIG5hbWU6ICdzZjInfSxcbiAqICAgICAgICAgICAgICAgICAgICB7aWQ6IDIsIG5hbWU6ICdkZzInfSxcbiAqICAgICAgICAgICAgICAgICAgICB7aWQ6IDEsIG5hbWU6ICdlcmcxJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAxLCBuYW1lOiAnZGYxJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAyLCBuYW1lOiAnc2ZxZmIyJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAzLCBuYW1lOiAncWZzMSd9LFxuICogICAgICAgICAgICAgICAgICAgIHtpZDogMiwgbmFtZTogJ3FzZ3FzZmcyJ31cbiAqICAgICAgICAgICAgICAgICAgIClcbiAqICAgICAuZ3JvdXBCeShwID0+IHAuaWQsIHAgPT4gcC5uYW1lKVxuICogICAgIC5mbGF0TWFwKCAoZ3JvdXAkKSA9PiBncm91cCQucmVkdWNlKChhY2MsIGN1cikgPT4gWy4uLmFjYywgY3VyXSwgW1wiXCIgKyBncm91cCQua2V5XSkpXG4gKiAgICAgLm1hcChhcnIgPT4gKHsnaWQnOiBwYXJzZUludChhcnJbMF0pLCAndmFsdWVzJzogYXJyLnNsaWNlKDEpfSkpXG4gKiAgICAgLnN1YnNjcmliZShwID0+IGNvbnNvbGUubG9nKHApKTtcbiAqXG4gKiAvLyBkaXNwbGF5czpcbiAqIC8vIHsgaWQ6IDEsIHZhbHVlczogWyAnYXplMScsICdlcmcxJywgJ2RmMScgXSB9XG4gKiAvLyB7IGlkOiAyLCB2YWx1ZXM6IFsgJ3NmMicsICdkZzInLCAnc2ZxZmIyJywgJ3FzZ3FzZmcyJyBdIH1cbiAqIC8vIHsgaWQ6IDMsIHZhbHVlczogWyAncWZzMScgXSB9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCk6IEt9IGtleVNlbGVjdG9yIEEgZnVuY3Rpb24gdGhhdCBleHRyYWN0cyB0aGUga2V5XG4gKiBmb3IgZWFjaCBpdGVtLlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCk6IFJ9IFtlbGVtZW50U2VsZWN0b3JdIEEgZnVuY3Rpb24gdGhhdCBleHRyYWN0cyB0aGVcbiAqIHJldHVybiBlbGVtZW50IGZvciBlYWNoIGl0ZW0uXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGdyb3VwZWQ6IEdyb3VwZWRPYnNlcnZhYmxlPEssUj4pOiBPYnNlcnZhYmxlPGFueT59IFtkdXJhdGlvblNlbGVjdG9yXVxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0byBkZXRlcm1pbmUgaG93IGxvbmcgZWFjaCBncm91cCBzaG91bGRcbiAqIGV4aXN0LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxHcm91cGVkT2JzZXJ2YWJsZTxLLFI+Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzXG4gKiBHcm91cGVkT2JzZXJ2YWJsZXMsIGVhY2ggb2Ygd2hpY2ggY29ycmVzcG9uZHMgdG8gYSB1bmlxdWUga2V5IHZhbHVlIGFuZCBlYWNoXG4gKiBvZiB3aGljaCBlbWl0cyB0aG9zZSBpdGVtcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0IHNoYXJlIHRoYXQga2V5XG4gKiB2YWx1ZS5cbiAqIEBtZXRob2QgZ3JvdXBCeVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gZ3JvdXBCeShrZXlTZWxlY3RvciwgZWxlbWVudFNlbGVjdG9yLCBkdXJhdGlvblNlbGVjdG9yLCBzdWJqZWN0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZ3JvdXBCeV8xLmdyb3VwQnkoa2V5U2VsZWN0b3IsIGVsZW1lbnRTZWxlY3RvciwgZHVyYXRpb25TZWxlY3Rvciwgc3ViamVjdFNlbGVjdG9yKSh0aGlzKTtcbn1cbmV4cG9ydHMuZ3JvdXBCeSA9IGdyb3VwQnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncm91cEJ5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGlnbm9yZUVsZW1lbnRzXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvaWdub3JlRWxlbWVudHMnKTtcbi8qKlxuICogSWdub3JlcyBhbGwgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIG9ubHkgcGFzc2VzIGNhbGxzIG9mIGBjb21wbGV0ZWAgb3IgYGVycm9yYC5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2lnbm9yZUVsZW1lbnRzLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIGVtcHR5IE9ic2VydmFibGUgdGhhdCBvbmx5IGNhbGxzIGBjb21wbGV0ZWBcbiAqIG9yIGBlcnJvcmAsIGJhc2VkIG9uIHdoaWNoIG9uZSBpcyBjYWxsZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBpZ25vcmVFbGVtZW50c1xuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gaWdub3JlRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIGlnbm9yZUVsZW1lbnRzXzEuaWdub3JlRWxlbWVudHMoKSh0aGlzKTtcbn1cbmV4cG9ydHMuaWdub3JlRWxlbWVudHMgPSBpZ25vcmVFbGVtZW50cztcbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlnbm9yZUVsZW1lbnRzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGlzRW1wdHlfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9pc0VtcHR5Jyk7XG4vKipcbiAqIElmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBpcyBlbXB0eSBpdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0cnVlLCBvdGhlcndpc2UgaXQgZW1pdHMgZmFsc2UuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9pc0VtcHR5LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIEJvb2xlYW4uXG4gKiBAbWV0aG9kIGlzRW1wdHlcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIGlzRW1wdHlfMS5pc0VtcHR5KCkodGhpcyk7XG59XG5leHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNFbXB0eS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBsYXN0XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvbGFzdCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgb25seSB0aGUgbGFzdCBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogSXQgb3B0aW9uYWxseSB0YWtlcyBhIHByZWRpY2F0ZSBmdW5jdGlvbiBhcyBhIHBhcmFtZXRlciwgaW4gd2hpY2ggY2FzZSwgcmF0aGVyIHRoYW4gZW1pdHRpbmdcbiAqIHRoZSBsYXN0IGl0ZW0gZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIHRoZSByZXN1bHRpbmcgT2JzZXJ2YWJsZSB3aWxsIGVtaXQgdGhlIGxhc3QgaXRlbVxuICogZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHByZWRpY2F0ZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2xhc3QucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQHRocm93cyB7RW1wdHlFcnJvcn0gRGVsaXZlcnMgYW4gRW1wdHlFcnJvciB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgXG4gKiBjYWxsYmFjayBpZiB0aGUgT2JzZXJ2YWJsZSBjb21wbGV0ZXMgYmVmb3JlIGFueSBgbmV4dGAgbm90aWZpY2F0aW9uIHdhcyBzZW50LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gcHJlZGljYXRlIC0gVGhlIGNvbmRpdGlvbiBhbnkgc291cmNlIGVtaXR0ZWQgaXRlbSBoYXMgdG8gc2F0aXNmeS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBvbmx5IHRoZSBsYXN0IGl0ZW0gc2F0aXNmeWluZyB0aGUgZ2l2ZW4gY29uZGl0aW9uXG4gKiBmcm9tIHRoZSBzb3VyY2UsIG9yIGFuIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gaWYgbm8gc3VjaCBpdGVtcyBhcmUgZW1pdHRlZC5cbiAqIEB0aHJvd3MgLSBUaHJvd3MgaWYgbm8gaXRlbXMgdGhhdCBtYXRjaCB0aGUgcHJlZGljYXRlIGFyZSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2QgbGFzdFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbGFzdChwcmVkaWNhdGUsIHJlc3VsdFNlbGVjdG9yLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbGFzdF8xLmxhc3QocHJlZGljYXRlLCByZXN1bHRTZWxlY3RvciwgZGVmYXVsdFZhbHVlKSh0aGlzKTtcbn1cbmV4cG9ydHMubGFzdCA9IGxhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAcGFyYW0gZnVuY1xuICogQHJldHVybiB7T2JzZXJ2YWJsZTxSPn1cbiAqIEBtZXRob2QgbGV0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBsZXRQcm90byhmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmModGhpcyk7XG59XG5leHBvcnRzLmxldFByb3RvID0gbGV0UHJvdG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sZXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbWFwXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvbWFwJyk7XG4vKipcbiAqIEFwcGxpZXMgYSBnaXZlbiBgcHJvamVjdGAgZnVuY3Rpb24gdG8gZWFjaCB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIGFuZCBlbWl0cyB0aGUgcmVzdWx0aW5nIHZhbHVlcyBhcyBhbiBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5MaWtlIFtBcnJheS5wcm90b3R5cGUubWFwKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcCksXG4gKiBpdCBwYXNzZXMgZWFjaCBzb3VyY2UgdmFsdWUgdGhyb3VnaCBhIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHRvIGdldFxuICogY29ycmVzcG9uZGluZyBvdXRwdXQgdmFsdWVzLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21hcC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBTaW1pbGFyIHRvIHRoZSB3ZWxsIGtub3duIGBBcnJheS5wcm90b3R5cGUubWFwYCBmdW5jdGlvbiwgdGhpcyBvcGVyYXRvclxuICogYXBwbGllcyBhIHByb2plY3Rpb24gdG8gZWFjaCB2YWx1ZSBhbmQgZW1pdHMgdGhhdCBwcm9qZWN0aW9uIGluIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWFwIGV2ZXJ5IGNsaWNrIHRvIHRoZSBjbGllbnRYIHBvc2l0aW9uIG9mIHRoYXQgY2xpY2s8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHBvc2l0aW9ucyA9IGNsaWNrcy5tYXAoZXYgPT4gZXYuY2xpZW50WCk7XG4gKiBwb3NpdGlvbnMuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIG1hcFRvfVxuICogQHNlZSB7QGxpbmsgcGx1Y2t9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IFJ9IHByb2plY3QgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5XG4gKiB0byBlYWNoIGB2YWx1ZWAgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuIFRoZSBgaW5kZXhgIHBhcmFtZXRlciBpc1xuICogdGhlIG51bWJlciBgaWAgZm9yIHRoZSBpLXRoIGVtaXNzaW9uIHRoYXQgaGFzIGhhcHBlbmVkIHNpbmNlIHRoZVxuICogc3Vic2NyaXB0aW9uLCBzdGFydGluZyBmcm9tIHRoZSBudW1iZXIgYDBgLlxuICogQHBhcmFtIHthbnl9IFt0aGlzQXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBkZWZpbmUgd2hhdCBgdGhpc2AgaXMgaW4gdGhlXG4gKiBgcHJvamVjdGAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFI+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgdHJhbnNmb3JtZWQgYnkgdGhlIGdpdmVuIGBwcm9qZWN0YCBmdW5jdGlvbi5cbiAqIEBtZXRob2QgbWFwXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtYXAocHJvamVjdCwgdGhpc0FyZykge1xuICAgIHJldHVybiBtYXBfMS5tYXAocHJvamVjdCwgdGhpc0FyZykodGhpcyk7XG59XG5leHBvcnRzLm1hcCA9IG1hcDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBtYXBUb18xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL21hcFRvJyk7XG4vKipcbiAqIEVtaXRzIHRoZSBnaXZlbiBjb25zdGFudCB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgZXZlcnkgdGltZSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkxpa2Uge0BsaW5rIG1hcH0sIGJ1dCBpdCBtYXBzIGV2ZXJ5IHNvdXJjZSB2YWx1ZSB0b1xuICogdGhlIHNhbWUgb3V0cHV0IHZhbHVlIGV2ZXJ5IHRpbWUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbWFwVG8ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogVGFrZXMgYSBjb25zdGFudCBgdmFsdWVgIGFzIGFyZ3VtZW50LCBhbmQgZW1pdHMgdGhhdCB3aGVuZXZlciB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUuIEluIG90aGVyIHdvcmRzLCBpZ25vcmVzIHRoZSBhY3R1YWwgc291cmNlIHZhbHVlLFxuICogYW5kIHNpbXBseSB1c2VzIHRoZSBlbWlzc2lvbiBtb21lbnQgdG8ga25vdyB3aGVuIHRvIGVtaXQgdGhlIGdpdmVuIGB2YWx1ZWAuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWFwIGV2ZXJ5IGNsaWNrIHRvIHRoZSBzdHJpbmcgJ0hpJzwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgZ3JlZXRpbmdzID0gY2xpY2tzLm1hcFRvKCdIaScpO1xuICogZ3JlZXRpbmdzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBtYXB9XG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBtYXAgZWFjaCBzb3VyY2UgdmFsdWUgdG8uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGdpdmVuIGB2YWx1ZWAgZXZlcnkgdGltZVxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGVtaXRzIHNvbWV0aGluZy5cbiAqIEBtZXRob2QgbWFwVG9cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIG1hcFRvKHZhbHVlKSB7XG4gICAgcmV0dXJuIG1hcFRvXzEubWFwVG8odmFsdWUpKHRoaXMpO1xufVxuZXhwb3J0cy5tYXBUbyA9IG1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbWF0ZXJpYWxpemVfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9tYXRlcmlhbGl6ZScpO1xuLyoqXG4gKiBSZXByZXNlbnRzIGFsbCBvZiB0aGUgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyBgbmV4dGBcbiAqIGVtaXNzaW9ucyBtYXJrZWQgd2l0aCB0aGVpciBvcmlnaW5hbCB0eXBlcyB3aXRoaW4ge0BsaW5rIE5vdGlmaWNhdGlvbn1cbiAqIG9iamVjdHMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPldyYXBzIGBuZXh0YCwgYGVycm9yYCBhbmQgYGNvbXBsZXRlYCBlbWlzc2lvbnMgaW5cbiAqIHtAbGluayBOb3RpZmljYXRpb259IG9iamVjdHMsIGVtaXR0ZWQgYXMgYG5leHRgIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqIDwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21hdGVyaWFsaXplLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBtYXRlcmlhbGl6ZWAgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYSBgbmV4dGAgbm90aWZpY2F0aW9uIGZvciBlYWNoXG4gKiBgbmV4dGAsIGBlcnJvcmAsIG9yIGBjb21wbGV0ZWAgZW1pc3Npb24gb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBXaGVuIHRoZVxuICogc291cmNlIE9ic2VydmFibGUgZW1pdHMgYGNvbXBsZXRlYCwgdGhlIG91dHB1dCBPYnNlcnZhYmxlIHdpbGwgZW1pdCBgbmV4dGAgYXNcbiAqIGEgTm90aWZpY2F0aW9uIG9mIHR5cGUgXCJjb21wbGV0ZVwiLCBhbmQgdGhlbiBpdCB3aWxsIGVtaXQgYGNvbXBsZXRlYCBhcyB3ZWxsLlxuICogV2hlbiB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHMgYGVycm9yYCwgdGhlIG91dHB1dCB3aWxsIGVtaXQgYG5leHRgIGFzIGFcbiAqIE5vdGlmaWNhdGlvbiBvZiB0eXBlIFwiZXJyb3JcIiwgYW5kIHRoZW4gYGNvbXBsZXRlYC5cbiAqXG4gKiBUaGlzIG9wZXJhdG9yIGlzIHVzZWZ1bCBmb3IgcHJvZHVjaW5nIG1ldGFkYXRhIG9mIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdG9cbiAqIGJlIGNvbnN1bWVkIGFzIGBuZXh0YCBlbWlzc2lvbnMuIFVzZSBpdCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gKiB7QGxpbmsgZGVtYXRlcmlhbGl6ZX0uXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q29udmVydCBhIGZhdWx0eSBPYnNlcnZhYmxlIHRvIGFuIE9ic2VydmFibGUgb2YgTm90aWZpY2F0aW9uczwvY2FwdGlvbj5cbiAqIHZhciBsZXR0ZXJzID0gUnguT2JzZXJ2YWJsZS5vZignYScsICdiJywgMTMsICdkJyk7XG4gKiB2YXIgdXBwZXJDYXNlID0gbGV0dGVycy5tYXAoeCA9PiB4LnRvVXBwZXJDYXNlKCkpO1xuICogdmFyIG1hdGVyaWFsaXplZCA9IHVwcGVyQ2FzZS5tYXRlcmlhbGl6ZSgpO1xuICogbWF0ZXJpYWxpemVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAtIE5vdGlmaWNhdGlvbiB7a2luZDogXCJOXCIsIHZhbHVlOiBcIkFcIiwgZXJyb3I6IHVuZGVmaW5lZCwgaGFzVmFsdWU6IHRydWV9XG4gKiAvLyAtIE5vdGlmaWNhdGlvbiB7a2luZDogXCJOXCIsIHZhbHVlOiBcIkJcIiwgZXJyb3I6IHVuZGVmaW5lZCwgaGFzVmFsdWU6IHRydWV9XG4gKiAvLyAtIE5vdGlmaWNhdGlvbiB7a2luZDogXCJFXCIsIHZhbHVlOiB1bmRlZmluZWQsIGVycm9yOiBUeXBlRXJyb3I6XG4gKiAvLyAgIHgudG9VcHBlckNhc2UgaXMgbm90IGEgZnVuY3Rpb24gYXQgTWFwU3Vic2NyaWJlci5sZXR0ZXJzLm1hcC54XG4gKiAvLyAgIFthcyBwcm9qZWN0XSAoaHR0cDovLzHigKYsIGhhc1ZhbHVlOiBmYWxzZX1cbiAqXG4gKiBAc2VlIHtAbGluayBOb3RpZmljYXRpb259XG4gKiBAc2VlIHtAbGluayBkZW1hdGVyaWFsaXplfVxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGU8Tm90aWZpY2F0aW9uPFQ+Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzXG4gKiB7QGxpbmsgTm90aWZpY2F0aW9ufSBvYmplY3RzIHRoYXQgd3JhcCB0aGUgb3JpZ2luYWwgZW1pc3Npb25zIGZyb20gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSB3aXRoIG1ldGFkYXRhLlxuICogQG1ldGhvZCBtYXRlcmlhbGl6ZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbWF0ZXJpYWxpemUoKSB7XG4gICAgcmV0dXJuIG1hdGVyaWFsaXplXzEubWF0ZXJpYWxpemUoKSh0aGlzKTtcbn1cbmV4cG9ydHMubWF0ZXJpYWxpemUgPSBtYXRlcmlhbGl6ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hdGVyaWFsaXplLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIG1heF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL21heCcpO1xuLyoqXG4gKiBUaGUgTWF4IG9wZXJhdG9yIG9wZXJhdGVzIG9uIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBudW1iZXJzIChvciBpdGVtcyB0aGF0IGNhbiBiZSBjb21wYXJlZCB3aXRoIGEgcHJvdmlkZWQgZnVuY3Rpb24pLFxuICogYW5kIHdoZW4gc291cmNlIE9ic2VydmFibGUgY29tcGxldGVzIGl0IGVtaXRzIGEgc2luZ2xlIGl0ZW06IHRoZSBpdGVtIHdpdGggdGhlIGxhcmdlc3QgdmFsdWUuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9tYXgucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+R2V0IHRoZSBtYXhpbWFsIHZhbHVlIG9mIGEgc2VyaWVzIG9mIG51bWJlcnM8L2NhcHRpb24+XG4gKiBSeC5PYnNlcnZhYmxlLm9mKDUsIDQsIDcsIDIsIDgpXG4gKiAgIC5tYXgoKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpOyAvLyAtPiA4XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIGEgY29tcGFyZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBtYXhpbWFsIGl0ZW08L2NhcHRpb24+XG4gKiBpbnRlcmZhY2UgUGVyc29uIHtcbiAqICAgYWdlOiBudW1iZXIsXG4gKiAgIG5hbWU6IHN0cmluZ1xuICogfVxuICogT2JzZXJ2YWJsZS5vZjxQZXJzb24+KHthZ2U6IDcsIG5hbWU6ICdGb28nfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICB7YWdlOiA1LCBuYW1lOiAnQmFyJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAge2FnZTogOSwgbmFtZTogJ0JlZXInfSlcbiAqICAgICAgICAgICAubWF4PFBlcnNvbj4oKGE6IFBlcnNvbiwgYjogUGVyc29uKSA9PiBhLmFnZSA8IGIuYWdlID8gLTEgOiAxKVxuICogICAgICAgICAgIC5zdWJzY3JpYmUoKHg6IFBlcnNvbikgPT4gY29uc29sZS5sb2coeC5uYW1lKSk7IC8vIC0+ICdCZWVyJ1xuICogfVxuICpcbiAqIEBzZWUge0BsaW5rIG1pbn1cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyZXJdIC0gT3B0aW9uYWwgY29tcGFyZXIgZnVuY3Rpb24gdGhhdCBpdCB3aWxsIHVzZSBpbnN0ZWFkIG9mIGl0cyBkZWZhdWx0IHRvIGNvbXBhcmUgdGhlXG4gKiB2YWx1ZSBvZiB0d28gaXRlbXMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbSB3aXRoIHRoZSBsYXJnZXN0IHZhbHVlLlxuICogQG1ldGhvZCBtYXhcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIG1heChjb21wYXJlcikge1xuICAgIHJldHVybiBtYXhfMS5tYXgoY29tcGFyZXIpKHRoaXMpO1xufVxuZXhwb3J0cy5tYXggPSBtYXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbWVyZ2VfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9tZXJnZScpO1xudmFyIG1lcmdlXzIgPSByZXF1aXJlKCcuLi9vYnNlcnZhYmxlL21lcmdlJyk7XG5leHBvcnRzLm1lcmdlU3RhdGljID0gbWVyZ2VfMi5tZXJnZTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIENyZWF0ZXMgYW4gb3V0cHV0IE9ic2VydmFibGUgd2hpY2ggY29uY3VycmVudGx5IGVtaXRzIGFsbCB2YWx1ZXMgZnJvbSBldmVyeVxuICogZ2l2ZW4gaW5wdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RmxhdHRlbnMgbXVsdGlwbGUgT2JzZXJ2YWJsZXMgdG9nZXRoZXIgYnkgYmxlbmRpbmdcbiAqIHRoZWlyIHZhbHVlcyBpbnRvIG9uZSBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21lcmdlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBtZXJnZWAgc3Vic2NyaWJlcyB0byBlYWNoIGdpdmVuIGlucHV0IE9ic2VydmFibGUgKGVpdGhlciB0aGUgc291cmNlIG9yIGFuXG4gKiBPYnNlcnZhYmxlIGdpdmVuIGFzIGFyZ3VtZW50KSwgYW5kIHNpbXBseSBmb3J3YXJkcyAod2l0aG91dCBkb2luZyBhbnlcbiAqIHRyYW5zZm9ybWF0aW9uKSBhbGwgdGhlIHZhbHVlcyBmcm9tIGFsbCB0aGUgaW5wdXQgT2JzZXJ2YWJsZXMgdG8gdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZS4gVGhlIG91dHB1dCBPYnNlcnZhYmxlIG9ubHkgY29tcGxldGVzIG9uY2UgYWxsIGlucHV0IE9ic2VydmFibGVzXG4gKiBoYXZlIGNvbXBsZXRlZC4gQW55IGVycm9yIGRlbGl2ZXJlZCBieSBhbiBpbnB1dCBPYnNlcnZhYmxlIHdpbGwgYmUgaW1tZWRpYXRlbHlcbiAqIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPk1lcmdlIHRvZ2V0aGVyIHR3byBPYnNlcnZhYmxlczogMXMgaW50ZXJ2YWwgYW5kIGNsaWNrczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgdGltZXIgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICogdmFyIGNsaWNrc09yVGltZXIgPSBjbGlja3MubWVyZ2UodGltZXIpO1xuICogY2xpY2tzT3JUaW1lci5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWVyZ2UgdG9nZXRoZXIgMyBPYnNlcnZhYmxlcywgYnV0IG9ubHkgMiBydW4gY29uY3VycmVudGx5PC9jYXB0aW9uPlxuICogdmFyIHRpbWVyMSA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSgxMCk7XG4gKiB2YXIgdGltZXIyID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgyMDAwKS50YWtlKDYpO1xuICogdmFyIHRpbWVyMyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoNTAwKS50YWtlKDEwKTtcbiAqIHZhciBjb25jdXJyZW50ID0gMjsgLy8gdGhlIGFyZ3VtZW50XG4gKiB2YXIgbWVyZ2VkID0gdGltZXIxLm1lcmdlKHRpbWVyMiwgdGltZXIzLCBjb25jdXJyZW50KTtcbiAqIG1lcmdlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwVG99XG4gKiBAc2VlIHtAbGluayBtZXJnZVNjYW59XG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlSW5wdXR9IG90aGVyIEFuIGlucHV0IE9ic2VydmFibGUgdG8gbWVyZ2Ugd2l0aCB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBNb3JlIHRoYW4gb25lIGlucHV0IE9ic2VydmFibGVzIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVudD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFldIE1heGltdW0gbnVtYmVyIG9mIGlucHV0XG4gKiBPYnNlcnZhYmxlcyBiZWluZyBzdWJzY3JpYmVkIHRvIGNvbmN1cnJlbnRseS5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyPW51bGxdIFRoZSBJU2NoZWR1bGVyIHRvIHVzZSBmb3IgbWFuYWdpbmdcbiAqIGNvbmN1cnJlbmN5IG9mIGlucHV0IE9ic2VydmFibGVzLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIHRoYXQgYXJlIHRoZSByZXN1bHQgb2ZcbiAqIGV2ZXJ5IGlucHV0IE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIG1lcmdlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtZXJnZSgpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlXzEubWVyZ2UuYXBwbHkodm9pZCAwLCBvYnNlcnZhYmxlcykodGhpcyk7XG59XG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBtZXJnZUFsbF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL21lcmdlQWxsJyk7XG4vKipcbiAqIENvbnZlcnRzIGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUgaW50byBhIGZpcnN0LW9yZGVyIE9ic2VydmFibGUgd2hpY2hcbiAqIGNvbmN1cnJlbnRseSBkZWxpdmVycyBhbGwgdmFsdWVzIHRoYXQgYXJlIGVtaXR0ZWQgb24gdGhlIGlubmVyIE9ic2VydmFibGVzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GbGF0dGVucyBhbiBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21lcmdlQWxsLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBtZXJnZUFsbGAgc3Vic2NyaWJlcyB0byBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgT2JzZXJ2YWJsZXMsIGFsc28ga25vd24gYXNcbiAqIGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUuIEVhY2ggdGltZSBpdCBvYnNlcnZlcyBvbmUgb2YgdGhlc2UgZW1pdHRlZCBpbm5lclxuICogT2JzZXJ2YWJsZXMsIGl0IHN1YnNjcmliZXMgdG8gdGhhdCBhbmQgZGVsaXZlcnMgYWxsIHRoZSB2YWx1ZXMgZnJvbSB0aGVcbiAqIGlubmVyIE9ic2VydmFibGUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGUgb25seVxuICogY29tcGxldGVzIG9uY2UgYWxsIGlubmVyIE9ic2VydmFibGVzIGhhdmUgY29tcGxldGVkLiBBbnkgZXJyb3IgZGVsaXZlcmVkIGJ5XG4gKiBhIGlubmVyIE9ic2VydmFibGUgd2lsbCBiZSBpbW1lZGlhdGVseSBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5TcGF3biBhIG5ldyBpbnRlcnZhbCBPYnNlcnZhYmxlIGZvciBlYWNoIGNsaWNrIGV2ZW50LCBhbmQgYmxlbmQgdGhlaXIgb3V0cHV0cyBhcyBvbmUgT2JzZXJ2YWJsZTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgaGlnaGVyT3JkZXIgPSBjbGlja3MubWFwKChldikgPT4gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKSk7XG4gKiB2YXIgZmlyc3RPcmRlciA9IGhpZ2hlck9yZGVyLm1lcmdlQWxsKCk7XG4gKiBmaXJzdE9yZGVyLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db3VudCBmcm9tIDAgdG8gOSBldmVyeSBzZWNvbmQgZm9yIGVhY2ggY2xpY2ssIGJ1dCBvbmx5IGFsbG93IDIgY29uY3VycmVudCB0aW1lcnM8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGhpZ2hlck9yZGVyID0gY2xpY2tzLm1hcCgoZXYpID0+IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSgxMCkpO1xuICogdmFyIGZpcnN0T3JkZXIgPSBoaWdoZXJPcmRlci5tZXJnZUFsbCgyKTtcbiAqIGZpcnN0T3JkZXIuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGNvbWJpbmVBbGx9XG4gKiBAc2VlIHtAbGluayBjb25jYXRBbGx9XG4gKiBAc2VlIHtAbGluayBleGhhdXN0fVxuICogQHNlZSB7QGxpbmsgbWVyZ2V9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwVG99XG4gKiBAc2VlIHtAbGluayBtZXJnZVNjYW59XG4gKiBAc2VlIHtAbGluayBzd2l0Y2h9XG4gKiBAc2VlIHtAbGluayB6aXBBbGx9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25jdXJyZW50PU51bWJlci5QT1NJVElWRV9JTkZJTklUWV0gTWF4aW11bSBudW1iZXIgb2YgaW5uZXJcbiAqIE9ic2VydmFibGVzIGJlaW5nIHN1YnNjcmliZWQgdG8gY29uY3VycmVudGx5LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHZhbHVlcyBjb21pbmcgZnJvbSBhbGwgdGhlXG4gKiBpbm5lciBPYnNlcnZhYmxlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2QgbWVyZ2VBbGxcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQWxsKGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICByZXR1cm4gbWVyZ2VBbGxfMS5tZXJnZUFsbChjb25jdXJyZW50KSh0aGlzKTtcbn1cbmV4cG9ydHMubWVyZ2VBbGwgPSBtZXJnZUFsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlQWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvbWVyZ2VNYXAnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFByb2plY3RzIGVhY2ggc291cmNlIHZhbHVlIHRvIGFuIE9ic2VydmFibGUgd2hpY2ggaXMgbWVyZ2VkIGluIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPk1hcHMgZWFjaCB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlLCB0aGVuIGZsYXR0ZW5zIGFsbCBvZlxuICogdGhlc2UgaW5uZXIgT2JzZXJ2YWJsZXMgdXNpbmcge0BsaW5rIG1lcmdlQWxsfS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9tZXJnZU1hcC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBiYXNlZCBvbiBhcHBseWluZyBhIGZ1bmN0aW9uIHRoYXQgeW91XG4gKiBzdXBwbHkgdG8gZWFjaCBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB3aGVyZSB0aGF0IGZ1bmN0aW9uXG4gKiByZXR1cm5zIGFuIE9ic2VydmFibGUsIGFuZCB0aGVuIG1lcmdpbmcgdGhvc2UgcmVzdWx0aW5nIE9ic2VydmFibGVzIGFuZFxuICogZW1pdHRpbmcgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXJnZXIuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWFwIGFuZCBmbGF0dGVuIGVhY2ggbGV0dGVyIHRvIGFuIE9ic2VydmFibGUgdGlja2luZyBldmVyeSAxIHNlY29uZDwvY2FwdGlvbj5cbiAqIHZhciBsZXR0ZXJzID0gUnguT2JzZXJ2YWJsZS5vZignYScsICdiJywgJ2MnKTtcbiAqIHZhciByZXN1bHQgPSBsZXR0ZXJzLm1lcmdlTWFwKHggPT5cbiAqICAgUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKS5tYXAoaSA9PiB4K2kpXG4gKiApO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyBhMFxuICogLy8gYjBcbiAqIC8vIGMwXG4gKiAvLyBhMVxuICogLy8gYjFcbiAqIC8vIGMxXG4gKiAvLyBjb250aW51ZXMgdG8gbGlzdCBhLGIsYyB3aXRoIHJlc3BlY3RpdmUgYXNjZW5kaW5nIGludGVnZXJzXG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwfVxuICogQHNlZSB7QGxpbmsgZXhoYXVzdE1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcFRvfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VTY2FufVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsID9pbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZUlucHV0fSBwcm9qZWN0IEEgZnVuY3Rpb25cbiAqIHRoYXQsIHdoZW4gYXBwbGllZCB0byBhbiBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCByZXR1cm5zIGFuXG4gKiBPYnNlcnZhYmxlLlxuICogQHBhcmFtIHtmdW5jdGlvbihvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBJLCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcik6IGFueX0gW3Jlc3VsdFNlbGVjdG9yXVxuICogQSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYmFzZWQgb24gdGhlIHZhbHVlc1xuICogYW5kIHRoZSBpbmRpY2VzIG9mIHRoZSBzb3VyY2UgKG91dGVyKSBlbWlzc2lvbiBhbmQgdGhlIGlubmVyIE9ic2VydmFibGVcbiAqIGVtaXNzaW9uLiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYG91dGVyVmFsdWVgOiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHNvdXJjZVxuICogLSBgaW5uZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIC0gYG91dGVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lckluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVudD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFldIE1heGltdW0gbnVtYmVyIG9mIGlucHV0XG4gKiBPYnNlcnZhYmxlcyBiZWluZyBzdWJzY3JpYmVkIHRvIGNvbmN1cnJlbnRseS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZVxuICogcHJvamVjdGlvbiBmdW5jdGlvbiAoYW5kIHRoZSBvcHRpb25hbCBgcmVzdWx0U2VsZWN0b3JgKSB0byBlYWNoIGl0ZW0gZW1pdHRlZFxuICogYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGFuZCBtZXJnaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBPYnNlcnZhYmxlcyBvYnRhaW5lZFxuICogZnJvbSB0aGlzIHRyYW5zZm9ybWF0aW9uLlxuICogQG1ldGhvZCBtZXJnZU1hcFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbWVyZ2VNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICByZXR1cm4gbWVyZ2VNYXBfMS5tZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkodGhpcyk7XG59XG5leHBvcnRzLm1lcmdlTWFwID0gbWVyZ2VNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZU1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBtZXJnZU1hcFRvXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvbWVyZ2VNYXBUbycpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUHJvamVjdHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gdGhlIHNhbWUgT2JzZXJ2YWJsZSB3aGljaCBpcyBtZXJnZWQgbXVsdGlwbGVcbiAqIHRpbWVzIGluIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBtZXJnZU1hcH0sIGJ1dCBtYXBzIGVhY2ggdmFsdWUgYWx3YXlzXG4gKiB0byB0aGUgc2FtZSBpbm5lciBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21lcmdlTWFwVG8ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogTWFwcyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgZ2l2ZW4gT2JzZXJ2YWJsZSBgaW5uZXJPYnNlcnZhYmxlYCByZWdhcmRsZXNzXG4gKiBvZiB0aGUgc291cmNlIHZhbHVlLCBhbmQgdGhlbiBtZXJnZXMgdGhvc2UgcmVzdWx0aW5nIE9ic2VydmFibGVzIGludG8gb25lXG4gKiBzaW5nbGUgT2JzZXJ2YWJsZSwgd2hpY2ggaXMgdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkZvciBlYWNoIGNsaWNrIGV2ZW50LCBzdGFydCBhbiBpbnRlcnZhbCBPYnNlcnZhYmxlIHRpY2tpbmcgZXZlcnkgMSBzZWNvbmQ8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5tZXJnZU1hcFRvKFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBjb25jYXRNYXBUb31cbiAqIEBzZWUge0BsaW5rIG1lcmdlfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcFRvfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBpbm5lck9ic2VydmFibGUgQW4gT2JzZXJ2YWJsZSB0byByZXBsYWNlIGVhY2ggdmFsdWUgZnJvbVxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHBhcmFtIHtmdW5jdGlvbihvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBJLCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcik6IGFueX0gW3Jlc3VsdFNlbGVjdG9yXVxuICogQSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYmFzZWQgb24gdGhlIHZhbHVlc1xuICogYW5kIHRoZSBpbmRpY2VzIG9mIHRoZSBzb3VyY2UgKG91dGVyKSBlbWlzc2lvbiBhbmQgdGhlIGlubmVyIE9ic2VydmFibGVcbiAqIGVtaXNzaW9uLiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYG91dGVyVmFsdWVgOiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHNvdXJjZVxuICogLSBgaW5uZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIC0gYG91dGVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lckluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVudD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFldIE1heGltdW0gbnVtYmVyIG9mIGlucHV0XG4gKiBPYnNlcnZhYmxlcyBiZWluZyBzdWJzY3JpYmVkIHRvIGNvbmN1cnJlbnRseS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBmcm9tIHRoZSBnaXZlblxuICogYGlubmVyT2JzZXJ2YWJsZWAgKGFuZCBvcHRpb25hbGx5IHRyYW5zZm9ybWVkIHRocm91Z2ggYHJlc3VsdFNlbGVjdG9yYCkgZXZlcnlcbiAqIHRpbWUgYSB2YWx1ZSBpcyBlbWl0dGVkIG9uIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2QgbWVyZ2VNYXBUb1xuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbWVyZ2VNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyB9XG4gICAgcmV0dXJuIG1lcmdlTWFwVG9fMS5tZXJnZU1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpKHRoaXMpO1xufVxuZXhwb3J0cy5tZXJnZU1hcFRvID0gbWVyZ2VNYXBUbztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlTWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbWVyZ2VTY2FuXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvbWVyZ2VTY2FuJyk7XG4vKipcbiAqIEFwcGxpZXMgYW4gYWNjdW11bGF0b3IgZnVuY3Rpb24gb3ZlciB0aGUgc291cmNlIE9ic2VydmFibGUgd2hlcmUgdGhlXG4gKiBhY2N1bXVsYXRvciBmdW5jdGlvbiBpdHNlbGYgcmV0dXJucyBhbiBPYnNlcnZhYmxlLCB0aGVuIGVhY2ggaW50ZXJtZWRpYXRlXG4gKiBPYnNlcnZhYmxlIHJldHVybmVkIGlzIG1lcmdlZCBpbnRvIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBzY2FufSwgYnV0IHRoZSBPYnNlcnZhYmxlcyByZXR1cm5lZFxuICogYnkgdGhlIGFjY3VtdWxhdG9yIGFyZSBtZXJnZWQgaW50byB0aGUgb3V0ZXIgT2JzZXJ2YWJsZS48L3NwYW4+XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q291bnQgdGhlIG51bWJlciBvZiBjbGljayBldmVudHM8L2NhcHRpb24+XG4gKiBjb25zdCBjbGljayQgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiBjb25zdCBvbmUkID0gY2xpY2skLm1hcFRvKDEpO1xuICogY29uc3Qgc2VlZCA9IDA7XG4gKiBjb25zdCBjb3VudCQgPSBvbmUkLm1lcmdlU2NhbigoYWNjLCBvbmUpID0+IFJ4Lk9ic2VydmFibGUub2YoYWNjICsgb25lKSwgc2VlZCk7XG4gKiBjb3VudCQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHM6XG4gKiAxXG4gKiAyXG4gKiAzXG4gKiA0XG4gKiAvLyAuLi5hbmQgc28gb24gZm9yIGVhY2ggY2xpY2tcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGFjYzogUiwgdmFsdWU6IFQpOiBPYnNlcnZhYmxlPFI+fSBhY2N1bXVsYXRvclxuICogVGhlIGFjY3VtdWxhdG9yIGZ1bmN0aW9uIGNhbGxlZCBvbiBlYWNoIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSBzZWVkIFRoZSBpbml0aWFsIGFjY3VtdWxhdGlvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVudD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFldIE1heGltdW0gbnVtYmVyIG9mXG4gKiBpbnB1dCBPYnNlcnZhYmxlcyBiZWluZyBzdWJzY3JpYmVkIHRvIGNvbmN1cnJlbnRseS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8Uj59IEFuIG9ic2VydmFibGUgb2YgdGhlIGFjY3VtdWxhdGVkIHZhbHVlcy5cbiAqIEBtZXRob2QgbWVyZ2VTY2FuXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtZXJnZVNjYW4oYWNjdW11bGF0b3IsIHNlZWQsIGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICByZXR1cm4gbWVyZ2VTY2FuXzEubWVyZ2VTY2FuKGFjY3VtdWxhdG9yLCBzZWVkLCBjb25jdXJyZW50KSh0aGlzKTtcbn1cbmV4cG9ydHMubWVyZ2VTY2FuID0gbWVyZ2VTY2FuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VTY2FuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIG1pbl8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL21pbicpO1xuLyoqXG4gKiBUaGUgTWluIG9wZXJhdG9yIG9wZXJhdGVzIG9uIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBudW1iZXJzIChvciBpdGVtcyB0aGF0IGNhbiBiZSBjb21wYXJlZCB3aXRoIGEgcHJvdmlkZWQgZnVuY3Rpb24pLFxuICogYW5kIHdoZW4gc291cmNlIE9ic2VydmFibGUgY29tcGxldGVzIGl0IGVtaXRzIGEgc2luZ2xlIGl0ZW06IHRoZSBpdGVtIHdpdGggdGhlIHNtYWxsZXN0IHZhbHVlLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbWluLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkdldCB0aGUgbWluaW1hbCB2YWx1ZSBvZiBhIHNlcmllcyBvZiBudW1iZXJzPC9jYXB0aW9uPlxuICogUnguT2JzZXJ2YWJsZS5vZig1LCA0LCA3LCAyLCA4KVxuICogICAubWluKClcbiAqICAgLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTsgLy8gLT4gMlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlVzZSBhIGNvbXBhcmVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgbWluaW1hbCBpdGVtPC9jYXB0aW9uPlxuICogaW50ZXJmYWNlIFBlcnNvbiB7XG4gKiAgIGFnZTogbnVtYmVyLFxuICogICBuYW1lOiBzdHJpbmdcbiAqIH1cbiAqIE9ic2VydmFibGUub2Y8UGVyc29uPih7YWdlOiA3LCBuYW1lOiAnRm9vJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAge2FnZTogNSwgbmFtZTogJ0Jhcid9LFxuICogICAgICAgICAgICAgICAgICAgICAgIHthZ2U6IDksIG5hbWU6ICdCZWVyJ30pXG4gKiAgICAgICAgICAgLm1pbjxQZXJzb24+KCAoYTogUGVyc29uLCBiOiBQZXJzb24pID0+IGEuYWdlIDwgYi5hZ2UgPyAtMSA6IDEpXG4gKiAgICAgICAgICAgLnN1YnNjcmliZSgoeDogUGVyc29uKSA9PiBjb25zb2xlLmxvZyh4Lm5hbWUpKTsgLy8gLT4gJ0JhcidcbiAqIH1cbiAqXG4gKiBAc2VlIHtAbGluayBtYXh9XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmVyXSAtIE9wdGlvbmFsIGNvbXBhcmVyIGZ1bmN0aW9uIHRoYXQgaXQgd2lsbCB1c2UgaW5zdGVhZCBvZiBpdHMgZGVmYXVsdCB0byBjb21wYXJlIHRoZVxuICogdmFsdWUgb2YgdHdvIGl0ZW1zLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxSPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW0gd2l0aCB0aGUgc21hbGxlc3QgdmFsdWUuXG4gKiBAbWV0aG9kIG1pblxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbWluKGNvbXBhcmVyKSB7XG4gICAgcmV0dXJuIG1pbl8xLm1pbihjb21wYXJlcikodGhpcyk7XG59XG5leHBvcnRzLm1pbiA9IG1pbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9tdWx0aWNhc3QnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIEFsbG93cyBzb3VyY2UgT2JzZXJ2YWJsZSB0byBiZSBzdWJzY3JpYmVkIG9ubHkgb25jZSB3aXRoIGEgU3ViamVjdCBvZiBjaG9pY2UsXG4gKiB3aGlsZSBzdGlsbCBzaGFyaW5nIGl0cyB2YWx1ZXMgYmV0d2VlbiBtdWx0aXBsZSBzdWJzY3JpYmVycy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+U3Vic2NyaWJlIHRvIE9ic2VydmFibGUgb25jZSwgYnV0IHNlbmQgaXRzIHZhbHVlcyB0byBtdWx0aXBsZSBzdWJzY3JpYmVycy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9tdWx0aWNhc3QucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYG11bHRpY2FzdGAgaXMgYW4gb3BlcmF0b3IgdGhhdCB3b3JrcyBpbiB0d28gbW9kZXMuXG4gKlxuICogSW4gdGhlIGZpcnN0IG1vZGUgeW91IHByb3ZpZGUgYSBzaW5nbGUgYXJndW1lbnQgdG8gaXQsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYW4gaW5pdGlhbGl6ZWQgU3ViamVjdCBvciBhIFN1YmplY3RcbiAqIGZhY3RvcnkuIEFzIGEgcmVzdWx0IHlvdSB3aWxsIGdldCBhIHNwZWNpYWwga2luZCBvZiBhbiBPYnNlcnZhYmxlIC0gYSB7QGxpbmsgQ29ubmVjdGFibGVPYnNlcnZhYmxlfS4gSXQgY2FuIGJlXG4gKiBzdWJzY3JpYmVkIG11bHRpcGxlIHRpbWVzLCBqdXN0IGFzIHJlZ3VsYXIgT2JzZXJ2YWJsZSwgYnV0IGl0IHdvbid0IHN1YnNjcmliZSB0byB0aGUgc291cmNlIE9ic2VydmFibGUgYXQgdGhhdFxuICogbW9tZW50LiBJdCB3aWxsIGRvIGl0IG9ubHkgaWYgeW91IGNhbGwgaXRzIGBjb25uZWN0YCBtZXRob2QuIFRoaXMgbWVhbnMgeW91IGNhbiBlc3NlbnRpYWxseSBjb250cm9sIGJ5IGhhbmQsIHdoZW5cbiAqIHNvdXJjZSBPYnNlcnZhYmxlIHdpbGwgYmUgYWN0dWFsbHkgc3Vic2NyaWJlZC4gV2hhdCBpcyBtb3JlLCBDb25uZWN0YWJsZU9ic2VydmFibGUgd2lsbCBzaGFyZSB0aGlzIG9uZSBzdWJzY3JpcHRpb25cbiAqIGJldHdlZW4gYWxsIG9mIGl0cyBzdWJzY3JpYmVycy4gVGhpcyBtZWFucyB0aGF0LCBmb3IgZXhhbXBsZSwgYGFqYXhgIE9ic2VydmFibGUgd2lsbCBvbmx5IHNlbmQgYSByZXF1ZXN0IG9uY2UsXG4gKiBldmVuIHRob3VnaCB1c3VhbGx5IGl0IHdvdWxkIHNlbmQgYSByZXF1ZXN0IHBlciBldmVyeSBzdWJzY3JpYmVyLiBTaW5jZSBpdCBzZW5kcyBhIHJlcXVlc3QgYXQgdGhlIG1vbWVudCBvZlxuICogc3Vic2NyaXB0aW9uLCBoZXJlIHJlcXVlc3Qgd291bGQgYmUgc2VudCB3aGVuIHRoZSBgY29ubmVjdGAgbWV0aG9kIG9mIGEgQ29ubmVjdGFibGVPYnNlcnZhYmxlIGlzIGNhbGxlZC5cbiAqXG4gKiBUaGUgbW9zdCBjb21tb24gcGF0dGVybiBvZiB1c2luZyBDb25uZWN0YWJsZU9ic2VydmFibGUgaXMgY2FsbGluZyBgY29ubmVjdGAgd2hlbiB0aGUgZmlyc3QgY29uc3VtZXIgc3Vic2NyaWJlcyxcbiAqIGtlZXBpbmcgdGhlIHN1YnNjcmlwdGlvbiBhbGl2ZSB3aGlsZSBzZXZlcmFsIGNvbnN1bWVycyBjb21lIGFuZCBnbyBhbmQgZmluYWxseSB1bnN1YnNjcmliaW5nIGZyb20gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSwgd2hlbiB0aGUgbGFzdCBjb25zdW1lciB1bnN1YnNjcmliZXMuIFRvIG5vdCBpbXBsZW1lbnQgdGhhdCBsb2dpYyBvdmVyIGFuZCBvdmVyIGFnYWluLFxuICogQ29ubmVjdGFibGVPYnNlcnZhYmxlIGhhcyBhIHNwZWNpYWwgb3BlcmF0b3IsIGByZWZDb3VudGAuIFdoZW4gY2FsbGVkLCBpdCByZXR1cm5zIGFuIE9ic2VydmFibGUsIHdoaWNoIHdpbGwgY291bnRcbiAqIHRoZSBudW1iZXIgb2YgY29uc3VtZXJzIHN1YnNjcmliZWQgdG8gaXQgYW5kIGtlZXAgQ29ubmVjdGFibGVPYnNlcnZhYmxlIGNvbm5lY3RlZCBhcyBsb25nIGFzIHRoZXJlIGlzIGF0IGxlYXN0XG4gKiBvbmUgY29uc3VtZXIuIFNvIGlmIHlvdSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGRlY2lkZSB5b3Vyc2VsZiB3aGVuIHRvIGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgYVxuICogQ29ubmVjdGFibGVPYnNlcnZhYmxlLCB1c2UgYHJlZkNvdW50YC5cbiAqXG4gKiBUaGUgc2Vjb25kIG1vZGUgaXMgaW52b2tlZCBieSBjYWxsaW5nIGBtdWx0aWNhc3RgIHdpdGggYW4gYWRkaXRpb25hbCwgc2Vjb25kIGFyZ3VtZW50IC0gc2VsZWN0b3IgZnVuY3Rpb24uXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW4gT2JzZXJ2YWJsZSAtIHdoaWNoIGJhc2ljYWxseSBtaXJyb3JzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSAtIGFuZCByZXR1cm5zIE9ic2VydmFibGVcbiAqIGFzIHdlbGwsIHdoaWNoIHNob3VsZCBiZSB0aGUgaW5wdXQgc3RyZWFtIG1vZGlmaWVkIGJ5IGFueSBvcGVyYXRvcnMgeW91IHdhbnQuIE5vdGUgdGhhdCBpbiB0aGlzXG4gKiBtb2RlIHlvdSBjYW5ub3QgcHJvdmlkZSBpbml0aWFsaXplZCBTdWJqZWN0IGFzIGEgZmlyc3QgYXJndW1lbnQgLSBpdCBoYXMgdG8gYmUgYSBTdWJqZWN0IGZhY3RvcnkuIElmXG4gKiB5b3UgcHJvdmlkZSBzZWxlY3RvciBmdW5jdGlvbiwgYG11bHRpY2FzdGAgcmV0dXJucyBqdXN0IGEgcmVndWxhciBPYnNlcnZhYmxlLCBpbnN0ZWFkIG9mIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5cbiAqIFRodXMsIGFzIHVzdWFsLCBlYWNoIHN1YnNjcmlwdGlvbiB0byB0aGlzIHN0cmVhbSB0cmlnZ2VycyBzdWJzY3JpcHRpb24gdG8gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBIb3dldmVyLFxuICogaWYgaW5zaWRlIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB5b3Ugc3Vic2NyaWJlIHRvIHRoZSBpbnB1dCBPYnNlcnZhYmxlIG11bHRpcGxlIHRpbWVzLCBhY3R1YWwgc291cmNlIHN0cmVhbVxuICogd2lsbCBiZSBzdWJzY3JpYmVkIG9ubHkgb25jZS4gU28gaWYgeW91IGhhdmUgYSBjaGFpbiBvZiBvcGVyYXRvcnMgdGhhdCB1c2Ugc29tZSBPYnNlcnZhYmxlIG1hbnkgdGltZXMsXG4gKiBidXQgeW91IHdhbnQgdG8gc3Vic2NyaWJlIHRvIHRoYXQgT2JzZXJ2YWJsZSBvbmx5IG9uY2UsIHRoaXMgaXMgdGhlIG1vZGUgeW91IHdvdWxkIHVzZS5cbiAqXG4gKiBTdWJqZWN0IHByb3ZpZGVkIGFzIGEgZmlyc3QgcGFyYW1ldGVyIG9mIGBtdWx0aWNhc3RgIGlzIHVzZWQgYXMgYSBwcm94eSBmb3IgdGhlIHNpbmdsZSBzdWJzY3JpcHRpb24gdG8gdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZS4gSXQgbWVhbnMgdGhhdCBhbGwgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBzdHJlYW0gZ28gdGhyb3VnaCB0aGF0IFN1YmplY3QuIFRodXMsIGlmIGEgU3ViamVjdFxuICogaGFzIHNvbWUgc3BlY2lhbCBwcm9wZXJ0aWVzLCBPYnNlcnZhYmxlIHJldHVybmVkIGJ5IGBtdWx0aWNhc3RgIHdpbGwgaGF2ZSB0aGVtIGFzIHdlbGwuIElmIHlvdSB3YW50IHRvIHVzZVxuICogYG11bHRpY2FzdGAgd2l0aCBhIFN1YmplY3QgdGhhdCBpcyBvbmUgb2YgdGhlIG9uZXMgaW5jbHVkZWQgaW4gUnhKUyBieSBkZWZhdWx0IC0ge0BsaW5rIFN1YmplY3R9LFxuICoge0BsaW5rIEFzeW5jU3ViamVjdH0sIHtAbGluayBCZWhhdmlvclN1YmplY3R9LCBvciB7QGxpbmsgUmVwbGF5U3ViamVjdH0gLSBzaW1wbHkgdXNlIHtAbGluayBwdWJsaXNofSxcbiAqIHtAbGluayBwdWJsaXNoTGFzdH0sIHtAbGluayBwdWJsaXNoQmVoYXZpb3J9IG9yIHtAbGluayBwdWJsaXNoUmVwbGF5fSByZXNwZWN0aXZlbHkuIFRoZXNlIGFyZSBhY3R1YWxseVxuICoganVzdCB3cmFwcGVycyBhcm91bmQgYG11bHRpY2FzdGAsIHdpdGggYSBzcGVjaWZpYyBTdWJqZWN0IGhhcmRjb2RlZCBpbnNpZGUuXG4gKlxuICogQWxzbywgaWYgeW91IHVzZSB7QGxpbmsgcHVibGlzaH0gb3Ige0BsaW5rIHB1Ymxpc2hSZXBsYXl9IHdpdGggYSBDb25uZWN0YWJsZU9ic2VydmFibGVzIGByZWZDb3VudGAgb3BlcmF0b3IsXG4gKiB5b3UgY2FuIHNpbXBseSB1c2Uge0BsaW5rIHNoYXJlfSBhbmQge0BsaW5rIHNoYXJlUmVwbGF5fSByZXNwZWN0aXZlbHksIHdoaWNoIGNoYWluIHRoZXNlIHR3by5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Vc2UgQ29ubmVjdGFibGVPYnNlcnZhYmxlPC9jYXB0aW9uPlxuICogY29uc3Qgc2Vjb25kcyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiBjb25zdCBjb25uZWN0YWJsZVNlY29uZHMgPSBzZWNvbmRzLm11bHRpY2FzdChuZXcgU3ViamVjdCgpKTtcbiAqXG4gKiBjb25uZWN0YWJsZVNlY29uZHMuc3Vic2NyaWJlKHZhbHVlID0+IGNvbnNvbGUubG9nKCdmaXJzdDogJyArIHZhbHVlKSk7XG4gKiBjb25uZWN0YWJsZVNlY29uZHMuc3Vic2NyaWJlKHZhbHVlID0+IGNvbnNvbGUubG9nKCdzZWNvbmQ6ICcgKyB2YWx1ZSkpO1xuICpcbiAqIC8vIEF0IHRoaXMgcG9pbnQgc3RpbGwgbm90aGluZyBoYXBwZW5zLCBldmVuIHRob3VnaCB3ZSBzdWJzY3JpYmVkIHR3aWNlLlxuICpcbiAqIGNvbm5lY3RhYmxlU2Vjb25kcy5jb25uZWN0KCk7XG4gKlxuICogLy8gRnJvbSBub3cgb24gYHNlY29uZHNgIGFyZSBiZWluZyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUsXG4gKiAvLyB0d2ljZSBwZXIgZXZlcnkgc2Vjb25kLiBgc2Vjb25kc2AgT2JzZXJ2YWJsZSB3YXMgaG93ZXZlciBvbmx5IHN1YnNjcmliZWQgb25jZSxcbiAqIC8vIHNvIHVuZGVyIHRoZSBob29kIE9ic2VydmFibGUuaW50ZXJ2YWwgaGFkIG9ubHkgb25lIGNsb2NrIHN0YXJ0ZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIHNlbGVjdG9yPC9jYXB0aW9uPlxuICogY29uc3Qgc2Vjb25kcyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKlxuICogc2Vjb25kc1xuICogICAgIC5tdWx0aWNhc3QoXG4gKiAgICAgICAgICgpID0+IG5ldyBTdWJqZWN0KCksXG4gKiAgICAgICAgIHNlY29uZHMgPT4gc2Vjb25kcy56aXAoc2Vjb25kcykgLy8gVXN1YWxseSB6aXAgd291bGQgc3Vic2NyaWJlIHRvIGBzZWNvbmRzYCB0d2ljZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIHdlIGFyZSBpbnNpZGUgc2VsZWN0b3IsIGBzZWNvbmRzYCBpcyBzdWJzY3JpYmVkIG9uY2UsXG4gKiAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGh1cyBzdGFydGluZyBvbmx5IG9uZSBjbG9jayB1c2VkIGludGVybmFsbHkgYnkgT2JzZXJ2YWJsZS5pbnRlcnZhbC5cbiAqICAgICAuc3Vic2NyaWJlKCk7XG4gKlxuICogQHNlZSB7QGxpbmsgcHVibGlzaH1cbiAqIEBzZWUge0BsaW5rIHB1Ymxpc2hMYXN0fVxuICogQHNlZSB7QGxpbmsgcHVibGlzaEJlaGF2aW9yfVxuICogQHNlZSB7QGxpbmsgcHVibGlzaFJlcGxheX1cbiAqIEBzZWUge0BsaW5rIHNoYXJlfVxuICogQHNlZSB7QGxpbmsgc2hhcmVSZXBsYXl9XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxTdWJqZWN0fSBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSAtIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGludGVybWVkaWF0ZSBTdWJqZWN0IHRocm91Z2hcbiAqIHdoaWNoIHRoZSBzb3VyY2Ugc2VxdWVuY2UncyBlbGVtZW50cyB3aWxsIGJlIG11bHRpY2FzdCB0byB0aGUgc2VsZWN0b3IgZnVuY3Rpb24gaW5wdXQgT2JzZXJ2YWJsZSBvclxuICogQ29ubmVjdGFibGVPYnNlcnZhYmxlIHJldHVybmVkIGJ5IHRoZSBvcGVyYXRvci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBzZWxlY3RvciBmdW5jdGlvbiB0aGF0IGNhbiB1c2UgdGhlIGlucHV0IHN0cmVhbVxuICogYXMgbWFueSB0aW1lcyBhcyBuZWVkZWQsIHdpdGhvdXQgY2F1c2luZyBtdWx0aXBsZSBzdWJzY3JpcHRpb25zIHRvIHRoZSBzb3VyY2Ugc3RyZWFtLlxuICogU3Vic2NyaWJlcnMgdG8gdGhlIGlucHV0IHNvdXJjZSB3aWxsIHJlY2VpdmUgYWxsIG5vdGlmaWNhdGlvbnMgb2YgdGhlIHNvdXJjZSBmcm9tIHRoZVxuICogdGltZSBvZiB0aGUgc3Vic2NyaXB0aW9uIGZvcndhcmQuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fENvbm5lY3RhYmxlT2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHRzIG9mIGludm9raW5nIHRoZSBzZWxlY3RvclxuICogb24gdGhlIHNvdXJjZSBzdHJlYW0gb3IgYSBzcGVjaWFsIHtAbGluayBDb25uZWN0YWJsZU9ic2VydmFibGV9LCBpZiBzZWxlY3RvciB3YXMgbm90IHByb3ZpZGVkLlxuICpcbiAqIEBtZXRob2QgbXVsdGljYXN0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtdWx0aWNhc3Qoc3ViamVjdE9yU3ViamVjdEZhY3RvcnksIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG11bHRpY2FzdF8xLm11bHRpY2FzdChzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSwgc2VsZWN0b3IpKHRoaXMpO1xufVxuZXhwb3J0cy5tdWx0aWNhc3QgPSBtdWx0aWNhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aWNhc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgb2JzZXJ2ZU9uXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvb2JzZXJ2ZU9uJyk7XG4vKipcbiAqXG4gKiBSZS1lbWl0cyBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggc3BlY2lmaWVkIHNjaGVkdWxlci5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RW5zdXJlIGEgc3BlY2lmaWMgc2NoZWR1bGVyIGlzIHVzZWQsIGZyb20gb3V0c2lkZSBvZiBhbiBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiBgb2JzZXJ2ZU9uYCBpcyBhbiBvcGVyYXRvciB0aGF0IGFjY2VwdHMgYSBzY2hlZHVsZXIgYXMgYSBmaXJzdCBwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgYmUgdXNlZCB0byByZXNjaGVkdWxlXG4gKiBub3RpZmljYXRpb25zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJdCBtaWdodCBiZSB1c2VmdWwsIGlmIHlvdSBkbyBub3QgaGF2ZSBjb250cm9sIG92ZXJcbiAqIGludGVybmFsIHNjaGVkdWxlciBvZiBhIGdpdmVuIE9ic2VydmFibGUsIGJ1dCB3YW50IHRvIGNvbnRyb2wgd2hlbiBpdHMgdmFsdWVzIGFyZSBlbWl0dGVkIG5ldmVydGhlbGVzcy5cbiAqXG4gKiBSZXR1cm5lZCBPYnNlcnZhYmxlIGVtaXRzIHRoZSBzYW1lIG5vdGlmaWNhdGlvbnMgKG5leHRlZCB2YWx1ZXMsIGNvbXBsZXRlIGFuZCBlcnJvciBldmVudHMpIGFzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSxcbiAqIGJ1dCByZXNjaGVkdWxlZCB3aXRoIHByb3ZpZGVkIHNjaGVkdWxlci4gTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBtZWFuIHRoYXQgc291cmNlIE9ic2VydmFibGVzIGludGVybmFsXG4gKiBzY2hlZHVsZXIgd2lsbCBiZSByZXBsYWNlZCBpbiBhbnkgd2F5LiBPcmlnaW5hbCBzY2hlZHVsZXIgc3RpbGwgd2lsbCBiZSB1c2VkLCBidXQgd2hlbiB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHNcbiAqIG5vdGlmaWNhdGlvbiwgaXQgd2lsbCBiZSBpbW1lZGlhdGVseSBzY2hlZHVsZWQgYWdhaW4gLSB0aGlzIHRpbWUgd2l0aCBzY2hlZHVsZXIgcGFzc2VkIHRvIGBvYnNlcnZlT25gLlxuICogQW4gYW50aS1wYXR0ZXJuIHdvdWxkIGJlIGNhbGxpbmcgYG9ic2VydmVPbmAgb24gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGxvdHMgb2YgdmFsdWVzIHN5bmNocm9ub3VzbHksIHRvIHNwbGl0XG4gKiB0aGF0IGVtaXNzaW9ucyBpbnRvIGFzeW5jaHJvbm91cyBjaHVua3MuIEZvciB0aGlzIHRvIGhhcHBlbiwgc2NoZWR1bGVyIHdvdWxkIGhhdmUgdG8gYmUgcGFzc2VkIGludG8gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBkaXJlY3RseSAodXN1YWxseSBpbnRvIHRoZSBvcGVyYXRvciB0aGF0IGNyZWF0ZXMgaXQpLiBgb2JzZXJ2ZU9uYCBzaW1wbHkgZGVsYXlzIG5vdGlmaWNhdGlvbnMgYVxuICogbGl0dGxlIGJpdCBtb3JlLCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBlbWl0dGVkIGF0IGV4cGVjdGVkIG1vbWVudHMuXG4gKlxuICogQXMgYSBtYXR0ZXIgb2YgZmFjdCwgYG9ic2VydmVPbmAgYWNjZXB0cyBzZWNvbmQgcGFyYW1ldGVyLCB3aGljaCBzcGVjaWZpZXMgaW4gbWlsbGlzZWNvbmRzIHdpdGggd2hhdCBkZWxheSBub3RpZmljYXRpb25zXG4gKiB3aWxsIGJlIGVtaXR0ZWQuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB7QGxpbmsgZGVsYXl9IG9wZXJhdG9yIGFuZCBgb2JzZXJ2ZU9uYCBpcyB0aGF0IGBvYnNlcnZlT25gXG4gKiB3aWxsIGRlbGF5IGFsbCBub3RpZmljYXRpb25zIC0gaW5jbHVkaW5nIGVycm9yIG5vdGlmaWNhdGlvbnMgLSB3aGlsZSBgZGVsYXlgIHdpbGwgcGFzcyB0aHJvdWdoIGVycm9yXG4gKiBmcm9tIHNvdXJjZSBPYnNlcnZhYmxlIGltbWVkaWF0ZWx5IHdoZW4gaXQgaXMgZW1pdHRlZC4gSW4gZ2VuZXJhbCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gdXNlIGBkZWxheWAgb3BlcmF0b3JcbiAqIGZvciBhbnkga2luZCBvZiBkZWxheWluZyBvZiB2YWx1ZXMgaW4gdGhlIHN0cmVhbSwgd2hpbGUgdXNpbmcgYG9ic2VydmVPbmAgdG8gc3BlY2lmeSB3aGljaCBzY2hlZHVsZXIgc2hvdWxkIGJlIHVzZWRcbiAqIGZvciBub3RpZmljYXRpb24gZW1pc3Npb25zIGluIGdlbmVyYWwuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW5zdXJlIHZhbHVlcyBpbiBzdWJzY3JpYmUgYXJlIGNhbGxlZCBqdXN0IGJlZm9yZSBicm93c2VyIHJlcGFpbnQuPC9jYXB0aW9uPlxuICogY29uc3QgaW50ZXJ2YWxzID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMCk7IC8vIEludGVydmFscyBhcmUgc2NoZWR1bGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBhc3luYyBzY2hlZHVsZXIgYnkgZGVmYXVsdC4uLlxuICpcbiAqIGludGVydmFsc1xuICogLm9ic2VydmVPbihSeC5TY2hlZHVsZXIuYW5pbWF0aW9uRnJhbWUpICAgICAgIC8vIC4uLmJ1dCB3ZSB3aWxsIG9ic2VydmUgb24gYW5pbWF0aW9uRnJhbWVcbiAqIC5zdWJzY3JpYmUodmFsID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzY2hlZHVsZXIgdG8gZW5zdXJlIHNtb290aCBhbmltYXRpb24uXG4gKiAgIHNvbWVEaXYuc3R5bGUuaGVpZ2h0ID0gdmFsICsgJ3B4JztcbiAqIH0pO1xuICpcbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICpcbiAqIEBwYXJhbSB7SVNjaGVkdWxlcn0gc2NoZWR1bGVyIFNjaGVkdWxlciB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXNjaGVkdWxlIG5vdGlmaWNhdGlvbnMgZnJvbSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsYXldIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBzdGF0ZXMgd2l0aCB3aGF0IGRlbGF5IGV2ZXJ5IG5vdGlmaWNhdGlvbiBzaG91bGQgYmUgcmVzY2hlZHVsZWQuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNhbWUgbm90aWZpY2F0aW9ucyBhcyB0aGUgc291cmNlIE9ic2VydmFibGUsXG4gKiBidXQgd2l0aCBwcm92aWRlZCBzY2hlZHVsZXIuXG4gKlxuICogQG1ldGhvZCBvYnNlcnZlT25cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIG9ic2VydmVPbl8xLm9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5KSh0aGlzKTtcbn1cbmV4cG9ydHMub2JzZXJ2ZU9uID0gb2JzZXJ2ZU9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JzZXJ2ZU9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIG9uRXJyb3JSZXN1bWVOZXh0XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvb25FcnJvclJlc3VtZU5leHQnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFdoZW4gYW55IG9mIHRoZSBwcm92aWRlZCBPYnNlcnZhYmxlIGVtaXRzIGFuIGNvbXBsZXRlIG9yIGVycm9yIG5vdGlmaWNhdGlvbiwgaXQgaW1tZWRpYXRlbHkgc3Vic2NyaWJlcyB0byB0aGUgbmV4dCBvbmVcbiAqIHRoYXQgd2FzIHBhc3NlZC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RXhlY3V0ZSBzZXJpZXMgb2YgT2JzZXJ2YWJsZXMgbm8gbWF0dGVyIHdoYXQsIGV2ZW4gaWYgaXQgbWVhbnMgc3dhbGxvd2luZyBlcnJvcnMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvb25FcnJvclJlc3VtZU5leHQucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYG9uRXJyb3JSZXN1bWVOZXh0YCBpcyBhbiBvcGVyYXRvciB0aGF0IGFjY2VwdHMgYSBzZXJpZXMgb2YgT2JzZXJ2YWJsZXMsIHByb3ZpZGVkIGVpdGhlciBkaXJlY3RseSBhc1xuICogYXJndW1lbnRzIG9yIGFzIGFuIGFycmF5LiBJZiBubyBzaW5nbGUgT2JzZXJ2YWJsZSBpcyBwcm92aWRlZCwgcmV0dXJuZWQgT2JzZXJ2YWJsZSB3aWxsIHNpbXBseSBiZWhhdmUgdGhlIHNhbWVcbiAqIGFzIHRoZSBzb3VyY2UuXG4gKlxuICogYG9uRXJyb3JSZXN1bWVOZXh0YCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBzdGFydHMgYnkgc3Vic2NyaWJpbmcgYW5kIHJlLWVtaXR0aW5nIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIFdoZW4gaXRzIHN0cmVhbSBvZiB2YWx1ZXMgZW5kcyAtIG5vIG1hdHRlciBpZiBPYnNlcnZhYmxlIGNvbXBsZXRlZCBvciBlbWl0dGVkIGFuIGVycm9yIC0gYG9uRXJyb3JSZXN1bWVOZXh0YFxuICogd2lsbCBzdWJzY3JpYmUgdG8gdGhlIGZpcnN0IE9ic2VydmFibGUgdGhhdCB3YXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBtZXRob2QuIEl0IHdpbGwgc3RhcnQgcmUtZW1pdHRpbmdcbiAqIGl0cyB2YWx1ZXMgYXMgd2VsbCBhbmQgLSBhZ2FpbiAtIHdoZW4gdGhhdCBzdHJlYW0gZW5kcywgYG9uRXJyb3JSZXN1bWVOZXh0YCB3aWxsIHByb2NlZWQgdG8gc3Vic2NyaWJpbmcgeWV0IGFub3RoZXJcbiAqIE9ic2VydmFibGUgaW4gcHJvdmlkZWQgc2VyaWVzLCBubyBtYXR0ZXIgaWYgcHJldmlvdXMgT2JzZXJ2YWJsZSBjb21wbGV0ZWQgb3IgZW5kZWQgd2l0aCBhbiBlcnJvci4gVGhpcyB3aWxsXG4gKiBiZSBoYXBwZW5pbmcgdW50aWwgdGhlcmUgaXMgbm8gbW9yZSBPYnNlcnZhYmxlcyBsZWZ0IGluIHRoZSBzZXJpZXMsIGF0IHdoaWNoIHBvaW50IHJldHVybmVkIE9ic2VydmFibGUgd2lsbFxuICogY29tcGxldGUgLSBldmVuIGlmIHRoZSBsYXN0IHN1YnNjcmliZWQgc3RyZWFtIGVuZGVkIHdpdGggYW4gZXJyb3IuXG4gKlxuICogYG9uRXJyb3JSZXN1bWVOZXh0YCBjYW4gYmUgdGhlcmVmb3JlIHRob3VnaHQgb2YgYXMgdmVyc2lvbiBvZiB7QGxpbmsgY29uY2F0fSBvcGVyYXRvciwgd2hpY2ggaXMgbW9yZSBwZXJtaXNzaXZlXG4gKiB3aGVuIGl0IGNvbWVzIHRvIHRoZSBlcnJvcnMgZW1pdHRlZCBieSBpdHMgaW5wdXQgT2JzZXJ2YWJsZXMuIFdoaWxlIGBjb25jYXRgIHN1YnNjcmliZXMgdG8gdGhlIG5leHQgT2JzZXJ2YWJsZVxuICogaW4gc2VyaWVzIG9ubHkgaWYgcHJldmlvdXMgb25lIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsIGBvbkVycm9yUmVzdW1lTmV4dGAgc3Vic2NyaWJlcyBldmVuIGlmIGl0IGVuZGVkIHdpdGhcbiAqIGFuIGVycm9yLlxuICpcbiAqIE5vdGUgdGhhdCB5b3UgZG8gbm90IGdldCBhbnkgYWNjZXNzIHRvIGVycm9ycyBlbWl0dGVkIGJ5IHRoZSBPYnNlcnZhYmxlcy4gSW4gcGFydGljdWxhciBkbyBub3RcbiAqIGV4cGVjdCB0aGVzZSBlcnJvcnMgdG8gYXBwZWFyIGluIGVycm9yIGNhbGxiYWNrIHBhc3NlZCB0byB7QGxpbmsgc3Vic2NyaWJlfS4gSWYgeW91IHdhbnQgdG8gdGFrZVxuICogc3BlY2lmaWMgYWN0aW9ucyBiYXNlZCBvbiB3aGF0IGVycm9yIHdhcyBlbWl0dGVkIGJ5IGFuIE9ic2VydmFibGUsIHlvdSBzaG91bGQgdHJ5IG91dCB7QGxpbmsgY2F0Y2h9IGluc3RlYWQuXG4gKlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlN1YnNjcmliZSB0byB0aGUgbmV4dCBPYnNlcnZhYmxlIGFmdGVyIG1hcCBmYWlsczwvY2FwdGlvbj5cbiAqIFJ4Lk9ic2VydmFibGUub2YoMSwgMiwgMywgMClcbiAqICAgLm1hcCh4ID0+IHtcbiAqICAgICAgIGlmICh4ID09PSAwKSB7IHRocm93IEVycm9yKCk7IH1cbiAgICAgICAgIHJldHVybiAxMCAvIHg7XG4gKiAgIH0pXG4gKiAgIC5vbkVycm9yUmVzdW1lTmV4dChSeC5PYnNlcnZhYmxlLm9mKDEsIDIsIDMpKVxuICogICAuc3Vic2NyaWJlKFxuICogICAgIHZhbCA9PiBjb25zb2xlLmxvZyh2YWwpLFxuICogICAgIGVyciA9PiBjb25zb2xlLmxvZyhlcnIpLCAgICAgICAgICAvLyBXaWxsIG5ldmVyIGJlIGNhbGxlZC5cbiAqICAgICAoKSA9PiBjb25zb2xlLmxvZygndGhhdFxcJ3MgaXQhJylcbiAqICAgKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gMTBcbiAqIC8vIDVcbiAqIC8vIDMuMzMzMzMzMzMzMzMzMzMzNVxuICogLy8gMVxuICogLy8gMlxuICogLy8gM1xuICogLy8gXCJ0aGF0J3MgaXQhXCJcbiAqXG4gKiBAc2VlIHtAbGluayBjb25jYXR9XG4gKiBAc2VlIHtAbGluayBjYXRjaH1cbiAqXG4gKiBAcGFyYW0gey4uLk9ic2VydmFibGVJbnB1dH0gb2JzZXJ2YWJsZXMgT2JzZXJ2YWJsZXMgcGFzc2VkIGVpdGhlciBkaXJlY3RseSBvciBhcyBhbiBhcnJheS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB2YWx1ZXMgZnJvbSBzb3VyY2UgT2JzZXJ2YWJsZSwgYnV0IC0gaWYgaXQgZXJyb3JzIC0gc3Vic2NyaWJlc1xuICogdG8gdGhlIG5leHQgcGFzc2VkIE9ic2VydmFibGUgYW5kIHNvIG9uLCB1bnRpbCBpdCBjb21wbGV0ZXMgb3IgcnVucyBvdXQgb2YgT2JzZXJ2YWJsZXMuXG4gKiBAbWV0aG9kIG9uRXJyb3JSZXN1bWVOZXh0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBvbkVycm9yUmVzdW1lTmV4dCgpIHtcbiAgICB2YXIgbmV4dFNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBuZXh0U291cmNlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIG9uRXJyb3JSZXN1bWVOZXh0XzEub25FcnJvclJlc3VtZU5leHQuYXBwbHkodm9pZCAwLCBuZXh0U291cmNlcykodGhpcyk7XG59XG5leHBvcnRzLm9uRXJyb3JSZXN1bWVOZXh0ID0gb25FcnJvclJlc3VtZU5leHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkVycm9yUmVzdW1lTmV4dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBwYWlyd2lzZV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3BhaXJ3aXNlJyk7XG4vKipcbiAqIEdyb3VwcyBwYWlycyBvZiBjb25zZWN1dGl2ZSBlbWlzc2lvbnMgdG9nZXRoZXIgYW5kIGVtaXRzIHRoZW0gYXMgYW4gYXJyYXkgb2ZcbiAqIHR3byB2YWx1ZXMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlB1dHMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kIHByZXZpb3VzIHZhbHVlIHRvZ2V0aGVyIGFzXG4gKiBhbiBhcnJheSwgYW5kIGVtaXRzIHRoYXQuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvcGFpcndpc2UucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogVGhlIE50aCBlbWlzc2lvbiBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aWxsIGNhdXNlIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZVxuICogdG8gZW1pdCBhbiBhcnJheSBbKE4tMSl0aCwgTnRoXSBvZiB0aGUgcHJldmlvdXMgYW5kIHRoZSBjdXJyZW50IHZhbHVlLCBhcyBhXG4gKiBwYWlyLiBGb3IgdGhpcyByZWFzb24sIGBwYWlyd2lzZWAgZW1pdHMgb24gdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudFxuICogZW1pc3Npb25zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBidXQgbm90IG9uIHRoZSBmaXJzdCBlbWlzc2lvbiwgYmVjYXVzZVxuICogdGhlcmUgaXMgbm8gcHJldmlvdXMgdmFsdWUgaW4gdGhhdCBjYXNlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPk9uIGV2ZXJ5IGNsaWNrIChzdGFydGluZyBmcm9tIHRoZSBzZWNvbmQpLCBlbWl0IHRoZSByZWxhdGl2ZSBkaXN0YW5jZSB0byB0aGUgcHJldmlvdXMgY2xpY2s8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHBhaXJzID0gY2xpY2tzLnBhaXJ3aXNlKCk7XG4gKiB2YXIgZGlzdGFuY2UgPSBwYWlycy5tYXAocGFpciA9PiB7XG4gKiAgIHZhciB4MCA9IHBhaXJbMF0uY2xpZW50WDtcbiAqICAgdmFyIHkwID0gcGFpclswXS5jbGllbnRZO1xuICogICB2YXIgeDEgPSBwYWlyWzFdLmNsaWVudFg7XG4gKiAgIHZhciB5MSA9IHBhaXJbMV0uY2xpZW50WTtcbiAqICAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh4MCAtIHgxLCAyKSArIE1hdGgucG93KHkwIC0geTEsIDIpKTtcbiAqIH0pO1xuICogZGlzdGFuY2Uuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlckNvdW50fVxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGU8QXJyYXk8VD4+fSBBbiBPYnNlcnZhYmxlIG9mIHBhaXJzIChhcyBhcnJheXMpIG9mXG4gKiBjb25zZWN1dGl2ZSB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIHBhaXJ3aXNlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBwYWlyd2lzZSgpIHtcbiAgICByZXR1cm4gcGFpcndpc2VfMS5wYWlyd2lzZSgpKHRoaXMpO1xufVxuZXhwb3J0cy5wYWlyd2lzZSA9IHBhaXJ3aXNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFpcndpc2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcGFydGl0aW9uXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvcGFydGl0aW9uJyk7XG4vKipcbiAqIFNwbGl0cyB0aGUgc291cmNlIE9ic2VydmFibGUgaW50byB0d28sIG9uZSB3aXRoIHZhbHVlcyB0aGF0IHNhdGlzZnkgYVxuICogcHJlZGljYXRlLCBhbmQgYW5vdGhlciB3aXRoIHZhbHVlcyB0aGF0IGRvbid0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBmaWx0ZXJ9LCBidXQgcmV0dXJucyB0d28gT2JzZXJ2YWJsZXM6XG4gKiBvbmUgbGlrZSB0aGUgb3V0cHV0IG9mIHtAbGluayBmaWx0ZXJ9LCBhbmQgdGhlIG90aGVyIHdpdGggdmFsdWVzIHRoYXQgZGlkIG5vdFxuICogcGFzcyB0aGUgY29uZGl0aW9uLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3BhcnRpdGlvbi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgcGFydGl0aW9uYCBvdXRwdXRzIGFuIGFycmF5IHdpdGggdHdvIE9ic2VydmFibGVzIHRoYXQgcGFydGl0aW9uIHRoZSB2YWx1ZXNcbiAqIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRocm91Z2ggdGhlIGdpdmVuIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLiBUaGUgZmlyc3RcbiAqIE9ic2VydmFibGUgaW4gdGhhdCBhcnJheSBlbWl0cyBzb3VyY2UgdmFsdWVzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIGFyZ3VtZW50XG4gKiByZXR1cm5zIHRydWUuIFRoZSBzZWNvbmQgT2JzZXJ2YWJsZSBlbWl0cyBzb3VyY2UgdmFsdWVzIGZvciB3aGljaCB0aGVcbiAqIHByZWRpY2F0ZSByZXR1cm5zIGZhbHNlLiBUaGUgZmlyc3QgYmVoYXZlcyBsaWtlIHtAbGluayBmaWx0ZXJ9IGFuZCB0aGUgc2Vjb25kXG4gKiBiZWhhdmVzIGxpa2Uge0BsaW5rIGZpbHRlcn0gd2l0aCB0aGUgcHJlZGljYXRlIG5lZ2F0ZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+UGFydGl0aW9uIGNsaWNrIGV2ZW50cyBpbnRvIHRob3NlIG9uIERJViBlbGVtZW50cyBhbmQgdGhvc2UgZWxzZXdoZXJlPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBwYXJ0cyA9IGNsaWNrcy5wYXJ0aXRpb24oZXYgPT4gZXYudGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKTtcbiAqIHZhciBjbGlja3NPbkRpdnMgPSBwYXJ0c1swXTtcbiAqIHZhciBjbGlja3NFbHNld2hlcmUgPSBwYXJ0c1sxXTtcbiAqIGNsaWNrc09uRGl2cy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZygnRElWIGNsaWNrZWQ6ICcsIHgpKTtcbiAqIGNsaWNrc0Vsc2V3aGVyZS5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZygnT3RoZXIgY2xpY2tlZDogJywgeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGZpbHRlcn1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKTogYm9vbGVhbn0gcHJlZGljYXRlIEEgZnVuY3Rpb24gdGhhdFxuICogZXZhbHVhdGVzIGVhY2ggdmFsdWUgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuIElmIGl0IHJldHVybnMgYHRydWVgLFxuICogdGhlIHZhbHVlIGlzIGVtaXR0ZWQgb24gdGhlIGZpcnN0IE9ic2VydmFibGUgaW4gdGhlIHJldHVybmVkIGFycmF5LCBpZlxuICogYGZhbHNlYCB0aGUgdmFsdWUgaXMgZW1pdHRlZCBvbiB0aGUgc2Vjb25kIE9ic2VydmFibGUgaW4gdGhlIGFycmF5LiBUaGVcbiAqIGBpbmRleGAgcGFyYW1ldGVyIGlzIHRoZSBudW1iZXIgYGlgIGZvciB0aGUgaS10aCBzb3VyY2UgZW1pc3Npb24gdGhhdCBoYXNcbiAqIGhhcHBlbmVkIHNpbmNlIHRoZSBzdWJzY3JpcHRpb24sIHN0YXJ0aW5nIGZyb20gdGhlIG51bWJlciBgMGAuXG4gKiBAcGFyYW0ge2FueX0gW3RoaXNBcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgYHRoaXNgXG4gKiBpbiB0aGUgYHByZWRpY2F0ZWAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtbT2JzZXJ2YWJsZTxUPiwgT2JzZXJ2YWJsZTxUPl19IEFuIGFycmF5IHdpdGggdHdvIE9ic2VydmFibGVzOiBvbmVcbiAqIHdpdGggdmFsdWVzIHRoYXQgcGFzc2VkIHRoZSBwcmVkaWNhdGUsIGFuZCBhbm90aGVyIHdpdGggdmFsdWVzIHRoYXQgZGlkIG5vdFxuICogcGFzcyB0aGUgcHJlZGljYXRlLlxuICogQG1ldGhvZCBwYXJ0aXRpb25cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvbihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gcGFydGl0aW9uXzEucGFydGl0aW9uKHByZWRpY2F0ZSwgdGhpc0FyZykodGhpcyk7XG59XG5leHBvcnRzLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnRpdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBwbHVja18xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3BsdWNrJyk7XG4vKipcbiAqIE1hcHMgZWFjaCBzb3VyY2UgdmFsdWUgKGFuIG9iamVjdCkgdG8gaXRzIHNwZWNpZmllZCBuZXN0ZWQgcHJvcGVydHkuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkxpa2Uge0BsaW5rIG1hcH0sIGJ1dCBtZWFudCBvbmx5IGZvciBwaWNraW5nIG9uZSBvZlxuICogdGhlIG5lc3RlZCBwcm9wZXJ0aWVzIG9mIGV2ZXJ5IGVtaXR0ZWQgb2JqZWN0Ljwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3BsdWNrLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEdpdmVuIGEgbGlzdCBvZiBzdHJpbmdzIGRlc2NyaWJpbmcgYSBwYXRoIHRvIGFuIG9iamVjdCBwcm9wZXJ0eSwgcmV0cmlldmVzXG4gKiB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpZWQgbmVzdGVkIHByb3BlcnR5IGZyb20gYWxsIHZhbHVlcyBpbiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBJZiBhIHByb3BlcnR5IGNhbid0IGJlIHJlc29sdmVkLCBpdCB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCBmb3JcbiAqIHRoYXQgdmFsdWUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWFwIGV2ZXJ5IGNsaWNrIHRvIHRoZSB0YWdOYW1lIG9mIHRoZSBjbGlja2VkIHRhcmdldCBlbGVtZW50PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciB0YWdOYW1lcyA9IGNsaWNrcy5wbHVjaygndGFyZ2V0JywgJ3RhZ05hbWUnKTtcbiAqIHRhZ05hbWVzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBtYXB9XG4gKlxuICogQHBhcmFtIHsuLi5zdHJpbmd9IHByb3BlcnRpZXMgVGhlIG5lc3RlZCBwcm9wZXJ0aWVzIHRvIHBsdWNrIGZyb20gZWFjaCBzb3VyY2VcbiAqIHZhbHVlIChhbiBvYmplY3QpLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQSBuZXcgT2JzZXJ2YWJsZSBvZiBwcm9wZXJ0eSB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIHZhbHVlcy5cbiAqIEBtZXRob2QgcGx1Y2tcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHBsdWNrKCkge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgcHJvcGVydGllc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHBsdWNrXzEucGx1Y2suYXBwbHkodm9pZCAwLCBwcm9wZXJ0aWVzKSh0aGlzKTtcbn1cbmV4cG9ydHMucGx1Y2sgPSBwbHVjaztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWNrLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHB1Ymxpc2hfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9wdWJsaXNoJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZXR1cm5zIGEgQ29ubmVjdGFibGVPYnNlcnZhYmxlLCB3aGljaCBpcyBhIHZhcmlldHkgb2YgT2JzZXJ2YWJsZSB0aGF0IHdhaXRzIHVudGlsIGl0cyBjb25uZWN0IG1ldGhvZCBpcyBjYWxsZWRcbiAqIGJlZm9yZSBpdCBiZWdpbnMgZW1pdHRpbmcgaXRlbXMgdG8gdGhvc2UgT2JzZXJ2ZXJzIHRoYXQgaGF2ZSBzdWJzY3JpYmVkIHRvIGl0LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvcHVibGlzaC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbc2VsZWN0b3JdIC0gT3B0aW9uYWwgc2VsZWN0b3IgZnVuY3Rpb24gd2hpY2ggY2FuIHVzZSB0aGUgbXVsdGljYXN0ZWQgc291cmNlIHNlcXVlbmNlIGFzIG1hbnkgdGltZXNcbiAqIGFzIG5lZWRlZCwgd2l0aG91dCBjYXVzaW5nIG11bHRpcGxlIHN1YnNjcmlwdGlvbnMgdG8gdGhlIHNvdXJjZSBzZXF1ZW5jZS5cbiAqIFN1YnNjcmliZXJzIHRvIHRoZSBnaXZlbiBzb3VyY2Ugd2lsbCByZWNlaXZlIGFsbCBub3RpZmljYXRpb25zIG9mIHRoZSBzb3VyY2UgZnJvbSB0aGUgdGltZSBvZiB0aGUgc3Vic2NyaXB0aW9uIG9uLlxuICogQHJldHVybiBBIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSB0aGF0IHVwb24gY29ubmVjdGlvbiBjYXVzZXMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRvIGVtaXQgaXRlbXMgdG8gaXRzIE9ic2VydmVycy5cbiAqIEBtZXRob2QgcHVibGlzaFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gcHVibGlzaChzZWxlY3Rvcikge1xuICAgIHJldHVybiBwdWJsaXNoXzEucHVibGlzaChzZWxlY3RvcikodGhpcyk7XG59XG5leHBvcnRzLnB1Ymxpc2ggPSBwdWJsaXNoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBwdWJsaXNoQmVoYXZpb3JfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3InKTtcbi8qKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuIHtDb25uZWN0YWJsZU9ic2VydmFibGU8VD59XG4gKiBAbWV0aG9kIHB1Ymxpc2hCZWhhdmlvclxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gcHVibGlzaEJlaGF2aW9yKHZhbHVlKSB7XG4gICAgcmV0dXJuIHB1Ymxpc2hCZWhhdmlvcl8xLnB1Ymxpc2hCZWhhdmlvcih2YWx1ZSkodGhpcyk7XG59XG5leHBvcnRzLnB1Ymxpc2hCZWhhdmlvciA9IHB1Ymxpc2hCZWhhdmlvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hCZWhhdmlvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBwdWJsaXNoTGFzdF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3B1Ymxpc2hMYXN0Jyk7XG4vKipcbiAqIEByZXR1cm4ge0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZTxUPn1cbiAqIEBtZXRob2QgcHVibGlzaExhc3RcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hMYXN0KCkge1xuICAgIC8vVE9ETyhiZW5sZXNoKTogY29ycmVjdCB0eXBlLWZsb3cgdGhyb3VnaCBoZXJlLlxuICAgIHJldHVybiBwdWJsaXNoTGFzdF8xLnB1Ymxpc2hMYXN0KCkodGhpcyk7XG59XG5leHBvcnRzLnB1Ymxpc2hMYXN0ID0gcHVibGlzaExhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoTGFzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBwdWJsaXNoUmVwbGF5XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvcHVibGlzaFJlcGxheScpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogQHBhcmFtIGJ1ZmZlclNpemVcbiAqIEBwYXJhbSB3aW5kb3dUaW1lXG4gKiBAcGFyYW0gc2VsZWN0b3JPclNjaGVkdWxlclxuICogQHBhcmFtIHNjaGVkdWxlclxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPiB8IENvbm5lY3RhYmxlT2JzZXJ2YWJsZTxUPn1cbiAqIEBtZXRob2QgcHVibGlzaFJlcGxheVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gcHVibGlzaFJlcGxheShidWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzZWxlY3Rvck9yU2NoZWR1bGVyLCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gcHVibGlzaFJlcGxheV8xLnB1Ymxpc2hSZXBsYXkoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2VsZWN0b3JPclNjaGVkdWxlciwgc2NoZWR1bGVyKSh0aGlzKTtcbn1cbmV4cG9ydHMucHVibGlzaFJlcGxheSA9IHB1Ymxpc2hSZXBsYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoUmVwbGF5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHJhY2VfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9yYWNlJyk7XG4vLyBOT1RFOiB0byBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IHdpdGggNS40LiogYW5kIGxvd2VyXG52YXIgcmFjZV8yID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9yYWNlJyk7XG5leHBvcnRzLnJhY2VTdGF0aWMgPSByYWNlXzIucmFjZTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIGZpcnN0IHNvdXJjZSBPYnNlcnZhYmxlIHRvIGVtaXQgYW4gaXRlbVxuICogZnJvbSB0aGUgY29tYmluYXRpb24gb2YgdGhpcyBPYnNlcnZhYmxlIGFuZCBzdXBwbGllZCBPYnNlcnZhYmxlcy5cbiAqIEBwYXJhbSB7Li4uT2JzZXJ2YWJsZXN9IC4uLm9ic2VydmFibGVzIFNvdXJjZXMgdXNlZCB0byByYWNlIGZvciB3aGljaCBPYnNlcnZhYmxlIGVtaXRzIGZpcnN0LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIG91dHB1dCBvZiB0aGUgZmlyc3QgT2JzZXJ2YWJsZSB0byBlbWl0IGFuIGl0ZW0uXG4gKiBAbWV0aG9kIHJhY2VcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHJhY2UoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiByYWNlXzEucmFjZS5hcHBseSh2b2lkIDAsIG9ic2VydmFibGVzKSh0aGlzKTtcbn1cbmV4cG9ydHMucmFjZSA9IHJhY2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYWNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3JlZHVjZScpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogQXBwbGllcyBhbiBhY2N1bXVsYXRvciBmdW5jdGlvbiBvdmVyIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYW5kIHJldHVybnMgdGhlXG4gKiBhY2N1bXVsYXRlZCByZXN1bHQgd2hlbiB0aGUgc291cmNlIGNvbXBsZXRlcywgZ2l2ZW4gYW4gb3B0aW9uYWwgc2VlZCB2YWx1ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Q29tYmluZXMgdG9nZXRoZXIgYWxsIHZhbHVlcyBlbWl0dGVkIG9uIHRoZSBzb3VyY2UsXG4gKiB1c2luZyBhbiBhY2N1bXVsYXRvciBmdW5jdGlvbiB0aGF0IGtub3dzIGhvdyB0byBqb2luIGEgbmV3IHNvdXJjZSB2YWx1ZSBpbnRvXG4gKiB0aGUgYWNjdW11bGF0aW9uIGZyb20gdGhlIHBhc3QuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvcmVkdWNlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIExpa2VcbiAqIFtBcnJheS5wcm90b3R5cGUucmVkdWNlKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L3JlZHVjZSksXG4gKiBgcmVkdWNlYCBhcHBsaWVzIGFuIGBhY2N1bXVsYXRvcmAgZnVuY3Rpb24gYWdhaW5zdCBhbiBhY2N1bXVsYXRpb24gYW5kIGVhY2hcbiAqIHZhbHVlIG9mIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSAoZnJvbSB0aGUgcGFzdCkgdG8gcmVkdWNlIGl0IHRvIGEgc2luZ2xlXG4gKiB2YWx1ZSwgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuIE5vdGUgdGhhdCBgcmVkdWNlYCB3aWxsIG9ubHkgZW1pdFxuICogb25lIHZhbHVlLCBvbmx5IHdoZW4gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGNvbXBsZXRlcy4gSXQgaXMgZXF1aXZhbGVudCB0b1xuICogYXBwbHlpbmcgb3BlcmF0b3Ige0BsaW5rIHNjYW59IGZvbGxvd2VkIGJ5IG9wZXJhdG9yIHtAbGluayBsYXN0fS5cbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBhcHBsaWVzIGEgc3BlY2lmaWVkIGBhY2N1bXVsYXRvcmAgZnVuY3Rpb24gdG8gZWFjaFxuICogaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS4gSWYgYSBgc2VlZGAgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGVuXG4gKiB0aGF0IHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGFjY3VtdWxhdG9yLiBJZiBubyBzZWVkXG4gKiB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBzb3VyY2UgaXMgdXNlZCBhcyB0aGUgc2VlZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db3VudCB0aGUgbnVtYmVyIG9mIGNsaWNrIGV2ZW50cyB0aGF0IGhhcHBlbmVkIGluIDUgc2Vjb25kczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3NJbkZpdmVTZWNvbmRzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpXG4gKiAgIC50YWtlVW50aWwoUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCg1MDAwKSk7XG4gKiB2YXIgb25lcyA9IGNsaWNrc0luRml2ZVNlY29uZHMubWFwVG8oMSk7XG4gKiB2YXIgc2VlZCA9IDA7XG4gKiB2YXIgY291bnQgPSBvbmVzLnJlZHVjZSgoYWNjLCBvbmUpID0+IGFjYyArIG9uZSwgc2VlZCk7XG4gKiBjb3VudC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgY291bnR9XG4gKiBAc2VlIHtAbGluayBleHBhbmR9XG4gKiBAc2VlIHtAbGluayBtZXJnZVNjYW59XG4gKiBAc2VlIHtAbGluayBzY2FufVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oYWNjOiBSLCB2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IFJ9IGFjY3VtdWxhdG9yIFRoZSBhY2N1bXVsYXRvciBmdW5jdGlvblxuICogY2FsbGVkIG9uIGVhY2ggc291cmNlIHZhbHVlLlxuICogQHBhcmFtIHtSfSBbc2VlZF0gVGhlIGluaXRpYWwgYWNjdW11bGF0aW9uIHZhbHVlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxSPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgc2luZ2xlIHZhbHVlIHRoYXQgaXMgdGhlXG4gKiByZXN1bHQgb2YgYWNjdW11bGF0aW5nIHRoZSB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIHJlZHVjZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gcmVkdWNlKGFjY3VtdWxhdG9yLCBzZWVkKSB7XG4gICAgLy8gcHJvdmlkaW5nIGEgc2VlZCBvZiBgdW5kZWZpbmVkYCAqc2hvdWxkKiBiZSB2YWxpZCBhbmQgdHJpZ2dlclxuICAgIC8vIGhhc1NlZWQhIHNvIGRvbid0IHVzZSBgc2VlZCAhPT0gdW5kZWZpbmVkYCBjaGVja3MhXG4gICAgLy8gRm9yIHRoaXMgcmVhc29uLCB3ZSBoYXZlIHRvIGNoZWNrIGl0IGhlcmUgYXQgdGhlIG9yaWdpbmFsIGNhbGwgc2l0ZVxuICAgIC8vIG90aGVyd2lzZSBpbnNpZGUgT3BlcmF0b3IvU3Vic2NyaWJlciB3ZSB3b24ndCBrbm93IGlmIGB1bmRlZmluZWRgXG4gICAgLy8gbWVhbnMgdGhleSBkaWRuJ3QgcHJvdmlkZSBhbnl0aGluZyBvciBpZiB0aGV5IGxpdGVyYWxseSBwcm92aWRlZCBgdW5kZWZpbmVkYFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgcmV0dXJuIHJlZHVjZV8xLnJlZHVjZShhY2N1bXVsYXRvciwgc2VlZCkodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiByZWR1Y2VfMS5yZWR1Y2UoYWNjdW11bGF0b3IpKHRoaXMpO1xufVxuZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1Y2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcmVwZWF0XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvcmVwZWF0Jyk7XG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHJlcGVhdHMgdGhlIHN0cmVhbSBvZiBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhdCBtb3N0IGNvdW50IHRpbWVzLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvcmVwZWF0LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY291bnRdIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGl0ZW1zIGFyZSByZXBlYXRlZCwgYSBjb3VudCBvZiAwIHdpbGwgeWllbGRcbiAqIGFuIGVtcHR5IE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgcmVwZWF0cyB0aGUgc3RyZWFtIG9mIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGF0IG1vc3RcbiAqIGNvdW50IHRpbWVzLlxuICogQG1ldGhvZCByZXBlYXRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICAgIGlmIChjb3VudCA9PT0gdm9pZCAwKSB7IGNvdW50ID0gLTE7IH1cbiAgICByZXR1cm4gcmVwZWF0XzEucmVwZWF0KGNvdW50KSh0aGlzKTtcbn1cbmV4cG9ydHMucmVwZWF0ID0gcmVwZWF0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVwZWF0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHJlcGVhdFdoZW5fMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9yZXBlYXRXaGVuJyk7XG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhIGBjb21wbGV0ZWAuIElmIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgY2FsbHMgYGNvbXBsZXRlYCwgdGhpcyBtZXRob2Qgd2lsbCBlbWl0IHRvIHRoZSBPYnNlcnZhYmxlIHJldHVybmVkIGZyb20gYG5vdGlmaWVyYC4gSWYgdGhhdCBPYnNlcnZhYmxlXG4gKiBjYWxscyBgY29tcGxldGVgIG9yIGBlcnJvcmAsIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCBjYWxsIGBjb21wbGV0ZWAgb3IgYGVycm9yYCBvbiB0aGUgY2hpbGQgc3Vic2NyaXB0aW9uLiBPdGhlcndpc2VcbiAqIHRoaXMgbWV0aG9kIHdpbGwgcmVzdWJzY3JpYmUgdG8gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvcmVwZWF0V2hlbi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKG5vdGlmaWNhdGlvbnM6IE9ic2VydmFibGUpOiBPYnNlcnZhYmxlfSBub3RpZmllciAtIFJlY2VpdmVzIGFuIE9ic2VydmFibGUgb2Ygbm90aWZpY2F0aW9ucyB3aXRoXG4gKiB3aGljaCBhIHVzZXIgY2FuIGBjb21wbGV0ZWAgb3IgYGVycm9yYCwgYWJvcnRpbmcgdGhlIHJlcGV0aXRpb24uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBUaGUgc291cmNlIE9ic2VydmFibGUgbW9kaWZpZWQgd2l0aCByZXBlYXQgbG9naWMuXG4gKiBAbWV0aG9kIHJlcGVhdFdoZW5cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdFdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gcmVwZWF0V2hlbl8xLnJlcGVhdFdoZW4obm90aWZpZXIpKHRoaXMpO1xufVxuZXhwb3J0cy5yZXBlYXRXaGVuID0gcmVwZWF0V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdFdoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcmV0cnlfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9yZXRyeScpO1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBtaXJyb3JzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aXRoIHRoZSBleGNlcHRpb24gb2YgYW4gYGVycm9yYC4gSWYgdGhlIHNvdXJjZSBPYnNlcnZhYmxlXG4gKiBjYWxscyBgZXJyb3JgLCB0aGlzIG1ldGhvZCB3aWxsIHJlc3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBmb3IgYSBtYXhpbXVtIG9mIGBjb3VudGAgcmVzdWJzY3JpcHRpb25zIChnaXZlblxuICogYXMgYSBudW1iZXIgcGFyYW1ldGVyKSByYXRoZXIgdGhhbiBwcm9wYWdhdGluZyB0aGUgYGVycm9yYCBjYWxsLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvcmV0cnkucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQW55IGFuZCBhbGwgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgd2lsbCBiZSBlbWl0dGVkIGJ5IHRoZSByZXN1bHRpbmcgT2JzZXJ2YWJsZSwgZXZlbiB0aG9zZSBlbWl0dGVkXG4gKiBkdXJpbmcgZmFpbGVkIHN1YnNjcmlwdGlvbnMuIEZvciBleGFtcGxlLCBpZiBhbiBPYnNlcnZhYmxlIGZhaWxzIGF0IGZpcnN0IGJ1dCBlbWl0cyBbMSwgMl0gdGhlbiBzdWNjZWVkcyB0aGUgc2Vjb25kXG4gKiB0aW1lIGFuZCBlbWl0czogWzEsIDIsIDMsIDQsIDVdIHRoZW4gdGhlIGNvbXBsZXRlIHN0cmVhbSBvZiBlbWlzc2lvbnMgYW5kIG5vdGlmaWNhdGlvbnNcbiAqIHdvdWxkIGJlOiBbMSwgMiwgMSwgMiwgMywgNCwgNSwgYGNvbXBsZXRlYF0uXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgLSBOdW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgYmVmb3JlIGZhaWxpbmcuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBUaGUgc291cmNlIE9ic2VydmFibGUgbW9kaWZpZWQgd2l0aCB0aGUgcmV0cnkgbG9naWMuXG4gKiBAbWV0aG9kIHJldHJ5XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiByZXRyeShjb3VudCkge1xuICAgIGlmIChjb3VudCA9PT0gdm9pZCAwKSB7IGNvdW50ID0gLTE7IH1cbiAgICByZXR1cm4gcmV0cnlfMS5yZXRyeShjb3VudCkodGhpcyk7XG59XG5leHBvcnRzLnJldHJ5ID0gcmV0cnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciByZXRyeVdoZW5fMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9yZXRyeVdoZW4nKTtcbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgc291cmNlIE9ic2VydmFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFuIGBlcnJvcmAuIElmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZVxuICogY2FsbHMgYGVycm9yYCwgdGhpcyBtZXRob2Qgd2lsbCBlbWl0IHRoZSBUaHJvd2FibGUgdGhhdCBjYXVzZWQgdGhlIGVycm9yIHRvIHRoZSBPYnNlcnZhYmxlIHJldHVybmVkIGZyb20gYG5vdGlmaWVyYC5cbiAqIElmIHRoYXQgT2JzZXJ2YWJsZSBjYWxscyBgY29tcGxldGVgIG9yIGBlcnJvcmAgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIGNhbGwgYGNvbXBsZXRlYCBvciBgZXJyb3JgIG9uIHRoZSBjaGlsZFxuICogc3Vic2NyaXB0aW9uLiBPdGhlcndpc2UgdGhpcyBtZXRob2Qgd2lsbCByZXN1YnNjcmliZSB0byB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9yZXRyeVdoZW4ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbihlcnJvcnM6IE9ic2VydmFibGUpOiBPYnNlcnZhYmxlfSBub3RpZmllciAtIFJlY2VpdmVzIGFuIE9ic2VydmFibGUgb2Ygbm90aWZpY2F0aW9ucyB3aXRoIHdoaWNoIGFcbiAqIHVzZXIgY2FuIGBjb21wbGV0ZWAgb3IgYGVycm9yYCwgYWJvcnRpbmcgdGhlIHJldHJ5LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gVGhlIHNvdXJjZSBPYnNlcnZhYmxlIG1vZGlmaWVkIHdpdGggcmV0cnkgbG9naWMuXG4gKiBAbWV0aG9kIHJldHJ5V2hlblxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gcmV0cnlXaGVuKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIHJldHJ5V2hlbl8xLnJldHJ5V2hlbihub3RpZmllcikodGhpcyk7XG59XG5leHBvcnRzLnJldHJ5V2hlbiA9IHJldHJ5V2hlbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBzYW1wbGVfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9zYW1wbGUnKTtcbi8qKlxuICogRW1pdHMgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aGVuZXZlclxuICogYW5vdGhlciBPYnNlcnZhYmxlLCB0aGUgYG5vdGlmaWVyYCwgZW1pdHMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgc2FtcGxlVGltZX0sIGJ1dCBzYW1wbGVzIHdoZW5ldmVyXG4gKiB0aGUgYG5vdGlmaWVyYCBPYnNlcnZhYmxlIGVtaXRzIHNvbWV0aGluZy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9zYW1wbGUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogV2hlbmV2ZXIgdGhlIGBub3RpZmllcmAgT2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlIG9yIGNvbXBsZXRlcywgYHNhbXBsZWBcbiAqIGxvb2tzIGF0IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhbmQgZW1pdHMgd2hpY2hldmVyIHZhbHVlIGl0IGhhcyBtb3N0IHJlY2VudGx5XG4gKiBlbWl0dGVkIHNpbmNlIHRoZSBwcmV2aW91cyBzYW1wbGluZywgdW5sZXNzIHRoZSBzb3VyY2UgaGFzIG5vdCBlbWl0dGVkXG4gKiBhbnl0aGluZyBzaW5jZSB0aGUgcHJldmlvdXMgc2FtcGxpbmcuIFRoZSBgbm90aWZpZXJgIGlzIHN1YnNjcmliZWQgdG8gYXMgc29vblxuICogYXMgdGhlIG91dHB1dCBPYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+T24gZXZlcnkgY2xpY2ssIHNhbXBsZSB0aGUgbW9zdCByZWNlbnQgXCJzZWNvbmRzXCIgdGltZXI8L2NhcHRpb24+XG4gKiB2YXIgc2Vjb25kcyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IHNlY29uZHMuc2FtcGxlKGNsaWNrcyk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGF1ZGl0fVxuICogQHNlZSB7QGxpbmsgZGVib3VuY2V9XG4gKiBAc2VlIHtAbGluayBzYW1wbGVUaW1lfVxuICogQHNlZSB7QGxpbmsgdGhyb3R0bGV9XG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlPGFueT59IG5vdGlmaWVyIFRoZSBPYnNlcnZhYmxlIHRvIHVzZSBmb3Igc2FtcGxpbmcgdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0cyBvZiBzYW1wbGluZyB0aGVcbiAqIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aGVuZXZlciB0aGUgbm90aWZpZXIgT2JzZXJ2YWJsZVxuICogZW1pdHMgdmFsdWUgb3IgY29tcGxldGVzLlxuICogQG1ldGhvZCBzYW1wbGVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHNhbXBsZShub3RpZmllcikge1xuICAgIHJldHVybiBzYW1wbGVfMS5zYW1wbGUobm90aWZpZXIpKHRoaXMpO1xufVxuZXhwb3J0cy5zYW1wbGUgPSBzYW1wbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zYW1wbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xudmFyIHNhbXBsZVRpbWVfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9zYW1wbGVUaW1lJyk7XG4vKipcbiAqIEVtaXRzIHRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgd2l0aGluXG4gKiBwZXJpb2RpYyB0aW1lIGludGVydmFscy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+U2FtcGxlcyB0aGUgc291cmNlIE9ic2VydmFibGUgYXQgcGVyaW9kaWMgdGltZVxuICogaW50ZXJ2YWxzLCBlbWl0dGluZyB3aGF0IGl0IHNhbXBsZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvc2FtcGxlVGltZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgc2FtcGxlVGltZWAgcGVyaW9kaWNhbGx5IGxvb2tzIGF0IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhbmQgZW1pdHMgd2hpY2hldmVyXG4gKiB2YWx1ZSBpdCBoYXMgbW9zdCByZWNlbnRseSBlbWl0dGVkIHNpbmNlIHRoZSBwcmV2aW91cyBzYW1wbGluZywgdW5sZXNzIHRoZVxuICogc291cmNlIGhhcyBub3QgZW1pdHRlZCBhbnl0aGluZyBzaW5jZSB0aGUgcHJldmlvdXMgc2FtcGxpbmcuIFRoZSBzYW1wbGluZ1xuICogaGFwcGVucyBwZXJpb2RpY2FsbHkgaW4gdGltZSBldmVyeSBgcGVyaW9kYCBtaWxsaXNlY29uZHMgKG9yIHRoZSB0aW1lIHVuaXRcbiAqIGRlZmluZWQgYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgIGFyZ3VtZW50KS4gVGhlIHNhbXBsaW5nIHN0YXJ0cyBhcyBzb29uIGFzXG4gKiB0aGUgb3V0cHV0IE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FdmVyeSBzZWNvbmQsIGVtaXQgdGhlIG1vc3QgcmVjZW50IGNsaWNrIGF0IG1vc3Qgb25jZTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLnNhbXBsZVRpbWUoMTAwMCk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGF1ZGl0VGltZX1cbiAqIEBzZWUge0BsaW5rIGRlYm91bmNlVGltZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICogQHNlZSB7QGxpbmsgc2FtcGxlfVxuICogQHNlZSB7QGxpbmsgdGhyb3R0bGVUaW1lfVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJpb2QgVGhlIHNhbXBsaW5nIHBlcmlvZCBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzIG9yIHRoZVxuICogdGltZSB1bml0IGRldGVybWluZWQgaW50ZXJuYWxseSBieSB0aGUgb3B0aW9uYWwgYHNjaGVkdWxlcmAuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1hc3luY10gVGhlIHtAbGluayBJU2NoZWR1bGVyfSB0byB1c2UgZm9yXG4gKiBtYW5hZ2luZyB0aGUgdGltZXJzIHRoYXQgaGFuZGxlIHRoZSBzYW1wbGluZy5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0cyBvZiBzYW1wbGluZyB0aGVcbiAqIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuXG4gKiBAbWV0aG9kIHNhbXBsZVRpbWVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHNhbXBsZVRpbWUocGVyaW9kLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHJldHVybiBzYW1wbGVUaW1lXzEuc2FtcGxlVGltZShwZXJpb2QsIHNjaGVkdWxlcikodGhpcyk7XG59XG5leHBvcnRzLnNhbXBsZVRpbWUgPSBzYW1wbGVUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxlVGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBzY2FuXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvc2NhbicpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogQXBwbGllcyBhbiBhY2N1bXVsYXRvciBmdW5jdGlvbiBvdmVyIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYW5kIHJldHVybnMgZWFjaFxuICogaW50ZXJtZWRpYXRlIHJlc3VsdCwgd2l0aCBhbiBvcHRpb25hbCBzZWVkIHZhbHVlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIHJlZHVjZX0sIGJ1dCBlbWl0cyB0aGUgY3VycmVudFxuICogYWNjdW11bGF0aW9uIHdoZW5ldmVyIHRoZSBzb3VyY2UgZW1pdHMgYSB2YWx1ZS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9zY2FuLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIENvbWJpbmVzIHRvZ2V0aGVyIGFsbCB2YWx1ZXMgZW1pdHRlZCBvbiB0aGUgc291cmNlLCB1c2luZyBhbiBhY2N1bXVsYXRvclxuICogZnVuY3Rpb24gdGhhdCBrbm93cyBob3cgdG8gam9pbiBhIG5ldyBzb3VyY2UgdmFsdWUgaW50byB0aGUgYWNjdW11bGF0aW9uIGZyb21cbiAqIHRoZSBwYXN0LiBJcyBzaW1pbGFyIHRvIHtAbGluayByZWR1Y2V9LCBidXQgZW1pdHMgdGhlIGludGVybWVkaWF0ZVxuICogYWNjdW11bGF0aW9ucy5cbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBhcHBsaWVzIGEgc3BlY2lmaWVkIGBhY2N1bXVsYXRvcmAgZnVuY3Rpb24gdG8gZWFjaFxuICogaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS4gSWYgYSBgc2VlZGAgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGVuXG4gKiB0aGF0IHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGFjY3VtdWxhdG9yLiBJZiBubyBzZWVkXG4gKiB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBzb3VyY2UgaXMgdXNlZCBhcyB0aGUgc2VlZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db3VudCB0aGUgbnVtYmVyIG9mIGNsaWNrIGV2ZW50czwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgb25lcyA9IGNsaWNrcy5tYXBUbygxKTtcbiAqIHZhciBzZWVkID0gMDtcbiAqIHZhciBjb3VudCA9IG9uZXMuc2NhbigoYWNjLCBvbmUpID0+IGFjYyArIG9uZSwgc2VlZCk7XG4gKiBjb3VudC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgZXhwYW5kfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VTY2FufVxuICogQHNlZSB7QGxpbmsgcmVkdWNlfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oYWNjOiBSLCB2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IFJ9IGFjY3VtdWxhdG9yXG4gKiBUaGUgYWNjdW11bGF0b3IgZnVuY3Rpb24gY2FsbGVkIG9uIGVhY2ggc291cmNlIHZhbHVlLlxuICogQHBhcmFtIHtUfFJ9IFtzZWVkXSBUaGUgaW5pdGlhbCBhY2N1bXVsYXRpb24gdmFsdWUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFI+fSBBbiBvYnNlcnZhYmxlIG9mIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZXMuXG4gKiBAbWV0aG9kIHNjYW5cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHNjYW4oYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIHJldHVybiBzY2FuXzEuc2NhbihhY2N1bXVsYXRvciwgc2VlZCkodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBzY2FuXzEuc2NhbihhY2N1bXVsYXRvcikodGhpcyk7XG59XG5leHBvcnRzLnNjYW4gPSBzY2FuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2Nhbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBzZXF1ZW5jZUVxdWFsXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvc2VxdWVuY2VFcXVhbCcpO1xuLyoqXG4gKiBDb21wYXJlcyBhbGwgdmFsdWVzIG9mIHR3byBvYnNlcnZhYmxlcyBpbiBzZXF1ZW5jZSB1c2luZyBhbiBvcHRpb25hbCBjb21wYXJvciBmdW5jdGlvblxuICogYW5kIHJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiBhIHNpbmdsZSBib29sZWFuIHZhbHVlIHJlcHJlc2VudGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgdHdvIHNlcXVlbmNlc1xuICogYXJlIGVxdWFsLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5DaGVja3MgdG8gc2VlIG9mIGFsbCB2YWx1ZXMgZW1pdHRlZCBieSBib3RoIG9ic2VydmFibGVzIGFyZSBlcXVhbCwgaW4gb3JkZXIuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvc2VxdWVuY2VFcXVhbC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgc2VxdWVuY2VFcXVhbGAgc3Vic2NyaWJlcyB0byB0d28gb2JzZXJ2YWJsZXMgYW5kIGJ1ZmZlcnMgaW5jb21pbmcgdmFsdWVzIGZyb20gZWFjaCBvYnNlcnZhYmxlLiBXaGVuZXZlciBlaXRoZXJcbiAqIG9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZSwgdGhlIHZhbHVlIGlzIGJ1ZmZlcmVkIGFuZCB0aGUgYnVmZmVycyBhcmUgc2hpZnRlZCBhbmQgY29tcGFyZWQgZnJvbSB0aGUgYm90dG9tXG4gKiB1cDsgSWYgYW55IHZhbHVlIHBhaXIgZG9lc24ndCBtYXRjaCwgdGhlIHJldHVybmVkIG9ic2VydmFibGUgd2lsbCBlbWl0IGBmYWxzZWAgYW5kIGNvbXBsZXRlLiBJZiBvbmUgb2YgdGhlXG4gKiBvYnNlcnZhYmxlcyBjb21wbGV0ZXMsIHRoZSBvcGVyYXRvciB3aWxsIHdhaXQgZm9yIHRoZSBvdGhlciBvYnNlcnZhYmxlIHRvIGNvbXBsZXRlOyBJZiB0aGUgb3RoZXJcbiAqIG9ic2VydmFibGUgZW1pdHMgYmVmb3JlIGNvbXBsZXRpbmcsIHRoZSByZXR1cm5lZCBvYnNlcnZhYmxlIHdpbGwgZW1pdCBgZmFsc2VgIGFuZCBjb21wbGV0ZS4gSWYgb25lIG9ic2VydmFibGUgbmV2ZXJcbiAqIGNvbXBsZXRlcyBvciBlbWl0cyBhZnRlciB0aGUgb3RoZXIgY29tcGxldHMsIHRoZSByZXR1cm5lZCBvYnNlcnZhYmxlIHdpbGwgbmV2ZXIgY29tcGxldGUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+ZmlndXJlIG91dCBpZiB0aGUgS29uYW1pIGNvZGUgbWF0Y2hlczwvY2FwdGlvbj5cbiAqIHZhciBjb2RlID0gUnguT2JzZXJ2YWJsZS5mcm9tKFtcbiAqICBcIkFycm93VXBcIixcbiAqICBcIkFycm93VXBcIixcbiAqICBcIkFycm93RG93blwiLFxuICogIFwiQXJyb3dEb3duXCIsXG4gKiAgXCJBcnJvd0xlZnRcIixcbiAqICBcIkFycm93UmlnaHRcIixcbiAqICBcIkFycm93TGVmdFwiLFxuICogIFwiQXJyb3dSaWdodFwiLFxuICogIFwiS2V5QlwiLFxuICogIFwiS2V5QVwiLFxuICogIFwiRW50ZXJcIiAvLyBubyBzdGFydCBrZXksIGNsZWFybHkuXG4gKiBdKTtcbiAqXG4gKiB2YXIga2V5cyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5dXAnKVxuICogIC5tYXAoZSA9PiBlLmNvZGUpO1xuICogdmFyIG1hdGNoZXMgPSBrZXlzLmJ1ZmZlckNvdW50KDExLCAxKVxuICogIC5tZXJnZU1hcChcbiAqICAgIGxhc3QxMSA9PlxuICogICAgICBSeC5PYnNlcnZhYmxlLmZyb20obGFzdDExKVxuICogICAgICAgIC5zZXF1ZW5jZUVxdWFsKGNvZGUpXG4gKiAgICk7XG4gKiBtYXRjaGVzLnN1YnNjcmliZShtYXRjaGVkID0+IGNvbnNvbGUubG9nKCdTdWNjZXNzZnVsIGNoZWF0IGF0IENvbnRyYT8gJywgbWF0Y2hlZCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGNvbWJpbmVMYXRlc3R9XG4gKiBAc2VlIHtAbGluayB6aXB9XG4gKiBAc2VlIHtAbGluayB3aXRoTGF0ZXN0RnJvbX1cbiAqXG4gKiBAcGFyYW0ge09ic2VydmFibGV9IGNvbXBhcmVUbyBUaGUgb2JzZXJ2YWJsZSBzZXF1ZW5jZSB0byBjb21wYXJlIHRoZSBzb3VyY2Ugc2VxdWVuY2UgdG8uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY29tcGFyb3JdIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNvbXBhcmUgZWFjaCB2YWx1ZSBwYWlyXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIGEgc2luZ2xlIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50aW5nIHdoZXRoZXIgb3Igbm90XG4gKiB0aGUgdmFsdWVzIGVtaXR0ZWQgYnkgYm90aCBvYnNlcnZhYmxlcyB3ZXJlIGVxdWFsIGluIHNlcXVlbmNlLlxuICogQG1ldGhvZCBzZXF1ZW5jZUVxdWFsXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzZXF1ZW5jZUVxdWFsKGNvbXBhcmVUbywgY29tcGFyb3IpIHtcbiAgICByZXR1cm4gc2VxdWVuY2VFcXVhbF8xLnNlcXVlbmNlRXF1YWwoY29tcGFyZVRvLCBjb21wYXJvcikodGhpcyk7XG59XG5leHBvcnRzLnNlcXVlbmNlRXF1YWwgPSBzZXF1ZW5jZUVxdWFsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VFcXVhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBzaGFyZV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3NoYXJlJyk7XG4vKipcbiAqIFJldHVybnMgYSBuZXcgT2JzZXJ2YWJsZSB0aGF0IG11bHRpY2FzdHMgKHNoYXJlcykgdGhlIG9yaWdpbmFsIE9ic2VydmFibGUuIEFzIGxvbmcgYXMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lXG4gKiBTdWJzY3JpYmVyIHRoaXMgT2JzZXJ2YWJsZSB3aWxsIGJlIHN1YnNjcmliZWQgYW5kIGVtaXR0aW5nIGRhdGEuIFdoZW4gYWxsIHN1YnNjcmliZXJzIGhhdmUgdW5zdWJzY3JpYmVkIGl0IHdpbGxcbiAqIHVuc3Vic2NyaWJlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBCZWNhdXNlIHRoZSBPYnNlcnZhYmxlIGlzIG11bHRpY2FzdGluZyBpdCBtYWtlcyB0aGUgc3RyZWFtIGBob3RgLlxuICpcbiAqIFRoaXMgYmVoYXZlcyBzaW1pbGFybHkgdG8gLnB1Ymxpc2goKS5yZWZDb3VudCgpLCB3aXRoIGEgYmVoYXZpb3IgZGlmZmVyZW5jZSB3aGVuIHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZSBlbWl0cyBjb21wbGV0ZS5cbiAqIC5wdWJsaXNoKCkucmVmQ291bnQoKSB3aWxsIG5vdCByZXN1YnNjcmliZSB0byB0aGUgb3JpZ2luYWwgc291cmNlLCBob3dldmVyIC5zaGFyZSgpIHdpbGwgcmVzdWJzY3JpYmUgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqIE9ic2VydmFibGUub2YoXCJ0ZXN0XCIpLnB1Ymxpc2goKS5yZWZDb3VudCgpIHdpbGwgbm90IHJlLWVtaXQgXCJ0ZXN0XCIgb24gbmV3IHN1YnNjcmlwdGlvbnMsIE9ic2VydmFibGUub2YoXCJ0ZXN0XCIpLnNoYXJlKCkgd2lsbFxuICogcmUtZW1pdCBcInRlc3RcIiB0byBuZXcgc3Vic2NyaXB0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3NoYXJlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCB1cG9uIGNvbm5lY3Rpb24gY2F1c2VzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0byBlbWl0IGl0ZW1zIHRvIGl0cyBPYnNlcnZlcnMuXG4gKiBAbWV0aG9kIHNoYXJlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzaGFyZSgpIHtcbiAgICByZXR1cm4gc2hhcmVfMS5zaGFyZSgpKHRoaXMpO1xufVxuZXhwb3J0cy5zaGFyZSA9IHNoYXJlO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgc2hhcmVSZXBsYXlfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9zaGFyZVJlcGxheScpO1xuLyoqXG4gKiBAbWV0aG9kIHNoYXJlUmVwbGF5XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzaGFyZVJlcGxheShidWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gc2hhcmVSZXBsYXlfMS5zaGFyZVJlcGxheShidWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzY2hlZHVsZXIpKHRoaXMpO1xufVxuZXhwb3J0cy5zaGFyZVJlcGxheSA9IHNoYXJlUmVwbGF5O1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmVSZXBsYXkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgc2luZ2xlXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvc2luZ2xlJyk7XG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzaW5nbGUgaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0IG1hdGNoZXMgYSBzcGVjaWZpZWRcbiAqIHByZWRpY2F0ZSwgaWYgdGhhdCBPYnNlcnZhYmxlIGVtaXRzIG9uZSBzdWNoIGl0ZW0uIElmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBlbWl0cyBtb3JlIHRoYW4gb25lIHN1Y2ggaXRlbSBvciBub1xuICogc3VjaCBpdGVtcywgbm90aWZ5IG9mIGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBvciBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIHJlc3BlY3RpdmVseS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3NpbmdsZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAdGhyb3dzIHtFbXB0eUVycm9yfSBEZWxpdmVycyBhbiBFbXB0eUVycm9yIHRvIHRoZSBPYnNlcnZlcidzIGBlcnJvcmBcbiAqIGNhbGxiYWNrIGlmIHRoZSBPYnNlcnZhYmxlIGNvbXBsZXRlcyBiZWZvcmUgYW55IGBuZXh0YCBub3RpZmljYXRpb24gd2FzIHNlbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgLSBBIHByZWRpY2F0ZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2luZ2xlIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgdGhhdCBtYXRjaGVzXG4gKiB0aGUgcHJlZGljYXRlLlxuIC5cbiAqIEBtZXRob2Qgc2luZ2xlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzaW5nbGUocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIHNpbmdsZV8xLnNpbmdsZShwcmVkaWNhdGUpKHRoaXMpO1xufVxuZXhwb3J0cy5zaW5nbGUgPSBzaW5nbGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaW5nbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgc2tpcF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3NraXAnKTtcbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgc2tpcHMgdGhlIGZpcnN0IGBjb3VudGAgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9za2lwLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCAtIFRoZSBudW1iZXIgb2YgdGltZXMsIGl0ZW1zIGVtaXR0ZWQgYnkgc291cmNlIE9ic2VydmFibGUgc2hvdWxkIGJlIHNraXBwZWQuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgc2tpcHMgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIEBtZXRob2Qgc2tpcFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gc2tpcChjb3VudCkge1xuICAgIHJldHVybiBza2lwXzEuc2tpcChjb3VudCkodGhpcyk7XG59XG5leHBvcnRzLnNraXAgPSBza2lwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBza2lwTGFzdF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3NraXBMYXN0Jyk7XG4vKipcbiAqIFNraXAgdGhlIGxhc3QgYGNvdW50YCB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9za2lwTGFzdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgc2tpcExhc3RgIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGFjY3VtdWxhdGVzIGEgcXVldWUgd2l0aCBhIGxlbmd0aFxuICogZW5vdWdoIHRvIHN0b3JlIHRoZSBmaXJzdCBgY291bnRgIHZhbHVlcy4gQXMgbW9yZSB2YWx1ZXMgYXJlIHJlY2VpdmVkLFxuICogdmFsdWVzIGFyZSB0YWtlbiBmcm9tIHRoZSBmcm9udCBvZiB0aGUgcXVldWUgYW5kIHByb2R1Y2VkIG9uIHRoZSByZXN1bHRcbiAqIHNlcXVlbmNlLiBUaGlzIGNhdXNlcyB2YWx1ZXMgdG8gYmUgZGVsYXllZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Ta2lwIHRoZSBsYXN0IDIgdmFsdWVzIG9mIGFuIE9ic2VydmFibGUgd2l0aCBtYW55IHZhbHVlczwvY2FwdGlvbj5cbiAqIHZhciBtYW55ID0gUnguT2JzZXJ2YWJsZS5yYW5nZSgxLCA1KTtcbiAqIHZhciBza2lwTGFzdFR3byA9IG1hbnkuc2tpcExhc3QoMik7XG4gKiBza2lwTGFzdFR3by5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbjpcbiAqIC8vIDEgMiAzXG4gKlxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqIEBzZWUge0BsaW5rIHNraXBVbnRpbH1cbiAqIEBzZWUge0BsaW5rIHNraXBXaGlsZX1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHRocm93cyB7QXJndW1lbnRPdXRPZlJhbmdlRXJyb3J9IFdoZW4gdXNpbmcgYHNraXBMYXN0KGkpYCwgaXQgdGhyb3dzXG4gKiBBcmd1bWVudE91dE9yUmFuZ2VFcnJvciBpZiBgaSA8IDBgLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBmcm9tIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHJldHVybnMge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBza2lwcyB0aGUgbGFzdCBjb3VudCB2YWx1ZXNcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBza2lwTGFzdFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gc2tpcExhc3QoY291bnQpIHtcbiAgICByZXR1cm4gc2tpcExhc3RfMS5za2lwTGFzdChjb3VudCkodGhpcyk7XG59XG5leHBvcnRzLnNraXBMYXN0ID0gc2tpcExhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwTGFzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBza2lwVW50aWxfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9za2lwVW50aWwnKTtcbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgc2tpcHMgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgdW50aWwgYSBzZWNvbmQgT2JzZXJ2YWJsZSBlbWl0cyBhbiBpdGVtLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvc2tpcFVudGlsLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZX0gbm90aWZpZXIgLSBUaGUgc2Vjb25kIE9ic2VydmFibGUgdGhhdCBoYXMgdG8gZW1pdCBhbiBpdGVtIGJlZm9yZSB0aGUgc291cmNlIE9ic2VydmFibGUncyBlbGVtZW50cyBiZWdpbiB0b1xuICogYmUgbWlycm9yZWQgYnkgdGhlIHJlc3VsdGluZyBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IHNraXBzIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHVudGlsIHRoZSBzZWNvbmQgT2JzZXJ2YWJsZSBlbWl0c1xuICogYW4gaXRlbSwgdGhlbiBlbWl0cyB0aGUgcmVtYWluaW5nIGl0ZW1zLlxuICogQG1ldGhvZCBza2lwVW50aWxcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHNraXBVbnRpbChub3RpZmllcikge1xuICAgIHJldHVybiBza2lwVW50aWxfMS5za2lwVW50aWwobm90aWZpZXIpKHRoaXMpO1xufVxuZXhwb3J0cy5za2lwVW50aWwgPSBza2lwVW50aWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwVW50aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgc2tpcFdoaWxlXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvc2tpcFdoaWxlJyk7XG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNraXBzIGFsbCBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyBsb25nIGFzIGEgc3BlY2lmaWVkIGNvbmRpdGlvbiBob2xkc1xuICogdHJ1ZSwgYnV0IGVtaXRzIGFsbCBmdXJ0aGVyIHNvdXJjZSBpdGVtcyBhcyBzb29uIGFzIHRoZSBjb25kaXRpb24gYmVjb21lcyBmYWxzZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3NraXBXaGlsZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgLSBBIGZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBpdGVtIGVtaXR0ZWQgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgYmVnaW5zIGVtaXR0aW5nIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdoZW4gdGhlXG4gKiBzcGVjaWZpZWQgcHJlZGljYXRlIGJlY29tZXMgZmFsc2UuXG4gKiBAbWV0aG9kIHNraXBXaGlsZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gc2tpcFdoaWxlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBza2lwV2hpbGVfMS5za2lwV2hpbGUocHJlZGljYXRlKSh0aGlzKTtcbn1cbmV4cG9ydHMuc2tpcFdoaWxlID0gc2tpcFdoaWxlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcFdoaWxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHN0YXJ0V2l0aF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3N0YXJ0V2l0aCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGl0ZW1zIHlvdSBzcGVjaWZ5IGFzIGFyZ3VtZW50cyBiZWZvcmUgaXQgYmVnaW5zIHRvIGVtaXRcbiAqIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvc3RhcnRXaXRoLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBwYXJhbSB7Li4uVH0gdmFsdWVzIC0gSXRlbXMgeW91IHdhbnQgdGhlIG1vZGlmaWVkIE9ic2VydmFibGUgdG8gZW1pdCBmaXJzdC5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyXSAtIEEge0BsaW5rIElTY2hlZHVsZXJ9IHRvIHVzZSBmb3Igc2NoZWR1bGluZ1xuICogdGhlIGVtaXNzaW9ucyBvZiB0aGUgYG5leHRgIG5vdGlmaWNhdGlvbnMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGl0ZW1zIGluIHRoZSBzcGVjaWZpZWQgSXRlcmFibGUgYW5kIHRoZW4gZW1pdHMgdGhlIGl0ZW1zXG4gKiBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2Qgc3RhcnRXaXRoXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzdGFydFdpdGgoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJyYXlbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBzdGFydFdpdGhfMS5zdGFydFdpdGguYXBwbHkodm9pZCAwLCBhcnJheSkodGhpcyk7XG59XG5leHBvcnRzLnN0YXJ0V2l0aCA9IHN0YXJ0V2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXJ0V2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBzdWJzY3JpYmVPbl8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3N1YnNjcmliZU9uJyk7XG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHN1YnNjcmliZXMgT2JzZXJ2ZXJzIHRvIHRoaXMgT2JzZXJ2YWJsZSBvbiB0aGUgc3BlY2lmaWVkIElTY2hlZHVsZXIuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9zdWJzY3JpYmVPbi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gc2NoZWR1bGVyIC0gVGhlIElTY2hlZHVsZXIgdG8gcGVyZm9ybSBzdWJzY3JpcHRpb24gYWN0aW9ucyBvbi5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IFRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBtb2RpZmllZCBzbyB0aGF0IGl0cyBzdWJzY3JpcHRpb25zIGhhcHBlbiBvbiB0aGUgc3BlY2lmaWVkIElTY2hlZHVsZXIuXG4gLlxuICogQG1ldGhvZCBzdWJzY3JpYmVPblxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gc3Vic2NyaWJlT24oc2NoZWR1bGVyLCBkZWxheSkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIHJldHVybiBzdWJzY3JpYmVPbl8xLnN1YnNjcmliZU9uKHNjaGVkdWxlciwgZGVsYXkpKHRoaXMpO1xufVxuZXhwb3J0cy5zdWJzY3JpYmVPbiA9IHN1YnNjcmliZU9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NyaWJlT24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgc3dpdGNoQWxsXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvc3dpdGNoQWxsJyk7XG4vKipcbiAqIENvbnZlcnRzIGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUgaW50byBhIGZpcnN0LW9yZGVyIE9ic2VydmFibGUgYnlcbiAqIHN1YnNjcmliaW5nIHRvIG9ubHkgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBvZiB0aG9zZSBpbm5lciBPYnNlcnZhYmxlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RmxhdHRlbnMgYW4gT2JzZXJ2YWJsZS1vZi1PYnNlcnZhYmxlcyBieSBkcm9wcGluZyB0aGVcbiAqIHByZXZpb3VzIGlubmVyIE9ic2VydmFibGUgb25jZSBhIG5ldyBvbmUgYXBwZWFycy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9zd2l0Y2gucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYHN3aXRjaGAgc3Vic2NyaWJlcyB0byBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgT2JzZXJ2YWJsZXMsIGFsc28ga25vd24gYXMgYVxuICogaGlnaGVyLW9yZGVyIE9ic2VydmFibGUuIEVhY2ggdGltZSBpdCBvYnNlcnZlcyBvbmUgb2YgdGhlc2UgZW1pdHRlZCBpbm5lclxuICogT2JzZXJ2YWJsZXMsIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBzdWJzY3JpYmVzIHRvIHRoZSBpbm5lciBPYnNlcnZhYmxlIGFuZFxuICogYmVnaW5zIGVtaXR0aW5nIHRoZSBpdGVtcyBlbWl0dGVkIGJ5IHRoYXQuIFNvIGZhciwgaXQgYmVoYXZlc1xuICogbGlrZSB7QGxpbmsgbWVyZ2VBbGx9LiBIb3dldmVyLCB3aGVuIGEgbmV3IGlubmVyIE9ic2VydmFibGUgaXMgZW1pdHRlZCxcbiAqIGBzd2l0Y2hgIHVuc3Vic2NyaWJlcyBmcm9tIHRoZSBlYXJsaWVyLWVtaXR0ZWQgaW5uZXIgT2JzZXJ2YWJsZSBhbmRcbiAqIHN1YnNjcmliZXMgdG8gdGhlIG5ldyBpbm5lciBPYnNlcnZhYmxlIGFuZCBiZWdpbnMgZW1pdHRpbmcgaXRlbXMgZnJvbSBpdC4gSXRcbiAqIGNvbnRpbnVlcyB0byBiZWhhdmUgbGlrZSB0aGlzIGZvciBzdWJzZXF1ZW50IGlubmVyIE9ic2VydmFibGVzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlJlcnVuIGFuIGludGVydmFsIE9ic2VydmFibGUgb24gZXZlcnkgY2xpY2sgZXZlbnQ8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogLy8gRWFjaCBjbGljayBldmVudCBpcyBtYXBwZWQgdG8gYW4gT2JzZXJ2YWJsZSB0aGF0IHRpY2tzIGV2ZXJ5IHNlY29uZFxuICogdmFyIGhpZ2hlck9yZGVyID0gY2xpY2tzLm1hcCgoZXYpID0+IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkpO1xuICogdmFyIHN3aXRjaGVkID0gaGlnaGVyT3JkZXIuc3dpdGNoKCk7XG4gKiAvLyBUaGUgb3V0Y29tZSBpcyB0aGF0IGBzd2l0Y2hlZGAgaXMgZXNzZW50aWFsbHkgYSB0aW1lciB0aGF0IHJlc3RhcnRzXG4gKiAvLyBvbiBldmVyeSBjbGljay4gVGhlIGludGVydmFsIE9ic2VydmFibGVzIGZyb20gb2xkZXIgY2xpY2tzIGRvIG5vdCBtZXJnZVxuICogLy8gd2l0aCB0aGUgY3VycmVudCBpbnRlcnZhbCBPYnNlcnZhYmxlLlxuICogc3dpdGNoZWQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGNvbWJpbmVBbGx9XG4gKiBAc2VlIHtAbGluayBjb25jYXRBbGx9XG4gKiBAc2VlIHtAbGluayBleGhhdXN0fVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hNYXB9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hNYXBUb31cbiAqIEBzZWUge0BsaW5rIHppcEFsbH1cbiAqXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlXG4gKiBPYnNlcnZhYmxlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIHN3aXRjaFxuICogQG5hbWUgc3dpdGNoXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBfc3dpdGNoKCkge1xuICAgIHJldHVybiBzd2l0Y2hBbGxfMS5zd2l0Y2hBbGwoKSh0aGlzKTtcbn1cbmV4cG9ydHMuX3N3aXRjaCA9IF9zd2l0Y2g7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2guanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgc3dpdGNoTWFwXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvc3dpdGNoTWFwJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBpbiB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlLCBlbWl0dGluZyB2YWx1ZXMgb25seSBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IHByb2plY3RlZCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5NYXBzIGVhY2ggdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSwgdGhlbiBmbGF0dGVucyBhbGwgb2ZcbiAqIHRoZXNlIGlubmVyIE9ic2VydmFibGVzIHVzaW5nIHtAbGluayBzd2l0Y2h9Ljwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3N3aXRjaE1hcC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBiYXNlZCBvbiBhcHBseWluZyBhIGZ1bmN0aW9uIHRoYXQgeW91XG4gKiBzdXBwbHkgdG8gZWFjaCBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB3aGVyZSB0aGF0IGZ1bmN0aW9uXG4gKiByZXR1cm5zIGFuIChzby1jYWxsZWQgXCJpbm5lclwiKSBPYnNlcnZhYmxlLiBFYWNoIHRpbWUgaXQgb2JzZXJ2ZXMgb25lIG9mIHRoZXNlXG4gKiBpbm5lciBPYnNlcnZhYmxlcywgdGhlIG91dHB1dCBPYnNlcnZhYmxlIGJlZ2lucyBlbWl0dGluZyB0aGUgaXRlbXMgZW1pdHRlZCBieVxuICogdGhhdCBpbm5lciBPYnNlcnZhYmxlLiBXaGVuIGEgbmV3IGlubmVyIE9ic2VydmFibGUgaXMgZW1pdHRlZCwgYHN3aXRjaE1hcGBcbiAqIHN0b3BzIGVtaXR0aW5nIGl0ZW1zIGZyb20gdGhlIGVhcmxpZXItZW1pdHRlZCBpbm5lciBPYnNlcnZhYmxlIGFuZCBiZWdpbnNcbiAqIGVtaXR0aW5nIGl0ZW1zIGZyb20gdGhlIG5ldyBvbmUuIEl0IGNvbnRpbnVlcyB0byBiZWhhdmUgbGlrZSB0aGlzIGZvclxuICogc3Vic2VxdWVudCBpbm5lciBPYnNlcnZhYmxlcy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5SZXJ1biBhbiBpbnRlcnZhbCBPYnNlcnZhYmxlIG9uIGV2ZXJ5IGNsaWNrIGV2ZW50PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3Muc3dpdGNoTWFwKChldikgPT4gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcH1cbiAqIEBzZWUge0BsaW5rIGV4aGF1c3RNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcFRvfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsID9pbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZUlucHV0fSBwcm9qZWN0IEEgZnVuY3Rpb25cbiAqIHRoYXQsIHdoZW4gYXBwbGllZCB0byBhbiBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCByZXR1cm5zIGFuXG4gKiBPYnNlcnZhYmxlLlxuICogQHBhcmFtIHtmdW5jdGlvbihvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBJLCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcik6IGFueX0gW3Jlc3VsdFNlbGVjdG9yXVxuICogQSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYmFzZWQgb24gdGhlIHZhbHVlc1xuICogYW5kIHRoZSBpbmRpY2VzIG9mIHRoZSBzb3VyY2UgKG91dGVyKSBlbWlzc2lvbiBhbmQgdGhlIGlubmVyIE9ic2VydmFibGVcbiAqIGVtaXNzaW9uLiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYG91dGVyVmFsdWVgOiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHNvdXJjZVxuICogLSBgaW5uZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIC0gYG91dGVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lckluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZVxuICogcHJvamVjdGlvbiBmdW5jdGlvbiAoYW5kIHRoZSBvcHRpb25hbCBgcmVzdWx0U2VsZWN0b3JgKSB0byBlYWNoIGl0ZW0gZW1pdHRlZFxuICogYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGFuZCB0YWtpbmcgb25seSB0aGUgdmFsdWVzIGZyb20gdGhlIG1vc3QgcmVjZW50bHlcbiAqIHByb2plY3RlZCBpbm5lciBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBzd2l0Y2hNYXBcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHN3aXRjaE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpKHRoaXMpO1xufVxuZXhwb3J0cy5zd2l0Y2hNYXAgPSBzd2l0Y2hNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hNYXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgc3dpdGNoTWFwVG9fMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy9zd2l0Y2hNYXBUbycpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUHJvamVjdHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gdGhlIHNhbWUgT2JzZXJ2YWJsZSB3aGljaCBpcyBmbGF0dGVuZWQgbXVsdGlwbGVcbiAqIHRpbWVzIHdpdGgge0BsaW5rIHN3aXRjaH0gaW4gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIHN3aXRjaE1hcH0sIGJ1dCBtYXBzIGVhY2ggdmFsdWVcbiAqIGFsd2F5cyB0byB0aGUgc2FtZSBpbm5lciBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3N3aXRjaE1hcFRvLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIE1hcHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gdGhlIGdpdmVuIE9ic2VydmFibGUgYGlubmVyT2JzZXJ2YWJsZWAgcmVnYXJkbGVzc1xuICogb2YgdGhlIHNvdXJjZSB2YWx1ZSwgYW5kIHRoZW4gZmxhdHRlbnMgdGhvc2UgcmVzdWx0aW5nIE9ic2VydmFibGVzIGludG8gb25lXG4gKiBzaW5nbGUgT2JzZXJ2YWJsZSwgd2hpY2ggaXMgdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGVzXG4gKiBlbWl0cyB2YWx1ZXMgb25seSBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgaW5zdGFuY2Ugb2ZcbiAqIGBpbm5lck9ic2VydmFibGVgLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlJlcnVuIGFuIGludGVydmFsIE9ic2VydmFibGUgb24gZXZlcnkgY2xpY2sgZXZlbnQ8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5zd2l0Y2hNYXBUbyhSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwVG99XG4gKiBAc2VlIHtAbGluayBzd2l0Y2h9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcFRvfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBpbm5lck9ic2VydmFibGUgQW4gT2JzZXJ2YWJsZSB0byByZXBsYWNlIGVhY2ggdmFsdWUgZnJvbVxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHBhcmFtIHtmdW5jdGlvbihvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBJLCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcik6IGFueX0gW3Jlc3VsdFNlbGVjdG9yXVxuICogQSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYmFzZWQgb24gdGhlIHZhbHVlc1xuICogYW5kIHRoZSBpbmRpY2VzIG9mIHRoZSBzb3VyY2UgKG91dGVyKSBlbWlzc2lvbiBhbmQgdGhlIGlubmVyIE9ic2VydmFibGVcbiAqIGVtaXNzaW9uLiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYG91dGVyVmFsdWVgOiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHNvdXJjZVxuICogLSBgaW5uZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIC0gYG91dGVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lckluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBmcm9tIHRoZSBnaXZlblxuICogYGlubmVyT2JzZXJ2YWJsZWAgKGFuZCBvcHRpb25hbGx5IHRyYW5zZm9ybWVkIHRocm91Z2ggYHJlc3VsdFNlbGVjdG9yYCkgZXZlcnlcbiAqIHRpbWUgYSB2YWx1ZSBpcyBlbWl0dGVkIG9uIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYW5kIHRha2luZyBvbmx5IHRoZSB2YWx1ZXNcbiAqIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgcHJvamVjdGVkIGlubmVyIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIHN3aXRjaE1hcFRvXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzd2l0Y2hNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHN3aXRjaE1hcFRvXzEuc3dpdGNoTWFwVG8oaW5uZXJPYnNlcnZhYmxlLCByZXN1bHRTZWxlY3RvcikodGhpcyk7XG59XG5leHBvcnRzLnN3aXRjaE1hcFRvID0gc3dpdGNoTWFwVG87XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hNYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB0YWtlXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvdGFrZScpO1xuLyoqXG4gKiBFbWl0cyBvbmx5IHRoZSBmaXJzdCBgY291bnRgIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+VGFrZXMgdGhlIGZpcnN0IGBjb3VudGAgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSwgdGhlblxuICogY29tcGxldGVzLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3Rha2UucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYHRha2VgIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIG9ubHkgdGhlIGZpcnN0IGBjb3VudGAgdmFsdWVzIGVtaXR0ZWRcbiAqIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS4gSWYgdGhlIHNvdXJjZSBlbWl0cyBmZXdlciB0aGFuIGBjb3VudGAgdmFsdWVzIHRoZW5cbiAqIGFsbCBvZiBpdHMgdmFsdWVzIGFyZSBlbWl0dGVkLiBBZnRlciB0aGF0LCBpdCBjb21wbGV0ZXMsIHJlZ2FyZGxlc3MgaWYgdGhlXG4gKiBzb3VyY2UgY29tcGxldGVzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlRha2UgdGhlIGZpcnN0IDUgc2Vjb25kcyBvZiBhbiBpbmZpbml0ZSAxLXNlY29uZCBpbnRlcnZhbCBPYnNlcnZhYmxlPC9jYXB0aW9uPlxuICogdmFyIGludGVydmFsID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKTtcbiAqIHZhciBmaXZlID0gaW50ZXJ2YWwudGFrZSg1KTtcbiAqIGZpdmUuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHRha2VMYXN0fVxuICogQHNlZSB7QGxpbmsgdGFrZVVudGlsfVxuICogQHNlZSB7QGxpbmsgdGFrZVdoaWxlfVxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqXG4gKiBAdGhyb3dzIHtBcmd1bWVudE91dE9mUmFuZ2VFcnJvcn0gV2hlbiB1c2luZyBgdGFrZShpKWAsIGl0IGRlbGl2ZXJzIGFuXG4gKiBBcmd1bWVudE91dE9yUmFuZ2VFcnJvciB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgIGNhbGxiYWNrIGlmIGBpIDwgMGAuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IFRoZSBtYXhpbXVtIG51bWJlciBvZiBgbmV4dGAgdmFsdWVzIHRvIGVtaXQuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgb25seSB0aGUgZmlyc3QgYGNvdW50YFxuICogdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBvciBhbGwgb2YgdGhlIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2VcbiAqIGlmIHRoZSBzb3VyY2UgZW1pdHMgZmV3ZXIgdGhhbiBgY291bnRgIHZhbHVlcy5cbiAqIEBtZXRob2QgdGFrZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gdGFrZShjb3VudCkge1xuICAgIHJldHVybiB0YWtlXzEudGFrZShjb3VudCkodGhpcyk7XG59XG5leHBvcnRzLnRha2UgPSB0YWtlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB0YWtlTGFzdF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3Rha2VMYXN0Jyk7XG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGxhc3QgYGNvdW50YCB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlJlbWVtYmVycyB0aGUgbGF0ZXN0IGBjb3VudGAgdmFsdWVzLCB0aGVuIGVtaXRzIHRob3NlXG4gKiBvbmx5IHdoZW4gdGhlIHNvdXJjZSBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvdGFrZUxhc3QucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYHRha2VMYXN0YCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhdCBtb3N0IHRoZSBsYXN0IGBjb3VudGAgdmFsdWVzXG4gKiBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS4gSWYgdGhlIHNvdXJjZSBlbWl0cyBmZXdlciB0aGFuIGBjb3VudGBcbiAqIHZhbHVlcyB0aGVuIGFsbCBvZiBpdHMgdmFsdWVzIGFyZSBlbWl0dGVkLiBUaGlzIG9wZXJhdG9yIG11c3Qgd2FpdCB1bnRpbCB0aGVcbiAqIGBjb21wbGV0ZWAgbm90aWZpY2F0aW9uIGVtaXNzaW9uIGZyb20gdGhlIHNvdXJjZSBpbiBvcmRlciB0byBlbWl0IHRoZSBgbmV4dGBcbiAqIHZhbHVlcyBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUsIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGlzIGltcG9zc2libGUgdG8ga25vd1xuICogd2hldGhlciBvciBub3QgbW9yZSB2YWx1ZXMgd2lsbCBiZSBlbWl0dGVkIG9uIHRoZSBzb3VyY2UuIEZvciB0aGlzIHJlYXNvbixcbiAqIGFsbCB2YWx1ZXMgYXJlIGVtaXR0ZWQgc3luY2hyb25vdXNseSwgZm9sbG93ZWQgYnkgdGhlIGNvbXBsZXRlIG5vdGlmaWNhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5UYWtlIHRoZSBsYXN0IDMgdmFsdWVzIG9mIGFuIE9ic2VydmFibGUgd2l0aCBtYW55IHZhbHVlczwvY2FwdGlvbj5cbiAqIHZhciBtYW55ID0gUnguT2JzZXJ2YWJsZS5yYW5nZSgxLCAxMDApO1xuICogdmFyIGxhc3RUaHJlZSA9IG1hbnkudGFrZUxhc3QoMyk7XG4gKiBsYXN0VGhyZWUuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKiBAc2VlIHtAbGluayB0YWtlVW50aWx9XG4gKiBAc2VlIHtAbGluayB0YWtlV2hpbGV9XG4gKiBAc2VlIHtAbGluayBza2lwfVxuICpcbiAqIEB0aHJvd3Mge0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yfSBXaGVuIHVzaW5nIGB0YWtlTGFzdChpKWAsIGl0IGRlbGl2ZXJzIGFuXG4gKiBBcmd1bWVudE91dE9yUmFuZ2VFcnJvciB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgIGNhbGxiYWNrIGlmIGBpIDwgMGAuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IFRoZSBtYXhpbXVtIG51bWJlciBvZiB2YWx1ZXMgdG8gZW1pdCBmcm9tIHRoZSBlbmQgb2ZcbiAqIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYXQgbW9zdCB0aGUgbGFzdCBjb3VudFxuICogdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCB0YWtlTGFzdFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gdGFrZUxhc3QoY291bnQpIHtcbiAgICByZXR1cm4gdGFrZUxhc3RfMS50YWtlTGFzdChjb3VudCkodGhpcyk7XG59XG5leHBvcnRzLnRha2VMYXN0ID0gdGFrZUxhc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlTGFzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB0YWtlVW50aWxfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy90YWtlVW50aWwnKTtcbi8qKlxuICogRW1pdHMgdGhlIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB1bnRpbCBhIGBub3RpZmllcmBcbiAqIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TGV0cyB2YWx1ZXMgcGFzcyB1bnRpbCBhIHNlY29uZCBPYnNlcnZhYmxlLFxuICogYG5vdGlmaWVyYCwgZW1pdHMgc29tZXRoaW5nLiBUaGVuLCBpdCBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvdGFrZVVudGlsLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGB0YWtlVW50aWxgIHN1YnNjcmliZXMgYW5kIGJlZ2lucyBtaXJyb3JpbmcgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJdCBhbHNvXG4gKiBtb25pdG9ycyBhIHNlY29uZCBPYnNlcnZhYmxlLCBgbm90aWZpZXJgIHRoYXQgeW91IHByb3ZpZGUuIElmIHRoZSBgbm90aWZpZXJgXG4gKiBlbWl0cyBhIHZhbHVlLCB0aGUgb3V0cHV0IE9ic2VydmFibGUgc3RvcHMgbWlycm9yaW5nIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZVxuICogYW5kIGNvbXBsZXRlcy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5UaWNrIGV2ZXJ5IHNlY29uZCB1bnRpbCB0aGUgZmlyc3QgY2xpY2sgaGFwcGVuczwvY2FwdGlvbj5cbiAqIHZhciBpbnRlcnZhbCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGludGVydmFsLnRha2VVbnRpbChjbGlja3MpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayB0YWtlfVxuICogQHNlZSB7QGxpbmsgdGFrZUxhc3R9XG4gKiBAc2VlIHtAbGluayB0YWtlV2hpbGV9XG4gKiBAc2VlIHtAbGluayBza2lwfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZX0gbm90aWZpZXIgVGhlIE9ic2VydmFibGUgd2hvc2UgZmlyc3QgZW1pdHRlZCB2YWx1ZSB3aWxsXG4gKiBjYXVzZSB0aGUgb3V0cHV0IE9ic2VydmFibGUgb2YgYHRha2VVbnRpbGAgdG8gc3RvcCBlbWl0dGluZyB2YWx1ZXMgZnJvbSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIHVudGlsIHN1Y2ggdGltZSBhcyBgbm90aWZpZXJgIGVtaXRzIGl0cyBmaXJzdCB2YWx1ZS5cbiAqIEBtZXRob2QgdGFrZVVudGlsXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB0YWtlVW50aWwobm90aWZpZXIpIHtcbiAgICByZXR1cm4gdGFrZVVudGlsXzEudGFrZVVudGlsKG5vdGlmaWVyKSh0aGlzKTtcbn1cbmV4cG9ydHMudGFrZVVudGlsID0gdGFrZVVudGlsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZVVudGlsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHRha2VXaGlsZV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3Rha2VXaGlsZScpO1xuLyoqXG4gKiBFbWl0cyB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgc28gbG9uZyBhcyBlYWNoIHZhbHVlIHNhdGlzZmllc1xuICogdGhlIGdpdmVuIGBwcmVkaWNhdGVgLCBhbmQgdGhlbiBjb21wbGV0ZXMgYXMgc29vbiBhcyB0aGlzIGBwcmVkaWNhdGVgIGlzIG5vdFxuICogc2F0aXNmaWVkLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5UYWtlcyB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIG9ubHkgd2hpbGUgdGhleSBwYXNzIHRoZVxuICogY29uZGl0aW9uIGdpdmVuLiBXaGVuIHRoZSBmaXJzdCB2YWx1ZSBkb2VzIG5vdCBzYXRpc2Z5LCBpdCBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvdGFrZVdoaWxlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGB0YWtlV2hpbGVgIHN1YnNjcmliZXMgYW5kIGJlZ2lucyBtaXJyb3JpbmcgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBFYWNoIHZhbHVlXG4gKiBlbWl0dGVkIG9uIHRoZSBzb3VyY2UgaXMgZ2l2ZW4gdG8gdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYVxuICogYm9vbGVhbiwgcmVwcmVzZW50aW5nIGEgY29uZGl0aW9uIHRvIGJlIHNhdGlzZmllZCBieSB0aGUgc291cmNlIHZhbHVlcy4gVGhlXG4gKiBvdXRwdXQgT2JzZXJ2YWJsZSBlbWl0cyB0aGUgc291cmNlIHZhbHVlcyB1bnRpbCBzdWNoIHRpbWUgYXMgdGhlIGBwcmVkaWNhdGVgXG4gKiByZXR1cm5zIGZhbHNlLCBhdCB3aGljaCBwb2ludCBgdGFrZVdoaWxlYCBzdG9wcyBtaXJyb3JpbmcgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBhbmQgY29tcGxldGVzIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IGNsaWNrIGV2ZW50cyBvbmx5IHdoaWxlIHRoZSBjbGllbnRYIHByb3BlcnR5IGlzIGdyZWF0ZXIgdGhhbiAyMDA8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy50YWtlV2hpbGUoZXYgPT4gZXYuY2xpZW50WCA+IDIwMCk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKiBAc2VlIHtAbGluayB0YWtlTGFzdH1cbiAqIEBzZWUge0BsaW5rIHRha2VVbnRpbH1cbiAqIEBzZWUge0BsaW5rIHNraXB9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW59IHByZWRpY2F0ZSBBIGZ1bmN0aW9uIHRoYXRcbiAqIGV2YWx1YXRlcyBhIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGFuZCByZXR1cm5zIGEgYm9vbGVhbi5cbiAqIEFsc28gdGFrZXMgdGhlICh6ZXJvLWJhc2VkKSBpbmRleCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIHNvIGxvbmcgYXMgZWFjaCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbiBkZWZpbmVkIGJ5IHRoZVxuICogYHByZWRpY2F0ZWAsIHRoZW4gY29tcGxldGVzLlxuICogQG1ldGhvZCB0YWtlV2hpbGVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHRha2VXaGlsZShwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gdGFrZVdoaWxlXzEudGFrZVdoaWxlKHByZWRpY2F0ZSkodGhpcyk7XG59XG5leHBvcnRzLnRha2VXaGlsZSA9IHRha2VXaGlsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2VXaGlsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB0aHJvdHRsZV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3Rocm90dGxlJyk7XG4vKipcbiAqIEVtaXRzIGEgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIHRoZW4gaWdub3JlcyBzdWJzZXF1ZW50IHNvdXJjZVxuICogdmFsdWVzIGZvciBhIGR1cmF0aW9uIGRldGVybWluZWQgYnkgYW5vdGhlciBPYnNlcnZhYmxlLCB0aGVuIHJlcGVhdHMgdGhpc1xuICogcHJvY2Vzcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayB0aHJvdHRsZVRpbWV9LCBidXQgdGhlIHNpbGVuY2luZ1xuICogZHVyYXRpb24gaXMgZGV0ZXJtaW5lZCBieSBhIHNlY29uZCBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3Rocm90dGxlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGB0aHJvdHRsZWAgZW1pdHMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGVcbiAqIHdoZW4gaXRzIGludGVybmFsIHRpbWVyIGlzIGRpc2FibGVkLCBhbmQgaWdub3JlcyBzb3VyY2UgdmFsdWVzIHdoZW4gdGhlIHRpbWVyXG4gKiBpcyBlbmFibGVkLiBJbml0aWFsbHksIHRoZSB0aW1lciBpcyBkaXNhYmxlZC4gQXMgc29vbiBhcyB0aGUgZmlyc3Qgc291cmNlXG4gKiB2YWx1ZSBhcnJpdmVzLCBpdCBpcyBmb3J3YXJkZWQgdG8gdGhlIG91dHB1dCBPYnNlcnZhYmxlLCBhbmQgdGhlbiB0aGUgdGltZXJcbiAqIGlzIGVuYWJsZWQgYnkgY2FsbGluZyB0aGUgYGR1cmF0aW9uU2VsZWN0b3JgIGZ1bmN0aW9uIHdpdGggdGhlIHNvdXJjZSB2YWx1ZSxcbiAqIHdoaWNoIHJldHVybnMgdGhlIFwiZHVyYXRpb25cIiBPYnNlcnZhYmxlLiBXaGVuIHRoZSBkdXJhdGlvbiBPYnNlcnZhYmxlIGVtaXRzIGFcbiAqIHZhbHVlIG9yIGNvbXBsZXRlcywgdGhlIHRpbWVyIGlzIGRpc2FibGVkLCBhbmQgdGhpcyBwcm9jZXNzIHJlcGVhdHMgZm9yIHRoZVxuICogbmV4dCBzb3VyY2UgdmFsdWUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCBjbGlja3MgYXQgYSByYXRlIG9mIGF0IG1vc3Qgb25lIGNsaWNrIHBlciBzZWNvbmQ8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy50aHJvdHRsZShldiA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXR9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5V2hlbn1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlVGltZX1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBUKTogU3Vic2NyaWJhYmxlT3JQcm9taXNlfSBkdXJhdGlvblNlbGVjdG9yIEEgZnVuY3Rpb25cbiAqIHRoYXQgcmVjZWl2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgZm9yIGNvbXB1dGluZyB0aGUgc2lsZW5jaW5nXG4gKiBkdXJhdGlvbiBmb3IgZWFjaCBzb3VyY2UgdmFsdWUsIHJldHVybmVkIGFzIGFuIE9ic2VydmFibGUgb3IgYSBQcm9taXNlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGRlZmluZSBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2AgYmVoYXZpb3IuIERlZmF1bHRzXG4gKiB0byBgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogZmFsc2UgfWAuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgcGVyZm9ybXMgdGhlIHRocm90dGxlIG9wZXJhdGlvbiB0b1xuICogbGltaXQgdGhlIHJhdGUgb2YgZW1pc3Npb25zIGZyb20gdGhlIHNvdXJjZS5cbiAqIEBtZXRob2QgdGhyb3R0bGVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSB0aHJvdHRsZV8xLmRlZmF1bHRUaHJvdHRsZUNvbmZpZzsgfVxuICAgIHJldHVybiB0aHJvdHRsZV8xLnRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZykodGhpcyk7XG59XG5leHBvcnRzLnRocm90dGxlID0gdGhyb3R0bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG52YXIgdGhyb3R0bGVfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy90aHJvdHRsZScpO1xudmFyIHRocm90dGxlVGltZV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3Rocm90dGxlVGltZScpO1xuLyoqXG4gKiBFbWl0cyBhIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB0aGVuIGlnbm9yZXMgc3Vic2VxdWVudCBzb3VyY2VcbiAqIHZhbHVlcyBmb3IgYGR1cmF0aW9uYCBtaWxsaXNlY29uZHMsIHRoZW4gcmVwZWF0cyB0aGlzIHByb2Nlc3MuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkxldHMgYSB2YWx1ZSBwYXNzLCB0aGVuIGlnbm9yZXMgc291cmNlIHZhbHVlcyBmb3IgdGhlXG4gKiBuZXh0IGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3Rocm90dGxlVGltZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgdGhyb3R0bGVUaW1lYCBlbWl0cyB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZVxuICogd2hlbiBpdHMgaW50ZXJuYWwgdGltZXIgaXMgZGlzYWJsZWQsIGFuZCBpZ25vcmVzIHNvdXJjZSB2YWx1ZXMgd2hlbiB0aGUgdGltZXJcbiAqIGlzIGVuYWJsZWQuIEluaXRpYWxseSwgdGhlIHRpbWVyIGlzIGRpc2FibGVkLiBBcyBzb29uIGFzIHRoZSBmaXJzdCBzb3VyY2VcbiAqIHZhbHVlIGFycml2ZXMsIGl0IGlzIGZvcndhcmRlZCB0byB0aGUgb3V0cHV0IE9ic2VydmFibGUsIGFuZCB0aGVuIHRoZSB0aW1lclxuICogaXMgZW5hYmxlZC4gQWZ0ZXIgYGR1cmF0aW9uYCBtaWxsaXNlY29uZHMgKG9yIHRoZSB0aW1lIHVuaXQgZGV0ZXJtaW5lZFxuICogaW50ZXJuYWxseSBieSB0aGUgb3B0aW9uYWwgYHNjaGVkdWxlcmApIGhhcyBwYXNzZWQsIHRoZSB0aW1lciBpcyBkaXNhYmxlZCxcbiAqIGFuZCB0aGlzIHByb2Nlc3MgcmVwZWF0cyBmb3IgdGhlIG5leHQgc291cmNlIHZhbHVlLiBPcHRpb25hbGx5IHRha2VzIGFcbiAqIHtAbGluayBJU2NoZWR1bGVyfSBmb3IgbWFuYWdpbmcgdGltZXJzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgY2xpY2tzIGF0IGEgcmF0ZSBvZiBhdCBtb3N0IG9uZSBjbGljayBwZXIgc2Vjb25kPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3MudGhyb3R0bGVUaW1lKDEwMDApO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdFRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWxheX1cbiAqIEBzZWUge0BsaW5rIHNhbXBsZVRpbWV9XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZX1cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gVGltZSB0byB3YWl0IGJlZm9yZSBlbWl0dGluZyBhbm90aGVyIHZhbHVlIGFmdGVyXG4gKiBlbWl0dGluZyB0aGUgbGFzdCB2YWx1ZSwgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzIG9yIHRoZSB0aW1lIHVuaXQgZGV0ZXJtaW5lZFxuICogaW50ZXJuYWxseSBieSB0aGUgb3B0aW9uYWwgYHNjaGVkdWxlcmAuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1hc3luY10gVGhlIHtAbGluayBJU2NoZWR1bGVyfSB0byB1c2UgZm9yXG4gKiBtYW5hZ2luZyB0aGUgdGltZXJzIHRoYXQgaGFuZGxlIHRoZSB0aHJvdHRsaW5nLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IHBlcmZvcm1zIHRoZSB0aHJvdHRsZSBvcGVyYXRpb24gdG9cbiAqIGxpbWl0IHRoZSByYXRlIG9mIGVtaXNzaW9ucyBmcm9tIHRoZSBzb3VyY2UuXG4gKiBAbWV0aG9kIHRocm90dGxlVGltZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGVUaW1lKGR1cmF0aW9uLCBzY2hlZHVsZXIsIGNvbmZpZykge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jOyB9XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IHRocm90dGxlXzEuZGVmYXVsdFRocm90dGxlQ29uZmlnOyB9XG4gICAgcmV0dXJuIHRocm90dGxlVGltZV8xLnRocm90dGxlVGltZShkdXJhdGlvbiwgc2NoZWR1bGVyLCBjb25maWcpKHRoaXMpO1xufVxuZXhwb3J0cy50aHJvdHRsZVRpbWUgPSB0aHJvdHRsZVRpbWU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsZVRpbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xudmFyIHRpbWVJbnRlcnZhbF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3RpbWVJbnRlcnZhbCcpO1xuZXhwb3J0cy5UaW1lSW50ZXJ2YWwgPSB0aW1lSW50ZXJ2YWxfMS5UaW1lSW50ZXJ2YWw7XG4vKipcbiAqIEBwYXJhbSBzY2hlZHVsZXJcbiAqIEByZXR1cm4ge09ic2VydmFibGU8VGltZUludGVydmFsPGFueT4+fFdlYlNvY2tldFN1YmplY3Q8VD58T2JzZXJ2YWJsZTxUPn1cbiAqIEBtZXRob2QgdGltZUludGVydmFsXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB0aW1lSW50ZXJ2YWwoc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmM7IH1cbiAgICByZXR1cm4gdGltZUludGVydmFsXzEudGltZUludGVydmFsKHNjaGVkdWxlcikodGhpcyk7XG59XG5leHBvcnRzLnRpbWVJbnRlcnZhbCA9IHRpbWVJbnRlcnZhbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVJbnRlcnZhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG52YXIgdGltZW91dF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3RpbWVvdXQnKTtcbi8qKlxuICpcbiAqIEVycm9ycyBpZiBPYnNlcnZhYmxlIGRvZXMgbm90IGVtaXQgYSB2YWx1ZSBpbiBnaXZlbiB0aW1lIHNwYW4uXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlRpbWVvdXRzIG9uIE9ic2VydmFibGUgdGhhdCBkb2Vzbid0IGVtaXQgdmFsdWVzIGZhc3QgZW5vdWdoLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3RpbWVvdXQucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYHRpbWVvdXRgIG9wZXJhdG9yIGFjY2VwdHMgYXMgYW4gYXJndW1lbnQgZWl0aGVyIGEgbnVtYmVyIG9yIGEgRGF0ZS5cbiAqXG4gKiBJZiBudW1iZXIgd2FzIHByb3ZpZGVkLCBpdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBiZWhhdmVzIGxpa2UgYSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIHVubGVzcyB0aGVyZSBpcyBhIHBlcmlvZCBvZiB0aW1lIHdoZXJlIHRoZXJlIGlzIG5vIHZhbHVlIGVtaXR0ZWQuXG4gKiBTbyBpZiB5b3UgcHJvdmlkZSBgMTAwYCBhcyBhcmd1bWVudCBhbmQgZmlyc3QgdmFsdWUgY29tZXMgYWZ0ZXIgNTBtcyBmcm9tXG4gKiB0aGUgbW9tZW50IG9mIHN1YnNjcmlwdGlvbiwgdGhpcyB2YWx1ZSB3aWxsIGJlIHNpbXBseSByZS1lbWl0dGVkIGJ5IHRoZSByZXN1bHRpbmdcbiAqIE9ic2VydmFibGUuIElmIGhvd2V2ZXIgYWZ0ZXIgdGhhdCAxMDBtcyBwYXNzZXMgd2l0aG91dCBhIHNlY29uZCB2YWx1ZSBiZWluZyBlbWl0dGVkLFxuICogc3RyZWFtIHdpbGwgZW5kIHdpdGggYW4gZXJyb3IgYW5kIHNvdXJjZSBPYnNlcnZhYmxlIHdpbGwgYmUgdW5zdWJzY3JpYmVkLlxuICogVGhlc2UgY2hlY2tzIGFyZSBwZXJmb3JtZWQgdGhyb3VnaG91dCB3aG9sZSBsaWZlY3ljbGUgb2YgT2JzZXJ2YWJsZSAtIGZyb20gdGhlIG1vbWVudFxuICogaXQgd2FzIHN1YnNjcmliZWQgdG8sIHVudGlsIGl0IGNvbXBsZXRlcyBvciBlcnJvcnMgaXRzZWxmLiBUaHVzIGV2ZXJ5IHZhbHVlIG11c3QgYmVcbiAqIGVtaXR0ZWQgd2l0aGluIHNwZWNpZmllZCBwZXJpb2Qgc2luY2UgcHJldmlvdXMgdmFsdWUuXG4gKlxuICogSWYgcHJvdmlkZWQgYXJndW1lbnQgd2FzIERhdGUsIHJldHVybmVkIE9ic2VydmFibGUgYmVoYXZlcyBkaWZmZXJlbnRseS4gSXQgdGhyb3dzXG4gKiBpZiBPYnNlcnZhYmxlIGRpZCBub3QgY29tcGxldGUgYmVmb3JlIHByb3ZpZGVkIERhdGUuIFRoaXMgbWVhbnMgdGhhdCBwZXJpb2RzIGJldHdlZW5cbiAqIGVtaXNzaW9uIG9mIHBhcnRpY3VsYXIgdmFsdWVzIGRvIG5vdCBtYXR0ZXIgaW4gdGhpcyBjYXNlLiBJZiBPYnNlcnZhYmxlIGRpZCBub3QgY29tcGxldGVcbiAqIGJlZm9yZSBwcm92aWRlZCBEYXRlLCBzb3VyY2UgT2JzZXJ2YWJsZSB3aWxsIGJlIHVuc3Vic2NyaWJlZC4gT3RoZXIgdGhhbiB0aGF0LCByZXN1bHRpbmdcbiAqIHN0cmVhbSBiZWhhdmVzIGp1c3QgYXMgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogYHRpbWVvdXRgIGFjY2VwdHMgYWxzbyBhIFNjaGVkdWxlciBhcyBhIHNlY29uZCBwYXJhbWV0ZXIuIEl0IGlzIHVzZWQgdG8gc2NoZWR1bGUgbW9tZW50IChvciBtb21lbnRzKVxuICogd2hlbiByZXR1cm5lZCBPYnNlcnZhYmxlIHdpbGwgY2hlY2sgaWYgc291cmNlIHN0cmVhbSBlbWl0dGVkIHZhbHVlIG9yIGNvbXBsZXRlZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5DaGVjayBpZiB0aWNrcyBhcmUgZW1pdHRlZCB3aXRoaW4gY2VydGFpbiB0aW1lc3BhbjwvY2FwdGlvbj5cbiAqIGNvbnN0IHNlY29uZHMgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICpcbiAqIHNlY29uZHMudGltZW91dCgxMTAwKSAvLyBMZXQncyB1c2UgYmlnZ2VyIHRpbWVzcGFuIHRvIGJlIHNhZmUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgYGludGVydmFsYCBtaWdodCBmaXJlIGEgYml0IGxhdGVyIHRoZW4gc2NoZWR1bGVkLlxuICogLnN1YnNjcmliZShcbiAqICAgICB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksIC8vIFdpbGwgZW1pdCBudW1iZXJzIGp1c3QgYXMgcmVndWxhciBgaW50ZXJ2YWxgIHdvdWxkLlxuICogICAgIGVyciA9PiBjb25zb2xlLmxvZyhlcnIpIC8vIFdpbGwgbmV2ZXIgYmUgY2FsbGVkLlxuICogKTtcbiAqXG4gKiBzZWNvbmRzLnRpbWVvdXQoOTAwKS5zdWJzY3JpYmUoXG4gKiAgICAgdmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpLCAvLyBXaWxsIG5ldmVyIGJlIGNhbGxlZC5cbiAqICAgICBlcnIgPT4gY29uc29sZS5sb2coZXJyKSAvLyBXaWxsIGVtaXQgZXJyb3IgYmVmb3JlIGV2ZW4gZmlyc3QgdmFsdWUgaXMgZW1pdHRlZCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBpdCBkaWQgbm90IGFycml2ZSB3aXRoaW4gOTAwbXMgcGVyaW9kLlxuICogKTtcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Vc2UgRGF0ZSB0byBjaGVjayBpZiBPYnNlcnZhYmxlIGNvbXBsZXRlZDwvY2FwdGlvbj5cbiAqIGNvbnN0IHNlY29uZHMgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICpcbiAqIHNlY29uZHMudGltZW91dChuZXcgRGF0ZShcIkRlY2VtYmVyIDE3LCAyMDIwIDAzOjI0OjAwXCIpKVxuICogLnN1YnNjcmliZShcbiAqICAgICB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksIC8vIFdpbGwgZW1pdCB2YWx1ZXMgYXMgcmVndWxhciBgaW50ZXJ2YWxgIHdvdWxkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bnRpbCBEZWNlbWJlciAxNywgMjAyMCBhdCAwMzoyNDowMC5cbiAqICAgICBlcnIgPT4gY29uc29sZS5sb2coZXJyKSAvLyBPbiBEZWNlbWJlciAxNywgMjAyMCBhdCAwMzoyNDowMCBpdCB3aWxsIGVtaXQgYW4gZXJyb3IsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgT2JzZXJ2YWJsZSBkaWQgbm90IGNvbXBsZXRlIGJ5IHRoZW4uXG4gKiApO1xuICpcbiAqIEBzZWUge0BsaW5rIHRpbWVvdXRXaXRofVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGR1ZSBOdW1iZXIgc3BlY2lmeWluZyBwZXJpb2Qgd2l0aGluIHdoaWNoIE9ic2VydmFibGUgbXVzdCBlbWl0IHZhbHVlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIG9yIERhdGUgc3BlY2lmeWluZyBiZWZvcmUgd2hlbiBPYnNlcnZhYmxlIHNob3VsZCBjb21wbGV0ZVxuICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXJdIFNjaGVkdWxlciBjb250cm9sbGluZyB3aGVuIHRpbWVvdXQgY2hlY2tzIG9jY3VyLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgYmVoYXZpb3VyIG9mIHNvdXJjZSwgdW5sZXNzIHRpbWVvdXQgY2hlY2tzIGZhaWwuXG4gKiBAbWV0aG9kIHRpbWVvdXRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHRpbWVvdXQoZHVlLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHJldHVybiB0aW1lb3V0XzEudGltZW91dChkdWUsIHNjaGVkdWxlcikodGhpcyk7XG59XG5leHBvcnRzLnRpbWVvdXQgPSB0aW1lb3V0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG52YXIgdGltZW91dFdpdGhfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy90aW1lb3V0V2l0aCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICpcbiAqIEVycm9ycyBpZiBPYnNlcnZhYmxlIGRvZXMgbm90IGVtaXQgYSB2YWx1ZSBpbiBnaXZlbiB0aW1lIHNwYW4sIGluIGNhc2Ugb2Ygd2hpY2hcbiAqIHN1YnNjcmliZXMgdG8gdGhlIHNlY29uZCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGEgdmVyc2lvbiBvZiBgdGltZW91dGAgb3BlcmF0b3IgdGhhdCBsZXQncyB5b3Ugc3BlY2lmeSBmYWxsYmFjayBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3RpbWVvdXRXaXRoLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGB0aW1lb3V0V2l0aGAgaXMgYSB2YXJpYXRpb24gb2YgYHRpbWVvdXRgIG9wZXJhdG9yLiBJdCBiZWhhdmVzIGV4YWN0bHkgdGhlIHNhbWUsXG4gKiBzdGlsbCBhY2NlcHRpbmcgYXMgYSBmaXJzdCBhcmd1bWVudCBlaXRoZXIgYSBudW1iZXIgb3IgYSBEYXRlLCB3aGljaCBjb250cm9sIC0gcmVzcGVjdGl2ZWx5IC1cbiAqIHdoZW4gdmFsdWVzIG9mIHNvdXJjZSBPYnNlcnZhYmxlIHNob3VsZCBiZSBlbWl0dGVkIG9yIHdoZW4gaXQgc2hvdWxkIGNvbXBsZXRlLlxuICpcbiAqIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBpdCBhY2NlcHRzIGEgc2Vjb25kLCByZXF1aXJlZCBwYXJhbWV0ZXIuIFRoaXMgcGFyYW1ldGVyXG4gKiBzaG91bGQgYmUgYW4gT2JzZXJ2YWJsZSB3aGljaCB3aWxsIGJlIHN1YnNjcmliZWQgd2hlbiBzb3VyY2UgT2JzZXJ2YWJsZSBmYWlscyBhbnkgdGltZW91dCBjaGVjay5cbiAqIFNvIHdoZW5ldmVyIHJlZ3VsYXIgYHRpbWVvdXRgIHdvdWxkIGVtaXQgYW4gZXJyb3IsIGB0aW1lb3V0V2l0aGAgd2lsbCBpbnN0ZWFkIHN0YXJ0IHJlLWVtaXR0aW5nXG4gKiB2YWx1ZXMgZnJvbSBzZWNvbmQgT2JzZXJ2YWJsZS4gTm90ZSB0aGF0IHRoaXMgZmFsbGJhY2sgT2JzZXJ2YWJsZSBpcyBub3QgY2hlY2tlZCBmb3IgdGltZW91dHNcbiAqIGl0c2VsZiwgc28gaXQgY2FuIGVtaXQgdmFsdWVzIGFuZCBjb21wbGV0ZSBhdCBhcmJpdHJhcnkgcG9pbnRzIGluIHRpbWUuIEZyb20gdGhlIG1vbWVudCBvZiBhIHNlY29uZFxuICogc3Vic2NyaXB0aW9uLCBPYnNlcnZhYmxlIHJldHVybmVkIGZyb20gYHRpbWVvdXRXaXRoYCBzaW1wbHkgbWlycm9ycyBmYWxsYmFjayBzdHJlYW0uIFdoZW4gdGhhdFxuICogc3RyZWFtIGNvbXBsZXRlcywgaXQgY29tcGxldGVzIGFzIHdlbGwuXG4gKlxuICogU2NoZWR1bGVyLCB3aGljaCBpbiBjYXNlIG9mIGB0aW1lb3V0YCBpcyBwcm92aWRlZCBhcyBhcyBzZWNvbmQgYXJndW1lbnQsIGNhbiBiZSBzdGlsbCBwcm92aWRlZFxuICogaGVyZSAtIGFzIGEgdGhpcmQsIG9wdGlvbmFsIHBhcmFtZXRlci4gSXQgc3RpbGwgaXMgdXNlZCB0byBzY2hlZHVsZSB0aW1lb3V0IGNoZWNrcyBhbmQgLVxuICogYXMgYSBjb25zZXF1ZW5jZSAtIHdoZW4gc2Vjb25kIE9ic2VydmFibGUgd2lsbCBiZSBzdWJzY3JpYmVkLCBzaW5jZSBzdWJzY3JpcHRpb24gaGFwcGVuc1xuICogaW1tZWRpYXRlbHkgYWZ0ZXIgZmFpbGluZyBjaGVjay5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5BZGQgZmFsbGJhY2sgb2JzZXJ2YWJsZTwvY2FwdGlvbj5cbiAqIGNvbnN0IHNlY29uZHMgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICogY29uc3QgbWludXRlcyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoNjAgKiAxMDAwKTtcbiAqXG4gKiBzZWNvbmRzLnRpbWVvdXRXaXRoKDkwMCwgbWludXRlcylcbiAqICAgICAuc3Vic2NyaWJlKFxuICogICAgICAgICB2YWx1ZSA9PiBjb25zb2xlLmxvZyh2YWx1ZSksIC8vIEFmdGVyIDkwMG1zLCB3aWxsIHN0YXJ0IGVtaXR0aW5nIGBtaW51dGVzYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBmaXJzdCB2YWx1ZSBvZiBgc2Vjb25kc2Agd2lsbCBub3QgYXJyaXZlIGZhc3QgZW5vdWdoLlxuICogICAgICAgICBlcnIgPT4gY29uc29sZS5sb2coZXJyKSAvLyBXb3VsZCBiZSBjYWxsZWQgYWZ0ZXIgOTAwbXMgaW4gY2FzZSBvZiBgdGltZW91dGAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBoZXJlIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLlxuICogICAgICk7XG4gKlxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZHVlIE51bWJlciBzcGVjaWZ5aW5nIHBlcmlvZCB3aXRoaW4gd2hpY2ggT2JzZXJ2YWJsZSBtdXN0IGVtaXQgdmFsdWVzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgRGF0ZSBzcGVjaWZ5aW5nIGJlZm9yZSB3aGVuIE9ic2VydmFibGUgc2hvdWxkIGNvbXBsZXRlXG4gKiBAcGFyYW0ge09ic2VydmFibGU8VD59IHdpdGhPYnNlcnZhYmxlIE9ic2VydmFibGUgd2hpY2ggd2lsbCBiZSBzdWJzY3JpYmVkIGlmIHNvdXJjZSBmYWlscyB0aW1lb3V0IGNoZWNrLlxuICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXJdIFNjaGVkdWxlciBjb250cm9sbGluZyB3aGVuIHRpbWVvdXQgY2hlY2tzIG9jY3VyLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgYmVoYXZpb3VyIG9mIHNvdXJjZSBvciwgd2hlbiB0aW1lb3V0IGNoZWNrIGZhaWxzLCBvZiBhbiBPYnNlcnZhYmxlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGFzIGEgc2Vjb25kIHBhcmFtZXRlci5cbiAqIEBtZXRob2QgdGltZW91dFdpdGhcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHRpbWVvdXRXaXRoKGR1ZSwgd2l0aE9ic2VydmFibGUsIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jOyB9XG4gICAgcmV0dXJuIHRpbWVvdXRXaXRoXzEudGltZW91dFdpdGgoZHVlLCB3aXRoT2JzZXJ2YWJsZSwgc2NoZWR1bGVyKSh0aGlzKTtcbn1cbmV4cG9ydHMudGltZW91dFdpdGggPSB0aW1lb3V0V2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVvdXRXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKCcuLi9zY2hlZHVsZXIvYXN5bmMnKTtcbnZhciB0aW1lc3RhbXBfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy90aW1lc3RhbXAnKTtcbi8qKlxuICogQHBhcmFtIHNjaGVkdWxlclxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUaW1lc3RhbXA8YW55Pj58V2ViU29ja2V0U3ViamVjdDxUPnxPYnNlcnZhYmxlPFQ+fVxuICogQG1ldGhvZCB0aW1lc3RhbXBcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHRpbWVzdGFtcChzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHJldHVybiB0aW1lc3RhbXBfMS50aW1lc3RhbXAoc2NoZWR1bGVyKSh0aGlzKTtcbn1cbmV4cG9ydHMudGltZXN0YW1wID0gdGltZXN0YW1wO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXN0YW1wLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHRvQXJyYXlfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy90b0FycmF5Jyk7XG4vKipcbiAqIENvbGxlY3RzIGFsbCBzb3VyY2UgZW1pc3Npb25zIGFuZCBlbWl0cyB0aGVtIGFzIGFuIGFycmF5IHdoZW4gdGhlIHNvdXJjZSBjb21wbGV0ZXMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkdldCBhbGwgdmFsdWVzIGluc2lkZSBhbiBhcnJheSB3aGVuIHRoZSBzb3VyY2UgY29tcGxldGVzPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvdG9BcnJheS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgdG9BcnJheWAgd2lsbCB3YWl0IHVudGlsIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBjb21wbGV0ZXNcbiAqIGJlZm9yZSBlbWl0dGluZyB0aGUgYXJyYXkgY29udGFpbmluZyBhbGwgZW1pc3Npb25zLlxuICogV2hlbiB0aGUgc291cmNlIE9ic2VydmFibGUgZXJyb3JzIG5vIGFycmF5IHdpbGwgYmUgZW1pdHRlZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5DcmVhdGUgYXJyYXkgZnJvbSBpbnB1dDwvY2FwdGlvbj5cbiAqIGNvbnN0IGlucHV0ID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDApLnRha2UoNCk7XG4gKlxuICogaW5wdXQudG9BcnJheSgpXG4gKiAgIC5zdWJzY3JpYmUoYXJyID0+IGNvbnNvbGUubG9nKGFycikpOyAvLyBbMCwxLDIsM11cbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJ9XG4gKlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxhbnlbXT58V2ViU29ja2V0U3ViamVjdDxUPnxPYnNlcnZhYmxlPFQ+fVxuICogQG1ldGhvZCB0b0FycmF5XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHJldHVybiB0b0FycmF5XzEudG9BcnJheSgpKHRoaXMpO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvQXJyYXkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvd2luZG93Jyk7XG4vKipcbiAqIEJyYW5jaCBvdXQgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyBhcyBhIG5lc3RlZCBPYnNlcnZhYmxlIHdoZW5ldmVyXG4gKiBgd2luZG93Qm91bmRhcmllc2AgZW1pdHMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgYnVmZmVyfSwgYnV0IGVtaXRzIGEgbmVzdGVkIE9ic2VydmFibGVcbiAqIGluc3RlYWQgb2YgYW4gYXJyYXkuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvd2luZG93LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdpbmRvd3Mgb2YgaXRlbXMgaXQgY29sbGVjdHMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGUgZW1pdHMgY29ubmVjdGVkLCBub24tb3ZlcmxhcHBpbmdcbiAqIHdpbmRvd3MuIEl0IGVtaXRzIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgb3BlbnMgYSBuZXcgb25lIHdoZW5ldmVyIHRoZVxuICogT2JzZXJ2YWJsZSBgd2luZG93Qm91bmRhcmllc2AgZW1pdHMgYW4gaXRlbS4gQmVjYXVzZSBlYWNoIHdpbmRvdyBpcyBhblxuICogT2JzZXJ2YWJsZSwgdGhlIG91dHB1dCBpcyBhIGhpZ2hlci1vcmRlciBPYnNlcnZhYmxlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkluIGV2ZXJ5IHdpbmRvdyBvZiAxIHNlY29uZCBlYWNoLCBlbWl0IGF0IG1vc3QgMiBjbGljayBldmVudHM8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGludGVydmFsID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3Mud2luZG93KGludGVydmFsKVxuICogICAubWFwKHdpbiA9PiB3aW4udGFrZSgyKSkgLy8gZWFjaCB3aW5kb3cgaGFzIGF0IG1vc3QgMiBlbWlzc2lvbnNcbiAqICAgLm1lcmdlQWxsKCk7IC8vIGZsYXR0ZW4gdGhlIE9ic2VydmFibGUtb2YtT2JzZXJ2YWJsZXNcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgd2luZG93Q291bnR9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUaW1lfVxuICogQHNlZSB7QGxpbmsgd2luZG93VG9nZ2xlfVxuICogQHNlZSB7QGxpbmsgd2luZG93V2hlbn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcn1cbiAqXG4gKiBAcGFyYW0ge09ic2VydmFibGU8YW55Pn0gd2luZG93Qm91bmRhcmllcyBBbiBPYnNlcnZhYmxlIHRoYXQgY29tcGxldGVzIHRoZVxuICogcHJldmlvdXMgd2luZG93IGFuZCBzdGFydHMgYSBuZXcgd2luZG93LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxPYnNlcnZhYmxlPFQ+Pn0gQW4gT2JzZXJ2YWJsZSBvZiB3aW5kb3dzLCB3aGljaCBhcmVcbiAqIE9ic2VydmFibGVzIGVtaXR0aW5nIHZhbHVlcyBvZiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIHdpbmRvd1xuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gd2luZG93KHdpbmRvd0JvdW5kYXJpZXMpIHtcbiAgICByZXR1cm4gd2luZG93XzEud2luZG93KHdpbmRvd0JvdW5kYXJpZXMpKHRoaXMpO1xufVxuZXhwb3J0cy53aW5kb3cgPSB3aW5kb3c7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3cuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93Q291bnRfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy93aW5kb3dDb3VudCcpO1xuLyoqXG4gKiBCcmFuY2ggb3V0IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMgYXMgYSBuZXN0ZWQgT2JzZXJ2YWJsZSB3aXRoIGVhY2hcbiAqIG5lc3RlZCBPYnNlcnZhYmxlIGVtaXR0aW5nIGF0IG1vc3QgYHdpbmRvd1NpemVgIHZhbHVlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBidWZmZXJDb3VudH0sIGJ1dCBlbWl0cyBhIG5lc3RlZFxuICogT2JzZXJ2YWJsZSBpbnN0ZWFkIG9mIGFuIGFycmF5Ljwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3dpbmRvd0NvdW50LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdpbmRvd3Mgb2YgaXRlbXMgaXQgY29sbGVjdHMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGUgZW1pdHMgd2luZG93cyBldmVyeSBgc3RhcnRXaW5kb3dFdmVyeWBcbiAqIGl0ZW1zLCBlYWNoIGNvbnRhaW5pbmcgbm8gbW9yZSB0aGFuIGB3aW5kb3dTaXplYCBpdGVtcy4gV2hlbiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGNvbXBsZXRlcyBvciBlbmNvdW50ZXJzIGFuIGVycm9yLCB0aGUgb3V0cHV0IE9ic2VydmFibGUgZW1pdHNcbiAqIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgcHJvcGFnYXRlcyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gSWYgYHN0YXJ0V2luZG93RXZlcnlgIGlzIG5vdCBwcm92aWRlZCwgdGhlbiBuZXcgd2luZG93cyBhcmVcbiAqIHN0YXJ0ZWQgaW1tZWRpYXRlbHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzb3VyY2UgYW5kIHdoZW4gZWFjaCB3aW5kb3cgY29tcGxldGVzXG4gKiB3aXRoIHNpemUgYHdpbmRvd1NpemVgLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPklnbm9yZSBldmVyeSAzcmQgY2xpY2sgZXZlbnQsIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IG9uZTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLndpbmRvd0NvdW50KDMpXG4gKiAgIC5tYXAod2luID0+IHdpbi5za2lwKDEpKSAvLyBza2lwIGZpcnN0IG9mIGV2ZXJ5IDMgY2xpY2tzXG4gKiAgIC5tZXJnZUFsbCgpOyAvLyBmbGF0dGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPklnbm9yZSBldmVyeSAzcmQgY2xpY2sgZXZlbnQsIHN0YXJ0aW5nIGZyb20gdGhlIHRoaXJkIG9uZTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLndpbmRvd0NvdW50KDIsIDMpXG4gKiAgIC5tZXJnZUFsbCgpOyAvLyBmbGF0dGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHdpbmRvd31cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1RpbWV9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUb2dnbGV9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dXaGVufVxuICogQHNlZSB7QGxpbmsgYnVmZmVyQ291bnR9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpbmRvd1NpemUgVGhlIG1heGltdW0gbnVtYmVyIG9mIHZhbHVlcyBlbWl0dGVkIGJ5IGVhY2hcbiAqIHdpbmRvdy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnRXaW5kb3dFdmVyeV0gSW50ZXJ2YWwgYXQgd2hpY2ggdG8gc3RhcnQgYSBuZXcgd2luZG93LlxuICogRm9yIGV4YW1wbGUgaWYgYHN0YXJ0V2luZG93RXZlcnlgIGlzIGAyYCwgdGhlbiBhIG5ldyB3aW5kb3cgd2lsbCBiZSBzdGFydGVkXG4gKiBvbiBldmVyeSBvdGhlciB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UuIEEgbmV3IHdpbmRvdyBpcyBzdGFydGVkIGF0IHRoZVxuICogYmVnaW5uaW5nIG9mIHRoZSBzb3VyY2UgYnkgZGVmYXVsdC5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8T2JzZXJ2YWJsZTxUPj59IEFuIE9ic2VydmFibGUgb2Ygd2luZG93cywgd2hpY2ggaW4gdHVyblxuICogYXJlIE9ic2VydmFibGUgb2YgdmFsdWVzLlxuICogQG1ldGhvZCB3aW5kb3dDb3VudFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gd2luZG93Q291bnQod2luZG93U2l6ZSwgc3RhcnRXaW5kb3dFdmVyeSkge1xuICAgIGlmIChzdGFydFdpbmRvd0V2ZXJ5ID09PSB2b2lkIDApIHsgc3RhcnRXaW5kb3dFdmVyeSA9IDA7IH1cbiAgICByZXR1cm4gd2luZG93Q291bnRfMS53aW5kb3dDb3VudCh3aW5kb3dTaXplLCBzdGFydFdpbmRvd0V2ZXJ5KSh0aGlzKTtcbn1cbmV4cG9ydHMud2luZG93Q291bnQgPSB3aW5kb3dDb3VudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvd0NvdW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKCcuLi9zY2hlZHVsZXIvYXN5bmMnKTtcbnZhciBpc051bWVyaWNfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNOdW1lcmljJyk7XG52YXIgaXNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNTY2hlZHVsZXInKTtcbnZhciB3aW5kb3dUaW1lXzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvd2luZG93VGltZScpO1xuZnVuY3Rpb24gd2luZG93VGltZSh3aW5kb3dUaW1lU3Bhbikge1xuICAgIHZhciBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jO1xuICAgIHZhciB3aW5kb3dDcmVhdGlvbkludGVydmFsID0gbnVsbDtcbiAgICB2YXIgbWF4V2luZG93U2l6ZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICBpZiAoaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihhcmd1bWVudHNbM10pKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFyZ3VtZW50c1szXTtcbiAgICB9XG4gICAgaWYgKGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIoYXJndW1lbnRzWzJdKSkge1xuICAgICAgICBzY2hlZHVsZXIgPSBhcmd1bWVudHNbMl07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzTnVtZXJpY18xLmlzTnVtZXJpYyhhcmd1bWVudHNbMl0pKSB7XG4gICAgICAgIG1heFdpbmRvd1NpemUgPSBhcmd1bWVudHNbMl07XG4gICAgfVxuICAgIGlmIChpc1NjaGVkdWxlcl8xLmlzU2NoZWR1bGVyKGFyZ3VtZW50c1sxXSkpIHtcbiAgICAgICAgc2NoZWR1bGVyID0gYXJndW1lbnRzWzFdO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc051bWVyaWNfMS5pc051bWVyaWMoYXJndW1lbnRzWzFdKSkge1xuICAgICAgICB3aW5kb3dDcmVhdGlvbkludGVydmFsID0gYXJndW1lbnRzWzFdO1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93VGltZV8xLndpbmRvd1RpbWUod2luZG93VGltZVNwYW4sIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwsIG1heFdpbmRvd1NpemUsIHNjaGVkdWxlcikodGhpcyk7XG59XG5leHBvcnRzLndpbmRvd1RpbWUgPSB3aW5kb3dUaW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB3aW5kb3dUb2dnbGVfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy93aW5kb3dUb2dnbGUnKTtcbi8qKlxuICogQnJhbmNoIG91dCB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIGFzIGEgbmVzdGVkIE9ic2VydmFibGUgc3RhcnRpbmcgZnJvbVxuICogYW4gZW1pc3Npb24gZnJvbSBgb3BlbmluZ3NgIGFuZCBlbmRpbmcgd2hlbiB0aGUgb3V0cHV0IG9mIGBjbG9zaW5nU2VsZWN0b3JgXG4gKiBlbWl0cy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBidWZmZXJUb2dnbGV9LCBidXQgZW1pdHMgYSBuZXN0ZWRcbiAqIE9ic2VydmFibGUgaW5zdGVhZCBvZiBhbiBhcnJheS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy93aW5kb3dUb2dnbGUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2luZG93cyBvZiBpdGVtcyBpdCBjb2xsZWN0cyBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBlbWl0cyB3aW5kb3dzIHRoYXQgY29udGFpbiB0aG9zZSBpdGVtc1xuICogZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYmV0d2VlbiB0aGUgdGltZSB3aGVuIHRoZSBgb3BlbmluZ3NgXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGFuIGl0ZW0gYW5kIHdoZW4gdGhlIE9ic2VydmFibGUgcmV0dXJuZWQgYnlcbiAqIGBjbG9zaW5nU2VsZWN0b3JgIGVtaXRzIGFuIGl0ZW0uXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXZlcnkgb3RoZXIgc2Vjb25kLCBlbWl0IHRoZSBjbGljayBldmVudHMgZnJvbSB0aGUgbmV4dCA1MDBtczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgb3BlbmluZ3MgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy53aW5kb3dUb2dnbGUob3BlbmluZ3MsIGkgPT5cbiAqICAgaSAlIDIgPyBSeC5PYnNlcnZhYmxlLmludGVydmFsKDUwMCkgOiBSeC5PYnNlcnZhYmxlLmVtcHR5KClcbiAqICkubWVyZ2VBbGwoKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgd2luZG93fVxuICogQHNlZSB7QGxpbmsgd2luZG93Q291bnR9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUaW1lfVxuICogQHNlZSB7QGxpbmsgd2luZG93V2hlbn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRvZ2dsZX1cbiAqXG4gKiBAcGFyYW0ge09ic2VydmFibGU8Tz59IG9wZW5pbmdzIEFuIG9ic2VydmFibGUgb2Ygbm90aWZpY2F0aW9ucyB0byBzdGFydCBuZXdcbiAqIHdpbmRvd3MuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBPKTogT2JzZXJ2YWJsZX0gY2xvc2luZ1NlbGVjdG9yIEEgZnVuY3Rpb24gdGhhdCB0YWtlc1xuICogdGhlIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIGBvcGVuaW5nc2Agb2JzZXJ2YWJsZSBhbmQgcmV0dXJucyBhbiBPYnNlcnZhYmxlLFxuICogd2hpY2gsIHdoZW4gaXQgZW1pdHMgKGVpdGhlciBgbmV4dGAgb3IgYGNvbXBsZXRlYCksIHNpZ25hbHMgdGhhdCB0aGVcbiAqIGFzc29jaWF0ZWQgd2luZG93IHNob3VsZCBjb21wbGV0ZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8T2JzZXJ2YWJsZTxUPj59IEFuIG9ic2VydmFibGUgb2Ygd2luZG93cywgd2hpY2ggaW4gdHVyblxuICogYXJlIE9ic2VydmFibGVzLlxuICogQG1ldGhvZCB3aW5kb3dUb2dnbGVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHdpbmRvd1RvZ2dsZShvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHdpbmRvd1RvZ2dsZV8xLndpbmRvd1RvZ2dsZShvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSh0aGlzKTtcbn1cbmV4cG9ydHMud2luZG93VG9nZ2xlID0gd2luZG93VG9nZ2xlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VG9nZ2xlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHdpbmRvd1doZW5fMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy93aW5kb3dXaGVuJyk7XG4vKipcbiAqIEJyYW5jaCBvdXQgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyBhcyBhIG5lc3RlZCBPYnNlcnZhYmxlIHVzaW5nIGFcbiAqIGZhY3RvcnkgZnVuY3Rpb24gb2YgY2xvc2luZyBPYnNlcnZhYmxlcyB0byBkZXRlcm1pbmUgd2hlbiB0byBzdGFydCBhIG5ld1xuICogd2luZG93LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGJ1ZmZlcldoZW59LCBidXQgZW1pdHMgYSBuZXN0ZWRcbiAqIE9ic2VydmFibGUgaW5zdGVhZCBvZiBhbiBhcnJheS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy93aW5kb3dXaGVuLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdpbmRvd3Mgb2YgaXRlbXMgaXQgY29sbGVjdHMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGUgZW1pdHMgY29ubmVjdGVkLCBub24tb3ZlcmxhcHBpbmcgd2luZG93cy5cbiAqIEl0IGVtaXRzIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgb3BlbnMgYSBuZXcgb25lIHdoZW5ldmVyIHRoZSBPYnNlcnZhYmxlXG4gKiBwcm9kdWNlZCBieSB0aGUgc3BlY2lmaWVkIGBjbG9zaW5nU2VsZWN0b3JgIGZ1bmN0aW9uIGVtaXRzIGFuIGl0ZW0uIFRoZSBmaXJzdFxuICogd2luZG93IGlzIG9wZW5lZCBpbW1lZGlhdGVseSB3aGVuIHN1YnNjcmliaW5nIHRvIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IG9ubHkgdGhlIGZpcnN0IHR3byBjbGlja3MgZXZlbnRzIGluIGV2ZXJ5IHdpbmRvdyBvZiBbMS01XSByYW5kb20gc2Vjb25kczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzXG4gKiAgIC53aW5kb3dXaGVuKCgpID0+IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCArIE1hdGgucmFuZG9tKCkgKiA0MDAwKSlcbiAqICAgLm1hcCh3aW4gPT4gd2luLnRha2UoMikpIC8vIGVhY2ggd2luZG93IGhhcyBhdCBtb3N0IDIgZW1pc3Npb25zXG4gKiAgIC5tZXJnZUFsbCgpOyAvLyBmbGF0dGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHdpbmRvd31cbiAqIEBzZWUge0BsaW5rIHdpbmRvd0NvdW50fVxuICogQHNlZSB7QGxpbmsgd2luZG93VGltZX1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1RvZ2dsZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcldoZW59XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbigpOiBPYnNlcnZhYmxlfSBjbG9zaW5nU2VsZWN0b3IgQSBmdW5jdGlvbiB0aGF0IHRha2VzIG5vXG4gKiBhcmd1bWVudHMgYW5kIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgKG9uIGVpdGhlciBgbmV4dGAgb3JcbiAqIGBjb21wbGV0ZWApIHdoZW4gdG8gY2xvc2UgdGhlIHByZXZpb3VzIHdpbmRvdyBhbmQgc3RhcnQgYSBuZXcgb25lLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxPYnNlcnZhYmxlPFQ+Pn0gQW4gb2JzZXJ2YWJsZSBvZiB3aW5kb3dzLCB3aGljaCBpbiB0dXJuXG4gKiBhcmUgT2JzZXJ2YWJsZXMuXG4gKiBAbWV0aG9kIHdpbmRvd1doZW5cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHdpbmRvd1doZW4oY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHdpbmRvd1doZW5fMS53aW5kb3dXaGVuKGNsb3NpbmdTZWxlY3RvcikodGhpcyk7XG59XG5leHBvcnRzLndpbmRvd1doZW4gPSB3aW5kb3dXaGVuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB3aXRoTGF0ZXN0RnJvbV8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBDb21iaW5lcyB0aGUgc291cmNlIE9ic2VydmFibGUgd2l0aCBvdGhlciBPYnNlcnZhYmxlcyB0byBjcmVhdGUgYW4gT2JzZXJ2YWJsZVxuICogd2hvc2UgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGZyb20gdGhlIGxhdGVzdCB2YWx1ZXMgb2YgZWFjaCwgb25seSB3aGVuIHRoZVxuICogc291cmNlIGVtaXRzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5XaGVuZXZlciB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZSwgaXRcbiAqIGNvbXB1dGVzIGEgZm9ybXVsYSB1c2luZyB0aGF0IHZhbHVlIHBsdXMgdGhlIGxhdGVzdCB2YWx1ZXMgZnJvbSBvdGhlciBpbnB1dFxuICogT2JzZXJ2YWJsZXMsIHRoZW4gZW1pdHMgdGhlIG91dHB1dCBvZiB0aGF0IGZvcm11bGEuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvd2l0aExhdGVzdEZyb20ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYHdpdGhMYXRlc3RGcm9tYCBjb21iaW5lcyBlYWNoIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlICh0aGVcbiAqIGluc3RhbmNlKSB3aXRoIHRoZSBsYXRlc3QgdmFsdWVzIGZyb20gdGhlIG90aGVyIGlucHV0IE9ic2VydmFibGVzIG9ubHkgd2hlblxuICogdGhlIHNvdXJjZSBlbWl0cyBhIHZhbHVlLCBvcHRpb25hbGx5IHVzaW5nIGEgYHByb2plY3RgIGZ1bmN0aW9uIHRvIGRldGVybWluZVxuICogdGhlIHZhbHVlIHRvIGJlIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLiBBbGwgaW5wdXQgT2JzZXJ2YWJsZXMgbXVzdFxuICogZW1pdCBhdCBsZWFzdCBvbmUgdmFsdWUgYmVmb3JlIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSB3aWxsIGVtaXQgYSB2YWx1ZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5PbiBldmVyeSBjbGljayBldmVudCwgZW1pdCBhbiBhcnJheSB3aXRoIHRoZSBsYXRlc3QgdGltZXIgZXZlbnQgcGx1cyB0aGUgY2xpY2sgZXZlbnQ8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHRpbWVyID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3Mud2l0aExhdGVzdEZyb20odGltZXIpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBjb21iaW5lTGF0ZXN0fVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBvdGhlciBBbiBpbnB1dCBPYnNlcnZhYmxlIHRvIGNvbWJpbmUgd2l0aCB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBNb3JlIHRoYW4gb25lIGlucHV0IE9ic2VydmFibGVzIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9qZWN0XSBQcm9qZWN0aW9uIGZ1bmN0aW9uIGZvciBjb21iaW5pbmcgdmFsdWVzXG4gKiB0b2dldGhlci4gUmVjZWl2ZXMgYWxsIHZhbHVlcyBpbiBvcmRlciBvZiB0aGUgT2JzZXJ2YWJsZXMgcGFzc2VkLCB3aGVyZSB0aGVcbiAqIGZpcnN0IHBhcmFtZXRlciBpcyBhIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiAoZS5nLlxuICogYGEud2l0aExhdGVzdEZyb20oYiwgYywgKGExLCBiMSwgYzEpID0+IGExICsgYjEgKyBjMSlgKS4gSWYgdGhpcyBpcyBub3RcbiAqIHBhc3NlZCwgYXJyYXlzIHdpbGwgYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIHByb2plY3RlZCB2YWx1ZXMgZnJvbSB0aGUgbW9zdCByZWNlbnRcbiAqIHZhbHVlcyBmcm9tIGVhY2ggaW5wdXQgT2JzZXJ2YWJsZSwgb3IgYW4gYXJyYXkgb2YgdGhlIG1vc3QgcmVjZW50IHZhbHVlcyBmcm9tXG4gKiBlYWNoIGlucHV0IE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIHdpdGhMYXRlc3RGcm9tXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB3aXRoTGF0ZXN0RnJvbSgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiB3aXRoTGF0ZXN0RnJvbV8xLndpdGhMYXRlc3RGcm9tLmFwcGx5KHZvaWQgMCwgYXJncykodGhpcyk7XG59XG5leHBvcnRzLndpdGhMYXRlc3RGcm9tID0gd2l0aExhdGVzdEZyb207XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aXRoTGF0ZXN0RnJvbS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB6aXBfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy96aXAnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIEBwYXJhbSBvYnNlcnZhYmxlc1xuICogQHJldHVybiB7T2JzZXJ2YWJsZTxSPn1cbiAqIEBtZXRob2QgemlwXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB6aXBQcm90bygpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHppcF8xLnppcC5hcHBseSh2b2lkIDAsIG9ic2VydmFibGVzKSh0aGlzKTtcbn1cbmV4cG9ydHMuemlwUHJvdG8gPSB6aXBQcm90bztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciB6aXBBbGxfMSA9IHJlcXVpcmUoJy4uL29wZXJhdG9ycy96aXBBbGwnKTtcbi8qKlxuICogQHBhcmFtIHByb2plY3RcbiAqIEByZXR1cm4ge09ic2VydmFibGU8Uj58V2ViU29ja2V0U3ViamVjdDxUPnxPYnNlcnZhYmxlPFQ+fVxuICogQG1ldGhvZCB6aXBBbGxcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHppcEFsbChwcm9qZWN0KSB7XG4gICAgcmV0dXJuIHppcEFsbF8xLnppcEFsbChwcm9qZWN0KSh0aGlzKTtcbn1cbmV4cG9ydHMuemlwQWxsID0gemlwQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwQWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGF1ZGl0XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9hdWRpdCcpO1xuZXhwb3J0cy5hdWRpdCA9IGF1ZGl0XzEuYXVkaXQ7XG52YXIgYXVkaXRUaW1lXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9hdWRpdFRpbWUnKTtcbmV4cG9ydHMuYXVkaXRUaW1lID0gYXVkaXRUaW1lXzEuYXVkaXRUaW1lO1xudmFyIGJ1ZmZlcl8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvYnVmZmVyJyk7XG5leHBvcnRzLmJ1ZmZlciA9IGJ1ZmZlcl8xLmJ1ZmZlcjtcbnZhciBidWZmZXJDb3VudF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvYnVmZmVyQ291bnQnKTtcbmV4cG9ydHMuYnVmZmVyQ291bnQgPSBidWZmZXJDb3VudF8xLmJ1ZmZlckNvdW50O1xudmFyIGJ1ZmZlclRpbWVfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2J1ZmZlclRpbWUnKTtcbmV4cG9ydHMuYnVmZmVyVGltZSA9IGJ1ZmZlclRpbWVfMS5idWZmZXJUaW1lO1xudmFyIGJ1ZmZlclRvZ2dsZV8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvYnVmZmVyVG9nZ2xlJyk7XG5leHBvcnRzLmJ1ZmZlclRvZ2dsZSA9IGJ1ZmZlclRvZ2dsZV8xLmJ1ZmZlclRvZ2dsZTtcbnZhciBidWZmZXJXaGVuXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9idWZmZXJXaGVuJyk7XG5leHBvcnRzLmJ1ZmZlcldoZW4gPSBidWZmZXJXaGVuXzEuYnVmZmVyV2hlbjtcbnZhciBjYXRjaEVycm9yXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9jYXRjaEVycm9yJyk7XG5leHBvcnRzLmNhdGNoRXJyb3IgPSBjYXRjaEVycm9yXzEuY2F0Y2hFcnJvcjtcbnZhciBjb21iaW5lQWxsXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9jb21iaW5lQWxsJyk7XG5leHBvcnRzLmNvbWJpbmVBbGwgPSBjb21iaW5lQWxsXzEuY29tYmluZUFsbDtcbnZhciBjb21iaW5lTGF0ZXN0XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0Jyk7XG5leHBvcnRzLmNvbWJpbmVMYXRlc3QgPSBjb21iaW5lTGF0ZXN0XzEuY29tYmluZUxhdGVzdDtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2NvbmNhdCcpO1xuZXhwb3J0cy5jb25jYXQgPSBjb25jYXRfMS5jb25jYXQ7XG52YXIgY29uY2F0QWxsXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9jb25jYXRBbGwnKTtcbmV4cG9ydHMuY29uY2F0QWxsID0gY29uY2F0QWxsXzEuY29uY2F0QWxsO1xudmFyIGNvbmNhdE1hcF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvY29uY2F0TWFwJyk7XG5leHBvcnRzLmNvbmNhdE1hcCA9IGNvbmNhdE1hcF8xLmNvbmNhdE1hcDtcbnZhciBjb25jYXRNYXBUb18xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvY29uY2F0TWFwVG8nKTtcbmV4cG9ydHMuY29uY2F0TWFwVG8gPSBjb25jYXRNYXBUb18xLmNvbmNhdE1hcFRvO1xudmFyIGNvdW50XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9jb3VudCcpO1xuZXhwb3J0cy5jb3VudCA9IGNvdW50XzEuY291bnQ7XG52YXIgZGVib3VuY2VfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2RlYm91bmNlJyk7XG5leHBvcnRzLmRlYm91bmNlID0gZGVib3VuY2VfMS5kZWJvdW5jZTtcbnZhciBkZWJvdW5jZVRpbWVfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2RlYm91bmNlVGltZScpO1xuZXhwb3J0cy5kZWJvdW5jZVRpbWUgPSBkZWJvdW5jZVRpbWVfMS5kZWJvdW5jZVRpbWU7XG52YXIgZGVmYXVsdElmRW1wdHlfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2RlZmF1bHRJZkVtcHR5Jyk7XG5leHBvcnRzLmRlZmF1bHRJZkVtcHR5ID0gZGVmYXVsdElmRW1wdHlfMS5kZWZhdWx0SWZFbXB0eTtcbnZhciBkZWxheV8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvZGVsYXknKTtcbmV4cG9ydHMuZGVsYXkgPSBkZWxheV8xLmRlbGF5O1xudmFyIGRlbGF5V2hlbl8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvZGVsYXlXaGVuJyk7XG5leHBvcnRzLmRlbGF5V2hlbiA9IGRlbGF5V2hlbl8xLmRlbGF5V2hlbjtcbnZhciBkZW1hdGVyaWFsaXplXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplJyk7XG5leHBvcnRzLmRlbWF0ZXJpYWxpemUgPSBkZW1hdGVyaWFsaXplXzEuZGVtYXRlcmlhbGl6ZTtcbnZhciBkaXN0aW5jdF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvZGlzdGluY3QnKTtcbmV4cG9ydHMuZGlzdGluY3QgPSBkaXN0aW5jdF8xLmRpc3RpbmN0O1xudmFyIGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsQ2hhbmdlZCcpO1xuZXhwb3J0cy5kaXN0aW5jdFVudGlsQ2hhbmdlZCA9IGRpc3RpbmN0VW50aWxDaGFuZ2VkXzEuZGlzdGluY3RVbnRpbENoYW5nZWQ7XG52YXIgZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkJyk7XG5leHBvcnRzLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkID0gZGlzdGluY3RVbnRpbEtleUNoYW5nZWRfMS5kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZDtcbnZhciBlbGVtZW50QXRfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2VsZW1lbnRBdCcpO1xuZXhwb3J0cy5lbGVtZW50QXQgPSBlbGVtZW50QXRfMS5lbGVtZW50QXQ7XG52YXIgZXZlcnlfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2V2ZXJ5Jyk7XG5leHBvcnRzLmV2ZXJ5ID0gZXZlcnlfMS5ldmVyeTtcbnZhciBleGhhdXN0XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9leGhhdXN0Jyk7XG5leHBvcnRzLmV4aGF1c3QgPSBleGhhdXN0XzEuZXhoYXVzdDtcbnZhciBleGhhdXN0TWFwXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9leGhhdXN0TWFwJyk7XG5leHBvcnRzLmV4aGF1c3RNYXAgPSBleGhhdXN0TWFwXzEuZXhoYXVzdE1hcDtcbnZhciBleHBhbmRfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2V4cGFuZCcpO1xuZXhwb3J0cy5leHBhbmQgPSBleHBhbmRfMS5leHBhbmQ7XG52YXIgZmlsdGVyXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9maWx0ZXInKTtcbmV4cG9ydHMuZmlsdGVyID0gZmlsdGVyXzEuZmlsdGVyO1xudmFyIGZpbmFsaXplXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9maW5hbGl6ZScpO1xuZXhwb3J0cy5maW5hbGl6ZSA9IGZpbmFsaXplXzEuZmluYWxpemU7XG52YXIgZmluZF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvZmluZCcpO1xuZXhwb3J0cy5maW5kID0gZmluZF8xLmZpbmQ7XG52YXIgZmluZEluZGV4XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9maW5kSW5kZXgnKTtcbmV4cG9ydHMuZmluZEluZGV4ID0gZmluZEluZGV4XzEuZmluZEluZGV4O1xudmFyIGZpcnN0XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9maXJzdCcpO1xuZXhwb3J0cy5maXJzdCA9IGZpcnN0XzEuZmlyc3Q7XG52YXIgZ3JvdXBCeV8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvZ3JvdXBCeScpO1xuZXhwb3J0cy5ncm91cEJ5ID0gZ3JvdXBCeV8xLmdyb3VwQnk7XG52YXIgaWdub3JlRWxlbWVudHNfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzJyk7XG5leHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gaWdub3JlRWxlbWVudHNfMS5pZ25vcmVFbGVtZW50cztcbnZhciBpc0VtcHR5XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9pc0VtcHR5Jyk7XG5leHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5XzEuaXNFbXB0eTtcbnZhciBsYXN0XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9sYXN0Jyk7XG5leHBvcnRzLmxhc3QgPSBsYXN0XzEubGFzdDtcbnZhciBtYXBfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL21hcCcpO1xuZXhwb3J0cy5tYXAgPSBtYXBfMS5tYXA7XG52YXIgbWFwVG9fMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL21hcFRvJyk7XG5leHBvcnRzLm1hcFRvID0gbWFwVG9fMS5tYXBUbztcbnZhciBtYXRlcmlhbGl6ZV8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvbWF0ZXJpYWxpemUnKTtcbmV4cG9ydHMubWF0ZXJpYWxpemUgPSBtYXRlcmlhbGl6ZV8xLm1hdGVyaWFsaXplO1xudmFyIG1heF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvbWF4Jyk7XG5leHBvcnRzLm1heCA9IG1heF8xLm1heDtcbnZhciBtZXJnZV8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvbWVyZ2UnKTtcbmV4cG9ydHMubWVyZ2UgPSBtZXJnZV8xLm1lcmdlO1xudmFyIG1lcmdlQWxsXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9tZXJnZUFsbCcpO1xuZXhwb3J0cy5tZXJnZUFsbCA9IG1lcmdlQWxsXzEubWVyZ2VBbGw7XG52YXIgbWVyZ2VNYXBfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL21lcmdlTWFwJyk7XG5leHBvcnRzLm1lcmdlTWFwID0gbWVyZ2VNYXBfMS5tZXJnZU1hcDtcbnZhciBtZXJnZU1hcF8yID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvbWVyZ2VNYXAnKTtcbmV4cG9ydHMuZmxhdE1hcCA9IG1lcmdlTWFwXzIubWVyZ2VNYXA7XG52YXIgbWVyZ2VNYXBUb18xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvbWVyZ2VNYXBUbycpO1xuZXhwb3J0cy5tZXJnZU1hcFRvID0gbWVyZ2VNYXBUb18xLm1lcmdlTWFwVG87XG52YXIgbWVyZ2VTY2FuXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9tZXJnZVNjYW4nKTtcbmV4cG9ydHMubWVyZ2VTY2FuID0gbWVyZ2VTY2FuXzEubWVyZ2VTY2FuO1xudmFyIG1pbl8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvbWluJyk7XG5leHBvcnRzLm1pbiA9IG1pbl8xLm1pbjtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL211bHRpY2FzdCcpO1xuZXhwb3J0cy5tdWx0aWNhc3QgPSBtdWx0aWNhc3RfMS5tdWx0aWNhc3Q7XG52YXIgb2JzZXJ2ZU9uXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9vYnNlcnZlT24nKTtcbmV4cG9ydHMub2JzZXJ2ZU9uID0gb2JzZXJ2ZU9uXzEub2JzZXJ2ZU9uO1xudmFyIG9uRXJyb3JSZXN1bWVOZXh0XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dCcpO1xuZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dCA9IG9uRXJyb3JSZXN1bWVOZXh0XzEub25FcnJvclJlc3VtZU5leHQ7XG52YXIgcGFpcndpc2VfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3BhaXJ3aXNlJyk7XG5leHBvcnRzLnBhaXJ3aXNlID0gcGFpcndpc2VfMS5wYWlyd2lzZTtcbnZhciBwYXJ0aXRpb25fMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3BhcnRpdGlvbicpO1xuZXhwb3J0cy5wYXJ0aXRpb24gPSBwYXJ0aXRpb25fMS5wYXJ0aXRpb247XG52YXIgcGx1Y2tfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3BsdWNrJyk7XG5leHBvcnRzLnBsdWNrID0gcGx1Y2tfMS5wbHVjaztcbnZhciBwdWJsaXNoXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9wdWJsaXNoJyk7XG5leHBvcnRzLnB1Ymxpc2ggPSBwdWJsaXNoXzEucHVibGlzaDtcbnZhciBwdWJsaXNoQmVoYXZpb3JfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3B1Ymxpc2hCZWhhdmlvcicpO1xuZXhwb3J0cy5wdWJsaXNoQmVoYXZpb3IgPSBwdWJsaXNoQmVoYXZpb3JfMS5wdWJsaXNoQmVoYXZpb3I7XG52YXIgcHVibGlzaExhc3RfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3B1Ymxpc2hMYXN0Jyk7XG5leHBvcnRzLnB1Ymxpc2hMYXN0ID0gcHVibGlzaExhc3RfMS5wdWJsaXNoTGFzdDtcbnZhciBwdWJsaXNoUmVwbGF5XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5Jyk7XG5leHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBwdWJsaXNoUmVwbGF5XzEucHVibGlzaFJlcGxheTtcbnZhciByYWNlXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9yYWNlJyk7XG5leHBvcnRzLnJhY2UgPSByYWNlXzEucmFjZTtcbnZhciByZWR1Y2VfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3JlZHVjZScpO1xuZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2VfMS5yZWR1Y2U7XG52YXIgcmVwZWF0XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9yZXBlYXQnKTtcbmV4cG9ydHMucmVwZWF0ID0gcmVwZWF0XzEucmVwZWF0O1xudmFyIHJlcGVhdFdoZW5fMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3JlcGVhdFdoZW4nKTtcbmV4cG9ydHMucmVwZWF0V2hlbiA9IHJlcGVhdFdoZW5fMS5yZXBlYXRXaGVuO1xudmFyIHJldHJ5XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9yZXRyeScpO1xuZXhwb3J0cy5yZXRyeSA9IHJldHJ5XzEucmV0cnk7XG52YXIgcmV0cnlXaGVuXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9yZXRyeVdoZW4nKTtcbmV4cG9ydHMucmV0cnlXaGVuID0gcmV0cnlXaGVuXzEucmV0cnlXaGVuO1xudmFyIHJlZkNvdW50XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9yZWZDb3VudCcpO1xuZXhwb3J0cy5yZWZDb3VudCA9IHJlZkNvdW50XzEucmVmQ291bnQ7XG52YXIgc2FtcGxlXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9zYW1wbGUnKTtcbmV4cG9ydHMuc2FtcGxlID0gc2FtcGxlXzEuc2FtcGxlO1xudmFyIHNhbXBsZVRpbWVfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3NhbXBsZVRpbWUnKTtcbmV4cG9ydHMuc2FtcGxlVGltZSA9IHNhbXBsZVRpbWVfMS5zYW1wbGVUaW1lO1xudmFyIHNjYW5fMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3NjYW4nKTtcbmV4cG9ydHMuc2NhbiA9IHNjYW5fMS5zY2FuO1xudmFyIHNlcXVlbmNlRXF1YWxfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWwnKTtcbmV4cG9ydHMuc2VxdWVuY2VFcXVhbCA9IHNlcXVlbmNlRXF1YWxfMS5zZXF1ZW5jZUVxdWFsO1xudmFyIHNoYXJlXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9zaGFyZScpO1xuZXhwb3J0cy5zaGFyZSA9IHNoYXJlXzEuc2hhcmU7XG52YXIgc2hhcmVSZXBsYXlfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3NoYXJlUmVwbGF5Jyk7XG5leHBvcnRzLnNoYXJlUmVwbGF5ID0gc2hhcmVSZXBsYXlfMS5zaGFyZVJlcGxheTtcbnZhciBzaW5nbGVfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3NpbmdsZScpO1xuZXhwb3J0cy5zaW5nbGUgPSBzaW5nbGVfMS5zaW5nbGU7XG52YXIgc2tpcF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvc2tpcCcpO1xuZXhwb3J0cy5za2lwID0gc2tpcF8xLnNraXA7XG52YXIgc2tpcExhc3RfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3NraXBMYXN0Jyk7XG5leHBvcnRzLnNraXBMYXN0ID0gc2tpcExhc3RfMS5za2lwTGFzdDtcbnZhciBza2lwVW50aWxfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3NraXBVbnRpbCcpO1xuZXhwb3J0cy5za2lwVW50aWwgPSBza2lwVW50aWxfMS5za2lwVW50aWw7XG52YXIgc2tpcFdoaWxlXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy9za2lwV2hpbGUnKTtcbmV4cG9ydHMuc2tpcFdoaWxlID0gc2tpcFdoaWxlXzEuc2tpcFdoaWxlO1xudmFyIHN0YXJ0V2l0aF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvc3RhcnRXaXRoJyk7XG5leHBvcnRzLnN0YXJ0V2l0aCA9IHN0YXJ0V2l0aF8xLnN0YXJ0V2l0aDtcbi8qKlxuICogVE9ETyhodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvaXNzdWVzLzI5MDApOiBBZGQgYmFjayBzdWJzY3JpYmVPbiBvbmNlIGl0IGNhbiBiZVxuICogdHJlZXNoYWtlbi4gQ3VycmVudGx5IGlmIHRoaXMgZXhwb3J0IGlzIGFkZGVkIGJhY2ssIGl0XG4gKiBmb3JjZXMgYXBwcyB0byBicmluZyBpbiBhc2FwIHNjaGVkdWxlciBhbG9uZyB3aXRoXG4gKiBJbW1lZGlhdGUsIHJvb3QsIGFuZCBvdGhlciBzdXBwb3J0aW5nIGNvZGUuXG4gKi9cbi8vIGV4cG9ydCB7IHN1YnNjcmliZU9uIH0gZnJvbSAnLi9vcGVyYXRvcnMvc3Vic2NyaWJlT24nO1xudmFyIHN3aXRjaEFsbF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvc3dpdGNoQWxsJyk7XG5leHBvcnRzLnN3aXRjaEFsbCA9IHN3aXRjaEFsbF8xLnN3aXRjaEFsbDtcbnZhciBzd2l0Y2hNYXBfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3N3aXRjaE1hcCcpO1xuZXhwb3J0cy5zd2l0Y2hNYXAgPSBzd2l0Y2hNYXBfMS5zd2l0Y2hNYXA7XG52YXIgc3dpdGNoTWFwVG9fMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3N3aXRjaE1hcFRvJyk7XG5leHBvcnRzLnN3aXRjaE1hcFRvID0gc3dpdGNoTWFwVG9fMS5zd2l0Y2hNYXBUbztcbnZhciB0YWtlXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy90YWtlJyk7XG5leHBvcnRzLnRha2UgPSB0YWtlXzEudGFrZTtcbnZhciB0YWtlTGFzdF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvdGFrZUxhc3QnKTtcbmV4cG9ydHMudGFrZUxhc3QgPSB0YWtlTGFzdF8xLnRha2VMYXN0O1xudmFyIHRha2VVbnRpbF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvdGFrZVVudGlsJyk7XG5leHBvcnRzLnRha2VVbnRpbCA9IHRha2VVbnRpbF8xLnRha2VVbnRpbDtcbnZhciB0YWtlV2hpbGVfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3Rha2VXaGlsZScpO1xuZXhwb3J0cy50YWtlV2hpbGUgPSB0YWtlV2hpbGVfMS50YWtlV2hpbGU7XG52YXIgdGFwXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy90YXAnKTtcbmV4cG9ydHMudGFwID0gdGFwXzEudGFwO1xudmFyIHRocm90dGxlXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy90aHJvdHRsZScpO1xuZXhwb3J0cy50aHJvdHRsZSA9IHRocm90dGxlXzEudGhyb3R0bGU7XG52YXIgdGhyb3R0bGVUaW1lXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy90aHJvdHRsZVRpbWUnKTtcbmV4cG9ydHMudGhyb3R0bGVUaW1lID0gdGhyb3R0bGVUaW1lXzEudGhyb3R0bGVUaW1lO1xudmFyIHRpbWVJbnRlcnZhbF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvdGltZUludGVydmFsJyk7XG5leHBvcnRzLnRpbWVJbnRlcnZhbCA9IHRpbWVJbnRlcnZhbF8xLnRpbWVJbnRlcnZhbDtcbnZhciB0aW1lb3V0XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy90aW1lb3V0Jyk7XG5leHBvcnRzLnRpbWVvdXQgPSB0aW1lb3V0XzEudGltZW91dDtcbnZhciB0aW1lb3V0V2l0aF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvdGltZW91dFdpdGgnKTtcbmV4cG9ydHMudGltZW91dFdpdGggPSB0aW1lb3V0V2l0aF8xLnRpbWVvdXRXaXRoO1xudmFyIHRpbWVzdGFtcF8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvdGltZXN0YW1wJyk7XG5leHBvcnRzLnRpbWVzdGFtcCA9IHRpbWVzdGFtcF8xLnRpbWVzdGFtcDtcbnZhciB0b0FycmF5XzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy90b0FycmF5Jyk7XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5XzEudG9BcnJheTtcbnZhciB3aW5kb3dfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3dpbmRvdycpO1xuZXhwb3J0cy53aW5kb3cgPSB3aW5kb3dfMS53aW5kb3c7XG52YXIgd2luZG93Q291bnRfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3dpbmRvd0NvdW50Jyk7XG5leHBvcnRzLndpbmRvd0NvdW50ID0gd2luZG93Q291bnRfMS53aW5kb3dDb3VudDtcbnZhciB3aW5kb3dUaW1lXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy93aW5kb3dUaW1lJyk7XG5leHBvcnRzLndpbmRvd1RpbWUgPSB3aW5kb3dUaW1lXzEud2luZG93VGltZTtcbnZhciB3aW5kb3dUb2dnbGVfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZScpO1xuZXhwb3J0cy53aW5kb3dUb2dnbGUgPSB3aW5kb3dUb2dnbGVfMS53aW5kb3dUb2dnbGU7XG52YXIgd2luZG93V2hlbl8xID0gcmVxdWlyZSgnLi9vcGVyYXRvcnMvd2luZG93V2hlbicpO1xuZXhwb3J0cy53aW5kb3dXaGVuID0gd2luZG93V2hlbl8xLndpbmRvd1doZW47XG52YXIgd2l0aExhdGVzdEZyb21fMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tJyk7XG5leHBvcnRzLndpdGhMYXRlc3RGcm9tID0gd2l0aExhdGVzdEZyb21fMS53aXRoTGF0ZXN0RnJvbTtcbnZhciB6aXBfMSA9IHJlcXVpcmUoJy4vb3BlcmF0b3JzL3ppcCcpO1xuZXhwb3J0cy56aXAgPSB6aXBfMS56aXA7XG52YXIgemlwQWxsXzEgPSByZXF1aXJlKCcuL29wZXJhdG9ycy96aXBBbGwnKTtcbmV4cG9ydHMuemlwQWxsID0gemlwQWxsXzEuemlwQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3BlcmF0b3JzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgdHJ5Q2F0Y2hfMSA9IHJlcXVpcmUoJy4uL3V0aWwvdHJ5Q2F0Y2gnKTtcbnZhciBlcnJvck9iamVjdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9lcnJvck9iamVjdCcpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qKlxuICogSWdub3JlcyBzb3VyY2UgdmFsdWVzIGZvciBhIGR1cmF0aW9uIGRldGVybWluZWQgYnkgYW5vdGhlciBPYnNlcnZhYmxlLCB0aGVuXG4gKiBlbWl0cyB0aGUgbW9zdCByZWNlbnQgdmFsdWUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIHRoZW4gcmVwZWF0cyB0aGlzXG4gKiBwcm9jZXNzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGF1ZGl0VGltZX0sIGJ1dCB0aGUgc2lsZW5jaW5nXG4gKiBkdXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvYXVkaXQucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGF1ZGl0YCBpcyBzaW1pbGFyIHRvIGB0aHJvdHRsZWAsIGJ1dCBlbWl0cyB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSBzaWxlbmNlZFxuICogdGltZSB3aW5kb3csIGluc3RlYWQgb2YgdGhlIGZpcnN0IHZhbHVlLiBgYXVkaXRgIGVtaXRzIHRoZSBtb3N0IHJlY2VudCB2YWx1ZVxuICogZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGFzIHNvb24gYXMgaXRzIGludGVybmFsXG4gKiB0aW1lciBiZWNvbWVzIGRpc2FibGVkLCBhbmQgaWdub3JlcyBzb3VyY2UgdmFsdWVzIHdoaWxlIHRoZSB0aW1lciBpcyBlbmFibGVkLlxuICogSW5pdGlhbGx5LCB0aGUgdGltZXIgaXMgZGlzYWJsZWQuIEFzIHNvb24gYXMgdGhlIGZpcnN0IHNvdXJjZSB2YWx1ZSBhcnJpdmVzLFxuICogdGhlIHRpbWVyIGlzIGVuYWJsZWQgYnkgY2FsbGluZyB0aGUgYGR1cmF0aW9uU2VsZWN0b3JgIGZ1bmN0aW9uIHdpdGggdGhlXG4gKiBzb3VyY2UgdmFsdWUsIHdoaWNoIHJldHVybnMgdGhlIFwiZHVyYXRpb25cIiBPYnNlcnZhYmxlLiBXaGVuIHRoZSBkdXJhdGlvblxuICogT2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlIG9yIGNvbXBsZXRlcywgdGhlIHRpbWVyIGlzIGRpc2FibGVkLCB0aGVuIHRoZSBtb3N0XG4gKiByZWNlbnQgc291cmNlIHZhbHVlIGlzIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLCBhbmQgdGhpcyBwcm9jZXNzXG4gKiByZXBlYXRzIGZvciB0aGUgbmV4dCBzb3VyY2UgdmFsdWUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCBjbGlja3MgYXQgYSByYXRlIG9mIGF0IG1vc3Qgb25lIGNsaWNrIHBlciBzZWNvbmQ8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5hdWRpdChldiA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXRUaW1lfVxuICogQHNlZSB7QGxpbmsgZGVib3VuY2V9XG4gKiBAc2VlIHtAbGluayBkZWxheVdoZW59XG4gKiBAc2VlIHtAbGluayBzYW1wbGV9XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZX1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBUKTogU3Vic2NyaWJhYmxlT3JQcm9taXNlfSBkdXJhdGlvblNlbGVjdG9yIEEgZnVuY3Rpb25cbiAqIHRoYXQgcmVjZWl2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgZm9yIGNvbXB1dGluZyB0aGUgc2lsZW5jaW5nXG4gKiBkdXJhdGlvbiwgcmV0dXJuZWQgYXMgYW4gT2JzZXJ2YWJsZSBvciBhIFByb21pc2UuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgcGVyZm9ybXMgcmF0ZS1saW1pdGluZyBvZlxuICogZW1pc3Npb25zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBhdWRpdFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gYXVkaXQoZHVyYXRpb25TZWxlY3Rvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBhdWRpdE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgQXVkaXRPcGVyYXRvcihkdXJhdGlvblNlbGVjdG9yKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuYXVkaXQgPSBhdWRpdDtcbnZhciBBdWRpdE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBdWRpdE9wZXJhdG9yKGR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5kdXJhdGlvblNlbGVjdG9yID0gZHVyYXRpb25TZWxlY3RvcjtcbiAgICB9XG4gICAgQXVkaXRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEF1ZGl0U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmR1cmF0aW9uU2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBBdWRpdE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgQXVkaXRTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXVkaXRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEF1ZGl0U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgZHVyYXRpb25TZWxlY3Rvcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gICAgQXVkaXRTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMudGhyb3R0bGVkKSB7XG4gICAgICAgICAgICB2YXIgZHVyYXRpb24gPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHRoaXMuZHVyYXRpb25TZWxlY3RvcikodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGlubmVyU3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlVG9SZXN1bHRfMS5zdWJzY3JpYmVUb1Jlc3VsdCh0aGlzLCBkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGhyb3R0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMudGhyb3R0bGVkID0gaW5uZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQXVkaXRTdWJzY3JpYmVyLnByb3RvdHlwZS5jbGVhclRocm90dGxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCB2YWx1ZSA9IF9hLnZhbHVlLCBoYXNWYWx1ZSA9IF9hLmhhc1ZhbHVlLCB0aHJvdHRsZWQgPSBfYS50aHJvdHRsZWQ7XG4gICAgICAgIGlmICh0aHJvdHRsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRocm90dGxlZCk7XG4gICAgICAgICAgICB0aGlzLnRocm90dGxlZCA9IG51bGw7XG4gICAgICAgICAgICB0aHJvdHRsZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXVkaXRTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRocm90dGxlKCk7XG4gICAgfTtcbiAgICBBdWRpdFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNsZWFyVGhyb3R0bGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBBdWRpdFN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVkaXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xudmFyIGF1ZGl0XzEgPSByZXF1aXJlKCcuL2F1ZGl0Jyk7XG52YXIgdGltZXJfMSA9IHJlcXVpcmUoJy4uL29ic2VydmFibGUvdGltZXInKTtcbi8qKlxuICogSWdub3JlcyBzb3VyY2UgdmFsdWVzIGZvciBgZHVyYXRpb25gIG1pbGxpc2Vjb25kcywgdGhlbiBlbWl0cyB0aGUgbW9zdCByZWNlbnRcbiAqIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB0aGVuIHJlcGVhdHMgdGhpcyBwcm9jZXNzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5XaGVuIGl0IHNlZXMgYSBzb3VyY2UgdmFsdWVzLCBpdCBpZ25vcmVzIHRoYXQgcGx1c1xuICogdGhlIG5leHQgb25lcyBmb3IgYGR1cmF0aW9uYCBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGl0IGVtaXRzIHRoZSBtb3N0IHJlY2VudFxuICogdmFsdWUgZnJvbSB0aGUgc291cmNlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2F1ZGl0VGltZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgYXVkaXRUaW1lYCBpcyBzaW1pbGFyIHRvIGB0aHJvdHRsZVRpbWVgLCBidXQgZW1pdHMgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGVcbiAqIHNpbGVuY2VkIHRpbWUgd2luZG93LCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB2YWx1ZS4gYGF1ZGl0VGltZWAgZW1pdHMgdGhlIG1vc3RcbiAqIHJlY2VudCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYXMgc29vbiBhc1xuICogaXRzIGludGVybmFsIHRpbWVyIGJlY29tZXMgZGlzYWJsZWQsIGFuZCBpZ25vcmVzIHNvdXJjZSB2YWx1ZXMgd2hpbGUgdGhlXG4gKiB0aW1lciBpcyBlbmFibGVkLiBJbml0aWFsbHksIHRoZSB0aW1lciBpcyBkaXNhYmxlZC4gQXMgc29vbiBhcyB0aGUgZmlyc3RcbiAqIHNvdXJjZSB2YWx1ZSBhcnJpdmVzLCB0aGUgdGltZXIgaXMgZW5hYmxlZC4gQWZ0ZXIgYGR1cmF0aW9uYCBtaWxsaXNlY29uZHMgKG9yXG4gKiB0aGUgdGltZSB1bml0IGRldGVybWluZWQgaW50ZXJuYWxseSBieSB0aGUgb3B0aW9uYWwgYHNjaGVkdWxlcmApIGhhcyBwYXNzZWQsXG4gKiB0aGUgdGltZXIgaXMgZGlzYWJsZWQsIHRoZW4gdGhlIG1vc3QgcmVjZW50IHNvdXJjZSB2YWx1ZSBpcyBlbWl0dGVkIG9uIHRoZVxuICogb3V0cHV0IE9ic2VydmFibGUsIGFuZCB0aGlzIHByb2Nlc3MgcmVwZWF0cyBmb3IgdGhlIG5leHQgc291cmNlIHZhbHVlLlxuICogT3B0aW9uYWxseSB0YWtlcyBhIHtAbGluayBJU2NoZWR1bGVyfSBmb3IgbWFuYWdpbmcgdGltZXJzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgY2xpY2tzIGF0IGEgcmF0ZSBvZiBhdCBtb3N0IG9uZSBjbGljayBwZXIgc2Vjb25kPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3MuYXVkaXRUaW1lKDEwMDApO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdH1cbiAqIEBzZWUge0BsaW5rIGRlYm91bmNlVGltZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICogQHNlZSB7QGxpbmsgc2FtcGxlVGltZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlVGltZX1cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gVGltZSB0byB3YWl0IGJlZm9yZSBlbWl0dGluZyB0aGUgbW9zdCByZWNlbnQgc291cmNlXG4gKiB2YWx1ZSwgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzIG9yIHRoZSB0aW1lIHVuaXQgZGV0ZXJtaW5lZCBpbnRlcm5hbGx5XG4gKiBieSB0aGUgb3B0aW9uYWwgYHNjaGVkdWxlcmAuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1hc3luY10gVGhlIHtAbGluayBJU2NoZWR1bGVyfSB0byB1c2UgZm9yXG4gKiBtYW5hZ2luZyB0aGUgdGltZXJzIHRoYXQgaGFuZGxlIHRoZSByYXRlLWxpbWl0aW5nIGJlaGF2aW9yLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IHBlcmZvcm1zIHJhdGUtbGltaXRpbmcgb2ZcbiAqIGVtaXNzaW9ucyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2QgYXVkaXRUaW1lXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBhdWRpdFRpbWUoZHVyYXRpb24sIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jOyB9XG4gICAgcmV0dXJuIGF1ZGl0XzEuYXVkaXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZXJfMS50aW1lcihkdXJhdGlvbiwgc2NoZWR1bGVyKTsgfSk7XG59XG5leHBvcnRzLmF1ZGl0VGltZSA9IGF1ZGl0VGltZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1ZGl0VGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qKlxuICogQnVmZmVycyB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIHVudGlsIGBjbG9zaW5nTm90aWZpZXJgIGVtaXRzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5Db2xsZWN0cyB2YWx1ZXMgZnJvbSB0aGUgcGFzdCBhcyBhbiBhcnJheSwgYW5kIGVtaXRzXG4gKiB0aGF0IGFycmF5IG9ubHkgd2hlbiBhbm90aGVyIE9ic2VydmFibGUgZW1pdHMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvYnVmZmVyLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEJ1ZmZlcnMgdGhlIGluY29taW5nIE9ic2VydmFibGUgdmFsdWVzIHVudGlsIHRoZSBnaXZlbiBgY2xvc2luZ05vdGlmaWVyYFxuICogT2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlLCBhdCB3aGljaCBwb2ludCBpdCBlbWl0cyB0aGUgYnVmZmVyIG9uIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUgYW5kIHN0YXJ0cyBhIG5ldyBidWZmZXIgaW50ZXJuYWxseSwgYXdhaXRpbmcgdGhlIG5leHQgdGltZVxuICogYGNsb3NpbmdOb3RpZmllcmAgZW1pdHMuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+T24gZXZlcnkgY2xpY2ssIGVtaXQgYXJyYXkgb2YgbW9zdCByZWNlbnQgaW50ZXJ2YWwgZXZlbnRzPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBpbnRlcnZhbCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgYnVmZmVyZWQgPSBpbnRlcnZhbC5idWZmZXIoY2xpY2tzKTtcbiAqIGJ1ZmZlcmVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJDb3VudH1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRpbWV9XG4gKiBAc2VlIHtAbGluayBidWZmZXJUb2dnbGV9XG4gKiBAc2VlIHtAbGluayBidWZmZXJXaGVufVxuICogQHNlZSB7QGxpbmsgd2luZG93fVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZTxhbnk+fSBjbG9zaW5nTm90aWZpZXIgQW4gT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgdGhlXG4gKiBidWZmZXIgdG8gYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRbXT59IEFuIE9ic2VydmFibGUgb2YgYnVmZmVycywgd2hpY2ggYXJlIGFycmF5cyBvZlxuICogdmFsdWVzLlxuICogQG1ldGhvZCBidWZmZXJcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlcihjbG9zaW5nTm90aWZpZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYnVmZmVyT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBCdWZmZXJPcGVyYXRvcihjbG9zaW5nTm90aWZpZXIpKTtcbiAgICB9O1xufVxuZXhwb3J0cy5idWZmZXIgPSBidWZmZXI7XG52YXIgQnVmZmVyT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJ1ZmZlck9wZXJhdG9yKGNsb3NpbmdOb3RpZmllcikge1xuICAgICAgICB0aGlzLmNsb3NpbmdOb3RpZmllciA9IGNsb3NpbmdOb3RpZmllcjtcbiAgICB9XG4gICAgQnVmZmVyT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBCdWZmZXJTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuY2xvc2luZ05vdGlmaWVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBCdWZmZXJTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQnVmZmVyU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdWZmZXJTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjbG9zaW5nTm90aWZpZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdO1xuICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIGNsb3NpbmdOb3RpZmllcikpO1xuICAgIH1cbiAgICBCdWZmZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICB9O1xuICAgIEJ1ZmZlclN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoYnVmZmVyKTtcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXJTdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbi8qKlxuICogQnVmZmVycyB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIHVudGlsIHRoZSBzaXplIGhpdHMgdGhlIG1heGltdW1cbiAqIGBidWZmZXJTaXplYCBnaXZlbi5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Q29sbGVjdHMgdmFsdWVzIGZyb20gdGhlIHBhc3QgYXMgYW4gYXJyYXksIGFuZCBlbWl0c1xuICogdGhhdCBhcnJheSBvbmx5IHdoZW4gaXRzIHNpemUgcmVhY2hlcyBgYnVmZmVyU2l6ZWAuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvYnVmZmVyQ291bnQucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQnVmZmVycyBhIG51bWJlciBvZiB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgYnkgYGJ1ZmZlclNpemVgIHRoZW5cbiAqIGVtaXRzIHRoZSBidWZmZXIgYW5kIGNsZWFycyBpdCwgYW5kIHN0YXJ0cyBhIG5ldyBidWZmZXIgZWFjaFxuICogYHN0YXJ0QnVmZmVyRXZlcnlgIHZhbHVlcy4gSWYgYHN0YXJ0QnVmZmVyRXZlcnlgIGlzIG5vdCBwcm92aWRlZCBvciBpc1xuICogYG51bGxgLCB0aGVuIG5ldyBidWZmZXJzIGFyZSBzdGFydGVkIGltbWVkaWF0ZWx5IGF0IHRoZSBzdGFydCBvZiB0aGUgc291cmNlXG4gKiBhbmQgd2hlbiBlYWNoIGJ1ZmZlciBjbG9zZXMgYW5kIGlzIGVtaXR0ZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCB0aGUgbGFzdCB0d28gY2xpY2sgZXZlbnRzIGFzIGFuIGFycmF5PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBidWZmZXJlZCA9IGNsaWNrcy5idWZmZXJDb3VudCgyKTtcbiAqIGJ1ZmZlcmVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5PbiBldmVyeSBjbGljaywgZW1pdCB0aGUgbGFzdCB0d28gY2xpY2sgZXZlbnRzIGFzIGFuIGFycmF5PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBidWZmZXJlZCA9IGNsaWNrcy5idWZmZXJDb3VudCgyLCAxKTtcbiAqIGJ1ZmZlcmVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJ9XG4gKiBAc2VlIHtAbGluayBidWZmZXJUaW1lfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVG9nZ2xlfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyV2hlbn1cbiAqIEBzZWUge0BsaW5rIHBhaXJ3aXNlfVxuICogQHNlZSB7QGxpbmsgd2luZG93Q291bnR9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGJ1ZmZlclNpemUgVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYnVmZmVyIGVtaXR0ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0QnVmZmVyRXZlcnldIEludGVydmFsIGF0IHdoaWNoIHRvIHN0YXJ0IGEgbmV3IGJ1ZmZlci5cbiAqIEZvciBleGFtcGxlIGlmIGBzdGFydEJ1ZmZlckV2ZXJ5YCBpcyBgMmAsIHRoZW4gYSBuZXcgYnVmZmVyIHdpbGwgYmUgc3RhcnRlZFxuICogb24gZXZlcnkgb3RoZXIgdmFsdWUgZnJvbSB0aGUgc291cmNlLiBBIG5ldyBidWZmZXIgaXMgc3RhcnRlZCBhdCB0aGVcbiAqIGJlZ2lubmluZyBvZiB0aGUgc291cmNlIGJ5IGRlZmF1bHQuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRbXT59IEFuIE9ic2VydmFibGUgb2YgYXJyYXlzIG9mIGJ1ZmZlcmVkIHZhbHVlcy5cbiAqIEBtZXRob2QgYnVmZmVyQ291bnRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlckNvdW50KGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpIHtcbiAgICBpZiAoc3RhcnRCdWZmZXJFdmVyeSA9PT0gdm9pZCAwKSB7IHN0YXJ0QnVmZmVyRXZlcnkgPSBudWxsOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJ1ZmZlckNvdW50T3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBCdWZmZXJDb3VudE9wZXJhdG9yKGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpKTtcbiAgICB9O1xufVxuZXhwb3J0cy5idWZmZXJDb3VudCA9IGJ1ZmZlckNvdW50O1xudmFyIEJ1ZmZlckNvdW50T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJ1ZmZlckNvdW50T3BlcmF0b3IoYnVmZmVyU2l6ZSwgc3RhcnRCdWZmZXJFdmVyeSkge1xuICAgICAgICB0aGlzLmJ1ZmZlclNpemUgPSBidWZmZXJTaXplO1xuICAgICAgICB0aGlzLnN0YXJ0QnVmZmVyRXZlcnkgPSBzdGFydEJ1ZmZlckV2ZXJ5O1xuICAgICAgICBpZiAoIXN0YXJ0QnVmZmVyRXZlcnkgfHwgYnVmZmVyU2l6ZSA9PT0gc3RhcnRCdWZmZXJFdmVyeSkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyQ2xhc3MgPSBCdWZmZXJDb3VudFN1YnNjcmliZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZXJDbGFzcyA9IEJ1ZmZlclNraXBDb3VudFN1YnNjcmliZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQnVmZmVyQ291bnRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IHRoaXMuc3Vic2NyaWJlckNsYXNzKHN1YnNjcmliZXIsIHRoaXMuYnVmZmVyU2l6ZSwgdGhpcy5zdGFydEJ1ZmZlckV2ZXJ5KSk7XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyQ291bnRPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIEJ1ZmZlckNvdW50U3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1ZmZlckNvdW50U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdWZmZXJDb3VudFN1YnNjcmliZXIoZGVzdGluYXRpb24sIGJ1ZmZlclNpemUpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmJ1ZmZlclNpemUgPSBidWZmZXJTaXplO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdO1xuICAgIH1cbiAgICBCdWZmZXJDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PSB0aGlzLmJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChidWZmZXIpO1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyQ291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlckNvdW50U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgQnVmZmVyU2tpcENvdW50U3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1ZmZlclNraXBDb3VudFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQnVmZmVyU2tpcENvdW50U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgYnVmZmVyU2l6ZSwgc3RhcnRCdWZmZXJFdmVyeSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7XG4gICAgICAgIHRoaXMuc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnk7XG4gICAgICAgIHRoaXMuYnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB9XG4gICAgQnVmZmVyU2tpcENvdW50U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgYnVmZmVyU2l6ZSA9IF9hLmJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkgPSBfYS5zdGFydEJ1ZmZlckV2ZXJ5LCBidWZmZXJzID0gX2EuYnVmZmVycywgY291bnQgPSBfYS5jb3VudDtcbiAgICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgICBpZiAoY291bnQgJSBzdGFydEJ1ZmZlckV2ZXJ5ID09PSAwKSB7XG4gICAgICAgICAgICBidWZmZXJzLnB1c2goW10pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSBidWZmZXJzLmxlbmd0aDsgaS0tOykge1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaV07XG4gICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChidWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBCdWZmZXJTa2lwQ291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGJ1ZmZlcnMgPSBfYS5idWZmZXJzLCBkZXN0aW5hdGlvbiA9IF9hLmRlc3RpbmF0aW9uO1xuICAgICAgICB3aGlsZSAoYnVmZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gYnVmZmVycy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24ubmV4dChidWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyU2tpcENvdW50U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlckNvdW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBpc1NjaGVkdWxlcl8xID0gcmVxdWlyZSgnLi4vdXRpbC9pc1NjaGVkdWxlcicpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogQnVmZmVycyB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIGZvciBhIHNwZWNpZmljIHRpbWUgcGVyaW9kLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5Db2xsZWN0cyB2YWx1ZXMgZnJvbSB0aGUgcGFzdCBhcyBhbiBhcnJheSwgYW5kIGVtaXRzXG4gKiB0aG9zZSBhcnJheXMgcGVyaW9kaWNhbGx5IGluIHRpbWUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvYnVmZmVyVGltZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBCdWZmZXJzIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UgZm9yIGEgc3BlY2lmaWMgdGltZSBkdXJhdGlvbiBgYnVmZmVyVGltZVNwYW5gLlxuICogVW5sZXNzIHRoZSBvcHRpb25hbCBhcmd1bWVudCBgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbGAgaXMgZ2l2ZW4sIGl0IGVtaXRzIGFuZFxuICogcmVzZXRzIHRoZSBidWZmZXIgZXZlcnkgYGJ1ZmZlclRpbWVTcGFuYCBtaWxsaXNlY29uZHMuIElmXG4gKiBgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbGAgaXMgZ2l2ZW4sIHRoaXMgb3BlcmF0b3Igb3BlbnMgdGhlIGJ1ZmZlciBldmVyeVxuICogYGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWxgIG1pbGxpc2Vjb25kcyBhbmQgY2xvc2VzIChlbWl0cyBhbmQgcmVzZXRzKSB0aGVcbiAqIGJ1ZmZlciBldmVyeSBgYnVmZmVyVGltZVNwYW5gIG1pbGxpc2Vjb25kcy4gV2hlbiB0aGUgb3B0aW9uYWwgYXJndW1lbnRcbiAqIGBtYXhCdWZmZXJTaXplYCBpcyBzcGVjaWZpZWQsIHRoZSBidWZmZXIgd2lsbCBiZSBjbG9zZWQgZWl0aGVyIGFmdGVyXG4gKiBgYnVmZmVyVGltZVNwYW5gIG1pbGxpc2Vjb25kcyBvciB3aGVuIGl0IGNvbnRhaW5zIGBtYXhCdWZmZXJTaXplYCBlbGVtZW50cy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FdmVyeSBzZWNvbmQsIGVtaXQgYW4gYXJyYXkgb2YgdGhlIHJlY2VudCBjbGljayBldmVudHM8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGJ1ZmZlcmVkID0gY2xpY2tzLmJ1ZmZlclRpbWUoMTAwMCk7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXZlcnkgNSBzZWNvbmRzLCBlbWl0IHRoZSBjbGljayBldmVudHMgZnJvbSB0aGUgbmV4dCAyIHNlY29uZHM8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGJ1ZmZlcmVkID0gY2xpY2tzLmJ1ZmZlclRpbWUoMjAwMCwgNTAwMCk7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYnVmZmVyfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyQ291bnR9XG4gKiBAc2VlIHtAbGluayBidWZmZXJUb2dnbGV9XG4gKiBAc2VlIHtAbGluayBidWZmZXJXaGVufVxuICogQHNlZSB7QGxpbmsgd2luZG93VGltZX1cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYnVmZmVyVGltZVNwYW4gVGhlIGFtb3VudCBvZiB0aW1lIHRvIGZpbGwgZWFjaCBidWZmZXIgYXJyYXkuXG4gKiBAcGFyYW0ge251bWJlcn0gW2J1ZmZlckNyZWF0aW9uSW50ZXJ2YWxdIFRoZSBpbnRlcnZhbCBhdCB3aGljaCB0byBzdGFydCBuZXdcbiAqIGJ1ZmZlcnMuXG4gKiBAcGFyYW0ge251bWJlcn0gW21heEJ1ZmZlclNpemVdIFRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplLlxuICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXI9YXN5bmNdIFRoZSBzY2hlZHVsZXIgb24gd2hpY2ggdG8gc2NoZWR1bGUgdGhlXG4gKiBpbnRlcnZhbHMgdGhhdCBkZXRlcm1pbmUgYnVmZmVyIGJvdW5kYXJpZXMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRbXT59IEFuIG9ic2VydmFibGUgb2YgYXJyYXlzIG9mIGJ1ZmZlcmVkIHZhbHVlcy5cbiAqIEBtZXRob2QgYnVmZmVyVGltZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gYnVmZmVyVGltZShidWZmZXJUaW1lU3Bhbikge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jO1xuICAgIGlmIChpc1NjaGVkdWxlcl8xLmlzU2NoZWR1bGVyKGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGxlbmd0aC0tO1xuICAgIH1cbiAgICB2YXIgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA9IG51bGw7XG4gICAgaWYgKGxlbmd0aCA+PSAyKSB7XG4gICAgICAgIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSBhcmd1bWVudHNbMV07XG4gICAgfVxuICAgIHZhciBtYXhCdWZmZXJTaXplID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGlmIChsZW5ndGggPj0gMykge1xuICAgICAgICBtYXhCdWZmZXJTaXplID0gYXJndW1lbnRzWzJdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gYnVmZmVyVGltZU9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgQnVmZmVyVGltZU9wZXJhdG9yKGJ1ZmZlclRpbWVTcGFuLCBidWZmZXJDcmVhdGlvbkludGVydmFsLCBtYXhCdWZmZXJTaXplLCBzY2hlZHVsZXIpKTtcbiAgICB9O1xufVxuZXhwb3J0cy5idWZmZXJUaW1lID0gYnVmZmVyVGltZTtcbnZhciBCdWZmZXJUaW1lT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJ1ZmZlclRpbWVPcGVyYXRvcihidWZmZXJUaW1lU3BhbiwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCwgbWF4QnVmZmVyU2l6ZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyVGltZVNwYW4gPSBidWZmZXJUaW1lU3BhbjtcbiAgICAgICAgdGhpcy5idWZmZXJDcmVhdGlvbkludGVydmFsID0gYnVmZmVyQ3JlYXRpb25JbnRlcnZhbDtcbiAgICAgICAgdGhpcy5tYXhCdWZmZXJTaXplID0gbWF4QnVmZmVyU2l6ZTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIEJ1ZmZlclRpbWVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEJ1ZmZlclRpbWVTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuYnVmZmVyVGltZVNwYW4sIHRoaXMuYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCwgdGhpcy5tYXhCdWZmZXJTaXplLCB0aGlzLnNjaGVkdWxlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlclRpbWVPcGVyYXRvcjtcbn0oKSk7XG52YXIgQ29udGV4dCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIENvbnRleHQ7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBCdWZmZXJUaW1lU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1ZmZlclRpbWVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJ1ZmZlclRpbWVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBidWZmZXJUaW1lU3BhbiwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCwgbWF4QnVmZmVyU2l6ZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5idWZmZXJUaW1lU3BhbiA9IGJ1ZmZlclRpbWVTcGFuO1xuICAgICAgICB0aGlzLmJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSBidWZmZXJDcmVhdGlvbkludGVydmFsO1xuICAgICAgICB0aGlzLm1heEJ1ZmZlclNpemUgPSBtYXhCdWZmZXJTaXplO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMub3BlbkNvbnRleHQoKTtcbiAgICAgICAgdGhpcy50aW1lc3Bhbk9ubHkgPSBidWZmZXJDcmVhdGlvbkludGVydmFsID09IG51bGwgfHwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA8IDA7XG4gICAgICAgIGlmICh0aGlzLnRpbWVzcGFuT25seSkge1xuICAgICAgICAgICAgdmFyIHRpbWVTcGFuT25seVN0YXRlID0geyBzdWJzY3JpYmVyOiB0aGlzLCBjb250ZXh0OiBjb250ZXh0LCBidWZmZXJUaW1lU3BhbjogYnVmZmVyVGltZVNwYW4gfTtcbiAgICAgICAgICAgIHRoaXMuYWRkKGNvbnRleHQuY2xvc2VBY3Rpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hCdWZmZXJUaW1lU3Bhbk9ubHksIGJ1ZmZlclRpbWVTcGFuLCB0aW1lU3Bhbk9ubHlTdGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNsb3NlU3RhdGUgPSB7IHN1YnNjcmliZXI6IHRoaXMsIGNvbnRleHQ6IGNvbnRleHQgfTtcbiAgICAgICAgICAgIHZhciBjcmVhdGlvblN0YXRlID0geyBidWZmZXJUaW1lU3BhbjogYnVmZmVyVGltZVNwYW4sIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWw6IGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwsIHN1YnNjcmliZXI6IHRoaXMsIHNjaGVkdWxlcjogc2NoZWR1bGVyIH07XG4gICAgICAgICAgICB0aGlzLmFkZChjb250ZXh0LmNsb3NlQWN0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoQnVmZmVyQ2xvc2UsIGJ1ZmZlclRpbWVTcGFuLCBjbG9zZVN0YXRlKSk7XG4gICAgICAgICAgICB0aGlzLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hCdWZmZXJDcmVhdGlvbiwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCwgY3JlYXRpb25TdGF0ZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIEJ1ZmZlclRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgbGVuID0gY29udGV4dHMubGVuZ3RoO1xuICAgICAgICB2YXIgZmlsbGVkQnVmZmVyQ29udGV4dDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjb250ZXh0c1tpXTtcbiAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmJ1ZmZlcjtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09IHRoaXMubWF4QnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgICAgIGZpbGxlZEJ1ZmZlckNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxsZWRCdWZmZXJDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLm9uQnVmZmVyRnVsbChmaWxsZWRCdWZmZXJDb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyVGltZVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0cy5sZW5ndGggPSAwO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsIGVycik7XG4gICAgfTtcbiAgICBCdWZmZXJUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBjb250ZXh0cyA9IF9hLmNvbnRleHRzLCBkZXN0aW5hdGlvbiA9IF9hLmRlc3RpbmF0aW9uO1xuICAgICAgICB3aGlsZSAoY29udGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjb250ZXh0cy5zaGlmdCgpO1xuICAgICAgICAgICAgZGVzdGluYXRpb24ubmV4dChjb250ZXh0LmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBCdWZmZXJUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbnRleHRzID0gbnVsbDtcbiAgICB9O1xuICAgIEJ1ZmZlclRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5vbkJ1ZmZlckZ1bGwgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB0aGlzLmNsb3NlQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgdmFyIGNsb3NlQWN0aW9uID0gY29udGV4dC5jbG9zZUFjdGlvbjtcbiAgICAgICAgY2xvc2VBY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZW1vdmUoY2xvc2VBY3Rpb24pO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkICYmIHRoaXMudGltZXNwYW5Pbmx5KSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdGhpcy5vcGVuQ29udGV4dCgpO1xuICAgICAgICAgICAgdmFyIGJ1ZmZlclRpbWVTcGFuID0gdGhpcy5idWZmZXJUaW1lU3BhbjtcbiAgICAgICAgICAgIHZhciB0aW1lU3Bhbk9ubHlTdGF0ZSA9IHsgc3Vic2NyaWJlcjogdGhpcywgY29udGV4dDogY29udGV4dCwgYnVmZmVyVGltZVNwYW46IGJ1ZmZlclRpbWVTcGFuIH07XG4gICAgICAgICAgICB0aGlzLmFkZChjb250ZXh0LmNsb3NlQWN0aW9uID0gdGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hCdWZmZXJUaW1lU3Bhbk9ubHksIGJ1ZmZlclRpbWVTcGFuLCB0aW1lU3Bhbk9ubHlTdGF0ZSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBCdWZmZXJUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUub3BlbkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0cy5wdXNoKGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9O1xuICAgIEJ1ZmZlclRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5jbG9zZUNvbnRleHQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoY29udGV4dC5idWZmZXIpO1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgc3BsaWNlSW5kZXggPSBjb250ZXh0cyA/IGNvbnRleHRzLmluZGV4T2YoY29udGV4dCkgOiAtMTtcbiAgICAgICAgaWYgKHNwbGljZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnRleHRzLnNwbGljZShjb250ZXh0cy5pbmRleE9mKGNvbnRleHQpLCAxKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlclRpbWVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gZGlzcGF0Y2hCdWZmZXJUaW1lU3Bhbk9ubHkoc3RhdGUpIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXI7XG4gICAgdmFyIHByZXZDb250ZXh0ID0gc3RhdGUuY29udGV4dDtcbiAgICBpZiAocHJldkNvbnRleHQpIHtcbiAgICAgICAgc3Vic2NyaWJlci5jbG9zZUNvbnRleHQocHJldkNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBzdWJzY3JpYmVyLm9wZW5Db250ZXh0KCk7XG4gICAgICAgIHN0YXRlLmNvbnRleHQuY2xvc2VBY3Rpb24gPSB0aGlzLnNjaGVkdWxlKHN0YXRlLCBzdGF0ZS5idWZmZXJUaW1lU3Bhbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGlzcGF0Y2hCdWZmZXJDcmVhdGlvbihzdGF0ZSkge1xuICAgIHZhciBidWZmZXJDcmVhdGlvbkludGVydmFsID0gc3RhdGUuYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCwgYnVmZmVyVGltZVNwYW4gPSBzdGF0ZS5idWZmZXJUaW1lU3Bhbiwgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXIsIHNjaGVkdWxlciA9IHN0YXRlLnNjaGVkdWxlcjtcbiAgICB2YXIgY29udGV4dCA9IHN1YnNjcmliZXIub3BlbkNvbnRleHQoKTtcbiAgICB2YXIgYWN0aW9uID0gdGhpcztcbiAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgIHN1YnNjcmliZXIuYWRkKGNvbnRleHQuY2xvc2VBY3Rpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hCdWZmZXJDbG9zZSwgYnVmZmVyVGltZVNwYW4sIHsgc3Vic2NyaWJlcjogc3Vic2NyaWJlciwgY29udGV4dDogY29udGV4dCB9KSk7XG4gICAgICAgIGFjdGlvbi5zY2hlZHVsZShzdGF0ZSwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGlzcGF0Y2hCdWZmZXJDbG9zZShhcmcpIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IGFyZy5zdWJzY3JpYmVyLCBjb250ZXh0ID0gYXJnLmNvbnRleHQ7XG4gICAgc3Vic2NyaWJlci5jbG9zZUNvbnRleHQoY29udGV4dCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpcHRpb24nKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG4vKipcbiAqIEJ1ZmZlcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyBzdGFydGluZyBmcm9tIGFuIGVtaXNzaW9uIGZyb21cbiAqIGBvcGVuaW5nc2AgYW5kIGVuZGluZyB3aGVuIHRoZSBvdXRwdXQgb2YgYGNsb3NpbmdTZWxlY3RvcmAgZW1pdHMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNvbGxlY3RzIHZhbHVlcyBmcm9tIHRoZSBwYXN0IGFzIGFuIGFycmF5LiBTdGFydHNcbiAqIGNvbGxlY3Rpbmcgb25seSB3aGVuIGBvcGVuaW5nYCBlbWl0cywgYW5kIGNhbGxzIHRoZSBgY2xvc2luZ1NlbGVjdG9yYFxuICogZnVuY3Rpb24gdG8gZ2V0IGFuIE9ic2VydmFibGUgdGhhdCB0ZWxscyB3aGVuIHRvIGNsb3NlIHRoZSBidWZmZXIuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvYnVmZmVyVG9nZ2xlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEJ1ZmZlcnMgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBieSBvcGVuaW5nIHRoZSBidWZmZXIgdmlhIHNpZ25hbHMgZnJvbSBhblxuICogT2JzZXJ2YWJsZSBwcm92aWRlZCB0byBgb3BlbmluZ3NgLCBhbmQgY2xvc2luZyBhbmQgc2VuZGluZyB0aGUgYnVmZmVycyB3aGVuXG4gKiBhIFN1YnNjcmliYWJsZSBvciBQcm9taXNlIHJldHVybmVkIGJ5IHRoZSBgY2xvc2luZ1NlbGVjdG9yYCBmdW5jdGlvbiBlbWl0cy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FdmVyeSBvdGhlciBzZWNvbmQsIGVtaXQgdGhlIGNsaWNrIGV2ZW50cyBmcm9tIHRoZSBuZXh0IDUwMG1zPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBvcGVuaW5ncyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgYnVmZmVyZWQgPSBjbGlja3MuYnVmZmVyVG9nZ2xlKG9wZW5pbmdzLCBpID0+XG4gKiAgIGkgJSAyID8gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCg1MDApIDogUnguT2JzZXJ2YWJsZS5lbXB0eSgpXG4gKiApO1xuICogYnVmZmVyZWQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlckNvdW50fVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVGltZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcldoZW59XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUb2dnbGV9XG4gKlxuICogQHBhcmFtIHtTdWJzY3JpYmFibGVPclByb21pc2U8Tz59IG9wZW5pbmdzIEEgU3Vic2NyaWJhYmxlIG9yIFByb21pc2Ugb2Ygbm90aWZpY2F0aW9ucyB0byBzdGFydCBuZXdcbiAqIGJ1ZmZlcnMuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBPKTogU3Vic2NyaWJhYmxlT3JQcm9taXNlfSBjbG9zaW5nU2VsZWN0b3IgQSBmdW5jdGlvbiB0aGF0IHRha2VzXG4gKiB0aGUgdmFsdWUgZW1pdHRlZCBieSB0aGUgYG9wZW5pbmdzYCBvYnNlcnZhYmxlIGFuZCByZXR1cm5zIGEgU3Vic2NyaWJhYmxlIG9yIFByb21pc2UsXG4gKiB3aGljaCwgd2hlbiBpdCBlbWl0cywgc2lnbmFscyB0aGF0IHRoZSBhc3NvY2lhdGVkIGJ1ZmZlciBzaG91bGQgYmUgZW1pdHRlZFxuICogYW5kIGNsZWFyZWQuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRbXT59IEFuIG9ic2VydmFibGUgb2YgYXJyYXlzIG9mIGJ1ZmZlcmVkIHZhbHVlcy5cbiAqIEBtZXRob2QgYnVmZmVyVG9nZ2xlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBidWZmZXJUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBidWZmZXJUb2dnbGVPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IEJ1ZmZlclRvZ2dsZU9wZXJhdG9yKG9wZW5pbmdzLCBjbG9zaW5nU2VsZWN0b3IpKTtcbiAgICB9O1xufVxuZXhwb3J0cy5idWZmZXJUb2dnbGUgPSBidWZmZXJUb2dnbGU7XG52YXIgQnVmZmVyVG9nZ2xlT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJ1ZmZlclRvZ2dsZU9wZXJhdG9yKG9wZW5pbmdzLCBjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5vcGVuaW5ncyA9IG9wZW5pbmdzO1xuICAgICAgICB0aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICB9XG4gICAgQnVmZmVyVG9nZ2xlT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBCdWZmZXJUb2dnbGVTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMub3BlbmluZ3MsIHRoaXMuY2xvc2luZ1NlbGVjdG9yKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyVG9nZ2xlT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBCdWZmZXJUb2dnbGVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQnVmZmVyVG9nZ2xlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdWZmZXJUb2dnbGVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5vcGVuaW5ncyA9IG9wZW5pbmdzO1xuICAgICAgICB0aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICAgICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIG9wZW5pbmdzKSk7XG4gICAgfVxuICAgIEJ1ZmZlclRvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIHZhciBsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRleHRzW2ldLmJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyVG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB3aGlsZSAoY29udGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjb250ZXh0cy5zaGlmdCgpO1xuICAgICAgICAgICAgY29udGV4dC5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGNvbnRleHQuYnVmZmVyID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRleHQuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHRzID0gbnVsbDtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZXJyb3IuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH07XG4gICAgQnVmZmVyVG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB3aGlsZSAoY29udGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjb250ZXh0cy5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGNvbnRleHQuYnVmZmVyKTtcbiAgICAgICAgICAgIGNvbnRleHQuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBjb250ZXh0LmJ1ZmZlciA9IG51bGw7XG4gICAgICAgICAgICBjb250ZXh0LnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0cyA9IG51bGw7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBCdWZmZXJUb2dnbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIG91dGVyVmFsdWUgPyB0aGlzLmNsb3NlQnVmZmVyKG91dGVyVmFsdWUpIDogdGhpcy5vcGVuQnVmZmVyKGlubmVyVmFsdWUpO1xuICAgIH07XG4gICAgQnVmZmVyVG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5jbG9zZUJ1ZmZlcihpbm5lclN1Yi5jb250ZXh0KTtcbiAgICB9O1xuICAgIEJ1ZmZlclRvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLm9wZW5CdWZmZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nU2VsZWN0b3IgPSB0aGlzLmNsb3NpbmdTZWxlY3RvcjtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nTm90aWZpZXIgPSBjbG9zaW5nU2VsZWN0b3IuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY2xvc2luZ05vdGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cnlTdWJzY3JpYmUoY2xvc2luZ05vdGlmaWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBCdWZmZXJUb2dnbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5jbG9zZUJ1ZmZlciA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIGlmIChjb250ZXh0cyAmJiBjb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gY29udGV4dC5idWZmZXIsIHN1YnNjcmlwdGlvbiA9IGNvbnRleHQuc3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICBjb250ZXh0cy5zcGxpY2UoY29udGV4dHMuaW5kZXhPZihjb250ZXh0KSwgMSk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJ1ZmZlclRvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChjbG9zaW5nTm90aWZpZXIpIHtcbiAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbigpO1xuICAgICAgICB2YXIgY29udGV4dCA9IHsgYnVmZmVyOiBidWZmZXIsIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uIH07XG4gICAgICAgIGNvbnRleHRzLnB1c2goY29udGV4dCk7XG4gICAgICAgIHZhciBpbm5lclN1YnNjcmlwdGlvbiA9IHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgY2xvc2luZ05vdGlmaWVyLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFpbm5lclN1YnNjcmlwdGlvbiB8fCBpbm5lclN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VCdWZmZXIoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbm5lclN1YnNjcmlwdGlvbi5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIHRoaXMuYWRkKGlubmVyU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoaW5uZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyVG9nZ2xlU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJUb2dnbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmlwdGlvbicpO1xudmFyIHRyeUNhdGNoXzEgPSByZXF1aXJlKCcuLi91dGlsL3RyeUNhdGNoJyk7XG52YXIgZXJyb3JPYmplY3RfMSA9IHJlcXVpcmUoJy4uL3V0aWwvZXJyb3JPYmplY3QnKTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKipcbiAqIEJ1ZmZlcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcywgdXNpbmcgYSBmYWN0b3J5IGZ1bmN0aW9uIG9mIGNsb3NpbmdcbiAqIE9ic2VydmFibGVzIHRvIGRldGVybWluZSB3aGVuIHRvIGNsb3NlLCBlbWl0LCBhbmQgcmVzZXQgdGhlIGJ1ZmZlci5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Q29sbGVjdHMgdmFsdWVzIGZyb20gdGhlIHBhc3QgYXMgYW4gYXJyYXkuIFdoZW4gaXRcbiAqIHN0YXJ0cyBjb2xsZWN0aW5nIHZhbHVlcywgaXQgY2FsbHMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0XG4gKiB0ZWxscyB3aGVuIHRvIGNsb3NlIHRoZSBidWZmZXIgYW5kIHJlc3RhcnQgY29sbGVjdGluZy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9idWZmZXJXaGVuLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIE9wZW5zIGEgYnVmZmVyIGltbWVkaWF0ZWx5LCB0aGVuIGNsb3NlcyB0aGUgYnVmZmVyIHdoZW4gdGhlIG9ic2VydmFibGVcbiAqIHJldHVybmVkIGJ5IGNhbGxpbmcgYGNsb3NpbmdTZWxlY3RvcmAgZnVuY3Rpb24gZW1pdHMgYSB2YWx1ZS4gV2hlbiBpdCBjbG9zZXNcbiAqIHRoZSBidWZmZXIsIGl0IGltbWVkaWF0ZWx5IG9wZW5zIGEgbmV3IGJ1ZmZlciBhbmQgcmVwZWF0cyB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IGFuIGFycmF5IG9mIHRoZSBsYXN0IGNsaWNrcyBldmVyeSBbMS01XSByYW5kb20gc2Vjb25kczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgYnVmZmVyZWQgPSBjbGlja3MuYnVmZmVyV2hlbigoKSA9PlxuICogICBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDAgKyBNYXRoLnJhbmRvbSgpICogNDAwMClcbiAqICk7XG4gKiBidWZmZXJlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYnVmZmVyfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyQ291bnR9XG4gKiBAc2VlIHtAbGluayBidWZmZXJUaW1lfVxuICogQHNlZSB7QGxpbmsgYnVmZmVyVG9nZ2xlfVxuICogQHNlZSB7QGxpbmsgd2luZG93V2hlbn1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IE9ic2VydmFibGV9IGNsb3NpbmdTZWxlY3RvciBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm9cbiAqIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgc2lnbmFscyBidWZmZXIgY2xvc3VyZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VFtdPn0gQW4gb2JzZXJ2YWJsZSBvZiBhcnJheXMgb2YgYnVmZmVyZWQgdmFsdWVzLlxuICogQG1ldGhvZCBidWZmZXJXaGVuXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBidWZmZXJXaGVuKGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgQnVmZmVyV2hlbk9wZXJhdG9yKGNsb3NpbmdTZWxlY3RvcikpO1xuICAgIH07XG59XG5leHBvcnRzLmJ1ZmZlcldoZW4gPSBidWZmZXJXaGVuO1xudmFyIEJ1ZmZlcldoZW5PcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQnVmZmVyV2hlbk9wZXJhdG9yKGNsb3NpbmdTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICB9XG4gICAgQnVmZmVyV2hlbk9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgQnVmZmVyV2hlblN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5jbG9zaW5nU2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXJXaGVuT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBCdWZmZXJXaGVuU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJ1ZmZlcldoZW5TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJ1ZmZlcldoZW5TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5CdWZmZXIoKTtcbiAgICB9XG4gICAgQnVmZmVyV2hlblN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnB1c2godmFsdWUpO1xuICAgIH07XG4gICAgQnVmZmVyV2hlblN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICBpZiAoYnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIEJ1ZmZlcldoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmluZyA9IGZhbHNlO1xuICAgIH07XG4gICAgQnVmZmVyV2hlblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5vcGVuQnVmZmVyKCk7XG4gICAgfTtcbiAgICBCdWZmZXJXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmliaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5CdWZmZXIoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyV2hlblN1YnNjcmliZXIucHJvdG90eXBlLm9wZW5CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaXB0aW9uID0gdGhpcy5jbG9zaW5nU3Vic2NyaXB0aW9uO1xuICAgICAgICBpZiAoY2xvc2luZ1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoY2xvc2luZ1N1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICBjbG9zaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChidWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgICAgIHZhciBjbG9zaW5nTm90aWZpZXIgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHRoaXMuY2xvc2luZ1NlbGVjdG9yKSgpO1xuICAgICAgICBpZiAoY2xvc2luZ05vdGlmaWVyID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjbG9zaW5nU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jbG9zaW5nU3Vic2NyaXB0aW9uID0gY2xvc2luZ1N1YnNjcmlwdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYWRkKGNsb3NpbmdTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmluZyA9IHRydWU7XG4gICAgICAgICAgICBjbG9zaW5nU3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIGNsb3NpbmdOb3RpZmllcikpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyV2hlblN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyV2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qKlxuICogQ2F0Y2hlcyBlcnJvcnMgb24gdGhlIG9ic2VydmFibGUgdG8gYmUgaGFuZGxlZCBieSByZXR1cm5pbmcgYSBuZXcgb2JzZXJ2YWJsZSBvciB0aHJvd2luZyBhbiBlcnJvci5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2NhdGNoLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbnRpbnVlcyB3aXRoIGEgZGlmZmVyZW50IE9ic2VydmFibGUgd2hlbiB0aGVyZSdzIGFuIGVycm9yPC9jYXB0aW9uPlxuICpcbiAqIE9ic2VydmFibGUub2YoMSwgMiwgMywgNCwgNSlcbiAqICAgLm1hcChuID0+IHtcbiAqIFx0ICAgaWYgKG4gPT0gNCkge1xuICogXHQgICAgIHRocm93ICdmb3VyISc7XG4gKiAgICAgfVxuICpcdCAgIHJldHVybiBuO1xuICogICB9KVxuICogICAuY2F0Y2goZXJyID0+IE9ic2VydmFibGUub2YoJ0knLCAnSUknLCAnSUlJJywgJ0lWJywgJ1YnKSlcbiAqICAgLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqICAgLy8gMSwgMiwgMywgSSwgSUksIElJSSwgSVYsIFZcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5SZXRyaWVzIHRoZSBjYXVnaHQgc291cmNlIE9ic2VydmFibGUgYWdhaW4gaW4gY2FzZSBvZiBlcnJvciwgc2ltaWxhciB0byByZXRyeSgpIG9wZXJhdG9yPC9jYXB0aW9uPlxuICpcbiAqIE9ic2VydmFibGUub2YoMSwgMiwgMywgNCwgNSlcbiAqICAgLm1hcChuID0+IHtcbiAqIFx0ICAgaWYgKG4gPT09IDQpIHtcbiAqIFx0ICAgICB0aHJvdyAnZm91ciEnO1xuICogICAgIH1cbiAqIFx0ICAgcmV0dXJuIG47XG4gKiAgIH0pXG4gKiAgIC5jYXRjaCgoZXJyLCBjYXVnaHQpID0+IGNhdWdodClcbiAqICAgLnRha2UoMzApXG4gKiAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKiAgIC8vIDEsIDIsIDMsIDEsIDIsIDMsIC4uLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlRocm93cyBhIG5ldyBlcnJvciB3aGVuIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aHJvd3MgYW4gZXJyb3I8L2NhcHRpb24+XG4gKlxuICogT2JzZXJ2YWJsZS5vZigxLCAyLCAzLCA0LCA1KVxuICogICAubWFwKG4gPT4ge1xuICogICAgIGlmIChuID09IDQpIHtcbiAqICAgICAgIHRocm93ICdmb3VyISc7XG4gKiAgICAgfVxuICogICAgIHJldHVybiBuO1xuICogICB9KVxuICogICAuY2F0Y2goZXJyID0+IHtcbiAqICAgICB0aHJvdyAnZXJyb3IgaW4gc291cmNlLiBEZXRhaWxzOiAnICsgZXJyO1xuICogICB9KVxuICogICAuc3Vic2NyaWJlKFxuICogICAgIHggPT4gY29uc29sZS5sb2coeCksXG4gKiAgICAgZXJyID0+IGNvbnNvbGUubG9nKGVycilcbiAqICAgKTtcbiAqICAgLy8gMSwgMiwgMywgZXJyb3IgaW4gc291cmNlLiBEZXRhaWxzOiBmb3VyIVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHNlbGVjdG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhcyBhcmd1bWVudHMgYGVycmAsIHdoaWNoIGlzIHRoZSBlcnJvciwgYW5kIGBjYXVnaHRgLCB3aGljaFxuICogIGlzIHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZSwgaW4gY2FzZSB5b3UnZCBsaWtlIHRvIFwicmV0cnlcIiB0aGF0IG9ic2VydmFibGUgYnkgcmV0dXJuaW5nIGl0IGFnYWluLiBXaGF0ZXZlciBvYnNlcnZhYmxlXG4gKiAgaXMgcmV0dXJuZWQgYnkgdGhlIGBzZWxlY3RvcmAgd2lsbCBiZSB1c2VkIHRvIGNvbnRpbnVlIHRoZSBvYnNlcnZhYmxlIGNoYWluLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gb2JzZXJ2YWJsZSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBlaXRoZXIgdGhlIHNvdXJjZSBvciB0aGUgb2JzZXJ2YWJsZSByZXR1cm5lZCBieSB0aGVcbiAqICBjYXRjaCBgc2VsZWN0b3JgIGZ1bmN0aW9uLlxuICogQG5hbWUgY2F0Y2hFcnJvclxuICovXG5mdW5jdGlvbiBjYXRjaEVycm9yKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhdGNoRXJyb3JPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICB2YXIgb3BlcmF0b3IgPSBuZXcgQ2F0Y2hPcGVyYXRvcihzZWxlY3Rvcik7XG4gICAgICAgIHZhciBjYXVnaHQgPSBzb3VyY2UubGlmdChvcGVyYXRvcik7XG4gICAgICAgIHJldHVybiAob3BlcmF0b3IuY2F1Z2h0ID0gY2F1Z2h0KTtcbiAgICB9O1xufVxuZXhwb3J0cy5jYXRjaEVycm9yID0gY2F0Y2hFcnJvcjtcbnZhciBDYXRjaE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDYXRjaE9wZXJhdG9yKHNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICB9XG4gICAgQ2F0Y2hPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IENhdGNoU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnNlbGVjdG9yLCB0aGlzLmNhdWdodCkpO1xuICAgIH07XG4gICAgcmV0dXJuIENhdGNoT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBDYXRjaFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDYXRjaFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ2F0Y2hTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBzZWxlY3RvciwgY2F1Z2h0KSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICB0aGlzLmNhdWdodCA9IGNhdWdodDtcbiAgICB9XG4gICAgLy8gTk9URTogb3ZlcnJpZGluZyBgZXJyb3JgIGluc3RlYWQgb2YgYF9lcnJvcmAgYmVjYXVzZSB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaGF2ZSB0aGlzIGZsYWcgdGhpcyBzdWJzY3JpYmVyIGFzIGBpc1N0b3BwZWRgLiBXZSBjYW4gbWltaWMgdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgdGhlIFJldHJ5U3Vic2NyaWJlciAoZnJvbSB0aGUgYHJldHJ5YCBvcGVyYXRvciksIHdoZXJlXG4gICAgLy8gd2UgdW5zdWJzY3JpYmUgZnJvbSBvdXIgc291cmNlIGNoYWluLCByZXNldCBvdXIgU3Vic2NyaWJlciBmbGFncyxcbiAgICAvLyB0aGVuIHN1YnNjcmliZSB0byB0aGUgc2VsZWN0b3IgcmVzdWx0LlxuICAgIENhdGNoU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuc2VsZWN0b3IoZXJyLCB0aGlzLmNhdWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyMikge1xuICAgICAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLCBlcnIyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkKHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgcmVzdWx0KSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDYXRjaFN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2F0Y2hFcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBjb21iaW5lTGF0ZXN0XzEgPSByZXF1aXJlKCcuLi9vcGVyYXRvcnMvY29tYmluZUxhdGVzdCcpO1xuZnVuY3Rpb24gY29tYmluZUFsbChwcm9qZWN0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBjb21iaW5lTGF0ZXN0XzEuQ29tYmluZUxhdGVzdE9wZXJhdG9yKHByb2plY3QpKTsgfTtcbn1cbmV4cG9ydHMuY29tYmluZUFsbCA9IGNvbWJpbmVBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lQWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgQXJyYXlPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9vYnNlcnZhYmxlL0FycmF5T2JzZXJ2YWJsZScpO1xudmFyIGlzQXJyYXlfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNBcnJheScpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbnZhciBub25lID0ge307XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBPYnNlcnZhYmxlcyB0byBjcmVhdGUgYW4gT2JzZXJ2YWJsZSB3aG9zZSB2YWx1ZXMgYXJlXG4gKiBjYWxjdWxhdGVkIGZyb20gdGhlIGxhdGVzdCB2YWx1ZXMgb2YgZWFjaCBvZiBpdHMgaW5wdXQgT2JzZXJ2YWJsZXMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPldoZW5ldmVyIGFueSBpbnB1dCBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUsIGl0XG4gKiBjb21wdXRlcyBhIGZvcm11bGEgdXNpbmcgdGhlIGxhdGVzdCB2YWx1ZXMgZnJvbSBhbGwgdGhlIGlucHV0cywgdGhlbiBlbWl0c1xuICogdGhlIG91dHB1dCBvZiB0aGF0IGZvcm11bGEuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvY29tYmluZUxhdGVzdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgY29tYmluZUxhdGVzdGAgY29tYmluZXMgdGhlIHZhbHVlcyBmcm9tIHRoaXMgT2JzZXJ2YWJsZSB3aXRoIHZhbHVlcyBmcm9tXG4gKiBPYnNlcnZhYmxlcyBwYXNzZWQgYXMgYXJndW1lbnRzLiBUaGlzIGlzIGRvbmUgYnkgc3Vic2NyaWJpbmcgdG8gZWFjaFxuICogT2JzZXJ2YWJsZSwgaW4gb3JkZXIsIGFuZCBjb2xsZWN0aW5nIGFuIGFycmF5IG9mIGVhY2ggb2YgdGhlIG1vc3QgcmVjZW50XG4gKiB2YWx1ZXMgYW55IHRpbWUgYW55IG9mIHRoZSBpbnB1dCBPYnNlcnZhYmxlcyBlbWl0cywgdGhlbiBlaXRoZXIgdGFraW5nIHRoYXRcbiAqIGFycmF5IGFuZCBwYXNzaW5nIGl0IGFzIGFyZ3VtZW50cyB0byBhbiBvcHRpb25hbCBgcHJvamVjdGAgZnVuY3Rpb24gYW5kXG4gKiBlbWl0dGluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQsIG9yIGp1c3QgZW1pdHRpbmcgdGhlIGFycmF5IG9mIHJlY2VudFxuICogdmFsdWVzIGRpcmVjdGx5IGlmIHRoZXJlIGlzIG5vIGBwcm9qZWN0YCBmdW5jdGlvbi5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5EeW5hbWljYWxseSBjYWxjdWxhdGUgdGhlIEJvZHktTWFzcyBJbmRleCBmcm9tIGFuIE9ic2VydmFibGUgb2Ygd2VpZ2h0IGFuZCBvbmUgZm9yIGhlaWdodDwvY2FwdGlvbj5cbiAqIHZhciB3ZWlnaHQgPSBSeC5PYnNlcnZhYmxlLm9mKDcwLCA3MiwgNzYsIDc5LCA3NSk7XG4gKiB2YXIgaGVpZ2h0ID0gUnguT2JzZXJ2YWJsZS5vZigxLjc2LCAxLjc3LCAxLjc4KTtcbiAqIHZhciBibWkgPSB3ZWlnaHQuY29tYmluZUxhdGVzdChoZWlnaHQsICh3LCBoKSA9PiB3IC8gKGggKiBoKSk7XG4gKiBibWkuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coJ0JNSSBpcyAnICsgeCkpO1xuICpcbiAqIC8vIFdpdGggb3V0cHV0IHRvIGNvbnNvbGU6XG4gKiAvLyBCTUkgaXMgMjQuMjEyMjkzMzg4NDI5NzUzXG4gKiAvLyBCTUkgaXMgMjMuOTM5NDgwOTkyMDUyMDlcbiAqIC8vIEJNSSBpcyAyMy42NzEyNTM2Mjk1OTIyMjJcbiAqXG4gKiBAc2VlIHtAbGluayBjb21iaW5lQWxsfVxuICogQHNlZSB7QGxpbmsgbWVyZ2V9XG4gKiBAc2VlIHtAbGluayB3aXRoTGF0ZXN0RnJvbX1cbiAqXG4gKiBAcGFyYW0ge09ic2VydmFibGVJbnB1dH0gb3RoZXIgQW4gaW5wdXQgT2JzZXJ2YWJsZSB0byBjb21iaW5lIHdpdGggdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gTW9yZSB0aGFuIG9uZSBpbnB1dCBPYnNlcnZhYmxlcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbcHJvamVjdF0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gcHJvamVjdCB0aGUgdmFsdWVzIGZyb21cbiAqIHRoZSBjb21iaW5lZCBsYXRlc3QgdmFsdWVzIGludG8gYSBuZXcgdmFsdWUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSBvZiBwcm9qZWN0ZWQgdmFsdWVzIGZyb20gdGhlIG1vc3QgcmVjZW50XG4gKiB2YWx1ZXMgZnJvbSBlYWNoIGlucHV0IE9ic2VydmFibGUsIG9yIGFuIGFycmF5IG9mIHRoZSBtb3N0IHJlY2VudCB2YWx1ZXMgZnJvbVxuICogZWFjaCBpbnB1dCBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBjb21iaW5lTGF0ZXN0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBjb21iaW5lTGF0ZXN0KCkge1xuICAgIHZhciBvYnNlcnZhYmxlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG9ic2VydmFibGVzW19pIC0gMF0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgcHJvamVjdCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBvYnNlcnZhYmxlc1tvYnNlcnZhYmxlcy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9qZWN0ID0gb2JzZXJ2YWJsZXMucG9wKCk7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBmaXJzdCBhbmQgb25seSBvdGhlciBhcmd1bWVudCBiZXNpZGVzIHRoZSByZXN1bHRTZWxlY3RvciBpcyBhbiBhcnJheVxuICAgIC8vIGFzc3VtZSBpdCdzIGJlZW4gY2FsbGVkIHdpdGggYGNvbWJpbmVMYXRlc3QoW29iczEsIG9iczIsIG9iczNdLCBwcm9qZWN0KWBcbiAgICBpZiAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAxICYmIGlzQXJyYXlfMS5pc0FycmF5KG9ic2VydmFibGVzWzBdKSkge1xuICAgICAgICBvYnNlcnZhYmxlcyA9IG9ic2VydmFibGVzWzBdLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdC5jYWxsKG5ldyBBcnJheU9ic2VydmFibGVfMS5BcnJheU9ic2VydmFibGUoW3NvdXJjZV0uY29uY2F0KG9ic2VydmFibGVzKSksIG5ldyBDb21iaW5lTGF0ZXN0T3BlcmF0b3IocHJvamVjdCkpOyB9O1xufVxuZXhwb3J0cy5jb21iaW5lTGF0ZXN0ID0gY29tYmluZUxhdGVzdDtcbnZhciBDb21iaW5lTGF0ZXN0T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbWJpbmVMYXRlc3RPcGVyYXRvcihwcm9qZWN0KSB7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgfVxuICAgIENvbWJpbmVMYXRlc3RPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IENvbWJpbmVMYXRlc3RTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMucHJvamVjdCkpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbWJpbmVMYXRlc3RPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLkNvbWJpbmVMYXRlc3RPcGVyYXRvciA9IENvbWJpbmVMYXRlc3RPcGVyYXRvcjtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgQ29tYmluZUxhdGVzdFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb21iaW5lTGF0ZXN0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb21iaW5lTGF0ZXN0U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJvamVjdCkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5vYnNlcnZhYmxlcyA9IFtdO1xuICAgIH1cbiAgICBDb21iaW5lTGF0ZXN0U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAob2JzZXJ2YWJsZSkge1xuICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKG5vbmUpO1xuICAgICAgICB0aGlzLm9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XG4gICAgfTtcbiAgICBDb21iaW5lTGF0ZXN0U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZXMgPSB0aGlzLm9ic2VydmFibGVzO1xuICAgICAgICB2YXIgbGVuID0gb2JzZXJ2YWJsZXMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGxlbjtcbiAgICAgICAgICAgIHRoaXMudG9SZXNwb25kID0gbGVuO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gb2JzZXJ2YWJsZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoc3Vic2NyaWJlVG9SZXN1bHRfMS5zdWJzY3JpYmVUb1Jlc3VsdCh0aGlzLCBvYnNlcnZhYmxlLCBvYnNlcnZhYmxlLCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbWJpbmVMYXRlc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICh1bnVzZWQpIHtcbiAgICAgICAgaWYgKCh0aGlzLmFjdGl2ZSAtPSAxKSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb21iaW5lTGF0ZXN0U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgICAgIHZhciBvbGRWYWwgPSB2YWx1ZXNbb3V0ZXJJbmRleF07XG4gICAgICAgIHZhciB0b1Jlc3BvbmQgPSAhdGhpcy50b1Jlc3BvbmRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBvbGRWYWwgPT09IG5vbmUgPyAtLXRoaXMudG9SZXNwb25kIDogdGhpcy50b1Jlc3BvbmQ7XG4gICAgICAgIHZhbHVlc1tvdXRlckluZGV4XSA9IGlubmVyVmFsdWU7XG4gICAgICAgIGlmICh0b1Jlc3BvbmQgPT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cnlQcm9qZWN0KHZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWVzLnNsaWNlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb21iaW5lTGF0ZXN0U3Vic2NyaWJlci5wcm90b3R5cGUuX3RyeVByb2plY3QgPSBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnByb2plY3QuYXBwbHkodGhpcywgdmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHJlc3VsdCk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29tYmluZUxhdGVzdFN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5Db21iaW5lTGF0ZXN0U3Vic2NyaWJlciA9IENvbWJpbmVMYXRlc3RTdWJzY3JpYmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tYmluZUxhdGVzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBjb25jYXRfMSA9IHJlcXVpcmUoJy4uL29ic2VydmFibGUvY29uY2F0Jyk7XG52YXIgY29uY2F0XzIgPSByZXF1aXJlKCcuLi9vYnNlcnZhYmxlL2NvbmNhdCcpO1xuZXhwb3J0cy5jb25jYXRTdGF0aWMgPSBjb25jYXRfMi5jb25jYXQ7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBDcmVhdGVzIGFuIG91dHB1dCBPYnNlcnZhYmxlIHdoaWNoIHNlcXVlbnRpYWxseSBlbWl0cyBhbGwgdmFsdWVzIGZyb20gZXZlcnlcbiAqIGdpdmVuIGlucHV0IE9ic2VydmFibGUgYWZ0ZXIgdGhlIGN1cnJlbnQgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+Q29uY2F0ZW5hdGVzIG11bHRpcGxlIE9ic2VydmFibGVzIHRvZ2V0aGVyIGJ5XG4gKiBzZXF1ZW50aWFsbHkgZW1pdHRpbmcgdGhlaXIgdmFsdWVzLCBvbmUgT2JzZXJ2YWJsZSBhZnRlciB0aGUgb3RoZXIuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvY29uY2F0LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEpvaW5zIHRoaXMgT2JzZXJ2YWJsZSB3aXRoIG11bHRpcGxlIG90aGVyIE9ic2VydmFibGVzIGJ5IHN1YnNjcmliaW5nIHRvIHRoZW1cbiAqIG9uZSBhdCBhIHRpbWUsIHN0YXJ0aW5nIHdpdGggdGhlIHNvdXJjZSwgYW5kIG1lcmdpbmcgdGhlaXIgcmVzdWx0cyBpbnRvIHRoZVxuICogb3V0cHV0IE9ic2VydmFibGUuIFdpbGwgd2FpdCBmb3IgZWFjaCBPYnNlcnZhYmxlIHRvIGNvbXBsZXRlIGJlZm9yZSBtb3ZpbmdcbiAqIG9uIHRvIHRoZSBuZXh0LlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbmNhdGVuYXRlIGEgdGltZXIgY291bnRpbmcgZnJvbSAwIHRvIDMgd2l0aCBhIHN5bmNocm9ub3VzIHNlcXVlbmNlIGZyb20gMSB0byAxMDwvY2FwdGlvbj5cbiAqIHZhciB0aW1lciA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSg0KTtcbiAqIHZhciBzZXF1ZW5jZSA9IFJ4Lk9ic2VydmFibGUucmFuZ2UoMSwgMTApO1xuICogdmFyIHJlc3VsdCA9IHRpbWVyLmNvbmNhdChzZXF1ZW5jZSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIHJlc3VsdHMgaW46XG4gKiAvLyAxMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAyIC0xMDAwbXMtPiAzIC1pbW1lZGlhdGUtPiAxIC4uLiAxMFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbmNhdGVuYXRlIDMgT2JzZXJ2YWJsZXM8L2NhcHRpb24+XG4gKiB2YXIgdGltZXIxID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKS50YWtlKDEwKTtcbiAqIHZhciB0aW1lcjIgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDIwMDApLnRha2UoNik7XG4gKiB2YXIgdGltZXIzID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCg1MDApLnRha2UoMTApO1xuICogdmFyIHJlc3VsdCA9IHRpbWVyMS5jb25jYXQodGltZXIyLCB0aW1lcjMpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAoUHJpbnRzIHRvIGNvbnNvbGUgc2VxdWVudGlhbGx5KVxuICogLy8gLTEwMDBtcy0+IDAgLTEwMDBtcy0+IDEgLTEwMDBtcy0+IC4uLiA5XG4gKiAvLyAtMjAwMG1zLT4gMCAtMjAwMG1zLT4gMSAtMjAwMG1zLT4gLi4uIDVcbiAqIC8vIC01MDBtcy0+IDAgLTUwMG1zLT4gMSAtNTAwbXMtPiAuLi4gOVxuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdEFsbH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcFRvfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBvdGhlciBBbiBpbnB1dCBPYnNlcnZhYmxlIHRvIGNvbmNhdGVuYXRlIGFmdGVyIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIE1vcmUgdGhhbiBvbmUgaW5wdXQgT2JzZXJ2YWJsZXMgbWF5IGJlIGdpdmVuIGFzIGFyZ3VtZW50LlxuICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXI9bnVsbF0gQW4gb3B0aW9uYWwgSVNjaGVkdWxlciB0byBzY2hlZHVsZSBlYWNoXG4gKiBPYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBvbi5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFsbCB2YWx1ZXMgb2YgZWFjaCBwYXNzZWQgT2JzZXJ2YWJsZSBtZXJnZWQgaW50byBhXG4gKiBzaW5nbGUgT2JzZXJ2YWJsZSwgaW4gb3JkZXIsIGluIHNlcmlhbCBmYXNoaW9uLlxuICogQG1ldGhvZCBjb25jYXRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0LmNhbGwoY29uY2F0XzEuY29uY2F0LmFwcGx5KHZvaWQgMCwgW3NvdXJjZV0uY29uY2F0KG9ic2VydmFibGVzKSkpOyB9O1xufVxuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbWVyZ2VBbGxfMSA9IHJlcXVpcmUoJy4vbWVyZ2VBbGwnKTtcbi8qKlxuICogQ29udmVydHMgYSBoaWdoZXItb3JkZXIgT2JzZXJ2YWJsZSBpbnRvIGEgZmlyc3Qtb3JkZXIgT2JzZXJ2YWJsZSBieVxuICogY29uY2F0ZW5hdGluZyB0aGUgaW5uZXIgT2JzZXJ2YWJsZXMgaW4gb3JkZXIuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkZsYXR0ZW5zIGFuIE9ic2VydmFibGUtb2YtT2JzZXJ2YWJsZXMgYnkgcHV0dGluZyBvbmVcbiAqIGlubmVyIE9ic2VydmFibGUgYWZ0ZXIgdGhlIG90aGVyLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2NvbmNhdEFsbC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBKb2lucyBldmVyeSBPYnNlcnZhYmxlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSAoYSBoaWdoZXItb3JkZXIgT2JzZXJ2YWJsZSksIGluXG4gKiBhIHNlcmlhbCBmYXNoaW9uLiBJdCBzdWJzY3JpYmVzIHRvIGVhY2ggaW5uZXIgT2JzZXJ2YWJsZSBvbmx5IGFmdGVyIHRoZVxuICogcHJldmlvdXMgaW5uZXIgT2JzZXJ2YWJsZSBoYXMgY29tcGxldGVkLCBhbmQgbWVyZ2VzIGFsbCBvZiB0aGVpciB2YWx1ZXMgaW50b1xuICogdGhlIHJldHVybmVkIG9ic2VydmFibGUuXG4gKlxuICogX19XYXJuaW5nOl9fIElmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBlbWl0cyBPYnNlcnZhYmxlcyBxdWlja2x5IGFuZFxuICogZW5kbGVzc2x5LCBhbmQgdGhlIGlubmVyIE9ic2VydmFibGVzIGl0IGVtaXRzIGdlbmVyYWxseSBjb21wbGV0ZSBzbG93ZXIgdGhhblxuICogdGhlIHNvdXJjZSBlbWl0cywgeW91IGNhbiBydW4gaW50byBtZW1vcnkgaXNzdWVzIGFzIHRoZSBpbmNvbWluZyBPYnNlcnZhYmxlc1xuICogY29sbGVjdCBpbiBhbiB1bmJvdW5kZWQgYnVmZmVyLlxuICpcbiAqIE5vdGU6IGBjb25jYXRBbGxgIGlzIGVxdWl2YWxlbnQgdG8gYG1lcmdlQWxsYCB3aXRoIGNvbmN1cnJlbmN5IHBhcmFtZXRlciBzZXRcbiAqIHRvIGAxYC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Gb3IgZWFjaCBjbGljayBldmVudCwgdGljayBldmVyeSBzZWNvbmQgZnJvbSAwIHRvIDMsIHdpdGggbm8gY29uY3VycmVuY3k8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGhpZ2hlck9yZGVyID0gY2xpY2tzLm1hcChldiA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoNCkpO1xuICogdmFyIGZpcnN0T3JkZXIgPSBoaWdoZXJPcmRlci5jb25jYXRBbGwoKTtcbiAqIGZpcnN0T3JkZXIuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzpcbiAqIC8vIChyZXN1bHRzIGFyZSBub3QgY29uY3VycmVudClcbiAqIC8vIEZvciBldmVyeSBjbGljayBvbiB0aGUgXCJkb2N1bWVudFwiIGl0IHdpbGwgZW1pdCB2YWx1ZXMgMCB0byAzIHNwYWNlZFxuICogLy8gb24gYSAxMDAwbXMgaW50ZXJ2YWxcbiAqIC8vIG9uZSBjbGljayA9IDEwMDBtcy0+IDAgLTEwMDBtcy0+IDEgLTEwMDBtcy0+IDIgLTEwMDBtcy0+IDNcbiAqXG4gKiBAc2VlIHtAbGluayBjb21iaW5lQWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0fVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwfVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwVG99XG4gKiBAc2VlIHtAbGluayBleGhhdXN0fVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2h9XG4gKiBAc2VlIHtAbGluayB6aXBBbGx9XG4gKlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSBlbWl0dGluZyB2YWx1ZXMgZnJvbSBhbGwgdGhlIGlubmVyXG4gKiBPYnNlcnZhYmxlcyBjb25jYXRlbmF0ZWQuXG4gKiBAbWV0aG9kIGNvbmNhdEFsbFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gY29uY2F0QWxsKCkge1xuICAgIHJldHVybiBtZXJnZUFsbF8xLm1lcmdlQWxsKDEpO1xufVxuZXhwb3J0cy5jb25jYXRBbGwgPSBjb25jYXRBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbWVyZ2VNYXBfMSA9IHJlcXVpcmUoJy4vbWVyZ2VNYXAnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFByb2plY3RzIGVhY2ggc291cmNlIHZhbHVlIHRvIGFuIE9ic2VydmFibGUgd2hpY2ggaXMgbWVyZ2VkIGluIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUsIGluIGEgc2VyaWFsaXplZCBmYXNoaW9uIHdhaXRpbmcgZm9yIGVhY2ggb25lIHRvIGNvbXBsZXRlIGJlZm9yZVxuICogbWVyZ2luZyB0aGUgbmV4dC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TWFwcyBlYWNoIHZhbHVlIHRvIGFuIE9ic2VydmFibGUsIHRoZW4gZmxhdHRlbnMgYWxsIG9mXG4gKiB0aGVzZSBpbm5lciBPYnNlcnZhYmxlcyB1c2luZyB7QGxpbmsgY29uY2F0QWxsfS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9jb25jYXRNYXAucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYmFzZWQgb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0aGF0IHlvdVxuICogc3VwcGx5IHRvIGVhY2ggaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgd2hlcmUgdGhhdCBmdW5jdGlvblxuICogcmV0dXJucyBhbiAoc28tY2FsbGVkIFwiaW5uZXJcIikgT2JzZXJ2YWJsZS4gRWFjaCBuZXcgaW5uZXIgT2JzZXJ2YWJsZSBpc1xuICogY29uY2F0ZW5hdGVkIHdpdGggdGhlIHByZXZpb3VzIGlubmVyIE9ic2VydmFibGUuXG4gKlxuICogX19XYXJuaW5nOl9fIGlmIHNvdXJjZSB2YWx1ZXMgYXJyaXZlIGVuZGxlc3NseSBhbmQgZmFzdGVyIHRoYW4gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgaW5uZXIgT2JzZXJ2YWJsZXMgY2FuIGNvbXBsZXRlLCBpdCB3aWxsIHJlc3VsdCBpbiBtZW1vcnkgaXNzdWVzXG4gKiBhcyBpbm5lciBPYnNlcnZhYmxlcyBhbWFzcyBpbiBhbiB1bmJvdW5kZWQgYnVmZmVyIHdhaXRpbmcgZm9yIHRoZWlyIHR1cm4gdG9cbiAqIGJlIHN1YnNjcmliZWQgdG8uXG4gKlxuICogTm90ZTogYGNvbmNhdE1hcGAgaXMgZXF1aXZhbGVudCB0byBgbWVyZ2VNYXBgIHdpdGggY29uY3VycmVuY3kgcGFyYW1ldGVyIHNldFxuICogdG8gYDFgLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkZvciBlYWNoIGNsaWNrIGV2ZW50LCB0aWNrIGV2ZXJ5IHNlY29uZCBmcm9tIDAgdG8gMywgd2l0aCBubyBjb25jdXJyZW5jeTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmNvbmNhdE1hcChldiA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoNCkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAocmVzdWx0cyBhcmUgbm90IGNvbmN1cnJlbnQpXG4gKiAvLyBGb3IgZXZlcnkgY2xpY2sgb24gdGhlIFwiZG9jdW1lbnRcIiBpdCB3aWxsIGVtaXQgdmFsdWVzIDAgdG8gMyBzcGFjZWRcbiAqIC8vIG9uIGEgMTAwMG1zIGludGVydmFsXG4gKiAvLyBvbmUgY2xpY2sgPSAxMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAyIC0xMDAwbXMtPiAzXG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0fVxuICogQHNlZSB7QGxpbmsgY29uY2F0QWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwVG99XG4gKiBAc2VlIHtAbGluayBleGhhdXN0TWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXB9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hNYXB9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgP2luZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlSW5wdXR9IHByb2plY3QgQSBmdW5jdGlvblxuICogdGhhdCwgd2hlbiBhcHBsaWVkIHRvIGFuIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIHJldHVybnMgYW5cbiAqIE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKG91dGVyVmFsdWU6IFQsIGlubmVyVmFsdWU6IEksIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKTogYW55fSBbcmVzdWx0U2VsZWN0b3JdXG4gKiBBIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHZhbHVlIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiYXNlZCBvbiB0aGUgdmFsdWVzXG4gKiBhbmQgdGhlIGluZGljZXMgb2YgdGhlIHNvdXJjZSAob3V0ZXIpIGVtaXNzaW9uIGFuZCB0aGUgaW5uZXIgT2JzZXJ2YWJsZVxuICogZW1pc3Npb24uIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlOlxuICogLSBgb3V0ZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lclZhbHVlYDogdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogLSBgb3V0ZXJJbmRleGA6IHRoZSBcImluZGV4XCIgb2YgdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBzb3VyY2VcbiAqIC0gYGlubmVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlXG4gKiBwcm9qZWN0aW9uIGZ1bmN0aW9uIChhbmQgdGhlIG9wdGlvbmFsIGByZXN1bHRTZWxlY3RvcmApIHRvIGVhY2ggaXRlbSBlbWl0dGVkXG4gKiBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIHRha2luZyB2YWx1ZXMgZnJvbSBlYWNoIHByb2plY3RlZCBpbm5lclxuICogT2JzZXJ2YWJsZSBzZXF1ZW50aWFsbHkuXG4gKiBAbWV0aG9kIGNvbmNhdE1hcFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gY29uY2F0TWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG1lcmdlTWFwXzEubWVyZ2VNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIDEpO1xufVxuZXhwb3J0cy5jb25jYXRNYXAgPSBjb25jYXRNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRNYXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgY29uY2F0TWFwXzEgPSByZXF1aXJlKCcuL2NvbmNhdE1hcCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUHJvamVjdHMgZWFjaCBzb3VyY2UgdmFsdWUgdG8gdGhlIHNhbWUgT2JzZXJ2YWJsZSB3aGljaCBpcyBtZXJnZWQgbXVsdGlwbGVcbiAqIHRpbWVzIGluIGEgc2VyaWFsaXplZCBmYXNoaW9uIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBjb25jYXRNYXB9LCBidXQgbWFwcyBlYWNoIHZhbHVlXG4gKiBhbHdheXMgdG8gdGhlIHNhbWUgaW5uZXIgT2JzZXJ2YWJsZS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9jb25jYXRNYXBUby5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBNYXBzIGVhY2ggc291cmNlIHZhbHVlIHRvIHRoZSBnaXZlbiBPYnNlcnZhYmxlIGBpbm5lck9ic2VydmFibGVgIHJlZ2FyZGxlc3NcbiAqIG9mIHRoZSBzb3VyY2UgdmFsdWUsIGFuZCB0aGVuIGZsYXR0ZW5zIHRob3NlIHJlc3VsdGluZyBPYnNlcnZhYmxlcyBpbnRvIG9uZVxuICogc2luZ2xlIE9ic2VydmFibGUsIHdoaWNoIGlzIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS4gRWFjaCBuZXcgYGlubmVyT2JzZXJ2YWJsZWBcbiAqIGluc3RhbmNlIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGlzIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBwcmV2aW91c1xuICogYGlubmVyT2JzZXJ2YWJsZWAgaW5zdGFuY2UuXG4gKlxuICogX19XYXJuaW5nOl9fIGlmIHNvdXJjZSB2YWx1ZXMgYXJyaXZlIGVuZGxlc3NseSBhbmQgZmFzdGVyIHRoYW4gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgaW5uZXIgT2JzZXJ2YWJsZXMgY2FuIGNvbXBsZXRlLCBpdCB3aWxsIHJlc3VsdCBpbiBtZW1vcnkgaXNzdWVzXG4gKiBhcyBpbm5lciBPYnNlcnZhYmxlcyBhbWFzcyBpbiBhbiB1bmJvdW5kZWQgYnVmZmVyIHdhaXRpbmcgZm9yIHRoZWlyIHR1cm4gdG9cbiAqIGJlIHN1YnNjcmliZWQgdG8uXG4gKlxuICogTm90ZTogYGNvbmNhdE1hcFRvYCBpcyBlcXVpdmFsZW50IHRvIGBtZXJnZU1hcFRvYCB3aXRoIGNvbmN1cnJlbmN5IHBhcmFtZXRlclxuICogc2V0IHRvIGAxYC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Gb3IgZWFjaCBjbGljayBldmVudCwgdGljayBldmVyeSBzZWNvbmQgZnJvbSAwIHRvIDMsIHdpdGggbm8gY29uY3VycmVuY3k8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5jb25jYXRNYXBUbyhSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoNCkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAocmVzdWx0cyBhcmUgbm90IGNvbmN1cnJlbnQpXG4gKiAvLyBGb3IgZXZlcnkgY2xpY2sgb24gdGhlIFwiZG9jdW1lbnRcIiBpdCB3aWxsIGVtaXQgdmFsdWVzIDAgdG8gMyBzcGFjZWRcbiAqIC8vIG9uIGEgMTAwMG1zIGludGVydmFsXG4gKiAvLyBvbmUgY2xpY2sgPSAxMDAwbXMtPiAwIC0xMDAwbXMtPiAxIC0xMDAwbXMtPiAyIC0xMDAwbXMtPiAzXG4gKlxuICogQHNlZSB7QGxpbmsgY29uY2F0fVxuICogQHNlZSB7QGxpbmsgY29uY2F0QWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0TWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXBUb31cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcFRvfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZUlucHV0fSBpbm5lck9ic2VydmFibGUgQW4gT2JzZXJ2YWJsZSB0byByZXBsYWNlIGVhY2ggdmFsdWUgZnJvbVxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHBhcmFtIHtmdW5jdGlvbihvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBJLCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcik6IGFueX0gW3Jlc3VsdFNlbGVjdG9yXVxuICogQSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYmFzZWQgb24gdGhlIHZhbHVlc1xuICogYW5kIHRoZSBpbmRpY2VzIG9mIHRoZSBzb3VyY2UgKG91dGVyKSBlbWlzc2lvbiBhbmQgdGhlIGlubmVyIE9ic2VydmFibGVcbiAqIGVtaXNzaW9uLiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYG91dGVyVmFsdWVgOiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHNvdXJjZVxuICogLSBgaW5uZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIC0gYG91dGVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lckluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIG9ic2VydmFibGUgb2YgdmFsdWVzIG1lcmdlZCB0b2dldGhlciBieSBqb2luaW5nIHRoZVxuICogcGFzc2VkIG9ic2VydmFibGUgd2l0aCBpdHNlbGYsIG9uZSBhZnRlciB0aGUgb3RoZXIsIGZvciBlYWNoIHZhbHVlIGVtaXR0ZWRcbiAqIGZyb20gdGhlIHNvdXJjZS5cbiAqIEBtZXRob2QgY29uY2F0TWFwVG9cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdE1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gY29uY2F0TWFwXzEuY29uY2F0TWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgcmVzdWx0U2VsZWN0b3IpO1xufVxuZXhwb3J0cy5jb25jYXRNYXBUbyA9IGNvbmNhdE1hcFRvO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0TWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG4vKipcbiAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGVtaXNzaW9ucyBvbiB0aGUgc291cmNlIGFuZCBlbWl0cyB0aGF0IG51bWJlciB3aGVuIHRoZVxuICogc291cmNlIGNvbXBsZXRlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+VGVsbHMgaG93IG1hbnkgdmFsdWVzIHdlcmUgZW1pdHRlZCwgd2hlbiB0aGUgc291cmNlXG4gKiBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvY291bnQucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGNvdW50YCB0cmFuc2Zvcm1zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB2YWx1ZXMgaW50byBhbiBPYnNlcnZhYmxlIHRoYXRcbiAqIGVtaXRzIGEgc2luZ2xlIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZVxuICogc291cmNlIE9ic2VydmFibGUuIElmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0ZXJtaW5hdGVzIHdpdGggYW4gZXJyb3IsIGBjb3VudGBcbiAqIHdpbGwgcGFzcyB0aGlzIGVycm9yIG5vdGlmaWNhdGlvbiBhbG9uZyB3aXRob3V0IGVtaXR0aW5nIGEgdmFsdWUgZmlyc3QuIElmXG4gKiB0aGUgc291cmNlIE9ic2VydmFibGUgZG9lcyBub3QgdGVybWluYXRlIGF0IGFsbCwgYGNvdW50YCB3aWxsIG5laXRoZXIgZW1pdFxuICogYSB2YWx1ZSBub3IgdGVybWluYXRlLiBUaGlzIG9wZXJhdG9yIHRha2VzIGFuIG9wdGlvbmFsIGBwcmVkaWNhdGVgIGZ1bmN0aW9uXG4gKiBhcyBhcmd1bWVudCwgaW4gd2hpY2ggY2FzZSB0aGUgb3V0cHV0IGVtaXNzaW9uIHdpbGwgcmVwcmVzZW50IHRoZSBudW1iZXIgb2ZcbiAqIHNvdXJjZSB2YWx1ZXMgdGhhdCBtYXRjaGVkIGB0cnVlYCB3aXRoIHRoZSBgcHJlZGljYXRlYC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db3VudHMgaG93IG1hbnkgc2Vjb25kcyBoYXZlIHBhc3NlZCBiZWZvcmUgdGhlIGZpcnN0IGNsaWNrIGhhcHBlbmVkPC9jYXB0aW9uPlxuICogdmFyIHNlY29uZHMgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBzZWNvbmRzQmVmb3JlQ2xpY2sgPSBzZWNvbmRzLnRha2VVbnRpbChjbGlja3MpO1xuICogdmFyIHJlc3VsdCA9IHNlY29uZHNCZWZvcmVDbGljay5jb3VudCgpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db3VudHMgaG93IG1hbnkgb2RkIG51bWJlcnMgYXJlIHRoZXJlIGJldHdlZW4gMSBhbmQgNzwvY2FwdGlvbj5cbiAqIHZhciBudW1iZXJzID0gUnguT2JzZXJ2YWJsZS5yYW5nZSgxLCA3KTtcbiAqIHZhciByZXN1bHQgPSBudW1iZXJzLmNvdW50KGkgPT4gaSAlIDIgPT09IDEpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluOlxuICogLy8gNFxuICpcbiAqIEBzZWUge0BsaW5rIG1heH1cbiAqIEBzZWUge0BsaW5rIG1pbn1cbiAqIEBzZWUge0BsaW5rIHJlZHVjZX1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBULCBpOiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPik6IGJvb2xlYW59IFtwcmVkaWNhdGVdIEFcbiAqIGJvb2xlYW4gZnVuY3Rpb24gdG8gc2VsZWN0IHdoYXQgdmFsdWVzIGFyZSB0byBiZSBjb3VudGVkLiBJdCBpcyBwcm92aWRlZCB3aXRoXG4gKiBhcmd1bWVudHMgb2Y6XG4gKiAtIGB2YWx1ZWA6IHRoZSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIC0gYGluZGV4YDogdGhlICh6ZXJvLWJhc2VkKSBcImluZGV4XCIgb2YgdGhlIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogLSBgc291cmNlYDogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGluc3RhbmNlIGl0c2VsZi5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgb2Ygb25lIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIGNvdW50IGFzXG4gKiBkZXNjcmliZWQgYWJvdmUuXG4gKiBAbWV0aG9kIGNvdW50XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBjb3VudChwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IENvdW50T3BlcmF0b3IocHJlZGljYXRlLCBzb3VyY2UpKTsgfTtcbn1cbmV4cG9ydHMuY291bnQgPSBjb3VudDtcbnZhciBDb3VudE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb3VudE9wZXJhdG9yKHByZWRpY2F0ZSwgc291cmNlKSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB9XG4gICAgQ291bnRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IENvdW50U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnByZWRpY2F0ZSwgdGhpcy5zb3VyY2UpKTtcbiAgICB9O1xuICAgIHJldHVybiBDb3VudE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgQ291bnRTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ291bnRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvdW50U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJlZGljYXRlLCBzb3VyY2UpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICB9XG4gICAgQ291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyeVByZWRpY2F0ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvdW50Kys7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvdW50U3Vic2NyaWJlci5wcm90b3R5cGUuX3RyeVByZWRpY2F0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5wcmVkaWNhdGUodmFsdWUsIHRoaXMuaW5kZXgrKywgdGhpcy5zb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmNvdW50Kys7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvdW50U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5jb3VudCk7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBDb3VudFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3VudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qKlxuICogRW1pdHMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBvbmx5IGFmdGVyIGEgcGFydGljdWxhciB0aW1lIHNwYW5cbiAqIGRldGVybWluZWQgYnkgYW5vdGhlciBPYnNlcnZhYmxlIGhhcyBwYXNzZWQgd2l0aG91dCBhbm90aGVyIHNvdXJjZSBlbWlzc2lvbi5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBkZWJvdW5jZVRpbWV9LCBidXQgdGhlIHRpbWUgc3BhbiBvZlxuICogZW1pc3Npb24gc2lsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvZGVib3VuY2UucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGRlYm91bmNlYCBkZWxheXMgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBidXQgZHJvcHMgcHJldmlvdXNcbiAqIHBlbmRpbmcgZGVsYXllZCBlbWlzc2lvbnMgaWYgYSBuZXcgdmFsdWUgYXJyaXZlcyBvbiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBUaGlzIG9wZXJhdG9yIGtlZXBzIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIGFuZCBzcGF3bnMgYSBkdXJhdGlvbiBPYnNlcnZhYmxlIGJ5IGNhbGxpbmcgdGhlXG4gKiBgZHVyYXRpb25TZWxlY3RvcmAgZnVuY3Rpb24uIFRoZSB2YWx1ZSBpcyBlbWl0dGVkIG9ubHkgd2hlbiB0aGUgZHVyYXRpb25cbiAqIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZSBvciBjb21wbGV0ZXMsIGFuZCBpZiBubyBvdGhlciB2YWx1ZSB3YXMgZW1pdHRlZCBvblxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHNpbmNlIHRoZSBkdXJhdGlvbiBPYnNlcnZhYmxlIHdhcyBzcGF3bmVkLiBJZiBhIG5ld1xuICogdmFsdWUgYXBwZWFycyBiZWZvcmUgdGhlIGR1cmF0aW9uIE9ic2VydmFibGUgZW1pdHMsIHRoZSBwcmV2aW91cyB2YWx1ZSB3aWxsXG4gKiBiZSBkcm9wcGVkIGFuZCB3aWxsIG5vdCBiZSBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBMaWtlIHtAbGluayBkZWJvdW5jZVRpbWV9LCB0aGlzIGlzIGEgcmF0ZS1saW1pdGluZyBvcGVyYXRvciwgYW5kIGFsc28gYVxuICogZGVsYXktbGlrZSBvcGVyYXRvciBzaW5jZSBvdXRwdXQgZW1pc3Npb25zIGRvIG5vdCBuZWNlc3NhcmlseSBvY2N1ciBhdCB0aGVcbiAqIHNhbWUgdGltZSBhcyB0aGV5IGRpZCBvbiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCB0aGUgbW9zdCByZWNlbnQgY2xpY2sgYWZ0ZXIgYSBidXJzdCBvZiBjbGlja3M8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5kZWJvdW5jZSgoKSA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXR9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWxheVdoZW59XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZX1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBUKTogU3Vic2NyaWJhYmxlT3JQcm9taXNlfSBkdXJhdGlvblNlbGVjdG9yIEEgZnVuY3Rpb25cbiAqIHRoYXQgcmVjZWl2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgZm9yIGNvbXB1dGluZyB0aGUgdGltZW91dFxuICogZHVyYXRpb24gZm9yIGVhY2ggc291cmNlIHZhbHVlLCByZXR1cm5lZCBhcyBhbiBPYnNlcnZhYmxlIG9yIGEgUHJvbWlzZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBkZWxheXMgdGhlIGVtaXNzaW9ucyBvZiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGJ5IHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gT2JzZXJ2YWJsZSByZXR1cm5lZCBieVxuICogYGR1cmF0aW9uU2VsZWN0b3JgLCBhbmQgbWF5IGRyb3Agc29tZSB2YWx1ZXMgaWYgdGhleSBvY2N1ciB0b28gZnJlcXVlbnRseS5cbiAqIEBtZXRob2QgZGVib3VuY2VcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IERlYm91bmNlT3BlcmF0b3IoZHVyYXRpb25TZWxlY3RvcikpOyB9O1xufVxuZXhwb3J0cy5kZWJvdW5jZSA9IGRlYm91bmNlO1xudmFyIERlYm91bmNlT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlYm91bmNlT3BlcmF0b3IoZHVyYXRpb25TZWxlY3Rvcikge1xuICAgICAgICB0aGlzLmR1cmF0aW9uU2VsZWN0b3IgPSBkdXJhdGlvblNlbGVjdG9yO1xuICAgIH1cbiAgICBEZWJvdW5jZU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRGVib3VuY2VTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuZHVyYXRpb25TZWxlY3RvcikpO1xuICAgIH07XG4gICAgcmV0dXJuIERlYm91bmNlT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBEZWJvdW5jZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEZWJvdW5jZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRGVib3VuY2VTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBkdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5kdXJhdGlvblNlbGVjdG9yID0gZHVyYXRpb25TZWxlY3RvcjtcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmR1cmF0aW9uU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgRGVib3VuY2VTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZHVyYXRpb25TZWxlY3Rvci5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cnlOZXh0KHZhbHVlLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVib3VuY2VTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIERlYm91bmNlU3Vic2NyaWJlci5wcm90b3R5cGUuX3RyeU5leHQgPSBmdW5jdGlvbiAodmFsdWUsIGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLmR1cmF0aW9uU3Vic2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlVG9SZXN1bHRfMS5zdWJzY3JpYmVUb1Jlc3VsdCh0aGlzLCBkdXJhdGlvbik7XG4gICAgICAgIGlmICghc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5kdXJhdGlvblN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERlYm91bmNlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICAgIH07XG4gICAgRGVib3VuY2VTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICB9O1xuICAgIERlYm91bmNlU3Vic2NyaWJlci5wcm90b3R5cGUuZW1pdFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLmR1cmF0aW9uU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZHVyYXRpb25TdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX25leHQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEZWJvdW5jZVN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVib3VuY2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xuLyoqXG4gKiBFbWl0cyBhIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIG9ubHkgYWZ0ZXIgYSBwYXJ0aWN1bGFyIHRpbWUgc3BhblxuICogaGFzIHBhc3NlZCB3aXRob3V0IGFub3RoZXIgc291cmNlIGVtaXNzaW9uLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGRlbGF5fSwgYnV0IHBhc3NlcyBvbmx5IHRoZSBtb3N0XG4gKiByZWNlbnQgdmFsdWUgZnJvbSBlYWNoIGJ1cnN0IG9mIGVtaXNzaW9ucy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9kZWJvdW5jZVRpbWUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGRlYm91bmNlVGltZWAgZGVsYXlzIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYnV0IGRyb3BzXG4gKiBwcmV2aW91cyBwZW5kaW5nIGRlbGF5ZWQgZW1pc3Npb25zIGlmIGEgbmV3IHZhbHVlIGFycml2ZXMgb24gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gVGhpcyBvcGVyYXRvciBrZWVwcyB0cmFjayBvZiB0aGUgbW9zdCByZWNlbnQgdmFsdWUgZnJvbSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlLCBhbmQgZW1pdHMgdGhhdCBvbmx5IHdoZW4gYGR1ZVRpbWVgIGVub3VnaCB0aW1lIGhhcyBwYXNzZWRcbiAqIHdpdGhvdXQgYW55IG90aGVyIHZhbHVlIGFwcGVhcmluZyBvbiB0aGUgc291cmNlIE9ic2VydmFibGUuIElmIGEgbmV3IHZhbHVlXG4gKiBhcHBlYXJzIGJlZm9yZSBgZHVlVGltZWAgc2lsZW5jZSBvY2N1cnMsIHRoZSBwcmV2aW91cyB2YWx1ZSB3aWxsIGJlIGRyb3BwZWRcbiAqIGFuZCB3aWxsIG5vdCBiZSBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBUaGlzIGlzIGEgcmF0ZS1saW1pdGluZyBvcGVyYXRvciwgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIGZvciBtb3JlIHRoYW4gb25lXG4gKiB2YWx1ZSB0byBiZSBlbWl0dGVkIGluIGFueSB0aW1lIHdpbmRvdyBvZiBkdXJhdGlvbiBgZHVlVGltZWAsIGJ1dCBpdCBpcyBhbHNvXG4gKiBhIGRlbGF5LWxpa2Ugb3BlcmF0b3Igc2luY2Ugb3V0cHV0IGVtaXNzaW9ucyBkbyBub3Qgb2NjdXIgYXQgdGhlIHNhbWUgdGltZSBhc1xuICogdGhleSBkaWQgb24gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBPcHRpb25hbGx5IHRha2VzIGEge0BsaW5rIElTY2hlZHVsZXJ9IGZvclxuICogbWFuYWdpbmcgdGltZXJzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgdGhlIG1vc3QgcmVjZW50IGNsaWNrIGFmdGVyIGEgYnVyc3Qgb2YgY2xpY2tzPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3MuZGVib3VuY2VUaW1lKDEwMDApO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdFRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICogQHNlZSB7QGxpbmsgc2FtcGxlVGltZX1cbiAqIEBzZWUge0BsaW5rIHRocm90dGxlVGltZX1cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZHVlVGltZSBUaGUgdGltZW91dCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgKG9yIHRoZSB0aW1lXG4gKiB1bml0IGRldGVybWluZWQgaW50ZXJuYWxseSBieSB0aGUgb3B0aW9uYWwgYHNjaGVkdWxlcmApIGZvciB0aGUgd2luZG93IG9mXG4gKiB0aW1lIHJlcXVpcmVkIHRvIHdhaXQgZm9yIGVtaXNzaW9uIHNpbGVuY2UgYmVmb3JlIGVtaXR0aW5nIHRoZSBtb3N0IHJlY2VudFxuICogc291cmNlIHZhbHVlLlxuICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXI9YXN5bmNdIFRoZSB7QGxpbmsgSVNjaGVkdWxlcn0gdG8gdXNlIGZvclxuICogbWFuYWdpbmcgdGhlIHRpbWVycyB0aGF0IGhhbmRsZSB0aGUgdGltZW91dCBmb3IgZWFjaCB2YWx1ZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBkZWxheXMgdGhlIGVtaXNzaW9ucyBvZiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGJ5IHRoZSBzcGVjaWZpZWQgYGR1ZVRpbWVgLCBhbmQgbWF5IGRyb3Agc29tZSB2YWx1ZXMgaWYgdGhleSBvY2N1clxuICogdG9vIGZyZXF1ZW50bHkuXG4gKiBAbWV0aG9kIGRlYm91bmNlVGltZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gZGVib3VuY2VUaW1lKGR1ZVRpbWUsIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBEZWJvdW5jZVRpbWVPcGVyYXRvcihkdWVUaW1lLCBzY2hlZHVsZXIpKTsgfTtcbn1cbmV4cG9ydHMuZGVib3VuY2VUaW1lID0gZGVib3VuY2VUaW1lO1xudmFyIERlYm91bmNlVGltZU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZWJvdW5jZVRpbWVPcGVyYXRvcihkdWVUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgdGhpcy5kdWVUaW1lID0gZHVlVGltZTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIERlYm91bmNlVGltZU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRGVib3VuY2VUaW1lU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmR1ZVRpbWUsIHRoaXMuc2NoZWR1bGVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRGVib3VuY2VUaW1lT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBEZWJvdW5jZVRpbWVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRGVib3VuY2VUaW1lU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBEZWJvdW5jZVRpbWVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBkdWVUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmR1ZVRpbWUgPSBkdWVUaW1lO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gICAgRGVib3VuY2VUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbGVhckRlYm91bmNlKCk7XG4gICAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkZCh0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbiA9IHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoTmV4dCwgdGhpcy5kdWVUaW1lLCB0aGlzKSk7XG4gICAgfTtcbiAgICBEZWJvdW5jZVRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGVib3VuY2VkTmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBEZWJvdW5jZVRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5kZWJvdW5jZWROZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNsZWFyRGVib3VuY2UoKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmxhc3RWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERlYm91bmNlVGltZVN1YnNjcmliZXIucHJvdG90eXBlLmNsZWFyRGVib3VuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZWJvdW5jZWRTdWJzY3JpcHRpb24gPSB0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbjtcbiAgICAgICAgaWYgKGRlYm91bmNlZFN1YnNjcmlwdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoZGVib3VuY2VkU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIGRlYm91bmNlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRGVib3VuY2VUaW1lU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGRpc3BhdGNoTmV4dChzdWJzY3JpYmVyKSB7XG4gICAgc3Vic2NyaWJlci5kZWJvdW5jZWROZXh0KCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJvdW5jZVRpbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBFbWl0cyBhIGdpdmVuIHZhbHVlIGlmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBjb21wbGV0ZXMgd2l0aG91dCBlbWl0dGluZyBhbnlcbiAqIGBuZXh0YCB2YWx1ZSwgb3RoZXJ3aXNlIG1pcnJvcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JZiB0aGUgc291cmNlIE9ic2VydmFibGUgdHVybnMgb3V0IHRvIGJlIGVtcHR5LCB0aGVuXG4gKiB0aGlzIG9wZXJhdG9yIHdpbGwgZW1pdCBhIGRlZmF1bHQgdmFsdWUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvZGVmYXVsdElmRW1wdHkucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGRlZmF1bHRJZkVtcHR5YCBlbWl0cyB0aGUgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIG9yIGFcbiAqIHNwZWNpZmllZCBkZWZhdWx0IHZhbHVlIGlmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBpcyBlbXB0eSAoY29tcGxldGVzIHdpdGhvdXRcbiAqIGhhdmluZyBlbWl0dGVkIGFueSBgbmV4dGAgdmFsdWUpLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPklmIG5vIGNsaWNrcyBoYXBwZW4gaW4gNSBzZWNvbmRzLCB0aGVuIGVtaXQgXCJubyBjbGlja3NcIjwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgY2xpY2tzQmVmb3JlRml2ZSA9IGNsaWNrcy50YWtlVW50aWwoUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCg1MDAwKSk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzQmVmb3JlRml2ZS5kZWZhdWx0SWZFbXB0eSgnbm8gY2xpY2tzJyk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGVtcHR5fVxuICogQHNlZSB7QGxpbmsgbGFzdH1cbiAqXG4gKiBAcGFyYW0ge2FueX0gW2RlZmF1bHRWYWx1ZT1udWxsXSBUaGUgZGVmYXVsdCB2YWx1ZSB1c2VkIGlmIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgaXMgZW1wdHkuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgZWl0aGVyIHRoZSBzcGVjaWZpZWRcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBlbWl0cyBubyBpdGVtcywgb3IgdGhlIHZhbHVlcyBlbWl0dGVkXG4gKiBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIGRlZmF1bHRJZkVtcHR5XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBkZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoZGVmYXVsdFZhbHVlID09PSB2b2lkIDApIHsgZGVmYXVsdFZhbHVlID0gbnVsbDsgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRGVmYXVsdElmRW1wdHlPcGVyYXRvcihkZWZhdWx0VmFsdWUpKTsgfTtcbn1cbmV4cG9ydHMuZGVmYXVsdElmRW1wdHkgPSBkZWZhdWx0SWZFbXB0eTtcbnZhciBEZWZhdWx0SWZFbXB0eU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZWZhdWx0SWZFbXB0eU9wZXJhdG9yKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgRGVmYXVsdElmRW1wdHlPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IERlZmF1bHRJZkVtcHR5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmRlZmF1bHRWYWx1ZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIERlZmF1bHRJZkVtcHR5T3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBEZWZhdWx0SWZFbXB0eVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEZWZhdWx0SWZFbXB0eVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRGVmYXVsdElmRW1wdHlTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy5pc0VtcHR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgRGVmYXVsdElmRW1wdHlTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIERlZmF1bHRJZkVtcHR5U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWZhdWx0SWZFbXB0eVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0SWZFbXB0eS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKCcuLi9zY2hlZHVsZXIvYXN5bmMnKTtcbnZhciBpc0RhdGVfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNEYXRlJyk7XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xudmFyIE5vdGlmaWNhdGlvbl8xID0gcmVxdWlyZSgnLi4vTm90aWZpY2F0aW9uJyk7XG4vKipcbiAqIERlbGF5cyB0aGUgZW1pc3Npb24gb2YgaXRlbXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgYnkgYSBnaXZlbiB0aW1lb3V0IG9yXG4gKiB1bnRpbCBhIGdpdmVuIERhdGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPlRpbWUgc2hpZnRzIGVhY2ggaXRlbSBieSBzb21lIHNwZWNpZmllZCBhbW91bnQgb2ZcbiAqIG1pbGxpc2Vjb25kcy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9kZWxheS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBJZiB0aGUgZGVsYXkgYXJndW1lbnQgaXMgYSBOdW1iZXIsIHRoaXMgb3BlcmF0b3IgdGltZSBzaGlmdHMgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBieSB0aGF0IGFtb3VudCBvZiB0aW1lIGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMuIFRoZSByZWxhdGl2ZVxuICogdGltZSBpbnRlcnZhbHMgYmV0d2VlbiB0aGUgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQuXG4gKlxuICogSWYgdGhlIGRlbGF5IGFyZ3VtZW50IGlzIGEgRGF0ZSwgdGhpcyBvcGVyYXRvciB0aW1lIHNoaWZ0cyB0aGUgc3RhcnQgb2YgdGhlXG4gKiBPYnNlcnZhYmxlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgZ2l2ZW4gZGF0ZSBvY2N1cnMuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RGVsYXkgZWFjaCBjbGljayBieSBvbmUgc2Vjb25kPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBkZWxheWVkQ2xpY2tzID0gY2xpY2tzLmRlbGF5KDEwMDApOyAvLyBlYWNoIGNsaWNrIGVtaXR0ZWQgYWZ0ZXIgMSBzZWNvbmRcbiAqIGRlbGF5ZWRDbGlja3Muc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkRlbGF5IGFsbCBjbGlja3MgdW50aWwgYSBmdXR1cmUgZGF0ZSBoYXBwZW5zPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBkYXRlID0gbmV3IERhdGUoJ01hcmNoIDE1LCAyMDUwIDEyOjAwOjAwJyk7IC8vIGluIHRoZSBmdXR1cmVcbiAqIHZhciBkZWxheWVkQ2xpY2tzID0gY2xpY2tzLmRlbGF5KGRhdGUpOyAvLyBjbGljayBlbWl0dGVkIG9ubHkgYWZ0ZXIgdGhhdCBkYXRlXG4gKiBkZWxheWVkQ2xpY2tzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZVRpbWV9XG4gKiBAc2VlIHtAbGluayBkZWxheVdoZW59XG4gKlxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGVsYXkgVGhlIGRlbGF5IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyAoYSBgbnVtYmVyYCkgb3JcbiAqIGEgYERhdGVgIHVudGlsIHdoaWNoIHRoZSBlbWlzc2lvbiBvZiB0aGUgc291cmNlIGl0ZW1zIGlzIGRlbGF5ZWQuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1hc3luY10gVGhlIElTY2hlZHVsZXIgdG8gdXNlIGZvclxuICogbWFuYWdpbmcgdGhlIHRpbWVycyB0aGF0IGhhbmRsZSB0aGUgdGltZS1zaGlmdCBmb3IgZWFjaCBpdGVtLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGRlbGF5cyB0aGUgZW1pc3Npb25zIG9mIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgYnkgdGhlIHNwZWNpZmllZCB0aW1lb3V0IG9yIERhdGUuXG4gKiBAbWV0aG9kIGRlbGF5XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBkZWxheShkZWxheSwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmM7IH1cbiAgICB2YXIgYWJzb2x1dGVEZWxheSA9IGlzRGF0ZV8xLmlzRGF0ZShkZWxheSk7XG4gICAgdmFyIGRlbGF5Rm9yID0gYWJzb2x1dGVEZWxheSA/ICgrZGVsYXkgLSBzY2hlZHVsZXIubm93KCkpIDogTWF0aC5hYnMoZGVsYXkpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRGVsYXlPcGVyYXRvcihkZWxheUZvciwgc2NoZWR1bGVyKSk7IH07XG59XG5leHBvcnRzLmRlbGF5ID0gZGVsYXk7XG52YXIgRGVsYXlPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVsYXlPcGVyYXRvcihkZWxheSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIERlbGF5T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBEZWxheVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5kZWxheSwgdGhpcy5zY2hlZHVsZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWxheU9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgRGVsYXlTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRGVsYXlTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERlbGF5U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgZGVsYXksIHNjaGVkdWxlcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvcmVkID0gZmFsc2U7XG4gICAgfVxuICAgIERlbGF5U3Vic2NyaWJlci5kaXNwYXRjaCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgc291cmNlID0gc3RhdGUuc291cmNlO1xuICAgICAgICB2YXIgcXVldWUgPSBzb3VyY2UucXVldWU7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSBzdGF0ZS5zY2hlZHVsZXI7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHN0YXRlLmRlc3RpbmF0aW9uO1xuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCAmJiAocXVldWVbMF0udGltZSAtIHNjaGVkdWxlci5ub3coKSkgPD0gMCkge1xuICAgICAgICAgICAgcXVldWUuc2hpZnQoKS5ub3RpZmljYXRpb24ub2JzZXJ2ZShkZXN0aW5hdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciBkZWxheV8xID0gTWF0aC5tYXgoMCwgcXVldWVbMF0udGltZSAtIHNjaGVkdWxlci5ub3coKSk7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlKHN0YXRlLCBkZWxheV8xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNvdXJjZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVsYXlTdWJzY3JpYmVyLnByb3RvdHlwZS5fc2NoZWR1bGUgPSBmdW5jdGlvbiAoc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKERlbGF5U3Vic2NyaWJlci5kaXNwYXRjaCwgdGhpcy5kZWxheSwge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLCBkZXN0aW5hdGlvbjogdGhpcy5kZXN0aW5hdGlvbiwgc2NoZWR1bGVyOiBzY2hlZHVsZXJcbiAgICAgICAgfSkpO1xuICAgIH07XG4gICAgRGVsYXlTdWJzY3JpYmVyLnByb3RvdHlwZS5zY2hlZHVsZU5vdGlmaWNhdGlvbiA9IGZ1bmN0aW9uIChub3RpZmljYXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgRGVsYXlNZXNzYWdlKHNjaGVkdWxlci5ub3coKSArIHRoaXMuZGVsYXksIG5vdGlmaWNhdGlvbik7XG4gICAgICAgIHRoaXMucXVldWUucHVzaChtZXNzYWdlKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGUoc2NoZWR1bGVyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVsYXlTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlTm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbi5jcmVhdGVOZXh0KHZhbHVlKSk7XG4gICAgfTtcbiAgICBEZWxheVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5lcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgfTtcbiAgICBEZWxheVN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZU5vdGlmaWNhdGlvbihOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRGVsYXlTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xudmFyIERlbGF5TWVzc2FnZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVsYXlNZXNzYWdlKHRpbWUsIG5vdGlmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG5vdGlmaWNhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIERlbGF5TWVzc2FnZTtcbn0oKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9PYnNlcnZhYmxlJyk7XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xuLyoqXG4gKiBEZWxheXMgdGhlIGVtaXNzaW9uIG9mIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IGEgZ2l2ZW4gdGltZSBzcGFuXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBlbWlzc2lvbnMgb2YgYW5vdGhlciBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGRlbGF5fSwgYnV0IHRoZSB0aW1lIHNwYW4gb2YgdGhlXG4gKiBkZWxheSBkdXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvZGVsYXlXaGVuLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBkZWxheVdoZW5gIHRpbWUgc2hpZnRzIGVhY2ggZW1pdHRlZCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBieSBhXG4gKiB0aW1lIHNwYW4gZGV0ZXJtaW5lZCBieSBhbm90aGVyIE9ic2VydmFibGUuIFdoZW4gdGhlIHNvdXJjZSBlbWl0cyBhIHZhbHVlLFxuICogdGhlIGBkZWxheUR1cmF0aW9uU2VsZWN0b3JgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBzb3VyY2UgdmFsdWUgYXNcbiAqIGFyZ3VtZW50LCBhbmQgc2hvdWxkIHJldHVybiBhbiBPYnNlcnZhYmxlLCBjYWxsZWQgdGhlIFwiZHVyYXRpb25cIiBPYnNlcnZhYmxlLlxuICogVGhlIHNvdXJjZSB2YWx1ZSBpcyBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBvbmx5IHdoZW4gdGhlIGR1cmF0aW9uXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUgb3IgY29tcGxldGVzLlxuICpcbiAqIE9wdGlvbmFsbHksIGBkZWxheVdoZW5gIHRha2VzIGEgc2Vjb25kIGFyZ3VtZW50LCBgc3Vic2NyaXB0aW9uRGVsYXlgLCB3aGljaFxuICogaXMgYW4gT2JzZXJ2YWJsZS4gV2hlbiBgc3Vic2NyaXB0aW9uRGVsYXlgIGVtaXRzIGl0cyBmaXJzdCB2YWx1ZSBvclxuICogY29tcGxldGVzLCB0aGUgc291cmNlIE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZCB0byBhbmQgc3RhcnRzIGJlaGF2aW5nIGxpa2VcbiAqIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLiBJZiBgc3Vic2NyaXB0aW9uRGVsYXlgIGlzIG5vdCBwcm92aWRlZCxcbiAqIGBkZWxheVdoZW5gIHdpbGwgc3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyBzb29uIGFzIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUgaXMgc3Vic2NyaWJlZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5EZWxheSBlYWNoIGNsaWNrIGJ5IGEgcmFuZG9tIGFtb3VudCBvZiB0aW1lLCBiZXR3ZWVuIDAgYW5kIDUgc2Vjb25kczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgZGVsYXllZENsaWNrcyA9IGNsaWNrcy5kZWxheVdoZW4oZXZlbnQgPT5cbiAqICAgUnguT2JzZXJ2YWJsZS5pbnRlcnZhbChNYXRoLnJhbmRvbSgpICogNTAwMClcbiAqICk7XG4gKiBkZWxheWVkQ2xpY2tzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBkZWJvdW5jZX1cbiAqIEBzZWUge0BsaW5rIGRlbGF5fVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQpOiBPYnNlcnZhYmxlfSBkZWxheUR1cmF0aW9uU2VsZWN0b3IgQSBmdW5jdGlvbiB0aGF0XG4gKiByZXR1cm5zIGFuIE9ic2VydmFibGUgZm9yIGVhY2ggdmFsdWUgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIHdoaWNoXG4gKiBpcyB0aGVuIHVzZWQgdG8gZGVsYXkgdGhlIGVtaXNzaW9uIG9mIHRoYXQgaXRlbSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGVcbiAqIHVudGlsIHRoZSBPYnNlcnZhYmxlIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiBlbWl0cyBhIHZhbHVlLlxuICogQHBhcmFtIHtPYnNlcnZhYmxlfSBzdWJzY3JpcHRpb25EZWxheSBBbiBPYnNlcnZhYmxlIHRoYXQgdHJpZ2dlcnMgdGhlXG4gKiBzdWJzY3JpcHRpb24gdG8gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIG9uY2UgaXQgZW1pdHMgYW55IHZhbHVlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGRlbGF5cyB0aGUgZW1pc3Npb25zIG9mIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgYnkgYW4gYW1vdW50IG9mIHRpbWUgc3BlY2lmaWVkIGJ5IHRoZSBPYnNlcnZhYmxlIHJldHVybmVkIGJ5XG4gKiBgZGVsYXlEdXJhdGlvblNlbGVjdG9yYC5cbiAqIEBtZXRob2QgZGVsYXlXaGVuXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBkZWxheVdoZW4oZGVsYXlEdXJhdGlvblNlbGVjdG9yLCBzdWJzY3JpcHRpb25EZWxheSkge1xuICAgIGlmIChzdWJzY3JpcHRpb25EZWxheSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb25EZWxheU9ic2VydmFibGUoc291cmNlLCBzdWJzY3JpcHRpb25EZWxheSlcbiAgICAgICAgICAgICAgICAubGlmdChuZXcgRGVsYXlXaGVuT3BlcmF0b3IoZGVsYXlEdXJhdGlvblNlbGVjdG9yKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRGVsYXlXaGVuT3BlcmF0b3IoZGVsYXlEdXJhdGlvblNlbGVjdG9yKSk7IH07XG59XG5leHBvcnRzLmRlbGF5V2hlbiA9IGRlbGF5V2hlbjtcbnZhciBEZWxheVdoZW5PcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVsYXlXaGVuT3BlcmF0b3IoZGVsYXlEdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuZGVsYXlEdXJhdGlvblNlbGVjdG9yID0gZGVsYXlEdXJhdGlvblNlbGVjdG9yO1xuICAgIH1cbiAgICBEZWxheVdoZW5PcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IERlbGF5V2hlblN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5kZWxheUR1cmF0aW9uU2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWxheVdoZW5PcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIERlbGF5V2hlblN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhEZWxheVdoZW5TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERlbGF5V2hlblN1YnNjcmliZXIoZGVzdGluYXRpb24sIGRlbGF5RHVyYXRpb25TZWxlY3Rvcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuZGVsYXlEdXJhdGlvblNlbGVjdG9yID0gZGVsYXlEdXJhdGlvblNlbGVjdG9yO1xuICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgfVxuICAgIERlbGF5V2hlblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KG91dGVyVmFsdWUpO1xuICAgICAgICB0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbihpbm5lclN1Yik7XG4gICAgICAgIHRoaXMudHJ5Q29tcGxldGUoKTtcbiAgICB9O1xuICAgIERlbGF5V2hlblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9yLCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLl9lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICBEZWxheVdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbihpbm5lclN1Yik7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyeUNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBEZWxheVdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGRlbGF5Tm90aWZpZXIgPSB0aGlzLmRlbGF5RHVyYXRpb25TZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZGVsYXlOb3RpZmllcikge1xuICAgICAgICAgICAgICAgIHRoaXMudHJ5RGVsYXkoZGVsYXlOb3RpZmllciwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVsYXlXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudHJ5Q29tcGxldGUoKTtcbiAgICB9O1xuICAgIERlbGF5V2hlblN1YnNjcmliZXIucHJvdG90eXBlLnJlbW92ZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb25JZHggPSB0aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zLmluZGV4T2Yoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgdmFyIHZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbklkeCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZXNbc3Vic2NyaXB0aW9uSWR4XTtcbiAgICAgICAgICAgIHRoaXMuZGVsYXlOb3RpZmllclN1YnNjcmlwdGlvbnMuc3BsaWNlKHN1YnNjcmlwdGlvbklkeCwgMSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zcGxpY2Uoc3Vic2NyaXB0aW9uSWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBEZWxheVdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS50cnlEZWxheSA9IGZ1bmN0aW9uIChkZWxheU5vdGlmaWVyLCB2YWx1ZSkge1xuICAgICAgICB2YXIgbm90aWZpZXJTdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIGRlbGF5Tm90aWZpZXIsIHZhbHVlKTtcbiAgICAgICAgaWYgKG5vdGlmaWVyU3Vic2NyaXB0aW9uICYmICFub3RpZmllclN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKG5vdGlmaWVyU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZGVsYXlOb3RpZmllclN1YnNjcmlwdGlvbnMucHVzaChub3RpZmllclN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfTtcbiAgICBEZWxheVdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS50cnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkICYmIHRoaXMuZGVsYXlOb3RpZmllclN1YnNjcmlwdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEZWxheVdoZW5TdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgU3Vic2NyaXB0aW9uRGVsYXlPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaXB0aW9uRGVsYXlPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbkRlbGF5T2JzZXJ2YWJsZSgvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gc291cmNlLCBzdWJzY3JpcHRpb25EZWxheSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGVsYXkgPSBzdWJzY3JpcHRpb25EZWxheTtcbiAgICB9XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFN1YnNjcmlwdGlvbkRlbGF5T2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGVsYXkuc3Vic2NyaWJlKG5ldyBTdWJzY3JpcHRpb25EZWxheVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5zb3VyY2UpKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpcHRpb25EZWxheU9ic2VydmFibGU7XG59KE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFN1YnNjcmlwdGlvbkRlbGF5U3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmlwdGlvbkRlbGF5U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb25EZWxheVN1YnNjcmliZXIocGFyZW50LCBzb3VyY2UpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgdGhpcy5zb3VyY2VTdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbkRlbGF5U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodW51c2VkKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9Tb3VyY2UoKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbkRlbGF5U3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucGFyZW50LmVycm9yKGVycik7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb25EZWxheVN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1NvdXJjZSgpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uRGVsYXlTdWJzY3JpYmVyLnByb3RvdHlwZS5zdWJzY3JpYmVUb1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZVN1YnNjcmliZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zdWJzY3JpYmUodGhpcy5wYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uRGVsYXlTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVsYXlXaGVuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xuLyoqXG4gKiBDb252ZXJ0cyBhbiBPYnNlcnZhYmxlIG9mIHtAbGluayBOb3RpZmljYXRpb259IG9iamVjdHMgaW50byB0aGUgZW1pc3Npb25zXG4gKiB0aGF0IHRoZXkgcmVwcmVzZW50LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5VbndyYXBzIHtAbGluayBOb3RpZmljYXRpb259IG9iamVjdHMgYXMgYWN0dWFsIGBuZXh0YCxcbiAqIGBlcnJvcmAgYW5kIGBjb21wbGV0ZWAgZW1pc3Npb25zLiBUaGUgb3Bwb3NpdGUgb2Yge0BsaW5rIG1hdGVyaWFsaXplfS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9kZW1hdGVyaWFsaXplLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBkZW1hdGVyaWFsaXplYCBpcyBhc3N1bWVkIHRvIG9wZXJhdGUgYW4gT2JzZXJ2YWJsZSB0aGF0IG9ubHkgZW1pdHNcbiAqIHtAbGluayBOb3RpZmljYXRpb259IG9iamVjdHMgYXMgYG5leHRgIGVtaXNzaW9ucywgYW5kIGRvZXMgbm90IGVtaXQgYW55XG4gKiBgZXJyb3JgLiBTdWNoIE9ic2VydmFibGUgaXMgdGhlIG91dHB1dCBvZiBhIGBtYXRlcmlhbGl6ZWAgb3BlcmF0aW9uLiBUaG9zZVxuICogbm90aWZpY2F0aW9ucyBhcmUgdGhlbiB1bndyYXBwZWQgdXNpbmcgdGhlIG1ldGFkYXRhIHRoZXkgY29udGFpbiwgYW5kIGVtaXR0ZWRcbiAqIGFzIGBuZXh0YCwgYGVycm9yYCwgYW5kIGBjb21wbGV0ZWAgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIFVzZSB0aGlzIG9wZXJhdG9yIGluIGNvbmp1bmN0aW9uIHdpdGgge0BsaW5rIG1hdGVyaWFsaXplfS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Db252ZXJ0IGFuIE9ic2VydmFibGUgb2YgTm90aWZpY2F0aW9ucyB0byBhbiBhY3R1YWwgT2JzZXJ2YWJsZTwvY2FwdGlvbj5cbiAqIHZhciBub3RpZkEgPSBuZXcgUnguTm90aWZpY2F0aW9uKCdOJywgJ0EnKTtcbiAqIHZhciBub3RpZkIgPSBuZXcgUnguTm90aWZpY2F0aW9uKCdOJywgJ0InKTtcbiAqIHZhciBub3RpZkUgPSBuZXcgUnguTm90aWZpY2F0aW9uKCdFJywgdm9pZCAwLFxuICogICBuZXcgVHlwZUVycm9yKCd4LnRvVXBwZXJDYXNlIGlzIG5vdCBhIGZ1bmN0aW9uJylcbiAqICk7XG4gKiB2YXIgbWF0ZXJpYWxpemVkID0gUnguT2JzZXJ2YWJsZS5vZihub3RpZkEsIG5vdGlmQiwgbm90aWZFKTtcbiAqIHZhciB1cHBlckNhc2UgPSBtYXRlcmlhbGl6ZWQuZGVtYXRlcmlhbGl6ZSgpO1xuICogdXBwZXJDYXNlLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpLCBlID0+IGNvbnNvbGUuZXJyb3IoZSkpO1xuICpcbiAqIC8vIFJlc3VsdHMgaW46XG4gKiAvLyBBXG4gKiAvLyBCXG4gKiAvLyBUeXBlRXJyb3I6IHgudG9VcHBlckNhc2UgaXMgbm90IGEgZnVuY3Rpb25cbiAqXG4gKiBAc2VlIHtAbGluayBOb3RpZmljYXRpb259XG4gKiBAc2VlIHtAbGluayBtYXRlcmlhbGl6ZX1cbiAqXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYW5kIG5vdGlmaWNhdGlvbnNcbiAqIGVtYmVkZGVkIGluIE5vdGlmaWNhdGlvbiBvYmplY3RzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBkZW1hdGVyaWFsaXplXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBkZW1hdGVyaWFsaXplKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBkZW1hdGVyaWFsaXplT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBEZU1hdGVyaWFsaXplT3BlcmF0b3IoKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZGVtYXRlcmlhbGl6ZSA9IGRlbWF0ZXJpYWxpemU7XG52YXIgRGVNYXRlcmlhbGl6ZU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZU1hdGVyaWFsaXplT3BlcmF0b3IoKSB7XG4gICAgfVxuICAgIERlTWF0ZXJpYWxpemVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IERlTWF0ZXJpYWxpemVTdWJzY3JpYmVyKHN1YnNjcmliZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBEZU1hdGVyaWFsaXplT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBEZU1hdGVyaWFsaXplU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKERlTWF0ZXJpYWxpemVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERlTWF0ZXJpYWxpemVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICB9XG4gICAgRGVNYXRlcmlhbGl6ZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlLm9ic2VydmUodGhpcy5kZXN0aW5hdGlvbik7XG4gICAgfTtcbiAgICByZXR1cm4gRGVNYXRlcmlhbGl6ZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZW1hdGVyaWFsaXplLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xudmFyIFNldF8xID0gcmVxdWlyZSgnLi4vdXRpbC9TZXQnKTtcbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYWxsIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgYXJlIGRpc3RpbmN0IGJ5IGNvbXBhcmlzb24gZnJvbSBwcmV2aW91cyBpdGVtcy5cbiAqXG4gKiBJZiBhIGtleVNlbGVjdG9yIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGVuIGl0IHdpbGwgcHJvamVjdCBlYWNoIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBvYnNlcnZhYmxlIGludG8gYSBuZXcgdmFsdWUgdGhhdCBpdCB3aWxsXG4gKiBjaGVjayBmb3IgZXF1YWxpdHkgd2l0aCBwcmV2aW91c2x5IHByb2plY3RlZCB2YWx1ZXMuIElmIGEga2V5U2VsZWN0b3IgZnVuY3Rpb24gaXMgbm90IHByb3ZpZGVkLCBpdCB3aWxsIHVzZSBlYWNoIHZhbHVlIGZyb20gdGhlXG4gKiBzb3VyY2Ugb2JzZXJ2YWJsZSBkaXJlY3RseSB3aXRoIGFuIGVxdWFsaXR5IGNoZWNrIGFnYWluc3QgcHJldmlvdXMgdmFsdWVzLlxuICpcbiAqIEluIEphdmFTY3JpcHQgcnVudGltZXMgdGhhdCBzdXBwb3J0IGBTZXRgLCB0aGlzIG9wZXJhdG9yIHdpbGwgdXNlIGEgYFNldGAgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0aGUgZGlzdGluY3QgdmFsdWUgY2hlY2tpbmcuXG4gKlxuICogSW4gb3RoZXIgcnVudGltZXMsIHRoaXMgb3BlcmF0b3Igd2lsbCB1c2UgYSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIGBTZXRgIHRoYXQgcmVsaWVzIG9uIGFuIGBBcnJheWAgYW5kIGBpbmRleE9mYCB1bmRlciB0aGVcbiAqIGhvb2QsIHNvIHBlcmZvcm1hbmNlIHdpbGwgZGVncmFkZSBhcyBtb3JlIHZhbHVlcyBhcmUgY2hlY2tlZCBmb3IgZGlzdGluY3Rpb24uIEV2ZW4gaW4gbmV3ZXIgYnJvd3NlcnMsIGEgbG9uZy1ydW5uaW5nIGBkaXN0aW5jdGBcbiAqIHVzZSBtaWdodCByZXN1bHQgaW4gbWVtb3J5IGxlYWtzLiBUbyBoZWxwIGFsbGV2aWF0ZSB0aGlzIGluIHNvbWUgc2NlbmFyaW9zLCBhbiBvcHRpb25hbCBgZmx1c2hlc2AgcGFyYW1ldGVyIGlzIGFsc28gcHJvdmlkZWQgc29cbiAqIHRoYXQgdGhlIGludGVybmFsIGBTZXRgIGNhbiBiZSBcImZsdXNoZWRcIiwgYmFzaWNhbGx5IGNsZWFyaW5nIGl0IG9mIHZhbHVlcy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5BIHNpbXBsZSBleGFtcGxlIHdpdGggbnVtYmVyczwvY2FwdGlvbj5cbiAqIE9ic2VydmFibGUub2YoMSwgMSwgMiwgMiwgMiwgMSwgMiwgMywgNCwgMywgMiwgMSlcbiAqICAgLmRpc3RpbmN0KClcbiAqICAgLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTsgLy8gMSwgMiwgMywgNFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkFuIGV4YW1wbGUgdXNpbmcgYSBrZXlTZWxlY3RvciBmdW5jdGlvbjwvY2FwdGlvbj5cbiAqIGludGVyZmFjZSBQZXJzb24ge1xuICogICAgYWdlOiBudW1iZXIsXG4gKiAgICBuYW1lOiBzdHJpbmdcbiAqIH1cbiAqXG4gKiBPYnNlcnZhYmxlLm9mPFBlcnNvbj4oXG4gKiAgICAgeyBhZ2U6IDQsIG5hbWU6ICdGb28nfSxcbiAqICAgICB7IGFnZTogNywgbmFtZTogJ0Jhcid9LFxuICogICAgIHsgYWdlOiA1LCBuYW1lOiAnRm9vJ30pXG4gKiAgICAgLmRpc3RpbmN0KChwOiBQZXJzb24pID0+IHAubmFtZSlcbiAqICAgICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIGRpc3BsYXlzOlxuICogLy8geyBhZ2U6IDQsIG5hbWU6ICdGb28nIH1cbiAqIC8vIHsgYWdlOiA3LCBuYW1lOiAnQmFyJyB9XG4gKlxuICogQHNlZSB7QGxpbmsgZGlzdGluY3RVbnRpbENoYW5nZWR9XG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZH1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBba2V5U2VsZWN0b3JdIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHNlbGVjdCB3aGljaCB2YWx1ZSB5b3Ugd2FudCB0byBjaGVjayBhcyBkaXN0aW5jdC5cbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZX0gW2ZsdXNoZXNdIE9wdGlvbmFsIE9ic2VydmFibGUgZm9yIGZsdXNoaW5nIHRoZSBpbnRlcm5hbCBIYXNoU2V0IG9mIHRoZSBvcGVyYXRvci5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aXRoIGRpc3RpbmN0IHZhbHVlcy5cbiAqIEBtZXRob2QgZGlzdGluY3RcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGRpc3RpbmN0KGtleVNlbGVjdG9yLCBmbHVzaGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBEaXN0aW5jdE9wZXJhdG9yKGtleVNlbGVjdG9yLCBmbHVzaGVzKSk7IH07XG59XG5leHBvcnRzLmRpc3RpbmN0ID0gZGlzdGluY3Q7XG52YXIgRGlzdGluY3RPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGlzdGluY3RPcGVyYXRvcihrZXlTZWxlY3RvciwgZmx1c2hlcykge1xuICAgICAgICB0aGlzLmtleVNlbGVjdG9yID0ga2V5U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuZmx1c2hlcyA9IGZsdXNoZXM7XG4gICAgfVxuICAgIERpc3RpbmN0T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBEaXN0aW5jdFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5rZXlTZWxlY3RvciwgdGhpcy5mbHVzaGVzKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRGlzdGluY3RPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIERpc3RpbmN0U3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKERpc3RpbmN0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBEaXN0aW5jdFN1YnNjcmliZXIoZGVzdGluYXRpb24sIGtleVNlbGVjdG9yLCBmbHVzaGVzKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5rZXlTZWxlY3RvciA9IGtleVNlbGVjdG9yO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBTZXRfMS5TZXQoKTtcbiAgICAgICAgaWYgKGZsdXNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgZmx1c2hlcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIERpc3RpbmN0U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLnZhbHVlcy5jbGVhcigpO1xuICAgIH07XG4gICAgRGlzdGluY3RTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uIChlcnJvciwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5fZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgRGlzdGluY3RTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5rZXlTZWxlY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5fdXNlS2V5U2VsZWN0b3IodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZmluYWxpemVOZXh0KHZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERpc3RpbmN0U3Vic2NyaWJlci5wcm90b3R5cGUuX3VzZUtleVNlbGVjdG9yID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSB0aGlzLmtleVNlbGVjdG9yKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplTmV4dChrZXksIHZhbHVlKTtcbiAgICB9O1xuICAgIERpc3RpbmN0U3Vic2NyaWJlci5wcm90b3R5cGUuX2ZpbmFsaXplTmV4dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcztcbiAgICAgICAgaWYgKCF2YWx1ZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHZhbHVlcy5hZGQoa2V5KTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEaXN0aW5jdFN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5EaXN0aW5jdFN1YnNjcmliZXIgPSBEaXN0aW5jdFN1YnNjcmliZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciB0cnlDYXRjaF8xID0gcmVxdWlyZSgnLi4vdXRpbC90cnlDYXRjaCcpO1xudmFyIGVycm9yT2JqZWN0XzEgPSByZXF1aXJlKCcuLi91dGlsL2Vycm9yT2JqZWN0Jyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbGwgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgdGhhdCBhcmUgZGlzdGluY3QgYnkgY29tcGFyaXNvbiBmcm9tIHRoZSBwcmV2aW91cyBpdGVtLlxuICpcbiAqIElmIGEgY29tcGFyYXRvciBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBpdGVtIHRvIHRlc3QgZm9yIHdoZXRoZXIgb3Igbm90IHRoYXQgdmFsdWUgc2hvdWxkIGJlIGVtaXR0ZWQuXG4gKlxuICogSWYgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZCwgYW4gZXF1YWxpdHkgY2hlY2sgaXMgdXNlZCBieSBkZWZhdWx0LlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkEgc2ltcGxlIGV4YW1wbGUgd2l0aCBudW1iZXJzPC9jYXB0aW9uPlxuICogT2JzZXJ2YWJsZS5vZigxLCAxLCAyLCAyLCAyLCAxLCAxLCAyLCAzLCAzLCA0KVxuICogICAuZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICogICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpOyAvLyAxLCAyLCAxLCAyLCAzLCA0XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QW4gZXhhbXBsZSB1c2luZyBhIGNvbXBhcmUgZnVuY3Rpb248L2NhcHRpb24+XG4gKiBpbnRlcmZhY2UgUGVyc29uIHtcbiAqICAgIGFnZTogbnVtYmVyLFxuICogICAgbmFtZTogc3RyaW5nXG4gKiB9XG4gKlxuICogT2JzZXJ2YWJsZS5vZjxQZXJzb24+KFxuICogICAgIHsgYWdlOiA0LCBuYW1lOiAnRm9vJ30sXG4gKiAgICAgeyBhZ2U6IDcsIG5hbWU6ICdCYXInfSxcbiAqICAgICB7IGFnZTogNSwgbmFtZTogJ0Zvbyd9KVxuICogICAgIHsgYWdlOiA2LCBuYW1lOiAnRm9vJ30pXG4gKiAgICAgLmRpc3RpbmN0VW50aWxDaGFuZ2VkKChwOiBQZXJzb24sIHE6IFBlcnNvbikgPT4gcC5uYW1lID09PSBxLm5hbWUpXG4gKiAgICAgLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBkaXNwbGF5czpcbiAqIC8vIHsgYWdlOiA0LCBuYW1lOiAnRm9vJyB9XG4gKiAvLyB7IGFnZTogNywgbmFtZTogJ0JhcicgfVxuICogLy8geyBhZ2U6IDUsIG5hbWU6ICdGb28nIH1cbiAqXG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdH1cbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjb21wYXJlXSBPcHRpb25hbCBjb21wYXJpc29uIGZ1bmN0aW9uIGNhbGxlZCB0byB0ZXN0IGlmIGFuIGl0ZW0gaXMgZGlzdGluY3QgZnJvbSB0aGUgcHJldmlvdXMgaXRlbSBpbiB0aGUgc291cmNlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggZGlzdGluY3QgdmFsdWVzLlxuICogQG1ldGhvZCBkaXN0aW5jdFVudGlsQ2hhbmdlZFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gZGlzdGluY3RVbnRpbENoYW5nZWQoY29tcGFyZSwga2V5U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IERpc3RpbmN0VW50aWxDaGFuZ2VkT3BlcmF0b3IoY29tcGFyZSwga2V5U2VsZWN0b3IpKTsgfTtcbn1cbmV4cG9ydHMuZGlzdGluY3RVbnRpbENoYW5nZWQgPSBkaXN0aW5jdFVudGlsQ2hhbmdlZDtcbnZhciBEaXN0aW5jdFVudGlsQ2hhbmdlZE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEaXN0aW5jdFVudGlsQ2hhbmdlZE9wZXJhdG9yKGNvbXBhcmUsIGtleVNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuY29tcGFyZSA9IGNvbXBhcmU7XG4gICAgICAgIHRoaXMua2V5U2VsZWN0b3IgPSBrZXlTZWxlY3RvcjtcbiAgICB9XG4gICAgRGlzdGluY3RVbnRpbENoYW5nZWRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IERpc3RpbmN0VW50aWxDaGFuZ2VkU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmNvbXBhcmUsIHRoaXMua2V5U2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBEaXN0aW5jdFVudGlsQ2hhbmdlZE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgRGlzdGluY3RVbnRpbENoYW5nZWRTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRGlzdGluY3RVbnRpbENoYW5nZWRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERpc3RpbmN0VW50aWxDaGFuZ2VkU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY29tcGFyZSwga2V5U2VsZWN0b3IpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmtleVNlbGVjdG9yID0ga2V5U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuaGFzS2V5ID0gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlb2YgY29tcGFyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5jb21wYXJlID0gY29tcGFyZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBEaXN0aW5jdFVudGlsQ2hhbmdlZFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICByZXR1cm4geCA9PT0geTtcbiAgICB9O1xuICAgIERpc3RpbmN0VW50aWxDaGFuZ2VkU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGtleVNlbGVjdG9yID0gdGhpcy5rZXlTZWxlY3RvcjtcbiAgICAgICAgdmFyIGtleSA9IHZhbHVlO1xuICAgICAgICBpZiAoa2V5U2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGtleSA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2godGhpcy5rZXlTZWxlY3RvcikodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5oYXNLZXkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2godGhpcy5jb21wYXJlKSh0aGlzLmtleSwga2V5KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0LmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNLZXkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChCb29sZWFuKHJlc3VsdCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEaXN0aW5jdFVudGlsQ2hhbmdlZFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXN0aW5jdFVudGlsQ2hhbmdlZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBkaXN0aW5jdFVudGlsQ2hhbmdlZF8xID0gcmVxdWlyZSgnLi9kaXN0aW5jdFVudGlsQ2hhbmdlZCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYWxsIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgYXJlIGRpc3RpbmN0IGJ5IGNvbXBhcmlzb24gZnJvbSB0aGUgcHJldmlvdXMgaXRlbSxcbiAqIHVzaW5nIGEgcHJvcGVydHkgYWNjZXNzZWQgYnkgdXNpbmcgdGhlIGtleSBwcm92aWRlZCB0byBjaGVjayBpZiB0aGUgdHdvIGl0ZW1zIGFyZSBkaXN0aW5jdC5cbiAqXG4gKiBJZiBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggaXRlbSB0byB0ZXN0IGZvciB3aGV0aGVyIG9yIG5vdCB0aGF0IHZhbHVlIHNob3VsZCBiZSBlbWl0dGVkLlxuICpcbiAqIElmIGEgY29tcGFyYXRvciBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQsIGFuIGVxdWFsaXR5IGNoZWNrIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5BbiBleGFtcGxlIGNvbXBhcmluZyB0aGUgbmFtZSBvZiBwZXJzb25zPC9jYXB0aW9uPlxuICpcbiAqICBpbnRlcmZhY2UgUGVyc29uIHtcbiAqICAgICBhZ2U6IG51bWJlcixcbiAqICAgICBuYW1lOiBzdHJpbmdcbiAqICB9XG4gKlxuICogT2JzZXJ2YWJsZS5vZjxQZXJzb24+KFxuICogICAgIHsgYWdlOiA0LCBuYW1lOiAnRm9vJ30sXG4gKiAgICAgeyBhZ2U6IDcsIG5hbWU6ICdCYXInfSxcbiAqICAgICB7IGFnZTogNSwgbmFtZTogJ0Zvbyd9LFxuICogICAgIHsgYWdlOiA2LCBuYW1lOiAnRm9vJ30pXG4gKiAgICAgLmRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCduYW1lJylcbiAqICAgICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIGRpc3BsYXlzOlxuICogLy8geyBhZ2U6IDQsIG5hbWU6ICdGb28nIH1cbiAqIC8vIHsgYWdlOiA3LCBuYW1lOiAnQmFyJyB9XG4gKiAvLyB7IGFnZTogNSwgbmFtZTogJ0ZvbycgfVxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkFuIGV4YW1wbGUgY29tcGFyaW5nIHRoZSBmaXJzdCBsZXR0ZXJzIG9mIHRoZSBuYW1lPC9jYXB0aW9uPlxuICpcbiAqIGludGVyZmFjZSBQZXJzb24ge1xuICogICAgIGFnZTogbnVtYmVyLFxuICogICAgIG5hbWU6IHN0cmluZ1xuICogIH1cbiAqXG4gKiBPYnNlcnZhYmxlLm9mPFBlcnNvbj4oXG4gKiAgICAgeyBhZ2U6IDQsIG5hbWU6ICdGb28xJ30sXG4gKiAgICAgeyBhZ2U6IDcsIG5hbWU6ICdCYXInfSxcbiAqICAgICB7IGFnZTogNSwgbmFtZTogJ0ZvbzInfSxcbiAqICAgICB7IGFnZTogNiwgbmFtZTogJ0ZvbzMnfSlcbiAqICAgICAuZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoJ25hbWUnLCAoeDogc3RyaW5nLCB5OiBzdHJpbmcpID0+IHguc3Vic3RyaW5nKDAsIDMpID09PSB5LnN1YnN0cmluZygwLCAzKSlcbiAqICAgICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIC8vIGRpc3BsYXlzOlxuICogLy8geyBhZ2U6IDQsIG5hbWU6ICdGb28xJyB9XG4gKiAvLyB7IGFnZTogNywgbmFtZTogJ0JhcicgfVxuICogLy8geyBhZ2U6IDUsIG5hbWU6ICdGb28yJyB9XG4gKlxuICogQHNlZSB7QGxpbmsgZGlzdGluY3R9XG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdFVudGlsQ2hhbmdlZH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFN0cmluZyBrZXkgZm9yIG9iamVjdCBwcm9wZXJ0eSBsb29rdXAgb24gZWFjaCBpdGVtLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2NvbXBhcmVdIE9wdGlvbmFsIGNvbXBhcmlzb24gZnVuY3Rpb24gY2FsbGVkIHRvIHRlc3QgaWYgYW4gaXRlbSBpcyBkaXN0aW5jdCBmcm9tIHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBzb3VyY2UuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgd2l0aCBkaXN0aW5jdCB2YWx1ZXMgYmFzZWQgb24gdGhlIGtleSBzcGVjaWZpZWQuXG4gKiBAbWV0aG9kIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZChrZXksIGNvbXBhcmUpIHtcbiAgICByZXR1cm4gZGlzdGluY3RVbnRpbENoYW5nZWRfMS5kaXN0aW5jdFVudGlsQ2hhbmdlZChmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gY29tcGFyZSA/IGNvbXBhcmUoeFtrZXldLCB5W2tleV0pIDogeFtrZXldID09PSB5W2tleV07IH0pO1xufVxuZXhwb3J0cy5kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCA9IGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3RVbnRpbEtleUNoYW5nZWQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMSA9IHJlcXVpcmUoJy4uL3V0aWwvQXJndW1lbnRPdXRPZlJhbmdlRXJyb3InKTtcbi8qKlxuICogRW1pdHMgdGhlIHNpbmdsZSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIGBpbmRleGAgaW4gYSBzZXF1ZW5jZSBvZiBlbWlzc2lvbnNcbiAqIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbWl0cyBvbmx5IHRoZSBpLXRoIHZhbHVlLCB0aGVuIGNvbXBsZXRlcy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9lbGVtZW50QXQucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGVsZW1lbnRBdGAgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGl0ZW0gYXQgdGhlIHNwZWNpZmllZFxuICogYGluZGV4YCBpbiB0aGUgc291cmNlIE9ic2VydmFibGUsIG9yIGEgZGVmYXVsdCB2YWx1ZSBpZiB0aGF0IGBpbmRleGAgaXMgb3V0XG4gKiBvZiByYW5nZSBhbmQgdGhlIGBkZWZhdWx0YCBhcmd1bWVudCBpcyBwcm92aWRlZC4gSWYgdGhlIGBkZWZhdWx0YCBhcmd1bWVudCBpc1xuICogbm90IGdpdmVuIGFuZCB0aGUgYGluZGV4YCBpcyBvdXQgb2YgcmFuZ2UsIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSB3aWxsIGVtaXQgYW5cbiAqIGBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcmAgZXJyb3IuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCBvbmx5IHRoZSB0aGlyZCBjbGljayBldmVudDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmVsZW1lbnRBdCgyKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbjpcbiAqIC8vIGNsaWNrIDEgPSBub3RoaW5nXG4gKiAvLyBjbGljayAyID0gbm90aGluZ1xuICogLy8gY2xpY2sgMyA9IE1vdXNlRXZlbnQgb2JqZWN0IGxvZ2dlZCB0byBjb25zb2xlXG4gKlxuICogQHNlZSB7QGxpbmsgZmlyc3R9XG4gKiBAc2VlIHtAbGluayBsYXN0fVxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqIEBzZWUge0BsaW5rIHNpbmdsZX1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHRocm93cyB7QXJndW1lbnRPdXRPZlJhbmdlRXJyb3J9IFdoZW4gdXNpbmcgYGVsZW1lbnRBdChpKWAsIGl0IGRlbGl2ZXJzIGFuXG4gKiBBcmd1bWVudE91dE9yUmFuZ2VFcnJvciB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgIGNhbGxiYWNrIGlmIGBpIDwgMGAgb3IgdGhlXG4gKiBPYnNlcnZhYmxlIGhhcyBjb21wbGV0ZWQgYmVmb3JlIGVtaXR0aW5nIHRoZSBpLXRoIGBuZXh0YCBub3RpZmljYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IElzIHRoZSBudW1iZXIgYGlgIGZvciB0aGUgaS10aCBzb3VyY2UgZW1pc3Npb24gdGhhdCBoYXNcbiAqIGhhcHBlbmVkIHNpbmNlIHRoZSBzdWJzY3JpcHRpb24sIHN0YXJ0aW5nIGZyb20gdGhlIG51bWJlciBgMGAuXG4gKiBAcGFyYW0ge1R9IFtkZWZhdWx0VmFsdWVdIFRoZSBkZWZhdWx0IHZhbHVlIHJldHVybmVkIGZvciBtaXNzaW5nIGluZGljZXMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYSBzaW5nbGUgaXRlbSwgaWYgaXQgaXMgZm91bmQuXG4gKiBPdGhlcndpc2UsIHdpbGwgZW1pdCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBnaXZlbi4gSWYgbm90LCB0aGVuIGVtaXRzIGFuIGVycm9yLlxuICogQG1ldGhvZCBlbGVtZW50QXRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGVsZW1lbnRBdChpbmRleCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBFbGVtZW50QXRPcGVyYXRvcihpbmRleCwgZGVmYXVsdFZhbHVlKSk7IH07XG59XG5leHBvcnRzLmVsZW1lbnRBdCA9IGVsZW1lbnRBdDtcbnZhciBFbGVtZW50QXRPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRWxlbWVudEF0T3BlcmF0b3IoaW5kZXgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBFbGVtZW50QXRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEVsZW1lbnRBdFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5pbmRleCwgdGhpcy5kZWZhdWx0VmFsdWUpKTtcbiAgICB9O1xuICAgIHJldHVybiBFbGVtZW50QXRPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIEVsZW1lbnRBdFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhFbGVtZW50QXRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEVsZW1lbnRBdFN1YnNjcmliZXIoZGVzdGluYXRpb24sIGluZGV4LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBFbGVtZW50QXRTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4LS0gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh4KTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRWxlbWVudEF0U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBpZiAodGhpcy5pbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IobmV3IEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEuQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gRWxlbWVudEF0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVsZW1lbnRBdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hldGhlciBvciBub3QgZXZlcnkgaXRlbSBvZiB0aGUgc291cmNlIHNhdGlzZmllcyB0aGUgY29uZGl0aW9uIHNwZWNpZmllZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5BIHNpbXBsZSBleGFtcGxlIGVtaXR0aW5nIHRydWUgaWYgYWxsIGVsZW1lbnRzIGFyZSBsZXNzIHRoYW4gNSwgZmFsc2Ugb3RoZXJ3aXNlPC9jYXB0aW9uPlxuICogIE9ic2VydmFibGUub2YoMSwgMiwgMywgNCwgNSwgNilcbiAqICAgICAuZXZlcnkoeCA9PiB4IDwgNSlcbiAqICAgICAuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpOyAvLyAtPiBmYWxzZVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHByZWRpY2F0ZSBBIGZ1bmN0aW9uIGZvciBkZXRlcm1pbmluZyBpZiBhbiBpdGVtIG1lZXRzIGEgc3BlY2lmaWVkIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSB7YW55fSBbdGhpc0FyZ10gT3B0aW9uYWwgb2JqZWN0IHRvIHVzZSBmb3IgYHRoaXNgIGluIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgb2YgYm9vbGVhbnMgdGhhdCBkZXRlcm1pbmVzIGlmIGFsbCBpdGVtcyBvZiB0aGUgc291cmNlIE9ic2VydmFibGUgbWVldCB0aGUgY29uZGl0aW9uIHNwZWNpZmllZC5cbiAqIEBtZXRob2QgZXZlcnlcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGV2ZXJ5KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRXZlcnlPcGVyYXRvcihwcmVkaWNhdGUsIHRoaXNBcmcsIHNvdXJjZSkpOyB9O1xufVxuZXhwb3J0cy5ldmVyeSA9IGV2ZXJ5O1xudmFyIEV2ZXJ5T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEV2ZXJ5T3BlcmF0b3IocHJlZGljYXRlLCB0aGlzQXJnLCBzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgICAgIHRoaXMudGhpc0FyZyA9IHRoaXNBcmc7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cbiAgICBFdmVyeU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEV2ZXJ5U3Vic2NyaWJlcihvYnNlcnZlciwgdGhpcy5wcmVkaWNhdGUsIHRoaXMudGhpc0FyZywgdGhpcy5zb3VyY2UpKTtcbiAgICB9O1xuICAgIHJldHVybiBFdmVyeU9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgRXZlcnlTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRXZlcnlTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEV2ZXJ5U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnLCBzb3VyY2UpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgdGhpcy50aGlzQXJnID0gdGhpc0FyZztcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLnRoaXNBcmcgPSB0aGlzQXJnIHx8IHRoaXM7XG4gICAgfVxuICAgIEV2ZXJ5U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoZXZlcnlWYWx1ZU1hdGNoKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChldmVyeVZhbHVlTWF0Y2gpO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBFdmVyeVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLCB2YWx1ZSwgdGhpcy5pbmRleCsrLCB0aGlzLnNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUNvbXBsZXRlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXZlcnlTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5Q29tcGxldGUodHJ1ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gRXZlcnlTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlcnkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKipcbiAqIENvbnZlcnRzIGEgaGlnaGVyLW9yZGVyIE9ic2VydmFibGUgaW50byBhIGZpcnN0LW9yZGVyIE9ic2VydmFibGUgYnkgZHJvcHBpbmdcbiAqIGlubmVyIE9ic2VydmFibGVzIHdoaWxlIHRoZSBwcmV2aW91cyBpbm5lciBPYnNlcnZhYmxlIGhhcyBub3QgeWV0IGNvbXBsZXRlZC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RmxhdHRlbnMgYW4gT2JzZXJ2YWJsZS1vZi1PYnNlcnZhYmxlcyBieSBkcm9wcGluZyB0aGVcbiAqIG5leHQgaW5uZXIgT2JzZXJ2YWJsZXMgd2hpbGUgdGhlIGN1cnJlbnQgaW5uZXIgaXMgc3RpbGwgZXhlY3V0aW5nLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2V4aGF1c3QucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYGV4aGF1c3RgIHN1YnNjcmliZXMgdG8gYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIE9ic2VydmFibGVzLCBhbHNvIGtub3duIGFzIGFcbiAqIGhpZ2hlci1vcmRlciBPYnNlcnZhYmxlLiBFYWNoIHRpbWUgaXQgb2JzZXJ2ZXMgb25lIG9mIHRoZXNlIGVtaXR0ZWQgaW5uZXJcbiAqIE9ic2VydmFibGVzLCB0aGUgb3V0cHV0IE9ic2VydmFibGUgYmVnaW5zIGVtaXR0aW5nIHRoZSBpdGVtcyBlbWl0dGVkIGJ5IHRoYXRcbiAqIGlubmVyIE9ic2VydmFibGUuIFNvIGZhciwgaXQgYmVoYXZlcyBsaWtlIHtAbGluayBtZXJnZUFsbH0uIEhvd2V2ZXIsXG4gKiBgZXhoYXVzdGAgaWdub3JlcyBldmVyeSBuZXcgaW5uZXIgT2JzZXJ2YWJsZSBpZiB0aGUgcHJldmlvdXMgT2JzZXJ2YWJsZSBoYXNcbiAqIG5vdCB5ZXQgY29tcGxldGVkLiBPbmNlIHRoYXQgb25lIGNvbXBsZXRlcywgaXQgd2lsbCBhY2NlcHQgYW5kIGZsYXR0ZW4gdGhlXG4gKiBuZXh0IGlubmVyIE9ic2VydmFibGUgYW5kIHJlcGVhdCB0aGlzIHByb2Nlc3MuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+UnVuIGEgZmluaXRlIHRpbWVyIGZvciBlYWNoIGNsaWNrLCBvbmx5IGlmIHRoZXJlIGlzIG5vIGN1cnJlbnRseSBhY3RpdmUgdGltZXI8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGhpZ2hlck9yZGVyID0gY2xpY2tzLm1hcCgoZXYpID0+IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSg1KSk7XG4gKiB2YXIgcmVzdWx0ID0gaGlnaGVyT3JkZXIuZXhoYXVzdCgpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBjb21iaW5lQWxsfVxuICogQHNlZSB7QGxpbmsgY29uY2F0QWxsfVxuICogQHNlZSB7QGxpbmsgc3dpdGNofVxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBleGhhdXN0TWFwfVxuICogQHNlZSB7QGxpbmsgemlwQWxsfVxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCB0YWtlcyBhIHNvdXJjZSBvZiBPYnNlcnZhYmxlcyBhbmQgcHJvcGFnYXRlcyB0aGUgZmlyc3Qgb2JzZXJ2YWJsZVxuICogZXhjbHVzaXZlbHkgdW50aWwgaXQgY29tcGxldGVzIGJlZm9yZSBzdWJzY3JpYmluZyB0byB0aGUgbmV4dC5cbiAqIEBtZXRob2QgZXhoYXVzdFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gZXhoYXVzdCgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFN3aXRjaEZpcnN0T3BlcmF0b3IoKSk7IH07XG59XG5leHBvcnRzLmV4aGF1c3QgPSBleGhhdXN0O1xudmFyIFN3aXRjaEZpcnN0T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN3aXRjaEZpcnN0T3BlcmF0b3IoKSB7XG4gICAgfVxuICAgIFN3aXRjaEZpcnN0T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTd2l0Y2hGaXJzdFN1YnNjcmliZXIoc3Vic2NyaWJlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFN3aXRjaEZpcnN0T3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBTd2l0Y2hGaXJzdFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTd2l0Y2hGaXJzdFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3dpdGNoRmlyc3RTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5oYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNTdWJzY3JpcHRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgU3dpdGNoRmlyc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmhhc1N1YnNjcmlwdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN3aXRjaEZpcnN0U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5oYXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3dpdGNoRmlyc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB0aGlzLnJlbW92ZShpbm5lclN1Yik7XG4gICAgICAgIHRoaXMuaGFzU3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3dpdGNoRmlyc3RTdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4aGF1c3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBpbiB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlIG9ubHkgaWYgdGhlIHByZXZpb3VzIHByb2plY3RlZCBPYnNlcnZhYmxlIGhhcyBjb21wbGV0ZWQuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPk1hcHMgZWFjaCB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlLCB0aGVuIGZsYXR0ZW5zIGFsbCBvZlxuICogdGhlc2UgaW5uZXIgT2JzZXJ2YWJsZXMgdXNpbmcge0BsaW5rIGV4aGF1c3R9Ljwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2V4aGF1c3RNYXAucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYmFzZWQgb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0aGF0IHlvdVxuICogc3VwcGx5IHRvIGVhY2ggaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgd2hlcmUgdGhhdCBmdW5jdGlvblxuICogcmV0dXJucyBhbiAoc28tY2FsbGVkIFwiaW5uZXJcIikgT2JzZXJ2YWJsZS4gV2hlbiBpdCBwcm9qZWN0cyBhIHNvdXJjZSB2YWx1ZSB0b1xuICogYW4gT2JzZXJ2YWJsZSwgdGhlIG91dHB1dCBPYnNlcnZhYmxlIGJlZ2lucyBlbWl0dGluZyB0aGUgaXRlbXMgZW1pdHRlZCBieVxuICogdGhhdCBwcm9qZWN0ZWQgT2JzZXJ2YWJsZS4gSG93ZXZlciwgYGV4aGF1c3RNYXBgIGlnbm9yZXMgZXZlcnkgbmV3IHByb2plY3RlZFxuICogT2JzZXJ2YWJsZSBpZiB0aGUgcHJldmlvdXMgcHJvamVjdGVkIE9ic2VydmFibGUgaGFzIG5vdCB5ZXQgY29tcGxldGVkLiBPbmNlXG4gKiB0aGF0IG9uZSBjb21wbGV0ZXMsIGl0IHdpbGwgYWNjZXB0IGFuZCBmbGF0dGVuIHRoZSBuZXh0IHByb2plY3RlZCBPYnNlcnZhYmxlXG4gKiBhbmQgcmVwZWF0IHRoaXMgcHJvY2Vzcy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5SdW4gYSBmaW5pdGUgdGltZXIgZm9yIGVhY2ggY2xpY2ssIG9ubHkgaWYgdGhlcmUgaXMgbm8gY3VycmVudGx5IGFjdGl2ZSB0aW1lcjwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmV4aGF1c3RNYXAoKGV2KSA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApLnRha2UoNSkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBjb25jYXRNYXB9XG4gKiBAc2VlIHtAbGluayBleGhhdXN0fVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXB9XG4gKiBAc2VlIHtAbGluayBzd2l0Y2hNYXB9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgP2luZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlSW5wdXR9IHByb2plY3QgQSBmdW5jdGlvblxuICogdGhhdCwgd2hlbiBhcHBsaWVkIHRvIGFuIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIHJldHVybnMgYW5cbiAqIE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKG91dGVyVmFsdWU6IFQsIGlubmVyVmFsdWU6IEksIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKTogYW55fSBbcmVzdWx0U2VsZWN0b3JdXG4gKiBBIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHZhbHVlIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiYXNlZCBvbiB0aGUgdmFsdWVzXG4gKiBhbmQgdGhlIGluZGljZXMgb2YgdGhlIHNvdXJjZSAob3V0ZXIpIGVtaXNzaW9uIGFuZCB0aGUgaW5uZXIgT2JzZXJ2YWJsZVxuICogZW1pc3Npb24uIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlOlxuICogLSBgb3V0ZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lclZhbHVlYDogdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogLSBgb3V0ZXJJbmRleGA6IHRoZSBcImluZGV4XCIgb2YgdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBzb3VyY2VcbiAqIC0gYGlubmVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSBjb250YWluaW5nIHByb2plY3RlZCBPYnNlcnZhYmxlc1xuICogb2YgZWFjaCBpdGVtIG9mIHRoZSBzb3VyY2UsIGlnbm9yaW5nIHByb2plY3RlZCBPYnNlcnZhYmxlcyB0aGF0IHN0YXJ0IGJlZm9yZVxuICogdGhlaXIgcHJlY2VkaW5nIE9ic2VydmFibGUgaGFzIGNvbXBsZXRlZC5cbiAqIEBtZXRob2QgZXhoYXVzdE1hcFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gZXhoYXVzdE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgU3dpdGNoRmlyc3RNYXBPcGVyYXRvcihwcm9qZWN0LCByZXN1bHRTZWxlY3RvcikpOyB9O1xufVxuZXhwb3J0cy5leGhhdXN0TWFwID0gZXhoYXVzdE1hcDtcbnZhciBTd2l0Y2hGaXJzdE1hcE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTd2l0Y2hGaXJzdE1hcE9wZXJhdG9yKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0b3IgPSByZXN1bHRTZWxlY3RvcjtcbiAgICB9XG4gICAgU3dpdGNoRmlyc3RNYXBPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFN3aXRjaEZpcnN0TWFwU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnByb2plY3QsIHRoaXMucmVzdWx0U2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBTd2l0Y2hGaXJzdE1hcE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgU3dpdGNoRmlyc3RNYXBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3dpdGNoRmlyc3RNYXBTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN3aXRjaEZpcnN0TWFwU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuaGFzU3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgIH1cbiAgICBTd2l0Y2hGaXJzdE1hcFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudHJ5TmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN3aXRjaEZpcnN0TWFwU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5TmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5wcm9qZWN0KHZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgICB0aGlzLmhhc1N1YnNjcmlwdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHJlc3VsdCwgdmFsdWUsIGluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3dpdGNoRmlyc3RNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTd2l0Y2hGaXJzdE1hcFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgcmVzdWx0U2VsZWN0b3IgPSBfYS5yZXN1bHRTZWxlY3RvciwgZGVzdGluYXRpb24gPSBfYS5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnRyeVNlbGVjdFJlc3VsdChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN3aXRjaEZpcnN0TWFwU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5U2VsZWN0UmVzdWx0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgcmVzdWx0U2VsZWN0b3IgPSBfYS5yZXN1bHRTZWxlY3RvciwgZGVzdGluYXRpb24gPSBfYS5kZXN0aW5hdGlvbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRTZWxlY3RvcihvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KTtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTd2l0Y2hGaXJzdE1hcFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgfTtcbiAgICBTd2l0Y2hGaXJzdE1hcFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKGlubmVyU3ViKTtcbiAgICAgICAgdGhpcy5oYXNTdWJzY3JpcHRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29tcGxldGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTd2l0Y2hGaXJzdE1hcFN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhoYXVzdE1hcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIHRyeUNhdGNoXzEgPSByZXF1aXJlKCcuLi91dGlsL3RyeUNhdGNoJyk7XG52YXIgZXJyb3JPYmplY3RfMSA9IHJlcXVpcmUoJy4uL3V0aWwvZXJyb3JPYmplY3QnKTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZWN1cnNpdmVseSBwcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBpblxuICogdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIHNpbWlsYXIgdG8ge0BsaW5rIG1lcmdlTWFwfSwgYnV0IGFwcGxpZXMgdGhlXG4gKiBwcm9qZWN0aW9uIGZ1bmN0aW9uIHRvIGV2ZXJ5IHNvdXJjZSB2YWx1ZSBhcyB3ZWxsIGFzIGV2ZXJ5IG91dHB1dCB2YWx1ZS5cbiAqIEl0J3MgcmVjdXJzaXZlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2V4cGFuZC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBiYXNlZCBvbiBhcHBseWluZyBhIGZ1bmN0aW9uIHRoYXQgeW91XG4gKiBzdXBwbHkgdG8gZWFjaCBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB3aGVyZSB0aGF0IGZ1bmN0aW9uXG4gKiByZXR1cm5zIGFuIE9ic2VydmFibGUsIGFuZCB0aGVuIG1lcmdpbmcgdGhvc2UgcmVzdWx0aW5nIE9ic2VydmFibGVzIGFuZFxuICogZW1pdHRpbmcgdGhlIHJlc3VsdHMgb2YgdGhpcyBtZXJnZXIuICpFeHBhbmQqIHdpbGwgcmUtZW1pdCBvbiB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlIGV2ZXJ5IHNvdXJjZSB2YWx1ZS4gVGhlbiwgZWFjaCBvdXRwdXQgdmFsdWUgaXMgZ2l2ZW4gdG8gdGhlXG4gKiBgcHJvamVjdGAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBpbm5lciBPYnNlcnZhYmxlIHRvIGJlIG1lcmdlZCBvbiB0aGVcbiAqIG91dHB1dCBPYnNlcnZhYmxlLiBUaG9zZSBvdXRwdXQgdmFsdWVzIHJlc3VsdGluZyBmcm9tIHRoZSBwcm9qZWN0aW9uIGFyZSBhbHNvXG4gKiBnaXZlbiB0byB0aGUgYHByb2plY3RgIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3IG91dHB1dCB2YWx1ZXMuIFRoaXMgaXMgaG93XG4gKiAqZXhwYW5kKiBiZWhhdmVzIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlN0YXJ0IGVtaXR0aW5nIHRoZSBwb3dlcnMgb2YgdHdvIG9uIGV2ZXJ5IGNsaWNrLCBhdCBtb3N0IDEwIG9mIHRoZW08L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHBvd2Vyc09mVHdvID0gY2xpY2tzXG4gKiAgIC5tYXBUbygxKVxuICogICAuZXhwYW5kKHggPT4gUnguT2JzZXJ2YWJsZS5vZigyICogeCkuZGVsYXkoMTAwMCkpXG4gKiAgIC50YWtlKDEwKTtcbiAqIHBvd2Vyc09mVHdvLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBPYnNlcnZhYmxlfSBwcm9qZWN0IEEgZnVuY3Rpb25cbiAqIHRoYXQsIHdoZW4gYXBwbGllZCB0byBhbiBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBvciB0aGUgb3V0cHV0IE9ic2VydmFibGUsXG4gKiByZXR1cm5zIGFuIE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXSBNYXhpbXVtIG51bWJlciBvZiBpbnB1dFxuICogT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0byBjb25jdXJyZW50bHkuXG4gKiBAcGFyYW0ge1NjaGVkdWxlcn0gW3NjaGVkdWxlcj1udWxsXSBUaGUgSVNjaGVkdWxlciB0byB1c2UgZm9yIHN1YnNjcmliaW5nIHRvXG4gKiBlYWNoIHByb2plY3RlZCBpbm5lciBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzb3VyY2UgdmFsdWVzIGFuZCBhbHNvXG4gKiByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIHByb2plY3Rpb24gZnVuY3Rpb24gdG8gZWFjaCB2YWx1ZSBlbWl0dGVkIG9uIHRoZVxuICogb3V0cHV0IE9ic2VydmFibGUgYW5kIGFuZCBtZXJnaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBPYnNlcnZhYmxlcyBvYnRhaW5lZFxuICogZnJvbSB0aGlzIHRyYW5zZm9ybWF0aW9uLlxuICogQG1ldGhvZCBleHBhbmRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGV4cGFuZChwcm9qZWN0LCBjb25jdXJyZW50LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gdW5kZWZpbmVkOyB9XG4gICAgY29uY3VycmVudCA9IChjb25jdXJyZW50IHx8IDApIDwgMSA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IGNvbmN1cnJlbnQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBFeHBhbmRPcGVyYXRvcihwcm9qZWN0LCBjb25jdXJyZW50LCBzY2hlZHVsZXIpKTsgfTtcbn1cbmV4cG9ydHMuZXhwYW5kID0gZXhwYW5kO1xudmFyIEV4cGFuZE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFeHBhbmRPcGVyYXRvcihwcm9qZWN0LCBjb25jdXJyZW50LCBzY2hlZHVsZXIpIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICAgICAgdGhpcy5jb25jdXJyZW50ID0gY29uY3VycmVudDtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIEV4cGFuZE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRXhwYW5kU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnByb2plY3QsIHRoaXMuY29uY3VycmVudCwgdGhpcy5zY2hlZHVsZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBFeHBhbmRPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLkV4cGFuZE9wZXJhdG9yID0gRXhwYW5kT3BlcmF0b3I7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIEV4cGFuZFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhFeHBhbmRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEV4cGFuZFN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByb2plY3QsIGNvbmN1cnJlbnQsIHNjaGVkdWxlcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgICAgIHRoaXMuY29uY3VycmVudCA9IGNvbmN1cnJlbnQ7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSAwO1xuICAgICAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoY29uY3VycmVudCA8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBFeHBhbmRTdWJzY3JpYmVyLmRpc3BhdGNoID0gZnVuY3Rpb24gKGFyZykge1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGFyZy5zdWJzY3JpYmVyLCByZXN1bHQgPSBhcmcucmVzdWx0LCB2YWx1ZSA9IGFyZy52YWx1ZSwgaW5kZXggPSBhcmcuaW5kZXg7XG4gICAgICAgIHN1YnNjcmliZXIuc3Vic2NyaWJlVG9Qcm9qZWN0aW9uKHJlc3VsdCwgdmFsdWUsIGluZGV4KTtcbiAgICB9O1xuICAgIEV4cGFuZFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCsrO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgPCB0aGlzLmNvbmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2godGhpcy5wcm9qZWN0KSh2YWx1ZSwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghdGhpcy5zY2hlZHVsZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvUHJvamVjdGlvbihyZXN1bHQsIHZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB7IHN1YnNjcmliZXI6IHRoaXMsIHJlc3VsdDogcmVzdWx0LCB2YWx1ZTogdmFsdWUsIGluZGV4OiBpbmRleCB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKEV4cGFuZFN1YnNjcmliZXIuZGlzcGF0Y2gsIDAsIHN0YXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXhwYW5kU3Vic2NyaWJlci5wcm90b3R5cGUuc3Vic2NyaWJlVG9Qcm9qZWN0aW9uID0gZnVuY3Rpb24gKHJlc3VsdCwgdmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHRoaXMuYWN0aXZlKys7XG4gICAgICAgIHRoaXMuYWRkKHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgcmVzdWx0LCB2YWx1ZSwgaW5kZXgpKTtcbiAgICB9O1xuICAgIEV4cGFuZFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5oYXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5oYXNDb21wbGV0ZWQgJiYgdGhpcy5hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRXhwYW5kU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLl9uZXh0KGlubmVyVmFsdWUpO1xuICAgIH07XG4gICAgRXhwYW5kU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoaW5uZXJTdWIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICB0aGlzLnJlbW92ZShpbm5lclN1Yik7XG4gICAgICAgIHRoaXMuYWN0aXZlLS07XG4gICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQoYnVmZmVyLnNoaWZ0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbXBsZXRlZCAmJiB0aGlzLmFjdGl2ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRXhwYW5kU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG5leHBvcnRzLkV4cGFuZFN1YnNjcmliZXIgPSBFeHBhbmRTdWJzY3JpYmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwYW5kLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogRmlsdGVyIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGJ5IG9ubHkgZW1pdHRpbmcgdGhvc2UgdGhhdFxuICogc2F0aXNmeSBhIHNwZWNpZmllZCBwcmVkaWNhdGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkxpa2VcbiAqIFtBcnJheS5wcm90b3R5cGUuZmlsdGVyKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZpbHRlciksXG4gKiBpdCBvbmx5IGVtaXRzIGEgdmFsdWUgZnJvbSB0aGUgc291cmNlIGlmIGl0IHBhc3NlcyBhIGNyaXRlcmlvbiBmdW5jdGlvbi48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9maWx0ZXIucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogU2ltaWxhciB0byB0aGUgd2VsbC1rbm93biBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kLCB0aGlzIG9wZXJhdG9yXG4gKiB0YWtlcyB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUsIHBhc3NlcyB0aGVtIHRocm91Z2ggYSBgcHJlZGljYXRlYFxuICogZnVuY3Rpb24gYW5kIG9ubHkgZW1pdHMgdGhvc2UgdmFsdWVzIHRoYXQgeWllbGRlZCBgdHJ1ZWAuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RW1pdCBvbmx5IGNsaWNrIGV2ZW50cyB3aG9zZSB0YXJnZXQgd2FzIGEgRElWIGVsZW1lbnQ8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIGNsaWNrc09uRGl2cyA9IGNsaWNrcy5maWx0ZXIoZXYgPT4gZXYudGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKTtcbiAqIGNsaWNrc09uRGl2cy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgZGlzdGluY3R9XG4gKiBAc2VlIHtAbGluayBkaXN0aW5jdFVudGlsQ2hhbmdlZH1cbiAqIEBzZWUge0BsaW5rIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkfVxuICogQHNlZSB7QGxpbmsgaWdub3JlRWxlbWVudHN9XG4gKiBAc2VlIHtAbGluayBwYXJ0aXRpb259XG4gKiBAc2VlIHtAbGluayBza2lwfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsIGluZGV4OiBudW1iZXIpOiBib29sZWFufSBwcmVkaWNhdGUgQSBmdW5jdGlvbiB0aGF0XG4gKiBldmFsdWF0ZXMgZWFjaCB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS4gSWYgaXQgcmV0dXJucyBgdHJ1ZWAsXG4gKiB0aGUgdmFsdWUgaXMgZW1pdHRlZCwgaWYgYGZhbHNlYCB0aGUgdmFsdWUgaXMgbm90IHBhc3NlZCB0byB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlLiBUaGUgYGluZGV4YCBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBgaWAgZm9yIHRoZSBpLXRoIHNvdXJjZVxuICogZW1pc3Npb24gdGhhdCBoYXMgaGFwcGVuZWQgc2luY2UgdGhlIHN1YnNjcmlwdGlvbiwgc3RhcnRpbmcgZnJvbSB0aGUgbnVtYmVyXG4gKiBgMGAuXG4gKiBAcGFyYW0ge2FueX0gW3RoaXNBcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgYHRoaXNgXG4gKiBpbiB0aGUgYHByZWRpY2F0ZWAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UgdGhhdCB3ZXJlXG4gKiBhbGxvd2VkIGJ5IHRoZSBgcHJlZGljYXRlYCBmdW5jdGlvbi5cbiAqIEBtZXRob2QgZmlsdGVyXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGZpbHRlck9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgRmlsdGVyT3BlcmF0b3IocHJlZGljYXRlLCB0aGlzQXJnKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZmlsdGVyID0gZmlsdGVyO1xudmFyIEZpbHRlck9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGaWx0ZXJPcGVyYXRvcihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgICAgIHRoaXMudGhpc0FyZyA9IHRoaXNBcmc7XG4gICAgfVxuICAgIEZpbHRlck9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRmlsdGVyU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnByZWRpY2F0ZSwgdGhpcy50aGlzQXJnKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRmlsdGVyT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBGaWx0ZXJTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRmlsdGVyU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGaWx0ZXJTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgdGhpcy50aGlzQXJnID0gdGhpc0FyZztcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgfVxuICAgIC8vIHRoZSB0cnkgY2F0Y2ggYmxvY2sgYmVsb3cgaXMgbGVmdCBzcGVjaWZpY2FsbHkgZm9yXG4gICAgLy8gb3B0aW1pemF0aW9uIGFuZCBwZXJmIHJlYXNvbnMuIGEgdHJ5Q2F0Y2hlciBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuXG4gICAgRmlsdGVyU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLCB2YWx1ZSwgdGhpcy5jb3VudCsrKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEZpbHRlclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWx0ZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpcHRpb24nKTtcbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgc291cmNlIE9ic2VydmFibGUsIGJ1dCB3aWxsIGNhbGwgYSBzcGVjaWZpZWQgZnVuY3Rpb24gd2hlblxuICogdGhlIHNvdXJjZSB0ZXJtaW5hdGVzIG9uIGNvbXBsZXRlIG9yIGVycm9yLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gc291cmNlIHRlcm1pbmF0ZXMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgbWlycm9ycyB0aGUgc291cmNlLCBidXQgd2lsbCBjYWxsIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gdGVybWluYXRpb24uXG4gKiBAbWV0aG9kIGZpbmFsbHlcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGZpbmFsaXplKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBGaW5hbGx5T3BlcmF0b3IoY2FsbGJhY2spKTsgfTtcbn1cbmV4cG9ydHMuZmluYWxpemUgPSBmaW5hbGl6ZTtcbnZhciBGaW5hbGx5T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZpbmFsbHlPcGVyYXRvcihjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuICAgIEZpbmFsbHlPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEZpbmFsbHlTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuY2FsbGJhY2spKTtcbiAgICB9O1xuICAgIHJldHVybiBGaW5hbGx5T3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBGaW5hbGx5U3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZpbmFsbHlTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZpbmFsbHlTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjYWxsYmFjaykge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuYWRkKG5ldyBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24oY2FsbGJhY2spKTtcbiAgICB9XG4gICAgcmV0dXJuIEZpbmFsbHlTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluYWxpemUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGZpcnN0IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWVldHMgc29tZVxuICogY29uZGl0aW9uLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5GaW5kcyB0aGUgZmlyc3QgdmFsdWUgdGhhdCBwYXNzZXMgc29tZSB0ZXN0IGFuZCBlbWl0c1xuICogdGhhdC48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9maW5kLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBmaW5kYCBzZWFyY2hlcyBmb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWF0Y2hlcyB0aGVcbiAqIHNwZWNpZmllZCBjb25kaXRpb24gZW1ib2RpZWQgYnkgdGhlIGBwcmVkaWNhdGVgLCBhbmQgcmV0dXJucyB0aGUgZmlyc3RcbiAqIG9jY3VycmVuY2UgaW4gdGhlIHNvdXJjZS4gVW5saWtlIHtAbGluayBmaXJzdH0sIHRoZSBgcHJlZGljYXRlYCBpcyByZXF1aXJlZFxuICogaW4gYGZpbmRgLCBhbmQgZG9lcyBub3QgZW1pdCBhbiBlcnJvciBpZiBhIHZhbGlkIHZhbHVlIGlzIG5vdCBmb3VuZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5GaW5kIGFuZCBlbWl0IHRoZSBmaXJzdCBjbGljayB0aGF0IGhhcHBlbnMgb24gYSBESVYgZWxlbWVudDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLmZpbmQoZXYgPT4gZXYudGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgZmlsdGVyfVxuICogQHNlZSB7QGxpbmsgZmlyc3R9XG4gKiBAc2VlIHtAbGluayBmaW5kSW5kZXh9XG4gKiBAc2VlIHtAbGluayB0YWtlfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPik6IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCBlYWNoIGl0ZW0gdG8gdGVzdCBmb3IgY29uZGl0aW9uIG1hdGNoaW5nLlxuICogQHBhcmFtIHthbnl9IFt0aGlzQXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIGB0aGlzYFxuICogaW4gdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSBvZiB0aGUgZmlyc3QgaXRlbSB0aGF0IG1hdGNoZXMgdGhlXG4gKiBjb25kaXRpb24uXG4gKiBAbWV0aG9kIGZpbmRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGZpbmQocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncHJlZGljYXRlIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRmluZFZhbHVlT3BlcmF0b3IocHJlZGljYXRlLCBzb3VyY2UsIGZhbHNlLCB0aGlzQXJnKSk7IH07XG59XG5leHBvcnRzLmZpbmQgPSBmaW5kO1xudmFyIEZpbmRWYWx1ZU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGaW5kVmFsdWVPcGVyYXRvcihwcmVkaWNhdGUsIHNvdXJjZSwgeWllbGRJbmRleCwgdGhpc0FyZykge1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMueWllbGRJbmRleCA9IHlpZWxkSW5kZXg7XG4gICAgICAgIHRoaXMudGhpc0FyZyA9IHRoaXNBcmc7XG4gICAgfVxuICAgIEZpbmRWYWx1ZU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEZpbmRWYWx1ZVN1YnNjcmliZXIob2JzZXJ2ZXIsIHRoaXMucHJlZGljYXRlLCB0aGlzLnNvdXJjZSwgdGhpcy55aWVsZEluZGV4LCB0aGlzLnRoaXNBcmcpKTtcbiAgICB9O1xuICAgIHJldHVybiBGaW5kVmFsdWVPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLkZpbmRWYWx1ZU9wZXJhdG9yID0gRmluZFZhbHVlT3BlcmF0b3I7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIEZpbmRWYWx1ZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGaW5kVmFsdWVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZpbmRWYWx1ZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByZWRpY2F0ZSwgc291cmNlLCB5aWVsZEluZGV4LCB0aGlzQXJnKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLnlpZWxkSW5kZXggPSB5aWVsZEluZGV4O1xuICAgICAgICB0aGlzLnRoaXNBcmcgPSB0aGlzQXJnO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICB9XG4gICAgRmluZFZhbHVlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIGRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBGaW5kVmFsdWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBwcmVkaWNhdGUgPSBfYS5wcmVkaWNhdGUsIHRoaXNBcmcgPSBfYS50aGlzQXJnO1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcHJlZGljYXRlLmNhbGwodGhpc0FyZyB8fCB0aGlzLCB2YWx1ZSwgaW5kZXgsIHRoaXMuc291cmNlKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUNvbXBsZXRlKHRoaXMueWllbGRJbmRleCA/IGluZGV4IDogdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRmluZFZhbHVlU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeUNvbXBsZXRlKHRoaXMueWllbGRJbmRleCA/IC0xIDogdW5kZWZpbmVkKTtcbiAgICB9O1xuICAgIHJldHVybiBGaW5kVmFsdWVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5GaW5kVmFsdWVTdWJzY3JpYmVyID0gRmluZFZhbHVlU3Vic2NyaWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbmQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgZmluZF8xID0gcmVxdWlyZSgnLi4vb3BlcmF0b3JzL2ZpbmQnKTtcbi8qKlxuICogRW1pdHMgb25seSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXRcbiAqIG1lZXRzIHNvbWUgY29uZGl0aW9uLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGZpbmR9LCBidXQgZW1pdHMgdGhlIGluZGV4IG9mIHRoZVxuICogZm91bmQgdmFsdWUsIG5vdCB0aGUgdmFsdWUgaXRzZWxmLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2ZpbmRJbmRleC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgZmluZEluZGV4YCBzZWFyY2hlcyBmb3IgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWF0Y2hlc1xuICogdGhlIHNwZWNpZmllZCBjb25kaXRpb24gZW1ib2RpZWQgYnkgdGhlIGBwcmVkaWNhdGVgLCBhbmQgcmV0dXJucyB0aGVcbiAqICh6ZXJvLWJhc2VkKSBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgc291cmNlLiBVbmxpa2VcbiAqIHtAbGluayBmaXJzdH0sIHRoZSBgcHJlZGljYXRlYCBpcyByZXF1aXJlZCBpbiBgZmluZEluZGV4YCwgYW5kIGRvZXMgbm90IGVtaXRcbiAqIGFuIGVycm9yIGlmIGEgdmFsaWQgdmFsdWUgaXMgbm90IGZvdW5kLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgdGhlIGluZGV4IG9mIGZpcnN0IGNsaWNrIHRoYXQgaGFwcGVucyBvbiBhIERJViBlbGVtZW50PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3MuZmluZEluZGV4KGV2ID0+IGV2LnRhcmdldC50YWdOYW1lID09PSAnRElWJyk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGZpbHRlcn1cbiAqIEBzZWUge0BsaW5rIGZpbmR9XG4gKiBAc2VlIHtAbGluayBmaXJzdH1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogYm9vbGVhbn0gcHJlZGljYXRlXG4gKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIGVhY2ggaXRlbSB0byB0ZXN0IGZvciBjb25kaXRpb24gbWF0Y2hpbmcuXG4gKiBAcGFyYW0ge2FueX0gW3RoaXNBcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgYHRoaXNgXG4gKiBpbiB0aGUgYHByZWRpY2F0ZWAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIG9mIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbSB0aGF0XG4gKiBtYXRjaGVzIHRoZSBjb25kaXRpb24uXG4gKiBAbWV0aG9kIGZpbmRcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IGZpbmRfMS5GaW5kVmFsdWVPcGVyYXRvcihwcmVkaWNhdGUsIHNvdXJjZSwgdHJ1ZSwgdGhpc0FyZykpOyB9O1xufVxuZXhwb3J0cy5maW5kSW5kZXggPSBmaW5kSW5kZXg7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5kSW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgRW1wdHlFcnJvcl8xID0gcmVxdWlyZSgnLi4vdXRpbC9FbXB0eUVycm9yJyk7XG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGZpcnN0IHZhbHVlIChvciB0aGUgZmlyc3QgdmFsdWUgdGhhdCBtZWV0cyBzb21lIGNvbmRpdGlvbilcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbWl0cyBvbmx5IHRoZSBmaXJzdCB2YWx1ZS4gT3IgZW1pdHMgb25seSB0aGUgZmlyc3RcbiAqIHZhbHVlIHRoYXQgcGFzc2VzIHNvbWUgdGVzdC48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9maXJzdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMsIGBmaXJzdGAgZW1pdHMgdGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIHRoZW4gY29tcGxldGVzLiBJZiBjYWxsZWQgd2l0aCBhIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLCBgZmlyc3RgXG4gKiBlbWl0cyB0aGUgZmlyc3QgdmFsdWUgb2YgdGhlIHNvdXJjZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjb25kaXRpb24uIEl0XG4gKiBtYXkgYWxzbyB0YWtlIGEgYHJlc3VsdFNlbGVjdG9yYCBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSBvdXRwdXQgdmFsdWUgZnJvbVxuICogdGhlIGlucHV0IHZhbHVlLCBhbmQgYSBgZGVmYXVsdFZhbHVlYCB0byBlbWl0IGluIGNhc2UgdGhlIHNvdXJjZSBjb21wbGV0ZXNcbiAqIGJlZm9yZSBpdCBpcyBhYmxlIHRvIGVtaXQgYSB2YWxpZCB2YWx1ZS4gVGhyb3dzIGFuIGVycm9yIGlmIGBkZWZhdWx0VmFsdWVgXG4gKiB3YXMgbm90IHByb3ZpZGVkIGFuZCBhIG1hdGNoaW5nIGVsZW1lbnQgaXMgbm90IGZvdW5kLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVtaXQgb25seSB0aGUgZmlyc3QgY2xpY2sgdGhhdCBoYXBwZW5zIG9uIHRoZSBET008L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy5maXJzdCgpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0cyB0aGUgZmlyc3QgY2xpY2sgdGhhdCBoYXBwZW5zIG9uIGEgRElWPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3MuZmlyc3QoZXYgPT4gZXYudGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgZmlsdGVyfVxuICogQHNlZSB7QGxpbmsgZmluZH1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHRocm93cyB7RW1wdHlFcnJvcn0gRGVsaXZlcnMgYW4gRW1wdHlFcnJvciB0byB0aGUgT2JzZXJ2ZXIncyBgZXJyb3JgXG4gKiBjYWxsYmFjayBpZiB0aGUgT2JzZXJ2YWJsZSBjb21wbGV0ZXMgYmVmb3JlIGFueSBgbmV4dGAgbm90aWZpY2F0aW9uIHdhcyBzZW50LlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogT2JzZXJ2YWJsZTxUPik6IGJvb2xlYW59IFtwcmVkaWNhdGVdXG4gKiBBbiBvcHRpb25hbCBmdW5jdGlvbiBjYWxsZWQgd2l0aCBlYWNoIGl0ZW0gdG8gdGVzdCBmb3IgY29uZGl0aW9uIG1hdGNoaW5nLlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IFJ9IFtyZXN1bHRTZWxlY3Rvcl0gQSBmdW5jdGlvbiB0b1xuICogcHJvZHVjZSB0aGUgdmFsdWUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZXNcbiAqIGFuZCB0aGUgaW5kaWNlcyBvZiB0aGUgc291cmNlIE9ic2VydmFibGUuIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXNcbiAqIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYHZhbHVlYDogdGhlIHZhbHVlIHRoYXQgd2FzIGVtaXR0ZWQgb24gdGhlIHNvdXJjZS5cbiAqIC0gYGluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgc291cmNlLlxuICogQHBhcmFtIHtSfSBbZGVmYXVsdFZhbHVlXSBUaGUgZGVmYXVsdCB2YWx1ZSBlbWl0dGVkIGluIGNhc2Ugbm8gdmFsaWQgdmFsdWVcbiAqIHdhcyBmb3VuZCBvbiB0aGUgc291cmNlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUfFI+fSBBbiBPYnNlcnZhYmxlIG9mIHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGVcbiAqIGNvbmRpdGlvbi5cbiAqIEBtZXRob2QgZmlyc3RcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGZpcnN0KHByZWRpY2F0ZSwgcmVzdWx0U2VsZWN0b3IsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRmlyc3RPcGVyYXRvcihwcmVkaWNhdGUsIHJlc3VsdFNlbGVjdG9yLCBkZWZhdWx0VmFsdWUsIHNvdXJjZSkpOyB9O1xufVxuZXhwb3J0cy5maXJzdCA9IGZpcnN0O1xudmFyIEZpcnN0T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZpcnN0T3BlcmF0b3IocHJlZGljYXRlLCByZXN1bHRTZWxlY3RvciwgZGVmYXVsdFZhbHVlLCBzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0b3IgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cbiAgICBGaXJzdE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEZpcnN0U3Vic2NyaWJlcihvYnNlcnZlciwgdGhpcy5wcmVkaWNhdGUsIHRoaXMucmVzdWx0U2VsZWN0b3IsIHRoaXMuZGVmYXVsdFZhbHVlLCB0aGlzLnNvdXJjZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEZpcnN0T3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBGaXJzdFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGaXJzdFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmlyc3RTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcmVkaWNhdGUsIHJlc3VsdFNlbGVjdG9yLCBkZWZhdWx0VmFsdWUsIHNvdXJjZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHRoaXMuaGFzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VtaXR0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgRmlyc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdHJ5UHJlZGljYXRlKHZhbHVlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KHZhbHVlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZpcnN0U3Vic2NyaWJlci5wcm90b3R5cGUuX3RyeVByZWRpY2F0ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucHJlZGljYXRlKHZhbHVlLCBpbmRleCwgdGhpcy5zb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KHZhbHVlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEZpcnN0U3Vic2NyaWJlci5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLnJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgICAgICB0aGlzLl90cnlSZXN1bHRTZWxlY3Rvcih2YWx1ZSwgaW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VtaXRGaW5hbCh2YWx1ZSk7XG4gICAgfTtcbiAgICBGaXJzdFN1YnNjcmliZXIucHJvdG90eXBlLl90cnlSZXN1bHRTZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0b3IodmFsdWUsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1pdEZpbmFsKHJlc3VsdCk7XG4gICAgfTtcbiAgICBGaXJzdFN1YnNjcmliZXIucHJvdG90eXBlLl9lbWl0RmluYWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKCF0aGlzLl9lbWl0dGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRmlyc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGlmICghdGhpcy5oYXNDb21wbGV0ZWQgJiYgdHlwZW9mIHRoaXMuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZGVzdGluYXRpb24ubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IobmV3IEVtcHR5RXJyb3JfMS5FbXB0eUVycm9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEZpcnN0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaXB0aW9uJyk7XG52YXIgT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vT2JzZXJ2YWJsZScpO1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoJy4uL1N1YmplY3QnKTtcbnZhciBNYXBfMSA9IHJlcXVpcmUoJy4uL3V0aWwvTWFwJyk7XG52YXIgRmFzdE1hcF8xID0gcmVxdWlyZSgnLi4vdXRpbC9GYXN0TWFwJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBHcm91cHMgdGhlIGl0ZW1zIGVtaXR0ZWQgYnkgYW4gT2JzZXJ2YWJsZSBhY2NvcmRpbmcgdG8gYSBzcGVjaWZpZWQgY3JpdGVyaW9uLFxuICogYW5kIGVtaXRzIHRoZXNlIGdyb3VwZWQgaXRlbXMgYXMgYEdyb3VwZWRPYnNlcnZhYmxlc2AsIG9uZVxuICoge0BsaW5rIEdyb3VwZWRPYnNlcnZhYmxlfSBwZXIgZ3JvdXAuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9ncm91cEJ5LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkdyb3VwIG9iamVjdHMgYnkgaWQgYW5kIHJldHVybiBhcyBhcnJheTwvY2FwdGlvbj5cbiAqIE9ic2VydmFibGUub2Y8T2JqPih7aWQ6IDEsIG5hbWU6ICdhemUxJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAyLCBuYW1lOiAnc2YyJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAyLCBuYW1lOiAnZGcyJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAxLCBuYW1lOiAnZXJnMSd9LFxuICogICAgICAgICAgICAgICAgICAgIHtpZDogMSwgbmFtZTogJ2RmMSd9LFxuICogICAgICAgICAgICAgICAgICAgIHtpZDogMiwgbmFtZTogJ3NmcWZiMid9LFxuICogICAgICAgICAgICAgICAgICAgIHtpZDogMywgbmFtZTogJ3FmczMnfSxcbiAqICAgICAgICAgICAgICAgICAgICB7aWQ6IDIsIG5hbWU6ICdxc2dxc2ZnMid9XG4gKiAgICAgKVxuICogICAgIC5ncm91cEJ5KHAgPT4gcC5pZClcbiAqICAgICAuZmxhdE1hcCggKGdyb3VwJCkgPT4gZ3JvdXAkLnJlZHVjZSgoYWNjLCBjdXIpID0+IFsuLi5hY2MsIGN1cl0sIFtdKSlcbiAqICAgICAuc3Vic2NyaWJlKHAgPT4gY29uc29sZS5sb2cocCkpO1xuICpcbiAqIC8vIGRpc3BsYXlzOlxuICogLy8gWyB7IGlkOiAxLCBuYW1lOiAnYXplMScgfSxcbiAqIC8vICAgeyBpZDogMSwgbmFtZTogJ2VyZzEnIH0sXG4gKiAvLyAgIHsgaWQ6IDEsIG5hbWU6ICdkZjEnIH0gXVxuICogLy9cbiAqIC8vIFsgeyBpZDogMiwgbmFtZTogJ3NmMicgfSxcbiAqIC8vICAgeyBpZDogMiwgbmFtZTogJ2RnMicgfSxcbiAqIC8vICAgeyBpZDogMiwgbmFtZTogJ3NmcWZiMicgfSxcbiAqIC8vICAgeyBpZDogMiwgbmFtZTogJ3FzZ3FzZmcyJyB9IF1cbiAqIC8vXG4gKiAvLyBbIHsgaWQ6IDMsIG5hbWU6ICdxZnMzJyB9IF1cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5QaXZvdCBkYXRhIG9uIHRoZSBpZCBmaWVsZDwvY2FwdGlvbj5cbiAqIE9ic2VydmFibGUub2Y8T2JqPih7aWQ6IDEsIG5hbWU6ICdhemUxJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAyLCBuYW1lOiAnc2YyJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAyLCBuYW1lOiAnZGcyJ30sXG4gKiAgICAgICAgICAgICAgICAgICAge2lkOiAxLCBuYW1lOiAnZXJnMSd9LFxuICogICAgICAgICAgICAgICAgICAgIHtpZDogMSwgbmFtZTogJ2RmMSd9LFxuICogICAgICAgICAgICAgICAgICAgIHtpZDogMiwgbmFtZTogJ3NmcWZiMid9LFxuICogICAgICAgICAgICAgICAgICAgIHtpZDogMywgbmFtZTogJ3FmczEnfSxcbiAqICAgICAgICAgICAgICAgICAgICB7aWQ6IDIsIG5hbWU6ICdxc2dxc2ZnMid9XG4gKiAgICAgICAgICAgICAgICAgICApXG4gKiAgICAgLmdyb3VwQnkocCA9PiBwLmlkLCBwID0+IHAubmFtZSlcbiAqICAgICAuZmxhdE1hcCggKGdyb3VwJCkgPT4gZ3JvdXAkLnJlZHVjZSgoYWNjLCBjdXIpID0+IFsuLi5hY2MsIGN1cl0sIFtcIlwiICsgZ3JvdXAkLmtleV0pKVxuICogICAgIC5tYXAoYXJyID0+ICh7J2lkJzogcGFyc2VJbnQoYXJyWzBdKSwgJ3ZhbHVlcyc6IGFyci5zbGljZSgxKX0pKVxuICogICAgIC5zdWJzY3JpYmUocCA9PiBjb25zb2xlLmxvZyhwKSk7XG4gKlxuICogLy8gZGlzcGxheXM6XG4gKiAvLyB7IGlkOiAxLCB2YWx1ZXM6IFsgJ2F6ZTEnLCAnZXJnMScsICdkZjEnIF0gfVxuICogLy8geyBpZDogMiwgdmFsdWVzOiBbICdzZjInLCAnZGcyJywgJ3NmcWZiMicsICdxc2dxc2ZnMicgXSB9XG4gKiAvLyB7IGlkOiAzLCB2YWx1ZXM6IFsgJ3FmczEnIF0gfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQpOiBLfSBrZXlTZWxlY3RvciBBIGZ1bmN0aW9uIHRoYXQgZXh0cmFjdHMgdGhlIGtleVxuICogZm9yIGVhY2ggaXRlbS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQpOiBSfSBbZWxlbWVudFNlbGVjdG9yXSBBIGZ1bmN0aW9uIHRoYXQgZXh0cmFjdHMgdGhlXG4gKiByZXR1cm4gZWxlbWVudCBmb3IgZWFjaCBpdGVtLlxuICogQHBhcmFtIHtmdW5jdGlvbihncm91cGVkOiBHcm91cGVkT2JzZXJ2YWJsZTxLLFI+KTogT2JzZXJ2YWJsZTxhbnk+fSBbZHVyYXRpb25TZWxlY3Rvcl1cbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIE9ic2VydmFibGUgdG8gZGV0ZXJtaW5lIGhvdyBsb25nIGVhY2ggZ3JvdXAgc2hvdWxkXG4gKiBleGlzdC5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8R3JvdXBlZE9ic2VydmFibGU8SyxSPj59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0c1xuICogR3JvdXBlZE9ic2VydmFibGVzLCBlYWNoIG9mIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgdW5pcXVlIGtleSB2YWx1ZSBhbmQgZWFjaFxuICogb2Ygd2hpY2ggZW1pdHMgdGhvc2UgaXRlbXMgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgdGhhdCBzaGFyZSB0aGF0IGtleVxuICogdmFsdWUuXG4gKiBAbWV0aG9kIGdyb3VwQnlcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIGdyb3VwQnkoa2V5U2VsZWN0b3IsIGVsZW1lbnRTZWxlY3RvciwgZHVyYXRpb25TZWxlY3Rvciwgc3ViamVjdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBHcm91cEJ5T3BlcmF0b3Ioa2V5U2VsZWN0b3IsIGVsZW1lbnRTZWxlY3RvciwgZHVyYXRpb25TZWxlY3Rvciwgc3ViamVjdFNlbGVjdG9yKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuZ3JvdXBCeSA9IGdyb3VwQnk7XG52YXIgR3JvdXBCeU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBHcm91cEJ5T3BlcmF0b3Ioa2V5U2VsZWN0b3IsIGVsZW1lbnRTZWxlY3RvciwgZHVyYXRpb25TZWxlY3Rvciwgc3ViamVjdFNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMua2V5U2VsZWN0b3IgPSBrZXlTZWxlY3RvcjtcbiAgICAgICAgdGhpcy5lbGVtZW50U2VsZWN0b3IgPSBlbGVtZW50U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgICAgIHRoaXMuc3ViamVjdFNlbGVjdG9yID0gc3ViamVjdFNlbGVjdG9yO1xuICAgIH1cbiAgICBHcm91cEJ5T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBHcm91cEJ5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmtleVNlbGVjdG9yLCB0aGlzLmVsZW1lbnRTZWxlY3RvciwgdGhpcy5kdXJhdGlvblNlbGVjdG9yLCB0aGlzLnN1YmplY3RTZWxlY3RvcikpO1xuICAgIH07XG4gICAgcmV0dXJuIEdyb3VwQnlPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIEdyb3VwQnlTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoR3JvdXBCeVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gR3JvdXBCeVN1YnNjcmliZXIoZGVzdGluYXRpb24sIGtleVNlbGVjdG9yLCBlbGVtZW50U2VsZWN0b3IsIGR1cmF0aW9uU2VsZWN0b3IsIHN1YmplY3RTZWxlY3Rvcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMua2V5U2VsZWN0b3IgPSBrZXlTZWxlY3RvcjtcbiAgICAgICAgdGhpcy5lbGVtZW50U2VsZWN0b3IgPSBlbGVtZW50U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgICAgIHRoaXMuc3ViamVjdFNlbGVjdG9yID0gc3ViamVjdFNlbGVjdG9yO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IG51bGw7XG4gICAgICAgIHRoaXMuYXR0ZW1wdGVkVG9VbnN1YnNjcmliZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB9XG4gICAgR3JvdXBCeVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSB0aGlzLmtleVNlbGVjdG9yKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ3JvdXAodmFsdWUsIGtleSk7XG4gICAgfTtcbiAgICBHcm91cEJ5U3Vic2NyaWJlci5wcm90b3R5cGUuX2dyb3VwID0gZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuICAgICAgICBpZiAoIWdyb3Vwcykge1xuICAgICAgICAgICAgZ3JvdXBzID0gdGhpcy5ncm91cHMgPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IG5ldyBGYXN0TWFwXzEuRmFzdE1hcCgpIDogbmV3IE1hcF8xLk1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBncm91cCA9IGdyb3Vwcy5nZXQoa2V5KTtcbiAgICAgICAgdmFyIGVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRTZWxlY3Rvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50U2VsZWN0b3IodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICBncm91cCA9IHRoaXMuc3ViamVjdFNlbGVjdG9yID8gdGhpcy5zdWJqZWN0U2VsZWN0b3IoKSA6IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgICAgICAgICAgZ3JvdXBzLnNldChrZXksIGdyb3VwKTtcbiAgICAgICAgICAgIHZhciBncm91cGVkT2JzZXJ2YWJsZSA9IG5ldyBHcm91cGVkT2JzZXJ2YWJsZShrZXksIGdyb3VwLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChncm91cGVkT2JzZXJ2YWJsZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy5kdXJhdGlvblNlbGVjdG9yKG5ldyBHcm91cGVkT2JzZXJ2YWJsZShrZXksIGdyb3VwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGR1cmF0aW9uLnN1YnNjcmliZShuZXcgR3JvdXBEdXJhdGlvblN1YnNjcmliZXIoa2V5LCBncm91cCwgdGhpcykpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdyb3VwLmNsb3NlZCkge1xuICAgICAgICAgICAgZ3JvdXAubmV4dChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgR3JvdXBCeVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuICAgICAgICBpZiAoZ3JvdXBzKSB7XG4gICAgICAgICAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXAsIGtleSkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmVycm9yKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdyb3Vwcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICB9O1xuICAgIEdyb3VwQnlTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBncm91cHMgPSB0aGlzLmdyb3VwcztcbiAgICAgICAgaWYgKGdyb3Vwcykge1xuICAgICAgICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBncm91cC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBncm91cHMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBHcm91cEJ5U3Vic2NyaWJlci5wcm90b3R5cGUucmVtb3ZlR3JvdXAgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzLmRlbGV0ZShrZXkpO1xuICAgIH07XG4gICAgR3JvdXBCeVN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGVtcHRlZFRvVW5zdWJzY3JpYmUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBHcm91cEJ5U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgR3JvdXBEdXJhdGlvblN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhHcm91cER1cmF0aW9uU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBHcm91cER1cmF0aW9uU3Vic2NyaWJlcihrZXksIGdyb3VwLCBwYXJlbnQpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZ3JvdXApO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgR3JvdXBEdXJhdGlvblN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBHcm91cER1cmF0aW9uU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBwYXJlbnQgPSBfYS5wYXJlbnQsIGtleSA9IF9hLmtleTtcbiAgICAgICAgdGhpcy5rZXkgPSB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmVHcm91cChrZXkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gR3JvdXBEdXJhdGlvblN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vKipcbiAqIEFuIE9ic2VydmFibGUgcmVwcmVzZW50aW5nIHZhbHVlcyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgZ3JvdXAgcmVwcmVzZW50ZWQgYnlcbiAqIGEgY29tbW9uIGtleS4gVGhlIHZhbHVlcyBlbWl0dGVkIGJ5IGEgR3JvdXBlZE9ic2VydmFibGUgY29tZSBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoZSBjb21tb24ga2V5IGlzIGF2YWlsYWJsZSBhcyB0aGUgZmllbGQgYGtleWAgb24gYVxuICogR3JvdXBlZE9ic2VydmFibGUgaW5zdGFuY2UuXG4gKlxuICogQGNsYXNzIEdyb3VwZWRPYnNlcnZhYmxlPEssIFQ+XG4gKi9cbnZhciBHcm91cGVkT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEdyb3VwZWRPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEdyb3VwZWRPYnNlcnZhYmxlKGtleSwgZ3JvdXBTdWJqZWN0LCByZWZDb3VudFN1YnNjcmlwdGlvbikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuZ3JvdXBTdWJqZWN0ID0gZ3JvdXBTdWJqZWN0O1xuICAgICAgICB0aGlzLnJlZkNvdW50U3Vic2NyaXB0aW9uID0gcmVmQ291bnRTdWJzY3JpcHRpb247XG4gICAgfVxuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBHcm91cGVkT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHJlZkNvdW50U3Vic2NyaXB0aW9uID0gX2EucmVmQ291bnRTdWJzY3JpcHRpb24sIGdyb3VwU3ViamVjdCA9IF9hLmdyb3VwU3ViamVjdDtcbiAgICAgICAgaWYgKHJlZkNvdW50U3Vic2NyaXB0aW9uICYmICFyZWZDb3VudFN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5hZGQobmV3IElubmVyUmVmQ291bnRTdWJzY3JpcHRpb24ocmVmQ291bnRTdWJzY3JpcHRpb24pKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpcHRpb24uYWRkKGdyb3VwU3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIEdyb3VwZWRPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkpO1xuZXhwb3J0cy5Hcm91cGVkT2JzZXJ2YWJsZSA9IEdyb3VwZWRPYnNlcnZhYmxlO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBJbm5lclJlZkNvdW50U3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoSW5uZXJSZWZDb3VudFN1YnNjcmlwdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBJbm5lclJlZkNvdW50U3Vic2NyaXB0aW9uKHBhcmVudCkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHBhcmVudC5jb3VudCsrO1xuICAgIH1cbiAgICBJbm5lclJlZkNvdW50U3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudC5jbG9zZWQgJiYgIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICBwYXJlbnQuY291bnQgLT0gMTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQuY291bnQgPT09IDAgJiYgcGFyZW50LmF0dGVtcHRlZFRvVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIElubmVyUmVmQ291bnRTdWJzY3JpcHRpb247XG59KFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JvdXBCeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBub29wXzEgPSByZXF1aXJlKCcuLi91dGlsL25vb3AnKTtcbi8qKlxuICogSWdub3JlcyBhbGwgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIG9ubHkgcGFzc2VzIGNhbGxzIG9mIGBjb21wbGV0ZWAgb3IgYGVycm9yYC5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2lnbm9yZUVsZW1lbnRzLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIGVtcHR5IE9ic2VydmFibGUgdGhhdCBvbmx5IGNhbGxzIGBjb21wbGV0ZWBcbiAqIG9yIGBlcnJvcmAsIGJhc2VkIG9uIHdoaWNoIG9uZSBpcyBjYWxsZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBpZ25vcmVFbGVtZW50c1xuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gaWdub3JlRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlnbm9yZUVsZW1lbnRzT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBJZ25vcmVFbGVtZW50c09wZXJhdG9yKCkpO1xuICAgIH07XG59XG5leHBvcnRzLmlnbm9yZUVsZW1lbnRzID0gaWdub3JlRWxlbWVudHM7XG52YXIgSWdub3JlRWxlbWVudHNPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSWdub3JlRWxlbWVudHNPcGVyYXRvcigpIHtcbiAgICB9XG4gICAgSWdub3JlRWxlbWVudHNPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IElnbm9yZUVsZW1lbnRzU3Vic2NyaWJlcihzdWJzY3JpYmVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gSWdub3JlRWxlbWVudHNPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIElnbm9yZUVsZW1lbnRzU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKElnbm9yZUVsZW1lbnRzU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBJZ25vcmVFbGVtZW50c1N1YnNjcmliZXIoKSB7XG4gICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBJZ25vcmVFbGVtZW50c1N1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHVudXNlZCkge1xuICAgICAgICBub29wXzEubm9vcCgpO1xuICAgIH07XG4gICAgcmV0dXJuIElnbm9yZUVsZW1lbnRzU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlnbm9yZUVsZW1lbnRzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xuZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IElzRW1wdHlPcGVyYXRvcigpKTsgfTtcbn1cbmV4cG9ydHMuaXNFbXB0eSA9IGlzRW1wdHk7XG52YXIgSXNFbXB0eU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBJc0VtcHR5T3BlcmF0b3IoKSB7XG4gICAgfVxuICAgIElzRW1wdHlPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBJc0VtcHR5U3Vic2NyaWJlcihvYnNlcnZlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIElzRW1wdHlPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIElzRW1wdHlTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoSXNFbXB0eVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSXNFbXB0eVN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgIH1cbiAgICBJc0VtcHR5U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoaXNFbXB0eSkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KGlzRW1wdHkpO1xuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgSXNFbXB0eVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMubm90aWZ5Q29tcGxldGUoZmFsc2UpO1xuICAgIH07XG4gICAgSXNFbXB0eVN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlDb21wbGV0ZSh0cnVlKTtcbiAgICB9O1xuICAgIHJldHVybiBJc0VtcHR5U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzRW1wdHkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgRW1wdHlFcnJvcl8xID0gcmVxdWlyZSgnLi4vdXRpbC9FbXB0eUVycm9yJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBvbmx5IHRoZSBsYXN0IGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBJdCBvcHRpb25hbGx5IHRha2VzIGEgcHJlZGljYXRlIGZ1bmN0aW9uIGFzIGEgcGFyYW1ldGVyLCBpbiB3aGljaCBjYXNlLCByYXRoZXIgdGhhbiBlbWl0dGluZ1xuICogdGhlIGxhc3QgaXRlbSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdGhlIHJlc3VsdGluZyBPYnNlcnZhYmxlIHdpbGwgZW1pdCB0aGUgbGFzdCBpdGVtXG4gKiBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0IHNhdGlzZmllcyB0aGUgcHJlZGljYXRlLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbGFzdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAdGhyb3dzIHtFbXB0eUVycm9yfSBEZWxpdmVycyBhbiBFbXB0eUVycm9yIHRvIHRoZSBPYnNlcnZlcidzIGBlcnJvcmBcbiAqIGNhbGxiYWNrIGlmIHRoZSBPYnNlcnZhYmxlIGNvbXBsZXRlcyBiZWZvcmUgYW55IGBuZXh0YCBub3RpZmljYXRpb24gd2FzIHNlbnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcmVkaWNhdGUgLSBUaGUgY29uZGl0aW9uIGFueSBzb3VyY2UgZW1pdHRlZCBpdGVtIGhhcyB0byBzYXRpc2Z5LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIG9ubHkgdGhlIGxhc3QgaXRlbSBzYXRpc2Z5aW5nIHRoZSBnaXZlbiBjb25kaXRpb25cbiAqIGZyb20gdGhlIHNvdXJjZSwgb3IgYW4gTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBpZiBubyBzdWNoIGl0ZW1zIGFyZSBlbWl0dGVkLlxuICogQHRocm93cyAtIFRocm93cyBpZiBubyBpdGVtcyB0aGF0IG1hdGNoIHRoZSBwcmVkaWNhdGUgYXJlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBsYXN0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBsYXN0KHByZWRpY2F0ZSwgcmVzdWx0U2VsZWN0b3IsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgTGFzdE9wZXJhdG9yKHByZWRpY2F0ZSwgcmVzdWx0U2VsZWN0b3IsIGRlZmF1bHRWYWx1ZSwgc291cmNlKSk7IH07XG59XG5leHBvcnRzLmxhc3QgPSBsYXN0O1xudmFyIExhc3RPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTGFzdE9wZXJhdG9yKHByZWRpY2F0ZSwgcmVzdWx0U2VsZWN0b3IsIGRlZmF1bHRWYWx1ZSwgc291cmNlKSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB9XG4gICAgTGFzdE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IExhc3RTdWJzY3JpYmVyKG9ic2VydmVyLCB0aGlzLnByZWRpY2F0ZSwgdGhpcy5yZXN1bHRTZWxlY3RvciwgdGhpcy5kZWZhdWx0VmFsdWUsIHRoaXMuc291cmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTGFzdE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgTGFzdFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhMYXN0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBMYXN0U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJlZGljYXRlLCByZXN1bHRTZWxlY3RvciwgZGVmYXVsdFZhbHVlLCBzb3VyY2UpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9yO1xuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBMYXN0U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCsrO1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyeVByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cnlSZXN1bHRTZWxlY3Rvcih2YWx1ZSwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTGFzdFN1YnNjcmliZXIucHJvdG90eXBlLl90cnlQcmVkaWNhdGUgPSBmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIHRoaXMuc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cnlSZXN1bHRTZWxlY3Rvcih2YWx1ZSwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTGFzdFN1YnNjcmliZXIucHJvdG90eXBlLl90cnlSZXN1bHRTZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0b3IodmFsdWUsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgIH07XG4gICAgTGFzdFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQodGhpcy5sYXN0VmFsdWUpO1xuICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBMYXN0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxhc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG4vKipcbiAqIEFwcGxpZXMgYSBnaXZlbiBgcHJvamVjdGAgZnVuY3Rpb24gdG8gZWFjaCB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUsIGFuZCBlbWl0cyB0aGUgcmVzdWx0aW5nIHZhbHVlcyBhcyBhbiBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5MaWtlIFtBcnJheS5wcm90b3R5cGUubWFwKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcCksXG4gKiBpdCBwYXNzZXMgZWFjaCBzb3VyY2UgdmFsdWUgdGhyb3VnaCBhIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHRvIGdldFxuICogY29ycmVzcG9uZGluZyBvdXRwdXQgdmFsdWVzLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21hcC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBTaW1pbGFyIHRvIHRoZSB3ZWxsIGtub3duIGBBcnJheS5wcm90b3R5cGUubWFwYCBmdW5jdGlvbiwgdGhpcyBvcGVyYXRvclxuICogYXBwbGllcyBhIHByb2plY3Rpb24gdG8gZWFjaCB2YWx1ZSBhbmQgZW1pdHMgdGhhdCBwcm9qZWN0aW9uIGluIHRoZSBvdXRwdXRcbiAqIE9ic2VydmFibGUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWFwIGV2ZXJ5IGNsaWNrIHRvIHRoZSBjbGllbnRYIHBvc2l0aW9uIG9mIHRoYXQgY2xpY2s8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHBvc2l0aW9ucyA9IGNsaWNrcy5tYXAoZXYgPT4gZXYuY2xpZW50WCk7XG4gKiBwb3NpdGlvbnMuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIG1hcFRvfVxuICogQHNlZSB7QGxpbmsgcGx1Y2t9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IFJ9IHByb2plY3QgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5XG4gKiB0byBlYWNoIGB2YWx1ZWAgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuIFRoZSBgaW5kZXhgIHBhcmFtZXRlciBpc1xuICogdGhlIG51bWJlciBgaWAgZm9yIHRoZSBpLXRoIGVtaXNzaW9uIHRoYXQgaGFzIGhhcHBlbmVkIHNpbmNlIHRoZVxuICogc3Vic2NyaXB0aW9uLCBzdGFydGluZyBmcm9tIHRoZSBudW1iZXIgYDBgLlxuICogQHBhcmFtIHthbnl9IFt0aGlzQXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBkZWZpbmUgd2hhdCBgdGhpc2AgaXMgaW4gdGhlXG4gKiBgcHJvamVjdGAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFI+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUgdHJhbnNmb3JtZWQgYnkgdGhlIGdpdmVuIGBwcm9qZWN0YCBmdW5jdGlvbi5cbiAqIEBtZXRob2QgbWFwXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtYXAocHJvamVjdCwgdGhpc0FyZykge1xuICAgIHJldHVybiBmdW5jdGlvbiBtYXBPcGVyYXRpb24oc291cmNlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvamVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24uIEFyZSB5b3UgbG9va2luZyBmb3IgYG1hcFRvKClgPycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgTWFwT3BlcmF0b3IocHJvamVjdCwgdGhpc0FyZykpO1xuICAgIH07XG59XG5leHBvcnRzLm1hcCA9IG1hcDtcbnZhciBNYXBPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWFwT3BlcmF0b3IocHJvamVjdCwgdGhpc0FyZykge1xuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLnRoaXNBcmcgPSB0aGlzQXJnO1xuICAgIH1cbiAgICBNYXBPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IE1hcFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcm9qZWN0LCB0aGlzLnRoaXNBcmcpKTtcbiAgICB9O1xuICAgIHJldHVybiBNYXBPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLk1hcE9wZXJhdG9yID0gTWFwT3BlcmF0b3I7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIE1hcFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXBTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1hcFN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByb2plY3QsIHRoaXNBcmcpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICAgICAgdGhpcy50aGlzQXJnID0gdGhpc0FyZyB8fCB0aGlzO1xuICAgIH1cbiAgICAvLyBOT1RFOiBUaGlzIGxvb2tzIHVub3B0aW1pemVkLCBidXQgaXQncyBhY3R1YWxseSBwdXJwb3NlZnVsbHkgTk9UXG4gICAgLy8gdXNpbmcgdHJ5L2NhdGNoIG9wdGltaXphdGlvbnMuXG4gICAgTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucHJvamVjdC5jYWxsKHRoaXMudGhpc0FyZywgdmFsdWUsIHRoaXMuY291bnQrKyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyZXN1bHQpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hcFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG4vKipcbiAqIEVtaXRzIHRoZSBnaXZlbiBjb25zdGFudCB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgZXZlcnkgdGltZSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkxpa2Uge0BsaW5rIG1hcH0sIGJ1dCBpdCBtYXBzIGV2ZXJ5IHNvdXJjZSB2YWx1ZSB0b1xuICogdGhlIHNhbWUgb3V0cHV0IHZhbHVlIGV2ZXJ5IHRpbWUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbWFwVG8ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogVGFrZXMgYSBjb25zdGFudCBgdmFsdWVgIGFzIGFyZ3VtZW50LCBhbmQgZW1pdHMgdGhhdCB3aGVuZXZlciB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUuIEluIG90aGVyIHdvcmRzLCBpZ25vcmVzIHRoZSBhY3R1YWwgc291cmNlIHZhbHVlLFxuICogYW5kIHNpbXBseSB1c2VzIHRoZSBlbWlzc2lvbiBtb21lbnQgdG8ga25vdyB3aGVuIHRvIGVtaXQgdGhlIGdpdmVuIGB2YWx1ZWAuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWFwIGV2ZXJ5IGNsaWNrIHRvIHRoZSBzdHJpbmcgJ0hpJzwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgZ3JlZXRpbmdzID0gY2xpY2tzLm1hcFRvKCdIaScpO1xuICogZ3JlZXRpbmdzLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBtYXB9XG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBtYXAgZWFjaCBzb3VyY2UgdmFsdWUgdG8uXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGdpdmVuIGB2YWx1ZWAgZXZlcnkgdGltZVxuICogdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGVtaXRzIHNvbWV0aGluZy5cbiAqIEBtZXRob2QgbWFwVG9cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIG1hcFRvKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBNYXBUb09wZXJhdG9yKHZhbHVlKSk7IH07XG59XG5leHBvcnRzLm1hcFRvID0gbWFwVG87XG52YXIgTWFwVG9PcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWFwVG9PcGVyYXRvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIE1hcFRvT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBNYXBUb1N1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy52YWx1ZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hcFRvT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBNYXBUb1N1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNYXBUb1N1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWFwVG9TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCB2YWx1ZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgTWFwVG9TdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBNYXBUb1N1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXBUby5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBOb3RpZmljYXRpb25fMSA9IHJlcXVpcmUoJy4uL05vdGlmaWNhdGlvbicpO1xuLyoqXG4gKiBSZXByZXNlbnRzIGFsbCBvZiB0aGUgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyBgbmV4dGBcbiAqIGVtaXNzaW9ucyBtYXJrZWQgd2l0aCB0aGVpciBvcmlnaW5hbCB0eXBlcyB3aXRoaW4ge0BsaW5rIE5vdGlmaWNhdGlvbn1cbiAqIG9iamVjdHMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPldyYXBzIGBuZXh0YCwgYGVycm9yYCBhbmQgYGNvbXBsZXRlYCBlbWlzc2lvbnMgaW5cbiAqIHtAbGluayBOb3RpZmljYXRpb259IG9iamVjdHMsIGVtaXR0ZWQgYXMgYG5leHRgIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqIDwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21hdGVyaWFsaXplLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBtYXRlcmlhbGl6ZWAgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYSBgbmV4dGAgbm90aWZpY2F0aW9uIGZvciBlYWNoXG4gKiBgbmV4dGAsIGBlcnJvcmAsIG9yIGBjb21wbGV0ZWAgZW1pc3Npb24gb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBXaGVuIHRoZVxuICogc291cmNlIE9ic2VydmFibGUgZW1pdHMgYGNvbXBsZXRlYCwgdGhlIG91dHB1dCBPYnNlcnZhYmxlIHdpbGwgZW1pdCBgbmV4dGAgYXNcbiAqIGEgTm90aWZpY2F0aW9uIG9mIHR5cGUgXCJjb21wbGV0ZVwiLCBhbmQgdGhlbiBpdCB3aWxsIGVtaXQgYGNvbXBsZXRlYCBhcyB3ZWxsLlxuICogV2hlbiB0aGUgc291cmNlIE9ic2VydmFibGUgZW1pdHMgYGVycm9yYCwgdGhlIG91dHB1dCB3aWxsIGVtaXQgYG5leHRgIGFzIGFcbiAqIE5vdGlmaWNhdGlvbiBvZiB0eXBlIFwiZXJyb3JcIiwgYW5kIHRoZW4gYGNvbXBsZXRlYC5cbiAqXG4gKiBUaGlzIG9wZXJhdG9yIGlzIHVzZWZ1bCBmb3IgcHJvZHVjaW5nIG1ldGFkYXRhIG9mIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdG9cbiAqIGJlIGNvbnN1bWVkIGFzIGBuZXh0YCBlbWlzc2lvbnMuIFVzZSBpdCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gKiB7QGxpbmsgZGVtYXRlcmlhbGl6ZX0uXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q29udmVydCBhIGZhdWx0eSBPYnNlcnZhYmxlIHRvIGFuIE9ic2VydmFibGUgb2YgTm90aWZpY2F0aW9uczwvY2FwdGlvbj5cbiAqIHZhciBsZXR0ZXJzID0gUnguT2JzZXJ2YWJsZS5vZignYScsICdiJywgMTMsICdkJyk7XG4gKiB2YXIgdXBwZXJDYXNlID0gbGV0dGVycy5tYXAoeCA9PiB4LnRvVXBwZXJDYXNlKCkpO1xuICogdmFyIG1hdGVyaWFsaXplZCA9IHVwcGVyQ2FzZS5tYXRlcmlhbGl6ZSgpO1xuICogbWF0ZXJpYWxpemVkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6XG4gKiAvLyAtIE5vdGlmaWNhdGlvbiB7a2luZDogXCJOXCIsIHZhbHVlOiBcIkFcIiwgZXJyb3I6IHVuZGVmaW5lZCwgaGFzVmFsdWU6IHRydWV9XG4gKiAvLyAtIE5vdGlmaWNhdGlvbiB7a2luZDogXCJOXCIsIHZhbHVlOiBcIkJcIiwgZXJyb3I6IHVuZGVmaW5lZCwgaGFzVmFsdWU6IHRydWV9XG4gKiAvLyAtIE5vdGlmaWNhdGlvbiB7a2luZDogXCJFXCIsIHZhbHVlOiB1bmRlZmluZWQsIGVycm9yOiBUeXBlRXJyb3I6XG4gKiAvLyAgIHgudG9VcHBlckNhc2UgaXMgbm90IGEgZnVuY3Rpb24gYXQgTWFwU3Vic2NyaWJlci5sZXR0ZXJzLm1hcC54XG4gKiAvLyAgIFthcyBwcm9qZWN0XSAoaHR0cDovLzHigKYsIGhhc1ZhbHVlOiBmYWxzZX1cbiAqXG4gKiBAc2VlIHtAbGluayBOb3RpZmljYXRpb259XG4gKiBAc2VlIHtAbGluayBkZW1hdGVyaWFsaXplfVxuICpcbiAqIEByZXR1cm4ge09ic2VydmFibGU8Tm90aWZpY2F0aW9uPFQ+Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzXG4gKiB7QGxpbmsgTm90aWZpY2F0aW9ufSBvYmplY3RzIHRoYXQgd3JhcCB0aGUgb3JpZ2luYWwgZW1pc3Npb25zIGZyb20gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSB3aXRoIG1ldGFkYXRhLlxuICogQG1ldGhvZCBtYXRlcmlhbGl6ZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbWF0ZXJpYWxpemUoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1hdGVyaWFsaXplT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBNYXRlcmlhbGl6ZU9wZXJhdG9yKCkpO1xuICAgIH07XG59XG5leHBvcnRzLm1hdGVyaWFsaXplID0gbWF0ZXJpYWxpemU7XG52YXIgTWF0ZXJpYWxpemVPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWF0ZXJpYWxpemVPcGVyYXRvcigpIHtcbiAgICB9XG4gICAgTWF0ZXJpYWxpemVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IE1hdGVyaWFsaXplU3Vic2NyaWJlcihzdWJzY3JpYmVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTWF0ZXJpYWxpemVPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIE1hdGVyaWFsaXplU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE1hdGVyaWFsaXplU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNYXRlcmlhbGl6ZVN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgIH1cbiAgICBNYXRlcmlhbGl6ZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlTmV4dCh2YWx1ZSkpO1xuICAgIH07XG4gICAgTWF0ZXJpYWxpemVTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQoTm90aWZpY2F0aW9uXzEuTm90aWZpY2F0aW9uLmNyZWF0ZUVycm9yKGVycikpO1xuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgTWF0ZXJpYWxpemVTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQoTm90aWZpY2F0aW9uXzEuTm90aWZpY2F0aW9uLmNyZWF0ZUNvbXBsZXRlKCkpO1xuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hdGVyaWFsaXplU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hdGVyaWFsaXplLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcbi8qKlxuICogVGhlIE1heCBvcGVyYXRvciBvcGVyYXRlcyBvbiBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgbnVtYmVycyAob3IgaXRlbXMgdGhhdCBjYW4gYmUgY29tcGFyZWQgd2l0aCBhIHByb3ZpZGVkIGZ1bmN0aW9uKSxcbiAqIGFuZCB3aGVuIHNvdXJjZSBPYnNlcnZhYmxlIGNvbXBsZXRlcyBpdCBlbWl0cyBhIHNpbmdsZSBpdGVtOiB0aGUgaXRlbSB3aXRoIHRoZSBsYXJnZXN0IHZhbHVlLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbWF4LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkdldCB0aGUgbWF4aW1hbCB2YWx1ZSBvZiBhIHNlcmllcyBvZiBudW1iZXJzPC9jYXB0aW9uPlxuICogUnguT2JzZXJ2YWJsZS5vZig1LCA0LCA3LCAyLCA4KVxuICogICAubWF4KClcbiAqICAgLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTsgLy8gLT4gOFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlVzZSBhIGNvbXBhcmVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgbWF4aW1hbCBpdGVtPC9jYXB0aW9uPlxuICogaW50ZXJmYWNlIFBlcnNvbiB7XG4gKiAgIGFnZTogbnVtYmVyLFxuICogICBuYW1lOiBzdHJpbmdcbiAqIH1cbiAqIE9ic2VydmFibGUub2Y8UGVyc29uPih7YWdlOiA3LCBuYW1lOiAnRm9vJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAge2FnZTogNSwgbmFtZTogJ0Jhcid9LFxuICogICAgICAgICAgICAgICAgICAgICAgIHthZ2U6IDksIG5hbWU6ICdCZWVyJ30pXG4gKiAgICAgICAgICAgLm1heDxQZXJzb24+KChhOiBQZXJzb24sIGI6IFBlcnNvbikgPT4gYS5hZ2UgPCBiLmFnZSA/IC0xIDogMSlcbiAqICAgICAgICAgICAuc3Vic2NyaWJlKCh4OiBQZXJzb24pID0+IGNvbnNvbGUubG9nKHgubmFtZSkpOyAvLyAtPiAnQmVlcidcbiAqIH1cbiAqXG4gKiBAc2VlIHtAbGluayBtaW59XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmVyXSAtIE9wdGlvbmFsIGNvbXBhcmVyIGZ1bmN0aW9uIHRoYXQgaXQgd2lsbCB1c2UgaW5zdGVhZCBvZiBpdHMgZGVmYXVsdCB0byBjb21wYXJlIHRoZVxuICogdmFsdWUgb2YgdHdvIGl0ZW1zLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW0gd2l0aCB0aGUgbGFyZ2VzdCB2YWx1ZS5cbiAqIEBtZXRob2QgbWF4XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtYXgoY29tcGFyZXIpIHtcbiAgICB2YXIgbWF4ID0gKHR5cGVvZiBjb21wYXJlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgPyBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gY29tcGFyZXIoeCwgeSkgPiAwID8geCA6IHk7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCA+IHkgPyB4IDogeTsgfTtcbiAgICByZXR1cm4gcmVkdWNlXzEucmVkdWNlKG1heCk7XG59XG5leHBvcnRzLm1heCA9IG1heDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1heC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBtZXJnZV8xID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9tZXJnZScpO1xudmFyIG1lcmdlXzIgPSByZXF1aXJlKCcuLi9vYnNlcnZhYmxlL21lcmdlJyk7XG5leHBvcnRzLm1lcmdlU3RhdGljID0gbWVyZ2VfMi5tZXJnZTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIENyZWF0ZXMgYW4gb3V0cHV0IE9ic2VydmFibGUgd2hpY2ggY29uY3VycmVudGx5IGVtaXRzIGFsbCB2YWx1ZXMgZnJvbSBldmVyeVxuICogZ2l2ZW4gaW5wdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RmxhdHRlbnMgbXVsdGlwbGUgT2JzZXJ2YWJsZXMgdG9nZXRoZXIgYnkgYmxlbmRpbmdcbiAqIHRoZWlyIHZhbHVlcyBpbnRvIG9uZSBPYnNlcnZhYmxlLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21lcmdlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBtZXJnZWAgc3Vic2NyaWJlcyB0byBlYWNoIGdpdmVuIGlucHV0IE9ic2VydmFibGUgKGVpdGhlciB0aGUgc291cmNlIG9yIGFuXG4gKiBPYnNlcnZhYmxlIGdpdmVuIGFzIGFyZ3VtZW50KSwgYW5kIHNpbXBseSBmb3J3YXJkcyAod2l0aG91dCBkb2luZyBhbnlcbiAqIHRyYW5zZm9ybWF0aW9uKSBhbGwgdGhlIHZhbHVlcyBmcm9tIGFsbCB0aGUgaW5wdXQgT2JzZXJ2YWJsZXMgdG8gdGhlIG91dHB1dFxuICogT2JzZXJ2YWJsZS4gVGhlIG91dHB1dCBPYnNlcnZhYmxlIG9ubHkgY29tcGxldGVzIG9uY2UgYWxsIGlucHV0IE9ic2VydmFibGVzXG4gKiBoYXZlIGNvbXBsZXRlZC4gQW55IGVycm9yIGRlbGl2ZXJlZCBieSBhbiBpbnB1dCBPYnNlcnZhYmxlIHdpbGwgYmUgaW1tZWRpYXRlbHlcbiAqIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPk1lcmdlIHRvZ2V0aGVyIHR3byBPYnNlcnZhYmxlczogMXMgaW50ZXJ2YWwgYW5kIGNsaWNrczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgdGltZXIgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICogdmFyIGNsaWNrc09yVGltZXIgPSBjbGlja3MubWVyZ2UodGltZXIpO1xuICogY2xpY2tzT3JUaW1lci5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+TWVyZ2UgdG9nZXRoZXIgMyBPYnNlcnZhYmxlcywgYnV0IG9ubHkgMiBydW4gY29uY3VycmVudGx5PC9jYXB0aW9uPlxuICogdmFyIHRpbWVyMSA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkudGFrZSgxMCk7XG4gKiB2YXIgdGltZXIyID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgyMDAwKS50YWtlKDYpO1xuICogdmFyIHRpbWVyMyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoNTAwKS50YWtlKDEwKTtcbiAqIHZhciBjb25jdXJyZW50ID0gMjsgLy8gdGhlIGFyZ3VtZW50XG4gKiB2YXIgbWVyZ2VkID0gdGltZXIxLm1lcmdlKHRpbWVyMiwgdGltZXIzLCBjb25jdXJyZW50KTtcbiAqIG1lcmdlZC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgbWVyZ2VBbGx9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwVG99XG4gKiBAc2VlIHtAbGluayBtZXJnZVNjYW59XG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlSW5wdXR9IG90aGVyIEFuIGlucHV0IE9ic2VydmFibGUgdG8gbWVyZ2Ugd2l0aCB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBNb3JlIHRoYW4gb25lIGlucHV0IE9ic2VydmFibGVzIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbY29uY3VycmVudD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFldIE1heGltdW0gbnVtYmVyIG9mIGlucHV0XG4gKiBPYnNlcnZhYmxlcyBiZWluZyBzdWJzY3JpYmVkIHRvIGNvbmN1cnJlbnRseS5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyPW51bGxdIFRoZSBJU2NoZWR1bGVyIHRvIHVzZSBmb3IgbWFuYWdpbmdcbiAqIGNvbmN1cnJlbmN5IG9mIGlucHV0IE9ic2VydmFibGVzLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIHRoYXQgYXJlIHRoZSByZXN1bHQgb2ZcbiAqIGV2ZXJ5IGlucHV0IE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIG1lcmdlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtZXJnZSgpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0LmNhbGwobWVyZ2VfMS5tZXJnZS5hcHBseSh2b2lkIDAsIFtzb3VyY2VdLmNvbmNhdChvYnNlcnZhYmxlcykpKTsgfTtcbn1cbmV4cG9ydHMubWVyZ2UgPSBtZXJnZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIG1lcmdlTWFwXzEgPSByZXF1aXJlKCcuL21lcmdlTWFwJyk7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaWRlbnRpdHknKTtcbi8qKlxuICogQ29udmVydHMgYSBoaWdoZXItb3JkZXIgT2JzZXJ2YWJsZSBpbnRvIGEgZmlyc3Qtb3JkZXIgT2JzZXJ2YWJsZSB3aGljaFxuICogY29uY3VycmVudGx5IGRlbGl2ZXJzIGFsbCB2YWx1ZXMgdGhhdCBhcmUgZW1pdHRlZCBvbiB0aGUgaW5uZXIgT2JzZXJ2YWJsZXMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkZsYXR0ZW5zIGFuIE9ic2VydmFibGUtb2YtT2JzZXJ2YWJsZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbWVyZ2VBbGwucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYG1lcmdlQWxsYCBzdWJzY3JpYmVzIHRvIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBPYnNlcnZhYmxlcywgYWxzbyBrbm93biBhc1xuICogYSBoaWdoZXItb3JkZXIgT2JzZXJ2YWJsZS4gRWFjaCB0aW1lIGl0IG9ic2VydmVzIG9uZSBvZiB0aGVzZSBlbWl0dGVkIGlubmVyXG4gKiBPYnNlcnZhYmxlcywgaXQgc3Vic2NyaWJlcyB0byB0aGF0IGFuZCBkZWxpdmVycyBhbGwgdGhlIHZhbHVlcyBmcm9tIHRoZVxuICogaW5uZXIgT2JzZXJ2YWJsZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuIFRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBvbmx5XG4gKiBjb21wbGV0ZXMgb25jZSBhbGwgaW5uZXIgT2JzZXJ2YWJsZXMgaGF2ZSBjb21wbGV0ZWQuIEFueSBlcnJvciBkZWxpdmVyZWQgYnlcbiAqIGEgaW5uZXIgT2JzZXJ2YWJsZSB3aWxsIGJlIGltbWVkaWF0ZWx5IGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlNwYXduIGEgbmV3IGludGVydmFsIE9ic2VydmFibGUgZm9yIGVhY2ggY2xpY2sgZXZlbnQsIGFuZCBibGVuZCB0aGVpciBvdXRwdXRzIGFzIG9uZSBPYnNlcnZhYmxlPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBoaWdoZXJPcmRlciA9IGNsaWNrcy5tYXAoKGV2KSA9PiBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApKTtcbiAqIHZhciBmaXJzdE9yZGVyID0gaGlnaGVyT3JkZXIubWVyZ2VBbGwoKTtcbiAqIGZpcnN0T3JkZXIuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvdW50IGZyb20gMCB0byA5IGV2ZXJ5IHNlY29uZCBmb3IgZWFjaCBjbGljaywgYnV0IG9ubHkgYWxsb3cgMiBjb25jdXJyZW50IHRpbWVyczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgaGlnaGVyT3JkZXIgPSBjbGlja3MubWFwKChldikgPT4gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKS50YWtlKDEwKSk7XG4gKiB2YXIgZmlyc3RPcmRlciA9IGhpZ2hlck9yZGVyLm1lcmdlQWxsKDIpO1xuICogZmlyc3RPcmRlci5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUFsbH1cbiAqIEBzZWUge0BsaW5rIGNvbmNhdEFsbH1cbiAqIEBzZWUge0BsaW5rIGV4aGF1c3R9XG4gKiBAc2VlIHtAbGluayBtZXJnZX1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXBUb31cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaH1cbiAqIEBzZWUge0BsaW5rIHppcEFsbH1cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXSBNYXhpbXVtIG51bWJlciBvZiBpbm5lclxuICogT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0byBjb25jdXJyZW50bHkuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdmFsdWVzIGNvbWluZyBmcm9tIGFsbCB0aGVcbiAqIGlubmVyIE9ic2VydmFibGVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBtZXJnZUFsbFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbWVyZ2VBbGwoY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsgY29uY3VycmVudCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsgfVxuICAgIHJldHVybiBtZXJnZU1hcF8xLm1lcmdlTWFwKGlkZW50aXR5XzEuaWRlbnRpdHksIG51bGwsIGNvbmN1cnJlbnQpO1xufVxuZXhwb3J0cy5tZXJnZUFsbCA9IG1lcmdlQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBpbiB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5NYXBzIGVhY2ggdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSwgdGhlbiBmbGF0dGVucyBhbGwgb2ZcbiAqIHRoZXNlIGlubmVyIE9ic2VydmFibGVzIHVzaW5nIHtAbGluayBtZXJnZUFsbH0uPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbWVyZ2VNYXAucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgaXRlbXMgYmFzZWQgb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0aGF0IHlvdVxuICogc3VwcGx5IHRvIGVhY2ggaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgd2hlcmUgdGhhdCBmdW5jdGlvblxuICogcmV0dXJucyBhbiBPYnNlcnZhYmxlLCBhbmQgdGhlbiBtZXJnaW5nIHRob3NlIHJlc3VsdGluZyBPYnNlcnZhYmxlcyBhbmRcbiAqIGVtaXR0aW5nIHRoZSByZXN1bHRzIG9mIHRoaXMgbWVyZ2VyLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPk1hcCBhbmQgZmxhdHRlbiBlYWNoIGxldHRlciB0byBhbiBPYnNlcnZhYmxlIHRpY2tpbmcgZXZlcnkgMSBzZWNvbmQ8L2NhcHRpb24+XG4gKiB2YXIgbGV0dGVycyA9IFJ4Lk9ic2VydmFibGUub2YoJ2EnLCAnYicsICdjJyk7XG4gKiB2YXIgcmVzdWx0ID0gbGV0dGVycy5tZXJnZU1hcCh4ID0+XG4gKiAgIFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkubWFwKGkgPT4geCtpKVxuICogKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOlxuICogLy8gYTBcbiAqIC8vIGIwXG4gKiAvLyBjMFxuICogLy8gYTFcbiAqIC8vIGIxXG4gKiAvLyBjMVxuICogLy8gY29udGludWVzIHRvIGxpc3QgYSxiLGMgd2l0aCByZXNwZWN0aXZlIGFzY2VuZGluZyBpbnRlZ2Vyc1xuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcH1cbiAqIEBzZWUge0BsaW5rIGV4aGF1c3RNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZX1cbiAqIEBzZWUge0BsaW5rIG1lcmdlQWxsfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VNYXBUb31cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcH1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBULCA/aW5kZXg6IG51bWJlcik6IE9ic2VydmFibGVJbnB1dH0gcHJvamVjdCBBIGZ1bmN0aW9uXG4gKiB0aGF0LCB3aGVuIGFwcGxpZWQgdG8gYW4gaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgcmV0dXJucyBhblxuICogT2JzZXJ2YWJsZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24ob3V0ZXJWYWx1ZTogVCwgaW5uZXJWYWx1ZTogSSwgb3V0ZXJJbmRleDogbnVtYmVyLCBpbm5lckluZGV4OiBudW1iZXIpOiBhbnl9IFtyZXN1bHRTZWxlY3Rvcl1cbiAqIEEgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdmFsdWUgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZXNcbiAqIGFuZCB0aGUgaW5kaWNlcyBvZiB0aGUgc291cmNlIChvdXRlcikgZW1pc3Npb24gYW5kIHRoZSBpbm5lciBPYnNlcnZhYmxlXG4gKiBlbWlzc2lvbi4gVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmU6XG4gKiAtIGBvdXRlclZhbHVlYDogdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBzb3VyY2VcbiAqIC0gYGlubmVyVmFsdWVgOiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHByb2plY3RlZCBPYnNlcnZhYmxlXG4gKiAtIGBvdXRlckluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHNvdXJjZVxuICogLSBgaW5uZXJJbmRleGA6IHRoZSBcImluZGV4XCIgb2YgdGhlIHZhbHVlIGZyb20gdGhlIHByb2plY3RlZCBPYnNlcnZhYmxlXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXSBNYXhpbXVtIG51bWJlciBvZiBpbnB1dFxuICogT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0byBjb25jdXJyZW50bHkuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGVcbiAqIHByb2plY3Rpb24gZnVuY3Rpb24gKGFuZCB0aGUgb3B0aW9uYWwgYHJlc3VsdFNlbGVjdG9yYCkgdG8gZWFjaCBpdGVtIGVtaXR0ZWRcbiAqIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhbmQgbWVyZ2luZyB0aGUgcmVzdWx0cyBvZiB0aGUgT2JzZXJ2YWJsZXMgb2J0YWluZWRcbiAqIGZyb20gdGhpcyB0cmFuc2Zvcm1hdGlvbi5cbiAqIEBtZXRob2QgbWVyZ2VNYXBcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIG1lcmdlTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlTWFwT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRTZWxlY3RvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbnQgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgICAgIHJlc3VsdFNlbGVjdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IE1lcmdlTWFwT3BlcmF0b3IocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpKTtcbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZU1hcCA9IG1lcmdlTWFwO1xudmFyIE1lcmdlTWFwT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE1lcmdlTWFwT3BlcmF0b3IocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyB9XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0b3IgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgdGhpcy5jb25jdXJyZW50ID0gY29uY3VycmVudDtcbiAgICB9XG4gICAgTWVyZ2VNYXBPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBNZXJnZU1hcFN1YnNjcmliZXIob2JzZXJ2ZXIsIHRoaXMucHJvamVjdCwgdGhpcy5yZXN1bHRTZWxlY3RvciwgdGhpcy5jb25jdXJyZW50KSk7XG4gICAgfTtcbiAgICByZXR1cm4gTWVyZ2VNYXBPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLk1lcmdlTWFwT3BlcmF0b3IgPSBNZXJnZU1hcE9wZXJhdG9yO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBNZXJnZU1hcFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNZXJnZU1hcFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWVyZ2VNYXBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkge1xuICAgICAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuY29uY3VycmVudCA9IGNvbmN1cnJlbnQ7XG4gICAgICAgIHRoaXMuaGFzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgfVxuICAgIE1lcmdlTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlIDwgdGhpcy5jb25jdXJyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl90cnlOZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNZXJnZU1hcFN1YnNjcmliZXIucHJvdG90eXBlLl90cnlOZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXgrKztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucHJvamVjdCh2YWx1ZSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZSsrO1xuICAgICAgICB0aGlzLl9pbm5lclN1YihyZXN1bHQsIHZhbHVlLCBpbmRleCk7XG4gICAgfTtcbiAgICBNZXJnZU1hcFN1YnNjcmliZXIucHJvdG90eXBlLl9pbm5lclN1YiA9IGZ1bmN0aW9uIChpc2gsIHZhbHVlLCBpbmRleCkge1xuICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIGlzaCwgdmFsdWUsIGluZGV4KSk7XG4gICAgfTtcbiAgICBNZXJnZU1hcFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5oYXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgPT09IDAgJiYgdGhpcy5idWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lcmdlTWFwU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5UmVzdWx0U2VsZWN0b3Iob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lcmdlTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX25vdGlmeVJlc3VsdFNlbGVjdG9yID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0b3Iob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyZXN1bHQpO1xuICAgIH07XG4gICAgTWVyZ2VNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgIHRoaXMucmVtb3ZlKGlubmVyU3ViKTtcbiAgICAgICAgdGhpcy5hY3RpdmUtLTtcbiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KGJ1ZmZlci5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZSA9PT0gMCAmJiB0aGlzLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTWVyZ2VNYXBTdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbmV4cG9ydHMuTWVyZ2VNYXBTdWJzY3JpYmVyID0gTWVyZ2VNYXBTdWJzY3JpYmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VNYXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgc2FtZSBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBtdWx0aXBsZVxuICogdGltZXMgaW4gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIG1lcmdlTWFwfSwgYnV0IG1hcHMgZWFjaCB2YWx1ZSBhbHdheXNcbiAqIHRvIHRoZSBzYW1lIGlubmVyIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvbWVyZ2VNYXBUby5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBNYXBzIGVhY2ggc291cmNlIHZhbHVlIHRvIHRoZSBnaXZlbiBPYnNlcnZhYmxlIGBpbm5lck9ic2VydmFibGVgIHJlZ2FyZGxlc3NcbiAqIG9mIHRoZSBzb3VyY2UgdmFsdWUsIGFuZCB0aGVuIG1lcmdlcyB0aG9zZSByZXN1bHRpbmcgT2JzZXJ2YWJsZXMgaW50byBvbmVcbiAqIHNpbmdsZSBPYnNlcnZhYmxlLCB3aGljaCBpcyB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Rm9yIGVhY2ggY2xpY2sgZXZlbnQsIHN0YXJ0IGFuIGludGVydmFsIE9ic2VydmFibGUgdGlja2luZyBldmVyeSAxIHNlY29uZDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLm1lcmdlTWFwVG8oUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcFRvfVxuICogQHNlZSB7QGxpbmsgbWVyZ2V9XG4gKiBAc2VlIHtAbGluayBtZXJnZUFsbH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwfVxuICogQHNlZSB7QGxpbmsgbWVyZ2VTY2FufVxuICogQHNlZSB7QGxpbmsgc3dpdGNoTWFwVG99XG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlSW5wdXR9IGlubmVyT2JzZXJ2YWJsZSBBbiBPYnNlcnZhYmxlIHRvIHJlcGxhY2UgZWFjaCB2YWx1ZSBmcm9tXG4gKiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKG91dGVyVmFsdWU6IFQsIGlubmVyVmFsdWU6IEksIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKTogYW55fSBbcmVzdWx0U2VsZWN0b3JdXG4gKiBBIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHZhbHVlIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiYXNlZCBvbiB0aGUgdmFsdWVzXG4gKiBhbmQgdGhlIGluZGljZXMgb2YgdGhlIHNvdXJjZSAob3V0ZXIpIGVtaXNzaW9uIGFuZCB0aGUgaW5uZXIgT2JzZXJ2YWJsZVxuICogZW1pc3Npb24uIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlOlxuICogLSBgb3V0ZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lclZhbHVlYDogdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogLSBgb3V0ZXJJbmRleGA6IHRoZSBcImluZGV4XCIgb2YgdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBzb3VyY2VcbiAqIC0gYGlubmVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogQHBhcmFtIHtudW1iZXJ9IFtjb25jdXJyZW50PU51bWJlci5QT1NJVElWRV9JTkZJTklUWV0gTWF4aW11bSBudW1iZXIgb2YgaW5wdXRcbiAqIE9ic2VydmFibGVzIGJlaW5nIHN1YnNjcmliZWQgdG8gY29uY3VycmVudGx5LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGZyb20gdGhlIGdpdmVuXG4gKiBgaW5uZXJPYnNlcnZhYmxlYCAoYW5kIG9wdGlvbmFsbHkgdHJhbnNmb3JtZWQgdGhyb3VnaCBgcmVzdWx0U2VsZWN0b3JgKSBldmVyeVxuICogdGltZSBhIHZhbHVlIGlzIGVtaXR0ZWQgb24gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBtZXJnZU1hcFRvXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtZXJnZU1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIHJlc3VsdFNlbGVjdG9yID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBNZXJnZU1hcFRvT3BlcmF0b3IoaW5uZXJPYnNlcnZhYmxlLCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkpOyB9O1xufVxuZXhwb3J0cy5tZXJnZU1hcFRvID0gbWVyZ2VNYXBUbztcbi8vIFRPRE86IEZpZ3VyZSBvdXQgY29ycmVjdCBzaWduYXR1cmUgaGVyZTogYW4gT3BlcmF0b3I8T2JzZXJ2YWJsZTxUPiwgUj5cbi8vICAgICAgIG5lZWRzIHRvIGltcGxlbWVudCBjYWxsKG9ic2VydmVyOiBTdWJzY3JpYmVyPFI+KTogU3Vic2NyaWJlcjxPYnNlcnZhYmxlPFQ+PlxudmFyIE1lcmdlTWFwVG9PcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWVyZ2VNYXBUb09wZXJhdG9yKGlzaCwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyB9XG4gICAgICAgIHRoaXMuaXNoID0gaXNoO1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuY29uY3VycmVudCA9IGNvbmN1cnJlbnQ7XG4gICAgfVxuICAgIE1lcmdlTWFwVG9PcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBNZXJnZU1hcFRvU3Vic2NyaWJlcihvYnNlcnZlciwgdGhpcy5pc2gsIHRoaXMucmVzdWx0U2VsZWN0b3IsIHRoaXMuY29uY3VycmVudCkpO1xuICAgIH07XG4gICAgcmV0dXJuIE1lcmdlTWFwVG9PcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLk1lcmdlTWFwVG9PcGVyYXRvciA9IE1lcmdlTWFwVG9PcGVyYXRvcjtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgTWVyZ2VNYXBUb1N1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNZXJnZU1hcFRvU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNZXJnZU1hcFRvU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgaXNoLCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkge1xuICAgICAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmlzaCA9IGlzaDtcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9yO1xuICAgICAgICB0aGlzLmNvbmN1cnJlbnQgPSBjb25jdXJyZW50O1xuICAgICAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgIH1cbiAgICBNZXJnZU1hcFRvU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlIDwgdGhpcy5jb25jdXJyZW50KSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0U2VsZWN0b3IgPSB0aGlzLnJlc3VsdFNlbGVjdG9yO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCsrO1xuICAgICAgICAgICAgdmFyIGlzaCA9IHRoaXMuaXNoO1xuICAgICAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlKys7XG4gICAgICAgICAgICB0aGlzLl9pbm5lclN1Yihpc2gsIGRlc3RpbmF0aW9uLCByZXN1bHRTZWxlY3RvciwgdmFsdWUsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNZXJnZU1hcFRvU3Vic2NyaWJlci5wcm90b3R5cGUuX2lubmVyU3ViID0gZnVuY3Rpb24gKGlzaCwgZGVzdGluYXRpb24sIHJlc3VsdFNlbGVjdG9yLCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5hZGQoc3Vic2NyaWJlVG9SZXN1bHRfMS5zdWJzY3JpYmVUb1Jlc3VsdCh0aGlzLCBpc2gsIHZhbHVlLCBpbmRleCkpO1xuICAgIH07XG4gICAgTWVyZ2VNYXBUb1N1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5oYXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgPT09IDAgJiYgdGhpcy5idWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lcmdlTWFwVG9TdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHJlc3VsdFNlbGVjdG9yID0gX2EucmVzdWx0U2VsZWN0b3IsIGRlc3RpbmF0aW9uID0gX2EuZGVzdGluYXRpb247XG4gICAgICAgIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICAgICAgdGhpcy50cnlTZWxlY3RSZXN1bHQob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KGlubmVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNZXJnZU1hcFRvU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5U2VsZWN0UmVzdWx0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgcmVzdWx0U2VsZWN0b3IgPSBfYS5yZXN1bHRTZWxlY3RvciwgZGVzdGluYXRpb24gPSBfYS5kZXN0aW5hdGlvbjtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFNlbGVjdG9yKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVzdGluYXRpb24ubmV4dChyZXN1bHQpO1xuICAgIH07XG4gICAgTWVyZ2VNYXBUb1N1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgfTtcbiAgICBNZXJnZU1hcFRvU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoaW5uZXJTdWIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICB0aGlzLnJlbW92ZShpbm5lclN1Yik7XG4gICAgICAgIHRoaXMuYWN0aXZlLS07XG4gICAgICAgIGlmIChidWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fbmV4dChidWZmZXIuc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hY3RpdmUgPT09IDAgJiYgdGhpcy5oYXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE1lcmdlTWFwVG9TdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbmV4cG9ydHMuTWVyZ2VNYXBUb1N1YnNjcmliZXIgPSBNZXJnZU1hcFRvU3Vic2NyaWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlTWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciB0cnlDYXRjaF8xID0gcmVxdWlyZSgnLi4vdXRpbC90cnlDYXRjaCcpO1xudmFyIGVycm9yT2JqZWN0XzEgPSByZXF1aXJlKCcuLi91dGlsL2Vycm9yT2JqZWN0Jyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xuLyoqXG4gKiBBcHBsaWVzIGFuIGFjY3VtdWxhdG9yIGZ1bmN0aW9uIG92ZXIgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdoZXJlIHRoZVxuICogYWNjdW11bGF0b3IgZnVuY3Rpb24gaXRzZWxmIHJldHVybnMgYW4gT2JzZXJ2YWJsZSwgdGhlbiBlYWNoIGludGVybWVkaWF0ZVxuICogT2JzZXJ2YWJsZSByZXR1cm5lZCBpcyBtZXJnZWQgaW50byB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgc2Nhbn0sIGJ1dCB0aGUgT2JzZXJ2YWJsZXMgcmV0dXJuZWRcbiAqIGJ5IHRoZSBhY2N1bXVsYXRvciBhcmUgbWVyZ2VkIGludG8gdGhlIG91dGVyIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvdW50IHRoZSBudW1iZXIgb2YgY2xpY2sgZXZlbnRzPC9jYXB0aW9uPlxuICogY29uc3QgY2xpY2skID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogY29uc3Qgb25lJCA9IGNsaWNrJC5tYXBUbygxKTtcbiAqIGNvbnN0IHNlZWQgPSAwO1xuICogY29uc3QgY291bnQkID0gb25lJC5tZXJnZVNjYW4oKGFjYywgb25lKSA9PiBSeC5PYnNlcnZhYmxlLm9mKGFjYyArIG9uZSksIHNlZWQpO1xuICogY291bnQkLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiAvLyBSZXN1bHRzOlxuICogMVxuICogMlxuICogM1xuICogNFxuICogLy8gLi4uYW5kIHNvIG9uIGZvciBlYWNoIGNsaWNrXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbihhY2M6IFIsIHZhbHVlOiBUKTogT2JzZXJ2YWJsZTxSPn0gYWNjdW11bGF0b3JcbiAqIFRoZSBhY2N1bXVsYXRvciBmdW5jdGlvbiBjYWxsZWQgb24gZWFjaCBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0gc2VlZCBUaGUgaW5pdGlhbCBhY2N1bXVsYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbmN1cnJlbnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXSBNYXhpbXVtIG51bWJlciBvZlxuICogaW5wdXQgT2JzZXJ2YWJsZXMgYmVpbmcgc3Vic2NyaWJlZCB0byBjb25jdXJyZW50bHkuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFI+fSBBbiBvYnNlcnZhYmxlIG9mIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZXMuXG4gKiBAbWV0aG9kIG1lcmdlU2NhblxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gbWVyZ2VTY2FuKGFjY3VtdWxhdG9yLCBzZWVkLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBNZXJnZVNjYW5PcGVyYXRvcihhY2N1bXVsYXRvciwgc2VlZCwgY29uY3VycmVudCkpOyB9O1xufVxuZXhwb3J0cy5tZXJnZVNjYW4gPSBtZXJnZVNjYW47XG52YXIgTWVyZ2VTY2FuT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE1lcmdlU2Nhbk9wZXJhdG9yKGFjY3VtdWxhdG9yLCBzZWVkLCBjb25jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvcjtcbiAgICAgICAgdGhpcy5zZWVkID0gc2VlZDtcbiAgICAgICAgdGhpcy5jb25jdXJyZW50ID0gY29uY3VycmVudDtcbiAgICB9XG4gICAgTWVyZ2VTY2FuT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBNZXJnZVNjYW5TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuYWNjdW11bGF0b3IsIHRoaXMuc2VlZCwgdGhpcy5jb25jdXJyZW50KSk7XG4gICAgfTtcbiAgICByZXR1cm4gTWVyZ2VTY2FuT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5NZXJnZVNjYW5PcGVyYXRvciA9IE1lcmdlU2Nhbk9wZXJhdG9yO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBNZXJnZVNjYW5TdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTWVyZ2VTY2FuU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNZXJnZVNjYW5TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBhY2N1bXVsYXRvciwgYWNjLCBjb25jdXJyZW50KSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yO1xuICAgICAgICB0aGlzLmFjYyA9IGFjYztcbiAgICAgICAgdGhpcy5jb25jdXJyZW50ID0gY29uY3VycmVudDtcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgIH1cbiAgICBNZXJnZVNjYW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgPCB0aGlzLmNvbmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXgrKztcbiAgICAgICAgICAgIHZhciBpc2ggPSB0cnlDYXRjaF8xLnRyeUNhdGNoKHRoaXMuYWNjdW11bGF0b3IpKHRoaXMuYWNjLCB2YWx1ZSk7XG4gICAgICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzaCA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSsrO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lubmVyU3ViKGlzaCwgdmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNZXJnZVNjYW5TdWJzY3JpYmVyLnByb3RvdHlwZS5faW5uZXJTdWIgPSBmdW5jdGlvbiAoaXNoLCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5hZGQoc3Vic2NyaWJlVG9SZXN1bHRfMS5zdWJzY3JpYmVUb1Jlc3VsdCh0aGlzLCBpc2gsIHZhbHVlLCBpbmRleCkpO1xuICAgIH07XG4gICAgTWVyZ2VTY2FuU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gMCAmJiB0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmFjYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lcmdlU2NhblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgdGhpcy5hY2MgPSBpbm5lclZhbHVlO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgZGVzdGluYXRpb24ubmV4dChpbm5lclZhbHVlKTtcbiAgICB9O1xuICAgIE1lcmdlU2NhblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlubmVyU3ViKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgdGhpcy5yZW1vdmUoaW5uZXJTdWIpO1xuICAgICAgICB0aGlzLmFjdGl2ZS0tO1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQoYnVmZmVyLnNoaWZ0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlID09PSAwICYmIHRoaXMuaGFzQ29tcGxldGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5hY2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTWVyZ2VTY2FuU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG5leHBvcnRzLk1lcmdlU2NhblN1YnNjcmliZXIgPSBNZXJnZVNjYW5TdWJzY3JpYmVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VTY2FuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcbi8qKlxuICogVGhlIE1pbiBvcGVyYXRvciBvcGVyYXRlcyBvbiBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgbnVtYmVycyAob3IgaXRlbXMgdGhhdCBjYW4gYmUgY29tcGFyZWQgd2l0aCBhIHByb3ZpZGVkIGZ1bmN0aW9uKSxcbiAqIGFuZCB3aGVuIHNvdXJjZSBPYnNlcnZhYmxlIGNvbXBsZXRlcyBpdCBlbWl0cyBhIHNpbmdsZSBpdGVtOiB0aGUgaXRlbSB3aXRoIHRoZSBzbWFsbGVzdCB2YWx1ZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL21pbi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5HZXQgdGhlIG1pbmltYWwgdmFsdWUgb2YgYSBzZXJpZXMgb2YgbnVtYmVyczwvY2FwdGlvbj5cbiAqIFJ4Lk9ic2VydmFibGUub2YoNSwgNCwgNywgMiwgOClcbiAqICAgLm1pbigpXG4gKiAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7IC8vIC0+IDJcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Vc2UgYSBjb21wYXJlciBmdW5jdGlvbiB0byBnZXQgdGhlIG1pbmltYWwgaXRlbTwvY2FwdGlvbj5cbiAqIGludGVyZmFjZSBQZXJzb24ge1xuICogICBhZ2U6IG51bWJlcixcbiAqICAgbmFtZTogc3RyaW5nXG4gKiB9XG4gKiBPYnNlcnZhYmxlLm9mPFBlcnNvbj4oe2FnZTogNywgbmFtZTogJ0Zvbyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgIHthZ2U6IDUsIG5hbWU6ICdCYXInfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICB7YWdlOiA5LCBuYW1lOiAnQmVlcid9KVxuICogICAgICAgICAgIC5taW48UGVyc29uPiggKGE6IFBlcnNvbiwgYjogUGVyc29uKSA9PiBhLmFnZSA8IGIuYWdlID8gLTEgOiAxKVxuICogICAgICAgICAgIC5zdWJzY3JpYmUoKHg6IFBlcnNvbikgPT4gY29uc29sZS5sb2coeC5uYW1lKSk7IC8vIC0+ICdCYXInXG4gKiB9XG4gKlxuICogQHNlZSB7QGxpbmsgbWF4fVxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJlcl0gLSBPcHRpb25hbCBjb21wYXJlciBmdW5jdGlvbiB0aGF0IGl0IHdpbGwgdXNlIGluc3RlYWQgb2YgaXRzIGRlZmF1bHQgdG8gY29tcGFyZSB0aGVcbiAqIHZhbHVlIG9mIHR3byBpdGVtcy5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8Uj59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtIHdpdGggdGhlIHNtYWxsZXN0IHZhbHVlLlxuICogQG1ldGhvZCBtaW5cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIG1pbihjb21wYXJlcikge1xuICAgIHZhciBtaW4gPSAodHlwZW9mIGNvbXBhcmVyID09PSAnZnVuY3Rpb24nKVxuICAgICAgICA/IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiBjb21wYXJlcih4LCB5KSA8IDAgPyB4IDogeTsgfVxuICAgICAgICA6IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4IDwgeSA/IHggOiB5OyB9O1xuICAgIHJldHVybiByZWR1Y2VfMS5yZWR1Y2UobWluKTtcbn1cbmV4cG9ydHMubWluID0gbWluO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWluLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHRzIG9mIGludm9raW5nIGEgc3BlY2lmaWVkIHNlbGVjdG9yIG9uIGl0ZW1zXG4gKiBlbWl0dGVkIGJ5IGEgQ29ubmVjdGFibGVPYnNlcnZhYmxlIHRoYXQgc2hhcmVzIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiB0byB0aGUgdW5kZXJseWluZyBzdHJlYW0uXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9tdWx0aWNhc3QucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxTdWJqZWN0fSBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSAtIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGludGVybWVkaWF0ZSBzdWJqZWN0IHRocm91Z2hcbiAqIHdoaWNoIHRoZSBzb3VyY2Ugc2VxdWVuY2UncyBlbGVtZW50cyB3aWxsIGJlIG11bHRpY2FzdCB0byB0aGUgc2VsZWN0b3IgZnVuY3Rpb25cbiAqIG9yIFN1YmplY3QgdG8gcHVzaCBzb3VyY2UgZWxlbWVudHMgaW50by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBzZWxlY3RvciBmdW5jdGlvbiB0aGF0IGNhbiB1c2UgdGhlIG11bHRpY2FzdGVkIHNvdXJjZSBzdHJlYW1cbiAqIGFzIG1hbnkgdGltZXMgYXMgbmVlZGVkLCB3aXRob3V0IGNhdXNpbmcgbXVsdGlwbGUgc3Vic2NyaXB0aW9ucyB0byB0aGUgc291cmNlIHN0cmVhbS5cbiAqIFN1YnNjcmliZXJzIHRvIHRoZSBnaXZlbiBzb3VyY2Ugd2lsbCByZWNlaXZlIGFsbCBub3RpZmljYXRpb25zIG9mIHRoZSBzb3VyY2UgZnJvbSB0aGVcbiAqIHRpbWUgb2YgdGhlIHN1YnNjcmlwdGlvbiBmb3J3YXJkLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHRzIG9mIGludm9raW5nIHRoZSBzZWxlY3RvclxuICogb24gdGhlIGl0ZW1zIGVtaXR0ZWQgYnkgYSBgQ29ubmVjdGFibGVPYnNlcnZhYmxlYCB0aGF0IHNoYXJlcyBhIHNpbmdsZSBzdWJzY3JpcHRpb24gdG9cbiAqIHRoZSB1bmRlcmx5aW5nIHN0cmVhbS5cbiAqIEBtZXRob2QgbXVsdGljYXN0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBtdWx0aWNhc3Qoc3ViamVjdE9yU3ViamVjdEZhY3RvcnksIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG11bHRpY2FzdE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHZhciBzdWJqZWN0RmFjdG9yeTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3ViamVjdEZhY3RvcnkgPSBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1YmplY3RGYWN0b3J5ID0gZnVuY3Rpb24gc3ViamVjdEZhY3RvcnkoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YmplY3RPclN1YmplY3RGYWN0b3J5O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IE11bHRpY2FzdE9wZXJhdG9yKHN1YmplY3RGYWN0b3J5LCBzZWxlY3RvcikpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb25uZWN0YWJsZSA9IE9iamVjdC5jcmVhdGUoc291cmNlLCBDb25uZWN0YWJsZU9ic2VydmFibGVfMS5jb25uZWN0YWJsZU9ic2VydmFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgY29ubmVjdGFibGUuc291cmNlID0gc291cmNlO1xuICAgICAgICBjb25uZWN0YWJsZS5zdWJqZWN0RmFjdG9yeSA9IHN1YmplY3RGYWN0b3J5O1xuICAgICAgICByZXR1cm4gY29ubmVjdGFibGU7XG4gICAgfTtcbn1cbmV4cG9ydHMubXVsdGljYXN0ID0gbXVsdGljYXN0O1xudmFyIE11bHRpY2FzdE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNdWx0aWNhc3RPcGVyYXRvcihzdWJqZWN0RmFjdG9yeSwgc2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5zdWJqZWN0RmFjdG9yeSA9IHN1YmplY3RGYWN0b3J5O1xuICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgfVxuICAgIE11bHRpY2FzdE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yO1xuICAgICAgICB2YXIgc3ViamVjdCA9IHRoaXMuc3ViamVjdEZhY3RvcnkoKTtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHNlbGVjdG9yKHN1YmplY3QpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmFkZChzb3VyY2Uuc3Vic2NyaWJlKHN1YmplY3QpKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIHJldHVybiBNdWx0aWNhc3RPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLk11bHRpY2FzdE9wZXJhdG9yID0gTXVsdGljYXN0T3BlcmF0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aWNhc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgTm90aWZpY2F0aW9uXzEgPSByZXF1aXJlKCcuLi9Ob3RpZmljYXRpb24nKTtcbi8qKlxuICpcbiAqIFJlLWVtaXRzIGFsbCBub3RpZmljYXRpb25zIGZyb20gc291cmNlIE9ic2VydmFibGUgd2l0aCBzcGVjaWZpZWQgc2NoZWR1bGVyLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5FbnN1cmUgYSBzcGVjaWZpYyBzY2hlZHVsZXIgaXMgdXNlZCwgZnJvbSBvdXRzaWRlIG9mIGFuIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIGBvYnNlcnZlT25gIGlzIGFuIG9wZXJhdG9yIHRoYXQgYWNjZXB0cyBhIHNjaGVkdWxlciBhcyBhIGZpcnN0IHBhcmFtZXRlciwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlc2NoZWR1bGVcbiAqIG5vdGlmaWNhdGlvbnMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuIEl0IG1pZ2h0IGJlIHVzZWZ1bCwgaWYgeW91IGRvIG5vdCBoYXZlIGNvbnRyb2wgb3ZlclxuICogaW50ZXJuYWwgc2NoZWR1bGVyIG9mIGEgZ2l2ZW4gT2JzZXJ2YWJsZSwgYnV0IHdhbnQgdG8gY29udHJvbCB3aGVuIGl0cyB2YWx1ZXMgYXJlIGVtaXR0ZWQgbmV2ZXJ0aGVsZXNzLlxuICpcbiAqIFJldHVybmVkIE9ic2VydmFibGUgZW1pdHMgdGhlIHNhbWUgbm90aWZpY2F0aW9ucyAobmV4dGVkIHZhbHVlcywgY29tcGxldGUgYW5kIGVycm9yIGV2ZW50cykgYXMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLFxuICogYnV0IHJlc2NoZWR1bGVkIHdpdGggcHJvdmlkZWQgc2NoZWR1bGVyLiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IG1lYW4gdGhhdCBzb3VyY2UgT2JzZXJ2YWJsZXMgaW50ZXJuYWxcbiAqIHNjaGVkdWxlciB3aWxsIGJlIHJlcGxhY2VkIGluIGFueSB3YXkuIE9yaWdpbmFsIHNjaGVkdWxlciBzdGlsbCB3aWxsIGJlIHVzZWQsIGJ1dCB3aGVuIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBlbWl0c1xuICogbm90aWZpY2F0aW9uLCBpdCB3aWxsIGJlIGltbWVkaWF0ZWx5IHNjaGVkdWxlZCBhZ2FpbiAtIHRoaXMgdGltZSB3aXRoIHNjaGVkdWxlciBwYXNzZWQgdG8gYG9ic2VydmVPbmAuXG4gKiBBbiBhbnRpLXBhdHRlcm4gd291bGQgYmUgY2FsbGluZyBgb2JzZXJ2ZU9uYCBvbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgbG90cyBvZiB2YWx1ZXMgc3luY2hyb25vdXNseSwgdG8gc3BsaXRcbiAqIHRoYXQgZW1pc3Npb25zIGludG8gYXN5bmNocm9ub3VzIGNodW5rcy4gRm9yIHRoaXMgdG8gaGFwcGVuLCBzY2hlZHVsZXIgd291bGQgaGF2ZSB0byBiZSBwYXNzZWQgaW50byB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGRpcmVjdGx5ICh1c3VhbGx5IGludG8gdGhlIG9wZXJhdG9yIHRoYXQgY3JlYXRlcyBpdCkuIGBvYnNlcnZlT25gIHNpbXBseSBkZWxheXMgbm90aWZpY2F0aW9ucyBhXG4gKiBsaXR0bGUgYml0IG1vcmUsIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGVtaXR0ZWQgYXQgZXhwZWN0ZWQgbW9tZW50cy5cbiAqXG4gKiBBcyBhIG1hdHRlciBvZiBmYWN0LCBgb2JzZXJ2ZU9uYCBhY2NlcHRzIHNlY29uZCBwYXJhbWV0ZXIsIHdoaWNoIHNwZWNpZmllcyBpbiBtaWxsaXNlY29uZHMgd2l0aCB3aGF0IGRlbGF5IG5vdGlmaWNhdGlvbnNcbiAqIHdpbGwgYmUgZW1pdHRlZC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHtAbGluayBkZWxheX0gb3BlcmF0b3IgYW5kIGBvYnNlcnZlT25gIGlzIHRoYXQgYG9ic2VydmVPbmBcbiAqIHdpbGwgZGVsYXkgYWxsIG5vdGlmaWNhdGlvbnMgLSBpbmNsdWRpbmcgZXJyb3Igbm90aWZpY2F0aW9ucyAtIHdoaWxlIGBkZWxheWAgd2lsbCBwYXNzIHRocm91Z2ggZXJyb3JcbiAqIGZyb20gc291cmNlIE9ic2VydmFibGUgaW1tZWRpYXRlbHkgd2hlbiBpdCBpcyBlbWl0dGVkLiBJbiBnZW5lcmFsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgYGRlbGF5YCBvcGVyYXRvclxuICogZm9yIGFueSBraW5kIG9mIGRlbGF5aW5nIG9mIHZhbHVlcyBpbiB0aGUgc3RyZWFtLCB3aGlsZSB1c2luZyBgb2JzZXJ2ZU9uYCB0byBzcGVjaWZ5IHdoaWNoIHNjaGVkdWxlciBzaG91bGQgYmUgdXNlZFxuICogZm9yIG5vdGlmaWNhdGlvbiBlbWlzc2lvbnMgaW4gZ2VuZXJhbC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbnN1cmUgdmFsdWVzIGluIHN1YnNjcmliZSBhcmUgY2FsbGVkIGp1c3QgYmVmb3JlIGJyb3dzZXIgcmVwYWludC48L2NhcHRpb24+XG4gKiBjb25zdCBpbnRlcnZhbHMgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwKTsgLy8gSW50ZXJ2YWxzIGFyZSBzY2hlZHVsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGFzeW5jIHNjaGVkdWxlciBieSBkZWZhdWx0Li4uXG4gKlxuICogaW50ZXJ2YWxzXG4gKiAub2JzZXJ2ZU9uKFJ4LlNjaGVkdWxlci5hbmltYXRpb25GcmFtZSkgICAgICAgLy8gLi4uYnV0IHdlIHdpbGwgb2JzZXJ2ZSBvbiBhbmltYXRpb25GcmFtZVxuICogLnN1YnNjcmliZSh2YWwgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjaGVkdWxlciB0byBlbnN1cmUgc21vb3RoIGFuaW1hdGlvbi5cbiAqICAgc29tZURpdi5zdHlsZS5oZWlnaHQgPSB2YWwgKyAncHgnO1xuICogfSk7XG4gKlxuICogQHNlZSB7QGxpbmsgZGVsYXl9XG4gKlxuICogQHBhcmFtIHtJU2NoZWR1bGVyfSBzY2hlZHVsZXIgU2NoZWR1bGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc2NoZWR1bGUgbm90aWZpY2F0aW9ucyBmcm9tIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtkZWxheV0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IHN0YXRlcyB3aXRoIHdoYXQgZGVsYXkgZXZlcnkgbm90aWZpY2F0aW9uIHNob3VsZCBiZSByZXNjaGVkdWxlZC5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2FtZSBub3RpZmljYXRpb25zIGFzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSxcbiAqIGJ1dCB3aXRoIHByb3ZpZGVkIHNjaGVkdWxlci5cbiAqXG4gKiBAbWV0aG9kIG9ic2VydmVPblxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZU9uKHNjaGVkdWxlciwgZGVsYXkpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gb2JzZXJ2ZU9uT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBPYnNlcnZlT25PcGVyYXRvcihzY2hlZHVsZXIsIGRlbGF5KSk7XG4gICAgfTtcbn1cbmV4cG9ydHMub2JzZXJ2ZU9uID0gb2JzZXJ2ZU9uO1xudmFyIE9ic2VydmVPbk9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZlT25PcGVyYXRvcihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgIH1cbiAgICBPYnNlcnZlT25PcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IE9ic2VydmVPblN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5zY2hlZHVsZXIsIHRoaXMuZGVsYXkpKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZlT25PcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLk9ic2VydmVPbk9wZXJhdG9yID0gT2JzZXJ2ZU9uT3BlcmF0b3I7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIE9ic2VydmVPblN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPYnNlcnZlT25TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9ic2VydmVPblN1YnNjcmliZXIoZGVzdGluYXRpb24sIHNjaGVkdWxlciwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICB9XG4gICAgT2JzZXJ2ZU9uU3Vic2NyaWJlci5kaXNwYXRjaCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IGFyZy5ub3RpZmljYXRpb24sIGRlc3RpbmF0aW9uID0gYXJnLmRlc3RpbmF0aW9uO1xuICAgICAgICBub3RpZmljYXRpb24ub2JzZXJ2ZShkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIE9ic2VydmVPblN1YnNjcmliZXIucHJvdG90eXBlLnNjaGVkdWxlTWVzc2FnZSA9IGZ1bmN0aW9uIChub3RpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5hZGQodGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoT2JzZXJ2ZU9uU3Vic2NyaWJlci5kaXNwYXRjaCwgdGhpcy5kZWxheSwgbmV3IE9ic2VydmVPbk1lc3NhZ2Uobm90aWZpY2F0aW9uLCB0aGlzLmRlc3RpbmF0aW9uKSkpO1xuICAgIH07XG4gICAgT2JzZXJ2ZU9uU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZU1lc3NhZ2UoTm90aWZpY2F0aW9uXzEuTm90aWZpY2F0aW9uLmNyZWF0ZU5leHQodmFsdWUpKTtcbiAgICB9O1xuICAgIE9ic2VydmVPblN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZU1lc3NhZ2UoTm90aWZpY2F0aW9uXzEuTm90aWZpY2F0aW9uLmNyZWF0ZUVycm9yKGVycikpO1xuICAgIH07XG4gICAgT2JzZXJ2ZU9uU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlTWVzc2FnZShOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2ZU9uU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbmV4cG9ydHMuT2JzZXJ2ZU9uU3Vic2NyaWJlciA9IE9ic2VydmVPblN1YnNjcmliZXI7XG52YXIgT2JzZXJ2ZU9uTWVzc2FnZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2ZU9uTWVzc2FnZShub3RpZmljYXRpb24sIGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gbm90aWZpY2F0aW9uO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgfVxuICAgIHJldHVybiBPYnNlcnZlT25NZXNzYWdlO1xufSgpKTtcbmV4cG9ydHMuT2JzZXJ2ZU9uTWVzc2FnZSA9IE9ic2VydmVPbk1lc3NhZ2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYnNlcnZlT24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBGcm9tT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9Gcm9tT2JzZXJ2YWJsZScpO1xudmFyIGlzQXJyYXlfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNBcnJheScpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFdoZW4gYW55IG9mIHRoZSBwcm92aWRlZCBPYnNlcnZhYmxlIGVtaXRzIGFuIGNvbXBsZXRlIG9yIGVycm9yIG5vdGlmaWNhdGlvbiwgaXQgaW1tZWRpYXRlbHkgc3Vic2NyaWJlcyB0byB0aGUgbmV4dCBvbmVcbiAqIHRoYXQgd2FzIHBhc3NlZC5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+RXhlY3V0ZSBzZXJpZXMgb2YgT2JzZXJ2YWJsZXMgbm8gbWF0dGVyIHdoYXQsIGV2ZW4gaWYgaXQgbWVhbnMgc3dhbGxvd2luZyBlcnJvcnMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvb25FcnJvclJlc3VtZU5leHQucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYG9uRXJyb3JSZXN1bWVOZXh0YCBpcyBhbiBvcGVyYXRvciB0aGF0IGFjY2VwdHMgYSBzZXJpZXMgb2YgT2JzZXJ2YWJsZXMsIHByb3ZpZGVkIGVpdGhlciBkaXJlY3RseSBhc1xuICogYXJndW1lbnRzIG9yIGFzIGFuIGFycmF5LiBJZiBubyBzaW5nbGUgT2JzZXJ2YWJsZSBpcyBwcm92aWRlZCwgcmV0dXJuZWQgT2JzZXJ2YWJsZSB3aWxsIHNpbXBseSBiZWhhdmUgdGhlIHNhbWVcbiAqIGFzIHRoZSBzb3VyY2UuXG4gKlxuICogYG9uRXJyb3JSZXN1bWVOZXh0YCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBzdGFydHMgYnkgc3Vic2NyaWJpbmcgYW5kIHJlLWVtaXR0aW5nIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIFdoZW4gaXRzIHN0cmVhbSBvZiB2YWx1ZXMgZW5kcyAtIG5vIG1hdHRlciBpZiBPYnNlcnZhYmxlIGNvbXBsZXRlZCBvciBlbWl0dGVkIGFuIGVycm9yIC0gYG9uRXJyb3JSZXN1bWVOZXh0YFxuICogd2lsbCBzdWJzY3JpYmUgdG8gdGhlIGZpcnN0IE9ic2VydmFibGUgdGhhdCB3YXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBtZXRob2QuIEl0IHdpbGwgc3RhcnQgcmUtZW1pdHRpbmdcbiAqIGl0cyB2YWx1ZXMgYXMgd2VsbCBhbmQgLSBhZ2FpbiAtIHdoZW4gdGhhdCBzdHJlYW0gZW5kcywgYG9uRXJyb3JSZXN1bWVOZXh0YCB3aWxsIHByb2NlZWQgdG8gc3Vic2NyaWJpbmcgeWV0IGFub3RoZXJcbiAqIE9ic2VydmFibGUgaW4gcHJvdmlkZWQgc2VyaWVzLCBubyBtYXR0ZXIgaWYgcHJldmlvdXMgT2JzZXJ2YWJsZSBjb21wbGV0ZWQgb3IgZW5kZWQgd2l0aCBhbiBlcnJvci4gVGhpcyB3aWxsXG4gKiBiZSBoYXBwZW5pbmcgdW50aWwgdGhlcmUgaXMgbm8gbW9yZSBPYnNlcnZhYmxlcyBsZWZ0IGluIHRoZSBzZXJpZXMsIGF0IHdoaWNoIHBvaW50IHJldHVybmVkIE9ic2VydmFibGUgd2lsbFxuICogY29tcGxldGUgLSBldmVuIGlmIHRoZSBsYXN0IHN1YnNjcmliZWQgc3RyZWFtIGVuZGVkIHdpdGggYW4gZXJyb3IuXG4gKlxuICogYG9uRXJyb3JSZXN1bWVOZXh0YCBjYW4gYmUgdGhlcmVmb3JlIHRob3VnaHQgb2YgYXMgdmVyc2lvbiBvZiB7QGxpbmsgY29uY2F0fSBvcGVyYXRvciwgd2hpY2ggaXMgbW9yZSBwZXJtaXNzaXZlXG4gKiB3aGVuIGl0IGNvbWVzIHRvIHRoZSBlcnJvcnMgZW1pdHRlZCBieSBpdHMgaW5wdXQgT2JzZXJ2YWJsZXMuIFdoaWxlIGBjb25jYXRgIHN1YnNjcmliZXMgdG8gdGhlIG5leHQgT2JzZXJ2YWJsZVxuICogaW4gc2VyaWVzIG9ubHkgaWYgcHJldmlvdXMgb25lIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsIGBvbkVycm9yUmVzdW1lTmV4dGAgc3Vic2NyaWJlcyBldmVuIGlmIGl0IGVuZGVkIHdpdGhcbiAqIGFuIGVycm9yLlxuICpcbiAqIE5vdGUgdGhhdCB5b3UgZG8gbm90IGdldCBhbnkgYWNjZXNzIHRvIGVycm9ycyBlbWl0dGVkIGJ5IHRoZSBPYnNlcnZhYmxlcy4gSW4gcGFydGljdWxhciBkbyBub3RcbiAqIGV4cGVjdCB0aGVzZSBlcnJvcnMgdG8gYXBwZWFyIGluIGVycm9yIGNhbGxiYWNrIHBhc3NlZCB0byB7QGxpbmsgc3Vic2NyaWJlfS4gSWYgeW91IHdhbnQgdG8gdGFrZVxuICogc3BlY2lmaWMgYWN0aW9ucyBiYXNlZCBvbiB3aGF0IGVycm9yIHdhcyBlbWl0dGVkIGJ5IGFuIE9ic2VydmFibGUsIHlvdSBzaG91bGQgdHJ5IG91dCB7QGxpbmsgY2F0Y2h9IGluc3RlYWQuXG4gKlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlN1YnNjcmliZSB0byB0aGUgbmV4dCBPYnNlcnZhYmxlIGFmdGVyIG1hcCBmYWlsczwvY2FwdGlvbj5cbiAqIFJ4Lk9ic2VydmFibGUub2YoMSwgMiwgMywgMClcbiAqICAgLm1hcCh4ID0+IHtcbiAqICAgICAgIGlmICh4ID09PSAwKSB7IHRocm93IEVycm9yKCk7IH1cbiAgICAgICAgIHJldHVybiAxMCAvIHg7XG4gKiAgIH0pXG4gKiAgIC5vbkVycm9yUmVzdW1lTmV4dChSeC5PYnNlcnZhYmxlLm9mKDEsIDIsIDMpKVxuICogICAuc3Vic2NyaWJlKFxuICogICAgIHZhbCA9PiBjb25zb2xlLmxvZyh2YWwpLFxuICogICAgIGVyciA9PiBjb25zb2xlLmxvZyhlcnIpLCAgICAgICAgICAvLyBXaWxsIG5ldmVyIGJlIGNhbGxlZC5cbiAqICAgICAoKSA9PiBjb25zb2xlLmxvZygndGhhdFxcJ3MgaXQhJylcbiAqICAgKTtcbiAqXG4gKiAvLyBMb2dzOlxuICogLy8gMTBcbiAqIC8vIDVcbiAqIC8vIDMuMzMzMzMzMzMzMzMzMzMzNVxuICogLy8gMVxuICogLy8gMlxuICogLy8gM1xuICogLy8gXCJ0aGF0J3MgaXQhXCJcbiAqXG4gKiBAc2VlIHtAbGluayBjb25jYXR9XG4gKiBAc2VlIHtAbGluayBjYXRjaH1cbiAqXG4gKiBAcGFyYW0gey4uLk9ic2VydmFibGVJbnB1dH0gb2JzZXJ2YWJsZXMgT2JzZXJ2YWJsZXMgcGFzc2VkIGVpdGhlciBkaXJlY3RseSBvciBhcyBhbiBhcnJheS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB2YWx1ZXMgZnJvbSBzb3VyY2UgT2JzZXJ2YWJsZSwgYnV0IC0gaWYgaXQgZXJyb3JzIC0gc3Vic2NyaWJlc1xuICogdG8gdGhlIG5leHQgcGFzc2VkIE9ic2VydmFibGUgYW5kIHNvIG9uLCB1bnRpbCBpdCBjb21wbGV0ZXMgb3IgcnVucyBvdXQgb2YgT2JzZXJ2YWJsZXMuXG4gKiBAbWV0aG9kIG9uRXJyb3JSZXN1bWVOZXh0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBvbkVycm9yUmVzdW1lTmV4dCgpIHtcbiAgICB2YXIgbmV4dFNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBuZXh0U291cmNlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgaWYgKG5leHRTb3VyY2VzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5XzEuaXNBcnJheShuZXh0U291cmNlc1swXSkpIHtcbiAgICAgICAgbmV4dFNvdXJjZXMgPSBuZXh0U291cmNlc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBPbkVycm9yUmVzdW1lTmV4dE9wZXJhdG9yKG5leHRTb3VyY2VzKSk7IH07XG59XG5leHBvcnRzLm9uRXJyb3JSZXN1bWVOZXh0ID0gb25FcnJvclJlc3VtZU5leHQ7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuZnVuY3Rpb24gb25FcnJvclJlc3VtZU5leHRTdGF0aWMoKSB7XG4gICAgdmFyIG5leHRTb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgbmV4dFNvdXJjZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzb3VyY2UgPSBudWxsO1xuICAgIGlmIChuZXh0U291cmNlcy5sZW5ndGggPT09IDEgJiYgaXNBcnJheV8xLmlzQXJyYXkobmV4dFNvdXJjZXNbMF0pKSB7XG4gICAgICAgIG5leHRTb3VyY2VzID0gbmV4dFNvdXJjZXNbMF07XG4gICAgfVxuICAgIHNvdXJjZSA9IG5leHRTb3VyY2VzLnNoaWZ0KCk7XG4gICAgcmV0dXJuIG5ldyBGcm9tT2JzZXJ2YWJsZV8xLkZyb21PYnNlcnZhYmxlKHNvdXJjZSwgbnVsbCkubGlmdChuZXcgT25FcnJvclJlc3VtZU5leHRPcGVyYXRvcihuZXh0U291cmNlcykpO1xufVxuZXhwb3J0cy5vbkVycm9yUmVzdW1lTmV4dFN0YXRpYyA9IG9uRXJyb3JSZXN1bWVOZXh0U3RhdGljO1xudmFyIE9uRXJyb3JSZXN1bWVOZXh0T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9uRXJyb3JSZXN1bWVOZXh0T3BlcmF0b3IobmV4dFNvdXJjZXMpIHtcbiAgICAgICAgdGhpcy5uZXh0U291cmNlcyA9IG5leHRTb3VyY2VzO1xuICAgIH1cbiAgICBPbkVycm9yUmVzdW1lTmV4dE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMubmV4dFNvdXJjZXMpKTtcbiAgICB9O1xuICAgIHJldHVybiBPbkVycm9yUmVzdW1lTmV4dE9wZXJhdG9yO1xufSgpKTtcbnZhciBPbkVycm9yUmVzdW1lTmV4dFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPbkVycm9yUmVzdW1lTmV4dFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBuZXh0U291cmNlcykge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgdGhpcy5uZXh0U291cmNlcyA9IG5leHRTb3VyY2VzO1xuICAgIH1cbiAgICBPbkVycm9yUmVzdW1lTmV4dFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9yLCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvTmV4dFNvdXJjZSgpO1xuICAgIH07XG4gICAgT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvTmV4dFNvdXJjZSgpO1xuICAgIH07XG4gICAgT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9OZXh0U291cmNlKCk7XG4gICAgfTtcbiAgICBPbkVycm9yUmVzdW1lTmV4dFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb05leHRTb3VyY2UoKTtcbiAgICB9O1xuICAgIE9uRXJyb3JSZXN1bWVOZXh0U3Vic2NyaWJlci5wcm90b3R5cGUuc3Vic2NyaWJlVG9OZXh0U291cmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dFNvdXJjZXMuc2hpZnQoKTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgbmV4dCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uRXJyb3JSZXN1bWVOZXh0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xuLyoqXG4gKiBHcm91cHMgcGFpcnMgb2YgY29uc2VjdXRpdmUgZW1pc3Npb25zIHRvZ2V0aGVyIGFuZCBlbWl0cyB0aGVtIGFzIGFuIGFycmF5IG9mXG4gKiB0d28gdmFsdWVzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5QdXRzIHRoZSBjdXJyZW50IHZhbHVlIGFuZCBwcmV2aW91cyB2YWx1ZSB0b2dldGhlciBhc1xuICogYW4gYXJyYXksIGFuZCBlbWl0cyB0aGF0Ljwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3BhaXJ3aXNlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFRoZSBOdGggZW1pc3Npb24gZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUgd2lsbCBjYXVzZSB0aGUgb3V0cHV0IE9ic2VydmFibGVcbiAqIHRvIGVtaXQgYW4gYXJyYXkgWyhOLTEpdGgsIE50aF0gb2YgdGhlIHByZXZpb3VzIGFuZCB0aGUgY3VycmVudCB2YWx1ZSwgYXMgYVxuICogcGFpci4gRm9yIHRoaXMgcmVhc29uLCBgcGFpcndpc2VgIGVtaXRzIG9uIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnRcbiAqIGVtaXNzaW9ucyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYnV0IG5vdCBvbiB0aGUgZmlyc3QgZW1pc3Npb24sIGJlY2F1c2VcbiAqIHRoZXJlIGlzIG5vIHByZXZpb3VzIHZhbHVlIGluIHRoYXQgY2FzZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5PbiBldmVyeSBjbGljayAoc3RhcnRpbmcgZnJvbSB0aGUgc2Vjb25kKSwgZW1pdCB0aGUgcmVsYXRpdmUgZGlzdGFuY2UgdG8gdGhlIHByZXZpb3VzIGNsaWNrPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBwYWlycyA9IGNsaWNrcy5wYWlyd2lzZSgpO1xuICogdmFyIGRpc3RhbmNlID0gcGFpcnMubWFwKHBhaXIgPT4ge1xuICogICB2YXIgeDAgPSBwYWlyWzBdLmNsaWVudFg7XG4gKiAgIHZhciB5MCA9IHBhaXJbMF0uY2xpZW50WTtcbiAqICAgdmFyIHgxID0gcGFpclsxXS5jbGllbnRYO1xuICogICB2YXIgeTEgPSBwYWlyWzFdLmNsaWVudFk7XG4gKiAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coeDAgLSB4MSwgMikgKyBNYXRoLnBvdyh5MCAtIHkxLCAyKSk7XG4gKiB9KTtcbiAqIGRpc3RhbmNlLnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBidWZmZXJ9XG4gKiBAc2VlIHtAbGluayBidWZmZXJDb3VudH1cbiAqXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFycmF5PFQ+Pn0gQW4gT2JzZXJ2YWJsZSBvZiBwYWlycyAoYXMgYXJyYXlzKSBvZlxuICogY29uc2VjdXRpdmUgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBwYWlyd2lzZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gcGFpcndpc2UoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBQYWlyd2lzZU9wZXJhdG9yKCkpOyB9O1xufVxuZXhwb3J0cy5wYWlyd2lzZSA9IHBhaXJ3aXNlO1xudmFyIFBhaXJ3aXNlT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFBhaXJ3aXNlT3BlcmF0b3IoKSB7XG4gICAgfVxuICAgIFBhaXJ3aXNlT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBQYWlyd2lzZVN1YnNjcmliZXIoc3Vic2NyaWJlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFBhaXJ3aXNlT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBQYWlyd2lzZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhQYWlyd2lzZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFpcndpc2VTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5oYXNQcmV2ID0gZmFsc2U7XG4gICAgfVxuICAgIFBhaXJ3aXNlU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJldikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KFt0aGlzLnByZXYsIHZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhc1ByZXYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJldiA9IHZhbHVlO1xuICAgIH07XG4gICAgcmV0dXJuIFBhaXJ3aXNlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhaXJ3aXNlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIG5vdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9ub3QnKTtcbnZhciBmaWx0ZXJfMSA9IHJlcXVpcmUoJy4vZmlsdGVyJyk7XG4vKipcbiAqIFNwbGl0cyB0aGUgc291cmNlIE9ic2VydmFibGUgaW50byB0d28sIG9uZSB3aXRoIHZhbHVlcyB0aGF0IHNhdGlzZnkgYVxuICogcHJlZGljYXRlLCBhbmQgYW5vdGhlciB3aXRoIHZhbHVlcyB0aGF0IGRvbid0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBmaWx0ZXJ9LCBidXQgcmV0dXJucyB0d28gT2JzZXJ2YWJsZXM6XG4gKiBvbmUgbGlrZSB0aGUgb3V0cHV0IG9mIHtAbGluayBmaWx0ZXJ9LCBhbmQgdGhlIG90aGVyIHdpdGggdmFsdWVzIHRoYXQgZGlkIG5vdFxuICogcGFzcyB0aGUgY29uZGl0aW9uLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3BhcnRpdGlvbi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgcGFydGl0aW9uYCBvdXRwdXRzIGFuIGFycmF5IHdpdGggdHdvIE9ic2VydmFibGVzIHRoYXQgcGFydGl0aW9uIHRoZSB2YWx1ZXNcbiAqIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRocm91Z2ggdGhlIGdpdmVuIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLiBUaGUgZmlyc3RcbiAqIE9ic2VydmFibGUgaW4gdGhhdCBhcnJheSBlbWl0cyBzb3VyY2UgdmFsdWVzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIGFyZ3VtZW50XG4gKiByZXR1cm5zIHRydWUuIFRoZSBzZWNvbmQgT2JzZXJ2YWJsZSBlbWl0cyBzb3VyY2UgdmFsdWVzIGZvciB3aGljaCB0aGVcbiAqIHByZWRpY2F0ZSByZXR1cm5zIGZhbHNlLiBUaGUgZmlyc3QgYmVoYXZlcyBsaWtlIHtAbGluayBmaWx0ZXJ9IGFuZCB0aGUgc2Vjb25kXG4gKiBiZWhhdmVzIGxpa2Uge0BsaW5rIGZpbHRlcn0gd2l0aCB0aGUgcHJlZGljYXRlIG5lZ2F0ZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+UGFydGl0aW9uIGNsaWNrIGV2ZW50cyBpbnRvIHRob3NlIG9uIERJViBlbGVtZW50cyBhbmQgdGhvc2UgZWxzZXdoZXJlPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBwYXJ0cyA9IGNsaWNrcy5wYXJ0aXRpb24oZXYgPT4gZXYudGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKTtcbiAqIHZhciBjbGlja3NPbkRpdnMgPSBwYXJ0c1swXTtcbiAqIHZhciBjbGlja3NFbHNld2hlcmUgPSBwYXJ0c1sxXTtcbiAqIGNsaWNrc09uRGl2cy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZygnRElWIGNsaWNrZWQ6ICcsIHgpKTtcbiAqIGNsaWNrc0Vsc2V3aGVyZS5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZygnT3RoZXIgY2xpY2tlZDogJywgeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGZpbHRlcn1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKTogYm9vbGVhbn0gcHJlZGljYXRlIEEgZnVuY3Rpb24gdGhhdFxuICogZXZhbHVhdGVzIGVhY2ggdmFsdWUgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuIElmIGl0IHJldHVybnMgYHRydWVgLFxuICogdGhlIHZhbHVlIGlzIGVtaXR0ZWQgb24gdGhlIGZpcnN0IE9ic2VydmFibGUgaW4gdGhlIHJldHVybmVkIGFycmF5LCBpZlxuICogYGZhbHNlYCB0aGUgdmFsdWUgaXMgZW1pdHRlZCBvbiB0aGUgc2Vjb25kIE9ic2VydmFibGUgaW4gdGhlIGFycmF5LiBUaGVcbiAqIGBpbmRleGAgcGFyYW1ldGVyIGlzIHRoZSBudW1iZXIgYGlgIGZvciB0aGUgaS10aCBzb3VyY2UgZW1pc3Npb24gdGhhdCBoYXNcbiAqIGhhcHBlbmVkIHNpbmNlIHRoZSBzdWJzY3JpcHRpb24sIHN0YXJ0aW5nIGZyb20gdGhlIG51bWJlciBgMGAuXG4gKiBAcGFyYW0ge2FueX0gW3RoaXNBcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgYHRoaXNgXG4gKiBpbiB0aGUgYHByZWRpY2F0ZWAgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtbT2JzZXJ2YWJsZTxUPiwgT2JzZXJ2YWJsZTxUPl19IEFuIGFycmF5IHdpdGggdHdvIE9ic2VydmFibGVzOiBvbmVcbiAqIHdpdGggdmFsdWVzIHRoYXQgcGFzc2VkIHRoZSBwcmVkaWNhdGUsIGFuZCBhbm90aGVyIHdpdGggdmFsdWVzIHRoYXQgZGlkIG5vdFxuICogcGFzcyB0aGUgcHJlZGljYXRlLlxuICogQG1ldGhvZCBwYXJ0aXRpb25cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvbihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gW1xuICAgICAgICBmaWx0ZXJfMS5maWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKShzb3VyY2UpLFxuICAgICAgICBmaWx0ZXJfMS5maWx0ZXIobm90XzEubm90KHByZWRpY2F0ZSwgdGhpc0FyZykpKHNvdXJjZSlcbiAgICBdOyB9O1xufVxuZXhwb3J0cy5wYXJ0aXRpb24gPSBwYXJ0aXRpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJ0aXRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbWFwXzEgPSByZXF1aXJlKCcuL21hcCcpO1xuLyoqXG4gKiBNYXBzIGVhY2ggc291cmNlIHZhbHVlIChhbiBvYmplY3QpIHRvIGl0cyBzcGVjaWZpZWQgbmVzdGVkIHByb3BlcnR5LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5MaWtlIHtAbGluayBtYXB9LCBidXQgbWVhbnQgb25seSBmb3IgcGlja2luZyBvbmUgb2ZcbiAqIHRoZSBuZXN0ZWQgcHJvcGVydGllcyBvZiBldmVyeSBlbWl0dGVkIG9iamVjdC48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9wbHVjay5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBHaXZlbiBhIGxpc3Qgb2Ygc3RyaW5ncyBkZXNjcmliaW5nIGEgcGF0aCB0byBhbiBvYmplY3QgcHJvcGVydHksIHJldHJpZXZlc1xuICogdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWVkIG5lc3RlZCBwcm9wZXJ0eSBmcm9tIGFsbCB2YWx1ZXMgaW4gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gSWYgYSBwcm9wZXJ0eSBjYW4ndCBiZSByZXNvbHZlZCwgaXQgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAgZm9yXG4gKiB0aGF0IHZhbHVlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPk1hcCBldmVyeSBjbGljayB0byB0aGUgdGFnTmFtZSBvZiB0aGUgY2xpY2tlZCB0YXJnZXQgZWxlbWVudDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgdGFnTmFtZXMgPSBjbGlja3MucGx1Y2soJ3RhcmdldCcsICd0YWdOYW1lJyk7XG4gKiB0YWdOYW1lcy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgbWFwfVxuICpcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm9wZXJ0aWVzIFRoZSBuZXN0ZWQgcHJvcGVydGllcyB0byBwbHVjayBmcm9tIGVhY2ggc291cmNlXG4gKiB2YWx1ZSAoYW4gb2JqZWN0KS5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEEgbmV3IE9ic2VydmFibGUgb2YgcHJvcGVydHkgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSB2YWx1ZXMuXG4gKiBAbWV0aG9kIHBsdWNrXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBwbHVjaygpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHByb3BlcnRpZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbGlzdCBvZiBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG1hcF8xLm1hcChwbHVja2VyKHByb3BlcnRpZXMsIGxlbmd0aCkpKHNvdXJjZSk7IH07XG59XG5leHBvcnRzLnBsdWNrID0gcGx1Y2s7XG5mdW5jdGlvbiBwbHVja2VyKHByb3BzLCBsZW5ndGgpIHtcbiAgICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRQcm9wID0geDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHAgPSBjdXJyZW50UHJvcFtwcm9wc1tpXV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFByb3AgPSBwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudFByb3A7XG4gICAgfTtcbiAgICByZXR1cm4gbWFwcGVyO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx1Y2suanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZSgnLi4vU3ViamVjdCcpO1xudmFyIG11bHRpY2FzdF8xID0gcmVxdWlyZSgnLi9tdWx0aWNhc3QnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFJldHVybnMgYSBDb25uZWN0YWJsZU9ic2VydmFibGUsIHdoaWNoIGlzIGEgdmFyaWV0eSBvZiBPYnNlcnZhYmxlIHRoYXQgd2FpdHMgdW50aWwgaXRzIGNvbm5lY3QgbWV0aG9kIGlzIGNhbGxlZFxuICogYmVmb3JlIGl0IGJlZ2lucyBlbWl0dGluZyBpdGVtcyB0byB0aG9zZSBPYnNlcnZlcnMgdGhhdCBoYXZlIHN1YnNjcmliZWQgdG8gaXQuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9wdWJsaXNoLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBzZWxlY3RvciBmdW5jdGlvbiB3aGljaCBjYW4gdXNlIHRoZSBtdWx0aWNhc3RlZCBzb3VyY2Ugc2VxdWVuY2UgYXMgbWFueSB0aW1lc1xuICogYXMgbmVlZGVkLCB3aXRob3V0IGNhdXNpbmcgbXVsdGlwbGUgc3Vic2NyaXB0aW9ucyB0byB0aGUgc291cmNlIHNlcXVlbmNlLlxuICogU3Vic2NyaWJlcnMgdG8gdGhlIGdpdmVuIHNvdXJjZSB3aWxsIHJlY2VpdmUgYWxsIG5vdGlmaWNhdGlvbnMgb2YgdGhlIHNvdXJjZSBmcm9tIHRoZSB0aW1lIG9mIHRoZSBzdWJzY3JpcHRpb24gb24uXG4gKiBAcmV0dXJuIEEgQ29ubmVjdGFibGVPYnNlcnZhYmxlIHRoYXQgdXBvbiBjb25uZWN0aW9uIGNhdXNlcyB0aGUgc291cmNlIE9ic2VydmFibGUgdG8gZW1pdCBpdGVtcyB0byBpdHMgT2JzZXJ2ZXJzLlxuICogQG1ldGhvZCBwdWJsaXNoXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBwdWJsaXNoKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yID9cbiAgICAgICAgbXVsdGljYXN0XzEubXVsdGljYXN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpOyB9LCBzZWxlY3RvcikgOlxuICAgICAgICBtdWx0aWNhc3RfMS5tdWx0aWNhc3QobmV3IFN1YmplY3RfMS5TdWJqZWN0KCkpO1xufVxuZXhwb3J0cy5wdWJsaXNoID0gcHVibGlzaDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2guanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQmVoYXZpb3JTdWJqZWN0XzEgPSByZXF1aXJlKCcuLi9CZWhhdmlvclN1YmplY3QnKTtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoJy4vbXVsdGljYXN0Jyk7XG4vKipcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybiB7Q29ubmVjdGFibGVPYnNlcnZhYmxlPFQ+fVxuICogQG1ldGhvZCBwdWJsaXNoQmVoYXZpb3JcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hCZWhhdmlvcih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3RfMS5tdWx0aWNhc3QobmV3IEJlaGF2aW9yU3ViamVjdF8xLkJlaGF2aW9yU3ViamVjdCh2YWx1ZSkpKHNvdXJjZSk7IH07XG59XG5leHBvcnRzLnB1Ymxpc2hCZWhhdmlvciA9IHB1Ymxpc2hCZWhhdmlvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hCZWhhdmlvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBBc3luY1N1YmplY3RfMSA9IHJlcXVpcmUoJy4uL0FzeW5jU3ViamVjdCcpO1xudmFyIG11bHRpY2FzdF8xID0gcmVxdWlyZSgnLi9tdWx0aWNhc3QnKTtcbmZ1bmN0aW9uIHB1Ymxpc2hMYXN0KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3RfMS5tdWx0aWNhc3QobmV3IEFzeW5jU3ViamVjdF8xLkFzeW5jU3ViamVjdCgpKShzb3VyY2UpOyB9O1xufVxuZXhwb3J0cy5wdWJsaXNoTGFzdCA9IHB1Ymxpc2hMYXN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaExhc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUmVwbGF5U3ViamVjdF8xID0gcmVxdWlyZSgnLi4vUmVwbGF5U3ViamVjdCcpO1xudmFyIG11bHRpY2FzdF8xID0gcmVxdWlyZSgnLi9tdWx0aWNhc3QnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG5mdW5jdGlvbiBwdWJsaXNoUmVwbGF5KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNlbGVjdG9yT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikge1xuICAgIGlmIChzZWxlY3Rvck9yU2NoZWR1bGVyICYmIHR5cGVvZiBzZWxlY3Rvck9yU2NoZWR1bGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IHNlbGVjdG9yT3JTY2hlZHVsZXI7XG4gICAgfVxuICAgIHZhciBzZWxlY3RvciA9IHR5cGVvZiBzZWxlY3Rvck9yU2NoZWR1bGVyID09PSAnZnVuY3Rpb24nID8gc2VsZWN0b3JPclNjaGVkdWxlciA6IHVuZGVmaW5lZDtcbiAgICB2YXIgc3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0XzEuUmVwbGF5U3ViamVjdChidWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzY2hlZHVsZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3RfMS5tdWx0aWNhc3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3ViamVjdDsgfSwgc2VsZWN0b3IpKHNvdXJjZSk7IH07XG59XG5leHBvcnRzLnB1Ymxpc2hSZXBsYXkgPSBwdWJsaXNoUmVwbGF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaFJlcGxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBpc0FycmF5XzEgPSByZXF1aXJlKCcuLi91dGlsL2lzQXJyYXknKTtcbnZhciByYWNlXzEgPSByZXF1aXJlKCcuLi9vYnNlcnZhYmxlL3JhY2UnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIGZpcnN0IHNvdXJjZSBPYnNlcnZhYmxlIHRvIGVtaXQgYW4gaXRlbVxuICogZnJvbSB0aGUgY29tYmluYXRpb24gb2YgdGhpcyBPYnNlcnZhYmxlIGFuZCBzdXBwbGllZCBPYnNlcnZhYmxlcy5cbiAqIEBwYXJhbSB7Li4uT2JzZXJ2YWJsZXN9IC4uLm9ic2VydmFibGVzIFNvdXJjZXMgdXNlZCB0byByYWNlIGZvciB3aGljaCBPYnNlcnZhYmxlIGVtaXRzIGZpcnN0LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIG91dHB1dCBvZiB0aGUgZmlyc3QgT2JzZXJ2YWJsZSB0byBlbWl0IGFuIGl0ZW0uXG4gKiBAbWV0aG9kIHJhY2VcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHJhY2UoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiByYWNlT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgLy8gaWYgdGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gYXJyYXksIGl0IHdhcyBtb3N0IGxpa2VseSBjYWxsZWQgd2l0aFxuICAgICAgICAvLyBgcGFpcihbb2JzMSwgb2JzMiwgLi4uXSlgXG4gICAgICAgIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPT09IDEgJiYgaXNBcnJheV8xLmlzQXJyYXkob2JzZXJ2YWJsZXNbMF0pKSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlcyA9IG9ic2VydmFibGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdC5jYWxsKHJhY2VfMS5yYWNlLmFwcGx5KHZvaWQgMCwgW3NvdXJjZV0uY29uY2F0KG9ic2VydmFibGVzKSkpO1xuICAgIH07XG59XG5leHBvcnRzLnJhY2UgPSByYWNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmFjZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBzY2FuXzEgPSByZXF1aXJlKCcuL3NjYW4nKTtcbnZhciB0YWtlTGFzdF8xID0gcmVxdWlyZSgnLi90YWtlTGFzdCcpO1xudmFyIGRlZmF1bHRJZkVtcHR5XzEgPSByZXF1aXJlKCcuL2RlZmF1bHRJZkVtcHR5Jyk7XG52YXIgcGlwZV8xID0gcmVxdWlyZSgnLi4vdXRpbC9waXBlJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBBcHBsaWVzIGFuIGFjY3VtdWxhdG9yIGZ1bmN0aW9uIG92ZXIgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBhbmQgcmV0dXJucyB0aGVcbiAqIGFjY3VtdWxhdGVkIHJlc3VsdCB3aGVuIHRoZSBzb3VyY2UgY29tcGxldGVzLCBnaXZlbiBhbiBvcHRpb25hbCBzZWVkIHZhbHVlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5Db21iaW5lcyB0b2dldGhlciBhbGwgdmFsdWVzIGVtaXR0ZWQgb24gdGhlIHNvdXJjZSxcbiAqIHVzaW5nIGFuIGFjY3VtdWxhdG9yIGZ1bmN0aW9uIHRoYXQga25vd3MgaG93IHRvIGpvaW4gYSBuZXcgc291cmNlIHZhbHVlIGludG9cbiAqIHRoZSBhY2N1bXVsYXRpb24gZnJvbSB0aGUgcGFzdC48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9yZWR1Y2UucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogTGlrZVxuICogW0FycmF5LnByb3RvdHlwZS5yZWR1Y2UoKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvcmVkdWNlKSxcbiAqIGByZWR1Y2VgIGFwcGxpZXMgYW4gYGFjY3VtdWxhdG9yYCBmdW5jdGlvbiBhZ2FpbnN0IGFuIGFjY3VtdWxhdGlvbiBhbmQgZWFjaFxuICogdmFsdWUgb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIChmcm9tIHRoZSBwYXN0KSB0byByZWR1Y2UgaXQgdG8gYSBzaW5nbGVcbiAqIHZhbHVlLCBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS4gTm90ZSB0aGF0IGByZWR1Y2VgIHdpbGwgb25seSBlbWl0XG4gKiBvbmUgdmFsdWUsIG9ubHkgd2hlbiB0aGUgc291cmNlIE9ic2VydmFibGUgY29tcGxldGVzLiBJdCBpcyBlcXVpdmFsZW50IHRvXG4gKiBhcHBseWluZyBvcGVyYXRvciB7QGxpbmsgc2Nhbn0gZm9sbG93ZWQgYnkgb3BlcmF0b3Ige0BsaW5rIGxhc3R9LlxuICpcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGFwcGxpZXMgYSBzcGVjaWZpZWQgYGFjY3VtdWxhdG9yYCBmdW5jdGlvbiB0byBlYWNoXG4gKiBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJZiBhIGBzZWVkYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZW5cbiAqIHRoYXQgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgYWNjdW11bGF0b3IuIElmIG5vIHNlZWRcbiAqIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGZpcnN0IGl0ZW0gb2YgdGhlIHNvdXJjZSBpcyB1c2VkIGFzIHRoZSBzZWVkLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvdW50IHRoZSBudW1iZXIgb2YgY2xpY2sgZXZlbnRzIHRoYXQgaGFwcGVuZWQgaW4gNSBzZWNvbmRzPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrc0luRml2ZVNlY29uZHMgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJylcbiAqICAgLnRha2VVbnRpbChSeC5PYnNlcnZhYmxlLmludGVydmFsKDUwMDApKTtcbiAqIHZhciBvbmVzID0gY2xpY2tzSW5GaXZlU2Vjb25kcy5tYXBUbygxKTtcbiAqIHZhciBzZWVkID0gMDtcbiAqIHZhciBjb3VudCA9IG9uZXMucmVkdWNlKChhY2MsIG9uZSkgPT4gYWNjICsgb25lLCBzZWVkKTtcbiAqIGNvdW50LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBjb3VudH1cbiAqIEBzZWUge0BsaW5rIGV4cGFuZH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqIEBzZWUge0BsaW5rIHNjYW59XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbihhY2M6IFIsIHZhbHVlOiBULCBpbmRleDogbnVtYmVyKTogUn0gYWNjdW11bGF0b3IgVGhlIGFjY3VtdWxhdG9yIGZ1bmN0aW9uXG4gKiBjYWxsZWQgb24gZWFjaCBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0ge1J9IFtzZWVkXSBUaGUgaW5pdGlhbCBhY2N1bXVsYXRpb24gdmFsdWUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFI+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYSBzaW5nbGUgdmFsdWUgdGhhdCBpcyB0aGVcbiAqIHJlc3VsdCBvZiBhY2N1bXVsYXRpbmcgdGhlIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2QgcmVkdWNlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiByZWR1Y2UoYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICAvLyBwcm92aWRpbmcgYSBzZWVkIG9mIGB1bmRlZmluZWRgICpzaG91bGQqIGJlIHZhbGlkIGFuZCB0cmlnZ2VyXG4gICAgLy8gaGFzU2VlZCEgc28gZG9uJ3QgdXNlIGBzZWVkICE9PSB1bmRlZmluZWRgIGNoZWNrcyFcbiAgICAvLyBGb3IgdGhpcyByZWFzb24sIHdlIGhhdmUgdG8gY2hlY2sgaXQgaGVyZSBhdCB0aGUgb3JpZ2luYWwgY2FsbCBzaXRlXG4gICAgLy8gb3RoZXJ3aXNlIGluc2lkZSBPcGVyYXRvci9TdWJzY3JpYmVyIHdlIHdvbid0IGtub3cgaWYgYHVuZGVmaW5lZGBcbiAgICAvLyBtZWFucyB0aGV5IGRpZG4ndCBwcm92aWRlIGFueXRoaW5nIG9yIGlmIHRoZXkgbGl0ZXJhbGx5IHByb3ZpZGVkIGB1bmRlZmluZWRgXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmVkdWNlT3BlcmF0b3JGdW5jdGlvbldpdGhTZWVkKHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBpcGVfMS5waXBlKHNjYW5fMS5zY2FuKGFjY3VtdWxhdG9yLCBzZWVkKSwgdGFrZUxhc3RfMS50YWtlTGFzdCgxKSwgZGVmYXVsdElmRW1wdHlfMS5kZWZhdWx0SWZFbXB0eShzZWVkKSkoc291cmNlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlZHVjZU9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBwaXBlXzEucGlwZShzY2FuXzEuc2NhbihmdW5jdGlvbiAoYWNjLCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcihhY2MsIHZhbHVlLCBpbmRleCArIDEpO1xuICAgICAgICB9KSwgdGFrZUxhc3RfMS50YWtlTGFzdCgxKSkoc291cmNlKTtcbiAgICB9O1xufVxuZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1Y2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG5mdW5jdGlvbiByZWZDb3VudCgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVmQ291bnRPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFJlZkNvdW50T3BlcmF0b3Ioc291cmNlKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMucmVmQ291bnQgPSByZWZDb3VudDtcbnZhciBSZWZDb3VudE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZWZDb3VudE9wZXJhdG9yKGNvbm5lY3RhYmxlKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGFibGUgPSBjb25uZWN0YWJsZTtcbiAgICB9XG4gICAgUmVmQ291bnRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIGNvbm5lY3RhYmxlID0gdGhpcy5jb25uZWN0YWJsZTtcbiAgICAgICAgY29ubmVjdGFibGUuX3JlZkNvdW50Kys7XG4gICAgICAgIHZhciByZWZDb3VudGVyID0gbmV3IFJlZkNvdW50U3Vic2NyaWJlcihzdWJzY3JpYmVyLCBjb25uZWN0YWJsZSk7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKHJlZkNvdW50ZXIpO1xuICAgICAgICBpZiAoIXJlZkNvdW50ZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICByZWZDb3VudGVyLmNvbm5lY3Rpb24gPSBjb25uZWN0YWJsZS5jb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIHJldHVybiBSZWZDb3VudE9wZXJhdG9yO1xufSgpKTtcbnZhciBSZWZDb3VudFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSZWZDb3VudFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVmQ291bnRTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjb25uZWN0YWJsZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuY29ubmVjdGFibGUgPSBjb25uZWN0YWJsZTtcbiAgICB9XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFJlZkNvdW50U3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29ubmVjdGFibGUgPSB0aGlzLmNvbm5lY3RhYmxlO1xuICAgICAgICBpZiAoIWNvbm5lY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29ubmVjdGFibGUgPSBudWxsO1xuICAgICAgICB2YXIgcmVmQ291bnQgPSBjb25uZWN0YWJsZS5fcmVmQ291bnQ7XG4gICAgICAgIGlmIChyZWZDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbm5lY3RhYmxlLl9yZWZDb3VudCA9IHJlZkNvdW50IC0gMTtcbiAgICAgICAgaWYgKHJlZkNvdW50ID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLy9cbiAgICAgICAgLy8gQ29tcGFyZSB0aGUgbG9jYWwgUmVmQ291bnRTdWJzY3JpYmVyJ3MgY29ubmVjdGlvbiBTdWJzY3JpcHRpb24gdG8gdGhlXG4gICAgICAgIC8vIGNvbm5lY3Rpb24gU3Vic2NyaXB0aW9uIG9uIHRoZSBzaGFyZWQgQ29ubmVjdGFibGVPYnNlcnZhYmxlLiBJbiBjYXNlc1xuICAgICAgICAvLyB3aGVyZSB0aGUgQ29ubmVjdGFibGVPYnNlcnZhYmxlIHNvdXJjZSBzeW5jaHJvbm91c2x5IGVtaXRzIHZhbHVlcywgYW5kXG4gICAgICAgIC8vIHRoZSBSZWZDb3VudFN1YnNjcmliZXIncyBkb3duc3RyZWFtIE9ic2VydmVycyBzeW5jaHJvbm91c2x5IHVuc3Vic2NyaWJlLFxuICAgICAgICAvLyBleGVjdXRpb24gY29udGludWVzIHRvIGhlcmUgYmVmb3JlIHRoZSBSZWZDb3VudE9wZXJhdG9yIGhhcyBhIGNoYW5jZSB0b1xuICAgICAgICAvLyBzdXBwbHkgdGhlIFJlZkNvdW50U3Vic2NyaWJlciB3aXRoIHRoZSBzaGFyZWQgY29ubmVjdGlvbiBTdWJzY3JpcHRpb24uXG4gICAgICAgIC8vIEZvciBleGFtcGxlOlxuICAgICAgICAvLyBgYGBcbiAgICAgICAgLy8gT2JzZXJ2YWJsZS5yYW5nZSgwLCAxMClcbiAgICAgICAgLy8gICAucHVibGlzaCgpXG4gICAgICAgIC8vICAgLnJlZkNvdW50KClcbiAgICAgICAgLy8gICAudGFrZSg1KVxuICAgICAgICAvLyAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gYGBgXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGFjY291bnQgZm9yIHRoaXMgY2FzZSwgUmVmQ291bnRTdWJzY3JpYmVyIHNob3VsZCBvbmx5IGRpc3Bvc2VcbiAgICAgICAgLy8gdGhlIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSdzIHNoYXJlZCBjb25uZWN0aW9uIFN1YnNjcmlwdGlvbiBpZiB0aGVcbiAgICAgICAgLy8gY29ubmVjdGlvbiBTdWJzY3JpcHRpb24gZXhpc3RzLCAqYW5kKiBlaXRoZXI6XG4gICAgICAgIC8vICAgYS4gUmVmQ291bnRTdWJzY3JpYmVyIGRvZXNuJ3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgc2hhcmVkIGNvbm5lY3Rpb25cbiAgICAgICAgLy8gICAgICBTdWJzY3JpcHRpb24geWV0LCBvcixcbiAgICAgICAgLy8gICBiLiBSZWZDb3VudFN1YnNjcmliZXIncyBjb25uZWN0aW9uIFN1YnNjcmlwdGlvbiByZWZlcmVuY2UgaXMgaWRlbnRpY2FsXG4gICAgICAgIC8vICAgICAgdG8gdGhlIHNoYXJlZCBjb25uZWN0aW9uIFN1YnNjcmlwdGlvblxuICAgICAgICAvLy9cbiAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb247XG4gICAgICAgIHZhciBzaGFyZWRDb25uZWN0aW9uID0gY29ubmVjdGFibGUuX2Nvbm5lY3Rpb247XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgIGlmIChzaGFyZWRDb25uZWN0aW9uICYmICghY29ubmVjdGlvbiB8fCBzaGFyZWRDb25uZWN0aW9uID09PSBjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgc2hhcmVkQ29ubmVjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gUmVmQ291bnRTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmQ291bnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgRW1wdHlPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9vYnNlcnZhYmxlL0VtcHR5T2JzZXJ2YWJsZScpO1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCByZXBlYXRzIHRoZSBzdHJlYW0gb2YgaXRlbXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYXQgbW9zdCBjb3VudCB0aW1lcy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3JlcGVhdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvdW50XSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBpdGVtcyBhcmUgcmVwZWF0ZWQsIGEgY291bnQgb2YgMCB3aWxsIHlpZWxkXG4gKiBhbiBlbXB0eSBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IHJlcGVhdHMgdGhlIHN0cmVhbSBvZiBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhdCBtb3N0XG4gKiBjb3VudCB0aW1lcy5cbiAqIEBtZXRob2QgcmVwZWF0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgICBpZiAoY291bnQgPT09IHZvaWQgMCkgeyBjb3VudCA9IC0xOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVtcHR5T2JzZXJ2YWJsZV8xLkVtcHR5T2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdW50IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBSZXBlYXRPcGVyYXRvcigtMSwgc291cmNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFJlcGVhdE9wZXJhdG9yKGNvdW50IC0gMSwgc291cmNlKSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5yZXBlYXQgPSByZXBlYXQ7XG52YXIgUmVwZWF0T3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlcGVhdE9wZXJhdG9yKGNvdW50LCBzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50O1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB9XG4gICAgUmVwZWF0T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBSZXBlYXRTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuY291bnQsIHRoaXMuc291cmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gUmVwZWF0T3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBSZXBlYXRTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmVwZWF0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSZXBlYXRTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjb3VudCwgc291cmNlKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50O1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB9XG4gICAgUmVwZWF0U3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIHNvdXJjZSA9IF9hLnNvdXJjZSwgY291bnQgPSBfYS5jb3VudDtcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmNvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb3VudCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUodGhpcy5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlKCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gUmVwZWF0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoJy4uL1N1YmplY3QnKTtcbnZhciB0cnlDYXRjaF8xID0gcmVxdWlyZSgnLi4vdXRpbC90cnlDYXRjaCcpO1xudmFyIGVycm9yT2JqZWN0XzEgPSByZXF1aXJlKCcuLi91dGlsL2Vycm9yT2JqZWN0Jyk7XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBtaXJyb3JzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aXRoIHRoZSBleGNlcHRpb24gb2YgYSBgY29tcGxldGVgLiBJZiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGNhbGxzIGBjb21wbGV0ZWAsIHRoaXMgbWV0aG9kIHdpbGwgZW1pdCB0byB0aGUgT2JzZXJ2YWJsZSByZXR1cm5lZCBmcm9tIGBub3RpZmllcmAuIElmIHRoYXQgT2JzZXJ2YWJsZVxuICogY2FsbHMgYGNvbXBsZXRlYCBvciBgZXJyb3JgLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCBgY29tcGxldGVgIG9yIGBlcnJvcmAgb24gdGhlIGNoaWxkIHN1YnNjcmlwdGlvbi4gT3RoZXJ3aXNlXG4gKiB0aGlzIG1ldGhvZCB3aWxsIHJlc3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3JlcGVhdFdoZW4ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbihub3RpZmljYXRpb25zOiBPYnNlcnZhYmxlKTogT2JzZXJ2YWJsZX0gbm90aWZpZXIgLSBSZWNlaXZlcyBhbiBPYnNlcnZhYmxlIG9mIG5vdGlmaWNhdGlvbnMgd2l0aFxuICogd2hpY2ggYSB1c2VyIGNhbiBgY29tcGxldGVgIG9yIGBlcnJvcmAsIGFib3J0aW5nIHRoZSByZXBldGl0aW9uLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gVGhlIHNvdXJjZSBPYnNlcnZhYmxlIG1vZGlmaWVkIHdpdGggcmVwZWF0IGxvZ2ljLlxuICogQG1ldGhvZCByZXBlYXRXaGVuXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiByZXBlYXRXaGVuKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBSZXBlYXRXaGVuT3BlcmF0b3Iobm90aWZpZXIpKTsgfTtcbn1cbmV4cG9ydHMucmVwZWF0V2hlbiA9IHJlcGVhdFdoZW47XG52YXIgUmVwZWF0V2hlbk9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXBlYXRXaGVuT3BlcmF0b3Iobm90aWZpZXIpIHtcbiAgICAgICAgdGhpcy5ub3RpZmllciA9IG5vdGlmaWVyO1xuICAgIH1cbiAgICBSZXBlYXRXaGVuT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBSZXBlYXRXaGVuU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLm5vdGlmaWVyLCBzb3VyY2UpKTtcbiAgICB9O1xuICAgIHJldHVybiBSZXBlYXRXaGVuT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBSZXBlYXRXaGVuU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJlcGVhdFdoZW5TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlcGVhdFdoZW5TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBub3RpZmllciwgc291cmNlKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5ub3RpZmllciA9IG5vdGlmaWVyO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgdGhpcy5zb3VyY2VJc0JlaW5nU3Vic2NyaWJlZFRvID0gdHJ1ZTtcbiAgICB9XG4gICAgUmVwZWF0V2hlblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VJc0JlaW5nU3Vic2NyaWJlZFRvID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHRoaXMpO1xuICAgIH07XG4gICAgUmVwZWF0V2hlblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlubmVyU3ViKSB7XG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUlzQmVpbmdTdWJzY3JpYmVkVG8gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSZXBlYXRXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc291cmNlSXNCZWluZ1N1YnNjcmliZWRUbyA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmV0cmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9SZXRyaWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMucmV0cmllc1N1YnNjcmlwdGlvbiB8fCB0aGlzLnJldHJpZXNTdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFJlcGVhdFdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIG5vdGlmaWNhdGlvbnMgPSBfYS5ub3RpZmljYXRpb25zLCByZXRyaWVzU3Vic2NyaXB0aW9uID0gX2EucmV0cmllc1N1YnNjcmlwdGlvbjtcbiAgICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldHJpZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHJldHJpZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXRyaWVzID0gbnVsbDtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBSZXBlYXRXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgbm90aWZpY2F0aW9ucyA9IF9hLm5vdGlmaWNhdGlvbnMsIHJldHJpZXMgPSBfYS5yZXRyaWVzLCByZXRyaWVzU3Vic2NyaXB0aW9uID0gX2EucmV0cmllc1N1YnNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXRyaWVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnM7XG4gICAgICAgIHRoaXMucmV0cmllcyA9IHJldHJpZXM7XG4gICAgICAgIHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbiA9IHJldHJpZXNTdWJzY3JpcHRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgUmVwZWF0V2hlblN1YnNjcmliZXIucHJvdG90eXBlLnN1YnNjcmliZVRvUmV0cmllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgIHZhciByZXRyaWVzID0gdHJ5Q2F0Y2hfMS50cnlDYXRjaCh0aGlzLm5vdGlmaWVyKSh0aGlzLm5vdGlmaWNhdGlvbnMpO1xuICAgICAgICBpZiAocmV0cmllcyA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJldHJpZXMgPSByZXRyaWVzO1xuICAgICAgICB0aGlzLnJldHJpZXNTdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHJldHJpZXMpO1xuICAgIH07XG4gICAgcmV0dXJuIFJlcGVhdFdoZW5TdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdFdoZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IG1pcnJvcnMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhbiBgZXJyb3JgLiBJZiB0aGUgc291cmNlIE9ic2VydmFibGVcbiAqIGNhbGxzIGBlcnJvcmAsIHRoaXMgbWV0aG9kIHdpbGwgcmVzdWJzY3JpYmUgdG8gdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGZvciBhIG1heGltdW0gb2YgYGNvdW50YCByZXN1YnNjcmlwdGlvbnMgKGdpdmVuXG4gKiBhcyBhIG51bWJlciBwYXJhbWV0ZXIpIHJhdGhlciB0aGFuIHByb3BhZ2F0aW5nIHRoZSBgZXJyb3JgIGNhbGwuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9yZXRyeS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBBbnkgYW5kIGFsbCBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aWxsIGJlIGVtaXR0ZWQgYnkgdGhlIHJlc3VsdGluZyBPYnNlcnZhYmxlLCBldmVuIHRob3NlIGVtaXR0ZWRcbiAqIGR1cmluZyBmYWlsZWQgc3Vic2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIGlmIGFuIE9ic2VydmFibGUgZmFpbHMgYXQgZmlyc3QgYnV0IGVtaXRzIFsxLCAyXSB0aGVuIHN1Y2NlZWRzIHRoZSBzZWNvbmRcbiAqIHRpbWUgYW5kIGVtaXRzOiBbMSwgMiwgMywgNCwgNV0gdGhlbiB0aGUgY29tcGxldGUgc3RyZWFtIG9mIGVtaXNzaW9ucyBhbmQgbm90aWZpY2F0aW9uc1xuICogd291bGQgYmU6IFsxLCAyLCAxLCAyLCAzLCA0LCA1LCBgY29tcGxldGVgXS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAtIE51bWJlciBvZiByZXRyeSBhdHRlbXB0cyBiZWZvcmUgZmFpbGluZy5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IFRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBtb2RpZmllZCB3aXRoIHRoZSByZXRyeSBsb2dpYy5cbiAqIEBtZXRob2QgcmV0cnlcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHJldHJ5KGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09PSB2b2lkIDApIHsgY291bnQgPSAtMTsgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgUmV0cnlPcGVyYXRvcihjb3VudCwgc291cmNlKSk7IH07XG59XG5leHBvcnRzLnJldHJ5ID0gcmV0cnk7XG52YXIgUmV0cnlPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmV0cnlPcGVyYXRvcihjb3VudCwgc291cmNlKSB7XG4gICAgICAgIHRoaXMuY291bnQgPSBjb3VudDtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIFJldHJ5T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBSZXRyeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5jb3VudCwgdGhpcy5zb3VyY2UpKTtcbiAgICB9O1xuICAgIHJldHVybiBSZXRyeU9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgUmV0cnlTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUmV0cnlTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJldHJ5U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY291bnQsIHNvdXJjZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuY291bnQgPSBjb3VudDtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIFJldHJ5U3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIHNvdXJjZSA9IF9hLnNvdXJjZSwgY291bnQgPSBfYS5jb3VudDtcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ID0gY291bnQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZSh0aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSZXRyeVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoJy4uL1N1YmplY3QnKTtcbnZhciB0cnlDYXRjaF8xID0gcmVxdWlyZSgnLi4vdXRpbC90cnlDYXRjaCcpO1xudmFyIGVycm9yT2JqZWN0XzEgPSByZXF1aXJlKCcuLi91dGlsL2Vycm9yT2JqZWN0Jyk7XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBtaXJyb3JzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aXRoIHRoZSBleGNlcHRpb24gb2YgYW4gYGVycm9yYC4gSWYgdGhlIHNvdXJjZSBPYnNlcnZhYmxlXG4gKiBjYWxscyBgZXJyb3JgLCB0aGlzIG1ldGhvZCB3aWxsIGVtaXQgdGhlIFRocm93YWJsZSB0aGF0IGNhdXNlZCB0aGUgZXJyb3IgdG8gdGhlIE9ic2VydmFibGUgcmV0dXJuZWQgZnJvbSBgbm90aWZpZXJgLlxuICogSWYgdGhhdCBPYnNlcnZhYmxlIGNhbGxzIGBjb21wbGV0ZWAgb3IgYGVycm9yYCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgY2FsbCBgY29tcGxldGVgIG9yIGBlcnJvcmAgb24gdGhlIGNoaWxkXG4gKiBzdWJzY3JpcHRpb24uIE90aGVyd2lzZSB0aGlzIG1ldGhvZCB3aWxsIHJlc3Vic2NyaWJlIHRvIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3JldHJ5V2hlbi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGVycm9yczogT2JzZXJ2YWJsZSk6IE9ic2VydmFibGV9IG5vdGlmaWVyIC0gUmVjZWl2ZXMgYW4gT2JzZXJ2YWJsZSBvZiBub3RpZmljYXRpb25zIHdpdGggd2hpY2ggYVxuICogdXNlciBjYW4gYGNvbXBsZXRlYCBvciBgZXJyb3JgLCBhYm9ydGluZyB0aGUgcmV0cnkuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBUaGUgc291cmNlIE9ic2VydmFibGUgbW9kaWZpZWQgd2l0aCByZXRyeSBsb2dpYy5cbiAqIEBtZXRob2QgcmV0cnlXaGVuXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiByZXRyeVdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFJldHJ5V2hlbk9wZXJhdG9yKG5vdGlmaWVyLCBzb3VyY2UpKTsgfTtcbn1cbmV4cG9ydHMucmV0cnlXaGVuID0gcmV0cnlXaGVuO1xudmFyIFJldHJ5V2hlbk9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXRyeVdoZW5PcGVyYXRvcihub3RpZmllciwgc291cmNlKSB7XG4gICAgICAgIHRoaXMubm90aWZpZXIgPSBub3RpZmllcjtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIFJldHJ5V2hlbk9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgUmV0cnlXaGVuU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLm5vdGlmaWVyLCB0aGlzLnNvdXJjZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIFJldHJ5V2hlbk9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgUmV0cnlXaGVuU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJldHJ5V2hlblN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmV0cnlXaGVuU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgbm90aWZpZXIsIHNvdXJjZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMubm90aWZpZXIgPSBub3RpZmllcjtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIFJldHJ5V2hlblN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3JzID0gdGhpcy5lcnJvcnM7XG4gICAgICAgICAgICB2YXIgcmV0cmllcyA9IHRoaXMucmV0cmllcztcbiAgICAgICAgICAgIHZhciByZXRyaWVzU3Vic2NyaXB0aW9uID0gdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKCFyZXRyaWVzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgcmV0cmllcyA9IHRyeUNhdGNoXzEudHJ5Q2F0Y2godGhpcy5ub3RpZmllcikoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICBpZiAocmV0cmllcyA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5lcnJvci5jYWxsKHRoaXMsIGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHJpZXNTdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHJldHJpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICAgICAgdGhpcy5yZXRyaWVzID0gcmV0cmllcztcbiAgICAgICAgICAgIHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbiA9IHJldHJpZXNTdWJzY3JpcHRpb247XG4gICAgICAgICAgICBlcnJvcnMubmV4dChlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gUmV0cnlXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBlcnJvcnMgPSBfYS5lcnJvcnMsIHJldHJpZXNTdWJzY3JpcHRpb24gPSBfYS5yZXRyaWVzU3Vic2NyaXB0aW9uO1xuICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICBlcnJvcnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0cmllc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgcmV0cmllc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJldHJpZXMgPSBudWxsO1xuICAgIH07XG4gICAgUmV0cnlXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBlcnJvcnMgPSBfYS5lcnJvcnMsIHJldHJpZXMgPSBfYS5yZXRyaWVzLCByZXRyaWVzU3Vic2NyaXB0aW9uID0gX2EucmV0cmllc1N1YnNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgICAgICB0aGlzLnJldHJpZXMgPSBudWxsO1xuICAgICAgICB0aGlzLnJldHJpZXNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIHRoaXMucmV0cmllcyA9IHJldHJpZXM7XG4gICAgICAgIHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbiA9IHJldHJpZXNTdWJzY3JpcHRpb247XG4gICAgICAgIHRoaXMuc291cmNlLnN1YnNjcmliZSh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBSZXRyeVdoZW5TdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXJfMS5PdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5V2hlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qKlxuICogRW1pdHMgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aGVuZXZlclxuICogYW5vdGhlciBPYnNlcnZhYmxlLCB0aGUgYG5vdGlmaWVyYCwgZW1pdHMuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgc2FtcGxlVGltZX0sIGJ1dCBzYW1wbGVzIHdoZW5ldmVyXG4gKiB0aGUgYG5vdGlmaWVyYCBPYnNlcnZhYmxlIGVtaXRzIHNvbWV0aGluZy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9zYW1wbGUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogV2hlbmV2ZXIgdGhlIGBub3RpZmllcmAgT2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlIG9yIGNvbXBsZXRlcywgYHNhbXBsZWBcbiAqIGxvb2tzIGF0IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhbmQgZW1pdHMgd2hpY2hldmVyIHZhbHVlIGl0IGhhcyBtb3N0IHJlY2VudGx5XG4gKiBlbWl0dGVkIHNpbmNlIHRoZSBwcmV2aW91cyBzYW1wbGluZywgdW5sZXNzIHRoZSBzb3VyY2UgaGFzIG5vdCBlbWl0dGVkXG4gKiBhbnl0aGluZyBzaW5jZSB0aGUgcHJldmlvdXMgc2FtcGxpbmcuIFRoZSBgbm90aWZpZXJgIGlzIHN1YnNjcmliZWQgdG8gYXMgc29vblxuICogYXMgdGhlIG91dHB1dCBPYnNlcnZhYmxlIGlzIHN1YnNjcmliZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+T24gZXZlcnkgY2xpY2ssIHNhbXBsZSB0aGUgbW9zdCByZWNlbnQgXCJzZWNvbmRzXCIgdGltZXI8L2NhcHRpb24+XG4gKiB2YXIgc2Vjb25kcyA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IHNlY29uZHMuc2FtcGxlKGNsaWNrcyk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGF1ZGl0fVxuICogQHNlZSB7QGxpbmsgZGVib3VuY2V9XG4gKiBAc2VlIHtAbGluayBzYW1wbGVUaW1lfVxuICogQHNlZSB7QGxpbmsgdGhyb3R0bGV9XG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlPGFueT59IG5vdGlmaWVyIFRoZSBPYnNlcnZhYmxlIHRvIHVzZSBmb3Igc2FtcGxpbmcgdGhlXG4gKiBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0cyBvZiBzYW1wbGluZyB0aGVcbiAqIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aGVuZXZlciB0aGUgbm90aWZpZXIgT2JzZXJ2YWJsZVxuICogZW1pdHMgdmFsdWUgb3IgY29tcGxldGVzLlxuICogQG1ldGhvZCBzYW1wbGVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHNhbXBsZShub3RpZmllcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgU2FtcGxlT3BlcmF0b3Iobm90aWZpZXIpKTsgfTtcbn1cbmV4cG9ydHMuc2FtcGxlID0gc2FtcGxlO1xudmFyIFNhbXBsZU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTYW1wbGVPcGVyYXRvcihub3RpZmllcikge1xuICAgICAgICB0aGlzLm5vdGlmaWVyID0gbm90aWZpZXI7XG4gICAgfVxuICAgIFNhbXBsZU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICB2YXIgc2FtcGxlU3Vic2NyaWJlciA9IG5ldyBTYW1wbGVTdWJzY3JpYmVyKHN1YnNjcmliZXIpO1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShzYW1wbGVTdWJzY3JpYmVyKTtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHNhbXBsZVN1YnNjcmliZXIsIHRoaXMubm90aWZpZXIpKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIHJldHVybiBTYW1wbGVPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFNhbXBsZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYW1wbGVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhbXBsZVN1YnNjcmliZXIoKSB7XG4gICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgfVxuICAgIFNhbXBsZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XG4gICAgfTtcbiAgICBTYW1wbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgfTtcbiAgICBTYW1wbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICB9O1xuICAgIFNhbXBsZVN1YnNjcmliZXIucHJvdG90eXBlLmVtaXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFNhbXBsZVN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xudmFyIGFzeW5jXzEgPSByZXF1aXJlKCcuLi9zY2hlZHVsZXIvYXN5bmMnKTtcbi8qKlxuICogRW1pdHMgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB3aXRoaW5cbiAqIHBlcmlvZGljIHRpbWUgaW50ZXJ2YWxzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5TYW1wbGVzIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhdCBwZXJpb2RpYyB0aW1lXG4gKiBpbnRlcnZhbHMsIGVtaXR0aW5nIHdoYXQgaXQgc2FtcGxlcy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9zYW1wbGVUaW1lLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBzYW1wbGVUaW1lYCBwZXJpb2RpY2FsbHkgbG9va3MgYXQgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGFuZCBlbWl0cyB3aGljaGV2ZXJcbiAqIHZhbHVlIGl0IGhhcyBtb3N0IHJlY2VudGx5IGVtaXR0ZWQgc2luY2UgdGhlIHByZXZpb3VzIHNhbXBsaW5nLCB1bmxlc3MgdGhlXG4gKiBzb3VyY2UgaGFzIG5vdCBlbWl0dGVkIGFueXRoaW5nIHNpbmNlIHRoZSBwcmV2aW91cyBzYW1wbGluZy4gVGhlIHNhbXBsaW5nXG4gKiBoYXBwZW5zIHBlcmlvZGljYWxseSBpbiB0aW1lIGV2ZXJ5IGBwZXJpb2RgIG1pbGxpc2Vjb25kcyAob3IgdGhlIHRpbWUgdW5pdFxuICogZGVmaW5lZCBieSB0aGUgb3B0aW9uYWwgYHNjaGVkdWxlcmAgYXJndW1lbnQpLiBUaGUgc2FtcGxpbmcgc3RhcnRzIGFzIHNvb24gYXNcbiAqIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBpcyBzdWJzY3JpYmVkLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkV2ZXJ5IHNlY29uZCwgZW1pdCB0aGUgbW9zdCByZWNlbnQgY2xpY2sgYXQgbW9zdCBvbmNlPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3Muc2FtcGxlVGltZSgxMDAwKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXRUaW1lfVxuICogQHNlZSB7QGxpbmsgZGVib3VuY2VUaW1lfVxuICogQHNlZSB7QGxpbmsgZGVsYXl9XG4gKiBAc2VlIHtAbGluayBzYW1wbGV9XG4gKiBAc2VlIHtAbGluayB0aHJvdHRsZVRpbWV9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHBlcmlvZCBUaGUgc2FtcGxpbmcgcGVyaW9kIGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMgb3IgdGhlXG4gKiB0aW1lIHVuaXQgZGV0ZXJtaW5lZCBpbnRlcm5hbGx5IGJ5IHRoZSBvcHRpb25hbCBgc2NoZWR1bGVyYC5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyPWFzeW5jXSBUaGUge0BsaW5rIElTY2hlZHVsZXJ9IHRvIHVzZSBmb3JcbiAqIG1hbmFnaW5nIHRoZSB0aW1lcnMgdGhhdCBoYW5kbGUgdGhlIHNhbXBsaW5nLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHRzIG9mIHNhbXBsaW5nIHRoZVxuICogdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGF0IHRoZSBzcGVjaWZpZWQgdGltZSBpbnRlcnZhbC5cbiAqIEBtZXRob2Qgc2FtcGxlVGltZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gc2FtcGxlVGltZShwZXJpb2QsIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY18xLmFzeW5jOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBTYW1wbGVUaW1lT3BlcmF0b3IocGVyaW9kLCBzY2hlZHVsZXIpKTsgfTtcbn1cbmV4cG9ydHMuc2FtcGxlVGltZSA9IHNhbXBsZVRpbWU7XG52YXIgU2FtcGxlVGltZU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTYW1wbGVUaW1lT3BlcmF0b3IocGVyaW9kLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgdGhpcy5wZXJpb2QgPSBwZXJpb2Q7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICBTYW1wbGVUaW1lT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTYW1wbGVUaW1lU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnBlcmlvZCwgdGhpcy5zY2hlZHVsZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBTYW1wbGVUaW1lT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBTYW1wbGVUaW1lU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhbXBsZVRpbWVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhbXBsZVRpbWVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwZXJpb2QsIHNjaGVkdWxlcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMucGVyaW9kID0gcGVyaW9kO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hOb3RpZmljYXRpb24sIHBlcmlvZCwgeyBzdWJzY3JpYmVyOiB0aGlzLCBwZXJpb2Q6IHBlcmlvZCB9KSk7XG4gICAgfVxuICAgIFNhbXBsZVRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9O1xuICAgIFNhbXBsZVRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMubGFzdFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFNhbXBsZVRpbWVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gZGlzcGF0Y2hOb3RpZmljYXRpb24oc3RhdGUpIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXIsIHBlcmlvZCA9IHN0YXRlLnBlcmlvZDtcbiAgICBzdWJzY3JpYmVyLm5vdGlmeU5leHQoKTtcbiAgICB0aGlzLnNjaGVkdWxlKHN0YXRlLCBwZXJpb2QpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxlVGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIEFwcGxpZXMgYW4gYWNjdW11bGF0b3IgZnVuY3Rpb24gb3ZlciB0aGUgc291cmNlIE9ic2VydmFibGUsIGFuZCByZXR1cm5zIGVhY2hcbiAqIGludGVybWVkaWF0ZSByZXN1bHQsIHdpdGggYW4gb3B0aW9uYWwgc2VlZCB2YWx1ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayByZWR1Y2V9LCBidXQgZW1pdHMgdGhlIGN1cnJlbnRcbiAqIGFjY3VtdWxhdGlvbiB3aGVuZXZlciB0aGUgc291cmNlIGVtaXRzIGEgdmFsdWUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvc2Nhbi5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBDb21iaW5lcyB0b2dldGhlciBhbGwgdmFsdWVzIGVtaXR0ZWQgb24gdGhlIHNvdXJjZSwgdXNpbmcgYW4gYWNjdW11bGF0b3JcbiAqIGZ1bmN0aW9uIHRoYXQga25vd3MgaG93IHRvIGpvaW4gYSBuZXcgc291cmNlIHZhbHVlIGludG8gdGhlIGFjY3VtdWxhdGlvbiBmcm9tXG4gKiB0aGUgcGFzdC4gSXMgc2ltaWxhciB0byB7QGxpbmsgcmVkdWNlfSwgYnV0IGVtaXRzIHRoZSBpbnRlcm1lZGlhdGVcbiAqIGFjY3VtdWxhdGlvbnMuXG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgYXBwbGllcyBhIHNwZWNpZmllZCBgYWNjdW11bGF0b3JgIGZ1bmN0aW9uIHRvIGVhY2hcbiAqIGl0ZW0gZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuIElmIGEgYHNlZWRgIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlblxuICogdGhhdCB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBhY2N1bXVsYXRvci4gSWYgbm8gc2VlZFxuICogdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZmlyc3QgaXRlbSBvZiB0aGUgc291cmNlIGlzIHVzZWQgYXMgdGhlIHNlZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q291bnQgdGhlIG51bWJlciBvZiBjbGljayBldmVudHM8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIG9uZXMgPSBjbGlja3MubWFwVG8oMSk7XG4gKiB2YXIgc2VlZCA9IDA7XG4gKiB2YXIgY291bnQgPSBvbmVzLnNjYW4oKGFjYywgb25lKSA9PiBhY2MgKyBvbmUsIHNlZWQpO1xuICogY291bnQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGV4cGFuZH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlU2Nhbn1cbiAqIEBzZWUge0BsaW5rIHJlZHVjZX1cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGFjYzogUiwgdmFsdWU6IFQsIGluZGV4OiBudW1iZXIpOiBSfSBhY2N1bXVsYXRvclxuICogVGhlIGFjY3VtdWxhdG9yIGZ1bmN0aW9uIGNhbGxlZCBvbiBlYWNoIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSB7VHxSfSBbc2VlZF0gVGhlIGluaXRpYWwgYWNjdW11bGF0aW9uIHZhbHVlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxSPn0gQW4gb2JzZXJ2YWJsZSBvZiB0aGUgYWNjdW11bGF0ZWQgdmFsdWVzLlxuICogQG1ldGhvZCBzY2FuXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzY2FuKGFjY3VtdWxhdG9yLCBzZWVkKSB7XG4gICAgdmFyIGhhc1NlZWQgPSBmYWxzZTtcbiAgICAvLyBwcm92aWRpbmcgYSBzZWVkIG9mIGB1bmRlZmluZWRgICpzaG91bGQqIGJlIHZhbGlkIGFuZCB0cmlnZ2VyXG4gICAgLy8gaGFzU2VlZCEgc28gZG9uJ3QgdXNlIGBzZWVkICE9PSB1bmRlZmluZWRgIGNoZWNrcyFcbiAgICAvLyBGb3IgdGhpcyByZWFzb24sIHdlIGhhdmUgdG8gY2hlY2sgaXQgaGVyZSBhdCB0aGUgb3JpZ2luYWwgY2FsbCBzaXRlXG4gICAgLy8gb3RoZXJ3aXNlIGluc2lkZSBPcGVyYXRvci9TdWJzY3JpYmVyIHdlIHdvbid0IGtub3cgaWYgYHVuZGVmaW5lZGBcbiAgICAvLyBtZWFucyB0aGV5IGRpZG4ndCBwcm92aWRlIGFueXRoaW5nIG9yIGlmIHRoZXkgbGl0ZXJhbGx5IHByb3ZpZGVkIGB1bmRlZmluZWRgXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikge1xuICAgICAgICBoYXNTZWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNjYW5PcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFNjYW5PcGVyYXRvcihhY2N1bXVsYXRvciwgc2VlZCwgaGFzU2VlZCkpO1xuICAgIH07XG59XG5leHBvcnRzLnNjYW4gPSBzY2FuO1xudmFyIFNjYW5PcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2Nhbk9wZXJhdG9yKGFjY3VtdWxhdG9yLCBzZWVkLCBoYXNTZWVkKSB7XG4gICAgICAgIGlmIChoYXNTZWVkID09PSB2b2lkIDApIHsgaGFzU2VlZCA9IGZhbHNlOyB9XG4gICAgICAgIHRoaXMuYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvcjtcbiAgICAgICAgdGhpcy5zZWVkID0gc2VlZDtcbiAgICAgICAgdGhpcy5oYXNTZWVkID0gaGFzU2VlZDtcbiAgICB9XG4gICAgU2Nhbk9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgU2NhblN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5hY2N1bXVsYXRvciwgdGhpcy5zZWVkLCB0aGlzLmhhc1NlZWQpKTtcbiAgICB9O1xuICAgIHJldHVybiBTY2FuT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBTY2FuU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNjYW5TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNjYW5TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBhY2N1bXVsYXRvciwgX3NlZWQsIGhhc1NlZWQpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3I7XG4gICAgICAgIHRoaXMuX3NlZWQgPSBfc2VlZDtcbiAgICAgICAgdGhpcy5oYXNTZWVkID0gaGFzU2VlZDtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY2FuU3Vic2NyaWJlci5wcm90b3R5cGUsIFwic2VlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmhhc1NlZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fc2VlZCA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTY2FuU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NlZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VlZCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cnlOZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU2NhblN1YnNjcmliZXIucHJvdG90eXBlLl90cnlOZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXgrKztcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuYWNjdW11bGF0b3IodGhpcy5zZWVkLCB2YWx1ZSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlZWQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyZXN1bHQpO1xuICAgIH07XG4gICAgcmV0dXJuIFNjYW5TdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2Nhbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciB0cnlDYXRjaF8xID0gcmVxdWlyZSgnLi4vdXRpbC90cnlDYXRjaCcpO1xudmFyIGVycm9yT2JqZWN0XzEgPSByZXF1aXJlKCcuLi91dGlsL2Vycm9yT2JqZWN0Jyk7XG4vKipcbiAqIENvbXBhcmVzIGFsbCB2YWx1ZXMgb2YgdHdvIG9ic2VydmFibGVzIGluIHNlcXVlbmNlIHVzaW5nIGFuIG9wdGlvbmFsIGNvbXBhcm9yIGZ1bmN0aW9uXG4gKiBhbmQgcmV0dXJucyBhbiBvYnNlcnZhYmxlIG9mIGEgc2luZ2xlIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50aW5nIHdoZXRoZXIgb3Igbm90IHRoZSB0d28gc2VxdWVuY2VzXG4gKiBhcmUgZXF1YWwuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkNoZWNrcyB0byBzZWUgb2YgYWxsIHZhbHVlcyBlbWl0dGVkIGJ5IGJvdGggb2JzZXJ2YWJsZXMgYXJlIGVxdWFsLCBpbiBvcmRlci48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9zZXF1ZW5jZUVxdWFsLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGBzZXF1ZW5jZUVxdWFsYCBzdWJzY3JpYmVzIHRvIHR3byBvYnNlcnZhYmxlcyBhbmQgYnVmZmVycyBpbmNvbWluZyB2YWx1ZXMgZnJvbSBlYWNoIG9ic2VydmFibGUuIFdoZW5ldmVyIGVpdGhlclxuICogb2JzZXJ2YWJsZSBlbWl0cyBhIHZhbHVlLCB0aGUgdmFsdWUgaXMgYnVmZmVyZWQgYW5kIHRoZSBidWZmZXJzIGFyZSBzaGlmdGVkIGFuZCBjb21wYXJlZCBmcm9tIHRoZSBib3R0b21cbiAqIHVwOyBJZiBhbnkgdmFsdWUgcGFpciBkb2Vzbid0IG1hdGNoLCB0aGUgcmV0dXJuZWQgb2JzZXJ2YWJsZSB3aWxsIGVtaXQgYGZhbHNlYCBhbmQgY29tcGxldGUuIElmIG9uZSBvZiB0aGVcbiAqIG9ic2VydmFibGVzIGNvbXBsZXRlcywgdGhlIG9wZXJhdG9yIHdpbGwgd2FpdCBmb3IgdGhlIG90aGVyIG9ic2VydmFibGUgdG8gY29tcGxldGU7IElmIHRoZSBvdGhlclxuICogb2JzZXJ2YWJsZSBlbWl0cyBiZWZvcmUgY29tcGxldGluZywgdGhlIHJldHVybmVkIG9ic2VydmFibGUgd2lsbCBlbWl0IGBmYWxzZWAgYW5kIGNvbXBsZXRlLiBJZiBvbmUgb2JzZXJ2YWJsZSBuZXZlclxuICogY29tcGxldGVzIG9yIGVtaXRzIGFmdGVyIHRoZSBvdGhlciBjb21wbGV0cywgdGhlIHJldHVybmVkIG9ic2VydmFibGUgd2lsbCBuZXZlciBjb21wbGV0ZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5maWd1cmUgb3V0IGlmIHRoZSBLb25hbWkgY29kZSBtYXRjaGVzPC9jYXB0aW9uPlxuICogdmFyIGNvZGUgPSBSeC5PYnNlcnZhYmxlLmZyb20oW1xuICogIFwiQXJyb3dVcFwiLFxuICogIFwiQXJyb3dVcFwiLFxuICogIFwiQXJyb3dEb3duXCIsXG4gKiAgXCJBcnJvd0Rvd25cIixcbiAqICBcIkFycm93TGVmdFwiLFxuICogIFwiQXJyb3dSaWdodFwiLFxuICogIFwiQXJyb3dMZWZ0XCIsXG4gKiAgXCJBcnJvd1JpZ2h0XCIsXG4gKiAgXCJLZXlCXCIsXG4gKiAgXCJLZXlBXCIsXG4gKiAgXCJFbnRlclwiIC8vIG5vIHN0YXJ0IGtleSwgY2xlYXJseS5cbiAqIF0pO1xuICpcbiAqIHZhciBrZXlzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdrZXl1cCcpXG4gKiAgLm1hcChlID0+IGUuY29kZSk7XG4gKiB2YXIgbWF0Y2hlcyA9IGtleXMuYnVmZmVyQ291bnQoMTEsIDEpXG4gKiAgLm1lcmdlTWFwKFxuICogICAgbGFzdDExID0+XG4gKiAgICAgIFJ4Lk9ic2VydmFibGUuZnJvbShsYXN0MTEpXG4gKiAgICAgICAgLnNlcXVlbmNlRXF1YWwoY29kZSlcbiAqICAgKTtcbiAqIG1hdGNoZXMuc3Vic2NyaWJlKG1hdGNoZWQgPT4gY29uc29sZS5sb2coJ1N1Y2Nlc3NmdWwgY2hlYXQgYXQgQ29udHJhPyAnLCBtYXRjaGVkKSk7XG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUxhdGVzdH1cbiAqIEBzZWUge0BsaW5rIHppcH1cbiAqIEBzZWUge0BsaW5rIHdpdGhMYXRlc3RGcm9tfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZX0gY29tcGFyZVRvIFRoZSBvYnNlcnZhYmxlIHNlcXVlbmNlIHRvIGNvbXBhcmUgdGhlIHNvdXJjZSBzZXF1ZW5jZSB0by5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjb21wYXJvcl0gQW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gY29tcGFyZSBlYWNoIHZhbHVlIHBhaXJcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgb2YgYSBzaW5nbGUgYm9vbGVhbiB2YWx1ZSByZXByZXNlbnRpbmcgd2hldGhlciBvciBub3RcbiAqIHRoZSB2YWx1ZXMgZW1pdHRlZCBieSBib3RoIG9ic2VydmFibGVzIHdlcmUgZXF1YWwgaW4gc2VxdWVuY2UuXG4gKiBAbWV0aG9kIHNlcXVlbmNlRXF1YWxcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHNlcXVlbmNlRXF1YWwoY29tcGFyZVRvLCBjb21wYXJvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgU2VxdWVuY2VFcXVhbE9wZXJhdG9yKGNvbXBhcmVUbywgY29tcGFyb3IpKTsgfTtcbn1cbmV4cG9ydHMuc2VxdWVuY2VFcXVhbCA9IHNlcXVlbmNlRXF1YWw7XG52YXIgU2VxdWVuY2VFcXVhbE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTZXF1ZW5jZUVxdWFsT3BlcmF0b3IoY29tcGFyZVRvLCBjb21wYXJvcikge1xuICAgICAgICB0aGlzLmNvbXBhcmVUbyA9IGNvbXBhcmVUbztcbiAgICAgICAgdGhpcy5jb21wYXJvciA9IGNvbXBhcm9yO1xuICAgIH1cbiAgICBTZXF1ZW5jZUVxdWFsT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTZXF1ZW5jZUVxdWFsU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmNvbXBhcmVUbywgdGhpcy5jb21wYXJvcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFNlcXVlbmNlRXF1YWxPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnRzLlNlcXVlbmNlRXF1YWxPcGVyYXRvciA9IFNlcXVlbmNlRXF1YWxPcGVyYXRvcjtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgU2VxdWVuY2VFcXVhbFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTZXF1ZW5jZUVxdWFsU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTZXF1ZW5jZUVxdWFsU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY29tcGFyZVRvLCBjb21wYXJvcikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuY29tcGFyZVRvID0gY29tcGFyZVRvO1xuICAgICAgICB0aGlzLmNvbXBhcm9yID0gY29tcGFyb3I7XG4gICAgICAgIHRoaXMuX2EgPSBbXTtcbiAgICAgICAgdGhpcy5fYiA9IFtdO1xuICAgICAgICB0aGlzLl9vbmVDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkZChjb21wYXJlVG8uc3Vic2NyaWJlKG5ldyBTZXF1ZW5jZUVxdWFsQ29tcGFyZVRvU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgdGhpcykpKTtcbiAgICB9XG4gICAgU2VxdWVuY2VFcXVhbFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9vbmVDb21wbGV0ZSAmJiB0aGlzLl9iLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2EucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9vbmVDb21wbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KHRoaXMuX2EubGVuZ3RoID09PSAwICYmIHRoaXMuX2IubGVuZ3RoID09PSAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX29uZUNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU2VxdWVuY2VFcXVhbFN1YnNjcmliZXIucHJvdG90eXBlLmNoZWNrVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2MgPSB0aGlzLCBfYSA9IF9jLl9hLCBfYiA9IF9jLl9iLCBjb21wYXJvciA9IF9jLmNvbXBhcm9yO1xuICAgICAgICB3aGlsZSAoX2EubGVuZ3RoID4gMCAmJiBfYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgYSA9IF9hLnNoaWZ0KCk7XG4gICAgICAgICAgICB2YXIgYiA9IF9iLnNoaWZ0KCk7XG4gICAgICAgICAgICB2YXIgYXJlRXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChjb21wYXJvcikge1xuICAgICAgICAgICAgICAgIGFyZUVxdWFsID0gdHJ5Q2F0Y2hfMS50cnlDYXRjaChjb21wYXJvcikoYSwgYik7XG4gICAgICAgICAgICAgICAgaWYgKGFyZUVxdWFsID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdC5lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmVFcXVhbCA9IGEgPT09IGI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFyZUVxdWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU2VxdWVuY2VFcXVhbFN1YnNjcmliZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIGRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBTZXF1ZW5jZUVxdWFsU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dEIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX29uZUNvbXBsZXRlICYmIHRoaXMuX2EubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYi5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5TZXF1ZW5jZUVxdWFsU3Vic2NyaWJlciA9IFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyO1xudmFyIFNlcXVlbmNlRXF1YWxDb21wYXJlVG9TdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2VxdWVuY2VFcXVhbENvbXBhcmVUb1N1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2VxdWVuY2VFcXVhbENvbXBhcmVUb1N1YnNjcmliZXIoZGVzdGluYXRpb24sIHBhcmVudCkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICBTZXF1ZW5jZUVxdWFsQ29tcGFyZVRvU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQubmV4dEIodmFsdWUpO1xuICAgIH07XG4gICAgU2VxdWVuY2VFcXVhbENvbXBhcmVUb1N1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQuZXJyb3IoZXJyKTtcbiAgICB9O1xuICAgIFNlcXVlbmNlRXF1YWxDb21wYXJlVG9TdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGFyZW50Ll9jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFNlcXVlbmNlRXF1YWxDb21wYXJlVG9TdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VFcXVhbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBtdWx0aWNhc3RfMSA9IHJlcXVpcmUoJy4vbXVsdGljYXN0Jyk7XG52YXIgcmVmQ291bnRfMSA9IHJlcXVpcmUoJy4vcmVmQ291bnQnKTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKCcuLi9TdWJqZWN0Jyk7XG5mdW5jdGlvbiBzaGFyZVN1YmplY3RGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIG5ldyBPYnNlcnZhYmxlIHRoYXQgbXVsdGljYXN0cyAoc2hhcmVzKSB0aGUgb3JpZ2luYWwgT2JzZXJ2YWJsZS4gQXMgbG9uZyBhcyB0aGVyZSBpcyBhdCBsZWFzdCBvbmVcbiAqIFN1YnNjcmliZXIgdGhpcyBPYnNlcnZhYmxlIHdpbGwgYmUgc3Vic2NyaWJlZCBhbmQgZW1pdHRpbmcgZGF0YS4gV2hlbiBhbGwgc3Vic2NyaWJlcnMgaGF2ZSB1bnN1YnNjcmliZWQgaXQgd2lsbFxuICogdW5zdWJzY3JpYmUgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUuIEJlY2F1c2UgdGhlIE9ic2VydmFibGUgaXMgbXVsdGljYXN0aW5nIGl0IG1ha2VzIHRoZSBzdHJlYW0gYGhvdGAuXG4gKiBUaGlzIGlzIGFuIGFsaWFzIGZvciAubXVsdGljYXN0KCgpID0+IG5ldyBTdWJqZWN0KCkpLnJlZkNvdW50KCkuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9zaGFyZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgdXBvbiBjb25uZWN0aW9uIGNhdXNlcyB0aGUgc291cmNlIE9ic2VydmFibGUgdG8gZW1pdCBpdGVtcyB0byBpdHMgT2JzZXJ2ZXJzLlxuICogQG1ldGhvZCBzaGFyZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gc2hhcmUoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHJlZkNvdW50XzEucmVmQ291bnQoKShtdWx0aWNhc3RfMS5tdWx0aWNhc3Qoc2hhcmVTdWJqZWN0RmFjdG9yeSkoc291cmNlKSk7IH07XG59XG5leHBvcnRzLnNoYXJlID0gc2hhcmU7XG47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBSZXBsYXlTdWJqZWN0XzEgPSByZXF1aXJlKCcuLi9SZXBsYXlTdWJqZWN0Jyk7XG4vKipcbiAqIEBtZXRob2Qgc2hhcmVSZXBsYXlcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHNoYXJlUmVwbGF5KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChzaGFyZVJlcGxheU9wZXJhdG9yKGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlcikpOyB9O1xufVxuZXhwb3J0cy5zaGFyZVJlcGxheSA9IHNoYXJlUmVwbGF5O1xuZnVuY3Rpb24gc2hhcmVSZXBsYXlPcGVyYXRvcihidWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgc3ViamVjdDtcbiAgICB2YXIgcmVmQ291bnQgPSAwO1xuICAgIHZhciBzdWJzY3JpcHRpb247XG4gICAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gc2hhcmVSZXBsYXlPcGVyYXRpb24oc291cmNlKSB7XG4gICAgICAgIHJlZkNvdW50Kys7XG4gICAgICAgIGlmICghc3ViamVjdCB8fCBoYXNFcnJvcikge1xuICAgICAgICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIHN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdF8xLlJlcGxheVN1YmplY3QoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2NoZWR1bGVyKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyBzdWJqZWN0Lm5leHQodmFsdWUpOyB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlubmVyU3ViID0gc3ViamVjdC5zdWJzY3JpYmUodGhpcyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZWZDb3VudC0tO1xuICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24gJiYgcmVmQ291bnQgPT09IDAgJiYgaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG59XG47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZVJlcGxheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBFbXB0eUVycm9yXzEgPSByZXF1aXJlKCcuLi91dGlsL0VtcHR5RXJyb3InKTtcbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNpbmdsZSBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHRoYXQgbWF0Y2hlcyBhIHNwZWNpZmllZFxuICogcHJlZGljYXRlLCBpZiB0aGF0IE9ic2VydmFibGUgZW1pdHMgb25lIHN1Y2ggaXRlbS4gSWYgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGVtaXRzIG1vcmUgdGhhbiBvbmUgc3VjaCBpdGVtIG9yIG5vXG4gKiBzdWNoIGl0ZW1zLCBub3RpZnkgb2YgYW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIG9yIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gcmVzcGVjdGl2ZWx5LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvc2luZ2xlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEB0aHJvd3Mge0VtcHR5RXJyb3J9IERlbGl2ZXJzIGFuIEVtcHR5RXJyb3IgdG8gdGhlIE9ic2VydmVyJ3MgYGVycm9yYFxuICogY2FsbGJhY2sgaWYgdGhlIE9ic2VydmFibGUgY29tcGxldGVzIGJlZm9yZSBhbnkgYG5leHRgIG5vdGlmaWNhdGlvbiB3YXMgc2VudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSAtIEEgcHJlZGljYXRlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzaW5nbGUgaXRlbSBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB0aGF0IG1hdGNoZXNcbiAqIHRoZSBwcmVkaWNhdGUuXG4gLlxuICogQG1ldGhvZCBzaW5nbGVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHNpbmdsZShwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFNpbmdsZU9wZXJhdG9yKHByZWRpY2F0ZSwgc291cmNlKSk7IH07XG59XG5leHBvcnRzLnNpbmdsZSA9IHNpbmdsZTtcbnZhciBTaW5nbGVPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2luZ2xlT3BlcmF0b3IocHJlZGljYXRlLCBzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cbiAgICBTaW5nbGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFNpbmdsZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcmVkaWNhdGUsIHRoaXMuc291cmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2luZ2xlT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBTaW5nbGVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2luZ2xlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTaW5nbGVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcmVkaWNhdGUsIHNvdXJjZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgdGhpcy5zZWVuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgfVxuICAgIFNpbmdsZVN1YnNjcmliZXIucHJvdG90eXBlLmFwcGx5U2luZ2xlVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VlblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKCdTZXF1ZW5jZSBjb250YWlucyBtb3JlIHRoYW4gb25lIGVsZW1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VlblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU2luZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCsrO1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUpIHtcbiAgICAgICAgICAgIHRoaXMudHJ5TmV4dCh2YWx1ZSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBseVNpbmdsZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU2luZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5TmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIHRoaXMuc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaW5nbGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTaW5nbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID4gMCkge1xuICAgICAgICAgICAgZGVzdGluYXRpb24ubmV4dCh0aGlzLnNlZW5WYWx1ZSA/IHRoaXMuc2luZ2xlVmFsdWUgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKG5ldyBFbXB0eUVycm9yXzEuRW1wdHlFcnJvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTaW5nbGVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2luZ2xlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xuLyoqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBza2lwcyB0aGUgZmlyc3QgYGNvdW50YCBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3NraXAucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IC0gVGhlIG51bWJlciBvZiB0aW1lcywgaXRlbXMgZW1pdHRlZCBieSBzb3VyY2UgT2JzZXJ2YWJsZSBzaG91bGQgYmUgc2tpcHBlZC5cbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBza2lwcyB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogQG1ldGhvZCBza2lwXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBza2lwKGNvdW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBTa2lwT3BlcmF0b3IoY291bnQpKTsgfTtcbn1cbmV4cG9ydHMuc2tpcCA9IHNraXA7XG52YXIgU2tpcE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTa2lwT3BlcmF0b3IodG90YWwpIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgIH1cbiAgICBTa2lwT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTa2lwU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnRvdGFsKSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgU2tpcFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTa2lwU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTa2lwU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgdG90YWwpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xuICAgIH1cbiAgICBTa2lwU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICBpZiAoKyt0aGlzLmNvdW50ID4gdGhpcy50b3RhbCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xudmFyIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yXzEgPSByZXF1aXJlKCcuLi91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yJyk7XG4vKipcbiAqIFNraXAgdGhlIGxhc3QgYGNvdW50YCB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy9za2lwTGFzdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgc2tpcExhc3RgIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGFjY3VtdWxhdGVzIGEgcXVldWUgd2l0aCBhIGxlbmd0aFxuICogZW5vdWdoIHRvIHN0b3JlIHRoZSBmaXJzdCBgY291bnRgIHZhbHVlcy4gQXMgbW9yZSB2YWx1ZXMgYXJlIHJlY2VpdmVkLFxuICogdmFsdWVzIGFyZSB0YWtlbiBmcm9tIHRoZSBmcm9udCBvZiB0aGUgcXVldWUgYW5kIHByb2R1Y2VkIG9uIHRoZSByZXN1bHRcbiAqIHNlcXVlbmNlLiBUaGlzIGNhdXNlcyB2YWx1ZXMgdG8gYmUgZGVsYXllZC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5Ta2lwIHRoZSBsYXN0IDIgdmFsdWVzIG9mIGFuIE9ic2VydmFibGUgd2l0aCBtYW55IHZhbHVlczwvY2FwdGlvbj5cbiAqIHZhciBtYW55ID0gUnguT2JzZXJ2YWJsZS5yYW5nZSgxLCA1KTtcbiAqIHZhciBza2lwTGFzdFR3byA9IG1hbnkuc2tpcExhc3QoMik7XG4gKiBza2lwTGFzdFR3by5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gUmVzdWx0cyBpbjpcbiAqIC8vIDEgMiAzXG4gKlxuICogQHNlZSB7QGxpbmsgc2tpcH1cbiAqIEBzZWUge0BsaW5rIHNraXBVbnRpbH1cbiAqIEBzZWUge0BsaW5rIHNraXBXaGlsZX1cbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKlxuICogQHRocm93cyB7QXJndW1lbnRPdXRPZlJhbmdlRXJyb3J9IFdoZW4gdXNpbmcgYHNraXBMYXN0KGkpYCwgaXQgdGhyb3dzXG4gKiBBcmd1bWVudE91dE9yUmFuZ2VFcnJvciBpZiBgaSA8IDBgLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBmcm9tIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHJldHVybnMge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBza2lwcyB0aGUgbGFzdCBjb3VudCB2YWx1ZXNcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBza2lwTGFzdFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gc2tpcExhc3QoY291bnQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFNraXBMYXN0T3BlcmF0b3IoY291bnQpKTsgfTtcbn1cbmV4cG9ydHMuc2tpcExhc3QgPSBza2lwTGFzdDtcbnZhciBTa2lwTGFzdE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTa2lwTGFzdE9wZXJhdG9yKF9za2lwQ291bnQpIHtcbiAgICAgICAgdGhpcy5fc2tpcENvdW50ID0gX3NraXBDb3VudDtcbiAgICAgICAgaWYgKHRoaXMuX3NraXBDb3VudCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcl8xLkFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIFNraXBMYXN0T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIGlmICh0aGlzLl9za2lwQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IHdhbnQgdG8gc2tpcCBhbnkgdmFsdWVzIHRoZW4ganVzdCBzdWJzY3JpYmVcbiAgICAgICAgICAgIC8vIHRvIFN1YnNjcmliZXIgd2l0aG91dCBhbnkgZnVydGhlciBsb2dpYy5cbiAgICAgICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcihzdWJzY3JpYmVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgU2tpcExhc3RTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuX3NraXBDb3VudCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcExhc3RPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFNraXBMYXN0U3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNraXBMYXN0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTa2lwTGFzdFN1YnNjcmliZXIoZGVzdGluYXRpb24sIF9za2lwQ291bnQpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLl9za2lwQ291bnQgPSBfc2tpcENvdW50O1xuICAgICAgICB0aGlzLl9jb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX3JpbmcgPSBuZXcgQXJyYXkoX3NraXBDb3VudCk7XG4gICAgfVxuICAgIFNraXBMYXN0U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHNraXBDb3VudCA9IHRoaXMuX3NraXBDb3VudDtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5fY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50IDwgc2tpcENvdW50KSB7XG4gICAgICAgICAgICB0aGlzLl9yaW5nW2NvdW50XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IGNvdW50ICUgc2tpcENvdW50O1xuICAgICAgICAgICAgdmFyIHJpbmcgPSB0aGlzLl9yaW5nO1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gcmluZ1tjdXJyZW50SW5kZXhdO1xuICAgICAgICAgICAgcmluZ1tjdXJyZW50SW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQob2xkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcExhc3RTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcExhc3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNraXBzIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHVudGlsIGEgc2Vjb25kIE9ic2VydmFibGUgZW1pdHMgYW4gaXRlbS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3NraXBVbnRpbC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcGFyYW0ge09ic2VydmFibGV9IG5vdGlmaWVyIC0gVGhlIHNlY29uZCBPYnNlcnZhYmxlIHRoYXQgaGFzIHRvIGVtaXQgYW4gaXRlbSBiZWZvcmUgdGhlIHNvdXJjZSBPYnNlcnZhYmxlJ3MgZWxlbWVudHMgYmVnaW4gdG9cbiAqIGJlIG1pcnJvcmVkIGJ5IHRoZSByZXN1bHRpbmcgT2JzZXJ2YWJsZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBza2lwcyBpdGVtcyBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB1bnRpbCB0aGUgc2Vjb25kIE9ic2VydmFibGUgZW1pdHNcbiAqIGFuIGl0ZW0sIHRoZW4gZW1pdHMgdGhlIHJlbWFpbmluZyBpdGVtcy5cbiAqIEBtZXRob2Qgc2tpcFVudGlsXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBza2lwVW50aWwobm90aWZpZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFNraXBVbnRpbE9wZXJhdG9yKG5vdGlmaWVyKSk7IH07XG59XG5leHBvcnRzLnNraXBVbnRpbCA9IHNraXBVbnRpbDtcbnZhciBTa2lwVW50aWxPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2tpcFVudGlsT3BlcmF0b3Iobm90aWZpZXIpIHtcbiAgICAgICAgdGhpcy5ub3RpZmllciA9IG5vdGlmaWVyO1xuICAgIH1cbiAgICBTa2lwVW50aWxPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFNraXBVbnRpbFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5ub3RpZmllcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFNraXBVbnRpbE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgU2tpcFVudGlsU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNraXBVbnRpbFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2tpcFVudGlsU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgbm90aWZpZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNJbm5lclN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZGQoc3Vic2NyaWJlVG9SZXN1bHRfMS5zdWJzY3JpYmVUb1Jlc3VsdCh0aGlzLCBub3RpZmllcikpO1xuICAgIH1cbiAgICBTa2lwVW50aWxTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZSkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fbmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU2tpcFVudGlsU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0lubmVyU3RvcHBlZCkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU2tpcFVudGlsU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9O1xuICAgIFNraXBVbnRpbFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzSW5uZXJTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcFVudGlsU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwVW50aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG4vKipcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNraXBzIGFsbCBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSBhcyBsb25nIGFzIGEgc3BlY2lmaWVkIGNvbmRpdGlvbiBob2xkc1xuICogdHJ1ZSwgYnV0IGVtaXRzIGFsbCBmdXJ0aGVyIHNvdXJjZSBpdGVtcyBhcyBzb29uIGFzIHRoZSBjb25kaXRpb24gYmVjb21lcyBmYWxzZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3NraXBXaGlsZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgLSBBIGZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBpdGVtIGVtaXR0ZWQgZnJvbSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgYmVnaW5zIGVtaXR0aW5nIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdoZW4gdGhlXG4gKiBzcGVjaWZpZWQgcHJlZGljYXRlIGJlY29tZXMgZmFsc2UuXG4gKiBAbWV0aG9kIHNraXBXaGlsZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gc2tpcFdoaWxlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgU2tpcFdoaWxlT3BlcmF0b3IocHJlZGljYXRlKSk7IH07XG59XG5leHBvcnRzLnNraXBXaGlsZSA9IHNraXBXaGlsZTtcbnZhciBTa2lwV2hpbGVPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2tpcFdoaWxlT3BlcmF0b3IocHJlZGljYXRlKSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgIH1cbiAgICBTa2lwV2hpbGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFNraXBXaGlsZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcmVkaWNhdGUpKTtcbiAgICB9O1xuICAgIHJldHVybiBTa2lwV2hpbGVPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFNraXBXaGlsZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTa2lwV2hpbGVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNraXBXaGlsZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByZWRpY2F0ZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICB0aGlzLnNraXBwaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgfVxuICAgIFNraXBXaGlsZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGlmICh0aGlzLnNraXBwaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnRyeUNhbGxQcmVkaWNhdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5za2lwcGluZykge1xuICAgICAgICAgICAgZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNraXBXaGlsZVN1YnNjcmliZXIucHJvdG90eXBlLnRyeUNhbGxQcmVkaWNhdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnByZWRpY2F0ZSh2YWx1ZSwgdGhpcy5pbmRleCsrKTtcbiAgICAgICAgICAgIHRoaXMuc2tpcHBpbmcgPSBCb29sZWFuKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcFdoaWxlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNraXBXaGlsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBBcnJheU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL29ic2VydmFibGUvQXJyYXlPYnNlcnZhYmxlJyk7XG52YXIgU2NhbGFyT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9TY2FsYXJPYnNlcnZhYmxlJyk7XG52YXIgRW1wdHlPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9vYnNlcnZhYmxlL0VtcHR5T2JzZXJ2YWJsZScpO1xudmFyIGNvbmNhdF8xID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9jb25jYXQnKTtcbnZhciBpc1NjaGVkdWxlcl8xID0gcmVxdWlyZSgnLi4vdXRpbC9pc1NjaGVkdWxlcicpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGl0ZW1zIHlvdSBzcGVjaWZ5IGFzIGFyZ3VtZW50cyBiZWZvcmUgaXQgYmVnaW5zIHRvIGVtaXRcbiAqIGl0ZW1zIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvc3RhcnRXaXRoLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBwYXJhbSB7Li4uVH0gdmFsdWVzIC0gSXRlbXMgeW91IHdhbnQgdGhlIG1vZGlmaWVkIE9ic2VydmFibGUgdG8gZW1pdCBmaXJzdC5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyXSAtIEEge0BsaW5rIElTY2hlZHVsZXJ9IHRvIHVzZSBmb3Igc2NoZWR1bGluZ1xuICogdGhlIGVtaXNzaW9ucyBvZiB0aGUgYG5leHRgIG5vdGlmaWNhdGlvbnMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGl0ZW1zIGluIHRoZSBzcGVjaWZpZWQgSXRlcmFibGUgYW5kIHRoZW4gZW1pdHMgdGhlIGl0ZW1zXG4gKiBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2Qgc3RhcnRXaXRoXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzdGFydFdpdGgoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJyYXlbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIoc2NoZWR1bGVyKSkge1xuICAgICAgICAgICAgYXJyYXkucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25jYXRfMS5jb25jYXQobmV3IFNjYWxhck9ic2VydmFibGVfMS5TY2FsYXJPYnNlcnZhYmxlKGFycmF5WzBdLCBzY2hlZHVsZXIpLCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25jYXRfMS5jb25jYXQobmV3IEFycmF5T2JzZXJ2YWJsZV8xLkFycmF5T2JzZXJ2YWJsZShhcnJheSwgc2NoZWR1bGVyKSwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb25jYXRfMS5jb25jYXQobmV3IEVtcHR5T2JzZXJ2YWJsZV8xLkVtcHR5T2JzZXJ2YWJsZShzY2hlZHVsZXIpLCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydHMuc3RhcnRXaXRoID0gc3RhcnRXaXRoO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhcnRXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIFN1YnNjcmliZU9uT2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9TdWJzY3JpYmVPbk9ic2VydmFibGUnKTtcbi8qKlxuICogQXN5bmNocm9ub3VzbHkgc3Vic2NyaWJlcyBPYnNlcnZlcnMgdG8gdGhpcyBPYnNlcnZhYmxlIG9uIHRoZSBzcGVjaWZpZWQgSVNjaGVkdWxlci5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3N1YnNjcmliZU9uLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgLSBUaGUgSVNjaGVkdWxlciB0byBwZXJmb3JtIHN1YnNjcmlwdGlvbiBhY3Rpb25zIG9uLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gVGhlIHNvdXJjZSBPYnNlcnZhYmxlIG1vZGlmaWVkIHNvIHRoYXQgaXRzIHN1YnNjcmlwdGlvbnMgaGFwcGVuIG9uIHRoZSBzcGVjaWZpZWQgSVNjaGVkdWxlci5cbiAuXG4gKiBAbWV0aG9kIHN1YnNjcmliZU9uXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiBzdWJzY3JpYmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHN1YnNjcmliZU9uT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBTdWJzY3JpYmVPbk9wZXJhdG9yKHNjaGVkdWxlciwgZGVsYXkpKTtcbiAgICB9O1xufVxuZXhwb3J0cy5zdWJzY3JpYmVPbiA9IHN1YnNjcmliZU9uO1xudmFyIFN1YnNjcmliZU9uT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZU9uT3BlcmF0b3Ioc2NoZWR1bGVyLCBkZWxheSkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgIH1cbiAgICBTdWJzY3JpYmVPbk9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmliZU9uT2JzZXJ2YWJsZV8xLlN1YnNjcmliZU9uT2JzZXJ2YWJsZShzb3VyY2UsIHRoaXMuZGVsYXksIHRoaXMuc2NoZWR1bGVyKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlT25PcGVyYXRvcjtcbn0oKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY3JpYmVPbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBzd2l0Y2hNYXBfMSA9IHJlcXVpcmUoJy4vc3dpdGNoTWFwJyk7XG52YXIgaWRlbnRpdHlfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaWRlbnRpdHknKTtcbmZ1bmN0aW9uIHN3aXRjaEFsbCgpIHtcbiAgICByZXR1cm4gc3dpdGNoTWFwXzEuc3dpdGNoTWFwKGlkZW50aXR5XzEuaWRlbnRpdHkpO1xufVxuZXhwb3J0cy5zd2l0Y2hBbGwgPSBzd2l0Y2hBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hBbGwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byBhbiBPYnNlcnZhYmxlIHdoaWNoIGlzIG1lcmdlZCBpbiB0aGUgb3V0cHV0XG4gKiBPYnNlcnZhYmxlLCBlbWl0dGluZyB2YWx1ZXMgb25seSBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IHByb2plY3RlZCBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5NYXBzIGVhY2ggdmFsdWUgdG8gYW4gT2JzZXJ2YWJsZSwgdGhlbiBmbGF0dGVucyBhbGwgb2ZcbiAqIHRoZXNlIGlubmVyIE9ic2VydmFibGVzIHVzaW5nIHtAbGluayBzd2l0Y2h9Ljwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3N3aXRjaE1hcC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBpdGVtcyBiYXNlZCBvbiBhcHBseWluZyBhIGZ1bmN0aW9uIHRoYXQgeW91XG4gKiBzdXBwbHkgdG8gZWFjaCBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCB3aGVyZSB0aGF0IGZ1bmN0aW9uXG4gKiByZXR1cm5zIGFuIChzby1jYWxsZWQgXCJpbm5lclwiKSBPYnNlcnZhYmxlLiBFYWNoIHRpbWUgaXQgb2JzZXJ2ZXMgb25lIG9mIHRoZXNlXG4gKiBpbm5lciBPYnNlcnZhYmxlcywgdGhlIG91dHB1dCBPYnNlcnZhYmxlIGJlZ2lucyBlbWl0dGluZyB0aGUgaXRlbXMgZW1pdHRlZCBieVxuICogdGhhdCBpbm5lciBPYnNlcnZhYmxlLiBXaGVuIGEgbmV3IGlubmVyIE9ic2VydmFibGUgaXMgZW1pdHRlZCwgYHN3aXRjaE1hcGBcbiAqIHN0b3BzIGVtaXR0aW5nIGl0ZW1zIGZyb20gdGhlIGVhcmxpZXItZW1pdHRlZCBpbm5lciBPYnNlcnZhYmxlIGFuZCBiZWdpbnNcbiAqIGVtaXR0aW5nIGl0ZW1zIGZyb20gdGhlIG5ldyBvbmUuIEl0IGNvbnRpbnVlcyB0byBiZWhhdmUgbGlrZSB0aGlzIGZvclxuICogc3Vic2VxdWVudCBpbm5lciBPYnNlcnZhYmxlcy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5SZXJ1biBhbiBpbnRlcnZhbCBPYnNlcnZhYmxlIG9uIGV2ZXJ5IGNsaWNrIGV2ZW50PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciByZXN1bHQgPSBjbGlja3Muc3dpdGNoTWFwKChldikgPT4gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKSk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIGNvbmNhdE1hcH1cbiAqIEBzZWUge0BsaW5rIGV4aGF1c3RNYXB9XG4gKiBAc2VlIHtAbGluayBtZXJnZU1hcH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcFRvfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQsID9pbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZUlucHV0fSBwcm9qZWN0IEEgZnVuY3Rpb25cbiAqIHRoYXQsIHdoZW4gYXBwbGllZCB0byBhbiBpdGVtIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCByZXR1cm5zIGFuXG4gKiBPYnNlcnZhYmxlLlxuICogQHBhcmFtIHtmdW5jdGlvbihvdXRlclZhbHVlOiBULCBpbm5lclZhbHVlOiBJLCBvdXRlckluZGV4OiBudW1iZXIsIGlubmVySW5kZXg6IG51bWJlcik6IGFueX0gW3Jlc3VsdFNlbGVjdG9yXVxuICogQSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB2YWx1ZSBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGUgYmFzZWQgb24gdGhlIHZhbHVlc1xuICogYW5kIHRoZSBpbmRpY2VzIG9mIHRoZSBzb3VyY2UgKG91dGVyKSBlbWlzc2lvbiBhbmQgdGhlIGlubmVyIE9ic2VydmFibGVcbiAqIGVtaXNzaW9uLiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFyZTpcbiAqIC0gYG91dGVyVmFsdWVgOiB0aGUgdmFsdWUgdGhhdCBjYW1lIGZyb20gdGhlIHNvdXJjZVxuICogLSBgaW5uZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIC0gYG91dGVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lckluZGV4YDogdGhlIFwiaW5kZXhcIiBvZiB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvamVjdGVkIE9ic2VydmFibGVcbiAqIEByZXR1cm4ge09ic2VydmFibGV9IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZVxuICogcHJvamVjdGlvbiBmdW5jdGlvbiAoYW5kIHRoZSBvcHRpb25hbCBgcmVzdWx0U2VsZWN0b3JgKSB0byBlYWNoIGl0ZW0gZW1pdHRlZFxuICogYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGFuZCB0YWtpbmcgb25seSB0aGUgdmFsdWVzIGZyb20gdGhlIG1vc3QgcmVjZW50bHlcbiAqIHByb2plY3RlZCBpbm5lciBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCBzd2l0Y2hNYXBcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHN3aXRjaE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBzd2l0Y2hNYXBPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFN3aXRjaE1hcE9wZXJhdG9yKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuc3dpdGNoTWFwID0gc3dpdGNoTWFwO1xudmFyIFN3aXRjaE1hcE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTd2l0Y2hNYXBPcGVyYXRvcihwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIFN3aXRjaE1hcE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgU3dpdGNoTWFwU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnByb2plY3QsIHRoaXMucmVzdWx0U2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBTd2l0Y2hNYXBPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFN3aXRjaE1hcFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTd2l0Y2hNYXBTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN3aXRjaE1hcFN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9yO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICB9XG4gICAgU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCsrO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5wcm9qZWN0KHZhbHVlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbm5lclN1YihyZXN1bHQsIHZhbHVlLCBpbmRleCk7XG4gICAgfTtcbiAgICBTd2l0Y2hNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5faW5uZXJTdWIgPSBmdW5jdGlvbiAocmVzdWx0LCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaXB0aW9uID0gdGhpcy5pbm5lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgaWYgKGlubmVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBpbm5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkKHRoaXMuaW5uZXJTdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHJlc3VsdCwgdmFsdWUsIGluZGV4KSk7XG4gICAgfTtcbiAgICBTd2l0Y2hNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbm5lclN1YnNjcmlwdGlvbiA9IHRoaXMuaW5uZXJTdWJzY3JpcHRpb247XG4gICAgICAgIGlmICghaW5uZXJTdWJzY3JpcHRpb24gfHwgaW5uZXJTdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlubmVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9O1xuICAgIFN3aXRjaE1hcFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKGlubmVyU3ViKTtcbiAgICAgICAgdGhpcy5pbm5lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5fdHJ5Tm90aWZ5TmV4dChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX3RyeU5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCkge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5yZXN1bHRTZWxlY3RvcihvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHJlc3VsdCk7XG4gICAgfTtcbiAgICByZXR1cm4gU3dpdGNoTWFwU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zd2l0Y2hNYXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBQcm9qZWN0cyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgc2FtZSBPYnNlcnZhYmxlIHdoaWNoIGlzIGZsYXR0ZW5lZCBtdWx0aXBsZVxuICogdGltZXMgd2l0aCB7QGxpbmsgc3dpdGNofSBpbiB0aGUgb3V0cHV0IE9ic2VydmFibGUuXG4gKlxuICogPHNwYW4gY2xhc3M9XCJpbmZvcm1hbFwiPkl0J3MgbGlrZSB7QGxpbmsgc3dpdGNoTWFwfSwgYnV0IG1hcHMgZWFjaCB2YWx1ZVxuICogYWx3YXlzIHRvIHRoZSBzYW1lIGlubmVyIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvc3dpdGNoTWFwVG8ucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogTWFwcyBlYWNoIHNvdXJjZSB2YWx1ZSB0byB0aGUgZ2l2ZW4gT2JzZXJ2YWJsZSBgaW5uZXJPYnNlcnZhYmxlYCByZWdhcmRsZXNzXG4gKiBvZiB0aGUgc291cmNlIHZhbHVlLCBhbmQgdGhlbiBmbGF0dGVucyB0aG9zZSByZXN1bHRpbmcgT2JzZXJ2YWJsZXMgaW50byBvbmVcbiAqIHNpbmdsZSBPYnNlcnZhYmxlLCB3aGljaCBpcyB0aGUgb3V0cHV0IE9ic2VydmFibGUuIFRoZSBvdXRwdXQgT2JzZXJ2YWJsZXNcbiAqIGVtaXRzIHZhbHVlcyBvbmx5IGZyb20gdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBpbnN0YW5jZSBvZlxuICogYGlubmVyT2JzZXJ2YWJsZWAuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+UmVydW4gYW4gaW50ZXJ2YWwgT2JzZXJ2YWJsZSBvbiBldmVyeSBjbGljayBldmVudDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLnN3aXRjaE1hcFRvKFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBjb25jYXRNYXBUb31cbiAqIEBzZWUge0BsaW5rIHN3aXRjaH1cbiAqIEBzZWUge0BsaW5rIHN3aXRjaE1hcH1cbiAqIEBzZWUge0BsaW5rIG1lcmdlTWFwVG99XG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlSW5wdXR9IGlubmVyT2JzZXJ2YWJsZSBBbiBPYnNlcnZhYmxlIHRvIHJlcGxhY2UgZWFjaCB2YWx1ZSBmcm9tXG4gKiB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKG91dGVyVmFsdWU6IFQsIGlubmVyVmFsdWU6IEksIG91dGVySW5kZXg6IG51bWJlciwgaW5uZXJJbmRleDogbnVtYmVyKTogYW55fSBbcmVzdWx0U2VsZWN0b3JdXG4gKiBBIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHZhbHVlIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBiYXNlZCBvbiB0aGUgdmFsdWVzXG4gKiBhbmQgdGhlIGluZGljZXMgb2YgdGhlIHNvdXJjZSAob3V0ZXIpIGVtaXNzaW9uIGFuZCB0aGUgaW5uZXIgT2JzZXJ2YWJsZVxuICogZW1pc3Npb24uIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlOlxuICogLSBgb3V0ZXJWYWx1ZWA6IHRoZSB2YWx1ZSB0aGF0IGNhbWUgZnJvbSB0aGUgc291cmNlXG4gKiAtIGBpbm5lclZhbHVlYDogdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogLSBgb3V0ZXJJbmRleGA6IHRoZSBcImluZGV4XCIgb2YgdGhlIHZhbHVlIHRoYXQgY2FtZSBmcm9tIHRoZSBzb3VyY2VcbiAqIC0gYGlubmVySW5kZXhgOiB0aGUgXCJpbmRleFwiIG9mIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcm9qZWN0ZWQgT2JzZXJ2YWJsZVxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGl0ZW1zIGZyb20gdGhlIGdpdmVuXG4gKiBgaW5uZXJPYnNlcnZhYmxlYCAoYW5kIG9wdGlvbmFsbHkgdHJhbnNmb3JtZWQgdGhyb3VnaCBgcmVzdWx0U2VsZWN0b3JgKSBldmVyeVxuICogdGltZSBhIHZhbHVlIGlzIGVtaXR0ZWQgb24gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBhbmQgdGFraW5nIG9ubHkgdGhlIHZhbHVlc1xuICogZnJvbSB0aGUgbW9zdCByZWNlbnRseSBwcm9qZWN0ZWQgaW5uZXIgT2JzZXJ2YWJsZS5cbiAqIEBtZXRob2Qgc3dpdGNoTWFwVG9cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHN3aXRjaE1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFN3aXRjaE1hcFRvT3BlcmF0b3IoaW5uZXJPYnNlcnZhYmxlLCByZXN1bHRTZWxlY3RvcikpOyB9O1xufVxuZXhwb3J0cy5zd2l0Y2hNYXBUbyA9IHN3aXRjaE1hcFRvO1xudmFyIFN3aXRjaE1hcFRvT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN3aXRjaE1hcFRvT3BlcmF0b3Iob2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZTtcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9yO1xuICAgIH1cbiAgICBTd2l0Y2hNYXBUb09wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgU3dpdGNoTWFwVG9TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMub2JzZXJ2YWJsZSwgdGhpcy5yZXN1bHRTZWxlY3RvcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFN3aXRjaE1hcFRvT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBTd2l0Y2hNYXBUb1N1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTd2l0Y2hNYXBUb1N1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3dpdGNoTWFwVG9TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBpbm5lciwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmlubmVyID0gaW5uZXI7XG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0b3IgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgfVxuICAgIFN3aXRjaE1hcFRvU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaXB0aW9uID0gdGhpcy5pbm5lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgaWYgKGlubmVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBpbm5lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkKHRoaXMuaW5uZXJTdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIHRoaXMuaW5uZXIsIHZhbHVlLCB0aGlzLmluZGV4KyspKTtcbiAgICB9O1xuICAgIFN3aXRjaE1hcFRvU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5uZXJTdWJzY3JpcHRpb24gPSB0aGlzLmlubmVyU3Vic2NyaXB0aW9uO1xuICAgICAgICBpZiAoIWlubmVyU3Vic2NyaXB0aW9uIHx8IGlubmVyU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFN3aXRjaE1hcFRvU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlubmVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9O1xuICAgIFN3aXRjaE1hcFRvU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoaW5uZXJTdWIpO1xuICAgICAgICB0aGlzLmlubmVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTd2l0Y2hNYXBUb1N1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgcmVzdWx0U2VsZWN0b3IgPSBfYS5yZXN1bHRTZWxlY3RvciwgZGVzdGluYXRpb24gPSBfYS5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnRyeVJlc3VsdFNlbGVjdG9yKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzdGluYXRpb24ubmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3dpdGNoTWFwVG9TdWJzY3JpYmVyLnByb3RvdHlwZS50cnlSZXN1bHRTZWxlY3RvciA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHJlc3VsdFNlbGVjdG9yID0gX2EucmVzdWx0U2VsZWN0b3IsIGRlc3RpbmF0aW9uID0gX2EuZGVzdGluYXRpb247XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRTZWxlY3RvcihvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQocmVzdWx0KTtcbiAgICB9O1xuICAgIHJldHVybiBTd2l0Y2hNYXBUb1N1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpdGNoTWFwVG8uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMSA9IHJlcXVpcmUoJy4uL3V0aWwvQXJndW1lbnRPdXRPZlJhbmdlRXJyb3InKTtcbnZhciBFbXB0eU9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL29ic2VydmFibGUvRW1wdHlPYnNlcnZhYmxlJyk7XG4vKipcbiAqIEVtaXRzIG9ubHkgdGhlIGZpcnN0IGBjb3VudGAgdmFsdWVzIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5UYWtlcyB0aGUgZmlyc3QgYGNvdW50YCB2YWx1ZXMgZnJvbSB0aGUgc291cmNlLCB0aGVuXG4gKiBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvdGFrZS5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgdGFrZWAgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgb25seSB0aGUgZmlyc3QgYGNvdW50YCB2YWx1ZXMgZW1pdHRlZFxuICogYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJZiB0aGUgc291cmNlIGVtaXRzIGZld2VyIHRoYW4gYGNvdW50YCB2YWx1ZXMgdGhlblxuICogYWxsIG9mIGl0cyB2YWx1ZXMgYXJlIGVtaXR0ZWQuIEFmdGVyIHRoYXQsIGl0IGNvbXBsZXRlcywgcmVnYXJkbGVzcyBpZiB0aGVcbiAqIHNvdXJjZSBjb21wbGV0ZXMuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+VGFrZSB0aGUgZmlyc3QgNSBzZWNvbmRzIG9mIGFuIGluZmluaXRlIDEtc2Vjb25kIGludGVydmFsIE9ic2VydmFibGU8L2NhcHRpb24+XG4gKiB2YXIgaW50ZXJ2YWwgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICogdmFyIGZpdmUgPSBpbnRlcnZhbC50YWtlKDUpO1xuICogZml2ZS5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgdGFrZUxhc3R9XG4gKiBAc2VlIHtAbGluayB0YWtlVW50aWx9XG4gKiBAc2VlIHtAbGluayB0YWtlV2hpbGV9XG4gKiBAc2VlIHtAbGluayBza2lwfVxuICpcbiAqIEB0aHJvd3Mge0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yfSBXaGVuIHVzaW5nIGB0YWtlKGkpYCwgaXQgZGVsaXZlcnMgYW5cbiAqIEFyZ3VtZW50T3V0T3JSYW5nZUVycm9yIHRvIHRoZSBPYnNlcnZlcidzIGBlcnJvcmAgY2FsbGJhY2sgaWYgYGkgPCAwYC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGBuZXh0YCB2YWx1ZXMgdG8gZW1pdC5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBvbmx5IHRoZSBmaXJzdCBgY291bnRgXG4gKiB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUsIG9yIGFsbCBvZiB0aGUgdmFsdWVzIGZyb20gdGhlIHNvdXJjZVxuICogaWYgdGhlIHNvdXJjZSBlbWl0cyBmZXdlciB0aGFuIGBjb3VudGAgdmFsdWVzLlxuICogQG1ldGhvZCB0YWtlXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB0YWtlKGNvdW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVtcHR5T2JzZXJ2YWJsZV8xLkVtcHR5T2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBUYWtlT3BlcmF0b3IoY291bnQpKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnRzLnRha2UgPSB0YWtlO1xudmFyIFRha2VPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFrZU9wZXJhdG9yKHRvdGFsKSB7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgaWYgKHRoaXMudG90YWwgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBUYWtlT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBUYWtlU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnRvdGFsKSk7XG4gICAgfTtcbiAgICByZXR1cm4gVGFrZU9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgVGFrZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUYWtlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUYWtlU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgdG90YWwpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xuICAgIH1cbiAgICBUYWtlU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHRvdGFsID0gdGhpcy50b3RhbDtcbiAgICAgICAgdmFyIGNvdW50ID0gKyt0aGlzLmNvdW50O1xuICAgICAgICBpZiAoY291bnQgPD0gdG90YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY291bnQgPT09IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRha2VTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcl8xID0gcmVxdWlyZSgnLi4vdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcicpO1xudmFyIEVtcHR5T2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9FbXB0eU9ic2VydmFibGUnKTtcbi8qKlxuICogRW1pdHMgb25seSB0aGUgbGFzdCBgY291bnRgIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+UmVtZW1iZXJzIHRoZSBsYXRlc3QgYGNvdW50YCB2YWx1ZXMsIHRoZW4gZW1pdHMgdGhvc2VcbiAqIG9ubHkgd2hlbiB0aGUgc291cmNlIGNvbXBsZXRlcy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy90YWtlTGFzdC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgdGFrZUxhc3RgIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGF0IG1vc3QgdGhlIGxhc3QgYGNvdW50YCB2YWx1ZXNcbiAqIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJZiB0aGUgc291cmNlIGVtaXRzIGZld2VyIHRoYW4gYGNvdW50YFxuICogdmFsdWVzIHRoZW4gYWxsIG9mIGl0cyB2YWx1ZXMgYXJlIGVtaXR0ZWQuIFRoaXMgb3BlcmF0b3IgbXVzdCB3YWl0IHVudGlsIHRoZVxuICogYGNvbXBsZXRlYCBub3RpZmljYXRpb24gZW1pc3Npb24gZnJvbSB0aGUgc291cmNlIGluIG9yZGVyIHRvIGVtaXQgdGhlIGBuZXh0YFxuICogdmFsdWVzIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZSwgYmVjYXVzZSBvdGhlcndpc2UgaXQgaXMgaW1wb3NzaWJsZSB0byBrbm93XG4gKiB3aGV0aGVyIG9yIG5vdCBtb3JlIHZhbHVlcyB3aWxsIGJlIGVtaXR0ZWQgb24gdGhlIHNvdXJjZS4gRm9yIHRoaXMgcmVhc29uLFxuICogYWxsIHZhbHVlcyBhcmUgZW1pdHRlZCBzeW5jaHJvbm91c2x5LCBmb2xsb3dlZCBieSB0aGUgY29tcGxldGUgbm90aWZpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlRha2UgdGhlIGxhc3QgMyB2YWx1ZXMgb2YgYW4gT2JzZXJ2YWJsZSB3aXRoIG1hbnkgdmFsdWVzPC9jYXB0aW9uPlxuICogdmFyIG1hbnkgPSBSeC5PYnNlcnZhYmxlLnJhbmdlKDEsIDEwMCk7XG4gKiB2YXIgbGFzdFRocmVlID0gbWFueS50YWtlTGFzdCgzKTtcbiAqIGxhc3RUaHJlZS5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgdGFrZX1cbiAqIEBzZWUge0BsaW5rIHRha2VVbnRpbH1cbiAqIEBzZWUge0BsaW5rIHRha2VXaGlsZX1cbiAqIEBzZWUge0BsaW5rIHNraXB9XG4gKlxuICogQHRocm93cyB7QXJndW1lbnRPdXRPZlJhbmdlRXJyb3J9IFdoZW4gdXNpbmcgYHRha2VMYXN0KGkpYCwgaXQgZGVsaXZlcnMgYW5cbiAqIEFyZ3VtZW50T3V0T3JSYW5nZUVycm9yIHRvIHRoZSBPYnNlcnZlcidzIGBlcnJvcmAgY2FsbGJhY2sgaWYgYGkgPCAwYC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgVGhlIG1heGltdW0gbnVtYmVyIG9mIHZhbHVlcyB0byBlbWl0IGZyb20gdGhlIGVuZCBvZlxuICogdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhdCBtb3N0IHRoZSBsYXN0IGNvdW50XG4gKiB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUuXG4gKiBAbWV0aG9kIHRha2VMYXN0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB0YWtlTGFzdChjb3VudCkge1xuICAgIHJldHVybiBmdW5jdGlvbiB0YWtlTGFzdE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFbXB0eU9ic2VydmFibGVfMS5FbXB0eU9ic2VydmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgVGFrZUxhc3RPcGVyYXRvcihjb3VudCkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydHMudGFrZUxhc3QgPSB0YWtlTGFzdDtcbnZhciBUYWtlTGFzdE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUYWtlTGFzdE9wZXJhdG9yKHRvdGFsKSB7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgaWYgKHRoaXMudG90YWwgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JfMS5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBUYWtlTGFzdE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgVGFrZUxhc3RTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMudG90YWwpKTtcbiAgICB9O1xuICAgIHJldHVybiBUYWtlTGFzdE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgVGFrZUxhc3RTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGFrZUxhc3RTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRha2VMYXN0U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgdG90YWwpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMucmluZyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB9XG4gICAgVGFrZUxhc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmluZyA9IHRoaXMucmluZztcbiAgICAgICAgdmFyIHRvdGFsID0gdGhpcy50b3RhbDtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5jb3VudCsrO1xuICAgICAgICBpZiAocmluZy5sZW5ndGggPCB0b3RhbCkge1xuICAgICAgICAgICAgcmluZy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGNvdW50ICUgdG90YWw7XG4gICAgICAgICAgICByaW5nW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUYWtlTGFzdFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgdmFyIHRvdGFsID0gdGhpcy5jb3VudCA+PSB0aGlzLnRvdGFsID8gdGhpcy50b3RhbCA6IHRoaXMuY291bnQ7XG4gICAgICAgICAgICB2YXIgcmluZyA9IHRoaXMucmluZztcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBpZHggPSAoY291bnQrKykgJSB0b3RhbDtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHJpbmdbaWR4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBUYWtlTGFzdFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlTGFzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qKlxuICogRW1pdHMgdGhlIHZhbHVlcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB1bnRpbCBhIGBub3RpZmllcmBcbiAqIE9ic2VydmFibGUgZW1pdHMgYSB2YWx1ZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+TGV0cyB2YWx1ZXMgcGFzcyB1bnRpbCBhIHNlY29uZCBPYnNlcnZhYmxlLFxuICogYG5vdGlmaWVyYCwgZW1pdHMgc29tZXRoaW5nLiBUaGVuLCBpdCBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvdGFrZVVudGlsLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGB0YWtlVW50aWxgIHN1YnNjcmliZXMgYW5kIGJlZ2lucyBtaXJyb3JpbmcgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBJdCBhbHNvXG4gKiBtb25pdG9ycyBhIHNlY29uZCBPYnNlcnZhYmxlLCBgbm90aWZpZXJgIHRoYXQgeW91IHByb3ZpZGUuIElmIHRoZSBgbm90aWZpZXJgXG4gKiBlbWl0cyBhIHZhbHVlIG9yIGEgY29tcGxldGUgbm90aWZpY2F0aW9uLCB0aGUgb3V0cHV0IE9ic2VydmFibGUgc3RvcHNcbiAqIG1pcnJvcmluZyB0aGUgc291cmNlIE9ic2VydmFibGUgYW5kIGNvbXBsZXRlcy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5UaWNrIGV2ZXJ5IHNlY29uZCB1bnRpbCB0aGUgZmlyc3QgY2xpY2sgaGFwcGVuczwvY2FwdGlvbj5cbiAqIHZhciBpbnRlcnZhbCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGludGVydmFsLnRha2VVbnRpbChjbGlja3MpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayB0YWtlfVxuICogQHNlZSB7QGxpbmsgdGFrZUxhc3R9XG4gKiBAc2VlIHtAbGluayB0YWtlV2hpbGV9XG4gKiBAc2VlIHtAbGluayBza2lwfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZX0gbm90aWZpZXIgVGhlIE9ic2VydmFibGUgd2hvc2UgZmlyc3QgZW1pdHRlZCB2YWx1ZSB3aWxsXG4gKiBjYXVzZSB0aGUgb3V0cHV0IE9ic2VydmFibGUgb2YgYHRha2VVbnRpbGAgdG8gc3RvcCBlbWl0dGluZyB2YWx1ZXMgZnJvbSB0aGVcbiAqIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIHVudGlsIHN1Y2ggdGltZSBhcyBgbm90aWZpZXJgIGVtaXRzIGl0cyBmaXJzdCB2YWx1ZS5cbiAqIEBtZXRob2QgdGFrZVVudGlsXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB0YWtlVW50aWwobm90aWZpZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFRha2VVbnRpbE9wZXJhdG9yKG5vdGlmaWVyKSk7IH07XG59XG5leHBvcnRzLnRha2VVbnRpbCA9IHRha2VVbnRpbDtcbnZhciBUYWtlVW50aWxPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFrZVVudGlsT3BlcmF0b3Iobm90aWZpZXIpIHtcbiAgICAgICAgdGhpcy5ub3RpZmllciA9IG5vdGlmaWVyO1xuICAgIH1cbiAgICBUYWtlVW50aWxPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFRha2VVbnRpbFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5ub3RpZmllcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFRha2VVbnRpbE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgVGFrZVVudGlsU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRha2VVbnRpbFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGFrZVVudGlsU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgbm90aWZpZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLm5vdGlmaWVyID0gbm90aWZpZXI7XG4gICAgICAgIHRoaXMuYWRkKHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgbm90aWZpZXIpKTtcbiAgICB9XG4gICAgVGFrZVVudGlsU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBUYWtlVW50aWxTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH07XG4gICAgcmV0dXJuIFRha2VVbnRpbFN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZVVudGlsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaWJlcicpO1xuLyoqXG4gKiBFbWl0cyB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgc28gbG9uZyBhcyBlYWNoIHZhbHVlIHNhdGlzZmllc1xuICogdGhlIGdpdmVuIGBwcmVkaWNhdGVgLCBhbmQgdGhlbiBjb21wbGV0ZXMgYXMgc29vbiBhcyB0aGlzIGBwcmVkaWNhdGVgIGlzIG5vdFxuICogc2F0aXNmaWVkLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5UYWtlcyB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIG9ubHkgd2hpbGUgdGhleSBwYXNzIHRoZVxuICogY29uZGl0aW9uIGdpdmVuLiBXaGVuIHRoZSBmaXJzdCB2YWx1ZSBkb2VzIG5vdCBzYXRpc2Z5LCBpdCBjb21wbGV0ZXMuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvdGFrZVdoaWxlLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGB0YWtlV2hpbGVgIHN1YnNjcmliZXMgYW5kIGJlZ2lucyBtaXJyb3JpbmcgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLiBFYWNoIHZhbHVlXG4gKiBlbWl0dGVkIG9uIHRoZSBzb3VyY2UgaXMgZ2l2ZW4gdG8gdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYVxuICogYm9vbGVhbiwgcmVwcmVzZW50aW5nIGEgY29uZGl0aW9uIHRvIGJlIHNhdGlzZmllZCBieSB0aGUgc291cmNlIHZhbHVlcy4gVGhlXG4gKiBvdXRwdXQgT2JzZXJ2YWJsZSBlbWl0cyB0aGUgc291cmNlIHZhbHVlcyB1bnRpbCBzdWNoIHRpbWUgYXMgdGhlIGBwcmVkaWNhdGVgXG4gKiByZXR1cm5zIGZhbHNlLCBhdCB3aGljaCBwb2ludCBgdGFrZVdoaWxlYCBzdG9wcyBtaXJyb3JpbmcgdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZSBhbmQgY29tcGxldGVzIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IGNsaWNrIGV2ZW50cyBvbmx5IHdoaWxlIHRoZSBjbGllbnRYIHByb3BlcnR5IGlzIGdyZWF0ZXIgdGhhbiAyMDA8L2NhcHRpb24+XG4gKiB2YXIgY2xpY2tzID0gUnguT2JzZXJ2YWJsZS5mcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy50YWtlV2hpbGUoZXYgPT4gZXYuY2xpZW50WCA+IDIwMCk7XG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHRha2V9XG4gKiBAc2VlIHtAbGluayB0YWtlTGFzdH1cbiAqIEBzZWUge0BsaW5rIHRha2VVbnRpbH1cbiAqIEBzZWUge0BsaW5rIHNraXB9XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbih2YWx1ZTogVCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW59IHByZWRpY2F0ZSBBIGZ1bmN0aW9uIHRoYXRcbiAqIGV2YWx1YXRlcyBhIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGFuZCByZXR1cm5zIGEgYm9vbGVhbi5cbiAqIEFsc28gdGFrZXMgdGhlICh6ZXJvLWJhc2VkKSBpbmRleCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIHNvIGxvbmcgYXMgZWFjaCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbiBkZWZpbmVkIGJ5IHRoZVxuICogYHByZWRpY2F0ZWAsIHRoZW4gY29tcGxldGVzLlxuICogQG1ldGhvZCB0YWtlV2hpbGVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHRha2VXaGlsZShwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFRha2VXaGlsZU9wZXJhdG9yKHByZWRpY2F0ZSkpOyB9O1xufVxuZXhwb3J0cy50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG52YXIgVGFrZVdoaWxlT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRha2VXaGlsZU9wZXJhdG9yKHByZWRpY2F0ZSkge1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICB9XG4gICAgVGFrZVdoaWxlT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBUYWtlV2hpbGVTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMucHJlZGljYXRlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gVGFrZVdoaWxlT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBUYWtlV2hpbGVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGFrZVdoaWxlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUYWtlV2hpbGVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgfVxuICAgIFRha2VXaGlsZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnByZWRpY2F0ZSh2YWx1ZSwgdGhpcy5pbmRleCsrKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV4dE9yQ29tcGxldGUodmFsdWUsIHJlc3VsdCk7XG4gICAgfTtcbiAgICBUYWtlV2hpbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0T3JDb21wbGV0ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgcHJlZGljYXRlUmVzdWx0KSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGlmIChCb29sZWFuKHByZWRpY2F0ZVJlc3VsdCkpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRha2VXaGlsZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlV2hpbGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG4vKiB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBQZXJmb3JtIGEgc2lkZSBlZmZlY3QgZm9yIGV2ZXJ5IGVtaXNzaW9uIG9uIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYnV0IHJldHVyblxuICogYW4gT2JzZXJ2YWJsZSB0aGF0IGlzIGlkZW50aWNhbCB0byB0aGUgc291cmNlLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JbnRlcmNlcHRzIGVhY2ggZW1pc3Npb24gb24gdGhlIHNvdXJjZSBhbmQgcnVucyBhXG4gKiBmdW5jdGlvbiwgYnV0IHJldHVybnMgYW4gb3V0cHV0IHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUgc291cmNlIGFzIGxvbmcgYXMgZXJyb3JzIGRvbid0IG9jY3VyLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL2RvLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFJldHVybnMgYSBtaXJyb3JlZCBPYnNlcnZhYmxlIG9mIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgYnV0IG1vZGlmaWVkIHNvIHRoYXRcbiAqIHRoZSBwcm92aWRlZCBPYnNlcnZlciBpcyBjYWxsZWQgdG8gcGVyZm9ybSBhIHNpZGUgZWZmZWN0IGZvciBldmVyeSB2YWx1ZSxcbiAqIGVycm9yLCBhbmQgY29tcGxldGlvbiBlbWl0dGVkIGJ5IHRoZSBzb3VyY2UuIEFueSBlcnJvcnMgdGhhdCBhcmUgdGhyb3duIGluXG4gKiB0aGUgYWZvcmVtZW50aW9uZWQgT2JzZXJ2ZXIgb3IgaGFuZGxlcnMgYXJlIHNhZmVseSBzZW50IGRvd24gdGhlIGVycm9yIHBhdGhcbiAqIG9mIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBUaGlzIG9wZXJhdG9yIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHlvdXIgT2JzZXJ2YWJsZXMgZm9yIHRoZSBjb3JyZWN0IHZhbHVlc1xuICogb3IgcGVyZm9ybWluZyBvdGhlciBzaWRlIGVmZmVjdHMuXG4gKlxuICogTm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgdG8gYSBgc3Vic2NyaWJlYCBvbiB0aGUgT2JzZXJ2YWJsZS4gSWYgdGhlIE9ic2VydmFibGVcbiAqIHJldHVybmVkIGJ5IGBkb2AgaXMgbm90IHN1YnNjcmliZWQsIHRoZSBzaWRlIGVmZmVjdHMgc3BlY2lmaWVkIGJ5IHRoZVxuICogT2JzZXJ2ZXIgd2lsbCBuZXZlciBoYXBwZW4uIGBkb2AgdGhlcmVmb3JlIHNpbXBseSBzcGllcyBvbiBleGlzdGluZ1xuICogZXhlY3V0aW9uLCBpdCBkb2VzIG5vdCB0cmlnZ2VyIGFuIGV4ZWN1dGlvbiB0byBoYXBwZW4gbGlrZSBgc3Vic2NyaWJlYCBkb2VzLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPk1hcCBldmVyeSBjbGljayB0byB0aGUgY2xpZW50WCBwb3NpdGlvbiBvZiB0aGF0IGNsaWNrLCB3aGlsZSBhbHNvIGxvZ2dpbmcgdGhlIGNsaWNrIGV2ZW50PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBwb3NpdGlvbnMgPSBjbGlja3NcbiAqICAgLmRvKGV2ID0+IGNvbnNvbGUubG9nKGV2KSlcbiAqICAgLm1hcChldiA9PiBldi5jbGllbnRYKTtcbiAqIHBvc2l0aW9ucy5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgbWFwfVxuICogQHNlZSB7QGxpbmsgc3Vic2NyaWJlfVxuICpcbiAqIEBwYXJhbSB7T2JzZXJ2ZXJ8ZnVuY3Rpb259IFtuZXh0T3JPYnNlcnZlcl0gQSBub3JtYWwgT2JzZXJ2ZXIgb2JqZWN0IG9yIGFcbiAqIGNhbGxiYWNrIGZvciBgbmV4dGAuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZXJyb3JdIENhbGxiYWNrIGZvciBlcnJvcnMgaW4gdGhlIHNvdXJjZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjb21wbGV0ZV0gQ2FsbGJhY2sgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBzb3VyY2UuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlfSBBbiBPYnNlcnZhYmxlIGlkZW50aWNhbCB0byB0aGUgc291cmNlLCBidXQgcnVucyB0aGVcbiAqIHNwZWNpZmllZCBPYnNlcnZlciBvciBjYWxsYmFjayhzKSBmb3IgZWFjaCBpdGVtLlxuICogQG5hbWUgdGFwXG4gKi9cbmZ1bmN0aW9uIHRhcChuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHRhcE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgRG9PcGVyYXRvcihuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMudGFwID0gdGFwO1xudmFyIERvT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERvT3BlcmF0b3IobmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB0aGlzLm5leHRPck9ic2VydmVyID0gbmV4dE9yT2JzZXJ2ZXI7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSA9IGNvbXBsZXRlO1xuICAgIH1cbiAgICBEb09wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRG9TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMubmV4dE9yT2JzZXJ2ZXIsIHRoaXMuZXJyb3IsIHRoaXMuY29tcGxldGUpKTtcbiAgICB9O1xuICAgIHJldHVybiBEb09wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgRG9TdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRG9TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERvU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgbmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHZhciBzYWZlU3Vic2NyaWJlciA9IG5ldyBTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcihuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgc2FmZVN1YnNjcmliZXIuc3luY0Vycm9yVGhyb3dhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZGQoc2FmZVN1YnNjcmliZXIpO1xuICAgICAgICB0aGlzLnNhZmVTdWJzY3JpYmVyID0gc2FmZVN1YnNjcmliZXI7XG4gICAgfVxuICAgIERvU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHNhZmVTdWJzY3JpYmVyID0gdGhpcy5zYWZlU3Vic2NyaWJlcjtcbiAgICAgICAgc2FmZVN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIGlmIChzYWZlU3Vic2NyaWJlci5zeW5jRXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Ioc2FmZVN1YnNjcmliZXIuc3luY0Vycm9yVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRG9TdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBzYWZlU3Vic2NyaWJlciA9IHRoaXMuc2FmZVN1YnNjcmliZXI7XG4gICAgICAgIHNhZmVTdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgIGlmIChzYWZlU3Vic2NyaWJlci5zeW5jRXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Ioc2FmZVN1YnNjcmliZXIuc3luY0Vycm9yVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEb1N1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNhZmVTdWJzY3JpYmVyID0gdGhpcy5zYWZlU3Vic2NyaWJlcjtcbiAgICAgICAgc2FmZVN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgaWYgKHNhZmVTdWJzY3JpYmVyLnN5bmNFcnJvclRocm93bikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihzYWZlU3Vic2NyaWJlci5zeW5jRXJyb3JWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEb1N1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG5leHBvcnRzLmRlZmF1bHRUaHJvdHRsZUNvbmZpZyA9IHtcbiAgICBsZWFkaW5nOiB0cnVlLFxuICAgIHRyYWlsaW5nOiBmYWxzZVxufTtcbi8qKlxuICogRW1pdHMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdGhlbiBpZ25vcmVzIHN1YnNlcXVlbnQgc291cmNlXG4gKiB2YWx1ZXMgZm9yIGEgZHVyYXRpb24gZGV0ZXJtaW5lZCBieSBhbm90aGVyIE9ic2VydmFibGUsIHRoZW4gcmVwZWF0cyB0aGlzXG4gKiBwcm9jZXNzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIHRocm90dGxlVGltZX0sIGJ1dCB0aGUgc2lsZW5jaW5nXG4gKiBkdXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IGEgc2Vjb25kIE9ic2VydmFibGUuPC9zcGFuPlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWcvdGhyb3R0bGUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYHRocm90dGxlYCBlbWl0cyB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZVxuICogd2hlbiBpdHMgaW50ZXJuYWwgdGltZXIgaXMgZGlzYWJsZWQsIGFuZCBpZ25vcmVzIHNvdXJjZSB2YWx1ZXMgd2hlbiB0aGUgdGltZXJcbiAqIGlzIGVuYWJsZWQuIEluaXRpYWxseSwgdGhlIHRpbWVyIGlzIGRpc2FibGVkLiBBcyBzb29uIGFzIHRoZSBmaXJzdCBzb3VyY2VcbiAqIHZhbHVlIGFycml2ZXMsIGl0IGlzIGZvcndhcmRlZCB0byB0aGUgb3V0cHV0IE9ic2VydmFibGUsIGFuZCB0aGVuIHRoZSB0aW1lclxuICogaXMgZW5hYmxlZCBieSBjYWxsaW5nIHRoZSBgZHVyYXRpb25TZWxlY3RvcmAgZnVuY3Rpb24gd2l0aCB0aGUgc291cmNlIHZhbHVlLFxuICogd2hpY2ggcmV0dXJucyB0aGUgXCJkdXJhdGlvblwiIE9ic2VydmFibGUuIFdoZW4gdGhlIGR1cmF0aW9uIE9ic2VydmFibGUgZW1pdHMgYVxuICogdmFsdWUgb3IgY29tcGxldGVzLCB0aGUgdGltZXIgaXMgZGlzYWJsZWQsIGFuZCB0aGlzIHByb2Nlc3MgcmVwZWF0cyBmb3IgdGhlXG4gKiBuZXh0IHNvdXJjZSB2YWx1ZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IGNsaWNrcyBhdCBhIHJhdGUgb2YgYXQgbW9zdCBvbmUgY2xpY2sgcGVyIHNlY29uZDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLnRocm90dGxlKGV2ID0+IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCkpO1xuICogcmVzdWx0LnN1YnNjcmliZSh4ID0+IGNvbnNvbGUubG9nKHgpKTtcbiAqXG4gKiBAc2VlIHtAbGluayBhdWRpdH1cbiAqIEBzZWUge0BsaW5rIGRlYm91bmNlfVxuICogQHNlZSB7QGxpbmsgZGVsYXlXaGVufVxuICogQHNlZSB7QGxpbmsgc2FtcGxlfVxuICogQHNlZSB7QGxpbmsgdGhyb3R0bGVUaW1lfVxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24odmFsdWU6IFQpOiBTdWJzY3JpYmFibGVPclByb21pc2V9IGR1cmF0aW9uU2VsZWN0b3IgQSBmdW5jdGlvblxuICogdGhhdCByZWNlaXZlcyBhIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBPYnNlcnZhYmxlLCBmb3IgY29tcHV0aW5nIHRoZSBzaWxlbmNpbmdcbiAqIGR1cmF0aW9uIGZvciBlYWNoIHNvdXJjZSB2YWx1ZSwgcmV0dXJuZWQgYXMgYW4gT2JzZXJ2YWJsZSBvciBhIFByb21pc2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIGEgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gZGVmaW5lIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBiZWhhdmlvci4gRGVmYXVsdHNcbiAqIHRvIGB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiBmYWxzZSB9YC5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBwZXJmb3JtcyB0aGUgdGhyb3R0bGUgb3BlcmF0aW9uIHRvXG4gKiBsaW1pdCB0aGUgcmF0ZSBvZiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlLlxuICogQG1ldGhvZCB0aHJvdHRsZVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZHVyYXRpb25TZWxlY3RvciwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IGV4cG9ydHMuZGVmYXVsdFRocm90dGxlQ29uZmlnOyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBUaHJvdHRsZU9wZXJhdG9yKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZy5sZWFkaW5nLCBjb25maWcudHJhaWxpbmcpKTsgfTtcbn1cbmV4cG9ydHMudGhyb3R0bGUgPSB0aHJvdHRsZTtcbnZhciBUaHJvdHRsZU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaHJvdHRsZU9wZXJhdG9yKGR1cmF0aW9uU2VsZWN0b3IsIGxlYWRpbmcsIHRyYWlsaW5nKSB7XG4gICAgICAgIHRoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgICAgIHRoaXMubGVhZGluZyA9IGxlYWRpbmc7XG4gICAgICAgIHRoaXMudHJhaWxpbmcgPSB0cmFpbGluZztcbiAgICB9XG4gICAgVGhyb3R0bGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFRocm90dGxlU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmR1cmF0aW9uU2VsZWN0b3IsIHRoaXMubGVhZGluZywgdGhpcy50cmFpbGluZykpO1xuICAgIH07XG4gICAgcmV0dXJuIFRocm90dGxlT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFRocm90dGxlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRocm90dGxlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUaHJvdHRsZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIGR1cmF0aW9uU2VsZWN0b3IsIF9sZWFkaW5nLCBfdHJhaWxpbmcpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIHRoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgICAgIHRoaXMuX2xlYWRpbmcgPSBfbGVhZGluZztcbiAgICAgICAgdGhpcy5fdHJhaWxpbmcgPSBfdHJhaWxpbmc7XG4gICAgICAgIHRoaXMuX2hhc1RyYWlsaW5nVmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gICAgVGhyb3R0bGVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy50aHJvdHRsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90cmFpbGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc1RyYWlsaW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWlsaW5nVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHRoaXMudHJ5RHVyYXRpb25TZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLnRocm90dGxlZCA9IHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgZHVyYXRpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9sZWFkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhaWxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFzVHJhaWxpbmdWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWlsaW5nVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRocm90dGxlU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5RHVyYXRpb25TZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHVyYXRpb25TZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBUaHJvdHRsZVN1YnNjcmliZXIucHJvdG90eXBlLl91bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgdGhyb3R0bGVkID0gX2EudGhyb3R0bGVkLCBfdHJhaWxpbmdWYWx1ZSA9IF9hLl90cmFpbGluZ1ZhbHVlLCBfaGFzVHJhaWxpbmdWYWx1ZSA9IF9hLl9oYXNUcmFpbGluZ1ZhbHVlLCBfdHJhaWxpbmcgPSBfYS5fdHJhaWxpbmc7XG4gICAgICAgIHRoaXMuX3RyYWlsaW5nVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLl9oYXNUcmFpbGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aHJvdHRsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRocm90dGxlZCk7XG4gICAgICAgICAgICB0aGlzLnRocm90dGxlZCA9IG51bGw7XG4gICAgICAgICAgICB0aHJvdHRsZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVGhyb3R0bGVTdWJzY3JpYmVyLnByb3RvdHlwZS5fc2VuZFRyYWlsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBkZXN0aW5hdGlvbiA9IF9hLmRlc3RpbmF0aW9uLCB0aHJvdHRsZWQgPSBfYS50aHJvdHRsZWQsIF90cmFpbGluZyA9IF9hLl90cmFpbGluZywgX3RyYWlsaW5nVmFsdWUgPSBfYS5fdHJhaWxpbmdWYWx1ZSwgX2hhc1RyYWlsaW5nVmFsdWUgPSBfYS5faGFzVHJhaWxpbmdWYWx1ZTtcbiAgICAgICAgaWYgKHRocm90dGxlZCAmJiBfdHJhaWxpbmcgJiYgX2hhc1RyYWlsaW5nVmFsdWUpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQoX3RyYWlsaW5nVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fdHJhaWxpbmdWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9oYXNUcmFpbGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRocm90dGxlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLl9zZW5kVHJhaWxpbmcoKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIFRocm90dGxlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3NlbmRUcmFpbGluZygpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFRocm90dGxlU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG52YXIgdGhyb3R0bGVfMSA9IHJlcXVpcmUoJy4vdGhyb3R0bGUnKTtcbi8qKlxuICogRW1pdHMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSwgdGhlbiBpZ25vcmVzIHN1YnNlcXVlbnQgc291cmNlXG4gKiB2YWx1ZXMgZm9yIGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzLCB0aGVuIHJlcGVhdHMgdGhpcyBwcm9jZXNzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5MZXRzIGEgdmFsdWUgcGFzcywgdGhlbiBpZ25vcmVzIHNvdXJjZSB2YWx1ZXMgZm9yIHRoZVxuICogbmV4dCBgZHVyYXRpb25gIG1pbGxpc2Vjb25kcy48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy90aHJvdHRsZVRpbWUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogYHRocm90dGxlVGltZWAgZW1pdHMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyBvbiB0aGUgb3V0cHV0IE9ic2VydmFibGVcbiAqIHdoZW4gaXRzIGludGVybmFsIHRpbWVyIGlzIGRpc2FibGVkLCBhbmQgaWdub3JlcyBzb3VyY2UgdmFsdWVzIHdoZW4gdGhlIHRpbWVyXG4gKiBpcyBlbmFibGVkLiBJbml0aWFsbHksIHRoZSB0aW1lciBpcyBkaXNhYmxlZC4gQXMgc29vbiBhcyB0aGUgZmlyc3Qgc291cmNlXG4gKiB2YWx1ZSBhcnJpdmVzLCBpdCBpcyBmb3J3YXJkZWQgdG8gdGhlIG91dHB1dCBPYnNlcnZhYmxlLCBhbmQgdGhlbiB0aGUgdGltZXJcbiAqIGlzIGVuYWJsZWQuIEFmdGVyIGBkdXJhdGlvbmAgbWlsbGlzZWNvbmRzIChvciB0aGUgdGltZSB1bml0IGRldGVybWluZWRcbiAqIGludGVybmFsbHkgYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgKSBoYXMgcGFzc2VkLCB0aGUgdGltZXIgaXMgZGlzYWJsZWQsXG4gKiBhbmQgdGhpcyBwcm9jZXNzIHJlcGVhdHMgZm9yIHRoZSBuZXh0IHNvdXJjZSB2YWx1ZS4gT3B0aW9uYWxseSB0YWtlcyBhXG4gKiB7QGxpbmsgSVNjaGVkdWxlcn0gZm9yIG1hbmFnaW5nIHRpbWVycy5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IGNsaWNrcyBhdCBhIHJhdGUgb2YgYXQgbW9zdCBvbmUgY2xpY2sgcGVyIHNlY29uZDwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLnRocm90dGxlVGltZSgxMDAwKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgYXVkaXRUaW1lfVxuICogQHNlZSB7QGxpbmsgZGVib3VuY2VUaW1lfVxuICogQHNlZSB7QGxpbmsgZGVsYXl9XG4gKiBAc2VlIHtAbGluayBzYW1wbGVUaW1lfVxuICogQHNlZSB7QGxpbmsgdGhyb3R0bGV9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIFRpbWUgdG8gd2FpdCBiZWZvcmUgZW1pdHRpbmcgYW5vdGhlciB2YWx1ZSBhZnRlclxuICogZW1pdHRpbmcgdGhlIGxhc3QgdmFsdWUsIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcyBvciB0aGUgdGltZSB1bml0IGRldGVybWluZWRcbiAqIGludGVybmFsbHkgYnkgdGhlIG9wdGlvbmFsIGBzY2hlZHVsZXJgLlxuICogQHBhcmFtIHtTY2hlZHVsZXJ9IFtzY2hlZHVsZXI9YXN5bmNdIFRoZSB7QGxpbmsgSVNjaGVkdWxlcn0gdG8gdXNlIGZvclxuICogbWFuYWdpbmcgdGhlIHRpbWVycyB0aGF0IGhhbmRsZSB0aGUgdGhyb3R0bGluZy5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IEFuIE9ic2VydmFibGUgdGhhdCBwZXJmb3JtcyB0aGUgdGhyb3R0bGUgb3BlcmF0aW9uIHRvXG4gKiBsaW1pdCB0aGUgcmF0ZSBvZiBlbWlzc2lvbnMgZnJvbSB0aGUgc291cmNlLlxuICogQG1ldGhvZCB0aHJvdHRsZVRpbWVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlVGltZShkdXJhdGlvbiwgc2NoZWR1bGVyLCBjb25maWcpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSB0aHJvdHRsZV8xLmRlZmF1bHRUaHJvdHRsZUNvbmZpZzsgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgVGhyb3R0bGVUaW1lT3BlcmF0b3IoZHVyYXRpb24sIHNjaGVkdWxlciwgY29uZmlnLmxlYWRpbmcsIGNvbmZpZy50cmFpbGluZykpOyB9O1xufVxuZXhwb3J0cy50aHJvdHRsZVRpbWUgPSB0aHJvdHRsZVRpbWU7XG52YXIgVGhyb3R0bGVUaW1lT3BlcmF0b3IgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRocm90dGxlVGltZU9wZXJhdG9yKGR1cmF0aW9uLCBzY2hlZHVsZXIsIGxlYWRpbmcsIHRyYWlsaW5nKSB7XG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIHRoaXMubGVhZGluZyA9IGxlYWRpbmc7XG4gICAgICAgIHRoaXMudHJhaWxpbmcgPSB0cmFpbGluZztcbiAgICB9XG4gICAgVGhyb3R0bGVUaW1lT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBUaHJvdHRsZVRpbWVTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuZHVyYXRpb24sIHRoaXMuc2NoZWR1bGVyLCB0aGlzLmxlYWRpbmcsIHRoaXMudHJhaWxpbmcpKTtcbiAgICB9O1xuICAgIHJldHVybiBUaHJvdHRsZVRpbWVPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFRocm90dGxlVGltZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUaHJvdHRsZVRpbWVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRocm90dGxlVGltZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzY2hlZHVsZXIsIGxlYWRpbmcsIHRyYWlsaW5nKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5sZWFkaW5nID0gbGVhZGluZztcbiAgICAgICAgdGhpcy50cmFpbGluZyA9IHRyYWlsaW5nO1xuICAgICAgICB0aGlzLl9oYXNUcmFpbGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3RyYWlsaW5nVmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICBUaHJvdHRsZVRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy50aHJvdHRsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYWlsaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhaWxpbmdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc1RyYWlsaW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGQodGhpcy50aHJvdHRsZWQgPSB0aGlzLnNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaE5leHQsIHRoaXMuZHVyYXRpb24sIHsgc3Vic2NyaWJlcjogdGhpcyB9KSk7XG4gICAgICAgICAgICBpZiAodGhpcy5sZWFkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgVGhyb3R0bGVUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuY2xlYXJUaHJvdHRsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRocm90dGxlZCA9IHRoaXMudGhyb3R0bGVkO1xuICAgICAgICBpZiAodGhyb3R0bGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmFpbGluZyAmJiB0aGlzLl9oYXNUcmFpbGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMuX3RyYWlsaW5nVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWlsaW5nVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc1RyYWlsaW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm90dGxlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUodGhyb3R0bGVkKTtcbiAgICAgICAgICAgIHRoaXMudGhyb3R0bGVkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRocm90dGxlVGltZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBkaXNwYXRjaE5leHQoYXJnKSB7XG4gICAgdmFyIHN1YnNjcmliZXIgPSBhcmcuc3Vic2NyaWJlcjtcbiAgICBzdWJzY3JpYmVyLmNsZWFyVGhyb3R0bGUoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxlVGltZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG5mdW5jdGlvbiB0aW1lSW50ZXJ2YWwoc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmM7IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFRpbWVJbnRlcnZhbE9wZXJhdG9yKHNjaGVkdWxlcikpOyB9O1xufVxuZXhwb3J0cy50aW1lSW50ZXJ2YWwgPSB0aW1lSW50ZXJ2YWw7XG52YXIgVGltZUludGVydmFsID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaW1lSW50ZXJ2YWwodmFsdWUsIGludGVydmFsKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IGludGVydmFsO1xuICAgIH1cbiAgICByZXR1cm4gVGltZUludGVydmFsO1xufSgpKTtcbmV4cG9ydHMuVGltZUludGVydmFsID0gVGltZUludGVydmFsO1xuO1xudmFyIFRpbWVJbnRlcnZhbE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaW1lSW50ZXJ2YWxPcGVyYXRvcihzY2hlZHVsZXIpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIFRpbWVJbnRlcnZhbE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFRpbWVJbnRlcnZhbFN1YnNjcmliZXIob2JzZXJ2ZXIsIHRoaXMuc2NoZWR1bGVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gVGltZUludGVydmFsT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBUaW1lSW50ZXJ2YWxTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVGltZUludGVydmFsU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUaW1lSW50ZXJ2YWxTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IDA7XG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgfVxuICAgIFRpbWVJbnRlcnZhbFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBub3cgPSB0aGlzLnNjaGVkdWxlci5ub3coKTtcbiAgICAgICAgdmFyIHNwYW4gPSBub3cgLSB0aGlzLmxhc3RUaW1lO1xuICAgICAgICB0aGlzLmxhc3RUaW1lID0gbm93O1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQobmV3IFRpbWVJbnRlcnZhbCh2YWx1ZSwgc3BhbikpO1xuICAgIH07XG4gICAgcmV0dXJuIFRpbWVJbnRlcnZhbFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lSW50ZXJ2YWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG52YXIgaXNEYXRlXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzRGF0ZScpO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBUaW1lb3V0RXJyb3JfMSA9IHJlcXVpcmUoJy4uL3V0aWwvVGltZW91dEVycm9yJyk7XG4vKipcbiAqXG4gKiBFcnJvcnMgaWYgT2JzZXJ2YWJsZSBkb2VzIG5vdCBlbWl0IGEgdmFsdWUgaW4gZ2l2ZW4gdGltZSBzcGFuLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5UaW1lb3V0cyBvbiBPYnNlcnZhYmxlIHRoYXQgZG9lc24ndCBlbWl0IHZhbHVlcyBmYXN0IGVub3VnaC48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy90aW1lb3V0LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGB0aW1lb3V0YCBvcGVyYXRvciBhY2NlcHRzIGFzIGFuIGFyZ3VtZW50IGVpdGhlciBhIG51bWJlciBvciBhIERhdGUuXG4gKlxuICogSWYgbnVtYmVyIHdhcyBwcm92aWRlZCwgaXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgYmVoYXZlcyBsaWtlIGEgc291cmNlXG4gKiBPYnNlcnZhYmxlLCB1bmxlc3MgdGhlcmUgaXMgYSBwZXJpb2Qgb2YgdGltZSB3aGVyZSB0aGVyZSBpcyBubyB2YWx1ZSBlbWl0dGVkLlxuICogU28gaWYgeW91IHByb3ZpZGUgYDEwMGAgYXMgYXJndW1lbnQgYW5kIGZpcnN0IHZhbHVlIGNvbWVzIGFmdGVyIDUwbXMgZnJvbVxuICogdGhlIG1vbWVudCBvZiBzdWJzY3JpcHRpb24sIHRoaXMgdmFsdWUgd2lsbCBiZSBzaW1wbHkgcmUtZW1pdHRlZCBieSB0aGUgcmVzdWx0aW5nXG4gKiBPYnNlcnZhYmxlLiBJZiBob3dldmVyIGFmdGVyIHRoYXQgMTAwbXMgcGFzc2VzIHdpdGhvdXQgYSBzZWNvbmQgdmFsdWUgYmVpbmcgZW1pdHRlZCxcbiAqIHN0cmVhbSB3aWxsIGVuZCB3aXRoIGFuIGVycm9yIGFuZCBzb3VyY2UgT2JzZXJ2YWJsZSB3aWxsIGJlIHVuc3Vic2NyaWJlZC5cbiAqIFRoZXNlIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRocm91Z2hvdXQgd2hvbGUgbGlmZWN5Y2xlIG9mIE9ic2VydmFibGUgLSBmcm9tIHRoZSBtb21lbnRcbiAqIGl0IHdhcyBzdWJzY3JpYmVkIHRvLCB1bnRpbCBpdCBjb21wbGV0ZXMgb3IgZXJyb3JzIGl0c2VsZi4gVGh1cyBldmVyeSB2YWx1ZSBtdXN0IGJlXG4gKiBlbWl0dGVkIHdpdGhpbiBzcGVjaWZpZWQgcGVyaW9kIHNpbmNlIHByZXZpb3VzIHZhbHVlLlxuICpcbiAqIElmIHByb3ZpZGVkIGFyZ3VtZW50IHdhcyBEYXRlLCByZXR1cm5lZCBPYnNlcnZhYmxlIGJlaGF2ZXMgZGlmZmVyZW50bHkuIEl0IHRocm93c1xuICogaWYgT2JzZXJ2YWJsZSBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBwcm92aWRlZCBEYXRlLiBUaGlzIG1lYW5zIHRoYXQgcGVyaW9kcyBiZXR3ZWVuXG4gKiBlbWlzc2lvbiBvZiBwYXJ0aWN1bGFyIHZhbHVlcyBkbyBub3QgbWF0dGVyIGluIHRoaXMgY2FzZS4gSWYgT2JzZXJ2YWJsZSBkaWQgbm90IGNvbXBsZXRlXG4gKiBiZWZvcmUgcHJvdmlkZWQgRGF0ZSwgc291cmNlIE9ic2VydmFibGUgd2lsbCBiZSB1bnN1YnNjcmliZWQuIE90aGVyIHRoYW4gdGhhdCwgcmVzdWx0aW5nXG4gKiBzdHJlYW0gYmVoYXZlcyBqdXN0IGFzIHNvdXJjZSBPYnNlcnZhYmxlLlxuICpcbiAqIGB0aW1lb3V0YCBhY2NlcHRzIGFsc28gYSBTY2hlZHVsZXIgYXMgYSBzZWNvbmQgcGFyYW1ldGVyLiBJdCBpcyB1c2VkIHRvIHNjaGVkdWxlIG1vbWVudCAob3IgbW9tZW50cylcbiAqIHdoZW4gcmV0dXJuZWQgT2JzZXJ2YWJsZSB3aWxsIGNoZWNrIGlmIHNvdXJjZSBzdHJlYW0gZW1pdHRlZCB2YWx1ZSBvciBjb21wbGV0ZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q2hlY2sgaWYgdGlja3MgYXJlIGVtaXR0ZWQgd2l0aGluIGNlcnRhaW4gdGltZXNwYW48L2NhcHRpb24+XG4gKiBjb25zdCBzZWNvbmRzID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKTtcbiAqXG4gKiBzZWNvbmRzLnRpbWVvdXQoMTEwMCkgLy8gTGV0J3MgdXNlIGJpZ2dlciB0aW1lc3BhbiB0byBiZSBzYWZlLFxuICogICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIGBpbnRlcnZhbGAgbWlnaHQgZmlyZSBhIGJpdCBsYXRlciB0aGVuIHNjaGVkdWxlZC5cbiAqIC5zdWJzY3JpYmUoXG4gKiAgICAgdmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpLCAvLyBXaWxsIGVtaXQgbnVtYmVycyBqdXN0IGFzIHJlZ3VsYXIgYGludGVydmFsYCB3b3VsZC5cbiAqICAgICBlcnIgPT4gY29uc29sZS5sb2coZXJyKSAvLyBXaWxsIG5ldmVyIGJlIGNhbGxlZC5cbiAqICk7XG4gKlxuICogc2Vjb25kcy50aW1lb3V0KDkwMCkuc3Vic2NyaWJlKFxuICogICAgIHZhbHVlID0+IGNvbnNvbGUubG9nKHZhbHVlKSwgLy8gV2lsbCBuZXZlciBiZSBjYWxsZWQuXG4gKiAgICAgZXJyID0+IGNvbnNvbGUubG9nKGVycikgLy8gV2lsbCBlbWl0IGVycm9yIGJlZm9yZSBldmVuIGZpcnN0IHZhbHVlIGlzIGVtaXR0ZWQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgaXQgZGlkIG5vdCBhcnJpdmUgd2l0aGluIDkwMG1zIHBlcmlvZC5cbiAqICk7XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIERhdGUgdG8gY2hlY2sgaWYgT2JzZXJ2YWJsZSBjb21wbGV0ZWQ8L2NhcHRpb24+XG4gKiBjb25zdCBzZWNvbmRzID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKTtcbiAqXG4gKiBzZWNvbmRzLnRpbWVvdXQobmV3IERhdGUoXCJEZWNlbWJlciAxNywgMjAyMCAwMzoyNDowMFwiKSlcbiAqIC5zdWJzY3JpYmUoXG4gKiAgICAgdmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpLCAvLyBXaWxsIGVtaXQgdmFsdWVzIGFzIHJlZ3VsYXIgYGludGVydmFsYCB3b3VsZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW50aWwgRGVjZW1iZXIgMTcsIDIwMjAgYXQgMDM6MjQ6MDAuXG4gKiAgICAgZXJyID0+IGNvbnNvbGUubG9nKGVycikgLy8gT24gRGVjZW1iZXIgMTcsIDIwMjAgYXQgMDM6MjQ6MDAgaXQgd2lsbCBlbWl0IGFuIGVycm9yLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIE9ic2VydmFibGUgZGlkIG5vdCBjb21wbGV0ZSBieSB0aGVuLlxuICogKTtcbiAqXG4gKiBAc2VlIHtAbGluayB0aW1lb3V0V2l0aH1cbiAqXG4gKiBAcGFyYW0ge251bWJlcnxEYXRlfSBkdWUgTnVtYmVyIHNwZWNpZnlpbmcgcGVyaW9kIHdpdGhpbiB3aGljaCBPYnNlcnZhYmxlIG11c3QgZW1pdCB2YWx1ZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBEYXRlIHNwZWNpZnlpbmcgYmVmb3JlIHdoZW4gT2JzZXJ2YWJsZSBzaG91bGQgY29tcGxldGVcbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyXSBTY2hlZHVsZXIgY29udHJvbGxpbmcgd2hlbiB0aW1lb3V0IGNoZWNrcyBvY2N1ci5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IE9ic2VydmFibGUgdGhhdCBtaXJyb3JzIGJlaGF2aW91ciBvZiBzb3VyY2UsIHVubGVzcyB0aW1lb3V0IGNoZWNrcyBmYWlsLlxuICogQG1ldGhvZCB0aW1lb3V0XG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB0aW1lb3V0KGR1ZSwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jXzEuYXN5bmM7IH1cbiAgICB2YXIgYWJzb2x1dGVUaW1lb3V0ID0gaXNEYXRlXzEuaXNEYXRlKGR1ZSk7XG4gICAgdmFyIHdhaXRGb3IgPSBhYnNvbHV0ZVRpbWVvdXQgPyAoK2R1ZSAtIHNjaGVkdWxlci5ub3coKSkgOiBNYXRoLmFicyhkdWUpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgVGltZW91dE9wZXJhdG9yKHdhaXRGb3IsIGFic29sdXRlVGltZW91dCwgc2NoZWR1bGVyLCBuZXcgVGltZW91dEVycm9yXzEuVGltZW91dEVycm9yKCkpKTsgfTtcbn1cbmV4cG9ydHMudGltZW91dCA9IHRpbWVvdXQ7XG52YXIgVGltZW91dE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaW1lb3V0T3BlcmF0b3Iod2FpdEZvciwgYWJzb2x1dGVUaW1lb3V0LCBzY2hlZHVsZXIsIGVycm9ySW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy53YWl0Rm9yID0gd2FpdEZvcjtcbiAgICAgICAgdGhpcy5hYnNvbHV0ZVRpbWVvdXQgPSBhYnNvbHV0ZVRpbWVvdXQ7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICB0aGlzLmVycm9ySW5zdGFuY2UgPSBlcnJvckluc3RhbmNlO1xuICAgIH1cbiAgICBUaW1lb3V0T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBUaW1lb3V0U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmFic29sdXRlVGltZW91dCwgdGhpcy53YWl0Rm9yLCB0aGlzLnNjaGVkdWxlciwgdGhpcy5lcnJvckluc3RhbmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gVGltZW91dE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgVGltZW91dFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUaW1lb3V0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUaW1lb3V0U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgYWJzb2x1dGVUaW1lb3V0LCB3YWl0Rm9yLCBzY2hlZHVsZXIsIGVycm9ySW5zdGFuY2UpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmFic29sdXRlVGltZW91dCA9IGFic29sdXRlVGltZW91dDtcbiAgICAgICAgdGhpcy53YWl0Rm9yID0gd2FpdEZvcjtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIHRoaXMuZXJyb3JJbnN0YW5jZSA9IGVycm9ySW5zdGFuY2U7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVRpbWVvdXQoKTtcbiAgICB9XG4gICAgVGltZW91dFN1YnNjcmliZXIuZGlzcGF0Y2hUaW1lb3V0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcihzdWJzY3JpYmVyLmVycm9ySW5zdGFuY2UpO1xuICAgIH07XG4gICAgVGltZW91dFN1YnNjcmliZXIucHJvdG90eXBlLnNjaGVkdWxlVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFjdGlvbiA9IHRoaXMuYWN0aW9uO1xuICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBSZWN5Y2xlIHRoZSBhY3Rpb24gaWYgd2UndmUgYWxyZWFkeSBzY2hlZHVsZWQgb25lLiBBbGwgdGhlIHByb2R1Y3Rpb25cbiAgICAgICAgICAgIC8vIFNjaGVkdWxlciBBY3Rpb25zIG11dGF0ZSB0aGVpciBzdGF0ZS9kZWxheSB0aW1lIGFuZCByZXR1cm4gdGhlbWVzZWx2ZXMuXG4gICAgICAgICAgICAvLyBWaXJ0dWFsQWN0aW9ucyBhcmUgaW1tdXRhYmxlLCBzbyB0aGV5IGNyZWF0ZSBhbmQgcmV0dXJuIGEgY2xvbmUuIEluIHRoaXNcbiAgICAgICAgICAgIC8vIGNhc2UsIHdlIG5lZWQgdG8gc2V0IHRoZSBhY3Rpb24gcmVmZXJlbmNlIHRvIHRoZSBtb3N0IHJlY2VudCBWaXJ0dWFsQWN0aW9uLFxuICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoYXQncyB0aGUgb25lIHdlIGNsb25lIGZyb20gbmV4dCB0aW1lLlxuICAgICAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb24uc2NoZWR1bGUodGhpcywgdGhpcy53YWl0Rm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuYWN0aW9uID0gdGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoVGltZW91dFN1YnNjcmliZXIuZGlzcGF0Y2hUaW1lb3V0LCB0aGlzLndhaXRGb3IsIHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVGltZW91dFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5hYnNvbHV0ZVRpbWVvdXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVUaW1lb3V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fbmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBUaW1lb3V0U3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFjdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5lcnJvckluc3RhbmNlID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBUaW1lb3V0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVvdXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBhc3luY18xID0gcmVxdWlyZSgnLi4vc2NoZWR1bGVyL2FzeW5jJyk7XG52YXIgaXNEYXRlXzEgPSByZXF1aXJlKCcuLi91dGlsL2lzRGF0ZScpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqXG4gKiBFcnJvcnMgaWYgT2JzZXJ2YWJsZSBkb2VzIG5vdCBlbWl0IGEgdmFsdWUgaW4gZ2l2ZW4gdGltZSBzcGFuLCBpbiBjYXNlIG9mIHdoaWNoXG4gKiBzdWJzY3JpYmVzIHRvIHRoZSBzZWNvbmQgT2JzZXJ2YWJsZS5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBhIHZlcnNpb24gb2YgYHRpbWVvdXRgIG9wZXJhdG9yIHRoYXQgbGV0J3MgeW91IHNwZWNpZnkgZmFsbGJhY2sgT2JzZXJ2YWJsZS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy90aW1lb3V0V2l0aC5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBgdGltZW91dFdpdGhgIGlzIGEgdmFyaWF0aW9uIG9mIGB0aW1lb3V0YCBvcGVyYXRvci4gSXQgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lLFxuICogc3RpbGwgYWNjZXB0aW5nIGFzIGEgZmlyc3QgYXJndW1lbnQgZWl0aGVyIGEgbnVtYmVyIG9yIGEgRGF0ZSwgd2hpY2ggY29udHJvbCAtIHJlc3BlY3RpdmVseSAtXG4gKiB3aGVuIHZhbHVlcyBvZiBzb3VyY2UgT2JzZXJ2YWJsZSBzaG91bGQgYmUgZW1pdHRlZCBvciB3aGVuIGl0IHNob3VsZCBjb21wbGV0ZS5cbiAqXG4gKiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgYWNjZXB0cyBhIHNlY29uZCwgcmVxdWlyZWQgcGFyYW1ldGVyLiBUaGlzIHBhcmFtZXRlclxuICogc2hvdWxkIGJlIGFuIE9ic2VydmFibGUgd2hpY2ggd2lsbCBiZSBzdWJzY3JpYmVkIHdoZW4gc291cmNlIE9ic2VydmFibGUgZmFpbHMgYW55IHRpbWVvdXQgY2hlY2suXG4gKiBTbyB3aGVuZXZlciByZWd1bGFyIGB0aW1lb3V0YCB3b3VsZCBlbWl0IGFuIGVycm9yLCBgdGltZW91dFdpdGhgIHdpbGwgaW5zdGVhZCBzdGFydCByZS1lbWl0dGluZ1xuICogdmFsdWVzIGZyb20gc2Vjb25kIE9ic2VydmFibGUuIE5vdGUgdGhhdCB0aGlzIGZhbGxiYWNrIE9ic2VydmFibGUgaXMgbm90IGNoZWNrZWQgZm9yIHRpbWVvdXRzXG4gKiBpdHNlbGYsIHNvIGl0IGNhbiBlbWl0IHZhbHVlcyBhbmQgY29tcGxldGUgYXQgYXJiaXRyYXJ5IHBvaW50cyBpbiB0aW1lLiBGcm9tIHRoZSBtb21lbnQgb2YgYSBzZWNvbmRcbiAqIHN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSByZXR1cm5lZCBmcm9tIGB0aW1lb3V0V2l0aGAgc2ltcGx5IG1pcnJvcnMgZmFsbGJhY2sgc3RyZWFtLiBXaGVuIHRoYXRcbiAqIHN0cmVhbSBjb21wbGV0ZXMsIGl0IGNvbXBsZXRlcyBhcyB3ZWxsLlxuICpcbiAqIFNjaGVkdWxlciwgd2hpY2ggaW4gY2FzZSBvZiBgdGltZW91dGAgaXMgcHJvdmlkZWQgYXMgYXMgc2Vjb25kIGFyZ3VtZW50LCBjYW4gYmUgc3RpbGwgcHJvdmlkZWRcbiAqIGhlcmUgLSBhcyBhIHRoaXJkLCBvcHRpb25hbCBwYXJhbWV0ZXIuIEl0IHN0aWxsIGlzIHVzZWQgdG8gc2NoZWR1bGUgdGltZW91dCBjaGVja3MgYW5kIC1cbiAqIGFzIGEgY29uc2VxdWVuY2UgLSB3aGVuIHNlY29uZCBPYnNlcnZhYmxlIHdpbGwgYmUgc3Vic2NyaWJlZCwgc2luY2Ugc3Vic2NyaXB0aW9uIGhhcHBlbnNcbiAqIGltbWVkaWF0ZWx5IGFmdGVyIGZhaWxpbmcgY2hlY2suXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QWRkIGZhbGxiYWNrIG9ic2VydmFibGU8L2NhcHRpb24+XG4gKiBjb25zdCBzZWNvbmRzID0gUnguT2JzZXJ2YWJsZS5pbnRlcnZhbCgxMDAwKTtcbiAqIGNvbnN0IG1pbnV0ZXMgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDYwICogMTAwMCk7XG4gKlxuICogc2Vjb25kcy50aW1lb3V0V2l0aCg5MDAsIG1pbnV0ZXMpXG4gKiAgICAgLnN1YnNjcmliZShcbiAqICAgICAgICAgdmFsdWUgPT4gY29uc29sZS5sb2codmFsdWUpLCAvLyBBZnRlciA5MDBtcywgd2lsbCBzdGFydCBlbWl0dGluZyBgbWludXRlc2AsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgZmlyc3QgdmFsdWUgb2YgYHNlY29uZHNgIHdpbGwgbm90IGFycml2ZSBmYXN0IGVub3VnaC5cbiAqICAgICAgICAgZXJyID0+IGNvbnNvbGUubG9nKGVycikgLy8gV291bGQgYmUgY2FsbGVkIGFmdGVyIDkwMG1zIGluIGNhc2Ugb2YgYHRpbWVvdXRgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgaGVyZSB3aWxsIG5ldmVyIGJlIGNhbGxlZC5cbiAqICAgICApO1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGR1ZSBOdW1iZXIgc3BlY2lmeWluZyBwZXJpb2Qgd2l0aGluIHdoaWNoIE9ic2VydmFibGUgbXVzdCBlbWl0IHZhbHVlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIG9yIERhdGUgc3BlY2lmeWluZyBiZWZvcmUgd2hlbiBPYnNlcnZhYmxlIHNob3VsZCBjb21wbGV0ZVxuICogQHBhcmFtIHtPYnNlcnZhYmxlPFQ+fSB3aXRoT2JzZXJ2YWJsZSBPYnNlcnZhYmxlIHdoaWNoIHdpbGwgYmUgc3Vic2NyaWJlZCBpZiBzb3VyY2UgZmFpbHMgdGltZW91dCBjaGVjay5cbiAqIEBwYXJhbSB7U2NoZWR1bGVyfSBbc2NoZWR1bGVyXSBTY2hlZHVsZXIgY29udHJvbGxpbmcgd2hlbiB0aW1lb3V0IGNoZWNrcyBvY2N1ci5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8VD59IE9ic2VydmFibGUgdGhhdCBtaXJyb3JzIGJlaGF2aW91ciBvZiBzb3VyY2Ugb3IsIHdoZW4gdGltZW91dCBjaGVjayBmYWlscywgb2YgYW4gT2JzZXJ2YWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhIHNlY29uZCBwYXJhbWV0ZXIuXG4gKiBAbWV0aG9kIHRpbWVvdXRXaXRoXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB0aW1lb3V0V2l0aChkdWUsIHdpdGhPYnNlcnZhYmxlLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHZhciBhYnNvbHV0ZVRpbWVvdXQgPSBpc0RhdGVfMS5pc0RhdGUoZHVlKTtcbiAgICAgICAgdmFyIHdhaXRGb3IgPSBhYnNvbHV0ZVRpbWVvdXQgPyAoK2R1ZSAtIHNjaGVkdWxlci5ub3coKSkgOiBNYXRoLmFicyhkdWUpO1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFRpbWVvdXRXaXRoT3BlcmF0b3Iod2FpdEZvciwgYWJzb2x1dGVUaW1lb3V0LCB3aXRoT2JzZXJ2YWJsZSwgc2NoZWR1bGVyKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMudGltZW91dFdpdGggPSB0aW1lb3V0V2l0aDtcbnZhciBUaW1lb3V0V2l0aE9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaW1lb3V0V2l0aE9wZXJhdG9yKHdhaXRGb3IsIGFic29sdXRlVGltZW91dCwgd2l0aE9ic2VydmFibGUsIHNjaGVkdWxlcikge1xuICAgICAgICB0aGlzLndhaXRGb3IgPSB3YWl0Rm9yO1xuICAgICAgICB0aGlzLmFic29sdXRlVGltZW91dCA9IGFic29sdXRlVGltZW91dDtcbiAgICAgICAgdGhpcy53aXRoT2JzZXJ2YWJsZSA9IHdpdGhPYnNlcnZhYmxlO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICB9XG4gICAgVGltZW91dFdpdGhPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFRpbWVvdXRXaXRoU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmFic29sdXRlVGltZW91dCwgdGhpcy53YWl0Rm9yLCB0aGlzLndpdGhPYnNlcnZhYmxlLCB0aGlzLnNjaGVkdWxlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFRpbWVvdXRXaXRoT3BlcmF0b3I7XG59KCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBUaW1lb3V0V2l0aFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUaW1lb3V0V2l0aFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGltZW91dFdpdGhTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVRpbWVvdXQsIHdhaXRGb3IsIHdpdGhPYnNlcnZhYmxlLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLmFic29sdXRlVGltZW91dCA9IGFic29sdXRlVGltZW91dDtcbiAgICAgICAgdGhpcy53YWl0Rm9yID0gd2FpdEZvcjtcbiAgICAgICAgdGhpcy53aXRoT2JzZXJ2YWJsZSA9IHdpdGhPYnNlcnZhYmxlO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnNjaGVkdWxlVGltZW91dCgpO1xuICAgIH1cbiAgICBUaW1lb3V0V2l0aFN1YnNjcmliZXIuZGlzcGF0Y2hUaW1lb3V0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHdpdGhPYnNlcnZhYmxlID0gc3Vic2NyaWJlci53aXRoT2JzZXJ2YWJsZTtcbiAgICAgICAgc3Vic2NyaWJlci5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlKCk7XG4gICAgICAgIHN1YnNjcmliZXIuYWRkKHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQoc3Vic2NyaWJlciwgd2l0aE9ic2VydmFibGUpKTtcbiAgICB9O1xuICAgIFRpbWVvdXRXaXRoU3Vic2NyaWJlci5wcm90b3R5cGUuc2NoZWR1bGVUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb247XG4gICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIFJlY3ljbGUgdGhlIGFjdGlvbiBpZiB3ZSd2ZSBhbHJlYWR5IHNjaGVkdWxlZCBvbmUuIEFsbCB0aGUgcHJvZHVjdGlvblxuICAgICAgICAgICAgLy8gU2NoZWR1bGVyIEFjdGlvbnMgbXV0YXRlIHRoZWlyIHN0YXRlL2RlbGF5IHRpbWUgYW5kIHJldHVybiB0aGVtZXNlbHZlcy5cbiAgICAgICAgICAgIC8vIFZpcnR1YWxBY3Rpb25zIGFyZSBpbW11dGFibGUsIHNvIHRoZXkgY3JlYXRlIGFuZCByZXR1cm4gYSBjbG9uZS4gSW4gdGhpc1xuICAgICAgICAgICAgLy8gY2FzZSwgd2UgbmVlZCB0byBzZXQgdGhlIGFjdGlvbiByZWZlcmVuY2UgdG8gdGhlIG1vc3QgcmVjZW50IFZpcnR1YWxBY3Rpb24sXG4gICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhhdCdzIHRoZSBvbmUgd2UgY2xvbmUgZnJvbSBuZXh0IHRpbWUuXG4gICAgICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbi5zY2hlZHVsZSh0aGlzLCB0aGlzLndhaXRGb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5hY3Rpb24gPSB0aGlzLnNjaGVkdWxlci5zY2hlZHVsZShUaW1lb3V0V2l0aFN1YnNjcmliZXIuZGlzcGF0Y2hUaW1lb3V0LCB0aGlzLndhaXRGb3IsIHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVGltZW91dFdpdGhTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGVUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlVGltZW91dCgpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX25leHQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gVGltZW91dFdpdGhTdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICB0aGlzLndpdGhPYnNlcnZhYmxlID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBUaW1lb3V0V2l0aFN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dFdpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xudmFyIG1hcF8xID0gcmVxdWlyZSgnLi9tYXAnKTtcbi8qKlxuICogQHBhcmFtIHNjaGVkdWxlclxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxUaW1lc3RhbXA8YW55Pj58V2ViU29ja2V0U3ViamVjdDxUPnxPYnNlcnZhYmxlPFQ+fVxuICogQG1ldGhvZCB0aW1lc3RhbXBcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHRpbWVzdGFtcChzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYzsgfVxuICAgIHJldHVybiBtYXBfMS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBuZXcgVGltZXN0YW1wKHZhbHVlLCBzY2hlZHVsZXIubm93KCkpOyB9KTtcbiAgICAvLyByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gc291cmNlLmxpZnQobmV3IFRpbWVzdGFtcE9wZXJhdG9yKHNjaGVkdWxlcikpO1xufVxuZXhwb3J0cy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG52YXIgVGltZXN0YW1wID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaW1lc3RhbXAodmFsdWUsIHRpbWVzdGFtcCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIH1cbiAgICByZXR1cm4gVGltZXN0YW1wO1xufSgpKTtcbmV4cG9ydHMuVGltZXN0YW1wID0gVGltZXN0YW1wO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXN0YW1wLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHJlZHVjZV8xID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcbmZ1bmN0aW9uIHRvQXJyYXlSZWR1Y2VyKGFyciwgaXRlbSwgaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtpdGVtXTtcbiAgICB9XG4gICAgYXJyLnB1c2goaXRlbSk7XG4gICAgcmV0dXJuIGFycjtcbn1cbmZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIHJlZHVjZV8xLnJlZHVjZSh0b0FycmF5UmVkdWNlciwgW10pO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvQXJyYXkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKCcuLi9TdWJqZWN0Jyk7XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xuLyoqXG4gKiBCcmFuY2ggb3V0IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMgYXMgYSBuZXN0ZWQgT2JzZXJ2YWJsZSB3aGVuZXZlclxuICogYHdpbmRvd0JvdW5kYXJpZXNgIGVtaXRzLlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGJ1ZmZlcn0sIGJ1dCBlbWl0cyBhIG5lc3RlZCBPYnNlcnZhYmxlXG4gKiBpbnN0ZWFkIG9mIGFuIGFycmF5Ljwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3dpbmRvdy5wbmdcIiB3aWR0aD1cIjEwMCVcIj5cbiAqXG4gKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB3aW5kb3dzIG9mIGl0ZW1zIGl0IGNvbGxlY3RzIGZyb20gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gVGhlIG91dHB1dCBPYnNlcnZhYmxlIGVtaXRzIGNvbm5lY3RlZCwgbm9uLW92ZXJsYXBwaW5nXG4gKiB3aW5kb3dzLiBJdCBlbWl0cyB0aGUgY3VycmVudCB3aW5kb3cgYW5kIG9wZW5zIGEgbmV3IG9uZSB3aGVuZXZlciB0aGVcbiAqIE9ic2VydmFibGUgYHdpbmRvd0JvdW5kYXJpZXNgIGVtaXRzIGFuIGl0ZW0uIEJlY2F1c2UgZWFjaCB3aW5kb3cgaXMgYW5cbiAqIE9ic2VydmFibGUsIHRoZSBvdXRwdXQgaXMgYSBoaWdoZXItb3JkZXIgT2JzZXJ2YWJsZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5JbiBldmVyeSB3aW5kb3cgb2YgMSBzZWNvbmQgZWFjaCwgZW1pdCBhdCBtb3N0IDIgY2xpY2sgZXZlbnRzPC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciBpbnRlcnZhbCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLndpbmRvdyhpbnRlcnZhbClcbiAqICAgLm1hcCh3aW4gPT4gd2luLnRha2UoMikpIC8vIGVhY2ggd2luZG93IGhhcyBhdCBtb3N0IDIgZW1pc3Npb25zXG4gKiAgIC5tZXJnZUFsbCgpOyAvLyBmbGF0dGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHdpbmRvd0NvdW50fVxuICogQHNlZSB7QGxpbmsgd2luZG93VGltZX1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1RvZ2dsZX1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1doZW59XG4gKiBAc2VlIHtAbGluayBidWZmZXJ9XG4gKlxuICogQHBhcmFtIHtPYnNlcnZhYmxlPGFueT59IHdpbmRvd0JvdW5kYXJpZXMgQW4gT2JzZXJ2YWJsZSB0aGF0IGNvbXBsZXRlcyB0aGVcbiAqIHByZXZpb3VzIHdpbmRvdyBhbmQgc3RhcnRzIGEgbmV3IHdpbmRvdy5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8T2JzZXJ2YWJsZTxUPj59IEFuIE9ic2VydmFibGUgb2Ygd2luZG93cywgd2hpY2ggYXJlXG4gKiBPYnNlcnZhYmxlcyBlbWl0dGluZyB2YWx1ZXMgb2YgdGhlIHNvdXJjZSBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCB3aW5kb3dcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHdpbmRvdyh3aW5kb3dCb3VuZGFyaWVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHdpbmRvd09wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgV2luZG93T3BlcmF0b3Iod2luZG93Qm91bmRhcmllcykpO1xuICAgIH07XG59XG5leHBvcnRzLndpbmRvdyA9IHdpbmRvdztcbnZhciBXaW5kb3dPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gV2luZG93T3BlcmF0b3Iod2luZG93Qm91bmRhcmllcykge1xuICAgICAgICB0aGlzLndpbmRvd0JvdW5kYXJpZXMgPSB3aW5kb3dCb3VuZGFyaWVzO1xuICAgIH1cbiAgICBXaW5kb3dPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIHdpbmRvd1N1YnNjcmliZXIgPSBuZXcgV2luZG93U3Vic2NyaWJlcihzdWJzY3JpYmVyKTtcbiAgICAgICAgdmFyIHNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUod2luZG93U3Vic2NyaWJlcik7XG4gICAgICAgIGlmICghc291cmNlU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgd2luZG93U3Vic2NyaWJlci5hZGQoc3Vic2NyaWJlVG9SZXN1bHRfMS5zdWJzY3JpYmVUb1Jlc3VsdCh3aW5kb3dTdWJzY3JpYmVyLCB0aGlzLndpbmRvd0JvdW5kYXJpZXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlU3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd09wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgV2luZG93U3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFdpbmRvd1N1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gV2luZG93U3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMud2luZG93ID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQodGhpcy53aW5kb3cpO1xuICAgIH1cbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMub3BlbldpbmRvdygpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMuX2Vycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLndpbmRvdy5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy53aW5kb3cuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLndpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgaW50ZXJuYWwgdXNlIG9ubHkgKi8gV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLndpbmRvdyA9IG51bGw7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5vcGVuV2luZG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJldldpbmRvdyA9IHRoaXMud2luZG93O1xuICAgICAgICBpZiAocHJldldpbmRvdykge1xuICAgICAgICAgICAgcHJldldpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIHZhciBuZXdXaW5kb3cgPSB0aGlzLndpbmRvdyA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KG5ld1dpbmRvdyk7XG4gICAgfTtcbiAgICByZXR1cm4gV2luZG93U3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3cuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZSgnLi4vU3ViamVjdCcpO1xuLyoqXG4gKiBCcmFuY2ggb3V0IHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSB2YWx1ZXMgYXMgYSBuZXN0ZWQgT2JzZXJ2YWJsZSB3aXRoIGVhY2hcbiAqIG5lc3RlZCBPYnNlcnZhYmxlIGVtaXR0aW5nIGF0IG1vc3QgYHdpbmRvd1NpemVgIHZhbHVlcy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBidWZmZXJDb3VudH0sIGJ1dCBlbWl0cyBhIG5lc3RlZFxuICogT2JzZXJ2YWJsZSBpbnN0ZWFkIG9mIGFuIGFycmF5Ljwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3dpbmRvd0NvdW50LnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdpbmRvd3Mgb2YgaXRlbXMgaXQgY29sbGVjdHMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGUgZW1pdHMgd2luZG93cyBldmVyeSBgc3RhcnRXaW5kb3dFdmVyeWBcbiAqIGl0ZW1zLCBlYWNoIGNvbnRhaW5pbmcgbm8gbW9yZSB0aGFuIGB3aW5kb3dTaXplYCBpdGVtcy4gV2hlbiB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlIGNvbXBsZXRlcyBvciBlbmNvdW50ZXJzIGFuIGVycm9yLCB0aGUgb3V0cHV0IE9ic2VydmFibGUgZW1pdHNcbiAqIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgcHJvcGFnYXRlcyB0aGUgbm90aWZpY2F0aW9uIGZyb20gdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gSWYgYHN0YXJ0V2luZG93RXZlcnlgIGlzIG5vdCBwcm92aWRlZCwgdGhlbiBuZXcgd2luZG93cyBhcmVcbiAqIHN0YXJ0ZWQgaW1tZWRpYXRlbHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzb3VyY2UgYW5kIHdoZW4gZWFjaCB3aW5kb3cgY29tcGxldGVzXG4gKiB3aXRoIHNpemUgYHdpbmRvd1NpemVgLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPklnbm9yZSBldmVyeSAzcmQgY2xpY2sgZXZlbnQsIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IG9uZTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLndpbmRvd0NvdW50KDMpXG4gKiAgIC5tYXAod2luID0+IHdpbi5za2lwKDEpKSAvLyBza2lwIGZpcnN0IG9mIGV2ZXJ5IDMgY2xpY2tzXG4gKiAgIC5tZXJnZUFsbCgpOyAvLyBmbGF0dGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPklnbm9yZSBldmVyeSAzcmQgY2xpY2sgZXZlbnQsIHN0YXJ0aW5nIGZyb20gdGhlIHRoaXJkIG9uZTwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLndpbmRvd0NvdW50KDIsIDMpXG4gKiAgIC5tZXJnZUFsbCgpOyAvLyBmbGF0dGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHdpbmRvd31cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1RpbWV9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUb2dnbGV9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dXaGVufVxuICogQHNlZSB7QGxpbmsgYnVmZmVyQ291bnR9XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpbmRvd1NpemUgVGhlIG1heGltdW0gbnVtYmVyIG9mIHZhbHVlcyBlbWl0dGVkIGJ5IGVhY2hcbiAqIHdpbmRvdy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnRXaW5kb3dFdmVyeV0gSW50ZXJ2YWwgYXQgd2hpY2ggdG8gc3RhcnQgYSBuZXcgd2luZG93LlxuICogRm9yIGV4YW1wbGUgaWYgYHN0YXJ0V2luZG93RXZlcnlgIGlzIGAyYCwgdGhlbiBhIG5ldyB3aW5kb3cgd2lsbCBiZSBzdGFydGVkXG4gKiBvbiBldmVyeSBvdGhlciB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UuIEEgbmV3IHdpbmRvdyBpcyBzdGFydGVkIGF0IHRoZVxuICogYmVnaW5uaW5nIG9mIHRoZSBzb3VyY2UgYnkgZGVmYXVsdC5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8T2JzZXJ2YWJsZTxUPj59IEFuIE9ic2VydmFibGUgb2Ygd2luZG93cywgd2hpY2ggaW4gdHVyblxuICogYXJlIE9ic2VydmFibGUgb2YgdmFsdWVzLlxuICogQG1ldGhvZCB3aW5kb3dDb3VudFxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gd2luZG93Q291bnQod2luZG93U2l6ZSwgc3RhcnRXaW5kb3dFdmVyeSkge1xuICAgIGlmIChzdGFydFdpbmRvd0V2ZXJ5ID09PSB2b2lkIDApIHsgc3RhcnRXaW5kb3dFdmVyeSA9IDA7IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gd2luZG93Q291bnRPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFdpbmRvd0NvdW50T3BlcmF0b3Iod2luZG93U2l6ZSwgc3RhcnRXaW5kb3dFdmVyeSkpO1xuICAgIH07XG59XG5leHBvcnRzLndpbmRvd0NvdW50ID0gd2luZG93Q291bnQ7XG52YXIgV2luZG93Q291bnRPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gV2luZG93Q291bnRPcGVyYXRvcih3aW5kb3dTaXplLCBzdGFydFdpbmRvd0V2ZXJ5KSB7XG4gICAgICAgIHRoaXMud2luZG93U2l6ZSA9IHdpbmRvd1NpemU7XG4gICAgICAgIHRoaXMuc3RhcnRXaW5kb3dFdmVyeSA9IHN0YXJ0V2luZG93RXZlcnk7XG4gICAgfVxuICAgIFdpbmRvd0NvdW50T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBXaW5kb3dDb3VudFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy53aW5kb3dTaXplLCB0aGlzLnN0YXJ0V2luZG93RXZlcnkpKTtcbiAgICB9O1xuICAgIHJldHVybiBXaW5kb3dDb3VudE9wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgV2luZG93Q291bnRTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoV2luZG93Q291bnRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFdpbmRvd0NvdW50U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgd2luZG93U2l6ZSwgc3RhcnRXaW5kb3dFdmVyeSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgdGhpcy53aW5kb3dTaXplID0gd2luZG93U2l6ZTtcbiAgICAgICAgdGhpcy5zdGFydFdpbmRvd0V2ZXJ5ID0gc3RhcnRXaW5kb3dFdmVyeTtcbiAgICAgICAgdGhpcy53aW5kb3dzID0gW25ldyBTdWJqZWN0XzEuU3ViamVjdCgpXTtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQodGhpcy53aW5kb3dzWzBdKTtcbiAgICB9XG4gICAgV2luZG93Q291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgc3RhcnRXaW5kb3dFdmVyeSA9ICh0aGlzLnN0YXJ0V2luZG93RXZlcnkgPiAwKSA/IHRoaXMuc3RhcnRXaW5kb3dFdmVyeSA6IHRoaXMud2luZG93U2l6ZTtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgdmFyIHdpbmRvd1NpemUgPSB0aGlzLndpbmRvd1NpemU7XG4gICAgICAgIHZhciB3aW5kb3dzID0gdGhpcy53aW5kb3dzO1xuICAgICAgICB2YXIgbGVuID0gd2luZG93cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuICYmICF0aGlzLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICB3aW5kb3dzW2ldLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjID0gdGhpcy5jb3VudCAtIHdpbmRvd1NpemUgKyAxO1xuICAgICAgICBpZiAoYyA+PSAwICYmIGMgJSBzdGFydFdpbmRvd0V2ZXJ5ID09PSAwICYmICF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCsrdGhpcy5jb3VudCAlIHN0YXJ0V2luZG93RXZlcnkgPT09IDAgJiYgIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgd2luZG93XzEgPSBuZXcgU3ViamVjdF8xLlN1YmplY3QoKTtcbiAgICAgICAgICAgIHdpbmRvd3MucHVzaCh3aW5kb3dfMSk7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHdpbmRvd18xKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgV2luZG93Q291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gdGhpcy53aW5kb3dzO1xuICAgICAgICBpZiAod2luZG93cykge1xuICAgICAgICAgICAgd2hpbGUgKHdpbmRvd3MubGVuZ3RoID4gMCAmJiAhdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgfTtcbiAgICBXaW5kb3dDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdpbmRvd3MgPSB0aGlzLndpbmRvd3M7XG4gICAgICAgIGlmICh3aW5kb3dzKSB7XG4gICAgICAgICAgICB3aGlsZSAod2luZG93cy5sZW5ndGggPiAwICYmICF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHdpbmRvd3Muc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBpbnRlcm5hbCB1c2Ugb25seSAqLyBXaW5kb3dDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl91bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIHRoaXMud2luZG93cyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gV2luZG93Q291bnRTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93Q291bnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBTdWJqZWN0XzEgPSByZXF1aXJlKCcuLi9TdWJqZWN0Jyk7XG52YXIgYXN5bmNfMSA9IHJlcXVpcmUoJy4uL3NjaGVkdWxlci9hc3luYycpO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciBpc051bWVyaWNfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNOdW1lcmljJyk7XG52YXIgaXNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNTY2hlZHVsZXInKTtcbmZ1bmN0aW9uIHdpbmRvd1RpbWUod2luZG93VGltZVNwYW4pIHtcbiAgICB2YXIgc2NoZWR1bGVyID0gYXN5bmNfMS5hc3luYztcbiAgICB2YXIgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA9IG51bGw7XG4gICAgdmFyIG1heFdpbmRvd1NpemUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgaWYgKGlzU2NoZWR1bGVyXzEuaXNTY2hlZHVsZXIoYXJndW1lbnRzWzNdKSkge1xuICAgICAgICBzY2hlZHVsZXIgPSBhcmd1bWVudHNbM107XG4gICAgfVxuICAgIGlmIChpc1NjaGVkdWxlcl8xLmlzU2NoZWR1bGVyKGFyZ3VtZW50c1syXSkpIHtcbiAgICAgICAgc2NoZWR1bGVyID0gYXJndW1lbnRzWzJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc051bWVyaWNfMS5pc051bWVyaWMoYXJndW1lbnRzWzJdKSkge1xuICAgICAgICBtYXhXaW5kb3dTaXplID0gYXJndW1lbnRzWzJdO1xuICAgIH1cbiAgICBpZiAoaXNTY2hlZHVsZXJfMS5pc1NjaGVkdWxlcihhcmd1bWVudHNbMV0pKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFyZ3VtZW50c1sxXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNOdW1lcmljXzEuaXNOdW1lcmljKGFyZ3VtZW50c1sxXSkpIHtcbiAgICAgICAgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA9IGFyZ3VtZW50c1sxXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHdpbmRvd1RpbWVPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFdpbmRvd1RpbWVPcGVyYXRvcih3aW5kb3dUaW1lU3Bhbiwgd2luZG93Q3JlYXRpb25JbnRlcnZhbCwgbWF4V2luZG93U2l6ZSwgc2NoZWR1bGVyKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMud2luZG93VGltZSA9IHdpbmRvd1RpbWU7XG52YXIgV2luZG93VGltZU9wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBXaW5kb3dUaW1lT3BlcmF0b3Iod2luZG93VGltZVNwYW4sIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwsIG1heFdpbmRvd1NpemUsIHNjaGVkdWxlcikge1xuICAgICAgICB0aGlzLndpbmRvd1RpbWVTcGFuID0gd2luZG93VGltZVNwYW47XG4gICAgICAgIHRoaXMud2luZG93Q3JlYXRpb25JbnRlcnZhbCA9IHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWw7XG4gICAgICAgIHRoaXMubWF4V2luZG93U2l6ZSA9IG1heFdpbmRvd1NpemU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICBXaW5kb3dUaW1lT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBXaW5kb3dUaW1lU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLndpbmRvd1RpbWVTcGFuLCB0aGlzLndpbmRvd0NyZWF0aW9uSW50ZXJ2YWwsIHRoaXMubWF4V2luZG93U2l6ZSwgdGhpcy5zY2hlZHVsZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBXaW5kb3dUaW1lT3BlcmF0b3I7XG59KCkpO1xudmFyIENvdW50ZWRTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ291bnRlZFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ291bnRlZFN1YmplY3QoKSB7XG4gICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl9udW1iZXJPZk5leHRlZFZhbHVlcyA9IDA7XG4gICAgfVxuICAgIENvdW50ZWRTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX251bWJlck9mTmV4dGVkVmFsdWVzKys7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3VudGVkU3ViamVjdC5wcm90b3R5cGUsIFwibnVtYmVyT2ZOZXh0ZWRWYWx1ZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJPZk5leHRlZFZhbHVlcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIENvdW50ZWRTdWJqZWN0O1xufShTdWJqZWN0XzEuU3ViamVjdCkpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBXaW5kb3dUaW1lU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFdpbmRvd1RpbWVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFdpbmRvd1RpbWVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCB3aW5kb3dUaW1lU3Bhbiwgd2luZG93Q3JlYXRpb25JbnRlcnZhbCwgbWF4V2luZG93U2l6ZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICB0aGlzLndpbmRvd1RpbWVTcGFuID0gd2luZG93VGltZVNwYW47XG4gICAgICAgIHRoaXMud2luZG93Q3JlYXRpb25JbnRlcnZhbCA9IHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWw7XG4gICAgICAgIHRoaXMubWF4V2luZG93U2l6ZSA9IG1heFdpbmRvd1NpemU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICB0aGlzLndpbmRvd3MgPSBbXTtcbiAgICAgICAgdmFyIHdpbmRvdyA9IHRoaXMub3BlbldpbmRvdygpO1xuICAgICAgICBpZiAod2luZG93Q3JlYXRpb25JbnRlcnZhbCAhPT0gbnVsbCAmJiB3aW5kb3dDcmVhdGlvbkludGVydmFsID49IDApIHtcbiAgICAgICAgICAgIHZhciBjbG9zZVN0YXRlID0geyBzdWJzY3JpYmVyOiB0aGlzLCB3aW5kb3c6IHdpbmRvdywgY29udGV4dDogbnVsbCB9O1xuICAgICAgICAgICAgdmFyIGNyZWF0aW9uU3RhdGUgPSB7IHdpbmRvd1RpbWVTcGFuOiB3aW5kb3dUaW1lU3Bhbiwgd2luZG93Q3JlYXRpb25JbnRlcnZhbDogd2luZG93Q3JlYXRpb25JbnRlcnZhbCwgc3Vic2NyaWJlcjogdGhpcywgc2NoZWR1bGVyOiBzY2hlZHVsZXIgfTtcbiAgICAgICAgICAgIHRoaXMuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaFdpbmRvd0Nsb3NlLCB3aW5kb3dUaW1lU3BhbiwgY2xvc2VTdGF0ZSkpO1xuICAgICAgICAgICAgdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoV2luZG93Q3JlYXRpb24sIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwsIGNyZWF0aW9uU3RhdGUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0aW1lU3Bhbk9ubHlTdGF0ZSA9IHsgc3Vic2NyaWJlcjogdGhpcywgd2luZG93OiB3aW5kb3csIHdpbmRvd1RpbWVTcGFuOiB3aW5kb3dUaW1lU3BhbiB9O1xuICAgICAgICAgICAgdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoV2luZG93VGltZVNwYW5Pbmx5LCB3aW5kb3dUaW1lU3BhbiwgdGltZVNwYW5Pbmx5U3RhdGUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBXaW5kb3dUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHdpbmRvd3MgPSB0aGlzLndpbmRvd3M7XG4gICAgICAgIHZhciBsZW4gPSB3aW5kb3dzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIHdpbmRvd18xID0gd2luZG93c1tpXTtcbiAgICAgICAgICAgIGlmICghd2luZG93XzEuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgd2luZG93XzEubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvd18xLm51bWJlck9mTmV4dGVkVmFsdWVzID49IHRoaXMubWF4V2luZG93U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlV2luZG93KHdpbmRvd18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdpbmRvd1RpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gdGhpcy53aW5kb3dzO1xuICAgICAgICB3aGlsZSAod2luZG93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgfTtcbiAgICBXaW5kb3dUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd2luZG93cyA9IHRoaXMud2luZG93cztcbiAgICAgICAgd2hpbGUgKHdpbmRvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIHdpbmRvd18yID0gd2luZG93cy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKCF3aW5kb3dfMi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dfMi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIFdpbmRvd1RpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5vcGVuV2luZG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd2luZG93ID0gbmV3IENvdW50ZWRTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMud2luZG93cy5wdXNoKHdpbmRvdyk7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQod2luZG93KTtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9O1xuICAgIFdpbmRvd1RpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5jbG9zZVdpbmRvdyA9IGZ1bmN0aW9uICh3aW5kb3cpIHtcbiAgICAgICAgd2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgIHZhciB3aW5kb3dzID0gdGhpcy53aW5kb3dzO1xuICAgICAgICB3aW5kb3dzLnNwbGljZSh3aW5kb3dzLmluZGV4T2Yod2luZG93KSwgMSk7XG4gICAgfTtcbiAgICByZXR1cm4gV2luZG93VGltZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBkaXNwYXRjaFdpbmRvd1RpbWVTcGFuT25seShzdGF0ZSkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgd2luZG93VGltZVNwYW4gPSBzdGF0ZS53aW5kb3dUaW1lU3Bhbiwgd2luZG93ID0gc3RhdGUud2luZG93O1xuICAgIGlmICh3aW5kb3cpIHtcbiAgICAgICAgc3Vic2NyaWJlci5jbG9zZVdpbmRvdyh3aW5kb3cpO1xuICAgIH1cbiAgICBzdGF0ZS53aW5kb3cgPSBzdWJzY3JpYmVyLm9wZW5XaW5kb3coKTtcbiAgICB0aGlzLnNjaGVkdWxlKHN0YXRlLCB3aW5kb3dUaW1lU3Bhbik7XG59XG5mdW5jdGlvbiBkaXNwYXRjaFdpbmRvd0NyZWF0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHdpbmRvd1RpbWVTcGFuID0gc3RhdGUud2luZG93VGltZVNwYW4sIHN1YnNjcmliZXIgPSBzdGF0ZS5zdWJzY3JpYmVyLCBzY2hlZHVsZXIgPSBzdGF0ZS5zY2hlZHVsZXIsIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgPSBzdGF0ZS53aW5kb3dDcmVhdGlvbkludGVydmFsO1xuICAgIHZhciB3aW5kb3cgPSBzdWJzY3JpYmVyLm9wZW5XaW5kb3coKTtcbiAgICB2YXIgYWN0aW9uID0gdGhpcztcbiAgICB2YXIgY29udGV4dCA9IHsgYWN0aW9uOiBhY3Rpb24sIHN1YnNjcmlwdGlvbjogbnVsbCB9O1xuICAgIHZhciB0aW1lU3BhblN0YXRlID0geyBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyLCB3aW5kb3c6IHdpbmRvdywgY29udGV4dDogY29udGV4dCB9O1xuICAgIGNvbnRleHQuc3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoV2luZG93Q2xvc2UsIHdpbmRvd1RpbWVTcGFuLCB0aW1lU3BhblN0YXRlKTtcbiAgICBhY3Rpb24uYWRkKGNvbnRleHQuc3Vic2NyaXB0aW9uKTtcbiAgICBhY3Rpb24uc2NoZWR1bGUoc3RhdGUsIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwpO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2hXaW5kb3dDbG9zZShzdGF0ZSkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgd2luZG93ID0gc3RhdGUud2luZG93LCBjb250ZXh0ID0gc3RhdGUuY29udGV4dDtcbiAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LmFjdGlvbiAmJiBjb250ZXh0LnN1YnNjcmlwdGlvbikge1xuICAgICAgICBjb250ZXh0LmFjdGlvbi5yZW1vdmUoY29udGV4dC5zdWJzY3JpcHRpb24pO1xuICAgIH1cbiAgICBzdWJzY3JpYmVyLmNsb3NlV2luZG93KHdpbmRvdyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dUaW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZSgnLi4vU3ViamVjdCcpO1xudmFyIFN1YnNjcmlwdGlvbl8xID0gcmVxdWlyZSgnLi4vU3Vic2NyaXB0aW9uJyk7XG52YXIgdHJ5Q2F0Y2hfMSA9IHJlcXVpcmUoJy4uL3V0aWwvdHJ5Q2F0Y2gnKTtcbnZhciBlcnJvck9iamVjdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9lcnJvck9iamVjdCcpO1xudmFyIE91dGVyU3Vic2NyaWJlcl8xID0gcmVxdWlyZSgnLi4vT3V0ZXJTdWJzY3JpYmVyJyk7XG52YXIgc3Vic2NyaWJlVG9SZXN1bHRfMSA9IHJlcXVpcmUoJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnKTtcbi8qKlxuICogQnJhbmNoIG91dCB0aGUgc291cmNlIE9ic2VydmFibGUgdmFsdWVzIGFzIGEgbmVzdGVkIE9ic2VydmFibGUgc3RhcnRpbmcgZnJvbVxuICogYW4gZW1pc3Npb24gZnJvbSBgb3BlbmluZ3NgIGFuZCBlbmRpbmcgd2hlbiB0aGUgb3V0cHV0IG9mIGBjbG9zaW5nU2VsZWN0b3JgXG4gKiBlbWl0cy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+SXQncyBsaWtlIHtAbGluayBidWZmZXJUb2dnbGV9LCBidXQgZW1pdHMgYSBuZXN0ZWRcbiAqIE9ic2VydmFibGUgaW5zdGVhZCBvZiBhbiBhcnJheS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy93aW5kb3dUb2dnbGUucG5nXCIgd2lkdGg9XCIxMDAlXCI+XG4gKlxuICogUmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2luZG93cyBvZiBpdGVtcyBpdCBjb2xsZWN0cyBmcm9tIHRoZSBzb3VyY2VcbiAqIE9ic2VydmFibGUuIFRoZSBvdXRwdXQgT2JzZXJ2YWJsZSBlbWl0cyB3aW5kb3dzIHRoYXQgY29udGFpbiB0aG9zZSBpdGVtc1xuICogZW1pdHRlZCBieSB0aGUgc291cmNlIE9ic2VydmFibGUgYmV0d2VlbiB0aGUgdGltZSB3aGVuIHRoZSBgb3BlbmluZ3NgXG4gKiBPYnNlcnZhYmxlIGVtaXRzIGFuIGl0ZW0gYW5kIHdoZW4gdGhlIE9ic2VydmFibGUgcmV0dXJuZWQgYnlcbiAqIGBjbG9zaW5nU2VsZWN0b3JgIGVtaXRzIGFuIGl0ZW0uXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXZlcnkgb3RoZXIgc2Vjb25kLCBlbWl0IHRoZSBjbGljayBldmVudHMgZnJvbSB0aGUgbmV4dCA1MDBtczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgb3BlbmluZ3MgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDApO1xuICogdmFyIHJlc3VsdCA9IGNsaWNrcy53aW5kb3dUb2dnbGUob3BlbmluZ3MsIGkgPT5cbiAqICAgaSAlIDIgPyBSeC5PYnNlcnZhYmxlLmludGVydmFsKDUwMCkgOiBSeC5PYnNlcnZhYmxlLmVtcHR5KClcbiAqICkubWVyZ2VBbGwoKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgd2luZG93fVxuICogQHNlZSB7QGxpbmsgd2luZG93Q291bnR9XG4gKiBAc2VlIHtAbGluayB3aW5kb3dUaW1lfVxuICogQHNlZSB7QGxpbmsgd2luZG93V2hlbn1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlclRvZ2dsZX1cbiAqXG4gKiBAcGFyYW0ge09ic2VydmFibGU8Tz59IG9wZW5pbmdzIEFuIG9ic2VydmFibGUgb2Ygbm90aWZpY2F0aW9ucyB0byBzdGFydCBuZXdcbiAqIHdpbmRvd3MuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHZhbHVlOiBPKTogT2JzZXJ2YWJsZX0gY2xvc2luZ1NlbGVjdG9yIEEgZnVuY3Rpb24gdGhhdCB0YWtlc1xuICogdGhlIHZhbHVlIGVtaXR0ZWQgYnkgdGhlIGBvcGVuaW5nc2Agb2JzZXJ2YWJsZSBhbmQgcmV0dXJucyBhbiBPYnNlcnZhYmxlLFxuICogd2hpY2gsIHdoZW4gaXQgZW1pdHMgKGVpdGhlciBgbmV4dGAgb3IgYGNvbXBsZXRlYCksIHNpZ25hbHMgdGhhdCB0aGVcbiAqIGFzc29jaWF0ZWQgd2luZG93IHNob3VsZCBjb21wbGV0ZS5cbiAqIEByZXR1cm4ge09ic2VydmFibGU8T2JzZXJ2YWJsZTxUPj59IEFuIG9ic2VydmFibGUgb2Ygd2luZG93cywgd2hpY2ggaW4gdHVyblxuICogYXJlIE9ic2VydmFibGVzLlxuICogQG1ldGhvZCB3aW5kb3dUb2dnbGVcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHdpbmRvd1RvZ2dsZShvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBXaW5kb3dUb2dnbGVPcGVyYXRvcihvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSk7IH07XG59XG5leHBvcnRzLndpbmRvd1RvZ2dsZSA9IHdpbmRvd1RvZ2dsZTtcbnZhciBXaW5kb3dUb2dnbGVPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gV2luZG93VG9nZ2xlT3BlcmF0b3Iob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLm9wZW5pbmdzID0gb3BlbmluZ3M7XG4gICAgICAgIHRoaXMuY2xvc2luZ1NlbGVjdG9yID0gY2xvc2luZ1NlbGVjdG9yO1xuICAgIH1cbiAgICBXaW5kb3dUb2dnbGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5vcGVuaW5ncywgdGhpcy5jbG9zaW5nU2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBXaW5kb3dUb2dnbGVPcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhXaW5kb3dUb2dnbGVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9wZW5pbmdzLCBjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLm9wZW5pbmdzID0gb3BlbmluZ3M7XG4gICAgICAgIHRoaXMuY2xvc2luZ1NlbGVjdG9yID0gY2xvc2luZ1NlbGVjdG9yO1xuICAgICAgICB0aGlzLmNvbnRleHRzID0gW107XG4gICAgICAgIHRoaXMuYWRkKHRoaXMub3BlblN1YnNjcmlwdGlvbiA9IHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgb3BlbmluZ3MsIG9wZW5pbmdzKSk7XG4gICAgfVxuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIGlmIChjb250ZXh0cykge1xuICAgICAgICAgICAgdmFyIGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0c1tpXS53aW5kb3cubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgdGhpcy5jb250ZXh0cyA9IG51bGw7XG4gICAgICAgIGlmIChjb250ZXh0cykge1xuICAgICAgICAgICAgdmFyIGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNvbnRleHRzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LndpbmRvdy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZXJyb3IuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH07XG4gICAgV2luZG93VG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB0aGlzLmNvbnRleHRzID0gbnVsbDtcbiAgICAgICAgaWYgKGNvbnRleHRzKSB7XG4gICAgICAgICAgICB2YXIgbGVuID0gY29udGV4dHMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbikge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY29udGV4dHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnRleHQud2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLl91bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgdGhpcy5jb250ZXh0cyA9IG51bGw7XG4gICAgICAgIGlmIChjb250ZXh0cykge1xuICAgICAgICAgICAgdmFyIGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNvbnRleHRzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LndpbmRvdy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgaWYgKG91dGVyVmFsdWUgPT09IHRoaXMub3BlbmluZ3MpIHtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nU2VsZWN0b3IgPSB0aGlzLmNsb3NpbmdTZWxlY3RvcjtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nTm90aWZpZXIgPSB0cnlDYXRjaF8xLnRyeUNhdGNoKGNsb3NpbmdTZWxlY3RvcikoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoY2xvc2luZ05vdGlmaWVyID09PSBlcnJvck9iamVjdF8xLmVycm9yT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdC5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciB3aW5kb3dfMSA9IG5ldyBTdWJqZWN0XzEuU3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uXzEuU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB7IHdpbmRvdzogd2luZG93XzEsIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uIH07XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0cy5wdXNoKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIHZhciBpbm5lclN1YnNjcmlwdGlvbiA9IHN1YnNjcmliZVRvUmVzdWx0XzEuc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgY2xvc2luZ05vdGlmaWVyLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5uZXJTdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VXaW5kb3codGhpcy5jb250ZXh0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyU3Vic2NyaXB0aW9uLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24uYWRkKGlubmVyU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHdpbmRvd18xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VXaW5kb3codGhpcy5jb250ZXh0cy5pbmRleE9mKG91dGVyVmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgV2luZG93VG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICB9O1xuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlubmVyKSB7XG4gICAgICAgIGlmIChpbm5lciAhPT0gdGhpcy5vcGVuU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlV2luZG93KHRoaXMuY29udGV4dHMuaW5kZXhPZihpbm5lci5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLmNsb3NlV2luZG93ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgY29udGV4dCA9IGNvbnRleHRzW2luZGV4XTtcbiAgICAgICAgdmFyIHdpbmRvdyA9IGNvbnRleHQud2luZG93LCBzdWJzY3JpcHRpb24gPSBjb250ZXh0LnN1YnNjcmlwdGlvbjtcbiAgICAgICAgY29udGV4dHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgd2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcl8xLk91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VG9nZ2xlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3ViamVjdF8xID0gcmVxdWlyZSgnLi4vU3ViamVjdCcpO1xudmFyIHRyeUNhdGNoXzEgPSByZXF1aXJlKCcuLi91dGlsL3RyeUNhdGNoJyk7XG52YXIgZXJyb3JPYmplY3RfMSA9IHJlcXVpcmUoJy4uL3V0aWwvZXJyb3JPYmplY3QnKTtcbnZhciBPdXRlclN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL091dGVyU3Vic2NyaWJlcicpO1xudmFyIHN1YnNjcmliZVRvUmVzdWx0XzEgPSByZXF1aXJlKCcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0Jyk7XG4vKipcbiAqIEJyYW5jaCBvdXQgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHZhbHVlcyBhcyBhIG5lc3RlZCBPYnNlcnZhYmxlIHVzaW5nIGFcbiAqIGZhY3RvcnkgZnVuY3Rpb24gb2YgY2xvc2luZyBPYnNlcnZhYmxlcyB0byBkZXRlcm1pbmUgd2hlbiB0byBzdGFydCBhIG5ld1xuICogd2luZG93LlxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5JdCdzIGxpa2Uge0BsaW5rIGJ1ZmZlcldoZW59LCBidXQgZW1pdHMgYSBuZXN0ZWRcbiAqIE9ic2VydmFibGUgaW5zdGVhZCBvZiBhbiBhcnJheS48L3NwYW4+XG4gKlxuICogPGltZyBzcmM9XCIuL2ltZy93aW5kb3dXaGVuLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdpbmRvd3Mgb2YgaXRlbXMgaXQgY29sbGVjdHMgZnJvbSB0aGUgc291cmNlXG4gKiBPYnNlcnZhYmxlLiBUaGUgb3V0cHV0IE9ic2VydmFibGUgZW1pdHMgY29ubmVjdGVkLCBub24tb3ZlcmxhcHBpbmcgd2luZG93cy5cbiAqIEl0IGVtaXRzIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgb3BlbnMgYSBuZXcgb25lIHdoZW5ldmVyIHRoZSBPYnNlcnZhYmxlXG4gKiBwcm9kdWNlZCBieSB0aGUgc3BlY2lmaWVkIGBjbG9zaW5nU2VsZWN0b3JgIGZ1bmN0aW9uIGVtaXRzIGFuIGl0ZW0uIFRoZSBmaXJzdFxuICogd2luZG93IGlzIG9wZW5lZCBpbW1lZGlhdGVseSB3aGVuIHN1YnNjcmliaW5nIHRvIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FbWl0IG9ubHkgdGhlIGZpcnN0IHR3byBjbGlja3MgZXZlbnRzIGluIGV2ZXJ5IHdpbmRvdyBvZiBbMS01XSByYW5kb20gc2Vjb25kczwvY2FwdGlvbj5cbiAqIHZhciBjbGlja3MgPSBSeC5PYnNlcnZhYmxlLmZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJyk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzXG4gKiAgIC53aW5kb3dXaGVuKCgpID0+IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCArIE1hdGgucmFuZG9tKCkgKiA0MDAwKSlcbiAqICAgLm1hcCh3aW4gPT4gd2luLnRha2UoMikpIC8vIGVhY2ggd2luZG93IGhhcyBhdCBtb3N0IDIgZW1pc3Npb25zXG4gKiAgIC5tZXJnZUFsbCgpOyAvLyBmbGF0dGVuIHRoZSBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gKiByZXN1bHQuc3Vic2NyaWJlKHggPT4gY29uc29sZS5sb2coeCkpO1xuICpcbiAqIEBzZWUge0BsaW5rIHdpbmRvd31cbiAqIEBzZWUge0BsaW5rIHdpbmRvd0NvdW50fVxuICogQHNlZSB7QGxpbmsgd2luZG93VGltZX1cbiAqIEBzZWUge0BsaW5rIHdpbmRvd1RvZ2dsZX1cbiAqIEBzZWUge0BsaW5rIGJ1ZmZlcldoZW59XG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbigpOiBPYnNlcnZhYmxlfSBjbG9zaW5nU2VsZWN0b3IgQSBmdW5jdGlvbiB0aGF0IHRha2VzIG5vXG4gKiBhcmd1bWVudHMgYW5kIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgKG9uIGVpdGhlciBgbmV4dGAgb3JcbiAqIGBjb21wbGV0ZWApIHdoZW4gdG8gY2xvc2UgdGhlIHByZXZpb3VzIHdpbmRvdyBhbmQgc3RhcnQgYSBuZXcgb25lLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxPYnNlcnZhYmxlPFQ+Pn0gQW4gb2JzZXJ2YWJsZSBvZiB3aW5kb3dzLCB3aGljaCBpbiB0dXJuXG4gKiBhcmUgT2JzZXJ2YWJsZXMuXG4gKiBAbWV0aG9kIHdpbmRvd1doZW5cbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHdpbmRvd1doZW4oY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHdpbmRvd1doZW5PcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFdpbmRvd09wZXJhdG9yKGNsb3NpbmdTZWxlY3RvcikpO1xuICAgIH07XG59XG5leHBvcnRzLndpbmRvd1doZW4gPSB3aW5kb3dXaGVuO1xudmFyIFdpbmRvd09wZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBXaW5kb3dPcGVyYXRvcihjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5jbG9zaW5nU2VsZWN0b3IgPSBjbG9zaW5nU2VsZWN0b3I7XG4gICAgfVxuICAgIFdpbmRvd09wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgV2luZG93U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmNsb3NpbmdTZWxlY3RvcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd09wZXJhdG9yO1xufSgpKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgV2luZG93U3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFdpbmRvd1N1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gV2luZG93U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICB0aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICAgICAgdGhpcy5vcGVuV2luZG93KCk7XG4gICAgfVxuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5vcGVuV2luZG93KGlubmVyU3ViKTtcbiAgICB9O1xuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9yLCBpbm5lclN1Yikge1xuICAgICAgICB0aGlzLl9lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB0aGlzLm9wZW5XaW5kb3coaW5uZXJTdWIpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy53aW5kb3cubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMud2luZG93LmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUNsb3NpbmdOb3RpZmljYXRpb24oKTtcbiAgICB9O1xuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy53aW5kb3cuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ2xvc2luZ05vdGlmaWNhdGlvbigpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmVDbG9zaW5nTm90aWZpY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zaW5nTm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NpbmdOb3RpZmljYXRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUub3BlbldpbmRvdyA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICBpZiAoaW5uZXJTdWIgPT09IHZvaWQgMCkgeyBpbm5lclN1YiA9IG51bGw7IH1cbiAgICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShpbm5lclN1Yik7XG4gICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2V2luZG93ID0gdGhpcy53aW5kb3c7XG4gICAgICAgIGlmIChwcmV2V2luZG93KSB7XG4gICAgICAgICAgICBwcmV2V2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93ID0gbmV3IFN1YmplY3RfMS5TdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh3aW5kb3cpO1xuICAgICAgICB2YXIgY2xvc2luZ05vdGlmaWVyID0gdHJ5Q2F0Y2hfMS50cnlDYXRjaCh0aGlzLmNsb3NpbmdTZWxlY3RvcikoKTtcbiAgICAgICAgaWYgKGNsb3NpbmdOb3RpZmllciA9PT0gZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdCkge1xuICAgICAgICAgICAgdmFyIGVyciA9IGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3QuZTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRoaXMud2luZG93LmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZCh0aGlzLmNsb3NpbmdOb3RpZmljYXRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIGNsb3NpbmdOb3RpZmllcikpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gV2luZG93U3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dXaGVuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogQ29tYmluZXMgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIHdpdGggb3RoZXIgT2JzZXJ2YWJsZXMgdG8gY3JlYXRlIGFuIE9ic2VydmFibGVcbiAqIHdob3NlIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBsYXRlc3QgdmFsdWVzIG9mIGVhY2gsIG9ubHkgd2hlbiB0aGVcbiAqIHNvdXJjZSBlbWl0cy5cbiAqXG4gKiA8c3BhbiBjbGFzcz1cImluZm9ybWFsXCI+V2hlbmV2ZXIgdGhlIHNvdXJjZSBPYnNlcnZhYmxlIGVtaXRzIGEgdmFsdWUsIGl0XG4gKiBjb21wdXRlcyBhIGZvcm11bGEgdXNpbmcgdGhhdCB2YWx1ZSBwbHVzIHRoZSBsYXRlc3QgdmFsdWVzIGZyb20gb3RoZXIgaW5wdXRcbiAqIE9ic2VydmFibGVzLCB0aGVuIGVtaXRzIHRoZSBvdXRwdXQgb2YgdGhhdCBmb3JtdWxhLjwvc3Bhbj5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1nL3dpdGhMYXRlc3RGcm9tLnBuZ1wiIHdpZHRoPVwiMTAwJVwiPlxuICpcbiAqIGB3aXRoTGF0ZXN0RnJvbWAgY29tYmluZXMgZWFjaCB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZSAodGhlXG4gKiBpbnN0YW5jZSkgd2l0aCB0aGUgbGF0ZXN0IHZhbHVlcyBmcm9tIHRoZSBvdGhlciBpbnB1dCBPYnNlcnZhYmxlcyBvbmx5IHdoZW5cbiAqIHRoZSBzb3VyY2UgZW1pdHMgYSB2YWx1ZSwgb3B0aW9uYWxseSB1c2luZyBhIGBwcm9qZWN0YCBmdW5jdGlvbiB0byBkZXRlcm1pbmVcbiAqIHRoZSB2YWx1ZSB0byBiZSBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgT2JzZXJ2YWJsZS4gQWxsIGlucHV0IE9ic2VydmFibGVzIG11c3RcbiAqIGVtaXQgYXQgbGVhc3Qgb25lIHZhbHVlIGJlZm9yZSB0aGUgb3V0cHV0IE9ic2VydmFibGUgd2lsbCBlbWl0IGEgdmFsdWUuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+T24gZXZlcnkgY2xpY2sgZXZlbnQsIGVtaXQgYW4gYXJyYXkgd2l0aCB0aGUgbGF0ZXN0IHRpbWVyIGV2ZW50IHBsdXMgdGhlIGNsaWNrIGV2ZW50PC9jYXB0aW9uPlxuICogdmFyIGNsaWNrcyA9IFJ4Lk9ic2VydmFibGUuZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKTtcbiAqIHZhciB0aW1lciA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCk7XG4gKiB2YXIgcmVzdWx0ID0gY2xpY2tzLndpdGhMYXRlc3RGcm9tKHRpbWVyKTtcbiAqIHJlc3VsdC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogQHNlZSB7QGxpbmsgY29tYmluZUxhdGVzdH1cbiAqXG4gKiBAcGFyYW0ge09ic2VydmFibGVJbnB1dH0gb3RoZXIgQW4gaW5wdXQgT2JzZXJ2YWJsZSB0byBjb21iaW5lIHdpdGggdGhlIHNvdXJjZVxuICogT2JzZXJ2YWJsZS4gTW9yZSB0aGFuIG9uZSBpbnB1dCBPYnNlcnZhYmxlcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvamVjdF0gUHJvamVjdGlvbiBmdW5jdGlvbiBmb3IgY29tYmluaW5nIHZhbHVlc1xuICogdG9nZXRoZXIuIFJlY2VpdmVzIGFsbCB2YWx1ZXMgaW4gb3JkZXIgb2YgdGhlIE9ic2VydmFibGVzIHBhc3NlZCwgd2hlcmUgdGhlXG4gKiBmaXJzdCBwYXJhbWV0ZXIgaXMgYSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgT2JzZXJ2YWJsZS4gKGUuZy5cbiAqIGBhLndpdGhMYXRlc3RGcm9tKGIsIGMsIChhMSwgYjEsIGMxKSA9PiBhMSArIGIxICsgYzEpYCkuIElmIHRoaXMgaXMgbm90XG4gKiBwYXNzZWQsIGFycmF5cyB3aWxsIGJlIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBPYnNlcnZhYmxlLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZX0gQW4gT2JzZXJ2YWJsZSBvZiBwcm9qZWN0ZWQgdmFsdWVzIGZyb20gdGhlIG1vc3QgcmVjZW50XG4gKiB2YWx1ZXMgZnJvbSBlYWNoIGlucHV0IE9ic2VydmFibGUsIG9yIGFuIGFycmF5IG9mIHRoZSBtb3N0IHJlY2VudCB2YWx1ZXMgZnJvbVxuICogZWFjaCBpbnB1dCBPYnNlcnZhYmxlLlxuICogQG1ldGhvZCB3aXRoTGF0ZXN0RnJvbVxuICogQG93bmVyIE9ic2VydmFibGVcbiAqL1xuZnVuY3Rpb24gd2l0aExhdGVzdEZyb20oKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pIC0gMF0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICB2YXIgcHJvamVjdDtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHByb2plY3QgPSBhcmdzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvYnNlcnZhYmxlcyA9IGFyZ3M7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgV2l0aExhdGVzdEZyb21PcGVyYXRvcihvYnNlcnZhYmxlcywgcHJvamVjdCkpO1xuICAgIH07XG59XG5leHBvcnRzLndpdGhMYXRlc3RGcm9tID0gd2l0aExhdGVzdEZyb207XG52YXIgV2l0aExhdGVzdEZyb21PcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gV2l0aExhdGVzdEZyb21PcGVyYXRvcihvYnNlcnZhYmxlcywgcHJvamVjdCkge1xuICAgICAgICB0aGlzLm9ic2VydmFibGVzID0gb2JzZXJ2YWJsZXM7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgfVxuICAgIFdpdGhMYXRlc3RGcm9tT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBXaXRoTGF0ZXN0RnJvbVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5vYnNlcnZhYmxlcywgdGhpcy5wcm9qZWN0KSk7XG4gICAgfTtcbiAgICByZXR1cm4gV2l0aExhdGVzdEZyb21PcGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFdpdGhMYXRlc3RGcm9tU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFdpdGhMYXRlc3RGcm9tU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBXaXRoTGF0ZXN0RnJvbVN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9ic2VydmFibGVzLCBwcm9qZWN0KSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKTtcbiAgICAgICAgdGhpcy5vYnNlcnZhYmxlcyA9IG9ic2VydmFibGVzO1xuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLnRvUmVzcG9uZCA9IFtdO1xuICAgICAgICB2YXIgbGVuID0gb2JzZXJ2YWJsZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnRvUmVzcG9uZC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gb2JzZXJ2YWJsZXNbaV07XG4gICAgICAgICAgICB0aGlzLmFkZChzdWJzY3JpYmVUb1Jlc3VsdF8xLnN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIG9ic2VydmFibGUsIG9ic2VydmFibGUsIGkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBXaXRoTGF0ZXN0RnJvbVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy52YWx1ZXNbb3V0ZXJJbmRleF0gPSBpbm5lclZhbHVlO1xuICAgICAgICB2YXIgdG9SZXNwb25kID0gdGhpcy50b1Jlc3BvbmQ7XG4gICAgICAgIGlmICh0b1Jlc3BvbmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGZvdW5kID0gdG9SZXNwb25kLmluZGV4T2Yob3V0ZXJJbmRleCk7XG4gICAgICAgICAgICBpZiAoZm91bmQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdG9SZXNwb25kLnNwbGljZShmb3VuZCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdpdGhMYXRlc3RGcm9tU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9O1xuICAgIFdpdGhMYXRlc3RGcm9tU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMudG9SZXNwb25kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbdmFsdWVdLmNvbmNhdCh0aGlzLnZhbHVlcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJ5UHJvamVjdChhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgV2l0aExhdGVzdEZyb21TdWJzY3JpYmVyLnByb3RvdHlwZS5fdHJ5UHJvamVjdCA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnByb2plY3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyZXN1bHQpO1xuICAgIH07XG4gICAgcmV0dXJuIFdpdGhMYXRlc3RGcm9tU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aXRoTGF0ZXN0RnJvbS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIEFycmF5T2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi4vb2JzZXJ2YWJsZS9BcnJheU9ic2VydmFibGUnKTtcbnZhciBpc0FycmF5XzEgPSByZXF1aXJlKCcuLi91dGlsL2lzQXJyYXknKTtcbnZhciBTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpYmVyJyk7XG52YXIgT3V0ZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9PdXRlclN1YnNjcmliZXInKTtcbnZhciBzdWJzY3JpYmVUb1Jlc3VsdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCcpO1xudmFyIGl0ZXJhdG9yXzEgPSByZXF1aXJlKCcuLi9zeW1ib2wvaXRlcmF0b3InKTtcbi8qIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIEBwYXJhbSBvYnNlcnZhYmxlc1xuICogQHJldHVybiB7T2JzZXJ2YWJsZTxSPn1cbiAqIEBtZXRob2QgemlwXG4gKiBAb3duZXIgT2JzZXJ2YWJsZVxuICovXG5mdW5jdGlvbiB6aXAoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2kgLSAwXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiB6aXBPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQuY2FsbCh6aXBTdGF0aWMuYXBwbHkodm9pZCAwLCBbc291cmNlXS5jb25jYXQob2JzZXJ2YWJsZXMpKSk7XG4gICAgfTtcbn1cbmV4cG9ydHMuemlwID0gemlwO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgT2JzZXJ2YWJsZXMgdG8gY3JlYXRlIGFuIE9ic2VydmFibGUgd2hvc2UgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGZyb20gdGhlIHZhbHVlcywgaW4gb3JkZXIsIG9mIGVhY2hcbiAqIG9mIGl0cyBpbnB1dCBPYnNlcnZhYmxlcy5cbiAqXG4gKiBJZiB0aGUgbGF0ZXN0IHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgY3JlYXRlZCB2YWx1ZSBmcm9tIHRoZSBpbnB1dCB2YWx1ZXMuXG4gKiBPdGhlcndpc2UsIGFuIGFycmF5IG9mIHRoZSBpbnB1dCB2YWx1ZXMgaXMgcmV0dXJuZWQuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q29tYmluZSBhZ2UgYW5kIG5hbWUgZnJvbSBkaWZmZXJlbnQgc291cmNlczwvY2FwdGlvbj5cbiAqXG4gKiBsZXQgYWdlJCA9IE9ic2VydmFibGUub2Y8bnVtYmVyPigyNywgMjUsIDI5KTtcbiAqIGxldCBuYW1lJCA9IE9ic2VydmFibGUub2Y8c3RyaW5nPignRm9vJywgJ0JhcicsICdCZWVyJyk7XG4gKiBsZXQgaXNEZXYkID0gT2JzZXJ2YWJsZS5vZjxib29sZWFuPih0cnVlLCB0cnVlLCBmYWxzZSk7XG4gKlxuICogT2JzZXJ2YWJsZVxuICogICAgIC56aXAoYWdlJCxcbiAqICAgICAgICAgIG5hbWUkLFxuICogICAgICAgICAgaXNEZXYkLFxuICogICAgICAgICAgKGFnZTogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGlzRGV2OiBib29sZWFuKSA9PiAoeyBhZ2UsIG5hbWUsIGlzRGV2IH0pKVxuICogICAgIC5zdWJzY3JpYmUoeCA9PiBjb25zb2xlLmxvZyh4KSk7XG4gKlxuICogLy8gb3V0cHV0c1xuICogLy8geyBhZ2U6IDI3LCBuYW1lOiAnRm9vJywgaXNEZXY6IHRydWUgfVxuICogLy8geyBhZ2U6IDI1LCBuYW1lOiAnQmFyJywgaXNEZXY6IHRydWUgfVxuICogLy8geyBhZ2U6IDI5LCBuYW1lOiAnQmVlcicsIGlzRGV2OiBmYWxzZSB9XG4gKlxuICogQHBhcmFtIG9ic2VydmFibGVzXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFI+fVxuICogQHN0YXRpYyB0cnVlXG4gKiBAbmFtZSB6aXBcbiAqIEBvd25lciBPYnNlcnZhYmxlXG4gKi9cbmZ1bmN0aW9uIHppcFN0YXRpYygpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHByb2plY3QgPSBvYnNlcnZhYmxlc1tvYnNlcnZhYmxlcy5sZW5ndGggLSAxXTtcbiAgICBpZiAodHlwZW9mIHByb2plY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JzZXJ2YWJsZXMucG9wKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQXJyYXlPYnNlcnZhYmxlXzEuQXJyYXlPYnNlcnZhYmxlKG9ic2VydmFibGVzKS5saWZ0KG5ldyBaaXBPcGVyYXRvcihwcm9qZWN0KSk7XG59XG5leHBvcnRzLnppcFN0YXRpYyA9IHppcFN0YXRpYztcbnZhciBaaXBPcGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gWmlwT3BlcmF0b3IocHJvamVjdCkge1xuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgIH1cbiAgICBaaXBPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFppcFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcm9qZWN0KSk7XG4gICAgfTtcbiAgICByZXR1cm4gWmlwT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0cy5aaXBPcGVyYXRvciA9IFppcE9wZXJhdG9yO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBaaXBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoWmlwU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBaaXBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcm9qZWN0LCB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlcyA9PT0gdm9pZCAwKSB7IHZhbHVlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7IH1cbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pO1xuICAgICAgICB0aGlzLml0ZXJhdG9ycyA9IFtdO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgICAgIHRoaXMucHJvamVjdCA9ICh0eXBlb2YgcHJvamVjdCA9PT0gJ2Z1bmN0aW9uJykgPyBwcm9qZWN0IDogbnVsbDtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgfVxuICAgIFppcFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBpdGVyYXRvcnMgPSB0aGlzLml0ZXJhdG9ycztcbiAgICAgICAgaWYgKGlzQXJyYXlfMS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaXRlcmF0b3JzLnB1c2gobmV3IFN0YXRpY0FycmF5SXRlcmF0b3IodmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWVbaXRlcmF0b3JfMS5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9ycy5wdXNoKG5ldyBTdGF0aWNJdGVyYXRvcih2YWx1ZVtpdGVyYXRvcl8xLml0ZXJhdG9yXSgpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpdGVyYXRvcnMucHVzaChuZXcgWmlwQnVmZmVySXRlcmF0b3IodGhpcy5kZXN0aW5hdGlvbiwgdGhpcywgdmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgWmlwU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXRlcmF0b3JzID0gdGhpcy5pdGVyYXRvcnM7XG4gICAgICAgIHZhciBsZW4gPSBpdGVyYXRvcnMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmUgPSBsZW47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yc1tpXTtcbiAgICAgICAgICAgIGlmIChpdGVyYXRvci5zdGlsbFVuc3Vic2NyaWJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGl0ZXJhdG9yLnN1YnNjcmliZShpdGVyYXRvciwgaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUtLTsgLy8gbm90IGFuIG9ic2VydmFibGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgWmlwU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5SW5hY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlLS07XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBaaXBTdWJzY3JpYmVyLnByb3RvdHlwZS5jaGVja0l0ZXJhdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9ycyA9IHRoaXMuaXRlcmF0b3JzO1xuICAgICAgICB2YXIgbGVuID0gaXRlcmF0b3JzLmxlbmd0aDtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgLy8gYWJvcnQgaWYgbm90IGFsbCBvZiB0aGVtIGhhdmUgdmFsdWVzXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yc1tpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3IuaGFzVmFsdWUgPT09ICdmdW5jdGlvbicgJiYgIWl0ZXJhdG9yLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNob3VsZENvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yc1tpXTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgaXQncyBjb21wbGV0ZWQgbm93IHRoYXQgeW91J3ZlIGdvdHRlblxuICAgICAgICAgICAgLy8gdGhlIG5leHQgdmFsdWUuXG4gICAgICAgICAgICBpZiAoaXRlcmF0b3IuaGFzQ29tcGxldGVkKCkpIHtcbiAgICAgICAgICAgICAgICBzaG91bGRDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyZ3MucHVzaChyZXN1bHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByb2plY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyeVByb2plY3QoYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRDb21wbGV0ZSkge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgWmlwU3Vic2NyaWJlci5wcm90b3R5cGUuX3RyeVByb2plY3QgPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5wcm9qZWN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQocmVzdWx0KTtcbiAgICB9O1xuICAgIHJldHVybiBaaXBTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyXzEuU3Vic2NyaWJlcikpO1xuZXhwb3J0cy5aaXBTdWJzY3JpYmVyID0gWmlwU3Vic2NyaWJlcjtcbnZhciBTdGF0aWNJdGVyYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3RhdGljSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgICAgICAgdGhpcy5pdGVyYXRvciA9IGl0ZXJhdG9yO1xuICAgICAgICB0aGlzLm5leHRSZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgfVxuICAgIFN0YXRpY0l0ZXJhdG9yLnByb3RvdHlwZS5oYXNWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBTdGF0aWNJdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMubmV4dFJlc3VsdDtcbiAgICAgICAgdGhpcy5uZXh0UmVzdWx0ID0gdGhpcy5pdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBTdGF0aWNJdGVyYXRvci5wcm90b3R5cGUuaGFzQ29tcGxldGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dFJlc3VsdCA9IHRoaXMubmV4dFJlc3VsdDtcbiAgICAgICAgcmV0dXJuIG5leHRSZXN1bHQgJiYgbmV4dFJlc3VsdC5kb25lO1xuICAgIH07XG4gICAgcmV0dXJuIFN0YXRpY0l0ZXJhdG9yO1xufSgpKTtcbnZhciBTdGF0aWNBcnJheUl0ZXJhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdGF0aWNBcnJheUl0ZXJhdG9yKGFycmF5KSB7XG4gICAgICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5sZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgfVxuICAgIFN0YXRpY0FycmF5SXRlcmF0b3IucHJvdG90eXBlW2l0ZXJhdG9yXzEuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIFN0YXRpY0FycmF5SXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIHZhciBhcnJheSA9IHRoaXMuYXJyYXk7XG4gICAgICAgIHJldHVybiBpIDwgdGhpcy5sZW5ndGggPyB7IHZhbHVlOiBhcnJheVtpXSwgZG9uZTogZmFsc2UgfSA6IHsgdmFsdWU6IG51bGwsIGRvbmU6IHRydWUgfTtcbiAgICB9O1xuICAgIFN0YXRpY0FycmF5SXRlcmF0b3IucHJvdG90eXBlLmhhc1ZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcnJheS5sZW5ndGggPiB0aGlzLmluZGV4O1xuICAgIH07XG4gICAgU3RhdGljQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuaGFzQ29tcGxldGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcnJheS5sZW5ndGggPT09IHRoaXMuaW5kZXg7XG4gICAgfTtcbiAgICByZXR1cm4gU3RhdGljQXJyYXlJdGVyYXRvcjtcbn0oKSk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIFppcEJ1ZmZlckl0ZXJhdG9yID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoWmlwQnVmZmVySXRlcmF0b3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gWmlwQnVmZmVySXRlcmF0b3IoZGVzdGluYXRpb24sIHBhcmVudCwgb2JzZXJ2YWJsZSkge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLm9ic2VydmFibGUgPSBvYnNlcnZhYmxlO1xuICAgICAgICB0aGlzLnN0aWxsVW5zdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgdGhpcy5pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgfVxuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZVtpdGVyYXRvcl8xLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBOT1RFOiB0aGVyZSBpcyBhY3R1YWxseSBhIG5hbWUgY29sbGlzaW9uIGhlcmUgd2l0aCBTdWJzY3JpYmVyLm5leHQgYW5kIEl0ZXJhdG9yLm5leHRcbiAgICAvLyAgICB0aGlzIGlzIGxlZ2l0IGJlY2F1c2UgYG5leHQoKWAgd2lsbCBuZXZlciBiZSBjYWxsZWQgYnkgYSBzdWJzY3JpcHRpb24gaW4gdGhpcyBjYXNlLlxuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09PSAwICYmIHRoaXMuaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG51bGwsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBidWZmZXIuc2hpZnQoKSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgWmlwQnVmZmVySXRlcmF0b3IucHJvdG90eXBlLmhhc1ZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZS5oYXNDb21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDAgJiYgdGhpcy5pc0NvbXBsZXRlO1xuICAgIH07XG4gICAgWmlwQnVmZmVySXRlcmF0b3IucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm5vdGlmeUluYWN0aXZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnB1c2goaW5uZXJWYWx1ZSk7XG4gICAgICAgIHRoaXMucGFyZW50LmNoZWNrSXRlcmF0b3JzKCk7XG4gICAgfTtcbiAgICBaaXBCdWZmZXJJdGVyYXRvci5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlVG9SZXN1bHRfMS5zdWJzY3JpYmVUb1Jlc3VsdCh0aGlzLCB0aGlzLm9ic2VydmFibGUsIHRoaXMsIGluZGV4KTtcbiAgICB9O1xuICAgIHJldHVybiBaaXBCdWZmZXJJdGVyYXRvcjtcbn0oT3V0ZXJTdWJzY3JpYmVyXzEuT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD16aXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgemlwXzEgPSByZXF1aXJlKCcuL3ppcCcpO1xuZnVuY3Rpb24gemlwQWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IHppcF8xLlppcE9wZXJhdG9yKHByb2plY3QpKTsgfTtcbn1cbmV4cG9ydHMuemlwQWxsID0gemlwQWxsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwQWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgU3Vic2NyaXB0aW9uXzEgPSByZXF1aXJlKCcuLi9TdWJzY3JpcHRpb24nKTtcbi8qKlxuICogQSB1bml0IG9mIHdvcmsgdG8gYmUgZXhlY3V0ZWQgaW4gYSB7QGxpbmsgU2NoZWR1bGVyfS4gQW4gYWN0aW9uIGlzIHR5cGljYWxseVxuICogY3JlYXRlZCBmcm9tIHdpdGhpbiBhIFNjaGVkdWxlciBhbmQgYW4gUnhKUyB1c2VyIGRvZXMgbm90IG5lZWQgdG8gY29uY2VyblxuICogdGhlbXNlbHZlcyBhYm91dCBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIGFuIEFjdGlvbi5cbiAqXG4gKiBgYGB0c1xuICogY2xhc3MgQWN0aW9uPFQ+IGV4dGVuZHMgU3Vic2NyaXB0aW9uIHtcbiAqICAgbmV3IChzY2hlZHVsZXI6IFNjaGVkdWxlciwgd29yazogKHN0YXRlPzogVCkgPT4gdm9pZCk7XG4gKiAgIHNjaGVkdWxlKHN0YXRlPzogVCwgZGVsYXk6IG51bWJlciA9IDApOiBTdWJzY3JpcHRpb247XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3MgQWN0aW9uPFQ+XG4gKi9cbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2NoZWR1bGVzIHRoaXMgYWN0aW9uIG9uIGl0cyBwYXJlbnQgU2NoZWR1bGVyIGZvciBleGVjdXRpb24uIE1heSBiZSBwYXNzZWRcbiAgICAgKiBzb21lIGNvbnRleHQgb2JqZWN0LCBgc3RhdGVgLiBNYXkgaGFwcGVuIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSxcbiAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIGBkZWxheWAgcGFyYW1ldGVyLCBpZiBzcGVjaWZpZWQuXG4gICAgICogQHBhcmFtIHtUfSBbc3RhdGVdIFNvbWUgY29udGV4dHVhbCBkYXRhIHRoYXQgdGhlIGB3b3JrYCBmdW5jdGlvbiB1c2VzIHdoZW5cbiAgICAgKiBjYWxsZWQgYnkgdGhlIFNjaGVkdWxlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbGF5XSBUaW1lIHRvIHdhaXQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgd29yaywgd2hlcmUgdGhlXG4gICAgICogdGltZSB1bml0IGlzIGltcGxpY2l0IGFuZCBkZWZpbmVkIGJ5IHRoZSBTY2hlZHVsZXIuXG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKi9cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gQWN0aW9uO1xufShTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24pKTtcbmV4cG9ydHMuQWN0aW9uID0gQWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWN0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgQXN5bmNBY3Rpb25fMSA9IHJlcXVpcmUoJy4vQXN5bmNBY3Rpb24nKTtcbnZhciBBbmltYXRpb25GcmFtZV8xID0gcmVxdWlyZSgnLi4vdXRpbC9BbmltYXRpb25GcmFtZScpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBBbmltYXRpb25GcmFtZUFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFuaW1hdGlvbkZyYW1lQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkZyYW1lQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy53b3JrID0gd29yaztcbiAgICB9XG4gICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICAvLyBJZiBkZWxheSBpcyBncmVhdGVyIHRoYW4gMCwgcmVxdWVzdCBhcyBhbiBhc3luYyBhY3Rpb24uXG4gICAgICAgIGlmIChkZWxheSAhPT0gbnVsbCAmJiBkZWxheSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFB1c2ggdGhlIGFjdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBzY2hlZHVsZXIgcXVldWUuXG4gICAgICAgIHNjaGVkdWxlci5hY3Rpb25zLnB1c2godGhpcyk7XG4gICAgICAgIC8vIElmIGFuIGFuaW1hdGlvbiBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCwgZG9uJ3QgcmVxdWVzdCBhbm90aGVyXG4gICAgICAgIC8vIG9uZS4gSWYgYW4gYW5pbWF0aW9uIGZyYW1lIGhhc24ndCBiZWVuIHJlcXVlc3RlZCB5ZXQsIHJlcXVlc3Qgb25lLiBSZXR1cm5cbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGZyYW1lIHJlcXVlc3QgaWQuXG4gICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuc2NoZWR1bGVkID0gQW5pbWF0aW9uRnJhbWVfMS5BbmltYXRpb25GcmFtZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCBudWxsKSkpO1xuICAgIH07XG4gICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICAvLyBJZiBkZWxheSBleGlzdHMgYW5kIGlzIGdyZWF0ZXIgdGhhbiAwLCBvciBpZiB0aGUgZGVsYXkgaXMgbnVsbCAodGhlXG4gICAgICAgIC8vIGFjdGlvbiB3YXNuJ3QgcmVzY2hlZHVsZWQpIGJ1dCB3YXMgb3JpZ2luYWxseSBzY2hlZHVsZWQgYXMgYW4gYXN5bmNcbiAgICAgICAgLy8gYWN0aW9uLCB0aGVuIHJlY3ljbGUgYXMgYW4gYXN5bmMgYWN0aW9uLlxuICAgICAgICBpZiAoKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkgfHwgKGRlbGF5ID09PSBudWxsICYmIHRoaXMuZGVsYXkgPiAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHNjaGVkdWxlciBxdWV1ZSBpcyBlbXB0eSwgY2FuY2VsIHRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGZyYW1lIGFuZFxuICAgICAgICAvLyBzZXQgdGhlIHNjaGVkdWxlZCBmbGFnIHRvIHVuZGVmaW5lZCBzbyB0aGUgbmV4dCBBbmltYXRpb25GcmFtZUFjdGlvbiB3aWxsXG4gICAgICAgIC8vIHJlcXVlc3QgaXRzIG93bi5cbiAgICAgICAgaWYgKHNjaGVkdWxlci5hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgQW5pbWF0aW9uRnJhbWVfMS5BbmltYXRpb25GcmFtZS5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICAgICAgICAgICBzY2hlZHVsZXIuc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJldHVybiB1bmRlZmluZWQgc28gdGhlIGFjdGlvbiBrbm93cyB0byByZXF1ZXN0IGEgbmV3IGFzeW5jIGlkIGlmIGl0J3MgcmVzY2hlZHVsZWQuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVBY3Rpb247XG59KEFzeW5jQWN0aW9uXzEuQXN5bmNBY3Rpb24pKTtcbmV4cG9ydHMuQW5pbWF0aW9uRnJhbWVBY3Rpb24gPSBBbmltYXRpb25GcmFtZUFjdGlvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFuaW1hdGlvbkZyYW1lQWN0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgQXN5bmNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4vQXN5bmNTY2hlZHVsZXInKTtcbnZhciBBbmltYXRpb25GcmFtZVNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKCkge1xuICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgdmFyIGNvdW50ID0gYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgrK2luZGV4IDwgY291bnQgJiYgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgrK2luZGV4IDwgY291bnQgJiYgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyXzEuQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydHMuQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgSW1tZWRpYXRlXzEgPSByZXF1aXJlKCcuLi91dGlsL0ltbWVkaWF0ZScpO1xudmFyIEFzeW5jQWN0aW9uXzEgPSByZXF1aXJlKCcuL0FzeW5jQWN0aW9uJyk7XG4vKipcbiAqIFdlIG5lZWQgdGhpcyBKU0RvYyBjb21tZW50IGZvciBhZmZlY3RpbmcgRVNEb2MuXG4gKiBAaWdub3JlXG4gKiBAZXh0ZW5kcyB7SWdub3JlZH1cbiAqL1xudmFyIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzYXBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yayk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICB0aGlzLndvcmsgPSB3b3JrO1xuICAgIH1cbiAgICBBc2FwQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgLy8gSWYgZGVsYXkgaXMgZ3JlYXRlciB0aGFuIDAsIHJlcXVlc3QgYXMgYW4gYXN5bmMgYWN0aW9uLlxuICAgICAgICBpZiAoZGVsYXkgIT09IG51bGwgJiYgZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQdXNoIHRoZSBhY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgc2NoZWR1bGVyIHF1ZXVlLlxuICAgICAgICBzY2hlZHVsZXIuYWN0aW9ucy5wdXNoKHRoaXMpO1xuICAgICAgICAvLyBJZiBhIG1pY3JvdGFzayBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCwgZG9uJ3Qgc2NoZWR1bGUgYW5vdGhlclxuICAgICAgICAvLyBvbmUuIElmIGEgbWljcm90YXNrIGhhc24ndCBiZWVuIHNjaGVkdWxlZCB5ZXQsIHNjaGVkdWxlIG9uZSBub3cuIFJldHVyblxuICAgICAgICAvLyB0aGUgY3VycmVudCBzY2hlZHVsZWQgbWljcm90YXNrIGlkLlxuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlZCB8fCAoc2NoZWR1bGVyLnNjaGVkdWxlZCA9IEltbWVkaWF0ZV8xLkltbWVkaWF0ZS5zZXRJbW1lZGlhdGUoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCBudWxsKSkpO1xuICAgIH07XG4gICAgQXNhcEFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIC8vIElmIGRlbGF5IGV4aXN0cyBhbmQgaXMgZ3JlYXRlciB0aGFuIDAsIG9yIGlmIHRoZSBkZWxheSBpcyBudWxsICh0aGVcbiAgICAgICAgLy8gYWN0aW9uIHdhc24ndCByZXNjaGVkdWxlZCkgYnV0IHdhcyBvcmlnaW5hbGx5IHNjaGVkdWxlZCBhcyBhbiBhc3luY1xuICAgICAgICAvLyBhY3Rpb24sIHRoZW4gcmVjeWNsZSBhcyBhbiBhc3luYyBhY3Rpb24uXG4gICAgICAgIGlmICgoZGVsYXkgIT09IG51bGwgJiYgZGVsYXkgPiAwKSB8fCAoZGVsYXkgPT09IG51bGwgJiYgdGhpcy5kZWxheSA+IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgc2NoZWR1bGVyIHF1ZXVlIGlzIGVtcHR5LCBjYW5jZWwgdGhlIHJlcXVlc3RlZCBtaWNyb3Rhc2sgYW5kXG4gICAgICAgIC8vIHNldCB0aGUgc2NoZWR1bGVkIGZsYWcgdG8gdW5kZWZpbmVkIHNvIHRoZSBuZXh0IEFzYXBBY3Rpb24gd2lsbCBzY2hlZHVsZVxuICAgICAgICAvLyBpdHMgb3duLlxuICAgICAgICBpZiAoc2NoZWR1bGVyLmFjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBJbW1lZGlhdGVfMS5JbW1lZGlhdGUuY2xlYXJJbW1lZGlhdGUoaWQpO1xuICAgICAgICAgICAgc2NoZWR1bGVyLnNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIHNvIHRoZSBhY3Rpb24ga25vd3MgdG8gcmVxdWVzdCBhIG5ldyBhc3luYyBpZCBpZiBpdCdzIHJlc2NoZWR1bGVkLlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgcmV0dXJuIEFzYXBBY3Rpb247XG59KEFzeW5jQWN0aW9uXzEuQXN5bmNBY3Rpb24pKTtcbmV4cG9ydHMuQXNhcEFjdGlvbiA9IEFzYXBBY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc2FwQWN0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgQXN5bmNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4vQXN5bmNTY2hlZHVsZXInKTtcbnZhciBBc2FwU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXNhcFNjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc2FwU2NoZWR1bGVyKCkge1xuICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgQXNhcFNjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgICB2YXIgY291bnQgPSBhY3Rpb25zLmxlbmd0aDtcbiAgICAgICAgYWN0aW9uID0gYWN0aW9uIHx8IGFjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKCsraW5kZXggPCBjb3VudCAmJiAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBjb3VudCAmJiAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc2FwU2NoZWR1bGVyO1xufShBc3luY1NjaGVkdWxlcl8xLkFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnRzLkFzYXBTY2hlZHVsZXIgPSBBc2FwU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXNhcFNjaGVkdWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIHJvb3RfMSA9IHJlcXVpcmUoJy4uL3V0aWwvcm9vdCcpO1xudmFyIEFjdGlvbl8xID0gcmVxdWlyZSgnLi9BY3Rpb24nKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLndvcmsgPSB3b3JrO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsd2F5cyByZXBsYWNlIHRoZSBjdXJyZW50IHN0YXRlIHdpdGggdGhlIG5ldyBzdGF0ZS5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICAvLyBTZXQgdGhlIHBlbmRpbmcgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhpcyBhY3Rpb24gaGFzIGJlZW4gc2NoZWR1bGVkLCBvclxuICAgICAgICAvLyBoYXMgcmVjdXJzaXZlbHkgcmVzY2hlZHVsZWQgaXRzZWxmLlxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIEltcG9ydGFudCBpbXBsZW1lbnRhdGlvbiBub3RlOlxuICAgICAgICAvL1xuICAgICAgICAvLyBBY3Rpb25zIG9ubHkgZXhlY3V0ZSBvbmNlIGJ5IGRlZmF1bHQsIHVubGVzcyByZXNjaGVkdWxlZCBmcm9tIHdpdGhpbiB0aGVcbiAgICAgICAgLy8gc2NoZWR1bGVkIGNhbGxiYWNrLiBUaGlzIGFsbG93cyB1cyB0byBpbXBsZW1lbnQgc2luZ2xlIGFuZCByZXBlYXRcbiAgICAgICAgLy8gYWN0aW9ucyB2aWEgdGhlIHNhbWUgY29kZSBwYXRoLCB3aXRob3V0IGFkZGluZyBBUEkgc3VyZmFjZSBhcmVhLCBhcyB3ZWxsXG4gICAgICAgIC8vIGFzIG1pbWljIHRyYWRpdGlvbmFsIHJlY3Vyc2lvbiBidXQgYWNyb3NzIGFzeW5jaHJvbm91cyBib3VuZGFyaWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBIb3dldmVyLCBKUyBydW50aW1lcyBhbmQgdGltZXJzIGRpc3Rpbmd1aXNoIGJldHdlZW4gaW50ZXJ2YWxzIGFjaGlldmVkIGJ5XG4gICAgICAgIC8vIHNlcmlhbCBgc2V0VGltZW91dGAgY2FsbHMgdnMuIGEgc2luZ2xlIGBzZXRJbnRlcnZhbGAgY2FsbC4gQW4gaW50ZXJ2YWwgb2ZcbiAgICAgICAgLy8gc2VyaWFsIGBzZXRUaW1lb3V0YCBjYWxscyBjYW4gYmUgaW5kaXZpZHVhbGx5IGRlbGF5ZWQsIHdoaWNoIGRlbGF5c1xuICAgICAgICAvLyBzY2hlZHVsaW5nIHRoZSBuZXh0IGBzZXRUaW1lb3V0YCwgYW5kIHNvIG9uLiBgc2V0SW50ZXJ2YWxgIGF0dGVtcHRzIHRvXG4gICAgICAgIC8vIGd1YXJhbnRlZSB0aGUgaW50ZXJ2YWwgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIG1vcmUgcHJlY2lzZWx5IHRvIHRoZVxuICAgICAgICAvLyBpbnRlcnZhbCBwZXJpb2QsIHJlZ2FyZGxlc3Mgb2YgbG9hZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB1c2UgYHNldEludGVydmFsYCB0byBzY2hlZHVsZSBzaW5nbGUgYW5kIHJlcGVhdCBhY3Rpb25zLlxuICAgICAgICAvLyBJZiB0aGUgYWN0aW9uIHJlc2NoZWR1bGVzIGl0c2VsZiB3aXRoIHRoZSBzYW1lIGRlbGF5LCB0aGUgaW50ZXJ2YWwgaXMgbm90XG4gICAgICAgIC8vIGNhbmNlbGVkLiBJZiB0aGUgYWN0aW9uIGRvZXNuJ3QgcmVzY2hlZHVsZSwgb3IgcmVzY2hlZHVsZXMgd2l0aCBhXG4gICAgICAgIC8vIGRpZmZlcmVudCBkZWxheSwgdGhlIGludGVydmFsIHdpbGwgYmUgY2FuY2VsZWQgYWZ0ZXIgc2NoZWR1bGVkIGNhbGxiYWNrXG4gICAgICAgIC8vIGV4ZWN1dGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIC8vIElmIHRoaXMgYWN0aW9uIGhhcyBhbHJlYWR5IGFuIGFzeW5jIElkLCBkb24ndCByZXF1ZXN0IGEgbmV3IG9uZS5cbiAgICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgfHwgdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiByb290XzEucm9vdC5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIC8vIElmIHRoaXMgYWN0aW9uIGlzIHJlc2NoZWR1bGVkIHdpdGggdGhlIHNhbWUgZGVsYXkgdGltZSwgZG9uJ3QgY2xlYXIgdGhlIGludGVydmFsIGlkLlxuICAgICAgICBpZiAoZGVsYXkgIT09IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhlIGFjdGlvbidzIGRlbGF5IHRpbWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgZGVsYXksXG4gICAgICAgIC8vIG9yIHRoZSBhY3Rpb24gaGFzIGJlZW4gcmVzY2hlZHVsZWQgYmVmb3JlIGl0J3MgZXhlY3V0ZWQsIGNsZWFyIHRoZSBpbnRlcnZhbCBpZFxuICAgICAgICByZXR1cm4gcm9vdF8xLnJvb3QuY2xlYXJJbnRlcnZhbChpZCkgJiYgdW5kZWZpbmVkIHx8IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEltbWVkaWF0ZWx5IGV4ZWN1dGVzIHRoaXMgYWN0aW9uIGFuZCB0aGUgYHdvcmtgIGl0IGNvbnRhaW5zLlxuICAgICAqIEByZXR1cm4ge2FueX1cbiAgICAgKi9cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIERlcXVldWUgaWYgdGhlIGFjdGlvbiBkaWRuJ3QgcmVzY2hlZHVsZSBpdHNlbGYuIERvbid0IGNhbGxcbiAgICAgICAgICAgIC8vIHVuc3Vic2NyaWJlKCksIGJlY2F1c2UgdGhlIGFjdGlvbiBjb3VsZCByZXNjaGVkdWxlIGxhdGVyLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6XG4gICAgICAgICAgICAvLyBgYGBcbiAgICAgICAgICAgIC8vIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiBkb1dvcmsoY291bnRlcikge1xuICAgICAgICAgICAgLy8gICAvKiAuLi4gSSdtIGEgYnVzeSB3b3JrZXIgYmVlIC4uLiAqL1xuICAgICAgICAgICAgLy8gICB2YXIgb3JpZ2luYWxBY3Rpb24gPSB0aGlzO1xuICAgICAgICAgICAgLy8gICAvKiB3YWl0IDEwMG1zIGJlZm9yZSByZXNjaGVkdWxpbmcgdGhlIGFjdGlvbiAqL1xuICAgICAgICAgICAgLy8gICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vICAgICBvcmlnaW5hbEFjdGlvbi5zY2hlZHVsZShjb3VudGVyICsgMSk7XG4gICAgICAgICAgICAvLyAgIH0sIDEwMCk7XG4gICAgICAgICAgICAvLyB9LCAxMDAwKTtcbiAgICAgICAgICAgIC8vIGBgYFxuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gISFlICYmIGUgfHwgbmV3IEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgdmFyIGluZGV4ID0gYWN0aW9ucy5pbmRleE9mKHRoaXMpO1xuICAgICAgICB0aGlzLndvcmsgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgYWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uXzEuQWN0aW9uKSk7XG5leHBvcnRzLkFzeW5jQWN0aW9uID0gQXN5bmNBY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY0FjdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFNjaGVkdWxlcl8xID0gcmVxdWlyZSgnLi4vU2NoZWR1bGVyJyk7XG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcigpIHtcbiAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIFNjaGVkdWxlciBpcyBjdXJyZW50bHkgZXhlY3V0aW5nIGEgYmF0Y2ggb2ZcbiAgICAgICAgICogcXVldWVkIGFjdGlvbnMuXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIGludGVybmFsIElEIHVzZWQgdG8gdHJhY2sgdGhlIGxhdGVzdCBhc3luY2hyb25vdXMgdGFzayBzdWNoIGFzIHRob3NlXG4gICAgICAgICAqIGNvbWluZyBmcm9tIGBzZXRUaW1lb3V0YCwgYHNldEludGVydmFsYCwgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAsIGFuZFxuICAgICAgICAgKiBvdGhlcnMuXG4gICAgICAgICAqIEB0eXBlIHthbnl9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSk7IC8vIGV4aGF1c3QgdGhlIHNjaGVkdWxlciBxdWV1ZVxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcl8xLlNjaGVkdWxlcikpO1xuZXhwb3J0cy5Bc3luY1NjaGVkdWxlciA9IEFzeW5jU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNTY2hlZHVsZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBBc3luY0FjdGlvbl8xID0gcmVxdWlyZSgnLi9Bc3luY0FjdGlvbicpO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBRdWV1ZUFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFF1ZXVlQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXVlQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy53b3JrID0gd29yaztcbiAgICB9XG4gICAgUXVldWVBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBRdWV1ZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIChkZWxheSA+IDAgfHwgdGhpcy5jbG9zZWQpID9cbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZXhlY3V0ZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheSkgOlxuICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgUXVldWVBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICAvLyBJZiBkZWxheSBleGlzdHMgYW5kIGlzIGdyZWF0ZXIgdGhhbiAwLCBvciBpZiB0aGUgZGVsYXkgaXMgbnVsbCAodGhlXG4gICAgICAgIC8vIGFjdGlvbiB3YXNuJ3QgcmVzY2hlZHVsZWQpIGJ1dCB3YXMgb3JpZ2luYWxseSBzY2hlZHVsZWQgYXMgYW4gYXN5bmNcbiAgICAgICAgLy8gYWN0aW9uLCB0aGVuIHJlY3ljbGUgYXMgYW4gYXN5bmMgYWN0aW9uLlxuICAgICAgICBpZiAoKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkgfHwgKGRlbGF5ID09PSBudWxsICYmIHRoaXMuZGVsYXkgPiAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZsdXNoIHRoZSBzY2hlZHVsZXIgc3RhcnRpbmcgd2l0aCB0aGlzIGFjdGlvbi5cbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5mbHVzaCh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBRdWV1ZUFjdGlvbjtcbn0oQXN5bmNBY3Rpb25fMS5Bc3luY0FjdGlvbikpO1xuZXhwb3J0cy5RdWV1ZUFjdGlvbiA9IFF1ZXVlQWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVldWVBY3Rpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbnZhciBBc3luY1NjaGVkdWxlcl8xID0gcmVxdWlyZSgnLi9Bc3luY1NjaGVkdWxlcicpO1xudmFyIFF1ZXVlU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVldWVTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVldWVTY2hlZHVsZXIoKSB7XG4gICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gUXVldWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyXzEuQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydHMuUXVldWVTY2hlZHVsZXIgPSBRdWV1ZVNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVF1ZXVlU2NoZWR1bGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG52YXIgQXN5bmNBY3Rpb25fMSA9IHJlcXVpcmUoJy4vQXN5bmNBY3Rpb24nKTtcbnZhciBBc3luY1NjaGVkdWxlcl8xID0gcmVxdWlyZSgnLi9Bc3luY1NjaGVkdWxlcicpO1xudmFyIFZpcnR1YWxUaW1lU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVmlydHVhbFRpbWVTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVmlydHVhbFRpbWVTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBtYXhGcmFtZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKFNjaGVkdWxlckFjdGlvbiA9PT0gdm9pZCAwKSB7IFNjaGVkdWxlckFjdGlvbiA9IFZpcnR1YWxBY3Rpb247IH1cbiAgICAgICAgaWYgKG1heEZyYW1lcyA9PT0gdm9pZCAwKSB7IG1heEZyYW1lcyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsgfVxuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmZyYW1lOyB9KTtcbiAgICAgICAgdGhpcy5tYXhGcmFtZXMgPSBtYXhGcmFtZXM7XG4gICAgICAgIHRoaXMuZnJhbWUgPSAwO1xuICAgICAgICB0aGlzLmluZGV4ID0gLTE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb21wdCB0aGUgU2NoZWR1bGVyIHRvIGV4ZWN1dGUgYWxsIG9mIGl0cyBxdWV1ZWQgYWN0aW9ucywgdGhlcmVmb3JlXG4gICAgICogY2xlYXJpbmcgaXRzIHF1ZXVlLlxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICovXG4gICAgVmlydHVhbFRpbWVTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBhY3Rpb25zID0gX2EuYWN0aW9ucywgbWF4RnJhbWVzID0gX2EubWF4RnJhbWVzO1xuICAgICAgICB2YXIgZXJyb3IsIGFjdGlvbjtcbiAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpICYmICh0aGlzLmZyYW1lID0gYWN0aW9uLmRlbGF5KSA8PSBtYXhGcmFtZXMpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZpcnR1YWxUaW1lU2NoZWR1bGVyLmZyYW1lVGltZUZhY3RvciA9IDEwO1xuICAgIHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXJfMS5Bc3luY1NjaGVkdWxlcikpO1xuZXhwb3J0cy5WaXJ0dWFsVGltZVNjaGVkdWxlciA9IFZpcnR1YWxUaW1lU2NoZWR1bGVyO1xuLyoqXG4gKiBXZSBuZWVkIHRoaXMgSlNEb2MgY29tbWVudCBmb3IgYWZmZWN0aW5nIEVTRG9jLlxuICogQGlnbm9yZVxuICogQGV4dGVuZHMge0lnbm9yZWR9XG4gKi9cbnZhciBWaXJ0dWFsQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVmlydHVhbEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWaXJ0dWFsQWN0aW9uKHNjaGVkdWxlciwgd29yaywgaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHsgaW5kZXggPSBzY2hlZHVsZXIuaW5kZXggKz0gMTsgfVxuICAgICAgICBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5kZXggPSBzY2hlZHVsZXIuaW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgVmlydHVhbEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAvLyBJZiBhbiBhY3Rpb24gaXMgcmVzY2hlZHVsZWQsIHdlIHNhdmUgYWxsb2NhdGlvbnMgYnkgbXV0YXRpbmcgaXRzIHN0YXRlLFxuICAgICAgICAvLyBwdXNoaW5nIGl0IHRvIHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlciBxdWV1ZSwgYW5kIHJlY3ljbGluZyB0aGUgYWN0aW9uLlxuICAgICAgICAvLyBCdXQgc2luY2UgdGhlIFZpcnR1YWxUaW1lU2NoZWR1bGVyIGlzIHVzZWQgZm9yIHRlc3RpbmcsIFZpcnR1YWxBY3Rpb25zXG4gICAgICAgIC8vIG11c3QgYmUgaW1tdXRhYmxlIHNvIHRoZXkgY2FuIGJlIGluc3BlY3RlZCBsYXRlci5cbiAgICAgICAgdmFyIGFjdGlvbiA9IG5ldyBWaXJ0dWFsQWN0aW9uKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspO1xuICAgICAgICB0aGlzLmFkZChhY3Rpb24pO1xuICAgICAgICByZXR1cm4gYWN0aW9uLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBWaXJ0dWFsQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgdGhpcy5kZWxheSA9IHNjaGVkdWxlci5mcmFtZSArIGRlbGF5O1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICBhY3Rpb25zLnB1c2godGhpcyk7XG4gICAgICAgIGFjdGlvbnMuc29ydChWaXJ0dWFsQWN0aW9uLnNvcnRBY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBWaXJ0dWFsQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9leGVjdXRlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5zb3J0QWN0aW9ucyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIGlmIChhLmRlbGF5ID09PSBiLmRlbGF5KSB7XG4gICAgICAgICAgICBpZiAoYS5pbmRleCA9PT0gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYS5pbmRleCA+IGIuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhLmRlbGF5ID4gYi5kZWxheSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBWaXJ0dWFsQWN0aW9uO1xufShBc3luY0FjdGlvbl8xLkFzeW5jQWN0aW9uKSk7XG5leHBvcnRzLlZpcnR1YWxBY3Rpb24gPSBWaXJ0dWFsQWN0aW9uO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmlydHVhbFRpbWVTY2hlZHVsZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb25fMSA9IHJlcXVpcmUoJy4vQW5pbWF0aW9uRnJhbWVBY3Rpb24nKTtcbnZhciBBbmltYXRpb25GcmFtZVNjaGVkdWxlcl8xID0gcmVxdWlyZSgnLi9BbmltYXRpb25GcmFtZVNjaGVkdWxlcicpO1xuLyoqXG4gKlxuICogQW5pbWF0aW9uIEZyYW1lIFNjaGVkdWxlclxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5QZXJmb3JtIHRhc2sgd2hlbiBgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZWAgd291bGQgZmlyZTwvc3Bhbj5cbiAqXG4gKiBXaGVuIGBhbmltYXRpb25GcmFtZWAgc2NoZWR1bGVyIGlzIHVzZWQgd2l0aCBkZWxheSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8ge0BsaW5rIGFzeW5jfSBzY2hlZHVsZXJcbiAqIGJlaGF2aW91ci5cbiAqXG4gKiBXaXRob3V0IGRlbGF5LCBgYW5pbWF0aW9uRnJhbWVgIHNjaGVkdWxlciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc21vb3RoIGJyb3dzZXIgYW5pbWF0aW9ucy5cbiAqIEl0IG1ha2VzIHN1cmUgc2NoZWR1bGVkIHRhc2sgd2lsbCBoYXBwZW4ganVzdCBiZWZvcmUgbmV4dCBicm93c2VyIGNvbnRlbnQgcmVwYWludCxcbiAqIHRodXMgcGVyZm9ybWluZyBhbmltYXRpb25zIGFzIGVmZmljaWVudGx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlNjaGVkdWxlIGRpdiBoZWlnaHQgYW5pbWF0aW9uPC9jYXB0aW9uPlxuICogY29uc3QgZGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNvbWUtZGl2Jyk7XG4gKlxuICogUnguU2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKGhlaWdodCkge1xuICogICBkaXYuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgXCJweFwiO1xuICpcbiAqICAgdGhpcy5zY2hlZHVsZShoZWlnaHQgKyAxKTsgIC8vIGB0aGlzYCByZWZlcmVuY2VzIGN1cnJlbnRseSBleGVjdXRpbmcgQWN0aW9uLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2UgcmVzY2hlZHVsZSB3aXRoIG5ldyBzdGF0ZVxuICogfSwgMCwgMCk7XG4gKlxuICogLy8gWW91IHdpbGwgc2VlIC5zb21lLWRpdiBlbGVtZW50IGdyb3dpbmcgaW4gaGVpZ2h0XG4gKlxuICpcbiAqIEBzdGF0aWMgdHJ1ZVxuICogQG5hbWUgYW5pbWF0aW9uRnJhbWVcbiAqIEBvd25lciBTY2hlZHVsZXJcbiAqL1xuZXhwb3J0cy5hbmltYXRpb25GcmFtZSA9IG5ldyBBbmltYXRpb25GcmFtZVNjaGVkdWxlcl8xLkFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKEFuaW1hdGlvbkZyYW1lQWN0aW9uXzEuQW5pbWF0aW9uRnJhbWVBY3Rpb24pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5pbWF0aW9uRnJhbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQXNhcEFjdGlvbl8xID0gcmVxdWlyZSgnLi9Bc2FwQWN0aW9uJyk7XG52YXIgQXNhcFNjaGVkdWxlcl8xID0gcmVxdWlyZSgnLi9Bc2FwU2NoZWR1bGVyJyk7XG4vKipcbiAqXG4gKiBBc2FwIFNjaGVkdWxlclxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5QZXJmb3JtIHRhc2sgYXMgZmFzdCBhcyBpdCBjYW4gYmUgcGVyZm9ybWVkIGFzeW5jaHJvbm91c2x5PC9zcGFuPlxuICpcbiAqIGBhc2FwYCBzY2hlZHVsZXIgYmVoYXZlcyB0aGUgc2FtZSBhcyB7QGxpbmsgYXN5bmN9IHNjaGVkdWxlciB3aGVuIHlvdSB1c2UgaXQgdG8gZGVsYXkgdGFza1xuICogaW4gdGltZS4gSWYgaG93ZXZlciB5b3Ugc2V0IGRlbGF5IHRvIGAwYCwgYGFzYXBgIHdpbGwgd2FpdCBmb3IgY3VycmVudCBzeW5jaHJvbm91c2x5IGV4ZWN1dGluZ1xuICogY29kZSB0byBlbmQgYW5kIHRoZW4gaXQgd2lsbCB0cnkgdG8gZXhlY3V0ZSBnaXZlbiB0YXNrIGFzIGZhc3QgYXMgcG9zc2libGUuXG4gKlxuICogYGFzYXBgIHNjaGVkdWxlciB3aWxsIGRvIGl0cyBiZXN0IHRvIG1pbmltaXplIHRpbWUgYmV0d2VlbiBlbmQgb2YgY3VycmVudGx5IGV4ZWN1dGluZyBjb2RlXG4gKiBhbmQgc3RhcnQgb2Ygc2NoZWR1bGVkIHRhc2suIFRoaXMgbWFrZXMgaXQgYmVzdCBjYW5kaWRhdGUgZm9yIHBlcmZvcm1pbmcgc28gY2FsbGVkIFwiZGVmZXJyaW5nXCIuXG4gKiBUcmFkaXRpb25hbGx5IHRoaXMgd2FzIGFjaGlldmVkIGJ5IGNhbGxpbmcgYHNldFRpbWVvdXQoZGVmZXJyZWRUYXNrLCAwKWAsIGJ1dCB0aGF0IHRlY2huaXF1ZSBpbnZvbHZlc1xuICogc29tZSAoYWx0aG91Z2ggbWluaW1hbCkgdW53YW50ZWQgZGVsYXkuXG4gKlxuICogTm90ZSB0aGF0IHVzaW5nIGBhc2FwYCBzY2hlZHVsZXIgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHlvdXIgdGFzayB3aWxsIGJlIGZpcnN0IHRvIHByb2Nlc3NcbiAqIGFmdGVyIGN1cnJlbnRseSBleGVjdXRpbmcgY29kZS4gSW4gcGFydGljdWxhciwgaWYgc29tZSB0YXNrIHdhcyBhbHNvIHNjaGVkdWxlZCB3aXRoIGBhc2FwYCBiZWZvcmUsXG4gKiB0aGF0IHRhc2sgd2lsbCBleGVjdXRlIGZpcnN0LiBUaGF0IGJlaW5nIHNhaWQsIGlmIHlvdSBuZWVkIHRvIHNjaGVkdWxlIHRhc2sgYXN5bmNocm9ub3VzbHksIGJ1dFxuICogYXMgc29vbiBhcyBwb3NzaWJsZSwgYGFzYXBgIHNjaGVkdWxlciBpcyB5b3VyIGJlc3QgYmV0LlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbXBhcmUgYXN5bmMgYW5kIGFzYXAgc2NoZWR1bGVyPC9jYXB0aW9uPlxuICpcbiAqIFJ4LlNjaGVkdWxlci5hc3luYy5zY2hlZHVsZSgoKSA9PiBjb25zb2xlLmxvZygnYXN5bmMnKSk7IC8vIHNjaGVkdWxpbmcgJ2FzeW5jJyBmaXJzdC4uLlxuICogUnguU2NoZWR1bGVyLmFzYXAuc2NoZWR1bGUoKCkgPT4gY29uc29sZS5sb2coJ2FzYXAnKSk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIFwiYXNhcFwiXG4gKiAvLyBcImFzeW5jXCJcbiAqIC8vIC4uLiBidXQgJ2FzYXAnIGdvZXMgZmlyc3QhXG4gKlxuICogQHN0YXRpYyB0cnVlXG4gKiBAbmFtZSBhc2FwXG4gKiBAb3duZXIgU2NoZWR1bGVyXG4gKi9cbmV4cG9ydHMuYXNhcCA9IG5ldyBBc2FwU2NoZWR1bGVyXzEuQXNhcFNjaGVkdWxlcihBc2FwQWN0aW9uXzEuQXNhcEFjdGlvbik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc2FwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIEFzeW5jQWN0aW9uXzEgPSByZXF1aXJlKCcuL0FzeW5jQWN0aW9uJyk7XG52YXIgQXN5bmNTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4vQXN5bmNTY2hlZHVsZXInKTtcbi8qKlxuICpcbiAqIEFzeW5jIFNjaGVkdWxlclxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5TY2hlZHVsZSB0YXNrIGFzIGlmIHlvdSB1c2VkIHNldFRpbWVvdXQodGFzaywgZHVyYXRpb24pPC9zcGFuPlxuICpcbiAqIGBhc3luY2Agc2NoZWR1bGVyIHNjaGVkdWxlcyB0YXNrcyBhc3luY2hyb25vdXNseSwgYnkgcHV0dGluZyB0aGVtIG9uIHRoZSBKYXZhU2NyaXB0XG4gKiBldmVudCBsb29wIHF1ZXVlLiBJdCBpcyBiZXN0IHVzZWQgdG8gZGVsYXkgdGFza3MgaW4gdGltZSBvciB0byBzY2hlZHVsZSB0YXNrcyByZXBlYXRpbmdcbiAqIGluIGludGVydmFscy5cbiAqXG4gKiBJZiB5b3UganVzdCB3YW50IHRvIFwiZGVmZXJcIiB0YXNrLCB0aGF0IGlzIHRvIHBlcmZvcm0gaXQgcmlnaHQgYWZ0ZXIgY3VycmVudGx5XG4gKiBleGVjdXRpbmcgc3luY2hyb25vdXMgY29kZSBlbmRzIChjb21tb25seSBhY2hpZXZlZCBieSBgc2V0VGltZW91dChkZWZlcnJlZFRhc2ssIDApYCksXG4gKiBiZXR0ZXIgY2hvaWNlIHdpbGwgYmUgdGhlIHtAbGluayBhc2FwfSBzY2hlZHVsZXIuXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+VXNlIGFzeW5jIHNjaGVkdWxlciB0byBkZWxheSB0YXNrPC9jYXB0aW9uPlxuICogY29uc3QgdGFzayA9ICgpID0+IGNvbnNvbGUubG9nKCdpdCB3b3JrcyEnKTtcbiAqXG4gKiBSeC5TY2hlZHVsZXIuYXN5bmMuc2NoZWR1bGUodGFzaywgMjAwMCk7XG4gKlxuICogLy8gQWZ0ZXIgMiBzZWNvbmRzIGxvZ3M6XG4gKiAvLyBcIml0IHdvcmtzIVwiXG4gKlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlVzZSBhc3luYyBzY2hlZHVsZXIgdG8gcmVwZWF0IHRhc2sgaW4gaW50ZXJ2YWxzPC9jYXB0aW9uPlxuICogZnVuY3Rpb24gdGFzayhzdGF0ZSkge1xuICogICBjb25zb2xlLmxvZyhzdGF0ZSk7XG4gKiAgIHRoaXMuc2NoZWR1bGUoc3RhdGUgKyAxLCAxMDAwKTsgLy8gYHRoaXNgIHJlZmVyZW5jZXMgY3VycmVudGx5IGV4ZWN1dGluZyBBY3Rpb24sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2UgcmVzY2hlZHVsZSB3aXRoIG5ldyBzdGF0ZSBhbmQgZGVsYXlcbiAqIH1cbiAqXG4gKiBSeC5TY2hlZHVsZXIuYXN5bmMuc2NoZWR1bGUodGFzaywgMzAwMCwgMCk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIDAgYWZ0ZXIgM3NcbiAqIC8vIDEgYWZ0ZXIgNHNcbiAqIC8vIDIgYWZ0ZXIgNXNcbiAqIC8vIDMgYWZ0ZXIgNnNcbiAqXG4gKiBAc3RhdGljIHRydWVcbiAqIEBuYW1lIGFzeW5jXG4gKiBAb3duZXIgU2NoZWR1bGVyXG4gKi9cbmV4cG9ydHMuYXN5bmMgPSBuZXcgQXN5bmNTY2hlZHVsZXJfMS5Bc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbl8xLkFzeW5jQWN0aW9uKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzeW5jLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIFF1ZXVlQWN0aW9uXzEgPSByZXF1aXJlKCcuL1F1ZXVlQWN0aW9uJyk7XG52YXIgUXVldWVTY2hlZHVsZXJfMSA9IHJlcXVpcmUoJy4vUXVldWVTY2hlZHVsZXInKTtcbi8qKlxuICpcbiAqIFF1ZXVlIFNjaGVkdWxlclxuICpcbiAqIDxzcGFuIGNsYXNzPVwiaW5mb3JtYWxcIj5QdXQgZXZlcnkgbmV4dCB0YXNrIG9uIGEgcXVldWUsIGluc3RlYWQgb2YgZXhlY3V0aW5nIGl0IGltbWVkaWF0ZWx5PC9zcGFuPlxuICpcbiAqIGBxdWV1ZWAgc2NoZWR1bGVyLCB3aGVuIHVzZWQgd2l0aCBkZWxheSwgYmVoYXZlcyB0aGUgc2FtZSBhcyB7QGxpbmsgYXN5bmN9IHNjaGVkdWxlci5cbiAqXG4gKiBXaGVuIHVzZWQgd2l0aG91dCBkZWxheSwgaXQgc2NoZWR1bGVzIGdpdmVuIHRhc2sgc3luY2hyb25vdXNseSAtIGV4ZWN1dGVzIGl0IHJpZ2h0IHdoZW5cbiAqIGl0IGlzIHNjaGVkdWxlZC4gSG93ZXZlciB3aGVuIGNhbGxlZCByZWN1cnNpdmVseSwgdGhhdCBpcyB3aGVuIGluc2lkZSB0aGUgc2NoZWR1bGVkIHRhc2ssXG4gKiBhbm90aGVyIHRhc2sgaXMgc2NoZWR1bGVkIHdpdGggcXVldWUgc2NoZWR1bGVyLCBpbnN0ZWFkIG9mIGV4ZWN1dGluZyBpbW1lZGlhdGVseSBhcyB3ZWxsLFxuICogdGhhdCB0YXNrIHdpbGwgYmUgcHV0IG9uIGEgcXVldWUgYW5kIHdhaXQgZm9yIGN1cnJlbnQgb25lIHRvIGZpbmlzaC5cbiAqXG4gKiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB5b3UgZXhlY3V0ZSB0YXNrIHdpdGggYHF1ZXVlYCBzY2hlZHVsZXIsIHlvdSBhcmUgc3VyZSBpdCB3aWxsIGVuZFxuICogYmVmb3JlIGFueSBvdGhlciB0YXNrIHNjaGVkdWxlZCB3aXRoIHRoYXQgc2NoZWR1bGVyIHdpbGwgc3RhcnQuXG4gKlxuICogQGV4YW1wbGVzIDxjYXB0aW9uPlNjaGVkdWxlIHJlY3Vyc2l2ZWx5IGZpcnN0LCB0aGVuIGRvIHNvbWV0aGluZzwvY2FwdGlvbj5cbiAqXG4gKiBSeC5TY2hlZHVsZXIucXVldWUuc2NoZWR1bGUoKCkgPT4ge1xuICogICBSeC5TY2hlZHVsZXIucXVldWUuc2NoZWR1bGUoKCkgPT4gY29uc29sZS5sb2coJ3NlY29uZCcpKTsgLy8gd2lsbCBub3QgaGFwcGVuIG5vdywgYnV0IHdpbGwgYmUgcHV0IG9uIGEgcXVldWVcbiAqXG4gKiAgIGNvbnNvbGUubG9nKCdmaXJzdCcpO1xuICogfSk7XG4gKlxuICogLy8gTG9nczpcbiAqIC8vIFwiZmlyc3RcIlxuICogLy8gXCJzZWNvbmRcIlxuICpcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5SZXNjaGVkdWxlIGl0c2VsZiByZWN1cnNpdmVseTwvY2FwdGlvbj5cbiAqXG4gKiBSeC5TY2hlZHVsZXIucXVldWUuc2NoZWR1bGUoZnVuY3Rpb24oc3RhdGUpIHtcbiAqICAgaWYgKHN0YXRlICE9PSAwKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ2JlZm9yZScsIHN0YXRlKTtcbiAqICAgICB0aGlzLnNjaGVkdWxlKHN0YXRlIC0gMSk7IC8vIGB0aGlzYCByZWZlcmVuY2VzIGN1cnJlbnRseSBleGVjdXRpbmcgQWN0aW9uLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2UgcmVzY2hlZHVsZSB3aXRoIG5ldyBzdGF0ZVxuICogICAgIGNvbnNvbGUubG9nKCdhZnRlcicsIHN0YXRlKTtcbiAqICAgfVxuICogfSwgMCwgMyk7XG4gKlxuICogLy8gSW4gc2NoZWR1bGVyIHRoYXQgcnVucyByZWN1cnNpdmVseSwgeW91IHdvdWxkIGV4cGVjdDpcbiAqIC8vIFwiYmVmb3JlXCIsIDNcbiAqIC8vIFwiYmVmb3JlXCIsIDJcbiAqIC8vIFwiYmVmb3JlXCIsIDFcbiAqIC8vIFwiYWZ0ZXJcIiwgMVxuICogLy8gXCJhZnRlclwiLCAyXG4gKiAvLyBcImFmdGVyXCIsIDNcbiAqXG4gKiAvLyBCdXQgd2l0aCBxdWV1ZSBpdCBsb2dzOlxuICogLy8gXCJiZWZvcmVcIiwgM1xuICogLy8gXCJhZnRlclwiLCAzXG4gKiAvLyBcImJlZm9yZVwiLCAyXG4gKiAvLyBcImFmdGVyXCIsIDJcbiAqIC8vIFwiYmVmb3JlXCIsIDFcbiAqIC8vIFwiYWZ0ZXJcIiwgMVxuICpcbiAqXG4gKiBAc3RhdGljIHRydWVcbiAqIEBuYW1lIHF1ZXVlXG4gKiBAb3duZXIgU2NoZWR1bGVyXG4gKi9cbmV4cG9ydHMucXVldWUgPSBuZXcgUXVldWVTY2hlZHVsZXJfMS5RdWV1ZVNjaGVkdWxlcihRdWV1ZUFjdGlvbl8xLlF1ZXVlQWN0aW9uKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXF1ZXVlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHJvb3RfMSA9IHJlcXVpcmUoJy4uL3V0aWwvcm9vdCcpO1xuZnVuY3Rpb24gc3ltYm9sSXRlcmF0b3JQb255ZmlsbChyb290KSB7XG4gICAgdmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICghU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgICAgICBTeW1ib2wuaXRlcmF0b3IgPSBTeW1ib2woJ2l0ZXJhdG9yIHBvbHlmaWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFtmb3IgTW96aWxsYSBHZWNrbyAyNy0zNTpdKGh0dHBzOi8vbXpsLmxhLzJld0UxekMpXG4gICAgICAgIHZhciBTZXRfMSA9IHJvb3QuU2V0O1xuICAgICAgICBpZiAoU2V0XzEgJiYgdHlwZW9mIG5ldyBTZXRfMSgpWydAQGl0ZXJhdG9yJ10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIE1hcF8xID0gcm9vdC5NYXA7XG4gICAgICAgIC8vIHJlcXVpcmVkIGZvciBjb21wYXRhYmlsaXR5IHdpdGggZXM2LXNoaW1cbiAgICAgICAgaWYgKE1hcF8xKSB7XG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcF8xLnByb3RvdHlwZSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICAvLyBhY2NvcmRpbmcgdG8gc3BlYywgTWFwLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSBhbmQgTWFwLm9yb3RvdHlwZS5lbnRyaWVzIG11c3QgYmUgZXF1YWwuXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ2VudHJpZXMnICYmIGtleSAhPT0gJ3NpemUnICYmIE1hcF8xLnByb3RvdHlwZVtrZXldID09PSBNYXBfMS5wcm90b3R5cGVbJ2VudHJpZXMnXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbn1cbmV4cG9ydHMuc3ltYm9sSXRlcmF0b3JQb255ZmlsbCA9IHN5bWJvbEl0ZXJhdG9yUG9ueWZpbGw7XG5leHBvcnRzLml0ZXJhdG9yID0gc3ltYm9sSXRlcmF0b3JQb255ZmlsbChyb290XzEucm9vdCk7XG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBpdGVyYXRvciBpbnN0ZWFkXG4gKi9cbmV4cG9ydHMuJCRpdGVyYXRvciA9IGV4cG9ydHMuaXRlcmF0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVyYXRvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciByb290XzEgPSByZXF1aXJlKCcuLi91dGlsL3Jvb3QnKTtcbmZ1bmN0aW9uIGdldFN5bWJvbE9ic2VydmFibGUoY29udGV4dCkge1xuICAgIHZhciAkJG9ic2VydmFibGU7XG4gICAgdmFyIFN5bWJvbCA9IGNvbnRleHQuU3ltYm9sO1xuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChTeW1ib2wub2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgJCRvYnNlcnZhYmxlID0gU3ltYm9sLm9ic2VydmFibGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAkJG9ic2VydmFibGUgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcbiAgICAgICAgICAgIFN5bWJvbC5vYnNlcnZhYmxlID0gJCRvYnNlcnZhYmxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAkJG9ic2VydmFibGUgPSAnQEBvYnNlcnZhYmxlJztcbiAgICB9XG4gICAgcmV0dXJuICQkb2JzZXJ2YWJsZTtcbn1cbmV4cG9ydHMuZ2V0U3ltYm9sT2JzZXJ2YWJsZSA9IGdldFN5bWJvbE9ic2VydmFibGU7XG5leHBvcnRzLm9ic2VydmFibGUgPSBnZXRTeW1ib2xPYnNlcnZhYmxlKHJvb3RfMS5yb290KTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIG9ic2VydmFibGUgaW5zdGVhZFxuICovXG5leHBvcnRzLiQkb2JzZXJ2YWJsZSA9IGV4cG9ydHMub2JzZXJ2YWJsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9ic2VydmFibGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcm9vdF8xID0gcmVxdWlyZSgnLi4vdXRpbC9yb290Jyk7XG52YXIgU3ltYm9sID0gcm9vdF8xLnJvb3QuU3ltYm9sO1xuZXhwb3J0cy5yeFN1YnNjcmliZXIgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJykgP1xuICAgIFN5bWJvbC5mb3IoJ3J4U3Vic2NyaWJlcicpIDogJ0BAcnhTdWJzY3JpYmVyJztcbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHJ4U3Vic2NyaWJlciBpbnN0ZWFkXG4gKi9cbmV4cG9ydHMuJCRyeFN1YnNjcmliZXIgPSBleHBvcnRzLnJ4U3Vic2NyaWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJ4U3Vic2NyaWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmlwdGlvbicpO1xudmFyIFN1YnNjcmlwdGlvbkxvZ2dhYmxlXzEgPSByZXF1aXJlKCcuL1N1YnNjcmlwdGlvbkxvZ2dhYmxlJyk7XG52YXIgYXBwbHlNaXhpbnNfMSA9IHJlcXVpcmUoJy4uL3V0aWwvYXBwbHlNaXhpbnMnKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgQ29sZE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb2xkT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb2xkT2JzZXJ2YWJsZShtZXNzYWdlcywgc2NoZWR1bGVyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMsIGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBvYnNlcnZhYmxlLmxvZ1N1YnNjcmliZWRGcmFtZSgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQobmV3IFN1YnNjcmlwdGlvbl8xLlN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS5sb2dVbnN1YnNjcmliZWRGcmFtZShpbmRleCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBvYnNlcnZhYmxlLnNjaGVkdWxlTWVzc2FnZXMoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlcztcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICBDb2xkT2JzZXJ2YWJsZS5wcm90b3R5cGUuc2NoZWR1bGVNZXNzYWdlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBtZXNzYWdlc0xlbmd0aCA9IHRoaXMubWVzc2FnZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lc3NhZ2VzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5tZXNzYWdlc1tpXTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gX2EubWVzc2FnZSwgc3Vic2NyaWJlciA9IF9hLnN1YnNjcmliZXI7XG4gICAgICAgICAgICAgICAgbWVzc2FnZS5ub3RpZmljYXRpb24ub2JzZXJ2ZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIH0sIG1lc3NhZ2UuZnJhbWUsIHsgbWVzc2FnZTogbWVzc2FnZSwgc3Vic2NyaWJlcjogc3Vic2NyaWJlciB9KSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb2xkT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZV8xLk9ic2VydmFibGUpKTtcbmV4cG9ydHMuQ29sZE9ic2VydmFibGUgPSBDb2xkT2JzZXJ2YWJsZTtcbmFwcGx5TWl4aW5zXzEuYXBwbHlNaXhpbnMoQ29sZE9ic2VydmFibGUsIFtTdWJzY3JpcHRpb25Mb2dnYWJsZV8xLlN1YnNjcmlwdGlvbkxvZ2dhYmxlXSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db2xkT2JzZXJ2YWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIFN1YmplY3RfMSA9IHJlcXVpcmUoJy4uL1N1YmplY3QnKTtcbnZhciBTdWJzY3JpcHRpb25fMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmlwdGlvbicpO1xudmFyIFN1YnNjcmlwdGlvbkxvZ2dhYmxlXzEgPSByZXF1aXJlKCcuL1N1YnNjcmlwdGlvbkxvZ2dhYmxlJyk7XG52YXIgYXBwbHlNaXhpbnNfMSA9IHJlcXVpcmUoJy4uL3V0aWwvYXBwbHlNaXhpbnMnKTtcbi8qKlxuICogV2UgbmVlZCB0aGlzIEpTRG9jIGNvbW1lbnQgZm9yIGFmZmVjdGluZyBFU0RvYy5cbiAqIEBpZ25vcmVcbiAqIEBleHRlbmRzIHtJZ25vcmVkfVxuICovXG52YXIgSG90T2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEhvdE9ic2VydmFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSG90T2JzZXJ2YWJsZShtZXNzYWdlcywgc2NoZWR1bGVyKSB7XG4gICAgICAgIF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXM7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICB9XG4gICAgLyoqIEBkZXByZWNhdGVkIGludGVybmFsIHVzZSBvbmx5ICovIEhvdE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IHRoaXM7XG4gICAgICAgIHZhciBpbmRleCA9IHN1YmplY3QubG9nU3Vic2NyaWJlZEZyYW1lKCk7XG4gICAgICAgIHN1YnNjcmliZXIuYWRkKG5ldyBTdWJzY3JpcHRpb25fMS5TdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3ViamVjdC5sb2dVbnN1YnNjcmliZWRGcmFtZShpbmRleCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgSG90T2JzZXJ2YWJsZS5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcztcbiAgICAgICAgdmFyIG1lc3NhZ2VzTGVuZ3RoID0gc3ViamVjdC5tZXNzYWdlcy5sZW5ndGg7XG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLXZhci1rZXl3b3JkICovXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZXNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHN1YmplY3QubWVzc2FnZXNbaV07XG4gICAgICAgICAgICAgICAgLyogdHNsaW50OmVuYWJsZSAqL1xuICAgICAgICAgICAgICAgIHN1YmplY3Quc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHsgbWVzc2FnZS5ub3RpZmljYXRpb24ub2JzZXJ2ZShzdWJqZWN0KTsgfSwgbWVzc2FnZS5mcmFtZSk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gSG90T2JzZXJ2YWJsZTtcbn0oU3ViamVjdF8xLlN1YmplY3QpKTtcbmV4cG9ydHMuSG90T2JzZXJ2YWJsZSA9IEhvdE9ic2VydmFibGU7XG5hcHBseU1peGluc18xLmFwcGx5TWl4aW5zKEhvdE9ic2VydmFibGUsIFtTdWJzY3JpcHRpb25Mb2dnYWJsZV8xLlN1YnNjcmlwdGlvbkxvZ2dhYmxlXSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ib3RPYnNlcnZhYmxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIFN1YnNjcmlwdGlvbkxvZyA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uTG9nKHN1YnNjcmliZWRGcmFtZSwgdW5zdWJzY3JpYmVkRnJhbWUpIHtcbiAgICAgICAgaWYgKHVuc3Vic2NyaWJlZEZyYW1lID09PSB2b2lkIDApIHsgdW5zdWJzY3JpYmVkRnJhbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IH1cbiAgICAgICAgdGhpcy5zdWJzY3JpYmVkRnJhbWUgPSBzdWJzY3JpYmVkRnJhbWU7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVkRnJhbWUgPSB1bnN1YnNjcmliZWRGcmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbkxvZztcbn0oKSk7XG5leHBvcnRzLlN1YnNjcmlwdGlvbkxvZyA9IFN1YnNjcmlwdGlvbkxvZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YnNjcmlwdGlvbkxvZy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBTdWJzY3JpcHRpb25Mb2dfMSA9IHJlcXVpcmUoJy4vU3Vic2NyaXB0aW9uTG9nJyk7XG52YXIgU3Vic2NyaXB0aW9uTG9nZ2FibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbkxvZ2dhYmxlKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uTG9nZ2FibGUucHJvdG90eXBlLmxvZ1N1YnNjcmliZWRGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobmV3IFN1YnNjcmlwdGlvbkxvZ18xLlN1YnNjcmlwdGlvbkxvZyh0aGlzLnNjaGVkdWxlci5ub3coKSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb25Mb2dnYWJsZS5wcm90b3R5cGUubG9nVW5zdWJzY3JpYmVkRnJhbWUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbkxvZ3MgPSB0aGlzLnN1YnNjcmlwdGlvbnM7XG4gICAgICAgIHZhciBvbGRTdWJzY3JpcHRpb25Mb2cgPSBzdWJzY3JpcHRpb25Mb2dzW2luZGV4XTtcbiAgICAgICAgc3Vic2NyaXB0aW9uTG9nc1tpbmRleF0gPSBuZXcgU3Vic2NyaXB0aW9uTG9nXzEuU3Vic2NyaXB0aW9uTG9nKG9sZFN1YnNjcmlwdGlvbkxvZy5zdWJzY3JpYmVkRnJhbWUsIHRoaXMuc2NoZWR1bGVyLm5vdygpKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpcHRpb25Mb2dnYWJsZTtcbn0oKSk7XG5leHBvcnRzLlN1YnNjcmlwdGlvbkxvZ2dhYmxlID0gU3Vic2NyaXB0aW9uTG9nZ2FibGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpcHRpb25Mb2dnYWJsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBOb3RpZmljYXRpb25fMSA9IHJlcXVpcmUoJy4uL05vdGlmaWNhdGlvbicpO1xudmFyIENvbGRPYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuL0NvbGRPYnNlcnZhYmxlJyk7XG52YXIgSG90T2JzZXJ2YWJsZV8xID0gcmVxdWlyZSgnLi9Ib3RPYnNlcnZhYmxlJyk7XG52YXIgU3Vic2NyaXB0aW9uTG9nXzEgPSByZXF1aXJlKCcuL1N1YnNjcmlwdGlvbkxvZycpO1xudmFyIFZpcnR1YWxUaW1lU2NoZWR1bGVyXzEgPSByZXF1aXJlKCcuLi9zY2hlZHVsZXIvVmlydHVhbFRpbWVTY2hlZHVsZXInKTtcbnZhciBkZWZhdWx0TWF4RnJhbWUgPSA3NTA7XG52YXIgVGVzdFNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFRlc3RTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGVzdFNjaGVkdWxlcihhc3NlcnREZWVwRXF1YWwpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgVmlydHVhbFRpbWVTY2hlZHVsZXJfMS5WaXJ0dWFsQWN0aW9uLCBkZWZhdWx0TWF4RnJhbWUpO1xuICAgICAgICB0aGlzLmFzc2VydERlZXBFcXVhbCA9IGFzc2VydERlZXBFcXVhbDtcbiAgICAgICAgdGhpcy5ob3RPYnNlcnZhYmxlcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbGRPYnNlcnZhYmxlcyA9IFtdO1xuICAgICAgICB0aGlzLmZsdXNoVGVzdHMgPSBbXTtcbiAgICB9XG4gICAgVGVzdFNjaGVkdWxlci5wcm90b3R5cGUuY3JlYXRlVGltZSA9IGZ1bmN0aW9uIChtYXJibGVzKSB7XG4gICAgICAgIHZhciBpbmRleE9mID0gbWFyYmxlcy5pbmRleE9mKCd8Jyk7XG4gICAgICAgIGlmIChpbmRleE9mID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXJibGUgZGlhZ3JhbSBmb3IgdGltZSBzaG91bGQgaGF2ZSBhIGNvbXBsZXRpb24gbWFya2VyIFwifFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4T2YgKiBUZXN0U2NoZWR1bGVyLmZyYW1lVGltZUZhY3RvcjtcbiAgICB9O1xuICAgIFRlc3RTY2hlZHVsZXIucHJvdG90eXBlLmNyZWF0ZUNvbGRPYnNlcnZhYmxlID0gZnVuY3Rpb24gKG1hcmJsZXMsIHZhbHVlcywgZXJyb3IpIHtcbiAgICAgICAgaWYgKG1hcmJsZXMuaW5kZXhPZignXicpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb2xkIG9ic2VydmFibGUgY2Fubm90IGhhdmUgc3Vic2NyaXB0aW9uIG9mZnNldCBcIl5cIicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXJibGVzLmluZGV4T2YoJyEnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29sZCBvYnNlcnZhYmxlIGNhbm5vdCBoYXZlIHVuc3Vic2NyaXB0aW9uIG1hcmtlciBcIiFcIicpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtZXNzYWdlcyA9IFRlc3RTY2hlZHVsZXIucGFyc2VNYXJibGVzKG1hcmJsZXMsIHZhbHVlcywgZXJyb3IpO1xuICAgICAgICB2YXIgY29sZCA9IG5ldyBDb2xkT2JzZXJ2YWJsZV8xLkNvbGRPYnNlcnZhYmxlKG1lc3NhZ2VzLCB0aGlzKTtcbiAgICAgICAgdGhpcy5jb2xkT2JzZXJ2YWJsZXMucHVzaChjb2xkKTtcbiAgICAgICAgcmV0dXJuIGNvbGQ7XG4gICAgfTtcbiAgICBUZXN0U2NoZWR1bGVyLnByb3RvdHlwZS5jcmVhdGVIb3RPYnNlcnZhYmxlID0gZnVuY3Rpb24gKG1hcmJsZXMsIHZhbHVlcywgZXJyb3IpIHtcbiAgICAgICAgaWYgKG1hcmJsZXMuaW5kZXhPZignIScpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdob3Qgb2JzZXJ2YWJsZSBjYW5ub3QgaGF2ZSB1bnN1YnNjcmlwdGlvbiBtYXJrZXIgXCIhXCInKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWVzc2FnZXMgPSBUZXN0U2NoZWR1bGVyLnBhcnNlTWFyYmxlcyhtYXJibGVzLCB2YWx1ZXMsIGVycm9yKTtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgSG90T2JzZXJ2YWJsZV8xLkhvdE9ic2VydmFibGUobWVzc2FnZXMsIHRoaXMpO1xuICAgICAgICB0aGlzLmhvdE9ic2VydmFibGVzLnB1c2goc3ViamVjdCk7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgVGVzdFNjaGVkdWxlci5wcm90b3R5cGUubWF0ZXJpYWxpemVJbm5lck9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JzZXJ2YWJsZSwgb3V0ZXJGcmFtZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgbWVzc2FnZXMgPSBbXTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHsgZnJhbWU6IF90aGlzLmZyYW1lIC0gb3V0ZXJGcmFtZSwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlTmV4dCh2YWx1ZSkgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goeyBmcmFtZTogX3RoaXMuZnJhbWUgLSBvdXRlckZyYW1lLCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbi5jcmVhdGVFcnJvcihlcnIpIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHsgZnJhbWU6IF90aGlzLmZyYW1lIC0gb3V0ZXJGcmFtZSwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9O1xuICAgIFRlc3RTY2hlZHVsZXIucHJvdG90eXBlLmV4cGVjdE9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JzZXJ2YWJsZSwgdW5zdWJzY3JpcHRpb25NYXJibGVzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh1bnN1YnNjcmlwdGlvbk1hcmJsZXMgPT09IHZvaWQgMCkgeyB1bnN1YnNjcmlwdGlvbk1hcmJsZXMgPSBudWxsOyB9XG4gICAgICAgIHZhciBhY3R1YWwgPSBbXTtcbiAgICAgICAgdmFyIGZsdXNoVGVzdCA9IHsgYWN0dWFsOiBhY3R1YWwsIHJlYWR5OiBmYWxzZSB9O1xuICAgICAgICB2YXIgdW5zdWJzY3JpcHRpb25GcmFtZSA9IFRlc3RTY2hlZHVsZXJcbiAgICAgICAgICAgIC5wYXJzZU1hcmJsZXNBc1N1YnNjcmlwdGlvbnModW5zdWJzY3JpcHRpb25NYXJibGVzKS51bnN1YnNjcmliZWRGcmFtZTtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24gPSBvYnNlcnZhYmxlLnN1YnNjcmliZShmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHg7XG4gICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBPYnNlcnZhYmxlLW9mLU9ic2VydmFibGVzXG4gICAgICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBPYnNlcnZhYmxlXzEuT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF90aGlzLm1hdGVyaWFsaXplSW5uZXJPYnNlcnZhYmxlKHZhbHVlLCBfdGhpcy5mcmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjdHVhbC5wdXNoKHsgZnJhbWU6IF90aGlzLmZyYW1lLCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbi5jcmVhdGVOZXh0KHZhbHVlKSB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBhY3R1YWwucHVzaCh7IGZyYW1lOiBfdGhpcy5mcmFtZSwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlRXJyb3IoZXJyKSB9KTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBhY3R1YWwucHVzaCh7IGZyYW1lOiBfdGhpcy5mcmFtZSwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25fMS5Ob3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgaWYgKHVuc3Vic2NyaXB0aW9uRnJhbWUgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZShmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfSwgdW5zdWJzY3JpcHRpb25GcmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mbHVzaFRlc3RzLnB1c2goZmx1c2hUZXN0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvQmU6IGZ1bmN0aW9uIChtYXJibGVzLCB2YWx1ZXMsIGVycm9yVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmbHVzaFRlc3QucmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZsdXNoVGVzdC5leHBlY3RlZCA9IFRlc3RTY2hlZHVsZXIucGFyc2VNYXJibGVzKG1hcmJsZXMsIHZhbHVlcywgZXJyb3JWYWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBUZXN0U2NoZWR1bGVyLnByb3RvdHlwZS5leHBlY3RTdWJzY3JpcHRpb25zID0gZnVuY3Rpb24gKGFjdHVhbFN1YnNjcmlwdGlvbkxvZ3MpIHtcbiAgICAgICAgdmFyIGZsdXNoVGVzdCA9IHsgYWN0dWFsOiBhY3R1YWxTdWJzY3JpcHRpb25Mb2dzLCByZWFkeTogZmFsc2UgfTtcbiAgICAgICAgdGhpcy5mbHVzaFRlc3RzLnB1c2goZmx1c2hUZXN0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvQmU6IGZ1bmN0aW9uIChtYXJibGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hcmJsZXNBcnJheSA9ICh0eXBlb2YgbWFyYmxlcyA9PT0gJ3N0cmluZycpID8gW21hcmJsZXNdIDogbWFyYmxlcztcbiAgICAgICAgICAgICAgICBmbHVzaFRlc3QucmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZsdXNoVGVzdC5leHBlY3RlZCA9IG1hcmJsZXNBcnJheS5tYXAoZnVuY3Rpb24gKG1hcmJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTY2hlZHVsZXIucGFyc2VNYXJibGVzQXNTdWJzY3JpcHRpb25zKG1hcmJsZXMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG4gICAgVGVzdFNjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBob3RPYnNlcnZhYmxlcyA9IHRoaXMuaG90T2JzZXJ2YWJsZXM7XG4gICAgICAgIHdoaWxlIChob3RPYnNlcnZhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBob3RPYnNlcnZhYmxlcy5zaGlmdCgpLnNldHVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgcmVhZHlGbHVzaFRlc3RzID0gdGhpcy5mbHVzaFRlc3RzLmZpbHRlcihmdW5jdGlvbiAodGVzdCkgeyByZXR1cm4gdGVzdC5yZWFkeTsgfSk7XG4gICAgICAgIHdoaWxlIChyZWFkeUZsdXNoVGVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIHRlc3QgPSByZWFkeUZsdXNoVGVzdHMuc2hpZnQoKTtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0RGVlcEVxdWFsKHRlc3QuYWN0dWFsLCB0ZXN0LmV4cGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVGVzdFNjaGVkdWxlci5wYXJzZU1hcmJsZXNBc1N1YnNjcmlwdGlvbnMgPSBmdW5jdGlvbiAobWFyYmxlcykge1xuICAgICAgICBpZiAodHlwZW9mIG1hcmJsZXMgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbkxvZ18xLlN1YnNjcmlwdGlvbkxvZyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW4gPSBtYXJibGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIGdyb3VwU3RhcnQgPSAtMTtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbkZyYW1lID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB2YXIgdW5zdWJzY3JpcHRpb25GcmFtZSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIGZyYW1lID0gaSAqIHRoaXMuZnJhbWVUaW1lRmFjdG9yO1xuICAgICAgICAgICAgdmFyIGMgPSBtYXJibGVzW2ldO1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgICAgICAgICBncm91cFN0YXJ0ID0gZnJhbWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgICAgICAgICBncm91cFN0YXJ0ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ14nOlxuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uRnJhbWUgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb3VuZCBhIHNlY29uZCBzdWJzY3JpcHRpb24gcG9pbnQgXFwnXlxcJyBpbiBhICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdWJzY3JpcHRpb24gbWFyYmxlIGRpYWdyYW0uIFRoZXJlIGNhbiBvbmx5IGJlIG9uZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25GcmFtZSA9IGdyb3VwU3RhcnQgPiAtMSA/IGdyb3VwU3RhcnQgOiBmcmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnISc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh1bnN1YnNjcmlwdGlvbkZyYW1lICE9PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm91bmQgYSBzZWNvbmQgc3Vic2NyaXB0aW9uIHBvaW50IFxcJ15cXCcgaW4gYSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3Vic2NyaXB0aW9uIG1hcmJsZSBkaWFncmFtLiBUaGVyZSBjYW4gb25seSBiZSBvbmUuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpcHRpb25GcmFtZSA9IGdyb3VwU3RhcnQgPiAtMSA/IGdyb3VwU3RhcnQgOiBmcmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGVyZSBjYW4gb25seSBiZSBcXCdeXFwnIGFuZCBcXCchXFwnIG1hcmtlcnMgaW4gYSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdWJzY3JpcHRpb24gbWFyYmxlIGRpYWdyYW0uIEZvdW5kIGluc3RlYWQgXFwnJyArIGMgKyAnXFwnLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh1bnN1YnNjcmlwdGlvbkZyYW1lIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb25Mb2dfMS5TdWJzY3JpcHRpb25Mb2coc3Vic2NyaXB0aW9uRnJhbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb25Mb2dfMS5TdWJzY3JpcHRpb25Mb2coc3Vic2NyaXB0aW9uRnJhbWUsIHVuc3Vic2NyaXB0aW9uRnJhbWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUZXN0U2NoZWR1bGVyLnBhcnNlTWFyYmxlcyA9IGZ1bmN0aW9uIChtYXJibGVzLCB2YWx1ZXMsIGVycm9yVmFsdWUsIG1hdGVyaWFsaXplSW5uZXJPYnNlcnZhYmxlcykge1xuICAgICAgICBpZiAobWF0ZXJpYWxpemVJbm5lck9ic2VydmFibGVzID09PSB2b2lkIDApIHsgbWF0ZXJpYWxpemVJbm5lck9ic2VydmFibGVzID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKG1hcmJsZXMuaW5kZXhPZignIScpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb252ZW50aW9uYWwgbWFyYmxlIGRpYWdyYW1zIGNhbm5vdCBoYXZlIHRoZSAnICtcbiAgICAgICAgICAgICAgICAndW5zdWJzY3JpcHRpb24gbWFya2VyIFwiIVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxlbiA9IG1hcmJsZXMubGVuZ3RoO1xuICAgICAgICB2YXIgdGVzdE1lc3NhZ2VzID0gW107XG4gICAgICAgIHZhciBzdWJJbmRleCA9IG1hcmJsZXMuaW5kZXhPZignXicpO1xuICAgICAgICB2YXIgZnJhbWVPZmZzZXQgPSBzdWJJbmRleCA9PT0gLTEgPyAwIDogKHN1YkluZGV4ICogLXRoaXMuZnJhbWVUaW1lRmFjdG9yKTtcbiAgICAgICAgdmFyIGdldFZhbHVlID0gdHlwZW9mIHZhbHVlcyAhPT0gJ29iamVjdCcgP1xuICAgICAgICAgICAgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0gOlxuICAgICAgICAgICAgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IE9ic2VydmFibGUtb2YtT2JzZXJ2YWJsZXNcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxpemVJbm5lck9ic2VydmFibGVzICYmIHZhbHVlc1t4XSBpbnN0YW5jZW9mIENvbGRPYnNlcnZhYmxlXzEuQ29sZE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1t4XS5tZXNzYWdlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1t4XTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIHZhciBncm91cFN0YXJ0ID0gLTE7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBmcmFtZSA9IGkgKiB0aGlzLmZyYW1lVGltZUZhY3RvciArIGZyYW1lT2Zmc2V0O1xuICAgICAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IHZvaWQgMDtcbiAgICAgICAgICAgIHZhciBjID0gbWFyYmxlc1tpXTtcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBTdGFydCA9IGZyYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICcpJzpcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBTdGFydCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd8JzpcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uXzEuTm90aWZpY2F0aW9uLmNyZWF0ZUNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ14nOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uXzEuTm90aWZpY2F0aW9uLmNyZWF0ZUVycm9yKGVycm9yVmFsdWUgfHwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvbl8xLk5vdGlmaWNhdGlvbi5jcmVhdGVOZXh0KGdldFZhbHVlKGMpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGVzdE1lc3NhZ2VzLnB1c2goeyBmcmFtZTogZ3JvdXBTdGFydCA+IC0xID8gZ3JvdXBTdGFydCA6IGZyYW1lLCBub3RpZmljYXRpb246IG5vdGlmaWNhdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVzdE1lc3NhZ2VzO1xuICAgIH07XG4gICAgcmV0dXJuIFRlc3RTY2hlZHVsZXI7XG59KFZpcnR1YWxUaW1lU2NoZWR1bGVyXzEuVmlydHVhbFRpbWVTY2hlZHVsZXIpKTtcbmV4cG9ydHMuVGVzdFNjaGVkdWxlciA9IFRlc3RTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UZXN0U2NoZWR1bGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIHJvb3RfMSA9IHJlcXVpcmUoJy4vcm9vdCcpO1xudmFyIFJlcXVlc3RBbmltYXRpb25GcmFtZURlZmluaXRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlcXVlc3RBbmltYXRpb25GcmFtZURlZmluaXRpb24ocm9vdCkge1xuICAgICAgICBpZiAocm9vdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSByb290LmNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQocm9vdCk7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHJvb3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocm9vdC5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSByb290Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQocm9vdCk7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHJvb3QubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocm9vdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSByb290LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQocm9vdCk7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHJvb3Qud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocm9vdC5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IHJvb3QubXNDYW5jZWxBbmltYXRpb25GcmFtZS5iaW5kKHJvb3QpO1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSByb290Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocm9vdC5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gcm9vdC5vQ2FuY2VsQW5pbWF0aW9uRnJhbWUuYmluZChyb290KTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcm9vdC5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gcm9vdC5jbGVhclRpbWVvdXQuYmluZChyb290KTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNiKSB7IHJldHVybiByb290LnNldFRpbWVvdXQoY2IsIDEwMDAgLyA2MCk7IH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFJlcXVlc3RBbmltYXRpb25GcmFtZURlZmluaXRpb247XG59KCkpO1xuZXhwb3J0cy5SZXF1ZXN0QW5pbWF0aW9uRnJhbWVEZWZpbml0aW9uID0gUmVxdWVzdEFuaW1hdGlvbkZyYW1lRGVmaW5pdGlvbjtcbmV4cG9ydHMuQW5pbWF0aW9uRnJhbWUgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lRGVmaW5pdGlvbihyb290XzEucm9vdCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BbmltYXRpb25GcmFtZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gd2hlbiBhbiBlbGVtZW50IHdhcyBxdWVyaWVkIGF0IGEgY2VydGFpbiBpbmRleCBvZiBhblxuICogT2JzZXJ2YWJsZSwgYnV0IG5vIHN1Y2ggaW5kZXggb3IgcG9zaXRpb24gZXhpc3RzIGluIHRoYXQgc2VxdWVuY2UuXG4gKlxuICogQHNlZSB7QGxpbmsgZWxlbWVudEF0fVxuICogQHNlZSB7QGxpbmsgdGFrZX1cbiAqIEBzZWUge0BsaW5rIHRha2VMYXN0fVxuICpcbiAqIEBjbGFzcyBBcmd1bWVudE91dE9mUmFuZ2VFcnJvclxuICovXG52YXIgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBcmd1bWVudE91dE9mUmFuZ2VFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpIHtcbiAgICAgICAgdmFyIGVyciA9IF9zdXBlci5jYWxsKHRoaXMsICdhcmd1bWVudCBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgdGhpcy5uYW1lID0gZXJyLm5hbWUgPSAnQXJndW1lbnRPdXRPZlJhbmdlRXJyb3InO1xuICAgICAgICB0aGlzLnN0YWNrID0gZXJyLnN0YWNrO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5Bcmd1bWVudE91dE9mUmFuZ2VFcnJvciA9IEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXJndW1lbnRPdXRPZlJhbmdlRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gYW4gT2JzZXJ2YWJsZSBvciBhIHNlcXVlbmNlIHdhcyBxdWVyaWVkIGJ1dCBoYXMgbm9cbiAqIGVsZW1lbnRzLlxuICpcbiAqIEBzZWUge0BsaW5rIGZpcnN0fVxuICogQHNlZSB7QGxpbmsgbGFzdH1cbiAqIEBzZWUge0BsaW5rIHNpbmdsZX1cbiAqXG4gKiBAY2xhc3MgRW1wdHlFcnJvclxuICovXG52YXIgRW1wdHlFcnJvciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEVtcHR5RXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRW1wdHlFcnJvcigpIHtcbiAgICAgICAgdmFyIGVyciA9IF9zdXBlci5jYWxsKHRoaXMsICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZScpO1xuICAgICAgICB0aGlzLm5hbWUgPSBlcnIubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICAgICAgdGhpcy5zdGFjayA9IGVyci5zdGFjaztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBFbXB0eUVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5FbXB0eUVycm9yID0gRW1wdHlFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVtcHR5RXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgRmFzdE1hcCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmFzdE1hcCgpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICB9XG4gICAgRmFzdE1hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB0aGlzLnZhbHVlc1trZXldID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBGYXN0TWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgRmFzdE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNba2V5XTtcbiAgICB9O1xuICAgIEZhc3RNYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2IsIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVzLmhhc093blByb3BlcnR5KGtleSkgJiYgdmFsdWVzW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKHRoaXNBcmcsIHZhbHVlc1trZXldLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBGYXN0TWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICB9O1xuICAgIHJldHVybiBGYXN0TWFwO1xufSgpKTtcbmV4cG9ydHMuRmFzdE1hcCA9IEZhc3RNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GYXN0TWFwLmpzLm1hcCIsIi8qKlxuU29tZSBjcmVkaXQgZm9yIHRoaXMgaGVscGVyIGdvZXMgdG8gaHR0cDovL2dpdGh1Yi5jb20vWXV6dUpTL3NldEltbWVkaWF0ZVxuKi9cblwidXNlIHN0cmljdFwiO1xudmFyIHJvb3RfMSA9IHJlcXVpcmUoJy4vcm9vdCcpO1xudmFyIEltbWVkaWF0ZURlZmluaXRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEltbWVkaWF0ZURlZmluaXRpb24ocm9vdCkge1xuICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgICBpZiAocm9vdC5zZXRJbW1lZGlhdGUgJiYgdHlwZW9mIHJvb3Quc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnNldEltbWVkaWF0ZSA9IHJvb3Quc2V0SW1tZWRpYXRlLmJpbmQocm9vdCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFySW1tZWRpYXRlID0gcm9vdC5jbGVhckltbWVkaWF0ZS5iaW5kKHJvb3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZXh0SGFuZGxlID0gMTtcbiAgICAgICAgICAgIHRoaXMudGFza3NCeUhhbmRsZSA9IHt9O1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhblVzZVByb2Nlc3NOZXh0VGljaygpKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1tZWRpYXRlID0gdGhpcy5jcmVhdGVQcm9jZXNzTmV4dFRpY2tTZXRJbW1lZGlhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgICAgICAgICB0aGlzLnNldEltbWVkaWF0ZSA9IHRoaXMuY3JlYXRlUG9zdE1lc3NhZ2VTZXRJbW1lZGlhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY2FuVXNlTWVzc2FnZUNoYW5uZWwoKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbW1lZGlhdGUgPSB0aGlzLmNyZWF0ZU1lc3NhZ2VDaGFubmVsU2V0SW1tZWRpYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNhblVzZVJlYWR5U3RhdGVDaGFuZ2UoKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1tZWRpYXRlID0gdGhpcy5jcmVhdGVSZWFkeVN0YXRlQ2hhbmdlU2V0SW1tZWRpYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgICAgICAgICB0aGlzLnNldEltbWVkaWF0ZSA9IHRoaXMuY3JlYXRlU2V0VGltZW91dFNldEltbWVkaWF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNpID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNsZWFySW1tZWRpYXRlLmluc3RhbmNlLnRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjaS5pbnN0YW5jZSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmNsZWFySW1tZWRpYXRlID0gY2k7XG4gICAgICAgIH1cbiAgICB9XG4gICAgSW1tZWRpYXRlRGVmaW5pdGlvbi5wcm90b3R5cGUuaWRlbnRpZnkgPSBmdW5jdGlvbiAobykge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290Lk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbiAgICB9O1xuICAgIEltbWVkaWF0ZURlZmluaXRpb24ucHJvdG90eXBlLmNhblVzZVByb2Nlc3NOZXh0VGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWRlbnRpZnkodGhpcy5yb290LnByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG4gICAgfTtcbiAgICBJbW1lZGlhdGVEZWZpbml0aW9uLnByb3RvdHlwZS5jYW5Vc2VNZXNzYWdlQ2hhbm5lbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5yb290Lk1lc3NhZ2VDaGFubmVsKTtcbiAgICB9O1xuICAgIEltbWVkaWF0ZURlZmluaXRpb24ucHJvdG90eXBlLmNhblVzZVJlYWR5U3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkb2N1bWVudCA9IHRoaXMucm9vdC5kb2N1bWVudDtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZG9jdW1lbnQgJiYgJ29ucmVhZHlzdGF0ZWNoYW5nZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpO1xuICAgIH07XG4gICAgSW1tZWRpYXRlRGVmaW5pdGlvbi5wcm90b3R5cGUuY2FuVXNlUG9zdE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByb290ID0gdGhpcy5yb290O1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGByb290LnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKHJvb3QucG9zdE1lc3NhZ2UgJiYgIXJvb3QuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXNfMSA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gcm9vdC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICByb290Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzXzEgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByb290LnBvc3RNZXNzYWdlKCcnLCAnKicpO1xuICAgICAgICAgICAgcm9vdC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91c18xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgc2V0SW1tZWRpYXRlLCBidXRcbiAgICAvLyByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBubyBhcmd1bWVudHMuXG4gICAgSW1tZWRpYXRlRGVmaW5pdGlvbi5wcm90b3R5cGUucGFydGlhbGx5QXBwbGllZCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIHJlc3VsdCgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHJlc3VsdCwgaGFuZGxlciA9IF9hLmhhbmRsZXIsIGFyZ3MgPSBfYS5hcmdzO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKG5ldyBGdW5jdGlvbignJyArIGhhbmRsZXIpKSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmbi5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgZm4uYXJncyA9IGFyZ3M7XG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9O1xuICAgIEltbWVkaWF0ZURlZmluaXRpb24ucHJvdG90eXBlLmFkZEZyb21TZXRJbW1lZGlhdGVBcmd1bWVudHMgPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICB0aGlzLnRhc2tzQnlIYW5kbGVbdGhpcy5uZXh0SGFuZGxlXSA9IHRoaXMucGFydGlhbGx5QXBwbGllZC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0SGFuZGxlKys7XG4gICAgfTtcbiAgICBJbW1lZGlhdGVEZWZpbml0aW9uLnByb3RvdHlwZS5jcmVhdGVQcm9jZXNzTmV4dFRpY2tTZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHNldEltbWVkaWF0ZS5pbnN0YW5jZTtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBpbnN0YW5jZS5hZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpbnN0YW5jZS5yb290LnByb2Nlc3MubmV4dFRpY2soaW5zdGFuY2UucGFydGlhbGx5QXBwbGllZChpbnN0YW5jZS5ydW5JZlByZXNlbnQsIGhhbmRsZSkpO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICAgICAgZm4uaW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfTtcbiAgICBJbW1lZGlhdGVEZWZpbml0aW9uLnByb3RvdHlwZS5jcmVhdGVQb3N0TWVzc2FnZVNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG4gICAgICAgIHZhciByb290ID0gdGhpcy5yb290O1xuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9ICdzZXRJbW1lZGlhdGUkJyArIHJvb3QuTWF0aC5yYW5kb20oKSArICckJztcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uIGdsb2JhbE1lc3NhZ2VIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBnbG9iYWxNZXNzYWdlSGFuZGxlci5pbnN0YW5jZTtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IHJvb3QgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5ydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25HbG9iYWxNZXNzYWdlLmluc3RhbmNlID0gdGhpcztcbiAgICAgICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHNldEltbWVkaWF0ZSwgbWVzc2FnZVByZWZpeCA9IF9hLm1lc3NhZ2VQcmVmaXgsIGluc3RhbmNlID0gX2EuaW5zdGFuY2U7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gaW5zdGFuY2UuYWRkRnJvbVNldEltbWVkaWF0ZUFyZ3VtZW50cyhhcmd1bWVudHMpO1xuICAgICAgICAgICAgaW5zdGFuY2Uucm9vdC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCAnKicpO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICAgICAgZm4uaW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICBmbi5tZXNzYWdlUHJlZml4ID0gbWVzc2FnZVByZWZpeDtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gICAgSW1tZWRpYXRlRGVmaW5pdGlvbi5wcm90b3R5cGUucnVuSWZQcmVzZW50ID0gZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiAnV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuJ1xuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAodGhpcy5jdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyAndG9vIG11Y2ggcmVjdXJzaW9uJyBlcnJvci5cbiAgICAgICAgICAgIHRoaXMucm9vdC5zZXRUaW1lb3V0KHRoaXMucGFydGlhbGx5QXBwbGllZCh0aGlzLnJ1bklmUHJlc2VudCwgaGFuZGxlKSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMudGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGFzaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgSW1tZWRpYXRlRGVmaW5pdGlvbi5wcm90b3R5cGUuY3JlYXRlTWVzc2FnZUNoYW5uZWxTZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IHRoaXMucm9vdC5NZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBfdGhpcy5ydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGZuID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gc2V0SW1tZWRpYXRlLCBjaGFubmVsID0gX2EuY2hhbm5lbCwgaW5zdGFuY2UgPSBfYS5pbnN0YW5jZTtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBpbnN0YW5jZS5hZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9O1xuICAgICAgICBmbi5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgZm4uaW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfTtcbiAgICBJbW1lZGlhdGVEZWZpbml0aW9uLnByb3RvdHlwZS5jcmVhdGVSZWFkeVN0YXRlQ2hhbmdlU2V0SW1tZWRpYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZm4gPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoKSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBzZXRJbW1lZGlhdGUuaW5zdGFuY2U7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGluc3RhbmNlLnJvb3Q7XG4gICAgICAgICAgICB2YXIgZG9jID0gcm9vdC5kb2N1bWVudDtcbiAgICAgICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBpbnN0YW5jZS5hZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5ydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICB9O1xuICAgICAgICBmbi5pbnN0YW5jZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9O1xuICAgIEltbWVkaWF0ZURlZmluaXRpb24ucHJvdG90eXBlLmNyZWF0ZVNldFRpbWVvdXRTZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZSgpIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHNldEltbWVkaWF0ZS5pbnN0YW5jZTtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBpbnN0YW5jZS5hZGRGcm9tU2V0SW1tZWRpYXRlQXJndW1lbnRzKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpbnN0YW5jZS5yb290LnNldFRpbWVvdXQoaW5zdGFuY2UucGFydGlhbGx5QXBwbGllZChpbnN0YW5jZS5ydW5JZlByZXNlbnQsIGhhbmRsZSksIDApO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICAgICAgfTtcbiAgICAgICAgZm4uaW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfTtcbiAgICByZXR1cm4gSW1tZWRpYXRlRGVmaW5pdGlvbjtcbn0oKSk7XG5leHBvcnRzLkltbWVkaWF0ZURlZmluaXRpb24gPSBJbW1lZGlhdGVEZWZpbml0aW9uO1xuZXhwb3J0cy5JbW1lZGlhdGUgPSBuZXcgSW1tZWRpYXRlRGVmaW5pdGlvbihyb290XzEucm9vdCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbW1lZGlhdGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcm9vdF8xID0gcmVxdWlyZSgnLi9yb290Jyk7XG52YXIgTWFwUG9seWZpbGxfMSA9IHJlcXVpcmUoJy4vTWFwUG9seWZpbGwnKTtcbmV4cG9ydHMuTWFwID0gcm9vdF8xLnJvb3QuTWFwIHx8IChmdW5jdGlvbiAoKSB7IHJldHVybiBNYXBQb2x5ZmlsbF8xLk1hcFBvbHlmaWxsOyB9KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWFwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIE1hcFBvbHlmaWxsID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNYXBQb2x5ZmlsbCgpIHtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICB9XG4gICAgTWFwUG9seWZpbGwucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9rZXlzLmluZGV4T2Yoa2V5KTtcbiAgICAgICAgcmV0dXJuIGkgPT09IC0xID8gdW5kZWZpbmVkIDogdGhpcy5fdmFsdWVzW2ldO1xuICAgIH07XG4gICAgTWFwUG9seWZpbGwucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5fa2V5cy5pbmRleE9mKGtleSk7XG4gICAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5fa2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNpemUrKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tpXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTWFwUG9seWZpbGwucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9rZXlzLmluZGV4T2Yoa2V5KTtcbiAgICAgICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgdGhpcy5fa2V5cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHRoaXMuc2l6ZS0tO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIE1hcFBvbHlmaWxsLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fa2V5cy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl92YWx1ZXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9O1xuICAgIE1hcFBvbHlmaWxsLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNiLCB0aGlzQXJnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIHtcbiAgICAgICAgICAgIGNiLmNhbGwodGhpc0FyZywgdGhpcy5fdmFsdWVzW2ldLCB0aGlzLl9rZXlzW2ldKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE1hcFBvbHlmaWxsO1xufSgpKTtcbmV4cG9ydHMuTWFwUG9seWZpbGwgPSBNYXBQb2x5ZmlsbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1hcFBvbHlmaWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn07XG4vKipcbiAqIEFuIGVycm9yIHRocm93biB3aGVuIGFuIGFjdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlIG9iamVjdCBoYXMgYmVlblxuICogdW5zdWJzY3JpYmVkLlxuICpcbiAqIEBzZWUge0BsaW5rIFN1YmplY3R9XG4gKiBAc2VlIHtAbGluayBCZWhhdmlvclN1YmplY3R9XG4gKlxuICogQGNsYXNzIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yXG4gKi9cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9iamVjdFVuc3Vic2NyaWJlZEVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCkge1xuICAgICAgICB2YXIgZXJyID0gX3N1cGVyLmNhbGwodGhpcywgJ29iamVjdCB1bnN1YnNjcmliZWQnKTtcbiAgICAgICAgdGhpcy5uYW1lID0gZXJyLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLnN0YWNrID0gZXJyLnN0YWNrO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcm9vdF8xID0gcmVxdWlyZSgnLi9yb290Jyk7XG5mdW5jdGlvbiBtaW5pbWFsU2V0SW1wbCgpIHtcbiAgICAvLyBUSElTIElTIE5PVCBhIGZ1bGwgaW1wbCBvZiBTZXQsIHRoaXMgaXMganVzdCB0aGUgbWluaW11bVxuICAgIC8vIGJpdHMgb2YgZnVuY3Rpb25hbGl0eSB3ZSBuZWVkIGZvciB0aGlzIGxpYnJhcnkuXG4gICAgcmV0dXJuIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIE1pbmltYWxTZXQoKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBNaW5pbWFsU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBNaW5pbWFsU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXMuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWluaW1hbFNldC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBNaW5pbWFsU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5sZW5ndGggPSAwO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gTWluaW1hbFNldDtcbiAgICB9KCkpO1xufVxuZXhwb3J0cy5taW5pbWFsU2V0SW1wbCA9IG1pbmltYWxTZXRJbXBsO1xuZXhwb3J0cy5TZXQgPSByb290XzEucm9vdC5TZXQgfHwgbWluaW1hbFNldEltcGwoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNldC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59O1xuLyoqXG4gKiBBbiBlcnJvciB0aHJvd24gd2hlbiBkdWV0aW1lIGVsYXBzZXMuXG4gKlxuICogQHNlZSB7QGxpbmsgdGltZW91dH1cbiAqXG4gKiBAY2xhc3MgVGltZW91dEVycm9yXG4gKi9cbnZhciBUaW1lb3V0RXJyb3IgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhUaW1lb3V0RXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGltZW91dEVycm9yKCkge1xuICAgICAgICB2YXIgZXJyID0gX3N1cGVyLmNhbGwodGhpcywgJ1RpbWVvdXQgaGFzIG9jY3VycmVkJyk7XG4gICAgICAgIHRoaXMubmFtZSA9IGVyci5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBlcnIuc3RhY2s7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gVGltZW91dEVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5UaW1lb3V0RXJyb3IgPSBUaW1lb3V0RXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaW1lb3V0RXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufTtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gb25lIG9yIG1vcmUgZXJyb3JzIGhhdmUgb2NjdXJyZWQgZHVyaW5nIHRoZVxuICogYHVuc3Vic2NyaWJlYCBvZiBhIHtAbGluayBTdWJzY3JpcHRpb259LlxuICovXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFVuc3Vic2NyaXB0aW9uRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICB2YXIgZXJyID0gRXJyb3IuY2FsbCh0aGlzLCBlcnJvcnMgP1xuICAgICAgICAgICAgZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuICBcIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gKChpICsgMSkgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKSk7IH0pLmpvaW4oJ1xcbiAgJykgOiAnJyk7XG4gICAgICAgIHRoaXMubmFtZSA9IGVyci5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLnN0YWNrID0gZXJyLnN0YWNrO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIFVuc3Vic2NyaXB0aW9uRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLlVuc3Vic2NyaXB0aW9uRXJyb3IgPSBVbnN1YnNjcmlwdGlvbkVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VW5zdWJzY3JpcHRpb25FcnJvci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKGRlcml2ZWRDdG9yLCBiYXNlQ3RvcnMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYmFzZUN0b3JzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBiYXNlQ3RvciA9IGJhc2VDdG9yc1tpXTtcbiAgICAgICAgdmFyIHByb3BlcnR5S2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGJhc2VDdG9yLnByb3RvdHlwZSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwLCBsZW4yID0gcHJvcGVydHlLZXlzLmxlbmd0aDsgaiA8IGxlbjI7IGorKykge1xuICAgICAgICAgICAgdmFyIG5hbWVfMSA9IHByb3BlcnR5S2V5c1tqXTtcbiAgICAgICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZVtuYW1lXzFdID0gYmFzZUN0b3IucHJvdG90eXBlW25hbWVfMV07XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmFwcGx5TWl4aW5zID0gYXBwbHlNaXhpbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBseU1peGlucy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciByb290XzEgPSByZXF1aXJlKCcuL3Jvb3QnKTtcbmZ1bmN0aW9uIGFzc2lnbkltcGwodGFyZ2V0KSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgbGVuID0gc291cmNlcy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpXTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba10gPSBzb3VyY2Vba107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmV4cG9ydHMuYXNzaWduSW1wbCA9IGFzc2lnbkltcGw7XG47XG5mdW5jdGlvbiBnZXRBc3NpZ24ocm9vdCkge1xuICAgIHJldHVybiByb290Lk9iamVjdC5hc3NpZ24gfHwgYXNzaWduSW1wbDtcbn1cbmV4cG9ydHMuZ2V0QXNzaWduID0gZ2V0QXNzaWduO1xuZXhwb3J0cy5hc3NpZ24gPSBnZXRBc3NpZ24ocm9vdF8xLnJvb3QpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNzaWduLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuLy8gdHlwZW9mIGFueSBzbyB0aGF0IGl0IHdlIGRvbid0IGhhdmUgdG8gY2FzdCB3aGVuIGNvbXBhcmluZyBhIHJlc3VsdCB0byB0aGUgZXJyb3Igb2JqZWN0XG5leHBvcnRzLmVycm9yT2JqZWN0ID0geyBlOiB7fSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3JPYmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZGVudGl0eS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcic7IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNBcnJheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJzsgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0FycmF5TGlrZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKCt2YWx1ZSk7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzRGF0ZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0Z1bmN0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIGlzQXJyYXlfMSA9IHJlcXVpcmUoJy4uL3V0aWwvaXNBcnJheScpO1xuZnVuY3Rpb24gaXNOdW1lcmljKHZhbCkge1xuICAgIC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChudWxsfHRydWV8ZmFsc2V8XCJcIilcbiAgICAvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG4gICAgLy8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG4gICAgLy8gYWRkaW5nIDEgY29ycmVjdHMgbG9zcyBvZiBwcmVjaXNpb24gZnJvbSBwYXJzZUZsb2F0ICgjMTUxMDApXG4gICAgcmV0dXJuICFpc0FycmF5XzEuaXNBcnJheSh2YWwpICYmICh2YWwgLSBwYXJzZUZsb2F0KHZhbCkgKyAxKSA+PSAwO1xufVxuZXhwb3J0cy5pc051bWVyaWMgPSBpc051bWVyaWM7XG47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc051bWVyaWMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBpc09iamVjdCh4KSB7XG4gICAgcmV0dXJuIHggIT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCc7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc09iamVjdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc1Byb21pc2UgPSBpc1Byb21pc2U7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1Byb21pc2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBpc1NjaGVkdWxlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuc2NoZWR1bGUgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzU2NoZWR1bGVyID0gaXNTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1NjaGVkdWxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbi8qIHRzbGludDpkaXNhYmxlOm5vLWVtcHR5ICovXG5mdW5jdGlvbiBub29wKCkgeyB9XG5leHBvcnRzLm5vb3AgPSBub29wO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9vcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIG5vdChwcmVkLCB0aGlzQXJnKSB7XG4gICAgZnVuY3Rpb24gbm90UHJlZCgpIHtcbiAgICAgICAgcmV0dXJuICEobm90UHJlZC5wcmVkLmFwcGx5KG5vdFByZWQudGhpc0FyZywgYXJndW1lbnRzKSk7XG4gICAgfVxuICAgIG5vdFByZWQucHJlZCA9IHByZWQ7XG4gICAgbm90UHJlZC50aGlzQXJnID0gdGhpc0FyZztcbiAgICByZXR1cm4gbm90UHJlZDtcbn1cbmV4cG9ydHMubm90ID0gbm90O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIG5vb3BfMSA9IHJlcXVpcmUoJy4vbm9vcCcpO1xuLyogdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbmZ1bmN0aW9uIHBpcGUoKSB7XG4gICAgdmFyIGZucyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGZuc1tfaSAtIDBdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkoZm5zKTtcbn1cbmV4cG9ydHMucGlwZSA9IHBpcGU7XG4vKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKCFmbnMpIHtcbiAgICAgICAgcmV0dXJuIG5vb3BfMS5ub29wO1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5leHBvcnRzLnBpcGVGcm9tQXJyYXkgPSBwaXBlRnJvbUFycmF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbi8vIENvbW1vbkpTIC8gTm9kZSBoYXZlIGdsb2JhbCBjb250ZXh0IGV4cG9zZWQgYXMgXCJnbG9iYWxcIiB2YXJpYWJsZS5cbi8vIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgd2hvbGUgbm9kZS5kLnRzIHRoaXMgdGhpcyBjb21waWxhdGlvbiB1bml0IHNvIHdlJ2xsIGp1c3QgZmFrZVxuLy8gdGhlIGdsb2JhbCBcImdsb2JhbFwiIHZhciBmb3Igbm93LlxudmFyIF9fd2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93O1xudmFyIF9fc2VsZiA9IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmIHNlbGY7XG52YXIgX19nbG9iYWwgPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWw7XG52YXIgX3Jvb3QgPSBfX3dpbmRvdyB8fCBfX2dsb2JhbCB8fCBfX3NlbGY7XG5leHBvcnRzLnJvb3QgPSBfcm9vdDtcbi8vIFdvcmthcm91bmQgQ2xvc3VyZSBDb21waWxlciByZXN0cmljdGlvbjogVGhlIGJvZHkgb2YgYSBnb29nLm1vZHVsZSBjYW5ub3QgdXNlIHRocm93LlxuLy8gVGhpcyBpcyBuZWVkZWQgd2hlbiB1c2VkIHdpdGggYW5ndWxhci90c2lja2xlIHdoaWNoIGluc2VydHMgYSBnb29nLm1vZHVsZSBzdGF0ZW1lbnQuXG4vLyBXcmFwIGluIElJRkVcbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFfcm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J4SlMgY291bGQgbm90IGZpbmQgYW55IGdsb2JhbCBjb250ZXh0ICh3aW5kb3csIHNlbGYsIGdsb2JhbCknKTtcbiAgICB9XG59KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm9vdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciByb290XzEgPSByZXF1aXJlKCcuL3Jvb3QnKTtcbnZhciBpc0FycmF5TGlrZV8xID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xudmFyIGlzUHJvbWlzZV8xID0gcmVxdWlyZSgnLi9pc1Byb21pc2UnKTtcbnZhciBpc09iamVjdF8xID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xudmFyIE9ic2VydmFibGVfMSA9IHJlcXVpcmUoJy4uL09ic2VydmFibGUnKTtcbnZhciBpdGVyYXRvcl8xID0gcmVxdWlyZSgnLi4vc3ltYm9sL2l0ZXJhdG9yJyk7XG52YXIgSW5uZXJTdWJzY3JpYmVyXzEgPSByZXF1aXJlKCcuLi9Jbm5lclN1YnNjcmliZXInKTtcbnZhciBvYnNlcnZhYmxlXzEgPSByZXF1aXJlKCcuLi9zeW1ib2wvb2JzZXJ2YWJsZScpO1xuZnVuY3Rpb24gc3Vic2NyaWJlVG9SZXN1bHQob3V0ZXJTdWJzY3JpYmVyLCByZXN1bHQsIG91dGVyVmFsdWUsIG91dGVySW5kZXgpIHtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBuZXcgSW5uZXJTdWJzY3JpYmVyXzEuSW5uZXJTdWJzY3JpYmVyKG91dGVyU3Vic2NyaWJlciwgb3V0ZXJWYWx1ZSwgb3V0ZXJJbmRleCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uLmNsb3NlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGVfMS5PYnNlcnZhYmxlKSB7XG4gICAgICAgIGlmIChyZXN1bHQuX2lzU2NhbGFyKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5zeW5jRXJyb3JUaHJvd2FibGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zdWJzY3JpYmUoZGVzdGluYXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlXzEuaXNBcnJheUxpa2UocmVzdWx0KSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbiAmJiAhZGVzdGluYXRpb24uY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQocmVzdWx0W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1Byb21pc2VfMS5pc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghZGVzdGluYXRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gZGVzdGluYXRpb24uZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIC8vIEVzY2FwaW5nIHRoZSBQcm9taXNlIHRyYXA6IGdsb2JhbGx5IHRocm93IHVuaGFuZGxlZCBlcnJvcnNcbiAgICAgICAgICAgIHJvb3RfMS5yb290LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aHJvdyBlcnI7IH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdFtpdGVyYXRvcl8xLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSByZXN1bHRbaXRlcmF0b3JfMS5pdGVyYXRvcl0oKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb25lKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQoaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZGVzdGluYXRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdFtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIG9icyA9IHJlc3VsdFtvYnNlcnZhYmxlXzEub2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvYnMuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKG5ldyBJbm5lclN1YnNjcmliZXJfMS5Jbm5lclN1YnNjcmliZXIob3V0ZXJTdWJzY3JpYmVyLCBvdXRlclZhbHVlLCBvdXRlckluZGV4KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGlzT2JqZWN0XzEuaXNPYmplY3QocmVzdWx0KSA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIHJlc3VsdCArIFwiJ1wiO1xuICAgICAgICB2YXIgbXNnID0gKFwiWW91IHByb3ZpZGVkIFwiICsgdmFsdWUgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuXCIpXG4gICAgICAgICAgICArICcgWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIEFycmF5LCBvciBJdGVyYWJsZS4nO1xuICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihuZXcgVHlwZUVycm9yKG1zZykpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmV4cG9ydHMuc3Vic2NyaWJlVG9SZXN1bHQgPSBzdWJzY3JpYmVUb1Jlc3VsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjcmliZVRvUmVzdWx0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL1N1YnNjcmliZXInKTtcbnZhciByeFN1YnNjcmliZXJfMSA9IHJlcXVpcmUoJy4uL3N5bWJvbC9yeFN1YnNjcmliZXInKTtcbnZhciBPYnNlcnZlcl8xID0gcmVxdWlyZSgnLi4vT2JzZXJ2ZXInKTtcbmZ1bmN0aW9uIHRvU3Vic2NyaWJlcihuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgaWYgKG5leHRPck9ic2VydmVyKSB7XG4gICAgICAgIGlmIChuZXh0T3JPYnNlcnZlciBpbnN0YW5jZW9mIFN1YnNjcmliZXJfMS5TdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dE9yT2JzZXJ2ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRPck9ic2VydmVyW3J4U3Vic2NyaWJlcl8xLnJ4U3Vic2NyaWJlcl0pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0T3JPYnNlcnZlcltyeFN1YnNjcmliZXJfMS5yeFN1YnNjcmliZXJdKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFuZXh0T3JPYnNlcnZlciAmJiAhZXJyb3IgJiYgIWNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIoT2JzZXJ2ZXJfMS5lbXB0eSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3Vic2NyaWJlcl8xLlN1YnNjcmliZXIobmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSk7XG59XG5leHBvcnRzLnRvU3Vic2NyaWJlciA9IHRvU3Vic2NyaWJlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvU3Vic2NyaWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBlcnJvck9iamVjdF8xID0gcmVxdWlyZSgnLi9lcnJvck9iamVjdCcpO1xudmFyIHRyeUNhdGNoVGFyZ2V0O1xuZnVuY3Rpb24gdHJ5Q2F0Y2hlcigpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gdHJ5Q2F0Y2hUYXJnZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyb3JPYmplY3RfMS5lcnJvck9iamVjdC5lID0gZTtcbiAgICAgICAgcmV0dXJuIGVycm9yT2JqZWN0XzEuZXJyb3JPYmplY3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJ5Q2F0Y2goZm4pIHtcbiAgICB0cnlDYXRjaFRhcmdldCA9IGZuO1xuICAgIHJldHVybiB0cnlDYXRjaGVyO1xufVxuZXhwb3J0cy50cnlDYXRjaCA9IHRyeUNhdGNoO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJ5Q2F0Y2guanMubWFwIiwidmFyIG5leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy9icm93c2VyLmpzJykubmV4dFRpY2s7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaW1tZWRpYXRlSWRzID0ge307XG52YXIgbmV4dEltbWVkaWF0ZUlkID0gMDtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHdpbmRvdywgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCB3aW5kb3csIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsgdGltZW91dC5jbG9zZSgpOyB9O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHdpbmRvdywgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIFRoYXQncyBub3QgaG93IG5vZGUuanMgaW1wbGVtZW50cyBpdCBidXQgdGhlIGV4cG9zZWQgYXBpIGlzIHRoZSBzYW1lLlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSBcImZ1bmN0aW9uXCIgPyBzZXRJbW1lZGlhdGUgOiBmdW5jdGlvbihmbikge1xuICB2YXIgaWQgPSBuZXh0SW1tZWRpYXRlSWQrKztcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGZhbHNlIDogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gIGltbWVkaWF0ZUlkc1tpZF0gPSB0cnVlO1xuXG4gIG5leHRUaWNrKGZ1bmN0aW9uIG9uTmV4dFRpY2soKSB7XG4gICAgaWYgKGltbWVkaWF0ZUlkc1tpZF0pIHtcbiAgICAgIC8vIGZuLmNhbGwoKSBpcyBmYXN0ZXIgc28gd2Ugb3B0aW1pemUgZm9yIHRoZSBjb21tb24gdXNlLWNhc2VcbiAgICAgIC8vIEBzZWUgaHR0cDovL2pzcGVyZi5jb20vY2FsbC1hcHBseS1zZWd1XG4gICAgICBpZiAoYXJncykge1xuICAgICAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCk7XG4gICAgICB9XG4gICAgICAvLyBQcmV2ZW50IGlkcyBmcm9tIGxlYWtpbmdcbiAgICAgIGV4cG9ydHMuY2xlYXJJbW1lZGlhdGUoaWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlkO1xufTtcblxuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9IHR5cGVvZiBjbGVhckltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiID8gY2xlYXJJbW1lZGlhdGUgOiBmdW5jdGlvbihpZCkge1xuICBkZWxldGUgaW1tZWRpYXRlSWRzW2lkXTtcbn07IiwiLy8gNC41LjYgKDIwMTctMDMtMzApXG5cbi8qKlxuICogQ29tcGlsZWQgaW5saW5lIHZlcnNpb24uIChMaWJyYXJ5IG1vZGUpXG4gKi9cblxuLypqc2hpbnQgc21hcnR0YWJzOnRydWUsIHVuZGVmOnRydWUsIGxhdGVkZWY6dHJ1ZSwgY3VybHk6dHJ1ZSwgYml0d2lzZTp0cnVlLCBjYW1lbGNhc2U6dHJ1ZSAqL1xuLypnbG9iYWxzICRjb2RlICovXG5cbihmdW5jdGlvbihleHBvcnRzLCB1bmRlZmluZWQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIG1vZHVsZXMgPSB7fTtcblxuXHRmdW5jdGlvbiByZXF1aXJlKGlkcywgY2FsbGJhY2spIHtcblx0XHR2YXIgbW9kdWxlLCBkZWZzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0bW9kdWxlID0gbW9kdWxlc1tpZHNbaV1dIHx8IHJlc29sdmUoaWRzW2ldKTtcblx0XHRcdGlmICghbW9kdWxlKSB7XG5cdFx0XHRcdHRocm93ICdtb2R1bGUgZGVmaW5pdGlvbiBkZXBlbmRlY3kgbm90IGZvdW5kOiAnICsgaWRzW2ldO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZzLnB1c2gobW9kdWxlKTtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5hcHBseShudWxsLCBkZWZzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRlZmluZShpZCwgZGVwZW5kZW5jaWVzLCBkZWZpbml0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93ICdpbnZhbGlkIG1vZHVsZSBkZWZpbml0aW9uLCBtb2R1bGUgaWQgbXVzdCBiZSBkZWZpbmVkIGFuZCBiZSBhIHN0cmluZyc7XG5cdFx0fVxuXG5cdFx0aWYgKGRlcGVuZGVuY2llcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyAnaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzIG11c3QgYmUgc3BlY2lmaWVkJztcblx0XHR9XG5cblx0XHRpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyAnaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgZGVmaW5pdGlvbiBmdW5jdGlvbiBtdXN0IGJlIHNwZWNpZmllZCc7XG5cdFx0fVxuXG5cdFx0cmVxdWlyZShkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0bW9kdWxlc1tpZF0gPSBkZWZpbml0aW9uLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWZpbmVkKGlkKSB7XG5cdFx0cmV0dXJuICEhbW9kdWxlc1tpZF07XG5cdH1cblxuXHRmdW5jdGlvbiByZXNvbHZlKGlkKSB7XG5cdFx0dmFyIHRhcmdldCA9IGV4cG9ydHM7XG5cdFx0dmFyIGZyYWdtZW50cyA9IGlkLnNwbGl0KC9bLlxcL10vKTtcblxuXHRcdGZvciAodmFyIGZpID0gMDsgZmkgPCBmcmFnbWVudHMubGVuZ3RoOyArK2ZpKSB7XG5cdFx0XHRpZiAoIXRhcmdldFtmcmFnbWVudHNbZmldXSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRhcmdldCA9IHRhcmdldFtmcmFnbWVudHNbZmldXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gZXhwb3NlKGlkcykge1xuXHRcdHZhciBpLCB0YXJnZXQsIGlkLCBmcmFnbWVudHMsIHByaXZhdGVNb2R1bGVzO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGFyZ2V0ID0gZXhwb3J0cztcblx0XHRcdGlkID0gaWRzW2ldO1xuXHRcdFx0ZnJhZ21lbnRzID0gaWQuc3BsaXQoL1suXFwvXS8pO1xuXG5cdFx0XHRmb3IgKHZhciBmaSA9IDA7IGZpIDwgZnJhZ21lbnRzLmxlbmd0aCAtIDE7ICsrZmkpIHtcblx0XHRcdFx0aWYgKHRhcmdldFtmcmFnbWVudHNbZmldXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGFyZ2V0W2ZyYWdtZW50c1tmaV1dID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQgPSB0YXJnZXRbZnJhZ21lbnRzW2ZpXV07XG5cdFx0XHR9XG5cblx0XHRcdHRhcmdldFtmcmFnbWVudHNbZnJhZ21lbnRzLmxlbmd0aCAtIDFdXSA9IG1vZHVsZXNbaWRdO1xuXHRcdH1cblxuXHRcdC8vIEV4cG9zZSBwcml2YXRlIG1vZHVsZXMgZm9yIHVuaXQgdGVzdHNcblx0XHRpZiAoZXhwb3J0cy5BTURMQ19URVNUUykge1xuXHRcdFx0cHJpdmF0ZU1vZHVsZXMgPSBleHBvcnRzLnByaXZhdGVNb2R1bGVzIHx8IHt9O1xuXG5cdFx0XHRmb3IgKGlkIGluIG1vZHVsZXMpIHtcblx0XHRcdFx0cHJpdmF0ZU1vZHVsZXNbaWRdID0gbW9kdWxlc1tpZF07XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ZGVsZXRlIHByaXZhdGVNb2R1bGVzW2lkc1tpXV07XG5cdFx0XHR9XG5cblx0XHRcdGV4cG9ydHMucHJpdmF0ZU1vZHVsZXMgPSBwcml2YXRlTW9kdWxlcztcblx0XHR9XG5cdH1cblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2dlb20vUmVjdC5qc1xuXG4vKipcbiAqIFJlY3QuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDb250YWlucyB2YXJpb3VzIHRvb2xzIGZvciByZWN0L3Bvc2l0aW9uIGNhbGN1bGF0aW9uLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLmdlb20uUmVjdFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL2dlb20vUmVjdFwiLCBbXG5dLCBmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIG1pbiA9IE1hdGgubWluLCBtYXggPSBNYXRoLm1heCwgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSByZWN0IHBvc2l0aW9uZWQgYmFzZWQgb24gdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG5hbWVcblx0ICogdG8gdGhlIHRhcmdldCByZWN0LlxuXHQgKlxuXHQgKiBAbWV0aG9kIHJlbGF0aXZlUG9zaXRpb25cblx0ICogQHBhcmFtIHtSZWN0fSByZWN0IFNvdXJjZSByZWN0IHRvIG1vZGlmeSBpbnRvIGEgbmV3IHJlY3QuXG5cdCAqIEBwYXJhbSB7UmVjdH0gdGFyZ2V0UmVjdCBSZWN0IHRvIG1vdmUgcmVsYXRpdmUgdG8gYmFzZWQgb24gdGhlIHJlbCBvcHRpb24uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSByZWwgUmVsYXRpdmUgcG9zaXRpb24uIEZvciBleGFtcGxlOiB0ci1ibC5cblx0ICovXG5cdGZ1bmN0aW9uIHJlbGF0aXZlUG9zaXRpb24ocmVjdCwgdGFyZ2V0UmVjdCwgcmVsKSB7XG5cdFx0dmFyIHgsIHksIHcsIGgsIHRhcmdldFcsIHRhcmdldEg7XG5cblx0XHR4ID0gdGFyZ2V0UmVjdC54O1xuXHRcdHkgPSB0YXJnZXRSZWN0Lnk7XG5cdFx0dyA9IHJlY3Qudztcblx0XHRoID0gcmVjdC5oO1xuXHRcdHRhcmdldFcgPSB0YXJnZXRSZWN0Lnc7XG5cdFx0dGFyZ2V0SCA9IHRhcmdldFJlY3QuaDtcblxuXHRcdHJlbCA9IChyZWwgfHwgJycpLnNwbGl0KCcnKTtcblxuXHRcdGlmIChyZWxbMF0gPT09ICdiJykge1xuXHRcdFx0eSArPSB0YXJnZXRIO1xuXHRcdH1cblxuXHRcdGlmIChyZWxbMV0gPT09ICdyJykge1xuXHRcdFx0eCArPSB0YXJnZXRXO1xuXHRcdH1cblxuXHRcdGlmIChyZWxbMF0gPT09ICdjJykge1xuXHRcdFx0eSArPSByb3VuZCh0YXJnZXRIIC8gMik7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbFsxXSA9PT0gJ2MnKSB7XG5cdFx0XHR4ICs9IHJvdW5kKHRhcmdldFcgLyAyKTtcblx0XHR9XG5cblx0XHRpZiAocmVsWzNdID09PSAnYicpIHtcblx0XHRcdHkgLT0gaDtcblx0XHR9XG5cblx0XHRpZiAocmVsWzRdID09PSAncicpIHtcblx0XHRcdHggLT0gdztcblx0XHR9XG5cblx0XHRpZiAocmVsWzNdID09PSAnYycpIHtcblx0XHRcdHkgLT0gcm91bmQoaCAvIDIpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxbNF0gPT09ICdjJykge1xuXHRcdFx0eCAtPSByb3VuZCh3IC8gMik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZSh4LCB5LCB3LCBoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUZXN0cyB2YXJpb3VzIHBvc2l0aW9ucyB0byBnZXQgdGhlIG1vc3Qgc3VpdGFibGUgb25lLlxuXHQgKlxuXHQgKiBAbWV0aG9kIGZpbmRCZXN0UmVsYXRpdmVQb3NpdGlvblxuXHQgKiBAcGFyYW0ge1JlY3R9IHJlY3QgUmVjdCB0byB1c2UgYXMgc291cmNlLlxuXHQgKiBAcGFyYW0ge1JlY3R9IHRhcmdldFJlY3QgUmVjdCB0byBtb3ZlIHJlbGF0aXZlIHRvLlxuXHQgKiBAcGFyYW0ge1JlY3R9IGNvbnN0cmFpblJlY3QgUmVjdCB0byBjb25zdHJhaW4gd2l0aGluLlxuXHQgKiBAcGFyYW0ge0FycmF5fSByZWxzIEFycmF5IG9mIHJlbGF0aXZlIHBvc2l0aW9ucyB0byB0ZXN0IGFnYWluc3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBmaW5kQmVzdFJlbGF0aXZlUG9zaXRpb24ocmVjdCwgdGFyZ2V0UmVjdCwgY29uc3RyYWluUmVjdCwgcmVscykge1xuXHRcdHZhciBwb3MsIGk7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgcmVscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0cG9zID0gcmVsYXRpdmVQb3NpdGlvbihyZWN0LCB0YXJnZXRSZWN0LCByZWxzW2ldKTtcblxuXHRcdFx0aWYgKHBvcy54ID49IGNvbnN0cmFpblJlY3QueCAmJiBwb3MueCArIHBvcy53IDw9IGNvbnN0cmFpblJlY3QudyArIGNvbnN0cmFpblJlY3QueCAmJlxuXHRcdFx0XHRwb3MueSA+PSBjb25zdHJhaW5SZWN0LnkgJiYgcG9zLnkgKyBwb3MuaCA8PSBjb25zdHJhaW5SZWN0LmggKyBjb25zdHJhaW5SZWN0LnkpIHtcblx0XHRcdFx0cmV0dXJuIHJlbHNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogSW5mbGF0ZXMgdGhlIHJlY3QgaW4gYWxsIGRpcmVjdGlvbnMuXG5cdCAqXG5cdCAqIEBtZXRob2QgaW5mbGF0ZVxuXHQgKiBAcGFyYW0ge1JlY3R9IHJlY3QgUmVjdCB0byBleHBhbmQuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSB3IFJlbGF0aXZlIHdpZHRoIHRvIGV4cGFuZCBieS5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IGggUmVsYXRpdmUgaGVpZ2h0IHRvIGV4cGFuZCBieS5cblx0ICogQHJldHVybiB7UmVjdH0gTmV3IGV4cGFuZGVkIHJlY3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBpbmZsYXRlKHJlY3QsIHcsIGgpIHtcblx0XHRyZXR1cm4gY3JlYXRlKHJlY3QueCAtIHcsIHJlY3QueSAtIGgsIHJlY3QudyArIHcgKiAyLCByZWN0LmggKyBoICogMik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlcy5cblx0ICpcblx0ICogQG1ldGhvZCBpbnRlcnNlY3Rcblx0ICogQHBhcmFtIHtSZWN0fSByZWN0IFRoZSBmaXJzdCByZWN0YW5nbGUgdG8gY29tcGFyZS5cblx0ICogQHBhcmFtIHtSZWN0fSBjcm9wUmVjdCBUaGUgc2Vjb25kIHJlY3RhbmdsZSB0byBjb21wYXJlLlxuXHQgKiBAcmV0dXJuIHtSZWN0fSBUaGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBvciBudWxsIGlmIHRoZXkgZG9uJ3QgaW50ZXJzZWN0LlxuXHQgKi9cblx0ZnVuY3Rpb24gaW50ZXJzZWN0KHJlY3QsIGNyb3BSZWN0KSB7XG5cdFx0dmFyIHgxLCB5MSwgeDIsIHkyO1xuXG5cdFx0eDEgPSBtYXgocmVjdC54LCBjcm9wUmVjdC54KTtcblx0XHR5MSA9IG1heChyZWN0LnksIGNyb3BSZWN0LnkpO1xuXHRcdHgyID0gbWluKHJlY3QueCArIHJlY3QudywgY3JvcFJlY3QueCArIGNyb3BSZWN0LncpO1xuXHRcdHkyID0gbWluKHJlY3QueSArIHJlY3QuaCwgY3JvcFJlY3QueSArIGNyb3BSZWN0LmgpO1xuXG5cdFx0aWYgKHgyIC0geDEgPCAwIHx8IHkyIC0geTEgPCAwKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlKHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHJlY3QgY2xhbXBlZCB3aXRoaW4gdGhlIHNwZWNpZmllZCBjbGFtcCByZWN0LiBUaGlzIGZvcmNlcyB0aGVcblx0ICogcmVjdCB0byBiZSBpbnNpZGUgdGhlIGNsYW1wIHJlY3QuXG5cdCAqXG5cdCAqIEBtZXRob2QgY2xhbXBcblx0ICogQHBhcmFtIHtSZWN0fSByZWN0IFJlY3RhbmdsZSB0byBmb3JjZSB3aXRoaW4gY2xhbXAgcmVjdC5cblx0ICogQHBhcmFtIHtSZWN0fSBjbGFtcFJlY3QgUmVjdGFibGUgdG8gZm9yY2Ugd2l0aGluLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IGZpeGVkU2l6ZSBUcnVlL2ZhbHNlIGlmIHNpemUgc2hvdWxkIGJlIGZpeGVkLlxuXHQgKiBAcmV0dXJuIHtSZWN0fSBDbGFtcGVkIHJlY3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBjbGFtcChyZWN0LCBjbGFtcFJlY3QsIGZpeGVkU2l6ZSkge1xuXHRcdHZhciB1bmRlcmZsb3dYMSwgdW5kZXJmbG93WTEsIG92ZXJmbG93WDIsIG92ZXJmbG93WTIsXG5cdFx0XHR4MSwgeTEsIHgyLCB5MiwgY3gyLCBjeTI7XG5cblx0XHR4MSA9IHJlY3QueDtcblx0XHR5MSA9IHJlY3QueTtcblx0XHR4MiA9IHJlY3QueCArIHJlY3Qudztcblx0XHR5MiA9IHJlY3QueSArIHJlY3QuaDtcblx0XHRjeDIgPSBjbGFtcFJlY3QueCArIGNsYW1wUmVjdC53O1xuXHRcdGN5MiA9IGNsYW1wUmVjdC55ICsgY2xhbXBSZWN0Lmg7XG5cblx0XHR1bmRlcmZsb3dYMSA9IG1heCgwLCBjbGFtcFJlY3QueCAtIHgxKTtcblx0XHR1bmRlcmZsb3dZMSA9IG1heCgwLCBjbGFtcFJlY3QueSAtIHkxKTtcblx0XHRvdmVyZmxvd1gyID0gbWF4KDAsIHgyIC0gY3gyKTtcblx0XHRvdmVyZmxvd1kyID0gbWF4KDAsIHkyIC0gY3kyKTtcblxuXHRcdHgxICs9IHVuZGVyZmxvd1gxO1xuXHRcdHkxICs9IHVuZGVyZmxvd1kxO1xuXG5cdFx0aWYgKGZpeGVkU2l6ZSkge1xuXHRcdFx0eDIgKz0gdW5kZXJmbG93WDE7XG5cdFx0XHR5MiArPSB1bmRlcmZsb3dZMTtcblx0XHRcdHgxIC09IG92ZXJmbG93WDI7XG5cdFx0XHR5MSAtPSBvdmVyZmxvd1kyO1xuXHRcdH1cblxuXHRcdHgyIC09IG92ZXJmbG93WDI7XG5cdFx0eTIgLT0gb3ZlcmZsb3dZMjtcblxuXHRcdHJldHVybiBjcmVhdGUoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHJlY3RhbmdsZSBvYmplY3QuXG5cdCAqXG5cdCAqIEBtZXRob2QgY3JlYXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSB4IFJlY3RhbmdsZSB4IGxvY2F0aW9uLlxuXHQgKiBAcGFyYW0ge051bWJlcn0geSBSZWN0YW5nbGUgeSBsb2NhdGlvbi5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IHcgUmVjdGFuZ2xlIHdpZHRoLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gaCBSZWN0YW5nbGUgaGVpZ2h0LlxuXHQgKiBAcmV0dXJuIHtSZWN0fSBOZXcgcmVjdGFuZ2xlIG9iamVjdC5cblx0ICovXG5cdGZ1bmN0aW9uIGNyZWF0ZSh4LCB5LCB3LCBoKSB7XG5cdFx0cmV0dXJuIHt4OiB4LCB5OiB5LCB3OiB3LCBoOiBofTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHJlY3RhbmdsZSBvYmplY3QgZm9ybSBhIGNsaWVudFJlY3RzIG9iamVjdC5cblx0ICpcblx0ICogQG1ldGhvZCBmcm9tQ2xpZW50UmVjdFxuXHQgKiBAcGFyYW0ge0NsaWVudFJlY3R9IGNsaWVudFJlY3QgRE9NIENsaWVudFJlY3Qgb2JqZWN0LlxuXHQgKiBAcmV0dXJuIHtSZWN0fSBOZXcgcmVjdGFuZ2xlIG9iamVjdC5cblx0ICovXG5cdGZ1bmN0aW9uIGZyb21DbGllbnRSZWN0KGNsaWVudFJlY3QpIHtcblx0XHRyZXR1cm4gY3JlYXRlKGNsaWVudFJlY3QubGVmdCwgY2xpZW50UmVjdC50b3AsIGNsaWVudFJlY3Qud2lkdGgsIGNsaWVudFJlY3QuaGVpZ2h0KTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aW5mbGF0ZTogaW5mbGF0ZSxcblx0XHRyZWxhdGl2ZVBvc2l0aW9uOiByZWxhdGl2ZVBvc2l0aW9uLFxuXHRcdGZpbmRCZXN0UmVsYXRpdmVQb3NpdGlvbjogZmluZEJlc3RSZWxhdGl2ZVBvc2l0aW9uLFxuXHRcdGludGVyc2VjdDogaW50ZXJzZWN0LFxuXHRcdGNsYW1wOiBjbGFtcCxcblx0XHRjcmVhdGU6IGNyZWF0ZSxcblx0XHRmcm9tQ2xpZW50UmVjdDogZnJvbUNsaWVudFJlY3Rcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9Qcm9taXNlLmpzXG5cbi8qKlxuICogUHJvbWlzZS5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBQcm9taXNlIHBvbHlmaWxsIHVuZGVyIE1JVCBsaWNlbnNlOiBodHRwczovL2dpdGh1Yi5jb20vdGF5bG9yaGFrZXMvcHJvbWlzZS1wb2x5ZmlsbFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5cbi8qKlxuICogTW9kaWZlZCB0byBiZSBhIGZlYXR1cmUgZmlsbCBhbmQgd3JhcHBlZCBhcyB0aW55bWNlIG1vZHVsZS5cbiAqL1xuZGVmaW5lKFwidGlueW1jZS91dGlsL1Byb21pc2VcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRpZiAod2luZG93LlByb21pc2UpIHtcblx0XHRyZXR1cm4gd2luZG93LlByb21pc2U7XG5cdH1cblxuXHQvLyBVc2UgcG9seWZpbGwgZm9yIHNldEltbWVkaWF0ZSBmb3IgcGVyZm9ybWFuY2UgZ2FpbnNcblx0dmFyIGFzYXAgPSBQcm9taXNlLmltbWVkaWF0ZUZuIHx8ICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmIHNldEltbWVkaWF0ZSkgfHxcblx0XHRmdW5jdGlvbihmbikgeyBzZXRUaW1lb3V0KGZuLCAxKTsgfTtcblxuXHQvLyBQb2x5ZmlsbCBmb3IgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcblx0ZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fVxuXG5cdHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiOyB9O1xuXG5cdGZ1bmN0aW9uIFByb21pc2UoZm4pIHtcblx0XHRpZiAodHlwZW9mIHRoaXMgIT09ICdvYmplY3QnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcblx0XHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuXHRcdHRoaXMuX3N0YXRlID0gbnVsbDtcblx0XHR0aGlzLl92YWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5fZGVmZXJyZWRzID0gW107XG5cblx0XHRkb1Jlc29sdmUoZm4sIGJpbmQocmVzb2x2ZSwgdGhpcyksIGJpbmQocmVqZWN0LCB0aGlzKSk7XG5cdH1cblxuXHRmdW5jdGlvbiBoYW5kbGUoZGVmZXJyZWQpIHtcblx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdGlmICh0aGlzLl9zdGF0ZSA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhc2FwKGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNiID0gbWUuX3N0YXRlID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXHRcdFx0aWYgKGNiID09PSBudWxsKSB7XG5cdFx0XHRcdChtZS5fc3RhdGUgPyBkZWZlcnJlZC5yZXNvbHZlIDogZGVmZXJyZWQucmVqZWN0KShtZS5fdmFsdWUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmV0O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0ID0gY2IobWUuX3ZhbHVlKTtcblx0XHRcdH1cblx0XHRcdGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdChlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZShyZXQpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzb2x2ZShuZXdWYWx1ZSkge1xuXHRcdHRyeSB7IC8vUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Byb21pc2VzLWFwbHVzL3Byb21pc2VzLXNwZWMjdGhlLXByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcblx0XHRcdGlmIChuZXdWYWx1ZSA9PT0gdGhpcykgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi4nKTtcblx0XHRcdGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdHZhciB0aGVuID0gbmV3VmFsdWUudGhlbjtcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0ZG9SZXNvbHZlKGJpbmQodGhlbiwgbmV3VmFsdWUpLCBiaW5kKHJlc29sdmUsIHRoaXMpLCBiaW5kKHJlamVjdCwgdGhpcykpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5fc3RhdGUgPSB0cnVlO1xuXHRcdFx0dGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcblx0XHRcdGZpbmFsZS5jYWxsKHRoaXMpO1xuXHRcdH0gY2F0Y2ggKGUpIHsgcmVqZWN0LmNhbGwodGhpcywgZSk7IH1cblx0fVxuXG5cdGZ1bmN0aW9uIHJlamVjdChuZXdWYWx1ZSkge1xuXHRcdHRoaXMuX3N0YXRlID0gZmFsc2U7XG5cdFx0dGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcblx0XHRmaW5hbGUuY2FsbCh0aGlzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmFsZSgpIHtcblx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRoYW5kbGUuY2FsbCh0aGlzLCB0aGlzLl9kZWZlcnJlZHNbaV0pO1xuXHRcdH1cblx0XHR0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcmVzb2x2ZSwgcmVqZWN0KXtcblx0XHR0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuXHRcdHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG5cdFx0dGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR0aGlzLnJlamVjdCA9IHJlamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUYWtlIGEgcG90ZW50aWFsbHkgbWlzYmVoYXZpbmcgcmVzb2x2ZXIgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZVxuXHQgKiBvbkZ1bGZpbGxlZCBhbmQgb25SZWplY3RlZCBhcmUgb25seSBjYWxsZWQgb25jZS5cblx0ICpcblx0ICogTWFrZXMgbm8gZ3VhcmFudGVlcyBhYm91dCBhc3luY2hyb255LlxuXHQgKi9cblx0ZnVuY3Rpb24gZG9SZXNvbHZlKGZuLCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuXHRcdHZhciBkb25lID0gZmFsc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGZuKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRpZiAoZG9uZSkgcmV0dXJuO1xuXHRcdFx0XHRkb25lID0gdHJ1ZTtcblx0XHRcdFx0b25GdWxmaWxsZWQodmFsdWUpO1xuXHRcdFx0fSwgZnVuY3Rpb24gKHJlYXNvbikge1xuXHRcdFx0XHRpZiAoZG9uZSkgcmV0dXJuO1xuXHRcdFx0XHRkb25lID0gdHJ1ZTtcblx0XHRcdFx0b25SZWplY3RlZChyZWFzb24pO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdGlmIChkb25lKSByZXR1cm47XG5cdFx0XHRkb25lID0gdHJ1ZTtcblx0XHRcdG9uUmVqZWN0ZWQoZXgpO1xuXHRcdH1cblx0fVxuXG5cdFByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcblx0XHRyZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xuXHR9O1xuXG5cdFByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuXHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0aGFuZGxlLmNhbGwobWUsIG5ldyBIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCByZXNvbHZlLCByZWplY3QpKTtcblx0XHR9KTtcblx0fTtcblxuXHRQcm9taXNlLmFsbCA9IGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShhcmd1bWVudHNbMF0pID8gYXJndW1lbnRzWzBdIDogYXJndW1lbnRzKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiByZXNvbHZlKFtdKTtcblx0XHRcdHZhciByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcblx0XHRcdGZ1bmN0aW9uIHJlcyhpLCB2YWwpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAodmFsICYmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRcdFx0dmFyIHRoZW4gPSB2YWwudGhlbjtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwodmFsLCBmdW5jdGlvbiAodmFsKSB7IHJlcyhpLCB2YWwpOyB9LCByZWplY3QpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFyZ3NbaV0gPSB2YWw7XG5cdFx0XHRcdFx0aWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGFyZ3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0XHRyZWplY3QoZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cmVzKGksIGFyZ3NbaV0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXG5cdFByb21pc2UucmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHR9KTtcblx0fTtcblxuXHRQcm9taXNlLnJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRyZWplY3QodmFsdWUpO1xuXHRcdH0pO1xuXHR9O1xuXG5cdFByb21pc2UucmFjZSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0Zm9yKHZhciBpID0gMCwgbGVuID0gdmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHZhbHVlc1tpXS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cblx0cmV0dXJuIFByb21pc2U7XG59KTtcblxuLyoganNoaW50IGlnbm9yZTplbmQgKi9cbi8qIGVzbGludC1lbmFibGUgKi9cblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3V0aWwvRGVsYXkuanNcblxuLyoqXG4gKiBEZWxheS5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBkZWxheWVkIGFjdGlvbnMgbGlrZSBzZXRUaW1lb3V0LlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnV0aWwuRGVsYXlcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91dGlsL0RlbGF5XCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvUHJvbWlzZVwiXG5dLCBmdW5jdGlvbihQcm9taXNlKSB7XG5cdHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQcm9taXNlO1xuXG5cdGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaywgZWxlbWVudCkge1xuXHRcdHZhciBpLCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGdW5jID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSwgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCddO1xuXG5cdFx0ZnVuY3Rpb24gZmVhdHVyZWZpbGwoY2FsbGJhY2spIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgdmVuZG9ycy5sZW5ndGggJiYgIXJlcXVlc3RBbmltYXRpb25GcmFtZUZ1bmM7IGkrKykge1xuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lRnVuYyA9IHdpbmRvd1t2ZW5kb3JzW2ldICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuXHRcdH1cblxuXHRcdGlmICghcmVxdWVzdEFuaW1hdGlvbkZyYW1lRnVuYykge1xuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lRnVuYyA9IGZlYXR1cmVmaWxsO1xuXHRcdH1cblxuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZUZ1bmMoY2FsbGJhY2ssIGVsZW1lbnQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JhcHBlZFNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHRpZiAodHlwZW9mIHRpbWUgIT0gJ251bWJlcicpIHtcblx0XHRcdHRpbWUgPSAwO1xuXHRcdH1cblxuXHRcdHJldHVybiBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyYXBwZWRTZXRJbnRlcnZhbChjYWxsYmFjaywgdGltZSkge1xuXHRcdGlmICh0eXBlb2YgdGltZSAhPSAnbnVtYmVyJykge1xuXHRcdFx0dGltZSA9IDE7IC8vIElFIDggbmVlZHMgaXQgdG8gYmUgPiAwXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNldEludGVydmFsKGNhbGxiYWNrLCB0aW1lKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyYXBwZWRDbGVhclRpbWVvdXQoaWQpIHtcblx0XHRyZXR1cm4gY2xlYXJUaW1lb3V0KGlkKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyYXBwZWRDbGVhckludGVydmFsKGlkKSB7XG5cdFx0cmV0dXJuIGNsZWFySW50ZXJ2YWwoaWQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVib3VuY2UoY2FsbGJhY2ssIHRpbWUpIHtcblx0XHR2YXIgdGltZXIsIGZ1bmM7XG5cblx0XHRmdW5jID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblxuXHRcdFx0dGltZXIgPSB3cmFwcGVkU2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHR9LCB0aW1lKTtcblx0XHR9O1xuXG5cdFx0ZnVuYy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZnVuYztcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0LyoqXG5cdFx0ICogUmVxdWVzdHMgYW4gYW5pbWF0aW9uIGZyYW1lIGFuZCBmYWxsYmFja3MgdG8gYSB0aW1lb3V0IG9uIG9sZGVyIGJyb3dzZXJzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBleGVjdXRlIHdoZW4gYSBuZXcgZnJhbWUgaXMgYXZhaWxhYmxlLlxuXHRcdCAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCBPcHRpb25hbCBlbGVtZW50IHRvIHNjb3BlIGl0IHRvLlxuXHRcdCAqL1xuXHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZTogZnVuY3Rpb24oY2FsbGJhY2ssIGVsZW1lbnQpIHtcblx0XHRcdGlmIChyZXF1ZXN0QW5pbWF0aW9uRnJhbWVQcm9taXNlKSB7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZVByb21pc2UudGhlbihjYWxsYmFjayk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdFx0aWYgKCFlbGVtZW50KSB7XG5cdFx0XHRcdFx0ZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzb2x2ZSwgZWxlbWVudCk7XG5cdFx0XHR9KS50aGVuKGNhbGxiYWNrKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyBhIHRpbWVyIGluIG1zIGFuZCBleGVjdXRlcyB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIHdoZW4gdGhlIHRpbWVyIHJ1bnMgb3V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRUaW1lb3V0XG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRpbWVyIHJ1bnMgb3V0LlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lIE9wdGlvbmFsIHRpbWUgdG8gd2FpdCBiZWZvcmUgdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLCBkZWZhdWx0cyB0byAwLlxuXHRcdCAqIEByZXR1cm4ge051bWJlcn0gVGltZW91dCBpZCBudW1iZXIuXG5cdFx0ICovXG5cdFx0c2V0VGltZW91dDogd3JhcHBlZFNldFRpbWVvdXQsXG5cblx0XHQvKipcblx0XHQgKiBTZXRzIGFuIGludGVydmFsIHRpbWVyIGluIG1zIGFuZCBleGVjdXRlcyB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGF0IGV2ZXJ5IGludGVydmFsIG9mIHRoYXQgdGltZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0SW50ZXJ2YWxcblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBleGVjdXRlIHdoZW4gaW50ZXJ2YWwgdGltZSBydW5zIG91dC5cblx0XHQgKiBAcGFyYW0ge051bWJlcn0gdGltZSBPcHRpb25hbCB0aW1lIHRvIHdhaXQgYmVmb3JlIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCwgZGVmYXVsdHMgdG8gMC5cblx0XHQgKiBAcmV0dXJuIHtOdW1iZXJ9IFRpbWVvdXQgaWQgbnVtYmVyLlxuXHRcdCAqL1xuXHRcdHNldEludGVydmFsOiB3cmFwcGVkU2V0SW50ZXJ2YWwsXG5cblx0XHQvKipcblx0XHQgKiBTZXRzIGFuIGVkaXRvciB0aW1lb3V0IGl0J3Mgc2ltaWxhciB0byBzZXRUaW1lb3V0IGV4Y2VwdCB0aGF0IGl0IGNoZWNrcyBpZiB0aGUgZWRpdG9yIGluc3RhbmNlIGlzXG5cdFx0ICogc3RpbGwgYWxpdmUgd2hlbiB0aGUgY2FsbGJhY2sgZ2V0cyBleGVjdXRlZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0RWRpdG9yVGltZW91dFxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS5FZGl0b3J9IGVkaXRvciBFZGl0b3IgaW5zdGFuY2UgdG8gY2hlY2sgdGhlIHJlbW92ZWQgc3RhdGUgb24uXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRpbWVyIHJ1bnMgb3V0LlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lIE9wdGlvbmFsIHRpbWUgdG8gd2FpdCBiZWZvcmUgdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLCBkZWZhdWx0cyB0byAwLlxuXHRcdCAqIEByZXR1cm4ge051bWJlcn0gVGltZW91dCBpZCBudW1iZXIuXG5cdFx0ICovXG5cdFx0c2V0RWRpdG9yVGltZW91dDogZnVuY3Rpb24oZWRpdG9yLCBjYWxsYmFjaywgdGltZSkge1xuXHRcdFx0cmV0dXJuIHdyYXBwZWRTZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIWVkaXRvci5yZW1vdmVkKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdGltZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgYW4gaW50ZXJ2YWwgdGltZXIgaXQncyBzaW1pbGFyIHRvIHNldEludGVydmFsIGV4Y2VwdCB0aGF0IGl0IGNoZWNrcyBpZiB0aGUgZWRpdG9yIGluc3RhbmNlIGlzXG5cdFx0ICogc3RpbGwgYWxpdmUgd2hlbiB0aGUgY2FsbGJhY2sgZ2V0cyBleGVjdXRlZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0RWRpdG9ySW50ZXJ2YWxcblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBleGVjdXRlIHdoZW4gaW50ZXJ2YWwgdGltZSBydW5zIG91dC5cblx0XHQgKiBAcGFyYW0ge051bWJlcn0gdGltZSBPcHRpb25hbCB0aW1lIHRvIHdhaXQgYmVmb3JlIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCwgZGVmYXVsdHMgdG8gMC5cblx0XHQgKiBAcmV0dXJuIHtOdW1iZXJ9IFRpbWVvdXQgaWQgbnVtYmVyLlxuXHRcdCAqL1xuXHRcdHNldEVkaXRvckludGVydmFsOiBmdW5jdGlvbihlZGl0b3IsIGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0XHR2YXIgdGltZXI7XG5cblx0XHRcdHRpbWVyID0gd3JhcHBlZFNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIWVkaXRvci5yZW1vdmVkKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdGltZSk7XG5cblx0XHRcdHJldHVybiB0aW1lcjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ3JlYXRlcyBkZWJvdW5jZWQgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBvbmx5IGdldHMgZXhlY3V0ZWQgb25jZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBkZWJvdW5jZVxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aW1lciBmaW5pc2hlcy5cblx0XHQgKiBAcGFyYW0ge051bWJlcn0gdGltZSBPcHRpb25hbCB0aW1lIHRvIHdhaXQgYmVmb3JlIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCwgZGVmYXVsdHMgdG8gMC5cblx0XHQgKiBAcmV0dXJuIHtGdW5jdGlvbn0gZGVib3VuY2VkIGZ1bmN0aW9uIGNhbGxiYWNrLlxuXHRcdCAqL1xuXHRcdGRlYm91bmNlOiBkZWJvdW5jZSxcblxuXHRcdC8vIFRocm90dGxlIG5lZWRzIHRvIGJlIGRlYm91bmNlIGR1ZSB0byBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblx0XHR0aHJvdHRsZTogZGVib3VuY2UsXG5cblx0XHQvKipcblx0XHQgKiBDbGVhcnMgYW4gaW50ZXJ2YWwgdGltZXIgc28gaXQgd29uJ3QgZXhlY3V0ZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgY2xlYXJJbnRlcnZhbFxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBJbnRlcnZhbCB0aW1lciBpZCBudW1iZXIuXG5cdFx0ICovXG5cdFx0Y2xlYXJJbnRlcnZhbDogd3JhcHBlZENsZWFySW50ZXJ2YWwsXG5cblx0XHQvKipcblx0XHQgKiBDbGVhcnMgYW4gdGltZW91dCB0aW1lciBzbyBpdCB3b24ndCBleGVjdXRlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjbGVhclRpbWVvdXRcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gVGltZW91dCB0aW1lciBpZCBudW1iZXIuXG5cdFx0ICovXG5cdFx0Y2xlYXJUaW1lb3V0OiB3cmFwcGVkQ2xlYXJUaW1lb3V0XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL0Vudi5qc1xuXG4vKipcbiAqIEVudi5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgY29udGFpbnMgdmFyaW91cyBlbnZpcm9ubWVudCBjb25zdGFudHMgbGlrZSBicm93c2VyIHZlcnNpb25zIGV0Yy5cbiAqIE5vcm1hbGx5IHlvdSBkb24ndCB3YW50IHRvIHNuaWZmIHNwZWNpZmljIGJyb3dzZXIgdmVyc2lvbnMgYnV0IHNvbWV0aW1lcyB5b3UgaGF2ZVxuICogdG8gd2hlbiBpdCdzIGltcG9zc2libGUgdG8gZmVhdHVyZSBkZXRlY3QuIFNvIHVzZSB0aGlzIHdpdGggY2FyZS5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5FbnZcbiAqIEBzdGF0aWNcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9FbnZcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHR2YXIgbmF2ID0gbmF2aWdhdG9yLCB1c2VyQWdlbnQgPSBuYXYudXNlckFnZW50O1xuXHR2YXIgb3BlcmEsIHdlYmtpdCwgaWUsIGllMTEsIGllMTIsIGdlY2tvLCBtYWMsIGlEZXZpY2UsIGFuZHJvaWQsIGZpbGVBcGksIHBob25lLCB0YWJsZXQsIHdpbmRvd3NQaG9uZTtcblxuXHRmdW5jdGlvbiBtYXRjaE1lZGlhUXVlcnkocXVlcnkpIHtcblx0XHRyZXR1cm4gXCJtYXRjaE1lZGlhXCIgaW4gd2luZG93ID8gbWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcyA6IGZhbHNlO1xuXHR9XG5cblx0b3BlcmEgPSB3aW5kb3cub3BlcmEgJiYgd2luZG93Lm9wZXJhLmJ1aWxkTnVtYmVyO1xuXHRhbmRyb2lkID0gL0FuZHJvaWQvLnRlc3QodXNlckFnZW50KTtcblx0d2Via2l0ID0gL1dlYktpdC8udGVzdCh1c2VyQWdlbnQpO1xuXHRpZSA9ICF3ZWJraXQgJiYgIW9wZXJhICYmICgvTVNJRS9naSkudGVzdCh1c2VyQWdlbnQpICYmICgvRXhwbG9yZXIvZ2kpLnRlc3QobmF2LmFwcE5hbWUpO1xuXHRpZSA9IGllICYmIC9NU0lFIChcXHcrKVxcLi8uZXhlYyh1c2VyQWdlbnQpWzFdO1xuXHRpZTExID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJykgIT0gLTEgJiYgKHVzZXJBZ2VudC5pbmRleE9mKCdydjonKSAhPSAtMSB8fCBuYXYuYXBwTmFtZS5pbmRleE9mKCdOZXRzY2FwZScpICE9IC0xKSA/IDExIDogZmFsc2U7XG5cdGllMTIgPSAodXNlckFnZW50LmluZGV4T2YoJ0VkZ2UvJykgIT0gLTEgJiYgIWllICYmICFpZTExKSA/IDEyIDogZmFsc2U7XG5cdGllID0gaWUgfHwgaWUxMSB8fCBpZTEyO1xuXHRnZWNrbyA9ICF3ZWJraXQgJiYgIWllMTEgJiYgL0dlY2tvLy50ZXN0KHVzZXJBZ2VudCk7XG5cdG1hYyA9IHVzZXJBZ2VudC5pbmRleE9mKCdNYWMnKSAhPSAtMTtcblx0aURldmljZSA9IC8oaVBhZHxpUGhvbmUpLy50ZXN0KHVzZXJBZ2VudCk7XG5cdGZpbGVBcGkgPSBcIkZvcm1EYXRhXCIgaW4gd2luZG93ICYmIFwiRmlsZVJlYWRlclwiIGluIHdpbmRvdyAmJiBcIlVSTFwiIGluIHdpbmRvdyAmJiAhIVVSTC5jcmVhdGVPYmplY3RVUkw7XG5cdHBob25lID0gbWF0Y2hNZWRpYVF1ZXJ5KFwib25seSBzY3JlZW4gYW5kIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweClcIikgJiYgKGFuZHJvaWQgfHwgaURldmljZSk7XG5cdHRhYmxldCA9IG1hdGNoTWVkaWFRdWVyeShcIm9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA4MDBweClcIikgJiYgKGFuZHJvaWQgfHwgaURldmljZSk7XG5cdHdpbmRvd3NQaG9uZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgIT0gLTE7XG5cblx0aWYgKGllMTIpIHtcblx0XHR3ZWJraXQgPSBmYWxzZTtcblx0fVxuXG5cdC8vIElzIGEgaVBhZC9pUGhvbmUgYW5kIG5vdCBvbiBpT1M1IHNuaWZmIHRoZSBXZWJLaXQgdmVyc2lvbiBzaW5jZSBvbGRlciBpT1MgV2ViS2l0IHZlcnNpb25zXG5cdC8vIHNheXMgaXQgaGFzIGNvbnRlbnRFZGl0YWJsZSBzdXBwb3J0IGJ1dCB0aGVyZSBpcyBubyB2aXNpYmxlIGNhcmV0LlxuXHR2YXIgY29udGVudEVkaXRhYmxlID0gIWlEZXZpY2UgfHwgZmlsZUFwaSB8fCB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCopLylbMV0gPj0gNTM0O1xuXG5cdHJldHVybiB7XG5cdFx0LyoqXG5cdFx0ICogQ29uc3RhbnQgdGhhdCBpcyB0cnVlIGlmIHRoZSBicm93c2VyIGlzIE9wZXJhLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IG9wZXJhXG5cdFx0ICogQHR5cGUgQm9vbGVhblxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9wZXJhOiBvcGVyYSxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnN0YW50IHRoYXQgaXMgdHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBXZWJLaXQgKFNhZmFyaS9DaHJvbWUpLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IHdlYktpdFxuXHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHR3ZWJraXQ6IHdlYmtpdCxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnN0YW50IHRoYXQgaXMgbW9yZSB0aGFuIHplcm8gaWYgdGhlIGJyb3dzZXIgaXMgSUUuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgaWVcblx0XHQgKiBAdHlwZSBCb29sZWFuXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0aWU6IGllLFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RhbnQgdGhhdCBpcyB0cnVlIGlmIHRoZSBicm93c2VyIGlzIEdlY2tvLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IGdlY2tvXG5cdFx0ICogQHR5cGUgQm9vbGVhblxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGdlY2tvOiBnZWNrbyxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnN0YW50IHRoYXQgaXMgdHJ1ZSBpZiB0aGUgb3MgaXMgTWFjIE9TLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IG1hY1xuXHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRtYWM6IG1hYyxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnN0YW50IHRoYXQgaXMgdHJ1ZSBpZiB0aGUgb3MgaXMgaU9TLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IGlPU1xuXHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRpT1M6IGlEZXZpY2UsXG5cblx0XHQvKipcblx0XHQgKiBDb25zdGFudCB0aGF0IGlzIHRydWUgaWYgdGhlIG9zIGlzIGFuZHJvaWQuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgYW5kcm9pZFxuXHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhbmRyb2lkOiBhbmRyb2lkLFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RhbnQgdGhhdCBpcyB0cnVlIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIGVkaXRpbmcuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgY29udGVudEVkaXRhYmxlXG5cdFx0ICogQHR5cGUgQm9vbGVhblxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGNvbnRlbnRFZGl0YWJsZTogY29udGVudEVkaXRhYmxlLFxuXG5cdFx0LyoqXG5cdFx0ICogVHJhbnNwYXJlbnQgaW1hZ2UgZGF0YSB1cmwuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgdHJhbnNwYXJlbnRTcmNcblx0XHQgKiBAdHlwZSBCb29sZWFuXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0dHJhbnNwYXJlbnRTcmM6IFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3XCIsXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIGJyb3dzZXIgY2FuIG9yIGNhbid0IHBsYWNlIHRoZSBjYXJldCBhZnRlciBhIGlubGluZSBibG9jayBsaWtlIGFuIGltYWdlLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IG5vQ2FyZXRBZnRlclxuXHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRjYXJldEFmdGVyOiBpZSAhPSA4LFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RhbnQgdGhhdCBpcyB0cnVlIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIG5hdGl2ZSBET00gUmFuZ2VzLiBJRSA5Ky5cblx0XHQgKlxuXHRcdCAqIEBwcm9wZXJ0eSByYW5nZVxuXHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHQgKi9cblx0XHRyYW5nZTogd2luZG93LmdldFNlbGVjdGlvbiAmJiBcIlJhbmdlXCIgaW4gd2luZG93LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgSUUgZG9jdW1lbnQgbW9kZSBmb3Igbm9uIElFIGJyb3dzZXJzIHRoaXMgd2lsbCBmYWtlIElFIDEwLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IGRvY3VtZW50TW9kZVxuXHRcdCAqIEB0eXBlIE51bWJlclxuXHRcdCAqL1xuXHRcdGRvY3VtZW50TW9kZTogaWUgJiYgIWllMTIgPyAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IDcpIDogMTAsXG5cblx0XHQvKipcblx0XHQgKiBDb25zdGFudCB0aGF0IGlzIHRydWUgaWYgdGhlIGJyb3dzZXIgaGFzIGEgbW9kZXJuIGZpbGUgYXBpLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IGZpbGVBcGlcblx0XHQgKiBAdHlwZSBCb29sZWFuXG5cdFx0ICovXG5cdFx0ZmlsZUFwaTogZmlsZUFwaSxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnN0YW50IHRoYXQgaXMgdHJ1ZSBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBjb250ZW50RWRpdGFibGU9ZmFsc2UgcmVnaW9ucy5cblx0XHQgKlxuXHRcdCAqIEBwcm9wZXJ0eSBjZUZhbHNlXG5cdFx0ICogQHR5cGUgQm9vbGVhblxuXHRcdCAqL1xuXHRcdGNlRmFsc2U6IChpZSA9PT0gZmFsc2UgfHwgaWUgPiA4KSxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnN0YW50IGlmIENTUCBtb2RlIGlzIHBvc3NpYmxlIG9yIG5vdC4gTWVhbmluZyB3ZSBjYW4ndCB1c2Ugc2NyaXB0IHVybHMgZm9yIHRoZSBpZnJhbWUuXG5cdFx0ICovXG5cdFx0Y2FuSGF2ZUNTUDogKGllID09PSBmYWxzZSB8fCBpZSA+IDExKSxcblxuXHRcdGRlc2t0b3A6ICFwaG9uZSAmJiAhdGFibGV0LFxuXHRcdHdpbmRvd3NQaG9uZTogd2luZG93c1Bob25lXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2RvbS9FdmVudFV0aWxzLmpzXG5cbi8qKlxuICogRXZlbnRVdGlscy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKmpzaGludCBsb29wZnVuYzp0cnVlKi9cbi8qZXNsaW50IG5vLWxvb3AtZnVuYzowICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyB3cmFwcyB0aGUgYnJvd3NlcnMgbmF0aXZlIGV2ZW50IGxvZ2ljIHdpdGggbW9yZSBjb252ZW5pZW50IG1ldGhvZHMuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuZG9tLkV2ZW50VXRpbHNcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kb20vRXZlbnRVdGlsc1wiLCBbXG5cdFwidGlueW1jZS91dGlsL0RlbGF5XCIsXG5cdFwidGlueW1jZS9FbnZcIlxuXSwgZnVuY3Rpb24oRGVsYXksIEVudikge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgZXZlbnRFeHBhbmRvUHJlZml4ID0gXCJtY2UtZGF0YS1cIjtcblx0dmFyIG1vdXNlRXZlbnRSZSA9IC9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLztcblx0dmFyIGRlcHJlY2F0ZWQgPSB7XG5cdFx0a2V5TG9jYXRpb246IDEsIGxheWVyWDogMSwgbGF5ZXJZOiAxLCByZXR1cm5WYWx1ZTogMSxcblx0XHR3ZWJraXRNb3ZlbWVudFg6IDEsIHdlYmtpdE1vdmVtZW50WTogMSwga2V5SWRlbnRpZmllcjogMVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBCaW5kcyBhIG5hdGl2ZSBldmVudCB0byBhIGNhbGxiYWNrIG9uIHRoZSBzcGVpZmllZCB0YXJnZXQuXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGRFdmVudCh0YXJnZXQsIG5hbWUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG5cdFx0aWYgKHRhcmdldC5hZGRFdmVudExpc3RlbmVyKSB7XG5cdFx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBjYWxsYmFjaywgY2FwdHVyZSB8fCBmYWxzZSk7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXQuYXR0YWNoRXZlbnQpIHtcblx0XHRcdHRhcmdldC5hdHRhY2hFdmVudCgnb24nICsgbmFtZSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVbmJpbmRzIGEgbmF0aXZlIGV2ZW50IGNhbGxiYWNrIG9uIHRoZSBzcGVjaWZpZWQgdGFyZ2V0LlxuXHQgKi9cblx0ZnVuY3Rpb24gcmVtb3ZlRXZlbnQodGFyZ2V0LCBuYW1lLCBjYWxsYmFjaywgY2FwdHVyZSkge1xuXHRcdGlmICh0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuXHRcdFx0dGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgY2FsbGJhY2ssIGNhcHR1cmUgfHwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0LmRldGFjaEV2ZW50KSB7XG5cdFx0XHR0YXJnZXQuZGV0YWNoRXZlbnQoJ29uJyArIG5hbWUsIGNhbGxiYWNrKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZXZlbnQgdGFyZ2V0IGJhc2VkIG9uIHNoYWRvdyBkb20gcHJvcGVydGllcyBsaWtlIHBhdGggYW5kIGRlZXBQYXRoLlxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0VGFyZ2V0RnJvbVNoYWRvd0RvbShldmVudCwgZGVmYXVsdFRhcmdldCkge1xuXHRcdHZhciBwYXRoLCB0YXJnZXQgPSBkZWZhdWx0VGFyZ2V0O1xuXG5cdFx0Ly8gV2hlbiB0YXJnZXQgZWxlbWVudCBpcyBpbnNpZGUgU2hhZG93IERPTSB3ZSBuZWVkIHRvIHRha2UgZmlyc3QgZWxlbWVudCBmcm9tIHBhdGhcblx0XHQvLyBvdGhlcndpc2Ugd2UnbGwgZ2V0IFNoYWRvdyBSb290IHBhcmVudCwgbm90IGFjdHVhbCB0YXJnZXQgZWxlbWVudFxuXG5cdFx0Ly8gTm9ybWFsaXplIHRhcmdldCBmb3IgV2ViQ29tcG9uZW50cyB2MCBpbXBsZW1lbnRhdGlvbiAoaW4gQ2hyb21lKVxuXHRcdHBhdGggPSBldmVudC5wYXRoO1xuXHRcdGlmIChwYXRoICYmIHBhdGgubGVuZ3RoID4gMCkge1xuXHRcdFx0dGFyZ2V0ID0gcGF0aFswXTtcblx0XHR9XG5cblx0XHQvLyBOb3JtYWxpemUgdGFyZ2V0IGZvciBXZWJDb21wb25lbnRzIHYxIGltcGxlbWVudGF0aW9uIChzdGFuZGFyZClcblx0XHRpZiAoZXZlbnQuZGVlcFBhdGgpIHtcblx0XHRcdHBhdGggPSBldmVudC5kZWVwUGF0aCgpO1xuXHRcdFx0aWYgKHBhdGggJiYgcGF0aC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRhcmdldCA9IHBhdGhbMF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBOb3JtYWxpemVzIGEgbmF0aXZlIGV2ZW50IG9iamVjdCBvciBqdXN0IGFkZHMgdGhlIGV2ZW50IHNwZWNpZmljIG1ldGhvZHMgb24gYSBjdXN0b20gZXZlbnQuXG5cdCAqL1xuXHRmdW5jdGlvbiBmaXgob3JpZ2luYWxFdmVudCwgZGF0YSkge1xuXHRcdHZhciBuYW1lLCBldmVudCA9IGRhdGEgfHwge30sIHVuZGVmO1xuXG5cdFx0Ly8gRHVtbXkgZnVuY3Rpb24gdGhhdCBnZXRzIHJlcGxhY2VkIG9uIHRoZSBkZWxlZ2F0aW9uIHN0YXRlIGZ1bmN0aW9uc1xuXHRcdGZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIER1bW15IGZ1bmN0aW9uIHRoYXQgZ2V0cyByZXBsYWNlZCBvbiB0aGUgZGVsZWdhdGlvbiBzdGF0ZSBmdW5jdGlvbnNcblx0XHRmdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdGZvciAobmFtZSBpbiBvcmlnaW5hbEV2ZW50KSB7XG5cdFx0XHQvLyBsYXllclgvbGF5ZXJZIGlzIGRlcHJlY2F0ZWQgaW4gQ2hyb21lIGFuZCBwcm9kdWNlcyBhIHdhcm5pbmdcblx0XHRcdGlmICghZGVwcmVjYXRlZFtuYW1lXSkge1xuXHRcdFx0XHRldmVudFtuYW1lXSA9IG9yaWdpbmFsRXZlbnRbbmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTm9ybWFsaXplIHRhcmdldCBJRSB1c2VzIHNyY0VsZW1lbnRcblx0XHRpZiAoIWV2ZW50LnRhcmdldCkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudCB8fCBkb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBFeHBlcmltZW50YWwgc2hhZG93IGRvbSBzdXBwb3J0XG5cdFx0aWYgKEVudi5leHBlcmltZW50YWxTaGFkb3dEb20pIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGdldFRhcmdldEZyb21TaGFkb3dEb20ob3JpZ2luYWxFdmVudCwgZXZlbnQudGFyZ2V0KTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlXG5cdFx0aWYgKG9yaWdpbmFsRXZlbnQgJiYgbW91c2VFdmVudFJlLnRlc3Qob3JpZ2luYWxFdmVudC50eXBlKSAmJiBvcmlnaW5hbEV2ZW50LnBhZ2VYID09PSB1bmRlZiAmJiBvcmlnaW5hbEV2ZW50LmNsaWVudFggIT09IHVuZGVmKSB7XG5cdFx0XHR2YXIgZXZlbnREb2MgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcblx0XHRcdHZhciBkb2MgPSBldmVudERvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR2YXIgYm9keSA9IGV2ZW50RG9jLmJvZHk7XG5cblx0XHRcdGV2ZW50LnBhZ2VYID0gb3JpZ2luYWxFdmVudC5jbGllbnRYICsgKGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwKSAtXG5cdFx0XHRcdChkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCk7XG5cblx0XHRcdGV2ZW50LnBhZ2VZID0gb3JpZ2luYWxFdmVudC5jbGllbnRZICsgKGRvYyAmJiBkb2Muc2Nyb2xsVG9wIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgfHwgMCkgLVxuXHRcdFx0XHQoZG9jICYmIGRvYy5jbGllbnRUb3AgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCB8fCAwKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgcHJldmVudERlZmF1bHQgbWV0aG9kXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRcdC8vIEV4ZWN1dGUgcHJldmVudERlZmF1bHQgb24gdGhlIG9yaWdpbmFsIGV2ZW50IG9iamVjdFxuXHRcdFx0aWYgKG9yaWdpbmFsRXZlbnQpIHtcblx0XHRcdFx0aWYgKG9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQpIHtcblx0XHRcdFx0XHRvcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOyAvLyBJRVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIEFkZCBzdG9wUHJvcGFnYXRpb25cblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHtcblx0XHRcdGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBzdG9wUHJvcGFnYXRpb24gb24gdGhlIG9yaWdpbmFsIGV2ZW50IG9iamVjdFxuXHRcdFx0aWYgKG9yaWdpbmFsRXZlbnQpIHtcblx0XHRcdFx0aWYgKG9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG5cdFx0XHRcdFx0b3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvcmlnaW5hbEV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7IC8vIElFXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gQWRkIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvblxuXHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0ZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fTtcblxuXHRcdC8vIEFkZCBldmVudCBkZWxlZ2F0aW9uIHN0YXRlc1xuXHRcdGlmICghZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKSB7XG5cdFx0XHRldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5GYWxzZTtcblx0XHRcdGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuRmFsc2U7XG5cdFx0XHRldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVybkZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBtaXNzaW5nIG1ldGFLZXkgZm9yIElFIDhcblx0XHRpZiAodHlwZW9mIGV2ZW50Lm1ldGFLZXkgPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGV2ZW50Lm1ldGFLZXkgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQmluZCBhIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgYWNyb3NzIGJyb3dzZXJzIGFuZCBleGVjdXRlcyB0aGUgY2FsbGJhY2sgb25jZSB0aGUgcGFnZSBET00gaXMgaW5pdGlhbGl6ZWQuXG5cdCAqIEl0IHdpbGwgYWxzbyBzZXQvY2hlY2sgdGhlIGRvbUxvYWRlZCBzdGF0ZSBvZiB0aGUgZXZlbnRfdXRpbHMgaW5zdGFuY2Ugc28gcmVhZHkgaXNuJ3QgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmluZE9uUmVhZHkod2luLCBjYWxsYmFjaywgZXZlbnRVdGlscykge1xuXHRcdHZhciBkb2MgPSB3aW4uZG9jdW1lbnQsIGV2ZW50ID0ge3R5cGU6ICdyZWFkeSd9O1xuXG5cdFx0aWYgKGV2ZW50VXRpbHMuZG9tTG9hZGVkKSB7XG5cdFx0XHRjYWxsYmFjayhldmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBjYWxsZWQgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0ZnVuY3Rpb24gcmVhZHlIYW5kbGVyKCkge1xuXHRcdFx0aWYgKCFldmVudFV0aWxzLmRvbUxvYWRlZCkge1xuXHRcdFx0XHRldmVudFV0aWxzLmRvbUxvYWRlZCA9IHRydWU7XG5cdFx0XHRcdGNhbGxiYWNrKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiB3YWl0Rm9yRG9tTG9hZGVkKCkge1xuXHRcdFx0Ly8gQ2hlY2sgY29tcGxldGUgb3IgaW50ZXJhY3RpdmUgc3RhdGUgaWYgdGhlcmUgaXMgYSBib2R5XG5cdFx0XHQvLyBlbGVtZW50IG9uIHNvbWUgaWZyYW1lcyBJRSA4IHdpbGwgcHJvZHVjZSBhIG51bGwgYm9keVxuXHRcdFx0aWYgKGRvYy5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHwgKGRvYy5yZWFkeVN0YXRlID09PSBcImludGVyYWN0aXZlXCIgJiYgZG9jLmJvZHkpKSB7XG5cdFx0XHRcdHJlbW92ZUV2ZW50KGRvYywgXCJyZWFkeXN0YXRlY2hhbmdlXCIsIHdhaXRGb3JEb21Mb2FkZWQpO1xuXHRcdFx0XHRyZWFkeUhhbmRsZXIoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiB0cnlTY3JvbGwoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJZiBJRSBpcyB1c2VkLCB1c2UgdGhlIHRyaWNrIGJ5IERpZWdvIFBlcmluaSBsaWNlbnNlZCB1bmRlciBNSVQgYnkgcmVxdWVzdCB0byB0aGUgYXV0aG9yLlxuXHRcdFx0XHQvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkL1xuXHRcdFx0XHRkb2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKFwibGVmdFwiKTtcblx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdERlbGF5LnNldFRpbWVvdXQodHJ5U2Nyb2xsKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWFkeUhhbmRsZXIoKTtcblx0XHR9XG5cblx0XHQvLyBVc2UgVzNDIG1ldGhvZFxuXHRcdGlmIChkb2MuYWRkRXZlbnRMaXN0ZW5lcikge1xuXHRcdFx0aWYgKGRvYy5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcblx0XHRcdFx0cmVhZHlIYW5kbGVyKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRFdmVudCh3aW4sICdET01Db250ZW50TG9hZGVkJywgcmVhZHlIYW5kbGVyKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVXNlIElFIG1ldGhvZFxuXHRcdFx0YWRkRXZlbnQoZG9jLCBcInJlYWR5c3RhdGVjaGFuZ2VcIiwgd2FpdEZvckRvbUxvYWRlZCk7XG5cblx0XHRcdC8vIFdhaXQgdW50aWwgd2UgY2FuIHNjcm9sbCwgd2hlbiB3ZSBjYW4gdGhlIERPTSBpcyBpbml0aWFsaXplZFxuXHRcdFx0aWYgKGRvYy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgJiYgd2luLnNlbGYgPT09IHdpbi50b3ApIHtcblx0XHRcdFx0dHJ5U2Nyb2xsKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgaWYgYW55IG9mIHRoZSBhYm92ZSBtZXRob2RzIHNob3VsZCBmYWlsIGZvciBzb21lIG9kZCByZWFzb25cblx0XHRhZGRFdmVudCh3aW4sICdsb2FkJywgcmVhZHlIYW5kbGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGNsYXNzIGVuYWJsZXMgeW91IHRvIGJpbmQvdW5iaW5kIG5hdGl2ZSBldmVudHMgdG8gZWxlbWVudHMgYW5kIG5vcm1hbGl6ZSBpdCdzIGJlaGF2aW9yIGFjcm9zcyBicm93c2Vycy5cblx0ICovXG5cdGZ1bmN0aW9uIEV2ZW50VXRpbHMoKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCBldmVudHMgPSB7fSwgY291bnQsIGV4cGFuZG8sIGhhc0ZvY3VzSW4sIGhhc01vdXNlRW50ZXJMZWF2ZSwgbW91c2VFbnRlckxlYXZlO1xuXG5cdFx0ZXhwYW5kbyA9IGV2ZW50RXhwYW5kb1ByZWZpeCArICgrbmV3IERhdGUoKSkudG9TdHJpbmcoMzIpO1xuXHRcdGhhc01vdXNlRW50ZXJMZWF2ZSA9IFwib25tb3VzZWVudGVyXCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRcdGhhc0ZvY3VzSW4gPSBcIm9uZm9jdXNpblwiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0XHRtb3VzZUVudGVyTGVhdmUgPSB7bW91c2VlbnRlcjogJ21vdXNlb3ZlcicsIG1vdXNlbGVhdmU6ICdtb3VzZW91dCd9O1xuXHRcdGNvdW50ID0gMTtcblxuXHRcdC8vIFN0YXRlIGlmIHRoZSBET01Db250ZW50TG9hZGVkIHdhcyBleGVjdXRlZCBvciBub3Rcblx0XHRzZWxmLmRvbUxvYWRlZCA9IGZhbHNlO1xuXHRcdHNlbGYuZXZlbnRzID0gZXZlbnRzO1xuXG5cdFx0LyoqXG5cdFx0ICogRXhlY3V0ZXMgYWxsIGV2ZW50IGhhbmRsZXIgY2FsbGJhY2tzIGZvciBhIHNwZWNpZmljIGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBldnQgRXZlbnQgb2JqZWN0LlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBpZCBFeHBhbmRvIGlkIHZhbHVlIHRvIGxvb2sgZm9yLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVIYW5kbGVycyhldnQsIGlkKSB7XG5cdFx0XHR2YXIgY2FsbGJhY2tMaXN0LCBpLCBsLCBjYWxsYmFjaywgY29udGFpbmVyID0gZXZlbnRzW2lkXTtcblxuXHRcdFx0Y2FsbGJhY2tMaXN0ID0gY29udGFpbmVyICYmIGNvbnRhaW5lcltldnQudHlwZV07XG5cdFx0XHRpZiAoY2FsbGJhY2tMaXN0KSB7XG5cdFx0XHRcdGZvciAoaSA9IDAsIGwgPSBjYWxsYmFja0xpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFja0xpc3RbaV07XG5cblx0XHRcdFx0XHQvLyBDaGVjayBpZiBjYWxsYmFjayBleGlzdHMgbWlnaHQgYmUgcmVtb3ZlZCBpZiBhIHVuYmluZCBpcyBjYWxsZWQgaW5zaWRlIHRoZSBjYWxsYmFja1xuXHRcdFx0XHRcdGlmIChjYWxsYmFjayAmJiBjYWxsYmFjay5mdW5jLmNhbGwoY2FsbGJhY2suc2NvcGUsIGV2dCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTaG91bGQgd2Ugc3RvcCBwcm9wYWdhdGlvbiB0byBpbW1lZGlhdGUgbGlzdGVuZXJzXG5cdFx0XHRcdFx0aWYgKGV2dC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQmluZHMgYSBjYWxsYmFjayB0byBhbiBldmVudCBvbiB0aGUgc3BlY2lmaWVkIHRhcmdldC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYmluZFxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGFyZ2V0IG5vZGUvd2luZG93IG9yIGN1c3RvbSBvYmplY3QuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGJpbmQuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBvY2N1cnMuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIFNjb3BlIHRvIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uLCBkZWZhdWx0cyB0byB0YXJnZXQuXG5cdFx0ICogQHJldHVybiB7ZnVuY3Rpb259IENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZ290IGJvdW5kLlxuXHRcdCAqL1xuXHRcdHNlbGYuYmluZCA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZXMsIGNhbGxiYWNrLCBzY29wZSkge1xuXHRcdFx0dmFyIGlkLCBjYWxsYmFja0xpc3QsIGksIG5hbWUsIGZha2VOYW1lLCBuYXRpdmVIYW5kbGVyLCBjYXB0dXJlLCB3aW4gPSB3aW5kb3c7XG5cblx0XHRcdC8vIE5hdGl2ZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHBhdGNoZXMgdGhlIGV2ZW50IGFuZCBleGVjdXRlcyB0aGUgY2FsbGJhY2tzIGZvciB0aGUgZXhwYW5kb1xuXHRcdFx0ZnVuY3Rpb24gZGVmYXVsdE5hdGl2ZUhhbmRsZXIoZXZ0KSB7XG5cdFx0XHRcdGV4ZWN1dGVIYW5kbGVycyhmaXgoZXZ0IHx8IHdpbi5ldmVudCksIGlkKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRG9uJ3QgYmluZCB0byB0ZXh0IG5vZGVzIG9yIGNvbW1lbnRzXG5cdFx0XHRpZiAoIXRhcmdldCB8fCB0YXJnZXQubm9kZVR5cGUgPT09IDMgfHwgdGFyZ2V0Lm5vZGVUeXBlID09PSA4KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlIG9yIGdldCBldmVudHMgaWQgZm9yIHRoZSB0YXJnZXRcblx0XHRcdGlmICghdGFyZ2V0W2V4cGFuZG9dKSB7XG5cdFx0XHRcdGlkID0gY291bnQrKztcblx0XHRcdFx0dGFyZ2V0W2V4cGFuZG9dID0gaWQ7XG5cdFx0XHRcdGV2ZW50c1tpZF0gPSB7fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlkID0gdGFyZ2V0W2V4cGFuZG9dO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXR1cCB0aGUgc3BlY2lmaWVkIHNjb3BlIG9yIHVzZSB0aGUgdGFyZ2V0IGFzIGEgZGVmYXVsdFxuXHRcdFx0c2NvcGUgPSBzY29wZSB8fCB0YXJnZXQ7XG5cblx0XHRcdC8vIFNwbGl0IG5hbWVzIGFuZCBiaW5kIGVhY2ggZXZlbnQsIGVuYWJsZXMgeW91IHRvIGJpbmQgbXVsdGlwbGUgZXZlbnRzIHdpdGggb25lIGNhbGxcblx0XHRcdG5hbWVzID0gbmFtZXMuc3BsaXQoJyAnKTtcblx0XHRcdGkgPSBuYW1lcy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdG5hbWUgPSBuYW1lc1tpXTtcblx0XHRcdFx0bmF0aXZlSGFuZGxlciA9IGRlZmF1bHROYXRpdmVIYW5kbGVyO1xuXHRcdFx0XHRmYWtlTmFtZSA9IGNhcHR1cmUgPSBmYWxzZTtcblxuXHRcdFx0XHQvLyBVc2UgcmVhZHkgaW5zdGVhZCBvZiBET01Db250ZW50TG9hZGVkXG5cdFx0XHRcdGlmIChuYW1lID09PSBcIkRPTUNvbnRlbnRMb2FkZWRcIikge1xuXHRcdFx0XHRcdG5hbWUgPSBcInJlYWR5XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBET00gaXMgYWxyZWFkeSByZWFkeVxuXHRcdFx0XHRpZiAoc2VsZi5kb21Mb2FkZWQgJiYgbmFtZSA9PT0gXCJyZWFkeVwiICYmIHRhcmdldC5yZWFkeVN0YXRlID09ICdjb21wbGV0ZScpIHtcblx0XHRcdFx0XHRjYWxsYmFjay5jYWxsKHNjb3BlLCBmaXgoe3R5cGU6IG5hbWV9KSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgbW91c2VlbnRlci9tb3VzZWxlYXZlclxuXHRcdFx0XHRpZiAoIWhhc01vdXNlRW50ZXJMZWF2ZSkge1xuXHRcdFx0XHRcdGZha2VOYW1lID0gbW91c2VFbnRlckxlYXZlW25hbWVdO1xuXG5cdFx0XHRcdFx0aWYgKGZha2VOYW1lKSB7XG5cdFx0XHRcdFx0XHRuYXRpdmVIYW5kbGVyID0gZnVuY3Rpb24oZXZ0KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjdXJyZW50LCByZWxhdGVkO1xuXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSBldnQuY3VycmVudFRhcmdldDtcblx0XHRcdFx0XHRcdFx0cmVsYXRlZCA9IGV2dC5yZWxhdGVkVGFyZ2V0O1xuXG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIHJlbGF0ZWQgaXMgaW5zaWRlIHRoZSBjdXJyZW50IHRhcmdldCBpZiBpdCdzIG5vdCB0aGVuIHRoZSBldmVudCBzaG91bGRcblx0XHRcdFx0XHRcdFx0Ly8gYmUgaWdub3JlZCBzaW5jZSBpdCdzIGEgbW91c2VvdmVyL21vdXNlb3V0IGluc2lkZSB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRpZiAocmVsYXRlZCAmJiBjdXJyZW50LmNvbnRhaW5zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIGNvbnRhaW5zIGZvciBwZXJmb3JtYW5jZVxuXHRcdFx0XHRcdFx0XHRcdHJlbGF0ZWQgPSBjdXJyZW50LmNvbnRhaW5zKHJlbGF0ZWQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlIChyZWxhdGVkICYmIHJlbGF0ZWQgIT09IGN1cnJlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gRmlyZSBmYWtlIGV2ZW50XG5cdFx0XHRcdFx0XHRcdGlmICghcmVsYXRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdGV2dCA9IGZpeChldnQgfHwgd2luLmV2ZW50KTtcblx0XHRcdFx0XHRcdFx0XHRldnQudHlwZSA9IGV2dC50eXBlID09PSAnbW91c2VvdXQnID8gJ21vdXNlbGVhdmUnIDogJ21vdXNlZW50ZXInO1xuXHRcdFx0XHRcdFx0XHRcdGV2dC50YXJnZXQgPSBjdXJyZW50O1xuXHRcdFx0XHRcdFx0XHRcdGV4ZWN1dGVIYW5kbGVycyhldnQsIGlkKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGYWtlIGJ1YmJsaW5nIG9mIGZvY3VzaW4vZm9jdXNvdXRcblx0XHRcdFx0aWYgKCFoYXNGb2N1c0luICYmIChuYW1lID09PSBcImZvY3VzaW5cIiB8fCBuYW1lID09PSBcImZvY3Vzb3V0XCIpKSB7XG5cdFx0XHRcdFx0Y2FwdHVyZSA9IHRydWU7XG5cdFx0XHRcdFx0ZmFrZU5hbWUgPSBuYW1lID09PSBcImZvY3VzaW5cIiA/IFwiZm9jdXNcIiA6IFwiYmx1clwiO1xuXHRcdFx0XHRcdG5hdGl2ZUhhbmRsZXIgPSBmdW5jdGlvbihldnQpIHtcblx0XHRcdFx0XHRcdGV2dCA9IGZpeChldnQgfHwgd2luLmV2ZW50KTtcblx0XHRcdFx0XHRcdGV2dC50eXBlID0gZXZ0LnR5cGUgPT09ICdmb2N1cycgPyAnZm9jdXNpbicgOiAnZm9jdXNvdXQnO1xuXHRcdFx0XHRcdFx0ZXhlY3V0ZUhhbmRsZXJzKGV2dCwgaWQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXR1cCBjYWxsYmFjayBsaXN0IGFuZCBiaW5kIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRjYWxsYmFja0xpc3QgPSBldmVudHNbaWRdW25hbWVdO1xuXHRcdFx0XHRpZiAoIWNhbGxiYWNrTGlzdCkge1xuXHRcdFx0XHRcdGV2ZW50c1tpZF1bbmFtZV0gPSBjYWxsYmFja0xpc3QgPSBbe2Z1bmM6IGNhbGxiYWNrLCBzY29wZTogc2NvcGV9XTtcblx0XHRcdFx0XHRjYWxsYmFja0xpc3QuZmFrZU5hbWUgPSBmYWtlTmFtZTtcblx0XHRcdFx0XHRjYWxsYmFja0xpc3QuY2FwdHVyZSA9IGNhcHR1cmU7XG5cdFx0XHRcdFx0Ly9jYWxsYmFja0xpc3QuY2FsbGJhY2sgPSBjYWxsYmFjaztcblxuXHRcdFx0XHRcdC8vIEFkZCB0aGUgbmF0aXZlSGFuZGxlciB0byB0aGUgY2FsbGJhY2sgbGlzdCBzbyB0aGF0IHdlIGNhbiBsYXRlciB1bmJpbmQgaXRcblx0XHRcdFx0XHRjYWxsYmFja0xpc3QubmF0aXZlSGFuZGxlciA9IG5hdGl2ZUhhbmRsZXI7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGhhcyBuYXRpdmUgZXZlbnRzIHN1cHBvcnRcblxuXHRcdFx0XHRcdGlmIChuYW1lID09PSBcInJlYWR5XCIpIHtcblx0XHRcdFx0XHRcdGJpbmRPblJlYWR5KHRhcmdldCwgbmF0aXZlSGFuZGxlciwgc2VsZik7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFkZEV2ZW50KHRhcmdldCwgZmFrZU5hbWUgfHwgbmFtZSwgbmF0aXZlSGFuZGxlciwgY2FwdHVyZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChuYW1lID09PSBcInJlYWR5XCIgJiYgc2VsZi5kb21Mb2FkZWQpIHtcblx0XHRcdFx0XHRcdGNhbGxiYWNrKHt0eXBlOiBuYW1lfSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIElmIGl0IGFscmVhZHkgaGFzIGFuIG5hdGl2ZSBoYW5kbGVyIHRoZW4ganVzdCBwdXNoIHRoZSBjYWxsYmFja1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2tMaXN0LnB1c2goe2Z1bmM6IGNhbGxiYWNrLCBzY29wZTogc2NvcGV9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGFyZ2V0ID0gY2FsbGJhY2tMaXN0ID0gMDsgLy8gQ2xlYW4gbWVtb3J5IGZvciBJRVxuXG5cdFx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFVuYmluZHMgdGhlIHNwZWNpZmllZCBldmVudCBieSBuYW1lLCBuYW1lIGFuZCBjYWxsYmFjayBvciBhbGwgZXZlbnRzIG9uIHRoZSB0YXJnZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHVuYmluZFxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGFyZ2V0IG5vZGUvd2luZG93IG9yIGN1c3RvbSBvYmplY3QuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzIE9wdGlvbmFsIGV2ZW50IG5hbWUgdG8gdW5iaW5kLlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIE9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHVuYmluZC5cblx0XHQgKiBAcmV0dXJuIHtFdmVudFV0aWxzfSBFdmVudCB1dGlscyBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRzZWxmLnVuYmluZCA9IGZ1bmN0aW9uKHRhcmdldCwgbmFtZXMsIGNhbGxiYWNrKSB7XG5cdFx0XHR2YXIgaWQsIGNhbGxiYWNrTGlzdCwgaSwgY2ksIG5hbWUsIGV2ZW50TWFwO1xuXG5cdFx0XHQvLyBEb24ndCBiaW5kIHRvIHRleHQgbm9kZXMgb3IgY29tbWVudHNcblx0XHRcdGlmICghdGFyZ2V0IHx8IHRhcmdldC5ub2RlVHlwZSA9PT0gMyB8fCB0YXJnZXQubm9kZVR5cGUgPT09IDgpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVuYmluZCBldmVudCBvciBldmVudHMgaWYgdGhlIHRhcmdldCBoYXMgdGhlIGV4cGFuZG9cblx0XHRcdGlkID0gdGFyZ2V0W2V4cGFuZG9dO1xuXHRcdFx0aWYgKGlkKSB7XG5cdFx0XHRcdGV2ZW50TWFwID0gZXZlbnRzW2lkXTtcblxuXHRcdFx0XHQvLyBTcGVjaWZpYyBjYWxsYmFja1xuXHRcdFx0XHRpZiAobmFtZXMpIHtcblx0XHRcdFx0XHRuYW1lcyA9IG5hbWVzLnNwbGl0KCcgJyk7XG5cdFx0XHRcdFx0aSA9IG5hbWVzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gbmFtZXNbaV07XG5cdFx0XHRcdFx0XHRjYWxsYmFja0xpc3QgPSBldmVudE1hcFtuYW1lXTtcblxuXHRcdFx0XHRcdFx0Ly8gVW5iaW5kIHRoZSBldmVudCBpZiBpdCBleGlzdHMgaW4gdGhlIG1hcFxuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrTGlzdCkge1xuXHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgc3BlY2lmaWVkIGNhbGxiYWNrXG5cdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdGNpID0gY2FsbGJhY2tMaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoY2ktLSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrTGlzdFtjaV0uZnVuYyA9PT0gY2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5hdGl2ZUhhbmRsZXIgPSBjYWxsYmFja0xpc3QubmF0aXZlSGFuZGxlcjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGZha2VOYW1lID0gY2FsbGJhY2tMaXN0LmZha2VOYW1lLCBjYXB0dXJlID0gY2FsbGJhY2tMaXN0LmNhcHR1cmU7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2xvbmUgY2FsbGJhY2tMaXN0IHNpbmNlIHVuYmluZCBpbnNpZGUgYSBjYWxsYmFjayB3b3VsZCBvdGhlcndpc2UgYnJlYWsgdGhlIGhhbmRsZXJzIGxvb3Bcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tMaXN0ID0gY2FsbGJhY2tMaXN0LnNsaWNlKDAsIGNpKS5jb25jYXQoY2FsbGJhY2tMaXN0LnNsaWNlKGNpICsgMSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYWxsYmFja0xpc3QubmF0aXZlSGFuZGxlciA9IG5hdGl2ZUhhbmRsZXI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhbGxiYWNrTGlzdC5mYWtlTmFtZSA9IGZha2VOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYWxsYmFja0xpc3QuY2FwdHVyZSA9IGNhcHR1cmU7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnRNYXBbbmFtZV0gPSBjYWxsYmFja0xpc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgaWYgdGhlcmUgaXNuJ3QgYSBzcGVjaWZpZWQgY2FsbGJhY2sgb3IgdGhlcmUgaXMgbm8gY2FsbGJhY2tzIGxlZnRcblx0XHRcdFx0XHRcdFx0aWYgKCFjYWxsYmFjayB8fCBjYWxsYmFja0xpc3QubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGV2ZW50TWFwW25hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdHJlbW92ZUV2ZW50KHRhcmdldCwgY2FsbGJhY2tMaXN0LmZha2VOYW1lIHx8IG5hbWUsIGNhbGxiYWNrTGlzdC5uYXRpdmVIYW5kbGVyLCBjYWxsYmFja0xpc3QuY2FwdHVyZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gQWxsIGV2ZW50cyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50XG5cdFx0XHRcdFx0Zm9yIChuYW1lIGluIGV2ZW50TWFwKSB7XG5cdFx0XHRcdFx0XHRjYWxsYmFja0xpc3QgPSBldmVudE1hcFtuYW1lXTtcblx0XHRcdFx0XHRcdHJlbW92ZUV2ZW50KHRhcmdldCwgY2FsbGJhY2tMaXN0LmZha2VOYW1lIHx8IG5hbWUsIGNhbGxiYWNrTGlzdC5uYXRpdmVIYW5kbGVyLCBjYWxsYmFja0xpc3QuY2FwdHVyZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXZlbnRNYXAgPSB7fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIG9iamVjdCBpcyBlbXB0eSwgaWYgaXQgaXNuJ3QgdGhlbiB3ZSB3b24ndCByZW1vdmUgdGhlIGV4cGFuZG8gbWFwXG5cdFx0XHRcdGZvciAobmFtZSBpbiBldmVudE1hcCkge1xuXHRcdFx0XHRcdHJldHVybiBzZWxmO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRGVsZXRlIGV2ZW50IG9iamVjdFxuXHRcdFx0XHRkZWxldGUgZXZlbnRzW2lkXTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgZXhwYW5kbyBmcm9tIHRhcmdldFxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIElFIHdpbGwgZmFpbCBoZXJlIHNpbmNlIGl0IGNhbid0IGRlbGV0ZSBwcm9wZXJ0aWVzIGZyb20gd2luZG93XG5cdFx0XHRcdFx0ZGVsZXRlIHRhcmdldFtleHBhbmRvXTtcblx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0XHQvLyBJRSB3aWxsIHNldCBpdCB0byBudWxsXG5cdFx0XHRcdFx0dGFyZ2V0W2V4cGFuZG9dID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogRmlyZXMgdGhlIHNwZWNpZmllZCBldmVudCBvbiB0aGUgc3BlY2lmaWVkIHRhcmdldC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZmlyZVxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGFyZ2V0IG5vZGUvd2luZG93IG9yIGN1c3RvbSBvYmplY3QuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSB0byBmaXJlLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBzZW5kIHRvIHRoZSBvYnNlcnZlcnMuXG5cdFx0ICogQHJldHVybiB7RXZlbnRVdGlsc30gRXZlbnQgdXRpbHMgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0c2VsZi5maXJlID0gZnVuY3Rpb24odGFyZ2V0LCBuYW1lLCBhcmdzKSB7XG5cdFx0XHR2YXIgaWQ7XG5cblx0XHRcdC8vIERvbid0IGJpbmQgdG8gdGV4dCBub2RlcyBvciBjb21tZW50c1xuXHRcdFx0aWYgKCF0YXJnZXQgfHwgdGFyZ2V0Lm5vZGVUeXBlID09PSAzIHx8IHRhcmdldC5ub2RlVHlwZSA9PT0gOCkge1xuXHRcdFx0XHRyZXR1cm4gc2VsZjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnVpbGQgZXZlbnQgb2JqZWN0IGJ5IHBhdGNoaW5nIHRoZSBhcmdzXG5cdFx0XHRhcmdzID0gZml4KG51bGwsIGFyZ3MpO1xuXHRcdFx0YXJncy50eXBlID0gbmFtZTtcblx0XHRcdGFyZ3MudGFyZ2V0ID0gdGFyZ2V0O1xuXG5cdFx0XHRkbyB7XG5cdFx0XHRcdC8vIEZvdW5kIGFuIGV4cGFuZG8gdGhhdCBtZWFucyB0aGVyZSBpcyBsaXN0ZW5lcnMgdG8gZXhlY3V0ZVxuXHRcdFx0XHRpZCA9IHRhcmdldFtleHBhbmRvXTtcblx0XHRcdFx0aWYgKGlkKSB7XG5cdFx0XHRcdFx0ZXhlY3V0ZUhhbmRsZXJzKGFyZ3MsIGlkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdhbGsgdXAgdGhlIERPTVxuXHRcdFx0XHR0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZSB8fCB0YXJnZXQub3duZXJEb2N1bWVudCB8fCB0YXJnZXQuZGVmYXVsdFZpZXcgfHwgdGFyZ2V0LnBhcmVudFdpbmRvdztcblx0XHRcdH0gd2hpbGUgKHRhcmdldCAmJiAhYXJncy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKTtcblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgYWxsIGJvdW5kIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQuIFRoaXMgd2lsbCBhbHNvIHJlbW92ZSBhbnkgYm91bmRcblx0XHQgKiBsaXN0ZW5lcnMgdG8gY2hpbGQgbm9kZXMgd2l0aGluIHRoYXQgdGFyZ2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjbGVhblxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGFyZ2V0IG5vZGUvd2luZG93IG9iamVjdC5cblx0XHQgKiBAcmV0dXJuIHtFdmVudFV0aWxzfSBFdmVudCB1dGlscyBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRzZWxmLmNsZWFuID0gZnVuY3Rpb24odGFyZ2V0KSB7XG5cdFx0XHR2YXIgaSwgY2hpbGRyZW4sIHVuYmluZCA9IHNlbGYudW5iaW5kO1xuXG5cdFx0XHQvLyBEb24ndCBiaW5kIHRvIHRleHQgbm9kZXMgb3IgY29tbWVudHNcblx0XHRcdGlmICghdGFyZ2V0IHx8IHRhcmdldC5ub2RlVHlwZSA9PT0gMyB8fCB0YXJnZXQubm9kZVR5cGUgPT09IDgpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVuYmluZCBhbnkgZWxlbWVudCBvbiB0aGUgc3BlY2lmaWVkIHRhcmdldFxuXHRcdFx0aWYgKHRhcmdldFtleHBhbmRvXSkge1xuXHRcdFx0XHR1bmJpbmQodGFyZ2V0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFyZ2V0IGRvZXNuJ3QgaGF2ZSBnZXRFbGVtZW50c0J5VGFnTmFtZSBpdCdzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdCB0aGVuIHVzZSBpdCdzIGRvY3VtZW50IHRvIGZpbmQgdGhlIGNoaWxkcmVuXG5cdFx0XHRpZiAoIXRhcmdldC5nZXRFbGVtZW50c0J5VGFnTmFtZSkge1xuXHRcdFx0XHR0YXJnZXQgPSB0YXJnZXQuZG9jdW1lbnQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBldmVudHMgZnJvbSBlYWNoIGNoaWxkIGVsZW1lbnRcblx0XHRcdGlmICh0YXJnZXQgJiYgdGFyZ2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKSB7XG5cdFx0XHRcdHVuYmluZCh0YXJnZXQpO1xuXG5cdFx0XHRcdGNoaWxkcmVuID0gdGFyZ2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG5cdFx0XHRcdGkgPSBjaGlsZHJlbi5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHR0YXJnZXQgPSBjaGlsZHJlbltpXTtcblxuXHRcdFx0XHRcdGlmICh0YXJnZXRbZXhwYW5kb10pIHtcblx0XHRcdFx0XHRcdHVuYmluZCh0YXJnZXQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogRGVzdHJveXMgdGhlIGV2ZW50IG9iamVjdC4gQ2FsbCB0aGlzIG9uIElFIHRvIHJlbW92ZSBtZW1vcnkgbGVha3MuXG5cdFx0ICovXG5cdFx0c2VsZi5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRldmVudHMgPSB7fTtcblx0XHR9O1xuXG5cdFx0Ly8gTGVnYWN5IGZ1bmN0aW9uIGZvciBjYW5jZWxpbmcgZXZlbnRzXG5cdFx0c2VsZi5jYW5jZWwgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRpZiAoZSkge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHR9XG5cblx0RXZlbnRVdGlscy5FdmVudCA9IG5ldyBFdmVudFV0aWxzKCk7XG5cdEV2ZW50VXRpbHMuRXZlbnQuYmluZCh3aW5kb3csICdyZWFkeScsIGZ1bmN0aW9uKCkge30pO1xuXG5cdHJldHVybiBFdmVudFV0aWxzO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9kb20vU2l6emxlLmpzXG5cbi8qKlxuICogU2l6emxlLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICpcbiAqIEBpZ25vcmUtZmlsZVxuICovXG5cbi8qanNoaW50IGJpdHdpc2U6ZmFsc2UsIGV4cHI6dHJ1ZSwgbm9lbXB0eTpmYWxzZSwgc3ViOnRydWUsIGVxbnVsbDp0cnVlLCBsYXRlZGVmOmZhbHNlLCBtYXhsZW46MjU1ICovXG4vKmVzbGludC1kaXNhYmxlICovXG5cbi8qKlxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdkBWRVJTSU9OXG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCAyMDA4LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IEBEQVRFXG4gKi9cbmRlZmluZShcInRpbnltY2UvZG9tL1NpenpsZVwiLCBbXSwgZnVuY3Rpb24oKSB7XG52YXIgaSxcblx0c3VwcG9ydCxcblx0RXhwcixcblx0Z2V0VGV4dCxcblx0aXNYTUwsXG5cdHRva2VuaXplLFxuXHRjb21waWxlLFxuXHRzZWxlY3QsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0c2V0RG9jdW1lbnQsXG5cdGRvY3VtZW50LFxuXHRkb2NFbGVtLFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRyYnVnZ3lNYXRjaGVzLFxuXHRtYXRjaGVzLFxuXHRjb250YWlucyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBcInNpenpsZVwiICsgLShuZXcgRGF0ZSgpKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEdlbmVyYWwtcHVycG9zZSBjb25zdGFudHNcblx0c3RydW5kZWZpbmVkID0gdHlwZW9mIHVuZGVmaW5lZCxcblx0TUFYX05FR0FUSVZFID0gMSA8PCAzMSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgaWYgd2UgY2FuJ3QgdXNlIGEgbmF0aXZlIG9uZVxuXHRpbmRleE9mID0gYXJyLmluZGV4T2YgfHwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIHRoaXNbaV0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcXFx4MDAtXFxcXHhhMF0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cblx0cmF0dHJpYnV0ZVF1b3RlcyA9IG5ldyBSZWdFeHAoIFwiPVwiICsgd2hpdGVzcGFjZSArIFwiKihbXlxcXFxdJ1xcXCJdKj8pXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIiwgXCJnXCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXHRyZXNjYXBlID0gLyd8XFxcXC9nLFxuXG5cdC8vIENTUyBlc2NhcGVzIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98KFwiICsgd2hpdGVzcGFjZSArIFwiKXwuKVwiLCBcImlnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlZCAtIDB4MTAwMDA7XG5cdFx0Ly8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnRcblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PDI0XG5cdFx0Ly8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArXCIweFwiXG5cdFx0cmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgP1xuXHRcdFx0ZXNjYXBlZCA6XG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdC8vIEJNUCBjb2RlcG9pbnRcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRcdC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKVxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hfbmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbWF0Y2gsIGVsZW0sIG0sIG5vZGVUeXBlLFxuXHRcdC8vIFFTQSB2YXJzXG5cdFx0aSwgZ3JvdXBzLCBvbGQsIG5pZCwgbmV3Q29udGV4dCwgbmV3U2VsZWN0b3I7XG5cblx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cblx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdGlmICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdGlmICggKG5vZGVUeXBlID0gY29udGV4dC5ub2RlVHlwZSkgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0aWYgKCBkb2N1bWVudElzSFRNTCAmJiAhc2VlZCApIHtcblxuXHRcdC8vIFNob3J0Y3V0c1xuXHRcdGlmICggKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcblx0XHRcdC8vIFNwZWVkLXVwOiBTaXp6bGUoXCIjSURcIilcblx0XHRcdGlmICggKG0gPSBtYXRjaFsxXSkgKSB7XG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKTtcblx0XHRcdFx0XHQvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJuc1xuXHRcdFx0XHRcdC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgKGpRdWVyeSAjNjk2Mylcblx0XHRcdFx0XHRpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFLCBPcGVyYSwgYW5kIFdlYmtpdCByZXR1cm4gaXRlbXNcblx0XHRcdFx0XHRcdC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBDb250ZXh0IGlzIG5vdCBhIGRvY3VtZW50XG5cdFx0XHRcdFx0aWYgKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgJiYgKGVsZW0gPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiZcblx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYgZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFNwZWVkLXVwOiBTaXp6bGUoXCJUQUdcIilcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzJdICkge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBTcGVlZC11cDogU2l6emxlKFwiLkNMQVNTXCIpXG5cdFx0XHR9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFFTQSBwYXRoXG5cdFx0aWYgKCBzdXBwb3J0LnFzYSAmJiAoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICkge1xuXHRcdFx0bmlkID0gb2xkID0gZXhwYW5kbztcblx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0bmV3U2VsZWN0b3IgPSBub2RlVHlwZSA9PT0gOSAmJiBzZWxlY3RvcjtcblxuXHRcdFx0Ly8gcVNBIHdvcmtzIHN0cmFuZ2VseSBvbiBFbGVtZW50LXJvb3RlZCBxdWVyaWVzXG5cdFx0XHQvLyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290XG5cdFx0XHQvLyBhbmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhlIHRlY2huaXF1ZSlcblx0XHRcdC8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXG5cdFx0XHRcdGlmICggKG9sZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKFwiaWRcIikpICkge1xuXHRcdFx0XHRcdG5pZCA9IG9sZC5yZXBsYWNlKCByZXNjYXBlLCBcIlxcXFwkJlwiICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgbmlkICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bmlkID0gXCJbaWQ9J1wiICsgbmlkICsgXCInXSBcIjtcblxuXHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0Z3JvdXBzW2ldID0gbmlkICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQ7XG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oXCIsXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG5ld1NlbGVjdG9yICkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoKHFzYUVycm9yKSB7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCAhb2xkICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge0Z1bmN0aW9uKHN0cmluZywgT2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuIChjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBkaXYgYW5kIGV4cGVjdHMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBkaXYgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGRpdi5wYXJlbnROb2RlICkge1xuXHRcdFx0ZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGRpdiApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGRpdiA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KFwifFwiKSxcblx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdCggfmIuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICkgLVxuXHRcdFx0KCB+YS5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKTtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLm5leHRTaWJsaW5nKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAobmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IHN0cnVuZGVmaW5lZCAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3Rcblx0Ly8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpXG5cdHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuXHRyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSBcIkhUTUxcIiA6IGZhbHNlO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYyxcblx0XHRwYXJlbnQgPSBkb2MuZGVmYXVsdFZpZXc7XG5cblx0ZnVuY3Rpb24gZ2V0VG9wKHdpbikge1xuXHRcdC8vIEVkZ2UgdGhyb3dzIGEgbG92ZWx5IE9iamVjdCBleHBlY3RlZCBpZiB5b3UgdHJ5IHRvIGdldCB0b3Agb24gYSBkZXRhY2hlZCByZWZlcmVuY2Ugc2VlICMyNjQyXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB3aW4udG9wO1xuXHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHQvLyBJZ25vcmVcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIElmIG5vIGRvY3VtZW50IGFuZCBkb2N1bWVudEVsZW1lbnQgaXMgYXZhaWxhYmxlLCByZXR1cm5cblx0aWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBTZXQgb3VyIGRvY3VtZW50XG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0IHRlc3RzXG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2MgKTtcblxuXHQvLyBTdXBwb3J0OiBJRT44XG5cdC8vIElmIGlmcmFtZSBkb2N1bWVudCBpcyBhc3NpZ25lZCB0byBcImRvY3VtZW50XCIgdmFyaWFibGUgYW5kIGlmIGlmcmFtZSBoYXMgYmVlbiByZWxvYWRlZCxcblx0Ly8gSUUgd2lsbCB0aHJvdyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBhY2Nlc3NpbmcgXCJkb2N1bWVudFwiIHZhcmlhYmxlLCBzZWUgalF1ZXJ5ICMxMzkzNlxuXHQvLyBJRTYtOCBkbyBub3Qgc3VwcG9ydCB0aGUgZGVmYXVsdFZpZXcgcHJvcGVydHkgc28gcGFyZW50IHdpbGwgYmUgdW5kZWZpbmVkXG5cdGlmICggcGFyZW50ICYmIHBhcmVudCAhPT0gZ2V0VG9wKHBhcmVudCkgKSB7XG5cdFx0Ly8gSUUxMSBkb2VzIG5vdCBoYXZlIGF0dGFjaEV2ZW50LCBzbyBhbGwgbXVzdCBzdWZmZXJcblx0XHRpZiAoIHBhcmVudC5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0cGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZXREb2N1bWVudCgpO1xuXHRcdFx0fSwgZmFsc2UgKTtcblx0XHR9IGVsc2UgaWYgKCBwYXJlbnQuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRwYXJlbnQuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNldERvY3VtZW50KCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllcyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0ZGl2LmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZGl2LmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcblx0fSk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0ZGl2LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlQ29tbWVudChcIlwiKSApO1xuXHRcdHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2MuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jLmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2MuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIElEIGZpbmQgYW5kIGZpbHRlclxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVuZGVmaW5lZCAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHQvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJuc1xuXHRcdFx0XHQvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzXG5cdFx0XHRcdHJldHVybiBtICYmIG0ucGFyZW50Tm9kZSA/IFsgbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU3VwcG9ydDogSUU2Lzdcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0ZGVsZXRlIEV4cHIuZmluZFtcIklEXCJdO1xuXG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbXCJUQUdcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gc3RydW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFtcIkNMQVNTXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoIChzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jLnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZGl2LmlubmVySFRNTCA9IFwiPHNlbGVjdCBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIjpjaGVja2VkXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRkaXYucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaChcIiwuKjpcIik7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGRpdiwgXCJkaXZcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGRpdiwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9KTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oXCJ8XCIpICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oXCJ8XCIpICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBkb2VzIG5vdCBpbXBsZW1lbnQgaW5jbHVzaXZlIGRlc2NlbmRlbnRcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdGlmICggYSA9PT0gZG9jIHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdGlmICggYiA9PT0gZG9jIHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YuY2FsbCggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jID8gLTEgOlxuXHRcdFx0XHRiID09PSBkb2MgPyAxIDpcblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHRhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jO1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZFxuXHRleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCBcIj0nJDEnXVwiICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoKGUpIHt9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBzdHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiICk7XG5cdFx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgZGlmZiwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgPyBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBwYXJlbnRbIGV4cGFuZG8gXSB8fCAocGFyZW50WyBleHBhbmRvIF0gPSB7fSk7XG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVswXSA9PT0gZGlycnVucyAmJiBjYWNoZVsxXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IGNhY2hlWzBdID09PSBkaXJydW5zICYmIGNhY2hlWzJdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHVzZUNhY2hlICYmIChjYWNoZSA9IChlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KSlbIHR5cGUgXSkgJiYgY2FjaGVbMF0gPT09IGRpcnJ1bnMgKSB7XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBjYWNoZVsxXTtcblxuXHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKSBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6IG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJiArK2RpZmYgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQobm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSkpWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbaV0gKTtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSA6XG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm47XG5cdFx0fVxuXHR9LFxuXG5cdHBzZXVkb3M6IHtcblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFswXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImNvbnRhaW5zXCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lclRleHQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cblx0XHRcImxhbmdcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QobGFuZyB8fCBcIlwiKSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdFwidGFyZ2V0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2NFbGVtO1xuXHRcdH0sXG5cblx0XHRcImZvY3VzXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpKSAmJiAhIShlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlO1xuXHRcdH0sXG5cblx0XHRcImRpc2FibGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiAobm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdFwiZW1wdHlcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbXCJlbXB0eVwiXSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKSA9PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9KSxcblxuXHRcdFwibGFzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9KSxcblxuXHRcdFwiZXFcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJldmVuXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDE7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwiZ3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbXCJudGhcIl0gPSBFeHByLnBzZXVkb3NbXCJlcVwiXTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xuXHR2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSxcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoIGNhY2hlZCApIHtcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xuXHR9XG5cblx0c29GYXIgPSBzZWxlY3Rvcjtcblx0Z3JvdXBzID0gW107XG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcblxuXHR3aGlsZSAoIHNvRmFyICkge1xuXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxuXHRcdGlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbMF0ubGVuZ3RoICkgfHwgc29GYXI7XG5cdFx0XHR9XG5cdFx0XHRncm91cHMucHVzaCggKHRva2VucyA9IFtdKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgXCIgXCIgKVxuXHRcdFx0fSk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQobWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggIW1hdGNoZWQgKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3Ncblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXG5cdC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vuc1xuXHRyZXR1cm4gcGFyc2VPbmx5ID9cblx0XHRzb0Zhci5sZW5ndGggOlxuXHRcdHNvRmFyID9cblx0XHRcdFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6XG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgZGlyID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGRpciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTtcblx0XHRcdFx0XHRcdGlmICggKG9sZENhY2hlID0gb3V0ZXJDYWNoZVsgZGlyIF0pICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIGRpciBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbMF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbaV0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmXG5cdFx0XHRcdFx0XHQodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0cmV0dXJuICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdChjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5cGUgXSkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3Rvcihcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxICkuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9KVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kW1wiVEFHXCJdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCAhPT0gZG9jdW1lbnQgJiYgY29udGV4dDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIEtlZXAgYGlgIGEgc3RyaW5nIGlmIHRoZXJlIGFyZSBubyBlbGVtZW50cyBzbyBgbWF0Y2hlZENvdW50YCB3aWxsIGJlIFwiMDBcIiBiZWxvd1xuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmIChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2orK10pICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgbm8gc2VlZCBhbmQgb25seSBvbmUgZ3JvdXBcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29udGV4dCBpZiB0aGUgcm9vdCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRcdHN1cHBvcnQuZ2V0QnlJZCAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0XHRcdEV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZFtcIklEXCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UocnVuZXNjYXBlLCBmdW5lc2NhcGUpLCBjb250ZXh0ICkgfHwgW10gKVswXTtcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xuXHRcdGkgPSBtYXRjaEV4cHJbXCJuZWVkc0NvbnRleHRcIl0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbaV07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKHR5cGUgPSB0b2tlbi50eXBlKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7XG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoIChzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWzBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHRcdFx0XHQpKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdChcIlwiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKFwiXCIpID09PSBleHBhbmRvO1xuXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrXG4vLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uXG5zdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTtcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KVxuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydChmdW5jdGlvbiggZGl2MSApIHtcblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBkaXYxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpICkgJiAxO1xufSk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0ZGl2LmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xuXHRyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0ZGl2LmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZGl2LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0cmV0dXJuIGRpdi5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIEVYUE9TRVxucmV0dXJuIFNpenpsZTtcbn0pO1xuXG4vKmVzbGludC1lbmFibGUgKi9cblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3V0aWwvQXJyLmpzXG5cbi8qKlxuICogQXJyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogQXJyYXkgdXRpbGl0eSBjbGFzcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UudXRpbC5BcnJcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91dGlsL0FyclwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihvYmopIHtcblx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBBcnJheV1cIjtcblx0fTtcblxuXHRmdW5jdGlvbiB0b0FycmF5KG9iaikge1xuXHRcdHZhciBhcnJheSA9IG9iaiwgaSwgbDtcblxuXHRcdGlmICghaXNBcnJheShvYmopKSB7XG5cdFx0XHRhcnJheSA9IFtdO1xuXHRcdFx0Zm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0YXJyYXlbaV0gPSBvYmpbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblx0ZnVuY3Rpb24gZWFjaChvLCBjYiwgcykge1xuXHRcdHZhciBuLCBsO1xuXG5cdFx0aWYgKCFvKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRzID0gcyB8fCBvO1xuXG5cdFx0aWYgKG8ubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEluZGV4ZWQgYXJyYXlzLCBuZWVkZWQgZm9yIFNhZmFyaVxuXHRcdFx0Zm9yIChuID0gMCwgbCA9IG8ubGVuZ3RoOyBuIDwgbDsgbisrKSB7XG5cdFx0XHRcdGlmIChjYi5jYWxsKHMsIG9bbl0sIG4sIG8pID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEhhc2h0YWJsZXNcblx0XHRcdGZvciAobiBpbiBvKSB7XG5cdFx0XHRcdGlmIChvLmhhc093blByb3BlcnR5KG4pKSB7XG5cdFx0XHRcdFx0aWYgKGNiLmNhbGwocywgb1tuXSwgbiwgbykgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0ID0gW107XG5cblx0XHRlYWNoKGFycmF5LCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuXHRcdFx0b3V0LnB1c2goY2FsbGJhY2soaXRlbSwgaW5kZXgsIGFycmF5KSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gZmlsdGVyKGEsIGYpIHtcblx0XHR2YXIgbyA9IFtdO1xuXG5cdFx0ZWFjaChhLCBmdW5jdGlvbih2LCBpbmRleCkge1xuXHRcdFx0aWYgKCFmIHx8IGYodiwgaW5kZXgsIGEpKSB7XG5cdFx0XHRcdG8ucHVzaCh2KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0ZnVuY3Rpb24gaW5kZXhPZihhLCB2KSB7XG5cdFx0dmFyIGksIGw7XG5cblx0XHRpZiAoYSkge1xuXHRcdFx0Zm9yIChpID0gMCwgbCA9IGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGlmIChhW2ldID09PSB2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cblxuXHRmdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCB0aGlzQXJnKSB7XG5cdFx0dmFyIGkgPSAwO1xuXG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG5cdFx0XHRhY2N1bXVsYXRvciA9IGNvbGxlY3Rpb25bMF07XG5cdFx0fVxuXG5cdFx0Zm9yICg7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhY2N1bXVsYXRvciA9IGl0ZXJhdGVlLmNhbGwodGhpc0FyZywgYWNjdW11bGF0b3IsIGNvbGxlY3Rpb25baV0sIGkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2N1bXVsYXRvcjtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG5cdFx0dmFyIGksIGw7XG5cblx0XHRmb3IgKGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAocHJlZGljYXRlLmNhbGwodGhpc0FyZywgYXJyYXlbaV0sIGksIGFycmF5KSkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cblxuXHRmdW5jdGlvbiBmaW5kKGFycmF5LCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcblx0XHR2YXIgaWR4ID0gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIHRoaXNBcmcpO1xuXG5cdFx0aWYgKGlkeCAhPT0gLTEpIHtcblx0XHRcdHJldHVybiBhcnJheVtpZHhdO1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRmdW5jdGlvbiBsYXN0KGNvbGxlY3Rpb24pIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbltjb2xsZWN0aW9uLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRpc0FycmF5OiBpc0FycmF5LFxuXHRcdHRvQXJyYXk6IHRvQXJyYXksXG5cdFx0ZWFjaDogZWFjaCxcblx0XHRtYXA6IG1hcCxcblx0XHRmaWx0ZXI6IGZpbHRlcixcblx0XHRpbmRleE9mOiBpbmRleE9mLFxuXHRcdHJlZHVjZTogcmVkdWNlLFxuXHRcdGZpbmRJbmRleDogZmluZEluZGV4LFxuXHRcdGZpbmQ6IGZpbmQsXG5cdFx0bGFzdDogbGFzdFxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91dGlsL1Rvb2xzLmpzXG5cbi8qKlxuICogVG9vbHMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHZhcmlvdXMgdXRsaXR5IGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGFsc28gZXhwb3NlZFxuICogZGlyZWN0bHkgb24gdGhlIHRpbnltY2UgbmFtZXNwYWNlLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnV0aWwuVG9vbHNcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91dGlsL1Rvb2xzXCIsIFtcblx0XCJ0aW55bWNlL0VudlwiLFxuXHRcInRpbnltY2UvdXRpbC9BcnJcIlxuXSwgZnVuY3Rpb24oRW52LCBBcnIpIHtcblx0LyoqXG5cdCAqIFJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZy5cblx0ICpcblx0ICogQG1ldGhvZCB0cmltXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzIFN0cmluZyB0byByZW1vdmUgd2hpdGVzcGFjZSBmcm9tLlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9IE5ldyBzdHJpbmcgd2l0aCByZW1vdmVkIHdoaXRlc3BhY2UuXG5cdCAqL1xuXHR2YXIgd2hpdGVTcGFjZVJlZ0V4cCA9IC9eXFxzKnxcXHMqJC9nO1xuXG5cdGZ1bmN0aW9uIHRyaW0oc3RyKSB7XG5cdFx0cmV0dXJuIChzdHIgPT09IG51bGwgfHwgc3RyID09PSB1bmRlZmluZWQpID8gJycgOiAoXCJcIiArIHN0cikucmVwbGFjZSh3aGl0ZVNwYWNlUmVnRXhwLCAnJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgb2JqZWN0IGlzIG9mIGEgc3BlY2lmaWMgdHlwZSBmb3IgZXhhbXBsZSBhbiBhcnJheS5cblx0ICpcblx0ICogQG1ldGhvZCBpc1xuXHQgKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBjaGVjayB0eXBlIG9mLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBPcHRpb25hbCB0eXBlIHRvIGNoZWNrIGZvci5cblx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZSBpZiB0aGUgb2JqZWN0IGlzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS5cblx0ICovXG5cdGZ1bmN0aW9uIGlzKG9iaiwgdHlwZSkge1xuXHRcdGlmICghdHlwZSkge1xuXHRcdFx0cmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlID09ICdhcnJheScgJiYgQXJyLmlzQXJyYXkob2JqKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT0gdHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYWtlcyBhIG5hbWUvb2JqZWN0IG1hcCBvdXQgb2YgYW4gYXJyYXkgd2l0aCBuYW1lcy5cblx0ICpcblx0ICogQG1ldGhvZCBtYWtlTWFwXG5cdCAqIEBwYXJhbSB7QXJyYXkvU3RyaW5nfSBpdGVtcyBJdGVtcyB0byBtYWtlIG1hcCBvdXQgb2YuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkZWxpbSBPcHRpb25hbCBkZWxpbWl0ZXIgdG8gc3BsaXQgc3RyaW5nIGJ5LlxuXHQgKiBAcGFyYW0ge09iamVjdH0gbWFwIE9wdGlvbmFsIG1hcCB0byBhZGQgaXRlbXMgdG8uXG5cdCAqIEByZXR1cm4ge09iamVjdH0gTmFtZS92YWx1ZSBtYXAgb2YgaXRlbXMuXG5cdCAqL1xuXHRmdW5jdGlvbiBtYWtlTWFwKGl0ZW1zLCBkZWxpbSwgbWFwKSB7XG5cdFx0dmFyIGk7XG5cblx0XHRpdGVtcyA9IGl0ZW1zIHx8IFtdO1xuXHRcdGRlbGltID0gZGVsaW0gfHwgJywnO1xuXG5cdFx0aWYgKHR5cGVvZiBpdGVtcyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpdGVtcyA9IGl0ZW1zLnNwbGl0KGRlbGltKTtcblx0XHR9XG5cblx0XHRtYXAgPSBtYXAgfHwge307XG5cblx0XHRpID0gaXRlbXMubGVuZ3RoO1xuXHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdG1hcFtpdGVtc1tpXV0gPSB7fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEphdmFTY3JpcHQgZG9lcyBub3QgcHJvdGVjdCBoYXNPd25Qcm9wZXJ0eSBtZXRob2QsIHNvIGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJ3cml0ZSBpdC4gVGhpcyBpc1xuXHQgKiBvYmplY3QgaW5kZXBlbmRlbnQgdmVyc2lvbi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9ialxuXHQgKiBAcGFyYW0ge1N0cmluZ30gcHJvcFxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0ICovXG5cdGZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuXHRcdHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgY2xhc3MsIHN1YmNsYXNzIG9yIHN0YXRpYyBzaW5nbGV0b24uXG5cdCAqIE1vcmUgZGV0YWlscyBvbiB0aGlzIG1ldGhvZCBjYW4gYmUgZm91bmQgaW4gdGhlIFdpa2kuXG5cdCAqXG5cdCAqIEBtZXRob2QgY3JlYXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzIENsYXNzIG5hbWUsIGluaGVyaXRhbmNlIGFuZCBwcmVmaXguXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0byBhZGQgdG8gdGhlIGNsYXNzLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcm9vdCBPcHRpb25hbCByb290IG9iamVjdCBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIHdpbmRvdyBvYmplY3QuXG5cdCAqIEBleGFtcGxlXG5cdCAqIC8vIENyZWF0ZXMgYSBiYXNpYyBjbGFzc1xuXHQgKiB0aW55bWNlLmNyZWF0ZSgndGlueW1jZS5zb21lcGFja2FnZS5Tb21lQ2xhc3MnLCB7XG5cdCAqICAgICBTb21lQ2xhc3M6IGZ1bmN0aW9uKCkge1xuXHQgKiAgICAgICAgIC8vIENsYXNzIGNvbnN0cnVjdG9yXG5cdCAqICAgICB9LFxuXHQgKlxuXHQgKiAgICAgbWV0aG9kOiBmdW5jdGlvbigpIHtcblx0ICogICAgICAgICAvLyBTb21lIG1ldGhvZFxuXHQgKiAgICAgfVxuXHQgKiB9KTtcblx0ICpcblx0ICogLy8gQ3JlYXRlcyBhIGJhc2ljIHN1YmNsYXNzIGNsYXNzXG5cdCAqIHRpbnltY2UuY3JlYXRlKCd0aW55bWNlLnNvbWVwYWNrYWdlLlNvbWVTdWJDbGFzczp0aW55bWNlLnNvbWVwYWNrYWdlLlNvbWVDbGFzcycsIHtcblx0ICogICAgIFNvbWVTdWJDbGFzczogZnVuY3Rpb24oKSB7XG5cdCAqICAgICAgICAgLy8gQ2xhc3MgY29uc3RydWN0b3Jcblx0ICogICAgICAgICB0aGlzLnBhcmVudCgpOyAvLyBDYWxsIHBhcmVudCBjb25zdHJ1Y3RvclxuXHQgKiAgICAgfSxcblx0ICpcblx0ICogICAgIG1ldGhvZDogZnVuY3Rpb24oKSB7XG5cdCAqICAgICAgICAgLy8gU29tZSBtZXRob2Rcblx0ICogICAgICAgICB0aGlzLnBhcmVudCgpOyAvLyBDYWxsIHBhcmVudCBtZXRob2Rcblx0ICogICAgIH0sXG5cdCAqXG5cdCAqICAgICAnc3RhdGljJzoge1xuXHQgKiAgICAgICAgIHN0YXRpY01ldGhvZDogZnVuY3Rpb24oKSB7XG5cdCAqICAgICAgICAgICAgIC8vIFN0YXRpYyBtZXRob2Rcblx0ICogICAgICAgICB9XG5cdCAqICAgICB9XG5cdCAqIH0pO1xuXHQgKlxuXHQgKiAvLyBDcmVhdGVzIGEgc2luZ2xldG9uL3N0YXRpYyBjbGFzc1xuXHQgKiB0aW55bWNlLmNyZWF0ZSgnc3RhdGljIHRpbnltY2Uuc29tZXBhY2thZ2UuU29tZVNpbmdsZXRvbkNsYXNzJywge1xuXHQgKiAgICAgbWV0aG9kOiBmdW5jdGlvbigpIHtcblx0ICogICAgICAgICAvLyBTb21lIG1ldGhvZFxuXHQgKiAgICAgfVxuXHQgKiB9KTtcblx0ICovXG5cdGZ1bmN0aW9uIGNyZWF0ZShzLCBwLCByb290KSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCBzcCwgbnMsIGNuLCBzY24sIGMsIGRlID0gMDtcblxuXHRcdC8vIFBhcnNlIDogPHByZWZpeD4gPGNsYXNzPjo8c3VwZXIgY2xhc3M+XG5cdFx0cyA9IC9eKChzdGF0aWMpICk/KFtcXHcuXSspKDooW1xcdy5dKykpPy8uZXhlYyhzKTtcblx0XHRjbiA9IHNbM10ubWF0Y2goLyhefFxcLikoXFx3KykkL2kpWzJdOyAvLyBDbGFzcyBuYW1lXG5cblx0XHQvLyBDcmVhdGUgbmFtZXNwYWNlIGZvciBuZXcgY2xhc3Ncblx0XHRucyA9IHNlbGYuY3JlYXRlTlMoc1szXS5yZXBsYWNlKC9cXC5cXHcrJC8sICcnKSwgcm9vdCk7XG5cblx0XHQvLyBDbGFzcyBhbHJlYWR5IGV4aXN0c1xuXHRcdGlmIChuc1tjbl0pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHB1cmUgc3RhdGljIGNsYXNzXG5cdFx0aWYgKHNbMl0gPT0gJ3N0YXRpYycpIHtcblx0XHRcdG5zW2NuXSA9IHA7XG5cblx0XHRcdGlmICh0aGlzLm9uQ3JlYXRlKSB7XG5cdFx0XHRcdHRoaXMub25DcmVhdGUoc1syXSwgc1szXSwgbnNbY25dKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBkZWZhdWx0IGNvbnN0cnVjdG9yXG5cdFx0aWYgKCFwW2NuXSkge1xuXHRcdFx0cFtjbl0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0ZGUgPSAxO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBjb25zdHJ1Y3RvciBhbmQgbWV0aG9kc1xuXHRcdG5zW2NuXSA9IHBbY25dO1xuXHRcdHNlbGYuZXh0ZW5kKG5zW2NuXS5wcm90b3R5cGUsIHApO1xuXG5cdFx0Ly8gRXh0ZW5kXG5cdFx0aWYgKHNbNV0pIHtcblx0XHRcdHNwID0gc2VsZi5yZXNvbHZlKHNbNV0pLnByb3RvdHlwZTtcblx0XHRcdHNjbiA9IHNbNV0ubWF0Y2goL1xcLihcXHcrKSQvaSlbMV07IC8vIENsYXNzIG5hbWVcblxuXHRcdFx0Ly8gRXh0ZW5kIGNvbnN0cnVjdG9yXG5cdFx0XHRjID0gbnNbY25dO1xuXHRcdFx0aWYgKGRlKSB7XG5cdFx0XHRcdC8vIEFkZCBwYXNzdGhyb3VnaCBjb25zdHJ1Y3RvclxuXHRcdFx0XHRuc1tjbl0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3Bbc2NuXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQWRkIGluaGVyaXQgY29uc3RydWN0b3Jcblx0XHRcdFx0bnNbY25dID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQgPSBzcFtzY25dO1xuXHRcdFx0XHRcdHJldHVybiBjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRuc1tjbl0ucHJvdG90eXBlW2NuXSA9IG5zW2NuXTtcblxuXHRcdFx0Ly8gQWRkIHN1cGVyIG1ldGhvZHNcblx0XHRcdHNlbGYuZWFjaChzcCwgZnVuY3Rpb24oZiwgbikge1xuXHRcdFx0XHRuc1tjbl0ucHJvdG90eXBlW25dID0gc3Bbbl07XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQWRkIG92ZXJyaWRkZW4gbWV0aG9kc1xuXHRcdFx0c2VsZi5lYWNoKHAsIGZ1bmN0aW9uKGYsIG4pIHtcblx0XHRcdFx0Ly8gRXh0ZW5kIG1ldGhvZHMgaWYgbmVlZGVkXG5cdFx0XHRcdGlmIChzcFtuXSkge1xuXHRcdFx0XHRcdG5zW2NuXS5wcm90b3R5cGVbbl0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHRoaXMucGFyZW50ID0gc3Bbbl07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKG4gIT0gY24pIHtcblx0XHRcdFx0XHRcdG5zW2NuXS5wcm90b3R5cGVbbl0gPSBmO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHN0YXRpYyBtZXRob2RzXG5cdFx0Lypqc2hpbnQgc3ViOnRydWUqL1xuXHRcdC8qZXNsaW50IGRvdC1ub3RhdGlvbjowKi9cblx0XHRzZWxmLmVhY2gocFsnc3RhdGljJ10sIGZ1bmN0aW9uKGYsIG4pIHtcblx0XHRcdG5zW2NuXVtuXSA9IGY7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmQob2JqLCBleHQpIHtcblx0XHR2YXIgaSwgbCwgbmFtZSwgYXJncyA9IGFyZ3VtZW50cywgdmFsdWU7XG5cblx0XHRmb3IgKGkgPSAxLCBsID0gYXJncy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdGV4dCA9IGFyZ3NbaV07XG5cdFx0XHRmb3IgKG5hbWUgaW4gZXh0KSB7XG5cdFx0XHRcdGlmIChleHQuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGV4dFtuYW1lXTtcblxuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvYmpbbmFtZV0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVkIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbSBpbiBhIG9iamVjdCB0cmVlLlxuXHQgKlxuXHQgKiBAbWV0aG9kIHdhbGtcblx0ICogQHBhcmFtIHtPYmplY3R9IG8gT2JqZWN0IHRyZWUgdG8gd2FsayB0aG91Z2guXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGYgRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpdGVtLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbiBPcHRpb25hbCBuYW1lIG9mIGNvbGxlY3Rpb24gaW5zaWRlIHRoZSBvYmplY3RzIHRvIHdhbGsgZm9yIGV4YW1wbGUgY2hpbGROb2Rlcy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IHMgT3B0aW9uYWwgc2NvcGUgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gaW4uXG5cdCAqL1xuXHRmdW5jdGlvbiB3YWxrKG8sIGYsIG4sIHMpIHtcblx0XHRzID0gcyB8fCB0aGlzO1xuXG5cdFx0aWYgKG8pIHtcblx0XHRcdGlmIChuKSB7XG5cdFx0XHRcdG8gPSBvW25dO1xuXHRcdFx0fVxuXG5cdFx0XHRBcnIuZWFjaChvLCBmdW5jdGlvbihvLCBpKSB7XG5cdFx0XHRcdGlmIChmLmNhbGwocywgbywgaSwgbikgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2FsayhvLCBmLCBuLCBzKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmFtZXNwYWNlIG9uIGEgc3BlY2lmaWMgb2JqZWN0LlxuXHQgKlxuXHQgKiBAbWV0aG9kIGNyZWF0ZU5TXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBuIE5hbWVzcGFjZSB0byBjcmVhdGUgZm9yIGV4YW1wbGUgYS5iLmMuZC5cblx0ICogQHBhcmFtIHtPYmplY3R9IG8gT3B0aW9uYWwgb2JqZWN0IHRvIGFkZCBuYW1lc3BhY2UgdG8sIGRlZmF1bHRzIHRvIHdpbmRvdy5cblx0ICogQHJldHVybiB7T2JqZWN0fSBOZXcgbmFtZXNwYWNlIG9iamVjdCB0aGUgbGFzdCBpdGVtIGluIHBhdGguXG5cdCAqIEBleGFtcGxlXG5cdCAqIC8vIENyZWF0ZSBzb21lIG5hbWVzcGFjZVxuXHQgKiB0aW55bWNlLmNyZWF0ZU5TKCd0aW55bWNlLnNvbWVwYWNrYWdlLnN1YnBhY2thZ2UnKTtcblx0ICpcblx0ICogLy8gQWRkIGEgc2luZ2xldG9uXG5cdCAqIHZhciB0aW55bWNlLnNvbWVwYWNrYWdlLnN1YnBhY2thZ2UuU29tZVNpbmdsZXRvbiA9IHtcblx0ICogICAgIG1ldGhvZDogZnVuY3Rpb24oKSB7XG5cdCAqICAgICAgICAgLy8gU29tZSBtZXRob2Rcblx0ICogICAgIH1cblx0ICogfTtcblx0ICovXG5cdGZ1bmN0aW9uIGNyZWF0ZU5TKG4sIG8pIHtcblx0XHR2YXIgaSwgdjtcblxuXHRcdG8gPSBvIHx8IHdpbmRvdztcblxuXHRcdG4gPSBuLnNwbGl0KCcuJyk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHYgPSBuW2ldO1xuXG5cdFx0XHRpZiAoIW9bdl0pIHtcblx0XHRcdFx0b1t2XSA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRvID0gb1t2XTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyBhIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgb2JqZWN0IGZyb20gYSBzcGVjaWZpYyBzdHJ1Y3R1cmUuXG5cdCAqXG5cdCAqIEBtZXRob2QgcmVzb2x2ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbiBQYXRoIHRvIHJlc29sdmUgZm9yIGV4YW1wbGUgYS5iLmMuZC5cblx0ICogQHBhcmFtIHtPYmplY3R9IG8gT3B0aW9uYWwgb2JqZWN0IHRvIHNlYXJjaCB0aG91Z2gsIGRlZmF1bHRzIHRvIHdpbmRvdy5cblx0ICogQHJldHVybiB7T2JqZWN0fSBMYXN0IG9iamVjdCBpbiBwYXRoIG9yIG51bGwgaWYgaXQgY291bGRuJ3QgYmUgcmVzb2x2ZWQuXG5cdCAqIEBleGFtcGxlXG5cdCAqIC8vIFJlc29sdmUgYSBwYXRoIGludG8gYW4gb2JqZWN0IHJlZmVyZW5jZVxuXHQgKiB2YXIgb2JqID0gdGlueW1jZS5yZXNvbHZlKCdhLmIuYy5kJyk7XG5cdCAqL1xuXHRmdW5jdGlvbiByZXNvbHZlKG4sIG8pIHtcblx0XHR2YXIgaSwgbDtcblxuXHRcdG8gPSBvIHx8IHdpbmRvdztcblxuXHRcdG4gPSBuLnNwbGl0KCcuJyk7XG5cdFx0Zm9yIChpID0gMCwgbCA9IG4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRvID0gb1tuW2ldXTtcblxuXHRcdFx0aWYgKCFvKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNwbGl0cyBhIHN0cmluZyBidXQgcmVtb3ZlcyB0aGUgd2hpdGVzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggdmFsdWUuXG5cdCAqXG5cdCAqIEBtZXRob2QgZXhwbG9kZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcyBTdHJpbmcgdG8gc3BsaXQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkIERlbGltaXRlciB0byBzcGxpdCBieS5cblx0ICogQGV4YW1wbGVcblx0ICogLy8gU3BsaXQgYSBzdHJpbmcgaW50byBhbiBhcnJheSB3aXRoIGEsYixjXG5cdCAqIHZhciBhcnIgPSB0aW55bWNlLmV4cGxvZGUoJ2EsIGIsICAgYycpO1xuXHQgKi9cblx0ZnVuY3Rpb24gZXhwbG9kZShzLCBkKSB7XG5cdFx0aWYgKCFzIHx8IGlzKHMsICdhcnJheScpKSB7XG5cdFx0XHRyZXR1cm4gcztcblx0XHR9XG5cblx0XHRyZXR1cm4gQXJyLm1hcChzLnNwbGl0KGQgfHwgJywnKSwgdHJpbSk7XG5cdH1cblxuXHRmdW5jdGlvbiBfYWRkQ2FjaGVTdWZmaXgodXJsKSB7XG5cdFx0dmFyIGNhY2hlU3VmZml4ID0gRW52LmNhY2hlU3VmZml4O1xuXG5cdFx0aWYgKGNhY2hlU3VmZml4KSB7XG5cdFx0XHR1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIGNhY2hlU3VmZml4O1xuXHRcdH1cblxuXHRcdHJldHVybiB1cmw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRyaW06IHRyaW0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheSBvciBub3QuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGlzQXJyYXlcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBjaGVjay5cblx0XHQgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlL2ZhbHNlIHN0YXRlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3Igbm90LlxuXHRcdCAqL1xuXHRcdGlzQXJyYXk6IEFyci5pc0FycmF5LFxuXG5cdFx0aXM6IGlzLFxuXG5cdFx0LyoqXG5cdFx0ICogQ29udmVydHMgdGhlIHNwZWNpZmllZCBvYmplY3QgaW50byBhIHJlYWwgSmF2YVNjcmlwdCBhcnJheS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdG9BcnJheVxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGNvbnZlcnQgaW50byBhcnJheS5cblx0XHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgb2JqZWN0IGJhc2VkIGluIGlucHV0LlxuXHRcdCAqL1xuXHRcdHRvQXJyYXk6IEFyci50b0FycmF5LFxuXHRcdG1ha2VNYXA6IG1ha2VNYXAsXG5cblx0XHQvKipcblx0XHQgKiBQZXJmb3JtcyBhbiBpdGVyYXRpb24gb2YgYWxsIGl0ZW1zIGluIGEgY29sbGVjdGlvbiBzdWNoIGFzIGFuIG9iamVjdCBvciBhcnJheS4gVGhpcyBtZXRob2Qgd2lsbCBleGVjdXJlIHRoZVxuXHRcdCAqIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24sIGlmIHRoZSBjYWxsYmFjayByZXR1cm5zIGZhbHNlIHRoZSBpdGVyYXRpb24gd2lsbCB0ZXJtaW5hdGUuXG5cdFx0ICogVGhlIGNhbGxiYWNrIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDogY2IodmFsdWUsIGtleV9vcl9pbmRleCkuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGVhY2hcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gbyBDb2xsZWN0aW9uIHRvIGl0ZXJhdGUuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSBmb3IgZWFjaCBpdGVtLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzIE9wdGlvbmFsIHNjb3BlIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGluLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gSXRlcmF0ZSBhbiBhcnJheVxuXHRcdCAqIHRpbnltY2UuZWFjaChbMSwyLDNdLCBmdW5jdGlvbih2LCBpKSB7XG5cdFx0ICogICAgIGNvbnNvbGUuZGVidWcoXCJWYWx1ZTogXCIgKyB2ICsgXCIsIEluZGV4OiBcIiArIGkpO1xuXHRcdCAqIH0pO1xuXHRcdCAqXG5cdFx0ICogLy8gSXRlcmF0ZSBhbiBvYmplY3Rcblx0XHQgKiB0aW55bWNlLmVhY2goe2E6IDEsIGI6IDIsIGM6IDNdLCBmdW5jdGlvbih2LCBrKSB7XG5cdFx0ICogICAgIGNvbnNvbGUuZGVidWcoXCJWYWx1ZTogXCIgKyB2ICsgXCIsIEtleTogXCIgKyBrKTtcblx0XHQgKiB9KTtcblx0XHQgKi9cblx0XHRlYWNoOiBBcnIuZWFjaCxcblxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBlYWNoIGl0ZXJhdGlvbiBmdW5jdGlvbiBjYWxsLiBUaGlzIGVuYWJsZXMgeW91IHRvIGNvbnZlcnRcblx0XHQgKiBvbmUgYXJyYXkgbGlzdCBpbnRvIGFub3RoZXIuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG1hcFxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IEFycmF5IG9mIGl0ZW1zIHRvIGl0ZXJhdGUuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpdGVtLiBJdCdzIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBuZXcgdmFsdWUuXG5cdFx0ICogQHJldHVybiB7QXJyYXl9IEFycmF5IHdpdGggbmV3IHZhbHVlcyBiYXNlZCBvbiBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLlxuXHRcdCAqL1xuXHRcdG1hcDogQXJyLm1hcCxcblxuXHRcdC8qKlxuXHRcdCAqIEZpbHRlcnMgb3V0IGl0ZW1zIGZyb20gdGhlIGlucHV0IGFycmF5IGJ5IGNhbGxpbmcgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuXHRcdCAqIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHRoZSBpdGVtIHdpbGwgYmUgZXhjbHVkZWQgaWYgaXQgcmV0dXJucyB0cnVlIGl0IHdpbGwgYmUgaW5jbHVkZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdyZXBcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBhIEFycmF5IG9mIGl0ZW1zIHRvIGxvb3AgdGhvdWdoLlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGYgRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpdGVtLiBJbmNsdWRlL2V4Y2x1ZGUgZGVwZW5kcyBvbiBpdCdzIHJldHVybiB2YWx1ZS5cblx0XHQgKiBAcmV0dXJuIHtBcnJheX0gTmV3IGFycmF5IHdpdGggdmFsdWVzIGltcG9ydGVkIGFuZCBmaWx0ZXJlZCBiYXNlZCBpbiBpbnB1dC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIEZpbHRlciBvdXQgc29tZSBpdGVtcywgdGhpcyB3aWxsIHJldHVybiBhbiBhcnJheSB3aXRoIDQgYW5kIDVcblx0XHQgKiB2YXIgaXRlbXMgPSB0aW55bWNlLmdyZXAoWzEsMiwzLDQsNV0sIGZ1bmN0aW9uKHYpIHtyZXR1cm4gdiA+IDM7fSk7XG5cdFx0ICovXG5cdFx0Z3JlcDogQXJyLmZpbHRlcixcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYW4gaW5kZXggb2YgdGhlIGl0ZW0gb3IgLTEgaWYgaXRlbSBpcyBub3QgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGluQXJyYXlcblx0XHQgKiBAcGFyYW0ge2FueX0gaXRlbSBJdGVtIHRvIHNlYXJjaCBmb3IuXG5cdFx0ICogQHBhcmFtIHtBcnJheX0gYXJyIEFycmF5IHRvIHNlYXJjaCBpbi5cblx0XHQgKiBAcmV0dXJuIHtOdW1iZXJ9IGluZGV4IG9mIHRoZSBpdGVtIG9yIC0xIGlmIGl0ZW0gd2FzIG5vdCBmb3VuZC5cblx0XHQgKi9cblx0XHRpbkFycmF5OiBBcnIuaW5kZXhPZixcblxuXHRcdGhhc093bjogaGFzT3duUHJvcGVydHksXG5cblx0XHRleHRlbmQ6IGV4dGVuZCxcblx0XHRjcmVhdGU6IGNyZWF0ZSxcblx0XHR3YWxrOiB3YWxrLFxuXHRcdGNyZWF0ZU5TOiBjcmVhdGVOUyxcblx0XHRyZXNvbHZlOiByZXNvbHZlLFxuXHRcdGV4cGxvZGU6IGV4cGxvZGUsXG5cdFx0X2FkZENhY2hlU3VmZml4OiBfYWRkQ2FjaGVTdWZmaXhcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZG9tL0RvbVF1ZXJ5LmpzXG5cbi8qKlxuICogRG9tUXVlcnkuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIG1pbWljcyBtb3N0IG9mIHRoZSBqUXVlcnkgQVBJOlxuICpcbiAqIFRoaXMgaXMgd2hhdHMgY3VycmVudGx5IGltcGxlbWVudGVkOlxuICogLSBVdGlsaXR5IGZ1bmN0aW9uc1xuICogLSBET00gdHJhdmVyc2lhbFxuICogLSBET00gbWFuaXB1bGF0aW9uXG4gKiAtIEV2ZW50IGJpbmRpbmdcbiAqXG4gKiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQ6XG4gKiAtIERpbWVuc2lvblxuICogLSBBamF4XG4gKiAtIEFuaW1hdGlvblxuICogLSBBZHZhbmNlZCBjaGFpbmluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgJCA9IHRpbnltY2UuZG9tLkRvbVF1ZXJ5O1xuICogJCgncCcpLmF0dHIoJ2F0dHInLCAndmFsdWUnKS5hZGRDbGFzcygnY2xhc3MnKTtcbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5kb20uRG9tUXVlcnlcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kb20vRG9tUXVlcnlcIiwgW1xuXHRcInRpbnltY2UvZG9tL0V2ZW50VXRpbHNcIixcblx0XCJ0aW55bWNlL2RvbS9TaXp6bGVcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL0VudlwiXG5dLCBmdW5jdGlvbihFdmVudFV0aWxzLCBTaXp6bGUsIFRvb2xzLCBFbnYpIHtcblx0dmFyIGRvYyA9IGRvY3VtZW50LCBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2gsIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXHR2YXIgcnF1aWNrRXhwciA9IC9eKD86W14jPF0qKDxbXFx3XFxXXSs+KVtePl0qJHwjKFtcXHdcXC1dKikkKS87XG5cdHZhciBFdmVudCA9IEV2ZW50VXRpbHMuRXZlbnQsIHVuZGVmO1xuXHR2YXIgc2tpcFVuaXF1ZXMgPSBUb29scy5tYWtlTWFwKCdjaGlsZHJlbixjb250ZW50cyxuZXh0LHByZXYnKTtcblxuXHRmdW5jdGlvbiBpc0RlZmluZWQob2JqKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogIT09ICd1bmRlZmluZWQnO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNXaW5kb3cob2JqKSB7XG5cdFx0cmV0dXJuIG9iaiAmJiBvYmogPT0gb2JqLndpbmRvdztcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50KGh0bWwsIGZyYWdEb2MpIHtcblx0XHR2YXIgZnJhZywgbm9kZSwgY29udGFpbmVyO1xuXG5cdFx0ZnJhZ0RvYyA9IGZyYWdEb2MgfHwgZG9jO1xuXHRcdGNvbnRhaW5lciA9IGZyYWdEb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0ZnJhZyA9IGZyYWdEb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdGNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sO1xuXG5cdFx0d2hpbGUgKChub2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQpKSB7XG5cdFx0XHRmcmFnLmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmcmFnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZG9tTWFuaXB1bGF0ZSh0YXJnZXROb2Rlcywgc291cmNlSXRlbSwgY2FsbGJhY2ssIHJldmVyc2UpIHtcblx0XHR2YXIgaTtcblxuXHRcdGlmIChpc1N0cmluZyhzb3VyY2VJdGVtKSkge1xuXHRcdFx0c291cmNlSXRlbSA9IGNyZWF0ZUZyYWdtZW50KHNvdXJjZUl0ZW0sIGdldEVsZW1lbnREb2N1bWVudCh0YXJnZXROb2Rlc1swXSkpO1xuXHRcdH0gZWxzZSBpZiAoc291cmNlSXRlbS5sZW5ndGggJiYgIXNvdXJjZUl0ZW0ubm9kZVR5cGUpIHtcblx0XHRcdHNvdXJjZUl0ZW0gPSBEb21RdWVyeS5tYWtlQXJyYXkoc291cmNlSXRlbSk7XG5cblx0XHRcdGlmIChyZXZlcnNlKSB7XG5cdFx0XHRcdGZvciAoaSA9IHNvdXJjZUl0ZW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHRkb21NYW5pcHVsYXRlKHRhcmdldE5vZGVzLCBzb3VyY2VJdGVtW2ldLCBjYWxsYmFjaywgcmV2ZXJzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBzb3VyY2VJdGVtLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ZG9tTWFuaXB1bGF0ZSh0YXJnZXROb2Rlcywgc291cmNlSXRlbVtpXSwgY2FsbGJhY2ssIHJldmVyc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0YXJnZXROb2Rlcztcblx0XHR9XG5cblx0XHRpZiAoc291cmNlSXRlbS5ub2RlVHlwZSkge1xuXHRcdFx0aSA9IHRhcmdldE5vZGVzLmxlbmd0aDtcblx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbCh0YXJnZXROb2Rlc1tpXSwgc291cmNlSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldE5vZGVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKSB7XG5cdFx0cmV0dXJuIG5vZGUgJiYgY2xhc3NOYW1lICYmICgnICcgKyBub2RlLmNsYXNzTmFtZSArICcgJykuaW5kZXhPZignICcgKyBjbGFzc05hbWUgKyAnICcpICE9PSAtMTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyYXAoZWxlbWVudHMsIHdyYXBwZXIsIGFsbCkge1xuXHRcdHZhciBsYXN0UGFyZW50LCBuZXdXcmFwcGVyO1xuXG5cdFx0d3JhcHBlciA9IERvbVF1ZXJ5KHdyYXBwZXIpWzBdO1xuXG5cdFx0ZWxlbWVudHMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKCFhbGwgfHwgbGFzdFBhcmVudCAhPSBzZWxmLnBhcmVudE5vZGUpIHtcblx0XHRcdFx0bGFzdFBhcmVudCA9IHNlbGYucGFyZW50Tm9kZTtcblx0XHRcdFx0bmV3V3JhcHBlciA9IHdyYXBwZXIuY2xvbmVOb2RlKGZhbHNlKTtcblx0XHRcdFx0c2VsZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdXcmFwcGVyLCBzZWxmKTtcblx0XHRcdFx0bmV3V3JhcHBlci5hcHBlbmRDaGlsZChzZWxmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld1dyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZWxlbWVudHM7XG5cdH1cblxuXHR2YXIgbnVtZXJpY0Nzc01hcCA9IFRvb2xzLm1ha2VNYXAoJ2ZpbGxPcGFjaXR5IGZvbnRXZWlnaHQgbGluZUhlaWdodCBvcGFjaXR5IG9ycGhhbnMgd2lkb3dzIHpJbmRleCB6b29tJywgJyAnKTtcblx0dmFyIGJvb2xlYW5NYXAgPSBUb29scy5tYWtlTWFwKCdjaGVja2VkIGNvbXBhY3QgZGVjbGFyZSBkZWZlciBkaXNhYmxlZCBpc21hcCBtdWx0aXBsZSBub2hyZWYgbm9zaGFkZSBub3dyYXAgcmVhZG9ubHkgc2VsZWN0ZWQnLCAnICcpO1xuXHR2YXIgcHJvcEZpeCA9IHtcblx0XHQnZm9yJzogJ2h0bWxGb3InLFxuXHRcdCdjbGFzcyc6ICdjbGFzc05hbWUnLFxuXHRcdCdyZWFkb25seSc6ICdyZWFkT25seSdcblx0fTtcblx0dmFyIGNzc0ZpeCA9IHtcblx0XHQnZmxvYXQnOiAnY3NzRmxvYXQnXG5cdH07XG5cblx0dmFyIGF0dHJIb29rcyA9IHt9LCBjc3NIb29rcyA9IHt9O1xuXG5cdGZ1bmN0aW9uIERvbVF1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0KSB7XG5cdFx0Lyplc2xpbnQgbmV3LWNhcDowICovXG5cdFx0cmV0dXJuIG5ldyBEb21RdWVyeS5mbi5pbml0KHNlbGVjdG9yLCBjb250ZXh0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluQXJyYXkoaXRlbSwgYXJyYXkpIHtcblx0XHR2YXIgaTtcblxuXHRcdGlmIChhcnJheS5pbmRleE9mKSB7XG5cdFx0XHRyZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKTtcblx0XHR9XG5cblx0XHRpID0gYXJyYXkubGVuZ3RoO1xuXHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdGlmIChhcnJheVtpXSA9PT0gaXRlbSkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cblxuXHR2YXIgd2hpdGVTcGFjZVJlZ0V4cCA9IC9eXFxzKnxcXHMqJC9nO1xuXG5cdGZ1bmN0aW9uIHRyaW0oc3RyKSB7XG5cdFx0cmV0dXJuIChzdHIgPT09IG51bGwgfHwgc3RyID09PSB1bmRlZikgPyAnJyA6IChcIlwiICsgc3RyKS5yZXBsYWNlKHdoaXRlU3BhY2VSZWdFeHAsICcnKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGVhY2gob2JqLCBjYWxsYmFjaykge1xuXHRcdHZhciBsZW5ndGgsIGtleSwgaSwgdW5kZWYsIHZhbHVlO1xuXG5cdFx0aWYgKG9iaikge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblxuXHRcdFx0aWYgKGxlbmd0aCA9PT0gdW5kZWYpIHtcblx0XHRcdFx0Ly8gTG9vcCBvYmplY3QgaXRlbXNcblx0XHRcdFx0Zm9yIChrZXkgaW4gb2JqKSB7XG5cdFx0XHRcdFx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IG9ialtrZXldO1xuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrLmNhbGwodmFsdWUsIGtleSwgdmFsdWUpID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIExvb3AgYXJyYXkgaXRlbXNcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBvYmpbaV07XG5cdFx0XHRcdFx0aWYgKGNhbGxiYWNrLmNhbGwodmFsdWUsIGksIHZhbHVlKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHRmdW5jdGlvbiBncmVwKGFycmF5LCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXQgPSBbXTtcblxuXHRcdGVhY2goYXJyYXksIGZ1bmN0aW9uKGksIGl0ZW0pIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtLCBpKSkge1xuXHRcdFx0XHRvdXQucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRFbGVtZW50RG9jdW1lbnQoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIGRvYztcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudC5ub2RlVHlwZSA9PSA5KSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50O1xuXHR9XG5cblx0RG9tUXVlcnkuZm4gPSBEb21RdWVyeS5wcm90b3R5cGUgPSB7XG5cdFx0Y29uc3RydWN0b3I6IERvbVF1ZXJ5LFxuXG5cdFx0LyoqXG5cdFx0ICogU2VsZWN0b3IgZm9yIHRoZSBjdXJyZW50IHNldC5cblx0XHQgKlxuXHRcdCAqIEBwcm9wZXJ0eSBzZWxlY3RvclxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdHNlbGVjdG9yOiBcIlwiLFxuXG5cdFx0LyoqXG5cdFx0ICogQ29udGV4dCB1c2VkIHRvIGNyZWF0ZSB0aGUgc2V0LlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IGNvbnRleHRcblx0XHQgKiBAdHlwZSBFbGVtZW50XG5cdFx0ICovXG5cdFx0Y29udGV4dDogbnVsbCxcblxuXHRcdC8qKlxuXHRcdCAqIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgY3VycmVudCBzZXQuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgbGVuZ3RoXG5cdFx0ICogQHR5cGUgTnVtYmVyXG5cdFx0ICovXG5cdFx0bGVuZ3RoOiAwLFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIG5ldyBEb21RdWVyeSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3Igb3IgY29udGV4dC5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBtZXRob2QgaW5pdFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0FycmF5L0RvbVF1ZXJ5fSBzZWxlY3RvciBPcHRpb25hbCBDU1Mgc2VsZWN0b3IvQXJyYXkgb3IgYXJyYXkgbGlrZSBvYmplY3Qgb3IgSFRNTCBzdHJpbmcuXG5cdFx0ICogQHBhcmFtIHtEb2N1bWVudC9FbGVtZW50fSBjb250ZXh0IE9wdGlvbmFsIGNvbnRleHQgdG8gc2VhcmNoIGluLlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNlbGVjdG9yLCBjb250ZXh0KSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIG1hdGNoLCBub2RlO1xuXG5cdFx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHRcdHJldHVybiBzZWxmO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZWN0b3Iubm9kZVR5cGUpIHtcblx0XHRcdFx0c2VsZi5jb250ZXh0ID0gc2VsZlswXSA9IHNlbGVjdG9yO1xuXHRcdFx0XHRzZWxmLmxlbmd0aCA9IDE7XG5cblx0XHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUpIHtcblx0XHRcdFx0c2VsZi5jb250ZXh0ID0gY29udGV4dDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIERvbVF1ZXJ5KHNlbGVjdG9yKS5hdHRyKGNvbnRleHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5jb250ZXh0ID0gY29udGV4dCA9IGRvY3VtZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNTdHJpbmcoc2VsZWN0b3IpKSB7XG5cdFx0XHRcdHNlbGYuc2VsZWN0b3IgPSBzZWxlY3RvcjtcblxuXHRcdFx0XHRpZiAoc2VsZWN0b3IuY2hhckF0KDApID09PSBcIjxcIiAmJiBzZWxlY3Rvci5jaGFyQXQoc2VsZWN0b3IubGVuZ3RoIC0gMSkgPT09IFwiPlwiICYmIHNlbGVjdG9yLmxlbmd0aCA+PSAzKSB7XG5cdFx0XHRcdFx0bWF0Y2ggPSBbbnVsbCwgc2VsZWN0b3IsIG51bGxdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKHNlbGVjdG9yKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChtYXRjaCkge1xuXHRcdFx0XHRcdGlmIChtYXRjaFsxXSkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGNyZWF0ZUZyYWdtZW50KHNlbGVjdG9yLCBnZXRFbGVtZW50RG9jdW1lbnQoY29udGV4dCkpLmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0XHRcdHdoaWxlIChub2RlKSB7XG5cdFx0XHRcdFx0XHRcdHB1c2guY2FsbChzZWxmLCBub2RlKTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBnZXRFbGVtZW50RG9jdW1lbnQoY29udGV4dCkuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbMl0pO1xuXG5cdFx0XHRcdFx0XHRpZiAoIW5vZGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChub2RlLmlkICE9PSBtYXRjaFsyXSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VsZi5maW5kKHNlbGVjdG9yKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c2VsZi5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdFx0c2VsZlswXSA9IG5vZGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBEb21RdWVyeShjb250ZXh0KS5maW5kKHNlbGVjdG9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5hZGQoc2VsZWN0b3IsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnZlcnRzIHRoZSBjdXJyZW50IHNldCB0byBhbiBhcnJheS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdG9BcnJheVxuXHRcdCAqIEByZXR1cm4ge0FycmF5fSBBcnJheSBvZiBhbGwgbm9kZXMgaW4gc2V0LlxuXHRcdCAqL1xuXHRcdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFRvb2xzLnRvQXJyYXkodGhpcyk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgbmV3IG5vZGVzIHRvIHRoZSBzZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFxuXHRcdCAqIEBwYXJhbSB7QXJyYXkvdGlueW1jZS5kb20uRG9tUXVlcnl9IGl0ZW1zIEFycmF5IG9mIGFsbCBub2RlcyB0byBhZGQgdG8gc2V0LlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc29ydCBPcHRpb25hbCBzb3J0IGZsYWcgdGhhdCBlbmFibGVzIHNvcnRpbmcgb2YgZWxlbWVudHMuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IE5ldyBpbnN0YW5jZSB3aXRoIG5vZGVzIGFkZGVkLlxuXHRcdCAqL1xuXHRcdGFkZDogZnVuY3Rpb24oaXRlbXMsIHNvcnQpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbm9kZXMsIGk7XG5cblx0XHRcdGlmIChpc1N0cmluZyhpdGVtcykpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYuYWRkKERvbVF1ZXJ5KGl0ZW1zKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzb3J0ICE9PSBmYWxzZSkge1xuXHRcdFx0XHRub2RlcyA9IERvbVF1ZXJ5LnVuaXF1ZShzZWxmLnRvQXJyYXkoKS5jb25jYXQoRG9tUXVlcnkubWFrZUFycmF5KGl0ZW1zKSkpO1xuXHRcdFx0XHRzZWxmLmxlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0c2VsZltpXSA9IG5vZGVzW2ldO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KHNlbGYsIERvbVF1ZXJ5Lm1ha2VBcnJheShpdGVtcykpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cy9nZXRzIGF0dHJpYnV0ZXMgb24gdGhlIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IHNldC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYXR0clxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL09iamVjdH0gbmFtZSBOYW1lIG9mIGF0dHJpYnV0ZSB0byBnZXQgb3IgYW4gb2JqZWN0IHdpdGggYXR0cmlidXRlcyB0byBzZXQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIE9wdGlvbmFsIHZhbHVlIHRvIHNldC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeS9TdHJpbmd9IEN1cnJlbnQgc2V0IG9yIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIHdoZW4gb25seSB0aGUgbmFtZSBpcyBzcGVjaWZpZWQuXG5cdFx0ICovXG5cdFx0YXR0cjogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgaG9vaztcblxuXHRcdFx0aWYgKHR5cGVvZiBuYW1lID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGVhY2gobmFtZSwgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcblx0XHRcdFx0XHRzZWxmLmF0dHIobmFtZSwgdmFsdWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGhvb2s7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5ub2RlVHlwZSA9PT0gMSkge1xuXHRcdFx0XHRcdFx0aG9vayA9IGF0dHJIb29rc1tuYW1lXTtcblx0XHRcdFx0XHRcdGlmIChob29rICYmIGhvb2suc2V0KSB7XG5cdFx0XHRcdFx0XHRcdGhvb2suc2V0KHRoaXMsIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSwgMik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgMik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChzZWxmWzBdICYmIHNlbGZbMF0ubm9kZVR5cGUgPT09IDEpIHtcblx0XHRcdFx0XHRob29rID0gYXR0ckhvb2tzW25hbWVdO1xuXHRcdFx0XHRcdGlmIChob29rICYmIGhvb2suZ2V0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vay5nZXQoc2VsZlswXSwgbmFtZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGJvb2xlYW5NYXBbbmFtZV0pIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZWxmLnByb3AobmFtZSkgPyBuYW1lIDogdW5kZWY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFsdWUgPSBzZWxmWzBdLmdldEF0dHJpYnV0ZShuYW1lLCAyKTtcblxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSB1bmRlZjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIGF0dHJpYnV0c2Ugb24gdGhlIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IHNldC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlQXR0clxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL09iamVjdH0gbmFtZSBOYW1lIG9mIGF0dHJpYnV0ZSB0byByZW1vdmUuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnkvU3RyaW5nfSBDdXJyZW50IHNldC5cblx0XHQgKi9cblx0XHRyZW1vdmVBdHRyOiBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKG5hbWUsIG51bGwpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgcHJvcGVydGllcyBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgc2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhdHRyXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvT2JqZWN0fSBuYW1lIE5hbWUgb2YgcHJvcGVydHkgdG8gZ2V0IG9yIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdG8gc2V0LlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBPcHRpb25hbCB2YWx1ZSB0byBzZXQuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnkvU3RyaW5nfSBDdXJyZW50IHNldCBvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IHdoZW4gb25seSB0aGUgbmFtZSBpcyBzcGVjaWZpZWQuXG5cdFx0ICovXG5cdFx0cHJvcDogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0bmFtZSA9IHByb3BGaXhbbmFtZV0gfHwgbmFtZTtcblxuXHRcdFx0aWYgKHR5cGVvZiBuYW1lID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGVhY2gobmFtZSwgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcblx0XHRcdFx0XHRzZWxmLnByb3AobmFtZSwgdmFsdWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubm9kZVR5cGUgPT0gMSkge1xuXHRcdFx0XHRcdFx0dGhpc1tuYW1lXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoc2VsZlswXSAmJiBzZWxmWzBdLm5vZGVUeXBlICYmIG5hbWUgaW4gc2VsZlswXSkge1xuXHRcdFx0XHRcdHJldHVybiBzZWxmWzBdW25hbWVdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cy9nZXRzIHN0eWxlcyBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgc2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjc3Ncblx0XHQgKiBAcGFyYW0ge1N0cmluZy9PYmplY3R9IG5hbWUgTmFtZSBvZiBzdHlsZSB0byBnZXQgb3IgYW4gb2JqZWN0IHdpdGggc3R5bGVzIHRvIHNldC5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgT3B0aW9uYWwgdmFsdWUgdG8gc2V0LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5L1N0cmluZ30gQ3VycmVudCBzZXQgb3IgdGhlIHNwZWNpZmllZCBzdHlsZSB3aGVuIG9ubHkgdGhlIG5hbWUgaXMgc3BlY2lmaWVkLlxuXHRcdCAqL1xuXHRcdGNzczogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgZWxtLCBob29rO1xuXG5cdFx0XHRmdW5jdGlvbiBjYW1lbChuYW1lKSB7XG5cdFx0XHRcdHJldHVybiBuYW1lLnJlcGxhY2UoLy0oXFxEKS9nLCBmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGIudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGRhc2hlZChuYW1lKSB7XG5cdFx0XHRcdHJldHVybiBuYW1lLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHRyZXR1cm4gJy0nICsgYTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRlYWNoKG5hbWUsIGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG5cdFx0XHRcdFx0c2VsZi5jc3MobmFtZSwgdmFsdWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpc0RlZmluZWQodmFsdWUpKSB7XG5cdFx0XHRcdFx0bmFtZSA9IGNhbWVsKG5hbWUpO1xuXG5cdFx0XHRcdFx0Ly8gRGVmYXVsdCBweCBzdWZmaXggb24gdGhlc2Vcblx0XHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhbnVtZXJpY0Nzc01hcFtuYW1lXSkge1xuXHRcdFx0XHRcdFx0dmFsdWUgKz0gJ3B4Jztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzZWxmLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgc3R5bGUgPSB0aGlzLnN0eWxlO1xuXG5cdFx0XHRcdFx0XHRob29rID0gY3NzSG9va3NbbmFtZV07XG5cdFx0XHRcdFx0XHRpZiAoaG9vayAmJiBob29rLnNldCkge1xuXHRcdFx0XHRcdFx0XHRob29rLnNldCh0aGlzLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdHlsZVtjc3NGaXhbbmFtZV0gfHwgbmFtZV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0XHRcdC8vIElnbm9yZVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzdHlsZS5yZW1vdmVQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdHN0eWxlLnJlbW92ZVByb3BlcnR5KGRhc2hlZChuYW1lKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxtID0gc2VsZlswXTtcblxuXHRcdFx0XHRcdGhvb2sgPSBjc3NIb29rc1tuYW1lXTtcblx0XHRcdFx0XHRpZiAoaG9vayAmJiBob29rLmdldCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2suZ2V0KGVsbSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGVsbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbG0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoZGFzaGVkKG5hbWUpKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsbS5jdXJyZW50U3R5bGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbG0uY3VycmVudFN0eWxlW2NhbWVsKG5hbWUpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgYWxsIG5vZGVzIGluIHNldCBmcm9tIHRoZSBkb2N1bWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0IHdpdGggdGhlIHJlbW92ZWQgbm9kZXMuXG5cdFx0ICovXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbm9kZSwgaSA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdG5vZGUgPSBzZWxmW2ldO1xuXHRcdFx0XHRFdmVudC5jbGVhbihub2RlKTtcblxuXHRcdFx0XHRpZiAobm9kZS5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBFbXB0aWVzIGFsbCBlbGVtZW50cyBpbiBzZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGVtcHR5XG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0IHdpdGggdGhlIGVtcHR5IG5vZGVzLlxuXHRcdCAqL1xuXHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbm9kZSwgaSA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdG5vZGUgPSBzZWxmW2ldO1xuXHRcdFx0XHR3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0bm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzIG9yIGdldHMgdGhlIEhUTUwgb2YgdGhlIGN1cnJlbnQgc2V0IG9yIGZpcnN0IHNldCBub2RlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBodG1sXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIE9wdGlvbmFsIGlubmVySFRNTCB2YWx1ZSB0byBzZXQgb24gZWFjaCBlbGVtZW50LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5L1N0cmluZ30gQ3VycmVudCBzZXQgb3IgdGhlIGlubmVySFRNTCBvZiB0aGUgZmlyc3QgZWxlbWVudC5cblx0XHQgKi9cblx0XHRodG1sOiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBpO1xuXG5cdFx0XHRpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuXHRcdFx0XHRpID0gc2VsZi5sZW5ndGg7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRzZWxmW2ldLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0XHQvLyBXb3JrYXJvdW5kIGZvciBcIlVua25vd24gcnVudGltZSBlcnJvclwiIHdoZW4gRElWIGlzIGFkZGVkIHRvIFAgb24gSUVcblx0XHRcdFx0XHREb21RdWVyeShzZWxmW2ldKS5lbXB0eSgpLmFwcGVuZCh2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gc2VsZjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGZbMF0gPyBzZWxmWzBdLmlubmVySFRNTCA6ICcnO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzIG9yIGdldHMgdGhlIHRleHQgb2YgdGhlIGN1cnJlbnQgc2V0IG9yIGZpcnN0IHNldCBub2RlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0ZXh0XG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIE9wdGlvbmFsIGlubmVyVGV4dCB2YWx1ZSB0byBzZXQgb24gZWFjaCBlbGVtZW50LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5L1N0cmluZ30gQ3VycmVudCBzZXQgb3IgdGhlIGlubmVyVGV4dCBvZiB0aGUgZmlyc3QgZWxlbWVudC5cblx0XHQgKi9cblx0XHR0ZXh0OiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBpO1xuXG5cdFx0XHRpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuXHRcdFx0XHRpID0gc2VsZi5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRpZiAoXCJpbm5lclRleHRcIiBpbiBzZWxmW2ldKSB7XG5cdFx0XHRcdFx0XHRzZWxmW2ldLmlubmVyVGV4dCA9IHZhbHVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmWzBdLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmWzBdID8gKHNlbGZbMF0uaW5uZXJUZXh0IHx8IHNlbGZbMF0udGV4dENvbnRlbnQpIDogJyc7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFwcGVuZHMgdGhlIHNwZWNpZmllZCBub2RlL2h0bWwgb3Igbm9kZSBzZXQgdG8gdGhlIGN1cnJlbnQgc2V0IG5vZGVzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhcHBlbmRcblx0XHQgKiBAcGFyYW0ge1N0cmluZy9FbGVtZW50L0FycmF5L3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBjb250ZW50IENvbnRlbnQgdG8gYXBwZW5kIHRvIGVhY2ggZWxlbWVudCBpbiBzZXQuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0LlxuXHRcdCAqL1xuXHRcdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZG9tTWFuaXB1bGF0ZSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0Ly8gRWl0aGVyIGVsZW1lbnQgb3IgU2hhZG93IFJvb3Rcblx0XHRcdFx0aWYgKHRoaXMubm9kZVR5cGUgPT09IDEgfHwgKHRoaXMuaG9zdCAmJiB0aGlzLmhvc3Qubm9kZVR5cGUgPT09IDEpKSB7XG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFByZXBlbmRzIHRoZSBzcGVjaWZpZWQgbm9kZS9odG1sIG9yIG5vZGUgc2V0IHRvIHRoZSBjdXJyZW50IHNldCBub2Rlcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcHJlcGVuZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvQXJyYXkvdGlueW1jZS5kb20uRG9tUXVlcnl9IGNvbnRlbnQgQ29udGVudCB0byBwcmVwZW5kIHRvIGVhY2ggZWxlbWVudCBpbiBzZXQuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0LlxuXHRcdCAqL1xuXHRcdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGRvbU1hbmlwdWxhdGUodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdC8vIEVpdGhlciBlbGVtZW50IG9yIFNoYWRvdyBSb290XG5cdFx0XHRcdGlmICh0aGlzLm5vZGVUeXBlID09PSAxIHx8ICh0aGlzLmhvc3QgJiYgdGhpcy5ob3N0Lm5vZGVUeXBlID09PSAxKSkge1xuXHRcdFx0XHRcdHRoaXMuaW5zZXJ0QmVmb3JlKG5vZGUsIHRoaXMuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRydWUpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMgYmVmb3JlIGN1cnJlbnQgc2V0IG5vZGVzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBiZWZvcmVcblx0XHQgKiBAcGFyYW0ge1N0cmluZy9FbGVtZW50L0FycmF5L3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBjb250ZW50IENvbnRlbnQgdG8gYWRkIGJlZm9yZSB0byBlYWNoIGVsZW1lbnQgaW4gc2V0LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBDdXJyZW50IHNldC5cblx0XHQgKi9cblx0XHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRpZiAoc2VsZlswXSAmJiBzZWxmWzBdLnBhcmVudE5vZGUpIHtcblx0XHRcdFx0cmV0dXJuIGRvbU1hbmlwdWxhdGUoc2VsZiwgYXJndW1lbnRzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCB0aGlzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMgYWZ0ZXIgY3VycmVudCBzZXQgbm9kZXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFmdGVyXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudC9BcnJheS90aW55bWNlLmRvbS5Eb21RdWVyeX0gY29udGVudCBDb250ZW50IHRvIGFkZCBhZnRlciB0byBlYWNoIGVsZW1lbnQgaW4gc2V0LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBDdXJyZW50IHNldC5cblx0XHQgKi9cblx0XHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGlmIChzZWxmWzBdICYmIHNlbGZbMF0ucGFyZW50Tm9kZSkge1xuXHRcdFx0XHRyZXR1cm4gZG9tTWFuaXB1bGF0ZShzZWxmLCBhcmd1bWVudHMsIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHRoaXMubmV4dFNpYmxpbmcpO1xuXHRcdFx0XHR9LCB0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFwcGVuZHMgdGhlIHNwZWNpZmllZCBzZXQgbm9kZXMgdG8gdGhlIHNwZWNpZmllZCBzZWxlY3Rvci9pbnN0YW5jZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYXBwZW5kVG9cblx0XHQgKiBAcGFyYW0ge1N0cmluZy9FbGVtZW50L0FycmF5L3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSB2YWwgSXRlbSB0byBhcHBlbmQgdGhlIGN1cnJlbnQgc2V0IHRvLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBDdXJyZW50IHNldCB3aXRoIHRoZSBhcHBlbmRlZCBub2Rlcy5cblx0XHQgKi9cblx0XHRhcHBlbmRUbzogZnVuY3Rpb24odmFsKSB7XG5cdFx0XHREb21RdWVyeSh2YWwpLmFwcGVuZCh0aGlzKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFByZXBlbmRzIHRoZSBzcGVjaWZpZWQgc2V0IG5vZGVzIHRvIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IvaW5zdGFuY2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHByZXBlbmRUb1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvQXJyYXkvdGlueW1jZS5kb20uRG9tUXVlcnl9IHZhbCBJdGVtIHRvIHByZXBlbmQgdGhlIGN1cnJlbnQgc2V0IHRvLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBDdXJyZW50IHNldCB3aXRoIHRoZSBwcmVwZW5kZWQgbm9kZXMuXG5cdFx0ICovXG5cdFx0cHJlcGVuZFRvOiBmdW5jdGlvbih2YWwpIHtcblx0XHRcdERvbVF1ZXJ5KHZhbCkucHJlcGVuZCh0aGlzKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlcGxhY2VzIHRoZSBub2RlcyBpbiBzZXQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlcGxhY2VXaXRoXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudC9BcnJheS90aW55bWNlLmRvbS5Eb21RdWVyeX0gY29udGVudCBDb250ZW50IHRvIHJlcGxhY2Ugbm9kZXMgd2l0aC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeX0gU2V0IHdpdGggcmVwbGFjZWQgbm9kZXMuXG5cdFx0ICovXG5cdFx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKGNvbnRlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzLmJlZm9yZShjb250ZW50KS5yZW1vdmUoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogV3JhcHMgYWxsIGVsZW1lbnRzIGluIHNldCB3aXRoIHRoZSBzcGVjaWZpZWQgd3JhcHBlci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgd3JhcFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvQXJyYXkvdGlueW1jZS5kb20uRG9tUXVlcnl9IGNvbnRlbnQgQ29udGVudCB0byB3cmFwIG5vZGVzIHdpdGguXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IFNldCB3aXRoIHdyYXBwZWQgbm9kZXMuXG5cdFx0ICovXG5cdFx0d3JhcDogZnVuY3Rpb24oY29udGVudCkge1xuXHRcdFx0cmV0dXJuIHdyYXAodGhpcywgY29udGVudCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFdyYXBzIGFsbCBub2RlcyBpbiBzZXQgd2l0aCB0aGUgc3BlY2lmaWVkIHdyYXBwZXIuIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MgYWxsIG9mIHRoZW1cblx0XHQgKiB3aWxsIGJlIHdyYXBwZWQgaW4gdGhlIHNhbWUgd3JhcHBlci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgd3JhcEFsbFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvQXJyYXkvdGlueW1jZS5kb20uRG9tUXVlcnl9IGNvbnRlbnQgQ29udGVudCB0byB3cmFwIG5vZGVzIHdpdGguXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IFNldCB3aXRoIHdyYXBwZWQgbm9kZXMuXG5cdFx0ICovXG5cdFx0d3JhcEFsbDogZnVuY3Rpb24oY29udGVudCkge1xuXHRcdFx0cmV0dXJuIHdyYXAodGhpcywgY29udGVudCwgdHJ1ZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFdyYXBzIGFsbCBlbGVtZW50cyBpbm5lciBjb250ZW50cyBpbiBzZXQgd2l0aCB0aGUgc3BlY2lmaWVkIHdyYXBwZXIuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHdyYXBJbm5lclxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvQXJyYXkvdGlueW1jZS5kb20uRG9tUXVlcnl9IGNvbnRlbnQgQ29udGVudCB0byB3cmFwIG5vZGVzIHdpdGguXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IFNldCB3aXRoIHdyYXBwZWQgbm9kZXMuXG5cdFx0ICovXG5cdFx0d3JhcElubmVyOiBmdW5jdGlvbihjb250ZW50KSB7XG5cdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdERvbVF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkud3JhcEFsbChjb250ZW50KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVW53cmFwcyBhbGwgZWxlbWVudHMgYnkgcmVtb3ZpbmcgdGhlIHBhcmVudCBlbGVtZW50IG9mIGVhY2ggaXRlbSBpbiBzZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHVud3JhcFxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBTZXQgd2l0aCB1bndyYXBwZWQgbm9kZXMuXG5cdFx0ICovXG5cdFx0dW53cmFwOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdERvbVF1ZXJ5KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ2xvbmVzIGFsbCBub2RlcyBpbiBzZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNsb25lXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IFNldCB3aXRoIGNsb25lZCBub2Rlcy5cblx0XHQgKi9cblx0XHRjbG9uZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gW107XG5cblx0XHRcdHRoaXMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5jbG9uZU5vZGUodHJ1ZSkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBEb21RdWVyeShyZXN1bHQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIHRoZSBzcGVjaWZpZWQgY2xhc3MgbmFtZSB0byB0aGUgY3VycmVudCBzZXQgZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZENsYXNzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGFkZC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeX0gQ3VycmVudCBzZXQuXG5cdFx0ICovXG5cdFx0YWRkQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoY2xhc3NOYW1lLCB0cnVlKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGNsYXNzIG5hbWUgdG8gdGhlIGN1cnJlbnQgc2V0IGVsZW1lbnRzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW1vdmVDbGFzc1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSB0byByZW1vdmUuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0LlxuXHRcdCAqL1xuXHRcdHJlbW92ZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUpIHtcblx0XHRcdHJldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGNsYXNzTmFtZSwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUb2dnbGVzIHRoZSBzcGVjaWZpZWQgY2xhc3MgbmFtZSBvbiB0aGUgY3VycmVudCBzZXQgZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHRvZ2dsZUNsYXNzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGFkZC9yZW1vdmUuXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBzdGF0ZSBPcHRpb25hbCBzdGF0ZSB0byB0b2dnbGUgb24vb2ZmLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBDdXJyZW50IHNldC5cblx0XHQgKi9cblx0XHR0b2dnbGVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lLCBzdGF0ZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHQvLyBGdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdGlmICh0eXBlb2YgY2xhc3NOYW1lICE9ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJldHVybiBzZWxmO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2xhc3NOYW1lLmluZGV4T2YoJyAnKSAhPT0gLTEpIHtcblx0XHRcdFx0ZWFjaChjbGFzc05hbWUuc3BsaXQoJyAnKSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi50b2dnbGVDbGFzcyh0aGlzLCBzdGF0ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5lYWNoKGZ1bmN0aW9uKGluZGV4LCBub2RlKSB7XG5cdFx0XHRcdFx0dmFyIGV4aXN0aW5nQ2xhc3NOYW1lLCBjbGFzc1N0YXRlO1xuXG5cdFx0XHRcdFx0Y2xhc3NTdGF0ZSA9IGhhc0NsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG5cdFx0XHRcdFx0aWYgKGNsYXNzU3RhdGUgIT09IHN0YXRlKSB7XG5cdFx0XHRcdFx0XHRleGlzdGluZ0NsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lO1xuXG5cdFx0XHRcdFx0XHRpZiAoY2xhc3NTdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRub2RlLmNsYXNzTmFtZSA9IHRyaW0oKFwiIFwiICsgZXhpc3RpbmdDbGFzc05hbWUgKyBcIiBcIikucmVwbGFjZSgnICcgKyBjbGFzc05hbWUgKyAnICcsICcgJykpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bm9kZS5jbGFzc05hbWUgKz0gZXhpc3RpbmdDbGFzc05hbWUgPyAnICcgKyBjbGFzc05hbWUgOiBjbGFzc05hbWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgZmlyc3QgaXRlbSBpbiBzZXQgaGFzIHRoZSBzcGVjaWZpZWQgY2xhc3MuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGhhc0NsYXNzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGNoZWNrIGZvci5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlL2ZhbHNlIGlmIHRoZSBzZXQgaGFzIHRoZSBzcGVjaWZpZWQgY2xhc3MuXG5cdFx0ICovXG5cdFx0aGFzQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuXHRcdFx0cmV0dXJuIGhhc0NsYXNzKHRoaXNbMF0sIGNsYXNzTmFtZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEV4ZWN1dGVzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtIERvbVF1ZXJ5IGNvbGxlY3Rpb24uIElmIHlvdSByZXR1cm4gZmFsc2UgaW4gdGhlXG5cdFx0ICogY2FsbGJhY2sgaXQgd2lsbCBicmVhayB0aGUgbG9vcC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZWFjaFxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZm9yIGVhY2ggaXRlbS5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeX0gQ3VycmVudCBzZXQuXG5cdFx0ICovXG5cdFx0ZWFjaDogZnVuY3Rpb24oY2FsbGJhY2spIHtcblx0XHRcdHJldHVybiBlYWNoKHRoaXMsIGNhbGxiYWNrKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQmluZHMgYW4gZXZlbnQgd2l0aCBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgZWxlbWVudHMgaW4gc2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBvblxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGJpbmQuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBvY2N1cnMuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0LlxuXHRcdCAqL1xuXHRcdG9uOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0RXZlbnQuYmluZCh0aGlzLCBuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVW5iaW5kcyBhbiBldmVudCB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBlbGVtZW50cyBpbiBzZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG9mZlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE9wdGlvbmFsIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGJpbmQuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBvY2N1cnMuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0LlxuXHRcdCAqL1xuXHRcdG9mZjogZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdEV2ZW50LnVuYmluZCh0aGlzLCBuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgdGhlIHNwZWNpZmllZCBldmVudCBieSBuYW1lIG9yIGV2ZW50IG9iamVjdC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdHJpZ2dlclxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL09iamVjdH0gbmFtZSBOYW1lIG9mIHRoZSBldmVudCB0byB0cmlnZ2VyIG9yIGV2ZW50IG9iamVjdC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeX0gQ3VycmVudCBzZXQuXG5cdFx0ICovXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBuYW1lID09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0RXZlbnQuZmlyZSh0aGlzLCBuYW1lLnR5cGUsIG5hbWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdEV2ZW50LmZpcmUodGhpcywgbmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTaG93cyBhbGwgZWxlbWVudHMgaW4gc2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzaG93XG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0LlxuXHRcdCAqL1xuXHRcdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY3NzKCdkaXNwbGF5JywgJycpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBIaWRlcyBhbGwgZWxlbWVudHMgaW4gc2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBoaWRlXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IEN1cnJlbnQgc2V0LlxuXHRcdCAqL1xuXHRcdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2xpY2VzIHRoZSBjdXJyZW50IHNldC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2xpY2Vcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gc3RhcnQgU3RhcnQgaW5kZXggdG8gc2xpY2UgYXQuXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IGVuZCBPcHRpb25hbCBlbmQgaW5kZXggdG8gZW5kIHNsaWNlIGF0LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBTbGljZWQgc2V0LlxuXHRcdCAqL1xuXHRcdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBuZXcgRG9tUXVlcnkoc2xpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1ha2VzIHRoZSBzZXQgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBpbmRleC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZXFcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gaW5kZXggSW5kZXggdG8gc2V0IGl0IGVxdWFsIHRvLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBTaW5nbGUgaXRlbSBzZXQuXG5cdFx0ICovXG5cdFx0ZXE6IGZ1bmN0aW9uKGluZGV4KSB7XG5cdFx0XHRyZXR1cm4gaW5kZXggPT09IC0xID8gdGhpcy5zbGljZShpbmRleCkgOiB0aGlzLnNsaWNlKGluZGV4LCAraW5kZXggKyAxKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTWFrZXMgdGhlIHNldCBlcXVhbCB0byBmaXJzdCBlbGVtZW50IGluIHNldC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZmlyc3Rcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeX0gU2luZ2xlIGl0ZW0gc2V0LlxuXHRcdCAqL1xuXHRcdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmVxKDApO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBNYWtlcyB0aGUgc2V0IGVxdWFsIHRvIGxhc3QgZWxlbWVudCBpbiBzZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGxhc3Rcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeX0gU2luZ2xlIGl0ZW0gc2V0LlxuXHRcdCAqL1xuXHRcdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXEoLTEpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGaW5kcyBlbGVtZW50cyBieSB0aGUgc3BlY2lmaWVkIHNlbGVjdG9yIGZvciBlYWNoIGVsZW1lbnQgaW4gc2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBmaW5kXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIGZpbmQgZWxlbWVudHMgYnkuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IFNldCB3aXRoIG1hdGNoZXMgZWxlbWVudHMuXG5cdFx0ICovXG5cdFx0ZmluZDogZnVuY3Rpb24oc2VsZWN0b3IpIHtcblx0XHRcdHZhciBpLCBsLCByZXQgPSBbXTtcblxuXHRcdFx0Zm9yIChpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdERvbVF1ZXJ5LmZpbmQoc2VsZWN0b3IsIHRoaXNbaV0sIHJldCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBEb21RdWVyeShyZXQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGaWx0ZXJzIHRoZSBjdXJyZW50IHNldCB3aXRoIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGZpbHRlclxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL2Z1bmN0aW9ufSBzZWxlY3RvciBTZWxlY3RvciB0byBmaWx0ZXIgZWxlbWVudHMgYnkuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IFNldCB3aXRoIGZpbHRlcmVkIGVsZW1lbnRzLlxuXHRcdCAqL1xuXHRcdGZpbHRlcjogZnVuY3Rpb24oc2VsZWN0b3IpIHtcblx0XHRcdGlmICh0eXBlb2Ygc2VsZWN0b3IgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRyZXR1cm4gRG9tUXVlcnkoZ3JlcCh0aGlzLnRvQXJyYXkoKSwgZnVuY3Rpb24oaXRlbSwgaSkge1xuXHRcdFx0XHRcdHJldHVybiBzZWxlY3RvcihpLCBpdGVtKTtcblx0XHRcdFx0fSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gRG9tUXVlcnkoRG9tUXVlcnkuZmlsdGVyKHNlbGVjdG9yLCB0aGlzLnRvQXJyYXkoKSkpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBHZXRzIHRoZSBjdXJyZW50IG5vZGUgb3IgYW55IHBhcmVudCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIHNlbGVjdG9yLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjbG9zZXN0XG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudC90aW55bWNlLmRvbS5Eb21RdWVyeX0gc2VsZWN0b3IgU2VsZWN0b3Igb3IgZWxlbWVudCB0byBmaW5kLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBTZXQgd2l0aCBjbG9zZXN0IGVsZW1lbnRzLlxuXHRcdCAqL1xuXHRcdGNsb3Nlc3Q6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gW107XG5cblx0XHRcdGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIERvbVF1ZXJ5KSB7XG5cdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3JbMF07XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZWFjaChmdW5jdGlvbihpLCBub2RlKSB7XG5cdFx0XHRcdHdoaWxlIChub2RlKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJyAmJiBEb21RdWVyeShub2RlKS5pcyhzZWxlY3RvcikpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChub2RlID09IHNlbGVjdG9yKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChub2RlKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gRG9tUXVlcnkocmVzdWx0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHNldCBvciBzZXRzIHRoZSB0b3AvbGVmdCBjc3MgcHJvcGVydGllcyBvZiBhbGwgZWxlbWVudHMgaW4gc2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBvZmZzZXRcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gb2Zmc2V0IE9wdGlvbmFsIG9mZnNldCBvYmplY3QgdG8gc2V0IG9uIGVhY2ggaXRlbS5cblx0XHQgKiBAcmV0dXJuIHtPYmplY3QvdGlueW1jZS5kb20uRG9tUXVlcnl9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2Zmc2V0IG9yIHRoZSBjdXJyZW50IHNldCBpZiB5b3Ugc3BlY2lmaWVkIGFuIG9mZnNldC5cblx0XHQgKi9cblx0XHRvZmZzZXQ6IGZ1bmN0aW9uKG9mZnNldCkge1xuXHRcdFx0dmFyIGVsbSwgZG9jLCBkb2NFbG07XG5cdFx0XHR2YXIgeCA9IDAsIHkgPSAwLCBwb3M7XG5cblx0XHRcdGlmICghb2Zmc2V0KSB7XG5cdFx0XHRcdGVsbSA9IHRoaXNbMF07XG5cblx0XHRcdFx0aWYgKGVsbSkge1xuXHRcdFx0XHRcdGRvYyA9IGVsbS5vd25lckRvY3VtZW50O1xuXHRcdFx0XHRcdGRvY0VsbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHRpZiAoZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkge1xuXHRcdFx0XHRcdFx0cG9zID0gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRcdFx0eCA9IHBvcy5sZWZ0ICsgKGRvY0VsbS5zY3JvbGxMZWZ0IHx8IGRvYy5ib2R5LnNjcm9sbExlZnQpIC0gZG9jRWxtLmNsaWVudExlZnQ7XG5cdFx0XHRcdFx0XHR5ID0gcG9zLnRvcCArIChkb2NFbG0uc2Nyb2xsVG9wIHx8IGRvYy5ib2R5LnNjcm9sbFRvcCkgLSBkb2NFbG0uY2xpZW50VG9wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bGVmdDogeCxcblx0XHRcdFx0XHR0b3A6IHlcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuY3NzKG9mZnNldCk7XG5cdFx0fSxcblxuXHRcdHB1c2g6IHB1c2gsXG5cdFx0c29ydDogW10uc29ydCxcblx0XHRzcGxpY2U6IFtdLnNwbGljZVxuXHR9O1xuXG5cdC8vIFN0YXRpYyBtZW1iZXJzXG5cdFRvb2xzLmV4dGVuZChEb21RdWVyeSwge1xuXHRcdC8qKlxuXHRcdCAqIEV4dGVuZHMgdGhlIHNwZWNpZmllZCBvYmplY3Qgd2l0aCBvbmUgb3IgbW9yZSBvYmplY3RzLlxuXHRcdCAqXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEBtZXRob2QgZXh0ZW5kXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBUYXJnZXQgb2JqZWN0IHRvIGV4dGVuZCB3aXRoIG5ldyBpdGVtcy5cblx0XHQgKiBAcGFyYW0ge09iamVjdC4ufSBvYmplY3QgT2JqZWN0IHRvIGV4dGVuZCB0aGUgdGFyZ2V0IHdpdGguXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBFeHRlbmRlZCBpbnB1dCBvYmplY3QuXG5cdFx0ICovXG5cdFx0ZXh0ZW5kOiBUb29scy5leHRlbmQsXG5cblx0XHQvKipcblx0XHQgKiBDcmVhdGVzIGFuIGFycmF5IG91dCBvZiBhbiBhcnJheSBsaWtlIG9iamVjdC5cblx0XHQgKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAbWV0aG9kIG1ha2VBcnJheVxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgT2JqZWN0IHRvIGNvbnZlcnQgdG8gYXJyYXkuXG5cdFx0ICogQHJldHVybiB7QXJyYXl9IEFycmF5IHByb2R1Y2VkIGZyb20gb2JqZWN0LlxuXHRcdCAqL1xuXHRcdG1ha2VBcnJheTogZnVuY3Rpb24ob2JqZWN0KSB7XG5cdFx0XHRpZiAoaXNXaW5kb3cob2JqZWN0KSB8fCBvYmplY3Qubm9kZVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIFtvYmplY3RdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gVG9vbHMudG9BcnJheShvYmplY3QpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgc3BlY2lmaWVkIGl0ZW0gaW5zaWRlIHRoZSBhcnJheS5cblx0XHQgKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAbWV0aG9kIGluQXJyYXlcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBJdGVtIHRvIGxvb2sgZm9yLlxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IEFycmF5IHRvIGxvb2sgZm9yIGl0ZW0gaW4uXG5cdFx0ICogQHJldHVybiB7TnVtYmVyfSBJbmRleCBvZiB0aGUgaXRlbSBvciAtMS5cblx0XHQgKi9cblx0XHRpbkFycmF5OiBpbkFycmF5LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGFuIGFycmF5IG9yIG5vdC5cblx0XHQgKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAbWV0aG9kIGlzQXJyYXlcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gYXJyYXkgT2JqZWN0IHRvIGNoZWNrIGlmIGl0J3MgYW4gYXJyYXkgb3Igbm90LlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUvZmFsc2UgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheS5cblx0XHQgKi9cblx0XHRpc0FycmF5OiBUb29scy5pc0FycmF5LFxuXG5cdFx0LyoqXG5cdFx0ICogRXhlY3V0ZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0gaW4gYXJyYXkvb2JqZWN0LiBJZiB5b3UgcmV0dXJuIGZhbHNlIGluIHRoZVxuXHRcdCAqIGNhbGxiYWNrIGl0IHdpbGwgYnJlYWsgdGhlIGxvb3AuXG5cdFx0ICpcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQG1ldGhvZCBlYWNoXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gaXRlcmF0ZS5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGZvciBlYWNoIGl0ZW0uXG5cdFx0ICovXG5cdFx0ZWFjaDogZWFjaCxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAbWV0aG9kIHRyaW1cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyIFN0cmluZyB0byByZW1vdmUgd2hpdGVzcGFjZSBmcm9tLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gTmV3IHN0cmluZyB3aXRoIHJlbW92ZWQgd2hpdGVzcGFjZS5cblx0XHQgKi9cblx0XHR0cmltOiB0cmltLFxuXG5cdFx0LyoqXG5cdFx0ICogRmlsdGVycyBvdXQgaXRlbXMgZnJvbSB0aGUgaW5wdXQgYXJyYXkgYnkgY2FsbGluZyB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG5cdFx0ICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgdGhlIGl0ZW0gd2lsbCBiZSBleGNsdWRlZCBpZiBpdCByZXR1cm5zIHRydWUgaXQgd2lsbCBiZSBpbmNsdWRlZC5cblx0XHQgKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAbWV0aG9kIGdyZXBcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBBcnJheSBvZiBpdGVtcyB0byBsb29wIHRob3VnaC5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGl0ZW0uIEluY2x1ZGUvZXhjbHVkZSBkZXBlbmRzIG9uIGl0J3MgcmV0dXJuIHZhbHVlLlxuXHRcdCAqIEByZXR1cm4ge0FycmF5fSBOZXcgYXJyYXkgd2l0aCB2YWx1ZXMgaW1wb3J0ZWQgYW5kIGZpbHRlcmVkIGJhc2VkIGluIGlucHV0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gRmlsdGVyIG91dCBzb21lIGl0ZW1zLCB0aGlzIHdpbGwgcmV0dXJuIGFuIGFycmF5IHdpdGggNCBhbmQgNVxuXHRcdCAqIHZhciBpdGVtcyA9IERvbVF1ZXJ5LmdyZXAoWzEsIDIsIDMsIDQsIDVdLCBmdW5jdGlvbih2KSB7cmV0dXJuIHYgPiAzO30pO1xuXHRcdCAqL1xuXHRcdGdyZXA6IGdyZXAsXG5cblx0XHQvLyBTaXp6bGVcblx0XHRmaW5kOiBTaXp6bGUsXG5cdFx0ZXhwcjogU2l6emxlLnNlbGVjdG9ycyxcblx0XHR1bmlxdWU6IFNpenpsZS51bmlxdWVTb3J0LFxuXHRcdHRleHQ6IFNpenpsZS5nZXRUZXh0LFxuXHRcdGNvbnRhaW5zOiBTaXp6bGUuY29udGFpbnMsXG5cdFx0ZmlsdGVyOiBmdW5jdGlvbihleHByLCBlbGVtcywgbm90KSB7XG5cdFx0XHR2YXIgaSA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKG5vdCkge1xuXHRcdFx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdGlmIChlbGVtc1tpXS5ub2RlVHlwZSAhPSAxKSB7XG5cdFx0XHRcdFx0ZWxlbXMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbGVtcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0ZWxlbXMgPSBEb21RdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvcihlbGVtc1swXSwgZXhwcikgPyBbZWxlbXNbMF1dIDogW107XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtcyA9IERvbVF1ZXJ5LmZpbmQubWF0Y2hlcyhleHByLCBlbGVtcyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtcztcblx0XHR9XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIGRpcihlbCwgcHJvcCwgdW50aWwpIHtcblx0XHR2YXIgbWF0Y2hlZCA9IFtdLCBjdXIgPSBlbFtwcm9wXTtcblxuXHRcdGlmICh0eXBlb2YgdW50aWwgIT0gJ3N0cmluZycgJiYgdW50aWwgaW5zdGFuY2VvZiBEb21RdWVyeSkge1xuXHRcdFx0dW50aWwgPSB1bnRpbFswXTtcblx0XHR9XG5cblx0XHR3aGlsZSAoY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gOSkge1xuXHRcdFx0aWYgKHVudGlsICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKGN1ciA9PT0gdW50aWwpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgdW50aWwgPT0gJ3N0cmluZycgJiYgRG9tUXVlcnkoY3VyKS5pcyh1bnRpbCkpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VyLm5vZGVUeXBlID09PSAxKSB7XG5cdFx0XHRcdG1hdGNoZWQucHVzaChjdXIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXIgPSBjdXJbcHJvcF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZWQ7XG5cdH1cblxuXHRmdW5jdGlvbiBzaWJsaW5nKG5vZGUsIHNpYmxpbmdOYW1lLCBub2RlVHlwZSwgdW50aWwpIHtcblx0XHR2YXIgcmVzdWx0ID0gW107XG5cblx0XHRpZiAodW50aWwgaW5zdGFuY2VvZiBEb21RdWVyeSkge1xuXHRcdFx0dW50aWwgPSB1bnRpbFswXTtcblx0XHR9XG5cblx0XHRmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGVbc2libGluZ05hbWVdKSB7XG5cdFx0XHRpZiAobm9kZVR5cGUgJiYgbm9kZS5ub2RlVHlwZSAhPT0gbm9kZVR5cGUpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh1bnRpbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChub2RlID09PSB1bnRpbCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiB1bnRpbCA9PSAnc3RyaW5nJyAmJiBEb21RdWVyeShub2RlKS5pcyh1bnRpbCkpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQucHVzaChub2RlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZnVuY3Rpb24gZmlyc3RTaWJsaW5nKG5vZGUsIHNpYmxpbmdOYW1lLCBub2RlVHlwZSkge1xuXHRcdGZvciAobm9kZSA9IG5vZGVbc2libGluZ05hbWVdOyBub2RlOyBub2RlID0gbm9kZVtzaWJsaW5nTmFtZV0pIHtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IG5vZGVUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZWFjaCh7XG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIHdpdGggdGhlIHBhcmVudCBvZiBlYWNoIGl0ZW0gaW4gY3VycmVudCBjb2xsZWN0aW9uIG1hdGNoaW5nIHRoZSBvcHRpb25hbCBzZWxlY3Rvci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcGFyZW50XG5cdFx0ICogQHBhcmFtIHtFbGVtZW50L3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBub2RlIE5vZGUgdG8gbWF0Y2ggcGFyZW50cyBhZ2FpbnN0LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBOZXcgRG9tUXVlcnkgaW5zdGFuY2Ugd2l0aCBhbGwgbWF0Y2hpbmcgcGFyZW50cy5cblx0XHQgKi9cblx0XHRwYXJlbnQ6IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cblx0XHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSBuZXcgY29sbGVjdGlvbiB3aXRoIHRoZSBhbGwgdGhlIHBhcmVudHMgb2YgZWFjaCBpdGVtIGluIGN1cnJlbnQgY29sbGVjdGlvbiBtYXRjaGluZyB0aGUgb3B0aW9uYWwgc2VsZWN0b3IuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBhcmVudHNcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnQvdGlueW1jZS5kb20uRG9tUXVlcnl9IG5vZGUgTm9kZSB0byBtYXRjaCBwYXJlbnRzIGFnYWluc3QuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IE5ldyBEb21RdWVyeSBpbnN0YW5jZSB3aXRoIGFsbCBtYXRjaGluZyBwYXJlbnRzLlxuXHRcdCAqL1xuXHRcdHBhcmVudHM6IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdHJldHVybiBkaXIobm9kZSwgXCJwYXJlbnROb2RlXCIpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCBuZXh0IHNpYmxpbmcgb2YgZWFjaCBpdGVtIGluIGN1cnJlbnQgY29sbGVjdGlvbiBtYXRjaGluZyB0aGUgb3B0aW9uYWwgc2VsZWN0b3IuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG5leHRcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnQvdGlueW1jZS5kb20uRG9tUXVlcnl9IG5vZGUgTm9kZSB0byBtYXRjaCB0aGUgbmV4dCBlbGVtZW50IGFnYWluc3QuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IE5ldyBEb21RdWVyeSBpbnN0YW5jZSB3aXRoIGFsbCBtYXRjaGluZyBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRuZXh0OiBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRyZXR1cm4gZmlyc3RTaWJsaW5nKG5vZGUsICduZXh0U2libGluZycsIDEpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCBwcmV2aW91cyBzaWJsaW5nIG9mIGVhY2ggaXRlbSBpbiBjdXJyZW50IGNvbGxlY3Rpb24gbWF0Y2hpbmcgdGhlIG9wdGlvbmFsIHNlbGVjdG9yLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwcmV2XG5cdFx0ICogQHBhcmFtIHtFbGVtZW50L3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBub2RlIE5vZGUgdG8gbWF0Y2ggdGhlIHByZXZpb3VzIGVsZW1lbnQgYWdhaW5zdC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeX0gTmV3IERvbVF1ZXJ5IGluc3RhbmNlIHdpdGggYWxsIG1hdGNoaW5nIGVsZW1lbnRzLlxuXHRcdCAqL1xuXHRcdHByZXY6IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdHJldHVybiBmaXJzdFNpYmxpbmcobm9kZSwgJ3ByZXZpb3VzU2libGluZycsIDEpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGFsbCBjaGlsZCBlbGVtZW50cyBtYXRjaGluZyB0aGUgb3B0aW9uYWwgc2VsZWN0b3IuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNoaWxkcmVuXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50L3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBub2RlIE5vZGUgdG8gbWF0Y2ggdGhlIGVsZW1lbnRzIGFnYWluc3QuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IE5ldyBEb21RdWVyeSBpbnN0YW5jZSB3aXRoIGFsbCBtYXRjaGluZyBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRjaGlsZHJlbjogZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmcobm9kZS5maXJzdENoaWxkLCAnbmV4dFNpYmxpbmcnLCAxKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhbGwgY2hpbGQgbm9kZXMgbWF0Y2hpbmcgdGhlIG9wdGlvbmFsIHNlbGVjdG9yLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjb250ZW50c1xuXHRcdCAqIEBwYXJhbSB7RWxlbWVudC90aW55bWNlLmRvbS5Eb21RdWVyeX0gbm9kZSBOb2RlIHRvIGdldCB0aGUgY29udGVudHMgb2YuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IE5ldyBEb21RdWVyeSBpbnN0YW5jZSB3aXRoIGFsbCBtYXRjaGluZyBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRjb250ZW50czogZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0cmV0dXJuIFRvb2xzLnRvQXJyYXkoKG5vZGUubm9kZU5hbWUgPT09IFwiaWZyYW1lXCIgPyBub2RlLmNvbnRlbnREb2N1bWVudCB8fCBub2RlLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOiBub2RlKS5jaGlsZE5vZGVzKTtcblx0XHR9XG5cdH0sIGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG5cdFx0RG9tUXVlcnkuZm5bbmFtZV0gPSBmdW5jdGlvbihzZWxlY3Rvcikge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCByZXN1bHQgPSBbXTtcblxuXHRcdFx0c2VsZi5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgbm9kZXMgPSBmbi5jYWxsKHJlc3VsdCwgdGhpcywgc2VsZWN0b3IsIHJlc3VsdCk7XG5cblx0XHRcdFx0aWYgKG5vZGVzKSB7XG5cdFx0XHRcdFx0aWYgKERvbVF1ZXJ5LmlzQXJyYXkobm9kZXMpKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaC5hcHBseShyZXN1bHQsIG5vZGVzKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobm9kZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIElmIHRyYXZlcnNpbmcgb24gbXVsdGlwbGUgZWxlbWVudHMgd2UgbWlnaHQgZ2V0IHRoZSBzYW1lIGVsZW1lbnRzIHR3aWNlXG5cdFx0XHRpZiAodGhpcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGlmICghc2tpcFVuaXF1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBEb21RdWVyeS51bmlxdWUocmVzdWx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChuYW1lLmluZGV4T2YoJ3BhcmVudHMnKSA9PT0gMCkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXZlcnNlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0ID0gRG9tUXVlcnkocmVzdWx0KTtcblxuXHRcdFx0aWYgKHNlbGVjdG9yKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuZmlsdGVyKHNlbGVjdG9yKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9O1xuXHR9KTtcblxuXHRlYWNoKHtcblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCB0aGUgYWxsIHRoZSBwYXJlbnRzIHVudGlsIHRoZSBtYXRjaGluZyBzZWxlY3Rvci9lbGVtZW50XG5cdFx0ICogb2YgZWFjaCBpdGVtIGluIGN1cnJlbnQgY29sbGVjdGlvbiBtYXRjaGluZyB0aGUgb3B0aW9uYWwgc2VsZWN0b3IuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBhcmVudHNVbnRpbFxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudC90aW55bWNlLmRvbS5Eb21RdWVyeX0gbm9kZSBOb2RlIHRvIGZpbmQgcGFyZW50IG9mLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvdGlueW1jZS5kb20uRG9tUXVlcnl9IHVudGlsIFVudGlsIHRoZSBtYXRjaGluZyBzZWxlY3RvciBvciBlbGVtZW50LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBOZXcgRG9tUXVlcnkgaW5zdGFuY2Ugd2l0aCBhbGwgbWF0Y2hpbmcgcGFyZW50cy5cblx0XHQgKi9cblx0XHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKG5vZGUsIHVudGlsKSB7XG5cdFx0XHRyZXR1cm4gZGlyKG5vZGUsIFwicGFyZW50Tm9kZVwiLCB1bnRpbCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSBuZXcgY29sbGVjdGlvbiB3aXRoIGFsbCBuZXh0IHNpYmxpbmdzIG9mIGVhY2ggaXRlbSBpbiBjdXJyZW50IGNvbGxlY3Rpb24gbWF0Y2hpbmcgdGhlIG9wdGlvbmFsIHNlbGVjdG9yLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBuZXh0VW50aWxcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnQvdGlueW1jZS5kb20uRG9tUXVlcnl9IG5vZGUgTm9kZSB0byBmaW5kIG5leHQgc2libGluZ3Mgb24uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudC90aW55bWNlLmRvbS5Eb21RdWVyeX0gdW50aWwgVW50aWwgdGhlIG1hdGNoaW5nIHNlbGVjdG9yIG9yIGVsZW1lbnQuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kb20uRG9tUXVlcnl9IE5ldyBEb21RdWVyeSBpbnN0YW5jZSB3aXRoIGFsbCBtYXRjaGluZyBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRuZXh0VW50aWw6IGZ1bmN0aW9uKG5vZGUsIHVudGlsKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZyhub2RlLCAnbmV4dFNpYmxpbmcnLCAxLCB1bnRpbCkuc2xpY2UoMSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSBuZXcgY29sbGVjdGlvbiB3aXRoIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBlYWNoIGl0ZW0gaW4gY3VycmVudCBjb2xsZWN0aW9uIG1hdGNoaW5nIHRoZSBvcHRpb25hbCBzZWxlY3Rvci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcHJldlVudGlsXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50L3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSBub2RlIE5vZGUgdG8gZmluZCBwcmV2aW91cyBzaWJsaW5ncyBvbi5cblx0XHQgKiBAcGFyYW0ge1N0cmluZy9FbGVtZW50L3RpbnltY2UuZG9tLkRvbVF1ZXJ5fSB1bnRpbCBVbnRpbCB0aGUgbWF0Y2hpbmcgc2VsZWN0b3Igb3IgZWxlbWVudC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRvbS5Eb21RdWVyeX0gTmV3IERvbVF1ZXJ5IGluc3RhbmNlIHdpdGggYWxsIG1hdGNoaW5nIGVsZW1lbnRzLlxuXHRcdCAqL1xuXHRcdHByZXZVbnRpbDogZnVuY3Rpb24obm9kZSwgdW50aWwpIHtcblx0XHRcdHJldHVybiBzaWJsaW5nKG5vZGUsICdwcmV2aW91c1NpYmxpbmcnLCAxLCB1bnRpbCkuc2xpY2UoMSk7XG5cdFx0fVxuXHR9LCBmdW5jdGlvbihuYW1lLCBmbikge1xuXHRcdERvbVF1ZXJ5LmZuW25hbWVdID0gZnVuY3Rpb24oc2VsZWN0b3IsIGZpbHRlcikge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCByZXN1bHQgPSBbXTtcblxuXHRcdFx0c2VsZi5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgbm9kZXMgPSBmbi5jYWxsKHJlc3VsdCwgdGhpcywgc2VsZWN0b3IsIHJlc3VsdCk7XG5cblx0XHRcdFx0aWYgKG5vZGVzKSB7XG5cdFx0XHRcdFx0aWYgKERvbVF1ZXJ5LmlzQXJyYXkobm9kZXMpKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaC5hcHBseShyZXN1bHQsIG5vZGVzKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobm9kZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIElmIHRyYXZlcnNpbmcgb24gbXVsdGlwbGUgZWxlbWVudHMgd2UgbWlnaHQgZ2V0IHRoZSBzYW1lIGVsZW1lbnRzIHR3aWNlXG5cdFx0XHRpZiAodGhpcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdHJlc3VsdCA9IERvbVF1ZXJ5LnVuaXF1ZShyZXN1bHQpO1xuXG5cdFx0XHRcdGlmIChuYW1lLmluZGV4T2YoJ3BhcmVudHMnKSA9PT0gMCB8fCBuYW1lID09PSAncHJldlVudGlsJykge1xuXHRcdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXZlcnNlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0ID0gRG9tUXVlcnkocmVzdWx0KTtcblxuXHRcdFx0aWYgKGZpbHRlcikge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0LmZpbHRlcihmaWx0ZXIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH07XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIGN1cnJlbnQgc2V0IGl0ZW1zIG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxuXHQgKlxuXHQgKiBAbWV0aG9kIGlzXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byBtYXRjaCB0aGUgZWxlbWVudHMgYWdhaW5zdC5cblx0ICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZS9mYWxzZSBpZiB0aGUgY3VycmVudCBzZXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXG5cdCAqL1xuXHREb21RdWVyeS5mbi5pcyA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG5cdFx0cmV0dXJuICEhc2VsZWN0b3IgJiYgdGhpcy5maWx0ZXIoc2VsZWN0b3IpLmxlbmd0aCA+IDA7XG5cdH07XG5cblx0RG9tUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBEb21RdWVyeS5mbjtcblxuXHREb21RdWVyeS5vdmVycmlkZURlZmF1bHRzID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcblx0XHR2YXIgZGVmYXVsdHM7XG5cblx0XHRmdW5jdGlvbiBzdWIoc2VsZWN0b3IsIGNvbnRleHQpIHtcblx0XHRcdGRlZmF1bHRzID0gZGVmYXVsdHMgfHwgY2FsbGJhY2soKTtcblxuXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0c2VsZWN0b3IgPSBkZWZhdWx0cy5lbGVtZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWNvbnRleHQpIHtcblx0XHRcdFx0Y29udGV4dCA9IGRlZmF1bHRzLmNvbnRleHQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgc3ViLmZuLmluaXQoc2VsZWN0b3IsIGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdERvbVF1ZXJ5LmV4dGVuZChzdWIsIHRoaXMpO1xuXG5cdFx0cmV0dXJuIHN1Yjtcblx0fTtcblxuXHRmdW5jdGlvbiBhcHBlbmRIb29rcyh0YXJnZXRIb29rcywgcHJvcCwgaG9va3MpIHtcblx0XHRlYWNoKGhvb2tzLCBmdW5jdGlvbihuYW1lLCBmdW5jKSB7XG5cdFx0XHR0YXJnZXRIb29rc1tuYW1lXSA9IHRhcmdldEhvb2tzW25hbWVdIHx8IHt9O1xuXHRcdFx0dGFyZ2V0SG9va3NbbmFtZV1bcHJvcF0gPSBmdW5jO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKEVudi5pZSAmJiBFbnYuaWUgPCA4KSB7XG5cdFx0YXBwZW5kSG9va3MoYXR0ckhvb2tzLCAnZ2V0Jywge1xuXHRcdFx0bWF4bGVuZ3RoOiBmdW5jdGlvbihlbG0pIHtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxtLm1heExlbmd0aDtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDB4N2ZmZmZmZmYpIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9LFxuXG5cdFx0XHRzaXplOiBmdW5jdGlvbihlbG0pIHtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxtLnNpemU7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAyMCkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH0sXG5cblx0XHRcdCdjbGFzcyc6IGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0XHRyZXR1cm4gZWxtLmNsYXNzTmFtZTtcblx0XHRcdH0sXG5cblx0XHRcdHN0eWxlOiBmdW5jdGlvbihlbG0pIHtcblx0XHRcdFx0dmFyIHZhbHVlID0gZWxtLnN0eWxlLmNzc1RleHQ7XG5cblx0XHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGFwcGVuZEhvb2tzKGF0dHJIb29rcywgJ3NldCcsIHtcblx0XHRcdCdjbGFzcyc6IGZ1bmN0aW9uKGVsbSwgdmFsdWUpIHtcblx0XHRcdFx0ZWxtLmNsYXNzTmFtZSA9IHZhbHVlO1xuXHRcdFx0fSxcblxuXHRcdFx0c3R5bGU6IGZ1bmN0aW9uKGVsbSwgdmFsdWUpIHtcblx0XHRcdFx0ZWxtLnN0eWxlLmNzc1RleHQgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGlmIChFbnYuaWUgJiYgRW52LmllIDwgOSkge1xuXHRcdC8qanNoaW50IHN1Yjp0cnVlICovXG5cdFx0Lyplc2xpbnQgZG90LW5vdGF0aW9uOiAwKi9cblx0XHRjc3NGaXhbJ2Zsb2F0J10gPSAnc3R5bGVGbG9hdCc7XG5cblx0XHRhcHBlbmRIb29rcyhjc3NIb29rcywgJ3NldCcsIHtcblx0XHRcdG9wYWNpdHk6IGZ1bmN0aW9uKGVsbSwgdmFsdWUpIHtcblx0XHRcdFx0dmFyIHN0eWxlID0gZWxtLnN0eWxlO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcblx0XHRcdFx0XHRzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlLnpvb20gPSAxO1xuXHRcdFx0XHRcdHN0eWxlLmZpbHRlciA9ICdhbHBoYShvcGFjaXR5PScgKyAodmFsdWUgKiAxMDApICsgJyknO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHREb21RdWVyeS5hdHRySG9va3MgPSBhdHRySG9va3M7XG5cdERvbVF1ZXJ5LmNzc0hvb2tzID0gY3NzSG9va3M7XG5cblx0cmV0dXJuIERvbVF1ZXJ5O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9odG1sL1N0eWxlcy5qc1xuXG4vKipcbiAqIFN0eWxlcy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBwYXJzZSBDU1Mgc3R5bGVzIGl0IGFsc28gY29tcHJlc3NlcyBzdHlsZXMgdG8gcmVkdWNlIHRoZSBvdXRwdXQgc2l6ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIFN0eWxlcyA9IG5ldyB0aW55bWNlLmh0bWwuU3R5bGVzKHtcbiAqICAgIHVybF9jb252ZXJ0ZXI6IGZ1bmN0aW9uKHVybCkge1xuICogICAgICAgcmV0dXJuIHVybDtcbiAqICAgIH1cbiAqIH0pO1xuICpcbiAqIHN0eWxlcyA9IFN0eWxlcy5wYXJzZSgnYm9yZGVyOiAxcHggc29saWQgcmVkJyk7XG4gKiBzdHlsZXMuY29sb3IgPSAncmVkJztcbiAqXG4gKiBjb25zb2xlLmxvZyhuZXcgdGlueW1jZS5odG1sLlN0eWxlU2VyaWFsaXplcigpLnNlcmlhbGl6ZShzdHlsZXMpKTtcbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5odG1sLlN0eWxlc1xuICogQHZlcnNpb24gMy40XG4gKi9cbmRlZmluZShcInRpbnltY2UvaHRtbC9TdHlsZXNcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gZnVuY3Rpb24oc2V0dGluZ3MsIHNjaGVtYSkge1xuXHRcdC8qanNoaW50IG1heGxlbjoyNTUgKi9cblx0XHQvKmVzbGludCBtYXgtbGVuOjAgKi9cblx0XHR2YXIgcmdiUmVnRXhwID0gL3JnYlxccypcXChcXHMqKFswLTldKylcXHMqLFxccyooWzAtOV0rKVxccyosXFxzKihbMC05XSspXFxzKlxcKS9naSxcblx0XHRcdHVybE9yU3RyUmVnRXhwID0gLyg/OnVybCg/Oig/OlxcKFxccypcXFwiKFteXFxcIl0rKVxcXCJcXHMqXFwpKXwoPzpcXChcXHMqXFwnKFteXFwnXSspXFwnXFxzKlxcKSl8KD86XFwoXFxzKihbXilcXHNdKylcXHMqXFwpKSkpfCg/OlxcJyhbXlxcJ10rKVxcJyl8KD86XFxcIihbXlxcXCJdKylcXFwiKS9naSxcblx0XHRcdHN0eWxlUmVnRXhwID0gL1xccyooW146XSspOlxccyooW147XSspOz8vZyxcblx0XHRcdHRyaW1SaWdodFJlZ0V4cCA9IC9cXHMrJC8sXG5cdFx0XHRpLCBlbmNvZGluZ0xvb2t1cCA9IHt9LCBlbmNvZGluZ0l0ZW1zLCB2YWxpZFN0eWxlcywgaW52YWxpZFN0eWxlcywgaW52aXNpYmxlQ2hhciA9ICdcXHVGRUZGJztcblxuXHRcdHNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XG5cblx0XHRpZiAoc2NoZW1hKSB7XG5cdFx0XHR2YWxpZFN0eWxlcyA9IHNjaGVtYS5nZXRWYWxpZFN0eWxlcygpO1xuXHRcdFx0aW52YWxpZFN0eWxlcyA9IHNjaGVtYS5nZXRJbnZhbGlkU3R5bGVzKCk7XG5cdFx0fVxuXG5cdFx0ZW5jb2RpbmdJdGVtcyA9ICgnXFxcXFwiIFxcXFxcXCcgXFxcXDsgXFxcXDogOyA6ICcgKyBpbnZpc2libGVDaGFyKS5zcGxpdCgnICcpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBlbmNvZGluZ0l0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRlbmNvZGluZ0xvb2t1cFtlbmNvZGluZ0l0ZW1zW2ldXSA9IGludmlzaWJsZUNoYXIgKyBpO1xuXHRcdFx0ZW5jb2RpbmdMb29rdXBbaW52aXNpYmxlQ2hhciArIGldID0gZW5jb2RpbmdJdGVtc1tpXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB0b0hleChtYXRjaCwgciwgZywgYikge1xuXHRcdFx0ZnVuY3Rpb24gaGV4KHZhbCkge1xuXHRcdFx0XHR2YWwgPSBwYXJzZUludCh2YWwsIDEwKS50b1N0cmluZygxNik7XG5cblx0XHRcdFx0cmV0dXJuIHZhbC5sZW5ndGggPiAxID8gdmFsIDogJzAnICsgdmFsOyAvLyAwIC0+IDAwXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAnIycgKyBoZXgocikgKyBoZXgoZykgKyBoZXgoYik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogUGFyc2VzIHRoZSBzcGVjaWZpZWQgUkdCIGNvbG9yIHZhbHVlIGFuZCByZXR1cm5zIGEgaGV4IHZlcnNpb24gb2YgdGhhdCBjb2xvci5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIHRvSGV4XG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY29sb3IgUkdCIHN0cmluZyB2YWx1ZSBsaWtlIHJnYigxLDIsMylcblx0XHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSGV4IHZlcnNpb24gb2YgdGhhdCBSR0IgdmFsdWUgbGlrZSAjRkYwMEZGLlxuXHRcdFx0ICovXG5cdFx0XHR0b0hleDogZnVuY3Rpb24oY29sb3IpIHtcblx0XHRcdFx0cmV0dXJuIGNvbG9yLnJlcGxhY2UocmdiUmVnRXhwLCB0b0hleCk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFBhcnNlcyB0aGUgc3BlY2lmaWVkIHN0eWxlIHZhbHVlIGludG8gYW4gb2JqZWN0IGNvbGxlY3Rpb24uIFRoaXMgcGFyc2VyIHdpbGwgYWxzb1xuXHRcdFx0ICogbWVyZ2UgYW5kIHJlbW92ZSBhbnkgcmVkdW5kYW50IGl0ZW1zIHRoYXQgYnJvd3NlcnMgbWlnaHQgaGF2ZSBhZGRlZC4gSXQgd2lsbCBhbHNvIGNvbnZlcnQgbm9uIGhleFxuXHRcdFx0ICogY29sb3JzIHRvIGhleCB2YWx1ZXMuIFVybHMgaW5zaWRlIHRoZSBzdHlsZXMgd2lsbCBhbHNvIGJlIGNvbnZlcnRlZCB0byBhYnNvbHV0ZS9yZWxhdGl2ZSBiYXNlZCBvbiBzZXR0aW5ncy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIHBhcnNlXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY3NzIFN0eWxlIHZhbHVlIHRvIHBhcnNlIGZvciBleGFtcGxlOiBib3JkZXI6MXB4IHNvbGlkIHJlZDsuXG5cdFx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IE9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGF0IHN0eWxlIGxpa2Uge2JvcmRlcjogJzFweCBzb2xpZCByZWQnfVxuXHRcdFx0ICovXG5cdFx0XHRwYXJzZTogZnVuY3Rpb24oY3NzKSB7XG5cdFx0XHRcdHZhciBzdHlsZXMgPSB7fSwgbWF0Y2hlcywgbmFtZSwgdmFsdWUsIGlzRW5jb2RlZCwgdXJsQ29udmVydGVyID0gc2V0dGluZ3MudXJsX2NvbnZlcnRlcjtcblx0XHRcdFx0dmFyIHVybENvbnZlcnRlclNjb3BlID0gc2V0dGluZ3MudXJsX2NvbnZlcnRlcl9zY29wZSB8fCB0aGlzO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIGNvbXByZXNzKHByZWZpeCwgc3VmZml4LCBub0pvaW4pIHtcblx0XHRcdFx0XHR2YXIgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0O1xuXG5cdFx0XHRcdFx0dG9wID0gc3R5bGVzW3ByZWZpeCArICctdG9wJyArIHN1ZmZpeF07XG5cdFx0XHRcdFx0aWYgKCF0b3ApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyaWdodCA9IHN0eWxlc1twcmVmaXggKyAnLXJpZ2h0JyArIHN1ZmZpeF07XG5cdFx0XHRcdFx0aWYgKCFyaWdodCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJvdHRvbSA9IHN0eWxlc1twcmVmaXggKyAnLWJvdHRvbScgKyBzdWZmaXhdO1xuXHRcdFx0XHRcdGlmICghYm90dG9tKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bGVmdCA9IHN0eWxlc1twcmVmaXggKyAnLWxlZnQnICsgc3VmZml4XTtcblx0XHRcdFx0XHRpZiAoIWxlZnQpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgYm94ID0gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF07XG5cdFx0XHRcdFx0aSA9IGJveC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRcdGlmIChib3hbaV0gIT09IGJveFtpICsgMV0pIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGkgPiAtMSAmJiBub0pvaW4pIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdHlsZXNbcHJlZml4ICsgc3VmZml4XSA9IGkgPT0gLTEgPyBib3hbMF0gOiBib3guam9pbignICcpO1xuXHRcdFx0XHRcdGRlbGV0ZSBzdHlsZXNbcHJlZml4ICsgJy10b3AnICsgc3VmZml4XTtcblx0XHRcdFx0XHRkZWxldGUgc3R5bGVzW3ByZWZpeCArICctcmlnaHQnICsgc3VmZml4XTtcblx0XHRcdFx0XHRkZWxldGUgc3R5bGVzW3ByZWZpeCArICctYm90dG9tJyArIHN1ZmZpeF07XG5cdFx0XHRcdFx0ZGVsZXRlIHN0eWxlc1twcmVmaXggKyAnLWxlZnQnICsgc3VmZml4XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmljIHN0eWxlIGNhbiBiZSBjb21wcmVzc2VkIGluIG90aGVyIHdvcmRzIGlmIGFsbCBib3JkZXItd2lkdGggYXJlIGVxdWFsLlxuXHRcdFx0XHQgKi9cblx0XHRcdFx0ZnVuY3Rpb24gY2FuQ29tcHJlc3Moa2V5KSB7XG5cdFx0XHRcdFx0dmFyIHZhbHVlID0gc3R5bGVzW2tleV0sIGk7XG5cblx0XHRcdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpO1xuXHRcdFx0XHRcdGkgPSB2YWx1ZS5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0aWYgKHZhbHVlW2ldICE9PSB2YWx1ZVswXSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c3R5bGVzW2tleV0gPSB2YWx1ZVswXTtcblxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIENvbXByZXNzZXMgbXVsdGlwbGUgc3R5bGVzIGludG8gb25lIHN0eWxlLlxuXHRcdFx0XHQgKi9cblx0XHRcdFx0ZnVuY3Rpb24gY29tcHJlc3MyKHRhcmdldCwgYSwgYiwgYykge1xuXHRcdFx0XHRcdGlmICghY2FuQ29tcHJlc3MoYSkpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIWNhbkNvbXByZXNzKGIpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFjYW5Db21wcmVzcyhjKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENvbXByZXNzXG5cdFx0XHRcdFx0c3R5bGVzW3RhcmdldF0gPSBzdHlsZXNbYV0gKyAnICcgKyBzdHlsZXNbYl0gKyAnICcgKyBzdHlsZXNbY107XG5cdFx0XHRcdFx0ZGVsZXRlIHN0eWxlc1thXTtcblx0XHRcdFx0XHRkZWxldGUgc3R5bGVzW2JdO1xuXHRcdFx0XHRcdGRlbGV0ZSBzdHlsZXNbY107XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgXFxcIiBcXCcgOyA6IHdpdGggXzxudW0+XG5cdFx0XHRcdGZ1bmN0aW9uIGVuY29kZShzdHIpIHtcblx0XHRcdFx0XHRpc0VuY29kZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGVuY29kaW5nTG9va3VwW3N0cl07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBEZWNvZGVzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgXzxudW0+IHdpdGggaXQncyBvcmlnaW5hbCB2YWx1ZSBcXFwiIFxcJyBldGNcblx0XHRcdFx0Ly8gSXQgd2lsbCBhbHNvIGRlY29kZSB0aGUgXFxcIiBcXCcgaWYga2VlcF9zbGFzaGVzIGlzIHNldCB0byBmYWxlIG9yIG9taXR0ZWRcblx0XHRcdFx0ZnVuY3Rpb24gZGVjb2RlKHN0ciwga2VlcF9zbGFzaGVzKSB7XG5cdFx0XHRcdFx0aWYgKGlzRW5jb2RlZCkge1xuXHRcdFx0XHRcdFx0c3RyID0gc3RyLnJlcGxhY2UoL1xcdUZFRkZbMC05XS9nLCBmdW5jdGlvbihzdHIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVuY29kaW5nTG9va3VwW3N0cl07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIWtlZXBfc2xhc2hlcykge1xuXHRcdFx0XHRcdFx0c3RyID0gc3RyLnJlcGxhY2UoL1xcXFwoW1xcJ1xcXCI7Ol0pL2csIFwiJDFcIik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHN0cjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZ1bmN0aW9uIGRlY29kZVNpbmdsZUhleFNlcXVlbmNlKGVzY1NlcSkge1xuXHRcdFx0XHRcdHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVzY1NlcS5zbGljZSgxKSwgMTYpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZ1bmN0aW9uIGRlY29kZUhleFNlcXVlbmNlcyh2YWx1ZSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXFxcWzAtOWEtZl0rL2dpLCBkZWNvZGVTaW5nbGVIZXhTZXF1ZW5jZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmdW5jdGlvbiBwcm9jZXNzVXJsKG1hdGNoLCB1cmwsIHVybDIsIHVybDMsIHN0ciwgc3RyMikge1xuXHRcdFx0XHRcdHN0ciA9IHN0ciB8fCBzdHIyO1xuXG5cdFx0XHRcdFx0aWYgKHN0cikge1xuXHRcdFx0XHRcdFx0c3RyID0gZGVjb2RlKHN0cik7XG5cblx0XHRcdFx0XHRcdC8vIEZvcmNlIHN0cmluZ3MgaW50byBzaW5nbGUgcXVvdGUgZm9ybWF0XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCInXCIgKyBzdHIucmVwbGFjZSgvXFwnL2csIFwiXFxcXCdcIikgKyBcIidcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR1cmwgPSBkZWNvZGUodXJsIHx8IHVybDIgfHwgdXJsMyk7XG5cblx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLmFsbG93X3NjcmlwdF91cmxzKSB7XG5cdFx0XHRcdFx0XHR2YXIgc2NyaXB0VXJsID0gdXJsLnJlcGxhY2UoL1tcXHNcXHJcXG5dKy9nLCAnJyk7XG5cblx0XHRcdFx0XHRcdGlmICgvKGphdmF8dmIpc2NyaXB0Oi9pLnRlc3Qoc2NyaXB0VXJsKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKCFzZXR0aW5ncy5hbGxvd19zdmdfZGF0YV91cmxzICYmIC9eZGF0YTppbWFnZVxcL3N2Zy9pLnRlc3Qoc2NyaXB0VXJsKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDb252ZXJ0IHRoZSBVUkwgdG8gcmVsYXRpdmUvYWJzb2x1dGUgZGVwZW5kaW5nIG9uIGNvbmZpZ1xuXHRcdFx0XHRcdGlmICh1cmxDb252ZXJ0ZXIpIHtcblx0XHRcdFx0XHRcdHVybCA9IHVybENvbnZlcnRlci5jYWxsKHVybENvbnZlcnRlclNjb3BlLCB1cmwsICdzdHlsZScpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE91dHB1dCBuZXcgVVJMIGZvcm1hdFxuXHRcdFx0XHRcdHJldHVybiBcInVybCgnXCIgKyB1cmwucmVwbGFjZSgvXFwnL2csIFwiXFxcXCdcIikgKyBcIicpXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY3NzKSB7XG5cdFx0XHRcdFx0Y3NzID0gY3NzLnJlcGxhY2UoL1tcXHUwMDAwLVxcdTAwMUZdL2csICcnKTtcblxuXHRcdFx0XHRcdC8vIEVuY29kZSBcXFwiIFxcJyAlIGFuZCA7IGFuZCA6IGluc2lkZSBzdHJpbmdzIHNvIHRoZXkgZG9uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIHN0eWxlIHBhcnNpbmdcblx0XHRcdFx0XHRjc3MgPSBjc3MucmVwbGFjZSgvXFxcXFtcXFwiXFwnOzpcXHVGRUZGXS9nLCBlbmNvZGUpLnJlcGxhY2UoL1xcXCJbXlxcXCJdK1xcXCJ8XFwnW15cXCddK1xcJy9nLCBmdW5jdGlvbihzdHIpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzdHIucmVwbGFjZSgvWzs6XS9nLCBlbmNvZGUpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gUGFyc2Ugc3R5bGVzXG5cdFx0XHRcdFx0d2hpbGUgKChtYXRjaGVzID0gc3R5bGVSZWdFeHAuZXhlYyhjc3MpKSkge1xuXHRcdFx0XHRcdFx0c3R5bGVSZWdFeHAubGFzdEluZGV4ID0gbWF0Y2hlcy5pbmRleCArIG1hdGNoZXNbMF0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bmFtZSA9IG1hdGNoZXNbMV0ucmVwbGFjZSh0cmltUmlnaHRSZWdFeHAsICcnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBtYXRjaGVzWzJdLnJlcGxhY2UodHJpbVJpZ2h0UmVnRXhwLCAnJyk7XG5cblx0XHRcdFx0XHRcdGlmIChuYW1lICYmIHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdC8vIERlY29kZSBlc2NhcGVkIHNlcXVlbmNlcyBsaWtlIFxcNjUgLT4gZVxuXHRcdFx0XHRcdFx0XHRuYW1lID0gZGVjb2RlSGV4U2VxdWVuY2VzKG5hbWUpO1xuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IGRlY29kZUhleFNlcXVlbmNlcyh2YWx1ZSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2tpcCBwcm9wZXJ0aWVzIHdpdGggZG91YmxlIHF1b3RlcyBhbmQgc2VxdWVuY2VzIGxpa2UgXFxcIiBcXCcgaW4gdGhlaXIgbmFtZXNcblx0XHRcdFx0XHRcdFx0Ly8gU2VlICdtWFNTIEF0dGFja3M6IEF0dGFja2luZyB3ZWxsLXNlY3VyZWQgV2ViLUFwcGxpY2F0aW9ucyBieSB1c2luZyBpbm5lckhUTUwgTXV0YXRpb25zJ1xuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL2N1cmU1My5kZS9mcDE3MC5wZGZcblx0XHRcdFx0XHRcdFx0aWYgKG5hbWUuaW5kZXhPZihpbnZpc2libGVDaGFyKSAhPT0gLTEgfHwgbmFtZS5pbmRleE9mKCdcIicpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgYWxsb3cgYmVoYXZpb3IgbmFtZSBvciBleHByZXNzaW9uL2NvbW1lbnRzIHdpdGhpbiB0aGUgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdGlmICghc2V0dGluZ3MuYWxsb3dfc2NyaXB0X3VybHMgJiYgKG5hbWUgPT0gXCJiZWhhdmlvclwiIHx8IC9leHByZXNzaW9uXFxzKlxcKHxcXC9cXCp8XFwqXFwvLy50ZXN0KHZhbHVlKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIE9wZXJhIHdpbGwgcHJvZHVjZSA3MDAgaW5zdGVhZCBvZiBib2xkIGluIHRoZWlyIHN0eWxlIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRpZiAobmFtZSA9PT0gJ2ZvbnQtd2VpZ2h0JyAmJiB2YWx1ZSA9PT0gJzcwMCcpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9ICdib2xkJztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChuYW1lID09PSAnY29sb3InIHx8IG5hbWUgPT09ICdiYWNrZ3JvdW5kLWNvbG9yJykgeyAvLyBMb3dlcmNhc2UgY29sb3JzIGxpa2UgUkVEXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gQ29udmVydCBSR0IgY29sb3JzIHRvIEhFWFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmdiUmVnRXhwLCB0b0hleCk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQ29udmVydCBVUkxzIGFuZCBmb3JjZSB0aGVtIGludG8gdXJsKCd2YWx1ZScpIGZvcm1hdFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UodXJsT3JTdHJSZWdFeHAsIHByb2Nlc3NVcmwpO1xuXHRcdFx0XHRcdFx0XHRzdHlsZXNbbmFtZV0gPSBpc0VuY29kZWQgPyBkZWNvZGUodmFsdWUsIHRydWUpIDogdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIENvbXByZXNzIHRoZSBzdHlsZXMgdG8gcmVkdWNlIGl0J3Mgc2l6ZSBmb3IgZXhhbXBsZSBJRSB3aWxsIGV4cGFuZCBzdHlsZXNcblx0XHRcdFx0XHRjb21wcmVzcyhcImJvcmRlclwiLCBcIlwiLCB0cnVlKTtcblx0XHRcdFx0XHRjb21wcmVzcyhcImJvcmRlclwiLCBcIi13aWR0aFwiKTtcblx0XHRcdFx0XHRjb21wcmVzcyhcImJvcmRlclwiLCBcIi1jb2xvclwiKTtcblx0XHRcdFx0XHRjb21wcmVzcyhcImJvcmRlclwiLCBcIi1zdHlsZVwiKTtcblx0XHRcdFx0XHRjb21wcmVzcyhcInBhZGRpbmdcIiwgXCJcIik7XG5cdFx0XHRcdFx0Y29tcHJlc3MoXCJtYXJnaW5cIiwgXCJcIik7XG5cdFx0XHRcdFx0Y29tcHJlc3MyKCdib3JkZXInLCAnYm9yZGVyLXdpZHRoJywgJ2JvcmRlci1zdHlsZScsICdib3JkZXItY29sb3InKTtcblxuXHRcdFx0XHRcdC8vIFJlbW92ZSBwb2ludGxlc3MgYm9yZGVyLCBJRSBwcm9kdWNlcyB0aGVzZVxuXHRcdFx0XHRcdGlmIChzdHlsZXMuYm9yZGVyID09PSAnbWVkaXVtIG5vbmUnKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgc3R5bGVzLmJvcmRlcjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJRSAxMSB3aWxsIHByb2R1Y2UgYSBib3JkZXItaW1hZ2U6IG5vbmUgd2hlbiBnZXR0aW5nIHRoZSBzdHlsZSBhdHRyaWJ1dGUgZnJvbSA8cCBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkIHJlZFwiPjwvcD5cblx0XHRcdFx0XHQvLyBTbyBsZXQgdXMgYXNzdW1lIGl0IHNob3VsZG4ndCBiZSB0aGVyZVxuXHRcdFx0XHRcdGlmIChzdHlsZXNbJ2JvcmRlci1pbWFnZSddID09PSAnbm9uZScpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBzdHlsZXNbJ2JvcmRlci1pbWFnZSddO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBzdHlsZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFNlcmlhbGl6ZXMgdGhlIHNwZWNpZmllZCBzdHlsZSBvYmplY3QgaW50byBhIHN0cmluZy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIHNlcmlhbGl6ZVxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IHN0eWxlcyBPYmplY3QgdG8gc2VyaWFsaXplIGFzIHN0cmluZyBmb3IgZXhhbXBsZToge2JvcmRlcjogJzFweCBzb2xpZCByZWQnfVxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IGVsZW1lbnROYW1lIE9wdGlvbmFsIGVsZW1lbnQgbmFtZSwgaWYgc3BlY2lmaWVkIG9ubHkgdGhlIHN0eWxlcyB0aGF0IG1hdGNoZXMgdGhlIHNjaGVtYSB3aWxsIGJlIHNlcmlhbGl6ZWQuXG5cdFx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3R5bGUgb2JqZWN0IGZvciBleGFtcGxlOiBib3JkZXI6IDFweCBzb2xpZCByZWQuXG5cdFx0XHQgKi9cblx0XHRcdHNlcmlhbGl6ZTogZnVuY3Rpb24oc3R5bGVzLCBlbGVtZW50TmFtZSkge1xuXHRcdFx0XHR2YXIgY3NzID0gJycsIG5hbWUsIHZhbHVlO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhuYW1lKSB7XG5cdFx0XHRcdFx0dmFyIHN0eWxlTGlzdCwgaSwgbCwgdmFsdWU7XG5cblx0XHRcdFx0XHRzdHlsZUxpc3QgPSB2YWxpZFN0eWxlc1tuYW1lXTtcblx0XHRcdFx0XHRpZiAoc3R5bGVMaXN0KSB7XG5cdFx0XHRcdFx0XHRmb3IgKGkgPSAwLCBsID0gc3R5bGVMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gc3R5bGVMaXN0W2ldO1xuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHN0eWxlc1tuYW1lXTtcblxuXHRcdFx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRjc3MgKz0gKGNzcy5sZW5ndGggPiAwID8gJyAnIDogJycpICsgbmFtZSArICc6ICcgKyB2YWx1ZSArICc7Jztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZ1bmN0aW9uIGlzVmFsaWQobmFtZSwgZWxlbWVudE5hbWUpIHtcblx0XHRcdFx0XHR2YXIgc3R5bGVNYXA7XG5cblx0XHRcdFx0XHRzdHlsZU1hcCA9IGludmFsaWRTdHlsZXNbJyonXTtcblx0XHRcdFx0XHRpZiAoc3R5bGVNYXAgJiYgc3R5bGVNYXBbbmFtZV0pIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzdHlsZU1hcCA9IGludmFsaWRTdHlsZXNbZWxlbWVudE5hbWVdO1xuXHRcdFx0XHRcdGlmIChzdHlsZU1hcCAmJiBzdHlsZU1hcFtuYW1lXSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2VyaWFsaXplIHN0eWxlcyBhY2NvcmRpbmcgdG8gc2NoZW1hXG5cdFx0XHRcdGlmIChlbGVtZW50TmFtZSAmJiB2YWxpZFN0eWxlcykge1xuXHRcdFx0XHRcdC8vIFNlcmlhbGl6ZSBnbG9iYWwgc3R5bGVzIGFuZCBlbGVtZW50IHNwZWNpZmljIHN0eWxlc1xuXHRcdFx0XHRcdHNlcmlhbGl6ZVN0eWxlcygnKicpO1xuXHRcdFx0XHRcdHNlcmlhbGl6ZVN0eWxlcyhlbGVtZW50TmFtZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gT3V0cHV0IHRoZSBzdHlsZXMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGluc2lkZSB0aGUgb2JqZWN0XG5cdFx0XHRcdFx0Zm9yIChuYW1lIGluIHN0eWxlcykge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBzdHlsZXNbbmFtZV07XG5cblx0XHRcdFx0XHRcdGlmICh2YWx1ZSAmJiAoIWludmFsaWRTdHlsZXMgfHwgaXNWYWxpZChuYW1lLCBlbGVtZW50TmFtZSkpKSB7XG5cdFx0XHRcdFx0XHRcdGNzcyArPSAoY3NzLmxlbmd0aCA+IDAgPyAnICcgOiAnJykgKyBuYW1lICsgJzogJyArIHZhbHVlICsgJzsnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBjc3M7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZG9tL1RyZWVXYWxrZXIuanNcblxuLyoqXG4gKiBUcmVlV2Fsa2VyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVHJlZVdhbGtlciBjbGFzcyBlbmFibGVzIHlvdSB0byB3YWxrIHRoZSBET00gaW4gYSBsaW5lYXIgbWFubmVyLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLmRvbS5UcmVlV2Fsa2VyXG4gKiBAZXhhbXBsZVxuICogdmFyIHdhbGtlciA9IG5ldyB0aW55bWNlLmRvbS5UcmVlV2Fsa2VyKHN0YXJ0Tm9kZSk7XG4gKlxuICogZG8ge1xuICogICAgIGNvbnNvbGUubG9nKHdhbGtlci5jdXJyZW50KCkpO1xuICogfSB3aGlsZSAod2Fsa2VyLm5leHQoKSk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvZG9tL1RyZWVXYWxrZXJcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHQvKipcblx0ICogQ29uc3RydWN0cyBhIG5ldyBUcmVlV2Fsa2VyIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQG1ldGhvZCBUcmVlV2Fsa2VyXG5cdCAqIEBwYXJhbSB7Tm9kZX0gc3RhcnROb2RlIE5vZGUgdG8gc3RhcnQgd2Fsa2luZyBmcm9tLlxuXHQgKiBAcGFyYW0ge25vZGV9IHJvb3ROb2RlIE9wdGlvbmFsIHJvb3Qgbm9kZSB0byBuZXZlciB3YWxrIG91dCBvZi5cblx0ICovXG5cdHJldHVybiBmdW5jdGlvbihzdGFydE5vZGUsIHJvb3ROb2RlKSB7XG5cdFx0dmFyIG5vZGUgPSBzdGFydE5vZGU7XG5cblx0XHRmdW5jdGlvbiBmaW5kU2libGluZyhub2RlLCBzdGFydE5hbWUsIHNpYmxpbmdOYW1lLCBzaGFsbG93KSB7XG5cdFx0XHR2YXIgc2libGluZywgcGFyZW50O1xuXG5cdFx0XHRpZiAobm9kZSkge1xuXHRcdFx0XHQvLyBXYWxrIGludG8gbm9kZXMgaWYgaXQgaGFzIGEgc3RhcnRcblx0XHRcdFx0aWYgKCFzaGFsbG93ICYmIG5vZGVbc3RhcnROYW1lXSkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlW3N0YXJ0TmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gdGhlIHNpYmxpbmcgaWYgaXQgaGFzIG9uZVxuXHRcdFx0XHRpZiAobm9kZSAhPSByb290Tm9kZSkge1xuXHRcdFx0XHRcdHNpYmxpbmcgPSBub2RlW3NpYmxpbmdOYW1lXTtcblx0XHRcdFx0XHRpZiAoc2libGluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpYmxpbmc7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gV2FsayB1cCB0aGUgcGFyZW50cyB0byBsb29rIGZvciBzaWJsaW5nc1xuXHRcdFx0XHRcdGZvciAocGFyZW50ID0gbm9kZS5wYXJlbnROb2RlOyBwYXJlbnQgJiYgcGFyZW50ICE9IHJvb3ROb2RlOyBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZSkge1xuXHRcdFx0XHRcdFx0c2libGluZyA9IHBhcmVudFtzaWJsaW5nTmFtZV07XG5cdFx0XHRcdFx0XHRpZiAoc2libGluZykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2libGluZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmaW5kUHJldmlvdXNOb2RlKG5vZGUsIHN0YXJ0TmFtZSwgc2libGluZ05hbWUsIHNoYWxsb3cpIHtcblx0XHRcdHZhciBzaWJsaW5nLCBwYXJlbnQsIGNoaWxkO1xuXG5cdFx0XHRpZiAobm9kZSkge1xuXHRcdFx0XHRzaWJsaW5nID0gbm9kZVtzaWJsaW5nTmFtZV07XG5cdFx0XHRcdGlmIChyb290Tm9kZSAmJiBzaWJsaW5nID09PSByb290Tm9kZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzaWJsaW5nKSB7XG5cdFx0XHRcdFx0aWYgKCFzaGFsbG93KSB7XG5cdFx0XHRcdFx0XHQvLyBXYWxrIHVwIHRoZSBwYXJlbnRzIHRvIGxvb2sgZm9yIHNpYmxpbmdzXG5cdFx0XHRcdFx0XHRmb3IgKGNoaWxkID0gc2libGluZ1tzdGFydE5hbWVdOyBjaGlsZDsgY2hpbGQgPSBjaGlsZFtzdGFydE5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghY2hpbGRbc3RhcnROYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBjaGlsZDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBzaWJsaW5nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHRpZiAocGFyZW50ICYmIHBhcmVudCAhPT0gcm9vdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyZW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgY3VycmVudCBub2RlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjdXJyZW50XG5cdFx0ICogQHJldHVybiB7Tm9kZX0gQ3VycmVudCBub2RlIHdoZXJlIHRoZSB3YWxrZXIgaXMuXG5cdFx0ICovXG5cdFx0dGhpcy5jdXJyZW50ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogV2Fsa3MgdG8gdGhlIG5leHQgbm9kZSBpbiB0cmVlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBuZXh0XG5cdFx0ICogQHJldHVybiB7Tm9kZX0gQ3VycmVudCBub2RlIHdoZXJlIHRoZSB3YWxrZXIgaXMgYWZ0ZXIgbW92aW5nIHRvIHRoZSBuZXh0IG5vZGUuXG5cdFx0ICovXG5cdFx0dGhpcy5uZXh0ID0gZnVuY3Rpb24oc2hhbGxvdykge1xuXHRcdFx0bm9kZSA9IGZpbmRTaWJsaW5nKG5vZGUsICdmaXJzdENoaWxkJywgJ25leHRTaWJsaW5nJywgc2hhbGxvdyk7XG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogV2Fsa3MgdG8gdGhlIHByZXZpb3VzIG5vZGUgaW4gdHJlZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcHJldlxuXHRcdCAqIEByZXR1cm4ge05vZGV9IEN1cnJlbnQgbm9kZSB3aGVyZSB0aGUgd2Fsa2VyIGlzIGFmdGVyIG1vdmluZyB0byB0aGUgcHJldmlvdXMgbm9kZS5cblx0XHQgKi9cblx0XHR0aGlzLnByZXYgPSBmdW5jdGlvbihzaGFsbG93KSB7XG5cdFx0XHRub2RlID0gZmluZFNpYmxpbmcobm9kZSwgJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCBzaGFsbG93KTtcblx0XHRcdHJldHVybiBub2RlO1xuXHRcdH07XG5cblx0XHR0aGlzLnByZXYyID0gZnVuY3Rpb24oc2hhbGxvdykge1xuXHRcdFx0bm9kZSA9IGZpbmRQcmV2aW91c05vZGUobm9kZSwgJ2xhc3RDaGlsZCcsICdwcmV2aW91c1NpYmxpbmcnLCBzaGFsbG93KTtcblx0XHRcdHJldHVybiBub2RlO1xuXHRcdH07XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2RvbS9SYW5nZS5qc1xuXG4vKipcbiAqIFJhbmdlLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogT2xkIElFIFJhbmdlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5kb20uUmFuZ2VcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kb20vUmFuZ2VcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihUb29scykge1xuXHQvLyBSYW5nZSBjb25zdHJ1Y3RvclxuXHRmdW5jdGlvbiBSYW5nZShkb20pIHtcblx0XHR2YXIgc2VsZiA9IHRoaXMsXG5cdFx0XHRkb2MgPSBkb20uZG9jLFxuXHRcdFx0RVhUUkFDVCA9IDAsXG5cdFx0XHRDTE9ORSA9IDEsXG5cdFx0XHRERUxFVEUgPSAyLFxuXHRcdFx0VFJVRSA9IHRydWUsXG5cdFx0XHRGQUxTRSA9IGZhbHNlLFxuXHRcdFx0U1RBUlRfT0ZGU0VUID0gJ3N0YXJ0T2Zmc2V0Jyxcblx0XHRcdFNUQVJUX0NPTlRBSU5FUiA9ICdzdGFydENvbnRhaW5lcicsXG5cdFx0XHRFTkRfQ09OVEFJTkVSID0gJ2VuZENvbnRhaW5lcicsXG5cdFx0XHRFTkRfT0ZGU0VUID0gJ2VuZE9mZnNldCcsXG5cdFx0XHRleHRlbmQgPSBUb29scy5leHRlbmQsXG5cdFx0XHRub2RlSW5kZXggPSBkb20ubm9kZUluZGV4O1xuXG5cdFx0ZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRcdHJldHVybiBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNldFN0YXJ0KG4sIG8pIHtcblx0XHRcdF9zZXRFbmRQb2ludChUUlVFLCBuLCBvKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzZXRFbmQobiwgbykge1xuXHRcdFx0X3NldEVuZFBvaW50KEZBTFNFLCBuLCBvKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzZXRTdGFydEJlZm9yZShuKSB7XG5cdFx0XHRzZXRTdGFydChuLnBhcmVudE5vZGUsIG5vZGVJbmRleChuKSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2V0U3RhcnRBZnRlcihuKSB7XG5cdFx0XHRzZXRTdGFydChuLnBhcmVudE5vZGUsIG5vZGVJbmRleChuKSArIDEpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNldEVuZEJlZm9yZShuKSB7XG5cdFx0XHRzZXRFbmQobi5wYXJlbnROb2RlLCBub2RlSW5kZXgobikpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNldEVuZEFmdGVyKG4pIHtcblx0XHRcdHNldEVuZChuLnBhcmVudE5vZGUsIG5vZGVJbmRleChuKSArIDEpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNvbGxhcHNlKHRzKSB7XG5cdFx0XHRpZiAodHMpIHtcblx0XHRcdFx0c2VsZltFTkRfQ09OVEFJTkVSXSA9IHNlbGZbU1RBUlRfQ09OVEFJTkVSXTtcblx0XHRcdFx0c2VsZltFTkRfT0ZGU0VUXSA9IHNlbGZbU1RBUlRfT0ZGU0VUXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGZbU1RBUlRfQ09OVEFJTkVSXSA9IHNlbGZbRU5EX0NPTlRBSU5FUl07XG5cdFx0XHRcdHNlbGZbU1RBUlRfT0ZGU0VUXSA9IHNlbGZbRU5EX09GRlNFVF07XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuY29sbGFwc2VkID0gVFJVRTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzZWxlY3ROb2RlKG4pIHtcblx0XHRcdHNldFN0YXJ0QmVmb3JlKG4pO1xuXHRcdFx0c2V0RW5kQWZ0ZXIobik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2VsZWN0Tm9kZUNvbnRlbnRzKG4pIHtcblx0XHRcdHNldFN0YXJ0KG4sIDApO1xuXHRcdFx0c2V0RW5kKG4sIG4ubm9kZVR5cGUgPT09IDEgPyBuLmNoaWxkTm9kZXMubGVuZ3RoIDogbi5ub2RlVmFsdWUubGVuZ3RoKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjb21wYXJlQm91bmRhcnlQb2ludHMoaCwgcikge1xuXHRcdFx0dmFyIHNjID0gc2VsZltTVEFSVF9DT05UQUlORVJdLCBzbyA9IHNlbGZbU1RBUlRfT0ZGU0VUXSwgZWMgPSBzZWxmW0VORF9DT05UQUlORVJdLCBlbyA9IHNlbGZbRU5EX09GRlNFVF0sXG5cdFx0XHRyc2MgPSByLnN0YXJ0Q29udGFpbmVyLCByc28gPSByLnN0YXJ0T2Zmc2V0LCByZWMgPSByLmVuZENvbnRhaW5lciwgcmVvID0gci5lbmRPZmZzZXQ7XG5cblx0XHRcdC8vIENoZWNrIFNUQVJUX1RPX1NUQVJUXG5cdFx0XHRpZiAoaCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gX2NvbXBhcmVCb3VuZGFyeVBvaW50cyhzYywgc28sIHJzYywgcnNvKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgU1RBUlRfVE9fRU5EXG5cdFx0XHRpZiAoaCA9PT0gMSkge1xuXHRcdFx0XHRyZXR1cm4gX2NvbXBhcmVCb3VuZGFyeVBvaW50cyhlYywgZW8sIHJzYywgcnNvKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgRU5EX1RPX0VORFxuXHRcdFx0aWYgKGggPT09IDIpIHtcblx0XHRcdFx0cmV0dXJuIF9jb21wYXJlQm91bmRhcnlQb2ludHMoZWMsIGVvLCByZWMsIHJlbyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIEVORF9UT19TVEFSVFxuXHRcdFx0aWYgKGggPT09IDMpIHtcblx0XHRcdFx0cmV0dXJuIF9jb21wYXJlQm91bmRhcnlQb2ludHMoc2MsIHNvLCByZWMsIHJlbyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZGVsZXRlQ29udGVudHMoKSB7XG5cdFx0XHRfdHJhdmVyc2UoREVMRVRFKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBleHRyYWN0Q29udGVudHMoKSB7XG5cdFx0XHRyZXR1cm4gX3RyYXZlcnNlKEVYVFJBQ1QpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNsb25lQ29udGVudHMoKSB7XG5cdFx0XHRyZXR1cm4gX3RyYXZlcnNlKENMT05FKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpbnNlcnROb2RlKG4pIHtcblx0XHRcdHZhciBzdGFydENvbnRhaW5lciA9IHRoaXNbU1RBUlRfQ09OVEFJTkVSXSxcblx0XHRcdFx0c3RhcnRPZmZzZXQgPSB0aGlzW1NUQVJUX09GRlNFVF0sIG5uLCBvO1xuXG5cdFx0XHQvLyBOb2RlIGlzIFRFWFRfTk9ERSBvciBDREFUQVxuXHRcdFx0aWYgKChzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyB8fCBzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gNCkgJiYgc3RhcnRDb250YWluZXIubm9kZVZhbHVlKSB7XG5cdFx0XHRcdGlmICghc3RhcnRPZmZzZXQpIHtcblx0XHRcdFx0XHQvLyBBdCB0aGUgc3RhcnQgb2YgdGV4dFxuXHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG4sIHN0YXJ0Q29udGFpbmVyKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzdGFydE9mZnNldCA+PSBzdGFydENvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Ly8gQXQgdGhlIGVuZCBvZiB0ZXh0XG5cdFx0XHRcdFx0ZG9tLmluc2VydEFmdGVyKG4sIHN0YXJ0Q29udGFpbmVyKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBNaWRkbGUsIG5lZWQgdG8gc3BsaXRcblx0XHRcdFx0XHRubiA9IHN0YXJ0Q29udGFpbmVyLnNwbGl0VGV4dChzdGFydE9mZnNldCk7XG5cdFx0XHRcdFx0c3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobiwgbm4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnNlcnQgZWxlbWVudCBub2RlXG5cdFx0XHRcdGlmIChzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvID0gc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tzdGFydE9mZnNldF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobykge1xuXHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyLmluc2VydEJlZm9yZShuLCBvKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT0gMykge1xuXHRcdFx0XHRcdFx0ZG9tLmluc2VydEFmdGVyKG4sIHN0YXJ0Q29udGFpbmVyKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3RhcnRDb250YWluZXIuYXBwZW5kQ2hpbGQobik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc3Vycm91bmRDb250ZW50cyhuKSB7XG5cdFx0XHR2YXIgZiA9IHNlbGYuZXh0cmFjdENvbnRlbnRzKCk7XG5cblx0XHRcdHNlbGYuaW5zZXJ0Tm9kZShuKTtcblx0XHRcdG4uYXBwZW5kQ2hpbGQoZik7XG5cdFx0XHRzZWxmLnNlbGVjdE5vZGUobik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY2xvbmVSYW5nZSgpIHtcblx0XHRcdHJldHVybiBleHRlbmQobmV3IFJhbmdlKGRvbSksIHtcblx0XHRcdFx0c3RhcnRDb250YWluZXI6IHNlbGZbU1RBUlRfQ09OVEFJTkVSXSxcblx0XHRcdFx0c3RhcnRPZmZzZXQ6IHNlbGZbU1RBUlRfT0ZGU0VUXSxcblx0XHRcdFx0ZW5kQ29udGFpbmVyOiBzZWxmW0VORF9DT05UQUlORVJdLFxuXHRcdFx0XHRlbmRPZmZzZXQ6IHNlbGZbRU5EX09GRlNFVF0sXG5cdFx0XHRcdGNvbGxhcHNlZDogc2VsZi5jb2xsYXBzZWQsXG5cdFx0XHRcdGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOiBzZWxmLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBQcml2YXRlIG1ldGhvZHNcblxuXHRcdGZ1bmN0aW9uIF9nZXRTZWxlY3RlZE5vZGUoY29udGFpbmVyLCBvZmZzZXQpIHtcblx0XHRcdHZhciBjaGlsZDtcblxuXHRcdFx0Ly8gVEVYVF9OT0RFXG5cdFx0XHRpZiAoY29udGFpbmVyLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRhaW5lcjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9mZnNldCA8IDApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRhaW5lcjtcblx0XHRcdH1cblxuXHRcdFx0Y2hpbGQgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcblx0XHRcdHdoaWxlIChjaGlsZCAmJiBvZmZzZXQgPiAwKSB7XG5cdFx0XHRcdC0tb2Zmc2V0O1xuXHRcdFx0XHRjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2hpbGQpIHtcblx0XHRcdFx0cmV0dXJuIGNoaWxkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udGFpbmVyO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIF9pc0NvbGxhcHNlZCgpIHtcblx0XHRcdHJldHVybiAoc2VsZltTVEFSVF9DT05UQUlORVJdID09IHNlbGZbRU5EX0NPTlRBSU5FUl0gJiYgc2VsZltTVEFSVF9PRkZTRVRdID09IHNlbGZbRU5EX09GRlNFVF0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIF9jb21wYXJlQm91bmRhcnlQb2ludHMoY29udGFpbmVyQSwgb2Zmc2V0QSwgY29udGFpbmVyQiwgb2Zmc2V0Qikge1xuXHRcdFx0dmFyIGMsIG9mZnNldEMsIG4sIGNtblJvb3QsIGNoaWxkQSwgY2hpbGRCO1xuXG5cdFx0XHQvLyBJbiB0aGUgZmlyc3QgY2FzZSB0aGUgYm91bmRhcnktcG9pbnRzIGhhdmUgdGhlIHNhbWUgY29udGFpbmVyLiBBIGlzIGJlZm9yZSBCXG5cdFx0XHQvLyBpZiBpdHMgb2Zmc2V0IGlzIGxlc3MgdGhhbiB0aGUgb2Zmc2V0IG9mIEIsIEEgaXMgZXF1YWwgdG8gQiBpZiBpdHMgb2Zmc2V0IGlzXG5cdFx0XHQvLyBlcXVhbCB0byB0aGUgb2Zmc2V0IG9mIEIsIGFuZCBBIGlzIGFmdGVyIEIgaWYgaXRzIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gdGhlXG5cdFx0XHQvLyBvZmZzZXQgb2YgQi5cblx0XHRcdGlmIChjb250YWluZXJBID09IGNvbnRhaW5lckIpIHtcblx0XHRcdFx0aWYgKG9mZnNldEEgPT0gb2Zmc2V0Qikge1xuXHRcdFx0XHRcdHJldHVybiAwOyAvLyBlcXVhbFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9mZnNldEEgPCBvZmZzZXRCKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xOyAvLyBiZWZvcmVcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAxOyAvLyBhZnRlclxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbiB0aGUgc2Vjb25kIGNhc2UgYSBjaGlsZCBub2RlIEMgb2YgdGhlIGNvbnRhaW5lciBvZiBBIGlzIGFuIGFuY2VzdG9yXG5cdFx0XHQvLyBjb250YWluZXIgb2YgQi4gSW4gdGhpcyBjYXNlLCBBIGlzIGJlZm9yZSBCIGlmIHRoZSBvZmZzZXQgb2YgQSBpcyBsZXNzIHRoYW4gb3Jcblx0XHRcdC8vIGVxdWFsIHRvIHRoZSBpbmRleCBvZiB0aGUgY2hpbGQgbm9kZSBDIGFuZCBBIGlzIGFmdGVyIEIgb3RoZXJ3aXNlLlxuXHRcdFx0YyA9IGNvbnRhaW5lckI7XG5cdFx0XHR3aGlsZSAoYyAmJiBjLnBhcmVudE5vZGUgIT0gY29udGFpbmVyQSkge1xuXHRcdFx0XHRjID0gYy5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYykge1xuXHRcdFx0XHRvZmZzZXRDID0gMDtcblx0XHRcdFx0biA9IGNvbnRhaW5lckEuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHR3aGlsZSAobiAhPSBjICYmIG9mZnNldEMgPCBvZmZzZXRBKSB7XG5cdFx0XHRcdFx0b2Zmc2V0QysrO1xuXHRcdFx0XHRcdG4gPSBuLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9mZnNldEEgPD0gb2Zmc2V0Qykge1xuXHRcdFx0XHRcdHJldHVybiAtMTsgLy8gYmVmb3JlXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gMTsgLy8gYWZ0ZXJcblx0XHRcdH1cblxuXHRcdFx0Ly8gSW4gdGhlIHRoaXJkIGNhc2UgYSBjaGlsZCBub2RlIEMgb2YgdGhlIGNvbnRhaW5lciBvZiBCIGlzIGFuIGFuY2VzdG9yIGNvbnRhaW5lclxuXHRcdFx0Ly8gb2YgQS4gSW4gdGhpcyBjYXNlLCBBIGlzIGJlZm9yZSBCIGlmIHRoZSBpbmRleCBvZiB0aGUgY2hpbGQgbm9kZSBDIGlzIGxlc3MgdGhhblxuXHRcdFx0Ly8gdGhlIG9mZnNldCBvZiBCIGFuZCBBIGlzIGFmdGVyIEIgb3RoZXJ3aXNlLlxuXHRcdFx0YyA9IGNvbnRhaW5lckE7XG5cdFx0XHR3aGlsZSAoYyAmJiBjLnBhcmVudE5vZGUgIT0gY29udGFpbmVyQikge1xuXHRcdFx0XHRjID0gYy5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYykge1xuXHRcdFx0XHRvZmZzZXRDID0gMDtcblx0XHRcdFx0biA9IGNvbnRhaW5lckIuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHR3aGlsZSAobiAhPSBjICYmIG9mZnNldEMgPCBvZmZzZXRCKSB7XG5cdFx0XHRcdFx0b2Zmc2V0QysrO1xuXHRcdFx0XHRcdG4gPSBuLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9mZnNldEMgPCBvZmZzZXRCKSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xOyAvLyBiZWZvcmVcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAxOyAvLyBhZnRlclxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbiB0aGUgZm91cnRoIGNhc2UsIG5vbmUgb2YgdGhyZWUgb3RoZXIgY2FzZXMgaG9sZDogdGhlIGNvbnRhaW5lcnMgb2YgQSBhbmQgQlxuXHRcdFx0Ly8gYXJlIHNpYmxpbmdzIG9yIGRlc2NlbmRhbnRzIG9mIHNpYmxpbmcgbm9kZXMuIEluIHRoaXMgY2FzZSwgQSBpcyBiZWZvcmUgQiBpZlxuXHRcdFx0Ly8gdGhlIGNvbnRhaW5lciBvZiBBIGlzIGJlZm9yZSB0aGUgY29udGFpbmVyIG9mIEIgaW4gYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZVxuXHRcdFx0Ly8gUmFuZ2VzJyBjb250ZXh0IHRyZWUgYW5kIEEgaXMgYWZ0ZXIgQiBvdGhlcndpc2UuXG5cdFx0XHRjbW5Sb290ID0gZG9tLmZpbmRDb21tb25BbmNlc3Rvcihjb250YWluZXJBLCBjb250YWluZXJCKTtcblx0XHRcdGNoaWxkQSA9IGNvbnRhaW5lckE7XG5cblx0XHRcdHdoaWxlIChjaGlsZEEgJiYgY2hpbGRBLnBhcmVudE5vZGUgIT0gY21uUm9vdCkge1xuXHRcdFx0XHRjaGlsZEEgPSBjaGlsZEEucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFjaGlsZEEpIHtcblx0XHRcdFx0Y2hpbGRBID0gY21uUm9vdDtcblx0XHRcdH1cblxuXHRcdFx0Y2hpbGRCID0gY29udGFpbmVyQjtcblx0XHRcdHdoaWxlIChjaGlsZEIgJiYgY2hpbGRCLnBhcmVudE5vZGUgIT0gY21uUm9vdCkge1xuXHRcdFx0XHRjaGlsZEIgPSBjaGlsZEIucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFjaGlsZEIpIHtcblx0XHRcdFx0Y2hpbGRCID0gY21uUm9vdDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNoaWxkQSA9PSBjaGlsZEIpIHtcblx0XHRcdFx0cmV0dXJuIDA7IC8vIGVxdWFsXG5cdFx0XHR9XG5cblx0XHRcdG4gPSBjbW5Sb290LmZpcnN0Q2hpbGQ7XG5cdFx0XHR3aGlsZSAobikge1xuXHRcdFx0XHRpZiAobiA9PSBjaGlsZEEpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7IC8vIGJlZm9yZVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG4gPT0gY2hpbGRCKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7IC8vIGFmdGVyXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRuID0gbi5uZXh0U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBfc2V0RW5kUG9pbnQoc3QsIG4sIG8pIHtcblx0XHRcdHZhciBlYywgc2M7XG5cblx0XHRcdGlmIChzdCkge1xuXHRcdFx0XHRzZWxmW1NUQVJUX0NPTlRBSU5FUl0gPSBuO1xuXHRcdFx0XHRzZWxmW1NUQVJUX09GRlNFVF0gPSBvO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZltFTkRfQ09OVEFJTkVSXSA9IG47XG5cdFx0XHRcdHNlbGZbRU5EX09GRlNFVF0gPSBvO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBvbmUgYm91bmRhcnktcG9pbnQgb2YgYSBSYW5nZSBpcyBzZXQgdG8gaGF2ZSBhIHJvb3QgY29udGFpbmVyXG5cdFx0XHQvLyBvdGhlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBmb3IgdGhlIFJhbmdlLCB0aGUgUmFuZ2UgaXMgY29sbGFwc2VkIHRvXG5cdFx0XHQvLyB0aGUgbmV3IHBvc2l0aW9uLiBUaGlzIGVuZm9yY2VzIHRoZSByZXN0cmljdGlvbiB0aGF0IGJvdGggYm91bmRhcnktXG5cdFx0XHQvLyBwb2ludHMgb2YgYSBSYW5nZSBtdXN0IGhhdmUgdGhlIHNhbWUgcm9vdCBjb250YWluZXIuXG5cdFx0XHRlYyA9IHNlbGZbRU5EX0NPTlRBSU5FUl07XG5cdFx0XHR3aGlsZSAoZWMucGFyZW50Tm9kZSkge1xuXHRcdFx0XHRlYyA9IGVjLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNjID0gc2VsZltTVEFSVF9DT05UQUlORVJdO1xuXHRcdFx0d2hpbGUgKHNjLnBhcmVudE5vZGUpIHtcblx0XHRcdFx0c2MgPSBzYy5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2MgPT0gZWMpIHtcblx0XHRcdFx0Ly8gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIGEgUmFuZ2UgaXMgZ3VhcmFudGVlZCB0byBuZXZlciBiZSBhZnRlciB0aGVcblx0XHRcdFx0Ly8gZW5kIHBvc2l0aW9uLiBUbyBlbmZvcmNlIHRoaXMgcmVzdHJpY3Rpb24sIGlmIHRoZSBzdGFydCBpcyBzZXQgdG9cblx0XHRcdFx0Ly8gYmUgYXQgYSBwb3NpdGlvbiBhZnRlciB0aGUgZW5kLCB0aGUgUmFuZ2UgaXMgY29sbGFwc2VkIHRvIHRoYXRcblx0XHRcdFx0Ly8gcG9zaXRpb24uXG5cdFx0XHRcdGlmIChfY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHNlbGZbU1RBUlRfQ09OVEFJTkVSXSwgc2VsZltTVEFSVF9PRkZTRVRdLCBzZWxmW0VORF9DT05UQUlORVJdLCBzZWxmW0VORF9PRkZTRVRdKSA+IDApIHtcblx0XHRcdFx0XHRzZWxmLmNvbGxhcHNlKHN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5jb2xsYXBzZShzdCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuY29sbGFwc2VkID0gX2lzQ29sbGFwc2VkKCk7XG5cdFx0XHRzZWxmLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gZG9tLmZpbmRDb21tb25BbmNlc3RvcihzZWxmW1NUQVJUX0NPTlRBSU5FUl0sIHNlbGZbRU5EX0NPTlRBSU5FUl0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIF90cmF2ZXJzZShob3cpIHtcblx0XHRcdHZhciBjLCBlbmRDb250YWluZXJEZXB0aCA9IDAsIHN0YXJ0Q29udGFpbmVyRGVwdGggPSAwLCBwLCBkZXB0aERpZmYsIHN0YXJ0Tm9kZSwgZW5kTm9kZSwgc3AsIGVwO1xuXG5cdFx0XHRpZiAoc2VsZltTVEFSVF9DT05UQUlORVJdID09IHNlbGZbRU5EX0NPTlRBSU5FUl0pIHtcblx0XHRcdFx0cmV0dXJuIF90cmF2ZXJzZVNhbWVDb250YWluZXIoaG93KTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjID0gc2VsZltFTkRfQ09OVEFJTkVSXSwgcCA9IGMucGFyZW50Tm9kZTsgcDsgYyA9IHAsIHAgPSBwLnBhcmVudE5vZGUpIHtcblx0XHRcdFx0aWYgKHAgPT0gc2VsZltTVEFSVF9DT05UQUlORVJdKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF90cmF2ZXJzZUNvbW1vblN0YXJ0Q29udGFpbmVyKGMsIGhvdyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQrK2VuZENvbnRhaW5lckRlcHRoO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGMgPSBzZWxmW1NUQVJUX0NPTlRBSU5FUl0sIHAgPSBjLnBhcmVudE5vZGU7IHA7IGMgPSBwLCBwID0gcC5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdGlmIChwID09IHNlbGZbRU5EX0NPTlRBSU5FUl0pIHtcblx0XHRcdFx0XHRyZXR1cm4gX3RyYXZlcnNlQ29tbW9uRW5kQ29udGFpbmVyKGMsIGhvdyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQrK3N0YXJ0Q29udGFpbmVyRGVwdGg7XG5cdFx0XHR9XG5cblx0XHRcdGRlcHRoRGlmZiA9IHN0YXJ0Q29udGFpbmVyRGVwdGggLSBlbmRDb250YWluZXJEZXB0aDtcblxuXHRcdFx0c3RhcnROb2RlID0gc2VsZltTVEFSVF9DT05UQUlORVJdO1xuXHRcdFx0d2hpbGUgKGRlcHRoRGlmZiA+IDApIHtcblx0XHRcdFx0c3RhcnROb2RlID0gc3RhcnROb2RlLnBhcmVudE5vZGU7XG5cdFx0XHRcdGRlcHRoRGlmZi0tO1xuXHRcdFx0fVxuXG5cdFx0XHRlbmROb2RlID0gc2VsZltFTkRfQ09OVEFJTkVSXTtcblx0XHRcdHdoaWxlIChkZXB0aERpZmYgPCAwKSB7XG5cdFx0XHRcdGVuZE5vZGUgPSBlbmROb2RlLnBhcmVudE5vZGU7XG5cdFx0XHRcdGRlcHRoRGlmZisrO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBhc2NlbmQgdGhlIGFuY2VzdG9yIGhpZXJhcmNoeSB1bnRpbCB3ZSBoYXZlIGEgY29tbW9uIHBhcmVudC5cblx0XHRcdGZvciAoc3AgPSBzdGFydE5vZGUucGFyZW50Tm9kZSwgZXAgPSBlbmROb2RlLnBhcmVudE5vZGU7IHNwICE9IGVwOyBzcCA9IHNwLnBhcmVudE5vZGUsIGVwID0gZXAucGFyZW50Tm9kZSkge1xuXHRcdFx0XHRzdGFydE5vZGUgPSBzcDtcblx0XHRcdFx0ZW5kTm9kZSA9IGVwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gX3RyYXZlcnNlQ29tbW9uQW5jZXN0b3JzKHN0YXJ0Tm9kZSwgZW5kTm9kZSwgaG93KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBfdHJhdmVyc2VTYW1lQ29udGFpbmVyKGhvdykge1xuXHRcdFx0dmFyIGZyYWcsIHMsIHN1YiwgbiwgY250LCBzaWJsaW5nLCB4ZmVyTm9kZSwgc3RhcnQsIGxlbjtcblxuXHRcdFx0aWYgKGhvdyAhPSBERUxFVEUpIHtcblx0XHRcdFx0ZnJhZyA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgc2VsZWN0aW9uIGlzIGVtcHR5LCBqdXN0IHJldHVybiB0aGUgZnJhZ21lbnRcblx0XHRcdGlmIChzZWxmW1NUQVJUX09GRlNFVF0gPT0gc2VsZltFTkRfT0ZGU0VUXSkge1xuXHRcdFx0XHRyZXR1cm4gZnJhZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGV4dCBub2RlIG5lZWRzIHNwZWNpYWwgY2FzZSBoYW5kbGluZ1xuXHRcdFx0aWYgKHNlbGZbU1RBUlRfQ09OVEFJTkVSXS5ub2RlVHlwZSA9PSAzKSB7IC8vIFRFWFRfTk9ERVxuXHRcdFx0XHQvLyBnZXQgdGhlIHN1YnN0cmluZ1xuXHRcdFx0XHRzID0gc2VsZltTVEFSVF9DT05UQUlORVJdLm5vZGVWYWx1ZTtcblx0XHRcdFx0c3ViID0gcy5zdWJzdHJpbmcoc2VsZltTVEFSVF9PRkZTRVRdLCBzZWxmW0VORF9PRkZTRVRdKTtcblxuXHRcdFx0XHQvLyBzZXQgdGhlIG9yaWdpbmFsIHRleHQgbm9kZSB0byBpdHMgbmV3IHZhbHVlXG5cdFx0XHRcdGlmIChob3cgIT0gQ0xPTkUpIHtcblx0XHRcdFx0XHRuID0gc2VsZltTVEFSVF9DT05UQUlORVJdO1xuXHRcdFx0XHRcdHN0YXJ0ID0gc2VsZltTVEFSVF9PRkZTRVRdO1xuXHRcdFx0XHRcdGxlbiA9IHNlbGZbRU5EX09GRlNFVF0gLSBzZWxmW1NUQVJUX09GRlNFVF07XG5cblx0XHRcdFx0XHRpZiAoc3RhcnQgPT09IDAgJiYgbGVuID49IG4ubm9kZVZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bi5kZWxldGVEYXRhKHN0YXJ0LCBsZW4pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5vdGhpbmcgaXMgcGFydGlhbGx5IHNlbGVjdGVkLCBzbyBjb2xsYXBzZSB0byBzdGFydCBwb2ludFxuXHRcdFx0XHRcdHNlbGYuY29sbGFwc2UoVFJVRSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaG93ID09IERFTEVURSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzdWIubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGZyYWcuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKHN1YikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZyYWc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvcHkgbm9kZXMgYmV0d2VlbiB0aGUgc3RhcnQvZW5kIG9mZnNldHMuXG5cdFx0XHRuID0gX2dldFNlbGVjdGVkTm9kZShzZWxmW1NUQVJUX0NPTlRBSU5FUl0sIHNlbGZbU1RBUlRfT0ZGU0VUXSk7XG5cdFx0XHRjbnQgPSBzZWxmW0VORF9PRkZTRVRdIC0gc2VsZltTVEFSVF9PRkZTRVRdO1xuXG5cdFx0XHR3aGlsZSAobiAmJiBjbnQgPiAwKSB7XG5cdFx0XHRcdHNpYmxpbmcgPSBuLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR4ZmVyTm9kZSA9IF90cmF2ZXJzZUZ1bGx5U2VsZWN0ZWQobiwgaG93KTtcblxuXHRcdFx0XHRpZiAoZnJhZykge1xuXHRcdFx0XHRcdGZyYWcuYXBwZW5kQ2hpbGQoeGZlck5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LS1jbnQ7XG5cdFx0XHRcdG4gPSBzaWJsaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOb3RoaW5nIGlzIHBhcnRpYWxseSBzZWxlY3RlZCwgc28gY29sbGFwc2UgdG8gc3RhcnQgcG9pbnRcblx0XHRcdGlmIChob3cgIT0gQ0xPTkUpIHtcblx0XHRcdFx0c2VsZi5jb2xsYXBzZShUUlVFKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZyYWc7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gX3RyYXZlcnNlQ29tbW9uU3RhcnRDb250YWluZXIoZW5kQW5jZXN0b3IsIGhvdykge1xuXHRcdFx0dmFyIGZyYWcsIG4sIGVuZElkeCwgY250LCBzaWJsaW5nLCB4ZmVyTm9kZTtcblxuXHRcdFx0aWYgKGhvdyAhPSBERUxFVEUpIHtcblx0XHRcdFx0ZnJhZyA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRcdH1cblxuXHRcdFx0biA9IF90cmF2ZXJzZVJpZ2h0Qm91bmRhcnkoZW5kQW5jZXN0b3IsIGhvdyk7XG5cblx0XHRcdGlmIChmcmFnKSB7XG5cdFx0XHRcdGZyYWcuYXBwZW5kQ2hpbGQobik7XG5cdFx0XHR9XG5cblx0XHRcdGVuZElkeCA9IG5vZGVJbmRleChlbmRBbmNlc3Rvcik7XG5cdFx0XHRjbnQgPSBlbmRJZHggLSBzZWxmW1NUQVJUX09GRlNFVF07XG5cblx0XHRcdGlmIChjbnQgPD0gMCkge1xuXHRcdFx0XHQvLyBDb2xsYXBzZSB0byBqdXN0IGJlZm9yZSB0aGUgZW5kQW5jZXN0b3IsIHdoaWNoXG5cdFx0XHRcdC8vIGlzIHBhcnRpYWxseSBzZWxlY3RlZC5cblx0XHRcdFx0aWYgKGhvdyAhPSBDTE9ORSkge1xuXHRcdFx0XHRcdHNlbGYuc2V0RW5kQmVmb3JlKGVuZEFuY2VzdG9yKTtcblx0XHRcdFx0XHRzZWxmLmNvbGxhcHNlKEZBTFNFKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmcmFnO1xuXHRcdFx0fVxuXG5cdFx0XHRuID0gZW5kQW5jZXN0b3IucHJldmlvdXNTaWJsaW5nO1xuXHRcdFx0d2hpbGUgKGNudCA+IDApIHtcblx0XHRcdFx0c2libGluZyA9IG4ucHJldmlvdXNTaWJsaW5nO1xuXHRcdFx0XHR4ZmVyTm9kZSA9IF90cmF2ZXJzZUZ1bGx5U2VsZWN0ZWQobiwgaG93KTtcblxuXHRcdFx0XHRpZiAoZnJhZykge1xuXHRcdFx0XHRcdGZyYWcuaW5zZXJ0QmVmb3JlKHhmZXJOb2RlLCBmcmFnLmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LS1jbnQ7XG5cdFx0XHRcdG4gPSBzaWJsaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb2xsYXBzZSB0byBqdXN0IGJlZm9yZSB0aGUgZW5kQW5jZXN0b3IsIHdoaWNoXG5cdFx0XHQvLyBpcyBwYXJ0aWFsbHkgc2VsZWN0ZWQuXG5cdFx0XHRpZiAoaG93ICE9IENMT05FKSB7XG5cdFx0XHRcdHNlbGYuc2V0RW5kQmVmb3JlKGVuZEFuY2VzdG9yKTtcblx0XHRcdFx0c2VsZi5jb2xsYXBzZShGQUxTRSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmcmFnO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIF90cmF2ZXJzZUNvbW1vbkVuZENvbnRhaW5lcihzdGFydEFuY2VzdG9yLCBob3cpIHtcblx0XHRcdHZhciBmcmFnLCBzdGFydElkeCwgbiwgY250LCBzaWJsaW5nLCB4ZmVyTm9kZTtcblxuXHRcdFx0aWYgKGhvdyAhPSBERUxFVEUpIHtcblx0XHRcdFx0ZnJhZyA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRcdH1cblxuXHRcdFx0biA9IF90cmF2ZXJzZUxlZnRCb3VuZGFyeShzdGFydEFuY2VzdG9yLCBob3cpO1xuXHRcdFx0aWYgKGZyYWcpIHtcblx0XHRcdFx0ZnJhZy5hcHBlbmRDaGlsZChuKTtcblx0XHRcdH1cblxuXHRcdFx0c3RhcnRJZHggPSBub2RlSW5kZXgoc3RhcnRBbmNlc3Rvcik7XG5cdFx0XHQrK3N0YXJ0SWR4OyAvLyBCZWNhdXNlIHdlIGFscmVhZHkgdHJhdmVyc2VkIGl0XG5cblx0XHRcdGNudCA9IHNlbGZbRU5EX09GRlNFVF0gLSBzdGFydElkeDtcblx0XHRcdG4gPSBzdGFydEFuY2VzdG9yLm5leHRTaWJsaW5nO1xuXHRcdFx0d2hpbGUgKG4gJiYgY250ID4gMCkge1xuXHRcdFx0XHRzaWJsaW5nID0gbi5uZXh0U2libGluZztcblx0XHRcdFx0eGZlck5vZGUgPSBfdHJhdmVyc2VGdWxseVNlbGVjdGVkKG4sIGhvdyk7XG5cblx0XHRcdFx0aWYgKGZyYWcpIHtcblx0XHRcdFx0XHRmcmFnLmFwcGVuZENoaWxkKHhmZXJOb2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC0tY250O1xuXHRcdFx0XHRuID0gc2libGluZztcblx0XHRcdH1cblxuXHRcdFx0aWYgKGhvdyAhPSBDTE9ORSkge1xuXHRcdFx0XHRzZWxmLnNldFN0YXJ0QWZ0ZXIoc3RhcnRBbmNlc3Rvcik7XG5cdFx0XHRcdHNlbGYuY29sbGFwc2UoVFJVRSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmcmFnO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIF90cmF2ZXJzZUNvbW1vbkFuY2VzdG9ycyhzdGFydEFuY2VzdG9yLCBlbmRBbmNlc3RvciwgaG93KSB7XG5cdFx0XHR2YXIgbiwgZnJhZywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgY250LCBzaWJsaW5nLCBuZXh0U2libGluZztcblxuXHRcdFx0aWYgKGhvdyAhPSBERUxFVEUpIHtcblx0XHRcdFx0ZnJhZyA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRcdH1cblxuXHRcdFx0biA9IF90cmF2ZXJzZUxlZnRCb3VuZGFyeShzdGFydEFuY2VzdG9yLCBob3cpO1xuXHRcdFx0aWYgKGZyYWcpIHtcblx0XHRcdFx0ZnJhZy5hcHBlbmRDaGlsZChuKTtcblx0XHRcdH1cblxuXHRcdFx0c3RhcnRPZmZzZXQgPSBub2RlSW5kZXgoc3RhcnRBbmNlc3Rvcik7XG5cdFx0XHRlbmRPZmZzZXQgPSBub2RlSW5kZXgoZW5kQW5jZXN0b3IpO1xuXHRcdFx0KytzdGFydE9mZnNldDtcblxuXHRcdFx0Y250ID0gZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQ7XG5cdFx0XHRzaWJsaW5nID0gc3RhcnRBbmNlc3Rvci5uZXh0U2libGluZztcblxuXHRcdFx0d2hpbGUgKGNudCA+IDApIHtcblx0XHRcdFx0bmV4dFNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xuXHRcdFx0XHRuID0gX3RyYXZlcnNlRnVsbHlTZWxlY3RlZChzaWJsaW5nLCBob3cpO1xuXG5cdFx0XHRcdGlmIChmcmFnKSB7XG5cdFx0XHRcdFx0ZnJhZy5hcHBlbmRDaGlsZChuKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNpYmxpbmcgPSBuZXh0U2libGluZztcblx0XHRcdFx0LS1jbnQ7XG5cdFx0XHR9XG5cblx0XHRcdG4gPSBfdHJhdmVyc2VSaWdodEJvdW5kYXJ5KGVuZEFuY2VzdG9yLCBob3cpO1xuXG5cdFx0XHRpZiAoZnJhZykge1xuXHRcdFx0XHRmcmFnLmFwcGVuZENoaWxkKG4pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaG93ICE9IENMT05FKSB7XG5cdFx0XHRcdHNlbGYuc2V0U3RhcnRBZnRlcihzdGFydEFuY2VzdG9yKTtcblx0XHRcdFx0c2VsZi5jb2xsYXBzZShUUlVFKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZyYWc7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gX3RyYXZlcnNlUmlnaHRCb3VuZGFyeShyb290LCBob3cpIHtcblx0XHRcdHZhciBuZXh0ID0gX2dldFNlbGVjdGVkTm9kZShzZWxmW0VORF9DT05UQUlORVJdLCBzZWxmW0VORF9PRkZTRVRdIC0gMSksIHBhcmVudCwgY2xvbmVkUGFyZW50O1xuXHRcdFx0dmFyIHByZXZTaWJsaW5nLCBjbG9uZWRDaGlsZCwgY2xvbmVkR3JhbmRQYXJlbnQsIGlzRnVsbHlTZWxlY3RlZCA9IG5leHQgIT0gc2VsZltFTkRfQ09OVEFJTkVSXTtcblxuXHRcdFx0aWYgKG5leHQgPT0gcm9vdCkge1xuXHRcdFx0XHRyZXR1cm4gX3RyYXZlcnNlTm9kZShuZXh0LCBpc0Z1bGx5U2VsZWN0ZWQsIEZBTFNFLCBob3cpO1xuXHRcdFx0fVxuXG5cdFx0XHRwYXJlbnQgPSBuZXh0LnBhcmVudE5vZGU7XG5cdFx0XHRjbG9uZWRQYXJlbnQgPSBfdHJhdmVyc2VOb2RlKHBhcmVudCwgRkFMU0UsIEZBTFNFLCBob3cpO1xuXG5cdFx0XHR3aGlsZSAocGFyZW50KSB7XG5cdFx0XHRcdHdoaWxlIChuZXh0KSB7XG5cdFx0XHRcdFx0cHJldlNpYmxpbmcgPSBuZXh0LnByZXZpb3VzU2libGluZztcblx0XHRcdFx0XHRjbG9uZWRDaGlsZCA9IF90cmF2ZXJzZU5vZGUobmV4dCwgaXNGdWxseVNlbGVjdGVkLCBGQUxTRSwgaG93KTtcblxuXHRcdFx0XHRcdGlmIChob3cgIT0gREVMRVRFKSB7XG5cdFx0XHRcdFx0XHRjbG9uZWRQYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lZENoaWxkLCBjbG9uZWRQYXJlbnQuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXNGdWxseVNlbGVjdGVkID0gVFJVRTtcblx0XHRcdFx0XHRuZXh0ID0gcHJldlNpYmxpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGFyZW50ID09IHJvb3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xvbmVkUGFyZW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bmV4dCA9IHBhcmVudC5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuXG5cdFx0XHRcdGNsb25lZEdyYW5kUGFyZW50ID0gX3RyYXZlcnNlTm9kZShwYXJlbnQsIEZBTFNFLCBGQUxTRSwgaG93KTtcblxuXHRcdFx0XHRpZiAoaG93ICE9IERFTEVURSkge1xuXHRcdFx0XHRcdGNsb25lZEdyYW5kUGFyZW50LmFwcGVuZENoaWxkKGNsb25lZFBhcmVudCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjbG9uZWRQYXJlbnQgPSBjbG9uZWRHcmFuZFBhcmVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBfdHJhdmVyc2VMZWZ0Qm91bmRhcnkocm9vdCwgaG93KSB7XG5cdFx0XHR2YXIgbmV4dCA9IF9nZXRTZWxlY3RlZE5vZGUoc2VsZltTVEFSVF9DT05UQUlORVJdLCBzZWxmW1NUQVJUX09GRlNFVF0pLCBpc0Z1bGx5U2VsZWN0ZWQgPSBuZXh0ICE9IHNlbGZbU1RBUlRfQ09OVEFJTkVSXTtcblx0XHRcdHZhciBwYXJlbnQsIGNsb25lZFBhcmVudCwgbmV4dFNpYmxpbmcsIGNsb25lZENoaWxkLCBjbG9uZWRHcmFuZFBhcmVudDtcblxuXHRcdFx0aWYgKG5leHQgPT0gcm9vdCkge1xuXHRcdFx0XHRyZXR1cm4gX3RyYXZlcnNlTm9kZShuZXh0LCBpc0Z1bGx5U2VsZWN0ZWQsIFRSVUUsIGhvdyk7XG5cdFx0XHR9XG5cblx0XHRcdHBhcmVudCA9IG5leHQucGFyZW50Tm9kZTtcblx0XHRcdGNsb25lZFBhcmVudCA9IF90cmF2ZXJzZU5vZGUocGFyZW50LCBGQUxTRSwgVFJVRSwgaG93KTtcblxuXHRcdFx0d2hpbGUgKHBhcmVudCkge1xuXHRcdFx0XHR3aGlsZSAobmV4dCkge1xuXHRcdFx0XHRcdG5leHRTaWJsaW5nID0gbmV4dC5uZXh0U2libGluZztcblx0XHRcdFx0XHRjbG9uZWRDaGlsZCA9IF90cmF2ZXJzZU5vZGUobmV4dCwgaXNGdWxseVNlbGVjdGVkLCBUUlVFLCBob3cpO1xuXG5cdFx0XHRcdFx0aWYgKGhvdyAhPSBERUxFVEUpIHtcblx0XHRcdFx0XHRcdGNsb25lZFBhcmVudC5hcHBlbmRDaGlsZChjbG9uZWRDaGlsZCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aXNGdWxseVNlbGVjdGVkID0gVFJVRTtcblx0XHRcdFx0XHRuZXh0ID0gbmV4dFNpYmxpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGFyZW50ID09IHJvb3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xvbmVkUGFyZW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bmV4dCA9IHBhcmVudC5uZXh0U2libGluZztcblx0XHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG5cblx0XHRcdFx0Y2xvbmVkR3JhbmRQYXJlbnQgPSBfdHJhdmVyc2VOb2RlKHBhcmVudCwgRkFMU0UsIFRSVUUsIGhvdyk7XG5cblx0XHRcdFx0aWYgKGhvdyAhPSBERUxFVEUpIHtcblx0XHRcdFx0XHRjbG9uZWRHcmFuZFBhcmVudC5hcHBlbmRDaGlsZChjbG9uZWRQYXJlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2xvbmVkUGFyZW50ID0gY2xvbmVkR3JhbmRQYXJlbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gX3RyYXZlcnNlTm9kZShuLCBpc0Z1bGx5U2VsZWN0ZWQsIGlzTGVmdCwgaG93KSB7XG5cdFx0XHR2YXIgdHh0VmFsdWUsIG5ld05vZGVWYWx1ZSwgb2xkTm9kZVZhbHVlLCBvZmZzZXQsIG5ld05vZGU7XG5cblx0XHRcdGlmIChpc0Z1bGx5U2VsZWN0ZWQpIHtcblx0XHRcdFx0cmV0dXJuIF90cmF2ZXJzZUZ1bGx5U2VsZWN0ZWQobiwgaG93KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVEVYVF9OT0RFXG5cdFx0XHRpZiAobi5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdHR4dFZhbHVlID0gbi5ub2RlVmFsdWU7XG5cblx0XHRcdFx0aWYgKGlzTGVmdCkge1xuXHRcdFx0XHRcdG9mZnNldCA9IHNlbGZbU1RBUlRfT0ZGU0VUXTtcblx0XHRcdFx0XHRuZXdOb2RlVmFsdWUgPSB0eHRWYWx1ZS5zdWJzdHJpbmcob2Zmc2V0KTtcblx0XHRcdFx0XHRvbGROb2RlVmFsdWUgPSB0eHRWYWx1ZS5zdWJzdHJpbmcoMCwgb2Zmc2V0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBzZWxmW0VORF9PRkZTRVRdO1xuXHRcdFx0XHRcdG5ld05vZGVWYWx1ZSA9IHR4dFZhbHVlLnN1YnN0cmluZygwLCBvZmZzZXQpO1xuXHRcdFx0XHRcdG9sZE5vZGVWYWx1ZSA9IHR4dFZhbHVlLnN1YnN0cmluZyhvZmZzZXQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGhvdyAhPSBDTE9ORSkge1xuXHRcdFx0XHRcdG4ubm9kZVZhbHVlID0gb2xkTm9kZVZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGhvdyA9PSBERUxFVEUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRuZXdOb2RlID0gZG9tLmNsb25lKG4sIEZBTFNFKTtcblx0XHRcdFx0bmV3Tm9kZS5ub2RlVmFsdWUgPSBuZXdOb2RlVmFsdWU7XG5cblx0XHRcdFx0cmV0dXJuIG5ld05vZGU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChob3cgPT0gREVMRVRFKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRvbS5jbG9uZShuLCBGQUxTRSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gX3RyYXZlcnNlRnVsbHlTZWxlY3RlZChuLCBob3cpIHtcblx0XHRcdGlmIChob3cgIT0gREVMRVRFKSB7XG5cdFx0XHRcdHJldHVybiBob3cgPT0gQ0xPTkUgPyBkb20uY2xvbmUobiwgVFJVRSkgOiBuO1xuXHRcdFx0fVxuXG5cdFx0XHRuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdG9TdHJpbmdJRSgpIHtcblx0XHRcdHJldHVybiBkb20uY3JlYXRlKCdib2R5JywgbnVsbCwgY2xvbmVDb250ZW50cygpKS5vdXRlclRleHQ7XG5cdFx0fVxuXG5cdFx0ZXh0ZW5kKHNlbGYsIHtcblx0XHRcdC8vIEluaXRpYWwgc3RhdGVzXG5cdFx0XHRzdGFydENvbnRhaW5lcjogZG9jLFxuXHRcdFx0c3RhcnRPZmZzZXQ6IDAsXG5cdFx0XHRlbmRDb250YWluZXI6IGRvYyxcblx0XHRcdGVuZE9mZnNldDogMCxcblx0XHRcdGNvbGxhcHNlZDogVFJVRSxcblx0XHRcdGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOiBkb2MsXG5cblx0XHRcdC8vIFJhbmdlIGNvbnN0YW50c1xuXHRcdFx0U1RBUlRfVE9fU1RBUlQ6IDAsXG5cdFx0XHRTVEFSVF9UT19FTkQ6IDEsXG5cdFx0XHRFTkRfVE9fRU5EOiAyLFxuXHRcdFx0RU5EX1RPX1NUQVJUOiAzLFxuXG5cdFx0XHQvLyBQdWJsaWMgbWV0aG9kc1xuXHRcdFx0c2V0U3RhcnQ6IHNldFN0YXJ0LFxuXHRcdFx0c2V0RW5kOiBzZXRFbmQsXG5cdFx0XHRzZXRTdGFydEJlZm9yZTogc2V0U3RhcnRCZWZvcmUsXG5cdFx0XHRzZXRTdGFydEFmdGVyOiBzZXRTdGFydEFmdGVyLFxuXHRcdFx0c2V0RW5kQmVmb3JlOiBzZXRFbmRCZWZvcmUsXG5cdFx0XHRzZXRFbmRBZnRlcjogc2V0RW5kQWZ0ZXIsXG5cdFx0XHRjb2xsYXBzZTogY29sbGFwc2UsXG5cdFx0XHRzZWxlY3ROb2RlOiBzZWxlY3ROb2RlLFxuXHRcdFx0c2VsZWN0Tm9kZUNvbnRlbnRzOiBzZWxlY3ROb2RlQ29udGVudHMsXG5cdFx0XHRjb21wYXJlQm91bmRhcnlQb2ludHM6IGNvbXBhcmVCb3VuZGFyeVBvaW50cyxcblx0XHRcdGRlbGV0ZUNvbnRlbnRzOiBkZWxldGVDb250ZW50cyxcblx0XHRcdGV4dHJhY3RDb250ZW50czogZXh0cmFjdENvbnRlbnRzLFxuXHRcdFx0Y2xvbmVDb250ZW50czogY2xvbmVDb250ZW50cyxcblx0XHRcdGluc2VydE5vZGU6IGluc2VydE5vZGUsXG5cdFx0XHRzdXJyb3VuZENvbnRlbnRzOiBzdXJyb3VuZENvbnRlbnRzLFxuXHRcdFx0Y2xvbmVSYW5nZTogY2xvbmVSYW5nZSxcblx0XHRcdHRvU3RyaW5nSUU6IHRvU3RyaW5nSUVcblx0XHR9KTtcblxuXHRcdHJldHVybiBzZWxmO1xuXHR9XG5cblx0Ly8gT2xkZXIgSUUgdmVyc2lvbnMgZG9lc24ndCBsZXQgeW91IG92ZXJyaWRlIHRvU3RyaW5nIGJ5IGl0J3MgY29uc3RydWN0b3Igc28gd2UgaGF2ZSB0byBzdGljayBpdCBpbiB0aGUgcHJvdG90eXBlXG5cdFJhbmdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnRvU3RyaW5nSUUoKTtcblx0fTtcblxuXHRyZXR1cm4gUmFuZ2U7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2h0bWwvRW50aXRpZXMuanNcblxuLyoqXG4gKiBFbnRpdGllcy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKmpzaGludCBiaXR3aXNlOmZhbHNlICovXG4vKmVzbGludCBuby1iaXR3aXNlOjAgKi9cblxuLyoqXG4gKiBFbnRpdHkgZW5jb2RlciBjbGFzcy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5odG1sLkVudGl0aWVzXG4gKiBAc3RhdGljXG4gKiBAdmVyc2lvbiAzLjRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9odG1sL0VudGl0aWVzXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxuXSwgZnVuY3Rpb24oVG9vbHMpIHtcblx0dmFyIG1ha2VNYXAgPSBUb29scy5tYWtlTWFwO1xuXG5cdHZhciBuYW1lZEVudGl0aWVzLCBiYXNlRW50aXRpZXMsIHJldmVyc2VFbnRpdGllcyxcblx0XHRhdHRyc0NoYXJzUmVnRXhwID0gL1smPD5cXFwiXFx1MDA2MFxcdTAwN0UtXFx1RDdGRlxcdUUwMDAtXFx1RkZFRl18W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nLFxuXHRcdHRleHRDaGFyc1JlZ0V4cCA9IC9bPD4mXFx1MDA3RS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkVGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2csXG5cdFx0cmF3Q2hhcnNSZWdFeHAgPSAvWzw+JlxcXCJcXCddL2csXG5cdFx0ZW50aXR5UmVnRXhwID0gLyYjKFthLXowLTldKyk7P3wmKFthLXowLTldKyk7L2dpLFxuXHRcdGFzY2lpTWFwID0ge1xuXHRcdFx0MTI4OiBcIlxcdTIwQUNcIiwgMTMwOiBcIlxcdTIwMUFcIiwgMTMxOiBcIlxcdTAxOTJcIiwgMTMyOiBcIlxcdTIwMUVcIiwgMTMzOiBcIlxcdTIwMjZcIiwgMTM0OiBcIlxcdTIwMjBcIixcblx0XHRcdDEzNTogXCJcXHUyMDIxXCIsIDEzNjogXCJcXHUwMkM2XCIsIDEzNzogXCJcXHUyMDMwXCIsIDEzODogXCJcXHUwMTYwXCIsIDEzOTogXCJcXHUyMDM5XCIsIDE0MDogXCJcXHUwMTUyXCIsXG5cdFx0XHQxNDI6IFwiXFx1MDE3RFwiLCAxNDU6IFwiXFx1MjAxOFwiLCAxNDY6IFwiXFx1MjAxOVwiLCAxNDc6IFwiXFx1MjAxQ1wiLCAxNDg6IFwiXFx1MjAxRFwiLCAxNDk6IFwiXFx1MjAyMlwiLFxuXHRcdFx0MTUwOiBcIlxcdTIwMTNcIiwgMTUxOiBcIlxcdTIwMTRcIiwgMTUyOiBcIlxcdTAyRENcIiwgMTUzOiBcIlxcdTIxMjJcIiwgMTU0OiBcIlxcdTAxNjFcIiwgMTU1OiBcIlxcdTIwM0FcIixcblx0XHRcdDE1NjogXCJcXHUwMTUzXCIsIDE1ODogXCJcXHUwMTdFXCIsIDE1OTogXCJcXHUwMTc4XCJcblx0XHR9O1xuXG5cdC8vIFJhdyBlbnRpdGllc1xuXHRiYXNlRW50aXRpZXMgPSB7XG5cdFx0J1xcXCInOiAnJnF1b3Q7JywgLy8gTmVlZHMgdG8gYmUgZXNjYXBlZCBzaW5jZSB0aGUgWVVJIGNvbXByZXNzb3Igd291bGQgb3RoZXJ3aXNlIGJyZWFrIHRoZSBjb2RlXG5cdFx0XCInXCI6ICcmIzM5OycsXG5cdFx0JzwnOiAnJmx0OycsXG5cdFx0Jz4nOiAnJmd0OycsXG5cdFx0JyYnOiAnJmFtcDsnLFxuXHRcdCdcXHUwMDYwJzogJyYjOTY7J1xuXHR9O1xuXG5cdC8vIFJldmVyc2UgbG9va3VwIHRhYmxlIGZvciByYXcgZW50aXRpZXNcblx0cmV2ZXJzZUVudGl0aWVzID0ge1xuXHRcdCcmbHQ7JzogJzwnLFxuXHRcdCcmZ3Q7JzogJz4nLFxuXHRcdCcmYW1wOyc6ICcmJyxcblx0XHQnJnF1b3Q7JzogJ1wiJyxcblx0XHQnJmFwb3M7JzogXCInXCJcblx0fTtcblxuXHQvLyBEZWNvZGVzIHRleHQgYnkgdXNpbmcgdGhlIGJyb3dzZXJcblx0ZnVuY3Rpb24gbmF0aXZlRGVjb2RlKHRleHQpIHtcblx0XHR2YXIgZWxtO1xuXG5cdFx0ZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRlbG0uaW5uZXJIVE1MID0gdGV4dDtcblxuXHRcdHJldHVybiBlbG0udGV4dENvbnRlbnQgfHwgZWxtLmlubmVyVGV4dCB8fCB0ZXh0O1xuXHR9XG5cblx0Ly8gQnVpbGQgYSB0d28gd2F5IGxvb2t1cCB0YWJsZSBmb3IgdGhlIGVudGl0aWVzXG5cdGZ1bmN0aW9uIGJ1aWxkRW50aXRpZXNMb29rdXAoaXRlbXMsIHJhZGl4KSB7XG5cdFx0dmFyIGksIGNociwgZW50aXR5LCBsb29rdXAgPSB7fTtcblxuXHRcdGlmIChpdGVtcykge1xuXHRcdFx0aXRlbXMgPSBpdGVtcy5zcGxpdCgnLCcpO1xuXHRcdFx0cmFkaXggPSByYWRpeCB8fCAxMDtcblxuXHRcdFx0Ly8gQnVpbGQgZW50aXRpZXMgbG9va3VwIHRhYmxlXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IDIpIHtcblx0XHRcdFx0Y2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChpdGVtc1tpXSwgcmFkaXgpKTtcblxuXHRcdFx0XHQvLyBPbmx5IGFkZCBub24gYmFzZSBlbnRpdGllc1xuXHRcdFx0XHRpZiAoIWJhc2VFbnRpdGllc1tjaHJdKSB7XG5cdFx0XHRcdFx0ZW50aXR5ID0gJyYnICsgaXRlbXNbaSArIDFdICsgJzsnO1xuXHRcdFx0XHRcdGxvb2t1cFtjaHJdID0gZW50aXR5O1xuXHRcdFx0XHRcdGxvb2t1cFtlbnRpdHldID0gY2hyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsb29rdXA7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVW5wYWNrIGVudGl0aWVzIGxvb2t1cCB3aGVyZSB0aGUgbnVtYmVycyBhcmUgaW4gcmFkaXggMzIgdG8gcmVkdWNlIHRoZSBzaXplXG5cdG5hbWVkRW50aXRpZXMgPSBidWlsZEVudGl0aWVzTG9va3VwKFxuXHRcdCc1MCxuYnNwLDUxLGlleGNsLDUyLGNlbnQsNTMscG91bmQsNTQsY3VycmVuLDU1LHllbiw1NixicnZiYXIsNTcsc2VjdCw1OCx1bWwsNTksY29weSwnICtcblx0XHQnNWEsb3JkZiw1YixsYXF1byw1Yyxub3QsNWQsc2h5LDVlLHJlZyw1ZixtYWNyLDVnLGRlZyw1aCxwbHVzbW4sNWksc3VwMiw1aixzdXAzLDVrLGFjdXRlLCcgK1xuXHRcdCc1bCxtaWNybyw1bSxwYXJhLDVuLG1pZGRvdCw1byxjZWRpbCw1cCxzdXAxLDVxLG9yZG0sNXIscmFxdW8sNXMsZnJhYzE0LDV0LGZyYWMxMiw1dSxmcmFjMzQsJyArXG5cdFx0JzV2LGlxdWVzdCw2MCxBZ3JhdmUsNjEsQWFjdXRlLDYyLEFjaXJjLDYzLEF0aWxkZSw2NCxBdW1sLDY1LEFyaW5nLDY2LEFFbGlnLDY3LENjZWRpbCwnICtcblx0XHQnNjgsRWdyYXZlLDY5LEVhY3V0ZSw2YSxFY2lyYyw2YixFdW1sLDZjLElncmF2ZSw2ZCxJYWN1dGUsNmUsSWNpcmMsNmYsSXVtbCw2ZyxFVEgsNmgsTnRpbGRlLCcgK1xuXHRcdCc2aSxPZ3JhdmUsNmosT2FjdXRlLDZrLE9jaXJjLDZsLE90aWxkZSw2bSxPdW1sLDZuLHRpbWVzLDZvLE9zbGFzaCw2cCxVZ3JhdmUsNnEsVWFjdXRlLCcgK1xuXHRcdCc2cixVY2lyYyw2cyxVdW1sLDZ0LFlhY3V0ZSw2dSxUSE9STiw2dixzemxpZyw3MCxhZ3JhdmUsNzEsYWFjdXRlLDcyLGFjaXJjLDczLGF0aWxkZSw3NCxhdW1sLCcgK1xuXHRcdCc3NSxhcmluZyw3NixhZWxpZyw3NyxjY2VkaWwsNzgsZWdyYXZlLDc5LGVhY3V0ZSw3YSxlY2lyYyw3YixldW1sLDdjLGlncmF2ZSw3ZCxpYWN1dGUsN2UsaWNpcmMsJyArXG5cdFx0JzdmLGl1bWwsN2csZXRoLDdoLG50aWxkZSw3aSxvZ3JhdmUsN2osb2FjdXRlLDdrLG9jaXJjLDdsLG90aWxkZSw3bSxvdW1sLDduLGRpdmlkZSw3byxvc2xhc2gsJyArXG5cdFx0JzdwLHVncmF2ZSw3cSx1YWN1dGUsN3IsdWNpcmMsN3MsdXVtbCw3dCx5YWN1dGUsN3UsdGhvcm4sN3YseXVtbCxjaSxmbm9mLHNoLEFscGhhLHNpLEJldGEsJyArXG5cdFx0J3NqLEdhbW1hLHNrLERlbHRhLHNsLEVwc2lsb24sc20sWmV0YSxzbixFdGEsc28sVGhldGEsc3AsSW90YSxzcSxLYXBwYSxzcixMYW1iZGEsc3MsTXUsJyArXG5cdFx0J3N0LE51LHN1LFhpLHN2LE9taWNyb24sdDAsUGksdDEsUmhvLHQzLFNpZ21hLHQ0LFRhdSx0NSxVcHNpbG9uLHQ2LFBoaSx0NyxDaGksdDgsUHNpLCcgK1xuXHRcdCd0OSxPbWVnYSx0aCxhbHBoYSx0aSxiZXRhLHRqLGdhbW1hLHRrLGRlbHRhLHRsLGVwc2lsb24sdG0semV0YSx0bixldGEsdG8sdGhldGEsdHAsaW90YSwnICtcblx0XHQndHEsa2FwcGEsdHIsbGFtYmRhLHRzLG11LHR0LG51LHR1LHhpLHR2LG9taWNyb24sdTAscGksdTEscmhvLHUyLHNpZ21hZix1MyxzaWdtYSx1NCx0YXUsJyArXG5cdFx0J3U1LHVwc2lsb24sdTYscGhpLHU3LGNoaSx1OCxwc2ksdTksb21lZ2EsdWgsdGhldGFzeW0sdWksdXBzaWgsdW0scGl2LDgxMixidWxsLDgxNixoZWxsaXAsJyArXG5cdFx0JzgxaSxwcmltZSw4MWosUHJpbWUsODF1LG9saW5lLDgyNCxmcmFzbCw4OG8sd2VpZXJwLDg4aCxpbWFnZSw4OHMscmVhbCw4OTIsdHJhZGUsODlsLGFsZWZzeW0sJyArXG5cdFx0JzhjZyxsYXJyLDhjaCx1YXJyLDhjaSxyYXJyLDhjaixkYXJyLDhjayxoYXJyLDhkbCxjcmFyciw4ZWcsbEFyciw4ZWgsdUFyciw4ZWksckFyciw4ZWosZEFyciwnICtcblx0XHQnOGVrLGhBcnIsOGcwLGZvcmFsbCw4ZzIscGFydCw4ZzMsZXhpc3QsOGc1LGVtcHR5LDhnNyxuYWJsYSw4ZzgsaXNpbiw4Zzksbm90aW4sOGdiLG5pLDhnZixwcm9kLCcgK1xuXHRcdCc4Z2gsc3VtLDhnaSxtaW51cyw4Z24sbG93YXN0LDhncSxyYWRpYyw4Z3QscHJvcCw4Z3UsaW5maW4sOGgwLGFuZyw4aDcsYW5kLDhoOCxvciw4aDksY2FwLDhoYSxjdXAsJyArXG5cdFx0JzhoYixpbnQsOGhrLHRoZXJlNCw4aHMsc2ltLDhpNSxjb25nLDhpOCxhc3ltcCw4ajAsbmUsOGoxLGVxdWl2LDhqNCxsZSw4ajUsZ2UsOGsyLHN1Yiw4azMsc3VwLDhrNCwnICtcblx0XHQnbnN1Yiw4azYsc3ViZSw4azcsc3VwZSw4a2wsb3BsdXMsOGtuLG90aW1lcyw4bDUscGVycCw4bTUsc2RvdCw4bzgsbGNlaWwsOG85LHJjZWlsLDhvYSxsZmxvb3IsOG9iLCcgK1xuXHRcdCdyZmxvb3IsOHA5LGxhbmcsOHBhLHJhbmcsOWVhLGxveiw5ajAsc3BhZGVzLDlqMyxjbHVicyw5ajUsaGVhcnRzLDlqNixkaWFtcyxhaSxPRWxpZyxhaixvZWxpZyxiMCwnICtcblx0XHQnU2Nhcm9uLGIxLHNjYXJvbixibyxZdW1sLG02LGNpcmMsbXMsdGlsZGUsODAyLGVuc3AsODAzLGVtc3AsODA5LHRoaW5zcCw4MGMsenduaiw4MGQsendqLDgwZSxscm0sJyArXG5cdFx0JzgwZixybG0sODBqLG5kYXNoLDgwayxtZGFzaCw4MG8sbHNxdW8sODBwLHJzcXVvLDgwcSxzYnF1byw4MHMsbGRxdW8sODB0LHJkcXVvLDgwdSxiZHF1byw4MTAsZGFnZ2VyLCcgK1xuXHRcdCc4MTEsRGFnZ2VyLDgxZyxwZXJtaWwsODFwLGxzYXF1byw4MXEscnNhcXVvLDg1YyxldXJvJywgMzIpO1xuXG5cdHZhciBFbnRpdGllcyA9IHtcblx0XHQvKipcblx0XHQgKiBFbmNvZGVzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIHVzaW5nIHJhdyBlbnRpdGllcy4gVGhpcyBtZWFucyBvbmx5IHRoZSByZXF1aXJlZCBYTUwgYmFzZSBlbnRpdGllcyB3aWxsIGJlIGVuY29kZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGVuY29kZVJhd1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRleHQgdG8gZW5jb2RlLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gYXR0ciBPcHRpb25hbCBmbGFnIHRvIHNwZWNpZnkgaWYgdGhlIHRleHQgaXMgYXR0cmlidXRlIGNvbnRlbnRzLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gRW50aXR5IGVuY29kZWQgdGV4dC5cblx0XHQgKi9cblx0XHRlbmNvZGVSYXc6IGZ1bmN0aW9uKHRleHQsIGF0dHIpIHtcblx0XHRcdHJldHVybiB0ZXh0LnJlcGxhY2UoYXR0ciA/IGF0dHJzQ2hhcnNSZWdFeHAgOiB0ZXh0Q2hhcnNSZWdFeHAsIGZ1bmN0aW9uKGNocikge1xuXHRcdFx0XHRyZXR1cm4gYmFzZUVudGl0aWVzW2Nocl0gfHwgY2hyO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEVuY29kZWQgdGhlIHNwZWNpZmllZCB0ZXh0IHdpdGggYm90aCB0aGUgYXR0cmlidXRlcyBhbmQgdGV4dCBlbnRpdGllcy4gVGhpcyBmdW5jdGlvbiB3aWxsIHByb2R1Y2UgbGFyZ2VyIHRleHQgY29udGVudHNcblx0XHQgKiBzaW5jZSBpdCBkb2Vzbid0IGtub3cgaWYgdGhlIGNvbnRleHQgaXMgd2l0aGluIGEgYXR0cmlidXRlIG9yIHRleHQgbm9kZS4gVGhpcyB3YXMgYWRkZWQgZm9yIGNvbXBhdGliaWxpdHlcblx0XHQgKiBhbmQgaXMgZXhwb3NlZCBhcyB0aGUgRE9NVXRpbHMuZW5jb2RlIGZ1bmN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBlbmNvZGVBbGxSYXdcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBUZXh0IHRvIGVuY29kZS5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEVudGl0eSBlbmNvZGVkIHRleHQuXG5cdFx0ICovXG5cdFx0ZW5jb2RlQWxsUmF3OiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0XHRyZXR1cm4gKCcnICsgdGV4dCkucmVwbGFjZShyYXdDaGFyc1JlZ0V4cCwgZnVuY3Rpb24oY2hyKSB7XG5cdFx0XHRcdHJldHVybiBiYXNlRW50aXRpZXNbY2hyXSB8fCBjaHI7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyB1c2luZyBudW1lcmljIGVudGl0aWVzLiBUaGUgY29yZSBlbnRpdGllcyB3aWxsIGJlXG5cdFx0ICogZW5jb2RlZCBhcyBuYW1lZCBvbmVzIGJ1dCBhbGwgbm9uIGxvd2VyIGFzY2lpIGNoYXJhY3RlcnMgd2lsbCBiZSBlbmNvZGVkIGludG8gbnVtZXJpYyBlbnRpdGllcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZW5jb2RlTnVtZXJpY1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRleHQgdG8gZW5jb2RlLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gYXR0ciBPcHRpb25hbCBmbGFnIHRvIHNwZWNpZnkgaWYgdGhlIHRleHQgaXMgYXR0cmlidXRlIGNvbnRlbnRzLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gRW50aXR5IGVuY29kZWQgdGV4dC5cblx0XHQgKi9cblx0XHRlbmNvZGVOdW1lcmljOiBmdW5jdGlvbih0ZXh0LCBhdHRyKSB7XG5cdFx0XHRyZXR1cm4gdGV4dC5yZXBsYWNlKGF0dHIgPyBhdHRyc0NoYXJzUmVnRXhwIDogdGV4dENoYXJzUmVnRXhwLCBmdW5jdGlvbihjaHIpIHtcblx0XHRcdFx0Ly8gTXVsdGkgYnl0ZSBzZXF1ZW5jZSBjb252ZXJ0IGl0IHRvIGEgc2luZ2xlIGVudGl0eVxuXHRcdFx0XHRpZiAoY2hyLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyYjJyArICgoKGNoci5jaGFyQ29kZUF0KDApIC0gMHhEODAwKSAqIDB4NDAwKSArIChjaHIuY2hhckNvZGVBdCgxKSAtIDB4REMwMCkgKyAweDEwMDAwKSArICc7Jztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBiYXNlRW50aXRpZXNbY2hyXSB8fCAnJiMnICsgY2hyLmNoYXJDb2RlQXQoMCkgKyAnOyc7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyB1c2luZyBuYW1lZCBlbnRpdGllcy4gVGhlIGNvcmUgZW50aXRpZXMgd2lsbCBiZSBlbmNvZGVkXG5cdFx0ICogYXMgbmFtZWQgb25lcyBidXQgYWxsIG5vbiBsb3dlciBhc2NpaSBjaGFyYWN0ZXJzIHdpbGwgYmUgZW5jb2RlZCBpbnRvIG5hbWVkIGVudGl0aWVzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBlbmNvZGVOYW1lZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRleHQgdG8gZW5jb2RlLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gYXR0ciBPcHRpb25hbCBmbGFnIHRvIHNwZWNpZnkgaWYgdGhlIHRleHQgaXMgYXR0cmlidXRlIGNvbnRlbnRzLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBlbnRpdGllcyBPcHRpb25hbCBwYXJhbWV0ZXIgd2l0aCBlbnRpdGllcyB0byB1c2UuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBFbnRpdHkgZW5jb2RlZCB0ZXh0LlxuXHRcdCAqL1xuXHRcdGVuY29kZU5hbWVkOiBmdW5jdGlvbih0ZXh0LCBhdHRyLCBlbnRpdGllcykge1xuXHRcdFx0ZW50aXRpZXMgPSBlbnRpdGllcyB8fCBuYW1lZEVudGl0aWVzO1xuXG5cdFx0XHRyZXR1cm4gdGV4dC5yZXBsYWNlKGF0dHIgPyBhdHRyc0NoYXJzUmVnRXhwIDogdGV4dENoYXJzUmVnRXhwLCBmdW5jdGlvbihjaHIpIHtcblx0XHRcdFx0cmV0dXJuIGJhc2VFbnRpdGllc1tjaHJdIHx8IGVudGl0aWVzW2Nocl0gfHwgY2hyO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYW4gZW5jb2RlIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBuYW1lKHMpIGFuZCBpdCdzIG9wdGlvbmFsIGVudGl0aWVzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRFbmNvZGVGdW5jXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZW5jb2RlcnMgZm9yIGV4YW1wbGUgbmFtZWQsbnVtZXJpYy5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gZW50aXRpZXMgT3B0aW9uYWwgcGFyYW1ldGVyIHdpdGggZW50aXRpZXMgdG8gdXNlIGluc3RlYWQgb2YgdGhlIGJ1aWx0IGluIHNldC5cblx0XHQgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRW5jb2RlIGZ1bmN0aW9uIHRvIGJlIHVzZWQuXG5cdFx0ICovXG5cdFx0Z2V0RW5jb2RlRnVuYzogZnVuY3Rpb24obmFtZSwgZW50aXRpZXMpIHtcblx0XHRcdGVudGl0aWVzID0gYnVpbGRFbnRpdGllc0xvb2t1cChlbnRpdGllcykgfHwgbmFtZWRFbnRpdGllcztcblxuXHRcdFx0ZnVuY3Rpb24gZW5jb2RlTmFtZWRBbmROdW1lcmljKHRleHQsIGF0dHIpIHtcblx0XHRcdFx0cmV0dXJuIHRleHQucmVwbGFjZShhdHRyID8gYXR0cnNDaGFyc1JlZ0V4cCA6IHRleHRDaGFyc1JlZ0V4cCwgZnVuY3Rpb24oY2hyKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJhc2VFbnRpdGllc1tjaHJdIHx8IGVudGl0aWVzW2Nocl0gfHwgJyYjJyArIGNoci5jaGFyQ29kZUF0KDApICsgJzsnIHx8IGNocjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGVuY29kZUN1c3RvbU5hbWVkKHRleHQsIGF0dHIpIHtcblx0XHRcdFx0cmV0dXJuIEVudGl0aWVzLmVuY29kZU5hbWVkKHRleHQsIGF0dHIsIGVudGl0aWVzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVwbGFjZSArIHdpdGggLCB0byBiZSBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMgVGlueU1DRSB2ZXJzaW9uc1xuXHRcdFx0bmFtZSA9IG1ha2VNYXAobmFtZS5yZXBsYWNlKC9cXCsvZywgJywnKSk7XG5cblx0XHRcdC8vIE5hbWVkIGFuZCBudW1lcmljIGVuY29kZXJcblx0XHRcdGlmIChuYW1lLm5hbWVkICYmIG5hbWUubnVtZXJpYykge1xuXHRcdFx0XHRyZXR1cm4gZW5jb2RlTmFtZWRBbmROdW1lcmljO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYW1lZCBlbmNvZGVyXG5cdFx0XHRpZiAobmFtZS5uYW1lZCkge1xuXHRcdFx0XHQvLyBDdXN0b20gbmFtZXNcblx0XHRcdFx0aWYgKGVudGl0aWVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuY29kZUN1c3RvbU5hbWVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIEVudGl0aWVzLmVuY29kZU5hbWVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOdW1lcmljXG5cdFx0XHRpZiAobmFtZS5udW1lcmljKSB7XG5cdFx0XHRcdHJldHVybiBFbnRpdGllcy5lbmNvZGVOdW1lcmljO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSYXcgZW5jb2RlclxuXHRcdFx0cmV0dXJuIEVudGl0aWVzLmVuY29kZVJhdztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRGVjb2RlcyB0aGUgc3BlY2lmaWVkIHN0cmluZywgdGhpcyB3aWxsIHJlcGxhY2UgZW50aXRpZXMgd2l0aCByYXcgVVRGIGNoYXJhY3RlcnMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGRlY29kZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRleHQgdG8gZW50aXR5IGRlY29kZS5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEVudGl0eSBkZWNvZGVkIHN0cmluZy5cblx0XHQgKi9cblx0XHRkZWNvZGU6IGZ1bmN0aW9uKHRleHQpIHtcblx0XHRcdHJldHVybiB0ZXh0LnJlcGxhY2UoZW50aXR5UmVnRXhwLCBmdW5jdGlvbihhbGwsIG51bWVyaWMpIHtcblx0XHRcdFx0aWYgKG51bWVyaWMpIHtcblx0XHRcdFx0XHRpZiAobnVtZXJpYy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSA9PT0gJ3gnKSB7XG5cdFx0XHRcdFx0XHRudW1lcmljID0gcGFyc2VJbnQobnVtZXJpYy5zdWJzdHIoMSksIDE2KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bnVtZXJpYyA9IHBhcnNlSW50KG51bWVyaWMsIDEwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0IHVwcGVyIFVURlxuXHRcdFx0XHRcdGlmIChudW1lcmljID4gMHhGRkZGKSB7XG5cdFx0XHRcdFx0XHRudW1lcmljIC09IDB4MTAwMDA7XG5cblx0XHRcdFx0XHRcdHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgwMCArIChudW1lcmljID4+IDEwKSwgMHhEQzAwICsgKG51bWVyaWMgJiAweDNGRikpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBhc2NpaU1hcFtudW1lcmljXSB8fCBTdHJpbmcuZnJvbUNoYXJDb2RlKG51bWVyaWMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJldmVyc2VFbnRpdGllc1thbGxdIHx8IG5hbWVkRW50aXRpZXNbYWxsXSB8fCBuYXRpdmVEZWNvZGUoYWxsKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gRW50aXRpZXM7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2RvbS9TdHlsZVNoZWV0TG9hZGVyLmpzXG5cbi8qKlxuICogU3R5bGVTaGVldExvYWRlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGFuZGxlcyBsb2FkaW5nIG9mIGV4dGVybmFsIHN0eWxlc2hlZXRzIGFuZCBmaXJlcyBldmVudHMgd2hlbiB0aGVzZSBhcmUgbG9hZGVkLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLmRvbS5TdHlsZVNoZWV0TG9hZGVyXG4gKiBAcHJpdmF0ZVxuICovXG5kZWZpbmUoXCJ0aW55bWNlL2RvbS9TdHlsZVNoZWV0TG9hZGVyXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL3V0aWwvRGVsYXlcIlxuXSwgZnVuY3Rpb24oVG9vbHMsIERlbGF5KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBmdW5jdGlvbihkb2N1bWVudCwgc2V0dGluZ3MpIHtcblx0XHR2YXIgaWRDb3VudCA9IDAsIGxvYWRlZFN0YXRlcyA9IHt9LCBtYXhMb2FkVGltZTtcblxuXHRcdHNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XG5cdFx0bWF4TG9hZFRpbWUgPSBzZXR0aW5ncy5tYXhMb2FkVGltZSB8fCA1MDAwO1xuXG5cdFx0ZnVuY3Rpb24gYXBwZW5kVG9IZWFkKG5vZGUpIHtcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQobm9kZSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogTG9hZHMgdGhlIHNwZWNpZmllZCBjc3Mgc3R5bGUgc2hlZXQgZmlsZSBhbmQgY2FsbCB0aGUgbG9hZGVkQ2FsbGJhY2sgb25jZSBpdCdzIGZpbmlzaGVkIGxvYWRpbmcuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGxvYWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFVybCB0byBiZSBsb2FkZWQuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbG9hZGVkQ2FsbGJhY2sgQ2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbiBsb2FkZWQuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3JDYWxsYmFjayBDYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuIGZhaWxlZCBsb2FkaW5nLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGxvYWQodXJsLCBsb2FkZWRDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0dmFyIGxpbmssIHN0eWxlLCBzdGFydFRpbWUsIHN0YXRlO1xuXG5cdFx0XHRmdW5jdGlvbiBwYXNzZWQoKSB7XG5cdFx0XHRcdHZhciBjYWxsYmFja3MgPSBzdGF0ZS5wYXNzZWQsIGkgPSBjYWxsYmFja3MubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRjYWxsYmFja3NbaV0oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXRlLnN0YXR1cyA9IDI7XG5cdFx0XHRcdHN0YXRlLnBhc3NlZCA9IFtdO1xuXHRcdFx0XHRzdGF0ZS5mYWlsZWQgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZmFpbGVkKCkge1xuXHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gc3RhdGUuZmFpbGVkLCBpID0gY2FsbGJhY2tzLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2tzW2ldKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGF0ZS5zdGF0dXMgPSAzO1xuXHRcdFx0XHRzdGF0ZS5wYXNzZWQgPSBbXTtcblx0XHRcdFx0c3RhdGUuZmFpbGVkID0gW107XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNuaWZmcyBmb3Igb2xkZXIgV2ViS2l0IHZlcnNpb25zIHRoYXQgaGF2ZSB0aGUgbGluay5vbmxvYWQgYnV0IGEgYnJva2VuIG9uZVxuXHRcdFx0ZnVuY3Rpb24gaXNPbGRXZWJLaXQoKSB7XG5cdFx0XHRcdHZhciB3ZWJLaXRDaHVua3MgPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9XZWJLaXRcXC8oXFxkKikvKTtcblx0XHRcdFx0cmV0dXJuICEhKHdlYktpdENodW5rcyAmJiB3ZWJLaXRDaHVua3NbMV0gPCA1MzYpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxscyB0aGUgd2FpdENhbGxiYWNrIHVudGlsIHRoZSB0ZXN0IHJldHVybnMgdHJ1ZSBvciB0aGUgdGltZW91dCBvY2N1cnNcblx0XHRcdGZ1bmN0aW9uIHdhaXQodGVzdENhbGxiYWNrLCB3YWl0Q2FsbGJhY2spIHtcblx0XHRcdFx0aWYgKCF0ZXN0Q2FsbGJhY2soKSkge1xuXHRcdFx0XHRcdC8vIFdhaXQgZm9yIHRpbWVvdXRcblx0XHRcdFx0XHRpZiAoKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSAtIHN0YXJ0VGltZSA8IG1heExvYWRUaW1lKSB7XG5cdFx0XHRcdFx0XHREZWxheS5zZXRUaW1lb3V0KHdhaXRDYWxsYmFjayk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZhaWxlZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBXb3JrYXJvdW5kIGZvciBXZWJLaXQgdGhhdCBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgdGhlIG9ubG9hZCBldmVudCBmb3IgbGluayBlbGVtZW50c1xuXHRcdFx0Ly8gT3IgV2ViS2l0IHRoYXQgZmlyZXMgdGhlIG9ubG9hZCBldmVudCBiZWZvcmUgdGhlIFN0eWxlU2hlZXQgaXMgYWRkZWQgdG8gdGhlIGRvY3VtZW50XG5cdFx0XHRmdW5jdGlvbiB3YWl0Rm9yV2ViS2l0TGlua0xvYWRlZCgpIHtcblx0XHRcdFx0d2FpdChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgc3R5bGVTaGVldHMgPSBkb2N1bWVudC5zdHlsZVNoZWV0cywgc3R5bGVTaGVldCwgaSA9IHN0eWxlU2hlZXRzLmxlbmd0aCwgb3duZXI7XG5cblx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHNbaV07XG5cdFx0XHRcdFx0XHRvd25lciA9IHN0eWxlU2hlZXQub3duZXJOb2RlID8gc3R5bGVTaGVldC5vd25lck5vZGUgOiBzdHlsZVNoZWV0Lm93bmluZ0VsZW1lbnQ7XG5cdFx0XHRcdFx0XHRpZiAob3duZXIgJiYgb3duZXIuaWQgPT09IGxpbmsuaWQpIHtcblx0XHRcdFx0XHRcdFx0cGFzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgd2FpdEZvcldlYktpdExpbmtMb2FkZWQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXb3JrYXJvdW5kIGZvciBvbGRlciBHZWNrb3MgdGhhdCBkb2Vzbid0IGhhdmUgYW55IG9ubG9hZCBldmVudCBmb3IgU3R5bGVTaGVldHNcblx0XHRcdGZ1bmN0aW9uIHdhaXRGb3JHZWNrb0xpbmtMb2FkZWQoKSB7XG5cdFx0XHRcdHdhaXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdC8vIEFjY2Vzc2luZyB0aGUgY3NzUnVsZXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gdW50aWwgdGhlIENTUyBmaWxlIGlzIGxvYWRlZFxuXHRcdFx0XHRcdFx0dmFyIGNzc1J1bGVzID0gc3R5bGUuc2hlZXQuY3NzUnVsZXM7XG5cdFx0XHRcdFx0XHRwYXNzZWQoKTtcblx0XHRcdFx0XHRcdHJldHVybiAhIWNzc1J1bGVzO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0XHQvLyBJZ25vcmVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIHdhaXRGb3JHZWNrb0xpbmtMb2FkZWQpO1xuXHRcdFx0fVxuXG5cdFx0XHR1cmwgPSBUb29scy5fYWRkQ2FjaGVTdWZmaXgodXJsKTtcblxuXHRcdFx0aWYgKCFsb2FkZWRTdGF0ZXNbdXJsXSkge1xuXHRcdFx0XHRzdGF0ZSA9IHtcblx0XHRcdFx0XHRwYXNzZWQ6IFtdLFxuXHRcdFx0XHRcdGZhaWxlZDogW11cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRsb2FkZWRTdGF0ZXNbdXJsXSA9IHN0YXRlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUgPSBsb2FkZWRTdGF0ZXNbdXJsXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxvYWRlZENhbGxiYWNrKSB7XG5cdFx0XHRcdHN0YXRlLnBhc3NlZC5wdXNoKGxvYWRlZENhbGxiYWNrKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0c3RhdGUuZmFpbGVkLnB1c2goZXJyb3JDYWxsYmFjayk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElzIGxvYWRpbmcgd2FpdCBmb3IgaXQgdG8gcGFzc1xuXHRcdFx0aWYgKHN0YXRlLnN0YXR1cyA9PSAxKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSGFzIGZpbmlzaGVkIGxvYWRpbmcgYW5kIHdhcyBzdWNjZXNzXG5cdFx0XHRpZiAoc3RhdGUuc3RhdHVzID09IDIpIHtcblx0XHRcdFx0cGFzc2VkKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSGFzIGZpbmlzaGVkIGxvYWRpbmcgYW5kIHdhcyBhIGZhaWx1cmVcblx0XHRcdGlmIChzdGF0ZS5zdGF0dXMgPT0gMykge1xuXHRcdFx0XHRmYWlsZWQoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCBsb2FkaW5nXG5cdFx0XHRzdGF0ZS5zdGF0dXMgPSAxO1xuXHRcdFx0bGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcblx0XHRcdGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuXHRcdFx0bGluay50eXBlID0gJ3RleHQvY3NzJztcblx0XHRcdGxpbmsuaWQgPSAndScgKyAoaWRDb3VudCsrKTtcblx0XHRcdGxpbmsuYXN5bmMgPSBmYWxzZTtcblx0XHRcdGxpbmsuZGVmZXIgPSBmYWxzZTtcblx0XHRcdHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0XHQvLyBGZWF0dXJlIGRldGVjdCBvbmxvYWQgb24gbGluayBlbGVtZW50IGFuZCBzbmlmZiBvbGRlciB3ZWJraXRzIHNpbmNlIGl0IGhhcyBhbiBicm9rZW4gb25sb2FkIGV2ZW50XG5cdFx0XHRpZiAoXCJvbmxvYWRcIiBpbiBsaW5rICYmICFpc09sZFdlYktpdCgpKSB7XG5cdFx0XHRcdGxpbmsub25sb2FkID0gd2FpdEZvcldlYktpdExpbmtMb2FkZWQ7XG5cdFx0XHRcdGxpbmsub25lcnJvciA9IGZhaWxlZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFNuaWZmIGZvciBvbGQgRmlyZWZveCB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb25sb2FkIGV2ZW50IG9uIGxpbmsgZWxlbWVudHNcblx0XHRcdFx0Ly8gVE9ETzogUmVtb3ZlIHRoaXMgaW4gdGhlIGZ1dHVyZSB3aGVuIGV2ZXJ5b25lIHVzZXMgbW9kZXJuIGJyb3dzZXJzXG5cdFx0XHRcdGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJGaXJlZm94XCIpID4gMCkge1xuXHRcdFx0XHRcdHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblx0XHRcdFx0XHRzdHlsZS50ZXh0Q29udGVudCA9ICdAaW1wb3J0IFwiJyArIHVybCArICdcIic7XG5cdFx0XHRcdFx0d2FpdEZvckdlY2tvTGlua0xvYWRlZCgpO1xuXHRcdFx0XHRcdGFwcGVuZFRvSGVhZChzdHlsZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVXNlIHRoZSBpZCBvd25lciBvbiBvbGRlciB3ZWJraXRzXG5cdFx0XHRcdHdhaXRGb3JXZWJLaXRMaW5rTG9hZGVkKCk7XG5cdFx0XHR9XG5cblx0XHRcdGFwcGVuZFRvSGVhZChsaW5rKTtcblx0XHRcdGxpbmsuaHJlZiA9IHVybDtcblx0XHR9XG5cblx0XHR0aGlzLmxvYWQgPSBsb2FkO1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9kb20vRE9NVXRpbHMuanNcblxuLyoqXG4gKiBET01VdGlscy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIHZhcmlvdXMgRE9NIG1hbmlwdWxhdGlvbiBhbmQgcmV0cmlldmFsIGZ1bmN0aW9ucy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5kb20uRE9NVXRpbHNcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgYSBjbGFzcyB0byBhbiBlbGVtZW50IGJ5IGlkIGluIHRoZSBwYWdlXG4gKiB0aW55bWNlLkRPTS5hZGRDbGFzcygnc29tZWlkJywgJ3NvbWVjbGFzcycpO1xuICpcbiAqIC8vIEFkZCBhIGNsYXNzIHRvIGFuIGVsZW1lbnQgYnkgaWQgaW5zaWRlIHRoZSBlZGl0b3JcbiAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5hZGRDbGFzcygnc29tZWlkJywgJ3NvbWVjbGFzcycpO1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL2RvbS9ET01VdGlsc1wiLCBbXG5cdFwidGlueW1jZS9kb20vU2l6emxlXCIsXG5cdFwidGlueW1jZS9kb20vRG9tUXVlcnlcIixcblx0XCJ0aW55bWNlL2h0bWwvU3R5bGVzXCIsXG5cdFwidGlueW1jZS9kb20vRXZlbnRVdGlsc1wiLFxuXHRcInRpbnltY2UvZG9tL1RyZWVXYWxrZXJcIixcblx0XCJ0aW55bWNlL2RvbS9SYW5nZVwiLFxuXHRcInRpbnltY2UvaHRtbC9FbnRpdGllc1wiLFxuXHRcInRpbnltY2UvRW52XCIsXG5cdFwidGlueW1jZS91dGlsL1Rvb2xzXCIsXG5cdFwidGlueW1jZS9kb20vU3R5bGVTaGVldExvYWRlclwiXG5dLCBmdW5jdGlvbihTaXp6bGUsICQsIFN0eWxlcywgRXZlbnRVdGlscywgVHJlZVdhbGtlciwgUmFuZ2UsIEVudGl0aWVzLCBFbnYsIFRvb2xzLCBTdHlsZVNoZWV0TG9hZGVyKSB7XG5cdC8vIFNob3J0ZW4gbmFtZXNcblx0dmFyIGVhY2ggPSBUb29scy5lYWNoLCBpcyA9IFRvb2xzLmlzLCBncmVwID0gVG9vbHMuZ3JlcCwgdHJpbSA9IFRvb2xzLnRyaW07XG5cdHZhciBpc0lFID0gRW52LmllO1xuXHR2YXIgc2ltcGxlU2VsZWN0b3JSZSA9IC9eKFthLXowLTldLD8pKyQvaTtcblx0dmFyIHdoaXRlU3BhY2VSZWdFeHAgPSAvXlsgXFx0XFxyXFxuXSokLztcblxuXHRmdW5jdGlvbiBzZXR1cEF0dHJIb29rcyhkb21VdGlscywgc2V0dGluZ3MpIHtcblx0XHR2YXIgYXR0ckhvb2tzID0ge30sIGtlZXBWYWx1ZXMgPSBzZXR0aW5ncy5rZWVwX3ZhbHVlcywga2VlcFVybEhvb2s7XG5cblx0XHRrZWVwVXJsSG9vayA9IHtcblx0XHRcdHNldDogZnVuY3Rpb24oJGVsbSwgdmFsdWUsIG5hbWUpIHtcblx0XHRcdFx0aWYgKHNldHRpbmdzLnVybF9jb252ZXJ0ZXIpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHNldHRpbmdzLnVybF9jb252ZXJ0ZXIuY2FsbChzZXR0aW5ncy51cmxfY29udmVydGVyX3Njb3BlIHx8IGRvbVV0aWxzLCB2YWx1ZSwgbmFtZSwgJGVsbVswXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkZWxtLmF0dHIoJ2RhdGEtbWNlLScgKyBuYW1lLCB2YWx1ZSkuYXR0cihuYW1lLCB2YWx1ZSk7XG5cdFx0XHR9LFxuXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCRlbG0sIG5hbWUpIHtcblx0XHRcdFx0cmV0dXJuICRlbG0uYXR0cignZGF0YS1tY2UtJyArIG5hbWUpIHx8ICRlbG0uYXR0cihuYW1lKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0YXR0ckhvb2tzID0ge1xuXHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0c2V0OiBmdW5jdGlvbigkZWxtLCB2YWx1ZSkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0XHQkZWxtLmNzcyh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGtlZXBWYWx1ZXMpIHtcblx0XHRcdFx0XHRcdCRlbG0uYXR0cignZGF0YS1tY2Utc3R5bGUnLCB2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JGVsbS5hdHRyKCdzdHlsZScsIHZhbHVlKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uKCRlbG0pIHtcblx0XHRcdFx0XHR2YXIgdmFsdWUgPSAkZWxtLmF0dHIoJ2RhdGEtbWNlLXN0eWxlJykgfHwgJGVsbS5hdHRyKCdzdHlsZScpO1xuXG5cdFx0XHRcdFx0dmFsdWUgPSBkb21VdGlscy5zZXJpYWxpemVTdHlsZShkb21VdGlscy5wYXJzZVN0eWxlKHZhbHVlKSwgJGVsbVswXS5ub2RlTmFtZSk7XG5cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGtlZXBWYWx1ZXMpIHtcblx0XHRcdGF0dHJIb29rcy5ocmVmID0gYXR0ckhvb2tzLnNyYyA9IGtlZXBVcmxIb29rO1xuXHRcdH1cblxuXHRcdHJldHVybiBhdHRySG9va3M7XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVJbnRlcm5hbFN0eWxlQXR0cihkb21VdGlscywgJGVsbSkge1xuXHRcdHZhciB2YWx1ZSA9ICRlbG0uYXR0cignc3R5bGUnKTtcblxuXHRcdHZhbHVlID0gZG9tVXRpbHMuc2VyaWFsaXplU3R5bGUoZG9tVXRpbHMucGFyc2VTdHlsZSh2YWx1ZSksICRlbG1bMF0ubm9kZU5hbWUpO1xuXG5cdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0dmFsdWUgPSBudWxsO1xuXHRcdH1cblxuXHRcdCRlbG0uYXR0cignZGF0YS1tY2Utc3R5bGUnLCB2YWx1ZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBub2RlSW5kZXgobm9kZSwgbm9ybWFsaXplZCkge1xuXHRcdHZhciBpZHggPSAwLCBsYXN0Tm9kZVR5cGUsIG5vZGVUeXBlO1xuXG5cdFx0aWYgKG5vZGUpIHtcblx0XHRcdGZvciAobGFzdE5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZSwgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nOyBub2RlOyBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuXG5cdFx0XHRcdC8vIE5vcm1hbGl6ZSB0ZXh0IG5vZGVzXG5cdFx0XHRcdGlmIChub3JtYWxpemVkICYmIG5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRpZiAobm9kZVR5cGUgPT0gbGFzdE5vZGVUeXBlIHx8ICFub2RlLm5vZGVWYWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZHgrKztcblx0XHRcdFx0bGFzdE5vZGVUeXBlID0gbm9kZVR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlkeDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIGEgbmV3IERPTVV0aWxzIGluc3RhbmNlLiBDb25zdWx0IHRoZSBXaWtpIGZvciBtb3JlIGRldGFpbHMgb24gc2V0dGluZ3MgZXRjIGZvciB0aGlzIGNsYXNzLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQG1ldGhvZCBET01VdGlsc1xuXHQgKiBAcGFyYW0ge0RvY3VtZW50fSBkb2MgRG9jdW1lbnQgcmVmZXJlbmNlIHRvIGJpbmQgdGhlIHV0aWxpdHkgY2xhc3MgdG8uXG5cdCAqIEBwYXJhbSB7c2V0dGluZ3N9IHNldHRpbmdzIE9wdGlvbmFsIHNldHRpbmdzIGNvbGxlY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBET01VdGlscyhkb2MsIHNldHRpbmdzKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCBibG9ja0VsZW1lbnRzTWFwO1xuXG5cdFx0c2VsZi5kb2MgPSBkb2M7XG5cdFx0c2VsZi53aW4gPSB3aW5kb3c7XG5cdFx0c2VsZi5maWxlcyA9IHt9O1xuXHRcdHNlbGYuY291bnRlciA9IDA7XG5cdFx0c2VsZi5zdGRNb2RlID0gIWlzSUUgfHwgZG9jLmRvY3VtZW50TW9kZSA+PSA4O1xuXHRcdHNlbGYuYm94TW9kZWwgPSAhaXNJRSB8fCBkb2MuY29tcGF0TW9kZSA9PSBcIkNTUzFDb21wYXRcIiB8fCBzZWxmLnN0ZE1vZGU7XG5cdFx0c2VsZi5zdHlsZVNoZWV0TG9hZGVyID0gbmV3IFN0eWxlU2hlZXRMb2FkZXIoZG9jKTtcblx0XHRzZWxmLmJvdW5kRXZlbnRzID0gW107XG5cdFx0c2VsZi5zZXR0aW5ncyA9IHNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XG5cdFx0c2VsZi5zY2hlbWEgPSBzZXR0aW5ncy5zY2hlbWE7XG5cdFx0c2VsZi5zdHlsZXMgPSBuZXcgU3R5bGVzKHtcblx0XHRcdHVybF9jb252ZXJ0ZXI6IHNldHRpbmdzLnVybF9jb252ZXJ0ZXIsXG5cdFx0XHR1cmxfY29udmVydGVyX3Njb3BlOiBzZXR0aW5ncy51cmxfY29udmVydGVyX3Njb3BlXG5cdFx0fSwgc2V0dGluZ3Muc2NoZW1hKTtcblxuXHRcdHNlbGYuZml4RG9jKGRvYyk7XG5cdFx0c2VsZi5ldmVudHMgPSBzZXR0aW5ncy5vd25FdmVudHMgPyBuZXcgRXZlbnRVdGlscyhzZXR0aW5ncy5wcm94eSkgOiBFdmVudFV0aWxzLkV2ZW50O1xuXHRcdHNlbGYuYXR0ckhvb2tzID0gc2V0dXBBdHRySG9va3Moc2VsZiwgc2V0dGluZ3MpO1xuXHRcdGJsb2NrRWxlbWVudHNNYXAgPSBzZXR0aW5ncy5zY2hlbWEgPyBzZXR0aW5ncy5zY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpIDoge307XG5cdFx0c2VsZi4kID0gJC5vdmVycmlkZURlZmF1bHRzKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dDogZG9jLFxuXHRcdFx0XHRlbGVtZW50OiBzZWxmLmdldFJvb3QoKVxuXHRcdFx0fTtcblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgaXMgYSBibG9jayBlbGVtZW50IG9yIG5vdC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaXNCbG9ja1xuXHRcdCAqIEBwYXJhbSB7Tm9kZS9TdHJpbmd9IG5vZGUgRWxlbWVudC9Ob2RlIHRvIGNoZWNrLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUvRmFsc2Ugc3RhdGUgaWYgdGhlIG5vZGUgaXMgYSBibG9jayBlbGVtZW50IG9yIG5vdC5cblx0XHQgKi9cblx0XHRzZWxmLmlzQmxvY2sgPSBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHQvLyBGaXggZm9yICM1NDQ2XG5cdFx0XHRpZiAoIW5vZGUpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBtb2R1bGUgcGF0dGVybiBzdHlsZSBzaW5jZSBpdCBtaWdodCBiZSBleGVjdXRlZCB3aXRoIHRoZSB3cm9uZyB0aGlzIHNjb3BlXG5cdFx0XHR2YXIgdHlwZSA9IG5vZGUubm9kZVR5cGU7XG5cblx0XHRcdC8vIElmIGl0J3MgYSBub2RlIHRoZW4gY2hlY2sgdGhlIHR5cGUgYW5kIHVzZSB0aGUgbm9kZU5hbWVcblx0XHRcdGlmICh0eXBlKSB7XG5cdFx0XHRcdHJldHVybiAhISh0eXBlID09PSAxICYmIGJsb2NrRWxlbWVudHNNYXBbbm9kZS5ub2RlTmFtZV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gISFibG9ja0VsZW1lbnRzTWFwW25vZGVdO1xuXHRcdH07XG5cdH1cblxuXHRET01VdGlscy5wcm90b3R5cGUgPSB7XG5cdFx0JCQ6IGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0aWYgKHR5cGVvZiBlbG0gPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZWxtID0gdGhpcy5nZXQoZWxtKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuJChlbG0pO1xuXHRcdH0sXG5cblx0XHRyb290OiBudWxsLFxuXG5cdFx0Zml4RG9jOiBmdW5jdGlvbihkb2MpIHtcblx0XHRcdHZhciBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MsIG5hbWU7XG5cblx0XHRcdGlmIChpc0lFICYmIHNldHRpbmdzLnNjaGVtYSkge1xuXHRcdFx0XHQvLyBBZGQgbWlzc2luZyBIVE1MIDQvNSBlbGVtZW50cyB0byBJRVxuXHRcdFx0XHQoJ2FiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgJyArXG5cdFx0XHRcdCdkZXRhaWxzIGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciAnICtcblx0XHRcdFx0J2hlYWRlciBoZ3JvdXAgbWFyayBtZW51IG1ldGVyIG5hdiAnICtcblx0XHRcdFx0J291dHB1dCBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgJyArXG5cdFx0XHRcdCd0aW1lIHZpZGVvJykucmVwbGFjZSgvXFx3Ky9nLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRcdFx0ZG9jLmNyZWF0ZUVsZW1lbnQobmFtZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBhbGwgY3VzdG9tIGVsZW1lbnRzXG5cdFx0XHRcdGZvciAobmFtZSBpbiBzZXR0aW5ncy5zY2hlbWEuZ2V0Q3VzdG9tRWxlbWVudHMoKSkge1xuXHRcdFx0XHRcdGRvYy5jcmVhdGVFbGVtZW50KG5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNsb25lOiBmdW5jdGlvbihub2RlLCBkZWVwKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGNsb25lLCBkb2M7XG5cblx0XHRcdC8vIFRPRE86IEFkZCBmZWF0dXJlIGRldGVjdGlvbiBoZXJlIGluIHRoZSBmdXR1cmVcblx0XHRcdGlmICghaXNJRSB8fCBub2RlLm5vZGVUeXBlICE9PSAxIHx8IGRlZXApIHtcblx0XHRcdFx0cmV0dXJuIG5vZGUuY2xvbmVOb2RlKGRlZXApO1xuXHRcdFx0fVxuXG5cdFx0XHRkb2MgPSBzZWxmLmRvYztcblxuXHRcdFx0Ly8gTWFrZSBhIEhUTUw1IHNhZmUgc2hhbGxvdyBjb3B5XG5cdFx0XHRpZiAoIWRlZXApIHtcblx0XHRcdFx0Y2xvbmUgPSBkb2MuY3JlYXRlRWxlbWVudChub2RlLm5vZGVOYW1lKTtcblxuXHRcdFx0XHQvLyBDb3B5IGF0dHJpYnNcblx0XHRcdFx0ZWFjaChzZWxmLmdldEF0dHJpYnMobm9kZSksIGZ1bmN0aW9uKGF0dHIpIHtcblx0XHRcdFx0XHRzZWxmLnNldEF0dHJpYihjbG9uZSwgYXR0ci5ub2RlTmFtZSwgc2VsZi5nZXRBdHRyaWIobm9kZSwgYXR0ci5ub2RlTmFtZSkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gY2xvbmU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjbG9uZS5maXJzdENoaWxkO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSByb290IG5vZGUgb2YgdGhlIGRvY3VtZW50LiBUaGlzIGlzIG5vcm1hbGx5IHRoZSBib2R5IGJ1dCBtaWdodCBiZSBhIERJVi4gUGFyZW50cyBsaWtlIGdldFBhcmVudCB3aWxsIG5vdFxuXHRcdCAqIGdvIGFib3ZlIHRoZSBwb2ludCBvZiB0aGlzIHJvb3Qgbm9kZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0Um9vdFxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnR9IFJvb3QgZWxlbWVudCBmb3IgdGhlIHV0aWxpdHkgY2xhc3MuXG5cdFx0ICovXG5cdFx0Z2V0Um9vdDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHJldHVybiBzZWxmLnNldHRpbmdzLnJvb3RfZWxlbWVudCB8fCBzZWxmLmRvYy5ib2R5O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCBvZiB0aGUgd2luZG93LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRWaWV3UG9ydFxuXHRcdCAqIEBwYXJhbSB7V2luZG93fSB3aW4gT3B0aW9uYWwgd2luZG93IHRvIGdldCB2aWV3cG9ydCBvZi5cblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IFZpZXdwb3J0IG9iamVjdCB3aXRoIGZpZWxkcyB4LCB5LCB3IGFuZCBoLlxuXHRcdCAqL1xuXHRcdGdldFZpZXdQb3J0OiBmdW5jdGlvbih3aW4pIHtcblx0XHRcdHZhciBkb2MsIHJvb3RFbG07XG5cblx0XHRcdHdpbiA9ICF3aW4gPyB0aGlzLndpbiA6IHdpbjtcblx0XHRcdGRvYyA9IHdpbi5kb2N1bWVudDtcblx0XHRcdHJvb3RFbG0gPSB0aGlzLmJveE1vZGVsID8gZG9jLmRvY3VtZW50RWxlbWVudCA6IGRvYy5ib2R5O1xuXG5cdFx0XHQvLyBSZXR1cm5zIHZpZXdwb3J0IHNpemUgZXhjbHVkaW5nIHNjcm9sbGJhcnNcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IHdpbi5wYWdlWE9mZnNldCB8fCByb290RWxtLnNjcm9sbExlZnQsXG5cdFx0XHRcdHk6IHdpbi5wYWdlWU9mZnNldCB8fCByb290RWxtLnNjcm9sbFRvcCxcblx0XHRcdFx0dzogd2luLmlubmVyV2lkdGggfHwgcm9vdEVsbS5jbGllbnRXaWR0aCxcblx0XHRcdFx0aDogd2luLmlubmVySGVpZ2h0IHx8IHJvb3RFbG0uY2xpZW50SGVpZ2h0XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSByZWN0YW5nbGUgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0UmVjdFxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudC9TdHJpbmd9IGVsbSBFbGVtZW50IG9iamVjdCBvciBlbGVtZW50IElEIHRvIGdldCByZWN0YW5nbGUgZnJvbS5cblx0XHQgKiBAcmV0dXJuIHtvYmplY3R9IFJlY3RhbmdsZSBmb3Igc3BlY2lmaWVkIGVsZW1lbnQgb2JqZWN0IHdpdGggeCwgeSwgdywgaCBmaWVsZHMuXG5cdFx0ICovXG5cdFx0Z2V0UmVjdDogZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHBvcywgc2l6ZTtcblxuXHRcdFx0ZWxtID0gc2VsZi5nZXQoZWxtKTtcblx0XHRcdHBvcyA9IHNlbGYuZ2V0UG9zKGVsbSk7XG5cdFx0XHRzaXplID0gc2VsZi5nZXRTaXplKGVsbSk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IHBvcy54LCB5OiBwb3MueSxcblx0XHRcdFx0dzogc2l6ZS53LCBoOiBzaXplLmhcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHNpemUgZGltZW5zaW9ucyBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFNpemVcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnQvU3RyaW5nfSBlbG0gRWxlbWVudCBvYmplY3Qgb3IgZWxlbWVudCBJRCB0byBnZXQgcmVjdGFuZ2xlIGZyb20uXG5cdFx0ICogQHJldHVybiB7b2JqZWN0fSBSZWN0YW5nbGUgZm9yIHNwZWNpZmllZCBlbGVtZW50IG9iamVjdCB3aXRoIHcsIGggZmllbGRzLlxuXHRcdCAqL1xuXHRcdGdldFNpemU6IGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCB3LCBoO1xuXG5cdFx0XHRlbG0gPSBzZWxmLmdldChlbG0pO1xuXHRcdFx0dyA9IHNlbGYuZ2V0U3R5bGUoZWxtLCAnd2lkdGgnKTtcblx0XHRcdGggPSBzZWxmLmdldFN0eWxlKGVsbSwgJ2hlaWdodCcpO1xuXG5cdFx0XHQvLyBOb24gcGl4ZWwgdmFsdWUsIHRoZW4gZm9yY2Ugb2Zmc2V0L2NsaWVudFdpZHRoXG5cdFx0XHRpZiAody5pbmRleE9mKCdweCcpID09PSAtMSkge1xuXHRcdFx0XHR3ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTm9uIHBpeGVsIHZhbHVlLCB0aGVuIGZvcmNlIG9mZnNldC9jbGllbnRXaWR0aFxuXHRcdFx0aWYgKGguaW5kZXhPZigncHgnKSA9PT0gLTEpIHtcblx0XHRcdFx0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHc6IHBhcnNlSW50KHcsIDEwKSB8fCBlbG0ub2Zmc2V0V2lkdGggfHwgZWxtLmNsaWVudFdpZHRoLFxuXHRcdFx0XHRoOiBwYXJzZUludChoLCAxMCkgfHwgZWxtLm9mZnNldEhlaWdodCB8fCBlbG0uY2xpZW50SGVpZ2h0XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbm9kZSBieSB0aGUgc3BlY2lmaWVkIHNlbGVjdG9yIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHdpbGxcblx0XHQgKiBsb29wIHRocm91Z2ggYWxsIHBhcmVudCBub2RlcyBhbmQgY2FsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGZvciBlYWNoIG5vZGUuXG5cdFx0ICogSWYgdGhlIGZ1bmN0aW9uIHRoZW4gcmV0dXJucyB0cnVlIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgZm91bmQgd2hhdCBpdCB3YXMgbG9va2luZyBmb3IsIHRoZSBsb29wIGV4ZWN1dGlvbiB3aWxsIHRoZW4gZW5kXG5cdFx0ICogYW5kIHRoZSBub2RlIGl0IGZvdW5kIHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFBhcmVudFxuXHRcdCAqIEBwYXJhbSB7Tm9kZS9TdHJpbmd9IG5vZGUgRE9NIG5vZGUgdG8gc2VhcmNoIHBhcmVudHMgb24gb3IgSUQgc3RyaW5nLlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IHNlbGVjdG9yIFNlbGVjdGlvbiBmdW5jdGlvbiBvciBDU1Mgc2VsZWN0b3IgdG8gZXhlY3V0ZSBvbiBlYWNoIG5vZGUuXG5cdFx0ICogQHBhcmFtIHtOb2RlfSByb290IE9wdGlvbmFsIHJvb3QgZWxlbWVudCwgbmV2ZXIgZ28gYmV5b25kIHRoaXMgcG9pbnQuXG5cdFx0ICogQHJldHVybiB7Tm9kZX0gRE9NIE5vZGUgb3IgbnVsbCBpZiBpdCB3YXNuJ3QgZm91bmQuXG5cdFx0ICovXG5cdFx0Z2V0UGFyZW50OiBmdW5jdGlvbihub2RlLCBzZWxlY3Rvciwgcm9vdCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UGFyZW50cyhub2RlLCBzZWxlY3Rvciwgcm9vdCwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbm9kZSBsaXN0IG9mIGFsbCBwYXJlbnRzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IgZnVuY3Rpb24gb3IgcGF0dGVybi5cblx0XHQgKiBJZiB0aGUgZnVuY3Rpb24gdGhlbiByZXR1cm5zIHRydWUgaW5kaWNhdGluZyB0aGF0IGl0IGhhcyBmb3VuZCB3aGF0IGl0IHdhcyBsb29raW5nIGZvciBhbmQgdGhhdCBub2RlIHdpbGwgYmUgY29sbGVjdGVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRQYXJlbnRzXG5cdFx0ICogQHBhcmFtIHtOb2RlL1N0cmluZ30gbm9kZSBET00gbm9kZSB0byBzZWFyY2ggcGFyZW50cyBvbiBvciBJRCBzdHJpbmcuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gc2VsZWN0b3IgU2VsZWN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZWFjaCBub2RlIG9yIENTUyBwYXR0ZXJuLlxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gcm9vdCBPcHRpb25hbCByb290IGVsZW1lbnQsIG5ldmVyIGdvIGJleW9uZCB0aGlzIHBvaW50LlxuXHRcdCAqIEByZXR1cm4ge0FycmF5fSBBcnJheSBvZiBub2RlcyBvciBudWxsIGlmIGl0IHdhc24ndCBmb3VuZC5cblx0XHQgKi9cblx0XHRnZXRQYXJlbnRzOiBmdW5jdGlvbihub2RlLCBzZWxlY3Rvciwgcm9vdCwgY29sbGVjdCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBzZWxlY3RvclZhbCwgcmVzdWx0ID0gW107XG5cblx0XHRcdG5vZGUgPSBzZWxmLmdldChub2RlKTtcblx0XHRcdGNvbGxlY3QgPSBjb2xsZWN0ID09PSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIERlZmF1bHQgcm9vdCBvbiBpbmxpbmUgbW9kZVxuXHRcdFx0cm9vdCA9IHJvb3QgfHwgKHNlbGYuZ2V0Um9vdCgpLm5vZGVOYW1lICE9ICdCT0RZJyA/IHNlbGYuZ2V0Um9vdCgpLnBhcmVudE5vZGUgOiBudWxsKTtcblxuXHRcdFx0Ly8gV3JhcCBub2RlIG5hbWUgYXMgZnVuY1xuXHRcdFx0aWYgKGlzKHNlbGVjdG9yLCAnc3RyaW5nJykpIHtcblx0XHRcdFx0c2VsZWN0b3JWYWwgPSBzZWxlY3RvcjtcblxuXHRcdFx0XHRpZiAoc2VsZWN0b3IgPT09ICcqJykge1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5vZGUubm9kZVR5cGUgPT0gMTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNlbGYuaXMobm9kZSwgc2VsZWN0b3JWYWwpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0d2hpbGUgKG5vZGUpIHtcblx0XHRcdFx0aWYgKG5vZGUgPT0gcm9vdCB8fCAhbm9kZS5ub2RlVHlwZSB8fCBub2RlLm5vZGVUeXBlID09PSA5KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yKG5vZGUpKSB7XG5cdFx0XHRcdFx0aWYgKGNvbGxlY3QpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29sbGVjdCA/IHJlc3VsdCA6IG51bGw7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHNwZWNpZmllZCBlbGVtZW50IGJ5IElEIG9yIHRoZSBpbnB1dCBlbGVtZW50IGlmIGl0IGlzbid0IGEgc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRcblx0XHQgKiBAcGFyYW0ge1N0cmluZy9FbGVtZW50fSBuIEVsZW1lbnQgaWQgdG8gbG9vayBmb3Igb3IgZWxlbWVudCB0byBqdXN0IHBhc3MgdGhvdWdoLlxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnR9IEVsZW1lbnQgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBpZCBvciBudWxsIGlmIGl0IHdhc24ndCBmb3VuZC5cblx0XHQgKi9cblx0XHRnZXQ6IGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0dmFyIG5hbWU7XG5cblx0XHRcdGlmIChlbG0gJiYgdGhpcy5kb2MgJiYgdHlwZW9mIGVsbSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRuYW1lID0gZWxtO1xuXHRcdFx0XHRlbG0gPSB0aGlzLmRvYy5nZXRFbGVtZW50QnlJZChlbG0pO1xuXG5cdFx0XHRcdC8vIElFIGFuZCBPcGVyYSByZXR1cm5zIG1ldGEgZWxlbWVudHMgd2hlbiB0aGV5IG1hdGNoIHRoZSBzcGVjaWZpZWQgaW5wdXQgSUQsIGJ1dCBnZXRFbGVtZW50c0J5TmFtZSBzZWVtcyB0byBkbyB0aGUgdHJpY2tcblx0XHRcdFx0aWYgKGVsbSAmJiBlbG0uaWQgIT09IG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5kb2MuZ2V0RWxlbWVudHNCeU5hbWUobmFtZSlbMV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsbTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgbmV4dCBub2RlIHRoYXQgbWF0Y2hlcyBzZWxlY3RvciBvciBmdW5jdGlvblxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXROZXh0XG5cdFx0ICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgdG8gZmluZCBzaWJsaW5ncyBmcm9tLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL2Z1bmN0aW9ufSBzZWxlY3RvciBTZWxlY3RvciBDU1MgZXhwcmVzc2lvbiBvciBmdW5jdGlvbi5cblx0XHQgKiBAcmV0dXJuIHtOb2RlfSBOZXh0IG5vZGUgaXRlbSBtYXRjaGluZyB0aGUgc2VsZWN0b3Igb3IgbnVsbCBpZiBpdCB3YXNuJ3QgZm91bmQuXG5cdFx0ICovXG5cdFx0Z2V0TmV4dDogZnVuY3Rpb24obm9kZSwgc2VsZWN0b3IpIHtcblx0XHRcdHJldHVybiB0aGlzLl9maW5kU2liKG5vZGUsIHNlbGVjdG9yLCAnbmV4dFNpYmxpbmcnKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgcHJldmlvdXMgbm9kZSB0aGF0IG1hdGNoZXMgc2VsZWN0b3Igb3IgZnVuY3Rpb25cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0UHJldlxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRvIGZpbmQgc2libGluZ3MgZnJvbS5cblx0XHQgKiBAcGFyYW0ge1N0cmluZy9mdW5jdGlvbn0gc2VsZWN0b3IgU2VsZWN0b3IgQ1NTIGV4cHJlc3Npb24gb3IgZnVuY3Rpb24uXG5cdFx0ICogQHJldHVybiB7Tm9kZX0gUHJldmlvdXMgbm9kZSBpdGVtIG1hdGNoaW5nIHRoZSBzZWxlY3RvciBvciBudWxsIGlmIGl0IHdhc24ndCBmb3VuZC5cblx0XHQgKi9cblx0XHRnZXRQcmV2OiBmdW5jdGlvbihub2RlLCBzZWxlY3Rvcikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2ZpbmRTaWIobm9kZSwgc2VsZWN0b3IsICdwcmV2aW91c1NpYmxpbmcnKTtcblx0XHR9LFxuXG5cdFx0Ly8gI2lmbmRlZiBqcXVlcnlcblxuXHRcdC8qKlxuXHRcdCAqIFNlbGVjdHMgc3BlY2lmaWMgZWxlbWVudHMgYnkgYSBDU1MgbGV2ZWwgMyBwYXR0ZXJuLiBGb3IgZXhhbXBsZSBcImRpdiNhMSBwLnRlc3RcIi5cblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG9wdGltaXplZCBmb3IgdGhlIG1vc3QgY29tbW9uIHBhdHRlcm5zIG5lZWRlZCBpbiBUaW55TUNFIGJ1dCBpdCBhbHNvIHBlcmZvcm1zIHdlbGwgZW5vdWdoXG5cdFx0ICogb24gbW9yZSBjb21wbGV4IHBhdHRlcm5zLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZWxlY3Rcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgQ1NTIGxldmVsIDMgcGF0dGVybiB0byBzZWxlY3QvZmluZCBlbGVtZW50cyBieS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUgT3B0aW9uYWwgcm9vdCBlbGVtZW50L3Njb3BlIGVsZW1lbnQgdG8gc2VhcmNoIGluLlxuXHRcdCAqIEByZXR1cm4ge0FycmF5fSBBcnJheSB3aXRoIGFsbCBtYXRjaGVkIGVsZW1lbnRzLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gQWRkcyBhIGNsYXNzIHRvIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVkaXRvclxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5hZGRDbGFzcyh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2VsZWN0KCdwJyksICdzb21lY2xhc3MnKTtcblx0XHQgKlxuXHRcdCAqIC8vIEFkZHMgYSBjbGFzcyB0byBhbGwgc3BhbnMgdGhhdCBoYXZlIHRoZSB0ZXN0IGNsYXNzIGluIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVkaXRvclxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5hZGRDbGFzcyh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2VsZWN0KCdzcGFuLnRlc3QnKSwgJ3NvbWVjbGFzcycpXG5cdFx0ICovXG5cdFx0c2VsZWN0OiBmdW5jdGlvbihzZWxlY3Rvciwgc2NvcGUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0Lyplc2xpbnQgbmV3LWNhcDowICovXG5cdFx0XHRyZXR1cm4gU2l6emxlKHNlbGVjdG9yLCBzZWxmLmdldChzY29wZSkgfHwgc2VsZi5zZXR0aW5ncy5yb290X2VsZW1lbnQgfHwgc2VsZi5kb2MsIFtdKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgY3NzIHBhdHRlcm4uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGlzXG5cdFx0ICogQHBhcmFtIHtOb2RlL05vZGVMaXN0fSBlbG0gRE9NIG5vZGUgdG8gbWF0Y2ggb3IgYW4gYXJyYXkgb2Ygbm9kZXMgdG8gbWF0Y2guXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIENTUyBwYXR0ZXJuIHRvIG1hdGNoIHRoZSBlbGVtZW50IGFnYWluc3QuXG5cdFx0ICovXG5cdFx0aXM6IGZ1bmN0aW9uKGVsbSwgc2VsZWN0b3IpIHtcblx0XHRcdHZhciBpO1xuXG5cdFx0XHQvLyBJZiBpdCBpc24ndCBhbiBhcnJheSB0aGVuIHRyeSB0byBkbyBzb21lIHNpbXBsZSBzZWxlY3RvcnMgaW5zdGVhZCBvZiBTaXp6bGUgZm9yIHRvIGJvb3N0IHBlcmZvcm1hbmNlXG5cdFx0XHRpZiAoZWxtLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIFNpbXBsZSBhbGwgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKHNlbGVjdG9yID09PSAnKicpIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxtLm5vZGVUeXBlID09IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTaW1wbGUgc2VsZWN0b3IganVzdCBlbGVtZW50c1xuXHRcdFx0XHRpZiAoc2ltcGxlU2VsZWN0b3JSZS50ZXN0KHNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3IudG9Mb3dlckNhc2UoKS5zcGxpdCgvLC8pO1xuXHRcdFx0XHRcdGVsbSA9IGVsbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdFx0Zm9yIChpID0gc2VsZWN0b3IubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3RvcltpXSA9PSBlbG0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIElzIG5vbiBlbGVtZW50XG5cdFx0XHRpZiAoZWxtLm5vZGVUeXBlICYmIGVsbS5ub2RlVHlwZSAhPSAxKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGVsbXMgPSBlbG0ubm9kZVR5cGUgPyBbZWxtXSA6IGVsbTtcblxuXHRcdFx0Lyplc2xpbnQgbmV3LWNhcDowICovXG5cdFx0XHRyZXR1cm4gU2l6emxlKHNlbGVjdG9yLCBlbG1zWzBdLm93bmVyRG9jdW1lbnQgfHwgZWxtc1swXSwgbnVsbCwgZWxtcykubGVuZ3RoID4gMDtcblx0XHR9LFxuXG5cdFx0Ly8gI2VuZGlmXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudCB0byBhbm90aGVyIGVsZW1lbnQgb3IgZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvQXJyYXl9IHBhcmVudEVsbSBFbGVtZW50IGlkIHN0cmluZywgRE9NIG5vZGUgZWxlbWVudCBvciBhcnJheSBvZiBpZHMgb3IgZWxlbWVudHMgdG8gYWRkIHRvLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnR9IG5hbWUgTmFtZSBvZiBuZXcgZWxlbWVudCB0byBhZGQgb3IgZXhpc3RpbmcgZWxlbWVudCB0byBhZGQuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGF0dHJzIE9wdGlvbmFsIG9iamVjdCBjb2xsZWN0aW9uIHdpdGggYXJndW1lbnRzIHRvIGFkZCB0byB0aGUgbmV3IGVsZW1lbnQocykuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgT3B0aW9uYWwgaW5uZXIgSFRNTCBjb250ZW50cyB0byBhZGQgZm9yIGVhY2ggZWxlbWVudC5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IGNyZWF0ZSBPcHRpb25hbCBmbGFnIGlmIHRoZSBlbGVtZW50IHNob3VsZCBiZSBjcmVhdGVkIG9yIGFkZGVkLlxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnQvQXJyYXl9IEVsZW1lbnQgdGhhdCBnb3QgY3JlYXRlZCwgb3IgYW4gYXJyYXkgb2YgY3JlYXRlZCBlbGVtZW50cyBpZiBtdWx0aXBsZSBpbnB1dCBlbGVtZW50c1xuXHRcdCAqIHdlcmUgcGFzc2VkIGluLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gQWRkcyBhIG5ldyBwYXJhZ3JhcGggdG8gdGhlIGVuZCBvZiB0aGUgYWN0aXZlIGVkaXRvclxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5hZGQodGlueW1jZS5hY3RpdmVFZGl0b3IuZ2V0Qm9keSgpLCAncCcsIHt0aXRsZTogJ215IHRpdGxlJ30sICdTb21lIGNvbnRlbnQnKTtcblx0XHQgKi9cblx0XHRhZGQ6IGZ1bmN0aW9uKHBhcmVudEVsbSwgbmFtZSwgYXR0cnMsIGh0bWwsIGNyZWF0ZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5ydW4ocGFyZW50RWxtLCBmdW5jdGlvbihwYXJlbnRFbG0pIHtcblx0XHRcdFx0dmFyIG5ld0VsbTtcblxuXHRcdFx0XHRuZXdFbG0gPSBpcyhuYW1lLCAnc3RyaW5nJykgPyBzZWxmLmRvYy5jcmVhdGVFbGVtZW50KG5hbWUpIDogbmFtZTtcblx0XHRcdFx0c2VsZi5zZXRBdHRyaWJzKG5ld0VsbSwgYXR0cnMpO1xuXG5cdFx0XHRcdGlmIChodG1sKSB7XG5cdFx0XHRcdFx0aWYgKGh0bWwubm9kZVR5cGUpIHtcblx0XHRcdFx0XHRcdG5ld0VsbS5hcHBlbmRDaGlsZChodG1sKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5zZXRIVE1MKG5ld0VsbSwgaHRtbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuICFjcmVhdGUgPyBwYXJlbnRFbG0uYXBwZW5kQ2hpbGQobmV3RWxtKSA6IG5ld0VsbTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDcmVhdGVzIGEgbmV3IGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNyZWF0ZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgbmV3IGVsZW1lbnQuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGF0dHJzIE9wdGlvbmFsIG9iamVjdCBuYW1lL3ZhbHVlIGNvbGxlY3Rpb24gd2l0aCBlbGVtZW50IGF0dHJpYnV0ZXMuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgT3B0aW9uYWwgSFRNTCBzdHJpbmcgdG8gc2V0IGFzIGlubmVyIEhUTUwgb2YgdGhlIGVsZW1lbnQuXG5cdFx0ICogQHJldHVybiB7RWxlbWVudH0gSFRNTCBET00gbm9kZSBlbGVtZW50IHRoYXQgZ290IGNyZWF0ZWQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBBZGRzIGFuIGVsZW1lbnQgd2hlcmUgdGhlIGNhcmV0L3NlbGVjdGlvbiBpcyBpbiB0aGUgYWN0aXZlIGVkaXRvclxuXHRcdCAqIHZhciBlbCA9IHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5jcmVhdGUoJ2RpdicsIHtpZDogJ3Rlc3QnLCAnY2xhc3MnOiAnbXljbGFzcyd9LCAnc29tZSBjb250ZW50Jyk7XG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLnNldE5vZGUoZWwpO1xuXHRcdCAqL1xuXHRcdGNyZWF0ZTogZnVuY3Rpb24obmFtZSwgYXR0cnMsIGh0bWwpIHtcblx0XHRcdHJldHVybiB0aGlzLmFkZCh0aGlzLmRvYy5jcmVhdGVFbGVtZW50KG5hbWUpLCBuYW1lLCBhdHRycywgaHRtbCwgMSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgSFRNTCBzdHJpbmcgZm9yIGVsZW1lbnQuIFRoZSBlbGVtZW50IHdpbGwgYmUgY2xvc2VkIHVubGVzcyBhbiBlbXB0eSBpbm5lciBIVE1MIHN0cmluZyBpcyBwYXNzZWQgaW4uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNyZWF0ZUhUTUxcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIG5ldyBlbGVtZW50LlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhdHRycyBPcHRpb25hbCBvYmplY3QgbmFtZS92YWx1ZSBjb2xsZWN0aW9uIHdpdGggZWxlbWVudCBhdHRyaWJ1dGVzLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIE9wdGlvbmFsIEhUTUwgc3RyaW5nIHRvIHNldCBhcyBpbm5lciBIVE1MIG9mIHRoZSBlbGVtZW50LlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gU3RyaW5nIHdpdGggbmV3IEhUTUwgZWxlbWVudCwgZm9yIGV4YW1wbGU6IDxhIGhyZWY9XCIjXCI+dGVzdDwvYT4uXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBDcmVhdGVzIGEgaHRtbCBjaHVuayBhbmQgaW5zZXJ0cyBpdCBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24vY2FyZXQgbG9jYXRpb25cblx0XHQgKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5zZWxlY3Rpb24uc2V0Q29udGVudCh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uY3JlYXRlSFRNTCgnYScsIHtocmVmOiAndGVzdC5odG1sJ30sICdzb21lIGxpbmUnKSk7XG5cdFx0ICovXG5cdFx0Y3JlYXRlSFRNTDogZnVuY3Rpb24obmFtZSwgYXR0cnMsIGh0bWwpIHtcblx0XHRcdHZhciBvdXRIdG1sID0gJycsIGtleTtcblxuXHRcdFx0b3V0SHRtbCArPSAnPCcgKyBuYW1lO1xuXG5cdFx0XHRmb3IgKGtleSBpbiBhdHRycykge1xuXHRcdFx0XHRpZiAoYXR0cnMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBhdHRyc1trZXldICE9PSBudWxsICYmIHR5cGVvZiBhdHRyc1trZXldICE9ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0b3V0SHRtbCArPSAnICcgKyBrZXkgKyAnPVwiJyArIHRoaXMuZW5jb2RlKGF0dHJzW2tleV0pICsgJ1wiJztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBIGNhbGwgdG8gdGlueW1jZS5pcyBkb2Vzbid0IHdvcmsgZm9yIHNvbWUgb2RkIHJlYXNvbiBvbiBJRTkgcG9zc2libGUgYnVnIGluc2lkZSB0aGVpciBKUyBydW50aW1lXG5cdFx0XHRpZiAodHlwZW9mIGh0bWwgIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRyZXR1cm4gb3V0SHRtbCArICc+JyArIGh0bWwgKyAnPC8nICsgbmFtZSArICc+Jztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG91dEh0bWwgKyAnIC8+Jztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ3JlYXRlcyBhIGRvY3VtZW50IGZyYWdtZW50IG91dCBvZiB0aGUgc3BlY2lmaWVkIEhUTUwgc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjcmVhdGVGcmFnbWVudFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIEh0bWwgc3RyaW5nIHRvIGNyZWF0ZSBmcmFnbWVudCBmcm9tLlxuXHRcdCAqIEByZXR1cm4ge0RvY3VtZW50RnJhZ21lbnR9IERvY3VtZW50IGZyYWdtZW50IG5vZGUuXG5cdFx0ICovXG5cdFx0Y3JlYXRlRnJhZ21lbnQ6IGZ1bmN0aW9uKGh0bWwpIHtcblx0XHRcdHZhciBmcmFnLCBub2RlLCBkb2MgPSB0aGlzLmRvYywgY29udGFpbmVyO1xuXG5cdFx0XHRjb250YWluZXIgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGZyYWcgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG5cdFx0XHRpZiAoaHRtbCkge1xuXHRcdFx0XHRjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbDtcblx0XHRcdH1cblxuXHRcdFx0d2hpbGUgKChub2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQpKSB7XG5cdFx0XHRcdGZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmcmFnO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZW1vdmVzL2RlbGV0ZXMgdGhlIHNwZWNpZmllZCBlbGVtZW50KHMpIGZyb20gdGhlIERPTS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudC9BcnJheX0gbm9kZSBJRCBvZiBlbGVtZW50IG9yIERPTSBlbGVtZW50IG9iamVjdCBvciBhcnJheSBjb250YWluaW5nIG11bHRpcGxlIGVsZW1lbnRzL2lkcy5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IGtlZXBDaGlsZHJlbiBPcHRpb25hbCBzdGF0ZSB0byBrZWVwIGNoaWxkcmVuIG9yIG5vdC4gSWYgc2V0IHRvIHRydWUgYWxsIGNoaWxkcmVuIHdpbGwgYmVcblx0XHQgKiBwbGFjZWQgYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSByZW1vdmVkIGVsZW1lbnQuXG5cdFx0ICogQHJldHVybiB7RWxlbWVudC9BcnJheX0gSFRNTCBET00gZWxlbWVudCB0aGF0IGdvdCByZW1vdmVkLCBvciBhbiBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzIGlmIG11bHRpcGxlIGlucHV0IGVsZW1lbnRzXG5cdFx0ICogd2VyZSBwYXNzZWQgaW4uXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBSZW1vdmVzIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLnJlbW92ZSh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2VsZWN0KCdwJykpO1xuXHRcdCAqXG5cdFx0ICogLy8gUmVtb3ZlcyBhbiBlbGVtZW50IGJ5IGlkIGluIHRoZSBkb2N1bWVudFxuXHRcdCAqIHRpbnltY2UuRE9NLnJlbW92ZSgnbXlkaXYnKTtcblx0XHQgKi9cblx0XHRyZW1vdmU6IGZ1bmN0aW9uKG5vZGUsIGtlZXBDaGlsZHJlbikge1xuXHRcdFx0bm9kZSA9IHRoaXMuJCQobm9kZSk7XG5cblx0XHRcdGlmIChrZWVwQ2hpbGRyZW4pIHtcblx0XHRcdFx0bm9kZS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBjaGlsZDtcblxuXHRcdFx0XHRcdHdoaWxlICgoY2hpbGQgPSB0aGlzLmZpcnN0Q2hpbGQpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY2hpbGQubm9kZVR5cGUgPT0gMyAmJiBjaGlsZC5kYXRhLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkucmVtb3ZlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub2RlLnJlbW92ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm9kZS5sZW5ndGggPiAxID8gbm9kZS50b0FycmF5KCkgOiBub2RlWzBdO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBDU1Mgc3R5bGUgdmFsdWUgb24gYSBIVE1MIGVsZW1lbnQuIFRoZSBuYW1lIGNhbiBiZSBhIGNhbWVsY2FzZSBzdHJpbmdcblx0XHQgKiBvciB0aGUgQ1NTIHN0eWxlIG5hbWUgbGlrZSBiYWNrZ3JvdW5kLWNvbG9yLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRTdHlsZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvQXJyYXl9IGVsbSBIVE1MIGVsZW1lbnQvQXJyYXkgb2YgZWxlbWVudHMgdG8gc2V0IENTUyBzdHlsZSB2YWx1ZSBvbi5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBzdHlsZSB2YWx1ZSB0byBzZXQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHNldCBvbiB0aGUgc3R5bGUuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBTZXRzIGEgc3R5bGUgdmFsdWUgb24gYWxsIHBhcmFncmFwaHMgaW4gdGhlIGN1cnJlbnRseSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLnNldFN0eWxlKHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5zZWxlY3QoJ3AnKSwgJ2JhY2tncm91bmQtY29sb3InLCAncmVkJyk7XG5cdFx0ICpcblx0XHQgKiAvLyBTZXRzIGEgc3R5bGUgdmFsdWUgdG8gYW4gZWxlbWVudCBieSBpZCBpbiB0aGUgY3VycmVudCBkb2N1bWVudFxuXHRcdCAqIHRpbnltY2UuRE9NLnNldFN0eWxlKCdteWRpdicsICdiYWNrZ3JvdW5kLWNvbG9yJywgJ3JlZCcpO1xuXHRcdCAqL1xuXHRcdHNldFN0eWxlOiBmdW5jdGlvbihlbG0sIG5hbWUsIHZhbHVlKSB7XG5cdFx0XHRlbG0gPSB0aGlzLiQkKGVsbSkuY3NzKG5hbWUsIHZhbHVlKTtcblxuXHRcdFx0aWYgKHRoaXMuc2V0dGluZ3MudXBkYXRlX3N0eWxlcykge1xuXHRcdFx0XHR1cGRhdGVJbnRlcm5hbFN0eWxlQXR0cih0aGlzLCBlbG0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0eWxlIG9yIHJ1bnRpbWUvY29tcHV0ZWQgdmFsdWUgb2YgYW4gZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0U3R5bGVcblx0XHQgKiBAcGFyYW0ge1N0cmluZy9FbGVtZW50fSBlbG0gSFRNTCBlbGVtZW50IG9yIGVsZW1lbnQgaWQgc3RyaW5nIHRvIGdldCBzdHlsZSBmcm9tLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFN0eWxlIG5hbWUgdG8gcmV0dXJuLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gY29tcHV0ZWQgQ29tcHV0ZWQgc3R5bGUuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBDdXJyZW50IHN0eWxlIG9yIGNvbXB1dGVkIHN0eWxlIHZhbHVlIG9mIGFuIGVsZW1lbnQuXG5cdFx0ICovXG5cdFx0Z2V0U3R5bGU6IGZ1bmN0aW9uKGVsbSwgbmFtZSwgY29tcHV0ZWQpIHtcblx0XHRcdGVsbSA9IHRoaXMuJCQoZWxtKTtcblxuXHRcdFx0aWYgKGNvbXB1dGVkKSB7XG5cdFx0XHRcdHJldHVybiBlbG0uY3NzKG5hbWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYW1lbGNhc2UgaXQsIGlmIG5lZWRlZFxuXHRcdFx0bmFtZSA9IG5hbWUucmVwbGFjZSgvLShcXEQpL2csIGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdFx0cmV0dXJuIGIudG9VcHBlckNhc2UoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAobmFtZSA9PSAnZmxvYXQnKSB7XG5cdFx0XHRcdG5hbWUgPSBFbnYuaWUgJiYgRW52LmllIDwgMTIgPyAnc3R5bGVGbG9hdCcgOiAnY3NzRmxvYXQnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxtWzBdICYmIGVsbVswXS5zdHlsZSA/IGVsbVswXS5zdHlsZVtuYW1lXSA6IHVuZGVmaW5lZDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyBtdWx0aXBsZSBzdHlsZXMgb24gdGhlIHNwZWNpZmllZCBlbGVtZW50KHMpLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRTdHlsZXNcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnQvU3RyaW5nL0FycmF5fSBlbG0gRE9NIGVsZW1lbnQsIGVsZW1lbnQgaWQgc3RyaW5nIG9yIGFycmF5IG9mIGVsZW1lbnRzL2lkcyB0byBzZXQgc3R5bGVzIG9uLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzdHlsZXMgTmFtZS9WYWx1ZSBjb2xsZWN0aW9uIG9mIHN0eWxlIGl0ZW1zIHRvIGFkZCB0byB0aGUgZWxlbWVudChzKS5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIFNldHMgc3R5bGVzIG9uIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVkaXRvclxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5zZXRTdHlsZXModGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLnNlbGVjdCgncCcpLCB7J2JhY2tncm91bmQtY29sb3InOiAncmVkJywgJ2NvbG9yJzogJ2dyZWVuJ30pO1xuXHRcdCAqXG5cdFx0ICogLy8gU2V0cyBzdHlsZXMgdG8gYW4gZWxlbWVudCBieSBpZCBpbiB0aGUgY3VycmVudCBkb2N1bWVudFxuXHRcdCAqIHRpbnltY2UuRE9NLnNldFN0eWxlcygnbXlkaXYnLCB7J2JhY2tncm91bmQtY29sb3InOiAncmVkJywgJ2NvbG9yJzogJ2dyZWVuJ30pO1xuXHRcdCAqL1xuXHRcdHNldFN0eWxlczogZnVuY3Rpb24oZWxtLCBzdHlsZXMpIHtcblx0XHRcdGVsbSA9IHRoaXMuJCQoZWxtKS5jc3Moc3R5bGVzKTtcblxuXHRcdFx0aWYgKHRoaXMuc2V0dGluZ3MudXBkYXRlX3N0eWxlcykge1xuXHRcdFx0XHR1cGRhdGVJbnRlcm5hbFN0eWxlQXR0cih0aGlzLCBlbG0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIGFsbCBhdHRyaWJ1dGVzIGZyb20gYW4gZWxlbWVudCBvciBlbGVtZW50cy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlQWxsQXR0cmlic1xuXHRcdCAqIEBwYXJhbSB7RWxlbWVudC9TdHJpbmcvQXJyYXl9IGUgRE9NIGVsZW1lbnQsIGVsZW1lbnQgaWQgc3RyaW5nIG9yIGFycmF5IG9mIGVsZW1lbnRzL2lkcyB0byByZW1vdmUgYXR0cmlidXRlcyBmcm9tLlxuXHRcdCAqL1xuXHRcdHJlbW92ZUFsbEF0dHJpYnM6IGZ1bmN0aW9uKGUpIHtcblx0XHRcdHJldHVybiB0aGlzLnJ1bihlLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBpLCBhdHRycyA9IGUuYXR0cmlidXRlcztcblx0XHRcdFx0Zm9yIChpID0gYXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHRlLnJlbW92ZUF0dHJpYnV0ZU5vZGUoYXR0cnMuaXRlbShpKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIG9mIGFuIGVsZW1lbnQgb3IgZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNldEF0dHJpYlxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudC9TdHJpbmcvQXJyYXl9IGVsbSBET00gZWxlbWVudCwgZWxlbWVudCBpZCBzdHJpbmcgb3IgYXJyYXkgb2YgZWxlbWVudHMvaWRzIHRvIHNldCBhdHRyaWJ1dGUgb24uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiBhdHRyaWJ1dGUgdG8gc2V0LlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byBzZXQgb24gdGhlIGF0dHJpYnV0ZSAtIGlmIHRoaXMgdmFsdWUgaXMgZmFsc3kgbGlrZSBudWxsLCAwIG9yICcnIGl0IHdpbGwgcmVtb3ZlXG5cdFx0ICogdGhlIGF0dHJpYnV0ZSBpbnN0ZWFkLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gU2V0cyBjbGFzcyBhdHRyaWJ1dGUgb24gYWxsIHBhcmFncmFwaHMgaW4gdGhlIGFjdGl2ZSBlZGl0b3Jcblx0XHQgKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2V0QXR0cmliKHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5zZWxlY3QoJ3AnKSwgJ2NsYXNzJywgJ215Y2xhc3MnKTtcblx0XHQgKlxuXHRcdCAqIC8vIFNldHMgY2xhc3MgYXR0cmlidXRlIG9uIGEgc3BlY2lmaWMgZWxlbWVudCBpbiB0aGUgY3VycmVudCBwYWdlXG5cdFx0ICogdGlueW1jZS5kb20uc2V0QXR0cmliKCdteWRpdicsICdjbGFzcycsICdteWNsYXNzJyk7XG5cdFx0ICovXG5cdFx0c2V0QXR0cmliOiBmdW5jdGlvbihlbG0sIG5hbWUsIHZhbHVlKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIG9yaWdpbmFsVmFsdWUsIGhvb2ssIHNldHRpbmdzID0gc2VsZi5zZXR0aW5ncztcblxuXHRcdFx0aWYgKHZhbHVlID09PSAnJykge1xuXHRcdFx0XHR2YWx1ZSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGVsbSA9IHNlbGYuJCQoZWxtKTtcblx0XHRcdG9yaWdpbmFsVmFsdWUgPSBlbG0uYXR0cihuYW1lKTtcblxuXHRcdFx0aWYgKCFlbG0ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aG9vayA9IHNlbGYuYXR0ckhvb2tzW25hbWVdO1xuXHRcdFx0aWYgKGhvb2sgJiYgaG9vay5zZXQpIHtcblx0XHRcdFx0aG9vay5zZXQoZWxtLCB2YWx1ZSwgbmFtZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbG0uYXR0cihuYW1lLCB2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvcmlnaW5hbFZhbHVlICE9IHZhbHVlICYmIHNldHRpbmdzLm9uU2V0QXR0cmliKSB7XG5cdFx0XHRcdHNldHRpbmdzLm9uU2V0QXR0cmliKHtcblx0XHRcdFx0XHRhdHRyRWxtOiBlbG0sXG5cdFx0XHRcdFx0YXR0ck5hbWU6IG5hbWUsXG5cdFx0XHRcdFx0YXR0clZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0d28gb3IgbW9yZSBzcGVjaWZpZWQgYXR0cmlidXRlcyBvZiBhbiBlbGVtZW50IG9yIGVsZW1lbnRzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRBdHRyaWJzXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50L1N0cmluZy9BcnJheX0gZWxtIERPTSBlbGVtZW50LCBlbGVtZW50IGlkIHN0cmluZyBvciBhcnJheSBvZiBlbGVtZW50cy9pZHMgdG8gc2V0IGF0dHJpYnV0ZXMgb24uXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGF0dHJzIE5hbWUvVmFsdWUgY29sbGVjdGlvbiBvZiBhdHRyaWJ1dGUgaXRlbXMgdG8gYWRkIHRvIHRoZSBlbGVtZW50KHMpLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gU2V0cyBjbGFzcyBhbmQgdGl0bGUgYXR0cmlidXRlcyBvbiBhbGwgcGFyYWdyYXBocyBpbiB0aGUgYWN0aXZlIGVkaXRvclxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5zZXRBdHRyaWJzKHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5zZWxlY3QoJ3AnKSwgeydjbGFzcyc6ICdteWNsYXNzJywgdGl0bGU6ICdzb21lIHRpdGxlJ30pO1xuXHRcdCAqXG5cdFx0ICogLy8gU2V0cyBjbGFzcyBhbmQgdGl0bGUgYXR0cmlidXRlcyBvbiBhIHNwZWNpZmljIGVsZW1lbnQgaW4gdGhlIGN1cnJlbnQgcGFnZVxuXHRcdCAqIHRpbnltY2UuRE9NLnNldEF0dHJpYnMoJ215ZGl2JywgeydjbGFzcyc6ICdteWNsYXNzJywgdGl0bGU6ICdzb21lIHRpdGxlJ30pO1xuXHRcdCAqL1xuXHRcdHNldEF0dHJpYnM6IGZ1bmN0aW9uKGVsbSwgYXR0cnMpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi4kJChlbG0pLmVhY2goZnVuY3Rpb24oaSwgbm9kZSkge1xuXHRcdFx0XHRlYWNoKGF0dHJzLCBmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuXHRcdFx0XHRcdHNlbGYuc2V0QXR0cmliKG5vZGUsIG5hbWUsIHZhbHVlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZSBieSBuYW1lLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRBdHRyaWJcblx0XHQgKiBAcGFyYW0ge1N0cmluZy9FbGVtZW50fSBlbG0gRWxlbWVudCBzdHJpbmcgaWQgb3IgRE9NIGVsZW1lbnQgdG8gZ2V0IGF0dHJpYnV0ZSBmcm9tLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgYXR0cmlidXRlIHRvIGdldC5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gZGVmYXVsdFZhbCBPcHRpb25hbCBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGRpZG4ndCBleGlzdC5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEF0dHJpYnV0ZSB2YWx1ZSBzdHJpbmcsIGRlZmF1bHQgdmFsdWUgb3IgbnVsbCBpZiB0aGUgYXR0cmlidXRlIHdhc24ndCBmb3VuZC5cblx0XHQgKi9cblx0XHRnZXRBdHRyaWI6IGZ1bmN0aW9uKGVsbSwgbmFtZSwgZGVmYXVsdFZhbCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBob29rLCB2YWx1ZTtcblxuXHRcdFx0ZWxtID0gc2VsZi4kJChlbG0pO1xuXG5cdFx0XHRpZiAoZWxtLmxlbmd0aCkge1xuXHRcdFx0XHRob29rID0gc2VsZi5hdHRySG9va3NbbmFtZV07XG5cblx0XHRcdFx0aWYgKGhvb2sgJiYgaG9vay5nZXQpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGhvb2suZ2V0KGVsbSwgbmFtZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBlbG0uYXR0cihuYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIHZhbHVlID09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHZhbHVlID0gZGVmYXVsdFZhbCB8fCAnJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB4LCB5IHBvc2l0aW9uIG9mIGEgbm9kZS4gVGhlIHBvc2l0aW9uIHdpbGwgYmUgcmV0dXJuZWQgaW4gYW4gb2JqZWN0IHdpdGggeCwgeSBmaWVsZHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFBvc1xuXHRcdCAqIEBwYXJhbSB7RWxlbWVudC9TdHJpbmd9IGVsbSBIVE1MIGVsZW1lbnQgb3IgZWxlbWVudCBpZCB0byBnZXQgeCwgeSBwb3NpdGlvbiBmcm9tLlxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdEVsbSBPcHRpb25hbCByb290IGVsZW1lbnQgdG8gc3RvcCBjYWxjdWxhdGlvbnMgYXQuXG5cdFx0ICogQHJldHVybiB7b2JqZWN0fSBBYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb2JqZWN0IHdpdGggeCwgeSBmaWVsZHMuXG5cdFx0ICovXG5cdFx0Z2V0UG9zOiBmdW5jdGlvbihlbG0sIHJvb3RFbG0pIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgeCA9IDAsIHkgPSAwLCBvZmZzZXRQYXJlbnQsIGRvYyA9IHNlbGYuZG9jLCBib2R5ID0gZG9jLmJvZHksIHBvcztcblxuXHRcdFx0ZWxtID0gc2VsZi5nZXQoZWxtKTtcblx0XHRcdHJvb3RFbG0gPSByb290RWxtIHx8IGJvZHk7XG5cblx0XHRcdGlmIChlbG0pIHtcblx0XHRcdFx0Ly8gVXNlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpZiBpdCBleGlzdHMgc2luY2UgaXQncyBmYXN0ZXIgdGhhbiBsb29waW5nIG9mZnNldCBub2Rlc1xuXHRcdFx0XHQvLyBGYWxsYmFjayB0byBvZmZzZXRQYXJlbnQgY2FsY3VsYXRpb25zIGlmIHRoZSBib2R5IGlzbid0IHN0YXRpYyBiZXR0ZXIgc2luY2UgaXQgc3RvcHMgYXQgdGhlIGJvZHkgcm9vdFxuXHRcdFx0XHRpZiAocm9vdEVsbSA9PT0gYm9keSAmJiBlbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICYmICQoYm9keSkuY3NzKCdwb3NpdGlvbicpID09PSAnc3RhdGljJykge1xuXHRcdFx0XHRcdHBvcyA9IGVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0XHRyb290RWxtID0gc2VsZi5ib3hNb2RlbCA/IGRvYy5kb2N1bWVudEVsZW1lbnQgOiBib2R5O1xuXG5cdFx0XHRcdFx0Ly8gQWRkIHNjcm9sbCBvZmZzZXRzIGZyb20gZG9jdW1lbnRFbGVtZW50IG9yIGJvZHkgc2luY2UgSUUgd2l0aCB0aGUgd3JvbmcgYm94IG1vZGVsIHdpbGwgdXNlIGQuYm9keSBhbmQgc28gZG8gV2ViS2l0XG5cdFx0XHRcdFx0Ly8gQWxzbyByZW1vdmUgdGhlIGJvZHkvZG9jdW1lbnRlbGVtZW50IGNsaWVudFRvcC9jbGllbnRMZWZ0IG9uIElFIDYsIDcgc2luY2UgdGhleSBvZmZzZXQgdGhlIHBvc2l0aW9uXG5cdFx0XHRcdFx0eCA9IHBvcy5sZWZ0ICsgKGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBib2R5LnNjcm9sbExlZnQpIC0gcm9vdEVsbS5jbGllbnRMZWZ0O1xuXHRcdFx0XHRcdHkgPSBwb3MudG9wICsgKGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wKSAtIHJvb3RFbG0uY2xpZW50VG9wO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHt4OiB4LCB5OiB5fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IGVsbTtcblx0XHRcdFx0d2hpbGUgKG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT0gcm9vdEVsbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUpIHtcblx0XHRcdFx0XHR4ICs9IG9mZnNldFBhcmVudC5vZmZzZXRMZWZ0IHx8IDA7XG5cdFx0XHRcdFx0eSArPSBvZmZzZXRQYXJlbnQub2Zmc2V0VG9wIHx8IDA7XG5cdFx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IGVsbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR3aGlsZSAob2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPSByb290RWxtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSkge1xuXHRcdFx0XHRcdHggLT0gb2Zmc2V0UGFyZW50LnNjcm9sbExlZnQgfHwgMDtcblx0XHRcdFx0XHR5IC09IG9mZnNldFBhcmVudC5zY3JvbGxUb3AgfHwgMDtcblx0XHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge3g6IHgsIHk6IHl9O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBQYXJzZXMgdGhlIHNwZWNpZmllZCBzdHlsZSB2YWx1ZSBpbnRvIGFuIG9iamVjdCBjb2xsZWN0aW9uLiBUaGlzIHBhcnNlciB3aWxsIGFsc29cblx0XHQgKiBtZXJnZSBhbmQgcmVtb3ZlIGFueSByZWR1bmRhbnQgaXRlbXMgdGhhdCBicm93c2VycyBtaWdodCBoYXZlIGFkZGVkLiBJdCB3aWxsIGFsc28gY29udmVydCBub24taGV4XG5cdFx0ICogY29sb3JzIHRvIGhleCB2YWx1ZXMuIFVybHMgaW5zaWRlIHRoZSBzdHlsZXMgd2lsbCBhbHNvIGJlIGNvbnZlcnRlZCB0byBhYnNvbHV0ZS9yZWxhdGl2ZSBiYXNlZCBvbiBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcGFyc2VTdHlsZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBjc3NUZXh0IFN0eWxlIHZhbHVlIHRvIHBhcnNlLCBmb3IgZXhhbXBsZTogYm9yZGVyOjFweCBzb2xpZCByZWQ7LlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gT2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgc3R5bGUsIGZvciBleGFtcGxlOiB7Ym9yZGVyOiAnMXB4IHNvbGlkIHJlZCd9XG5cdFx0ICovXG5cdFx0cGFyc2VTdHlsZTogZnVuY3Rpb24oY3NzVGV4dCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVzLnBhcnNlKGNzc1RleHQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXJpYWxpemVzIHRoZSBzcGVjaWZpZWQgc3R5bGUgb2JqZWN0IGludG8gYSBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNlcmlhbGl6ZVN0eWxlXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHN0eWxlcyBPYmplY3QgdG8gc2VyaWFsaXplIGFzIHN0cmluZywgZm9yIGV4YW1wbGU6IHtib3JkZXI6ICcxcHggc29saWQgcmVkJ31cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBPcHRpb25hbCBlbGVtZW50IG5hbWUuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0eWxlIG9iamVjdCwgZm9yIGV4YW1wbGU6IGJvcmRlcjogMXB4IHNvbGlkIHJlZC5cblx0XHQgKi9cblx0XHRzZXJpYWxpemVTdHlsZTogZnVuY3Rpb24oc3R5bGVzLCBuYW1lKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdHlsZXMuc2VyaWFsaXplKHN0eWxlcywgbmFtZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYSBzdHlsZSBlbGVtZW50IGF0IHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50IHdpdGggdGhlIHNwZWNpZmllZCBjc3NUZXh0IGNvbnRlbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFN0eWxlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNzc1RleHQgQ1NTIFRleHQgc3R5bGUgdG8gYWRkIHRvIHRvcCBvZiBoZWFkIG9mIGRvY3VtZW50LlxuXHRcdCAqL1xuXHRcdGFkZFN0eWxlOiBmdW5jdGlvbihjc3NUZXh0KSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGRvYyA9IHNlbGYuZG9jLCBoZWFkLCBzdHlsZUVsbTtcblxuXHRcdFx0Ly8gUHJldmVudCBpbmxpbmUgZnJvbSBsb2FkaW5nIHRoZSBzYW1lIHN0eWxlcyB0d2ljZVxuXHRcdFx0aWYgKHNlbGYgIT09IERPTVV0aWxzLkRPTSAmJiBkb2MgPT09IGRvY3VtZW50KSB7XG5cdFx0XHRcdHZhciBhZGRlZFN0eWxlcyA9IERPTVV0aWxzLkRPTS5hZGRlZFN0eWxlcztcblxuXHRcdFx0XHRhZGRlZFN0eWxlcyA9IGFkZGVkU3R5bGVzIHx8IFtdO1xuXHRcdFx0XHRpZiAoYWRkZWRTdHlsZXNbY3NzVGV4dF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhZGRlZFN0eWxlc1tjc3NUZXh0XSA9IHRydWU7XG5cdFx0XHRcdERPTVV0aWxzLkRPTS5hZGRlZFN0eWxlcyA9IGFkZGVkU3R5bGVzO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDcmVhdGUgc3R5bGUgZWxlbWVudCBpZiBuZWVkZWRcblx0XHRcdHN0eWxlRWxtID0gZG9jLmdldEVsZW1lbnRCeUlkKCdtY2VEZWZhdWx0U3R5bGVzJyk7XG5cdFx0XHRpZiAoIXN0eWxlRWxtKSB7XG5cdFx0XHRcdHN0eWxlRWxtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cdFx0XHRcdHN0eWxlRWxtLmlkID0gJ21jZURlZmF1bHRTdHlsZXMnO1xuXHRcdFx0XHRzdHlsZUVsbS50eXBlID0gJ3RleHQvY3NzJztcblxuXHRcdFx0XHRoZWFkID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG5cdFx0XHRcdGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0XHRoZWFkLmluc2VydEJlZm9yZShzdHlsZUVsbSwgaGVhZC5maXJzdENoaWxkKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBlbmQgc3R5bGUgZGF0YSB0byBvbGQgb3IgbmV3IHN0eWxlIGVsZW1lbnRcblx0XHRcdGlmIChzdHlsZUVsbS5zdHlsZVNoZWV0KSB7XG5cdFx0XHRcdHN0eWxlRWxtLnN0eWxlU2hlZXQuY3NzVGV4dCArPSBjc3NUZXh0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3R5bGVFbG0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW1wb3J0cy9sb2FkcyB0aGUgc3BlY2lmaWVkIENTUyBmaWxlIGludG8gdGhlIGRvY3VtZW50IGJvdW5kIHRvIHRoZSBjbGFzcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgbG9hZENTU1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVVJMIHRvIENTUyBmaWxlIHRvIGxvYWQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBMb2FkcyBhIENTUyBmaWxlIGR5bmFtaWNhbGx5IGludG8gdGhlIGN1cnJlbnQgZG9jdW1lbnRcblx0XHQgKiB0aW55bWNlLkRPTS5sb2FkQ1NTKCdzb21lcGF0aC9zb21lLmNzcycpO1xuXHRcdCAqXG5cdFx0ICogLy8gTG9hZHMgYSBDU1MgZmlsZSBpbnRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVkaXRvciBpbnN0YW5jZVxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5sb2FkQ1NTKCdzb21lcGF0aC9zb21lLmNzcycpO1xuXHRcdCAqXG5cdFx0ICogLy8gTG9hZHMgYSBDU1MgZmlsZSBpbnRvIGFuIGVkaXRvciBpbnN0YW5jZSBieSBpZFxuXHRcdCAqIHRpbnltY2UuZ2V0KCdzb21laWQnKS5kb20ubG9hZENTUygnc29tZXBhdGgvc29tZS5jc3MnKTtcblx0XHQgKlxuXHRcdCAqIC8vIExvYWRzIG11bHRpcGxlIENTUyBmaWxlcyBpbnRvIHRoZSBjdXJyZW50IGRvY3VtZW50XG5cdFx0ICogdGlueW1jZS5ET00ubG9hZENTUygnc29tZXBhdGgvc29tZS5jc3Msc29tZXBhdGgvc29tZW90aGVyLmNzcycpO1xuXHRcdCAqL1xuXHRcdGxvYWRDU1M6IGZ1bmN0aW9uKHVybCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBkb2MgPSBzZWxmLmRvYywgaGVhZDtcblxuXHRcdFx0Ly8gUHJldmVudCBpbmxpbmUgZnJvbSBsb2FkaW5nIHRoZSBzYW1lIENTUyBmaWxlIHR3aWNlXG5cdFx0XHRpZiAoc2VsZiAhPT0gRE9NVXRpbHMuRE9NICYmIGRvYyA9PT0gZG9jdW1lbnQpIHtcblx0XHRcdFx0RE9NVXRpbHMuRE9NLmxvYWRDU1ModXJsKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXVybCkge1xuXHRcdFx0XHR1cmwgPSAnJztcblx0XHRcdH1cblxuXHRcdFx0aGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuXG5cdFx0XHRlYWNoKHVybC5zcGxpdCgnLCcpLCBmdW5jdGlvbih1cmwpIHtcblx0XHRcdFx0dmFyIGxpbms7XG5cblx0XHRcdFx0dXJsID0gVG9vbHMuX2FkZENhY2hlU3VmZml4KHVybCk7XG5cblx0XHRcdFx0aWYgKHNlbGYuZmlsZXNbdXJsXSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYuZmlsZXNbdXJsXSA9IHRydWU7XG5cdFx0XHRcdGxpbmsgPSBzZWxmLmNyZWF0ZSgnbGluaycsIHtyZWw6ICdzdHlsZXNoZWV0JywgaHJlZjogdXJsfSk7XG5cblx0XHRcdFx0Ly8gSUUgOCBoYXMgYSBidWcgd2hlcmUgZHluYW1pY2FsbHkgbG9hZGluZyBzdHlsZXNoZWV0cyB3b3VsZCBwcm9kdWNlIGEgMSBpdGVtIHJlbWFpbmluZyBidWdcblx0XHRcdFx0Ly8gVGhpcyBmaXggc2VlbXMgdG8gcmVzb2x2ZSB0aGF0IGlzc3VlIGJ5IHJlY2FsY2luZyB0aGUgZG9jdW1lbnQgb25jZSBhIHN0eWxlc2hlZXQgZmluaXNoZXMgbG9hZGluZ1xuXHRcdFx0XHQvLyBJdCdzIHVnbHkgYnV0IGl0IHNlZW1zIHRvIHdvcmsgZmluZS5cblx0XHRcdFx0aWYgKGlzSUUgJiYgZG9jLmRvY3VtZW50TW9kZSAmJiBkb2MucmVjYWxjKSB7XG5cdFx0XHRcdFx0bGluay5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmIChkb2MucmVjYWxjKSB7XG5cdFx0XHRcdFx0XHRcdGRvYy5yZWNhbGMoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bGluay5vbmxvYWQgPSBudWxsO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYSBjbGFzcyB0byB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZENsYXNzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudC9BcnJheX0gZWxtIEVsZW1lbnQgSUQgc3RyaW5nIG9yIERPTSBlbGVtZW50IG9yIGFycmF5IHdpdGggZWxlbWVudHMgb3IgSURzLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBjbHMgQ2xhc3MgbmFtZSB0byBhZGQgdG8gZWFjaCBlbGVtZW50LlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZy9BcnJheX0gU3RyaW5nIHdpdGggbmV3IGNsYXNzIHZhbHVlIG9yIGFycmF5IHdpdGggbmV3IGNsYXNzIHZhbHVlcyBmb3IgYWxsIGVsZW1lbnRzLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gQWRkcyBhIGNsYXNzIHRvIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLmFkZENsYXNzKHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5zZWxlY3QoJ3AnKSwgJ215Y2xhc3MnKTtcblx0XHQgKlxuXHRcdCAqIC8vIEFkZHMgYSBjbGFzcyB0byBhIHNwZWNpZmljIGVsZW1lbnQgaW4gdGhlIGN1cnJlbnQgcGFnZVxuXHRcdCAqIHRpbnltY2UuRE9NLmFkZENsYXNzKCdteWRpdicsICdteWNsYXNzJyk7XG5cdFx0ICovXG5cdFx0YWRkQ2xhc3M6IGZ1bmN0aW9uKGVsbSwgY2xzKSB7XG5cdFx0XHR0aGlzLiQkKGVsbSkuYWRkQ2xhc3MoY2xzKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyBhIGNsYXNzIGZyb20gdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIGVsZW1lbnRzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW1vdmVDbGFzc1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnQvQXJyYXl9IGVsbSBFbGVtZW50IElEIHN0cmluZyBvciBET00gZWxlbWVudCBvciBhcnJheSB3aXRoIGVsZW1lbnRzIG9yIElEcy5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY2xzIENsYXNzIG5hbWUgdG8gcmVtb3ZlIGZyb20gZWFjaCBlbGVtZW50LlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZy9BcnJheX0gU3RyaW5nIG9mIHJlbWFpbmluZyBjbGFzcyBuYW1lKHMpLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGlmIG11bHRpcGxlIGlucHV0IGVsZW1lbnRzXG5cdFx0ICogd2VyZSBwYXNzZWQgaW4uXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBSZW1vdmVzIGEgY2xhc3MgZnJvbSBhbGwgcGFyYWdyYXBocyBpbiB0aGUgYWN0aXZlIGVkaXRvclxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5yZW1vdmVDbGFzcyh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2VsZWN0KCdwJyksICdteWNsYXNzJyk7XG5cdFx0ICpcblx0XHQgKiAvLyBSZW1vdmVzIGEgY2xhc3MgZnJvbSBhIHNwZWNpZmljIGVsZW1lbnQgaW4gdGhlIGN1cnJlbnQgcGFnZVxuXHRcdCAqIHRpbnltY2UuRE9NLnJlbW92ZUNsYXNzKCdteWRpdicsICdteWNsYXNzJyk7XG5cdFx0ICovXG5cdFx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKGVsbSwgY2xzKSB7XG5cdFx0XHR0aGlzLnRvZ2dsZUNsYXNzKGVsbSwgY2xzLCBmYWxzZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgaGFzIHRoZSBzcGVjaWZpZWQgY2xhc3MuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGhhc0NsYXNzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudH0gZWxtIEhUTUwgZWxlbWVudCBvciBlbGVtZW50IGlkIHN0cmluZyB0byBjaGVjayBDU1MgY2xhc3Mgb24uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNscyBDU1MgY2xhc3MgdG8gY2hlY2sgZm9yLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IGhhcyB0aGUgc3BlY2lmaWVkIGNsYXNzLlxuXHRcdCAqL1xuXHRcdGhhc0NsYXNzOiBmdW5jdGlvbihlbG0sIGNscykge1xuXHRcdFx0cmV0dXJuIHRoaXMuJCQoZWxtKS5oYXNDbGFzcyhjbHMpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUb2dnbGVzIHRoZSBzcGVjaWZpZWQgY2xhc3Mgb24vb2ZmLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0b2dnbGVDbGFzc1xuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxtIEVsZW1lbnQgdG8gdG9nZ2xlIGNsYXNzIG9uLlxuXHRcdCAqIEBwYXJhbSB7W3R5cGVdfSBjbHMgQ2xhc3MgdG8gdG9nZ2xlIG9uL29mZi5cblx0XHQgKiBAcGFyYW0ge1t0eXBlXX0gc3RhdGUgT3B0aW9uYWwgc3RhdGUgdG8gc2V0LlxuXHRcdCAqL1xuXHRcdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihlbG0sIGNscywgc3RhdGUpIHtcblx0XHRcdHRoaXMuJCQoZWxtKS50b2dnbGVDbGFzcyhjbHMsIHN0YXRlKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAodGhpcy5jbGFzc05hbWUgPT09ICcnKSB7XG5cdFx0XHRcdFx0JCh0aGlzKS5hdHRyKCdjbGFzcycsIG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2hvd3MgdGhlIHNwZWNpZmllZCBlbGVtZW50KHMpIGJ5IElEIGJ5IHNldHRpbmcgdGhlIFwiZGlzcGxheVwiIHN0eWxlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzaG93XG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudC9BcnJheX0gZWxtIElEIG9mIERPTSBlbGVtZW50IG9yIERPTSBlbGVtZW50IG9yIGFycmF5IHdpdGggZWxlbWVudHMgb3IgSURzIHRvIHNob3cuXG5cdFx0ICovXG5cdFx0c2hvdzogZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHR0aGlzLiQkKGVsbSkuc2hvdygpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBIaWRlcyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQocykgYnkgSUQgYnkgc2V0dGluZyB0aGUgXCJkaXNwbGF5XCIgc3R5bGUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGhpZGVcblx0XHQgKiBAcGFyYW0ge1N0cmluZy9FbGVtZW50L0FycmF5fSBlbG0gSUQgb2YgRE9NIGVsZW1lbnQgb3IgRE9NIGVsZW1lbnQgb3IgYXJyYXkgd2l0aCBlbGVtZW50cyBvciBJRHMgdG8gaGlkZS5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIEhpZGVzIGFuIGVsZW1lbnQgYnkgaWQgaW4gdGhlIGRvY3VtZW50XG5cdFx0ICogdGlueW1jZS5ET00uaGlkZSgnbXlpZCcpO1xuXHRcdCAqL1xuXHRcdGhpZGU6IGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0dGhpcy4kJChlbG0pLmhpZGUoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBlbGVtZW50IGlzIGhpZGRlbiBvciBub3QgYnkgY2hlY2tpbmcgdGhlIFwiZGlzcGxheVwiIHN0eWxlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpc0hpZGRlblxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL0VsZW1lbnR9IGVsbSBJZCBvciBlbGVtZW50IHRvIGNoZWNrIGRpc3BsYXkgc3RhdGUgb24uXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZSBpZiB0aGUgZWxlbWVudCBpcyBoaWRkZW4gb3Igbm90LlxuXHRcdCAqL1xuXHRcdGlzSGlkZGVuOiBmdW5jdGlvbihlbG0pIHtcblx0XHRcdHJldHVybiB0aGlzLiQkKGVsbSkuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgdW5pcXVlIGlkLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBnZW5lcmF0aW5nIGVsZW1lbnRzIG9uIHRoZSBmbHkuXG5cdFx0ICogVGhpcyBtZXRob2Qgd2lsbCBub3QgY2hlY2sgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHVuaXF1ZUlkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHByZWZpeCBPcHRpb25hbCBwcmVmaXggdG8gYWRkIGluIGZyb250IG9mIGFsbCBpZHMgLSBkZWZhdWx0cyB0byBcIm1jZV9cIi5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IFVuaXF1ZSBpZC5cblx0XHQgKi9cblx0XHR1bmlxdWVJZDogZnVuY3Rpb24ocHJlZml4KSB7XG5cdFx0XHRyZXR1cm4gKCFwcmVmaXggPyAnbWNlXycgOiBwcmVmaXgpICsgKHRoaXMuY291bnRlcisrKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgc3BlY2lmaWVkIEhUTUwgY29udGVudCBpbnNpZGUgdGhlIGVsZW1lbnQgb3IgZWxlbWVudHMuIFRoZSBIVE1MIHdpbGwgZmlyc3QgYmUgcHJvY2Vzc2VkLiBUaGlzIG1lYW5zXG5cdFx0ICogVVJMcyB3aWxsIGdldCBjb252ZXJ0ZWQsIGhleCBjb2xvciB2YWx1ZXMgZml4ZWQgZXRjLiBDaGVjayBwcm9jZXNzSFRNTCBmb3IgZGV0YWlscy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0SFRNTFxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudC9TdHJpbmcvQXJyYXl9IGVsbSBET00gZWxlbWVudCwgZWxlbWVudCBpZCBzdHJpbmcgb3IgYXJyYXkgb2YgZWxlbWVudHMvaWRzIHRvIHNldCBIVE1MIGluc2lkZSBvZi5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBIVE1MIGNvbnRlbnQgdG8gc2V0IGFzIGlubmVyIEhUTUwgb2YgdGhlIGVsZW1lbnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBTZXRzIHRoZSBpbm5lciBIVE1MIG9mIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLnNldEhUTUwodGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLnNlbGVjdCgncCcpLCAnc29tZSBpbm5lciBodG1sJyk7XG5cdFx0ICpcblx0XHQgKiAvLyBTZXRzIHRoZSBpbm5lciBIVE1MIG9mIGFuIGVsZW1lbnQgYnkgaWQgaW4gdGhlIGRvY3VtZW50XG5cdFx0ICogdGlueW1jZS5ET00uc2V0SFRNTCgnbXlkaXYnLCAnc29tZSBpbm5lciBodG1sJyk7XG5cdFx0ICovXG5cdFx0c2V0SFRNTDogZnVuY3Rpb24oZWxtLCBodG1sKSB7XG5cdFx0XHRlbG0gPSB0aGlzLiQkKGVsbSk7XG5cblx0XHRcdGlmIChpc0lFKSB7XG5cdFx0XHRcdGVsbS5lYWNoKGZ1bmN0aW9uKGksIHRhcmdldCkge1xuXHRcdFx0XHRcdGlmICh0YXJnZXQuY2FuSGF2ZUhUTUwgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCBjaGlsZCBub2RlcywgSUUga2VlcHMgZW1wdHkgdGV4dCBub2RlcyBpbiBET01cblx0XHRcdFx0XHR3aGlsZSAodGFyZ2V0LmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0XHRcdHRhcmdldC5yZW1vdmVDaGlsZCh0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdC8vIElFIHdpbGwgcmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZ1xuXHRcdFx0XHRcdFx0Ly8gdW5sZXNzIHlvdSBwYWRkIHRoZSBjb250ZW50cyB3aXRoIHNvbWV0aGluZ1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmlubmVySFRNTCA9ICc8YnI+JyArIGh0bWw7XG5cdFx0XHRcdFx0XHR0YXJnZXQucmVtb3ZlQ2hpbGQodGFyZ2V0LmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0XHQvLyBJRSBzb21ldGltZXMgcHJvZHVjZXMgYW4gdW5rbm93biBydW50aW1lIGVycm9yIG9uIGlubmVySFRNTCBpZiBpdCdzIGEgZGl2IGluc2lkZSBhIHBcblx0XHRcdFx0XHRcdCQoJzxkaXY+PC9kaXY+JykuaHRtbCgnPGJyPicgKyBodG1sKS5jb250ZW50cygpLnNsaWNlKDEpLmFwcGVuZFRvKHRhcmdldCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGh0bWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxtLmh0bWwoaHRtbCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIG91dGVyIEhUTUwgb2YgYW4gZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0T3V0ZXJIVE1MXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudH0gZWxtIEVsZW1lbnQgSUQgb3IgZWxlbWVudCBvYmplY3QgdG8gZ2V0IG91dGVyIEhUTUwgZnJvbS5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IE91dGVyIEhUTUwgc3RyaW5nLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdGlueW1jZS5ET00uZ2V0T3V0ZXJIVE1MKGVkaXRvckVsZW1lbnQpO1xuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmdldE91dGVySFRNTCh0aW55bWNlLmFjdGl2ZUVkaXRvci5nZXRCb2R5KCkpO1xuXHRcdCAqL1xuXHRcdGdldE91dGVySFRNTDogZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHRlbG0gPSB0aGlzLmdldChlbG0pO1xuXG5cdFx0XHQvLyBPbGRlciBGRiBkb2Vzbid0IGhhdmUgb3V0ZXJIVE1MIDMuNiBpcyBzdGlsbCB1c2VkIGJ5IHNvbWUgb3JnYWl6YXRpb25zXG5cdFx0XHRyZXR1cm4gZWxtLm5vZGVUeXBlID09IDEgJiYgXCJvdXRlckhUTUxcIiBpbiBlbG0gPyBlbG0ub3V0ZXJIVE1MIDogJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJChlbG0pLmNsb25lKCkpLmh0bWwoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgc3BlY2lmaWVkIG91dGVyIEhUTUwgb24gYW4gZWxlbWVudCBvciBlbGVtZW50cy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0T3V0ZXJIVE1MXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50L1N0cmluZy9BcnJheX0gZWxtIERPTSBlbGVtZW50LCBlbGVtZW50IGlkIHN0cmluZyBvciBhcnJheSBvZiBlbGVtZW50cy9pZHMgdG8gc2V0IG91dGVyIEhUTUwgb24uXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGh0bWwgSFRNTCBjb2RlIHRvIHNldCBhcyBvdXRlciB2YWx1ZSBmb3IgdGhlIGVsZW1lbnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBTZXRzIHRoZSBvdXRlciBIVE1MIG9mIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLnNldE91dGVySFRNTCh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2VsZWN0KCdwJyksICc8ZGl2PnNvbWUgaHRtbDwvZGl2PicpO1xuXHRcdCAqXG5cdFx0ICogLy8gU2V0cyB0aGUgb3V0ZXIgSFRNTCBvZiBhbiBlbGVtZW50IGJ5IGlkIGluIHRoZSBkb2N1bWVudFxuXHRcdCAqIHRpbnltY2UuRE9NLnNldE91dGVySFRNTCgnbXlkaXYnLCAnPGRpdj5zb21lIGh0bWw8L2Rpdj4nKTtcblx0XHQgKi9cblx0XHRzZXRPdXRlckhUTUw6IGZ1bmN0aW9uKGVsbSwgaHRtbCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLiQkKGVsbSkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBPbGRlciBGRiBkb2Vzbid0IGhhdmUgb3V0ZXJIVE1MIDMuNiBpcyBzdGlsbCB1c2VkIGJ5IHNvbWUgb3JnYW5pemF0aW9uc1xuXHRcdFx0XHRcdGlmIChcIm91dGVySFRNTFwiIGluIHRoaXMpIHtcblx0XHRcdFx0XHRcdHRoaXMub3V0ZXJIVE1MID0gaHRtbDtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdXRlckhUTUwgZm9yIElFIGl0IHNvbWV0aW1lcyBwcm9kdWNlcyBhbiBcInVua25vd24gcnVudGltZSBlcnJvclwiXG5cdFx0XHRcdHNlbGYucmVtb3ZlKCQodGhpcykuaHRtbChodG1sKSwgdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRW50aXR5IGRlY29kZXMgYSBzdHJpbmcuIFRoaXMgbWV0aG9kIGRlY29kZXMgYW55IEhUTUwgZW50aXRpZXMsIHN1Y2ggYXMgJmFyaW5nOy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZGVjb2RlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHMgU3RyaW5nIHRvIGRlY29kZSBlbnRpdGllcyBvbi5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEVudGl0eSBkZWNvZGVkIHN0cmluZy5cblx0XHQgKi9cblx0XHRkZWNvZGU6IEVudGl0aWVzLmRlY29kZSxcblxuXHRcdC8qKlxuXHRcdCAqIEVudGl0eSBlbmNvZGVzIGEgc3RyaW5nLiBUaGlzIG1ldGhvZCBlbmNvZGVzIHRoZSBtb3N0IGNvbW1vbiBlbnRpdGllcywgc3VjaCBhcyA8PlwiJi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZW5jb2RlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHRleHQgU3RyaW5nIHRvIGVuY29kZSB3aXRoIGVudGl0aWVzLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gRW50aXR5IGVuY29kZWQgc3RyaW5nLlxuXHRcdCAqL1xuXHRcdGVuY29kZTogRW50aXRpZXMuZW5jb2RlQWxsUmF3LFxuXG5cdFx0LyoqXG5cdFx0ICogSW5zZXJ0cyBhbiBlbGVtZW50IGFmdGVyIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaW5zZXJ0QWZ0ZXJcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgRWxlbWVudCB0byBpbnNlcnQgYWZ0ZXIgdGhlIHJlZmVyZW5jZS5cblx0XHQgKiBAcGFyYW0ge0VsZW1lbnQvU3RyaW5nL0FycmF5fSByZWZlcmVuY2VOb2RlIFJlZmVyZW5jZSBlbGVtZW50LCBlbGVtZW50IGlkIG9yIGFycmF5IG9mIGVsZW1lbnRzIHRvIGluc2VydCBhZnRlci5cblx0XHQgKiBAcmV0dXJuIHtFbGVtZW50L0FycmF5fSBFbGVtZW50IHRoYXQgZ290IGFkZGVkIG9yIGFuIGFycmF5IHdpdGggZWxlbWVudHMuXG5cdFx0ICovXG5cdFx0aW5zZXJ0QWZ0ZXI6IGZ1bmN0aW9uKG5vZGUsIHJlZmVyZW5jZU5vZGUpIHtcblx0XHRcdHJlZmVyZW5jZU5vZGUgPSB0aGlzLmdldChyZWZlcmVuY2VOb2RlKTtcblxuXHRcdFx0cmV0dXJuIHRoaXMucnVuKG5vZGUsIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0dmFyIHBhcmVudCwgbmV4dFNpYmxpbmc7XG5cblx0XHRcdFx0cGFyZW50ID0gcmVmZXJlbmNlTm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHRuZXh0U2libGluZyA9IHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmc7XG5cblx0XHRcdFx0aWYgKG5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdFx0cGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBuZXh0U2libGluZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFyZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVwbGFjZXMgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIGVsZW1lbnRzIHdpdGggdGhlIG5ldyBlbGVtZW50IHNwZWNpZmllZC4gVGhlIG5ldyBlbGVtZW50IHdpbGxcblx0XHQgKiBiZSBjbG9uZWQgaWYgbXVsdGlwbGUgaW5wdXQgZWxlbWVudHMgYXJlIHBhc3NlZCBpbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVwbGFjZVxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gbmV3RWxtIE5ldyBlbGVtZW50IHRvIHJlcGxhY2Ugb2xkIG9uZXMgd2l0aC5cblx0XHQgKiBAcGFyYW0ge0VsZW1lbnQvU3RyaW5nL0FycmF5fSBvbGRFbG0gRWxlbWVudCBET00gbm9kZSwgZWxlbWVudCBpZCBvciBhcnJheSBvZiBlbGVtZW50cyBvciBpZHMgdG8gcmVwbGFjZS5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IGtlZXBDaGlsZHJlbiBPcHRpb25hbCBrZWVwIGNoaWxkcmVuIHN0YXRlLCBpZiBzZXQgdG8gdHJ1ZSBjaGlsZCBub2RlcyBmcm9tIHRoZSBvbGQgb2JqZWN0IHdpbGwgYmUgYWRkZWRcblx0XHQgKiB0byBuZXcgb25lcy5cblx0XHQgKi9cblx0XHRyZXBsYWNlOiBmdW5jdGlvbihuZXdFbG0sIG9sZEVsbSwga2VlcENoaWxkcmVuKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHJldHVybiBzZWxmLnJ1bihvbGRFbG0sIGZ1bmN0aW9uKG9sZEVsbSkge1xuXHRcdFx0XHRpZiAoaXMob2xkRWxtLCAnYXJyYXknKSkge1xuXHRcdFx0XHRcdG5ld0VsbSA9IG5ld0VsbS5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoa2VlcENoaWxkcmVuKSB7XG5cdFx0XHRcdFx0ZWFjaChncmVwKG9sZEVsbS5jaGlsZE5vZGVzKSwgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdFx0bmV3RWxtLmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG9sZEVsbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdFbG0sIG9sZEVsbSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVuYW1lcyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgYW5kIGtlZXBzIGl0cyBhdHRyaWJ1dGVzIGFuZCBjaGlsZHJlbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuYW1lXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbG0gRWxlbWVudCB0byByZW5hbWUuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgbmV3IGVsZW1lbnQuXG5cdFx0ICogQHJldHVybiB7RWxlbWVudH0gTmV3IGVsZW1lbnQgb3IgdGhlIG9sZCBlbGVtZW50IGlmIGl0IG5lZWRlZCByZW5hbWluZy5cblx0XHQgKi9cblx0XHRyZW5hbWU6IGZ1bmN0aW9uKGVsbSwgbmFtZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBuZXdFbG07XG5cblx0XHRcdGlmIChlbG0ubm9kZU5hbWUgIT0gbmFtZS50b1VwcGVyQ2FzZSgpKSB7XG5cdFx0XHRcdC8vIFJlbmFtZSBibG9jayBlbGVtZW50XG5cdFx0XHRcdG5ld0VsbSA9IHNlbGYuY3JlYXRlKG5hbWUpO1xuXG5cdFx0XHRcdC8vIENvcHkgYXR0cmlicyB0byBuZXcgYmxvY2tcblx0XHRcdFx0ZWFjaChzZWxmLmdldEF0dHJpYnMoZWxtKSwgZnVuY3Rpb24oYXR0ck5vZGUpIHtcblx0XHRcdFx0XHRzZWxmLnNldEF0dHJpYihuZXdFbG0sIGF0dHJOb2RlLm5vZGVOYW1lLCBzZWxmLmdldEF0dHJpYihlbG0sIGF0dHJOb2RlLm5vZGVOYW1lKSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIFJlcGxhY2UgYmxvY2tcblx0XHRcdFx0c2VsZi5yZXBsYWNlKG5ld0VsbSwgZWxtLCAxKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ld0VsbSB8fCBlbG07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEZpbmQgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiB0d28gZWxlbWVudHMuIFRoaXMgaXMgYSBzaG9ydGVyIG1ldGhvZCB0aGFuIHVzaW5nIHRoZSBET00gUmFuZ2UgbG9naWMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGZpbmRDb21tb25BbmNlc3RvclxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gYSBFbGVtZW50IHRvIGZpbmQgY29tbW9uIGFuY2VzdG9yIG9mLlxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gYiBFbGVtZW50IHRvIGZpbmQgY29tbW9uIGFuY2VzdG9yIG9mLlxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnR9IENvbW1vbiBhbmNlc3RvciBlbGVtZW50IG9mIHRoZSB0d28gaW5wdXQgZWxlbWVudHMuXG5cdFx0ICovXG5cdFx0ZmluZENvbW1vbkFuY2VzdG9yOiBmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIgcHMgPSBhLCBwZTtcblxuXHRcdFx0d2hpbGUgKHBzKSB7XG5cdFx0XHRcdHBlID0gYjtcblxuXHRcdFx0XHR3aGlsZSAocGUgJiYgcHMgIT0gcGUpIHtcblx0XHRcdFx0XHRwZSA9IHBlLnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocHMgPT0gcGUpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHBzID0gcHMucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFwcyAmJiBhLm93bmVyRG9jdW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuIGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUGFyc2VzIHRoZSBzcGVjaWZpZWQgUkdCIGNvbG9yIHZhbHVlIGFuZCByZXR1cm5zIGEgaGV4IHZlcnNpb24gb2YgdGhhdCBjb2xvci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdG9IZXhcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcmdiVmFsIFJHQiBzdHJpbmcgdmFsdWUgbGlrZSByZ2IoMSwyLDMpXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBIZXggdmVyc2lvbiBvZiB0aGF0IFJHQiB2YWx1ZSBsaWtlICNGRjAwRkYuXG5cdFx0ICovXG5cdFx0dG9IZXg6IGZ1bmN0aW9uKHJnYlZhbCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3R5bGVzLnRvSGV4KFRvb2xzLnRyaW0ocmdiVmFsKSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gb24gdGhlIGVsZW1lbnQgYnkgaWQgb3IgZG9tIGVsZW1lbnQgbm9kZSBvciBhcnJheSBvZiBlbGVtZW50cy9pZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcnVuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRWxlbWVudC9BcnJheX0gZWxtIElEIG9yIERPTSBlbGVtZW50IG9iamVjdCBvciBhcnJheSB3aXRoIGlkcyBvciBlbGVtZW50cy5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgZm9yIGVhY2ggaXRlbS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUgT3B0aW9uYWwgc2NvcGUgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gaW4uXG5cdFx0ICogQHJldHVybiB7T2JqZWN0L0FycmF5fSBTaW5nbGUgb2JqZWN0LCBvciBhbiBhcnJheSBvZiBvYmplY3RzIGlmIG11bHRpcGxlIGlucHV0IGVsZW1lbnRzIHdlcmUgcGFzc2VkIGluLlxuXHRcdCAqL1xuXHRcdHJ1bjogZnVuY3Rpb24oZWxtLCBmdW5jLCBzY29wZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCByZXN1bHQ7XG5cblx0XHRcdGlmICh0eXBlb2YgZWxtID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRlbG0gPSBzZWxmLmdldChlbG0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWVsbSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHNjb3BlID0gc2NvcGUgfHwgdGhpcztcblx0XHRcdGlmICghZWxtLm5vZGVUeXBlICYmIChlbG0ubGVuZ3RoIHx8IGVsbS5sZW5ndGggPT09IDApKSB7XG5cdFx0XHRcdHJlc3VsdCA9IFtdO1xuXG5cdFx0XHRcdGVhY2goZWxtLCBmdW5jdGlvbihlbG0sIGkpIHtcblx0XHRcdFx0XHRpZiAoZWxtKSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGVsbSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRlbG0gPSBzZWxmLmdldChlbG0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChmdW5jLmNhbGwoc2NvcGUsIGVsbSwgaSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZ1bmMuY2FsbChzY29wZSwgZWxtKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIE5vZGVMaXN0IHdpdGggYXR0cmlidXRlcyBmb3IgdGhlIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldEF0dHJpYnNcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50L3N0cmluZ30gZWxtIEVsZW1lbnQgbm9kZSBvciBzdHJpbmcgaWQgdG8gZ2V0IGF0dHJpYnV0ZXMgZnJvbS5cblx0XHQgKiBAcmV0dXJuIHtOb2RlTGlzdH0gTm9kZUxpc3Qgd2l0aCBhdHRyaWJ1dGVzLlxuXHRcdCAqL1xuXHRcdGdldEF0dHJpYnM6IGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0dmFyIGF0dHJzO1xuXG5cdFx0XHRlbG0gPSB0aGlzLmdldChlbG0pO1xuXG5cdFx0XHRpZiAoIWVsbSkge1xuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0lFKSB7XG5cdFx0XHRcdGF0dHJzID0gW107XG5cblx0XHRcdFx0Ly8gT2JqZWN0IHdpbGwgdGhyb3cgZXhjZXB0aW9uIGluIElFXG5cdFx0XHRcdGlmIChlbG0ubm9kZU5hbWUgPT0gJ09CSkVDVCcpIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxtLmF0dHJpYnV0ZXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJRSBkb2Vzbid0IGtlZXAgdGhlIHNlbGVjdGVkIGF0dHJpYnV0ZSBpZiB5b3UgY2xvbmUgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHRcdGlmIChlbG0ubm9kZU5hbWUgPT09ICdPUFRJT04nICYmIHRoaXMuZ2V0QXR0cmliKGVsbSwgJ3NlbGVjdGVkJykpIHtcblx0XHRcdFx0XHRhdHRycy5wdXNoKHtzcGVjaWZpZWQ6IDEsIG5vZGVOYW1lOiAnc2VsZWN0ZWQnfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJdCdzIGNyYXp5IHRoYXQgdGhpcyBpcyBmYXN0ZXIgaW4gSUUgYnV0IGl0J3MgYmVjYXVzZSBpdCByZXR1cm5zIGFsbCBhdHRyaWJ1dGVzIGFsbCB0aGUgdGltZVxuXHRcdFx0XHR2YXIgYXR0clJlZ0V4cCA9IC88XFwvP1tcXHc6XFwtXSsgP3w9W1xcXCJdW15cXFwiXStcXFwifD1cXCdbXlxcJ10rXFwnfD1bXFx3XFwtXSt8Pi9naTtcblx0XHRcdFx0ZWxtLmNsb25lTm9kZShmYWxzZSkub3V0ZXJIVE1MLnJlcGxhY2UoYXR0clJlZ0V4cCwgJycpLnJlcGxhY2UoL1tcXHc6XFwtXSsvZ2ksIGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHRhdHRycy5wdXNoKHtzcGVjaWZpZWQ6IDEsIG5vZGVOYW1lOiBhfSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBhdHRycztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsbS5hdHRyaWJ1dGVzO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIHNwZWNpZmllZCBub2RlIGlzIHRvIGJlIGNvbnNpZGVyZWQgZW1wdHkgb3Igbm90LlxuXHRcdCAqXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB0aW55bWNlLkRPTS5pc0VtcHR5KG5vZGUsIHtpbWc6IHRydWV9KTtcblx0XHQgKiBAbWV0aG9kIGlzRW1wdHlcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudHMgT3B0aW9uYWwgbmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBlbGVtZW50cyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IHRyZWF0ZWQgYXMgbm9uLWVtcHR5IGVsZW1lbnRzLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIG5vZGUgaXMgZW1wdHkgb3Igbm90LlxuXHRcdCAqL1xuXHRcdGlzRW1wdHk6IGZ1bmN0aW9uKG5vZGUsIGVsZW1lbnRzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGksIGF0dHJpYnV0ZXMsIHR5cGUsIHdoaXRlc3BhY2UsIHdhbGtlciwgbmFtZSwgYnJDb3VudCA9IDA7XG5cblx0XHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0XHRpZiAobm9kZSkge1xuXHRcdFx0XHR3YWxrZXIgPSBuZXcgVHJlZVdhbGtlcihub2RlLCBub2RlLnBhcmVudE5vZGUpO1xuXHRcdFx0XHRlbGVtZW50cyA9IGVsZW1lbnRzIHx8IChzZWxmLnNjaGVtYSA/IHNlbGYuc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKSA6IG51bGwpO1xuXHRcdFx0XHR3aGl0ZXNwYWNlID0gc2VsZi5zY2hlbWEgPyBzZWxmLnNjaGVtYS5nZXRXaGl0ZVNwYWNlRWxlbWVudHMoKSA6IHt9O1xuXG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHR0eXBlID0gbm9kZS5ub2RlVHlwZTtcblxuXHRcdFx0XHRcdGlmICh0eXBlID09PSAxKSB7XG5cdFx0XHRcdFx0XHQvLyBJZ25vcmUgYm9ndXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdHZhciBib2d1c1ZhbCA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpO1xuXHRcdFx0XHRcdFx0aWYgKGJvZ3VzVmFsKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSB3YWxrZXIubmV4dChib2d1c1ZhbCA9PT0gJ2FsbCcpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gS2VlcCBlbXB0eSBlbGVtZW50cyBsaWtlIDxpbWcgLz5cblx0XHRcdFx0XHRcdG5hbWUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudHMgJiYgZWxlbWVudHNbbmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHNpbmdsZSBCUiBlbGVtZW50cyBpbiBibG9ja3MgbGlrZSA8cD48YnIgLz48L3A+IG9yIDxwPjxzcGFuPjxiciAvPjwvc3Bhbj48L3A+XG5cdFx0XHRcdFx0XHRcdGlmIChuYW1lID09PSAnYnInKSB7XG5cdFx0XHRcdFx0XHRcdFx0YnJDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSB3YWxrZXIubmV4dCgpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBLZWVwIGVsZW1lbnRzIHdpdGggZGF0YS1ib29rbWFyayBhdHRyaWJ1dGVzIG9yIG5hbWUgYXR0cmlidXRlIGxpa2UgPGEgbmFtZT1cIjFcIj48L2E+XG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzID0gc2VsZi5nZXRBdHRyaWJzKG5vZGUpO1xuXHRcdFx0XHRcdFx0aSA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cmlidXRlc1tpXS5ub2RlTmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKG5hbWUgPT09IFwibmFtZVwiIHx8IG5hbWUgPT09ICdkYXRhLW1jZS1ib29rbWFyaycpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBLZWVwIGNvbW1lbnQgbm9kZXNcblx0XHRcdFx0XHRpZiAodHlwZSA9PSA4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gS2VlcCBub24gd2hpdGVzcGFjZSB0ZXh0IG5vZGVzXG5cdFx0XHRcdFx0aWYgKHR5cGUgPT09IDMgJiYgIXdoaXRlU3BhY2VSZWdFeHAudGVzdChub2RlLm5vZGVWYWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBLZWVwIHdoaXRlc3BhY2UgcHJlc2VydmUgZWxlbWVudHNcblx0XHRcdFx0XHRpZiAodHlwZSA9PT0gMyAmJiBub2RlLnBhcmVudE5vZGUgJiYgd2hpdGVzcGFjZVtub2RlLnBhcmVudE5vZGUubm9kZU5hbWVdICYmIHdoaXRlU3BhY2VSZWdFeHAudGVzdChub2RlLm5vZGVWYWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRub2RlID0gd2Fsa2VyLm5leHQoKTtcblx0XHRcdFx0fSB3aGlsZSAobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBickNvdW50IDw9IDE7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgYSBuZXcgRE9NIFJhbmdlIG9iamVjdC4gVGhpcyB3aWxsIHVzZSB0aGUgbmF0aXZlIERPTSBSYW5nZSBBUEkgaWYgaXQnc1xuXHRcdCAqIGF2YWlsYWJsZS4gSWYgaXQncyBub3QsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBjdXN0b20gVGlueU1DRSBpbXBsZW1lbnRhdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgY3JlYXRlUm5nXG5cdFx0ICogQHJldHVybiB7RE9NUmFuZ2V9IERPTSBSYW5nZSBvYmplY3QuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgcm5nID0gdGlueW1jZS5ET00uY3JlYXRlUm5nKCk7XG5cdFx0ICogYWxlcnQocm5nLnN0YXJ0Q29udGFpbmVyICsgXCIsXCIgKyBybmcuc3RhcnRPZmZzZXQpO1xuXHRcdCAqL1xuXHRcdGNyZWF0ZVJuZzogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZG9jID0gdGhpcy5kb2M7XG5cblx0XHRcdHJldHVybiBkb2MuY3JlYXRlUmFuZ2UgPyBkb2MuY3JlYXRlUmFuZ2UoKSA6IG5ldyBSYW5nZSh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHNwZWNpZmllZCBub2RlIHdpdGhpbiBpdHMgcGFyZW50LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBub2RlSW5kZXhcblx0XHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBsb29rIGZvci5cblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IG5vcm1hbGl6ZWQgT3B0aW9uYWwgdHJ1ZS9mYWxzZSBzdGF0ZSBpZiB0aGUgaW5kZXggaXMgd2hhdCBpdCB3b3VsZCBiZSBhZnRlciBhIG5vcm1hbGl6YXRpb24uXG5cdFx0ICogQHJldHVybiB7TnVtYmVyfSBJbmRleCBvZiB0aGUgc3BlY2lmaWVkIG5vZGUuXG5cdFx0ICovXG5cdFx0bm9kZUluZGV4OiBub2RlSW5kZXgsXG5cblx0XHQvKipcblx0XHQgKiBTcGxpdHMgYW4gZWxlbWVudCBpbnRvIHR3byBuZXcgZWxlbWVudHMgYW5kIHBsYWNlcyB0aGUgc3BlY2lmaWVkIHNwbGl0XG5cdFx0ICogZWxlbWVudCBvciBlbGVtZW50cyBiZXR3ZWVuIHRoZSBuZXcgb25lcy4gRm9yIGV4YW1wbGUgc3BsaXR0aW5nIHRoZSBwYXJhZ3JhcGggYXQgdGhlIGJvbGQgZWxlbWVudCBpblxuXHRcdCAqIHRoaXMgZXhhbXBsZSA8cD5hYmM8Yj5hYmM8L2I+MTIzPC9wPiB3b3VsZCBwcm9kdWNlIDxwPmFiYzwvcD48Yj5hYmM8L2I+PHA+MTIzPC9wPi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc3BsaXRcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudEVsbSBQYXJlbnQgZWxlbWVudCB0byBzcGxpdC5cblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IHNwbGl0RWxtIEVsZW1lbnQgdG8gc3BsaXQgYXQuXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50fSByZXBsYWNlbWVudEVsbSBPcHRpb25hbCByZXBsYWNlbWVudCBlbGVtZW50IHRvIHJlcGxhY2UgdGhlIHNwbGl0IGVsZW1lbnQgd2l0aC5cblx0XHQgKiBAcmV0dXJuIHtFbGVtZW50fSBSZXR1cm5zIHRoZSBzcGxpdCBlbGVtZW50IG9yIHRoZSByZXBsYWNlbWVudCBlbGVtZW50IGlmIHRoYXQgaXMgc3BlY2lmaWVkLlxuXHRcdCAqL1xuXHRcdHNwbGl0OiBmdW5jdGlvbihwYXJlbnRFbG0sIHNwbGl0RWxtLCByZXBsYWNlbWVudEVsbSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCByID0gc2VsZi5jcmVhdGVSbmcoKSwgYmVmLCBhZnQsIHBhO1xuXG5cdFx0XHQvLyBXM0MgdmFsaWQgYnJvd3NlcnMgdGVuZCB0byBsZWF2ZSBlbXB0eSBub2RlcyB0byB0aGUgbGVmdC9yaWdodCBzaWRlIG9mIHRoZSBjb250ZW50cyAtIHRoaXMgbWFrZXMgc2Vuc2Vcblx0XHRcdC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRoYXQgaW4gb3VyIGNvZGUgc2luY2UgaXQgc2VydmVzIG5vIHB1cnBvc2UgZm9yIHRoZSBlbmQgdXNlclxuXHRcdFx0Ly8gRm9yIGV4YW1wbGUgc3BsaXR0aW5nIHRoaXMgaHRtbCBhdCB0aGUgYm9sZCBlbGVtZW50OlxuXHRcdFx0Ly8gICA8cD50ZXh0IDE8c3Bhbj48Yj5DSE9QPC9iPjwvc3Bhbj50ZXh0IDI8L3A+XG5cdFx0XHQvLyB3b3VsZCBwcm9kdWNlOlxuXHRcdFx0Ly8gICA8cD50ZXh0IDE8c3Bhbj48L3NwYW4+PC9wPjxiPkNIT1A8L2I+PHA+PHNwYW4+PC9zcGFuPnRleHQgMjwvcD5cblx0XHRcdC8vIHRoaXMgZnVuY3Rpb24gd2lsbCB0aGVuIHRyaW0gb2ZmIGVtcHR5IGVkZ2VzIGFuZCBwcm9kdWNlOlxuXHRcdFx0Ly8gICA8cD50ZXh0IDE8L3A+PGI+Q0hPUDwvYj48cD50ZXh0IDI8L3A+XG5cdFx0XHRmdW5jdGlvbiB0cmltTm9kZShub2RlKSB7XG5cdFx0XHRcdHZhciBpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcywgdHlwZSA9IG5vZGUubm9kZVR5cGU7XG5cblx0XHRcdFx0ZnVuY3Rpb24gc3Vycm91bmRlZEJ5U3BhbnMobm9kZSkge1xuXHRcdFx0XHRcdHZhciBwcmV2aW91c0lzU3BhbiA9IG5vZGUucHJldmlvdXNTaWJsaW5nICYmIG5vZGUucHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lID09ICdTUEFOJztcblx0XHRcdFx0XHR2YXIgbmV4dElzU3BhbiA9IG5vZGUubmV4dFNpYmxpbmcgJiYgbm9kZS5uZXh0U2libGluZy5ub2RlTmFtZSA9PSAnU1BBTic7XG5cdFx0XHRcdFx0cmV0dXJuIHByZXZpb3VzSXNTcGFuICYmIG5leHRJc1NwYW47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZSA9PSAxICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS10eXBlJykgPT0gJ2Jvb2ttYXJrJykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0dHJpbU5vZGUoY2hpbGRyZW5baV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGUgIT0gOSkge1xuXHRcdFx0XHRcdC8vIEtlZXAgbm9uIHdoaXRlc3BhY2UgdGV4dCBub2Rlc1xuXHRcdFx0XHRcdGlmICh0eXBlID09IDMgJiYgbm9kZS5ub2RlVmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgcGFyZW50IGVsZW1lbnQgaXNuJ3QgYSBibG9jayBvciB0aGVyZSBpc24ndCBhbnkgdXNlZnVsIGNvbnRlbnRzIGZvciBleGFtcGxlIFwiPHA+ICAgPC9wPlwiXG5cdFx0XHRcdFx0XHQvLyBBbHNvIGtlZXAgdGV4dCBub2RlcyB3aXRoIG9ubHkgc3BhY2VzIGlmIHN1cnJvdW5kZWQgYnkgc3BhbnMuXG5cdFx0XHRcdFx0XHQvLyBlZy4gXCI8cD48c3Bhbj5hPC9zcGFuPiA8c3Bhbj5iPC9zcGFuPjwvcD5cIiBzaG91bGQga2VlcCBzcGFjZSBiZXR3ZWVuIGEgYW5kIGJcblx0XHRcdFx0XHRcdHZhciB0cmltbWVkTGVuZ3RoID0gdHJpbShub2RlLm5vZGVWYWx1ZSkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0aWYgKCFzZWxmLmlzQmxvY2sobm9kZS5wYXJlbnROb2RlKSB8fCB0cmltbWVkTGVuZ3RoID4gMCB8fCB0cmltbWVkTGVuZ3RoID09PSAwICYmIHN1cnJvdW5kZWRCeVNwYW5zKG5vZGUpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGUgPT0gMSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIG9ubHkgY2hpbGQgaXMgYSBib29rbWFyayB0aGVuIG1vdmUgaXQgdXBcblx0XHRcdFx0XHRcdGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVzO1xuXG5cdFx0XHRcdFx0XHQvLyBUT0RPIGZpeCB0aGlzIGNvbXBsZXggaWZcblx0XHRcdFx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMSAmJiBjaGlsZHJlblswXSAmJiBjaGlsZHJlblswXS5ub2RlVHlwZSA9PSAxICYmXG5cdFx0XHRcdFx0XHRcdGNoaWxkcmVuWzBdLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpID09ICdib29rbWFyaycpIHtcblx0XHRcdFx0XHRcdFx0bm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZHJlblswXSwgbm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEtlZXAgbm9uIGVtcHR5IGVsZW1lbnRzIG9yIGltZywgaHIgZXRjXG5cdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoIHx8IC9eKGJyfGhyfGlucHV0fGltZykkL2kudGVzdChub2RlLm5vZGVOYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c2VsZi5yZW1vdmUobm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudEVsbSAmJiBzcGxpdEVsbSkge1xuXHRcdFx0XHQvLyBHZXQgYmVmb3JlIGNodW5rXG5cdFx0XHRcdHIuc2V0U3RhcnQocGFyZW50RWxtLnBhcmVudE5vZGUsIHNlbGYubm9kZUluZGV4KHBhcmVudEVsbSkpO1xuXHRcdFx0XHRyLnNldEVuZChzcGxpdEVsbS5wYXJlbnROb2RlLCBzZWxmLm5vZGVJbmRleChzcGxpdEVsbSkpO1xuXHRcdFx0XHRiZWYgPSByLmV4dHJhY3RDb250ZW50cygpO1xuXG5cdFx0XHRcdC8vIEdldCBhZnRlciBjaHVua1xuXHRcdFx0XHRyID0gc2VsZi5jcmVhdGVSbmcoKTtcblx0XHRcdFx0ci5zZXRTdGFydChzcGxpdEVsbS5wYXJlbnROb2RlLCBzZWxmLm5vZGVJbmRleChzcGxpdEVsbSkgKyAxKTtcblx0XHRcdFx0ci5zZXRFbmQocGFyZW50RWxtLnBhcmVudE5vZGUsIHNlbGYubm9kZUluZGV4KHBhcmVudEVsbSkgKyAxKTtcblx0XHRcdFx0YWZ0ID0gci5leHRyYWN0Q29udGVudHMoKTtcblxuXHRcdFx0XHQvLyBJbnNlcnQgYmVmb3JlIGNodW5rXG5cdFx0XHRcdHBhID0gcGFyZW50RWxtLnBhcmVudE5vZGU7XG5cdFx0XHRcdHBhLmluc2VydEJlZm9yZSh0cmltTm9kZShiZWYpLCBwYXJlbnRFbG0pO1xuXG5cdFx0XHRcdC8vIEluc2VydCBtaWRkbGUgY2h1bmtcblx0XHRcdFx0aWYgKHJlcGxhY2VtZW50RWxtKSB7XG5cdFx0XHRcdFx0cGEuaW5zZXJ0QmVmb3JlKHJlcGxhY2VtZW50RWxtLCBwYXJlbnRFbG0pO1xuXHRcdFx0XHRcdC8vcGEucmVwbGFjZUNoaWxkKHJlcGxhY2VtZW50RWxtLCBzcGxpdEVsbSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGEuaW5zZXJ0QmVmb3JlKHNwbGl0RWxtLCBwYXJlbnRFbG0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSW5zZXJ0IGFmdGVyIGNodW5rXG5cdFx0XHRcdHBhLmluc2VydEJlZm9yZSh0cmltTm9kZShhZnQpLCBwYXJlbnRFbG0pO1xuXHRcdFx0XHRzZWxmLnJlbW92ZShwYXJlbnRFbG0pO1xuXG5cdFx0XHRcdHJldHVybiByZXBsYWNlbWVudEVsbSB8fCBzcGxpdEVsbTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhbiBldmVudCBoYW5kbGVyIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBiaW5kXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50L0RvY3VtZW50L1dpbmRvdy9BcnJheX0gdGFyZ2V0IFRhcmdldCBlbGVtZW50IHRvIGJpbmQgZXZlbnRzIHRvLlxuXHRcdCAqIGhhbmRsZXIgdG8gb3IgYW4gYXJyYXkgb2YgZWxlbWVudHMvaWRzL2RvY3VtZW50cy5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIGV2ZW50IGhhbmRsZXIgdG8gYWRkLCBmb3IgZXhhbXBsZTogY2xpY2suXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuYyBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGV2ZW50IG9jY3Vycy5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUgT3B0aW9uYWwgc2NvcGUgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gaW4uXG5cdFx0ICogQHJldHVybiB7ZnVuY3Rpb259IEZ1bmN0aW9uIGNhbGxiYWNrIGhhbmRsZXIgdGhlIHNhbWUgYXMgdGhlIG9uZSBwYXNzZWQgaW4uXG5cdFx0ICovXG5cdFx0YmluZDogZnVuY3Rpb24odGFyZ2V0LCBuYW1lLCBmdW5jLCBzY29wZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRpZiAoVG9vbHMuaXNBcnJheSh0YXJnZXQpKSB7XG5cdFx0XHRcdHZhciBpID0gdGFyZ2V0Lmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0dGFyZ2V0W2ldID0gc2VsZi5iaW5kKHRhcmdldFtpXSwgbmFtZSwgZnVuYywgc2NvcGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29sbGVjdCBhbGwgd2luZG93L2RvY3VtZW50IGV2ZW50cyBib3VuZCBieSBlZGl0b3IgaW5zdGFuY2Vcblx0XHRcdGlmIChzZWxmLnNldHRpbmdzLmNvbGxlY3QgJiYgKHRhcmdldCA9PT0gc2VsZi5kb2MgfHwgdGFyZ2V0ID09PSBzZWxmLndpbikpIHtcblx0XHRcdFx0c2VsZi5ib3VuZEV2ZW50cy5wdXNoKFt0YXJnZXQsIG5hbWUsIGZ1bmMsIHNjb3BlXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmLmV2ZW50cy5iaW5kKHRhcmdldCwgbmFtZSwgZnVuYywgc2NvcGUgfHwgc2VsZik7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBldmVudCBoYW5kbGVyIGJ5IG5hbWUgYW5kIGZ1bmN0aW9uIGZyb20gYW4gZWxlbWVudCBvciBjb2xsZWN0aW9uIG9mIGVsZW1lbnRzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB1bmJpbmRcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnQvRG9jdW1lbnQvV2luZG93L0FycmF5fSB0YXJnZXQgVGFyZ2V0IGVsZW1lbnQgdG8gdW5iaW5kIGV2ZW50cyBvbi5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBFdmVudCBoYW5kbGVyIG5hbWUsIGZvciBleGFtcGxlOiBcImNsaWNrXCJcblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIEZ1bmN0aW9uIHRvIHJlbW92ZS5cblx0XHQgKiBAcmV0dXJuIHtib29sL0FycmF5fSBCb29sIHN0YXRlIG9mIHRydWUgaWYgdGhlIGhhbmRsZXIgd2FzIHJlbW92ZWQsIG9yIGFuIGFycmF5IG9mIHN0YXRlcyBpZiBtdWx0aXBsZSBpbnB1dCBlbGVtZW50c1xuXHRcdCAqIHdlcmUgcGFzc2VkIGluLlxuXHRcdCAqL1xuXHRcdHVuYmluZDogZnVuY3Rpb24odGFyZ2V0LCBuYW1lLCBmdW5jKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGk7XG5cblx0XHRcdGlmIChUb29scy5pc0FycmF5KHRhcmdldCkpIHtcblx0XHRcdFx0aSA9IHRhcmdldC5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdHRhcmdldFtpXSA9IHNlbGYudW5iaW5kKHRhcmdldFtpXSwgbmFtZSwgZnVuYyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgYW55IGJvdW5kIGV2ZW50cyBtYXRjaGluZyB0aGUgaW5wdXRcblx0XHRcdGlmIChzZWxmLmJvdW5kRXZlbnRzICYmICh0YXJnZXQgPT09IHNlbGYuZG9jIHx8IHRhcmdldCA9PT0gc2VsZi53aW4pKSB7XG5cdFx0XHRcdGkgPSBzZWxmLmJvdW5kRXZlbnRzLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0dmFyIGl0ZW0gPSBzZWxmLmJvdW5kRXZlbnRzW2ldO1xuXG5cdFx0XHRcdFx0aWYgKHRhcmdldCA9PSBpdGVtWzBdICYmICghbmFtZSB8fCBuYW1lID09IGl0ZW1bMV0pICYmICghZnVuYyB8fCBmdW5jID09IGl0ZW1bMl0pKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmV2ZW50cy51bmJpbmQoaXRlbVswXSwgaXRlbVsxXSwgaXRlbVsyXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLmV2ZW50cy51bmJpbmQodGFyZ2V0LCBuYW1lLCBmdW5jKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRmlyZXMgdGhlIHNwZWNpZmllZCBldmVudCBuYW1lIHdpdGggb2JqZWN0IG9uIHRhcmdldC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZmlyZVxuXHRcdCAqIEBwYXJhbSB7Tm9kZS9Eb2N1bWVudC9XaW5kb3d9IHRhcmdldCBUYXJnZXQgZWxlbWVudCBvciBvYmplY3QgdG8gZmlyZSBldmVudCBvbi5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBldmVudCB0byBmaXJlLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldnQgRXZlbnQgb2JqZWN0IHRvIHNlbmQuXG5cdFx0ICogQHJldHVybiB7RXZlbnR9IEV2ZW50IG9iamVjdC5cblx0XHQgKi9cblx0XHRmaXJlOiBmdW5jdGlvbih0YXJnZXQsIG5hbWUsIGV2dCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXZlbnRzLmZpcmUodGFyZ2V0LCBuYW1lLCBldnQpO1xuXHRcdH0sXG5cblx0XHQvLyBSZXR1cm5zIHRoZSBjb250ZW50IGVkaXRhYmxlIHN0YXRlIG9mIGEgbm9kZVxuXHRcdGdldENvbnRlbnRFZGl0YWJsZTogZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0dmFyIGNvbnRlbnRFZGl0YWJsZTtcblxuXHRcdFx0Ly8gQ2hlY2sgdHlwZVxuXHRcdFx0aWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgIT0gMSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGZha2UgY29udGVudCBlZGl0YWJsZVxuXHRcdFx0Y29udGVudEVkaXRhYmxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1jZS1jb250ZW50ZWRpdGFibGVcIik7XG5cdFx0XHRpZiAoY29udGVudEVkaXRhYmxlICYmIGNvbnRlbnRFZGl0YWJsZSAhPT0gXCJpbmhlcml0XCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnRFZGl0YWJsZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIHJlYWwgY29udGVudCBlZGl0YWJsZVxuXHRcdFx0cmV0dXJuIG5vZGUuY29udGVudEVkaXRhYmxlICE9PSBcImluaGVyaXRcIiA/IG5vZGUuY29udGVudEVkaXRhYmxlIDogbnVsbDtcblx0XHR9LFxuXG5cdFx0Z2V0Q29udGVudEVkaXRhYmxlUGFyZW50OiBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHR2YXIgcm9vdCA9IHRoaXMuZ2V0Um9vdCgpLCBzdGF0ZSA9IG51bGw7XG5cblx0XHRcdGZvciAoOyBub2RlICYmIG5vZGUgIT09IHJvb3Q7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUpIHtcblx0XHRcdFx0c3RhdGUgPSB0aGlzLmdldENvbnRlbnRFZGl0YWJsZShub2RlKTtcblxuXHRcdFx0XHRpZiAoc3RhdGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIERlc3Ryb3lzIGFsbCBpbnRlcm5hbCByZWZlcmVuY2VzIHRvIHRoZSBET00gdG8gc29sdmUgSUUgbGVhayBpc3N1ZXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGRlc3Ryb3lcblx0XHQgKi9cblx0XHRkZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgYm91bmQgdG8gd2luZG93L2RvY3VtZW50IGJ5IGVkaXRvciBpbnN0YW5jZVxuXHRcdFx0aWYgKHNlbGYuYm91bmRFdmVudHMpIHtcblx0XHRcdFx0dmFyIGkgPSBzZWxmLmJvdW5kRXZlbnRzLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0dmFyIGl0ZW0gPSBzZWxmLmJvdW5kRXZlbnRzW2ldO1xuXHRcdFx0XHRcdHRoaXMuZXZlbnRzLnVuYmluZChpdGVtWzBdLCBpdGVtWzFdLCBpdGVtWzJdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYuYm91bmRFdmVudHMgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXN0b3JlIHNpenpsZSBkb2N1bWVudCB0byB3aW5kb3cuZG9jdW1lbnRcblx0XHRcdC8vIFNpbmNlIHRoZSBjdXJyZW50IGRvY3VtZW50IG1pZ2h0IGJlIHJlbW92ZWQgcHJvZHVjaW5nIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBvbiBJRSBzZWUgIzYzMjVcblx0XHRcdGlmIChTaXp6bGUuc2V0RG9jdW1lbnQpIHtcblx0XHRcdFx0U2l6emxlLnNldERvY3VtZW50KCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYud2luID0gc2VsZi5kb2MgPSBzZWxmLnJvb3QgPSBzZWxmLmV2ZW50cyA9IHNlbGYuZnJhZyA9IG51bGw7XG5cdFx0fSxcblxuXHRcdGlzQ2hpbGRPZjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7XG5cdFx0XHR3aGlsZSAobm9kZSkge1xuXHRcdFx0XHRpZiAocGFyZW50ID09PSBub2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8vICNpZmRlZiBkZWJ1Z1xuXG5cdFx0ZHVtcFJuZzogZnVuY3Rpb24ocikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0J3N0YXJ0Q29udGFpbmVyOiAnICsgci5zdGFydENvbnRhaW5lci5ub2RlTmFtZSArXG5cdFx0XHRcdCcsIHN0YXJ0T2Zmc2V0OiAnICsgci5zdGFydE9mZnNldCArXG5cdFx0XHRcdCcsIGVuZENvbnRhaW5lcjogJyArIHIuZW5kQ29udGFpbmVyLm5vZGVOYW1lICtcblx0XHRcdFx0JywgZW5kT2Zmc2V0OiAnICsgci5lbmRPZmZzZXRcblx0XHRcdCk7XG5cdFx0fSxcblxuXHRcdC8vICNlbmRpZlxuXG5cdFx0X2ZpbmRTaWI6IGZ1bmN0aW9uKG5vZGUsIHNlbGVjdG9yLCBuYW1lKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGZ1bmMgPSBzZWxlY3RvcjtcblxuXHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0Ly8gSWYgZXhwcmVzc2lvbiBtYWtlIGEgZnVuY3Rpb24gb2YgaXQgdXNpbmcgaXNcblx0XHRcdFx0aWYgKHR5cGVvZiBmdW5jID09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0ZnVuYyA9IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZWxmLmlzKG5vZGUsIHNlbGVjdG9yKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTG9vcCBhbGwgc2libGluZ3Ncblx0XHRcdFx0Zm9yIChub2RlID0gbm9kZVtuYW1lXTsgbm9kZTsgbm9kZSA9IG5vZGVbbmFtZV0pIHtcblx0XHRcdFx0XHRpZiAoZnVuYyhub2RlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogSW5zdGFuY2Ugb2YgRE9NVXRpbHMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwcm9wZXJ0eSBET01cblx0ICogQHR5cGUgdGlueW1jZS5kb20uRE9NVXRpbHNcblx0ICogQGV4YW1wbGVcblx0ICogLy8gRXhhbXBsZSBvZiBob3cgdG8gYWRkIGEgY2xhc3MgdG8gc29tZSBlbGVtZW50IGJ5IGlkXG5cdCAqIHRpbnltY2UuRE9NLmFkZENsYXNzKCdzb21laWQnLCAnc29tZWNsYXNzJyk7XG5cdCAqL1xuXHRET01VdGlscy5ET00gPSBuZXcgRE9NVXRpbHMoZG9jdW1lbnQpO1xuXHRET01VdGlscy5ub2RlSW5kZXggPSBub2RlSW5kZXg7XG5cblx0cmV0dXJuIERPTVV0aWxzO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9kb20vU2NyaXB0TG9hZGVyLmpzXG5cbi8qKlxuICogU2NyaXB0TG9hZGVyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qZ2xvYmFscyBjb25zb2xlKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhhbmRsZXMgYXN5bmNocm9ub3VzL3N5bmNocm9ub3VzIGxvYWRpbmcgb2YgSmF2YVNjcmlwdCBmaWxlcyBpdCB3aWxsIGV4ZWN1dGUgY2FsbGJhY2tzXG4gKiB3aGVuIHZhcmlvdXMgaXRlbXMgZ2V0cyBsb2FkZWQuIFRoaXMgY2xhc3MgaXMgdXNlZnVsIHRvIGxvYWQgZXh0ZXJuYWwgSmF2YVNjcmlwdCBmaWxlcy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5kb20uU2NyaXB0TG9hZGVyXG4gKiBAZXhhbXBsZVxuICogLy8gTG9hZCBhIHNjcmlwdCBmcm9tIGEgc3BlY2lmaWMgVVJMIHVzaW5nIHRoZSBnbG9iYWwgc2NyaXB0IGxvYWRlclxuICogdGlueW1jZS5TY3JpcHRMb2FkZXIubG9hZCgnc29tZXNjcmlwdC5qcycpO1xuICpcbiAqIC8vIExvYWQgYSBzY3JpcHQgdXNpbmcgYSB1bmlxdWUgaW5zdGFuY2Ugb2YgdGhlIHNjcmlwdCBsb2FkZXJcbiAqIHZhciBzY3JpcHRMb2FkZXIgPSBuZXcgdGlueW1jZS5kb20uU2NyaXB0TG9hZGVyKCk7XG4gKlxuICogc2NyaXB0TG9hZGVyLmxvYWQoJ3NvbWVzY3JpcHQuanMnKTtcbiAqXG4gKiAvLyBMb2FkIG11bHRpcGxlIHNjcmlwdHNcbiAqIHZhciBzY3JpcHRMb2FkZXIgPSBuZXcgdGlueW1jZS5kb20uU2NyaXB0TG9hZGVyKCk7XG4gKlxuICogc2NyaXB0TG9hZGVyLmFkZCgnc29tZXNjcmlwdDEuanMnKTtcbiAqIHNjcmlwdExvYWRlci5hZGQoJ3NvbWVzY3JpcHQyLmpzJyk7XG4gKiBzY3JpcHRMb2FkZXIuYWRkKCdzb21lc2NyaXB0My5qcycpO1xuICpcbiAqIHNjcmlwdExvYWRlci5sb2FkUXVldWUoZnVuY3Rpb24oKSB7XG4gKiAgICBhbGVydCgnQWxsIHNjcmlwdHMgYXJlIG5vdyBsb2FkZWQuJyk7XG4gKiB9KTtcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kb20vU2NyaXB0TG9hZGVyXCIsIFtcblx0XCJ0aW55bWNlL2RvbS9ET01VdGlsc1wiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihET01VdGlscywgVG9vbHMpIHtcblx0dmFyIERPTSA9IERPTVV0aWxzLkRPTTtcblx0dmFyIGVhY2ggPSBUb29scy5lYWNoLCBncmVwID0gVG9vbHMuZ3JlcDtcblxuXHR2YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIChmKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBmID09PSAnZnVuY3Rpb24nO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIFNjcmlwdExvYWRlcigpIHtcblx0XHR2YXIgUVVFVUVEID0gMCxcblx0XHRcdExPQURJTkcgPSAxLFxuXHRcdFx0TE9BREVEID0gMixcblx0XHRcdEZBSUxFRCA9IDMsXG5cdFx0XHRzdGF0ZXMgPSB7fSxcblx0XHRcdHF1ZXVlID0gW10sXG5cdFx0XHRzY3JpcHRMb2FkZWRDYWxsYmFja3MgPSB7fSxcblx0XHRcdHF1ZXVlTG9hZGVkQ2FsbGJhY2tzID0gW10sXG5cdFx0XHRsb2FkaW5nID0gMCxcblx0XHRcdHVuZGVmO1xuXG5cdFx0LyoqXG5cdFx0ICogTG9hZHMgYSBzcGVjaWZpYyBzY3JpcHQgZGlyZWN0bHkgd2l0aG91dCBhZGRpbmcgaXQgdG8gdGhlIGxvYWQgcXVldWUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGxvYWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdXJsIEFic29sdXRlIFVSTCB0byBzY3JpcHQgdG8gYWRkLlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIE9wdGlvbmFsIHN1Y2Nlc3MgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgc2NyaXB0IGxvYWRlZCBzdWNjZXNzZnVsbHkuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3B0aW9uYWwgZmFpbHVyZSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBzY3JpcHQgZmFpbGVkIHRvIGxvYWQuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gbG9hZFNjcmlwdCh1cmwsIHN1Y2Nlc3MsIGZhaWx1cmUpIHtcblx0XHRcdHZhciBkb20gPSBET00sIGVsbSwgaWQ7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2sgd2hlbiBzY3JpcHQgaXMgbG9hZGVkXG5cdFx0XHRmdW5jdGlvbiBkb25lKCkge1xuXHRcdFx0XHRkb20ucmVtb3ZlKGlkKTtcblxuXHRcdFx0XHRpZiAoZWxtKSB7XG5cdFx0XHRcdFx0ZWxtLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGVsbS5vbmxvYWQgPSBlbG0gPSBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3VjY2VzcygpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBlcnJvcigpIHtcblx0XHRcdFx0Lyplc2xpbnQgbm8tY29uc29sZTowICovXG5cblx0XHRcdFx0Ly8gV2UgY2FuJ3QgbWFyayBpdCBhcyBkb25lIGlmIHRoZXJlIGlzIGEgbG9hZCBlcnJvciBzaW5jZVxuXHRcdFx0XHQvLyBBKSBXZSBkb24ndCB3YW50IHRvIHByb2R1Y2UgNDA0IGVycm9ycyBvbiB0aGUgc2VydmVyIGFuZFxuXHRcdFx0XHQvLyBCKSB0aGUgb25lcnJvciBldmVudCB3b24ndCBmaXJlIG9uIGFsbCBicm93c2Vycy5cblx0XHRcdFx0Ly8gZG9uZSgpO1xuXG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKGZhaWx1cmUpKSB7XG5cdFx0XHRcdFx0ZmFpbHVyZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFJlcG9ydCB0aGUgZXJyb3Igc28gaXQncyBlYXNpZXIgZm9yIHBlb3BsZSB0byBzcG90IGxvYWRpbmcgZXJyb3JzXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUubG9nKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIkZhaWxlZCB0byBsb2FkIHNjcmlwdDogXCIgKyB1cmwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZCA9IGRvbS51bmlxdWVJZCgpO1xuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNjcmlwdCBlbGVtZW50XG5cdFx0XHRlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRcdGVsbS5pZCA9IGlkO1xuXHRcdFx0ZWxtLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jztcblx0XHRcdGVsbS5zcmMgPSBUb29scy5fYWRkQ2FjaGVTdWZmaXgodXJsKTtcblxuXHRcdFx0Ly8gU2VlbXMgdGhhdCBvbnJlYWR5c3RhdGVjaGFuZ2Ugd29ya3MgYmV0dGVyIG9uIElFIDEwIG9ubG9hZCBzZWVtcyB0byBmaXJlIGluY29ycmVjdGx5XG5cdFx0XHRpZiAoXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBlbG0pIHtcblx0XHRcdFx0ZWxtLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICgvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGVsbS5yZWFkeVN0YXRlKSkge1xuXHRcdFx0XHRcdFx0ZG9uZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsbS5vbmxvYWQgPSBkb25lO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb25lcnJvciBldmVudCB3aWxsIGdldCBmaXJlZCBvbiBzb21lIGJyb3dzZXJzIGJ1dCBub3QgYWxsIG9mIHRoZW1cblx0XHRcdGVsbS5vbmVycm9yID0gZXJyb3I7XG5cblx0XHRcdC8vIEFkZCBzY3JpcHQgdG8gZG9jdW1lbnRcblx0XHRcdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8IGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKGVsbSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIGEgc2NyaXB0IGhhcyBiZWVuIGxvYWRlZCBvciBub3QuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGlzRG9uZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVVJMIHRvIGNoZWNrIGZvci5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBVUkwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHRcdHRoaXMuaXNEb25lID0gZnVuY3Rpb24odXJsKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVzW3VybF0gPT0gTE9BREVEO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBNYXJrcyBhIHNwZWNpZmljIHNjcmlwdCB0byBiZSBsb2FkZWQuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBhIHNjcmlwdCBnb3QgbG9hZGVkIG91dHNpZGVcblx0XHQgKiB0aGUgc2NyaXB0IGxvYWRlciBvciB0byBza2lwIGl0IGZyb20gbG9hZGluZyBzb21lIHNjcmlwdC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgbWFya0RvbmVcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFic29sdXRlIFVSTCB0byB0aGUgc2NyaXB0IHRvIG1hcmsgYXMgbG9hZGVkLlxuXHRcdCAqL1xuXHRcdHRoaXMubWFya0RvbmUgPSBmdW5jdGlvbih1cmwpIHtcblx0XHRcdHN0YXRlc1t1cmxdID0gTE9BREVEO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBBZGRzIGEgc3BlY2lmaWMgc2NyaXB0IHRvIHRoZSBsb2FkIHF1ZXVlIG9mIHRoZSBzY3JpcHQgbG9hZGVyLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdXJsIEFic29sdXRlIFVSTCB0byBzY3JpcHQgdG8gYWRkLlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1Y2Nlc3MgT3B0aW9uYWwgc3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHNjcmlwdCBsb2FkZXMgc3VjY2Vzc2Z1bGx5LlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBPcHRpb25hbCBzY29wZSB0byBleGVjdXRlIGNhbGxiYWNrIGluLlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGZhaWx1cmUgT3B0aW9uYWwgZmFpbHVyZSBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHNjcmlwdCBmYWlsZWQgdG8gbG9hZC5cblx0XHQgKi9cblx0XHR0aGlzLmFkZCA9IHRoaXMubG9hZCA9IGZ1bmN0aW9uKHVybCwgc3VjY2Vzcywgc2NvcGUsIGZhaWx1cmUpIHtcblx0XHRcdHZhciBzdGF0ZSA9IHN0YXRlc1t1cmxdO1xuXG5cdFx0XHQvLyBBZGQgdXJsIHRvIGxvYWQgcXVldWVcblx0XHRcdGlmIChzdGF0ZSA9PSB1bmRlZikge1xuXHRcdFx0XHRxdWV1ZS5wdXNoKHVybCk7XG5cdFx0XHRcdHN0YXRlc1t1cmxdID0gUVVFVUVEO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3VjY2Vzcykge1xuXHRcdFx0XHQvLyBTdG9yZSBhd2F5IGNhbGxiYWNrIGZvciBsYXRlciBleGVjdXRpb25cblx0XHRcdFx0aWYgKCFzY3JpcHRMb2FkZWRDYWxsYmFja3NbdXJsXSkge1xuXHRcdFx0XHRcdHNjcmlwdExvYWRlZENhbGxiYWNrc1t1cmxdID0gW107XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzY3JpcHRMb2FkZWRDYWxsYmFja3NbdXJsXS5wdXNoKHtcblx0XHRcdFx0XHRzdWNjZXNzOiBzdWNjZXNzLFxuXHRcdFx0XHRcdGZhaWx1cmU6IGZhaWx1cmUsXG5cdFx0XHRcdFx0c2NvcGU6IHNjb3BlIHx8IHRoaXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMucmVtb3ZlID0gZnVuY3Rpb24odXJsKSB7XG5cdFx0XHRkZWxldGUgc3RhdGVzW3VybF07XG5cdFx0XHRkZWxldGUgc2NyaXB0TG9hZGVkQ2FsbGJhY2tzW3VybF07XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFN0YXJ0cyB0aGUgbG9hZGluZyBvZiB0aGUgcXVldWUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGxvYWRRdWV1ZVxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1Y2Nlc3MgT3B0aW9uYWwgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIGFsbCBxdWV1ZWQgaXRlbXMgYXJlIGxvYWRlZC5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmYWlsdXJlIE9wdGlvbmFsIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiBxdWV1ZWQgaXRlbXMgZmFpbGVkIHRvIGxvYWQuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIE9wdGlvbmFsIHNjb3BlIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGluLlxuXHRcdCAqL1xuXHRcdHRoaXMubG9hZFF1ZXVlID0gZnVuY3Rpb24oc3VjY2Vzcywgc2NvcGUsIGZhaWx1cmUpIHtcblx0XHRcdHRoaXMubG9hZFNjcmlwdHMocXVldWUsIHN1Y2Nlc3MsIHNjb3BlLCBmYWlsdXJlKTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogTG9hZHMgdGhlIHNwZWNpZmllZCBxdWV1ZSBvZiBmaWxlcyBhbmQgZXhlY3V0ZXMgdGhlIGNhbGxiYWNrIG9uZXMgdGhleSBhcmUgbG9hZGVkLlxuXHRcdCAqIFRoaXMgbWV0aG9kIGlzIGdlbmVyYWxseSBub3QgdXNlZCBvdXRzaWRlIHRoaXMgY2xhc3MgYnV0IGl0IG1pZ2h0IGJlIHVzZWZ1bCBpbiBzb21lIHNjZW5hcmlvcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgbG9hZFNjcmlwdHNcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBzY3JpcHRzIEFycmF5IG9mIHF1ZXVlIGl0ZW1zIHRvIGxvYWQuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3B0aW9uYWwgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHNjcmlwdHMgaXMgbG9hZGVkIHN1Y2Nlc3NmdWxseS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUgT3B0aW9uYWwgc2NvcGUgdG8gZXhlY3V0ZSBjYWxsYmFjayBpbi5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBPcHRpb25hbCBjYWxsYmFjayB0byBleGVjdXRlIGlmIHNjcmlwdHMgZmFpbGVkIHRvIGxvYWQuXG5cdFx0ICovXG5cdFx0dGhpcy5sb2FkU2NyaXB0cyA9IGZ1bmN0aW9uKHNjcmlwdHMsIHN1Y2Nlc3MsIHNjb3BlLCBmYWlsdXJlKSB7XG5cdFx0XHR2YXIgbG9hZFNjcmlwdHMsIGZhaWx1cmVzID0gW107XG5cblx0XHRcdGZ1bmN0aW9uIGV4ZWNDYWxsYmFja3MobmFtZSwgdXJsKSB7XG5cdFx0XHRcdC8vIEV4ZWN1dGUgVVJMIGNhbGxiYWNrIGZ1bmN0aW9uc1xuXHRcdFx0XHRlYWNoKHNjcmlwdExvYWRlZENhbGxiYWNrc1t1cmxdLCBmdW5jdGlvbihjYWxsYmFjaykge1xuXHRcdFx0XHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrW25hbWVdKSkge1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2tbbmFtZV0uY2FsbChjYWxsYmFjay5zY29wZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzY3JpcHRMb2FkZWRDYWxsYmFja3NbdXJsXSA9IHVuZGVmO1xuXHRcdFx0fVxuXG5cdFx0XHRxdWV1ZUxvYWRlZENhbGxiYWNrcy5wdXNoKHtcblx0XHRcdFx0c3VjY2Vzczogc3VjY2Vzcyxcblx0XHRcdFx0ZmFpbHVyZTogZmFpbHVyZSxcblx0XHRcdFx0c2NvcGU6IHNjb3BlIHx8IHRoaXNcblx0XHRcdH0pO1xuXG5cdFx0XHRsb2FkU2NyaXB0cyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgbG9hZGluZ1NjcmlwdHMgPSBncmVwKHNjcmlwdHMpO1xuXG5cdFx0XHRcdC8vIEN1cnJlbnQgc2NyaXB0cyBoYXMgYmVlbiBoYW5kbGVkXG5cdFx0XHRcdHNjcmlwdHMubGVuZ3RoID0gMDtcblxuXHRcdFx0XHQvLyBMb2FkIHNjcmlwdHMgdGhhdCBuZWVkcyB0byBiZSBsb2FkZWRcblx0XHRcdFx0ZWFjaChsb2FkaW5nU2NyaXB0cywgZnVuY3Rpb24odXJsKSB7XG5cdFx0XHRcdFx0Ly8gU2NyaXB0IGlzIGFscmVhZHkgbG9hZGVkIHRoZW4gZXhlY3V0ZSBzY3JpcHQgY2FsbGJhY2tzIGRpcmVjdGx5XG5cdFx0XHRcdFx0aWYgKHN0YXRlc1t1cmxdID09PSBMT0FERUQpIHtcblx0XHRcdFx0XHRcdGV4ZWNDYWxsYmFja3MoJ3N1Y2Nlc3MnLCB1cmwpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChzdGF0ZXNbdXJsXSA9PT0gRkFJTEVEKSB7XG5cdFx0XHRcdFx0XHRleGVjQ2FsbGJhY2tzKCdmYWlsdXJlJywgdXJsKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJcyBzY3JpcHQgbm90IGxvYWRpbmcgdGhlbiBzdGFydCBsb2FkaW5nIGl0XG5cdFx0XHRcdFx0aWYgKHN0YXRlc1t1cmxdICE9PSBMT0FESU5HKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZXNbdXJsXSA9IExPQURJTkc7XG5cdFx0XHRcdFx0XHRsb2FkaW5nKys7XG5cblx0XHRcdFx0XHRcdGxvYWRTY3JpcHQodXJsLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0c3RhdGVzW3VybF0gPSBMT0FERUQ7XG5cdFx0XHRcdFx0XHRcdGxvYWRpbmctLTtcblxuXHRcdFx0XHRcdFx0XHRleGVjQ2FsbGJhY2tzKCdzdWNjZXNzJywgdXJsKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBMb2FkIG1vcmUgc2NyaXB0cyBpZiB0aGV5IHdoZXJlIGFkZGVkIGJ5IHRoZSByZWNlbnRseSBsb2FkZWQgc2NyaXB0XG5cdFx0XHRcdFx0XHRcdGxvYWRTY3JpcHRzKCk7XG5cdFx0XHRcdFx0XHR9LCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHN0YXRlc1t1cmxdID0gRkFJTEVEO1xuXHRcdFx0XHRcdFx0XHRsb2FkaW5nLS07XG5cblx0XHRcdFx0XHRcdFx0ZmFpbHVyZXMucHVzaCh1cmwpO1xuXHRcdFx0XHRcdFx0XHRleGVjQ2FsbGJhY2tzKCdmYWlsdXJlJywgdXJsKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBMb2FkIG1vcmUgc2NyaXB0cyBpZiB0aGV5IHdoZXJlIGFkZGVkIGJ5IHRoZSByZWNlbnRseSBsb2FkZWQgc2NyaXB0XG5cdFx0XHRcdFx0XHRcdGxvYWRTY3JpcHRzKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIE5vIHNjcmlwdHMgYXJlIGN1cnJlbnRseSBsb2FkaW5nIHRoZW4gZXhlY3V0ZSBhbGwgcGVuZGluZyBxdWV1ZSBsb2FkZWQgY2FsbGJhY2tzXG5cdFx0XHRcdGlmICghbG9hZGluZykge1xuXHRcdFx0XHRcdGVhY2gocXVldWVMb2FkZWRDYWxsYmFja3MsIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZmFpbHVyZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrLnN1Y2Nlc3MpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2suc3VjY2Vzcy5jYWxsKGNhbGxiYWNrLnNjb3BlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2suZmFpbHVyZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFjay5mYWlsdXJlLmNhbGwoY2FsbGJhY2suc2NvcGUsIGZhaWx1cmVzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cXVldWVMb2FkZWRDYWxsYmFja3MubGVuZ3RoID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0bG9hZFNjcmlwdHMoKTtcblx0XHR9O1xuXHR9XG5cblx0U2NyaXB0TG9hZGVyLlNjcmlwdExvYWRlciA9IG5ldyBTY3JpcHRMb2FkZXIoKTtcblxuXHRyZXR1cm4gU2NyaXB0TG9hZGVyO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9BZGRPbk1hbmFnZXIuanNcblxuLyoqXG4gKiBBZGRPbk1hbmFnZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIGxvYWRpbmcgb2YgdGhlbWVzL3BsdWdpbnMgb3Igb3RoZXIgYWRkLW9ucyBhbmQgdGhlaXIgbGFuZ3VhZ2UgcGFja3MuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuQWRkT25NYW5hZ2VyXG4gKi9cbmRlZmluZShcInRpbnltY2UvQWRkT25NYW5hZ2VyXCIsIFtcblx0XCJ0aW55bWNlL2RvbS9TY3JpcHRMb2FkZXJcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxuXSwgZnVuY3Rpb24oU2NyaXB0TG9hZGVyLCBUb29scykge1xuXHR2YXIgZWFjaCA9IFRvb2xzLmVhY2g7XG5cblx0ZnVuY3Rpb24gQWRkT25NYW5hZ2VyKCkge1xuXHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdHNlbGYuaXRlbXMgPSBbXTtcblx0XHRzZWxmLnVybHMgPSB7fTtcblx0XHRzZWxmLmxvb2t1cCA9IHt9O1xuXHR9XG5cblx0QWRkT25NYW5hZ2VyLnByb3RvdHlwZSA9IHtcblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgYWRkIG9uIGJ5IHRoZSBzaG9ydCBuYW1lLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBBZGQtb24gdG8gbG9vayBmb3IuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5UaGVtZS90aW55bWNlLlBsdWdpbn0gVGhlbWUgb3IgcGx1Z2luIGFkZC1vbiBpbnN0YW5jZSBvciB1bmRlZmluZWQuXG5cdFx0ICovXG5cdFx0Z2V0OiBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRpZiAodGhpcy5sb29rdXBbbmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMubG9va3VwW25hbWVdLmluc3RhbmNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0sXG5cblx0XHRkZXBlbmRlbmNpZXM6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdGlmICh0aGlzLmxvb2t1cFtuYW1lXSkge1xuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmxvb2t1cFtuYW1lXS5kZXBlbmRlbmNpZXM7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQgfHwgW107XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIExvYWRzIGEgbGFuZ3VhZ2UgcGFjayBmb3IgdGhlIHNwZWNpZmllZCBhZGQtb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlcXVpcmVMYW5nUGFja1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFNob3J0IG5hbWUgb2YgdGhlIGFkZC1vbi5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbGFuZ3VhZ2VzIE9wdGlvbmFsIGNvbW1hIG9yIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGxhbmd1YWdlcyB0byBjaGVjayBpZiBpdCBtYXRjaGVzIHRoZSBuYW1lLlxuXHRcdCAqL1xuXHRcdHJlcXVpcmVMYW5nUGFjazogZnVuY3Rpb24obmFtZSwgbGFuZ3VhZ2VzKSB7XG5cdFx0XHR2YXIgbGFuZ3VhZ2UgPSBBZGRPbk1hbmFnZXIubGFuZ3VhZ2U7XG5cblx0XHRcdGlmIChsYW5ndWFnZSAmJiBBZGRPbk1hbmFnZXIubGFuZ3VhZ2VMb2FkICE9PSBmYWxzZSkge1xuXHRcdFx0XHRpZiAobGFuZ3VhZ2VzKSB7XG5cdFx0XHRcdFx0bGFuZ3VhZ2VzID0gJywnICsgbGFuZ3VhZ2VzICsgJywnO1xuXG5cdFx0XHRcdFx0Ly8gTG9hZCBzaG9ydCBmb3JtIHN2LmpzIG9yIGxvbmcgZm9ybSBzdl9TRS5qc1xuXHRcdFx0XHRcdGlmIChsYW5ndWFnZXMuaW5kZXhPZignLCcgKyBsYW5ndWFnZS5zdWJzdHIoMCwgMikgKyAnLCcpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRsYW5ndWFnZSA9IGxhbmd1YWdlLnN1YnN0cigwLCAyKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGxhbmd1YWdlcy5pbmRleE9mKCcsJyArIGxhbmd1YWdlICsgJywnKSA9PSAtMSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIuYWRkKHRoaXMudXJsc1tuYW1lXSArICcvbGFuZ3MvJyArIGxhbmd1YWdlICsgJy5qcycpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIGEgaW5zdGFuY2Ugb2YgdGhlIGFkZC1vbiBieSBpdCdzIHNob3J0IG5hbWUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBpZCBTaG9ydCBuYW1lL2lkIGZvciB0aGUgYWRkLW9uLlxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS5UaGVtZS90aW55bWNlLlBsdWdpbn0gYWRkT24gVGhlbWUgb3IgcGx1Z2luIHRvIGFkZC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLlRoZW1lL3RpbnltY2UuUGx1Z2lufSBUaGUgc2FtZSB0aGVtZSBvciBwbHVnaW4gaW5zdGFuY2UgdGhhdCBnb3QgcGFzc2VkIGluLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gQ3JlYXRlIGEgc2ltcGxlIHBsdWdpblxuXHRcdCAqIHRpbnltY2UuY3JlYXRlKCd0aW55bWNlLnBsdWdpbnMuVGVzdFBsdWdpbicsIHtcblx0XHQgKiAgIFRlc3RQbHVnaW46IGZ1bmN0aW9uKGVkLCB1cmwpIHtcblx0XHQgKiAgIGVkLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHQgKiAgICAgIGVkLndpbmRvd01hbmFnZXIuYWxlcnQoJ0hlbGxvIFdvcmxkIScpO1xuXHRcdCAqICAgfSk7XG5cdFx0ICogICB9XG5cdFx0ICogfSk7XG5cdFx0ICpcblx0XHQgKiAvLyBSZWdpc3RlciBwbHVnaW4gdXNpbmcgdGhlIGFkZCBtZXRob2Rcblx0XHQgKiB0aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCd0ZXN0JywgdGlueW1jZS5wbHVnaW5zLlRlc3RQbHVnaW4pO1xuXHRcdCAqXG5cdFx0ICogLy8gSW5pdGlhbGl6ZSBUaW55TUNFXG5cdFx0ICogdGlueW1jZS5pbml0KHtcblx0XHQgKiAgLi4uXG5cdFx0ICogIHBsdWdpbnM6ICctdGVzdCcgLy8gSW5pdCB0aGUgcGx1Z2luIGJ1dCBkb24ndCB0cnkgdG8gbG9hZCBpdFxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHRcdGFkZDogZnVuY3Rpb24oaWQsIGFkZE9uLCBkZXBlbmRlbmNpZXMpIHtcblx0XHRcdHRoaXMuaXRlbXMucHVzaChhZGRPbik7XG5cdFx0XHR0aGlzLmxvb2t1cFtpZF0gPSB7aW5zdGFuY2U6IGFkZE9uLCBkZXBlbmRlbmNpZXM6IGRlcGVuZGVuY2llc307XG5cblx0XHRcdHJldHVybiBhZGRPbjtcblx0XHR9LFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRkZWxldGUgdGhpcy51cmxzW25hbWVdO1xuXHRcdFx0ZGVsZXRlIHRoaXMubG9va3VwW25hbWVdO1xuXHRcdH0sXG5cblx0XHRjcmVhdGVVcmw6IGZ1bmN0aW9uKGJhc2VVcmwsIGRlcCkge1xuXHRcdFx0aWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0cmV0dXJuIGRlcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtwcmVmaXg6IGJhc2VVcmwucHJlZml4LCByZXNvdXJjZTogZGVwLCBzdWZmaXg6IGJhc2VVcmwuc3VmZml4fTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWRkIGEgc2V0IG9mIGNvbXBvbmVudHMgdGhhdCB3aWxsIG1ha2UgdXAgdGhlIGFkZC1vbi4gVXNpbmcgdGhlIHVybCBvZiB0aGUgYWRkLW9uIG5hbWUgYXMgdGhlIGJhc2UgdXJsLlxuXHRcdCAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW4gZGV2ZWxvcG1lbnQgbW9kZS4gIEEgbmV3IGNvbXByZXNzb3IvamF2YXNjcmlwdCBtdW5nZXIgcHJvY2VzcyB3aWxsIGVuc3VyZSB0aGF0IHRoZVxuXHRcdCAqIGNvbXBvbmVudHMgYXJlIHB1dCB0b2dldGhlciBpbnRvIHRoZSBwbHVnaW4uanMgZmlsZSBhbmQgY29tcHJlc3NlZCBjb3JyZWN0bHkuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZENvbXBvbmVudHNcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBuYW1lIG9mIHRoZSBwbHVnaW4gdG8gbG9hZCBzY3JpcHRzIGZyb20gKHdpbGwgYmUgdXNlZCB0byBnZXQgdGhlIGJhc2UgdXJsIGZvciB0aGUgcGx1Z2lucykuXG5cdFx0ICogQHBhcmFtIHtBcnJheX0gc2NyaXB0cyBBcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgc2NyaXB0cyB0byBsb2FkLlxuXHRcdCAqL1xuXHRcdGFkZENvbXBvbmVudHM6IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIHNjcmlwdHMpIHtcblx0XHRcdHZhciBwbHVnaW5VcmwgPSB0aGlzLnVybHNbcGx1Z2luTmFtZV07XG5cblx0XHRcdGVhY2goc2NyaXB0cywgZnVuY3Rpb24oc2NyaXB0KSB7XG5cdFx0XHRcdFNjcmlwdExvYWRlci5TY3JpcHRMb2FkZXIuYWRkKHBsdWdpblVybCArIFwiL1wiICsgc2NyaXB0KTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBMb2FkcyBhbiBhZGQtb24gZnJvbSBhIHNwZWNpZmljIHVybC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgbG9hZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFNob3J0IG5hbWUgb2YgdGhlIGFkZC1vbiB0aGF0IGdldHMgbG9hZGVkLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBhZGRPblVybCBVUkwgdG8gdGhlIGFkZC1vbiB0aGF0IHdpbGwgZ2V0IGxvYWRlZC5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdWNjZXNzIE9wdGlvbmFsIHN1Y2Nlc3MgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIGFuIGFkZC1vbiBpcyBsb2FkZWQuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIE9wdGlvbmFsIHNjb3BlIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGluLlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGZhaWx1cmUgT3B0aW9uYWwgZmFpbHVyZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gYW4gYWRkLW9uIGZhaWxlZCB0byBsb2FkLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gTG9hZHMgYSBwbHVnaW4gZnJvbSBhbiBleHRlcm5hbCBVUkxcblx0XHQgKiB0aW55bWNlLlBsdWdpbk1hbmFnZXIubG9hZCgnbXlwbHVnaW4nLCAnL3NvbWUvZGlyL3NvbWVwbHVnaW4vcGx1Z2luLmpzJyk7XG5cdFx0ICpcblx0XHQgKiAvLyBJbml0aWFsaXplIFRpbnlNQ0Vcblx0XHQgKiB0aW55bWNlLmluaXQoe1xuXHRcdCAqICAuLi5cblx0XHQgKiAgcGx1Z2luczogJy1teXBsdWdpbicgLy8gRG9uJ3QgdHJ5IHRvIGxvYWQgaXQgYWdhaW5cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0XHRsb2FkOiBmdW5jdGlvbihuYW1lLCBhZGRPblVybCwgc3VjY2Vzcywgc2NvcGUsIGZhaWx1cmUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgdXJsID0gYWRkT25Vcmw7XG5cblx0XHRcdGZ1bmN0aW9uIGxvYWREZXBlbmRlbmNpZXMoKSB7XG5cdFx0XHRcdHZhciBkZXBlbmRlbmNpZXMgPSBzZWxmLmRlcGVuZGVuY2llcyhuYW1lKTtcblxuXHRcdFx0XHRlYWNoKGRlcGVuZGVuY2llcywgZnVuY3Rpb24oZGVwKSB7XG5cdFx0XHRcdFx0dmFyIG5ld1VybCA9IHNlbGYuY3JlYXRlVXJsKGFkZE9uVXJsLCBkZXApO1xuXG5cdFx0XHRcdFx0c2VsZi5sb2FkKG5ld1VybC5yZXNvdXJjZSwgbmV3VXJsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChzdWNjZXNzKSB7XG5cdFx0XHRcdFx0aWYgKHNjb3BlKSB7XG5cdFx0XHRcdFx0XHRzdWNjZXNzLmNhbGwoc2NvcGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdWNjZXNzLmNhbGwoU2NyaXB0TG9hZGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbGYudXJsc1tuYW1lXSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgYWRkT25VcmwgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0dXJsID0gYWRkT25VcmwucHJlZml4ICsgYWRkT25VcmwucmVzb3VyY2UgKyBhZGRPblVybC5zdWZmaXg7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh1cmwuaW5kZXhPZignLycpICE9PSAwICYmIHVybC5pbmRleE9mKCc6Ly8nKSA9PSAtMSkge1xuXHRcdFx0XHR1cmwgPSBBZGRPbk1hbmFnZXIuYmFzZVVSTCArICcvJyArIHVybDtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi51cmxzW25hbWVdID0gdXJsLnN1YnN0cmluZygwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XG5cblx0XHRcdGlmIChzZWxmLmxvb2t1cFtuYW1lXSkge1xuXHRcdFx0XHRsb2FkRGVwZW5kZW5jaWVzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRTY3JpcHRMb2FkZXIuU2NyaXB0TG9hZGVyLmFkZCh1cmwsIGxvYWREZXBlbmRlbmNpZXMsIHNjb3BlLCBmYWlsdXJlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0QWRkT25NYW5hZ2VyLlBsdWdpbk1hbmFnZXIgPSBuZXcgQWRkT25NYW5hZ2VyKCk7XG5cdEFkZE9uTWFuYWdlci5UaGVtZU1hbmFnZXIgPSBuZXcgQWRkT25NYW5hZ2VyKCk7XG5cblx0cmV0dXJuIEFkZE9uTWFuYWdlcjtcbn0pO1xuXG4vKipcbiAqIFRpbnlNQ0UgdGhlbWUgY2xhc3MuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuVGhlbWVcbiAqL1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciByZW5kZXJpbmcvZ2VuZXJhdGluZyB0aGUgb3ZlcmFsbCB1c2VyIGludGVyZmFjZSB3aXRoIHRvb2xiYXJzLCBidXR0b25zLCBpZnJhbWUgY29udGFpbmVycyBldGMuXG4gKlxuICogQG1ldGhvZCByZW5kZXJVSVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIHRhcmdldE5vZGUgRE9NIG5vZGUgdGhhdCB3aWxsIGJlIHJlcGxhY2VkIHZpc3VhbGx5IHdpdGggYW4gZWRpdG9yIGluc3RhbmNlLlxuICogQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3Qgd2l0aCBpdGVtcyBsaWtlIGlmcmFtZUNvbnRhaW5lciwgZWRpdG9yQ29udGFpbmVyLCBzaXplQ29udGFpbmVyLCBkZWx0YVdpZHRoLCBkZWx0YUhlaWdodC5cbiAqL1xuXG4vKipcbiAqIFBsdWdpbiBiYXNlIGNsYXNzLCB0aGlzIGlzIGEgcHNldWRvIGNsYXNzIHRoYXQgZGVzY3JpYmVzIGhvdyBhIHBsdWdpbiBpcyB0byBiZSBjcmVhdGVkIGZvciBUaW55TUNFLiBUaGUgbWV0aG9kcyBiZWxvdyBhcmUgYWxsIG9wdGlvbmFsLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLlBsdWdpblxuICogQGV4YW1wbGVcbiAqIHRpbnltY2UuUGx1Z2luTWFuYWdlci5hZGQoJ2V4YW1wbGUnLCBmdW5jdGlvbihlZGl0b3IsIHVybCkge1xuICogICAgIC8vIEFkZCBhIGJ1dHRvbiB0aGF0IG9wZW5zIGEgd2luZG93XG4gKiAgICAgZWRpdG9yLmFkZEJ1dHRvbignZXhhbXBsZScsIHtcbiAqICAgICAgICAgdGV4dDogJ015IGJ1dHRvbicsXG4gKiAgICAgICAgIGljb246IGZhbHNlLFxuICogICAgICAgICBvbmNsaWNrOiBmdW5jdGlvbigpIHtcbiAqICAgICAgICAgICAgIC8vIE9wZW4gd2luZG93XG4gKiAgICAgICAgICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5vcGVuKHtcbiAqICAgICAgICAgICAgICAgICB0aXRsZTogJ0V4YW1wbGUgcGx1Z2luJyxcbiAqICAgICAgICAgICAgICAgICBib2R5OiBbXG4gKiAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAndGV4dGJveCcsIG5hbWU6ICd0aXRsZScsIGxhYmVsOiAnVGl0bGUnfVxuICogICAgICAgICAgICAgICAgIF0sXG4gKiAgICAgICAgICAgICAgICAgb25zdWJtaXQ6IGZ1bmN0aW9uKGUpIHtcbiAqICAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGNvbnRlbnQgd2hlbiB0aGUgd2luZG93IGZvcm0gaXMgc3VibWl0dGVkXG4gKiAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5pbnNlcnRDb250ZW50KCdUaXRsZTogJyArIGUuZGF0YS50aXRsZSk7XG4gKiAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgfSk7XG4gKiAgICAgICAgIH1cbiAqICAgICB9KTtcbiAqXG4gKiAgICAgLy8gQWRkcyBhIG1lbnUgaXRlbSB0byB0aGUgdG9vbHMgbWVudVxuICogICAgIGVkaXRvci5hZGRNZW51SXRlbSgnZXhhbXBsZScsIHtcbiAqICAgICAgICAgdGV4dDogJ0V4YW1wbGUgcGx1Z2luJyxcbiAqICAgICAgICAgY29udGV4dDogJ3Rvb2xzJyxcbiAqICAgICAgICAgb25jbGljazogZnVuY3Rpb24oKSB7XG4gKiAgICAgICAgICAgICAvLyBPcGVuIHdpbmRvdyB3aXRoIGEgc3BlY2lmaWMgdXJsXG4gKiAgICAgICAgICAgICBlZGl0b3Iud2luZG93TWFuYWdlci5vcGVuKHtcbiAqICAgICAgICAgICAgICAgICB0aXRsZTogJ1RpbnlNQ0Ugc2l0ZScsXG4gKiAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cDovL3d3dy50aW55bWNlLmNvbScsXG4gKiAgICAgICAgICAgICAgICAgd2lkdGg6IDgwMCxcbiAqICAgICAgICAgICAgICAgICBoZWlnaHQ6IDYwMCxcbiAqICAgICAgICAgICAgICAgICBidXR0b25zOiBbe1xuICogICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnQ2xvc2UnLFxuICogICAgICAgICAgICAgICAgICAgICBvbmNsaWNrOiAnY2xvc2UnXG4gKiAgICAgICAgICAgICAgICAgfV1cbiAqICAgICAgICAgICAgIH0pO1xuICogICAgICAgICB9XG4gKiAgICAgfSk7XG4gKiB9KTtcbiAqL1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZG9tL05vZGVUeXBlLmpzXG5cbi8qKlxuICogTm9kZVR5cGUuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDb250YWlucyB2YXJpb3VzIG5vZGUgdmFsaWRhdGlvbiBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmRvbS5Ob2RlVHlwZVxuICovXG5kZWZpbmUoXCJ0aW55bWNlL2RvbS9Ob2RlVHlwZVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdGZ1bmN0aW9uIGlzTm9kZVR5cGUodHlwZSkge1xuXHRcdHJldHVybiBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRyZXR1cm4gISFub2RlICYmIG5vZGUubm9kZVR5cGUgPT0gdHlwZTtcblx0XHR9O1xuXHR9XG5cblx0dmFyIGlzRWxlbWVudCA9IGlzTm9kZVR5cGUoMSk7XG5cblx0ZnVuY3Rpb24gbWF0Y2hOb2RlTmFtZXMobmFtZXMpIHtcblx0XHRuYW1lcyA9IG5hbWVzLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHR2YXIgaSwgbmFtZTtcblxuXHRcdFx0aWYgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSkge1xuXHRcdFx0XHRuYW1lID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmIChuYW1lID09PSBuYW1lc1tpXSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gbWF0Y2hTdHlsZVZhbHVlcyhuYW1lLCB2YWx1ZXMpIHtcblx0XHR2YWx1ZXMgPSB2YWx1ZXMudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdHZhciBpLCBjc3NWYWx1ZTtcblxuXHRcdFx0aWYgKGlzRWxlbWVudChub2RlKSkge1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Y3NzVmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG5cdFx0XHRcdFx0aWYgKGNzc1ZhbHVlID09PSB2YWx1ZXNbaV0pIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGhhc1Byb3BWYWx1ZShwcm9wTmFtZSwgcHJvcFZhbHVlKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdHJldHVybiBpc0VsZW1lbnQobm9kZSkgJiYgbm9kZVtwcm9wTmFtZV0gPT09IHByb3BWYWx1ZTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQXR0cmlidXRlVmFsdWUoYXR0ck5hbWUsIGF0dHJWYWx1ZSkge1xuXHRcdHJldHVybiBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRyZXR1cm4gaXNFbGVtZW50KG5vZGUpICYmIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PT0gYXR0clZhbHVlO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBpc0JvZ3VzKG5vZGUpIHtcblx0XHRyZXR1cm4gaXNFbGVtZW50KG5vZGUpICYmIG5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpO1xuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQ29udGVudEVkaXRhYmxlU3RhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0aWYgKGlzRWxlbWVudChub2RlKSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb250ZW50RWRpdGFibGUgPT09IHZhbHVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNvbnRlbnRlZGl0YWJsZScpID09PSB2YWx1ZSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRpc1RleHQ6IGlzTm9kZVR5cGUoMyksXG5cdFx0aXNFbGVtZW50OiBpc0VsZW1lbnQsXG5cdFx0aXNDb21tZW50OiBpc05vZGVUeXBlKDgpLFxuXHRcdGlzQnI6IG1hdGNoTm9kZU5hbWVzKCdicicpLFxuXHRcdGlzQ29udGVudEVkaXRhYmxlVHJ1ZTogaGFzQ29udGVudEVkaXRhYmxlU3RhdGUoJ3RydWUnKSxcblx0XHRpc0NvbnRlbnRFZGl0YWJsZUZhbHNlOiBoYXNDb250ZW50RWRpdGFibGVTdGF0ZSgnZmFsc2UnKSxcblx0XHRtYXRjaE5vZGVOYW1lczogbWF0Y2hOb2RlTmFtZXMsXG5cdFx0aGFzUHJvcFZhbHVlOiBoYXNQcm9wVmFsdWUsXG5cdFx0aGFzQXR0cmlidXRlVmFsdWU6IGhhc0F0dHJpYnV0ZVZhbHVlLFxuXHRcdG1hdGNoU3R5bGVWYWx1ZXM6IG1hdGNoU3R5bGVWYWx1ZXMsXG5cdFx0aXNCb2d1czogaXNCb2d1c1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy90ZXh0L1p3c3AuanNcblxuLyoqXG4gKiBad3NwLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB6ZXJvIHdpZHRoIHNwYWNlXG4gKiBjaGFyYWN0ZXJzIHVzZWQgYXMgY2hhcmFjdGVyIGNvbnRhaW5lcnMgZXRjLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS50ZXh0Llp3c3BcbiAqIEBleGFtcGxlXG4gKiB2YXIgaXNad3NwID0gWndzcC5pc1p3c3AoJ1xcdUZFRkYnKTtcbiAqIHZhciBhYmMgPSBad3NwLnRyaW0oJ2FcXHVGRUZGYycpO1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL3RleHQvWndzcFwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdHZhciBaV1NQID0gJ1xcdUZFRkYnO1xuXG5cdGZ1bmN0aW9uIGlzWndzcChjaHIpIHtcblx0XHRyZXR1cm4gY2hyID09IFpXU1A7XG5cdH1cblxuXHRmdW5jdGlvbiB0cmltKHN0cikge1xuXHRcdHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKFpXU1AsICdnJyksICcnKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aXNad3NwOiBpc1p3c3AsXG5cdFx0WldTUDogWldTUCxcblx0XHR0cmltOiB0cmltXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2NhcmV0L0NhcmV0Q29udGFpbmVyLmpzXG5cbi8qKlxuICogQ2FyZXRDb250YWluZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBoYW5kbGVzIGNhcmV0IGNvbnRhaW5lcnMuIEEgY2FyZXQgY29udGFpbmVyIGlzIGEgbm9kZSB0aGF0XG4gKiBob2xkcyB0aGUgY2FyZXQgZm9yIHBvc2l0aW9uYWwgcHVycG9zZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmNhcmV0LkNhcmV0Q29udGFpbmVyXG4gKi9cbmRlZmluZShcInRpbnltY2UvY2FyZXQvQ2FyZXRDb250YWluZXJcIiwgW1xuXHRcInRpbnltY2UvZG9tL05vZGVUeXBlXCIsXG5cdFwidGlueW1jZS90ZXh0L1p3c3BcIlxuXSwgZnVuY3Rpb24oTm9kZVR5cGUsIFp3c3ApIHtcblx0dmFyIGlzRWxlbWVudCA9IE5vZGVUeXBlLmlzRWxlbWVudCxcblx0XHRpc1RleHQgPSBOb2RlVHlwZS5pc1RleHQ7XG5cblx0ZnVuY3Rpb24gaXNDYXJldENvbnRhaW5lckJsb2NrKG5vZGUpIHtcblx0XHRpZiAoaXNUZXh0KG5vZGUpKSB7XG5cdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0VsZW1lbnQobm9kZSkgJiYgbm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0Jyk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0NhcmV0Q29udGFpbmVySW5saW5lKG5vZGUpIHtcblx0XHRyZXR1cm4gaXNUZXh0KG5vZGUpICYmIFp3c3AuaXNad3NwKG5vZGUuZGF0YSk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0NhcmV0Q29udGFpbmVyKG5vZGUpIHtcblx0XHRyZXR1cm4gaXNDYXJldENvbnRhaW5lckJsb2NrKG5vZGUpIHx8IGlzQ2FyZXRDb250YWluZXJJbmxpbmUobm9kZSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcblx0XHR2YXIgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRpZiAocGFyZW50Tm9kZSkge1xuXHRcdFx0cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROb2RlVmFsdWUobm9kZSkge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gbm9kZS5ub2RlVmFsdWU7XG5cdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdC8vIElFIHNvbWV0aW1lcyBwcm9kdWNlcyBcIkludmFsaWQgYXJndW1lbnRcIiBvbiBub2Rlc1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0Tm9kZVZhbHVlKG5vZGUsIHRleHQpIHtcblx0XHRpZiAodGV4dC5sZW5ndGggPT09IDApIHtcblx0XHRcdHJlbW92ZU5vZGUobm9kZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUubm9kZVZhbHVlID0gdGV4dDtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnNlcnRJbmxpbmUobm9kZSwgYmVmb3JlKSB7XG5cdFx0dmFyIGRvYywgc2libGluZywgdGV4dE5vZGUsIHBhcmVudE5vZGU7XG5cblx0XHRkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG5cdFx0dGV4dE5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoWndzcC5aV1NQKTtcblx0XHRwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXG5cdFx0aWYgKCFiZWZvcmUpIHtcblx0XHRcdHNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nO1xuXHRcdFx0aWYgKGlzVGV4dChzaWJsaW5nKSkge1xuXHRcdFx0XHRpZiAoaXNDYXJldENvbnRhaW5lcihzaWJsaW5nKSkge1xuXHRcdFx0XHRcdHJldHVybiBzaWJsaW5nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHN0YXJ0c1dpdGhDYXJldENvbnRhaW5lcihzaWJsaW5nKSkge1xuXHRcdFx0XHRcdHNpYmxpbmcuc3BsaXRUZXh0KDEpO1xuXHRcdFx0XHRcdHJldHVybiBzaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRleHROb2RlLCBub2RlLm5leHRTaWJsaW5nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRpZiAoaXNUZXh0KHNpYmxpbmcpKSB7XG5cdFx0XHRcdGlmIChpc0NhcmV0Q29udGFpbmVyKHNpYmxpbmcpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNpYmxpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZW5kc1dpdGhDYXJldENvbnRhaW5lcihzaWJsaW5nKSkge1xuXHRcdFx0XHRcdHJldHVybiBzaWJsaW5nLnNwbGl0VGV4dChzaWJsaW5nLmRhdGEubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGV4dE5vZGUsIG5vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0ZXh0Tm9kZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZUJvZ3VzQnIoKSB7XG5cdFx0dmFyIGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKTtcblx0XHRici5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJywgJzEnKTtcblx0XHRyZXR1cm4gYnI7XG5cdH1cblxuXHRmdW5jdGlvbiBpbnNlcnRCbG9jayhibG9ja05hbWUsIG5vZGUsIGJlZm9yZSkge1xuXHRcdHZhciBkb2MsIGJsb2NrTm9kZSwgcGFyZW50Tm9kZTtcblxuXHRcdGRvYyA9IG5vZGUub3duZXJEb2N1bWVudDtcblx0XHRibG9ja05vZGUgPSBkb2MuY3JlYXRlRWxlbWVudChibG9ja05hbWUpO1xuXHRcdGJsb2NrTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWNhcmV0JywgYmVmb3JlID8gJ2JlZm9yZScgOiAnYWZ0ZXInKTtcblx0XHRibG9ja05vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycsICdhbGwnKTtcblx0XHRibG9ja05vZGUuYXBwZW5kQ2hpbGQoY3JlYXRlQm9ndXNCcigpKTtcblx0XHRwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXG5cdFx0aWYgKCFiZWZvcmUpIHtcblx0XHRcdGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJsb2NrTm9kZSwgbm9kZS5uZXh0U2libGluZyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJlbnROb2RlLmFwcGVuZENoaWxkKGJsb2NrTm9kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJsb2NrTm9kZSwgbm9kZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGJsb2NrTm9kZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGhhc0NvbnRlbnQobm9kZSkge1xuXHRcdHJldHVybiBub2RlLmZpcnN0Q2hpbGQgIT09IG5vZGUubGFzdENoaWxkIHx8ICFOb2RlVHlwZS5pc0JyKG5vZGUuZmlyc3RDaGlsZCk7XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmUoY2FyZXRDb250YWluZXJOb2RlKSB7XG5cdFx0aWYgKGlzRWxlbWVudChjYXJldENvbnRhaW5lck5vZGUpICYmIGlzQ2FyZXRDb250YWluZXIoY2FyZXRDb250YWluZXJOb2RlKSkge1xuXHRcdFx0aWYgKGhhc0NvbnRlbnQoY2FyZXRDb250YWluZXJOb2RlKSkge1xuXHRcdFx0XHRjYXJldENvbnRhaW5lck5vZGUucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVtb3ZlTm9kZShjYXJldENvbnRhaW5lck5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc1RleHQoY2FyZXRDb250YWluZXJOb2RlKSkge1xuXHRcdFx0dmFyIHRleHQgPSBad3NwLnRyaW0oZ2V0Tm9kZVZhbHVlKGNhcmV0Q29udGFpbmVyTm9kZSkpO1xuXHRcdFx0c2V0Tm9kZVZhbHVlKGNhcmV0Q29udGFpbmVyTm9kZSwgdGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gc3RhcnRzV2l0aENhcmV0Q29udGFpbmVyKG5vZGUpIHtcblx0XHRyZXR1cm4gaXNUZXh0KG5vZGUpICYmIG5vZGUuZGF0YVswXSA9PSBad3NwLlpXU1A7XG5cdH1cblxuXHRmdW5jdGlvbiBlbmRzV2l0aENhcmV0Q29udGFpbmVyKG5vZGUpIHtcblx0XHRyZXR1cm4gaXNUZXh0KG5vZGUpICYmIG5vZGUuZGF0YVtub2RlLmRhdGEubGVuZ3RoIC0gMV0gPT0gWndzcC5aV1NQO1xuXHR9XG5cblx0ZnVuY3Rpb24gdHJpbUJvZ3VzQnIoZWxtKSB7XG5cdFx0dmFyIGJycyA9IGVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnInKTtcblx0XHR2YXIgbGFzdEJyID0gYnJzW2Jycy5sZW5ndGggLSAxXTtcblx0XHRpZiAoTm9kZVR5cGUuaXNCb2d1cyhsYXN0QnIpKSB7XG5cdFx0XHRsYXN0QnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsYXN0QnIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHNob3dDYXJldENvbnRhaW5lckJsb2NrKGNhcmV0Q29udGFpbmVyKSB7XG5cdFx0aWYgKGNhcmV0Q29udGFpbmVyICYmIGNhcmV0Q29udGFpbmVyLmhhc0F0dHJpYnV0ZSgnZGF0YS1tY2UtY2FyZXQnKSkge1xuXHRcdFx0dHJpbUJvZ3VzQnIoY2FyZXRDb250YWluZXIpO1xuXHRcdFx0Y2FyZXRDb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuXHRcdFx0Y2FyZXRDb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpO1xuXHRcdFx0Y2FyZXRDb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuXHRcdFx0Y2FyZXRDb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCdfbW96X2Fic3BvcycpO1xuXHRcdFx0cmV0dXJuIGNhcmV0Q29udGFpbmVyO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRpc0NhcmV0Q29udGFpbmVyOiBpc0NhcmV0Q29udGFpbmVyLFxuXHRcdGlzQ2FyZXRDb250YWluZXJCbG9jazogaXNDYXJldENvbnRhaW5lckJsb2NrLFxuXHRcdGlzQ2FyZXRDb250YWluZXJJbmxpbmU6IGlzQ2FyZXRDb250YWluZXJJbmxpbmUsXG5cdFx0c2hvd0NhcmV0Q29udGFpbmVyQmxvY2s6IHNob3dDYXJldENvbnRhaW5lckJsb2NrLFxuXHRcdGluc2VydElubGluZTogaW5zZXJ0SW5saW5lLFxuXHRcdGluc2VydEJsb2NrOiBpbnNlcnRCbG9jayxcblx0XHRoYXNDb250ZW50OiBoYXNDb250ZW50LFxuXHRcdHJlbW92ZTogcmVtb3ZlLFxuXHRcdHN0YXJ0c1dpdGhDYXJldENvbnRhaW5lcjogc3RhcnRzV2l0aENhcmV0Q29udGFpbmVyLFxuXHRcdGVuZHNXaXRoQ2FyZXRDb250YWluZXI6IGVuZHNXaXRoQ2FyZXRDb250YWluZXJcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZG9tL1JhbmdlVXRpbHMuanNcblxuLyoqXG4gKiBSYW5nZVV0aWxzLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBjb250YWlucyBhIGZldyB1dGlsaXR5IG1ldGhvZHMgZm9yIHJhbmdlcy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5kb20uUmFuZ2VVdGlsc1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL2RvbS9SYW5nZVV0aWxzXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL2RvbS9UcmVlV2Fsa2VyXCIsXG5cdFwidGlueW1jZS9kb20vTm9kZVR5cGVcIixcblx0XCJ0aW55bWNlL2RvbS9SYW5nZVwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRDb250YWluZXJcIlxuXSwgZnVuY3Rpb24oVG9vbHMsIFRyZWVXYWxrZXIsIE5vZGVUeXBlLCBSYW5nZSwgQ2FyZXRDb250YWluZXIpIHtcblx0dmFyIGVhY2ggPSBUb29scy5lYWNoLFxuXHRcdGlzQ29udGVudEVkaXRhYmxlVHJ1ZSA9IE5vZGVUeXBlLmlzQ29udGVudEVkaXRhYmxlVHJ1ZSxcblx0XHRpc0NvbnRlbnRFZGl0YWJsZUZhbHNlID0gTm9kZVR5cGUuaXNDb250ZW50RWRpdGFibGVGYWxzZSxcblx0XHRpc0NhcmV0Q29udGFpbmVyID0gQ2FyZXRDb250YWluZXIuaXNDYXJldENvbnRhaW5lcjtcblxuXHRmdW5jdGlvbiBoYXNDZVByb3BlcnR5KG5vZGUpIHtcblx0XHRyZXR1cm4gaXNDb250ZW50RWRpdGFibGVUcnVlKG5vZGUpIHx8IGlzQ29udGVudEVkaXRhYmxlRmFsc2Uobm9kZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRFbmRDaGlsZChjb250YWluZXIsIGluZGV4KSB7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBjb250YWluZXIuY2hpbGROb2RlcztcblxuXHRcdGluZGV4LS07XG5cblx0XHRpZiAoaW5kZXggPiBjaGlsZE5vZGVzLmxlbmd0aCAtIDEpIHtcblx0XHRcdGluZGV4ID0gY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuXHRcdH0gZWxzZSBpZiAoaW5kZXggPCAwKSB7XG5cdFx0XHRpbmRleCA9IDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNoaWxkTm9kZXNbaW5kZXhdIHx8IGNvbnRhaW5lcjtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmRQYXJlbnQobm9kZSwgcm9vdE5vZGUsIHByZWRpY2F0ZSkge1xuXHRcdHdoaWxlIChub2RlICYmIG5vZGUgIT09IHJvb3ROb2RlKSB7XG5cdFx0XHRpZiAocHJlZGljYXRlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gaGFzUGFyZW50KG5vZGUsIHJvb3ROb2RlLCBwcmVkaWNhdGUpIHtcblx0XHRyZXR1cm4gZmluZFBhcmVudChub2RlLCByb290Tm9kZSwgcHJlZGljYXRlKSAhPT0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzRm9ybWF0dGVyQ2FyZXQobm9kZSkge1xuXHRcdHJldHVybiBub2RlLmlkID09PSAnX21jZV9jYXJldCc7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0NlRmFsc2VDYXJldENvbnRhaW5lcihub2RlLCByb290Tm9kZSkge1xuXHRcdHJldHVybiBpc0NhcmV0Q29udGFpbmVyKG5vZGUpICYmIGhhc1BhcmVudChub2RlLCByb290Tm9kZSwgaXNGb3JtYXR0ZXJDYXJldCkgPT09IGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gUmFuZ2VVdGlscyhkb20pIHtcblx0XHQvKipcblx0XHQgKiBXYWxrcyB0aGUgc3BlY2lmaWVkIHJhbmdlIGxpa2Ugb2JqZWN0IGFuZCBleGVjdXRlcyB0aGUgY2FsbGJhY2sgZm9yIGVhY2ggc2libGluZyBjb2xsZWN0aW9uIGl0IGZpbmRzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbWV0aG9kIHdhbGtcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcm5nIFJhbmdlIGxpa2Ugb2JqZWN0LlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZm9yIGVhY2ggc2libGluZyBjb2xsZWN0aW9uLlxuXHRcdCAqL1xuXHRcdHRoaXMud2FsayA9IGZ1bmN0aW9uKHJuZywgY2FsbGJhY2spIHtcblx0XHRcdHZhciBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcixcblx0XHRcdFx0c3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQsXG5cdFx0XHRcdGVuZENvbnRhaW5lciA9IHJuZy5lbmRDb250YWluZXIsXG5cdFx0XHRcdGVuZE9mZnNldCA9IHJuZy5lbmRPZmZzZXQsXG5cdFx0XHRcdGFuY2VzdG9yLCBzdGFydFBvaW50LFxuXHRcdFx0XHRlbmRQb2ludCwgbm9kZSwgcGFyZW50LCBzaWJsaW5ncywgbm9kZXM7XG5cblx0XHRcdC8vIEhhbmRsZSB0YWJsZSBjZWxsIHNlbGVjdGlvbiB0aGUgdGFibGUgcGx1Z2luIGVuYWJsZXNcblx0XHRcdC8vIHlvdSB0byBmYWtlIHNlbGVjdCB0YWJsZSBjZWxscyBhbmQgcGVyZm9ybSBmb3JtYXR0aW5nIGFjdGlvbnMgb24gdGhlbVxuXHRcdFx0bm9kZXMgPSBkb20uc2VsZWN0KCd0ZFtkYXRhLW1jZS1zZWxlY3RlZF0sdGhbZGF0YS1tY2Utc2VsZWN0ZWRdJyk7XG5cdFx0XHRpZiAobm9kZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRlYWNoKG5vZGVzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soW25vZGVdKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEV4Y2x1ZGVzIHN0YXJ0L2VuZCB0ZXh0IG5vZGUgaWYgdGhleSBhcmUgb3V0IHNpZGUgdGhlIHJhbmdlXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IG5vZGVzIE5vZGVzIHRvIGV4Y2x1ZGUgaXRlbXMgZnJvbS5cblx0XHRcdCAqIEByZXR1cm4ge0FycmF5fSBBcnJheSB3aXRoIG5vZGVzIGV4Y2x1ZGluZyB0aGUgc3RhcnQvZW5kIGNvbnRhaW5lciBpZiBuZWVkZWQuXG5cdFx0XHQgKi9cblx0XHRcdGZ1bmN0aW9uIGV4Y2x1ZGUobm9kZXMpIHtcblx0XHRcdFx0dmFyIG5vZGU7XG5cblx0XHRcdFx0Ly8gRmlyc3Qgbm9kZSBpcyBleGNsdWRlZFxuXHRcdFx0XHRub2RlID0gbm9kZXNbMF07XG5cdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09PSAzICYmIG5vZGUgPT09IHN0YXJ0Q29udGFpbmVyICYmIHN0YXJ0T2Zmc2V0ID49IG5vZGUubm9kZVZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHRcdG5vZGVzLnNwbGljZSgwLCAxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExhc3Qgbm9kZSBpcyBleGNsdWRlZFxuXHRcdFx0XHRub2RlID0gbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdGlmIChlbmRPZmZzZXQgPT09IDAgJiYgbm9kZXMubGVuZ3RoID4gMCAmJiBub2RlID09PSBlbmRDb250YWluZXIgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMykge1xuXHRcdFx0XHRcdG5vZGVzLnNwbGljZShub2Rlcy5sZW5ndGggLSAxLCAxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBub2Rlcztcblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDb2xsZWN0cyBzaWJsaW5nc1xuXHRcdFx0ICpcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBjb2xsZWN0IHNpYmxpbmdzIGZyb20uXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBzaWJsaW5nIHRvIGNoZWNrIGZvci5cblx0XHRcdCAqIEBwYXJhbSB7Tm9kZX0gZW5kX25vZGVcblx0XHRcdCAqIEByZXR1cm4ge0FycmF5fSBBcnJheSBvZiBjb2xsZWN0ZWQgc2libGluZ3MuXG5cdFx0XHQgKi9cblx0XHRcdGZ1bmN0aW9uIGNvbGxlY3RTaWJsaW5ncyhub2RlLCBuYW1lLCBlbmRfbm9kZSkge1xuXHRcdFx0XHR2YXIgc2libGluZ3MgPSBbXTtcblxuXHRcdFx0XHRmb3IgKDsgbm9kZSAmJiBub2RlICE9IGVuZF9ub2RlOyBub2RlID0gbm9kZVtuYW1lXSkge1xuXHRcdFx0XHRcdHNpYmxpbmdzLnB1c2gobm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gc2libGluZ3M7XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogRmluZCBhbiBlbmQgcG9pbnQgdGhpcyBpcyB0aGUgbm9kZSBqdXN0IGJlZm9yZSB0aGUgY29tbW9uIGFuY2VzdG9yIHJvb3QuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRvIHN0YXJ0IGF0LlxuXHRcdFx0ICogQHBhcmFtIHtOb2RlfSByb290IFJvb3QvYW5jZXN0b3IgZWxlbWVudCB0byBzdG9wIGp1c3QgYmVmb3JlLlxuXHRcdFx0ICogQHJldHVybiB7Tm9kZX0gTm9kZSBqdXN0IGJlZm9yZSB0aGUgcm9vdCBlbGVtZW50LlxuXHRcdFx0ICovXG5cdFx0XHRmdW5jdGlvbiBmaW5kRW5kUG9pbnQobm9kZSwgcm9vdCkge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKG5vZGUucGFyZW50Tm9kZSA9PSByb290KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IHdoaWxlIChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gd2Fsa0JvdW5kYXJ5KHN0YXJ0X25vZGUsIGVuZF9ub2RlLCBuZXh0KSB7XG5cdFx0XHRcdHZhciBzaWJsaW5nTmFtZSA9IG5leHQgPyAnbmV4dFNpYmxpbmcnIDogJ3ByZXZpb3VzU2libGluZyc7XG5cblx0XHRcdFx0Zm9yIChub2RlID0gc3RhcnRfbm9kZSwgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlOyBub2RlICYmIG5vZGUgIT0gZW5kX25vZGU7IG5vZGUgPSBwYXJlbnQpIHtcblx0XHRcdFx0XHRwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRcdFx0c2libGluZ3MgPSBjb2xsZWN0U2libGluZ3Mobm9kZSA9PSBzdGFydF9ub2RlID8gbm9kZSA6IG5vZGVbc2libGluZ05hbWVdLCBzaWJsaW5nTmFtZSk7XG5cblx0XHRcdFx0XHRpZiAoc2libGluZ3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW5leHQpIHtcblx0XHRcdFx0XHRcdFx0c2libGluZ3MucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjYWxsYmFjayhleGNsdWRlKHNpYmxpbmdzKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGluZGV4IGJhc2VkIHN0YXJ0IHBvc2l0aW9uIHRoZW4gcmVzb2x2ZSBpdFxuXHRcdFx0aWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09IDEgJiYgc3RhcnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tzdGFydE9mZnNldF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGluZGV4IGJhc2VkIGVuZCBwb3NpdGlvbiB0aGVuIHJlc29sdmUgaXRcblx0XHRcdGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgPT0gMSAmJiBlbmRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdGVuZENvbnRhaW5lciA9IGdldEVuZENoaWxkKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2FtZSBjb250YWluZXJcblx0XHRcdGlmIChzdGFydENvbnRhaW5lciA9PSBlbmRDb250YWluZXIpIHtcblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrKGV4Y2x1ZGUoW3N0YXJ0Q29udGFpbmVyXSkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGaW5kIGNvbW1vbiBhbmNlc3RvciBhbmQgZW5kIHBvaW50c1xuXHRcdFx0YW5jZXN0b3IgPSBkb20uZmluZENvbW1vbkFuY2VzdG9yKHN0YXJ0Q29udGFpbmVyLCBlbmRDb250YWluZXIpO1xuXG5cdFx0XHQvLyBQcm9jZXNzIGxlZnQgc2lkZVxuXHRcdFx0Zm9yIChub2RlID0gc3RhcnRDb250YWluZXI7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUpIHtcblx0XHRcdFx0aWYgKG5vZGUgPT09IGVuZENvbnRhaW5lcikge1xuXHRcdFx0XHRcdHJldHVybiB3YWxrQm91bmRhcnkoc3RhcnRDb250YWluZXIsIGFuY2VzdG9yLCB0cnVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChub2RlID09PSBhbmNlc3Rvcikge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFByb2Nlc3MgcmlnaHQgc2lkZVxuXHRcdFx0Zm9yIChub2RlID0gZW5kQ29udGFpbmVyOyBub2RlOyBub2RlID0gbm9kZS5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdGlmIChub2RlID09PSBzdGFydENvbnRhaW5lcikge1xuXHRcdFx0XHRcdHJldHVybiB3YWxrQm91bmRhcnkoZW5kQ29udGFpbmVyLCBhbmNlc3Rvcik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9kZSA9PT0gYW5jZXN0b3IpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGaW5kIHN0YXJ0L2VuZCBwb2ludFxuXHRcdFx0c3RhcnRQb2ludCA9IGZpbmRFbmRQb2ludChzdGFydENvbnRhaW5lciwgYW5jZXN0b3IpIHx8IHN0YXJ0Q29udGFpbmVyO1xuXHRcdFx0ZW5kUG9pbnQgPSBmaW5kRW5kUG9pbnQoZW5kQ29udGFpbmVyLCBhbmNlc3RvcikgfHwgZW5kQ29udGFpbmVyO1xuXG5cdFx0XHQvLyBXYWxrIGxlZnQgbGVhZlxuXHRcdFx0d2Fsa0JvdW5kYXJ5KHN0YXJ0Q29udGFpbmVyLCBzdGFydFBvaW50LCB0cnVlKTtcblxuXHRcdFx0Ly8gV2FsayB0aGUgbWlkZGxlIGZyb20gc3RhcnQgdG8gZW5kIHBvaW50XG5cdFx0XHRzaWJsaW5ncyA9IGNvbGxlY3RTaWJsaW5ncyhcblx0XHRcdFx0c3RhcnRQb2ludCA9PSBzdGFydENvbnRhaW5lciA/IHN0YXJ0UG9pbnQgOiBzdGFydFBvaW50Lm5leHRTaWJsaW5nLFxuXHRcdFx0XHQnbmV4dFNpYmxpbmcnLFxuXHRcdFx0XHRlbmRQb2ludCA9PSBlbmRDb250YWluZXIgPyBlbmRQb2ludC5uZXh0U2libGluZyA6IGVuZFBvaW50XG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoc2libGluZ3MubGVuZ3RoKSB7XG5cdFx0XHRcdGNhbGxiYWNrKGV4Y2x1ZGUoc2libGluZ3MpKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2FsayByaWdodCBsZWFmXG5cdFx0XHR3YWxrQm91bmRhcnkoZW5kQ29udGFpbmVyLCBlbmRQb2ludCk7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFNwbGl0cyB0aGUgc3BlY2lmaWVkIHJhbmdlIGF0IGl0J3Mgc3RhcnQvZW5kIHBvaW50cy5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtSYW5nZS9SYW5nZU9iamVjdH0gcm5nIFJhbmdlIHRvIHNwbGl0LlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gUmFuZ2UgcG9zaXRpb24gb2JqZWN0LlxuXHRcdCAqL1xuXHRcdHRoaXMuc3BsaXQgPSBmdW5jdGlvbihybmcpIHtcblx0XHRcdHZhciBzdGFydENvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcixcblx0XHRcdFx0c3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQsXG5cdFx0XHRcdGVuZENvbnRhaW5lciA9IHJuZy5lbmRDb250YWluZXIsXG5cdFx0XHRcdGVuZE9mZnNldCA9IHJuZy5lbmRPZmZzZXQ7XG5cblx0XHRcdGZ1bmN0aW9uIHNwbGl0VGV4dChub2RlLCBvZmZzZXQpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGUuc3BsaXRUZXh0KG9mZnNldCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBzaW5nbGUgdGV4dCBub2RlXG5cdFx0XHRpZiAoc3RhcnRDb250YWluZXIgPT0gZW5kQ29udGFpbmVyICYmIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0aWYgKHN0YXJ0T2Zmc2V0ID4gMCAmJiBzdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyLm5vZGVWYWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRlbmRDb250YWluZXIgPSBzcGxpdFRleHQoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0KTtcblx0XHRcdFx0XHRzdGFydENvbnRhaW5lciA9IGVuZENvbnRhaW5lci5wcmV2aW91c1NpYmxpbmc7XG5cblx0XHRcdFx0XHRpZiAoZW5kT2Zmc2V0ID4gc3RhcnRPZmZzZXQpIHtcblx0XHRcdFx0XHRcdGVuZE9mZnNldCA9IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0O1xuXHRcdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBlbmRDb250YWluZXIgPSBzcGxpdFRleHQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpLnByZXZpb3VzU2libGluZztcblx0XHRcdFx0XHRcdGVuZE9mZnNldCA9IGVuZENvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoO1xuXHRcdFx0XHRcdFx0c3RhcnRPZmZzZXQgPSAwO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlbmRPZmZzZXQgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gU3BsaXQgc3RhcnRDb250YWluZXIgdGV4dCBub2RlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT0gMyAmJiBzdGFydE9mZnNldCA+IDAgJiYgc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBzcGxpdFRleHQoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0KTtcblx0XHRcdFx0XHRzdGFydE9mZnNldCA9IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTcGxpdCBlbmRDb250YWluZXIgdGV4dCBub2RlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlID09IDMgJiYgZW5kT2Zmc2V0ID4gMCAmJiBlbmRPZmZzZXQgPCBlbmRDb250YWluZXIubm9kZVZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHRcdGVuZENvbnRhaW5lciA9IHNwbGl0VGV4dChlbmRDb250YWluZXIsIGVuZE9mZnNldCkucHJldmlvdXNTaWJsaW5nO1xuXHRcdFx0XHRcdGVuZE9mZnNldCA9IGVuZENvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0Q29udGFpbmVyOiBzdGFydENvbnRhaW5lcixcblx0XHRcdFx0c3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0LFxuXHRcdFx0XHRlbmRDb250YWluZXI6IGVuZENvbnRhaW5lcixcblx0XHRcdFx0ZW5kT2Zmc2V0OiBlbmRPZmZzZXRcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIE5vcm1hbGl6ZXMgdGhlIHNwZWNpZmllZCByYW5nZSBieSBmaW5kaW5nIHRoZSBjbG9zZXN0IGJlc3Qgc3VpdGFibGUgY2FyZXQgbG9jYXRpb24uXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7UmFuZ2V9IHJuZyBSYW5nZSB0byBub3JtYWxpemUuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZS9mYWxzZSBpZiB0aGUgc3BlY2lmaWVkIHJhbmdlIHdhcyBub3JtYWxpemVkIG9yIG5vdC5cblx0XHQgKi9cblx0XHR0aGlzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHJuZykge1xuXHRcdFx0dmFyIG5vcm1hbGl6ZWQsIGNvbGxhcHNlZDtcblxuXHRcdFx0ZnVuY3Rpb24gbm9ybWFsaXplRW5kUG9pbnQoc3RhcnQpIHtcblx0XHRcdFx0dmFyIGNvbnRhaW5lciwgb2Zmc2V0LCB3YWxrZXIsIGJvZHkgPSBkb20uZ2V0Um9vdCgpLCBub2RlLCBub25FbXB0eUVsZW1lbnRzTWFwO1xuXHRcdFx0XHR2YXIgZGlyZWN0aW9uTGVmdCwgaXNBZnRlck5vZGU7XG5cblx0XHRcdFx0ZnVuY3Rpb24gaXNUYWJsZUNlbGwobm9kZSkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlICYmIC9eKFREfFRIfENBUFRJT04pJC8udGVzdChub2RlLm5vZGVOYW1lKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZ1bmN0aW9uIGhhc0JyQmVmb3JlQWZ0ZXIobm9kZSwgbGVmdCkge1xuXHRcdFx0XHRcdHZhciB3YWxrZXIgPSBuZXcgVHJlZVdhbGtlcihub2RlLCBkb20uZ2V0UGFyZW50KG5vZGUucGFyZW50Tm9kZSwgZG9tLmlzQmxvY2spIHx8IGJvZHkpO1xuXG5cdFx0XHRcdFx0d2hpbGUgKChub2RlID0gd2Fsa2VyW2xlZnQgPyAncHJldicgOiAnbmV4dCddKCkpKSB7XG5cdFx0XHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA9PT0gXCJCUlwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZ1bmN0aW9uIGhhc0NvbnRlbnRFZGl0YWJsZUZhbHNlUGFyZW50KG5vZGUpIHtcblx0XHRcdFx0XHR3aGlsZSAobm9kZSAmJiBub2RlICE9IGJvZHkpIHtcblx0XHRcdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZ1bmN0aW9uIGlzUHJldk5vZGUobm9kZSwgbmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlLnByZXZpb3VzU2libGluZyAmJiBub2RlLnByZXZpb3VzU2libGluZy5ub2RlTmFtZSA9PSBuYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2Fsa3MgdGhlIGRvbSBsZWZ0L3JpZ2h0IHRvIGZpbmQgYSBzdWl0YWJsZSB0ZXh0IG5vZGUgdG8gbW92ZSB0aGUgZW5kcG9pbnQgaW50b1xuXHRcdFx0XHQvLyBJdCB3aWxsIG9ubHkgd2FsayB3aXRoaW4gdGhlIGN1cnJlbnQgcGFyZW50IGJsb2NrIG9yIGJvZHkgYW5kIHdpbGwgc3RvcCBpZiBpdCBoaXRzIGEgYmxvY2sgb3IgYSBCUi9JTUdcblx0XHRcdFx0ZnVuY3Rpb24gZmluZFRleHROb2RlUmVsYXRpdmUobGVmdCwgc3RhcnROb2RlKSB7XG5cdFx0XHRcdFx0dmFyIHdhbGtlciwgbGFzdElubGluZUVsZW1lbnQsIHBhcmVudEJsb2NrQ29udGFpbmVyO1xuXG5cdFx0XHRcdFx0c3RhcnROb2RlID0gc3RhcnROb2RlIHx8IGNvbnRhaW5lcjtcblx0XHRcdFx0XHRwYXJlbnRCbG9ja0NvbnRhaW5lciA9IGRvbS5nZXRQYXJlbnQoc3RhcnROb2RlLnBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSB8fCBib2R5O1xuXG5cdFx0XHRcdFx0Ly8gTGVhbiBsZWZ0IGJlZm9yZSB0aGUgQlIgZWxlbWVudCBpZiBpdCdzIHRoZSBvbmx5IEJSIHdpdGhpbiBhIGJsb2NrIGVsZW1lbnQuIEdlY2tvIGJ1ZzogIzY2ODBcblx0XHRcdFx0XHQvLyBUaGlzOiA8cD48YnI+fDwvcD4gYmVjb21lcyA8cD58PGJyPjwvcD5cblx0XHRcdFx0XHRpZiAobGVmdCAmJiBzdGFydE5vZGUubm9kZU5hbWUgPT0gJ0JSJyAmJiBpc0FmdGVyTm9kZSAmJiBkb20uaXNFbXB0eShwYXJlbnRCbG9ja0NvbnRhaW5lcikpIHtcblx0XHRcdFx0XHRcdGNvbnRhaW5lciA9IHN0YXJ0Tm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHRcdFx0b2Zmc2V0ID0gZG9tLm5vZGVJbmRleChzdGFydE5vZGUpO1xuXHRcdFx0XHRcdFx0bm9ybWFsaXplZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gV2FsayBsZWZ0IHVudGlsIHdlIGhpdCBhIHRleHQgbm9kZSB3ZSBjYW4gbW92ZSB0byBvciBhIGJsb2NrL2JyL2ltZ1xuXHRcdFx0XHRcdHdhbGtlciA9IG5ldyBUcmVlV2Fsa2VyKHN0YXJ0Tm9kZSwgcGFyZW50QmxvY2tDb250YWluZXIpO1xuXHRcdFx0XHRcdHdoaWxlICgobm9kZSA9IHdhbGtlcltsZWZ0ID8gJ3ByZXYnIDogJ25leHQnXSgpKSkge1xuXHRcdFx0XHRcdFx0Ly8gQnJlYWsgaWYgd2UgaGl0IGEgbm9uIGNvbnRlbnQgZWRpdGFibGUgbm9kZVxuXHRcdFx0XHRcdFx0aWYgKGRvbS5nZXRDb250ZW50RWRpdGFibGVQYXJlbnQobm9kZSkgPT09IFwiZmFsc2VcIiB8fCBpc0NlRmFsc2VDYXJldENvbnRhaW5lcihub2RlLCBkb20uZ2V0Um9vdCgpKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEZvdW5kIHRleHQgbm9kZSB0aGF0IGhhcyBhIGxlbmd0aFxuXHRcdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDMgJiYgbm9kZS5ub2RlVmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb250YWluZXIgPSBub2RlO1xuXHRcdFx0XHRcdFx0XHRvZmZzZXQgPSBsZWZ0ID8gbm9kZS5ub2RlVmFsdWUubGVuZ3RoIDogMDtcblx0XHRcdFx0XHRcdFx0bm9ybWFsaXplZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gQnJlYWsgaWYgd2UgZmluZCBhIGJsb2NrIG9yIGEgQlIvSU1HL0lOUFVUIGV0Y1xuXHRcdFx0XHRcdFx0aWYgKGRvbS5pc0Jsb2NrKG5vZGUpIHx8IG5vbkVtcHR5RWxlbWVudHNNYXBbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxhc3RJbmxpbmVFbGVtZW50ID0gbm9kZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGZldGNoIHRoZSBsYXN0IGlubGluZSBlbGVtZW50IHdoZW4gaW4gY2FyZXQgbW9kZSBmb3Igbm93XG5cdFx0XHRcdFx0aWYgKGNvbGxhcHNlZCAmJiBsYXN0SW5saW5lRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyID0gbGFzdElubGluZUVsZW1lbnQ7XG5cdFx0XHRcdFx0XHRub3JtYWxpemVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdG9mZnNldCA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29udGFpbmVyID0gcm5nWyhzdGFydCA/ICdzdGFydCcgOiAnZW5kJykgKyAnQ29udGFpbmVyJ107XG5cdFx0XHRcdG9mZnNldCA9IHJuZ1soc3RhcnQgPyAnc3RhcnQnIDogJ2VuZCcpICsgJ09mZnNldCddO1xuXHRcdFx0XHRpc0FmdGVyTm9kZSA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PSAxICYmIG9mZnNldCA9PT0gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdFx0XHRub25FbXB0eUVsZW1lbnRzTWFwID0gZG9tLnNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG5cdFx0XHRcdGRpcmVjdGlvbkxlZnQgPSBzdGFydDtcblxuXHRcdFx0XHRpZiAoaXNDYXJldENvbnRhaW5lcihjb250YWluZXIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAxICYmIG9mZnNldCA+IGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRkaXJlY3Rpb25MZWZ0ID0gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgY29udGFpbmVyIGlzIGEgZG9jdW1lbnQgbW92ZSBpdCB0byB0aGUgYm9keSBlbGVtZW50XG5cdFx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IDkpIHtcblx0XHRcdFx0XHRjb250YWluZXIgPSBkb20uZ2V0Um9vdCgpO1xuXHRcdFx0XHRcdG9mZnNldCA9IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgY29udGFpbmVyIGlzIGJvZHkgdHJ5IG1vdmUgaXQgaW50byB0aGUgY2xvc2VzdCB0ZXh0IG5vZGUgb3IgcG9zaXRpb25cblx0XHRcdFx0aWYgKGNvbnRhaW5lciA9PT0gYm9keSkge1xuXHRcdFx0XHRcdC8vIElmIHN0YXJ0IGlzIGJlZm9yZS9hZnRlciBhIGltYWdlLCB0YWJsZSBldGNcblx0XHRcdFx0XHRpZiAoZGlyZWN0aW9uTGVmdCkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW29mZnNldCA+IDAgPyBvZmZzZXQgLSAxIDogMF07XG5cdFx0XHRcdFx0XHRpZiAobm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXNDYXJldENvbnRhaW5lcihub2RlKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChub25FbXB0eUVsZW1lbnRzTWFwW25vZGUubm9kZU5hbWVdIHx8IG5vZGUubm9kZU5hbWUgPT0gXCJUQUJMRVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUmVzb2x2ZSB0aGUgaW5kZXhcblx0XHRcdFx0XHRpZiAoY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdFx0b2Zmc2V0ID0gTWF0aC5taW4oIWRpcmVjdGlvbkxlZnQgJiYgb2Zmc2V0ID4gMCA/IG9mZnNldCAtIDEgOiBvZmZzZXQsIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0XTtcblx0XHRcdFx0XHRcdG9mZnNldCA9IDA7XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IG5vcm1hbGl6ZSBub24gY29sbGFwc2VkIHNlbGVjdGlvbnMgbGlrZSA8cD5bYTwvcD48dGFibGU+PC90YWJsZT5dXG5cdFx0XHRcdFx0XHRpZiAoIWNvbGxhcHNlZCAmJiBjb250YWluZXIgPT09IGJvZHkubGFzdENoaWxkICYmIGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ1RBQkxFJykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChoYXNDb250ZW50RWRpdGFibGVGYWxzZVBhcmVudChjb250YWluZXIpIHx8IGlzQ2FyZXRDb250YWluZXIoY29udGFpbmVyKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHdhbGsgaW50byBlbGVtZW50cyB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGQgbm9kZXMgbGlrZSBhIElNR1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkgJiYgIS9UQUJMRS8udGVzdChjb250YWluZXIubm9kZU5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFdhbGsgdGhlIERPTSB0byBmaW5kIGEgdGV4dCBub2RlIHRvIHBsYWNlIHRoZSBjYXJldCBhdCBvciBhIEJSXG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBjb250YWluZXI7XG5cdFx0XHRcdFx0XHRcdHdhbGtlciA9IG5ldyBUcmVlV2Fsa2VyKGNvbnRhaW5lciwgYm9keSk7XG5cblx0XHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpIHx8IGlzQ2FyZXRDb250YWluZXIobm9kZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vcm1hbGl6ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZvdW5kIGEgdGV4dCBub2RlIHVzZSB0aGF0IHBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDMgJiYgbm9kZS5ub2RlVmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b2Zmc2V0ID0gZGlyZWN0aW9uTGVmdCA/IDAgOiBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250YWluZXIgPSBub2RlO1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9ybWFsaXplZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGb3VuZCBhIEJSL0lNRyBlbGVtZW50IHRoYXQgd2UgY2FuIHBsYWNlIHRoZSBjYXJldCBiZWZvcmVcblx0XHRcdFx0XHRcdFx0XHRpZiAobm9uRW1wdHlFbGVtZW50c01hcFtub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldICYmICFpc1RhYmxlQ2VsbChub2RlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b2Zmc2V0ID0gZG9tLm5vZGVJbmRleChub2RlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRhaW5lciA9IG5vZGUucGFyZW50Tm9kZTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHV0IGNhcmV0IGFmdGVyIGltYWdlIHdoZW4gbW92aW5nIHRoZSBlbmQgcG9pbnRcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID09IFwiSU1HXCIgJiYgIWRpcmVjdGlvbkxlZnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2Zmc2V0Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdG5vcm1hbGl6ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IHdoaWxlICgobm9kZSA9IChkaXJlY3Rpb25MZWZ0ID8gd2Fsa2VyLm5leHQoKSA6IHdhbGtlci5wcmV2KCkpKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTGVhbiB0aGUgY2FyZXQgdG8gdGhlIGxlZnQgaWYgcG9zc2libGVcblx0XHRcdFx0aWYgKGNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdC8vIFNvIHRoaXM6IDxiPng8L2I+PGk+fHg8L2k+XG5cdFx0XHRcdFx0Ly8gQmVjb21lczogPGI+eHw8L2I+PGk+eDwvaT5cblx0XHRcdFx0XHQvLyBTZWVtcyB0aGF0IG9ubHkgZ2Vja28gaGFzIGlzc3VlcyB3aXRoIHRoaXNcblx0XHRcdFx0XHRpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSAzICYmIG9mZnNldCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0ZmluZFRleHROb2RlUmVsYXRpdmUodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVhbiBsZWZ0IGludG8gZW1wdHkgaW5saW5lIGVsZW1lbnRzIHdoZW4gdGhlIGNhcmV0IGlzIGJlZm9yZSBhIEJSXG5cdFx0XHRcdFx0Ly8gU28gdGhpczogPGk+PGI+PC9iPjxpPnw8YnI+PC9pPlxuXHRcdFx0XHRcdC8vIEJlY29tZXM6IDxpPjxiPnw8L2I+PGk+PGJyPjwvaT5cblx0XHRcdFx0XHQvLyBTZWVtcyB0aGF0IG9ubHkgZ2Vja28gaGFzIGlzc3VlcyB3aXRoIHRoaXMuXG5cdFx0XHRcdFx0Ly8gU3BlY2lhbCBlZGdlIGNhc2UgZm9yIDxwPjxhPng8L2E+fDxicj48L3A+IHNpbmNlIHdlIGRvbid0IHdhbnQgPHA+PGE+eHw8L2E+PGJyPjwvcD5cblx0XHRcdFx0XHRpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSAxKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0XTtcblxuXHRcdFx0XHRcdFx0Ly8gT2Zmc2V0IGlzIGFmdGVyIHRoZSBjb250YWluZXJzIGxhc3QgY2hpbGRcblx0XHRcdFx0XHRcdC8vIHRoZW4gdXNlIHRoZSBwcmV2aW91cyBjaGlsZCBmb3Igbm9ybWFsaXphdGlvblxuXHRcdFx0XHRcdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXQgLSAxXTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG5vZGUgJiYgbm9kZS5ub2RlTmFtZSA9PT0gJ0JSJyAmJiAhaXNQcmV2Tm9kZShub2RlLCAnQScpICYmXG5cdFx0XHRcdFx0XHRcdCFoYXNCckJlZm9yZUFmdGVyKG5vZGUpICYmICFoYXNCckJlZm9yZUFmdGVyKG5vZGUsIHRydWUpKSB7XG5cdFx0XHRcdFx0XHRcdGZpbmRUZXh0Tm9kZVJlbGF0aXZlKHRydWUsIG5vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExlYW4gdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24gcmlnaHQgaWYgcG9zc2libGVcblx0XHRcdFx0Ly8gU28gdGhpczogeFs8Yj54XTwvYj5cblx0XHRcdFx0Ly8gQmVjb21lczogeDxiPlt4XTwvYj5cblx0XHRcdFx0aWYgKGRpcmVjdGlvbkxlZnQgJiYgIWNvbGxhcHNlZCAmJiBjb250YWluZXIubm9kZVR5cGUgPT09IDMgJiYgb2Zmc2V0ID09PSBjb250YWluZXIubm9kZVZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHRcdGZpbmRUZXh0Tm9kZVJlbGF0aXZlKGZhbHNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBlbmRwb2ludCBpZiBpdCB3YXMgbm9ybWFsaXplZFxuXHRcdFx0XHRpZiAobm9ybWFsaXplZCkge1xuXHRcdFx0XHRcdHJuZ1snc2V0JyArIChzdGFydCA/ICdTdGFydCcgOiAnRW5kJyldKGNvbnRhaW5lciwgb2Zmc2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb2xsYXBzZWQgPSBybmcuY29sbGFwc2VkO1xuXG5cdFx0XHRub3JtYWxpemVFbmRQb2ludCh0cnVlKTtcblxuXHRcdFx0aWYgKCFjb2xsYXBzZWQpIHtcblx0XHRcdFx0bm9ybWFsaXplRW5kUG9pbnQoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgaXQgd2FzIGNvbGxhcHNlZCB0aGVuIG1ha2Ugc3VyZSBpdCBzdGlsbCBpc1xuXHRcdFx0aWYgKG5vcm1hbGl6ZWQgJiYgY29sbGFwc2VkKSB7XG5cdFx0XHRcdHJuZy5jb2xsYXBzZSh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5vcm1hbGl6ZWQ7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21wYXJlcyB0d28gcmFuZ2VzIGFuZCBjaGVja3MgaWYgdGhleSBhcmUgZXF1YWwuXG5cdCAqXG5cdCAqIEBzdGF0aWNcblx0ICogQG1ldGhvZCBjb21wYXJlUmFuZ2VzXG5cdCAqIEBwYXJhbSB7RE9NUmFuZ2V9IHJuZzEgRmlyc3QgcmFuZ2UgdG8gY29tcGFyZS5cblx0ICogQHBhcmFtIHtET01SYW5nZX0gcm5nMiBGaXJzdCByYW5nZSB0byBjb21wYXJlLlxuXHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSByYW5nZXMgYXJlIGVxdWFsLlxuXHQgKi9cblx0UmFuZ2VVdGlscy5jb21wYXJlUmFuZ2VzID0gZnVuY3Rpb24ocm5nMSwgcm5nMikge1xuXHRcdGlmIChybmcxICYmIHJuZzIpIHtcblx0XHRcdC8vIENvbXBhcmUgbmF0aXZlIElFIHJhbmdlc1xuXHRcdFx0aWYgKHJuZzEuaXRlbSB8fCBybmcxLmR1cGxpY2F0ZSkge1xuXHRcdFx0XHQvLyBCb3RoIGFyZSBjb250cm9sIHJhbmdlcyBhbmQgdGhlIHNlbGVjdGVkIGVsZW1lbnQgbWF0Y2hlc1xuXHRcdFx0XHRpZiAocm5nMS5pdGVtICYmIHJuZzIuaXRlbSAmJiBybmcxLml0ZW0oMCkgPT09IHJuZzIuaXRlbSgwKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQm90aCBhcmUgdGV4dCByYW5nZXMgYW5kIHRoZSByYW5nZSBtYXRjaGVzXG5cdFx0XHRcdGlmIChybmcxLmlzRXF1YWwgJiYgcm5nMi5pc0VxdWFsICYmIHJuZzIuaXNFcXVhbChybmcxKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDb21wYXJlIHczYyByYW5nZXNcblx0XHRcdFx0cmV0dXJuIHJuZzEuc3RhcnRDb250YWluZXIgPT0gcm5nMi5zdGFydENvbnRhaW5lciAmJiBybmcxLnN0YXJ0T2Zmc2V0ID09IHJuZzIuc3RhcnRPZmZzZXQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBGaW5kcyB0aGUgY2xvc2VzdCBzZWxlY3Rpb24gcmVjdCB0cmllcyB0byBnZXQgdGhlIHJhbmdlIGZyb20gdGhhdC5cblx0ICovXG5cdGZ1bmN0aW9uIGZpbmRDbG9zZXN0SWVSYW5nZShjbGllbnRYLCBjbGllbnRZLCBkb2MpIHtcblx0XHR2YXIgZWxlbWVudCwgcm5nLCByZWN0cztcblxuXHRcdGVsZW1lbnQgPSBkb2MuZWxlbWVudEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcblx0XHRybmcgPSBkb2MuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcblxuXHRcdGlmICghZWxlbWVudCB8fCBlbGVtZW50LnRhZ05hbWUgPT0gJ0hUTUwnKSB7XG5cdFx0XHRlbGVtZW50ID0gZG9jLmJvZHk7XG5cdFx0fVxuXG5cdFx0cm5nLm1vdmVUb0VsZW1lbnRUZXh0KGVsZW1lbnQpO1xuXHRcdHJlY3RzID0gVG9vbHMudG9BcnJheShybmcuZ2V0Q2xpZW50UmVjdHMoKSk7XG5cblx0XHRyZWN0cyA9IHJlY3RzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0YSA9IE1hdGguYWJzKE1hdGgubWF4KGEudG9wIC0gY2xpZW50WSwgYS5ib3R0b20gLSBjbGllbnRZKSk7XG5cdFx0XHRiID0gTWF0aC5hYnMoTWF0aC5tYXgoYi50b3AgLSBjbGllbnRZLCBiLmJvdHRvbSAtIGNsaWVudFkpKTtcblxuXHRcdFx0cmV0dXJuIGEgLSBiO1xuXHRcdH0pO1xuXG5cdFx0aWYgKHJlY3RzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNsaWVudFkgPSAocmVjdHNbMF0uYm90dG9tICsgcmVjdHNbMF0udG9wKSAvIDI7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJuZy5tb3ZlVG9Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcblx0XHRcdFx0cm5nLmNvbGxhcHNlKHRydWUpO1xuXG5cdFx0XHRcdHJldHVybiBybmc7XG5cdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCB3ZSB0cmllZFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gbW92ZU91dE9mQ29udGVudEVkaXRhYmxlRmFsc2Uocm5nLCByb290Tm9kZSkge1xuXHRcdHZhciBwYXJlbnRFbGVtZW50ID0gcm5nICYmIHJuZy5wYXJlbnRFbGVtZW50ID8gcm5nLnBhcmVudEVsZW1lbnQoKSA6IG51bGw7XG5cdFx0cmV0dXJuIGlzQ29udGVudEVkaXRhYmxlRmFsc2UoZmluZFBhcmVudChwYXJlbnRFbGVtZW50LCByb290Tm9kZSwgaGFzQ2VQcm9wZXJ0eSkpID8gbnVsbCA6IHJuZztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjYXJldCByYW5nZSBmb3IgdGhlIGdpdmVuIHgveSBsb2NhdGlvbi5cblx0ICpcblx0ICogQHN0YXRpY1xuXHQgKiBAbWV0aG9kIGdldENhcmV0UmFuZ2VGcm9tUG9pbnRcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGNsaWVudFggWCBjb29yZGluYXRlIGZvciByYW5nZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY2xpZW50WSBZIGNvb3JkaW5hdGUgZm9yIHJhbmdlXG5cdCAqIEBwYXJhbSB7RG9jdW1lbnR9IGRvYyBEb2N1bWVudCB0aGF0IHgveSBhcmUgcmVsYXRpdmUgdG9cblx0ICogQHJldHVybnMge1JhbmdlfSBjYXJldCByYW5nZVxuXHQgKi9cblx0UmFuZ2VVdGlscy5nZXRDYXJldFJhbmdlRnJvbVBvaW50ID0gZnVuY3Rpb24oY2xpZW50WCwgY2xpZW50WSwgZG9jKSB7XG5cdFx0dmFyIHJuZywgcG9pbnQ7XG5cblx0XHRpZiAoZG9jLmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpIHtcblx0XHRcdHBvaW50ID0gZG9jLmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoY2xpZW50WCwgY2xpZW50WSk7XG5cdFx0XHRybmcgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcblx0XHRcdHJuZy5zZXRTdGFydChwb2ludC5vZmZzZXROb2RlLCBwb2ludC5vZmZzZXQpO1xuXHRcdFx0cm5nLmNvbGxhcHNlKHRydWUpO1xuXHRcdH0gZWxzZSBpZiAoZG9jLmNhcmV0UmFuZ2VGcm9tUG9pbnQpIHtcblx0XHRcdHJuZyA9IGRvYy5jYXJldFJhbmdlRnJvbVBvaW50KGNsaWVudFgsIGNsaWVudFkpO1xuXHRcdH0gZWxzZSBpZiAoZG9jLmJvZHkuY3JlYXRlVGV4dFJhbmdlKSB7XG5cdFx0XHRybmcgPSBkb2MuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cm5nLm1vdmVUb1BvaW50KGNsaWVudFgsIGNsaWVudFkpO1xuXHRcdFx0XHRybmcuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRybmcgPSBmaW5kQ2xvc2VzdEllUmFuZ2UoY2xpZW50WCwgY2xpZW50WSwgZG9jKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1vdmVPdXRPZkNvbnRlbnRFZGl0YWJsZUZhbHNlKHJuZywgZG9jLmJvZHkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBybmc7XG5cdH07XG5cblx0UmFuZ2VVdGlscy5nZXRTZWxlY3RlZE5vZGUgPSBmdW5jdGlvbihyYW5nZSkge1xuXHRcdHZhciBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuXHRcdFx0c3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcblxuXHRcdGlmIChzdGFydENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkgJiYgcmFuZ2UuZW5kT2Zmc2V0ID09IHN0YXJ0T2Zmc2V0ICsgMSkge1xuXHRcdFx0cmV0dXJuIHN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXNbc3RhcnRPZmZzZXRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdFJhbmdlVXRpbHMuZ2V0Tm9kZSA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgb2Zmc2V0KSB7XG5cdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAxICYmIGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdGlmIChvZmZzZXQgPj0gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRcdG9mZnNldCA9IGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRhaW5lciA9IGNvbnRhaW5lci5jaGlsZE5vZGVzW29mZnNldF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5lcjtcblx0fTtcblxuXHRyZXR1cm4gUmFuZ2VVdGlscztcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvTm9kZUNoYW5nZS5qc1xuXG4vKipcbiAqIE5vZGVDaGFuZ2UuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIG5vZGVjaGFuZ2UgZXZlbnQgZGlzcGF0Y2hpbmcgYm90aCBtYW51YWwgYW5kIHRocm91Z2ggc2VsZWN0aW9uIGNoYW5nZSBldmVudHMuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuTm9kZUNoYW5nZVxuICogQHByaXZhdGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9Ob2RlQ2hhbmdlXCIsIFtcblx0XCJ0aW55bWNlL2RvbS9SYW5nZVV0aWxzXCIsXG5cdFwidGlueW1jZS9FbnZcIixcblx0XCJ0aW55bWNlL3V0aWwvRGVsYXlcIlxuXSwgZnVuY3Rpb24oUmFuZ2VVdGlscywgRW52LCBEZWxheSkge1xuXHRyZXR1cm4gZnVuY3Rpb24oZWRpdG9yKSB7XG5cdFx0dmFyIGxhc3RSbmcsIGxhc3RQYXRoID0gW107XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBwYXRoIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90LlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoZSBlbGVtZW50IHBhdGggaXMgdGhlIHNhbWUgZmFsc2UgaWYgaXQncyBub3QuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gaXNTYW1lRWxlbWVudFBhdGgoc3RhcnRFbG0pIHtcblx0XHRcdHZhciBpLCBjdXJyZW50UGF0aDtcblxuXHRcdFx0Y3VycmVudFBhdGggPSBlZGl0b3IuJChzdGFydEVsbSkucGFyZW50c1VudGlsKGVkaXRvci5nZXRCb2R5KCkpLmFkZChzdGFydEVsbSk7XG5cdFx0XHRpZiAoY3VycmVudFBhdGgubGVuZ3RoID09PSBsYXN0UGF0aC5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChpID0gY3VycmVudFBhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRcdGlmIChjdXJyZW50UGF0aFtpXSAhPT0gbGFzdFBhdGhbaV0pIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpID09PSAtMSkge1xuXHRcdFx0XHRcdGxhc3RQYXRoID0gY3VycmVudFBhdGg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGFzdFBhdGggPSBjdXJyZW50UGF0aDtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEdlY2tvIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgXCJzZWxlY3Rpb25jaGFuZ2VcIiBldmVudFxuXHRcdGlmICghKCdvbnNlbGVjdGlvbmNoYW5nZScgaW4gZWRpdG9yLmdldERvYygpKSkge1xuXHRcdFx0ZWRpdG9yLm9uKCdOb2RlQ2hhbmdlIENsaWNrIE1vdXNlVXAgS2V5VXAgRm9jdXMnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBuYXRpdmVSbmcsIGZha2VSbmc7XG5cblx0XHRcdFx0Ly8gU2luY2UgRE9NIFJhbmdlcyBtdXRhdGUgb24gbW9kaWZpY2F0aW9uXG5cdFx0XHRcdC8vIG9mIHRoZSBET00gd2UgbmVlZCB0byBjbG9uZSBpdCdzIGNvbnRlbnRzXG5cdFx0XHRcdG5hdGl2ZVJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG5cdFx0XHRcdGZha2VSbmcgPSB7XG5cdFx0XHRcdFx0c3RhcnRDb250YWluZXI6IG5hdGl2ZVJuZy5zdGFydENvbnRhaW5lcixcblx0XHRcdFx0XHRzdGFydE9mZnNldDogbmF0aXZlUm5nLnN0YXJ0T2Zmc2V0LFxuXHRcdFx0XHRcdGVuZENvbnRhaW5lcjogbmF0aXZlUm5nLmVuZENvbnRhaW5lcixcblx0XHRcdFx0XHRlbmRPZmZzZXQ6IG5hdGl2ZVJuZy5lbmRPZmZzZXRcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBBbHdheXMgdHJlYXQgbm9kZWNoYW5nZSBhcyBhIHNlbGVjdGlvbmNoYW5nZSBzaW5jZSBhcHBseWluZ1xuXHRcdFx0XHQvLyBmb3JtYXR0aW5nIHRvIHRoZSBjdXJyZW50IHJhbmdlIHdvdWxkbid0IHVwZGF0ZSB0aGUgcmFuZ2UgYnV0IGl0J3MgcGFyZW50XG5cdFx0XHRcdGlmIChlLnR5cGUgPT0gJ25vZGVjaGFuZ2UnIHx8ICFSYW5nZVV0aWxzLmNvbXBhcmVSYW5nZXMoZmFrZVJuZywgbGFzdFJuZykpIHtcblx0XHRcdFx0XHRlZGl0b3IuZmlyZSgnU2VsZWN0aW9uQ2hhbmdlJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsYXN0Um5nID0gZmFrZVJuZztcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIElFIGhhcyBhIGJ1ZyB3aGVyZSBpdCBmaXJlcyBhIHNlbGVjdGlvbmNoYW5nZSBvbiByaWdodCBjbGljayB0aGF0IGhhcyBhIHJhbmdlIGF0IHRoZSBzdGFydCBvZiB0aGUgYm9keVxuXHRcdC8vIFdoZW4gdGhlIGNvbnRleHRtZW51IGV2ZW50IGZpcmVzIHRoZSBzZWxlY3Rpb24gaXMgbG9jYXRlZCBhdCB0aGUgcmlnaHQgbG9jYXRpb25cblx0XHRlZGl0b3Iub24oJ2NvbnRleHRtZW51JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRlZGl0b3IuZmlyZSgnU2VsZWN0aW9uQ2hhbmdlJyk7XG5cdFx0fSk7XG5cblx0XHQvLyBTZWxlY3Rpb24gY2hhbmdlIGlzIGRlbGF5ZWQgfjIwMG1zIG9uIElFIHdoZW4geW91IGNsaWNrIGluc2lkZSB0aGUgY3VycmVudCByYW5nZVxuXHRcdGVkaXRvci5vbignU2VsZWN0aW9uQ2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc3RhcnRFbG0gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KHRydWUpO1xuXG5cdFx0XHQvLyBJRSA4IHdpbGwgZmlyZSBhIHNlbGVjdGlvbmNoYW5nZSBldmVudCB3aXRoIGFuIGluY29ycmVjdCBzZWxlY3Rpb25cblx0XHRcdC8vIHdoZW4gZm9jdXNpbmcgb3V0IG9mIHRhYmxlIGNlbGxzLiBDbGljayBpbnNpZGUgY2VsbCAtPiB0b29sYmFyID0gSW52YWxpZCBTZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGlmICghRW52LnJhbmdlICYmIGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNTYW1lRWxlbWVudFBhdGgoc3RhcnRFbG0pICYmIGVkaXRvci5kb20uaXNDaGlsZE9mKHN0YXJ0RWxtLCBlZGl0b3IuZ2V0Qm9keSgpKSkge1xuXHRcdFx0XHRlZGl0b3Iubm9kZUNoYW5nZWQoe3NlbGVjdGlvbkNoYW5nZTogdHJ1ZX0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRmlyZSBhbiBleHRyYSBub2RlQ2hhbmdlIG9uIG1vdXNldXAgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuXHRcdGVkaXRvci5vbignTW91c2VVcCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdGlmICghZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuXHRcdFx0XHQvLyBEZWxheSBub2RlQ2hhbmdlZCBjYWxsIGZvciBXZWJLaXQgZWRnZSBjYXNlIGlzc3VlIHdoZXJlIHRoZSByYW5nZVxuXHRcdFx0XHQvLyBpc24ndCB1cGRhdGVkIHVudGlsIGFmdGVyIHlvdSBjbGljayBvdXRzaWRlIGEgc2VsZWN0ZWQgaW1hZ2Vcblx0XHRcdFx0aWYgKGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpLm5vZGVOYW1lID09ICdJTUcnKSB7XG5cdFx0XHRcdFx0RGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqIERpc3BhdGNoZXMgb3V0IGEgb25Ob2RlQ2hhbmdlIGV2ZW50IHRvIGFsbCBvYnNlcnZlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB5b3Vcblx0XHQgKiBuZWVkIHRvIHVwZGF0ZSB0aGUgVUkgc3RhdGVzIG9yIGVsZW1lbnQgcGF0aCBldGMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG5vZGVDaGFuZ2VkXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgT3B0aW9uYWwgYXJncyB0byBwYXNzIHRvIE5vZGVDaGFuZ2UgZXZlbnQgaGFuZGxlcnMuXG5cdFx0ICovXG5cdFx0dGhpcy5ub2RlQ2hhbmdlZCA9IGZ1bmN0aW9uKGFyZ3MpIHtcblx0XHRcdHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLCBub2RlLCBwYXJlbnRzLCByb290O1xuXG5cdFx0XHQvLyBGaXggZm9yIGJ1ZyAjMTg5NjU3NyBpdCBzZWVtcyB0aGF0IHRoaXMgY2FuIG5vdCBiZSBmaXJlZCB3aGlsZSB0aGUgZWRpdG9yIGlzIGxvYWRpbmdcblx0XHRcdGlmIChlZGl0b3IuaW5pdGlhbGl6ZWQgJiYgc2VsZWN0aW9uICYmICFlZGl0b3Iuc2V0dGluZ3MuZGlzYWJsZV9ub2RlY2hhbmdlICYmICFlZGl0b3IucmVhZG9ubHkpIHtcblx0XHRcdFx0Ly8gR2V0IHN0YXJ0IG5vZGVcblx0XHRcdFx0cm9vdCA9IGVkaXRvci5nZXRCb2R5KCk7XG5cdFx0XHRcdG5vZGUgPSBzZWxlY3Rpb24uZ2V0U3RhcnQoKSB8fCByb290O1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGUgbm9kZSBpcyB3aXRoaW4gdGhlIGVkaXRvciByb290IG9yIGlzIHRoZSBlZGl0b3Igcm9vdFxuXHRcdFx0XHRpZiAobm9kZS5vd25lckRvY3VtZW50ICE9IGVkaXRvci5nZXREb2MoKSB8fCAhZWRpdG9yLmRvbS5pc0NoaWxkT2Yobm9kZSwgcm9vdCkpIHtcblx0XHRcdFx0XHRub2RlID0gcm9vdDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEVkZ2UgY2FzZSBmb3IgPHA+fDxpbWc+PC9wPlxuXHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA9PSAnSU1HJyAmJiBzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuXHRcdFx0XHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgcGFyZW50cyBhbmQgYWRkIHRoZW0gdG8gb2JqZWN0XG5cdFx0XHRcdHBhcmVudHMgPSBbXTtcblx0XHRcdFx0ZWRpdG9yLmRvbS5nZXRQYXJlbnQobm9kZSwgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdGlmIChub2RlID09PSByb290KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRwYXJlbnRzLnB1c2gobm9kZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IHt9O1xuXHRcdFx0XHRhcmdzLmVsZW1lbnQgPSBub2RlO1xuXHRcdFx0XHRhcmdzLnBhcmVudHMgPSBwYXJlbnRzO1xuXG5cdFx0XHRcdGVkaXRvci5maXJlKCdOb2RlQ2hhbmdlJywgYXJncyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvaHRtbC9Ob2RlLmpzXG5cbi8qKlxuICogTm9kZS5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgYSBtaW5pbWFsaXN0aWMgaW1wbGVtZW50YXRpb24gb2YgYSBET00gbGlrZSBub2RlIHVzZWQgYnkgdGhlIERvbVBhcnNlciBjbGFzcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIG5vZGUgPSBuZXcgdGlueW1jZS5odG1sLk5vZGUoJ3N0cm9uZycsIDEpO1xuICogc29tZVJvb3QuYXBwZW5kKG5vZGUpO1xuICpcbiAqIEBjbGFzcyB0aW55bWNlLmh0bWwuTm9kZVxuICogQHZlcnNpb24gMy40XG4gKi9cbmRlZmluZShcInRpbnltY2UvaHRtbC9Ob2RlXCIsIFtdLCBmdW5jdGlvbigpIHtcblx0dmFyIHdoaXRlU3BhY2VSZWdFeHAgPSAvXlsgXFx0XFxyXFxuXSokLywgdHlwZUxvb2t1cCA9IHtcblx0XHQnI3RleHQnOiAzLFxuXHRcdCcjY29tbWVudCc6IDgsXG5cdFx0JyNjZGF0YSc6IDQsXG5cdFx0JyNwaSc6IDcsXG5cdFx0JyNkb2N0eXBlJzogMTAsXG5cdFx0JyNkb2N1bWVudC1mcmFnbWVudCc6IDExXG5cdH07XG5cblx0Ly8gV2Fsa3MgdGhlIHRyZWUgbGVmdC9yaWdodFxuXHRmdW5jdGlvbiB3YWxrKG5vZGUsIHJvb3Rfbm9kZSwgcHJldikge1xuXHRcdHZhciBzaWJsaW5nLCBwYXJlbnQsIHN0YXJ0TmFtZSA9IHByZXYgPyAnbGFzdENoaWxkJyA6ICdmaXJzdENoaWxkJywgc2libGluZ05hbWUgPSBwcmV2ID8gJ3ByZXYnIDogJ25leHQnO1xuXG5cdFx0Ly8gV2FsayBpbnRvIG5vZGVzIGlmIGl0IGhhcyBhIHN0YXJ0XG5cdFx0aWYgKG5vZGVbc3RhcnROYW1lXSkge1xuXHRcdFx0cmV0dXJuIG5vZGVbc3RhcnROYW1lXTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIHNpYmxpbmcgaWYgaXQgaGFzIG9uZVxuXHRcdGlmIChub2RlICE9PSByb290X25vZGUpIHtcblx0XHRcdHNpYmxpbmcgPSBub2RlW3NpYmxpbmdOYW1lXTtcblxuXHRcdFx0aWYgKHNpYmxpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHNpYmxpbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdhbGsgdXAgdGhlIHBhcmVudHMgdG8gbG9vayBmb3Igc2libGluZ3Ncblx0XHRcdGZvciAocGFyZW50ID0gbm9kZS5wYXJlbnQ7IHBhcmVudCAmJiBwYXJlbnQgIT09IHJvb3Rfbm9kZTsgcGFyZW50ID0gcGFyZW50LnBhcmVudCkge1xuXHRcdFx0XHRzaWJsaW5nID0gcGFyZW50W3NpYmxpbmdOYW1lXTtcblxuXHRcdFx0XHRpZiAoc2libGluZykge1xuXHRcdFx0XHRcdHJldHVybiBzaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgYSBuZXcgTm9kZSBpbnN0YW5jZS5cblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBtZXRob2QgTm9kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBub2RlIHR5cGUuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIE51bWVyaWMgdHlwZSByZXByZXNlbnRpbmcgdGhlIG5vZGUuXG5cdCAqL1xuXHRmdW5jdGlvbiBOb2RlKG5hbWUsIHR5cGUpIHtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdHRoaXMudHlwZSA9IHR5cGU7XG5cblx0XHRpZiAodHlwZSA9PT0gMSkge1xuXHRcdFx0dGhpcy5hdHRyaWJ1dGVzID0gW107XG5cdFx0XHR0aGlzLmF0dHJpYnV0ZXMubWFwID0ge307XG5cdFx0fVxuXHR9XG5cblx0Tm9kZS5wcm90b3R5cGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQgb25lLlxuXHRcdCAqXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzb21lTm9kZS5yZXBsYWNlKHNvbWVOZXdOb2RlKTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVwbGFjZVxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS5odG1sLk5vZGV9IG5vZGUgTm9kZSB0byByZXBsYWNlIHRoZSBjdXJyZW50IG5vZGUgd2l0aC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmh0bWwuTm9kZX0gVGhlIG9sZCBub2RlIHRoYXQgZ290IHJlcGxhY2VkLlxuXHRcdCAqL1xuXHRcdHJlcGxhY2U6IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRcdG5vZGUucmVtb3ZlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuaW5zZXJ0KG5vZGUsIHNlbGYpO1xuXHRcdFx0c2VsZi5yZW1vdmUoKTtcblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEdldHMvc2V0cyBvciByZW1vdmVzIGFuIGF0dHJpYnV0ZSBieSBuYW1lLlxuXHRcdCAqXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzb21lTm9kZS5hdHRyKFwibmFtZVwiLCBcInZhbHVlXCIpOyAvLyBTZXRzIGFuIGF0dHJpYnV0ZVxuXHRcdCAqIGNvbnNvbGUubG9nKHNvbWVOb2RlLmF0dHIoXCJuYW1lXCIpKTsgLy8gR2V0cyBhbiBhdHRyaWJ1dGVcblx0XHQgKiBzb21lTm9kZS5hdHRyKFwibmFtZVwiLCBudWxsKTsgLy8gUmVtb3ZlcyBhbiBhdHRyaWJ1dGVcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYXR0clxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIEF0dHJpYnV0ZSBuYW1lIHRvIHNldCBvciBnZXQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIE9wdGlvbmFsIHZhbHVlIHRvIHNldC5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmcvdGlueW1jZS5odG1sLk5vZGV9IFN0cmluZyBvciB1bmRlZmluZWQgb24gYSBnZXQgb3BlcmF0aW9uIG9yIHRoZSBjdXJyZW50IG5vZGUgb24gYSBzZXQgb3BlcmF0aW9uLlxuXHRcdCAqL1xuXHRcdGF0dHI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGF0dHJzLCBpLCB1bmRlZjtcblxuXHRcdFx0aWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGZvciAoaSBpbiBuYW1lKSB7XG5cdFx0XHRcdFx0c2VsZi5hdHRyKGksIG5hbWVbaV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgoYXR0cnMgPSBzZWxmLmF0dHJpYnV0ZXMpKSB7XG5cdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWYpIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgYXR0cmlidXRlXG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRpZiAobmFtZSBpbiBhdHRycy5tYXApIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGF0dHJzLm1hcFtuYW1lXTtcblxuXHRcdFx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHJzW2ldLm5hbWUgPT09IG5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHJzID0gYXR0cnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBzZWxmO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNldCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRpZiAobmFtZSBpbiBhdHRycy5tYXApIHtcblx0XHRcdFx0XHRcdC8vIFNldCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhdHRyc1tpXS5uYW1lID09PSBuYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXR0cnNbaV0udmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhdHRycy5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhdHRycy5tYXBbbmFtZV0gPSB2YWx1ZTtcblxuXHRcdFx0XHRcdHJldHVybiBzZWxmO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGF0dHJzLm1hcFtuYW1lXTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRG9lcyBhIHNoYWxsb3cgY2xvbmVzIHRoZSBub2RlIGludG8gYSBuZXcgbm9kZS4gSXQgd2lsbCBhbHNvIGV4Y2x1ZGUgaWQgYXR0cmlidXRlcyBzaW5jZVxuXHRcdCAqIHRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBpZCBwZXIgZG9jdW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBjbG9uZWROb2RlID0gbm9kZS5jbG9uZSgpO1xuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjbG9uZVxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuaHRtbC5Ob2RlfSBOZXcgY29weSBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cblx0XHQgKi9cblx0XHRjbG9uZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGNsb25lID0gbmV3IE5vZGUoc2VsZi5uYW1lLCBzZWxmLnR5cGUpLCBpLCBsLCBzZWxmQXR0cnMsIHNlbGZBdHRyLCBjbG9uZUF0dHJzO1xuXG5cdFx0XHQvLyBDbG9uZSBlbGVtZW50IGF0dHJpYnV0ZXNcblx0XHRcdGlmICgoc2VsZkF0dHJzID0gc2VsZi5hdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRjbG9uZUF0dHJzID0gW107XG5cdFx0XHRcdGNsb25lQXR0cnMubWFwID0ge307XG5cblx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IHNlbGZBdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRzZWxmQXR0ciA9IHNlbGZBdHRyc1tpXTtcblxuXHRcdFx0XHRcdC8vIENsb25lIGV2ZXJ5dGhpbmcgZXhjZXB0IGlkXG5cdFx0XHRcdFx0aWYgKHNlbGZBdHRyLm5hbWUgIT09ICdpZCcpIHtcblx0XHRcdFx0XHRcdGNsb25lQXR0cnNbY2xvbmVBdHRycy5sZW5ndGhdID0ge25hbWU6IHNlbGZBdHRyLm5hbWUsIHZhbHVlOiBzZWxmQXR0ci52YWx1ZX07XG5cdFx0XHRcdFx0XHRjbG9uZUF0dHJzLm1hcFtzZWxmQXR0ci5uYW1lXSA9IHNlbGZBdHRyLnZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNsb25lLmF0dHJpYnV0ZXMgPSBjbG9uZUF0dHJzO1xuXHRcdFx0fVxuXG5cdFx0XHRjbG9uZS52YWx1ZSA9IHNlbGYudmFsdWU7XG5cdFx0XHRjbG9uZS5zaG9ydEVuZGVkID0gc2VsZi5zaG9ydEVuZGVkO1xuXG5cdFx0XHRyZXR1cm4gY2xvbmU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFdyYXBzIHRoZSBub2RlIGluIGluIGFub3RoZXIgbm9kZS5cblx0XHQgKlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9kZS53cmFwKHdyYXBwZXJOb2RlKTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgd3JhcFxuXHRcdCAqL1xuXHRcdHdyYXA6IGZ1bmN0aW9uKHdyYXBwZXIpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5wYXJlbnQuaW5zZXJ0KHdyYXBwZXIsIHNlbGYpO1xuXHRcdFx0d3JhcHBlci5hcHBlbmQoc2VsZik7XG5cblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBVbndyYXBzIHRoZSBub2RlIGluIG90aGVyIHdvcmRzIGl0IHJlbW92ZXMgdGhlIG5vZGUgYnV0IGtlZXBzIHRoZSBjaGlsZHJlbi5cblx0XHQgKlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9kZS51bndyYXAoKTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdW53cmFwXG5cdFx0ICovXG5cdFx0dW53cmFwOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbm9kZSwgbmV4dDtcblxuXHRcdFx0Zm9yIChub2RlID0gc2VsZi5maXJzdENoaWxkOyBub2RlOykge1xuXHRcdFx0XHRuZXh0ID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRzZWxmLmluc2VydChub2RlLCBzZWxmLCB0cnVlKTtcblx0XHRcdFx0bm9kZSA9IG5leHQ7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYucmVtb3ZlKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgdGhlIG5vZGUgZnJvbSBpdCdzIHBhcmVudC5cblx0XHQgKlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9kZS5yZW1vdmUoKTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5odG1sLk5vZGV9IEN1cnJlbnQgbm9kZSB0aGF0IGdvdCByZW1vdmVkLlxuXHRcdCAqL1xuXHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHBhcmVudCA9IHNlbGYucGFyZW50LCBuZXh0ID0gc2VsZi5uZXh0LCBwcmV2ID0gc2VsZi5wcmV2O1xuXG5cdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdGlmIChwYXJlbnQuZmlyc3RDaGlsZCA9PT0gc2VsZikge1xuXHRcdFx0XHRcdHBhcmVudC5maXJzdENoaWxkID0gbmV4dDtcblxuXHRcdFx0XHRcdGlmIChuZXh0KSB7XG5cdFx0XHRcdFx0XHRuZXh0LnByZXYgPSBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwcmV2Lm5leHQgPSBuZXh0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHBhcmVudC5sYXN0Q2hpbGQgPT09IHNlbGYpIHtcblx0XHRcdFx0XHRwYXJlbnQubGFzdENoaWxkID0gcHJldjtcblxuXHRcdFx0XHRcdGlmIChwcmV2KSB7XG5cdFx0XHRcdFx0XHRwcmV2Lm5leHQgPSBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXh0LnByZXYgPSBwcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5wYXJlbnQgPSBzZWxmLm5leHQgPSBzZWxmLnByZXYgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQXBwZW5kcyBhIG5ldyBub2RlIGFzIGEgY2hpbGQgb2YgdGhlIGN1cnJlbnQgbm9kZS5cblx0XHQgKlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9kZS5hcHBlbmQoc29tZU5vZGUpO1xuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhcHBlbmRcblx0XHQgKiBAcGFyYW0ge3RpbnltY2UuaHRtbC5Ob2RlfSBub2RlIE5vZGUgdG8gYXBwZW5kIGFzIGEgY2hpbGQgb2YgdGhlIGN1cnJlbnQgb25lLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuaHRtbC5Ob2RlfSBUaGUgbm9kZSB0aGF0IGdvdCBhcHBlbmRlZC5cblx0XHQgKi9cblx0XHRhcHBlbmQ6IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbGFzdDtcblxuXHRcdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRcdG5vZGUucmVtb3ZlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGxhc3QgPSBzZWxmLmxhc3RDaGlsZDtcblx0XHRcdGlmIChsYXN0KSB7XG5cdFx0XHRcdGxhc3QubmV4dCA9IG5vZGU7XG5cdFx0XHRcdG5vZGUucHJldiA9IGxhc3Q7XG5cdFx0XHRcdHNlbGYubGFzdENoaWxkID0gbm9kZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYubGFzdENoaWxkID0gc2VsZi5maXJzdENoaWxkID0gbm9kZTtcblx0XHRcdH1cblxuXHRcdFx0bm9kZS5wYXJlbnQgPSBzZWxmO1xuXG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW5zZXJ0cyBhIG5vZGUgYXQgYSBzcGVjaWZpYyBwb3NpdGlvbiBhcyBhIGNoaWxkIG9mIHRoZSBjdXJyZW50IG5vZGUuXG5cdFx0ICpcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBhcmVudE5vZGUuaW5zZXJ0KG5ld0NoaWxkTm9kZSwgb2xkQ2hpbGROb2RlKTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaW5zZXJ0XG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLmh0bWwuTm9kZX0gbm9kZSBOb2RlIHRvIGluc2VydCBhcyBhIGNoaWxkIG9mIHRoZSBjdXJyZW50IG5vZGUuXG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLmh0bWwuTm9kZX0gcmVmX25vZGUgUmVmZXJlbmNlIG5vZGUgdG8gc2V0IG5vZGUgYmVmb3JlL2FmdGVyLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gYmVmb3JlIE9wdGlvbmFsIHN0YXRlIHRvIGluc2VydCB0aGUgbm9kZSBiZWZvcmUgdGhlIHJlZmVyZW5jZSBub2RlLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuaHRtbC5Ob2RlfSBUaGUgbm9kZSB0aGF0IGdvdCBpbnNlcnRlZC5cblx0XHQgKi9cblx0XHRpbnNlcnQ6IGZ1bmN0aW9uKG5vZGUsIHJlZl9ub2RlLCBiZWZvcmUpIHtcblx0XHRcdHZhciBwYXJlbnQ7XG5cblx0XHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0XHRub2RlLnJlbW92ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRwYXJlbnQgPSByZWZfbm9kZS5wYXJlbnQgfHwgdGhpcztcblxuXHRcdFx0aWYgKGJlZm9yZSkge1xuXHRcdFx0XHRpZiAocmVmX25vZGUgPT09IHBhcmVudC5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0cGFyZW50LmZpcnN0Q2hpbGQgPSBub2RlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlZl9ub2RlLnByZXYubmV4dCA9IG5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub2RlLnByZXYgPSByZWZfbm9kZS5wcmV2O1xuXHRcdFx0XHRub2RlLm5leHQgPSByZWZfbm9kZTtcblx0XHRcdFx0cmVmX25vZGUucHJldiA9IG5vZGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAocmVmX25vZGUgPT09IHBhcmVudC5sYXN0Q2hpbGQpIHtcblx0XHRcdFx0XHRwYXJlbnQubGFzdENoaWxkID0gbm9kZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWZfbm9kZS5uZXh0LnByZXYgPSBub2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bm9kZS5uZXh0ID0gcmVmX25vZGUubmV4dDtcblx0XHRcdFx0bm9kZS5wcmV2ID0gcmVmX25vZGU7XG5cdFx0XHRcdHJlZl9ub2RlLm5leHQgPSBub2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRub2RlLnBhcmVudCA9IHBhcmVudDtcblxuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEdldCBhbGwgY2hpbGRyZW4gYnkgbmFtZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0QWxsXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgY2hpbGQgbm9kZXMgdG8gY29sbGVjdC5cblx0XHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgd2l0aCBjaGlsZCBub2RlcyBtYXRjaGluIHRoZSBzcGVjaWZpZWQgbmFtZS5cblx0XHQgKi9cblx0XHRnZXRBbGw6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbm9kZSwgY29sbGVjdGlvbiA9IFtdO1xuXG5cdFx0XHRmb3IgKG5vZGUgPSBzZWxmLmZpcnN0Q2hpbGQ7IG5vZGU7IG5vZGUgPSB3YWxrKG5vZGUsIHNlbGYpKSB7XG5cdFx0XHRcdGlmIChub2RlLm5hbWUgPT09IG5hbWUpIHtcblx0XHRcdFx0XHRjb2xsZWN0aW9uLnB1c2gobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb247XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIG9mIHRoZSBjdXJyZW50IG5vZGUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGVtcHR5XG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5odG1sLk5vZGV9IFRoZSBjdXJyZW50IG5vZGUgdGhhdCBnb3QgY2xlYXJlZC5cblx0XHQgKi9cblx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIG5vZGVzLCBpLCBub2RlO1xuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNoaWxkcmVuXG5cdFx0XHRpZiAoc2VsZi5maXJzdENoaWxkKSB7XG5cdFx0XHRcdG5vZGVzID0gW107XG5cblx0XHRcdFx0Ly8gQ29sbGVjdCB0aGUgY2hpbGRyZW5cblx0XHRcdFx0Zm9yIChub2RlID0gc2VsZi5maXJzdENoaWxkOyBub2RlOyBub2RlID0gd2Fsayhub2RlLCBzZWxmKSkge1xuXHRcdFx0XHRcdG5vZGVzLnB1c2gobm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZW1vdmUgdGhlIGNoaWxkcmVuXG5cdFx0XHRcdGkgPSBub2Rlcy5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRub2RlID0gbm9kZXNbaV07XG5cdFx0XHRcdFx0bm9kZS5wYXJlbnQgPSBub2RlLmZpcnN0Q2hpbGQgPSBub2RlLmxhc3RDaGlsZCA9IG5vZGUubmV4dCA9IG5vZGUucHJldiA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0c2VsZi5maXJzdENoaWxkID0gc2VsZi5sYXN0Q2hpbGQgPSBudWxsO1xuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBub2RlIGlzIHRvIGJlIGNvbnNpZGVyZWQgZW1wdHkgb3Igbm90LlxuXHRcdCAqXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBub2RlLmlzRW1wdHkoe2ltZzogdHJ1ZX0pO1xuXHRcdCAqIEBtZXRob2QgaXNFbXB0eVxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50cyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIGVsZW1lbnRzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgdHJlYXRlZCBhcyBub24gZW1wdHkgZWxlbWVudHMuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHdoaXRlc3BhY2UgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBlbGVtZW50cyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IHRyZWF0ZWQgd2hpdGVzcGFjZSBwcmVzZXJ2YWJsZXMuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZSBpZiB0aGUgbm9kZSBpcyBlbXB0eSBvciBub3QuXG5cdFx0ICovXG5cdFx0aXNFbXB0eTogZnVuY3Rpb24oZWxlbWVudHMsIHdoaXRlc3BhY2UpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbm9kZSA9IHNlbGYuZmlyc3RDaGlsZCwgaSwgbmFtZTtcblxuXHRcdFx0d2hpdGVzcGFjZSA9IHdoaXRlc3BhY2UgfHwge307XG5cblx0XHRcdGlmIChub2RlKSB7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAobm9kZS50eXBlID09PSAxKSB7XG5cdFx0XHRcdFx0XHQvLyBJZ25vcmUgYm9ndXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdGlmIChub2RlLmF0dHJpYnV0ZXMubWFwWydkYXRhLW1jZS1ib2d1cyddKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBLZWVwIGVtcHR5IGVsZW1lbnRzIGxpa2UgPGltZyAvPlxuXHRcdFx0XHRcdFx0aWYgKGVsZW1lbnRzW25vZGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBLZWVwIGJvb2ttYXJrIG5vZGVzIGFuZCBuYW1lIGF0dHJpYnV0ZSBsaWtlIDxhIG5hbWU9XCIxXCI+PC9hPlxuXHRcdFx0XHRcdFx0aSA9IG5vZGUuYXR0cmlidXRlcy5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBub2RlLmF0dHJpYnV0ZXNbaV0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKG5hbWUgPT09IFwibmFtZVwiIHx8IG5hbWUuaW5kZXhPZignZGF0YS1tY2UtYm9va21hcmsnKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEtlZXAgY29tbWVudHNcblx0XHRcdFx0XHRpZiAobm9kZS50eXBlID09PSA4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gS2VlcCBub24gd2hpdGVzcGFjZSB0ZXh0IG5vZGVzXG5cdFx0XHRcdFx0aWYgKG5vZGUudHlwZSA9PT0gMyAmJiAhd2hpdGVTcGFjZVJlZ0V4cC50ZXN0KG5vZGUudmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gS2VlcCB3aGl0ZXNwYWNlIHByZXNlcnZlIGVsZW1lbnRzXG5cdFx0XHRcdFx0aWYgKG5vZGUudHlwZSA9PT0gMyAmJiBub2RlLnBhcmVudCAmJiB3aGl0ZXNwYWNlW25vZGUucGFyZW50Lm5hbWVdICYmIHdoaXRlU3BhY2VSZWdFeHAudGVzdChub2RlLnZhbHVlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoKG5vZGUgPSB3YWxrKG5vZGUsIHNlbGYpKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBXYWxrcyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBub2RlIGFuZCByZXR1cm5zIHRoYXQgbm9kZSBvciBudWxsIGlmIGl0IHdhc24ndCBmb3VuZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgd2Fsa1xuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJldiBPcHRpb25hbCBwcmV2aW91cyBub2RlIHN0YXRlIGRlZmF1bHRzIHRvIGZhbHNlLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuaHRtbC5Ob2RlfSBOb2RlIHRoYXQgaXMgbmV4dCB0byBvciBwcmV2aW91cyBvZiB0aGUgY3VycmVudCBub2RlLlxuXHRcdCAqL1xuXHRcdHdhbGs6IGZ1bmN0aW9uKHByZXYpIHtcblx0XHRcdHJldHVybiB3YWxrKHRoaXMsIG51bGwsIHByZXYpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5vZGUgb2YgYSBzcGVjaWZpYyB0eXBlLlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZXRob2QgY3JlYXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIG5vZGUgdHlwZSB0byBjcmVhdGUgZm9yIGV4YW1wbGUgXCJiXCIgb3IgXCIjdGV4dFwiLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gYXR0cnMgTmFtZS92YWx1ZSBjb2xsZWN0aW9uIG9mIGF0dHJpYnV0ZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gZWxlbWVudHMuXG5cdCAqL1xuXHROb2RlLmNyZWF0ZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJzKSB7XG5cdFx0dmFyIG5vZGUsIGF0dHJOYW1lO1xuXG5cdFx0Ly8gQ3JlYXRlIG5vZGVcblx0XHRub2RlID0gbmV3IE5vZGUobmFtZSwgdHlwZUxvb2t1cFtuYW1lXSB8fCAxKTtcblxuXHRcdC8vIEFkZCBhdHRyaWJ1dGVzIGlmIG5lZWRlZFxuXHRcdGlmIChhdHRycykge1xuXHRcdFx0Zm9yIChhdHRyTmFtZSBpbiBhdHRycykge1xuXHRcdFx0XHRub2RlLmF0dHIoYXR0ck5hbWUsIGF0dHJzW2F0dHJOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH07XG5cblx0cmV0dXJuIE5vZGU7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2h0bWwvU2NoZW1hLmpzXG5cbi8qKlxuICogU2NoZW1hLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogU2NoZW1hIHZhbGlkYXRvciBjbGFzcy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5odG1sLlNjaGVtYVxuICogQGV4YW1wbGVcbiAqICBpZiAodGlueW1jZS5hY3RpdmVFZGl0b3Iuc2NoZW1hLmlzVmFsaWRDaGlsZCgncCcsICdzcGFuJykpXG4gKiAgICBhbGVydCgnc3BhbiBpcyB2YWxpZCBjaGlsZCBvZiBwLicpO1xuICpcbiAqICBpZiAodGlueW1jZS5hY3RpdmVFZGl0b3Iuc2NoZW1hLmdldEVsZW1lbnRSdWxlKCdwJykpXG4gKiAgICBhbGVydCgnUCBpcyBhIHZhbGlkIGVsZW1lbnQuJyk7XG4gKlxuICogQGNsYXNzIHRpbnltY2UuaHRtbC5TY2hlbWFcbiAqIEB2ZXJzaW9uIDMuNFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL2h0bWwvU2NoZW1hXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxuXSwgZnVuY3Rpb24oVG9vbHMpIHtcblx0dmFyIG1hcENhY2hlID0ge30sIGR1bW15T2JqID0ge307XG5cdHZhciBtYWtlTWFwID0gVG9vbHMubWFrZU1hcCwgZWFjaCA9IFRvb2xzLmVhY2gsIGV4dGVuZCA9IFRvb2xzLmV4dGVuZCwgZXhwbG9kZSA9IFRvb2xzLmV4cGxvZGUsIGluQXJyYXkgPSBUb29scy5pbkFycmF5O1xuXG5cdGZ1bmN0aW9uIHNwbGl0KGl0ZW1zLCBkZWxpbSkge1xuXHRcdGl0ZW1zID0gVG9vbHMudHJpbShpdGVtcyk7XG5cdFx0cmV0dXJuIGl0ZW1zID8gaXRlbXMuc3BsaXQoZGVsaW0gfHwgJyAnKSA6IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkcyBhIHNjaGVtYSBsb29rdXAgdGFibGVcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgaHRtbDQsIGh0bWw1IG9yIGh0bWw1LXN0cmljdCBzY2hlbWEgdHlwZS5cblx0ICogQHJldHVybiB7T2JqZWN0fSBTY2hlbWEgbG9va3VwIHRhYmxlLlxuXHQgKi9cblx0ZnVuY3Rpb24gY29tcGlsZVNjaGVtYSh0eXBlKSB7XG5cdFx0dmFyIHNjaGVtYSA9IHt9LCBnbG9iYWxBdHRyaWJ1dGVzLCBibG9ja0NvbnRlbnQ7XG5cdFx0dmFyIHBocmFzaW5nQ29udGVudCwgZmxvd0NvbnRlbnQsIGh0bWw0QmxvY2tDb250ZW50LCBodG1sNFBocmFzaW5nQ29udGVudDtcblxuXHRcdGZ1bmN0aW9uIGFkZChuYW1lLCBhdHRyaWJ1dGVzLCBjaGlsZHJlbikge1xuXHRcdFx0dmFyIG5pLCBhdHRyaWJ1dGVzT3JkZXIsIGVsZW1lbnQ7XG5cblx0XHRcdGZ1bmN0aW9uIGFycmF5VG9NYXAoYXJyYXksIG9iaikge1xuXHRcdFx0XHR2YXIgbWFwID0ge30sIGksIGw7XG5cblx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdG1hcFthcnJheVtpXV0gPSBvYmogfHwge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRjaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuXHRcdFx0YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwgXCJcIjtcblxuXHRcdFx0aWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjaGlsZHJlbiA9IHNwbGl0KGNoaWxkcmVuKTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZSA9IHNwbGl0KG5hbWUpO1xuXHRcdFx0bmkgPSBuYW1lLmxlbmd0aDtcblx0XHRcdHdoaWxlIChuaS0tKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXNPcmRlciA9IHNwbGl0KFtnbG9iYWxBdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzXS5qb2luKCcgJykpO1xuXG5cdFx0XHRcdGVsZW1lbnQgPSB7XG5cdFx0XHRcdFx0YXR0cmlidXRlczogYXJyYXlUb01hcChhdHRyaWJ1dGVzT3JkZXIpLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXNPcmRlcjogYXR0cmlidXRlc09yZGVyLFxuXHRcdFx0XHRcdGNoaWxkcmVuOiBhcnJheVRvTWFwKGNoaWxkcmVuLCBkdW1teU9iailcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRzY2hlbWFbbmFtZVtuaV1dID0gZWxlbWVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZGRBdHRycyhuYW1lLCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHR2YXIgbmksIHNjaGVtYUl0ZW0sIGksIGw7XG5cblx0XHRcdG5hbWUgPSBzcGxpdChuYW1lKTtcblx0XHRcdG5pID0gbmFtZS5sZW5ndGg7XG5cdFx0XHRhdHRyaWJ1dGVzID0gc3BsaXQoYXR0cmlidXRlcyk7XG5cdFx0XHR3aGlsZSAobmktLSkge1xuXHRcdFx0XHRzY2hlbWFJdGVtID0gc2NoZW1hW25hbWVbbmldXTtcblx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0c2NoZW1hSXRlbS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZXNbaV1dID0ge307XG5cdFx0XHRcdFx0c2NoZW1hSXRlbS5hdHRyaWJ1dGVzT3JkZXIucHVzaChhdHRyaWJ1dGVzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFVzZSBjYWNoZWQgc2NoZW1hXG5cdFx0aWYgKG1hcENhY2hlW3R5cGVdKSB7XG5cdFx0XHRyZXR1cm4gbWFwQ2FjaGVbdHlwZV07XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlcyBwcmVzZW50IG9uIGFsbCBlbGVtZW50c1xuXHRcdGdsb2JhbEF0dHJpYnV0ZXMgPSBcImlkIGFjY2Vzc2tleSBjbGFzcyBkaXIgbGFuZyBzdHlsZSB0YWJpbmRleCB0aXRsZVwiO1xuXG5cdFx0Ly8gRXZlbnQgYXR0cmlidXRlcyBjYW4gYmUgb3B0LWluL29wdC1vdXRcblx0XHQvKmV2ZW50QXR0cmlidXRlcyA9IHNwbGl0KFwib25hYm9ydCBvbmJsdXIgb25jYW5jZWwgb25jYW5wbGF5IG9uY2FucGxheXRocm91Z2ggb25jaGFuZ2Ugb25jbGljayBvbmNsb3NlIG9uY29udGV4dG1lbnUgb25jdWVjaGFuZ2UgXCIgK1xuXHRcdCBcIm9uZGJsY2xpY2sgb25kcmFnIG9uZHJhZ2VuZCBvbmRyYWdlbnRlciBvbmRyYWdsZWF2ZSBvbmRyYWdvdmVyIG9uZHJhZ3N0YXJ0IG9uZHJvcCBvbmR1cmF0aW9uY2hhbmdlIG9uZW1wdGllZCBvbmVuZGVkIFwiICtcblx0XHQgXCJvbmVycm9yIG9uZm9jdXMgb25pbnB1dCBvbmludmFsaWQgb25rZXlkb3duIG9ua2V5cHJlc3Mgb25rZXl1cCBvbmxvYWQgb25sb2FkZWRkYXRhIG9ubG9hZGVkbWV0YWRhdGEgb25sb2Fkc3RhcnQgXCIgK1xuXHRcdCBcIm9ubW91c2Vkb3duIG9ubW91c2Vtb3ZlIG9ubW91c2VvdXQgb25tb3VzZW92ZXIgb25tb3VzZXVwIG9ubW91c2V3aGVlbCBvbnBhdXNlIG9ucGxheSBvbnBsYXlpbmcgb25wcm9ncmVzcyBvbnJhdGVjaGFuZ2UgXCIgK1xuXHRcdCBcIm9ucmVzZXQgb25zY3JvbGwgb25zZWVrZWQgb25zZWVraW5nIG9uc2Vla2luZyBvbnNlbGVjdCBvbnNob3cgb25zdGFsbGVkIG9uc3VibWl0IG9uc3VzcGVuZCBvbnRpbWV1cGRhdGUgb252b2x1bWVjaGFuZ2UgXCIgK1xuXHRcdCBcIm9ud2FpdGluZ1wiXG5cdFx0ICk7Ki9cblxuXHRcdC8vIEJsb2NrIGNvbnRlbnQgZWxlbWVudHNcblx0XHRibG9ja0NvbnRlbnQgPVxuXHRcdFx0XCJhZGRyZXNzIGJsb2NrcXVvdGUgZGl2IGRsIGZpZWxkc2V0IGZvcm0gaDEgaDIgaDMgaDQgaDUgaDYgaHIgbWVudSBvbCBwIHByZSB0YWJsZSB1bFwiO1xuXG5cdFx0Ly8gUGhyYXNpbmcgY29udGVudCBlbGVtZW50cyBmcm9tIHRoZSBIVE1MNSBzcGVjIChpbmxpbmUpXG5cdFx0cGhyYXNpbmdDb250ZW50ID1cblx0XHRcdFwiYSBhYmJyIGIgYmRvIGJyIGJ1dHRvbiBjaXRlIGNvZGUgZGVsIGRmbiBlbSBlbWJlZCBpIGlmcmFtZSBpbWcgaW5wdXQgaW5zIGtiZCBcIiArXG5cdFx0XHRcImxhYmVsIG1hcCBub3NjcmlwdCBvYmplY3QgcSBzIHNhbXAgc2NyaXB0IHNlbGVjdCBzbWFsbCBzcGFuIHN0cm9uZyBzdWIgc3VwIFwiICtcblx0XHRcdFwidGV4dGFyZWEgdSB2YXIgI3RleHQgI2NvbW1lbnRcIlxuXHRcdDtcblxuXHRcdC8vIEFkZCBIVE1MNSBpdGVtcyB0byBnbG9iYWxBdHRyaWJ1dGVzLCBibG9ja0NvbnRlbnQsIHBocmFzaW5nQ29udGVudFxuXHRcdGlmICh0eXBlICE9IFwiaHRtbDRcIikge1xuXHRcdFx0Z2xvYmFsQXR0cmlidXRlcyArPSBcIiBjb250ZW50ZWRpdGFibGUgY29udGV4dG1lbnUgZHJhZ2dhYmxlIGRyb3B6b25lIFwiICtcblx0XHRcdFx0XCJoaWRkZW4gc3BlbGxjaGVjayB0cmFuc2xhdGVcIjtcblx0XHRcdGJsb2NrQ29udGVudCArPSBcIiBhcnRpY2xlIGFzaWRlIGRldGFpbHMgZGlhbG9nIGZpZ3VyZSBoZWFkZXIgZm9vdGVyIGhncm91cCBzZWN0aW9uIG5hdlwiO1xuXHRcdFx0cGhyYXNpbmdDb250ZW50ICs9IFwiIGF1ZGlvIGNhbnZhcyBjb21tYW5kIGRhdGFsaXN0IG1hcmsgbWV0ZXIgb3V0cHV0IHBpY3R1cmUgXCIgK1xuXHRcdFx0XHRcInByb2dyZXNzIHRpbWUgd2JyIHZpZGVvIHJ1YnkgYmRpIGtleWdlblwiO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBIVE1MNCBlbGVtZW50cyB1bmxlc3MgaXQncyBodG1sNS1zdHJpY3Rcblx0XHRpZiAodHlwZSAhPSBcImh0bWw1LXN0cmljdFwiKSB7XG5cdFx0XHRnbG9iYWxBdHRyaWJ1dGVzICs9IFwiIHhtbDpsYW5nXCI7XG5cblx0XHRcdGh0bWw0UGhyYXNpbmdDb250ZW50ID0gXCJhY3JvbnltIGFwcGxldCBiYXNlZm9udCBiaWcgZm9udCBzdHJpa2UgdHRcIjtcblx0XHRcdHBocmFzaW5nQ29udGVudCA9IFtwaHJhc2luZ0NvbnRlbnQsIGh0bWw0UGhyYXNpbmdDb250ZW50XS5qb2luKCcgJyk7XG5cblx0XHRcdGVhY2goc3BsaXQoaHRtbDRQaHJhc2luZ0NvbnRlbnQpLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRcdGFkZChuYW1lLCBcIlwiLCBwaHJhc2luZ0NvbnRlbnQpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGh0bWw0QmxvY2tDb250ZW50ID0gXCJjZW50ZXIgZGlyIGlzaW5kZXggbm9mcmFtZXNcIjtcblx0XHRcdGJsb2NrQ29udGVudCA9IFtibG9ja0NvbnRlbnQsIGh0bWw0QmxvY2tDb250ZW50XS5qb2luKCcgJyk7XG5cblx0XHRcdC8vIEZsb3cgY29udGVudCBlbGVtZW50cyBmcm9tIHRoZSBIVE1MNSBzcGVjIChibG9jaytpbmxpbmUpXG5cdFx0XHRmbG93Q29udGVudCA9IFtibG9ja0NvbnRlbnQsIHBocmFzaW5nQ29udGVudF0uam9pbignICcpO1xuXG5cdFx0XHRlYWNoKHNwbGl0KGh0bWw0QmxvY2tDb250ZW50KSwgZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0XHRhZGQobmFtZSwgXCJcIiwgZmxvd0NvbnRlbnQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gRmxvdyBjb250ZW50IGVsZW1lbnRzIGZyb20gdGhlIEhUTUw1IHNwZWMgKGJsb2NrK2lubGluZSlcblx0XHRmbG93Q29udGVudCA9IGZsb3dDb250ZW50IHx8IFtibG9ja0NvbnRlbnQsIHBocmFzaW5nQ29udGVudF0uam9pbihcIiBcIik7XG5cblx0XHQvLyBIVE1MNCBiYXNlIHNjaGVtYSBUT0RPOiBNb3ZlIEhUTUw1IHNwZWNpZmljIGF0dHJpYnV0ZXMgdG8gSFRNTDUgc3BlY2lmaWMgaWYgc3RhdGVtZW50XG5cdFx0Ly8gU2NoZW1hIGl0ZW1zIDxlbGVtZW50IG5hbWU+LCA8c3BlY2lmaWMgYXR0cmlidXRlcz4sIDxjaGlsZHJlbiAuLj5cblx0XHRhZGQoXCJodG1sXCIsIFwibWFuaWZlc3RcIiwgXCJoZWFkIGJvZHlcIik7XG5cdFx0YWRkKFwiaGVhZFwiLCBcIlwiLCBcImJhc2UgY29tbWFuZCBsaW5rIG1ldGEgbm9zY3JpcHQgc2NyaXB0IHN0eWxlIHRpdGxlXCIpO1xuXHRcdGFkZChcInRpdGxlIGhyIG5vc2NyaXB0IGJyXCIpO1xuXHRcdGFkZChcImJhc2VcIiwgXCJocmVmIHRhcmdldFwiKTtcblx0XHRhZGQoXCJsaW5rXCIsIFwiaHJlZiByZWwgbWVkaWEgaHJlZmxhbmcgdHlwZSBzaXplcyBocmVmbGFuZ1wiKTtcblx0XHRhZGQoXCJtZXRhXCIsIFwibmFtZSBodHRwLWVxdWl2IGNvbnRlbnQgY2hhcnNldFwiKTtcblx0XHRhZGQoXCJzdHlsZVwiLCBcIm1lZGlhIHR5cGUgc2NvcGVkXCIpO1xuXHRcdGFkZChcInNjcmlwdFwiLCBcInNyYyBhc3luYyBkZWZlciB0eXBlIGNoYXJzZXRcIik7XG5cdFx0YWRkKFwiYm9keVwiLCBcIm9uYWZ0ZXJwcmludCBvbmJlZm9yZXByaW50IG9uYmVmb3JldW5sb2FkIG9uYmx1ciBvbmVycm9yIG9uZm9jdXMgXCIgK1xuXHRcdFwib25oYXNoY2hhbmdlIG9ubG9hZCBvbm1lc3NhZ2Ugb25vZmZsaW5lIG9ub25saW5lIG9ucGFnZWhpZGUgb25wYWdlc2hvdyBcIiArXG5cdFx0XCJvbnBvcHN0YXRlIG9ucmVzaXplIG9uc2Nyb2xsIG9uc3RvcmFnZSBvbnVubG9hZFwiLCBmbG93Q29udGVudCk7XG5cdFx0YWRkKFwiYWRkcmVzcyBkdCBkZCBkaXYgY2FwdGlvblwiLCBcIlwiLCBmbG93Q29udGVudCk7XG5cdFx0YWRkKFwiaDEgaDIgaDMgaDQgaDUgaDYgcHJlIHAgYWJiciBjb2RlIHZhciBzYW1wIGtiZCBzdWIgc3VwIGkgYiB1IGJkbyBzcGFuIGxlZ2VuZCBlbSBzdHJvbmcgc21hbGwgcyBjaXRlIGRmblwiLCBcIlwiLCBwaHJhc2luZ0NvbnRlbnQpO1xuXHRcdGFkZChcImJsb2NrcXVvdGVcIiwgXCJjaXRlXCIsIGZsb3dDb250ZW50KTtcblx0XHRhZGQoXCJvbFwiLCBcInJldmVyc2VkIHN0YXJ0IHR5cGVcIiwgXCJsaVwiKTtcblx0XHRhZGQoXCJ1bFwiLCBcIlwiLCBcImxpXCIpO1xuXHRcdGFkZChcImxpXCIsIFwidmFsdWVcIiwgZmxvd0NvbnRlbnQpO1xuXHRcdGFkZChcImRsXCIsIFwiXCIsIFwiZHQgZGRcIik7XG5cdFx0YWRkKFwiYVwiLCBcImhyZWYgdGFyZ2V0IHJlbCBtZWRpYSBocmVmbGFuZyB0eXBlXCIsIHBocmFzaW5nQ29udGVudCk7XG5cdFx0YWRkKFwicVwiLCBcImNpdGVcIiwgcGhyYXNpbmdDb250ZW50KTtcblx0XHRhZGQoXCJpbnMgZGVsXCIsIFwiY2l0ZSBkYXRldGltZVwiLCBmbG93Q29udGVudCk7XG5cdFx0YWRkKFwiaW1nXCIsIFwic3JjIHNpemVzIHNyY3NldCBhbHQgdXNlbWFwIGlzbWFwIHdpZHRoIGhlaWdodFwiKTtcblx0XHRhZGQoXCJpZnJhbWVcIiwgXCJzcmMgbmFtZSB3aWR0aCBoZWlnaHRcIiwgZmxvd0NvbnRlbnQpO1xuXHRcdGFkZChcImVtYmVkXCIsIFwic3JjIHR5cGUgd2lkdGggaGVpZ2h0XCIpO1xuXHRcdGFkZChcIm9iamVjdFwiLCBcImRhdGEgdHlwZSB0eXBlbXVzdG1hdGNoIG5hbWUgdXNlbWFwIGZvcm0gd2lkdGggaGVpZ2h0XCIsIFtmbG93Q29udGVudCwgXCJwYXJhbVwiXS5qb2luKCcgJykpO1xuXHRcdGFkZChcInBhcmFtXCIsIFwibmFtZSB2YWx1ZVwiKTtcblx0XHRhZGQoXCJtYXBcIiwgXCJuYW1lXCIsIFtmbG93Q29udGVudCwgXCJhcmVhXCJdLmpvaW4oJyAnKSk7XG5cdFx0YWRkKFwiYXJlYVwiLCBcImFsdCBjb29yZHMgc2hhcGUgaHJlZiB0YXJnZXQgcmVsIG1lZGlhIGhyZWZsYW5nIHR5cGVcIik7XG5cdFx0YWRkKFwidGFibGVcIiwgXCJib3JkZXJcIiwgXCJjYXB0aW9uIGNvbGdyb3VwIHRoZWFkIHRmb290IHRib2R5IHRyXCIgKyAodHlwZSA9PSBcImh0bWw0XCIgPyBcIiBjb2xcIiA6IFwiXCIpKTtcblx0XHRhZGQoXCJjb2xncm91cFwiLCBcInNwYW5cIiwgXCJjb2xcIik7XG5cdFx0YWRkKFwiY29sXCIsIFwic3BhblwiKTtcblx0XHRhZGQoXCJ0Ym9keSB0aGVhZCB0Zm9vdFwiLCBcIlwiLCBcInRyXCIpO1xuXHRcdGFkZChcInRyXCIsIFwiXCIsIFwidGQgdGhcIik7XG5cdFx0YWRkKFwidGRcIiwgXCJjb2xzcGFuIHJvd3NwYW4gaGVhZGVyc1wiLCBmbG93Q29udGVudCk7XG5cdFx0YWRkKFwidGhcIiwgXCJjb2xzcGFuIHJvd3NwYW4gaGVhZGVycyBzY29wZSBhYmJyXCIsIGZsb3dDb250ZW50KTtcblx0XHRhZGQoXCJmb3JtXCIsIFwiYWNjZXB0LWNoYXJzZXQgYWN0aW9uIGF1dG9jb21wbGV0ZSBlbmN0eXBlIG1ldGhvZCBuYW1lIG5vdmFsaWRhdGUgdGFyZ2V0XCIsIGZsb3dDb250ZW50KTtcblx0XHRhZGQoXCJmaWVsZHNldFwiLCBcImRpc2FibGVkIGZvcm0gbmFtZVwiLCBbZmxvd0NvbnRlbnQsIFwibGVnZW5kXCJdLmpvaW4oJyAnKSk7XG5cdFx0YWRkKFwibGFiZWxcIiwgXCJmb3JtIGZvclwiLCBwaHJhc2luZ0NvbnRlbnQpO1xuXHRcdGFkZChcImlucHV0XCIsIFwiYWNjZXB0IGFsdCBhdXRvY29tcGxldGUgY2hlY2tlZCBkaXJuYW1lIGRpc2FibGVkIGZvcm0gZm9ybWFjdGlvbiBmb3JtZW5jdHlwZSBmb3JtbWV0aG9kIGZvcm1ub3ZhbGlkYXRlIFwiICtcblx0XHRcdFx0XCJmb3JtdGFyZ2V0IGhlaWdodCBsaXN0IG1heCBtYXhsZW5ndGggbWluIG11bHRpcGxlIG5hbWUgcGF0dGVybiByZWFkb25seSByZXF1aXJlZCBzaXplIHNyYyBzdGVwIHR5cGUgdmFsdWUgd2lkdGhcIlxuXHRcdCk7XG5cdFx0YWRkKFwiYnV0dG9uXCIsIFwiZGlzYWJsZWQgZm9ybSBmb3JtYWN0aW9uIGZvcm1lbmN0eXBlIGZvcm1tZXRob2QgZm9ybW5vdmFsaWRhdGUgZm9ybXRhcmdldCBuYW1lIHR5cGUgdmFsdWVcIixcblx0XHRcdHR5cGUgPT0gXCJodG1sNFwiID8gZmxvd0NvbnRlbnQgOiBwaHJhc2luZ0NvbnRlbnQpO1xuXHRcdGFkZChcInNlbGVjdFwiLCBcImRpc2FibGVkIGZvcm0gbXVsdGlwbGUgbmFtZSByZXF1aXJlZCBzaXplXCIsIFwib3B0aW9uIG9wdGdyb3VwXCIpO1xuXHRcdGFkZChcIm9wdGdyb3VwXCIsIFwiZGlzYWJsZWQgbGFiZWxcIiwgXCJvcHRpb25cIik7XG5cdFx0YWRkKFwib3B0aW9uXCIsIFwiZGlzYWJsZWQgbGFiZWwgc2VsZWN0ZWQgdmFsdWVcIik7XG5cdFx0YWRkKFwidGV4dGFyZWFcIiwgXCJjb2xzIGRpcm5hbWUgZGlzYWJsZWQgZm9ybSBtYXhsZW5ndGggbmFtZSByZWFkb25seSByZXF1aXJlZCByb3dzIHdyYXBcIik7XG5cdFx0YWRkKFwibWVudVwiLCBcInR5cGUgbGFiZWxcIiwgW2Zsb3dDb250ZW50LCBcImxpXCJdLmpvaW4oJyAnKSk7XG5cdFx0YWRkKFwibm9zY3JpcHRcIiwgXCJcIiwgZmxvd0NvbnRlbnQpO1xuXG5cdFx0Ly8gRXh0ZW5kIHdpdGggSFRNTDUgZWxlbWVudHNcblx0XHRpZiAodHlwZSAhPSBcImh0bWw0XCIpIHtcblx0XHRcdGFkZChcIndiclwiKTtcblx0XHRcdGFkZChcInJ1YnlcIiwgXCJcIiwgW3BocmFzaW5nQ29udGVudCwgXCJydCBycFwiXS5qb2luKCcgJykpO1xuXHRcdFx0YWRkKFwiZmlnY2FwdGlvblwiLCBcIlwiLCBmbG93Q29udGVudCk7XG5cdFx0XHRhZGQoXCJtYXJrIHJ0IHJwIHN1bW1hcnkgYmRpXCIsIFwiXCIsIHBocmFzaW5nQ29udGVudCk7XG5cdFx0XHRhZGQoXCJjYW52YXNcIiwgXCJ3aWR0aCBoZWlnaHRcIiwgZmxvd0NvbnRlbnQpO1xuXHRcdFx0YWRkKFwidmlkZW9cIiwgXCJzcmMgY3Jvc3NvcmlnaW4gcG9zdGVyIHByZWxvYWQgYXV0b3BsYXkgbWVkaWFncm91cCBsb29wIFwiICtcblx0XHRcdFx0XCJtdXRlZCBjb250cm9scyB3aWR0aCBoZWlnaHQgYnVmZmVyZWRcIiwgW2Zsb3dDb250ZW50LCBcInRyYWNrIHNvdXJjZVwiXS5qb2luKCcgJykpO1xuXHRcdFx0YWRkKFwiYXVkaW9cIiwgXCJzcmMgY3Jvc3NvcmlnaW4gcHJlbG9hZCBhdXRvcGxheSBtZWRpYWdyb3VwIGxvb3AgbXV0ZWQgY29udHJvbHMgXCIgK1xuXHRcdFx0XHRcImJ1ZmZlcmVkIHZvbHVtZVwiLCBbZmxvd0NvbnRlbnQsIFwidHJhY2sgc291cmNlXCJdLmpvaW4oJyAnKSk7XG5cdFx0XHRhZGQoXCJwaWN0dXJlXCIsIFwiXCIsIFwiaW1nIHNvdXJjZVwiKTtcblx0XHRcdGFkZChcInNvdXJjZVwiLCBcInNyYyBzcmNzZXQgdHlwZSBtZWRpYSBzaXplc1wiKTtcblx0XHRcdGFkZChcInRyYWNrXCIsIFwia2luZCBzcmMgc3JjbGFuZyBsYWJlbCBkZWZhdWx0XCIpO1xuXHRcdFx0YWRkKFwiZGF0YWxpc3RcIiwgXCJcIiwgW3BocmFzaW5nQ29udGVudCwgXCJvcHRpb25cIl0uam9pbignICcpKTtcblx0XHRcdGFkZChcImFydGljbGUgc2VjdGlvbiBuYXYgYXNpZGUgaGVhZGVyIGZvb3RlclwiLCBcIlwiLCBmbG93Q29udGVudCk7XG5cdFx0XHRhZGQoXCJoZ3JvdXBcIiwgXCJcIiwgXCJoMSBoMiBoMyBoNCBoNSBoNlwiKTtcblx0XHRcdGFkZChcImZpZ3VyZVwiLCBcIlwiLCBbZmxvd0NvbnRlbnQsIFwiZmlnY2FwdGlvblwiXS5qb2luKCcgJykpO1xuXHRcdFx0YWRkKFwidGltZVwiLCBcImRhdGV0aW1lXCIsIHBocmFzaW5nQ29udGVudCk7XG5cdFx0XHRhZGQoXCJkaWFsb2dcIiwgXCJvcGVuXCIsIGZsb3dDb250ZW50KTtcblx0XHRcdGFkZChcImNvbW1hbmRcIiwgXCJ0eXBlIGxhYmVsIGljb24gZGlzYWJsZWQgY2hlY2tlZCByYWRpb2dyb3VwIGNvbW1hbmRcIik7XG5cdFx0XHRhZGQoXCJvdXRwdXRcIiwgXCJmb3IgZm9ybSBuYW1lXCIsIHBocmFzaW5nQ29udGVudCk7XG5cdFx0XHRhZGQoXCJwcm9ncmVzc1wiLCBcInZhbHVlIG1heFwiLCBwaHJhc2luZ0NvbnRlbnQpO1xuXHRcdFx0YWRkKFwibWV0ZXJcIiwgXCJ2YWx1ZSBtaW4gbWF4IGxvdyBoaWdoIG9wdGltdW1cIiwgcGhyYXNpbmdDb250ZW50KTtcblx0XHRcdGFkZChcImRldGFpbHNcIiwgXCJvcGVuXCIsIFtmbG93Q29udGVudCwgXCJzdW1tYXJ5XCJdLmpvaW4oJyAnKSk7XG5cdFx0XHRhZGQoXCJrZXlnZW5cIiwgXCJhdXRvZm9jdXMgY2hhbGxlbmdlIGRpc2FibGVkIGZvcm0ga2V5dHlwZSBuYW1lXCIpO1xuXHRcdH1cblxuXHRcdC8vIEV4dGVuZCB3aXRoIEhUTUw0IGF0dHJpYnV0ZXMgdW5sZXNzIGl0J3MgaHRtbDUtc3RyaWN0XG5cdFx0aWYgKHR5cGUgIT0gXCJodG1sNS1zdHJpY3RcIikge1xuXHRcdFx0YWRkQXR0cnMoXCJzY3JpcHRcIiwgXCJsYW5ndWFnZSB4bWw6c3BhY2VcIik7XG5cdFx0XHRhZGRBdHRycyhcInN0eWxlXCIsIFwieG1sOnNwYWNlXCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJvYmplY3RcIiwgXCJkZWNsYXJlIGNsYXNzaWQgY29kZSBjb2RlYmFzZSBjb2RldHlwZSBhcmNoaXZlIHN0YW5kYnkgYWxpZ24gYm9yZGVyIGhzcGFjZSB2c3BhY2VcIik7XG5cdFx0XHRhZGRBdHRycyhcImVtYmVkXCIsIFwiYWxpZ24gbmFtZSBoc3BhY2UgdnNwYWNlXCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJwYXJhbVwiLCBcInZhbHVldHlwZSB0eXBlXCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJhXCIsIFwiY2hhcnNldCBuYW1lIHJldiBzaGFwZSBjb29yZHNcIik7XG5cdFx0XHRhZGRBdHRycyhcImJyXCIsIFwiY2xlYXJcIik7XG5cdFx0XHRhZGRBdHRycyhcImFwcGxldFwiLCBcImNvZGViYXNlIGFyY2hpdmUgY29kZSBvYmplY3QgYWx0IG5hbWUgd2lkdGggaGVpZ2h0IGFsaWduIGhzcGFjZSB2c3BhY2VcIik7XG5cdFx0XHRhZGRBdHRycyhcImltZ1wiLCBcIm5hbWUgbG9uZ2Rlc2MgYWxpZ24gYm9yZGVyIGhzcGFjZSB2c3BhY2VcIik7XG5cdFx0XHRhZGRBdHRycyhcImlmcmFtZVwiLCBcImxvbmdkZXNjIGZyYW1lYm9yZGVyIG1hcmdpbndpZHRoIG1hcmdpbmhlaWdodCBzY3JvbGxpbmcgYWxpZ25cIik7XG5cdFx0XHRhZGRBdHRycyhcImZvbnQgYmFzZWZvbnRcIiwgXCJzaXplIGNvbG9yIGZhY2VcIik7XG5cdFx0XHRhZGRBdHRycyhcImlucHV0XCIsIFwidXNlbWFwIGFsaWduXCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJzZWxlY3RcIiwgXCJvbmNoYW5nZVwiKTtcblx0XHRcdGFkZEF0dHJzKFwidGV4dGFyZWFcIik7XG5cdFx0XHRhZGRBdHRycyhcImgxIGgyIGgzIGg0IGg1IGg2IGRpdiBwIGxlZ2VuZCBjYXB0aW9uXCIsIFwiYWxpZ25cIik7XG5cdFx0XHRhZGRBdHRycyhcInVsXCIsIFwidHlwZSBjb21wYWN0XCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJsaVwiLCBcInR5cGVcIik7XG5cdFx0XHRhZGRBdHRycyhcIm9sIGRsIG1lbnUgZGlyXCIsIFwiY29tcGFjdFwiKTtcblx0XHRcdGFkZEF0dHJzKFwicHJlXCIsIFwid2lkdGggeG1sOnNwYWNlXCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJoclwiLCBcImFsaWduIG5vc2hhZGUgc2l6ZSB3aWR0aFwiKTtcblx0XHRcdGFkZEF0dHJzKFwiaXNpbmRleFwiLCBcInByb21wdFwiKTtcblx0XHRcdGFkZEF0dHJzKFwidGFibGVcIiwgXCJzdW1tYXJ5IHdpZHRoIGZyYW1lIHJ1bGVzIGNlbGxzcGFjaW5nIGNlbGxwYWRkaW5nIGFsaWduIGJnY29sb3JcIik7XG5cdFx0XHRhZGRBdHRycyhcImNvbFwiLCBcIndpZHRoIGFsaWduIGNoYXIgY2hhcm9mZiB2YWxpZ25cIik7XG5cdFx0XHRhZGRBdHRycyhcImNvbGdyb3VwXCIsIFwid2lkdGggYWxpZ24gY2hhciBjaGFyb2ZmIHZhbGlnblwiKTtcblx0XHRcdGFkZEF0dHJzKFwidGhlYWRcIiwgXCJhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduXCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJ0clwiLCBcImFsaWduIGNoYXIgY2hhcm9mZiB2YWxpZ24gYmdjb2xvclwiKTtcblx0XHRcdGFkZEF0dHJzKFwidGhcIiwgXCJheGlzIGFsaWduIGNoYXIgY2hhcm9mZiB2YWxpZ24gbm93cmFwIGJnY29sb3Igd2lkdGggaGVpZ2h0XCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJmb3JtXCIsIFwiYWNjZXB0XCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJ0ZFwiLCBcImFiYnIgYXhpcyBzY29wZSBhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduIG5vd3JhcCBiZ2NvbG9yIHdpZHRoIGhlaWdodFwiKTtcblx0XHRcdGFkZEF0dHJzKFwidGZvb3RcIiwgXCJhbGlnbiBjaGFyIGNoYXJvZmYgdmFsaWduXCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJ0Ym9keVwiLCBcImFsaWduIGNoYXIgY2hhcm9mZiB2YWxpZ25cIik7XG5cdFx0XHRhZGRBdHRycyhcImFyZWFcIiwgXCJub2hyZWZcIik7XG5cdFx0XHRhZGRBdHRycyhcImJvZHlcIiwgXCJiYWNrZ3JvdW5kIGJnY29sb3IgdGV4dCBsaW5rIHZsaW5rIGFsaW5rXCIpO1xuXHRcdH1cblxuXHRcdC8vIEV4dGVuZCB3aXRoIEhUTUw1IGF0dHJpYnV0ZXMgdW5sZXNzIGl0J3MgaHRtbDRcblx0XHRpZiAodHlwZSAhPSBcImh0bWw0XCIpIHtcblx0XHRcdGFkZEF0dHJzKFwiaW5wdXQgYnV0dG9uIHNlbGVjdCB0ZXh0YXJlYVwiLCBcImF1dG9mb2N1c1wiKTtcblx0XHRcdGFkZEF0dHJzKFwiaW5wdXQgdGV4dGFyZWFcIiwgXCJwbGFjZWhvbGRlclwiKTtcblx0XHRcdGFkZEF0dHJzKFwiYVwiLCBcImRvd25sb2FkXCIpO1xuXHRcdFx0YWRkQXR0cnMoXCJsaW5rIHNjcmlwdCBpbWdcIiwgXCJjcm9zc29yaWdpblwiKTtcblx0XHRcdGFkZEF0dHJzKFwiaWZyYW1lXCIsIFwic2FuZGJveCBzZWFtbGVzcyBhbGxvd2Z1bGxzY3JlZW5cIik7IC8vIEV4Y2x1ZGVkOiBzcmNkb2Ncblx0XHR9XG5cblx0XHQvLyBTcGVjaWFsOiBpZnJhbWUsIHJ1YnksIHZpZGVvLCBhdWRpbywgbGFiZWxcblxuXHRcdC8vIERlbGV0ZSBjaGlsZHJlbiBvZiB0aGUgc2FtZSBuYW1lIGZyb20gaXQncyBwYXJlbnRcblx0XHQvLyBGb3IgZXhhbXBsZTogZm9ybSBjYW4ndCBoYXZlIGEgY2hpbGQgb2YgdGhlIG5hbWUgZm9ybVxuXHRcdGVhY2goc3BsaXQoJ2EgZm9ybSBtZXRlciBwcm9ncmVzcyBkZm4nKSwgZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0aWYgKHNjaGVtYVtuYW1lXSkge1xuXHRcdFx0XHRkZWxldGUgc2NoZW1hW25hbWVdLmNoaWxkcmVuW25hbWVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRGVsZXRlIGhlYWRlciwgZm9vdGVyLCBzZWN0aW9uaW5nIGFuZCBoZWFkaW5nIGNvbnRlbnQgZGVzY2VuZGFudHNcblx0XHQvKmVhY2goJ2R0IHRoIGFkZHJlc3MnLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0IGRlbGV0ZSBzY2hlbWFbbmFtZV0uY2hpbGRyZW5bbmFtZV07XG5cdFx0IH0pOyovXG5cblx0XHQvLyBDYXB0aW9uIGNhbid0IGhhdmUgdGFibGVzXG5cdFx0ZGVsZXRlIHNjaGVtYS5jYXB0aW9uLmNoaWxkcmVuLnRhYmxlO1xuXG5cdFx0Ly8gRGVsZXRlIHNjcmlwdHMgYnkgZGVmYXVsdCBkdWUgdG8gcG9zc2libGUgWFNTXG5cdFx0ZGVsZXRlIHNjaGVtYS5zY3JpcHQ7XG5cblx0XHQvLyBUT0RPOiBMSTpzIGNhbiBvbmx5IGhhdmUgdmFsdWUgaWYgcGFyZW50IGlzIE9MXG5cblx0XHQvLyBUT0RPOiBIYW5kbGUgdHJhbnNwYXJlbnQgZWxlbWVudHNcblx0XHQvLyBhIGlucyBkZWwgY2FudmFzIG1hcFxuXG5cdFx0bWFwQ2FjaGVbdHlwZV0gPSBzY2hlbWE7XG5cblx0XHRyZXR1cm4gc2NoZW1hO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29tcGlsZUVsZW1lbnRNYXAodmFsdWUsIG1vZGUpIHtcblx0XHR2YXIgc3R5bGVzO1xuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzdHlsZXMgPSB7fTtcblxuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHR2YWx1ZSA9IHtcblx0XHRcdFx0XHQnKic6IHZhbHVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgc3R5bGVzIGludG8gYSBydWxlIGxpc3Rcblx0XHRcdGVhY2godmFsdWUsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcblx0XHRcdFx0c3R5bGVzW2tleV0gPSBzdHlsZXNba2V5LnRvVXBwZXJDYXNlKCldID0gbW9kZSA9PSAnbWFwJyA/IG1ha2VNYXAodmFsdWUsIC9bLCBdLykgOiBleHBsb2RlKHZhbHVlLCAvWywgXS8pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIGEgbmV3IFNjaGVtYSBpbnN0YW5jZS5cblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBtZXRob2QgU2NoZW1hXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIHNldHRpbmdzIG9iamVjdC5cblx0ICovXG5cdHJldHVybiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdHZhciBzZWxmID0gdGhpcywgZWxlbWVudHMgPSB7fSwgY2hpbGRyZW4gPSB7fSwgcGF0dGVybkVsZW1lbnRzID0gW10sIHZhbGlkU3R5bGVzLCBpbnZhbGlkU3R5bGVzLCBzY2hlbWFJdGVtcztcblx0XHR2YXIgd2hpdGVTcGFjZUVsZW1lbnRzTWFwLCBzZWxmQ2xvc2luZ0VsZW1lbnRzTWFwLCBzaG9ydEVuZGVkRWxlbWVudHNNYXAsIGJvb2xBdHRyTWFwLCB2YWxpZENsYXNzZXM7XG5cdFx0dmFyIGJsb2NrRWxlbWVudHNNYXAsIG5vbkVtcHR5RWxlbWVudHNNYXAsIG1vdmVDYXJldEJlZm9yZU9uRW50ZXJFbGVtZW50c01hcCwgdGV4dEJsb2NrRWxlbWVudHNNYXAsIHRleHRJbmxpbmVFbGVtZW50c01hcDtcblx0XHR2YXIgY3VzdG9tRWxlbWVudHNNYXAgPSB7fSwgc3BlY2lhbEVsZW1lbnRzID0ge307XG5cblx0XHQvLyBDcmVhdGVzIGFuIGxvb2t1cCB0YWJsZSBtYXAgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIG9wdGlvbiBvciB0aGUgZGVmYXVsdCB2YWx1ZVxuXHRcdGZ1bmN0aW9uIGNyZWF0ZUxvb2t1cFRhYmxlKG9wdGlvbiwgZGVmYXVsdF92YWx1ZSwgZXh0ZW5kV2l0aCkge1xuXHRcdFx0dmFyIHZhbHVlID0gc2V0dGluZ3Nbb3B0aW9uXTtcblxuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHQvLyBHZXQgY2FjaGVkIGRlZmF1bHQgbWFwIG9yIG1ha2UgaXQgaWYgbmVlZGVkXG5cdFx0XHRcdHZhbHVlID0gbWFwQ2FjaGVbb3B0aW9uXTtcblxuXHRcdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBtYWtlTWFwKGRlZmF1bHRfdmFsdWUsICcgJywgbWFrZU1hcChkZWZhdWx0X3ZhbHVlLnRvVXBwZXJDYXNlKCksICcgJykpO1xuXHRcdFx0XHRcdHZhbHVlID0gZXh0ZW5kKHZhbHVlLCBleHRlbmRXaXRoKTtcblxuXHRcdFx0XHRcdG1hcENhY2hlW29wdGlvbl0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIGN1c3RvbSBtYXBcblx0XHRcdFx0dmFsdWUgPSBtYWtlTWFwKHZhbHVlLCAvWywgXS8sIG1ha2VNYXAodmFsdWUudG9VcHBlckNhc2UoKSwgL1ssIF0vKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuXHRcdHNjaGVtYUl0ZW1zID0gY29tcGlsZVNjaGVtYShzZXR0aW5ncy5zY2hlbWEpO1xuXG5cdFx0Ly8gQWxsb3cgYWxsIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGlmIHZlcmlmeV9odG1sIGlzIHNldCB0byBmYWxzZVxuXHRcdGlmIChzZXR0aW5ncy52ZXJpZnlfaHRtbCA9PT0gZmFsc2UpIHtcblx0XHRcdHNldHRpbmdzLnZhbGlkX2VsZW1lbnRzID0gJypbKl0nO1xuXHRcdH1cblxuXHRcdHZhbGlkU3R5bGVzID0gY29tcGlsZUVsZW1lbnRNYXAoc2V0dGluZ3MudmFsaWRfc3R5bGVzKTtcblx0XHRpbnZhbGlkU3R5bGVzID0gY29tcGlsZUVsZW1lbnRNYXAoc2V0dGluZ3MuaW52YWxpZF9zdHlsZXMsICdtYXAnKTtcblx0XHR2YWxpZENsYXNzZXMgPSBjb21waWxlRWxlbWVudE1hcChzZXR0aW5ncy52YWxpZF9jbGFzc2VzLCAnbWFwJyk7XG5cblx0XHQvLyBTZXR1cCBtYXAgb2JqZWN0c1xuXHRcdHdoaXRlU3BhY2VFbGVtZW50c01hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKFxuXHRcdFx0J3doaXRlc3BhY2VfZWxlbWVudHMnLFxuXHRcdFx0J3ByZSBzY3JpcHQgbm9zY3JpcHQgc3R5bGUgdGV4dGFyZWEgdmlkZW8gYXVkaW8gaWZyYW1lIG9iamVjdCBjb2RlJ1xuXHRcdCk7XG5cdFx0c2VsZkNsb3NpbmdFbGVtZW50c01hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKCdzZWxmX2Nsb3NpbmdfZWxlbWVudHMnLCAnY29sZ3JvdXAgZGQgZHQgbGkgb3B0aW9uIHAgdGQgdGZvb3QgdGggdGhlYWQgdHInKTtcblx0XHRzaG9ydEVuZGVkRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnc2hvcnRfZW5kZWRfZWxlbWVudHMnLCAnYXJlYSBiYXNlIGJhc2Vmb250IGJyIGNvbCBmcmFtZSBociBpbWcgaW5wdXQgaXNpbmRleCBsaW5rICcgK1xuXHRcdCdtZXRhIHBhcmFtIGVtYmVkIHNvdXJjZSB3YnIgdHJhY2snKTtcblx0XHRib29sQXR0ck1hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKCdib29sZWFuX2F0dHJpYnV0ZXMnLCAnY2hlY2tlZCBjb21wYWN0IGRlY2xhcmUgZGVmZXIgZGlzYWJsZWQgaXNtYXAgbXVsdGlwbGUgbm9ocmVmIG5vcmVzaXplICcgK1xuXHRcdCdub3NoYWRlIG5vd3JhcCByZWFkb25seSBzZWxlY3RlZCBhdXRvcGxheSBsb29wIGNvbnRyb2xzJyk7XG5cdFx0bm9uRW1wdHlFbGVtZW50c01hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKCdub25fZW1wdHlfZWxlbWVudHMnLCAndGQgdGggaWZyYW1lIHZpZGVvIGF1ZGlvIG9iamVjdCAnICtcblx0XHQnc2NyaXB0IHByZSBjb2RlJywgc2hvcnRFbmRlZEVsZW1lbnRzTWFwKTtcblx0XHRtb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnbW92ZV9jYXJldF9iZWZvcmVfb25fZW50ZXJfZWxlbWVudHMnLCAndGFibGUnLCBub25FbXB0eUVsZW1lbnRzTWFwKTtcblx0XHR0ZXh0QmxvY2tFbGVtZW50c01hcCA9IGNyZWF0ZUxvb2t1cFRhYmxlKCd0ZXh0X2Jsb2NrX2VsZW1lbnRzJywgJ2gxIGgyIGgzIGg0IGg1IGg2IHAgZGl2IGFkZHJlc3MgcHJlIGZvcm0gJyArXG5cdFx0J2Jsb2NrcXVvdGUgY2VudGVyIGRpciBmaWVsZHNldCBoZWFkZXIgZm9vdGVyIGFydGljbGUgc2VjdGlvbiBoZ3JvdXAgYXNpZGUgbmF2IGZpZ3VyZScpO1xuXHRcdGJsb2NrRWxlbWVudHNNYXAgPSBjcmVhdGVMb29rdXBUYWJsZSgnYmxvY2tfZWxlbWVudHMnLCAnaHIgdGFibGUgdGJvZHkgdGhlYWQgdGZvb3QgJyArXG5cdFx0J3RoIHRyIHRkIGxpIG9sIHVsIGNhcHRpb24gZGwgZHQgZGQgbm9zY3JpcHQgbWVudSBpc2luZGV4IG9wdGlvbiAnICtcblx0XHQnZGF0YWxpc3Qgc2VsZWN0IG9wdGdyb3VwIGZpZ2NhcHRpb24nLCB0ZXh0QmxvY2tFbGVtZW50c01hcCk7XG5cdFx0dGV4dElubGluZUVsZW1lbnRzTWFwID0gY3JlYXRlTG9va3VwVGFibGUoJ3RleHRfaW5saW5lX2VsZW1lbnRzJywgJ3NwYW4gc3Ryb25nIGIgZW0gaSBmb250IHN0cmlrZSB1IHZhciBjaXRlICcgK1xuXHRcdCdkZm4gY29kZSBtYXJrIHEgc3VwIHN1YiBzYW1wJyk7XG5cblx0XHRlYWNoKChzZXR0aW5ncy5zcGVjaWFsIHx8ICdzY3JpcHQgbm9zY3JpcHQgc3R5bGUgdGV4dGFyZWEnKS5zcGxpdCgnICcpLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRzcGVjaWFsRWxlbWVudHNbbmFtZV0gPSBuZXcgUmVnRXhwKCc8XFwvJyArIG5hbWUgKyAnW14+XSo+JywgJ2dpJyk7XG5cdFx0fSk7XG5cblx0XHQvLyBDb252ZXJ0cyBhIHdpbGRjYXJkIGV4cHJlc3Npb24gc3RyaW5nIHRvIGEgcmVnZXhwIGZvciBleGFtcGxlICphIHdpbGwgYmVjb21lIC8uKmEvLlxuXHRcdGZ1bmN0aW9uIHBhdHRlcm5Ub1JlZ0V4cChzdHIpIHtcblx0XHRcdHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHN0ci5yZXBsYWNlKC8oWz8rKl0pL2csICcuJDEnKSArICckJyk7XG5cdFx0fVxuXG5cdFx0Ly8gUGFyc2VzIHRoZSBzcGVjaWZpZWQgdmFsaWRfZWxlbWVudHMgc3RyaW5nIGFuZCBhZGRzIHRvIHRoZSBjdXJyZW50IHJ1bGVzXG5cdFx0Ly8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBoYXJkIHRvIHJlYWQgc2luY2UgaXQncyBoZWF2aWx5IG9wdGltaXplZCBmb3Igc3BlZWRcblx0XHRmdW5jdGlvbiBhZGRWYWxpZEVsZW1lbnRzKHZhbGlkRWxlbWVudHMpIHtcblx0XHRcdHZhciBlaSwgZWwsIGFpLCBhbCwgbWF0Y2hlcywgZWxlbWVudCwgYXR0ciwgYXR0ckRhdGEsIGVsZW1lbnROYW1lLCBhdHRyTmFtZSwgYXR0clR5cGUsIGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNPcmRlcixcblx0XHRcdFx0cHJlZml4LCBvdXRwdXROYW1lLCBnbG9iYWxBdHRyaWJ1dGVzLCBnbG9iYWxBdHRyaWJ1dGVzT3JkZXIsIGtleSwgdmFsdWUsXG5cdFx0XHRcdGVsZW1lbnRSdWxlUmVnRXhwID0gL14oWyMrXFwtXSk/KFteXFxbIVxcL10rKSg/OlxcLyhbXlxcWyFdKykpPyg/OighPylcXFsoW15cXF1dKylcXF0pPyQvLFxuXHRcdFx0XHRhdHRyUnVsZVJlZ0V4cCA9IC9eKFshXFwtXSk/KFxcdys6Olxcdyt8W149OjxdKyk/KD86KFs9OjxdKSguKikpPyQvLFxuXHRcdFx0XHRoYXNQYXR0ZXJuc1JlZ0V4cCA9IC9bKj8rXS87XG5cblx0XHRcdGlmICh2YWxpZEVsZW1lbnRzKSB7XG5cdFx0XHRcdC8vIFNwbGl0IHZhbGlkIGVsZW1lbnRzIGludG8gYW4gYXJyYXkgd2l0aCBydWxlc1xuXHRcdFx0XHR2YWxpZEVsZW1lbnRzID0gc3BsaXQodmFsaWRFbGVtZW50cywgJywnKTtcblxuXHRcdFx0XHRpZiAoZWxlbWVudHNbJ0AnXSkge1xuXHRcdFx0XHRcdGdsb2JhbEF0dHJpYnV0ZXMgPSBlbGVtZW50c1snQCddLmF0dHJpYnV0ZXM7XG5cdFx0XHRcdFx0Z2xvYmFsQXR0cmlidXRlc09yZGVyID0gZWxlbWVudHNbJ0AnXS5hdHRyaWJ1dGVzT3JkZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIGFsbCBydWxlc1xuXHRcdFx0XHRmb3IgKGVpID0gMCwgZWwgPSB2YWxpZEVsZW1lbnRzLmxlbmd0aDsgZWkgPCBlbDsgZWkrKykge1xuXHRcdFx0XHRcdC8vIFBhcnNlIGVsZW1lbnQgcnVsZVxuXHRcdFx0XHRcdG1hdGNoZXMgPSBlbGVtZW50UnVsZVJlZ0V4cC5leGVjKHZhbGlkRWxlbWVudHNbZWldKTtcblx0XHRcdFx0XHRpZiAobWF0Y2hlcykge1xuXHRcdFx0XHRcdFx0Ly8gU2V0dXAgbG9jYWwgbmFtZXMgZm9yIG1hdGNoZXNcblx0XHRcdFx0XHRcdHByZWZpeCA9IG1hdGNoZXNbMV07XG5cdFx0XHRcdFx0XHRlbGVtZW50TmFtZSA9IG1hdGNoZXNbMl07XG5cdFx0XHRcdFx0XHRvdXRwdXROYW1lID0gbWF0Y2hlc1szXTtcblx0XHRcdFx0XHRcdGF0dHJEYXRhID0gbWF0Y2hlc1s1XTtcblxuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIG5ldyBhdHRyaWJ1dGVzIGFuZCBhdHRyaWJ1dGVzT3JkZXJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXMgPSB7fTtcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXNPcmRlciA9IFtdO1xuXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgdGhlIG5ldyBlbGVtZW50XG5cdFx0XHRcdFx0XHRlbGVtZW50ID0ge1xuXHRcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuXHRcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzT3JkZXI6IGF0dHJpYnV0ZXNPcmRlclxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Ly8gUGFkZCBlbXB0eSBlbGVtZW50cyBwcmVmaXhcblx0XHRcdFx0XHRcdGlmIChwcmVmaXggPT09ICcjJykge1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnBhZGRFbXB0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbXB0eSBlbGVtZW50cyBwcmVmaXhcblx0XHRcdFx0XHRcdGlmIChwcmVmaXggPT09ICctJykge1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUVtcHR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG1hdGNoZXNbNF0gPT09ICchJykge1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUVtcHR5QXR0cnMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBDb3B5IGF0dHJpYnV0ZXMgZnJvbSBnbG9iYWwgcnVsZSBpbnRvIGN1cnJlbnQgcnVsZVxuXHRcdFx0XHRcdFx0aWYgKGdsb2JhbEF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChrZXkgaW4gZ2xvYmFsQXR0cmlidXRlcykge1xuXHRcdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXNba2V5XSA9IGdsb2JhbEF0dHJpYnV0ZXNba2V5XTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXNPcmRlci5wdXNoLmFwcGx5KGF0dHJpYnV0ZXNPcmRlciwgZ2xvYmFsQXR0cmlidXRlc09yZGVyKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gQXR0cmlidXRlcyBkZWZpbmVkXG5cdFx0XHRcdFx0XHRpZiAoYXR0ckRhdGEpIHtcblx0XHRcdFx0XHRcdFx0YXR0ckRhdGEgPSBzcGxpdChhdHRyRGF0YSwgJ3wnKTtcblx0XHRcdFx0XHRcdFx0Zm9yIChhaSA9IDAsIGFsID0gYXR0ckRhdGEubGVuZ3RoOyBhaSA8IGFsOyBhaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0bWF0Y2hlcyA9IGF0dHJSdWxlUmVnRXhwLmV4ZWMoYXR0ckRhdGFbYWldKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobWF0Y2hlcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0ciA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0clR5cGUgPSBtYXRjaGVzWzFdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0ck5hbWUgPSBtYXRjaGVzWzJdLnJlcGxhY2UoLzo6L2csICc6Jyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVmaXggPSBtYXRjaGVzWzNdO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBtYXRjaGVzWzRdO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXF1aXJlZFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHJUeXBlID09PSAnIScpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlbWVudC5hdHRyaWJ1dGVzUmVxdWlyZWQgPSBlbGVtZW50LmF0dHJpYnV0ZXNSZXF1aXJlZCB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlbWVudC5hdHRyaWJ1dGVzUmVxdWlyZWQucHVzaChhdHRyTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHIucmVxdWlyZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBEZW5pZWQgZnJvbSBnbG9iYWxcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhdHRyVHlwZSA9PT0gJy0nKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBhdHRyaWJ1dGVzW2F0dHJOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXR0cmlidXRlc09yZGVyLnNwbGljZShpbkFycmF5KGF0dHJpYnV0ZXNPcmRlciwgYXR0ck5hbWUpLCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChwcmVmaXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJlZml4ID09PSAnPScpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LmF0dHJpYnV0ZXNEZWZhdWx0ID0gZWxlbWVudC5hdHRyaWJ1dGVzRGVmYXVsdCB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LmF0dHJpYnV0ZXNEZWZhdWx0LnB1c2goe25hbWU6IGF0dHJOYW1lLCB2YWx1ZTogdmFsdWV9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yY2VkIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChwcmVmaXggPT09ICc6Jykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQuYXR0cmlidXRlc0ZvcmNlZCA9IGVsZW1lbnQuYXR0cmlidXRlc0ZvcmNlZCB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LmF0dHJpYnV0ZXNGb3JjZWQucHVzaCh7bmFtZTogYXR0ck5hbWUsIHZhbHVlOiB2YWx1ZX0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHIuZm9yY2VkVmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFJlcXVpcmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJlZml4ID09PSAnPCcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyLnZhbGlkVmFsdWVzID0gbWFrZU1hcCh2YWx1ZSwgJz8nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBDaGVjayBmb3IgYXR0cmlidXRlIHBhdHRlcm5zXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoaGFzUGF0dGVybnNSZWdFeHAudGVzdChhdHRyTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxlbWVudC5hdHRyaWJ1dGVQYXR0ZXJucyA9IGVsZW1lbnQuYXR0cmlidXRlUGF0dGVybnMgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHIucGF0dGVybiA9IHBhdHRlcm5Ub1JlZ0V4cChhdHRyTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQuYXR0cmlidXRlUGF0dGVybnMucHVzaChhdHRyKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEFkZCBhdHRyaWJ1dGUgdG8gb3JkZXIgbGlzdCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFhdHRyaWJ1dGVzW2F0dHJOYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXNPcmRlci5wdXNoKGF0dHJOYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gYXR0cjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gR2xvYmFsIHJ1bGUsIHN0b3JlIGF3YXkgdGhlc2UgZm9yIGxhdGVyIHVzYWdlXG5cdFx0XHRcdFx0XHRpZiAoIWdsb2JhbEF0dHJpYnV0ZXMgJiYgZWxlbWVudE5hbWUgPT0gJ0AnKSB7XG5cdFx0XHRcdFx0XHRcdGdsb2JhbEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdFx0XHRnbG9iYWxBdHRyaWJ1dGVzT3JkZXIgPSBhdHRyaWJ1dGVzT3JkZXI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBzdWJzdGl0dXRlIGVsZW1lbnRzIHN1Y2ggYXMgYi9zdHJvbmdcblx0XHRcdFx0XHRcdGlmIChvdXRwdXROYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQub3V0cHV0TmFtZSA9IGVsZW1lbnROYW1lO1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50c1tvdXRwdXROYW1lXSA9IGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEFkZCBwYXR0ZXJuIG9yIGV4YWN0IGVsZW1lbnRcblx0XHRcdFx0XHRcdGlmIChoYXNQYXR0ZXJuc1JlZ0V4cC50ZXN0KGVsZW1lbnROYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnBhdHRlcm4gPSBwYXR0ZXJuVG9SZWdFeHAoZWxlbWVudE5hbWUpO1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuRWxlbWVudHMucHVzaChlbGVtZW50KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRzW2VsZW1lbnROYW1lXSA9IGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2V0VmFsaWRFbGVtZW50cyh2YWxpZEVsZW1lbnRzKSB7XG5cdFx0XHRlbGVtZW50cyA9IHt9O1xuXHRcdFx0cGF0dGVybkVsZW1lbnRzID0gW107XG5cblx0XHRcdGFkZFZhbGlkRWxlbWVudHModmFsaWRFbGVtZW50cyk7XG5cblx0XHRcdGVhY2goc2NoZW1hSXRlbXMsIGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUpIHtcblx0XHRcdFx0Y2hpbGRyZW5bbmFtZV0gPSBlbGVtZW50LmNoaWxkcmVuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkcyBjdXN0b20gbm9uIEhUTUwgZWxlbWVudHMgdG8gdGhlIHNjaGVtYVxuXHRcdGZ1bmN0aW9uIGFkZEN1c3RvbUVsZW1lbnRzKGN1c3RvbUVsZW1lbnRzKSB7XG5cdFx0XHR2YXIgY3VzdG9tRWxlbWVudFJlZ0V4cCA9IC9eKH4pPyguKykkLztcblxuXHRcdFx0aWYgKGN1c3RvbUVsZW1lbnRzKSB7XG5cdFx0XHRcdC8vIEZsdXNoIGNhY2hlZCBpdGVtcyBzaW5jZSB3ZSBhcmUgYWx0ZXJpbmcgdGhlIGRlZmF1bHQgbWFwc1xuXHRcdFx0XHRtYXBDYWNoZS50ZXh0X2Jsb2NrX2VsZW1lbnRzID0gbWFwQ2FjaGUuYmxvY2tfZWxlbWVudHMgPSBudWxsO1xuXG5cdFx0XHRcdGVhY2goc3BsaXQoY3VzdG9tRWxlbWVudHMsICcsJyksIGZ1bmN0aW9uKHJ1bGUpIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2hlcyA9IGN1c3RvbUVsZW1lbnRSZWdFeHAuZXhlYyhydWxlKSxcblx0XHRcdFx0XHRcdGlubGluZSA9IG1hdGNoZXNbMV0gPT09ICd+Jyxcblx0XHRcdFx0XHRcdGNsb25lTmFtZSA9IGlubGluZSA/ICdzcGFuJyA6ICdkaXYnLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG1hdGNoZXNbMl07XG5cblx0XHRcdFx0XHRjaGlsZHJlbltuYW1lXSA9IGNoaWxkcmVuW2Nsb25lTmFtZV07XG5cdFx0XHRcdFx0Y3VzdG9tRWxlbWVudHNNYXBbbmFtZV0gPSBjbG9uZU5hbWU7XG5cblx0XHRcdFx0XHQvLyBJZiBpdCdzIG5vdCBtYXJrZWQgYXMgaW5saW5lIHRoZW4gYWRkIGl0IHRvIHZhbGlkIGJsb2NrIGVsZW1lbnRzXG5cdFx0XHRcdFx0aWYgKCFpbmxpbmUpIHtcblx0XHRcdFx0XHRcdGJsb2NrRWxlbWVudHNNYXBbbmFtZS50b1VwcGVyQ2FzZSgpXSA9IHt9O1xuXHRcdFx0XHRcdFx0YmxvY2tFbGVtZW50c01hcFtuYW1lXSA9IHt9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEFkZCBlbGVtZW50cyBjbG9uZSBpZiBuZWVkZWRcblx0XHRcdFx0XHRpZiAoIWVsZW1lbnRzW25hbWVdKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tUnVsZSA9IGVsZW1lbnRzW2Nsb25lTmFtZV07XG5cblx0XHRcdFx0XHRcdGN1c3RvbVJ1bGUgPSBleHRlbmQoe30sIGN1c3RvbVJ1bGUpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGN1c3RvbVJ1bGUucmVtb3ZlRW1wdHlBdHRycztcblx0XHRcdFx0XHRcdGRlbGV0ZSBjdXN0b21SdWxlLnJlbW92ZUVtcHR5O1xuXG5cdFx0XHRcdFx0XHRlbGVtZW50c1tuYW1lXSA9IGN1c3RvbVJ1bGU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQWRkIGN1c3RvbSBlbGVtZW50cyBhdCBzcGFuL2RpdiBwb3NpdGlvbnNcblx0XHRcdFx0XHRlYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihlbGVtZW50LCBlbG1OYW1lKSB7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudFtjbG9uZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2VsbU5hbWVdID0gZWxlbWVudCA9IGV4dGVuZCh7fSwgY2hpbGRyZW5bZWxtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50W25hbWVdID0gZWxlbWVudFtjbG9uZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGRzIHZhbGlkIGNoaWxkcmVuIHRvIHRoZSBzY2hlbWEgb2JqZWN0XG5cdFx0ZnVuY3Rpb24gYWRkVmFsaWRDaGlsZHJlbih2YWxpZENoaWxkcmVuKSB7XG5cdFx0XHR2YXIgY2hpbGRSdWxlUmVnRXhwID0gL14oWytcXC1dPykoXFx3KylcXFsoW15cXF1dKylcXF0kLztcblxuXHRcdFx0Ly8gSW52YWxpZGF0ZSB0aGUgc2NoZW1hIGNhY2hlIGlmIHRoZSBzY2hlbWEgaXMgbXV0YXRlZFxuXHRcdFx0bWFwQ2FjaGVbc2V0dGluZ3Muc2NoZW1hXSA9IG51bGw7XG5cblx0XHRcdGlmICh2YWxpZENoaWxkcmVuKSB7XG5cdFx0XHRcdGVhY2goc3BsaXQodmFsaWRDaGlsZHJlbiwgJywnKSwgZnVuY3Rpb24ocnVsZSkge1xuXHRcdFx0XHRcdHZhciBtYXRjaGVzID0gY2hpbGRSdWxlUmVnRXhwLmV4ZWMocnVsZSksIHBhcmVudCwgcHJlZml4O1xuXG5cdFx0XHRcdFx0aWYgKG1hdGNoZXMpIHtcblx0XHRcdFx0XHRcdHByZWZpeCA9IG1hdGNoZXNbMV07XG5cblx0XHRcdFx0XHRcdC8vIEFkZC9yZW1vdmUgaXRlbXMgZnJvbSBkZWZhdWx0XG5cdFx0XHRcdFx0XHRpZiAocHJlZml4KSB7XG5cdFx0XHRcdFx0XHRcdHBhcmVudCA9IGNoaWxkcmVuW21hdGNoZXNbMl1dO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cGFyZW50ID0gY2hpbGRyZW5bbWF0Y2hlc1syXV0gPSB7JyNjb21tZW50Jzoge319O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBjaGlsZHJlblttYXRjaGVzWzJdXTtcblxuXHRcdFx0XHRcdFx0ZWFjaChzcGxpdChtYXRjaGVzWzNdLCAnfCcpLCBmdW5jdGlvbihjaGlsZCkge1xuXHRcdFx0XHRcdFx0XHRpZiAocHJlZml4ID09PSAnLScpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgcGFyZW50W2NoaWxkXTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRwYXJlbnRbY2hpbGRdID0ge307XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0RWxlbWVudFJ1bGUobmFtZSkge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBlbGVtZW50c1tuYW1lXSwgaTtcblxuXHRcdFx0Ly8gRXhhY3QgbWF0Y2ggZm91bmRcblx0XHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBObyBleGFjdCBtYXRjaCB0aGVuIHRyeSB0aGUgcGF0dGVybnNcblx0XHRcdGkgPSBwYXR0ZXJuRWxlbWVudHMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRlbGVtZW50ID0gcGF0dGVybkVsZW1lbnRzW2ldO1xuXG5cdFx0XHRcdGlmIChlbGVtZW50LnBhdHRlcm4udGVzdChuYW1lKSkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFzZXR0aW5ncy52YWxpZF9lbGVtZW50cykge1xuXHRcdFx0Ly8gTm8gdmFsaWQgZWxlbWVudHMgZGVmaW5lZCB0aGVuIGNsb25lIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzY2hlbWEgc3BlY1xuXHRcdFx0ZWFjaChzY2hlbWFJdGVtcywgZnVuY3Rpb24oZWxlbWVudCwgbmFtZSkge1xuXHRcdFx0XHRlbGVtZW50c1tuYW1lXSA9IHtcblx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBlbGVtZW50LmF0dHJpYnV0ZXMsXG5cdFx0XHRcdFx0YXR0cmlidXRlc09yZGVyOiBlbGVtZW50LmF0dHJpYnV0ZXNPcmRlclxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNoaWxkcmVuW25hbWVdID0gZWxlbWVudC5jaGlsZHJlbjtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBTd2l0Y2ggdGhlc2Ugb24gSFRNTDRcblx0XHRcdGlmIChzZXR0aW5ncy5zY2hlbWEgIT0gXCJodG1sNVwiKSB7XG5cdFx0XHRcdGVhY2goc3BsaXQoJ3N0cm9uZy9iIGVtL2knKSwgZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRcdGl0ZW0gPSBzcGxpdChpdGVtLCAnLycpO1xuXHRcdFx0XHRcdGVsZW1lbnRzW2l0ZW1bMV1dLm91dHB1dE5hbWUgPSBpdGVtWzBdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGRlZmF1bHQgYWx0IGF0dHJpYnV0ZSBmb3IgaW1hZ2VzLCByZW1vdmVkIHNpbmNlIGFsdD1cIlwiIGlzIHRyZWF0ZWQgYXMgcHJlc2VudGF0aW9uYWwuXG5cdFx0XHQvLyBlbGVtZW50cy5pbWcuYXR0cmlidXRlc0RlZmF1bHQgPSBbe25hbWU6ICdhbHQnLCB2YWx1ZTogJyd9XTtcblxuXHRcdFx0Ly8gUmVtb3ZlIHRoZXNlIGlmIHRoZXkgYXJlIGVtcHR5IGJ5IGRlZmF1bHRcblx0XHRcdGVhY2goc3BsaXQoJ29sIHVsIHN1YiBzdXAgYmxvY2txdW90ZSBzcGFuIGZvbnQgYSB0YWJsZSB0Ym9keSB0ciBzdHJvbmcgZW0gYiBpJyksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0aWYgKGVsZW1lbnRzW25hbWVdKSB7XG5cdFx0XHRcdFx0ZWxlbWVudHNbbmFtZV0ucmVtb3ZlRW1wdHkgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gUGFkZCB0aGVzZSBieSBkZWZhdWx0XG5cdFx0XHRlYWNoKHNwbGl0KCdwIGgxIGgyIGgzIGg0IGg1IGg2IHRoIHRkIHByZSBkaXYgYWRkcmVzcyBjYXB0aW9uJyksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0ZWxlbWVudHNbbmFtZV0ucGFkZEVtcHR5ID0gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBSZW1vdmUgdGhlc2UgaWYgdGhleSBoYXZlIG5vIGF0dHJpYnV0ZXNcblx0XHRcdGVhY2goc3BsaXQoJ3NwYW4nKSwgZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0XHRlbGVtZW50c1tuYW1lXS5yZW1vdmVFbXB0eUF0dHJzID0gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBSZW1vdmUgdGhlc2UgYnkgZGVmYXVsdFxuXHRcdFx0Ly8gVE9ETzogUmVlbmFibGUgaW4gNC4xXG5cdFx0XHQvKmVhY2goc3BsaXQoJ3NjcmlwdCBzdHlsZScpLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHQgZGVsZXRlIGVsZW1lbnRzW25hbWVdO1xuXHRcdFx0IH0pOyovXG5cdFx0fSBlbHNlIHtcblx0XHRcdHNldFZhbGlkRWxlbWVudHMoc2V0dGluZ3MudmFsaWRfZWxlbWVudHMpO1xuXHRcdH1cblxuXHRcdGFkZEN1c3RvbUVsZW1lbnRzKHNldHRpbmdzLmN1c3RvbV9lbGVtZW50cyk7XG5cdFx0YWRkVmFsaWRDaGlsZHJlbihzZXR0aW5ncy52YWxpZF9jaGlsZHJlbik7XG5cdFx0YWRkVmFsaWRFbGVtZW50cyhzZXR0aW5ncy5leHRlbmRlZF92YWxpZF9lbGVtZW50cyk7XG5cblx0XHQvLyBUb2RvOiBSZW1vdmUgdGhpcyB3aGVuIHdlIGZpeCBsaXN0IGhhbmRsaW5nIHRvIGJlIHZhbGlkXG5cdFx0YWRkVmFsaWRDaGlsZHJlbignK29sW3VsfG9sXSwrdWxbdWx8b2xdJyk7XG5cblxuXHRcdC8vIFNvbWUgZWxlbWVudHMgYXJlIG5vdCB2YWxpZCBieSB0aGVtc2VsdmVzIC0gcmVxdWlyZSBwYXJlbnRzXG5cdFx0ZWFjaCh7XG5cdFx0XHRkZDogJ2RsJyxcblx0XHRcdGR0OiAnZGwnLFxuXHRcdFx0bGk6ICd1bCBvbCcsXG5cdFx0XHR0ZDogJ3RyJyxcblx0XHRcdHRoOiAndHInLFxuXHRcdFx0dHI6ICd0Ym9keSB0aGVhZCB0Zm9vdCcsXG5cdFx0XHR0Ym9keTogJ3RhYmxlJyxcblx0XHRcdHRoZWFkOiAndGFibGUnLFxuXHRcdFx0dGZvb3Q6ICd0YWJsZScsXG5cdFx0XHRsZWdlbmQ6ICdmaWVsZHNldCcsXG5cdFx0XHRhcmVhOiAnbWFwJyxcblx0XHRcdHBhcmFtOiAndmlkZW8gYXVkaW8gb2JqZWN0J1xuXHRcdH0sIGZ1bmN0aW9uKHBhcmVudHMsIGl0ZW0pIHtcblx0XHRcdGlmIChlbGVtZW50c1tpdGVtXSkge1xuXHRcdFx0XHRlbGVtZW50c1tpdGVtXS5wYXJlbnRzUmVxdWlyZWQgPSBzcGxpdChwYXJlbnRzKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXG5cdFx0Ly8gRGVsZXRlIGludmFsaWQgZWxlbWVudHNcblx0XHRpZiAoc2V0dGluZ3MuaW52YWxpZF9lbGVtZW50cykge1xuXHRcdFx0ZWFjaChleHBsb2RlKHNldHRpbmdzLmludmFsaWRfZWxlbWVudHMpLCBmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRcdGlmIChlbGVtZW50c1tpdGVtXSkge1xuXHRcdFx0XHRcdGRlbGV0ZSBlbGVtZW50c1tpdGVtXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIHVzZXIgZGlkbid0IGFsbG93IHNwYW4gb25seSBhbGxvdyBpbnRlcm5hbCBzcGFuc1xuXHRcdGlmICghZ2V0RWxlbWVudFJ1bGUoJ3NwYW4nKSkge1xuXHRcdFx0YWRkVmFsaWRFbGVtZW50cygnc3BhblshZGF0YS1tY2UtdHlwZXwqXScpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIE5hbWUvdmFsdWUgbWFwIG9iamVjdCB3aXRoIHZhbGlkIHBhcmVudHMgYW5kIGNoaWxkcmVuIHRvIHRob3NlIHBhcmVudHMuXG5cdFx0ICpcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGNoaWxkcmVuID0ge1xuXHRcdCAqICAgIGRpdjp7cDp7fSwgaDE6e319XG5cdFx0ICogfTtcblx0XHQgKiBAZmllbGQgY2hpbGRyZW5cblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHRzZWxmLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cblx0XHQvKipcblx0XHQgKiBOYW1lL3ZhbHVlIG1hcCBvYmplY3Qgd2l0aCB2YWxpZCBzdHlsZXMgZm9yIGVhY2ggZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0VmFsaWRTdHlsZXNcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHRzZWxmLmdldFZhbGlkU3R5bGVzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRTdHlsZXM7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIE5hbWUvdmFsdWUgbWFwIG9iamVjdCB3aXRoIHZhbGlkIHN0eWxlcyBmb3IgZWFjaCBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRJbnZhbGlkU3R5bGVzXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0c2VsZi5nZXRJbnZhbGlkU3R5bGVzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gaW52YWxpZFN0eWxlcztcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogTmFtZS92YWx1ZSBtYXAgb2JqZWN0IHdpdGggdmFsaWQgY2xhc3NlcyBmb3IgZWFjaCBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRWYWxpZENsYXNzZXNcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHRzZWxmLmdldFZhbGlkQ2xhc3NlcyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHZhbGlkQ2xhc3Nlcztcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIG1hcCB3aXRoIGJvb2xlYW4gYXR0cmlidXRlcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0Qm9vbEF0dHJzXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBOYW1lL3ZhbHVlIGxvb2t1cCBtYXAgZm9yIGJvb2xlYW4gYXR0cmlidXRlcy5cblx0XHQgKi9cblx0XHRzZWxmLmdldEJvb2xBdHRycyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGJvb2xBdHRyTWFwO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbWFwIHdpdGggYmxvY2sgZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldEJsb2NrRWxlbWVudHNcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IE5hbWUvdmFsdWUgbG9va3VwIG1hcCBmb3IgYmxvY2sgZWxlbWVudHMuXG5cdFx0ICovXG5cdFx0c2VsZi5nZXRCbG9ja0VsZW1lbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gYmxvY2tFbGVtZW50c01hcDtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIG1hcCB3aXRoIHRleHQgYmxvY2sgZWxlbWVudHMuIFN1Y2ggYXM6IHAsaDEtaDYsZGl2LGFkZHJlc3Ncblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0VGV4dEJsb2NrRWxlbWVudHNcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IE5hbWUvdmFsdWUgbG9va3VwIG1hcCBmb3IgYmxvY2sgZWxlbWVudHMuXG5cdFx0ICovXG5cdFx0c2VsZi5nZXRUZXh0QmxvY2tFbGVtZW50cyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRleHRCbG9ja0VsZW1lbnRzTWFwO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbWFwIG9mIGlubGluZSB0ZXh0IGZvcm1hdCBub2RlcyBmb3IgZXhhbXBsZSBzdHJvbmcvc3BhbiBvciBpbnMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFRleHRJbmxpbmVFbGVtZW50c1xuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gTmFtZS92YWx1ZSBsb29rdXAgbWFwIGZvciB0ZXh0IGZvcm1hdCBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRzZWxmLmdldFRleHRJbmxpbmVFbGVtZW50cyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRleHRJbmxpbmVFbGVtZW50c01hcDtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIG1hcCB3aXRoIHNob3J0IGVuZGVkIGVsZW1lbnRzIHN1Y2ggYXMgQlIgb3IgSU1HLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRTaG9ydEVuZGVkRWxlbWVudHNcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IE5hbWUvdmFsdWUgbG9va3VwIG1hcCBmb3Igc2hvcnQgZW5kZWQgZWxlbWVudHMuXG5cdFx0ICovXG5cdFx0c2VsZi5nZXRTaG9ydEVuZGVkRWxlbWVudHMgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBzaG9ydEVuZGVkRWxlbWVudHNNYXA7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSBtYXAgd2l0aCBzZWxmIGNsb3NpbmcgdGFncyBzdWNoIGFzIDxsaT4uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFNlbGZDbG9zaW5nRWxlbWVudHNcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IE5hbWUvdmFsdWUgbG9va3VwIG1hcCBmb3Igc2VsZiBjbG9zaW5nIHRhZ3MgZWxlbWVudHMuXG5cdFx0ICovXG5cdFx0c2VsZi5nZXRTZWxmQ2xvc2luZ0VsZW1lbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gc2VsZkNsb3NpbmdFbGVtZW50c01hcDtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIG1hcCB3aXRoIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY29udGVudHMgcmVnYXJkbGVzcyBpZiBpdCBoYXMgdGV4dFxuXHRcdCAqIGNvbnRlbnQgaW4gdGhlbSBvciBub3Qgc3VjaCBhcyBURCwgVklERU8gb3IgSU1HLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXROb25FbXB0eUVsZW1lbnRzXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBOYW1lL3ZhbHVlIGxvb2t1cCBtYXAgZm9yIG5vbiBlbXB0eSBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRzZWxmLmdldE5vbkVtcHR5RWxlbWVudHMgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBub25FbXB0eUVsZW1lbnRzTWFwO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbWFwIHdpdGggZWxlbWVudHMgdGhhdCB0aGUgY2FyZXQgc2hvdWxkIGJlIG1vdmVkIGluIGZyb250IG9mIGFmdGVyIGVudGVyIGlzXG5cdFx0ICogcHJlc3NlZFxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRNb3ZlQ2FyZXRCZWZvcmVPbkVudGVyRWxlbWVudHNcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IE5hbWUvdmFsdWUgbG9va3VwIG1hcCBmb3IgZWxlbWVudHMgdG8gcGxhY2UgdGhlIGNhcmV0IGluIGZyb250IG9mLlxuXHRcdCAqL1xuXHRcdHNlbGYuZ2V0TW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gbW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbWFwIHdpdGggZWxlbWVudHMgd2hlcmUgd2hpdGUgc3BhY2UgaXMgdG8gYmUgcHJlc2VydmVkIGxpa2UgUFJFIG9yIFNDUklQVC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0V2hpdGVTcGFjZUVsZW1lbnRzXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBOYW1lL3ZhbHVlIGxvb2t1cCBtYXAgZm9yIHdoaXRlIHNwYWNlIGVsZW1lbnRzLlxuXHRcdCAqL1xuXHRcdHNlbGYuZ2V0V2hpdGVTcGFjZUVsZW1lbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gd2hpdGVTcGFjZUVsZW1lbnRzTWFwO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgbWFwIHdpdGggc3BlY2lhbCBlbGVtZW50cy4gVGhlc2UgYXJlIGVsZW1lbnRzIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkXG5cdFx0ICogaW4gYSBzcGVjaWFsIHdheSBzdWNoIGFzIHNjcmlwdCwgc3R5bGUsIHRleHRhcmVhIGV0Yy4gVGhlIG1hcCBvYmplY3QgdmFsdWVzXG5cdFx0ICogYXJlIHJlZ2V4cHMgdXNlZCB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFNwZWNpYWxFbGVtZW50c1xuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gTmFtZS92YWx1ZSBsb29rdXAgbWFwIGZvciBzcGVjaWFsIGVsZW1lbnRzLlxuXHRcdCAqL1xuXHRcdHNlbGYuZ2V0U3BlY2lhbEVsZW1lbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gc3BlY2lhbEVsZW1lbnRzO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IGFuZCBpdCdzIGNoaWxkIGlzIHZhbGlkIG9yIG5vdFxuXHRcdCAqIGFjY29yZGluZyB0byB0aGUgc2NoZW1hLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpc1ZhbGlkQ2hpbGRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBFbGVtZW50IG5hbWUgdG8gY2hlY2sgZm9yLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBjaGlsZCBFbGVtZW50IGNoaWxkIHRvIHZlcmlmeS5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlL2ZhbHNlIGlmIHRoZSBlbGVtZW50IGlzIGEgdmFsaWQgY2hpbGQgb2YgdGhlIHNwZWNpZmllZCBwYXJlbnQuXG5cdFx0ICovXG5cdFx0c2VsZi5pc1ZhbGlkQ2hpbGQgPSBmdW5jdGlvbihuYW1lLCBjaGlsZCkge1xuXHRcdFx0dmFyIHBhcmVudCA9IGNoaWxkcmVuW25hbWVdO1xuXG5cdFx0XHRyZXR1cm4gISEocGFyZW50ICYmIHBhcmVudFtjaGlsZF0pO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG5hbWUgYW5kIG9wdGlvbmFsIGF0dHJpYnV0ZSBpc1xuXHRcdCAqIHZhbGlkIGFjY29yZGluZyB0byB0aGUgc2NoZW1hLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpc1ZhbGlkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiBlbGVtZW50IHRvIGNoZWNrLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBhdHRyIE9wdGlvbmFsIGF0dHJpYnV0ZSBuYW1lIHRvIGNoZWNrIGZvci5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlL2ZhbHNlIGlmIHRoZSBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgaXMgdmFsaWQuXG5cdFx0ICovXG5cdFx0c2VsZi5pc1ZhbGlkID0gZnVuY3Rpb24obmFtZSwgYXR0cikge1xuXHRcdFx0dmFyIGF0dHJQYXR0ZXJucywgaSwgcnVsZSA9IGdldEVsZW1lbnRSdWxlKG5hbWUpO1xuXG5cdFx0XHQvLyBDaGVjayBpZiBpdCdzIGEgdmFsaWQgZWxlbWVudFxuXHRcdFx0aWYgKHJ1bGUpIHtcblx0XHRcdFx0aWYgKGF0dHIpIHtcblx0XHRcdFx0XHQvLyBDaGVjayBpZiBhdHRyaWJ1dGUgbmFtZSBleGlzdHNcblx0XHRcdFx0XHRpZiAocnVsZS5hdHRyaWJ1dGVzW2F0dHJdKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDaGVjayBpZiBhdHRyaWJ1dGUgbWF0Y2hlcyBhIHJlZ2V4cCBwYXR0ZXJuXG5cdFx0XHRcdFx0YXR0clBhdHRlcm5zID0gcnVsZS5hdHRyaWJ1dGVQYXR0ZXJucztcblx0XHRcdFx0XHRpZiAoYXR0clBhdHRlcm5zKSB7XG5cdFx0XHRcdFx0XHRpID0gYXR0clBhdHRlcm5zLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRcdFx0aWYgKGF0dHJQYXR0ZXJuc1tpXS5wYXR0ZXJuLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBObyBtYXRjaFxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IGlzIHZhbGlkIG9yIG5vdFxuXHRcdCAqIGFjY29yZGluZyB0byB0aGUgc2NoZW1hLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRFbGVtZW50UnVsZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIEVsZW1lbnQgbmFtZSB0byBjaGVjayBmb3IuXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50IG9iamVjdCBvciB1bmRlZmluZWQgaWYgdGhlIGVsZW1lbnQgaXNuJ3QgdmFsaWQuXG5cdFx0ICovXG5cdFx0c2VsZi5nZXRFbGVtZW50UnVsZSA9IGdldEVsZW1lbnRSdWxlO1xuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhbiBtYXAgb2JqZWN0IG9mIGFsbCBjdXN0b20gZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldEN1c3RvbUVsZW1lbnRzXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBOYW1lL3ZhbHVlIG1hcCBvYmplY3Qgb2YgYWxsIGN1c3RvbSBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRzZWxmLmdldEN1c3RvbUVsZW1lbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gY3VzdG9tRWxlbWVudHNNYXA7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFBhcnNlcyBhIHZhbGlkIGVsZW1lbnRzIHN0cmluZyBhbmQgYWRkcyBpdCB0byB0aGUgc2NoZW1hLiBUaGUgdmFsaWQgZWxlbWVudHNcblx0XHQgKiBmb3JtYXQgaXMgZm9yIGV4YW1wbGUgXCJlbGVtZW50W2F0dHI9ZGVmYXVsdHxvdGhlcmF0dHJdXCIuXG5cdFx0ICogRXhpc3RpbmcgcnVsZXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmVzIHNwZWNpZmllZCwgc28gdGhpcyBleHRlbmRzIHRoZSBzY2hlbWEuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFZhbGlkRWxlbWVudHNcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdmFsaWRfZWxlbWVudHMgU3RyaW5nIGluIHRoZSB2YWxpZCBlbGVtZW50cyBmb3JtYXQgdG8gYmUgcGFyc2VkLlxuXHRcdCAqL1xuXHRcdHNlbGYuYWRkVmFsaWRFbGVtZW50cyA9IGFkZFZhbGlkRWxlbWVudHM7XG5cblx0XHQvKipcblx0XHQgKiBQYXJzZXMgYSB2YWxpZCBlbGVtZW50cyBzdHJpbmcgYW5kIHNldHMgaXQgdG8gdGhlIHNjaGVtYS4gVGhlIHZhbGlkIGVsZW1lbnRzXG5cdFx0ICogZm9ybWF0IGlzIGZvciBleGFtcGxlIFwiZWxlbWVudFthdHRyPWRlZmF1bHR8b3RoZXJhdHRyXVwiLlxuXHRcdCAqIEV4aXN0aW5nIHJ1bGVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgb25lcyBzcGVjaWZpZWQsIHNvIHRoaXMgZXh0ZW5kcyB0aGUgc2NoZW1hLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRWYWxpZEVsZW1lbnRzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbGlkX2VsZW1lbnRzIFN0cmluZyBpbiB0aGUgdmFsaWQgZWxlbWVudHMgZm9ybWF0IHRvIGJlIHBhcnNlZC5cblx0XHQgKi9cblx0XHRzZWxmLnNldFZhbGlkRWxlbWVudHMgPSBzZXRWYWxpZEVsZW1lbnRzO1xuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBjdXN0b20gbm9uIEhUTUwgZWxlbWVudHMgdG8gdGhlIHNjaGVtYS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYWRkQ3VzdG9tRWxlbWVudHNcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY3VzdG9tX2VsZW1lbnRzIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGN1c3RvbSBlbGVtZW50cyB0byBhZGQuXG5cdFx0ICovXG5cdFx0c2VsZi5hZGRDdXN0b21FbGVtZW50cyA9IGFkZEN1c3RvbUVsZW1lbnRzO1xuXG5cdFx0LyoqXG5cdFx0ICogUGFyc2VzIGEgdmFsaWQgY2hpbGRyZW4gc3RyaW5nIGFuZCBhZGRzIHRoZW0gdG8gdGhlIHNjaGVtYSBzdHJ1Y3R1cmUuIFRoZSB2YWxpZCBjaGlsZHJlblxuXHRcdCAqIGZvcm1hdCBpcyBmb3IgZXhhbXBsZTogXCJlbGVtZW50W2NoaWxkMXxjaGlsZDJdXCIuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFZhbGlkQ2hpbGRyZW5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdmFsaWRfY2hpbGRyZW4gVmFsaWQgY2hpbGRyZW4gZWxlbWVudHMgc3RyaW5nIHRvIHBhcnNlXG5cdFx0ICovXG5cdFx0c2VsZi5hZGRWYWxpZENoaWxkcmVuID0gYWRkVmFsaWRDaGlsZHJlbjtcblxuXHRcdHNlbGYuZWxlbWVudHMgPSBlbGVtZW50cztcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvaHRtbC9TYXhQYXJzZXIuanNcblxuLyoqXG4gKiBTYXhQYXJzZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyplc2xpbnQgbWF4LWRlcHRoOlsyLCA5XSAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgcGFyc2VzIEhUTUwgY29kZSB1c2luZyBwdXJlIEphdmFTY3JpcHQgYW5kIGV4ZWN1dGVzIHZhcmlvdXMgZXZlbnRzIGZvciBlYWNoIGl0ZW0gaXQgZmluZHMuIEl0IHdpbGxcbiAqIGFsd2F5cyBleGVjdXRlIHRoZSBldmVudHMgaW4gdGhlIHJpZ2h0IG9yZGVyIGZvciB0YWcgc291cCBjb2RlIGxpa2UgPGI+PHA+PC9iPjwvcD4uIEl0IHdpbGwgYWxzbyByZW1vdmUgZWxlbWVudHNcbiAqIGFuZCBhdHRyaWJ1dGVzIHRoYXQgZG9lc24ndCBmaXQgdGhlIHNjaGVtYSBpZiB0aGUgdmFsaWRhdGUgc2V0dGluZyBpcyBlbmFibGVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgcGFyc2VyID0gbmV3IHRpbnltY2UuaHRtbC5TYXhQYXJzZXIoe1xuICogICAgIHZhbGlkYXRlOiB0cnVlLFxuICpcbiAqICAgICBjb21tZW50OiBmdW5jdGlvbih0ZXh0KSB7XG4gKiAgICAgICAgIGNvbnNvbGUubG9nKCdDb21tZW50OicsIHRleHQpO1xuICogICAgIH0sXG4gKlxuICogICAgIGNkYXRhOiBmdW5jdGlvbih0ZXh0KSB7XG4gKiAgICAgICAgIGNvbnNvbGUubG9nKCdDREFUQTonLCB0ZXh0KTtcbiAqICAgICB9LFxuICpcbiAqICAgICB0ZXh0OiBmdW5jdGlvbih0ZXh0LCByYXcpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coJ1RleHQ6JywgdGV4dCwgJ1JhdzonLCByYXcpO1xuICogICAgIH0sXG4gKlxuICogICAgIHN0YXJ0OiBmdW5jdGlvbihuYW1lLCBhdHRycywgZW1wdHkpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coJ1N0YXJ0OicsIG5hbWUsIGF0dHJzLCBlbXB0eSk7XG4gKiAgICAgfSxcbiAqXG4gKiAgICAgZW5kOiBmdW5jdGlvbihuYW1lKSB7XG4gKiAgICAgICAgIGNvbnNvbGUubG9nKCdFbmQ6JywgbmFtZSk7XG4gKiAgICAgfSxcbiAqXG4gKiAgICAgcGk6IGZ1bmN0aW9uKG5hbWUsIHRleHQpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coJ1BJOicsIG5hbWUsIHRleHQpO1xuICogICAgIH0sXG4gKlxuICogICAgIGRvY3R5cGU6IGZ1bmN0aW9uKHRleHQpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coJ0RvY1R5cGU6JywgdGV4dCk7XG4gKiAgICAgfVxuICogfSwgc2NoZW1hKTtcbiAqIEBjbGFzcyB0aW55bWNlLmh0bWwuU2F4UGFyc2VyXG4gKiBAdmVyc2lvbiAzLjRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9odG1sL1NheFBhcnNlclwiLCBbXG5cdFwidGlueW1jZS9odG1sL1NjaGVtYVwiLFxuXHRcInRpbnltY2UvaHRtbC9FbnRpdGllc1wiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihTY2hlbWEsIEVudGl0aWVzLCBUb29scykge1xuXHR2YXIgZWFjaCA9IFRvb2xzLmVhY2g7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbmQgdGFnIGZvciBhIHNwZWNpZmljIHN0YXJ0IHRhZy4gVGhpcyBjYW4gYmVcblx0ICogdXNlZCB0byBza2lwIGFsbCBjaGlsZHJlbiBvZiBhIHBhcmVudCBlbGVtZW50IGZyb20gYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAbWV0aG9kIGZpbmRFbmRUYWdcblx0ICogQHBhcmFtIHt0aW55bWNlLmh0bWwuU2NoZW1hfSBzY2hlbWEgU2NoZW1hIGluc3RhbmNlIHRvIHVzZSB0byBtYXRjaCBzaG9ydCBlbmRlZCBlbGVtZW50cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgSFRNTCBzdHJpbmcgdG8gZmluZCB0aGUgZW5kIHRhZyBpbi5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0SW5kZXggSW5kZXh0IHRvIHN0YXJ0IHNlYXJjaGluZyBhdCBzaG91bGQgYmUgYWZ0ZXIgdGhlIHN0YXJ0IHRhZy5cblx0ICogQHJldHVybiB7TnVtYmVyfSBJbmRleCBvZiB0aGUgZW5kIHRhZy5cblx0ICovXG5cdGZ1bmN0aW9uIGZpbmRFbmRUYWcoc2NoZW1hLCBodG1sLCBzdGFydEluZGV4KSB7XG5cdFx0dmFyIGNvdW50ID0gMSwgaW5kZXgsIG1hdGNoZXMsIHRva2VuUmVnRXhwLCBzaG9ydEVuZGVkRWxlbWVudHM7XG5cblx0XHRzaG9ydEVuZGVkRWxlbWVudHMgPSBzY2hlbWEuZ2V0U2hvcnRFbmRlZEVsZW1lbnRzKCk7XG5cdFx0dG9rZW5SZWdFeHAgPSAvPChbIT9cXC9dKT8oW0EtWmEtejAtOVxcLV9cXDpcXC5dKykoKD86XFxzK1teXCJcXCc+XSsoPzooPzpcIlteXCJdKlwiKXwoPzpcXCdbXlxcJ10qXFwnKXxbXj5dKikpKnxcXC98XFxzKyk+L2c7XG5cdFx0dG9rZW5SZWdFeHAubGFzdEluZGV4ID0gaW5kZXggPSBzdGFydEluZGV4O1xuXG5cdFx0d2hpbGUgKChtYXRjaGVzID0gdG9rZW5SZWdFeHAuZXhlYyhodG1sKSkpIHtcblx0XHRcdGluZGV4ID0gdG9rZW5SZWdFeHAubGFzdEluZGV4O1xuXG5cdFx0XHRpZiAobWF0Y2hlc1sxXSA9PT0gJy8nKSB7IC8vIEVuZCBlbGVtZW50XG5cdFx0XHRcdGNvdW50LS07XG5cdFx0XHR9IGVsc2UgaWYgKCFtYXRjaGVzWzFdKSB7IC8vIFN0YXJ0IGVsZW1lbnRcblx0XHRcdFx0aWYgKG1hdGNoZXNbMl0gaW4gc2hvcnRFbmRlZEVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY291bnQgPT09IDApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGluZGV4O1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgYSBuZXcgU2F4UGFyc2VyIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQG1ldGhvZCBTYXhQYXJzZXJcblx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE5hbWUvdmFsdWUgY29sbGVjdGlvbiBvZiBzZXR0aW5ncy4gY29tbWVudCwgY2RhdGEsIHRleHQsIHN0YXJ0IGFuZCBlbmQgYXJlIGNhbGxiYWNrcy5cblx0ICogQHBhcmFtIHt0aW55bWNlLmh0bWwuU2NoZW1hfSBzY2hlbWEgSFRNTCBTY2hlbWEgY2xhc3MgdG8gdXNlIHdoZW4gcGFyc2luZy5cblx0ICovXG5cdGZ1bmN0aW9uIFNheFBhcnNlcihzZXR0aW5ncywgc2NoZW1hKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0ZnVuY3Rpb24gbm9vcCgpIHt9XG5cblx0XHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuXHRcdHNlbGYuc2NoZW1hID0gc2NoZW1hID0gc2NoZW1hIHx8IG5ldyBTY2hlbWEoKTtcblxuXHRcdGlmIChzZXR0aW5ncy5maXhfc2VsZl9jbG9zaW5nICE9PSBmYWxzZSkge1xuXHRcdFx0c2V0dGluZ3MuZml4X3NlbGZfY2xvc2luZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGhhbmRsZXIgZnVuY3Rpb25zIGZyb20gc2V0dGluZ3MgYW5kIHNldHVwIGRlZmF1bHQgaGFuZGxlcnNcblx0XHRlYWNoKCdjb21tZW50IGNkYXRhIHRleHQgc3RhcnQgZW5kIHBpIGRvY3R5cGUnLnNwbGl0KCcgJyksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdHNlbGZbbmFtZV0gPSBzZXR0aW5nc1tuYW1lXSB8fCBub29wO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0LyoqXG5cdFx0ICogUGFyc2VzIHRoZSBzcGVjaWZpZWQgSFRNTCBzdHJpbmcgYW5kIGV4ZWN1dGVzIHRoZSBjYWxsYmFja3MgZm9yIGVhY2ggaXRlbSBpdCBmaW5kcy5cblx0XHQgKlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbmV3IFNheFBhcnNlcih7Li4ufSkucGFyc2UoJzxiPnRleHQ8L2I+Jyk7XG5cdFx0ICogQG1ldGhvZCBwYXJzZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIEh0bWwgc3RyaW5nIHRvIHNheCBwYXJzZS5cblx0XHQgKi9cblx0XHRzZWxmLnBhcnNlID0gZnVuY3Rpb24oaHRtbCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBtYXRjaGVzLCBpbmRleCA9IDAsIHZhbHVlLCBlbmRSZWdFeHAsIHN0YWNrID0gW10sIGF0dHJMaXN0LCBpLCB0ZXh0LCBuYW1lO1xuXHRcdFx0dmFyIGlzSW50ZXJuYWxFbGVtZW50LCByZW1vdmVJbnRlcm5hbEVsZW1lbnRzLCBzaG9ydEVuZGVkRWxlbWVudHMsIGZpbGxBdHRyc01hcCwgaXNTaG9ydEVuZGVkO1xuXHRcdFx0dmFyIHZhbGlkYXRlLCBlbGVtZW50UnVsZSwgaXNWYWxpZEVsZW1lbnQsIGF0dHIsIGF0dHJpYnNWYWx1ZSwgdmFsaWRBdHRyaWJ1dGVzTWFwLCB2YWxpZEF0dHJpYnV0ZVBhdHRlcm5zO1xuXHRcdFx0dmFyIGF0dHJpYnV0ZXNSZXF1aXJlZCwgYXR0cmlidXRlc0RlZmF1bHQsIGF0dHJpYnV0ZXNGb3JjZWQ7XG5cdFx0XHR2YXIgYW55QXR0cmlidXRlc1JlcXVpcmVkLCBzZWxmQ2xvc2luZywgdG9rZW5SZWdFeHAsIGF0dHJSZWdFeHAsIHNwZWNpYWxFbGVtZW50cywgYXR0clZhbHVlLCBpZENvdW50ID0gMDtcblx0XHRcdHZhciBkZWNvZGUgPSBFbnRpdGllcy5kZWNvZGUsIGZpeFNlbGZDbG9zaW5nLCBmaWx0ZXJlZFVybEF0dHJzID0gVG9vbHMubWFrZU1hcCgnc3JjLGhyZWYsZGF0YSxiYWNrZ3JvdW5kLGZvcm1hY3Rpb24scG9zdGVyJyk7XG5cdFx0XHR2YXIgc2NyaXB0VXJpUmVnRXhwID0gLygoamF2YXx2YilzY3JpcHR8bWh0bWwpOi9pLCBkYXRhVXJpUmVnRXhwID0gL15kYXRhOi9pO1xuXG5cdFx0XHRmdW5jdGlvbiBwcm9jZXNzRW5kVGFnKG5hbWUpIHtcblx0XHRcdFx0dmFyIHBvcywgaTtcblxuXHRcdFx0XHQvLyBGaW5kIHBvc2l0aW9uIG9mIHBhcmVudCBvZiB0aGUgc2FtZSB0eXBlXG5cdFx0XHRcdHBvcyA9IHN0YWNrLmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKHBvcy0tKSB7XG5cdFx0XHRcdFx0aWYgKHN0YWNrW3Bvc10ubmFtZSA9PT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm91bmQgcGFyZW50XG5cdFx0XHRcdGlmIChwb3MgPj0gMCkge1xuXHRcdFx0XHRcdC8vIENsb3NlIGFsbCB0aGUgb3BlbiBlbGVtZW50c1xuXHRcdFx0XHRcdGZvciAoaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pIHtcblx0XHRcdFx0XHRcdG5hbWUgPSBzdGFja1tpXTtcblxuXHRcdFx0XHRcdFx0aWYgKG5hbWUudmFsaWQpIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5lbmQobmFtZS5uYW1lKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBSZW1vdmUgdGhlIG9wZW4gZWxlbWVudHMgZnJvbSB0aGUgc3RhY2tcblx0XHRcdFx0XHRzdGFjay5sZW5ndGggPSBwb3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gcGFyc2VBdHRyaWJ1dGUobWF0Y2gsIG5hbWUsIHZhbHVlLCB2YWwyLCB2YWwzKSB7XG5cdFx0XHRcdHZhciBhdHRyUnVsZSwgaSwgdHJpbVJlZ0V4cCA9IC9bXFxzXFx1MDAwMC1cXHUwMDFGXSsvZztcblxuXHRcdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR2YWx1ZSA9IG5hbWUgaW4gZmlsbEF0dHJzTWFwID8gbmFtZSA6IGRlY29kZSh2YWx1ZSB8fCB2YWwyIHx8IHZhbDMgfHwgJycpOyAvLyBIYW5kbGUgYm9vbGVhbiBhdHRyaWJ1dGUgdGhhbiB2YWx1ZSBhdHRyaWJ1dGVcblxuXHRcdFx0XHQvLyBWYWxpZGF0ZSBuYW1lIGFuZCB2YWx1ZSBwYXNzIHRocm91Z2ggYWxsIGRhdGEtIGF0dHJpYnV0ZXNcblx0XHRcdFx0aWYgKHZhbGlkYXRlICYmICFpc0ludGVybmFsRWxlbWVudCAmJiBuYW1lLmluZGV4T2YoJ2RhdGEtJykgIT09IDApIHtcblx0XHRcdFx0XHRhdHRyUnVsZSA9IHZhbGlkQXR0cmlidXRlc01hcFtuYW1lXTtcblxuXHRcdFx0XHRcdC8vIEZpbmQgcnVsZSBieSBwYXR0ZXJuIG1hdGNoaW5nXG5cdFx0XHRcdFx0aWYgKCFhdHRyUnVsZSAmJiB2YWxpZEF0dHJpYnV0ZVBhdHRlcm5zKSB7XG5cdFx0XHRcdFx0XHRpID0gdmFsaWRBdHRyaWJ1dGVQYXR0ZXJucy5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRcdGF0dHJSdWxlID0gdmFsaWRBdHRyaWJ1dGVQYXR0ZXJuc1tpXTtcblx0XHRcdFx0XHRcdFx0aWYgKGF0dHJSdWxlLnBhdHRlcm4udGVzdChuYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE5vIHJ1bGUgbWF0Y2hlZFxuXHRcdFx0XHRcdFx0aWYgKGkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGF0dHJSdWxlID0gbnVsbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBObyBhdHRyaWJ1dGUgcnVsZSBmb3VuZFxuXHRcdFx0XHRcdGlmICghYXR0clJ1bGUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBWYWxpZGF0ZSB2YWx1ZVxuXHRcdFx0XHRcdGlmIChhdHRyUnVsZS52YWxpZFZhbHVlcyAmJiAhKHZhbHVlIGluIGF0dHJSdWxlLnZhbGlkVmFsdWVzKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEJsb2NrIGFueSBqYXZhc2NyaXB0OiB1cmxzIG9yIG5vbiBpbWFnZSBkYXRhIHVyaXNcblx0XHRcdFx0aWYgKGZpbHRlcmVkVXJsQXR0cnNbbmFtZV0gJiYgIXNldHRpbmdzLmFsbG93X3NjcmlwdF91cmxzKSB7XG5cdFx0XHRcdFx0dmFyIHVyaSA9IHZhbHVlLnJlcGxhY2UodHJpbVJlZ0V4cCwgJycpO1xuXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdC8vIE1pZ2h0IHRocm93IG1hbGZvcm1lZCBVUkkgc2VxdWVuY2Vcblx0XHRcdFx0XHRcdHVyaSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmkpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBub24gVVRGLTggZGVjb2RlclxuXHRcdFx0XHRcdFx0dXJpID0gdW5lc2NhcGUodXJpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc2NyaXB0VXJpUmVnRXhwLnRlc3QodXJpKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghc2V0dGluZ3MuYWxsb3dfaHRtbF9kYXRhX3VybHMgJiYgZGF0YVVyaVJlZ0V4cC50ZXN0KHVyaSkgJiYgIS9eZGF0YTppbWFnZVxcLy9pLnRlc3QodXJpKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBhdHRyaWJ1dGUgdG8gbGlzdCBhbmQgbWFwXG5cdFx0XHRcdGF0dHJMaXN0Lm1hcFtuYW1lXSA9IHZhbHVlO1xuXHRcdFx0XHRhdHRyTGlzdC5wdXNoKHtcblx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHJlY29tcGlsZSBSZWdFeHBzIGFuZCBtYXAgb2JqZWN0c1xuXHRcdFx0dG9rZW5SZWdFeHAgPSBuZXcgUmVnRXhwKCc8KD86JyArXG5cdFx0XHRcdCcoPzohLS0oW1xcXFx3XFxcXFddKj8pLS0+KXwnICsgLy8gQ29tbWVudFxuXHRcdFx0XHQnKD86IVxcXFxbQ0RBVEFcXFxcWyhbXFxcXHdcXFxcV10qPylcXFxcXVxcXFxdPil8JyArIC8vIENEQVRBXG5cdFx0XHRcdCcoPzohRE9DVFlQRShbXFxcXHdcXFxcV10qPyk+KXwnICsgLy8gRE9DVFlQRVxuXHRcdFx0XHQnKD86XFxcXD8oW15cXFxcc1xcXFwvPD5dKykgPyhbXFxcXHdcXFxcV10qPylbPy9dPil8JyArIC8vIFBJXG5cdFx0XHRcdCcoPzpcXFxcLyhbXj5dKyk+KXwnICsgLy8gRW5kIGVsZW1lbnRcblx0XHRcdFx0Jyg/OihbQS1aYS16MC05XFxcXC1fXFxcXDpcXFxcLl0rKSgoPzpcXFxccytbXlwiXFwnPl0rKD86KD86XCJbXlwiXSpcIil8KD86XFwnW15cXCddKlxcJyl8W14+XSopKSp8XFxcXC98XFxcXHMrKT4pJyArIC8vIFN0YXJ0IGVsZW1lbnRcblx0XHRcdCcpJywgJ2cnKTtcblxuXHRcdFx0YXR0clJlZ0V4cCA9IC8oW1xcdzpcXC1dKykoPzpcXHMqPVxccyooPzooPzpcXFwiKCg/OlteXFxcIl0pKilcXFwiKXwoPzpcXCcoKD86W15cXCddKSopXFwnKXwoW14+XFxzXSspKSk/L2c7XG5cblx0XHRcdC8vIFNldHVwIGxvb2t1cCB0YWJsZXMgZm9yIGVtcHR5IGVsZW1lbnRzIGFuZCBib29sZWFuIGF0dHJpYnV0ZXNcblx0XHRcdHNob3J0RW5kZWRFbGVtZW50cyA9IHNjaGVtYS5nZXRTaG9ydEVuZGVkRWxlbWVudHMoKTtcblx0XHRcdHNlbGZDbG9zaW5nID0gc2V0dGluZ3Muc2VsZl9jbG9zaW5nX2VsZW1lbnRzIHx8IHNjaGVtYS5nZXRTZWxmQ2xvc2luZ0VsZW1lbnRzKCk7XG5cdFx0XHRmaWxsQXR0cnNNYXAgPSBzY2hlbWEuZ2V0Qm9vbEF0dHJzKCk7XG5cdFx0XHR2YWxpZGF0ZSA9IHNldHRpbmdzLnZhbGlkYXRlO1xuXHRcdFx0cmVtb3ZlSW50ZXJuYWxFbGVtZW50cyA9IHNldHRpbmdzLnJlbW92ZV9pbnRlcm5hbHM7XG5cdFx0XHRmaXhTZWxmQ2xvc2luZyA9IHNldHRpbmdzLmZpeF9zZWxmX2Nsb3Npbmc7XG5cdFx0XHRzcGVjaWFsRWxlbWVudHMgPSBzY2hlbWEuZ2V0U3BlY2lhbEVsZW1lbnRzKCk7XG5cblx0XHRcdHdoaWxlICgobWF0Y2hlcyA9IHRva2VuUmVnRXhwLmV4ZWMoaHRtbCkpKSB7XG5cdFx0XHRcdC8vIFRleHRcblx0XHRcdFx0aWYgKGluZGV4IDwgbWF0Y2hlcy5pbmRleCkge1xuXHRcdFx0XHRcdHNlbGYudGV4dChkZWNvZGUoaHRtbC5zdWJzdHIoaW5kZXgsIG1hdGNoZXMuaW5kZXggLSBpbmRleCkpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICgodmFsdWUgPSBtYXRjaGVzWzZdKSkgeyAvLyBFbmQgZWxlbWVudFxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRcdC8vIElFIHdpbGwgYWRkIGEgXCI6XCIgaW4gZnJvbnQgb2YgZWxlbWVudHMgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGxpa2UgY3VzdG9tIGVsZW1lbnRzIG9yIEhUTUw1IGVsZW1lbnRzXG5cdFx0XHRcdFx0aWYgKHZhbHVlLmNoYXJBdCgwKSA9PT0gJzonKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnN1YnN0cigxKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRwcm9jZXNzRW5kVGFnKHZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIGlmICgodmFsdWUgPSBtYXRjaGVzWzddKSkgeyAvLyBTdGFydCBlbGVtZW50XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRcdFx0Ly8gSUUgd2lsbCBhZGQgYSBcIjpcIiBpbiBmcm9udCBvZiBlbGVtZW50cyBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgbGlrZSBjdXN0b20gZWxlbWVudHMgb3IgSFRNTDUgZWxlbWVudHNcblx0XHRcdFx0XHRpZiAodmFsdWUuY2hhckF0KDApID09PSAnOicpIHtcblx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuc3Vic3RyKDEpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlzU2hvcnRFbmRlZCA9IHZhbHVlIGluIHNob3J0RW5kZWRFbGVtZW50cztcblxuXHRcdFx0XHRcdC8vIElzIHNlbGYgY2xvc2luZyB0YWcgZm9yIGV4YW1wbGUgYW4gPGxpPiBhZnRlciBhbiBvcGVuIDxsaT5cblx0XHRcdFx0XHRpZiAoZml4U2VsZkNsb3NpbmcgJiYgc2VsZkNsb3NpbmdbdmFsdWVdICYmIHN0YWNrLmxlbmd0aCA+IDAgJiYgc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0ubmFtZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0XHRcdHByb2Nlc3NFbmRUYWcodmFsdWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFZhbGlkYXRlIGVsZW1lbnRcblx0XHRcdFx0XHRpZiAoIXZhbGlkYXRlIHx8IChlbGVtZW50UnVsZSA9IHNjaGVtYS5nZXRFbGVtZW50UnVsZSh2YWx1ZSkpKSB7XG5cdFx0XHRcdFx0XHRpc1ZhbGlkRWxlbWVudCA9IHRydWU7XG5cblx0XHRcdFx0XHRcdC8vIEdyYWIgYXR0cmlidXRlcyBtYXAgYW5kIHBhdHRlcnMgd2hlbiB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcblx0XHRcdFx0XHRcdGlmICh2YWxpZGF0ZSkge1xuXHRcdFx0XHRcdFx0XHR2YWxpZEF0dHJpYnV0ZXNNYXAgPSBlbGVtZW50UnVsZS5hdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdFx0XHR2YWxpZEF0dHJpYnV0ZVBhdHRlcm5zID0gZWxlbWVudFJ1bGUuYXR0cmlidXRlUGF0dGVybnM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIFBhcnNlIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdGlmICgoYXR0cmlic1ZhbHVlID0gbWF0Y2hlc1s4XSkpIHtcblx0XHRcdFx0XHRcdFx0aXNJbnRlcm5hbEVsZW1lbnQgPSBhdHRyaWJzVmFsdWUuaW5kZXhPZignZGF0YS1tY2UtdHlwZScpICE9PSAtMTsgLy8gQ2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW50ZXJuYWwgZWxlbWVudFxuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbnRlcm5hbCBhdHRyaWJ1dGVzIHRoZW4gcmVtb3ZlIGl0IGlmIHdlIGFyZSB0b2xkIHRvIGRvIHNvXG5cdFx0XHRcdFx0XHRcdGlmIChpc0ludGVybmFsRWxlbWVudCAmJiByZW1vdmVJbnRlcm5hbEVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0aXNWYWxpZEVsZW1lbnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGF0dHJMaXN0ID0gW107XG5cdFx0XHRcdFx0XHRcdGF0dHJMaXN0Lm1hcCA9IHt9O1xuXG5cdFx0XHRcdFx0XHRcdGF0dHJpYnNWYWx1ZS5yZXBsYWNlKGF0dHJSZWdFeHAsIHBhcnNlQXR0cmlidXRlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHJMaXN0ID0gW107XG5cdFx0XHRcdFx0XHRcdGF0dHJMaXN0Lm1hcCA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBQcm9jZXNzIGF0dHJpYnV0ZXMgaWYgdmFsaWRhdGlvbiBpcyBlbmFibGVkXG5cdFx0XHRcdFx0XHRpZiAodmFsaWRhdGUgJiYgIWlzSW50ZXJuYWxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXNSZXF1aXJlZCA9IGVsZW1lbnRSdWxlLmF0dHJpYnV0ZXNSZXF1aXJlZDtcblx0XHRcdFx0XHRcdFx0YXR0cmlidXRlc0RlZmF1bHQgPSBlbGVtZW50UnVsZS5hdHRyaWJ1dGVzRGVmYXVsdDtcblx0XHRcdFx0XHRcdFx0YXR0cmlidXRlc0ZvcmNlZCA9IGVsZW1lbnRSdWxlLmF0dHJpYnV0ZXNGb3JjZWQ7XG5cdFx0XHRcdFx0XHRcdGFueUF0dHJpYnV0ZXNSZXF1aXJlZCA9IGVsZW1lbnRSdWxlLnJlbW92ZUVtcHR5QXR0cnM7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgYW55IGF0dHJpYnV0ZSBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYgKGFueUF0dHJpYnV0ZXNSZXF1aXJlZCAmJiAhYXR0ckxpc3QubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0aXNWYWxpZEVsZW1lbnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmb3JjZWQgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHRpZiAoYXR0cmlidXRlc0ZvcmNlZCkge1xuXHRcdFx0XHRcdFx0XHRcdGkgPSBhdHRyaWJ1dGVzRm9yY2VkLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyID0gYXR0cmlidXRlc0ZvcmNlZFtpXTtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyVmFsdWUgPSBhdHRyLnZhbHVlO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXR0clZhbHVlID09PSAneyR1aWR9Jykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyVmFsdWUgPSAnbWNlXycgKyBpZENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGF0dHJMaXN0Lm1hcFtuYW1lXSA9IGF0dHJWYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHJMaXN0LnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBhdHRyVmFsdWV9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgZGVmYXVsdCBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdGlmIChhdHRyaWJ1dGVzRGVmYXVsdCkge1xuXHRcdFx0XHRcdFx0XHRcdGkgPSBhdHRyaWJ1dGVzRGVmYXVsdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0ciA9IGF0dHJpYnV0ZXNEZWZhdWx0W2ldO1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHIubmFtZTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCEobmFtZSBpbiBhdHRyTGlzdC5tYXApKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJWYWx1ZSA9IGF0dHIudmFsdWU7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHJWYWx1ZSA9PT0gJ3skdWlkfScpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyVmFsdWUgPSAnbWNlXycgKyBpZENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhdHRyTGlzdC5tYXBbbmFtZV0gPSBhdHRyVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJMaXN0LnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBhdHRyVmFsdWV9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgcmVxdWlyZWQgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHRpZiAoYXR0cmlidXRlc1JlcXVpcmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aSA9IGF0dHJpYnV0ZXNSZXF1aXJlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGF0dHJpYnV0ZXNSZXF1aXJlZFtpXSBpbiBhdHRyTGlzdC5tYXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gTm9uZSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcyB3aGVyZSBmb3VuZFxuXHRcdFx0XHRcdFx0XHRcdGlmIChpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aXNWYWxpZEVsZW1lbnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBJbnZhbGlkYXRlIGVsZW1lbnQgaWYgaXQncyBtYXJrZWQgYXMgYm9ndXNcblx0XHRcdFx0XHRcdFx0aWYgKChhdHRyID0gYXR0ckxpc3QubWFwWydkYXRhLW1jZS1ib2d1cyddKSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhdHRyID09PSAnYWxsJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW5kZXggPSBmaW5kRW5kVGFnKHNjaGVtYSwgaHRtbCwgdG9rZW5SZWdFeHAubGFzdEluZGV4KTtcblx0XHRcdFx0XHRcdFx0XHRcdHRva2VuUmVnRXhwLmxhc3RJbmRleCA9IGluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aXNWYWxpZEVsZW1lbnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoaXNWYWxpZEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5zdGFydCh2YWx1ZSwgYXR0ckxpc3QsIGlzU2hvcnRFbmRlZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlzVmFsaWRFbGVtZW50ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVHJlYXQgc2NyaXB0LCBub3NjcmlwdCBhbmQgc3R5bGUgYSBiaXQgZGlmZmVyZW50IHNpbmNlIHRoZXkgbWF5IGluY2x1ZGUgY29kZSB0aGF0IGxvb2tzIGxpa2UgZWxlbWVudHNcblx0XHRcdFx0XHRpZiAoKGVuZFJlZ0V4cCA9IHNwZWNpYWxFbGVtZW50c1t2YWx1ZV0pKSB7XG5cdFx0XHRcdFx0XHRlbmRSZWdFeHAubGFzdEluZGV4ID0gaW5kZXggPSBtYXRjaGVzLmluZGV4ICsgbWF0Y2hlc1swXS5sZW5ndGg7XG5cblx0XHRcdFx0XHRcdGlmICgobWF0Y2hlcyA9IGVuZFJlZ0V4cC5leGVjKGh0bWwpKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXNWYWxpZEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0ID0gaHRtbC5zdWJzdHIoaW5kZXgsIG1hdGNoZXMuaW5kZXggLSBpbmRleCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpbmRleCA9IG1hdGNoZXMuaW5kZXggKyBtYXRjaGVzWzBdLmxlbmd0aDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRleHQgPSBodG1sLnN1YnN0cihpbmRleCk7XG5cdFx0XHRcdFx0XHRcdGluZGV4ID0gaHRtbC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChpc1ZhbGlkRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGV4dC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZi50ZXh0KHRleHQsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0c2VsZi5lbmQodmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0b2tlblJlZ0V4cC5sYXN0SW5kZXggPSBpbmRleDtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFB1c2ggdmFsdWUgb24gdG8gc3RhY2tcblx0XHRcdFx0XHRpZiAoIWlzU2hvcnRFbmRlZCkge1xuXHRcdFx0XHRcdFx0aWYgKCFhdHRyaWJzVmFsdWUgfHwgYXR0cmlic1ZhbHVlLmluZGV4T2YoJy8nKSAhPSBhdHRyaWJzVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRzdGFjay5wdXNoKHtuYW1lOiB2YWx1ZSwgdmFsaWQ6IGlzVmFsaWRFbGVtZW50fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYuZW5kKHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoKHZhbHVlID0gbWF0Y2hlc1sxXSkpIHsgLy8gQ29tbWVudFxuXHRcdFx0XHRcdC8vIFBhZGQgY29tbWVudCB2YWx1ZSB0byBhdm9pZCBicm93c2VycyBmcm9tIHBhcnNpbmcgaW52YWxpZCBjb21tZW50cyBhcyBIVE1MXG5cdFx0XHRcdFx0aWYgKHZhbHVlLmNoYXJBdCgwKSA9PT0gJz4nKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9ICcgJyArIHZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghc2V0dGluZ3MuYWxsb3dfY29uZGl0aW9uYWxfY29tbWVudHMgJiYgdmFsdWUuc3Vic3RyKDAsIDMpLnRvTG93ZXJDYXNlKCkgPT09ICdbaWYnKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9ICcgJyArIHZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNlbGYuY29tbWVudCh2YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoKHZhbHVlID0gbWF0Y2hlc1syXSkpIHsgLy8gQ0RBVEFcblx0XHRcdFx0XHRzZWxmLmNkYXRhKHZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIGlmICgodmFsdWUgPSBtYXRjaGVzWzNdKSkgeyAvLyBET0NUWVBFXG5cdFx0XHRcdFx0c2VsZi5kb2N0eXBlKHZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIGlmICgodmFsdWUgPSBtYXRjaGVzWzRdKSkgeyAvLyBQSVxuXHRcdFx0XHRcdHNlbGYucGkodmFsdWUsIG1hdGNoZXNbNV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBtYXRjaGVzLmluZGV4ICsgbWF0Y2hlc1swXS5sZW5ndGg7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRleHRcblx0XHRcdGlmIChpbmRleCA8IGh0bWwubGVuZ3RoKSB7XG5cdFx0XHRcdHNlbGYudGV4dChkZWNvZGUoaHRtbC5zdWJzdHIoaW5kZXgpKSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsb3NlIGFueSBvcGVuIGVsZW1lbnRzXG5cdFx0XHRmb3IgKGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHR2YWx1ZSA9IHN0YWNrW2ldO1xuXG5cdFx0XHRcdGlmICh2YWx1ZS52YWxpZCkge1xuXHRcdFx0XHRcdHNlbGYuZW5kKHZhbHVlLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdFNheFBhcnNlci5maW5kRW5kVGFnID0gZmluZEVuZFRhZztcblxuXHRyZXR1cm4gU2F4UGFyc2VyO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9odG1sL0RvbVBhcnNlci5qc1xuXG4vKipcbiAqIERvbVBhcnNlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgcGFyc2VzIEhUTUwgY29kZSBpbnRvIGEgRE9NIGxpa2Ugc3RydWN0dXJlIG9mIG5vZGVzIGl0IHdpbGwgcmVtb3ZlIHJlZHVuZGFudCB3aGl0ZXNwYWNlIGFuZCBtYWtlXG4gKiBzdXJlIHRoYXQgdGhlIG5vZGUgdHJlZSBpcyB2YWxpZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBzY2hlbWEuXG4gKiBTbyBmb3IgZXhhbXBsZTogPHA+YTxwPmI8L3A+YzwvcD4gd2lsbCBiZWNvbWUgPHA+YTwvcD48cD5iPC9wPjxwPmM8L3A+XG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBwYXJzZXIgPSBuZXcgdGlueW1jZS5odG1sLkRvbVBhcnNlcih7dmFsaWRhdGU6IHRydWV9LCBzY2hlbWEpO1xuICogdmFyIHJvb3ROb2RlID0gcGFyc2VyLnBhcnNlKCc8aDE+Y29udGVudDwvaDE+Jyk7XG4gKlxuICogQGNsYXNzIHRpbnltY2UuaHRtbC5Eb21QYXJzZXJcbiAqIEB2ZXJzaW9uIDMuNFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL2h0bWwvRG9tUGFyc2VyXCIsIFtcblx0XCJ0aW55bWNlL2h0bWwvTm9kZVwiLFxuXHRcInRpbnltY2UvaHRtbC9TY2hlbWFcIixcblx0XCJ0aW55bWNlL2h0bWwvU2F4UGFyc2VyXCIsXG5cdFwidGlueW1jZS91dGlsL1Rvb2xzXCJcbl0sIGZ1bmN0aW9uKE5vZGUsIFNjaGVtYSwgU2F4UGFyc2VyLCBUb29scykge1xuXHR2YXIgbWFrZU1hcCA9IFRvb2xzLm1ha2VNYXAsIGVhY2ggPSBUb29scy5lYWNoLCBleHBsb2RlID0gVG9vbHMuZXhwbG9kZSwgZXh0ZW5kID0gVG9vbHMuZXh0ZW5kO1xuXG5cdHZhciBwYWRkRW1wdHlOb2RlID0gZnVuY3Rpb24gKHNldHRpbmdzLCBub2RlKSB7XG5cdFx0aWYgKHNldHRpbmdzLnBhZGRfZW1wdHlfd2l0aF9icikge1xuXHRcdFx0bm9kZS5lbXB0eSgpLmFwcGVuZChuZXcgTm9kZSgnYnInLCAnMScpKS5zaG9ydEVuZGVkID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bm9kZS5lbXB0eSgpLmFwcGVuZChuZXcgTm9kZSgnI3RleHQnLCAnMycpKS52YWx1ZSA9ICdcXHUwMGEwJztcblx0XHR9XG5cdH07XG5cblx0dmFyIGhhc09ubHlDaGlsZCA9IGZ1bmN0aW9uIChub2RlLCBuYW1lKSB7XG5cdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS5maXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBub2RlLmZpcnN0Q2hpbGQubmFtZSA9PT0gbmFtZTtcblx0fTtcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBhIG5ldyBEb21QYXJzZXIgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAbWV0aG9kIERvbVBhcnNlclxuXHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBjb2xsZWN0aW9uIG9mIHNldHRpbmdzLiBjb21tZW50LCBjZGF0YSwgdGV4dCwgc3RhcnQgYW5kIGVuZCBhcmUgY2FsbGJhY2tzLlxuXHQgKiBAcGFyYW0ge3RpbnltY2UuaHRtbC5TY2hlbWF9IHNjaGVtYSBIVE1MIFNjaGVtYSBjbGFzcyB0byB1c2Ugd2hlbiBwYXJzaW5nLlxuXHQgKi9cblx0cmV0dXJuIGZ1bmN0aW9uKHNldHRpbmdzLCBzY2hlbWEpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXMsIG5vZGVGaWx0ZXJzID0ge30sIGF0dHJpYnV0ZUZpbHRlcnMgPSBbXSwgbWF0Y2hlZE5vZGVzID0ge30sIG1hdGNoZWRBdHRyaWJ1dGVzID0ge307XG5cblx0XHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuXHRcdHNldHRpbmdzLnZhbGlkYXRlID0gXCJ2YWxpZGF0ZVwiIGluIHNldHRpbmdzID8gc2V0dGluZ3MudmFsaWRhdGUgOiB0cnVlO1xuXHRcdHNldHRpbmdzLnJvb3RfbmFtZSA9IHNldHRpbmdzLnJvb3RfbmFtZSB8fCAnYm9keSc7XG5cdFx0c2VsZi5zY2hlbWEgPSBzY2hlbWEgPSBzY2hlbWEgfHwgbmV3IFNjaGVtYSgpO1xuXG5cdFx0ZnVuY3Rpb24gZml4SW52YWxpZENoaWxkcmVuKG5vZGVzKSB7XG5cdFx0XHR2YXIgbmksIG5vZGUsIHBhcmVudCwgcGFyZW50cywgbmV3UGFyZW50LCBjdXJyZW50Tm9kZSwgdGVtcE5vZGUsIGNoaWxkTm9kZSwgaTtcblx0XHRcdHZhciBub25FbXB0eUVsZW1lbnRzLCB3aGl0ZXNwYWNlRWxlbWVudHMsIG5vblNwbGl0YWJsZUVsZW1lbnRzLCB0ZXh0QmxvY2tFbGVtZW50cywgc3BlY2lhbEVsZW1lbnRzLCBzaWJsaW5nLCBuZXh0Tm9kZTtcblxuXHRcdFx0bm9uU3BsaXRhYmxlRWxlbWVudHMgPSBtYWtlTWFwKCd0cix0ZCx0aCx0Ym9keSx0aGVhZCx0Zm9vdCx0YWJsZScpO1xuXHRcdFx0bm9uRW1wdHlFbGVtZW50cyA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG5cdFx0XHR3aGl0ZXNwYWNlRWxlbWVudHMgPSBzY2hlbWEuZ2V0V2hpdGVTcGFjZUVsZW1lbnRzKCk7XG5cdFx0XHR0ZXh0QmxvY2tFbGVtZW50cyA9IHNjaGVtYS5nZXRUZXh0QmxvY2tFbGVtZW50cygpO1xuXHRcdFx0c3BlY2lhbEVsZW1lbnRzID0gc2NoZW1hLmdldFNwZWNpYWxFbGVtZW50cygpO1xuXG5cdFx0XHRmb3IgKG5pID0gMDsgbmkgPCBub2Rlcy5sZW5ndGg7IG5pKyspIHtcblx0XHRcdFx0bm9kZSA9IG5vZGVzW25pXTtcblxuXHRcdFx0XHQvLyBBbHJlYWR5IHJlbW92ZWQgb3IgZml4ZWRcblx0XHRcdFx0aWYgKCFub2RlLnBhcmVudCB8fCBub2RlLmZpeGVkKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgaW52YWxpZCBlbGVtZW50IGlzIGEgdGV4dCBibG9jayBhbmQgdGhlIHRleHQgYmxvY2sgaXMgd2l0aGluIGEgcGFyZW50IExJIGVsZW1lbnRcblx0XHRcdFx0Ly8gVGhlbiB1bndyYXAgdGhlIGZpcnN0IHRleHQgYmxvY2sgYW5kIGNvbnZlcnQgb3RoZXIgc2libGluZyB0ZXh0IGJsb2NrcyB0byBMSSBlbGVtZW50cyBzaW1pbGFyIHRvIFdvcmQvT3BlbiBPZmZpY2Vcblx0XHRcdFx0aWYgKHRleHRCbG9ja0VsZW1lbnRzW25vZGUubmFtZV0gJiYgbm9kZS5wYXJlbnQubmFtZSA9PSAnbGknKSB7XG5cdFx0XHRcdFx0Ly8gTW92ZSBzaWJsaW5nIHRleHQgYmxvY2tzIGFmdGVyIExJIGVsZW1lbnRcblx0XHRcdFx0XHRzaWJsaW5nID0gbm9kZS5uZXh0O1xuXHRcdFx0XHRcdHdoaWxlIChzaWJsaW5nKSB7XG5cdFx0XHRcdFx0XHRpZiAodGV4dEJsb2NrRWxlbWVudHNbc2libGluZy5uYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRzaWJsaW5nLm5hbWUgPSAnbGknO1xuXHRcdFx0XHRcdFx0XHRzaWJsaW5nLmZpeGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0bm9kZS5wYXJlbnQuaW5zZXJ0KHNpYmxpbmcsIG5vZGUucGFyZW50KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzaWJsaW5nID0gc2libGluZy5uZXh0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFVud3JhcCBjdXJyZW50IHRleHQgYmxvY2tcblx0XHRcdFx0XHRub2RlLnVud3JhcChub2RlKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBsaXN0IG9mIGFsbCBwYXJlbnQgbm9kZXMgdW50aWwgd2UgZmluZCBhIHZhbGlkIHBhcmVudCB0byBzdGljayB0aGUgY2hpbGQgaW50b1xuXHRcdFx0XHRwYXJlbnRzID0gW25vZGVdO1xuXHRcdFx0XHRmb3IgKHBhcmVudCA9IG5vZGUucGFyZW50OyBwYXJlbnQgJiYgIXNjaGVtYS5pc1ZhbGlkQ2hpbGQocGFyZW50Lm5hbWUsIG5vZGUubmFtZSkgJiZcblx0XHRcdFx0XHQhbm9uU3BsaXRhYmxlRWxlbWVudHNbcGFyZW50Lm5hbWVdOyBwYXJlbnQgPSBwYXJlbnQucGFyZW50KSB7XG5cdFx0XHRcdFx0cGFyZW50cy5wdXNoKHBhcmVudCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3VuZCBhIHN1aXRhYmxlIHBhcmVudFxuXHRcdFx0XHRpZiAocGFyZW50ICYmIHBhcmVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdC8vIFJldmVyc2UgdGhlIGFycmF5IHNpbmNlIGl0IG1ha2VzIGxvb3BpbmcgZWFzaWVyXG5cdFx0XHRcdFx0cGFyZW50cy5yZXZlcnNlKCk7XG5cblx0XHRcdFx0XHQvLyBDbG9uZSB0aGUgcmVsYXRlZCBwYXJlbnQgYW5kIGluc2VydCB0aGF0IGFmdGVyIHRoZSBtb3ZlZCBub2RlXG5cdFx0XHRcdFx0bmV3UGFyZW50ID0gY3VycmVudE5vZGUgPSBzZWxmLmZpbHRlck5vZGUocGFyZW50c1swXS5jbG9uZSgpKTtcblxuXHRcdFx0XHRcdC8vIFN0YXJ0IGNsb25pbmcgYW5kIG1vdmluZyBjaGlsZHJlbiBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0YXJnZXQgbm9kZVxuXHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdFx0aWYgKHNjaGVtYS5pc1ZhbGlkQ2hpbGQoY3VycmVudE5vZGUubmFtZSwgcGFyZW50c1tpXS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHR0ZW1wTm9kZSA9IHNlbGYuZmlsdGVyTm9kZShwYXJlbnRzW2ldLmNsb25lKCkpO1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50Tm9kZS5hcHBlbmQodGVtcE5vZGUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGVtcE5vZGUgPSBjdXJyZW50Tm9kZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Zm9yIChjaGlsZE5vZGUgPSBwYXJlbnRzW2ldLmZpcnN0Q2hpbGQ7IGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUgIT0gcGFyZW50c1tpICsgMV07KSB7XG5cdFx0XHRcdFx0XHRcdG5leHROb2RlID0gY2hpbGROb2RlLm5leHQ7XG5cdFx0XHRcdFx0XHRcdHRlbXBOb2RlLmFwcGVuZChjaGlsZE5vZGUpO1xuXHRcdFx0XHRcdFx0XHRjaGlsZE5vZGUgPSBuZXh0Tm9kZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y3VycmVudE5vZGUgPSB0ZW1wTm9kZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIW5ld1BhcmVudC5pc0VtcHR5KG5vbkVtcHR5RWxlbWVudHMsIHdoaXRlc3BhY2VFbGVtZW50cykpIHtcblx0XHRcdFx0XHRcdHBhcmVudC5pbnNlcnQobmV3UGFyZW50LCBwYXJlbnRzWzBdLCB0cnVlKTtcblx0XHRcdFx0XHRcdHBhcmVudC5pbnNlcnQobm9kZSwgbmV3UGFyZW50KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cGFyZW50Lmluc2VydChub2RlLCBwYXJlbnRzWzBdLCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgZWxlbWVudCBpcyBlbXB0eSBieSBsb29raW5nIHRocm91Z2ggaXQncyBjb250ZW50cyBhbmQgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIDxwPjxiciAvPjwvcD5cblx0XHRcdFx0XHRwYXJlbnQgPSBwYXJlbnRzWzBdO1xuXHRcdFx0XHRcdGlmIChwYXJlbnQuaXNFbXB0eShub25FbXB0eUVsZW1lbnRzLCB3aGl0ZXNwYWNlRWxlbWVudHMpIHx8IGhhc09ubHlDaGlsZChwYXJlbnQsICdicicpKSB7XG5cdFx0XHRcdFx0XHRwYXJlbnQuZW1wdHkoKS5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdFx0XHQvLyBJZiBpdCdzIGFuIExJIHRyeSB0byBmaW5kIGEgVUwvT0wgZm9yIGl0IG9yIHdyYXAgaXRcblx0XHRcdFx0XHRpZiAobm9kZS5uYW1lID09PSAnbGknKSB7XG5cdFx0XHRcdFx0XHRzaWJsaW5nID0gbm9kZS5wcmV2O1xuXHRcdFx0XHRcdFx0aWYgKHNpYmxpbmcgJiYgKHNpYmxpbmcubmFtZSA9PT0gJ3VsJyB8fCBzaWJsaW5nLm5hbWUgPT09ICd1bCcpKSB7XG5cdFx0XHRcdFx0XHRcdHNpYmxpbmcuYXBwZW5kKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c2libGluZyA9IG5vZGUubmV4dDtcblx0XHRcdFx0XHRcdGlmIChzaWJsaW5nICYmIChzaWJsaW5nLm5hbWUgPT09ICd1bCcgfHwgc2libGluZy5uYW1lID09PSAndWwnKSkge1xuXHRcdFx0XHRcdFx0XHRzaWJsaW5nLmluc2VydChub2RlLCBzaWJsaW5nLmZpcnN0Q2hpbGQsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bm9kZS53cmFwKHNlbGYuZmlsdGVyTm9kZShuZXcgTm9kZSgndWwnLCAxKSkpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVHJ5IHdyYXBwaW5nIHRoZSBlbGVtZW50IGluIGEgRElWXG5cdFx0XHRcdFx0aWYgKHNjaGVtYS5pc1ZhbGlkQ2hpbGQobm9kZS5wYXJlbnQubmFtZSwgJ2RpdicpICYmIHNjaGVtYS5pc1ZhbGlkQ2hpbGQoJ2RpdicsIG5vZGUubmFtZSkpIHtcblx0XHRcdFx0XHRcdG5vZGUud3JhcChzZWxmLmZpbHRlck5vZGUobmV3IE5vZGUoJ2RpdicsIDEpKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFdlIGZhaWxlZCB3cmFwcGluZyBpdCwgdGhlbiByZW1vdmUgb3IgdW53cmFwIGl0XG5cdFx0XHRcdFx0XHRpZiAoc3BlY2lhbEVsZW1lbnRzW25vZGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0bm9kZS5lbXB0eSgpLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bm9kZS51bndyYXAoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSdW5zIHRoZSBzcGVjaWZpZWQgbm9kZSB0aG91Z2ggdGhlIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZXMgZmlsdGVycy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZmlsdGVyTm9kZVxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS5odG1sLk5vZGV9IE5vZGUgdGhlIG5vZGUgdG8gcnVuIGZpbHRlcnMgb24uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5odG1sLk5vZGV9IFRoZSBwYXNzZWQgaW4gbm9kZS5cblx0XHQgKi9cblx0XHRzZWxmLmZpbHRlck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHR2YXIgaSwgbmFtZSwgbGlzdDtcblxuXHRcdFx0Ly8gUnVuIGVsZW1lbnQgZmlsdGVyc1xuXHRcdFx0aWYgKG5hbWUgaW4gbm9kZUZpbHRlcnMpIHtcblx0XHRcdFx0bGlzdCA9IG1hdGNoZWROb2Rlc1tuYW1lXTtcblxuXHRcdFx0XHRpZiAobGlzdCkge1xuXHRcdFx0XHRcdGxpc3QucHVzaChub2RlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtYXRjaGVkTm9kZXNbbmFtZV0gPSBbbm9kZV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUnVuIGF0dHJpYnV0ZSBmaWx0ZXJzXG5cdFx0XHRpID0gYXR0cmlidXRlRmlsdGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdG5hbWUgPSBhdHRyaWJ1dGVGaWx0ZXJzW2ldLm5hbWU7XG5cblx0XHRcdFx0aWYgKG5hbWUgaW4gbm9kZS5hdHRyaWJ1dGVzLm1hcCkge1xuXHRcdFx0XHRcdGxpc3QgPSBtYXRjaGVkQXR0cmlidXRlc1tuYW1lXTtcblxuXHRcdFx0XHRcdGlmIChsaXN0KSB7XG5cdFx0XHRcdFx0XHRsaXN0LnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRBdHRyaWJ1dGVzW25hbWVdID0gW25vZGVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIG5vZGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHRoZSBwYXJzZXIsIHRoZSBwYXJzZXIgd2lsbCBjb2xsZWN0IHRoZSBzcGVjaWZpZWQgbm9kZXMgYnkgbmFtZVxuXHRcdCAqIGFuZCB0aGVuIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIG9uZXMgaXQgaGFzIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGRvY3VtZW50LlxuXHRcdCAqXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBwYXJzZXIuYWRkTm9kZUZpbHRlcigncCxoMScsIGZ1bmN0aW9uKG5vZGVzLCBuYW1lKSB7XG5cdFx0ICpcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdCAqXHRcdFx0Y29uc29sZS5sb2cobm9kZXNbaV0ubmFtZSk7XG5cdFx0ICpcdFx0fVxuXHRcdCAqIH0pO1xuXHRcdCAqIEBtZXRob2QgYWRkTm9kZUZpbHRlclxuXHRcdCAqIEBtZXRob2Qge1N0cmluZ30gbmFtZSBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBub2RlcyB0byBjb2xsZWN0LlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSBpdCBoYXMgY29sbGVjdGVkIG5vZGVzLlxuXHRcdCAqL1xuXHRcdHNlbGYuYWRkTm9kZUZpbHRlciA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0XHRlYWNoKGV4cGxvZGUobmFtZSksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0dmFyIGxpc3QgPSBub2RlRmlsdGVyc1tuYW1lXTtcblxuXHRcdFx0XHRpZiAoIWxpc3QpIHtcblx0XHRcdFx0XHRub2RlRmlsdGVyc1tuYW1lXSA9IGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxpc3QucHVzaChjYWxsYmFjayk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIGF0dHJpYnV0ZSBmaWx0ZXIgZnVuY3Rpb24gdG8gdGhlIHBhcnNlciwgdGhlIHBhcnNlciB3aWxsIGNvbGxlY3Qgbm9kZXMgdGhhdCBoYXMgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzXG5cdFx0ICogYW5kIHRoZW4gZXhlY3V0ZSB0aGUgY2FsbGJhY2sgb25lcyBpdCBoYXMgZmluaXNoZWQgcGFyc2luZyB0aGUgZG9jdW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ3NyYyxocmVmJywgZnVuY3Rpb24obm9kZXMsIG5hbWUpIHtcblx0XHQgKlx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICpcdFx0XHRjb25zb2xlLmxvZyhub2Rlc1tpXS5uYW1lKTtcblx0XHQgKlx0XHR9XG5cdFx0ICogfSk7XG5cdFx0ICogQG1ldGhvZCBhZGRBdHRyaWJ1dGVGaWx0ZXJcblx0XHQgKiBAbWV0aG9kIHtTdHJpbmd9IG5hbWUgQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygbm9kZXMgdG8gY29sbGVjdC5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgaXQgaGFzIGNvbGxlY3RlZCBub2Rlcy5cblx0XHQgKi9cblx0XHRzZWxmLmFkZEF0dHJpYnV0ZUZpbHRlciA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0XHRlYWNoKGV4cGxvZGUobmFtZSksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0dmFyIGk7XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZUZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoYXR0cmlidXRlRmlsdGVyc1tpXS5uYW1lID09PSBuYW1lKSB7XG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVGaWx0ZXJzW2ldLmNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhdHRyaWJ1dGVGaWx0ZXJzLnB1c2goe25hbWU6IG5hbWUsIGNhbGxiYWNrczogW2NhbGxiYWNrXX0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFBhcnNlcyB0aGUgc3BlY2lmaWVkIEhUTUwgc3RyaW5nIGludG8gYSBET00gbGlrZSBub2RlIHRyZWUgYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cblx0XHQgKlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIHJvb3ROb2RlID0gbmV3IERvbVBhcnNlcih7Li4ufSkucGFyc2UoJzxiPnRleHQ8L2I+Jyk7XG5cdFx0ICogQG1ldGhvZCBwYXJzZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIEh0bWwgc3RyaW5nIHRvIHNheCBwYXJzZS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gYXJncyBPcHRpb25hbCBhcmdzIG9iamVjdCB0aGF0IGdldHMgcGFzc2VkIHRvIGFsbCBmaWx0ZXIgZnVuY3Rpb25zLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuaHRtbC5Ob2RlfSBSb290IG5vZGUgY29udGFpbmluZyB0aGUgdHJlZS5cblx0XHQgKi9cblx0XHRzZWxmLnBhcnNlID0gZnVuY3Rpb24oaHRtbCwgYXJncykge1xuXHRcdFx0dmFyIHBhcnNlciwgcm9vdE5vZGUsIG5vZGUsIG5vZGVzLCBpLCBsLCBmaSwgZmwsIGxpc3QsIG5hbWUsIHZhbGlkYXRlO1xuXHRcdFx0dmFyIGJsb2NrRWxlbWVudHMsIHN0YXJ0V2hpdGVTcGFjZVJlZ0V4cCwgaW52YWxpZENoaWxkcmVuID0gW10sIGlzSW5XaGl0ZVNwYWNlUHJlc2VydmVkRWxlbWVudDtcblx0XHRcdHZhciBlbmRXaGl0ZVNwYWNlUmVnRXhwLCBhbGxXaGl0ZVNwYWNlUmVnRXhwLCBpc0FsbFdoaXRlU3BhY2VSZWdFeHAsIHdoaXRlU3BhY2VFbGVtZW50cztcblx0XHRcdHZhciBjaGlsZHJlbiwgbm9uRW1wdHlFbGVtZW50cywgcm9vdEJsb2NrTmFtZTtcblxuXHRcdFx0YXJncyA9IGFyZ3MgfHwge307XG5cdFx0XHRtYXRjaGVkTm9kZXMgPSB7fTtcblx0XHRcdG1hdGNoZWRBdHRyaWJ1dGVzID0ge307XG5cdFx0XHRibG9ja0VsZW1lbnRzID0gZXh0ZW5kKG1ha2VNYXAoJ3NjcmlwdCxzdHlsZSxoZWFkLGh0bWwsYm9keSx0aXRsZSxtZXRhLHBhcmFtJyksIHNjaGVtYS5nZXRCbG9ja0VsZW1lbnRzKCkpO1xuXHRcdFx0bm9uRW1wdHlFbGVtZW50cyA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG5cdFx0XHRjaGlsZHJlbiA9IHNjaGVtYS5jaGlsZHJlbjtcblx0XHRcdHZhbGlkYXRlID0gc2V0dGluZ3MudmFsaWRhdGU7XG5cdFx0XHRyb290QmxvY2tOYW1lID0gXCJmb3JjZWRfcm9vdF9ibG9ja1wiIGluIGFyZ3MgPyBhcmdzLmZvcmNlZF9yb290X2Jsb2NrIDogc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2s7XG5cblx0XHRcdHdoaXRlU3BhY2VFbGVtZW50cyA9IHNjaGVtYS5nZXRXaGl0ZVNwYWNlRWxlbWVudHMoKTtcblx0XHRcdHN0YXJ0V2hpdGVTcGFjZVJlZ0V4cCA9IC9eWyBcXHRcXHJcXG5dKy87XG5cdFx0XHRlbmRXaGl0ZVNwYWNlUmVnRXhwID0gL1sgXFx0XFxyXFxuXSskLztcblx0XHRcdGFsbFdoaXRlU3BhY2VSZWdFeHAgPSAvWyBcXHRcXHJcXG5dKy9nO1xuXHRcdFx0aXNBbGxXaGl0ZVNwYWNlUmVnRXhwID0gL15bIFxcdFxcclxcbl0rJC87XG5cblx0XHRcdGZ1bmN0aW9uIGFkZFJvb3RCbG9ja3MoKSB7XG5cdFx0XHRcdHZhciBub2RlID0gcm9vdE5vZGUuZmlyc3RDaGlsZCwgbmV4dCwgcm9vdEJsb2NrTm9kZTtcblxuXHRcdFx0XHQvLyBSZW1vdmVzIHdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYmxvY2sgc286XG5cdFx0XHRcdC8vIDxwPiB4IDwvcD4gLT4gPHA+eDwvcD5cblx0XHRcdFx0ZnVuY3Rpb24gdHJpbShyb290QmxvY2tOb2RlKSB7XG5cdFx0XHRcdFx0aWYgKHJvb3RCbG9ja05vZGUpIHtcblx0XHRcdFx0XHRcdG5vZGUgPSByb290QmxvY2tOb2RlLmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdFx0XHRpZiAobm9kZSAmJiBub2RlLnR5cGUgPT0gMykge1xuXHRcdFx0XHRcdFx0XHRub2RlLnZhbHVlID0gbm9kZS52YWx1ZS5yZXBsYWNlKHN0YXJ0V2hpdGVTcGFjZVJlZ0V4cCwgJycpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRub2RlID0gcm9vdEJsb2NrTm9kZS5sYXN0Q2hpbGQ7XG5cdFx0XHRcdFx0XHRpZiAobm9kZSAmJiBub2RlLnR5cGUgPT0gMykge1xuXHRcdFx0XHRcdFx0XHRub2RlLnZhbHVlID0gbm9kZS52YWx1ZS5yZXBsYWNlKGVuZFdoaXRlU3BhY2VSZWdFeHAsICcnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiByb290QmxvY2sgaXMgdmFsaWQgd2l0aGluIHJvb3ROb2RlIGZvciBleGFtcGxlIGlmIFAgaXMgdmFsaWQgaW4gSDEgaWYgSDEgaXMgdGhlIGNvbnRlbnRFZGl0YWJlIHJvb3Rcblx0XHRcdFx0aWYgKCFzY2hlbWEuaXNWYWxpZENoaWxkKHJvb3ROb2RlLm5hbWUsIHJvb3RCbG9ja05hbWUudG9Mb3dlckNhc2UoKSkpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aGlsZSAobm9kZSkge1xuXHRcdFx0XHRcdG5leHQgPSBub2RlLm5leHQ7XG5cblx0XHRcdFx0XHRpZiAobm9kZS50eXBlID09IDMgfHwgKG5vZGUudHlwZSA9PSAxICYmIG5vZGUubmFtZSAhPT0gJ3AnICYmXG5cdFx0XHRcdFx0XHQhYmxvY2tFbGVtZW50c1tub2RlLm5hbWVdICYmICFub2RlLmF0dHIoJ2RhdGEtbWNlLXR5cGUnKSkpIHtcblx0XHRcdFx0XHRcdGlmICghcm9vdEJsb2NrTm9kZSkge1xuXHRcdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgcm9vdCBibG9jayBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdHJvb3RCbG9ja05vZGUgPSBjcmVhdGVOb2RlKHJvb3RCbG9ja05hbWUsIDEpO1xuXHRcdFx0XHRcdFx0XHRyb290QmxvY2tOb2RlLmF0dHIoc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnMpO1xuXHRcdFx0XHRcdFx0XHRyb290Tm9kZS5pbnNlcnQocm9vdEJsb2NrTm9kZSwgbm9kZSk7XG5cdFx0XHRcdFx0XHRcdHJvb3RCbG9ja05vZGUuYXBwZW5kKG5vZGUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cm9vdEJsb2NrTm9kZS5hcHBlbmQobm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyaW0ocm9vdEJsb2NrTm9kZSk7XG5cdFx0XHRcdFx0XHRyb290QmxvY2tOb2RlID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRub2RlID0gbmV4dDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyaW0ocm9vdEJsb2NrTm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGNyZWF0ZU5vZGUobmFtZSwgdHlwZSkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IG5ldyBOb2RlKG5hbWUsIHR5cGUpLCBsaXN0O1xuXG5cdFx0XHRcdGlmIChuYW1lIGluIG5vZGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1hdGNoZWROb2Rlc1tuYW1lXTtcblxuXHRcdFx0XHRcdGlmIChsaXN0KSB7XG5cdFx0XHRcdFx0XHRsaXN0LnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1hdGNoZWROb2Rlc1tuYW1lXSA9IFtub2RlXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gcmVtb3ZlV2hpdGVzcGFjZUJlZm9yZShub2RlKSB7XG5cdFx0XHRcdHZhciB0ZXh0Tm9kZSwgdGV4dE5vZGVOZXh0LCB0ZXh0VmFsLCBzaWJsaW5nLCBibG9ja0VsZW1lbnRzID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcblxuXHRcdFx0XHRmb3IgKHRleHROb2RlID0gbm9kZS5wcmV2OyB0ZXh0Tm9kZSAmJiB0ZXh0Tm9kZS50eXBlID09PSAzOykge1xuXHRcdFx0XHRcdHRleHRWYWwgPSB0ZXh0Tm9kZS52YWx1ZS5yZXBsYWNlKGVuZFdoaXRlU3BhY2VSZWdFeHAsICcnKTtcblxuXHRcdFx0XHRcdC8vIEZvdW5kIGEgdGV4dCBub2RlIHdpdGggbm9uIHdoaXRlc3BhY2UgdGhlbiB0cmltIHRoYXQgYW5kIGJyZWFrXG5cdFx0XHRcdFx0aWYgKHRleHRWYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0dGV4dE5vZGUudmFsdWUgPSB0ZXh0VmFsO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRleHROb2RlTmV4dCA9IHRleHROb2RlLm5leHQ7XG5cblx0XHRcdFx0XHQvLyBGaXggZm9yIGJ1ZyAjNzU0MyB3aGVyZSBib2d1cyBub2RlcyB3b3VsZCBwcm9kdWNlIGVtcHR5XG5cdFx0XHRcdFx0Ly8gdGV4dCBub2RlcyBhbmQgdGhlc2Ugd291bGQgYmUgcmVtb3ZlZCBpZiBhIG5lc3RlZCBsaXN0IHdhcyBiZWZvcmUgaXRcblx0XHRcdFx0XHRpZiAodGV4dE5vZGVOZXh0KSB7XG5cdFx0XHRcdFx0XHRpZiAodGV4dE5vZGVOZXh0LnR5cGUgPT0gMyAmJiB0ZXh0Tm9kZU5leHQudmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHRleHROb2RlID0gdGV4dE5vZGUucHJldjtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghYmxvY2tFbGVtZW50c1t0ZXh0Tm9kZU5leHQubmFtZV0gJiYgdGV4dE5vZGVOZXh0Lm5hbWUgIT0gJ3NjcmlwdCcgJiYgdGV4dE5vZGVOZXh0Lm5hbWUgIT0gJ3N0eWxlJykge1xuXHRcdFx0XHRcdFx0XHR0ZXh0Tm9kZSA9IHRleHROb2RlLnByZXY7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNpYmxpbmcgPSB0ZXh0Tm9kZS5wcmV2O1xuXHRcdFx0XHRcdHRleHROb2RlLnJlbW92ZSgpO1xuXHRcdFx0XHRcdHRleHROb2RlID0gc2libGluZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBjbG9uZUFuZEV4Y2x1ZGVCbG9ja3MoaW5wdXQpIHtcblx0XHRcdFx0dmFyIG5hbWUsIG91dHB1dCA9IHt9O1xuXG5cdFx0XHRcdGZvciAobmFtZSBpbiBpbnB1dCkge1xuXHRcdFx0XHRcdGlmIChuYW1lICE9PSAnbGknICYmIG5hbWUgIT0gJ3AnKSB7XG5cdFx0XHRcdFx0XHRvdXRwdXRbbmFtZV0gPSBpbnB1dFtuYW1lXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdFx0fVxuXG5cdFx0XHRwYXJzZXIgPSBuZXcgU2F4UGFyc2VyKHtcblx0XHRcdFx0dmFsaWRhdGU6IHZhbGlkYXRlLFxuXHRcdFx0XHRhbGxvd19zY3JpcHRfdXJsczogc2V0dGluZ3MuYWxsb3dfc2NyaXB0X3VybHMsXG5cdFx0XHRcdGFsbG93X2NvbmRpdGlvbmFsX2NvbW1lbnRzOiBzZXR0aW5ncy5hbGxvd19jb25kaXRpb25hbF9jb21tZW50cyxcblxuXHRcdFx0XHQvLyBFeGNsdWRlIFAgYW5kIExJIGZyb20gRE9NIHBhcnNpbmcgc2luY2UgaXQncyB0cmVhdGVkIGJldHRlciBieSB0aGUgRE9NIHBhcnNlclxuXHRcdFx0XHRzZWxmX2Nsb3NpbmdfZWxlbWVudHM6IGNsb25lQW5kRXhjbHVkZUJsb2NrcyhzY2hlbWEuZ2V0U2VsZkNsb3NpbmdFbGVtZW50cygpKSxcblxuXHRcdFx0XHRjZGF0YTogZnVuY3Rpb24odGV4dCkge1xuXHRcdFx0XHRcdG5vZGUuYXBwZW5kKGNyZWF0ZU5vZGUoJyNjZGF0YScsIDQpKS52YWx1ZSA9IHRleHQ7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0dGV4dDogZnVuY3Rpb24odGV4dCwgcmF3KSB7XG5cdFx0XHRcdFx0dmFyIHRleHROb2RlO1xuXG5cdFx0XHRcdFx0Ly8gVHJpbSBhbGwgcmVkdW5kYW50IHdoaXRlc3BhY2Ugb24gbm9uIHdoaXRlIHNwYWNlIGVsZW1lbnRzXG5cdFx0XHRcdFx0aWYgKCFpc0luV2hpdGVTcGFjZVByZXNlcnZlZEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoYWxsV2hpdGVTcGFjZVJlZ0V4cCwgJyAnKTtcblxuXHRcdFx0XHRcdFx0aWYgKG5vZGUubGFzdENoaWxkICYmIGJsb2NrRWxlbWVudHNbbm9kZS5sYXN0Q2hpbGQubmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZShzdGFydFdoaXRlU3BhY2VSZWdFeHAsICcnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEbyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgbm9kZVxuXHRcdFx0XHRcdGlmICh0ZXh0Lmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRcdFx0dGV4dE5vZGUgPSBjcmVhdGVOb2RlKCcjdGV4dCcsIDMpO1xuXHRcdFx0XHRcdFx0dGV4dE5vZGUucmF3ID0gISFyYXc7XG5cdFx0XHRcdFx0XHRub2RlLmFwcGVuZCh0ZXh0Tm9kZSkudmFsdWUgPSB0ZXh0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHRjb21tZW50OiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmQoY3JlYXRlTm9kZSgnI2NvbW1lbnQnLCA4KSkudmFsdWUgPSB0ZXh0O1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHBpOiBmdW5jdGlvbihuYW1lLCB0ZXh0KSB7XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmQoY3JlYXRlTm9kZShuYW1lLCA3KSkudmFsdWUgPSB0ZXh0O1xuXHRcdFx0XHRcdHJlbW92ZVdoaXRlc3BhY2VCZWZvcmUobm9kZSk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0ZG9jdHlwZTogZnVuY3Rpb24odGV4dCkge1xuXHRcdFx0XHRcdHZhciBuZXdOb2RlO1xuXG5cdFx0XHRcdFx0bmV3Tm9kZSA9IG5vZGUuYXBwZW5kKGNyZWF0ZU5vZGUoJyNkb2N0eXBlJywgMTApKTtcblx0XHRcdFx0XHRuZXdOb2RlLnZhbHVlID0gdGV4dDtcblx0XHRcdFx0XHRyZW1vdmVXaGl0ZXNwYWNlQmVmb3JlKG5vZGUpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHN0YXJ0OiBmdW5jdGlvbihuYW1lLCBhdHRycywgZW1wdHkpIHtcblx0XHRcdFx0XHR2YXIgbmV3Tm9kZSwgYXR0ckZpbHRlcnNMZW4sIGVsZW1lbnRSdWxlLCBhdHRyTmFtZSwgcGFyZW50O1xuXG5cdFx0XHRcdFx0ZWxlbWVudFJ1bGUgPSB2YWxpZGF0ZSA/IHNjaGVtYS5nZXRFbGVtZW50UnVsZShuYW1lKSA6IHt9O1xuXHRcdFx0XHRcdGlmIChlbGVtZW50UnVsZSkge1xuXHRcdFx0XHRcdFx0bmV3Tm9kZSA9IGNyZWF0ZU5vZGUoZWxlbWVudFJ1bGUub3V0cHV0TmFtZSB8fCBuYW1lLCAxKTtcblx0XHRcdFx0XHRcdG5ld05vZGUuYXR0cmlidXRlcyA9IGF0dHJzO1xuXHRcdFx0XHRcdFx0bmV3Tm9kZS5zaG9ydEVuZGVkID0gZW1wdHk7XG5cblx0XHRcdFx0XHRcdG5vZGUuYXBwZW5kKG5ld05vZGUpO1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBub2RlIGlzIHZhbGlkIGNoaWxkIG9mIHRoZSBwYXJlbnQgbm9kZSBpcyB0aGUgY2hpbGQgaXNcblx0XHRcdFx0XHRcdC8vIHVua25vd24gd2UgZG9uJ3QgY29sbGVjdCBpdCBzaW5jZSBpdCdzIHByb2JhYmx5IGEgY3VzdG9tIGVsZW1lbnRcblx0XHRcdFx0XHRcdHBhcmVudCA9IGNoaWxkcmVuW25vZGUubmFtZV07XG5cdFx0XHRcdFx0XHRpZiAocGFyZW50ICYmIGNoaWxkcmVuW25ld05vZGUubmFtZV0gJiYgIXBhcmVudFtuZXdOb2RlLm5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGludmFsaWRDaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhdHRyRmlsdGVyc0xlbiA9IGF0dHJpYnV0ZUZpbHRlcnMubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKGF0dHJGaWx0ZXJzTGVuLS0pIHtcblx0XHRcdFx0XHRcdFx0YXR0ck5hbWUgPSBhdHRyaWJ1dGVGaWx0ZXJzW2F0dHJGaWx0ZXJzTGVuXS5uYW1lO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChhdHRyTmFtZSBpbiBhdHRycy5tYXApIHtcblx0XHRcdFx0XHRcdFx0XHRsaXN0ID0gbWF0Y2hlZEF0dHJpYnV0ZXNbYXR0ck5hbWVdO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGxpc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaChuZXdOb2RlKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWF0Y2hlZEF0dHJpYnV0ZXNbYXR0ck5hbWVdID0gW25ld05vZGVdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBUcmltIHdoaXRlc3BhY2UgYmVmb3JlIGJsb2NrXG5cdFx0XHRcdFx0XHRpZiAoYmxvY2tFbGVtZW50c1tuYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVXaGl0ZXNwYWNlQmVmb3JlKG5ld05vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBDaGFuZ2UgY3VycmVudCBub2RlIGlmIHRoZSBlbGVtZW50IHdhc24ndCBlbXB0eSBpLmUgbm90IDxiciAvPiBvciA8aW1nIC8+XG5cdFx0XHRcdFx0XHRpZiAoIWVtcHR5KSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBuZXdOb2RlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiB3ZSBhcmUgaW5zaWRlIGEgd2hpdGVzcGFjZSBwcmVzZXJ2ZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0aWYgKCFpc0luV2hpdGVTcGFjZVByZXNlcnZlZEVsZW1lbnQgJiYgd2hpdGVTcGFjZUVsZW1lbnRzW25hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGlzSW5XaGl0ZVNwYWNlUHJlc2VydmVkRWxlbWVudCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdGVuZDogZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0XHRcdHZhciB0ZXh0Tm9kZSwgZWxlbWVudFJ1bGUsIHRleHQsIHNpYmxpbmcsIHRlbXBOb2RlO1xuXG5cdFx0XHRcdFx0ZWxlbWVudFJ1bGUgPSB2YWxpZGF0ZSA/IHNjaGVtYS5nZXRFbGVtZW50UnVsZShuYW1lKSA6IHt9O1xuXHRcdFx0XHRcdGlmIChlbGVtZW50UnVsZSkge1xuXHRcdFx0XHRcdFx0aWYgKGJsb2NrRWxlbWVudHNbbmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFpc0luV2hpdGVTcGFjZVByZXNlcnZlZEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBUcmltIHdoaXRlc3BhY2Ugb2YgdGhlIGZpcnN0IG5vZGUgaW4gYSBibG9ja1xuXHRcdFx0XHRcdFx0XHRcdHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdFx0XHRcdFx0XHRcdGlmICh0ZXh0Tm9kZSAmJiB0ZXh0Tm9kZS50eXBlID09PSAzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0ID0gdGV4dE5vZGUudmFsdWUucmVwbGFjZShzdGFydFdoaXRlU3BhY2VSZWdFeHAsICcnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gQW55IGNoYXJhY3RlcnMgbGVmdCBhZnRlciB0cmltIG9yIHNob3VsZCB3ZSByZW1vdmUgaXRcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0ZXh0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUudmFsdWUgPSB0ZXh0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0Tm9kZSA9IHRleHROb2RlLm5leHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaWJsaW5nID0gdGV4dE5vZGUubmV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHROb2RlID0gc2libGluZztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgYW55IHB1cmUgd2hpdGVzcGFjZSBzaWJsaW5nc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAodGV4dE5vZGUgJiYgdGV4dE5vZGUudHlwZSA9PT0gMykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0Tm9kZS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaWJsaW5nID0gdGV4dE5vZGUubmV4dDtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCB8fCBpc0FsbFdoaXRlU3BhY2VSZWdFeHAudGVzdCh0ZXh0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0Tm9kZSA9IHNpYmxpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUgPSBzaWJsaW5nO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVHJpbSB3aGl0ZXNwYWNlIG9mIHRoZSBsYXN0IG5vZGUgaW4gYSBibG9ja1xuXHRcdFx0XHRcdFx0XHRcdHRleHROb2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRleHROb2RlICYmIHRleHROb2RlLnR5cGUgPT09IDMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0Tm9kZS52YWx1ZS5yZXBsYWNlKGVuZFdoaXRlU3BhY2VSZWdFeHAsICcnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gQW55IGNoYXJhY3RlcnMgbGVmdCBhZnRlciB0cmltIG9yIHNob3VsZCB3ZSByZW1vdmUgaXRcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0ZXh0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUudmFsdWUgPSB0ZXh0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0Tm9kZSA9IHRleHROb2RlLnByZXY7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaWJsaW5nID0gdGV4dE5vZGUucHJldjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHROb2RlID0gc2libGluZztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgYW55IHB1cmUgd2hpdGVzcGFjZSBzaWJsaW5nc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAodGV4dE5vZGUgJiYgdGV4dE5vZGUudHlwZSA9PT0gMykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0Tm9kZS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaWJsaW5nID0gdGV4dE5vZGUucHJldjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCB8fCBpc0FsbFdoaXRlU3BhY2VSZWdFeHAudGVzdCh0ZXh0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0Tm9kZSA9IHNpYmxpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUgPSBzaWJsaW5nO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gVHJpbSBzdGFydCB3aGl0ZSBzcGFjZVxuXHRcdFx0XHRcdFx0XHQvLyBSZW1vdmVkIGR1ZSB0bzogIzU0MjRcblx0XHRcdFx0XHRcdFx0Lyp0ZXh0Tm9kZSA9IG5vZGUucHJldjtcblx0XHRcdFx0XHRcdFx0aWYgKHRleHROb2RlICYmIHRleHROb2RlLnR5cGUgPT09IDMpIHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0ID0gdGV4dE5vZGUudmFsdWUucmVwbGFjZShzdGFydFdoaXRlU3BhY2VSZWdFeHAsICcnKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmICh0ZXh0Lmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0Tm9kZS52YWx1ZSA9IHRleHQ7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRcdH0qL1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiB3ZSBleGl0ZWQgYSB3aGl0ZXNwYWNlIHByZXNlcnZlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRpZiAoaXNJbldoaXRlU3BhY2VQcmVzZXJ2ZWRFbGVtZW50ICYmIHdoaXRlU3BhY2VFbGVtZW50c1tuYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRpc0luV2hpdGVTcGFjZVByZXNlcnZlZEVsZW1lbnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGVtcHR5IG5vZGVzXG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudFJ1bGUucmVtb3ZlRW1wdHkgfHwgZWxlbWVudFJ1bGUucGFkZEVtcHR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChub2RlLmlzRW1wdHkobm9uRW1wdHlFbGVtZW50cywgd2hpdGVTcGFjZUVsZW1lbnRzKSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50UnVsZS5wYWRkRW1wdHkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhZGRFbXB0eU5vZGUoc2V0dGluZ3MsIG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBMZWF2ZSBub2RlcyB0aGF0IGhhdmUgYSBuYW1lIGxpa2UgPGEgbmFtZT1cIm5hbWVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICghbm9kZS5hdHRyaWJ1dGVzLm1hcC5uYW1lICYmICFub2RlLmF0dHJpYnV0ZXMubWFwLmlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRlbXBOb2RlID0gbm9kZS5wYXJlbnQ7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGJsb2NrRWxlbWVudHNbbm9kZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuZW1wdHkoKS5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLnVud3JhcCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZSA9IHRlbXBOb2RlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG5vZGUgPSBub2RlLnBhcmVudDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIHNjaGVtYSk7XG5cblx0XHRcdHJvb3ROb2RlID0gbm9kZSA9IG5ldyBOb2RlKGFyZ3MuY29udGV4dCB8fCBzZXR0aW5ncy5yb290X25hbWUsIDExKTtcblxuXHRcdFx0cGFyc2VyLnBhcnNlKGh0bWwpO1xuXG5cdFx0XHQvLyBGaXggaW52YWxpZCBjaGlsZHJlbiBvciByZXBvcnQgaW52YWxpZCBjaGlsZHJlbiBpbiBhIGNvbnRleHR1YWwgcGFyc2luZ1xuXHRcdFx0aWYgKHZhbGlkYXRlICYmIGludmFsaWRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0aWYgKCFhcmdzLmNvbnRleHQpIHtcblx0XHRcdFx0XHRmaXhJbnZhbGlkQ2hpbGRyZW4oaW52YWxpZENoaWxkcmVuKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhcmdzLmludmFsaWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdyYXAgbm9kZXMgaW4gdGhlIHJvb3QgaW50byBibG9jayBlbGVtZW50cyBpZiB0aGUgcm9vdCBpcyBib2R5XG5cdFx0XHRpZiAocm9vdEJsb2NrTmFtZSAmJiAocm9vdE5vZGUubmFtZSA9PSAnYm9keScgfHwgYXJncy5pc1Jvb3RDb250ZW50KSkge1xuXHRcdFx0XHRhZGRSb290QmxvY2tzKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJ1biBmaWx0ZXJzIG9ubHkgd2hlbiB0aGUgY29udGVudHMgaXMgdmFsaWRcblx0XHRcdGlmICghYXJncy5pbnZhbGlkKSB7XG5cdFx0XHRcdC8vIFJ1biBub2RlIGZpbHRlcnNcblx0XHRcdFx0Zm9yIChuYW1lIGluIG1hdGNoZWROb2Rlcykge1xuXHRcdFx0XHRcdGxpc3QgPSBub2RlRmlsdGVyc1tuYW1lXTtcblx0XHRcdFx0XHRub2RlcyA9IG1hdGNoZWROb2Rlc1tuYW1lXTtcblxuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbHJlYWR5IHJlbW92ZWQgY2hpbGRyZW5cblx0XHRcdFx0XHRmaSA9IG5vZGVzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoZmktLSkge1xuXHRcdFx0XHRcdFx0aWYgKCFub2Rlc1tmaV0ucGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdG5vZGVzLnNwbGljZShmaSwgMSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRsaXN0W2ldKG5vZGVzLCBuYW1lLCBhcmdzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSdW4gYXR0cmlidXRlIGZpbHRlcnNcblx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IGF0dHJpYnV0ZUZpbHRlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0bGlzdCA9IGF0dHJpYnV0ZUZpbHRlcnNbaV07XG5cblx0XHRcdFx0XHRpZiAobGlzdC5uYW1lIGluIG1hdGNoZWRBdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdFx0XHRub2RlcyA9IG1hdGNoZWRBdHRyaWJ1dGVzW2xpc3QubmFtZV07XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBhbHJlYWR5IHJlbW92ZWQgY2hpbGRyZW5cblx0XHRcdFx0XHRcdGZpID0gbm9kZXMubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKGZpLS0pIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFub2Rlc1tmaV0ucGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZXMuc3BsaWNlKGZpLCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRmb3IgKGZpID0gMCwgZmwgPSBsaXN0LmNhbGxiYWNrcy5sZW5ndGg7IGZpIDwgZmw7IGZpKyspIHtcblx0XHRcdFx0XHRcdFx0bGlzdC5jYWxsYmFja3NbZmldKG5vZGVzLCBsaXN0Lm5hbWUsIGFyZ3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcm9vdE5vZGU7XG5cdFx0fTtcblxuXHRcdC8vIFJlbW92ZSA8YnI+IGF0IGVuZCBvZiBibG9jayBlbGVtZW50cyBHZWNrbyBhbmQgV2ViS2l0IGluamVjdHMgQlIgZWxlbWVudHMgdG9cblx0XHQvLyBtYWtlIGl0IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgZW1wdHkgYmxvY2tzLiBUaGlzIGxvZ2ljIHRyaWVzIHRvIHJlbW92ZVxuXHRcdC8vIHRoZXNlIGVsZW1lbnRzIGFuZCBrZWVwIGJyIGVsZW1lbnRzIHRoYXQgd2hlcmUgaW50ZW5kZWQgdG8gYmUgdGhlcmUgaW50YWN0XG5cdFx0aWYgKHNldHRpbmdzLnJlbW92ZV90cmFpbGluZ19icnMpIHtcblx0XHRcdHNlbGYuYWRkTm9kZUZpbHRlcignYnInLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0XHR2YXIgaSwgbCA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgYmxvY2tFbGVtZW50cyA9IGV4dGVuZCh7fSwgc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKSk7XG5cdFx0XHRcdHZhciBub25FbXB0eUVsZW1lbnRzID0gc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKSwgcGFyZW50LCBsYXN0UGFyZW50LCBwcmV2LCBwcmV2TmFtZTtcblx0XHRcdFx0dmFyIHdoaXRlU3BhY2VFbGVtZW50cyA9IHNjaGVtYS5nZXROb25FbXB0eUVsZW1lbnRzKCk7XG5cdFx0XHRcdHZhciBlbGVtZW50UnVsZSwgdGV4dE5vZGU7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGJycyBmcm9tIGJvZHkgZWxlbWVudCBhcyB3ZWxsXG5cdFx0XHRcdGJsb2NrRWxlbWVudHMuYm9keSA9IDE7XG5cblx0XHRcdFx0Ly8gTXVzdCBsb29wIGZvcndhcmRzIHNpbmNlIGl0IHdpbGwgb3RoZXJ3aXNlIHJlbW92ZSBhbGwgYnJzIGluIDxwPmE8YnI+PGJyPjxicj48L3A+XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRub2RlID0gbm9kZXNbaV07XG5cdFx0XHRcdFx0cGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cblx0XHRcdFx0XHRpZiAoYmxvY2tFbGVtZW50c1tub2RlLnBhcmVudC5uYW1lXSAmJiBub2RlID09PSBwYXJlbnQubGFzdENoaWxkKSB7XG5cdFx0XHRcdFx0XHQvLyBMb29wIGFsbCBub2RlcyB0byB0aGUgbGVmdCBvZiB0aGUgY3VycmVudCBub2RlIGFuZCBjaGVjayBmb3Igb3RoZXIgQlIgZWxlbWVudHNcblx0XHRcdFx0XHRcdC8vIGV4Y2x1ZGluZyBib29rbWFya3Mgc2luY2UgdGhleSBhcmUgaW52aXNpYmxlXG5cdFx0XHRcdFx0XHRwcmV2ID0gbm9kZS5wcmV2O1xuXHRcdFx0XHRcdFx0d2hpbGUgKHByZXYpIHtcblx0XHRcdFx0XHRcdFx0cHJldk5hbWUgPSBwcmV2Lm5hbWU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGJvb2ttYXJrc1xuXHRcdFx0XHRcdFx0XHRpZiAocHJldk5hbWUgIT09IFwic3BhblwiIHx8IHByZXYuYXR0cignZGF0YS1tY2UtdHlwZScpICE9PSAnYm9va21hcmsnKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRm91bmQgYSBub24gQlIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGlmIChwcmV2TmFtZSAhPT0gXCJiclwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGb3VuZCBhbm90aGVyIGJyIGl0J3MgYSA8YnI+PGJyPiBzdHJ1Y3R1cmUgdGhlbiBkb24ndCByZW1vdmUgYW55dGhpbmdcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJldk5hbWUgPT09ICdicicpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cHJldiA9IHByZXYucHJldjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0XHRcdFx0bm9kZS5yZW1vdmUoKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBJcyB0aGUgcGFyZW50IHRvIGJlIGNvbnNpZGVyZWQgZW1wdHkgYWZ0ZXIgd2UgcmVtb3ZlZCB0aGUgQlJcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmVudC5pc0VtcHR5KG5vbkVtcHR5RWxlbWVudHMsIHdoaXRlU3BhY2VFbGVtZW50cykpIHtcblx0XHRcdFx0XHRcdFx0XHRlbGVtZW50UnVsZSA9IHNjaGVtYS5nZXRFbGVtZW50UnVsZShwYXJlbnQubmFtZSk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgb3IgcGFkZCB0aGUgZWxlbWVudCBkZXBlbmRpbmcgb24gc2NoZW1hIHJ1bGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudFJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50UnVsZS5yZW1vdmVFbXB0eSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJlbnQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnRSdWxlLnBhZGRFbXB0eSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYWRkRW1wdHlOb2RlKHNldHRpbmdzLCBwYXJlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBSZXBsYWNlcyBCUiBlbGVtZW50cyBpbnNpZGUgaW5saW5lIGVsZW1lbnRzIGxpa2UgPHA+PGI+PGk+PGJyPjwvaT48L2I+PC9wPlxuXHRcdFx0XHRcdFx0Ly8gc28gdGhleSBiZWNvbWUgPHA+PGI+PGk+Jm5ic3A7PC9pPjwvYj48L3A+XG5cdFx0XHRcdFx0XHRsYXN0UGFyZW50ID0gbm9kZTtcblx0XHRcdFx0XHRcdHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LmZpcnN0Q2hpbGQgPT09IGxhc3RQYXJlbnQgJiYgcGFyZW50Lmxhc3RDaGlsZCA9PT0gbGFzdFBhcmVudCkge1xuXHRcdFx0XHRcdFx0XHRsYXN0UGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0XHRcdGlmIChibG9ja0VsZW1lbnRzW3BhcmVudC5uYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGxhc3RQYXJlbnQgPT09IHBhcmVudCAmJiBzZXR0aW5ncy5wYWRkX2VtcHR5X3dpdGhfYnIgIT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0dGV4dE5vZGUgPSBuZXcgTm9kZSgnI3RleHQnLCAzKTtcblx0XHRcdFx0XHRcdFx0dGV4dE5vZGUudmFsdWUgPSAnXFx1MDBhMCc7XG5cdFx0XHRcdFx0XHRcdG5vZGUucmVwbGFjZSh0ZXh0Tm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoIXNldHRpbmdzLmFsbG93X3Vuc2FmZV9saW5rX3RhcmdldCkge1xuXHRcdFx0c2VsZi5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2hyZWYnLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgcmVsO1xuXHRcdFx0XHR2YXIgcnVsZXMgPSAnbm9vcGVuZXIgbm9yZWZlcnJlcic7XG5cblx0XHRcdFx0ZnVuY3Rpb24gYWRkVGFyZ2V0UnVsZXMocmVsKSB7XG5cdFx0XHRcdFx0cmVsID0gcmVtb3ZlVGFyZ2V0UnVsZXMocmVsKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVsID8gW3JlbCwgcnVsZXNdLmpvaW4oJyAnKSA6IHJ1bGVzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZnVuY3Rpb24gcmVtb3ZlVGFyZ2V0UnVsZXMocmVsKSB7XG5cdFx0XHRcdFx0dmFyIHJlZ0V4cCA9IG5ldyBSZWdFeHAoJygnICsgcnVsZXMucmVwbGFjZSgnICcsICd8JykgKyAnKScsICdnJyk7XG5cdFx0XHRcdFx0aWYgKHJlbCkge1xuXHRcdFx0XHRcdFx0cmVsID0gVG9vbHMudHJpbShyZWwucmVwbGFjZShyZWdFeHAsICcnKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZWwgPyByZWwgOiBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZnVuY3Rpb24gdG9nZ2xlVGFyZ2V0UnVsZXMocmVsLCBpc1Vuc2FmZSkge1xuXHRcdFx0XHRcdHJldHVybiBpc1Vuc2FmZSA/IGFkZFRhcmdldFJ1bGVzKHJlbCkgOiByZW1vdmVUYXJnZXRSdWxlcyhyZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdG5vZGUgPSBub2Rlc1tpXTtcblx0XHRcdFx0XHRyZWwgPSBub2RlLmF0dHIoJ3JlbCcpO1xuXHRcdFx0XHRcdGlmIChub2RlLm5hbWUgPT09ICdhJykge1xuXHRcdFx0XHRcdFx0bm9kZS5hdHRyKCdyZWwnLCB0b2dnbGVUYXJnZXRSdWxlcyhyZWwsIG5vZGUuYXR0cigndGFyZ2V0JykgPT0gJ19ibGFuaycpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIGFuY2hvciBuYW1lcyBjbG9zZWQsIHVubGVzcyB0aGUgc2V0dGluZyBcImFsbG93X2h0bWxfaW5fbmFtZWRfYW5jaG9yXCIgaXMgZXhwbGljaXRseSBpbmNsdWRlZC5cblx0XHRpZiAoIXNldHRpbmdzLmFsbG93X2h0bWxfaW5fbmFtZWRfYW5jaG9yKSB7XG5cdFx0XHRzZWxmLmFkZEF0dHJpYnV0ZUZpbHRlcignaWQsbmFtZScsIGZ1bmN0aW9uKG5vZGVzKSB7XG5cdFx0XHRcdHZhciBpID0gbm9kZXMubGVuZ3RoLCBzaWJsaW5nLCBwcmV2U2libGluZywgcGFyZW50LCBub2RlO1xuXG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRub2RlID0gbm9kZXNbaV07XG5cdFx0XHRcdFx0aWYgKG5vZGUubmFtZSA9PT0gJ2EnICYmIG5vZGUuZmlyc3RDaGlsZCAmJiAhbm9kZS5hdHRyKCdocmVmJykpIHtcblx0XHRcdFx0XHRcdHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG5cdFx0XHRcdFx0XHQvLyBNb3ZlIGNoaWxkcmVuIGFmdGVyIGN1cnJlbnQgbm9kZVxuXHRcdFx0XHRcdFx0c2libGluZyA9IG5vZGUubGFzdENoaWxkO1xuXHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHRwcmV2U2libGluZyA9IHNpYmxpbmcucHJldjtcblx0XHRcdFx0XHRcdFx0cGFyZW50Lmluc2VydChzaWJsaW5nLCBub2RlKTtcblx0XHRcdFx0XHRcdFx0c2libGluZyA9IHByZXZTaWJsaW5nO1xuXHRcdFx0XHRcdFx0fSB3aGlsZSAoc2libGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoc2V0dGluZ3MuZml4X2xpc3RfZWxlbWVudHMpIHtcblx0XHRcdHNlbGYuYWRkTm9kZUZpbHRlcigndWwsb2wnLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgcGFyZW50Tm9kZTtcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldO1xuXHRcdFx0XHRcdHBhcmVudE5vZGUgPSBub2RlLnBhcmVudDtcblxuXHRcdFx0XHRcdGlmIChwYXJlbnROb2RlLm5hbWUgPT09ICd1bCcgfHwgcGFyZW50Tm9kZS5uYW1lID09PSAnb2wnKSB7XG5cdFx0XHRcdFx0XHRpZiAobm9kZS5wcmV2ICYmIG5vZGUucHJldi5uYW1lID09PSAnbGknKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUucHJldi5hcHBlbmQobm9kZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YXIgbGkgPSBuZXcgTm9kZSgnbGknLCAxKTtcblx0XHRcdFx0XHRcdFx0bGkuYXR0cignc3R5bGUnLCAnbGlzdC1zdHlsZS10eXBlOiBub25lJyk7XG5cdFx0XHRcdFx0XHRcdG5vZGUud3JhcChsaSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoc2V0dGluZ3MudmFsaWRhdGUgJiYgc2NoZW1hLmdldFZhbGlkQ2xhc3NlcygpKSB7XG5cdFx0XHRzZWxmLmFkZEF0dHJpYnV0ZUZpbHRlcignY2xhc3MnLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgY2xhc3NMaXN0LCBjaSwgY2xhc3NOYW1lLCBjbGFzc1ZhbHVlO1xuXHRcdFx0XHR2YXIgdmFsaWRDbGFzc2VzID0gc2NoZW1hLmdldFZhbGlkQ2xhc3NlcygpLCB2YWxpZENsYXNzZXNNYXAsIHZhbGlkO1xuXG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRub2RlID0gbm9kZXNbaV07XG5cdFx0XHRcdFx0Y2xhc3NMaXN0ID0gbm9kZS5hdHRyKCdjbGFzcycpLnNwbGl0KCcgJyk7XG5cdFx0XHRcdFx0Y2xhc3NWYWx1ZSA9ICcnO1xuXG5cdFx0XHRcdFx0Zm9yIChjaSA9IDA7IGNpIDwgY2xhc3NMaXN0Lmxlbmd0aDsgY2krKykge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NMaXN0W2NpXTtcblx0XHRcdFx0XHRcdHZhbGlkID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdHZhbGlkQ2xhc3Nlc01hcCA9IHZhbGlkQ2xhc3Nlc1snKiddO1xuXHRcdFx0XHRcdFx0aWYgKHZhbGlkQ2xhc3Nlc01hcCAmJiB2YWxpZENsYXNzZXNNYXBbY2xhc3NOYW1lXSkge1xuXHRcdFx0XHRcdFx0XHR2YWxpZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhbGlkQ2xhc3Nlc01hcCA9IHZhbGlkQ2xhc3Nlc1tub2RlLm5hbWVdO1xuXHRcdFx0XHRcdFx0aWYgKCF2YWxpZCAmJiB2YWxpZENsYXNzZXNNYXAgJiYgdmFsaWRDbGFzc2VzTWFwW2NsYXNzTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0dmFsaWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAodmFsaWQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGNsYXNzVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRjbGFzc1ZhbHVlICs9ICcgJztcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNsYXNzVmFsdWUgKz0gY2xhc3NOYW1lO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghY2xhc3NWYWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNsYXNzVmFsdWUgPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5vZGUuYXR0cignY2xhc3MnLCBjbGFzc1ZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9odG1sL1dyaXRlci5qc1xuXG4vKipcbiAqIFdyaXRlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byB3cml0ZSBIVE1MIHRhZ3Mgb3V0IGl0IGNhbiBiZSB1c2VkIHdpdGggdGhlIFNlcmlhbGl6ZXIgb3IgdGhlIFNheFBhcnNlci5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5odG1sLldyaXRlclxuICogQGV4YW1wbGVcbiAqIHZhciB3cml0ZXIgPSBuZXcgdGlueW1jZS5odG1sLldyaXRlcih7aW5kZW50OiB0cnVlfSk7XG4gKiB2YXIgcGFyc2VyID0gbmV3IHRpbnltY2UuaHRtbC5TYXhQYXJzZXIod3JpdGVyKS5wYXJzZSgnPHA+PGJyPjwvcD4nKTtcbiAqIGNvbnNvbGUubG9nKHdyaXRlci5nZXRDb250ZW50KCkpO1xuICpcbiAqIEBjbGFzcyB0aW55bWNlLmh0bWwuV3JpdGVyXG4gKiBAdmVyc2lvbiAzLjRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9odG1sL1dyaXRlclwiLCBbXG5cdFwidGlueW1jZS9odG1sL0VudGl0aWVzXCIsXG5cdFwidGlueW1jZS91dGlsL1Rvb2xzXCJcbl0sIGZ1bmN0aW9uKEVudGl0aWVzLCBUb29scykge1xuXHR2YXIgbWFrZU1hcCA9IFRvb2xzLm1ha2VNYXA7XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgYSBuZXcgV3JpdGVyIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQG1ldGhvZCBXcml0ZXJcblx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE5hbWUvdmFsdWUgc2V0dGluZ3Mgb2JqZWN0LlxuXHQgKi9cblx0cmV0dXJuIGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0dmFyIGh0bWwgPSBbXSwgaW5kZW50LCBpbmRlbnRCZWZvcmUsIGluZGVudEFmdGVyLCBlbmNvZGUsIGh0bWxPdXRwdXQ7XG5cblx0XHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuXHRcdGluZGVudCA9IHNldHRpbmdzLmluZGVudDtcblx0XHRpbmRlbnRCZWZvcmUgPSBtYWtlTWFwKHNldHRpbmdzLmluZGVudF9iZWZvcmUgfHwgJycpO1xuXHRcdGluZGVudEFmdGVyID0gbWFrZU1hcChzZXR0aW5ncy5pbmRlbnRfYWZ0ZXIgfHwgJycpO1xuXHRcdGVuY29kZSA9IEVudGl0aWVzLmdldEVuY29kZUZ1bmMoc2V0dGluZ3MuZW50aXR5X2VuY29kaW5nIHx8ICdyYXcnLCBzZXR0aW5ncy5lbnRpdGllcyk7XG5cdFx0aHRtbE91dHB1dCA9IHNldHRpbmdzLmVsZW1lbnRfZm9ybWF0ID09IFwiaHRtbFwiO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogV3JpdGVzIHRoZSBhIHN0YXJ0IGVsZW1lbnQgc3VjaCBhcyA8cCBpZD1cImFcIj4uXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBzdGFydFxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZWxlbWVudC5cblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IGF0dHJzIE9wdGlvbmFsIGF0dHJpYnV0ZSBhcnJheSBvciB1bmRlZmluZWQgaWYgaXQgaGFzbid0IGFueS5cblx0XHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gZW1wdHkgT3B0aW9uYWwgZW1wdHkgc3RhdGUgaWYgdGhlIHRhZyBzaG91bGQgZW5kIGxpa2UgPGJyIC8+LlxuXHRcdFx0ICovXG5cdFx0XHRzdGFydDogZnVuY3Rpb24obmFtZSwgYXR0cnMsIGVtcHR5KSB7XG5cdFx0XHRcdHZhciBpLCBsLCBhdHRyLCB2YWx1ZTtcblxuXHRcdFx0XHRpZiAoaW5kZW50ICYmIGluZGVudEJlZm9yZVtuYW1lXSAmJiBodG1sLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGh0bWxbaHRtbC5sZW5ndGggLSAxXTtcblxuXHRcdFx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlICE9PSAnXFxuJykge1xuXHRcdFx0XHRcdFx0aHRtbC5wdXNoKCdcXG4nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRodG1sLnB1c2goJzwnLCBuYW1lKTtcblxuXHRcdFx0XHRpZiAoYXR0cnMpIHtcblx0XHRcdFx0XHRmb3IgKGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRhdHRyID0gYXR0cnNbaV07XG5cdFx0XHRcdFx0XHRodG1sLnB1c2goJyAnLCBhdHRyLm5hbWUsICc9XCInLCBlbmNvZGUoYXR0ci52YWx1ZSwgdHJ1ZSksICdcIicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghZW1wdHkgfHwgaHRtbE91dHB1dCkge1xuXHRcdFx0XHRcdGh0bWxbaHRtbC5sZW5ndGhdID0gJz4nO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGh0bWxbaHRtbC5sZW5ndGhdID0gJyAvPic7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZW1wdHkgJiYgaW5kZW50ICYmIGluZGVudEFmdGVyW25hbWVdICYmIGh0bWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHZhbHVlID0gaHRtbFtodG1sLmxlbmd0aCAtIDFdO1xuXG5cdFx0XHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT09ICdcXG4nKSB7XG5cdFx0XHRcdFx0XHRodG1sLnB1c2goJ1xcbicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBXcml0ZXMgdGhlIGEgZW5kIGVsZW1lbnQgc3VjaCBhcyA8L3A+LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBtZXRob2QgZW5kXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBlbGVtZW50LlxuXHRcdFx0ICovXG5cdFx0XHRlbmQ6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0dmFyIHZhbHVlO1xuXG5cdFx0XHRcdC8qaWYgKGluZGVudCAmJiBpbmRlbnRCZWZvcmVbbmFtZV0gJiYgaHRtbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBodG1sW2h0bWwubGVuZ3RoIC0gMV07XG5cblx0XHRcdFx0XHRpZiAodmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZSAhPT0gJ1xcbicpXG5cdFx0XHRcdFx0XHRodG1sLnB1c2goJ1xcbicpO1xuXHRcdFx0XHR9Ki9cblxuXHRcdFx0XHRodG1sLnB1c2goJzwvJywgbmFtZSwgJz4nKTtcblxuXHRcdFx0XHRpZiAoaW5kZW50ICYmIGluZGVudEFmdGVyW25hbWVdICYmIGh0bWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHZhbHVlID0gaHRtbFtodG1sLmxlbmd0aCAtIDFdO1xuXG5cdFx0XHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT09ICdcXG4nKSB7XG5cdFx0XHRcdFx0XHRodG1sLnB1c2goJ1xcbicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBXcml0ZXMgYSB0ZXh0IG5vZGUuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCB0ZXh0XG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBTdHJpbmcgdG8gd3JpdGUgb3V0LlxuXHRcdFx0ICogQHBhcmFtIHtCb29sZWFufSByYXcgT3B0aW9uYWwgcmF3IHN0YXRlIGlmIHRydWUgdGhlIGNvbnRlbnRzIHdvbnQgZ2V0IGVuY29kZWQuXG5cdFx0XHQgKi9cblx0XHRcdHRleHQ6IGZ1bmN0aW9uKHRleHQsIHJhdykge1xuXHRcdFx0XHRpZiAodGV4dC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aHRtbFtodG1sLmxlbmd0aF0gPSByYXcgPyB0ZXh0IDogZW5jb2RlKHRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFdyaXRlcyBhIGNkYXRhIG5vZGUgc3VjaCBhcyA8IVtDREFUQVtkYXRhXV0+LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBtZXRob2QgY2RhdGFcblx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFN0cmluZyB0byB3cml0ZSBvdXQgaW5zaWRlIHRoZSBjZGF0YS5cblx0XHRcdCAqL1xuXHRcdFx0Y2RhdGE6IGZ1bmN0aW9uKHRleHQpIHtcblx0XHRcdFx0aHRtbC5wdXNoKCc8IVtDREFUQVsnLCB0ZXh0LCAnXV0+Jyk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFdyaXRlcyBhIGNvbW1lbnQgbm9kZSBzdWNoIGFzIDwhLS0gQ29tbWVudCAtLT4uXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBjZGF0YVxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHRleHQgU3RyaW5nIHRvIHdyaXRlIG91dCBpbnNpZGUgdGhlIGNvbW1lbnQuXG5cdFx0XHQgKi9cblx0XHRcdGNvbW1lbnQ6IGZ1bmN0aW9uKHRleHQpIHtcblx0XHRcdFx0aHRtbC5wdXNoKCc8IS0tJywgdGV4dCwgJy0tPicpO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBXcml0ZXMgYSBQSSBub2RlIHN1Y2ggYXMgPD94bWwgYXR0cj1cInZhbHVlXCIgPz4uXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBwaVxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgcGkuXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBTdHJpbmcgdG8gd3JpdGUgb3V0IGluc2lkZSB0aGUgcGkuXG5cdFx0XHQgKi9cblx0XHRcdHBpOiBmdW5jdGlvbihuYW1lLCB0ZXh0KSB7XG5cdFx0XHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRcdFx0aHRtbC5wdXNoKCc8PycsIG5hbWUsICcgJywgZW5jb2RlKHRleHQpLCAnPz4nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRodG1sLnB1c2goJzw/JywgbmFtZSwgJz8+Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaW5kZW50KSB7XG5cdFx0XHRcdFx0aHRtbC5wdXNoKCdcXG4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBXcml0ZXMgYSBkb2N0eXBlIG5vZGUgc3VjaCBhcyA8IURPQ1RZUEUgZGF0YT4uXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBkb2N0eXBlXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBTdHJpbmcgdG8gd3JpdGUgb3V0IGluc2lkZSB0aGUgZG9jdHlwZS5cblx0XHRcdCAqL1xuXHRcdFx0ZG9jdHlwZTogZnVuY3Rpb24odGV4dCkge1xuXHRcdFx0XHRodG1sLnB1c2goJzwhRE9DVFlQRScsIHRleHQsICc+JywgaW5kZW50ID8gJ1xcbicgOiAnJyk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgYnVmZmVyIGlmIG9uZSB3YW50cyB0byByZXVzZSB0aGUgd3JpdGVyLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBtZXRob2QgcmVzZXRcblx0XHRcdCAqL1xuXHRcdFx0cmVzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRodG1sLmxlbmd0aCA9IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdGhlIGNvbnRlbnRzIHRoYXQgZ290IHNlcmlhbGl6ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBnZXRDb250ZW50XG5cdFx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgY29udGVudHMgdGhhdCBnb3Qgd3JpdHRlbiBkb3duLlxuXHRcdFx0ICovXG5cdFx0XHRnZXRDb250ZW50OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGh0bWwuam9pbignJykucmVwbGFjZSgvXFxuJC8sICcnKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9odG1sL1NlcmlhbGl6ZXIuanNcblxuLyoqXG4gKiBTZXJpYWxpemVyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBkb3duIHRoZSBET00gdHJlZSBpbnRvIGEgc3RyaW5nIHVzaW5nIGEgV3JpdGVyIGluc3RhbmNlLlxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IHRpbnltY2UuaHRtbC5TZXJpYWxpemVyKCkuc2VyaWFsaXplKG5ldyB0aW55bWNlLmh0bWwuRG9tUGFyc2VyKCkucGFyc2UoJzxwPnRleHQ8L3A+JykpO1xuICogQGNsYXNzIHRpbnltY2UuaHRtbC5TZXJpYWxpemVyXG4gKiBAdmVyc2lvbiAzLjRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9odG1sL1NlcmlhbGl6ZXJcIiwgW1xuXHRcInRpbnltY2UvaHRtbC9Xcml0ZXJcIixcblx0XCJ0aW55bWNlL2h0bWwvU2NoZW1hXCJcbl0sIGZ1bmN0aW9uKFdyaXRlciwgU2NoZW1hKSB7XG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIGEgbmV3IFNlcmlhbGl6ZXIgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAbWV0aG9kIFNlcmlhbGl6ZXJcblx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE5hbWUvdmFsdWUgc2V0dGluZ3Mgb2JqZWN0LlxuXHQgKiBAcGFyYW0ge3RpbnltY2UuaHRtbC5TY2hlbWF9IHNjaGVtYSBTY2hlbWEgaW5zdGFuY2UgdG8gdXNlLlxuXHQgKi9cblx0cmV0dXJuIGZ1bmN0aW9uKHNldHRpbmdzLCBzY2hlbWEpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXMsIHdyaXRlciA9IG5ldyBXcml0ZXIoc2V0dGluZ3MpO1xuXG5cdFx0c2V0dGluZ3MgPSBzZXR0aW5ncyB8fCB7fTtcblx0XHRzZXR0aW5ncy52YWxpZGF0ZSA9IFwidmFsaWRhdGVcIiBpbiBzZXR0aW5ncyA/IHNldHRpbmdzLnZhbGlkYXRlIDogdHJ1ZTtcblxuXHRcdHNlbGYuc2NoZW1hID0gc2NoZW1hID0gc2NoZW1hIHx8IG5ldyBTY2hlbWEoKTtcblx0XHRzZWxmLndyaXRlciA9IHdyaXRlcjtcblxuXHRcdC8qKlxuXHRcdCAqIFNlcmlhbGl6ZXMgdGhlIHNwZWNpZmllZCBub2RlIGludG8gYSBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG5ldyB0aW55bWNlLmh0bWwuU2VyaWFsaXplcigpLnNlcmlhbGl6ZShuZXcgdGlueW1jZS5odG1sLkRvbVBhcnNlcigpLnBhcnNlKCc8cD50ZXh0PC9wPicpKTtcblx0XHQgKiBAbWV0aG9kIHNlcmlhbGl6ZVxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS5odG1sLk5vZGV9IG5vZGUgTm9kZSBpbnN0YW5jZSB0byBzZXJpYWxpemUuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBTdHJpbmcgd2l0aCBIVE1MIGJhc2VkIG9uIERPTSB0cmVlLlxuXHRcdCAqL1xuXHRcdHNlbGYuc2VyaWFsaXplID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0dmFyIGhhbmRsZXJzLCB2YWxpZGF0ZTtcblxuXHRcdFx0dmFsaWRhdGUgPSBzZXR0aW5ncy52YWxpZGF0ZTtcblxuXHRcdFx0aGFuZGxlcnMgPSB7XG5cdFx0XHRcdC8vICN0ZXh0XG5cdFx0XHRcdDM6IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHR3cml0ZXIudGV4dChub2RlLnZhbHVlLCBub2RlLnJhdyk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gI2NvbW1lbnRcblx0XHRcdFx0ODogZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdHdyaXRlci5jb21tZW50KG5vZGUudmFsdWUpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25cblx0XHRcdFx0NzogZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdHdyaXRlci5waShub2RlLm5hbWUsIG5vZGUudmFsdWUpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIERvY3R5cGVcblx0XHRcdFx0MTA6IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHR3cml0ZXIuZG9jdHlwZShub2RlLnZhbHVlKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDREFUQVxuXHRcdFx0XHQ0OiBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0d3JpdGVyLmNkYXRhKG5vZGUudmFsdWUpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIERvY3VtZW50IGZyYWdtZW50XG5cdFx0XHRcdDExOiBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0aWYgKChub2RlID0gbm9kZS5maXJzdENoaWxkKSkge1xuXHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHR3YWxrKG5vZGUpO1xuXHRcdFx0XHRcdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLm5leHQpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdHdyaXRlci5yZXNldCgpO1xuXG5cdFx0XHRmdW5jdGlvbiB3YWxrKG5vZGUpIHtcblx0XHRcdFx0dmFyIGhhbmRsZXIgPSBoYW5kbGVyc1tub2RlLnR5cGVdLCBuYW1lLCBpc0VtcHR5LCBhdHRycywgYXR0ck5hbWUsIGF0dHJWYWx1ZSwgc29ydGVkQXR0cnMsIGksIGwsIGVsZW1lbnRSdWxlO1xuXG5cdFx0XHRcdGlmICghaGFuZGxlcikge1xuXHRcdFx0XHRcdG5hbWUgPSBub2RlLm5hbWU7XG5cdFx0XHRcdFx0aXNFbXB0eSA9IG5vZGUuc2hvcnRFbmRlZDtcblx0XHRcdFx0XHRhdHRycyA9IG5vZGUuYXR0cmlidXRlcztcblxuXHRcdFx0XHRcdC8vIFNvcnQgYXR0cmlidXRlc1xuXHRcdFx0XHRcdGlmICh2YWxpZGF0ZSAmJiBhdHRycyAmJiBhdHRycy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRzb3J0ZWRBdHRycyA9IFtdO1xuXHRcdFx0XHRcdFx0c29ydGVkQXR0cnMubWFwID0ge307XG5cblx0XHRcdFx0XHRcdGVsZW1lbnRSdWxlID0gc2NoZW1hLmdldEVsZW1lbnRSdWxlKG5vZGUubmFtZSk7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudFJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IGVsZW1lbnRSdWxlLmF0dHJpYnV0ZXNPcmRlci5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRhdHRyTmFtZSA9IGVsZW1lbnRSdWxlLmF0dHJpYnV0ZXNPcmRlcltpXTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChhdHRyTmFtZSBpbiBhdHRycy5tYXApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGF0dHJWYWx1ZSA9IGF0dHJzLm1hcFthdHRyTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0XHRzb3J0ZWRBdHRycy5tYXBbYXR0ck5hbWVdID0gYXR0clZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0c29ydGVkQXR0cnMucHVzaCh7bmFtZTogYXR0ck5hbWUsIHZhbHVlOiBhdHRyVmFsdWV9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRmb3IgKGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXR0ck5hbWUgPSBhdHRyc1tpXS5uYW1lO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCEoYXR0ck5hbWUgaW4gc29ydGVkQXR0cnMubWFwKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0YXR0clZhbHVlID0gYXR0cnMubWFwW2F0dHJOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRcdHNvcnRlZEF0dHJzLm1hcFthdHRyTmFtZV0gPSBhdHRyVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRzb3J0ZWRBdHRycy5wdXNoKHtuYW1lOiBhdHRyTmFtZSwgdmFsdWU6IGF0dHJWYWx1ZX0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGF0dHJzID0gc29ydGVkQXR0cnM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0d3JpdGVyLnN0YXJ0KG5vZGUubmFtZSwgYXR0cnMsIGlzRW1wdHkpO1xuXG5cdFx0XHRcdFx0aWYgKCFpc0VtcHR5KSB7XG5cdFx0XHRcdFx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSB7XG5cdFx0XHRcdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRcdFx0XHR3YWxrKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR3cml0ZXIuZW5kKG5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoYW5kbGVyKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlcmlhbGl6ZSBlbGVtZW50IGFuZCB0cmVhdCBhbGwgbm9uIGVsZW1lbnRzIGFzIGZyYWdtZW50c1xuXHRcdFx0aWYgKG5vZGUudHlwZSA9PSAxICYmICFzZXR0aW5ncy5pbm5lcikge1xuXHRcdFx0XHR3YWxrKG5vZGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnNbMTFdKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gd3JpdGVyLmdldENvbnRlbnQoKTtcblx0XHR9O1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9kb20vU2VyaWFsaXplci5qc1xuXG4vKipcbiAqIFNlcmlhbGl6ZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIERPTSB0cmVlcyBpbnRvIGEgc3RyaW5nLiBDb25zdWx0IHRoZSBUaW55TUNFIFdpa2kgQVBJIGZvclxuICogbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3MuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuZG9tLlNlcmlhbGl6ZXJcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kb20vU2VyaWFsaXplclwiLCBbXG5cdFwidGlueW1jZS9kb20vRE9NVXRpbHNcIixcblx0XCJ0aW55bWNlL2h0bWwvRG9tUGFyc2VyXCIsXG5cdFwidGlueW1jZS9odG1sL1NheFBhcnNlclwiLFxuXHRcInRpbnltY2UvaHRtbC9FbnRpdGllc1wiLFxuXHRcInRpbnltY2UvaHRtbC9TZXJpYWxpemVyXCIsXG5cdFwidGlueW1jZS9odG1sL05vZGVcIixcblx0XCJ0aW55bWNlL2h0bWwvU2NoZW1hXCIsXG5cdFwidGlueW1jZS9FbnZcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL3RleHQvWndzcFwiXG5dLCBmdW5jdGlvbihET01VdGlscywgRG9tUGFyc2VyLCBTYXhQYXJzZXIsIEVudGl0aWVzLCBTZXJpYWxpemVyLCBOb2RlLCBTY2hlbWEsIEVudiwgVG9vbHMsIFp3c3ApIHtcblx0dmFyIGVhY2ggPSBUb29scy5lYWNoLCB0cmltID0gVG9vbHMudHJpbTtcblx0dmFyIERPTSA9IERPTVV0aWxzLkRPTTtcblxuXHQvKipcblx0ICogSUUgMTEgaGFzIGEgZmFudGFzdGljIGJ1ZyB3aGVyZSBpdCB3aWxsIHByb2R1Y2UgdHdvIHRyYWlsaW5nIEJSIGVsZW1lbnRzIHRvIGlmcmFtZSBib2RpZXMgd2hlblxuXHQgKiB0aGUgaWZyYW1lIGlzIGhpZGRlbiBieSBkaXNwbGF5OiBub25lIG9uIGEgcGFyZW50IGNvbnRhaW5lci4gVGhlIERPTSBpcyBhY3R1YWxseSBvdXQgb2Ygc3luY1xuXHQgKiB3aXRoIGlubmVySFRNTCBpbiB0aGlzIGNhc2UuIEl0J3MgbGlrZSBJRSBhZGRzIHNoYWRvdyBET00gQlIgZWxlbWVudHMgdGhhdCBhcHBlYXJzIG9uIGlubmVySFRNTFxuXHQgKiBidXQgbm90IGFzIHRoZSBsYXN0Q2hpbGQgb2YgdGhlIGJvZHkuIFNvIHRoaXMgZml4IHNpbXBseSByZW1vdmVzIHRoZSBsYXN0IHR3b1xuXHQgKiBCUiBlbGVtZW50cyBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC5cblx0ICpcblx0ICogRXhhbXBsZSBvZiB3aGF0IGhhcHBlbnM6IDxib2R5PnRleHQ8L2JvZHk+IGJlY29tZXMgPGJvZHk+dGV4dDxicj48YnI+PC9ib2R5PlxuXHQgKi9cblx0ZnVuY3Rpb24gdHJpbVRyYWlsaW5nQnIocm9vdE5vZGUpIHtcblx0XHR2YXIgYnJOb2RlMSwgYnJOb2RlMjtcblxuXHRcdGZ1bmN0aW9uIGlzQnIobm9kZSkge1xuXHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS5uYW1lID09PSAnYnInO1xuXHRcdH1cblxuXHRcdGJyTm9kZTEgPSByb290Tm9kZS5sYXN0Q2hpbGQ7XG5cdFx0aWYgKGlzQnIoYnJOb2RlMSkpIHtcblx0XHRcdGJyTm9kZTIgPSBick5vZGUxLnByZXY7XG5cblx0XHRcdGlmIChpc0JyKGJyTm9kZTIpKSB7XG5cdFx0XHRcdGJyTm9kZTEucmVtb3ZlKCk7XG5cdFx0XHRcdGJyTm9kZTIucmVtb3ZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgYSBuZXcgRE9NIHNlcmlhbGl6ZXIgY2xhc3MuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAbWV0aG9kIFNlcmlhbGl6ZXJcblx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIFNlcmlhbGl6ZXIgc2V0dGluZ3Mgb2JqZWN0LlxuXHQgKiBAcGFyYW0ge3RpbnltY2UuRWRpdG9yfSBlZGl0b3IgT3B0aW9uYWwgZWRpdG9yIHRvIGJpbmQgZXZlbnRzIHRvIGFuZCBnZXQgc2NoZW1hL2RvbSBmcm9tLlxuXHQgKi9cblx0cmV0dXJuIGZ1bmN0aW9uKHNldHRpbmdzLCBlZGl0b3IpIHtcblx0XHR2YXIgZG9tLCBzY2hlbWEsIGh0bWxQYXJzZXIsIHRlbXBBdHRycyA9IFtcImRhdGEtbWNlLXNlbGVjdGVkXCJdO1xuXG5cdFx0aWYgKGVkaXRvcikge1xuXHRcdFx0ZG9tID0gZWRpdG9yLmRvbTtcblx0XHRcdHNjaGVtYSA9IGVkaXRvci5zY2hlbWE7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdHJpbUh0bWwoaHRtbCkge1xuXHRcdFx0dmFyIHRyaW1Db250ZW50UmVnRXhwID0gbmV3IFJlZ0V4cChbXG5cdFx0XHRcdCc8c3BhbltePl0rZGF0YS1tY2UtYm9ndXNbXj5dKz5bXFx1MjAwQlxcdUZFRkZdKzxcXFxcL3NwYW4+JywgLy8gVHJpbSBib2d1cyBzcGFucyBsaWtlIGNhcmV0IGNvbnRhaW5lcnNcblx0XHRcdFx0J1xcXFxzPygnICsgdGVtcEF0dHJzLmpvaW4oJ3wnKSArICcpPVwiW15cIl0rXCInIC8vIFRyaW0gdGVtcG9yYXR5IGRhdGEtbWNlIHByZWZpeGVkIGF0dHJpYnV0ZXMgbGlrZSBkYXRhLW1jZS1zZWxlY3RlZFxuXHRcdFx0XS5qb2luKCd8JyksICdnaScpO1xuXG5cdFx0XHRodG1sID0gWndzcC50cmltKGh0bWwucmVwbGFjZSh0cmltQ29udGVudFJlZ0V4cCwgJycpKTtcblxuXHRcdFx0cmV0dXJuIGh0bWw7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdHJpbUNvbnRlbnQoaHRtbCkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBodG1sO1xuXHRcdFx0dmFyIGJvZ3VzQWxsUmVnRXhwID0gLzwoXFx3KykgW14+XSpkYXRhLW1jZS1ib2d1cz1cImFsbFwiW14+XSo+L2c7XG5cdFx0XHR2YXIgZW5kVGFnSW5kZXgsIGluZGV4LCBtYXRjaExlbmd0aCwgbWF0Y2hlcywgc2hvcnRFbmRlZEVsZW1lbnRzLCBzY2hlbWEgPSBlZGl0b3Iuc2NoZW1hO1xuXG5cdFx0XHRjb250ZW50ID0gdHJpbUh0bWwoY29udGVudCk7XG5cdFx0XHRzaG9ydEVuZGVkRWxlbWVudHMgPSBzY2hlbWEuZ2V0U2hvcnRFbmRlZEVsZW1lbnRzKCk7XG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgYm9ndXMgZWxlbWVudHMgbWFya2VkIHdpdGggXCJhbGxcIlxuXHRcdFx0d2hpbGUgKChtYXRjaGVzID0gYm9ndXNBbGxSZWdFeHAuZXhlYyhjb250ZW50KSkpIHtcblx0XHRcdFx0aW5kZXggPSBib2d1c0FsbFJlZ0V4cC5sYXN0SW5kZXg7XG5cdFx0XHRcdG1hdGNoTGVuZ3RoID0gbWF0Y2hlc1swXS5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKHNob3J0RW5kZWRFbGVtZW50c1ttYXRjaGVzWzFdXSkge1xuXHRcdFx0XHRcdGVuZFRhZ0luZGV4ID0gaW5kZXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZW5kVGFnSW5kZXggPSBTYXhQYXJzZXIuZmluZEVuZFRhZyhzY2hlbWEsIGNvbnRlbnQsIGluZGV4KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBpbmRleCAtIG1hdGNoTGVuZ3RoKSArIGNvbnRlbnQuc3Vic3RyaW5nKGVuZFRhZ0luZGV4KTtcblx0XHRcdFx0Ym9ndXNBbGxSZWdFeHAubGFzdEluZGV4ID0gaW5kZXggLSBtYXRjaExlbmd0aDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIHRyaW1tZWQgdmVyc2lvbiBvZiB0aGUgZWRpdG9yIGNvbnRlbnRzIHRvIGJlIHVzZWQgZm9yIHRoZSB1bmRvIGxldmVsLiBUaGlzXG5cdFx0ICogd2lsbCByZW1vdmUgYW55IGRhdGEtbWNlLWJvZ3VzPVwiYWxsXCIgbWFya2VkIGVsZW1lbnRzIHNpbmNlIHRoZXNlIGFyZSB1c2VkIGZvciBVSSBpdCB3aWxsIGFsc29cblx0XHQgKiByZW1vdmUgdGhlIGRhdGEtbWNlLXNlbGVjdGVkIGF0dHJpYnV0ZXMgdXNlZCBmb3Igc2VsZWN0aW9uIG9mIG9iamVjdHMgYW5kIGNhcmV0IGNvbnRhaW5lcnMuXG5cdFx0ICogSXQgd2lsbCBrZWVwIGFsbCBkYXRhLW1jZS1ib2d1cz1cIjFcIiBlbGVtZW50cyBzaW5jZSB0aGVzZSBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgY2FyZXQgZXRjIGFuZCB3aWxsXG5cdFx0ICogYmUgcmVtb3ZlZCBieSB0aGUgc2VyaWFsaXphdGlvbiBsb2dpYyB3aGVuIHlvdSBzYXZlLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgY29udGVudHMgb2YgdGhlIGVkaXRvciBleGNsdWRpbmcgc29tZSBpbnRlcm5hbCBib2d1cyBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBnZXRUcmltbWVkQ29udGVudCgpIHtcblx0XHRcdHJldHVybiB0cmltQ29udGVudChlZGl0b3IuZ2V0Qm9keSgpLmlubmVySFRNTCk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWRkVGVtcEF0dHIobmFtZSkge1xuXHRcdFx0aWYgKFRvb2xzLmluQXJyYXkodGVtcEF0dHJzLCBuYW1lKSA9PT0gLTEpIHtcblx0XHRcdFx0aHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIobmFtZSwgZnVuY3Rpb24obm9kZXMsIG5hbWUpIHtcblx0XHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aDtcblxuXHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRcdG5vZGVzW2ldLmF0dHIobmFtZSwgbnVsbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0ZW1wQXR0cnMucHVzaChuYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IERPTSBhbmQgU2NoZW1hIGlmIHRoZXkgYXJlIHVuZGVmaW5lZFxuXHRcdGRvbSA9IGRvbSB8fCBET007XG5cdFx0c2NoZW1hID0gc2NoZW1hIHx8IG5ldyBTY2hlbWEoc2V0dGluZ3MpO1xuXHRcdHNldHRpbmdzLmVudGl0eV9lbmNvZGluZyA9IHNldHRpbmdzLmVudGl0eV9lbmNvZGluZyB8fCAnbmFtZWQnO1xuXHRcdHNldHRpbmdzLnJlbW92ZV90cmFpbGluZ19icnMgPSBcInJlbW92ZV90cmFpbGluZ19icnNcIiBpbiBzZXR0aW5ncyA/IHNldHRpbmdzLnJlbW92ZV90cmFpbGluZ19icnMgOiB0cnVlO1xuXG5cdFx0aHRtbFBhcnNlciA9IG5ldyBEb21QYXJzZXIoc2V0dGluZ3MsIHNjaGVtYSk7XG5cblx0XHQvLyBDb252ZXJ0IHRhYmluZGV4IGJhY2sgdG8gZWxlbWVudHMgd2hlbiBzZXJpYWxpemluZyBjb250ZW50c1xuXHRcdGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdkYXRhLW1jZS10YWJpbmRleCcsIGZ1bmN0aW9uKG5vZGVzLCBuYW1lKSB7XG5cdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcblxuXHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRub2RlID0gbm9kZXNbaV07XG5cdFx0XHRcdG5vZGUuYXR0cigndGFiaW5kZXgnLCBub2RlLmF0dHJpYnV0ZXMubWFwWydkYXRhLW1jZS10YWJpbmRleCddKTtcblx0XHRcdFx0bm9kZS5hdHRyKG5hbWUsIG51bGwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gQ29udmVydCBtb3ZlIGRhdGEtbWNlLXNyYywgZGF0YS1tY2UtaHJlZiBhbmQgZGF0YS1tY2Utc3R5bGUgaW50byBub2RlcyBvciBwcm9jZXNzIHRoZW0gaWYgbmVlZGVkXG5cdFx0aHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ3NyYyxocmVmLHN0eWxlJywgZnVuY3Rpb24obm9kZXMsIG5hbWUpIHtcblx0XHRcdHZhciBpID0gbm9kZXMubGVuZ3RoLCBub2RlLCB2YWx1ZSwgaW50ZXJuYWxOYW1lID0gJ2RhdGEtbWNlLScgKyBuYW1lO1xuXHRcdFx0dmFyIHVybENvbnZlcnRlciA9IHNldHRpbmdzLnVybF9jb252ZXJ0ZXIsIHVybENvbnZlcnRlclNjb3BlID0gc2V0dGluZ3MudXJsX2NvbnZlcnRlcl9zY29wZSwgdW5kZWY7XG5cblx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldO1xuXG5cdFx0XHRcdHZhbHVlID0gbm9kZS5hdHRyaWJ1dGVzLm1hcFtpbnRlcm5hbE5hbWVdO1xuXHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0Ly8gU2V0IGV4dGVybmFsIG5hbWUgdG8gaW50ZXJuYWwgdmFsdWUgYW5kIHJlbW92ZSBpbnRlcm5hbFxuXHRcdFx0XHRcdG5vZGUuYXR0cihuYW1lLCB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiBudWxsKTtcblx0XHRcdFx0XHRub2RlLmF0dHIoaW50ZXJuYWxOYW1lLCBudWxsKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBObyBpbnRlcm5hbCBhdHRyaWJ1dGUgZm91bmQgdGhlbiBjb252ZXJ0IHRoZSB2YWx1ZSB3ZSBoYXZlIGluIHRoZSBET01cblx0XHRcdFx0XHR2YWx1ZSA9IG5vZGUuYXR0cmlidXRlcy5tYXBbbmFtZV07XG5cblx0XHRcdFx0XHRpZiAobmFtZSA9PT0gXCJzdHlsZVwiKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGRvbS5zZXJpYWxpemVTdHlsZShkb20ucGFyc2VTdHlsZSh2YWx1ZSksIG5vZGUubmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh1cmxDb252ZXJ0ZXIpIHtcblx0XHRcdFx0XHRcdHZhbHVlID0gdXJsQ29udmVydGVyLmNhbGwodXJsQ29udmVydGVyU2NvcGUsIHZhbHVlLCBuYW1lLCBub2RlLm5hbWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5vZGUuYXR0cihuYW1lLCB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gUmVtb3ZlIGludGVybmFsIGNsYXNzZXMgbWNlSXRlbTwuLj4gb3IgbWNlU2VsZWN0ZWRcblx0XHRodG1sUGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignY2xhc3MnLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGgsIG5vZGUsIHZhbHVlO1xuXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdG5vZGUgPSBub2Rlc1tpXTtcblx0XHRcdFx0dmFsdWUgPSBub2RlLmF0dHIoJ2NsYXNzJyk7XG5cblx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBub2RlLmF0dHIoJ2NsYXNzJykucmVwbGFjZSgvKD86XnxcXHMpbWNlLWl0ZW0tXFx3Kyg/IVxcUykvZywgJycpO1xuXHRcdFx0XHRcdG5vZGUuYXR0cignY2xhc3MnLCB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gUmVtb3ZlIGJvb2ttYXJrIGVsZW1lbnRzXG5cdFx0aHRtbFBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2RhdGEtbWNlLXR5cGUnLCBmdW5jdGlvbihub2RlcywgbmFtZSwgYXJncykge1xuXHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG5cblx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldO1xuXG5cdFx0XHRcdGlmIChub2RlLmF0dHJpYnV0ZXMubWFwWydkYXRhLW1jZS10eXBlJ10gPT09ICdib29rbWFyaycgJiYgIWFyZ3MuY2xlYW51cCkge1xuXHRcdFx0XHRcdG5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGh0bWxQYXJzZXIuYWRkTm9kZUZpbHRlcignbm9zY3JpcHQnLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG5cblx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldLmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0XHRub2RlLnZhbHVlID0gRW50aXRpZXMuZGVjb2RlKG5vZGUudmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBGb3JjZSBzY3JpcHQgaW50byBDREFUQSBzZWN0aW9ucyBhbmQgcmVtb3ZlIHRoZSBtY2UtIHByZWZpeCBhbHNvIGFkZCBjb21tZW50cyBhcm91bmQgc3R5bGVzXG5cdFx0aHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCdzY3JpcHQsc3R5bGUnLCBmdW5jdGlvbihub2RlcywgbmFtZSkge1xuXHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGgsIG5vZGUsIHZhbHVlLCB0eXBlO1xuXG5cdFx0XHRmdW5jdGlvbiB0cmltKHZhbHVlKSB7XG5cdFx0XHRcdC8qanNoaW50IG1heGxlbjoyNTUgKi9cblx0XHRcdFx0Lyplc2xpbnQgbWF4LWxlbjowICovXG5cdFx0XHRcdHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oPCEtLVxcW0NEQVRBXFxbfFxcXVxcXS0tPikvZywgJ1xcbicpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvXltcXHJcXG5dKnxbXFxyXFxuXSokL2csICcnKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL15cXHMqKCg8IS0tKT8oXFxzKlxcL1xcLyk/XFxzKjwhXFxbQ0RBVEFcXFt8KDwhLS1cXHMqKT9cXC9cXCpcXHMqPCFcXFtDREFUQVxcW1xccypcXCpcXC98KFxcL1xcLyk/XFxzKjwhLS18XFwvXFwqXFxzKjwhLS1cXHMqXFwqXFwvKVxccypbXFxyXFxuXSovZ2ksICcnKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccyooXFwvXFwqXFxzKlxcXVxcXT5cXHMqXFwqXFwvKC0tPik/fFxccypcXC9cXC9cXHMqXFxdXFxdPigtLT4pP3xcXC9cXC9cXHMqKC0tPik/fFxcXVxcXT58XFwvXFwqXFxzKi0tPlxccypcXCpcXC98XFxzKi0tPlxccyopXFxzKiQvZywgJycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdG5vZGUgPSBub2Rlc1tpXTtcblx0XHRcdFx0dmFsdWUgPSBub2RlLmZpcnN0Q2hpbGQgPyBub2RlLmZpcnN0Q2hpbGQudmFsdWUgOiAnJztcblxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJzY3JpcHRcIikge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBtY2UtIHByZWZpeCBmcm9tIHNjcmlwdCBlbGVtZW50cyBhbmQgcmVtb3ZlIGRlZmF1bHQgdHlwZSBzaW5jZSB0aGUgdXNlciBzcGVjaWZpZWRcblx0XHRcdFx0XHQvLyBhIHNjcmlwdCBlbGVtZW50IHdpdGhvdXQgdHlwZSBhdHRyaWJ1dGVcblx0XHRcdFx0XHR0eXBlID0gbm9kZS5hdHRyKCd0eXBlJyk7XG5cdFx0XHRcdFx0aWYgKHR5cGUpIHtcblx0XHRcdFx0XHRcdG5vZGUuYXR0cigndHlwZScsIHR5cGUgPT0gJ21jZS1uby90eXBlJyA/IG51bGwgOiB0eXBlLnJlcGxhY2UoL15tY2VcXC0vLCAnJykpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRub2RlLmZpcnN0Q2hpbGQudmFsdWUgPSAnLy8gPCFbQ0RBVEFbXFxuJyArIHRyaW0odmFsdWUpICsgJ1xcbi8vIF1dPic7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRub2RlLmZpcnN0Q2hpbGQudmFsdWUgPSAnPCEtLVxcbicgKyB0cmltKHZhbHVlKSArICdcXG4tLT4nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gQ29udmVydCBjb21tZW50cyB0byBjZGF0YSBhbmQgaGFuZGxlIHByb3RlY3RlZCBjb21tZW50c1xuXHRcdGh0bWxQYXJzZXIuYWRkTm9kZUZpbHRlcignI2NvbW1lbnQnLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG5cblx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldO1xuXG5cdFx0XHRcdGlmIChub2RlLnZhbHVlLmluZGV4T2YoJ1tDREFUQVsnKSA9PT0gMCkge1xuXHRcdFx0XHRcdG5vZGUubmFtZSA9ICcjY2RhdGEnO1xuXHRcdFx0XHRcdG5vZGUudHlwZSA9IDQ7XG5cdFx0XHRcdFx0bm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVwbGFjZSgvXlxcW0NEQVRBXFxbfFxcXVxcXSQvZywgJycpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG5vZGUudmFsdWUuaW5kZXhPZignbWNlOnByb3RlY3RlZCAnKSA9PT0gMCkge1xuXHRcdFx0XHRcdG5vZGUubmFtZSA9IFwiI3RleHRcIjtcblx0XHRcdFx0XHRub2RlLnR5cGUgPSAzO1xuXHRcdFx0XHRcdG5vZGUucmF3ID0gdHJ1ZTtcblx0XHRcdFx0XHRub2RlLnZhbHVlID0gdW5lc2NhcGUobm9kZS52YWx1ZSkuc3Vic3RyKDE0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aHRtbFBhcnNlci5hZGROb2RlRmlsdGVyKCd4bWw6bmFtZXNwYWNlLGlucHV0JywgZnVuY3Rpb24obm9kZXMsIG5hbWUpIHtcblx0XHRcdHZhciBpID0gbm9kZXMubGVuZ3RoLCBub2RlO1xuXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdG5vZGUgPSBub2Rlc1tpXTtcblx0XHRcdFx0aWYgKG5vZGUudHlwZSA9PT0gNykge1xuXHRcdFx0XHRcdG5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAxKSB7XG5cdFx0XHRcdFx0aWYgKG5hbWUgPT09IFwiaW5wdXRcIiAmJiAhKFwidHlwZVwiIGluIG5vZGUuYXR0cmlidXRlcy5tYXApKSB7XG5cdFx0XHRcdFx0XHRub2RlLmF0dHIoJ3R5cGUnLCAndGV4dCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gUmVtb3ZlIGludGVybmFsIGRhdGEgYXR0cmlidXRlc1xuXHRcdGh0bWxQYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKFxuXHRcdFx0J2RhdGEtbWNlLXNyYyxkYXRhLW1jZS1ocmVmLGRhdGEtbWNlLXN0eWxlLCcgK1xuXHRcdFx0J2RhdGEtbWNlLXNlbGVjdGVkLGRhdGEtbWNlLWV4cGFuZG8sJyArXG5cdFx0XHQnZGF0YS1tY2UtdHlwZSxkYXRhLW1jZS1yZXNpemUnLFxuXG5cdFx0XHRmdW5jdGlvbihub2RlcywgbmFtZSkge1xuXHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0bm9kZXNbaV0uYXR0cihuYW1lLCBudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHQvLyBSZXR1cm4gcHVibGljIG1ldGhvZHNcblx0XHRyZXR1cm4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTY2hlbWEgaW5zdGFuY2UgdGhhdCB3YXMgdXNlZCB0byB3aGVuIHRoZSBTZXJpYWxpemVyIHdhcyBjb25zdHJ1Y3RlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAZmllbGQge3RpbnltY2UuaHRtbC5TY2hlbWF9IHNjaGVtYVxuXHRcdFx0ICovXG5cdFx0XHRzY2hlbWE6IHNjaGVtYSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIGEgbm9kZSBmaWx0ZXIgZnVuY3Rpb24gdG8gdGhlIHBhcnNlciB1c2VkIGJ5IHRoZSBzZXJpYWxpemVyLCB0aGUgcGFyc2VyIHdpbGwgY29sbGVjdCB0aGUgc3BlY2lmaWVkIG5vZGVzIGJ5IG5hbWVcblx0XHRcdCAqIGFuZCB0aGVuIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIG9uZXMgaXQgaGFzIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGRvY3VtZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBwYXJzZXIuYWRkTm9kZUZpbHRlcigncCxoMScsIGZ1bmN0aW9uKG5vZGVzLCBuYW1lKSB7XG5cdFx0XHQgKlx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQgKlx0XHRcdGNvbnNvbGUubG9nKG5vZGVzW2ldLm5hbWUpO1xuXHRcdFx0ICpcdFx0fVxuXHRcdFx0ICogfSk7XG5cdFx0XHQgKiBAbWV0aG9kIGFkZE5vZGVGaWx0ZXJcblx0XHRcdCAqIEBtZXRob2Qge1N0cmluZ30gbmFtZSBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBub2RlcyB0byBjb2xsZWN0LlxuXHRcdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIGl0IGhhcyBjb2xsZWN0ZWQgbm9kZXMuXG5cdFx0XHQgKi9cblx0XHRcdGFkZE5vZGVGaWx0ZXI6IGh0bWxQYXJzZXIuYWRkTm9kZUZpbHRlcixcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIGEgYXR0cmlidXRlIGZpbHRlciBmdW5jdGlvbiB0byB0aGUgcGFyc2VyIHVzZWQgYnkgdGhlIHNlcmlhbGl6ZXIsIHRoZSBwYXJzZXIgd2lsbFxuXHRcdFx0ICogY29sbGVjdCBub2RlcyB0aGF0IGhhcyB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZXNcblx0XHRcdCAqIGFuZCB0aGVuIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIG9uZXMgaXQgaGFzIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGRvY3VtZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBwYXJzZXIuYWRkQXR0cmlidXRlRmlsdGVyKCdzcmMsaHJlZicsIGZ1bmN0aW9uKG5vZGVzLCBuYW1lKSB7XG5cdFx0XHQgKlx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQgKlx0XHRcdGNvbnNvbGUubG9nKG5vZGVzW2ldLm5hbWUpO1xuXHRcdFx0ICpcdFx0fVxuXHRcdFx0ICogfSk7XG5cdFx0XHQgKiBAbWV0aG9kIGFkZEF0dHJpYnV0ZUZpbHRlclxuXHRcdFx0ICogQG1ldGhvZCB7U3RyaW5nfSBuYW1lIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG5vZGVzIHRvIGNvbGxlY3QuXG5cdFx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgaXQgaGFzIGNvbGxlY3RlZCBub2Rlcy5cblx0XHRcdCAqL1xuXHRcdFx0YWRkQXR0cmlidXRlRmlsdGVyOiBodG1sUGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcixcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXJpYWxpemVzIHRoZSBzcGVjaWZpZWQgYnJvd3NlciBET00gbm9kZSBpbnRvIGEgSFRNTCBzdHJpbmcuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBzZXJpYWxpemVcblx0XHRcdCAqIEBwYXJhbSB7RE9NTm9kZX0gbm9kZSBET00gbm9kZSB0byBzZXJpYWxpemUuXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gYXJncyBBcmd1bWVudHMgb3B0aW9uIHRoYXQgZ2V0cyBwYXNzZWQgdG8gZXZlbnQgaGFuZGxlcnMuXG5cdFx0XHQgKi9cblx0XHRcdHNlcmlhbGl6ZTogZnVuY3Rpb24obm9kZSwgYXJncykge1xuXHRcdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGltcGwsIGRvYywgb2xkRG9jLCBodG1sU2VyaWFsaXplciwgY29udGVudCwgcm9vdE5vZGU7XG5cblx0XHRcdFx0Ly8gRXhwbG9yZXIgd29uJ3QgY2xvbmUgY29udGVudHMgb2Ygc2NyaXB0IGFuZCBzdHlsZSBhbmQgdGhlXG5cdFx0XHRcdC8vIHNlbGVjdGVkIGluZGV4IG9mIHNlbGVjdCBlbGVtZW50cyBhcmUgY2xlYXJlZCBvbiBhIGNsb25lIG9wZXJhdGlvbi5cblx0XHRcdFx0aWYgKEVudi5pZSAmJiBkb20uc2VsZWN0KCdzY3JpcHQsc3R5bGUsc2VsZWN0LG1hcCcpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRjb250ZW50ID0gbm9kZS5pbm5lckhUTUw7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcblx0XHRcdFx0XHRkb20uc2V0SFRNTChub2RlLCBjb250ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRub2RlID0gbm9kZS5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBOb2RlcyBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byBzb21ldGhpbmcgaW4gV2ViS2l0L09wZXJhXG5cdFx0XHRcdC8vIFRoaXMgZml4IHdpbGwgbWFrZSBET00gcmFuZ2VzIGFuZCBtYWtlIFNpenpsZSBoYXBweSFcblx0XHRcdFx0aW1wbCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uO1xuXHRcdFx0XHRpZiAoaW1wbC5jcmVhdGVIVE1MRG9jdW1lbnQpIHtcblx0XHRcdFx0XHQvLyBDcmVhdGUgYW4gZW1wdHkgSFRNTCBkb2N1bWVudFxuXHRcdFx0XHRcdGRvYyA9IGltcGwuY3JlYXRlSFRNTERvY3VtZW50KFwiXCIpO1xuXG5cdFx0XHRcdFx0Ly8gQWRkIHRoZSBlbGVtZW50IG9yIGl0J3MgY2hpbGRyZW4gaWYgaXQncyBhIGJvZHkgZWxlbWVudCB0byB0aGUgbmV3IGRvY3VtZW50XG5cdFx0XHRcdFx0ZWFjaChub2RlLm5vZGVOYW1lID09ICdCT0RZJyA/IG5vZGUuY2hpbGROb2RlcyA6IFtub2RlXSwgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdFx0ZG9jLmJvZHkuYXBwZW5kQ2hpbGQoZG9jLmltcG9ydE5vZGUobm9kZSwgdHJ1ZSkpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gR3JhYiBmaXJzdCBjaGlsZCBvciBib2R5IGVsZW1lbnQgZm9yIHNlcmlhbGl6YXRpb25cblx0XHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSAhPSAnQk9EWScpIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBkb2MuYm9keS5maXJzdENoaWxkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZG9jLmJvZHk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gc2V0IHRoZSBuZXcgZG9jdW1lbnQgaW4gRE9NVXRpbHMgc28gY3JlYXRlRWxlbWVudCBldGMgd29ya3Ncblx0XHRcdFx0XHRvbGREb2MgPSBkb20uZG9jO1xuXHRcdFx0XHRcdGRvbS5kb2MgPSBkb2M7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhcmdzID0gYXJncyB8fCB7fTtcblx0XHRcdFx0YXJncy5mb3JtYXQgPSBhcmdzLmZvcm1hdCB8fCAnaHRtbCc7XG5cblx0XHRcdFx0Ly8gRG9uJ3Qgd3JhcCBjb250ZW50IGlmIHdlIHdhbnQgc2VsZWN0ZWQgaHRtbFxuXHRcdFx0XHRpZiAoYXJncy5zZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRhcmdzLmZvcmNlZF9yb290X2Jsb2NrID0gJyc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcmUgcHJvY2Vzc1xuXHRcdFx0XHRpZiAoIWFyZ3Mubm9fZXZlbnRzKSB7XG5cdFx0XHRcdFx0YXJncy5ub2RlID0gbm9kZTtcblx0XHRcdFx0XHRzZWxmLm9uUHJlUHJvY2VzcyhhcmdzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFBhcnNlIEhUTUxcblx0XHRcdFx0cm9vdE5vZGUgPSBodG1sUGFyc2VyLnBhcnNlKHRyaW0oYXJncy5nZXRJbm5lciA/IG5vZGUuaW5uZXJIVE1MIDogZG9tLmdldE91dGVySFRNTChub2RlKSksIGFyZ3MpO1xuXHRcdFx0XHR0cmltVHJhaWxpbmdCcihyb290Tm9kZSk7XG5cblx0XHRcdFx0Ly8gU2VyaWFsaXplIEhUTUxcblx0XHRcdFx0aHRtbFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplcihzZXR0aW5ncywgc2NoZW1hKTtcblx0XHRcdFx0YXJncy5jb250ZW50ID0gaHRtbFNlcmlhbGl6ZXIuc2VyaWFsaXplKHJvb3ROb2RlKTtcblxuXHRcdFx0XHQvLyBSZXBsYWNlIGFsbCBCT00gY2hhcmFjdGVycyBmb3Igbm93IHVudGlsIHdlIGNhbiBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uXG5cdFx0XHRcdGlmICghYXJncy5jbGVhbnVwKSB7XG5cdFx0XHRcdFx0YXJncy5jb250ZW50ID0gWndzcC50cmltKGFyZ3MuY29udGVudCk7XG5cdFx0XHRcdFx0YXJncy5jb250ZW50ID0gYXJncy5jb250ZW50LnJlcGxhY2UoL1xcdUZFRkYvZywgJycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUG9zdCBwcm9jZXNzXG5cdFx0XHRcdGlmICghYXJncy5ub19ldmVudHMpIHtcblx0XHRcdFx0XHRzZWxmLm9uUG9zdFByb2Nlc3MoYXJncyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvbGQgZG9jdW1lbnQgaWYgaXQgd2FzIGNoYW5nZWRcblx0XHRcdFx0aWYgKG9sZERvYykge1xuXHRcdFx0XHRcdGRvbS5kb2MgPSBvbGREb2M7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhcmdzLm5vZGUgPSBudWxsO1xuXG5cdFx0XHRcdHJldHVybiBhcmdzLmNvbnRlbnQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEFkZHMgdmFsaWQgZWxlbWVudHMgcnVsZXMgdG8gdGhlIHNlcmlhbGl6ZXJzIHNjaGVtYSBpbnN0YW5jZSB0aGlzIGVuYWJsZXMgeW91IHRvIHNwZWNpZnkgdGhpbmdzXG5cdFx0XHQgKiBsaWtlIHdoYXQgZWxlbWVudHMgc2hvdWxkIGJlIG91dHB1dHRlZCBhbmQgd2hhdCBhdHRyaWJ1dGVzIHNwZWNpZmljIGVsZW1lbnRzIG1pZ2h0IGhhdmUuXG5cdFx0XHQgKiBDb25zdWx0IHRoZSBXaWtpIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyBmb3JtYXQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBhZGRSdWxlc1xuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHJ1bGVzIFZhbGlkIGVsZW1lbnRzIHJ1bGVzIHN0cmluZyB0byBhZGQgdG8gc2NoZW1hLlxuXHRcdFx0ICovXG5cdFx0XHRhZGRSdWxlczogZnVuY3Rpb24ocnVsZXMpIHtcblx0XHRcdFx0c2NoZW1hLmFkZFZhbGlkRWxlbWVudHMocnVsZXMpO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXRzIHRoZSB2YWxpZCBlbGVtZW50cyBydWxlcyB0byB0aGUgc2VyaWFsaXplcnMgc2NoZW1hIGluc3RhbmNlIHRoaXMgZW5hYmxlcyB5b3UgdG8gc3BlY2lmeSB0aGluZ3Ncblx0XHRcdCAqIGxpa2Ugd2hhdCBlbGVtZW50cyBzaG91bGQgYmUgb3V0cHV0dGVkIGFuZCB3aGF0IGF0dHJpYnV0ZXMgc3BlY2lmaWMgZWxlbWVudHMgbWlnaHQgaGF2ZS5cblx0XHRcdCAqIENvbnN1bHQgdGhlIFdpa2kgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIGZvcm1hdC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIHNldFJ1bGVzXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcnVsZXMgVmFsaWQgZWxlbWVudHMgcnVsZXMgc3RyaW5nLlxuXHRcdFx0ICovXG5cdFx0XHRzZXRSdWxlczogZnVuY3Rpb24ocnVsZXMpIHtcblx0XHRcdFx0c2NoZW1hLnNldFZhbGlkRWxlbWVudHMocnVsZXMpO1xuXHRcdFx0fSxcblxuXHRcdFx0b25QcmVQcm9jZXNzOiBmdW5jdGlvbihhcmdzKSB7XG5cdFx0XHRcdGlmIChlZGl0b3IpIHtcblx0XHRcdFx0XHRlZGl0b3IuZmlyZSgnUHJlUHJvY2VzcycsIGFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRvblBvc3RQcm9jZXNzOiBmdW5jdGlvbihhcmdzKSB7XG5cdFx0XHRcdGlmIChlZGl0b3IpIHtcblx0XHRcdFx0XHRlZGl0b3IuZmlyZSgnUG9zdFByb2Nlc3MnLCBhcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIGEgdGVtcG9yYXJ5IGludGVybmFsIGF0dHJpYnV0ZSB0aGVzZSBhdHRyaWJ1dGVzIHdpbGwgZ2V0IHJlbW92ZWQgb24gdW5kbyBhbmRcblx0XHRcdCAqIHdoZW4gZ2V0dGluZyBjb250ZW50cyBvdXQgb2YgdGhlIGVkaXRvci5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIGFkZFRlbXBBdHRyXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBzdHJpbmdcblx0XHRcdCAqL1xuXHRcdFx0YWRkVGVtcEF0dHI6IGFkZFRlbXBBdHRyLFxuXG5cdFx0XHQvLyBJbnRlcm5hbFxuXHRcdFx0dHJpbUh0bWw6IHRyaW1IdG1sLFxuXHRcdFx0Z2V0VHJpbW1lZENvbnRlbnQ6IGdldFRyaW1tZWRDb250ZW50LFxuXHRcdFx0dHJpbUNvbnRlbnQ6IHRyaW1Db250ZW50XG5cdFx0fTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZG9tL1RyaWRlbnRTZWxlY3Rpb24uanNcblxuLyoqXG4gKiBUcmlkZW50U2VsZWN0aW9uLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogU2VsZWN0aW9uIGNsYXNzIGZvciBvbGQgZXhwbG9yZXIgdmVyc2lvbnMuIFRoaXMgb25lIGZha2VzIHRoZVxuICogbmF0aXZlIHNlbGVjdGlvbiBvYmplY3QgYXZhaWxhYmxlIG9uIG1vZGVybiBicm93c2Vycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuZG9tLlRyaWRlbnRTZWxlY3Rpb25cbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kb20vVHJpZGVudFNlbGVjdGlvblwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdGZ1bmN0aW9uIFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcblx0XHR2YXIgc2VsZiA9IHRoaXMsIGRvbSA9IHNlbGVjdGlvbi5kb20sIEZBTFNFID0gZmFsc2U7XG5cblx0XHRmdW5jdGlvbiBnZXRQb3NpdGlvbihybmcsIHN0YXJ0KSB7XG5cdFx0XHR2YXIgY2hlY2tSbmcsIHN0YXJ0SW5kZXggPSAwLCBlbmRJbmRleCwgaW5zaWRlLFxuXHRcdFx0XHRjaGlsZHJlbiwgY2hpbGQsIG9mZnNldCwgaW5kZXgsIHBvc2l0aW9uID0gLTEsIHBhcmVudDtcblxuXHRcdFx0Ly8gU2V0dXAgdGVzdCByYW5nZSwgY29sbGFwc2UgaXQgYW5kIGdldCB0aGUgcGFyZW50XG5cdFx0XHRjaGVja1JuZyA9IHJuZy5kdXBsaWNhdGUoKTtcblx0XHRcdGNoZWNrUm5nLmNvbGxhcHNlKHN0YXJ0KTtcblx0XHRcdHBhcmVudCA9IGNoZWNrUm5nLnBhcmVudEVsZW1lbnQoKTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHNlbGVjdGlvbiBpcyB3aXRoaW4gdGhlIHJpZ2h0IGRvY3VtZW50XG5cdFx0XHRpZiAocGFyZW50Lm93bmVyRG9jdW1lbnQgIT09IHNlbGVjdGlvbi5kb20uZG9jKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSUUgd2lsbCByZXBvcnQgbm9uIGVkaXRhYmxlIGVsZW1lbnRzIGFzIGl0J3MgcGFyZW50IHNvIGxvb2sgZm9yIGFuIGVkaXRhYmxlIG9uZVxuXHRcdFx0d2hpbGUgKHBhcmVudC5jb250ZW50RWRpdGFibGUgPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcGFyZW50IGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4gdGhlbiByZXR1cm4gdGhhdCB3ZSBhcmUgaW5zaWRlIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoIXBhcmVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0cmV0dXJuIHtub2RlOiBwYXJlbnQsIGluc2lkZTogMX07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldHVwIG5vZGUgbGlzdCBhbmQgZW5kSW5kZXhcblx0XHRcdGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuO1xuXHRcdFx0ZW5kSW5kZXggPSBjaGlsZHJlbi5sZW5ndGggLSAxO1xuXG5cdFx0XHQvLyBQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBmb3IgdGhlIHBvc2l0aW9uXG5cdFx0XHR3aGlsZSAoc3RhcnRJbmRleCA8PSBlbmRJbmRleCkge1xuXHRcdFx0XHRpbmRleCA9IE1hdGguZmxvb3IoKHN0YXJ0SW5kZXggKyBlbmRJbmRleCkgLyAyKTtcblxuXHRcdFx0XHQvLyBNb3ZlIHNlbGVjdGlvbiB0byBub2RlIGFuZCBjb21wYXJlIHRoZSByYW5nZXNcblx0XHRcdFx0Y2hpbGQgPSBjaGlsZHJlbltpbmRleF07XG5cdFx0XHRcdGNoZWNrUm5nLm1vdmVUb0VsZW1lbnRUZXh0KGNoaWxkKTtcblx0XHRcdFx0cG9zaXRpb24gPSBjaGVja1JuZy5jb21wYXJlRW5kUG9pbnRzKHN0YXJ0ID8gJ1N0YXJ0VG9TdGFydCcgOiAnRW5kVG9FbmQnLCBybmcpO1xuXG5cdFx0XHRcdC8vIEJlZm9yZS9hZnRlciBvciBhbiBleGFjdCBtYXRjaFxuXHRcdFx0XHRpZiAocG9zaXRpb24gPiAwKSB7XG5cdFx0XHRcdFx0ZW5kSW5kZXggPSBpbmRleCAtIDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAocG9zaXRpb24gPCAwKSB7XG5cdFx0XHRcdFx0c3RhcnRJbmRleCA9IGluZGV4ICsgMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge25vZGU6IGNoaWxkfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBjaGlsZCBwb3NpdGlvbiBpcyBiZWZvcmUgb3Igd2UgZGlkbid0IGZpbmQgYSBwb3NpdGlvblxuXHRcdFx0aWYgKHBvc2l0aW9uIDwgMCkge1xuXHRcdFx0XHQvLyBObyBlbGVtZW50IGNoaWxkIHdhcyBmb3VuZCB1c2UgdGhlIHBhcmVudCBlbGVtZW50IGFuZCB0aGUgb2Zmc2V0IGluc2lkZSB0aGF0XG5cdFx0XHRcdGlmICghY2hpbGQpIHtcblx0XHRcdFx0XHRjaGVja1JuZy5tb3ZlVG9FbGVtZW50VGV4dChwYXJlbnQpO1xuXHRcdFx0XHRcdGNoZWNrUm5nLmNvbGxhcHNlKHRydWUpO1xuXHRcdFx0XHRcdGNoaWxkID0gcGFyZW50O1xuXHRcdFx0XHRcdGluc2lkZSA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2hlY2tSbmcuY29sbGFwc2UoZmFsc2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2FsayBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIGluIHRleHQgbm9kZSB1bnRpbCB3ZSBoaXQgdGhlIHNlbGVjdGVkIHJhbmdlIGVuZHBvaW50LFxuXHRcdFx0XHQvLyBoaXQgdGhlIGVuZCBvZiBkb2N1bWVudCBvciBwYXJlbnQgaXNuJ3QgdGhlIHJpZ2h0IG9uZVxuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIHdhbGsgY2hhciBieSBjaGFyIHNpbmNlIHJuZy50ZXh0IG9yIHJuZy5odG1sVGV4dCB3aWxsIHRyaW0gbGluZSBlbmRpbmdzXG5cdFx0XHRcdG9mZnNldCA9IDA7XG5cdFx0XHRcdHdoaWxlIChjaGVja1JuZy5jb21wYXJlRW5kUG9pbnRzKHN0YXJ0ID8gJ1N0YXJ0VG9TdGFydCcgOiAnU3RhcnRUb0VuZCcsIHJuZykgIT09IDApIHtcblx0XHRcdFx0XHRpZiAoY2hlY2tSbmcubW92ZSgnY2hhcmFjdGVyJywgMSkgPT09IDAgfHwgcGFyZW50ICE9IGNoZWNrUm5nLnBhcmVudEVsZW1lbnQoKSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b2Zmc2V0Kys7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIENoaWxkIHBvc2l0aW9uIGlzIGFmdGVyIHRoZSBzZWxlY3Rpb24gZW5kcG9pbnRcblx0XHRcdFx0Y2hlY2tSbmcuY29sbGFwc2UodHJ1ZSk7XG5cblx0XHRcdFx0Ly8gV2FsayBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIGluIHRleHQgbm9kZSB1bnRpbCB3ZSBoaXQgdGhlIHNlbGVjdGVkIHJhbmdlIGVuZHBvaW50LCBoaXRcblx0XHRcdFx0Ly8gdGhlIGVuZCBvZiBkb2N1bWVudCBvciBwYXJlbnQgaXNuJ3QgdGhlIHJpZ2h0IG9uZVxuXHRcdFx0XHRvZmZzZXQgPSAwO1xuXHRcdFx0XHR3aGlsZSAoY2hlY2tSbmcuY29tcGFyZUVuZFBvaW50cyhzdGFydCA/ICdTdGFydFRvU3RhcnQnIDogJ1N0YXJ0VG9FbmQnLCBybmcpICE9PSAwKSB7XG5cdFx0XHRcdFx0aWYgKGNoZWNrUm5nLm1vdmUoJ2NoYXJhY3RlcicsIC0xKSA9PT0gMCB8fCBwYXJlbnQgIT0gY2hlY2tSbmcucGFyZW50RWxlbWVudCgpKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvZmZzZXQrKztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge25vZGU6IGNoaWxkLCBwb3NpdGlvbjogcG9zaXRpb24sIG9mZnNldDogb2Zmc2V0LCBpbnNpZGU6IGluc2lkZX07XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJucyBhIFczQyBET00gY29tcGF0aWJsZSByYW5nZSBvYmplY3QgYnkgdXNpbmcgdGhlIElFIFJhbmdlIEFQSVxuXHRcdGZ1bmN0aW9uIGdldFJhbmdlKCkge1xuXHRcdFx0dmFyIGllUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0Um5nKCksIGRvbVJhbmdlID0gZG9tLmNyZWF0ZVJuZygpLCBlbGVtZW50LCBjb2xsYXBzZWQsIHRtcFJhbmdlLCBlbGVtZW50MiwgYm9va21hcms7XG5cblx0XHRcdC8vIElmIHNlbGVjdGlvbiBpcyBvdXRzaWRlIHRoZSBjdXJyZW50IGRvY3VtZW50IGp1c3QgcmV0dXJuIGFuIGVtcHR5IHJhbmdlXG5cdFx0XHRlbGVtZW50ID0gaWVSYW5nZS5pdGVtID8gaWVSYW5nZS5pdGVtKDApIDogaWVSYW5nZS5wYXJlbnRFbGVtZW50KCk7XG5cdFx0XHRpZiAoZWxlbWVudC5vd25lckRvY3VtZW50ICE9IGRvbS5kb2MpIHtcblx0XHRcdFx0cmV0dXJuIGRvbVJhbmdlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb2xsYXBzZWQgPSBzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKTtcblxuXHRcdFx0Ly8gSGFuZGxlIGNvbnRyb2wgc2VsZWN0aW9uXG5cdFx0XHRpZiAoaWVSYW5nZS5pdGVtKSB7XG5cdFx0XHRcdGRvbVJhbmdlLnNldFN0YXJ0KGVsZW1lbnQucGFyZW50Tm9kZSwgZG9tLm5vZGVJbmRleChlbGVtZW50KSk7XG5cdFx0XHRcdGRvbVJhbmdlLnNldEVuZChkb21SYW5nZS5zdGFydENvbnRhaW5lciwgZG9tUmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKTtcblxuXHRcdFx0XHRyZXR1cm4gZG9tUmFuZ2U7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZpbmRFbmRQb2ludChzdGFydCkge1xuXHRcdFx0XHR2YXIgZW5kUG9pbnQgPSBnZXRQb3NpdGlvbihpZVJhbmdlLCBzdGFydCksIGNvbnRhaW5lciwgb2Zmc2V0LCB0ZXh0Tm9kZU9mZnNldCA9IDAsIHNpYmxpbmcsIHVuZGVmLCBub2RlVmFsdWU7XG5cblx0XHRcdFx0Y29udGFpbmVyID0gZW5kUG9pbnQubm9kZTtcblx0XHRcdFx0b2Zmc2V0ID0gZW5kUG9pbnQub2Zmc2V0O1xuXG5cdFx0XHRcdGlmIChlbmRQb2ludC5pbnNpZGUgJiYgIWNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRkb21SYW5nZVtzdGFydCA/ICdzZXRTdGFydCcgOiAnc2V0RW5kJ10oY29udGFpbmVyLCAwKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob2Zmc2V0ID09PSB1bmRlZikge1xuXHRcdFx0XHRcdGRvbVJhbmdlW3N0YXJ0ID8gJ3NldFN0YXJ0QmVmb3JlJyA6ICdzZXRFbmRBZnRlciddKGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGVuZFBvaW50LnBvc2l0aW9uIDwgMCkge1xuXHRcdFx0XHRcdHNpYmxpbmcgPSBlbmRQb2ludC5pbnNpZGUgPyBjb250YWluZXIuZmlyc3RDaGlsZCA6IGNvbnRhaW5lci5uZXh0U2libGluZztcblxuXHRcdFx0XHRcdGlmICghc2libGluZykge1xuXHRcdFx0XHRcdFx0ZG9tUmFuZ2Vbc3RhcnQgPyAnc2V0U3RhcnRBZnRlcicgOiAnc2V0RW5kQWZ0ZXInXShjb250YWluZXIpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghb2Zmc2V0KSB7XG5cdFx0XHRcdFx0XHRpZiAoc2libGluZy5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0XHRcdGRvbVJhbmdlW3N0YXJ0ID8gJ3NldFN0YXJ0JyA6ICdzZXRFbmQnXShzaWJsaW5nLCAwKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGRvbVJhbmdlW3N0YXJ0ID8gJ3NldFN0YXJ0QmVmb3JlJyA6ICdzZXRFbmRCZWZvcmUnXShzaWJsaW5nKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZpbmQgdGhlIHRleHQgbm9kZSBhbmQgb2Zmc2V0XG5cdFx0XHRcdFx0d2hpbGUgKHNpYmxpbmcpIHtcblx0XHRcdFx0XHRcdGlmIChzaWJsaW5nLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRcdFx0bm9kZVZhbHVlID0gc2libGluZy5ub2RlVmFsdWU7XG5cdFx0XHRcdFx0XHRcdHRleHROb2RlT2Zmc2V0ICs9IG5vZGVWYWx1ZS5sZW5ndGg7XG5cblx0XHRcdFx0XHRcdFx0Ly8gV2UgYXJlIGF0IG9yIHBhc3NlZCB0aGUgcG9zaXRpb24gd2Ugd2hlcmUgbG9va2luZyBmb3Jcblx0XHRcdFx0XHRcdFx0aWYgKHRleHROb2RlT2Zmc2V0ID49IG9mZnNldCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRhaW5lciA9IHNpYmxpbmc7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGVPZmZzZXQgLT0gb2Zmc2V0O1xuXHRcdFx0XHRcdFx0XHRcdHRleHROb2RlT2Zmc2V0ID0gbm9kZVZhbHVlLmxlbmd0aCAtIHRleHROb2RlT2Zmc2V0O1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgYW5kIG9mZnNldFxuXHRcdFx0XHRcdHNpYmxpbmcgPSBjb250YWluZXIucHJldmlvdXNTaWJsaW5nO1xuXG5cdFx0XHRcdFx0aWYgKCFzaWJsaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZG9tUmFuZ2Vbc3RhcnQgPyAnc2V0U3RhcnRCZWZvcmUnIDogJ3NldEVuZEJlZm9yZSddKGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXNuJ3QgYW55IHRleHQgdG8gbG9vcCB0aGVuIHVzZSB0aGUgZmlyc3QgcG9zaXRpb25cblx0XHRcdFx0XHRpZiAoIW9mZnNldCkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0XHRcdGRvbVJhbmdlW3N0YXJ0ID8gJ3NldFN0YXJ0JyA6ICdzZXRFbmQnXShzaWJsaW5nLCBjb250YWluZXIubm9kZVZhbHVlLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRkb21SYW5nZVtzdGFydCA/ICdzZXRTdGFydEFmdGVyJyA6ICdzZXRFbmRBZnRlciddKHNpYmxpbmcpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0d2hpbGUgKHNpYmxpbmcpIHtcblx0XHRcdFx0XHRcdGlmIChzaWJsaW5nLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRcdFx0dGV4dE5vZGVPZmZzZXQgKz0gc2libGluZy5ub2RlVmFsdWUubGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFdlIGFyZSBhdCBvciBwYXNzZWQgdGhlIHBvc2l0aW9uIHdlIHdoZXJlIGxvb2tpbmcgZm9yXG5cdFx0XHRcdFx0XHRcdGlmICh0ZXh0Tm9kZU9mZnNldCA+PSBvZmZzZXQpIHtcblx0XHRcdFx0XHRcdFx0XHRjb250YWluZXIgPSBzaWJsaW5nO1xuXHRcdFx0XHRcdFx0XHRcdHRleHROb2RlT2Zmc2V0IC09IG9mZnNldDtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZG9tUmFuZ2Vbc3RhcnQgPyAnc2V0U3RhcnQnIDogJ3NldEVuZCddKGNvbnRhaW5lciwgdGV4dE5vZGVPZmZzZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBGaW5kIHN0YXJ0IHBvaW50XG5cdFx0XHRcdGZpbmRFbmRQb2ludCh0cnVlKTtcblxuXHRcdFx0XHQvLyBGaW5kIGVuZCBwb2ludCBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCFjb2xsYXBzZWQpIHtcblx0XHRcdFx0XHRmaW5kRW5kUG9pbnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0Ly8gSUUgaGFzIGEgbmFzdHkgYnVnIHdoZXJlIHRleHQgbm9kZXMgbWlnaHQgdGhyb3cgXCJpbnZhbGlkIGFyZ3VtZW50XCIgd2hlbiB5b3Vcblx0XHRcdFx0Ly8gYWNjZXNzIHRoZSBub2RlVmFsdWUgb3Igb3RoZXIgcHJvcGVydGllcyBvZiB0ZXh0IG5vZGVzLiBUaGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuXG5cdFx0XHRcdC8vIHRleHQgbm9kZXMgYXJlIHNwbGl0IGludG8gdHdvIG5vZGVzIGJ5IGEgZGVsZXRlL2JhY2tzcGFjZSBjYWxsLlxuXHRcdFx0XHQvLyBTbyBsZXQgdXMgZGV0ZWN0IGFuZCB0cnkgdG8gZml4IGl0LlxuXHRcdFx0XHRpZiAoZXgubnVtYmVyID09IC0yMTQ3MDI0ODA5KSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBjdXJyZW50IHNlbGVjdGlvblxuXHRcdFx0XHRcdGJvb2ttYXJrID0gc2VsZi5nZXRCb29rbWFyaygyKTtcblxuXHRcdFx0XHRcdC8vIEdldCBzdGFydCBlbGVtZW50XG5cdFx0XHRcdFx0dG1wUmFuZ2UgPSBpZVJhbmdlLmR1cGxpY2F0ZSgpO1xuXHRcdFx0XHRcdHRtcFJhbmdlLmNvbGxhcHNlKHRydWUpO1xuXHRcdFx0XHRcdGVsZW1lbnQgPSB0bXBSYW5nZS5wYXJlbnRFbGVtZW50KCk7XG5cblx0XHRcdFx0XHQvLyBHZXQgZW5kIGVsZW1lbnRcblx0XHRcdFx0XHRpZiAoIWNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdFx0dG1wUmFuZ2UgPSBpZVJhbmdlLmR1cGxpY2F0ZSgpO1xuXHRcdFx0XHRcdFx0dG1wUmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuXHRcdFx0XHRcdFx0ZWxlbWVudDIgPSB0bXBSYW5nZS5wYXJlbnRFbGVtZW50KCk7XG5cdFx0XHRcdFx0XHRlbGVtZW50Mi5pbm5lckhUTUwgPSBlbGVtZW50Mi5pbm5lckhUTUw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBicm9rZW4gZWxlbWVudHNcblx0XHRcdFx0XHRlbGVtZW50LmlubmVySFRNTCA9IGVsZW1lbnQuaW5uZXJIVE1MO1xuXG5cdFx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgc2VsZWN0aW9uXG5cdFx0XHRcdFx0c2VsZi5tb3ZlVG9Cb29rbWFyayhib29rbWFyayk7XG5cblx0XHRcdFx0XHQvLyBTaW5jZSB0aGUgcmFuZ2UgaGFzIG1vdmVkIHdlIG5lZWQgdG8gcmUtZ2V0IGl0XG5cdFx0XHRcdFx0aWVSYW5nZSA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcblxuXHRcdFx0XHRcdC8vIEZpbmQgc3RhcnQgcG9pbnRcblx0XHRcdFx0XHRmaW5kRW5kUG9pbnQodHJ1ZSk7XG5cblx0XHRcdFx0XHQvLyBGaW5kIGVuZCBwb2ludCBpZiBuZWVkZWRcblx0XHRcdFx0XHRpZiAoIWNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdFx0ZmluZEVuZFBvaW50KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IGV4OyAvLyBUaHJvdyBvdGhlciBlcnJvcnNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZG9tUmFuZ2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5nZXRCb29rbWFyayA9IGZ1bmN0aW9uKHR5cGUpIHtcblx0XHRcdHZhciBybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCksIGJvb2ttYXJrID0ge307XG5cblx0XHRcdGZ1bmN0aW9uIGdldEluZGV4ZXMobm9kZSkge1xuXHRcdFx0XHR2YXIgcGFyZW50LCByb290LCBjaGlsZHJlbiwgaSwgaW5kZXhlcyA9IFtdO1xuXG5cdFx0XHRcdHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdFx0cm9vdCA9IGRvbS5nZXRSb290KCkucGFyZW50Tm9kZTtcblxuXHRcdFx0XHR3aGlsZSAocGFyZW50ICE9IHJvb3QgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSA5KSB7XG5cdFx0XHRcdFx0Y2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW47XG5cblx0XHRcdFx0XHRpID0gY2hpbGRyZW4ubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRcdGlmIChub2RlID09PSBjaGlsZHJlbltpXSkge1xuXHRcdFx0XHRcdFx0XHRpbmRleGVzLnB1c2goaSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gaW5kZXhlcztcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZ2V0Qm9va21hcmtFbmRQb2ludChzdGFydCkge1xuXHRcdFx0XHR2YXIgcG9zaXRpb247XG5cblx0XHRcdFx0cG9zaXRpb24gPSBnZXRQb3NpdGlvbihybmcsIHN0YXJ0KTtcblx0XHRcdFx0aWYgKHBvc2l0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBwb3NpdGlvbi5wb3NpdGlvbixcblx0XHRcdFx0XHRcdG9mZnNldDogcG9zaXRpb24ub2Zmc2V0LFxuXHRcdFx0XHRcdFx0aW5kZXhlczogZ2V0SW5kZXhlcyhwb3NpdGlvbi5ub2RlKSxcblx0XHRcdFx0XHRcdGluc2lkZTogcG9zaXRpb24uaW5zaWRlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBOb24gdWJzdHJ1Y3RpdmUgYm9va21hcmtcblx0XHRcdGlmICh0eXBlID09PSAyKSB7XG5cdFx0XHRcdC8vIEhhbmRsZSB0ZXh0IHNlbGVjdGlvblxuXHRcdFx0XHRpZiAoIXJuZy5pdGVtKSB7XG5cdFx0XHRcdFx0Ym9va21hcmsuc3RhcnQgPSBnZXRCb29rbWFya0VuZFBvaW50KHRydWUpO1xuXG5cdFx0XHRcdFx0aWYgKCFzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSkge1xuXHRcdFx0XHRcdFx0Ym9va21hcmsuZW5kID0gZ2V0Qm9va21hcmtFbmRQb2ludCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRib29rbWFyay5zdGFydCA9IHtjdHJsOiB0cnVlLCBpbmRleGVzOiBnZXRJbmRleGVzKHJuZy5pdGVtKDApKX07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGJvb2ttYXJrO1xuXHRcdH07XG5cblx0XHR0aGlzLm1vdmVUb0Jvb2ttYXJrID0gZnVuY3Rpb24oYm9va21hcmspIHtcblx0XHRcdHZhciBybmcsIGJvZHkgPSBkb20uZG9jLmJvZHk7XG5cblx0XHRcdGZ1bmN0aW9uIHJlc29sdmVJbmRleGVzKGluZGV4ZXMpIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGlkeCwgY2hpbGRyZW47XG5cblx0XHRcdFx0bm9kZSA9IGRvbS5nZXRSb290KCk7XG5cdFx0XHRcdGZvciAoaSA9IGluZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG5cdFx0XHRcdFx0aWR4ID0gaW5kZXhlc1tpXTtcblxuXHRcdFx0XHRcdGlmIChpZHggPD0gY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGNoaWxkcmVuW2lkeF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHNldEJvb2ttYXJrRW5kUG9pbnQoc3RhcnQpIHtcblx0XHRcdFx0dmFyIGVuZFBvaW50ID0gYm9va21hcmtbc3RhcnQgPyAnc3RhcnQnIDogJ2VuZCddLCBtb3ZlTGVmdCwgbW92ZVJuZywgdW5kZWYsIG9mZnNldDtcblxuXHRcdFx0XHRpZiAoZW5kUG9pbnQpIHtcblx0XHRcdFx0XHRtb3ZlTGVmdCA9IGVuZFBvaW50LnBvc2l0aW9uID4gMDtcblxuXHRcdFx0XHRcdG1vdmVSbmcgPSBib2R5LmNyZWF0ZVRleHRSYW5nZSgpO1xuXHRcdFx0XHRcdG1vdmVSbmcubW92ZVRvRWxlbWVudFRleHQocmVzb2x2ZUluZGV4ZXMoZW5kUG9pbnQuaW5kZXhlcykpO1xuXG5cdFx0XHRcdFx0b2Zmc2V0ID0gZW5kUG9pbnQub2Zmc2V0O1xuXHRcdFx0XHRcdGlmIChvZmZzZXQgIT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0XHRtb3ZlUm5nLmNvbGxhcHNlKGVuZFBvaW50Lmluc2lkZSB8fCBtb3ZlTGVmdCk7XG5cdFx0XHRcdFx0XHRtb3ZlUm5nLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgbW92ZUxlZnQgPyAtb2Zmc2V0IDogb2Zmc2V0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bW92ZVJuZy5jb2xsYXBzZShzdGFydCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cm5nLnNldEVuZFBvaW50KHN0YXJ0ID8gJ1N0YXJ0VG9TdGFydCcgOiAnRW5kVG9TdGFydCcsIG1vdmVSbmcpO1xuXG5cdFx0XHRcdFx0aWYgKHN0YXJ0KSB7XG5cdFx0XHRcdFx0XHRybmcuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChib29rbWFyay5zdGFydCkge1xuXHRcdFx0XHRpZiAoYm9va21hcmsuc3RhcnQuY3RybCkge1xuXHRcdFx0XHRcdHJuZyA9IGJvZHkuY3JlYXRlQ29udHJvbFJhbmdlKCk7XG5cdFx0XHRcdFx0cm5nLmFkZEVsZW1lbnQocmVzb2x2ZUluZGV4ZXMoYm9va21hcmsuc3RhcnQuaW5kZXhlcykpO1xuXHRcdFx0XHRcdHJuZy5zZWxlY3QoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRybmcgPSBib2R5LmNyZWF0ZVRleHRSYW5nZSgpO1xuXHRcdFx0XHRcdHNldEJvb2ttYXJrRW5kUG9pbnQodHJ1ZSk7XG5cdFx0XHRcdFx0c2V0Qm9va21hcmtFbmRQb2ludCgpO1xuXHRcdFx0XHRcdHJuZy5zZWxlY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLmFkZFJhbmdlID0gZnVuY3Rpb24ocm5nKSB7XG5cdFx0XHR2YXIgaWVSbmcsIGN0cmxSbmcsIHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIHNpYmxpbmcsXG5cdFx0XHRcdGRvYyA9IHNlbGVjdGlvbi5kb20uZG9jLCBib2R5ID0gZG9jLmJvZHksIG5hdGl2ZVJuZywgY3RybEVsbTtcblxuXHRcdFx0ZnVuY3Rpb24gc2V0RW5kUG9pbnQoc3RhcnQpIHtcblx0XHRcdFx0dmFyIGNvbnRhaW5lciwgb2Zmc2V0LCBtYXJrZXIsIHRtcFJuZywgbm9kZXM7XG5cblx0XHRcdFx0bWFya2VyID0gZG9tLmNyZWF0ZSgnYScpO1xuXHRcdFx0XHRjb250YWluZXIgPSBzdGFydCA/IHN0YXJ0Q29udGFpbmVyIDogZW5kQ29udGFpbmVyO1xuXHRcdFx0XHRvZmZzZXQgPSBzdGFydCA/IHN0YXJ0T2Zmc2V0IDogZW5kT2Zmc2V0O1xuXHRcdFx0XHR0bXBSbmcgPSBpZVJuZy5kdXBsaWNhdGUoKTtcblxuXHRcdFx0XHRpZiAoY29udGFpbmVyID09IGRvYyB8fCBjb250YWluZXIgPT0gZG9jLmRvY3VtZW50RWxlbWVudCkge1xuXHRcdFx0XHRcdGNvbnRhaW5lciA9IGJvZHk7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMykge1xuXHRcdFx0XHRcdGNvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShtYXJrZXIsIGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0dG1wUm5nLm1vdmVUb0VsZW1lbnRUZXh0KG1hcmtlcik7XG5cdFx0XHRcdFx0dG1wUm5nLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgb2Zmc2V0KTtcblx0XHRcdFx0XHRkb20ucmVtb3ZlKG1hcmtlcik7XG5cdFx0XHRcdFx0aWVSbmcuc2V0RW5kUG9pbnQoc3RhcnQgPyAnU3RhcnRUb1N0YXJ0JyA6ICdFbmRUb0VuZCcsIHRtcFJuZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bm9kZXMgPSBjb250YWluZXIuY2hpbGROb2RlcztcblxuXHRcdFx0XHRcdGlmIChub2Rlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPj0gbm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5pbnNlcnRBZnRlcihtYXJrZXIsIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5lci5pbnNlcnRCZWZvcmUobWFya2VyLCBub2Rlc1tvZmZzZXRdKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dG1wUm5nLm1vdmVUb0VsZW1lbnRUZXh0KG1hcmtlcik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjb250YWluZXIuY2FuSGF2ZUhUTUwpIHtcblx0XHRcdFx0XHRcdC8vIEVtcHR5IG5vZGUgc2VsZWN0aW9uIGZvciBleGFtcGxlIDxkaXY+fDwvZGl2PlxuXHRcdFx0XHRcdFx0Ly8gU2V0dGluZyBpbm5lckhUTUwgd2l0aCBhIHNwYW4gbWFya2VyIHRoZW4gcmVtb3ZlIHRoYXQgbWFya2VyIHNlZW1zIHRvIGtlZXAgZW1wdHkgYmxvY2sgZWxlbWVudHMgb3BlblxuXHRcdFx0XHRcdFx0Y29udGFpbmVyLmlubmVySFRNTCA9ICc8c3Bhbj4mI3hGRUZGOzwvc3Bhbj4nO1xuXHRcdFx0XHRcdFx0bWFya2VyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdFx0XHR0bXBSbmcubW92ZVRvRWxlbWVudFRleHQobWFya2VyKTtcblx0XHRcdFx0XHRcdHRtcFJuZy5jb2xsYXBzZShGQUxTRSk7IC8vIENvbGxhcHNlIGZhbHNlIHdvcmtzIGJldHRlciB0aGFuIHRydWUgZm9yIHNvbWUgb2RkIHJlYXNvblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGllUm5nLnNldEVuZFBvaW50KHN0YXJ0ID8gJ1N0YXJ0VG9TdGFydCcgOiAnRW5kVG9FbmQnLCB0bXBSbmcpO1xuXHRcdFx0XHRcdGRvbS5yZW1vdmUobWFya2VyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXR1cCBzb21lIHNob3J0ZXIgdmVyc2lvbnNcblx0XHRcdHN0YXJ0Q29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuXHRcdFx0c3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG5cdFx0XHRlbmRDb250YWluZXIgPSBybmcuZW5kQ29udGFpbmVyO1xuXHRcdFx0ZW5kT2Zmc2V0ID0gcm5nLmVuZE9mZnNldDtcblx0XHRcdGllUm5nID0gYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcblxuXHRcdFx0Ly8gSWYgc2luZ2xlIGVsZW1lbnQgc2VsZWN0aW9uIHRoZW4gdHJ5IG1ha2luZyBhIGNvbnRyb2wgc2VsZWN0aW9uIG91dCBvZiBpdFxuXHRcdFx0aWYgKHN0YXJ0Q29udGFpbmVyID09IGVuZENvbnRhaW5lciAmJiBzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PSAxKSB7XG5cdFx0XHRcdC8vIFRyaWNrIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4gZW1wdHkgYmxvY2sgZWxlbWVudCBsaWtlIDxwPjwvcD5cblx0XHRcdFx0aWYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAmJiAhc3RhcnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0aWYgKHN0YXJ0Q29udGFpbmVyLmNhbkhhdmVIVE1MKSB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBwcmV2aW91cyBzaWJsaW5nIGlzIGFuIGVtcHR5IGJsb2NrIGlmIGl0IGlzIHRoZW4gd2UgbmVlZCB0byByZW5kZXIgaXRcblx0XHRcdFx0XHRcdC8vIElFIHdvdWxkIG90aGVyd2lzZSBtb3ZlIHRoZSBjYXJldCBpbnRvIHRoZSBzaWJsaW5nIGluc3RlYWQgb2YgdGhlIGVtcHR5IHN0YXJ0Q29udGFpbmVyIHNlZTogIzUyMzZcblx0XHRcdFx0XHRcdC8vIEV4YW1wbGUgdGhpczogPHA+PC9wPjxwPnw8L3A+IHdvdWxkIGJlY29tZSB0aGlzOiA8cD58PC9wPjxwPjwvcD5cblx0XHRcdFx0XHRcdHNpYmxpbmcgPSBzdGFydENvbnRhaW5lci5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdFx0XHRpZiAoc2libGluZyAmJiAhc2libGluZy5oYXNDaGlsZE5vZGVzKCkgJiYgZG9tLmlzQmxvY2soc2libGluZykpIHtcblx0XHRcdFx0XHRcdFx0c2libGluZy5pbm5lckhUTUwgPSAnJiN4RkVGRjsnO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2libGluZyA9IG51bGw7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyLmlubmVySFRNTCA9ICc8c3Bhbj4mI3hGRUZGOzwvc3Bhbj48c3Bhbj4mI3hGRUZGOzwvc3Bhbj4nO1xuXHRcdFx0XHRcdFx0aWVSbmcubW92ZVRvRWxlbWVudFRleHQoc3RhcnRDb250YWluZXIubGFzdENoaWxkKTtcblx0XHRcdFx0XHRcdGllUm5nLnNlbGVjdCgpO1xuXHRcdFx0XHRcdFx0ZG9tLmRvYy5zZWxlY3Rpb24uY2xlYXIoKTtcblx0XHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuXG5cdFx0XHRcdFx0XHRpZiAoc2libGluZykge1xuXHRcdFx0XHRcdFx0XHRzaWJsaW5nLmlubmVySFRNTCA9ICcnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0YXJ0T2Zmc2V0ID0gZG9tLm5vZGVJbmRleChzdGFydENvbnRhaW5lcik7XG5cdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBzdGFydENvbnRhaW5lci5wYXJlbnROb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAtIDEpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y3RybEVsbSA9IHN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXNbc3RhcnRPZmZzZXRdO1xuXHRcdFx0XHRcdFx0Y3RybFJuZyA9IGJvZHkuY3JlYXRlQ29udHJvbFJhbmdlKCk7XG5cdFx0XHRcdFx0XHRjdHJsUm5nLmFkZEVsZW1lbnQoY3RybEVsbSk7XG5cdFx0XHRcdFx0XHRjdHJsUm5nLnNlbGVjdCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgcmFuZ2UgcHJvZHVjZWQgaXMgb24gdGhlIGNvcnJlY3QgZWxlbWVudCBhbmQgaXMgYSBjb250cm9sIHJhbmdlXG5cdFx0XHRcdFx0XHQvLyBPbiBJRSA4IGl0IHdpbGwgc2VsZWN0IHRoZSBwYXJlbnQgY29udGVudEVkaXRhYmxlIGNvbnRhaW5lciBpZiB5b3Ugc2VsZWN0IGFuIGlubmVyIGVsZW1lbnQgc2VlOiAjNTM5OFxuXHRcdFx0XHRcdFx0bmF0aXZlUm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuXHRcdFx0XHRcdFx0aWYgKG5hdGl2ZVJuZy5pdGVtICYmIGN0cmxFbG0gPT09IG5hdGl2ZVJuZy5pdGVtKDApKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBzdGFydC9lbmQgcG9pbnQgb2Ygc2VsZWN0aW9uXG5cdFx0XHRzZXRFbmRQb2ludCh0cnVlKTtcblx0XHRcdHNldEVuZFBvaW50KCk7XG5cblx0XHRcdC8vIFNlbGVjdCB0aGUgbmV3IHJhbmdlIGFuZCBzY3JvbGwgaXQgaW50byB2aWV3XG5cdFx0XHRpZVJuZy5zZWxlY3QoKTtcblx0XHR9O1xuXG5cdFx0Ly8gRXhwb3NlIHJhbmdlIG1ldGhvZFxuXHRcdHRoaXMuZ2V0UmFuZ2VBdCA9IGdldFJhbmdlO1xuXHR9XG5cblx0cmV0dXJuIFNlbGVjdGlvbjtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9WSy5qc1xuXG4vKipcbiAqIFZLLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBmaWxlIGV4cG9zZXMgYSBzZXQgb2YgdGhlIGNvbW1vbiBLZXlDb2RlcyBmb3IgdXNlLiBQbGVhc2UgZ3JvdyBpdCBhcyBuZWVkZWQuXG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9WS1wiLCBbXG5cdFwidGlueW1jZS9FbnZcIlxuXSwgZnVuY3Rpb24oRW52KSB7XG5cdHJldHVybiB7XG5cdFx0QkFDS1NQQUNFOiA4LFxuXHRcdERFTEVURTogNDYsXG5cdFx0RE9XTjogNDAsXG5cdFx0RU5URVI6IDEzLFxuXHRcdExFRlQ6IDM3LFxuXHRcdFJJR0hUOiAzOSxcblx0XHRTUEFDRUJBUjogMzIsXG5cdFx0VEFCOiA5LFxuXHRcdFVQOiAzOCxcblxuXHRcdG1vZGlmaWVyUHJlc3NlZDogZnVuY3Rpb24oZSkge1xuXHRcdFx0cmV0dXJuIGUuc2hpZnRLZXkgfHwgZS5jdHJsS2V5IHx8IGUuYWx0S2V5IHx8IHRoaXMubWV0YUtleVByZXNzZWQoZSk7XG5cdFx0fSxcblxuXHRcdG1ldGFLZXlQcmVzc2VkOiBmdW5jdGlvbihlKSB7XG5cdFx0XHQvLyBDaGVjayBpZiBjdHJsIG9yIG1ldGEga2V5IGlzIHByZXNzZWQuIEVkZ2UgY2FzZSBmb3IgQWx0R3Igb24gV2luZG93cyB3aGVyZSBpdCBwcm9kdWNlcyBjdHJsS2V5K2FsdEtleSBzdGF0ZXNcblx0XHRcdHJldHVybiAoRW52Lm1hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleSAmJiAhZS5hbHRLZXkpO1xuXHRcdH1cblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZG9tL0NvbnRyb2xTZWxlY3Rpb24uanNcblxuLyoqXG4gKiBDb250cm9sU2VsZWN0aW9uLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBoYW5kbGVzIGNvbnRyb2wgc2VsZWN0aW9uIG9mIGVsZW1lbnRzLiBDb250cm9scyBhcmUgZWxlbWVudHNcbiAqIHRoYXQgY2FuIGJlIHJlc2l6ZWQgYW5kIG5lZWRzIHRvIGJlIHNlbGVjdGVkIGFzIGEgd2hvbGUuIEl0IGFkZHMgY3VzdG9tIHJlc2l6ZSBoYW5kbGVzXG4gKiB0byBhbGwgYnJvd3NlciBlbmdpbmVzIHRoYXQgc3VwcG9ydCBwcm9wZXJseSBkaXNhYmxpbmcgdGhlIGJ1aWx0IGluIHJlc2l6ZSBsb2dpYy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5kb20uQ29udHJvbFNlbGVjdGlvblxuICovXG5kZWZpbmUoXCJ0aW55bWNlL2RvbS9Db250cm9sU2VsZWN0aW9uXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvVktcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL3V0aWwvRGVsYXlcIixcblx0XCJ0aW55bWNlL0VudlwiLFxuXHRcInRpbnltY2UvZG9tL05vZGVUeXBlXCJcbl0sIGZ1bmN0aW9uKFZLLCBUb29scywgRGVsYXksIEVudiwgTm9kZVR5cGUpIHtcblx0dmFyIGlzQ29udGVudEVkaXRhYmxlRmFsc2UgPSBOb2RlVHlwZS5pc0NvbnRlbnRFZGl0YWJsZUZhbHNlO1xuXHR2YXIgaXNDb250ZW50RWRpdGFibGVUcnVlID0gTm9kZVR5cGUuaXNDb250ZW50RWRpdGFibGVUcnVlO1xuXG5cdGZ1bmN0aW9uIGdldENvbnRlbnRFZGl0YWJsZVJvb3Qocm9vdCwgbm9kZSkge1xuXHRcdHdoaWxlIChub2RlICYmIG5vZGUgIT0gcm9vdCkge1xuXHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlVHJ1ZShub2RlKSB8fCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHNlbGVjdGlvbiwgZWRpdG9yKSB7XG5cdFx0dmFyIGRvbSA9IGVkaXRvci5kb20sIGVhY2ggPSBUb29scy5lYWNoO1xuXHRcdHZhciBzZWxlY3RlZEVsbSwgc2VsZWN0ZWRFbG1HaG9zdCwgcmVzaXplSGVscGVyLCByZXNpemVIYW5kbGVzLCBzZWxlY3RlZEhhbmRsZSwgbGFzdE1vdXNlRG93bkV2ZW50O1xuXHRcdHZhciBzdGFydFgsIHN0YXJ0WSwgc2VsZWN0ZWRFbG1YLCBzZWxlY3RlZEVsbVksIHN0YXJ0Vywgc3RhcnRILCByYXRpbywgcmVzaXplU3RhcnRlZDtcblx0XHR2YXIgd2lkdGgsIGhlaWdodCwgZWRpdGFibGVEb2MgPSBlZGl0b3IuZ2V0RG9jKCksIHJvb3REb2N1bWVudCA9IGRvY3VtZW50LCBpc0lFID0gRW52LmllICYmIEVudi5pZSA8IDExO1xuXHRcdHZhciBhYnMgPSBNYXRoLmFicywgcm91bmQgPSBNYXRoLnJvdW5kLCByb290RWxlbWVudCA9IGVkaXRvci5nZXRCb2R5KCksIHN0YXJ0U2Nyb2xsV2lkdGgsIHN0YXJ0U2Nyb2xsSGVpZ2h0O1xuXG5cdFx0Ly8gRGV0YWlscyBhYm91dCBlYWNoIHJlc2l6ZSBoYW5kbGUgaG93IHRvIHNjYWxlIGV0Y1xuXHRcdHJlc2l6ZUhhbmRsZXMgPSB7XG5cdFx0XHQvLyBOYW1lOiB4IG11bHRpcGxpZXIsIHkgbXVsdGlwbGllciwgZGVsdGEgc2l6ZSB4LCBkZWx0YSBzaXplIHlcblx0XHRcdC8qbjogWzAuNSwgMCwgMCwgLTFdLFxuXHRcdFx0ZTogWzEsIDAuNSwgMSwgMF0sXG5cdFx0XHRzOiBbMC41LCAxLCAwLCAxXSxcblx0XHRcdHc6IFswLCAwLjUsIC0xLCAwXSwqL1xuXHRcdFx0bnc6IFswLCAwLCAtMSwgLTFdLFxuXHRcdFx0bmU6IFsxLCAwLCAxLCAtMV0sXG5cdFx0XHRzZTogWzEsIDEsIDEsIDFdLFxuXHRcdFx0c3c6IFswLCAxLCAtMSwgMV1cblx0XHR9O1xuXG5cdFx0Ly8gQWRkIENTUyBmb3IgcmVzaXplIGhhbmRsZXMsIGNsb25lZCBlbGVtZW50IGFuZCBzZWxlY3RlZFxuXHRcdHZhciByb290Q2xhc3MgPSAnLm1jZS1jb250ZW50LWJvZHknO1xuXHRcdGVkaXRvci5jb250ZW50U3R5bGVzLnB1c2goXG5cdFx0XHRyb290Q2xhc3MgKyAnIGRpdi5tY2UtcmVzaXplaGFuZGxlIHsnICtcblx0XHRcdFx0J3Bvc2l0aW9uOiBhYnNvbHV0ZTsnICtcblx0XHRcdFx0J2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrOycgK1xuXHRcdFx0XHQnYm94LXNpemluZzogYm94LXNpemluZzsnICtcblx0XHRcdFx0J2JhY2tncm91bmQ6ICNGRkY7JyArXG5cdFx0XHRcdCd3aWR0aDogN3B4OycgK1xuXHRcdFx0XHQnaGVpZ2h0OiA3cHg7JyArXG5cdFx0XHRcdCd6LWluZGV4OiAxMDAwMCcgK1xuXHRcdFx0J30nICtcblx0XHRcdHJvb3RDbGFzcyArICcgLm1jZS1yZXNpemVoYW5kbGU6aG92ZXIgeycgK1xuXHRcdFx0XHQnYmFja2dyb3VuZDogIzAwMCcgK1xuXHRcdFx0J30nICtcblx0XHRcdHJvb3RDbGFzcyArICcgaW1nW2RhdGEtbWNlLXNlbGVjdGVkXSwnICsgcm9vdENsYXNzICsgJyBocltkYXRhLW1jZS1zZWxlY3RlZF0geycgK1xuXHRcdFx0XHQnb3V0bGluZTogMXB4IHNvbGlkIGJsYWNrOycgK1xuXHRcdFx0XHQncmVzaXplOiBub25lJyArIC8vIEhhdmUgYmVlbiB0YWxrcyBhYm91dCBpbXBsZW1lbnRpbmcgdGhpcyBpbiBicm93c2Vyc1xuXHRcdFx0J30nICtcblx0XHRcdHJvb3RDbGFzcyArICcgLm1jZS1jbG9uZWRyZXNpemFibGUgeycgK1xuXHRcdFx0XHQncG9zaXRpb246IGFic29sdXRlOycgK1xuXHRcdFx0XHQoRW52LmdlY2tvID8gJycgOiAnb3V0bGluZTogMXB4IGRhc2hlZCBibGFjazsnKSArIC8vIEdlY2tvIHByb2R1Y2VzIHRyYWlscyB3aGlsZSByZXNpemluZ1xuXHRcdFx0XHQnb3BhY2l0eTogLjU7JyArXG5cdFx0XHRcdCdmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApOycgK1xuXHRcdFx0XHQnei1pbmRleDogMTAwMDAnICtcblx0XHRcdCd9JyArXG5cdFx0XHRyb290Q2xhc3MgKyAnIC5tY2UtcmVzaXplLWhlbHBlciB7JyArXG5cdFx0XHRcdCdiYWNrZ3JvdW5kOiAjNTU1OycgK1xuXHRcdFx0XHQnYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjc1KTsnICtcblx0XHRcdFx0J2JvcmRlci1yYWRpdXM6IDNweDsnICtcblx0XHRcdFx0J2JvcmRlcjogMXB4OycgK1xuXHRcdFx0XHQnY29sb3I6IHdoaXRlOycgK1xuXHRcdFx0XHQnZGlzcGxheTogbm9uZTsnICtcblx0XHRcdFx0J2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOycgK1xuXHRcdFx0XHQnZm9udC1zaXplOiAxMnB4OycgK1xuXHRcdFx0XHQnd2hpdGUtc3BhY2U6IG5vd3JhcDsnICtcblx0XHRcdFx0J2xpbmUtaGVpZ2h0OiAxNHB4OycgK1xuXHRcdFx0XHQnbWFyZ2luOiA1cHggMTBweDsnICtcblx0XHRcdFx0J3BhZGRpbmc6IDVweDsnICtcblx0XHRcdFx0J3Bvc2l0aW9uOiBhYnNvbHV0ZTsnICtcblx0XHRcdFx0J3otaW5kZXg6IDEwMDAxJyArXG5cdFx0XHQnfSdcblx0XHQpO1xuXG5cdFx0ZnVuY3Rpb24gaXNSZXNpemFibGUoZWxtKSB7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSBlZGl0b3Iuc2V0dGluZ3Mub2JqZWN0X3Jlc2l6aW5nO1xuXG5cdFx0XHRpZiAoc2VsZWN0b3IgPT09IGZhbHNlIHx8IEVudi5pT1MpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIHNlbGVjdG9yICE9ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHNlbGVjdG9yID0gJ3RhYmxlLGltZyxkaXYnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZWxtLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtcmVzaXplJykgPT09ICdmYWxzZScpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZWxtID09IGVkaXRvci5nZXRCb2R5KCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWRpdG9yLmRvbS5pcyhlbG0sIHNlbGVjdG9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZXNpemVHaG9zdEVsZW1lbnQoZSkge1xuXHRcdFx0dmFyIGRlbHRhWCwgZGVsdGFZLCBwcm9wb3J0aW9uYWw7XG5cdFx0XHR2YXIgcmVzaXplSGVscGVyWCwgcmVzaXplSGVscGVyWTtcblxuXHRcdFx0Ly8gQ2FsYyBuZXcgd2lkdGgvaGVpZ2h0XG5cdFx0XHRkZWx0YVggPSBlLnNjcmVlblggLSBzdGFydFg7XG5cdFx0XHRkZWx0YVkgPSBlLnNjcmVlblkgLSBzdGFydFk7XG5cblx0XHRcdC8vIENhbGMgbmV3IHNpemVcblx0XHRcdHdpZHRoID0gZGVsdGFYICogc2VsZWN0ZWRIYW5kbGVbMl0gKyBzdGFydFc7XG5cdFx0XHRoZWlnaHQgPSBkZWx0YVkgKiBzZWxlY3RlZEhhbmRsZVszXSArIHN0YXJ0SDtcblxuXHRcdFx0Ly8gTmV2ZXIgc2NhbGUgZG93biBsb3dlciB0aGFuIDUgcGl4ZWxzXG5cdFx0XHR3aWR0aCA9IHdpZHRoIDwgNSA/IDUgOiB3aWR0aDtcblx0XHRcdGhlaWdodCA9IGhlaWdodCA8IDUgPyA1IDogaGVpZ2h0O1xuXG5cdFx0XHRpZiAoc2VsZWN0ZWRFbG0ubm9kZU5hbWUgPT0gXCJJTUdcIiAmJiBlZGl0b3Iuc2V0dGluZ3MucmVzaXplX2ltZ19wcm9wb3J0aW9uYWwgIT09IGZhbHNlKSB7XG5cdFx0XHRcdHByb3BvcnRpb25hbCA9ICFWSy5tb2RpZmllclByZXNzZWQoZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwcm9wb3J0aW9uYWwgPSBWSy5tb2RpZmllclByZXNzZWQoZSkgfHwgKHNlbGVjdGVkRWxtLm5vZGVOYW1lID09IFwiSU1HXCIgJiYgc2VsZWN0ZWRIYW5kbGVbMl0gKiBzZWxlY3RlZEhhbmRsZVszXSAhPT0gMCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnN0cmFpbiBwcm9wb3J0aW9uc1xuXHRcdFx0aWYgKHByb3BvcnRpb25hbCkge1xuXHRcdFx0XHRpZiAoYWJzKGRlbHRhWCkgPiBhYnMoZGVsdGFZKSkge1xuXHRcdFx0XHRcdGhlaWdodCA9IHJvdW5kKHdpZHRoICogcmF0aW8pO1xuXHRcdFx0XHRcdHdpZHRoID0gcm91bmQoaGVpZ2h0IC8gcmF0aW8pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHdpZHRoID0gcm91bmQoaGVpZ2h0IC8gcmF0aW8pO1xuXHRcdFx0XHRcdGhlaWdodCA9IHJvdW5kKHdpZHRoICogcmF0aW8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVwZGF0ZSBnaG9zdCBzaXplXG5cdFx0XHRkb20uc2V0U3R5bGVzKHNlbGVjdGVkRWxtR2hvc3QsIHtcblx0XHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IGhlaWdodFxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIFVwZGF0ZSByZXNpemUgaGVscGVyIHBvc2l0aW9uXG5cdFx0XHRyZXNpemVIZWxwZXJYID0gc2VsZWN0ZWRIYW5kbGUuc3RhcnRQb3MueCArIGRlbHRhWDtcblx0XHRcdHJlc2l6ZUhlbHBlclkgPSBzZWxlY3RlZEhhbmRsZS5zdGFydFBvcy55ICsgZGVsdGFZO1xuXHRcdFx0cmVzaXplSGVscGVyWCA9IHJlc2l6ZUhlbHBlclggPiAwID8gcmVzaXplSGVscGVyWCA6IDA7XG5cdFx0XHRyZXNpemVIZWxwZXJZID0gcmVzaXplSGVscGVyWSA+IDAgPyByZXNpemVIZWxwZXJZIDogMDtcblxuXHRcdFx0ZG9tLnNldFN0eWxlcyhyZXNpemVIZWxwZXIsIHtcblx0XHRcdFx0bGVmdDogcmVzaXplSGVscGVyWCxcblx0XHRcdFx0dG9wOiByZXNpemVIZWxwZXJZLFxuXHRcdFx0XHRkaXNwbGF5OiAnYmxvY2snXG5cdFx0XHR9KTtcblxuXHRcdFx0cmVzaXplSGVscGVyLmlubmVySFRNTCA9IHdpZHRoICsgJyAmdGltZXM7ICcgKyBoZWlnaHQ7XG5cblx0XHRcdC8vIFVwZGF0ZSBnaG9zdCBYIHBvc2l0aW9uIGlmIG5lZWRlZFxuXHRcdFx0aWYgKHNlbGVjdGVkSGFuZGxlWzJdIDwgMCAmJiBzZWxlY3RlZEVsbUdob3N0LmNsaWVudFdpZHRoIDw9IHdpZHRoKSB7XG5cdFx0XHRcdGRvbS5zZXRTdHlsZShzZWxlY3RlZEVsbUdob3N0LCAnbGVmdCcsIHNlbGVjdGVkRWxtWCArIChzdGFydFcgLSB3aWR0aCkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVcGRhdGUgZ2hvc3QgWSBwb3NpdGlvbiBpZiBuZWVkZWRcblx0XHRcdGlmIChzZWxlY3RlZEhhbmRsZVszXSA8IDAgJiYgc2VsZWN0ZWRFbG1HaG9zdC5jbGllbnRIZWlnaHQgPD0gaGVpZ2h0KSB7XG5cdFx0XHRcdGRvbS5zZXRTdHlsZShzZWxlY3RlZEVsbUdob3N0LCAndG9wJywgc2VsZWN0ZWRFbG1ZICsgKHN0YXJ0SCAtIGhlaWdodCkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgaG93IG11c3Qgb3ZlcmZsb3cgd2UgZ290XG5cdFx0XHRkZWx0YVggPSByb290RWxlbWVudC5zY3JvbGxXaWR0aCAtIHN0YXJ0U2Nyb2xsV2lkdGg7XG5cdFx0XHRkZWx0YVkgPSByb290RWxlbWVudC5zY3JvbGxIZWlnaHQgLSBzdGFydFNjcm9sbEhlaWdodDtcblxuXHRcdFx0Ly8gUmUtcG9zaXRpb24gdGhlIHJlc2l6ZSBoZWxwZXIgYmFzZWQgb24gdGhlIG92ZXJmbG93XG5cdFx0XHRpZiAoZGVsdGFYICsgZGVsdGFZICE9PSAwKSB7XG5cdFx0XHRcdGRvbS5zZXRTdHlsZXMocmVzaXplSGVscGVyLCB7XG5cdFx0XHRcdFx0bGVmdDogcmVzaXplSGVscGVyWCAtIGRlbHRhWCxcblx0XHRcdFx0XHR0b3A6IHJlc2l6ZUhlbHBlclkgLSBkZWx0YVlcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghcmVzaXplU3RhcnRlZCkge1xuXHRcdFx0XHRlZGl0b3IuZmlyZSgnT2JqZWN0UmVzaXplU3RhcnQnLCB7dGFyZ2V0OiBzZWxlY3RlZEVsbSwgd2lkdGg6IHN0YXJ0VywgaGVpZ2h0OiBzdGFydEh9KTtcblx0XHRcdFx0cmVzaXplU3RhcnRlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZW5kR2hvc3RSZXNpemUoKSB7XG5cdFx0XHRyZXNpemVTdGFydGVkID0gZmFsc2U7XG5cblx0XHRcdGZ1bmN0aW9uIHNldFNpemVQcm9wKG5hbWUsIHZhbHVlKSB7XG5cdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdC8vIFJlc2l6ZSBieSB1c2luZyBzdHlsZSBvciBhdHRyaWJ1dGVcblx0XHRcdFx0XHRpZiAoc2VsZWN0ZWRFbG0uc3R5bGVbbmFtZV0gfHwgIWVkaXRvci5zY2hlbWEuaXNWYWxpZChzZWxlY3RlZEVsbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBuYW1lKSkge1xuXHRcdFx0XHRcdFx0ZG9tLnNldFN0eWxlKHNlbGVjdGVkRWxtLCBuYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRvbS5zZXRBdHRyaWIoc2VsZWN0ZWRFbG0sIG5hbWUsIHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHdpZHRoL2hlaWdodCBwcm9wZXJ0aWVzXG5cdFx0XHRzZXRTaXplUHJvcCgnd2lkdGgnLCB3aWR0aCk7XG5cdFx0XHRzZXRTaXplUHJvcCgnaGVpZ2h0JywgaGVpZ2h0KTtcblxuXHRcdFx0ZG9tLnVuYmluZChlZGl0YWJsZURvYywgJ21vdXNlbW92ZScsIHJlc2l6ZUdob3N0RWxlbWVudCk7XG5cdFx0XHRkb20udW5iaW5kKGVkaXRhYmxlRG9jLCAnbW91c2V1cCcsIGVuZEdob3N0UmVzaXplKTtcblxuXHRcdFx0aWYgKHJvb3REb2N1bWVudCAhPSBlZGl0YWJsZURvYykge1xuXHRcdFx0XHRkb20udW5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNlbW92ZScsIHJlc2l6ZUdob3N0RWxlbWVudCk7XG5cdFx0XHRcdGRvbS51bmJpbmQocm9vdERvY3VtZW50LCAnbW91c2V1cCcsIGVuZEdob3N0UmVzaXplKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdob3N0L2hlbHBlciBhbmQgdXBkYXRlIHJlc2l6ZSBoYW5kbGUgcG9zaXRpb25zXG5cdFx0XHRkb20ucmVtb3ZlKHNlbGVjdGVkRWxtR2hvc3QpO1xuXHRcdFx0ZG9tLnJlbW92ZShyZXNpemVIZWxwZXIpO1xuXG5cdFx0XHRpZiAoIWlzSUUgfHwgc2VsZWN0ZWRFbG0ubm9kZU5hbWUgPT0gXCJUQUJMRVwiKSB7XG5cdFx0XHRcdHNob3dSZXNpemVSZWN0KHNlbGVjdGVkRWxtKTtcblx0XHRcdH1cblxuXHRcdFx0ZWRpdG9yLmZpcmUoJ09iamVjdFJlc2l6ZWQnLCB7dGFyZ2V0OiBzZWxlY3RlZEVsbSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pO1xuXHRcdFx0ZG9tLnNldEF0dHJpYihzZWxlY3RlZEVsbSwgJ3N0eWxlJywgZG9tLmdldEF0dHJpYihzZWxlY3RlZEVsbSwgJ3N0eWxlJykpO1xuXHRcdFx0ZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2hvd1Jlc2l6ZVJlY3QodGFyZ2V0RWxtLCBtb3VzZURvd25IYW5kbGVOYW1lLCBtb3VzZURvd25FdmVudCkge1xuXHRcdFx0dmFyIHBvc2l0aW9uLCB0YXJnZXRXaWR0aCwgdGFyZ2V0SGVpZ2h0LCBlLCByZWN0O1xuXG5cdFx0XHRoaWRlUmVzaXplUmVjdCgpO1xuXHRcdFx0dW5iaW5kUmVzaXplSGFuZGxlRXZlbnRzKCk7XG5cblx0XHRcdC8vIEdldCBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0YXJnZXRcblx0XHRcdHBvc2l0aW9uID0gZG9tLmdldFBvcyh0YXJnZXRFbG0sIHJvb3RFbGVtZW50KTtcblx0XHRcdHNlbGVjdGVkRWxtWCA9IHBvc2l0aW9uLng7XG5cdFx0XHRzZWxlY3RlZEVsbVkgPSBwb3NpdGlvbi55O1xuXHRcdFx0cmVjdCA9IHRhcmdldEVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgLy8gRml4IGZvciBHZWNrbyBvZmZzZXRIZWlnaHQgZm9yIHRhYmxlIHdpdGggY2FwdGlvblxuXHRcdFx0dGFyZ2V0V2lkdGggPSByZWN0LndpZHRoIHx8IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KTtcblx0XHRcdHRhcmdldEhlaWdodCA9IHJlY3QuaGVpZ2h0IHx8IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKTtcblxuXHRcdFx0Ly8gUmVzZXQgd2lkdGgvaGVpZ2h0IGlmIHVzZXIgc2VsZWN0cyBhIG5ldyBpbWFnZS90YWJsZVxuXHRcdFx0aWYgKHNlbGVjdGVkRWxtICE9IHRhcmdldEVsbSkge1xuXHRcdFx0XHRkZXRhY2hSZXNpemVTdGFydExpc3RlbmVyKCk7XG5cdFx0XHRcdHNlbGVjdGVkRWxtID0gdGFyZ2V0RWxtO1xuXHRcdFx0XHR3aWR0aCA9IGhlaWdodCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpc2FibGUgcmVzaXppbmdcblx0XHRcdGUgPSBlZGl0b3IuZmlyZSgnT2JqZWN0U2VsZWN0ZWQnLCB7dGFyZ2V0OiB0YXJnZXRFbG19KTtcblxuXHRcdFx0aWYgKGlzUmVzaXphYmxlKHRhcmdldEVsbSkgJiYgIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0ZWFjaChyZXNpemVIYW5kbGVzLCBmdW5jdGlvbihoYW5kbGUsIG5hbWUpIHtcblx0XHRcdFx0XHR2YXIgaGFuZGxlRWxtO1xuXG5cdFx0XHRcdFx0ZnVuY3Rpb24gc3RhcnREcmFnKGUpIHtcblx0XHRcdFx0XHRcdHN0YXJ0WCA9IGUuc2NyZWVuWDtcblx0XHRcdFx0XHRcdHN0YXJ0WSA9IGUuc2NyZWVuWTtcblx0XHRcdFx0XHRcdHN0YXJ0VyA9IHNlbGVjdGVkRWxtLmNsaWVudFdpZHRoO1xuXHRcdFx0XHRcdFx0c3RhcnRIID0gc2VsZWN0ZWRFbG0uY2xpZW50SGVpZ2h0O1xuXHRcdFx0XHRcdFx0cmF0aW8gPSBzdGFydEggLyBzdGFydFc7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZEhhbmRsZSA9IGhhbmRsZTtcblxuXHRcdFx0XHRcdFx0aGFuZGxlLnN0YXJ0UG9zID0ge1xuXHRcdFx0XHRcdFx0XHR4OiB0YXJnZXRXaWR0aCAqIGhhbmRsZVswXSArIHNlbGVjdGVkRWxtWCxcblx0XHRcdFx0XHRcdFx0eTogdGFyZ2V0SGVpZ2h0ICogaGFuZGxlWzFdICsgc2VsZWN0ZWRFbG1ZXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRzdGFydFNjcm9sbFdpZHRoID0gcm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGg7XG5cdFx0XHRcdFx0XHRzdGFydFNjcm9sbEhlaWdodCA9IHJvb3RFbGVtZW50LnNjcm9sbEhlaWdodDtcblxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRFbG1HaG9zdCA9IHNlbGVjdGVkRWxtLmNsb25lTm9kZSh0cnVlKTtcblx0XHRcdFx0XHRcdGRvbS5hZGRDbGFzcyhzZWxlY3RlZEVsbUdob3N0LCAnbWNlLWNsb25lZHJlc2l6YWJsZScpO1xuXHRcdFx0XHRcdFx0ZG9tLnNldEF0dHJpYihzZWxlY3RlZEVsbUdob3N0LCAnZGF0YS1tY2UtYm9ndXMnLCAnYWxsJyk7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZEVsbUdob3N0LmNvbnRlbnRFZGl0YWJsZSA9IGZhbHNlOyAvLyBIaWRlcyBJRSBtb3ZlIGxheWVyIGN1cnNvclxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRFbG1HaG9zdC51blNlbGVjdGFiZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRkb20uc2V0U3R5bGVzKHNlbGVjdGVkRWxtR2hvc3QsIHtcblx0XHRcdFx0XHRcdFx0bGVmdDogc2VsZWN0ZWRFbG1YLFxuXHRcdFx0XHRcdFx0XHR0b3A6IHNlbGVjdGVkRWxtWSxcblx0XHRcdFx0XHRcdFx0bWFyZ2luOiAwXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRFbG1HaG9zdC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNlbGVjdGVkJyk7XG5cdFx0XHRcdFx0XHRyb290RWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3RlZEVsbUdob3N0KTtcblxuXHRcdFx0XHRcdFx0ZG9tLmJpbmQoZWRpdGFibGVEb2MsICdtb3VzZW1vdmUnLCByZXNpemVHaG9zdEVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0ZG9tLmJpbmQoZWRpdGFibGVEb2MsICdtb3VzZXVwJywgZW5kR2hvc3RSZXNpemUpO1xuXG5cdFx0XHRcdFx0XHRpZiAocm9vdERvY3VtZW50ICE9IGVkaXRhYmxlRG9jKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNlbW92ZScsIHJlc2l6ZUdob3N0RWxlbWVudCk7XG5cdFx0XHRcdFx0XHRcdGRvbS5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNldXAnLCBlbmRHaG9zdFJlc2l6ZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJlc2l6ZUhlbHBlciA9IGRvbS5hZGQocm9vdEVsZW1lbnQsICdkaXYnLCB7XG5cdFx0XHRcdFx0XHRcdCdjbGFzcyc6ICdtY2UtcmVzaXplLWhlbHBlcicsXG5cdFx0XHRcdFx0XHRcdCdkYXRhLW1jZS1ib2d1cyc6ICdhbGwnXG5cdFx0XHRcdFx0XHR9LCBzdGFydFcgKyAnICZ0aW1lczsgJyArIHN0YXJ0SCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG1vdXNlRG93bkhhbmRsZU5hbWUpIHtcblx0XHRcdFx0XHRcdC8vIERyYWcgc3RhcnRlZCBieSBJRSBuYXRpdmUgcmVzaXplc3RhcnRcblx0XHRcdFx0XHRcdGlmIChuYW1lID09IG1vdXNlRG93bkhhbmRsZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0c3RhcnREcmFnKG1vdXNlRG93bkV2ZW50KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEdldCBleGlzdGluZyBvciByZW5kZXIgcmVzaXplIGhhbmRsZVxuXHRcdFx0XHRcdGhhbmRsZUVsbSA9IGRvbS5nZXQoJ21jZVJlc2l6ZUhhbmRsZScgKyBuYW1lKTtcblx0XHRcdFx0XHRpZiAoaGFuZGxlRWxtKSB7XG5cdFx0XHRcdFx0XHRkb20ucmVtb3ZlKGhhbmRsZUVsbSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aGFuZGxlRWxtID0gZG9tLmFkZChyb290RWxlbWVudCwgJ2RpdicsIHtcblx0XHRcdFx0XHRcdGlkOiAnbWNlUmVzaXplSGFuZGxlJyArIG5hbWUsXG5cdFx0XHRcdFx0XHQnZGF0YS1tY2UtYm9ndXMnOiAnYWxsJyxcblx0XHRcdFx0XHRcdCdjbGFzcyc6ICdtY2UtcmVzaXplaGFuZGxlJyxcblx0XHRcdFx0XHRcdHVuc2VsZWN0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHN0eWxlOiAnY3Vyc29yOicgKyBuYW1lICsgJy1yZXNpemU7IG1hcmdpbjowOyBwYWRkaW5nOjAnXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBIaWRlcyBJRSBtb3ZlIGxheWVyIGN1cnNvclxuXHRcdFx0XHRcdC8vIElmIHdlIHNldCBpdCBvbiBDaHJvbWUgd2UgZ2V0IHRoaXMgd291bmRlcmZ1bCBidWc6ICM2NzI1XG5cdFx0XHRcdFx0aWYgKEVudi5pZSkge1xuXHRcdFx0XHRcdFx0aGFuZGxlRWxtLmNvbnRlbnRFZGl0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGRvbS5iaW5kKGhhbmRsZUVsbSwgJ21vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRzdGFydERyYWcoZSk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRoYW5kbGUuZWxtID0gaGFuZGxlRWxtO1xuXG5cdFx0XHRcdFx0Ly8gUG9zaXRpb24gZWxlbWVudFxuXHRcdFx0XHRcdGRvbS5zZXRTdHlsZXMoaGFuZGxlRWxtLCB7XG5cdFx0XHRcdFx0XHRsZWZ0OiAodGFyZ2V0V2lkdGggKiBoYW5kbGVbMF0gKyBzZWxlY3RlZEVsbVgpIC0gKGhhbmRsZUVsbS5vZmZzZXRXaWR0aCAvIDIpLFxuXHRcdFx0XHRcdFx0dG9wOiAodGFyZ2V0SGVpZ2h0ICogaGFuZGxlWzFdICsgc2VsZWN0ZWRFbG1ZKSAtIChoYW5kbGVFbG0ub2Zmc2V0SGVpZ2h0IC8gMilcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoaWRlUmVzaXplUmVjdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RlZEVsbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNlbGVjdGVkJywgJzEnKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoaWRlUmVzaXplUmVjdCgpIHtcblx0XHRcdHZhciBuYW1lLCBoYW5kbGVFbG07XG5cblx0XHRcdHVuYmluZFJlc2l6ZUhhbmRsZUV2ZW50cygpO1xuXG5cdFx0XHRpZiAoc2VsZWN0ZWRFbG0pIHtcblx0XHRcdFx0c2VsZWN0ZWRFbG0ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1zZWxlY3RlZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKG5hbWUgaW4gcmVzaXplSGFuZGxlcykge1xuXHRcdFx0XHRoYW5kbGVFbG0gPSBkb20uZ2V0KCdtY2VSZXNpemVIYW5kbGUnICsgbmFtZSk7XG5cdFx0XHRcdGlmIChoYW5kbGVFbG0pIHtcblx0XHRcdFx0XHRkb20udW5iaW5kKGhhbmRsZUVsbSk7XG5cdFx0XHRcdFx0ZG9tLnJlbW92ZShoYW5kbGVFbG0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdXBkYXRlUmVzaXplUmVjdChlKSB7XG5cdFx0XHR2YXIgc3RhcnRFbG0sIGNvbnRyb2xFbG07XG5cblx0XHRcdGZ1bmN0aW9uIGlzQ2hpbGRPckVxdWFsKG5vZGUsIHBhcmVudCkge1xuXHRcdFx0XHRpZiAobm9kZSkge1xuXHRcdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRcdGlmIChub2RlID09PSBwYXJlbnQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZ25vcmUgYWxsIGV2ZW50cyB3aGlsZSByZXNpemluZyBvciBpZiB0aGUgZWRpdG9yIGluc3RhbmNlIHdhcyByZW1vdmVkXG5cdFx0XHRpZiAocmVzaXplU3RhcnRlZCB8fCBlZGl0b3IucmVtb3ZlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBkYXRhLW1jZS1zZWxlY3RlZCBmcm9tIGFsbCBlbGVtZW50cyBzaW5jZSB0aGV5IG1pZ2h0IGhhdmUgYmVlbiBjb3BpZWQgdXNpbmcgQ3RybCtjL3Zcblx0XHRcdGVhY2goZG9tLnNlbGVjdCgnaW1nW2RhdGEtbWNlLXNlbGVjdGVkXSxocltkYXRhLW1jZS1zZWxlY3RlZF0nKSwgZnVuY3Rpb24oaW1nKSB7XG5cdFx0XHRcdGltZy5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNlbGVjdGVkJyk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29udHJvbEVsbSA9IGUudHlwZSA9PSAnbW91c2Vkb3duJyA/IGUudGFyZ2V0IDogc2VsZWN0aW9uLmdldE5vZGUoKTtcblx0XHRcdGNvbnRyb2xFbG0gPSBkb20uJChjb250cm9sRWxtKS5jbG9zZXN0KGlzSUUgPyAndGFibGUnIDogJ3RhYmxlLGltZyxocicpWzBdO1xuXG5cdFx0XHRpZiAoaXNDaGlsZE9yRXF1YWwoY29udHJvbEVsbSwgcm9vdEVsZW1lbnQpKSB7XG5cdFx0XHRcdGRpc2FibGVHZWNrb1Jlc2l6ZSgpO1xuXHRcdFx0XHRzdGFydEVsbSA9IHNlbGVjdGlvbi5nZXRTdGFydCh0cnVlKTtcblxuXHRcdFx0XHRpZiAoaXNDaGlsZE9yRXF1YWwoc3RhcnRFbG0sIGNvbnRyb2xFbG0pICYmIGlzQ2hpbGRPckVxdWFsKHNlbGVjdGlvbi5nZXRFbmQodHJ1ZSksIGNvbnRyb2xFbG0pKSB7XG5cdFx0XHRcdFx0aWYgKCFpc0lFIHx8IChjb250cm9sRWxtICE9IHN0YXJ0RWxtICYmIHN0YXJ0RWxtLm5vZGVOYW1lICE9PSAnSU1HJykpIHtcblx0XHRcdFx0XHRcdHNob3dSZXNpemVSZWN0KGNvbnRyb2xFbG0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRoaWRlUmVzaXplUmVjdCgpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGF0dGFjaEV2ZW50KGVsbSwgbmFtZSwgZnVuYykge1xuXHRcdFx0aWYgKGVsbSAmJiBlbG0uYXR0YWNoRXZlbnQpIHtcblx0XHRcdFx0ZWxtLmF0dGFjaEV2ZW50KCdvbicgKyBuYW1lLCBmdW5jKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBkZXRhY2hFdmVudChlbG0sIG5hbWUsIGZ1bmMpIHtcblx0XHRcdGlmIChlbG0gJiYgZWxtLmRldGFjaEV2ZW50KSB7XG5cdFx0XHRcdGVsbS5kZXRhY2hFdmVudCgnb24nICsgbmFtZSwgZnVuYyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcmVzaXplTmF0aXZlU3RhcnQoZSkge1xuXHRcdFx0dmFyIHRhcmdldCA9IGUuc3JjRWxlbWVudCwgcG9zLCBuYW1lLCBjb3JuZXIsIGNvcm5lclgsIGNvcm5lclksIHJlbGF0aXZlWCwgcmVsYXRpdmVZO1xuXG5cdFx0XHRwb3MgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRyZWxhdGl2ZVggPSBsYXN0TW91c2VEb3duRXZlbnQuY2xpZW50WCAtIHBvcy5sZWZ0O1xuXHRcdFx0cmVsYXRpdmVZID0gbGFzdE1vdXNlRG93bkV2ZW50LmNsaWVudFkgLSBwb3MudG9wO1xuXG5cdFx0XHQvLyBGaWd1cmUgb3V0IHdoYXQgY29ybmVyIHdlIGFyZSBkcmFnaW5nIG9uXG5cdFx0XHRmb3IgKG5hbWUgaW4gcmVzaXplSGFuZGxlcykge1xuXHRcdFx0XHRjb3JuZXIgPSByZXNpemVIYW5kbGVzW25hbWVdO1xuXG5cdFx0XHRcdGNvcm5lclggPSB0YXJnZXQub2Zmc2V0V2lkdGggKiBjb3JuZXJbMF07XG5cdFx0XHRcdGNvcm5lclkgPSB0YXJnZXQub2Zmc2V0SGVpZ2h0ICogY29ybmVyWzFdO1xuXG5cdFx0XHRcdGlmIChhYnMoY29ybmVyWCAtIHJlbGF0aXZlWCkgPCA4ICYmIGFicyhjb3JuZXJZIC0gcmVsYXRpdmVZKSA8IDgpIHtcblx0XHRcdFx0XHRzZWxlY3RlZEhhbmRsZSA9IGNvcm5lcjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgbmF0aXZlIHNlbGVjdGlvbiBhbmQgbGV0IHRoZSBtYWdpYyBiZWdpblxuXHRcdFx0cmVzaXplU3RhcnRlZCA9IHRydWU7XG5cdFx0XHRlZGl0b3IuZmlyZSgnT2JqZWN0UmVzaXplU3RhcnQnLCB7XG5cdFx0XHRcdHRhcmdldDogc2VsZWN0ZWRFbG0sXG5cdFx0XHRcdHdpZHRoOiBzZWxlY3RlZEVsbS5jbGllbnRXaWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBzZWxlY3RlZEVsbS5jbGllbnRIZWlnaHRcblx0XHRcdH0pO1xuXHRcdFx0ZWRpdG9yLmdldERvYygpLnNlbGVjdGlvbi5lbXB0eSgpO1xuXHRcdFx0c2hvd1Jlc2l6ZVJlY3QodGFyZ2V0LCBuYW1lLCBsYXN0TW91c2VEb3duRXZlbnQpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGUpIHtcblx0XHRcdGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgLy8gSUVcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc1dpdGhpbkNvbnRlbnRFZGl0YWJsZUZhbHNlKGVsbSkge1xuXHRcdFx0cmV0dXJuIGlzQ29udGVudEVkaXRhYmxlRmFsc2UoZ2V0Q29udGVudEVkaXRhYmxlUm9vdChlZGl0b3IuZ2V0Qm9keSgpLCBlbG0pKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBuYXRpdmVDb250cm9sU2VsZWN0KGUpIHtcblx0XHRcdHZhciB0YXJnZXQgPSBlLnNyY0VsZW1lbnQ7XG5cblx0XHRcdGlmIChpc1dpdGhpbkNvbnRlbnRFZGl0YWJsZUZhbHNlKHRhcmdldCkpIHtcblx0XHRcdFx0cHJldmVudERlZmF1bHQoZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRhcmdldCAhPSBzZWxlY3RlZEVsbSkge1xuXHRcdFx0XHRlZGl0b3IuZmlyZSgnT2JqZWN0U2VsZWN0ZWQnLCB7dGFyZ2V0OiB0YXJnZXR9KTtcblx0XHRcdFx0ZGV0YWNoUmVzaXplU3RhcnRMaXN0ZW5lcigpO1xuXG5cdFx0XHRcdGlmICh0YXJnZXQuaWQuaW5kZXhPZignbWNlUmVzaXplSGFuZGxlJykgPT09IDApIHtcblx0XHRcdFx0XHRlLnJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldC5ub2RlTmFtZSA9PSAnSU1HJyB8fCB0YXJnZXQubm9kZU5hbWUgPT0gJ1RBQkxFJykge1xuXHRcdFx0XHRcdGhpZGVSZXNpemVSZWN0KCk7XG5cdFx0XHRcdFx0c2VsZWN0ZWRFbG0gPSB0YXJnZXQ7XG5cdFx0XHRcdFx0YXR0YWNoRXZlbnQodGFyZ2V0LCAncmVzaXplc3RhcnQnLCByZXNpemVOYXRpdmVTdGFydCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBkZXRhY2hSZXNpemVTdGFydExpc3RlbmVyKCkge1xuXHRcdFx0ZGV0YWNoRXZlbnQoc2VsZWN0ZWRFbG0sICdyZXNpemVzdGFydCcsIHJlc2l6ZU5hdGl2ZVN0YXJ0KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB1bmJpbmRSZXNpemVIYW5kbGVFdmVudHMoKSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIHJlc2l6ZUhhbmRsZXMpIHtcblx0XHRcdFx0dmFyIGhhbmRsZSA9IHJlc2l6ZUhhbmRsZXNbbmFtZV07XG5cblx0XHRcdFx0aWYgKGhhbmRsZS5lbG0pIHtcblx0XHRcdFx0XHRkb20udW5iaW5kKGhhbmRsZS5lbG0pO1xuXHRcdFx0XHRcdGRlbGV0ZSBoYW5kbGUuZWxtO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZGlzYWJsZUdlY2tvUmVzaXplKCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gRGlzYWJsZSBvYmplY3QgcmVzaXppbmcgb24gR2Vja29cblx0XHRcdFx0ZWRpdG9yLmdldERvYygpLmV4ZWNDb21tYW5kKCdlbmFibGVPYmplY3RSZXNpemluZycsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHQvLyBJZ25vcmVcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjb250cm9sU2VsZWN0KGVsbSkge1xuXHRcdFx0dmFyIGN0cmxSbmc7XG5cblx0XHRcdGlmICghaXNJRSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGN0cmxSbmcgPSBlZGl0YWJsZURvYy5ib2R5LmNyZWF0ZUNvbnRyb2xSYW5nZSgpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjdHJsUm5nLmFkZEVsZW1lbnQoZWxtKTtcblx0XHRcdFx0Y3RybFJuZy5zZWxlY3QoKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHQvLyBJZ25vcmUgc2luY2UgdGhlIGVsZW1lbnQgY2FuJ3QgYmUgY29udHJvbCBzZWxlY3RlZCBmb3IgZXhhbXBsZSBhIFAgdGFnXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZWRpdG9yLm9uKCdpbml0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoaXNJRSkge1xuXHRcdFx0XHQvLyBIaWRlIHRoZSByZXNpemUgcmVjdCBvbiByZXNpemUgYW5kIHJlc2VsZWN0IHRoZSBpbWFnZVxuXHRcdFx0XHRlZGl0b3Iub24oJ09iamVjdFJlc2l6ZWQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0aWYgKGUudGFyZ2V0Lm5vZGVOYW1lICE9ICdUQUJMRScpIHtcblx0XHRcdFx0XHRcdGhpZGVSZXNpemVSZWN0KCk7XG5cdFx0XHRcdFx0XHRjb250cm9sU2VsZWN0KGUudGFyZ2V0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGF0dGFjaEV2ZW50KHJvb3RFbGVtZW50LCAnY29udHJvbHNlbGVjdCcsIG5hdGl2ZUNvbnRyb2xTZWxlY3QpO1xuXG5cdFx0XHRcdGVkaXRvci5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGxhc3RNb3VzZURvd25FdmVudCA9IGU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGlzYWJsZUdlY2tvUmVzaXplKCk7XG5cblx0XHRcdFx0Ly8gU25pZmYgc25pZmYsIGhhcmQgdG8gZmVhdHVyZSBkZXRlY3QgdGhpcyBzdHVmZlxuXHRcdFx0XHRpZiAoRW52LmllID49IDExKSB7XG5cdFx0XHRcdFx0Ly8gTmVlZHMgdG8gYmUgbW91c2Vkb3duIGZvciBkcmFnL2Ryb3AgdG8gd29yayBvbiBJRSAxMVxuXHRcdFx0XHRcdC8vIE5lZWRzIHRvIGJlIGNsaWNrIG9uIEVkZ2UgdG8gcHJvcGVybHkgc2VsZWN0IGltYWdlc1xuXHRcdFx0XHRcdGVkaXRvci5vbignbW91c2Vkb3duIGNsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdFx0dmFyIHRhcmdldCA9IGUudGFyZ2V0LCBub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZTtcblxuXHRcdFx0XHRcdFx0aWYgKCFyZXNpemVTdGFydGVkICYmIC9eKFRBQkxFfElNR3xIUikkLy50ZXN0KG5vZGVOYW1lKSAmJiAhaXNXaXRoaW5Db250ZW50RWRpdGFibGVGYWxzZSh0YXJnZXQpKSB7XG5cdFx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KHRhcmdldCwgbm9kZU5hbWUgPT0gJ1RBQkxFJyk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT25seSBmaXJlIG9uY2Ugc2luY2Ugbm9kZUNoYW5nZSBpcyBleHBlbnNpdmVcblx0XHRcdFx0XHRcdFx0aWYgKGUudHlwZSA9PSAnbW91c2Vkb3duJykge1xuXHRcdFx0XHRcdFx0XHRcdGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRlZGl0b3IuZG9tLmJpbmQocm9vdEVsZW1lbnQsICdtc2NvbnRyb2xzZWxlY3QnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0XHRmdW5jdGlvbiBkZWxheWVkU2VsZWN0KG5vZGUpIHtcblx0XHRcdFx0XHRcdFx0RGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGlzV2l0aGluQ29udGVudEVkaXRhYmxlRmFsc2UoZS50YXJnZXQpKSB7XG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZGVsYXllZFNlbGVjdChlLnRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKC9eKFRBQkxFfElNR3xIUikkLy50ZXN0KGUudGFyZ2V0Lm5vZGVOYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBtb3ZlcyB0aGUgc2VsZWN0aW9uIGZyb20gYmVpbmcgYSBjb250cm9sIHNlbGVjdGlvbiB0byBhIHRleHQgbGlrZSBzZWxlY3Rpb24gbGlrZSBpbiBXZWJLaXQgIzY3NTNcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogRml4IHRoaXMgdGhlIGRheSBJRSB3b3JrcyBsaWtlIG90aGVyIGJyb3dzZXJzIHdpdGhvdXQgdGhpcyBuYXN0eSBuYXRpdmUgdWdseSBjb250cm9sIHNlbGVjdGlvbnMuXG5cdFx0XHRcdFx0XHRcdGlmIChlLnRhcmdldC50YWdOYW1lID09ICdJTUcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXllZFNlbGVjdChlLnRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdGhyb3R0bGVkVXBkYXRlUmVzaXplUmVjdCA9IERlbGF5LnRocm90dGxlKGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKCFlZGl0b3IuY29tcG9zaW5nKSB7XG5cdFx0XHRcdFx0dXBkYXRlUmVzaXplUmVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGVkaXRvci5vbignbm9kZWNoYW5nZSBSZXNpemVFZGl0b3IgUmVzaXplV2luZG93IGRyb3AnLCB0aHJvdHRsZWRVcGRhdGVSZXNpemVSZWN0KTtcblxuXHRcdFx0Ly8gVXBkYXRlIHJlc2l6ZSByZWN0IHdoaWxlIHR5cGluZyBpbiBhIHRhYmxlXG5cdFx0XHRlZGl0b3Iub24oJ2tleXVwIGNvbXBvc2l0aW9uZW5kJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHQvLyBEb24ndCB1cGRhdGUgdGhlIHJlc2l6ZSByZWN0IHdoaWxlIGNvbXBvc2luZyBzaW5jZSBpdCBibG93cyBhd2F5IHRoZSBJTUUgc2VlOiAjMjcxMFxuXHRcdFx0XHRpZiAoc2VsZWN0ZWRFbG0gJiYgc2VsZWN0ZWRFbG0ubm9kZU5hbWUgPT0gXCJUQUJMRVwiKSB7XG5cdFx0XHRcdFx0dGhyb3R0bGVkVXBkYXRlUmVzaXplUmVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGVkaXRvci5vbignaGlkZSBibHVyJywgaGlkZVJlc2l6ZVJlY3QpO1xuXG5cdFx0XHQvLyBIaWRlIHJlY3Qgb24gZm9jdXNvdXQgc2luY2UgaXQgd291bGQgZmxvYXQgb24gdG9wIG9mIHdpbmRvd3Mgb3RoZXJ3aXNlXG5cdFx0XHQvL2VkaXRvci5vbignZm9jdXNvdXQnLCBoaWRlUmVzaXplUmVjdCk7XG5cdFx0fSk7XG5cblx0XHRlZGl0b3Iub24oJ3JlbW92ZScsIHVuYmluZFJlc2l6ZUhhbmRsZUV2ZW50cyk7XG5cblx0XHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdFx0c2VsZWN0ZWRFbG0gPSBzZWxlY3RlZEVsbUdob3N0ID0gbnVsbDtcblxuXHRcdFx0aWYgKGlzSUUpIHtcblx0XHRcdFx0ZGV0YWNoUmVzaXplU3RhcnRMaXN0ZW5lcigpO1xuXHRcdFx0XHRkZXRhY2hFdmVudChyb290RWxlbWVudCwgJ2NvbnRyb2xzZWxlY3QnLCBuYXRpdmVDb250cm9sU2VsZWN0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aXNSZXNpemFibGU6IGlzUmVzaXphYmxlLFxuXHRcdFx0c2hvd1Jlc2l6ZVJlY3Q6IHNob3dSZXNpemVSZWN0LFxuXHRcdFx0aGlkZVJlc2l6ZVJlY3Q6IGhpZGVSZXNpemVSZWN0LFxuXHRcdFx0dXBkYXRlUmVzaXplUmVjdDogdXBkYXRlUmVzaXplUmVjdCxcblx0XHRcdGNvbnRyb2xTZWxlY3Q6IGNvbnRyb2xTZWxlY3QsXG5cdFx0XHRkZXN0cm95OiBkZXN0cm95XG5cdFx0fTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9GdW4uanNcblxuLyoqXG4gKiBGdW4uanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBGdW5jdGlvbmFsIHV0aWxpdHkgY2xhc3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLnV0aWwuRnVuXG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9GdW5cIiwgW10sIGZ1bmN0aW9uKCkge1xuXHR2YXIgc2xpY2UgPSBbXS5zbGljZTtcblxuXHRmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkge1xuXHRcdHJldHVybiBmdW5jdGlvbih4KSB7XG5cdFx0XHRyZXR1cm4gIXByZWRpY2F0ZSh4KTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gY29tcG9zZShmLCBnKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHgpIHtcblx0XHRcdHJldHVybiBmKGcoeCkpO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBvcigpIHtcblx0XHR2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbih4KSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKGFyZ3NbaV0oeCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFuZCgpIHtcblx0XHR2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbih4KSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKCFhcmdzW2ldKHgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBjdXJyeShmbikge1xuXHRcdHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG5cdFx0aWYgKGFyZ3MubGVuZ3RoIC0gMSA+PSBmbi5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzLnNsaWNlKDEpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGVtcEFyZ3MgPSBhcmdzLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuXHRcdFx0cmV0dXJuIGN1cnJ5LmFwcGx5KHRoaXMsIHRlbXBBcmdzKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Y29uc3RhbnQ6IGNvbnN0YW50LFxuXHRcdG5lZ2F0ZTogbmVnYXRlLFxuXHRcdGFuZDogYW5kLFxuXHRcdG9yOiBvcixcblx0XHRjdXJyeTogY3VycnksXG5cdFx0Y29tcG9zZTogY29tcG9zZSxcblx0XHRub29wOiBub29wXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2NhcmV0L0NhcmV0Q2FuZGlkYXRlLmpzXG5cbi8qKlxuICogQ2FyZXRDYW5kaWRhdGUuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBjb250YWlucyBsb2dpYyBmb3IgaGFuZGxpbmcgY2FyZXQgY2FuZGlkYXRlcy4gQSBjYXJldCBjYW5kaWRhdGUgaXNcbiAqIGZvciBleGFtcGxlIHRleHQgbm9kZXMsIGltYWdlcywgaW5wdXQgZWxlbWVudHMsIGNFPWZhbHNlIGVsZW1lbnRzIGV0Yy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuY2FyZXQuQ2FyZXRDYW5kaWRhdGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9jYXJldC9DYXJldENhbmRpZGF0ZVwiLCBbXG5cdFwidGlueW1jZS9kb20vTm9kZVR5cGVcIixcblx0XCJ0aW55bWNlL3V0aWwvQXJyXCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldENvbnRhaW5lclwiXG5dLCBmdW5jdGlvbihOb2RlVHlwZSwgQXJyLCBDYXJldENvbnRhaW5lcikge1xuXHR2YXIgaXNDb250ZW50RWRpdGFibGVUcnVlID0gTm9kZVR5cGUuaXNDb250ZW50RWRpdGFibGVUcnVlLFxuXHRcdGlzQ29udGVudEVkaXRhYmxlRmFsc2UgPSBOb2RlVHlwZS5pc0NvbnRlbnRFZGl0YWJsZUZhbHNlLFxuXHRcdGlzQnIgPSBOb2RlVHlwZS5pc0JyLFxuXHRcdGlzVGV4dCA9IE5vZGVUeXBlLmlzVGV4dCxcblx0XHRpc0ludmFsaWRUZXh0RWxlbWVudCA9IE5vZGVUeXBlLm1hdGNoTm9kZU5hbWVzKCdzY3JpcHQgc3R5bGUgdGV4dGFyZWEnKSxcblx0XHRpc0F0b21pY0lubGluZSA9IE5vZGVUeXBlLm1hdGNoTm9kZU5hbWVzKCdpbWcgaW5wdXQgdGV4dGFyZWEgaHIgaWZyYW1lIHZpZGVvIGF1ZGlvIG9iamVjdCcpLFxuXHRcdGlzVGFibGUgPSBOb2RlVHlwZS5tYXRjaE5vZGVOYW1lcygndGFibGUnKSxcblx0XHRpc0NhcmV0Q29udGFpbmVyID0gQ2FyZXRDb250YWluZXIuaXNDYXJldENvbnRhaW5lcjtcblxuXHRmdW5jdGlvbiBpc0NhcmV0Q2FuZGlkYXRlKG5vZGUpIHtcblx0XHRpZiAoaXNDYXJldENvbnRhaW5lcihub2RlKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChpc1RleHQobm9kZSkpIHtcblx0XHRcdGlmIChpc0ludmFsaWRUZXh0RWxlbWVudChub2RlLnBhcmVudE5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQXRvbWljSW5saW5lKG5vZGUpIHx8IGlzQnIobm9kZSkgfHwgaXNUYWJsZShub2RlKSB8fCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNJbkVkaXRhYmxlKG5vZGUsIHJvb3ROb2RlKSB7XG5cdFx0Zm9yIChub2RlID0gbm9kZS5wYXJlbnROb2RlOyBub2RlICYmIG5vZGUgIT0gcm9vdE5vZGU7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUpIHtcblx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlVHJ1ZShub2RlKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzQXRvbWljQ29udGVudEVkaXRhYmxlRmFsc2Uobm9kZSkge1xuXHRcdGlmICghaXNDb250ZW50RWRpdGFibGVGYWxzZShub2RlKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBBcnIucmVkdWNlKG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSwgZnVuY3Rpb24ocmVzdWx0LCBlbG0pIHtcblx0XHRcdHJldHVybiByZXN1bHQgfHwgaXNDb250ZW50RWRpdGFibGVUcnVlKGVsbSk7XG5cdFx0fSwgZmFsc2UpICE9PSB0cnVlO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNBdG9taWMobm9kZSkge1xuXHRcdHJldHVybiBpc0F0b21pY0lubGluZShub2RlKSB8fCBpc0F0b21pY0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlKG5vZGUsIHJvb3ROb2RlKSB7XG5cdFx0cmV0dXJuIGlzQ2FyZXRDYW5kaWRhdGUobm9kZSkgJiYgaXNJbkVkaXRhYmxlKG5vZGUsIHJvb3ROb2RlKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aXNDYXJldENhbmRpZGF0ZTogaXNDYXJldENhbmRpZGF0ZSxcblx0XHRpc0luRWRpdGFibGU6IGlzSW5FZGl0YWJsZSxcblx0XHRpc0F0b21pYzogaXNBdG9taWMsXG5cdFx0aXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlOiBpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGVcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZ2VvbS9DbGllbnRSZWN0LmpzXG5cbi8qKlxuICogQ2xpZW50UmVjdC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggY2xpZW50IHJlY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5nZW9tLkNsaWVudFJlY3RcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9nZW9tL0NsaWVudFJlY3RcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHR2YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG5cdGZ1bmN0aW9uIGNsb25lKHJlY3QpIHtcblx0XHRpZiAoIXJlY3QpIHtcblx0XHRcdHJldHVybiB7bGVmdDogMCwgdG9wOiAwLCBib3R0b206IDAsIHJpZ2h0OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwfTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bGVmdDogcm91bmQocmVjdC5sZWZ0KSxcblx0XHRcdHRvcDogcm91bmQocmVjdC50b3ApLFxuXHRcdFx0Ym90dG9tOiByb3VuZChyZWN0LmJvdHRvbSksXG5cdFx0XHRyaWdodDogcm91bmQocmVjdC5yaWdodCksXG5cdFx0XHR3aWR0aDogcm91bmQocmVjdC53aWR0aCksXG5cdFx0XHRoZWlnaHQ6IHJvdW5kKHJlY3QuaGVpZ2h0KVxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBjb2xsYXBzZShjbGllbnRSZWN0LCB0b1N0YXJ0KSB7XG5cdFx0Y2xpZW50UmVjdCA9IGNsb25lKGNsaWVudFJlY3QpO1xuXG5cdFx0aWYgKHRvU3RhcnQpIHtcblx0XHRcdGNsaWVudFJlY3QucmlnaHQgPSBjbGllbnRSZWN0LmxlZnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNsaWVudFJlY3QubGVmdCA9IGNsaWVudFJlY3QubGVmdCArIGNsaWVudFJlY3Qud2lkdGg7XG5cdFx0XHRjbGllbnRSZWN0LnJpZ2h0ID0gY2xpZW50UmVjdC5sZWZ0O1xuXHRcdH1cblxuXHRcdGNsaWVudFJlY3Qud2lkdGggPSAwO1xuXG5cdFx0cmV0dXJuIGNsaWVudFJlY3Q7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0VxdWFsKHJlY3QxLCByZWN0Mikge1xuXHRcdHJldHVybiAoXG5cdFx0XHRyZWN0MS5sZWZ0ID09PSByZWN0Mi5sZWZ0ICYmXG5cdFx0XHRyZWN0MS50b3AgPT09IHJlY3QyLnRvcCAmJlxuXHRcdFx0cmVjdDEuYm90dG9tID09PSByZWN0Mi5ib3R0b20gJiZcblx0XHRcdHJlY3QxLnJpZ2h0ID09PSByZWN0Mi5yaWdodFxuXHRcdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1ZhbGlkT3ZlcmZsb3cob3ZlcmZsb3dZLCBjbGllbnRSZWN0MSwgY2xpZW50UmVjdDIpIHtcblx0XHRyZXR1cm4gb3ZlcmZsb3dZID49IDAgJiYgb3ZlcmZsb3dZIDw9IE1hdGgubWluKGNsaWVudFJlY3QxLmhlaWdodCwgY2xpZW50UmVjdDIuaGVpZ2h0KSAvIDI7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGlzQWJvdmUoY2xpZW50UmVjdDEsIGNsaWVudFJlY3QyKSB7XG5cdFx0aWYgKGNsaWVudFJlY3QxLmJvdHRvbSA8IGNsaWVudFJlY3QyLnRvcCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNsaWVudFJlY3QxLnRvcCA+IGNsaWVudFJlY3QyLmJvdHRvbSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc1ZhbGlkT3ZlcmZsb3coY2xpZW50UmVjdDIudG9wIC0gY2xpZW50UmVjdDEuYm90dG9tLCBjbGllbnRSZWN0MSwgY2xpZW50UmVjdDIpO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNCZWxvdyhjbGllbnRSZWN0MSwgY2xpZW50UmVjdDIpIHtcblx0XHRpZiAoY2xpZW50UmVjdDEudG9wID4gY2xpZW50UmVjdDIuYm90dG9tKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2xpZW50UmVjdDEuYm90dG9tIDwgY2xpZW50UmVjdDIudG9wKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzVmFsaWRPdmVyZmxvdyhjbGllbnRSZWN0Mi5ib3R0b20gLSBjbGllbnRSZWN0MS50b3AsIGNsaWVudFJlY3QxLCBjbGllbnRSZWN0Mik7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0xlZnQoY2xpZW50UmVjdDEsIGNsaWVudFJlY3QyKSB7XG5cdFx0cmV0dXJuIGNsaWVudFJlY3QxLmxlZnQgPCBjbGllbnRSZWN0Mi5sZWZ0O1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNSaWdodChjbGllbnRSZWN0MSwgY2xpZW50UmVjdDIpIHtcblx0XHRyZXR1cm4gY2xpZW50UmVjdDEucmlnaHQgPiBjbGllbnRSZWN0Mi5yaWdodDtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvbXBhcmUoY2xpZW50UmVjdDEsIGNsaWVudFJlY3QyKSB7XG5cdFx0aWYgKGlzQWJvdmUoY2xpZW50UmVjdDEsIGNsaWVudFJlY3QyKSkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdGlmIChpc0JlbG93KGNsaWVudFJlY3QxLCBjbGllbnRSZWN0MikpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdGlmIChpc0xlZnQoY2xpZW50UmVjdDEsIGNsaWVudFJlY3QyKSkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdGlmIChpc1JpZ2h0KGNsaWVudFJlY3QxLCBjbGllbnRSZWN0MikpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29udGFpbnNYWShjbGllbnRSZWN0LCBjbGllbnRYLCBjbGllbnRZKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGNsaWVudFggPj0gY2xpZW50UmVjdC5sZWZ0ICYmXG5cdFx0XHRjbGllbnRYIDw9IGNsaWVudFJlY3QucmlnaHQgJiZcblx0XHRcdGNsaWVudFkgPj0gY2xpZW50UmVjdC50b3AgJiZcblx0XHRcdGNsaWVudFkgPD0gY2xpZW50UmVjdC5ib3R0b21cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRjbG9uZTogY2xvbmUsXG5cdFx0Y29sbGFwc2U6IGNvbGxhcHNlLFxuXHRcdGlzRXF1YWw6IGlzRXF1YWwsXG5cdFx0aXNBYm92ZTogaXNBYm92ZSxcblx0XHRpc0JlbG93OiBpc0JlbG93LFxuXHRcdGlzTGVmdDogaXNMZWZ0LFxuXHRcdGlzUmlnaHQ6IGlzUmlnaHQsXG5cdFx0Y29tcGFyZTogY29tcGFyZSxcblx0XHRjb250YWluc1hZOiBjb250YWluc1hZXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3RleHQvRXh0ZW5kaW5nQ2hhci5qc1xuXG4vKipcbiAqIEV4dGVuZGluZ0NoYXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGxvZ2ljIGZvciBkZXRlY3RpbmcgZXh0ZW5kaW5nIGNoYXJhY3RlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLnRleHQuRXh0ZW5kaW5nQ2hhclxuICogQGV4YW1wbGVcbiAqIHZhciBpc0V4dGVuZGluZyA9IEV4dGVuZGluZ0NoYXIuaXNFeHRlbmRpbmdDaGFyKCdhJyk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvdGV4dC9FeHRlbmRpbmdDaGFyXCIsIFtdLCBmdW5jdGlvbigpIHtcblx0Ly8gR2VuZXJhdGVkIGZyb206IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VOSURBVEEvRGVyaXZlZENvcmVQcm9wZXJ0aWVzLnR4dFxuXHQvLyBPbmx5IGluY2x1ZGVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoYXQgZml0IGludG8gVUNTLTIgMTYgYml0XG5cdHZhciBleHRlbmRpbmdDaGFycyA9IG5ldyBSZWdFeHAoXG5cdFx0XCJbXFx1MDMwMC1cXHUwMzZGXFx1MDQ4My1cXHUwNDg3XFx1MDQ4OC1cXHUwNDg5XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzEtXFx1MDVDMlxcdTA1QzQtXFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcIiArXG5cdFx0XCJcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFNy1cXHUwNkU4XFx1MDZFQS1cXHUwNkVEXFx1MDcxMVxcdTA3MzAtXFx1MDc0QVxcdTA3QTYtXFx1MDdCMFwiICtcblx0XHRcIlxcdTA3RUItXFx1MDdGM1xcdTA4MTYtXFx1MDgxOVxcdTA4MUItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyRFxcdTA4NTktXFx1MDg1QlxcdTA4RTMtXFx1MDkwMlxcdTA5M0FcXHUwOTNDXCIgK1xuXHRcdFwiXFx1MDk0MS1cXHUwOTQ4XFx1MDk0RFxcdTA5NTEtXFx1MDk1N1xcdTA5NjItXFx1MDk2M1xcdTA5ODFcXHUwOUJDXFx1MDlCRVxcdTA5QzEtXFx1MDlDNFxcdTA5Q0RcXHUwOUQ3XFx1MDlFMi1cXHUwOUUzXCIgK1xuXHRcdFwiXFx1MEEwMS1cXHUwQTAyXFx1MEEzQ1xcdTBBNDEtXFx1MEE0MlxcdTBBNDctXFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwLVxcdTBBNzFcXHUwQTc1XFx1MEE4MS1cXHUwQTgyXFx1MEFCQ1wiICtcblx0XHRcIlxcdTBBQzEtXFx1MEFDNVxcdTBBQzctXFx1MEFDOFxcdTBBQ0RcXHUwQUUyLVxcdTBBRTNcXHUwQjAxXFx1MEIzQ1xcdTBCM0VcXHUwQjNGXFx1MEI0MS1cXHUwQjQ0XFx1MEI0RFxcdTBCNTZcXHUwQjU3XCIgK1xuXHRcdFwiXFx1MEI2Mi1cXHUwQjYzXFx1MEI4MlxcdTBCQkVcXHUwQkMwXFx1MEJDRFxcdTBCRDdcXHUwQzAwXFx1MEMzRS1cXHUwQzQwXFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NS1cXHUwQzU2XCIgK1xuXHRcdFwiXFx1MEM2Mi1cXHUwQzYzXFx1MEM4MVxcdTBDQkNcXHUwQ0JGXFx1MENDMlxcdTBDQzZcXHUwQ0NDLVxcdTBDQ0RcXHUwQ0Q1LVxcdTBDRDZcXHUwQ0UyLVxcdTBDRTNcXHUwRDAxXFx1MEQzRVxcdTBENDEtXFx1MEQ0NFwiICtcblx0XHRcIlxcdTBENERcXHUwRDU3XFx1MEQ2Mi1cXHUwRDYzXFx1MERDQVxcdTBEQ0ZcXHUwREQyLVxcdTBERDRcXHUwREQ2XFx1MERERlxcdTBFMzFcXHUwRTM0LVxcdTBFM0FcXHUwRTQ3LVxcdTBFNEVcXHUwRUIxXFx1MEVCNC1cXHUwRUI5XCIgK1xuXHRcdFwiXFx1MEVCQi1cXHUwRUJDXFx1MEVDOC1cXHUwRUNEXFx1MEYxOC1cXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEY3MS1cXHUwRjdFXFx1MEY4MC1cXHUwRjg0XFx1MEY4Ni1cXHUwRjg3XFx1MEY4RC1cXHUwRjk3XCIgK1xuXHRcdFwiXFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkQtXFx1MTAzMFxcdTEwMzItXFx1MTAzN1xcdTEwMzktXFx1MTAzQVxcdTEwM0QtXFx1MTAzRVxcdTEwNTgtXFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNzEtXFx1MTA3NFwiICtcblx0XHRcIlxcdTEwODJcXHUxMDg1LVxcdTEwODZcXHUxMDhEXFx1MTA5RFxcdTEzNUQtXFx1MTM1RlxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTItXFx1MTc1M1xcdTE3NzItXFx1MTc3M1xcdTE3QjQtXFx1MTdCNVwiICtcblx0XHRcIlxcdTE3QjctXFx1MTdCRFxcdTE3QzZcXHUxN0M5LVxcdTE3RDNcXHUxN0REXFx1MTgwQi1cXHUxODBEXFx1MThBOVxcdTE5MjAtXFx1MTkyMlxcdTE5MjctXFx1MTkyOFxcdTE5MzJcXHUxOTM5LVxcdTE5M0JcXHUxQTE3LVxcdTFBMThcIiArXG5cdFx0XCJcXHUxQTFCXFx1MUE1NlxcdTFBNTgtXFx1MUE1RVxcdTFBNjBcXHUxQTYyXFx1MUE2NS1cXHUxQTZDXFx1MUE3My1cXHUxQTdDXFx1MUE3RlxcdTFBQjAtXFx1MUFCRFxcdTFBQkVcXHUxQjAwLVxcdTFCMDNcXHUxQjM0XCIgK1xuXHRcdFwiXFx1MUIzNi1cXHUxQjNBXFx1MUIzQ1xcdTFCNDJcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCODFcXHUxQkEyLVxcdTFCQTVcXHUxQkE4LVxcdTFCQTlcXHUxQkFCLVxcdTFCQURcXHUxQkU2XFx1MUJFOC1cXHUxQkU5XCIgK1xuXHRcdFwiXFx1MUJFRFxcdTFCRUYtXFx1MUJGMVxcdTFDMkMtXFx1MUMzM1xcdTFDMzYtXFx1MUMzN1xcdTFDRDAtXFx1MUNEMlxcdTFDRDQtXFx1MUNFMFxcdTFDRTItXFx1MUNFOFxcdTFDRURcXHUxQ0Y0XFx1MUNGOC1cXHUxQ0Y5XCIgK1xuXHRcdFwiXFx1MURDMC1cXHUxREY1XFx1MURGQy1cXHUxREZGXFx1MjAwQy1cXHUyMDBEXFx1MjBEMC1cXHUyMERDXFx1MjBERC1cXHUyMEUwXFx1MjBFMVxcdTIwRTItXFx1MjBFNFxcdTIwRTUtXFx1MjBGMFxcdTJDRUYtXFx1MkNGMVwiICtcblx0XHRcIlxcdTJEN0ZcXHUyREUwLVxcdTJERkZcXHUzMDJBLVxcdTMwMkRcXHUzMDJFLVxcdTMwMkZcXHUzMDk5LVxcdTMwOUFcXHVBNjZGXFx1QTY3MC1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RS1cXHVBNjlGXFx1QTZGMC1cXHVBNkYxXCIgK1xuXHRcdFwiXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyNS1cXHVBODI2XFx1QThDNFxcdUE4RTAtXFx1QThGMVxcdUE5MjYtXFx1QTkyRFxcdUE5NDctXFx1QTk1MVxcdUE5ODAtXFx1QTk4MlxcdUE5QjNcXHVBOUI2LVxcdUE5QjlcXHVBOUJDXCIgK1xuXHRcdFwiXFx1QTlFNVxcdUFBMjktXFx1QUEyRVxcdUFBMzEtXFx1QUEzMlxcdUFBMzUtXFx1QUEzNlxcdUFBNDNcXHVBQTRDXFx1QUE3Q1xcdUFBQjBcXHVBQUIyLVxcdUFBQjRcXHVBQUI3LVxcdUFBQjhcXHVBQUJFLVxcdUFBQkZcXHVBQUMxXCIgK1xuXHRcdFwiXFx1QUFFQy1cXHVBQUVEXFx1QUFGNlxcdUFCRTVcXHVBQkU4XFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkZcXHVGRjlFLVxcdUZGOUZdXCJcblx0KTtcblxuXHRmdW5jdGlvbiBpc0V4dGVuZGluZ0NoYXIoY2gpIHtcblx0XHRyZXR1cm4gdHlwZW9mIGNoID09IFwic3RyaW5nXCIgJiYgY2guY2hhckNvZGVBdCgwKSA+PSA3NjggJiYgZXh0ZW5kaW5nQ2hhcnMudGVzdChjaCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGlzRXh0ZW5kaW5nQ2hhcjogaXNFeHRlbmRpbmdDaGFyXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2NhcmV0L0NhcmV0UG9zaXRpb24uanNcblxuLyoqXG4gKiBDYXJldFBvc2l0aW9uLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgbG9naWMgZm9yIGNyZWF0aW5nIGNhcmV0IHBvc2l0aW9ucyB3aXRoaW4gYSBkb2N1bWVudCBhIGNhcmV0cG9zaXRpb25cbiAqIGlzIHNpbWlsYXIgdG8gYSBET01SYW5nZSBvYmplY3QgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0d28gZW5kcG9pbnRzIGFuZCBpcyBhbHNvIG1vcmUgbGlnaHR3ZWlnaHRcbiAqIHNpbmNlIGl0J3Mgbm93IHVwZGF0ZWQgbGl2ZSB3aGVuIHRoZSBET00gY2hhbmdlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuY2FyZXQuQ2FyZXRQb3NpdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBjYXJldFBvczEgPSBuZXcgQ2FyZXRQb3NpdGlvbihjb250YWluZXIsIG9mZnNldCk7XG4gKiB2YXIgY2FyZXRQb3MyID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChzb21lUmFuZ2UpO1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL2NhcmV0L0NhcmV0UG9zaXRpb25cIiwgW1xuXHRcInRpbnltY2UvdXRpbC9GdW5cIixcblx0XCJ0aW55bWNlL2RvbS9Ob2RlVHlwZVwiLFxuXHRcInRpbnltY2UvZG9tL0RPTVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vUmFuZ2VVdGlsc1wiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRDYW5kaWRhdGVcIixcblx0XCJ0aW55bWNlL2dlb20vQ2xpZW50UmVjdFwiLFxuXHRcInRpbnltY2UvdGV4dC9FeHRlbmRpbmdDaGFyXCJcbl0sIGZ1bmN0aW9uKEZ1biwgTm9kZVR5cGUsIERPTVV0aWxzLCBSYW5nZVV0aWxzLCBDYXJldENhbmRpZGF0ZSwgQ2xpZW50UmVjdCwgRXh0ZW5kaW5nQ2hhcikge1xuXHR2YXIgaXNFbGVtZW50ID0gTm9kZVR5cGUuaXNFbGVtZW50LFxuXHRcdGlzQ2FyZXRDYW5kaWRhdGUgPSBDYXJldENhbmRpZGF0ZS5pc0NhcmV0Q2FuZGlkYXRlLFxuXHRcdGlzQmxvY2sgPSBOb2RlVHlwZS5tYXRjaFN0eWxlVmFsdWVzKCdkaXNwbGF5JywgJ2Jsb2NrIHRhYmxlJyksXG5cdFx0aXNGbG9hdGVkID0gTm9kZVR5cGUubWF0Y2hTdHlsZVZhbHVlcygnZmxvYXQnLCAnbGVmdCByaWdodCcpLFxuXHRcdGlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUgPSBGdW4uYW5kKGlzRWxlbWVudCwgaXNDYXJldENhbmRpZGF0ZSwgRnVuLm5lZ2F0ZShpc0Zsb2F0ZWQpKSxcblx0XHRpc05vdFByZSA9IEZ1bi5uZWdhdGUoTm9kZVR5cGUubWF0Y2hTdHlsZVZhbHVlcygnd2hpdGUtc3BhY2UnLCAncHJlIHByZS1saW5lIHByZS13cmFwJykpLFxuXHRcdGlzVGV4dCA9IE5vZGVUeXBlLmlzVGV4dCxcblx0XHRpc0JyID0gTm9kZVR5cGUuaXNCcixcblx0XHRub2RlSW5kZXggPSBET01VdGlscy5ub2RlSW5kZXgsXG5cdFx0cmVzb2x2ZUluZGV4ID0gUmFuZ2VVdGlscy5nZXROb2RlO1xuXG5cdGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGRvYykge1xuXHRcdHJldHVybiBcImNyZWF0ZVJhbmdlXCIgaW4gZG9jID8gZG9jLmNyZWF0ZVJhbmdlKCkgOiBET01VdGlscy5ET00uY3JlYXRlUm5nKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1doaXRlU3BhY2UoY2hyKSB7XG5cdFx0cmV0dXJuIGNociAmJiAvW1xcclxcblxcdCBdLy50ZXN0KGNocik7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0hpZGRlbldoaXRlU3BhY2VSYW5nZShyYW5nZSkge1xuXHRcdHZhciBjb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcixcblx0XHRcdG9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuXHRcdFx0dGV4dDtcblxuXHRcdGlmIChpc1doaXRlU3BhY2UocmFuZ2UudG9TdHJpbmcoKSkgJiYgaXNOb3RQcmUoY29udGFpbmVyLnBhcmVudE5vZGUpKSB7XG5cdFx0XHR0ZXh0ID0gY29udGFpbmVyLmRhdGE7XG5cblx0XHRcdGlmIChpc1doaXRlU3BhY2UodGV4dFtvZmZzZXQgLSAxXSkgfHwgaXNXaGl0ZVNwYWNlKHRleHRbb2Zmc2V0ICsgMV0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb25DbGllbnRSZWN0cyhjYXJldFBvc2l0aW9uKSB7XG5cdFx0dmFyIGNsaWVudFJlY3RzID0gW10sIGJlZm9yZU5vZGUsIG5vZGU7XG5cblx0XHQvLyBIYWNrIGZvciBvbGRlciBXZWJLaXQgdmVyc2lvbnMgdGhhdCBkb2Vzbid0XG5cdFx0Ly8gc3VwcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gQlIgZWxlbWVudHNcblx0XHRmdW5jdGlvbiBnZXRCckNsaWVudFJlY3QoYnJOb2RlKSB7XG5cdFx0XHR2YXIgZG9jID0gYnJOb2RlLm93bmVyRG9jdW1lbnQsXG5cdFx0XHRcdHJuZyA9IGNyZWF0ZVJhbmdlKGRvYyksXG5cdFx0XHRcdG5ic3AgPSBkb2MuY3JlYXRlVGV4dE5vZGUoJ1xcdTAwYTAnKSxcblx0XHRcdFx0cGFyZW50Tm9kZSA9IGJyTm9kZS5wYXJlbnROb2RlLFxuXHRcdFx0XHRjbGllbnRSZWN0O1xuXG5cdFx0XHRwYXJlbnROb2RlLmluc2VydEJlZm9yZShuYnNwLCBick5vZGUpO1xuXHRcdFx0cm5nLnNldFN0YXJ0KG5ic3AsIDApO1xuXHRcdFx0cm5nLnNldEVuZChuYnNwLCAxKTtcblx0XHRcdGNsaWVudFJlY3QgPSBDbGllbnRSZWN0LmNsb25lKHJuZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG5cdFx0XHRwYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5ic3ApO1xuXG5cdFx0XHRyZXR1cm4gY2xpZW50UmVjdDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoaXRlbSkge1xuXHRcdFx0dmFyIGNsaWVudFJlY3QsIGNsaWVudFJlY3RzO1xuXG5cdFx0XHRjbGllbnRSZWN0cyA9IGl0ZW0uZ2V0Q2xpZW50UmVjdHMoKTtcblx0XHRcdGlmIChjbGllbnRSZWN0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNsaWVudFJlY3QgPSBDbGllbnRSZWN0LmNsb25lKGNsaWVudFJlY3RzWzBdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsaWVudFJlY3QgPSBDbGllbnRSZWN0LmNsb25lKGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNCcihpdGVtKSAmJiBjbGllbnRSZWN0LmxlZnQgPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIGdldEJyQ2xpZW50UmVjdChpdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNsaWVudFJlY3Q7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoY2xpZW50UmVjdCwgdG9TdGFydCkge1xuXHRcdFx0Y2xpZW50UmVjdCA9IENsaWVudFJlY3QuY29sbGFwc2UoY2xpZW50UmVjdCwgdG9TdGFydCk7XG5cdFx0XHRjbGllbnRSZWN0LndpZHRoID0gMTtcblx0XHRcdGNsaWVudFJlY3QucmlnaHQgPSBjbGllbnRSZWN0LmxlZnQgKyAxO1xuXG5cdFx0XHRyZXR1cm4gY2xpZW50UmVjdDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY2xpZW50UmVjdCkge1xuXHRcdFx0aWYgKGNsaWVudFJlY3QuaGVpZ2h0ID09PSAwKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsaWVudFJlY3RzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKENsaWVudFJlY3QuaXNFcXVhbChjbGllbnRSZWN0LCBjbGllbnRSZWN0c1tjbGllbnRSZWN0cy5sZW5ndGggLSAxXSkpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y2xpZW50UmVjdHMucHVzaChjbGllbnRSZWN0KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZGRDaGFyYWN0ZXJPZmZzZXQoY29udGFpbmVyLCBvZmZzZXQpIHtcblx0XHRcdHZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKGNvbnRhaW5lci5vd25lckRvY3VtZW50KTtcblxuXHRcdFx0aWYgKG9mZnNldCA8IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuXHRcdFx0XHRpZiAoRXh0ZW5kaW5nQ2hhci5pc0V4dGVuZGluZ0NoYXIoY29udGFpbmVyLmRhdGFbb2Zmc2V0XSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xpZW50UmVjdHM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZWJLaXQgcmV0dXJucyB0d28gY2xpZW50IHJlY3RzIGZvciBhIHBvc2l0aW9uIGFmdGVyIGFuIGV4dGVuZGluZ1xuXHRcdFx0XHQvLyBjaGFyYWN0ZXIgYVxcdXh4eHxiIHNvIGV4cGFuZCBvbiBcImJcIiBhbmQgY29sbGFwc2UgdG8gc3RhcnQgb2YgXCJiXCIgYm94XG5cdFx0XHRcdGlmIChFeHRlbmRpbmdDaGFyLmlzRXh0ZW5kaW5nQ2hhcihjb250YWluZXIuZGF0YVtvZmZzZXQgLSAxXSkpIHtcblx0XHRcdFx0XHRyYW5nZS5zZXRTdGFydChjb250YWluZXIsIG9mZnNldCk7XG5cdFx0XHRcdFx0cmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0ICsgMSk7XG5cblx0XHRcdFx0XHRpZiAoIWlzSGlkZGVuV2hpdGVTcGFjZVJhbmdlKHJhbmdlKSkge1xuXHRcdFx0XHRcdFx0YWRkVW5pcXVlQW5kVmFsaWRSZWN0KGNvbGxhcHNlQW5kSW5mbGF0ZVdpZHRoKGdldEJvdW5kaW5nQ2xpZW50UmVjdChyYW5nZSksIGZhbHNlKSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY2xpZW50UmVjdHM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvZmZzZXQgPiAwKSB7XG5cdFx0XHRcdHJhbmdlLnNldFN0YXJ0KGNvbnRhaW5lciwgb2Zmc2V0IC0gMSk7XG5cdFx0XHRcdHJhbmdlLnNldEVuZChjb250YWluZXIsIG9mZnNldCk7XG5cblx0XHRcdFx0aWYgKCFpc0hpZGRlbldoaXRlU3BhY2VSYW5nZShyYW5nZSkpIHtcblx0XHRcdFx0XHRhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJhbmdlKSwgZmFsc2UpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob2Zmc2V0IDwgY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG5cdFx0XHRcdHJhbmdlLnNldFN0YXJ0KGNvbnRhaW5lciwgb2Zmc2V0KTtcblx0XHRcdFx0cmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0ICsgMSk7XG5cblx0XHRcdFx0aWYgKCFpc0hpZGRlbldoaXRlU3BhY2VSYW5nZShyYW5nZSkpIHtcblx0XHRcdFx0XHRhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJhbmdlKSwgdHJ1ZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzVGV4dChjYXJldFBvc2l0aW9uLmNvbnRhaW5lcigpKSkge1xuXHRcdFx0YWRkQ2hhcmFjdGVyT2Zmc2V0KGNhcmV0UG9zaXRpb24uY29udGFpbmVyKCksIGNhcmV0UG9zaXRpb24ub2Zmc2V0KCkpO1xuXHRcdFx0cmV0dXJuIGNsaWVudFJlY3RzO1xuXHRcdH1cblxuXHRcdGlmIChpc0VsZW1lbnQoY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKSkpIHtcblx0XHRcdGlmIChjYXJldFBvc2l0aW9uLmlzQXRFbmQoKSkge1xuXHRcdFx0XHRub2RlID0gcmVzb2x2ZUluZGV4KGNhcmV0UG9zaXRpb24uY29udGFpbmVyKCksIGNhcmV0UG9zaXRpb24ub2Zmc2V0KCkpO1xuXHRcdFx0XHRpZiAoaXNUZXh0KG5vZGUpKSB7XG5cdFx0XHRcdFx0YWRkQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUobm9kZSkgJiYgIWlzQnIobm9kZSkpIHtcblx0XHRcdFx0XHRhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG5vZGUpLCBmYWxzZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub2RlID0gcmVzb2x2ZUluZGV4KGNhcmV0UG9zaXRpb24uY29udGFpbmVyKCksIGNhcmV0UG9zaXRpb24ub2Zmc2V0KCkpO1xuXHRcdFx0XHRpZiAoaXNUZXh0KG5vZGUpKSB7XG5cdFx0XHRcdFx0YWRkQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUobm9kZSkgJiYgY2FyZXRQb3NpdGlvbi5pc0F0RW5kKCkpIHtcblx0XHRcdFx0XHRhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG5vZGUpLCBmYWxzZSkpO1xuXHRcdFx0XHRcdHJldHVybiBjbGllbnRSZWN0cztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJlZm9yZU5vZGUgPSByZXNvbHZlSW5kZXgoY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKSwgY2FyZXRQb3NpdGlvbi5vZmZzZXQoKSAtIDEpO1xuXHRcdFx0XHRpZiAoaXNWYWxpZEVsZW1lbnRDYXJldENhbmRpZGF0ZShiZWZvcmVOb2RlKSAmJiAhaXNCcihiZWZvcmVOb2RlKSkge1xuXHRcdFx0XHRcdGlmIChpc0Jsb2NrKGJlZm9yZU5vZGUpIHx8IGlzQmxvY2sobm9kZSkgfHwgIWlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUobm9kZSkpIHtcblx0XHRcdFx0XHRcdGFkZFVuaXF1ZUFuZFZhbGlkUmVjdChjb2xsYXBzZUFuZEluZmxhdGVXaWR0aChnZXRCb3VuZGluZ0NsaWVudFJlY3QoYmVmb3JlTm9kZSksIGZhbHNlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzVmFsaWRFbGVtZW50Q2FyZXRDYW5kaWRhdGUobm9kZSkpIHtcblx0XHRcdFx0XHRhZGRVbmlxdWVBbmRWYWxpZFJlY3QoY29sbGFwc2VBbmRJbmZsYXRlV2lkdGgoZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG5vZGUpLCB0cnVlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xpZW50UmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogUmVwcmVzZW50cyBhIGxvY2F0aW9uIHdpdGhpbiB0aGUgZG9jdW1lbnQgYnkgYSBjb250YWluZXIgYW5kIGFuIG9mZnNldC5cblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBwYXJhbSB7Tm9kZX0gY29udGFpbmVyIENvbnRhaW5lciBub2RlLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE9mZnNldCB3aXRoaW4gdGhhdCBjb250YWluZXIgbm9kZS5cblx0ICogQHBhcmFtIHtBcnJheX0gY2xpZW50UmVjdHMgT3B0aW9uYWwgY2xpZW50IHJlY3RzIGFycmF5IGZvciB0aGUgcG9zaXRpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBDYXJldFBvc2l0aW9uKGNvbnRhaW5lciwgb2Zmc2V0LCBjbGllbnRSZWN0cykge1xuXHRcdGZ1bmN0aW9uIGlzQXRTdGFydCgpIHtcblx0XHRcdGlmIChpc1RleHQoY29udGFpbmVyKSkge1xuXHRcdFx0XHRyZXR1cm4gb2Zmc2V0ID09PSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0ID09PSAwO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzQXRFbmQoKSB7XG5cdFx0XHRpZiAoaXNUZXh0KGNvbnRhaW5lcikpIHtcblx0XHRcdFx0cmV0dXJuIG9mZnNldCA+PSBjb250YWluZXIuZGF0YS5sZW5ndGg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXQgPj0gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRvUmFuZ2UoKSB7XG5cdFx0XHR2YXIgcmFuZ2U7XG5cblx0XHRcdHJhbmdlID0gY3JlYXRlUmFuZ2UoY29udGFpbmVyLm93bmVyRG9jdW1lbnQpO1xuXHRcdFx0cmFuZ2Uuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuXHRcdFx0cmFuZ2Uuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcblxuXHRcdFx0cmV0dXJuIHJhbmdlO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldENsaWVudFJlY3RzKCkge1xuXHRcdFx0aWYgKCFjbGllbnRSZWN0cykge1xuXHRcdFx0XHRjbGllbnRSZWN0cyA9IGdldENhcmV0UG9zaXRpb25DbGllbnRSZWN0cyhuZXcgQ2FyZXRQb3NpdGlvbihjb250YWluZXIsIG9mZnNldCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY2xpZW50UmVjdHM7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNWaXNpYmxlKCkge1xuXHRcdFx0cmV0dXJuIGdldENsaWVudFJlY3RzKCkubGVuZ3RoID4gMDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc0VxdWFsKGNhcmV0UG9zaXRpb24pIHtcblx0XHRcdHJldHVybiBjYXJldFBvc2l0aW9uICYmIGNvbnRhaW5lciA9PT0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKSAmJiBvZmZzZXQgPT09IGNhcmV0UG9zaXRpb24ub2Zmc2V0KCk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0Tm9kZShiZWZvcmUpIHtcblx0XHRcdHJldHVybiByZXNvbHZlSW5kZXgoY29udGFpbmVyLCBiZWZvcmUgPyBvZmZzZXQgLSAxIDogb2Zmc2V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIHRoZSBjb250YWluZXIgbm9kZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIGNvbnRhaW5lclxuXHRcdFx0ICogQHJldHVybiB7Tm9kZX0gQ29udGFpbmVyIG5vZGUuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnRhaW5lcjogRnVuLmNvbnN0YW50KGNvbnRhaW5lciksXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgY29udGFpbmVyIG5vZGUuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBvZmZzZXRcblx0XHRcdCAqIEByZXR1cm4ge051bWJlcn0gT2Zmc2V0IHdpdGhpbiB0aGUgY29udGFpbmVyIG5vZGUuXG5cdFx0XHQgKi9cblx0XHRcdG9mZnNldDogRnVuLmNvbnN0YW50KG9mZnNldCksXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyBhIHJhbmdlIG91dCBvZiBhIHRoZSBjYXJldCBwb3NpdGlvbi5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIHRvUmFuZ2Vcblx0XHRcdCAqIEByZXR1cm4ge0RPTVJhbmdlfSByYW5nZSBmb3IgdGhlIGNhcmV0IHBvc2l0aW9uLlxuXHRcdFx0ICovXG5cdFx0XHR0b1JhbmdlOiB0b1JhbmdlLFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdGhlIGNsaWVudCByZWN0cyBmb3IgdGhlIGNhcmV0IHBvc2l0aW9uLiBNaWdodCBiZSBtdWx0aXBsZSByZWN0cyBiZXR3ZWVuXG5cdFx0XHQgKiBibG9jayBlbGVtZW50cy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIGdldENsaWVudFJlY3RzXG5cdFx0XHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgb2YgY2xpZW50IHJlY3RzLlxuXHRcdFx0ICovXG5cdFx0XHRnZXRDbGllbnRSZWN0czogZ2V0Q2xpZW50UmVjdHMsXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYXJldCBsb2NhdGlvbiBpcyB2aXNpYmxlL2Rpc3BsYXllZCBvbiBzY3JlZW4uXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBpc1Zpc2libGVcblx0XHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIHBvc2l0aW9uIGlzIHZpc2libGUgb3Igbm90LlxuXHRcdFx0ICovXG5cdFx0XHRpc1Zpc2libGU6IGlzVmlzaWJsZSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNhcmV0IGxvY2F0aW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGV4dCBub2RlIG9yIGNvbnRhaW5lci5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIGlzVmlzaWJsZVxuXHRcdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZSBpZiB0aGUgcG9zaXRpb24gaXMgYXQgdGhlIGJlZ2lubmluZy5cblx0XHRcdCAqL1xuXHRcdFx0aXNBdFN0YXJ0OiBpc0F0U3RhcnQsXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYXJldCBsb2NhdGlvbiBpcyBhdCB0aGUgZW5kIG9mIHRleHQgbm9kZSBvciBjb250YWluZXIuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBpc1Zpc2libGVcblx0XHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQuXG5cdFx0XHQgKi9cblx0XHRcdGlzQXRFbmQ6IGlzQXRFbmQsXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQ29tcGFyZXMgdGhlIGNhcmV0IHBvc2l0aW9uIHRvIGFub3RoZXIgY2FyZXQgcG9zaXRpb24uIFRoaXMgd2lsbCBvbmx5IGNvbXBhcmUgdGhlXG5cdFx0XHQgKiBjb250YWluZXIgYW5kIG9mZnNldCBub3QgaXQncyB2aXN1YWwgcG9zaXRpb24uXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBpc0VxdWFsXG5cdFx0XHQgKiBAcGFyYW0ge3RpbnltY2UuY2FyZXQuQ2FyZXRQb3NpdGlvbn0gY2FyZXRQb3NpdGlvbiBDYXJldCBwb3NpdGlvbiB0byBjb21wYXJlIHdpdGguXG5cdFx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBjYXJldCBwb3NpdGlvbnMgYXJlIGVxdWFsLlxuXHRcdFx0ICovXG5cdFx0XHRpc0VxdWFsOiBpc0VxdWFsLFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdGhlIGNsb3Nlc3QgcmVzb2x2ZWQgbm9kZSBmcm9tIGEgbm9kZSBpbmRleC4gVGhhdCBtZWFucyBpZiB5b3UgaGF2ZSBhbiBvZmZzZXQgYWZ0ZXIgdGhlXG5cdFx0XHQgKiBsYXN0IG5vZGUgaW4gYSBjb250YWluZXIgaXQgd2lsbCByZXR1cm4gdGhhdCBsYXN0IG5vZGUuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBnZXROb2RlXG5cdFx0XHQgKiBAcmV0dXJuIHtOb2RlfSBOb2RlIHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgaW5kZXguXG5cdFx0XHQgKi9cblx0XHRcdGdldE5vZGU6IGdldE5vZGVcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBjYXJldCBwb3NpdGlvbiBmcm9tIHRoZSBzdGFydCBvZiBhIHJhbmdlLlxuXHQgKlxuXHQgKiBAbWV0aG9kIGZyb21SYW5nZVN0YXJ0XG5cdCAqIEBwYXJhbSB7RE9NUmFuZ2V9IHJhbmdlIERPTSBSYW5nZSB0byBjcmVhdGUgY2FyZXQgcG9zaXRpb24gZnJvbS5cblx0ICogQHJldHVybiB7dGlueW1jZS5jYXJldC5DYXJldFBvc2l0aW9ufSBDYXJldCBwb3NpdGlvbiBmcm9tIHRoZSBzdGFydCBvZiBET00gcmFuZ2UuXG5cdCAqL1xuXHRDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0ID0gZnVuY3Rpb24ocmFuZ2UpIHtcblx0XHRyZXR1cm4gbmV3IENhcmV0UG9zaXRpb24ocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTtcblx0fTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGNhcmV0IHBvc2l0aW9uIGZyb20gdGhlIGVuZCBvZiBhIHJhbmdlLlxuXHQgKlxuXHQgKiBAbWV0aG9kIGZyb21SYW5nZUVuZFxuXHQgKiBAcGFyYW0ge0RPTVJhbmdlfSByYW5nZSBET00gUmFuZ2UgdG8gY3JlYXRlIGNhcmV0IHBvc2l0aW9uIGZyb20uXG5cdCAqIEByZXR1cm4ge3RpbnltY2UuY2FyZXQuQ2FyZXRQb3NpdGlvbn0gQ2FyZXQgcG9zaXRpb24gZnJvbSB0aGUgZW5kIG9mIERPTSByYW5nZS5cblx0ICovXG5cdENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kID0gZnVuY3Rpb24ocmFuZ2UpIHtcblx0XHRyZXR1cm4gbmV3IENhcmV0UG9zaXRpb24ocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgY2FyZXQgcG9zaXRpb24gZnJvbSBhIG5vZGUgYW5kIHBsYWNlcyB0aGUgb2Zmc2V0IGFmdGVyIGl0LlxuXHQgKlxuXHQgKiBAbWV0aG9kIGFmdGVyXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRvIGdldCBjYXJldCBwb3NpdGlvbiBmcm9tLlxuXHQgKiBAcmV0dXJuIHt0aW55bWNlLmNhcmV0LkNhcmV0UG9zaXRpb259IENhcmV0IHBvc2l0aW9uIGZyb20gdGhlIG5vZGUuXG5cdCAqL1xuXHRDYXJldFBvc2l0aW9uLmFmdGVyID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdHJldHVybiBuZXcgQ2FyZXRQb3NpdGlvbihub2RlLnBhcmVudE5vZGUsIG5vZGVJbmRleChub2RlKSArIDEpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgY2FyZXQgcG9zaXRpb24gZnJvbSBhIG5vZGUgYW5kIHBsYWNlcyB0aGUgb2Zmc2V0IGJlZm9yZSBpdC5cblx0ICpcblx0ICogQG1ldGhvZCBiZWZvcmVcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgdG8gZ2V0IGNhcmV0IHBvc2l0aW9uIGZyb20uXG5cdCAqIEByZXR1cm4ge3RpbnltY2UuY2FyZXQuQ2FyZXRQb3NpdGlvbn0gQ2FyZXQgcG9zaXRpb24gZnJvbSB0aGUgbm9kZS5cblx0ICovXG5cdENhcmV0UG9zaXRpb24uYmVmb3JlID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdHJldHVybiBuZXcgQ2FyZXRQb3NpdGlvbihub2RlLnBhcmVudE5vZGUsIG5vZGVJbmRleChub2RlKSk7XG5cdH07XG5cblx0cmV0dXJuIENhcmV0UG9zaXRpb247XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2NhcmV0L0NhcmV0Qm9va21hcmsuanNcblxuLyoqXG4gKiBDYXJldEJvb2ttYXJrLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY3JlYXRlcyBvciByZXNvbHZlcyB4cGF0aCBsaWtlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIENhcmV0UG9zaXRpb25zLlxuICpcbiAqIFRoZSBmb3JtYXQgaXMgYSAvIHNlcGFyYXRlZCBsaXN0IG9mIGNodW5rcyB3aXRoOlxuICogPGVsZW1lbnR8dGV4dCgpPltpbmRleHxhZnRlcnxiZWZvcmVdXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgcFswXS9iWzBdL3RleHQoKVswXSwxID0gPHA+PGI+YXxjPC9iPjwvcD5cbiAqICBwWzBdL2ltZ1swXSxiZWZvcmUgPSA8cD58PGltZz48L3A+XG4gKiAgcFswXS9pbWdbMF0sYWZ0ZXIgPSA8cD48aW1nPnw8L3A+XG4gKlxuICogQHByaXZhdGVcbiAqIEBzdGF0aWNcbiAqIEBjbGFzcyB0aW55bWNlLmNhcmV0LkNhcmV0Qm9va21hcmtcbiAqIEBleGFtcGxlXG4gKiB2YXIgYm9va21hcmsgPSBDYXJldEJvb2ttYXJrLmNyZWF0ZShyb290RWxtLCBDYXJldFBvc2l0aW9uLmJlZm9yZShyb290RWxtLmZpcnN0Q2hpbGQpKTtcbiAqIHZhciBjYXJldFBvc2l0aW9uID0gQ2FyZXRCb29rbWFyay5yZXNvbHZlKGJvb2ttYXJrKTtcbiAqL1xuZGVmaW5lKCd0aW55bWNlL2NhcmV0L0NhcmV0Qm9va21hcmsnLCBbXG5cdCd0aW55bWNlL2RvbS9Ob2RlVHlwZScsXG5cdCd0aW55bWNlL2RvbS9ET01VdGlscycsXG5cdCd0aW55bWNlL3V0aWwvRnVuJyxcblx0J3RpbnltY2UvdXRpbC9BcnInLFxuXHQndGlueW1jZS9jYXJldC9DYXJldFBvc2l0aW9uJ1xuXSwgZnVuY3Rpb24oTm9kZVR5cGUsIERvbVV0aWxzLCBGdW4sIEFyciwgQ2FyZXRQb3NpdGlvbikge1xuXHR2YXIgaXNUZXh0ID0gTm9kZVR5cGUuaXNUZXh0LFxuXHRcdGlzQm9ndXMgPSBOb2RlVHlwZS5pc0JvZ3VzLFxuXHRcdG5vZGVJbmRleCA9IERvbVV0aWxzLm5vZGVJbmRleDtcblxuXHRmdW5jdGlvbiBub3JtYWxpemVkUGFyZW50KG5vZGUpIHtcblx0XHR2YXIgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblxuXHRcdGlmIChpc0JvZ3VzKHBhcmVudE5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gbm9ybWFsaXplZFBhcmVudChwYXJlbnROb2RlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFyZW50Tm9kZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldENoaWxkTm9kZXMobm9kZSkge1xuXHRcdGlmICghbm9kZSkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiBBcnIucmVkdWNlKG5vZGUuY2hpbGROb2RlcywgZnVuY3Rpb24ocmVzdWx0LCBub2RlKSB7XG5cdFx0XHRpZiAoaXNCb2d1cyhub2RlKSAmJiBub2RlLm5vZGVOYW1lICE9ICdCUicpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LmNvbmNhdChnZXRDaGlsZE5vZGVzKG5vZGUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sIFtdKTtcblx0fVxuXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZWRUZXh0T2Zmc2V0KHRleHROb2RlLCBvZmZzZXQpIHtcblx0XHR3aGlsZSAoKHRleHROb2RlID0gdGV4dE5vZGUucHJldmlvdXNTaWJsaW5nKSkge1xuXHRcdFx0aWYgKCFpc1RleHQodGV4dE5vZGUpKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRvZmZzZXQgKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9mZnNldDtcblx0fVxuXG5cdGZ1bmN0aW9uIGVxdWFsKHRhcmdldFZhbHVlKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0VmFsdWUgPT09IHZhbHVlO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBub3JtYWxpemVkTm9kZUluZGV4KG5vZGUpIHtcblx0XHR2YXIgbm9kZXMsIGluZGV4LCBudW1UZXh0RnJhZ21lbnRzO1xuXG5cdFx0bm9kZXMgPSBnZXRDaGlsZE5vZGVzKG5vcm1hbGl6ZWRQYXJlbnQobm9kZSkpO1xuXHRcdGluZGV4ID0gQXJyLmZpbmRJbmRleChub2RlcywgZXF1YWwobm9kZSksIG5vZGUpO1xuXHRcdG5vZGVzID0gbm9kZXMuc2xpY2UoMCwgaW5kZXggKyAxKTtcblx0XHRudW1UZXh0RnJhZ21lbnRzID0gQXJyLnJlZHVjZShub2RlcywgZnVuY3Rpb24ocmVzdWx0LCBub2RlLCBpKSB7XG5cdFx0XHRpZiAoaXNUZXh0KG5vZGUpICYmIGlzVGV4dChub2Rlc1tpIC0gMV0pKSB7XG5cdFx0XHRcdHJlc3VsdCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sIDApO1xuXG5cdFx0bm9kZXMgPSBBcnIuZmlsdGVyKG5vZGVzLCBOb2RlVHlwZS5tYXRjaE5vZGVOYW1lcyhub2RlLm5vZGVOYW1lKSk7XG5cdFx0aW5kZXggPSBBcnIuZmluZEluZGV4KG5vZGVzLCBlcXVhbChub2RlKSwgbm9kZSk7XG5cblx0XHRyZXR1cm4gaW5kZXggLSBudW1UZXh0RnJhZ21lbnRzO1xuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlUGF0aEl0ZW0obm9kZSkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0aWYgKGlzVGV4dChub2RlKSkge1xuXHRcdFx0bmFtZSA9ICd0ZXh0KCknO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuYW1lID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuYW1lICsgJ1snICsgbm9ybWFsaXplZE5vZGVJbmRleChub2RlKSArICddJztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcmVudHNVbnRpbChyb290Tm9kZSwgbm9kZSwgcHJlZGljYXRlKSB7XG5cdFx0dmFyIHBhcmVudHMgPSBbXTtcblxuXHRcdGZvciAobm9kZSA9IG5vZGUucGFyZW50Tm9kZTsgbm9kZSAhPSByb290Tm9kZTsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSkge1xuXHRcdFx0aWYgKHByZWRpY2F0ZSAmJiBwcmVkaWNhdGUobm9kZSkpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHBhcmVudHMucHVzaChub2RlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFyZW50cztcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZShyb290Tm9kZSwgY2FyZXRQb3NpdGlvbikge1xuXHRcdHZhciBjb250YWluZXIsIG9mZnNldCwgcGF0aCA9IFtdLFxuXHRcdFx0b3V0cHV0T2Zmc2V0LCBjaGlsZE5vZGVzLCBwYXJlbnRzO1xuXG5cdFx0Y29udGFpbmVyID0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKTtcblx0XHRvZmZzZXQgPSBjYXJldFBvc2l0aW9uLm9mZnNldCgpO1xuXG5cdFx0aWYgKGlzVGV4dChjb250YWluZXIpKSB7XG5cdFx0XHRvdXRwdXRPZmZzZXQgPSBub3JtYWxpemVkVGV4dE9mZnNldChjb250YWluZXIsIG9mZnNldCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoaWxkTm9kZXMgPSBjb250YWluZXIuY2hpbGROb2Rlcztcblx0XHRcdGlmIChvZmZzZXQgPj0gY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdFx0b3V0cHV0T2Zmc2V0ID0gJ2FmdGVyJztcblx0XHRcdFx0b2Zmc2V0ID0gY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0T2Zmc2V0ID0gJ2JlZm9yZSc7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRhaW5lciA9IGNoaWxkTm9kZXNbb2Zmc2V0XTtcblx0XHR9XG5cblx0XHRwYXRoLnB1c2goY3JlYXRlUGF0aEl0ZW0oY29udGFpbmVyKSk7XG5cdFx0cGFyZW50cyA9IHBhcmVudHNVbnRpbChyb290Tm9kZSwgY29udGFpbmVyKTtcblx0XHRwYXJlbnRzID0gQXJyLmZpbHRlcihwYXJlbnRzLCBGdW4ubmVnYXRlKE5vZGVUeXBlLmlzQm9ndXMpKTtcblx0XHRwYXRoID0gcGF0aC5jb25jYXQoQXJyLm1hcChwYXJlbnRzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlUGF0aEl0ZW0obm9kZSk7XG5cdFx0fSkpO1xuXG5cdFx0cmV0dXJuIHBhdGgucmV2ZXJzZSgpLmpvaW4oJy8nKSArICcsJyArIG91dHB1dE9mZnNldDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc29sdmVQYXRoSXRlbShub2RlLCBuYW1lLCBpbmRleCkge1xuXHRcdHZhciBub2RlcyA9IGdldENoaWxkTm9kZXMobm9kZSk7XG5cblx0XHRub2RlcyA9IEFyci5maWx0ZXIobm9kZXMsIGZ1bmN0aW9uKG5vZGUsIGluZGV4KSB7XG5cdFx0XHRyZXR1cm4gIWlzVGV4dChub2RlKSB8fCAhaXNUZXh0KG5vZGVzW2luZGV4IC0gMV0pO1xuXHRcdH0pO1xuXG5cdFx0bm9kZXMgPSBBcnIuZmlsdGVyKG5vZGVzLCBOb2RlVHlwZS5tYXRjaE5vZGVOYW1lcyhuYW1lKSk7XG5cdFx0cmV0dXJuIG5vZGVzW2luZGV4XTtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmRUZXh0UG9zaXRpb24oY29udGFpbmVyLCBvZmZzZXQpIHtcblx0XHR2YXIgbm9kZSA9IGNvbnRhaW5lciwgdGFyZ2V0T2Zmc2V0ID0gMCwgZGF0YUxlbjtcblxuXHRcdHdoaWxlIChpc1RleHQobm9kZSkpIHtcblx0XHRcdGRhdGFMZW4gPSBub2RlLmRhdGEubGVuZ3RoO1xuXG5cdFx0XHRpZiAob2Zmc2V0ID49IHRhcmdldE9mZnNldCAmJiBvZmZzZXQgPD0gdGFyZ2V0T2Zmc2V0ICsgZGF0YUxlbikge1xuXHRcdFx0XHRjb250YWluZXIgPSBub2RlO1xuXHRcdFx0XHRvZmZzZXQgPSBvZmZzZXQgLSB0YXJnZXRPZmZzZXQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWlzVGV4dChub2RlLm5leHRTaWJsaW5nKSkge1xuXHRcdFx0XHRjb250YWluZXIgPSBub2RlO1xuXHRcdFx0XHRvZmZzZXQgPSBkYXRhTGVuO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0dGFyZ2V0T2Zmc2V0ICs9IGRhdGFMZW47XG5cdFx0XHRub2RlID0gbm9kZS5uZXh0U2libGluZztcblx0XHR9XG5cblx0XHRpZiAob2Zmc2V0ID4gY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG5cdFx0XHRvZmZzZXQgPSBjb250YWluZXIuZGF0YS5sZW5ndGg7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBDYXJldFBvc2l0aW9uKGNvbnRhaW5lciwgb2Zmc2V0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc29sdmUocm9vdE5vZGUsIHBhdGgpIHtcblx0XHR2YXIgcGFydHMsIGNvbnRhaW5lciwgb2Zmc2V0O1xuXG5cdFx0aWYgKCFwYXRoKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoJywnKTtcblx0XHRwYXRoID0gcGFydHNbMF0uc3BsaXQoJy8nKTtcblx0XHRvZmZzZXQgPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0gOiAnYmVmb3JlJztcblxuXHRcdGNvbnRhaW5lciA9IEFyci5yZWR1Y2UocGF0aCwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSkge1xuXHRcdFx0dmFsdWUgPSAvKFtcXHdcXC1cXChcXCldKylcXFsoWzAtOV0rKVxcXS8uZXhlYyh2YWx1ZSk7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWVbMV0gPT09ICd0ZXh0KCknKSB7XG5cdFx0XHRcdHZhbHVlWzFdID0gJyN0ZXh0Jztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc29sdmVQYXRoSXRlbShyZXN1bHQsIHZhbHVlWzFdLCBwYXJzZUludCh2YWx1ZVsyXSwgMTApKTtcblx0XHR9LCByb290Tm9kZSk7XG5cblx0XHRpZiAoIWNvbnRhaW5lcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1RleHQoY29udGFpbmVyKSkge1xuXHRcdFx0aWYgKG9mZnNldCA9PT0gJ2FmdGVyJykge1xuXHRcdFx0XHRvZmZzZXQgPSBub2RlSW5kZXgoY29udGFpbmVyKSArIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvZmZzZXQgPSBub2RlSW5kZXgoY29udGFpbmVyKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBDYXJldFBvc2l0aW9uKGNvbnRhaW5lci5wYXJlbnROb2RlLCBvZmZzZXQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmaW5kVGV4dFBvc2l0aW9uKGNvbnRhaW5lciwgcGFyc2VJbnQob2Zmc2V0LCAxMCkpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQvKipcblx0XHQgKiBDcmVhdGUgYSB4cGF0aCBib29rbWFyayBsb2NhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBjYXJldCBwb3NpdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgY3JlYXRlXG5cdFx0ICogQHBhcmFtIHtOb2RlfSByb290Tm9kZSBSb290IG5vZGUgdG8gY3JlYXRlIGJvb2ttYXJrIHdpdGhpbi5cblx0XHQgKiBAcGFyYW0ge3RpbnltY2UuY2FyZXQuQ2FyZXRQb3NpdGlvbn0gY2FyZXRQb3NpdGlvbiBDYXJldCBwb3NpdGlvbiB3aXRoaW4gdGhlIHJvb3Qgbm9kZS5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IFN0cmluZyB4cGF0aCBsaWtlIGxvY2F0aW9uIG9mIGNhcmV0IHBvc2l0aW9uLlxuXHRcdCAqL1xuXHRcdGNyZWF0ZTogY3JlYXRlLFxuXG5cdFx0LyoqXG5cdFx0ICogUmVzb2x2ZXMgYSB4cGF0aCBsaWtlIGJvb2ttYXJrIGxvY2F0aW9uIHRvIHRoZSBhIGNhcmV0IHBvc2l0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZXNvbHZlXG5cdFx0ICogQHBhcmFtIHtOb2RlfSByb290Tm9kZSBSb290IG5vZGUgdG8gcmVzb2x2ZSB4cGF0aCBib29rbWFyayB3aXRoaW4uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGJvb2ttYXJrIEJvb2ttYXJrIHN0cmluZyB0byByZXNvbHZlLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuY2FyZXQuQ2FyZXRQb3NpdGlvbn0gQ2FyZXQgcG9zaXRpb24gcmVzb2x2ZWQgZnJvbSB4cGF0aCBsaWtlIGJvb2ttYXJrLlxuXHRcdCAqL1xuXHRcdHJlc29sdmU6IHJlc29sdmVcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZG9tL0Jvb2ttYXJrTWFuYWdlci5qc1xuXG4vKipcbiAqIEJvb2ttYXJrTWFuYWdlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGFuZGxlcyBzZWxlY3Rpb24gYm9va21hcmtzLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLmRvbS5Cb29rbWFya01hbmFnZXJcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kb20vQm9va21hcmtNYW5hZ2VyXCIsIFtcblx0XCJ0aW55bWNlL0VudlwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRDb250YWluZXJcIixcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0Qm9va21hcmtcIixcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0UG9zaXRpb25cIixcblx0XCJ0aW55bWNlL2RvbS9Ob2RlVHlwZVwiLFxuXHRcInRpbnltY2UvZG9tL1JhbmdlVXRpbHNcIlxuXSwgZnVuY3Rpb24oRW52LCBUb29scywgQ2FyZXRDb250YWluZXIsIENhcmV0Qm9va21hcmssIENhcmV0UG9zaXRpb24sIE5vZGVUeXBlLCBSYW5nZVV0aWxzKSB7XG5cdHZhciBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlID0gTm9kZVR5cGUuaXNDb250ZW50RWRpdGFibGVGYWxzZTtcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBhIG5ldyBCb29rbWFya01hbmFnZXIgaW5zdGFuY2UgZm9yIGEgc3BlY2lmaWMgc2VsZWN0aW9uIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQG1ldGhvZCBCb29rbWFya01hbmFnZXJcblx0ICogQHBhcmFtIHt0aW55bWNlLmRvbS5TZWxlY3Rpb259IHNlbGVjdGlvbiBTZWxlY3Rpb24gaW5zdGFuY2UgdG8gaGFuZGxlIGJvb2ttYXJrcyBmb3IuXG5cdCAqL1xuXHRmdW5jdGlvbiBCb29rbWFya01hbmFnZXIoc2VsZWN0aW9uKSB7XG5cdFx0dmFyIGRvbSA9IHNlbGVjdGlvbi5kb207XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgYm9va21hcmsgbG9jYXRpb24gZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gVGhpcyBib29rbWFyayBvYmplY3Rcblx0XHQgKiBjYW4gdGhlbiBiZSB1c2VkIHRvIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBhZnRlciBzb21lIGNvbnRlbnQgbW9kaWZpY2F0aW9uIHRvIHRoZSBkb2N1bWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0Qm9va21hcmtcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gdHlwZSBPcHRpb25hbCBzdGF0ZSBpZiB0aGUgYm9va21hcmsgc2hvdWxkIGJlIHNpbXBsZSBvciBub3QuIERlZmF1bHQgaXMgY29tcGxleC5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IG5vcm1hbGl6ZWQgT3B0aW9uYWwgc3RhdGUgdGhhdCBlbmFibGVzIHlvdSB0byBnZXQgYSBwb3NpdGlvbiB0aGF0IGl0IHdvdWxkIGJlIGFmdGVyIG5vcm1hbGl6YXRpb24uXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBCb29rbWFyayBvYmplY3QsIHVzZSBtb3ZlVG9Cb29rbWFyayB3aXRoIHRoaXMgb2JqZWN0IHRvIHJlc3RvcmUgdGhlIHNlbGVjdGlvbi5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIFN0b3JlcyBhIGJvb2ttYXJrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuXHRcdCAqIHZhciBibSA9IHRpbnltY2UuYWN0aXZlRWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuXHRcdCAqXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2V0Q29udGVudCh0aW55bWNlLmFjdGl2ZUVkaXRvci5nZXRDb250ZW50KCkgKyAnU29tZSBuZXcgY29udGVudCcpO1xuXHRcdCAqXG5cdFx0ICogLy8gUmVzdG9yZSB0aGUgc2VsZWN0aW9uIGJvb2ttYXJrXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJtKTtcblx0XHQgKi9cblx0XHR0aGlzLmdldEJvb2ttYXJrID0gZnVuY3Rpb24odHlwZSwgbm9ybWFsaXplZCkge1xuXHRcdFx0dmFyIHJuZywgcm5nMiwgaWQsIGNvbGxhcHNlZCwgbmFtZSwgZWxlbWVudCwgY2hyID0gJyYjeEZFRkY7Jywgc3R5bGVzO1xuXG5cdFx0XHRmdW5jdGlvbiBmaW5kSW5kZXgobmFtZSwgZWxlbWVudCkge1xuXHRcdFx0XHR2YXIgY291bnQgPSAwO1xuXG5cdFx0XHRcdFRvb2xzLmVhY2goZG9tLnNlbGVjdChuYW1lKSwgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdGlmIChub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtYm9ndXMnKSA9PT0gJ2FsbCcpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobm9kZSA9PSBlbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIGNvdW50O1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBub3JtYWxpemVUYWJsZUNlbGxTZWxlY3Rpb24ocm5nKSB7XG5cdFx0XHRcdGZ1bmN0aW9uIG1vdmVFbmRQb2ludChzdGFydCkge1xuXHRcdFx0XHRcdHZhciBjb250YWluZXIsIG9mZnNldCwgY2hpbGROb2RlcywgcHJlZml4ID0gc3RhcnQgPyAnc3RhcnQnIDogJ2VuZCc7XG5cblx0XHRcdFx0XHRjb250YWluZXIgPSBybmdbcHJlZml4ICsgJ0NvbnRhaW5lciddO1xuXHRcdFx0XHRcdG9mZnNldCA9IHJuZ1twcmVmaXggKyAnT2Zmc2V0J107XG5cblx0XHRcdFx0XHRpZiAoY29udGFpbmVyLm5vZGVUeXBlID09IDEgJiYgY29udGFpbmVyLm5vZGVOYW1lID09IFwiVFJcIikge1xuXHRcdFx0XHRcdFx0Y2hpbGROb2RlcyA9IGNvbnRhaW5lci5jaGlsZE5vZGVzO1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyID0gY2hpbGROb2Rlc1tNYXRoLm1pbihzdGFydCA/IG9mZnNldCA6IG9mZnNldCAtIDEsIGNoaWxkTm9kZXMubGVuZ3RoIC0gMSldO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRhaW5lcikge1xuXHRcdFx0XHRcdFx0XHRvZmZzZXQgPSBzdGFydCA/IDAgOiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdHJuZ1snc2V0JyArIChzdGFydCA/ICdTdGFydCcgOiAnRW5kJyldKGNvbnRhaW5lciwgb2Zmc2V0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtb3ZlRW5kUG9pbnQodHJ1ZSk7XG5cdFx0XHRcdG1vdmVFbmRQb2ludCgpO1xuXG5cdFx0XHRcdHJldHVybiBybmc7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGdldExvY2F0aW9uKHJuZykge1xuXHRcdFx0XHR2YXIgcm9vdCA9IGRvbS5nZXRSb290KCksIGJvb2ttYXJrID0ge307XG5cblx0XHRcdFx0ZnVuY3Rpb24gZ2V0UG9pbnQocm5nLCBzdGFydCkge1xuXHRcdFx0XHRcdHZhciBjb250YWluZXIgPSBybmdbc3RhcnQgPyAnc3RhcnRDb250YWluZXInIDogJ2VuZENvbnRhaW5lciddLFxuXHRcdFx0XHRcdFx0b2Zmc2V0ID0gcm5nW3N0YXJ0ID8gJ3N0YXJ0T2Zmc2V0JyA6ICdlbmRPZmZzZXQnXSwgcG9pbnQgPSBbXSwgbm9kZSwgY2hpbGROb2RlcywgYWZ0ZXIgPSAwO1xuXG5cdFx0XHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0XHRpZiAobm9ybWFsaXplZCkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKG5vZGUgPSBjb250YWluZXIucHJldmlvdXNTaWJsaW5nOyBub2RlICYmIG5vZGUubm9kZVR5cGUgPT0gMzsgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0b2Zmc2V0ICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRwb2ludC5wdXNoKG9mZnNldCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNoaWxkTm9kZXMgPSBjb250YWluZXIuY2hpbGROb2RlcztcblxuXHRcdFx0XHRcdFx0aWYgKG9mZnNldCA+PSBjaGlsZE5vZGVzLmxlbmd0aCAmJiBjaGlsZE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRhZnRlciA9IDE7XG5cdFx0XHRcdFx0XHRcdG9mZnNldCA9IE1hdGgubWF4KDAsIGNoaWxkTm9kZXMubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHBvaW50LnB1c2goZG9tLm5vZGVJbmRleChjaGlsZE5vZGVzW29mZnNldF0sIG5vcm1hbGl6ZWQpICsgYWZ0ZXIpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvciAoOyBjb250YWluZXIgJiYgY29udGFpbmVyICE9IHJvb3Q7IGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdFx0XHRwb2ludC5wdXNoKGRvbS5ub2RlSW5kZXgoY29udGFpbmVyLCBub3JtYWxpemVkKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHBvaW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ym9va21hcmsuc3RhcnQgPSBnZXRQb2ludChybmcsIHRydWUpO1xuXG5cdFx0XHRcdGlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcblx0XHRcdFx0XHRib29rbWFyay5lbmQgPSBnZXRQb2ludChybmcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGJvb2ttYXJrO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBmaW5kQWRqYWNlbnRDb250ZW50RWRpdGFibGVGYWxzZUVsbShybmcpIHtcblx0XHRcdFx0ZnVuY3Rpb24gZmluZFNpYmxpbmcobm9kZSwgb2Zmc2V0KSB7XG5cdFx0XHRcdFx0dmFyIHNpYmxpbmc7XG5cblx0XHRcdFx0XHRpZiAoTm9kZVR5cGUuaXNFbGVtZW50KG5vZGUpKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gUmFuZ2VVdGlscy5nZXROb2RlKG5vZGUsIG9mZnNldCk7XG5cdFx0XHRcdFx0XHRpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZShub2RlKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoQ2FyZXRDb250YWluZXIuaXNDYXJldENvbnRhaW5lcihub2RlKSkge1xuXHRcdFx0XHRcdFx0aWYgKE5vZGVUeXBlLmlzVGV4dChub2RlKSAmJiBDYXJldENvbnRhaW5lci5pc0NhcmV0Q29udGFpbmVyQmxvY2sobm9kZSkpIHtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuXHRcdFx0XHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2Uoc2libGluZykpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpYmxpbmc7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nO1xuXHRcdFx0XHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2Uoc2libGluZykpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpYmxpbmc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZpbmRTaWJsaW5nKHJuZy5zdGFydENvbnRhaW5lciwgcm5nLnN0YXJ0T2Zmc2V0KSB8fCBmaW5kU2libGluZyhybmcuZW5kQ29udGFpbmVyLCBybmcuZW5kT2Zmc2V0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGUgPT0gMikge1xuXHRcdFx0XHRlbGVtZW50ID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcblx0XHRcdFx0bmFtZSA9IGVsZW1lbnQgPyBlbGVtZW50Lm5vZGVOYW1lIDogbnVsbDtcblx0XHRcdFx0cm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuXG5cdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGVsZW1lbnQpIHx8IG5hbWUgPT0gJ0lNRycpIHtcblx0XHRcdFx0XHRyZXR1cm4ge25hbWU6IG5hbWUsIGluZGV4OiBmaW5kSW5kZXgobmFtZSwgZWxlbWVudCl9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNlbGVjdGlvbi50cmlkZW50U2VsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvbi50cmlkZW50U2VsLmdldEJvb2ttYXJrKHR5cGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZWxlbWVudCA9IGZpbmRBZGphY2VudENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtKHJuZyk7XG5cdFx0XHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0bmFtZSA9IGVsZW1lbnQudGFnTmFtZTtcblx0XHRcdFx0XHRyZXR1cm4ge25hbWU6IG5hbWUsIGluZGV4OiBmaW5kSW5kZXgobmFtZSwgZWxlbWVudCl9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGdldExvY2F0aW9uKHJuZyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlID09IDMpIHtcblx0XHRcdFx0cm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0c3RhcnQ6IENhcmV0Qm9va21hcmsuY3JlYXRlKGRvbS5nZXRSb290KCksIENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKSksXG5cdFx0XHRcdFx0ZW5kOiBDYXJldEJvb2ttYXJrLmNyZWF0ZShkb20uZ2V0Um9vdCgpLCBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChybmcpKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIYW5kbGUgc2ltcGxlIHJhbmdlXG5cdFx0XHRpZiAodHlwZSkge1xuXHRcdFx0XHRyZXR1cm4ge3JuZzogc2VsZWN0aW9uLmdldFJuZygpfTtcblx0XHRcdH1cblxuXHRcdFx0cm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuXHRcdFx0aWQgPSBkb20udW5pcXVlSWQoKTtcblx0XHRcdGNvbGxhcHNlZCA9IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpO1xuXHRcdFx0c3R5bGVzID0gJ292ZXJmbG93OmhpZGRlbjtsaW5lLWhlaWdodDowcHgnO1xuXG5cdFx0XHQvLyBFeHBsb3JlciBtZXRob2Rcblx0XHRcdGlmIChybmcuZHVwbGljYXRlIHx8IHJuZy5pdGVtKSB7XG5cdFx0XHRcdC8vIFRleHQgc2VsZWN0aW9uXG5cdFx0XHRcdGlmICghcm5nLml0ZW0pIHtcblx0XHRcdFx0XHRybmcyID0gcm5nLmR1cGxpY2F0ZSgpO1xuXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdC8vIEluc2VydCBzdGFydCBtYXJrZXJcblx0XHRcdFx0XHRcdHJuZy5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdFx0cm5nLnBhc3RlSFRNTCgnPHNwYW4gZGF0YS1tY2UtdHlwZT1cImJvb2ttYXJrXCIgaWQ9XCInICsgaWQgKyAnX3N0YXJ0XCIgc3R5bGU9XCInICsgc3R5bGVzICsgJ1wiPicgKyBjaHIgKyAnPC9zcGFuPicpO1xuXG5cdFx0XHRcdFx0XHQvLyBJbnNlcnQgZW5kIG1hcmtlclxuXHRcdFx0XHRcdFx0aWYgKCFjb2xsYXBzZWQpIHtcblx0XHRcdFx0XHRcdFx0cm5nMi5jb2xsYXBzZShmYWxzZSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRGV0ZWN0IHRoZSBlbXB0eSBzcGFjZSBhZnRlciBibG9jayBlbGVtZW50cyBpbiBJRSBhbmQgbW92ZSB0aGVcblx0XHRcdFx0XHRcdFx0Ly8gZW5kIGJhY2sgb25lIGNoYXJhY3RlciA8cD48L3A+XSBiZWNvbWVzIDxwPl08L3A+XG5cdFx0XHRcdFx0XHRcdHJuZy5tb3ZlVG9FbGVtZW50VGV4dChybmcyLnBhcmVudEVsZW1lbnQoKSk7XG5cdFx0XHRcdFx0XHRcdGlmIChybmcuY29tcGFyZUVuZFBvaW50cygnU3RhcnRUb0VuZCcsIHJuZzIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cm5nMi5tb3ZlKCdjaGFyYWN0ZXInLCAtMSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRybmcyLnBhc3RlSFRNTCgnPHNwYW4gZGF0YS1tY2UtdHlwZT1cImJvb2ttYXJrXCIgaWQ9XCInICsgaWQgKyAnX2VuZFwiIHN0eWxlPVwiJyArIHN0eWxlcyArICdcIj4nICsgY2hyICsgJzwvc3Bhbj4nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdFx0Ly8gSUUgbWlnaHQgdGhyb3cgdW5zcGVjaWZpZWQgZXJyb3Igc28gbGV0cyBpZ25vcmUgaXRcblx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBDb250cm9sIHNlbGVjdGlvblxuXHRcdFx0XHRcdGVsZW1lbnQgPSBybmcuaXRlbSgwKTtcblx0XHRcdFx0XHRuYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcblxuXHRcdFx0XHRcdHJldHVybiB7bmFtZTogbmFtZSwgaW5kZXg6IGZpbmRJbmRleChuYW1lLCBlbGVtZW50KX07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuXHRcdFx0XHRuYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcblx0XHRcdFx0aWYgKG5hbWUgPT0gJ0lNRycpIHtcblx0XHRcdFx0XHRyZXR1cm4ge25hbWU6IG5hbWUsIGluZGV4OiBmaW5kSW5kZXgobmFtZSwgZWxlbWVudCl9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVzNDIG1ldGhvZFxuXHRcdFx0XHRybmcyID0gbm9ybWFsaXplVGFibGVDZWxsU2VsZWN0aW9uKHJuZy5jbG9uZVJhbmdlKCkpO1xuXG5cdFx0XHRcdC8vIEluc2VydCBlbmQgbWFya2VyXG5cdFx0XHRcdGlmICghY29sbGFwc2VkKSB7XG5cdFx0XHRcdFx0cm5nMi5jb2xsYXBzZShmYWxzZSk7XG5cdFx0XHRcdFx0cm5nMi5pbnNlcnROb2RlKGRvbS5jcmVhdGUoJ3NwYW4nLCB7J2RhdGEtbWNlLXR5cGUnOiBcImJvb2ttYXJrXCIsIGlkOiBpZCArICdfZW5kJywgc3R5bGU6IHN0eWxlc30sIGNocikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cm5nID0gbm9ybWFsaXplVGFibGVDZWxsU2VsZWN0aW9uKHJuZyk7XG5cdFx0XHRcdHJuZy5jb2xsYXBzZSh0cnVlKTtcblx0XHRcdFx0cm5nLmluc2VydE5vZGUoZG9tLmNyZWF0ZSgnc3BhbicsIHsnZGF0YS1tY2UtdHlwZSc6IFwiYm9va21hcmtcIiwgaWQ6IGlkICsgJ19zdGFydCcsIHN0eWxlOiBzdHlsZXN9LCBjaHIpKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKHtpZDogaWQsIGtlZXA6IDF9KTtcblxuXHRcdFx0cmV0dXJuIHtpZDogaWR9O1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZXN0b3JlcyB0aGUgc2VsZWN0aW9uIHRvIHRoZSBzcGVjaWZpZWQgYm9va21hcmsuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG1vdmVUb0Jvb2ttYXJrXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGJvb2ttYXJrIEJvb2ttYXJrIHRvIHJlc3RvcmUgc2VsZWN0aW9uIGZyb20uXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZSBpZiBpdCB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBTdG9yZXMgYSBib29rbWFyayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb25cblx0XHQgKiB2YXIgYm0gPSB0aW55bWNlLmFjdGl2ZUVkaXRvci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcblx0XHQgKlxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLnNldENvbnRlbnQodGlueW1jZS5hY3RpdmVFZGl0b3IuZ2V0Q29udGVudCgpICsgJ1NvbWUgbmV3IGNvbnRlbnQnKTtcblx0XHQgKlxuXHRcdCAqIC8vIFJlc3RvcmUgdGhlIHNlbGVjdGlvbiBib29rbWFya1xuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhibSk7XG5cdFx0ICovXG5cdFx0dGhpcy5tb3ZlVG9Cb29rbWFyayA9IGZ1bmN0aW9uKGJvb2ttYXJrKSB7XG5cdFx0XHR2YXIgcm5nLCByb290LCBzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0O1xuXG5cdFx0XHRmdW5jdGlvbiBzZXRFbmRQb2ludChzdGFydCkge1xuXHRcdFx0XHR2YXIgcG9pbnQgPSBib29rbWFya1tzdGFydCA/ICdzdGFydCcgOiAnZW5kJ10sIGksIG5vZGUsIG9mZnNldCwgY2hpbGRyZW47XG5cblx0XHRcdFx0aWYgKHBvaW50KSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gcG9pbnRbMF07XG5cblx0XHRcdFx0XHQvLyBGaW5kIGNvbnRhaW5lciBub2RlXG5cdFx0XHRcdFx0Zm9yIChub2RlID0gcm9vdCwgaSA9IHBvaW50Lmxlbmd0aCAtIDE7IGkgPj0gMTsgaS0tKSB7XG5cdFx0XHRcdFx0XHRjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcblxuXHRcdFx0XHRcdFx0aWYgKHBvaW50W2ldID4gY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG5vZGUgPSBjaGlsZHJlbltwb2ludFtpXV07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTW92ZSB0ZXh0IG9mZnNldCB0byBiZXN0IHN1aXRhYmxlIGxvY2F0aW9uXG5cdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDMpIHtcblx0XHRcdFx0XHRcdG9mZnNldCA9IE1hdGgubWluKHBvaW50WzBdLCBub2RlLm5vZGVWYWx1ZS5sZW5ndGgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE1vdmUgZWxlbWVudCBvZmZzZXQgdG8gYmVzdCBzdWl0YWJsZSBsb2NhdGlvblxuXHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG5cdFx0XHRcdFx0XHRvZmZzZXQgPSBNYXRoLm1pbihwb2ludFswXSwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2V0IG9mZnNldCB3aXRoaW4gY29udGFpbmVyIG5vZGVcblx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydChub2RlLCBvZmZzZXQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRybmcuc2V0RW5kKG5vZGUsIG9mZnNldCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHJlc3RvcmVFbmRQb2ludChzdWZmaXgpIHtcblx0XHRcdFx0dmFyIG1hcmtlciA9IGRvbS5nZXQoYm9va21hcmsuaWQgKyAnXycgKyBzdWZmaXgpLCBub2RlLCBpZHgsIG5leHQsIHByZXYsIGtlZXAgPSBib29rbWFyay5rZWVwO1xuXG5cdFx0XHRcdGlmIChtYXJrZXIpIHtcblx0XHRcdFx0XHRub2RlID0gbWFya2VyLnBhcmVudE5vZGU7XG5cblx0XHRcdFx0XHRpZiAoc3VmZml4ID09ICdzdGFydCcpIHtcblx0XHRcdFx0XHRcdGlmICgha2VlcCkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBkb20ubm9kZUluZGV4KG1hcmtlcik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbWFya2VyLmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IDE7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyID0gZW5kQ29udGFpbmVyID0gbm9kZTtcblx0XHRcdFx0XHRcdHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0ID0gaWR4O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIWtlZXApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gZG9tLm5vZGVJbmRleChtYXJrZXIpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG1hcmtlci5maXJzdENoaWxkO1xuXHRcdFx0XHRcdFx0XHRpZHggPSAxO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRlbmRDb250YWluZXIgPSBub2RlO1xuXHRcdFx0XHRcdFx0ZW5kT2Zmc2V0ID0gaWR4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICgha2VlcCkge1xuXHRcdFx0XHRcdFx0cHJldiA9IG1hcmtlci5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdFx0XHRuZXh0ID0gbWFya2VyLm5leHRTaWJsaW5nO1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgYWxsIG1hcmtlciB0ZXh0IG5vZGVzXG5cdFx0XHRcdFx0XHRUb29scy5lYWNoKFRvb2xzLmdyZXAobWFya2VyLmNoaWxkTm9kZXMpLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVWYWx1ZSA9IG5vZGUubm9kZVZhbHVlLnJlcGxhY2UoL1xcdUZFRkYvZywgJycpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIG1hcmtlciBidXQga2VlcCBjaGlsZHJlbiBpZiBmb3IgZXhhbXBsZSBjb250ZW50cyB3aGVyZSBpbnNlcnRlZCBpbnRvIHRoZSBtYXJrZXJcblx0XHRcdFx0XHRcdC8vIEFsc28gcmVtb3ZlIGR1cGxpY2F0ZWQgaW5zdGFuY2VzIG9mIHRoZSBtYXJrZXIgZm9yIGV4YW1wbGUgYnkgYVxuXHRcdFx0XHRcdFx0Ly8gc3BsaXQgb3BlcmF0aW9uIG9yIGJ5IFdlYktpdCBhdXRvIHNwbGl0IG9uIHBhc3RlIGZlYXR1cmVcblx0XHRcdFx0XHRcdHdoaWxlICgobWFya2VyID0gZG9tLmdldChib29rbWFyay5pZCArICdfJyArIHN1ZmZpeCkpKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5yZW1vdmUobWFya2VyLCAxKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSWYgc2libGluZ3MgYXJlIHRleHQgbm9kZXMgdGhlbiBtZXJnZSB0aGVtIHVubGVzcyBpdCdzIE9wZXJhIHNpbmNlIGl0IHNvbWUgaG93IHJlbW92ZXMgdGhlIG5vZGVcblx0XHRcdFx0XHRcdC8vIGFuZCB3ZSBhcmUgc25pZmZpbmcgc2luY2UgYWRkaW5nIGEgbG90IG9mIGRldGVjdGlvbiBjb2RlIGZvciBhIGJyb3dzZXIgd2l0aCAzJSBvZiB0aGUgbWFya2V0XG5cdFx0XHRcdFx0XHQvLyBpc24ndCB3b3J0aCB0aGUgZWZmb3J0LiBTb3JyeSwgT3BlcmEgYnV0IGl0J3MganVzdCBhIGZhY3Rcblx0XHRcdFx0XHRcdGlmIChwcmV2ICYmIG5leHQgJiYgcHJldi5ub2RlVHlwZSA9PSBuZXh0Lm5vZGVUeXBlICYmIHByZXYubm9kZVR5cGUgPT0gMyAmJiAhRW52Lm9wZXJhKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IHByZXYubm9kZVZhbHVlLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0cHJldi5hcHBlbmREYXRhKG5leHQubm9kZVZhbHVlKTtcblx0XHRcdFx0XHRcdFx0ZG9tLnJlbW92ZShuZXh0KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoc3VmZml4ID09ICdzdGFydCcpIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFydENvbnRhaW5lciA9IGVuZENvbnRhaW5lciA9IHByZXY7XG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQgPSBpZHg7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0ZW5kQ29udGFpbmVyID0gcHJldjtcblx0XHRcdFx0XHRcdFx0XHRlbmRPZmZzZXQgPSBpZHg7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gYWRkQm9ndXMobm9kZSkge1xuXHRcdFx0XHQvLyBBZGRzIGEgYm9ndXMgQlIgZWxlbWVudCBmb3IgZW1wdHkgYmxvY2sgZWxlbWVudHNcblx0XHRcdFx0aWYgKGRvbS5pc0Jsb2NrKG5vZGUpICYmICFub2RlLmlubmVySFRNTCAmJiAhRW52LmllKSB7XG5cdFx0XHRcdFx0bm9kZS5pbm5lckhUTUwgPSAnPGJyIGRhdGEtbWNlLWJvZ3VzPVwiMVwiIC8+Jztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiByZXNvbHZlQ2FyZXRQb3NpdGlvbkJvb2ttYXJrKCkge1xuXHRcdFx0XHR2YXIgcm5nLCBwb3M7XG5cblx0XHRcdFx0cm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuXHRcdFx0XHRwb3MgPSBDYXJldEJvb2ttYXJrLnJlc29sdmUoZG9tLmdldFJvb3QoKSwgYm9va21hcmsuc3RhcnQpO1xuXHRcdFx0XHRybmcuc2V0U3RhcnQocG9zLmNvbnRhaW5lcigpLCBwb3Mub2Zmc2V0KCkpO1xuXG5cdFx0XHRcdHBvcyA9IENhcmV0Qm9va21hcmsucmVzb2x2ZShkb20uZ2V0Um9vdCgpLCBib29rbWFyay5lbmQpO1xuXHRcdFx0XHRybmcuc2V0RW5kKHBvcy5jb250YWluZXIoKSwgcG9zLm9mZnNldCgpKTtcblxuXHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYm9va21hcmspIHtcblx0XHRcdFx0aWYgKFRvb2xzLmlzQXJyYXkoYm9va21hcmsuc3RhcnQpKSB7XG5cdFx0XHRcdFx0cm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuXHRcdFx0XHRcdHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuXG5cdFx0XHRcdFx0aWYgKHNlbGVjdGlvbi50cmlkZW50U2VsKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2VsZWN0aW9uLnRyaWRlbnRTZWwubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChzZXRFbmRQb2ludCh0cnVlKSAmJiBzZXRFbmRQb2ludCgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBib29rbWFyay5zdGFydCA9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcocmVzb2x2ZUNhcmV0UG9zaXRpb25Cb29rbWFyayhib29rbWFyaykpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGJvb2ttYXJrLmlkKSB7XG5cdFx0XHRcdFx0Ly8gUmVzdG9yZSBzdGFydC9lbmQgcG9pbnRzXG5cdFx0XHRcdFx0cmVzdG9yZUVuZFBvaW50KCdzdGFydCcpO1xuXHRcdFx0XHRcdHJlc3RvcmVFbmRQb2ludCgnZW5kJyk7XG5cblx0XHRcdFx0XHRpZiAoc3RhcnRDb250YWluZXIpIHtcblx0XHRcdFx0XHRcdHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcblx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydChhZGRCb2d1cyhzdGFydENvbnRhaW5lciksIHN0YXJ0T2Zmc2V0KTtcblx0XHRcdFx0XHRcdHJuZy5zZXRFbmQoYWRkQm9ndXMoZW5kQ29udGFpbmVyKSwgZW5kT2Zmc2V0KTtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcocm5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoYm9va21hcmsubmFtZSkge1xuXHRcdFx0XHRcdHNlbGVjdGlvbi5zZWxlY3QoZG9tLnNlbGVjdChib29rbWFyay5uYW1lKVtib29rbWFyay5pbmRleF0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGJvb2ttYXJrLnJuZykge1xuXHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcoYm9va21hcmsucm5nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBzcGVjaWZpZWQgbm9kZSBpcyBhIGJvb2ttYXJrIG5vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZXRob2QgaXNCb29rbWFya05vZGVcblx0ICogQHBhcmFtIHtET01Ob2RlfSBub2RlIERPTSBOb2RlIHRvIGNoZWNrIGlmIGl0J3MgYSBib29rbWFyayBub2RlIG9yIG5vdC5cblx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZSBpZiB0aGUgbm9kZSBpcyBhIGJvb2ttYXJrIG5vZGUgb3Igbm90LlxuXHQgKi9cblx0Qm9va21hcmtNYW5hZ2VyLmlzQm9va21hcmtOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuXHRcdHJldHVybiBub2RlICYmIG5vZGUudGFnTmFtZSA9PT0gJ1NQQU4nICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS10eXBlJykgPT09ICdib29rbWFyayc7XG5cdH07XG5cblx0cmV0dXJuIEJvb2ttYXJrTWFuYWdlcjtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZG9tL1NlbGVjdGlvbi5qc1xuXG4vKipcbiAqIFNlbGVjdGlvbi5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGFuZGxlcyB0ZXh0IGFuZCBjb250cm9sIHNlbGVjdGlvbiBpdCdzIGFuIGNyb3NzYnJvd3NlciB1dGlsaXR5IGNsYXNzLlxuICogQ29uc3VsdCB0aGUgVGlueU1DRSBXaWtpIEFQSSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3MuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuZG9tLlNlbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIC8vIEdldHRpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlIGZvciB0aGUgYWN0aXZlIGVkaXRvclxuICogYWxlcnQodGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKS5ub2RlTmFtZSk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvZG9tL1NlbGVjdGlvblwiLCBbXG5cdFwidGlueW1jZS9kb20vVHJlZVdhbGtlclwiLFxuXHRcInRpbnltY2UvZG9tL1RyaWRlbnRTZWxlY3Rpb25cIixcblx0XCJ0aW55bWNlL2RvbS9Db250cm9sU2VsZWN0aW9uXCIsXG5cdFwidGlueW1jZS9kb20vUmFuZ2VVdGlsc1wiLFxuXHRcInRpbnltY2UvZG9tL0Jvb2ttYXJrTWFuYWdlclwiLFxuXHRcInRpbnltY2UvZG9tL05vZGVUeXBlXCIsXG5cdFwidGlueW1jZS9FbnZcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0UG9zaXRpb25cIlxuXSwgZnVuY3Rpb24oVHJlZVdhbGtlciwgVHJpZGVudFNlbGVjdGlvbiwgQ29udHJvbFNlbGVjdGlvbiwgUmFuZ2VVdGlscywgQm9va21hcmtNYW5hZ2VyLCBOb2RlVHlwZSwgRW52LCBUb29scywgQ2FyZXRQb3NpdGlvbikge1xuXHR2YXIgZWFjaCA9IFRvb2xzLmVhY2gsIHRyaW0gPSBUb29scy50cmltO1xuXHR2YXIgaXNJRSA9IEVudi5pZTtcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBhIG5ldyBzZWxlY3Rpb24gaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAbWV0aG9kIFNlbGVjdGlvblxuXHQgKiBAcGFyYW0ge3RpbnltY2UuZG9tLkRPTVV0aWxzfSBkb20gRE9NVXRpbHMgb2JqZWN0IHJlZmVyZW5jZS5cblx0ICogQHBhcmFtIHtXaW5kb3d9IHdpbiBXaW5kb3cgdG8gYmluZCB0aGUgc2VsZWN0aW9uIG9iamVjdCB0by5cblx0ICogQHBhcmFtIHt0aW55bWNlLkVkaXRvcn0gZWRpdG9yIEVkaXRvciBpbnN0YW5jZSBvZiB0aGUgc2VsZWN0aW9uLlxuXHQgKiBAcGFyYW0ge3RpbnltY2UuZG9tLlNlcmlhbGl6ZXJ9IHNlcmlhbGl6ZXIgRE9NIHNlcmlhbGl6YXRpb24gY2xhc3MgdG8gdXNlIGZvciBnZXRDb250ZW50LlxuXHQgKi9cblx0ZnVuY3Rpb24gU2VsZWN0aW9uKGRvbSwgd2luLCBzZXJpYWxpemVyLCBlZGl0b3IpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRzZWxmLmRvbSA9IGRvbTtcblx0XHRzZWxmLndpbiA9IHdpbjtcblx0XHRzZWxmLnNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyO1xuXHRcdHNlbGYuZWRpdG9yID0gZWRpdG9yO1xuXHRcdHNlbGYuYm9va21hcmtNYW5hZ2VyID0gbmV3IEJvb2ttYXJrTWFuYWdlcihzZWxmKTtcblx0XHRzZWxmLmNvbnRyb2xTZWxlY3Rpb24gPSBuZXcgQ29udHJvbFNlbGVjdGlvbihzZWxmLCBlZGl0b3IpO1xuXG5cdFx0Ly8gTm8gVzNDIFJhbmdlIHN1cHBvcnRcblx0XHRpZiAoIXNlbGYud2luLmdldFNlbGVjdGlvbikge1xuXHRcdFx0c2VsZi50cmlkZW50U2VsID0gbmV3IFRyaWRlbnRTZWxlY3Rpb24oc2VsZik7XG5cdFx0fVxuXHR9XG5cblx0U2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcblx0XHQvKipcblx0XHQgKiBNb3ZlIHRoZSBzZWxlY3Rpb24gY3Vyc29yIHJhbmdlIHRvIHRoZSBzcGVjaWZpZWQgbm9kZSBhbmQgb2Zmc2V0LlxuXHRcdCAqIElmIHRoZXJlIGlzIG5vIG5vZGUgc3BlY2lmaWVkIGl0IHdpbGwgbW92ZSBpdCB0byB0aGUgZmlyc3Qgc3VpdGFibGUgbG9jYXRpb24gd2l0aGluIHRoZSBib2R5LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRDdXJzb3JMb2NhdGlvblxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBPcHRpb25hbCBub2RlIHRvIHB1dCB0aGUgY3Vyc29yIGluLlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgT3B0aW9uYWwgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBub2RlIHRvIHB1dCB0aGUgY3Vyc29yIGF0LlxuXHRcdCAqL1xuXHRcdHNldEN1cnNvckxvY2F0aW9uOiBmdW5jdGlvbihub2RlLCBvZmZzZXQpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcm5nID0gc2VsZi5kb20uY3JlYXRlUm5nKCk7XG5cblx0XHRcdGlmICghbm9kZSkge1xuXHRcdFx0XHRzZWxmLl9tb3ZlRW5kUG9pbnQocm5nLCBzZWxmLmVkaXRvci5nZXRCb2R5KCksIHRydWUpO1xuXHRcdFx0XHRzZWxmLnNldFJuZyhybmcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cm5nLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7XG5cdFx0XHRcdHJuZy5zZXRFbmQobm9kZSwgb2Zmc2V0KTtcblx0XHRcdFx0c2VsZi5zZXRSbmcocm5nKTtcblx0XHRcdFx0c2VsZi5jb2xsYXBzZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGNvbnRlbnRzIHVzaW5nIHRoZSBET00gc2VyaWFsaXplciBwYXNzZWQgaW4gdG8gdGhpcyBjbGFzcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0Q29udGVudFxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIE9wdGlvbmFsIHNldHRpbmdzIGNsYXNzIHdpdGggZm9yIGV4YW1wbGUgb3V0cHV0IGZvcm1hdCB0ZXh0IG9yIGh0bWwuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBTZWxlY3RlZCBjb250ZW50cyBpbiBmb3IgZXhhbXBsZSBIVE1MIGZvcm1hdC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIEFsZXJ0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbnRlbnRzXG5cdFx0ICogYWxlcnQodGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLmdldENvbnRlbnQoKSk7XG5cdFx0ICpcblx0XHQgKiAvLyBBbGVydHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb250ZW50cyBhcyBwbGFpbiB0ZXh0XG5cdFx0ICogYWxlcnQodGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLmdldENvbnRlbnQoe2Zvcm1hdDogJ3RleHQnfSkpO1xuXHRcdCAqL1xuXHRcdGdldENvbnRlbnQ6IGZ1bmN0aW9uKGFyZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcm5nID0gc2VsZi5nZXRSbmcoKSwgdG1wRWxtID0gc2VsZi5kb20uY3JlYXRlKFwiYm9keVwiKTtcblx0XHRcdHZhciBzZSA9IHNlbGYuZ2V0U2VsKCksIHdoaXRlU3BhY2VCZWZvcmUsIHdoaXRlU3BhY2VBZnRlciwgZnJhZ21lbnQ7XG5cblx0XHRcdGFyZ3MgPSBhcmdzIHx8IHt9O1xuXHRcdFx0d2hpdGVTcGFjZUJlZm9yZSA9IHdoaXRlU3BhY2VBZnRlciA9ICcnO1xuXHRcdFx0YXJncy5nZXQgPSB0cnVlO1xuXHRcdFx0YXJncy5mb3JtYXQgPSBhcmdzLmZvcm1hdCB8fCAnaHRtbCc7XG5cdFx0XHRhcmdzLnNlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHRzZWxmLmVkaXRvci5maXJlKCdCZWZvcmVHZXRDb250ZW50JywgYXJncyk7XG5cblx0XHRcdGlmIChhcmdzLmZvcm1hdCA9PSAndGV4dCcpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYuaXNDb2xsYXBzZWQoKSA/ICcnIDogKHJuZy50ZXh0IHx8IChzZS50b1N0cmluZyA/IHNlLnRvU3RyaW5nKCkgOiAnJykpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocm5nLmNsb25lQ29udGVudHMpIHtcblx0XHRcdFx0ZnJhZ21lbnQgPSBybmcuY2xvbmVDb250ZW50cygpO1xuXG5cdFx0XHRcdGlmIChmcmFnbWVudCkge1xuXHRcdFx0XHRcdHRtcEVsbS5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocm5nLml0ZW0gIT09IHVuZGVmaW5lZCB8fCBybmcuaHRtbFRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBJRSB3aWxsIHByb2R1Y2UgaW52YWxpZCBtYXJrdXAgaWYgZWxlbWVudHMgYXJlIHByZXNlbnQgdGhhdFxuXHRcdFx0XHQvLyBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgbGlrZSBjdXN0b20gZWxlbWVudHMgb3IgSFRNTDUgZWxlbWVudHMuXG5cdFx0XHRcdC8vIEFkZGluZyBhIEJSIGluIGZyb250IG9mIHRoZSBjb250ZW50cyBhbmQgdGhlbiByZW1vaXZpbmcgaXQgc2VlbXMgdG8gZml4IGl0IHRob3VnaC5cblx0XHRcdFx0dG1wRWxtLmlubmVySFRNTCA9ICc8YnI+JyArIChybmcuaXRlbSA/IHJuZy5pdGVtKDApLm91dGVySFRNTCA6IHJuZy5odG1sVGV4dCk7XG5cdFx0XHRcdHRtcEVsbS5yZW1vdmVDaGlsZCh0bXBFbG0uZmlyc3RDaGlsZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXBFbG0uaW5uZXJIVE1MID0gcm5nLnRvU3RyaW5nKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgd2hpdGVzcGFjZSBiZWZvcmUgYW5kIGFmdGVyXG5cdFx0XHRpZiAoL15cXHMvLnRlc3QodG1wRWxtLmlubmVySFRNTCkpIHtcblx0XHRcdFx0d2hpdGVTcGFjZUJlZm9yZSA9ICcgJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKC9cXHMrJC8udGVzdCh0bXBFbG0uaW5uZXJIVE1MKSkge1xuXHRcdFx0XHR3aGl0ZVNwYWNlQWZ0ZXIgPSAnICc7XG5cdFx0XHR9XG5cblx0XHRcdGFyZ3MuZ2V0SW5uZXIgPSB0cnVlO1xuXG5cdFx0XHRhcmdzLmNvbnRlbnQgPSBzZWxmLmlzQ29sbGFwc2VkKCkgPyAnJyA6IHdoaXRlU3BhY2VCZWZvcmUgKyBzZWxmLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHRtcEVsbSwgYXJncykgKyB3aGl0ZVNwYWNlQWZ0ZXI7XG5cdFx0XHRzZWxmLmVkaXRvci5maXJlKCdHZXRDb250ZW50JywgYXJncyk7XG5cblx0XHRcdHJldHVybiBhcmdzLmNvbnRlbnQ7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBzcGVjaWZpZWQgY29udGVudC4gSWYgYW55IGNvbnRlbnRzIGlzIHNlbGVjdGVkIGl0IHdpbGwgYmUgcmVwbGFjZWRcblx0XHQgKiB3aXRoIHRoZSBjb250ZW50cyBwYXNzZWQgaW4gdG8gdGhpcyBmdW5jdGlvbi4gSWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uIHRoZSBjb250ZW50cyB3aWxsIGJlIGluc2VydGVkXG5cdFx0ICogd2hlcmUgdGhlIGNhcmV0IGlzIHBsYWNlZCBpbiB0aGUgZWRpdG9yL3BhZ2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNldENvbnRlbnRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudCBIVE1MIGNvbnRlbnRzIHRvIHNldCBjb3VsZCBhbHNvIGJlIG90aGVyIGZvcm1hdHMgZGVwZW5kaW5nIG9uIHNldHRpbmdzLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIE9wdGlvbmFsIHNldHRpbmdzIG9iamVjdCB3aXRoIGZvciBleGFtcGxlIGRhdGEgZm9ybWF0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gSW5zZXJ0cyBzb21lIEhUTUwgY29udGVudHMgYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLnNldENvbnRlbnQoJzxzdHJvbmc+U29tZSBjb250ZW50czwvc3Ryb25nPicpO1xuXHRcdCAqL1xuXHRcdHNldENvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRlbnQsIGFyZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcm5nID0gc2VsZi5nZXRSbmcoKSwgY2FyZXROb2RlLCBkb2MgPSBzZWxmLndpbi5kb2N1bWVudCwgZnJhZywgdGVtcDtcblxuXHRcdFx0YXJncyA9IGFyZ3MgfHwge2Zvcm1hdDogJ2h0bWwnfTtcblx0XHRcdGFyZ3Muc2V0ID0gdHJ1ZTtcblx0XHRcdGFyZ3Muc2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdGFyZ3MuY29udGVudCA9IGNvbnRlbnQ7XG5cblx0XHRcdC8vIERpc3BhdGNoIGJlZm9yZSBzZXQgY29udGVudCBldmVudFxuXHRcdFx0aWYgKCFhcmdzLm5vX2V2ZW50cykge1xuXHRcdFx0XHRzZWxmLmVkaXRvci5maXJlKCdCZWZvcmVTZXRDb250ZW50JywgYXJncyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRlbnQgPSBhcmdzLmNvbnRlbnQ7XG5cblx0XHRcdGlmIChybmcuaW5zZXJ0Tm9kZSkge1xuXHRcdFx0XHQvLyBNYWtlIGNhcmV0IG1hcmtlciBzaW5jZSBpbnNlcnROb2RlIHBsYWNlcyB0aGUgY2FyZXQgaW4gdGhlIGJlZ2lubmluZyBvZiB0ZXh0IGFmdGVyIGluc2VydFxuXHRcdFx0XHRjb250ZW50ICs9ICc8c3BhbiBpZD1cIl9fY2FyZXRcIj5fPC9zcGFuPic7XG5cblx0XHRcdFx0Ly8gRGVsZXRlIGFuZCBpbnNlcnQgbmV3IG5vZGVcblx0XHRcdFx0aWYgKHJuZy5zdGFydENvbnRhaW5lciA9PSBkb2MgJiYgcm5nLmVuZENvbnRhaW5lciA9PSBkb2MpIHtcblx0XHRcdFx0XHQvLyBXZWJLaXQgd2lsbCBmYWlsIGlmIHRoZSBib2R5IGlzIGVtcHR5IHNpbmNlIHRoZSByYW5nZSBpcyB0aGVuIGludmFsaWQgYW5kIGl0IGNhbid0IGluc2VydCBjb250ZW50c1xuXHRcdFx0XHRcdGRvYy5ib2R5LmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cm5nLmRlbGV0ZUNvbnRlbnRzKCk7XG5cblx0XHRcdFx0XHRpZiAoZG9jLmJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdGRvYy5ib2R5LmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBkb2Vzbid0IGV4aXN0cyBpbiBJRSA5IERPTVJhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKHJuZy5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQpIHtcblx0XHRcdFx0XHRcdFx0cm5nLmluc2VydE5vZGUocm5nLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb250ZW50KSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBGYWtlIGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBjYWxsIGluIElFIDlcblx0XHRcdFx0XHRcdFx0ZnJhZyA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0XHRcdFx0XHRcdHRlbXAgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0XHRcdFx0XHRcdFx0ZnJhZy5hcHBlbmRDaGlsZCh0ZW1wKTtcblx0XHRcdFx0XHRcdFx0dGVtcC5vdXRlckhUTUwgPSBjb250ZW50O1xuXG5cdFx0XHRcdFx0XHRcdHJuZy5pbnNlcnROb2RlKGZyYWcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgdG8gY2FyZXQgbWFya2VyXG5cdFx0XHRcdGNhcmV0Tm9kZSA9IHNlbGYuZG9tLmdldCgnX19jYXJldCcpO1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSB3cmFwIGl0IGNvbXBsZWF0bHksIE9wZXJhIGZhaWxzIHdpdGggYSBzaW1wbGUgc2VsZWN0IGNhbGxcblx0XHRcdFx0cm5nID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG5cdFx0XHRcdHJuZy5zZXRTdGFydEJlZm9yZShjYXJldE5vZGUpO1xuXHRcdFx0XHRybmcuc2V0RW5kQmVmb3JlKGNhcmV0Tm9kZSk7XG5cdFx0XHRcdHNlbGYuc2V0Um5nKHJuZyk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBjYXJldCBwb3NpdGlvblxuXHRcdFx0XHRzZWxmLmRvbS5yZW1vdmUoJ19fY2FyZXQnKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHNlbGYuc2V0Um5nKHJuZyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0Ly8gTWlnaHQgZmFpbCBvbiBPcGVyYSBmb3Igc29tZSBvZGQgcmVhc29uXG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChybmcuaXRlbSkge1xuXHRcdFx0XHRcdC8vIERlbGV0ZSBjb250ZW50IGFuZCBnZXQgY2FyZXQgdGV4dCBzZWxlY3Rpb25cblx0XHRcdFx0XHRkb2MuZXhlY0NvbW1hbmQoJ0RlbGV0ZScsIGZhbHNlLCBudWxsKTtcblx0XHRcdFx0XHRybmcgPSBzZWxmLmdldFJuZygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRXhwbG9yZXIgcmVtb3ZlcyBzcGFjZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHBhc3RlZCBjb250ZW50c1xuXHRcdFx0XHRpZiAoL15cXHMrLy50ZXN0KGNvbnRlbnQpKSB7XG5cdFx0XHRcdFx0cm5nLnBhc3RlSFRNTCgnPHNwYW4gaWQ9XCJfX21jZV90bXBcIj5fPC9zcGFuPicgKyBjb250ZW50KTtcblx0XHRcdFx0XHRzZWxmLmRvbS5yZW1vdmUoJ19fbWNlX3RtcCcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJuZy5wYXN0ZUhUTUwoY29udGVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRGlzcGF0Y2ggc2V0IGNvbnRlbnQgZXZlbnRcblx0XHRcdGlmICghYXJncy5ub19ldmVudHMpIHtcblx0XHRcdFx0c2VsZi5lZGl0b3IuZmlyZSgnU2V0Q29udGVudCcsIGFyZ3MpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBzdGFydCBlbGVtZW50IG9mIGEgc2VsZWN0aW9uIHJhbmdlLiBJZiB0aGUgc3RhcnQgaXMgaW4gYSB0ZXh0XG5cdFx0ICogbm9kZSB0aGUgcGFyZW50IGVsZW1lbnQgd2lsbCBiZSByZXR1cm5lZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0U3RhcnRcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHJlYWwgT3B0aW9uYWwgc3RhdGUgdG8gZ2V0IHRoZSByZWFsIHBhcmVudCB3aGVuIHRoZSBzZWxlY3Rpb24gaXMgY29sbGFwc2VkIG5vdCB0aGUgY2xvc2VzdCBlbGVtZW50LlxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnR9IFN0YXJ0IGVsZW1lbnQgb2Ygc2VsZWN0aW9uIHJhbmdlLlxuXHRcdCAqL1xuXHRcdGdldFN0YXJ0OiBmdW5jdGlvbihyZWFsKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHJuZyA9IHNlbGYuZ2V0Um5nKCksIHN0YXJ0RWxlbWVudCwgcGFyZW50RWxlbWVudCwgY2hlY2tSbmcsIG5vZGU7XG5cblx0XHRcdGlmIChybmcuZHVwbGljYXRlIHx8IHJuZy5pdGVtKSB7XG5cdFx0XHRcdC8vIENvbnRyb2wgc2VsZWN0aW9uLCByZXR1cm4gZmlyc3QgaXRlbVxuXHRcdFx0XHRpZiAocm5nLml0ZW0pIHtcblx0XHRcdFx0XHRyZXR1cm4gcm5nLml0ZW0oMCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgc3RhcnQgZWxlbWVudFxuXHRcdFx0XHRjaGVja1JuZyA9IHJuZy5kdXBsaWNhdGUoKTtcblx0XHRcdFx0Y2hlY2tSbmcuY29sbGFwc2UoMSk7XG5cdFx0XHRcdHN0YXJ0RWxlbWVudCA9IGNoZWNrUm5nLnBhcmVudEVsZW1lbnQoKTtcblx0XHRcdFx0aWYgKHN0YXJ0RWxlbWVudC5vd25lckRvY3VtZW50ICE9PSBzZWxmLmRvbS5kb2MpIHtcblx0XHRcdFx0XHRzdGFydEVsZW1lbnQgPSBzZWxmLmRvbS5nZXRSb290KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiByYW5nZSBwYXJlbnQgaXMgaW5zaWRlIHRoZSBzdGFydCBlbGVtZW50LCB0aGVuIHJldHVybiB0aGUgaW5uZXIgcGFyZW50IGVsZW1lbnRcblx0XHRcdFx0Ly8gVGhpcyB3aWxsIGZpeCBpc3N1ZXMgd2hlbiBhIHNpbmdsZSBlbGVtZW50IGlzIHNlbGVjdGVkLCBJRSB3b3VsZCBvdGhlcndpc2UgcmV0dXJuIHRoZSB3cm9uZyBzdGFydCBlbGVtZW50XG5cdFx0XHRcdHBhcmVudEVsZW1lbnQgPSBub2RlID0gcm5nLnBhcmVudEVsZW1lbnQoKTtcblx0XHRcdFx0d2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSkge1xuXHRcdFx0XHRcdGlmIChub2RlID09IHN0YXJ0RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0c3RhcnRFbGVtZW50ID0gcGFyZW50RWxlbWVudDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBzdGFydEVsZW1lbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHN0YXJ0RWxlbWVudCA9IHJuZy5zdGFydENvbnRhaW5lcjtcblxuXHRcdFx0aWYgKHN0YXJ0RWxlbWVudC5ub2RlVHlwZSA9PSAxICYmIHN0YXJ0RWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0aWYgKCFyZWFsIHx8ICFybmcuY29sbGFwc2VkKSB7XG5cdFx0XHRcdFx0c3RhcnRFbGVtZW50ID0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbTWF0aC5taW4oc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgcm5nLnN0YXJ0T2Zmc2V0KV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHN0YXJ0RWxlbWVudCAmJiBzdGFydEVsZW1lbnQubm9kZVR5cGUgPT0gMykge1xuXHRcdFx0XHRyZXR1cm4gc3RhcnRFbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzdGFydEVsZW1lbnQ7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGVuZCBlbGVtZW50IG9mIGEgc2VsZWN0aW9uIHJhbmdlLiBJZiB0aGUgZW5kIGlzIGluIGEgdGV4dFxuXHRcdCAqIG5vZGUgdGhlIHBhcmVudCBlbGVtZW50IHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldEVuZFxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVhbCBPcHRpb25hbCBzdGF0ZSB0byBnZXQgdGhlIHJlYWwgcGFyZW50IHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBjb2xsYXBzZWQgbm90IHRoZSBjbG9zZXN0IGVsZW1lbnQuXG5cdFx0ICogQHJldHVybiB7RWxlbWVudH0gRW5kIGVsZW1lbnQgb2Ygc2VsZWN0aW9uIHJhbmdlLlxuXHRcdCAqL1xuXHRcdGdldEVuZDogZnVuY3Rpb24ocmVhbCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBybmcgPSBzZWxmLmdldFJuZygpLCBlbmRFbGVtZW50LCBlbmRPZmZzZXQ7XG5cblx0XHRcdGlmIChybmcuZHVwbGljYXRlIHx8IHJuZy5pdGVtKSB7XG5cdFx0XHRcdGlmIChybmcuaXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBybmcuaXRlbSgwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJuZyA9IHJuZy5kdXBsaWNhdGUoKTtcblx0XHRcdFx0cm5nLmNvbGxhcHNlKDApO1xuXHRcdFx0XHRlbmRFbGVtZW50ID0gcm5nLnBhcmVudEVsZW1lbnQoKTtcblx0XHRcdFx0aWYgKGVuZEVsZW1lbnQub3duZXJEb2N1bWVudCAhPT0gc2VsZi5kb20uZG9jKSB7XG5cdFx0XHRcdFx0ZW5kRWxlbWVudCA9IHNlbGYuZG9tLmdldFJvb3QoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChlbmRFbGVtZW50ICYmIGVuZEVsZW1lbnQubm9kZU5hbWUgPT0gJ0JPRFknKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuZEVsZW1lbnQubGFzdENoaWxkIHx8IGVuZEVsZW1lbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZW5kRWxlbWVudDtcblx0XHRcdH1cblxuXHRcdFx0ZW5kRWxlbWVudCA9IHJuZy5lbmRDb250YWluZXI7XG5cdFx0XHRlbmRPZmZzZXQgPSBybmcuZW5kT2Zmc2V0O1xuXG5cdFx0XHRpZiAoZW5kRWxlbWVudC5ub2RlVHlwZSA9PSAxICYmIGVuZEVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdGlmICghcmVhbCB8fCAhcm5nLmNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdGVuZEVsZW1lbnQgPSBlbmRFbGVtZW50LmNoaWxkTm9kZXNbZW5kT2Zmc2V0ID4gMCA/IGVuZE9mZnNldCAtIDEgOiBlbmRPZmZzZXRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbmRFbGVtZW50ICYmIGVuZEVsZW1lbnQubm9kZVR5cGUgPT0gMykge1xuXHRcdFx0XHRyZXR1cm4gZW5kRWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZW5kRWxlbWVudDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIGJvb2ttYXJrIGxvY2F0aW9uIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24uIFRoaXMgYm9va21hcmsgb2JqZWN0XG5cdFx0ICogY2FuIHRoZW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBzZWxlY3Rpb24gYWZ0ZXIgc29tZSBjb250ZW50IG1vZGlmaWNhdGlvbiB0byB0aGUgZG9jdW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldEJvb2ttYXJrXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHR5cGUgT3B0aW9uYWwgc3RhdGUgaWYgdGhlIGJvb2ttYXJrIHNob3VsZCBiZSBzaW1wbGUgb3Igbm90LiBEZWZhdWx0IGlzIGNvbXBsZXguXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBub3JtYWxpemVkIE9wdGlvbmFsIHN0YXRlIHRoYXQgZW5hYmxlcyB5b3UgdG8gZ2V0IGEgcG9zaXRpb24gdGhhdCBpdCB3b3VsZCBiZSBhZnRlciBub3JtYWxpemF0aW9uLlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gQm9va21hcmsgb2JqZWN0LCB1c2UgbW92ZVRvQm9va21hcmsgd2l0aCB0aGlzIG9iamVjdCB0byByZXN0b3JlIHRoZSBzZWxlY3Rpb24uXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBTdG9yZXMgYSBib29rbWFyayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb25cblx0XHQgKiB2YXIgYm0gPSB0aW55bWNlLmFjdGl2ZUVkaXRvci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcblx0XHQgKlxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLnNldENvbnRlbnQodGlueW1jZS5hY3RpdmVFZGl0b3IuZ2V0Q29udGVudCgpICsgJ1NvbWUgbmV3IGNvbnRlbnQnKTtcblx0XHQgKlxuXHRcdCAqIC8vIFJlc3RvcmUgdGhlIHNlbGVjdGlvbiBib29rbWFya1xuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhibSk7XG5cdFx0ICovXG5cdFx0Z2V0Qm9va21hcms6IGZ1bmN0aW9uKHR5cGUsIG5vcm1hbGl6ZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLmJvb2ttYXJrTWFuYWdlci5nZXRCb29rbWFyayh0eXBlLCBub3JtYWxpemVkKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVzdG9yZXMgdGhlIHNlbGVjdGlvbiB0byB0aGUgc3BlY2lmaWVkIGJvb2ttYXJrLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBtb3ZlVG9Cb29rbWFya1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBib29rbWFyayBCb29rbWFyayB0byByZXN0b3JlIHNlbGVjdGlvbiBmcm9tLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgaXQgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gU3RvcmVzIGEgYm9va21hcmsgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG5cdFx0ICogdmFyIGJtID0gdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk7XG5cdFx0ICpcblx0XHQgKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5zZXRDb250ZW50KHRpbnltY2UuYWN0aXZlRWRpdG9yLmdldENvbnRlbnQoKSArICdTb21lIG5ldyBjb250ZW50Jyk7XG5cdFx0ICpcblx0XHQgKiAvLyBSZXN0b3JlIHRoZSBzZWxlY3Rpb24gYm9va21hcmtcblx0XHQgKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5zZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm0pO1xuXHRcdCAqL1xuXHRcdG1vdmVUb0Jvb2ttYXJrOiBmdW5jdGlvbihib29rbWFyaykge1xuXHRcdFx0cmV0dXJuIHRoaXMuYm9va21hcmtNYW5hZ2VyLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2VsZWN0cyB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuIFRoaXMgd2lsbCBwbGFjZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlIGFyb3VuZCB0aGUgZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2VsZWN0XG5cdFx0ICogQHBhcmFtIHtFbGVtZW50fSBub2RlIEhUTUwgRE9NIGVsZW1lbnQgdG8gc2VsZWN0LlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gY29udGVudCBPcHRpb25hbCBib29sIHN0YXRlIGlmIHRoZSBjb250ZW50cyBzaG91bGQgYmUgc2VsZWN0ZWQgb3Igbm90IG9uIG5vbiBJRSBicm93c2VyLlxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnR9IFNlbGVjdGVkIGVsZW1lbnQgdGhlIHNhbWUgZWxlbWVudCBhcyB0aGUgb25lIHRoYXQgZ290IHBhc3NlZCBpbi5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIFNlbGVjdCB0aGUgZmlyc3QgcGFyYWdyYXBoIGluIHRoZSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdCh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2VsZWN0KCdwJylbMF0pO1xuXHRcdCAqL1xuXHRcdHNlbGVjdDogZnVuY3Rpb24obm9kZSwgY29udGVudCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBkb20gPSBzZWxmLmRvbSwgcm5nID0gZG9tLmNyZWF0ZVJuZygpLCBpZHg7XG5cblx0XHRcdC8vIENsZWFyIHN0b3JlZCByYW5nZSBzZXQgYnkgRm9jdXNNYW5hZ2VyXG5cdFx0XHRzZWxmLmxhc3RGb2N1c0Jvb2ttYXJrID0gbnVsbDtcblxuXHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0aWYgKCFjb250ZW50ICYmIHNlbGYuY29udHJvbFNlbGVjdGlvbi5jb250cm9sU2VsZWN0KG5vZGUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWR4ID0gZG9tLm5vZGVJbmRleChub2RlKTtcblx0XHRcdFx0cm5nLnNldFN0YXJ0KG5vZGUucGFyZW50Tm9kZSwgaWR4KTtcblx0XHRcdFx0cm5nLnNldEVuZChub2RlLnBhcmVudE5vZGUsIGlkeCArIDEpO1xuXG5cdFx0XHRcdC8vIEZpbmQgZmlyc3QvbGFzdCB0ZXh0IG5vZGUgb3IgQlIgZWxlbWVudFxuXHRcdFx0XHRpZiAoY29udGVudCkge1xuXHRcdFx0XHRcdHNlbGYuX21vdmVFbmRQb2ludChybmcsIG5vZGUsIHRydWUpO1xuXHRcdFx0XHRcdHNlbGYuX21vdmVFbmRQb2ludChybmcsIG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5zZXRSbmcocm5nKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgc2VsZWN0aW9uIHJhbmdlIGlzIGNvbGxhcHNlZCBvciBub3QuIENvbGxhcHNlZCBtZWFucyBpZiBpdCdzIGEgY2FyZXQgb3IgYSBsYXJnZXIgc2VsZWN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpc0NvbGxhcHNlZFxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2Ugc3RhdGUgaWYgdGhlIHNlbGVjdGlvbiByYW5nZSBpcyBjb2xsYXBzZWQgb3Igbm90LlxuXHRcdCAqIENvbGxhcHNlZCBtZWFucyBpZiBpdCdzIGEgY2FyZXQgb3IgYSBsYXJnZXIgc2VsZWN0aW9uLlxuXHRcdCAqL1xuXHRcdGlzQ29sbGFwc2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcm5nID0gc2VsZi5nZXRSbmcoKSwgc2VsID0gc2VsZi5nZXRTZWwoKTtcblxuXHRcdFx0aWYgKCFybmcgfHwgcm5nLml0ZW0pIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocm5nLmNvbXBhcmVFbmRQb2ludHMpIHtcblx0XHRcdFx0cmV0dXJuIHJuZy5jb21wYXJlRW5kUG9pbnRzKCdTdGFydFRvRW5kJywgcm5nKSA9PT0gMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICFzZWwgfHwgcm5nLmNvbGxhcHNlZDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ29sbGFwc2UgdGhlIHNlbGVjdGlvbiB0byBzdGFydCBvciBlbmQgb2YgcmFuZ2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNvbGxhcHNlXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSB0b1N0YXJ0IE9wdGlvbmFsIGJvb2xlYW4gc3RhdGUgaWYgdG8gY29sbGFwc2UgdG8gZW5kIG9yIG5vdC4gRGVmYXVsdHMgdG8gZmFsc2UuXG5cdFx0ICovXG5cdFx0Y29sbGFwc2U6IGZ1bmN0aW9uKHRvU3RhcnQpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcm5nID0gc2VsZi5nZXRSbmcoKSwgbm9kZTtcblxuXHRcdFx0Ly8gQ29udHJvbCByYW5nZSBvbiBJRVxuXHRcdFx0aWYgKHJuZy5pdGVtKSB7XG5cdFx0XHRcdG5vZGUgPSBybmcuaXRlbSgwKTtcblx0XHRcdFx0cm5nID0gc2VsZi53aW4uZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcblx0XHRcdFx0cm5nLm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRybmcuY29sbGFwc2UoISF0b1N0YXJ0KTtcblx0XHRcdHNlbGYuc2V0Um5nKHJuZyk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGJyb3dzZXJzIGludGVybmFsIHNlbGVjdGlvbiBvYmplY3QuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFNlbFxuXHRcdCAqIEByZXR1cm4ge1NlbGVjdGlvbn0gSW50ZXJuYWwgYnJvd3NlciBzZWxlY3Rpb24gb2JqZWN0LlxuXHRcdCAqL1xuXHRcdGdldFNlbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgd2luID0gdGhpcy53aW47XG5cblx0XHRcdHJldHVybiB3aW4uZ2V0U2VsZWN0aW9uID8gd2luLmdldFNlbGVjdGlvbigpIDogd2luLmRvY3VtZW50LnNlbGVjdGlvbjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgYnJvd3NlcnMgaW50ZXJuYWwgcmFuZ2Ugb2JqZWN0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRSbmdcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHczYyBGb3JjZXMgYSBjb21wYXRpYmxlIFczQyByYW5nZSBvbiBJRS5cblx0XHQgKiBAcmV0dXJuIHtSYW5nZX0gSW50ZXJuYWwgYnJvd3NlciByYW5nZSBvYmplY3QuXG5cdFx0ICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS9yYW5nZV9pbnRyby5odG1sXG5cdFx0ICogQHNlZSBodHRwOi8vd3d3LmRvdHZvaWQuY29tLzIwMDEvMDMvdXNpbmctdGhlLXJhbmdlLW9iamVjdC1pbi1tb3ppbGxhL1xuXHRcdCAqL1xuXHRcdGdldFJuZzogZnVuY3Rpb24odzNjKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHNlbGVjdGlvbiwgcm5nLCBlbG0sIGRvYywgaWVSbmcsIGV2dDtcblxuXHRcdFx0ZnVuY3Rpb24gdHJ5Q29tcGFyZUJvdW5kYXJ5UG9pbnRzKGhvdywgc291cmNlUmFuZ2UsIGRlc3RpbmF0aW9uUmFuZ2UpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXR1cm4gc291cmNlUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGhvdywgZGVzdGluYXRpb25SYW5nZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0Ly8gR2Vja28gdGhyb3dzIHdyb25nIGRvY3VtZW50IGV4Y2VwdGlvbiBpZiB0aGUgcmFuZ2UgcG9pbnRzXG5cdFx0XHRcdFx0Ly8gdG8gbm9kZXMgdGhhdCB3aGVyZSByZW1vdmVkIGZyb20gdGhlIGRvbSAjNjY5MFxuXHRcdFx0XHRcdC8vIEJyb3dzZXJzIHNob3VsZCBtdXRhdGUgZXhpc3RpbmcgRE9NUmFuZ2UgaW5zdGFuY2VzIHNvIHRoYXQgdGhleSBhbHdheXMgcG9pbnRcblx0XHRcdFx0XHQvLyB0byBzb21ldGhpbmcgaW4gdGhlIGRvY3VtZW50IHRoaXMgaXMgbm90IHRoZSBjYXNlIGluIEdlY2tvIHdvcmtzIGZpbmUgaW4gSUUvV2ViS2l0L0JsaW5rXG5cdFx0XHRcdFx0Ly8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMganVzdCByZXR1cm4gLTFcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxmLndpbikge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0ZG9jID0gc2VsZi53aW4uZG9jdW1lbnQ7XG5cblx0XHRcdGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJyB8fCBkb2MgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVzZSBsYXN0IHJuZyBwYXNzZWQgZnJvbSBGb2N1c01hbmFnZXIgaWYgaXQncyBhdmFpbGFibGUgdGhpcyBlbmFibGVzXG5cdFx0XHQvLyBjYWxscyB0byBlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCkgdG8gd29yayB3aGVuIGNhcmV0IGZvY3VzIGlzIGxvc3Qgb24gSUVcblx0XHRcdGlmICghdzNjICYmIHNlbGYubGFzdEZvY3VzQm9va21hcmspIHtcblx0XHRcdFx0dmFyIGJvb2ttYXJrID0gc2VsZi5sYXN0Rm9jdXNCb29rbWFyaztcblxuXHRcdFx0XHQvLyBDb252ZXJ0IGJvb2ttYXJrIHRvIHJhbmdlIElFIDExIGZpeFxuXHRcdFx0XHRpZiAoYm9va21hcmsuc3RhcnRDb250YWluZXIpIHtcblx0XHRcdFx0XHRybmcgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcblx0XHRcdFx0XHRybmcuc2V0U3RhcnQoYm9va21hcmsuc3RhcnRDb250YWluZXIsIGJvb2ttYXJrLnN0YXJ0T2Zmc2V0KTtcblx0XHRcdFx0XHRybmcuc2V0RW5kKGJvb2ttYXJrLmVuZENvbnRhaW5lciwgYm9va21hcmsuZW5kT2Zmc2V0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRybmcgPSBib29rbWFyaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBybmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvdW5kIHRyaWRlbnRTZWwgb2JqZWN0IHRoZW4gd2UgbmVlZCB0byB1c2UgdGhhdCBvbmVcblx0XHRcdGlmICh3M2MgJiYgc2VsZi50cmlkZW50U2VsKSB7XG5cdFx0XHRcdHJldHVybiBzZWxmLnRyaWRlbnRTZWwuZ2V0UmFuZ2VBdCgwKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKChzZWxlY3Rpb24gPSBzZWxmLmdldFNlbCgpKSkge1xuXHRcdFx0XHRcdGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdHJuZyA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRybmcgPSBzZWxlY3Rpb24uY3JlYXRlUmFuZ2UgPyBzZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSA6IGRvYy5jcmVhdGVSYW5nZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0Ly8gSUUgdGhyb3dzIHVuc3BlY2lmaWVkIGVycm9yIGhlcmUgaWYgVGlueU1DRSBpcyBwbGFjZWQgaW4gYSBmcmFtZS9pZnJhbWVcblx0XHRcdH1cblxuXHRcdFx0ZXZ0ID0gc2VsZi5lZGl0b3IuZmlyZSgnR2V0U2VsZWN0aW9uUmFuZ2UnLCB7cmFuZ2U6IHJuZ30pO1xuXHRcdFx0aWYgKGV2dC5yYW5nZSAhPT0gcm5nKSB7XG5cdFx0XHRcdHJldHVybiBldnQucmFuZ2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlIGhhdmUgVzNDIHJhbmdlcyBhbmQgaXQncyBJRSB0aGVuIGZha2UgY29udHJvbCBzZWxlY3Rpb24gc2luY2UgSUU5IGRvZXNuJ3QgaGFuZGxlIHRoYXQgY29ycmVjdGx5IHlldFxuXHRcdFx0Ly8gSUUgMTEgZG9lc24ndCBzdXBwb3J0IHRoZSBzZWxlY3Rpb24gb2JqZWN0IHNvIHdlIGNoZWNrIGZvciB0aGF0IGFzIHdlbGxcblx0XHRcdGlmIChpc0lFICYmIHJuZyAmJiBybmcuc2V0U3RhcnQgJiYgZG9jLnNlbGVjdGlvbikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIElFIHdpbGwgc29tZXRpbWVzIHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlXG5cdFx0XHRcdFx0aWVSbmcgPSBkb2Muc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaWVSbmcgJiYgaWVSbmcuaXRlbSkge1xuXHRcdFx0XHRcdGVsbSA9IGllUm5nLml0ZW0oMCk7XG5cdFx0XHRcdFx0cm5nID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG5cdFx0XHRcdFx0cm5nLnNldFN0YXJ0QmVmb3JlKGVsbSk7XG5cdFx0XHRcdFx0cm5nLnNldEVuZEFmdGVyKGVsbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTm8gcmFuZ2UgZm91bmQgdGhlbiBjcmVhdGUgYW4gZW1wdHkgb25lXG5cdFx0XHQvLyBUaGlzIGNhbiBvY2N1ciB3aGVuIHRoZSBlZGl0b3IgaXMgcGxhY2VkIGluIGEgaGlkZGVuIGNvbnRhaW5lciBlbGVtZW50IG9uIEdlY2tvXG5cdFx0XHQvLyBPciBvbiBJRSB3aGVuIHRoZXJlIHdhcyBhbiBleGNlcHRpb25cblx0XHRcdGlmICghcm5nKSB7XG5cdFx0XHRcdHJuZyA9IGRvYy5jcmVhdGVSYW5nZSA/IGRvYy5jcmVhdGVSYW5nZSgpIDogZG9jLmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJhbmdlIGlzIGF0IHN0YXJ0IG9mIGRvY3VtZW50IHRoZW4gbW92ZSBpdCB0byBzdGFydCBvZiBib2R5XG5cdFx0XHRpZiAocm5nLnNldFN0YXJ0ICYmIHJuZy5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gOSAmJiBybmcuY29sbGFwc2VkKSB7XG5cdFx0XHRcdGVsbSA9IHNlbGYuZG9tLmdldFJvb3QoKTtcblx0XHRcdFx0cm5nLnNldFN0YXJ0KGVsbSwgMCk7XG5cdFx0XHRcdHJuZy5zZXRFbmQoZWxtLCAwKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbGYuc2VsZWN0ZWRSYW5nZSAmJiBzZWxmLmV4cGxpY2l0UmFuZ2UpIHtcblx0XHRcdFx0aWYgKHRyeUNvbXBhcmVCb3VuZGFyeVBvaW50cyhybmcuU1RBUlRfVE9fU1RBUlQsIHJuZywgc2VsZi5zZWxlY3RlZFJhbmdlKSA9PT0gMCAmJlxuXHRcdFx0XHRcdHRyeUNvbXBhcmVCb3VuZGFyeVBvaW50cyhybmcuRU5EX1RPX0VORCwgcm5nLCBzZWxmLnNlbGVjdGVkUmFuZ2UpID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gU2FmYXJpLCBPcGVyYSBhbmQgQ2hyb21lIG9ubHkgZXZlciBzZWxlY3QgdGV4dCB3aGljaCBjYXVzZXMgdGhlIHJhbmdlIHRvIGNoYW5nZS5cblx0XHRcdFx0XHQvLyBUaGlzIGxldHMgdXMgdXNlIHRoZSBvcmlnaW5hbGx5IHNldCByYW5nZSBpZiB0aGUgc2VsZWN0aW9uIGhhc24ndCBiZWVuIGNoYW5nZWQgYnkgdGhlIHVzZXIuXG5cdFx0XHRcdFx0cm5nID0gc2VsZi5leHBsaWNpdFJhbmdlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGYuc2VsZWN0ZWRSYW5nZSA9IG51bGw7XG5cdFx0XHRcdFx0c2VsZi5leHBsaWNpdFJhbmdlID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcm5nO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDaGFuZ2VzIHRoZSBzZWxlY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBET00gcmFuZ2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNldFJuZ1xuXHRcdCAqIEBwYXJhbSB7UmFuZ2V9IHJuZyBSYW5nZSB0byBzZWxlY3QuXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBmb3J3YXJkIE9wdGlvbmFsIGJvb2xlYW4gaWYgdGhlIHNlbGVjdGlvbiBpcyBmb3J3YXJkcyBvciBiYWNrd2FyZHMuXG5cdFx0ICovXG5cdFx0c2V0Um5nOiBmdW5jdGlvbihybmcsIGZvcndhcmQpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc2VsLCBub2RlLCBldnQ7XG5cblx0XHRcdGlmICghcm5nKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSXMgSUUgc3BlY2lmaWMgcmFuZ2Vcblx0XHRcdGlmIChybmcuc2VsZWN0KSB7XG5cdFx0XHRcdHNlbGYuZXhwbGljaXRSYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRybmcuc2VsZWN0KCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0Ly8gTmVlZGVkIGZvciBzb21lIG9kZCBJRSBidWcgIzE4NDMzMDZcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxmLnRyaWRlbnRTZWwpIHtcblx0XHRcdFx0c2VsID0gc2VsZi5nZXRTZWwoKTtcblxuXHRcdFx0XHRldnQgPSBzZWxmLmVkaXRvci5maXJlKCdTZXRTZWxlY3Rpb25SYW5nZScsIHtyYW5nZTogcm5nfSk7XG5cdFx0XHRcdHJuZyA9IGV2dC5yYW5nZTtcblxuXHRcdFx0XHRpZiAoc2VsKSB7XG5cdFx0XHRcdFx0c2VsZi5leHBsaWNpdFJhbmdlID0gcm5nO1xuXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRcdFx0XHRcdHNlbC5hZGRSYW5nZShybmcpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0XHQvLyBJRSBtaWdodCB0aHJvdyBlcnJvcnMgaGVyZSBpZiB0aGUgZWRpdG9yIGlzIHdpdGhpbiBhIGhpZGRlbiBjb250YWluZXIgYW5kIHNlbGVjdGlvbiBpcyBjaGFuZ2VkXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRm9yd2FyZCBpcyBzZXQgdG8gZmFsc2UgYW5kIHdlIGhhdmUgYW4gZXh0ZW5kIGZ1bmN0aW9uXG5cdFx0XHRcdFx0aWYgKGZvcndhcmQgPT09IGZhbHNlICYmIHNlbC5leHRlbmQpIHtcblx0XHRcdFx0XHRcdHNlbC5jb2xsYXBzZShybmcuZW5kQ29udGFpbmVyLCBybmcuZW5kT2Zmc2V0KTtcblx0XHRcdFx0XHRcdHNlbC5leHRlbmQocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIGFkZGluZyByYW5nZSBpc24ndCBhbHdheXMgc3VjY2Vzc2Z1bCBzbyB3ZSBuZWVkIHRvIGNoZWNrIHJhbmdlIGNvdW50IG90aGVyd2lzZSBhbiBleGNlcHRpb24gY2FuIG9jY3VyXG5cdFx0XHRcdFx0c2VsZi5zZWxlY3RlZFJhbmdlID0gc2VsLnJhbmdlQ291bnQgPiAwID8gc2VsLmdldFJhbmdlQXQoMCkgOiBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2ViS2l0IGVnZGUgY2FzZSBzZWxlY3RpbmcgaW1hZ2VzIHdvcmtzIGJldHRlciB1c2luZyBzZXRCYXNlQW5kRXh0ZW50IHdoZW4gdGhlIGltYWdlIGlzIGZsb2F0ZWRcblx0XHRcdFx0aWYgKCFybmcuY29sbGFwc2VkICYmIHJuZy5zdGFydENvbnRhaW5lciA9PSBybmcuZW5kQ29udGFpbmVyICYmIHNlbC5zZXRCYXNlQW5kRXh0ZW50ICYmICFFbnYuaWUpIHtcblx0XHRcdFx0XHRpZiAocm5nLmVuZE9mZnNldCAtIHJuZy5zdGFydE9mZnNldCA8IDIpIHtcblx0XHRcdFx0XHRcdGlmIChybmcuc3RhcnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBybmcuc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tybmcuc3RhcnRPZmZzZXRdO1xuXHRcdFx0XHRcdFx0XHRpZiAobm9kZSAmJiBub2RlLnRhZ05hbWUgPT0gJ0lNRycpIHtcblx0XHRcdFx0XHRcdFx0XHRzZWwuc2V0QmFzZUFuZEV4dGVudChcblx0XHRcdFx0XHRcdFx0XHRcdHJuZy5zdGFydENvbnRhaW5lcixcblx0XHRcdFx0XHRcdFx0XHRcdHJuZy5zdGFydE9mZnNldCxcblx0XHRcdFx0XHRcdFx0XHRcdHJuZy5lbmRDb250YWluZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRybmcuZW5kT2Zmc2V0XG5cdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFNpbmNlIHRoZSBzZXRCYXNlQW5kRXh0ZW50IGlzIGZpeGVkIGluIG1vcmUgcmVjZW50IEJsaW5rIHZlcnNpb25zIHdlXG5cdFx0XHRcdFx0XHRcdFx0Ly8gbmVlZCB0byBkZXRlY3QgaWYgaXQncyBkb2luZyB0aGUgd3JvbmcgdGhpbmcgYW5kIGZhbGxpbmcgYmFjayB0byB0aGVcblx0XHRcdFx0XHRcdFx0XHQvLyBjcmF6eSBpbmNvcnJlY3QgYmVoYXZpb3IgYXBpIGNhbGwgc2luY2UgdGhhdCBzZWVtcyB0byBiZSB0aGUgb25seSB3YXlcblx0XHRcdFx0XHRcdFx0XHQvLyB0byBnZXQgaXQgdG8gd29yayBvbiBTYWZhcmkgV2ViS2l0IGFzIG9mIDIwMTctMDItMjNcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2VsLmFuY2hvck5vZGUgIT09IHJuZy5zdGFydENvbnRhaW5lciB8fCBzZWwuZm9jdXNOb2RlICE9PSBybmcuZW5kQ29udGFpbmVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWwuc2V0QmFzZUFuZEV4dGVudChub2RlLCAwLCBub2RlLCAxKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxmLmVkaXRvci5maXJlKCdBZnRlclNldFNlbGVjdGlvblJhbmdlJywge3JhbmdlOiBybmd9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIElzIFczQyBSYW5nZSBmYWtlIHJhbmdlIG9uIElFXG5cdFx0XHRcdGlmIChybmcuY2xvbmVSYW5nZSkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRzZWxmLnRyaWRlbnRTZWwuYWRkUmFuZ2Uocm5nKTtcblx0XHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdFx0Ly9JRTkgdGhyb3dzIGFuIGVycm9yIGhlcmUgaWYgY2FsbGVkIGJlZm9yZSBzZWxlY3Rpb24gaXMgcGxhY2VkIGluIHRoZSBlZGl0b3Jcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgY3VycmVudCBzZWxlY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBET00gZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0Tm9kZVxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxtIEVsZW1lbnQgdG8gc2V0IGFzIHRoZSBjb250ZW50cyBvZiB0aGUgc2VsZWN0aW9uLlxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnR9IFJldHVybnMgdGhlIGVsZW1lbnQgdGhhdCBnb3QgcGFzc2VkIGluLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gSW5zZXJ0cyBhIERPTSBub2RlIGF0IGN1cnJlbnQgc2VsZWN0aW9uL2NhcmV0IGxvY2F0aW9uXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLnNldE5vZGUodGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLmNyZWF0ZSgnaW1nJywge3NyYzogJ3NvbWUuZ2lmJywgdGl0bGU6ICdzb21lIHRpdGxlJ30pKTtcblx0XHQgKi9cblx0XHRzZXROb2RlOiBmdW5jdGlvbihlbG0pIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5zZXRDb250ZW50KHNlbGYuZG9tLmdldE91dGVySFRNTChlbG0pKTtcblxuXHRcdFx0cmV0dXJuIGVsbTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVsZW1lbnQgb3IgdGhlIGNvbW1vbiBhbmNlc3RvciBlbGVtZW50IGZvciBib3RoIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHNlbGVjdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0Tm9kZVxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnR9IEN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50IG9yIGNvbW1vbiBhbmNlc3RvciBlbGVtZW50LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gQWxlcnRzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWxlbWVudHMgbm9kZSBuYW1lXG5cdFx0ICogYWxlcnQodGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKS5ub2RlTmFtZSk7XG5cdFx0ICovXG5cdFx0Z2V0Tm9kZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHJuZyA9IHNlbGYuZ2V0Um5nKCksIGVsbTtcblx0XHRcdHZhciBzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCByb290ID0gc2VsZi5kb20uZ2V0Um9vdCgpO1xuXG5cdFx0XHRmdW5jdGlvbiBza2lwRW1wdHlUZXh0Tm9kZXMobm9kZSwgZm9yd2FyZHMpIHtcblx0XHRcdFx0dmFyIG9yaWcgPSBub2RlO1xuXG5cdFx0XHRcdHdoaWxlIChub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IDMgJiYgbm9kZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRub2RlID0gZm9yd2FyZHMgPyBub2RlLm5leHRTaWJsaW5nIDogbm9kZS5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbm9kZSB8fCBvcmlnO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSYW5nZSBtYXliZSBsb3N0IGFmdGVyIHRoZSBlZGl0b3IgaXMgbWFkZSB2aXNpYmxlIGFnYWluXG5cdFx0XHRpZiAoIXJuZykge1xuXHRcdFx0XHRyZXR1cm4gcm9vdDtcblx0XHRcdH1cblxuXHRcdFx0c3RhcnRDb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG5cdFx0XHRlbmRDb250YWluZXIgPSBybmcuZW5kQ29udGFpbmVyO1xuXHRcdFx0c3RhcnRPZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG5cdFx0XHRlbmRPZmZzZXQgPSBybmcuZW5kT2Zmc2V0O1xuXG5cdFx0XHRpZiAocm5nLnNldFN0YXJ0KSB7XG5cdFx0XHRcdGVsbSA9IHJuZy5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcblxuXHRcdFx0XHQvLyBIYW5kbGUgc2VsZWN0aW9uIGEgaW1hZ2Ugb3Igb3RoZXIgY29udHJvbCBsaWtlIGVsZW1lbnQgc3VjaCBhcyBhbmNob3JzXG5cdFx0XHRcdGlmICghcm5nLmNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdGlmIChzdGFydENvbnRhaW5lciA9PSBlbmRDb250YWluZXIpIHtcblx0XHRcdFx0XHRcdGlmIChlbmRPZmZzZXQgLSBzdGFydE9mZnNldCA8IDIpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGVsbSA9IHN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXNbc3RhcnRPZmZzZXRdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIGFuY2hvciBub2RlIGlzIGEgZWxlbWVudCBpbnN0ZWFkIG9mIGEgdGV4dCBub2RlIHRoZW4gcmV0dXJuIHRoaXMgZWxlbWVudFxuXHRcdFx0XHRcdC8vaWYgKHRpbnltY2UuaXNXZWJLaXQgJiYgc2VsLmFuY2hvck5vZGUgJiYgc2VsLmFuY2hvck5vZGUubm9kZVR5cGUgPT0gMSlcblx0XHRcdFx0XHQvL1x0cmV0dXJuIHNlbC5hbmNob3JOb2RlLmNoaWxkTm9kZXNbc2VsLmFuY2hvck9mZnNldF07XG5cblx0XHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHNlbGVjdGlvbiBpcyBpbW1lZGlhdGVseSB3cmFwcGVkIGFyb3VuZCBhIG5vZGUgYW5kIHJldHVybiB0aGF0IG5vZGUgaW5zdGVhZCBvZiBpdCdzIHBhcmVudC5cblx0XHRcdFx0XHQvLyBUaGlzIGhhcHBlbnMgd2hlbiB5b3UgZG91YmxlIGNsaWNrIGFuIHVuZGVybGluZWQgd29yZCBpbiBGaXJlRm94LlxuXHRcdFx0XHRcdGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyAmJiBlbmRDb250YWluZXIubm9kZVR5cGUgPT09IDMpIHtcblx0XHRcdFx0XHRcdGlmIChzdGFydENvbnRhaW5lci5sZW5ndGggPT09IHN0YXJ0T2Zmc2V0KSB7XG5cdFx0XHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyID0gc2tpcEVtcHR5VGV4dE5vZGVzKHN0YXJ0Q29udGFpbmVyLm5leHRTaWJsaW5nLCB0cnVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGVuZE9mZnNldCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRlbmRDb250YWluZXIgPSBza2lwRW1wdHlUZXh0Tm9kZXMoZW5kQ29udGFpbmVyLnByZXZpb3VzU2libGluZywgZmFsc2UpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyLnBhcmVudE5vZGU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChzdGFydENvbnRhaW5lciAmJiBzdGFydENvbnRhaW5lciA9PT0gZW5kQ29udGFpbmVyKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdGFydENvbnRhaW5lcjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZWxtICYmIGVsbS5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsbTtcblx0XHRcdH1cblxuXHRcdFx0ZWxtID0gcm5nLml0ZW0gPyBybmcuaXRlbSgwKSA6IHJuZy5wYXJlbnRFbGVtZW50KCk7XG5cblx0XHRcdC8vIElFIDcgbWlnaHQgcmV0dXJuIGVsZW1lbnRzIG91dHNpZGUgdGhlIGlmcmFtZVxuXHRcdFx0aWYgKGVsbS5vd25lckRvY3VtZW50ICE9PSBzZWxmLndpbi5kb2N1bWVudCkge1xuXHRcdFx0XHRlbG0gPSByb290O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxtO1xuXHRcdH0sXG5cblx0XHRnZXRTZWxlY3RlZEJsb2NrczogZnVuY3Rpb24oc3RhcnRFbG0sIGVuZEVsbSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBkb20gPSBzZWxmLmRvbSwgbm9kZSwgcm9vdCwgc2VsZWN0ZWRCbG9ja3MgPSBbXTtcblxuXHRcdFx0cm9vdCA9IGRvbS5nZXRSb290KCk7XG5cdFx0XHRzdGFydEVsbSA9IGRvbS5nZXRQYXJlbnQoc3RhcnRFbG0gfHwgc2VsZi5nZXRTdGFydCgpLCBkb20uaXNCbG9jayk7XG5cdFx0XHRlbmRFbG0gPSBkb20uZ2V0UGFyZW50KGVuZEVsbSB8fCBzZWxmLmdldEVuZCgpLCBkb20uaXNCbG9jayk7XG5cblx0XHRcdGlmIChzdGFydEVsbSAmJiBzdGFydEVsbSAhPSByb290KSB7XG5cdFx0XHRcdHNlbGVjdGVkQmxvY2tzLnB1c2goc3RhcnRFbG0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3RhcnRFbG0gJiYgZW5kRWxtICYmIHN0YXJ0RWxtICE9IGVuZEVsbSkge1xuXHRcdFx0XHRub2RlID0gc3RhcnRFbG07XG5cblx0XHRcdFx0dmFyIHdhbGtlciA9IG5ldyBUcmVlV2Fsa2VyKHN0YXJ0RWxtLCByb290KTtcblx0XHRcdFx0d2hpbGUgKChub2RlID0gd2Fsa2VyLm5leHQoKSkgJiYgbm9kZSAhPSBlbmRFbG0pIHtcblx0XHRcdFx0XHRpZiAoZG9tLmlzQmxvY2sobm9kZSkpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkQmxvY2tzLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbmRFbG0gJiYgc3RhcnRFbG0gIT0gZW5kRWxtICYmIGVuZEVsbSAhPSByb290KSB7XG5cdFx0XHRcdHNlbGVjdGVkQmxvY2tzLnB1c2goZW5kRWxtKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGVjdGVkQmxvY2tzO1xuXHRcdH0sXG5cblx0XHRpc0ZvcndhcmQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRvbSA9IHRoaXMuZG9tLCBzZWwgPSB0aGlzLmdldFNlbCgpLCBhbmNob3JSYW5nZSwgZm9jdXNSYW5nZTtcblxuXHRcdFx0Ly8gTm8gc3VwcG9ydCBmb3Igc2VsZWN0aW9uIGRpcmVjdGlvbiB0aGVuIGFsd2F5cyByZXR1cm4gdHJ1ZVxuXHRcdFx0aWYgKCFzZWwgfHwgIXNlbC5hbmNob3JOb2RlIHx8ICFzZWwuZm9jdXNOb2RlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRhbmNob3JSYW5nZSA9IGRvbS5jcmVhdGVSbmcoKTtcblx0XHRcdGFuY2hvclJhbmdlLnNldFN0YXJ0KHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTtcblx0XHRcdGFuY2hvclJhbmdlLmNvbGxhcHNlKHRydWUpO1xuXG5cdFx0XHRmb2N1c1JhbmdlID0gZG9tLmNyZWF0ZVJuZygpO1xuXHRcdFx0Zm9jdXNSYW5nZS5zZXRTdGFydChzZWwuZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZzZXQpO1xuXHRcdFx0Zm9jdXNSYW5nZS5jb2xsYXBzZSh0cnVlKTtcblxuXHRcdFx0cmV0dXJuIGFuY2hvclJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhhbmNob3JSYW5nZS5TVEFSVF9UT19TVEFSVCwgZm9jdXNSYW5nZSkgPD0gMDtcblx0XHR9LFxuXG5cdFx0bm9ybWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcm5nID0gc2VsZi5nZXRSbmcoKTtcblxuXHRcdFx0aWYgKEVudi5yYW5nZSAmJiBuZXcgUmFuZ2VVdGlscyhzZWxmLmRvbSkubm9ybWFsaXplKHJuZykpIHtcblx0XHRcdFx0c2VsZi5zZXRSbmcocm5nLCBzZWxmLmlzRm9yd2FyZCgpKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJuZztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRXhlY3V0ZXMgY2FsbGJhY2sgd2hlbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gc3RhcnRzL3N0b3BzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IuIFRoZSBjdXJyZW50XG5cdFx0ICogc3RhdGUgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGFzIGl0J3MgZmlyc3QgYXJndW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNlbGVjdG9yQ2hhbmdlZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBDU1Mgc2VsZWN0b3IgdG8gY2hlY2sgZm9yLlxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHdpdGggc3RhdGUgYW5kIGFyZ3Mgd2hlbiB0aGUgc2VsZWN0b3IgaXMgbWF0Y2hlcyBvciBub3QuXG5cdFx0ICovXG5cdFx0c2VsZWN0b3JDaGFuZ2VkOiBmdW5jdGlvbihzZWxlY3RvciwgY2FsbGJhY2spIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgY3VycmVudFNlbGVjdG9ycztcblxuXHRcdFx0aWYgKCFzZWxmLnNlbGVjdG9yQ2hhbmdlZERhdGEpIHtcblx0XHRcdFx0c2VsZi5zZWxlY3RvckNoYW5nZWREYXRhID0ge307XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvcnMgPSB7fTtcblxuXHRcdFx0XHRzZWxmLmVkaXRvci5vbignTm9kZUNoYW5nZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHR2YXIgbm9kZSA9IGUuZWxlbWVudCwgZG9tID0gc2VsZi5kb20sIHBhcmVudHMgPSBkb20uZ2V0UGFyZW50cyhub2RlLCBudWxsLCBkb20uZ2V0Um9vdCgpKSwgbWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZm9yIG5ldyBtYXRjaGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRlYWNoKHNlbGYuc2VsZWN0b3JDaGFuZ2VkRGF0YSwgZnVuY3Rpb24oY2FsbGJhY2tzLCBzZWxlY3Rvcikge1xuXHRcdFx0XHRcdFx0ZWFjaChwYXJlbnRzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChkb20uaXMobm9kZSwgc2VsZWN0b3IpKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFjdXJyZW50U2VsZWN0b3JzW3NlbGVjdG9yXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0XHRcdGVhY2goY2FsbGJhY2tzLCBmdW5jdGlvbihjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYWxsYmFjayh0cnVlLCB7bm9kZTogbm9kZSwgc2VsZWN0b3I6IHNlbGVjdG9yLCBwYXJlbnRzOiBwYXJlbnRzfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFNlbGVjdG9yc1tzZWxlY3Rvcl0gPSBjYWxsYmFja3M7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1tzZWxlY3Rvcl0gPSBjYWxsYmFja3M7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGN1cnJlbnQgc2VsZWN0b3JzIHN0aWxsIG1hdGNoXG5cdFx0XHRcdFx0ZWFjaChjdXJyZW50U2VsZWN0b3JzLCBmdW5jdGlvbihjYWxsYmFja3MsIHNlbGVjdG9yKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW1hdGNoZWRTZWxlY3RvcnNbc2VsZWN0b3JdKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBjdXJyZW50U2VsZWN0b3JzW3NlbGVjdG9yXTtcblxuXHRcdFx0XHRcdFx0XHRlYWNoKGNhbGxiYWNrcywgZnVuY3Rpb24oY2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFjayhmYWxzZSwge25vZGU6IG5vZGUsIHNlbGVjdG9yOiBzZWxlY3RvciwgcGFyZW50czogcGFyZW50c30pO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBzZWxlY3RvciBsaXN0ZW5lcnNcblx0XHRcdGlmICghc2VsZi5zZWxlY3RvckNoYW5nZWREYXRhW3NlbGVjdG9yXSkge1xuXHRcdFx0XHRzZWxmLnNlbGVjdG9yQ2hhbmdlZERhdGFbc2VsZWN0b3JdID0gW107XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuc2VsZWN0b3JDaGFuZ2VkRGF0YVtzZWxlY3Rvcl0ucHVzaChjYWxsYmFjayk7XG5cblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH0sXG5cblx0XHRnZXRTY3JvbGxDb250YWluZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNjcm9sbENvbnRhaW5lciwgbm9kZSA9IHRoaXMuZG9tLmdldFJvb3QoKTtcblxuXHRcdFx0d2hpbGUgKG5vZGUgJiYgbm9kZS5ub2RlTmFtZSAhPSAnQk9EWScpIHtcblx0XHRcdFx0aWYgKG5vZGUuc2Nyb2xsSGVpZ2h0ID4gbm9kZS5jbGllbnRIZWlnaHQpIHtcblx0XHRcdFx0XHRzY3JvbGxDb250YWluZXIgPSBub2RlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNjcm9sbENvbnRhaW5lcjtcblx0XHR9LFxuXG5cdFx0c2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uKGVsbSwgYWxpZ25Ub1RvcCkge1xuXHRcdFx0dmFyIHksIHZpZXdQb3J0LCBzZWxmID0gdGhpcywgZG9tID0gc2VsZi5kb20sIHJvb3QgPSBkb20uZ2V0Um9vdCgpLCB2aWV3UG9ydFksIHZpZXdQb3J0SCwgb2Zmc2V0WSA9IDA7XG5cblx0XHRcdGZ1bmN0aW9uIGdldFBvcyhlbG0pIHtcblx0XHRcdFx0dmFyIHggPSAwLCB5ID0gMDtcblxuXHRcdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gZWxtO1xuXHRcdFx0XHR3aGlsZSAob2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSkge1xuXHRcdFx0XHRcdHggKz0gb2Zmc2V0UGFyZW50Lm9mZnNldExlZnQgfHwgMDtcblx0XHRcdFx0XHR5ICs9IG9mZnNldFBhcmVudC5vZmZzZXRUb3AgfHwgMDtcblx0XHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHt4OiB4LCB5OiB5fTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFOb2RlVHlwZS5pc0VsZW1lbnQoZWxtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhbGlnblRvVG9wID09PSBmYWxzZSkge1xuXHRcdFx0XHRvZmZzZXRZID0gZWxtLm9mZnNldEhlaWdodDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvb3Qubm9kZU5hbWUgIT0gJ0JPRFknKSB7XG5cdFx0XHRcdHZhciBzY3JvbGxDb250YWluZXIgPSBzZWxmLmdldFNjcm9sbENvbnRhaW5lcigpO1xuXHRcdFx0XHRpZiAoc2Nyb2xsQ29udGFpbmVyKSB7XG5cdFx0XHRcdFx0eSA9IGdldFBvcyhlbG0pLnkgLSBnZXRQb3Moc2Nyb2xsQ29udGFpbmVyKS55ICsgb2Zmc2V0WTtcblx0XHRcdFx0XHR2aWV3UG9ydEggPSBzY3JvbGxDb250YWluZXIuY2xpZW50SGVpZ2h0O1xuXHRcdFx0XHRcdHZpZXdQb3J0WSA9IHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3A7XG5cdFx0XHRcdFx0aWYgKHkgPCB2aWV3UG9ydFkgfHwgeSArIDI1ID4gdmlld1BvcnRZICsgdmlld1BvcnRIKSB7XG5cdFx0XHRcdFx0XHRzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0geSA8IHZpZXdQb3J0WSA/IHkgOiB5IC0gdmlld1BvcnRIICsgMjU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHZpZXdQb3J0ID0gZG9tLmdldFZpZXdQb3J0KHNlbGYuZWRpdG9yLmdldFdpbigpKTtcblx0XHRcdHkgPSBkb20uZ2V0UG9zKGVsbSkueSArIG9mZnNldFk7XG5cdFx0XHR2aWV3UG9ydFkgPSB2aWV3UG9ydC55O1xuXHRcdFx0dmlld1BvcnRIID0gdmlld1BvcnQuaDtcblx0XHRcdGlmICh5IDwgdmlld1BvcnQueSB8fCB5ICsgMjUgPiB2aWV3UG9ydFkgKyB2aWV3UG9ydEgpIHtcblx0XHRcdFx0c2VsZi5lZGl0b3IuZ2V0V2luKCkuc2Nyb2xsVG8oMCwgeSA8IHZpZXdQb3J0WSA/IHkgOiB5IC0gdmlld1BvcnRIICsgMjUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRwbGFjZUNhcmV0QXQ6IGZ1bmN0aW9uKGNsaWVudFgsIGNsaWVudFkpIHtcblx0XHRcdHRoaXMuc2V0Um5nKFJhbmdlVXRpbHMuZ2V0Q2FyZXRSYW5nZUZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZLCB0aGlzLmVkaXRvci5nZXREb2MoKSkpO1xuXHRcdH0sXG5cblx0XHRfbW92ZUVuZFBvaW50OiBmdW5jdGlvbihybmcsIG5vZGUsIHN0YXJ0KSB7XG5cdFx0XHR2YXIgcm9vdCA9IG5vZGUsIHdhbGtlciA9IG5ldyBUcmVlV2Fsa2VyKG5vZGUsIHJvb3QpO1xuXHRcdFx0dmFyIG5vbkVtcHR5RWxlbWVudHNNYXAgPSB0aGlzLmRvbS5zY2hlbWEuZ2V0Tm9uRW1wdHlFbGVtZW50cygpO1xuXG5cdFx0XHRkbyB7XG5cdFx0XHRcdC8vIFRleHQgbm9kZVxuXHRcdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAzICYmIHRyaW0obm9kZS5ub2RlVmFsdWUpLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRcdGlmIChzdGFydCkge1xuXHRcdFx0XHRcdFx0cm5nLnNldFN0YXJ0KG5vZGUsIDApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRybmcuc2V0RW5kKG5vZGUsIG5vZGUubm9kZVZhbHVlLmxlbmd0aCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQlIvSU1HL0lOUFVUIGVsZW1lbnRzIGJ1dCBub3QgdGFibGUgY2VsbHNcblx0XHRcdFx0aWYgKG5vbkVtcHR5RWxlbWVudHNNYXBbbm9kZS5ub2RlTmFtZV0gJiYgIS9eKFREfFRIKSQvLnRlc3Qobm9kZS5ub2RlTmFtZSkpIHtcblx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEJlZm9yZShub2RlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUgPT0gJ0JSJykge1xuXHRcdFx0XHRcdFx0XHRybmcuc2V0RW5kQmVmb3JlKG5vZGUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cm5nLnNldEVuZEFmdGVyKG5vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvdW5kIGVtcHR5IHRleHQgYmxvY2sgb2xkIElFIGNhbiBwbGFjZSB0aGUgc2VsZWN0aW9uIGluc2lkZSB0aG9zZVxuXHRcdFx0XHRpZiAoRW52LmllICYmIEVudi5pZSA8IDExICYmIHRoaXMuZG9tLmlzQmxvY2sobm9kZSkgJiYgdGhpcy5kb20uaXNFbXB0eShub2RlKSkge1xuXHRcdFx0XHRcdGlmIChzdGFydCkge1xuXHRcdFx0XHRcdFx0cm5nLnNldFN0YXJ0KG5vZGUsIDApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRybmcuc2V0RW5kKG5vZGUsIDApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSB3aGlsZSAoKG5vZGUgPSAoc3RhcnQgPyB3YWxrZXIubmV4dCgpIDogd2Fsa2VyLnByZXYoKSkpKTtcblxuXHRcdFx0Ly8gRmFpbGVkIHRvIGZpbmQgYW55IHRleHQgbm9kZSBvciBvdGhlciBzdWl0YWJsZSBsb2NhdGlvbiB0aGVuIG1vdmUgdG8gdGhlIHJvb3Qgb2YgYm9keVxuXHRcdFx0aWYgKHJvb3Qubm9kZU5hbWUgPT0gJ0JPRFknKSB7XG5cdFx0XHRcdGlmIChzdGFydCkge1xuXHRcdFx0XHRcdHJuZy5zZXRTdGFydChyb290LCAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRybmcuc2V0RW5kKHJvb3QsIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGdldEJvdW5kaW5nQ2xpZW50UmVjdDogIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHJuZyA9IHRoaXMuZ2V0Um5nKCk7XG5cdFx0XHRyZXR1cm4gcm5nLmNvbGxhcHNlZCA/IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKS5nZXRDbGllbnRSZWN0cygpWzBdIDogcm5nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdH0sXG5cblx0XHRkZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMud2luID0gbnVsbDtcblx0XHRcdHRoaXMuY29udHJvbFNlbGVjdGlvbi5kZXN0cm95KCk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBTZWxlY3Rpb247XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2RvbS9FbGVtZW50VXRpbHMuanNcblxuLyoqXG4gKiBFbGVtZW50VXRpbHMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciB2YXJpb3VzIGVsZW1lbnQgc3BlY2lmaWMgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5kb20uRWxlbWVudFV0aWxzXG4gKi9cbmRlZmluZShcInRpbnltY2UvZG9tL0VsZW1lbnRVdGlsc1wiLCBbXG5cdFwidGlueW1jZS9kb20vQm9va21hcmtNYW5hZ2VyXCIsXG5cdFwidGlueW1jZS91dGlsL1Rvb2xzXCJcbl0sIGZ1bmN0aW9uKEJvb2ttYXJrTWFuYWdlciwgVG9vbHMpIHtcblx0dmFyIGVhY2ggPSBUb29scy5lYWNoO1xuXG5cdGZ1bmN0aW9uIEVsZW1lbnRVdGlscyhkb20pIHtcblx0XHQvKipcblx0XHQgKiBDb21wYXJlcyB0d28gbm9kZXMgYW5kIGNoZWNrcyBpZiBpdCdzIGF0dHJpYnV0ZXMgYW5kIHN0eWxlcyBtYXRjaGVzLlxuXHRcdCAqIFRoaXMgZG9lc24ndCBjb21wYXJlIGNsYXNzZXMgYXMgaXRlbXMgc2luY2UgdGhlaXIgb3JkZXIgaXMgc2lnbmlmaWNhbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNvbXBhcmVcblx0XHQgKiBAcGFyYW0ge05vZGV9IG5vZGUxIEZpcnN0IG5vZGUgdG8gY29tcGFyZSB3aXRoLlxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZTIgU2Vjb25kIG5vZGUgdG8gY29tcGFyZSB3aXRoLlxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUvZmFsc2UgaWYgdGhlIG5vZGVzIGFyZSB0aGUgc2FtZSBvciBub3QuXG5cdFx0ICovXG5cdFx0dGhpcy5jb21wYXJlID0gZnVuY3Rpb24obm9kZTEsIG5vZGUyKSB7XG5cdFx0XHQvLyBOb3QgdGhlIHNhbWUgbmFtZVxuXHRcdFx0aWYgKG5vZGUxLm5vZGVOYW1lICE9IG5vZGUyLm5vZGVOYW1lKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIGFsbCB0aGUgbm9kZXMgYXR0cmlidXRlcyBleGNsdWRpbmcgaW50ZXJuYWwgb25lcywgc3R5bGVzIGFuZCBjbGFzc2VzLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBnZXQgYXR0cmlidXRlcyBmcm9tLlxuXHRcdFx0ICogQHJldHVybiB7T2JqZWN0fSBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMuXG5cdFx0XHQgKi9cblx0XHRcdGZ1bmN0aW9uIGdldEF0dHJpYnMobm9kZSkge1xuXHRcdFx0XHR2YXIgYXR0cmlicyA9IHt9O1xuXG5cdFx0XHRcdGVhY2goZG9tLmdldEF0dHJpYnMobm9kZSksIGZ1bmN0aW9uKGF0dHIpIHtcblx0XHRcdFx0XHR2YXIgbmFtZSA9IGF0dHIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGNvbXBhcmUgaW50ZXJuYWwgYXR0cmlidXRlcyBvciBzdHlsZVxuXHRcdFx0XHRcdGlmIChuYW1lLmluZGV4T2YoJ18nKSAhPT0gMCAmJiBuYW1lICE9PSAnc3R5bGUnICYmIG5hbWUuaW5kZXhPZignZGF0YS0nKSAhPT0gMCkge1xuXHRcdFx0XHRcdFx0YXR0cmlic1tuYW1lXSA9IGRvbS5nZXRBdHRyaWIobm9kZSwgbmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gYXR0cmlicztcblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDb21wYXJlcyB0d28gb2JqZWN0cyBjaGVja3MgaWYgaXQncyBrZXkgKyB2YWx1ZSBleGlzdHMgaW4gdGhlIG90aGVyIG9uZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG9iajEgRmlyc3Qgb2JqZWN0IHRvIGNvbXBhcmUuXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gb2JqMiBTZWNvbmQgb2JqZWN0IHRvIGNvbXBhcmUuXG5cdFx0XHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlL2ZhbHNlIGlmIHRoZSBvYmplY3RzIG1hdGNoZXMgb3Igbm90LlxuXHRcdFx0ICovXG5cdFx0XHRmdW5jdGlvbiBjb21wYXJlT2JqZWN0cyhvYmoxLCBvYmoyKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgbmFtZTtcblxuXHRcdFx0XHRmb3IgKG5hbWUgaW4gb2JqMSkge1xuXHRcdFx0XHRcdC8vIE9iajEgaGFzIGl0ZW0gb2JqMiBkb2Vzbid0IGhhdmVcblx0XHRcdFx0XHRpZiAob2JqMS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBvYmoyW25hbWVdO1xuXG5cdFx0XHRcdFx0XHQvLyBPYmoyIGRvZXNuJ3QgaGF2ZSBvYmoxIGl0ZW1cblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE9iajIgaXRlbSBoYXMgYSBkaWZmZXJlbnQgdmFsdWVcblx0XHRcdFx0XHRcdGlmIChvYmoxW25hbWVdICE9IHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gRGVsZXRlIHNpbWlsYXIgdmFsdWVcblx0XHRcdFx0XHRcdGRlbGV0ZSBvYmoyW25hbWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIG9iaiAyIGhhcyBzb21ldGhpbmcgb2JqIDEgZG9lc24ndCBoYXZlXG5cdFx0XHRcdGZvciAobmFtZSBpbiBvYmoyKSB7XG5cdFx0XHRcdFx0Ly8gT2JqMiBoYXMgaXRlbSBvYmoxIGRvZXNuJ3QgaGF2ZVxuXHRcdFx0XHRcdGlmIChvYmoyLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEF0dHJpYnMgYXJlIG5vdCB0aGUgc2FtZVxuXHRcdFx0aWYgKCFjb21wYXJlT2JqZWN0cyhnZXRBdHRyaWJzKG5vZGUxKSwgZ2V0QXR0cmlicyhub2RlMikpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3R5bGVzIGFyZSBub3QgdGhlIHNhbWVcblx0XHRcdGlmICghY29tcGFyZU9iamVjdHMoZG9tLnBhcnNlU3R5bGUoZG9tLmdldEF0dHJpYihub2RlMSwgJ3N0eWxlJykpLCBkb20ucGFyc2VTdHlsZShkb20uZ2V0QXR0cmliKG5vZGUyLCAnc3R5bGUnKSkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICFCb29rbWFya01hbmFnZXIuaXNCb29rbWFya05vZGUobm9kZTEpICYmICFCb29rbWFya01hbmFnZXIuaXNCb29rbWFya05vZGUobm9kZTIpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gRWxlbWVudFV0aWxzO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9mbXQvUHJldmlldy5qc1xuXG4vKipcbiAqIFByZXZpZXcuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBwcmV2aWV3cyBzdHlsZXMgZm9yIGZvcm1hdHMuXG4gKlxuICogRXhhbXBsZTpcbiAqICBQcmV2aWV3LmdldENzc1RleHQoZWRpdG9yLCAnYm9sZCcpO1xuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5mbXQuUHJldmlld1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL2ZtdC9QcmV2aWV3XCIsIFtcblx0XCJ0aW55bWNlL2RvbS9ET01VdGlsc1wiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvaHRtbC9TY2hlbWFcIlxuXSwgZnVuY3Rpb24oRE9NVXRpbHMsIFRvb2xzLCBTY2hlbWEpIHtcblx0dmFyIGVhY2ggPSBUb29scy5lYWNoO1xuXHR2YXIgZG9tID0gRE9NVXRpbHMuRE9NO1xuXG5cdGZ1bmN0aW9uIHBhcnNlZFNlbGVjdG9yVG9IdG1sKGFuY2VzdHJ5LCBlZGl0b3IpIHtcblx0XHR2YXIgZWxtLCBpdGVtLCBmcmFnbWVudDtcblx0XHR2YXIgc2NoZW1hID0gZWRpdG9yICYmIGVkaXRvci5zY2hlbWEgfHwgbmV3IFNjaGVtYSh7fSk7XG5cblx0XHRmdW5jdGlvbiBkZWNvcmF0ZShlbG0sIGl0ZW0pIHtcblx0XHRcdGlmIChpdGVtLmNsYXNzZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGRvbS5hZGRDbGFzcyhlbG0sIGl0ZW0uY2xhc3Nlcy5qb2luKCcgJykpO1xuXHRcdFx0fVxuXHRcdFx0ZG9tLnNldEF0dHJpYnMoZWxtLCBpdGVtLmF0dHJzKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHNJdGVtKSB7XG5cdFx0XHR2YXIgZWxtO1xuXG5cdFx0XHRpdGVtID0gdHlwZW9mIHNJdGVtID09PSAnc3RyaW5nJyA/IHtcblx0XHRcdFx0bmFtZTogc0l0ZW0sXG5cdFx0XHRcdGNsYXNzZXM6IFtdLFxuXHRcdFx0XHRhdHRyczoge31cblx0XHRcdH0gOiBzSXRlbTtcblxuXHRcdFx0ZWxtID0gZG9tLmNyZWF0ZShpdGVtLm5hbWUpO1xuXHRcdFx0ZGVjb3JhdGUoZWxtLCBpdGVtKTtcblx0XHRcdHJldHVybiBlbG07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0UmVxdWlyZWRQYXJlbnQoZWxtLCBjYW5kaWRhdGUpIHtcblx0XHRcdHZhciBuYW1lID0gdHlwZW9mIGVsbSAhPT0gJ3N0cmluZycgPyBlbG0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA6IGVsbTtcblx0XHRcdHZhciBlbG1SdWxlID0gc2NoZW1hLmdldEVsZW1lbnRSdWxlKG5hbWUpO1xuXHRcdFx0dmFyIHBhcmVudHNSZXF1aXJlZCA9IGVsbVJ1bGUucGFyZW50c1JlcXVpcmVkO1xuXG5cdFx0XHRpZiAocGFyZW50c1JlcXVpcmVkICYmIHBhcmVudHNSZXF1aXJlZC5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGNhbmRpZGF0ZSAmJiBUb29scy5pbkFycmF5KHBhcmVudHNSZXF1aXJlZCwgY2FuZGlkYXRlKSAhPT0gLTEgPyBjYW5kaWRhdGUgOiBwYXJlbnRzUmVxdWlyZWRbMF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gd3JhcEluSHRtbChlbG0sIGFuY2VzdHJ5LCBzaWJsaW5ncykge1xuXHRcdFx0dmFyIHBhcmVudCwgcGFyZW50Q2FuZGlkYXRlLCBwYXJlbnRSZXF1aXJlZDtcblx0XHRcdHZhciBhbmNlc3RvciA9IGFuY2VzdHJ5Lmxlbmd0aCAmJiBhbmNlc3RyeVswXTtcblx0XHRcdHZhciBhbmNlc3Rvck5hbWUgPSBhbmNlc3RvciAmJiBhbmNlc3Rvci5uYW1lO1xuXG5cdFx0XHRwYXJlbnRSZXF1aXJlZCA9IGdldFJlcXVpcmVkUGFyZW50KGVsbSwgYW5jZXN0b3JOYW1lKTtcblxuXHRcdFx0aWYgKHBhcmVudFJlcXVpcmVkKSB7XG5cdFx0XHRcdGlmIChhbmNlc3Rvck5hbWUgPT0gcGFyZW50UmVxdWlyZWQpIHtcblx0XHRcdFx0XHRwYXJlbnRDYW5kaWRhdGUgPSBhbmNlc3RyeVswXTtcblx0XHRcdFx0XHRhbmNlc3RyeSA9IGFuY2VzdHJ5LnNsaWNlKDEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcmVudENhbmRpZGF0ZSA9IHBhcmVudFJlcXVpcmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFuY2VzdG9yKSB7XG5cdFx0XHRcdHBhcmVudENhbmRpZGF0ZSA9IGFuY2VzdHJ5WzBdO1xuXHRcdFx0XHRhbmNlc3RyeSA9IGFuY2VzdHJ5LnNsaWNlKDEpO1xuXHRcdFx0fSBlbHNlIGlmICghc2libGluZ3MpIHtcblx0XHRcdFx0cmV0dXJuIGVsbTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudENhbmRpZGF0ZSkge1xuXHRcdFx0XHRwYXJlbnQgPSBjcmVhdGVFbGVtZW50KHBhcmVudENhbmRpZGF0ZSk7XG5cdFx0XHRcdHBhcmVudC5hcHBlbmRDaGlsZChlbG0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2libGluZ3MpIHtcblx0XHRcdFx0aWYgKCFwYXJlbnQpIHtcblx0XHRcdFx0XHQvLyBpZiBubyBtb3JlIGFuY2VzdHJ5LCB3cmFwIGluIGdlbmVyaWMgZGl2XG5cdFx0XHRcdFx0cGFyZW50ID0gZG9tLmNyZWF0ZSgnZGl2Jyk7XG5cdFx0XHRcdFx0cGFyZW50LmFwcGVuZENoaWxkKGVsbSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRUb29scy5lYWNoKHNpYmxpbmdzLCBmdW5jdGlvbihzaWJsaW5nKSB7XG5cdFx0XHRcdFx0dmFyIHNpYmxpbmdFbG0gPSBjcmVhdGVFbGVtZW50KHNpYmxpbmcpO1xuXHRcdFx0XHRcdHBhcmVudC5pbnNlcnRCZWZvcmUoc2libGluZ0VsbSwgZWxtKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB3cmFwSW5IdG1sKHBhcmVudCwgYW5jZXN0cnksIHBhcmVudENhbmRpZGF0ZSAmJiBwYXJlbnRDYW5kaWRhdGUuc2libGluZ3MpO1xuXHRcdH1cblxuXHRcdGlmIChhbmNlc3RyeSAmJiBhbmNlc3RyeS5sZW5ndGgpIHtcblx0XHRcdGl0ZW0gPSBhbmNlc3RyeVswXTtcblx0XHRcdGVsbSA9IGNyZWF0ZUVsZW1lbnQoaXRlbSk7XG5cdFx0XHRmcmFnbWVudCA9IGRvbS5jcmVhdGUoJ2RpdicpO1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hpbGQod3JhcEluSHRtbChlbG0sIGFuY2VzdHJ5LnNsaWNlKDEpLCBpdGVtLnNpYmxpbmdzKSk7XG5cdFx0XHRyZXR1cm4gZnJhZ21lbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdH1cblxuXG5cdGZ1bmN0aW9uIHNlbGVjdG9yVG9IdG1sKHNlbGVjdG9yLCBlZGl0b3IpIHtcblx0XHRyZXR1cm4gcGFyc2VkU2VsZWN0b3JUb0h0bWwocGFyc2VTZWxlY3RvcihzZWxlY3RvciksIGVkaXRvcik7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIHBhcnNlU2VsZWN0b3JJdGVtKGl0ZW0pIHtcblx0XHR2YXIgdGFnTmFtZTtcblx0XHR2YXIgb2JqID0ge1xuXHRcdFx0Y2xhc3NlczogW10sXG5cdFx0XHRhdHRyczoge31cblx0XHR9O1xuXG5cdFx0aXRlbSA9IG9iai5zZWxlY3RvciA9IFRvb2xzLnRyaW0oaXRlbSk7XG5cblx0XHRpZiAoaXRlbSAhPT0gJyonKSB7XG5cdFx0XHQvLyBtYXRjaGluZyBJRHMsIENMQVNTZXMsIEFUVFJJQlVURVMgYW5kIFBTRVVET3Ncblx0XHRcdHRhZ05hbWUgPSBpdGVtLnJlcGxhY2UoLyg/OihbI1xcLl18Ojo/KShbXFx3XFwtXSspfChcXFspKFteXFxdXSspXFxdPykvZywgZnVuY3Rpb24oJDAsICQxLCAkMiwgJDMsICQ0KSB7XG5cdFx0XHRcdHN3aXRjaCAoJDEpIHtcblx0XHRcdFx0XHRjYXNlICcjJzpcblx0XHRcdFx0XHRcdG9iai5hdHRycy5pZCA9ICQyO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICcuJzpcblx0XHRcdFx0XHRcdG9iai5jbGFzc2VzLnB1c2goJDIpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICc6Jzpcblx0XHRcdFx0XHRcdGlmIChUb29scy5pbkFycmF5KCdjaGVja2VkIGRpc2FibGVkIGVuYWJsZWQgcmVhZC1vbmx5IHJlcXVpcmVkJy5zcGxpdCgnICcpLCAkMikgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdG9iai5hdHRyc1skMl0gPSAkMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gYXRyaWJ1dGUgbWF0Y2hlZFxuXHRcdFx0XHRpZiAoJDMgPT0gJ1snKSB7XG5cdFx0XHRcdFx0dmFyIG0gPSAkNC5tYXRjaCgvKFtcXHdcXC1dKykoPzpcXD1cXFwiKFteXFxcIl0rKSk/Lyk7XG5cdFx0XHRcdFx0aWYgKG0pIHtcblx0XHRcdFx0XHRcdG9iai5hdHRyc1ttWzFdXSA9IG1bMl07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0b2JqLm5hbWUgPSB0YWdOYW1lIHx8ICdkaXYnO1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIHBhcnNlU2VsZWN0b3Ioc2VsZWN0b3IpIHtcblx0XHRpZiAoIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHQvLyB0YWtlIGludG8gYWNjb3VudCBvbmx5IGZpcnN0IG9uZVxuXHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3BsaXQoL1xccyosXFxzKi8pWzBdO1xuXG5cdFx0Ly8gdGlnaHRlblxuXHRcdHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSgvXFxzKih+XFwrfH58XFwrfD4pXFxzKi9nLCAnJDEnKTtcblxuXHRcdC8vIHNwbGl0IGVpdGhlciBvbiA+IG9yIG9uIHNwYWNlLCBidXQgbm90IHRoZSBvbmUgaW5zaWRlIGJyYWNrZXRzXG5cdFx0cmV0dXJuIFRvb2xzLm1hcChzZWxlY3Rvci5zcGxpdCgvKD86PnxcXHMrKD8hW15cXFtcXF1dK1xcXSkpLyksIGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdC8vIHByb2Nlc3MgZWFjaCBzaWJsaW5nIHNlbGVjdG9yIHNlcGFyYXRlbHlcblx0XHRcdHZhciBzaWJsaW5ncyA9IFRvb2xzLm1hcChpdGVtLnNwbGl0KC8oPzp+XFwrfH58XFwrKS8pLCBwYXJzZVNlbGVjdG9ySXRlbSk7XG5cdFx0XHR2YXIgb2JqID0gc2libGluZ3MucG9wKCk7IC8vIHRoZSBsYXN0IG9uZSBpcyBvdXIgcmVhbCB0YXJnZXRcblxuXHRcdFx0aWYgKHNpYmxpbmdzLmxlbmd0aCkge1xuXHRcdFx0XHRvYmouc2libGluZ3MgPSBzaWJsaW5ncztcblx0XHRcdH1cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fSkucmV2ZXJzZSgpO1xuXHR9XG5cblxuXHRmdW5jdGlvbiBnZXRDc3NUZXh0KGVkaXRvciwgZm9ybWF0KSB7XG5cdFx0dmFyIG5hbWUsIHByZXZpZXdGcmFnLCBwcmV2aWV3RWxtLCBpdGVtcztcblx0XHR2YXIgcHJldmlld0NzcyA9ICcnLCBwYXJlbnRGb250U2l6ZSwgcHJldmlld1N0eWxlcztcblxuXHRcdHByZXZpZXdTdHlsZXMgPSBlZGl0b3Iuc2V0dGluZ3MucHJldmlld19zdHlsZXM7XG5cblx0XHQvLyBObyBwcmV2aWV3IGZvcmNlZFxuXHRcdGlmIChwcmV2aWV3U3R5bGVzID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdC8vIERlZmF1bHQgcHJldmlld1xuXHRcdGlmICh0eXBlb2YgcHJldmlld1N0eWxlcyAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHByZXZpZXdTdHlsZXMgPSAnZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtd2VpZ2h0IGZvbnQtc3R5bGUgdGV4dC1kZWNvcmF0aW9uICcgK1xuXHRcdFx0XHQndGV4dC10cmFuc2Zvcm0gY29sb3IgYmFja2dyb3VuZC1jb2xvciBib3JkZXIgYm9yZGVyLXJhZGl1cyBvdXRsaW5lIHRleHQtc2hhZG93Jztcblx0XHR9XG5cblx0XHQvLyBSZW1vdmVzIGFueSB2YXJpYWJsZXMgc2luY2UgdGhlc2UgY2FuJ3QgYmUgcHJldmlld2VkXG5cdFx0ZnVuY3Rpb24gcmVtb3ZlVmFycyh2YWwpIHtcblx0XHRcdHJldHVybiB2YWwucmVwbGFjZSgvJShcXHcrKS9nLCAnJyk7XG5cdFx0fVxuXG5cdFx0Ly8gQ3JlYXRlIGJsb2NrL2lubGluZSBlbGVtZW50IHRvIHVzZSBmb3IgcHJldmlld1xuXHRcdGlmICh0eXBlb2YgZm9ybWF0ID09IFwic3RyaW5nXCIpIHtcblx0XHRcdGZvcm1hdCA9IGVkaXRvci5mb3JtYXR0ZXIuZ2V0KGZvcm1hdCk7XG5cdFx0XHRpZiAoIWZvcm1hdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGZvcm1hdCA9IGZvcm1hdFswXTtcblx0XHR9XG5cblx0XHQvLyBGb3JtYXQgc3BlY2lmaWMgcHJldmlldyBvdmVycmlkZVxuXHRcdC8vIFRPRE86IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGZ1cnRoZXIgcmVkdWNlZCBieSB0aGUgcHJldmlld1N0eWxlcyBvcHRpb25cblx0XHRpZiAoJ3ByZXZpZXcnIGluIGZvcm1hdCkge1xuXHRcdFx0cHJldmlld1N0eWxlcyA9IGZvcm1hdC5wcmV2aWV3O1xuXHRcdFx0aWYgKHByZXZpZXdTdHlsZXMgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRuYW1lID0gZm9ybWF0LmJsb2NrIHx8IGZvcm1hdC5pbmxpbmUgfHwgJ3NwYW4nO1xuXG5cdFx0aXRlbXMgPSBwYXJzZVNlbGVjdG9yKGZvcm1hdC5zZWxlY3Rvcik7XG5cdFx0aWYgKGl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0aWYgKCFpdGVtc1swXS5uYW1lKSB7IC8vIGUuZy4gc29tZXRoaW5nIGxpa2UgdWwgPiAuc29tZUNsYXNzIHdhcyBwcm92aWRlZFxuXHRcdFx0XHRpdGVtc1swXS5uYW1lID0gbmFtZTtcblx0XHRcdH1cblx0XHRcdG5hbWUgPSBmb3JtYXQuc2VsZWN0b3I7XG5cdFx0XHRwcmV2aWV3RnJhZyA9IHBhcnNlZFNlbGVjdG9yVG9IdG1sKGl0ZW1zLCBlZGl0b3IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcmV2aWV3RnJhZyA9IHBhcnNlZFNlbGVjdG9yVG9IdG1sKFtuYW1lXSwgZWRpdG9yKTtcblx0XHR9XG5cblx0XHRwcmV2aWV3RWxtID0gZG9tLnNlbGVjdChuYW1lLCBwcmV2aWV3RnJhZylbMF0gfHwgcHJldmlld0ZyYWcuZmlyc3RDaGlsZDtcblxuXHRcdC8vIEFkZCBmb3JtYXQgc3R5bGVzIHRvIHByZXZpZXcgZWxlbWVudFxuXHRcdGVhY2goZm9ybWF0LnN0eWxlcywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcblx0XHRcdHZhbHVlID0gcmVtb3ZlVmFycyh2YWx1ZSk7XG5cblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRkb20uc2V0U3R5bGUocHJldmlld0VsbSwgbmFtZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gQWRkIGF0dHJpYnV0ZXMgdG8gcHJldmlldyBlbGVtZW50XG5cdFx0ZWFjaChmb3JtYXQuYXR0cmlidXRlcywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcblx0XHRcdHZhbHVlID0gcmVtb3ZlVmFycyh2YWx1ZSk7XG5cblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRkb20uc2V0QXR0cmliKHByZXZpZXdFbG0sIG5hbWUsIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEFkZCBjbGFzc2VzIHRvIHByZXZpZXcgZWxlbWVudFxuXHRcdGVhY2goZm9ybWF0LmNsYXNzZXMsIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YWx1ZSA9IHJlbW92ZVZhcnModmFsdWUpO1xuXG5cdFx0XHRpZiAoIWRvbS5oYXNDbGFzcyhwcmV2aWV3RWxtLCB2YWx1ZSkpIHtcblx0XHRcdFx0ZG9tLmFkZENsYXNzKHByZXZpZXdFbG0sIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGVkaXRvci5maXJlKCdQcmV2aWV3Rm9ybWF0cycpO1xuXG5cdFx0Ly8gQWRkIHRoZSBwcmV2aWV3RWxtIG91dHNpZGUgdGhlIHZpc3VhbCBhcmVhXG5cdFx0ZG9tLnNldFN0eWxlcyhwcmV2aWV3RnJhZywge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAtMHhGRkZGfSk7XG5cdFx0ZWRpdG9yLmdldEJvZHkoKS5hcHBlbmRDaGlsZChwcmV2aWV3RnJhZyk7XG5cblx0XHQvLyBHZXQgcGFyZW50IGNvbnRhaW5lciBmb250IHNpemUgc28gd2UgY2FuIGNvbXB1dGUgcHggdmFsdWVzIG91dCBvZiBlbS8lIGZvciBvbGRlciBJRTpzXG5cdFx0cGFyZW50Rm9udFNpemUgPSBkb20uZ2V0U3R5bGUoZWRpdG9yLmdldEJvZHkoKSwgJ2ZvbnRTaXplJywgdHJ1ZSk7XG5cdFx0cGFyZW50Rm9udFNpemUgPSAvcHgkLy50ZXN0KHBhcmVudEZvbnRTaXplKSA/IHBhcnNlSW50KHBhcmVudEZvbnRTaXplLCAxMCkgOiAwO1xuXG5cdFx0ZWFjaChwcmV2aWV3U3R5bGVzLnNwbGl0KCcgJyksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdHZhciB2YWx1ZSA9IGRvbS5nZXRTdHlsZShwcmV2aWV3RWxtLCBuYW1lLCB0cnVlKTtcblxuXHRcdFx0Ly8gSWYgYmFja2dyb3VuZCBpcyB0cmFuc3BhcmVudCB0aGVuIGNoZWNrIGlmIHRoZSBib2R5IGhhcyBhIGJhY2tncm91bmQgY29sb3Igd2UgY2FuIHVzZVxuXHRcdFx0aWYgKG5hbWUgPT0gJ2JhY2tncm91bmQtY29sb3InICYmIC90cmFuc3BhcmVudHxyZ2JhXFxzKlxcKFteKV0rLFxccyowXFwpLy50ZXN0KHZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IGRvbS5nZXRTdHlsZShlZGl0b3IuZ2V0Qm9keSgpLCBuYW1lLCB0cnVlKTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgd2hpdGUgc2luY2UgaXQncyB0aGUgZGVmYXVsdCBjb2xvciwgbm90IHRoZSBuaWNlc3QgZml4XG5cdFx0XHRcdC8vIFRPRE86IEZpeCB0aGlzIGJ5IGRldGVjdGluZyBydW50aW1lIHN0eWxlXG5cdFx0XHRcdGlmIChkb20udG9IZXgodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT0gJyNmZmZmZmYnKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuYW1lID09ICdjb2xvcicpIHtcblx0XHRcdFx0Ly8gSWdub3JlIGJsYWNrIHNpbmNlIGl0J3MgdGhlIGRlZmF1bHQgY29sb3IsIG5vdCB0aGUgbmljZXN0IGZpeFxuXHRcdFx0XHQvLyBUT0RPOiBGaXggdGhpcyBieSBkZXRlY3RpbmcgcnVudGltZSBzdHlsZVxuXHRcdFx0XHRpZiAoZG9tLnRvSGV4KHZhbHVlKS50b0xvd2VyQ2FzZSgpID09ICcjMDAwMDAwJykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbGQgSUUgd29uJ3QgY2FsY3VsYXRlIHRoZSBmb250IHNpemUgc28gd2UgbmVlZCB0byBkbyB0aGF0IG1hbnVhbGx5XG5cdFx0XHRpZiAobmFtZSA9PSAnZm9udC1zaXplJykge1xuXHRcdFx0XHRpZiAoL2VtfCUkLy50ZXN0KHZhbHVlKSkge1xuXHRcdFx0XHRcdGlmIChwYXJlbnRGb250U2l6ZSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENvbnZlcnQgZm9udCBzaXplIGZyb20gZW0vJSB0byBweFxuXHRcdFx0XHRcdHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSwgMTApIC8gKC8lJC8udGVzdCh2YWx1ZSkgPyAxMDAgOiAxKTtcblx0XHRcdFx0XHR2YWx1ZSA9ICh2YWx1ZSAqIHBhcmVudEZvbnRTaXplKSArICdweCc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG5hbWUgPT0gXCJib3JkZXJcIiAmJiB2YWx1ZSkge1xuXHRcdFx0XHRwcmV2aWV3Q3NzICs9ICdwYWRkaW5nOjAgMnB4Oyc7XG5cdFx0XHR9XG5cblx0XHRcdHByZXZpZXdDc3MgKz0gbmFtZSArICc6JyArIHZhbHVlICsgJzsnO1xuXHRcdH0pO1xuXG5cdFx0ZWRpdG9yLmZpcmUoJ0FmdGVyUHJldmlld0Zvcm1hdHMnKTtcblxuXHRcdC8vcHJldmlld0NzcyArPSAnbGluZS1oZWlnaHQ6bm9ybWFsJztcblxuXHRcdGRvbS5yZW1vdmUocHJldmlld0ZyYWcpO1xuXG5cdFx0cmV0dXJuIHByZXZpZXdDc3M7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGdldENzc1RleHQ6IGdldENzc1RleHQsXG5cdFx0cGFyc2VTZWxlY3RvcjogcGFyc2VTZWxlY3Rvcixcblx0XHRzZWxlY3RvclRvSHRtbDogc2VsZWN0b3JUb0h0bWxcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZm10L0hvb2tzLmpzXG5cbi8qKlxuICogSG9va3MuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyBmb3Igb3ZlcnJpZGluZyBmb3JtYXR0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5mbXQuSG9va3NcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9mbXQvSG9va3NcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL2RvbS9Ob2RlVHlwZVwiLFxuXHRcInRpbnltY2UvZG9tL0RvbVF1ZXJ5XCJcbl0sIGZ1bmN0aW9uKEFyciwgTm9kZVR5cGUsICQpIHtcblx0dmFyIHBvc3RQcm9jZXNzSG9va3MgPSB7fSwgZmlsdGVyID0gQXJyLmZpbHRlciwgZWFjaCA9IEFyci5lYWNoO1xuXG5cdGZ1bmN0aW9uIGFkZFBvc3RQcm9jZXNzSG9vayhuYW1lLCBob29rKSB7XG5cdFx0dmFyIGhvb2tzID0gcG9zdFByb2Nlc3NIb29rc1tuYW1lXTtcblxuXHRcdGlmICghaG9va3MpIHtcblx0XHRcdHBvc3RQcm9jZXNzSG9va3NbbmFtZV0gPSBob29rcyA9IFtdO1xuXHRcdH1cblxuXHRcdHBvc3RQcm9jZXNzSG9va3NbbmFtZV0ucHVzaChob29rKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHBvc3RQcm9jZXNzKG5hbWUsIGVkaXRvcikge1xuXHRcdGVhY2gocG9zdFByb2Nlc3NIb29rc1tuYW1lXSwgZnVuY3Rpb24oaG9vaykge1xuXHRcdFx0aG9vayhlZGl0b3IpO1xuXHRcdH0pO1xuXHR9XG5cblx0YWRkUG9zdFByb2Nlc3NIb29rKFwicHJlXCIsIGZ1bmN0aW9uKGVkaXRvcikge1xuXHRcdHZhciBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpLCBpc1ByZSwgYmxvY2tzO1xuXG5cdFx0ZnVuY3Rpb24gaGFzUHJlU2libGluZyhwcmUpIHtcblx0XHRcdHJldHVybiBpc1ByZShwcmUucHJldmlvdXNTaWJsaW5nKSAmJiBBcnIuaW5kZXhPZihibG9ja3MsIHByZS5wcmV2aW91c1NpYmxpbmcpICE9IC0xO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGpvaW5QcmUocHJlMSwgcHJlMikge1xuXHRcdFx0JChwcmUyKS5yZW1vdmUoKTtcblx0XHRcdCQocHJlMSkuYXBwZW5kKCc8YnI+PGJyPicpLmFwcGVuZChwcmUyLmNoaWxkTm9kZXMpO1xuXHRcdH1cblxuXHRcdGlzUHJlID0gTm9kZVR5cGUubWF0Y2hOb2RlTmFtZXMoJ3ByZScpO1xuXG5cdFx0aWYgKCFybmcuY29sbGFwc2VkKSB7XG5cdFx0XHRibG9ja3MgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbGVjdGVkQmxvY2tzKCk7XG5cblx0XHRcdGVhY2goZmlsdGVyKGZpbHRlcihibG9ja3MsIGlzUHJlKSwgaGFzUHJlU2libGluZyksIGZ1bmN0aW9uKHByZSkge1xuXHRcdFx0XHRqb2luUHJlKHByZS5wcmV2aW91c1NpYmxpbmcsIHByZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB7XG5cdFx0cG9zdFByb2Nlc3M6IHBvc3RQcm9jZXNzXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL0Zvcm1hdHRlci5qc1xuXG4vKipcbiAqIEZvcm1hdHRlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRleHQgZm9ybWF0dGVyIGVuZ2luZSBjbGFzcy4gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGFwcGx5IGZvcm1hdHMgbGlrZSBib2xkLCBpdGFsaWMsIGZvbnQgc2l6ZVxuICogZXRjIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBvciBzcGVjaWZpYyBub2Rlcy4gVGhpcyBlbmdpbmUgd2FzIGJ1aWx0IHRvIHJlcGxhY2UgdGhlIGJyb3dzZXInc1xuICogZGVmYXVsdCBmb3JtYXR0aW5nIGxvZ2ljIGZvciBleGVjQ29tbWFuZCBkdWUgdG8gaXRzIGluY29uc2lzdGVudCBhbmQgYnVnZ3kgYmVoYXZpb3IuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuRm9ybWF0dGVyXG4gKiBAZXhhbXBsZVxuICogIHRpbnltY2UuYWN0aXZlRWRpdG9yLmZvcm1hdHRlci5yZWdpc3RlcignbXljdXN0b21mb3JtYXQnLCB7XG4gKiAgICBpbmxpbmU6ICdzcGFuJyxcbiAqICAgIHN0eWxlczoge2NvbG9yOiAnI2ZmMDAwMCd9XG4gKiAgfSk7XG4gKlxuICogIHRpbnltY2UuYWN0aXZlRWRpdG9yLmZvcm1hdHRlci5hcHBseSgnbXljdXN0b21mb3JtYXQnKTtcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9Gb3JtYXR0ZXJcIiwgW1xuXHRcInRpbnltY2UvZG9tL1RyZWVXYWxrZXJcIixcblx0XCJ0aW55bWNlL2RvbS9SYW5nZVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vQm9va21hcmtNYW5hZ2VyXCIsXG5cdFwidGlueW1jZS9kb20vRWxlbWVudFV0aWxzXCIsXG5cdFwidGlueW1jZS91dGlsL0Z1blwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvZm10L1ByZXZpZXdcIixcblx0XCJ0aW55bWNlL2ZtdC9Ib29rc1wiXG5dLCBmdW5jdGlvbihUcmVlV2Fsa2VyLCBSYW5nZVV0aWxzLCBCb29rbWFya01hbmFnZXIsIEVsZW1lbnRVdGlscywgRnVuLCBUb29scywgUHJldmlldywgSG9va3MpIHtcblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgYSBuZXcgZm9ybWF0dGVyIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3IgRm9ybWF0dGVyXG5cdCAqIEBwYXJhbSB7dGlueW1jZS5FZGl0b3J9IGVkIEVkaXRvciBpbnN0YW5jZSB0byBjb25zdHJ1Y3QgdGhlIGZvcm1hdHRlciBlbmdpbmUgdG8uXG5cdCAqL1xuXHRyZXR1cm4gZnVuY3Rpb24oZWQpIHtcblx0XHR2YXIgZm9ybWF0cyA9IHt9LFxuXHRcdFx0ZG9tID0gZWQuZG9tLFxuXHRcdFx0c2VsZWN0aW9uID0gZWQuc2VsZWN0aW9uLFxuXHRcdFx0cmFuZ2VVdGlscyA9IG5ldyBSYW5nZVV0aWxzKGRvbSksXG5cdFx0XHRpc1ZhbGlkID0gZWQuc2NoZW1hLmlzVmFsaWRDaGlsZCxcblx0XHRcdGlzQmxvY2sgPSBkb20uaXNCbG9jayxcblx0XHRcdGZvcmNlZFJvb3RCbG9jayA9IGVkLnNldHRpbmdzLmZvcmNlZF9yb290X2Jsb2NrLFxuXHRcdFx0bm9kZUluZGV4ID0gZG9tLm5vZGVJbmRleCxcblx0XHRcdElOVklTSUJMRV9DSEFSID0gJ1xcdUZFRkYnLFxuXHRcdFx0TUNFX0FUVFJfUkUgPSAvXihzcmN8aHJlZnxzdHlsZSkkLyxcblx0XHRcdEZBTFNFID0gZmFsc2UsXG5cdFx0XHRUUlVFID0gdHJ1ZSxcblx0XHRcdGZvcm1hdENoYW5nZURhdGEsXG5cdFx0XHR1bmRlZixcblx0XHRcdGdldENvbnRlbnRFZGl0YWJsZSA9IGRvbS5nZXRDb250ZW50RWRpdGFibGUsXG5cdFx0XHRkaXNhYmxlQ2FyZXRDb250YWluZXIsXG5cdFx0XHRtYXJrQ2FyZXRDb250YWluZXJzQm9ndXMsXG5cdFx0XHRpc0Jvb2ttYXJrTm9kZSA9IEJvb2ttYXJrTWFuYWdlci5pc0Jvb2ttYXJrTm9kZTtcblxuXHRcdHZhciBlYWNoID0gVG9vbHMuZWFjaCxcblx0XHRcdGdyZXAgPSBUb29scy5ncmVwLFxuXHRcdFx0d2FsayA9IFRvb2xzLndhbGssXG5cdFx0XHRleHRlbmQgPSBUb29scy5leHRlbmQ7XG5cblx0XHRmdW5jdGlvbiBpc1RleHRCbG9jayhuYW1lKSB7XG5cdFx0XHRpZiAobmFtZS5ub2RlVHlwZSkge1xuXHRcdFx0XHRuYW1lID0gbmFtZS5ub2RlTmFtZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICEhZWQuc2NoZW1hLmdldFRleHRCbG9ja0VsZW1lbnRzKClbbmFtZS50b0xvd2VyQ2FzZSgpXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc1RhYmxlQ2VsbChub2RlKSB7XG5cdFx0XHRyZXR1cm4gL14oVEh8VEQpJC8udGVzdChub2RlLm5vZGVOYW1lKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc0lubGluZUJsb2NrKG5vZGUpIHtcblx0XHRcdHJldHVybiBub2RlICYmIC9eKElNRykkLy50ZXN0KG5vZGUubm9kZU5hbWUpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFBhcmVudHMobm9kZSwgc2VsZWN0b3IpIHtcblx0XHRcdHJldHVybiBkb20uZ2V0UGFyZW50cyhub2RlLCBzZWxlY3RvciwgZG9tLmdldFJvb3QoKSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNDYXJldE5vZGUobm9kZSkge1xuXHRcdFx0cmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgbm9kZS5pZCA9PT0gJ19tY2VfY2FyZXQnO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRlZmF1bHRGb3JtYXRzKCkge1xuXHRcdFx0cmVnaXN0ZXIoe1xuXHRcdFx0XHR2YWxpZ250b3A6IFtcblx0XHRcdFx0XHR7c2VsZWN0b3I6ICd0ZCx0aCcsIHN0eWxlczogeyd2ZXJ0aWNhbEFsaWduJzogJ3RvcCd9fVxuXHRcdFx0XHRdLFxuXG5cdFx0XHRcdHZhbGlnbm1pZGRsZTogW1xuXHRcdFx0XHRcdHtzZWxlY3RvcjogJ3RkLHRoJywgc3R5bGVzOiB7J3ZlcnRpY2FsQWxpZ24nOiAnbWlkZGxlJ319XG5cdFx0XHRcdF0sXG5cblx0XHRcdFx0dmFsaWduYm90dG9tOiBbXG5cdFx0XHRcdFx0e3NlbGVjdG9yOiAndGQsdGgnLCBzdHlsZXM6IHsndmVydGljYWxBbGlnbic6ICdib3R0b20nfX1cblx0XHRcdFx0XSxcblxuXHRcdFx0XHRhbGlnbmxlZnQ6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRzZWxlY3RvcjogJ2ZpZ3VyZS5pbWFnZScsXG5cdFx0XHRcdFx0XHRjb2xsYXBzZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0Y2xhc3NlczogJ2FsaWduLWxlZnQnLFxuXHRcdFx0XHRcdFx0Y2VGYWxzZU92ZXJyaWRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0cHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yOiAnZmlndXJlLHAsaDEsaDIsaDMsaDQsaDUsaDYsdGQsdGgsdHIsZGl2LHVsLG9sLGxpJyxcblx0XHRcdFx0XHRcdHN0eWxlczoge1xuXHRcdFx0XHRcdFx0XHR0ZXh0QWxpZ246ICdsZWZ0J1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGluaGVyaXQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0cHJldmlldzogZmFsc2UsXG5cdFx0XHRcdFx0XHRkZWZhdWx0QmxvY2s6ICdkaXYnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7c2VsZWN0b3I6ICdpbWcsdGFibGUnLCBjb2xsYXBzZWQ6IGZhbHNlLCBzdHlsZXM6IHsnZmxvYXQnOiAnbGVmdCd9LCBwcmV2aWV3OiAnZm9udC1mYW1pbHkgZm9udC1zaXplJ31cblx0XHRcdFx0XSxcblxuXHRcdFx0XHRhbGlnbmNlbnRlcjogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yOiAnZmlndXJlLHAsaDEsaDIsaDMsaDQsaDUsaDYsdGQsdGgsdHIsZGl2LHVsLG9sLGxpJyxcblx0XHRcdFx0XHRcdHN0eWxlczoge1xuXHRcdFx0XHRcdFx0XHR0ZXh0QWxpZ246ICdjZW50ZXInXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aW5oZXJpdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRwcmV2aWV3OiBmYWxzZSxcblx0XHRcdFx0XHRcdGRlZmF1bHRCbG9jazogJ2Rpdidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yOiAnZmlndXJlLmltYWdlJyxcblx0XHRcdFx0XHRcdGNvbGxhcHNlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiAnYWxpZ24tY2VudGVyJyxcblx0XHRcdFx0XHRcdGNlRmFsc2VPdmVycmlkZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRzZWxlY3RvcjogJ2ltZycsXG5cdFx0XHRcdFx0XHRjb2xsYXBzZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0c3R5bGVzOiB7XG5cdFx0XHRcdFx0XHRcdGRpc3BsYXk6ICdibG9jaycsXG5cdFx0XHRcdFx0XHRcdG1hcmdpbkxlZnQ6ICdhdXRvJyxcblx0XHRcdFx0XHRcdFx0bWFyZ2luUmlnaHQ6ICdhdXRvJ1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHByZXZpZXc6IGZhbHNlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRzZWxlY3RvcjogJ3RhYmxlJyxcblx0XHRcdFx0XHRcdGNvbGxhcHNlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRzdHlsZXM6IHtcblx0XHRcdFx0XHRcdFx0bWFyZ2luTGVmdDogJ2F1dG8nLFxuXHRcdFx0XHRcdFx0XHRtYXJnaW5SaWdodDogJ2F1dG8nXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cblx0XHRcdFx0YWxpZ25yaWdodDogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yOiAnZmlndXJlLmltYWdlJyxcblx0XHRcdFx0XHRcdGNvbGxhcHNlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiAnYWxpZ24tcmlnaHQnLFxuXHRcdFx0XHRcdFx0Y2VGYWxzZU92ZXJyaWRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0cHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yOiAnZmlndXJlLHAsaDEsaDIsaDMsaDQsaDUsaDYsdGQsdGgsdHIsZGl2LHVsLG9sLGxpJyxcblx0XHRcdFx0XHRcdHN0eWxlczoge1xuXHRcdFx0XHRcdFx0XHR0ZXh0QWxpZ246ICdyaWdodCdcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpbmhlcml0OiBmYWxzZSxcblx0XHRcdFx0XHRcdHByZXZpZXc6ICdmb250LWZhbWlseSBmb250LXNpemUnLFxuXHRcdFx0XHRcdFx0ZGVmYXVsdEJsb2NrOiAnZGl2J1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0c2VsZWN0b3I6ICdpbWcsdGFibGUnLFxuXHRcdFx0XHRcdFx0Y29sbGFwc2VkOiBmYWxzZSxcblx0XHRcdFx0XHRcdHN0eWxlczoge1xuXHRcdFx0XHRcdFx0XHQnZmxvYXQnOiAncmlnaHQnXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cblx0XHRcdFx0YWxpZ25qdXN0aWZ5OiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0c2VsZWN0b3I6ICdmaWd1cmUscCxoMSxoMixoMyxoNCxoNSxoNix0ZCx0aCx0cixkaXYsdWwsb2wsbGknLFxuXHRcdFx0XHRcdFx0c3R5bGVzOiB7XG5cdFx0XHRcdFx0XHRcdHRleHRBbGlnbjogJ2p1c3RpZnknXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aW5oZXJpdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRkZWZhdWx0QmxvY2s6ICdkaXYnLFxuXHRcdFx0XHRcdFx0cHJldmlldzogJ2ZvbnQtZmFtaWx5IGZvbnQtc2l6ZSdcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cblx0XHRcdFx0Ym9sZDogW1xuXHRcdFx0XHRcdHtpbmxpbmU6ICdzdHJvbmcnLCByZW1vdmU6ICdhbGwnfSxcblx0XHRcdFx0XHR7aW5saW5lOiAnc3BhbicsIHN0eWxlczoge2ZvbnRXZWlnaHQ6ICdib2xkJ319LFxuXHRcdFx0XHRcdHtpbmxpbmU6ICdiJywgcmVtb3ZlOiAnYWxsJ31cblx0XHRcdFx0XSxcblxuXHRcdFx0XHRpdGFsaWM6IFtcblx0XHRcdFx0XHR7aW5saW5lOiAnZW0nLCByZW1vdmU6ICdhbGwnfSxcblx0XHRcdFx0XHR7aW5saW5lOiAnc3BhbicsIHN0eWxlczoge2ZvbnRTdHlsZTogJ2l0YWxpYyd9fSxcblx0XHRcdFx0XHR7aW5saW5lOiAnaScsIHJlbW92ZTogJ2FsbCd9XG5cdFx0XHRcdF0sXG5cblx0XHRcdFx0dW5kZXJsaW5lOiBbXG5cdFx0XHRcdFx0e2lubGluZTogJ3NwYW4nLCBzdHlsZXM6IHt0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSd9LCBleGFjdDogdHJ1ZX0sXG5cdFx0XHRcdFx0e2lubGluZTogJ3UnLCByZW1vdmU6ICdhbGwnfVxuXHRcdFx0XHRdLFxuXG5cdFx0XHRcdHN0cmlrZXRocm91Z2g6IFtcblx0XHRcdFx0XHR7aW5saW5lOiAnc3BhbicsIHN0eWxlczoge3RleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJ30sIGV4YWN0OiB0cnVlfSxcblx0XHRcdFx0XHR7aW5saW5lOiAnc3RyaWtlJywgcmVtb3ZlOiAnYWxsJ31cblx0XHRcdFx0XSxcblxuXHRcdFx0XHRmb3JlY29sb3I6IHtpbmxpbmU6ICdzcGFuJywgc3R5bGVzOiB7Y29sb3I6ICcldmFsdWUnfSwgbGlua3M6IHRydWUsIHJlbW92ZV9zaW1pbGFyOiB0cnVlfSxcblx0XHRcdFx0aGlsaXRlY29sb3I6IHtpbmxpbmU6ICdzcGFuJywgc3R5bGVzOiB7YmFja2dyb3VuZENvbG9yOiAnJXZhbHVlJ30sIGxpbmtzOiB0cnVlLCByZW1vdmVfc2ltaWxhcjogdHJ1ZX0sXG5cdFx0XHRcdGZvbnRuYW1lOiB7aW5saW5lOiAnc3BhbicsIHN0eWxlczoge2ZvbnRGYW1pbHk6ICcldmFsdWUnfX0sXG5cdFx0XHRcdGZvbnRzaXplOiB7aW5saW5lOiAnc3BhbicsIHN0eWxlczoge2ZvbnRTaXplOiAnJXZhbHVlJ319LFxuXHRcdFx0XHRmb250c2l6ZV9jbGFzczoge2lubGluZTogJ3NwYW4nLCBhdHRyaWJ1dGVzOiB7J2NsYXNzJzogJyV2YWx1ZSd9fSxcblx0XHRcdFx0YmxvY2txdW90ZToge2Jsb2NrOiAnYmxvY2txdW90ZScsIHdyYXBwZXI6IDEsIHJlbW92ZTogJ2FsbCd9LFxuXHRcdFx0XHRzdWJzY3JpcHQ6IHtpbmxpbmU6ICdzdWInfSxcblx0XHRcdFx0c3VwZXJzY3JpcHQ6IHtpbmxpbmU6ICdzdXAnfSxcblx0XHRcdFx0Y29kZToge2lubGluZTogJ2NvZGUnfSxcblxuXHRcdFx0XHRsaW5rOiB7aW5saW5lOiAnYScsIHNlbGVjdG9yOiAnYScsIHJlbW92ZTogJ2FsbCcsIHNwbGl0OiB0cnVlLCBkZWVwOiB0cnVlLFxuXHRcdFx0XHRcdG9ubWF0Y2g6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdG9uZm9ybWF0OiBmdW5jdGlvbihlbG0sIGZtdCwgdmFycykge1xuXHRcdFx0XHRcdFx0ZWFjaCh2YXJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5zZXRBdHRyaWIoZWxtLCBrZXksIHZhbHVlKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHRyZW1vdmVmb3JtYXQ6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRzZWxlY3RvcjogJ2Isc3Ryb25nLGVtLGksZm9udCx1LHN0cmlrZSxzdWIsc3VwLGRmbixjb2RlLHNhbXAsa2JkLHZhcixjaXRlLG1hcmsscSxkZWwsaW5zJyxcblx0XHRcdFx0XHRcdHJlbW92ZTogJ2FsbCcsXG5cdFx0XHRcdFx0XHRzcGxpdDogdHJ1ZSxcblx0XHRcdFx0XHRcdGV4cGFuZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRibG9ja19leHBhbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRkZWVwOiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7c2VsZWN0b3I6ICdzcGFuJywgYXR0cmlidXRlczogWydzdHlsZScsICdjbGFzcyddLCByZW1vdmU6ICdlbXB0eScsIHNwbGl0OiB0cnVlLCBleHBhbmQ6IGZhbHNlLCBkZWVwOiB0cnVlfSxcblx0XHRcdFx0XHR7c2VsZWN0b3I6ICcqJywgYXR0cmlidXRlczogWydzdHlsZScsICdjbGFzcyddLCBzcGxpdDogZmFsc2UsIGV4cGFuZDogZmFsc2UsIGRlZXA6IHRydWV9XG5cdFx0XHRcdF1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBSZWdpc3RlciBkZWZhdWx0IGJsb2NrIGZvcm1hdHNcblx0XHRcdGVhY2goJ3AgaDEgaDIgaDMgaDQgaDUgaDYgZGl2IGFkZHJlc3MgcHJlIGRpdiBkdCBkZCBzYW1wJy5zcGxpdCgvXFxzLyksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0cmVnaXN0ZXIobmFtZSwge2Jsb2NrOiBuYW1lLCByZW1vdmU6ICdhbGwnfSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gUmVnaXN0ZXIgdXNlciBkZWZpbmVkIGZvcm1hdHNcblx0XHRcdHJlZ2lzdGVyKGVkLnNldHRpbmdzLmZvcm1hdHMpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xuXHRcdFx0Ly8gQWRkIHNvbWUgaW5saW5lIHNob3J0Y3V0c1xuXHRcdFx0ZWQuYWRkU2hvcnRjdXQoJ21ldGErYicsICdib2xkX2Rlc2MnLCAnQm9sZCcpO1xuXHRcdFx0ZWQuYWRkU2hvcnRjdXQoJ21ldGEraScsICdpdGFsaWNfZGVzYycsICdJdGFsaWMnKTtcblx0XHRcdGVkLmFkZFNob3J0Y3V0KCdtZXRhK3UnLCAndW5kZXJsaW5lX2Rlc2MnLCAnVW5kZXJsaW5lJyk7XG5cblx0XHRcdC8vIEJsb2NrRm9ybWF0IHNob3J0Y3V0cyBrZXlzXG5cdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8PSA2OyBpKyspIHtcblx0XHRcdFx0ZWQuYWRkU2hvcnRjdXQoJ2FjY2VzcysnICsgaSwgJycsIFsnRm9ybWF0QmxvY2snLCBmYWxzZSwgJ2gnICsgaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRlZC5hZGRTaG9ydGN1dCgnYWNjZXNzKzcnLCAnJywgWydGb3JtYXRCbG9jaycsIGZhbHNlLCAncCddKTtcblx0XHRcdGVkLmFkZFNob3J0Y3V0KCdhY2Nlc3MrOCcsICcnLCBbJ0Zvcm1hdEJsb2NrJywgZmFsc2UsICdkaXYnXSk7XG5cdFx0XHRlZC5hZGRTaG9ydGN1dCgnYWNjZXNzKzknLCAnJywgWydGb3JtYXRCbG9jaycsIGZhbHNlLCAnYWRkcmVzcyddKTtcblx0XHR9XG5cblx0XHQvLyBQdWJsaWMgZnVuY3Rpb25zXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBmb3JtYXQgYnkgbmFtZSBvciBhbGwgZm9ybWF0cyBpZiBubyBuYW1lIGlzIHNwZWNpZmllZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0XG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgT3B0aW9uYWwgbmFtZSB0byByZXRyaWV2ZSBieS5cblx0XHQgKiBAcmV0dXJuIHtBcnJheS9PYmplY3R9IEFycmF5L09iamVjdCB3aXRoIGFsbCByZWdpc3RlcmVkIGZvcm1hdHMgb3IgYSBzcGVjaWZpYyBmb3JtYXQuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZ2V0KG5hbWUpIHtcblx0XHRcdHJldHVybiBuYW1lID8gZm9ybWF0c1tuYW1lXSA6IGZvcm1hdHM7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmVnaXN0ZXJzIGEgc3BlY2lmaWMgZm9ybWF0IGJ5IG5hbWUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlZ2lzdGVyXG5cdFx0ICogQHBhcmFtIHtPYmplY3QvU3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGZvcm1hdCBmb3IgZXhhbXBsZSBcImJvbGRcIi5cblx0XHQgKiBAcGFyYW0ge09iamVjdC9BcnJheX0gZm9ybWF0IE9wdGlvbmFsIGZvcm1hdCBvYmplY3Qgb3IgYXJyYXkgb2YgZm9ybWF0IHZhcmlhbnRzXG5cdFx0ICogY2FuIG9ubHkgYmUgb21pdHRlZCBpZiB0aGUgZmlyc3QgYXJnIGlzIGFuIG9iamVjdC5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiByZWdpc3RlcihuYW1lLCBmb3JtYXQpIHtcblx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRlYWNoKG5hbWUsIGZ1bmN0aW9uKGZvcm1hdCwgbmFtZSkge1xuXHRcdFx0XHRcdFx0cmVnaXN0ZXIobmFtZSwgZm9ybWF0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBGb3JjZSBmb3JtYXQgaW50byBhcnJheSBhbmQgYWRkIGl0IHRvIGludGVybmFsIGNvbGxlY3Rpb25cblx0XHRcdFx0XHRmb3JtYXQgPSBmb3JtYXQubGVuZ3RoID8gZm9ybWF0IDogW2Zvcm1hdF07XG5cblx0XHRcdFx0XHRlYWNoKGZvcm1hdCwgZnVuY3Rpb24oZm9ybWF0KSB7XG5cdFx0XHRcdFx0XHQvLyBTZXQgZGVlcCB0byBmYWxzZSBieSBkZWZhdWx0IG9uIHNlbGVjdG9yIGZvcm1hdHMgdGhpcyB0byBhdm9pZCByZW1vdmluZ1xuXHRcdFx0XHRcdFx0Ly8gYWxpZ25tZW50IG9uIGltYWdlcyBpbnNpZGUgcGFyYWdyYXBocyB3aGVuIGFsaWdubWVudCBpcyBjaGFuZ2VkIG9uIHBhcmFncmFwaHNcblx0XHRcdFx0XHRcdGlmIChmb3JtYXQuZGVlcCA9PT0gdW5kZWYpIHtcblx0XHRcdFx0XHRcdFx0Zm9ybWF0LmRlZXAgPSAhZm9ybWF0LnNlbGVjdG9yO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHRvIHRydWVcblx0XHRcdFx0XHRcdGlmIChmb3JtYXQuc3BsaXQgPT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0XHRcdGZvcm1hdC5zcGxpdCA9ICFmb3JtYXQuc2VsZWN0b3IgfHwgZm9ybWF0LmlubGluZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCB0byB0cnVlXG5cdFx0XHRcdFx0XHRpZiAoZm9ybWF0LnJlbW92ZSA9PT0gdW5kZWYgJiYgZm9ybWF0LnNlbGVjdG9yICYmICFmb3JtYXQuaW5saW5lKSB7XG5cdFx0XHRcdFx0XHRcdGZvcm1hdC5yZW1vdmUgPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE1hcmsgZm9ybWF0IGFzIGEgbWl4ZWQgZm9ybWF0IGlubGluZSArIGJsb2NrIGxldmVsXG5cdFx0XHRcdFx0XHRpZiAoZm9ybWF0LnNlbGVjdG9yICYmIGZvcm1hdC5pbmxpbmUpIHtcblx0XHRcdFx0XHRcdFx0Zm9ybWF0Lm1peGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Zm9ybWF0LmJsb2NrX2V4cGFuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIFNwbGl0IGNsYXNzZXMgaWYgbmVlZGVkXG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdC5jbGFzc2VzID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRmb3JtYXQuY2xhc3NlcyA9IGZvcm1hdC5jbGFzc2VzLnNwbGl0KC9cXHMrLyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRmb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogVW5yZWdpc3RlciBhIHNwZWNpZmljIGZvcm1hdCBieSBuYW1lLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB1bnJlZ2lzdGVyXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZm9ybWF0IGZvciBleGFtcGxlIFwiYm9sZFwiLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHVucmVnaXN0ZXIobmFtZSkge1xuXHRcdFx0aWYgKG5hbWUgJiYgZm9ybWF0c1tuYW1lXSkge1xuXHRcdFx0XHRkZWxldGUgZm9ybWF0c1tuYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZvcm1hdHM7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbWF0Y2hlc1VuSW5oZXJpdGVkRm9ybWF0U2VsZWN0b3Iobm9kZSwgbmFtZSkge1xuXHRcdFx0dmFyIGZvcm1hdExpc3QgPSBnZXQobmFtZSk7XG5cblx0XHRcdGlmIChmb3JtYXRMaXN0KSB7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0TGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmIChmb3JtYXRMaXN0W2ldLmluaGVyaXQgPT09IGZhbHNlICYmIGRvbS5pcyhub2RlLCBmb3JtYXRMaXN0W2ldLnNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRUZXh0RGVjb3JhdGlvbihub2RlKSB7XG5cdFx0XHR2YXIgZGVjb3JhdGlvbjtcblxuXHRcdFx0ZWQuZG9tLmdldFBhcmVudChub2RlLCBmdW5jdGlvbihuKSB7XG5cdFx0XHRcdGRlY29yYXRpb24gPSBlZC5kb20uZ2V0U3R5bGUobiwgJ3RleHQtZGVjb3JhdGlvbicpO1xuXHRcdFx0XHRyZXR1cm4gZGVjb3JhdGlvbiAmJiBkZWNvcmF0aW9uICE9PSAnbm9uZSc7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGRlY29yYXRpb247XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcHJvY2Vzc1VuZGVybGluZUFuZENvbG9yKG5vZGUpIHtcblx0XHRcdHZhciB0ZXh0RGVjb3JhdGlvbjtcblx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09PSAxICYmIG5vZGUucGFyZW50Tm9kZSAmJiBub2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IDEpIHtcblx0XHRcdFx0dGV4dERlY29yYXRpb24gPSBnZXRUZXh0RGVjb3JhdGlvbihub2RlLnBhcmVudE5vZGUpO1xuXHRcdFx0XHRpZiAoZWQuZG9tLmdldFN0eWxlKG5vZGUsICdjb2xvcicpICYmIHRleHREZWNvcmF0aW9uKSB7XG5cdFx0XHRcdFx0ZWQuZG9tLnNldFN0eWxlKG5vZGUsICd0ZXh0LWRlY29yYXRpb24nLCB0ZXh0RGVjb3JhdGlvbik7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWQuZG9tLmdldFN0eWxlKG5vZGUsICd0ZXh0LWRlY29yYXRpb24nKSA9PT0gdGV4dERlY29yYXRpb24pIHtcblx0XHRcdFx0XHRlZC5kb20uc2V0U3R5bGUobm9kZSwgJ3RleHQtZGVjb3JhdGlvbicsIG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQXBwbGllcyB0aGUgc3BlY2lmaWVkIGZvcm1hdCB0byB0aGUgY3VycmVudCBzZWxlY3Rpb24gb3Igc3BlY2lmaWVkIG5vZGUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFwcGx5XG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiBmb3JtYXQgdG8gYXBwbHkuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHZhcnMgT3B0aW9uYWwgbGlzdCBvZiB2YXJpYWJsZXMgdG8gcmVwbGFjZSB3aXRoaW4gZm9ybWF0IGJlZm9yZSBhcHBseWluZyBpdC5cblx0XHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgT3B0aW9uYWwgbm9kZSB0byBhcHBseSB0aGUgZm9ybWF0IHRvIGRlZmF1bHRzIHRvIGN1cnJlbnQgc2VsZWN0aW9uLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGFwcGx5KG5hbWUsIHZhcnMsIG5vZGUpIHtcblx0XHRcdHZhciBmb3JtYXRMaXN0ID0gZ2V0KG5hbWUpLCBmb3JtYXQgPSBmb3JtYXRMaXN0WzBdLCBib29rbWFyaywgcm5nLCBpc0NvbGxhcHNlZCA9ICFub2RlICYmIHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpO1xuXG5cdFx0XHRmdW5jdGlvbiBzZXRFbGVtZW50Rm9ybWF0KGVsbSwgZm10KSB7XG5cdFx0XHRcdGZtdCA9IGZtdCB8fCBmb3JtYXQ7XG5cblx0XHRcdFx0aWYgKGVsbSkge1xuXHRcdFx0XHRcdGlmIChmbXQub25mb3JtYXQpIHtcblx0XHRcdFx0XHRcdGZtdC5vbmZvcm1hdChlbG0sIGZtdCwgdmFycywgbm9kZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWFjaChmbXQuc3R5bGVzLCBmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuXHRcdFx0XHRcdFx0ZG9tLnNldFN0eWxlKGVsbSwgbmFtZSwgcmVwbGFjZVZhcnModmFsdWUsIHZhcnMpKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIE5lZWRlZCBmb3IgdGhlIFdlYktpdCBzcGFuIHNwYW0gYnVnXG5cdFx0XHRcdFx0Ly8gVE9ETzogUmVtb3ZlIHRoaXMgb25jZSBXZWJLaXQvQmxpbmsgZml4ZXMgdGhpc1xuXHRcdFx0XHRcdGlmIChmbXQuc3R5bGVzKSB7XG5cdFx0XHRcdFx0XHR2YXIgc3R5bGVWYWwgPSBkb20uZ2V0QXR0cmliKGVsbSwgJ3N0eWxlJyk7XG5cblx0XHRcdFx0XHRcdGlmIChzdHlsZVZhbCkge1xuXHRcdFx0XHRcdFx0XHRlbG0uc2V0QXR0cmlidXRlKCdkYXRhLW1jZS1zdHlsZScsIHN0eWxlVmFsKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlYWNoKGZtdC5hdHRyaWJ1dGVzLCBmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuXHRcdFx0XHRcdFx0ZG9tLnNldEF0dHJpYihlbG0sIG5hbWUsIHJlcGxhY2VWYXJzKHZhbHVlLCB2YXJzKSk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRlYWNoKGZtdC5jbGFzc2VzLCBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSByZXBsYWNlVmFycyh2YWx1ZSwgdmFycyk7XG5cblx0XHRcdFx0XHRcdGlmICghZG9tLmhhc0NsYXNzKGVsbSwgdmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5hZGRDbGFzcyhlbG0sIHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBhcHBseU5vZGVTdHlsZShmb3JtYXRMaXN0LCBub2RlKSB7XG5cdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmICghZm9ybWF0LnNlbGVjdG9yKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTG9vayBmb3IgbWF0Y2hpbmcgZm9ybWF0c1xuXHRcdFx0XHRlYWNoKGZvcm1hdExpc3QsIGZ1bmN0aW9uKGZvcm1hdCkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGNvbGxhcHNlZCBzdGF0ZSBpZiBpdCBleGlzdHNcblx0XHRcdFx0XHRpZiAoJ2NvbGxhcHNlZCcgaW4gZm9ybWF0ICYmIGZvcm1hdC5jb2xsYXBzZWQgIT09IGlzQ29sbGFwc2VkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRvbS5pcyhub2RlLCBmb3JtYXQuc2VsZWN0b3IpICYmICFpc0NhcmV0Tm9kZShub2RlKSkge1xuXHRcdFx0XHRcdFx0c2V0RWxlbWVudEZvcm1hdChub2RlLCBmb3JtYXQpO1xuXHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIGZvdW5kO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIGNvbnZlcnRzOiA8cD5bYTwvcD48cD5dYjwvcD4gLT4gPHA+W2FdPC9wPjxwPmI8L3A+XG5cdFx0XHRmdW5jdGlvbiBhZGp1c3RTZWxlY3Rpb25Ub1Zpc2libGVTZWxlY3Rpb24oKSB7XG5cdFx0XHRcdGZ1bmN0aW9uIGZpbmRTZWxlY3Rpb25FbmQoc3RhcnQsIGVuZCkge1xuXHRcdFx0XHRcdHZhciB3YWxrZXIgPSBuZXcgVHJlZVdhbGtlcihlbmQpO1xuXHRcdFx0XHRcdGZvciAobm9kZSA9IHdhbGtlci5wcmV2MigpOyBub2RlOyBub2RlID0gd2Fsa2VyLnByZXYyKCkpIHtcblx0XHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDMgJiYgbm9kZS5kYXRhLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMSB8fCBub2RlID09IHN0YXJ0IHx8IG5vZGUudGFnTmFtZSA9PSAnQlInKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkanVzdCBzZWxlY3Rpb24gc28gdGhhdCBhIGVuZCBjb250YWluZXIgd2l0aCBhIGVuZCBvZmZzZXQgb2YgemVybyBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHNlbGVjdGlvblxuXHRcdFx0XHQvLyBhcyB0aGlzIGlzbid0IHZpc2libGUgdG8gdGhlIHVzZXIuXG5cdFx0XHRcdHZhciBybmcgPSBlZC5zZWxlY3Rpb24uZ2V0Um5nKCk7XG5cdFx0XHRcdHZhciBzdGFydCA9IHJuZy5zdGFydENvbnRhaW5lcjtcblx0XHRcdFx0dmFyIGVuZCA9IHJuZy5lbmRDb250YWluZXI7XG5cblx0XHRcdFx0aWYgKHN0YXJ0ICE9IGVuZCAmJiBybmcuZW5kT2Zmc2V0ID09PSAwKSB7XG5cdFx0XHRcdFx0dmFyIG5ld0VuZCA9IGZpbmRTZWxlY3Rpb25FbmQoc3RhcnQsIGVuZCk7XG5cdFx0XHRcdFx0dmFyIGVuZE9mZnNldCA9IG5ld0VuZC5ub2RlVHlwZSA9PSAzID8gbmV3RW5kLmRhdGEubGVuZ3RoIDogbmV3RW5kLmNoaWxkTm9kZXMubGVuZ3RoO1xuXG5cdFx0XHRcdFx0cm5nLnNldEVuZChuZXdFbmQsIGVuZE9mZnNldCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBhcHBseVJuZ1N0eWxlKHJuZywgYm9va21hcmssIG5vZGVfc3BlY2lmaWMpIHtcblx0XHRcdFx0dmFyIG5ld1dyYXBwZXJzID0gW10sIHdyYXBOYW1lLCB3cmFwRWxtLCBjb250ZW50RWRpdGFibGUgPSB0cnVlO1xuXG5cdFx0XHRcdC8vIFNldHVwIHdyYXBwZXIgZWxlbWVudFxuXHRcdFx0XHR3cmFwTmFtZSA9IGZvcm1hdC5pbmxpbmUgfHwgZm9ybWF0LmJsb2NrO1xuXHRcdFx0XHR3cmFwRWxtID0gZG9tLmNyZWF0ZSh3cmFwTmFtZSk7XG5cdFx0XHRcdHNldEVsZW1lbnRGb3JtYXQod3JhcEVsbSk7XG5cblx0XHRcdFx0cmFuZ2VVdGlscy53YWxrKHJuZywgZnVuY3Rpb24obm9kZXMpIHtcblx0XHRcdFx0XHR2YXIgY3VycmVudFdyYXBFbG07XG5cblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBQcm9jZXNzIGEgbGlzdCBvZiBub2RlcyB3cmFwIHRoZW0uXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0ZnVuY3Rpb24gcHJvY2Vzcyhub2RlKSB7XG5cdFx0XHRcdFx0XHR2YXIgbm9kZU5hbWUsIHBhcmVudE5hbWUsIGhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlLCBsYXN0Q29udGVudEVkaXRhYmxlO1xuXG5cdFx0XHRcdFx0XHRsYXN0Q29udGVudEVkaXRhYmxlID0gY29udGVudEVkaXRhYmxlO1xuXHRcdFx0XHRcdFx0bm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRwYXJlbnROYW1lID0gbm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0XHRcdC8vIE5vZGUgaGFzIGEgY29udGVudEVkaXRhYmxlIHZhbHVlXG5cdFx0XHRcdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBnZXRDb250ZW50RWRpdGFibGUobm9kZSkpIHtcblx0XHRcdFx0XHRcdFx0bGFzdENvbnRlbnRFZGl0YWJsZSA9IGNvbnRlbnRFZGl0YWJsZTtcblx0XHRcdFx0XHRcdFx0Y29udGVudEVkaXRhYmxlID0gZ2V0Q29udGVudEVkaXRhYmxlKG5vZGUpID09PSBcInRydWVcIjtcblx0XHRcdFx0XHRcdFx0aGFzQ29udGVudEVkaXRhYmxlU3RhdGUgPSB0cnVlOyAvLyBXZSBkb24ndCB3YW50IHRvIHdyYXAgdGhlIGNvbnRhaW5lciBvbmx5IGl0J3MgY2hpbGRyZW5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gU3RvcCB3cmFwcGluZyBvbiBiciBlbGVtZW50c1xuXHRcdFx0XHRcdFx0aWYgKGlzRXEobm9kZU5hbWUsICdicicpKSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRXcmFwRWxtID0gMDtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgYW55IGJyIGVsZW1lbnRzIHdoZW4gd2Ugd3JhcCB0aGluZ3Ncblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdC5ibG9jaykge1xuXHRcdFx0XHRcdFx0XHRcdGRvbS5yZW1vdmUobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIElmIG5vZGUgaXMgd3JhcHBlciB0eXBlXG5cdFx0XHRcdFx0XHRpZiAoZm9ybWF0LndyYXBwZXIgJiYgbWF0Y2hOb2RlKG5vZGUsIG5hbWUsIHZhcnMpKSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRXcmFwRWxtID0gMDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBDYW4gd2UgcmVuYW1lIHRoZSBibG9ja1xuXHRcdFx0XHRcdFx0Ly8gVE9ETzogQnJlYWsgdGhpcyBpZiB1cCwgdG9vIGNvbXBsZXhcblx0XHRcdFx0XHRcdGlmIChjb250ZW50RWRpdGFibGUgJiYgIWhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlICYmIGZvcm1hdC5ibG9jayAmJlxuXHRcdFx0XHRcdFx0XHQhZm9ybWF0LndyYXBwZXIgJiYgaXNUZXh0QmxvY2sobm9kZU5hbWUpICYmIGlzVmFsaWQocGFyZW50TmFtZSwgd3JhcE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBkb20ucmVuYW1lKG5vZGUsIHdyYXBOYW1lKTtcblx0XHRcdFx0XHRcdFx0c2V0RWxlbWVudEZvcm1hdChub2RlKTtcblx0XHRcdFx0XHRcdFx0bmV3V3JhcHBlcnMucHVzaChub2RlKTtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFdyYXBFbG0gPSAwO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBzZWxlY3RvciBwYXR0ZXJuc1xuXHRcdFx0XHRcdFx0aWYgKGZvcm1hdC5zZWxlY3Rvcikge1xuXHRcdFx0XHRcdFx0XHR2YXIgZm91bmQgPSBhcHBseU5vZGVTdHlsZShmb3JtYXRMaXN0LCBub2RlKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBDb250aW51ZSBwcm9jZXNzaW5nIGlmIGEgc2VsZWN0b3IgbWF0Y2ggd2Fzbid0IGZvdW5kIGFuZCBhIGlubGluZSBlbGVtZW50IGlzIGRlZmluZWRcblx0XHRcdFx0XHRcdFx0aWYgKCFmb3JtYXQuaW5saW5lIHx8IGZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3VycmVudFdyYXBFbG0gPSAwO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJcyBpdCB2YWxpZCB0byB3cmFwIHRoaXMgaXRlbVxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogQnJlYWsgdGhpcyBpZiB1cCwgdG9vIGNvbXBsZXhcblx0XHRcdFx0XHRcdGlmIChjb250ZW50RWRpdGFibGUgJiYgIWhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlICYmIGlzVmFsaWQod3JhcE5hbWUsIG5vZGVOYW1lKSAmJiBpc1ZhbGlkKHBhcmVudE5hbWUsIHdyYXBOYW1lKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEoIW5vZGVfc3BlY2lmaWMgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuXHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVZhbHVlLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDY1Mjc5KSAmJlxuXHRcdFx0XHRcdFx0XHRcdCFpc0NhcmV0Tm9kZShub2RlKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCghZm9ybWF0LmlubGluZSB8fCAhaXNCbG9jayhub2RlKSkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gU3RhcnQgd3JhcHBpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCFjdXJyZW50V3JhcEVsbSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFdyYXAgdGhlIG5vZGVcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50V3JhcEVsbSA9IGRvbS5jbG9uZSh3cmFwRWxtLCBGQUxTRSk7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjdXJyZW50V3JhcEVsbSwgbm9kZSk7XG5cdFx0XHRcdFx0XHRcdFx0bmV3V3JhcHBlcnMucHVzaChjdXJyZW50V3JhcEVsbSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjdXJyZW50V3JhcEVsbS5hcHBlbmRDaGlsZChub2RlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFN0YXJ0IGEgbmV3IHdyYXBwZXIgZm9yIHBvc3NpYmxlIGNoaWxkcmVuXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRXcmFwRWxtID0gMDtcblxuXHRcdFx0XHRcdFx0XHRlYWNoKGdyZXAobm9kZS5jaGlsZE5vZGVzKSwgcHJvY2Vzcyk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudEVkaXRhYmxlID0gbGFzdENvbnRlbnRFZGl0YWJsZTsgLy8gUmVzdG9yZSBsYXN0IGNvbnRlbnRFZGl0YWJsZSBzdGF0ZSBmcm9tIHN0YWNrXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBFbmQgdGhlIGxhc3Qgd3JhcHBlclxuXHRcdFx0XHRcdFx0XHRjdXJyZW50V3JhcEVsbSA9IDA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJvY2VzcyBzaWJsaW5ncyBmcm9tIHJhbmdlXG5cdFx0XHRcdFx0ZWFjaChub2RlcywgcHJvY2Vzcyk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGZvcm1hdHMgdG8gbGlua3MgYXMgd2VsbCB0byBnZXQgdGhlIGNvbG9yIG9mIHRoZSB1bmRlcmxpbmUgdG8gY2hhbmdlIGFzIHdlbGxcblx0XHRcdFx0aWYgKGZvcm1hdC5saW5rcyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGVhY2gobmV3V3JhcHBlcnMsIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHRcdGZ1bmN0aW9uIHByb2Nlc3Mobm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ0EnKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0RWxlbWVudEZvcm1hdChub2RlLCBmb3JtYXQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0ZWFjaChncmVwKG5vZGUuY2hpbGROb2RlcyksIHByb2Nlc3MpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRwcm9jZXNzKG5vZGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2xlYW51cFxuXHRcdFx0XHRlYWNoKG5ld1dyYXBwZXJzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0dmFyIGNoaWxkQ291bnQ7XG5cblx0XHRcdFx0XHRmdW5jdGlvbiBnZXRDaGlsZENvdW50KG5vZGUpIHtcblx0XHRcdFx0XHRcdHZhciBjb3VudCA9IDA7XG5cblx0XHRcdFx0XHRcdGVhY2gobm9kZS5jaGlsZE5vZGVzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghaXNXaGl0ZVNwYWNlTm9kZShub2RlKSAmJiAhaXNCb29rbWFya05vZGUobm9kZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvdW50O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZ1bmN0aW9uIGdldENoaWxkRWxlbWVudE5vZGUocm9vdCkge1xuXHRcdFx0XHRcdFx0dmFyIGNoaWxkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRlYWNoKHJvb3QuY2hpbGROb2RlcywgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXNFbGVtZW50Tm9kZShub2RlKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNoaWxkID0gbm9kZTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGJyZWFrIGxvb3Bcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY2hpbGQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZnVuY3Rpb24gbWF0Y2hOZXN0ZWRXcmFwcGVyKG5vZGUsIGZpbHRlcikge1xuXHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZ2V0Q2hpbGRDb3VudChub2RlKSAhPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bm9kZSA9IGdldENoaWxkRWxlbWVudE5vZGUobm9kZSk7XG5cdFx0XHRcdFx0XHRcdGlmICghbm9kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZpbHRlcihub2RlKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IHdoaWxlIChub2RlKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZnVuY3Rpb24gbWVyZ2VTdHlsZXMobm9kZSkge1xuXHRcdFx0XHRcdFx0dmFyIGNoaWxkLCBjbG9uZTtcblxuXHRcdFx0XHRcdFx0Y2hpbGQgPSBnZXRDaGlsZEVsZW1lbnROb2RlKG5vZGUpO1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjaGlsZCB3YXMgZm91bmQgYW5kIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGN1cnJlbnQgbm9kZVxuXHRcdFx0XHRcdFx0aWYgKGNoaWxkICYmICFpc0Jvb2ttYXJrTm9kZShjaGlsZCkgJiYgbWF0Y2hOYW1lKGNoaWxkLCBmb3JtYXQpKSB7XG5cdFx0XHRcdFx0XHRcdGNsb25lID0gZG9tLmNsb25lKGNoaWxkLCBGQUxTRSk7XG5cdFx0XHRcdFx0XHRcdHNldEVsZW1lbnRGb3JtYXQoY2xvbmUpO1xuXG5cdFx0XHRcdFx0XHRcdGRvbS5yZXBsYWNlKGNsb25lLCBub2RlLCBUUlVFKTtcblx0XHRcdFx0XHRcdFx0ZG9tLnJlbW92ZShjaGlsZCwgMSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBjbG9uZSB8fCBub2RlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNoaWxkQ291bnQgPSBnZXRDaGlsZENvdW50KG5vZGUpO1xuXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGVtcHR5IG5vZGVzIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG11bHRpcGxlIHdyYXBwZXJzIGFuZCB0aGV5IGFyZSBub3QgYmxvY2tcblx0XHRcdFx0XHQvLyBlbGVtZW50cyBzbyBuZXZlciByZW1vdmUgc2luZ2xlIDxoMT48L2gxPiBzaW5jZSB0aGF0IHdvdWxkIHJlbW92ZSB0aGVcblx0XHRcdFx0XHQvLyBjdXJyZW50IGVtcHR5IGJsb2NrIGVsZW1lbnQgd2hlcmUgdGhlIGNhcmV0IGlzIGF0XG5cdFx0XHRcdFx0aWYgKChuZXdXcmFwcGVycy5sZW5ndGggPiAxIHx8ICFpc0Jsb2NrKG5vZGUpKSAmJiBjaGlsZENvdW50ID09PSAwKSB7XG5cdFx0XHRcdFx0XHRkb20ucmVtb3ZlKG5vZGUsIDEpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChmb3JtYXQuaW5saW5lIHx8IGZvcm1hdC53cmFwcGVyKSB7XG5cdFx0XHRcdFx0XHQvLyBNZXJnZXMgdGhlIGN1cnJlbnQgbm9kZSB3aXRoIGl0J3MgY2hpbGRyZW4gb2Ygc2ltaWxhciB0eXBlIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRpZiAoIWZvcm1hdC5leGFjdCAmJiBjaGlsZENvdW50ID09PSAxKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBtZXJnZVN0eWxlcyhub2RlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlL21lcmdlIGNoaWxkcmVuXG5cdFx0XHRcdFx0XHRlYWNoKGZvcm1hdExpc3QsIGZ1bmN0aW9uKGZvcm1hdCkge1xuXHRcdFx0XHRcdFx0XHQvLyBNZXJnZSBhbGwgY2hpbGRyZW4gb2Ygc2ltaWxhciB0eXBlIHdpbGwgbW92ZSBzdHlsZXMgZnJvbSBjaGlsZCB0byBwYXJlbnRcblx0XHRcdFx0XHRcdFx0Ly8gdGhpczogPHNwYW4gc3R5bGU9XCJjb2xvcjpyZWRcIj48Yj48c3BhbiBzdHlsZT1cImNvbG9yOnJlZDsgZm9udC1zaXplOjEwcHhcIj50ZXh0PC9zcGFuPjwvYj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdC8vIHdpbGwgYmVjb21lOiA8c3BhbiBzdHlsZT1cImNvbG9yOnJlZFwiPjxiPjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEwcHhcIj50ZXh0PC9zcGFuPjwvYj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdGVhY2goZG9tLnNlbGVjdChmb3JtYXQuaW5saW5lLCBub2RlKSwgZnVuY3Rpb24oY2hpbGQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaXNCb29rbWFya05vZGUoY2hpbGQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0cmVtb3ZlRm9ybWF0KGZvcm1hdCwgdmFycywgY2hpbGQsIGZvcm1hdC5leGFjdCA/IGNoaWxkIDogbnVsbCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBmb3JtYXQgaWYgZGlyZWN0IHBhcmVudCBhbHJlYWR5IGhhcyB0aGUgc2FtZSBmb3JtYXRcblx0XHRcdFx0XHRcdGlmIChtYXRjaE5vZGUobm9kZS5wYXJlbnROb2RlLCBuYW1lLCB2YXJzKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAocmVtb3ZlRm9ybWF0KGZvcm1hdCwgdmFycywgbm9kZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZm9ybWF0IGlmIGFueSBhbmNlc3RvciBhbHJlYWR5IGhhcyB0aGUgc2FtZSBmb3JtYXRcblx0XHRcdFx0XHRcdGlmIChmb3JtYXQubWVyZ2Vfd2l0aF9wYXJlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5nZXRQYXJlbnQobm9kZS5wYXJlbnROb2RlLCBmdW5jdGlvbihwYXJlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAobWF0Y2hOb2RlKHBhcmVudCwgbmFtZSwgdmFycykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZW1vdmVGb3JtYXQoZm9ybWF0LCB2YXJzLCBub2RlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBUUlVFO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIGZvbnRTaXplIGRlZmluZXMgdGhlIGxpbmUgaGVpZ2h0IGZvciB0aGUgd2hvbGUgYnJhbmNoIG9mIG5lc3RlZCBzdHlsZSB3cmFwcGVycyxcblx0XHRcdFx0XHRcdC8vIHRoZXJlZm9yZSBpdCBzaG91bGQgYmUgc2V0IG9uIHRoZSBvdXRlcm1vc3Qgd3JhcHBlclxuXHRcdFx0XHRcdFx0aWYgKCFpc0Jsb2NrKG5vZGUpICYmICFnZXRTdHlsZShub2RlLCAnZm9udFNpemUnKSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgc3R5bGVOb2RlID0gbWF0Y2hOZXN0ZWRXcmFwcGVyKG5vZGUsIGhhc1N0eWxlKCdmb250U2l6ZScpKTtcblx0XHRcdFx0XHRcdFx0aWYgKHN0eWxlTm9kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGFwcGx5KCdmb250c2l6ZScsIHt2YWx1ZTogZ2V0U3R5bGUoc3R5bGVOb2RlLCAnZm9udFNpemUnKX0sIG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE1lcmdlIG5leHQgYW5kIHByZXZpb3VzIHNpYmxpbmdzIGlmIHRoZXkgYXJlIHNpbWlsYXIgPGI+dGV4dDwvYj48Yj50ZXh0PC9iPiBiZWNvbWVzIDxiPnRleHR0ZXh0PC9iPlxuXHRcdFx0XHRcdFx0aWYgKG5vZGUgJiYgZm9ybWF0Lm1lcmdlX3NpYmxpbmdzICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbWVyZ2VTaWJsaW5ncyhnZXROb25XaGl0ZVNwYWNlU2libGluZyhub2RlKSwgbm9kZSk7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBtZXJnZVNpYmxpbmdzKG5vZGUsIGdldE5vbldoaXRlU3BhY2VTaWJsaW5nKG5vZGUsIFRSVUUpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZ2V0Q29udGVudEVkaXRhYmxlKHNlbGVjdGlvbi5nZXROb2RlKCkpID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0bm9kZSA9IHNlbGVjdGlvbi5nZXROb2RlKCk7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwLCBsID0gZm9ybWF0TGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoZm9ybWF0TGlzdFtpXS5jZUZhbHNlT3ZlcnJpZGUgJiYgZG9tLmlzKG5vZGUsIGZvcm1hdExpc3RbaV0uc2VsZWN0b3IpKSB7XG5cdFx0XHRcdFx0XHRzZXRFbGVtZW50Rm9ybWF0KG5vZGUsIGZvcm1hdExpc3RbaV0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGZvcm1hdCkge1xuXHRcdFx0XHRpZiAobm9kZSkge1xuXHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWFwcGx5Tm9kZVN0eWxlKGZvcm1hdExpc3QsIG5vZGUpKSB7XG5cdFx0XHRcdFx0XHRcdHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcblx0XHRcdFx0XHRcdFx0cm5nLnNldFN0YXJ0QmVmb3JlKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRybmcuc2V0RW5kQWZ0ZXIobm9kZSk7XG5cdFx0XHRcdFx0XHRcdGFwcGx5Um5nU3R5bGUoZXhwYW5kUm5nKHJuZywgZm9ybWF0TGlzdCksIG51bGwsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhcHBseVJuZ1N0eWxlKG5vZGUsIG51bGwsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIWlzQ29sbGFwc2VkIHx8ICFmb3JtYXQuaW5saW5lIHx8IGRvbS5zZWxlY3QoJ3RkW2RhdGEtbWNlLXNlbGVjdGVkXSx0aFtkYXRhLW1jZS1zZWxlY3RlZF0nKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIE9idGFpbiBzZWxlY3Rpb24gbm9kZSBiZWZvcmUgc2VsZWN0aW9uIGlzIHVuc2VsZWN0ZWQgYnkgYXBwbHlSbmdTdHlsZSgpXG5cdFx0XHRcdFx0XHR2YXIgY3VyU2VsTm9kZSA9IGVkLnNlbGVjdGlvbi5nZXROb2RlKCk7XG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZSBmb3JtYXRzIGhhdmUgYSBkZWZhdWx0IGJsb2NrIGFuZCB3ZSBjYW4ndCBmaW5kIGEgcGFyZW50IGJsb2NrIHRoZW5cblx0XHRcdFx0XHRcdC8vIHN0YXJ0IHdyYXBwaW5nIGl0IHdpdGggYSBESVYgdGhpcyBpcyBmb3IgZm9yY2VkX3Jvb3RfYmxvY2tzOiBmYWxzZVxuXHRcdFx0XHRcdFx0Ly8gSXQncyBraW5kIG9mIGEgaGFjayBidXQgcGVvcGxlIHNob3VsZCBiZSB1c2luZyB0aGUgZGVmYXVsdCBibG9jayB0eXBlIFAgc2luY2UgYWxsIGRlc2t0b3AgZWRpdG9ycyB3b3JrIHRoYXQgd2F5XG5cdFx0XHRcdFx0XHRpZiAoIWZvcmNlZFJvb3RCbG9jayAmJiBmb3JtYXRMaXN0WzBdLmRlZmF1bHRCbG9jayAmJiAhZG9tLmdldFBhcmVudChjdXJTZWxOb2RlLCBkb20uaXNCbG9jaykpIHtcblx0XHRcdFx0XHRcdFx0YXBwbHkoZm9ybWF0TGlzdFswXS5kZWZhdWx0QmxvY2spO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBBcHBseSBmb3JtYXR0aW5nIHRvIHNlbGVjdGlvblxuXHRcdFx0XHRcdFx0ZWQuc2VsZWN0aW9uLnNldFJuZyhhZGp1c3RTZWxlY3Rpb25Ub1Zpc2libGVTZWxlY3Rpb24oKSk7XG5cdFx0XHRcdFx0XHRib29rbWFyayA9IHNlbGVjdGlvbi5nZXRCb29rbWFyaygpO1xuXHRcdFx0XHRcdFx0YXBwbHlSbmdTdHlsZShleHBhbmRSbmcoc2VsZWN0aW9uLmdldFJuZyhUUlVFKSwgZm9ybWF0TGlzdCksIGJvb2ttYXJrKTtcblxuXHRcdFx0XHRcdFx0aWYgKGZvcm1hdC5zdHlsZXMpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ29sb3JlZCBub2RlcyBzaG91bGQgYmUgdW5kZXJsaW5lZCBzbyB0aGF0IHRoZSBjb2xvciBvZiB0aGUgdW5kZXJsaW5lIG1hdGNoZXMgdGhlIHRleHQgY29sb3IuXG5cdFx0XHRcdFx0XHRcdGlmIChmb3JtYXQuc3R5bGVzLmNvbG9yIHx8IGZvcm1hdC5zdHlsZXMudGV4dERlY29yYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHR3YWxrKGN1clNlbE5vZGUsIHByb2Nlc3NVbmRlcmxpbmVBbmRDb2xvciwgJ2NoaWxkTm9kZXMnKTtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzVW5kZXJsaW5lQW5kQ29sb3IoY3VyU2VsTm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBub2RlcyB3aXRoIGZvbnQtc2l6ZSBzaG91bGQgaGF2ZSB0aGVpciBvd24gYmFja2dyb3VuZCBjb2xvciBhcyB3ZWxsIHRvIGZpdCB0aGUgbGluZS1oZWlnaHQgKHNlZSBUSU5ZLTg4Milcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdC5zdHlsZXMuYmFja2dyb3VuZENvbG9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2Vzc0NoaWxkRWxlbWVudHMoY3VyU2VsTm9kZSxcblx0XHRcdFx0XHRcdFx0XHRcdGhhc1N0eWxlKCdmb250U2l6ZScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0YXBwbHlTdHlsZSgnYmFja2dyb3VuZENvbG9yJywgcmVwbGFjZVZhcnMoZm9ybWF0LnN0eWxlcy5iYWNrZ3JvdW5kQ29sb3IsIHZhcnMpKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcblx0XHRcdFx0XHRcdG1vdmVTdGFydChzZWxlY3Rpb24uZ2V0Um5nKFRSVUUpKTtcblx0XHRcdFx0XHRcdGVkLm5vZGVDaGFuZ2VkKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHBlcmZvcm1DYXJldEFjdGlvbignYXBwbHknLCBuYW1lLCB2YXJzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRIb29rcy5wb3N0UHJvY2VzcyhuYW1lLCBlZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGZvcm1hdCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBvciBzcGVjaWZpZWQgbm9kZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiBmb3JtYXQgdG8gcmVtb3ZlLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB2YXJzIE9wdGlvbmFsIGxpc3Qgb2YgdmFyaWFibGVzIHRvIHJlcGxhY2Ugd2l0aGluIGZvcm1hdCBiZWZvcmUgcmVtb3ZpbmcgaXQuXG5cdFx0ICogQHBhcmFtIHtOb2RlL1JhbmdlfSBub2RlIE9wdGlvbmFsIG5vZGUgb3IgRE9NIHJhbmdlIHRvIHJlbW92ZSB0aGUgZm9ybWF0IGZyb20gZGVmYXVsdHMgdG8gY3VycmVudCBzZWxlY3Rpb24uXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gcmVtb3ZlKG5hbWUsIHZhcnMsIG5vZGUsIHNpbWlsYXIpIHtcblx0XHRcdHZhciBmb3JtYXRMaXN0ID0gZ2V0KG5hbWUpLCBmb3JtYXQgPSBmb3JtYXRMaXN0WzBdLCBib29rbWFyaywgcm5nLCBjb250ZW50RWRpdGFibGUgPSB0cnVlO1xuXG5cdFx0XHQvLyBNZXJnZXMgdGhlIHN0eWxlcyBmb3IgZWFjaCBub2RlXG5cdFx0XHRmdW5jdGlvbiBwcm9jZXNzKG5vZGUpIHtcblx0XHRcdFx0dmFyIGNoaWxkcmVuLCBpLCBsLCBsYXN0Q29udGVudEVkaXRhYmxlLCBoYXNDb250ZW50RWRpdGFibGVTdGF0ZTtcblxuXHRcdFx0XHQvLyBOb2RlIGhhcyBhIGNvbnRlbnRFZGl0YWJsZSB2YWx1ZVxuXHRcdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBnZXRDb250ZW50RWRpdGFibGUobm9kZSkpIHtcblx0XHRcdFx0XHRsYXN0Q29udGVudEVkaXRhYmxlID0gY29udGVudEVkaXRhYmxlO1xuXHRcdFx0XHRcdGNvbnRlbnRFZGl0YWJsZSA9IGdldENvbnRlbnRFZGl0YWJsZShub2RlKSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdFx0aGFzQ29udGVudEVkaXRhYmxlU3RhdGUgPSB0cnVlOyAvLyBXZSBkb24ndCB3YW50IHRvIHdyYXAgdGhlIGNvbnRhaW5lciBvbmx5IGl0J3MgY2hpbGRyZW5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdyYWIgdGhlIGNoaWxkcmVuIGZpcnN0IHNpbmNlIHRoZSBub2RlbGlzdCBtaWdodCBiZSBjaGFuZ2VkXG5cdFx0XHRcdGNoaWxkcmVuID0gZ3JlcChub2RlLmNoaWxkTm9kZXMpO1xuXG5cdFx0XHRcdC8vIFByb2Nlc3MgY3VycmVudCBub2RlXG5cdFx0XHRcdGlmIChjb250ZW50RWRpdGFibGUgJiYgIWhhc0NvbnRlbnRFZGl0YWJsZVN0YXRlKSB7XG5cdFx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IGZvcm1hdExpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAocmVtb3ZlRm9ybWF0KGZvcm1hdExpc3RbaV0sIHZhcnMsIG5vZGUsIG5vZGUpKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb2Nlc3MgdGhlIGNoaWxkcmVuXG5cdFx0XHRcdGlmIChmb3JtYXQuZGVlcCkge1xuXHRcdFx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGZvciAoaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0cHJvY2VzcyhjaGlsZHJlbltpXSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChoYXNDb250ZW50RWRpdGFibGVTdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRjb250ZW50RWRpdGFibGUgPSBsYXN0Q29udGVudEVkaXRhYmxlOyAvLyBSZXN0b3JlIGxhc3QgY29udGVudEVkaXRhYmxlIHN0YXRlIGZyb20gc3RhY2tcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZmluZEZvcm1hdFJvb3QoY29udGFpbmVyKSB7XG5cdFx0XHRcdHZhciBmb3JtYXRSb290O1xuXG5cdFx0XHRcdC8vIEZpbmQgZm9ybWF0IHJvb3Rcblx0XHRcdFx0ZWFjaChnZXRQYXJlbnRzKGNvbnRhaW5lci5wYXJlbnROb2RlKS5yZXZlcnNlKCksIGZ1bmN0aW9uKHBhcmVudCkge1xuXHRcdFx0XHRcdHZhciBmb3JtYXQ7XG5cblx0XHRcdFx0XHQvLyBGaW5kIGZvcm1hdCByb290IGVsZW1lbnRcblx0XHRcdFx0XHRpZiAoIWZvcm1hdFJvb3QgJiYgcGFyZW50LmlkICE9ICdfc3RhcnQnICYmIHBhcmVudC5pZCAhPSAnX2VuZCcpIHtcblx0XHRcdFx0XHRcdC8vIElzIHRoZSBub2RlIG1hdGNoaW5nIHRoZSBmb3JtYXQgd2UgYXJlIGxvb2tpbmcgZm9yXG5cdFx0XHRcdFx0XHRmb3JtYXQgPSBtYXRjaE5vZGUocGFyZW50LCBuYW1lLCB2YXJzLCBzaW1pbGFyKTtcblx0XHRcdFx0XHRcdGlmIChmb3JtYXQgJiYgZm9ybWF0LnNwbGl0ICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRmb3JtYXRSb290ID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIGZvcm1hdFJvb3Q7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHdyYXBBbmRTcGxpdChmb3JtYXRSb290LCBjb250YWluZXIsIHRhcmdldCwgc3BsaXQpIHtcblx0XHRcdFx0dmFyIHBhcmVudCwgY2xvbmUsIGxhc3RDbG9uZSwgZmlyc3RDbG9uZSwgaSwgZm9ybWF0Um9vdFBhcmVudDtcblxuXHRcdFx0XHQvLyBGb3JtYXQgcm9vdCBmb3VuZCB0aGVuIGNsb25lIGZvcm1hdHMgYW5kIHNwbGl0IGl0XG5cdFx0XHRcdGlmIChmb3JtYXRSb290KSB7XG5cdFx0XHRcdFx0Zm9ybWF0Um9vdFBhcmVudCA9IGZvcm1hdFJvb3QucGFyZW50Tm9kZTtcblxuXHRcdFx0XHRcdGZvciAocGFyZW50ID0gY29udGFpbmVyLnBhcmVudE5vZGU7IHBhcmVudCAmJiBwYXJlbnQgIT0gZm9ybWF0Um9vdFBhcmVudDsgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGUpIHtcblx0XHRcdFx0XHRcdGNsb25lID0gZG9tLmNsb25lKHBhcmVudCwgRkFMU0UpO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZm9ybWF0TGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAocmVtb3ZlRm9ybWF0KGZvcm1hdExpc3RbaV0sIHZhcnMsIGNsb25lLCBjbG9uZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjbG9uZSA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gQnVpbGQgd3JhcHBlciBub2RlXG5cdFx0XHRcdFx0XHRpZiAoY2xvbmUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGxhc3RDbG9uZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNsb25lLmFwcGVuZENoaWxkKGxhc3RDbG9uZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoIWZpcnN0Q2xvbmUpIHtcblx0XHRcdFx0XHRcdFx0XHRmaXJzdENsb25lID0gY2xvbmU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRsYXN0Q2xvbmUgPSBjbG9uZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBOZXZlciBzcGxpdCBibG9jayBlbGVtZW50cyBpZiB0aGUgZm9ybWF0IGlzIG1peGVkXG5cdFx0XHRcdFx0aWYgKHNwbGl0ICYmICghZm9ybWF0Lm1peGVkIHx8ICFpc0Jsb2NrKGZvcm1hdFJvb3QpKSkge1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyID0gZG9tLnNwbGl0KGZvcm1hdFJvb3QsIGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gV3JhcCBjb250YWluZXIgaW4gY2xvbmVkIGZvcm1hdHNcblx0XHRcdFx0XHRpZiAobGFzdENsb25lKSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobGFzdENsb25lLCB0YXJnZXQpO1xuXHRcdFx0XHRcdFx0Zmlyc3RDbG9uZS5hcHBlbmRDaGlsZCh0YXJnZXQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBjb250YWluZXI7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHNwbGl0VG9Gb3JtYXRSb290KGNvbnRhaW5lcikge1xuXHRcdFx0XHRyZXR1cm4gd3JhcEFuZFNwbGl0KGZpbmRGb3JtYXRSb290KGNvbnRhaW5lciksIGNvbnRhaW5lciwgY29udGFpbmVyLCB0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gdW53cmFwKHN0YXJ0KSB7XG5cdFx0XHRcdHZhciBub2RlID0gZG9tLmdldChzdGFydCA/ICdfc3RhcnQnIDogJ19lbmQnKSxcblx0XHRcdFx0XHRvdXQgPSBub2RlW3N0YXJ0ID8gJ2ZpcnN0Q2hpbGQnIDogJ2xhc3RDaGlsZCddO1xuXG5cdFx0XHRcdC8vIElmIHRoZSBlbmQgaXMgcGxhY2VkIHdpdGhpbiB0aGUgc3RhcnQgdGhlIHJlc3VsdCB3aWxsIGJlIHJlbW92ZWRcblx0XHRcdFx0Ly8gU28gdGhpcyBjaGVja3MgaWYgdGhlIG91dCBub2RlIGlzIGEgYm9va21hcmsgbm9kZSBpZiBpdCBpcyBpdFxuXHRcdFx0XHQvLyBjaGVja3MgZm9yIGFub3RoZXIgbW9yZSBzdWl0YWJsZSBub2RlXG5cdFx0XHRcdGlmIChpc0Jvb2ttYXJrTm9kZShvdXQpKSB7XG5cdFx0XHRcdFx0b3V0ID0gb3V0W3N0YXJ0ID8gJ2ZpcnN0Q2hpbGQnIDogJ2xhc3RDaGlsZCddO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2luY2UgZG9tLnJlbW92ZSByZW1vdmVzIGVtcHR5IHRleHQgbm9kZXMgdGhlbiB3ZSBuZWVkIHRvIHRyeSB0byBmaW5kIGEgYmV0dGVyIG5vZGVcblx0XHRcdFx0aWYgKG91dC5ub2RlVHlwZSA9PSAzICYmIG91dC5kYXRhLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdG91dCA9IHN0YXJ0ID8gbm9kZS5wcmV2aW91c1NpYmxpbmcgfHwgbm9kZS5uZXh0U2libGluZyA6IG5vZGUubmV4dFNpYmxpbmcgfHwgbm9kZS5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkb20ucmVtb3ZlKG5vZGUsIHRydWUpO1xuXG5cdFx0XHRcdHJldHVybiBvdXQ7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHJlbW92ZVJuZ1N0eWxlKHJuZykge1xuXHRcdFx0XHR2YXIgc3RhcnRDb250YWluZXIsIGVuZENvbnRhaW5lcjtcblx0XHRcdFx0dmFyIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gcm5nLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuXG5cdFx0XHRcdHJuZyA9IGV4cGFuZFJuZyhybmcsIGZvcm1hdExpc3QsIFRSVUUpO1xuXG5cdFx0XHRcdGlmIChmb3JtYXQuc3BsaXQpIHtcblx0XHRcdFx0XHRzdGFydENvbnRhaW5lciA9IGdldENvbnRhaW5lcihybmcsIFRSVUUpO1xuXHRcdFx0XHRcdGVuZENvbnRhaW5lciA9IGdldENvbnRhaW5lcihybmcpO1xuXG5cdFx0XHRcdFx0aWYgKHN0YXJ0Q29udGFpbmVyICE9IGVuZENvbnRhaW5lcikge1xuXHRcdFx0XHRcdFx0Ly8gV2ViS2l0IHdpbGwgcmVuZGVyIHRoZSB0YWJsZSBpbmNvcnJlY3RseSBpZiB3ZSB3cmFwIGEgVEggb3IgVEQgaW4gYSBTUEFOXG5cdFx0XHRcdFx0XHQvLyBzbyBsZXQncyBzZWUgaWYgd2UgY2FuIHVzZSB0aGUgZmlyc3QgY2hpbGQgaW5zdGVhZFxuXHRcdFx0XHRcdFx0Ly8gVGhpcyB3aWxsIGhhcHBlbiBpZiB5b3UgdHJpcGxlIGNsaWNrIGEgdGFibGUgY2VsbCBhbmQgdXNlIHJlbW92ZSBmb3JtYXR0aW5nXG5cdFx0XHRcdFx0XHRpZiAoL14oVFJ8VEh8VEQpJC8udGVzdChzdGFydENvbnRhaW5lci5ub2RlTmFtZSkgJiYgc3RhcnRDb250YWluZXIuZmlyc3RDaGlsZCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhcnRDb250YWluZXIubm9kZU5hbWUgPT0gXCJUUlwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBzdGFydENvbnRhaW5lci5maXJzdENoaWxkLmZpcnN0Q2hpbGQgfHwgc3RhcnRDb250YWluZXI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBzdGFydENvbnRhaW5lci5maXJzdENoaWxkIHx8IHN0YXJ0Q29udGFpbmVyO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIFRyeSB0byBhZGp1c3QgZW5kQ29udGFpbmVyIGFzIHdlbGwgaWYgY2VsbHMgb24gdGhlIHNhbWUgcm93IHdlcmUgc2VsZWN0ZWQgLSBidWcgIzY0MTBcblx0XHRcdFx0XHRcdGlmIChjb21tb25BbmNlc3RvckNvbnRhaW5lciAmJlxuXHRcdFx0XHRcdFx0XHQvXlQoSEVBRHxCT0RZfEZPT1R8UikkLy50ZXN0KGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVOYW1lKSAmJlxuXHRcdFx0XHRcdFx0XHRpc1RhYmxlQ2VsbChlbmRDb250YWluZXIpICYmIGVuZENvbnRhaW5lci5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0XHRcdGVuZENvbnRhaW5lciA9IGVuZENvbnRhaW5lci5maXJzdENoaWxkIHx8IGVuZENvbnRhaW5lcjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGRvbS5pc0NoaWxkT2Yoc3RhcnRDb250YWluZXIsIGVuZENvbnRhaW5lcikgJiYgIWlzQmxvY2soZW5kQ29udGFpbmVyKSAmJlxuXHRcdFx0XHRcdFx0XHQhaXNUYWJsZUNlbGwoc3RhcnRDb250YWluZXIpICYmICFpc1RhYmxlQ2VsbChlbmRDb250YWluZXIpKSB7XG5cdFx0XHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyID0gd3JhcChzdGFydENvbnRhaW5lciwgJ3NwYW4nLCB7aWQ6ICdfc3RhcnQnLCAnZGF0YS1tY2UtdHlwZSc6ICdib29rbWFyayd9KTtcblx0XHRcdFx0XHRcdFx0c3BsaXRUb0Zvcm1hdFJvb3Qoc3RhcnRDb250YWluZXIpO1xuXHRcdFx0XHRcdFx0XHRzdGFydENvbnRhaW5lciA9IHVud3JhcChUUlVFKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBXcmFwIHN0YXJ0L2VuZCBub2RlcyBpbiBzcGFuIGVsZW1lbnQgc2luY2UgdGhlc2UgbWlnaHQgYmUgY2xvbmVkL21vdmVkXG5cdFx0XHRcdFx0XHRzdGFydENvbnRhaW5lciA9IHdyYXAoc3RhcnRDb250YWluZXIsICdzcGFuJywge2lkOiAnX3N0YXJ0JywgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnfSk7XG5cdFx0XHRcdFx0XHRlbmRDb250YWluZXIgPSB3cmFwKGVuZENvbnRhaW5lciwgJ3NwYW4nLCB7aWQ6ICdfZW5kJywgJ2RhdGEtbWNlLXR5cGUnOiAnYm9va21hcmsnfSk7XG5cblx0XHRcdFx0XHRcdC8vIFNwbGl0IHN0YXJ0L2VuZFxuXHRcdFx0XHRcdFx0c3BsaXRUb0Zvcm1hdFJvb3Qoc3RhcnRDb250YWluZXIpO1xuXHRcdFx0XHRcdFx0c3BsaXRUb0Zvcm1hdFJvb3QoZW5kQ29udGFpbmVyKTtcblxuXHRcdFx0XHRcdFx0Ly8gVW53cmFwIHN0YXJ0L2VuZCB0byBnZXQgcmVhbCBlbGVtZW50cyBhZ2FpblxuXHRcdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSB1bndyYXAoVFJVRSk7XG5cdFx0XHRcdFx0XHRlbmRDb250YWluZXIgPSB1bndyYXAoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBlbmRDb250YWluZXIgPSBzcGxpdFRvRm9ybWF0Um9vdChzdGFydENvbnRhaW5lcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIHJhbmdlIHBvc2l0aW9ucyBzaW5jZSB0aGV5IG1pZ2h0IGhhdmUgY2hhbmdlZCBhZnRlciB0aGUgc3BsaXQgb3BlcmF0aW9uc1xuXHRcdFx0XHRcdHJuZy5zdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgPyBzdGFydENvbnRhaW5lci5wYXJlbnROb2RlIDogc3RhcnRDb250YWluZXI7XG5cdFx0XHRcdFx0cm5nLnN0YXJ0T2Zmc2V0ID0gbm9kZUluZGV4KHN0YXJ0Q29udGFpbmVyKTtcblx0XHRcdFx0XHRybmcuZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgPyBlbmRDb250YWluZXIucGFyZW50Tm9kZSA6IGVuZENvbnRhaW5lcjtcblx0XHRcdFx0XHRybmcuZW5kT2Zmc2V0ID0gbm9kZUluZGV4KGVuZENvbnRhaW5lcikgKyAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGl0ZW1zIGJldHdlZW4gc3RhcnQvZW5kXG5cdFx0XHRcdHJhbmdlVXRpbHMud2FsayhybmcsIGZ1bmN0aW9uKG5vZGVzKSB7XG5cdFx0XHRcdFx0ZWFjaChub2RlcywgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdFx0cHJvY2Vzcyhub2RlKTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIHBhcmVudCBzcGFuIGlmIGl0IG9ubHkgY29udGFpbnMgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUsIHlldCBhIHBhcmVudCBub2RlIGlzIGFsc28gdW5kZXJsaW5lZC5cblx0XHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09PSAxICYmIGVkLmRvbS5nZXRTdHlsZShub2RlLCAndGV4dC1kZWNvcmF0aW9uJykgPT09ICd1bmRlcmxpbmUnICYmXG5cdFx0XHRcdFx0XHRcdG5vZGUucGFyZW50Tm9kZSAmJiBnZXRUZXh0RGVjb3JhdGlvbihub2RlLnBhcmVudE5vZGUpID09PSAndW5kZXJsaW5lJykge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVGb3JtYXQoe1xuXHRcdFx0XHRcdFx0XHRcdCdkZWVwJzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0J2V4YWN0JzogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHQnaW5saW5lJzogJ3NwYW4nLFxuXHRcdFx0XHRcdFx0XHRcdCdzdHlsZXMnOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHQndGV4dERlY29yYXRpb24nOiAndW5kZXJsaW5lJ1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSwgbnVsbCwgbm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIYW5kbGUgbm9kZVxuXHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUpIHtcblx0XHRcdFx0XHRybmcgPSBkb20uY3JlYXRlUm5nKCk7XG5cdFx0XHRcdFx0cm5nLnNldFN0YXJ0QmVmb3JlKG5vZGUpO1xuXHRcdFx0XHRcdHJuZy5zZXRFbmRBZnRlcihub2RlKTtcblx0XHRcdFx0XHRyZW1vdmVSbmdTdHlsZShybmcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlbW92ZVJuZ1N0eWxlKG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZ2V0Q29udGVudEVkaXRhYmxlKHNlbGVjdGlvbi5nZXROb2RlKCkpID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0bm9kZSA9IHNlbGVjdGlvbi5nZXROb2RlKCk7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwLCBsID0gZm9ybWF0TGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoZm9ybWF0TGlzdFtpXS5jZUZhbHNlT3ZlcnJpZGUpIHtcblx0XHRcdFx0XHRcdGlmIChyZW1vdmVGb3JtYXQoZm9ybWF0TGlzdFtpXSwgdmFycywgbm9kZSwgbm9kZSkpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpIHx8ICFmb3JtYXQuaW5saW5lIHx8IGRvbS5zZWxlY3QoJ3RkW2RhdGEtbWNlLXNlbGVjdGVkXSx0aFtkYXRhLW1jZS1zZWxlY3RlZF0nKS5sZW5ndGgpIHtcblx0XHRcdFx0Ym9va21hcmsgPSBzZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcblx0XHRcdFx0cmVtb3ZlUm5nU3R5bGUoc2VsZWN0aW9uLmdldFJuZyhUUlVFKSk7XG5cdFx0XHRcdHNlbGVjdGlvbi5tb3ZlVG9Cb29rbWFyayhib29rbWFyayk7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgc3RhcnQgZWxlbWVudCBzdGlsbCBoYXMgZm9ybWF0dGluZyB0aGVuIHdlIGFyZSBhdDogXCI8Yj50ZXh0fDwvYj50ZXh0XCJcblx0XHRcdFx0Ly8gYW5kIG5lZWQgdG8gbW92ZSB0aGUgc3RhcnQgaW50byB0aGUgbmV4dCB0ZXh0IG5vZGVcblx0XHRcdFx0aWYgKGZvcm1hdC5pbmxpbmUgJiYgbWF0Y2gobmFtZSwgdmFycywgc2VsZWN0aW9uLmdldFN0YXJ0KCkpKSB7XG5cdFx0XHRcdFx0bW92ZVN0YXJ0KHNlbGVjdGlvbi5nZXRSbmcodHJ1ZSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZWQubm9kZUNoYW5nZWQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBlcmZvcm1DYXJldEFjdGlvbigncmVtb3ZlJywgbmFtZSwgdmFycywgc2ltaWxhcik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogVG9nZ2xlcyB0aGUgc3BlY2lmaWVkIGZvcm1hdCBvbi9vZmYuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHRvZ2dsZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgZm9ybWF0IHRvIGFwcGx5L3JlbW92ZS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdmFycyBPcHRpb25hbCBsaXN0IG9mIHZhcmlhYmxlcyB0byByZXBsYWNlIHdpdGhpbiBmb3JtYXQgYmVmb3JlIGFwcGx5aW5nL3JlbW92aW5nIGl0LlxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBPcHRpb25hbCBub2RlIHRvIGFwcGx5IHRoZSBmb3JtYXQgdG8gb3IgcmVtb3ZlIGZyb20uIERlZmF1bHRzIHRvIGN1cnJlbnQgc2VsZWN0aW9uLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHRvZ2dsZShuYW1lLCB2YXJzLCBub2RlKSB7XG5cdFx0XHR2YXIgZm10ID0gZ2V0KG5hbWUpO1xuXG5cdFx0XHRpZiAobWF0Y2gobmFtZSwgdmFycywgbm9kZSkgJiYgKCEoJ3RvZ2dsZScgaW4gZm10WzBdKSB8fCBmbXRbMF0udG9nZ2xlKSkge1xuXHRcdFx0XHRyZW1vdmUobmFtZSwgdmFycywgbm9kZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhcHBseShuYW1lLCB2YXJzLCBub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm4gdHJ1ZS9mYWxzZSBpZiB0aGUgc3BlY2lmaWVkIG5vZGUgaGFzIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBtYXRjaE5vZGVcblx0XHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBjaGVjayB0aGUgZm9ybWF0IG9uLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIEZvcm1hdCBuYW1lIHRvIGNoZWNrLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB2YXJzIE9wdGlvbmFsIGxpc3Qgb2YgdmFyaWFibGVzIHRvIHJlcGxhY2UgYmVmb3JlIGNoZWNraW5nIGl0LlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc2ltaWxhciBNYXRjaCBmb3JtYXQgdGhhdCBoYXMgc2ltaWxhciBwcm9wZXJ0aWVzLlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgZm9ybWF0IG9iamVjdCBpdCBtYXRjaGVzIG9yIHVuZGVmaW5lZCBpZiBpdCBkb2Vzbid0IG1hdGNoLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIG1hdGNoTm9kZShub2RlLCBuYW1lLCB2YXJzLCBzaW1pbGFyKSB7XG5cdFx0XHR2YXIgZm9ybWF0TGlzdCA9IGdldChuYW1lKSwgZm9ybWF0LCBpLCBjbGFzc2VzO1xuXG5cdFx0XHRmdW5jdGlvbiBtYXRjaEl0ZW1zKG5vZGUsIGZvcm1hdCwgaXRlbV9uYW1lKSB7XG5cdFx0XHRcdHZhciBrZXksIHZhbHVlLCBpdGVtcyA9IGZvcm1hdFtpdGVtX25hbWVdLCBpO1xuXG5cdFx0XHRcdC8vIEN1c3RvbSBtYXRjaFxuXHRcdFx0XHRpZiAoZm9ybWF0Lm9ubWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gZm9ybWF0Lm9ubWF0Y2gobm9kZSwgZm9ybWF0LCBpdGVtX25hbWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgYWxsIGl0ZW1zXG5cdFx0XHRcdGlmIChpdGVtcykge1xuXHRcdFx0XHRcdC8vIE5vbiBpbmRleGVkIG9iamVjdFxuXHRcdFx0XHRcdGlmIChpdGVtcy5sZW5ndGggPT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGtleSBpbiBpdGVtcykge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpdGVtX25hbWUgPT09ICdhdHRyaWJ1dGVzJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBkb20uZ2V0QXR0cmliKG5vZGUsIGtleSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gZ2V0U3R5bGUobm9kZSwga2V5KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoc2ltaWxhciAmJiAhdmFsdWUgJiYgIWZvcm1hdC5leGFjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmICgoIXNpbWlsYXIgfHwgZm9ybWF0LmV4YWN0KSAmJiAhaXNFcSh2YWx1ZSwgbm9ybWFsaXplU3R5bGVWYWx1ZShyZXBsYWNlVmFycyhpdGVtc1trZXldLCB2YXJzKSwga2V5KSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gT25seSBvbmUgbWF0Y2ggbmVlZGVkIGZvciBpbmRleGVkIGFycmF5c1xuXHRcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtX25hbWUgPT09ICdhdHRyaWJ1dGVzJyA/IGRvbS5nZXRBdHRyaWIobm9kZSwgaXRlbXNbaV0pIDogZ2V0U3R5bGUobm9kZSwgaXRlbXNbaV0pKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZvcm1hdDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmb3JtYXQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChmb3JtYXRMaXN0ICYmIG5vZGUpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBmb3JtYXQgaW4gbGlzdFxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZm9ybWF0TGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGZvcm1hdCA9IGZvcm1hdExpc3RbaV07XG5cblx0XHRcdFx0XHQvLyBOYW1lIG5hbWUsIGF0dHJpYnV0ZXMsIHN0eWxlcyBhbmQgY2xhc3Nlc1xuXHRcdFx0XHRcdGlmIChtYXRjaE5hbWUobm9kZSwgZm9ybWF0KSAmJiBtYXRjaEl0ZW1zKG5vZGUsIGZvcm1hdCwgJ2F0dHJpYnV0ZXMnKSAmJiBtYXRjaEl0ZW1zKG5vZGUsIGZvcm1hdCwgJ3N0eWxlcycpKSB7XG5cdFx0XHRcdFx0XHQvLyBNYXRjaCBjbGFzc2VzXG5cdFx0XHRcdFx0XHRpZiAoKGNsYXNzZXMgPSBmb3JtYXQuY2xhc3NlcykpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWRvbS5oYXNDbGFzcyhub2RlLCBjbGFzc2VzW2ldKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybWF0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIE1hdGNoZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9yIHNwZWNpZmllZCBub2RlIGFnYWluc3QgdGhlIHNwZWNpZmllZCBmb3JtYXQgbmFtZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgbWF0Y2hcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIGZvcm1hdCB0byBtYXRjaC5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdmFycyBPcHRpb25hbCBsaXN0IG9mIHZhcmlhYmxlcyB0byByZXBsYWNlIGJlZm9yZSBjaGVja2luZyBpdC5cblx0XHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgT3B0aW9uYWwgbm9kZSB0byBjaGVjay5cblx0XHQgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBzcGVjaWZpZWQgc2VsZWN0aW9uL25vZGUgbWF0Y2hlcyB0aGUgZm9ybWF0LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIG1hdGNoKG5hbWUsIHZhcnMsIG5vZGUpIHtcblx0XHRcdHZhciBzdGFydE5vZGU7XG5cblx0XHRcdGZ1bmN0aW9uIG1hdGNoUGFyZW50cyhub2RlKSB7XG5cdFx0XHRcdHZhciByb290ID0gZG9tLmdldFJvb3QoKTtcblxuXHRcdFx0XHRpZiAobm9kZSA9PT0gcm9vdCkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbmQgZmlyc3Qgbm9kZSB3aXRoIHNpbWlsYXIgZm9ybWF0IHNldHRpbmdzXG5cdFx0XHRcdG5vZGUgPSBkb20uZ2V0UGFyZW50KG5vZGUsIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHRpZiAobWF0Y2hlc1VuSW5oZXJpdGVkRm9ybWF0U2VsZWN0b3Iobm9kZSwgbmFtZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBub2RlLnBhcmVudE5vZGUgPT09IHJvb3QgfHwgISFtYXRjaE5vZGUobm9kZSwgbmFtZSwgdmFycywgdHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIERvIGFuIGV4YWN0IGNoZWNrIG9uIHRoZSBzaW1pbGFyIGZvcm1hdCBlbGVtZW50XG5cdFx0XHRcdHJldHVybiBtYXRjaE5vZGUobm9kZSwgbmFtZSwgdmFycyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIHNwZWNpZmllZCBub2RlXG5cdFx0XHRpZiAobm9kZSkge1xuXHRcdFx0XHRyZXR1cm4gbWF0Y2hQYXJlbnRzKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBzZWxlY3RlZCBub2RlXG5cdFx0XHRub2RlID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcblx0XHRcdGlmIChtYXRjaFBhcmVudHMobm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuIFRSVUU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIHN0YXJ0IG5vZGUgaWYgaXQncyBkaWZmZXJlbnRcblx0XHRcdHN0YXJ0Tm9kZSA9IHNlbGVjdGlvbi5nZXRTdGFydCgpO1xuXHRcdFx0aWYgKHN0YXJ0Tm9kZSAhPSBub2RlKSB7XG5cdFx0XHRcdGlmIChtYXRjaFBhcmVudHMoc3RhcnROb2RlKSkge1xuXHRcdFx0XHRcdHJldHVybiBUUlVFO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBGQUxTRTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBNYXRjaGVzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhZ2FpbnN0IHRoZSBhcnJheSBvZiBmb3JtYXRzIGFuZCByZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggbWF0Y2hpbmcgZm9ybWF0cy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgbWF0Y2hBbGxcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBuYW1lcyBOYW1lIG9mIGZvcm1hdCB0byBtYXRjaC5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdmFycyBPcHRpb25hbCBsaXN0IG9mIHZhcmlhYmxlcyB0byByZXBsYWNlIGJlZm9yZSBjaGVja2luZyBpdC5cblx0XHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgd2l0aCBtYXRjaGVkIGZvcm1hdHMuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gbWF0Y2hBbGwobmFtZXMsIHZhcnMpIHtcblx0XHRcdHZhciBzdGFydEVsZW1lbnQsIG1hdGNoZWRGb3JtYXROYW1lcyA9IFtdLCBjaGVja2VkTWFwID0ge307XG5cblx0XHRcdC8vIENoZWNrIHN0YXJ0IG9mIHNlbGVjdGlvbiBmb3IgZm9ybWF0c1xuXHRcdFx0c3RhcnRFbGVtZW50ID0gc2VsZWN0aW9uLmdldFN0YXJ0KCk7XG5cdFx0XHRkb20uZ2V0UGFyZW50KHN0YXJ0RWxlbWVudCwgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHR2YXIgaSwgbmFtZTtcblxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRuYW1lID0gbmFtZXNbaV07XG5cblx0XHRcdFx0XHRpZiAoIWNoZWNrZWRNYXBbbmFtZV0gJiYgbWF0Y2hOb2RlKG5vZGUsIG5hbWUsIHZhcnMpKSB7XG5cdFx0XHRcdFx0XHRjaGVja2VkTWFwW25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0XHRcdG1hdGNoZWRGb3JtYXROYW1lcy5wdXNoKG5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSwgZG9tLmdldFJvb3QoKSk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVkRm9ybWF0TmFtZXM7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBzcGVjaWZpZWQgZm9ybWF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBvciBub3QuIEl0XG5cdFx0ICogd2lsbCBjdXJyZW50bHkgb25seSBjaGVjayB0aGUgc3RhdGUgZm9yIHNlbGVjdG9yIGZvcm1hdHMsIGl0IHJldHVybnMgdHJ1ZSBvbiBhbGwgb3RoZXIgZm9ybWF0IHR5cGVzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjYW5BcHBseVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgZm9ybWF0IHRvIGNoZWNrLlxuXHRcdCAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIHNwZWNpZmllZCBmb3JtYXQgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uL25vZGUuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gY2FuQXBwbHkobmFtZSkge1xuXHRcdFx0dmFyIGZvcm1hdExpc3QgPSBnZXQobmFtZSksIHN0YXJ0Tm9kZSwgcGFyZW50cywgaSwgeCwgc2VsZWN0b3I7XG5cblx0XHRcdGlmIChmb3JtYXRMaXN0KSB7XG5cdFx0XHRcdHN0YXJ0Tm9kZSA9IHNlbGVjdGlvbi5nZXRTdGFydCgpO1xuXHRcdFx0XHRwYXJlbnRzID0gZ2V0UGFyZW50cyhzdGFydE5vZGUpO1xuXG5cdFx0XHRcdGZvciAoeCA9IGZvcm1hdExpc3QubGVuZ3RoIC0gMTsgeCA+PSAwOyB4LS0pIHtcblx0XHRcdFx0XHRzZWxlY3RvciA9IGZvcm1hdExpc3RbeF0uc2VsZWN0b3I7XG5cblx0XHRcdFx0XHQvLyBGb3JtYXQgaXMgbm90IHNlbGVjdG9yIGJhc2VkIHRoZW4gYWx3YXlzIHJldHVybiBUUlVFXG5cdFx0XHRcdFx0Ly8gSXMgaXQgaGFzIGEgZGVmYXVsdEJsb2NrIHRoZW4gaXQncyBsaWtlbHkgaXQgY2FuIGJlIGFwcGxpZWQgZm9yIGV4YW1wbGUgYWxpZ24gb24gYSBub24gYmxvY2sgZWxlbWVudCBsaW5lXG5cdFx0XHRcdFx0aWYgKCFzZWxlY3RvciB8fCBmb3JtYXRMaXN0W3hdLmRlZmF1bHRCbG9jaykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFRSVUU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yIChpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRcdFx0aWYgKGRvbS5pcyhwYXJlbnRzW2ldLCBzZWxlY3RvcikpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFRSVUU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBGQUxTRTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIHdoZW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIG1hdGNoZXMgdGhlIGZvcm1hdHMgb3Igbm90LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBmb3JtYXRDaGFuZ2VkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdHMgQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZm9ybWF0cyB0byBjaGVjayBmb3IuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgd2l0aCBzdGF0ZSBhbmQgYXJncyB3aGVuIHRoZSBmb3JtYXQgaXMgY2hhbmdlZC90b2dnbGVkIG9uL29mZi5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHNpbWlsYXIgVHJ1ZS9mYWxzZSBzdGF0ZSBpZiB0aGUgbWF0Y2ggc2hvdWxkIGhhbmRsZSBzaW1pbGFyIG9yIGV4YWN0IGZvcm1hdHMuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm9ybWF0Q2hhbmdlZChmb3JtYXRzLCBjYWxsYmFjaywgc2ltaWxhcikge1xuXHRcdFx0dmFyIGN1cnJlbnRGb3JtYXRzO1xuXG5cdFx0XHQvLyBTZXR1cCBmb3JtYXQgbm9kZSBjaGFuZ2UgbG9naWNcblx0XHRcdGlmICghZm9ybWF0Q2hhbmdlRGF0YSkge1xuXHRcdFx0XHRmb3JtYXRDaGFuZ2VEYXRhID0ge307XG5cdFx0XHRcdGN1cnJlbnRGb3JtYXRzID0ge307XG5cblx0XHRcdFx0ZWQub24oJ05vZGVDaGFuZ2UnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGUuZWxlbWVudCksIG1hdGNoZWRGb3JtYXRzID0ge307XG5cblx0XHRcdFx0XHQvLyBJZ25vcmUgYm9ndXMgbm9kZXMgbGlrZSB0aGUgPGE+IHRhZyBjcmVhdGVkIGJ5IG1vdmVTdGFydCgpXG5cdFx0XHRcdFx0cGFyZW50cyA9IFRvb2xzLmdyZXAocGFyZW50cywgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5vZGUubm9kZVR5cGUgPT0gMSAmJiAhbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJyk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBmb3IgbmV3IGZvcm1hdHNcblx0XHRcdFx0XHRlYWNoKGZvcm1hdENoYW5nZURhdGEsIGZ1bmN0aW9uKGNhbGxiYWNrcywgZm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRlYWNoKHBhcmVudHMsIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG1hdGNoTm9kZShub2RlLCBmb3JtYXQsIHt9LCBjYWxsYmFja3Muc2ltaWxhcikpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWN1cnJlbnRGb3JtYXRzW2Zvcm1hdF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdFx0XHRlYWNoKGNhbGxiYWNrcywgZnVuY3Rpb24oY2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sodHJ1ZSwge25vZGU6IG5vZGUsIGZvcm1hdDogZm9ybWF0LCBwYXJlbnRzOiBwYXJlbnRzfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudEZvcm1hdHNbZm9ybWF0XSA9IGNhbGxiYWNrcztcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRtYXRjaGVkRm9ybWF0c1tmb3JtYXRdID0gY2FsbGJhY2tzO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChtYXRjaGVzVW5Jbmhlcml0ZWRGb3JtYXRTZWxlY3Rvcihub2RlLCBmb3JtYXQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGN1cnJlbnQgZm9ybWF0cyBzdGlsbCBtYXRjaFxuXHRcdFx0XHRcdGVhY2goY3VycmVudEZvcm1hdHMsIGZ1bmN0aW9uKGNhbGxiYWNrcywgZm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRpZiAoIW1hdGNoZWRGb3JtYXRzW2Zvcm1hdF0pIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGN1cnJlbnRGb3JtYXRzW2Zvcm1hdF07XG5cblx0XHRcdFx0XHRcdFx0ZWFjaChjYWxsYmFja3MsIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2soZmFsc2UsIHtub2RlOiBlLmVsZW1lbnQsIGZvcm1hdDogZm9ybWF0LCBwYXJlbnRzOiBwYXJlbnRzfSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGZvcm1hdCBsaXN0ZW5lcnNcblx0XHRcdGVhY2goZm9ybWF0cy5zcGxpdCgnLCcpLCBmdW5jdGlvbihmb3JtYXQpIHtcblx0XHRcdFx0aWYgKCFmb3JtYXRDaGFuZ2VEYXRhW2Zvcm1hdF0pIHtcblx0XHRcdFx0XHRmb3JtYXRDaGFuZ2VEYXRhW2Zvcm1hdF0gPSBbXTtcblx0XHRcdFx0XHRmb3JtYXRDaGFuZ2VEYXRhW2Zvcm1hdF0uc2ltaWxhciA9IHNpbWlsYXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3JtYXRDaGFuZ2VEYXRhW2Zvcm1hdF0ucHVzaChjYWxsYmFjayk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIHByZXZpZXcgY3NzIHRleHQgZm9yIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRDc3NUZXh0XG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvT2JqZWN0fSBmb3JtYXQgRm9ybWF0IHRvIGdlbmVyYXRlIHByZXZpZXcgY3NzIHRleHQgZm9yLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gQ3NzIHRleHQgZm9yIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIGNzc1RleHQxID0gZWRpdG9yLmZvcm1hdHRlci5nZXRDc3NUZXh0KCdib2xkJyk7XG5cdFx0ICogdmFyIGNzc1RleHQyID0gZWRpdG9yLmZvcm1hdHRlci5nZXRDc3NUZXh0KHtpbmxpbmU6ICdiJ30pO1xuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGdldENzc1RleHQoZm9ybWF0KSB7XG5cdFx0XHRyZXR1cm4gUHJldmlldy5nZXRDc3NUZXh0KGVkLCBmb3JtYXQpO1xuXHRcdH1cblxuXHRcdC8vIEV4cG9zZSB0byBwdWJsaWNcblx0XHRleHRlbmQodGhpcywge1xuXHRcdFx0Z2V0OiBnZXQsXG5cdFx0XHRyZWdpc3RlcjogcmVnaXN0ZXIsXG5cdFx0XHR1bnJlZ2lzdGVyOiB1bnJlZ2lzdGVyLFxuXHRcdFx0YXBwbHk6IGFwcGx5LFxuXHRcdFx0cmVtb3ZlOiByZW1vdmUsXG5cdFx0XHR0b2dnbGU6IHRvZ2dsZSxcblx0XHRcdG1hdGNoOiBtYXRjaCxcblx0XHRcdG1hdGNoQWxsOiBtYXRjaEFsbCxcblx0XHRcdG1hdGNoTm9kZTogbWF0Y2hOb2RlLFxuXHRcdFx0Y2FuQXBwbHk6IGNhbkFwcGx5LFxuXHRcdFx0Zm9ybWF0Q2hhbmdlZDogZm9ybWF0Q2hhbmdlZCxcblx0XHRcdGdldENzc1RleHQ6IGdldENzc1RleHRcblx0XHR9KTtcblxuXHRcdC8vIEluaXRpYWxpemVcblx0XHRkZWZhdWx0Rm9ybWF0cygpO1xuXHRcdGFkZEtleWJvYXJkU2hvcnRjdXRzKCk7XG5cdFx0ZWQub24oJ0JlZm9yZUdldENvbnRlbnQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRpZiAobWFya0NhcmV0Q29udGFpbmVyc0JvZ3VzICYmIGUuZm9ybWF0ICE9ICdyYXcnKSB7XG5cdFx0XHRcdG1hcmtDYXJldENvbnRhaW5lcnNCb2d1cygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGVkLm9uKCdtb3VzZXVwIGtleWRvd24nLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRpZiAoZGlzYWJsZUNhcmV0Q29udGFpbmVyKSB7XG5cdFx0XHRcdGRpc2FibGVDYXJldENvbnRhaW5lcihlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIFByaXZhdGUgZnVuY3Rpb25zXG5cblx0XHQvKipcblx0XHQgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmllZCBub2RlcyBuYW1lIG1hdGNoZXMgdGhlIGZvcm1hdCBpbmxpbmUvYmxvY2sgb3Igc2VsZWN0b3IuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRvIG1hdGNoIGFnYWluc3QgdGhlIHNwZWNpZmllZCBmb3JtYXQuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZvcm1hdCBGb3JtYXQgb2JqZWN0IG8gbWF0Y2ggd2l0aC5cblx0XHQgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBmb3JtYXQgbWF0Y2hlcy5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBtYXRjaE5hbWUobm9kZSwgZm9ybWF0KSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgaW5saW5lIG1hdGNoXG5cdFx0XHRpZiAoaXNFcShub2RlLCBmb3JtYXQuaW5saW5lKSkge1xuXHRcdFx0XHRyZXR1cm4gVFJVRTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGJsb2NrIG1hdGNoXG5cdFx0XHRpZiAoaXNFcShub2RlLCBmb3JtYXQuYmxvY2spKSB7XG5cdFx0XHRcdHJldHVybiBUUlVFO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBmb3Igc2VsZWN0b3IgbWF0Y2hcblx0XHRcdGlmIChmb3JtYXQuc2VsZWN0b3IpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGUubm9kZVR5cGUgPT0gMSAmJiBkb20uaXMobm9kZSwgZm9ybWF0LnNlbGVjdG9yKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBDb21wYXJlcyB0d28gc3RyaW5nL25vZGVzIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgY2FzZS5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvTm9kZX0gc3RyMSBOb2RlIG9yIHN0cmluZyB0byBjb21wYXJlLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL05vZGV9IHN0cjIgTm9kZSBvciBzdHJpbmcgdG8gY29tcGFyZS5cblx0XHQgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlL2ZhbHNlIGlmIHRoZXkgbWF0Y2guXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gaXNFcShzdHIxLCBzdHIyKSB7XG5cdFx0XHRzdHIxID0gc3RyMSB8fCAnJztcblx0XHRcdHN0cjIgPSBzdHIyIHx8ICcnO1xuXG5cdFx0XHRzdHIxID0gJycgKyAoc3RyMS5ub2RlTmFtZSB8fCBzdHIxKTtcblx0XHRcdHN0cjIgPSAnJyArIChzdHIyLm5vZGVOYW1lIHx8IHN0cjIpO1xuXG5cdFx0XHRyZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpID09IHN0cjIudG9Mb3dlckNhc2UoKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwcm9jZXNzQ2hpbGRFbGVtZW50cyhub2RlLCBmaWx0ZXIsIHByb2Nlc3MpIHtcblx0XHRcdGVhY2gobm9kZS5jaGlsZE5vZGVzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdGlmIChpc0VsZW1lbnROb2RlKG5vZGUpKSB7XG5cdFx0XHRcdFx0aWYgKGZpbHRlcihub2RlKSkge1xuXHRcdFx0XHRcdFx0cHJvY2Vzcyhub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0XHRwcm9jZXNzQ2hpbGRFbGVtZW50cyhub2RlLCBmaWx0ZXIsIHByb2Nlc3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShub2RlKSB7XG5cdFx0XHRyZXR1cm4gbm9kZS5ub2RlVHlwZSA9PSAxICYmICFpc0Jvb2ttYXJrTm9kZShub2RlKSAmJiAhaXNXaGl0ZVNwYWNlTm9kZShub2RlKSAmJiAhaXNDYXJldE5vZGUobm9kZSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFzU3R5bGUobmFtZSkge1xuXHRcdFx0cmV0dXJuIEZ1bi5jdXJyeShmdW5jdGlvbihuYW1lLCBub2RlKSB7XG5cdFx0XHRcdHJldHVybiAhIShub2RlICYmIGdldFN0eWxlKG5vZGUsIG5hbWUpKTtcblx0XHRcdH0sIG5hbWUpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFwcGx5U3R5bGUobmFtZSwgdmFsdWUpIHtcblx0XHRcdHJldHVybiBGdW4uY3VycnkoZnVuY3Rpb24obmFtZSwgdmFsdWUsIG5vZGUpIHtcblx0XHRcdFx0ZG9tLnNldFN0eWxlKG5vZGUsIG5hbWUsIHZhbHVlKTtcblx0XHRcdH0sIG5hbWUsIHZhbHVlKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBzdHlsZSBieSBuYW1lIG9uIHRoZSBzcGVjaWZpZWQgbm9kZS4gVGhpcyBtZXRob2QgbW9kaWZpZXMgdGhlIHN0eWxlXG5cdFx0ICogY29udGVudHMgdG8gbWFrZSBpdCBtb3JlIGVhc3kgdG8gbWF0Y2guIFRoaXMgd2lsbCByZXNvbHZlIGEgZmV3IGJyb3dzZXIgaXNzdWVzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgdG8gZ2V0IHN0eWxlIGZyb20uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgU3R5bGUgbmFtZSB0byBnZXQuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBTdHlsZSBpdGVtIHZhbHVlLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGdldFN0eWxlKG5vZGUsIG5hbWUpIHtcblx0XHRcdHJldHVybiBub3JtYWxpemVTdHlsZVZhbHVlKGRvbS5nZXRTdHlsZShub2RlLCBuYW1lKSwgbmFtZSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogTm9ybWFsaXplIHN0eWxlIHZhbHVlIGJ5IG5hbWUuIFRoaXMgbWV0aG9kIG1vZGlmaWVzIHRoZSBzdHlsZSBjb250ZW50c1xuXHRcdCAqIHRvIG1ha2UgaXQgbW9yZSBlYXN5IHRvIG1hdGNoLiBUaGlzIHdpbGwgcmVzb2x2ZSBhIGZldyBicm93c2VyIGlzc3Vlcy5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIFZhbHVlIHRvIGdldCBzdHlsZSBmcm9tLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFN0eWxlIG5hbWUgdG8gZ2V0LlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gU3R5bGUgaXRlbSB2YWx1ZS5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBub3JtYWxpemVTdHlsZVZhbHVlKHZhbHVlLCBuYW1lKSB7XG5cdFx0XHQvLyBGb3JjZSB0aGUgZm9ybWF0IHRvIGhleFxuXHRcdFx0aWYgKG5hbWUgPT0gJ2NvbG9yJyB8fCBuYW1lID09ICdiYWNrZ3JvdW5kQ29sb3InKSB7XG5cdFx0XHRcdHZhbHVlID0gZG9tLnRvSGV4KHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3BlcmEgd2lsbCByZXR1cm4gYm9sZCBhcyA3MDBcblx0XHRcdGlmIChuYW1lID09ICdmb250V2VpZ2h0JyAmJiB2YWx1ZSA9PSA3MDApIHtcblx0XHRcdFx0dmFsdWUgPSAnYm9sZCc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5vcm1hbGl6ZSBmb250RmFtaWx5IHNvIFwiJ0ZvbnQgbmFtZScsIEZvbnRcIiBiZWNvbWVzOiBcIkZvbnQgbmFtZSxGb250XCJcblx0XHRcdGlmIChuYW1lID09ICdmb250RmFtaWx5Jykge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1tcXCdcXFwiXS9nLCAnJykucmVwbGFjZSgvLFxccysvZywgJywnKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICcnICsgdmFsdWU7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmVwbGFjZXMgdmFyaWFibGVzIGluIHRoZSB2YWx1ZS4gVGhlIHZhcmlhYmxlIGZvcm1hdCBpcyAldmFyLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgVmFsdWUgdG8gcmVwbGFjZSB2YXJpYWJsZXMgaW4uXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHZhcnMgTmFtZS92YWx1ZSBhcnJheSB3aXRoIHZhcmlhYmxlcyB0byByZXBsYWNlLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gTmV3IHZhbHVlIHdpdGggcmVwbGFjZWQgdmFyaWFibGVzLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHJlcGxhY2VWYXJzKHZhbHVlLCB2YXJzKSB7XG5cdFx0XHRpZiAodHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSh2YXJzKTtcblx0XHRcdH0gZWxzZSBpZiAodmFycykge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyUoXFx3KykvZywgZnVuY3Rpb24oc3RyLCBuYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhcnNbbmFtZV0gfHwgc3RyO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzV2hpdGVTcGFjZU5vZGUobm9kZSkge1xuXHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMyAmJiAvXihbXFx0IFxcclxcbl0rfCkkLy50ZXN0KG5vZGUubm9kZVZhbHVlKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB3cmFwKG5vZGUsIG5hbWUsIGF0dHJzKSB7XG5cdFx0XHR2YXIgd3JhcHBlciA9IGRvbS5jcmVhdGUobmFtZSwgYXR0cnMpO1xuXG5cdFx0XHRub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIG5vZGUpO1xuXHRcdFx0d3JhcHBlci5hcHBlbmRDaGlsZChub2RlKTtcblxuXHRcdFx0cmV0dXJuIHdyYXBwZXI7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRXhwYW5kcyB0aGUgc3BlY2lmaWVkIHJhbmdlIGxpa2Ugb2JqZWN0IHRvIGRlcGVuZGluZyBvbiBmb3JtYXQuXG5cdFx0ICpcblx0XHQgKiBGb3IgZXhhbXBsZSBvbiBibG9jayBmb3JtYXRzIGl0IHdpbGwgbW92ZSB0aGUgc3RhcnQvZW5kIHBvc2l0aW9uXG5cdFx0ICogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBibG9jay5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHJuZyBSYW5nZSBsaWtlIG9iamVjdC5cblx0XHQgKiBAcGFyYW0ge0FycmF5fSBmb3JtYXQgQXJyYXkgd2l0aCBmb3JtYXRzIHRvIGV4cGFuZCBieS5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbW92ZVxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gRXhwYW5kZWQgcmFuZ2UgbGlrZSBvYmplY3QuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZXhwYW5kUm5nKHJuZywgZm9ybWF0LCByZW1vdmUpIHtcblx0XHRcdHZhciBsYXN0SWR4LCBsZWFmLCBlbmRQb2ludCxcblx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXIsXG5cdFx0XHRcdHN0YXJ0T2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0LFxuXHRcdFx0XHRlbmRDb250YWluZXIgPSBybmcuZW5kQ29udGFpbmVyLFxuXHRcdFx0XHRlbmRPZmZzZXQgPSBybmcuZW5kT2Zmc2V0O1xuXG5cdFx0XHQvLyBUaGlzIGZ1bmN0aW9uIHdhbGtzIHVwIHRoZSB0cmVlIGlmIHRoZXJlIGlzIG5vIHNpYmxpbmdzIGJlZm9yZS9hZnRlciB0aGUgbm9kZVxuXHRcdFx0ZnVuY3Rpb24gZmluZFBhcmVudENvbnRhaW5lcihzdGFydCkge1xuXHRcdFx0XHR2YXIgY29udGFpbmVyLCBwYXJlbnQsIHNpYmxpbmcsIHNpYmxpbmdOYW1lLCByb290O1xuXG5cdFx0XHRcdGNvbnRhaW5lciA9IHBhcmVudCA9IHN0YXJ0ID8gc3RhcnRDb250YWluZXIgOiBlbmRDb250YWluZXI7XG5cdFx0XHRcdHNpYmxpbmdOYW1lID0gc3RhcnQgPyAncHJldmlvdXNTaWJsaW5nJyA6ICduZXh0U2libGluZyc7XG5cdFx0XHRcdHJvb3QgPSBkb20uZ2V0Um9vdCgpO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIGlzQm9ndXNCcihub2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5vZGUubm9kZU5hbWUgPT0gXCJCUlwiICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpICYmICFub2RlLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgaXQncyBhIHRleHQgbm9kZSBhbmQgdGhlIG9mZnNldCBpcyBpbnNpZGUgdGhlIHRleHRcblx0XHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzICYmICFpc1doaXRlU3BhY2VOb2RlKGNvbnRhaW5lcikpIHtcblx0XHRcdFx0XHRpZiAoc3RhcnQgPyBzdGFydE9mZnNldCA+IDAgOiBlbmRPZmZzZXQgPCBjb250YWluZXIubm9kZVZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRhaW5lcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvKmVzbGludCBuby1jb25zdGFudC1jb25kaXRpb246MCAqL1xuXHRcdFx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0XHRcdC8vIFN0b3AgZXhwYW5kaW5nIG9uIGJsb2NrIGVsZW1lbnRzXG5cdFx0XHRcdFx0aWYgKCFmb3JtYXRbMF0uYmxvY2tfZXhwYW5kICYmIGlzQmxvY2socGFyZW50KSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHBhcmVudDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBXYWxrIGxlZnQvcmlnaHRcblx0XHRcdFx0XHRmb3IgKHNpYmxpbmcgPSBwYXJlbnRbc2libGluZ05hbWVdOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZ1tzaWJsaW5nTmFtZV0pIHtcblx0XHRcdFx0XHRcdGlmICghaXNCb29rbWFya05vZGUoc2libGluZykgJiYgIWlzV2hpdGVTcGFjZU5vZGUoc2libGluZykgJiYgIWlzQm9ndXNCcihzaWJsaW5nKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcGFyZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENoZWNrIGlmIHdlIGNhbiBtb3ZlIHVwIGFyZSB3ZSBhdCByb290IGxldmVsIG9yIGJvZHkgbGV2ZWxcblx0XHRcdFx0XHRpZiAocGFyZW50ID09IHJvb3QgfHwgcGFyZW50LnBhcmVudE5vZGUgPT0gcm9vdCkge1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gY29udGFpbmVyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGlzIGZ1bmN0aW9uIHdhbGtzIGRvd24gdGhlIHRyZWUgdG8gZmluZCB0aGUgbGVhZiBhdCB0aGUgc2VsZWN0aW9uLlxuXHRcdFx0Ly8gVGhlIG9mZnNldCBpcyBhbHNvIHJldHVybmVkIGFzIGlmIG5vZGUgaW5pdGlhbGx5IGEgbGVhZiwgdGhlIG9mZnNldCBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dCBub2RlLlxuXHRcdFx0ZnVuY3Rpb24gZmluZExlYWYobm9kZSwgb2Zmc2V0KSB7XG5cdFx0XHRcdGlmIChvZmZzZXQgPT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gbm9kZS5ub2RlVHlwZSA9PT0gMyA/IG5vZGUubGVuZ3RoIDogbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHdoaWxlIChub2RlICYmIG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUuY2hpbGROb2Rlc1tvZmZzZXRdO1xuXHRcdFx0XHRcdGlmIChub2RlKSB7XG5cdFx0XHRcdFx0XHRvZmZzZXQgPSBub2RlLm5vZGVUeXBlID09PSAzID8gbm9kZS5sZW5ndGggOiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4ge25vZGU6IG5vZGUsIG9mZnNldDogb2Zmc2V0fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgaW5kZXggYmFzZWQgc3RhcnQgcG9zaXRpb24gdGhlbiByZXNvbHZlIGl0XG5cdFx0XHRpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT0gMSAmJiBzdGFydENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0bGFzdElkeCA9IHN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTtcblx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3N0YXJ0T2Zmc2V0ID4gbGFzdElkeCA/IGxhc3RJZHggOiBzdGFydE9mZnNldF07XG5cblx0XHRcdFx0aWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRzdGFydE9mZnNldCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgaW5kZXggYmFzZWQgZW5kIHBvc2l0aW9uIHRoZW4gcmVzb2x2ZSBpdFxuXHRcdFx0aWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSA9PSAxICYmIGVuZENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0bGFzdElkeCA9IGVuZENvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG5cdFx0XHRcdGVuZENvbnRhaW5lciA9IGVuZENvbnRhaW5lci5jaGlsZE5vZGVzW2VuZE9mZnNldCA+IGxhc3RJZHggPyBsYXN0SWR4IDogZW5kT2Zmc2V0IC0gMV07XG5cblx0XHRcdFx0aWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0ZW5kT2Zmc2V0ID0gZW5kQ29udGFpbmVyLm5vZGVWYWx1ZS5sZW5ndGg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRXhwYW5kcyB0aGUgbm9kZSB0byB0aGUgY2xvc2VzIGNvbnRlbnRFZGl0YWJsZSBmYWxzZSBlbGVtZW50IGlmIGl0IGV4aXN0c1xuXHRcdFx0ZnVuY3Rpb24gZmluZFBhcmVudENvbnRlbnRFZGl0YWJsZShub2RlKSB7XG5cdFx0XHRcdHZhciBwYXJlbnQgPSBub2RlO1xuXG5cdFx0XHRcdHdoaWxlIChwYXJlbnQpIHtcblx0XHRcdFx0XHRpZiAocGFyZW50Lm5vZGVUeXBlID09PSAxICYmIGdldENvbnRlbnRFZGl0YWJsZShwYXJlbnQpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0Q29udGVudEVkaXRhYmxlKHBhcmVudCkgPT09IFwiZmFsc2VcIiA/IHBhcmVudCA6IG5vZGU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZmluZFdvcmRFbmRQb2ludChjb250YWluZXIsIG9mZnNldCwgc3RhcnQpIHtcblx0XHRcdFx0dmFyIHdhbGtlciwgbm9kZSwgcG9zLCBsYXN0VGV4dE5vZGU7XG5cblx0XHRcdFx0ZnVuY3Rpb24gZmluZFNwYWNlKG5vZGUsIG9mZnNldCkge1xuXHRcdFx0XHRcdHZhciBwb3MsIHBvczIsIHN0ciA9IG5vZGUubm9kZVZhbHVlO1xuXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBvZmZzZXQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0b2Zmc2V0ID0gc3RhcnQgPyBzdHIubGVuZ3RoIDogMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdHBvcyA9IHN0ci5sYXN0SW5kZXhPZignICcsIG9mZnNldCk7XG5cdFx0XHRcdFx0XHRwb3MyID0gc3RyLmxhc3RJbmRleE9mKCdcXHUwMGEwJywgb2Zmc2V0KTtcblx0XHRcdFx0XHRcdHBvcyA9IHBvcyA+IHBvczIgPyBwb3MgOiBwb3MyO1xuXG5cdFx0XHRcdFx0XHQvLyBJbmNsdWRlIHRoZSBzcGFjZSBvbiByZW1vdmUgdG8gYXZvaWQgdGFnIHNvdXBcblx0XHRcdFx0XHRcdGlmIChwb3MgIT09IC0xICYmICFyZW1vdmUpIHtcblx0XHRcdFx0XHRcdFx0cG9zKys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHBvcyA9IHN0ci5pbmRleE9mKCcgJywgb2Zmc2V0KTtcblx0XHRcdFx0XHRcdHBvczIgPSBzdHIuaW5kZXhPZignXFx1MDBhMCcsIG9mZnNldCk7XG5cdFx0XHRcdFx0XHRwb3MgPSBwb3MgIT09IC0xICYmIChwb3MyID09PSAtMSB8fCBwb3MgPCBwb3MyKSA/IHBvcyA6IHBvczI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHBvcztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IDMpIHtcblx0XHRcdFx0XHRwb3MgPSBmaW5kU3BhY2UoY29udGFpbmVyLCBvZmZzZXQpO1xuXG5cdFx0XHRcdFx0aWYgKHBvcyAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdHJldHVybiB7Y29udGFpbmVyOiBjb250YWluZXIsIG9mZnNldDogcG9zfTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRsYXN0VGV4dE5vZGUgPSBjb250YWluZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXYWxrIHRoZSBub2RlcyBpbnNpZGUgdGhlIGJsb2NrXG5cdFx0XHRcdHdhbGtlciA9IG5ldyBUcmVlV2Fsa2VyKGNvbnRhaW5lciwgZG9tLmdldFBhcmVudChjb250YWluZXIsIGlzQmxvY2spIHx8IGVkLmdldEJvZHkoKSk7XG5cdFx0XHRcdHdoaWxlICgobm9kZSA9IHdhbGtlcltzdGFydCA/ICdwcmV2JyA6ICduZXh0J10oKSkpIHtcblx0XHRcdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuXHRcdFx0XHRcdFx0bGFzdFRleHROb2RlID0gbm9kZTtcblx0XHRcdFx0XHRcdHBvcyA9IGZpbmRTcGFjZShub2RlKTtcblxuXHRcdFx0XHRcdFx0aWYgKHBvcyAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtjb250YWluZXI6IG5vZGUsIG9mZnNldDogcG9zfTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzQmxvY2sobm9kZSkpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChsYXN0VGV4dE5vZGUpIHtcblx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdG9mZnNldCA9IDA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9mZnNldCA9IGxhc3RUZXh0Tm9kZS5sZW5ndGg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHtjb250YWluZXI6IGxhc3RUZXh0Tm9kZSwgb2Zmc2V0OiBvZmZzZXR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZpbmRTZWxlY3RvckVuZFBvaW50KGNvbnRhaW5lciwgc2libGluZ19uYW1lKSB7XG5cdFx0XHRcdHZhciBwYXJlbnRzLCBpLCB5LCBjdXJGb3JtYXQ7XG5cblx0XHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzICYmIGNvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoID09PSAwICYmIGNvbnRhaW5lcltzaWJsaW5nX25hbWVdKSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyID0gY29udGFpbmVyW3NpYmxpbmdfbmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwYXJlbnRzID0gZ2V0UGFyZW50cyhjb250YWluZXIpO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGZvciAoeSA9IDA7IHkgPCBmb3JtYXQubGVuZ3RoOyB5KyspIHtcblx0XHRcdFx0XHRcdGN1ckZvcm1hdCA9IGZvcm1hdFt5XTtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29sbGFwc2VkIHN0YXRlIGlzIHNldCB0aGVuIHNraXAgZm9ybWF0cyB0aGF0IGRvZXNuJ3QgbWF0Y2ggdGhhdFxuXHRcdFx0XHRcdFx0aWYgKFwiY29sbGFwc2VkXCIgaW4gY3VyRm9ybWF0ICYmIGN1ckZvcm1hdC5jb2xsYXBzZWQgIT09IHJuZy5jb2xsYXBzZWQpIHtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChkb20uaXMocGFyZW50c1tpXSwgY3VyRm9ybWF0LnNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcGFyZW50c1tpXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gY29udGFpbmVyO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBmaW5kQmxvY2tFbmRQb2ludChjb250YWluZXIsIHNpYmxpbmdfbmFtZSkge1xuXHRcdFx0XHR2YXIgbm9kZSwgcm9vdCA9IGRvbS5nZXRSb290KCk7XG5cblx0XHRcdFx0Ly8gRXhwYW5kIHRvIGJsb2NrIG9mIHNpbWlsYXIgdHlwZVxuXHRcdFx0XHRpZiAoIWZvcm1hdFswXS53cmFwcGVyKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBmb3JtYXRbMF0uYmxvY2ssIHJvb3QpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRXhwYW5kIHRvIGZpcnN0IHdyYXBwYWJsZSBibG9jayBlbGVtZW50IG9yIGFueSBibG9jayBlbGVtZW50XG5cdFx0XHRcdGlmICghbm9kZSkge1xuXHRcdFx0XHRcdG5vZGUgPSBkb20uZ2V0UGFyZW50KGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXIsIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHRcdC8vIEZpeGVzICM2MTgzIHdoZXJlIGl0IHdvdWxkIGV4cGFuZCB0byBlZGl0YWJsZSBwYXJlbnQgZWxlbWVudCBpbiBpbmxpbmUgbW9kZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG5vZGUgIT0gcm9vdCAmJiBpc1RleHRCbG9jayhub2RlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEV4Y2x1ZGUgaW5uZXIgbGlzdHMgZnJvbSB3cmFwcGluZ1xuXHRcdFx0XHRpZiAobm9kZSAmJiBmb3JtYXRbMF0ud3JhcHBlcikge1xuXHRcdFx0XHRcdG5vZGUgPSBnZXRQYXJlbnRzKG5vZGUsICd1bCxvbCcpLnJldmVyc2UoKVswXSB8fCBub2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRGlkbid0IGZpbmQgYSBibG9jayBlbGVtZW50IGxvb2sgZm9yIGZpcnN0L2xhc3Qgd3JhcHBhYmxlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGNvbnRhaW5lcjtcblxuXHRcdFx0XHRcdHdoaWxlIChub2RlW3NpYmxpbmdfbmFtZV0gJiYgIWlzQmxvY2sobm9kZVtzaWJsaW5nX25hbWVdKSkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVbc2libGluZ19uYW1lXTtcblxuXHRcdFx0XHRcdFx0Ly8gQnJlYWsgb24gQlIgYnV0IGluY2x1ZGUgaXQgd2lsbCBiZSByZW1vdmVkIGxhdGVyIG9uXG5cdFx0XHRcdFx0XHQvLyB3ZSBjYW4ndCByZW1vdmUgaXQgbm93IHNpbmNlIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgY2FuIGJlIHdyYXBwZWRcblx0XHRcdFx0XHRcdGlmIChpc0VxKG5vZGUsICdicicpKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBub2RlIHx8IGNvbnRhaW5lcjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRXhwYW5kIHRvIGNsb3Nlc3QgY29udGVudEVkaXRhYmxlIGVsZW1lbnRcblx0XHRcdHN0YXJ0Q29udGFpbmVyID0gZmluZFBhcmVudENvbnRlbnRFZGl0YWJsZShzdGFydENvbnRhaW5lcik7XG5cdFx0XHRlbmRDb250YWluZXIgPSBmaW5kUGFyZW50Q29udGVudEVkaXRhYmxlKGVuZENvbnRhaW5lcik7XG5cblx0XHRcdC8vIEV4Y2x1ZGUgYm9va21hcmsgbm9kZXMgaWYgcG9zc2libGVcblx0XHRcdGlmIChpc0Jvb2ttYXJrTm9kZShzdGFydENvbnRhaW5lci5wYXJlbnROb2RlKSB8fCBpc0Jvb2ttYXJrTm9kZShzdGFydENvbnRhaW5lcikpIHtcblx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBpc0Jvb2ttYXJrTm9kZShzdGFydENvbnRhaW5lcikgPyBzdGFydENvbnRhaW5lciA6IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG5cdFx0XHRcdHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIubmV4dFNpYmxpbmcgfHwgc3RhcnRDb250YWluZXI7XG5cblx0XHRcdFx0aWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRzdGFydE9mZnNldCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQm9va21hcmtOb2RlKGVuZENvbnRhaW5lci5wYXJlbnROb2RlKSB8fCBpc0Jvb2ttYXJrTm9kZShlbmRDb250YWluZXIpKSB7XG5cdFx0XHRcdGVuZENvbnRhaW5lciA9IGlzQm9va21hcmtOb2RlKGVuZENvbnRhaW5lcikgPyBlbmRDb250YWluZXIgOiBlbmRDb250YWluZXIucGFyZW50Tm9kZTtcblx0XHRcdFx0ZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyLnByZXZpb3VzU2libGluZyB8fCBlbmRDb250YWluZXI7XG5cblx0XHRcdFx0aWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0ZW5kT2Zmc2V0ID0gZW5kQ29udGFpbmVyLmxlbmd0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm9ybWF0WzBdLmlubGluZSkge1xuXHRcdFx0XHRpZiAocm5nLmNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdC8vIEV4cGFuZCBsZWZ0IHRvIGNsb3Nlc3Qgd29yZCBib3VuZGFyeVxuXHRcdFx0XHRcdGVuZFBvaW50ID0gZmluZFdvcmRFbmRQb2ludChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIHRydWUpO1xuXHRcdFx0XHRcdGlmIChlbmRQb2ludCkge1xuXHRcdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBlbmRQb2ludC5jb250YWluZXI7XG5cdFx0XHRcdFx0XHRzdGFydE9mZnNldCA9IGVuZFBvaW50Lm9mZnNldDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgcmlnaHQgdG8gY2xvc2VzdCB3b3JkIGJvdW5kYXJ5XG5cdFx0XHRcdFx0ZW5kUG9pbnQgPSBmaW5kV29yZEVuZFBvaW50KGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KTtcblx0XHRcdFx0XHRpZiAoZW5kUG9pbnQpIHtcblx0XHRcdFx0XHRcdGVuZENvbnRhaW5lciA9IGVuZFBvaW50LmNvbnRhaW5lcjtcblx0XHRcdFx0XHRcdGVuZE9mZnNldCA9IGVuZFBvaW50Lm9mZnNldDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdm9pZCBhcHBseWluZyBmb3JtYXR0aW5nIHRvIGEgdHJhaWxpbmcgc3BhY2UuXG5cdFx0XHRcdGxlYWYgPSBmaW5kTGVhZihlbmRDb250YWluZXIsIGVuZE9mZnNldCk7XG5cdFx0XHRcdGlmIChsZWFmLm5vZGUpIHtcblx0XHRcdFx0XHR3aGlsZSAobGVhZi5ub2RlICYmIGxlYWYub2Zmc2V0ID09PSAwICYmIGxlYWYubm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0XHRcdGxlYWYgPSBmaW5kTGVhZihsZWFmLm5vZGUucHJldmlvdXNTaWJsaW5nKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobGVhZi5ub2RlICYmIGxlYWYub2Zmc2V0ID4gMCAmJiBsZWFmLm5vZGUubm9kZVR5cGUgPT09IDMgJiZcblx0XHRcdFx0XHRcdFx0bGVhZi5ub2RlLm5vZGVWYWx1ZS5jaGFyQXQobGVhZi5vZmZzZXQgLSAxKSA9PT0gJyAnKSB7XG5cblx0XHRcdFx0XHRcdGlmIChsZWFmLm9mZnNldCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0ZW5kQ29udGFpbmVyID0gbGVhZi5ub2RlO1xuXHRcdFx0XHRcdFx0XHRlbmRDb250YWluZXIuc3BsaXRUZXh0KGxlYWYub2Zmc2V0IC0gMSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1vdmUgc3RhcnQvZW5kIHBvaW50IHVwIHRoZSB0cmVlIGlmIHRoZSBsZWF2ZXMgYXJlIHNoYXJwIGFuZCBpZiB3ZSBhcmUgaW4gZGlmZmVyZW50IGNvbnRhaW5lcnNcblx0XHRcdC8vIEV4YW1wbGUgKiBiZWNvbWVzICE6ICE8cD48Yj48aT4qdGV4dDwvaT48aT50ZXh0KjwvaT48L2I+PC9wPiFcblx0XHRcdC8vIFRoaXMgd2lsbCByZWR1Y2UgdGhlIG51bWJlciBvZiB3cmFwcGVyIGVsZW1lbnRzIHRoYXQgbmVlZHMgdG8gYmUgY3JlYXRlZFxuXHRcdFx0Ly8gTW92ZSBzdGFydCBwb2ludCB1cCB0aGUgdHJlZVxuXHRcdFx0aWYgKGZvcm1hdFswXS5pbmxpbmUgfHwgZm9ybWF0WzBdLmJsb2NrX2V4cGFuZCkge1xuXHRcdFx0XHRpZiAoIWZvcm1hdFswXS5pbmxpbmUgfHwgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9IDMgfHwgc3RhcnRPZmZzZXQgPT09IDApKSB7XG5cdFx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBmaW5kUGFyZW50Q29udGFpbmVyKHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFmb3JtYXRbMF0uaW5saW5lIHx8IChlbmRDb250YWluZXIubm9kZVR5cGUgIT0gMyB8fCBlbmRPZmZzZXQgPT09IGVuZENvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoKSkge1xuXHRcdFx0XHRcdGVuZENvbnRhaW5lciA9IGZpbmRQYXJlbnRDb250YWluZXIoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBFeHBhbmQgc3RhcnQvZW5kIGNvbnRhaW5lciB0byBtYXRjaGluZyBzZWxlY3RvclxuXHRcdFx0aWYgKGZvcm1hdFswXS5zZWxlY3RvciAmJiBmb3JtYXRbMF0uZXhwYW5kICE9PSBGQUxTRSAmJiAhZm9ybWF0WzBdLmlubGluZSkge1xuXHRcdFx0XHQvLyBGaW5kIG5ldyBzdGFydENvbnRhaW5lci9lbmRDb250YWluZXIgaWYgdGhlcmUgaXMgYmV0dGVyIG9uZVxuXHRcdFx0XHRzdGFydENvbnRhaW5lciA9IGZpbmRTZWxlY3RvckVuZFBvaW50KHN0YXJ0Q29udGFpbmVyLCAncHJldmlvdXNTaWJsaW5nJyk7XG5cdFx0XHRcdGVuZENvbnRhaW5lciA9IGZpbmRTZWxlY3RvckVuZFBvaW50KGVuZENvbnRhaW5lciwgJ25leHRTaWJsaW5nJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEV4cGFuZCBzdGFydC9lbmQgY29udGFpbmVyIHRvIG1hdGNoaW5nIGJsb2NrIGVsZW1lbnQgb3IgdGV4dCBub2RlXG5cdFx0XHRpZiAoZm9ybWF0WzBdLmJsb2NrIHx8IGZvcm1hdFswXS5zZWxlY3Rvcikge1xuXHRcdFx0XHQvLyBGaW5kIG5ldyBzdGFydENvbnRhaW5lci9lbmRDb250YWluZXIgaWYgdGhlcmUgaXMgYmV0dGVyIG9uZVxuXHRcdFx0XHRzdGFydENvbnRhaW5lciA9IGZpbmRCbG9ja0VuZFBvaW50KHN0YXJ0Q29udGFpbmVyLCAncHJldmlvdXNTaWJsaW5nJyk7XG5cdFx0XHRcdGVuZENvbnRhaW5lciA9IGZpbmRCbG9ja0VuZFBvaW50KGVuZENvbnRhaW5lciwgJ25leHRTaWJsaW5nJyk7XG5cblx0XHRcdFx0Ly8gTm9uIGJsb2NrIGVsZW1lbnQgdGhlbiB0cnkgdG8gZXhwYW5kIHVwIHRoZSBsZWFmXG5cdFx0XHRcdGlmIChmb3JtYXRbMF0uYmxvY2spIHtcblx0XHRcdFx0XHRpZiAoIWlzQmxvY2soc3RhcnRDb250YWluZXIpKSB7XG5cdFx0XHRcdFx0XHRzdGFydENvbnRhaW5lciA9IGZpbmRQYXJlbnRDb250YWluZXIodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFpc0Jsb2NrKGVuZENvbnRhaW5lcikpIHtcblx0XHRcdFx0XHRcdGVuZENvbnRhaW5lciA9IGZpbmRQYXJlbnRDb250YWluZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0dXAgaW5kZXggZm9yIHN0YXJ0Q29udGFpbmVyXG5cdFx0XHRpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT0gMSkge1xuXHRcdFx0XHRzdGFydE9mZnNldCA9IG5vZGVJbmRleChzdGFydENvbnRhaW5lcik7XG5cdFx0XHRcdHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0dXAgaW5kZXggZm9yIGVuZENvbnRhaW5lclxuXHRcdFx0aWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSA9PSAxKSB7XG5cdFx0XHRcdGVuZE9mZnNldCA9IG5vZGVJbmRleChlbmRDb250YWluZXIpICsgMTtcblx0XHRcdFx0ZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBuZXcgcmFuZ2UgbGlrZSBvYmplY3Rcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0Q29udGFpbmVyOiBzdGFydENvbnRhaW5lcixcblx0XHRcdFx0c3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0LFxuXHRcdFx0XHRlbmRDb250YWluZXI6IGVuZENvbnRhaW5lcixcblx0XHRcdFx0ZW5kT2Zmc2V0OiBlbmRPZmZzZXRcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNDb2xvckZvcm1hdEFuZEFuY2hvcihub2RlLCBmb3JtYXQpIHtcblx0XHRcdHJldHVybiBmb3JtYXQubGlua3MgJiYgbm9kZS50YWdOYW1lID09ICdBJztcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgZm9ybWF0IGZvciB0aGUgc3BlY2lmaWVkIG5vZGUuIEl0IHdpbGwgYWxzbyByZW1vdmUgdGhlIG5vZGUgaWYgaXQgZG9lc24ndCBoYXZlXG5cdFx0ICogYW55IGF0dHJpYnV0ZXMgaWYgdGhlIGZvcm1hdCBzcGVjaWZpZXMgaXQgdG8gZG8gc28uXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtYXQgRm9ybWF0IG9iamVjdCB3aXRoIGl0ZW1zIHRvIHJlbW92ZSBmcm9tIG5vZGUuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHZhcnMgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCB2YXJpYWJsZXMgdG8gYXBwbHkgdG8gZm9ybWF0LlxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRvIHJlbW92ZSB0aGUgZm9ybWF0IHN0eWxlcyBvbi5cblx0XHQgKiBAcGFyYW0ge05vZGV9IGNvbXBhcmVfbm9kZSBPcHRpb25hbCBjb21wYXJlIG5vZGUsIGlmIHNwZWNpZmllZCB0aGUgc3R5bGVzIHdpbGwgYmUgY29tcGFyZWQgdG8gdGhhdCBub2RlLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUvZmFsc2UgaWYgdGhlIG5vZGUgd2FzIHJlbW92ZWQgb3Igbm90LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHJlbW92ZUZvcm1hdChmb3JtYXQsIHZhcnMsIG5vZGUsIGNvbXBhcmVfbm9kZSkge1xuXHRcdFx0dmFyIGksIGF0dHJzLCBzdHlsZXNNb2RpZmllZDtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgbm9kZSBtYXRjaGVzIGZvcm1hdFxuXHRcdFx0aWYgKCFtYXRjaE5hbWUobm9kZSwgZm9ybWF0KSAmJiAhaXNDb2xvckZvcm1hdEFuZEFuY2hvcihub2RlLCBmb3JtYXQpKSB7XG5cdFx0XHRcdHJldHVybiBGQUxTRTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdWxkIHdlIGNvbXBhcmUgd2l0aCBmb3JtYXQgYXR0cmlicyBhbmQgc3R5bGVzXG5cdFx0XHRpZiAoZm9ybWF0LnJlbW92ZSAhPSAnYWxsJykge1xuXHRcdFx0XHQvLyBSZW1vdmUgc3R5bGVzXG5cdFx0XHRcdGVhY2goZm9ybWF0LnN0eWxlcywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IG5vcm1hbGl6ZVN0eWxlVmFsdWUocmVwbGFjZVZhcnModmFsdWUsIHZhcnMpLCBuYW1lKTtcblxuXHRcdFx0XHRcdC8vIEluZGV4ZWQgYXJyYXlcblx0XHRcdFx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRjb21wYXJlX25vZGUgPSAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChmb3JtYXQucmVtb3ZlX3NpbWlsYXIgfHwgKCFjb21wYXJlX25vZGUgfHwgaXNFcShnZXRTdHlsZShjb21wYXJlX25vZGUsIG5hbWUpLCB2YWx1ZSkpKSB7XG5cdFx0XHRcdFx0XHRkb20uc2V0U3R5bGUobm9kZSwgbmFtZSwgJycpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0eWxlc01vZGlmaWVkID0gMTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIHN0eWxlIGF0dHJpYnV0ZSBpZiBpdCdzIGVtcHR5XG5cdFx0XHRcdGlmIChzdHlsZXNNb2RpZmllZCAmJiBkb20uZ2V0QXR0cmliKG5vZGUsICdzdHlsZScpID09PSAnJykge1xuXHRcdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuXHRcdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS1zdHlsZScpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGF0dHJpYnV0ZXNcblx0XHRcdFx0ZWFjaChmb3JtYXQuYXR0cmlidXRlcywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcblx0XHRcdFx0XHR2YXIgdmFsdWVPdXQ7XG5cblx0XHRcdFx0XHR2YWx1ZSA9IHJlcGxhY2VWYXJzKHZhbHVlLCB2YXJzKTtcblxuXHRcdFx0XHRcdC8vIEluZGV4ZWQgYXJyYXlcblx0XHRcdFx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRjb21wYXJlX25vZGUgPSAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghY29tcGFyZV9ub2RlIHx8IGlzRXEoZG9tLmdldEF0dHJpYihjb21wYXJlX25vZGUsIG5hbWUpLCB2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdC8vIEtlZXAgaW50ZXJuYWwgY2xhc3Nlc1xuXHRcdFx0XHRcdFx0aWYgKG5hbWUgPT0gJ2NsYXNzJykge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IGRvbS5nZXRBdHRyaWIobm9kZSwgbmFtZSk7XG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIEJ1aWxkIG5ldyBjbGFzcyB2YWx1ZSB3aGVyZSBldmVyeXRoaW5nIGlzIHJlbW92ZWQgZXhjZXB0IHRoZSBpbnRlcm5hbCBwcmVmaXhlZCBjbGFzc2VzXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVPdXQgPSAnJztcblx0XHRcdFx0XHRcdFx0XHRlYWNoKHZhbHVlLnNwbGl0KC9cXHMrLyksIGZ1bmN0aW9uKGNscykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKC9tY2VcXC1cXHcrLy50ZXN0KGNscykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVPdXQgKz0gKHZhbHVlT3V0ID8gJyAnIDogJycpICsgY2xzO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2UgZ290IHNvbWUgaW50ZXJuYWwgY2xhc3NlcyBsZWZ0XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlT3V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkb20uc2V0QXR0cmliKG5vZGUsIG5hbWUsIHZhbHVlT3V0KTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSUU2IGhhcyBhIGJ1ZyB3aGVyZSB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZ2V0IHJlbW92ZWQgY29ycmVjdGx5XG5cdFx0XHRcdFx0XHRpZiAobmFtZSA9PSBcImNsYXNzXCIpIHtcblx0XHRcdFx0XHRcdFx0bm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzTmFtZScpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgbWNlIHByZWZpeGVkIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdGlmIChNQ0VfQVRUUl9SRS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1jZS0nICsgbmFtZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGNsYXNzZXNcblx0XHRcdFx0ZWFjaChmb3JtYXQuY2xhc3NlcywgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHJlcGxhY2VWYXJzKHZhbHVlLCB2YXJzKTtcblxuXHRcdFx0XHRcdGlmICghY29tcGFyZV9ub2RlIHx8IGRvbS5oYXNDbGFzcyhjb21wYXJlX25vZGUsIHZhbHVlKSkge1xuXHRcdFx0XHRcdFx0ZG9tLnJlbW92ZUNsYXNzKG5vZGUsIHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIENoZWNrIGZvciBub24gaW50ZXJuYWwgYXR0cmlidXRlc1xuXHRcdFx0XHRhdHRycyA9IGRvbS5nZXRBdHRyaWJzKG5vZGUpO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgYXR0ck5hbWUgPSBhdHRyc1tpXS5ub2RlTmFtZTtcblx0XHRcdFx0XHRpZiAoYXR0ck5hbWUuaW5kZXhPZignXycpICE9PSAwICYmIGF0dHJOYW1lLmluZGV4T2YoJ2RhdGEtJykgIT09IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiBGQUxTRTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIHRoZSBpbmxpbmUgY2hpbGQgaWYgaXQncyBlbXB0eSBmb3IgZXhhbXBsZSA8Yj4gb3IgPHNwYW4+XG5cdFx0XHRpZiAoZm9ybWF0LnJlbW92ZSAhPSAnbm9uZScpIHtcblx0XHRcdFx0cmVtb3ZlTm9kZShub2RlLCBmb3JtYXQpO1xuXHRcdFx0XHRyZXR1cm4gVFJVRTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIHRoZSBub2RlIGFuZCB3cmFwIGl0J3MgY2hpbGRyZW4gaW4gcGFyYWdyYXBocyBiZWZvcmUgZG9pbmcgc28gb3Jcblx0XHQgKiBhcHBlbmRzIEJSIGVsZW1lbnRzIHRvIHRoZSBiZWdpbm5pbmcvZW5kIG9mIHRoZSBibG9jayBlbGVtZW50IGlmIGZvcmNlZFJvb3RCbG9ja3MgaXMgZGlzYWJsZWQuXG5cdFx0ICpcblx0XHQgKiBJZiB0aGUgZGl2IGluIHRoZSBub2RlIGJlbG93IGdldHMgcmVtb3ZlZDpcblx0XHQgKiAgdGV4dDxkaXY+dGV4dDwvZGl2PnRleHRcblx0XHQgKlxuXHRcdCAqIE91dHB1dCBiZWNvbWVzOlxuXHRcdCAqICB0ZXh0PGRpdj48YnIgLz50ZXh0PGJyIC8+PC9kaXY+dGV4dFxuXHRcdCAqXG5cdFx0ICogU28gd2hlbiB0aGUgZGl2IGlzIHJlbW92ZWQgdGhlIHJlc3VsdCBpczpcblx0XHQgKiAgdGV4dDxiciAvPnRleHQ8YnIgLz50ZXh0XG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRvIHJlbW92ZSArIGFwcGx5IEJSL1AgZWxlbWVudHMgdG8uXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGZvcm1hdCBGb3JtYXQgcnVsZS5cblx0XHQgKiBAcmV0dXJuIHtOb2RlfSBJbnB1dCBub2RlLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHJlbW92ZU5vZGUobm9kZSwgZm9ybWF0KSB7XG5cdFx0XHR2YXIgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZSwgcm9vdEJsb2NrRWxtO1xuXG5cdFx0XHRmdW5jdGlvbiBmaW5kKG5vZGUsIG5leHQsIGluYykge1xuXHRcdFx0XHRub2RlID0gZ2V0Tm9uV2hpdGVTcGFjZVNpYmxpbmcobm9kZSwgbmV4dCwgaW5jKTtcblxuXHRcdFx0XHRyZXR1cm4gIW5vZGUgfHwgKG5vZGUubm9kZU5hbWUgPT0gJ0JSJyB8fCBpc0Jsb2NrKG5vZGUpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGZvcm1hdC5ibG9jaykge1xuXHRcdFx0XHRpZiAoIWZvcmNlZFJvb3RCbG9jaykge1xuXHRcdFx0XHRcdC8vIEFwcGVuZCBCUiBlbGVtZW50cyBpZiBuZWVkZWQgYmVmb3JlIHdlIHJlbW92ZSB0aGUgYmxvY2tcblx0XHRcdFx0XHRpZiAoaXNCbG9jayhub2RlKSAmJiAhaXNCbG9jayhwYXJlbnROb2RlKSkge1xuXHRcdFx0XHRcdFx0aWYgKCFmaW5kKG5vZGUsIEZBTFNFKSAmJiAhZmluZChub2RlLmZpcnN0Q2hpbGQsIFRSVUUsIDEpKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUuaW5zZXJ0QmVmb3JlKGRvbS5jcmVhdGUoJ2JyJyksIG5vZGUuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghZmluZChub2RlLCBUUlVFKSAmJiAhZmluZChub2RlLmxhc3RDaGlsZCwgRkFMU0UsIDEpKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZSgnYnInKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFdyYXAgdGhlIGJsb2NrIGluIGEgZm9yY2VkUm9vdEJsb2NrIGlmIHdlIGFyZSBhdCB0aGUgcm9vdCBvZiBkb2N1bWVudFxuXHRcdFx0XHRcdGlmIChwYXJlbnROb2RlID09IGRvbS5nZXRSb290KCkpIHtcblx0XHRcdFx0XHRcdGlmICghZm9ybWF0Lmxpc3RfYmxvY2sgfHwgIWlzRXEobm9kZSwgZm9ybWF0Lmxpc3RfYmxvY2spKSB7XG5cdFx0XHRcdFx0XHRcdGVhY2goZ3JlcChub2RlLmNoaWxkTm9kZXMpLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlzVmFsaWQoZm9yY2VkUm9vdEJsb2NrLCBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXJvb3RCbG9ja0VsbSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb290QmxvY2tFbG0gPSB3cmFwKG5vZGUsIGZvcmNlZFJvb3RCbG9jayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRvbS5zZXRBdHRyaWJzKHJvb3RCbG9ja0VsbSwgZWQuc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2tfYXR0cnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9vdEJsb2NrRWxtLmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyb290QmxvY2tFbG0gPSAwO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5ldmVyIHJlbW92ZSBub2RlcyB0aGF0IGlzbid0IHRoZSBzcGVjaWZpZWQgaW5saW5lIGVsZW1lbnQgaWYgYSBzZWxlY3RvciBpcyBzcGVjaWZpZWQgdG9vXG5cdFx0XHRpZiAoZm9ybWF0LnNlbGVjdG9yICYmIGZvcm1hdC5pbmxpbmUgJiYgIWlzRXEoZm9ybWF0LmlubGluZSwgbm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRkb20ucmVtb3ZlKG5vZGUsIDEpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIG5leHQvcHJldmlvdXMgbm9uIHdoaXRlc3BhY2Ugbm9kZS5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgdG8gc3RhcnQgYXQuXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBuZXh0IChPcHRpb25hbCkgSW5jbHVkZSBuZXh0IG9yIHByZXZpb3VzIG5vZGUgZGVmYXVsdHMgdG8gcHJldmlvdXMuXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBpbmMgKE9wdGlvbmFsKSBJbmNsdWRlIHRoZSBjdXJyZW50IG5vZGUgaW4gY2hlY2tpbmcuIERlZmF1bHRzIHRvIGZhbHNlLlxuXHRcdCAqIEByZXR1cm4ge05vZGV9IE5leHQgb3IgcHJldmlvdXMgbm9kZSBvciB1bmRlZmluZWQgaWYgaXQgd2Fzbid0IGZvdW5kLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGdldE5vbldoaXRlU3BhY2VTaWJsaW5nKG5vZGUsIG5leHQsIGluYykge1xuXHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0bmV4dCA9IG5leHQgPyAnbmV4dFNpYmxpbmcnIDogJ3ByZXZpb3VzU2libGluZyc7XG5cblx0XHRcdFx0Zm9yIChub2RlID0gaW5jID8gbm9kZSA6IG5vZGVbbmV4dF07IG5vZGU7IG5vZGUgPSBub2RlW25leHRdKSB7XG5cdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSB8fCAhaXNXaGl0ZVNwYWNlTm9kZShub2RlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogTWVyZ2VzIHRoZSBuZXh0L3ByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCBpZiB0aGV5IG1hdGNoLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge05vZGV9IHByZXYgUHJldmlvdXMgbm9kZSB0byBjb21wYXJlL21lcmdlLlxuXHRcdCAqIEBwYXJhbSB7Tm9kZX0gbmV4dCBOZXh0IG5vZGUgdG8gY29tcGFyZS9tZXJnZS5cblx0XHQgKiBAcmV0dXJuIHtOb2RlfSBOZXh0IG5vZGUgaWYgd2UgZGlkbid0IG1lcmdlIGFuZCBwcmV2IG5vZGUgaWYgd2UgZGlkLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIG1lcmdlU2libGluZ3MocHJldiwgbmV4dCkge1xuXHRcdFx0dmFyIHNpYmxpbmcsIHRtcFNpYmxpbmcsIGVsZW1lbnRVdGlscyA9IG5ldyBFbGVtZW50VXRpbHMoZG9tKTtcblxuXHRcdFx0ZnVuY3Rpb24gZmluZEVsZW1lbnRTaWJsaW5nKG5vZGUsIHNpYmxpbmdfbmFtZSkge1xuXHRcdFx0XHRmb3IgKHNpYmxpbmcgPSBub2RlOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZ1tzaWJsaW5nX25hbWVdKSB7XG5cdFx0XHRcdFx0aWYgKHNpYmxpbmcubm9kZVR5cGUgPT0gMyAmJiBzaWJsaW5nLm5vZGVWYWx1ZS5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChzaWJsaW5nLm5vZGVUeXBlID09IDEgJiYgIWlzQm9va21hcmtOb2RlKHNpYmxpbmcpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2libGluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgbmV4dC9wcmV2IGV4aXN0cyBhbmQgdGhhdCB0aGV5IGFyZSBlbGVtZW50c1xuXHRcdFx0aWYgKHByZXYgJiYgbmV4dCkge1xuXHRcdFx0XHQvLyBJZiBwcmV2aW91cyBzaWJsaW5nIGlzIGVtcHR5IHRoZW4ganVtcCBvdmVyIGl0XG5cdFx0XHRcdHByZXYgPSBmaW5kRWxlbWVudFNpYmxpbmcocHJldiwgJ3ByZXZpb3VzU2libGluZycpO1xuXHRcdFx0XHRuZXh0ID0gZmluZEVsZW1lbnRTaWJsaW5nKG5leHQsICduZXh0U2libGluZycpO1xuXG5cdFx0XHRcdC8vIENvbXBhcmUgbmV4dCBhbmQgcHJldmlvdXMgbm9kZXNcblx0XHRcdFx0aWYgKGVsZW1lbnRVdGlscy5jb21wYXJlKHByZXYsIG5leHQpKSB7XG5cdFx0XHRcdFx0Ly8gQXBwZW5kIG5vZGVzIGJldHdlZW5cblx0XHRcdFx0XHRmb3IgKHNpYmxpbmcgPSBwcmV2Lm5leHRTaWJsaW5nOyBzaWJsaW5nICYmIHNpYmxpbmcgIT0gbmV4dDspIHtcblx0XHRcdFx0XHRcdHRtcFNpYmxpbmcgPSBzaWJsaW5nO1xuXHRcdFx0XHRcdFx0c2libGluZyA9IHNpYmxpbmcubmV4dFNpYmxpbmc7XG5cdFx0XHRcdFx0XHRwcmV2LmFwcGVuZENoaWxkKHRtcFNpYmxpbmcpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFJlbW92ZSBuZXh0IG5vZGVcblx0XHRcdFx0XHRkb20ucmVtb3ZlKG5leHQpO1xuXG5cdFx0XHRcdFx0Ly8gTW92ZSBjaGlsZHJlbiBpbnRvIHByZXYgbm9kZVxuXHRcdFx0XHRcdGVhY2goZ3JlcChuZXh0LmNoaWxkTm9kZXMpLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0XHRwcmV2LmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHByZXY7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5leHQ7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0Q29udGFpbmVyKHJuZywgc3RhcnQpIHtcblx0XHRcdHZhciBjb250YWluZXIsIG9mZnNldCwgbGFzdElkeDtcblxuXHRcdFx0Y29udGFpbmVyID0gcm5nW3N0YXJ0ID8gJ3N0YXJ0Q29udGFpbmVyJyA6ICdlbmRDb250YWluZXInXTtcblx0XHRcdG9mZnNldCA9IHJuZ1tzdGFydCA/ICdzdGFydE9mZnNldCcgOiAnZW5kT2Zmc2V0J107XG5cblx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMSkge1xuXHRcdFx0XHRsYXN0SWR4ID0gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTtcblxuXHRcdFx0XHRpZiAoIXN0YXJ0ICYmIG9mZnNldCkge1xuXHRcdFx0XHRcdG9mZnNldC0tO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0ID4gbGFzdElkeCA/IGxhc3RJZHggOiBvZmZzZXRdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBzdGFydCB0ZXh0IG5vZGUgaXMgZXhjbHVkZWQgdGhlbiB3YWxrIHRvIHRoZSBuZXh0IG5vZGVcblx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IDMgJiYgc3RhcnQgJiYgb2Zmc2V0ID49IGNvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnRhaW5lciA9IG5ldyBUcmVlV2Fsa2VyKGNvbnRhaW5lciwgZWQuZ2V0Qm9keSgpKS5uZXh0KCkgfHwgY29udGFpbmVyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBlbmQgdGV4dCBub2RlIGlzIGV4Y2x1ZGVkIHRoZW4gd2FsayB0byB0aGUgcHJldmlvdXMgbm9kZVxuXHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyAmJiAhc3RhcnQgJiYgb2Zmc2V0ID09PSAwKSB7XG5cdFx0XHRcdGNvbnRhaW5lciA9IG5ldyBUcmVlV2Fsa2VyKGNvbnRhaW5lciwgZWQuZ2V0Qm9keSgpKS5wcmV2KCkgfHwgY29udGFpbmVyO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udGFpbmVyO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHBlcmZvcm1DYXJldEFjdGlvbih0eXBlLCBuYW1lLCB2YXJzLCBzaW1pbGFyKSB7XG5cdFx0XHR2YXIgY2FyZXRDb250YWluZXJJZCA9ICdfbWNlX2NhcmV0JywgZGVidWcgPSBlZC5zZXR0aW5ncy5jYXJldF9kZWJ1ZztcblxuXHRcdFx0Ly8gQ3JlYXRlcyBhIGNhcmV0IGNvbnRhaW5lciBib2d1cyBlbGVtZW50XG5cdFx0XHRmdW5jdGlvbiBjcmVhdGVDYXJldENvbnRhaW5lcihmaWxsKSB7XG5cdFx0XHRcdHZhciBjYXJldENvbnRhaW5lciA9IGRvbS5jcmVhdGUoJ3NwYW4nLCB7aWQ6IGNhcmV0Q29udGFpbmVySWQsICdkYXRhLW1jZS1ib2d1cyc6IHRydWUsIHN0eWxlOiBkZWJ1ZyA/ICdjb2xvcjpyZWQnIDogJyd9KTtcblxuXHRcdFx0XHRpZiAoZmlsbCkge1xuXHRcdFx0XHRcdGNhcmV0Q29udGFpbmVyLmFwcGVuZENoaWxkKGVkLmdldERvYygpLmNyZWF0ZVRleHROb2RlKElOVklTSUJMRV9DSEFSKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gY2FyZXRDb250YWluZXI7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGlzQ2FyZXRDb250YWluZXJFbXB0eShub2RlLCBub2Rlcykge1xuXHRcdFx0XHR3aGlsZSAobm9kZSkge1xuXHRcdFx0XHRcdGlmICgobm9kZS5ub2RlVHlwZSA9PT0gMyAmJiBub2RlLm5vZGVWYWx1ZSAhPT0gSU5WSVNJQkxFX0NIQVIpIHx8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ29sbGVjdCBub2Rlc1xuXHRcdFx0XHRcdGlmIChub2RlcyAmJiBub2RlLm5vZGVUeXBlID09PSAxKSB7XG5cdFx0XHRcdFx0XHRub2Rlcy5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJucyBhbnkgcGFyZW50IGNhcmV0IGNvbnRhaW5lciBlbGVtZW50XG5cdFx0XHRmdW5jdGlvbiBnZXRQYXJlbnRDYXJldENvbnRhaW5lcihub2RlKSB7XG5cdFx0XHRcdHdoaWxlIChub2RlKSB7XG5cdFx0XHRcdFx0aWYgKG5vZGUuaWQgPT09IGNhcmV0Q29udGFpbmVySWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRmluZHMgdGhlIGZpcnN0IHRleHQgbm9kZSBpbiB0aGUgc3BlY2lmaWVkIG5vZGVcblx0XHRcdGZ1bmN0aW9uIGZpbmRGaXJzdFRleHROb2RlKG5vZGUpIHtcblx0XHRcdFx0dmFyIHdhbGtlcjtcblxuXHRcdFx0XHRpZiAobm9kZSkge1xuXHRcdFx0XHRcdHdhbGtlciA9IG5ldyBUcmVlV2Fsa2VyKG5vZGUsIG5vZGUpO1xuXG5cdFx0XHRcdFx0Zm9yIChub2RlID0gd2Fsa2VyLmN1cnJlbnQoKTsgbm9kZTsgbm9kZSA9IHdhbGtlci5uZXh0KCkpIHtcblx0XHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmVzIHRoZSBjYXJldCBjb250YWluZXIgZm9yIHRoZSBzcGVjaWZpZWQgbm9kZSBvciBhbGwgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcblx0XHRcdGZ1bmN0aW9uIHJlbW92ZUNhcmV0Q29udGFpbmVyKG5vZGUsIG1vdmVfY2FyZXQpIHtcblx0XHRcdFx0dmFyIGNoaWxkLCBybmc7XG5cblx0XHRcdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGdldFBhcmVudENhcmV0Q29udGFpbmVyKHNlbGVjdGlvbi5nZXRTdGFydCgpKTtcblxuXHRcdFx0XHRcdGlmICghbm9kZSkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKChub2RlID0gZG9tLmdldChjYXJldENvbnRhaW5lcklkKSkpIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQ2FyZXRDb250YWluZXIobm9kZSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKHRydWUpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ2FyZXRDb250YWluZXJFbXB0eShub2RlKSkge1xuXHRcdFx0XHRcdFx0aWYgKG1vdmVfY2FyZXQgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEJlZm9yZShub2RlKTtcblx0XHRcdFx0XHRcdFx0cm5nLnNldEVuZEJlZm9yZShub2RlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZG9tLnJlbW92ZShub2RlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2hpbGQgPSBmaW5kRmlyc3RUZXh0Tm9kZShub2RlKTtcblxuXHRcdFx0XHRcdFx0aWYgKGNoaWxkLm5vZGVWYWx1ZS5jaGFyQXQoMCkgPT09IElOVklTSUJMRV9DSEFSKSB7XG5cdFx0XHRcdFx0XHRcdGNoaWxkLmRlbGV0ZURhdGEoMCwgMSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRml4IGZvciBidWcgIzY5NzZcblx0XHRcdFx0XHRcdFx0aWYgKHJuZy5zdGFydENvbnRhaW5lciA9PSBjaGlsZCAmJiBybmcuc3RhcnRPZmZzZXQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cm5nLnNldFN0YXJ0KGNoaWxkLCBybmcuc3RhcnRPZmZzZXQgLSAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChybmcuZW5kQ29udGFpbmVyID09IGNoaWxkICYmIHJuZy5lbmRPZmZzZXQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cm5nLnNldEVuZChjaGlsZCwgcm5nLmVuZE9mZnNldCAtIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRvbS5yZW1vdmUobm9kZSwgMSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c2VsZWN0aW9uLnNldFJuZyhybmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFwcGxpZXMgZm9ybWF0dGluZyB0byB0aGUgY2FyZXQgcG9zaXRpb25cblx0XHRcdGZ1bmN0aW9uIGFwcGx5Q2FyZXRGb3JtYXQoKSB7XG5cdFx0XHRcdHZhciBybmcsIGNhcmV0Q29udGFpbmVyLCB0ZXh0Tm9kZSwgb2Zmc2V0LCBib29rbWFyaywgY29udGFpbmVyLCB0ZXh0O1xuXG5cdFx0XHRcdHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcodHJ1ZSk7XG5cdFx0XHRcdG9mZnNldCA9IHJuZy5zdGFydE9mZnNldDtcblx0XHRcdFx0Y29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuXHRcdFx0XHR0ZXh0ID0gY29udGFpbmVyLm5vZGVWYWx1ZTtcblxuXHRcdFx0XHRjYXJldENvbnRhaW5lciA9IGdldFBhcmVudENhcmV0Q29udGFpbmVyKHNlbGVjdGlvbi5nZXRTdGFydCgpKTtcblx0XHRcdFx0aWYgKGNhcmV0Q29udGFpbmVyKSB7XG5cdFx0XHRcdFx0dGV4dE5vZGUgPSBmaW5kRmlyc3RUZXh0Tm9kZShjYXJldENvbnRhaW5lcik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBFeHBhbmQgdG8gd29yZCBpZiBjYXJldCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlIGFuZCB0aGUgY2hhciBiZWZvcmUvYWZ0ZXIgaXMgYSBhbHBoYSBudW1lcmljIGNoYXJhY3RlclxuXHRcdFx0XHR2YXIgd29yZGNoYXJSZWdleCA9IC9bXlxcc1xcdTAwYTBcXHUwMGFkXFx1MjAwYlxcdWZlZmZdLztcblx0XHRcdFx0aWYgKHRleHQgJiYgb2Zmc2V0ID4gMCAmJiBvZmZzZXQgPCB0ZXh0Lmxlbmd0aCAmJlxuXHRcdFx0XHRcdHdvcmRjaGFyUmVnZXgudGVzdCh0ZXh0LmNoYXJBdChvZmZzZXQpKSAmJiB3b3JkY2hhclJlZ2V4LnRlc3QodGV4dC5jaGFyQXQob2Zmc2V0IC0gMSkpKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IGJvb2ttYXJrIG9mIGNhcmV0IHBvc2l0aW9uXG5cdFx0XHRcdFx0Ym9va21hcmsgPSBzZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcblxuXHRcdFx0XHRcdC8vIENvbGxhcHNlIGJvb2ttYXJrIHJhbmdlIChXZWJLaXQpXG5cdFx0XHRcdFx0cm5nLmNvbGxhcHNlKHRydWUpO1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIHRoZSByYW5nZSB0byB0aGUgY2xvc2VzdCB3b3JkIGFuZCBzcGxpdCBpdCBhdCB0aG9zZSBwb2ludHNcblx0XHRcdFx0XHRybmcgPSBleHBhbmRSbmcocm5nLCBnZXQobmFtZSkpO1xuXHRcdFx0XHRcdHJuZyA9IHJhbmdlVXRpbHMuc3BsaXQocm5nKTtcblxuXHRcdFx0XHRcdC8vIEFwcGx5IHRoZSBmb3JtYXQgdG8gdGhlIHJhbmdlXG5cdFx0XHRcdFx0YXBwbHkobmFtZSwgdmFycywgcm5nKTtcblxuXHRcdFx0XHRcdC8vIE1vdmUgc2VsZWN0aW9uIGJhY2sgdG8gY2FyZXQgcG9zaXRpb25cblx0XHRcdFx0XHRzZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghY2FyZXRDb250YWluZXIgfHwgdGV4dE5vZGUubm9kZVZhbHVlICE9PSBJTlZJU0lCTEVfQ0hBUikge1xuXHRcdFx0XHRcdFx0Y2FyZXRDb250YWluZXIgPSBjcmVhdGVDYXJldENvbnRhaW5lcih0cnVlKTtcblx0XHRcdFx0XHRcdHRleHROb2RlID0gY2FyZXRDb250YWluZXIuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHRcdFx0cm5nLmluc2VydE5vZGUoY2FyZXRDb250YWluZXIpO1xuXHRcdFx0XHRcdFx0b2Zmc2V0ID0gMTtcblxuXHRcdFx0XHRcdFx0YXBwbHkobmFtZSwgdmFycywgY2FyZXRDb250YWluZXIpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhcHBseShuYW1lLCB2YXJzLCBjYXJldENvbnRhaW5lcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTW92ZSBzZWxlY3Rpb24gdG8gdGV4dCBub2RlXG5cdFx0XHRcdFx0c2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKHRleHROb2RlLCBvZmZzZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHJlbW92ZUNhcmV0Rm9ybWF0KCkge1xuXHRcdFx0XHR2YXIgcm5nID0gc2VsZWN0aW9uLmdldFJuZyh0cnVlKSwgY29udGFpbmVyLCBvZmZzZXQsIGJvb2ttYXJrLFxuXHRcdFx0XHRcdGhhc0NvbnRlbnRBZnRlciwgbm9kZSwgZm9ybWF0Tm9kZSwgcGFyZW50cyA9IFtdLCBpLCBjYXJldENvbnRhaW5lcjtcblxuXHRcdFx0XHRjb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG5cdFx0XHRcdG9mZnNldCA9IHJuZy5zdGFydE9mZnNldDtcblx0XHRcdFx0bm9kZSA9IGNvbnRhaW5lcjtcblxuXHRcdFx0XHRpZiAoY29udGFpbmVyLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRpZiAob2Zmc2V0ICE9IGNvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRoYXNDb250ZW50QWZ0ZXIgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aGlsZSAobm9kZSkge1xuXHRcdFx0XHRcdGlmIChtYXRjaE5vZGUobm9kZSwgbmFtZSwgdmFycywgc2ltaWxhcikpIHtcblx0XHRcdFx0XHRcdGZvcm1hdE5vZGUgPSBub2RlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0XHRcdGhhc0NvbnRlbnRBZnRlciA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cGFyZW50cy5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBOb2RlIGRvZXNuJ3QgaGF2ZSB0aGUgc3BlY2lmaWVkIGZvcm1hdFxuXHRcdFx0XHRpZiAoIWZvcm1hdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJcyB0aGVyZSBjb250ZW50cyBhZnRlciB0aGUgY2FyZXQgdGhlbiByZW1vdmUgdGhlIGZvcm1hdCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoaGFzQ29udGVudEFmdGVyKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IGJvb2ttYXJrIG9mIGNhcmV0IHBvc2l0aW9uXG5cdFx0XHRcdFx0Ym9va21hcmsgPSBzZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtcblxuXHRcdFx0XHRcdC8vIENvbGxhcHNlIGJvb2ttYXJrIHJhbmdlIChXZWJLaXQpXG5cdFx0XHRcdFx0cm5nLmNvbGxhcHNlKHRydWUpO1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIHRoZSByYW5nZSB0byB0aGUgY2xvc2VzdCB3b3JkIGFuZCBzcGxpdCBpdCBhdCB0aG9zZSBwb2ludHNcblx0XHRcdFx0XHRybmcgPSBleHBhbmRSbmcocm5nLCBnZXQobmFtZSksIHRydWUpO1xuXHRcdFx0XHRcdHJuZyA9IHJhbmdlVXRpbHMuc3BsaXQocm5nKTtcblxuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgZm9ybWF0IGZyb20gdGhlIHJhbmdlXG5cdFx0XHRcdFx0cmVtb3ZlKG5hbWUsIHZhcnMsIHJuZyk7XG5cblx0XHRcdFx0XHQvLyBNb3ZlIHNlbGVjdGlvbiBiYWNrIHRvIGNhcmV0IHBvc2l0aW9uXG5cdFx0XHRcdFx0c2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjYXJldENvbnRhaW5lciA9IGNyZWF0ZUNhcmV0Q29udGFpbmVyKCk7XG5cblx0XHRcdFx0XHRub2RlID0gY2FyZXRDb250YWluZXI7XG5cdFx0XHRcdFx0Zm9yIChpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChkb20uY2xvbmUocGFyZW50c1tpXSwgZmFsc2UpKTtcblx0XHRcdFx0XHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IGludmlzaWJsZSBjaGFyYWN0ZXIgaW50byBpbm5lciBtb3N0IGZvcm1hdCBlbGVtZW50XG5cdFx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChkb20uZG9jLmNyZWF0ZVRleHROb2RlKElOVklTSUJMRV9DSEFSKSk7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHRcdHZhciBibG9jayA9IGRvbS5nZXRQYXJlbnQoZm9ybWF0Tm9kZSwgaXNUZXh0QmxvY2spO1xuXG5cdFx0XHRcdFx0aWYgKGJsb2NrICYmIGRvbS5pc0VtcHR5KGJsb2NrKSkge1xuXHRcdFx0XHRcdFx0Ly8gUmVwbGFjZSBmb3JtYXROb2RlIHdpdGggY2FyZXRDb250YWluZXIgd2hlbiByZW1vdmluZyBmb3JtYXQgZnJvbSBlbXB0eSBibG9jayBsaWtlIDxwPjxiPnw8L2I+PC9wPlxuXHRcdFx0XHRcdFx0Zm9ybWF0Tm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjYXJldENvbnRhaW5lciwgZm9ybWF0Tm9kZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIEluc2VydCBjYXJldCBjb250YWluZXIgYWZ0ZXIgdGhlIGZvcm1hdHRlZCBub2RlXG5cdFx0XHRcdFx0XHRkb20uaW5zZXJ0QWZ0ZXIoY2FyZXRDb250YWluZXIsIGZvcm1hdE5vZGUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE1vdmUgc2VsZWN0aW9uIHRvIHRleHQgbm9kZVxuXHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbihub2RlLCAxKTtcblxuXHRcdFx0XHRcdC8vIElmIHRoZSBmb3JtYXROb2RlIGlzIGVtcHR5LCB3ZSBjYW4gcmVtb3ZlIGl0IHNhZmVseS5cblx0XHRcdFx0XHRpZiAoZG9tLmlzRW1wdHkoZm9ybWF0Tm9kZSkpIHtcblx0XHRcdFx0XHRcdGRvbS5yZW1vdmUoZm9ybWF0Tm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrcyBpZiB0aGUgcGFyZW50IGNhcmV0IGNvbnRhaW5lciBub2RlIGlzbid0IGVtcHR5IGlmIHRoYXQgaXMgdGhlIGNhc2UgaXRcblx0XHRcdC8vIHdpbGwgcmVtb3ZlIHRoZSBib2d1cyBzdGF0ZSBvbiBhbGwgY2hpbGRyZW4gdGhhdCBpc24ndCBlbXB0eVxuXHRcdFx0ZnVuY3Rpb24gdW5tYXJrQm9ndXNDYXJldFBhcmVudHMoKSB7XG5cdFx0XHRcdHZhciBjYXJldENvbnRhaW5lcjtcblxuXHRcdFx0XHRjYXJldENvbnRhaW5lciA9IGdldFBhcmVudENhcmV0Q29udGFpbmVyKHNlbGVjdGlvbi5nZXRTdGFydCgpKTtcblx0XHRcdFx0aWYgKGNhcmV0Q29udGFpbmVyICYmICFkb20uaXNFbXB0eShjYXJldENvbnRhaW5lcikpIHtcblx0XHRcdFx0XHR3YWxrKGNhcmV0Q29udGFpbmVyLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0XHRpZiAobm9kZS5ub2RlVHlwZSA9PSAxICYmIG5vZGUuaWQgIT09IGNhcmV0Q29udGFpbmVySWQgJiYgIWRvbS5pc0VtcHR5KG5vZGUpKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5zZXRBdHRyaWIobm9kZSwgJ2RhdGEtbWNlLWJvZ3VzJywgbnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgJ2NoaWxkTm9kZXMnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGJpbmQgdGhlIGNhcmV0IGV2ZW50cyBvbmNlXG5cdFx0XHRpZiAoIWVkLl9oYXNDYXJldEV2ZW50cykge1xuXHRcdFx0XHQvLyBNYXJrIGN1cnJlbnQgY2FyZXQgY29udGFpbmVyIGVsZW1lbnRzIGFzIGJvZ3VzIHdoZW4gZ2V0dGluZyB0aGUgY29udGVudHMgc28gd2UgZG9uJ3QgZW5kIHVwIHdpdGggZW1wdHkgZWxlbWVudHNcblx0XHRcdFx0bWFya0NhcmV0Q29udGFpbmVyc0JvZ3VzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIG5vZGVzID0gW10sIGk7XG5cblx0XHRcdFx0XHRpZiAoaXNDYXJldENvbnRhaW5lckVtcHR5KGdldFBhcmVudENhcmV0Q29udGFpbmVyKHNlbGVjdGlvbi5nZXRTdGFydCgpKSwgbm9kZXMpKSB7XG5cdFx0XHRcdFx0XHQvLyBNYXJrIGNoaWxkcmVuXG5cdFx0XHRcdFx0XHRpID0gbm9kZXMubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0XHRkb20uc2V0QXR0cmliKG5vZGVzW2ldLCAnZGF0YS1tY2UtYm9ndXMnLCAnMScpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRkaXNhYmxlQ2FyZXRDb250YWluZXIgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIGtleUNvZGUgPSBlLmtleUNvZGU7XG5cblx0XHRcdFx0XHRyZW1vdmVDYXJldENvbnRhaW5lcigpO1xuXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGNhcmV0IGNvbnRhaW5lciBpZiBpdCdzIGVtcHR5XG5cdFx0XHRcdFx0aWYgKGtleUNvZGUgPT0gOCAmJiBzZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSAmJiBzZWxlY3Rpb24uZ2V0U3RhcnQoKS5pbm5lckhUTUwgPT0gSU5WSVNJQkxFX0NIQVIpIHtcblx0XHRcdFx0XHRcdHJlbW92ZUNhcmV0Q29udGFpbmVyKGdldFBhcmVudENhcmV0Q29udGFpbmVyKHNlbGVjdGlvbi5nZXRTdGFydCgpKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGNhcmV0IGNvbnRhaW5lciBvbiBrZXlkb3duIGFuZCBpdCdzIGxlZnQvcmlnaHQgYXJyb3cga2V5c1xuXHRcdFx0XHRcdGlmIChrZXlDb2RlID09IDM3IHx8IGtleUNvZGUgPT0gMzkpIHtcblx0XHRcdFx0XHRcdHJlbW92ZUNhcmV0Q29udGFpbmVyKGdldFBhcmVudENhcmV0Q29udGFpbmVyKHNlbGVjdGlvbi5nZXRTdGFydCgpKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dW5tYXJrQm9ndXNDYXJldFBhcmVudHMoKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYm9ndXMgc3RhdGUgaWYgdGhleSBnb3QgZmlsbGVkIGJ5IGNvbnRlbnRzIHVzaW5nIGVkaXRvci5zZWxlY3Rpb24uc2V0Q29udGVudFxuXHRcdFx0XHRlZC5vbignU2V0Q29udGVudCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRpZiAoZS5zZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdHVubWFya0JvZ3VzQ2FyZXRQYXJlbnRzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZWQuX2hhc0NhcmV0RXZlbnRzID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRG8gYXBwbHkgb3IgcmVtb3ZlIGNhcmV0IGZvcm1hdFxuXHRcdFx0aWYgKHR5cGUgPT0gXCJhcHBseVwiKSB7XG5cdFx0XHRcdGFwcGx5Q2FyZXRGb3JtYXQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlbW92ZUNhcmV0Rm9ybWF0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogTW92ZXMgdGhlIHN0YXJ0IHRvIHRoZSBmaXJzdCBzdWl0YWJsZSB0ZXh0IG5vZGUuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gbW92ZVN0YXJ0KHJuZykge1xuXHRcdFx0dmFyIGNvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcixcblx0XHRcdFx0XHRvZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQsIGlzQXRFbmRPZlRleHQsXG5cdFx0XHRcdFx0d2Fsa2VyLCBub2RlLCBub2RlcywgdG1wTm9kZTtcblxuXHRcdFx0aWYgKHJuZy5zdGFydENvbnRhaW5lciA9PSBybmcuZW5kQ29udGFpbmVyKSB7XG5cdFx0XHRcdGlmIChpc0lubGluZUJsb2NrKHJuZy5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3JuZy5zdGFydE9mZnNldF0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgdGV4dCBub2RlIGludG8gaW5kZXggaWYgcG9zc2libGVcblx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMyAmJiBvZmZzZXQgPj0gY29udGFpbmVyLm5vZGVWYWx1ZS5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gR2V0IHRoZSBwYXJlbnQgY29udGFpbmVyIGxvY2F0aW9uIGFuZCB3YWxrIGZyb20gdGhlcmVcblx0XHRcdFx0b2Zmc2V0ID0gbm9kZUluZGV4KGNvbnRhaW5lcik7XG5cdFx0XHRcdGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuXHRcdFx0XHRpc0F0RW5kT2ZUZXh0ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTW92ZSBzdGFydENvbnRhaW5lci9zdGFydE9mZnNldCBpbiB0byBhIHN1aXRhYmxlIG5vZGVcblx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMSkge1xuXHRcdFx0XHRub2RlcyA9IGNvbnRhaW5lci5jaGlsZE5vZGVzO1xuXHRcdFx0XHRjb250YWluZXIgPSBub2Rlc1tNYXRoLm1pbihvZmZzZXQsIG5vZGVzLmxlbmd0aCAtIDEpXTtcblx0XHRcdFx0d2Fsa2VyID0gbmV3IFRyZWVXYWxrZXIoY29udGFpbmVyLCBkb20uZ2V0UGFyZW50KGNvbnRhaW5lciwgZG9tLmlzQmxvY2spKTtcblxuXHRcdFx0XHQvLyBJZiBvZmZzZXQgaXMgYXQgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZSB3YWxrIHRvIHRoZSBuZXh0IG9uZVxuXHRcdFx0XHRpZiAob2Zmc2V0ID4gbm9kZXMubGVuZ3RoIC0gMSB8fCBpc0F0RW5kT2ZUZXh0KSB7XG5cdFx0XHRcdFx0d2Fsa2VyLm5leHQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAobm9kZSA9IHdhbGtlci5jdXJyZW50KCk7IG5vZGU7IG5vZGUgPSB3YWxrZXIubmV4dCgpKSB7XG5cdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMyAmJiAhaXNXaGl0ZVNwYWNlTm9kZShub2RlKSkge1xuXHRcdFx0XHRcdFx0Ly8gSUUgaGFzIGEgXCJuZWF0XCIgZmVhdHVyZSB3aGVyZSBpdCBtb3ZlcyB0aGUgc3RhcnQgbm9kZSBpbnRvIHRoZSBjbG9zZXN0IGVsZW1lbnRcblx0XHRcdFx0XHRcdC8vIHdlIGNhbiBhdm9pZCB0aGlzIGJ5IGluc2VydGluZyBhbiBlbGVtZW50IGJlZm9yZSBpdCBhbmQgdGhlbiByZW1vdmUgaXQgYWZ0ZXIgd2Ugc2V0IHRoZSBzZWxlY3Rpb25cblx0XHRcdFx0XHRcdHRtcE5vZGUgPSBkb20uY3JlYXRlKCdhJywgeydkYXRhLW1jZS1ib2d1cyc6ICdhbGwnfSwgSU5WSVNJQkxFX0NIQVIpO1xuXHRcdFx0XHRcdFx0bm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0bXBOb2RlLCBub2RlKTtcblxuXHRcdFx0XHRcdFx0Ly8gU2V0IHNlbGVjdGlvbiBhbmQgcmVtb3ZlIHRtcE5vZGVcblx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydChub2RlLCAwKTtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcocm5nKTtcblx0XHRcdFx0XHRcdGRvbS5yZW1vdmUodG1wTm9kZSk7XG5cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VuZG8vRGlmZi5qc1xuXG4vKipcbiAqIERpZmYuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBKUyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTyhORCkgRGlmZmVyZW5jZSBBbGdvcml0aG0gYnkgRXVnZW5lIFcuIE15ZXJzLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVuZG8uRGlmZlxuICogQHByaXZhdGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91bmRvL0RpZmZcIiwgW1xuXSwgZnVuY3Rpb24gKCkge1xuXHR2YXIgS0VFUCA9IDAsIElOU0VSVCA9IDEsIERFTEVURSA9IDI7XG5cblx0dmFyIGRpZmYgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcblx0XHR2YXIgc2l6ZSA9IGxlZnQubGVuZ3RoICsgcmlnaHQubGVuZ3RoICsgMjtcblx0XHR2YXIgdkRvd24gPSBuZXcgQXJyYXkoc2l6ZSk7XG5cdFx0dmFyIHZVcCA9IG5ldyBBcnJheShzaXplKTtcblxuXHRcdHZhciBzbmFrZSA9IGZ1bmN0aW9uIChzdGFydCwgZW5kLCBkaWFnKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGFydDogc3RhcnQsXG5cdFx0XHRcdGVuZDogZW5kLFxuXHRcdFx0XHRkaWFnOiBkaWFnXG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHR2YXIgYnVpbGRTY3JpcHQgPSBmdW5jdGlvbiAoc3RhcnQxLCBlbmQxLCBzdGFydDIsIGVuZDIsIHNjcmlwdCkge1xuXHRcdFx0dmFyIG1pZGRsZSA9IGdldE1pZGRsZVNuYWtlKHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKTtcblxuXHRcdFx0aWYgKG1pZGRsZSA9PT0gbnVsbCB8fCBtaWRkbGUuc3RhcnQgPT09IGVuZDEgJiYgbWlkZGxlLmRpYWcgPT09IGVuZDEgLSBlbmQyIHx8XG5cdFx0XHRcdG1pZGRsZS5lbmQgPT09IHN0YXJ0MSAmJiBtaWRkbGUuZGlhZyA9PT0gc3RhcnQxIC0gc3RhcnQyKSB7XG5cdFx0XHRcdHZhciBpID0gc3RhcnQxO1xuXHRcdFx0XHR2YXIgaiA9IHN0YXJ0Mjtcblx0XHRcdFx0d2hpbGUgKGkgPCBlbmQxIHx8IGogPCBlbmQyKSB7XG5cdFx0XHRcdFx0aWYgKGkgPCBlbmQxICYmIGogPCBlbmQyICYmIGxlZnRbaV0gPT09IHJpZ2h0W2pdKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucHVzaChbS0VFUCwgbGVmdFtpXV0pO1xuXHRcdFx0XHRcdFx0KytpO1xuXHRcdFx0XHRcdFx0KytqO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoZW5kMSAtIHN0YXJ0MSA+IGVuZDIgLSBzdGFydDIpIHtcblx0XHRcdFx0XHRcdFx0c2NyaXB0LnB1c2goW0RFTEVURSwgbGVmdFtpXV0pO1xuXHRcdFx0XHRcdFx0XHQrK2k7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzY3JpcHQucHVzaChbSU5TRVJULCByaWdodFtqXV0pO1xuXHRcdFx0XHRcdFx0XHQrK2o7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWlsZFNjcmlwdChzdGFydDEsIG1pZGRsZS5zdGFydCwgc3RhcnQyLCBtaWRkbGUuc3RhcnQgLSBtaWRkbGUuZGlhZywgc2NyaXB0KTtcblx0XHRcdFx0Zm9yICh2YXIgaTIgPSBtaWRkbGUuc3RhcnQ7IGkyIDwgbWlkZGxlLmVuZDsgKytpMikge1xuXHRcdFx0XHRcdHNjcmlwdC5wdXNoKFtLRUVQLCBsZWZ0W2kyXV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJ1aWxkU2NyaXB0KG1pZGRsZS5lbmQsIGVuZDEsIG1pZGRsZS5lbmQgLSBtaWRkbGUuZGlhZywgZW5kMiwgc2NyaXB0KTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dmFyIGJ1aWxkU25ha2UgPSBmdW5jdGlvbiAoc3RhcnQsIGRpYWcsIGVuZDEsIGVuZDIpIHtcblx0XHRcdHZhciBlbmQgPSBzdGFydDtcblx0XHRcdHdoaWxlIChlbmQgLSBkaWFnIDwgZW5kMiAmJiBlbmQgPCBlbmQxICYmIGxlZnRbZW5kXSA9PT0gcmlnaHRbZW5kIC0gZGlhZ10pIHtcblx0XHRcdFx0KytlbmQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc25ha2Uoc3RhcnQsIGVuZCwgZGlhZyk7XG5cdFx0fTtcblxuXHRcdHZhciBnZXRNaWRkbGVTbmFrZSA9IGZ1bmN0aW9uIChzdGFydDEsIGVuZDEsIHN0YXJ0MiwgZW5kMikge1xuXHRcdFx0Ly8gTXllcnMgQWxnb3JpdGhtXG5cdFx0XHQvLyBJbml0aWFsaXNhdGlvbnNcblx0XHRcdHZhciBtID0gZW5kMSAtIHN0YXJ0MTtcblx0XHRcdHZhciBuID0gZW5kMiAtIHN0YXJ0Mjtcblx0XHRcdGlmIChtID09PSAwIHx8IG4gPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBkZWx0YSA9IG0gLSBuO1xuXHRcdFx0dmFyIHN1bSA9IG4gKyBtO1xuXHRcdFx0dmFyIG9mZnNldCA9IChzdW0gJSAyID09PSAwID8gc3VtIDogc3VtICsgMSkgLyAyO1xuXHRcdFx0dkRvd25bMSArIG9mZnNldF0gPSBzdGFydDE7XG5cdFx0XHR2VXBbMSArIG9mZnNldF0gPSBlbmQxICsgMTtcblxuXHRcdFx0Zm9yICh2YXIgZCA9IDA7IGQgPD0gb2Zmc2V0OyArK2QpIHtcblx0XHRcdFx0Ly8gRG93blxuXHRcdFx0XHRmb3IgKHZhciBrID0gLWQ7IGsgPD0gZDsgayArPSAyKSB7XG5cdFx0XHRcdFx0Ly8gRmlyc3Qgc3RlcFxuXG5cdFx0XHRcdFx0dmFyIGkgPSBrICsgb2Zmc2V0O1xuXHRcdFx0XHRcdGlmIChrID09PSAtZCB8fCBrICE9IGQgJiYgdkRvd25baSAtIDFdIDwgdkRvd25baSArIDFdKSB7XG5cdFx0XHRcdFx0XHR2RG93bltpXSA9IHZEb3duW2kgKyAxXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dkRvd25baV0gPSB2RG93bltpIC0gMV0gKyAxO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciB4ID0gdkRvd25baV07XG5cdFx0XHRcdFx0dmFyIHkgPSB4IC0gc3RhcnQxICsgc3RhcnQyIC0gaztcblxuXHRcdFx0XHRcdHdoaWxlICh4IDwgZW5kMSAmJiB5IDwgZW5kMiAmJiBsZWZ0W3hdID09PSByaWdodFt5XSkge1xuXHRcdFx0XHRcdFx0dkRvd25baV0gPSArK3g7XG5cdFx0XHRcdFx0XHQrK3k7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFNlY29uZCBzdGVwXG5cdFx0XHRcdFx0aWYgKGRlbHRhICUgMiAhPSAwICYmIGRlbHRhIC0gZCA8PSBrICYmIGsgPD0gZGVsdGEgKyBkKSB7XG5cdFx0XHRcdFx0XHRpZiAodlVwW2kgLSBkZWx0YV0gPD0gdkRvd25baV0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJ1aWxkU25ha2UodlVwW2kgLSBkZWx0YV0sIGsgKyBzdGFydDEgLSBzdGFydDIsIGVuZDEsIGVuZDIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwXG5cdFx0XHRcdGZvciAoayA9IGRlbHRhIC0gZDsgayA8PSBkZWx0YSArIGQ7IGsgKz0gMikge1xuXHRcdFx0XHRcdC8vIEZpcnN0IHN0ZXBcblx0XHRcdFx0XHRpID0gayArIG9mZnNldCAtIGRlbHRhO1xuXHRcdFx0XHRcdGlmIChrID09PSBkZWx0YSAtIGQgfHwgayAhPSBkZWx0YSArIGQgJiYgdlVwW2kgKyAxXSA8PSB2VXBbaSAtIDFdKSB7XG5cdFx0XHRcdFx0XHR2VXBbaV0gPSB2VXBbaSArIDFdIC0gMTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dlVwW2ldID0gdlVwW2kgLSAxXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR4ID0gdlVwW2ldIC0gMTtcblx0XHRcdFx0XHR5ID0geCAtIHN0YXJ0MSArIHN0YXJ0MiAtIGs7XG5cdFx0XHRcdFx0d2hpbGUgKHggPj0gc3RhcnQxICYmIHkgPj0gc3RhcnQyICYmIGxlZnRbeF0gPT09IHJpZ2h0W3ldKSB7XG5cdFx0XHRcdFx0XHR2VXBbaV0gPSB4LS07XG5cdFx0XHRcdFx0XHR5LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFNlY29uZCBzdGVwXG5cdFx0XHRcdFx0aWYgKGRlbHRhICUgMiA9PT0gMCAmJiAtZCA8PSBrICYmIGsgPD0gZCkge1xuXHRcdFx0XHRcdFx0aWYgKHZVcFtpXSA8PSB2RG93bltpICsgZGVsdGFdKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBidWlsZFNuYWtlKHZVcFtpXSwgayArIHN0YXJ0MSAtIHN0YXJ0MiwgZW5kMSwgZW5kMik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBzY3JpcHQgPSBbXTtcblx0XHRidWlsZFNjcmlwdCgwLCBsZWZ0Lmxlbmd0aCwgMCwgcmlnaHQubGVuZ3RoLCBzY3JpcHQpO1xuXHRcdHJldHVybiBzY3JpcHQ7XG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRLRUVQOiBLRUVQLFxuXHRcdERFTEVURTogREVMRVRFLFxuXHRcdElOU0VSVDogSU5TRVJULFxuXHRcdGRpZmY6IGRpZmZcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdW5kby9GcmFnbWVudHMuanNcblxuLyoqXG4gKiBGcmFnbWVudHMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSByZWFkcyBhbmQgYXBwbGllcyBodG1sIGZyYWdtZW50cyBmcm9tL3RvIGRvbSBub2Rlcy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51bmRvLkZyYWdtZW50c1xuICogQHByaXZhdGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91bmRvL0ZyYWdtZW50c1wiLCBbXG5cdFwidGlueW1jZS91dGlsL0FyclwiLFxuXHRcInRpbnltY2UvaHRtbC9FbnRpdGllc1wiLFxuXHRcInRpbnltY2UvdW5kby9EaWZmXCJcbl0sIGZ1bmN0aW9uIChBcnIsIEVudGl0aWVzLCBEaWZmKSB7XG5cdHZhciBnZXRPdXRlckh0bWwgPSBmdW5jdGlvbiAoZWxtKSB7XG5cdFx0aWYgKGVsbS5ub2RlVHlwZSA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIGVsbS5vdXRlckhUTUw7XG5cdFx0fSBlbHNlIGlmIChlbG0ubm9kZVR5cGUgPT09IDMpIHtcblx0XHRcdHJldHVybiBFbnRpdGllcy5lbmNvZGVSYXcoZWxtLmRhdGEsIGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKGVsbS5ub2RlVHlwZSA9PT0gOCkge1xuXHRcdFx0cmV0dXJuICc8IS0tJyArIGVsbS5kYXRhICsgJy0tPic7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXG5cdHZhciBjcmVhdGVGcmFnbWVudCA9IGZ1bmN0aW9uKGh0bWwpIHtcblx0XHR2YXIgZnJhZywgbm9kZSwgY29udGFpbmVyO1xuXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG5cdFx0aWYgKGh0bWwpIHtcblx0XHRcdGNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblxuXHRcdHdoaWxlICgobm9kZSA9IGNvbnRhaW5lci5maXJzdENoaWxkKSkge1xuXHRcdFx0ZnJhZy5hcHBlbmRDaGlsZChub2RlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZnJhZztcblx0fTtcblxuXHR2YXIgaW5zZXJ0QXQgPSBmdW5jdGlvbiAoZWxtLCBodG1sLCBpbmRleCkge1xuXHRcdHZhciBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KGh0bWwpO1xuXHRcdGlmIChlbG0uaGFzQ2hpbGROb2RlcygpICYmIGluZGV4IDwgZWxtLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgdGFyZ2V0ID0gZWxtLmNoaWxkTm9kZXNbaW5kZXhdO1xuXHRcdFx0dGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LCB0YXJnZXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbG0uYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgcmVtb3ZlQXQgPSBmdW5jdGlvbiAoZWxtLCBpbmRleCkge1xuXHRcdGlmIChlbG0uaGFzQ2hpbGROb2RlcygpICYmIGluZGV4IDwgZWxtLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgdGFyZ2V0ID0gZWxtLmNoaWxkTm9kZXNbaW5kZXhdO1xuXHRcdFx0dGFyZ2V0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFyZ2V0KTtcblx0XHR9XG5cdH07XG5cblx0dmFyIGFwcGx5RGlmZiA9IGZ1bmN0aW9uIChkaWZmLCBlbG0pIHtcblx0XHR2YXIgaW5kZXggPSAwO1xuXHRcdEFyci5lYWNoKGRpZmYsIGZ1bmN0aW9uIChhY3Rpb24pIHtcblx0XHRcdGlmIChhY3Rpb25bMF0gPT09IERpZmYuS0VFUCkge1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0fSBlbHNlIGlmIChhY3Rpb25bMF0gPT09IERpZmYuSU5TRVJUKSB7XG5cdFx0XHRcdGluc2VydEF0KGVsbSwgYWN0aW9uWzFdLCBpbmRleCk7XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvblswXSA9PT0gRGlmZi5ERUxFVEUpIHtcblx0XHRcdFx0cmVtb3ZlQXQoZWxtLCBpbmRleCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cblx0dmFyIHJlYWQgPSBmdW5jdGlvbiAoZWxtKSB7XG5cdFx0cmV0dXJuIEFyci5tYXAoZWxtLmNoaWxkTm9kZXMsIGdldE91dGVySHRtbCk7XG5cdH07XG5cblx0dmFyIHdyaXRlID0gZnVuY3Rpb24gKGZyYWdtZW50cywgZWxtKSB7XG5cdFx0dmFyIGN1cnJlbnRGcmFnbWVudHMgPSBBcnIubWFwKGVsbS5jaGlsZE5vZGVzLCBnZXRPdXRlckh0bWwpO1xuXHRcdGFwcGx5RGlmZihEaWZmLmRpZmYoY3VycmVudEZyYWdtZW50cywgZnJhZ21lbnRzKSwgZWxtKTtcblx0XHRyZXR1cm4gZWxtO1xuXHR9O1xuXG5cdHJldHVybiB7XG5cdFx0cmVhZDogcmVhZCxcblx0XHR3cml0ZTogd3JpdGVcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdW5kby9MZXZlbHMuanNcblxuLyoqXG4gKiBMZXZlbHMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBoYW5kbGVzIGdldHRpbmcvc2V0dGluZyB1bmRvIGxldmVscyB0by9mcm9tIGVkaXRvciBpbnN0YW5jZXMuXG4gKlxuICogQGNsYXNzIHRpbnltY2UudW5kby5MZXZlbHNcbiAqIEBwcml2YXRlXG4gKi9cbmRlZmluZShcInRpbnltY2UvdW5kby9MZXZlbHNcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL3VuZG8vRnJhZ21lbnRzXCJcbl0sIGZ1bmN0aW9uIChBcnIsIEZyYWdtZW50cykge1xuXHR2YXIgaGFzSWZyYW1lcyA9IGZ1bmN0aW9uIChodG1sKSB7XG5cdFx0cmV0dXJuIGh0bWwuaW5kZXhPZignPC9pZnJhbWU+JykgIT09IC0xO1xuXHR9O1xuXG5cdHZhciBjcmVhdGVGcmFnbWVudGVkTGV2ZWwgPSBmdW5jdGlvbiAoZnJhZ21lbnRzKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6ICdmcmFnbWVudGVkJyxcblx0XHRcdGZyYWdtZW50czogZnJhZ21lbnRzLFxuXHRcdFx0Y29udGVudDogJycsXG5cdFx0XHRib29rbWFyazogbnVsbCxcblx0XHRcdGJlZm9yZUJvb2ttYXJrOiBudWxsXG5cdFx0fTtcblx0fTtcblxuXHR2YXIgY3JlYXRlQ29tcGxldGVMZXZlbCA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6ICdjb21wbGV0ZScsXG5cdFx0XHRmcmFnbWVudHM6IG51bGwsXG5cdFx0XHRjb250ZW50OiBjb250ZW50LFxuXHRcdFx0Ym9va21hcms6IG51bGwsXG5cdFx0XHRiZWZvcmVCb29rbWFyazogbnVsbFxuXHRcdH07XG5cdH07XG5cblx0dmFyIGNyZWF0ZUZyb21FZGl0b3IgPSBmdW5jdGlvbiAoZWRpdG9yKSB7XG5cdFx0dmFyIGZyYWdtZW50cywgY29udGVudCwgdHJpbW1lZEZyYWdtZW50cztcblxuXHRcdGZyYWdtZW50cyA9IEZyYWdtZW50cy5yZWFkKGVkaXRvci5nZXRCb2R5KCkpO1xuXHRcdHRyaW1tZWRGcmFnbWVudHMgPSBBcnIubWFwKGZyYWdtZW50cywgZnVuY3Rpb24gKGh0bWwpIHtcblx0XHRcdHJldHVybiBlZGl0b3Iuc2VyaWFsaXplci50cmltQ29udGVudChodG1sKTtcblx0XHR9KTtcblx0XHRjb250ZW50ID0gdHJpbW1lZEZyYWdtZW50cy5qb2luKCcnKTtcblxuXHRcdHJldHVybiBoYXNJZnJhbWVzKGNvbnRlbnQpID8gY3JlYXRlRnJhZ21lbnRlZExldmVsKHRyaW1tZWRGcmFnbWVudHMpIDogY3JlYXRlQ29tcGxldGVMZXZlbChjb250ZW50KTtcblx0fTtcblxuXHR2YXIgYXBwbHlUb0VkaXRvciA9IGZ1bmN0aW9uIChlZGl0b3IsIGxldmVsLCBiZWZvcmUpIHtcblx0XHRpZiAobGV2ZWwudHlwZSA9PT0gJ2ZyYWdtZW50ZWQnKSB7XG5cdFx0XHRGcmFnbWVudHMud3JpdGUobGV2ZWwuZnJhZ21lbnRzLCBlZGl0b3IuZ2V0Qm9keSgpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWRpdG9yLnNldENvbnRlbnQobGV2ZWwuY29udGVudCwge2Zvcm1hdDogJ3Jhdyd9KTtcblx0XHR9XG5cblx0XHRlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJlZm9yZSA/IGxldmVsLmJlZm9yZUJvb2ttYXJrIDogbGV2ZWwuYm9va21hcmspO1xuXHR9O1xuXG5cdHZhciBnZXRMZXZlbENvbnRlbnQgPSBmdW5jdGlvbiAobGV2ZWwpIHtcblx0XHRyZXR1cm4gbGV2ZWwudHlwZSA9PT0gJ2ZyYWdtZW50ZWQnID8gbGV2ZWwuZnJhZ21lbnRzLmpvaW4oJycpIDogbGV2ZWwuY29udGVudDtcblx0fTtcblxuXHR2YXIgaXNFcSA9IGZ1bmN0aW9uIChsZXZlbDEsIGxldmVsMikge1xuXHRcdHJldHVybiBnZXRMZXZlbENvbnRlbnQobGV2ZWwxKSA9PT0gZ2V0TGV2ZWxDb250ZW50KGxldmVsMik7XG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRjcmVhdGVGcmFnbWVudGVkTGV2ZWw6IGNyZWF0ZUZyYWdtZW50ZWRMZXZlbCxcblx0XHRjcmVhdGVDb21wbGV0ZUxldmVsOiBjcmVhdGVDb21wbGV0ZUxldmVsLFxuXHRcdGNyZWF0ZUZyb21FZGl0b3I6IGNyZWF0ZUZyb21FZGl0b3IsXG5cdFx0YXBwbHlUb0VkaXRvcjogYXBwbHlUb0VkaXRvcixcblx0XHRpc0VxOiBpc0VxXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL1VuZG9NYW5hZ2VyLmpzXG5cbi8qKlxuICogVW5kb01hbmFnZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIHVuZG8vcmVkbyBoaXN0b3J5IGxldmVscyBmb3IgdGhlIGVkaXRvci4gU2luY2UgdGhlIGJ1aWx0LWluIHVuZG8vcmVkbyBoYXMgbWFqb3IgZHJhd2JhY2tzIGEgY3VzdG9tIG9uZSB3YXMgbmVlZGVkLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLlVuZG9NYW5hZ2VyXG4gKi9cbmRlZmluZShcInRpbnltY2UvVW5kb01hbmFnZXJcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9WS1wiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvdW5kby9MZXZlbHNcIlxuXSwgZnVuY3Rpb24oVkssIFRvb2xzLCBMZXZlbHMpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGVkaXRvcikge1xuXHRcdHZhciBzZWxmID0gdGhpcywgaW5kZXggPSAwLCBkYXRhID0gW10sIGJlZm9yZUJvb2ttYXJrLCBpc0ZpcnN0VHlwZWRDaGFyYWN0ZXIsIGxvY2tzID0gMDtcblxuXHRcdGZ1bmN0aW9uIHNldERpcnR5KHN0YXRlKSB7XG5cdFx0XHRlZGl0b3Iuc2V0RGlydHkoc3RhdGUpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFkZE5vblR5cGluZ1VuZG9MZXZlbChlKSB7XG5cdFx0XHRzZWxmLnR5cGluZyA9IGZhbHNlO1xuXHRcdFx0c2VsZi5hZGQoe30sIGUpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGVuZFR5cGluZygpIHtcblx0XHRcdGlmIChzZWxmLnR5cGluZykge1xuXHRcdFx0XHRzZWxmLnR5cGluZyA9IGZhbHNlO1xuXHRcdFx0XHRzZWxmLmFkZCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCBpbml0aWFsIHVuZG8gbGV2ZWwgd2hlbiB0aGUgZWRpdG9yIGlzIGluaXRpYWxpemVkXG5cdFx0ZWRpdG9yLm9uKCdpbml0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRzZWxmLmFkZCgpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gR2V0IHBvc2l0aW9uIGJlZm9yZSBhbiBleGVjQ29tbWFuZCBpcyBwcm9jZXNzZWRcblx0XHRlZGl0b3Iub24oJ0JlZm9yZUV4ZWNDb21tYW5kJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0dmFyIGNtZCA9IGUuY29tbWFuZDtcblxuXHRcdFx0aWYgKGNtZCAhPT0gJ1VuZG8nICYmIGNtZCAhPT0gJ1JlZG8nICYmIGNtZCAhPT0gJ21jZVJlcGFpbnQnKSB7XG5cdFx0XHRcdGVuZFR5cGluZygpO1xuXHRcdFx0XHRzZWxmLmJlZm9yZUNoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gQWRkIHVuZG8gbGV2ZWwgYWZ0ZXIgYW4gZXhlY0NvbW1hbmQgY2FsbCB3YXMgbWFkZVxuXHRcdGVkaXRvci5vbignRXhlY0NvbW1hbmQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHR2YXIgY21kID0gZS5jb21tYW5kO1xuXG5cdFx0XHRpZiAoY21kICE9PSAnVW5kbycgJiYgY21kICE9PSAnUmVkbycgJiYgY21kICE9PSAnbWNlUmVwYWludCcpIHtcblx0XHRcdFx0YWRkTm9uVHlwaW5nVW5kb0xldmVsKGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZWRpdG9yLm9uKCdPYmplY3RSZXNpemVTdGFydCBDdXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdHNlbGYuYmVmb3JlQ2hhbmdlKCk7XG5cdFx0fSk7XG5cblx0XHRlZGl0b3Iub24oJ1NhdmVDb250ZW50IE9iamVjdFJlc2l6ZWQgYmx1cicsIGFkZE5vblR5cGluZ1VuZG9MZXZlbCk7XG5cdFx0ZWRpdG9yLm9uKCdEcmFnRW5kJywgYWRkTm9uVHlwaW5nVW5kb0xldmVsKTtcblxuXHRcdGVkaXRvci5vbignS2V5VXAnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHR2YXIga2V5Q29kZSA9IGUua2V5Q29kZTtcblxuXHRcdFx0Ly8gSWYga2V5IGlzIHByZXZlbnRlZCB0aGVuIGRvbid0IGFkZCB1bmRvIGxldmVsXG5cdFx0XHQvLyBUaGlzIHdvdWxkIGhhcHBlbiBvbiBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIGV4YW1wbGVcblx0XHRcdGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKChrZXlDb2RlID49IDMzICYmIGtleUNvZGUgPD0gMzYpIHx8IChrZXlDb2RlID49IDM3ICYmIGtleUNvZGUgPD0gNDApIHx8IGtleUNvZGUgPT09IDQ1IHx8IGUuY3RybEtleSkge1xuXHRcdFx0XHRhZGROb25UeXBpbmdVbmRvTGV2ZWwoKTtcblx0XHRcdFx0ZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChrZXlDb2RlID09PSA0NiB8fCBrZXlDb2RlID09PSA4KSB7XG5cdFx0XHRcdGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGaXJlIGEgVHlwaW5nVW5kbyBldmVudCBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIGVudGVyZWRcblx0XHRcdGlmIChpc0ZpcnN0VHlwZWRDaGFyYWN0ZXIgJiYgc2VsZi50eXBpbmcpIHtcblx0XHRcdFx0Ly8gTWFrZSBpdCBkaXJ0eSBpZiB0aGUgY29udGVudCB3YXMgY2hhbmdlZCBhZnRlciB0eXBpbmcgdGhlIGZpcnN0IGNoYXJhY3RlclxuXHRcdFx0XHRpZiAoIWVkaXRvci5pc0RpcnR5KCkpIHtcblx0XHRcdFx0XHRzZXREaXJ0eShkYXRhWzBdICYmICFMZXZlbHMuaXNFcShMZXZlbHMuY3JlYXRlRnJvbUVkaXRvcihlZGl0b3IpLCBkYXRhWzBdKSk7XG5cblx0XHRcdFx0XHQvLyBGaXJlIGluaXRpYWwgY2hhbmdlIGV2ZW50XG5cdFx0XHRcdFx0aWYgKGVkaXRvci5pc0RpcnR5KCkpIHtcblx0XHRcdFx0XHRcdGVkaXRvci5maXJlKCdjaGFuZ2UnLCB7bGV2ZWw6IGRhdGFbMF0sIGxhc3RMZXZlbDogbnVsbH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVkaXRvci5maXJlKCdUeXBpbmdVbmRvJyk7XG5cdFx0XHRcdGlzRmlyc3RUeXBlZENoYXJhY3RlciA9IGZhbHNlO1xuXHRcdFx0XHRlZGl0b3Iubm9kZUNoYW5nZWQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGVkaXRvci5vbignS2V5RG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdHZhciBrZXlDb2RlID0gZS5rZXlDb2RlO1xuXG5cdFx0XHQvLyBJZiBrZXkgaXMgcHJldmVudGVkIHRoZW4gZG9uJ3QgYWRkIHVuZG8gbGV2ZWxcblx0XHRcdC8vIFRoaXMgd291bGQgaGFwcGVuIG9uIGtleWJvYXJkIHNob3J0Y3V0cyBmb3IgZXhhbXBsZVxuXHRcdFx0aWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJcyBjaGFyYWN0ZXIgcG9zaXRpb24ga2V5cyBsZWZ0LHJpZ2h0LHVwLGRvd24saG9tZSxlbmQscGdkb3duLHBndXAsZW50ZXJcblx0XHRcdGlmICgoa2V5Q29kZSA+PSAzMyAmJiBrZXlDb2RlIDw9IDM2KSB8fCAoa2V5Q29kZSA+PSAzNyAmJiBrZXlDb2RlIDw9IDQwKSB8fCBrZXlDb2RlID09PSA0NSkge1xuXHRcdFx0XHRpZiAoc2VsZi50eXBpbmcpIHtcblx0XHRcdFx0XHRhZGROb25UeXBpbmdVbmRvTGV2ZWwoZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGtleSBpc24ndCBDdHJsK0FsdC9BbHRHclxuXHRcdFx0dmFyIG1vZEtleSA9IChlLmN0cmxLZXkgJiYgIWUuYWx0S2V5KSB8fCBlLm1ldGFLZXk7XG5cdFx0XHRpZiAoKGtleUNvZGUgPCAxNiB8fCBrZXlDb2RlID4gMjApICYmIGtleUNvZGUgIT09IDIyNCAmJiBrZXlDb2RlICE9PSA5MSAmJiAhc2VsZi50eXBpbmcgJiYgIW1vZEtleSkge1xuXHRcdFx0XHRzZWxmLmJlZm9yZUNoYW5nZSgpO1xuXHRcdFx0XHRzZWxmLnR5cGluZyA9IHRydWU7XG5cdFx0XHRcdHNlbGYuYWRkKHt9LCBlKTtcblx0XHRcdFx0aXNGaXJzdFR5cGVkQ2hhcmFjdGVyID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGVkaXRvci5vbignTW91c2VEb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0aWYgKHNlbGYudHlwaW5nKSB7XG5cdFx0XHRcdGFkZE5vblR5cGluZ1VuZG9MZXZlbChlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEFkZCBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIHVuZG8vcmVkbyBrZXlzXG5cdFx0ZWRpdG9yLmFkZFNob3J0Y3V0KCdtZXRhK3onLCAnJywgJ1VuZG8nKTtcblx0XHRlZGl0b3IuYWRkU2hvcnRjdXQoJ21ldGEreSxtZXRhK3NoaWZ0K3onLCAnJywgJ1JlZG8nKTtcblxuXHRcdGVkaXRvci5vbignQWRkVW5kbyBVbmRvIFJlZG8gQ2xlYXJVbmRvcycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdGlmICghZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuXHRcdFx0XHRlZGl0b3Iubm9kZUNoYW5nZWQoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8qZXNsaW50IGNvbnNpc3RlbnQtdGhpczowICovXG5cdFx0c2VsZiA9IHtcblx0XHRcdC8vIEV4cGxvZGUgZm9yIGRlYnVnZ2luZyByZWFzb25zXG5cdFx0XHRkYXRhOiBkYXRhLFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFN0YXRlIGlmIHRoZSB1c2VyIGlzIGN1cnJlbnRseSB0eXBpbmcgb3Igbm90LiBUaGlzIHdpbGwgYWRkIGEgdHlwaW5nIG9wZXJhdGlvbiBpbnRvIG9uZSB1bmRvXG5cdFx0XHQgKiBsZXZlbCBpbnN0ZWFkIG9mIG9uZSBuZXcgbGV2ZWwgZm9yIGVhY2gga2V5c3Ryb2tlLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBmaWVsZCB7Qm9vbGVhbn0gdHlwaW5nXG5cdFx0XHQgKi9cblx0XHRcdHR5cGluZzogZmFsc2UsXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogU3RvcmVzIGF3YXkgYSBib29rbWFyayB0byBiZSB1c2VkIHdoZW4gcGVyZm9ybWluZyBhbiB1bmRvIGFjdGlvbiBzbyB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgYmVmb3JlXG5cdFx0XHQgKiB0aGUgY2hhbmdlIGhhcyBiZWVuIG1hZGUuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBiZWZvcmVDaGFuZ2Vcblx0XHRcdCAqL1xuXHRcdFx0YmVmb3JlQ2hhbmdlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCFsb2Nrcykge1xuXHRcdFx0XHRcdGJlZm9yZUJvb2ttYXJrID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRCb29rbWFyaygyLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIGEgbmV3IHVuZG8gbGV2ZWwvc25hcHNob3QgdG8gdGhlIHVuZG8gbGlzdC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIGFkZFxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IGxldmVsIE9wdGlvbmFsIHVuZG8gbGV2ZWwgb2JqZWN0IHRvIGFkZC5cblx0XHRcdCAqIEBwYXJhbSB7RE9NRXZlbnR9IGV2ZW50IE9wdGlvbmFsIGV2ZW50IHJlc3BvbnNpYmxlIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHVuZG8gbGV2ZWwuXG5cdFx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IFVuZG8gbGV2ZWwgdGhhdCBnb3QgYWRkZWQgb3IgbnVsbCBpdCBhIGxldmVsIHdhc24ndCBuZWVkZWQuXG5cdFx0XHQgKi9cblx0XHRcdGFkZDogZnVuY3Rpb24obGV2ZWwsIGV2ZW50KSB7XG5cdFx0XHRcdHZhciBpLCBzZXR0aW5ncyA9IGVkaXRvci5zZXR0aW5ncywgbGFzdExldmVsLCBjdXJyZW50TGV2ZWw7XG5cblx0XHRcdFx0Y3VycmVudExldmVsID0gTGV2ZWxzLmNyZWF0ZUZyb21FZGl0b3IoZWRpdG9yKTtcblx0XHRcdFx0bGV2ZWwgPSBsZXZlbCB8fCB7fTtcblx0XHRcdFx0bGV2ZWwgPSBUb29scy5leHRlbmQobGV2ZWwsIGN1cnJlbnRMZXZlbCk7XG5cblx0XHRcdFx0aWYgKGxvY2tzIHx8IGVkaXRvci5yZW1vdmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsYXN0TGV2ZWwgPSBkYXRhW2luZGV4XTtcblx0XHRcdFx0aWYgKGVkaXRvci5maXJlKCdCZWZvcmVBZGRVbmRvJywge2xldmVsOiBsZXZlbCwgbGFzdExldmVsOiBsYXN0TGV2ZWwsIG9yaWdpbmFsRXZlbnQ6IGV2ZW50fSkuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCB1bmRvIGxldmVsIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAobGFzdExldmVsICYmIExldmVscy5pc0VxKGxhc3RMZXZlbCwgbGV2ZWwpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgYmVmb3JlIGJvb2ttYXJrIG9uIHByZXZpb3VzIGxldmVsXG5cdFx0XHRcdGlmIChkYXRhW2luZGV4XSkge1xuXHRcdFx0XHRcdGRhdGFbaW5kZXhdLmJlZm9yZUJvb2ttYXJrID0gYmVmb3JlQm9va21hcms7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaW1lIHRvIGNvbXByZXNzXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5jdXN0b21fdW5kb19yZWRvX2xldmVscykge1xuXHRcdFx0XHRcdGlmIChkYXRhLmxlbmd0aCA+IHNldHRpbmdzLmN1c3RvbV91bmRvX3JlZG9fbGV2ZWxzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0ZGF0YVtpXSA9IGRhdGFbaSArIDFdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRkYXRhLmxlbmd0aC0tO1xuXHRcdFx0XHRcdFx0aW5kZXggPSBkYXRhLmxlbmd0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgYSBub24gaW50cnVzaXZlIG5vcm1hbGl6ZWQgYm9va21hcmtcblx0XHRcdFx0bGV2ZWwuYm9va21hcmsgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldEJvb2ttYXJrKDIsIHRydWUpO1xuXG5cdFx0XHRcdC8vIENyb3AgYXJyYXkgaWYgbmVlZGVkXG5cdFx0XHRcdGlmIChpbmRleCA8IGRhdGEubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdGRhdGEubGVuZ3RoID0gaW5kZXggKyAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGF0YS5wdXNoKGxldmVsKTtcblx0XHRcdFx0aW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG5cblx0XHRcdFx0dmFyIGFyZ3MgPSB7bGV2ZWw6IGxldmVsLCBsYXN0TGV2ZWw6IGxhc3RMZXZlbCwgb3JpZ2luYWxFdmVudDogZXZlbnR9O1xuXG5cdFx0XHRcdGVkaXRvci5maXJlKCdBZGRVbmRvJywgYXJncyk7XG5cblx0XHRcdFx0aWYgKGluZGV4ID4gMCkge1xuXHRcdFx0XHRcdHNldERpcnR5KHRydWUpO1xuXHRcdFx0XHRcdGVkaXRvci5maXJlKCdjaGFuZ2UnLCBhcmdzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBsZXZlbDtcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVW5kb2VzIHRoZSBsYXN0IGFjdGlvbi5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIHVuZG9cblx0XHRcdCAqIEByZXR1cm4ge09iamVjdH0gVW5kbyBsZXZlbCBvciBudWxsIGlmIG5vIHVuZG8gd2FzIHBlcmZvcm1lZC5cblx0XHRcdCAqL1xuXHRcdFx0dW5kbzogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBsZXZlbDtcblxuXHRcdFx0XHRpZiAoc2VsZi50eXBpbmcpIHtcblx0XHRcdFx0XHRzZWxmLmFkZCgpO1xuXHRcdFx0XHRcdHNlbGYudHlwaW5nID0gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0bGV2ZWwgPSBkYXRhWy0taW5kZXhdO1xuXHRcdFx0XHRcdExldmVscy5hcHBseVRvRWRpdG9yKGVkaXRvciwgbGV2ZWwsIHRydWUpO1xuXHRcdFx0XHRcdHNldERpcnR5KHRydWUpO1xuXHRcdFx0XHRcdGVkaXRvci5maXJlKCd1bmRvJywge2xldmVsOiBsZXZlbH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGxldmVsO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZWRvZXMgdGhlIGxhc3QgYWN0aW9uLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBtZXRob2QgcmVkb1xuXHRcdFx0ICogQHJldHVybiB7T2JqZWN0fSBSZWRvIGxldmVsIG9yIG51bGwgaWYgbm8gcmVkbyB3YXMgcGVyZm9ybWVkLlxuXHRcdFx0ICovXG5cdFx0XHRyZWRvOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGxldmVsO1xuXG5cdFx0XHRcdGlmIChpbmRleCA8IGRhdGEubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdGxldmVsID0gZGF0YVsrK2luZGV4XTtcblx0XHRcdFx0XHRMZXZlbHMuYXBwbHlUb0VkaXRvcihlZGl0b3IsIGxldmVsLCBmYWxzZSk7XG5cdFx0XHRcdFx0c2V0RGlydHkodHJ1ZSk7XG5cdFx0XHRcdFx0ZWRpdG9yLmZpcmUoJ3JlZG8nLCB7bGV2ZWw6IGxldmVsfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbGV2ZWw7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlbW92ZXMgYWxsIHVuZG8gbGV2ZWxzLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBtZXRob2QgY2xlYXJcblx0XHRcdCAqL1xuXHRcdFx0Y2xlYXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhID0gW107XG5cdFx0XHRcdGluZGV4ID0gMDtcblx0XHRcdFx0c2VsZi50eXBpbmcgPSBmYWxzZTtcblx0XHRcdFx0c2VsZi5kYXRhID0gZGF0YTtcblx0XHRcdFx0ZWRpdG9yLmZpcmUoJ0NsZWFyVW5kb3MnKTtcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSB1bmRvIG1hbmFnZXIgaGFzIGFueSB1bmRvIGxldmVscy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAbWV0aG9kIGhhc1VuZG9cblx0XHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIHVuZG8gbWFuYWdlciBoYXMgYW55IHVuZG8gbGV2ZWxzLlxuXHRcdFx0ICovXG5cdFx0XHRoYXNVbmRvOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gSGFzIHVuZG8gbGV2ZWxzIG9yIHR5cGluZyBhbmQgY29udGVudCBpc24ndCB0aGUgc2FtZSBhcyB0aGUgaW5pdGlhbCBsZXZlbFxuXHRcdFx0XHRyZXR1cm4gaW5kZXggPiAwIHx8IChzZWxmLnR5cGluZyAmJiBkYXRhWzBdICYmICFMZXZlbHMuaXNFcShMZXZlbHMuY3JlYXRlRnJvbUVkaXRvcihlZGl0b3IpLCBkYXRhWzBdKSk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgdW5kbyBtYW5hZ2VyIGhhcyBhbnkgcmVkbyBsZXZlbHMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBoYXNSZWRvXG5cdFx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSB1bmRvIG1hbmFnZXIgaGFzIGFueSByZWRvIGxldmVscy5cblx0XHRcdCAqL1xuXHRcdFx0aGFzUmVkbzogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBpbmRleCA8IGRhdGEubGVuZ3RoIC0gMSAmJiAhc2VsZi50eXBpbmc7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgbXV0YXRvciBmdW5jdGlvbiBhcyBhbiB1bmRvIHRyYW5zYWN0aW9uLiBUaGUgc2VsZWN0aW9uXG5cdFx0XHQgKiBiZWZvcmUgdGhlIG1vZGlmaWNhdGlvbiB3aWxsIGJlIHN0b3JlZCB0byB0aGUgdW5kbyBzdGFjayBhbmQgaWYgdGhlIERPTSBjaGFuZ2VzXG5cdFx0XHQgKiBpdCB3aWxsIGFkZCBhIG5ldyB1bmRvIGxldmVsLiBBbnkgbWV0aG9kcyB3aXRoaW4gdGhlIHRyYW5zbGF0aW9uIHRoYXQgYWRkcyB1bmRvIGxldmVscyB3aWxsXG5cdFx0XHQgKiBiZSBpZ25vcmVkLiBTbyBhIHRyYW5zbGF0aW9uIGNhbiBpbmNsdWRlIGNhbGxzIHRvIGV4ZWNDb21tYW5kIG9yIGVkaXRvci5pbnNlcnRDb250ZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBtZXRob2QgdHJhbnNhY3Rcblx0XHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIEZ1bmN0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCBhbmQgaGFzIGRvbSBtYW5pcHVsYXRpb24gbG9naWMgaW4gaXQuXG5cdFx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IFVuZG8gbGV2ZWwgdGhhdCBnb3QgYWRkZWQgb3IgbnVsbCBpdCBhIGxldmVsIHdhc24ndCBuZWVkZWQuXG5cdFx0XHQgKi9cblx0XHRcdHRyYW5zYWN0OiBmdW5jdGlvbihjYWxsYmFjaykge1xuXHRcdFx0XHRlbmRUeXBpbmcoKTtcblx0XHRcdFx0c2VsZi5iZWZvcmVDaGFuZ2UoKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvY2tzKys7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRsb2Nrcy0tO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHNlbGYuYWRkKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEFkZHMgYW4gZXh0cmEgXCJoaWRkZW5cIiB1bmRvIGxldmVsIGJ5IGZpcnN0IGFwcGx5aW5nIHRoZSBmaXJzdCBtdXRhdGlvbiBhbmQgc3RvcmUgdGhhdCB0byB0aGUgdW5kbyBzdGFja1xuXHRcdFx0ICogdGhlbiByb2xsIGJhY2sgdGhhdCBjaGFuZ2UgYW5kIGRvIHRoZSBzZWNvbmQgbXV0YXRpb24gb24gdG9wIG9mIHRoZSBzdGFjay4gVGhpcyB3aWxsIHByb2R1Y2UgYW4gZXh0cmFcblx0XHRcdCAqIHVuZG8gbGV2ZWwgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHNlZSB1bnRpbCB0aGV5IHVuZG8uXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBleHRyYVxuXHRcdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sxIEZ1bmN0aW9uIHRoYXQgZG9lcyBtdXRhdGlvbiBidXQgZ2V0cyBzdG9yZWQgYXMgYSBcImhpZGRlblwiIGV4dHJhIHVuZG8gbGV2ZWwuXG5cdFx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjazIgRnVuY3Rpb24gdGhhdCBkb2VzIG11dGF0aW9uIGJ1dCBnZXRzIGRpc3BsYXllZCB0byB0aGUgdXNlci5cblx0XHRcdCAqL1xuXHRcdFx0ZXh0cmE6IGZ1bmN0aW9uIChjYWxsYmFjazEsIGNhbGxiYWNrMikge1xuXHRcdFx0XHR2YXIgbGFzdExldmVsLCBib29rbWFyaztcblxuXHRcdFx0XHRpZiAoc2VsZi50cmFuc2FjdChjYWxsYmFjazEpKSB7XG5cdFx0XHRcdFx0Ym9va21hcmsgPSBkYXRhW2luZGV4XS5ib29rbWFyaztcblx0XHRcdFx0XHRsYXN0TGV2ZWwgPSBkYXRhW2luZGV4IC0gMV07XG5cdFx0XHRcdFx0TGV2ZWxzLmFwcGx5VG9FZGl0b3IoZWRpdG9yLCBsYXN0TGV2ZWwsIHRydWUpO1xuXG5cdFx0XHRcdFx0aWYgKHNlbGYudHJhbnNhY3QoY2FsbGJhY2syKSkge1xuXHRcdFx0XHRcdFx0ZGF0YVtpbmRleCAtIDFdLmJlZm9yZUJvb2ttYXJrID0gYm9va21hcms7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHJldHVybiBzZWxmO1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9FbnRlcktleS5qc1xuXG4vKipcbiAqIEVudGVyS2V5LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogQ29udGFpbnMgbG9naWMgZm9yIGhhbmRsaW5nIHRoZSBlbnRlciBrZXkgdG8gc3BsaXQvZ2VuZXJhdGUgYmxvY2sgZWxlbWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLkVudGVyS2V5XG4gKi9cbmRlZmluZShcInRpbnltY2UvRW50ZXJLZXlcIiwgW1xuXHRcInRpbnltY2UvZG9tL1RyZWVXYWxrZXJcIixcblx0XCJ0aW55bWNlL2RvbS9SYW5nZVV0aWxzXCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldENvbnRhaW5lclwiLFxuXHRcInRpbnltY2UvRW52XCJcbl0sIGZ1bmN0aW9uKFRyZWVXYWxrZXIsIFJhbmdlVXRpbHMsIENhcmV0Q29udGFpbmVyLCBFbnYpIHtcblx0dmFyIGlzSUUgPSBFbnYuaWUgJiYgRW52LmllIDwgMTE7XG5cblx0cmV0dXJuIGZ1bmN0aW9uKGVkaXRvcikge1xuXHRcdHZhciBkb20gPSBlZGl0b3IuZG9tLCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLCBzZXR0aW5ncyA9IGVkaXRvci5zZXR0aW5ncztcblx0XHR2YXIgdW5kb01hbmFnZXIgPSBlZGl0b3IudW5kb01hbmFnZXIsIHNjaGVtYSA9IGVkaXRvci5zY2hlbWEsIG5vbkVtcHR5RWxlbWVudHNNYXAgPSBzY2hlbWEuZ2V0Tm9uRW1wdHlFbGVtZW50cygpLFxuXHRcdFx0bW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwID0gc2NoZW1hLmdldE1vdmVDYXJldEJlZm9yZU9uRW50ZXJFbGVtZW50cygpO1xuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlRW50ZXJLZXkoZXZ0KSB7XG5cdFx0XHR2YXIgcm5nLCB0bXBSbmcsIGVkaXRhYmxlUm9vdCwgY29udGFpbmVyLCBvZmZzZXQsIHBhcmVudEJsb2NrLCBkb2N1bWVudE1vZGUsIHNoaWZ0S2V5LFxuXHRcdFx0XHRuZXdCbG9jaywgZnJhZ21lbnQsIGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9ja05hbWUsIGNvbnRhaW5lckJsb2NrTmFtZSwgbmV3QmxvY2tOYW1lLCBpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lcjtcblxuXHRcdFx0Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBibG9jayBjYW4gYmUgc3BsaXQgaW50byB0d28gYmxvY2tzIG9yIG5vdFxuXHRcdFx0ZnVuY3Rpb24gY2FuU3BsaXRCbG9jayhub2RlKSB7XG5cdFx0XHRcdHJldHVybiBub2RlICYmXG5cdFx0XHRcdFx0ZG9tLmlzQmxvY2sobm9kZSkgJiZcblx0XHRcdFx0XHQhL14oVER8VEh8Q0FQVElPTnxGT1JNKSQvLnRlc3Qobm9kZS5ub2RlTmFtZSkgJiZcblx0XHRcdFx0XHQhL14oZml4ZWR8YWJzb2x1dGUpL2kudGVzdChub2RlLnN0eWxlLnBvc2l0aW9uKSAmJlxuXHRcdFx0XHRcdGRvbS5nZXRDb250ZW50RWRpdGFibGUobm9kZSkgIT09IFwidHJ1ZVwiO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBpc1RhYmxlQ2VsbChub2RlKSB7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIC9eKFREfFRIfENBUFRJT04pJC8udGVzdChub2RlLm5vZGVOYW1lKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVuZGVycyBlbXB0eSBibG9jayBvbiBJRVxuXHRcdFx0ZnVuY3Rpb24gcmVuZGVyQmxvY2tPbklFKGJsb2NrKSB7XG5cdFx0XHRcdHZhciBvbGRSbmc7XG5cblx0XHRcdFx0aWYgKGRvbS5pc0Jsb2NrKGJsb2NrKSkge1xuXHRcdFx0XHRcdG9sZFJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcblx0XHRcdFx0XHRibG9jay5hcHBlbmRDaGlsZChkb20uY3JlYXRlKCdzcGFuJywgbnVsbCwgJ1xcdTAwYTAnKSk7XG5cdFx0XHRcdFx0c2VsZWN0aW9uLnNlbGVjdChibG9jayk7XG5cdFx0XHRcdFx0YmxvY2subGFzdENoaWxkLm91dGVySFRNTCA9ICcnO1xuXHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcob2xkUm5nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgdGhlIGZpcnN0IGVtcHR5IGlubGluZSBlbGVtZW50IG9mIHRoZSBibG9jayBzbyB0aGlzOiA8cD48Yj48ZW0+PC9lbT48L2I+eDwvcD4gYmVjb21lcyB0aGlzOiA8cD54PC9wPlxuXHRcdFx0ZnVuY3Rpb24gdHJpbUlubGluZUVsZW1lbnRzT25MZWZ0U2lkZU9mQmxvY2soYmxvY2spIHtcblx0XHRcdFx0dmFyIG5vZGUgPSBibG9jaywgZmlyc3RDaGlsZHMgPSBbXSwgaTtcblxuXHRcdFx0XHRpZiAoIW5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaW5kIGlubmVyIG1vc3QgZmlyc3QgY2hpbGQgZXg6IDxwPjxpPjxiPio8L2I+PC9pPjwvcD5cblx0XHRcdFx0d2hpbGUgKChub2RlID0gbm9kZS5maXJzdENoaWxkKSkge1xuXHRcdFx0XHRcdGlmIChkb20uaXNCbG9jayhub2RlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgIW5vbkVtcHR5RWxlbWVudHNNYXBbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkge1xuXHRcdFx0XHRcdFx0Zmlyc3RDaGlsZHMucHVzaChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpID0gZmlyc3RDaGlsZHMubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGZpcnN0Q2hpbGRzW2ldO1xuXHRcdFx0XHRcdGlmICghbm9kZS5oYXNDaGlsZE5vZGVzKCkgfHwgKG5vZGUuZmlyc3RDaGlsZCA9PSBub2RlLmxhc3RDaGlsZCAmJiBub2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlID09PSAnJykpIHtcblx0XHRcdFx0XHRcdGRvbS5yZW1vdmUobm9kZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFJlbW92ZSA8YT4gPC9hPiBzZWUgIzUzODFcblx0XHRcdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID09IFwiQVwiICYmIChub2RlLmlubmVyVGV4dCB8fCBub2RlLnRleHRDb250ZW50KSA9PT0gJyAnKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5yZW1vdmUobm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1vdmVzIHRoZSBjYXJldCB0byBhIHN1aXRhYmxlIHBvc2l0aW9uIHdpdGhpbiB0aGUgcm9vdCBmb3IgZXhhbXBsZSBpbiB0aGUgZmlyc3Qgbm9uXG5cdFx0XHQvLyBwdXJlIHdoaXRlc3BhY2UgdGV4dCBub2RlIG9yIGJlZm9yZSBhbiBpbWFnZVxuXHRcdFx0ZnVuY3Rpb24gbW92ZVRvQ2FyZXRQb3NpdGlvbihyb290KSB7XG5cdFx0XHRcdHZhciB3YWxrZXIsIG5vZGUsIHJuZywgbGFzdE5vZGUgPSByb290LCB0ZW1wRWxtO1xuXHRcdFx0XHRmdW5jdGlvbiBmaXJzdE5vbldoaXRlU3BhY2VOb2RlU2libGluZyhub2RlKSB7XG5cdFx0XHRcdFx0d2hpbGUgKG5vZGUpIHtcblx0XHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09IDEgfHwgKG5vZGUubm9kZVR5cGUgPT0gMyAmJiBub2RlLmRhdGEgJiYgL1tcXHJcXG5cXHNdLy50ZXN0KG5vZGUuZGF0YSkpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRub2RlID0gbm9kZS5uZXh0U2libGluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXJvb3QpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPbGQgSUUgdmVyc2lvbnMgZG9lc24ndCBwcm9wZXJseSByZW5kZXIgYmxvY2tzIHdpdGggYnIgZWxlbWVudHMgaW4gdGhlbVxuXHRcdFx0XHQvLyBGb3IgZXhhbXBsZSA8cD48YnI+PC9wPiB3b250IGJlIHJlbmRlcmVkIGNvcnJlY3RseSBpbiBhIGNvbnRlbnRFZGl0YWJsZSBhcmVhXG5cdFx0XHRcdC8vIHVudGlsIHlvdSByZW1vdmUgdGhlIGJyIHByb2R1Y2luZyA8cD48L3A+XG5cdFx0XHRcdGlmIChFbnYuaWUgJiYgRW52LmllIDwgOSAmJiBwYXJlbnRCbG9jayAmJiBwYXJlbnRCbG9jay5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0aWYgKHBhcmVudEJsb2NrLmZpcnN0Q2hpbGQgPT0gcGFyZW50QmxvY2subGFzdENoaWxkICYmIHBhcmVudEJsb2NrLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAnQlInKSB7XG5cdFx0XHRcdFx0XHRkb20ucmVtb3ZlKHBhcmVudEJsb2NrLmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICgvXihMSXxEVHxERCkkLy50ZXN0KHJvb3Qubm9kZU5hbWUpKSB7XG5cdFx0XHRcdFx0dmFyIGZpcnN0Q2hpbGQgPSBmaXJzdE5vbldoaXRlU3BhY2VOb2RlU2libGluZyhyb290LmZpcnN0Q2hpbGQpO1xuXG5cdFx0XHRcdFx0aWYgKGZpcnN0Q2hpbGQgJiYgL14oVUx8T0x8REwpJC8udGVzdChmaXJzdENoaWxkLm5vZGVOYW1lKSkge1xuXHRcdFx0XHRcdFx0cm9vdC5pbnNlcnRCZWZvcmUoZG9tLmRvYy5jcmVhdGVUZXh0Tm9kZSgnXFx1MDBhMCcpLCByb290LmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcblxuXHRcdFx0XHQvLyBOb3JtYWxpemUgd2hpdGVzcGFjZSB0byByZW1vdmUgZW1wdHkgdGV4dCBub2Rlcy4gRml4IGZvcjogIzY5MDRcblx0XHRcdFx0Ly8gR2Vja28gd2lsbCBiZSBhYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbiBlbXB0eSB0ZXh0IG5vZGVzIGJ1dCBpdCB3b24ndCByZW5kZXIgcHJvcGVyeVxuXHRcdFx0XHQvLyBPbGRlciBJRSB2ZXJzaW9ucyB3aWxsIHNvbWV0aW1lcyBjcmFzaCBzbyBmb3Igbm93IGlnbm9yZSBhbGwgSUUgdmVyc2lvbnNcblx0XHRcdFx0aWYgKCFFbnYuaWUpIHtcblx0XHRcdFx0XHRyb290Lm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJvb3QuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0d2Fsa2VyID0gbmV3IFRyZWVXYWxrZXIocm9vdCwgcm9vdCk7XG5cblx0XHRcdFx0XHR3aGlsZSAoKG5vZGUgPSB3YWxrZXIuY3VycmVudCgpKSkge1xuXHRcdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMykge1xuXHRcdFx0XHRcdFx0XHRybmcuc2V0U3RhcnQobm9kZSwgMCk7XG5cdFx0XHRcdFx0XHRcdHJuZy5zZXRFbmQobm9kZSwgMCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAobW92ZUNhcmV0QmVmb3JlT25FbnRlckVsZW1lbnRzTWFwW25vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pIHtcblx0XHRcdFx0XHRcdFx0cm5nLnNldFN0YXJ0QmVmb3JlKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRybmcuc2V0RW5kQmVmb3JlKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bGFzdE5vZGUgPSBub2RlO1xuXHRcdFx0XHRcdFx0bm9kZSA9IHdhbGtlci5uZXh0KCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRcdFx0XHRybmcuc2V0U3RhcnQobGFzdE5vZGUsIDApO1xuXHRcdFx0XHRcdFx0cm5nLnNldEVuZChsYXN0Tm9kZSwgMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChyb290Lm5vZGVOYW1lID09ICdCUicpIHtcblx0XHRcdFx0XHRcdGlmIChyb290Lm5leHRTaWJsaW5nICYmIGRvbS5pc0Jsb2NrKHJvb3QubmV4dFNpYmxpbmcpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFRyaWNrIG9uIG9sZGVyIElFIHZlcnNpb25zIHRvIHJlbmRlciB0aGUgY2FyZXQgYmVmb3JlIHRoZSBCUiBiZXR3ZWVuIHR3byBsaXN0c1xuXHRcdFx0XHRcdFx0XHRpZiAoIWRvY3VtZW50TW9kZSB8fCBkb2N1bWVudE1vZGUgPCA5KSB7XG5cdFx0XHRcdFx0XHRcdFx0dGVtcEVsbSA9IGRvbS5jcmVhdGUoJ2JyJyk7XG5cdFx0XHRcdFx0XHRcdFx0cm9vdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZW1wRWxtLCByb290KTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEJlZm9yZShyb290KTtcblx0XHRcdFx0XHRcdFx0cm5nLnNldEVuZEJlZm9yZShyb290KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEFmdGVyKHJvb3QpO1xuXHRcdFx0XHRcdFx0XHRybmcuc2V0RW5kQWZ0ZXIocm9vdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydChyb290LCAwKTtcblx0XHRcdFx0XHRcdHJuZy5zZXRFbmQocm9vdCwgMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZWN0aW9uLnNldFJuZyhybmcpO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSB0ZW1wRWxtIGNyZWF0ZWQgZm9yIG9sZCBJRTpzXG5cdFx0XHRcdGRvbS5yZW1vdmUodGVtcEVsbSk7XG5cdFx0XHRcdHNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldyhyb290KTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gc2V0Rm9yY2VkQmxvY2tBdHRycyhub2RlKSB7XG5cdFx0XHRcdHZhciBmb3JjZWRSb290QmxvY2tOYW1lID0gc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2s7XG5cblx0XHRcdFx0aWYgKGZvcmNlZFJvb3RCbG9ja05hbWUgJiYgZm9yY2VkUm9vdEJsb2NrTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRcdGRvbS5zZXRBdHRyaWJzKG5vZGUsIHNldHRpbmdzLmZvcmNlZF9yb290X2Jsb2NrX2F0dHJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBlbXB0eUJsb2NrKGVsbSkge1xuXHRcdFx0XHQvLyBCUiBpcyBuZWVkZWQgaW4gZW1wdHkgYmxvY2tzIG9uIG5vbiBJRSBicm93c2Vyc1xuXHRcdFx0XHRlbG0uaW5uZXJIVE1MID0gIWlzSUUgPyAnPGJyIGRhdGEtbWNlLWJvZ3VzPVwiMVwiPicgOiAnJztcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlcyBhIG5ldyBibG9jayBlbGVtZW50IGJ5IGNsb25pbmcgdGhlIGN1cnJlbnQgb25lIG9yIGNyZWF0aW5nIGEgbmV3IG9uZSBpZiB0aGUgbmFtZSBpcyBzcGVjaWZpZWRcblx0XHRcdC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGNvcHkgYW55IHRleHQgZm9ybWF0dGluZyBmcm9tIHRoZSBwYXJlbnQgYmxvY2sgYW5kIGFkZCBpdCB0byB0aGUgbmV3IG9uZVxuXHRcdFx0ZnVuY3Rpb24gY3JlYXRlTmV3QmxvY2sobmFtZSkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IGNvbnRhaW5lciwgYmxvY2ssIGNsb25lZE5vZGUsIGNhcmV0Tm9kZSwgdGV4dElubGluZUVsZW1lbnRzID0gc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpO1xuXG5cdFx0XHRcdGlmIChuYW1lIHx8IHBhcmVudEJsb2NrTmFtZSA9PSBcIlRBQkxFXCIpIHtcblx0XHRcdFx0XHRibG9jayA9IGRvbS5jcmVhdGUobmFtZSB8fCBuZXdCbG9ja05hbWUpO1xuXHRcdFx0XHRcdHNldEZvcmNlZEJsb2NrQXR0cnMoYmxvY2spO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJsb2NrID0gcGFyZW50QmxvY2suY2xvbmVOb2RlKGZhbHNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhcmV0Tm9kZSA9IGJsb2NrO1xuXG5cdFx0XHRcdC8vIENsb25lIGFueSBwYXJlbnQgc3R5bGVzXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5rZWVwX3N0eWxlcyAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRpZiAodGV4dElubGluZUVsZW1lbnRzW25vZGUubm9kZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdC8vIE5ldmVyIGNsb25lIGEgY2FyZXQgY29udGFpbmVyc1xuXHRcdFx0XHRcdFx0XHRpZiAobm9kZS5pZCA9PSAnX21jZV9jYXJldCcpIHtcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNsb25lZE5vZGUgPSBub2RlLmNsb25lTm9kZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdGRvbS5zZXRBdHRyaWIoY2xvbmVkTm9kZSwgJ2lkJywgJycpOyAvLyBSZW1vdmUgSUQgc2luY2UgaXQgbmVlZHMgdG8gYmUgZG9jdW1lbnQgdW5pcXVlXG5cblx0XHRcdFx0XHRcdFx0aWYgKGJsb2NrLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNsb25lZE5vZGUuYXBwZW5kQ2hpbGQoYmxvY2suZmlyc3RDaGlsZCk7XG5cdFx0XHRcdFx0XHRcdFx0YmxvY2suYXBwZW5kQ2hpbGQoY2xvbmVkTm9kZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FyZXROb2RlID0gY2xvbmVkTm9kZTtcblx0XHRcdFx0XHRcdFx0XHRibG9jay5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlKSAmJiBub2RlICE9IGVkaXRhYmxlUm9vdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBCUiBpcyBuZWVkZWQgaW4gZW1wdHkgYmxvY2tzIG9uIG5vbiBJRSBicm93c2Vyc1xuXHRcdFx0XHRpZiAoIWlzSUUpIHtcblx0XHRcdFx0XHRjYXJldE5vZGUuaW5uZXJIVE1MID0gJzxiciBkYXRhLW1jZS1ib2d1cz1cIjFcIj4nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGJsb2NrO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydC9lbmQgb2YgdGhlIHBhcmVudCBibG9jayBlbGVtZW50XG5cdFx0XHRmdW5jdGlvbiBpc0NhcmV0QXRTdGFydE9yRW5kT2ZCbG9jayhzdGFydCkge1xuXHRcdFx0XHR2YXIgd2Fsa2VyLCBub2RlLCBuYW1lO1xuXG5cdFx0XHRcdC8vIENhcmV0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUgbGlrZSBcImF8YlwiXG5cdFx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMyAmJiAoc3RhcnQgPyBvZmZzZXQgPiAwIDogb2Zmc2V0IDwgY29udGFpbmVyLm5vZGVWYWx1ZS5sZW5ndGgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudCBpbiBibG9jayBub2RlIGVkZ2UgY2FzZSBmb3IgIzUwOTFcblx0XHRcdFx0aWYgKGNvbnRhaW5lci5wYXJlbnROb2RlID09IHBhcmVudEJsb2NrICYmIGlzQWZ0ZXJMYXN0Tm9kZUluQ29udGFpbmVyICYmICFzdGFydCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGNhcmV0IGlmIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBpbiBwYXJlbnRCbG9ja1xuXHRcdFx0XHRpZiAoc3RhcnQgJiYgY29udGFpbmVyLm5vZGVUeXBlID09IDEgJiYgY29udGFpbmVyID09IHBhcmVudEJsb2NrLmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhcmV0IGNhbiBiZSBiZWZvcmUvYWZ0ZXIgYSB0YWJsZVxuXHRcdFx0XHRpZiAoY29udGFpbmVyLm5vZGVOYW1lID09PSBcIlRBQkxFXCIgfHwgKGNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcgJiYgY29udGFpbmVyLnByZXZpb3VzU2libGluZy5ub2RlTmFtZSA9PSBcIlRBQkxFXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciAmJiAhc3RhcnQpIHx8ICghaXNBZnRlckxhc3ROb2RlSW5Db250YWluZXIgJiYgc3RhcnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2FsayB0aGUgRE9NIGFuZCBsb29rIGZvciB0ZXh0IG5vZGVzIG9yIG5vbiBlbXB0eSBlbGVtZW50c1xuXHRcdFx0XHR3YWxrZXIgPSBuZXcgVHJlZVdhbGtlcihjb250YWluZXIsIHBhcmVudEJsb2NrKTtcblxuXHRcdFx0XHQvLyBJZiBjYXJldCBpcyBpbiBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgdGV4dCBibG9jayB0aGVuIGp1bXAgdG8gdGhlIG5leHQvcHJldmlvdXMgbm9kZVxuXHRcdFx0XHRpZiAoY29udGFpbmVyLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRpZiAoc3RhcnQgJiYgb2Zmc2V0ID09PSAwKSB7XG5cdFx0XHRcdFx0XHR3YWxrZXIucHJldigpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIXN0YXJ0ICYmIG9mZnNldCA9PSBjb250YWluZXIubm9kZVZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0d2Fsa2VyLm5leHQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aGlsZSAoKG5vZGUgPSB3YWxrZXIuY3VycmVudCgpKSkge1xuXHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG5cdFx0XHRcdFx0XHQvLyBJZ25vcmUgYm9ndXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdGlmICghbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJykpIHtcblx0XHRcdFx0XHRcdFx0Ly8gS2VlcCBlbXB0eSBlbGVtZW50cyBsaWtlIDxpbWcgLz4gPGlucHV0IC8+IGJ1dCBub3QgdHJhaWxpbmcgYnI6cyBsaWtlIDxwPnRleHR8PGJyPjwvcD5cblx0XHRcdFx0XHRcdFx0bmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0aWYgKG5vbkVtcHR5RWxlbWVudHNNYXBbbmFtZV0gJiYgbmFtZSAhPT0gJ2JyJykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMyAmJiAhL15bIFxcdFxcclxcbl0qJC8udGVzdChub2RlLm5vZGVWYWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdHdhbGtlci5wcmV2KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHdhbGtlci5uZXh0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdyYXBzIGFueSB0ZXh0IG5vZGVzIG9yIGlubGluZSBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGZvcmNlZCByb290IGJsb2NrIG5hbWVcblx0XHRcdGZ1bmN0aW9uIHdyYXBTZWxmQW5kU2libGluZ3NJbkRlZmF1bHRCbG9jayhjb250YWluZXIsIG9mZnNldCkge1xuXHRcdFx0XHR2YXIgbmV3QmxvY2ssIHBhcmVudEJsb2NrLCBzdGFydE5vZGUsIG5vZGUsIG5leHQsIHJvb3RCbG9ja05hbWUsIGJsb2NrTmFtZSA9IG5ld0Jsb2NrTmFtZSB8fCAnUCc7XG5cblx0XHRcdFx0Ly8gTm90IGluIGEgYmxvY2sgZWxlbWVudCBvciBpbiBhIHRhYmxlIGNlbGwgb3IgY2FwdGlvblxuXHRcdFx0XHRwYXJlbnRCbG9jayA9IGRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBkb20uaXNCbG9jayk7XG5cdFx0XHRcdGlmICghcGFyZW50QmxvY2sgfHwgIWNhblNwbGl0QmxvY2socGFyZW50QmxvY2spKSB7XG5cdFx0XHRcdFx0cGFyZW50QmxvY2sgPSBwYXJlbnRCbG9jayB8fCBlZGl0YWJsZVJvb3Q7XG5cblx0XHRcdFx0XHRpZiAocGFyZW50QmxvY2sgPT0gZWRpdG9yLmdldEJvZHkoKSB8fCBpc1RhYmxlQ2VsbChwYXJlbnRCbG9jaykpIHtcblx0XHRcdFx0XHRcdHJvb3RCbG9ja05hbWUgPSBwYXJlbnRCbG9jay5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb290QmxvY2tOYW1lID0gcGFyZW50QmxvY2sucGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghcGFyZW50QmxvY2suaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0XHRuZXdCbG9jayA9IGRvbS5jcmVhdGUoYmxvY2tOYW1lKTtcblx0XHRcdFx0XHRcdHNldEZvcmNlZEJsb2NrQXR0cnMobmV3QmxvY2spO1xuXHRcdFx0XHRcdFx0cGFyZW50QmxvY2suYXBwZW5kQ2hpbGQobmV3QmxvY2spO1xuXHRcdFx0XHRcdFx0cm5nLnNldFN0YXJ0KG5ld0Jsb2NrLCAwKTtcblx0XHRcdFx0XHRcdHJuZy5zZXRFbmQobmV3QmxvY2ssIDApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5ld0Jsb2NrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZpbmQgcGFyZW50IHRoYXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIHBhcmVudEJsb2NrXG5cdFx0XHRcdFx0bm9kZSA9IGNvbnRhaW5lcjtcblx0XHRcdFx0XHR3aGlsZSAobm9kZS5wYXJlbnROb2RlICE9IHBhcmVudEJsb2NrKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExvb3AgbGVmdCB0byBmaW5kIHN0YXJ0IG5vZGUgc3RhcnQgd3JhcHBpbmcgYXRcblx0XHRcdFx0XHR3aGlsZSAobm9kZSAmJiAhZG9tLmlzQmxvY2sobm9kZSkpIHtcblx0XHRcdFx0XHRcdHN0YXJ0Tm9kZSA9IG5vZGU7XG5cdFx0XHRcdFx0XHRub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHN0YXJ0Tm9kZSAmJiBzY2hlbWEuaXNWYWxpZENoaWxkKHJvb3RCbG9ja05hbWUsIGJsb2NrTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuXHRcdFx0XHRcdFx0bmV3QmxvY2sgPSBkb20uY3JlYXRlKGJsb2NrTmFtZSk7XG5cdFx0XHRcdFx0XHRzZXRGb3JjZWRCbG9ja0F0dHJzKG5ld0Jsb2NrKTtcblx0XHRcdFx0XHRcdHN0YXJ0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdCbG9jaywgc3RhcnROb2RlKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3RhcnQgd3JhcHBpbmcgdW50aWwgd2UgaGl0IGEgYmxvY2tcblx0XHRcdFx0XHRcdG5vZGUgPSBzdGFydE5vZGU7XG5cdFx0XHRcdFx0XHR3aGlsZSAobm9kZSAmJiAhZG9tLmlzQmxvY2sobm9kZSkpIHtcblx0XHRcdFx0XHRcdFx0bmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XG5cdFx0XHRcdFx0XHRcdG5ld0Jsb2NrLmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbmV4dDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSByYW5nZSB0byBpdCdzIHBhc3QgbG9jYXRpb25cblx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydChjb250YWluZXIsIG9mZnNldCk7XG5cdFx0XHRcdFx0XHRybmcuc2V0RW5kKGNvbnRhaW5lciwgb2Zmc2V0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gY29udGFpbmVyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbnNlcnRzIGEgYmxvY2sgb3IgYnIgYmVmb3JlL2FmdGVyIG9yIGluIHRoZSBtaWRkbGUgb2YgYSBzcGxpdCBsaXN0IG9mIHRoZSBMSSBpcyBlbXB0eVxuXHRcdFx0ZnVuY3Rpb24gaGFuZGxlRW1wdHlMaXN0SXRlbSgpIHtcblx0XHRcdFx0ZnVuY3Rpb24gaXNGaXJzdE9yTGFzdExpKGZpcnN0KSB7XG5cdFx0XHRcdFx0dmFyIG5vZGUgPSBjb250YWluZXJCbG9ja1tmaXJzdCA/ICdmaXJzdENoaWxkJyA6ICdsYXN0Q2hpbGQnXTtcblxuXHRcdFx0XHRcdC8vIEZpbmQgZmlyc3QvbGFzdCBlbGVtZW50IHNpbmNlIHRoZXJlIG1pZ2h0IGJlIHdoaXRlc3BhY2UgdGhlcmVcblx0XHRcdFx0XHR3aGlsZSAobm9kZSkge1xuXHRcdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVbZmlyc3QgPyAnbmV4dFNpYmxpbmcnIDogJ3ByZXZpb3VzU2libGluZyddO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBub2RlID09PSBwYXJlbnRCbG9jaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZ1bmN0aW9uIGdldENvbnRhaW5lckJsb2NrKCkge1xuXHRcdFx0XHRcdHZhciBjb250YWluZXJCbG9ja1BhcmVudCA9IGNvbnRhaW5lckJsb2NrLnBhcmVudE5vZGU7XG5cblx0XHRcdFx0XHRpZiAoL14oTEl8RFR8REQpJC8udGVzdChjb250YWluZXJCbG9ja1BhcmVudC5ub2RlTmFtZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb250YWluZXJCbG9ja1BhcmVudDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gY29udGFpbmVyQmxvY2s7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29udGFpbmVyQmxvY2sgPT0gZWRpdG9yLmdldEJvZHkoKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHdlIGFyZSBpbiBhbiBuZXN0ZWQgbGlzdFxuXHRcdFx0XHR2YXIgY29udGFpbmVyQmxvY2tQYXJlbnROYW1lID0gY29udGFpbmVyQmxvY2sucGFyZW50Tm9kZS5ub2RlTmFtZTtcblx0XHRcdFx0aWYgKC9eKE9MfFVMfExJKSQvLnRlc3QoY29udGFpbmVyQmxvY2tQYXJlbnROYW1lKSkge1xuXHRcdFx0XHRcdG5ld0Jsb2NrTmFtZSA9ICdMSSc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRuZXdCbG9jayA9IG5ld0Jsb2NrTmFtZSA/IGNyZWF0ZU5ld0Jsb2NrKG5ld0Jsb2NrTmFtZSkgOiBkb20uY3JlYXRlKCdCUicpO1xuXG5cdFx0XHRcdGlmIChpc0ZpcnN0T3JMYXN0TGkodHJ1ZSkgJiYgaXNGaXJzdE9yTGFzdExpKCkpIHtcblx0XHRcdFx0XHRpZiAoY29udGFpbmVyQmxvY2tQYXJlbnROYW1lID09ICdMSScpIHtcblx0XHRcdFx0XHRcdC8vIE5lc3RlZCBsaXN0IGlzIGluc2lkZSBhIExJXG5cdFx0XHRcdFx0XHRkb20uaW5zZXJ0QWZ0ZXIobmV3QmxvY2ssIGdldENvbnRhaW5lckJsb2NrKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBJcyBmaXJzdCBhbmQgbGFzdCBsaXN0IGl0ZW0gdGhlbiByZXBsYWNlIHRoZSBPTC9VTCB3aXRoIGEgdGV4dCBibG9ja1xuXHRcdFx0XHRcdFx0ZG9tLnJlcGxhY2UobmV3QmxvY2ssIGNvbnRhaW5lckJsb2NrKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNGaXJzdE9yTGFzdExpKHRydWUpKSB7XG5cdFx0XHRcdFx0aWYgKGNvbnRhaW5lckJsb2NrUGFyZW50TmFtZSA9PSAnTEknKSB7XG5cdFx0XHRcdFx0XHQvLyBMaXN0IG5lc3RlZCBpbiBhbiBMSSB0aGVuIG1vdmUgdGhlIGxpc3QgdG8gYSBuZXcgc2libGluZyBMSVxuXHRcdFx0XHRcdFx0ZG9tLmluc2VydEFmdGVyKG5ld0Jsb2NrLCBnZXRDb250YWluZXJCbG9jaygpKTtcblx0XHRcdFx0XHRcdG5ld0Jsb2NrLmFwcGVuZENoaWxkKGRvbS5kb2MuY3JlYXRlVGV4dE5vZGUoJyAnKSk7IC8vIE5lZWRlZCBmb3IgSUUgc28gdGhlIGNhcmV0IGNhbiBiZSBwbGFjZWRcblx0XHRcdFx0XHRcdG5ld0Jsb2NrLmFwcGVuZENoaWxkKGNvbnRhaW5lckJsb2NrKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gRmlyc3QgTEkgaW4gbGlzdCB0aGVuIHJlbW92ZSBMSSBhbmQgYWRkIHRleHQgYmxvY2sgYmVmb3JlIGxpc3Rcblx0XHRcdFx0XHRcdGNvbnRhaW5lckJsb2NrLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0Jsb2NrLCBjb250YWluZXJCbG9jayk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRmlyc3RPckxhc3RMaSgpKSB7XG5cdFx0XHRcdFx0Ly8gTGFzdCBMSSBpbiBsaXN0IHRoZW4gcmVtb3ZlIExJIGFuZCBhZGQgdGV4dCBibG9jayBhZnRlciBsaXN0XG5cdFx0XHRcdFx0ZG9tLmluc2VydEFmdGVyKG5ld0Jsb2NrLCBnZXRDb250YWluZXJCbG9jaygpKTtcblx0XHRcdFx0XHRyZW5kZXJCbG9ja09uSUUobmV3QmxvY2spO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE1pZGRsZSBMSSBpbiBsaXN0IHRoZSBzcGxpdCB0aGUgbGlzdCBhbmQgaW5zZXJ0IGEgdGV4dCBibG9jayBpbiB0aGUgbWlkZGxlXG5cdFx0XHRcdFx0Ly8gRXh0cmFjdCBhZnRlciBmcmFnbWVudCBhbmQgaW5zZXJ0IGl0IGFmdGVyIHRoZSBjdXJyZW50IGJsb2NrXG5cdFx0XHRcdFx0Y29udGFpbmVyQmxvY2sgPSBnZXRDb250YWluZXJCbG9jaygpO1xuXHRcdFx0XHRcdHRtcFJuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG5cdFx0XHRcdFx0dG1wUm5nLnNldFN0YXJ0QWZ0ZXIocGFyZW50QmxvY2spO1xuXHRcdFx0XHRcdHRtcFJuZy5zZXRFbmRBZnRlcihjb250YWluZXJCbG9jayk7XG5cdFx0XHRcdFx0ZnJhZ21lbnQgPSB0bXBSbmcuZXh0cmFjdENvbnRlbnRzKCk7XG5cblx0XHRcdFx0XHRpZiAobmV3QmxvY2tOYW1lID09ICdMSScgJiYgZnJhZ21lbnQuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PSAnTEknKSB7XG5cdFx0XHRcdFx0XHRuZXdCbG9jayA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdFx0XHRkb20uaW5zZXJ0QWZ0ZXIoZnJhZ21lbnQsIGNvbnRhaW5lckJsb2NrKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZG9tLmluc2VydEFmdGVyKGZyYWdtZW50LCBjb250YWluZXJCbG9jayk7XG5cdFx0XHRcdFx0XHRkb20uaW5zZXJ0QWZ0ZXIobmV3QmxvY2ssIGNvbnRhaW5lckJsb2NrKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkb20ucmVtb3ZlKHBhcmVudEJsb2NrKTtcblx0XHRcdFx0bW92ZVRvQ2FyZXRQb3NpdGlvbihuZXdCbG9jayk7XG5cdFx0XHRcdHVuZG9NYW5hZ2VyLmFkZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbnNlcnRzIGEgQlIgZWxlbWVudCBpZiB0aGUgZm9yY2VkX3Jvb3RfYmxvY2sgb3B0aW9uIGlzIHNldCB0byBmYWxzZSBvciBlbXB0eSBzdHJpbmdcblx0XHRcdGZ1bmN0aW9uIGluc2VydEJyKCkge1xuXHRcdFx0XHRlZGl0b3IuZXhlY0NvbW1hbmQoXCJJbnNlcnRMaW5lQnJlYWtcIiwgZmFsc2UsIGV2dCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyaW1zIGFueSBsaW5lYnJlYWtzIGF0IHRoZSBiZWdpbm5pbmcgb2Ygbm9kZSB1c2VyIGZvciBleGFtcGxlIHdoZW4gcHJlc3NpbmcgZW50ZXIgaW4gYSBQUkUgZWxlbWVudFxuXHRcdFx0ZnVuY3Rpb24gdHJpbUxlYWRpbmdMaW5lQnJlYWtzKG5vZGUpIHtcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XG5cdFx0XHRcdFx0XHRub2RlLm5vZGVWYWx1ZSA9IG5vZGUubm9kZVZhbHVlLnJlcGxhY2UoL15bXFxyXFxuXSsvLCAnJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRcdFx0fSB3aGlsZSAobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGdldEVkaXRhYmxlUm9vdChub2RlKSB7XG5cdFx0XHRcdHZhciByb290ID0gZG9tLmdldFJvb3QoKSwgcGFyZW50LCBlZGl0YWJsZVJvb3Q7XG5cblx0XHRcdFx0Ly8gR2V0IGFsbCBwYXJlbnRzIHVudGlsIHdlIGhpdCBhIG5vbiBlZGl0YWJsZSBwYXJlbnQgb3IgdGhlIHJvb3Rcblx0XHRcdFx0cGFyZW50ID0gbm9kZTtcblx0XHRcdFx0d2hpbGUgKHBhcmVudCAhPT0gcm9vdCAmJiBkb20uZ2V0Q29udGVudEVkaXRhYmxlKHBhcmVudCkgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdGlmIChkb20uZ2V0Q29udGVudEVkaXRhYmxlKHBhcmVudCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRlZGl0YWJsZVJvb3QgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcGFyZW50ICE9PSByb290ID8gZWRpdGFibGVSb290IDogcm9vdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkcyBhIEJSIGF0IHRoZSBlbmQgb2YgYmxvY2tzIHRoYXQgb25seSBjb250YWlucyBhbiBJTUcgb3IgSU5QVVQgc2luY2Vcblx0XHRcdC8vIHRoZXNlIG1pZ2h0IGJlIGZsb2F0ZWQgYW5kIHRoZW4gdGhleSB3b24ndCBleHBhbmQgdGhlIGJsb2NrXG5cdFx0XHRmdW5jdGlvbiBhZGRCclRvQmxvY2tJZk5lZWRlZChibG9jaykge1xuXHRcdFx0XHR2YXIgbGFzdENoaWxkO1xuXG5cdFx0XHRcdC8vIElFIHdpbGwgcmVuZGVyIHRoZSBibG9ja3MgY29ycmVjdGx5IG90aGVyIGJyb3dzZXJzIG5lZWRzIGEgQlJcblx0XHRcdFx0aWYgKCFpc0lFKSB7XG5cdFx0XHRcdFx0YmxvY2subm9ybWFsaXplKCk7IC8vIFJlbW92ZSBlbXB0eSB0ZXh0IG5vZGVzIHRoYXQgZ290IGxlZnQgYmVoaW5kIGJ5IHRoZSBleHRyYWN0XG5cblx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgYmxvY2sgaXMgZW1wdHkgb3IgY29udGFpbnMgYSBmbG9hdGVkIGxhc3QgY2hpbGRcblx0XHRcdFx0XHRsYXN0Q2hpbGQgPSBibG9jay5sYXN0Q2hpbGQ7XG5cdFx0XHRcdFx0aWYgKCFsYXN0Q2hpbGQgfHwgKC9eKGxlZnR8cmlnaHQpJC9naS50ZXN0KGRvbS5nZXRTdHlsZShsYXN0Q2hpbGQsICdmbG9hdCcsIHRydWUpKSkpIHtcblx0XHRcdFx0XHRcdGRvbS5hZGQoYmxvY2ssICdicicpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBpbnNlcnROZXdCbG9ja0FmdGVyKCkge1xuXHRcdFx0XHQvLyBJZiB0aGUgY2FyZXQgaXMgYXQgdGhlIGVuZCBvZiBhIGhlYWRlciB3ZSBwcm9kdWNlIGEgUCB0YWcgYWZ0ZXIgaXQgc2ltaWxhciB0byBXb3JkIHVubGVzcyB3ZSBhcmUgaW4gYSBoZ3JvdXBcblx0XHRcdFx0aWYgKC9eKEhbMS02XXxQUkV8RklHVVJFKSQvLnRlc3QocGFyZW50QmxvY2tOYW1lKSAmJiBjb250YWluZXJCbG9ja05hbWUgIT0gJ0hHUk9VUCcpIHtcblx0XHRcdFx0XHRuZXdCbG9jayA9IGNyZWF0ZU5ld0Jsb2NrKG5ld0Jsb2NrTmFtZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3QmxvY2sgPSBjcmVhdGVOZXdCbG9jaygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3BsaXQgdGhlIGN1cnJlbnQgY29udGFpbmVyIGJsb2NrIGVsZW1lbnQgaWYgZW50ZXIgaXMgcHJlc3NlZCBpbnNpZGUgYW4gZW1wdHkgaW5uZXIgYmxvY2sgZWxlbWVudFxuXHRcdFx0XHRpZiAoc2V0dGluZ3MuZW5kX2NvbnRhaW5lcl9vbl9lbXB0eV9ibG9jayAmJiBjYW5TcGxpdEJsb2NrKGNvbnRhaW5lckJsb2NrKSAmJiBkb20uaXNFbXB0eShwYXJlbnRCbG9jaykpIHtcblx0XHRcdFx0XHQvLyBTcGxpdCBjb250YWluZXIgYmxvY2sgZm9yIGV4YW1wbGUgYSBCTE9DS1FVT1RFIGF0IHRoZSBjdXJyZW50IGJsb2NrUGFyZW50IGxvY2F0aW9uIGZvciBleGFtcGxlIGEgUFxuXHRcdFx0XHRcdG5ld0Jsb2NrID0gZG9tLnNwbGl0KGNvbnRhaW5lckJsb2NrLCBwYXJlbnRCbG9jayk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9tLmluc2VydEFmdGVyKG5ld0Jsb2NrLCBwYXJlbnRCbG9jayk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtb3ZlVG9DYXJldFBvc2l0aW9uKG5ld0Jsb2NrKTtcblx0XHRcdH1cblxuXHRcdFx0cm5nID0gc2VsZWN0aW9uLmdldFJuZyh0cnVlKTtcblxuXHRcdFx0Ly8gRXZlbnQgaXMgYmxvY2tlZCBieSBzb21lIG90aGVyIGhhbmRsZXIgZm9yIGV4YW1wbGUgdGhlIGxpc3RzIHBsdWdpblxuXHRcdFx0aWYgKGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlbGV0ZSBhbnkgc2VsZWN0ZWQgY29udGVudHNcblx0XHRcdGlmICghcm5nLmNvbGxhcHNlZCkge1xuXHRcdFx0XHRlZGl0b3IuZXhlY0NvbW1hbmQoJ0RlbGV0ZScpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldHVwIHJhbmdlIGl0ZW1zIGFuZCBuZXdCbG9ja05hbWVcblx0XHRcdG5ldyBSYW5nZVV0aWxzKGRvbSkubm9ybWFsaXplKHJuZyk7XG5cdFx0XHRjb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG5cdFx0XHRvZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG5cdFx0XHRuZXdCbG9ja05hbWUgPSAoc2V0dGluZ3MuZm9yY2VfcF9uZXdsaW5lcyA/ICdwJyA6ICcnKSB8fCBzZXR0aW5ncy5mb3JjZWRfcm9vdF9ibG9jaztcblx0XHRcdG5ld0Jsb2NrTmFtZSA9IG5ld0Jsb2NrTmFtZSA/IG5ld0Jsb2NrTmFtZS50b1VwcGVyQ2FzZSgpIDogJyc7XG5cdFx0XHRkb2N1bWVudE1vZGUgPSBkb20uZG9jLmRvY3VtZW50TW9kZTtcblx0XHRcdHNoaWZ0S2V5ID0gZXZ0LnNoaWZ0S2V5O1xuXG5cdFx0XHQvLyBSZXNvbHZlIG5vZGUgaW5kZXhcblx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMSAmJiBjb250YWluZXIuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdGlzQWZ0ZXJMYXN0Tm9kZUluQ29udGFpbmVyID0gb2Zmc2V0ID4gY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTtcblxuXHRcdFx0XHRjb250YWluZXIgPSBjb250YWluZXIuY2hpbGROb2Rlc1tNYXRoLm1pbihvZmZzZXQsIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpXSB8fCBjb250YWluZXI7XG5cdFx0XHRcdGlmIChpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciAmJiBjb250YWluZXIubm9kZVR5cGUgPT0gMykge1xuXHRcdFx0XHRcdG9mZnNldCA9IGNvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9mZnNldCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gR2V0IGVkaXRhYmxlIHJvb3Qgbm9kZSwgbm9ybWFsbHkgdGhlIGJvZHkgZWxlbWVudCBidXQgc29tZXRpbWVzIGEgZGl2IG9yIHNwYW5cblx0XHRcdGVkaXRhYmxlUm9vdCA9IGdldEVkaXRhYmxlUm9vdChjb250YWluZXIpO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBubyBlZGl0YWJsZSByb290IHRoZW4gZW50ZXIgaXMgZG9uZSBpbnNpZGUgYSBjb250ZW50RWRpdGFibGUgZmFsc2UgZWxlbWVudFxuXHRcdFx0aWYgKCFlZGl0YWJsZVJvb3QpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1bmRvTWFuYWdlci5iZWZvcmVDaGFuZ2UoKTtcblxuXHRcdFx0Ly8gSWYgZWRpdGFibGUgcm9vdCBpc24ndCBibG9jayBub3IgdGhlIHJvb3Qgb2YgdGhlIGVkaXRvclxuXHRcdFx0aWYgKCFkb20uaXNCbG9jayhlZGl0YWJsZVJvb3QpICYmIGVkaXRhYmxlUm9vdCAhPSBkb20uZ2V0Um9vdCgpKSB7XG5cdFx0XHRcdGlmICghbmV3QmxvY2tOYW1lIHx8IHNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0aW5zZXJ0QnIoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV3JhcCB0aGUgY3VycmVudCBub2RlIGFuZCBpdCdzIHNpYmxpbmcgaW4gYSBkZWZhdWx0IGJsb2NrIGlmIGl0J3MgbmVlZGVkLlxuXHRcdFx0Ly8gZm9yIGV4YW1wbGUgdGhpcyA8dGQ+dGV4dHw8Yj50ZXh0MjwvYj48L3RkPiB3aWxsIGJlY29tZSB0aGlzIDx0ZD48cD50ZXh0fDxiPnRleHQyPC9wPjwvYj48L3RkPlxuXHRcdFx0Ly8gVGhpcyB3b24ndCBoYXBwZW4gaWYgcm9vdCBibG9ja3MgYXJlIGRpc2FibGVkIG9yIHRoZSBzaGlmdEtleSBpcyBwcmVzc2VkXG5cdFx0XHRpZiAoKG5ld0Jsb2NrTmFtZSAmJiAhc2hpZnRLZXkpIHx8ICghbmV3QmxvY2tOYW1lICYmIHNoaWZ0S2V5KSkge1xuXHRcdFx0XHRjb250YWluZXIgPSB3cmFwU2VsZkFuZFNpYmxpbmdzSW5EZWZhdWx0QmxvY2soY29udGFpbmVyLCBvZmZzZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGaW5kIHBhcmVudCBibG9jayBhbmQgc2V0dXAgZW1wdHkgYmxvY2sgcGFkZGluZ3Ncblx0XHRcdHBhcmVudEJsb2NrID0gZG9tLmdldFBhcmVudChjb250YWluZXIsIGRvbS5pc0Jsb2NrKTtcblx0XHRcdGNvbnRhaW5lckJsb2NrID0gcGFyZW50QmxvY2sgPyBkb20uZ2V0UGFyZW50KHBhcmVudEJsb2NrLnBhcmVudE5vZGUsIGRvbS5pc0Jsb2NrKSA6IG51bGw7XG5cblx0XHRcdC8vIFNldHVwIGJsb2NrIG5hbWVzXG5cdFx0XHRwYXJlbnRCbG9ja05hbWUgPSBwYXJlbnRCbG9jayA/IHBhcmVudEJsb2NrLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgOiAnJzsgLy8gSUUgPCA5ICYgSFRNTDVcblx0XHRcdGNvbnRhaW5lckJsb2NrTmFtZSA9IGNvbnRhaW5lckJsb2NrID8gY29udGFpbmVyQmxvY2subm9kZU5hbWUudG9VcHBlckNhc2UoKSA6ICcnOyAvLyBJRSA8IDkgJiBIVE1MNVxuXG5cdFx0XHQvLyBFbnRlciBpbnNpZGUgYmxvY2sgY29udGFpbmVkIHdpdGhpbiBhIExJIHRoZW4gc3BsaXQgb3IgaW5zZXJ0IGJlZm9yZS9hZnRlciBMSVxuXHRcdFx0aWYgKGNvbnRhaW5lckJsb2NrTmFtZSA9PSAnTEknICYmICFldnQuY3RybEtleSkge1xuXHRcdFx0XHRwYXJlbnRCbG9jayA9IGNvbnRhaW5lckJsb2NrO1xuXHRcdFx0XHRwYXJlbnRCbG9ja05hbWUgPSBjb250YWluZXJCbG9ja05hbWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlZGl0b3IudW5kb01hbmFnZXIudHlwaW5nKSB7XG5cdFx0XHRcdGVkaXRvci51bmRvTWFuYWdlci50eXBpbmcgPSBmYWxzZTtcblx0XHRcdFx0ZWRpdG9yLnVuZG9NYW5hZ2VyLmFkZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIYW5kbGUgZW50ZXIgaW4gbGlzdCBpdGVtXG5cdFx0XHRpZiAoL14oTEl8RFR8REQpJC8udGVzdChwYXJlbnRCbG9ja05hbWUpKSB7XG5cdFx0XHRcdGlmICghbmV3QmxvY2tOYW1lICYmIHNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0aW5zZXJ0QnIoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgZW50ZXIgaW5zaWRlIGFuIGVtcHR5IGxpc3QgaXRlbVxuXHRcdFx0XHRpZiAoZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG5cdFx0XHRcdFx0aGFuZGxlRW1wdHlMaXN0SXRlbSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBEb24ndCBzcGxpdCBQUkUgdGFncyBidXQgaW5zZXJ0IGEgQlIgaW5zdGVhZCBlYXNpZXIgd2hlbiB3cml0aW5nIGNvZGUgc2FtcGxlcyBldGNcblx0XHRcdGlmIChwYXJlbnRCbG9ja05hbWUgPT0gJ1BSRScgJiYgc2V0dGluZ3MuYnJfaW5fcHJlICE9PSBmYWxzZSkge1xuXHRcdFx0XHRpZiAoIXNoaWZ0S2V5KSB7XG5cdFx0XHRcdFx0aW5zZXJ0QnIoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIElmIG5vIHJvb3QgYmxvY2sgaXMgY29uZmlndXJlZCB0aGVuIGluc2VydCBhIEJSIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHNoaWZ0S2V5IGlzIHByZXNzZWRcblx0XHRcdFx0aWYgKCghbmV3QmxvY2tOYW1lICYmICFzaGlmdEtleSAmJiBwYXJlbnRCbG9ja05hbWUgIT0gJ0xJJykgfHwgKG5ld0Jsb2NrTmFtZSAmJiBzaGlmdEtleSkpIHtcblx0XHRcdFx0XHRpbnNlcnRCcigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBwYXJlbnQgYmxvY2sgaXMgcm9vdCB0aGVuIG5ldmVyIGluc2VydCBuZXcgYmxvY2tzXG5cdFx0XHRpZiAobmV3QmxvY2tOYW1lICYmIHBhcmVudEJsb2NrID09PSBlZGl0b3IuZ2V0Qm9keSgpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVmYXVsdCBibG9jayBuYW1lIGlmIGl0J3Mgbm90IGNvbmZpZ3VyZWRcblx0XHRcdG5ld0Jsb2NrTmFtZSA9IG5ld0Jsb2NrTmFtZSB8fCAnUCc7XG5cblx0XHRcdC8vIEluc2VydCBuZXcgYmxvY2sgYmVmb3JlL2FmdGVyIHRoZSBwYXJlbnQgYmxvY2sgZGVwZW5kaW5nIG9uIGNhcmV0IGxvY2F0aW9uXG5cdFx0XHRpZiAoQ2FyZXRDb250YWluZXIuaXNDYXJldENvbnRhaW5lckJsb2NrKHBhcmVudEJsb2NrKSkge1xuXHRcdFx0XHRuZXdCbG9jayA9IENhcmV0Q29udGFpbmVyLnNob3dDYXJldENvbnRhaW5lckJsb2NrKHBhcmVudEJsb2NrKTtcblx0XHRcdFx0aWYgKGRvbS5pc0VtcHR5KHBhcmVudEJsb2NrKSkge1xuXHRcdFx0XHRcdGVtcHR5QmxvY2socGFyZW50QmxvY2spO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1vdmVUb0NhcmV0UG9zaXRpb24obmV3QmxvY2spO1xuXHRcdFx0fSBlbHNlIGlmIChpc0NhcmV0QXRTdGFydE9yRW5kT2ZCbG9jaygpKSB7XG5cdFx0XHRcdGluc2VydE5ld0Jsb2NrQWZ0ZXIoKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNDYXJldEF0U3RhcnRPckVuZE9mQmxvY2sodHJ1ZSkpIHtcblx0XHRcdFx0Ly8gSW5zZXJ0IG5ldyBibG9jayBiZWZvcmVcblx0XHRcdFx0bmV3QmxvY2sgPSBwYXJlbnRCbG9jay5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjcmVhdGVOZXdCbG9jaygpLCBwYXJlbnRCbG9jayk7XG5cdFx0XHRcdHJlbmRlckJsb2NrT25JRShuZXdCbG9jayk7XG5cdFx0XHRcdG1vdmVUb0NhcmV0UG9zaXRpb24ocGFyZW50QmxvY2spO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRXh0cmFjdCBhZnRlciBmcmFnbWVudCBhbmQgaW5zZXJ0IGl0IGFmdGVyIHRoZSBjdXJyZW50IGJsb2NrXG5cdFx0XHRcdHRtcFJuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG5cdFx0XHRcdHRtcFJuZy5zZXRFbmRBZnRlcihwYXJlbnRCbG9jayk7XG5cdFx0XHRcdGZyYWdtZW50ID0gdG1wUm5nLmV4dHJhY3RDb250ZW50cygpO1xuXHRcdFx0XHR0cmltTGVhZGluZ0xpbmVCcmVha3MoZnJhZ21lbnQpO1xuXHRcdFx0XHRuZXdCbG9jayA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdGRvbS5pbnNlcnRBZnRlcihmcmFnbWVudCwgcGFyZW50QmxvY2spO1xuXHRcdFx0XHR0cmltSW5saW5lRWxlbWVudHNPbkxlZnRTaWRlT2ZCbG9jayhuZXdCbG9jayk7XG5cdFx0XHRcdGFkZEJyVG9CbG9ja0lmTmVlZGVkKHBhcmVudEJsb2NrKTtcblxuXHRcdFx0XHRpZiAoZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG5cdFx0XHRcdFx0ZW1wdHlCbG9jayhwYXJlbnRCbG9jayk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRuZXdCbG9jay5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHQvLyBOZXcgYmxvY2sgbWlnaHQgYmVjb21lIGVtcHR5IGlmIGl0J3MgPHA+PGI+YSB8PC9iPjwvcD5cblx0XHRcdFx0aWYgKGRvbS5pc0VtcHR5KG5ld0Jsb2NrKSkge1xuXHRcdFx0XHRcdGRvbS5yZW1vdmUobmV3QmxvY2spO1xuXHRcdFx0XHRcdGluc2VydE5ld0Jsb2NrQWZ0ZXIoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtb3ZlVG9DYXJldFBvc2l0aW9uKG5ld0Jsb2NrKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRkb20uc2V0QXR0cmliKG5ld0Jsb2NrLCAnaWQnLCAnJyk7IC8vIFJlbW92ZSBJRCBzaW5jZSBpdCBuZWVkcyB0byBiZSBkb2N1bWVudCB1bmlxdWVcblxuXHRcdFx0Ly8gQWxsb3cgY3VzdG9tIGhhbmRsaW5nIG9mIG5ldyBibG9ja3Ncblx0XHRcdGVkaXRvci5maXJlKCdOZXdCbG9jaycsIHtuZXdCbG9jazogbmV3QmxvY2t9KTtcblxuXHRcdFx0dW5kb01hbmFnZXIudHlwaW5nID0gZmFsc2U7XG5cdFx0XHR1bmRvTWFuYWdlci5hZGQoKTtcblx0XHR9XG5cblx0XHRlZGl0b3Iub24oJ2tleWRvd24nLCBmdW5jdGlvbihldnQpIHtcblx0XHRcdGlmIChldnQua2V5Q29kZSA9PSAxMykge1xuXHRcdFx0XHRpZiAoaGFuZGxlRW50ZXJLZXkoZXZ0KSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9Gb3JjZUJsb2Nrcy5qc1xuXG4vKipcbiAqIEZvcmNlQmxvY2tzLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogTWFrZXMgc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgZ2V0cyB3cmFwcGVkIGluIHBhcmFncmFwaHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLkZvcmNlQmxvY2tzXG4gKi9cbmRlZmluZShcInRpbnltY2UvRm9yY2VCbG9ja3NcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gZnVuY3Rpb24oZWRpdG9yKSB7XG5cdFx0dmFyIHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzLCBkb20gPSBlZGl0b3IuZG9tLCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uO1xuXHRcdHZhciBzY2hlbWEgPSBlZGl0b3Iuc2NoZW1hLCBibG9ja0VsZW1lbnRzID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcblxuXHRcdGZ1bmN0aW9uIGFkZFJvb3RCbG9ja3MoKSB7XG5cdFx0XHR2YXIgbm9kZSA9IHNlbGVjdGlvbi5nZXRTdGFydCgpLCByb290Tm9kZSA9IGVkaXRvci5nZXRCb2R5KCksIHJuZztcblx0XHRcdHZhciBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0LCByb290QmxvY2tOb2RlO1xuXHRcdFx0dmFyIHRlbXBOb2RlLCBvZmZzZXQgPSAtMHhGRkZGRkYsIHdyYXBwZWQsIHJlc3RvcmVTZWxlY3Rpb247XG5cdFx0XHR2YXIgdG1wUm5nLCByb290Tm9kZU5hbWUsIGZvcmNlZFJvb3RCbG9jaztcblxuXHRcdFx0Zm9yY2VkUm9vdEJsb2NrID0gc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2s7XG5cblx0XHRcdGlmICghbm9kZSB8fCBub2RlLm5vZGVUeXBlICE9PSAxIHx8ICFmb3JjZWRSb290QmxvY2spIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBub2RlIGlzIHdyYXBwZWQgaW4gYmxvY2tcblx0XHRcdHdoaWxlIChub2RlICYmIG5vZGUgIT0gcm9vdE5vZGUpIHtcblx0XHRcdFx0aWYgKGJsb2NrRWxlbWVudHNbbm9kZS5ub2RlTmFtZV0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBHZXQgY3VycmVudCBzZWxlY3Rpb25cblx0XHRcdHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcblx0XHRcdGlmIChybmcuc2V0U3RhcnQpIHtcblx0XHRcdFx0c3RhcnRDb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG5cdFx0XHRcdHN0YXJ0T2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuXHRcdFx0XHRlbmRDb250YWluZXIgPSBybmcuZW5kQ29udGFpbmVyO1xuXHRcdFx0XHRlbmRPZmZzZXQgPSBybmcuZW5kT2Zmc2V0O1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzdG9yZVNlbGVjdGlvbiA9IGVkaXRvci5nZXREb2MoKS5hY3RpdmVFbGVtZW50ID09PSByb290Tm9kZTtcblx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0XHQvLyBJRSB0aHJvd3MgdW5zcGVjaWZpZWQgZXJyb3IgaGVyZSBzb21ldGltZXNcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRm9yY2UgY29udHJvbCByYW5nZSBpbnRvIHRleHQgcmFuZ2Vcblx0XHRcdFx0aWYgKHJuZy5pdGVtKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHJuZy5pdGVtKDApO1xuXHRcdFx0XHRcdHJuZyA9IGVkaXRvci5nZXREb2MoKS5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO1xuXHRcdFx0XHRcdHJuZy5tb3ZlVG9FbGVtZW50VGV4dChub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3RvcmVTZWxlY3Rpb24gPSBybmcucGFyZW50RWxlbWVudCgpLm93bmVyRG9jdW1lbnQgPT09IGVkaXRvci5nZXREb2MoKTtcblx0XHRcdFx0dG1wUm5nID0gcm5nLmR1cGxpY2F0ZSgpO1xuXHRcdFx0XHR0bXBSbmcuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdHN0YXJ0T2Zmc2V0ID0gdG1wUm5nLm1vdmUoJ2NoYXJhY3RlcicsIG9mZnNldCkgKiAtMTtcblxuXHRcdFx0XHRpZiAoIXRtcFJuZy5jb2xsYXBzZWQpIHtcblx0XHRcdFx0XHR0bXBSbmcgPSBybmcuZHVwbGljYXRlKCk7XG5cdFx0XHRcdFx0dG1wUm5nLmNvbGxhcHNlKGZhbHNlKTtcblx0XHRcdFx0XHRlbmRPZmZzZXQgPSAodG1wUm5nLm1vdmUoJ2NoYXJhY3RlcicsIG9mZnNldCkgKiAtMSkgLSBzdGFydE9mZnNldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBXcmFwIG5vbiBibG9jayBlbGVtZW50cyBhbmQgdGV4dCBub2Rlc1xuXHRcdFx0bm9kZSA9IHJvb3ROb2RlLmZpcnN0Q2hpbGQ7XG5cdFx0XHRyb290Tm9kZU5hbWUgPSByb290Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0d2hpbGUgKG5vZGUpIHtcblx0XHRcdFx0Ly8gVE9ETzogQnJlYWsgdGhpcyB1cCwgdG9vIGNvbXBsZXhcblx0XHRcdFx0aWYgKCgobm9kZS5ub2RlVHlwZSA9PT0gMyB8fCAobm9kZS5ub2RlVHlwZSA9PSAxICYmICFibG9ja0VsZW1lbnRzW25vZGUubm9kZU5hbWVdKSkpICYmXG5cdFx0XHRcdFx0c2NoZW1hLmlzVmFsaWRDaGlsZChyb290Tm9kZU5hbWUsIGZvcmNlZFJvb3RCbG9jay50b0xvd2VyQ2FzZSgpKSkge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBlbXB0eSB0ZXh0IG5vZGVzXG5cdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDMgJiYgbm9kZS5ub2RlVmFsdWUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHR0ZW1wTm9kZSA9IG5vZGU7XG5cdFx0XHRcdFx0XHRub2RlID0gbm9kZS5uZXh0U2libGluZztcblx0XHRcdFx0XHRcdGRvbS5yZW1vdmUodGVtcE5vZGUpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFyb290QmxvY2tOb2RlKSB7XG5cdFx0XHRcdFx0XHRyb290QmxvY2tOb2RlID0gZG9tLmNyZWF0ZShmb3JjZWRSb290QmxvY2ssIGVkaXRvci5zZXR0aW5ncy5mb3JjZWRfcm9vdF9ibG9ja19hdHRycyk7XG5cdFx0XHRcdFx0XHRub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJvb3RCbG9ja05vZGUsIG5vZGUpO1xuXHRcdFx0XHRcdFx0d3JhcHBlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGVtcE5vZGUgPSBub2RlO1xuXHRcdFx0XHRcdG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuXHRcdFx0XHRcdHJvb3RCbG9ja05vZGUuYXBwZW5kQ2hpbGQodGVtcE5vZGUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJvb3RCbG9ja05vZGUgPSBudWxsO1xuXHRcdFx0XHRcdG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh3cmFwcGVkICYmIHJlc3RvcmVTZWxlY3Rpb24pIHtcblx0XHRcdFx0aWYgKHJuZy5zZXRTdGFydCkge1xuXHRcdFx0XHRcdHJuZy5zZXRTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpO1xuXHRcdFx0XHRcdHJuZy5zZXRFbmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpO1xuXHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcocm5nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPbmx5IHNlbGVjdCBpZiB0aGUgcHJldmlvdXMgc2VsZWN0aW9uIHdhcyBpbnNpZGUgdGhlIGRvY3VtZW50IHRvIHByZXZlbnQgYXV0byBmb2N1cyBpbiBxdWlya3MgbW9kZVxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRybmcgPSBlZGl0b3IuZ2V0RG9jKCkuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcblx0XHRcdFx0XHRcdHJuZy5tb3ZlVG9FbGVtZW50VGV4dChyb290Tm9kZSk7XG5cdFx0XHRcdFx0XHRybmcuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0XHRybmcubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydE9mZnNldCk7XG5cblx0XHRcdFx0XHRcdGlmIChlbmRPZmZzZXQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHJuZy5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmRPZmZzZXQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRybmcuc2VsZWN0KCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0XHRcdC8vIElnbm9yZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZvcmNlIHJvb3QgYmxvY2tzXG5cdFx0aWYgKHNldHRpbmdzLmZvcmNlZF9yb290X2Jsb2NrKSB7XG5cdFx0XHRlZGl0b3Iub24oJ05vZGVDaGFuZ2UnLCBhZGRSb290QmxvY2tzKTtcblx0XHR9XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2NhcmV0L0NhcmV0VXRpbHMuanNcblxuLyoqXG4gKiBDYXJldFV0aWxzLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgc2hhcmVkIGJ5IHRoZSBjYXJldCBsb2dpYy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuY2FyZXQuQ2FyZXRVdGlsc1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL2NhcmV0L0NhcmV0VXRpbHNcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9GdW5cIixcblx0XCJ0aW55bWNlL2RvbS9UcmVlV2Fsa2VyXCIsXG5cdFwidGlueW1jZS9kb20vTm9kZVR5cGVcIixcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0UG9zaXRpb25cIixcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0Q29udGFpbmVyXCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldENhbmRpZGF0ZVwiXG5dLCBmdW5jdGlvbihGdW4sIFRyZWVXYWxrZXIsIE5vZGVUeXBlLCBDYXJldFBvc2l0aW9uLCBDYXJldENvbnRhaW5lciwgQ2FyZXRDYW5kaWRhdGUpIHtcblx0dmFyIGlzQ29udGVudEVkaXRhYmxlVHJ1ZSA9IE5vZGVUeXBlLmlzQ29udGVudEVkaXRhYmxlVHJ1ZSxcblx0XHRpc0NvbnRlbnRFZGl0YWJsZUZhbHNlID0gTm9kZVR5cGUuaXNDb250ZW50RWRpdGFibGVGYWxzZSxcblx0XHRpc0Jsb2NrTGlrZSA9IE5vZGVUeXBlLm1hdGNoU3R5bGVWYWx1ZXMoJ2Rpc3BsYXknLCAnYmxvY2sgdGFibGUgdGFibGUtY2VsbCB0YWJsZS1jYXB0aW9uJyksXG5cdFx0aXNDYXJldENvbnRhaW5lciA9IENhcmV0Q29udGFpbmVyLmlzQ2FyZXRDb250YWluZXIsXG5cdFx0aXNDYXJldENvbnRhaW5lckJsb2NrID0gQ2FyZXRDb250YWluZXIuaXNDYXJldENvbnRhaW5lckJsb2NrLFxuXHRcdGN1cnJ5ID0gRnVuLmN1cnJ5LFxuXHRcdGlzRWxlbWVudCA9IE5vZGVUeXBlLmlzRWxlbWVudCxcblx0XHRpc0NhcmV0Q2FuZGlkYXRlID0gQ2FyZXRDYW5kaWRhdGUuaXNDYXJldENhbmRpZGF0ZTtcblxuXHRmdW5jdGlvbiBpc0ZvcndhcmRzKGRpcmVjdGlvbikge1xuXHRcdHJldHVybiBkaXJlY3Rpb24gPiAwO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNCYWNrd2FyZHMoZGlyZWN0aW9uKSB7XG5cdFx0cmV0dXJuIGRpcmVjdGlvbiA8IDA7XG5cdH1cblxuXHRmdW5jdGlvbiBza2lwQ2FyZXRDb250YWluZXJzKHdhbGssIHNoYWxsb3cpIHtcblx0XHR2YXIgbm9kZTtcblxuXHRcdHdoaWxlICgobm9kZSA9IHdhbGsoc2hhbGxvdykpKSB7XG5cdFx0XHRpZiAoIWlzQ2FyZXRDb250YWluZXJCbG9jayhub2RlKSkge1xuXHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmROb2RlKG5vZGUsIGRpcmVjdGlvbiwgcHJlZGljYXRlRm4sIHJvb3ROb2RlLCBzaGFsbG93KSB7XG5cdFx0dmFyIHdhbGtlciA9IG5ldyBUcmVlV2Fsa2VyKG5vZGUsIHJvb3ROb2RlKTtcblxuXHRcdGlmIChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pKSB7XG5cdFx0XHRpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZShub2RlKSB8fCBpc0NhcmV0Q29udGFpbmVyQmxvY2sobm9kZSkpIHtcblx0XHRcdFx0bm9kZSA9IHNraXBDYXJldENvbnRhaW5lcnMod2Fsa2VyLnByZXYsIHRydWUpO1xuXHRcdFx0XHRpZiAocHJlZGljYXRlRm4obm9kZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoKG5vZGUgPSBza2lwQ2FyZXRDb250YWluZXJzKHdhbGtlci5wcmV2LCBzaGFsbG93KSkpIHtcblx0XHRcdFx0aWYgKHByZWRpY2F0ZUZuKG5vZGUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNGb3J3YXJkcyhkaXJlY3Rpb24pKSB7XG5cdFx0XHRpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZShub2RlKSB8fCBpc0NhcmV0Q29udGFpbmVyQmxvY2sobm9kZSkpIHtcblx0XHRcdFx0bm9kZSA9IHNraXBDYXJldENvbnRhaW5lcnMod2Fsa2VyLm5leHQsIHRydWUpO1xuXHRcdFx0XHRpZiAocHJlZGljYXRlRm4obm9kZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoKG5vZGUgPSBza2lwQ2FyZXRDb250YWluZXJzKHdhbGtlci5uZXh0LCBzaGFsbG93KSkpIHtcblx0XHRcdFx0aWYgKHByZWRpY2F0ZUZuKG5vZGUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEVkaXRpbmdIb3N0KG5vZGUsIHJvb3ROb2RlKSB7XG5cdFx0Zm9yIChub2RlID0gbm9kZS5wYXJlbnROb2RlOyBub2RlICYmIG5vZGUgIT0gcm9vdE5vZGU7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUpIHtcblx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZVRydWUobm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJvb3ROb2RlO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UGFyZW50QmxvY2sobm9kZSwgcm9vdE5vZGUpIHtcblx0XHR3aGlsZSAobm9kZSAmJiBub2RlICE9IHJvb3ROb2RlKSB7XG5cdFx0XHRpZiAoaXNCbG9ja0xpa2Uobm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0luU2FtZUJsb2NrKGNhcmV0UG9zaXRpb24xLCBjYXJldFBvc2l0aW9uMiwgcm9vdE5vZGUpIHtcblx0XHRyZXR1cm4gZ2V0UGFyZW50QmxvY2soY2FyZXRQb3NpdGlvbjEuY29udGFpbmVyKCksIHJvb3ROb2RlKSA9PSBnZXRQYXJlbnRCbG9jayhjYXJldFBvc2l0aW9uMi5jb250YWluZXIoKSwgcm9vdE5vZGUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNJblNhbWVFZGl0aW5nSG9zdChjYXJldFBvc2l0aW9uMSwgY2FyZXRQb3NpdGlvbjIsIHJvb3ROb2RlKSB7XG5cdFx0cmV0dXJuIGdldEVkaXRpbmdIb3N0KGNhcmV0UG9zaXRpb24xLmNvbnRhaW5lcigpLCByb290Tm9kZSkgPT0gZ2V0RWRpdGluZ0hvc3QoY2FyZXRQb3NpdGlvbjIuY29udGFpbmVyKCksIHJvb3ROb2RlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldENoaWxkTm9kZUF0UmVsYXRpdmVPZmZzZXQocmVsYXRpdmVPZmZzZXQsIGNhcmV0UG9zaXRpb24pIHtcblx0XHR2YXIgY29udGFpbmVyLCBvZmZzZXQ7XG5cblx0XHRpZiAoIWNhcmV0UG9zaXRpb24pIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lciA9IGNhcmV0UG9zaXRpb24uY29udGFpbmVyKCk7XG5cdFx0b2Zmc2V0ID0gY2FyZXRQb3NpdGlvbi5vZmZzZXQoKTtcblxuXHRcdGlmICghaXNFbGVtZW50KGNvbnRhaW5lcikpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXQgKyByZWxhdGl2ZU9mZnNldF07XG5cdH1cblxuXHRmdW5jdGlvbiBiZWZvcmVBZnRlcihiZWZvcmUsIG5vZGUpIHtcblx0XHR2YXIgcmFuZ2UgPSBub2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuXHRcdGlmIChiZWZvcmUpIHtcblx0XHRcdHJhbmdlLnNldFN0YXJ0QmVmb3JlKG5vZGUpO1xuXHRcdFx0cmFuZ2Uuc2V0RW5kQmVmb3JlKG5vZGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpO1xuXHRcdFx0cmFuZ2Uuc2V0RW5kQWZ0ZXIobm9kZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJhbmdlO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNOb2Rlc0luU2FtZUJsb2NrKHJvb3ROb2RlLCBub2RlMSwgbm9kZTIpIHtcblx0XHRyZXR1cm4gZ2V0UGFyZW50QmxvY2sobm9kZTEsIHJvb3ROb2RlKSA9PSBnZXRQYXJlbnRCbG9jayhub2RlMiwgcm9vdE5vZGUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gbGVhbihsZWZ0LCByb290Tm9kZSwgbm9kZSkge1xuXHRcdHZhciBzaWJsaW5nLCBzaWJsaW5nTmFtZTtcblxuXHRcdGlmIChsZWZ0KSB7XG5cdFx0XHRzaWJsaW5nTmFtZSA9ICdwcmV2aW91c1NpYmxpbmcnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaWJsaW5nTmFtZSA9ICduZXh0U2libGluZyc7XG5cdFx0fVxuXG5cdFx0d2hpbGUgKG5vZGUgJiYgbm9kZSAhPSByb290Tm9kZSkge1xuXHRcdFx0c2libGluZyA9IG5vZGVbc2libGluZ05hbWVdO1xuXG5cdFx0XHRpZiAoaXNDYXJldENvbnRhaW5lcihzaWJsaW5nKSkge1xuXHRcdFx0XHRzaWJsaW5nID0gc2libGluZ1tzaWJsaW5nTmFtZV07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKHNpYmxpbmcpKSB7XG5cdFx0XHRcdGlmIChpc05vZGVzSW5TYW1lQmxvY2socm9vdE5vZGUsIHNpYmxpbmcsIG5vZGUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNpYmxpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQ2FyZXRDYW5kaWRhdGUoc2libGluZykpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgYmVmb3JlID0gY3VycnkoYmVmb3JlQWZ0ZXIsIHRydWUpO1xuXHR2YXIgYWZ0ZXIgPSBjdXJyeShiZWZvcmVBZnRlciwgZmFsc2UpO1xuXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZVJhbmdlKGRpcmVjdGlvbiwgcm9vdE5vZGUsIHJhbmdlKSB7XG5cdFx0dmFyIG5vZGUsIGNvbnRhaW5lciwgb2Zmc2V0LCBsb2NhdGlvbjtcblx0XHR2YXIgbGVhbkxlZnQgPSBjdXJyeShsZWFuLCB0cnVlLCByb290Tm9kZSk7XG5cdFx0dmFyIGxlYW5SaWdodCA9IGN1cnJ5KGxlYW4sIGZhbHNlLCByb290Tm9kZSk7XG5cblx0XHRjb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcblx0XHRvZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcblxuXHRcdGlmIChDYXJldENvbnRhaW5lci5pc0NhcmV0Q29udGFpbmVyQmxvY2soY29udGFpbmVyKSkge1xuXHRcdFx0aWYgKCFpc0VsZW1lbnQoY29udGFpbmVyKSkge1xuXHRcdFx0XHRjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0bG9jYXRpb24gPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpO1xuXG5cdFx0XHRpZiAobG9jYXRpb24gPT0gJ2JlZm9yZScpIHtcblx0XHRcdFx0bm9kZSA9IGNvbnRhaW5lci5uZXh0U2libGluZztcblx0XHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2Uobm9kZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gYmVmb3JlKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhdGlvbiA9PSAnYWZ0ZXInKSB7XG5cdFx0XHRcdG5vZGUgPSBjb250YWluZXIucHJldmlvdXNTaWJsaW5nO1xuXHRcdFx0XHRpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZShub2RlKSkge1xuXHRcdFx0XHRcdHJldHVybiBhZnRlcihub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG5cdFx0XHRyZXR1cm4gcmFuZ2U7XG5cdFx0fVxuXG5cdFx0aWYgKE5vZGVUeXBlLmlzVGV4dChjb250YWluZXIpKSB7XG5cdFx0XHRpZiAoaXNDYXJldENvbnRhaW5lcihjb250YWluZXIpKSB7XG5cdFx0XHRcdGlmIChkaXJlY3Rpb24gPT09IDEpIHtcblx0XHRcdFx0XHRub2RlID0gbGVhblJpZ2h0KGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBiZWZvcmUobm9kZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bm9kZSA9IGxlYW5MZWZ0KGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBhZnRlcihub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuXHRcdFx0XHRcdG5vZGUgPSBsZWFuTGVmdChjb250YWluZXIpO1xuXHRcdFx0XHRcdGlmIChub2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWZ0ZXIobm9kZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bm9kZSA9IGxlYW5SaWdodChjb250YWluZXIpO1xuXHRcdFx0XHRcdGlmIChub2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYmVmb3JlKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByYW5nZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKENhcmV0Q29udGFpbmVyLmVuZHNXaXRoQ2FyZXRDb250YWluZXIoY29udGFpbmVyKSAmJiBvZmZzZXQgPj0gY29udGFpbmVyLmRhdGEubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRpZiAoZGlyZWN0aW9uID09PSAxKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGxlYW5SaWdodChjb250YWluZXIpO1xuXHRcdFx0XHRcdGlmIChub2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYmVmb3JlKG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByYW5nZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKENhcmV0Q29udGFpbmVyLnN0YXJ0c1dpdGhDYXJldENvbnRhaW5lcihjb250YWluZXIpICYmIG9mZnNldCA8PSAxKSB7XG5cdFx0XHRcdGlmIChkaXJlY3Rpb24gPT09IC0xKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGxlYW5MZWZ0KGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBhZnRlcihub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmFuZ2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvZmZzZXQgPT09IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuXHRcdFx0XHRub2RlID0gbGVhblJpZ2h0KGNvbnRhaW5lcik7XG5cdFx0XHRcdGlmIChub2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJlZm9yZShub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByYW5nZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9mZnNldCA9PT0gMCkge1xuXHRcdFx0XHRub2RlID0gbGVhbkxlZnQoY29udGFpbmVyKTtcblx0XHRcdFx0aWYgKG5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWZ0ZXIobm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmFuZ2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJhbmdlO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNOZXh0VG9Db250ZW50RWRpdGFibGVGYWxzZShyZWxhdGl2ZU9mZnNldCwgY2FyZXRQb3NpdGlvbikge1xuXHRcdHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGdldENoaWxkTm9kZUF0UmVsYXRpdmVPZmZzZXQocmVsYXRpdmVPZmZzZXQsIGNhcmV0UG9zaXRpb24pKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0aXNGb3J3YXJkczogaXNGb3J3YXJkcyxcblx0XHRpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG5cdFx0ZmluZE5vZGU6IGZpbmROb2RlLFxuXHRcdGdldEVkaXRpbmdIb3N0OiBnZXRFZGl0aW5nSG9zdCxcblx0XHRnZXRQYXJlbnRCbG9jazogZ2V0UGFyZW50QmxvY2ssXG5cdFx0aXNJblNhbWVCbG9jazogaXNJblNhbWVCbG9jayxcblx0XHRpc0luU2FtZUVkaXRpbmdIb3N0OiBpc0luU2FtZUVkaXRpbmdIb3N0LFxuXHRcdGlzQmVmb3JlQ29udGVudEVkaXRhYmxlRmFsc2U6IGN1cnJ5KGlzTmV4dFRvQ29udGVudEVkaXRhYmxlRmFsc2UsIDApLFxuXHRcdGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZTogY3VycnkoaXNOZXh0VG9Db250ZW50RWRpdGFibGVGYWxzZSwgLTEpLFxuXHRcdG5vcm1hbGl6ZVJhbmdlOiBub3JtYWxpemVSYW5nZVxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9jYXJldC9DYXJldFdhbGtlci5qc1xuXG4vKipcbiAqIENhcmV0V2Fsa2VyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgY29udGFpbnMgbG9naWMgZm9yIG1vdmluZyBhcm91bmQgYSB2aXJ0dWFsIGNhcmV0IGluIGxvZ2ljYWwgb3JkZXIgd2l0aGluIGEgRE9NIGVsZW1lbnQuXG4gKlxuICogSXQgaWdub3JlcyB0aGUgbW9zdCBvYnZpb3VzIGludmFsaWQgY2FyZXQgbG9jYXRpb25zIHN1Y2ggYXMgd2l0aGluIGEgc2NyaXB0IGVsZW1lbnQgb3Igd2l0aGluIGFcbiAqIGNvbnRlbnRFZGl0YWJsZT1mYWxzZSBlbGVtZW50IGJ1dCBpdCB3aWxsIHJldHVybiBsb2NhdGlvbnMgdGhhdCBpc24ndCBwb3NzaWJsZSB0byByZW5kZXIgdmlzdWFsbHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmNhcmV0LkNhcmV0V2Fsa2VyXG4gKiBAZXhhbXBsZVxuICogdmFyIGNhcmV0V2Fsa2VyID0gbmV3IENhcmV0V2Fsa2VyKHJvb3RFbG0pO1xuICpcbiAqIHZhciBwcmV2TG9naWNhbENhcmV0UG9zaXRpb24gPSBjYXJldFdhbGtlci5wcmV2KENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocmFuZ2UpKTtcbiAqIHZhciBuZXh0TG9naWNhbENhcmV0UG9zaXRpb24gPSBjYXJldFdhbGtlci5uZXh0KENhcmV0UG9zaXRpb24uZnJvbVJhbmdlRW5kKHJhbmdlKSk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvY2FyZXQvQ2FyZXRXYWxrZXJcIiwgW1xuXHRcInRpbnltY2UvZG9tL05vZGVUeXBlXCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldENhbmRpZGF0ZVwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRQb3NpdGlvblwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRVdGlsc1wiLFxuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL3V0aWwvRnVuXCJcbl0sIGZ1bmN0aW9uKE5vZGVUeXBlLCBDYXJldENhbmRpZGF0ZSwgQ2FyZXRQb3NpdGlvbiwgQ2FyZXRVdGlscywgQXJyLCBGdW4pIHtcblx0dmFyIGlzQ29udGVudEVkaXRhYmxlRmFsc2UgPSBOb2RlVHlwZS5pc0NvbnRlbnRFZGl0YWJsZUZhbHNlLFxuXHRcdGlzVGV4dCA9IE5vZGVUeXBlLmlzVGV4dCxcblx0XHRpc0VsZW1lbnQgPSBOb2RlVHlwZS5pc0VsZW1lbnQsXG5cdFx0aXNCciA9IE5vZGVUeXBlLmlzQnIsXG5cdFx0aXNGb3J3YXJkcyA9IENhcmV0VXRpbHMuaXNGb3J3YXJkcyxcblx0XHRpc0JhY2t3YXJkcyA9IENhcmV0VXRpbHMuaXNCYWNrd2FyZHMsXG5cdFx0aXNDYXJldENhbmRpZGF0ZSA9IENhcmV0Q2FuZGlkYXRlLmlzQ2FyZXRDYW5kaWRhdGUsXG5cdFx0aXNBdG9taWMgPSBDYXJldENhbmRpZGF0ZS5pc0F0b21pYyxcblx0XHRpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGUgPSBDYXJldENhbmRpZGF0ZS5pc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGU7XG5cblx0ZnVuY3Rpb24gZ2V0UGFyZW50cyhub2RlLCByb290Tm9kZSkge1xuXHRcdHZhciBwYXJlbnRzID0gW107XG5cblx0XHR3aGlsZSAobm9kZSAmJiBub2RlICE9IHJvb3ROb2RlKSB7XG5cdFx0XHRwYXJlbnRzLnB1c2gobm9kZSk7XG5cdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXJlbnRzO1xuXHR9XG5cblx0ZnVuY3Rpb24gbm9kZUF0SW5kZXgoY29udGFpbmVyLCBvZmZzZXQpIHtcblx0XHRpZiAoY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSAmJiBvZmZzZXQgPCBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBjb250YWluZXIuY2hpbGROb2Rlc1tvZmZzZXRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Q2FyZXRDYW5kaWRhdGVQb3NpdGlvbihkaXJlY3Rpb24sIG5vZGUpIHtcblx0XHRpZiAoaXNGb3J3YXJkcyhkaXJlY3Rpb24pKSB7XG5cdFx0XHRpZiAoaXNDYXJldENhbmRpZGF0ZShub2RlLnByZXZpb3VzU2libGluZykgJiYgIWlzVGV4dChub2RlLnByZXZpb3VzU2libGluZykpIHtcblx0XHRcdFx0cmV0dXJuIENhcmV0UG9zaXRpb24uYmVmb3JlKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNUZXh0KG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uKG5vZGUsIDApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pKSB7XG5cdFx0XHRpZiAoaXNDYXJldENhbmRpZGF0ZShub2RlLm5leHRTaWJsaW5nKSAmJiAhaXNUZXh0KG5vZGUubmV4dFNpYmxpbmcpKSB7XG5cdFx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uLmFmdGVyKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNUZXh0KG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uKG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pKSB7XG5cdFx0XHRpZiAoaXNCcihub2RlKSkge1xuXHRcdFx0XHRyZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uLmFmdGVyKG5vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKTtcblx0fVxuXG5cdC8vIEp1bXBzIG92ZXIgQlIgZWxlbWVudHMgPHA+fDxicj48L3A+PHA+YTwvcD4gLT4gPHA+PGJyPjwvcD48cD58YTwvcD5cblx0ZnVuY3Rpb24gaXNCckJlZm9yZUJsb2NrKG5vZGUsIHJvb3ROb2RlKSB7XG5cdFx0dmFyIG5leHQ7XG5cblx0XHRpZiAoIU5vZGVUeXBlLmlzQnIobm9kZSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRuZXh0ID0gZmluZENhcmV0UG9zaXRpb24oMSwgQ2FyZXRQb3NpdGlvbi5hZnRlcihub2RlKSwgcm9vdE5vZGUpO1xuXHRcdGlmICghbmV4dCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiAhQ2FyZXRVdGlscy5pc0luU2FtZUJsb2NrKENhcmV0UG9zaXRpb24uYmVmb3JlKG5vZGUpLCBDYXJldFBvc2l0aW9uLmJlZm9yZShuZXh0KSwgcm9vdE5vZGUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZmluZENhcmV0UG9zaXRpb24oZGlyZWN0aW9uLCBzdGFydENhcmV0UG9zaXRpb24sIHJvb3ROb2RlKSB7XG5cdFx0dmFyIGNvbnRhaW5lciwgb2Zmc2V0LCBub2RlLCBuZXh0Tm9kZSwgaW5uZXJOb2RlLFxuXHRcdFx0cm9vdENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtLCBjYXJldFBvc2l0aW9uO1xuXG5cdFx0aWYgKCFpc0VsZW1lbnQocm9vdE5vZGUpIHx8ICFzdGFydENhcmV0UG9zaXRpb24pIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNhcmV0UG9zaXRpb24gPSBzdGFydENhcmV0UG9zaXRpb247XG5cdFx0Y29udGFpbmVyID0gY2FyZXRQb3NpdGlvbi5jb250YWluZXIoKTtcblx0XHRvZmZzZXQgPSBjYXJldFBvc2l0aW9uLm9mZnNldCgpO1xuXG5cdFx0aWYgKGlzVGV4dChjb250YWluZXIpKSB7XG5cdFx0XHRpZiAoaXNCYWNrd2FyZHMoZGlyZWN0aW9uKSAmJiBvZmZzZXQgPiAwKSB7XG5cdFx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uKGNvbnRhaW5lciwgLS1vZmZzZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNGb3J3YXJkcyhkaXJlY3Rpb24pICYmIG9mZnNldCA8IGNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIENhcmV0UG9zaXRpb24oY29udGFpbmVyLCArK29mZnNldCk7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSBjb250YWluZXI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pICYmIG9mZnNldCA+IDApIHtcblx0XHRcdFx0bmV4dE5vZGUgPSBub2RlQXRJbmRleChjb250YWluZXIsIG9mZnNldCAtIDEpO1xuXHRcdFx0XHRpZiAoaXNDYXJldENhbmRpZGF0ZShuZXh0Tm9kZSkpIHtcblx0XHRcdFx0XHRpZiAoIWlzQXRvbWljKG5leHROb2RlKSkge1xuXHRcdFx0XHRcdFx0aW5uZXJOb2RlID0gQ2FyZXRVdGlscy5maW5kTm9kZShuZXh0Tm9kZSwgZGlyZWN0aW9uLCBpc0VkaXRhYmxlQ2FyZXRDYW5kaWRhdGUsIG5leHROb2RlKTtcblx0XHRcdFx0XHRcdGlmIChpbm5lck5vZGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGlzVGV4dChpbm5lck5vZGUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIENhcmV0UG9zaXRpb24oaW5uZXJOb2RlLCBpbm5lck5vZGUuZGF0YS5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIoaW5uZXJOb2RlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNUZXh0KG5leHROb2RlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIENhcmV0UG9zaXRpb24obmV4dE5vZGUsIG5leHROb2RlLmRhdGEubGVuZ3RoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUobmV4dE5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0ZvcndhcmRzKGRpcmVjdGlvbikgJiYgb2Zmc2V0IDwgY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRcdG5leHROb2RlID0gbm9kZUF0SW5kZXgoY29udGFpbmVyLCBvZmZzZXQpO1xuXHRcdFx0XHRpZiAoaXNDYXJldENhbmRpZGF0ZShuZXh0Tm9kZSkpIHtcblx0XHRcdFx0XHRpZiAoaXNCckJlZm9yZUJsb2NrKG5leHROb2RlLCByb290Tm9kZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbihkaXJlY3Rpb24sIENhcmV0UG9zaXRpb24uYWZ0ZXIobmV4dE5vZGUpLCByb290Tm9kZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFpc0F0b21pYyhuZXh0Tm9kZSkpIHtcblx0XHRcdFx0XHRcdGlubmVyTm9kZSA9IENhcmV0VXRpbHMuZmluZE5vZGUobmV4dE5vZGUsIGRpcmVjdGlvbiwgaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlLCBuZXh0Tm9kZSk7XG5cdFx0XHRcdFx0XHRpZiAoaW5uZXJOb2RlKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpc1RleHQoaW5uZXJOb2RlKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uKGlubmVyTm9kZSwgMCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUoaW5uZXJOb2RlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNUZXh0KG5leHROb2RlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIENhcmV0UG9zaXRpb24obmV4dE5vZGUsIDApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uLmFmdGVyKG5leHROb2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRub2RlID0gY2FyZXRQb3NpdGlvbi5nZXROb2RlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKChpc0ZvcndhcmRzKGRpcmVjdGlvbikgJiYgY2FyZXRQb3NpdGlvbi5pc0F0RW5kKCkpIHx8IChpc0JhY2t3YXJkcyhkaXJlY3Rpb24pICYmIGNhcmV0UG9zaXRpb24uaXNBdFN0YXJ0KCkpKSB7XG5cdFx0XHRub2RlID0gQ2FyZXRVdGlscy5maW5kTm9kZShub2RlLCBkaXJlY3Rpb24sIEZ1bi5jb25zdGFudCh0cnVlKSwgcm9vdE5vZGUsIHRydWUpO1xuXHRcdFx0aWYgKGlzRWRpdGFibGVDYXJldENhbmRpZGF0ZShub2RlKSkge1xuXHRcdFx0XHRyZXR1cm4gZ2V0Q2FyZXRDYW5kaWRhdGVQb3NpdGlvbihkaXJlY3Rpb24sIG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG5leHROb2RlID0gQ2FyZXRVdGlscy5maW5kTm9kZShub2RlLCBkaXJlY3Rpb24sIGlzRWRpdGFibGVDYXJldENhbmRpZGF0ZSwgcm9vdE5vZGUpO1xuXG5cdFx0cm9vdENvbnRlbnRFZGl0YWJsZUZhbHNlRWxtID0gQXJyLmxhc3QoQXJyLmZpbHRlcihnZXRQYXJlbnRzKGNvbnRhaW5lciwgcm9vdE5vZGUpLCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKSk7XG5cdFx0aWYgKHJvb3RDb250ZW50RWRpdGFibGVGYWxzZUVsbSAmJiAoIW5leHROb2RlIHx8ICFyb290Q29udGVudEVkaXRhYmxlRmFsc2VFbG0uY29udGFpbnMobmV4dE5vZGUpKSkge1xuXHRcdFx0aWYgKGlzRm9yd2FyZHMoZGlyZWN0aW9uKSkge1xuXHRcdFx0XHRjYXJldFBvc2l0aW9uID0gQ2FyZXRQb3NpdGlvbi5hZnRlcihyb290Q29udGVudEVkaXRhYmxlRmFsc2VFbG0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FyZXRQb3NpdGlvbiA9IENhcmV0UG9zaXRpb24uYmVmb3JlKHJvb3RDb250ZW50RWRpdGFibGVGYWxzZUVsbSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjYXJldFBvc2l0aW9uO1xuXHRcdH1cblxuXHRcdGlmIChuZXh0Tm9kZSkge1xuXHRcdFx0cmV0dXJuIGdldENhcmV0Q2FuZGlkYXRlUG9zaXRpb24oZGlyZWN0aW9uLCBuZXh0Tm9kZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gZnVuY3Rpb24ocm9vdE5vZGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIHRoZSBuZXh0IGxvZ2ljYWwgY2FyZXQgcG9zaXRpb24gZnJvbSB0aGUgc3BlY2lmaWNlZCBpbnB1dFxuXHRcdFx0ICogY2FyZXRQb2lzaXRvbiBvciBudWxsIGlmIHRoZXJlIGlzbid0IGFueSBtb3JlIHBvc2l0aW9ucyBsZWZ0IGZvciBleGFtcGxlXG5cdFx0XHQgKiBhdCB0aGUgZW5kIHNwZWNpZmllZCByb290IGVsZW1lbnQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBuZXh0XG5cdFx0XHQgKiBAcGFyYW0ge3RpbnltY2UuY2FyZXQuQ2FyZXRQb3NpdGlvbn0gY2FyZXRQb3NpdGlvbiBDYXJldCBwb3NpdGlvbiB0byBzdGFydCBmcm9tLlxuXHRcdFx0ICogQHJldHVybiB7dGlueW1jZS5jYXJldC5DYXJldFBvc2l0aW9ufSBDYXJldFBvc2l0aW9uIG9yIG51bGwgaWYgbm8gcG9zaXRpb24gd2FzIGZvdW5kLlxuXHRcdFx0ICovXG5cdFx0XHRuZXh0OiBmdW5jdGlvbihjYXJldFBvc2l0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbigxLCBjYXJldFBvc2l0aW9uLCByb290Tm9kZSk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdGhlIHByZXZpb3VzIGxvZ2ljYWwgY2FyZXQgcG9zaXRpb24gZnJvbSB0aGUgc3BlY2lmaWNlZCBpbnB1dFxuXHRcdFx0ICogY2FyZXRQb2lzaXRvbiBvciBudWxsIGlmIHRoZXJlIGlzbid0IGFueSBtb3JlIHBvc2l0aW9ucyBsZWZ0IGZvciBleGFtcGxlXG5cdFx0XHQgKiBhdCB0aGUgZW5kIHNwZWNpZmllZCByb290IGVsZW1lbnQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBwcmV2XG5cdFx0XHQgKiBAcGFyYW0ge3RpbnltY2UuY2FyZXQuQ2FyZXRQb3NpdGlvbn0gY2FyZXRQb3NpdGlvbiBDYXJldCBwb3NpdGlvbiB0byBzdGFydCBmcm9tLlxuXHRcdFx0ICogQHJldHVybiB7dGlueW1jZS5jYXJldC5DYXJldFBvc2l0aW9ufSBDYXJldFBvc2l0aW9uIG9yIG51bGwgaWYgbm8gcG9zaXRpb24gd2FzIGZvdW5kLlxuXHRcdFx0ICovXG5cdFx0XHRwcmV2OiBmdW5jdGlvbihjYXJldFBvc2l0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbigtMSwgY2FyZXRQb3NpdGlvbiwgcm9vdE5vZGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL0luc2VydExpc3QuanNcblxuLyoqXG4gKiBJbnNlcnRMaXN0LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTYgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogSGFuZGxlcyBpbnNlcnRzIG9mIGxpc3RzIGludG8gdGhlIGVkaXRvciBpbnN0YW5jZS5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5JbnNlcnRMaXN0XG4gKiBAcHJpdmF0ZVxuICovXG5kZWZpbmUoXCJ0aW55bWNlL0luc2VydExpc3RcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRXYWxrZXJcIixcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0UG9zaXRpb25cIlxuXSwgZnVuY3Rpb24oVG9vbHMsIENhcmV0V2Fsa2VyLCBDYXJldFBvc2l0aW9uKSB7XG5cdHZhciBpc0xpc3RGcmFnbWVudCA9IGZ1bmN0aW9uKGZyYWdtZW50KSB7XG5cdFx0dmFyIGZpcnN0Q2hpbGQgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXHRcdHZhciBsYXN0Q2hpbGQgPSBmcmFnbWVudC5sYXN0Q2hpbGQ7XG5cblx0XHQvLyBTa2lwIG1ldGEgc2luY2UgaXQncyBsaWtlbHkgPG1ldGE+PHVsPi4uPC91bD5cblx0XHRpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5hbWUgPT09ICdtZXRhJykge1xuXHRcdFx0Zmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQubmV4dDtcblx0XHR9XG5cblx0XHQvLyBTa2lwIG1jZV9tYXJrZXIgc2luY2UgaXQncyBsaWtlbHkgPHVsPi4uPC91bD48c3BhbiBpZD1cIm1jZV9tYXJrZXJcIj48L3NwYW4+XG5cdFx0aWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQuYXR0cignaWQnKSA9PT0gJ21jZV9tYXJrZXInKSB7XG5cdFx0XHRsYXN0Q2hpbGQgPSBsYXN0Q2hpbGQucHJldjtcblx0XHR9XG5cblx0XHRpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZCAhPT0gbGFzdENoaWxkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZpcnN0Q2hpbGQubmFtZSA9PT0gJ3VsJyB8fCBmaXJzdENoaWxkLm5hbWUgPT09ICdvbCc7XG5cdH07XG5cblx0dmFyIGNsZWFudXBEb21GcmFnbWVudCA9IGZ1bmN0aW9uIChkb21GcmFnbWVudCkge1xuXHRcdHZhciBmaXJzdENoaWxkID0gZG9tRnJhZ21lbnQuZmlyc3RDaGlsZDtcblx0XHR2YXIgbGFzdENoaWxkID0gZG9tRnJhZ21lbnQubGFzdENoaWxkO1xuXG5cdFx0Ly8gVE9ETzogcmVtb3ZlIHRoZSBtZXRhIHRhZyBmcm9tIHBhc3RlIGxvZ2ljXG5cdFx0aWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gJ01FVEEnKSB7XG5cdFx0XHRmaXJzdENoaWxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0aWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQuaWQgPT09ICdtY2VfbWFya2VyJykge1xuXHRcdFx0bGFzdENoaWxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGFzdENoaWxkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZG9tRnJhZ21lbnQ7XG5cdH07XG5cblx0dmFyIHRvRG9tRnJhZ21lbnQgPSBmdW5jdGlvbihkb20sIHNlcmlhbGl6ZXIsIGZyYWdtZW50KSB7XG5cdFx0dmFyIGh0bWwgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShmcmFnbWVudCk7XG5cdFx0dmFyIGRvbUZyYWdtZW50ID0gZG9tLmNyZWF0ZUZyYWdtZW50KGh0bWwpO1xuXG5cdFx0cmV0dXJuIGNsZWFudXBEb21GcmFnbWVudChkb21GcmFnbWVudCk7XG5cdH07XG5cblx0dmFyIGxpc3RJdGVtcyA9IGZ1bmN0aW9uKGVsbSkge1xuXHRcdHJldHVybiBUb29scy5ncmVwKGVsbS5jaGlsZE5vZGVzLCBmdW5jdGlvbihjaGlsZCkge1xuXHRcdFx0cmV0dXJuIGNoaWxkLm5vZGVOYW1lID09PSAnTEknO1xuXHRcdH0pO1xuXHR9O1xuXG5cdHZhciBpc0VtcHR5ID0gZnVuY3Rpb24gKGVsbSkge1xuXHRcdHJldHVybiAhZWxtLmZpcnN0Q2hpbGQ7XG5cdH07XG5cblx0dmFyIHRyaW1MaXN0SXRlbXMgPSBmdW5jdGlvbihlbG1zKSB7XG5cdFx0cmV0dXJuIGVsbXMubGVuZ3RoID4gMCAmJiBpc0VtcHR5KGVsbXNbZWxtcy5sZW5ndGggLSAxXSkgPyBlbG1zLnNsaWNlKDAsIC0xKSA6IGVsbXM7XG5cdH07XG5cblx0dmFyIGdldFBhcmVudExpID0gZnVuY3Rpb24oZG9tLCBub2RlKSB7XG5cdFx0dmFyIHBhcmVudEJsb2NrID0gZG9tLmdldFBhcmVudChub2RlLCBkb20uaXNCbG9jayk7XG5cdFx0cmV0dXJuIHBhcmVudEJsb2NrICYmIHBhcmVudEJsb2NrLm5vZGVOYW1lID09PSAnTEknID8gcGFyZW50QmxvY2sgOiBudWxsO1xuXHR9O1xuXG5cdHZhciBpc1BhcmVudEJsb2NrTGkgPSBmdW5jdGlvbihkb20sIG5vZGUpIHtcblx0XHRyZXR1cm4gISFnZXRQYXJlbnRMaShkb20sIG5vZGUpO1xuXHR9O1xuXG5cdHZhciBnZXRTcGxpdCA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIHJuZykge1xuXHRcdHZhciBiZWZvcmVSbmcgPSBybmcuY2xvbmVSYW5nZSgpO1xuXHRcdHZhciBhZnRlclJuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG5cblx0XHRiZWZvcmVSbmcuc2V0U3RhcnRCZWZvcmUocGFyZW50Tm9kZSk7XG5cdFx0YWZ0ZXJSbmcuc2V0RW5kQWZ0ZXIocGFyZW50Tm9kZSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0YmVmb3JlUm5nLmNsb25lQ29udGVudHMoKSxcblx0XHRcdGFmdGVyUm5nLmNsb25lQ29udGVudHMoKVxuXHRcdF07XG5cdH07XG5cblx0dmFyIGZpbmRGaXJzdEluID0gZnVuY3Rpb24obm9kZSwgcm9vdE5vZGUpIHtcblx0XHR2YXIgY2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKTtcblx0XHR2YXIgY2FyZXRXYWxrZXIgPSBuZXcgQ2FyZXRXYWxrZXIocm9vdE5vZGUpO1xuXHRcdHZhciBuZXdDYXJldFBvcyA9IGNhcmV0V2Fsa2VyLm5leHQoY2FyZXRQb3MpO1xuXG5cdFx0cmV0dXJuIG5ld0NhcmV0UG9zID8gbmV3Q2FyZXRQb3MudG9SYW5nZSgpIDogbnVsbDtcblx0fTtcblxuXHR2YXIgZmluZExhc3RPZiA9IGZ1bmN0aW9uKG5vZGUsIHJvb3ROb2RlKSB7XG5cdFx0dmFyIGNhcmV0UG9zID0gQ2FyZXRQb3NpdGlvbi5hZnRlcihub2RlKTtcblx0XHR2YXIgY2FyZXRXYWxrZXIgPSBuZXcgQ2FyZXRXYWxrZXIocm9vdE5vZGUpO1xuXHRcdHZhciBuZXdDYXJldFBvcyA9IGNhcmV0V2Fsa2VyLnByZXYoY2FyZXRQb3MpO1xuXG5cdFx0cmV0dXJuIG5ld0NhcmV0UG9zID8gbmV3Q2FyZXRQb3MudG9SYW5nZSgpIDogbnVsbDtcblx0fTtcblxuXHR2YXIgaW5zZXJ0TWlkZGxlID0gZnVuY3Rpb24odGFyZ2V0LCBlbG1zLCByb290Tm9kZSwgcm5nKSB7XG5cdFx0dmFyIHBhcnRzID0gZ2V0U3BsaXQodGFyZ2V0LCBybmcpO1xuXHRcdHZhciBwYXJlbnRFbG0gPSB0YXJnZXQucGFyZW50Tm9kZTtcblxuXHRcdHBhcmVudEVsbS5pbnNlcnRCZWZvcmUocGFydHNbMF0sIHRhcmdldCk7XG5cdFx0VG9vbHMuZWFjaChlbG1zLCBmdW5jdGlvbihsaSkge1xuXHRcdFx0cGFyZW50RWxtLmluc2VydEJlZm9yZShsaSwgdGFyZ2V0KTtcblx0XHR9KTtcblx0XHRwYXJlbnRFbG0uaW5zZXJ0QmVmb3JlKHBhcnRzWzFdLCB0YXJnZXQpO1xuXHRcdHBhcmVudEVsbS5yZW1vdmVDaGlsZCh0YXJnZXQpO1xuXG5cdFx0cmV0dXJuIGZpbmRMYXN0T2YoZWxtc1tlbG1zLmxlbmd0aCAtIDFdLCByb290Tm9kZSk7XG5cdH07XG5cblx0dmFyIGluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKHRhcmdldCwgZWxtcywgcm9vdE5vZGUpIHtcblx0XHR2YXIgcGFyZW50RWxtID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cblx0XHRUb29scy5lYWNoKGVsbXMsIGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0cGFyZW50RWxtLmluc2VydEJlZm9yZShlbG0sIHRhcmdldCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZmluZEZpcnN0SW4odGFyZ2V0LCByb290Tm9kZSk7XG5cdH07XG5cblx0dmFyIGluc2VydEFmdGVyID0gZnVuY3Rpb24odGFyZ2V0LCBlbG1zLCByb290Tm9kZSwgZG9tKSB7XG5cdFx0ZG9tLmluc2VydEFmdGVyKGVsbXMucmV2ZXJzZSgpLCB0YXJnZXQpO1xuXHRcdHJldHVybiBmaW5kTGFzdE9mKGVsbXNbMF0sIHJvb3ROb2RlKTtcblx0fTtcblxuXHR2YXIgaW5zZXJ0QXRDYXJldCA9IGZ1bmN0aW9uKHNlcmlhbGl6ZXIsIGRvbSwgcm5nLCBmcmFnbWVudCkge1xuXHRcdHZhciBkb21GcmFnbWVudCA9IHRvRG9tRnJhZ21lbnQoZG9tLCBzZXJpYWxpemVyLCBmcmFnbWVudCk7XG5cdFx0dmFyIGxpVGFyZ2V0ID0gZ2V0UGFyZW50TGkoZG9tLCBybmcuc3RhcnRDb250YWluZXIpO1xuXHRcdHZhciBsaUVsbXMgPSB0cmltTGlzdEl0ZW1zKGxpc3RJdGVtcyhkb21GcmFnbWVudC5maXJzdENoaWxkKSk7XG5cdFx0dmFyIEJFR0lOTklORyA9IDEsIEVORCA9IDI7XG5cdFx0dmFyIHJvb3ROb2RlID0gZG9tLmdldFJvb3QoKTtcblxuXHRcdHZhciBpc0F0ID0gZnVuY3Rpb24obG9jYXRpb24pIHtcblx0XHRcdHZhciBjYXJldFBvcyA9IENhcmV0UG9zaXRpb24uZnJvbVJhbmdlU3RhcnQocm5nKTtcblx0XHRcdHZhciBjYXJldFdhbGtlciA9IG5ldyBDYXJldFdhbGtlcihkb20uZ2V0Um9vdCgpKTtcblx0XHRcdHZhciBuZXdQb3MgPSBsb2NhdGlvbiA9PT0gQkVHSU5OSU5HID8gY2FyZXRXYWxrZXIucHJldihjYXJldFBvcykgOiBjYXJldFdhbGtlci5uZXh0KGNhcmV0UG9zKTtcblxuXHRcdFx0cmV0dXJuIG5ld1BvcyA/IGdldFBhcmVudExpKGRvbSwgbmV3UG9zLmdldE5vZGUoKSkgIT09IGxpVGFyZ2V0IDogdHJ1ZTtcblx0XHR9O1xuXG5cdFx0aWYgKGlzQXQoQkVHSU5OSU5HKSkge1xuXHRcdFx0cmV0dXJuIGluc2VydEJlZm9yZShsaVRhcmdldCwgbGlFbG1zLCByb290Tm9kZSk7XG5cdFx0fSBlbHNlIGlmIChpc0F0KEVORCkpIHtcblx0XHRcdHJldHVybiBpbnNlcnRBZnRlcihsaVRhcmdldCwgbGlFbG1zLCByb290Tm9kZSwgZG9tKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5zZXJ0TWlkZGxlKGxpVGFyZ2V0LCBsaUVsbXMsIHJvb3ROb2RlLCBybmcpO1xuXHR9O1xuXG5cdHJldHVybiB7XG5cdFx0aXNMaXN0RnJhZ21lbnQ6IGlzTGlzdEZyYWdtZW50LFxuXHRcdGluc2VydEF0Q2FyZXQ6IGluc2VydEF0Q2FyZXQsXG5cdFx0aXNQYXJlbnRCbG9ja0xpOiBpc1BhcmVudEJsb2NrTGksXG5cdFx0dHJpbUxpc3RJdGVtczogdHJpbUxpc3RJdGVtcyxcblx0XHRsaXN0SXRlbXM6IGxpc3RJdGVtc1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9JbnNlcnRDb250ZW50LmpzXG5cbi8qKlxuICogSW5zZXJ0Q29udGVudC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE2IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIEhhbmRsZXMgaW5zZXJ0cyBvZiBjb250ZW50cyBpbnRvIHRoZSBlZGl0b3IgaW5zdGFuY2UuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuSW5zZXJ0Q29udGVudFxuICogQHByaXZhdGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9JbnNlcnRDb250ZW50XCIsIFtcblx0XCJ0aW55bWNlL0VudlwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvaHRtbC9TZXJpYWxpemVyXCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldFdhbGtlclwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRQb3NpdGlvblwiLFxuXHRcInRpbnltY2UvZG9tL0VsZW1lbnRVdGlsc1wiLFxuXHRcInRpbnltY2UvZG9tL05vZGVUeXBlXCIsXG5cdFwidGlueW1jZS9JbnNlcnRMaXN0XCJcbl0sIGZ1bmN0aW9uKEVudiwgVG9vbHMsIFNlcmlhbGl6ZXIsIENhcmV0V2Fsa2VyLCBDYXJldFBvc2l0aW9uLCBFbGVtZW50VXRpbHMsIE5vZGVUeXBlLCBJbnNlcnRMaXN0KSB7XG5cdHZhciBpc1RhYmxlQ2VsbCA9IE5vZGVUeXBlLm1hdGNoTm9kZU5hbWVzKCd0ZCB0aCcpO1xuXG5cdHZhciB2YWxpZEluc2VydGlvbiA9IGZ1bmN0aW9uIChlZGl0b3IsIHZhbHVlLCBwYXJlbnROb2RlKSB7XG5cdFx0Ly8gU2hvdWxkIG5ldmVyIGluc2VydCBjb250ZW50IGludG8gYm9ndXMgZWxlbWVudHMsIHNpbmNlIHRoZXNlIGNhblxuXHRcdC8vIGJlIHJlc2l6ZSBoYW5kbGVzIG9yIHNpbWlsYXJcblx0XHRpZiAocGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLWJvZ3VzJykgPT09ICdhbGwnKSB7XG5cdFx0XHRwYXJlbnROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVkaXRvci5kb20uY3JlYXRlRnJhZ21lbnQodmFsdWUpLCBwYXJlbnROb2RlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgcGFyZW50IGlzIGVtcHR5IG9yIG9ubHkgaGFzIG9uZSBCUiBlbGVtZW50IHRoZW4gc2V0IHRoZSBpbm5lckhUTUwgb2YgdGhhdCBwYXJlbnRcblx0XHRcdHZhciBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXHRcdFx0dmFyIG5vZGUyID0gcGFyZW50Tm9kZS5sYXN0Q2hpbGQ7XG5cdFx0XHRpZiAoIW5vZGUgfHwgKG5vZGUgPT09IG5vZGUyICYmIG5vZGUubm9kZU5hbWUgPT09ICdCUicpKSB7Ly8vXG5cdFx0XHRcdGVkaXRvci5kb20uc2V0SFRNTChwYXJlbnROb2RlLCB2YWx1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNldENvbnRlbnQodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgaW5zZXJ0SHRtbEF0Q2FyZXQgPSBmdW5jdGlvbihlZGl0b3IsIHZhbHVlLCBkZXRhaWxzKSB7XG5cdFx0dmFyIHBhcnNlciwgc2VyaWFsaXplciwgcGFyZW50Tm9kZSwgcm9vdE5vZGUsIGZyYWdtZW50LCBhcmdzO1xuXHRcdHZhciBtYXJrZXIsIHJuZywgbm9kZSwgbm9kZTIsIGJvb2ttYXJrSHRtbCwgbWVyZ2U7XG5cdFx0dmFyIHRleHRJbmxpbmVFbGVtZW50cyA9IGVkaXRvci5zY2hlbWEuZ2V0VGV4dElubGluZUVsZW1lbnRzKCk7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb24sIGRvbSA9IGVkaXRvci5kb207XG5cblx0XHRmdW5jdGlvbiB0cmltT3JQYWRkTGVmdFJpZ2h0KGh0bWwpIHtcblx0XHRcdHZhciBybmcsIGNvbnRhaW5lciwgb2Zmc2V0O1xuXG5cdFx0XHRybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKHRydWUpO1xuXHRcdFx0Y29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuXHRcdFx0b2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuXG5cdFx0XHRmdW5jdGlvbiBoYXNTaWJsaW5nVGV4dChzaWJsaW5nTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gY29udGFpbmVyW3NpYmxpbmdOYW1lXSAmJiBjb250YWluZXJbc2libGluZ05hbWVdLm5vZGVUeXBlID09IDM7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMykge1xuXHRcdFx0XHRpZiAob2Zmc2V0ID4gMCkge1xuXHRcdFx0XHRcdGh0bWwgPSBodG1sLnJlcGxhY2UoL14mbmJzcDsvLCAnICcpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFoYXNTaWJsaW5nVGV4dCgncHJldmlvdXNTaWJsaW5nJykpIHtcblx0XHRcdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC9eIC8sICcmbmJzcDsnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvZmZzZXQgPCBjb250YWluZXIubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aHRtbCA9IGh0bWwucmVwbGFjZSgvJm5ic3A7KDxicj58KSQvLCAnICcpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFoYXNTaWJsaW5nVGV4dCgnbmV4dFNpYmxpbmcnKSkge1xuXHRcdFx0XHRcdGh0bWwgPSBodG1sLnJlcGxhY2UoLygmbmJzcDt8ICkoPGJyPnwpJC8sICcmbmJzcDsnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaHRtbDtcblx0XHR9XG5cblx0XHQvLyBSZW1vdmVzICZuYnNwOyBmcm9tIGEgW2JdIGMgLT4gYSAmbmJzcDtjIC0+IGEgY1xuXHRcdGZ1bmN0aW9uIHRyaW1OYnNwQWZ0ZXJEZWxldGVBbmRQYWRkVmFsdWUoKSB7XG5cdFx0XHR2YXIgcm5nLCBjb250YWluZXIsIG9mZnNldDtcblxuXHRcdFx0cm5nID0gc2VsZWN0aW9uLmdldFJuZyh0cnVlKTtcblx0XHRcdGNvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcblx0XHRcdG9mZnNldCA9IHJuZy5zdGFydE9mZnNldDtcblxuXHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzICYmIHJuZy5jb2xsYXBzZWQpIHtcblx0XHRcdFx0aWYgKGNvbnRhaW5lci5kYXRhW29mZnNldF0gPT09ICdcXHUwMGEwJykge1xuXHRcdFx0XHRcdGNvbnRhaW5lci5kZWxldGVEYXRhKG9mZnNldCwgMSk7XG5cblx0XHRcdFx0XHRpZiAoIS9bXFx1MDBhMHwgXSQvLnRlc3QodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSArPSAnICc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRhaW5lci5kYXRhW29mZnNldCAtIDFdID09PSAnXFx1MDBhMCcpIHtcblx0XHRcdFx0XHRjb250YWluZXIuZGVsZXRlRGF0YShvZmZzZXQgLSAxLCAxKTtcblxuXHRcdFx0XHRcdGlmICghL1tcXHUwMGEwfCBdJC8udGVzdCh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHZhbHVlID0gJyAnICsgdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcmVkdWNlSW5saW5lVGV4dEVsZW1lbnRzKCkge1xuXHRcdFx0aWYgKG1lcmdlKSB7XG5cdFx0XHRcdHZhciByb290ID0gZWRpdG9yLmdldEJvZHkoKSwgZWxlbWVudFV0aWxzID0gbmV3IEVsZW1lbnRVdGlscyhkb20pO1xuXG5cdFx0XHRcdFRvb2xzLmVhY2goZG9tLnNlbGVjdCgnKltkYXRhLW1jZS1mcmFnbWVudF0nKSwgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdGZvciAodmFyIHRlc3ROb2RlID0gbm9kZS5wYXJlbnROb2RlOyB0ZXN0Tm9kZSAmJiB0ZXN0Tm9kZSAhPSByb290OyB0ZXN0Tm9kZSA9IHRlc3ROb2RlLnBhcmVudE5vZGUpIHtcblx0XHRcdFx0XHRcdGlmICh0ZXh0SW5saW5lRWxlbWVudHNbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSAmJiBlbGVtZW50VXRpbHMuY29tcGFyZSh0ZXN0Tm9kZSwgbm9kZSkpIHtcblx0XHRcdFx0XHRcdFx0ZG9tLnJlbW92ZShub2RlLCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG1hcmtGcmFnbWVudEVsZW1lbnRzKGZyYWdtZW50KSB7XG5cdFx0XHR2YXIgbm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHR3aGlsZSAoKG5vZGUgPSBub2RlLndhbGsoKSkpIHtcblx0XHRcdFx0aWYgKG5vZGUudHlwZSA9PT0gMSkge1xuXHRcdFx0XHRcdG5vZGUuYXR0cignZGF0YS1tY2UtZnJhZ21lbnQnLCAnMScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdW1hcmtGcmFnbWVudEVsZW1lbnRzKGVsbSkge1xuXHRcdFx0VG9vbHMuZWFjaChlbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSwgZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHRcdGVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLWZyYWdtZW50Jyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc1BhcnRPZkZyYWdtZW50KG5vZGUpIHtcblx0XHRcdHJldHVybiAhIW5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1mcmFnbWVudCcpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNhbkhhdmVDaGlsZHJlbihub2RlKSB7XG5cdFx0XHRyZXR1cm4gbm9kZSAmJiAhZWRpdG9yLnNjaGVtYS5nZXRTaG9ydEVuZGVkRWxlbWVudHMoKVtub2RlLm5vZGVOYW1lXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBtb3ZlU2VsZWN0aW9uVG9NYXJrZXIobWFya2VyKSB7XG5cdFx0XHR2YXIgcGFyZW50RWRpdGFibGVGYWxzZUVsbSwgcGFyZW50QmxvY2ssIG5leHRSbmc7XG5cblx0XHRcdGZ1bmN0aW9uIGdldENvbnRlbnRFZGl0YWJsZUZhbHNlUGFyZW50KG5vZGUpIHtcblx0XHRcdFx0dmFyIHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuXG5cdFx0XHRcdGZvciAoOyBub2RlICYmIG5vZGUgIT09IHJvb3Q7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUpIHtcblx0XHRcdFx0XHRpZiAoZWRpdG9yLmRvbS5nZXRDb250ZW50RWRpdGFibGUobm9kZSkgPT09ICdmYWxzZScpIHtcblx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIW1hcmtlcikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldyhtYXJrZXIpO1xuXG5cdFx0XHQvLyBJZiBtYXJrZXIgaXMgaW4gY0U9ZmFsc2UgdGhlbiBtb3ZlIHNlbGVjdGlvbiB0byB0aGF0IGVsZW1lbnQgaW5zdGVhZFxuXHRcdFx0cGFyZW50RWRpdGFibGVGYWxzZUVsbSA9IGdldENvbnRlbnRFZGl0YWJsZUZhbHNlUGFyZW50KG1hcmtlcik7XG5cdFx0XHRpZiAocGFyZW50RWRpdGFibGVGYWxzZUVsbSkge1xuXHRcdFx0XHRkb20ucmVtb3ZlKG1hcmtlcik7XG5cdFx0XHRcdHNlbGVjdGlvbi5zZWxlY3QocGFyZW50RWRpdGFibGVGYWxzZUVsbSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTW92ZSBzZWxlY3Rpb24gYmVmb3JlIG1hcmtlciBhbmQgcmVtb3ZlIGl0XG5cdFx0XHRybmcgPSBkb20uY3JlYXRlUm5nKCk7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHNpYmxpbmcgaXMgYSB0ZXh0IG5vZGUgc2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGF0IG5vZGVcblx0XHRcdG5vZGUgPSBtYXJrZXIucHJldmlvdXNTaWJsaW5nO1xuXHRcdFx0aWYgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdHJuZy5zZXRTdGFydChub2RlLCBub2RlLm5vZGVWYWx1ZS5sZW5ndGgpO1xuXG5cdFx0XHRcdC8vIFRPRE86IFdoeSBjYW4ndCB3ZSBub3JtYWxpemUgb24gSUVcblx0XHRcdFx0aWYgKCFFbnYuaWUpIHtcblx0XHRcdFx0XHRub2RlMiA9IG1hcmtlci5uZXh0U2libGluZztcblx0XHRcdFx0XHRpZiAobm9kZTIgJiYgbm9kZTIubm9kZVR5cGUgPT0gMykge1xuXHRcdFx0XHRcdFx0bm9kZS5hcHBlbmREYXRhKG5vZGUyLmRhdGEpO1xuXHRcdFx0XHRcdFx0bm9kZTIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlMik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJZiB0aGUgcHJldmlvdXMgc2libGluZyBpc24ndCBhIHRleHQgbm9kZSBvciBkb2Vzbid0IGV4aXN0IHNldCB0aGUgc2VsZWN0aW9uIGJlZm9yZSB0aGUgbWFya2VyIG5vZGVcblx0XHRcdFx0cm5nLnNldFN0YXJ0QmVmb3JlKG1hcmtlcik7XG5cdFx0XHRcdHJuZy5zZXRFbmRCZWZvcmUobWFya2VyKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZmluZE5leHRDYXJldFJuZyhybmcpIHtcblx0XHRcdFx0dmFyIGNhcmV0UG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpO1xuXHRcdFx0XHR2YXIgY2FyZXRXYWxrZXIgPSBuZXcgQ2FyZXRXYWxrZXIoZWRpdG9yLmdldEJvZHkoKSk7XG5cblx0XHRcdFx0Y2FyZXRQb3MgPSBjYXJldFdhbGtlci5uZXh0KGNhcmV0UG9zKTtcblx0XHRcdFx0aWYgKGNhcmV0UG9zKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNhcmV0UG9zLnRvUmFuZ2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgdGhlIG1hcmtlciBub2RlIGFuZCBzZXQgdGhlIG5ldyByYW5nZVxuXHRcdFx0cGFyZW50QmxvY2sgPSBkb20uZ2V0UGFyZW50KG1hcmtlciwgZG9tLmlzQmxvY2spO1xuXHRcdFx0ZG9tLnJlbW92ZShtYXJrZXIpO1xuXG5cdFx0XHRpZiAocGFyZW50QmxvY2sgJiYgZG9tLmlzRW1wdHkocGFyZW50QmxvY2spKSB7XG5cdFx0XHRcdGVkaXRvci4kKHBhcmVudEJsb2NrKS5lbXB0eSgpO1xuXG5cdFx0XHRcdHJuZy5zZXRTdGFydChwYXJlbnRCbG9jaywgMCk7XG5cdFx0XHRcdHJuZy5zZXRFbmQocGFyZW50QmxvY2ssIDApO1xuXG5cdFx0XHRcdGlmICghaXNUYWJsZUNlbGwocGFyZW50QmxvY2spICYmICFpc1BhcnRPZkZyYWdtZW50KHBhcmVudEJsb2NrKSAmJiAobmV4dFJuZyA9IGZpbmROZXh0Q2FyZXRSbmcocm5nKSkpIHtcblx0XHRcdFx0XHRybmcgPSBuZXh0Um5nO1xuXHRcdFx0XHRcdGRvbS5yZW1vdmUocGFyZW50QmxvY2spO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRvbS5hZGQocGFyZW50QmxvY2ssIGRvbS5jcmVhdGUoJ2JyJywgeydkYXRhLW1jZS1ib2d1cyc6ICcxJ30pKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZm9yIHdoaXRlc3BhY2UgYmVmb3JlL2FmdGVyIHZhbHVlXG5cdFx0aWYgKC9eIHwgJC8udGVzdCh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlID0gdHJpbU9yUGFkZExlZnRSaWdodCh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0dXAgcGFyc2VyIGFuZCBzZXJpYWxpemVyXG5cdFx0cGFyc2VyID0gZWRpdG9yLnBhcnNlcjtcblx0XHRtZXJnZSA9IGRldGFpbHMubWVyZ2U7XG5cblx0XHRzZXJpYWxpemVyID0gbmV3IFNlcmlhbGl6ZXIoe1xuXHRcdFx0dmFsaWRhdGU6IGVkaXRvci5zZXR0aW5ncy52YWxpZGF0ZVxuXHRcdH0sIGVkaXRvci5zY2hlbWEpO1xuXHRcdGJvb2ttYXJrSHRtbCA9ICc8c3BhbiBpZD1cIm1jZV9tYXJrZXJcIiBkYXRhLW1jZS10eXBlPVwiYm9va21hcmtcIj4mI3hGRUZGOyYjeDIwMEI7PC9zcGFuPic7XG5cblx0XHQvLyBSdW4gYmVmb3JlU2V0Q29udGVudCBoYW5kbGVycyBvbiB0aGUgSFRNTCB0byBiZSBpbnNlcnRlZFxuXHRcdGFyZ3MgPSB7Y29udGVudDogdmFsdWUsIGZvcm1hdDogJ2h0bWwnLCBzZWxlY3Rpb246IHRydWV9O1xuXHRcdGVkaXRvci5maXJlKCdCZWZvcmVTZXRDb250ZW50JywgYXJncyk7XG5cdFx0dmFsdWUgPSBhcmdzLmNvbnRlbnQ7XG5cblx0XHQvLyBBZGQgY2FyZXQgYXQgZW5kIG9mIGNvbnRlbnRzIGlmIGl0J3MgbWlzc2luZ1xuXHRcdGlmICh2YWx1ZS5pbmRleE9mKCd7JGNhcmV0fScpID09IC0xKSB7XG5cdFx0XHR2YWx1ZSArPSAneyRjYXJldH0nO1xuXHRcdH1cblxuXHRcdC8vIFJlcGxhY2UgdGhlIGNhcmV0IG1hcmtlciB3aXRoIGEgc3BhbiBib29rbWFyayBlbGVtZW50XG5cdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXHtcXCRjYXJldFxcfS8sIGJvb2ttYXJrSHRtbCk7XG5cblx0XHQvLyBJZiBzZWxlY3Rpb24gaXMgYXQgPGJvZHk+fDxwPjwvcD4gdGhlbiBtb3ZlIGl0IGludG8gPGJvZHk+PHA+fDwvcD5cblx0XHRybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG5cdFx0dmFyIGNhcmV0RWxlbWVudCA9IHJuZy5zdGFydENvbnRhaW5lciB8fCAocm5nLnBhcmVudEVsZW1lbnQgPyBybmcucGFyZW50RWxlbWVudCgpIDogbnVsbCk7XG5cdFx0dmFyIGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuXHRcdGlmIChjYXJldEVsZW1lbnQgPT09IGJvZHkgJiYgc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcblx0XHRcdGlmIChkb20uaXNCbG9jayhib2R5LmZpcnN0Q2hpbGQpICYmIGNhbkhhdmVDaGlsZHJlbihib2R5LmZpcnN0Q2hpbGQpICYmIGRvbS5pc0VtcHR5KGJvZHkuZmlyc3RDaGlsZCkpIHtcblx0XHRcdFx0cm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuXHRcdFx0XHRybmcuc2V0U3RhcnQoYm9keS5maXJzdENoaWxkLCAwKTtcblx0XHRcdFx0cm5nLnNldEVuZChib2R5LmZpcnN0Q2hpbGQsIDApO1xuXHRcdFx0XHRzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW5zZXJ0IG5vZGUgbWFrZXIgd2hlcmUgd2Ugd2lsbCBpbnNlcnQgdGhlIG5ldyBIVE1MIGFuZCBnZXQgaXQncyBwYXJlbnRcblx0XHRpZiAoIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKSB7XG5cdFx0XHQvLyBGaXggZm9yICMyNTk1IHNlZW1zIHRoYXQgZGVsZXRlIHJlbW92ZXMgb25lIGV4dHJhIGNoYXJhY3RlciBvblxuXHRcdFx0Ly8gV2ViS2l0IGZvciBzb21lIG9kZCByZWFzb24gaWYgeW91IGRvdWJsZSBjbGljayBzZWxlY3QgYSB3b3JkXG5cdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKTtcblx0XHRcdGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZCgnRGVsZXRlJywgZmFsc2UsIG51bGwpO1xuXHRcdFx0dHJpbU5ic3BBZnRlckRlbGV0ZUFuZFBhZGRWYWx1ZSgpO1xuXHRcdH1cblxuXHRcdHBhcmVudE5vZGUgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuXG5cdFx0Ly8gUGFyc2UgdGhlIGZyYWdtZW50IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgcGFyZW50IG5vZGVcblx0XHR2YXIgcGFyc2VyQXJncyA9IHtjb250ZXh0OiBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIGRhdGE6IGRldGFpbHMuZGF0YX07XG5cdFx0ZnJhZ21lbnQgPSBwYXJzZXIucGFyc2UodmFsdWUsIHBhcnNlckFyZ3MpO1xuXG5cdFx0Ly8gQ3VzdG9tIGhhbmRsaW5nIG9mIGxpc3RzXG5cdFx0aWYgKGRldGFpbHMucGFzdGUgPT09IHRydWUgJiYgSW5zZXJ0TGlzdC5pc0xpc3RGcmFnbWVudChmcmFnbWVudCkgJiYgSW5zZXJ0TGlzdC5pc1BhcmVudEJsb2NrTGkoZG9tLCBwYXJlbnROb2RlKSkge1xuXHRcdFx0cm5nID0gSW5zZXJ0TGlzdC5pbnNlcnRBdENhcmV0KHNlcmlhbGl6ZXIsIGRvbSwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcodHJ1ZSksIGZyYWdtZW50KTtcblx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0XHRlZGl0b3IuZmlyZSgnU2V0Q29udGVudCcsIGFyZ3MpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG1hcmtGcmFnbWVudEVsZW1lbnRzKGZyYWdtZW50KTtcblxuXHRcdC8vIE1vdmUgdGhlIGNhcmV0IHRvIGEgbW9yZSBzdWl0YWJsZSBsb2NhdGlvblxuXHRcdG5vZGUgPSBmcmFnbWVudC5sYXN0Q2hpbGQ7XG5cdFx0aWYgKG5vZGUuYXR0cignaWQnKSA9PSAnbWNlX21hcmtlcicpIHtcblx0XHRcdG1hcmtlciA9IG5vZGU7XG5cblx0XHRcdGZvciAobm9kZSA9IG5vZGUucHJldjsgbm9kZTsgbm9kZSA9IG5vZGUud2Fsayh0cnVlKSkge1xuXHRcdFx0XHRpZiAobm9kZS50eXBlID09IDMgfHwgIWRvbS5pc0Jsb2NrKG5vZGUubmFtZSkpIHtcblx0XHRcdFx0XHRpZiAoZWRpdG9yLnNjaGVtYS5pc1ZhbGlkQ2hpbGQobm9kZS5wYXJlbnQubmFtZSwgJ3NwYW4nKSkge1xuXHRcdFx0XHRcdFx0bm9kZS5wYXJlbnQuaW5zZXJ0KG1hcmtlciwgbm9kZSwgbm9kZS5uYW1lID09PSAnYnInKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRlZGl0b3IuX3NlbGVjdGlvbk92ZXJyaWRlcy5zaG93QmxvY2tDYXJldENvbnRhaW5lcihwYXJlbnROb2RlKTtcblxuXHRcdC8vIElmIHBhcnNlciBzYXlzIHZhbGlkIHdlIGNhbiBpbnNlcnQgdGhlIGNvbnRlbnRzIGludG8gdGhhdCBwYXJlbnRcblx0XHRpZiAoIXBhcnNlckFyZ3MuaW52YWxpZCkge1xuXHRcdFx0dmFsdWUgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShmcmFnbWVudCk7XG5cdFx0XHR2YWxpZEluc2VydGlvbihlZGl0b3IsIHZhbHVlLCBwYXJlbnROb2RlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgdGhlIGZyYWdtZW50IHdhcyBpbnZhbGlkIHdpdGhpbiB0aGF0IGNvbnRleHQgdGhlbiB3ZSBuZWVkXG5cdFx0XHQvLyB0byBwYXJzZSBhbmQgcHJvY2VzcyB0aGUgcGFyZW50IGl0J3MgaW5zZXJ0ZWQgaW50b1xuXG5cdFx0XHQvLyBJbnNlcnQgYm9va21hcmsgbm9kZSBhbmQgZ2V0IHRoZSBwYXJlbnRcblx0XHRcdHNlbGVjdGlvbi5zZXRDb250ZW50KGJvb2ttYXJrSHRtbCk7XG5cdFx0XHRwYXJlbnROb2RlID0gc2VsZWN0aW9uLmdldE5vZGUoKTtcblx0XHRcdHJvb3ROb2RlID0gZWRpdG9yLmdldEJvZHkoKTtcblxuXHRcdFx0Ly8gT3BlcmEgd2lsbCByZXR1cm4gdGhlIGRvY3VtZW50IG5vZGUgd2hlbiBzZWxlY3Rpb24gaXMgaW4gcm9vdFxuXHRcdFx0aWYgKHBhcmVudE5vZGUubm9kZVR5cGUgPT0gOSkge1xuXHRcdFx0XHRwYXJlbnROb2RlID0gbm9kZSA9IHJvb3ROb2RlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bm9kZSA9IHBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZpbmQgdGhlIGFuY2VzdG9yIGp1c3QgYmVmb3JlIHRoZSByb290IGVsZW1lbnRcblx0XHRcdHdoaWxlIChub2RlICE9PSByb290Tm9kZSkge1xuXHRcdFx0XHRwYXJlbnROb2RlID0gbm9kZTtcblx0XHRcdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gR2V0IHRoZSBvdXRlci9pbm5lciBIVE1MIGRlcGVuZGluZyBvbiBpZiB3ZSBhcmUgaW4gdGhlIHJvb3QgYW5kIHBhcnNlciBhbmQgc2VyaWFsaXplIHRoYXRcblx0XHRcdHZhbHVlID0gcGFyZW50Tm9kZSA9PSByb290Tm9kZSA/IHJvb3ROb2RlLmlubmVySFRNTCA6IGRvbS5nZXRPdXRlckhUTUwocGFyZW50Tm9kZSk7XG5cdFx0XHR2YWx1ZSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKFxuXHRcdFx0XHRwYXJzZXIucGFyc2UoXG5cdFx0XHRcdFx0Ly8gTmVlZCB0byByZXBsYWNlIGJ5IHVzaW5nIGEgZnVuY3Rpb24gc2luY2UgJCBpbiB0aGUgY29udGVudHMgd291bGQgb3RoZXJ3aXNlIGJlIGEgcHJvYmxlbVxuXHRcdFx0XHRcdHZhbHVlLnJlcGxhY2UoLzxzcGFuIChpZD1cIm1jZV9tYXJrZXJcInxpZD1tY2VfbWFya2VyKS4rPzxcXC9zcGFuPi9pLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZShmcmFnbWVudCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBpbm5lci9vdXRlciBIVE1MIGRlcGVuZGluZyBvbiBpZiB3ZSBhcmUgaW4gdGhlIHJvb3Qgb3Igbm90XG5cdFx0XHRpZiAocGFyZW50Tm9kZSA9PSByb290Tm9kZSkge1xuXHRcdFx0XHRkb20uc2V0SFRNTChyb290Tm9kZSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9tLnNldE91dGVySFRNTChwYXJlbnROb2RlLCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVkdWNlSW5saW5lVGV4dEVsZW1lbnRzKCk7XG5cdFx0bW92ZVNlbGVjdGlvblRvTWFya2VyKGRvbS5nZXQoJ21jZV9tYXJrZXInKSk7XG5cdFx0dW1hcmtGcmFnbWVudEVsZW1lbnRzKGVkaXRvci5nZXRCb2R5KCkpO1xuXHRcdGVkaXRvci5maXJlKCdTZXRDb250ZW50JywgYXJncyk7XG5cdFx0ZWRpdG9yLmFkZFZpc3VhbCgpO1xuXHR9O1xuXG5cdHZhciBwcm9jZXNzVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHR2YXIgZGV0YWlscztcblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRkZXRhaWxzID0gVG9vbHMuZXh0ZW5kKHtcblx0XHRcdFx0cGFzdGU6IHZhbHVlLnBhc3RlLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0cGFzdGU6IHZhbHVlLnBhc3RlXG5cdFx0XHRcdH1cblx0XHRcdH0sIHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGVudDogdmFsdWUuY29udGVudCxcblx0XHRcdFx0ZGV0YWlsczogZGV0YWlsc1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y29udGVudDogdmFsdWUsXG5cdFx0XHRkZXRhaWxzOiB7fVxuXHRcdH07XG5cdH07XG5cblx0dmFyIGluc2VydEF0Q2FyZXQgPSBmdW5jdGlvbiAoZWRpdG9yLCB2YWx1ZSkge1xuXHRcdHZhciByZXN1bHQgPSBwcm9jZXNzVmFsdWUodmFsdWUpO1xuXHRcdGluc2VydEh0bWxBdENhcmV0KGVkaXRvciwgcmVzdWx0LmNvbnRlbnQsIHJlc3VsdC5kZXRhaWxzKTtcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGluc2VydEF0Q2FyZXQ6IGluc2VydEF0Q2FyZXRcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvRWRpdG9yQ29tbWFuZHMuanNcblxuLyoqXG4gKiBFZGl0b3JDb21tYW5kcy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgZW5hYmxlcyB5b3UgdG8gYWRkIGN1c3RvbSBlZGl0b3IgY29tbWFuZHMgYW5kIGl0IGNvbnRhaW5zXG4gKiBvdmVycmlkZXMgZm9yIG5hdGl2ZSBicm93c2VyIGNvbW1hbmRzIHRvIGFkZHJlc3MgdmFyaW91cyBidWdzIGFuZCBpc3N1ZXMuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuRWRpdG9yQ29tbWFuZHNcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9FZGl0b3JDb21tYW5kc1wiLCBbXG5cdFwidGlueW1jZS9FbnZcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL2RvbS9SYW5nZVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vVHJlZVdhbGtlclwiLFxuXHRcInRpbnltY2UvSW5zZXJ0Q29udGVudFwiLFxuXHRcInRpbnltY2UvZG9tL05vZGVUeXBlXCJcbl0sIGZ1bmN0aW9uKEVudiwgVG9vbHMsIFJhbmdlVXRpbHMsIFRyZWVXYWxrZXIsIEluc2VydENvbnRlbnQsIE5vZGVUeXBlKSB7XG5cdC8vIEFkZGVkIGZvciBjb21wcmVzc2lvbiBwdXJwb3Nlc1xuXHR2YXIgZWFjaCA9IFRvb2xzLmVhY2gsIGV4dGVuZCA9IFRvb2xzLmV4dGVuZDtcblx0dmFyIG1hcCA9IFRvb2xzLm1hcCwgaW5BcnJheSA9IFRvb2xzLmluQXJyYXksIGV4cGxvZGUgPSBUb29scy5leHBsb2RlO1xuXHR2YXIgaXNPbGRJRSA9IEVudi5pZSAmJiBFbnYuaWUgPCAxMTtcblx0dmFyIFRSVUUgPSB0cnVlLCBGQUxTRSA9IGZhbHNlO1xuXG5cdHJldHVybiBmdW5jdGlvbihlZGl0b3IpIHtcblx0XHR2YXIgZG9tLCBzZWxlY3Rpb24sIGZvcm1hdHRlcixcblx0XHRcdGNvbW1hbmRzID0ge3N0YXRlOiB7fSwgZXhlYzoge30sIHZhbHVlOiB7fX0sXG5cdFx0XHRzZXR0aW5ncyA9IGVkaXRvci5zZXR0aW5ncyxcblx0XHRcdGJvb2ttYXJrO1xuXG5cdFx0ZWRpdG9yLm9uKCdQcmVJbml0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRkb20gPSBlZGl0b3IuZG9tO1xuXHRcdFx0c2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcblx0XHRcdHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzO1xuXHRcdFx0Zm9ybWF0dGVyID0gZWRpdG9yLmZvcm1hdHRlcjtcblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqIEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgY29tbWFuZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZXhlY0NvbW1hbmRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZCBDb21tYW5kIHRvIGV4ZWN1dGUuXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSB1aSBPcHRpb25hbCB1c2VyIGludGVyZmFjZSBzdGF0ZS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgT3B0aW9uYWwgdmFsdWUgZm9yIGNvbW1hbmQuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgT3B0aW9uYWwgZXh0cmEgYXJndW1lbnRzIHRvIHRoZSBleGVjQ29tbWFuZC5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBjb21tYW5kIHdhcyBmb3VuZCBvciBub3QuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZXhlY0NvbW1hbmQoY29tbWFuZCwgdWksIHZhbHVlLCBhcmdzKSB7XG5cdFx0XHR2YXIgZnVuYywgY3VzdG9tQ29tbWFuZCwgc3RhdGUgPSAwO1xuXG5cdFx0XHRpZiAoIS9eKG1jZUFkZFVuZG9MZXZlbHxtY2VFbmRVbmRvTGV2ZWx8bWNlQmVnaW5VbmRvTGV2ZWx8bWNlUmVwYWludCkkLy50ZXN0KGNvbW1hbmQpICYmICghYXJncyB8fCAhYXJncy5za2lwX2ZvY3VzKSkge1xuXHRcdFx0XHRlZGl0b3IuZm9jdXMoKTtcblx0XHRcdH1cblxuXHRcdFx0YXJncyA9IGVkaXRvci5maXJlKCdCZWZvcmVFeGVjQ29tbWFuZCcsIHtjb21tYW5kOiBjb21tYW5kLCB1aTogdWksIHZhbHVlOiB2YWx1ZX0pO1xuXHRcdFx0aWYgKGFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXN0b21Db21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0aWYgKChmdW5jID0gY29tbWFuZHMuZXhlY1tjdXN0b21Db21tYW5kXSkpIHtcblx0XHRcdFx0ZnVuYyhjdXN0b21Db21tYW5kLCB1aSwgdmFsdWUpO1xuXHRcdFx0XHRlZGl0b3IuZmlyZSgnRXhlY0NvbW1hbmQnLCB7Y29tbWFuZDogY29tbWFuZCwgdWk6IHVpLCB2YWx1ZTogdmFsdWV9KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBsdWdpbiBjb21tYW5kc1xuXHRcdFx0ZWFjaChlZGl0b3IucGx1Z2lucywgZnVuY3Rpb24ocCkge1xuXHRcdFx0XHRpZiAocC5leGVjQ29tbWFuZCAmJiBwLmV4ZWNDb21tYW5kKGNvbW1hbmQsIHVpLCB2YWx1ZSkpIHtcblx0XHRcdFx0XHRlZGl0b3IuZmlyZSgnRXhlY0NvbW1hbmQnLCB7Y29tbWFuZDogY29tbWFuZCwgdWk6IHVpLCB2YWx1ZTogdmFsdWV9KTtcblx0XHRcdFx0XHRzdGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKHN0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlbWUgY29tbWFuZHNcblx0XHRcdGlmIChlZGl0b3IudGhlbWUgJiYgZWRpdG9yLnRoZW1lLmV4ZWNDb21tYW5kICYmIGVkaXRvci50aGVtZS5leGVjQ29tbWFuZChjb21tYW5kLCB1aSwgdmFsdWUpKSB7XG5cdFx0XHRcdGVkaXRvci5maXJlKCdFeGVjQ29tbWFuZCcsIHtjb21tYW5kOiBjb21tYW5kLCB1aTogdWksIHZhbHVlOiB2YWx1ZX0pO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnJvd3NlciBjb21tYW5kc1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RhdGUgPSBlZGl0b3IuZ2V0RG9jKCkuZXhlY0NvbW1hbmQoY29tbWFuZCwgdWksIHZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdC8vIElnbm9yZSBvbGQgSUUgZXJyb3JzXG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0XHRlZGl0b3IuZmlyZSgnRXhlY0NvbW1hbmQnLCB7Y29tbWFuZDogY29tbWFuZCwgdWk6IHVpLCB2YWx1ZTogdmFsdWV9KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhIGNvbW1hbmQgZm9yIGV4YW1wbGUgaWYgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIFwiYm9sZFwiLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBxdWVyeUNvbW1hbmRTdGF0ZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIENvbW1hbmQgdG8gY2hlY2sgdGhlIHN0YXRlIG9mLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW4vTnVtYmVyfSB0cnVlL2ZhbHNlIGlmIHRoZSBzZWxlY3RlZCBjb250ZW50cyBpcyBib2xkIG9yIG5vdCwgLTEgaWYgaXQncyBub3QgZm91bmQuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gcXVlcnlDb21tYW5kU3RhdGUoY29tbWFuZCkge1xuXHRcdFx0dmFyIGZ1bmM7XG5cblx0XHRcdC8vIElzIGhpZGRlbiB0aGVuIHJldHVybiB1bmRlZmluZWRcblx0XHRcdGlmIChlZGl0b3IucXVpcmtzLmlzSGlkZGVuKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0aWYgKChmdW5jID0gY29tbWFuZHMuc3RhdGVbY29tbWFuZF0pKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jKGNvbW1hbmQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCcm93c2VyIGNvbW1hbmRzXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gZWRpdG9yLmdldERvYygpLnF1ZXJ5Q29tbWFuZFN0YXRlKGNvbW1hbmQpO1xuXHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0Ly8gRmFpbHMgc29tZXRpbWVzIHNlZSBidWc6IDE4OTY1Nzdcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFF1ZXJpZXMgdGhlIGNvbW1hbmQgdmFsdWUgZm9yIGV4YW1wbGUgdGhlIGN1cnJlbnQgZm9udHNpemUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHF1ZXJ5Q29tbWFuZFZhbHVlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNvbW1hbmQgQ29tbWFuZCB0byBjaGVjayB0aGUgdmFsdWUgb2YuXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBDb21tYW5kIHZhbHVlIG9mIGZhbHNlIGlmIGl0J3Mgbm90IGZvdW5kLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHF1ZXJ5Q29tbWFuZFZhbHVlKGNvbW1hbmQpIHtcblx0XHRcdHZhciBmdW5jO1xuXG5cdFx0XHQvLyBJcyBoaWRkZW4gdGhlbiByZXR1cm4gdW5kZWZpbmVkXG5cdFx0XHRpZiAoZWRpdG9yLnF1aXJrcy5pc0hpZGRlbigpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tbWFuZCA9IGNvbW1hbmQudG9Mb3dlckNhc2UoKTtcblx0XHRcdGlmICgoZnVuYyA9IGNvbW1hbmRzLnZhbHVlW2NvbW1hbmRdKSkge1xuXHRcdFx0XHRyZXR1cm4gZnVuYyhjb21tYW5kKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnJvd3NlciBjb21tYW5kc1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGVkaXRvci5nZXREb2MoKS5xdWVyeUNvbW1hbmRWYWx1ZShjb21tYW5kKTtcblx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdC8vIEZhaWxzIHNvbWV0aW1lcyBzZWUgYnVnOiAxODk2NTc3XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBjb21tYW5kcyB0byB0aGUgY29tbWFuZCBjb2xsZWN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRDb21tYW5kc1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBjb21tYW5kX2xpc3QgTmFtZS92YWx1ZSBjb2xsZWN0aW9uIHdpdGggY29tbWFuZHMgdG8gYWRkLCB0aGUgbmFtZXMgY2FuIGFsc28gYmUgY29tbWEgc2VwYXJhdGVkLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIE9wdGlvbmFsIHR5cGUgdG8gYWRkLCBkZWZhdWx0cyB0byBleGVjLiBDYW4gYmUgdmFsdWUgb3Igc3RhdGUgYXMgd2VsbC5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBhZGRDb21tYW5kcyhjb21tYW5kX2xpc3QsIHR5cGUpIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8ICdleGVjJztcblxuXHRcdFx0ZWFjaChjb21tYW5kX2xpc3QsIGZ1bmN0aW9uKGNhbGxiYWNrLCBjb21tYW5kKSB7XG5cdFx0XHRcdGVhY2goY29tbWFuZC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJyksIGZ1bmN0aW9uKGNvbW1hbmQpIHtcblx0XHRcdFx0XHRjb21tYW5kc1t0eXBlXVtjb21tYW5kXSA9IGNhbGxiYWNrO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFkZENvbW1hbmQoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG5cdFx0XHRjb21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0Y29tbWFuZHMuZXhlY1tjb21tYW5kXSA9IGZ1bmN0aW9uKGNvbW1hbmQsIHVpLCB2YWx1ZSwgYXJncykge1xuXHRcdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbChzY29wZSB8fCBlZGl0b3IsIHVpLCB2YWx1ZSwgYXJncyk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgY29tbWFuZCBpcyBzdXBwb3J0ZWQgb3Igbm90LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBxdWVyeUNvbW1hbmRTdXBwb3J0ZWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZCBDb21tYW5kIHRoYXQgd2UgY2hlY2sgc3VwcG9ydCBmb3IuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZSBpZiB0aGUgY29tbWFuZCBpcyBzdXBwb3J0ZWQgb3Igbm90LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChjb21tYW5kKSB7XG5cdFx0XHRjb21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoY29tbWFuZHMuZXhlY1tjb21tYW5kXSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnJvd3NlciBjb21tYW5kc1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGVkaXRvci5nZXREb2MoKS5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoY29tbWFuZCk7XG5cdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHQvLyBGYWlscyBzb21ldGltZXMgc2VlIGJ1ZzogMTg5NjU3N1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWRkUXVlcnlTdGF0ZUhhbmRsZXIoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG5cdFx0XHRjb21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0Y29tbWFuZHMuc3RhdGVbY29tbWFuZF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoc2NvcGUgfHwgZWRpdG9yKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYWRkUXVlcnlWYWx1ZUhhbmRsZXIoY29tbWFuZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG5cdFx0XHRjb21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0Y29tbWFuZHMudmFsdWVbY29tbWFuZF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoc2NvcGUgfHwgZWRpdG9yKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFzQ3VzdG9tQ29tbWFuZChjb21tYW5kKSB7XG5cdFx0XHRjb21tYW5kID0gY29tbWFuZC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICEhY29tbWFuZHMuZXhlY1tjb21tYW5kXTtcblx0XHR9XG5cblx0XHQvLyBFeHBvc2UgcHVibGljIG1ldGhvZHNcblx0XHRleHRlbmQodGhpcywge1xuXHRcdFx0ZXhlY0NvbW1hbmQ6IGV4ZWNDb21tYW5kLFxuXHRcdFx0cXVlcnlDb21tYW5kU3RhdGU6IHF1ZXJ5Q29tbWFuZFN0YXRlLFxuXHRcdFx0cXVlcnlDb21tYW5kVmFsdWU6IHF1ZXJ5Q29tbWFuZFZhbHVlLFxuXHRcdFx0cXVlcnlDb21tYW5kU3VwcG9ydGVkOiBxdWVyeUNvbW1hbmRTdXBwb3J0ZWQsXG5cdFx0XHRhZGRDb21tYW5kczogYWRkQ29tbWFuZHMsXG5cdFx0XHRhZGRDb21tYW5kOiBhZGRDb21tYW5kLFxuXHRcdFx0YWRkUXVlcnlTdGF0ZUhhbmRsZXI6IGFkZFF1ZXJ5U3RhdGVIYW5kbGVyLFxuXHRcdFx0YWRkUXVlcnlWYWx1ZUhhbmRsZXI6IGFkZFF1ZXJ5VmFsdWVIYW5kbGVyLFxuXHRcdFx0aGFzQ3VzdG9tQ29tbWFuZDogaGFzQ3VzdG9tQ29tbWFuZFxuXHRcdH0pO1xuXG5cdFx0Ly8gUHJpdmF0ZSBtZXRob2RzXG5cblx0XHRmdW5jdGlvbiBleGVjTmF0aXZlQ29tbWFuZChjb21tYW5kLCB1aSwgdmFsdWUpIHtcblx0XHRcdGlmICh1aSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHVpID0gRkFMU0U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhbHVlID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZChjb21tYW5kLCB1aSwgdmFsdWUpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzRm9ybWF0TWF0Y2gobmFtZSkge1xuXHRcdFx0cmV0dXJuIGZvcm1hdHRlci5tYXRjaChuYW1lKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB0b2dnbGVGb3JtYXQobmFtZSwgdmFsdWUpIHtcblx0XHRcdGZvcm1hdHRlci50b2dnbGUobmFtZSwgdmFsdWUgPyB7dmFsdWU6IHZhbHVlfSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRlZGl0b3Iubm9kZUNoYW5nZWQoKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdG9yZVNlbGVjdGlvbih0eXBlKSB7XG5cdFx0XHRib29rbWFyayA9IHNlbGVjdGlvbi5nZXRCb29rbWFyayh0eXBlKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKCkge1xuXHRcdFx0c2VsZWN0aW9uLm1vdmVUb0Jvb2ttYXJrKGJvb2ttYXJrKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgZXhlY0NvbW1hbmQgb3ZlcnJpZGVzXG5cdFx0YWRkQ29tbWFuZHMoe1xuXHRcdFx0Ly8gSWdub3JlIHRoZXNlLCBhZGRlZCBmb3IgY29tcGF0aWJpbGl0eVxuXHRcdFx0J21jZVJlc2V0RGVzaWduTW9kZSxtY2VCZWdpblVuZG9MZXZlbCc6IGZ1bmN0aW9uKCkge30sXG5cblx0XHRcdC8vIEFkZCB1bmRvIG1hbmFnZXIgbG9naWNcblx0XHRcdCdtY2VFbmRVbmRvTGV2ZWwsbWNlQWRkVW5kb0xldmVsJzogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGVkaXRvci51bmRvTWFuYWdlci5hZGQoKTtcblx0XHRcdH0sXG5cblx0XHRcdCdDdXQsQ29weSxQYXN0ZSc6IGZ1bmN0aW9uKGNvbW1hbmQpIHtcblx0XHRcdFx0dmFyIGRvYyA9IGVkaXRvci5nZXREb2MoKSwgZmFpbGVkO1xuXG5cdFx0XHRcdC8vIFRyeSBleGVjdXRpbmcgdGhlIG5hdGl2ZSBjb21tYW5kXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZXhlY05hdGl2ZUNvbW1hbmQoY29tbWFuZCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0Ly8gQ29tbWFuZCBmYWlsZWRcblx0XHRcdFx0XHRmYWlsZWQgPSBUUlVFO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hyb21lIHJlcG9ydHMgdGhlIHBhc3RlIGNvbW1hbmQgYXMgc3VwcG9ydGVkIGhvd2V2ZXIgb2xkZXIgSUU6cyB3aWxsIHJldHVybiBmYWxzZSBmb3IgY3V0L3Bhc3RlXG5cdFx0XHRcdGlmIChjb21tYW5kID09PSAncGFzdGUnICYmICFkb2MucXVlcnlDb21tYW5kRW5hYmxlZChjb21tYW5kKSkge1xuXHRcdFx0XHRcdGZhaWxlZCA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcmVzZW50IGFsZXJ0IG1lc3NhZ2UgYWJvdXQgY2xpcGJvYXJkIGFjY2VzcyBub3QgYmVpbmcgYXZhaWxhYmxlXG5cdFx0XHRcdGlmIChmYWlsZWQgfHwgIWRvYy5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoY29tbWFuZCkpIHtcblx0XHRcdFx0XHR2YXIgbXNnID0gZWRpdG9yLnRyYW5zbGF0ZShcblx0XHRcdFx0XHRcdFwiWW91ciBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBjbGlwYm9hcmQuIFwiICtcblx0XHRcdFx0XHRcdFwiUGxlYXNlIHVzZSB0aGUgQ3RybCtYL0MvViBrZXlib2FyZCBzaG9ydGN1dHMgaW5zdGVhZC5cIlxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAoRW52Lm1hYykge1xuXHRcdFx0XHRcdFx0bXNnID0gbXNnLnJlcGxhY2UoL0N0cmxcXCsvZywgJ1xcdTIzMTgrJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWRpdG9yLm5vdGlmaWNhdGlvbk1hbmFnZXIub3Blbih7dGV4dDogbXNnLCB0eXBlOiAnZXJyb3InfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8vIE92ZXJyaWRlIHVubGluayBjb21tYW5kXG5cdFx0XHR1bmxpbms6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkpIHtcblx0XHRcdFx0XHR2YXIgZWxtID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQoZWRpdG9yLnNlbGVjdGlvbi5nZXRTdGFydCgpLCAnYScpO1xuXHRcdFx0XHRcdGlmIChlbG0pIHtcblx0XHRcdFx0XHRcdGVkaXRvci5kb20ucmVtb3ZlKGVsbSwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9ybWF0dGVyLnJlbW92ZShcImxpbmtcIik7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBPdmVycmlkZSBqdXN0aWZ5IGNvbW1hbmRzIHRvIHVzZSB0aGUgdGV4dCBmb3JtYXR0ZXIgZW5naW5lXG5cdFx0XHQnSnVzdGlmeUxlZnQsSnVzdGlmeUNlbnRlcixKdXN0aWZ5UmlnaHQsSnVzdGlmeUZ1bGwsSnVzdGlmeU5vbmUnOiBmdW5jdGlvbihjb21tYW5kKSB7XG5cdFx0XHRcdHZhciBhbGlnbiA9IGNvbW1hbmQuc3Vic3RyaW5nKDcpO1xuXG5cdFx0XHRcdGlmIChhbGlnbiA9PSAnZnVsbCcpIHtcblx0XHRcdFx0XHRhbGlnbiA9ICdqdXN0aWZ5Jztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbGwgb3RoZXIgYWxpZ25tZW50cyBmaXJzdFxuXHRcdFx0XHRlYWNoKCdsZWZ0LGNlbnRlcixyaWdodCxqdXN0aWZ5Jy5zcGxpdCgnLCcpLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRcdFx0aWYgKGFsaWduICE9IG5hbWUpIHtcblx0XHRcdFx0XHRcdGZvcm1hdHRlci5yZW1vdmUoJ2FsaWduJyArIG5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGFsaWduICE9ICdub25lJykge1xuXHRcdFx0XHRcdHRvZ2dsZUZvcm1hdCgnYWxpZ24nICsgYWxpZ24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBPdmVycmlkZSBsaXN0IGNvbW1hbmRzIHRvIGZpeCBXZWJLaXQgYnVnXG5cdFx0XHQnSW5zZXJ0VW5vcmRlcmVkTGlzdCxJbnNlcnRPcmRlcmVkTGlzdCc6IGZ1bmN0aW9uKGNvbW1hbmQpIHtcblx0XHRcdFx0dmFyIGxpc3RFbG0sIGxpc3RQYXJlbnQ7XG5cblx0XHRcdFx0ZXhlY05hdGl2ZUNvbW1hbmQoY29tbWFuZCk7XG5cblx0XHRcdFx0Ly8gV2ViS2l0IHByb2R1Y2VzIGxpc3RzIHdpdGhpbiBibG9jayBlbGVtZW50cyBzbyB3ZSBuZWVkIHRvIHNwbGl0IHRoZW1cblx0XHRcdFx0Ly8gd2Ugd2lsbCByZXBsYWNlIHRoZSBuYXRpdmUgbGlzdCBjcmVhdGlvbiBsb2dpYyB0byBjdXN0b20gbG9naWMgbGF0ZXIgb25cblx0XHRcdFx0Ly8gVE9ETzogUmVtb3ZlIHRoaXMgd2hlbiB0aGUgbGlzdCBjcmVhdGlvbiBsb2dpYyBpcyByZW1vdmVkXG5cdFx0XHRcdGxpc3RFbG0gPSBkb20uZ2V0UGFyZW50KHNlbGVjdGlvbi5nZXROb2RlKCksICdvbCx1bCcpO1xuXHRcdFx0XHRpZiAobGlzdEVsbSkge1xuXHRcdFx0XHRcdGxpc3RQYXJlbnQgPSBsaXN0RWxtLnBhcmVudE5vZGU7XG5cblx0XHRcdFx0XHQvLyBJZiBsaXN0IGlzIHdpdGhpbiBhIHRleHQgYmxvY2sgdGhlbiBzcGxpdCB0aGF0IGJsb2NrXG5cdFx0XHRcdFx0aWYgKC9eKEhbMS02XXxQfEFERFJFU1N8UFJFKSQvLnRlc3QobGlzdFBhcmVudC5ub2RlTmFtZSkpIHtcblx0XHRcdFx0XHRcdHN0b3JlU2VsZWN0aW9uKCk7XG5cdFx0XHRcdFx0XHRkb20uc3BsaXQobGlzdFBhcmVudCwgbGlzdEVsbSk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlU2VsZWN0aW9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBPdmVycmlkZSBjb21tYW5kcyB0byB1c2UgdGhlIHRleHQgZm9ybWF0dGVyIGVuZ2luZVxuXHRcdFx0J0JvbGQsSXRhbGljLFVuZGVybGluZSxTdHJpa2V0aHJvdWdoLFN1cGVyc2NyaXB0LFN1YnNjcmlwdCc6IGZ1bmN0aW9uKGNvbW1hbmQpIHtcblx0XHRcdFx0dG9nZ2xlRm9ybWF0KGNvbW1hbmQpO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gT3ZlcnJpZGUgY29tbWFuZHMgdG8gdXNlIHRoZSB0ZXh0IGZvcm1hdHRlciBlbmdpbmVcblx0XHRcdCdGb3JlQ29sb3IsSGlsaXRlQ29sb3IsRm9udE5hbWUnOiBmdW5jdGlvbihjb21tYW5kLCB1aSwgdmFsdWUpIHtcblx0XHRcdFx0dG9nZ2xlRm9ybWF0KGNvbW1hbmQsIHZhbHVlKTtcblx0XHRcdH0sXG5cblx0XHRcdEZvbnRTaXplOiBmdW5jdGlvbihjb21tYW5kLCB1aSwgdmFsdWUpIHtcblx0XHRcdFx0dmFyIGZvbnRDbGFzc2VzLCBmb250U2l6ZXM7XG5cblx0XHRcdFx0Ly8gQ29udmVydCBmb250IHNpemUgMS03IHRvIHN0eWxlc1xuXHRcdFx0XHRpZiAodmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSA3KSB7XG5cdFx0XHRcdFx0Zm9udFNpemVzID0gZXhwbG9kZShzZXR0aW5ncy5mb250X3NpemVfc3R5bGVfdmFsdWVzKTtcblx0XHRcdFx0XHRmb250Q2xhc3NlcyA9IGV4cGxvZGUoc2V0dGluZ3MuZm9udF9zaXplX2NsYXNzZXMpO1xuXG5cdFx0XHRcdFx0aWYgKGZvbnRDbGFzc2VzKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGZvbnRDbGFzc2VzW3ZhbHVlIC0gMV0gfHwgdmFsdWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZhbHVlID0gZm9udFNpemVzW3ZhbHVlIC0gMV0gfHwgdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9nZ2xlRm9ybWF0KGNvbW1hbmQsIHZhbHVlKTtcblx0XHRcdH0sXG5cblx0XHRcdFJlbW92ZUZvcm1hdDogZnVuY3Rpb24oY29tbWFuZCkge1xuXHRcdFx0XHRmb3JtYXR0ZXIucmVtb3ZlKGNvbW1hbmQpO1xuXHRcdFx0fSxcblxuXHRcdFx0bWNlQmxvY2tRdW90ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRvZ2dsZUZvcm1hdCgnYmxvY2txdW90ZScpO1xuXHRcdFx0fSxcblxuXHRcdFx0Rm9ybWF0QmxvY2s6IGZ1bmN0aW9uKGNvbW1hbmQsIHVpLCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdG9nZ2xlRm9ybWF0KHZhbHVlIHx8ICdwJyk7XG5cdFx0XHR9LFxuXG5cdFx0XHRtY2VDbGVhbnVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGJvb2ttYXJrID0gc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk7XG5cblx0XHRcdFx0ZWRpdG9yLnNldENvbnRlbnQoZWRpdG9yLmdldENvbnRlbnQoe2NsZWFudXA6IFRSVUV9KSwge2NsZWFudXA6IFRSVUV9KTtcblxuXHRcdFx0XHRzZWxlY3Rpb24ubW92ZVRvQm9va21hcmsoYm9va21hcmspO1xuXHRcdFx0fSxcblxuXHRcdFx0bWNlUmVtb3ZlTm9kZTogZnVuY3Rpb24oY29tbWFuZCwgdWksIHZhbHVlKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdmFsdWUgfHwgc2VsZWN0aW9uLmdldE5vZGUoKTtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYm9keSBub2RlIGlzbid0IHJlbW92ZWRcblx0XHRcdFx0aWYgKG5vZGUgIT0gZWRpdG9yLmdldEJvZHkoKSkge1xuXHRcdFx0XHRcdHN0b3JlU2VsZWN0aW9uKCk7XG5cdFx0XHRcdFx0ZWRpdG9yLmRvbS5yZW1vdmUobm9kZSwgVFJVRSk7XG5cdFx0XHRcdFx0cmVzdG9yZVNlbGVjdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRtY2VTZWxlY3ROb2RlRGVwdGg6IGZ1bmN0aW9uKGNvbW1hbmQsIHVpLCB2YWx1ZSkge1xuXHRcdFx0XHR2YXIgY291bnRlciA9IDA7XG5cblx0XHRcdFx0ZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0Tm9kZSgpLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMSAmJiBjb3VudGVyKysgPT0gdmFsdWUpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gRkFMU0U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBlZGl0b3IuZ2V0Qm9keSgpKTtcblx0XHRcdH0sXG5cblx0XHRcdG1jZVNlbGVjdE5vZGU6IGZ1bmN0aW9uKGNvbW1hbmQsIHVpLCB2YWx1ZSkge1xuXHRcdFx0XHRzZWxlY3Rpb24uc2VsZWN0KHZhbHVlKTtcblx0XHRcdH0sXG5cblx0XHRcdG1jZUluc2VydENvbnRlbnQ6IGZ1bmN0aW9uKGNvbW1hbmQsIHVpLCB2YWx1ZSkge1xuXHRcdFx0XHRJbnNlcnRDb250ZW50Lmluc2VydEF0Q2FyZXQoZWRpdG9yLCB2YWx1ZSk7XG5cdFx0XHR9LFxuXG5cdFx0XHRtY2VJbnNlcnRSYXdIVE1MOiBmdW5jdGlvbihjb21tYW5kLCB1aSwgdmFsdWUpIHtcblx0XHRcdFx0c2VsZWN0aW9uLnNldENvbnRlbnQoJ3RpbnlfbWNlX21hcmtlcicpO1xuXHRcdFx0XHRlZGl0b3Iuc2V0Q29udGVudChcblx0XHRcdFx0XHRlZGl0b3IuZ2V0Q29udGVudCgpLnJlcGxhY2UoL3RpbnlfbWNlX21hcmtlci9nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblxuXHRcdFx0bWNlVG9nZ2xlRm9ybWF0OiBmdW5jdGlvbihjb21tYW5kLCB1aSwgdmFsdWUpIHtcblx0XHRcdFx0dG9nZ2xlRm9ybWF0KHZhbHVlKTtcblx0XHRcdH0sXG5cblx0XHRcdG1jZVNldENvbnRlbnQ6IGZ1bmN0aW9uKGNvbW1hbmQsIHVpLCB2YWx1ZSkge1xuXHRcdFx0XHRlZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSk7XG5cdFx0XHR9LFxuXG5cdFx0XHQnSW5kZW50LE91dGRlbnQnOiBmdW5jdGlvbihjb21tYW5kKSB7XG5cdFx0XHRcdHZhciBpbnRlbnRWYWx1ZSwgaW5kZW50VW5pdCwgdmFsdWU7XG5cblx0XHRcdFx0Ly8gU2V0dXAgaW5kZW50IGxldmVsXG5cdFx0XHRcdGludGVudFZhbHVlID0gc2V0dGluZ3MuaW5kZW50YXRpb247XG5cdFx0XHRcdGluZGVudFVuaXQgPSAvW2EteiVdKyQvaS5leGVjKGludGVudFZhbHVlKTtcblx0XHRcdFx0aW50ZW50VmFsdWUgPSBwYXJzZUludChpbnRlbnRWYWx1ZSwgMTApO1xuXG5cdFx0XHRcdGlmICghcXVlcnlDb21tYW5kU3RhdGUoJ0luc2VydFVub3JkZXJlZExpc3QnKSAmJiAhcXVlcnlDb21tYW5kU3RhdGUoJ0luc2VydE9yZGVyZWRMaXN0JykpIHtcblx0XHRcdFx0XHQvLyBJZiBmb3JjZWRfcm9vdF9ibG9ja3MgaXMgc2V0IHRvIGZhbHNlIHdlIGRvbid0IGhhdmUgYSBibG9jayB0byBpbmRlbnQgc28gbGV0cyBjcmVhdGUgYSBkaXZcblx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLmZvcmNlZF9yb290X2Jsb2NrICYmICFkb20uZ2V0UGFyZW50KHNlbGVjdGlvbi5nZXROb2RlKCksIGRvbS5pc0Jsb2NrKSkge1xuXHRcdFx0XHRcdFx0Zm9ybWF0dGVyLmFwcGx5KCdkaXYnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlYWNoKHNlbGVjdGlvbi5nZXRTZWxlY3RlZEJsb2NrcygpLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZShlbGVtZW50KSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQubm9kZU5hbWUgIT09IFwiTElcIikge1xuXHRcdFx0XHRcdFx0XHR2YXIgaW5kZW50U3R5bGVOYW1lID0gZWRpdG9yLmdldFBhcmFtKCdpbmRlbnRfdXNlX21hcmdpbicsIGZhbHNlKSA/ICdtYXJnaW4nIDogJ3BhZGRpbmcnO1xuXHRcdFx0XHRcdFx0XHRpbmRlbnRTdHlsZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lID09PSAnVEFCTEUnID8gJ21hcmdpbicgOiBpbmRlbnRTdHlsZU5hbWU7XG5cdFx0XHRcdFx0XHRcdGluZGVudFN0eWxlTmFtZSArPSBkb20uZ2V0U3R5bGUoZWxlbWVudCwgJ2RpcmVjdGlvbicsIHRydWUpID09ICdydGwnID8gJ1JpZ2h0JyA6ICdMZWZ0JztcblxuXHRcdFx0XHRcdFx0XHRpZiAoY29tbWFuZCA9PSAnb3V0ZGVudCcpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IE1hdGgubWF4KDAsIHBhcnNlSW50KGVsZW1lbnQuc3R5bGVbaW5kZW50U3R5bGVOYW1lXSB8fCAwLCAxMCkgLSBpbnRlbnRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0ZG9tLnNldFN0eWxlKGVsZW1lbnQsIGluZGVudFN0eWxlTmFtZSwgdmFsdWUgPyB2YWx1ZSArIGluZGVudFVuaXQgOiAnJyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSAocGFyc2VJbnQoZWxlbWVudC5zdHlsZVtpbmRlbnRTdHlsZU5hbWVdIHx8IDAsIDEwKSArIGludGVudFZhbHVlKSArIGluZGVudFVuaXQ7XG5cdFx0XHRcdFx0XHRcdFx0ZG9tLnNldFN0eWxlKGVsZW1lbnQsIGluZGVudFN0eWxlTmFtZSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZXhlY05hdGl2ZUNvbW1hbmQoY29tbWFuZCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdG1jZVJlcGFpbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0fSxcblxuXHRcdFx0SW5zZXJ0SG9yaXpvbnRhbFJ1bGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydENvbnRlbnQnLCBmYWxzZSwgJzxociAvPicpO1xuXHRcdFx0fSxcblxuXHRcdFx0bWNlVG9nZ2xlVmlzdWFsQWlkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZWRpdG9yLmhhc1Zpc3VhbCA9ICFlZGl0b3IuaGFzVmlzdWFsO1xuXHRcdFx0XHRlZGl0b3IuYWRkVmlzdWFsKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRtY2VSZXBsYWNlQ29udGVudDogZnVuY3Rpb24oY29tbWFuZCwgdWksIHZhbHVlKSB7XG5cdFx0XHRcdGVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIGZhbHNlLCB2YWx1ZS5yZXBsYWNlKC9cXHtcXCRzZWxlY3Rpb25cXH0vZywgc2VsZWN0aW9uLmdldENvbnRlbnQoe2Zvcm1hdDogJ3RleHQnfSkpKTtcblx0XHRcdH0sXG5cblx0XHRcdG1jZUluc2VydExpbms6IGZ1bmN0aW9uKGNvbW1hbmQsIHVpLCB2YWx1ZSkge1xuXHRcdFx0XHR2YXIgYW5jaG9yO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHtocmVmOiB2YWx1ZX07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbmNob3IgPSBkb20uZ2V0UGFyZW50KHNlbGVjdGlvbi5nZXROb2RlKCksICdhJyk7XG5cblx0XHRcdFx0Ly8gU3BhY2VzIGFyZSBuZXZlciB2YWxpZCBpbiBVUkxzIGFuZCBpdCdzIGEgdmVyeSBjb21tb24gbWlzdGFrZSBmb3IgcGVvcGxlIHRvIG1ha2Ugc28gd2UgZml4IGl0IGhlcmUuXG5cdFx0XHRcdHZhbHVlLmhyZWYgPSB2YWx1ZS5ocmVmLnJlcGxhY2UoJyAnLCAnJTIwJyk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGV4aXN0aW5nIGxpbmtzIGlmIHRoZXJlIGNvdWxkIGJlIGNoaWxkIGxpbmtzIG9yIHRoYXQgdGhlIGhyZWYgaXNuJ3Qgc3BlY2lmaWVkXG5cdFx0XHRcdGlmICghYW5jaG9yIHx8ICF2YWx1ZS5ocmVmKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVyLnJlbW92ZSgnbGluaycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgbmV3IGxpbmsgdG8gc2VsZWN0aW9uXG5cdFx0XHRcdGlmICh2YWx1ZS5ocmVmKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVyLmFwcGx5KCdsaW5rJywgdmFsdWUsIGFuY2hvcik7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdHNlbGVjdEFsbDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciByb290ID0gZG9tLmdldFJvb3QoKSwgcm5nO1xuXG5cdFx0XHRcdGlmIChzZWxlY3Rpb24uZ2V0Um5nKCkuc2V0U3RhcnQpIHtcblx0XHRcdFx0XHR2YXIgZWRpdGluZ0hvc3QgPSBkb20uZ2V0UGFyZW50KHNlbGVjdGlvbi5nZXRTdGFydCgpLCBOb2RlVHlwZS5pc0NvbnRlbnRFZGl0YWJsZVRydWUpO1xuXHRcdFx0XHRcdGlmIChlZGl0aW5nSG9zdCkge1xuXHRcdFx0XHRcdFx0cm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuXHRcdFx0XHRcdFx0cm5nLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0aW5nSG9zdCk7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIElFIHdpbGwgcmVuZGVyIGl0J3Mgb3duIHJvb3QgbGV2ZWwgYmxvY2sgZWxlbWVudHMgYW5kIHNvbWV0aW1lc1xuXHRcdFx0XHRcdC8vIGV2ZW4gcHV0IGZvbnQgZWxlbWVudHMgaW4gdGhlbSB3aGVuIHRoZSB1c2VyIHN0YXJ0cyB0eXBpbmcuIFNvIHdlIG5lZWQgdG9cblx0XHRcdFx0XHQvLyBtb3ZlIHRoZSBzZWxlY3Rpb24gdG8gYSBtb3JlIHN1aXRhYmxlIGVsZW1lbnQgZnJvbSB0aGlzOlxuXHRcdFx0XHRcdC8vIDxib2R5Pnw8cD48L3A+PC9ib2R5PiB0byB0aGlzOiA8Ym9keT48cD58PC9wPjwvYm9keT5cblx0XHRcdFx0XHRybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG5cdFx0XHRcdFx0aWYgKCFybmcuaXRlbSkge1xuXHRcdFx0XHRcdFx0cm5nLm1vdmVUb0VsZW1lbnRUZXh0KHJvb3QpO1xuXHRcdFx0XHRcdFx0cm5nLnNlbGVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0XCJkZWxldGVcIjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGV4ZWNOYXRpdmVDb21tYW5kKFwiRGVsZXRlXCIpO1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIGJvZHkgaXMgZW1wdHkgYWZ0ZXIgdGhlIGRlbGV0ZSBjYWxsIGlmIHNvIHRoZW4gc2V0IHRoZSBjb250ZW50c1xuXHRcdFx0XHQvLyB0byBhbiBlbXB0eSBzdHJpbmcgYW5kIG1vdmUgdGhlIGNhcmV0IHRvIGFueSBibG9jayBwcm9kdWNlZCBieSB0aGF0IG9wZXJhdGlvblxuXHRcdFx0XHQvLyB0aGlzIGZpeGVzIHRoZSBpc3N1ZSB3aXRoIHJvb3QgYmxvY2tzIG5vdCBiZWluZyBwcm9wZXJseSBwcm9kdWNlZCBhZnRlciBhIGRlbGV0ZSBjYWxsIG9uIElFXG5cdFx0XHRcdHZhciBib2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcblxuXHRcdFx0XHRpZiAoZG9tLmlzRW1wdHkoYm9keSkpIHtcblx0XHRcdFx0XHRlZGl0b3Iuc2V0Q29udGVudCgnJyk7XG5cblx0XHRcdFx0XHRpZiAoYm9keS5maXJzdENoaWxkICYmIGRvbS5pc0Jsb2NrKGJvZHkuZmlyc3RDaGlsZCkpIHtcblx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oYm9keS5maXJzdENoaWxkLCAwKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5zZXRDdXJzb3JMb2NhdGlvbihib2R5LCAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdG1jZU5ld0RvY3VtZW50OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZWRpdG9yLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fSxcblxuXHRcdFx0SW5zZXJ0TGluZUJyZWFrOiBmdW5jdGlvbihjb21tYW5kLCB1aSwgdmFsdWUpIHtcblx0XHRcdFx0Ly8gV2UgbG9hZCB0aGUgY3VycmVudCBldmVudCBpbiBmcm9tIEVudGVyS2V5LmpzIHdoZW4gYXBwcm9wcmlhdGUgdG8gaGVlZFxuXHRcdFx0XHQvLyBjZXJ0YWluIGV2ZW50LXNwZWNpZmljIHZhcmlhdGlvbnMgc3VjaCBhcyBjdHJsLWVudGVyIGluIGEgbGlzdFxuXHRcdFx0XHR2YXIgZXZ0ID0gdmFsdWU7XG5cdFx0XHRcdHZhciBickVsbSwgZXh0cmFCciwgbWFya2VyO1xuXHRcdFx0XHR2YXIgcm5nID0gc2VsZWN0aW9uLmdldFJuZyh0cnVlKTtcblx0XHRcdFx0bmV3IFJhbmdlVXRpbHMoZG9tKS5ub3JtYWxpemUocm5nKTtcblxuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuXHRcdFx0XHR2YXIgY29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuXG5cdFx0XHRcdC8vIFJlc29sdmUgbm9kZSBpbmRleFxuXHRcdFx0XHRpZiAoY29udGFpbmVyLm5vZGVUeXBlID09IDEgJiYgY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdHZhciBpc0FmdGVyTGFzdE5vZGVJbkNvbnRhaW5lciA9IG9mZnNldCA+IGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG5cblx0XHRcdFx0XHRjb250YWluZXIgPSBjb250YWluZXIuY2hpbGROb2Rlc1tNYXRoLm1pbihvZmZzZXQsIGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpXSB8fCBjb250YWluZXI7XG5cdFx0XHRcdFx0aWYgKGlzQWZ0ZXJMYXN0Tm9kZUluQ29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0XHRvZmZzZXQgPSBjb250YWluZXIubm9kZVZhbHVlLmxlbmd0aDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b2Zmc2V0ID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgcGFyZW50QmxvY2sgPSBkb20uZ2V0UGFyZW50KGNvbnRhaW5lciwgZG9tLmlzQmxvY2spO1xuXHRcdFx0XHR2YXIgcGFyZW50QmxvY2tOYW1lID0gcGFyZW50QmxvY2sgPyBwYXJlbnRCbG9jay5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpIDogJyc7IC8vIElFIDwgOSAmIEhUTUw1XG5cdFx0XHRcdHZhciBjb250YWluZXJCbG9jayA9IHBhcmVudEJsb2NrID8gZG9tLmdldFBhcmVudChwYXJlbnRCbG9jay5wYXJlbnROb2RlLCBkb20uaXNCbG9jaykgOiBudWxsO1xuXHRcdFx0XHR2YXIgY29udGFpbmVyQmxvY2tOYW1lID0gY29udGFpbmVyQmxvY2sgPyBjb250YWluZXJCbG9jay5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpIDogJyc7IC8vIElFIDwgOSAmIEhUTUw1XG5cblx0XHRcdFx0Ly8gRW50ZXIgaW5zaWRlIGJsb2NrIGNvbnRhaW5lZCB3aXRoaW4gYSBMSSB0aGVuIHNwbGl0IG9yIGluc2VydCBiZWZvcmUvYWZ0ZXIgTElcblx0XHRcdFx0dmFyIGlzQ29udHJvbEtleSA9IGV2dCAmJiBldnQuY3RybEtleTtcblx0XHRcdFx0aWYgKGNvbnRhaW5lckJsb2NrTmFtZSA9PSAnTEknICYmICFpc0NvbnRyb2xLZXkpIHtcblx0XHRcdFx0XHRwYXJlbnRCbG9jayA9IGNvbnRhaW5lckJsb2NrO1xuXHRcdFx0XHRcdHBhcmVudEJsb2NrTmFtZSA9IGNvbnRhaW5lckJsb2NrTmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdhbGtzIHRoZSBwYXJlbnQgYmxvY2sgdG8gdGhlIHJpZ2h0IGFuZCBsb29rIGZvciBCUiBlbGVtZW50c1xuXHRcdFx0XHRmdW5jdGlvbiBoYXNSaWdodFNpZGVDb250ZW50KCkge1xuXHRcdFx0XHRcdHZhciB3YWxrZXIgPSBuZXcgVHJlZVdhbGtlcihjb250YWluZXIsIHBhcmVudEJsb2NrKSwgbm9kZTtcblx0XHRcdFx0XHR2YXIgbm9uRW1wdHlFbGVtZW50c01hcCA9IGVkaXRvci5zY2hlbWEuZ2V0Tm9uRW1wdHlFbGVtZW50cygpO1xuXG5cdFx0XHRcdFx0d2hpbGUgKChub2RlID0gd2Fsa2VyLm5leHQoKSkpIHtcblx0XHRcdFx0XHRcdGlmIChub25FbXB0eUVsZW1lbnRzTWFwW25vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0gfHwgbm9kZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLm5vZGVUeXBlID09IDMgJiYgb2Zmc2V0ID49IGNvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IGV4dHJhIEJSIGVsZW1lbnQgYXQgdGhlIGVuZCBibG9jayBlbGVtZW50c1xuXHRcdFx0XHRcdGlmICghaXNPbGRJRSAmJiAhaGFzUmlnaHRTaWRlQ29udGVudCgpKSB7XG5cdFx0XHRcdFx0XHRickVsbSA9IGRvbS5jcmVhdGUoJ2JyJyk7XG5cdFx0XHRcdFx0XHRybmcuaW5zZXJ0Tm9kZShickVsbSk7XG5cdFx0XHRcdFx0XHRybmcuc2V0U3RhcnRBZnRlcihickVsbSk7XG5cdFx0XHRcdFx0XHRybmcuc2V0RW5kQWZ0ZXIoYnJFbG0pO1xuXHRcdFx0XHRcdFx0ZXh0cmFCciA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJFbG0gPSBkb20uY3JlYXRlKCdicicpO1xuXHRcdFx0XHRybmcuaW5zZXJ0Tm9kZShickVsbSk7XG5cblx0XHRcdFx0Ly8gUmVuZGVyaW5nIG1vZGVzIGJlbG93IElFOCBkb2Vzbid0IGRpc3BsYXkgQlIgZWxlbWVudHMgaW4gUFJFIHVubGVzcyB3ZSBoYXZlIGEgXFxuIGJlZm9yZSBpdFxuXHRcdFx0XHR2YXIgZG9jdW1lbnRNb2RlID0gZG9tLmRvYy5kb2N1bWVudE1vZGU7XG5cdFx0XHRcdGlmIChpc09sZElFICYmIHBhcmVudEJsb2NrTmFtZSA9PSAnUFJFJyAmJiAoIWRvY3VtZW50TW9kZSB8fCBkb2N1bWVudE1vZGUgPCA4KSkge1xuXHRcdFx0XHRcdGJyRWxtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRvbS5kb2MuY3JlYXRlVGV4dE5vZGUoJ1xccicpLCBickVsbSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJbnNlcnQgdGVtcCBtYXJrZXIgYW5kIHNjcm9sbCB0byB0aGF0XG5cdFx0XHRcdG1hcmtlciA9IGRvbS5jcmVhdGUoJ3NwYW4nLCB7fSwgJyZuYnNwOycpO1xuXHRcdFx0XHRickVsbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShtYXJrZXIsIGJyRWxtKTtcblx0XHRcdFx0c2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KG1hcmtlcik7XG5cdFx0XHRcdGRvbS5yZW1vdmUobWFya2VyKTtcblxuXHRcdFx0XHRpZiAoIWV4dHJhQnIpIHtcblx0XHRcdFx0XHRybmcuc2V0U3RhcnRBZnRlcihickVsbSk7XG5cdFx0XHRcdFx0cm5nLnNldEVuZEFmdGVyKGJyRWxtKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRybmcuc2V0U3RhcnRCZWZvcmUoYnJFbG0pO1xuXHRcdFx0XHRcdHJuZy5zZXRFbmRCZWZvcmUoYnJFbG0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZWN0aW9uLnNldFJuZyhybmcpO1xuXHRcdFx0XHRlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG5cblx0XHRcdFx0cmV0dXJuIFRSVUU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBBZGQgcXVlcnlDb21tYW5kU3RhdGUgb3ZlcnJpZGVzXG5cdFx0YWRkQ29tbWFuZHMoe1xuXHRcdFx0Ly8gT3ZlcnJpZGUganVzdGlmeSBjb21tYW5kc1xuXHRcdFx0J0p1c3RpZnlMZWZ0LEp1c3RpZnlDZW50ZXIsSnVzdGlmeVJpZ2h0LEp1c3RpZnlGdWxsJzogZnVuY3Rpb24oY29tbWFuZCkge1xuXHRcdFx0XHR2YXIgbmFtZSA9ICdhbGlnbicgKyBjb21tYW5kLnN1YnN0cmluZyg3KTtcblx0XHRcdFx0dmFyIG5vZGVzID0gc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgPyBbZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0Tm9kZSgpLCBkb20uaXNCbG9jayldIDogc2VsZWN0aW9uLmdldFNlbGVjdGVkQmxvY2tzKCk7XG5cdFx0XHRcdHZhciBtYXRjaGVzID0gbWFwKG5vZGVzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZm9ybWF0dGVyLm1hdGNoTm9kZShub2RlLCBuYW1lKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBpbkFycmF5KG1hdGNoZXMsIFRSVUUpICE9PSAtMTtcblx0XHRcdH0sXG5cblx0XHRcdCdCb2xkLEl0YWxpYyxVbmRlcmxpbmUsU3RyaWtldGhyb3VnaCxTdXBlcnNjcmlwdCxTdWJzY3JpcHQnOiBmdW5jdGlvbihjb21tYW5kKSB7XG5cdFx0XHRcdHJldHVybiBpc0Zvcm1hdE1hdGNoKGNvbW1hbmQpO1xuXHRcdFx0fSxcblxuXHRcdFx0bWNlQmxvY2tRdW90ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBpc0Zvcm1hdE1hdGNoKCdibG9ja3F1b3RlJyk7XG5cdFx0XHR9LFxuXG5cdFx0XHRPdXRkZW50OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIG5vZGU7XG5cblx0XHRcdFx0aWYgKHNldHRpbmdzLmlubGluZV9zdHlsZXMpIHtcblx0XHRcdFx0XHRpZiAoKG5vZGUgPSBkb20uZ2V0UGFyZW50KHNlbGVjdGlvbi5nZXRTdGFydCgpLCBkb20uaXNCbG9jaykpICYmIHBhcnNlSW50KG5vZGUuc3R5bGUucGFkZGluZ0xlZnQsIDEwKSA+IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiBUUlVFO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICgobm9kZSA9IGRvbS5nZXRQYXJlbnQoc2VsZWN0aW9uLmdldEVuZCgpLCBkb20uaXNCbG9jaykpICYmIHBhcnNlSW50KG5vZGUuc3R5bGUucGFkZGluZ0xlZnQsIDEwKSA+IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiBUUlVFO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0cXVlcnlDb21tYW5kU3RhdGUoJ0luc2VydFVub3JkZXJlZExpc3QnKSB8fFxuXHRcdFx0XHRcdHF1ZXJ5Q29tbWFuZFN0YXRlKCdJbnNlcnRPcmRlcmVkTGlzdCcpIHx8XG5cdFx0XHRcdFx0KCFzZXR0aW5ncy5pbmxpbmVfc3R5bGVzICYmICEhZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0Tm9kZSgpLCAnQkxPQ0tRVU9URScpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblxuXHRcdFx0J0luc2VydFVub3JkZXJlZExpc3QsSW5zZXJ0T3JkZXJlZExpc3QnOiBmdW5jdGlvbihjb21tYW5kKSB7XG5cdFx0XHRcdHZhciBsaXN0ID0gZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0Tm9kZSgpLCAndWwsb2wnKTtcblxuXHRcdFx0XHRyZXR1cm4gbGlzdCAmJlxuXHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdGNvbW1hbmQgPT09ICdpbnNlcnR1bm9yZGVyZWRsaXN0JyAmJiBsaXN0LnRhZ05hbWUgPT09ICdVTCcgfHxcblx0XHRcdFx0XHRcdGNvbW1hbmQgPT09ICdpbnNlcnRvcmRlcmVkbGlzdCcgJiYgbGlzdC50YWdOYW1lID09PSAnT0wnXG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9LCAnc3RhdGUnKTtcblxuXHRcdC8vIEFkZCBxdWVyeUNvbW1hbmRWYWx1ZSBvdmVycmlkZXNcblx0XHRhZGRDb21tYW5kcyh7XG5cdFx0XHQnRm9udFNpemUsRm9udE5hbWUnOiBmdW5jdGlvbihjb21tYW5kKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSA9IDAsIHBhcmVudDtcblxuXHRcdFx0XHRpZiAoKHBhcmVudCA9IGRvbS5nZXRQYXJlbnQoc2VsZWN0aW9uLmdldE5vZGUoKSwgJ3NwYW4nKSkpIHtcblx0XHRcdFx0XHRpZiAoY29tbWFuZCA9PSAnZm9udHNpemUnKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IHBhcmVudC5zdHlsZS5mb250U2l6ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBwYXJlbnQuc3R5bGUuZm9udEZhbWlseS5yZXBsYWNlKC8sIC9nLCAnLCcpLnJlcGxhY2UoL1tcXCdcXFwiXS9nLCAnJykudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSwgJ3ZhbHVlJyk7XG5cblx0XHQvLyBBZGQgdW5kbyBtYW5hZ2VyIGxvZ2ljXG5cdFx0YWRkQ29tbWFuZHMoe1xuXHRcdFx0VW5kbzogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGVkaXRvci51bmRvTWFuYWdlci51bmRvKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRSZWRvOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZWRpdG9yLnVuZG9NYW5hZ2VyLnJlZG8oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9VUkkuanNcblxuLyoqXG4gKiBVUkkuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhhbmRsZXMgcGFyc2luZywgbW9kaWZpY2F0aW9uIGFuZCBzZXJpYWxpemF0aW9uIG9mIFVSSS9VUkwgc3RyaW5ncy5cbiAqIEBjbGFzcyB0aW55bWNlLnV0aWwuVVJJXG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9VUklcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihUb29scykge1xuXHR2YXIgZWFjaCA9IFRvb2xzLmVhY2gsIHRyaW0gPSBUb29scy50cmltO1xuXHR2YXIgcXVlcnlQYXJ0cyA9IFwic291cmNlIHByb3RvY29sIGF1dGhvcml0eSB1c2VySW5mbyB1c2VyIHBhc3N3b3JkIGhvc3QgcG9ydCByZWxhdGl2ZSBwYXRoIGRpcmVjdG9yeSBmaWxlIHF1ZXJ5IGFuY2hvclwiLnNwbGl0KCcgJyk7XG5cdHZhciBERUZBVUxUX1BPUlRTID0ge1xuXHRcdCdmdHAnOiAyMSxcblx0XHQnaHR0cCc6IDgwLFxuXHRcdCdodHRwcyc6IDQ0Myxcblx0XHQnbWFpbHRvJzogMjVcblx0fTtcblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBhIG5ldyBVUkkgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAbWV0aG9kIFVSSVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFVSSSBzdHJpbmcgdG8gcGFyc2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBPcHRpb25hbCBzZXR0aW5ncyBvYmplY3QuXG5cdCAqL1xuXHRmdW5jdGlvbiBVUkkodXJsLCBzZXR0aW5ncykge1xuXHRcdHZhciBzZWxmID0gdGhpcywgYmFzZVVyaSwgYmFzZV91cmw7XG5cblx0XHR1cmwgPSB0cmltKHVybCk7XG5cdFx0c2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XG5cdFx0YmFzZVVyaSA9IHNldHRpbmdzLmJhc2VfdXJpO1xuXG5cdFx0Ly8gU3RyYW5nZSBhcHAgcHJvdG9jb2wgdGhhdCBpc24ndCBodHRwL2h0dHBzIG9yIGxvY2FsIGFuY2hvclxuXHRcdC8vIEZvciBleGFtcGxlOiBtYWlsdG8sc2t5cGUsdGVsIGV0Yy5cblx0XHRpZiAoL14oW1xcd1xcLV0rKTooW15cXC9dezJ9KS9pLnRlc3QodXJsKSB8fCAvXlxccyojLy50ZXN0KHVybCkpIHtcblx0XHRcdHNlbGYuc291cmNlID0gdXJsO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBpc1Byb3RvY29sUmVsYXRpdmUgPSB1cmwuaW5kZXhPZignLy8nKSA9PT0gMDtcblxuXHRcdC8vIEFic29sdXRlIHBhdGggd2l0aCBubyBob3N0LCBmYWtlIGhvc3QgYW5kIHByb3RvY29sXG5cdFx0aWYgKHVybC5pbmRleE9mKCcvJykgPT09IDAgJiYgIWlzUHJvdG9jb2xSZWxhdGl2ZSkge1xuXHRcdFx0dXJsID0gKGJhc2VVcmkgPyBiYXNlVXJpLnByb3RvY29sIHx8ICdodHRwJyA6ICdodHRwJykgKyAnOi8vbWNlX2hvc3QnICsgdXJsO1xuXHRcdH1cblxuXHRcdC8vIFJlbGF0aXZlIHBhdGggaHR0cDovLyBvciBwcm90b2NvbCByZWxhdGl2ZSAvL3BhdGhcblx0XHRpZiAoIS9eW1xcd1xcLV0qOj9cXC9cXC8vLnRlc3QodXJsKSkge1xuXHRcdFx0YmFzZV91cmwgPSBzZXR0aW5ncy5iYXNlX3VyaSA/IHNldHRpbmdzLmJhc2VfdXJpLnBhdGggOiBuZXcgVVJJKGxvY2F0aW9uLmhyZWYpLmRpcmVjdG9yeTtcblx0XHRcdGlmIChzZXR0aW5ncy5iYXNlX3VyaS5wcm90b2NvbCA9PT0gXCJcIikge1xuXHRcdFx0XHR1cmwgPSAnLy9tY2VfaG9zdCcgKyBzZWxmLnRvQWJzUGF0aChiYXNlX3VybCwgdXJsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHVybCA9IC8oW14jP10qKShbIz9dPy4qKS8uZXhlYyh1cmwpO1xuXHRcdFx0XHR1cmwgPSAoKGJhc2VVcmkgJiYgYmFzZVVyaS5wcm90b2NvbCkgfHwgJ2h0dHAnKSArICc6Ly9tY2VfaG9zdCcgKyBzZWxmLnRvQWJzUGF0aChiYXNlX3VybCwgdXJsWzFdKSArIHVybFsyXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQYXJzZSBVUkwgKENyZWRpdHMgZ29lcyB0byBTdGVhdmUsIGh0dHA6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZlcy9wYXJzZXVyaSlcblx0XHR1cmwgPSB1cmwucmVwbGFjZSgvQEAvZywgJyhtY2VfYXQpJyk7IC8vIFpvcGUgMyB3b3JrYXJvdW5kLCB0aGV5IHVzZSBAQHNvbWV0aGluZ1xuXG5cdFx0Lypqc2hpbnQgbWF4bGVuOiAyNTUgKi9cblx0XHQvKmVzbGludCBtYXgtbGVuOiAwICovXG5cdFx0dXJsID0gL14oPzooPyFbXjpAXSs6W146QFxcL10qQCkoW146XFwvPyMuXSspOik/KD86XFwvXFwvKT8oKD86KChbXjpAXFwvXSopOj8oW146QFxcL10qKSk/QCk/KFteOlxcLz8jXSopKD86OihcXGQqKSk/KSgoKFxcLyg/OltePyNdKD8hW14/I1xcL10qXFwuW14/I1xcLy5dKyg/Ols/I118JCkpKSpcXC8/KT8oW14/I1xcL10qKSkoPzpcXD8oW14jXSopKT8oPzojKC4qKSk/KS8uZXhlYyh1cmwpO1xuXG5cdFx0ZWFjaChxdWVyeVBhcnRzLCBmdW5jdGlvbih2LCBpKSB7XG5cdFx0XHR2YXIgcGFydCA9IHVybFtpXTtcblxuXHRcdFx0Ly8gWm9wZSAzIHdvcmthcm91bmQsIHRoZXkgdXNlIEBAc29tZXRoaW5nXG5cdFx0XHRpZiAocGFydCkge1xuXHRcdFx0XHRwYXJ0ID0gcGFydC5yZXBsYWNlKC9cXChtY2VfYXRcXCkvZywgJ0BAJyk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGZbdl0gPSBwYXJ0O1xuXHRcdH0pO1xuXG5cdFx0aWYgKGJhc2VVcmkpIHtcblx0XHRcdGlmICghc2VsZi5wcm90b2NvbCkge1xuXHRcdFx0XHRzZWxmLnByb3RvY29sID0gYmFzZVVyaS5wcm90b2NvbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxmLnVzZXJJbmZvKSB7XG5cdFx0XHRcdHNlbGYudXNlckluZm8gPSBiYXNlVXJpLnVzZXJJbmZvO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNlbGYucG9ydCAmJiBzZWxmLmhvc3QgPT09ICdtY2VfaG9zdCcpIHtcblx0XHRcdFx0c2VsZi5wb3J0ID0gYmFzZVVyaS5wb3J0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNlbGYuaG9zdCB8fCBzZWxmLmhvc3QgPT09ICdtY2VfaG9zdCcpIHtcblx0XHRcdFx0c2VsZi5ob3N0ID0gYmFzZVVyaS5ob3N0O1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLnNvdXJjZSA9ICcnO1xuXHRcdH1cblxuXHRcdGlmIChpc1Byb3RvY29sUmVsYXRpdmUpIHtcblx0XHRcdHNlbGYucHJvdG9jb2wgPSAnJztcblx0XHR9XG5cblx0XHQvL3QucGF0aCA9IHQucGF0aCB8fCAnLyc7XG5cdH1cblxuXHRVUkkucHJvdG90eXBlID0ge1xuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhlIGludGVybmFsIHBhdGggcGFydCBvZiB0aGUgVVJJLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRQYXRoXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCBzdHJpbmcgdG8gc2V0LlxuXHRcdCAqL1xuXHRcdHNldFBhdGg6IGZ1bmN0aW9uKHBhdGgpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0cGF0aCA9IC9eKC4qPylcXC8/KFxcdyspPyQvLmV4ZWMocGF0aCk7XG5cblx0XHRcdC8vIFVwZGF0ZSBwYXRoIHBhcnRzXG5cdFx0XHRzZWxmLnBhdGggPSBwYXRoWzBdO1xuXHRcdFx0c2VsZi5kaXJlY3RvcnkgPSBwYXRoWzFdO1xuXHRcdFx0c2VsZi5maWxlID0gcGF0aFsyXTtcblxuXHRcdFx0Ly8gUmVidWlsZCBzb3VyY2Vcblx0XHRcdHNlbGYuc291cmNlID0gJyc7XG5cdFx0XHRzZWxmLmdldFVSSSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIFVSSSBpbnRvIGEgcmVsYXRpdmUgVVJJIGJhc2VkIG9uIHRoZSBjdXJyZW50IFVSSSBpbnN0YW5jZSBsb2NhdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdG9SZWxhdGl2ZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB1cmkgVVJJIHRvIGNvbnZlcnQgaW50byBhIHJlbGF0aXZlIHBhdGgvVVJJLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gUmVsYXRpdmUgVVJJIGZyb20gdGhlIHBvaW50IHNwZWNpZmllZCBpbiB0aGUgY3VycmVudCBVUkkgaW5zdGFuY2UuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBDb252ZXJ0cyBhbiBhYnNvbHV0ZSBVUkwgdG8gYW4gcmVsYXRpdmUgVVJMIHVybCB3aWxsIGJlIHNvbWVkaXIvc29tZWZpbGUuaHRtXG5cdFx0ICogdmFyIHVybCA9IG5ldyB0aW55bWNlLnV0aWwuVVJJKCdodHRwOi8vd3d3LnNpdGUuY29tL2Rpci8nKS50b1JlbGF0aXZlKCdodHRwOi8vd3d3LnNpdGUuY29tL2Rpci9zb21lZGlyL3NvbWVmaWxlLmh0bScpO1xuXHRcdCAqL1xuXHRcdHRvUmVsYXRpdmU6IGZ1bmN0aW9uKHVyaSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBvdXRwdXQ7XG5cblx0XHRcdGlmICh1cmkgPT09IFwiLi9cIikge1xuXHRcdFx0XHRyZXR1cm4gdXJpO1xuXHRcdFx0fVxuXG5cdFx0XHR1cmkgPSBuZXcgVVJJKHVyaSwge2Jhc2VfdXJpOiBzZWxmfSk7XG5cblx0XHRcdC8vIE5vdCBvbiBzYW1lIGRvbWFpbi9wb3J0IG9yIHByb3RvY29sXG5cdFx0XHRpZiAoKHVyaS5ob3N0ICE9ICdtY2VfaG9zdCcgJiYgc2VsZi5ob3N0ICE9IHVyaS5ob3N0ICYmIHVyaS5ob3N0KSB8fCBzZWxmLnBvcnQgIT0gdXJpLnBvcnQgfHxcblx0XHRcdFx0KHNlbGYucHJvdG9jb2wgIT0gdXJpLnByb3RvY29sICYmIHVyaS5wcm90b2NvbCAhPT0gXCJcIikpIHtcblx0XHRcdFx0cmV0dXJuIHVyaS5nZXRVUkkoKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHR1ID0gc2VsZi5nZXRVUkkoKSwgdXUgPSB1cmkuZ2V0VVJJKCk7XG5cblx0XHRcdC8vIEFsbG93IHVzYWdlIG9mIHRoZSBiYXNlX3VyaSB3aGVuIHJlbGF0aXZlX3VybHMgPSB0cnVlXG5cdFx0XHRpZiAodHUgPT0gdXUgfHwgKHR1LmNoYXJBdCh0dS5sZW5ndGggLSAxKSA9PSBcIi9cIiAmJiB0dS5zdWJzdHIoMCwgdHUubGVuZ3RoIC0gMSkgPT0gdXUpKSB7XG5cdFx0XHRcdHJldHVybiB0dTtcblx0XHRcdH1cblxuXHRcdFx0b3V0cHV0ID0gc2VsZi50b1JlbFBhdGgoc2VsZi5wYXRoLCB1cmkucGF0aCk7XG5cblx0XHRcdC8vIEFkZCBxdWVyeVxuXHRcdFx0aWYgKHVyaS5xdWVyeSkge1xuXHRcdFx0XHRvdXRwdXQgKz0gJz8nICsgdXJpLnF1ZXJ5O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgYW5jaG9yXG5cdFx0XHRpZiAodXJpLmFuY2hvcikge1xuXHRcdFx0XHRvdXRwdXQgKz0gJyMnICsgdXJpLmFuY2hvcjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ29udmVydHMgdGhlIHNwZWNpZmllZCBVUkkgaW50byBhIGFic29sdXRlIFVSSSBiYXNlZCBvbiB0aGUgY3VycmVudCBVUkkgaW5zdGFuY2UgbG9jYXRpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHRvQWJzb2x1dGVcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdXJpIFVSSSB0byBjb252ZXJ0IGludG8gYSByZWxhdGl2ZSBwYXRoL1VSSS5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IG5vSG9zdCBObyBob3N0IGFuZCBwcm90b2NvbCBwcmVmaXguXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBBYnNvbHV0ZSBVUkkgZnJvbSB0aGUgcG9pbnQgc3BlY2lmaWVkIGluIHRoZSBjdXJyZW50IFVSSSBpbnN0YW5jZS5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIENvbnZlcnRzIGFuIHJlbGF0aXZlIFVSTCB0byBhbiBhYnNvbHV0ZSBVUkwgdXJsIHdpbGwgYmUgaHR0cDovL3d3dy5zaXRlLmNvbS9kaXIvc29tZWRpci9zb21lZmlsZS5odG1cblx0XHQgKiB2YXIgdXJsID0gbmV3IHRpbnltY2UudXRpbC5VUkkoJ2h0dHA6Ly93d3cuc2l0ZS5jb20vZGlyLycpLnRvQWJzb2x1dGUoJ3NvbWVkaXIvc29tZWZpbGUuaHRtJyk7XG5cdFx0ICovXG5cdFx0dG9BYnNvbHV0ZTogZnVuY3Rpb24odXJpLCBub0hvc3QpIHtcblx0XHRcdHVyaSA9IG5ldyBVUkkodXJpLCB7YmFzZV91cmk6IHRoaXN9KTtcblxuXHRcdFx0cmV0dXJuIHVyaS5nZXRVUkkobm9Ib3N0ICYmIHRoaXMuaXNTYW1lT3JpZ2luKHVyaSkpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gVVJJIGhhcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhpcyBVUkkuICBCYXNlZCBvbiBSRkMtNjQ1NC5cblx0XHQgKiBTdXBwb3J0cyBkZWZhdWx0IHBvcnRzIGZvciBwcm90b2NvbHMgbGlzdGVkIGluIERFRkFVTFRfUE9SVFMuICBVbnN1cHBvcnRlZCBwcm90b2NvbHMgd2lsbCBmYWlsIHNhZmU6IHRoZXlcblx0XHQgKiB3b24ndCBtYXRjaCwgaWYgdGhlIHBvcnQgc3BlY2lmaWNhdGlvbnMgZGlmZmVyLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpc1NhbWVPcmlnaW5cblx0XHQgKiBAcGFyYW0ge3RpbnltY2UudXRpbC5VUkl9IHVyaSBVcmkgaW5zdGFuY2UgdG8gY29tcGFyZS5cblx0XHQgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgb3JpZ2lucyBhcmUgdGhlIHNhbWUuXG5cdFx0ICovXG5cdFx0aXNTYW1lT3JpZ2luOiBmdW5jdGlvbih1cmkpIHtcblx0XHRcdGlmICh0aGlzLmhvc3QgPT0gdXJpLmhvc3QgJiYgdGhpcy5wcm90b2NvbCA9PSB1cmkucHJvdG9jb2wpIHtcblx0XHRcdFx0aWYgKHRoaXMucG9ydCA9PSB1cmkucG9ydCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGRlZmF1bHRQb3J0ID0gREVGQVVMVF9QT1JUU1t0aGlzLnByb3RvY29sXTtcblx0XHRcdFx0aWYgKGRlZmF1bHRQb3J0ICYmICgodGhpcy5wb3J0IHx8IGRlZmF1bHRQb3J0KSA9PSAodXJpLnBvcnQgfHwgZGVmYXVsdFBvcnQpKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ29udmVydHMgYSBhYnNvbHV0ZSBwYXRoIGludG8gYSByZWxhdGl2ZSBwYXRoLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0b1JlbFBhdGhcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gYmFzZSBCYXNlIHBvaW50IHRvIGNvbnZlcnQgdGhlIHBhdGggZnJvbS5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIGNvbnZlcnQgaW50byBhIHJlbGF0aXZlIHBhdGguXG5cdFx0ICovXG5cdFx0dG9SZWxQYXRoOiBmdW5jdGlvbihiYXNlLCBwYXRoKSB7XG5cdFx0XHR2YXIgaXRlbXMsIGJyZWFrUG9pbnQgPSAwLCBvdXQgPSAnJywgaSwgbDtcblxuXHRcdFx0Ly8gU3BsaXQgdGhlIHBhdGhzXG5cdFx0XHRiYXNlID0gYmFzZS5zdWJzdHJpbmcoMCwgYmFzZS5sYXN0SW5kZXhPZignLycpKTtcblx0XHRcdGJhc2UgPSBiYXNlLnNwbGl0KCcvJyk7XG5cdFx0XHRpdGVtcyA9IHBhdGguc3BsaXQoJy8nKTtcblxuXHRcdFx0aWYgKGJhc2UubGVuZ3RoID49IGl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGkgPSAwLCBsID0gYmFzZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRpZiAoaSA+PSBpdGVtcy5sZW5ndGggfHwgYmFzZVtpXSAhPSBpdGVtc1tpXSkge1xuXHRcdFx0XHRcdFx0YnJlYWtQb2ludCA9IGkgKyAxO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChiYXNlLmxlbmd0aCA8IGl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKGkgPj0gYmFzZS5sZW5ndGggfHwgYmFzZVtpXSAhPSBpdGVtc1tpXSkge1xuXHRcdFx0XHRcdFx0YnJlYWtQb2ludCA9IGkgKyAxO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChicmVha1BvaW50ID09PSAxKSB7XG5cdFx0XHRcdHJldHVybiBwYXRoO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGkgPSAwLCBsID0gYmFzZS5sZW5ndGggLSAoYnJlYWtQb2ludCAtIDEpOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdG91dCArPSBcIi4uL1wiO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGkgPSBicmVha1BvaW50IC0gMSwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRpZiAoaSAhPSBicmVha1BvaW50IC0gMSkge1xuXHRcdFx0XHRcdG91dCArPSBcIi9cIiArIGl0ZW1zW2ldO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG91dCArPSBpdGVtc1tpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDb252ZXJ0cyBhIHJlbGF0aXZlIHBhdGggaW50byBhIGFic29sdXRlIHBhdGguXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHRvQWJzUGF0aFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlIEJhc2UgcG9pbnQgdG8gY29udmVydCB0aGUgcGF0aCBmcm9tLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFJlbGF0aXZlIHBhdGggdG8gY29udmVydCBpbnRvIGFuIGFic29sdXRlIHBhdGguXG5cdFx0ICovXG5cdFx0dG9BYnNQYXRoOiBmdW5jdGlvbihiYXNlLCBwYXRoKSB7XG5cdFx0XHR2YXIgaSwgbmIgPSAwLCBvID0gW10sIHRyLCBvdXRQYXRoO1xuXG5cdFx0XHQvLyBTcGxpdCBwYXRoc1xuXHRcdFx0dHIgPSAvXFwvJC8udGVzdChwYXRoKSA/ICcvJyA6ICcnO1xuXHRcdFx0YmFzZSA9IGJhc2Uuc3BsaXQoJy8nKTtcblx0XHRcdHBhdGggPSBwYXRoLnNwbGl0KCcvJyk7XG5cblx0XHRcdC8vIFJlbW92ZSBlbXB0eSBjaHVua3Ncblx0XHRcdGVhY2goYmFzZSwgZnVuY3Rpb24oaykge1xuXHRcdFx0XHRpZiAoaykge1xuXHRcdFx0XHRcdG8ucHVzaChrKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGJhc2UgPSBvO1xuXG5cdFx0XHQvLyBNZXJnZSByZWxVUkxQYXJ0cyBjaHVua3Ncblx0XHRcdGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMSwgbyA9IFtdOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHQvLyBJZ25vcmUgZW1wdHkgb3IgLlxuXHRcdFx0XHRpZiAocGF0aFtpXS5sZW5ndGggPT09IDAgfHwgcGF0aFtpXSA9PT0gXCIuXCIpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElzIHBhcmVudFxuXHRcdFx0XHRpZiAocGF0aFtpXSA9PT0gJy4uJykge1xuXHRcdFx0XHRcdG5iKys7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIHVwXG5cdFx0XHRcdGlmIChuYiA+IDApIHtcblx0XHRcdFx0XHRuYi0tO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0by5wdXNoKHBhdGhbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0gYmFzZS5sZW5ndGggLSBuYjtcblxuXHRcdFx0Ly8gSWYgL2EvYi9jIG9yIC9cblx0XHRcdGlmIChpIDw9IDApIHtcblx0XHRcdFx0b3V0UGF0aCA9IG8ucmV2ZXJzZSgpLmpvaW4oJy8nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dFBhdGggPSBiYXNlLnNsaWNlKDAsIGkpLmpvaW4oJy8nKSArICcvJyArIG8ucmV2ZXJzZSgpLmpvaW4oJy8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGZyb250IC8gaWYgaXQncyBuZWVkZWRcblx0XHRcdGlmIChvdXRQYXRoLmluZGV4T2YoJy8nKSAhPT0gMCkge1xuXHRcdFx0XHRvdXRQYXRoID0gJy8nICsgb3V0UGF0aDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRyYWxpbmcgLyBpZiBpdCdzIG5lZWRlZFxuXHRcdFx0aWYgKHRyICYmIG91dFBhdGgubGFzdEluZGV4T2YoJy8nKSAhPT0gb3V0UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdG91dFBhdGggKz0gdHI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvdXRQYXRoO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBmdWxsIFVSSSBvZiB0aGUgaW50ZXJuYWwgc3RydWN0dXJlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRVUklcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IG5vUHJvdG9Ib3N0IE9wdGlvbmFsIG5vIGhvc3QgYW5kIHByb3RvY29sIHBhcnQuIERlZmF1bHRzIHRvIGZhbHNlLlxuXHRcdCAqL1xuXHRcdGdldFVSSTogZnVuY3Rpb24obm9Qcm90b0hvc3QpIHtcblx0XHRcdHZhciBzLCBzZWxmID0gdGhpcztcblxuXHRcdFx0Ly8gUmVidWlsZCBzb3VyY2Vcblx0XHRcdGlmICghc2VsZi5zb3VyY2UgfHwgbm9Qcm90b0hvc3QpIHtcblx0XHRcdFx0cyA9ICcnO1xuXG5cdFx0XHRcdGlmICghbm9Qcm90b0hvc3QpIHtcblx0XHRcdFx0XHRpZiAoc2VsZi5wcm90b2NvbCkge1xuXHRcdFx0XHRcdFx0cyArPSBzZWxmLnByb3RvY29sICsgJzovLyc7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHMgKz0gJy8vJztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc2VsZi51c2VySW5mbykge1xuXHRcdFx0XHRcdFx0cyArPSBzZWxmLnVzZXJJbmZvICsgJ0AnO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChzZWxmLmhvc3QpIHtcblx0XHRcdFx0XHRcdHMgKz0gc2VsZi5ob3N0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChzZWxmLnBvcnQpIHtcblx0XHRcdFx0XHRcdHMgKz0gJzonICsgc2VsZi5wb3J0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzZWxmLnBhdGgpIHtcblx0XHRcdFx0XHRzICs9IHNlbGYucGF0aDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzZWxmLnF1ZXJ5KSB7XG5cdFx0XHRcdFx0cyArPSAnPycgKyBzZWxmLnF1ZXJ5O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNlbGYuYW5jaG9yKSB7XG5cdFx0XHRcdFx0cyArPSAnIycgKyBzZWxmLmFuY2hvcjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYuc291cmNlID0gcztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGYuc291cmNlO1xuXHRcdH1cblx0fTtcblxuXHRVUkkucGFyc2VEYXRhVXJpID0gZnVuY3Rpb24odXJpKSB7XG5cdFx0dmFyIHR5cGUsIG1hdGNoZXM7XG5cblx0XHR1cmkgPSBkZWNvZGVVUklDb21wb25lbnQodXJpKS5zcGxpdCgnLCcpO1xuXG5cdFx0bWF0Y2hlcyA9IC9kYXRhOihbXjtdKykvLmV4ZWModXJpWzBdKTtcblx0XHRpZiAobWF0Y2hlcykge1xuXHRcdFx0dHlwZSA9IG1hdGNoZXNbMV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiB1cmlbMV1cblx0XHR9O1xuXHR9O1xuXG5cdFVSSS5nZXREb2N1bWVudEJhc2VVcmwgPSBmdW5jdGlvbihsb2MpIHtcblx0XHR2YXIgYmFzZVVybDtcblxuXHRcdC8vIFBhc3MgYXBwbGV3ZWJkYXRhOi8vIGFuZCBvdGhlciBub24gd2ViIHByb3RvY29scyB0aG91Z2hcblx0XHRpZiAobG9jLnByb3RvY29sLmluZGV4T2YoJ2h0dHAnKSAhPT0gMCAmJiBsb2MucHJvdG9jb2wgIT09ICdmaWxlOicpIHtcblx0XHRcdGJhc2VVcmwgPSBsb2MuaHJlZjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmFzZVVybCA9IGxvYy5wcm90b2NvbCArICcvLycgKyBsb2MuaG9zdCArIGxvYy5wYXRobmFtZTtcblx0XHR9XG5cblx0XHRpZiAoL15bXjpdKzpcXC9cXC9cXC8/W15cXC9dK1xcLy8udGVzdChiYXNlVXJsKSkge1xuXHRcdFx0YmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgvW1xcPyNdLiokLywgJycpLnJlcGxhY2UoL1tcXC9cXFxcXVteXFwvXSskLywgJycpO1xuXG5cdFx0XHRpZiAoIS9bXFwvXFxcXF0kLy50ZXN0KGJhc2VVcmwpKSB7XG5cdFx0XHRcdGJhc2VVcmwgKz0gJy8nO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBiYXNlVXJsO1xuXHR9O1xuXG5cdHJldHVybiBVUkk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3V0aWwvQ2xhc3MuanNcblxuLyoqXG4gKiBDbGFzcy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgdXRpbGl0aXkgY2xhc3MgaXMgdXNlZCBmb3IgZWFzaWVyIGluaGVyaXRhbmNlLlxuICpcbiAqIEZlYXR1cmVzOlxuICogKiBFeHBvc2VkIHN1cGVyIGZ1bmN0aW9uczogdGhpcy5fc3VwZXIoKTtcbiAqICogTWl4aW5zXG4gKiAqIER1bW15IGZ1bmN0aW9uc1xuICogKiBQcm9wZXJ0eSBmdW5jdGlvbnM6IHZhciB2YWx1ZSA9IG9iamVjdC52YWx1ZSgpOyBhbmQgb2JqZWN0LnZhbHVlKG5ld1ZhbHVlKTtcbiAqICogU3RhdGljIGZ1bmN0aW9uc1xuICogKiBEZWZhdWx0cyBzZXR0aW5nc1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL3V0aWwvQ2xhc3NcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihUb29scykge1xuXHR2YXIgZWFjaCA9IFRvb2xzLmVhY2gsIGV4dGVuZCA9IFRvb2xzLmV4dGVuZDtcblxuXHR2YXIgZXh0ZW5kQ2xhc3MsIGluaXRpYWxpemluZztcblxuXHRmdW5jdGlvbiBDbGFzcygpIHtcblx0fVxuXG5cdC8vIFByb3ZpZGVzIGNsYXNzaWNhbCBpbmhlcml0YW5jZSwgYmFzZWQgb24gY29kZSBtYWRlIGJ5IEpvaG4gUmVzaWdcblx0Q2xhc3MuZXh0ZW5kID0gZXh0ZW5kQ2xhc3MgPSBmdW5jdGlvbihwcm9wKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCBfc3VwZXIgPSBzZWxmLnByb3RvdHlwZSwgcHJvdG90eXBlLCBuYW1lLCBtZW1iZXI7XG5cblx0XHQvLyBUaGUgZHVtbXkgY2xhc3MgY29uc3RydWN0b3Jcblx0XHRmdW5jdGlvbiBDbGFzcygpIHtcblx0XHRcdHZhciBpLCBtaXhpbnMsIG1peGluLCBzZWxmID0gdGhpcztcblxuXHRcdFx0Ly8gQWxsIGNvbnN0cnVjdGlvbiBpcyBhY3R1YWxseSBkb25lIGluIHRoZSBpbml0IG1ldGhvZFxuXHRcdFx0aWYgKCFpbml0aWFsaXppbmcpIHtcblx0XHRcdFx0Ly8gUnVuIGNsYXNzIGNvbnN0dWN0b3Jcblx0XHRcdFx0aWYgKHNlbGYuaW5pdCkge1xuXHRcdFx0XHRcdHNlbGYuaW5pdC5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUnVuIG1peGluIGNvbnN0cnVjdG9yc1xuXHRcdFx0XHRtaXhpbnMgPSBzZWxmLk1peGlucztcblx0XHRcdFx0aWYgKG1peGlucykge1xuXHRcdFx0XHRcdGkgPSBtaXhpbnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRcdG1peGluID0gbWl4aW5zW2ldO1xuXHRcdFx0XHRcdFx0aWYgKG1peGluLmluaXQpIHtcblx0XHRcdFx0XHRcdFx0bWl4aW4uaW5pdC5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIER1bW15IGZ1bmN0aW9uLCBuZWVkcyB0byBiZSBleHRlbmRlZCBpbiBvcmRlciB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHlcblx0XHRmdW5jdGlvbiBkdW1teSgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZXMgYSBvdmVybG9hZGVkIG1ldGhvZCBmb3IgdGhlIGNsYXNzXG5cdFx0Ly8gdGhpcyBlbmFibGVzIHlvdSB0byB1c2UgdGhpcy5fc3VwZXIoKTsgdG8gY2FsbCB0aGUgc3VwZXIgZnVuY3Rpb25cblx0XHRmdW5jdGlvbiBjcmVhdGVNZXRob2QobmFtZSwgZm4pIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHNlbGYgPSB0aGlzLCB0bXAgPSBzZWxmLl9zdXBlciwgcmV0O1xuXG5cdFx0XHRcdHNlbGYuX3N1cGVyID0gX3N1cGVyW25hbWVdO1xuXHRcdFx0XHRyZXQgPSBmbi5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRzZWxmLl9zdXBlciA9IHRtcDtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBJbnN0YW50aWF0ZSBhIGJhc2UgY2xhc3MgKGJ1dCBvbmx5IGNyZWF0ZSB0aGUgaW5zdGFuY2UsXG5cdFx0Ly8gZG9uJ3QgcnVuIHRoZSBpbml0IGNvbnN0cnVjdG9yKVxuXHRcdGluaXRpYWxpemluZyA9IHRydWU7XG5cblx0XHQvKmVzbGludCBuZXctY2FwOjAgKi9cblx0XHRwcm90b3R5cGUgPSBuZXcgc2VsZigpO1xuXHRcdGluaXRpYWxpemluZyA9IGZhbHNlO1xuXG5cdFx0Ly8gQWRkIG1peGluc1xuXHRcdGlmIChwcm9wLk1peGlucykge1xuXHRcdFx0ZWFjaChwcm9wLk1peGlucywgZnVuY3Rpb24obWl4aW4pIHtcblx0XHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBtaXhpbikge1xuXHRcdFx0XHRcdGlmIChuYW1lICE9PSBcImluaXRcIikge1xuXHRcdFx0XHRcdFx0cHJvcFtuYW1lXSA9IG1peGluW25hbWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChfc3VwZXIuTWl4aW5zKSB7XG5cdFx0XHRcdHByb3AuTWl4aW5zID0gX3N1cGVyLk1peGlucy5jb25jYXQocHJvcC5NaXhpbnMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEdlbmVyYXRlIGR1bW15IG1ldGhvZHNcblx0XHRpZiAocHJvcC5NZXRob2RzKSB7XG5cdFx0XHRlYWNoKHByb3AuTWV0aG9kcy5zcGxpdCgnLCcpLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRcdHByb3BbbmFtZV0gPSBkdW1teTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIEdlbmVyYXRlIHByb3BlcnR5IG1ldGhvZHNcblx0XHRpZiAocHJvcC5Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRlYWNoKHByb3AuUHJvcGVydGllcy5zcGxpdCgnLCcpLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRcdHZhciBmaWVsZE5hbWUgPSAnXycgKyBuYW1lO1xuXG5cdFx0XHRcdHByb3BbbmFtZV0gPSBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0XHRcdHZhciBzZWxmID0gdGhpcywgdW5kZWY7XG5cblx0XHRcdFx0XHQvLyBTZXQgdmFsdWVcblx0XHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0XHRzZWxmW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gR2V0IHZhbHVlXG5cdFx0XHRcdFx0cmV0dXJuIHNlbGZbZmllbGROYW1lXTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIFN0YXRpYyBmdW5jdGlvbnNcblx0XHRpZiAocHJvcC5TdGF0aWNzKSB7XG5cdFx0XHRlYWNoKHByb3AuU3RhdGljcywgZnVuY3Rpb24oZnVuYywgbmFtZSkge1xuXHRcdFx0XHRDbGFzc1tuYW1lXSA9IGZ1bmM7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IHNldHRpbmdzXG5cdFx0aWYgKHByb3AuRGVmYXVsdHMgJiYgX3N1cGVyLkRlZmF1bHRzKSB7XG5cdFx0XHRwcm9wLkRlZmF1bHRzID0gZXh0ZW5kKHt9LCBfc3VwZXIuRGVmYXVsdHMsIHByb3AuRGVmYXVsdHMpO1xuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb3ZlciBvbnRvIHRoZSBuZXcgcHJvdG90eXBlXG5cdFx0Zm9yIChuYW1lIGluIHByb3ApIHtcblx0XHRcdG1lbWJlciA9IHByb3BbbmFtZV07XG5cblx0XHRcdGlmICh0eXBlb2YgbWVtYmVyID09IFwiZnVuY3Rpb25cIiAmJiBfc3VwZXJbbmFtZV0pIHtcblx0XHRcdFx0cHJvdG90eXBlW25hbWVdID0gY3JlYXRlTWV0aG9kKG5hbWUsIG1lbWJlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwcm90b3R5cGVbbmFtZV0gPSBtZW1iZXI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUG9wdWxhdGUgb3VyIGNvbnN0cnVjdGVkIHByb3RvdHlwZSBvYmplY3Rcblx0XHRDbGFzcy5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG5cblx0XHQvLyBFbmZvcmNlIHRoZSBjb25zdHJ1Y3RvciB0byBiZSB3aGF0IHdlIGV4cGVjdFxuXHRcdENsYXNzLmNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cblx0XHQvLyBBbmQgbWFrZSB0aGlzIGNsYXNzIGV4dGVuZGlibGVcblx0XHRDbGFzcy5leHRlbmQgPSBleHRlbmRDbGFzcztcblxuXHRcdHJldHVybiBDbGFzcztcblx0fTtcblxuXHRyZXR1cm4gQ2xhc3M7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3V0aWwvRXZlbnREaXNwYXRjaGVyLmpzXG5cbi8qKlxuICogRXZlbnREaXNwYXRjaGVyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBsZXRzIHlvdSBhZGQvcmVtb3ZlIGFuZCBmaXJlIGV2ZW50cyBieSBuYW1lIG9uIHRoZSBzcGVjaWZpZWQgc2NvcGUuIFRoaXMgbWFrZXNcbiAqIGl0IGVhc3kgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIGxvZ2ljIHRvIGFueSBjbGFzcy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51dGlsLkV2ZW50RGlzcGF0Y2hlclxuICogQGV4YW1wbGVcbiAqICB2YXIgZXZlbnREaXNwYXRjaGVyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcigpO1xuICpcbiAqICBldmVudERpc3BhdGNoZXIub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7Y29uc29sZS5sb2coJ2RhdGEnKTt9KTtcbiAqICBldmVudERpc3BhdGNoZXIuZmlyZSgnY2xpY2snLCB7ZGF0YTogMTIzfSk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9FdmVudERpc3BhdGNoZXJcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihUb29scykge1xuXHR2YXIgbmF0aXZlRXZlbnRzID0gVG9vbHMubWFrZU1hcChcblx0XHRcImZvY3VzIGJsdXIgZm9jdXNpbiBmb2N1c291dCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIGJlZm9yZXBhc3RlIHBhc3RlIGN1dCBjb3B5IHNlbGVjdGlvbmNoYW5nZSBcIiArXG5cdFx0XCJtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgd2hlZWwga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCBjb250ZXh0bWVudSBkcmFnc3RhcnQgZHJhZ2VuZCBkcmFnb3ZlciBcIiArXG5cdFx0XCJkcmFnZ2VzdHVyZSBkcmFnZHJvcCBkcm9wIGRyYWcgc3VibWl0IFwiICtcblx0XHRcImNvbXBvc2l0aW9uc3RhcnQgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb251cGRhdGUgdG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmRcIixcblx0XHQnICdcblx0KTtcblxuXHRmdW5jdGlvbiBEaXNwYXRjaGVyKHNldHRpbmdzKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCBzY29wZSwgYmluZGluZ3MgPSB7fSwgdG9nZ2xlRXZlbnQ7XG5cblx0XHRmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0c2V0dGluZ3MgPSBzZXR0aW5ncyB8fCB7fTtcblx0XHRzY29wZSA9IHNldHRpbmdzLnNjb3BlIHx8IHNlbGY7XG5cdFx0dG9nZ2xlRXZlbnQgPSBzZXR0aW5ncy50b2dnbGVFdmVudCB8fCByZXR1cm5GYWxzZTtcblxuXHRcdC8qKlxuXHRcdCAqIEZpcmVzIHRoZSBzcGVjaWZpZWQgZXZlbnQgYnkgbmFtZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZmlyZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGZpcmUuXG5cdFx0ICogQHBhcmFtIHtPYmplY3Q/fSBhcmdzIEV2ZW50IGFyZ3VtZW50cy5cblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IEV2ZW50IGFyZ3MgaW5zdGFuY2UgcGFzc2VkIGluLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogaW5zdGFuY2UuZmlyZSgnZXZlbnQnLCB7Li4ufSk7XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZmlyZShuYW1lLCBhcmdzKSB7XG5cdFx0XHR2YXIgaGFuZGxlcnMsIGksIGwsIGNhbGxiYWNrO1xuXG5cdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0YXJncyA9IGFyZ3MgfHwge307XG5cdFx0XHRhcmdzLnR5cGUgPSBuYW1lO1xuXG5cdFx0XHQvLyBTZXR1cCB0YXJnZXQgaXMgdGhlcmUgaXNuJ3Qgb25lXG5cdFx0XHRpZiAoIWFyZ3MudGFyZ2V0KSB7XG5cdFx0XHRcdGFyZ3MudGFyZ2V0ID0gc2NvcGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBldmVudCBkZWxlZ2F0aW9uIG1ldGhvZHMgaWYgdGhleSBhcmUgbWlzc2luZ1xuXHRcdFx0aWYgKCFhcmdzLnByZXZlbnREZWZhdWx0KSB7XG5cdFx0XHRcdC8vIEFkZCBwcmV2ZW50RGVmYXVsdCBtZXRob2Rcblx0XHRcdFx0YXJncy5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGFyZ3MuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBBZGQgc3RvcFByb3BhZ2F0aW9uXG5cdFx0XHRcdGFyZ3Muc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0YXJncy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gQWRkIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvblxuXHRcdFx0XHRhcmdzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGFyZ3MuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIEFkZCBldmVudCBkZWxlZ2F0aW9uIHN0YXRlc1xuXHRcdFx0XHRhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVybkZhbHNlO1xuXHRcdFx0XHRhcmdzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuRmFsc2U7XG5cdFx0XHRcdGFyZ3MuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5GYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLmJlZm9yZUZpcmUpIHtcblx0XHRcdFx0c2V0dGluZ3MuYmVmb3JlRmlyZShhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0aGFuZGxlcnMgPSBiaW5kaW5nc1tuYW1lXTtcblx0XHRcdGlmIChoYW5kbGVycykge1xuXHRcdFx0XHRmb3IgKGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2sgPSBoYW5kbGVyc1tpXTtcblxuXHRcdFx0XHRcdC8vIFVuYmluZCBoYW5kbGVycyBtYXJrZWQgd2l0aCBcIm9uY2VcIlxuXHRcdFx0XHRcdGlmIChjYWxsYmFjay5vbmNlKSB7XG5cdFx0XHRcdFx0XHRvZmYobmFtZSwgY2FsbGJhY2suZnVuYyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3RvcCBpbW1lZGlhdGUgcHJvcGFnYXRpb24gaWYgbmVlZGVkXG5cdFx0XHRcdFx0aWYgKGFyZ3MuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuXHRcdFx0XHRcdFx0YXJncy5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdHJldHVybiBhcmdzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIElmIGNhbGxiYWNrIHJldHVybnMgZmFsc2UgdGhlbiBwcmV2ZW50IGRlZmF1bHQgYW5kIHN0b3AgYWxsIHByb3BhZ2F0aW9uXG5cdFx0XHRcdFx0aWYgKGNhbGxiYWNrLmZ1bmMuY2FsbChzY29wZSwgYXJncykgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRhcmdzLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXJncztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGFyZ3M7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQmluZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gYSBzcGVjaWZpYyBldmVudCBieSBuYW1lLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBvblxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUgb3Igc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZXZlbnRzIHRvIGJpbmQuXG5cdFx0ICogQHBhcmFtIHtjYWxsYmFja30gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgZXZlbnQgb2NjdXJzLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gZmlyc3QgT3B0aW9uYWwgZmxhZyBpZiB0aGUgZXZlbnQgc2hvdWxkIGJlIHByZXBlbmRlZC4gVXNlIHRoaXMgd2l0aCBjYXJlLlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjbGFzcyBpbnN0YW5jZS5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGluc3RhbmNlLm9uKCdldmVudCcsIGZ1bmN0aW9uKGUpIHtcblx0XHQgKiAgICAgLy8gQ2FsbGJhY2sgbG9naWNcblx0XHQgKiB9KTtcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBvbihuYW1lLCBjYWxsYmFjaywgcHJlcGVuZCwgZXh0cmEpIHtcblx0XHRcdHZhciBoYW5kbGVycywgbmFtZXMsIGk7XG5cblx0XHRcdGlmIChjYWxsYmFjayA9PT0gZmFsc2UpIHtcblx0XHRcdFx0Y2FsbGJhY2sgPSByZXR1cm5GYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHRcdGNhbGxiYWNrID0ge1xuXHRcdFx0XHRcdGZ1bmM6IGNhbGxiYWNrXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKGV4dHJhKSB7XG5cdFx0XHRcdFx0VG9vbHMuZXh0ZW5kKGNhbGxiYWNrLCBleHRyYSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRuYW1lcyA9IG5hbWUudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xuXHRcdFx0XHRpID0gbmFtZXMubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0bmFtZSA9IG5hbWVzW2ldO1xuXHRcdFx0XHRcdGhhbmRsZXJzID0gYmluZGluZ3NbbmFtZV07XG5cdFx0XHRcdFx0aWYgKCFoYW5kbGVycykge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMgPSBiaW5kaW5nc1tuYW1lXSA9IFtdO1xuXHRcdFx0XHRcdFx0dG9nZ2xlRXZlbnQobmFtZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHByZXBlbmQpIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLnVuc2hpZnQoY2FsbGJhY2spO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogVW5iaW5kcyBhbiBldmVudCBsaXN0ZW5lciB0byBhIHNwZWNpZmljIGV2ZW50IGJ5IG5hbWUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG9mZlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nP30gbmFtZSBOYW1lIG9mIHRoZSBldmVudCB0byB1bmJpbmQuXG5cdFx0ICogQHBhcmFtIHtjYWxsYmFjaz99IGNhbGxiYWNrIENhbGxiYWNrIHRvIHVuYmluZC5cblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2xhc3MgaW5zdGFuY2UuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBVbmJpbmQgc3BlY2lmaWMgY2FsbGJhY2tcblx0XHQgKiBpbnN0YW5jZS5vZmYoJ2V2ZW50JywgaGFuZGxlcik7XG5cdFx0ICpcblx0XHQgKiAvLyBVbmJpbmQgYWxsIGxpc3RlbmVycyBieSBuYW1lXG5cdFx0ICogaW5zdGFuY2Uub2ZmKCdldmVudCcpO1xuXHRcdCAqXG5cdFx0ICogLy8gVW5iaW5kIGFsbCBldmVudHNcblx0XHQgKiBpbnN0YW5jZS5vZmYoKTtcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBvZmYobmFtZSwgY2FsbGJhY2spIHtcblx0XHRcdHZhciBpLCBoYW5kbGVycywgYmluZGluZ05hbWUsIG5hbWVzLCBoaTtcblxuXHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0bmFtZXMgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKTtcblx0XHRcdFx0aSA9IG5hbWVzLmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdG5hbWUgPSBuYW1lc1tpXTtcblx0XHRcdFx0XHRoYW5kbGVycyA9IGJpbmRpbmdzW25hbWVdO1xuXG5cdFx0XHRcdFx0Ly8gVW5iaW5kIGFsbCBoYW5kbGVyc1xuXHRcdFx0XHRcdGlmICghbmFtZSkge1xuXHRcdFx0XHRcdFx0Zm9yIChiaW5kaW5nTmFtZSBpbiBiaW5kaW5ncykge1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVFdmVudChiaW5kaW5nTmFtZSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ3NbYmluZGluZ05hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gc2VsZjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaGFuZGxlcnMpIHtcblx0XHRcdFx0XHRcdC8vIFVuYmluZCBhbGwgYnkgbmFtZVxuXHRcdFx0XHRcdFx0aWYgKCFjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRoYW5kbGVycy5sZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVW5iaW5kIHNwZWNpZmljIG9uZXNcblx0XHRcdFx0XHRcdFx0aGkgPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdHdoaWxlIChoaS0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGhhbmRsZXJzW2hpXS5mdW5jID09PSBjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFuZGxlcnMgPSBoYW5kbGVycy5zbGljZSgwLCBoaSkuY29uY2F0KGhhbmRsZXJzLnNsaWNlKGhpICsgMSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0YmluZGluZ3NbbmFtZV0gPSBoYW5kbGVycztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKCFoYW5kbGVycy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0dG9nZ2xlRXZlbnQobmFtZSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ3NbbmFtZV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKG5hbWUgaW4gYmluZGluZ3MpIHtcblx0XHRcdFx0XHR0b2dnbGVFdmVudChuYW1lLCBmYWxzZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiaW5kaW5ncyA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBCaW5kcyBhbiBldmVudCBsaXN0ZW5lciB0byBhIHNwZWNpZmljIGV2ZW50IGJ5IG5hbWVcblx0XHQgKiBhbmQgYXV0b21hdGljYWxseSB1bmJpbmQgdGhlIGV2ZW50IG9uY2UgdGhlIGNhbGxiYWNrIGZpcmVzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBvbmNlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSBvciBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBldmVudHMgdG8gYmluZC5cblx0XHQgKiBAcGFyYW0ge2NhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBldmVudCBvY2N1cnMuXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBmaXJzdCBPcHRpb25hbCBmbGFnIGlmIHRoZSBldmVudCBzaG91bGQgYmUgcHJlcGVuZGVkLiBVc2UgdGhpcyB3aXRoIGNhcmUuXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNsYXNzIGluc3RhbmNlLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogaW5zdGFuY2Uub25jZSgnZXZlbnQnLCBmdW5jdGlvbihlKSB7XG5cdFx0ICogICAgIC8vIENhbGxiYWNrIGxvZ2ljXG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gb25jZShuYW1lLCBjYWxsYmFjaywgcHJlcGVuZCkge1xuXHRcdFx0cmV0dXJuIG9uKG5hbWUsIGNhbGxiYWNrLCBwcmVwZW5kLCB7b25jZTogdHJ1ZX0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgZGlzcGF0Y2hlciBoYXMgYSBldmVudCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGhhc1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGNoZWNrIGZvci5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBldmVudCBleGlzdHMgb3Igbm90LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGhhcyhuYW1lKSB7XG5cdFx0XHRuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICEoIWJpbmRpbmdzW25hbWVdIHx8IGJpbmRpbmdzW25hbWVdLmxlbmd0aCA9PT0gMCk7XG5cdFx0fVxuXG5cdFx0Ly8gRXhwb3NlXG5cdFx0c2VsZi5maXJlID0gZmlyZTtcblx0XHRzZWxmLm9uID0gb247XG5cdFx0c2VsZi5vZmYgPSBvZmY7XG5cdFx0c2VsZi5vbmNlID0gb25jZTtcblx0XHRzZWxmLmhhcyA9IGhhcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIHNwZWNpZmllZCBldmVudCBuYW1lIGlzIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgb3Igbm90LlxuXHQgKlxuXHQgKiBAbWV0aG9kIGlzTmF0aXZlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgdG8gY2hlY2sgaWYgaXQncyBuYXRpdmUuXG5cdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIGV2ZW50IGlzIG5hdGl2ZSBvciBub3QuXG5cdCAqIEBzdGF0aWNcblx0ICovXG5cdERpc3BhdGNoZXIuaXNOYXRpdmUgPSBmdW5jdGlvbihuYW1lKSB7XG5cdFx0cmV0dXJuICEhbmF0aXZlRXZlbnRzW25hbWUudG9Mb3dlckNhc2UoKV07XG5cdH07XG5cblx0cmV0dXJuIERpc3BhdGNoZXI7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2RhdGEvQmluZGluZy5qc1xuXG4vKipcbiAqIEJpbmRpbmcuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGdldHMgZHluYW1pY2FsbHkgZXh0ZW5kZWQgdG8gcHJvdmlkZSBhIGJpbmRpbmcgYmV0d2VlbiB0d28gbW9kZWxzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvXG4gKiBzeW5jIHRoZSBzdGF0ZSBvZiB0d28gcHJvcGVydGllcyBpbiB0d28gbW9kZWxzIGJ5IGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmRhdGEuQmluZGluZ1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL2RhdGEvQmluZGluZ1wiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIGEgbmV3IGJpZG5pbmcuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAbWV0aG9kIEJpbmRpbmdcblx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIFNldHRpbmdzIHRvIHRoZSBiaW5kaW5nLlxuXHQgKi9cblx0ZnVuY3Rpb24gQmluZGluZyhzZXR0aW5ncykge1xuXHRcdHRoaXMuY3JlYXRlID0gc2V0dGluZ3MuY3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBiaW5kaW5nIGZvciBhIHByb3BlcnR5IG9uIGEgbW9kZWwuXG5cdCAqXG5cdCAqIEBtZXRob2QgY3JlYXRlXG5cdCAqIEBwYXJhbSB7dGlueW1jZS5kYXRhLk9ic2VydmFibGVPYmplY3R9IG1vZGVsIE1vZGVsIHRvIGNyZWF0ZSBiaW5kaW5nIHRvLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHByb3BlcnR5IHRvIGJpbmQuXG5cdCAqIEByZXR1cm4ge3RpbnltY2UuZGF0YS5CaW5kaW5nfSBCaW5kaW5nIGluc3RhbmNlLlxuXHQgKi9cblx0QmluZGluZy5jcmVhdGUgPSBmdW5jdGlvbihtb2RlbCwgbmFtZSkge1xuXHRcdHJldHVybiBuZXcgQmluZGluZyh7XG5cdFx0XHRjcmVhdGU6IGZ1bmN0aW9uKG90aGVyTW9kZWwsIG90aGVyTmFtZSkge1xuXHRcdFx0XHR2YXIgYmluZGluZ3M7XG5cblx0XHRcdFx0ZnVuY3Rpb24gZnJvbVNlbGZUb090aGVyKGUpIHtcblx0XHRcdFx0XHRvdGhlck1vZGVsLnNldChvdGhlck5hbWUsIGUudmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZnVuY3Rpb24gZnJvbU90aGVyVG9TZWxmKGUpIHtcblx0XHRcdFx0XHRtb2RlbC5zZXQobmFtZSwgZS52YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvdGhlck1vZGVsLm9uKCdjaGFuZ2U6JyArIG90aGVyTmFtZSwgZnJvbU90aGVyVG9TZWxmKTtcblx0XHRcdFx0bW9kZWwub24oJ2NoYW5nZTonICsgbmFtZSwgZnJvbVNlbGZUb090aGVyKTtcblxuXHRcdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHRoZSBiaW5kaW5nc1xuXHRcdFx0XHRiaW5kaW5ncyA9IG90aGVyTW9kZWwuX2JpbmRpbmdzO1xuXG5cdFx0XHRcdGlmICghYmluZGluZ3MpIHtcblx0XHRcdFx0XHRiaW5kaW5ncyA9IG90aGVyTW9kZWwuX2JpbmRpbmdzID0gW107XG5cblx0XHRcdFx0XHRvdGhlck1vZGVsLm9uKCdkZXN0cm95JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgaSA9IGJpbmRpbmdzLmxlbmd0aDtcblxuXHRcdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0XHRiaW5kaW5nc1tpXSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmluZGluZ3MucHVzaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRtb2RlbC5vZmYoJ2NoYW5nZTonICsgbmFtZSwgZnJvbVNlbGZUb090aGVyKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIG1vZGVsLmdldChuYW1lKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblxuXHRyZXR1cm4gQmluZGluZztcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9PYnNlcnZhYmxlLmpzXG5cbi8qKlxuICogT2JzZXJ2YWJsZS5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgbWl4aW4gd2lsbCBhZGQgZXZlbnQgYmluZGluZyBsb2dpYyB0byBjbGFzc2VzLlxuICpcbiAqIEBtaXhpbiB0aW55bWNlLnV0aWwuT2JzZXJ2YWJsZVxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3V0aWwvT2JzZXJ2YWJsZVwiLCBbXG5cdFwidGlueW1jZS91dGlsL0V2ZW50RGlzcGF0Y2hlclwiXG5dLCBmdW5jdGlvbihFdmVudERpc3BhdGNoZXIpIHtcblx0ZnVuY3Rpb24gZ2V0RXZlbnREaXNwYXRjaGVyKG9iaikge1xuXHRcdGlmICghb2JqLl9ldmVudERpc3BhdGNoZXIpIHtcblx0XHRcdG9iai5fZXZlbnREaXNwYXRjaGVyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcih7XG5cdFx0XHRcdHNjb3BlOiBvYmosXG5cdFx0XHRcdHRvZ2dsZUV2ZW50OiBmdW5jdGlvbihuYW1lLCBzdGF0ZSkge1xuXHRcdFx0XHRcdGlmIChFdmVudERpc3BhdGNoZXIuaXNOYXRpdmUobmFtZSkgJiYgb2JqLnRvZ2dsZU5hdGl2ZUV2ZW50KSB7XG5cdFx0XHRcdFx0XHRvYmoudG9nZ2xlTmF0aXZlRXZlbnQobmFtZSwgc3RhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iai5fZXZlbnREaXNwYXRjaGVyO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQvKipcblx0XHQgKiBGaXJlcyB0aGUgc3BlY2lmaWVkIGV2ZW50IGJ5IG5hbWUuIENvbnN1bHQgdGhlXG5cdFx0ICogPGEgaHJlZj1cIi9kb2NzL2FkdmFuY2VkL2V2ZW50c1wiPmV2ZW50IHJlZmVyZW5jZTwvYT4gZm9yIG1vcmUgZGV0YWlscyBvbiBlYWNoIGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBmaXJlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZXZlbnQgdG8gZmlyZS5cblx0XHQgKiBAcGFyYW0ge09iamVjdD99IGFyZ3MgRXZlbnQgYXJndW1lbnRzLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbj99IGJ1YmJsZSBUcnVlL2ZhbHNlIGlmIHRoZSBldmVudCBpcyB0byBiZSBidWJibGVkLlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gRXZlbnQgYXJncyBpbnN0YW5jZSBwYXNzZWQgaW4uXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBpbnN0YW5jZS5maXJlKCdldmVudCcsIHsuLi59KTtcblx0XHQgKi9cblx0XHRmaXJlOiBmdW5jdGlvbihuYW1lLCBhcmdzLCBidWJibGUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0Ly8gUHJldmVudCBhbGwgZXZlbnRzIGV4Y2VwdCB0aGUgcmVtb3ZlIGV2ZW50IGFmdGVyIHRoZSBpbnN0YW5jZSBoYXMgYmVlbiByZW1vdmVkXG5cdFx0XHRpZiAoc2VsZi5yZW1vdmVkICYmIG5hbWUgIT09IFwicmVtb3ZlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGFyZ3M7XG5cdFx0XHR9XG5cblx0XHRcdGFyZ3MgPSBnZXRFdmVudERpc3BhdGNoZXIoc2VsZikuZmlyZShuYW1lLCBhcmdzLCBidWJibGUpO1xuXG5cdFx0XHQvLyBCdWJibGUgZXZlbnQgdXAgdG8gcGFyZW50c1xuXHRcdFx0aWYgKGJ1YmJsZSAhPT0gZmFsc2UgJiYgc2VsZi5wYXJlbnQpIHtcblx0XHRcdFx0dmFyIHBhcmVudCA9IHNlbGYucGFyZW50KCk7XG5cdFx0XHRcdHdoaWxlIChwYXJlbnQgJiYgIWFyZ3MuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuXHRcdFx0XHRcdHBhcmVudC5maXJlKG5hbWUsIGFyZ3MsIGZhbHNlKTtcblx0XHRcdFx0XHRwYXJlbnQgPSBwYXJlbnQucGFyZW50KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGFyZ3M7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEJpbmRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGEgc3BlY2lmaWMgZXZlbnQgYnkgbmFtZS4gQ29uc3VsdCB0aGVcblx0XHQgKiA8YSBocmVmPVwiL2RvY3MvYWR2YW5jZWQvZXZlbnRzXCI+ZXZlbnQgcmVmZXJlbmNlPC9hPiBmb3IgbW9yZSBkZXRhaWxzIG9uIGVhY2ggZXZlbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG9uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSBvciBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBldmVudHMgdG8gYmluZC5cblx0XHQgKiBAcGFyYW0ge2NhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBldmVudCBvY2N1cnMuXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBmaXJzdCBPcHRpb25hbCBmbGFnIGlmIHRoZSBldmVudCBzaG91bGQgYmUgcHJlcGVuZGVkLiBVc2UgdGhpcyB3aXRoIGNhcmUuXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNsYXNzIGluc3RhbmNlLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogaW5zdGFuY2Uub24oJ2V2ZW50JywgZnVuY3Rpb24oZSkge1xuXHRcdCAqICAgICAvLyBDYWxsYmFjayBsb2dpY1xuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHRcdG9uOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaywgcHJlcGVuZCkge1xuXHRcdFx0cmV0dXJuIGdldEV2ZW50RGlzcGF0Y2hlcih0aGlzKS5vbihuYW1lLCBjYWxsYmFjaywgcHJlcGVuZCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFVuYmluZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gYSBzcGVjaWZpYyBldmVudCBieSBuYW1lLiBDb25zdWx0IHRoZVxuXHRcdCAqIDxhIGhyZWY9XCIvZG9jcy9hZHZhbmNlZC9ldmVudHNcIj5ldmVudCByZWZlcmVuY2U8L2E+IGZvciBtb3JlIGRldGFpbHMgb24gZWFjaCBldmVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgb2ZmXG5cdFx0ICogQHBhcmFtIHtTdHJpbmc/fSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIHVuYmluZC5cblx0XHQgKiBAcGFyYW0ge2NhbGxiYWNrP30gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gdW5iaW5kLlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjbGFzcyBpbnN0YW5jZS5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIFVuYmluZCBzcGVjaWZpYyBjYWxsYmFja1xuXHRcdCAqIGluc3RhbmNlLm9mZignZXZlbnQnLCBoYW5kbGVyKTtcblx0XHQgKlxuXHRcdCAqIC8vIFVuYmluZCBhbGwgbGlzdGVuZXJzIGJ5IG5hbWVcblx0XHQgKiBpbnN0YW5jZS5vZmYoJ2V2ZW50Jyk7XG5cdFx0ICpcblx0XHQgKiAvLyBVbmJpbmQgYWxsIGV2ZW50c1xuXHRcdCAqIGluc3RhbmNlLm9mZigpO1xuXHRcdCAqL1xuXHRcdG9mZjogZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcblx0XHRcdHJldHVybiBnZXRFdmVudERpc3BhdGNoZXIodGhpcykub2ZmKG5hbWUsIGNhbGxiYWNrKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQmluZCB0aGUgZXZlbnQgY2FsbGJhY2sgYW5kIG9uY2UgaXQgZmlyZXMgdGhlIGNhbGxiYWNrIGlzIHJlbW92ZWQuIENvbnN1bHQgdGhlXG5cdFx0ICogPGEgaHJlZj1cIi9kb2NzL2FkdmFuY2VkL2V2ZW50c1wiPmV2ZW50IHJlZmVyZW5jZTwvYT4gZm9yIG1vcmUgZGV0YWlscyBvbiBlYWNoIGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBvbmNlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZXZlbnQgdG8gYmluZC5cblx0XHQgKiBAcGFyYW0ge2NhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayB0byBiaW5kIG9ubHkgb25jZS5cblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2xhc3MgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0b25jZTogZnVuY3Rpb24obmFtZSwgY2FsbGJhY2spIHtcblx0XHRcdHJldHVybiBnZXRFdmVudERpc3BhdGNoZXIodGhpcykub25jZShuYW1lLCBjYWxsYmFjayk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgb2JqZWN0IGhhcyBhIGV2ZW50IG9mIHRoZSBzcGVjaWZpZWQgbmFtZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaGFzRXZlbnRMaXN0ZW5lcnNcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBldmVudCB0byBjaGVjayBmb3IuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZSBpZiB0aGUgZXZlbnQgZXhpc3RzIG9yIG5vdC5cblx0XHQgKi9cblx0XHRoYXNFdmVudExpc3RlbmVyczogZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0cmV0dXJuIGdldEV2ZW50RGlzcGF0Y2hlcih0aGlzKS5oYXMobmFtZSk7XG5cdFx0fVxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9kYXRhL09ic2VydmFibGVPYmplY3QuanNcblxuLyoqXG4gKiBPYnNlcnZhYmxlT2JqZWN0LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhIG9iamVjdCB0aGF0IGlzIG9ic2VydmFibGUgd2hlbiBwcm9wZXJ0aWVzIGNoYW5nZXMgYSBjaGFuZ2UgZXZlbnQgZ2V0cyBlbWl0dGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5kYXRhLk9ic2VydmFibGVPYmplY3RcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kYXRhL09ic2VydmFibGVPYmplY3RcIiwgW1xuXHRcInRpbnltY2UvZGF0YS9CaW5kaW5nXCIsXG5cdFwidGlueW1jZS91dGlsL09ic2VydmFibGVcIixcblx0XCJ0aW55bWNlL3V0aWwvQ2xhc3NcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxuXSwgZnVuY3Rpb24oQmluZGluZywgT2JzZXJ2YWJsZSwgQ2xhc3MsIFRvb2xzKSB7XG5cdGZ1bmN0aW9uIGlzTm9kZShub2RlKSB7XG5cdFx0cmV0dXJuIG5vZGUubm9kZVR5cGUgPiAwO1xuXHR9XG5cblx0Ly8gVG9kbzogTWF5YmUgdGhpcyBzaG91bGQgYmUgc2hhbGxvdyBjb21wYXJlIHNpbmNlIGl0IG1pZ2h0IGJlIGh1Z2Ugb2JqZWN0IHJlZmVyZW5jZXNcblx0ZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG5cdFx0dmFyIGssIGNoZWNrZWQ7XG5cblx0XHQvLyBTdHJpY3QgZXF1YWxzXG5cdFx0aWYgKGEgPT09IGIpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIENvbXBhcmUgbnVsbFxuXHRcdGlmIChhID09PSBudWxsIHx8IGIgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBhID09PSBiO1xuXHRcdH1cblxuXHRcdC8vIENvbXBhcmUgbnVtYmVyLCBib29sZWFuLCBzdHJpbmcsIHVuZGVmaW5lZFxuXHRcdGlmICh0eXBlb2YgYSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0cmV0dXJuIGEgPT09IGI7XG5cdFx0fVxuXG5cdFx0Ly8gQ29tcGFyZSBhcnJheXNcblx0XHRpZiAoVG9vbHMuaXNBcnJheShiKSkge1xuXHRcdFx0aWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGsgPSBhLmxlbmd0aDtcblx0XHRcdHdoaWxlIChrLS0pIHtcblx0XHRcdFx0aWYgKCFpc0VxdWFsKGFba10sIGJba10pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2hhbGxvdyBjb21wYXJlIG5vZGVzXG5cdFx0aWYgKGlzTm9kZShhKSB8fCBpc05vZGUoYikpIHtcblx0XHRcdHJldHVybiBhID09PSBiO1xuXHRcdH1cblxuXHRcdC8vIENvbXBhcmUgb2JqZWN0c1xuXHRcdGNoZWNrZWQgPSB7fTtcblx0XHRmb3IgKGsgaW4gYikge1xuXHRcdFx0aWYgKCFpc0VxdWFsKGFba10sIGJba10pKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y2hlY2tlZFtrXSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChrIGluIGEpIHtcblx0XHRcdGlmICghY2hlY2tlZFtrXSAmJiAhaXNFcXVhbChhW2tdLCBiW2tdKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gQ2xhc3MuZXh0ZW5kKHtcblx0XHRNaXhpbnM6IFtPYnNlcnZhYmxlXSxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnN0cnVjdHMgYSBuZXcgb2JzZXJ2YWJsZSBvYmplY3QgaW5zdGFuY2UuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YSBJbml0aWFsIGRhdGEgZm9yIHRoZSBvYmplY3QuXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oZGF0YSkge1xuXHRcdFx0dmFyIG5hbWUsIHZhbHVlO1xuXG5cdFx0XHRkYXRhID0gZGF0YSB8fCB7fTtcblxuXHRcdFx0Zm9yIChuYW1lIGluIGRhdGEpIHtcblx0XHRcdFx0dmFsdWUgPSBkYXRhW25hbWVdO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJpbmRpbmcpIHtcblx0XHRcdFx0XHRkYXRhW25hbWVdID0gdmFsdWUuY3JlYXRlKHRoaXMsIG5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGF0YSA9IGRhdGE7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgYSBwcm9wZXJ0eSBvbiB0aGUgdmFsdWUgdGhpcyB3aWxsIGNhbGxcblx0XHQgKiBvYnNlcnZlcnMgaWYgdGhlIHZhbHVlIGlzIGEgY2hhbmdlIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNldFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL29iamVjdH0gbmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQgb3IgYSBvYmplY3Qgb2YgaXRlbXMgdG8gc2V0LlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSBWYWx1ZSB0byBzZXQgZm9yIHRoZSBwcm9wZXJ0eS5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLmRhdGEuT2JzZXJ2YWJsZU9iamVjdH0gT2JzZXJ2YWJsZSBvYmplY3QgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0c2V0OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuXHRcdFx0dmFyIGtleSwgYXJncywgb2xkVmFsdWUgPSB0aGlzLmRhdGFbbmFtZV07XG5cblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJpbmRpbmcpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5jcmVhdGUodGhpcywgbmFtZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRmb3IgKGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXQoa2V5LCBuYW1lW2tleV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNFcXVhbChvbGRWYWx1ZSwgdmFsdWUpKSB7XG5cdFx0XHRcdHRoaXMuZGF0YVtuYW1lXSA9IHZhbHVlO1xuXG5cdFx0XHRcdGFyZ3MgPSB7XG5cdFx0XHRcdFx0dGFyZ2V0OiB0aGlzLFxuXHRcdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdG9sZFZhbHVlOiBvbGRWYWx1ZVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRoaXMuZmlyZSgnY2hhbmdlOicgKyBuYW1lLCBhcmdzKTtcblx0XHRcdFx0dGhpcy5maXJlKCdjaGFuZ2UnLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEdldHMgYSBwcm9wZXJ0eSBieSBuYW1lLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBPYmplY3QgdmFsdWUgb2YgcHJvcGVyeS5cblx0XHQgKi9cblx0XHRnZXQ6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdHJldHVybiB0aGlzLmRhdGFbbmFtZV07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGV4aXN0cy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaGFzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hlY2sgZm9yLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIGl0ZW0gZXhpc3RzLlxuXHRcdCAqL1xuXHRcdGhhczogZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0cmV0dXJuIG5hbWUgaW4gdGhpcy5kYXRhO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgZHluYW1pYyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IG5hbWUuIFRoaXMgbWFrZXNcblx0XHQgKiBpdCBwb3NzaWJsZSB0byBzeW5jIHRoZSBzdGF0ZSBvZiB0d28gcHJvcGVydGllcyBpbiB0d28gT2JzZXJ2YWJsZU9iamVjdCBpbnN0YW5jZXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGJpbmRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzeW5jIHdpdGggdGhlIHByb3BlcnR5IGl0J3MgaW5zZXJ0ZWQgdG8uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS5kYXRhLkJpbmRpbmd9IERhdGEgYmluZGluZyBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRiaW5kOiBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRyZXR1cm4gQmluZGluZy5jcmVhdGUodGhpcywgbmFtZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIERlc3Ryb3lzIHRoZSBvYnNlcnZhYmxlIG9iamVjdCBhbmQgZmlyZXMgdGhlIFwiZGVzdHJveVwiXG5cdFx0ICogZXZlbnQgYW5kIGNsZWFuIHVwIGFueSBpbnRlcm5hbCByZXNvdXJjZXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGRlc3Ryb3lcblx0XHQgKi9cblx0XHRkZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZmlyZSgnZGVzdHJveScpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1NlbGVjdG9yLmpzXG5cbi8qKlxuICogU2VsZWN0b3IuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyplc2xpbnQgbm8tbmVzdGVkLXRlcm5hcnk6MCAqL1xuXG4vKipcbiAqIFNlbGVjdG9yIGVuZ2luZSwgZW5hYmxlcyB5b3UgdG8gc2VsZWN0IGNvbnRyb2xzIGJ5IHVzaW5nIENTUyBsaWtlIGV4cHJlc3Npb25zLlxuICogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBiYXNpYyBDU1MgZXhwcmVzc2lvbnMgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBjb3JlXG4gKiBhbmQgdGhlIG9uZXMgd2Ugc3VwcG9ydCBzaG91bGQgYmUgZW5vdWdoIGZvciBtb3N0IGNhc2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTdXBwb3J0ZWQgZXhwcmVzc2lvbnM6XG4gKiAgZWxlbWVudFxuICogIGVsZW1lbnQjbmFtZVxuICogIGVsZW1lbnQuY2xhc3NcbiAqICBlbGVtZW50W2F0dHJdXG4gKiAgZWxlbWVudFthdHRyKj12YWx1ZV1cbiAqICBlbGVtZW50W2F0dHJ+PXZhbHVlXVxuICogIGVsZW1lbnRbYXR0ciE9dmFsdWVdXG4gKiAgZWxlbWVudFthdHRyXj12YWx1ZV1cbiAqICBlbGVtZW50W2F0dHIkPXZhbHVlXVxuICogIGVsZW1lbnQ6PHN0YXRlPlxuICogIGVsZW1lbnQ6bm90KDxleHByZXNzaW9uPilcbiAqICBlbGVtZW50OmZpcnN0XG4gKiAgZWxlbWVudDpsYXN0XG4gKiAgZWxlbWVudDpvZGRcbiAqICBlbGVtZW50OmV2ZW5cbiAqICBlbGVtZW50IGVsZW1lbnRcbiAqICBlbGVtZW50ID4gZWxlbWVudFxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLlNlbGVjdG9yXG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvU2VsZWN0b3JcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9DbGFzc1wiXG5dLCBmdW5jdGlvbihDbGFzcykge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvKipcblx0ICogUHJvZHVjZXMgYW4gYXJyYXkgd2l0aCBhIHVuaXF1ZSBzZXQgb2Ygb2JqZWN0cy4gSXQgd2lsbCBub3QgY29tcGFyZSB0aGUgdmFsdWVzXG5cdCAqIGJ1dCB0aGUgcmVmZXJlbmNlcyBvZiB0aGUgb2JqZWN0cy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQG1ldGhvZCB1bnFpdWVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgQXJyYXkgdG8gbWFrZSBpbnRvIGFuIGFycmF5IHdpdGggdW5pcXVlIGl0ZW1zLlxuXHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgd2l0aCB1bmlxdWUgaXRlbXMuXG5cdCAqL1xuXHRmdW5jdGlvbiB1bmlxdWUoYXJyYXkpIHtcblx0XHR2YXIgdW5pcXVlSXRlbXMgPSBbXSwgaSA9IGFycmF5Lmxlbmd0aCwgaXRlbTtcblxuXHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdGl0ZW0gPSBhcnJheVtpXTtcblxuXHRcdFx0aWYgKCFpdGVtLl9fY2hlY2tlZCkge1xuXHRcdFx0XHR1bmlxdWVJdGVtcy5wdXNoKGl0ZW0pO1xuXHRcdFx0XHRpdGVtLl9fY2hlY2tlZCA9IDE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aSA9IHVuaXF1ZUl0ZW1zLmxlbmd0aDtcblx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRkZWxldGUgdW5pcXVlSXRlbXNbaV0uX19jaGVja2VkO1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmlxdWVJdGVtcztcblx0fVxuXG5cdHZhciBleHByZXNzaW9uID0gL14oW1xcd1xcXFwqXSspPyg/OiMoW1xcd1xcLVxcXFxdKykpPyg/OlxcLihbXFx3XFxcXFxcLl0rKSk/KD86XFxbXFxAPyhbXFx3XFxcXF0rKShbXFxeXFwkXFwqIX5dPz0pKFtcXHdcXFxcXSspXFxdKT8oPzpcXDooLispKT8vaTtcblxuXHQvKmpzaGludCBtYXhsZW46MjU1ICovXG5cdC8qZXNsaW50IG1heC1sZW46MCAqL1xuXHR2YXIgY2h1bmtlciA9IC8oKD86XFwoKD86XFwoW14oKV0rXFwpfFteKCldKykrXFwpfFxcWyg/OlxcW1teXFxbXFxdXSpcXF18WydcIl1bXidcIl0qWydcIl18W15cXFtcXF0nXCJdKykrXFxdfFxcXFwufFteID4rfiwoXFxbXFxcXF0rKSt8Wz4rfl0pKFxccyosXFxzKik/KCg/Oi58XFxyfFxcbikqKS9nLFxuXHRcdHdoaXRlU3BhY2UgPSAvXlxccyp8XFxzKiQvZyxcblx0XHRDb2xsZWN0aW9uO1xuXG5cdHZhciBTZWxlY3RvciA9IENsYXNzLmV4dGVuZCh7XG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIG5ldyBTZWxlY3RvciBpbnN0YW5jZS5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBtZXRob2QgaW5pdFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBDU1MgbGlrZSBzZWxlY3RvciBleHByZXNzaW9uLlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgbWF0Y2ggPSB0aGlzLm1hdGNoO1xuXG5cdFx0XHRmdW5jdGlvbiBjb21waWxlTmFtZUZpbHRlcihuYW1lKSB7XG5cdFx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbmFtZSA9PT0gJyonIHx8IGl0ZW0udHlwZSA9PT0gbmFtZTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGNvbXBpbGVJZEZpbHRlcihpZCkge1xuXHRcdFx0XHRpZiAoaWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW0uX25hbWUgPT09IGlkO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gY29tcGlsZUNsYXNzZXNGaWx0ZXIoY2xhc3Nlcykge1xuXHRcdFx0XHRpZiAoY2xhc3Nlcykge1xuXHRcdFx0XHRcdGNsYXNzZXMgPSBjbGFzc2VzLnNwbGl0KCcuJyk7XG5cblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRcdFx0dmFyIGkgPSBjbGFzc2VzLmxlbmd0aDtcblxuXHRcdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIWl0ZW0uY2xhc3Nlcy5jb250YWlucyhjbGFzc2VzW2ldKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGNvbXBpbGVBdHRyRmlsdGVyKG5hbWUsIGNtcCwgY2hlY2spIHtcblx0XHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRcdFx0dmFyIHZhbHVlID0gaXRlbVtuYW1lXSA/IGl0ZW1bbmFtZV0oKSA6ICcnO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIWNtcCA/ICEhY2hlY2sgOlxuXHRcdFx0XHRcdFx0XHRjbXAgPT09IFwiPVwiID8gdmFsdWUgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRcdFx0Y21wID09PSBcIio9XCIgPyB2YWx1ZS5pbmRleE9mKGNoZWNrKSA+PSAwIDpcblx0XHRcdFx0XHRcdFx0Y21wID09PSBcIn49XCIgPyAoXCIgXCIgKyB2YWx1ZSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgY2hlY2sgKyBcIiBcIikgPj0gMCA6XG5cdFx0XHRcdFx0XHRcdGNtcCA9PT0gXCIhPVwiID8gdmFsdWUgIT0gY2hlY2sgOlxuXHRcdFx0XHRcdFx0XHRjbXAgPT09IFwiXj1cIiA/IHZhbHVlLmluZGV4T2YoY2hlY2spID09PSAwIDpcblx0XHRcdFx0XHRcdFx0Y21wID09PSBcIiQ9XCIgPyB2YWx1ZS5zdWJzdHIodmFsdWUubGVuZ3RoIC0gY2hlY2subGVuZ3RoKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGNvbXBpbGVQc3VlZG9GaWx0ZXIobmFtZSkge1xuXHRcdFx0XHR2YXIgbm90U2VsZWN0b3JzO1xuXG5cdFx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdFx0bmFtZSA9IC8oPzpub3RcXCgoLispXFwpKXwoLispL2kuZXhlYyhuYW1lKTtcblxuXHRcdFx0XHRcdGlmICghbmFtZVsxXSkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IG5hbWVbMl07XG5cblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbihpdGVtLCBpbmRleCwgbGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuYW1lID09PSAnZmlyc3QnID8gaW5kZXggPT09IDAgOlxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPT09ICdsYXN0JyA/IGluZGV4ID09PSBsZW5ndGggLSAxIDpcblx0XHRcdFx0XHRcdFx0XHRuYW1lID09PSAnZXZlbicgPyBpbmRleCAlIDIgPT09IDAgOlxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPT09ICdvZGQnID8gaW5kZXggJSAyID09PSAxIDpcblx0XHRcdFx0XHRcdFx0XHRpdGVtW25hbWVdID8gaXRlbVtuYW1lXSgpIDpcblx0XHRcdFx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ29tcGlsZSBub3QgZXhwcmVzc2lvblxuXHRcdFx0XHRcdG5vdFNlbGVjdG9ycyA9IHBhcnNlQ2h1bmtzKG5hbWVbMV0sIFtdKTtcblxuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gIW1hdGNoKGl0ZW0sIG5vdFNlbGVjdG9ycyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBjb21waWxlKHNlbGVjdG9yLCBmaWx0ZXJzLCBkaXJlY3QpIHtcblx0XHRcdFx0dmFyIHBhcnRzO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIGFkZChmaWx0ZXIpIHtcblx0XHRcdFx0XHRpZiAoZmlsdGVyKSB7XG5cdFx0XHRcdFx0XHRmaWx0ZXJzLnB1c2goZmlsdGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQYXJzZSBleHByZXNzaW9uIGludG8gcGFydHNcblx0XHRcdFx0cGFydHMgPSBleHByZXNzaW9uLmV4ZWMoc2VsZWN0b3IucmVwbGFjZSh3aGl0ZVNwYWNlLCAnJykpO1xuXG5cdFx0XHRcdGFkZChjb21waWxlTmFtZUZpbHRlcihwYXJ0c1sxXSkpO1xuXHRcdFx0XHRhZGQoY29tcGlsZUlkRmlsdGVyKHBhcnRzWzJdKSk7XG5cdFx0XHRcdGFkZChjb21waWxlQ2xhc3Nlc0ZpbHRlcihwYXJ0c1szXSkpO1xuXHRcdFx0XHRhZGQoY29tcGlsZUF0dHJGaWx0ZXIocGFydHNbNF0sIHBhcnRzWzVdLCBwYXJ0c1s2XSkpO1xuXHRcdFx0XHRhZGQoY29tcGlsZVBzdWVkb0ZpbHRlcihwYXJ0c1s3XSkpO1xuXG5cdFx0XHRcdC8vIE1hcmsgdGhlIGZpbHRlciB3aXRoIHBzZXVkbyBmb3IgcGVyZm9ybWFuY2Vcblx0XHRcdFx0ZmlsdGVycy5wc2V1ZG8gPSAhIXBhcnRzWzddO1xuXHRcdFx0XHRmaWx0ZXJzLmRpcmVjdCA9IGRpcmVjdDtcblxuXHRcdFx0XHRyZXR1cm4gZmlsdGVycztcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFyc2VyIGxvZ2ljIGJhc2VkIG9uIFNpenpsZSBieSBKb2huIFJlc2lnXG5cdFx0XHRmdW5jdGlvbiBwYXJzZUNodW5rcyhzZWxlY3Rvciwgc2VsZWN0b3JzKSB7XG5cdFx0XHRcdHZhciBwYXJ0cyA9IFtdLCBleHRyYSwgbWF0Y2hlcywgaTtcblxuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Y2h1bmtlci5leGVjKFwiXCIpO1xuXHRcdFx0XHRcdG1hdGNoZXMgPSBjaHVua2VyLmV4ZWMoc2VsZWN0b3IpO1xuXG5cdFx0XHRcdFx0aWYgKG1hdGNoZXMpIHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yID0gbWF0Y2hlc1szXTtcblx0XHRcdFx0XHRcdHBhcnRzLnB1c2gobWF0Y2hlc1sxXSk7XG5cblx0XHRcdFx0XHRcdGlmIChtYXRjaGVzWzJdKSB7XG5cdFx0XHRcdFx0XHRcdGV4dHJhID0gbWF0Y2hlc1szXTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlIChtYXRjaGVzKTtcblxuXHRcdFx0XHRpZiAoZXh0cmEpIHtcblx0XHRcdFx0XHRwYXJzZUNodW5rcyhleHRyYSwgc2VsZWN0b3JzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGVjdG9yID0gW107XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmIChwYXJ0c1tpXSAhPSAnPicpIHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yLnB1c2goY29tcGlsZShwYXJ0c1tpXSwgW10sIHBhcnRzW2kgLSAxXSA9PT0gJz4nKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpO1xuXG5cdFx0XHRcdHJldHVybiBzZWxlY3RvcnM7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3NlbGVjdG9ycyA9IHBhcnNlQ2h1bmtzKHNlbGVjdG9yLCBbXSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRyb2wuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG1hdGNoXG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLnVpLkNvbnRyb2x9IGNvbnRyb2wgQ29udHJvbCB0byBtYXRjaCBhZ2FpbnN0IHRoZSBzZWxlY3Rvci5cblx0XHQgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RvcnMgT3B0aW9uYWwgYXJyYXkgb2Ygc2VsZWN0b3JzLCBtb3N0bHkgdXNlZCBpbnRlcm5hbGx5LlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2Ugc3RhdGUgaWYgdGhlIGNvbnRyb2wgbWF0Y2hlcyBvciBub3QuXG5cdFx0ICovXG5cdFx0bWF0Y2g6IGZ1bmN0aW9uKGNvbnRyb2wsIHNlbGVjdG9ycykge1xuXHRcdFx0dmFyIGksIGwsIHNpLCBzbCwgc2VsZWN0b3IsIGZpLCBmbCwgZmlsdGVycywgaW5kZXgsIGxlbmd0aCwgc2libGluZ3MsIGNvdW50LCBpdGVtO1xuXG5cdFx0XHRzZWxlY3RvcnMgPSBzZWxlY3RvcnMgfHwgdGhpcy5fc2VsZWN0b3JzO1xuXHRcdFx0Zm9yIChpID0gMCwgbCA9IHNlbGVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07XG5cdFx0XHRcdHNsID0gc2VsZWN0b3IubGVuZ3RoO1xuXHRcdFx0XHRpdGVtID0gY29udHJvbDtcblx0XHRcdFx0Y291bnQgPSAwO1xuXG5cdFx0XHRcdGZvciAoc2kgPSBzbCAtIDE7IHNpID49IDA7IHNpLS0pIHtcblx0XHRcdFx0XHRmaWx0ZXJzID0gc2VsZWN0b3Jbc2ldO1xuXG5cdFx0XHRcdFx0d2hpbGUgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdC8vIEZpbmQgdGhlIGluZGV4IGFuZCBsZW5ndGggc2luY2UgYSBwc2V1ZG8gZmlsdGVyIGxpa2UgOmZpcnN0IG5lZWRzIGl0XG5cdFx0XHRcdFx0XHRpZiAoZmlsdGVycy5wc2V1ZG8pIHtcblx0XHRcdFx0XHRcdFx0c2libGluZ3MgPSBpdGVtLnBhcmVudCgpLml0ZW1zKCk7XG5cdFx0XHRcdFx0XHRcdGluZGV4ID0gbGVuZ3RoID0gc2libGluZ3MubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoaW5kZXgtLSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzaWJsaW5nc1tpbmRleF0gPT09IGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRmb3IgKGZpID0gMCwgZmwgPSBmaWx0ZXJzLmxlbmd0aDsgZmkgPCBmbDsgZmkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoIWZpbHRlcnNbZmldKGl0ZW0sIGluZGV4LCBsZW5ndGgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZmkgPSBmbCArIDE7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGZpID09PSBmbCkge1xuXHRcdFx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIElmIGl0IGRpZG4ndCBtYXRjaCB0aGUgcmlnaHQgbW9zdCBleHByZXNzaW9uIHRoZW5cblx0XHRcdFx0XHRcdFx0Ly8gYnJlYWsgc2luY2UgaXQncyBubyBwb2ludCBsb29raW5nIGF0IHRoZSBwYXJlbnRzXG5cdFx0XHRcdFx0XHRcdGlmIChzaSA9PT0gc2wgLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aXRlbSA9IGl0ZW0ucGFyZW50KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgd2UgZm91bmQgYWxsIHNlbGVjdG9ycyB0aGVuIHJldHVybiB0cnVlIG90aGVyd2lzZSBjb250aW51ZSBsb29raW5nXG5cdFx0XHRcdGlmIChjb3VudCA9PT0gc2wpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSB0aW55bWNlLnVpLkNvbGxlY3Rpb24gd2l0aCBtYXRjaGVzIG9mIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IgaW5zaWRlIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBmaW5kXG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLnVpLkNvbnRyb2x9IGNvbnRhaW5lciBDb250YWluZXIgdG8gbG9vayBmb3IgaXRlbXMgaW4uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDb2xsZWN0aW9uIHdpdGggbWF0Y2hlZCBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRmaW5kOiBmdW5jdGlvbihjb250YWluZXIpIHtcblx0XHRcdHZhciBtYXRjaGVzID0gW10sIGksIGwsIHNlbGVjdG9ycyA9IHRoaXMuX3NlbGVjdG9ycztcblxuXHRcdFx0ZnVuY3Rpb24gY29sbGVjdChpdGVtcywgc2VsZWN0b3IsIGluZGV4KSB7XG5cdFx0XHRcdHZhciBpLCBsLCBmaSwgZmwsIGl0ZW0sIGZpbHRlcnMgPSBzZWxlY3RvcltpbmRleF07XG5cblx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdGl0ZW0gPSBpdGVtc1tpXTtcblxuXHRcdFx0XHRcdC8vIFJ1biBlYWNoIGZpbHRlciBhZ2FpbnN0IHRoZSBpdGVtXG5cdFx0XHRcdFx0Zm9yIChmaSA9IDAsIGZsID0gZmlsdGVycy5sZW5ndGg7IGZpIDwgZmw7IGZpKyspIHtcblx0XHRcdFx0XHRcdGlmICghZmlsdGVyc1tmaV0oaXRlbSwgaSwgbCkpIHtcblx0XHRcdFx0XHRcdFx0ZmkgPSBmbCArIDE7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEFsbCBmaWx0ZXJzIG1hdGNoZWQgdGhlIGl0ZW1cblx0XHRcdFx0XHRpZiAoZmkgPT09IGZsKSB7XG5cdFx0XHRcdFx0XHQvLyBNYXRjaGVkIGl0ZW0gaXMgb24gdGhlIGxhc3QgZXhwcmVzc2lvbiBsaWtlOiBwYW5lbCB0b29sYmFyIFtidXR0b25dXG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggPT0gc2VsZWN0b3IubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVzLnB1c2goaXRlbSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBDb2xsZWN0IG5leHQgZXhwcmVzc2lvbiB0eXBlXG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLml0ZW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29sbGVjdChpdGVtLml0ZW1zKCksIHNlbGVjdG9yLCBpbmRleCArIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChmaWx0ZXJzLmRpcmVjdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENvbGxlY3QgY2hpbGQgaXRlbXNcblx0XHRcdFx0XHRpZiAoaXRlbS5pdGVtcykge1xuXHRcdFx0XHRcdFx0Y29sbGVjdChpdGVtLml0ZW1zKCksIHNlbGVjdG9yLCBpbmRleCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250YWluZXIuaXRlbXMpIHtcblx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IHNlbGVjdG9ycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0XHRjb2xsZWN0KGNvbnRhaW5lci5pdGVtcygpLCBzZWxlY3RvcnNbaV0sIDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVW5pcXVlIHRoZSBtYXRjaGVzIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAobCA+IDEpIHtcblx0XHRcdFx0XHRtYXRjaGVzID0gdW5pcXVlKG1hdGNoZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZpeCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlXG5cdFx0XHRpZiAoIUNvbGxlY3Rpb24pIHtcblx0XHRcdFx0Ly8gVE9ETzogRml4IG1lIVxuXHRcdFx0XHRDb2xsZWN0aW9uID0gU2VsZWN0b3IuQ29sbGVjdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uKG1hdGNoZXMpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIFNlbGVjdG9yO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9Db2xsZWN0aW9uLmpzXG5cbi8qKlxuICogQ29sbGVjdGlvbi5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIENvbnRyb2wgY29sbGVjdGlvbiwgdGhpcyBjbGFzcyBjb250YWlucyBjb250cm9sIGluc3RhbmNlcyBhbmQgaXQgZW5hYmxlcyB5b3UgdG9cbiAqIHBlcmZvcm0gYWN0aW9ucyBvbiBhbGwgdGhlIGNvbnRhaW5lZCBpdGVtcy4gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gaG93IGpRdWVyeSB3b3Jrcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogc29tZUNvbGxlY3Rpb24uc2hvdygpLmRpc2FibGVkKHRydWUpO1xuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkNvbGxlY3Rpb25cbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9Db2xsZWN0aW9uXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL3VpL1NlbGVjdG9yXCIsXG5cdFwidGlueW1jZS91dGlsL0NsYXNzXCJcbl0sIGZ1bmN0aW9uKFRvb2xzLCBTZWxlY3RvciwgQ2xhc3MpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIENvbGxlY3Rpb24sIHByb3RvLCBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2gsIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5cdHByb3RvID0ge1xuXHRcdC8qKlxuXHRcdCAqIEN1cnJlbnQgbnVtYmVyIG9mIGNvbnRhaW5lZCBjb250cm9sIGluc3RhbmNlcy5cblx0XHQgKlxuXHRcdCAqIEBmaWVsZCBsZW5ndGhcblx0XHQgKiBAdHlwZSBOdW1iZXJcblx0XHQgKi9cblx0XHRsZW5ndGg6IDAsXG5cblx0XHQvKipcblx0XHQgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIGNvbGxlY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAbWV0aG9kIGluaXRcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBpdGVtcyBPcHRpb25hbCBhcnJheSB3aXRoIGl0ZW1zIHRvIGFkZC5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihpdGVtcykge1xuXHRcdFx0aWYgKGl0ZW1zKSB7XG5cdFx0XHRcdHRoaXMuYWRkKGl0ZW1zKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBuZXcgaXRlbXMgdG8gdGhlIGNvbnRyb2wgY29sbGVjdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYWRkXG5cdFx0ICogQHBhcmFtIHtBcnJheX0gaXRlbXMgQXJyYXkgaWYgaXRlbXMgdG8gYWRkIHRvIGNvbGxlY3Rpb24uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDdXJyZW50IGNvbGxlY3Rpb24gaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0YWRkOiBmdW5jdGlvbihpdGVtcykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHQvLyBGb3JjZSBzaW5nbGUgaXRlbSBpbnRvIGFycmF5XG5cdFx0XHRpZiAoIVRvb2xzLmlzQXJyYXkoaXRlbXMpKSB7XG5cdFx0XHRcdGlmIChpdGVtcyBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHtcblx0XHRcdFx0XHRzZWxmLmFkZChpdGVtcy50b0FycmF5KCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHB1c2guY2FsbChzZWxmLCBpdGVtcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoc2VsZiwgaXRlbXMpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgY29udGVudHMgb2YgdGhlIGNvbGxlY3Rpb24uIFRoaXMgd2lsbCByZW1vdmUgYW55IGV4aXN0aW5nIGl0ZW1zXG5cdFx0ICogYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBvbmVzIHNwZWNpZmllZCBpbiB0aGUgaW5wdXQgYXJyYXkuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNldFxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IGl0ZW1zIEFycmF5IHdpdGggaXRlbXMgdG8gc2V0IGludG8gdGhlIENvbGxlY3Rpb24uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDb2xsZWN0aW9uIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdHNldDogZnVuY3Rpb24oaXRlbXMpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbGVuID0gc2VsZi5sZW5ndGgsIGk7XG5cblx0XHRcdHNlbGYubGVuZ3RoID0gMDtcblx0XHRcdHNlbGYuYWRkKGl0ZW1zKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG9sZCBlbnRyaWVzXG5cdFx0XHRmb3IgKGkgPSBzZWxmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdGRlbGV0ZSBzZWxmW2ldO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRmlsdGVycyB0aGUgY29sbGVjdGlvbiBpdGVtIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IgZXhwcmVzc2lvbiBvciBzZWxlY3RvciBmdW5jdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZmlsdGVyXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIGV4cHJlc3Npb24gdG8gZmlsdGVyIGl0ZW1zIGJ5LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ29sbGVjdGlvbiBjb250YWluaW5nIHRoZSBmaWx0ZXJlZCBpdGVtcy5cblx0XHQgKi9cblx0XHRmaWx0ZXI6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGksIGwsIG1hdGNoZXMgPSBbXSwgaXRlbSwgbWF0Y2g7XG5cblx0XHRcdC8vIENvbXBpbGUgc3RyaW5nIGludG8gc2VsZWN0b3IgZXhwcmVzc2lvblxuXHRcdFx0aWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihzZWxlY3Rvcik7XG5cblx0XHRcdFx0bWF0Y2ggPSBmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNlbGVjdG9yLm1hdGNoKGl0ZW0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVXNlIHNlbGVjdG9yIGFzIG1hdGNoaW5nIGZ1bmN0aW9uXG5cdFx0XHRcdG1hdGNoID0gc2VsZWN0b3I7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRpdGVtID0gc2VsZltpXTtcblxuXHRcdFx0XHRpZiAobWF0Y2goaXRlbSkpIHtcblx0XHRcdFx0XHRtYXRjaGVzLnB1c2goaXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uKG1hdGNoZXMpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTbGljZXMgdGhlIGl0ZW1zIHdpdGhpbiB0aGUgY29sbGVjdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2xpY2Vcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gaW5kZXggSW5kZXggdG8gc2xpY2UgYXQuXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IGxlbiBPcHRpb25hbCBsZW5ndGggdG8gc2xpY2UuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDdXJyZW50IGNvbGxlY3Rpb24uXG5cdFx0ICovXG5cdFx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uKHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBNYWtlcyB0aGUgY3VycmVudCBjb2xsZWN0aW9uIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXguXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGVxXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4IEluZGV4IG9mIHRoZSBpdGVtIHRvIHNldCB0aGUgY29sbGVjdGlvbiB0by5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbGxlY3Rpb259IEN1cnJlbnQgY29sbGVjdGlvbi5cblx0XHQgKi9cblx0XHRlcTogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHRcdHJldHVybiBpbmRleCA9PT0gLTEgPyB0aGlzLnNsaWNlKGluZGV4KSA6IHRoaXMuc2xpY2UoaW5kZXgsICtpbmRleCArIDEpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIG9uIGVhY2ggaXRlbSBpbiBjb2xsZWN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBlYWNoXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gZXhlY3V0ZSBmb3IgZWFjaCBpdGVtIGluIGNvbGxlY3Rpb24uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDdXJyZW50IGNvbGxlY3Rpb24gaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0ZWFjaDogZnVuY3Rpb24oY2FsbGJhY2spIHtcblx0XHRcdFRvb2xzLmVhY2godGhpcywgY2FsbGJhY2spO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhbiBKYXZhU2NyaXB0IGFycmF5IG9iamVjdCBvZiB0aGUgY29udGVudHMgaW5zaWRlIHRoZSBjb2xsZWN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0b0FycmF5XG5cdFx0ICogQHJldHVybiB7QXJyYXl9IEFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gY29sbGVjdGlvbi5cblx0XHQgKi9cblx0XHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBUb29scy50b0FycmF5KHRoaXMpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIHNwZWNpZmllZCBjb250cm9sIG9yIHJldHVybiAtMSBpZiBpdCBpc24ndCBpbiB0aGUgY29sbGVjdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaW5kZXhPZlxuXHRcdCAqIEBwYXJhbSB7Q29udHJvbH0gY3RybCBDb250cm9sIGluc3RhbmNlIHRvIGxvb2sgZm9yLlxuXHRcdCAqIEByZXR1cm4ge051bWJlcn0gSW5kZXggb2YgdGhlIHNwZWNpZmllZCBjb250cm9sIG9yIC0xLlxuXHRcdCAqL1xuXHRcdGluZGV4T2Y6IGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgaSA9IHNlbGYubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdGlmIChzZWxmW2ldID09PSBjdHJsKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSBuZXcgY29sbGVjdGlvbiBvZiB0aGUgY29udGVudHMgaW4gcmV2ZXJzZSBvcmRlci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmV2ZXJzZVxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ29sbGVjdGlvbiBpbnN0YW5jZSB3aXRoIHJldmVyc2VkIGl0ZW1zLlxuXHRcdCAqL1xuXHRcdHJldmVyc2U6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uKFRvb2xzLnRvQXJyYXkodGhpcykucmV2ZXJzZSgpKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBjbGFzcyBleGlzdHMgb3Igbm90LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBoYXNDbGFzc1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBjbHMgQ2xhc3MgdG8gY2hlY2sgZm9yLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2Ugc3RhdGUgaWYgdGhlIGNsYXNzIGV4aXN0cyBvciBub3QuXG5cdFx0ICovXG5cdFx0aGFzQ2xhc3M6IGZ1bmN0aW9uKGNscykge1xuXHRcdFx0cmV0dXJuIHRoaXNbMF0gPyB0aGlzWzBdLmNsYXNzZXMuY29udGFpbnMoY2xzKSA6IGZhbHNlO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIHNwZWNpZmljIHByb3BlcnR5IG9uIHRoZSBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbi4gVGhlIHNhbWUgYXMgZXhlY3V0aW5nIGNvbnRyb2wuPHByb3BlcnR5Pig8dmFsdWU+KTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcHJvcFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFByb3BlcnR5IG5hbWUgdG8gZ2V0L3NldC5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgT3B0aW9uYWwgb2JqZWN0IHZhbHVlIHRvIHNldC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbGxlY3Rpb259IEN1cnJlbnQgY29sbGVjdGlvbiBpbnN0YW5jZSBvciB2YWx1ZSBvZiB0aGUgZmlyc3QgaXRlbSBvbiBhIGdldCBvcGVyYXRpb24uXG5cdFx0ICovXG5cdFx0cHJvcDogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgdW5kZWYsIGl0ZW07XG5cblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWYpIHtcblx0XHRcdFx0c2VsZi5lYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoaXRlbVtuYW1lXSkge1xuXHRcdFx0XHRcdFx0aXRlbVtuYW1lXSh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gc2VsZjtcblx0XHRcdH1cblxuXHRcdFx0aXRlbSA9IHNlbGZbMF07XG5cblx0XHRcdGlmIChpdGVtICYmIGl0ZW1bbmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1bbmFtZV0oKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRXhlY3V0ZXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUgd2l0aCBvcHRpb25hbCBhcmd1bWVudHMgYW4gYWxsIGl0ZW1zIGluIGNvbGxlY3Rpb24gaWYgaXQgZXhpc3RzLlxuXHRcdCAqXG5cdFx0ICogQGV4YW1wbGUgY29sbGVjdGlvbi5leGVjKFwibXlNZXRob2RcIiwgYXJnMSwgYXJnMiwgYXJnMyk7XG5cdFx0ICogQG1ldGhvZCBleGVjXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gLi4uIE11bHRpcGxlIGFyZ3VtZW50cyB0byBwYXNzIHRvIGVhY2ggZnVuY3Rpb24uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDdXJyZW50IGNvbGxlY3Rpb24uXG5cdFx0ICovXG5cdFx0ZXhlYzogZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gVG9vbHMudG9BcnJheShhcmd1bWVudHMpLnNsaWNlKDEpO1xuXG5cdFx0XHRzZWxmLmVhY2goZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRpZiAoaXRlbVtuYW1lXSkge1xuXHRcdFx0XHRcdGl0ZW1bbmFtZV0uYXBwbHkoaXRlbSwgYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIGNvbGxlY3Rpb24gYW5kIERPTS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDdXJyZW50IGNvbGxlY3Rpb24uXG5cdFx0ICovXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0dGhpc1tpXS5yZW1vdmUoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYSBjbGFzcyB0byBhbGwgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZENsYXNzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNscyBDbGFzcyB0byBhZGQgdG8gZWFjaCBpdGVtLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGFkZENsYXNzOiBmdW5jdGlvbihjbHMpIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRpdGVtLmNsYXNzZXMuYWRkKGNscyk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGNsYXNzIGZyb20gYWxsIGl0ZW1zIGluIGNvbGxlY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbW92ZUNsYXNzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNscyBDbGFzcyB0byByZW1vdmUgZnJvbSBlYWNoIGl0ZW0uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDdXJyZW50IGNvbGxlY3Rpb24gaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKGNscykge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRcdGl0ZW0uY2xhc3Nlcy5yZW1vdmUoY2xzKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEZpcmVzIHRoZSBzcGVjaWZpZWQgZXZlbnQgYnkgbmFtZSBhbmQgYXJndW1lbnRzIG9uIHRoZSBjb250cm9sLiBUaGlzIHdpbGwgZXhlY3V0ZSBhbGxcblx0XHQgKiBib3VuZCBldmVudCBoYW5kbGVycy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZmlyZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGZpcmUuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGV2ZW50LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdC8vIGZpcmU6IGZ1bmN0aW9uKGV2ZW50LCBhcmdzKSB7fSwgLS0gR2VuZXJhdGVkIGJ5IGNvZGUgYmVsb3dcblxuXHRcdC8qKlxuXHRcdCAqIEJpbmRzIGEgY2FsbGJhY2sgdG8gdGhlIHNwZWNpZmllZCBldmVudC4gVGhpcyBldmVudCBjYW4gYm90aCBiZVxuXHRcdCAqIG5hdGl2ZSBicm93c2VyIGV2ZW50cyBsaWtlIFwiY2xpY2tcIiBvciBjdXN0b20gb25lcyBsaWtlIFBvc3RSZW5kZXIuXG5cdFx0ICpcblx0XHQgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBoYXZlIHR3byBwYXJhbWV0ZXJzIHRoZSBmaXJzdCBvbmUgYmVpbmcgdGhlIGNvbnRyb2wgdGhhdCByZWNlaXZlZCB0aGUgZXZlbnRcblx0XHQgKiB0aGUgc2Vjb25kIG9uZSB3aWxsIGJlIHRoZSBldmVudCBvYmplY3QgZWl0aGVyIHRoZSBicm93c2VycyBuYXRpdmUgZXZlbnQgb2JqZWN0IG9yIGEgY3VzdG9tIEpTIG9iamVjdC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgb25cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBldmVudCB0byBiaW5kLiBGb3IgZXhhbXBsZSBcImNsaWNrXCIuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25lcyB0aGUgZXZlbnQgb2NjdXJzLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdC8vIG9uOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge30sIC0tIEdlbmVyYXRlZCBieSBjb2RlIGJlbG93XG5cblx0XHQvKipcblx0XHQgKiBVbmJpbmRzIHRoZSBzcGVjaWZpZWQgZXZlbnQgYW5kIG9wdGlvbmFsbHkgYSBzcGVjaWZpYyBjYWxsYmFjay4gSWYgeW91IG9taXQgdGhlIG5hbWVcblx0XHQgKiBwYXJhbWV0ZXIgYWxsIGV2ZW50IGhhbmRsZXJzIHdpbGwgYmUgcmVtb3ZlZC4gSWYgeW91IG9taXQgdGhlIGNhbGxiYWNrIGFsbCBldmVudCBoYW5kbGVzXG5cdFx0ICogYnkgdGhlIHNwZWNpZmllZCBuYW1lIHdpbGwgYmUgcmVtb3ZlZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgb2ZmXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgT3B0aW9uYWwgbmFtZSBmb3IgdGhlIGV2ZW50IHRvIHVuYmluZC5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byB1bmJpbmQuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDdXJyZW50IGNvbGxlY3Rpb24gaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0Ly8gb2ZmOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge30sIC0tIEdlbmVyYXRlZCBieSBjb2RlIGJlbG93XG5cblx0XHQvKipcblx0XHQgKiBTaG93cyB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29sbGVjdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2hvd1xuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdC8vIHNob3c6IGZ1bmN0aW9uKCkge30sIC0tIEdlbmVyYXRlZCBieSBjb2RlIGJlbG93XG5cblx0XHQvKipcblx0XHQgKiBIaWRlcyB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29sbGVjdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaGlkZVxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdC8vIGhpZGU6IGZ1bmN0aW9uKCkge30sIC0tIEdlbmVyYXRlZCBieSBjb2RlIGJlbG93XG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIHRleHQgY29udGVudHMgb2YgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHRleHRcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbGxlY3Rpb259IEN1cnJlbnQgY29sbGVjdGlvbiBpbnN0YW5jZSBvciB0ZXh0IHZhbHVlIG9mIHRoZSBmaXJzdCBpdGVtIG9uIGEgZ2V0IG9wZXJhdGlvbi5cblx0XHQgKi9cblx0XHQvLyB0ZXh0OiBmdW5jdGlvbih2YWx1ZSkge30sIC0tIEdlbmVyYXRlZCBieSBjb2RlIGJlbG93XG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIG5hbWUgY29udGVudHMgb2YgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG5hbWVcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbGxlY3Rpb259IEN1cnJlbnQgY29sbGVjdGlvbiBpbnN0YW5jZSBvciBuYW1lIHZhbHVlIG9mIHRoZSBmaXJzdCBpdGVtIG9uIGEgZ2V0IG9wZXJhdGlvbi5cblx0XHQgKi9cblx0XHQvLyBuYW1lOiBmdW5jdGlvbih2YWx1ZSkge30sIC0tIEdlbmVyYXRlZCBieSBjb2RlIGJlbG93XG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb2xsZWN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBkaXNhYmxlZFxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlIG9yIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBmaXJzdCBpdGVtIG9uIGEgZ2V0IG9wZXJhdGlvbi5cblx0XHQgKi9cblx0XHQvLyBkaXNhYmxlZDogZnVuY3Rpb24oc3RhdGUpIHt9LCAtLSBHZW5lcmF0ZWQgYnkgY29kZSBiZWxvd1xuXG5cdFx0LyoqXG5cdFx0ICogU2V0cy9nZXRzIHRoZSBhY3RpdmUgc3RhdGUgb24gdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFjdGl2ZVxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlIG9yIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgZmlyc3QgaXRlbSBvbiBhIGdldCBvcGVyYXRpb24uXG5cdFx0ICovXG5cdFx0Ly8gYWN0aXZlOiBmdW5jdGlvbihzdGF0ZSkge30sIC0tIEdlbmVyYXRlZCBieSBjb2RlIGJlbG93XG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIHNlbGVjdGVkIHN0YXRlIG9uIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb2xsZWN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZWxlY3RlZFxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlIG9yIHNlbGVjdGVkIHN0YXRlIG9mIHRoZSBmaXJzdCBpdGVtIG9uIGEgZ2V0IG9wZXJhdGlvbi5cblx0XHQgKi9cblx0XHQvLyBzZWxlY3RlZDogZnVuY3Rpb24oc3RhdGUpIHt9LCAtLSBHZW5lcmF0ZWQgYnkgY29kZSBiZWxvd1xuXG5cdFx0LyoqXG5cdFx0ICogU2V0cy9nZXRzIHRoZSBzZWxlY3RlZCBzdGF0ZSBvbiB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29sbGVjdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdmlzaWJsZVxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBjb2xsZWN0aW9uIGluc3RhbmNlIG9yIHZpc2libGUgc3RhdGUgb2YgdGhlIGZpcnN0IGl0ZW0gb24gYSBnZXQgb3BlcmF0aW9uLlxuXHRcdCAqL1xuXHRcdC8vIHZpc2libGU6IGZ1bmN0aW9uKHN0YXRlKSB7fSwgLS0gR2VuZXJhdGVkIGJ5IGNvZGUgYmVsb3dcblx0fTtcblxuXHQvLyBFeHRlbmQgdGlueW1jZS51aS5Db2xsZWN0aW9uIHByb3RvdHlwZSB3aXRoIHNvbWUgZ2VuZXJhdGVkIGNvbnRyb2wgc3BlY2lmaWMgbWV0aG9kc1xuXHRUb29scy5lYWNoKCdmaXJlIG9uIG9mZiBzaG93IGhpZGUgYXBwZW5kIHByZXBlbmQgYmVmb3JlIGFmdGVyIHJlZmxvdycuc3BsaXQoJyAnKSwgZnVuY3Rpb24obmFtZSkge1xuXHRcdHByb3RvW25hbWVdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgYXJncyA9IFRvb2xzLnRvQXJyYXkoYXJndW1lbnRzKTtcblxuXHRcdFx0dGhpcy5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0aWYgKG5hbWUgaW4gY3RybCkge1xuXHRcdFx0XHRcdGN0cmxbbmFtZV0uYXBwbHkoY3RybCwgYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9O1xuXHR9KTtcblxuXHQvLyBFeHRlbmQgdGlueW1jZS51aS5Db2xsZWN0aW9uIHByb3RvdHlwZSB3aXRoIHNvbWUgcHJvcGVydHkgbWV0aG9kc1xuXHRUb29scy5lYWNoKCd0ZXh0IG5hbWUgZGlzYWJsZWQgYWN0aXZlIHNlbGVjdGVkIGNoZWNrZWQgdmlzaWJsZSBwYXJlbnQgdmFsdWUgZGF0YScuc3BsaXQoJyAnKSwgZnVuY3Rpb24obmFtZSkge1xuXHRcdHByb3RvW25hbWVdID0gZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHJldHVybiB0aGlzLnByb3AobmFtZSwgdmFsdWUpO1xuXHRcdH07XG5cdH0pO1xuXG5cdC8vIENyZWF0ZSBjbGFzcyBiYXNlZCBvbiB0aGUgbmV3IHByb3RvdHlwZVxuXHRDb2xsZWN0aW9uID0gQ2xhc3MuZXh0ZW5kKHByb3RvKTtcblxuXHQvLyBTdGljayBDb2xsZWN0aW9uIGludG8gU2VsZWN0b3IgdG8gcHJldmVudCBjaXJjdWFsIHJlZmVyZW5jZXNcblx0U2VsZWN0b3IuQ29sbGVjdGlvbiA9IENvbGxlY3Rpb247XG5cblx0cmV0dXJuIENvbGxlY3Rpb247XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0RvbVV0aWxzLmpzXG5cbi8qKlxuICogRG9tVXRpbHMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBQcml2YXRlIFVJIERvbVV0aWxzIHByb3h5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Eb21VdGlsc1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0RvbVV0aWxzXCIsIFtcblx0XCJ0aW55bWNlL0VudlwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvZG9tL0RPTVV0aWxzXCJcbl0sIGZ1bmN0aW9uKEVudiwgVG9vbHMsIERPTVV0aWxzKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBjb3VudCA9IDA7XG5cblx0dmFyIGZ1bmNzID0ge1xuXHRcdGlkOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiAnbWNldV8nICsgKGNvdW50KyspO1xuXHRcdH0sXG5cblx0XHRjcmVhdGU6IGZ1bmN0aW9uKG5hbWUsIGF0dHJzLCBjaGlsZHJlbikge1xuXHRcdFx0dmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XG5cblx0XHRcdERPTVV0aWxzLkRPTS5zZXRBdHRyaWJzKGVsbSwgYXR0cnMpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRlbG0uaW5uZXJIVE1MID0gY2hpbGRyZW47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRUb29scy5lYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuXHRcdFx0XHRcdGlmIChjaGlsZC5ub2RlVHlwZSkge1xuXHRcdFx0XHRcdFx0ZWxtLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxtO1xuXHRcdH0sXG5cblx0XHRjcmVhdGVGcmFnbWVudDogZnVuY3Rpb24oaHRtbCkge1xuXHRcdFx0cmV0dXJuIERPTVV0aWxzLkRPTS5jcmVhdGVGcmFnbWVudChodG1sKTtcblx0XHR9LFxuXG5cdFx0Z2V0V2luZG93U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gRE9NVXRpbHMuRE9NLmdldFZpZXdQb3J0KCk7XG5cdFx0fSxcblxuXHRcdGdldFNpemU6IGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0dmFyIHdpZHRoLCBoZWlnaHQ7XG5cblx0XHRcdGlmIChlbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7XG5cdFx0XHRcdHZhciByZWN0ID0gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0XHRcdHdpZHRoID0gTWF0aC5tYXgocmVjdC53aWR0aCB8fCAocmVjdC5yaWdodCAtIHJlY3QubGVmdCksIGVsbS5vZmZzZXRXaWR0aCk7XG5cdFx0XHRcdGhlaWdodCA9IE1hdGgubWF4KHJlY3QuaGVpZ2h0IHx8IChyZWN0LmJvdHRvbSAtIHJlY3QuYm90dG9tKSwgZWxtLm9mZnNldEhlaWdodCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aWR0aCA9IGVsbS5vZmZzZXRXaWR0aDtcblx0XHRcdFx0aGVpZ2h0ID0gZWxtLm9mZnNldEhlaWdodDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fTtcblx0XHR9LFxuXG5cdFx0Z2V0UG9zOiBmdW5jdGlvbihlbG0sIHJvb3QpIHtcblx0XHRcdHJldHVybiBET01VdGlscy5ET00uZ2V0UG9zKGVsbSwgcm9vdCB8fCBmdW5jcy5nZXRDb250YWluZXIoKSk7XG5cdFx0fSxcblxuXHRcdGdldENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIEVudi5jb250YWluZXIgPyBFbnYuY29udGFpbmVyIDogZG9jdW1lbnQuYm9keTtcblx0XHR9LFxuXG5cdFx0Z2V0Vmlld1BvcnQ6IGZ1bmN0aW9uKHdpbikge1xuXHRcdFx0cmV0dXJuIERPTVV0aWxzLkRPTS5nZXRWaWV3UG9ydCh3aW4pO1xuXHRcdH0sXG5cblx0XHRnZXQ6IGZ1bmN0aW9uKGlkKSB7XG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdH0sXG5cblx0XHRhZGRDbGFzczogZnVuY3Rpb24oZWxtLCBjbHMpIHtcblx0XHRcdHJldHVybiBET01VdGlscy5ET00uYWRkQ2xhc3MoZWxtLCBjbHMpO1xuXHRcdH0sXG5cblx0XHRyZW1vdmVDbGFzczogZnVuY3Rpb24oZWxtLCBjbHMpIHtcblx0XHRcdHJldHVybiBET01VdGlscy5ET00ucmVtb3ZlQ2xhc3MoZWxtLCBjbHMpO1xuXHRcdH0sXG5cblx0XHRoYXNDbGFzczogZnVuY3Rpb24oZWxtLCBjbHMpIHtcblx0XHRcdHJldHVybiBET01VdGlscy5ET00uaGFzQ2xhc3MoZWxtLCBjbHMpO1xuXHRcdH0sXG5cblx0XHR0b2dnbGVDbGFzczogZnVuY3Rpb24oZWxtLCBjbHMsIHN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gRE9NVXRpbHMuRE9NLnRvZ2dsZUNsYXNzKGVsbSwgY2xzLCBzdGF0ZSk7XG5cdFx0fSxcblxuXHRcdGNzczogZnVuY3Rpb24oZWxtLCBuYW1lLCB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIERPTVV0aWxzLkRPTS5zZXRTdHlsZShlbG0sIG5hbWUsIHZhbHVlKTtcblx0XHR9LFxuXG5cdFx0Z2V0UnVudGltZVN0eWxlOiBmdW5jdGlvbihlbG0sIG5hbWUpIHtcblx0XHRcdHJldHVybiBET01VdGlscy5ET00uZ2V0U3R5bGUoZWxtLCBuYW1lLCB0cnVlKTtcblx0XHR9LFxuXG5cdFx0b246IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgY2FsbGJhY2ssIHNjb3BlKSB7XG5cdFx0XHRyZXR1cm4gRE9NVXRpbHMuRE9NLmJpbmQodGFyZ2V0LCBuYW1lLCBjYWxsYmFjaywgc2NvcGUpO1xuXHRcdH0sXG5cblx0XHRvZmY6IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSwgY2FsbGJhY2spIHtcblx0XHRcdHJldHVybiBET01VdGlscy5ET00udW5iaW5kKHRhcmdldCwgbmFtZSwgY2FsbGJhY2spO1xuXHRcdH0sXG5cblx0XHRmaXJlOiBmdW5jdGlvbih0YXJnZXQsIG5hbWUsIGFyZ3MpIHtcblx0XHRcdHJldHVybiBET01VdGlscy5ET00uZmlyZSh0YXJnZXQsIG5hbWUsIGFyZ3MpO1xuXHRcdH0sXG5cblx0XHRpbm5lckh0bWw6IGZ1bmN0aW9uKGVsbSwgaHRtbCkge1xuXHRcdFx0Ly8gV29ya2Fyb3VuZCBmb3IgPGRpdj4gaW4gPHA+IGJ1ZyBvbiBJRSA4ICM2MTc4XG5cdFx0XHRET01VdGlscy5ET00uc2V0SFRNTChlbG0sIGh0bWwpO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gZnVuY3M7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0JveFV0aWxzLmpzXG5cbi8qKlxuICogQm94VXRpbHMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciBib3ggcGFyc2luZyBhbmQgbWVhc3VyaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Cb3hVdGlsc1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0JveFV0aWxzXCIsIFtcbl0sIGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFBhcnNlcyB0aGUgc3BlY2lmaWVkIGJveCB2YWx1ZS4gQSBib3ggdmFsdWUgY29udGFpbnMgMS00IHByb3BlcnRpZXMgaW4gY2xvY2t3aXNlIG9yZGVyLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwYXJzZUJveFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL051bWJlcn0gdmFsdWUgQm94IHZhbHVlIFwiMCAxIDIgM1wiIG9yIFwiMFwiIGV0Yy5cblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IE9iamVjdCB3aXRoIHRvcC9yaWdodC9ib3R0b20vbGVmdCBwcm9wZXJ0aWVzLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0cGFyc2VCb3g6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgbGVuLCByYWRpeCA9IDEwO1xuXG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlIHx8IDA7XG5cblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0b3A6IHZhbHVlLFxuXHRcdFx0XHRcdGxlZnQ6IHZhbHVlLFxuXHRcdFx0XHRcdGJvdHRvbTogdmFsdWUsXG5cdFx0XHRcdFx0cmlnaHQ6IHZhbHVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoJyAnKTtcblx0XHRcdGxlbiA9IHZhbHVlLmxlbmd0aDtcblxuXHRcdFx0aWYgKGxlbiA9PT0gMSkge1xuXHRcdFx0XHR2YWx1ZVsxXSA9IHZhbHVlWzJdID0gdmFsdWVbM10gPSB2YWx1ZVswXTtcblx0XHRcdH0gZWxzZSBpZiAobGVuID09PSAyKSB7XG5cdFx0XHRcdHZhbHVlWzJdID0gdmFsdWVbMF07XG5cdFx0XHRcdHZhbHVlWzNdID0gdmFsdWVbMV07XG5cdFx0XHR9IGVsc2UgaWYgKGxlbiA9PT0gMykge1xuXHRcdFx0XHR2YWx1ZVszXSA9IHZhbHVlWzFdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0b3A6IHBhcnNlSW50KHZhbHVlWzBdLCByYWRpeCkgfHwgMCxcblx0XHRcdFx0cmlnaHQ6IHBhcnNlSW50KHZhbHVlWzFdLCByYWRpeCkgfHwgMCxcblx0XHRcdFx0Ym90dG9tOiBwYXJzZUludCh2YWx1ZVsyXSwgcmFkaXgpIHx8IDAsXG5cdFx0XHRcdGxlZnQ6IHBhcnNlSW50KHZhbHVlWzNdLCByYWRpeCkgfHwgMFxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0bWVhc3VyZUJveDogZnVuY3Rpb24oZWxtLCBwcmVmaXgpIHtcblx0XHRcdGZ1bmN0aW9uIGdldFN0eWxlKG5hbWUpIHtcblx0XHRcdFx0dmFyIGRlZmF1bHRWaWV3ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRcdFx0aWYgKGRlZmF1bHRWaWV3KSB7XG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGNhbWVsY2FzZVxuXHRcdFx0XHRcdG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHRcdHJldHVybiAnLScgKyBhO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsbS5jdXJyZW50U3R5bGVbbmFtZV07XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGdldFNpZGUobmFtZSkge1xuXHRcdFx0XHR2YXIgdmFsID0gcGFyc2VGbG9hdChnZXRTdHlsZShuYW1lKSwgMTApO1xuXG5cdFx0XHRcdHJldHVybiBpc05hTih2YWwpID8gMCA6IHZhbDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dG9wOiBnZXRTaWRlKHByZWZpeCArIFwiVG9wV2lkdGhcIiksXG5cdFx0XHRcdHJpZ2h0OiBnZXRTaWRlKHByZWZpeCArIFwiUmlnaHRXaWR0aFwiKSxcblx0XHRcdFx0Ym90dG9tOiBnZXRTaWRlKHByZWZpeCArIFwiQm90dG9tV2lkdGhcIiksXG5cdFx0XHRcdGxlZnQ6IGdldFNpZGUocHJlZml4ICsgXCJMZWZ0V2lkdGhcIilcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9DbGFzc0xpc3QuanNcblxuLyoqXG4gKiBDbGFzc0xpc3QuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBIYW5kbGVzIGFkZGluZyBhbmQgcmVtb3ZhbCBvZiBjbGFzc2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS51aS5DbGFzc0xpc3RcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9DbGFzc0xpc3RcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihUb29scykge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRmdW5jdGlvbiBub29wKCkge1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdHMgYSBuZXcgY2xhc3MgbGlzdCB0aGUgc3BlY2lmaWVkIG9uY2hhbmdlXG5cdCAqIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2xhc3MgbGlzdCBnZXRzIG1vZGlmZWQuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvciBDbGFzc0xpc3Rcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gb25jaGFuZ2UgT25jaGFuZ2UgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQuXG5cdCAqL1xuXHRmdW5jdGlvbiBDbGFzc0xpc3Qob25jaGFuZ2UpIHtcblx0XHR0aGlzLmNscyA9IFtdO1xuXHRcdHRoaXMuY2xzLl9tYXAgPSB7fTtcblx0XHR0aGlzLm9uY2hhbmdlID0gb25jaGFuZ2UgfHwgbm9vcDtcblx0XHR0aGlzLnByZWZpeCA9ICcnO1xuXHR9XG5cblx0VG9vbHMuZXh0ZW5kKENsYXNzTGlzdC5wcm90b3R5cGUsIHtcblx0XHQvKipcblx0XHQgKiBBZGRzIGEgbmV3IGNsYXNzIHRvIHRoZSBjbGFzcyBsaXN0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY2xzIENsYXNzIHRvIGJlIGFkZGVkLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ2xhc3NMaXN0fSBDdXJyZW50IGNsYXNzIGxpc3QgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0YWRkOiBmdW5jdGlvbihjbHMpIHtcblx0XHRcdGlmIChjbHMgJiYgIXRoaXMuY29udGFpbnMoY2xzKSkge1xuXHRcdFx0XHR0aGlzLmNscy5fbWFwW2Nsc10gPSB0cnVlO1xuXHRcdFx0XHR0aGlzLmNscy5wdXNoKGNscyk7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGNsYXNzIGZyb20gdGhlIGNsYXNzIGxpc3QuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbW92ZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBjbHMgQ2xhc3MgdG8gYmUgcmVtb3ZlZC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNsYXNzTGlzdH0gQ3VycmVudCBjbGFzcyBsaXN0IGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdHJlbW92ZTogZnVuY3Rpb24oY2xzKSB7XG5cdFx0XHRpZiAodGhpcy5jb250YWlucyhjbHMpKSB7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAodGhpcy5jbHNbaV0gPT09IGNscykge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5jbHMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRkZWxldGUgdGhpcy5jbHMuX21hcFtjbHNdO1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2UoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRvZ2dsZXMgYSBjbGFzcyBpbiB0aGUgY2xhc3MgbGlzdC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdG9nZ2xlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNscyBDbGFzcyB0byBiZSBhZGRlZC9yZW1vdmVkLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc3RhdGUgT3B0aW9uYWwgc3RhdGUgaWYgaXQgc2hvdWxkIGJlIGFkZGVkL3JlbW92ZWQuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5DbGFzc0xpc3R9IEN1cnJlbnQgY2xhc3MgbGlzdCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHR0b2dnbGU6IGZ1bmN0aW9uKGNscywgc3RhdGUpIHtcblx0XHRcdHZhciBjdXJTdGF0ZSA9IHRoaXMuY29udGFpbnMoY2xzKTtcblxuXHRcdFx0aWYgKGN1clN0YXRlICE9PSBzdGF0ZSkge1xuXHRcdFx0XHRpZiAoY3VyU3RhdGUpIHtcblx0XHRcdFx0XHR0aGlzLnJlbW92ZShjbHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuYWRkKGNscyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9jaGFuZ2UoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2xhc3MgbGlzdCBoYXMgdGhlIHNwZWNpZmllZCBjbGFzcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgY29udGFpbnNcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY2xzIENsYXNzIHRvIGxvb2sgZm9yLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIGNsYXNzIGV4aXN0cyBvciBub3QuXG5cdFx0ICovXG5cdFx0Y29udGFpbnM6IGZ1bmN0aW9uKGNscykge1xuXHRcdFx0cmV0dXJuICEhdGhpcy5jbHMuX21hcFtjbHNdO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdG9TdHJpbmdcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXG5cdFx0ICovXG5cblx0XHRfY2hhbmdlOiBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzLmNsc1ZhbHVlO1xuXHRcdFx0dGhpcy5vbmNoYW5nZS5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gSUUgOCBjb21wYXRpYmlsaXR5XG5cdENsYXNzTGlzdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgdmFsdWU7XG5cblx0XHRpZiAodGhpcy5jbHNWYWx1ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY2xzVmFsdWU7XG5cdFx0fVxuXG5cdFx0dmFsdWUgPSAnJztcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0dmFsdWUgKz0gJyAnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YWx1ZSArPSB0aGlzLnByZWZpeCArIHRoaXMuY2xzW2ldO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fTtcblxuXHRyZXR1cm4gQ2xhc3NMaXN0O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9SZWZsb3dRdWV1ZS5qc1xuXG4vKipcbiAqIFJlZmxvd1F1ZXVlLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVmbG93IGNvbnRyb2xzIG9uIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZSB3aXRoaW4gYSBmZXcgbWlsbGlzZWNvbmRzIG9uIG9sZGVyIGJyb3dzZXJzLlxuICogSWYgdGhlIHVzZXIgbWFudWFsbHkgcmVmbG93cyB0aGVuIHRoZSBhdXRvbWF0aWMgcmVmbG93IHdpbGwgYmUgY2FuY2VsbGVkLiBUaGlzIGNsYXNzIGlzIHVzZWQgaW50ZXJuYWxseSB3aGVuIHZhcmlvdXMgY29udHJvbCBzdGF0ZXNcbiAqIGNoYW5nZXMgdGhhdCB0cmlnZ2VycyBhIHJlZmxvdy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51aS5SZWZsb3dRdWV1ZVxuICogQHN0YXRpY1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL1JlZmxvd1F1ZXVlXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvRGVsYXlcIlxuXSwgZnVuY3Rpb24oRGVsYXkpIHtcblx0dmFyIGRpcnR5Q3RybHMgPSB7fSwgYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQ7XG5cblx0cmV0dXJuIHtcblx0XHQvKipcblx0XHQgKiBBZGRzIGEgY29udHJvbCB0byB0aGUgbmV4dCBhdXRvbWF0aWMgcmVmbG93IGNhbGwuIFRoaXMgaXMgdGhlIGNvbnRyb2wgdGhhdCBoYWQgYSBzdGF0ZVxuXHRcdCAqIGNoYW5nZSBmb3IgZXhhbXBsZSBpZiB0aGUgY29udHJvbCB3YXMgaGlkZGVuL3Nob3duLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRcblx0XHQgKiBAcGFyYW0ge3RpbnltY2UudWkuQ29udHJvbH0gY3RybCBDb250cm9sIHRvIGFkZCB0byBxdWV1ZS5cblx0XHQgKi9cblx0XHRhZGQ6IGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdHZhciBwYXJlbnQgPSBjdHJsLnBhcmVudCgpO1xuXG5cdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdGlmICghcGFyZW50Ll9sYXlvdXQgfHwgcGFyZW50Ll9sYXlvdXQuaXNOYXRpdmUoKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghZGlydHlDdHJsc1twYXJlbnQuX2lkXSkge1xuXHRcdFx0XHRcdGRpcnR5Q3RybHNbcGFyZW50Ll9pZF0gPSBwYXJlbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWFuaW1hdGlvbkZyYW1lUmVxdWVzdGVkKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0RGVsYXkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGlkLCBjdHJsO1xuXG5cdFx0XHRcdFx0XHRhbmltYXRpb25GcmFtZVJlcXVlc3RlZCA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGlkIGluIGRpcnR5Q3RybHMpIHtcblx0XHRcdFx0XHRcdFx0Y3RybCA9IGRpcnR5Q3RybHNbaWRdO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChjdHJsLnN0YXRlLmdldCgncmVuZGVyZWQnKSkge1xuXHRcdFx0XHRcdFx0XHRcdGN0cmwucmVmbG93KCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZGlydHlDdHJscyA9IHt9O1xuXHRcdFx0XHRcdH0sIGRvY3VtZW50LmJvZHkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBjb250cm9sIGZyb20gdGhlIGF1dG9tYXRpYyByZWZsb3cuIFRoaXMgd2lsbCBoYXBwZW4gd2hlbiBmb3IgZXhhbXBsZSB0aGUgdXNlclxuXHRcdCAqIG1hbnVhbGx5IHRyaWdnZXJzIGEgcmVmbG93LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW1vdmVcblx0XHQgKiBAcGFyYW0ge3RpbnltY2UudWkuQ29udHJvbH0gY3RybCBDb250cm9sIHRvIHJlbW92ZSBmcm9tIHF1ZXVlLlxuXHRcdCAqL1xuXHRcdHJlbW92ZTogZnVuY3Rpb24oY3RybCkge1xuXHRcdFx0aWYgKGRpcnR5Q3RybHNbY3RybC5faWRdKSB7XG5cdFx0XHRcdGRlbGV0ZSBkaXJ0eUN0cmxzW2N0cmwuX2lkXTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0NvbnRyb2wuanNcblxuLyoqXG4gKiBDb250cm9sLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtdGhpczowICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIGNvbnRyb2xzIGFuZCBjb250YWluZXJzLiBBbGwgVUkgY29udHJvbCBpbnN0YW5jZXMgaW5oZXJpdFxuICogZnJvbSB0aGlzIG9uZSBhcyBpdCBoYXMgdGhlIGJhc2UgbG9naWMgbmVlZGVkIGJ5IGFsbCBvZiB0aGVtLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkNvbnRyb2xcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9Db250cm9sXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvQ2xhc3NcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL3V0aWwvRXZlbnREaXNwYXRjaGVyXCIsXG5cdFwidGlueW1jZS9kYXRhL09ic2VydmFibGVPYmplY3RcIixcblx0XCJ0aW55bWNlL3VpL0NvbGxlY3Rpb25cIixcblx0XCJ0aW55bWNlL3VpL0RvbVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vRG9tUXVlcnlcIixcblx0XCJ0aW55bWNlL3VpL0JveFV0aWxzXCIsXG5cdFwidGlueW1jZS91aS9DbGFzc0xpc3RcIixcblx0XCJ0aW55bWNlL3VpL1JlZmxvd1F1ZXVlXCJcbl0sIGZ1bmN0aW9uKENsYXNzLCBUb29scywgRXZlbnREaXNwYXRjaGVyLCBPYnNlcnZhYmxlT2JqZWN0LCBDb2xsZWN0aW9uLCBEb21VdGlscywgJCwgQm94VXRpbHMsIENsYXNzTGlzdCwgUmVmbG93UXVldWUpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIGhhc01vdXNlV2hlZWxFdmVudFN1cHBvcnQgPSBcIm9ubW91c2V3aGVlbFwiIGluIGRvY3VtZW50O1xuXHR2YXIgaGFzV2hlZWxFdmVudFN1cHBvcnQgPSBmYWxzZTtcblx0dmFyIGNsYXNzUHJlZml4ID0gXCJtY2UtXCI7XG5cdHZhciBDb250cm9sLCBpZENvdW50ZXIgPSAwO1xuXG5cdHZhciBwcm90byA9IHtcblx0XHRTdGF0aWNzOiB7XG5cdFx0XHRjbGFzc1ByZWZpeDogY2xhc3NQcmVmaXhcblx0XHR9LFxuXG5cdFx0aXNSdGw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIENvbnRyb2wucnRsO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDbGFzcy9pZCBwcmVmaXggdG8gdXNlIGZvciBhbGwgY29udHJvbHMuXG5cdFx0ICpcblx0XHQgKiBAZmluYWxcblx0XHQgKiBAZmllbGQge1N0cmluZ30gY2xhc3NQcmVmaXhcblx0XHQgKi9cblx0XHRjbGFzc1ByZWZpeDogY2xhc3NQcmVmaXgsXG5cblx0XHQvKipcblx0XHQgKiBDb25zdHJ1Y3RzIGEgbmV3IGNvbnRyb2wgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNldHRpbmdzLlxuXHRcdCAqXG5cdFx0ICogQGNvbnN0cnVjdG9yXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE5hbWUvdmFsdWUgb2JqZWN0IHdpdGggc2V0dGluZ3MuXG5cdFx0ICogQHNldHRpbmcge1N0cmluZ30gc3R5bGUgU3R5bGUgQ1NTIHByb3BlcnRpZXMgdG8gYWRkLlxuXHRcdCAqIEBzZXR0aW5nIHtTdHJpbmd9IGJvcmRlciBCb3JkZXIgYm94IHZhbHVlcyBleGFtcGxlOiAxIDEgMSAxXG5cdFx0ICogQHNldHRpbmcge1N0cmluZ30gcGFkZGluZyBQYWRkaW5nIGJveCB2YWx1ZXMgZXhhbXBsZTogMSAxIDEgMVxuXHRcdCAqIEBzZXR0aW5nIHtTdHJpbmd9IG1hcmdpbiBNYXJnaW4gYm94IHZhbHVlcyBleGFtcGxlOiAxIDEgMSAxXG5cdFx0ICogQHNldHRpbmcge051bWJlcn0gbWluV2lkdGggTWluaW1hbCB3aWR0aCBmb3IgdGhlIGNvbnRyb2wuXG5cdFx0ICogQHNldHRpbmcge051bWJlcn0gbWluSGVpZ2h0IE1pbmltYWwgaGVpZ2h0IGZvciB0aGUgY29udHJvbC5cblx0XHQgKiBAc2V0dGluZyB7U3RyaW5nfSBjbGFzc2VzIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMgdG8gYWRkLlxuXHRcdCAqIEBzZXR0aW5nIHtTdHJpbmd9IHJvbGUgV0FJLUFSSUEgcm9sZSB0byB1c2UgZm9yIGNvbnRyb2wuXG5cdFx0ICogQHNldHRpbmcge0Jvb2xlYW59IGhpZGRlbiBJcyB0aGUgY29udHJvbCBoaWRkZW4gYnkgZGVmYXVsdC5cblx0XHQgKiBAc2V0dGluZyB7Qm9vbGVhbn0gZGlzYWJsZWQgSXMgdGhlIGNvbnRyb2wgZGlzYWJsZWQgYnkgZGVmYXVsdC5cblx0XHQgKiBAc2V0dGluZyB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGNvbnRyb2wgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgY2xhc3NlcywgZGVmYXVsdENsYXNzZXM7XG5cblx0XHRcdGZ1bmN0aW9uIGFwcGx5Q2xhc3NlcyhjbGFzc2VzKSB7XG5cdFx0XHRcdHZhciBpO1xuXG5cdFx0XHRcdGNsYXNzZXMgPSBjbGFzc2VzLnNwbGl0KCcgJyk7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZChjbGFzc2VzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLnNldHRpbmdzID0gc2V0dGluZ3MgPSBUb29scy5leHRlbmQoe30sIHNlbGYuRGVmYXVsdHMsIHNldHRpbmdzKTtcblxuXHRcdFx0Ly8gSW5pdGlhbCBzdGF0ZXNcblx0XHRcdHNlbGYuX2lkID0gc2V0dGluZ3MuaWQgfHwgKCdtY2V1XycgKyAoaWRDb3VudGVyKyspKTtcblx0XHRcdHNlbGYuX2FyaWEgPSB7cm9sZTogc2V0dGluZ3Mucm9sZX07XG5cdFx0XHRzZWxmLl9lbG1DYWNoZSA9IHt9O1xuXHRcdFx0c2VsZi4kID0gJDtcblxuXHRcdFx0c2VsZi5zdGF0ZSA9IG5ldyBPYnNlcnZhYmxlT2JqZWN0KHtcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0YWN0aXZlOiBmYWxzZSxcblx0XHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHR2YWx1ZTogJydcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLmRhdGEgPSBuZXcgT2JzZXJ2YWJsZU9iamVjdChzZXR0aW5ncy5kYXRhKTtcblxuXHRcdFx0c2VsZi5jbGFzc2VzID0gbmV3IENsYXNzTGlzdChmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKHNlbGYuc3RhdGUuZ2V0KCdyZW5kZXJlZCcpKSB7XG5cdFx0XHRcdFx0c2VsZi5nZXRFbCgpLmNsYXNzTmFtZSA9IHRoaXMudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRzZWxmLmNsYXNzZXMucHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeDtcblxuXHRcdFx0Ly8gU2V0dXAgY2xhc3Nlc1xuXHRcdFx0Y2xhc3NlcyA9IHNldHRpbmdzLmNsYXNzZXM7XG5cdFx0XHRpZiAoY2xhc3Nlcykge1xuXHRcdFx0XHRpZiAoc2VsZi5EZWZhdWx0cykge1xuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc2VzID0gc2VsZi5EZWZhdWx0cy5jbGFzc2VzO1xuXG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRDbGFzc2VzICYmIGNsYXNzZXMgIT0gZGVmYXVsdENsYXNzZXMpIHtcblx0XHRcdFx0XHRcdGFwcGx5Q2xhc3NlcyhkZWZhdWx0Q2xhc3Nlcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXBwbHlDbGFzc2VzKGNsYXNzZXMpO1xuXHRcdFx0fVxuXG5cdFx0XHRUb29scy5lYWNoKCd0aXRsZSB0ZXh0IG5hbWUgdmlzaWJsZSBkaXNhYmxlZCBhY3RpdmUgdmFsdWUnLnNwbGl0KCcgJyksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0aWYgKG5hbWUgaW4gc2V0dGluZ3MpIHtcblx0XHRcdFx0XHRzZWxmW25hbWVdKHNldHRpbmdzW25hbWVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmIChzZWxmLmRpc2FibGVkKCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIE5hbWUvdmFsdWUgb2JqZWN0IHdpdGggc2V0dGluZ3MgZm9yIHRoZSBjdXJyZW50IGNvbnRyb2wuXG5cdFx0XHQgKlxuXHRcdFx0ICogQGZpZWxkIHtPYmplY3R9IHNldHRpbmdzXG5cdFx0XHQgKi9cblx0XHRcdHNlbGYuc2V0dGluZ3MgPSBzZXR0aW5ncztcblxuXHRcdFx0c2VsZi5ib3JkZXJCb3ggPSBCb3hVdGlscy5wYXJzZUJveChzZXR0aW5ncy5ib3JkZXIpO1xuXHRcdFx0c2VsZi5wYWRkaW5nQm94ID0gQm94VXRpbHMucGFyc2VCb3goc2V0dGluZ3MucGFkZGluZyk7XG5cdFx0XHRzZWxmLm1hcmdpbkJveCA9IEJveFV0aWxzLnBhcnNlQm94KHNldHRpbmdzLm1hcmdpbik7XG5cblx0XHRcdGlmIChzZXR0aW5ncy5oaWRkZW4pIHtcblx0XHRcdFx0c2VsZi5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIFdpbGwgZ2VuZXJhdGUgZ2V0dGVyL3NldHRlciBtZXRob2RzIGZvciB0aGVzZSBwcm9wZXJ0aWVzXG5cdFx0UHJvcGVydGllczogJ3BhcmVudCxuYW1lJyxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHJvb3QgZWxlbWVudCB0byByZW5kZXIgY29udHJvbHMgaW50by5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0Q29udGFpbmVyRWxtXG5cdFx0ICogQHJldHVybiB7RWxlbWVudH0gSFRNTCBET00gZWxlbWVudCB0byByZW5kZXIgaW50by5cblx0XHQgKi9cblx0XHRnZXRDb250YWluZXJFbG06IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIERvbVV0aWxzLmdldENvbnRhaW5lcigpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgY29udHJvbCBpbnN0YW5jZSBmb3IgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFBhcmVudEN0cmxcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsbSBIVE1MIGRvbSBlbGVtZW50IHRvIGdldCBwYXJlbnQgY29udHJvbCBmcm9tLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ29udHJvbCBpbnN0YW5jZSBvciB1bmRlZmluZWQuXG5cdFx0ICovXG5cdFx0Z2V0UGFyZW50Q3RybDogZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHR2YXIgY3RybCwgbG9va3VwID0gdGhpcy5nZXRSb290KCkuY29udHJvbElkTG9va3VwO1xuXG5cdFx0XHR3aGlsZSAoZWxtICYmIGxvb2t1cCkge1xuXHRcdFx0XHRjdHJsID0gbG9va3VwW2VsbS5pZF07XG5cdFx0XHRcdGlmIChjdHJsKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbG0gPSBlbG0ucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGN0cmw7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEluaXRpYWxpemVzIHRoZSBjdXJyZW50IGNvbnRyb2xzIGxheW91dCByZWN0LlxuXHRcdCAqIFRoaXMgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgbGF5b3V0IG1hbmFnZXJzIHRvIGRldGVybWluZSB0aGVcblx0XHQgKiBkZWZhdWx0IG1pbldpZHRoL21pbkhlaWdodCBldGMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGluaXRMYXlvdXRSZWN0XG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBMYXlvdXQgcmVjdCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRpbml0TGF5b3V0UmVjdDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHNldHRpbmdzID0gc2VsZi5zZXR0aW5ncywgYm9yZGVyQm94LCBsYXlvdXRSZWN0O1xuXHRcdFx0dmFyIGVsbSA9IHNlbGYuZ2V0RWwoKSwgd2lkdGgsIGhlaWdodCwgbWluV2lkdGgsIG1pbkhlaWdodCwgYXV0b1Jlc2l6ZTtcblx0XHRcdHZhciBzdGFydE1pbldpZHRoLCBzdGFydE1pbkhlaWdodCwgaW5pdGlhbFNpemU7XG5cblx0XHRcdC8vIE1lYXN1cmUgdGhlIGN1cnJlbnQgZWxlbWVudFxuXHRcdFx0Ym9yZGVyQm94ID0gc2VsZi5ib3JkZXJCb3ggPSBzZWxmLmJvcmRlckJveCB8fCBCb3hVdGlscy5tZWFzdXJlQm94KGVsbSwgJ2JvcmRlcicpO1xuXHRcdFx0c2VsZi5wYWRkaW5nQm94ID0gc2VsZi5wYWRkaW5nQm94IHx8IEJveFV0aWxzLm1lYXN1cmVCb3goZWxtLCAncGFkZGluZycpO1xuXHRcdFx0c2VsZi5tYXJnaW5Cb3ggPSBzZWxmLm1hcmdpbkJveCB8fCBCb3hVdGlscy5tZWFzdXJlQm94KGVsbSwgJ21hcmdpbicpO1xuXHRcdFx0aW5pdGlhbFNpemUgPSBEb21VdGlscy5nZXRTaXplKGVsbSk7XG5cblx0XHRcdC8vIFNldHVwIG1pbldpZHRoL21pbkhlaWdodCBhbmQgd2lkdGgvaGVpZ2h0XG5cdFx0XHRzdGFydE1pbldpZHRoID0gc2V0dGluZ3MubWluV2lkdGg7XG5cdFx0XHRzdGFydE1pbkhlaWdodCA9IHNldHRpbmdzLm1pbkhlaWdodDtcblx0XHRcdG1pbldpZHRoID0gc3RhcnRNaW5XaWR0aCB8fCBpbml0aWFsU2l6ZS53aWR0aDtcblx0XHRcdG1pbkhlaWdodCA9IHN0YXJ0TWluSGVpZ2h0IHx8IGluaXRpYWxTaXplLmhlaWdodDtcblx0XHRcdHdpZHRoID0gc2V0dGluZ3Mud2lkdGg7XG5cdFx0XHRoZWlnaHQgPSBzZXR0aW5ncy5oZWlnaHQ7XG5cdFx0XHRhdXRvUmVzaXplID0gc2V0dGluZ3MuYXV0b1Jlc2l6ZTtcblx0XHRcdGF1dG9SZXNpemUgPSB0eXBlb2YgYXV0b1Jlc2l6ZSAhPSBcInVuZGVmaW5lZFwiID8gYXV0b1Jlc2l6ZSA6ICF3aWR0aCAmJiAhaGVpZ2h0O1xuXG5cdFx0XHR3aWR0aCA9IHdpZHRoIHx8IG1pbldpZHRoO1xuXHRcdFx0aGVpZ2h0ID0gaGVpZ2h0IHx8IG1pbkhlaWdodDtcblxuXHRcdFx0dmFyIGRlbHRhVyA9IGJvcmRlckJveC5sZWZ0ICsgYm9yZGVyQm94LnJpZ2h0O1xuXHRcdFx0dmFyIGRlbHRhSCA9IGJvcmRlckJveC50b3AgKyBib3JkZXJCb3guYm90dG9tO1xuXG5cdFx0XHR2YXIgbWF4VyA9IHNldHRpbmdzLm1heFdpZHRoIHx8IDB4RkZGRjtcblx0XHRcdHZhciBtYXhIID0gc2V0dGluZ3MubWF4SGVpZ2h0IHx8IDB4RkZGRjtcblxuXHRcdFx0Ly8gU2V0dXAgaW5pdGlhbCBsYXlvdXQgcmVjdFxuXHRcdFx0c2VsZi5fbGF5b3V0UmVjdCA9IGxheW91dFJlY3QgPSB7XG5cdFx0XHRcdHg6IHNldHRpbmdzLnggfHwgMCxcblx0XHRcdFx0eTogc2V0dGluZ3MueSB8fCAwLFxuXHRcdFx0XHR3OiB3aWR0aCxcblx0XHRcdFx0aDogaGVpZ2h0LFxuXHRcdFx0XHRkZWx0YVc6IGRlbHRhVyxcblx0XHRcdFx0ZGVsdGFIOiBkZWx0YUgsXG5cdFx0XHRcdGNvbnRlbnRXOiB3aWR0aCAtIGRlbHRhVyxcblx0XHRcdFx0Y29udGVudEg6IGhlaWdodCAtIGRlbHRhSCxcblx0XHRcdFx0aW5uZXJXOiB3aWR0aCAtIGRlbHRhVyxcblx0XHRcdFx0aW5uZXJIOiBoZWlnaHQgLSBkZWx0YUgsXG5cdFx0XHRcdHN0YXJ0TWluV2lkdGg6IHN0YXJ0TWluV2lkdGggfHwgMCxcblx0XHRcdFx0c3RhcnRNaW5IZWlnaHQ6IHN0YXJ0TWluSGVpZ2h0IHx8IDAsXG5cdFx0XHRcdG1pblc6IE1hdGgubWluKG1pbldpZHRoLCBtYXhXKSxcblx0XHRcdFx0bWluSDogTWF0aC5taW4obWluSGVpZ2h0LCBtYXhIKSxcblx0XHRcdFx0bWF4VzogbWF4Vyxcblx0XHRcdFx0bWF4SDogbWF4SCxcblx0XHRcdFx0YXV0b1Jlc2l6ZTogYXV0b1Jlc2l6ZSxcblx0XHRcdFx0c2Nyb2xsVzogMFxuXHRcdFx0fTtcblxuXHRcdFx0c2VsZi5fbGFzdExheW91dFJlY3QgPSB7fTtcblxuXHRcdFx0cmV0dXJuIGxheW91dFJlY3Q7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEdldHRlci9zZXR0ZXIgZm9yIHRoZSBjdXJyZW50IGxheW91dCByZWN0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBsYXlvdXRSZWN0XG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IFtuZXdSZWN0XSBPcHRpb25hbCBuZXcgbGF5b3V0IHJlY3QuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sL09iamVjdH0gQ3VycmVudCBjb250cm9sIG9yIHJlY3Qgb2JqZWN0LlxuXHRcdCAqL1xuXHRcdGxheW91dFJlY3Q6IGZ1bmN0aW9uKG5ld1JlY3QpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgY3VyUmVjdCA9IHNlbGYuX2xheW91dFJlY3QsIGxhc3RMYXlvdXRSZWN0LCBzaXplLCBkZWx0YVdpZHRoLCBkZWx0YUhlaWdodCwgdW5kZWYsIHJlcGFpbnRDb250cm9scztcblxuXHRcdFx0Ly8gSW5pdGlhbGl6ZSBkZWZhdWx0IGxheW91dCByZWN0XG5cdFx0XHRpZiAoIWN1clJlY3QpIHtcblx0XHRcdFx0Y3VyUmVjdCA9IHNlbGYuaW5pdExheW91dFJlY3QoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IG5ldyByZWN0IHZhbHVlc1xuXHRcdFx0aWYgKG5ld1JlY3QpIHtcblx0XHRcdFx0Ly8gQ2FsYyBkZWx0YXMgYmV0d2VlbiBpbm5lciBhbmQgb3V0ZXIgc2l6ZXNcblx0XHRcdFx0ZGVsdGFXaWR0aCA9IGN1clJlY3QuZGVsdGFXO1xuXHRcdFx0XHRkZWx0YUhlaWdodCA9IGN1clJlY3QuZGVsdGFIO1xuXG5cdFx0XHRcdC8vIFNldCB4IHBvc2l0aW9uXG5cdFx0XHRcdGlmIChuZXdSZWN0LnggIT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0Y3VyUmVjdC54ID0gbmV3UmVjdC54O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IHkgcG9zaXRpb25cblx0XHRcdFx0aWYgKG5ld1JlY3QueSAhPT0gdW5kZWYpIHtcblx0XHRcdFx0XHRjdXJSZWN0LnkgPSBuZXdSZWN0Lnk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgbWluV1xuXHRcdFx0XHRpZiAobmV3UmVjdC5taW5XICE9PSB1bmRlZikge1xuXHRcdFx0XHRcdGN1clJlY3QubWluVyA9IG5ld1JlY3QubWluVztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBtaW5IXG5cdFx0XHRcdGlmIChuZXdSZWN0Lm1pbkggIT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0Y3VyUmVjdC5taW5IID0gbmV3UmVjdC5taW5IO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IG5ldyB3aWR0aCBhbmQgY2FsY3VsYXRlIGlubmVyIHdpZHRoXG5cdFx0XHRcdHNpemUgPSBuZXdSZWN0Lnc7XG5cdFx0XHRcdGlmIChzaXplICE9PSB1bmRlZikge1xuXHRcdFx0XHRcdHNpemUgPSBzaXplIDwgY3VyUmVjdC5taW5XID8gY3VyUmVjdC5taW5XIDogc2l6ZTtcblx0XHRcdFx0XHRzaXplID0gc2l6ZSA+IGN1clJlY3QubWF4VyA/IGN1clJlY3QubWF4VyA6IHNpemU7XG5cdFx0XHRcdFx0Y3VyUmVjdC53ID0gc2l6ZTtcblx0XHRcdFx0XHRjdXJSZWN0LmlubmVyVyA9IHNpemUgLSBkZWx0YVdpZHRoO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IG5ldyBoZWlnaHQgYW5kIGNhbGN1bGF0ZSBpbm5lciBoZWlnaHRcblx0XHRcdFx0c2l6ZSA9IG5ld1JlY3QuaDtcblx0XHRcdFx0aWYgKHNpemUgIT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0c2l6ZSA9IHNpemUgPCBjdXJSZWN0Lm1pbkggPyBjdXJSZWN0Lm1pbkggOiBzaXplO1xuXHRcdFx0XHRcdHNpemUgPSBzaXplID4gY3VyUmVjdC5tYXhIID8gY3VyUmVjdC5tYXhIIDogc2l6ZTtcblx0XHRcdFx0XHRjdXJSZWN0LmggPSBzaXplO1xuXHRcdFx0XHRcdGN1clJlY3QuaW5uZXJIID0gc2l6ZSAtIGRlbHRhSGVpZ2h0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IG5ldyBpbm5lciB3aWR0aCBhbmQgY2FsY3VsYXRlIHdpZHRoXG5cdFx0XHRcdHNpemUgPSBuZXdSZWN0LmlubmVyVztcblx0XHRcdFx0aWYgKHNpemUgIT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0c2l6ZSA9IHNpemUgPCBjdXJSZWN0Lm1pblcgLSBkZWx0YVdpZHRoID8gY3VyUmVjdC5taW5XIC0gZGVsdGFXaWR0aCA6IHNpemU7XG5cdFx0XHRcdFx0c2l6ZSA9IHNpemUgPiBjdXJSZWN0Lm1heFcgLSBkZWx0YVdpZHRoID8gY3VyUmVjdC5tYXhXIC0gZGVsdGFXaWR0aCA6IHNpemU7XG5cdFx0XHRcdFx0Y3VyUmVjdC5pbm5lclcgPSBzaXplO1xuXHRcdFx0XHRcdGN1clJlY3QudyA9IHNpemUgKyBkZWx0YVdpZHRoO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IG5ldyBoZWlnaHQgYW5kIGNhbGN1bGF0ZSBpbm5lciBoZWlnaHRcblx0XHRcdFx0c2l6ZSA9IG5ld1JlY3QuaW5uZXJIO1xuXHRcdFx0XHRpZiAoc2l6ZSAhPT0gdW5kZWYpIHtcblx0XHRcdFx0XHRzaXplID0gc2l6ZSA8IGN1clJlY3QubWluSCAtIGRlbHRhSGVpZ2h0ID8gY3VyUmVjdC5taW5IIC0gZGVsdGFIZWlnaHQgOiBzaXplO1xuXHRcdFx0XHRcdHNpemUgPSBzaXplID4gY3VyUmVjdC5tYXhIIC0gZGVsdGFIZWlnaHQgPyBjdXJSZWN0Lm1heEggLSBkZWx0YUhlaWdodCA6IHNpemU7XG5cdFx0XHRcdFx0Y3VyUmVjdC5pbm5lckggPSBzaXplO1xuXHRcdFx0XHRcdGN1clJlY3QuaCA9IHNpemUgKyBkZWx0YUhlaWdodDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBuZXcgY29udGVudFdcblx0XHRcdFx0aWYgKG5ld1JlY3QuY29udGVudFcgIT09IHVuZGVmKSB7XG5cdFx0XHRcdFx0Y3VyUmVjdC5jb250ZW50VyA9IG5ld1JlY3QuY29udGVudFc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgbmV3IGNvbnRlbnRIXG5cdFx0XHRcdGlmIChuZXdSZWN0LmNvbnRlbnRIICE9PSB1bmRlZikge1xuXHRcdFx0XHRcdGN1clJlY3QuY29udGVudEggPSBuZXdSZWN0LmNvbnRlbnRIO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ29tcGFyZSBsYXN0IGxheW91dCByZWN0IHdpdGggdGhlIGN1cnJlbnQgb25lIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHJlcGFpbnQgb3Igbm90XG5cdFx0XHRcdGxhc3RMYXlvdXRSZWN0ID0gc2VsZi5fbGFzdExheW91dFJlY3Q7XG5cdFx0XHRcdGlmIChsYXN0TGF5b3V0UmVjdC54ICE9PSBjdXJSZWN0LnggfHwgbGFzdExheW91dFJlY3QueSAhPT0gY3VyUmVjdC55IHx8XG5cdFx0XHRcdFx0bGFzdExheW91dFJlY3QudyAhPT0gY3VyUmVjdC53IHx8IGxhc3RMYXlvdXRSZWN0LmggIT09IGN1clJlY3QuaCkge1xuXHRcdFx0XHRcdHJlcGFpbnRDb250cm9scyA9IENvbnRyb2wucmVwYWludENvbnRyb2xzO1xuXG5cdFx0XHRcdFx0aWYgKHJlcGFpbnRDb250cm9scykge1xuXHRcdFx0XHRcdFx0aWYgKHJlcGFpbnRDb250cm9scy5tYXAgJiYgIXJlcGFpbnRDb250cm9scy5tYXBbc2VsZi5faWRdKSB7XG5cdFx0XHRcdFx0XHRcdHJlcGFpbnRDb250cm9scy5wdXNoKHNlbGYpO1xuXHRcdFx0XHRcdFx0XHRyZXBhaW50Q29udHJvbHMubWFwW3NlbGYuX2lkXSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bGFzdExheW91dFJlY3QueCA9IGN1clJlY3QueDtcblx0XHRcdFx0XHRsYXN0TGF5b3V0UmVjdC55ID0gY3VyUmVjdC55O1xuXHRcdFx0XHRcdGxhc3RMYXlvdXRSZWN0LncgPSBjdXJSZWN0Lnc7XG5cdFx0XHRcdFx0bGFzdExheW91dFJlY3QuaCA9IGN1clJlY3QuaDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBzZWxmO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY3VyUmVjdDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVwYWludHMgdGhlIGNvbnRyb2wgYWZ0ZXIgYSBsYXlvdXQgb3BlcmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZXBhaW50XG5cdFx0ICovXG5cdFx0cmVwYWludDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHN0eWxlLCBib2R5U3R5bGUsIGJvZHlFbG0sIHJlY3QsIGJvcmRlckJveDtcblx0XHRcdHZhciBib3JkZXJXLCBib3JkZXJILCBsYXN0UmVwYWludFJlY3QsIHJvdW5kLCB2YWx1ZTtcblxuXHRcdFx0Ly8gVXNlIE1hdGgucm91bmQgb24gYWxsIHZhbHVlcyBvbiBJRSA8IDlcblx0XHRcdHJvdW5kID0gIWRvY3VtZW50LmNyZWF0ZVJhbmdlID8gTWF0aC5yb3VuZCA6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH07XG5cblx0XHRcdHN0eWxlID0gc2VsZi5nZXRFbCgpLnN0eWxlO1xuXHRcdFx0cmVjdCA9IHNlbGYuX2xheW91dFJlY3Q7XG5cdFx0XHRsYXN0UmVwYWludFJlY3QgPSBzZWxmLl9sYXN0UmVwYWludFJlY3QgfHwge307XG5cblx0XHRcdGJvcmRlckJveCA9IHNlbGYuYm9yZGVyQm94O1xuXHRcdFx0Ym9yZGVyVyA9IGJvcmRlckJveC5sZWZ0ICsgYm9yZGVyQm94LnJpZ2h0O1xuXHRcdFx0Ym9yZGVySCA9IGJvcmRlckJveC50b3AgKyBib3JkZXJCb3guYm90dG9tO1xuXG5cdFx0XHRpZiAocmVjdC54ICE9PSBsYXN0UmVwYWludFJlY3QueCkge1xuXHRcdFx0XHRzdHlsZS5sZWZ0ID0gcm91bmQocmVjdC54KSArICdweCc7XG5cdFx0XHRcdGxhc3RSZXBhaW50UmVjdC54ID0gcmVjdC54O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVjdC55ICE9PSBsYXN0UmVwYWludFJlY3QueSkge1xuXHRcdFx0XHRzdHlsZS50b3AgPSByb3VuZChyZWN0LnkpICsgJ3B4Jztcblx0XHRcdFx0bGFzdFJlcGFpbnRSZWN0LnkgPSByZWN0Lnk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZWN0LncgIT09IGxhc3RSZXBhaW50UmVjdC53KSB7XG5cdFx0XHRcdHZhbHVlID0gcm91bmQocmVjdC53IC0gYm9yZGVyVyk7XG5cdFx0XHRcdHN0eWxlLndpZHRoID0gKHZhbHVlID49IDAgPyB2YWx1ZSA6IDApICsgJ3B4Jztcblx0XHRcdFx0bGFzdFJlcGFpbnRSZWN0LncgPSByZWN0Lnc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZWN0LmggIT09IGxhc3RSZXBhaW50UmVjdC5oKSB7XG5cdFx0XHRcdHZhbHVlID0gcm91bmQocmVjdC5oIC0gYm9yZGVySCk7XG5cdFx0XHRcdHN0eWxlLmhlaWdodCA9ICh2YWx1ZSA+PSAwID8gdmFsdWUgOiAwKSArICdweCc7XG5cdFx0XHRcdGxhc3RSZXBhaW50UmVjdC5oID0gcmVjdC5oO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVcGRhdGUgYm9keSBpZiBuZWVkZWRcblx0XHRcdGlmIChzZWxmLl9oYXNCb2R5ICYmIHJlY3QuaW5uZXJXICE9PSBsYXN0UmVwYWludFJlY3QuaW5uZXJXKSB7XG5cdFx0XHRcdHZhbHVlID0gcm91bmQocmVjdC5pbm5lclcpO1xuXG5cdFx0XHRcdGJvZHlFbG0gPSBzZWxmLmdldEVsKCdib2R5Jyk7XG5cdFx0XHRcdGlmIChib2R5RWxtKSB7XG5cdFx0XHRcdFx0Ym9keVN0eWxlID0gYm9keUVsbS5zdHlsZTtcblx0XHRcdFx0XHRib2R5U3R5bGUud2lkdGggPSAodmFsdWUgPj0gMCA/IHZhbHVlIDogMCkgKyAncHgnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGFzdFJlcGFpbnRSZWN0LmlubmVyVyA9IHJlY3QuaW5uZXJXO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5faGFzQm9keSAmJiByZWN0LmlubmVySCAhPT0gbGFzdFJlcGFpbnRSZWN0LmlubmVySCkge1xuXHRcdFx0XHR2YWx1ZSA9IHJvdW5kKHJlY3QuaW5uZXJIKTtcblxuXHRcdFx0XHRib2R5RWxtID0gYm9keUVsbSB8fCBzZWxmLmdldEVsKCdib2R5Jyk7XG5cdFx0XHRcdGlmIChib2R5RWxtKSB7XG5cdFx0XHRcdFx0Ym9keVN0eWxlID0gYm9keVN0eWxlIHx8IGJvZHlFbG0uc3R5bGU7XG5cdFx0XHRcdFx0Ym9keVN0eWxlLmhlaWdodCA9ICh2YWx1ZSA+PSAwID8gdmFsdWUgOiAwKSArICdweCc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsYXN0UmVwYWludFJlY3QuaW5uZXJIID0gcmVjdC5pbm5lckg7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuX2xhc3RSZXBhaW50UmVjdCA9IGxhc3RSZXBhaW50UmVjdDtcblx0XHRcdHNlbGYuZmlyZSgncmVwYWludCcsIHt9LCBmYWxzZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFVwZGF0ZXMgdGhlIGNvbnRyb2xzIGxheW91dCByZWN0IGJ5IHJlLW1lYXN1aW5nIGl0LlxuXHRcdCAqL1xuXHRcdHVwZGF0ZUxheW91dFJlY3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLnBhcmVudCgpLl9sYXN0UmVjdCA9IG51bGw7XG5cblx0XHRcdERvbVV0aWxzLmNzcyhzZWxmLmdldEVsKCksIHt3aWR0aDogJycsIGhlaWdodDogJyd9KTtcblxuXHRcdFx0c2VsZi5fbGF5b3V0UmVjdCA9IHNlbGYuX2xhc3RSZXBhaW50UmVjdCA9IHNlbGYuX2xhc3RMYXlvdXRSZWN0ID0gbnVsbDtcblx0XHRcdHNlbGYuaW5pdExheW91dFJlY3QoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQmluZHMgYSBjYWxsYmFjayB0byB0aGUgc3BlY2lmaWVkIGV2ZW50LiBUaGlzIGV2ZW50IGNhbiBib3RoIGJlXG5cdFx0ICogbmF0aXZlIGJyb3dzZXIgZXZlbnRzIGxpa2UgXCJjbGlja1wiIG9yIGN1c3RvbSBvbmVzIGxpa2UgUG9zdFJlbmRlci5cblx0XHQgKlxuXHRcdCAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBhIERPTSBldmVudCBsaWtlIG9iamVjdCB0aGF0IGVuYWJsZXMgeW91dCBkbyBzdG9wIHByb3BhZ2F0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBvblxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGJpbmQuIEZvciBleGFtcGxlIFwiY2xpY2tcIi5cblx0XHQgKiBAcGFyYW0ge1N0cmluZy9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmVzIHRoZSBldmVudCBvY2N1cnMuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sfSBDdXJyZW50IGNvbnRyb2wgb2JqZWN0LlxuXHRcdCAqL1xuXHRcdG9uOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRmdW5jdGlvbiByZXNvbHZlQ2FsbGJhY2tOYW1lKG5hbWUpIHtcblx0XHRcdFx0dmFyIGNhbGxiYWNrLCBzY29wZTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIG5hbWUgIT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0aWYgKCFjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0c2VsZi5wYXJlbnRzQW5kU2VsZigpLmVhY2goZnVuY3Rpb24oY3RybCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gY3RybC5zZXR0aW5ncy5jYWxsYmFja3M7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrcyAmJiAoY2FsbGJhY2sgPSBjYWxsYmFja3NbbmFtZV0pKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2NvcGUgPSBjdHJsO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0ZS5hY3Rpb24gPSBuYW1lO1xuXHRcdFx0XHRcdFx0dGhpcy5maXJlKCdleGVjdXRlJywgZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoc2NvcGUsIGUpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRnZXRFdmVudERpc3BhdGNoZXIoc2VsZikub24obmFtZSwgcmVzb2x2ZUNhbGxiYWNrTmFtZShjYWxsYmFjaykpO1xuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVW5iaW5kcyB0aGUgc3BlY2lmaWVkIGV2ZW50IGFuZCBvcHRpb25hbGx5IGEgc3BlY2lmaWMgY2FsbGJhY2suIElmIHlvdSBvbWl0IHRoZSBuYW1lXG5cdFx0ICogcGFyYW1ldGVyIGFsbCBldmVudCBoYW5kbGVycyB3aWxsIGJlIHJlbW92ZWQuIElmIHlvdSBvbWl0IHRoZSBjYWxsYmFjayBhbGwgZXZlbnQgaGFuZGxlc1xuXHRcdCAqIGJ5IHRoZSBzcGVjaWZpZWQgbmFtZSB3aWxsIGJlIHJlbW92ZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG9mZlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZV0gTmFtZSBmb3IgdGhlIGV2ZW50IHRvIHVuYmluZC5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHVuYmluZC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBvYmplY3QuXG5cdFx0ICovXG5cdFx0b2ZmOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykge1xuXHRcdFx0Z2V0RXZlbnREaXNwYXRjaGVyKHRoaXMpLm9mZihuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRmlyZXMgdGhlIHNwZWNpZmllZCBldmVudCBieSBuYW1lIGFuZCBhcmd1bWVudHMgb24gdGhlIGNvbnRyb2wuIFRoaXMgd2lsbCBleGVjdXRlIGFsbFxuXHRcdCAqIGJvdW5kIGV2ZW50IGhhbmRsZXJzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBmaXJlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZXZlbnQgdG8gZmlyZS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gW2FyZ3NdIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBldmVudC5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtidWJibGVdIFZhbHVlIHRvIGNvbnRyb2wgYnViYmxpbmcuIERlZmF1bHRzIHRvIHRydWUuXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGFyZ3VtZW50cyBvYmplY3QuXG5cdFx0ICovXG5cdFx0ZmlyZTogZnVuY3Rpb24obmFtZSwgYXJncywgYnViYmxlKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGFyZ3MgPSBhcmdzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIWFyZ3MuY29udHJvbCkge1xuXHRcdFx0XHRhcmdzLmNvbnRyb2wgPSBzZWxmO1xuXHRcdFx0fVxuXG5cdFx0XHRhcmdzID0gZ2V0RXZlbnREaXNwYXRjaGVyKHNlbGYpLmZpcmUobmFtZSwgYXJncyk7XG5cblx0XHRcdC8vIEJ1YmJsZSBldmVudCB1cCB0byBwYXJlbnRzXG5cdFx0XHRpZiAoYnViYmxlICE9PSBmYWxzZSAmJiBzZWxmLnBhcmVudCkge1xuXHRcdFx0XHR2YXIgcGFyZW50ID0gc2VsZi5wYXJlbnQoKTtcblx0XHRcdFx0d2hpbGUgKHBhcmVudCAmJiAhYXJncy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG5cdFx0XHRcdFx0cGFyZW50LmZpcmUobmFtZSwgYXJncywgZmFsc2UpO1xuXHRcdFx0XHRcdHBhcmVudCA9IHBhcmVudC5wYXJlbnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYXJncztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBzcGVjaWZpZWQgZXZlbnQgaGFzIGFueSBsaXN0ZW5lcnMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGhhc0V2ZW50TGlzdGVuZXJzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZXZlbnQgdG8gY2hlY2sgZm9yLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUvZmFsc2Ugc3RhdGUgaWYgdGhlIGV2ZW50IGhhcyBsaXN0ZW5lcnMuXG5cdFx0ICovXG5cdFx0aGFzRXZlbnRMaXN0ZW5lcnM6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdHJldHVybiBnZXRFdmVudERpc3BhdGNoZXIodGhpcykuaGFzKG5hbWUpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgY29udHJvbCBjb2xsZWN0aW9uIHdpdGggYWxsIHBhcmVudCBjb250cm9scy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcGFyZW50c1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBPcHRpb25hbCBzZWxlY3RvciBleHByZXNzaW9uIHRvIGZpbmQgcGFyZW50cy5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbGxlY3Rpb259IENvbGxlY3Rpb24gd2l0aCBhbGwgcGFyZW50IGNvbnRyb2xzLlxuXHRcdCAqL1xuXHRcdHBhcmVudHM6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGN0cmwsIHBhcmVudHMgPSBuZXcgQ29sbGVjdGlvbigpO1xuXG5cdFx0XHQvLyBBZGQgZWFjaCBwYXJlbnQgdG8gY29sbGVjdGlvblxuXHRcdFx0Zm9yIChjdHJsID0gc2VsZi5wYXJlbnQoKTsgY3RybDsgY3RybCA9IGN0cmwucGFyZW50KCkpIHtcblx0XHRcdFx0cGFyZW50cy5hZGQoY3RybCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZpbHRlciBhd2F5IGV2ZXJ5dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNoIHRoZSBzZWxlY3RvclxuXHRcdFx0aWYgKHNlbGVjdG9yKSB7XG5cdFx0XHRcdHBhcmVudHMgPSBwYXJlbnRzLmZpbHRlcihzZWxlY3Rvcik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwYXJlbnRzO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbnRyb2wgYW5kIGl0J3MgcGFyZW50cy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcGFyZW50c0FuZFNlbGZcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgT3B0aW9uYWwgc2VsZWN0b3IgZXhwcmVzc2lvbiB0byBmaW5kIHBhcmVudHMuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDb2xsZWN0aW9uIHdpdGggYWxsIHBhcmVudCBjb250cm9scy5cblx0XHQgKi9cblx0XHRwYXJlbnRzQW5kU2VsZjogZnVuY3Rpb24oc2VsZWN0b3IpIHtcblx0XHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzKS5hZGQodGhpcy5wYXJlbnRzKHNlbGVjdG9yKSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGNvbnRyb2wgbmV4dCB0byB0aGUgY3VycmVudCBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBuZXh0XG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sfSBOZXh0IGNvbnRyb2wgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0bmV4dDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgcGFyZW50Q29udHJvbHMgPSB0aGlzLnBhcmVudCgpLml0ZW1zKCk7XG5cblx0XHRcdHJldHVybiBwYXJlbnRDb250cm9sc1twYXJlbnRDb250cm9scy5pbmRleE9mKHRoaXMpICsgMV07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGNvbnRyb2wgcHJldmlvdXMgdG8gdGhlIGN1cnJlbnQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcHJldlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gUHJldmlvdXMgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRwcmV2OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwYXJlbnRDb250cm9scyA9IHRoaXMucGFyZW50KCkuaXRlbXMoKTtcblxuXHRcdFx0cmV0dXJuIHBhcmVudENvbnRyb2xzW3BhcmVudENvbnRyb2xzLmluZGV4T2YodGhpcykgLSAxXTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgaW5uZXIgSFRNTCBvZiB0aGUgY29udHJvbCBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpbm5lckh0bWxcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBIdG1sIHN0cmluZyB0byBzZXQgYXMgaW5uZXIgaHRtbC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBvYmplY3QuXG5cdFx0ICovXG5cdFx0aW5uZXJIdG1sOiBmdW5jdGlvbihodG1sKSB7XG5cdFx0XHR0aGlzLiRlbC5odG1sKGh0bWwpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGNvbnRyb2wgRE9NIGVsZW1lbnQgb3Igc3ViIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldEVsXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IFtzdWZmaXhdIFN1ZmZpeCB0byBnZXQgZWxlbWVudCBieS5cblx0XHQgKiBAcmV0dXJuIHtFbGVtZW50fSBIVE1MIERPTSBlbGVtZW50IGZvciB0aGUgY3VycmVudCBjb250cm9sIG9yIGl0J3MgY2hpbGRyZW4uXG5cdFx0ICovXG5cdFx0Z2V0RWw6IGZ1bmN0aW9uKHN1ZmZpeCkge1xuXHRcdFx0dmFyIGlkID0gc3VmZml4ID8gdGhpcy5faWQgKyAnLScgKyBzdWZmaXggOiB0aGlzLl9pZDtcblxuXHRcdFx0aWYgKCF0aGlzLl9lbG1DYWNoZVtpZF0pIHtcblx0XHRcdFx0dGhpcy5fZWxtQ2FjaGVbaWRdID0gJCgnIycgKyBpZClbMF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLl9lbG1DYWNoZVtpZF07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhlIHZpc2libGUgc3RhdGUgdG8gdHJ1ZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2hvd1xuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmlzaWJsZSh0cnVlKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgdmlzaWJsZSBzdGF0ZSB0byBmYWxzZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaGlkZVxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmlzaWJsZShmYWxzZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEZvY3VzZXMgdGhlIGN1cnJlbnQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZm9jdXNcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRmb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmdldEVsKCkuZm9jdXMoKTtcblx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdC8vIElnbm9yZSBJRSBlcnJvclxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQmx1cnMgdGhlIGN1cnJlbnQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYmx1clxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGJsdXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5nZXRFbCgpLmJsdXIoKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhlIHNwZWNpZmllZCBhcmlhIHByb3BlcnR5LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhcmlhXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgYXJpYSBwcm9wZXJ0eSB0byBzZXQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIFZhbHVlIG9mIHRoZSBhcmlhIHByb3BlcnR5LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGFyaWE6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGVsbSA9IHNlbGYuZ2V0RWwoc2VsZi5hcmlhVGFyZ2V0KTtcblxuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRyZXR1cm4gc2VsZi5fYXJpYVtuYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5fYXJpYVtuYW1lXSA9IHZhbHVlO1xuXG5cdFx0XHRpZiAoc2VsZi5zdGF0ZS5nZXQoJ3JlbmRlcmVkJykpIHtcblx0XHRcdFx0ZWxtLnNldEF0dHJpYnV0ZShuYW1lID09ICdyb2xlJyA/IG5hbWUgOiAnYXJpYS0nICsgbmFtZSwgdmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRW5jb2RlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyB3aXRoIEhUTUwgZW50aXRpZXMuIEl0IHdpbGwgYWxzb1xuXHRcdCAqIHRyYW5zbGF0ZSB0aGUgc3RyaW5nIHRvIGRpZmZlcmVudCBsYW5ndWFnZXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGVuY29kZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL09iamVjdC9BcnJheX0gdGV4dCBUZXh0IHRvIGVudGl0eSBlbmNvZGUuXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBbdHJhbnNsYXRlPXRydWVdIEZhbHNlIGlmIHRoZSBjb250ZW50cyBzaG91bGRuJ3QgYmUgdHJhbnNsYXRlZC5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEVuY29kZWQgYW5kIHBvc3NpYmxlIHRyYXNsYXRlZCBzdHJpbmcuXG5cdFx0ICovXG5cdFx0ZW5jb2RlOiBmdW5jdGlvbih0ZXh0LCB0cmFuc2xhdGUpIHtcblx0XHRcdGlmICh0cmFuc2xhdGUgIT09IGZhbHNlKSB7XG5cdFx0XHRcdHRleHQgPSB0aGlzLnRyYW5zbGF0ZSh0ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICh0ZXh0IHx8ICcnKS5yZXBsYWNlKC9bJjw+XCJdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG5cdFx0XHRcdHJldHVybiAnJiMnICsgbWF0Y2guY2hhckNvZGVBdCgwKSArICc7Jztcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGVkIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdHJhbnNsYXRlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHRleHQgVGV4dCB0byB0cmFuc2xhdGUuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBUcmFuc2xhdGVkIHN0cmluZyBvciB0aGUgc2FtZSBhcyB0aGUgaW5wdXQuXG5cdFx0ICovXG5cdFx0dHJhbnNsYXRlOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0XHRyZXR1cm4gQ29udHJvbC50cmFuc2xhdGUgPyBDb250cm9sLnRyYW5zbGF0ZSh0ZXh0KSA6IHRleHQ7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgaXRlbXMgYmVmb3JlIHRoZSBjdXJyZW50IGNvbnRyb2wuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGJlZm9yZVxuXHRcdCAqIEBwYXJhbSB7QXJyYXkvdGlueW1jZS51aS5Db2xsZWN0aW9ufSBpdGVtcyBBcnJheSBvZiBpdGVtcyB0byBwcmVwZW5kIGJlZm9yZSB0aGlzIGNvbnRyb2wuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sfSBDdXJyZW50IGNvbnRyb2wgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0YmVmb3JlOiBmdW5jdGlvbihpdGVtcykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBwYXJlbnQgPSBzZWxmLnBhcmVudCgpO1xuXG5cdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdHBhcmVudC5pbnNlcnQoaXRlbXMsIHBhcmVudC5pdGVtcygpLmluZGV4T2Yoc2VsZiksIHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBpdGVtcyBhZnRlciB0aGUgY3VycmVudCBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZnRlclxuXHRcdCAqIEBwYXJhbSB7QXJyYXkvdGlueW1jZS51aS5Db2xsZWN0aW9ufSBpdGVtcyBBcnJheSBvZiBpdGVtcyB0byBhcHBlbmQgYWZ0ZXIgdGhpcyBjb250cm9sLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGFmdGVyOiBmdW5jdGlvbihpdGVtcykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBwYXJlbnQgPSBzZWxmLnBhcmVudCgpO1xuXG5cdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdHBhcmVudC5pbnNlcnQoaXRlbXMsIHBhcmVudC5pdGVtcygpLmluZGV4T2Yoc2VsZikpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyB0aGUgY3VycmVudCBjb250cm9sIGZyb20gRE9NIGFuZCBmcm9tIFVJIGNvbGxlY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW1vdmVcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBlbG0gPSBzZWxmLmdldEVsKCksIHBhcmVudCA9IHNlbGYucGFyZW50KCksIG5ld0l0ZW1zLCBpO1xuXG5cdFx0XHRpZiAoc2VsZi5pdGVtcykge1xuXHRcdFx0XHR2YXIgY29udHJvbHMgPSBzZWxmLml0ZW1zKCkudG9BcnJheSgpO1xuXHRcdFx0XHRpID0gY29udHJvbHMubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0Y29udHJvbHNbaV0ucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudCAmJiBwYXJlbnQuaXRlbXMpIHtcblx0XHRcdFx0bmV3SXRlbXMgPSBbXTtcblxuXHRcdFx0XHRwYXJlbnQuaXRlbXMoKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoaXRlbSAhPT0gc2VsZikge1xuXHRcdFx0XHRcdFx0bmV3SXRlbXMucHVzaChpdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHBhcmVudC5pdGVtcygpLnNldChuZXdJdGVtcyk7XG5cdFx0XHRcdHBhcmVudC5fbGFzdFJlY3QgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5fZXZlbnRzUm9vdCAmJiBzZWxmLl9ldmVudHNSb290ID09IHNlbGYpIHtcblx0XHRcdFx0JChlbG0pLm9mZigpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbG9va3VwID0gc2VsZi5nZXRSb290KCkuY29udHJvbElkTG9va3VwO1xuXHRcdFx0aWYgKGxvb2t1cCkge1xuXHRcdFx0XHRkZWxldGUgbG9va3VwW3NlbGYuX2lkXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVsbSAmJiBlbG0ucGFyZW50Tm9kZSkge1xuXHRcdFx0XHRlbG0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbG0pO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLnN0YXRlLnNldCgncmVuZGVyZWQnLCBmYWxzZSk7XG5cdFx0XHRzZWxmLnN0YXRlLmRlc3Ryb3koKTtcblxuXHRcdFx0c2VsZi5maXJlKCdyZW1vdmUnKTtcblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVyQmVmb3JlXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbG0gRWxlbWVudCB0byByZW5kZXIgYmVmb3JlLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdHJlbmRlckJlZm9yZTogZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHQkKGVsbSkuYmVmb3JlKHRoaXMucmVuZGVySHRtbCgpKTtcblx0XHRcdHRoaXMucG9zdFJlbmRlcigpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgdG8gdGhlIHNwZWNpZmllZCBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJCZWZvcmVcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsbSBFbGVtZW50IHRvIHJlbmRlciB0by5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRyZW5kZXJUbzogZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHQkKGVsbSB8fCB0aGlzLmdldENvbnRhaW5lckVsbSgpKS5hcHBlbmQodGhpcy5yZW5kZXJIdG1sKCkpO1xuXHRcdFx0dGhpcy5wb3N0UmVuZGVyKCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0cHJlUmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR9LFxuXG5cdFx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR9LFxuXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gJzxkaXYgaWQ9XCInICsgdGhpcy5faWQgKyAnXCIgY2xhc3M9XCInICsgdGhpcy5jbGFzc2VzICsgJ1wiPjwvZGl2Pic7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFBvc3QgcmVuZGVyIG1ldGhvZC4gQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIHJlbmRlcmVkIHRvIHRoZSB0YXJnZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBvc3RSZW5kZXJcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzLCBlbG0sIGJveCwgcGFyZW50LCBuYW1lLCBwYXJlbnRFdmVudHNSb290O1xuXG5cdFx0XHRzZWxmLiRlbCA9ICQoc2VsZi5nZXRFbCgpKTtcblx0XHRcdHNlbGYuc3RhdGUuc2V0KCdyZW5kZXJlZCcsIHRydWUpO1xuXG5cdFx0XHQvLyBCaW5kIG9uPGV2ZW50PiBzZXR0aW5nc1xuXHRcdFx0Zm9yIChuYW1lIGluIHNldHRpbmdzKSB7XG5cdFx0XHRcdGlmIChuYW1lLmluZGV4T2YoXCJvblwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdHNlbGYub24obmFtZS5zdWJzdHIoMiksIHNldHRpbmdzW25hbWVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5fZXZlbnRzUm9vdCkge1xuXHRcdFx0XHRmb3IgKHBhcmVudCA9IHNlbGYucGFyZW50KCk7ICFwYXJlbnRFdmVudHNSb290ICYmIHBhcmVudDsgcGFyZW50ID0gcGFyZW50LnBhcmVudCgpKSB7XG5cdFx0XHRcdFx0cGFyZW50RXZlbnRzUm9vdCA9IHBhcmVudC5fZXZlbnRzUm9vdDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwYXJlbnRFdmVudHNSb290KSB7XG5cdFx0XHRcdFx0Zm9yIChuYW1lIGluIHBhcmVudEV2ZW50c1Jvb3QuX25hdGl2ZUV2ZW50cykge1xuXHRcdFx0XHRcdFx0c2VsZi5fbmF0aXZlRXZlbnRzW25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YmluZFBlbmRpbmdFdmVudHMoc2VsZik7XG5cblx0XHRcdGlmIChzZXR0aW5ncy5zdHlsZSkge1xuXHRcdFx0XHRlbG0gPSBzZWxmLmdldEVsKCk7XG5cdFx0XHRcdGlmIChlbG0pIHtcblx0XHRcdFx0XHRlbG0uc2V0QXR0cmlidXRlKCdzdHlsZScsIHNldHRpbmdzLnN0eWxlKTtcblx0XHRcdFx0XHRlbG0uc3R5bGUuY3NzVGV4dCA9IHNldHRpbmdzLnN0eWxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZWxmLnNldHRpbmdzLmJvcmRlcikge1xuXHRcdFx0XHRib3ggPSBzZWxmLmJvcmRlckJveDtcblx0XHRcdFx0c2VsZi4kZWwuY3NzKHtcblx0XHRcdFx0XHQnYm9yZGVyLXRvcC13aWR0aCc6IGJveC50b3AsXG5cdFx0XHRcdFx0J2JvcmRlci1yaWdodC13aWR0aCc6IGJveC5yaWdodCxcblx0XHRcdFx0XHQnYm9yZGVyLWJvdHRvbS13aWR0aCc6IGJveC5ib3R0b20sXG5cdFx0XHRcdFx0J2JvcmRlci1sZWZ0LXdpZHRoJzogYm94LmxlZnRcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBpbnN0YW5jZSB0byBsb29rdXBcblx0XHRcdHZhciByb290ID0gc2VsZi5nZXRSb290KCk7XG5cdFx0XHRpZiAoIXJvb3QuY29udHJvbElkTG9va3VwKSB7XG5cdFx0XHRcdHJvb3QuY29udHJvbElkTG9va3VwID0ge307XG5cdFx0XHR9XG5cblx0XHRcdHJvb3QuY29udHJvbElkTG9va3VwW3NlbGYuX2lkXSA9IHNlbGY7XG5cblx0XHRcdGZvciAodmFyIGtleSBpbiBzZWxmLl9hcmlhKSB7XG5cdFx0XHRcdHNlbGYuYXJpYShrZXksIHNlbGYuX2FyaWFba2V5XSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZWxmLnN0YXRlLmdldCgndmlzaWJsZScpID09PSBmYWxzZSkge1xuXHRcdFx0XHRzZWxmLmdldEVsKCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5iaW5kU3RhdGVzKCk7XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTp2aXNpYmxlJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHR2YXIgc3RhdGUgPSBlLnZhbHVlLCBwYXJlbnRDdHJsO1xuXG5cdFx0XHRcdGlmIChzZWxmLnN0YXRlLmdldCgncmVuZGVyZWQnKSkge1xuXHRcdFx0XHRcdHNlbGYuZ2V0RWwoKS5zdHlsZS5kaXNwbGF5ID0gc3RhdGUgPT09IGZhbHNlID8gJ25vbmUnIDogJyc7XG5cblx0XHRcdFx0XHQvLyBOZWVkIHRvIGZvcmNlIGEgcmVmbG93IGhlcmUgb24gSUUgOFxuXHRcdFx0XHRcdHNlbGYuZ2V0RWwoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFBhcmVudCBjb250YWluZXIgbmVlZHMgdG8gcmVmbG93XG5cdFx0XHRcdHBhcmVudEN0cmwgPSBzZWxmLnBhcmVudCgpO1xuXHRcdFx0XHRpZiAocGFyZW50Q3RybCkge1xuXHRcdFx0XHRcdHBhcmVudEN0cmwuX2xhc3RSZWN0ID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYuZmlyZShzdGF0ZSA/ICdzaG93JyA6ICdoaWRlJyk7XG5cblx0XHRcdFx0UmVmbG93UXVldWUuYWRkKHNlbGYpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYuZmlyZSgncG9zdHJlbmRlcicsIHt9LCBmYWxzZSk7XG5cdFx0fSxcblxuXHRcdGJpbmRTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTY3JvbGxzIHRoZSBjdXJyZW50IGNvbnRyb2wgaW50byB2aWV3LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzY3JvbGxJbnRvVmlld1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBhbGlnbiBBbGlnbm1lbnQgaW4gdmlldyB0b3B8Y2VudGVyfGJvdHRvbS5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRzY3JvbGxJbnRvVmlldzogZnVuY3Rpb24oYWxpZ24pIHtcblx0XHRcdGZ1bmN0aW9uIGdldE9mZnNldChlbG0sIHJvb3RFbG0pIHtcblx0XHRcdFx0dmFyIHgsIHksIHBhcmVudCA9IGVsbTtcblxuXHRcdFx0XHR4ID0geSA9IDA7XG5cdFx0XHRcdHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9IHJvb3RFbG0gJiYgcGFyZW50Lm5vZGVUeXBlKSB7XG5cdFx0XHRcdFx0eCArPSBwYXJlbnQub2Zmc2V0TGVmdCB8fCAwO1xuXHRcdFx0XHRcdHkgKz0gcGFyZW50Lm9mZnNldFRvcCB8fCAwO1xuXHRcdFx0XHRcdHBhcmVudCA9IHBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4ge3g6IHgsIHk6IHl9O1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZWxtID0gdGhpcy5nZXRFbCgpLCBwYXJlbnRFbG0gPSBlbG0ucGFyZW50Tm9kZTtcblx0XHRcdHZhciB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0O1xuXHRcdFx0dmFyIHBvcyA9IGdldE9mZnNldChlbG0sIHBhcmVudEVsbSk7XG5cblx0XHRcdHggPSBwb3MueDtcblx0XHRcdHkgPSBwb3MueTtcblx0XHRcdHdpZHRoID0gZWxtLm9mZnNldFdpZHRoO1xuXHRcdFx0aGVpZ2h0ID0gZWxtLm9mZnNldEhlaWdodDtcblx0XHRcdHBhcmVudFdpZHRoID0gcGFyZW50RWxtLmNsaWVudFdpZHRoO1xuXHRcdFx0cGFyZW50SGVpZ2h0ID0gcGFyZW50RWxtLmNsaWVudEhlaWdodDtcblxuXHRcdFx0aWYgKGFsaWduID09IFwiZW5kXCIpIHtcblx0XHRcdFx0eCAtPSBwYXJlbnRXaWR0aCAtIHdpZHRoO1xuXHRcdFx0XHR5IC09IHBhcmVudEhlaWdodCAtIGhlaWdodDtcblx0XHRcdH0gZWxzZSBpZiAoYWxpZ24gPT0gXCJjZW50ZXJcIikge1xuXHRcdFx0XHR4IC09IChwYXJlbnRXaWR0aCAvIDIpIC0gKHdpZHRoIC8gMik7XG5cdFx0XHRcdHkgLT0gKHBhcmVudEhlaWdodCAvIDIpIC0gKGhlaWdodCAvIDIpO1xuXHRcdFx0fVxuXG5cdFx0XHRwYXJlbnRFbG0uc2Nyb2xsTGVmdCA9IHg7XG5cdFx0XHRwYXJlbnRFbG0uc2Nyb2xsVG9wID0geTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdGdldFJvb3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGN0cmwgPSB0aGlzLCByb290Q29udHJvbCwgcGFyZW50cyA9IFtdO1xuXG5cdFx0XHR3aGlsZSAoY3RybCkge1xuXHRcdFx0XHRpZiAoY3RybC5yb290Q29udHJvbCkge1xuXHRcdFx0XHRcdHJvb3RDb250cm9sID0gY3RybC5yb290Q29udHJvbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHBhcmVudHMucHVzaChjdHJsKTtcblx0XHRcdFx0cm9vdENvbnRyb2wgPSBjdHJsO1xuXHRcdFx0XHRjdHJsID0gY3RybC5wYXJlbnQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFyb290Q29udHJvbCkge1xuXHRcdFx0XHRyb290Q29udHJvbCA9IHRoaXM7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBpID0gcGFyZW50cy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdHBhcmVudHNbaV0ucm9vdENvbnRyb2wgPSByb290Q29udHJvbDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJvb3RDb250cm9sO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZWZsb3dzIHRoZSBjdXJyZW50IGNvbnRyb2wgYW5kIGl0J3MgcGFyZW50cy5cblx0XHQgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGFmdGVyIHlvdSBmb3IgZXhhbXBsZSBhcHBlbmQgY2hpbGRyZW4gdG8gdGhlIGN1cnJlbnQgY29udHJvbCBzb1xuXHRcdCAqIHRoYXQgdGhlIGxheW91dCBtYW5hZ2VycyBrbm93IHRoYXQgdGhleSBuZWVkIHRvIHJlcG9zaXRpb24gZXZlcnl0aGluZy5cblx0XHQgKlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogY29udGFpbmVyLmFwcGVuZCh7dHlwZTogJ2J1dHRvbicsIHRleHQ6ICdNeSBidXR0b24nfSkucmVmbG93KCk7XG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlZmxvd1xuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdHJlZmxvdzogZnVuY3Rpb24oKSB7XG5cdFx0XHRSZWZsb3dRdWV1ZS5yZW1vdmUodGhpcyk7XG5cblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xuXHRcdFx0aWYgKHBhcmVudC5fbGF5b3V0ICYmICFwYXJlbnQuX2xheW91dC5pc05hdGl2ZSgpKSB7XG5cdFx0XHRcdHBhcmVudC5yZWZsb3coKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cy9nZXRzIHRoZSBwYXJlbnQgY29udGFpbmVyIGZvciB0aGUgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcGFyZW50XG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLnVpLkNvbnRhaW5lcn0gcGFyZW50IE9wdGlvbmFsIHBhcmVudCB0byBzZXQuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sfSBQYXJlbnQgY29udHJvbCBvciB0aGUgY3VycmVudCBjb250cm9sIG9uIGEgc2V0IGFjdGlvbi5cblx0XHQgKi9cblx0XHQvLyBwYXJlbnQ6IGZ1bmN0aW9uKHBhcmVudCkge30gLS0gR2VuZXJhdGVkXG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIHRleHQgZm9yIHRoZSBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0ZXh0XG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHNldCB0byBjb250cm9sLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZy90aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBvbiBhIHNldCBvcGVyYXRpb24gb3IgY3VycmVudCB2YWx1ZSBvbiBhIGdldC5cblx0XHQgKi9cblx0XHQvLyB0ZXh0OiBmdW5jdGlvbih2YWx1ZSkge30gLS0gR2VuZXJhdGVkXG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHRoZSBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBkaXNhYmxlZFxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc3RhdGUgVmFsdWUgdG8gc2V0IHRvIGNvbnRyb2wuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbi90aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBvbiBhIHNldCBvcGVyYXRpb24gb3IgY3VycmVudCBzdGF0ZSBvbiBhIGdldC5cblx0XHQgKi9cblx0XHQvLyBkaXNhYmxlZDogZnVuY3Rpb24oc3RhdGUpIHt9IC0tIEdlbmVyYXRlZFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cy9nZXRzIHRoZSBhY3RpdmUgZm9yIHRoZSBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhY3RpdmVcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHN0YXRlIFZhbHVlIHRvIHNldCB0byBjb250cm9sLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW4vdGlueW1jZS51aS5Db250cm9sfSBDdXJyZW50IGNvbnRyb2wgb24gYSBzZXQgb3BlcmF0aW9uIG9yIGN1cnJlbnQgc3RhdGUgb24gYSBnZXQuXG5cdFx0ICovXG5cdFx0Ly8gYWN0aXZlOiBmdW5jdGlvbihzdGF0ZSkge30gLS0gR2VuZXJhdGVkXG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIG5hbWUgZm9yIHRoZSBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBuYW1lXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHNldCB0byBjb250cm9sLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZy90aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBvbiBhIHNldCBvcGVyYXRpb24gb3IgY3VycmVudCB2YWx1ZSBvbiBhIGdldC5cblx0XHQgKi9cblx0XHQvLyBuYW1lOiBmdW5jdGlvbih2YWx1ZSkge30gLS0gR2VuZXJhdGVkXG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIHRpdGxlIGZvciB0aGUgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdGl0bGVcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgVmFsdWUgdG8gc2V0IHRvIGNvbnRyb2wuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nL3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIG9uIGEgc2V0IG9wZXJhdGlvbiBvciBjdXJyZW50IHZhbHVlIG9uIGEgZ2V0LlxuXHRcdCAqL1xuXHRcdC8vIHRpdGxlOiBmdW5jdGlvbih2YWx1ZSkge30gLS0gR2VuZXJhdGVkXG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIHZpc2libGUgZm9yIHRoZSBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB2aXNpYmxlXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBzdGF0ZSBWYWx1ZSB0byBzZXQgdG8gY29udHJvbC5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFuL3RpbnltY2UudWkuQ29udHJvbH0gQ3VycmVudCBjb250cm9sIG9uIGEgc2V0IG9wZXJhdGlvbiBvciBjdXJyZW50IHN0YXRlIG9uIGEgZ2V0LlxuXHRcdCAqL1xuXHRcdC8vIHZpc2libGU6IGZ1bmN0aW9uKHZhbHVlKSB7fSAtLSBHZW5lcmF0ZWRcblx0fTtcblxuXHQvKipcblx0ICogU2V0dXAgc3RhdGUgcHJvcGVydGllcy5cblx0ICovXG5cdFRvb2xzLmVhY2goJ3RleHQgdGl0bGUgdmlzaWJsZSBkaXNhYmxlZCBhY3RpdmUgdmFsdWUnLnNwbGl0KCcgJyksIGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRwcm90b1tuYW1lXSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5nZXQobmFtZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgdmFsdWUgIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHR0aGlzLnN0YXRlLnNldChuYW1lLCB2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdH0pO1xuXG5cdENvbnRyb2wgPSBDbGFzcy5leHRlbmQocHJvdG8pO1xuXG5cdGZ1bmN0aW9uIGdldEV2ZW50RGlzcGF0Y2hlcihvYmopIHtcblx0XHRpZiAoIW9iai5fZXZlbnREaXNwYXRjaGVyKSB7XG5cdFx0XHRvYmouX2V2ZW50RGlzcGF0Y2hlciA9IG5ldyBFdmVudERpc3BhdGNoZXIoe1xuXHRcdFx0XHRzY29wZTogb2JqLFxuXHRcdFx0XHR0b2dnbGVFdmVudDogZnVuY3Rpb24obmFtZSwgc3RhdGUpIHtcblx0XHRcdFx0XHRpZiAoc3RhdGUgJiYgRXZlbnREaXNwYXRjaGVyLmlzTmF0aXZlKG5hbWUpKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW9iai5fbmF0aXZlRXZlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdG9iai5fbmF0aXZlRXZlbnRzID0ge307XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG9iai5fbmF0aXZlRXZlbnRzW25hbWVdID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0aWYgKG9iai5zdGF0ZS5nZXQoJ3JlbmRlcmVkJykpIHtcblx0XHRcdFx0XHRcdFx0YmluZFBlbmRpbmdFdmVudHMob2JqKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBvYmouX2V2ZW50RGlzcGF0Y2hlcjtcblx0fVxuXG5cdGZ1bmN0aW9uIGJpbmRQZW5kaW5nRXZlbnRzKGV2ZW50Q3RybCkge1xuXHRcdHZhciBpLCBsLCBwYXJlbnRzLCBldmVudFJvb3RDdHJsLCBuYXRpdmVFdmVudHMsIG5hbWU7XG5cblx0XHRmdW5jdGlvbiBkZWxlZ2F0ZShlKSB7XG5cdFx0XHR2YXIgY29udHJvbCA9IGV2ZW50Q3RybC5nZXRQYXJlbnRDdHJsKGUudGFyZ2V0KTtcblxuXHRcdFx0aWYgKGNvbnRyb2wpIHtcblx0XHRcdFx0Y29udHJvbC5maXJlKGUudHlwZSwgZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbW91c2VMZWF2ZUhhbmRsZXIoKSB7XG5cdFx0XHR2YXIgY3RybCA9IGV2ZW50Um9vdEN0cmwuX2xhc3RIb3ZlckN0cmw7XG5cblx0XHRcdGlmIChjdHJsKSB7XG5cdFx0XHRcdGN0cmwuZmlyZShcIm1vdXNlbGVhdmVcIiwge3RhcmdldDogY3RybC5nZXRFbCgpfSk7XG5cblx0XHRcdFx0Y3RybC5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdFx0Y3RybC5maXJlKFwibW91c2VsZWF2ZVwiLCB7dGFyZ2V0OiBjdHJsLmdldEVsKCl9KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0ZXZlbnRSb290Q3RybC5fbGFzdEhvdmVyQ3RybCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbW91c2VFbnRlckhhbmRsZXIoZSkge1xuXHRcdFx0dmFyIGN0cmwgPSBldmVudEN0cmwuZ2V0UGFyZW50Q3RybChlLnRhcmdldCksIGxhc3RDdHJsID0gZXZlbnRSb290Q3RybC5fbGFzdEhvdmVyQ3RybCwgaWR4ID0gMCwgaSwgcGFyZW50cywgbGFzdFBhcmVudHM7XG5cblx0XHRcdC8vIE92ZXIgb24gYSBuZXcgY29udHJvbFxuXHRcdFx0aWYgKGN0cmwgIT09IGxhc3RDdHJsKSB7XG5cdFx0XHRcdGV2ZW50Um9vdEN0cmwuX2xhc3RIb3ZlckN0cmwgPSBjdHJsO1xuXG5cdFx0XHRcdHBhcmVudHMgPSBjdHJsLnBhcmVudHMoKS50b0FycmF5KCkucmV2ZXJzZSgpO1xuXHRcdFx0XHRwYXJlbnRzLnB1c2goY3RybCk7XG5cblx0XHRcdFx0aWYgKGxhc3RDdHJsKSB7XG5cdFx0XHRcdFx0bGFzdFBhcmVudHMgPSBsYXN0Q3RybC5wYXJlbnRzKCkudG9BcnJheSgpLnJldmVyc2UoKTtcblx0XHRcdFx0XHRsYXN0UGFyZW50cy5wdXNoKGxhc3RDdHJsKTtcblxuXHRcdFx0XHRcdGZvciAoaWR4ID0gMDsgaWR4IDwgbGFzdFBhcmVudHMubGVuZ3RoOyBpZHgrKykge1xuXHRcdFx0XHRcdFx0aWYgKHBhcmVudHNbaWR4XSAhPT0gbGFzdFBhcmVudHNbaWR4XSkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IgKGkgPSBsYXN0UGFyZW50cy5sZW5ndGggLSAxOyBpID49IGlkeDsgaS0tKSB7XG5cdFx0XHRcdFx0XHRsYXN0Q3RybCA9IGxhc3RQYXJlbnRzW2ldO1xuXHRcdFx0XHRcdFx0bGFzdEN0cmwuZmlyZShcIm1vdXNlbGVhdmVcIiwge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IGxhc3RDdHJsLmdldEVsKClcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoaSA9IGlkeDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjdHJsID0gcGFyZW50c1tpXTtcblx0XHRcdFx0XHRjdHJsLmZpcmUoXCJtb3VzZWVudGVyXCIsIHtcblx0XHRcdFx0XHRcdHRhcmdldDogY3RybC5nZXRFbCgpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmaXhXaGVlbEV2ZW50KGUpIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0aWYgKGUudHlwZSA9PSBcIm1vdXNld2hlZWxcIikge1xuXHRcdFx0XHRlLmRlbHRhWSA9IC0xIC8gNDAgKiBlLndoZWVsRGVsdGE7XG5cblx0XHRcdFx0aWYgKGUud2hlZWxEZWx0YVgpIHtcblx0XHRcdFx0XHRlLmRlbHRhWCA9IC0xIC8gNDAgKiBlLndoZWVsRGVsdGFYO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlLmRlbHRhWCA9IDA7XG5cdFx0XHRcdGUuZGVsdGFZID0gZS5kZXRhaWw7XG5cdFx0XHR9XG5cblx0XHRcdGUgPSBldmVudEN0cmwuZmlyZShcIndoZWVsXCIsIGUpO1xuXHRcdH1cblxuXHRcdG5hdGl2ZUV2ZW50cyA9IGV2ZW50Q3RybC5fbmF0aXZlRXZlbnRzO1xuXHRcdGlmIChuYXRpdmVFdmVudHMpIHtcblx0XHRcdC8vIEZpbmQgZXZlbnQgcm9vdCBlbGVtZW50IGlmIGl0IGV4aXN0c1xuXHRcdFx0cGFyZW50cyA9IGV2ZW50Q3RybC5wYXJlbnRzKCkudG9BcnJheSgpO1xuXHRcdFx0cGFyZW50cy51bnNoaWZ0KGV2ZW50Q3RybCk7XG5cdFx0XHRmb3IgKGkgPSAwLCBsID0gcGFyZW50cy5sZW5ndGg7ICFldmVudFJvb3RDdHJsICYmIGkgPCBsOyBpKyspIHtcblx0XHRcdFx0ZXZlbnRSb290Q3RybCA9IHBhcmVudHNbaV0uX2V2ZW50c1Jvb3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEV2ZW50IHJvb3Qgd2Fzbid0IGZvdW5kIHRoZSB1c2UgdGhlIHJvb3QgY29udHJvbFxuXHRcdFx0aWYgKCFldmVudFJvb3RDdHJsKSB7XG5cdFx0XHRcdGV2ZW50Um9vdEN0cmwgPSBwYXJlbnRzW3BhcmVudHMubGVuZ3RoIC0gMV0gfHwgZXZlbnRDdHJsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGV2ZW50c1Jvb3QgcHJvcGVydHkgb24gY2hpbGRyZW4gdGhhdCBkaWRuJ3QgaGF2ZSBpdFxuXHRcdFx0ZXZlbnRDdHJsLl9ldmVudHNSb290ID0gZXZlbnRSb290Q3RybDtcblx0XHRcdGZvciAobCA9IGksIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHBhcmVudHNbaV0uX2V2ZW50c1Jvb3QgPSBldmVudFJvb3RDdHJsO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZXZlbnRSb290RGVsZWdhdGVzID0gZXZlbnRSb290Q3RybC5fZGVsZWdhdGVzO1xuXHRcdFx0aWYgKCFldmVudFJvb3REZWxlZ2F0ZXMpIHtcblx0XHRcdFx0ZXZlbnRSb290RGVsZWdhdGVzID0gZXZlbnRSb290Q3RybC5fZGVsZWdhdGVzID0ge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJpbmQgbmF0aXZlIGV2ZW50IGRlbGVnYXRlc1xuXHRcdFx0Zm9yIChuYW1lIGluIG5hdGl2ZUV2ZW50cykge1xuXHRcdFx0XHRpZiAoIW5hdGl2ZUV2ZW50cykge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChuYW1lID09PSBcIndoZWVsXCIgJiYgIWhhc1doZWVsRXZlbnRTdXBwb3J0KSB7XG5cdFx0XHRcdFx0aWYgKGhhc01vdXNlV2hlZWxFdmVudFN1cHBvcnQpIHtcblx0XHRcdFx0XHRcdCQoZXZlbnRDdHJsLmdldEVsKCkpLm9uKFwibW91c2V3aGVlbFwiLCBmaXhXaGVlbEV2ZW50KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0JChldmVudEN0cmwuZ2V0RWwoKSkub24oXCJET01Nb3VzZVNjcm9sbFwiLCBmaXhXaGVlbEV2ZW50KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNwZWNpYWwgdHJlYXRtZW50IGZvciBtb3VzZW50ZXIvbW91c2VsZWF2ZSBzaW5jZSB0aGVzZSBkb2Vzbid0IGJ1YmJsZVxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJtb3VzZWVudGVyXCIgfHwgbmFtZSA9PT0gXCJtb3VzZWxlYXZlXCIpIHtcblx0XHRcdFx0XHQvLyBGYWtlIG1vdXNlbnRlci9tb3VzZWxlYXZlXG5cdFx0XHRcdFx0aWYgKCFldmVudFJvb3RDdHJsLl9oYXNNb3VzZUVudGVyKSB7XG5cdFx0XHRcdFx0XHQkKGV2ZW50Um9vdEN0cmwuZ2V0RWwoKSkub24oXCJtb3VzZWxlYXZlXCIsIG1vdXNlTGVhdmVIYW5kbGVyKS5vbihcIm1vdXNlb3ZlclwiLCBtb3VzZUVudGVySGFuZGxlcik7XG5cdFx0XHRcdFx0XHRldmVudFJvb3RDdHJsLl9oYXNNb3VzZUVudGVyID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWV2ZW50Um9vdERlbGVnYXRlc1tuYW1lXSkge1xuXHRcdFx0XHRcdCQoZXZlbnRSb290Q3RybC5nZXRFbCgpKS5vbihuYW1lLCBkZWxlZ2F0ZSk7XG5cdFx0XHRcdFx0ZXZlbnRSb290RGVsZWdhdGVzW25hbWVdID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlbW92ZSB0aGUgZXZlbnQgb25jZSBpdCdzIGJvdW5kXG5cdFx0XHRcdG5hdGl2ZUV2ZW50c1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBDb250cm9sO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9GYWN0b3J5LmpzXG5cbi8qKlxuICogRmFjdG9yeS5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKmdsb2JhbCB0aW55bWNlOnRydWUgKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY29udHJvbCBpbnN0YW5jZXMuIFRoaXMgZW5hYmxlcyB5b3VcbiAqIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgY29udHJvbHMgd2l0aG91dCBoYXZpbmcgdG8gcmVxdWlyZSB0aGUgVUkgY29udHJvbHMgZGlyZWN0bHkuXG4gKlxuICogSXQgYWxzbyBhbGxvdyB5b3UgdG8gb3ZlcnJpZGUgb3IgYWRkIG5ldyBjb250cm9sIHR5cGVzLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkZhY3RvcnlcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9GYWN0b3J5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIHR5cGVzID0ge30sIG5hbWVzcGFjZUluaXQ7XG5cblx0cmV0dXJuIHtcblx0XHQvKipcblx0XHQgKiBBZGRzIGEgbmV3IGNvbnRyb2wgaW5zdGFuY2UgdHlwZSB0byB0aGUgZmFjdG9yeS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYWRkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVHlwZSBuYW1lIGZvciBleGFtcGxlIFwiYnV0dG9uXCIuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gdHlwZUNsYXNzIENsYXNzIHR5cGUgZnVuY3Rpb24uXG5cdFx0ICovXG5cdFx0YWRkOiBmdW5jdGlvbih0eXBlLCB0eXBlQ2xhc3MpIHtcblx0XHRcdHR5cGVzW3R5cGUudG9Mb3dlckNhc2UoKV0gPSB0eXBlQ2xhc3M7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgc3BlY2lmaWVkIHR5cGUgZXhpc3RzIG9yIG5vdC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaGFzXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVHlwZSB0byBsb29rIGZvci5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBjb250cm9sIGJ5IG5hbWUgZXhpc3RzLlxuXHRcdCAqL1xuXHRcdGhhczogZnVuY3Rpb24odHlwZSkge1xuXHRcdFx0cmV0dXJuICEhdHlwZXNbdHlwZS50b0xvd2VyQ2FzZSgpXTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ3JlYXRlcyBhIG5ldyBjb250cm9sIGluc3RhbmNlIGJhc2VkIG9uIHRoZSBzZXR0aW5ncyBwcm92aWRlZC4gVGhlIGluc3RhbmNlIGNyZWF0ZWQgd2lsbCBiZVxuXHRcdCAqIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgdHlwZSBwcm9wZXJ0eSBpdCBjYW4gYWxzbyBjcmVhdGUgd2hvbGUgc3RydWN0dXJlcyBvZiBjb21wb25lbnRzIG91dCBvZlxuXHRcdCAqIHRoZSBzcGVjaWZpZWQgSlNPTiBvYmplY3QuXG5cdFx0ICpcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHRpbnltY2UudWkuRmFjdG9yeS5jcmVhdGUoe1xuXHRcdCAqICAgICB0eXBlOiAnYnV0dG9uJyxcblx0XHQgKiAgICAgdGV4dDogJ0hlbGxvIHdvcmxkISdcblx0XHQgKiB9KTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgY3JlYXRlXG5cdFx0ICogQHBhcmFtIHtPYmplY3QvU3RyaW5nfSBzZXR0aW5ncyBOYW1lL1ZhbHVlIG9iamVjdCB3aXRoIGl0ZW1zIHVzZWQgdG8gY3JlYXRlIHRoZSB0eXBlLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udHJvbH0gQ29udHJvbCBpbnN0YW5jZSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHR5cGUuXG5cdFx0ICovXG5cdFx0Y3JlYXRlOiBmdW5jdGlvbih0eXBlLCBzZXR0aW5ncykge1xuXHRcdFx0dmFyIENvbnRyb2xUeXBlLCBuYW1lLCBuYW1lc3BhY2U7XG5cblx0XHRcdC8vIEJ1aWxkIHR5cGUgbG9va3VwXG5cdFx0XHRpZiAoIW5hbWVzcGFjZUluaXQpIHtcblx0XHRcdFx0bmFtZXNwYWNlID0gdGlueW1jZS51aTtcblxuXHRcdFx0XHRmb3IgKG5hbWUgaW4gbmFtZXNwYWNlKSB7XG5cdFx0XHRcdFx0dHlwZXNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IG5hbWVzcGFjZVtuYW1lXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG5hbWVzcGFjZUluaXQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBzdHJpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdXNlIGl0IGFzIHRoZSB0eXBlXG5cdFx0XHRpZiAodHlwZW9mIHR5cGUgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0c2V0dGluZ3MgPSBzZXR0aW5ncyB8fCB7fTtcblx0XHRcdFx0c2V0dGluZ3MudHlwZSA9IHR5cGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXR0aW5ncyA9IHR5cGU7XG5cdFx0XHRcdHR5cGUgPSBzZXR0aW5ncy50eXBlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGaW5kIGNvbnRyb2wgdHlwZVxuXHRcdFx0dHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcblx0XHRcdENvbnRyb2xUeXBlID0gdHlwZXNbdHlwZV07XG5cblx0XHRcdC8vICNpZiBkZWJ1Z1xuXG5cdFx0XHRpZiAoIUNvbnRyb2xUeXBlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGNvbnRyb2wgYnkgdHlwZTogXCIgKyB0eXBlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gI2VuZGlmXG5cblx0XHRcdENvbnRyb2xUeXBlID0gbmV3IENvbnRyb2xUeXBlKHNldHRpbmdzKTtcblx0XHRcdENvbnRyb2xUeXBlLnR5cGUgPSB0eXBlOyAvLyBTZXQgdGhlIHR5cGUgb24gdGhlIGluc3RhbmNlLCB0aGlzIHdpbGwgYmUgdXNlZCBieSB0aGUgU2VsZWN0b3IgZW5naW5lXG5cblx0XHRcdHJldHVybiBDb250cm9sVHlwZTtcblx0XHR9XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0tleWJvYXJkTmF2aWdhdGlvbi5qc1xuXG4vKipcbiAqIEtleWJvYXJkTmF2aWdhdGlvbi5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGFuZGxlcyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIGNvbnRyb2xzIGFuZCBlbGVtZW50cy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51aS5LZXlib2FyZE5hdmlnYXRpb25cbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9LZXlib2FyZE5hdmlnYXRpb25cIiwgW1xuXSwgZnVuY3Rpb24oKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGNsYXNzIGhhbmRsZXMgYWxsIGtleWJvYXJkIG5hdmlnYXRpb24gZm9yIFdBSS1BUklBIHN1cHBvcnQuIEVhY2ggcm9vdCBjb250YWluZXJcblx0ICogZ2V0cyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICovXG5cdHJldHVybiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdHZhciByb290ID0gc2V0dGluZ3Mucm9vdCwgZm9jdXNlZEVsZW1lbnQsIGZvY3VzZWRDb250cm9sO1xuXG5cdFx0ZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcblx0XHRcdHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IDE7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0Ly8gSUUgc29tZXRpbWVzIGZhaWxzIHRvIHJldHVybiBhIHByb3BlciBlbGVtZW50XG5cdFx0XHRmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG5cdFx0fVxuXG5cdFx0Zm9jdXNlZENvbnRyb2wgPSByb290LmdldFBhcmVudEN0cmwoZm9jdXNlZEVsZW1lbnQpO1xuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgY3VycmVudGx5IGZvY3VzZWQgZWxlbWVudHMgd2FpIGFyaWEgcm9sZSBvZiB0aGUgY3VycmVudGx5XG5cdFx0ICogZm9jdXNlZCBlbGVtZW50IG9yIHNwZWNpZmllZCBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsbSBPcHRpb25hbCBlbGVtZW50IHRvIGdldCByb2xlIGZyb20uXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBSb2xlIG9mIHNwZWNpZmllZCBlbGVtZW50LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGdldFJvbGUoZWxtKSB7XG5cdFx0XHRlbG0gPSBlbG0gfHwgZm9jdXNlZEVsZW1lbnQ7XG5cblx0XHRcdGlmIChpc0VsZW1lbnQoZWxtKSkge1xuXHRcdFx0XHRyZXR1cm4gZWxtLmdldEF0dHJpYnV0ZSgncm9sZScpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB3YWkgcm9sZSBvZiB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlIGN1cnJlbnRseVxuXHRcdCAqIGZvY3VzZWQgZWxlbWVudCBvciBzcGVjaWZpZWQgZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbG0gT3B0aW9uYWwgZWxlbWVudCB0byBnZXQgcGFyZW50IHJvbGUgZnJvbS5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IFJvbGUgb2YgdGhlIGZpcnN0IHBhcmVudCB0aGF0IGhhcyBhIHJvbGUuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZ2V0UGFyZW50Um9sZShlbG0pIHtcblx0XHRcdHZhciByb2xlLCBwYXJlbnQgPSBlbG0gfHwgZm9jdXNlZEVsZW1lbnQ7XG5cblx0XHRcdHdoaWxlICgocGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGUpKSB7XG5cdFx0XHRcdGlmICgocm9sZSA9IGdldFJvbGUocGFyZW50KSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcm9sZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSB3YWkgYXJpYSBwcm9wZXJ0eSBieSBuYW1lIGZvciBleGFtcGxlIGFyaWEtc2VsZWN0ZWQuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGFyaWEgcHJvcGVydHkgdG8gZ2V0IGZvciBleGFtcGxlIFwiZGlzYWJsZWRcIi5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEFyaWEgcHJvcGVydHkgdmFsdWUuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZ2V0QXJpYVByb3AobmFtZSkge1xuXHRcdFx0dmFyIGVsbSA9IGZvY3VzZWRFbGVtZW50O1xuXG5cdFx0XHRpZiAoaXNFbGVtZW50KGVsbSkpIHtcblx0XHRcdFx0cmV0dXJuIGVsbS5nZXRBdHRyaWJ1dGUoJ2FyaWEtJyArIG5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIElzIHRoZSBlbGVtZW50IGEgdGV4dCBpbnB1dCBlbGVtZW50IG9yIG5vdC5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbG0gRWxlbWVudCB0byBjaGVjayBpZiBpdCdzIGFuIHRleHQgaW5wdXQgZWxlbWVudCBvciBub3QuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZS9mYWxzZSBpZiB0aGUgZWxlbWVudCBpcyBhIHRleHQgZWxlbWVudCBvciBub3QuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsbSkge1xuXHRcdFx0dmFyIHRhZ05hbWUgPSBlbG0udGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0XHQvLyBOb3RpY2U6IHNpbmNlIHR5cGUgY2FuIGJlIFwiZW1haWxcIiBldGMgd2UgZG9uJ3QgY2hlY2sgdGhlIHR5cGVcblx0XHRcdC8vIFNvIGFsbCBpbnB1dCBlbGVtZW50cyBnZXRzIHRyZWF0ZWQgYXMgdGV4dCBpbnB1dCBlbGVtZW50c1xuXHRcdFx0cmV0dXJuIHRhZ05hbWUgPT0gXCJJTlBVVFwiIHx8IHRhZ05hbWUgPT0gXCJURVhUQVJFQVwiIHx8IHRhZ05hbWUgPT0gXCJTRUxFQ1RcIjtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IGNhbiBiZSBmb2N1c2VkIG9yIG5vdC5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbG0gRE9NIGVsZW1lbnQgdG8gY2hlY2sgaWYgaXQgY2FuIGJlIGZvY3VzZWQgb3Igbm90LlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUvZmFsc2UgaWYgdGhlIGVsZW1lbnQgY2FuIGhhdmUgZm9jdXMuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gY2FuRm9jdXMoZWxtKSB7XG5cdFx0XHRpZiAoaXNUZXh0SW5wdXRFbGVtZW50KGVsbSkgJiYgIWVsbS5oaWRkZW4pIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgvXihidXR0b258bWVudWl0ZW18Y2hlY2tib3h8dGFifG1lbnVpdGVtY2hlY2tib3h8b3B0aW9ufGdyaWRjZWxsfHNsaWRlcikkLy50ZXN0KGdldFJvbGUoZWxtKSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZvY3VzYWJsZSB2aXNpYmxlIGVsZW1lbnRzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsbSBET00gZWxlbWVudCB0byBmaW5kIGZvY3VzYWJsZSBlbGVtZW50cyB3aXRoaW4uXG5cdFx0ICogQHJldHVybiB7QXJyYXl9IEFycmF5IG9mIGZvY3VzYWJsZSBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBnZXRGb2N1c0VsZW1lbnRzKGVsbSkge1xuXHRcdFx0dmFyIGVsZW1lbnRzID0gW107XG5cblx0XHRcdGZ1bmN0aW9uIGNvbGxlY3QoZWxtKSB7XG5cdFx0XHRcdGlmIChlbG0ubm9kZVR5cGUgIT0gMSB8fCBlbG0uc3R5bGUuZGlzcGxheSA9PSAnbm9uZScgfHwgZWxtLmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNhbkZvY3VzKGVsbSkpIHtcblx0XHRcdFx0XHRlbGVtZW50cy5wdXNoKGVsbSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29sbGVjdChlbG0uY2hpbGROb2Rlc1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29sbGVjdChlbG0gfHwgcm9vdC5nZXRFbCgpKTtcblxuXHRcdFx0cmV0dXJuIGVsZW1lbnRzO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIG5hdmlnYXRpb24gcm9vdCBjb250cm9sIGZvciB0aGUgc3BlY2lmaWVkIGNvbnRyb2wuIFRoZSBuYXZpZ2F0aW9uIHJvb3Rcblx0XHQgKiBpcyB0aGUgY29udHJvbCB0aGF0IHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGdldHMgc2NvcGVkIHRvIGZvciBleGFtcGxlIGEgbWVudWJhciBvciB0b29sYmFyIGdyb3VwLlxuXHRcdCAqIEl0IHdpbGwgbG9vayBmb3IgcGFyZW50cyBvZiB0aGUgc3BlY2lmaWVkIHRhcmdldCBjb250cm9sIG9yIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBjb250cm9sIGlmIHRoaXMgb3B0aW9uIGlzIG9taXR0ZWQuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS51aS5Db250cm9sfSB0YXJnZXRDb250cm9sIE9wdGlvbmFsIHRhcmdldCBjb250cm9sIHRvIGZpbmQgcm9vdCBvZi5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IE5hdmlnYXRpb24gcm9vdCBjb250cm9sLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGdldE5hdmlnYXRpb25Sb290KHRhcmdldENvbnRyb2wpIHtcblx0XHRcdHZhciBuYXZpZ2F0aW9uUm9vdCwgY29udHJvbHM7XG5cblx0XHRcdHRhcmdldENvbnRyb2wgPSB0YXJnZXRDb250cm9sIHx8IGZvY3VzZWRDb250cm9sO1xuXHRcdFx0Y29udHJvbHMgPSB0YXJnZXRDb250cm9sLnBhcmVudHMoKS50b0FycmF5KCk7XG5cdFx0XHRjb250cm9scy51bnNoaWZ0KHRhcmdldENvbnRyb2wpO1xuXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRyb2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdG5hdmlnYXRpb25Sb290ID0gY29udHJvbHNbaV07XG5cblx0XHRcdFx0aWYgKG5hdmlnYXRpb25Sb290LnNldHRpbmdzLmFyaWFSb290KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Sb290O1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEZvY3VzZXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNwZWNpZmllZCB0YXJnZXRDb250cm9sIGVsZW1lbnQgb3IgdGhlIGxhc3QgYXJpYSBpbmRleCBpZiB0aGVcblx0XHQgKiBuYXZpZ2F0aW9uIHJvb3QgaGFzIHRoZSBhcmlhUmVtZW1iZXIgb3B0aW9uIGVuYWJsZWQuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS51aS5Db250cm9sfSB0YXJnZXRDb250cm9sIFRhcmdldCBjb250cm9sIHRvIGZvY3VzIHRoZSBmaXJzdCBpdGVtIGluLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZvY3VzRmlyc3QodGFyZ2V0Q29udHJvbCkge1xuXHRcdFx0dmFyIG5hdmlnYXRpb25Sb290ID0gZ2V0TmF2aWdhdGlvblJvb3QodGFyZ2V0Q29udHJvbCk7XG5cdFx0XHR2YXIgZm9jdXNFbGVtZW50cyA9IGdldEZvY3VzRWxlbWVudHMobmF2aWdhdGlvblJvb3QuZ2V0RWwoKSk7XG5cblx0XHRcdGlmIChuYXZpZ2F0aW9uUm9vdC5zZXR0aW5ncy5hcmlhUmVtZW1iZXIgJiYgXCJsYXN0QXJpYUluZGV4XCIgaW4gbmF2aWdhdGlvblJvb3QpIHtcblx0XHRcdFx0bW92ZUZvY3VzVG9JbmRleChuYXZpZ2F0aW9uUm9vdC5sYXN0QXJpYUluZGV4LCBmb2N1c0VsZW1lbnRzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1vdmVGb2N1c1RvSW5kZXgoMCwgZm9jdXNFbGVtZW50cyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogTW92ZXMgdGhlIGZvY3VzIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXggd2l0aGluIHRoZSBlbGVtZW50cyBsaXN0LlxuXHRcdCAqIFRoaXMgd2lsbCBzY29wZSB0aGUgaW5kZXggdG8gdGhlIHNpemUgb2YgdGhlIGVsZW1lbnQgbGlzdCBpZiBpdCBjaGFuZ2VkLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gaWR4IFNwZWNpZmllZCBpbmRleCB0byBtb3ZlIHRvLlxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IGVsZW1lbnRzIEFycmF5IHdpdGggZG9tIGVsZW1lbnRzIHRvIG1vdmUgZm9jdXMgd2l0aGluLlxuXHRcdCAqIEByZXR1cm4ge051bWJlcn0gSW5wdXQgaW5kZXggb3IgYSBjaGFuZ2VkIGluZGV4IGlmIGl0IHdhcyBvdXQgb2YgcmFuZ2UuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gbW92ZUZvY3VzVG9JbmRleChpZHgsIGVsZW1lbnRzKSB7XG5cdFx0XHRpZiAoaWR4IDwgMCkge1xuXHRcdFx0XHRpZHggPSBlbGVtZW50cy5sZW5ndGggLSAxO1xuXHRcdFx0fSBlbHNlIGlmIChpZHggPj0gZWxlbWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdGlkeCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbGVtZW50c1tpZHhdKSB7XG5cdFx0XHRcdGVsZW1lbnRzW2lkeF0uZm9jdXMoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGlkeDtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBNb3ZlcyB0aGUgZm9jdXMgZm9yd2FyZHMgb3IgYmFja3dhcmRzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gZGlyIERpcmVjdGlvbiB0byBtb3ZlIGluIHBvc2l0aXZlIG1lYW5zIGZvcndhcmQsIG5lZ2F0aXZlIG1lYW5zIGJhY2t3YXJkcy5cblx0XHQgKiBAcGFyYW0ge0FycmF5fSBlbGVtZW50cyBPcHRpb25hbCBhcnJheSBvZiBlbGVtZW50cyB0byBtb3ZlIHdpdGhpbiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIHJvb3RzIGVsZW1lbnRzLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIG1vdmVGb2N1cyhkaXIsIGVsZW1lbnRzKSB7XG5cdFx0XHR2YXIgaWR4ID0gLTEsIG5hdmlnYXRpb25Sb290ID0gZ2V0TmF2aWdhdGlvblJvb3QoKTtcblxuXHRcdFx0ZWxlbWVudHMgPSBlbGVtZW50cyB8fCBnZXRGb2N1c0VsZW1lbnRzKG5hdmlnYXRpb25Sb290LmdldEVsKCkpO1xuXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChlbGVtZW50c1tpXSA9PT0gZm9jdXNlZEVsZW1lbnQpIHtcblx0XHRcdFx0XHRpZHggPSBpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlkeCArPSBkaXI7XG5cdFx0XHRuYXZpZ2F0aW9uUm9vdC5sYXN0QXJpYUluZGV4ID0gbW92ZUZvY3VzVG9JbmRleChpZHgsIGVsZW1lbnRzKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBNb3ZlcyB0aGUgZm9jdXMgdG8gdGhlIGxlZnQgdGhpcyBpcyBjYWxsZWQgYnkgdGhlIGxlZnQga2V5LlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBsZWZ0KCkge1xuXHRcdFx0dmFyIHBhcmVudFJvbGUgPSBnZXRQYXJlbnRSb2xlKCk7XG5cblx0XHRcdGlmIChwYXJlbnRSb2xlID09IFwidGFibGlzdFwiKSB7XG5cdFx0XHRcdG1vdmVGb2N1cygtMSwgZ2V0Rm9jdXNFbGVtZW50cyhmb2N1c2VkRWxlbWVudC5wYXJlbnROb2RlKSk7XG5cdFx0XHR9IGVsc2UgaWYgKGZvY3VzZWRDb250cm9sLnBhcmVudCgpLnN1Ym1lbnUpIHtcblx0XHRcdFx0Y2FuY2VsKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtb3ZlRm9jdXMoLTEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIE1vdmVzIHRoZSBmb2N1cyB0byB0aGUgcmlnaHQgdGhpcyBpcyBjYWxsZWQgYnkgdGhlIHJpZ2h0IGtleS5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gcmlnaHQoKSB7XG5cdFx0XHR2YXIgcm9sZSA9IGdldFJvbGUoKSwgcGFyZW50Um9sZSA9IGdldFBhcmVudFJvbGUoKTtcblxuXHRcdFx0aWYgKHBhcmVudFJvbGUgPT0gXCJ0YWJsaXN0XCIpIHtcblx0XHRcdFx0bW92ZUZvY3VzKDEsIGdldEZvY3VzRWxlbWVudHMoZm9jdXNlZEVsZW1lbnQucGFyZW50Tm9kZSkpO1xuXHRcdFx0fSBlbHNlIGlmIChyb2xlID09IFwibWVudWl0ZW1cIiAmJiBwYXJlbnRSb2xlID09IFwibWVudVwiICYmIGdldEFyaWFQcm9wKCdoYXNwb3B1cCcpKSB7XG5cdFx0XHRcdGVudGVyKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtb3ZlRm9jdXMoMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogTW92ZXMgdGhlIGZvY3VzIHRvIHRoZSB1cCB0aGlzIGlzIGNhbGxlZCBieSB0aGUgdXAga2V5LlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRmdW5jdGlvbiB1cCgpIHtcblx0XHRcdG1vdmVGb2N1cygtMSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogTW92ZXMgdGhlIGZvY3VzIHRvIHRoZSB1cCB0aGlzIGlzIGNhbGxlZCBieSB0aGUgZG93biBrZXkuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGRvd24oKSB7XG5cdFx0XHR2YXIgcm9sZSA9IGdldFJvbGUoKSwgcGFyZW50Um9sZSA9IGdldFBhcmVudFJvbGUoKTtcblxuXHRcdFx0aWYgKHJvbGUgPT0gXCJtZW51aXRlbVwiICYmIHBhcmVudFJvbGUgPT0gXCJtZW51YmFyXCIpIHtcblx0XHRcdFx0ZW50ZXIoKTtcblx0XHRcdH0gZWxzZSBpZiAocm9sZSA9PSBcImJ1dHRvblwiICYmIGdldEFyaWFQcm9wKCdoYXNwb3B1cCcpKSB7XG5cdFx0XHRcdGVudGVyKHtrZXk6ICdkb3duJ30pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bW92ZUZvY3VzKDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIE1vdmVzIHRoZSBmb2N1cyB0byB0aGUgbmV4dCBpdGVtIG9yIHByZXZpb3VzIGl0ZW0gZGVwZW5kaW5nIG9uIHNoaWZ0IGtleS5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtET01FdmVudH0gZSBET00gZXZlbnQgb2JqZWN0LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHRhYihlKSB7XG5cdFx0XHR2YXIgcGFyZW50Um9sZSA9IGdldFBhcmVudFJvbGUoKTtcblxuXHRcdFx0aWYgKHBhcmVudFJvbGUgPT0gXCJ0YWJsaXN0XCIpIHtcblx0XHRcdFx0dmFyIGVsbSA9IGdldEZvY3VzRWxlbWVudHMoZm9jdXNlZENvbnRyb2wuZ2V0RWwoJ2JvZHknKSlbMF07XG5cblx0XHRcdFx0aWYgKGVsbSkge1xuXHRcdFx0XHRcdGVsbS5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtb3ZlRm9jdXMoZS5zaGlmdEtleSA/IC0xIDogMSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQ2FsbHMgdGhlIGNhbmNlbCBldmVudCBvbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgY29udHJvbC4gVGhpcyBpcyBub3JtYWxseSBkb25lIHVzaW5nIHRoZSBFc2Mga2V5LlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBjYW5jZWwoKSB7XG5cdFx0XHRmb2N1c2VkQ29udHJvbC5maXJlKCdjYW5jZWwnKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBDYWxscyB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGNvbnRyb2wuIFRoaXMgaXMgbm9ybWFsbHkgZG9uZSB1c2luZyB0aGUgRW50ZXIvU3BhY2Uga2V5cy5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFyaWEgT3B0aW9uYWwgYXJpYSBkYXRhIHRvIHBhc3MgYWxvbmcgd2l0aCB0aGUgZW50ZXIgZXZlbnQuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZW50ZXIoYXJpYSkge1xuXHRcdFx0YXJpYSA9IGFyaWEgfHwge307XG5cdFx0XHRmb2N1c2VkQ29udHJvbC5maXJlKCdjbGljaycsIHt0YXJnZXQ6IGZvY3VzZWRFbGVtZW50LCBhcmlhOiBhcmlhfSk7XG5cdFx0fVxuXG5cdFx0cm9vdC5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdGZ1bmN0aW9uIGhhbmRsZU5vblRhYk9yRXNjRXZlbnQoZSwgaGFuZGxlcikge1xuXHRcdFx0XHQvLyBJZ25vcmUgbm9uIHRhYiBrZXlzIGZvciB0ZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChpc1RleHRJbnB1dEVsZW1lbnQoZm9jdXNlZEVsZW1lbnQpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGdldFJvbGUoZm9jdXNlZEVsZW1lbnQpID09PSAnc2xpZGVyJykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChoYW5kbGVyKGUpICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHN3aXRjaCAoZS5rZXlDb2RlKSB7XG5cdFx0XHRcdGNhc2UgMzc6IC8vIERPTV9WS19MRUZUXG5cdFx0XHRcdFx0aGFuZGxlTm9uVGFiT3JFc2NFdmVudChlLCBsZWZ0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDM5OiAvLyBET01fVktfUklHSFRcblx0XHRcdFx0XHRoYW5kbGVOb25UYWJPckVzY0V2ZW50KGUsIHJpZ2h0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDM4OiAvLyBET01fVktfVVBcblx0XHRcdFx0XHRoYW5kbGVOb25UYWJPckVzY0V2ZW50KGUsIHVwKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIDQwOiAvLyBET01fVktfRE9XTlxuXHRcdFx0XHRcdGhhbmRsZU5vblRhYk9yRXNjRXZlbnQoZSwgZG93bik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAyNzogLy8gRE9NX1ZLX0VTQ0FQRVxuXHRcdFx0XHRcdGNhbmNlbCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgMTQ6IC8vIERPTV9WS19FTlRFUlxuXHRcdFx0XHRjYXNlIDEzOiAvLyBET01fVktfUkVUVVJOXG5cdFx0XHRcdGNhc2UgMzI6IC8vIERPTV9WS19TUEFDRVxuXHRcdFx0XHRcdGhhbmRsZU5vblRhYk9yRXNjRXZlbnQoZSwgZW50ZXIpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgOTogLy8gRE9NX1ZLX1RBQlxuXHRcdFx0XHRcdGlmICh0YWIoZSkgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cm9vdC5vbignZm9jdXNpbicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdGZvY3VzZWRFbGVtZW50ID0gZS50YXJnZXQ7XG5cdFx0XHRmb2N1c2VkQ29udHJvbCA9IGUuY29udHJvbDtcblx0XHR9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRmb2N1c0ZpcnN0OiBmb2N1c0ZpcnN0XG5cdFx0fTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvQ29udGFpbmVyLmpzXG5cbi8qKlxuICogQ29udGFpbmVyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogQ29udGFpbmVyIGNvbnRyb2wuIFRoaXMgaXMgZXh0ZW5kZWQgYnkgYWxsIGNvbnRyb2xzIHRoYXQgY2FuIGhhdmVcbiAqIGNoaWxkcmVuIHN1Y2ggYXMgcGFuZWxzIGV0Yy4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5IGFzIGFuXG4gKiBnZW5lcmljIGNvbnRhaW5lciBpbnN0YW5jZS4gVGhlIGNvbnRhaW5lciBkb2Vzbid0IGhhdmUgYW55IHNwZWNpZmljIHJvbGUgb3Igc3R5bGUuXG4gKlxuICogQC14LWxlc3MgQ29udGFpbmVyLmxlc3NcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkNvbnRhaW5lclxuICogQGV4dGVuZHMgdGlueW1jZS51aS5Db250cm9sXG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvQ29udGFpbmVyXCIsIFtcblx0XCJ0aW55bWNlL3VpL0NvbnRyb2xcIixcblx0XCJ0aW55bWNlL3VpL0NvbGxlY3Rpb25cIixcblx0XCJ0aW55bWNlL3VpL1NlbGVjdG9yXCIsXG5cdFwidGlueW1jZS91aS9GYWN0b3J5XCIsXG5cdFwidGlueW1jZS91aS9LZXlib2FyZE5hdmlnYXRpb25cIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL2RvbS9Eb21RdWVyeVwiLFxuXHRcInRpbnltY2UvdWkvQ2xhc3NMaXN0XCIsXG5cdFwidGlueW1jZS91aS9SZWZsb3dRdWV1ZVwiXG5dLCBmdW5jdGlvbihDb250cm9sLCBDb2xsZWN0aW9uLCBTZWxlY3RvciwgRmFjdG9yeSwgS2V5Ym9hcmROYXZpZ2F0aW9uLCBUb29scywgJCwgQ2xhc3NMaXN0LCBSZWZsb3dRdWV1ZSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgc2VsZWN0b3JDYWNoZSA9IHt9O1xuXG5cdHJldHVybiBDb250cm9sLmV4dGVuZCh7XG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIG5ldyBjb250cm9sIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqIEBzZXR0aW5nIHtBcnJheX0gaXRlbXMgSXRlbXMgdG8gYWRkIHRvIGNvbnRhaW5lciBpbiBKU09OIGZvcm1hdCBvciBjb250cm9sIGluc3RhbmNlcy5cblx0XHQgKiBAc2V0dGluZyB7U3RyaW5nfSBsYXlvdXQgTGF5b3V0IG1hbmFnZXIgYnkgbmFtZSB0byB1c2UuXG5cdFx0ICogQHNldHRpbmcge09iamVjdH0gZGVmYXVsdHMgRGVmYXVsdCBzZXR0aW5ncyB0byBhcHBseSB0byBhbGwgaXRlbXMuXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5fc3VwZXIoc2V0dGluZ3MpO1xuXHRcdFx0c2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MuZml4ZWQpIHtcblx0XHRcdFx0c2VsZi5zdGF0ZS5zZXQoJ2ZpeGVkJywgdHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuX2l0ZW1zID0gbmV3IENvbGxlY3Rpb24oKTtcblxuXHRcdFx0aWYgKHNlbGYuaXNSdGwoKSkge1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdydGwnKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5ib2R5Q2xhc3NlcyA9IG5ldyBDbGFzc0xpc3QoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmIChzZWxmLnN0YXRlLmdldCgncmVuZGVyZWQnKSkge1xuXHRcdFx0XHRcdHNlbGYuZ2V0RWwoJ2JvZHknKS5jbGFzc05hbWUgPSB0aGlzLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c2VsZi5ib2R5Q2xhc3Nlcy5wcmVmaXggPSBzZWxmLmNsYXNzUHJlZml4O1xuXG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdjb250YWluZXInKTtcblx0XHRcdHNlbGYuYm9keUNsYXNzZXMuYWRkKCdjb250YWluZXItYm9keScpO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MuY29udGFpbmVyQ2xzKSB7XG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoc2V0dGluZ3MuY29udGFpbmVyQ2xzKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5fbGF5b3V0ID0gRmFjdG9yeS5jcmVhdGUoKHNldHRpbmdzLmxheW91dCB8fCAnJykgKyAnbGF5b3V0Jyk7XG5cblx0XHRcdGlmIChzZWxmLnNldHRpbmdzLml0ZW1zKSB7XG5cdFx0XHRcdHNlbGYuYWRkKHNlbGYuc2V0dGluZ3MuaXRlbXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hZGQoc2VsZi5yZW5kZXIoKSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRPRE86IEZpeCB0aGlzIVxuXHRcdFx0c2VsZi5faGFzQm9keSA9IHRydWU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGNoaWxkIGl0ZW1zIHRoYXQgdGhlIGNvbnRhaW5lciBjdXJyZW50bHkgaGF2ZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaXRlbXNcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbGxlY3Rpb259IENvbnRyb2wgY29sbGVjdGlvbiBkaXJlY3QgY2hpbGQgY29udHJvbHMuXG5cdFx0ICovXG5cdFx0aXRlbXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2l0ZW1zO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGaW5kIGNoaWxkIGNvbnRyb2xzIGJ5IHNlbGVjdG9yLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBmaW5kXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIENTUyBwYXR0ZXJuIHRvIGZpbmQgY2hpbGRyZW4gYnkuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db2xsZWN0aW9ufSBDb250cm9sIGNvbGxlY3Rpb24gd2l0aCBjaGlsZCBjb250cm9scy5cblx0XHQgKi9cblx0XHRmaW5kOiBmdW5jdGlvbihzZWxlY3Rvcikge1xuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3RvckNhY2hlW3NlbGVjdG9yXSA9IHNlbGVjdG9yQ2FjaGVbc2VsZWN0b3JdIHx8IG5ldyBTZWxlY3RvcihzZWxlY3Rvcik7XG5cblx0XHRcdHJldHVybiBzZWxlY3Rvci5maW5kKHRoaXMpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIG9uZSBvciBtYW55IGl0ZW1zIHRvIHRoZSBjdXJyZW50IGNvbnRhaW5lci4gVGhpcyB3aWxsIGNyZWF0ZSBpbnN0YW5jZXMgb2Zcblx0XHQgKiB0aGUgb2JqZWN0IHJlcHJlc2VudGF0aW9ucyBpZiBuZWVkZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFxuXHRcdCAqIEBwYXJhbSB7QXJyYXkvT2JqZWN0L3RpbnltY2UudWkuQ29udHJvbH0gaXRlbXMgQXJyYXkgb3IgaXRlbSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbnRhaW5lci5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbGxlY3Rpb259IEN1cnJlbnQgY29sbGVjdGlvbiBjb250cm9sLlxuXHRcdCAqL1xuXHRcdGFkZDogZnVuY3Rpb24oaXRlbXMpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5pdGVtcygpLmFkZChzZWxmLmNyZWF0ZShpdGVtcykpLnBhcmVudChzZWxmKTtcblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEZvY3VzZXMgdGhlIGN1cnJlbnQgY29udGFpbmVyIGluc3RhbmNlLiBUaGlzIHdpbGwgbG9va1xuXHRcdCAqIGZvciB0aGUgZmlyc3QgY29udHJvbCBpbiB0aGUgY29udGFpbmVyIGFuZCBmb2N1cyB0aGF0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBmb2N1c1xuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0ga2V5Ym9hcmQgT3B0aW9uYWwgdHJ1ZS9mYWxzZSBpZiB0aGUgZm9jdXMgd2FzIGEga2V5Ym9hcmQgZm9jdXMgb3Igbm90LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29sbGVjdGlvbn0gQ3VycmVudCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRmb2N1czogZnVuY3Rpb24oa2V5Ym9hcmQpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgZm9jdXNDdHJsLCBrZXlib2FyZE5hdiwgaXRlbXM7XG5cblx0XHRcdGlmIChrZXlib2FyZCkge1xuXHRcdFx0XHRrZXlib2FyZE5hdiA9IHNlbGYua2V5Ym9hcmROYXYgfHwgc2VsZi5wYXJlbnRzKCkuZXEoLTEpWzBdLmtleWJvYXJkTmF2O1xuXG5cdFx0XHRcdGlmIChrZXlib2FyZE5hdikge1xuXHRcdFx0XHRcdGtleWJvYXJkTmF2LmZvY3VzRmlyc3Qoc2VsZik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGl0ZW1zID0gc2VsZi5maW5kKCcqJyk7XG5cblx0XHRcdC8vIFRPRE86IEZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGF1dG8gZm9jdXMgYWxlcnQgZGlhbG9nIGJ1dHRvbnNcblx0XHRcdGlmIChzZWxmLnN0YXR1c2Jhcikge1xuXHRcdFx0XHRpdGVtcy5hZGQoc2VsZi5zdGF0dXNiYXIuaXRlbXMoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGl0ZW1zLmVhY2goZnVuY3Rpb24oY3RybCkge1xuXHRcdFx0XHRpZiAoY3RybC5zZXR0aW5ncy5hdXRvZm9jdXMpIHtcblx0XHRcdFx0XHRmb2N1c0N0cmwgPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdHJsLmNhbkZvY3VzKSB7XG5cdFx0XHRcdFx0Zm9jdXNDdHJsID0gZm9jdXNDdHJsIHx8IGN0cmw7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoZm9jdXNDdHJsKSB7XG5cdFx0XHRcdGZvY3VzQ3RybC5mb2N1cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVwbGFjZXMgdGhlIHNwZWNpZmllZCBjaGlsZCBjb250cm9sIHdpdGggYSBuZXcgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVwbGFjZVxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS51aS5Db250cm9sfSBvbGRJdGVtIE9sZCBpdGVtIHRvIGJlIHJlcGxhY2VkLlxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS51aS5Db250cm9sfSBuZXdJdGVtIE5ldyBpdGVtIHRvIGJlIGluc2VydGVkLlxuXHRcdCAqL1xuXHRcdHJlcGxhY2U6IGZ1bmN0aW9uKG9sZEl0ZW0sIG5ld0l0ZW0pIHtcblx0XHRcdHZhciBjdHJsRWxtLCBpdGVtcyA9IHRoaXMuaXRlbXMoKSwgaSA9IGl0ZW1zLmxlbmd0aDtcblxuXHRcdFx0Ly8gUmVwbGFjZSB0aGUgaXRlbSBpbiBjb2xsZWN0aW9uXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdGlmIChpdGVtc1tpXSA9PT0gb2xkSXRlbSkge1xuXHRcdFx0XHRcdGl0ZW1zW2ldID0gbmV3SXRlbTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaSA+PSAwKSB7XG5cdFx0XHRcdC8vIFJlbW92ZSBuZXcgaXRlbSBmcm9tIERPTVxuXHRcdFx0XHRjdHJsRWxtID0gbmV3SXRlbS5nZXRFbCgpO1xuXHRcdFx0XHRpZiAoY3RybEVsbSkge1xuXHRcdFx0XHRcdGN0cmxFbG0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdHJsRWxtKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlbW92ZSBvbGQgaXRlbSBmcm9tIERPTVxuXHRcdFx0XHRjdHJsRWxtID0gb2xkSXRlbS5nZXRFbCgpO1xuXHRcdFx0XHRpZiAoY3RybEVsbSkge1xuXHRcdFx0XHRcdGN0cmxFbG0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdHJsRWxtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZG9wdCB0aGUgaXRlbVxuXHRcdFx0bmV3SXRlbS5wYXJlbnQodGhpcyk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgdGhlIHNwZWNpZmllZCBpdGVtcy4gSWYgYW55IG9mIHRoZSBpdGVtcyBpcyBwbGFpbiBKU09OIHN0eWxlIG9iamVjdHNcblx0XHQgKiBpdCB3aWxsIGNvbnZlcnQgdGhlc2UgaW50byByZWFsIHRpbnltY2UudWkuQ29udHJvbCBpbnN0YW5jZXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNyZWF0ZVxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IGl0ZW1zIEFycmF5IG9mIGl0ZW1zIHRvIGNvbnZlcnQgaW50byBjb250cm9sIGluc3RhbmNlcy5cblx0XHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgd2l0aCBjb250cm9sIGluc3RhbmNlcy5cblx0XHQgKi9cblx0XHRjcmVhdGU6IGZ1bmN0aW9uKGl0ZW1zKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHNldHRpbmdzLCBjdHJsSXRlbXMgPSBbXTtcblxuXHRcdFx0Ly8gTm9uIGFycmF5IHN0cnVjdHVyZSwgdGhlbiBmb3JjZSBpdCBpbnRvIGFuIGFycmF5XG5cdFx0XHRpZiAoIVRvb2xzLmlzQXJyYXkoaXRlbXMpKSB7XG5cdFx0XHRcdGl0ZW1zID0gW2l0ZW1zXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGRlZmF1bHQgdHlwZSB0byBlYWNoIGNoaWxkIGNvbnRyb2xcblx0XHRcdFRvb2xzLmVhY2goaXRlbXMsIGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHQvLyBDb25zdHJ1Y3QgaXRlbSBpZiBuZWVkZWRcblx0XHRcdFx0XHRpZiAoIShpdGVtIGluc3RhbmNlb2YgQ29udHJvbCkpIHtcblx0XHRcdFx0XHRcdC8vIE5hbWUgb25seSB0aGVuIGNvbnZlcnQgaXQgdG8gYW4gb2JqZWN0XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGl0ZW0gPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRpdGVtID0ge3R5cGU6IGl0ZW19O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgY29udHJvbCBpbnN0YW5jZSBiYXNlZCBvbiBpbnB1dCBzZXR0aW5ncyBhbmQgZGVmYXVsdCBzZXR0aW5nc1xuXHRcdFx0XHRcdFx0c2V0dGluZ3MgPSBUb29scy5leHRlbmQoe30sIHNlbGYuc2V0dGluZ3MuZGVmYXVsdHMsIGl0ZW0pO1xuXHRcdFx0XHRcdFx0aXRlbS50eXBlID0gc2V0dGluZ3MudHlwZSA9IHNldHRpbmdzLnR5cGUgfHwgaXRlbS50eXBlIHx8IHNlbGYuc2V0dGluZ3MuZGVmYXVsdFR5cGUgfHxcblx0XHRcdFx0XHRcdFx0KHNldHRpbmdzLmRlZmF1bHRzID8gc2V0dGluZ3MuZGVmYXVsdHMudHlwZSA6IG51bGwpO1xuXHRcdFx0XHRcdFx0aXRlbSA9IEZhY3RvcnkuY3JlYXRlKHNldHRpbmdzKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjdHJsSXRlbXMucHVzaChpdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBjdHJsSXRlbXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgbmV3IGNvbnRyb2wgaW5zdGFuY2VzLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRyZW5kZXJOZXc6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHQvLyBSZW5kZXIgYW55IG5ldyBpdGVtc1xuXHRcdFx0c2VsZi5pdGVtcygpLmVhY2goZnVuY3Rpb24oY3RybCwgaW5kZXgpIHtcblx0XHRcdFx0dmFyIGNvbnRhaW5lckVsbTtcblxuXHRcdFx0XHRjdHJsLnBhcmVudChzZWxmKTtcblxuXHRcdFx0XHRpZiAoIWN0cmwuc3RhdGUuZ2V0KCdyZW5kZXJlZCcpKSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyRWxtID0gc2VsZi5nZXRFbCgnYm9keScpO1xuXG5cdFx0XHRcdFx0Ly8gSW5zZXJ0IG9yIGFwcGVuZCB0aGUgaXRlbVxuXHRcdFx0XHRcdGlmIChjb250YWluZXJFbG0uaGFzQ2hpbGROb2RlcygpICYmIGluZGV4IDw9IGNvbnRhaW5lckVsbS5jaGlsZE5vZGVzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdCQoY29udGFpbmVyRWxtLmNoaWxkTm9kZXNbaW5kZXhdKS5iZWZvcmUoY3RybC5yZW5kZXJIdG1sKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKGNvbnRhaW5lckVsbSkuYXBwZW5kKGN0cmwucmVuZGVySHRtbCgpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjdHJsLnBvc3RSZW5kZXIoKTtcblx0XHRcdFx0XHRSZWZsb3dRdWV1ZS5hZGQoY3RybCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLl9sYXlvdXQuYXBwbHlDbGFzc2VzKHNlbGYuaXRlbXMoKS5maWx0ZXIoJzp2aXNpYmxlJykpO1xuXHRcdFx0c2VsZi5fbGFzdFJlY3QgPSBudWxsO1xuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQXBwZW5kcyBuZXcgaW5zdGFuY2VzIHRvIHRoZSBjdXJyZW50IGNvbnRhaW5lci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYXBwZW5kXG5cdFx0ICogQHBhcmFtIHtBcnJheS90aW55bWNlLnVpLkNvbGxlY3Rpb259IGl0ZW1zIEFycmF5IGlmIGNvbnRyb2xzIHRvIGFwcGVuZC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRhaW5lcn0gQ3VycmVudCBjb250YWluZXIgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0YXBwZW5kOiBmdW5jdGlvbihpdGVtcykge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkKGl0ZW1zKS5yZW5kZXJOZXcoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUHJlcGVuZHMgbmV3IGluc3RhbmNlcyB0byB0aGUgY3VycmVudCBjb250YWluZXIuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHByZXBlbmRcblx0XHQgKiBAcGFyYW0ge0FycmF5L3RpbnltY2UudWkuQ29sbGVjdGlvbn0gaXRlbXMgQXJyYXkgaWYgY29udHJvbHMgdG8gcHJlcGVuZC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRhaW5lcn0gQ3VycmVudCBjb250YWluZXIgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0cHJlcGVuZDogZnVuY3Rpb24oaXRlbXMpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5pdGVtcygpLnNldChzZWxmLmNyZWF0ZShpdGVtcykuY29uY2F0KHNlbGYuaXRlbXMoKS50b0FycmF5KCkpKTtcblxuXHRcdFx0cmV0dXJuIHNlbGYucmVuZGVyTmV3KCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEluc2VydHMgYW4gY29udHJvbCBhdCBhIHNwZWNpZmljIGluZGV4LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpbnNlcnRcblx0XHQgKiBAcGFyYW0ge0FycmF5L3RpbnltY2UudWkuQ29sbGVjdGlvbn0gaXRlbXMgQXJyYXkgaWYgY29udHJvbHMgdG8gaW5zZXJ0LlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBpbmRleCBJbmRleCB0byBpbnNlcnQgY29udHJvbHMgYXQuXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBbYmVmb3JlPWZhbHNlXSBJbnNlcnRzIGNvbnRyb2xzIGJlZm9yZSB0aGUgaW5kZXguXG5cdFx0ICovXG5cdFx0aW5zZXJ0OiBmdW5jdGlvbihpdGVtcywgaW5kZXgsIGJlZm9yZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBjdXJJdGVtcywgYmVmb3JlSXRlbXMsIGFmdGVySXRlbXM7XG5cblx0XHRcdGl0ZW1zID0gc2VsZi5jcmVhdGUoaXRlbXMpO1xuXHRcdFx0Y3VySXRlbXMgPSBzZWxmLml0ZW1zKCk7XG5cblx0XHRcdGlmICghYmVmb3JlICYmIGluZGV4IDwgY3VySXRlbXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRpbmRleCArPSAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGN1ckl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRiZWZvcmVJdGVtcyA9IGN1ckl0ZW1zLnNsaWNlKDAsIGluZGV4KS50b0FycmF5KCk7XG5cdFx0XHRcdGFmdGVySXRlbXMgPSBjdXJJdGVtcy5zbGljZShpbmRleCkudG9BcnJheSgpO1xuXHRcdFx0XHRjdXJJdGVtcy5zZXQoYmVmb3JlSXRlbXMuY29uY2F0KGl0ZW1zLCBhZnRlckl0ZW1zKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmLnJlbmRlck5ldygpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBQb3B1bGF0ZXMgdGhlIGZvcm0gZmllbGRzIGZyb20gdGhlIHNwZWNpZmllZCBKU09OIGRhdGEgb2JqZWN0LlxuXHRcdCAqXG5cdFx0ICogQ29udHJvbCBpdGVtcyBpbiB0aGUgZm9ybSB0aGF0IG1hdGNoZXMgdGhlIGRhdGEgd2lsbCBoYXZlIGl0J3MgdmFsdWUgc2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBmcm9tSlNPTlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIEpTT04gZGF0YSBvYmplY3QgdG8gc2V0IGNvbnRyb2wgdmFsdWVzIGJ5LlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29udGFpbmVyfSBDdXJyZW50IGZvcm0gaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0ZnJvbUpTT046IGZ1bmN0aW9uKGRhdGEpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBkYXRhKSB7XG5cdFx0XHRcdHNlbGYuZmluZCgnIycgKyBuYW1lKS52YWx1ZShkYXRhW25hbWVdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNlcmlhbGl6ZXMgdGhlIGZvcm0gaW50byBhIEpTT04gb2JqZWN0IGJ5IGdldHRpbmcgYWxsIGl0ZW1zXG5cdFx0ICogdGhhdCBoYXMgYSBuYW1lIGFuZCBhIHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0b0pTT05cblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IEpTT04gb2JqZWN0IHdpdGggZm9ybSBkYXRhLlxuXHRcdCAqL1xuXHRcdHRvSlNPTjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGRhdGEgPSB7fTtcblxuXHRcdFx0c2VsZi5maW5kKCcqJykuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdHZhciBuYW1lID0gY3RybC5uYW1lKCksIHZhbHVlID0gY3RybC52YWx1ZSgpO1xuXG5cdFx0XHRcdGlmIChuYW1lICYmIHR5cGVvZiB2YWx1ZSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0ZGF0YVtuYW1lXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGxheW91dCA9IHNlbGYuX2xheW91dCwgcm9sZSA9IHRoaXMuc2V0dGluZ3Mucm9sZTtcblxuXHRcdFx0c2VsZi5wcmVSZW5kZXIoKTtcblx0XHRcdGxheW91dC5wcmVSZW5kZXIoc2VsZik7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIicgKyAocm9sZSA/ICcgcm9sZT1cIicgKyB0aGlzLnNldHRpbmdzLnJvbGUgKyAnXCInIDogJycpICsgJz4nICtcblx0XHRcdFx0XHQnPGRpdiBpZD1cIicgKyBzZWxmLl9pZCArICctYm9keVwiIGNsYXNzPVwiJyArIHNlbGYuYm9keUNsYXNzZXMgKyAnXCI+JyArXG5cdFx0XHRcdFx0XHQoc2VsZi5zZXR0aW5ncy5odG1sIHx8ICcnKSArIGxheW91dC5yZW5kZXJIdG1sKHNlbGYpICtcblx0XHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBQb3N0IHJlbmRlciBtZXRob2QuIENhbGxlZCBhZnRlciB0aGUgY29udHJvbCBoYXMgYmVlbiByZW5kZXJlZCB0byB0aGUgdGFyZ2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwb3N0UmVuZGVyXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250YWluZXJ9IEN1cnJlbnQgY29tYm9ib3ggaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGJveDtcblxuXHRcdFx0c2VsZi5pdGVtcygpLmV4ZWMoJ3Bvc3RSZW5kZXInKTtcblx0XHRcdHNlbGYuX3N1cGVyKCk7XG5cblx0XHRcdHNlbGYuX2xheW91dC5wb3N0UmVuZGVyKHNlbGYpO1xuXHRcdFx0c2VsZi5zdGF0ZS5zZXQoJ3JlbmRlcmVkJywgdHJ1ZSk7XG5cblx0XHRcdGlmIChzZWxmLnNldHRpbmdzLnN0eWxlKSB7XG5cdFx0XHRcdHNlbGYuJGVsLmNzcyhzZWxmLnNldHRpbmdzLnN0eWxlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbGYuc2V0dGluZ3MuYm9yZGVyKSB7XG5cdFx0XHRcdGJveCA9IHNlbGYuYm9yZGVyQm94O1xuXHRcdFx0XHRzZWxmLiRlbC5jc3Moe1xuXHRcdFx0XHRcdCdib3JkZXItdG9wLXdpZHRoJzogYm94LnRvcCxcblx0XHRcdFx0XHQnYm9yZGVyLXJpZ2h0LXdpZHRoJzogYm94LnJpZ2h0LFxuXHRcdFx0XHRcdCdib3JkZXItYm90dG9tLXdpZHRoJzogYm94LmJvdHRvbSxcblx0XHRcdFx0XHQnYm9yZGVyLWxlZnQtd2lkdGgnOiBib3gubGVmdFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxmLnBhcmVudCgpKSB7XG5cdFx0XHRcdHNlbGYua2V5Ym9hcmROYXYgPSBuZXcgS2V5Ym9hcmROYXZpZ2F0aW9uKHtcblx0XHRcdFx0XHRyb290OiBzZWxmXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW5pdGlhbGl6ZXMgdGhlIGN1cnJlbnQgY29udHJvbHMgbGF5b3V0IHJlY3QuXG5cdFx0ICogVGhpcyB3aWxsIGJlIGV4ZWN1dGVkIGJ5IHRoZSBsYXlvdXQgbWFuYWdlcnMgdG8gZGV0ZXJtaW5lIHRoZVxuXHRcdCAqIGRlZmF1bHQgbWluV2lkdGgvbWluSGVpZ2h0IGV0Yy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaW5pdExheW91dFJlY3Rcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IExheW91dCByZWN0IGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGluaXRMYXlvdXRSZWN0OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbGF5b3V0UmVjdCA9IHNlbGYuX3N1cGVyKCk7XG5cblx0XHRcdC8vIFJlY2FsYyBjb250YWluZXIgc2l6ZSBieSBhc2tpbmcgbGF5b3V0IG1hbmFnZXJcblx0XHRcdHNlbGYuX2xheW91dC5yZWNhbGMoc2VsZik7XG5cblx0XHRcdHJldHVybiBsYXlvdXRSZWN0O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZWNhbGN1bGF0ZXMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29udHJvbHMgaW4gdGhlIGN1cnJlbnQgY29udGFpbmVyLlxuXHRcdCAqIFRoaXMgaXMgaW52b2tlZCBieSB0aGUgcmVmbG93IG1ldGhvZCBhbmQgc2hvdWxkbid0IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVjYWxjXG5cdFx0ICovXG5cdFx0cmVjYWxjOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcmVjdCA9IHNlbGYuX2xheW91dFJlY3QsIGxhc3RSZWN0ID0gc2VsZi5fbGFzdFJlY3Q7XG5cblx0XHRcdGlmICghbGFzdFJlY3QgfHwgbGFzdFJlY3QudyAhPSByZWN0LncgfHwgbGFzdFJlY3QuaCAhPSByZWN0LmgpIHtcblx0XHRcdFx0c2VsZi5fbGF5b3V0LnJlY2FsYyhzZWxmKTtcblx0XHRcdFx0cmVjdCA9IHNlbGYubGF5b3V0UmVjdCgpO1xuXHRcdFx0XHRzZWxmLl9sYXN0UmVjdCA9IHt4OiByZWN0LngsIHk6IHJlY3QueSwgdzogcmVjdC53LCBoOiByZWN0Lmh9O1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVmbG93cyB0aGUgY3VycmVudCBjb250YWluZXIgYW5kIGl0J3MgY2hpbGRyZW4gYW5kIHBvc3NpYmxlIHBhcmVudHMuXG5cdFx0ICogVGhpcyBzaG91bGQgYmUgdXNlZCBhZnRlciB5b3UgZm9yIGV4YW1wbGUgYXBwZW5kIGNoaWxkcmVuIHRvIHRoZSBjdXJyZW50IGNvbnRyb2wgc29cblx0XHQgKiB0aGF0IHRoZSBsYXlvdXQgbWFuYWdlcnMga25vdyB0aGF0IHRoZXkgbmVlZCB0byByZXBvc2l0aW9uIGV2ZXJ5dGhpbmcuXG5cdFx0ICpcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGNvbnRhaW5lci5hcHBlbmQoe3R5cGU6ICdidXR0b24nLCB0ZXh0OiAnTXkgYnV0dG9uJ30pLnJlZmxvdygpO1xuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZWZsb3dcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRhaW5lcn0gQ3VycmVudCBjb250YWluZXIgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0cmVmbG93OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpO1xuXG5cdFx0XHRSZWZsb3dRdWV1ZS5yZW1vdmUodGhpcyk7XG5cblx0XHRcdGlmICh0aGlzLnZpc2libGUoKSkge1xuXHRcdFx0XHRDb250cm9sLnJlcGFpbnRDb250cm9scyA9IFtdO1xuXHRcdFx0XHRDb250cm9sLnJlcGFpbnRDb250cm9scy5tYXAgPSB7fTtcblxuXHRcdFx0XHR0aGlzLnJlY2FsYygpO1xuXHRcdFx0XHRpID0gQ29udHJvbC5yZXBhaW50Q29udHJvbHMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRDb250cm9sLnJlcGFpbnRDb250cm9sc1tpXS5yZXBhaW50KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUT0RPOiBGaXggbWUhXG5cdFx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmxheW91dCAhPT0gXCJmbG93XCIgJiYgdGhpcy5zZXR0aW5ncy5sYXlvdXQgIT09IFwic3RhY2tcIikge1xuXHRcdFx0XHRcdHRoaXMucmVwYWludCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Q29udHJvbC5yZXBhaW50Q29udHJvbHMgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvRHJhZ0hlbHBlci5qc1xuXG4vKipcbiAqIERyYWdIZWxwZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBEcmFnL2Ryb3AgaGVscGVyIGNsYXNzLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgZHJhZ0hlbHBlciA9IG5ldyB0aW55bWNlLnVpLkRyYWdIZWxwZXIoJ215ZGl2Jywge1xuICogICAgIHN0YXJ0OiBmdW5jdGlvbihldnQpIHtcbiAqICAgICB9LFxuICpcbiAqICAgICBkcmFnOiBmdW5jdGlvbihldnQpIHtcbiAqICAgICB9LFxuICpcbiAqICAgICBlbmQ6IGZ1bmN0aW9uKGV2dCkge1xuICogICAgIH1cbiAqIH0pO1xuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkRyYWdIZWxwZXJcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9EcmFnSGVscGVyXCIsIFtcblx0XCJ0aW55bWNlL2RvbS9Eb21RdWVyeVwiXG5dLCBmdW5jdGlvbigkKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGZ1bmN0aW9uIGdldERvY3VtZW50U2l6ZShkb2MpIHtcblx0XHR2YXIgZG9jdW1lbnRFbGVtZW50LCBib2R5LCBzY3JvbGxXaWR0aCwgY2xpZW50V2lkdGg7XG5cdFx0dmFyIG9mZnNldFdpZHRoLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCwgb2Zmc2V0SGVpZ2h0LCBtYXggPSBNYXRoLm1heDtcblxuXHRcdGRvY3VtZW50RWxlbWVudCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0Ym9keSA9IGRvYy5ib2R5O1xuXG5cdFx0c2Nyb2xsV2lkdGggPSBtYXgoZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoLCBib2R5LnNjcm9sbFdpZHRoKTtcblx0XHRjbGllbnRXaWR0aCA9IG1heChkb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuXHRcdG9mZnNldFdpZHRoID0gbWF4KGRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCwgYm9keS5vZmZzZXRXaWR0aCk7XG5cblx0XHRzY3JvbGxIZWlnaHQgPSBtYXgoZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCwgYm9keS5zY3JvbGxIZWlnaHQpO1xuXHRcdGNsaWVudEhlaWdodCA9IG1heChkb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG5cdFx0b2Zmc2V0SGVpZ2h0ID0gbWF4KGRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsIGJvZHkub2Zmc2V0SGVpZ2h0KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR3aWR0aDogc2Nyb2xsV2lkdGggPCBvZmZzZXRXaWR0aCA/IGNsaWVudFdpZHRoIDogc2Nyb2xsV2lkdGgsXG5cdFx0XHRoZWlnaHQ6IHNjcm9sbEhlaWdodCA8IG9mZnNldEhlaWdodCA/IGNsaWVudEhlaWdodCA6IHNjcm9sbEhlaWdodFxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiB1cGRhdGVXaXRoVG91Y2hEYXRhKGUpIHtcblx0XHR2YXIga2V5cywgaTtcblxuXHRcdGlmIChlLmNoYW5nZWRUb3VjaGVzKSB7XG5cdFx0XHRrZXlzID0gXCJzY3JlZW5YIHNjcmVlblkgcGFnZVggcGFnZVkgY2xpZW50WCBjbGllbnRZXCIuc3BsaXQoJyAnKTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGVba2V5c1tpXV0gPSBlLmNoYW5nZWRUb3VjaGVzWzBdW2tleXNbaV1dO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmdW5jdGlvbihpZCwgc2V0dGluZ3MpIHtcblx0XHR2YXIgJGV2ZW50T3ZlcmxheSwgZG9jID0gc2V0dGluZ3MuZG9jdW1lbnQgfHwgZG9jdW1lbnQsIGRvd25CdXR0b24sIHN0YXJ0LCBzdG9wLCBkcmFnLCBzdGFydFgsIHN0YXJ0WTtcblxuXHRcdHNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XG5cblx0XHRmdW5jdGlvbiBnZXRIYW5kbGVFbG0oKSB7XG5cdFx0XHRyZXR1cm4gZG9jLmdldEVsZW1lbnRCeUlkKHNldHRpbmdzLmhhbmRsZSB8fCBpZCk7XG5cdFx0fVxuXG5cdFx0c3RhcnQgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHR2YXIgZG9jU2l6ZSA9IGdldERvY3VtZW50U2l6ZShkb2MpLCBoYW5kbGVFbG0sIGN1cnNvcjtcblxuXHRcdFx0dXBkYXRlV2l0aFRvdWNoRGF0YShlKTtcblxuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0ZG93bkJ1dHRvbiA9IGUuYnV0dG9uO1xuXHRcdFx0aGFuZGxlRWxtID0gZ2V0SGFuZGxlRWxtKCk7XG5cdFx0XHRzdGFydFggPSBlLnNjcmVlblg7XG5cdFx0XHRzdGFydFkgPSBlLnNjcmVlblk7XG5cblx0XHRcdC8vIEdyYWIgY3Vyc29yIGZyb20gaGFuZGxlIHNvIHdlIGNhbiBwbGFjZSBpdCBvbiBvdmVybGF5XG5cdFx0XHRpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcblx0XHRcdFx0Y3Vyc29yID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaGFuZGxlRWxtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwiY3Vyc29yXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3Vyc29yID0gaGFuZGxlRWxtLnJ1bnRpbWVTdHlsZS5jdXJzb3I7XG5cdFx0XHR9XG5cblx0XHRcdCRldmVudE92ZXJsYXkgPSAkKCc8ZGl2PjwvZGl2PicpLmNzcyh7XG5cdFx0XHRcdHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG5cdFx0XHRcdHRvcDogMCwgbGVmdDogMCxcblx0XHRcdFx0d2lkdGg6IGRvY1NpemUud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogZG9jU2l6ZS5oZWlnaHQsXG5cdFx0XHRcdHpJbmRleDogMHg3RkZGRkZGRixcblx0XHRcdFx0b3BhY2l0eTogMC4wMDAxLFxuXHRcdFx0XHRjdXJzb3I6IGN1cnNvclxuXHRcdFx0fSkuYXBwZW5kVG8oZG9jLmJvZHkpO1xuXG5cdFx0XHQkKGRvYykub24oJ21vdXNlbW92ZSB0b3VjaG1vdmUnLCBkcmFnKS5vbignbW91c2V1cCB0b3VjaGVuZCcsIHN0b3ApO1xuXG5cdFx0XHRzZXR0aW5ncy5zdGFydChlKTtcblx0XHR9O1xuXG5cdFx0ZHJhZyA9IGZ1bmN0aW9uKGUpIHtcblx0XHRcdHVwZGF0ZVdpdGhUb3VjaERhdGEoZSk7XG5cblx0XHRcdGlmIChlLmJ1dHRvbiAhPT0gZG93bkJ1dHRvbikge1xuXHRcdFx0XHRyZXR1cm4gc3RvcChlKTtcblx0XHRcdH1cblxuXHRcdFx0ZS5kZWx0YVggPSBlLnNjcmVlblggLSBzdGFydFg7XG5cdFx0XHRlLmRlbHRhWSA9IGUuc2NyZWVuWSAtIHN0YXJ0WTtcblxuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0c2V0dGluZ3MuZHJhZyhlKTtcblx0XHR9O1xuXG5cdFx0c3RvcCA9IGZ1bmN0aW9uKGUpIHtcblx0XHRcdHVwZGF0ZVdpdGhUb3VjaERhdGEoZSk7XG5cblx0XHRcdCQoZG9jKS5vZmYoJ21vdXNlbW92ZSB0b3VjaG1vdmUnLCBkcmFnKS5vZmYoJ21vdXNldXAgdG91Y2hlbmQnLCBzdG9wKTtcblxuXHRcdFx0JGV2ZW50T3ZlcmxheS5yZW1vdmUoKTtcblxuXHRcdFx0aWYgKHNldHRpbmdzLnN0b3ApIHtcblx0XHRcdFx0c2V0dGluZ3Muc3RvcChlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogRGVzdHJveXMgdGhlIGRyYWcvZHJvcCBoZWxwZXIgaW5zdGFuY2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGRlc3Ryb3lcblx0XHQgKi9cblx0XHR0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcblx0XHRcdCQoZ2V0SGFuZGxlRWxtKCkpLm9mZigpO1xuXHRcdH07XG5cblx0XHQkKGdldEhhbmRsZUVsbSgpKS5vbignbW91c2Vkb3duIHRvdWNoc3RhcnQnLCBzdGFydCk7XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1Njcm9sbGFibGUuanNcblxuLyoqXG4gKiBTY3JvbGxhYmxlLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBtaXhpbiBtYWtlcyBjb250cm9scyBzY3JvbGxhYmxlIHVzaW5nIGN1c3RvbSBzY3JvbGxiYXJzLlxuICpcbiAqIEAteC1sZXNzIFNjcm9sbGFibGUubGVzc1xuICogQG1peGluIHRpbnltY2UudWkuU2Nyb2xsYWJsZVxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL1Njcm9sbGFibGVcIiwgW1xuXHRcInRpbnltY2UvZG9tL0RvbVF1ZXJ5XCIsXG5cdFwidGlueW1jZS91aS9EcmFnSGVscGVyXCJcbl0sIGZ1bmN0aW9uKCQsIERyYWdIZWxwZXIpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIHtcblx0XHRpbml0OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRcdHNlbGYub24oJ3JlcGFpbnQnLCBzZWxmLnJlbmRlclNjcm9sbCk7XG5cdFx0fSxcblxuXHRcdHJlbmRlclNjcm9sbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIG1hcmdpbiA9IDI7XG5cblx0XHRcdGZ1bmN0aW9uIHJlcGFpbnRTY3JvbGwoKSB7XG5cdFx0XHRcdHZhciBoYXNTY3JvbGxILCBoYXNTY3JvbGxWLCBib2R5RWxtO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIHJlcGFpbnRBeGlzKGF4aXNOYW1lLCBwb3NOYW1lLCBzaXplTmFtZSwgY29udGVudFNpemVOYW1lLCBoYXNTY3JvbGwsIGF4KSB7XG5cdFx0XHRcdFx0dmFyIGNvbnRhaW5lckVsbSwgc2Nyb2xsQmFyRWxtLCBzY3JvbGxUaHVtYkVsbTtcblx0XHRcdFx0XHR2YXIgY29udGFpbmVyU2l6ZSwgc2Nyb2xsU2l6ZSwgcmF0aW8sIHJlY3Q7XG5cdFx0XHRcdFx0dmFyIHBvc05hbWVMb3dlciwgc2l6ZU5hbWVMb3dlcjtcblxuXHRcdFx0XHRcdHNjcm9sbEJhckVsbSA9IHNlbGYuZ2V0RWwoJ3Njcm9sbCcgKyBheGlzTmFtZSk7XG5cdFx0XHRcdFx0aWYgKHNjcm9sbEJhckVsbSkge1xuXHRcdFx0XHRcdFx0cG9zTmFtZUxvd2VyID0gcG9zTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0c2l6ZU5hbWVMb3dlciA9IHNpemVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdFx0XHRcdCQoc2VsZi5nZXRFbCgnYWJzZW5kJykpLmNzcyhwb3NOYW1lTG93ZXIsIHNlbGYubGF5b3V0UmVjdCgpW2NvbnRlbnRTaXplTmFtZV0gLSAxKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFoYXNTY3JvbGwpIHtcblx0XHRcdFx0XHRcdFx0JChzY3JvbGxCYXJFbG0pLmNzcygnZGlzcGxheScsICdub25lJyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0JChzY3JvbGxCYXJFbG0pLmNzcygnZGlzcGxheScsICdibG9jaycpO1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyRWxtID0gc2VsZi5nZXRFbCgnYm9keScpO1xuXHRcdFx0XHRcdFx0c2Nyb2xsVGh1bWJFbG0gPSBzZWxmLmdldEVsKCdzY3JvbGwnICsgYXhpc05hbWUgKyBcInRcIik7XG5cdFx0XHRcdFx0XHRjb250YWluZXJTaXplID0gY29udGFpbmVyRWxtW1wiY2xpZW50XCIgKyBzaXplTmFtZV0gLSAobWFyZ2luICogMik7XG5cdFx0XHRcdFx0XHRjb250YWluZXJTaXplIC09IGhhc1Njcm9sbEggJiYgaGFzU2Nyb2xsViA/IHNjcm9sbEJhckVsbVtcImNsaWVudFwiICsgYXhdIDogMDtcblx0XHRcdFx0XHRcdHNjcm9sbFNpemUgPSBjb250YWluZXJFbG1bXCJzY3JvbGxcIiArIHNpemVOYW1lXTtcblx0XHRcdFx0XHRcdHJhdGlvID0gY29udGFpbmVyU2l6ZSAvIHNjcm9sbFNpemU7XG5cblx0XHRcdFx0XHRcdHJlY3QgPSB7fTtcblx0XHRcdFx0XHRcdHJlY3RbcG9zTmFtZUxvd2VyXSA9IGNvbnRhaW5lckVsbVtcIm9mZnNldFwiICsgcG9zTmFtZV0gKyBtYXJnaW47XG5cdFx0XHRcdFx0XHRyZWN0W3NpemVOYW1lTG93ZXJdID0gY29udGFpbmVyU2l6ZTtcblx0XHRcdFx0XHRcdCQoc2Nyb2xsQmFyRWxtKS5jc3MocmVjdCk7XG5cblx0XHRcdFx0XHRcdHJlY3QgPSB7fTtcblx0XHRcdFx0XHRcdHJlY3RbcG9zTmFtZUxvd2VyXSA9IGNvbnRhaW5lckVsbVtcInNjcm9sbFwiICsgcG9zTmFtZV0gKiByYXRpbztcblx0XHRcdFx0XHRcdHJlY3Rbc2l6ZU5hbWVMb3dlcl0gPSBjb250YWluZXJTaXplICogcmF0aW87XG5cdFx0XHRcdFx0XHQkKHNjcm9sbFRodW1iRWxtKS5jc3MocmVjdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ym9keUVsbSA9IHNlbGYuZ2V0RWwoJ2JvZHknKTtcblx0XHRcdFx0aGFzU2Nyb2xsSCA9IGJvZHlFbG0uc2Nyb2xsV2lkdGggPiBib2R5RWxtLmNsaWVudFdpZHRoO1xuXHRcdFx0XHRoYXNTY3JvbGxWID0gYm9keUVsbS5zY3JvbGxIZWlnaHQgPiBib2R5RWxtLmNsaWVudEhlaWdodDtcblxuXHRcdFx0XHRyZXBhaW50QXhpcyhcImhcIiwgXCJMZWZ0XCIsIFwiV2lkdGhcIiwgXCJjb250ZW50V1wiLCBoYXNTY3JvbGxILCBcIkhlaWdodFwiKTtcblx0XHRcdFx0cmVwYWludEF4aXMoXCJ2XCIsIFwiVG9wXCIsIFwiSGVpZ2h0XCIsIFwiY29udGVudEhcIiwgaGFzU2Nyb2xsViwgXCJXaWR0aFwiKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gYWRkU2Nyb2xsKCkge1xuXHRcdFx0XHRmdW5jdGlvbiBhZGRTY3JvbGxBeGlzKGF4aXNOYW1lLCBwb3NOYW1lLCBzaXplTmFtZSwgZGVsdGFQb3NOYW1lLCBheCkge1xuXHRcdFx0XHRcdHZhciBzY3JvbGxTdGFydCwgYXhpc0lkID0gc2VsZi5faWQgKyAnLXNjcm9sbCcgKyBheGlzTmFtZSwgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeDtcblxuXHRcdFx0XHRcdCQoc2VsZi5nZXRFbCgpKS5hcHBlbmQoXG5cdFx0XHRcdFx0XHQnPGRpdiBpZD1cIicgKyBheGlzSWQgKyAnXCIgY2xhc3M9XCInICsgcHJlZml4ICsgJ3Njcm9sbGJhciAnICsgcHJlZml4ICsgJ3Njcm9sbGJhci0nICsgYXhpc05hbWUgKyAnXCI+JyArXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGF4aXNJZCArICd0XCIgY2xhc3M9XCInICsgcHJlZml4ICsgJ3Njcm9sbGJhci10aHVtYlwiPjwvZGl2PicgK1xuXHRcdFx0XHRcdFx0JzwvZGl2Pidcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0c2VsZi5kcmFnaGVscGVyID0gbmV3IERyYWdIZWxwZXIoYXhpc0lkICsgJ3QnLCB7XG5cdFx0XHRcdFx0XHRzdGFydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHNjcm9sbFN0YXJ0ID0gc2VsZi5nZXRFbCgnYm9keScpW1wic2Nyb2xsXCIgKyBwb3NOYW1lXTtcblx0XHRcdFx0XHRcdFx0JCgnIycgKyBheGlzSWQpLmFkZENsYXNzKHByZWZpeCArICdhY3RpdmUnKTtcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdGRyYWc6IGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHJhdGlvLCBoYXNTY3JvbGxILCBoYXNTY3JvbGxWLCBjb250YWluZXJTaXplLCBsYXlvdXRSZWN0ID0gc2VsZi5sYXlvdXRSZWN0KCk7XG5cblx0XHRcdFx0XHRcdFx0aGFzU2Nyb2xsSCA9IGxheW91dFJlY3QuY29udGVudFcgPiBsYXlvdXRSZWN0LmlubmVyVztcblx0XHRcdFx0XHRcdFx0aGFzU2Nyb2xsViA9IGxheW91dFJlY3QuY29udGVudEggPiBsYXlvdXRSZWN0LmlubmVySDtcblx0XHRcdFx0XHRcdFx0Y29udGFpbmVyU2l6ZSA9IHNlbGYuZ2V0RWwoJ2JvZHknKVtcImNsaWVudFwiICsgc2l6ZU5hbWVdIC0gKG1hcmdpbiAqIDIpO1xuXHRcdFx0XHRcdFx0XHRjb250YWluZXJTaXplIC09IGhhc1Njcm9sbEggJiYgaGFzU2Nyb2xsViA/IHNlbGYuZ2V0RWwoJ3Njcm9sbCcgKyBheGlzTmFtZSlbXCJjbGllbnRcIiArIGF4XSA6IDA7XG5cblx0XHRcdFx0XHRcdFx0cmF0aW8gPSBjb250YWluZXJTaXplIC8gc2VsZi5nZXRFbCgnYm9keScpW1wic2Nyb2xsXCIgKyBzaXplTmFtZV07XG5cdFx0XHRcdFx0XHRcdHNlbGYuZ2V0RWwoJ2JvZHknKVtcInNjcm9sbFwiICsgcG9zTmFtZV0gPSBzY3JvbGxTdGFydCArIChlW1wiZGVsdGFcIiArIGRlbHRhUG9zTmFtZV0gLyByYXRpbyk7XG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRzdG9wOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0JCgnIycgKyBheGlzSWQpLnJlbW92ZUNsYXNzKHByZWZpeCArICdhY3RpdmUnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ3Njcm9sbCcpO1xuXG5cdFx0XHRcdGFkZFNjcm9sbEF4aXMoXCJ2XCIsIFwiVG9wXCIsIFwiSGVpZ2h0XCIsIFwiWVwiLCBcIldpZHRoXCIpO1xuXHRcdFx0XHRhZGRTY3JvbGxBeGlzKFwiaFwiLCBcIkxlZnRcIiwgXCJXaWR0aFwiLCBcIlhcIiwgXCJIZWlnaHRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZWxmLnNldHRpbmdzLmF1dG9TY3JvbGwpIHtcblx0XHRcdFx0aWYgKCFzZWxmLl9oYXNTY3JvbGwpIHtcblx0XHRcdFx0XHRzZWxmLl9oYXNTY3JvbGwgPSB0cnVlO1xuXHRcdFx0XHRcdGFkZFNjcm9sbCgpO1xuXG5cdFx0XHRcdFx0c2VsZi5vbignd2hlZWwnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0XHR2YXIgYm9keUVsID0gc2VsZi5nZXRFbCgnYm9keScpO1xuXG5cdFx0XHRcdFx0XHRib2R5RWwuc2Nyb2xsTGVmdCArPSAoZS5kZWx0YVggfHwgMCkgKiAxMDtcblx0XHRcdFx0XHRcdGJvZHlFbC5zY3JvbGxUb3AgKz0gZS5kZWx0YVkgKiAxMDtcblxuXHRcdFx0XHRcdFx0cmVwYWludFNjcm9sbCgpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0JChzZWxmLmdldEVsKCdib2R5JykpLm9uKFwic2Nyb2xsXCIsIHJlcGFpbnRTY3JvbGwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVwYWludFNjcm9sbCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvUGFuZWwuanNcblxuLyoqXG4gKiBQYW5lbC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcGFuZWwuXG4gKlxuICogQC14LWxlc3MgUGFuZWwubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuUGFuZWxcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuQ29udGFpbmVyXG4gKiBAbWl4ZXMgdGlueW1jZS51aS5TY3JvbGxhYmxlXG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvUGFuZWxcIiwgW1xuXHRcInRpbnltY2UvdWkvQ29udGFpbmVyXCIsXG5cdFwidGlueW1jZS91aS9TY3JvbGxhYmxlXCJcbl0sIGZ1bmN0aW9uKENvbnRhaW5lciwgU2Nyb2xsYWJsZSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gQ29udGFpbmVyLmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGxheW91dDogJ2ZpdCcsXG5cdFx0XHRjb250YWluZXJDbHM6ICdwYW5lbCdcblx0XHR9LFxuXG5cdFx0TWl4aW5zOiBbU2Nyb2xsYWJsZV0sXG5cblx0XHQvKipcblx0XHQgKiBSZW5kZXJzIHRoZSBjb250cm9sIGFzIGEgSFRNTCBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbmRlckh0bWxcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sLlxuXHRcdCAqL1xuXHRcdHJlbmRlckh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBsYXlvdXQgPSBzZWxmLl9sYXlvdXQsIGlubmVySHRtbCA9IHNlbGYuc2V0dGluZ3MuaHRtbDtcblxuXHRcdFx0c2VsZi5wcmVSZW5kZXIoKTtcblx0XHRcdGxheW91dC5wcmVSZW5kZXIoc2VsZik7XG5cblx0XHRcdGlmICh0eXBlb2YgaW5uZXJIdG1sID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0aW5uZXJIdG1sID0gKFxuXHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJy1ib2R5XCIgY2xhc3M9XCInICsgc2VsZi5ib2R5Q2xhc3NlcyArICdcIj4nICtcblx0XHRcdFx0XHRcdGxheW91dC5yZW5kZXJIdG1sKHNlbGYpICtcblx0XHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBpbm5lckh0bWwgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGlubmVySHRtbCA9IGlubmVySHRtbC5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5faGFzQm9keSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPGRpdiBpZD1cIicgKyBzZWxmLl9pZCArICdcIiBjbGFzcz1cIicgKyBzZWxmLmNsYXNzZXMgKyAnXCIgaGlkZWZvY3VzPVwiMVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZ3JvdXBcIj4nICtcblx0XHRcdFx0XHQoc2VsZi5fcHJlQm9keUh0bWwgfHwgJycpICtcblx0XHRcdFx0XHRpbm5lckh0bWwgK1xuXHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9Nb3ZhYmxlLmpzXG5cbi8qKlxuICogTW92YWJsZS5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIE1vdmFibGUgbWl4aW4uIE1ha2VzIGNvbnRyb2xzIG1vdmFibGUgYWJzb2x1dGUgYW5kIHJlbGF0aXZlIHRvIG90aGVyIGVsZW1lbnRzLlxuICpcbiAqIEBtaXhpbiB0aW55bWNlLnVpLk1vdmFibGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9Nb3ZhYmxlXCIsIFtcblx0XCJ0aW55bWNlL3VpL0RvbVV0aWxzXCJcbl0sIGZ1bmN0aW9uKERvbVV0aWxzKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGZ1bmN0aW9uIGNhbGN1bGF0ZVJlbGF0aXZlUG9zaXRpb24oY3RybCwgdGFyZ2V0RWxtLCByZWwpIHtcblx0XHR2YXIgY3RybEVsbSwgcG9zLCB4LCB5LCBzZWxmVywgc2VsZkgsIHRhcmdldFcsIHRhcmdldEgsIHZpZXdwb3J0LCBzaXplO1xuXG5cdFx0dmlld3BvcnQgPSBEb21VdGlscy5nZXRWaWV3UG9ydCgpO1xuXG5cdFx0Ly8gR2V0IHBvcyBvZiB0YXJnZXRcblx0XHRwb3MgPSBEb21VdGlscy5nZXRQb3ModGFyZ2V0RWxtKTtcblx0XHR4ID0gcG9zLng7XG5cdFx0eSA9IHBvcy55O1xuXG5cdFx0aWYgKGN0cmwuc3RhdGUuZ2V0KCdmaXhlZCcpICYmIERvbVV0aWxzLmdldFJ1bnRpbWVTdHlsZShkb2N1bWVudC5ib2R5LCAncG9zaXRpb24nKSA9PSAnc3RhdGljJykge1xuXHRcdFx0eCAtPSB2aWV3cG9ydC54O1xuXHRcdFx0eSAtPSB2aWV3cG9ydC55O1xuXHRcdH1cblxuXHRcdC8vIEdldCBzaXplIG9mIHNlbGZcblx0XHRjdHJsRWxtID0gY3RybC5nZXRFbCgpO1xuXHRcdHNpemUgPSBEb21VdGlscy5nZXRTaXplKGN0cmxFbG0pO1xuXHRcdHNlbGZXID0gc2l6ZS53aWR0aDtcblx0XHRzZWxmSCA9IHNpemUuaGVpZ2h0O1xuXG5cdFx0Ly8gR2V0IHNpemUgb2YgdGFyZ2V0XG5cdFx0c2l6ZSA9IERvbVV0aWxzLmdldFNpemUodGFyZ2V0RWxtKTtcblx0XHR0YXJnZXRXID0gc2l6ZS53aWR0aDtcblx0XHR0YXJnZXRIID0gc2l6ZS5oZWlnaHQ7XG5cblx0XHQvLyBQYXJzZSBhbGlnbiBzdHJpbmdcblx0XHRyZWwgPSAocmVsIHx8ICcnKS5zcGxpdCgnJyk7XG5cblx0XHQvLyBUYXJnZXQgY29ybmVyc1xuXHRcdGlmIChyZWxbMF0gPT09ICdiJykge1xuXHRcdFx0eSArPSB0YXJnZXRIO1xuXHRcdH1cblxuXHRcdGlmIChyZWxbMV0gPT09ICdyJykge1xuXHRcdFx0eCArPSB0YXJnZXRXO1xuXHRcdH1cblxuXHRcdGlmIChyZWxbMF0gPT09ICdjJykge1xuXHRcdFx0eSArPSBNYXRoLnJvdW5kKHRhcmdldEggLyAyKTtcblx0XHR9XG5cblx0XHRpZiAocmVsWzFdID09PSAnYycpIHtcblx0XHRcdHggKz0gTWF0aC5yb3VuZCh0YXJnZXRXIC8gMik7XG5cdFx0fVxuXG5cdFx0Ly8gU2VsZiBjb3JuZXJzXG5cdFx0aWYgKHJlbFszXSA9PT0gJ2InKSB7XG5cdFx0XHR5IC09IHNlbGZIO1xuXHRcdH1cblxuXHRcdGlmIChyZWxbNF0gPT09ICdyJykge1xuXHRcdFx0eCAtPSBzZWxmVztcblx0XHR9XG5cblx0XHRpZiAocmVsWzNdID09PSAnYycpIHtcblx0XHRcdHkgLT0gTWF0aC5yb3VuZChzZWxmSCAvIDIpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxbNF0gPT09ICdjJykge1xuXHRcdFx0eCAtPSBNYXRoLnJvdW5kKHNlbGZXIC8gMik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IHgsXG5cdFx0XHR5OiB5LFxuXHRcdFx0dzogc2VsZlcsXG5cdFx0XHRoOiBzZWxmSFxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFRlc3RzIHZhcmlvdXMgcG9zaXRpb25zIHRvIGdldCB0aGUgbW9zdCBzdWl0YWJsZSBvbmUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHRlc3RNb3ZlUmVsXG5cdFx0ICogQHBhcmFtIHtET01FbGVtZW50fSBlbG0gRWxlbWVudCB0byBwb3NpdGlvbiBhZ2FpbnN0LlxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHJlbHMgQXJyYXkgd2l0aCByZWxhdGl2ZSBwb3NpdGlvbnMuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBCZXN0IHN1aXRhYmxlIHJlbGF0aXZlIHBvc2l0aW9uLlxuXHRcdCAqL1xuXHRcdHRlc3RNb3ZlUmVsOiBmdW5jdGlvbihlbG0sIHJlbHMpIHtcblx0XHRcdHZhciB2aWV3UG9ydFJlY3QgPSBEb21VdGlscy5nZXRWaWV3UG9ydCgpO1xuXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHJlbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHBvcyA9IGNhbGN1bGF0ZVJlbGF0aXZlUG9zaXRpb24odGhpcywgZWxtLCByZWxzW2ldKTtcblxuXHRcdFx0XHRpZiAodGhpcy5zdGF0ZS5nZXQoJ2ZpeGVkJykpIHtcblx0XHRcdFx0XHRpZiAocG9zLnggPiAwICYmIHBvcy54ICsgcG9zLncgPCB2aWV3UG9ydFJlY3QudyAmJiBwb3MueSA+IDAgJiYgcG9zLnkgKyBwb3MuaCA8IHZpZXdQb3J0UmVjdC5oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVsc1tpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHBvcy54ID4gdmlld1BvcnRSZWN0LnggJiYgcG9zLnggKyBwb3MudyA8IHZpZXdQb3J0UmVjdC53ICsgdmlld1BvcnRSZWN0LnggJiZcblx0XHRcdFx0XHRcdHBvcy55ID4gdmlld1BvcnRSZWN0LnkgJiYgcG9zLnkgKyBwb3MuaCA8IHZpZXdQb3J0UmVjdC5oICsgdmlld1BvcnRSZWN0LnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiByZWxzW2ldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVsc1swXTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTW92ZSByZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVkIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIG1vdmVSZWxcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsbSBFbGVtZW50IHRvIG1vdmUgcmVsYXRpdmUgdG8uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHJlbCBSZWxhdGl2ZSBtb2RlLiBGb3IgZXhhbXBsZTogYnItdGwuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sfSBDdXJyZW50IGNvbnRyb2wgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0bW92ZVJlbDogZnVuY3Rpb24oZWxtLCByZWwpIHtcblx0XHRcdGlmICh0eXBlb2YgcmVsICE9ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJlbCA9IHRoaXMudGVzdE1vdmVSZWwoZWxtLCByZWwpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcG9zID0gY2FsY3VsYXRlUmVsYXRpdmVQb3NpdGlvbih0aGlzLCBlbG0sIHJlbCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tb3ZlVG8ocG9zLngsIHBvcy55KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTW92ZSBieSBhIHJlbGF0aXZlIHgsIHkgdmFsdWVzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBtb3ZlQnlcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gZHggUmVsYXRpdmUgeCBwb3NpdGlvbi5cblx0XHQgKiBAcGFyYW0ge051bWJlcn0gZHkgUmVsYXRpdmUgeSBwb3NpdGlvbi5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRtb3ZlQnk6IGZ1bmN0aW9uKGR4LCBkeSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCByZWN0ID0gc2VsZi5sYXlvdXRSZWN0KCk7XG5cblx0XHRcdHNlbGYubW92ZVRvKHJlY3QueCArIGR4LCByZWN0LnkgKyBkeSk7XG5cblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBNb3ZlIHRvIGFic29sdXRlIHBvc2l0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBtb3ZlVG9cblx0XHQgKiBAcGFyYW0ge051bWJlcn0geCBBYnNvbHV0ZSB4IHBvc2l0aW9uLlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB5IEFic29sdXRlIHkgcG9zaXRpb24uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sfSBDdXJyZW50IGNvbnRyb2wgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0bW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdC8vIFRPRE86IE1vdmUgdGhpcyB0byBzb21lIGdsb2JhbCBjbGFzc1xuXHRcdFx0ZnVuY3Rpb24gY29uc3RyYWluKHZhbHVlLCBtYXgsIHNpemUpIHtcblx0XHRcdFx0aWYgKHZhbHVlIDwgMCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHZhbHVlICsgc2l6ZSA+IG1heCkge1xuXHRcdFx0XHRcdHZhbHVlID0gbWF4IC0gc2l6ZTtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPCAwID8gMCA6IHZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5zZXR0aW5ncy5jb25zdHJhaW5Ub1ZpZXdwb3J0KSB7XG5cdFx0XHRcdHZhciB2aWV3UG9ydFJlY3QgPSBEb21VdGlscy5nZXRWaWV3UG9ydCh3aW5kb3cpO1xuXHRcdFx0XHR2YXIgbGF5b3V0UmVjdCA9IHNlbGYubGF5b3V0UmVjdCgpO1xuXG5cdFx0XHRcdHggPSBjb25zdHJhaW4oeCwgdmlld1BvcnRSZWN0LncgKyB2aWV3UG9ydFJlY3QueCwgbGF5b3V0UmVjdC53KTtcblx0XHRcdFx0eSA9IGNvbnN0cmFpbih5LCB2aWV3UG9ydFJlY3QuaCArIHZpZXdQb3J0UmVjdC55LCBsYXlvdXRSZWN0LmgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5zdGF0ZS5nZXQoJ3JlbmRlcmVkJykpIHtcblx0XHRcdFx0c2VsZi5sYXlvdXRSZWN0KHt4OiB4LCB5OiB5fSkucmVwYWludCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5zZXR0aW5ncy54ID0geDtcblx0XHRcdFx0c2VsZi5zZXR0aW5ncy55ID0geTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5maXJlKCdtb3ZlJywge3g6IHgsIHk6IHl9KTtcblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fVxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9SZXNpemFibGUuanNcblxuLyoqXG4gKiBSZXNpemFibGUuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBSZXNpemFibGUgbWl4aW4uIEVuYWJsZXMgY29udHJvbHMgdG8gYmUgcmVzaXplZC5cbiAqXG4gKiBAbWl4aW4gdGlueW1jZS51aS5SZXNpemFibGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9SZXNpemFibGVcIiwgW1xuXHRcInRpbnltY2UvdWkvRG9tVXRpbHNcIlxuXSwgZnVuY3Rpb24oRG9tVXRpbHMpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIHtcblx0XHQvKipcblx0XHQgKiBSZXNpemVzIHRoZSBjb250cm9sIHRvIGNvbnRlbnRzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZXNpemVUb0NvbnRlbnRcblx0XHQgKi9cblx0XHRyZXNpemVUb0NvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fbGF5b3V0UmVjdC5hdXRvUmVzaXplID0gdHJ1ZTtcblx0XHRcdHRoaXMuX2xhc3RSZWN0ID0gbnVsbDtcblx0XHRcdHRoaXMucmVmbG93KCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlc2l6ZXMgdGhlIGNvbnRyb2wgdG8gYSBzcGVjaWZpYyB3aWR0aC9oZWlnaHQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlc2l6ZVRvXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHcgQ29udHJvbCB3aWR0aC5cblx0XHQgKiBAcGFyYW0ge051bWJlcn0gaCBDb250cm9sIGhlaWdodC5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRyZXNpemVUbzogZnVuY3Rpb24odywgaCkge1xuXHRcdFx0Ly8gVE9ETzogRml4IGhhY2tcblx0XHRcdGlmICh3IDw9IDEgfHwgaCA8PSAxKSB7XG5cdFx0XHRcdHZhciByZWN0ID0gRG9tVXRpbHMuZ2V0V2luZG93U2l6ZSgpO1xuXG5cdFx0XHRcdHcgPSB3IDw9IDEgPyB3ICogcmVjdC53IDogdztcblx0XHRcdFx0aCA9IGggPD0gMSA/IGggKiByZWN0LmggOiBoO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9sYXlvdXRSZWN0LmF1dG9SZXNpemUgPSBmYWxzZTtcblx0XHRcdHJldHVybiB0aGlzLmxheW91dFJlY3Qoe21pblc6IHcsIG1pbkg6IGgsIHc6IHcsIGg6IGh9KS5yZWZsb3coKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVzaXplcyB0aGUgY29udHJvbCB0byBhIHNwZWNpZmljIHJlbGF0aXZlIHdpZHRoL2hlaWdodC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVzaXplQnlcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gZHcgUmVsYXRpdmUgY29udHJvbCB3aWR0aC5cblx0XHQgKiBAcGFyYW0ge051bWJlcn0gZGggUmVsYXRpdmUgY29udHJvbCBoZWlnaHQuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sfSBDdXJyZW50IGNvbnRyb2wgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0cmVzaXplQnk6IGZ1bmN0aW9uKGR3LCBkaCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCByZWN0ID0gc2VsZi5sYXlvdXRSZWN0KCk7XG5cblx0XHRcdHJldHVybiBzZWxmLnJlc2l6ZVRvKHJlY3QudyArIGR3LCByZWN0LmggKyBkaCk7XG5cdFx0fVxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9GbG9hdFBhbmVsLmpzXG5cbi8qKlxuICogRmxvYXRQYW5lbC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhIGZsb2F0aW5nIHBhbmVsLlxuICpcbiAqIEAteC1sZXNzIEZsb2F0UGFuZWwubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuRmxvYXRQYW5lbFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5QYW5lbFxuICogQG1peGVzIHRpbnltY2UudWkuTW92YWJsZVxuICogQG1peGVzIHRpbnltY2UudWkuUmVzaXphYmxlXG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvRmxvYXRQYW5lbFwiLCBbXG5cdFwidGlueW1jZS91aS9QYW5lbFwiLFxuXHRcInRpbnltY2UvdWkvTW92YWJsZVwiLFxuXHRcInRpbnltY2UvdWkvUmVzaXphYmxlXCIsXG5cdFwidGlueW1jZS91aS9Eb21VdGlsc1wiLFxuXHRcInRpbnltY2UvZG9tL0RvbVF1ZXJ5XCIsXG5cdFwidGlueW1jZS91dGlsL0RlbGF5XCJcbl0sIGZ1bmN0aW9uKFBhbmVsLCBNb3ZhYmxlLCBSZXNpemFibGUsIERvbVV0aWxzLCAkLCBEZWxheSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgZG9jdW1lbnRDbGlja0hhbmRsZXIsIGRvY3VtZW50U2Nyb2xsSGFuZGxlciwgd2luZG93UmVzaXplSGFuZGxlciwgdmlzaWJsZVBhbmVscyA9IFtdO1xuXHR2YXIgek9yZGVyID0gW10sIGhhc01vZGFsO1xuXG5cdGZ1bmN0aW9uIGlzQ2hpbGRPZihjdHJsLCBwYXJlbnQpIHtcblx0XHR3aGlsZSAoY3RybCkge1xuXHRcdFx0aWYgKGN0cmwgPT0gcGFyZW50KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdHJsID0gY3RybC5wYXJlbnQoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBza2lwT3JIaWRlUGFuZWxzKGUpIHtcblx0XHQvLyBIaWRlIGFueSBmbG9hdCBwYW5lbCB3aGVuIGEgY2xpY2svZm9jdXMgb3V0IGlzIG91dCBzaWRlIHRoYXQgZmxvYXQgcGFuZWwgYW5kIHRoZVxuXHRcdC8vIGZsb2F0IHBhbmVscyBkaXJlY3QgcGFyZW50IGZvciBleGFtcGxlIGEgY2xpY2sgb24gYSBtZW51IGJ1dHRvblxuXHRcdHZhciBpID0gdmlzaWJsZVBhbmVscy5sZW5ndGg7XG5cblx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHR2YXIgcGFuZWwgPSB2aXNpYmxlUGFuZWxzW2ldLCBjbGlja0N0cmwgPSBwYW5lbC5nZXRQYXJlbnRDdHJsKGUudGFyZ2V0KTtcblxuXHRcdFx0aWYgKHBhbmVsLnNldHRpbmdzLmF1dG9oaWRlKSB7XG5cdFx0XHRcdGlmIChjbGlja0N0cmwpIHtcblx0XHRcdFx0XHRpZiAoaXNDaGlsZE9mKGNsaWNrQ3RybCwgcGFuZWwpIHx8IHBhbmVsLnBhcmVudCgpID09PSBjbGlja0N0cmwpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGUgPSBwYW5lbC5maXJlKCdhdXRvaGlkZScsIHt0YXJnZXQ6IGUudGFyZ2V0fSk7XG5cdFx0XHRcdGlmICghZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuXHRcdFx0XHRcdHBhbmVsLmhpZGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGJpbmREb2N1bWVudENsaWNrSGFuZGxlcigpIHtcblxuXHRcdGlmICghZG9jdW1lbnRDbGlja0hhbmRsZXIpIHtcblx0XHRcdGRvY3VtZW50Q2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oZSkge1xuXHRcdFx0XHQvLyBHZWNrbyBmaXJlcyBjbGljayBldmVudCBhbmQgaW4gdGhlIHdyb25nIG9yZGVyIG9uIE1hYyBzbyBsZXRzIG5vcm1hbGl6ZVxuXHRcdFx0XHRpZiAoZS5idXR0b24gPT0gMikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNraXBPckhpZGVQYW5lbHMoZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHQkKGRvY3VtZW50KS5vbignY2xpY2sgdG91Y2hzdGFydCcsIGRvY3VtZW50Q2xpY2tIYW5kbGVyKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBiaW5kRG9jdW1lbnRTY3JvbGxIYW5kbGVyKCkge1xuXHRcdGlmICghZG9jdW1lbnRTY3JvbGxIYW5kbGVyKSB7XG5cdFx0XHRkb2N1bWVudFNjcm9sbEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGk7XG5cblx0XHRcdFx0aSA9IHZpc2libGVQYW5lbHMubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0cmVwb3NpdGlvblBhbmVsKHZpc2libGVQYW5lbHNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHQkKHdpbmRvdykub24oJ3Njcm9sbCcsIGRvY3VtZW50U2Nyb2xsSGFuZGxlcik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYmluZFdpbmRvd1Jlc2l6ZUhhbmRsZXIoKSB7XG5cdFx0aWYgKCF3aW5kb3dSZXNpemVIYW5kbGVyKSB7XG5cdFx0XHR2YXIgZG9jRWxtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBjbGllbnRXaWR0aCA9IGRvY0VsbS5jbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0ID0gZG9jRWxtLmNsaWVudEhlaWdodDtcblxuXHRcdFx0d2luZG93UmVzaXplSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIGZvciAjNzA2NSBJRSA3IGZpcmVzIHJlc2l6ZSBldmVudHMgZXZlbnQgdGhvdWdoIHRoZSB3aW5kb3cgd2Fzbid0IHJlc2l6ZWRcblx0XHRcdFx0aWYgKCFkb2N1bWVudC5hbGwgfHwgY2xpZW50V2lkdGggIT0gZG9jRWxtLmNsaWVudFdpZHRoIHx8IGNsaWVudEhlaWdodCAhPSBkb2NFbG0uY2xpZW50SGVpZ2h0KSB7XG5cdFx0XHRcdFx0Y2xpZW50V2lkdGggPSBkb2NFbG0uY2xpZW50V2lkdGg7XG5cdFx0XHRcdFx0Y2xpZW50SGVpZ2h0ID0gZG9jRWxtLmNsaWVudEhlaWdodDtcblx0XHRcdFx0XHRGbG9hdFBhbmVsLmhpZGVBbGwoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0JCh3aW5kb3cpLm9uKCdyZXNpemUnLCB3aW5kb3dSZXNpemVIYW5kbGVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVwb3NpdGlvbnMgdGhlIHBhbmVsIHRvIHRoZSB0b3Agb2YgcGFnZSBpZiB0aGUgcGFuZWwgaXMgb3V0c2lkZSBvZiB0aGUgdmlzdWFsIHZpZXdwb3J0LiBJdCB3aWxsXG5cdCAqIGFsc28gcmVwb3NpdGlvbiBhbGwgY2hpbGQgcGFuZWxzIG9mIHRoZSBjdXJyZW50IHBhbmVsLlxuXHQgKi9cblx0ZnVuY3Rpb24gcmVwb3NpdGlvblBhbmVsKHBhbmVsKSB7XG5cdFx0dmFyIHNjcm9sbFkgPSBEb21VdGlscy5nZXRWaWV3UG9ydCgpLnk7XG5cblx0XHRmdW5jdGlvbiB0b2dnbGVGaXhlZENoaWxkUGFuZWxzKGZpeGVkLCBkZWx0YVkpIHtcblx0XHRcdHZhciBwYXJlbnQ7XG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVBhbmVscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAodmlzaWJsZVBhbmVsc1tpXSAhPSBwYW5lbCkge1xuXHRcdFx0XHRcdHBhcmVudCA9IHZpc2libGVQYW5lbHNbaV0ucGFyZW50KCk7XG5cblx0XHRcdFx0XHR3aGlsZSAocGFyZW50ICYmIChwYXJlbnQgPSBwYXJlbnQucGFyZW50KCkpKSB7XG5cdFx0XHRcdFx0XHRpZiAocGFyZW50ID09IHBhbmVsKSB7XG5cdFx0XHRcdFx0XHRcdHZpc2libGVQYW5lbHNbaV0uZml4ZWQoZml4ZWQpLm1vdmVCeSgwLCBkZWx0YVkpLnJlcGFpbnQoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFuZWwuc2V0dGluZ3MuYXV0b2ZpeCkge1xuXHRcdFx0aWYgKCFwYW5lbC5zdGF0ZS5nZXQoJ2ZpeGVkJykpIHtcblx0XHRcdFx0cGFuZWwuX2F1dG9GaXhZID0gcGFuZWwubGF5b3V0UmVjdCgpLnk7XG5cblx0XHRcdFx0aWYgKHBhbmVsLl9hdXRvRml4WSA8IHNjcm9sbFkpIHtcblx0XHRcdFx0XHRwYW5lbC5maXhlZCh0cnVlKS5sYXlvdXRSZWN0KHt5OiAwfSkucmVwYWludCgpO1xuXHRcdFx0XHRcdHRvZ2dsZUZpeGVkQ2hpbGRQYW5lbHModHJ1ZSwgc2Nyb2xsWSAtIHBhbmVsLl9hdXRvRml4WSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChwYW5lbC5fYXV0b0ZpeFkgPiBzY3JvbGxZKSB7XG5cdFx0XHRcdFx0cGFuZWwuZml4ZWQoZmFsc2UpLmxheW91dFJlY3Qoe3k6IHBhbmVsLl9hdXRvRml4WX0pLnJlcGFpbnQoKTtcblx0XHRcdFx0XHR0b2dnbGVGaXhlZENoaWxkUGFuZWxzKGZhbHNlLCBwYW5lbC5fYXV0b0ZpeFkgLSBzY3JvbGxZKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFJlbW92ZShhZGQsIGN0cmwpIHtcblx0XHR2YXIgaSwgekluZGV4ID0gRmxvYXRQYW5lbC56SW5kZXggfHwgMHhGRkZGLCB0b3BNb2RhbDtcblxuXHRcdGlmIChhZGQpIHtcblx0XHRcdHpPcmRlci5wdXNoKGN0cmwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpID0gek9yZGVyLmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRpZiAoek9yZGVyW2ldID09PSBjdHJsKSB7XG5cdFx0XHRcdFx0ek9yZGVyLnNwbGljZShpLCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh6T3JkZXIubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgek9yZGVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh6T3JkZXJbaV0ubW9kYWwpIHtcblx0XHRcdFx0XHR6SW5kZXgrKztcblx0XHRcdFx0XHR0b3BNb2RhbCA9IHpPcmRlcltpXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHpPcmRlcltpXS5nZXRFbCgpLnN0eWxlLnpJbmRleCA9IHpJbmRleDtcblx0XHRcdFx0ek9yZGVyW2ldLnpJbmRleCA9IHpJbmRleDtcblx0XHRcdFx0ekluZGV4Kys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIG1vZGFsQmxvY2tFbCA9ICQoJyMnICsgY3RybC5jbGFzc1ByZWZpeCArICdtb2RhbC1ibG9jaycsIGN0cmwuZ2V0Q29udGFpbmVyRWxtKCkpWzBdO1xuXG5cdFx0aWYgKHRvcE1vZGFsKSB7XG5cdFx0XHQkKG1vZGFsQmxvY2tFbCkuY3NzKCd6LWluZGV4JywgdG9wTW9kYWwuekluZGV4IC0gMSk7XG5cdFx0fSBlbHNlIGlmIChtb2RhbEJsb2NrRWwpIHtcblx0XHRcdG1vZGFsQmxvY2tFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG1vZGFsQmxvY2tFbCk7XG5cdFx0XHRoYXNNb2RhbCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdEZsb2F0UGFuZWwuY3VycmVudFpJbmRleCA9IHpJbmRleDtcblx0fVxuXG5cdHZhciBGbG9hdFBhbmVsID0gUGFuZWwuZXh0ZW5kKHtcblx0XHRNaXhpbnM6IFtNb3ZhYmxlLCBSZXNpemFibGVdLFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIG5ldyBjb250cm9sIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqIEBzZXR0aW5nIHtCb29sZWFufSBhdXRvaGlkZSBBdXRvbWF0aWNhbGx5IGhpZGUgdGhlIHBhbmVsLlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuX3N1cGVyKHNldHRpbmdzKTtcblx0XHRcdHNlbGYuX2V2ZW50c1Jvb3QgPSBzZWxmO1xuXG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdmbG9hdHBhbmVsJyk7XG5cblx0XHRcdC8vIEhpZGUgZmxvYXRwYW5lcyBvbiBjbGljayBvdXQgc2lkZSB0aGUgcm9vdCBidXR0b25cblx0XHRcdGlmIChzZXR0aW5ncy5hdXRvaGlkZSkge1xuXHRcdFx0XHRiaW5kRG9jdW1lbnRDbGlja0hhbmRsZXIoKTtcblx0XHRcdFx0YmluZFdpbmRvd1Jlc2l6ZUhhbmRsZXIoKTtcblx0XHRcdFx0dmlzaWJsZVBhbmVscy5wdXNoKHNlbGYpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3MuYXV0b2ZpeCkge1xuXHRcdFx0XHRiaW5kRG9jdW1lbnRTY3JvbGxIYW5kbGVyKCk7XG5cblx0XHRcdFx0c2VsZi5vbignbW92ZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJlcG9zaXRpb25QYW5lbCh0aGlzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYub24oJ3Bvc3RyZW5kZXIgc2hvdycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKGUuY29udHJvbCA9PSBzZWxmKSB7XG5cdFx0XHRcdFx0dmFyICRtb2RhbEJsb2NrRWwsIHByZWZpeCA9IHNlbGYuY2xhc3NQcmVmaXg7XG5cblx0XHRcdFx0XHRpZiAoc2VsZi5tb2RhbCAmJiAhaGFzTW9kYWwpIHtcblx0XHRcdFx0XHRcdCRtb2RhbEJsb2NrRWwgPSAkKCcjJyArIHByZWZpeCArICdtb2RhbC1ibG9jaycsIHNlbGYuZ2V0Q29udGFpbmVyRWxtKCkpO1xuXHRcdFx0XHRcdFx0aWYgKCEkbW9kYWxCbG9ja0VsWzBdKSB7XG5cdFx0XHRcdFx0XHRcdCRtb2RhbEJsb2NrRWwgPSAkKFxuXHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHByZWZpeCArICdtb2RhbC1ibG9ja1wiIGNsYXNzPVwiJyArIHByZWZpeCArICdyZXNldCAnICsgcHJlZml4ICsgJ2ZhZGVcIj48L2Rpdj4nXG5cdFx0XHRcdFx0XHRcdCkuYXBwZW5kVG8oc2VsZi5nZXRDb250YWluZXJFbG0oKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdERlbGF5LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdCRtb2RhbEJsb2NrRWwuYWRkQ2xhc3MocHJlZml4ICsgJ2luJyk7XG5cdFx0XHRcdFx0XHRcdCQoc2VsZi5nZXRFbCgpKS5hZGRDbGFzcyhwcmVmaXggKyAnaW4nKTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRoYXNNb2RhbCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YWRkUmVtb3ZlKHRydWUsIHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5vbignc2hvdycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0XHRpZiAoY3RybC5zdGF0ZS5nZXQoJ2ZpeGVkJykpIHtcblx0XHRcdFx0XHRcdHNlbGYuZml4ZWQodHJ1ZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MucG9wb3Zlcikge1xuXHRcdFx0XHRzZWxmLl9wcmVCb2R5SHRtbCA9ICc8ZGl2IGNsYXNzPVwiJyArIHNlbGYuY2xhc3NQcmVmaXggKyAnYXJyb3dcIj48L2Rpdj4nO1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdwb3BvdmVyJykuYWRkKCdib3R0b20nKS5hZGQoc2VsZi5pc1J0bCgpID8gJ2VuZCcgOiAnc3RhcnQnKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5hcmlhKCdsYWJlbCcsIHNldHRpbmdzLmFyaWFMYWJlbCk7XG5cdFx0XHRzZWxmLmFyaWEoJ2xhYmVsbGVkYnknLCBzZWxmLl9pZCk7XG5cdFx0XHRzZWxmLmFyaWEoJ2Rlc2NyaWJlZGJ5Jywgc2VsZi5kZXNjcmliZWRCeSB8fCBzZWxmLl9pZCArICctbm9uZScpO1xuXHRcdH0sXG5cblx0XHRmaXhlZDogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKHNlbGYuc3RhdGUuZ2V0KCdmaXhlZCcpICE9IHN0YXRlKSB7XG5cdFx0XHRcdGlmIChzZWxmLnN0YXRlLmdldCgncmVuZGVyZWQnKSkge1xuXHRcdFx0XHRcdHZhciB2aWV3cG9ydCA9IERvbVV0aWxzLmdldFZpZXdQb3J0KCk7XG5cblx0XHRcdFx0XHRpZiAoc3RhdGUpIHtcblx0XHRcdFx0XHRcdHNlbGYubGF5b3V0UmVjdCgpLnkgLT0gdmlld3BvcnQueTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5sYXlvdXRSZWN0KCkueSArPSB2aWV3cG9ydC55O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy50b2dnbGUoJ2ZpeGVkJywgc3RhdGUpO1xuXHRcdFx0XHRzZWxmLnN0YXRlLnNldCgnZml4ZWQnLCBzdGF0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTaG93cyB0aGUgY3VycmVudCBmbG9hdCBwYW5lbC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2hvd1xuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuRmxvYXRQYW5lbH0gQ3VycmVudCBmbG9hdHBhbmVsIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBpLCBzdGF0ZSA9IHNlbGYuX3N1cGVyKCk7XG5cblx0XHRcdGkgPSB2aXNpYmxlUGFuZWxzLmxlbmd0aDtcblx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0aWYgKHZpc2libGVQYW5lbHNbaV0gPT09IHNlbGYpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaSA9PT0gLTEpIHtcblx0XHRcdFx0dmlzaWJsZVBhbmVscy5wdXNoKHNlbGYpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEhpZGVzIHRoZSBjdXJyZW50IGZsb2F0IHBhbmVsLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBoaWRlXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5GbG9hdFBhbmVsfSBDdXJyZW50IGZsb2F0cGFuZWwgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZW1vdmVWaXNpYmxlUGFuZWwodGhpcyk7XG5cdFx0XHRhZGRSZW1vdmUoZmFsc2UsIHRoaXMpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSGlkZSBhbGwgdmlzaWJsZSBmbG9hdCBwYW5lbHMgd2l0aCBoZSBhdXRvaGlkZSBzZXR0aW5nIGVuYWJsZWQuIFRoaXMgaXMgZm9yXG5cdFx0ICogbWFudWFsbHkgaGlkaW5nIGZsb2F0aW5nIG1lbnVzIG9yIHBhbmVscy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaGlkZUFsbFxuXHRcdCAqL1xuXHRcdGhpZGVBbGw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0RmxvYXRQYW5lbC5oaWRlQWxsKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENsb3NlcyB0aGUgZmxvYXQgcGFuZWwuIFRoaXMgd2lsbCByZW1vdmUgdGhlIGZsb2F0IHBhbmVsIGZyb20gcGFnZSBhbmQgZmlyZSB0aGUgY2xvc2UgZXZlbnQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNsb3NlXG5cdFx0ICovXG5cdFx0Y2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRpZiAoIXNlbGYuZmlyZSgnY2xvc2UnKS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuXHRcdFx0XHRzZWxmLnJlbW92ZSgpO1xuXHRcdFx0XHRhZGRSZW1vdmUoZmFsc2UsIHNlbGYpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyB0aGUgZmxvYXQgcGFuZWwgZnJvbSBwYWdlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW1vdmVcblx0XHQgKi9cblx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVtb3ZlVmlzaWJsZVBhbmVsKHRoaXMpO1xuXHRcdFx0dGhpcy5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGlmIChzZWxmLnNldHRpbmdzLmJvZHlSb2xlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RWwoJ2JvZHknKS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCBzZWxmLnNldHRpbmdzLmJvZHlSb2xlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fVxuXHR9KTtcblxuXHQvKipcblx0ICogSGlkZSBhbGwgdmlzaWJsZSBmbG9hdCBwYW5lbHMgd2l0aCBoZSBhdXRvaGlkZSBzZXR0aW5nIGVuYWJsZWQuIFRoaXMgaXMgZm9yXG5cdCAqIG1hbnVhbGx5IGhpZGluZyBmbG9hdGluZyBtZW51cyBvciBwYW5lbHMuXG5cdCAqXG5cdCAqIEBzdGF0aWNcblx0ICogQG1ldGhvZCBoaWRlQWxsXG5cdCAqL1xuXHRGbG9hdFBhbmVsLmhpZGVBbGwgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgaSA9IHZpc2libGVQYW5lbHMubGVuZ3RoO1xuXG5cdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0dmFyIHBhbmVsID0gdmlzaWJsZVBhbmVsc1tpXTtcblxuXHRcdFx0aWYgKHBhbmVsICYmIHBhbmVsLnNldHRpbmdzLmF1dG9oaWRlKSB7XG5cdFx0XHRcdHBhbmVsLmhpZGUoKTtcblx0XHRcdFx0dmlzaWJsZVBhbmVscy5zcGxpY2UoaSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIHJlbW92ZVZpc2libGVQYW5lbChwYW5lbCkge1xuXHRcdHZhciBpO1xuXG5cdFx0aSA9IHZpc2libGVQYW5lbHMubGVuZ3RoO1xuXHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdGlmICh2aXNpYmxlUGFuZWxzW2ldID09PSBwYW5lbCkge1xuXHRcdFx0XHR2aXNpYmxlUGFuZWxzLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpID0gek9yZGVyLmxlbmd0aDtcblx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRpZiAoek9yZGVyW2ldID09PSBwYW5lbCkge1xuXHRcdFx0XHR6T3JkZXIuc3BsaWNlKGksIDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBGbG9hdFBhbmVsO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9XaW5kb3cuanNcblxuLyoqXG4gKiBXaW5kb3cuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHdpbmRvdy5cbiAqXG4gKiBALXgtbGVzcyBXaW5kb3cubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuV2luZG93XG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkZsb2F0UGFuZWxcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9XaW5kb3dcIiwgW1xuXHRcInRpbnltY2UvdWkvRmxvYXRQYW5lbFwiLFxuXHRcInRpbnltY2UvdWkvUGFuZWxcIixcblx0XCJ0aW55bWNlL3VpL0RvbVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vRG9tUXVlcnlcIixcblx0XCJ0aW55bWNlL3VpL0RyYWdIZWxwZXJcIixcblx0XCJ0aW55bWNlL3VpL0JveFV0aWxzXCIsXG5cdFwidGlueW1jZS9FbnZcIixcblx0XCJ0aW55bWNlL3V0aWwvRGVsYXlcIlxuXSwgZnVuY3Rpb24oRmxvYXRQYW5lbCwgUGFuZWwsIERvbVV0aWxzLCAkLCBEcmFnSGVscGVyLCBCb3hVdGlscywgRW52LCBEZWxheSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgd2luZG93cyA9IFtdLCBvbGRNZXRhVmFsdWUgPSAnJztcblxuXHRmdW5jdGlvbiB0b2dnbGVGdWxsU2NyZWVuU3RhdGUoc3RhdGUpIHtcblx0XHR2YXIgbm9TY2FsZU1ldGFWYWx1ZSA9ICd3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLjAsdXNlci1zY2FsYWJsZT0wLG1pbmltdW0tc2NhbGU9MS4wLG1heGltdW0tc2NhbGU9MS4wJyxcblx0XHRcdHZpZXdwb3J0ID0gJChcIm1ldGFbbmFtZT12aWV3cG9ydF1cIilbMF0sXG5cdFx0XHRjb250ZW50VmFsdWU7XG5cblx0XHRpZiAoRW52Lm92ZXJyaWRlVmlld1BvcnQgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCF2aWV3cG9ydCkge1xuXHRcdFx0dmlld3BvcnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtZXRhJyk7XG5cdFx0XHR2aWV3cG9ydC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAndmlld3BvcnQnKTtcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQodmlld3BvcnQpO1xuXHRcdH1cblxuXHRcdGNvbnRlbnRWYWx1ZSA9IHZpZXdwb3J0LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuXHRcdGlmIChjb250ZW50VmFsdWUgJiYgdHlwZW9mIG9sZE1ldGFWYWx1ZSAhPSAndW5kZWZpbmVkJykge1xuXHRcdFx0b2xkTWV0YVZhbHVlID0gY29udGVudFZhbHVlO1xuXHRcdH1cblxuXHRcdHZpZXdwb3J0LnNldEF0dHJpYnV0ZSgnY29udGVudCcsIHN0YXRlID8gbm9TY2FsZU1ldGFWYWx1ZSA6IG9sZE1ldGFWYWx1ZSk7XG5cdH1cblxuXHRmdW5jdGlvbiB0b2dnbGVCb2R5RnVsbFNjcmVlbkNsYXNzZXMoY2xhc3NQcmVmaXgsIHN0YXRlKSB7XG5cdFx0aWYgKGNoZWNrRnVsbHNjcmVlbldpbmRvd3MoKSAmJiBzdGF0ZSA9PT0gZmFsc2UpIHtcblx0XHRcdCQoW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZG9jdW1lbnQuYm9keV0pLnJlbW92ZUNsYXNzKGNsYXNzUHJlZml4ICsgJ2Z1bGxzY3JlZW4nKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjaGVja0Z1bGxzY3JlZW5XaW5kb3dzKCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgd2luZG93cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHdpbmRvd3NbaV0uX2Z1bGxzY3JlZW4pIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGhhbmRsZVdpbmRvd1Jlc2l6ZSgpIHtcblx0XHRpZiAoIUVudi5kZXNrdG9wKSB7XG5cdFx0XHR2YXIgbGFzdFNpemUgPSB7XG5cdFx0XHRcdHc6IHdpbmRvdy5pbm5lcldpZHRoLFxuXHRcdFx0XHRoOiB3aW5kb3cuaW5uZXJIZWlnaHRcblx0XHRcdH07XG5cblx0XHRcdERlbGF5LnNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgdyA9IHdpbmRvdy5pbm5lcldpZHRoLFxuXHRcdFx0XHRcdGggPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cblx0XHRcdFx0aWYgKGxhc3RTaXplLncgIT0gdyB8fCBsYXN0U2l6ZS5oICE9IGgpIHtcblx0XHRcdFx0XHRsYXN0U2l6ZSA9IHtcblx0XHRcdFx0XHRcdHc6IHcsXG5cdFx0XHRcdFx0XHRoOiBoXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdCQod2luZG93KS50cmlnZ2VyKCdyZXNpemUnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZXBvc2l0aW9uKCkge1xuXHRcdFx0dmFyIGksIHJlY3QgPSBEb21VdGlscy5nZXRXaW5kb3dTaXplKCksIGxheW91dFJlY3Q7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCB3aW5kb3dzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxheW91dFJlY3QgPSB3aW5kb3dzW2ldLmxheW91dFJlY3QoKTtcblxuXHRcdFx0XHR3aW5kb3dzW2ldLm1vdmVUbyhcblx0XHRcdFx0XHR3aW5kb3dzW2ldLnNldHRpbmdzLnggfHwgTWF0aC5tYXgoMCwgcmVjdC53IC8gMiAtIGxheW91dFJlY3QudyAvIDIpLFxuXHRcdFx0XHRcdHdpbmRvd3NbaV0uc2V0dGluZ3MueSB8fCBNYXRoLm1heCgwLCByZWN0LmggLyAyIC0gbGF5b3V0UmVjdC5oIC8gMilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQkKHdpbmRvdykub24oJ3Jlc2l6ZScsIHJlcG9zaXRpb24pO1xuXHR9XG5cblx0dmFyIFdpbmRvdyA9IEZsb2F0UGFuZWwuZXh0ZW5kKHtcblx0XHRtb2RhbDogdHJ1ZSxcblxuXHRcdERlZmF1bHRzOiB7XG5cdFx0XHRib3JkZXI6IDEsXG5cdFx0XHRsYXlvdXQ6ICdmbGV4Jyxcblx0XHRcdGNvbnRhaW5lckNsczogJ3BhbmVsJyxcblx0XHRcdHJvbGU6ICdkaWFsb2cnLFxuXHRcdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHRcdHN1Ym1pdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dGhpcy5maXJlKCdzdWJtaXQnLCB7ZGF0YTogdGhpcy50b0pTT04oKX0pO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdGNsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuX3N1cGVyKHNldHRpbmdzKTtcblxuXHRcdFx0aWYgKHNlbGYuaXNSdGwoKSkge1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdydGwnKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnd2luZG93Jyk7XG5cdFx0XHRzZWxmLmJvZHlDbGFzc2VzLmFkZCgnd2luZG93LWJvZHknKTtcblx0XHRcdHNlbGYuc3RhdGUuc2V0KCdmaXhlZCcsIHRydWUpO1xuXG5cdFx0XHQvLyBDcmVhdGUgc3RhdHVzYmFyXG5cdFx0XHRpZiAoc2V0dGluZ3MuYnV0dG9ucykge1xuXHRcdFx0XHRzZWxmLnN0YXR1c2JhciA9IG5ldyBQYW5lbCh7XG5cdFx0XHRcdFx0bGF5b3V0OiAnZmxleCcsXG5cdFx0XHRcdFx0Ym9yZGVyOiAnMSAwIDAgMCcsXG5cdFx0XHRcdFx0c3BhY2luZzogMyxcblx0XHRcdFx0XHRwYWRkaW5nOiAxMCxcblx0XHRcdFx0XHRhbGlnbjogJ2NlbnRlcicsXG5cdFx0XHRcdFx0cGFjazogc2VsZi5pc1J0bCgpID8gJ3N0YXJ0JyA6ICdlbmQnLFxuXHRcdFx0XHRcdGRlZmF1bHRzOiB7XG5cdFx0XHRcdFx0XHR0eXBlOiAnYnV0dG9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0aXRlbXM6IHNldHRpbmdzLmJ1dHRvbnNcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2VsZi5zdGF0dXNiYXIuY2xhc3Nlcy5hZGQoJ2Zvb3QnKTtcblx0XHRcdFx0c2VsZi5zdGF0dXNiYXIucGFyZW50KHNlbGYpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGNsb3NlQ2xhc3MgPSBzZWxmLmNsYXNzUHJlZml4ICsgJ2Nsb3NlJztcblxuXHRcdFx0XHRpZiAoRG9tVXRpbHMuaGFzQ2xhc3MoZS50YXJnZXQsIGNsb3NlQ2xhc3MpIHx8IERvbVV0aWxzLmhhc0NsYXNzKGUudGFyZ2V0LnBhcmVudE5vZGUsIGNsb3NlQ2xhc3MpKSB7XG5cdFx0XHRcdFx0c2VsZi5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5vbignY2FuY2VsJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuY2xvc2UoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLmFyaWEoJ2Rlc2NyaWJlZGJ5Jywgc2VsZi5kZXNjcmliZWRCeSB8fCBzZWxmLl9pZCArICctbm9uZScpO1xuXHRcdFx0c2VsZi5hcmlhKCdsYWJlbCcsIHNldHRpbmdzLnRpdGxlKTtcblx0XHRcdHNlbGYuX2Z1bGxzY3JlZW4gPSBmYWxzZTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVjYWxjdWxhdGVzIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGNvbnRyb2xzIGluIHRoZSBjdXJyZW50IGNvbnRhaW5lci5cblx0XHQgKiBUaGlzIGlzIGludm9rZWQgYnkgdGhlIHJlZmxvdyBtZXRob2QgYW5kIHNob3VsZG4ndCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlY2FsY1xuXHRcdCAqL1xuXHRcdHJlY2FsYzogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHN0YXR1c2JhciA9IHNlbGYuc3RhdHVzYmFyLCBsYXlvdXRSZWN0LCB3aWR0aCwgeCwgbmVlZHNSZWNhbGM7XG5cblx0XHRcdGlmIChzZWxmLl9mdWxsc2NyZWVuKSB7XG5cdFx0XHRcdHNlbGYubGF5b3V0UmVjdChEb21VdGlscy5nZXRXaW5kb3dTaXplKCkpO1xuXHRcdFx0XHRzZWxmLmxheW91dFJlY3QoKS5jb250ZW50SCA9IHNlbGYubGF5b3V0UmVjdCgpLmlubmVySDtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0bGF5b3V0UmVjdCA9IHNlbGYubGF5b3V0UmVjdCgpO1xuXG5cdFx0XHQvLyBSZXNpemUgd2luZG93IGJhc2VkIG9uIHRpdGxlIHdpZHRoXG5cdFx0XHRpZiAoc2VsZi5zZXR0aW5ncy50aXRsZSAmJiAhc2VsZi5fZnVsbHNjcmVlbikge1xuXHRcdFx0XHR3aWR0aCA9IGxheW91dFJlY3QuaGVhZGVyVztcblx0XHRcdFx0aWYgKHdpZHRoID4gbGF5b3V0UmVjdC53KSB7XG5cdFx0XHRcdFx0eCA9IGxheW91dFJlY3QueCAtIE1hdGgubWF4KDAsIHdpZHRoIC8gMik7XG5cdFx0XHRcdFx0c2VsZi5sYXlvdXRSZWN0KHt3OiB3aWR0aCwgeDogeH0pO1xuXHRcdFx0XHRcdG5lZWRzUmVjYWxjID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNpemUgd2luZG93IGJhc2VkIG9uIHN0YXR1c2JhciB3aWR0aFxuXHRcdFx0aWYgKHN0YXR1c2Jhcikge1xuXHRcdFx0XHRzdGF0dXNiYXIubGF5b3V0UmVjdCh7dzogc2VsZi5sYXlvdXRSZWN0KCkuaW5uZXJXfSkucmVjYWxjKCk7XG5cblx0XHRcdFx0d2lkdGggPSBzdGF0dXNiYXIubGF5b3V0UmVjdCgpLm1pblcgKyBsYXlvdXRSZWN0LmRlbHRhVztcblx0XHRcdFx0aWYgKHdpZHRoID4gbGF5b3V0UmVjdC53KSB7XG5cdFx0XHRcdFx0eCA9IGxheW91dFJlY3QueCAtIE1hdGgubWF4KDAsIHdpZHRoIC0gbGF5b3V0UmVjdC53KTtcblx0XHRcdFx0XHRzZWxmLmxheW91dFJlY3Qoe3c6IHdpZHRoLCB4OiB4fSk7XG5cdFx0XHRcdFx0bmVlZHNSZWNhbGMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlY2FsYyBib2R5IGFuZCBkaXNhYmxlIGF1dG8gcmVzaXplXG5cdFx0XHRpZiAobmVlZHNSZWNhbGMpIHtcblx0XHRcdFx0c2VsZi5yZWNhbGMoKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW5pdGlhbGl6ZXMgdGhlIGN1cnJlbnQgY29udHJvbHMgbGF5b3V0IHJlY3QuXG5cdFx0ICogVGhpcyB3aWxsIGJlIGV4ZWN1dGVkIGJ5IHRoZSBsYXlvdXQgbWFuYWdlcnMgdG8gZGV0ZXJtaW5lIHRoZVxuXHRcdCAqIGRlZmF1bHQgbWluV2lkdGgvbWluSGVpZ2h0IGV0Yy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaW5pdExheW91dFJlY3Rcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IExheW91dCByZWN0IGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGluaXRMYXlvdXRSZWN0OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbGF5b3V0UmVjdCA9IHNlbGYuX3N1cGVyKCksIGRlbHRhSCA9IDAsIGhlYWRFbDtcblxuXHRcdFx0Ly8gUmVzZXJ2ZSB2ZXJ0aWNhbCBzcGFjZSBmb3IgdGl0bGVcblx0XHRcdGlmIChzZWxmLnNldHRpbmdzLnRpdGxlICYmICFzZWxmLl9mdWxsc2NyZWVuKSB7XG5cdFx0XHRcdGhlYWRFbCA9IHNlbGYuZ2V0RWwoJ2hlYWQnKTtcblxuXHRcdFx0XHR2YXIgc2l6ZSA9IERvbVV0aWxzLmdldFNpemUoaGVhZEVsKTtcblxuXHRcdFx0XHRsYXlvdXRSZWN0LmhlYWRlclcgPSBzaXplLndpZHRoO1xuXHRcdFx0XHRsYXlvdXRSZWN0LmhlYWRlckggPSBzaXplLmhlaWdodDtcblxuXHRcdFx0XHRkZWx0YUggKz0gbGF5b3V0UmVjdC5oZWFkZXJIO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNlcnZlIHZlcnRpY2FsIHNwYWNlIGZvciBzdGF0dXNiYXJcblx0XHRcdGlmIChzZWxmLnN0YXR1c2Jhcikge1xuXHRcdFx0XHRkZWx0YUggKz0gc2VsZi5zdGF0dXNiYXIubGF5b3V0UmVjdCgpLmg7XG5cdFx0XHR9XG5cblx0XHRcdGxheW91dFJlY3QuZGVsdGFIICs9IGRlbHRhSDtcblx0XHRcdGxheW91dFJlY3QubWluSCArPSBkZWx0YUg7XG5cdFx0XHQvL2xheW91dFJlY3QuaW5uZXJIIC09IGRlbHRhSDtcblx0XHRcdGxheW91dFJlY3QuaCArPSBkZWx0YUg7XG5cblx0XHRcdHZhciByZWN0ID0gRG9tVXRpbHMuZ2V0V2luZG93U2l6ZSgpO1xuXG5cdFx0XHRsYXlvdXRSZWN0LnggPSBzZWxmLnNldHRpbmdzLnggfHwgTWF0aC5tYXgoMCwgcmVjdC53IC8gMiAtIGxheW91dFJlY3QudyAvIDIpO1xuXHRcdFx0bGF5b3V0UmVjdC55ID0gc2VsZi5zZXR0aW5ncy55IHx8IE1hdGgubWF4KDAsIHJlY3QuaCAvIDIgLSBsYXlvdXRSZWN0LmggLyAyKTtcblxuXHRcdFx0cmV0dXJuIGxheW91dFJlY3Q7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGxheW91dCA9IHNlbGYuX2xheW91dCwgaWQgPSBzZWxmLl9pZCwgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeDtcblx0XHRcdHZhciBzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3MsIGhlYWRlckh0bWwgPSAnJywgZm9vdGVySHRtbCA9ICcnLCBodG1sID0gc2V0dGluZ3MuaHRtbDtcblxuXHRcdFx0c2VsZi5wcmVSZW5kZXIoKTtcblx0XHRcdGxheW91dC5wcmVSZW5kZXIoc2VsZik7XG5cblx0XHRcdGlmIChzZXR0aW5ncy50aXRsZSkge1xuXHRcdFx0XHRoZWFkZXJIdG1sID0gKFxuXHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJy1oZWFkXCIgY2xhc3M9XCInICsgcHJlZml4ICsgJ3dpbmRvdy1oZWFkXCI+JyArXG5cdFx0XHRcdFx0XHQnPGRpdiBpZD1cIicgKyBpZCArICctdGl0bGVcIiBjbGFzcz1cIicgKyBwcmVmaXggKyAndGl0bGVcIj4nICsgc2VsZi5lbmNvZGUoc2V0dGluZ3MudGl0bGUpICsgJzwvZGl2PicgK1xuXHRcdFx0XHRcdFx0JzxkaXYgaWQ9XCInICsgaWQgKyAnLWRyYWdoXCIgY2xhc3M9XCInICsgcHJlZml4ICsgJ2RyYWdoXCI+PC9kaXY+JyArXG5cdFx0XHRcdFx0XHQnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCInICsgcHJlZml4ICsgJ2Nsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+JyArXG5cdFx0XHRcdFx0XHRcdCc8aSBjbGFzcz1cIm1jZS1pY28gbWNlLWktcmVtb3ZlXCI+PC9pPicgK1xuXHRcdFx0XHRcdFx0JzwvYnV0dG9uPicgK1xuXHRcdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy51cmwpIHtcblx0XHRcdFx0aHRtbCA9ICc8aWZyYW1lIHNyYz1cIicgKyBzZXR0aW5ncy51cmwgKyAnXCIgdGFiaW5kZXg9XCItMVwiPjwvaWZyYW1lPic7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgaHRtbCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdGh0bWwgPSBsYXlvdXQucmVuZGVySHRtbChzZWxmKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbGYuc3RhdHVzYmFyKSB7XG5cdFx0XHRcdGZvb3Rlckh0bWwgPSBzZWxmLnN0YXR1c2Jhci5yZW5kZXJIdG1sKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIiBoaWRlZm9jdXM9XCIxXCI+JyArXG5cdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCInICsgc2VsZi5jbGFzc1ByZWZpeCArICdyZXNldFwiIHJvbGU9XCJhcHBsaWNhdGlvblwiPicgK1xuXHRcdFx0XHRcdFx0aGVhZGVySHRtbCArXG5cdFx0XHRcdFx0XHQnPGRpdiBpZD1cIicgKyBpZCArICctYm9keVwiIGNsYXNzPVwiJyArIHNlbGYuYm9keUNsYXNzZXMgKyAnXCI+JyArXG5cdFx0XHRcdFx0XHRcdGh0bWwgK1xuXHRcdFx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0XHRcdFx0Zm9vdGVySHRtbCArXG5cdFx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU3dpdGNoZXMgdGhlIHdpbmRvdyBmdWxsc2NyZWVuIG1vZGUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGZ1bGxzY3JlZW5cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHN0YXRlIFRydWUvZmFsc2Ugc3RhdGUuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5XaW5kb3d9IEN1cnJlbnQgd2luZG93IGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGZ1bGxzY3JlZW46IGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgc2xvd1JlbmRlcmluZywgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeCwgbGF5b3V0UmVjdDtcblxuXHRcdFx0aWYgKHN0YXRlICE9IHNlbGYuX2Z1bGxzY3JlZW4pIHtcblx0XHRcdFx0JCh3aW5kb3cpLm9uKCdyZXNpemUnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgdGltZTtcblxuXHRcdFx0XHRcdGlmIChzZWxmLl9mdWxsc2NyZWVuKSB7XG5cdFx0XHRcdFx0XHQvLyBUaW1lIHRoZSBsYXlvdXQgdGltZSBpZiBpdCdzIHRvIHNsb3cgdXNlIGEgdGltZW91dCB0byBub3QgaG9nIHRoZSBDUFVcblx0XHRcdFx0XHRcdGlmICghc2xvd1JlbmRlcmluZykge1xuXHRcdFx0XHRcdFx0XHR0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cblx0XHRcdFx0XHRcdFx0dmFyIHJlY3QgPSBEb21VdGlscy5nZXRXaW5kb3dTaXplKCk7XG5cdFx0XHRcdFx0XHRcdHNlbGYubW92ZVRvKDAsIDApLnJlc2l6ZVRvKHJlY3QudywgcmVjdC5oKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSAtIHRpbWUgPiA1MCkge1xuXHRcdFx0XHRcdFx0XHRcdHNsb3dSZW5kZXJpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXNlbGYuX3RpbWVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZi5fdGltZXIgPSBEZWxheS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlY3QgPSBEb21VdGlscy5nZXRXaW5kb3dTaXplKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxmLm1vdmVUbygwLCAwKS5yZXNpemVUbyhyZWN0LncsIHJlY3QuaCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHNlbGYuX3RpbWVyID0gMDtcblx0XHRcdFx0XHRcdFx0XHR9LCA1MCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxheW91dFJlY3QgPSBzZWxmLmxheW91dFJlY3QoKTtcblx0XHRcdFx0c2VsZi5fZnVsbHNjcmVlbiA9IHN0YXRlO1xuXG5cdFx0XHRcdGlmICghc3RhdGUpIHtcblx0XHRcdFx0XHRzZWxmLmJvcmRlckJveCA9IEJveFV0aWxzLnBhcnNlQm94KHNlbGYuc2V0dGluZ3MuYm9yZGVyKTtcblx0XHRcdFx0XHRzZWxmLmdldEVsKCdoZWFkJykuc3R5bGUuZGlzcGxheSA9ICcnO1xuXHRcdFx0XHRcdGxheW91dFJlY3QuZGVsdGFIICs9IGxheW91dFJlY3QuaGVhZGVySDtcblx0XHRcdFx0XHQkKFtkb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHldKS5yZW1vdmVDbGFzcyhwcmVmaXggKyAnZnVsbHNjcmVlbicpO1xuXHRcdFx0XHRcdHNlbGYuY2xhc3Nlcy5yZW1vdmUoJ2Z1bGxzY3JlZW4nKTtcblx0XHRcdFx0XHRzZWxmLm1vdmVUbyhzZWxmLl9pbml0aWFsLngsIHNlbGYuX2luaXRpYWwueSkucmVzaXplVG8oc2VsZi5faW5pdGlhbC53LCBzZWxmLl9pbml0aWFsLmgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGYuX2luaXRpYWwgPSB7eDogbGF5b3V0UmVjdC54LCB5OiBsYXlvdXRSZWN0LnksIHc6IGxheW91dFJlY3QudywgaDogbGF5b3V0UmVjdC5ofTtcblxuXHRcdFx0XHRcdHNlbGYuYm9yZGVyQm94ID0gQm94VXRpbHMucGFyc2VCb3goJzAnKTtcblx0XHRcdFx0XHRzZWxmLmdldEVsKCdoZWFkJykuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0XHRsYXlvdXRSZWN0LmRlbHRhSCAtPSBsYXlvdXRSZWN0LmhlYWRlckggKyAyO1xuXHRcdFx0XHRcdCQoW2RvY3VtZW50RWxlbWVudCwgZG9jdW1lbnQuYm9keV0pLmFkZENsYXNzKHByZWZpeCArICdmdWxsc2NyZWVuJyk7XG5cdFx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnZnVsbHNjcmVlbicpO1xuXG5cdFx0XHRcdFx0dmFyIHJlY3QgPSBEb21VdGlscy5nZXRXaW5kb3dTaXplKCk7XG5cdFx0XHRcdFx0c2VsZi5tb3ZlVG8oMCwgMCkucmVzaXplVG8ocmVjdC53LCByZWN0LmgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmLnJlZmxvdygpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmVuZGVyZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBvc3RSZW5kZXJcblx0XHQgKi9cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc3RhcnRQb3M7XG5cblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ2luJyk7XG5cdFx0XHRcdHNlbGYuZmlyZSgnb3BlbicpO1xuXHRcdFx0fSwgMCk7XG5cblx0XHRcdHNlbGYuX3N1cGVyKCk7XG5cblx0XHRcdGlmIChzZWxmLnN0YXR1c2Jhcikge1xuXHRcdFx0XHRzZWxmLnN0YXR1c2Jhci5wb3N0UmVuZGVyKCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuZm9jdXMoKTtcblxuXHRcdFx0dGhpcy5kcmFnSGVscGVyID0gbmV3IERyYWdIZWxwZXIoc2VsZi5faWQgKyAnLWRyYWdoJywge1xuXHRcdFx0XHRzdGFydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c3RhcnRQb3MgPSB7XG5cdFx0XHRcdFx0XHR4OiBzZWxmLmxheW91dFJlY3QoKS54LFxuXHRcdFx0XHRcdFx0eTogc2VsZi5sYXlvdXRSZWN0KCkueVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0ZHJhZzogZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdHNlbGYubW92ZVRvKHN0YXJ0UG9zLnggKyBlLmRlbHRhWCwgc3RhcnRQb3MueSArIGUuZGVsdGFZKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub24oJ3N1Ym1pdCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG5cdFx0XHRcdFx0c2VsZi5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0d2luZG93cy5wdXNoKHNlbGYpO1xuXHRcdFx0dG9nZ2xlRnVsbFNjcmVlblN0YXRlKHRydWUpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGaXJlcyBhIHN1Ym1pdCBldmVudCB3aXRoIHRoZSBzZXJpYWxpemVkIGZvcm0uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHN1Ym1pdFxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gRXZlbnQgYXJndW1lbnRzIG9iamVjdC5cblx0XHQgKi9cblx0XHRzdWJtaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmlyZSgnc3VibWl0Jywge2RhdGE6IHRoaXMudG9KU09OKCl9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyB0aGUgY3VycmVudCBjb250cm9sIGZyb20gRE9NIGFuZCBmcm9tIFVJIGNvbGxlY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW1vdmVcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBpO1xuXG5cdFx0XHRzZWxmLmRyYWdIZWxwZXIuZGVzdHJveSgpO1xuXHRcdFx0c2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0aWYgKHNlbGYuc3RhdHVzYmFyKSB7XG5cdFx0XHRcdHRoaXMuc3RhdHVzYmFyLnJlbW92ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0b2dnbGVCb2R5RnVsbFNjcmVlbkNsYXNzZXMoc2VsZi5jbGFzc1ByZWZpeCwgZmFsc2UpO1xuXG5cdFx0XHRpID0gd2luZG93cy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdGlmICh3aW5kb3dzW2ldID09PSBzZWxmKSB7XG5cdFx0XHRcdFx0d2luZG93cy5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dG9nZ2xlRnVsbFNjcmVlblN0YXRlKHdpbmRvd3MubGVuZ3RoID4gMCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGNvbnRlbnRXaW5kb3cgb2JqZWN0IG9mIHRoZSBpZnJhbWUgaWYgaXQgZXhpc3RzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRDb250ZW50V2luZG93XG5cdFx0ICogQHJldHVybiB7V2luZG93fSB3aW5kb3cgb2JqZWN0IG9yIG51bGwuXG5cdFx0ICovXG5cdFx0Z2V0Q29udGVudFdpbmRvdzogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaWZyID0gdGhpcy5nZXRFbCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKVswXTtcblx0XHRcdHJldHVybiBpZnIgPyBpZnIuY29udGVudFdpbmRvdyA6IG51bGw7XG5cdFx0fVxuXHR9KTtcblxuXHRoYW5kbGVXaW5kb3dSZXNpemUoKTtcblxuXHRyZXR1cm4gV2luZG93O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9NZXNzYWdlQm94LmpzXG5cbi8qKlxuICogTWVzc2FnZUJveC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgTWVzc2FnZUJveGVzIGxpa2UgYWxlcnRzL2NvbmZpcm1zIGV0Yy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51aS5NZXNzYWdlQm94XG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkZsb2F0UGFuZWxcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9NZXNzYWdlQm94XCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpbmRvd1wiXG5dLCBmdW5jdGlvbihXaW5kb3cpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIE1lc3NhZ2VCb3ggPSBXaW5kb3cuZXh0ZW5kKHtcblx0XHQvKipcblx0XHQgKiBDb25zdHJ1Y3RzIGEgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNldHRpbmdzLlxuXHRcdCAqXG5cdFx0ICogQGNvbnN0cnVjdG9yXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE5hbWUvdmFsdWUgb2JqZWN0IHdpdGggc2V0dGluZ3MuXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHNldHRpbmdzID0ge1xuXHRcdFx0XHRib3JkZXI6IDEsXG5cdFx0XHRcdHBhZGRpbmc6IDIwLFxuXHRcdFx0XHRsYXlvdXQ6ICdmbGV4Jyxcblx0XHRcdFx0cGFjazogXCJjZW50ZXJcIixcblx0XHRcdFx0YWxpZ246IFwiY2VudGVyXCIsXG5cdFx0XHRcdGNvbnRhaW5lckNsczogJ3BhbmVsJyxcblx0XHRcdFx0YXV0b1Njcm9sbDogdHJ1ZSxcblx0XHRcdFx0YnV0dG9uczoge3R5cGU6IFwiYnV0dG9uXCIsIHRleHQ6IFwiT2tcIiwgYWN0aW9uOiBcIm9rXCJ9LFxuXHRcdFx0XHRpdGVtczoge1xuXHRcdFx0XHRcdHR5cGU6IFwibGFiZWxcIixcblx0XHRcdFx0XHRtdWx0aWxpbmU6IHRydWUsXG5cdFx0XHRcdFx0bWF4V2lkdGg6IDUwMCxcblx0XHRcdFx0XHRtYXhIZWlnaHQ6IDIwMFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLl9zdXBlcihzZXR0aW5ncyk7XG5cdFx0fSxcblxuXHRcdFN0YXRpY3M6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogT2sgYnV0dG9ucyBjb25zdGFudC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAc3RhdGljXG5cdFx0XHQgKiBAZmluYWxcblx0XHRcdCAqIEBmaWVsZCB7TnVtYmVyfSBPS1xuXHRcdFx0ICovXG5cdFx0XHRPSzogMSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBPay9jYW5jZWwgYnV0dG9ucyBjb25zdGFudC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAc3RhdGljXG5cdFx0XHQgKiBAZmluYWxcblx0XHRcdCAqIEBmaWVsZCB7TnVtYmVyfSBPS19DQU5DRUxcblx0XHRcdCAqL1xuXHRcdFx0T0tfQ0FOQ0VMOiAyLFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIHllcy9ubyBidXR0b25zIGNvbnN0YW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBzdGF0aWNcblx0XHRcdCAqIEBmaW5hbFxuXHRcdFx0ICogQGZpZWxkIHtOdW1iZXJ9IFlFU19OT1xuXHRcdFx0ICovXG5cdFx0XHRZRVNfTk86IDMsXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogeWVzL25vL2NhbmNlbCBidXR0b25zIGNvbnN0YW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBzdGF0aWNcblx0XHRcdCAqIEBmaW5hbFxuXHRcdFx0ICogQGZpZWxkIHtOdW1iZXJ9IFlFU19OT19DQU5DRUxcblx0XHRcdCAqL1xuXHRcdFx0WUVTX05PX0NBTkNFTDogNCxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDb25zdHJ1Y3RzIGEgbmV3IG1lc3NhZ2UgYm94IGFuZCByZW5kZXJzIGl0IHRvIHRoZSBib2R5IGVsZW1lbnQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHN0YXRpY1xuXHRcdFx0ICogQG1ldGhvZCBtc2dCb3hcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdFx0ICovXG5cdFx0XHRtc2dCb3g6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHRcdHZhciBidXR0b25zLCBjYWxsYmFjayA9IHNldHRpbmdzLmNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG5cblx0XHRcdFx0ZnVuY3Rpb24gY3JlYXRlQnV0dG9uKHRleHQsIHN0YXR1cywgcHJpbWFyeSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImJ1dHRvblwiLFxuXHRcdFx0XHRcdFx0dGV4dDogdGV4dCxcblx0XHRcdFx0XHRcdHN1YnR5cGU6IHByaW1hcnkgPyAncHJpbWFyeScgOiAnJyxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6IGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRcdFx0ZS5jb250cm9sLnBhcmVudHMoKVsxXS5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayhzdGF0dXMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzd2l0Y2ggKHNldHRpbmdzLmJ1dHRvbnMpIHtcblx0XHRcdFx0XHRjYXNlIE1lc3NhZ2VCb3guT0tfQ0FOQ0VMOlxuXHRcdFx0XHRcdFx0YnV0dG9ucyA9IFtcblx0XHRcdFx0XHRcdFx0Y3JlYXRlQnV0dG9uKCdPaycsIHRydWUsIHRydWUpLFxuXHRcdFx0XHRcdFx0XHRjcmVhdGVCdXR0b24oJ0NhbmNlbCcsIGZhbHNlKVxuXHRcdFx0XHRcdFx0XTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBNZXNzYWdlQm94LllFU19OTzpcblx0XHRcdFx0XHRjYXNlIE1lc3NhZ2VCb3guWUVTX05PX0NBTkNFTDpcblx0XHRcdFx0XHRcdGJ1dHRvbnMgPSBbXG5cdFx0XHRcdFx0XHRcdGNyZWF0ZUJ1dHRvbignWWVzJywgMSwgdHJ1ZSksXG5cdFx0XHRcdFx0XHRcdGNyZWF0ZUJ1dHRvbignTm8nLCAwKVxuXHRcdFx0XHRcdFx0XTtcblxuXHRcdFx0XHRcdFx0aWYgKHNldHRpbmdzLmJ1dHRvbnMgPT0gTWVzc2FnZUJveC5ZRVNfTk9fQ0FOQ0VMKSB7XG5cdFx0XHRcdFx0XHRcdGJ1dHRvbnMucHVzaChjcmVhdGVCdXR0b24oJ0NhbmNlbCcsIC0xKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRidXR0b25zID0gW1xuXHRcdFx0XHRcdFx0XHRjcmVhdGVCdXR0b24oJ09rJywgdHJ1ZSwgdHJ1ZSlcblx0XHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuZXcgV2luZG93KHtcblx0XHRcdFx0XHRwYWRkaW5nOiAyMCxcblx0XHRcdFx0XHR4OiBzZXR0aW5ncy54LFxuXHRcdFx0XHRcdHk6IHNldHRpbmdzLnksXG5cdFx0XHRcdFx0bWluV2lkdGg6IDMwMCxcblx0XHRcdFx0XHRtaW5IZWlnaHQ6IDEwMCxcblx0XHRcdFx0XHRsYXlvdXQ6IFwiZmxleFwiLFxuXHRcdFx0XHRcdHBhY2s6IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0YWxpZ246IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0YnV0dG9uczogYnV0dG9ucyxcblx0XHRcdFx0XHR0aXRsZTogc2V0dGluZ3MudGl0bGUsXG5cdFx0XHRcdFx0cm9sZTogJ2FsZXJ0ZGlhbG9nJyxcblx0XHRcdFx0XHRpdGVtczoge1xuXHRcdFx0XHRcdFx0dHlwZTogXCJsYWJlbFwiLFxuXHRcdFx0XHRcdFx0bXVsdGlsaW5lOiB0cnVlLFxuXHRcdFx0XHRcdFx0bWF4V2lkdGg6IDUwMCxcblx0XHRcdFx0XHRcdG1heEhlaWdodDogMjAwLFxuXHRcdFx0XHRcdFx0dGV4dDogc2V0dGluZ3MudGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b25Qb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHRoaXMuYXJpYSgnZGVzY3JpYmVkYnknLCB0aGlzLml0ZW1zKClbMF0uX2lkKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9uQ2xvc2U6IHNldHRpbmdzLm9uQ2xvc2UsXG5cdFx0XHRcdFx0b25DYW5jZWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2soZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkucmVuZGVyVG8oZG9jdW1lbnQuYm9keSkucmVmbG93KCk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIENyZWF0ZXMgYSBuZXcgYWxlcnQgZGlhbG9nLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBtZXRob2QgYWxlcnRcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBTZXR0aW5ncyBmb3IgdGhlIGFsZXJ0IGRpYWxvZy5cblx0XHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gQ2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSB1c2VyIG1ha2VzIGEgY2hvaWNlLlxuXHRcdFx0ICovXG5cdFx0XHRhbGVydDogZnVuY3Rpb24oc2V0dGluZ3MsIGNhbGxiYWNrKSB7XG5cdFx0XHRcdGlmICh0eXBlb2Ygc2V0dGluZ3MgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHNldHRpbmdzID0ge3RleHQ6IHNldHRpbmdzfTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNldHRpbmdzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG5cdFx0XHRcdHJldHVybiBNZXNzYWdlQm94Lm1zZ0JveChzZXR0aW5ncyk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIENyZWF0ZXMgYSBuZXcgY29uZmlybSBkaWFsb2cuXG5cdFx0XHQgKlxuXHRcdFx0ICogQG1ldGhvZCBjb25maXJtXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgU2V0dGluZ3MgZm9yIHRoZSBjb25maXJtIGRpYWxvZy5cblx0XHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gQ2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSB1c2VyIG1ha2VzIGEgY2hvaWNlLlxuXHRcdFx0ICovXG5cdFx0XHRjb25maXJtOiBmdW5jdGlvbihzZXR0aW5ncywgY2FsbGJhY2spIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBzZXR0aW5ncyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0c2V0dGluZ3MgPSB7dGV4dDogc2V0dGluZ3N9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2V0dGluZ3MuY2FsbGJhY2sgPSBjYWxsYmFjaztcblx0XHRcdFx0c2V0dGluZ3MuYnV0dG9ucyA9IE1lc3NhZ2VCb3guT0tfQ0FOQ0VMO1xuXG5cdFx0XHRcdHJldHVybiBNZXNzYWdlQm94Lm1zZ0JveChzZXR0aW5ncyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gTWVzc2FnZUJveDtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvV2luZG93TWFuYWdlci5qc1xuXG4vKipcbiAqIFdpbmRvd01hbmFnZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIG5hdGl2ZSB3aW5kb3dzIGFuZCBkaWFsb2dzLiBUaGlzIGNsYXNzIGNhbiBiZSBleHRlbmRlZCB0byBwcm92aWRlIGZvciBleGFtcGxlIGlubGluZSBkaWFsb2dzLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLldpbmRvd01hbmFnZXJcbiAqIEBleGFtcGxlXG4gKiAvLyBPcGVucyBhIG5ldyBkaWFsb2cgd2l0aCB0aGUgZmlsZS5odG0gZmlsZSBhbmQgdGhlIHNpemUgMzIweDI0MFxuICogLy8gSXQgYWxzbyBhZGRzIGEgY3VzdG9tIHBhcmFtZXRlciB0aGlzIGNhbiBiZSByZXRyaWV2ZWQgYnkgdXNpbmcgdGlueU1DRVBvcHVwLmdldFdpbmRvd0FyZyBpbnNpZGUgdGhlIGRpYWxvZy5cbiAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG4gKiAgICB1cmw6ICdmaWxlLmh0bScsXG4gKiAgICB3aWR0aDogMzIwLFxuICogICAgaGVpZ2h0OiAyNDBcbiAqIH0sIHtcbiAqICAgIGN1c3RvbV9wYXJhbTogMVxuICogfSk7XG4gKlxuICogLy8gRGlzcGxheXMgYW4gYWxlcnQgYm94IHVzaW5nIHRoZSBhY3RpdmUgZWRpdG9ycyB3aW5kb3cgbWFuYWdlciBpbnN0YW5jZVxuICogdGlueW1jZS5hY3RpdmVFZGl0b3Iud2luZG93TWFuYWdlci5hbGVydCgnSGVsbG8gd29ybGQhJyk7XG4gKlxuICogLy8gRGlzcGxheXMgYW4gY29uZmlybSBib3ggYW5kIGFuIGFsZXJ0IG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgZGVwZW5kaW5nIG9uIHdoYXQgeW91IGNob29zZSBpbiB0aGUgY29uZmlybVxuICogdGlueW1jZS5hY3RpdmVFZGl0b3Iud2luZG93TWFuYWdlci5jb25maXJtKFwiRG8geW91IHdhbnQgdG8gZG8gc29tZXRoaW5nXCIsIGZ1bmN0aW9uKHMpIHtcbiAqICAgIGlmIChzKVxuICogICAgICAgdGlueW1jZS5hY3RpdmVFZGl0b3Iud2luZG93TWFuYWdlci5hbGVydChcIk9rXCIpO1xuICogICAgZWxzZVxuICogICAgICAgdGlueW1jZS5hY3RpdmVFZGl0b3Iud2luZG93TWFuYWdlci5hbGVydChcIkNhbmNlbFwiKTtcbiAqIH0pO1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL1dpbmRvd01hbmFnZXJcIiwgW1xuXHRcInRpbnltY2UvdWkvV2luZG93XCIsXG5cdFwidGlueW1jZS91aS9NZXNzYWdlQm94XCJcbl0sIGZ1bmN0aW9uKFdpbmRvdywgTWVzc2FnZUJveCkge1xuXHRyZXR1cm4gZnVuY3Rpb24oZWRpdG9yKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCB3aW5kb3dzID0gW107XG5cblx0XHRmdW5jdGlvbiBnZXRUb3BNb3N0V2luZG93KCkge1xuXHRcdFx0aWYgKHdpbmRvd3MubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiB3aW5kb3dzW3dpbmRvd3MubGVuZ3RoIC0gMV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZmlyZU9wZW5FdmVudCh3aW4pIHtcblx0XHRcdGVkaXRvci5maXJlKCdPcGVuV2luZG93Jywge1xuXHRcdFx0XHR3aW46IHdpblxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZmlyZUNsb3NlRXZlbnQod2luKSB7XG5cdFx0XHRlZGl0b3IuZmlyZSgnQ2xvc2VXaW5kb3cnLCB7XG5cdFx0XHRcdHdpbjogd2luXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRzZWxmLndpbmRvd3MgPSB3aW5kb3dzO1xuXG5cdFx0ZWRpdG9yLm9uKCdyZW1vdmUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gd2luZG93cy5sZW5ndGg7XG5cblx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0d2luZG93c1tpXS5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0LyoqXG5cdFx0ICogT3BlbnMgYSBuZXcgd2luZG93LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBvcGVuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgT3B0aW9uYWwgbmFtZS92YWx1ZSBzZXR0aW5ncyBjb2xsZWN0aW9uIGNvbnRhaW5zIHRoaW5ncyBsaWtlIHdpZHRoL2hlaWdodC91cmwgZXRjLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgT3B0aW9ucyBsaWtlIHRpdGxlLCBmaWxlLCB3aWR0aCwgaGVpZ2h0IGV0Yy5cblx0XHQgKiBAb3B0aW9uIHtTdHJpbmd9IHRpdGxlIFdpbmRvdyB0aXRsZS5cblx0XHQgKiBAb3B0aW9uIHtTdHJpbmd9IGZpbGUgVVJMIG9mIHRoZSBmaWxlIHRvIG9wZW4gaW4gdGhlIHdpbmRvdy5cblx0XHQgKiBAb3B0aW9uIHtOdW1iZXJ9IHdpZHRoIFdpZHRoIGluIHBpeGVscy5cblx0XHQgKiBAb3B0aW9uIHtOdW1iZXJ9IGhlaWdodCBIZWlnaHQgaW4gcGl4ZWxzLlxuXHRcdCAqIEBvcHRpb24ge0Jvb2xlYW59IGF1dG9TY3JvbGwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHBvcHVwIHdpbmRvdyBjYW4gaGF2ZSBzY3JvbGxiYXJzIGlmIHJlcXVpcmVkIChpLmUuIGNvbnRlbnRcblx0XHQgKiBsYXJnZXIgdGhhbiB0aGUgcG9wdXAgc2l6ZSBzcGVjaWZpZWQpLlxuXHRcdCAqL1xuXHRcdHNlbGYub3BlbiA9IGZ1bmN0aW9uKGFyZ3MsIHBhcmFtcykge1xuXHRcdFx0dmFyIHdpbjtcblxuXHRcdFx0ZWRpdG9yLmVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKGVkaXRvcik7XG5cblx0XHRcdGFyZ3MudGl0bGUgPSBhcmdzLnRpdGxlIHx8ICcgJztcblxuXHRcdFx0Ly8gSGFuZGxlIFVSTFxuXHRcdFx0YXJncy51cmwgPSBhcmdzLnVybCB8fCBhcmdzLmZpbGU7IC8vIExlZ2FjeVxuXHRcdFx0aWYgKGFyZ3MudXJsKSB7XG5cdFx0XHRcdGFyZ3Mud2lkdGggPSBwYXJzZUludChhcmdzLndpZHRoIHx8IDMyMCwgMTApO1xuXHRcdFx0XHRhcmdzLmhlaWdodCA9IHBhcnNlSW50KGFyZ3MuaGVpZ2h0IHx8IDI0MCwgMTApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIYW5kbGUgYm9keVxuXHRcdFx0aWYgKGFyZ3MuYm9keSkge1xuXHRcdFx0XHRhcmdzLml0ZW1zID0ge1xuXHRcdFx0XHRcdGRlZmF1bHRzOiBhcmdzLmRlZmF1bHRzLFxuXHRcdFx0XHRcdHR5cGU6IGFyZ3MuYm9keVR5cGUgfHwgJ2Zvcm0nLFxuXHRcdFx0XHRcdGl0ZW1zOiBhcmdzLmJvZHksXG5cdFx0XHRcdFx0ZGF0YTogYXJncy5kYXRhLFxuXHRcdFx0XHRcdGNhbGxiYWNrczogYXJncy5jb21tYW5kc1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWFyZ3MudXJsICYmICFhcmdzLmJ1dHRvbnMpIHtcblx0XHRcdFx0YXJncy5idXR0b25zID0gW1xuXHRcdFx0XHRcdHt0ZXh0OiAnT2snLCBzdWJ0eXBlOiAncHJpbWFyeScsIG9uY2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0d2luLmZpbmQoJ2Zvcm0nKVswXS5zdWJtaXQoKTtcblx0XHRcdFx0XHR9fSxcblxuXHRcdFx0XHRcdHt0ZXh0OiAnQ2FuY2VsJywgb25jbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR3aW4uY2xvc2UoKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXG5cdFx0XHR3aW4gPSBuZXcgV2luZG93KGFyZ3MpO1xuXHRcdFx0d2luZG93cy5wdXNoKHdpbik7XG5cblx0XHRcdHdpbi5vbignY2xvc2UnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGkgPSB3aW5kb3dzLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0aWYgKHdpbmRvd3NbaV0gPT09IHdpbikge1xuXHRcdFx0XHRcdFx0d2luZG93cy5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF3aW5kb3dzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGVkaXRvci5mb2N1cygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZmlyZUNsb3NlRXZlbnQod2luKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBIYW5kbGUgZGF0YVxuXHRcdFx0aWYgKGFyZ3MuZGF0YSkge1xuXHRcdFx0XHR3aW4ub24oJ3Bvc3RSZW5kZXInLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR0aGlzLmZpbmQoJyonKS5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0XHRcdHZhciBuYW1lID0gY3RybC5uYW1lKCk7XG5cblx0XHRcdFx0XHRcdGlmIChuYW1lIGluIGFyZ3MuZGF0YSkge1xuXHRcdFx0XHRcdFx0XHRjdHJsLnZhbHVlKGFyZ3MuZGF0YVtuYW1lXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdG9yZSBhcmdzIGFuZCBwYXJhbWV0ZXJzXG5cdFx0XHR3aW4uZmVhdHVyZXMgPSBhcmdzIHx8IHt9O1xuXHRcdFx0d2luLnBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblxuXHRcdFx0Ly8gVGFrZXMgYSBzbmFwc2hvdCBpbiB0aGUgRm9jdXNNYW5hZ2VyIG9mIHRoZSBzZWxlY3Rpb24gYmVmb3JlIGZvY3VzIGlzIGxvc3QgdG8gZGlhbG9nXG5cdFx0XHRpZiAod2luZG93cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0ZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG5cdFx0XHR9XG5cblx0XHRcdHdpbiA9IHdpbi5yZW5kZXJUbygpLnJlZmxvdygpO1xuXG5cdFx0XHRmaXJlT3BlbkV2ZW50KHdpbik7XG5cblx0XHRcdHJldHVybiB3aW47XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgYSBhbGVydCBkaWFsb2cuIFBsZWFzZSBkb24ndCB1c2UgdGhlIGJsb2NraW5nIGJlaGF2aW9yIG9mIHRoaXNcblx0XHQgKiBuYXRpdmUgdmVyc2lvbiB1c2UgdGhlIGNhbGxiYWNrIG1ldGhvZCBpbnN0ZWFkIHRoZW4gaXQgY2FuIGJlIGV4dGVuZGVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhbGVydFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRleHQgdG8gZGlzcGxheSBpbiB0aGUgbmV3IGFsZXJ0IGRpYWxvZy5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgb2suXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIE9wdGlvbmFsIHNjb3BlIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGluLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gRGlzcGxheXMgYW4gYWxlcnQgYm94IHVzaW5nIHRoZSBhY3RpdmUgZWRpdG9ycyB3aW5kb3cgbWFuYWdlciBpbnN0YW5jZVxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLndpbmRvd01hbmFnZXIuYWxlcnQoJ0hlbGxvIHdvcmxkIScpO1xuXHRcdCAqL1xuXHRcdHNlbGYuYWxlcnQgPSBmdW5jdGlvbihtZXNzYWdlLCBjYWxsYmFjaywgc2NvcGUpIHtcblx0XHRcdHZhciB3aW47XG5cblx0XHRcdHdpbiA9IE1lc3NhZ2VCb3guYWxlcnQobWVzc2FnZSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmIChjYWxsYmFjaykge1xuXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwoc2NvcGUgfHwgdGhpcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWRpdG9yLmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR3aW4ub24oJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZpcmVDbG9zZUV2ZW50KHdpbik7XG5cdFx0XHR9KTtcblxuXHRcdFx0ZmlyZU9wZW5FdmVudCh3aW4pO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBDcmVhdGVzIGEgY29uZmlybSBkaWFsb2cuIFBsZWFzZSBkb24ndCB1c2UgdGhlIGJsb2NraW5nIGJlaGF2aW9yIG9mIHRoaXNcblx0XHQgKiBuYXRpdmUgdmVyc2lvbiB1c2UgdGhlIGNhbGxiYWNrIG1ldGhvZCBpbnN0ZWFkIHRoZW4gaXQgY2FuIGJlIGV4dGVuZGVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjb25maXJtXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGV4dCB0byBkaXNwbGF5IGluIHRoZSBuZXcgY29uZmlybSBkaWFsb2cuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIG9rIG9yIGNhbmNlbC5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUgT3B0aW9uYWwgc2NvcGUgdG8gZXhlY3V0ZSB0aGUgY2FsbGJhY2sgaW4uXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBEaXNwbGF5cyBhbiBjb25maXJtIGJveCBhbmQgYW4gYWxlcnQgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgY2hvb3NlIGluIHRoZSBjb25maXJtXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iud2luZG93TWFuYWdlci5jb25maXJtKFwiRG8geW91IHdhbnQgdG8gZG8gc29tZXRoaW5nXCIsIGZ1bmN0aW9uKHMpIHtcblx0XHQgKiAgICBpZiAocylcblx0XHQgKiAgICAgICB0aW55bWNlLmFjdGl2ZUVkaXRvci53aW5kb3dNYW5hZ2VyLmFsZXJ0KFwiT2tcIik7XG5cdFx0ICogICAgZWxzZVxuXHRcdCAqICAgICAgIHRpbnltY2UuYWN0aXZlRWRpdG9yLndpbmRvd01hbmFnZXIuYWxlcnQoXCJDYW5jZWxcIik7XG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdFx0c2VsZi5jb25maXJtID0gZnVuY3Rpb24obWVzc2FnZSwgY2FsbGJhY2ssIHNjb3BlKSB7XG5cdFx0XHR2YXIgd2luO1xuXG5cdFx0XHR3aW4gPSBNZXNzYWdlQm94LmNvbmZpcm0obWVzc2FnZSwgZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbChzY29wZSB8fCB0aGlzLCBzdGF0ZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0d2luLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmaXJlQ2xvc2VFdmVudCh3aW4pO1xuXHRcdFx0fSk7XG5cblx0XHRcdGZpcmVPcGVuRXZlbnQod2luKTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQ2xvc2VzIHRoZSB0b3AgbW9zdCB3aW5kb3cuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNsb3NlXG5cdFx0ICovXG5cdFx0c2VsZi5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKGdldFRvcE1vc3RXaW5kb3coKSkge1xuXHRcdFx0XHRnZXRUb3BNb3N0V2luZG93KCkuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgcGFyYW1zIG9mIHRoZSBsYXN0IHdpbmRvdyBvcGVuIGNhbGwuIFRoaXMgY2FuIGJlIHVzZWQgaW4gaWZyYW1lIGJhc2VkXG5cdFx0ICogZGlhbG9nIHRvIGdldCBwYXJhbXMgcGFzc2VkIGZyb20gdGhlIHRpbnltY2UgcGx1Z2luLlxuXHRcdCAqXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgZGlhbG9nQXJndW1lbnRzID0gdG9wLnRpbnltY2UuYWN0aXZlRWRpdG9yLndpbmRvd01hbmFnZXIuZ2V0UGFyYW1zKCk7XG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFBhcmFtc1xuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIHBhc3NlZCBmcm9tIHdpbmRvd01hbmFnZXIub3BlbiBjYWxsLlxuXHRcdCAqL1xuXHRcdHNlbGYuZ2V0UGFyYW1zID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZ2V0VG9wTW9zdFdpbmRvdygpID8gZ2V0VG9wTW9zdFdpbmRvdygpLnBhcmFtcyA6IG51bGw7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhlIHBhcmFtcyBvZiB0aGUgbGFzdCBvcGVuZWQgd2luZG93LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRQYXJhbXNcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFBhcmFtcyBvYmplY3QgdG8gc2V0IGZvciB0aGUgbGFzdCBvcGVuZWQgd2luZG93LlxuXHRcdCAqL1xuXHRcdHNlbGYuc2V0UGFyYW1zID0gZnVuY3Rpb24ocGFyYW1zKSB7XG5cdFx0XHRpZiAoZ2V0VG9wTW9zdFdpbmRvdygpKSB7XG5cdFx0XHRcdGdldFRvcE1vc3RXaW5kb3coKS5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBvcGVuZWQgd2luZG93IG9iamVjdHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFdpbmRvd3Ncblx0XHQgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgd2luZG93cy5cblx0XHQgKi9cblx0XHRzZWxmLmdldFdpbmRvd3MgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB3aW5kb3dzO1xuXHRcdH07XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1Rvb2x0aXAuanNcblxuLyoqXG4gKiBUb29sdGlwLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHRvb2x0aXAgaW5zdGFuY2UuXG4gKlxuICogQC14LWxlc3MgVG9vbFRpcC5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Ub29sVGlwXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkNvbnRyb2xcbiAqIEBtaXhlcyB0aW55bWNlLnVpLk1vdmFibGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9Ub29sdGlwXCIsIFtcblx0XCJ0aW55bWNlL3VpL0NvbnRyb2xcIixcblx0XCJ0aW55bWNlL3VpL01vdmFibGVcIlxuXSwgZnVuY3Rpb24oQ29udHJvbCwgTW92YWJsZSkge1xuXHRyZXR1cm4gQ29udHJvbC5leHRlbmQoe1xuXHRcdE1peGluczogW01vdmFibGVdLFxuXG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGNsYXNzZXM6ICd3aWRnZXQgdG9vbHRpcCB0b29sdGlwLW4nXG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHByZWZpeCA9IHNlbGYuY2xhc3NQcmVmaXg7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+JyArXG5cdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCInICsgcHJlZml4ICsgJ3Rvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICtcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIicgKyBwcmVmaXggKyAndG9vbHRpcC1pbm5lclwiPicgKyBzZWxmLmVuY29kZShzZWxmLnN0YXRlLmdldCgndGV4dCcpKSArICc8L2Rpdj4nICtcblx0XHRcdFx0JzwvZGl2Pidcblx0XHRcdCk7XG5cdFx0fSxcblxuXHRcdGJpbmRTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6dGV4dCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0c2VsZi5nZXRFbCgpLmxhc3RDaGlsZC5pbm5lckhUTUwgPSBzZWxmLmVuY29kZShlLnZhbHVlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVwYWludHMgdGhlIGNvbnRyb2wgYWZ0ZXIgYSBsYXlvdXQgb3BlcmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZXBhaW50XG5cdFx0ICovXG5cdFx0cmVwYWludDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHN0eWxlLCByZWN0O1xuXG5cdFx0XHRzdHlsZSA9IHNlbGYuZ2V0RWwoKS5zdHlsZTtcblx0XHRcdHJlY3QgPSBzZWxmLl9sYXlvdXRSZWN0O1xuXG5cdFx0XHRzdHlsZS5sZWZ0ID0gcmVjdC54ICsgJ3B4Jztcblx0XHRcdHN0eWxlLnRvcCA9IHJlY3QueSArICdweCc7XG5cdFx0XHRzdHlsZS56SW5kZXggPSAweEZGRkYgKyAweEZGRkY7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvV2lkZ2V0LmpzXG5cbi8qKlxuICogV2lkZ2V0LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogV2lkZ2V0IGJhc2UgY2xhc3MgYSB3aWRnZXQgaXMgYSBjb250cm9sIHRoYXQgaGFzIGEgdG9vbHRpcCBhbmQgc29tZSBiYXNpYyBzdGF0ZXMuXG4gKlxuICogQGNsYXNzIHRpbnltY2UudWkuV2lkZ2V0XG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkNvbnRyb2xcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9XaWRnZXRcIiwgW1xuXHRcInRpbnltY2UvdWkvQ29udHJvbFwiLFxuXHRcInRpbnltY2UvdWkvVG9vbHRpcFwiXG5dLCBmdW5jdGlvbihDb250cm9sLCBUb29sdGlwKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciB0b29sdGlwO1xuXG5cdHZhciBXaWRnZXQgPSBDb250cm9sLmV4dGVuZCh7XG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqIEBzZXR0aW5nIHtTdHJpbmd9IHRvb2x0aXAgVG9vbHRpcCB0ZXh0IHRvIGRpc3BsYXkgd2hlbiBob3ZlcmluZy5cblx0XHQgKiBAc2V0dGluZyB7Qm9vbGVhbn0gYXV0b2ZvY3VzIFRydWUgaWYgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGZvY3VzZWQgd2hlbiByZW5kZXJlZC5cblx0XHQgKiBAc2V0dGluZyB7U3RyaW5nfSB0ZXh0IFRleHQgdG8gZGlzcGxheSBpbnNpZGUgd2lkZ2V0LlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuX3N1cGVyKHNldHRpbmdzKTtcblx0XHRcdHNldHRpbmdzID0gc2VsZi5zZXR0aW5ncztcblx0XHRcdHNlbGYuY2FuRm9jdXMgPSB0cnVlO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MudG9vbHRpcCAmJiBXaWRnZXQudG9vbHRpcHMgIT09IGZhbHNlKSB7XG5cdFx0XHRcdHNlbGYub24oJ21vdXNlZW50ZXInLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIHRvb2x0aXAgPSBzZWxmLnRvb2x0aXAoKS5tb3ZlVG8oLTB4RkZGRik7XG5cblx0XHRcdFx0XHRpZiAoZS5jb250cm9sID09IHNlbGYpIHtcblx0XHRcdFx0XHRcdHZhciByZWwgPSB0b29sdGlwLnRleHQoc2V0dGluZ3MudG9vbHRpcCkuc2hvdygpLnRlc3RNb3ZlUmVsKHNlbGYuZ2V0RWwoKSwgWydiYy10YycsICdiYy10bCcsICdiYy10ciddKTtcblxuXHRcdFx0XHRcdFx0dG9vbHRpcC5jbGFzc2VzLnRvZ2dsZSgndG9vbHRpcC1uJywgcmVsID09ICdiYy10YycpO1xuXHRcdFx0XHRcdFx0dG9vbHRpcC5jbGFzc2VzLnRvZ2dsZSgndG9vbHRpcC1udycsIHJlbCA9PSAnYmMtdGwnKTtcblx0XHRcdFx0XHRcdHRvb2x0aXAuY2xhc3Nlcy50b2dnbGUoJ3Rvb2x0aXAtbmUnLCByZWwgPT0gJ2JjLXRyJyk7XG5cblx0XHRcdFx0XHRcdHRvb2x0aXAubW92ZVJlbChzZWxmLmdldEVsKCksIHJlbCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRvb2x0aXAuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2VsZi5vbignbW91c2VsZWF2ZSBtb3VzZWRvd24gY2xpY2snLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRzZWxmLnRvb2x0aXAoKS5oaWRlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLmFyaWEoJ2xhYmVsJywgc2V0dGluZ3MuYXJpYUxhYmVsIHx8IHNldHRpbmdzLnRvb2x0aXApO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRvb2x0aXAgaW5zdGFuY2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHRvb2x0aXBcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLlRvb2x0aXB9IFRvb2x0aXAgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0dG9vbHRpcDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIXRvb2x0aXApIHtcblx0XHRcdFx0dG9vbHRpcCA9IG5ldyBUb29sdGlwKHt0eXBlOiAndG9vbHRpcCd9KTtcblx0XHRcdFx0dG9vbHRpcC5yZW5kZXJUbygpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdG9vbHRpcDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIHJlbmRlcmVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwb3N0UmVuZGVyXG5cdFx0ICovXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHNldHRpbmdzID0gc2VsZi5zZXR0aW5ncztcblxuXHRcdFx0c2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0aWYgKCFzZWxmLnBhcmVudCgpICYmIChzZXR0aW5ncy53aWR0aCB8fCBzZXR0aW5ncy5oZWlnaHQpKSB7XG5cdFx0XHRcdHNlbGYuaW5pdExheW91dFJlY3QoKTtcblx0XHRcdFx0c2VsZi5yZXBhaW50KCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5hdXRvZm9jdXMpIHtcblx0XHRcdFx0c2VsZi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0ZnVuY3Rpb24gZGlzYWJsZShzdGF0ZSkge1xuXHRcdFx0XHRzZWxmLmFyaWEoJ2Rpc2FibGVkJywgc3RhdGUpO1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMudG9nZ2xlKCdkaXNhYmxlZCcsIHN0YXRlKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gYWN0aXZlKHN0YXRlKSB7XG5cdFx0XHRcdHNlbGYuYXJpYSgncHJlc3NlZCcsIHN0YXRlKTtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLnRvZ2dsZSgnYWN0aXZlJywgc3RhdGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6ZGlzYWJsZWQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGRpc2FibGUoZS52YWx1ZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5zdGF0ZS5vbignY2hhbmdlOmFjdGl2ZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0YWN0aXZlKGUudmFsdWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChzZWxmLnN0YXRlLmdldCgnZGlzYWJsZWQnKSkge1xuXHRcdFx0XHRkaXNhYmxlKHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5zdGF0ZS5nZXQoJ2FjdGl2ZScpKSB7XG5cdFx0XHRcdGFjdGl2ZSh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgdGhlIGN1cnJlbnQgY29udHJvbCBmcm9tIERPTSBhbmQgZnJvbSBVSSBjb2xsZWN0aW9ucy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5Db250cm9sfSBDdXJyZW50IGNvbnRyb2wgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuX3N1cGVyKCk7XG5cblx0XHRcdGlmICh0b29sdGlwKSB7XG5cdFx0XHRcdHRvb2x0aXAucmVtb3ZlKCk7XG5cdFx0XHRcdHRvb2x0aXAgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIFdpZGdldDtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvUHJvZ3Jlc3MuanNcblxuLyoqXG4gKiBQcm9ncmVzcy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFByb2dyZXNzIGNvbnRyb2wuXG4gKlxuICogQC14LWxlc3MgUHJvZ3Jlc3MubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuUHJvZ3Jlc3NcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuQ29udHJvbFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL1Byb2dyZXNzXCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiXG5dLCBmdW5jdGlvbihXaWRnZXQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIFdpZGdldC5leHRlbmQoe1xuXHRcdERlZmF1bHRzOiB7XG5cdFx0XHR2YWx1ZTogMFxuXHRcdH0sXG5cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdwcm9ncmVzcycpO1xuXG5cdFx0XHRpZiAoIXNlbGYuc2V0dGluZ3MuZmlsdGVyKSB7XG5cdFx0XHRcdHNlbGYuc2V0dGluZ3MuZmlsdGVyID0gZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHJlbmRlckh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBpZCA9IHNlbGYuX2lkLCBwcmVmaXggPSB0aGlzLmNsYXNzUHJlZml4O1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPGRpdiBpZD1cIicgKyBpZCArICdcIiBjbGFzcz1cIicgKyBzZWxmLmNsYXNzZXMgKyAnXCI+JyArXG5cdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCInICsgcHJlZml4ICsgJ2Jhci1jb250YWluZXJcIj4nICtcblx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiJyArIHByZWZpeCArICdiYXJcIj48L2Rpdj4nICtcblx0XHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCInICsgcHJlZml4ICsgJ3RleHRcIj4wJTwvZGl2PicgK1xuXHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0KTtcblx0XHR9LFxuXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuX3N1cGVyKCk7XG5cdFx0XHRzZWxmLnZhbHVlKHNlbGYuc2V0dGluZ3MudmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0YmluZFN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGZ1bmN0aW9uIHNldFZhbHVlKHZhbHVlKSB7XG5cdFx0XHRcdHZhbHVlID0gc2VsZi5zZXR0aW5ncy5maWx0ZXIodmFsdWUpO1xuXHRcdFx0XHRzZWxmLmdldEVsKCkubGFzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlICsgJyUnO1xuXHRcdFx0XHRzZWxmLmdldEVsKCkuZmlyc3RDaGlsZC5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gdmFsdWUgKyAnJSc7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTp2YWx1ZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0c2V0VmFsdWUoZS52YWx1ZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0c2V0VmFsdWUoc2VsZi5zdGF0ZS5nZXQoJ3ZhbHVlJykpO1xuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9Ob3RpZmljYXRpb24uanNcblxuLyoqXG4gKiBOb3RpZmljYXRpb24uanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbm90aWZpY2F0aW9uIGluc3RhbmNlLlxuICpcbiAqIEAteC1sZXNzIE5vdGlmaWNhdGlvbi5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Ob3RpZmljYXRpb25cbiAqIEBleHRlbmRzIHRpbnltY2UudWkuQ29udGFpbmVyXG4gKiBAbWl4ZXMgdGlueW1jZS51aS5Nb3ZhYmxlXG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvTm90aWZpY2F0aW9uXCIsIFtcblx0XCJ0aW55bWNlL3VpL0NvbnRyb2xcIixcblx0XCJ0aW55bWNlL3VpL01vdmFibGVcIixcblx0XCJ0aW55bWNlL3VpL1Byb2dyZXNzXCIsXG5cdFwidGlueW1jZS91dGlsL0RlbGF5XCJcbl0sIGZ1bmN0aW9uKENvbnRyb2wsIE1vdmFibGUsIFByb2dyZXNzLCBEZWxheSkge1xuXHRyZXR1cm4gQ29udHJvbC5leHRlbmQoe1xuXHRcdE1peGluczogW01vdmFibGVdLFxuXG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGNsYXNzZXM6ICd3aWRnZXQgbm90aWZpY2F0aW9uJ1xuXHRcdH0sXG5cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cblx0XHRcdGlmIChzZXR0aW5ncy50ZXh0KSB7XG5cdFx0XHRcdHNlbGYudGV4dChzZXR0aW5ncy50ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLmljb24pIHtcblx0XHRcdFx0c2VsZi5pY29uID0gc2V0dGluZ3MuaWNvbjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLmNvbG9yKSB7XG5cdFx0XHRcdHNlbGYuY29sb3IgPSBzZXR0aW5ncy5jb2xvcjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLnR5cGUpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnbm90aWZpY2F0aW9uLScgKyBzZXR0aW5ncy50eXBlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLnRpbWVvdXQgJiYgKHNldHRpbmdzLnRpbWVvdXQgPCAwIHx8IHNldHRpbmdzLnRpbWVvdXQgPiAwKSAmJiAhc2V0dGluZ3MuY2xvc2VCdXR0b24pIHtcblx0XHRcdFx0c2VsZi5jbG9zZUJ1dHRvbiA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnaGFzLWNsb3NlJyk7XG5cdFx0XHRcdHNlbGYuY2xvc2VCdXR0b24gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3MucHJvZ3Jlc3NCYXIpIHtcblx0XHRcdFx0c2VsZi5wcm9ncmVzc0JhciA9IG5ldyBQcm9ncmVzcygpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKHNlbGYuY2xhc3NQcmVmaXggKyAnY2xvc2UnKSAhPSAtMSkge1xuXHRcdFx0XHRcdHNlbGYuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHByZWZpeCA9IHNlbGYuY2xhc3NQcmVmaXgsIGljb24gPSAnJywgY2xvc2VCdXR0b24gPSAnJywgcHJvZ3Jlc3NCYXIgPSAnJywgbm90aWZpY2F0aW9uU3R5bGUgPSAnJztcblxuXHRcdFx0aWYgKHNlbGYuaWNvbikge1xuXHRcdFx0XHRpY29uID0gJzxpIGNsYXNzPVwiJyArIHByZWZpeCArICdpY28nICsgJyAnICsgcHJlZml4ICsgJ2ktJyArIHNlbGYuaWNvbiArICdcIj48L2k+Jztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbGYuY29sb3IpIHtcblx0XHRcdFx0bm90aWZpY2F0aW9uU3R5bGUgPSAnIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogJyArIHNlbGYuY29sb3IgKyAnXCInO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5jbG9zZUJ1dHRvbikge1xuXHRcdFx0XHRjbG9zZUJ1dHRvbiA9ICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIicgKyBwcmVmaXggKyAnY2xvc2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cXHUwMGQ3PC9idXR0b24+Jztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbGYucHJvZ3Jlc3NCYXIpIHtcblx0XHRcdFx0cHJvZ3Jlc3NCYXIgPSBzZWxmLnByb2dyZXNzQmFyLnJlbmRlckh0bWwoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0JzxkaXYgaWQ9XCInICsgc2VsZi5faWQgKyAnXCIgY2xhc3M9XCInICsgc2VsZi5jbGFzc2VzICsgJ1wiJyArIG5vdGlmaWNhdGlvblN0eWxlICsgJyByb2xlPVwicHJlc2VudGF0aW9uXCI+JyArXG5cdFx0XHRcdFx0aWNvbiArXG5cdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCInICsgcHJlZml4ICsgJ25vdGlmaWNhdGlvbi1pbm5lclwiPicgKyBzZWxmLnN0YXRlLmdldCgndGV4dCcpICsgJzwvZGl2PicgK1xuXHRcdFx0XHRcdHByb2dyZXNzQmFyICtcblx0XHRcdFx0XHRjbG9zZUJ1dHRvbiArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0RGVsYXkuc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi4kZWwuYWRkQ2xhc3Moc2VsZi5jbGFzc1ByZWZpeCArICdpbicpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBzZWxmLl9zdXBlcigpO1xuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5zdGF0ZS5vbignY2hhbmdlOnRleHQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHNlbGYuZ2V0RWwoKS5jaGlsZE5vZGVzWzFdLmlubmVySFRNTCA9IGUudmFsdWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChzZWxmLnByb2dyZXNzQmFyKSB7XG5cdFx0XHRcdHNlbGYucHJvZ3Jlc3NCYXIuYmluZFN0YXRlcygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fSxcblxuXHRcdGNsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKCFzZWxmLmZpcmUoJ2Nsb3NlJykuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0c2VsZi5yZW1vdmUoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlcGFpbnRzIHRoZSBjb250cm9sIGFmdGVyIGEgbGF5b3V0IG9wZXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVwYWludFxuXHRcdCAqL1xuXHRcdHJlcGFpbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBzdHlsZSwgcmVjdDtcblxuXHRcdFx0c3R5bGUgPSBzZWxmLmdldEVsKCkuc3R5bGU7XG5cdFx0XHRyZWN0ID0gc2VsZi5fbGF5b3V0UmVjdDtcblxuXHRcdFx0c3R5bGUubGVmdCA9IHJlY3QueCArICdweCc7XG5cdFx0XHRzdHlsZS50b3AgPSByZWN0LnkgKyAncHgnO1xuXG5cdFx0XHQvLyBIYXJkY29kZWQgYXJiaXRyYXJ5IHotdmFsdWUgYmVjYXVzZSB3ZSB3YW50IHRoZVxuXHRcdFx0Ly8gbm90aWZpY2F0aW9ucyB1bmRlciB0aGUgb3RoZXIgd2luZG93c1xuXHRcdFx0c3R5bGUuekluZGV4ID0gMHhGRkZGIC0gMTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9Ob3RpZmljYXRpb25NYW5hZ2VyLmpzXG5cbi8qKlxuICogTm90aWZpY2F0aW9uTWFuYWdlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgVGlueU1DRSdzIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQGNsYXNzIHRpbnltY2Uubm90aWZpY2F0aW9uTWFuYWdlclxuICogQGV4YW1wbGVcbiAqIC8vIE9wZW5zIGEgbmV3IG5vdGlmaWNhdGlvbiBvZiB0eXBlIFwiZXJyb3JcIiB3aXRoIHRleHQgXCJBbiBlcnJvciBvY2N1cnJlZC5cIlxuICogdGlueW1jZS5hY3RpdmVFZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHtcbiAqICAgIHRleHQ6ICdBbiBlcnJvciBvY2N1cnJlZC4nLFxuICogICAgdHlwZTogJ2Vycm9yJ1xuICogfSk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvTm90aWZpY2F0aW9uTWFuYWdlclwiLCBbXG5cdFwidGlueW1jZS91aS9Ob3RpZmljYXRpb25cIixcblx0XCJ0aW55bWNlL3V0aWwvRGVsYXlcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxuXSwgZnVuY3Rpb24oTm90aWZpY2F0aW9uLCBEZWxheSwgVG9vbHMpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGVkaXRvcikge1xuXHRcdHZhciBzZWxmID0gdGhpcywgbm90aWZpY2F0aW9ucyA9IFtdO1xuXG5cdFx0ZnVuY3Rpb24gZ2V0TGFzdE5vdGlmaWNhdGlvbigpIHtcblx0XHRcdGlmIChub3RpZmljYXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gbm90aWZpY2F0aW9uc1tub3RpZmljYXRpb25zLmxlbmd0aCAtIDFdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNlbGYubm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnM7XG5cblx0XHRmdW5jdGlvbiByZXNpemVXaW5kb3dFdmVudCgpIHtcblx0XHRcdERlbGF5LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHtcblx0XHRcdFx0cHJlUG9zaXRpb25Ob3RpZmljYXRpb25zKCk7XG5cdFx0XHRcdHBvc2l0aW9uTm90aWZpY2F0aW9ucygpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2luY2UgdGhlIHZpZXdwb3J0IHdpbGwgY2hhbmdlIGJhc2VkIG9uIHRoZSBwcmVzZW50IG5vdGlmaWNhdGlvbnMsIHdlIG5lZWQgdG8gbW92ZSB0aGVtIGFsbCB0byB0aGVcblx0XHQvLyB0b3AgbGVmdCBvZiB0aGUgdmlld3BvcnQgdG8gZ2l2ZSBhbiBhY2N1cmF0ZSBzaXplIG1lYXN1cmVtZW50IHNvIHdlIGNhbiBwb3NpdGlvbiB0aGVtIGxhdGVyLlxuXHRcdGZ1bmN0aW9uIHByZVBvc2l0aW9uTm90aWZpY2F0aW9ucygpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbm90aWZpY2F0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRub3RpZmljYXRpb25zW2ldLm1vdmVUbygwLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwb3NpdGlvbk5vdGlmaWNhdGlvbnMoKSB7XG5cdFx0XHRpZiAobm90aWZpY2F0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHZhciBmaXJzdEl0ZW0gPSBub3RpZmljYXRpb25zLnNsaWNlKDAsIDEpWzBdO1xuXHRcdFx0XHR2YXIgY29udGFpbmVyID0gZWRpdG9yLmlubGluZSA/IGVkaXRvci5nZXRFbGVtZW50KCkgOiBlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKTtcblx0XHRcdFx0Zmlyc3RJdGVtLm1vdmVSZWwoY29udGFpbmVyLCAndGMtdGMnKTtcblx0XHRcdFx0aWYgKG5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgbm90aWZpY2F0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0bm90aWZpY2F0aW9uc1tpXS5tb3ZlUmVsKG5vdGlmaWNhdGlvbnNbaSAtIDFdLmdldEVsKCksICdiYy10YycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGVkaXRvci5vbigncmVtb3ZlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IG5vdGlmaWNhdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdG5vdGlmaWNhdGlvbnNbaV0uY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGVkaXRvci5vbignUmVzaXplRWRpdG9yJywgcG9zaXRpb25Ob3RpZmljYXRpb25zKTtcblx0XHRlZGl0b3Iub24oJ1Jlc2l6ZVdpbmRvdycsIHJlc2l6ZVdpbmRvd0V2ZW50KTtcblxuXHRcdC8qKlxuXHRcdCAqIE9wZW5zIGEgbmV3IG5vdGlmaWNhdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgb3BlblxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIE9wdGlvbmFsIG5hbWUvdmFsdWUgc2V0dGluZ3MgY29sbGVjdGlvbiBjb250YWlucyB0aGluZ3MgbGlrZSB0aW1lb3V0L2NvbG9yL21lc3NhZ2UgZXRjLlxuXHRcdCAqL1xuXHRcdHNlbGYub3BlbiA9IGZ1bmN0aW9uKGFyZ3MpIHtcblx0XHRcdC8vIE5ldmVyIG9wZW4gbm90aWZpY2F0aW9uIGlmIGVkaXRvciBoYXMgYmVlbiByZW1vdmVkLlxuXHRcdFx0aWYgKGVkaXRvci5yZW1vdmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIG5vdGlmO1xuXG5cdFx0XHRlZGl0b3IuZWRpdG9yTWFuYWdlci5zZXRBY3RpdmUoZWRpdG9yKTtcblxuXHRcdFx0dmFyIGR1cGxpY2F0ZSA9IGZpbmREdXBsaWNhdGVNZXNzYWdlKG5vdGlmaWNhdGlvbnMsIGFyZ3MpO1xuXG5cdFx0XHRpZiAoZHVwbGljYXRlID09PSBudWxsKSB7XG5cdFx0XHRcdG5vdGlmID0gbmV3IE5vdGlmaWNhdGlvbihhcmdzKTtcblx0XHRcdFx0bm90aWZpY2F0aW9ucy5wdXNoKG5vdGlmKTtcblxuXHRcdFx0XHQvL0lmIHdlIGhhdmUgYSB0aW1lb3V0IHZhbHVlXG5cdFx0XHRcdGlmIChhcmdzLnRpbWVvdXQgPiAwKSB7XG5cdFx0XHRcdFx0XHRub3RpZi50aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdG5vdGlmLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9LCBhcmdzLnRpbWVvdXQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bm90aWYub24oJ2Nsb3NlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGkgPSBub3RpZmljYXRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRcdGlmIChub3RpZi50aW1lcikge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLmdldFdpbigpLmNsZWFyVGltZW91dChub3RpZi50aW1lcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0aWYgKG5vdGlmaWNhdGlvbnNbaV0gPT09IG5vdGlmKSB7XG5cdFx0XHRcdFx0XHRcdG5vdGlmaWNhdGlvbnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHBvc2l0aW9uTm90aWZpY2F0aW9ucygpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRub3RpZi5yZW5kZXJUbygpO1xuXG5cdFx0XHRcdHBvc2l0aW9uTm90aWZpY2F0aW9ucygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bm90aWYgPSBkdXBsaWNhdGU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBub3RpZjtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogQ2xvc2VzIHRoZSB0b3AgbW9zdCBub3RpZmljYXRpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNsb3NlXG5cdFx0ICovXG5cdFx0c2VsZi5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKGdldExhc3ROb3RpZmljYXRpb24oKSkge1xuXHRcdFx0XHRnZXRMYXN0Tm90aWZpY2F0aW9uKCkuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgY3VycmVudGx5IG9wZW5lZCBub3RpZmljYXRpb24gb2JqZWN0cy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0Tm90aWZpY2F0aW9uc1xuXHRcdCAqIEByZXR1cm4ge0FycmF5fSBBcnJheSBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCBub3RpZmljYXRpb25zLlxuXHRcdCAqL1xuXHRcdHNlbGYuZ2V0Tm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG5vdGlmaWNhdGlvbnM7XG5cdFx0fTtcblxuXHRcdGVkaXRvci5vbignU2tpbkxvYWRlZCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlcnZpY2VNZXNzYWdlID0gZWRpdG9yLnNldHRpbmdzLnNlcnZpY2VfbWVzc2FnZTtcblxuXHRcdFx0aWYgKHNlcnZpY2VNZXNzYWdlKSB7XG5cdFx0XHRcdGVkaXRvci5ub3RpZmljYXRpb25NYW5hZ2VyLm9wZW4oe1xuXHRcdFx0XHRcdHRleHQ6IHNlcnZpY2VNZXNzYWdlLFxuXHRcdFx0XHRcdHR5cGU6ICd3YXJuaW5nJyxcblx0XHRcdFx0XHR0aW1lb3V0OiAwLFxuXHRcdFx0XHRcdGljb246ICcnXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0LyoqXG5cdFx0ICogRmluZHMgYW55IGV4aXN0aW5nIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgdGhlIG5ldyBvbmUuXG5cdFx0ICogUmV0dXJucyBlaXRoZXIgdGhlIGZvdW5kIG5vdGlmaWNhdGlvbiBvciBudWxsLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtOb3RpZmljYXRpb25bXX0gbm90aWZpY2F0aW9uQXJyYXkgLSBBcnJheSBvZiBjdXJyZW50IG5vdGlmaWNhdGlvbnNcblx0XHQgKiBAcGFyYW0ge3R5cGU6IHN0cmluZywgfSBuZXdOb3RpZmljYXRpb24gLSBOZXcgbm90aWZpY2F0aW9uIG9iamVjdFxuXHRcdCAqIEByZXR1cm5zIHs/Tm90aWZpY2F0aW9ufVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZpbmREdXBsaWNhdGVNZXNzYWdlKG5vdGlmaWNhdGlvbkFycmF5LCBuZXdOb3RpZmljYXRpb24pIHtcblx0XHRcdGlmICghaXNQbGFpblRleHROb3RpZmljYXRpb24obmV3Tm90aWZpY2F0aW9uKSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IFRvb2xzLmdyZXAobm90aWZpY2F0aW9uQXJyYXksIGZ1bmN0aW9uIChub3RpZmljYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGlzU2FtZU5vdGlmaWNhdGlvbihuZXdOb3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbik7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGZpbHRlcmVkTm90aWZpY2F0aW9ucy5sZW5ndGggPT09IDAgPyBudWxsIDogZmlsdGVyZWROb3RpZmljYXRpb25zWzBdO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIENoZWNrcyBpZiB0aGUgcGFzc2VkIGluIGFyZ3Mgb2JqZWN0IGhhcyB0aGUgc2FtZVxuXHRcdCAqIHR5cGUgYW5kIHRleHQgcHJvcGVydGllcyBhcyB0aGUgc2VudCBpbiBub3RpZmljYXRpb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3R5cGU6IHN0cmluZywgdGV4dDogc3RyaW5nfSBhIC0gTmV3IG5vdGlmaWNhdGlvbiBhcmdzIG9iamVjdFxuXHRcdCAqIEBwYXJhbSB7Tm90aWZpY2F0aW9ufSBiIC0gT2xkIG5vdGlmaWNhdGlvblxuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGlzU2FtZU5vdGlmaWNhdGlvbihhLCBiKSB7XG5cdFx0XHRyZXR1cm4gYS50eXBlID09PSBiLnNldHRpbmdzLnR5cGUgJiYgYS50ZXh0ID09PSBiLnNldHRpbmdzLnRleHQ7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQ2hlY2tzIHRoYXQgdGhlIG5vdGlmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGEgcHJvZ3Jlc3NCYXJcblx0XHQgKiBvciB0aW1lb3VyIHByb3BlcnR5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtOb3RpZmljYXRpb259IG5vdGlmaWNhdGlvbiAtIE5vdGlmaWNhdGlvbiB0byBjaGVja1xuXHRcdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGlzUGxhaW5UZXh0Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbikge1xuXHRcdFx0cmV0dXJuICFub3RpZmljYXRpb24ucHJvZ3Jlc3NCYXIgJiYgIW5vdGlmaWNhdGlvbi50aW1lb3V0O1xuXHRcdH1cblxuXHRcdC8vc2VsZi5wb3NpdGlvbk5vdGlmaWNhdGlvbnMgPSBwb3NpdGlvbk5vdGlmaWNhdGlvbnM7XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2RvbS9Ob2RlUGF0aC5qc1xuXG4vKipcbiAqIE5vZGVQYXRoLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogSGFuZGxlcyBwYXRocyBvZiBub2RlcyB3aXRoaW4gYW4gZWxlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuZG9tLk5vZGVQYXRoXG4gKi9cbmRlZmluZShcInRpbnltY2UvZG9tL05vZGVQYXRoXCIsIFtcblx0XCJ0aW55bWNlL2RvbS9ET01VdGlsc1wiXG5dLCBmdW5jdGlvbihET01VdGlscykge1xuXHRmdW5jdGlvbiBjcmVhdGUocm9vdE5vZGUsIHRhcmdldE5vZGUsIG5vcm1hbGl6ZWQpIHtcblx0XHR2YXIgcGF0aCA9IFtdO1xuXG5cdFx0Zm9yICg7IHRhcmdldE5vZGUgJiYgdGFyZ2V0Tm9kZSAhPSByb290Tm9kZTsgdGFyZ2V0Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZSkge1xuXHRcdFx0cGF0aC5wdXNoKERPTVV0aWxzLm5vZGVJbmRleCh0YXJnZXROb2RlLCBub3JtYWxpemVkKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhdGg7XG5cdH1cblxuXHRmdW5jdGlvbiByZXNvbHZlKHJvb3ROb2RlLCBwYXRoKSB7XG5cdFx0dmFyIGksIG5vZGUsIGNoaWxkcmVuO1xuXG5cdFx0Zm9yIChub2RlID0gcm9vdE5vZGUsIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcblxuXHRcdFx0aWYgKHBhdGhbaV0gPiBjaGlsZHJlbi5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRub2RlID0gY2hpbGRyZW5bcGF0aFtpXV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGNyZWF0ZTogY3JlYXRlLFxuXHRcdHJlc29sdmU6IHJlc29sdmVcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9RdWlya3MuanNcblxuLyoqXG4gKiBRdWlya3MuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKlxuICogQGlnbm9yZS1maWxlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZpbGUgaW5jbHVkZXMgZml4ZXMgZm9yIHZhcmlvdXMgYnJvd3NlciBxdWlya3MgaXQncyBtYWRlIHRvIG1ha2UgaXQgZWFzeSB0byBhZGQvcmVtb3ZlIGJyb3dzZXIgc3BlY2lmaWMgZml4ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLnV0aWwuUXVpcmtzXG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9RdWlya3NcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9WS1wiLFxuXHRcInRpbnltY2UvZG9tL1JhbmdlVXRpbHNcIixcblx0XCJ0aW55bWNlL2RvbS9UcmVlV2Fsa2VyXCIsXG5cdFwidGlueW1jZS9kb20vTm9kZVBhdGhcIixcblx0XCJ0aW55bWNlL2h0bWwvTm9kZVwiLFxuXHRcInRpbnltY2UvaHRtbC9FbnRpdGllc1wiLFxuXHRcInRpbnltY2UvRW52XCIsXG5cdFwidGlueW1jZS91dGlsL1Rvb2xzXCIsXG5cdFwidGlueW1jZS91dGlsL0RlbGF5XCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldENvbnRhaW5lclwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRQb3NpdGlvblwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRXYWxrZXJcIlxuXSwgZnVuY3Rpb24oVkssIFJhbmdlVXRpbHMsIFRyZWVXYWxrZXIsIE5vZGVQYXRoLCBOb2RlLCBFbnRpdGllcywgRW52LCBUb29scywgRGVsYXksIENhcmV0Q29udGFpbmVyLCBDYXJldFBvc2l0aW9uLCBDYXJldFdhbGtlcikge1xuXHRyZXR1cm4gZnVuY3Rpb24oZWRpdG9yKSB7XG5cdFx0dmFyIGVhY2ggPSBUb29scy5lYWNoLCAkID0gZWRpdG9yLiQ7XG5cdFx0dmFyIEJBQ0tTUEFDRSA9IFZLLkJBQ0tTUEFDRSwgREVMRVRFID0gVksuREVMRVRFLCBkb20gPSBlZGl0b3IuZG9tLCBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLFxuXHRcdFx0c2V0dGluZ3MgPSBlZGl0b3Iuc2V0dGluZ3MsIHBhcnNlciA9IGVkaXRvci5wYXJzZXIsIHNlcmlhbGl6ZXIgPSBlZGl0b3Iuc2VyaWFsaXplcjtcblx0XHR2YXIgaXNHZWNrbyA9IEVudi5nZWNrbywgaXNJRSA9IEVudi5pZSwgaXNXZWJLaXQgPSBFbnYud2Via2l0O1xuXHRcdHZhciBtY2VJbnRlcm5hbFVybFByZWZpeCA9ICdkYXRhOnRleHQvbWNlLWludGVybmFsLCc7XG5cdFx0dmFyIG1jZUludGVybmFsRGF0YVR5cGUgPSBpc0lFID8gJ1RleHQnIDogJ1VSTCc7XG5cblx0XHQvKipcblx0XHQgKiBFeGVjdXRlcyBhIGNvbW1hbmQgd2l0aCBhIHNwZWNpZmljIHN0YXRlIHRoaXMgY2FuIGJlIHRvIGVuYWJsZS9kaXNhYmxlIGJyb3dzZXIgZWRpdGluZyBmZWF0dXJlcy5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBzZXRFZGl0b3JDb21tYW5kU3RhdGUoY21kLCBzdGF0ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZWRpdG9yLmdldERvYygpLmV4ZWNDb21tYW5kKGNtZCwgZmFsc2UsIHN0YXRlKTtcblx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdC8vIElnbm9yZVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgY3VycmVudCBJRSBkb2N1bWVudCBtb2RlLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGdldERvY3VtZW50TW9kZSgpIHtcblx0XHRcdHZhciBkb2N1bWVudE1vZGUgPSBlZGl0b3IuZ2V0RG9jKCkuZG9jdW1lbnRNb2RlO1xuXG5cdFx0XHRyZXR1cm4gZG9jdW1lbnRNb2RlID8gZG9jdW1lbnRNb2RlIDogNjtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIGV2ZW50IGlzIHByZXZlbnRlZCBvciBub3QuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSB7RXZlbnR9IGUgRXZlbnQgb2JqZWN0LlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIGV2ZW50IGlzIHByZXZlbnRlZCBvciBub3QuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gaXNEZWZhdWx0UHJldmVudGVkKGUpIHtcblx0XHRcdHJldHVybiBlLmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgVGV4dC9VUkwgZGF0YSBvbiB0aGUgZXZlbnQncyBkYXRhVHJhbnNmZXIgb2JqZWN0IHRvIGEgc3BlY2lhbCBkYXRhOnRleHQvbWNlLWludGVybmFsIHVybC5cblx0XHQgKiBUaGlzIGlzIHRvIHdvcmthcm91bmQgdGhlIGluYWJpbGl0eSB0byBzZXQgY3VzdG9tIGNvbnRlbnRUeXBlIG9uIElFIGFuZCBTYWZhcmkuXG5cdFx0ICogVGhlIGVkaXRvcidzIHNlbGVjdGVkIGNvbnRlbnQgaXMgZW5jb2RlZCBpbnRvIHRoaXMgdXJsIHNvIGRyYWcgYW5kIGRyb3AgYmV0d2VlbiBlZGl0b3JzIHdpbGwgd29yay5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtEcmFnRXZlbnR9IGUgRXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gc2V0TWNlSW50ZXJuYWxDb250ZW50KGUpIHtcblx0XHRcdHZhciBzZWxlY3Rpb25IdG1sLCBpbnRlcm5hbENvbnRlbnQ7XG5cblx0XHRcdGlmIChlLmRhdGFUcmFuc2Zlcikge1xuXHRcdFx0XHRpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIGUudGFyZ2V0LnRhZ05hbWUgPT0gJ0lNRycpIHtcblx0XHRcdFx0XHRzZWxlY3Rpb24uc2VsZWN0KGUudGFyZ2V0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGVjdGlvbkh0bWwgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldENvbnRlbnQoKTtcblxuXHRcdFx0XHQvLyBTYWZhcmkvSUUgZG9lc24ndCBzdXBwb3J0IGN1c3RvbSBkYXRhVHJhbnNmZXIgaXRlbXMgc28gd2UgY2FuIG9ubHkgdXNlIFVSTCBhbmQgVGV4dFxuXHRcdFx0XHRpZiAoc2VsZWN0aW9uSHRtbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWxDb250ZW50ID0gbWNlSW50ZXJuYWxVcmxQcmVmaXggKyBlc2NhcGUoZWRpdG9yLmlkKSArICcsJyArIGVzY2FwZShzZWxlY3Rpb25IdG1sKTtcblx0XHRcdFx0XHRlLmRhdGFUcmFuc2Zlci5zZXREYXRhKG1jZUludGVybmFsRGF0YVR5cGUsIGludGVybmFsQ29udGVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBHZXRzIGNvbnRlbnQgb2Ygc3BlY2lhbCBkYXRhOnRleHQvbWNlLWludGVybmFsIHVybCBvbiB0aGUgZXZlbnQncyBkYXRhVHJhbnNmZXIgb2JqZWN0LlxuXHRcdCAqIFRoaXMgaXMgdG8gd29ya2Fyb3VuZCB0aGUgaW5hYmlsaXR5IHRvIHNldCBjdXN0b20gY29udGVudFR5cGUgb24gSUUgYW5kIFNhZmFyaS5cblx0XHQgKiBUaGUgZWRpdG9yJ3Mgc2VsZWN0ZWQgY29udGVudCBpcyBlbmNvZGVkIGludG8gdGhpcyB1cmwgc28gZHJhZyBhbmQgZHJvcCBiZXR3ZWVuIGVkaXRvcnMgd2lsbCB3b3JrLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0ge0RyYWdFdmVudH0gZSBFdmVudCBvYmplY3Rcblx0XHQgKiBAcmV0dXJucyB7U3RyaW5nfSBtY2UtaW50ZXJuYWwgY29udGVudFxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGdldE1jZUludGVybmFsQ29udGVudChlKSB7XG5cdFx0XHR2YXIgaW50ZXJuYWxDb250ZW50O1xuXG5cdFx0XHRpZiAoZS5kYXRhVHJhbnNmZXIpIHtcblx0XHRcdFx0aW50ZXJuYWxDb250ZW50ID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YShtY2VJbnRlcm5hbERhdGFUeXBlKTtcblxuXHRcdFx0XHRpZiAoaW50ZXJuYWxDb250ZW50ICYmIGludGVybmFsQ29udGVudC5pbmRleE9mKG1jZUludGVybmFsVXJsUHJlZml4KSA+PSAwKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWxDb250ZW50ID0gaW50ZXJuYWxDb250ZW50LnN1YnN0cihtY2VJbnRlcm5hbFVybFByZWZpeC5sZW5ndGgpLnNwbGl0KCcsJyk7XG5cblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0aWQ6IHVuZXNjYXBlKGludGVybmFsQ29udGVudFswXSksXG5cdFx0XHRcdFx0XHRodG1sOiB1bmVzY2FwZShpbnRlcm5hbENvbnRlbnRbMV0pXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBJbnNlcnRzIGNvbnRlbnRzIHVzaW5nIHRoZSBwYXN0ZSBjbGlwYm9hcmQgY29tbWFuZCBpZiBpdCdzIGF2YWlsYWJsZSBpZiBpdCBpc24ndCBpdCB3aWxsIGZhbGxiYWNrXG5cdFx0ICogdG8gdGhlIGNvcmUgY29tbWFuZC5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnQgQ29udGVudCB0byBpbnNlcnQgYXQgc2VsZWN0aW9uLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGluc2VydENsaXBib2FyZENvbnRlbnRzKGNvbnRlbnQpIHtcblx0XHRcdGlmIChlZGl0b3IucXVlcnlDb21tYW5kU3VwcG9ydGVkKCdtY2VJbnNlcnRDbGlwYm9hcmRDb250ZW50JykpIHtcblx0XHRcdFx0ZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRDbGlwYm9hcmRDb250ZW50JywgZmFsc2UsIHtjb250ZW50OiBjb250ZW50fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydENvbnRlbnQnLCBmYWxzZSwgY29udGVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRml4ZXMgYSBXZWJLaXQgYnVnIHdoZW4gZGVsZXRpbmcgY29udGVudHMgdXNpbmcgYmFja3NwYWNlIG9yIGRlbGV0ZSBrZXkuXG5cdFx0ICogV2ViS2l0IHdpbGwgcHJvZHVjZSBhIHNwYW4gZWxlbWVudCBpZiB5b3UgZGVsZXRlIGFjcm9zcyB0d28gYmxvY2sgZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBFeGFtcGxlOlxuXHRcdCAqIDxoMT5hPC9oMT48cD58YjwvcD5cblx0XHQgKlxuXHRcdCAqIFdpbGwgcHJvZHVjZSB0aGlzIG9uIGJhY2tzcGFjZTpcblx0XHQgKiA8aDE+YTxzcGFuIHN0eWxlPVwiPGFsbCBydW50aW1lIHN0eWxlcz5cIj5iPC9zcGFuPjwvcD5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZml4ZXMgdGhlIGJhY2tzcGFjZSB0byBwcm9kdWNlOlxuXHRcdCAqIDxoMT5hfGI8L3A+XG5cdFx0ICpcblx0XHQgKiBTZWUgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3ODRcblx0XHQgKlxuXHRcdCAqIFRoaXMgZml4ZXMgdGhlIGZvbGxvd2luZyBkZWxldGUgc2NlbmFyaW9zOlxuXHRcdCAqICAxLiBEZWxldGUgYnkgcHJlc3NpbmcgYmFja3NwYWNlIGtleS5cblx0XHQgKiAgMi4gRGVsZXRlIGJ5IHByZXNzaW5nIGRlbGV0ZSBrZXkuXG5cdFx0ICogIDMuIERlbGV0ZSBieSBwcmVzc2luZyBiYWNrc3BhY2Uga2V5IHdpdGggY3RybC9jbWQgKFdvcmQgZGVsZXRlKS5cblx0XHQgKiAgNC4gRGVsZXRlIGJ5IHByZXNzaW5nIGRlbGV0ZSBrZXkgd2l0aCBjdHJsL2NtZCAoV29yZCBkZWxldGUpLlxuXHRcdCAqICA1LiBEZWxldGUgYnkgZHJhZy9kcm9wcGluZyBjb250ZW50cyBpbnNpZGUgdGhlIGVkaXRvci5cblx0XHQgKiAgNi4gRGVsZXRlIGJ5IHVzaW5nIEN1dCBDdHJsK1gvQ21kK1guXG5cdFx0ICogIDcuIERlbGV0ZSBieSBzZWxlY3RpbmcgY29udGVudHMgYW5kIHdyaXRpbmcgYSBjaGFyYWN0ZXIuXG5cdFx0ICpcblx0XHQgKiBUaGlzIGNvZGUgaXMgYSB1Z2x5IGhhY2sgc2luY2Ugd3JpdGluZyBmdWxsIGN1c3RvbSBkZWxldGUgbG9naWMgZm9yIGp1c3QgdGhpcyBidWdcblx0XHQgKiBmaXggc2VlbWVkIGxpa2UgYSBodWdlIHRhc2suIEkgaG9wZSB3ZSBjYW4gcmVtb3ZlIHRoaXMgYmVmb3JlIHRoZSB5ZWFyIDIwMzAuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gY2xlYW51cFN0eWxlc1doZW5EZWxldGluZygpIHtcblx0XHRcdHZhciBkb2MgPSBlZGl0b3IuZ2V0RG9jKCksIGRvbSA9IGVkaXRvci5kb20sIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247XG5cdFx0XHR2YXIgTXV0YXRpb25PYnNlcnZlciA9IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyLCBvbGRlcldlYktpdCwgZHJhZ1N0YXJ0Um5nO1xuXG5cdFx0XHQvLyBBZGQgbWluaSBwb2x5ZmlsbCBmb3Igb2xkZXIgV2ViS2l0c1xuXHRcdFx0Ly8gVE9ETzogUmVtb3ZlIHRoaXMgd2hlbiBvbGQgU2FmYXJpIHZlcnNpb25zIGdldHMgdXBkYXRlZFxuXHRcdFx0aWYgKCFNdXRhdGlvbk9ic2VydmVyKSB7XG5cdFx0XHRcdG9sZGVyV2ViS2l0ID0gdHJ1ZTtcblxuXHRcdFx0XHRNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIHJlY29yZHMgPSBbXSwgdGFyZ2V0O1xuXG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9kZUluc2VydChlKSB7XG5cdFx0XHRcdFx0XHR2YXIgdGFyZ2V0ID0gZS5yZWxhdGVkTm9kZSB8fCBlLnRhcmdldDtcblx0XHRcdFx0XHRcdHJlY29yZHMucHVzaCh7dGFyZ2V0OiB0YXJnZXQsIGFkZGVkTm9kZXM6IFt0YXJnZXRdfSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZnVuY3Rpb24gYXR0ck1vZGlmaWVkKGUpIHtcblx0XHRcdFx0XHRcdHZhciB0YXJnZXQgPSBlLnJlbGF0ZWROb2RlIHx8IGUudGFyZ2V0O1xuXHRcdFx0XHRcdFx0cmVjb3Jkcy5wdXNoKHt0YXJnZXQ6IHRhcmdldCwgYXR0cmlidXRlTmFtZTogZS5hdHRyTmFtZX0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMub2JzZXJ2ZSA9IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHRcdHRhcmdldCA9IG5vZGU7XG5cdFx0XHRcdFx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywgbm9kZUluc2VydCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCcsIG5vZGVJbnNlcnQsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdET01Ob2RlSW5zZXJ0ZWQnLCBub2RlSW5zZXJ0LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQXR0ck1vZGlmaWVkJywgYXR0ck1vZGlmaWVkLCBmYWxzZSk7XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdHRoaXMuZGlzY29ubmVjdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIG5vZGVJbnNlcnQsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQnLCBub2RlSW5zZXJ0LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHR0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NTm9kZUluc2VydGVkJywgbm9kZUluc2VydCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTUF0dHJNb2RpZmllZCcsIGF0dHJNb2RpZmllZCwgZmFsc2UpO1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHR0aGlzLnRha2VSZWNvcmRzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVjb3Jkcztcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBpc1RyYWlsaW5nQnIobm9kZSkge1xuXHRcdFx0XHR2YXIgYmxvY2tFbGVtZW50cyA9IGRvbS5zY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpLCByb290Tm9kZSA9IGVkaXRvci5nZXRCb2R5KCk7XG5cblx0XHRcdFx0aWYgKG5vZGUubm9kZU5hbWUgIT0gJ0JSJykge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoOyBub2RlICE9IHJvb3ROb2RlICYmICFibG9ja0VsZW1lbnRzW25vZGUubm9kZU5hbWVdOyBub2RlID0gbm9kZS5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdFx0aWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gaXNTaWJsaW5nc0lnbm9yZVdoaXRlU3BhY2Uobm9kZTEsIG5vZGUyKSB7XG5cdFx0XHRcdHZhciBub2RlO1xuXG5cdFx0XHRcdGZvciAobm9kZSA9IG5vZGUxLm5leHRTaWJsaW5nOyBub2RlICYmIG5vZGUgIT0gbm9kZTI7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdFx0aWYgKG5vZGUubm9kZVR5cGUgPT0gMyAmJiAkLnRyaW0obm9kZS5kYXRhKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChub2RlICE9PSBub2RlMikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBub2RlID09PSBub2RlMjtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZmluZENhcmV0Tm9kZShub2RlLCBmb3J3YXJkLCBzdGFydE5vZGUpIHtcblx0XHRcdFx0dmFyIHdhbGtlciwgY3VycmVudCwgbm9uRW1wdHlFbGVtZW50cztcblxuXHRcdFx0XHQvLyBQcm90ZWN0IGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5IHdlIGFyZSBhc2tlZCB0byBmaW5kIGEgY2FyZXQgbm9kZSByZWxhdGl2ZVxuXHRcdFx0XHQvLyB0byBhIG5vZGUgdGhhdCBpcyBubyBsb25nZXIgaW4gdGhlIERPTSB0cmVlLiBJbiB0aGlzIGNhc2UgYXR0ZW1wdGluZyB0b1xuXHRcdFx0XHQvLyBzZWxlY3Qgb24gYW55IG1hdGNoIGxlYWRzIHRvIGEgc2NlbmFyaW8gd2hlcmUgc2VsZWN0aW9uIGlzIGNvbXBsZXRlbHkgcmVtb3ZlZFxuXHRcdFx0XHQvLyBmcm9tIHRoZSBlZGl0b3IuIFRoaXMgc2NlbmFyaW8gaXMgbWV0IGluIHJlYWwgd29ybGQgYXQgYSBtaW5pbXVtIG9uXG5cdFx0XHRcdC8vIFdlYktpdCBicm93c2VycyB3aGVuIHNlbGVjdGluZyBhbGwgYW5kIENtZC1YIGN1dHRpbmcgdG8gZGVsZXRlIGNvbnRlbnQuXG5cdFx0XHRcdGlmICghZG9tLmlzQ2hpbGRPZihub2RlLCBlZGl0b3IuZ2V0Qm9keSgpKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG5vbkVtcHR5RWxlbWVudHMgPSBkb20uc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKTtcblxuXHRcdFx0XHR3YWxrZXIgPSBuZXcgVHJlZVdhbGtlcihzdGFydE5vZGUgfHwgbm9kZSwgbm9kZSk7XG5cblx0XHRcdFx0d2hpbGUgKChjdXJyZW50ID0gd2Fsa2VyW2ZvcndhcmQgPyAnbmV4dCcgOiAncHJldiddKCkpKSB7XG5cdFx0XHRcdFx0aWYgKG5vbkVtcHR5RWxlbWVudHNbY3VycmVudC5ub2RlTmFtZV0gJiYgIWlzVHJhaWxpbmdCcihjdXJyZW50KSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN1cnJlbnQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnQubm9kZVR5cGUgPT0gMyAmJiBjdXJyZW50LmRhdGEubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN1cnJlbnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGRlbGV0ZVJhbmdlQmV0d2VlblRleHRCbG9ja3Mocm5nKSB7XG5cdFx0XHRcdHZhciBzdGFydEJsb2NrLCBlbmRCbG9jaywgY2FyZXROb2RlQmVmb3JlLCBjYXJldE5vZGVBZnRlciwgdGV4dEJsb2NrRWxlbWVudHM7XG5cblx0XHRcdFx0aWYgKHJuZy5jb2xsYXBzZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGFydEJsb2NrID0gZG9tLmdldFBhcmVudChSYW5nZVV0aWxzLmdldE5vZGUocm5nLnN0YXJ0Q29udGFpbmVyLCBybmcuc3RhcnRPZmZzZXQpLCBkb20uaXNCbG9jayk7XG5cdFx0XHRcdGVuZEJsb2NrID0gZG9tLmdldFBhcmVudChSYW5nZVV0aWxzLmdldE5vZGUocm5nLmVuZENvbnRhaW5lciwgcm5nLmVuZE9mZnNldCksIGRvbS5pc0Jsb2NrKTtcblx0XHRcdFx0dGV4dEJsb2NrRWxlbWVudHMgPSBlZGl0b3Iuc2NoZW1hLmdldFRleHRCbG9ja0VsZW1lbnRzKCk7XG5cblx0XHRcdFx0aWYgKHN0YXJ0QmxvY2sgPT0gZW5kQmxvY2spIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXRleHRCbG9ja0VsZW1lbnRzW3N0YXJ0QmxvY2subm9kZU5hbWVdIHx8ICF0ZXh0QmxvY2tFbGVtZW50c1tlbmRCbG9jay5ub2RlTmFtZV0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZG9tLmdldENvbnRlbnRFZGl0YWJsZShzdGFydEJsb2NrKSA9PT0gXCJmYWxzZVwiIHx8IGRvbS5nZXRDb250ZW50RWRpdGFibGUoZW5kQmxvY2spID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRybmcuZGVsZXRlQ29udGVudHMoKTtcblxuXHRcdFx0XHRjYXJldE5vZGVCZWZvcmUgPSBmaW5kQ2FyZXROb2RlKHN0YXJ0QmxvY2ssIGZhbHNlKTtcblx0XHRcdFx0Y2FyZXROb2RlQWZ0ZXIgPSBmaW5kQ2FyZXROb2RlKGVuZEJsb2NrLCB0cnVlKTtcblxuXHRcdFx0XHRpZiAoIWRvbS5pc0VtcHR5KGVuZEJsb2NrKSkge1xuXHRcdFx0XHRcdCQoc3RhcnRCbG9jaykuYXBwZW5kKGVuZEJsb2NrLmNoaWxkTm9kZXMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JChlbmRCbG9jaykucmVtb3ZlKCk7XG5cblx0XHRcdFx0aWYgKGNhcmV0Tm9kZUJlZm9yZSkge1xuXHRcdFx0XHRcdGlmIChjYXJldE5vZGVCZWZvcmUubm9kZVR5cGUgPT0gMSkge1xuXHRcdFx0XHRcdFx0aWYgKGNhcmV0Tm9kZUJlZm9yZS5ub2RlTmFtZSA9PSBcIkJSXCIpIHtcblx0XHRcdFx0XHRcdFx0cm5nLnNldFN0YXJ0QmVmb3JlKGNhcmV0Tm9kZUJlZm9yZSk7XG5cdFx0XHRcdFx0XHRcdHJuZy5zZXRFbmRCZWZvcmUoY2FyZXROb2RlQmVmb3JlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEFmdGVyKGNhcmV0Tm9kZUJlZm9yZSk7XG5cdFx0XHRcdFx0XHRcdHJuZy5zZXRFbmRBZnRlcihjYXJldE5vZGVCZWZvcmUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRybmcuc2V0U3RhcnQoY2FyZXROb2RlQmVmb3JlLCBjYXJldE5vZGVCZWZvcmUuZGF0YS5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0cm5nLnNldEVuZChjYXJldE5vZGVCZWZvcmUsIGNhcmV0Tm9kZUJlZm9yZS5kYXRhLmxlbmd0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGNhcmV0Tm9kZUFmdGVyKSB7XG5cdFx0XHRcdFx0aWYgKGNhcmV0Tm9kZUFmdGVyLm5vZGVUeXBlID09IDEpIHtcblx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEJlZm9yZShjYXJldE5vZGVBZnRlcik7XG5cdFx0XHRcdFx0XHRybmcuc2V0RW5kQmVmb3JlKGNhcmV0Tm9kZUFmdGVyKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cm5nLnNldFN0YXJ0KGNhcmV0Tm9kZUFmdGVyLCAwKTtcblx0XHRcdFx0XHRcdHJuZy5zZXRFbmQoY2FyZXROb2RlQWZ0ZXIsIDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcocm5nKTtcblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZXhwYW5kQmV0d2VlbkJsb2NrcyhybmcsIGlzRm9yd2FyZCkge1xuXHRcdFx0XHR2YXIgY2FyZXROb2RlLCB0YXJnZXRDYXJldE5vZGUsIHRleHRCbG9jaywgdGFyZ2V0VGV4dEJsb2NrLCBjb250YWluZXIsIG9mZnNldDtcblxuXHRcdFx0XHRpZiAoIXJuZy5jb2xsYXBzZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuXHRcdFx0XHRvZmZzZXQgPSBybmcuc3RhcnRPZmZzZXQ7XG5cblx0XHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0aWYgKGlzRm9yd2FyZCkge1xuXHRcdFx0XHRcdFx0aWYgKG9mZnNldCA8IGNvbnRhaW5lci5kYXRhLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhcmV0Tm9kZSA9IFJhbmdlVXRpbHMuZ2V0Tm9kZShjb250YWluZXIsIG9mZnNldCk7XG5cdFx0XHRcdHRleHRCbG9jayA9IGRvbS5nZXRQYXJlbnQoY2FyZXROb2RlLCBkb20uaXNCbG9jayk7XG5cdFx0XHRcdHRhcmdldENhcmV0Tm9kZSA9IGZpbmRDYXJldE5vZGUoZWRpdG9yLmdldEJvZHkoKSwgaXNGb3J3YXJkLCBjYXJldE5vZGUpO1xuXHRcdFx0XHR0YXJnZXRUZXh0QmxvY2sgPSBkb20uZ2V0UGFyZW50KHRhcmdldENhcmV0Tm9kZSwgZG9tLmlzQmxvY2spO1xuXHRcdFx0XHR2YXIgaXNBZnRlciA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSAmJiBvZmZzZXQgPiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuXG5cdFx0XHRcdGlmICghY2FyZXROb2RlIHx8ICF0YXJnZXRDYXJldE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldFRleHRCbG9jayAmJiB0ZXh0QmxvY2sgIT0gdGFyZ2V0VGV4dEJsb2NrKSB7XG5cdFx0XHRcdFx0aWYgKCFpc0ZvcndhcmQpIHtcblx0XHRcdFx0XHRcdGlmICghaXNTaWJsaW5nc0lnbm9yZVdoaXRlU3BhY2UodGFyZ2V0VGV4dEJsb2NrLCB0ZXh0QmxvY2spKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBybmc7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICh0YXJnZXRDYXJldE5vZGUubm9kZVR5cGUgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGFyZ2V0Q2FyZXROb2RlLm5vZGVOYW1lID09IFwiQlJcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEJlZm9yZSh0YXJnZXRDYXJldE5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEFmdGVyKHRhcmdldENhcmV0Tm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydCh0YXJnZXRDYXJldE5vZGUsIHRhcmdldENhcmV0Tm9kZS5kYXRhLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChjYXJldE5vZGUubm9kZVR5cGUgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXNBZnRlcikge1xuXHRcdFx0XHRcdFx0XHRcdHJuZy5zZXRFbmRBZnRlcihjYXJldE5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJuZy5zZXRFbmRCZWZvcmUoY2FyZXROb2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cm5nLnNldEVuZEJlZm9yZShjYXJldE5vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIWlzU2libGluZ3NJZ25vcmVXaGl0ZVNwYWNlKHRleHRCbG9jaywgdGFyZ2V0VGV4dEJsb2NrKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoY2FyZXROb2RlLm5vZGVUeXBlID09IDEpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGNhcmV0Tm9kZS5ub2RlTmFtZSA9PSBcIkJSXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRybmcuc2V0U3RhcnRCZWZvcmUoY2FyZXROb2RlKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRybmcuc2V0U3RhcnRBZnRlcihjYXJldE5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRybmcuc2V0U3RhcnQoY2FyZXROb2RlLCBjYXJldE5vZGUuZGF0YS5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0Q2FyZXROb2RlLm5vZGVUeXBlID09IDEpIHtcblx0XHRcdFx0XHRcdFx0cm5nLnNldEVuZCh0YXJnZXRDYXJldE5vZGUsIDApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cm5nLnNldEVuZEJlZm9yZSh0YXJnZXRDYXJldE5vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBybmc7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGhhbmRsZVRleHRCbG9ja01lcmdlRGVsZXRlKGlzRm9yd2FyZCkge1xuXHRcdFx0XHR2YXIgcm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuXG5cdFx0XHRcdHJuZyA9IGV4cGFuZEJldHdlZW5CbG9ja3Mocm5nLCBpc0ZvcndhcmQpO1xuXG5cdFx0XHRcdGlmIChkZWxldGVSYW5nZUJldHdlZW5UZXh0QmxvY2tzKHJuZykpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFRoaXMgcmV0YWlucyB0aGUgZm9ybWF0dGluZyBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgdG8gYmUgZGVsZXRlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBCYWNrc3BhY2Ugb24gdGhpczogPHA+PGI+PGk+YXw8L2k+PC9iPjwvcD4gd291bGQgYmVjb21lIDxwPnw8L3A+IGluIFdlYktpdC5cblx0XHRcdCAqIFdpdGggdGhpcyBwYXRjaDogPHA+PGI+PGk+fDxicj48L2k+PC9iPjwvcD5cblx0XHRcdCAqL1xuXHRcdFx0ZnVuY3Rpb24gaGFuZGxlTGFzdEJsb2NrQ2hhcmFjdGVyRGVsZXRlKGlzRm9yd2FyZCwgcm5nKSB7XG5cdFx0XHRcdHZhciBwYXRoLCBibG9ja0VsbSwgbmV3QmxvY2tFbG0sIGNsb25lZEJsb2NrRWxtLCBzaWJsaW5nLFxuXHRcdFx0XHRcdGNvbnRhaW5lciwgb2Zmc2V0LCBiciwgY3VycmVudEZvcm1hdE5vZGVzO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIGNsb25lVGV4dEJsb2NrV2l0aEZvcm1hdHMoYmxvY2tFbG0sIG5vZGUpIHtcblx0XHRcdFx0XHRjdXJyZW50Rm9ybWF0Tm9kZXMgPSAkKG5vZGUpLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oaWR4LCBub2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gISFlZGl0b3Iuc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpW25vZGUubm9kZU5hbWVdO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0bmV3QmxvY2tFbG0gPSBibG9ja0VsbS5jbG9uZU5vZGUoZmFsc2UpO1xuXG5cdFx0XHRcdFx0Y3VycmVudEZvcm1hdE5vZGVzID0gVG9vbHMubWFwKGN1cnJlbnRGb3JtYXROb2RlcywgZnVuY3Rpb24oZm9ybWF0Tm9kZSkge1xuXHRcdFx0XHRcdFx0Zm9ybWF0Tm9kZSA9IGZvcm1hdE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0aWYgKG5ld0Jsb2NrRWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRmb3JtYXROb2RlLmFwcGVuZENoaWxkKG5ld0Jsb2NrRWxtLmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHRcdFx0XHRuZXdCbG9ja0VsbS5hcHBlbmRDaGlsZChmb3JtYXROb2RlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG5ld0Jsb2NrRWxtLmFwcGVuZENoaWxkKGZvcm1hdE5vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRuZXdCbG9ja0VsbS5hcHBlbmRDaGlsZChmb3JtYXROb2RlKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGZvcm1hdE5vZGU7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAoY3VycmVudEZvcm1hdE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0YnIgPSBkb20uY3JlYXRlKCdicicpO1xuXHRcdFx0XHRcdFx0Y3VycmVudEZvcm1hdE5vZGVzWzBdLmFwcGVuZENoaWxkKGJyKTtcblx0XHRcdFx0XHRcdGRvbS5yZXBsYWNlKG5ld0Jsb2NrRWxtLCBibG9ja0VsbSk7XG5cblx0XHRcdFx0XHRcdHJuZy5zZXRTdGFydEJlZm9yZShicik7XG5cdFx0XHRcdFx0XHRybmcuc2V0RW5kQmVmb3JlKGJyKTtcblx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBicjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZ1bmN0aW9uIGlzVGV4dEJsb2NrKG5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBlZGl0b3Iuc2NoZW1hLmdldFRleHRCbG9ja0VsZW1lbnRzKClbbm9kZS50YWdOYW1lXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghcm5nLmNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcblx0XHRcdFx0b2Zmc2V0ID0gcm5nLnN0YXJ0T2Zmc2V0O1xuXHRcdFx0XHRibG9ja0VsbSA9IGRvbS5nZXRQYXJlbnQoY29udGFpbmVyLCBkb20uaXNCbG9jayk7XG5cdFx0XHRcdGlmICghaXNUZXh0QmxvY2soYmxvY2tFbG0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAxKSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyID0gY29udGFpbmVyLmNoaWxkTm9kZXNbb2Zmc2V0XTtcblx0XHRcdFx0XHRpZiAoY29udGFpbmVyICYmIGNvbnRhaW5lci50YWdOYW1lICE9ICdCUicpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNGb3J3YXJkKSB7XG5cdFx0XHRcdFx0XHRzaWJsaW5nID0gYmxvY2tFbG0ubmV4dFNpYmxpbmc7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNpYmxpbmcgPSBibG9ja0VsbS5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRvbS5pc0VtcHR5KGJsb2NrRWxtKSAmJiBpc1RleHRCbG9jayhzaWJsaW5nKSAmJiBkb20uaXNFbXB0eShzaWJsaW5nKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNsb25lVGV4dEJsb2NrV2l0aEZvcm1hdHMoYmxvY2tFbG0sIGNvbnRhaW5lcikpIHtcblx0XHRcdFx0XHRcdFx0ZG9tLnJlbW92ZShzaWJsaW5nKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0cGF0aCA9IE5vZGVQYXRoLmNyZWF0ZShibG9ja0VsbSwgY29udGFpbmVyKTtcblx0XHRcdFx0XHRjbG9uZWRCbG9ja0VsbSA9IGJsb2NrRWxtLmNsb25lTm9kZSh0cnVlKTtcblx0XHRcdFx0XHRjb250YWluZXIgPSBOb2RlUGF0aC5yZXNvbHZlKGNsb25lZEJsb2NrRWxtLCBwYXRoKTtcblxuXHRcdFx0XHRcdGlmIChpc0ZvcndhcmQpIHtcblx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPj0gY29udGFpbmVyLmRhdGEubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29udGFpbmVyLmRlbGV0ZURhdGEob2Zmc2V0LCAxKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKG9mZnNldCA8PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29udGFpbmVyLmRlbGV0ZURhdGEob2Zmc2V0IC0gMSwgMSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRvbS5pc0VtcHR5KGNsb25lZEJsb2NrRWxtKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNsb25lVGV4dEJsb2NrV2l0aEZvcm1hdHMoYmxvY2tFbG0sIGNvbnRhaW5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGN1c3RvbURlbGV0ZShpc0ZvcndhcmQpIHtcblx0XHRcdFx0dmFyIG11dGF0aW9uT2JzZXJ2ZXIsIHJuZywgY2FyZXRFbGVtZW50O1xuXG5cdFx0XHRcdGlmIChoYW5kbGVUZXh0QmxvY2tNZXJnZURlbGV0ZShpc0ZvcndhcmQpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0VG9vbHMuZWFjaChlZGl0b3IuZ2V0Qm9keSgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyksIGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0XHRcdC8vIE1hcmsgZXhpc3Rpbmcgc3BhbnNcblx0XHRcdFx0XHRpZiAoZWxtLnRhZ05hbWUgPT0gJ1NQQU4nKSB7XG5cdFx0XHRcdFx0XHRlbG0uc2V0QXR0cmlidXRlKCdtY2UtZGF0YS1tYXJrZWQnLCAxKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBNYWtlIHN1cmUgYWxsIGVsZW1lbnRzIGhhcyBhIGRhdGEtbWNlLXN0eWxlIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdGlmICghZWxtLmhhc0F0dHJpYnV0ZSgnZGF0YS1tY2Utc3R5bGUnKSAmJiBlbG0uaGFzQXR0cmlidXRlKCdzdHlsZScpKSB7XG5cdFx0XHRcdFx0XHRlZGl0b3IuZG9tLnNldEF0dHJpYihlbG0sICdzdHlsZScsIGVkaXRvci5kb20uZ2V0QXR0cmliKGVsbSwgJ3N0eWxlJykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gT2JzZXJ2ZSBhZGRlZCBub2RlcyBhbmQgc3R5bGUgYXR0cmlidXRlIGNoYW5nZXNcblx0XHRcdFx0bXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCkge30pO1xuXHRcdFx0XHRtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoZWRpdG9yLmdldERvYygpLCB7XG5cdFx0XHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHRcdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFsnc3R5bGUnXVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRlZGl0b3IuZ2V0RG9jKCkuZXhlY0NvbW1hbmQoaXNGb3J3YXJkID8gJ0ZvcndhcmREZWxldGUnIDogJ0RlbGV0ZScsIGZhbHNlLCBudWxsKTtcblxuXHRcdFx0XHRybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuXHRcdFx0XHRjYXJldEVsZW1lbnQgPSBybmcuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTtcblxuXHRcdFx0XHRUb29scy5lYWNoKG11dGF0aW9uT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSwgZnVuY3Rpb24ocmVjb3JkKSB7XG5cdFx0XHRcdFx0aWYgKCFkb20uaXNDaGlsZE9mKHJlY29yZC50YXJnZXQsIGVkaXRvci5nZXRCb2R5KCkpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUmVzdG9yZSBzdHlsZSBhdHRyaWJ1dGUgdG8gcHJldmlvdXMgdmFsdWVcblx0XHRcdFx0XHRpZiAocmVjb3JkLmF0dHJpYnV0ZU5hbWUgPT0gXCJzdHlsZVwiKSB7XG5cdFx0XHRcdFx0XHR2YXIgb2xkVmFsdWUgPSByZWNvcmQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1tY2Utc3R5bGUnKTtcblxuXHRcdFx0XHRcdFx0aWYgKG9sZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgb2xkVmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVjb3JkLnRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBSZW1vdmUgYWxsIHNwYW5zIHRoYXQgYXJlbid0IG1hcmtlZCBhbmQgcmV0YWluIHNlbGVjdGlvblxuXHRcdFx0XHRcdFRvb2xzLmVhY2gocmVjb3JkLmFkZGVkTm9kZXMsIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID09IFwiU1BBTlwiICYmICFub2RlLmdldEF0dHJpYnV0ZSgnbWNlLWRhdGEtbWFya2VkJykpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG9mZnNldCwgY29udGFpbmVyO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChub2RlID09IGNhcmV0RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdG9mZnNldCA9IHJuZy5zdGFydE9mZnNldDtcblx0XHRcdFx0XHRcdFx0XHRjb250YWluZXIgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRkb20ucmVtb3ZlKG5vZGUsIHRydWUpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChjb250YWluZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRybmcuc2V0U3RhcnQoY29udGFpbmVyLCBvZmZzZXQpO1xuXHRcdFx0XHRcdFx0XHRcdHJuZy5zZXRFbmQoY29udGFpbmVyLCBvZmZzZXQpO1xuXHRcdFx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSBsZWZ0IG92ZXIgbWFya3Ncblx0XHRcdFx0VG9vbHMuZWFjaChlZGl0b3IuZG9tLnNlbGVjdCgnc3BhblttY2UtZGF0YS1tYXJrZWRdJyksIGZ1bmN0aW9uKHNwYW4pIHtcblx0XHRcdFx0XHRzcGFuLnJlbW92ZUF0dHJpYnV0ZSgnbWNlLWRhdGEtbWFya2VkJyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiB0cmFuc2FjdEN1c3RvbURlbGV0ZShpc0ZvcndhcmQpIHtcblx0XHRcdFx0ZWRpdG9yLnVuZG9NYW5hZ2VyLnRyYW5zYWN0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRjdXN0b21EZWxldGUoaXNGb3J3YXJkKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGVkaXRvci5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGlzRm9yd2FyZCA9IGUua2V5Q29kZSA9PSBERUxFVEUsIGlzTWV0YU9yQ3RybCA9IGUuY3RybEtleSB8fCBlLm1ldGFLZXk7XG5cblx0XHRcdFx0aWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgKGlzRm9yd2FyZCB8fCBlLmtleUNvZGUgPT0gQkFDS1NQQUNFKSkge1xuXHRcdFx0XHRcdHZhciBybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpLCBjb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXIsIG9mZnNldCA9IHJuZy5zdGFydE9mZnNldDtcblxuXHRcdFx0XHRcdC8vIFNoaWZ0K0RlbGV0ZSBpcyBjdXRcblx0XHRcdFx0XHRpZiAoaXNGb3J3YXJkICYmIGUuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaGFuZGxlTGFzdEJsb2NrQ2hhcmFjdGVyRGVsZXRlKGlzRm9yd2FyZCwgcm5nKSkge1xuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIElnbm9yZSBub24gbWV0YSBkZWxldGUgaW4gdGhlIHdoZXJlIHRoZXJlIGlzIHRleHQgYmVmb3JlL2FmdGVyIHRoZSBjYXJldFxuXHRcdFx0XHRcdGlmICghaXNNZXRhT3JDdHJsICYmIHJuZy5jb2xsYXBzZWQgJiYgY29udGFpbmVyLm5vZGVUeXBlID09IDMpIHtcblx0XHRcdFx0XHRcdGlmIChpc0ZvcndhcmQgPyBvZmZzZXQgPCBjb250YWluZXIuZGF0YS5sZW5ndGggOiBvZmZzZXQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRpZiAoaXNNZXRhT3JDdHJsKSB7XG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbCgpLm1vZGlmeShcImV4dGVuZFwiLCBpc0ZvcndhcmQgPyBcImZvcndhcmRcIiA6IFwiYmFja3dhcmRcIiwgZS5tZXRhS2V5ID8gXCJsaW5lYm91bmRhcnlcIiA6IFwid29yZFwiKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjdXN0b21EZWxldGUoaXNGb3J3YXJkKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEhhbmRsZSBjYXNlIHdoZXJlIHRleHQgaXMgZGVsZXRlZCBieSB0eXBpbmcgb3ZlclxuXHRcdFx0ZWRpdG9yLm9uKCdrZXlwcmVzcycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIGUuY2hhckNvZGUgPiAzMSAmJiAhVksubWV0YUtleVByZXNzZWQoZSkpIHtcblx0XHRcdFx0XHR2YXIgcm5nLCBjdXJyZW50Rm9ybWF0Tm9kZXMsIGZyYWdtZW50Tm9kZSwgYmxvY2tQYXJlbnQsIGNhcmV0Tm9kZSwgY2hhclRleHQ7XG5cblx0XHRcdFx0XHRybmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuXHRcdFx0XHRcdGNoYXJUZXh0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlKTtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHRyYWNrIG9mIGN1cnJlbnQgZm9ybWF0IG5vZGVzXG5cdFx0XHRcdFx0Y3VycmVudEZvcm1hdE5vZGVzID0gJChybmcuc3RhcnRDb250YWluZXIpLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oaWR4LCBub2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gISFlZGl0b3Iuc2NoZW1hLmdldFRleHRJbmxpbmVFbGVtZW50cygpW25vZGUubm9kZU5hbWVdO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Y3VzdG9tRGVsZXRlKHRydWUpO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGJyb3dzZXIgcmVtb3ZlZCB0aGVtXG5cdFx0XHRcdFx0Y3VycmVudEZvcm1hdE5vZGVzID0gY3VycmVudEZvcm1hdE5vZGVzLmZpbHRlcihmdW5jdGlvbihpZHgsIG5vZGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhJC5jb250YWlucyhlZGl0b3IuZ2V0Qm9keSgpLCBub2RlKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIFRoZW4gcmUtYWRkIHRoZW1cblx0XHRcdFx0XHRpZiAoY3VycmVudEZvcm1hdE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ZnJhZ21lbnROb2RlID0gZG9tLmNyZWF0ZUZyYWdtZW50KCk7XG5cblx0XHRcdFx0XHRcdGN1cnJlbnRGb3JtYXROb2Rlcy5lYWNoKGZ1bmN0aW9uKGlkeCwgZm9ybWF0Tm9kZSkge1xuXHRcdFx0XHRcdFx0XHRmb3JtYXROb2RlID0gZm9ybWF0Tm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChmcmFnbWVudE5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0Tm9kZS5hcHBlbmRDaGlsZChmcmFnbWVudE5vZGUuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdFx0XHRcdFx0ZnJhZ21lbnROb2RlLmFwcGVuZENoaWxkKGZvcm1hdE5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNhcmV0Tm9kZSA9IGZvcm1hdE5vZGU7XG5cdFx0XHRcdFx0XHRcdFx0ZnJhZ21lbnROb2RlLmFwcGVuZENoaWxkKGZvcm1hdE5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0ZnJhZ21lbnROb2RlLmFwcGVuZENoaWxkKGZvcm1hdE5vZGUpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGNhcmV0Tm9kZS5hcHBlbmRDaGlsZChlZGl0b3IuZ2V0RG9jKCkuY3JlYXRlVGV4dE5vZGUoY2hhclRleHQpKTtcblxuXHRcdFx0XHRcdFx0Ly8gUHJldmVudCBlZGdlIGNhc2Ugd2hlcmUgb2xkZXIgV2ViS2l0IHdvdWxkIGFkZCBhbiBleHRyYSBCUiBlbGVtZW50XG5cdFx0XHRcdFx0XHRibG9ja1BhcmVudCA9IGRvbS5nZXRQYXJlbnQocm5nLnN0YXJ0Q29udGFpbmVyLCBkb20uaXNCbG9jayk7XG5cdFx0XHRcdFx0XHRpZiAoZG9tLmlzRW1wdHkoYmxvY2tQYXJlbnQpKSB7XG5cdFx0XHRcdFx0XHRcdCQoYmxvY2tQYXJlbnQpLmVtcHR5KCkuYXBwZW5kKGZyYWdtZW50Tm9kZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRybmcuaW5zZXJ0Tm9kZShmcmFnbWVudE5vZGUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRybmcuc2V0U3RhcnQoY2FyZXROb2RlLmZpcnN0Q2hpbGQsIDEpO1xuXHRcdFx0XHRcdFx0cm5nLnNldEVuZChjYXJldE5vZGUuZmlyc3RDaGlsZCwgMSk7XG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhybmcpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNldENvbnRlbnQoY2hhclRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGVkaXRvci5hZGRDb21tYW5kKCdEZWxldGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VzdG9tRGVsZXRlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWRpdG9yLmFkZENvbW1hbmQoJ0ZvcndhcmREZWxldGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VzdG9tRGVsZXRlKHRydWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIE9sZGVyIFdlYktpdHMgZG9lc24ndCBwcm9wZXJseSBoYW5kbGUgdGhlIGNsaXBib2FyZCBzbyB3ZSBjYW4ndCBhZGQgdGhlIHJlc3Rcblx0XHRcdGlmIChvbGRlcldlYktpdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGVkaXRvci5vbignZHJhZ3N0YXJ0JywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRkcmFnU3RhcnRSbmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG5cdFx0XHRcdHNldE1jZUludGVybmFsQ29udGVudChlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRlZGl0b3Iub24oJ2Ryb3AnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmICghaXNEZWZhdWx0UHJldmVudGVkKGUpKSB7XG5cdFx0XHRcdFx0dmFyIGludGVybmFsQ29udGVudCA9IGdldE1jZUludGVybmFsQ29udGVudChlKTtcblxuXHRcdFx0XHRcdGlmIChpbnRlcm5hbENvbnRlbnQpIHtcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdFx0Ly8gU2FmYXJpIGhhcyBhIHdlaXJkIGlzc3VlIHdoZXJlIGRyYWcvZHJvcHBpbmcgaW1hZ2VzIHNvbWV0aW1lc1xuXHRcdFx0XHRcdFx0Ly8gcHJvZHVjZXMgYSBncmVlbiBwbHVzIGljb24uIFdoZW4gdGhpcyBoYXBwZW5zIHRoZSBjYXJldFJhbmdlRnJvbVBvaW50XG5cdFx0XHRcdFx0XHQvLyB3aWxsIHJldHVybiBcIm51bGxcIiBldmVuIHRob3VnaCB0aGUgeCwgeSBjb29yZGluYXRlIGlzIGNvcnJlY3QuXG5cdFx0XHRcdFx0XHQvLyBCdXQgaWYgd2UgZGV0YWNoIHRoZSBpbnNlcnQgZnJvbSB0aGUgZHJvcCBldmVudCB3ZSB3aWxsIGdldCBhIHByb3BlciByYW5nZVxuXHRcdFx0XHRcdFx0RGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgcG9pbnRSbmcgPSBSYW5nZVV0aWxzLmdldENhcmV0UmFuZ2VGcm9tUG9pbnQoZS54LCBlLnksIGRvYyk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGRyYWdTdGFydFJuZykge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcoZHJhZ1N0YXJ0Um5nKTtcblx0XHRcdFx0XHRcdFx0XHRkcmFnU3RhcnRSbmcgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdHRyYW5zYWN0Q3VzdG9tRGVsZXRlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb24uc2V0Um5nKHBvaW50Um5nKTtcblx0XHRcdFx0XHRcdFx0aW5zZXJ0Q2xpcGJvYXJkQ29udGVudHMoaW50ZXJuYWxDb250ZW50Lmh0bWwpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWRpdG9yLm9uKCdjdXQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmICghaXNEZWZhdWx0UHJldmVudGVkKGUpICYmIGUuY2xpcGJvYXJkRGF0YSAmJiAhZWRpdG9yLnNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpKSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGUuY2xpcGJvYXJkRGF0YS5jbGVhckRhdGEoKTtcblx0XHRcdFx0XHRlLmNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9odG1sJywgZWRpdG9yLnNlbGVjdGlvbi5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHRcdGUuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCd0ZXh0L3BsYWluJywgZWRpdG9yLnNlbGVjdGlvbi5nZXRDb250ZW50KHtmb3JtYXQ6ICd0ZXh0J30pKTtcblxuXHRcdFx0XHRcdC8vIE5lZWRlZCBkZWxheSBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM2MzI4OCNjM1xuXHRcdFx0XHRcdC8vIE5lc3RlZCBkZWxldGUvZm9yd2FyZERlbGV0ZSBub3QgYWxsb3dlZCBvbiBleGVjQ29tbWFuZChcImN1dFwiKVxuXHRcdFx0XHRcdC8vIFRoaXMgaXMgdWdseSBidXQgbm90IHN1cmUgaG93IHRvIHdvcmsgYXJvdW5kIGl0IG90aGVyd2lzZVxuXHRcdFx0XHRcdERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHRyYW5zYWN0Q3VzdG9tRGVsZXRlKHRydWUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBNYWtlcyBzdXJlIHRoYXQgdGhlIGVkaXRvciBib2R5IGJlY29tZXMgZW1wdHkgd2hlbiBiYWNrc3BhY2Ugb3IgZGVsZXRlIGlzIHByZXNzZWQgaW4gZW1wdHkgZWRpdG9ycy5cblx0XHQgKlxuXHRcdCAqIEZvciBleGFtcGxlOlxuXHRcdCAqIDxwPjxiPnw8L2I+PC9wPlxuXHRcdCAqXG5cdFx0ICogT3I6XG5cdFx0ICogPGgxPnw8L2gxPlxuXHRcdCAqXG5cdFx0ICogT3I6XG5cdFx0ICogWzxoMT48L2gxPl1cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBlbXB0eUVkaXRvcldoZW5EZWxldGluZygpIHtcblx0XHRcdGZ1bmN0aW9uIHNlcmlhbGl6ZVJuZyhybmcpIHtcblx0XHRcdFx0dmFyIGJvZHkgPSBkb20uY3JlYXRlKFwiYm9keVwiKTtcblx0XHRcdFx0dmFyIGNvbnRlbnRzID0gcm5nLmNsb25lQ29udGVudHMoKTtcblx0XHRcdFx0Ym9keS5hcHBlbmRDaGlsZChjb250ZW50cyk7XG5cdFx0XHRcdHJldHVybiBzZWxlY3Rpb24uc2VyaWFsaXplci5zZXJpYWxpemUoYm9keSwge2Zvcm1hdDogJ2h0bWwnfSk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGFsbENvbnRlbnRzU2VsZWN0ZWQocm5nKSB7XG5cdFx0XHRcdGlmICghcm5nLnNldFN0YXJ0KSB7XG5cdFx0XHRcdFx0aWYgKHJuZy5pdGVtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGJvZHlSbmcgPSBybmcuZHVwbGljYXRlKCk7XG5cdFx0XHRcdFx0Ym9keVJuZy5tb3ZlVG9FbGVtZW50VGV4dChlZGl0b3IuZ2V0Qm9keSgpKTtcblx0XHRcdFx0XHRyZXR1cm4gUmFuZ2VVdGlscy5jb21wYXJlUmFuZ2VzKHJuZywgYm9keVJuZyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgc2VsZWN0aW9uID0gc2VyaWFsaXplUm5nKHJuZyk7XG5cblx0XHRcdFx0dmFyIGFsbFJuZyA9IGRvbS5jcmVhdGVSbmcoKTtcblx0XHRcdFx0YWxsUm5nLnNlbGVjdE5vZGUoZWRpdG9yLmdldEJvZHkoKSk7XG5cblx0XHRcdFx0dmFyIGFsbFNlbGVjdGlvbiA9IHNlcmlhbGl6ZVJuZyhhbGxSbmcpO1xuXHRcdFx0XHRyZXR1cm4gc2VsZWN0aW9uID09PSBhbGxTZWxlY3Rpb247XG5cdFx0XHR9XG5cblx0XHRcdGVkaXRvci5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGtleUNvZGUgPSBlLmtleUNvZGUsIGlzQ29sbGFwc2VkLCBib2R5O1xuXG5cdFx0XHRcdC8vIEVtcHR5IHRoZSBlZGl0b3IgaWYgaXQncyBuZWVkZWQgZm9yIGV4YW1wbGUgYmFja3NwYWNlIGF0IDxwPjxiPnw8L2I+PC9wPlxuXHRcdFx0XHRpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChlKSAmJiAoa2V5Q29kZSA9PSBERUxFVEUgfHwga2V5Q29kZSA9PSBCQUNLU1BBQ0UpKSB7XG5cdFx0XHRcdFx0aXNDb2xsYXBzZWQgPSBlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCk7XG5cdFx0XHRcdFx0Ym9keSA9IGVkaXRvci5nZXRCb2R5KCk7XG5cblx0XHRcdFx0XHQvLyBTZWxlY3Rpb24gaXMgY29sbGFwc2VkIGJ1dCB0aGUgZWRpdG9yIGlzbid0IGVtcHR5XG5cdFx0XHRcdFx0aWYgKGlzQ29sbGFwc2VkICYmICFkb20uaXNFbXB0eShib2R5KSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNlbGVjdGlvbiBpc24ndCBjb2xsYXBzZWQgYnV0IG5vdCBhbGwgdGhlIGNvbnRlbnRzIGlzIHNlbGVjdGVkXG5cdFx0XHRcdFx0aWYgKCFpc0NvbGxhcHNlZCAmJiAhYWxsQ29udGVudHNTZWxlY3RlZChlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE1hbnVhbGx5IGVtcHR5IHRoZSBlZGl0b3Jcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0ZWRpdG9yLnNldENvbnRlbnQoJycpO1xuXG5cdFx0XHRcdFx0aWYgKGJvZHkuZmlyc3RDaGlsZCAmJiBkb20uaXNCbG9jayhib2R5LmZpcnN0Q2hpbGQpKSB7XG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNldEN1cnNvckxvY2F0aW9uKGJvZHkuZmlyc3RDaGlsZCwgMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2V0Q3Vyc29yTG9jYXRpb24oYm9keSwgMCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFdlYktpdCBkb2Vzbid0IHNlbGVjdCBhbGwgdGhlIG5vZGVzIGluIHRoZSBib2R5IHdoZW4geW91IHByZXNzIEN0cmwrQS5cblx0XHQgKiBJRSBzZWxlY3RzIG1vcmUgdGhhbiB0aGUgY29udGVudHMgPGJvZHk+WzxwPmE8L3A+XTwvYm9keT4gaW5zdGVhZCBvZiA8Ym9keT48cD5bYV08L3BdPC9ib2R5PiBzZWUgYnVnICM2NDM4XG5cdFx0ICogVGhpcyBzZWxlY3RzIHRoZSB3aG9sZSBib2R5IHNvIHRoYXQgYmFja3NwYWNlL2RlbGV0ZSBsb2dpYyB3aWxsIGRlbGV0ZSBldmVyeXRoaW5nXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gc2VsZWN0QWxsKCkge1xuXHRcdFx0ZWRpdG9yLnNob3J0Y3V0cy5hZGQoJ21ldGErYScsIG51bGwsICdTZWxlY3RBbGwnKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBXZWJLaXQgaGFzIGEgd2VpcmQgaXNzdWUgd2hlcmUgaXQgc29tZSB0aW1lcyBmYWlscyB0byBwcm9wZXJseSBjb252ZXJ0IGtleXByZXNzZXMgdG8gaW5wdXQgbWV0aG9kIGtleXN0cm9rZXMuXG5cdFx0ICogVGhlIElNRSBvbiBNYWMgZG9lc24ndCBpbml0aWFsaXplIHdoZW4gaXQgZG9lc24ndCBmaXJlIGEgcHJvcGVyIGZvY3VzIGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogVGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiB0aGUgdXNlciBtYW5hZ2VzIHRvIGNsaWNrIHRoZSBkb2N1bWVudEVsZW1lbnQgZWxlbWVudCB0aGVuIHRoZSB3aW5kb3cgZG9lc24ndCBnZXQgcHJvcGVyIGZvY3VzIHVudGlsXG5cdFx0ICogeW91IGVudGVyIGEgY2hhcmFjdGVyIGludG8gdGhlIGVkaXRvci5cblx0XHQgKlxuXHRcdCAqIEl0IGFsc28gaGFwcGVucyB3aGVuIHRoZSBmaXJzdCBmb2N1cyBpbiBtYWRlIHRvIHRoZSBib2R5LlxuXHRcdCAqXG5cdFx0ICogU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM1NjZcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBpbnB1dE1ldGhvZEZvY3VzKCkge1xuXHRcdFx0aWYgKCFlZGl0b3Iuc2V0dGluZ3MuY29udGVudF9lZGl0YWJsZSkge1xuXHRcdFx0XHQvLyBDYXNlIDEgSU1FIGRvZXNuJ3QgaW5pdGlhbGl6ZSBpZiB5b3UgZm9jdXMgdGhlIGRvY3VtZW50XG5cdFx0XHRcdC8vIERpc2FibGVkIHNpbmNlIGl0IHdhcyBpbnRlcmZlcnJpbmcgd2l0aCB0aGUgY0U9ZmFsc2UgbG9naWNcblx0XHRcdFx0Ly8gQWxzbyBjb3VsdG4ndCByZXByb2R1Y2UgdGhlIGlzc3VlIG9uIFNhZmFyaSA5XG5cdFx0XHRcdC8qZG9tLmJpbmQoZWRpdG9yLmdldERvYygpLCAnZm9jdXNpbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNlbGVjdGlvbi5zZXRSbmcoc2VsZWN0aW9uLmdldFJuZygpKTtcblx0XHRcdFx0fSk7Ki9cblxuXHRcdFx0XHQvLyBDYXNlIDIgSU1FIGRvZXNuJ3QgaW5pdGlhbGl6ZSBpZiB5b3UgY2xpY2sgdGhlIGRvY3VtZW50RWxlbWVudCBpdCBhbHNvIGRvZXNuJ3QgcHJvcGVybHkgZmlyZSB0aGUgZm9jdXNpbiBldmVudFxuXHRcdFx0XHQvLyBOZWVkcyB0byBiZSBib3RoIGRvd24vdXAgZHVlIHRvIHdlaXJkIHJlbmRlcmluZyBidWcgb24gQ2hyb21lIFdpbmRvd3Ncblx0XHRcdFx0ZG9tLmJpbmQoZWRpdG9yLmdldERvYygpLCAnbW91c2Vkb3duIG1vdXNldXAnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIHJuZztcblxuXHRcdFx0XHRcdGlmIChlLnRhcmdldCA9PSBlZGl0b3IuZ2V0RG9jKCkuZG9jdW1lbnRFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRybmcgPSBzZWxlY3Rpb24uZ2V0Um5nKCk7XG5cdFx0XHRcdFx0XHRlZGl0b3IuZ2V0Qm9keSgpLmZvY3VzKCk7XG5cblx0XHRcdFx0XHRcdGlmIChlLnR5cGUgPT0gJ21vdXNlZG93bicpIHtcblx0XHRcdFx0XHRcdFx0aWYgKENhcmV0Q29udGFpbmVyLmlzQ2FyZXRDb250YWluZXIocm5nLnN0YXJ0Q29udGFpbmVyKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIEVkZ2UgY2FzZSBmb3IgbW91c2Vkb3duLCBkcmFnIHNlbGVjdCBhbmQgbW91c2Vkb3duIGFnYWluIHdpdGhpbiBzZWxlY3Rpb24gb24gQ2hyb21lIFdpbmRvd3MgdG8gcmVuZGVyIGNhcmV0XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uLnNldFJuZyhybmcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQmFja3NwYWNpbmcgaW4gRmlyZUZveC9JRSBmcm9tIGEgcGFyYWdyYXBoIGludG8gYSBob3Jpem9udGFsIHJ1bGUgcmVzdWx0cyBpbiBhIGZsb2F0aW5nIHRleHQgbm9kZSBiZWNhdXNlIHRoZVxuXHRcdCAqIGJyb3dzZXIganVzdCBkZWxldGVzIHRoZSBwYXJhZ3JhcGggLSB0aGUgYnJvd3NlciBmYWlscyB0byBtZXJnZSB0aGUgdGV4dCBub2RlIHdpdGggYSBob3Jpem9udGFsIHJ1bGUgc28gaXQgaXNcblx0XHQgKiBsZWZ0IHRoZXJlLiBUaW55TUNFIHNlZXMgYSBmbG9hdGluZyB0ZXh0IG5vZGUgYW5kIHdyYXBzIGl0IGluIGEgcGFyYWdyYXBoIG9uIHRoZSBrZXkgdXAgZXZlbnQgKEZvcmNlQmxvY2tzLmpzXG5cdFx0ICogYWRkUm9vdEJsb2NrcyksIG1lYW5pbmcgdGhlIGFjdGlvbiBkb2VzIG5vdGhpbmcuIFdpdGggdGhpcyBjb2RlLCBGaXJlRm94L0lFIG1hdGNoZSB0aGUgYmVoYXZpb3VyIG9mIG90aGVyXG5cdFx0ICogYnJvd3NlcnMuXG5cdFx0ICpcblx0XHQgKiBJdCBhbHNvIGZpeGVzIGEgYnVnIG9uIEZpcmVmb3ggd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIGRlbGV0ZSBIUiBlbGVtZW50cy5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiByZW1vdmVIck9uQmFja3NwYWNlKCkge1xuXHRcdFx0ZWRpdG9yLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChlKSAmJiBlLmtleUNvZGUgPT09IEJBQ0tTUEFDRSkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSBIUiBlbGVtZW50cyB0aGlzIGlzIGZhc3RlciBzaW5jZSBnZXRSbmcgb24gSUUgNyAmIDggaXMgc2xvd1xuXHRcdFx0XHRcdGlmICghZWRpdG9yLmdldEJvZHkoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHInKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiYgc2VsZWN0aW9uLmdldFJuZyh0cnVlKS5zdGFydE9mZnNldCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuXHRcdFx0XHRcdFx0dmFyIHByZXZpb3VzU2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuXG5cdFx0XHRcdFx0XHRpZiAobm9kZS5ub2RlTmFtZSA9PSAnSFInKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5yZW1vdmUobm9kZSk7XG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXNTaWJsaW5nICYmIHByZXZpb3VzU2libGluZy5ub2RlTmFtZSAmJiBwcmV2aW91c1NpYmxpbmcubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJoclwiKSB7XG5cdFx0XHRcdFx0XHRcdGRvbS5yZW1vdmUocHJldmlvdXNTaWJsaW5nKTtcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRmlyZWZveCAzLnggaGFzIGFuIGlzc3VlIHdoZXJlIHRoZSBib2R5IGVsZW1lbnQgd29uJ3QgZ2V0IHByb3BlciBmb2N1cyBpZiB5b3UgY2xpY2sgb3V0XG5cdFx0ICogc2lkZSBpdCdzIHJlY3RhbmdsZS5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmb2N1c0JvZHkoKSB7XG5cdFx0XHQvLyBGaXggZm9yIGEgZm9jdXMgYnVnIGluIEZGIDMueCB3aGVyZSB0aGUgYm9keSBlbGVtZW50XG5cdFx0XHQvLyB3b3VsZG4ndCBnZXQgcHJvcGVyIGZvY3VzIGlmIHRoZSB1c2VyIGNsaWNrZWQgb24gdGhlIEhUTUwgZWxlbWVudFxuXHRcdFx0aWYgKCF3aW5kb3cuUmFuZ2UucHJvdG90eXBlLmdldENsaWVudFJlY3RzKSB7IC8vIERldGVjdCBnZXRDbGllbnRSZWN0cyBnb3QgaW50cm9kdWNlZCBpbiBGRiA0XG5cdFx0XHRcdGVkaXRvci5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGlmICghaXNEZWZhdWx0UHJldmVudGVkKGUpICYmIGUudGFyZ2V0Lm5vZGVOYW1lID09PSBcIkhUTUxcIikge1xuXHRcdFx0XHRcdFx0dmFyIGJvZHkgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuXG5cdFx0XHRcdFx0XHQvLyBCbHVyIHRoZSBib2R5IGl0J3MgZm9jdXNlZCBidXQgbm90IGNvcnJlY3RseSBmb2N1c2VkXG5cdFx0XHRcdFx0XHRib2R5LmJsdXIoKTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVmb2N1cyB0aGUgYm9keSBhZnRlciBhIGxpdHRsZSB3aGlsZVxuXHRcdFx0XHRcdFx0RGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRib2R5LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFdlYktpdCBoYXMgYSBidWcgd2hlcmUgaXQgaXNuJ3QgcG9zc2libGUgdG8gc2VsZWN0IGltYWdlLCBociBvciBhbmNob3IgZWxlbWVudHNcblx0XHQgKiBieSBjbGlja2luZyBvbiB0aGVtIHNvIHdlIG5lZWQgdG8gZmFrZSB0aGF0LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHNlbGVjdENvbnRyb2xFbGVtZW50cygpIHtcblx0XHRcdGVkaXRvci5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBlLnRhcmdldDtcblxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIGZvciBidWcsIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjUwXG5cdFx0XHRcdC8vIFdlYktpdCBjYW4ndCBldmVuIGRvIHNpbXBsZSB0aGluZ3MgbGlrZSBzZWxlY3RpbmcgYW4gaW1hZ2Vcblx0XHRcdFx0aWYgKC9eKElNR3xIUikkLy50ZXN0KHRhcmdldC5ub2RlTmFtZSkgJiYgZG9tLmdldENvbnRlbnRFZGl0YWJsZVBhcmVudCh0YXJnZXQpICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0c2VsZWN0aW9uLnNlbGVjdCh0YXJnZXQpO1xuXHRcdFx0XHRcdGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldC5ub2RlTmFtZSA9PSAnQScgJiYgZG9tLmhhc0NsYXNzKHRhcmdldCwgJ21jZS1pdGVtLWFuY2hvcicpKSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHNlbGVjdGlvbi5zZWxlY3QodGFyZ2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRml4ZXMgYSBHZWNrbyBidWcgd2hlcmUgdGhlIHN0eWxlIGF0dHJpYnV0ZSBnZXRzIGFkZGVkIHRvIHRoZSB3cm9uZyBlbGVtZW50IHdoZW4gZGVsZXRpbmcgYmV0d2VlbiB0d28gYmxvY2sgZWxlbWVudHMuXG5cdFx0ICpcblx0XHQgKiBGaXhlcyBkbyBiYWNrc3BhY2UvZGVsZXRlIG9uIHRoaXM6XG5cdFx0ICogPHA+YmxhW2NrPC9wPjxwIHN0eWxlPVwiY29sb3I6cmVkXCI+cl1lZDwvcD5cblx0XHQgKlxuXHRcdCAqIFdvdWxkIGJlY29tZTpcblx0XHQgKiA8cD5ibGF8ZWQ8L3A+XG5cdFx0ICpcblx0XHQgKiBJbnN0ZWFkIG9mOlxuXHRcdCAqIDxwIHN0eWxlPVwiY29sb3I6cmVkXCI+YmxhfGVkPC9wPlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHJlbW92ZVN0eWxlc1doZW5EZWxldGluZ0Fjcm9zc0Jsb2NrRWxlbWVudHMoKSB7XG5cdFx0XHRmdW5jdGlvbiBnZXRBdHRyaWJ1dGVBcHBseUZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgdGVtcGxhdGUgPSBkb20uZ2V0QXR0cmlicyhzZWxlY3Rpb24uZ2V0U3RhcnQoKS5jbG9uZU5vZGUoZmFsc2UpKTtcblxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIHRhcmdldCA9IHNlbGVjdGlvbi5nZXRTdGFydCgpO1xuXG5cdFx0XHRcdFx0aWYgKHRhcmdldCAhPT0gZWRpdG9yLmdldEJvZHkoKSkge1xuXHRcdFx0XHRcdFx0ZG9tLnNldEF0dHJpYih0YXJnZXQsIFwic3R5bGVcIiwgbnVsbCk7XG5cblx0XHRcdFx0XHRcdGVhY2godGVtcGxhdGUsIGZ1bmN0aW9uKGF0dHIpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0LnNldEF0dHJpYnV0ZU5vZGUoYXR0ci5jbG9uZU5vZGUodHJ1ZSkpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBpc1NlbGVjdGlvbkFjcm9zc0VsZW1lbnRzKCkge1xuXHRcdFx0XHRyZXR1cm4gIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmXG5cdFx0XHRcdFx0ZG9tLmdldFBhcmVudChzZWxlY3Rpb24uZ2V0U3RhcnQoKSwgZG9tLmlzQmxvY2spICE9IGRvbS5nZXRQYXJlbnQoc2VsZWN0aW9uLmdldEVuZCgpLCBkb20uaXNCbG9jayk7XG5cdFx0XHR9XG5cblx0XHRcdGVkaXRvci5vbigna2V5cHJlc3MnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBhcHBseUF0dHJpYnV0ZXM7XG5cblx0XHRcdFx0aWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0NikgJiYgaXNTZWxlY3Rpb25BY3Jvc3NFbGVtZW50cygpKSB7XG5cdFx0XHRcdFx0YXBwbHlBdHRyaWJ1dGVzID0gZ2V0QXR0cmlidXRlQXBwbHlGdW5jdGlvbigpO1xuXHRcdFx0XHRcdGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZCgnZGVsZXRlJywgZmFsc2UsIG51bGwpO1xuXHRcdFx0XHRcdGFwcGx5QXR0cmlidXRlcygpO1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRkb20uYmluZChlZGl0b3IuZ2V0RG9jKCksICdjdXQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBhcHBseUF0dHJpYnV0ZXM7XG5cblx0XHRcdFx0aWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkgJiYgaXNTZWxlY3Rpb25BY3Jvc3NFbGVtZW50cygpKSB7XG5cdFx0XHRcdFx0YXBwbHlBdHRyaWJ1dGVzID0gZ2V0QXR0cmlidXRlQXBwbHlGdW5jdGlvbigpO1xuXG5cdFx0XHRcdFx0RGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0YXBwbHlBdHRyaWJ1dGVzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFNjcmVlbiByZWFkZXJzIG9uIElFIG5lZWRzIHRvIGhhdmUgdGhlIHJvbGUgYXBwbGljYXRpb24gc2V0IG9uIHRoZSBib2R5LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGVuc3VyZUJvZHlIYXNSb2xlQXBwbGljYXRpb24oKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJhcHBsaWNhdGlvblwiKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBCYWNrc3BhY2luZyBpbnRvIGEgdGFibGUgYmVoYXZlcyBkaWZmZXJlbnRseSBkZXBlbmRpbmcgdXBvbiBicm93c2VyIHR5cGUuXG5cdFx0ICogVGhlcmVmb3JlLCBkaXNhYmxlIEJhY2tzcGFjZSB3aGVuIGN1cnNvciBpbW1lZGlhdGVseSBmb2xsb3dzIGEgdGFibGUuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZGlzYWJsZUJhY2tzcGFjZUludG9BVGFibGUoKSB7XG5cdFx0XHRlZGl0b3Iub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmICghaXNEZWZhdWx0UHJldmVudGVkKGUpICYmIGUua2V5Q29kZSA9PT0gQkFDS1NQQUNFKSB7XG5cdFx0XHRcdFx0aWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCgpICYmIHNlbGVjdGlvbi5nZXRSbmcodHJ1ZSkuc3RhcnRPZmZzZXQgPT09IDApIHtcblx0XHRcdFx0XHRcdHZhciBwcmV2aW91c1NpYmxpbmcgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpLnByZXZpb3VzU2libGluZztcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lICYmIHByZXZpb3VzU2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBPbGQgSUUgdmVyc2lvbnMgY2FuJ3QgcHJvcGVybHkgcmVuZGVyIEJSIGVsZW1lbnRzIGluIFBSRSB0YWdzIHdoaXRlIGluIGNvbnRlbnRFZGl0YWJsZSBtb2RlLiBTbyB0aGlzXG5cdFx0ICogbG9naWMgYWRkcyBhIFxcbiBiZWZvcmUgdGhlIEJSIHNvIHRoYXQgaXQgd2lsbCBnZXQgcmVuZGVyZWQuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gYWRkTmV3TGluZXNCZWZvcmVCckluUHJlKCkge1xuXHRcdFx0Ly8gSUU4KyByZW5kZXJpbmcgbW9kZSBkb2VzIHRoZSByaWdodCB0aGluZyB3aXRoIEJSIGluIFBSRVxuXHRcdFx0aWYgKGdldERvY3VtZW50TW9kZSgpID4gNykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEVuYWJsZSBkaXNwbGF5OiBub25lIGluIGFyZWEgYW5kIGFkZCBhIHNwZWNpZmljIGNsYXNzIHRoYXQgaGlkZXMgYWxsIEJSIGVsZW1lbnRzIGluIFBSRSB0b1xuXHRcdFx0Ly8gYXZvaWQgdGhlIGNhcmV0IGZyb20gZ2V0dGluZyBzdHVjayBhdCB0aGUgQlIgZWxlbWVudHMgd2hpbGUgcHJlc3NpbmcgdGhlIHJpZ2h0IGFycm93IGtleVxuXHRcdFx0c2V0RWRpdG9yQ29tbWFuZFN0YXRlKCdSZXNwZWN0VmlzaWJpbGl0eUluRGVzaWduJywgdHJ1ZSk7XG5cdFx0XHRlZGl0b3IuY29udGVudFN0eWxlcy5wdXNoKCcubWNlSGlkZUJySW5QcmUgcHJlIGJyIHtkaXNwbGF5OiBub25lfScpO1xuXHRcdFx0ZG9tLmFkZENsYXNzKGVkaXRvci5nZXRCb2R5KCksICdtY2VIaWRlQnJJblByZScpO1xuXG5cdFx0XHQvLyBBZGRzIGEgXFxuIGJlZm9yZSBhbGwgQlIgZWxlbWVudHMgaW4gUFJFIHRvIGdldCB0aGVtIHZpc3VhbFxuXHRcdFx0cGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ3ByZScsIGZ1bmN0aW9uKG5vZGVzKSB7XG5cdFx0XHRcdHZhciBpID0gbm9kZXMubGVuZ3RoLCBick5vZGVzLCBqLCBickVsbSwgc2libGluZztcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0YnJOb2RlcyA9IG5vZGVzW2ldLmdldEFsbCgnYnInKTtcblx0XHRcdFx0XHRqID0gYnJOb2Rlcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKGotLSkge1xuXHRcdFx0XHRcdFx0YnJFbG0gPSBick5vZGVzW2pdO1xuXG5cdFx0XHRcdFx0XHQvLyBBZGQgXFxuIGJlZm9yZSBCUiBpbiBQUkUgZWxlbWVudHMgb24gb2xkZXIgSUU6cyBzbyB0aGUgbmV3IGxpbmVzIGdldCByZW5kZXJlZFxuXHRcdFx0XHRcdFx0c2libGluZyA9IGJyRWxtLnByZXY7XG5cdFx0XHRcdFx0XHRpZiAoc2libGluZyAmJiBzaWJsaW5nLnR5cGUgPT09IDMgJiYgc2libGluZy52YWx1ZS5jaGFyQXQoc2libGluZy52YWx1ZSAtIDEpICE9ICdcXG4nKSB7XG5cdFx0XHRcdFx0XHRcdHNpYmxpbmcudmFsdWUgKz0gJ1xcbic7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRickVsbS5wYXJlbnQuaW5zZXJ0KG5ldyBOb2RlKCcjdGV4dCcsIDMpLCBickVsbSwgdHJ1ZSkudmFsdWUgPSAnXFxuJztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBSZW1vdmVzIGFueSBcXG4gYmVmb3JlIEJSIGVsZW1lbnRzIGluIFBSRSBzaW5jZSBvdGhlciBicm93c2VycyBhbmQgaW4gY29udGVudEVkaXRhYmxlPWZhbHNlIG1vZGUgdGhleSB3aWxsIGJlIHZpc2libGVcblx0XHRcdHNlcmlhbGl6ZXIuYWRkTm9kZUZpbHRlcigncHJlJywgZnVuY3Rpb24obm9kZXMpIHtcblx0XHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGgsIGJyTm9kZXMsIGosIGJyRWxtLCBzaWJsaW5nO1xuXG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRick5vZGVzID0gbm9kZXNbaV0uZ2V0QWxsKCdicicpO1xuXHRcdFx0XHRcdGogPSBick5vZGVzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoai0tKSB7XG5cdFx0XHRcdFx0XHRickVsbSA9IGJyTm9kZXNbal07XG5cdFx0XHRcdFx0XHRzaWJsaW5nID0gYnJFbG0ucHJldjtcblx0XHRcdFx0XHRcdGlmIChzaWJsaW5nICYmIHNpYmxpbmcudHlwZSA9PSAzKSB7XG5cdFx0XHRcdFx0XHRcdHNpYmxpbmcudmFsdWUgPSBzaWJsaW5nLnZhbHVlLnJlcGxhY2UoL1xccj9cXG4kLywgJycpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogTW92ZXMgc3R5bGUgd2lkdGgvaGVpZ2h0IHRvIGF0dHJpYnV0ZSB3aWR0aC9oZWlnaHQgd2hlbiB0aGUgdXNlciByZXNpemVzIGFuIGltYWdlIG9uIElFLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHJlbW92ZVByZVNlcmlhbGl6ZWRTdHlsZXNXaGVuU2VsZWN0aW5nQ29udHJvbHMoKSB7XG5cdFx0XHRkb20uYmluZChlZGl0b3IuZ2V0Qm9keSgpLCAnbW91c2V1cCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgdmFsdWUsIG5vZGUgPSBzZWxlY3Rpb24uZ2V0Tm9kZSgpO1xuXG5cdFx0XHRcdC8vIE1vdmVkIHN0eWxlcyB0byBhdHRyaWJ1dGVzIG9uIElNRyBlZW1lbnRzXG5cdFx0XHRcdGlmIChub2RlLm5vZGVOYW1lID09ICdJTUcnKSB7XG5cdFx0XHRcdFx0Ly8gQ29udmVydCBzdHlsZSB3aWR0aCB0byB3aWR0aCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRpZiAoKHZhbHVlID0gZG9tLmdldFN0eWxlKG5vZGUsICd3aWR0aCcpKSkge1xuXHRcdFx0XHRcdFx0ZG9tLnNldEF0dHJpYihub2RlLCAnd2lkdGgnLCB2YWx1ZS5yZXBsYWNlKC9bXjAtOSVdKy9nLCAnJykpO1xuXHRcdFx0XHRcdFx0ZG9tLnNldFN0eWxlKG5vZGUsICd3aWR0aCcsICcnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDb252ZXJ0IHN0eWxlIGhlaWdodCB0byBoZWlnaHQgYXR0cmlidXRlXG5cdFx0XHRcdFx0aWYgKCh2YWx1ZSA9IGRvbS5nZXRTdHlsZShub2RlLCAnaGVpZ2h0JykpKSB7XG5cdFx0XHRcdFx0XHRkb20uc2V0QXR0cmliKG5vZGUsICdoZWlnaHQnLCB2YWx1ZS5yZXBsYWNlKC9bXjAtOSVdKy9nLCAnJykpO1xuXHRcdFx0XHRcdFx0ZG9tLnNldFN0eWxlKG5vZGUsICdoZWlnaHQnLCAnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZW1vdmVzIGEgYmxvY2txdW90ZSB3aGVuIGJhY2tzcGFjZSBpcyBwcmVzc2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgaXQuXG5cdFx0ICpcblx0XHQgKiBGb3IgZXhhbXBsZTpcblx0XHQgKiA8YmxvY2txdW90ZT48cD58eDwvcD48L2Jsb2NrcXVvdGU+XG5cdFx0ICpcblx0XHQgKiBCZWNvbWVzOlxuXHRcdCAqIDxwPnx4PC9wPlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHJlbW92ZUJsb2NrUXVvdGVPbkJhY2tTcGFjZSgpIHtcblx0XHRcdC8vIEFkZCBibG9jayBxdW90ZSBkZWxldGlvbiBoYW5kbGVyXG5cdFx0XHRlZGl0b3Iub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBybmcsIGNvbnRhaW5lciwgb2Zmc2V0LCByb290LCBwYXJlbnQ7XG5cblx0XHRcdFx0aWYgKGlzRGVmYXVsdFByZXZlbnRlZChlKSB8fCBlLmtleUNvZGUgIT0gVksuQkFDS1NQQUNFKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cm5nID0gc2VsZWN0aW9uLmdldFJuZygpO1xuXHRcdFx0XHRjb250YWluZXIgPSBybmcuc3RhcnRDb250YWluZXI7XG5cdFx0XHRcdG9mZnNldCA9IHJuZy5zdGFydE9mZnNldDtcblx0XHRcdFx0cm9vdCA9IGRvbS5nZXRSb290KCk7XG5cdFx0XHRcdHBhcmVudCA9IGNvbnRhaW5lcjtcblxuXHRcdFx0XHRpZiAoIXJuZy5jb2xsYXBzZWQgfHwgb2Zmc2V0ICE9PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2hpbGUgKHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSAmJiBwYXJlbnQucGFyZW50Tm9kZS5maXJzdENoaWxkID09IHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSAhPSByb290KSB7XG5cdFx0XHRcdFx0cGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJcyB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBibG9ja3F1b3RlP1xuXHRcdFx0XHRpZiAocGFyZW50LnRhZ05hbWUgPT09ICdCTE9DS1FVT1RFJykge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgYmxvY2txdW90ZVxuXHRcdFx0XHRcdGVkaXRvci5mb3JtYXR0ZXIudG9nZ2xlKCdibG9ja3F1b3RlJywgbnVsbCwgcGFyZW50KTtcblxuXHRcdFx0XHRcdC8vIE1vdmUgdGhlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgb2YgY29udGFpbmVyXG5cdFx0XHRcdFx0cm5nID0gZG9tLmNyZWF0ZVJuZygpO1xuXHRcdFx0XHRcdHJuZy5zZXRTdGFydChjb250YWluZXIsIDApO1xuXHRcdFx0XHRcdHJuZy5zZXRFbmQoY29udGFpbmVyLCAwKTtcblx0XHRcdFx0XHRzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdmFyaW91cyBHZWNrbyBlZGl0aW5nIG9wdGlvbnMgb24gbW91c2UgZG93biBhbmQgYmVmb3JlIGEgZXhlY0NvbW1hbmQgdG8gZGlzYWJsZSBpbmxpbmUgdGFibGUgZWRpdGluZyB0aGF0IGlzIGJyb2tlbiBldGMuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gc2V0R2Vja29FZGl0aW5nT3B0aW9ucygpIHtcblx0XHRcdGZ1bmN0aW9uIHNldE9wdHMoKSB7XG5cdFx0XHRcdHJlZnJlc2hDb250ZW50RWRpdGFibGUoKTtcblxuXHRcdFx0XHRzZXRFZGl0b3JDb21tYW5kU3RhdGUoXCJTdHlsZVdpdGhDU1NcIiwgZmFsc2UpO1xuXHRcdFx0XHRzZXRFZGl0b3JDb21tYW5kU3RhdGUoXCJlbmFibGVJbmxpbmVUYWJsZUVkaXRpbmdcIiwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmICghc2V0dGluZ3Mub2JqZWN0X3Jlc2l6aW5nKSB7XG5cdFx0XHRcdFx0c2V0RWRpdG9yQ29tbWFuZFN0YXRlKFwiZW5hYmxlT2JqZWN0UmVzaXppbmdcIiwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc2V0dGluZ3MucmVhZG9ubHkpIHtcblx0XHRcdFx0ZWRpdG9yLm9uKCdCZWZvcmVFeGVjQ29tbWFuZCBNb3VzZURvd24nLCBzZXRPcHRzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBGaXhlcyBhIGdlY2tvIGxpbmsgYnVnLCB3aGVuIGEgbGluayBpcyBwbGFjZWQgYXQgdGhlIGVuZCBvZiBibG9jayBlbGVtZW50cyB0aGVyZSBpc1xuXHRcdCAqIG5vIHdheSB0byBtb3ZlIHRoZSBjYXJldCBiZWhpbmQgdGhlIGxpbmsuIFRoaXMgZml4IGFkZHMgYSBib2d1cyBiciBlbGVtZW50IGFmdGVyIHRoZSBsaW5rLlxuXHRcdCAqXG5cdFx0ICogRm9yIGV4YW1wbGUgdGhpczpcblx0XHQgKiA8cD48Yj48YSBocmVmPVwiI1wiPng8L2E+PC9iPjwvcD5cblx0XHQgKlxuXHRcdCAqIEJlY29tZXMgdGhpczpcblx0XHQgKiA8cD48Yj48YSBocmVmPVwiI1wiPng8L2E+PC9iPjxicj48L3A+XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gYWRkQnJBZnRlckxhc3RMaW5rcygpIHtcblx0XHRcdGZ1bmN0aW9uIGZpeExpbmtzKCkge1xuXHRcdFx0XHRlYWNoKGRvbS5zZWxlY3QoJ2EnKSwgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdHZhciBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlLCByb290ID0gZG9tLmdldFJvb3QoKTtcblxuXHRcdFx0XHRcdGlmIChwYXJlbnROb2RlLmxhc3RDaGlsZCA9PT0gbm9kZSkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKHBhcmVudE5vZGUgJiYgIWRvbS5pc0Jsb2NrKHBhcmVudE5vZGUpKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJlbnROb2RlLnBhcmVudE5vZGUubGFzdENoaWxkICE9PSBwYXJlbnROb2RlIHx8IHBhcmVudE5vZGUgPT09IHJvb3QpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRkb20uYWRkKHBhcmVudE5vZGUsICdicicsIHsnZGF0YS1tY2UtYm9ndXMnOiAxfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0ZWRpdG9yLm9uKCdTZXRDb250ZW50IEV4ZWNDb21tYW5kJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRpZiAoZS50eXBlID09IFwic2V0Y29udGVudFwiIHx8IGUuY29tbWFuZCA9PT0gJ21jZUluc2VydExpbmsnKSB7XG5cdFx0XHRcdFx0Zml4TGlua3MoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogV2ViS2l0IHdpbGwgcHJvZHVjZSBESVYgZWxlbWVudHMgaGVyZSBhbmQgdGhlcmUgYnkgZGVmYXVsdC4gQnV0IHNpbmNlIFRpbnlNQ0UgdXNlcyBwYXJhZ3JhcGhzIGJ5XG5cdFx0ICogZGVmYXVsdCB3ZSB3YW50IHRvIGNoYW5nZSB0aGF0IGJlaGF2aW9yLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHNldERlZmF1bHRCbG9ja1R5cGUoKSB7XG5cdFx0XHRpZiAoc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2spIHtcblx0XHRcdFx0ZWRpdG9yLm9uKCdpbml0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2V0RWRpdG9yQ29tbWFuZFN0YXRlKCdEZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yJywgc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2spO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBpbWFnZSBvbiBJRSBpbnN0ZWFkIG9mIG5hdmlnYXRpbmcgdG8gcHJldmlvdXMgcGFnZS5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBkZWxldGVDb250cm9sSXRlbU9uQmFja1NwYWNlKCkge1xuXHRcdFx0ZWRpdG9yLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHR2YXIgcm5nO1xuXG5cdFx0XHRcdGlmICghaXNEZWZhdWx0UHJldmVudGVkKGUpICYmIGUua2V5Q29kZSA9PSBCQUNLU1BBQ0UpIHtcblx0XHRcdFx0XHRybmcgPSBlZGl0b3IuZ2V0RG9jKCkuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG5cdFx0XHRcdFx0aWYgKHJuZyAmJiBybmcuaXRlbSkge1xuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0ZWRpdG9yLnVuZG9NYW5hZ2VyLmJlZm9yZUNoYW5nZSgpO1xuXHRcdFx0XHRcdFx0ZG9tLnJlbW92ZShybmcuaXRlbSgwKSk7XG5cdFx0XHRcdFx0XHRlZGl0b3IudW5kb01hbmFnZXIuYWRkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBJRTEwIGRvZXNuJ3QgcHJvcGVybHkgcmVuZGVyIGJsb2NrIGVsZW1lbnRzIHdpdGggdGhlIHJpZ2h0IGhlaWdodCB1bnRpbCB5b3UgYWRkIGNvbnRlbnRzIHRvIHRoZW0uXG5cdFx0ICogVGhpcyBmaXhlcyB0aGF0IGJ5IGFkZGluZyBhIHBhZGRpbmctcmlnaHQgdG8gYWxsIGVtcHR5IHRleHQgYmxvY2sgZWxlbWVudHMuXG5cdFx0ICogU2VlOiBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzc0Mzg4MVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHJlbmRlckVtcHR5QmxvY2tzRml4KCkge1xuXHRcdFx0dmFyIGVtcHR5QmxvY2tzQ1NTO1xuXG5cdFx0XHQvLyBJRTEwK1xuXHRcdFx0aWYgKGdldERvY3VtZW50TW9kZSgpID49IDEwKSB7XG5cdFx0XHRcdGVtcHR5QmxvY2tzQ1NTID0gJyc7XG5cdFx0XHRcdGVhY2goJ3AgZGl2IGgxIGgyIGgzIGg0IGg1IGg2Jy5zcGxpdCgnICcpLCBmdW5jdGlvbihuYW1lLCBpKSB7XG5cdFx0XHRcdFx0ZW1wdHlCbG9ja3NDU1MgKz0gKGkgPiAwID8gJywnIDogJycpICsgbmFtZSArICc6ZW1wdHknO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRlZGl0b3IuY29udGVudFN0eWxlcy5wdXNoKGVtcHR5QmxvY2tzQ1NTICsgJ3twYWRkaW5nLXJpZ2h0OiAxcHggIWltcG9ydGFudH0nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBPbGQgSUUgdmVyc2lvbnMgY2FuJ3QgcmV0YWluIGNvbnRlbnRzIHdpdGhpbiBub3NjcmlwdCBlbGVtZW50cyBzbyB0aGlzIGxvZ2ljIHdpbGwgc3RvcmUgdGhlIGNvbnRlbnRzXG5cdFx0ICogYXMgYSBhdHRyaWJ1dGUgYW5kIHRoZSBpbnNlcnQgdGhhdCB2YWx1ZSBhcyBpdCdzIHJhdyB0ZXh0IHdoZW4gdGhlIERPTSBpcyBzZXJpYWxpemVkLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGtlZXBOb1NjcmlwdENvbnRlbnRzKCkge1xuXHRcdFx0aWYgKGdldERvY3VtZW50TW9kZSgpIDwgOSkge1xuXHRcdFx0XHRwYXJzZXIuYWRkTm9kZUZpbHRlcignbm9zY3JpcHQnLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0XHRcdHZhciBpID0gbm9kZXMubGVuZ3RoLCBub2RlLCB0ZXh0Tm9kZTtcblxuXHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBub2Rlc1tpXTtcblx0XHRcdFx0XHRcdHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuXG5cdFx0XHRcdFx0XHRpZiAodGV4dE5vZGUpIHtcblx0XHRcdFx0XHRcdFx0bm9kZS5hdHRyKCdkYXRhLW1jZS1pbm5lcnRleHQnLCB0ZXh0Tm9kZS52YWx1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZXJpYWxpemVyLmFkZE5vZGVGaWx0ZXIoJ25vc2NyaXB0JywgZnVuY3Rpb24obm9kZXMpIHtcblx0XHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgdGV4dE5vZGUsIHZhbHVlO1xuXG5cdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldO1xuXHRcdFx0XHRcdFx0dGV4dE5vZGUgPSBub2Rlc1tpXS5maXJzdENoaWxkO1xuXG5cdFx0XHRcdFx0XHRpZiAodGV4dE5vZGUpIHtcblx0XHRcdFx0XHRcdFx0dGV4dE5vZGUudmFsdWUgPSBFbnRpdGllcy5kZWNvZGUodGV4dE5vZGUudmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gT2xkIElFIGNhbid0IHJldGFpbiBub3NjcmlwdCB2YWx1ZSBzbyBhbiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBzdG9yZSBpdFxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG5vZGUuYXR0cmlidXRlcy5tYXBbJ2RhdGEtbWNlLWlubmVydGV4dCddO1xuXHRcdFx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlLmF0dHIoJ2RhdGEtbWNlLWlubmVydGV4dCcsIG51bGwpO1xuXHRcdFx0XHRcdFx0XHRcdHRleHROb2RlID0gbmV3IE5vZGUoJyN0ZXh0JywgMyk7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dE5vZGUudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0Tm9kZS5yYXcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUuYXBwZW5kKHRleHROb2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogSUUgaGFzIGFuIGlzc3VlIHdoZXJlIHlvdSBjYW4ndCBzZWxlY3QvbW92ZSB0aGUgY2FyZXQgYnkgY2xpY2tpbmcgb3V0c2lkZSB0aGUgYm9keSBpZiB0aGUgZG9jdW1lbnQgaXMgaW4gc3RhbmRhcmRzIG1vZGUuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZml4Q2FyZXRTZWxlY3Rpb25PZkRvY3VtZW50RWxlbWVudE9uSWUoKSB7XG5cdFx0XHR2YXIgZG9jID0gZG9tLmRvYywgYm9keSA9IGRvYy5ib2R5LCBzdGFydGVkLCBzdGFydFJuZywgaHRtbEVsbTtcblxuXHRcdFx0Ly8gUmV0dXJuIHJhbmdlIGZyb20gcG9pbnQgb3IgbnVsbCBpZiBpdCBmYWlsZWRcblx0XHRcdGZ1bmN0aW9uIHJuZ0Zyb21Qb2ludCh4LCB5KSB7XG5cdFx0XHRcdHZhciBybmcgPSBib2R5LmNyZWF0ZVRleHRSYW5nZSgpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cm5nLm1vdmVUb1BvaW50KHgsIHkpO1xuXHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdC8vIElFIHNvbWV0aW1lcyB0aHJvd3MgYW5kIGV4Y2VwdGlvbiwgc28gbGV0cyBqdXN0IGlnbm9yZSBpdFxuXHRcdFx0XHRcdHJuZyA9IG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGaXJlcyB3aGlsZSB0aGUgc2VsZWN0aW9uIGlzIGNoYW5naW5nXG5cdFx0XHRmdW5jdGlvbiBzZWxlY3Rpb25DaGFuZ2UoZSkge1xuXHRcdFx0XHR2YXIgcG9pbnRSbmc7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGJ1dHRvbiBpcyBkb3duIG9yIG5vdFxuXHRcdFx0XHRpZiAoZS5idXR0b24pIHtcblx0XHRcdFx0XHQvLyBDcmVhdGUgcmFuZ2UgZnJvbSBtb3VzZSBwb3NpdGlvblxuXHRcdFx0XHRcdHBvaW50Um5nID0gcm5nRnJvbVBvaW50KGUueCwgZS55KTtcblxuXHRcdFx0XHRcdGlmIChwb2ludFJuZykge1xuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgcG9pbnRSYW5nZSBpcyBiZWZvcmUvYWZ0ZXIgc2VsZWN0aW9uIHRoZW4gY2hhbmdlIHRoZSBlbmRQb2ludFxuXHRcdFx0XHRcdFx0aWYgKHBvaW50Um5nLmNvbXBhcmVFbmRQb2ludHMoJ1N0YXJ0VG9TdGFydCcsIHN0YXJ0Um5nKSA+IDApIHtcblx0XHRcdFx0XHRcdFx0cG9pbnRSbmcuc2V0RW5kUG9pbnQoJ1N0YXJ0VG9TdGFydCcsIHN0YXJ0Um5nKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHBvaW50Um5nLnNldEVuZFBvaW50KCdFbmRUb0VuZCcsIHN0YXJ0Um5nKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cG9pbnRSbmcuc2VsZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVuZFNlbGVjdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZXMgbGlzdGVuZXJzXG5cdFx0XHRmdW5jdGlvbiBlbmRTZWxlY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBybmcgPSBkb2Muc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIHJhbmdlIGlzIGNvbGxhcHNlZCB0aGVuIHVzZSB0aGUgbGFzdCBzdGFydCByYW5nZVxuXHRcdFx0XHRpZiAoc3RhcnRSbmcgJiYgIXJuZy5pdGVtICYmIHJuZy5jb21wYXJlRW5kUG9pbnRzKCdTdGFydFRvRW5kJywgcm5nKSA9PT0gMCkge1xuXHRcdFx0XHRcdHN0YXJ0Um5nLnNlbGVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZG9tLnVuYmluZChkb2MsICdtb3VzZXVwJywgZW5kU2VsZWN0aW9uKTtcblx0XHRcdFx0ZG9tLnVuYmluZChkb2MsICdtb3VzZW1vdmUnLCBzZWxlY3Rpb25DaGFuZ2UpO1xuXHRcdFx0XHRzdGFydFJuZyA9IHN0YXJ0ZWQgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIEhUTUwgZWxlbWVudCB1bnNlbGVjdGFibGUgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGhhbmRsZSBzZWxlY3Rpb24gYnkgaGFuZFxuXHRcdFx0ZG9jLmRvY3VtZW50RWxlbWVudC51bnNlbGVjdGFibGUgPSB0cnVlO1xuXG5cdFx0XHQvLyBEZXRlY3Qgd2hlbiB1c2VyIHNlbGVjdHMgb3V0c2lkZSBCT0RZXG5cdFx0XHRkb20uYmluZChkb2MsICdtb3VzZWRvd24gY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmIChlLnRhcmdldC5ub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG5cdFx0XHRcdFx0aWYgKHN0YXJ0ZWQpIHtcblx0XHRcdFx0XHRcdGVuZFNlbGVjdGlvbigpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERldGVjdCB2ZXJ0aWNhbCBzY3JvbGxiYXIsIHNpbmNlIElFIHdpbGwgZmlyZSBhIG1vdXNlZG93biBvbiB0aGUgc2Nyb2xsYmFyIGFuZCBoYXZlIHRhcmdldCBzZXQgYXMgSFRNTFxuXHRcdFx0XHRcdGh0bWxFbG0gPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0XHRcdGlmIChodG1sRWxtLnNjcm9sbEhlaWdodCA+IGh0bWxFbG0uY2xpZW50SGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c3RhcnRlZCA9IDE7XG5cdFx0XHRcdFx0Ly8gU2V0dXAgc3RhcnQgcG9zaXRpb25cblx0XHRcdFx0XHRzdGFydFJuZyA9IHJuZ0Zyb21Qb2ludChlLngsIGUueSk7XG5cdFx0XHRcdFx0aWYgKHN0YXJ0Um5nKSB7XG5cdFx0XHRcdFx0XHQvLyBMaXN0ZW4gZm9yIHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnRzXG5cdFx0XHRcdFx0XHRkb20uYmluZChkb2MsICdtb3VzZXVwJywgZW5kU2VsZWN0aW9uKTtcblx0XHRcdFx0XHRcdGRvbS5iaW5kKGRvYywgJ21vdXNlbW92ZScsIHNlbGVjdGlvbkNoYW5nZSk7XG5cblx0XHRcdFx0XHRcdGRvbS5nZXRSb290KCkuZm9jdXMoKTtcblx0XHRcdFx0XHRcdHN0YXJ0Um5nLnNlbGVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRml4ZXMgc2VsZWN0aW9uIGlzc3VlcyB3aGVyZSB0aGUgY2FyZXQgY2FuIGJlIHBsYWNlZCBiZXR3ZWVuIHR3byBpbmxpbmUgZWxlbWVudHMgbGlrZSA8Yj5hPC9iPnw8Yj5iPC9iPlxuXHRcdCAqIHRoaXMgZml4IHdpbGwgbGVhbiB0aGUgY2FyZXQgcmlnaHQgaW50byB0aGUgY2xvc2VzdCBpbmxpbmUgZWxlbWVudC5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBub3JtYWxpemVTZWxlY3Rpb24oKSB7XG5cdFx0XHQvLyBOb3JtYWxpemUgc2VsZWN0aW9uIGZvciBleGFtcGxlIDxiPmE8L2I+PGk+fGE8L2k+IGJlY29tZXMgPGI+YXw8L2I+PGk+YTwvaT4gZXhjZXB0IGZvciBDdHJsK0Egc2luY2UgaXQgc2VsZWN0cyBldmVyeXRoaW5nXG5cdFx0XHRlZGl0b3Iub24oJ2tleXVwIGZvY3VzaW4gbW91c2V1cCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKGUua2V5Q29kZSAhPSA2NSB8fCAhVksubWV0YUtleVByZXNzZWQoZSkpIHtcblx0XHRcdFx0XHRzZWxlY3Rpb24ubm9ybWFsaXplKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRydWUpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEZvcmNlcyBHZWNrbyB0byByZW5kZXIgYSBicm9rZW4gaW1hZ2UgaWNvbiBpZiBpdCBmYWlscyB0byBsb2FkIGFuIGltYWdlLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHNob3dCcm9rZW5JbWFnZUljb24oKSB7XG5cdFx0XHRlZGl0b3IuY29udGVudFN0eWxlcy5wdXNoKFxuXHRcdFx0XHQnaW1nOi1tb3otYnJva2VuIHsnICtcblx0XHRcdFx0XHQnLW1vei1mb3JjZS1icm9rZW4taW1hZ2UtaWNvbjoxOycgK1xuXHRcdFx0XHRcdCdtaW4td2lkdGg6MjRweDsnICtcblx0XHRcdFx0XHQnbWluLWhlaWdodDoyNHB4JyArXG5cdFx0XHRcdCd9J1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBpT1MgaGFzIGEgYnVnIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB0eXBlIGlmIHRoZSBkb2N1bWVudCBoYXMgYSB0b3VjaHN0YXJ0IGV2ZW50XG5cdFx0ICogYm91bmQgYW5kIHRoZSB1c2VyIHRvdWNoZXMgdGhlIGRvY3VtZW50IHdoaWxlIGhhdmluZyB0aGUgb24gc2NyZWVuIGtleWJvYXJkIHZpc2libGUuXG5cdFx0ICpcblx0XHQgKiBUaGUgdG91Y2ggZXZlbnQgbW92ZXMgdGhlIGZvY3VzIHRvIHRoZSBwYXJlbnQgZG9jdW1lbnQgd2hpbGUgaGF2aW5nIHRoZSBjYXJldCBpbnNpZGUgdGhlIGlmcmFtZVxuXHRcdCAqIHRoaXMgZml4IG1vdmVzIHRoZSBmb2N1cyBiYWNrIGludG8gdGhlIGlmcmFtZSBkb2N1bWVudC5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiByZXN0b3JlRm9jdXNPbktleURvd24oKSB7XG5cdFx0XHRpZiAoIWVkaXRvci5pbmxpbmUpIHtcblx0XHRcdFx0ZWRpdG9yLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSkge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLmdldFdpbigpLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBJRSAxMSBoYXMgYW4gYW5ub3lpbmcgaXNzdWUgd2hlcmUgeW91IGNhbid0IG1vdmUgZm9jdXMgaW50byB0aGUgZWRpdG9yXG5cdFx0ICogYnkgY2xpY2tpbmcgb24gdGhlIHdoaXRlIGFyZWEgSFRNTCBlbGVtZW50LiBXZSB1c2VkIHRvIGJlIGFibGUgdG8gdG8gZml4IHRoaXMgd2l0aFxuXHRcdCAqIHRoZSBmaXhDYXJldFNlbGVjdGlvbk9mRG9jdW1lbnRFbGVtZW50T25JZSBmaXguIEJ1dCBzaW5jZSBNJCByZW1vdmVkIHRoZSBzZWxlY3Rpb25cblx0XHQgKiBvYmplY3QgaXQncyBub3QgcG9zc2libGUgYW55bW9yZS4gU28gd2UgbmVlZCB0byBoYWNrIGluIGEgdW5nbHkgQ1NTIHRvIGZvcmNlIHRoZVxuXHRcdCAqIGJvZHkgdG8gYmUgYXQgbGVhc3QgMTUwcHguIElmIHRoZSB1c2VyIGNsaWNrcyB0aGUgSFRNTCBlbGVtZW50IG91dCBzaWRlIHRoaXMgMTUwcHggcmVnaW9uXG5cdFx0ICogd2Ugc2ltcGx5IG1vdmUgdGhlIGZvY3VzIGludG8gdGhlIGZpcnN0IHBhcmFncmFwaC4gTm90IGlkZWFsIHNpbmNlIHlvdSBsb29zZSB0aGVcblx0XHQgKiBwb3NpdGlvbmluZyBvZiB0aGUgY2FyZXQgYnV0IGdvb3QgZW5vdWdoIGZvciBtb3N0IGNhc2VzLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGJvZHlIZWlnaHQoKSB7XG5cdFx0XHRpZiAoIWVkaXRvci5pbmxpbmUpIHtcblx0XHRcdFx0ZWRpdG9yLmNvbnRlbnRTdHlsZXMucHVzaCgnYm9keSB7bWluLWhlaWdodDogMTUwcHh9Jyk7XG5cdFx0XHRcdGVkaXRvci5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIHJuZztcblxuXHRcdFx0XHRcdGlmIChlLnRhcmdldC5ub2RlTmFtZSA9PSAnSFRNTCcpIHtcblx0XHRcdFx0XHRcdC8vIEVkZ2Ugc2VlbXMgdG8gb25seSBuZWVkIGZvY3VzIGlmIHdlIHNldCB0aGUgcmFuZ2Vcblx0XHRcdFx0XHRcdC8vIHRoZSBjYXJldCB3aWxsIGJlY29tZSBpbnZpc2libGUgYW5kIG1vdmVkIG91dCBvZiB0aGUgaWZyYW1lISFcblx0XHRcdFx0XHRcdGlmIChFbnYuaWUgPiAxMSkge1xuXHRcdFx0XHRcdFx0XHRlZGl0b3IuZ2V0Qm9keSgpLmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBzdG9yZSBhd2F5IG5vbiBjb2xsYXBzZWQgcmFuZ2VzIHNpbmNlIHRoZSBmb2N1cyBjYWxsIHdpbGwgbWVzcyB0aGF0IHVwIHNlZSAjNzM4MlxuXHRcdFx0XHRcdFx0cm5nID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcblx0XHRcdFx0XHRcdGVkaXRvci5nZXRCb2R5KCkuZm9jdXMoKTtcblx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHRcdFx0ZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBGaXJlZm94IG9uIE1hYyBPUyB3aWxsIG1vdmUgdGhlIGJyb3dzZXIgYmFjayB0byB0aGUgcHJldmlvdXMgcGFnZSBpZiB5b3UgcHJlc3MgQ01EK0xlZnQgYXJyb3cuXG5cdFx0ICogWW91IG1pZ2h0IHRoZW4gbG9vc2UgYWxsIHlvdXIgd29yayBzbyB3ZSBuZWVkIHRvIGJsb2NrIHRoYXQgYmVoYXZpb3IgYW5kIHJlcGxhY2UgaXQgd2l0aCBvdXIgb3duLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGJsb2NrQ21kQXJyb3dOYXZpZ2F0aW9uKCkge1xuXHRcdFx0aWYgKEVudi5tYWMpIHtcblx0XHRcdFx0ZWRpdG9yLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGlmIChWSy5tZXRhS2V5UHJlc3NlZChlKSAmJiAhZS5zaGlmdEtleSAmJiAoZS5rZXlDb2RlID09IDM3IHx8IGUua2V5Q29kZSA9PSAzOSkpIHtcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsKCkubW9kaWZ5KCdtb3ZlJywgZS5rZXlDb2RlID09IDM3ID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJywgJ2xpbmVib3VuZGFyeScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRGlzYWJsZXMgdGhlIGF1dG9saW5raW5nIGluIElFIDkrIHRoaXMgaXMgdGhlbiByZS1lbmFibGVkIGJ5IHRoZSBhdXRvbGluayBwbHVnaW4uXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZGlzYWJsZUF1dG9VcmxEZXRlY3QoKSB7XG5cdFx0XHRzZXRFZGl0b3JDb21tYW5kU3RhdGUoXCJBdXRvVXJsRGV0ZWN0XCIsIGZhbHNlKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBpT1MgNy4xIGludHJvZHVjZWQgdHdvIG5ldyBidWdzOlxuXHRcdCAqIDEpIEl0J3MgcG9zc2libGUgdG8gb3BlbiBsaW5rcyB3aXRoaW4gYSBjb250ZW50RWRpdGFibGUgYXJlYSBieSBjbGlja2luZyBvbiB0aGVtLlxuXHRcdCAqIDIpIElmIHlvdSBob2xkIGRvd24gdGhlIGZpbmdlciBpdCB3aWxsIGRpc3BsYXkgdGhlIGxpbmsvaW1hZ2UgdG91Y2ggY2FsbG91dCBtZW51LlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHRhcExpbmtzQW5kSW1hZ2VzKCkge1xuXHRcdFx0ZWRpdG9yLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGVsbSA9IGUudGFyZ2V0O1xuXG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoZWxtLnRhZ05hbWUgPT09ICdBJykge1xuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoKGVsbSA9IGVsbS5wYXJlbnROb2RlKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWRpdG9yLmNvbnRlbnRTdHlsZXMucHVzaCgnLm1jZS1jb250ZW50LWJvZHkgey13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZX0nKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBpT1MgU2FmYXJpIGFuZCBwb3NzaWJsZSBvdGhlciBicm93c2VycyBoYXZlIGEgYnVnIHdoZXJlIGl0IHdvbid0IGZpcmVcblx0XHQgKiBhIGNsaWNrIGV2ZW50IHdoZW4gYSBjb250ZW50RWRpdGFibGUgaXMgZm9jdXNlZC4gVGhpcyBmdW5jdGlvbiBmYWtlcyBjbGljayBldmVudHNcblx0XHQgKiBieSB1c2luZyB0b3VjaHN0YXJ0L3RvdWNoZW5kIGFuZCBtZWFzdXJpbmcgdGhlIHRpbWUgYW5kIGRpc3RhbmNlIHRyYXZlbGxlZC5cblx0XHQgKi9cblx0XHQvKlxuXHRcdGZ1bmN0aW9uIHRvdWNoQ2xpY2tFdmVudCgpIHtcblx0XHRcdGVkaXRvci5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGVsbSwgdGltZSwgc3RhcnRUb3VjaCwgY2hhbmdlZFRvdWNoZXM7XG5cblx0XHRcdFx0ZWxtID0gZS50YXJnZXQ7XG5cdFx0XHRcdHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblx0XHRcdFx0Y2hhbmdlZFRvdWNoZXMgPSBlLmNoYW5nZWRUb3VjaGVzO1xuXG5cdFx0XHRcdGlmICghY2hhbmdlZFRvdWNoZXMgfHwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0YXJ0VG91Y2ggPSBjaGFuZ2VkVG91Y2hlc1swXTtcblxuXHRcdFx0XHRlZGl0b3Iub25jZSgndG91Y2hlbmQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIGVuZFRvdWNoID0gZS5jaGFuZ2VkVG91Y2hlc1swXSwgYXJncztcblxuXHRcdFx0XHRcdGlmIChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRpbWUgPiA1MDApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoTWF0aC5hYnMoc3RhcnRUb3VjaC5jbGllbnRYIC0gZW5kVG91Y2guY2xpZW50WCkgPiA1KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKE1hdGguYWJzKHN0YXJ0VG91Y2guY2xpZW50WSAtIGVuZFRvdWNoLmNsaWVudFkpID4gNSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFyZ3MgPSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGVsbVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRlYWNoKCdwYWdlWCBwYWdlWSBjbGllbnRYIGNsaWVudFkgc2NyZWVuWCBzY3JlZW5ZJy5zcGxpdCgnICcpLCBmdW5jdGlvbihrZXkpIHtcblx0XHRcdFx0XHRcdGFyZ3Nba2V5XSA9IGVuZFRvdWNoW2tleV07XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRhcmdzID0gZWRpdG9yLmZpcmUoJ2NsaWNrJywgYXJncyk7XG5cblx0XHRcdFx0XHRpZiAoIWFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0XHRcdC8vIGlPUyBXZWJLaXQgY2FuJ3QgcGxhY2UgdGhlIGNhcmV0IHByb3Blcmx5IG9uY2Vcblx0XHRcdFx0XHRcdC8vIHlvdSBiaW5kIHRvdWNoIGV2ZW50cyBzbyB3ZSBuZWVkIHRvIGRvIHRoaXMgbWFudWFsbHlcblx0XHRcdFx0XHRcdC8vIFRPRE86IEV4cGFuZCB0byB0aGUgY2xvc2VzdCB3b3JkPyBUb3VibGUgdGFwIHN0aWxsIHdvcmtzLlxuXHRcdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoZW5kVG91Y2guY2xpZW50WCwgZW5kVG91Y2guY2xpZW50WSk7XG5cdFx0XHRcdFx0XHRlZGl0b3Iubm9kZUNoYW5nZWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdCovXG5cblx0XHQvKipcblx0XHQgKiBXZWJLaXQgaGFzIGEgYnVnIHdoZXJlIGl0IHdpbGwgYWxsb3cgZm9ybXMgdG8gYmUgc3VibWl0dGVkIGlmIHRoZXkgYXJlIGluc2lkZSBhIGNvbnRlbnRFZGl0YWJsZSBlbGVtZW50LlxuXHRcdCAqIEZvciBleGFtcGxlIHRoaXM6IDxmb3JtPjxidXR0b24+PC9mb3JtPlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGJsb2NrRm9ybVN1Ym1pdEluc2lkZUVkaXRvcigpIHtcblx0XHRcdGVkaXRvci5vbignaW5pdCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRlZGl0b3IuZG9tLmJpbmQoZWRpdG9yLmdldEJvZHkoKSwgJ3N1Ym1pdCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogU29tZXRpbWVzIFdlYktpdC9CbGluayBnZW5lcmF0ZXMgQlIgZWxlbWVudHMgd2l0aCB0aGUgQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSBjbGFzcy5cblx0XHQgKlxuXHRcdCAqIFNjZW5hcmlvOlxuXHRcdCAqICAxKSBDcmVhdGUgYSB0YWJsZSAyeDIuXG5cdFx0ICogIDIpIFNlbGVjdCBhbmQgY29weSBjZWxscyBBMi1CMi5cblx0XHQgKiAgMykgUGFzdGUgYW5kIGl0IHdpbGwgYWRkIEJSIGVsZW1lbnQgdG8gdGFibGUgY2VsbC5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiByZW1vdmVBcHBsZUludGVyY2hhbmdlQnJzKCkge1xuXHRcdFx0cGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ2JyJywgZnVuY3Rpb24obm9kZXMpIHtcblx0XHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdGlmIChub2Rlc1tpXS5hdHRyKCdjbGFzcycpID09ICdBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lJykge1xuXHRcdFx0XHRcdFx0bm9kZXNbaV0ucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBJRSBjYW5ub3Qgc2V0IGN1c3RvbSBjb250ZW50VHlwZSdzIG9uIGRyYWcgZXZlbnRzLCBhbmQgYWxzbyBkb2VzIG5vdCBwcm9wZXJseSBkcmFnL2Ryb3AgYmV0d2VlblxuXHRcdCAqIGVkaXRvcnMuIFRoaXMgdXNlcyBhIHNwZWNpYWwgZGF0YTp0ZXh0L21jZS1pbnRlcm5hbCBVUkwgdG8gcGFzcyBkYXRhIHdoZW4gZHJhZy9kcm9wIGJldHdlZW4gZWRpdG9ycy5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBpZUludGVybmFsRHJhZ0FuZERyb3AoKSB7XG5cdFx0XHRlZGl0b3Iub24oJ2RyYWdzdGFydCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0c2V0TWNlSW50ZXJuYWxDb250ZW50KGUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGVkaXRvci5vbignZHJvcCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZSkpIHtcblx0XHRcdFx0XHR2YXIgaW50ZXJuYWxDb250ZW50ID0gZ2V0TWNlSW50ZXJuYWxDb250ZW50KGUpO1xuXG5cdFx0XHRcdFx0aWYgKGludGVybmFsQ29udGVudCAmJiBpbnRlcm5hbENvbnRlbnQuaWQgIT0gZWRpdG9yLmlkKSB7XG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdHZhciBybmcgPSBSYW5nZVV0aWxzLmdldENhcmV0UmFuZ2VGcm9tUG9pbnQoZS54LCBlLnksIGVkaXRvci5nZXREb2MoKSk7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24uc2V0Um5nKHJuZyk7XG5cdFx0XHRcdFx0XHRpbnNlcnRDbGlwYm9hcmRDb250ZW50cyhpbnRlcm5hbENvbnRlbnQuaHRtbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZWZyZXNoQ29udGVudEVkaXRhYmxlKCkge1xuXHRcdFx0Ly8gTm8tb3Agc2luY2UgTW96aWxsYSBzZWVtcyB0byBoYXZlIGZpeGVkIHRoZSBjYXJldCByZXBhaW50IGlzc3Vlc1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzSGlkZGVuKCkge1xuXHRcdFx0dmFyIHNlbDtcblxuXHRcdFx0aWYgKCFpc0dlY2tvKSB7XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWlyZCwgd2hlcmVzIHRoYXQgY3Vyc29yIHNlbGVjdGlvbj9cblx0XHRcdHNlbCA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsKCk7XG5cdFx0XHRyZXR1cm4gKCFzZWwgfHwgIXNlbC5yYW5nZUNvdW50IHx8IHNlbC5yYW5nZUNvdW50ID09PSAwKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBQcm9wZXJseSBlbXB0aWVzIHRoZSBlZGl0b3IgaWYgYWxsIGNvbnRlbnRzIGlzIHNlbGVjdGVkIGFuZCBkZWxldGVkIHRoaXMgdG9cblx0XHQgKiBwcmV2ZW50IGVtcHR5IHBhcmFncmFwaHMgZnJvbSBiZWluZyBwcm9kdWNlZCBhdCBiZWdpbm5pbmcvZW5kIG9mIGNvbnRlbnRzLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGVtcHR5RWRpdG9yT25EZWxldGVFdmVyeXRoaW5nKCkge1xuXHRcdFx0ZnVuY3Rpb24gaXNFdmVyeXRoaW5nU2VsZWN0ZWQoZWRpdG9yKSB7XG5cdFx0XHRcdHZhciBjYXJldFdhbGtlciA9IG5ldyBDYXJldFdhbGtlcihlZGl0b3IuZ2V0Qm9keSgpKTtcblx0XHRcdFx0dmFyIHJuZyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG5cdFx0XHRcdHZhciBzdGFydENhcmV0UG9zID0gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChybmcpO1xuXHRcdFx0XHR2YXIgZW5kQ2FyZXRQb3MgPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChybmcpO1xuXHRcdFx0XHR2YXIgcHJldiA9IGNhcmV0V2Fsa2VyLnByZXYoc3RhcnRDYXJldFBvcyk7XG5cdFx0XHRcdHZhciBuZXh0ID0gY2FyZXRXYWxrZXIubmV4dChlbmRDYXJldFBvcyk7XG5cblx0XHRcdFx0cmV0dXJuICFlZGl0b3Iuc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiZcblx0XHRcdFx0XHQoIXByZXYgfHwgKHByZXYuaXNBdFN0YXJ0KCkgJiYgc3RhcnRDYXJldFBvcy5pc0VxdWFsKHByZXYpKSkgJiZcblx0XHRcdFx0XHQoIW5leHQgfHwgKG5leHQuaXNBdEVuZCgpICYmIHN0YXJ0Q2FyZXRQb3MuaXNFcXVhbChuZXh0KSkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUeXBlIG92ZXIgY2FzZSBkZWxldGUgYW5kIGluc2VydCB0aGlzIHdvbid0IGNvdmVyIHR5cGVvdmVyIHdpdGggYSBJTUUgYnV0IGF0IGxlYXN0IGl0IGNvdmVycyB0aGUgY29tbW9uIGNhc2Vcblx0XHRcdGVkaXRvci5vbigna2V5cHJlc3MnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChlKSAmJiAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgJiYgZS5jaGFyQ29kZSA+IDMxICYmICFWSy5tZXRhS2V5UHJlc3NlZChlKSkge1xuXHRcdFx0XHRcdGlmIChpc0V2ZXJ5dGhpbmdTZWxlY3RlZChlZGl0b3IpKSB7XG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2V0Q29udGVudChTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUpKTtcblx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KGVkaXRvci5nZXRCb2R5KCksIHRydWUpO1xuXHRcdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRlZGl0b3Iubm9kZUNoYW5nZWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRlZGl0b3Iub24oJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHR2YXIga2V5Q29kZSA9IGUua2V5Q29kZTtcblxuXHRcdFx0XHRpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChlKSAmJiAoa2V5Q29kZSA9PSBERUxFVEUgfHwga2V5Q29kZSA9PSBCQUNLU1BBQ0UpKSB7XG5cdFx0XHRcdFx0aWYgKGlzRXZlcnl0aGluZ1NlbGVjdGVkKGVkaXRvcikpIHtcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdGVkaXRvci5zZXRDb250ZW50KCcnKTtcblx0XHRcdFx0XHRcdGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGJyb3dzZXJzXG5cdFx0cmVtb3ZlQmxvY2tRdW90ZU9uQmFja1NwYWNlKCk7XG5cdFx0ZW1wdHlFZGl0b3JXaGVuRGVsZXRpbmcoKTtcblxuXHRcdC8vIFdpbmRvd3MgcGhvbmUgd2lsbCByZXR1cm4gYSByYW5nZSBsaWtlIFtib2R5LCAwXSBvbiBtb3VzZWRvd24gc29cblx0XHQvLyBpdCB3aWxsIGFsd2F5cyBub3JtYWxpemUgdG8gdGhlIHdyb25nIGxvY2F0aW9uXG5cdFx0aWYgKCFFbnYud2luZG93c1Bob25lKSB7XG5cdFx0XHRub3JtYWxpemVTZWxlY3Rpb24oKTtcblx0XHR9XG5cblx0XHQvLyBXZWJLaXRcblx0XHRpZiAoaXNXZWJLaXQpIHtcblx0XHRcdGVtcHR5RWRpdG9yT25EZWxldGVFdmVyeXRoaW5nKCk7XG5cdFx0XHRjbGVhbnVwU3R5bGVzV2hlbkRlbGV0aW5nKCk7XG5cdFx0XHRpbnB1dE1ldGhvZEZvY3VzKCk7XG5cdFx0XHRzZWxlY3RDb250cm9sRWxlbWVudHMoKTtcblx0XHRcdHNldERlZmF1bHRCbG9ja1R5cGUoKTtcblx0XHRcdGJsb2NrRm9ybVN1Ym1pdEluc2lkZUVkaXRvcigpO1xuXHRcdFx0ZGlzYWJsZUJhY2tzcGFjZUludG9BVGFibGUoKTtcblx0XHRcdHJlbW92ZUFwcGxlSW50ZXJjaGFuZ2VCcnMoKTtcblxuXHRcdFx0Ly90b3VjaENsaWNrRXZlbnQoKTtcblxuXHRcdFx0Ly8gaU9TXG5cdFx0XHRpZiAoRW52LmlPUykge1xuXHRcdFx0XHRyZXN0b3JlRm9jdXNPbktleURvd24oKTtcblx0XHRcdFx0Ym9keUhlaWdodCgpO1xuXHRcdFx0XHR0YXBMaW5rc0FuZEltYWdlcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZWN0QWxsKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSUVcblx0XHRpZiAoaXNJRSAmJiBFbnYuaWUgPCAxMSkge1xuXHRcdFx0cmVtb3ZlSHJPbkJhY2tzcGFjZSgpO1xuXHRcdFx0ZW5zdXJlQm9keUhhc1JvbGVBcHBsaWNhdGlvbigpO1xuXHRcdFx0YWRkTmV3TGluZXNCZWZvcmVCckluUHJlKCk7XG5cdFx0XHRyZW1vdmVQcmVTZXJpYWxpemVkU3R5bGVzV2hlblNlbGVjdGluZ0NvbnRyb2xzKCk7XG5cdFx0XHRkZWxldGVDb250cm9sSXRlbU9uQmFja1NwYWNlKCk7XG5cdFx0XHRyZW5kZXJFbXB0eUJsb2Nrc0ZpeCgpO1xuXHRcdFx0a2VlcE5vU2NyaXB0Q29udGVudHMoKTtcblx0XHRcdGZpeENhcmV0U2VsZWN0aW9uT2ZEb2N1bWVudEVsZW1lbnRPbkllKCk7XG5cdFx0fVxuXG5cdFx0aWYgKEVudi5pZSA+PSAxMSkge1xuXHRcdFx0Ym9keUhlaWdodCgpO1xuXHRcdFx0ZGlzYWJsZUJhY2tzcGFjZUludG9BVGFibGUoKTtcblx0XHR9XG5cblx0XHRpZiAoRW52LmllKSB7XG5cdFx0XHRzZWxlY3RBbGwoKTtcblx0XHRcdGRpc2FibGVBdXRvVXJsRGV0ZWN0KCk7XG5cdFx0XHRpZUludGVybmFsRHJhZ0FuZERyb3AoKTtcblx0XHR9XG5cblx0XHQvLyBHZWNrb1xuXHRcdGlmIChpc0dlY2tvKSB7XG5cdFx0XHRlbXB0eUVkaXRvck9uRGVsZXRlRXZlcnl0aGluZygpO1xuXHRcdFx0cmVtb3ZlSHJPbkJhY2tzcGFjZSgpO1xuXHRcdFx0Zm9jdXNCb2R5KCk7XG5cdFx0XHRyZW1vdmVTdHlsZXNXaGVuRGVsZXRpbmdBY3Jvc3NCbG9ja0VsZW1lbnRzKCk7XG5cdFx0XHRzZXRHZWNrb0VkaXRpbmdPcHRpb25zKCk7XG5cdFx0XHRhZGRCckFmdGVyTGFzdExpbmtzKCk7XG5cdFx0XHRzaG93QnJva2VuSW1hZ2VJY29uKCk7XG5cdFx0XHRibG9ja0NtZEFycm93TmF2aWdhdGlvbigpO1xuXHRcdFx0ZGlzYWJsZUJhY2tzcGFjZUludG9BVGFibGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVmcmVzaENvbnRlbnRFZGl0YWJsZTogcmVmcmVzaENvbnRlbnRFZGl0YWJsZSxcblx0XHRcdGlzSGlkZGVuOiBpc0hpZGRlblxuXHRcdH07XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL0VkaXRvck9ic2VydmFibGUuanNcblxuLyoqXG4gKiBFZGl0b3JPYnNlcnZhYmxlLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBtaXhpbiBjb250YWlucyB0aGUgZXZlbnQgbG9naWMgZm9yIHRoZSB0aW55bWNlLkVkaXRvciBjbGFzcy5cbiAqXG4gKiBAbWl4aW4gdGlueW1jZS5FZGl0b3JPYnNlcnZhYmxlXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnV0aWwuT2JzZXJ2YWJsZVxuICovXG5kZWZpbmUoXCJ0aW55bWNlL0VkaXRvck9ic2VydmFibGVcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9PYnNlcnZhYmxlXCIsXG5cdFwidGlueW1jZS9kb20vRE9NVXRpbHNcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxuXSwgZnVuY3Rpb24oT2JzZXJ2YWJsZSwgRE9NVXRpbHMsIFRvb2xzKSB7XG5cdHZhciBET00gPSBET01VdGlscy5ET00sIGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcztcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZXZlbnQgdGFyZ2V0IHNvIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LiBTb21lIGV2ZW50cyBmaXJlXG5cdCAqIG9ubHkgb24gZG9jdW1lbnQsIHNvbWUgZmlyZSBvbiBkb2N1bWVudEVsZW1lbnQgZXRjLiBUaGlzIGFsc28gaGFuZGxlcyB0aGVcblx0ICogY3VzdG9tIGV2ZW50IHJvb3Qgc2V0dGluZyB3aGVyZSBpdCByZXR1cm5zIHRoYXQgZWxlbWVudCBpbnN0ZWFkIG9mIHRoZSBib2R5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge3RpbnltY2UuRWRpdG9yfSBlZGl0b3IgRWRpdG9yIGluc3RhbmNlIHRvIGdldCBldmVudCB0YXJnZXQgZnJvbS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZSBOYW1lIG9mIHRoZSBldmVudCBmb3IgZXhhbXBsZSBcImNsaWNrXCIuXG5cdCAqIEByZXR1cm4ge0VsZW1lbnQvRG9jdW1lbnR9IEhUTUwgRWxlbWVudCBvciBkb2N1bWVudCB0YXJnZXQgdG8gYmluZCBvbi5cblx0ICovXG5cdGZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KGVkaXRvciwgZXZlbnROYW1lKSB7XG5cdFx0aWYgKGV2ZW50TmFtZSA9PSAnc2VsZWN0aW9uY2hhbmdlJykge1xuXHRcdFx0cmV0dXJuIGVkaXRvci5nZXREb2MoKTtcblx0XHR9XG5cblx0XHQvLyBOZWVkIHRvIGJpbmQgbW91c2Vkb3duL21vdXNldXAgZXRjIHRvIGRvY3VtZW50IG5vdCBib2R5IGluIGlmcmFtZSBtb2RlXG5cdFx0Ly8gU2luY2UgdGhlIHVzZXIgbWlnaHQgY2xpY2sgb24gdGhlIEhUTUwgZWxlbWVudCBub3QgdGhlIEJPRFlcblx0XHRpZiAoIWVkaXRvci5pbmxpbmUgJiYgL15tb3VzZXx0b3VjaHxjbGlja3xjb250ZXh0bWVudXxkcm9wfGRyYWdvdmVyfGRyYWdlbmQvLnRlc3QoZXZlbnROYW1lKSkge1xuXHRcdFx0cmV0dXJuIGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gQmluZCB0byBldmVudCByb290IGluc3RlYWQgb2YgYm9keSBpZiBpdCdzIGRlZmluZWRcblx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLmV2ZW50X3Jvb3QpIHtcblx0XHRcdGlmICghZWRpdG9yLmV2ZW50Um9vdCkge1xuXHRcdFx0XHRlZGl0b3IuZXZlbnRSb290ID0gRE9NLnNlbGVjdChlZGl0b3Iuc2V0dGluZ3MuZXZlbnRfcm9vdClbMF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlZGl0b3IuZXZlbnRSb290O1xuXHRcdH1cblxuXHRcdHJldHVybiBlZGl0b3IuZ2V0Qm9keSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpbmRzIGEgZXZlbnQgZGVsZWdhdGUgZm9yIHRoZSBzcGVjaWZpZWQgbmFtZSB0aGlzIGRlbGVnYXRlIHdpbGwgZmlyZVxuXHQgKiB0aGUgZXZlbnQgdG8gdGhlIGVkaXRvciBkaXNwYXRjaGVyLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge3RpbnltY2UuRWRpdG9yfSBlZGl0b3IgRWRpdG9yIGluc3RhbmNlIHRvIGdldCBldmVudCB0YXJnZXQgZnJvbS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZSBOYW1lIG9mIHRoZSBldmVudCBmb3IgZXhhbXBsZSBcImNsaWNrXCIuXG5cdCAqL1xuXHRmdW5jdGlvbiBiaW5kRXZlbnREZWxlZ2F0ZShlZGl0b3IsIGV2ZW50TmFtZSkge1xuXHRcdHZhciBldmVudFJvb3RFbG0gPSBnZXRFdmVudFRhcmdldChlZGl0b3IsIGV2ZW50TmFtZSksIGRlbGVnYXRlO1xuXG5cdFx0ZnVuY3Rpb24gaXNMaXN0ZW5pbmcoZWRpdG9yKSB7XG5cdFx0XHRyZXR1cm4gIWVkaXRvci5oaWRkZW4gJiYgIWVkaXRvci5yZWFkb25seTtcblx0XHR9XG5cblx0XHRpZiAoIWVkaXRvci5kZWxlZ2F0ZXMpIHtcblx0XHRcdGVkaXRvci5kZWxlZ2F0ZXMgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoZWRpdG9yLmRlbGVnYXRlc1tldmVudE5hbWVdKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGVkaXRvci5zZXR0aW5ncy5ldmVudF9yb290KSB7XG5cdFx0XHRpZiAoIWN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcykge1xuXHRcdFx0XHRjdXN0b21FdmVudFJvb3REZWxlZ2F0ZXMgPSB7fTtcblx0XHRcdFx0ZWRpdG9yLmVkaXRvck1hbmFnZXIub24oJ3JlbW92ZUVkaXRvcicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBuYW1lO1xuXG5cdFx0XHRcdFx0aWYgKCFlZGl0b3IuZWRpdG9yTWFuYWdlci5hY3RpdmVFZGl0b3IpIHtcblx0XHRcdFx0XHRcdGlmIChjdXN0b21FdmVudFJvb3REZWxlZ2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChuYW1lIGluIGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlcykge1xuXHRcdFx0XHRcdFx0XHRcdGVkaXRvci5kb20udW5iaW5kKGdldEV2ZW50VGFyZ2V0KGVkaXRvciwgbmFtZSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Y3VzdG9tRXZlbnRSb290RGVsZWdhdGVzID0gbnVsbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VzdG9tRXZlbnRSb290RGVsZWdhdGVzW2V2ZW50TmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWxlZ2F0ZSA9IGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGUudGFyZ2V0LCBlZGl0b3JzID0gZWRpdG9yLmVkaXRvck1hbmFnZXIuZWRpdG9ycywgaSA9IGVkaXRvcnMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHR2YXIgYm9keSA9IGVkaXRvcnNbaV0uZ2V0Qm9keSgpO1xuXG5cdFx0XHRcdFx0aWYgKGJvZHkgPT09IHRhcmdldCB8fCBET00uaXNDaGlsZE9mKHRhcmdldCwgYm9keSkpIHtcblx0XHRcdFx0XHRcdGlmIChpc0xpc3RlbmluZyhlZGl0b3JzW2ldKSkge1xuXHRcdFx0XHRcdFx0XHRlZGl0b3JzW2ldLmZpcmUoZXZlbnROYW1lLCBlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdGN1c3RvbUV2ZW50Um9vdERlbGVnYXRlc1tldmVudE5hbWVdID0gZGVsZWdhdGU7XG5cdFx0XHRET00uYmluZChldmVudFJvb3RFbG0sIGV2ZW50TmFtZSwgZGVsZWdhdGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxlZ2F0ZSA9IGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKGlzTGlzdGVuaW5nKGVkaXRvcikpIHtcblx0XHRcdFx0XHRlZGl0b3IuZmlyZShldmVudE5hbWUsIGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRET00uYmluZChldmVudFJvb3RFbG0sIGV2ZW50TmFtZSwgZGVsZWdhdGUpO1xuXHRcdFx0ZWRpdG9yLmRlbGVnYXRlc1tldmVudE5hbWVdID0gZGVsZWdhdGU7XG5cdFx0fVxuXHR9XG5cblx0dmFyIEVkaXRvck9ic2VydmFibGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQmluZCBhbnkgcGVuZGluZyBldmVudCBkZWxlZ2F0ZXMuIFRoaXMgZ2V0cyBleGVjdXRlZCBhZnRlciB0aGUgdGFyZ2V0IGJvZHkvZG9jdW1lbnQgaXMgY3JlYXRlZC5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0YmluZFBlbmRpbmdFdmVudERlbGVnYXRlczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdFRvb2xzLmVhY2goc2VsZi5fcGVuZGluZ05hdGl2ZUV2ZW50cywgZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0XHRiaW5kRXZlbnREZWxlZ2F0ZShzZWxmLCBuYW1lKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUb2dnbGVzIGEgbmF0aXZlIGV2ZW50IG9uL29mZiB0aGlzIGlzIGNhbGxlZCBieSB0aGUgRXZlbnREaXNwYXRjaGVyIHdoZW5cblx0XHQgKiB0aGUgZmlyc3QgbmF0aXZlIGV2ZW50IGhhbmRsZXIgaXMgYWRkZWQgYW5kIHdoZW4gdGhlIGxhc3QgbmF0aXZlIGV2ZW50IGhhbmRsZXIgaXMgcmVtb3ZlZC5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0dG9nZ2xlTmF0aXZlRXZlbnQ6IGZ1bmN0aW9uKG5hbWUsIHN0YXRlKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdC8vIE5ldmVyIGJpbmQgZm9jdXMvYmx1ciBzaW5jZSB0aGUgRm9jdXNNYW5hZ2VyIGZha2VzIHRob3NlXG5cdFx0XHRpZiAobmFtZSA9PSBcImZvY3VzXCIgfHwgbmFtZSA9PSBcImJsdXJcIikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0XHRpZiAoc2VsZi5pbml0aWFsaXplZCkge1xuXHRcdFx0XHRcdGJpbmRFdmVudERlbGVnYXRlKHNlbGYsIG5hbWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghc2VsZi5fcGVuZGluZ05hdGl2ZUV2ZW50cykge1xuXHRcdFx0XHRcdFx0c2VsZi5fcGVuZGluZ05hdGl2ZUV2ZW50cyA9IFtuYW1lXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5fcGVuZGluZ05hdGl2ZUV2ZW50cy5wdXNoKG5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChzZWxmLmluaXRpYWxpemVkKSB7XG5cdFx0XHRcdHNlbGYuZG9tLnVuYmluZChnZXRFdmVudFRhcmdldChzZWxmLCBuYW1lKSwgbmFtZSwgc2VsZi5kZWxlZ2F0ZXNbbmFtZV0pO1xuXHRcdFx0XHRkZWxldGUgc2VsZi5kZWxlZ2F0ZXNbbmFtZV07XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFVuYmluZHMgYWxsIG5hdGl2ZSBldmVudCBoYW5kbGVycyB0aGF0IG1lYW5zIGRlbGVnYXRlcywgY3VzdG9tIGV2ZW50cyBib3VuZCB1c2luZyB0aGUgRXZlbnRzIEFQSSBldGMuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHVuYmluZEFsbE5hdGl2ZUV2ZW50czogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIG5hbWU7XG5cblx0XHRcdGlmIChzZWxmLmRlbGVnYXRlcykge1xuXHRcdFx0XHRmb3IgKG5hbWUgaW4gc2VsZi5kZWxlZ2F0ZXMpIHtcblx0XHRcdFx0XHRzZWxmLmRvbS51bmJpbmQoZ2V0RXZlbnRUYXJnZXQoc2VsZiwgbmFtZSksIG5hbWUsIHNlbGYuZGVsZWdhdGVzW25hbWVdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmRlbGVnYXRlcztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxmLmlubGluZSkge1xuXHRcdFx0XHRzZWxmLmdldEJvZHkoKS5vbmxvYWQgPSBudWxsO1xuXHRcdFx0XHRzZWxmLmRvbS51bmJpbmQoc2VsZi5nZXRXaW4oKSk7XG5cdFx0XHRcdHNlbGYuZG9tLnVuYmluZChzZWxmLmdldERvYygpKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5kb20udW5iaW5kKHNlbGYuZ2V0Qm9keSgpKTtcblx0XHRcdHNlbGYuZG9tLnVuYmluZChzZWxmLmdldENvbnRhaW5lcigpKTtcblx0XHR9XG5cdH07XG5cblx0RWRpdG9yT2JzZXJ2YWJsZSA9IFRvb2xzLmV4dGVuZCh7fSwgT2JzZXJ2YWJsZSwgRWRpdG9yT2JzZXJ2YWJsZSk7XG5cblx0cmV0dXJuIEVkaXRvck9ic2VydmFibGU7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL01vZGUuanNcblxuLyoqXG4gKiBNb2RlLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogTW9kZSBzd2l0Y2hlciBsb2dpYy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuTW9kZVxuICovXG5kZWZpbmUoXCJ0aW55bWNlL01vZGVcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRmdW5jdGlvbiBzZXRFZGl0b3JDb21tYW5kU3RhdGUoZWRpdG9yLCBjbWQsIHN0YXRlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGVkaXRvci5nZXREb2MoKS5leGVjQ29tbWFuZChjbWQsIGZhbHNlLCBzdGF0ZSk7XG5cdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdC8vIElnbm9yZVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGNsaWNrQmxvY2tlcihlZGl0b3IpIHtcblx0XHR2YXIgdGFyZ2V0LCBoYW5kbGVyO1xuXG5cdFx0dGFyZ2V0ID0gZWRpdG9yLmdldEJvZHkoKTtcblxuXHRcdGhhbmRsZXIgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRpZiAoZWRpdG9yLmRvbS5nZXRQYXJlbnRzKGUudGFyZ2V0LCAnYScpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRlZGl0b3IuZG9tLmJpbmQodGFyZ2V0LCAnY2xpY2snLCBoYW5kbGVyKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR1bmJpbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRlZGl0b3IuZG9tLnVuYmluZCh0YXJnZXQsICdjbGljaycsIGhhbmRsZXIpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiB0b2dnbGVSZWFkT25seShlZGl0b3IsIHN0YXRlKSB7XG5cdFx0aWYgKGVkaXRvci5fY2xpY2tCbG9ja2VyKSB7XG5cdFx0XHRlZGl0b3IuX2NsaWNrQmxvY2tlci51bmJpbmQoKTtcblx0XHRcdGVkaXRvci5fY2xpY2tCbG9ja2VyID0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoc3RhdGUpIHtcblx0XHRcdGVkaXRvci5fY2xpY2tCbG9ja2VyID0gY2xpY2tCbG9ja2VyKGVkaXRvcik7XG5cdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLmNvbnRyb2xTZWxlY3Rpb24uaGlkZVJlc2l6ZVJlY3QoKTtcblx0XHRcdGVkaXRvci5yZWFkb25seSA9IHRydWU7XG5cdFx0XHRlZGl0b3IuZ2V0Qm9keSgpLmNvbnRlbnRFZGl0YWJsZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlZGl0b3IucmVhZG9ubHkgPSBmYWxzZTtcblx0XHRcdGVkaXRvci5nZXRCb2R5KCkuY29udGVudEVkaXRhYmxlID0gdHJ1ZTtcblx0XHRcdHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsIFwiU3R5bGVXaXRoQ1NTXCIsIGZhbHNlKTtcblx0XHRcdHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsIFwiZW5hYmxlSW5saW5lVGFibGVFZGl0aW5nXCIsIGZhbHNlKTtcblx0XHRcdHNldEVkaXRvckNvbW1hbmRTdGF0ZShlZGl0b3IsIFwiZW5hYmxlT2JqZWN0UmVzaXppbmdcIiwgZmFsc2UpO1xuXHRcdFx0ZWRpdG9yLmZvY3VzKCk7XG5cdFx0XHRlZGl0b3Iubm9kZUNoYW5nZWQoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRNb2RlKGVkaXRvciwgbW9kZSkge1xuXHRcdHZhciBjdXJyZW50TW9kZSA9IGVkaXRvci5yZWFkb25seSA/ICdyZWFkb25seScgOiAnZGVzaWduJztcblxuXHRcdGlmIChtb2RlID09IGN1cnJlbnRNb2RlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGVkaXRvci5pbml0aWFsaXplZCkge1xuXHRcdFx0dG9nZ2xlUmVhZE9ubHkoZWRpdG9yLCBtb2RlID09ICdyZWFkb25seScpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlZGl0b3Iub24oJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dG9nZ2xlUmVhZE9ubHkoZWRpdG9yLCBtb2RlID09ICdyZWFkb25seScpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gRXZlbnQgaXMgTk9UIHByZXZlbnRhYmxlXG5cdFx0ZWRpdG9yLmZpcmUoJ1N3aXRjaE1vZGUnLCB7bW9kZTogbW9kZX0pO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzZXRNb2RlOiBzZXRNb2RlXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL1Nob3J0Y3V0cy5qc1xuXG4vKipcbiAqIFNob3J0Y3V0cy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIENvbnRhaW5zIGFsbCBsb2dpYyBmb3IgaGFuZGxpbmcgb2Yga2V5Ym9hcmQgc2hvcnRjdXRzLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLlNob3J0Y3V0c1xuICogQGV4YW1wbGVcbiAqIGVkaXRvci5zaG9ydGN1dHMuYWRkKCdjdHJsK2EnLCBmdW5jdGlvbigpIHt9KTtcbiAqIGVkaXRvci5zaG9ydGN1dHMuYWRkKCdtZXRhK2EnLCBmdW5jdGlvbigpIHt9KTsgLy8gXCJtZXRhXCIgbWFwcyB0byBDb21tYW5kIG9uIE1hYyBhbmQgQ3RybCBvbiBQQ1xuICogZWRpdG9yLnNob3J0Y3V0cy5hZGQoJ2N0cmwrYWx0K2EnLCBmdW5jdGlvbigpIHt9KTtcbiAqIGVkaXRvci5zaG9ydGN1dHMuYWRkKCdhY2Nlc3MrYScsIGZ1bmN0aW9uKCkge30pOyAvLyBcImFjY2Vzc1wiIG1hcHMgdG8gY3RybCthbHQgb24gTWFjIGFuZCBzaGlmdCthbHQgb24gUENcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9TaG9ydGN1dHNcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvRW52XCJcbl0sIGZ1bmN0aW9uKFRvb2xzLCBFbnYpIHtcblx0dmFyIGVhY2ggPSBUb29scy5lYWNoLCBleHBsb2RlID0gVG9vbHMuZXhwbG9kZTtcblxuXHR2YXIga2V5Q29kZUxvb2t1cCA9IHtcblx0XHRcImY5XCI6IDEyMCxcblx0XHRcImYxMFwiOiAxMjEsXG5cdFx0XCJmMTFcIjogMTIyXG5cdH07XG5cblx0dmFyIG1vZGlmaWVyTmFtZXMgPSBUb29scy5tYWtlTWFwKCdhbHQsY3RybCxzaGlmdCxtZXRhLGFjY2VzcycpO1xuXG5cdHJldHVybiBmdW5jdGlvbihlZGl0b3IpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXMsIHNob3J0Y3V0cyA9IHt9LCBwZW5kaW5nUGF0dGVybnMgPSBbXTtcblxuXHRcdGZ1bmN0aW9uIHBhcnNlU2hvcnRjdXQocGF0dGVybikge1xuXHRcdFx0dmFyIGlkLCBrZXksIHNob3J0Y3V0ID0ge307XG5cblx0XHRcdC8vIFBhcnNlIG1vZGlmaWVycyBhbmQga2V5cyBjdHJsK2FsdCtiIGZvciBleGFtcGxlXG5cdFx0XHRlYWNoKGV4cGxvZGUocGF0dGVybiwgJysnKSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0aWYgKHZhbHVlIGluIG1vZGlmaWVyTmFtZXMpIHtcblx0XHRcdFx0XHRzaG9ydGN1dFt2YWx1ZV0gPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEFsbG93IG51bWVyaWMga2V5Y29kZXMgbGlrZSBjdHJsKzIxOSBmb3IgY3RybCtbXG5cdFx0XHRcdFx0aWYgKC9eWzAtOV17Mix9JC8udGVzdCh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHNob3J0Y3V0LmtleUNvZGUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzaG9ydGN1dC5jaGFyQ29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoMCk7XG5cdFx0XHRcdFx0XHRzaG9ydGN1dC5rZXlDb2RlID0ga2V5Q29kZUxvb2t1cFt2YWx1ZV0gfHwgdmFsdWUudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEdlbmVyYXRlIHVuaXF1ZSBpZCBmb3IgbW9kaWZpZXIgY29tYmluYXRpb24gYW5kIHNldCBkZWZhdWx0IHN0YXRlIGZvciB1bnVzZWQgbW9kaWZpZXJzXG5cdFx0XHRpZCA9IFtzaG9ydGN1dC5rZXlDb2RlXTtcblx0XHRcdGZvciAoa2V5IGluIG1vZGlmaWVyTmFtZXMpIHtcblx0XHRcdFx0aWYgKHNob3J0Y3V0W2tleV0pIHtcblx0XHRcdFx0XHRpZC5wdXNoKGtleSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2hvcnRjdXRba2V5XSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRzaG9ydGN1dC5pZCA9IGlkLmpvaW4oJywnKTtcblxuXHRcdFx0Ly8gSGFuZGxlIHNwZWNpYWwgYWNjZXNzIG1vZGlmaWVyIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiBNYWMvV2luXG5cdFx0XHRpZiAoc2hvcnRjdXQuYWNjZXNzKSB7XG5cdFx0XHRcdHNob3J0Y3V0LmFsdCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKEVudi5tYWMpIHtcblx0XHRcdFx0XHRzaG9ydGN1dC5jdHJsID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzaG9ydGN1dC5zaGlmdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSGFuZGxlIHNwZWNpYWwgbWV0YSBtb2RpZmllciBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gTWFjL1dpblxuXHRcdFx0aWYgKHNob3J0Y3V0Lm1ldGEpIHtcblx0XHRcdFx0aWYgKEVudi5tYWMpIHtcblx0XHRcdFx0XHRzaG9ydGN1dC5tZXRhID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzaG9ydGN1dC5jdHJsID0gdHJ1ZTtcblx0XHRcdFx0XHRzaG9ydGN1dC5tZXRhID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNob3J0Y3V0O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNyZWF0ZVNob3J0Y3V0KHBhdHRlcm4sIGRlc2MsIGNtZEZ1bmMsIHNjb3BlKSB7XG5cdFx0XHR2YXIgc2hvcnRjdXRzO1xuXG5cdFx0XHRzaG9ydGN1dHMgPSBUb29scy5tYXAoZXhwbG9kZShwYXR0ZXJuLCAnPicpLCBwYXJzZVNob3J0Y3V0KTtcblx0XHRcdHNob3J0Y3V0c1tzaG9ydGN1dHMubGVuZ3RoIC0gMV0gPSBUb29scy5leHRlbmQoc2hvcnRjdXRzW3Nob3J0Y3V0cy5sZW5ndGggLSAxXSwge1xuXHRcdFx0XHRmdW5jOiBjbWRGdW5jLFxuXHRcdFx0XHRzY29wZTogc2NvcGUgfHwgZWRpdG9yXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIFRvb2xzLmV4dGVuZChzaG9ydGN1dHNbMF0sIHtcblx0XHRcdFx0ZGVzYzogZWRpdG9yLnRyYW5zbGF0ZShkZXNjKSxcblx0XHRcdFx0c3VicGF0dGVybnM6IHNob3J0Y3V0cy5zbGljZSgxKVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFzTW9kaWZpZXIoZSkge1xuXHRcdFx0cmV0dXJuIGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNGdW5jdGlvbktleShlKSB7XG5cdFx0XHRyZXR1cm4gZS50eXBlID09PSBcImtleWRvd25cIiAmJiBlLmtleUNvZGUgPj0gMTEyICYmIGUua2V5Q29kZSA8PSAxMjM7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbWF0Y2hTaG9ydGN1dChlLCBzaG9ydGN1dCkge1xuXHRcdFx0aWYgKCFzaG9ydGN1dCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzaG9ydGN1dC5jdHJsICE9IGUuY3RybEtleSB8fCBzaG9ydGN1dC5tZXRhICE9IGUubWV0YUtleSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzaG9ydGN1dC5hbHQgIT0gZS5hbHRLZXkgfHwgc2hvcnRjdXQuc2hpZnQgIT0gZS5zaGlmdEtleSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlLmtleUNvZGUgPT0gc2hvcnRjdXQua2V5Q29kZSB8fCAoZS5jaGFyQ29kZSAmJiBlLmNoYXJDb2RlID09IHNob3J0Y3V0LmNoYXJDb2RlKSkge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZXhlY3V0ZVNob3J0Y3V0QWN0aW9uKHNob3J0Y3V0KSB7XG5cdFx0XHRyZXR1cm4gc2hvcnRjdXQuZnVuYyA/IHNob3J0Y3V0LmZ1bmMuY2FsbChzaG9ydGN1dC5zY29wZSkgOiBudWxsO1xuXHRcdH1cblxuXHRcdGVkaXRvci5vbigna2V5dXAga2V5cHJlc3Mga2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdGlmICgoaGFzTW9kaWZpZXIoZSkgfHwgaXNGdW5jdGlvbktleShlKSkgJiYgIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0ZWFjaChzaG9ydGN1dHMsIGZ1bmN0aW9uKHNob3J0Y3V0KSB7XG5cdFx0XHRcdFx0aWYgKG1hdGNoU2hvcnRjdXQoZSwgc2hvcnRjdXQpKSB7XG5cdFx0XHRcdFx0XHRwZW5kaW5nUGF0dGVybnMgPSBzaG9ydGN1dC5zdWJwYXR0ZXJucy5zbGljZSgwKTtcblxuXHRcdFx0XHRcdFx0aWYgKGUudHlwZSA9PSBcImtleWRvd25cIikge1xuXHRcdFx0XHRcdFx0XHRleGVjdXRlU2hvcnRjdXRBY3Rpb24oc2hvcnRjdXQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChtYXRjaFNob3J0Y3V0KGUsIHBlbmRpbmdQYXR0ZXJuc1swXSkpIHtcblx0XHRcdFx0XHRpZiAocGVuZGluZ1BhdHRlcm5zLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdFx0aWYgKGUudHlwZSA9PSBcImtleWRvd25cIikge1xuXHRcdFx0XHRcdFx0XHRleGVjdXRlU2hvcnRjdXRBY3Rpb24ocGVuZGluZ1BhdHRlcm5zWzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRwZW5kaW5nUGF0dGVybnMuc2hpZnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIGtleWJvYXJkIHNob3J0Y3V0IGZvciBzb21lIGNvbW1hbmQgb3IgZnVuY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuIFNob3J0Y3V0IHBhdHRlcm4uIExpa2UgZm9yIGV4YW1wbGU6IGN0cmwrYWx0K28uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGRlc2MgVGV4dCBkZXNjcmlwdGlvbiBmb3IgdGhlIGNvbW1hbmQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRnVuY3Rpb259IGNtZEZ1bmMgQ29tbWFuZCBuYW1lIHN0cmluZyBvciBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBPcHRpb25hbCBzY29wZSB0byBleGVjdXRlIHRoZSBmdW5jdGlvbiBpbi5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIHN0YXRlIGlmIHRoZSBzaG9ydGN1dCB3YXMgYWRkZWQgb3Igbm90LlxuXHRcdCAqL1xuXHRcdHNlbGYuYWRkID0gZnVuY3Rpb24ocGF0dGVybiwgZGVzYywgY21kRnVuYywgc2NvcGUpIHtcblx0XHRcdHZhciBjbWQ7XG5cblx0XHRcdGNtZCA9IGNtZEZ1bmM7XG5cblx0XHRcdGlmICh0eXBlb2YgY21kRnVuYyA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Y21kRnVuYyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGVkaXRvci5leGVjQ29tbWFuZChjbWQsIGZhbHNlLCBudWxsKTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoVG9vbHMuaXNBcnJheShjbWQpKSB7XG5cdFx0XHRcdGNtZEZ1bmMgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRlZGl0b3IuZXhlY0NvbW1hbmQoY21kWzBdLCBjbWRbMV0sIGNtZFsyXSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGVhY2goZXhwbG9kZShUb29scy50cmltKHBhdHRlcm4udG9Mb3dlckNhc2UoKSkpLCBmdW5jdGlvbihwYXR0ZXJuKSB7XG5cdFx0XHRcdHZhciBzaG9ydGN1dCA9IGNyZWF0ZVNob3J0Y3V0KHBhdHRlcm4sIGRlc2MsIGNtZEZ1bmMsIHNjb3BlKTtcblx0XHRcdFx0c2hvcnRjdXRzW3Nob3J0Y3V0LmlkXSA9IHNob3J0Y3V0O1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cblx0XHQvKipcblx0XHQgKiBSZW1vdmUgYSBrZXlib2FyZCBzaG9ydGN1dCBieSBwYXR0ZXJuLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW1vdmVcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiBTaG9ydGN1dCBwYXR0ZXJuLiBMaWtlIGZvciBleGFtcGxlOiBjdHJsK2FsdCtvLlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2Ugc3RhdGUgaWYgdGhlIHNob3J0Y3V0IHdhcyByZW1vdmVkIG9yIG5vdC5cblx0XHQgKi9cblx0XHRzZWxmLnJlbW92ZSA9IGZ1bmN0aW9uKHBhdHRlcm4pIHtcblx0XHRcdHZhciBzaG9ydGN1dCA9IGNyZWF0ZVNob3J0Y3V0KHBhdHRlcm4pO1xuXG5cdFx0XHRpZiAoc2hvcnRjdXRzW3Nob3J0Y3V0LmlkXSkge1xuXHRcdFx0XHRkZWxldGUgc2hvcnRjdXRzW3Nob3J0Y3V0LmlkXTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9maWxlL1VwbG9hZGVyLmpzXG5cbi8qKlxuICogVXBsb2FkZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBVcGxvYWQgYmxvYnMgb3IgYmxvYiBpbmZvcyB0byB0aGUgc3BlY2lmaWVkIFVSTCBvciBoYW5kbGVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5maWxlLlVwbG9hZGVyXG4gKiBAZXhhbXBsZVxuICogdmFyIHVwbG9hZGVyID0gbmV3IFVwbG9hZGVyKHtcbiAqICAgICB1cmw6ICcvdXBsb2FkLnBocCcsXG4gKiAgICAgYmFzZVBhdGg6ICcvYmFzZS9wYXRoJyxcbiAqICAgICBjcmVkZW50aWFsczogdHJ1ZSxcbiAqICAgICBoYW5kbGVyOiBmdW5jdGlvbihkYXRhLCBzdWNjZXNzLCBmYWlsdXJlKSB7XG4gKiAgICAgICAgIC4uLlxuICogICAgIH1cbiAqIH0pO1xuICpcbiAqIHVwbG9hZGVyLnVwbG9hZChibG9iSW5mb3MpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gKiAgICAgLi4uXG4gKiB9KTtcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9maWxlL1VwbG9hZGVyXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvUHJvbWlzZVwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvdXRpbC9GdW5cIlxuXSwgZnVuY3Rpb24oUHJvbWlzZSwgVG9vbHMsIEZ1bikge1xuXHRyZXR1cm4gZnVuY3Rpb24odXBsb2FkU3RhdHVzLCBzZXR0aW5ncykge1xuXHRcdHZhciBwZW5kaW5nUHJvbWlzZXMgPSB7fTtcblxuXHRcdGZ1bmN0aW9uIGZpbGVuYW1lKGJsb2JJbmZvKSB7XG5cdFx0XHR2YXIgZXh0LCBleHRlbnNpb25zO1xuXG5cdFx0XHRleHRlbnNpb25zID0ge1xuXHRcdFx0XHQnaW1hZ2UvanBlZyc6ICdqcGcnLFxuXHRcdFx0XHQnaW1hZ2UvanBnJzogJ2pwZycsXG5cdFx0XHRcdCdpbWFnZS9naWYnOiAnZ2lmJyxcblx0XHRcdFx0J2ltYWdlL3BuZyc6ICdwbmcnXG5cdFx0XHR9O1xuXG5cdFx0XHRleHQgPSBleHRlbnNpb25zW2Jsb2JJbmZvLmJsb2IoKS50eXBlLnRvTG93ZXJDYXNlKCldIHx8ICdkYXQnO1xuXG5cdFx0XHRyZXR1cm4gYmxvYkluZm8uZmlsZW5hbWUoKSArICcuJyArIGV4dDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwYXRoSm9pbihwYXRoMSwgcGF0aDIpIHtcblx0XHRcdGlmIChwYXRoMSkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aDEucmVwbGFjZSgvXFwvJC8sICcnKSArICcvJyArIHBhdGgyLnJlcGxhY2UoL15cXC8vLCAnJyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwYXRoMjtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBibG9iSW5mb1RvRGF0YShibG9iSW5mbykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWQ6IGJsb2JJbmZvLmlkLFxuXHRcdFx0XHRibG9iOiBibG9iSW5mby5ibG9iLFxuXHRcdFx0XHRiYXNlNjQ6IGJsb2JJbmZvLmJhc2U2NCxcblx0XHRcdFx0ZmlsZW5hbWU6IEZ1bi5jb25zdGFudChmaWxlbmFtZShibG9iSW5mbykpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRlZmF1bHRIYW5kbGVyKGJsb2JJbmZvLCBzdWNjZXNzLCBmYWlsdXJlLCBwcm9ncmVzcykge1xuXHRcdFx0dmFyIHhociwgZm9ybURhdGE7XG5cblx0XHRcdHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHRcdFx0eGhyLm9wZW4oJ1BPU1QnLCBzZXR0aW5ncy51cmwpO1xuXHRcdFx0eGhyLndpdGhDcmVkZW50aWFscyA9IHNldHRpbmdzLmNyZWRlbnRpYWxzO1xuXG5cdFx0XHR4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHByb2dyZXNzKGUubG9hZGVkIC8gZS50b3RhbCAqIDEwMCk7XG5cdFx0XHR9O1xuXG5cdFx0XHR4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmYWlsdXJlKFwiSW1hZ2UgdXBsb2FkIGZhaWxlZCBkdWUgdG8gYSBYSFIgVHJhbnNwb3J0IGVycm9yLiBDb2RlOiBcIiArIHhoci5zdGF0dXMpO1xuXHRcdFx0fTtcblxuXHRcdFx0eGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIganNvbjtcblxuXHRcdFx0XHRpZiAoeGhyLnN0YXR1cyAhPSAyMDApIHtcblx0XHRcdFx0XHRmYWlsdXJlKFwiSFRUUCBFcnJvcjogXCIgKyB4aHIuc3RhdHVzKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRqc29uID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcblxuXHRcdFx0XHRpZiAoIWpzb24gfHwgdHlwZW9mIGpzb24ubG9jYXRpb24gIT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdGZhaWx1cmUoXCJJbnZhbGlkIEpTT046IFwiICsgeGhyLnJlc3BvbnNlVGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3VjY2VzcyhwYXRoSm9pbihzZXR0aW5ncy5iYXNlUGF0aCwganNvbi5sb2NhdGlvbikpO1xuXHRcdFx0fTtcblxuXHRcdFx0Zm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblx0XHRcdGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGJsb2JJbmZvLmJsb2IoKSwgYmxvYkluZm8uZmlsZW5hbWUoKSk7XG5cblx0XHRcdHhoci5zZW5kKGZvcm1EYXRhKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBub1VwbG9hZCgpIHtcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUoW10pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGFuZGxlclN1Y2Nlc3MoYmxvYkluZm8sIHVybCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRcdGJsb2JJbmZvOiBibG9iSW5mbyxcblx0XHRcdFx0c3RhdHVzOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZXJGYWlsdXJlKGJsb2JJbmZvLCBlcnJvcikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dXJsOiAnJyxcblx0XHRcdFx0YmxvYkluZm86IGJsb2JJbmZvLFxuXHRcdFx0XHRzdGF0dXM6IGZhbHNlLFxuXHRcdFx0XHRlcnJvcjogZXJyb3Jcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcmVzb2x2ZVBlbmRpbmcoYmxvYlVyaSwgcmVzdWx0KSB7XG5cdFx0XHRUb29scy5lYWNoKHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXSwgZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0ZGVsZXRlIHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB1cGxvYWRCbG9iSW5mbyhibG9iSW5mbywgaGFuZGxlciwgb3Blbk5vdGlmaWNhdGlvbikge1xuXHRcdFx0dXBsb2FkU3RhdHVzLm1hcmtQZW5kaW5nKGJsb2JJbmZvLmJsb2JVcmkoKSk7XG5cblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHZhciBub3RpZmljYXRpb24sIHByb2dyZXNzO1xuXG5cdFx0XHRcdHZhciBub29wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR2YXIgY2xvc2VOb3RpZmljYXRpb24gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmIChub3RpZmljYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0bm90aWZpY2F0aW9uLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdHByb2dyZXNzID0gbm9vcDsgLy8gT25jZSBpdCdzIGNsb3NlZCBpdCdzIGNsb3NlZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHR2YXIgc3VjY2VzcyA9IGZ1bmN0aW9uKHVybCkge1xuXHRcdFx0XHRcdFx0Y2xvc2VOb3RpZmljYXRpb24oKTtcblx0XHRcdFx0XHRcdHVwbG9hZFN0YXR1cy5tYXJrVXBsb2FkZWQoYmxvYkluZm8uYmxvYlVyaSgpLCB1cmwpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZVBlbmRpbmcoYmxvYkluZm8uYmxvYlVyaSgpLCBoYW5kbGVyU3VjY2VzcyhibG9iSW5mbywgdXJsKSk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGhhbmRsZXJTdWNjZXNzKGJsb2JJbmZvLCB1cmwpKTtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0dmFyIGZhaWx1cmUgPSBmdW5jdGlvbihlcnJvcikge1xuXHRcdFx0XHRcdFx0Y2xvc2VOb3RpZmljYXRpb24oKTtcblx0XHRcdFx0XHRcdHVwbG9hZFN0YXR1cy5yZW1vdmVGYWlsZWQoYmxvYkluZm8uYmxvYlVyaSgpKTtcblx0XHRcdFx0XHRcdHJlc29sdmVQZW5kaW5nKGJsb2JJbmZvLmJsb2JVcmkoKSwgaGFuZGxlckZhaWx1cmUoYmxvYkluZm8sIGVycm9yKSk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGhhbmRsZXJGYWlsdXJlKGJsb2JJbmZvLCBlcnJvcikpO1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRwcm9ncmVzcyA9IGZ1bmN0aW9uKHBlcmNlbnQpIHtcblx0XHRcdFx0XHRcdGlmIChwZXJjZW50IDwgMCB8fCBwZXJjZW50ID4gMTAwKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKCFub3RpZmljYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0bm90aWZpY2F0aW9uID0gb3Blbk5vdGlmaWNhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRub3RpZmljYXRpb24ucHJvZ3Jlc3NCYXIudmFsdWUocGVyY2VudCk7XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGhhbmRsZXIoYmxvYkluZm9Ub0RhdGEoYmxvYkluZm8pLCBzdWNjZXNzLCBmYWlsdXJlLCBwcm9ncmVzcyk7XG5cdFx0XHRcdH0gY2F0Y2ggKGV4KSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShoYW5kbGVyRmFpbHVyZShibG9iSW5mbywgZXgubWVzc2FnZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc0RlZmF1bHRIYW5kbGVyKGhhbmRsZXIpIHtcblx0XHRcdHJldHVybiBoYW5kbGVyID09PSBkZWZhdWx0SGFuZGxlcjtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwZW5kaW5nVXBsb2FkQmxvYkluZm8oYmxvYkluZm8pIHtcblx0XHRcdHZhciBibG9iVXJpID0gYmxvYkluZm8uYmxvYlVyaSgpO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRwZW5kaW5nUHJvbWlzZXNbYmxvYlVyaV0gPSBwZW5kaW5nUHJvbWlzZXNbYmxvYlVyaV0gfHwgW107XG5cdFx0XHRcdHBlbmRpbmdQcm9taXNlc1tibG9iVXJpXS5wdXNoKHJlc29sdmUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdXBsb2FkQmxvYnMoYmxvYkluZm9zLCBvcGVuTm90aWZpY2F0aW9uKSB7XG5cdFx0XHRibG9iSW5mb3MgPSBUb29scy5ncmVwKGJsb2JJbmZvcywgZnVuY3Rpb24oYmxvYkluZm8pIHtcblx0XHRcdFx0cmV0dXJuICF1cGxvYWRTdGF0dXMuaXNVcGxvYWRlZChibG9iSW5mby5ibG9iVXJpKCkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChUb29scy5tYXAoYmxvYkluZm9zLCBmdW5jdGlvbihibG9iSW5mbykge1xuXHRcdFx0XHRyZXR1cm4gdXBsb2FkU3RhdHVzLmlzUGVuZGluZyhibG9iSW5mby5ibG9iVXJpKCkpID9cblx0XHRcdFx0XHRwZW5kaW5nVXBsb2FkQmxvYkluZm8oYmxvYkluZm8pIDogdXBsb2FkQmxvYkluZm8oYmxvYkluZm8sIHNldHRpbmdzLmhhbmRsZXIsIG9wZW5Ob3RpZmljYXRpb24pO1xuXHRcdFx0fSkpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHVwbG9hZChibG9iSW5mb3MsIG9wZW5Ob3RpZmljYXRpb24pIHtcblx0XHRcdHJldHVybiAoIXNldHRpbmdzLnVybCAmJiBpc0RlZmF1bHRIYW5kbGVyKHNldHRpbmdzLmhhbmRsZXIpKSA/IG5vVXBsb2FkKCkgOiB1cGxvYWRCbG9icyhibG9iSW5mb3MsIG9wZW5Ob3RpZmljYXRpb24pO1xuXHRcdH1cblxuXHRcdHNldHRpbmdzID0gVG9vbHMuZXh0ZW5kKHtcblx0XHRcdGNyZWRlbnRpYWxzOiBmYWxzZSxcblx0XHRcdC8vIFdlIGFyZSBhZGRpbmcgYSBub3RpZnkgYXJndW1lbnQgdG8gdGhpcyAoYXQgdGhlIG1vbWVudCwgdW50aWwgaXQgZG9lc24ndCB3b3JrKVxuXHRcdFx0aGFuZGxlcjogZGVmYXVsdEhhbmRsZXJcblx0XHR9LCBzZXR0aW5ncyk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dXBsb2FkOiB1cGxvYWRcblx0XHR9O1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9maWxlL0NvbnZlcnNpb25zLmpzXG5cbi8qKlxuICogQ29udmVyc2lvbnMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBibG9iL3VyaXMgYmFjayBhbmQgZm9ydGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmZpbGUuQ29udmVyc2lvbnNcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9maWxlL0NvbnZlcnNpb25zXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvUHJvbWlzZVwiXG5dLCBmdW5jdGlvbihQcm9taXNlKSB7XG5cdGZ1bmN0aW9uIGJsb2JVcmlUb0Jsb2IodXJsKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuXHRcdFx0eGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG5cdFx0XHR4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuXG5cdFx0XHR4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICh0aGlzLnN0YXR1cyA9PSAyMDApIHtcblx0XHRcdFx0XHRyZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR4aHIuc2VuZCgpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VEYXRhVXJpKHVyaSkge1xuXHRcdHZhciB0eXBlLCBtYXRjaGVzO1xuXG5cdFx0dXJpID0gZGVjb2RlVVJJQ29tcG9uZW50KHVyaSkuc3BsaXQoJywnKTtcblxuXHRcdG1hdGNoZXMgPSAvZGF0YTooW147XSspLy5leGVjKHVyaVswXSk7XG5cdFx0aWYgKG1hdGNoZXMpIHtcblx0XHRcdHR5cGUgPSBtYXRjaGVzWzFdO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogdXJpWzFdXG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRhdGFVcmlUb0Jsb2IodXJpKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdHZhciBzdHIsIGFyciwgaTtcblxuXHRcdFx0dXJpID0gcGFyc2VEYXRhVXJpKHVyaSk7XG5cblx0XHRcdC8vIE1pZ2h0IHRocm93IGVycm9yIGlmIGRhdGEgaXNuJ3QgcHJvcGVyIGJhc2U2NFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RyID0gYXRvYih1cmkuZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlc29sdmUobmV3IEJsb2IoW10pKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRhcnIgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3RoKTtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRhcnJbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZShuZXcgQmxvYihbYXJyXSwge3R5cGU6IHVyaS50eXBlfSkpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gdXJpVG9CbG9iKHVybCkge1xuXHRcdGlmICh1cmwuaW5kZXhPZignYmxvYjonKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIGJsb2JVcmlUb0Jsb2IodXJsKTtcblx0XHR9XG5cblx0XHRpZiAodXJsLmluZGV4T2YoJ2RhdGE6JykgPT09IDApIHtcblx0XHRcdHJldHVybiBkYXRhVXJpVG9CbG9iKHVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiBibG9iVG9EYXRhVXJpKGJsb2IpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0dmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cblx0XHRcdHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmVzb2x2ZShyZWFkZXIucmVzdWx0KTtcblx0XHRcdH07XG5cblx0XHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR1cmlUb0Jsb2I6IHVyaVRvQmxvYixcblx0XHRibG9iVG9EYXRhVXJpOiBibG9iVG9EYXRhVXJpLFxuXHRcdHBhcnNlRGF0YVVyaTogcGFyc2VEYXRhVXJpXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2ZpbGUvSW1hZ2VTY2FubmVyLmpzXG5cbi8qKlxuICogSW1hZ2VTY2FubmVyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogRmluZHMgaW1hZ2VzIHdpdGggZGF0YSB1cmlzIG9yIGJsb2IgdXJpcy4gSWYgZGF0YSB1cmlzIGFyZSBmb3VuZCBpdCB3aWxsIGNvbnZlcnQgdGhlbSBpbnRvIGJsb2IgdXJpcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuZmlsZS5JbWFnZVNjYW5uZXJcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9maWxlL0ltYWdlU2Nhbm5lclwiLCBbXG5cdFwidGlueW1jZS91dGlsL1Byb21pc2VcIixcblx0XCJ0aW55bWNlL3V0aWwvQXJyXCIsXG5cdFwidGlueW1jZS91dGlsL0Z1blwiLFxuXHRcInRpbnltY2UvZmlsZS9Db252ZXJzaW9uc1wiLFxuXHRcInRpbnltY2UvRW52XCJcbl0sIGZ1bmN0aW9uKFByb21pc2UsIEFyciwgRnVuLCBDb252ZXJzaW9ucywgRW52KSB7XG5cdHZhciBjb3VudCA9IDA7XG5cblx0dmFyIHVuaXF1ZUlkID0gZnVuY3Rpb24ocHJlZml4KSB7XG5cdFx0cmV0dXJuIChwcmVmaXggfHwgJ2Jsb2JpZCcpICsgKGNvdW50KyspO1xuXHR9O1xuXG5cdHJldHVybiBmdW5jdGlvbih1cGxvYWRTdGF0dXMsIGJsb2JDYWNoZSkge1xuXHRcdHZhciBjYWNoZWRQcm9taXNlcyA9IHt9O1xuXG5cdFx0ZnVuY3Rpb24gZmluZEFsbChlbG0sIHByZWRpY2F0ZSkge1xuXHRcdFx0dmFyIGltYWdlcywgcHJvbWlzZXM7XG5cblx0XHRcdGZ1bmN0aW9uIGltYWdlVG9CbG9iSW5mbyhpbWcsIHJlc29sdmUpIHtcblx0XHRcdFx0dmFyIGJhc2U2NCwgYmxvYkluZm87XG5cblx0XHRcdFx0aWYgKGltZy5zcmMuaW5kZXhPZignYmxvYjonKSA9PT0gMCkge1xuXHRcdFx0XHRcdGJsb2JJbmZvID0gYmxvYkNhY2hlLmdldEJ5VXJpKGltZy5zcmMpO1xuXG5cdFx0XHRcdFx0aWYgKGJsb2JJbmZvKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0XHRcdFx0aW1hZ2U6IGltZyxcblx0XHRcdFx0XHRcdFx0YmxvYkluZm86IGJsb2JJbmZvXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Q29udmVyc2lvbnMudXJpVG9CbG9iKGltZy5zcmMpLnRoZW4oZnVuY3Rpb24gKGJsb2IpIHtcblx0XHRcdFx0XHRcdFx0Q29udmVyc2lvbnMuYmxvYlRvRGF0YVVyaShibG9iKS50aGVuKGZ1bmN0aW9uIChkYXRhVXJpKSB7XG5cdFx0XHRcdFx0XHRcdFx0YmFzZTY0ID0gQ29udmVyc2lvbnMucGFyc2VEYXRhVXJpKGRhdGFVcmkpLmRhdGE7XG5cdFx0XHRcdFx0XHRcdFx0YmxvYkluZm8gPSBibG9iQ2FjaGUuY3JlYXRlKHVuaXF1ZUlkKCksIGJsb2IsIGJhc2U2NCk7XG5cdFx0XHRcdFx0XHRcdFx0YmxvYkNhY2hlLmFkZChibG9iSW5mbyk7XG5cblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0XHRcdFx0XHRcdGltYWdlOiBpbWcsXG5cdFx0XHRcdFx0XHRcdFx0XHRibG9iSW5mbzogYmxvYkluZm9cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlNjQgPSBDb252ZXJzaW9ucy5wYXJzZURhdGFVcmkoaW1nLnNyYykuZGF0YTtcblx0XHRcdFx0YmxvYkluZm8gPSBibG9iQ2FjaGUuZmluZEZpcnN0KGZ1bmN0aW9uKGNhY2hlZEJsb2JJbmZvKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNhY2hlZEJsb2JJbmZvLmJhc2U2NCgpID09PSBiYXNlNjQ7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChibG9iSW5mbykge1xuXHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0aW1hZ2U6IGltZyxcblx0XHRcdFx0XHRcdGJsb2JJbmZvOiBibG9iSW5mb1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdENvbnZlcnNpb25zLnVyaVRvQmxvYihpbWcuc3JjKS50aGVuKGZ1bmN0aW9uKGJsb2IpIHtcblx0XHRcdFx0XHRcdGJsb2JJbmZvID0gYmxvYkNhY2hlLmNyZWF0ZSh1bmlxdWVJZCgpLCBibG9iLCBiYXNlNjQpO1xuXHRcdFx0XHRcdFx0YmxvYkNhY2hlLmFkZChibG9iSW5mbyk7XG5cblx0XHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0XHRpbWFnZTogaW1nLFxuXHRcdFx0XHRcdFx0XHRibG9iSW5mbzogYmxvYkluZm9cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghcHJlZGljYXRlKSB7XG5cdFx0XHRcdHByZWRpY2F0ZSA9IEZ1bi5jb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0aW1hZ2VzID0gQXJyLmZpbHRlcihlbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpLCBmdW5jdGlvbihpbWcpIHtcblx0XHRcdFx0dmFyIHNyYyA9IGltZy5zcmM7XG5cblx0XHRcdFx0aWYgKCFFbnYuZmlsZUFwaSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpbWcuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGltZy5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWNlLXBsYWNlaG9sZGVyJykpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXNyYyB8fCBzcmMgPT0gRW52LnRyYW5zcGFyZW50U3JjKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNyYy5pbmRleE9mKCdibG9iOicpID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuICF1cGxvYWRTdGF0dXMuaXNVcGxvYWRlZChzcmMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNyYy5pbmRleE9mKCdkYXRhOicpID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByZWRpY2F0ZShpbWcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdHByb21pc2VzID0gQXJyLm1hcChpbWFnZXMsIGZ1bmN0aW9uKGltZykge1xuXHRcdFx0XHR2YXIgbmV3UHJvbWlzZTtcblxuXHRcdFx0XHRpZiAoY2FjaGVkUHJvbWlzZXNbaW1nLnNyY10pIHtcblx0XHRcdFx0XHQvLyBTaW5jZSB0aGUgY2FjaGVkIHByb21pc2Ugd2lsbCByZXR1cm4gdGhlIGNhY2hlZCBpbWFnZVxuXHRcdFx0XHRcdC8vIFdlIG5lZWQgdG8gd3JhcCBpdCBhbmQgcmVzb2x2ZSB3aXRoIHRoZSBhY3R1YWwgaW1hZ2Vcblx0XHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRcdFx0Y2FjaGVkUHJvbWlzZXNbaW1nLnNyY10udGhlbihmdW5jdGlvbihpbWFnZUluZm8pIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh7XG5cdFx0XHRcdFx0XHRcdFx0aW1hZ2U6IGltZyxcblx0XHRcdFx0XHRcdFx0XHRibG9iSW5mbzogaW1hZ2VJbmZvLmJsb2JJbmZvXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRuZXdQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRcdGltYWdlVG9CbG9iSW5mbyhpbWcsIHJlc29sdmUpO1xuXHRcdFx0XHR9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuXHRcdFx0XHRcdGRlbGV0ZSBjYWNoZWRQcm9taXNlc1tyZXN1bHQuaW1hZ2Uuc3JjXTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9KVsnY2F0Y2gnXShmdW5jdGlvbihlcnJvcikge1xuXHRcdFx0XHRcdGRlbGV0ZSBjYWNoZWRQcm9taXNlc1tpbWcuc3JjXTtcblx0XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNhY2hlZFByb21pc2VzW2ltZy5zcmNdID0gbmV3UHJvbWlzZTtcblxuXHRcdFx0XHRyZXR1cm4gbmV3UHJvbWlzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRmaW5kQWxsOiBmaW5kQWxsXG5cdFx0fTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZmlsZS9CbG9iQ2FjaGUuanNcblxuLyoqXG4gKiBCbG9iQ2FjaGUuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBIb2xkIGJsb2IgaW5mbyBvYmplY3RzIHdoZXJlIGEgYmxvYiBoYXMgZXh0cmEgaW50ZXJuYWwgaW5mb3JtYXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmZpbGUuQmxvYkNhY2hlXG4gKi9cbmRlZmluZShcInRpbnltY2UvZmlsZS9CbG9iQ2FjaGVcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL3V0aWwvRnVuXCJcbl0sIGZ1bmN0aW9uKEFyciwgRnVuKSB7XG5cdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FjaGUgPSBbXSwgY29uc3RhbnQgPSBGdW4uY29uc3RhbnQ7XG5cblx0XHRmdW5jdGlvbiBjcmVhdGUoaWQsIGJsb2IsIGJhc2U2NCwgZmlsZW5hbWUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlkOiBjb25zdGFudChpZCksXG5cdFx0XHRcdGZpbGVuYW1lOiBjb25zdGFudChmaWxlbmFtZSB8fCBpZCksXG5cdFx0XHRcdGJsb2I6IGNvbnN0YW50KGJsb2IpLFxuXHRcdFx0XHRiYXNlNjQ6IGNvbnN0YW50KGJhc2U2NCksXG5cdFx0XHRcdGJsb2JVcmk6IGNvbnN0YW50KFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGFkZChibG9iSW5mbykge1xuXHRcdFx0aWYgKCFnZXQoYmxvYkluZm8uaWQoKSkpIHtcblx0XHRcdFx0Y2FjaGUucHVzaChibG9iSW5mbyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0KGlkKSB7XG5cdFx0XHRyZXR1cm4gZmluZEZpcnN0KGZ1bmN0aW9uKGNhY2hlZEJsb2JJbmZvKSB7XG5cdFx0XHRcdHJldHVybiBjYWNoZWRCbG9iSW5mby5pZCgpID09PSBpZDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZpbmRGaXJzdChwcmVkaWNhdGUpIHtcblx0XHRcdHJldHVybiBBcnIuZmlsdGVyKGNhY2hlLCBwcmVkaWNhdGUpWzBdO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldEJ5VXJpKGJsb2JVcmkpIHtcblx0XHRcdHJldHVybiBmaW5kRmlyc3QoZnVuY3Rpb24oYmxvYkluZm8pIHtcblx0XHRcdFx0cmV0dXJuIGJsb2JJbmZvLmJsb2JVcmkoKSA9PSBibG9iVXJpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcmVtb3ZlQnlVcmkoYmxvYlVyaSkge1xuXHRcdFx0Y2FjaGUgPSBBcnIuZmlsdGVyKGNhY2hlLCBmdW5jdGlvbihibG9iSW5mbykge1xuXHRcdFx0XHRpZiAoYmxvYkluZm8uYmxvYlVyaSgpID09PSBibG9iVXJpKSB7XG5cdFx0XHRcdFx0VVJMLnJldm9rZU9iamVjdFVSTChibG9iSW5mby5ibG9iVXJpKCkpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRcdEFyci5lYWNoKGNhY2hlLCBmdW5jdGlvbihjYWNoZWRCbG9iSW5mbykge1xuXHRcdFx0XHRVUkwucmV2b2tlT2JqZWN0VVJMKGNhY2hlZEJsb2JJbmZvLmJsb2JVcmkoKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y2FjaGUgPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y3JlYXRlOiBjcmVhdGUsXG5cdFx0XHRhZGQ6IGFkZCxcblx0XHRcdGdldDogZ2V0LFxuXHRcdFx0Z2V0QnlVcmk6IGdldEJ5VXJpLFxuXHRcdFx0ZmluZEZpcnN0OiBmaW5kRmlyc3QsXG5cdFx0XHRyZW1vdmVCeVVyaTogcmVtb3ZlQnlVcmksXG5cdFx0XHRkZXN0cm95OiBkZXN0cm95XG5cdFx0fTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZmlsZS9VcGxvYWRTdGF0dXMuanNcblxuLyoqXG4gKiBVcGxvYWRTdGF0dXMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBIb2xkcyB0aGUgY3VycmVudCBzdGF0dXMgb2YgYSBibG9iIHVyaSwgaWYgaXQncyBwZW5kaW5nIG9yIHVwbG9hZGVkIGFuZCB3aGF0IHRoZSByZXN1bHQgdXJscyB3YXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmZpbGUuVXBsb2FkU3RhdHVzXG4gKi9cbmRlZmluZShcInRpbnltY2UvZmlsZS9VcGxvYWRTdGF0dXNcIiwgW1xuXSwgZnVuY3Rpb24oKSB7XG5cdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHR2YXIgUEVORElORyA9IDEsIFVQTE9BREVEID0gMjtcblx0XHR2YXIgYmxvYlVyaVN0YXR1c2VzID0ge307XG5cblx0XHRmdW5jdGlvbiBjcmVhdGVTdGF0dXMoc3RhdHVzLCByZXN1bHRVcmkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXR1czogc3RhdHVzLFxuXHRcdFx0XHRyZXN1bHRVcmk6IHJlc3VsdFVyaVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYXNCbG9iVXJpKGJsb2JVcmkpIHtcblx0XHRcdHJldHVybiBibG9iVXJpIGluIGJsb2JVcmlTdGF0dXNlcztcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRSZXN1bHRVcmkoYmxvYlVyaSkge1xuXHRcdFx0dmFyIHJlc3VsdCA9IGJsb2JVcmlTdGF0dXNlc1tibG9iVXJpXTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdCA/IHJlc3VsdC5yZXN1bHRVcmkgOiBudWxsO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzUGVuZGluZyhibG9iVXJpKSB7XG5cdFx0XHRyZXR1cm4gaGFzQmxvYlVyaShibG9iVXJpKSA/IGJsb2JVcmlTdGF0dXNlc1tibG9iVXJpXS5zdGF0dXMgPT09IFBFTkRJTkcgOiBmYWxzZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc1VwbG9hZGVkKGJsb2JVcmkpIHtcblx0XHRcdHJldHVybiBoYXNCbG9iVXJpKGJsb2JVcmkpID8gYmxvYlVyaVN0YXR1c2VzW2Jsb2JVcmldLnN0YXR1cyA9PT0gVVBMT0FERUQgOiBmYWxzZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBtYXJrUGVuZGluZyhibG9iVXJpKSB7XG5cdFx0XHRibG9iVXJpU3RhdHVzZXNbYmxvYlVyaV0gPSBjcmVhdGVTdGF0dXMoUEVORElORywgbnVsbCk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbWFya1VwbG9hZGVkKGJsb2JVcmksIHJlc3VsdFVyaSkge1xuXHRcdFx0YmxvYlVyaVN0YXR1c2VzW2Jsb2JVcmldID0gY3JlYXRlU3RhdHVzKFVQTE9BREVELCByZXN1bHRVcmkpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlbW92ZUZhaWxlZChibG9iVXJpKSB7XG5cdFx0XHRkZWxldGUgYmxvYlVyaVN0YXR1c2VzW2Jsb2JVcmldO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0XHRibG9iVXJpU3RhdHVzZXMgPSB7fTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aGFzQmxvYlVyaTogaGFzQmxvYlVyaSxcblx0XHRcdGdldFJlc3VsdFVyaTogZ2V0UmVzdWx0VXJpLFxuXHRcdFx0aXNQZW5kaW5nOiBpc1BlbmRpbmcsXG5cdFx0XHRpc1VwbG9hZGVkOiBpc1VwbG9hZGVkLFxuXHRcdFx0bWFya1BlbmRpbmc6IG1hcmtQZW5kaW5nLFxuXHRcdFx0bWFya1VwbG9hZGVkOiBtYXJrVXBsb2FkZWQsXG5cdFx0XHRyZW1vdmVGYWlsZWQ6IHJlbW92ZUZhaWxlZCxcblx0XHRcdGRlc3Ryb3k6IGRlc3Ryb3lcblx0XHR9O1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9FcnJvclJlcG9ydGVyLmpzXG5cbi8qKlxuICogRXJyb3JSZXBvcnRlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE2IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFZhcmlvdXMgZXJyb3IgcmVwb3J0aW5nIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuRXJyb3JSZXBvcnRlclxuICogQHByaXZhdGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9FcnJvclJlcG9ydGVyXCIsIFtcblx0XCJ0aW55bWNlL0FkZE9uTWFuYWdlclwiXG5dLCBmdW5jdGlvbiAoQWRkT25NYW5hZ2VyKSB7XG5cdHZhciBQbHVnaW5NYW5hZ2VyID0gQWRkT25NYW5hZ2VyLlBsdWdpbk1hbmFnZXI7XG5cblx0dmFyIHJlc29sdmVQbHVnaW5OYW1lID0gZnVuY3Rpb24gKHRhcmdldFVybCwgc3VmZml4KSB7XG5cdFx0Zm9yICh2YXIgbmFtZSBpbiBQbHVnaW5NYW5hZ2VyLnVybHMpIHtcblx0XHRcdHZhciBtYXRjaFVybCA9IFBsdWdpbk1hbmFnZXIudXJsc1tuYW1lXSArICcvcGx1Z2luJyArIHN1ZmZpeCArICcuanMnO1xuXHRcdFx0aWYgKG1hdGNoVXJsID09PSB0YXJnZXRVcmwpIHtcblx0XHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0dmFyIHBsdWdpblVybFRvTWVzc2FnZSA9IGZ1bmN0aW9uIChlZGl0b3IsIHVybCkge1xuXHRcdHZhciBwbHVnaW4gPSByZXNvbHZlUGx1Z2luTmFtZSh1cmwsIGVkaXRvci5zdWZmaXgpO1xuXHRcdHJldHVybiBwbHVnaW4gP1xuXHRcdFx0J0ZhaWxlZCB0byBsb2FkIHBsdWdpbjogJyArIHBsdWdpbiArICcgZnJvbSB1cmwgJyArIHVybCA6XG5cdFx0XHQnRmFpbGVkIHRvIGxvYWQgcGx1Z2luIHVybDogJyArIHVybDtcblx0fTtcblxuXHR2YXIgZGlzcGxheU5vdGlmaWNhdGlvbiA9IGZ1bmN0aW9uIChlZGl0b3IsIG1lc3NhZ2UpIHtcblx0XHRlZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHtcblx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHR0ZXh0OiBtZXNzYWdlXG5cdFx0fSk7XG5cdH07XG5cblx0dmFyIGRpc3BsYXlFcnJvciA9IGZ1bmN0aW9uIChlZGl0b3IsIG1lc3NhZ2UpIHtcblx0XHRpZiAoZWRpdG9yLl9za2luTG9hZGVkKSB7XG5cdFx0XHRkaXNwbGF5Tm90aWZpY2F0aW9uKGVkaXRvciwgbWVzc2FnZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVkaXRvci5vbignU2tpbkxvYWRlZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0ZGlzcGxheU5vdGlmaWNhdGlvbihlZGl0b3IsIG1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciB1cGxvYWRFcnJvciA9IGZ1bmN0aW9uIChlZGl0b3IsIG1lc3NhZ2UpIHtcblx0XHRkaXNwbGF5RXJyb3IoZWRpdG9yLCAnRmFpbGVkIHRvIHVwbG9hZCBpbWFnZTogJyArIG1lc3NhZ2UpO1xuXHR9O1xuXG5cdHZhciBwbHVnaW5Mb2FkRXJyb3IgPSBmdW5jdGlvbiAoZWRpdG9yLCB1cmwpIHtcblx0XHRkaXNwbGF5RXJyb3IoZWRpdG9yLCBwbHVnaW5VcmxUb01lc3NhZ2UoZWRpdG9yLCB1cmwpKTtcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdHBsdWdpbkxvYWRFcnJvcjogcGx1Z2luTG9hZEVycm9yLFxuXHRcdHVwbG9hZEVycm9yOiB1cGxvYWRFcnJvclxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9FZGl0b3JVcGxvYWQuanNcblxuLyoqXG4gKiBFZGl0b3JVcGxvYWQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBIYW5kbGVzIGltYWdlIHVwbG9hZHMsIHVwZGF0ZXMgdW5kbyBzdGFjayBhbmQgcGF0Y2hlcyBvdmVyIHZhcmlvdXMgaW50ZXJuYWwgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5FZGl0b3JVcGxvYWRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9FZGl0b3JVcGxvYWRcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL2ZpbGUvVXBsb2FkZXJcIixcblx0XCJ0aW55bWNlL2ZpbGUvSW1hZ2VTY2FubmVyXCIsXG5cdFwidGlueW1jZS9maWxlL0Jsb2JDYWNoZVwiLFxuXHRcInRpbnltY2UvZmlsZS9VcGxvYWRTdGF0dXNcIixcblx0XCJ0aW55bWNlL0Vycm9yUmVwb3J0ZXJcIlxuXSwgZnVuY3Rpb24oQXJyLCBVcGxvYWRlciwgSW1hZ2VTY2FubmVyLCBCbG9iQ2FjaGUsIFVwbG9hZFN0YXR1cywgRXJyb3JSZXBvcnRlcikge1xuXHRyZXR1cm4gZnVuY3Rpb24oZWRpdG9yKSB7XG5cdFx0dmFyIGJsb2JDYWNoZSA9IG5ldyBCbG9iQ2FjaGUoKSwgdXBsb2FkZXIsIGltYWdlU2Nhbm5lciwgc2V0dGluZ3MgPSBlZGl0b3Iuc2V0dGluZ3M7XG5cdFx0dmFyIHVwbG9hZFN0YXR1cyA9IG5ldyBVcGxvYWRTdGF0dXMoKTtcblxuXHRcdGZ1bmN0aW9uIGFsaXZlR3VhcmQoY2FsbGJhY2spIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbihyZXN1bHQpIHtcblx0XHRcdFx0aWYgKGVkaXRvci5zZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gY2FsbGJhY2socmVzdWx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY2FjaGVJbnZhbGlkYXRvcigpIHtcblx0XHRcdHJldHVybiAnPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXHRcdH1cblxuXHRcdC8vIFJlcGxhY2VzIHN0cmluZ3Mgd2l0aG91dCByZWdleHBzIHRvIGF2b2lkIEZGIHJlZ2V4cCB0byBiaWcgaXNzdWVcblx0XHRmdW5jdGlvbiByZXBsYWNlU3RyaW5nKGNvbnRlbnQsIHNlYXJjaCwgcmVwbGFjZSkge1xuXHRcdFx0dmFyIGluZGV4ID0gMDtcblxuXHRcdFx0ZG8ge1xuXHRcdFx0XHRpbmRleCA9IGNvbnRlbnQuaW5kZXhPZihzZWFyY2gsIGluZGV4KTtcblxuXHRcdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2UgKyBjb250ZW50LnN1YnN0cihpbmRleCArIHNlYXJjaC5sZW5ndGgpO1xuXHRcdFx0XHRcdGluZGV4ICs9IHJlcGxhY2UubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCArIDE7XG5cdFx0XHRcdH1cblx0XHRcdH0gd2hpbGUgKGluZGV4ICE9PSAtMSk7XG5cblx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlcGxhY2VJbWFnZVVybChjb250ZW50LCB0YXJnZXRVcmwsIHJlcGxhY2VtZW50VXJsKSB7XG5cdFx0XHRjb250ZW50ID0gcmVwbGFjZVN0cmluZyhjb250ZW50LCAnc3JjPVwiJyArIHRhcmdldFVybCArICdcIicsICdzcmM9XCInICsgcmVwbGFjZW1lbnRVcmwgKyAnXCInKTtcblx0XHRcdGNvbnRlbnQgPSByZXBsYWNlU3RyaW5nKGNvbnRlbnQsICdkYXRhLW1jZS1zcmM9XCInICsgdGFyZ2V0VXJsICsgJ1wiJywgJ2RhdGEtbWNlLXNyYz1cIicgKyByZXBsYWNlbWVudFVybCArICdcIicpO1xuXG5cdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZXBsYWNlVXJsSW5VbmRvU3RhY2sodGFyZ2V0VXJsLCByZXBsYWNlbWVudFVybCkge1xuXHRcdFx0QXJyLmVhY2goZWRpdG9yLnVuZG9NYW5hZ2VyLmRhdGEsIGZ1bmN0aW9uKGxldmVsKSB7XG5cdFx0XHRcdGlmIChsZXZlbC50eXBlID09PSAnZnJhZ21lbnRlZCcpIHtcblx0XHRcdFx0XHRsZXZlbC5mcmFnbWVudHMgPSBBcnIubWFwKGxldmVsLmZyYWdtZW50cywgZnVuY3Rpb24gKGZyYWdtZW50KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZUltYWdlVXJsKGZyYWdtZW50LCB0YXJnZXRVcmwsIHJlcGxhY2VtZW50VXJsKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsZXZlbC5jb250ZW50ID0gcmVwbGFjZUltYWdlVXJsKGxldmVsLmNvbnRlbnQsIHRhcmdldFVybCwgcmVwbGFjZW1lbnRVcmwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBvcGVuTm90aWZpY2F0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGVkaXRvci5ub3RpZmljYXRpb25NYW5hZ2VyLm9wZW4oe1xuXHRcdFx0XHR0ZXh0OiBlZGl0b3IudHJhbnNsYXRlKCdJbWFnZSB1cGxvYWRpbmcuLi4nKSxcblx0XHRcdFx0dHlwZTogJ2luZm8nLFxuXHRcdFx0XHR0aW1lb3V0OiAtMSxcblx0XHRcdFx0cHJvZ3Jlc3NCYXI6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlcGxhY2VJbWFnZVVyaShpbWFnZSwgcmVzdWx0VXJpKSB7XG5cdFx0XHRibG9iQ2FjaGUucmVtb3ZlQnlVcmkoaW1hZ2Uuc3JjKTtcblx0XHRcdHJlcGxhY2VVcmxJblVuZG9TdGFjayhpbWFnZS5zcmMsIHJlc3VsdFVyaSk7XG5cblx0XHRcdGVkaXRvci4kKGltYWdlKS5hdHRyKHtcblx0XHRcdFx0c3JjOiBzZXR0aW5ncy5pbWFnZXNfcmV1c2VfZmlsZW5hbWUgPyByZXN1bHRVcmkgKyBjYWNoZUludmFsaWRhdG9yKCkgOiByZXN1bHRVcmksXG5cdFx0XHRcdCdkYXRhLW1jZS1zcmMnOiBlZGl0b3IuY29udmVydFVSTChyZXN1bHRVcmksICdzcmMnKVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdXBsb2FkSW1hZ2VzKGNhbGxiYWNrKSB7XG5cdFx0XHRpZiAoIXVwbG9hZGVyKSB7XG5cdFx0XHRcdHVwbG9hZGVyID0gbmV3IFVwbG9hZGVyKHVwbG9hZFN0YXR1cywge1xuXHRcdFx0XHRcdHVybDogc2V0dGluZ3MuaW1hZ2VzX3VwbG9hZF91cmwsXG5cdFx0XHRcdFx0YmFzZVBhdGg6IHNldHRpbmdzLmltYWdlc191cGxvYWRfYmFzZV9wYXRoLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBzZXR0aW5ncy5pbWFnZXNfdXBsb2FkX2NyZWRlbnRpYWxzLFxuXHRcdFx0XHRcdGhhbmRsZXI6IHNldHRpbmdzLmltYWdlc191cGxvYWRfaGFuZGxlclxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNjYW5Gb3JJbWFnZXMoKS50aGVuKGFsaXZlR3VhcmQoZnVuY3Rpb24oaW1hZ2VJbmZvcykge1xuXHRcdFx0XHR2YXIgYmxvYkluZm9zO1xuXG5cdFx0XHRcdGJsb2JJbmZvcyA9IEFyci5tYXAoaW1hZ2VJbmZvcywgZnVuY3Rpb24oaW1hZ2VJbmZvKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGltYWdlSW5mby5ibG9iSW5mbztcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIHVwbG9hZGVyLnVwbG9hZChibG9iSW5mb3MsIG9wZW5Ob3RpZmljYXRpb24pLnRoZW4oYWxpdmVHdWFyZChmdW5jdGlvbihyZXN1bHQpIHtcblx0XHRcdFx0XHRyZXN1bHQgPSBBcnIubWFwKHJlc3VsdCwgZnVuY3Rpb24odXBsb2FkSW5mbywgaW5kZXgpIHtcblx0XHRcdFx0XHRcdHZhciBpbWFnZSA9IGltYWdlSW5mb3NbaW5kZXhdLmltYWdlO1xuXG5cdFx0XHRcdFx0XHRpZiAodXBsb2FkSW5mby5zdGF0dXMgJiYgZWRpdG9yLnNldHRpbmdzLmltYWdlc19yZXBsYWNlX2Jsb2JfdXJpcyAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0cmVwbGFjZUltYWdlVXJpKGltYWdlLCB1cGxvYWRJbmZvLnVybCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHVwbG9hZEluZm8uZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0RXJyb3JSZXBvcnRlci51cGxvYWRFcnJvcihlZGl0b3IsIHVwbG9hZEluZm8uZXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBpbWFnZSxcblx0XHRcdFx0XHRcdFx0c3RhdHVzOiB1cGxvYWRJbmZvLnN0YXR1c1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChjYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2socmVzdWx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9KSk7XG5cdFx0XHR9KSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdXBsb2FkSW1hZ2VzQXV0byhjYWxsYmFjaykge1xuXHRcdFx0aWYgKHNldHRpbmdzLmF1dG9tYXRpY191cGxvYWRzICE9PSBmYWxzZSkge1xuXHRcdFx0XHRyZXR1cm4gdXBsb2FkSW1hZ2VzKGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc1ZhbGlkRGF0YVVyaUltYWdlKGltZ0VsbSkge1xuXHRcdFx0cmV0dXJuIHNldHRpbmdzLmltYWdlc19kYXRhaW1nX2ZpbHRlciA/IHNldHRpbmdzLmltYWdlc19kYXRhaW1nX2ZpbHRlcihpbWdFbG0pIDogdHJ1ZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzY2FuRm9ySW1hZ2VzKCkge1xuXHRcdFx0aWYgKCFpbWFnZVNjYW5uZXIpIHtcblx0XHRcdFx0aW1hZ2VTY2FubmVyID0gbmV3IEltYWdlU2Nhbm5lcih1cGxvYWRTdGF0dXMsIGJsb2JDYWNoZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBpbWFnZVNjYW5uZXIuZmluZEFsbChlZGl0b3IuZ2V0Qm9keSgpLCBpc1ZhbGlkRGF0YVVyaUltYWdlKS50aGVuKGFsaXZlR3VhcmQoZnVuY3Rpb24ocmVzdWx0KSB7XG5cdFx0XHRcdEFyci5lYWNoKHJlc3VsdCwgZnVuY3Rpb24ocmVzdWx0SXRlbSkge1xuXHRcdFx0XHRcdHJlcGxhY2VVcmxJblVuZG9TdGFjayhyZXN1bHRJdGVtLmltYWdlLnNyYywgcmVzdWx0SXRlbS5ibG9iSW5mby5ibG9iVXJpKCkpO1xuXHRcdFx0XHRcdHJlc3VsdEl0ZW0uaW1hZ2Uuc3JjID0gcmVzdWx0SXRlbS5ibG9iSW5mby5ibG9iVXJpKCk7XG5cdFx0XHRcdFx0cmVzdWx0SXRlbS5pbWFnZS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNyYycpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSkpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0XHRibG9iQ2FjaGUuZGVzdHJveSgpO1xuXHRcdFx0dXBsb2FkU3RhdHVzLmRlc3Ryb3koKTtcblx0XHRcdGltYWdlU2Nhbm5lciA9IHVwbG9hZGVyID0gbnVsbDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZXBsYWNlQmxvYlVyaXMoY29udGVudCkge1xuXHRcdFx0cmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvc3JjPVwiKGJsb2I6W15cIl0rKVwiL2csIGZ1bmN0aW9uKG1hdGNoLCBibG9iVXJpKSB7XG5cdFx0XHRcdHZhciByZXN1bHRVcmkgPSB1cGxvYWRTdGF0dXMuZ2V0UmVzdWx0VXJpKGJsb2JVcmkpO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRVcmkpIHtcblx0XHRcdFx0XHRyZXR1cm4gJ3NyYz1cIicgKyByZXN1bHRVcmkgKyAnXCInO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGJsb2JJbmZvID0gYmxvYkNhY2hlLmdldEJ5VXJpKGJsb2JVcmkpO1xuXG5cdFx0XHRcdGlmICghYmxvYkluZm8pIHtcblx0XHRcdFx0XHRibG9iSW5mbyA9IEFyci5yZWR1Y2UoZWRpdG9yLmVkaXRvck1hbmFnZXIuZWRpdG9ycywgZnVuY3Rpb24ocmVzdWx0LCBlZGl0b3IpIHtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQgfHwgZWRpdG9yLmVkaXRvclVwbG9hZC5ibG9iQ2FjaGUuZ2V0QnlVcmkoYmxvYlVyaSk7XG5cdFx0XHRcdFx0fSwgbnVsbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYmxvYkluZm8pIHtcblx0XHRcdFx0XHRyZXR1cm4gJ3NyYz1cImRhdGE6JyArIGJsb2JJbmZvLmJsb2IoKS50eXBlICsgJztiYXNlNjQsJyArIGJsb2JJbmZvLmJhc2U2NCgpICsgJ1wiJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGVkaXRvci5vbignc2V0Q29udGVudCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKGVkaXRvci5zZXR0aW5ncy5hdXRvbWF0aWNfdXBsb2FkcyAhPT0gZmFsc2UpIHtcblx0XHRcdFx0dXBsb2FkSW1hZ2VzQXV0bygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2NhbkZvckltYWdlcygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZWRpdG9yLm9uKCdSYXdTYXZlQ29udGVudCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdGUuY29udGVudCA9IHJlcGxhY2VCbG9iVXJpcyhlLmNvbnRlbnQpO1xuXHRcdH0pO1xuXG5cdFx0ZWRpdG9yLm9uKCdnZXRDb250ZW50JywgZnVuY3Rpb24oZSkge1xuXHRcdFx0aWYgKGUuc291cmNlX3ZpZXcgfHwgZS5mb3JtYXQgPT0gJ3JhdycpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRlLmNvbnRlbnQgPSByZXBsYWNlQmxvYlVyaXMoZS5jb250ZW50KTtcblx0XHR9KTtcblxuXHRcdGVkaXRvci5vbignUG9zdFJlbmRlcicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZWRpdG9yLnBhcnNlci5hZGROb2RlRmlsdGVyKCdpbWcnLCBmdW5jdGlvbihpbWFnZXMpIHtcblx0XHRcdFx0QXJyLmVhY2goaW1hZ2VzLCBmdW5jdGlvbihpbWcpIHtcblx0XHRcdFx0XHR2YXIgc3JjID0gaW1nLmF0dHIoJ3NyYycpO1xuXG5cdFx0XHRcdFx0aWYgKGJsb2JDYWNoZS5nZXRCeVVyaShzcmMpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHJlc3VsdFVyaSA9IHVwbG9hZFN0YXR1cy5nZXRSZXN1bHRVcmkoc3JjKTtcblx0XHRcdFx0XHRpZiAocmVzdWx0VXJpKSB7XG5cdFx0XHRcdFx0XHRpbWcuYXR0cignc3JjJywgcmVzdWx0VXJpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YmxvYkNhY2hlOiBibG9iQ2FjaGUsXG5cdFx0XHR1cGxvYWRJbWFnZXM6IHVwbG9hZEltYWdlcyxcblx0XHRcdHVwbG9hZEltYWdlc0F1dG86IHVwbG9hZEltYWdlc0F1dG8sXG5cdFx0XHRzY2FuRm9ySW1hZ2VzOiBzY2FuRm9ySW1hZ2VzLFxuXHRcdFx0ZGVzdHJveTogZGVzdHJveVxuXHRcdH07XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2NhcmV0L0Zha2VDYXJldC5qc1xuXG4vKipcbiAqIEZha2VDYXJldC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGxvZ2ljIGZvciByZW5kZXJpbmcgYSBmYWtlIHZpc3VhbCBjYXJldC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuY2FyZXQuRmFrZUNhcmV0XG4gKi9cbmRlZmluZShcInRpbnltY2UvY2FyZXQvRmFrZUNhcmV0XCIsIFtcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0Q29udGFpbmVyXCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldFBvc2l0aW9uXCIsXG5cdFwidGlueW1jZS9kb20vTm9kZVR5cGVcIixcblx0XCJ0aW55bWNlL2RvbS9SYW5nZVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vRG9tUXVlcnlcIixcblx0XCJ0aW55bWNlL2dlb20vQ2xpZW50UmVjdFwiLFxuXHRcInRpbnltY2UvdXRpbC9EZWxheVwiXG5dLCBmdW5jdGlvbihDYXJldENvbnRhaW5lciwgQ2FyZXRQb3NpdGlvbiwgTm9kZVR5cGUsIFJhbmdlVXRpbHMsICQsIENsaWVudFJlY3QsIERlbGF5KSB7XG5cdHZhciBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlID0gTm9kZVR5cGUuaXNDb250ZW50RWRpdGFibGVGYWxzZTtcblxuXHRyZXR1cm4gZnVuY3Rpb24ocm9vdE5vZGUsIGlzQmxvY2spIHtcblx0XHR2YXIgY3Vyc29ySW50ZXJ2YWwsICRsYXN0VmlzdWFsQ2FyZXQsIGNhcmV0Q29udGFpbmVyTm9kZTtcblxuXHRcdGZ1bmN0aW9uIGdldEFic29sdXRlQ2xpZW50UmVjdChub2RlLCBiZWZvcmUpIHtcblx0XHRcdHZhciBjbGllbnRSZWN0ID0gQ2xpZW50UmVjdC5jb2xsYXBzZShub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBiZWZvcmUpLFxuXHRcdFx0XHRkb2NFbG0sIHNjcm9sbFgsIHNjcm9sbFksIG1hcmdpbiwgcm9vdFJlY3Q7XG5cblx0XHRcdGlmIChyb290Tm9kZS50YWdOYW1lID09ICdCT0RZJykge1xuXHRcdFx0XHRkb2NFbG0gPSByb290Tm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0XHRcdFx0c2Nyb2xsWCA9IHJvb3ROb2RlLnNjcm9sbExlZnQgfHwgZG9jRWxtLnNjcm9sbExlZnQ7XG5cdFx0XHRcdHNjcm9sbFkgPSByb290Tm9kZS5zY3JvbGxUb3AgfHwgZG9jRWxtLnNjcm9sbFRvcDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJvb3RSZWN0ID0gcm9vdE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdHNjcm9sbFggPSByb290Tm9kZS5zY3JvbGxMZWZ0IC0gcm9vdFJlY3QubGVmdDtcblx0XHRcdFx0c2Nyb2xsWSA9IHJvb3ROb2RlLnNjcm9sbFRvcCAtIHJvb3RSZWN0LnRvcDtcblx0XHRcdH1cblxuXHRcdFx0Y2xpZW50UmVjdC5sZWZ0ICs9IHNjcm9sbFg7XG5cdFx0XHRjbGllbnRSZWN0LnJpZ2h0ICs9IHNjcm9sbFg7XG5cdFx0XHRjbGllbnRSZWN0LnRvcCArPSBzY3JvbGxZO1xuXHRcdFx0Y2xpZW50UmVjdC5ib3R0b20gKz0gc2Nyb2xsWTtcblx0XHRcdGNsaWVudFJlY3Qud2lkdGggPSAxO1xuXG5cdFx0XHRtYXJnaW4gPSBub2RlLm9mZnNldFdpZHRoIC0gbm9kZS5jbGllbnRXaWR0aDtcblxuXHRcdFx0aWYgKG1hcmdpbiA+IDApIHtcblx0XHRcdFx0aWYgKGJlZm9yZSkge1xuXHRcdFx0XHRcdG1hcmdpbiAqPSAtMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNsaWVudFJlY3QubGVmdCArPSBtYXJnaW47XG5cdFx0XHRcdGNsaWVudFJlY3QucmlnaHQgKz0gbWFyZ2luO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY2xpZW50UmVjdDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB0cmltSW5saW5lQ2FyZXRDb250YWluZXJzKCkge1xuXHRcdFx0dmFyIGNvbnRlbnRFZGl0YWJsZUZhbHNlTm9kZXMsIG5vZGUsIHNpYmxpbmcsIGksIGRhdGE7XG5cblx0XHRcdGNvbnRlbnRFZGl0YWJsZUZhbHNlTm9kZXMgPSAkKCcqW2NvbnRlbnRFZGl0YWJsZT1mYWxzZV0nLCByb290Tm9kZSk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgY29udGVudEVkaXRhYmxlRmFsc2VOb2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRub2RlID0gY29udGVudEVkaXRhYmxlRmFsc2VOb2Rlc1tpXTtcblxuXHRcdFx0XHRzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdGlmIChDYXJldENvbnRhaW5lci5lbmRzV2l0aENhcmV0Q29udGFpbmVyKHNpYmxpbmcpKSB7XG5cdFx0XHRcdFx0ZGF0YSA9IHNpYmxpbmcuZGF0YTtcblxuXHRcdFx0XHRcdGlmIChkYXRhLmxlbmd0aCA9PSAxKSB7XG5cdFx0XHRcdFx0XHRzaWJsaW5nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2libGluZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNpYmxpbmcuZGVsZXRlRGF0YShkYXRhLmxlbmd0aCAtIDEsIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nO1xuXHRcdFx0XHRpZiAoQ2FyZXRDb250YWluZXIuc3RhcnRzV2l0aENhcmV0Q29udGFpbmVyKHNpYmxpbmcpKSB7XG5cdFx0XHRcdFx0ZGF0YSA9IHNpYmxpbmcuZGF0YTtcblxuXHRcdFx0XHRcdGlmIChkYXRhLmxlbmd0aCA9PSAxKSB7XG5cdFx0XHRcdFx0XHRzaWJsaW5nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2libGluZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNpYmxpbmcuZGVsZXRlRGF0YSgwLCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2hvdyhiZWZvcmUsIG5vZGUpIHtcblx0XHRcdHZhciBjbGllbnRSZWN0LCBybmc7XG5cblx0XHRcdGhpZGUoKTtcblxuXHRcdFx0aWYgKGlzQmxvY2sobm9kZSkpIHtcblx0XHRcdFx0Y2FyZXRDb250YWluZXJOb2RlID0gQ2FyZXRDb250YWluZXIuaW5zZXJ0QmxvY2soJ3AnLCBub2RlLCBiZWZvcmUpO1xuXHRcdFx0XHRjbGllbnRSZWN0ID0gZ2V0QWJzb2x1dGVDbGllbnRSZWN0KG5vZGUsIGJlZm9yZSk7XG5cdFx0XHRcdCQoY2FyZXRDb250YWluZXJOb2RlKS5jc3MoJ3RvcCcsIGNsaWVudFJlY3QudG9wKTtcblxuXHRcdFx0XHQkbGFzdFZpc3VhbENhcmV0ID0gJCgnPGRpdiBjbGFzcz1cIm1jZS12aXN1YWwtY2FyZXRcIiBkYXRhLW1jZS1ib2d1cz1cImFsbFwiPjwvZGl2PicpLmNzcyhjbGllbnRSZWN0KS5hcHBlbmRUbyhyb290Tm9kZSk7XG5cblx0XHRcdFx0aWYgKGJlZm9yZSkge1xuXHRcdFx0XHRcdCRsYXN0VmlzdWFsQ2FyZXQuYWRkQ2xhc3MoJ21jZS12aXN1YWwtY2FyZXQtYmVmb3JlJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdGFydEJsaW5rKCk7XG5cblx0XHRcdFx0cm5nID0gbm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0XHRcdHJuZy5zZXRTdGFydChjYXJldENvbnRhaW5lck5vZGUsIDApO1xuXHRcdFx0XHRybmcuc2V0RW5kKGNhcmV0Q29udGFpbmVyTm9kZSwgMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYXJldENvbnRhaW5lck5vZGUgPSBDYXJldENvbnRhaW5lci5pbnNlcnRJbmxpbmUobm9kZSwgYmVmb3JlKTtcblx0XHRcdFx0cm5nID0gbm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cblx0XHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UoY2FyZXRDb250YWluZXJOb2RlLm5leHRTaWJsaW5nKSkge1xuXHRcdFx0XHRcdHJuZy5zZXRTdGFydChjYXJldENvbnRhaW5lck5vZGUsIDApO1xuXHRcdFx0XHRcdHJuZy5zZXRFbmQoY2FyZXRDb250YWluZXJOb2RlLCAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRybmcuc2V0U3RhcnQoY2FyZXRDb250YWluZXJOb2RlLCAxKTtcblx0XHRcdFx0XHRybmcuc2V0RW5kKGNhcmV0Q29udGFpbmVyTm9kZSwgMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcm5nO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcm5nO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhpZGUoKSB7XG5cdFx0XHR0cmltSW5saW5lQ2FyZXRDb250YWluZXJzKCk7XG5cblx0XHRcdGlmIChjYXJldENvbnRhaW5lck5vZGUpIHtcblx0XHRcdFx0Q2FyZXRDb250YWluZXIucmVtb3ZlKGNhcmV0Q29udGFpbmVyTm9kZSk7XG5cdFx0XHRcdGNhcmV0Q29udGFpbmVyTm9kZSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgkbGFzdFZpc3VhbENhcmV0KSB7XG5cdFx0XHRcdCRsYXN0VmlzdWFsQ2FyZXQucmVtb3ZlKCk7XG5cdFx0XHRcdCRsYXN0VmlzdWFsQ2FyZXQgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRjbGVhckludGVydmFsKGN1cnNvckludGVydmFsKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdGFydEJsaW5rKCkge1xuXHRcdFx0Y3Vyc29ySW50ZXJ2YWwgPSBEZWxheS5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcblx0XHRcdFx0JCgnZGl2Lm1jZS12aXN1YWwtY2FyZXQnLCByb290Tm9kZSkudG9nZ2xlQ2xhc3MoJ21jZS12aXN1YWwtY2FyZXQtaGlkZGVuJyk7XG5cdFx0XHR9LCA1MDApO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0XHREZWxheS5jbGVhckludGVydmFsKGN1cnNvckludGVydmFsKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRDc3MoKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnLm1jZS12aXN1YWwtY2FyZXQgeycgK1xuXHRcdFx0XHRcdCdwb3NpdGlvbjogYWJzb2x1dGU7JyArXG5cdFx0XHRcdFx0J2JhY2tncm91bmQtY29sb3I6IGJsYWNrOycgK1xuXHRcdFx0XHRcdCdiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Y29sb3I7JyArXG5cdFx0XHRcdCd9JyArXG5cdFx0XHRcdCcubWNlLXZpc3VhbC1jYXJldC1oaWRkZW4geycgK1xuXHRcdFx0XHRcdCdkaXNwbGF5OiBub25lOycgK1xuXHRcdFx0XHQnfScgK1xuXHRcdFx0XHQnKltkYXRhLW1jZS1jYXJldF0geycgK1xuXHRcdFx0XHRcdCdwb3NpdGlvbjogYWJzb2x1dGU7JyArXG5cdFx0XHRcdFx0J2xlZnQ6IC0xMDAwcHg7JyArXG5cdFx0XHRcdFx0J3JpZ2h0OiBhdXRvOycgK1xuXHRcdFx0XHRcdCd0b3A6IDA7JyArXG5cdFx0XHRcdFx0J21hcmdpbjogMDsnICtcblx0XHRcdFx0XHQncGFkZGluZzogMDsnICtcblx0XHRcdFx0J30nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRzaG93OiBzaG93LFxuXHRcdFx0aGlkZTogaGlkZSxcblx0XHRcdGdldENzczogZ2V0Q3NzLFxuXHRcdFx0ZGVzdHJveTogZGVzdHJveVxuXHRcdH07XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2RvbS9EaW1lbnNpb25zLmpzXG5cbi8qKlxuICogRGltZW5zaW9ucy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIG1lYXN1cmVzIG5vZGVzIGFuZCByZXR1cm5zIGNsaWVudCByZWN0cy4gVGhlIGNsaWVudCByZWN0cyBoYXMgYW5cbiAqIGV4dHJhIG5vZGUgcHJvcGVydHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmRvbS5EaW1lbnNpb25zXG4gKi9cbmRlZmluZShcInRpbnltY2UvZG9tL0RpbWVuc2lvbnNcIiwgW1xuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL2RvbS9Ob2RlVHlwZVwiLFxuXHRcInRpbnltY2UvZ2VvbS9DbGllbnRSZWN0XCJcbl0sIGZ1bmN0aW9uKEFyciwgTm9kZVR5cGUsIENsaWVudFJlY3QpIHtcblxuXHRmdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhub2RlKSB7XG5cdFx0ZnVuY3Rpb24gdG9BcnJheVdpdGhOb2RlKGNsaWVudFJlY3RzKSB7XG5cdFx0XHRyZXR1cm4gQXJyLm1hcChjbGllbnRSZWN0cywgZnVuY3Rpb24oY2xpZW50UmVjdCkge1xuXHRcdFx0XHRjbGllbnRSZWN0ID0gQ2xpZW50UmVjdC5jbG9uZShjbGllbnRSZWN0KTtcblx0XHRcdFx0Y2xpZW50UmVjdC5ub2RlID0gbm9kZTtcblxuXHRcdFx0XHRyZXR1cm4gY2xpZW50UmVjdDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChBcnIuaXNBcnJheShub2RlKSkge1xuXHRcdFx0cmV0dXJuIEFyci5yZWR1Y2Uobm9kZSwgZnVuY3Rpb24ocmVzdWx0LCBub2RlKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuY29uY2F0KGdldENsaWVudFJlY3RzKG5vZGUpKTtcblx0XHRcdH0sIFtdKTtcblx0XHR9XG5cblx0XHRpZiAoTm9kZVR5cGUuaXNFbGVtZW50KG5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gdG9BcnJheVdpdGhOb2RlKG5vZGUuZ2V0Q2xpZW50UmVjdHMoKSk7XG5cdFx0fVxuXG5cdFx0aWYgKE5vZGVUeXBlLmlzVGV4dChub2RlKSkge1xuXHRcdFx0dmFyIHJuZyA9IG5vZGUub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG5cdFx0XHRybmcuc2V0U3RhcnQobm9kZSwgMCk7XG5cdFx0XHRybmcuc2V0RW5kKG5vZGUsIG5vZGUuZGF0YS5sZW5ndGgpO1xuXG5cdFx0XHRyZXR1cm4gdG9BcnJheVdpdGhOb2RlKHJuZy5nZXRDbGllbnRSZWN0cygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGNsaWVudCByZWN0cyBmb3IgYSBzcGVjaWZpYyBub2RlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRDbGllbnRSZWN0c1xuXHRcdCAqIEBwYXJhbSB7QXJyYXkvRE9NTm9kZX0gbm9kZSBOb2RlIG9yIGFycmF5IG9mIG5vZGVzIHRvIGdldCBjbGllbnQgcmVjdHMgb24uXG5cdFx0ICogQHBhcmFtIHtBcnJheX0gQXJyYXkgb2YgY2xpZW50IHJlY3RzIHdpdGggYSBleHRyYSBub2RlIHByb3BlcnR5LlxuXHRcdCAqL1xuXHRcdGdldENsaWVudFJlY3RzOiBnZXRDbGllbnRSZWN0c1xuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9jYXJldC9MaW5lV2Fsa2VyLmpzXG5cbi8qKlxuICogTGluZVdhbGtlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGxldHMgeW91IHdhbGsgdGhlIGRvY3VtZW50IGxpbmUgYnkgbGluZVxuICogcmV0dXJpbmcgbm9kZXMgYW5kIGNsaWVudCByZWN0cyBmb3IgZWFjaCBsaW5lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5jYXJldC5MaW5lV2Fsa2VyXG4gKi9cbmRlZmluZShcInRpbnltY2UvY2FyZXQvTGluZVdhbGtlclwiLCBbXG5cdFwidGlueW1jZS91dGlsL0Z1blwiLFxuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL2RvbS9EaW1lbnNpb25zXCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldENhbmRpZGF0ZVwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRVdGlsc1wiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRXYWxrZXJcIixcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0UG9zaXRpb25cIixcblx0XCJ0aW55bWNlL2dlb20vQ2xpZW50UmVjdFwiXG5dLCBmdW5jdGlvbihGdW4sIEFyciwgRGltZW5zaW9ucywgQ2FyZXRDYW5kaWRhdGUsIENhcmV0VXRpbHMsIENhcmV0V2Fsa2VyLCBDYXJldFBvc2l0aW9uLCBDbGllbnRSZWN0KSB7XG5cdHZhciBjdXJyeSA9IEZ1bi5jdXJyeTtcblxuXHRmdW5jdGlvbiBmaW5kVW50aWwoZGlyZWN0aW9uLCByb290Tm9kZSwgcHJlZGljYXRlRm4sIG5vZGUpIHtcblx0XHR3aGlsZSAoKG5vZGUgPSBDYXJldFV0aWxzLmZpbmROb2RlKG5vZGUsIGRpcmVjdGlvbiwgQ2FyZXRDYW5kaWRhdGUuaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlLCByb290Tm9kZSkpKSB7XG5cdFx0XHRpZiAocHJlZGljYXRlRm4obm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHdhbGtVbnRpbChkaXJlY3Rpb24sIGlzQWJvdmVGbiwgaXNCZWZsb3dGbiwgcm9vdE5vZGUsIHByZWRpY2F0ZUZuLCBjYXJldFBvc2l0aW9uKSB7XG5cdFx0dmFyIGxpbmUgPSAwLCBub2RlLCByZXN1bHQgPSBbXSwgdGFyZ2V0Q2xpZW50UmVjdDtcblxuXHRcdGZ1bmN0aW9uIGFkZChub2RlKSB7XG5cdFx0XHR2YXIgaSwgY2xpZW50UmVjdCwgY2xpZW50UmVjdHM7XG5cblx0XHRcdGNsaWVudFJlY3RzID0gRGltZW5zaW9ucy5nZXRDbGllbnRSZWN0cyhub2RlKTtcblx0XHRcdGlmIChkaXJlY3Rpb24gPT0gLTEpIHtcblx0XHRcdFx0Y2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBjbGllbnRSZWN0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjbGllbnRSZWN0ID0gY2xpZW50UmVjdHNbaV07XG5cdFx0XHRcdGlmIChpc0JlZmxvd0ZuKGNsaWVudFJlY3QsIHRhcmdldENsaWVudFJlY3QpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocmVzdWx0Lmxlbmd0aCA+IDAgJiYgaXNBYm92ZUZuKGNsaWVudFJlY3QsIEFyci5sYXN0KHJlc3VsdCkpKSB7XG5cdFx0XHRcdFx0bGluZSsrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2xpZW50UmVjdC5saW5lID0gbGluZTtcblxuXHRcdFx0XHRpZiAocHJlZGljYXRlRm4oY2xpZW50UmVjdCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNsaWVudFJlY3QpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRhcmdldENsaWVudFJlY3QgPSBBcnIubGFzdChjYXJldFBvc2l0aW9uLmdldENsaWVudFJlY3RzKCkpO1xuXHRcdGlmICghdGFyZ2V0Q2xpZW50UmVjdCkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRub2RlID0gY2FyZXRQb3NpdGlvbi5nZXROb2RlKCk7XG5cdFx0YWRkKG5vZGUpO1xuXHRcdGZpbmRVbnRpbChkaXJlY3Rpb24sIHJvb3ROb2RlLCBhZGQsIG5vZGUpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZ1bmN0aW9uIGFib3ZlTGluZU51bWJlcihsaW5lTnVtYmVyLCBjbGllbnRSZWN0KSB7XG5cdFx0cmV0dXJuIGNsaWVudFJlY3QubGluZSA+IGxpbmVOdW1iZXI7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0xpbmUobGluZU51bWJlciwgY2xpZW50UmVjdCkge1xuXHRcdHJldHVybiBjbGllbnRSZWN0LmxpbmUgPT09IGxpbmVOdW1iZXI7XG5cdH1cblxuXHR2YXIgdXBVbnRpbCA9IGN1cnJ5KHdhbGtVbnRpbCwgLTEsIENsaWVudFJlY3QuaXNBYm92ZSwgQ2xpZW50UmVjdC5pc0JlbG93KTtcblx0dmFyIGRvd25VbnRpbCA9IGN1cnJ5KHdhbGtVbnRpbCwgMSwgQ2xpZW50UmVjdC5pc0JlbG93LCBDbGllbnRSZWN0LmlzQWJvdmUpO1xuXG5cdGZ1bmN0aW9uIHBvc2l0aW9uc1VudGlsKGRpcmVjdGlvbiwgcm9vdE5vZGUsIHByZWRpY2F0ZUZuLCBub2RlKSB7XG5cdFx0dmFyIGNhcmV0V2Fsa2VyID0gbmV3IENhcmV0V2Fsa2VyKHJvb3ROb2RlKSwgd2Fsa0ZuLCBpc0JlbG93Rm4sIGlzQWJvdmVGbixcblx0XHRcdGNhcmV0UG9zaXRpb24sIHJlc3VsdCA9IFtdLCBsaW5lID0gMCwgY2xpZW50UmVjdCwgdGFyZ2V0Q2xpZW50UmVjdDtcblxuXHRcdGZ1bmN0aW9uIGdldENsaWVudFJlY3QoY2FyZXRQb3NpdGlvbikge1xuXHRcdFx0aWYgKGRpcmVjdGlvbiA9PSAxKSB7XG5cdFx0XHRcdHJldHVybiBBcnIubGFzdChjYXJldFBvc2l0aW9uLmdldENsaWVudFJlY3RzKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gQXJyLmxhc3QoY2FyZXRQb3NpdGlvbi5nZXRDbGllbnRSZWN0cygpKTtcblx0XHR9XG5cblx0XHRpZiAoZGlyZWN0aW9uID09IDEpIHtcblx0XHRcdHdhbGtGbiA9IGNhcmV0V2Fsa2VyLm5leHQ7XG5cdFx0XHRpc0JlbG93Rm4gPSBDbGllbnRSZWN0LmlzQmVsb3c7XG5cdFx0XHRpc0Fib3ZlRm4gPSBDbGllbnRSZWN0LmlzQWJvdmU7XG5cdFx0XHRjYXJldFBvc2l0aW9uID0gQ2FyZXRQb3NpdGlvbi5hZnRlcihub2RlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2Fsa0ZuID0gY2FyZXRXYWxrZXIucHJldjtcblx0XHRcdGlzQmVsb3dGbiA9IENsaWVudFJlY3QuaXNBYm92ZTtcblx0XHRcdGlzQWJvdmVGbiA9IENsaWVudFJlY3QuaXNCZWxvdztcblx0XHRcdGNhcmV0UG9zaXRpb24gPSBDYXJldFBvc2l0aW9uLmJlZm9yZShub2RlKTtcblx0XHR9XG5cblx0XHR0YXJnZXRDbGllbnRSZWN0ID0gZ2V0Q2xpZW50UmVjdChjYXJldFBvc2l0aW9uKTtcblxuXHRcdGRvIHtcblx0XHRcdGlmICghY2FyZXRQb3NpdGlvbi5pc1Zpc2libGUoKSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y2xpZW50UmVjdCA9IGdldENsaWVudFJlY3QoY2FyZXRQb3NpdGlvbik7XG5cblx0XHRcdGlmIChpc0Fib3ZlRm4oY2xpZW50UmVjdCwgdGFyZ2V0Q2xpZW50UmVjdCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZXN1bHQubGVuZ3RoID4gMCAmJiBpc0JlbG93Rm4oY2xpZW50UmVjdCwgQXJyLmxhc3QocmVzdWx0KSkpIHtcblx0XHRcdFx0bGluZSsrO1xuXHRcdFx0fVxuXG5cdFx0XHRjbGllbnRSZWN0ID0gQ2xpZW50UmVjdC5jbG9uZShjbGllbnRSZWN0KTtcblx0XHRcdGNsaWVudFJlY3QucG9zaXRpb24gPSBjYXJldFBvc2l0aW9uO1xuXHRcdFx0Y2xpZW50UmVjdC5saW5lID0gbGluZTtcblxuXHRcdFx0aWYgKHByZWRpY2F0ZUZuKGNsaWVudFJlY3QpKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5wdXNoKGNsaWVudFJlY3QpO1xuXHRcdH0gd2hpbGUgKChjYXJldFBvc2l0aW9uID0gd2Fsa0ZuKGNhcmV0UG9zaXRpb24pKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR1cFVudGlsOiB1cFVudGlsLFxuXHRcdGRvd25VbnRpbDogZG93blVudGlsLFxuXG5cdFx0LyoqXG5cdFx0ICogRmluZCBjbGllbnQgcmVjdHMgd2l0aCBsaW5lIGFuZCBjYXJldCBwb3NpdGlvbiB1bnRpbCB0aGUgcHJlZGljYXRlIHJldHVybnMgdHJ1ZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcG9zaXRpb25zVW50aWxcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gZGlyZWN0aW9uIERpcmVjdGlvbiBmb3J3YXJkL2JhY2t3YXJkIDEvLTEuXG5cdFx0ICogQHBhcmFtIHtET01Ob2RlfSByb290Tm9kZSBSb290IG5vZGUgdG8gd2FsayB3aXRoaW4uXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gcHJlZGljYXRlRm4gR2V0cyB0aGUgY2xpZW50IHJlY3QgYXMgaXQncyBpbnB1dC5cblx0XHQgKiBAcGFyYW0ge0RPTU5vZGV9IG5vZGUgTm9kZSB0byBzdGFydCB3YWxraW5nIGZyb20uXG5cdFx0ICogQHJldHVybiB7QXJyYXl9IEFycmF5IG9mIGNsaWVudCByZWN0cyB3aXRoIGxpbmUgYW5kIHBvc2l0aW9uIHByb3BlcnRpZXMuXG5cdFx0ICovXG5cdFx0cG9zaXRpb25zVW50aWw6IHBvc2l0aW9uc1VudGlsLFxuXG5cdFx0aXNBYm92ZUxpbmU6IGN1cnJ5KGFib3ZlTGluZU51bWJlciksXG5cdFx0aXNMaW5lOiBjdXJyeShpc0xpbmUpXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2NhcmV0L0xpbmVVdGlscy5qc1xuXG4vKipcbiAqIExpbmVVdGlscy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggbGluZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmNhcmV0LkxpbmVVdGlsc1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL2NhcmV0L0xpbmVVdGlsc1wiLCBbXG5cdFwidGlueW1jZS91dGlsL0Z1blwiLFxuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL2RvbS9Ob2RlVHlwZVwiLFxuXHRcInRpbnltY2UvZG9tL0RpbWVuc2lvbnNcIixcblx0XCJ0aW55bWNlL2dlb20vQ2xpZW50UmVjdFwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRVdGlsc1wiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRDYW5kaWRhdGVcIlxuXSwgZnVuY3Rpb24oRnVuLCBBcnIsIE5vZGVUeXBlLCBEaW1lbnNpb25zLCBDbGllbnRSZWN0LCBDYXJldFV0aWxzLCBDYXJldENhbmRpZGF0ZSkge1xuXHR2YXIgaXNDb250ZW50RWRpdGFibGVGYWxzZSA9IE5vZGVUeXBlLmlzQ29udGVudEVkaXRhYmxlRmFsc2UsXG5cdFx0ZmluZE5vZGUgPSBDYXJldFV0aWxzLmZpbmROb2RlLFxuXHRcdGN1cnJ5ID0gRnVuLmN1cnJ5O1xuXG5cdGZ1bmN0aW9uIGRpc3RhbmNlVG9SZWN0TGVmdChjbGllbnRSZWN0LCBjbGllbnRYKSB7XG5cdFx0cmV0dXJuIE1hdGguYWJzKGNsaWVudFJlY3QubGVmdCAtIGNsaWVudFgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGlzdGFuY2VUb1JlY3RSaWdodChjbGllbnRSZWN0LCBjbGllbnRYKSB7XG5cdFx0cmV0dXJuIE1hdGguYWJzKGNsaWVudFJlY3QucmlnaHQgLSBjbGllbnRYKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmRDbG9zZXN0Q2xpZW50UmVjdChjbGllbnRSZWN0cywgY2xpZW50WCkge1xuXHRcdGZ1bmN0aW9uIGlzSW5zaWRlKGNsaWVudFgsIGNsaWVudFJlY3QpIHtcblx0XHRcdHJldHVybiBjbGllbnRYID49IGNsaWVudFJlY3QubGVmdCAmJiBjbGllbnRYIDw9IGNsaWVudFJlY3QucmlnaHQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEFyci5yZWR1Y2UoY2xpZW50UmVjdHMsIGZ1bmN0aW9uKG9sZENsaWVudFJlY3QsIGNsaWVudFJlY3QpIHtcblx0XHRcdHZhciBvbGREaXN0YW5jZSwgbmV3RGlzdGFuY2U7XG5cblx0XHRcdG9sZERpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2VUb1JlY3RMZWZ0KG9sZENsaWVudFJlY3QsIGNsaWVudFgpLCBkaXN0YW5jZVRvUmVjdFJpZ2h0KG9sZENsaWVudFJlY3QsIGNsaWVudFgpKTtcblx0XHRcdG5ld0Rpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2VUb1JlY3RMZWZ0KGNsaWVudFJlY3QsIGNsaWVudFgpLCBkaXN0YW5jZVRvUmVjdFJpZ2h0KGNsaWVudFJlY3QsIGNsaWVudFgpKTtcblxuXHRcdFx0aWYgKGlzSW5zaWRlKGNsaWVudFgsIGNsaWVudFJlY3QpKSB7XG5cdFx0XHRcdHJldHVybiBjbGllbnRSZWN0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNJbnNpZGUoY2xpZW50WCwgb2xkQ2xpZW50UmVjdCkpIHtcblx0XHRcdFx0cmV0dXJuIG9sZENsaWVudFJlY3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGNFPWZhbHNlIGhhcyBoaWdoZXIgcHJpb3JpdHlcblx0XHRcdGlmIChuZXdEaXN0YW5jZSA9PSBvbGREaXN0YW5jZSAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGNsaWVudFJlY3Qubm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuIGNsaWVudFJlY3Q7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdEaXN0YW5jZSA8IG9sZERpc3RhbmNlKSB7XG5cdFx0XHRcdHJldHVybiBjbGllbnRSZWN0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2xkQ2xpZW50UmVjdDtcblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdhbGtVbnRpbChkaXJlY3Rpb24sIHJvb3ROb2RlLCBwcmVkaWNhdGVGbiwgbm9kZSkge1xuXHRcdHdoaWxlICgobm9kZSA9IGZpbmROb2RlKG5vZGUsIGRpcmVjdGlvbiwgQ2FyZXRDYW5kaWRhdGUuaXNFZGl0YWJsZUNhcmV0Q2FuZGlkYXRlLCByb290Tm9kZSkpKSB7XG5cdFx0XHRpZiAocHJlZGljYXRlRm4obm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmRMaW5lTm9kZVJlY3RzKHJvb3ROb2RlLCB0YXJnZXROb2RlUmVjdCkge1xuXHRcdHZhciBjbGllbnRSZWN0cyA9IFtdO1xuXG5cdFx0ZnVuY3Rpb24gY29sbGVjdChjaGVja1Bvc0ZuLCBub2RlKSB7XG5cdFx0XHR2YXIgbGluZVJlY3RzO1xuXG5cdFx0XHRsaW5lUmVjdHMgPSBBcnIuZmlsdGVyKERpbWVuc2lvbnMuZ2V0Q2xpZW50UmVjdHMobm9kZSksIGZ1bmN0aW9uKGNsaWVudFJlY3QpIHtcblx0XHRcdFx0cmV0dXJuICFjaGVja1Bvc0ZuKGNsaWVudFJlY3QsIHRhcmdldE5vZGVSZWN0KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLmNvbmNhdChsaW5lUmVjdHMpO1xuXG5cdFx0XHRyZXR1cm4gbGluZVJlY3RzLmxlbmd0aCA9PT0gMDtcblx0XHR9XG5cblx0XHRjbGllbnRSZWN0cy5wdXNoKHRhcmdldE5vZGVSZWN0KTtcblx0XHR3YWxrVW50aWwoLTEsIHJvb3ROb2RlLCBjdXJyeShjb2xsZWN0LCBDbGllbnRSZWN0LmlzQWJvdmUpLCB0YXJnZXROb2RlUmVjdC5ub2RlKTtcblx0XHR3YWxrVW50aWwoMSwgcm9vdE5vZGUsIGN1cnJ5KGNvbGxlY3QsIENsaWVudFJlY3QuaXNCZWxvdyksIHRhcmdldE5vZGVSZWN0Lm5vZGUpO1xuXG5cdFx0cmV0dXJuIGNsaWVudFJlY3RzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Q29udGVudEVkaXRhYmxlRmFsc2VDaGlsZHJlbihyb290Tm9kZSkge1xuXHRcdHJldHVybiBBcnIuZmlsdGVyKEFyci50b0FycmF5KHJvb3ROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpLCBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNhcmV0SW5mbyhjbGllbnRSZWN0LCBjbGllbnRYKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5vZGU6IGNsaWVudFJlY3Qubm9kZSxcblx0XHRcdGJlZm9yZTogZGlzdGFuY2VUb1JlY3RMZWZ0KGNsaWVudFJlY3QsIGNsaWVudFgpIDwgZGlzdGFuY2VUb1JlY3RSaWdodChjbGllbnRSZWN0LCBjbGllbnRYKVxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBjbG9zZXN0Q2FyZXQocm9vdE5vZGUsIGNsaWVudFgsIGNsaWVudFkpIHtcblx0XHR2YXIgY29udGVudEVkaXRhYmxlRmFsc2VOb2RlUmVjdHMsIGNsb3Nlc3ROb2RlUmVjdDtcblxuXHRcdGNvbnRlbnRFZGl0YWJsZUZhbHNlTm9kZVJlY3RzID0gRGltZW5zaW9ucy5nZXRDbGllbnRSZWN0cyhnZXRDb250ZW50RWRpdGFibGVGYWxzZUNoaWxkcmVuKHJvb3ROb2RlKSk7XG5cdFx0Y29udGVudEVkaXRhYmxlRmFsc2VOb2RlUmVjdHMgPSBBcnIuZmlsdGVyKGNvbnRlbnRFZGl0YWJsZUZhbHNlTm9kZVJlY3RzLCBmdW5jdGlvbihjbGllbnRSZWN0KSB7XG5cdFx0XHRyZXR1cm4gY2xpZW50WSA+PSBjbGllbnRSZWN0LnRvcCAmJiBjbGllbnRZIDw9IGNsaWVudFJlY3QuYm90dG9tO1xuXHRcdH0pO1xuXG5cdFx0Y2xvc2VzdE5vZGVSZWN0ID0gZmluZENsb3Nlc3RDbGllbnRSZWN0KGNvbnRlbnRFZGl0YWJsZUZhbHNlTm9kZVJlY3RzLCBjbGllbnRYKTtcblx0XHRpZiAoY2xvc2VzdE5vZGVSZWN0KSB7XG5cdFx0XHRjbG9zZXN0Tm9kZVJlY3QgPSBmaW5kQ2xvc2VzdENsaWVudFJlY3QoZmluZExpbmVOb2RlUmVjdHMocm9vdE5vZGUsIGNsb3Nlc3ROb2RlUmVjdCksIGNsaWVudFgpO1xuXHRcdFx0aWYgKGNsb3Nlc3ROb2RlUmVjdCAmJiBpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGNsb3Nlc3ROb2RlUmVjdC5ub2RlKSkge1xuXHRcdFx0XHRyZXR1cm4gY2FyZXRJbmZvKGNsb3Nlc3ROb2RlUmVjdCwgY2xpZW50WCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGZpbmRDbG9zZXN0Q2xpZW50UmVjdDogZmluZENsb3Nlc3RDbGllbnRSZWN0LFxuXHRcdGZpbmRMaW5lTm9kZVJlY3RzOiBmaW5kTGluZU5vZGVSZWN0cyxcblx0XHRjbG9zZXN0Q2FyZXQ6IGNsb3Nlc3RDYXJldFxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9kb20vTW91c2VQb3NpdGlvbi5qc1xuXG4vKipcbiAqIE1vdXNlUG9zaXRpb24uanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBjYWxjdWxhdGVzIGFuIGFic29sdXRlIGNvb3JkaW5hdGUgaW5zaWRlIHRoZSBlZGl0b3IgYm9keSBmb3IgYm90aCBsb2NhbCBhbmQgZ2xvYmFsIG1vdXNlIGV2ZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuZG9tLk1vdXNlUG9zaXRpb25cbiAqL1xuZGVmaW5lKFwidGlueW1jZS9kb20vTW91c2VQb3NpdGlvblwiLCBbXG5dLCBmdW5jdGlvbigpIHtcblx0dmFyIGdldEFic29sdXRlUG9zaXRpb24gPSBmdW5jdGlvbiAoZWxtKSB7XG5cdFx0dmFyIGRvYywgZG9jRWxlbSwgd2luLCBjbGllbnRSZWN0O1xuXG5cdFx0Y2xpZW50UmVjdCA9IGVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRkb2MgPSBlbG0ub3duZXJEb2N1bWVudDtcblx0XHRkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHR3aW4gPSBkb2MuZGVmYXVsdFZpZXc7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBjbGllbnRSZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCAtIGRvY0VsZW0uY2xpZW50VG9wLFxuXHRcdFx0bGVmdDogY2xpZW50UmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRMZWZ0XG5cdFx0fTtcblx0fTtcblxuXHR2YXIgZ2V0Qm9keVBvc2l0aW9uID0gZnVuY3Rpb24gKGVkaXRvcikge1xuXHRcdHJldHVybiBlZGl0b3IuaW5saW5lID8gZ2V0QWJzb2x1dGVQb3NpdGlvbihlZGl0b3IuZ2V0Qm9keSgpKSA6IHtsZWZ0OiAwLCB0b3A6IDB9O1xuXHR9O1xuXG5cdHZhciBnZXRTY3JvbGxQb3NpdGlvbiA9IGZ1bmN0aW9uIChlZGl0b3IpIHtcblx0XHR2YXIgYm9keSA9IGVkaXRvci5nZXRCb2R5KCk7XG5cdFx0cmV0dXJuIGVkaXRvci5pbmxpbmUgPyB7bGVmdDogYm9keS5zY3JvbGxMZWZ0LCB0b3A6IGJvZHkuc2Nyb2xsVG9wfSA6IHtsZWZ0OiAwLCB0b3A6IDB9O1xuXHR9O1xuXG5cdHZhciBnZXRCb2R5U2Nyb2xsID0gZnVuY3Rpb24gKGVkaXRvcikge1xuXHRcdHZhciBib2R5ID0gZWRpdG9yLmdldEJvZHkoKSwgZG9jRWxtID0gZWRpdG9yLmdldERvYygpLmRvY3VtZW50RWxlbWVudDtcblx0XHR2YXIgaW5saW5lU2Nyb2xsID0ge2xlZnQ6IGJvZHkuc2Nyb2xsTGVmdCwgdG9wOiBib2R5LnNjcm9sbFRvcH07XG5cdFx0dmFyIGlmcmFtZVNjcm9sbCA9IHtsZWZ0OiBib2R5LnNjcm9sbExlZnQgfHwgZG9jRWxtLnNjcm9sbExlZnQsIHRvcDogYm9keS5zY3JvbGxUb3AgfHwgZG9jRWxtLnNjcm9sbFRvcH07XG5cblx0XHRyZXR1cm4gZWRpdG9yLmlubGluZSA/IGlubGluZVNjcm9sbCA6IGlmcmFtZVNjcm9sbDtcblx0fTtcblxuXHR2YXIgZ2V0TW91c2VQb3NpdGlvbiA9IGZ1bmN0aW9uIChlZGl0b3IsIGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBlZGl0b3IuZ2V0RG9jKCkpIHtcblx0XHRcdHZhciBpZnJhbWVQb3NpdGlvbiA9IGdldEFic29sdXRlUG9zaXRpb24oZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCkpO1xuXHRcdFx0dmFyIHNjcm9sbFBvc2l0aW9uID0gZ2V0Qm9keVNjcm9sbChlZGl0b3IpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRsZWZ0OiBldmVudC5wYWdlWCAtIGlmcmFtZVBvc2l0aW9uLmxlZnQgKyBzY3JvbGxQb3NpdGlvbi5sZWZ0LFxuXHRcdFx0XHR0b3A6IGV2ZW50LnBhZ2VZIC0gaWZyYW1lUG9zaXRpb24udG9wICsgc2Nyb2xsUG9zaXRpb24udG9wXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRsZWZ0OiBldmVudC5wYWdlWCxcblx0XHRcdHRvcDogZXZlbnQucGFnZVlcblx0XHR9O1xuXHR9O1xuXG5cdHZhciBjYWxjdWxhdGVQb3NpdGlvbiA9IGZ1bmN0aW9uIChib2R5UG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uLCBtb3VzZVBvc2l0aW9uKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhZ2VYOiAobW91c2VQb3NpdGlvbi5sZWZ0IC0gYm9keVBvc2l0aW9uLmxlZnQpICsgc2Nyb2xsUG9zaXRpb24ubGVmdCxcblx0XHRcdHBhZ2VZOiAobW91c2VQb3NpdGlvbi50b3AgLSBib2R5UG9zaXRpb24udG9wKSArIHNjcm9sbFBvc2l0aW9uLnRvcFxuXHRcdH07XG5cdH07XG5cblx0dmFyIGNhbGMgPSBmdW5jdGlvbiAoZWRpdG9yLCBldmVudCkge1xuXHRcdHJldHVybiBjYWxjdWxhdGVQb3NpdGlvbihnZXRCb2R5UG9zaXRpb24oZWRpdG9yKSwgZ2V0U2Nyb2xsUG9zaXRpb24oZWRpdG9yKSwgZ2V0TW91c2VQb3NpdGlvbihlZGl0b3IsIGV2ZW50KSk7XG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRjYWxjOiBjYWxjXG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL0RyYWdEcm9wT3ZlcnJpZGVzLmpzXG5cbi8qKlxuICogRHJhZ0Ryb3BPdmVycmlkZXMuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBjb250YWlucyBsb2dpYyBvdmVycmlkaW5nIHRoZSBkcmFnL2Ryb3AgbG9naWMgb2YgdGhlIGVkaXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIHRpbnltY2UuRHJhZ0Ryb3BPdmVycmlkZXNcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9EcmFnRHJvcE92ZXJyaWRlc1wiLCBbXG5cdFwidGlueW1jZS9kb20vTm9kZVR5cGVcIixcblx0XCJ0aW55bWNlL3V0aWwvQXJyXCIsXG5cdFwidGlueW1jZS91dGlsL0Z1blwiLFxuXHRcInRpbnltY2UvdXRpbC9EZWxheVwiLFxuXHRcInRpbnltY2UvZG9tL0RPTVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vTW91c2VQb3NpdGlvblwiXG5dLCBmdW5jdGlvbihcblx0Tm9kZVR5cGUsIEFyciwgRnVuLCBEZWxheSwgRE9NVXRpbHMsIE1vdXNlUG9zaXRpb25cbikge1xuXHR2YXIgaXNDb250ZW50RWRpdGFibGVGYWxzZSA9IE5vZGVUeXBlLmlzQ29udGVudEVkaXRhYmxlRmFsc2UsXG5cdFx0aXNDb250ZW50RWRpdGFibGVUcnVlID0gTm9kZVR5cGUuaXNDb250ZW50RWRpdGFibGVUcnVlO1xuXG5cdHZhciBpc0RyYWdnYWJsZSA9IGZ1bmN0aW9uIChyb290RWxtLCBlbG0pIHtcblx0XHRyZXR1cm4gaXNDb250ZW50RWRpdGFibGVGYWxzZShlbG0pICYmIGVsbSAhPT0gcm9vdEVsbTtcblx0fTtcblxuXHR2YXIgaXNWYWxpZERyb3BUYXJnZXQgPSBmdW5jdGlvbiAoZWRpdG9yLCB0YXJnZXRFbGVtZW50LCBkcmFnRWxlbWVudCkge1xuXHRcdGlmICh0YXJnZXRFbGVtZW50ID09PSBkcmFnRWxlbWVudCB8fCBlZGl0b3IuZG9tLmlzQ2hpbGRPZih0YXJnZXRFbGVtZW50LCBkcmFnRWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZSh0YXJnZXRFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdHZhciBjbG9uZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxtKSB7XG5cdFx0dmFyIGNsb25lRWxtID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcblx0XHRjbG9uZUVsbS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbWNlLXNlbGVjdGVkJyk7XG5cdFx0cmV0dXJuIGNsb25lRWxtO1xuXHR9O1xuXG5cdHZhciBjcmVhdGVHaG9zdCA9IGZ1bmN0aW9uIChlZGl0b3IsIGVsbSwgd2lkdGgsIGhlaWdodCkge1xuXHRcdHZhciBjbG9uZWRFbG0gPSBlbG0uY2xvbmVOb2RlKHRydWUpO1xuXG5cdFx0ZWRpdG9yLmRvbS5zZXRTdHlsZXMoY2xvbmVkRWxtLCB7d2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodH0pO1xuXHRcdGVkaXRvci5kb20uc2V0QXR0cmliKGNsb25lZEVsbSwgJ2RhdGEtbWNlLXNlbGVjdGVkJywgbnVsbCk7XG5cblx0XHR2YXIgZ2hvc3RFbG0gPSBlZGl0b3IuZG9tLmNyZWF0ZSgnZGl2Jywge1xuXHRcdFx0J2NsYXNzJzogJ21jZS1kcmFnLWNvbnRhaW5lcicsXG5cdFx0XHQnZGF0YS1tY2UtYm9ndXMnOiAnYWxsJyxcblx0XHRcdHVuc2VsZWN0YWJsZTogJ29uJyxcblx0XHRcdGNvbnRlbnRlZGl0YWJsZTogJ2ZhbHNlJ1xuXHRcdH0pO1xuXG5cdFx0ZWRpdG9yLmRvbS5zZXRTdHlsZXMoZ2hvc3RFbG0sIHtcblx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdFx0b3BhY2l0eTogMC41LFxuXHRcdFx0b3ZlcmZsb3c6ICdoaWRkZW4nLFxuXHRcdFx0Ym9yZGVyOiAwLFxuXHRcdFx0cGFkZGluZzogMCxcblx0XHRcdG1hcmdpbjogMCxcblx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdGhlaWdodDogaGVpZ2h0XG5cdFx0fSk7XG5cblx0XHRlZGl0b3IuZG9tLnNldFN0eWxlcyhjbG9uZWRFbG0sIHtcblx0XHRcdG1hcmdpbjogMCxcblx0XHRcdGJveFNpemluZzogJ2JvcmRlci1ib3gnXG5cdFx0fSk7XG5cblx0XHRnaG9zdEVsbS5hcHBlbmRDaGlsZChjbG9uZWRFbG0pO1xuXG5cdFx0cmV0dXJuIGdob3N0RWxtO1xuXHR9O1xuXG5cdHZhciBhcHBlbmRHaG9zdFRvQm9keSA9IGZ1bmN0aW9uIChnaG9zdEVsbSwgYm9keUVsbSkge1xuXHRcdGlmIChnaG9zdEVsbS5wYXJlbnROb2RlICE9PSBib2R5RWxtKSB7XG5cdFx0XHRib2R5RWxtLmFwcGVuZENoaWxkKGdob3N0RWxtKTtcblx0XHR9XG5cdH07XG5cblx0dmFyIG1vdmVHaG9zdCA9IGZ1bmN0aW9uIChnaG9zdEVsbSwgcG9zaXRpb24sIHdpZHRoLCBoZWlnaHQsIG1heFgsIG1heFkpIHtcblx0XHR2YXIgb3ZlcmZsb3dYID0gMCwgb3ZlcmZsb3dZID0gMDtcblxuXHRcdGdob3N0RWxtLnN0eWxlLmxlZnQgPSBwb3NpdGlvbi5wYWdlWCArICdweCc7XG5cdFx0Z2hvc3RFbG0uc3R5bGUudG9wID0gcG9zaXRpb24ucGFnZVkgKyAncHgnO1xuXG5cdFx0aWYgKHBvc2l0aW9uLnBhZ2VYICsgd2lkdGggPiBtYXhYKSB7XG5cdFx0XHRvdmVyZmxvd1ggPSAocG9zaXRpb24ucGFnZVggKyB3aWR0aCkgLSBtYXhYO1xuXHRcdH1cblxuXHRcdGlmIChwb3NpdGlvbi5wYWdlWSArIGhlaWdodCA+IG1heFkpIHtcblx0XHRcdG92ZXJmbG93WSA9IChwb3NpdGlvbi5wYWdlWSArIGhlaWdodCkgLSBtYXhZO1xuXHRcdH1cblxuXHRcdGdob3N0RWxtLnN0eWxlLndpZHRoID0gKHdpZHRoIC0gb3ZlcmZsb3dYKSArICdweCc7XG5cdFx0Z2hvc3RFbG0uc3R5bGUuaGVpZ2h0ID0gKGhlaWdodCAtIG92ZXJmbG93WSkgKyAncHgnO1xuXHR9O1xuXG5cdHZhciByZW1vdmVFbGVtZW50ID0gZnVuY3Rpb24gKGVsbSkge1xuXHRcdGlmIChlbG0gJiYgZWxtLnBhcmVudE5vZGUpIHtcblx0XHRcdGVsbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsbSk7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBpc0xlZnRNb3VzZUJ1dHRvblByZXNzZWQgPSBmdW5jdGlvbiAoZSkge1xuXHRcdHJldHVybiBlLmJ1dHRvbiA9PT0gMDtcblx0fTtcblxuXHR2YXIgaGFzRHJhZ2dhYmxlRWxlbWVudCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuXHRcdHJldHVybiBzdGF0ZS5lbGVtZW50O1xuXHR9O1xuXG5cdHZhciBhcHBseVJlbFBvcyA9IGZ1bmN0aW9uIChzdGF0ZSwgcG9zaXRpb24pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFnZVg6IHBvc2l0aW9uLnBhZ2VYIC0gc3RhdGUucmVsWCxcblx0XHRcdHBhZ2VZOiBwb3NpdGlvbi5wYWdlWSArIDVcblx0XHR9O1xuXHR9O1xuXG5cdHZhciBzdGFydCA9IGZ1bmN0aW9uIChzdGF0ZSwgZWRpdG9yKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRpZiAoaXNMZWZ0TW91c2VCdXR0b25QcmVzc2VkKGUpKSB7XG5cdFx0XHRcdHZhciBjZUVsbSA9IEFyci5maW5kKGVkaXRvci5kb20uZ2V0UGFyZW50cyhlLnRhcmdldCksIEZ1bi5vcihpc0NvbnRlbnRFZGl0YWJsZUZhbHNlLCBpc0NvbnRlbnRFZGl0YWJsZVRydWUpKTtcblxuXHRcdFx0XHRpZiAoaXNEcmFnZ2FibGUoZWRpdG9yLmdldEJvZHkoKSwgY2VFbG0pKSB7XG5cdFx0XHRcdFx0dmFyIGVsbVBvcyA9IGVkaXRvci5kb20uZ2V0UG9zKGNlRWxtKTtcblx0XHRcdFx0XHR2YXIgYm9keUVsbSA9IGVkaXRvci5nZXRCb2R5KCk7XG5cdFx0XHRcdFx0dmFyIGRvY0VsbSA9IGVkaXRvci5nZXREb2MoKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHRzdGF0ZS5lbGVtZW50ID0gY2VFbG07XG5cdFx0XHRcdFx0c3RhdGUuc2NyZWVuWCA9IGUuc2NyZWVuWDtcblx0XHRcdFx0XHRzdGF0ZS5zY3JlZW5ZID0gZS5zY3JlZW5ZO1xuXHRcdFx0XHRcdHN0YXRlLm1heFggPSAoZWRpdG9yLmlubGluZSA/IGJvZHlFbG0uc2Nyb2xsV2lkdGggOiBkb2NFbG0ub2Zmc2V0V2lkdGgpIC0gMjtcblx0XHRcdFx0XHRzdGF0ZS5tYXhZID0gKGVkaXRvci5pbmxpbmUgPyBib2R5RWxtLnNjcm9sbEhlaWdodCA6IGRvY0VsbS5vZmZzZXRIZWlnaHQpIC0gMjtcblx0XHRcdFx0XHRzdGF0ZS5yZWxYID0gZS5wYWdlWCAtIGVsbVBvcy54O1xuXHRcdFx0XHRcdHN0YXRlLnJlbFkgPSBlLnBhZ2VZIC0gZWxtUG9zLnk7XG5cdFx0XHRcdFx0c3RhdGUud2lkdGggPSBjZUVsbS5vZmZzZXRXaWR0aDtcblx0XHRcdFx0XHRzdGF0ZS5oZWlnaHQgPSBjZUVsbS5vZmZzZXRIZWlnaHQ7XG5cdFx0XHRcdFx0c3RhdGUuZ2hvc3QgPSBjcmVhdGVHaG9zdChlZGl0b3IsIGNlRWxtLCBzdGF0ZS53aWR0aCwgc3RhdGUuaGVpZ2h0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH07XG5cblx0dmFyIG1vdmUgPSBmdW5jdGlvbiAoc3RhdGUsIGVkaXRvcikge1xuXHRcdC8vIFJlZHVjZXMgbGFnZ3kgZHJhZyBiZWhhdmlvciBvbiBHZWNrb1xuXHRcdHZhciB0aHJvdHRsZWRQbGFjZUNhcmV0QXQgPSBEZWxheS50aHJvdHRsZShmdW5jdGlvbiAoY2xpZW50WCwgY2xpZW50WSkge1xuXHRcdFx0ZWRpdG9yLl9zZWxlY3Rpb25PdmVycmlkZXMuaGlkZUZha2VDYXJldCgpO1xuXHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoY2xpZW50WCwgY2xpZW50WSk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gKGUpIHtcblx0XHRcdHZhciBtb3ZlbWVudCA9IE1hdGgubWF4KE1hdGguYWJzKGUuc2NyZWVuWCAtIHN0YXRlLnNjcmVlblgpLCBNYXRoLmFicyhlLnNjcmVlblkgLSBzdGF0ZS5zY3JlZW5ZKSk7XG5cblx0XHRcdGlmIChoYXNEcmFnZ2FibGVFbGVtZW50KHN0YXRlKSAmJiAhc3RhdGUuZHJhZ2dpbmcgJiYgbW92ZW1lbnQgPiAxMCkge1xuXHRcdFx0XHR2YXIgYXJncyA9IGVkaXRvci5maXJlKCdkcmFnc3RhcnQnLCB7dGFyZ2V0OiBzdGF0ZS5lbGVtZW50fSk7XG5cdFx0XHRcdGlmIChhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3RhdGUuZHJhZ2dpbmcgPSB0cnVlO1xuXHRcdFx0XHRlZGl0b3IuZm9jdXMoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN0YXRlLmRyYWdnaW5nKSB7XG5cdFx0XHRcdHZhciB0YXJnZXRQb3MgPSBhcHBseVJlbFBvcyhzdGF0ZSwgTW91c2VQb3NpdGlvbi5jYWxjKGVkaXRvciwgZSkpO1xuXG5cdFx0XHRcdGFwcGVuZEdob3N0VG9Cb2R5KHN0YXRlLmdob3N0LCBlZGl0b3IuZ2V0Qm9keSgpKTtcblx0XHRcdFx0bW92ZUdob3N0KHN0YXRlLmdob3N0LCB0YXJnZXRQb3MsIHN0YXRlLndpZHRoLCBzdGF0ZS5oZWlnaHQsIHN0YXRlLm1heFgsIHN0YXRlLm1heFkpO1xuXG5cdFx0XHRcdHRocm90dGxlZFBsYWNlQ2FyZXRBdChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHQvLyBSZXR1cm5zIHRoZSByYXcgZWxlbWVudCBpbnN0ZWFkIG9mIHRoZSBmYWtlIGNFPWZhbHNlIGVsZW1lbnRcblx0dmFyIGdldFJhd1RhcmdldCA9IGZ1bmN0aW9uIChzZWxlY3Rpb24pIHtcblx0XHR2YXIgcm5nID0gc2VsZWN0aW9uLmdldFNlbCgpLmdldFJhbmdlQXQoMCk7XG5cdFx0dmFyIHN0YXJ0Q29udGFpbmVyID0gcm5nLnN0YXJ0Q29udGFpbmVyO1xuXHRcdHJldHVybiBzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyA/IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgOiBzdGFydENvbnRhaW5lcjtcblx0fTtcblxuXHR2YXIgZHJvcCA9IGZ1bmN0aW9uIChzdGF0ZSwgZWRpdG9yKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRpZiAoc3RhdGUuZHJhZ2dpbmcpIHtcblx0XHRcdFx0aWYgKGlzVmFsaWREcm9wVGFyZ2V0KGVkaXRvciwgZ2V0UmF3VGFyZ2V0KGVkaXRvci5zZWxlY3Rpb24pLCBzdGF0ZS5lbGVtZW50KSkge1xuXHRcdFx0XHRcdHZhciB0YXJnZXRDbG9uZSA9IGNsb25lRWxlbWVudChzdGF0ZS5lbGVtZW50KTtcblxuXHRcdFx0XHRcdHZhciBhcmdzID0gZWRpdG9yLmZpcmUoJ2Ryb3AnLCB7XG5cdFx0XHRcdFx0XHR0YXJnZXRDbG9uZTogdGFyZ2V0Q2xvbmUsXG5cdFx0XHRcdFx0XHRjbGllbnRYOiBlLmNsaWVudFgsXG5cdFx0XHRcdFx0XHRjbGllbnRZOiBlLmNsaWVudFlcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0Q2xvbmUgPSBhcmdzLnRhcmdldENsb25lO1xuXG5cdFx0XHRcdFx0XHRlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUVsZW1lbnQoc3RhdGUuZWxlbWVudCk7XG5cdFx0XHRcdFx0XHRcdGVkaXRvci5pbnNlcnRDb250ZW50KGVkaXRvci5kb20uZ2V0T3V0ZXJIVE1MKHRhcmdldENsb25lKSk7XG5cdFx0XHRcdFx0XHRcdGVkaXRvci5fc2VsZWN0aW9uT3ZlcnJpZGVzLmhpZGVGYWtlQ2FyZXQoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZW1vdmVEcmFnU3RhdGUoc3RhdGUpO1xuXHRcdH07XG5cdH07XG5cblx0dmFyIHN0b3AgPSBmdW5jdGlvbiAoc3RhdGUsIGVkaXRvcikge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVEcmFnU3RhdGUoc3RhdGUpO1xuXHRcdFx0aWYgKHN0YXRlLmRyYWdnaW5nKSB7XG5cdFx0XHRcdGVkaXRvci5maXJlKCdkcmFnZW5kJyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHR2YXIgcmVtb3ZlRHJhZ1N0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7XG5cdFx0c3RhdGUuZHJhZ2dpbmcgPSBmYWxzZTtcblx0XHRzdGF0ZS5lbGVtZW50ID0gbnVsbDtcblx0XHRyZW1vdmVFbGVtZW50KHN0YXRlLmdob3N0KTtcblx0fTtcblxuXHR2YXIgYmluZEZha2VEcmFnRXZlbnRzID0gZnVuY3Rpb24gKGVkaXRvcikge1xuXHRcdHZhciBzdGF0ZSA9IHt9LCBwYWdlRG9tLCBkcmFnU3RhcnRIYW5kbGVyLCBkcmFnSGFuZGxlciwgZHJvcEhhbmRsZXIsIGRyYWdFbmRIYW5kbGVyLCByb290RG9jdW1lbnQ7XG5cblx0XHRwYWdlRG9tID0gRE9NVXRpbHMuRE9NO1xuXHRcdHJvb3REb2N1bWVudCA9IGRvY3VtZW50O1xuXHRcdGRyYWdTdGFydEhhbmRsZXIgPSBzdGFydChzdGF0ZSwgZWRpdG9yKTtcblx0XHRkcmFnSGFuZGxlciA9IG1vdmUoc3RhdGUsIGVkaXRvcik7XG5cdFx0ZHJvcEhhbmRsZXIgPSBkcm9wKHN0YXRlLCBlZGl0b3IpO1xuXHRcdGRyYWdFbmRIYW5kbGVyID0gc3RvcChzdGF0ZSwgZWRpdG9yKTtcblxuXHRcdGVkaXRvci5vbignbW91c2Vkb3duJywgZHJhZ1N0YXJ0SGFuZGxlcik7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZW1vdmUnLCBkcmFnSGFuZGxlcik7XG5cdFx0ZWRpdG9yLm9uKCdtb3VzZXVwJywgZHJvcEhhbmRsZXIpO1xuXG5cdFx0cGFnZURvbS5iaW5kKHJvb3REb2N1bWVudCwgJ21vdXNlbW92ZScsIGRyYWdIYW5kbGVyKTtcblx0XHRwYWdlRG9tLmJpbmQocm9vdERvY3VtZW50LCAnbW91c2V1cCcsIGRyYWdFbmRIYW5kbGVyKTtcblxuXHRcdGVkaXRvci5vbigncmVtb3ZlJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0cGFnZURvbS51bmJpbmQocm9vdERvY3VtZW50LCAnbW91c2Vtb3ZlJywgZHJhZ0hhbmRsZXIpO1xuXHRcdFx0cGFnZURvbS51bmJpbmQocm9vdERvY3VtZW50LCAnbW91c2V1cCcsIGRyYWdFbmRIYW5kbGVyKTtcblx0XHR9KTtcblx0fTtcblxuXHR2YXIgYmxvY2tJZURyb3AgPSBmdW5jdGlvbiAoZWRpdG9yKSB7XG5cdFx0ZWRpdG9yLm9uKCdkcm9wJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0Ly8gRkYgZG9lc24ndCBwYXNzIG91dCBjbGllbnRYL2NsaWVudFkgZm9yIGRyb3Agc2luY2UgdGhpcyBpcyBmb3IgSUUgd2UganVzdCB1c2UgbnVsbCBpbnN0ZWFkXG5cdFx0XHR2YXIgcmVhbFRhcmdldCA9IHR5cGVvZiBlLmNsaWVudFggIT09ICd1bmRlZmluZWQnID8gZWRpdG9yLmdldERvYygpLmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpIDogbnVsbDtcblxuXHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UocmVhbFRhcmdldCkgfHwgaXNDb250ZW50RWRpdGFibGVGYWxzZShlZGl0b3IuZG9tLmdldENvbnRlbnRFZGl0YWJsZVBhcmVudChyZWFsVGFyZ2V0KSkpIHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXG5cdHZhciBpbml0ID0gZnVuY3Rpb24gKGVkaXRvcikge1xuXHRcdGJpbmRGYWtlRHJhZ0V2ZW50cyhlZGl0b3IpO1xuXHRcdGJsb2NrSWVEcm9wKGVkaXRvcik7XG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRpbml0OiBpbml0XG5cdH07XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL1NlbGVjdGlvbk92ZXJyaWRlcy5qc1xuXG4vKipcbiAqIFNlbGVjdGlvbk92ZXJyaWRlcy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGxvZ2ljIG92ZXJyaWRpbmcgdGhlIHNlbGVjdGlvbiB3aXRoIGtleWJvYXJkL21vdXNlXG4gKiBhcm91bmQgY29udGVudEVkaXRhYmxlPWZhbHNlIHJlZ2lvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIERpc2FibGUgdGhlIGRlZmF1bHQgY0U9ZmFsc2Ugc2VsZWN0aW9uXG4gKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5vbignU2hvd0NhcmV0IEJlZm9yZU9iamVjdFNlbGVjdGVkJywgZnVuY3Rpb24oZSkge1xuICogICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAqIH0pO1xuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgdGlueW1jZS5TZWxlY3Rpb25PdmVycmlkZXNcbiAqL1xuZGVmaW5lKFwidGlueW1jZS9TZWxlY3Rpb25PdmVycmlkZXNcIiwgW1xuXHRcInRpbnltY2UvRW52XCIsXG5cdFwidGlueW1jZS9jYXJldC9DYXJldFdhbGtlclwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRQb3NpdGlvblwiLFxuXHRcInRpbnltY2UvY2FyZXQvQ2FyZXRDb250YWluZXJcIixcblx0XCJ0aW55bWNlL2NhcmV0L0NhcmV0VXRpbHNcIixcblx0XCJ0aW55bWNlL2NhcmV0L0Zha2VDYXJldFwiLFxuXHRcInRpbnltY2UvY2FyZXQvTGluZVdhbGtlclwiLFxuXHRcInRpbnltY2UvY2FyZXQvTGluZVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vTm9kZVR5cGVcIixcblx0XCJ0aW55bWNlL2RvbS9SYW5nZVV0aWxzXCIsXG5cdFwidGlueW1jZS9nZW9tL0NsaWVudFJlY3RcIixcblx0XCJ0aW55bWNlL3V0aWwvVktcIixcblx0XCJ0aW55bWNlL3V0aWwvRnVuXCIsXG5cdFwidGlueW1jZS91dGlsL0FyclwiLFxuXHRcInRpbnltY2UvdXRpbC9EZWxheVwiLFxuXHRcInRpbnltY2UvRHJhZ0Ryb3BPdmVycmlkZXNcIlxuXSwgZnVuY3Rpb24oXG5cdEVudiwgQ2FyZXRXYWxrZXIsIENhcmV0UG9zaXRpb24sIENhcmV0Q29udGFpbmVyLCBDYXJldFV0aWxzLCBGYWtlQ2FyZXQsIExpbmVXYWxrZXIsXG5cdExpbmVVdGlscywgTm9kZVR5cGUsIFJhbmdlVXRpbHMsIENsaWVudFJlY3QsIFZLLCBGdW4sIEFyciwgRGVsYXksIERyYWdEcm9wT3ZlcnJpZGVzXG4pIHtcblx0dmFyIGN1cnJ5ID0gRnVuLmN1cnJ5LFxuXHRcdGlzQ29udGVudEVkaXRhYmxlVHJ1ZSA9IE5vZGVUeXBlLmlzQ29udGVudEVkaXRhYmxlVHJ1ZSxcblx0XHRpc0NvbnRlbnRFZGl0YWJsZUZhbHNlID0gTm9kZVR5cGUuaXNDb250ZW50RWRpdGFibGVGYWxzZSxcblx0XHRpc0VsZW1lbnQgPSBOb2RlVHlwZS5pc0VsZW1lbnQsXG5cdFx0aXNBZnRlckNvbnRlbnRFZGl0YWJsZUZhbHNlID0gQ2FyZXRVdGlscy5pc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UsXG5cdFx0aXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZSA9IENhcmV0VXRpbHMuaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZSxcblx0XHRnZXRTZWxlY3RlZE5vZGUgPSBSYW5nZVV0aWxzLmdldFNlbGVjdGVkTm9kZTtcblxuXHRmdW5jdGlvbiBnZXRWaXN1YWxDYXJldFBvc2l0aW9uKHdhbGtGbiwgY2FyZXRQb3NpdGlvbikge1xuXHRcdHdoaWxlICgoY2FyZXRQb3NpdGlvbiA9IHdhbGtGbihjYXJldFBvc2l0aW9uKSkpIHtcblx0XHRcdGlmIChjYXJldFBvc2l0aW9uLmlzVmlzaWJsZSgpKSB7XG5cdFx0XHRcdHJldHVybiBjYXJldFBvc2l0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjYXJldFBvc2l0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gU2VsZWN0aW9uT3ZlcnJpZGVzKGVkaXRvcikge1xuXHRcdHZhciByb290Tm9kZSA9IGVkaXRvci5nZXRCb2R5KCksIGNhcmV0V2Fsa2VyID0gbmV3IENhcmV0V2Fsa2VyKHJvb3ROb2RlKTtcblx0XHR2YXIgZ2V0TmV4dFZpc3VhbENhcmV0UG9zaXRpb24gPSBjdXJyeShnZXRWaXN1YWxDYXJldFBvc2l0aW9uLCBjYXJldFdhbGtlci5uZXh0KTtcblx0XHR2YXIgZ2V0UHJldlZpc3VhbENhcmV0UG9zaXRpb24gPSBjdXJyeShnZXRWaXN1YWxDYXJldFBvc2l0aW9uLCBjYXJldFdhbGtlci5wcmV2KSxcblx0XHRcdGZha2VDYXJldCA9IG5ldyBGYWtlQ2FyZXQoZWRpdG9yLmdldEJvZHkoKSwgaXNCbG9jayksXG5cdFx0XHRyZWFsU2VsZWN0aW9uSWQgPSAnc2VsLScgKyBlZGl0b3IuZG9tLnVuaXF1ZUlkKCksXG5cdFx0XHRzZWxlY3RlZENvbnRlbnRFZGl0YWJsZU5vZGUsICQgPSBlZGl0b3IuJDtcblxuXHRcdGZ1bmN0aW9uIGlzRmFrZVNlbGVjdGlvbkVsZW1lbnQoZWxtKSB7XG5cdFx0XHRyZXR1cm4gZWRpdG9yLmRvbS5oYXNDbGFzcyhlbG0sICdtY2Utb2Zmc2NyZWVuLXNlbGVjdGlvbicpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldFJlYWxTZWxlY3Rpb25FbGVtZW50KCkge1xuXHRcdFx0dmFyIGNvbnRhaW5lciA9IGVkaXRvci5kb20uZ2V0KHJlYWxTZWxlY3Rpb25JZCk7XG5cdFx0XHRyZXR1cm4gY29udGFpbmVyID8gY29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJylbMF0gOiBjb250YWluZXI7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNCbG9jayhub2RlKSB7XG5cdFx0XHRyZXR1cm4gZWRpdG9yLmRvbS5pc0Jsb2NrKG5vZGUpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNldFJhbmdlKHJhbmdlKSB7XG5cdFx0XHQvL2NvbnNvbGUubG9nKCdzZXRSYW5nZScsIHJhbmdlKTtcblx0XHRcdGlmIChyYW5nZSkge1xuXHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhyYW5nZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0UmFuZ2UoKSB7XG5cdFx0XHRyZXR1cm4gZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhub2RlLCBhbGlnblRvVG9wKSB7XG5cdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KG5vZGUsIGFsaWduVG9Ub3ApO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNob3dDYXJldChkaXJlY3Rpb24sIG5vZGUsIGJlZm9yZSkge1xuXHRcdFx0dmFyIGU7XG5cblx0XHRcdGUgPSBlZGl0b3IuZmlyZSgnU2hvd0NhcmV0Jywge1xuXHRcdFx0XHR0YXJnZXQ6IG5vZGUsXG5cdFx0XHRcdGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuXHRcdFx0XHRiZWZvcmU6IGJlZm9yZVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRzY3JvbGxJbnRvVmlldyhub2RlLCBkaXJlY3Rpb24gPT09IC0xKTtcblxuXHRcdFx0cmV0dXJuIGZha2VDYXJldC5zaG93KGJlZm9yZSwgbm9kZSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2VsZWN0Tm9kZShub2RlKSB7XG5cdFx0XHR2YXIgZTtcblxuXHRcdFx0ZSA9IGVkaXRvci5maXJlKCdCZWZvcmVPYmplY3RTZWxlY3RlZCcsIHt0YXJnZXQ6IG5vZGV9KTtcblx0XHRcdGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZ2V0Tm9kZVJhbmdlKG5vZGUpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldE5vZGVSYW5nZShub2RlKSB7XG5cdFx0XHR2YXIgcm5nID0gbm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cblx0XHRcdHJuZy5zZWxlY3ROb2RlKG5vZGUpO1xuXG5cdFx0XHRyZXR1cm4gcm5nO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzTW92ZUluc2lkZVNhbWVCbG9jayhmcm9tQ2FyZXRQb3NpdGlvbiwgdG9DYXJldFBvc2l0aW9uKSB7XG5cdFx0XHR2YXIgaW5TYW1lQmxvY2sgPSBDYXJldFV0aWxzLmlzSW5TYW1lQmxvY2soZnJvbUNhcmV0UG9zaXRpb24sIHRvQ2FyZXRQb3NpdGlvbik7XG5cblx0XHRcdC8vIEhhbmRsZSBib2d1cyBCUiA8cD5hYmN8PGJyPjwvcD5cblx0XHRcdGlmICghaW5TYW1lQmxvY2sgJiYgTm9kZVR5cGUuaXNCcihmcm9tQ2FyZXRQb3NpdGlvbi5nZXROb2RlKCkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaW5TYW1lQmxvY2s7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZFJhbmdlRW5kUG9pbnQoZGlyZWN0aW9uLCByYW5nZSkge1xuXHRcdFx0cmFuZ2UgPSBDYXJldFV0aWxzLm5vcm1hbGl6ZVJhbmdlKGRpcmVjdGlvbiwgcm9vdE5vZGUsIHJhbmdlKTtcblxuXHRcdFx0aWYgKGRpcmVjdGlvbiA9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChyYW5nZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uLmZyb21SYW5nZUVuZChyYW5nZSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaXNSYW5nZUluQ2FyZXRDb250YWluZXJCbG9jayhyYW5nZSkge1xuXHRcdFx0cmV0dXJuIENhcmV0Q29udGFpbmVyLmlzQ2FyZXRDb250YWluZXJCbG9jayhyYW5nZS5zdGFydENvbnRhaW5lcik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbW92ZVRvQ2VGYWxzZUhvcml6b250YWxseShkaXJlY3Rpb24sIGdldE5leHRQb3NGbiwgaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZUZuLCByYW5nZSkge1xuXHRcdFx0dmFyIG5vZGUsIGNhcmV0UG9zaXRpb24sIHBlZWtDYXJldFBvc2l0aW9uLCByYW5nZUlzSW5Db250YWluZXJCbG9jaztcblxuXHRcdFx0aWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcblx0XHRcdFx0bm9kZSA9IGdldFNlbGVjdGVkTm9kZShyYW5nZSk7XG5cdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNob3dDYXJldChkaXJlY3Rpb24sIG5vZGUsIGRpcmVjdGlvbiA9PSAtMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmFuZ2VJc0luQ29udGFpbmVyQmxvY2sgPSBpc1JhbmdlSW5DYXJldENvbnRhaW5lckJsb2NrKHJhbmdlKTtcblx0XHRcdGNhcmV0UG9zaXRpb24gPSBnZXROb3JtYWxpemVkUmFuZ2VFbmRQb2ludChkaXJlY3Rpb24sIHJhbmdlKTtcblxuXHRcdFx0aWYgKGlzQmVmb3JlQ29udGVudEVkaXRhYmxlRmFsc2VGbihjYXJldFBvc2l0aW9uKSkge1xuXHRcdFx0XHRyZXR1cm4gc2VsZWN0Tm9kZShjYXJldFBvc2l0aW9uLmdldE5vZGUoZGlyZWN0aW9uID09IC0xKSk7XG5cdFx0XHR9XG5cblx0XHRcdGNhcmV0UG9zaXRpb24gPSBnZXROZXh0UG9zRm4oY2FyZXRQb3NpdGlvbik7XG5cdFx0XHRpZiAoIWNhcmV0UG9zaXRpb24pIHtcblx0XHRcdFx0aWYgKHJhbmdlSXNJbkNvbnRhaW5lckJsb2NrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJhbmdlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlRm4oY2FyZXRQb3NpdGlvbikpIHtcblx0XHRcdFx0cmV0dXJuIHNob3dDYXJldChkaXJlY3Rpb24sIGNhcmV0UG9zaXRpb24uZ2V0Tm9kZShkaXJlY3Rpb24gPT0gLTEpLCBkaXJlY3Rpb24gPT0gMSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBlZWsgYWhlYWQgZm9yIGhhbmRsaW5nIG9mIGFifGM8c3BhbiBjRT1mYWxzZT4gLT4gYWJjfDxzcGFuIGNFPWZhbHNlPlxuXHRcdFx0cGVla0NhcmV0UG9zaXRpb24gPSBnZXROZXh0UG9zRm4oY2FyZXRQb3NpdGlvbik7XG5cdFx0XHRpZiAoaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZUZuKHBlZWtDYXJldFBvc2l0aW9uKSkge1xuXHRcdFx0XHRpZiAoaXNNb3ZlSW5zaWRlU2FtZUJsb2NrKGNhcmV0UG9zaXRpb24sIHBlZWtDYXJldFBvc2l0aW9uKSkge1xuXHRcdFx0XHRcdHJldHVybiBzaG93Q2FyZXQoZGlyZWN0aW9uLCBwZWVrQ2FyZXRQb3NpdGlvbi5nZXROb2RlKGRpcmVjdGlvbiA9PSAtMSksIGRpcmVjdGlvbiA9PSAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmFuZ2VJc0luQ29udGFpbmVyQmxvY2spIHtcblx0XHRcdFx0cmV0dXJuIHJlbmRlclJhbmdlQ2FyZXQoY2FyZXRQb3NpdGlvbi50b1JhbmdlKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBtb3ZlVG9DZUZhbHNlVmVydGljYWxseShkaXJlY3Rpb24sIHdhbGtlckZuLCByYW5nZSkge1xuXHRcdFx0dmFyIGNhcmV0UG9zaXRpb24sIGxpbmVQb3NpdGlvbnMsIG5leHRMaW5lUG9zaXRpb25zLFxuXHRcdFx0XHRjbG9zZXN0TmV4dExpbmVSZWN0LCBjYXJldENsaWVudFJlY3QsIGNsaWVudFgsXG5cdFx0XHRcdGRpc3QxLCBkaXN0MiwgY29udGVudEVkaXRhYmxlRmFsc2VOb2RlO1xuXG5cdFx0XHRjb250ZW50RWRpdGFibGVGYWxzZU5vZGUgPSBnZXRTZWxlY3RlZE5vZGUocmFuZ2UpO1xuXHRcdFx0Y2FyZXRQb3NpdGlvbiA9IGdldE5vcm1hbGl6ZWRSYW5nZUVuZFBvaW50KGRpcmVjdGlvbiwgcmFuZ2UpO1xuXHRcdFx0bGluZVBvc2l0aW9ucyA9IHdhbGtlckZuKHJvb3ROb2RlLCBMaW5lV2Fsa2VyLmlzQWJvdmVMaW5lKDEpLCBjYXJldFBvc2l0aW9uKTtcblx0XHRcdG5leHRMaW5lUG9zaXRpb25zID0gQXJyLmZpbHRlcihsaW5lUG9zaXRpb25zLCBMaW5lV2Fsa2VyLmlzTGluZSgxKSk7XG5cdFx0XHRjYXJldENsaWVudFJlY3QgPSBBcnIubGFzdChjYXJldFBvc2l0aW9uLmdldENsaWVudFJlY3RzKCkpO1xuXG5cdFx0XHRpZiAoaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZShjYXJldFBvc2l0aW9uKSkge1xuXHRcdFx0XHRjb250ZW50RWRpdGFibGVGYWxzZU5vZGUgPSBjYXJldFBvc2l0aW9uLmdldE5vZGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZShjYXJldFBvc2l0aW9uKSkge1xuXHRcdFx0XHRjb250ZW50RWRpdGFibGVGYWxzZU5vZGUgPSBjYXJldFBvc2l0aW9uLmdldE5vZGUodHJ1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghY2FyZXRDbGllbnRSZWN0KSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRjbGllbnRYID0gY2FyZXRDbGllbnRSZWN0LmxlZnQ7XG5cblx0XHRcdGNsb3Nlc3ROZXh0TGluZVJlY3QgPSBMaW5lVXRpbHMuZmluZENsb3Nlc3RDbGllbnRSZWN0KG5leHRMaW5lUG9zaXRpb25zLCBjbGllbnRYKTtcblx0XHRcdGlmIChjbG9zZXN0TmV4dExpbmVSZWN0KSB7XG5cdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGNsb3Nlc3ROZXh0TGluZVJlY3Qubm9kZSkpIHtcblx0XHRcdFx0XHRkaXN0MSA9IE1hdGguYWJzKGNsaWVudFggLSBjbG9zZXN0TmV4dExpbmVSZWN0LmxlZnQpO1xuXHRcdFx0XHRcdGRpc3QyID0gTWF0aC5hYnMoY2xpZW50WCAtIGNsb3Nlc3ROZXh0TGluZVJlY3QucmlnaHQpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHNob3dDYXJldChkaXJlY3Rpb24sIGNsb3Nlc3ROZXh0TGluZVJlY3Qubm9kZSwgZGlzdDEgPCBkaXN0Mik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvbnRlbnRFZGl0YWJsZUZhbHNlTm9kZSkge1xuXHRcdFx0XHR2YXIgY2FyZXRQb3NpdGlvbnMgPSBMaW5lV2Fsa2VyLnBvc2l0aW9uc1VudGlsKGRpcmVjdGlvbiwgcm9vdE5vZGUsIExpbmVXYWxrZXIuaXNBYm92ZUxpbmUoMSksIGNvbnRlbnRFZGl0YWJsZUZhbHNlTm9kZSk7XG5cblx0XHRcdFx0Y2xvc2VzdE5leHRMaW5lUmVjdCA9IExpbmVVdGlscy5maW5kQ2xvc2VzdENsaWVudFJlY3QoQXJyLmZpbHRlcihjYXJldFBvc2l0aW9ucywgTGluZVdhbGtlci5pc0xpbmUoMSkpLCBjbGllbnRYKTtcblx0XHRcdFx0aWYgKGNsb3Nlc3ROZXh0TGluZVJlY3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVuZGVyUmFuZ2VDYXJldChjbG9zZXN0TmV4dExpbmVSZWN0LnBvc2l0aW9uLnRvUmFuZ2UoKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjbG9zZXN0TmV4dExpbmVSZWN0ID0gQXJyLmxhc3QoQXJyLmZpbHRlcihjYXJldFBvc2l0aW9ucywgTGluZVdhbGtlci5pc0xpbmUoMCkpKTtcblx0XHRcdFx0aWYgKGNsb3Nlc3ROZXh0TGluZVJlY3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVuZGVyUmFuZ2VDYXJldChjbG9zZXN0TmV4dExpbmVSZWN0LnBvc2l0aW9uLnRvUmFuZ2UoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBleGl0UHJlQmxvY2soZGlyZWN0aW9uLCByYW5nZSkge1xuXHRcdFx0dmFyIHByZSwgY2FyZXRQb3MsIG5ld0Jsb2NrO1xuXG5cdFx0XHRmdW5jdGlvbiBjcmVhdGVUZXh0QmxvY2soKSB7XG5cdFx0XHRcdHZhciB0ZXh0QmxvY2sgPSBlZGl0b3IuZG9tLmNyZWF0ZShlZGl0b3Iuc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2spO1xuXG5cdFx0XHRcdGlmICghRW52LmllIHx8IEVudi5pZSA+PSAxMSkge1xuXHRcdFx0XHRcdHRleHRCbG9jay5pbm5lckhUTUwgPSAnPGJyIGRhdGEtbWNlLWJvZ3VzPVwiMVwiPic7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGV4dEJsb2NrO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmFuZ2UuY29sbGFwc2VkICYmIGVkaXRvci5zZXR0aW5ncy5mb3JjZWRfcm9vdF9ibG9jaykge1xuXHRcdFx0XHRwcmUgPSBlZGl0b3IuZG9tLmdldFBhcmVudChyYW5nZS5zdGFydENvbnRhaW5lciwgJ1BSRScpO1xuXHRcdFx0XHRpZiAoIXByZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkaXJlY3Rpb24gPT0gMSkge1xuXHRcdFx0XHRcdGNhcmV0UG9zID0gZ2V0TmV4dFZpc3VhbENhcmV0UG9zaXRpb24oQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChyYW5nZSkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNhcmV0UG9zID0gZ2V0UHJldlZpc3VhbENhcmV0UG9zaXRpb24oQ2FyZXRQb3NpdGlvbi5mcm9tUmFuZ2VTdGFydChyYW5nZSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFjYXJldFBvcykge1xuXHRcdFx0XHRcdG5ld0Jsb2NrID0gY3JlYXRlVGV4dEJsb2NrKCk7XG5cblx0XHRcdFx0XHRpZiAoZGlyZWN0aW9uID09IDEpIHtcblx0XHRcdFx0XHRcdGVkaXRvci4kKHByZSkuYWZ0ZXIobmV3QmxvY2spO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlZGl0b3IuJChwcmUpLmJlZm9yZShuZXdCbG9jayk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QobmV3QmxvY2ssIHRydWUpO1xuXHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uY29sbGFwc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG1vdmVIKGRpcmVjdGlvbiwgZ2V0TmV4dFBvc0ZuLCBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlRm4sIHJhbmdlKSB7XG5cdFx0XHR2YXIgbmV3UmFuZ2U7XG5cblx0XHRcdG5ld1JhbmdlID0gbW92ZVRvQ2VGYWxzZUhvcml6b250YWxseShkaXJlY3Rpb24sIGdldE5leHRQb3NGbiwgaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZUZuLCByYW5nZSk7XG5cdFx0XHRpZiAobmV3UmFuZ2UpIHtcblx0XHRcdFx0cmV0dXJuIG5ld1JhbmdlO1xuXHRcdFx0fVxuXG5cdFx0XHRuZXdSYW5nZSA9IGV4aXRQcmVCbG9jayhkaXJlY3Rpb24sIHJhbmdlKTtcblx0XHRcdGlmIChuZXdSYW5nZSkge1xuXHRcdFx0XHRyZXR1cm4gbmV3UmFuZ2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG1vdmVWKGRpcmVjdGlvbiwgd2Fsa2VyRm4sIHJhbmdlKSB7XG5cdFx0XHR2YXIgbmV3UmFuZ2U7XG5cblx0XHRcdG5ld1JhbmdlID0gbW92ZVRvQ2VGYWxzZVZlcnRpY2FsbHkoZGlyZWN0aW9uLCB3YWxrZXJGbiwgcmFuZ2UpO1xuXHRcdFx0aWYgKG5ld1JhbmdlKSB7XG5cdFx0XHRcdHJldHVybiBuZXdSYW5nZTtcblx0XHRcdH1cblxuXHRcdFx0bmV3UmFuZ2UgPSBleGl0UHJlQmxvY2soZGlyZWN0aW9uLCByYW5nZSk7XG5cdFx0XHRpZiAobmV3UmFuZ2UpIHtcblx0XHRcdFx0cmV0dXJuIG5ld1JhbmdlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRCbG9ja0NhcmV0Q29udGFpbmVyKCkge1xuXHRcdFx0cmV0dXJuICQoJypbZGF0YS1tY2UtY2FyZXRdJylbMF07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2hvd0Jsb2NrQ2FyZXRDb250YWluZXIoYmxvY2tDYXJldENvbnRhaW5lcikge1xuXHRcdFx0aWYgKGJsb2NrQ2FyZXRDb250YWluZXIuaGFzQXR0cmlidXRlKCdkYXRhLW1jZS1jYXJldCcpKSB7XG5cdFx0XHRcdENhcmV0Q29udGFpbmVyLnNob3dDYXJldENvbnRhaW5lckJsb2NrKGJsb2NrQ2FyZXRDb250YWluZXIpO1xuXHRcdFx0XHRzZXRSYW5nZShnZXRSYW5nZSgpKTsgLy8gUmVtb3ZlcyBjb250cm9sIHJlY3Qgb24gSUVcblx0XHRcdFx0c2Nyb2xsSW50b1ZpZXcoYmxvY2tDYXJldENvbnRhaW5lclswXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcmVuZGVyQ2FyZXRBdFJhbmdlKHJhbmdlKSB7XG5cdFx0XHR2YXIgY2FyZXRQb3NpdGlvbiwgY2VSb290O1xuXG5cdFx0XHRyYW5nZSA9IENhcmV0VXRpbHMubm9ybWFsaXplUmFuZ2UoMSwgcm9vdE5vZGUsIHJhbmdlKTtcblx0XHRcdGNhcmV0UG9zaXRpb24gPSBDYXJldFBvc2l0aW9uLmZyb21SYW5nZVN0YXJ0KHJhbmdlKTtcblxuXHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UoY2FyZXRQb3NpdGlvbi5nZXROb2RlKCkpKSB7XG5cdFx0XHRcdHJldHVybiBzaG93Q2FyZXQoMSwgY2FyZXRQb3NpdGlvbi5nZXROb2RlKCksICFjYXJldFBvc2l0aW9uLmlzQXRFbmQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSh0cnVlKSkpIHtcblx0XHRcdFx0cmV0dXJuIHNob3dDYXJldCgxLCBjYXJldFBvc2l0aW9uLmdldE5vZGUodHJ1ZSksIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVE9ETzogU2hvdWxkIHJlbmRlciBjYXJldCBiZWZvcmUvYWZ0ZXIgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBjbGljayBvbiB0aGUgcGFnZSBmb3JjZXMgYWZ0ZXIgbm93XG5cdFx0XHRjZVJvb3QgPSBlZGl0b3IuZG9tLmdldFBhcmVudChjYXJldFBvc2l0aW9uLmdldE5vZGUoKSwgRnVuLm9yKGlzQ29udGVudEVkaXRhYmxlRmFsc2UsIGlzQ29udGVudEVkaXRhYmxlVHJ1ZSkpO1xuXHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UoY2VSb290KSkge1xuXHRcdFx0XHRyZXR1cm4gc2hvd0NhcmV0KDEsIGNlUm9vdCwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZW5kZXJSYW5nZUNhcmV0KHJhbmdlKSB7XG5cdFx0XHR2YXIgY2FyZXRSYW5nZTtcblxuXHRcdFx0aWYgKCFyYW5nZSB8fCAhcmFuZ2UuY29sbGFwc2VkKSB7XG5cdFx0XHRcdHJldHVybiByYW5nZTtcblx0XHRcdH1cblxuXHRcdFx0Y2FyZXRSYW5nZSA9IHJlbmRlckNhcmV0QXRSYW5nZShyYW5nZSk7XG5cdFx0XHRpZiAoY2FyZXRSYW5nZSkge1xuXHRcdFx0XHRyZXR1cm4gY2FyZXRSYW5nZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJhbmdlO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRlbGV0ZUNvbnRlbnRFZGl0YWJsZU5vZGUobm9kZSkge1xuXHRcdFx0dmFyIG5leHRDYXJldFBvc2l0aW9uLCBwcmV2Q2FyZXRQb3NpdGlvbiwgcHJldkNlRmFsc2VFbG0sIG5leHRFbGVtZW50O1xuXG5cdFx0XHRpZiAoIWlzQ29udGVudEVkaXRhYmxlRmFsc2Uobm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUucHJldmlvdXNTaWJsaW5nKSkge1xuXHRcdFx0XHRwcmV2Q2VGYWxzZUVsbSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRwcmV2Q2FyZXRQb3NpdGlvbiA9IGdldFByZXZWaXN1YWxDYXJldFBvc2l0aW9uKENhcmV0UG9zaXRpb24uYmVmb3JlKG5vZGUpKTtcblx0XHRcdGlmICghcHJldkNhcmV0UG9zaXRpb24pIHtcblx0XHRcdFx0bmV4dENhcmV0UG9zaXRpb24gPSBnZXROZXh0VmlzdWFsQ2FyZXRQb3NpdGlvbihDYXJldFBvc2l0aW9uLmFmdGVyKG5vZGUpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5leHRDYXJldFBvc2l0aW9uICYmIGlzRWxlbWVudChuZXh0Q2FyZXRQb3NpdGlvbi5nZXROb2RlKCkpKSB7XG5cdFx0XHRcdG5leHRFbGVtZW50ID0gbmV4dENhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRDYXJldENvbnRhaW5lci5yZW1vdmUobm9kZS5wcmV2aW91c1NpYmxpbmcpO1xuXHRcdFx0Q2FyZXRDb250YWluZXIucmVtb3ZlKG5vZGUubmV4dFNpYmxpbmcpO1xuXHRcdFx0ZWRpdG9yLmRvbS5yZW1vdmUobm9kZSk7XG5cblx0XHRcdGlmIChlZGl0b3IuZG9tLmlzRW1wdHkoZWRpdG9yLmdldEJvZHkoKSkpIHtcblx0XHRcdFx0ZWRpdG9yLnNldENvbnRlbnQoJycpO1xuXHRcdFx0XHRlZGl0b3IuZm9jdXMoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHJldkNlRmFsc2VFbG0pIHtcblx0XHRcdFx0cmV0dXJuIENhcmV0UG9zaXRpb24uYWZ0ZXIocHJldkNlRmFsc2VFbG0pLnRvUmFuZ2UoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5leHRFbGVtZW50KSB7XG5cdFx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uLmJlZm9yZShuZXh0RWxlbWVudCkudG9SYW5nZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHJldkNhcmV0UG9zaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHByZXZDYXJldFBvc2l0aW9uLnRvUmFuZ2UoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5leHRDYXJldFBvc2l0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBuZXh0Q2FyZXRQb3NpdGlvbi50b1JhbmdlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzVGV4dEJsb2NrKG5vZGUpIHtcblx0XHRcdHZhciB0ZXh0QmxvY2tzID0gZWRpdG9yLnNjaGVtYS5nZXRUZXh0QmxvY2tFbGVtZW50cygpO1xuXHRcdFx0cmV0dXJuIG5vZGUubm9kZU5hbWUgaW4gdGV4dEJsb2Nrcztcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpc0VtcHR5KGVsbSkge1xuXHRcdFx0cmV0dXJuIGVkaXRvci5kb20uaXNFbXB0eShlbG0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG1lcmdlVGV4dEJsb2NrcyhkaXJlY3Rpb24sIGZyb21DYXJldFBvc2l0aW9uLCB0b0NhcmV0UG9zaXRpb24pIHtcblx0XHRcdHZhciBkb20gPSBlZGl0b3IuZG9tLCBmcm9tQmxvY2ssIHRvQmxvY2ssIG5vZGUsIGNlVGFyZ2V0O1xuXG5cdFx0XHRmcm9tQmxvY2sgPSBkb20uZ2V0UGFyZW50KGZyb21DYXJldFBvc2l0aW9uLmdldE5vZGUoKSwgZG9tLmlzQmxvY2spO1xuXHRcdFx0dG9CbG9jayA9IGRvbS5nZXRQYXJlbnQodG9DYXJldFBvc2l0aW9uLmdldE5vZGUoKSwgZG9tLmlzQmxvY2spO1xuXG5cdFx0XHRpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuXHRcdFx0XHRjZVRhcmdldCA9IHRvQ2FyZXRQb3NpdGlvbi5nZXROb2RlKHRydWUpO1xuXHRcdFx0XHRpZiAoaXNBZnRlckNvbnRlbnRFZGl0YWJsZUZhbHNlKHRvQ2FyZXRQb3NpdGlvbikgJiYgaXNCbG9jayhjZVRhcmdldCkpIHtcblx0XHRcdFx0XHRpZiAoaXNUZXh0QmxvY2soZnJvbUJsb2NrKSkge1xuXHRcdFx0XHRcdFx0aWYgKGlzRW1wdHkoZnJvbUJsb2NrKSkge1xuXHRcdFx0XHRcdFx0XHRkb20ucmVtb3ZlKGZyb21CbG9jayk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBDYXJldFBvc2l0aW9uLmFmdGVyKGNlVGFyZ2V0KS50b1JhbmdlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGRlbGV0ZUNvbnRlbnRFZGl0YWJsZU5vZGUodG9DYXJldFBvc2l0aW9uLmdldE5vZGUodHJ1ZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjZVRhcmdldCA9IGZyb21DYXJldFBvc2l0aW9uLmdldE5vZGUoKTtcblx0XHRcdFx0aWYgKGlzQmVmb3JlQ29udGVudEVkaXRhYmxlRmFsc2UoZnJvbUNhcmV0UG9zaXRpb24pICYmIGlzQmxvY2soY2VUYXJnZXQpKSB7XG5cdFx0XHRcdFx0aWYgKGlzVGV4dEJsb2NrKHRvQmxvY2spKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXNFbXB0eSh0b0Jsb2NrKSkge1xuXHRcdFx0XHRcdFx0XHRkb20ucmVtb3ZlKHRvQmxvY2spO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gQ2FyZXRQb3NpdGlvbi5iZWZvcmUoY2VUYXJnZXQpLnRvUmFuZ2UoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gZGVsZXRlQ29udGVudEVkaXRhYmxlTm9kZShmcm9tQ2FyZXRQb3NpdGlvbi5nZXROb2RlKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFZlcmlmeSB0aGF0IGJvdGggYmxvY2tzIGFyZSB0ZXh0IGJsb2Nrc1xuXHRcdFx0aWYgKGZyb21CbG9jayA9PT0gdG9CbG9jayB8fCAhaXNUZXh0QmxvY2soZnJvbUJsb2NrKSB8fCAhaXNUZXh0QmxvY2sodG9CbG9jaykpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHdoaWxlICgobm9kZSA9IGZyb21CbG9jay5maXJzdENoaWxkKSkge1xuXHRcdFx0XHR0b0Jsb2NrLmFwcGVuZENoaWxkKG5vZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRlZGl0b3IuZG9tLnJlbW92ZShmcm9tQmxvY2spO1xuXG5cdFx0XHRyZXR1cm4gdG9DYXJldFBvc2l0aW9uLnRvUmFuZ2UoKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBiYWNrc3BhY2VEZWxldGUoZGlyZWN0aW9uLCBiZWZvcmVGbiwgYWZ0ZXJGbiwgcmFuZ2UpIHtcblx0XHRcdHZhciBub2RlLCBjYXJldFBvc2l0aW9uLCBwZWVrQ2FyZXRQb3NpdGlvbiwgbmV3Q2FyZXRQb3NpdGlvbjtcblxuXHRcdFx0aWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcblx0XHRcdFx0bm9kZSA9IGdldFNlbGVjdGVkTm9kZShyYW5nZSk7XG5cdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlbmRlclJhbmdlQ2FyZXQoZGVsZXRlQ29udGVudEVkaXRhYmxlTm9kZShub2RlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y2FyZXRQb3NpdGlvbiA9IGdldE5vcm1hbGl6ZWRSYW5nZUVuZFBvaW50KGRpcmVjdGlvbiwgcmFuZ2UpO1xuXG5cdFx0XHRpZiAoYWZ0ZXJGbihjYXJldFBvc2l0aW9uKSAmJiBDYXJldENvbnRhaW5lci5pc0NhcmV0Q29udGFpbmVyQmxvY2socmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XG5cdFx0XHRcdG5ld0NhcmV0UG9zaXRpb24gPSBkaXJlY3Rpb24gPT0gLTEgPyBjYXJldFdhbGtlci5wcmV2KGNhcmV0UG9zaXRpb24pIDogY2FyZXRXYWxrZXIubmV4dChjYXJldFBvc2l0aW9uKTtcblx0XHRcdFx0cmV0dXJuIG5ld0NhcmV0UG9zaXRpb24gPyByZW5kZXJSYW5nZUNhcmV0KG5ld0NhcmV0UG9zaXRpb24udG9SYW5nZSgpKSA6IHJhbmdlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYmVmb3JlRm4oY2FyZXRQb3NpdGlvbikpIHtcblx0XHRcdFx0cmV0dXJuIHJlbmRlclJhbmdlQ2FyZXQoZGVsZXRlQ29udGVudEVkaXRhYmxlTm9kZShjYXJldFBvc2l0aW9uLmdldE5vZGUoZGlyZWN0aW9uID09IC0xKSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRwZWVrQ2FyZXRQb3NpdGlvbiA9IGRpcmVjdGlvbiA9PSAtMSA/IGNhcmV0V2Fsa2VyLnByZXYoY2FyZXRQb3NpdGlvbikgOiBjYXJldFdhbGtlci5uZXh0KGNhcmV0UG9zaXRpb24pO1xuXHRcdFx0aWYgKGJlZm9yZUZuKHBlZWtDYXJldFBvc2l0aW9uKSkge1xuXHRcdFx0XHRpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuXHRcdFx0XHRcdHJldHVybiBtZXJnZVRleHRCbG9ja3MoZGlyZWN0aW9uLCBjYXJldFBvc2l0aW9uLCBwZWVrQ2FyZXRQb3NpdGlvbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWVyZ2VUZXh0QmxvY2tzKGRpcmVjdGlvbiwgcGVla0NhcmV0UG9zaXRpb24sIGNhcmV0UG9zaXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKCkge1xuXHRcdFx0dmFyIHJpZ2h0ID0gY3VycnkobW92ZUgsIDEsIGdldE5leHRWaXN1YWxDYXJldFBvc2l0aW9uLCBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlKTtcblx0XHRcdHZhciBsZWZ0ID0gY3VycnkobW92ZUgsIC0xLCBnZXRQcmV2VmlzdWFsQ2FyZXRQb3NpdGlvbiwgaXNBZnRlckNvbnRlbnRFZGl0YWJsZUZhbHNlKTtcblx0XHRcdHZhciBkZWxldGVGb3J3YXJkID0gY3VycnkoYmFja3NwYWNlRGVsZXRlLCAxLCBpc0JlZm9yZUNvbnRlbnRFZGl0YWJsZUZhbHNlLCBpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UpO1xuXHRcdFx0dmFyIGJhY2tzcGFjZSA9IGN1cnJ5KGJhY2tzcGFjZURlbGV0ZSwgLTEsIGlzQWZ0ZXJDb250ZW50RWRpdGFibGVGYWxzZSwgaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZSk7XG5cdFx0XHR2YXIgdXAgPSBjdXJyeShtb3ZlViwgLTEsIExpbmVXYWxrZXIudXBVbnRpbCk7XG5cdFx0XHR2YXIgZG93biA9IGN1cnJ5KG1vdmVWLCAxLCBMaW5lV2Fsa2VyLmRvd25VbnRpbCk7XG5cblx0XHRcdGZ1bmN0aW9uIG92ZXJyaWRlKGV2dCwgbW92ZUZuKSB7XG5cdFx0XHRcdHZhciByYW5nZSA9IG1vdmVGbihnZXRSYW5nZSgpKTtcblxuXHRcdFx0XHRpZiAocmFuZ2UgJiYgIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuXHRcdFx0XHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHNldFJhbmdlKHJhbmdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBnZXRDb250ZW50RWRpdGFibGVSb290KG5vZGUpIHtcblx0XHRcdFx0dmFyIHJvb3QgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuXG5cdFx0XHRcdHdoaWxlIChub2RlICYmIG5vZGUgIT0gcm9vdCkge1xuXHRcdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZVRydWUobm9kZSkgfHwgaXNDb250ZW50RWRpdGFibGVGYWxzZShub2RlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBpc1hZV2l0aGluUmFuZ2UoY2xpZW50WCwgY2xpZW50WSwgcmFuZ2UpIHtcblx0XHRcdFx0aWYgKHJhbmdlLmNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBBcnIucmVkdWNlKHJhbmdlLmdldENsaWVudFJlY3RzKCksIGZ1bmN0aW9uKHN0YXRlLCByZWN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlIHx8IENsaWVudFJlY3QuY29udGFpbnNYWShyZWN0LCBjbGllbnRYLCBjbGllbnRZKTtcblx0XHRcdFx0fSwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTb21lIGJyb3dzZXJzIChDaHJvbWUpIGxldHMgeW91IHBsYWNlIHRoZSBjYXJldCBhZnRlciBhIGNFPWZhbHNlXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2UgcmVuZGVyIHRoZSBjYXJldCBjb250YWluZXIgaW4gdGhpcyBjYXNlXG5cdFx0XHRlZGl0b3Iub24oJ21vdXNldXAnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHJhbmdlID0gZ2V0UmFuZ2UoKTtcblxuXHRcdFx0XHRpZiAocmFuZ2UuY29sbGFwc2VkKSB7XG5cdFx0XHRcdFx0c2V0UmFuZ2UocmVuZGVyQ2FyZXRBdFJhbmdlKHJhbmdlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRlZGl0b3Iub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHR2YXIgY29udGVudEVkaXRhYmxlUm9vdDtcblxuXHRcdFx0XHRjb250ZW50RWRpdGFibGVSb290XHQ9IGdldENvbnRlbnRFZGl0YWJsZVJvb3QoZS50YXJnZXQpO1xuXHRcdFx0XHRpZiAoY29udGVudEVkaXRhYmxlUm9vdCkge1xuXHRcdFx0XHRcdC8vIFByZXZlbnQgY2xpY2tzIG9uIGxpbmtzIGluIGEgY0U9ZmFsc2UgZWxlbWVudFxuXHRcdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGNvbnRlbnRFZGl0YWJsZVJvb3QpKSB7XG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRlZGl0b3IuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBSZW1vdmVzIGZha2Ugc2VsZWN0aW9uIGlmIGEgY0U9dHJ1ZSBpcyBjbGlja2VkIHdpdGhpbiBhIGNFPWZhbHNlIGxpa2UgdGhlIHRvYyB0aXRsZVxuXHRcdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZVRydWUoY29udGVudEVkaXRhYmxlUm9vdCkpIHtcblx0XHRcdFx0XHRcdGlmIChlZGl0b3IuZG9tLmlzQ2hpbGRPZihjb250ZW50RWRpdGFibGVSb290LCBlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSkpIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQ29udGVudEVkaXRhYmxlU2VsZWN0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWRpdG9yLm9uKCdibHVyIE5ld0Jsb2NrJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZW1vdmVDb250ZW50RWRpdGFibGVTZWxlY3Rpb24oKTtcblx0XHRcdFx0aGlkZUZha2VDYXJldCgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGZ1bmN0aW9uIGhhbmRsZVRvdWNoU2VsZWN0KGVkaXRvcikge1xuXHRcdFx0XHR2YXIgbW92ZWQgPSBmYWxzZTtcblxuXHRcdFx0XHRlZGl0b3Iub24oJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0bW92ZWQgPSBmYWxzZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0ZWRpdG9yLm9uKCd0b3VjaG1vdmUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0bW92ZWQgPSB0cnVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRlZGl0b3Iub24oJ3RvdWNoZW5kJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHR2YXIgY29udGVudEVkaXRhYmxlUm9vdFx0PSBnZXRDb250ZW50RWRpdGFibGVSb290KGUudGFyZ2V0KTtcblxuXHRcdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGNvbnRlbnRFZGl0YWJsZVJvb3QpKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW1vdmVkKSB7XG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0c2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKHNlbGVjdE5vZGUoY29udGVudEVkaXRhYmxlUm9vdCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBoYXNOb3JtYWxDYXJldFBvc2l0aW9uID0gZnVuY3Rpb24gKGVsbSkge1xuXHRcdFx0XHR2YXIgY2FyZXRXYWxrZXIgPSBuZXcgQ2FyZXRXYWxrZXIoZWxtKTtcblxuXHRcdFx0XHRpZiAoIWVsbS5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHN0YXJ0UG9zID0gQ2FyZXRQb3NpdGlvbi5iZWZvcmUoZWxtLmZpcnN0Q2hpbGQpO1xuXHRcdFx0XHR2YXIgbmV3UG9zID0gY2FyZXRXYWxrZXIubmV4dChzdGFydFBvcyk7XG5cblx0XHRcdFx0cmV0dXJuIG5ld1BvcyAmJiAhaXNCZWZvcmVDb250ZW50RWRpdGFibGVGYWxzZShuZXdQb3MpICYmICFpc0FmdGVyQ29udGVudEVkaXRhYmxlRmFsc2UobmV3UG9zKTtcblx0XHRcdH07XG5cblx0XHRcdHZhciBpc0luU2FtZUJsb2NrID0gZnVuY3Rpb24gKG5vZGUxLCBub2RlMikge1xuXHRcdFx0XHR2YXIgYmxvY2sxID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQobm9kZTEsIGVkaXRvci5kb20uaXNCbG9jayk7XG5cdFx0XHRcdHZhciBibG9jazIgPSBlZGl0b3IuZG9tLmdldFBhcmVudChub2RlMiwgZWRpdG9yLmRvbS5pc0Jsb2NrKTtcblx0XHRcdFx0cmV0dXJuIGJsb2NrMSA9PT0gYmxvY2syO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIGlzQ29udGVudEtleSA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdGlmIChlLmtleUNvZGUgPj0gMTEyICYmIGUua2V5Q29kZSA8PSAxMjMpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH07XG5cblx0XHRcdC8vIENoZWNrcyBpZiB0aGUgdGFyZ2V0IG5vZGUgaXMgaW4gYSBibG9jayBhbmQgaWYgdGhhdCBibG9jayBoYXMgYSBjYXJldCBwb3NpdGlvbiBiZXR0ZXIgdGhhbiB0aGVcblx0XHRcdC8vIHN1Z2dlc3RlZCBjYXJldE5vZGUgdGhpcyBpcyB0byBwcmV2ZW50IHRoZSBjYXJldCBmcm9tIGJlaW5nIHN1Y2tlZCBpbiB0b3dhcmRzIGEgY0U9ZmFsc2UgYmxvY2sgaWZcblx0XHRcdC8vIHRoZXkgYXJlIGFkamFjZW50IG9uIHRoZSB2ZXJ0aWNhbCBheGlzXG5cdFx0XHR2YXIgaGFzQmV0dGVyTW91c2VUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0Tm9kZSwgY2FyZXROb2RlKSB7XG5cdFx0XHRcdHZhciB0YXJnZXRCbG9jayA9IGVkaXRvci5kb20uZ2V0UGFyZW50KHRhcmdldE5vZGUsIGVkaXRvci5kb20uaXNCbG9jayk7XG5cdFx0XHRcdHZhciBjYXJldEJsb2NrID0gZWRpdG9yLmRvbS5nZXRQYXJlbnQoY2FyZXROb2RlLCBlZGl0b3IuZG9tLmlzQmxvY2spO1xuXG5cdFx0XHRcdHJldHVybiB0YXJnZXRCbG9jayAmJiAhaXNJblNhbWVCbG9jayh0YXJnZXRCbG9jaywgY2FyZXRCbG9jaykgJiYgaGFzTm9ybWFsQ2FyZXRQb3NpdGlvbih0YXJnZXRCbG9jayk7XG5cdFx0XHR9O1xuXG5cdFx0XHRoYW5kbGVUb3VjaFNlbGVjdChlZGl0b3IpO1xuXG5cdFx0XHRlZGl0b3Iub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGNvbnRlbnRFZGl0YWJsZVJvb3Q7XG5cblx0XHRcdFx0Y29udGVudEVkaXRhYmxlUm9vdFx0PSBnZXRDb250ZW50RWRpdGFibGVSb290KGUudGFyZ2V0KTtcblx0XHRcdFx0aWYgKGNvbnRlbnRFZGl0YWJsZVJvb3QpIHtcblx0XHRcdFx0XHRpZiAoaXNDb250ZW50RWRpdGFibGVGYWxzZShjb250ZW50RWRpdGFibGVSb290KSkge1xuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0c2V0Q29udGVudEVkaXRhYmxlU2VsZWN0aW9uKHNlbGVjdE5vZGUoY29udGVudEVkaXRhYmxlUm9vdCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIWlzWFlXaXRoaW5SYW5nZShlLmNsaWVudFgsIGUuY2xpZW50WSwgZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSkpIHtcblx0XHRcdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5wbGFjZUNhcmV0QXQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgbmVlZHMgdG8gYmUgY2FsbGVkIGhlcmUgc2luY2UgdGhlIG1vdXNlZG93biBtaWdodCBhbHRlciB0aGUgc2VsZWN0aW9uIHdpdGhvdXQgY2FsbGluZyBzZWxlY3Rpb24uc2V0Um5nXG5cdFx0XHRcdFx0Ly8gYW5kIHRoZXJlZm9yZSBub3QgZmlyZSB0aGUgQWZ0ZXJTZXRTZWxlY3Rpb25SYW5nZSBldmVudC5cblx0XHRcdFx0XHRyZW1vdmVDb250ZW50RWRpdGFibGVTZWxlY3Rpb24oKTtcblx0XHRcdFx0XHRoaWRlRmFrZUNhcmV0KCk7XG5cblx0XHRcdFx0XHR2YXIgY2FyZXRJbmZvID0gTGluZVV0aWxzLmNsb3Nlc3RDYXJldChyb290Tm9kZSwgZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuXHRcdFx0XHRcdGlmIChjYXJldEluZm8pIHtcblx0XHRcdFx0XHRcdGlmICghaGFzQmV0dGVyTW91c2VUYXJnZXQoZS50YXJnZXQsIGNhcmV0SW5mby5ub2RlKSkge1xuXHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGVkaXRvci5nZXRCb2R5KCkuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0c2V0UmFuZ2Uoc2hvd0NhcmV0KDEsIGNhcmV0SW5mby5ub2RlLCBjYXJldEluZm8uYmVmb3JlKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWRpdG9yLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRpZiAoVksubW9kaWZpZXJQcmVzc2VkKGUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3dpdGNoIChlLmtleUNvZGUpIHtcblx0XHRcdFx0XHRjYXNlIFZLLlJJR0hUOlxuXHRcdFx0XHRcdFx0b3ZlcnJpZGUoZSwgcmlnaHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFZLLkRPV046XG5cdFx0XHRcdFx0XHRvdmVycmlkZShlLCBkb3duKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBWSy5MRUZUOlxuXHRcdFx0XHRcdFx0b3ZlcnJpZGUoZSwgbGVmdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgVksuVVA6XG5cdFx0XHRcdFx0XHRvdmVycmlkZShlLCB1cCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgVksuREVMRVRFOlxuXHRcdFx0XHRcdFx0b3ZlcnJpZGUoZSwgZGVsZXRlRm9yd2FyZCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgVksuQkFDS1NQQUNFOlxuXHRcdFx0XHRcdFx0b3ZlcnJpZGUoZSwgYmFja3NwYWNlKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpKSAmJiBpc0NvbnRlbnRLZXkoZSkpIHtcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRmdW5jdGlvbiBwYWRkRW1wdHlDb250ZW50RWRpdGFibGVBcmVhKCkge1xuXHRcdFx0XHR2YXIgYnIsIGNlUm9vdCA9IGdldENvbnRlbnRFZGl0YWJsZVJvb3QoZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkpO1xuXG5cdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZVRydWUoY2VSb290KSAmJiBpc0Jsb2NrKGNlUm9vdCkgJiYgZWRpdG9yLmRvbS5pc0VtcHR5KGNlUm9vdCkpIHtcblx0XHRcdFx0XHRiciA9IGVkaXRvci5kb20uY3JlYXRlKCdicicsIHtcImRhdGEtbWNlLWJvZ3VzXCI6IFwiMVwifSk7XG5cdFx0XHRcdFx0ZWRpdG9yLiQoY2VSb290KS5lbXB0eSgpLmFwcGVuZChicik7XG5cdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcoQ2FyZXRQb3NpdGlvbi5iZWZvcmUoYnIpLnRvUmFuZ2UoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gaGFuZGxlQmxvY2tDb250YWluZXIoZSkge1xuXHRcdFx0XHR2YXIgYmxvY2tDYXJldENvbnRhaW5lciA9IGdldEJsb2NrQ2FyZXRDb250YWluZXIoKTtcblxuXHRcdFx0XHRpZiAoIWJsb2NrQ2FyZXRDb250YWluZXIpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZS50eXBlID09ICdjb21wb3NpdGlvbnN0YXJ0Jykge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdHNob3dCbG9ja0NhcmV0Q29udGFpbmVyKGJsb2NrQ2FyZXRDb250YWluZXIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChDYXJldENvbnRhaW5lci5oYXNDb250ZW50KGJsb2NrQ2FyZXRDb250YWluZXIpKSB7XG5cdFx0XHRcdFx0c2hvd0Jsb2NrQ2FyZXRDb250YWluZXIoYmxvY2tDYXJldENvbnRhaW5lcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gaGFuZGxlRW1wdHlCYWNrc3BhY2VEZWxldGUoZSkge1xuXHRcdFx0XHR2YXIgcHJldmVudDtcblxuXHRcdFx0XHRzd2l0Y2ggKGUua2V5Q29kZSkge1xuXHRcdFx0XHRcdGNhc2UgVksuREVMRVRFOlxuXHRcdFx0XHRcdFx0cHJldmVudCA9IHBhZGRFbXB0eUNvbnRlbnRFZGl0YWJsZUFyZWEoKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBWSy5CQUNLU1BBQ0U6XG5cdFx0XHRcdFx0XHRwcmV2ZW50ID0gcGFkZEVtcHR5Q29udGVudEVkaXRhYmxlQXJlYSgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocHJldmVudCkge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBNdXN0IGJlIGFkZGVkIHRvIFwidG9wXCIgc2luY2UgdW5kb01hbmFnZXIgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXJcblx0XHRcdGVkaXRvci5vbigna2V5dXAgY29tcG9zaXRpb25zdGFydCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aGFuZGxlQmxvY2tDb250YWluZXIoZSk7XG5cdFx0XHRcdGhhbmRsZUVtcHR5QmFja3NwYWNlRGVsZXRlKGUpO1xuXHRcdFx0fSwgdHJ1ZSk7XG5cblx0XHRcdGVkaXRvci5vbignY3V0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBub2RlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCk7XG5cblx0XHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2Uobm9kZSkpIHtcblx0XHRcdFx0XHREZWxheS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzZXRSYW5nZShyZW5kZXJSYW5nZUNhcmV0KGRlbGV0ZUNvbnRlbnRFZGl0YWJsZU5vZGUobm9kZSkpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGVkaXRvci5vbignZ2V0U2VsZWN0aW9uUmFuZ2UnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBybmcgPSBlLnJhbmdlO1xuXG5cdFx0XHRcdGlmIChzZWxlY3RlZENvbnRlbnRFZGl0YWJsZU5vZGUpIHtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGVkQ29udGVudEVkaXRhYmxlTm9kZS5wYXJlbnROb2RlKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRlbnRFZGl0YWJsZU5vZGUgPSBudWxsO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJuZyA9IHJuZy5jbG9uZVJhbmdlKCk7XG5cdFx0XHRcdFx0cm5nLnNlbGVjdE5vZGUoc2VsZWN0ZWRDb250ZW50RWRpdGFibGVOb2RlKTtcblx0XHRcdFx0XHRlLnJhbmdlID0gcm5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWRpdG9yLm9uKCdzZXRTZWxlY3Rpb25SYW5nZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIHJuZztcblxuXHRcdFx0XHRybmcgPSBzZXRDb250ZW50RWRpdGFibGVTZWxlY3Rpb24oZS5yYW5nZSk7XG5cdFx0XHRcdGlmIChybmcpIHtcblx0XHRcdFx0XHRlLnJhbmdlID0gcm5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWRpdG9yLm9uKCdBZnRlclNldFNlbGVjdGlvblJhbmdlJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHR2YXIgcm5nID0gZS5yYW5nZTtcblxuXHRcdFx0XHRpZiAoIWlzUmFuZ2VJbkNhcmV0Q29udGFpbmVyKHJuZykpIHtcblx0XHRcdFx0XHRoaWRlRmFrZUNhcmV0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWlzRmFrZVNlbGVjdGlvbkVsZW1lbnQocm5nLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUpKSB7XG5cdFx0XHRcdFx0cmVtb3ZlQ29udGVudEVkaXRhYmxlU2VsZWN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRlZGl0b3Iub24oJ2ZvY3VzJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIGZha2UgY2FyZXQgb24gZm9jdXNcblx0XHRcdFx0RGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJlbmRlclJhbmdlQ2FyZXQoZWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKSkpO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRlZGl0b3Iub24oJ2NvcHknLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHR2YXIgY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YTtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgd2UgZ2V0IHByb3BlciBodG1sL3RleHQgZm9yIHRoZSBmYWtlIGNFPWZhbHNlIHNlbGVjdGlvblxuXHRcdFx0XHQvLyBEb2Vzbid0IHdvcmsgYXQgYWxsIG9uIEVkZ2Ugc2luY2UgaXQgZG9lc24ndCBoYXZlIHByb3BlciBjbGlwYm9hcmREYXRhIHN1cHBvcnRcblx0XHRcdFx0aWYgKCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpICYmIGUuY2xpcGJvYXJkRGF0YSAmJiAhRW52LmllKSB7XG5cdFx0XHRcdFx0dmFyIHJlYWxTZWxlY3Rpb25FbGVtZW50ID0gZ2V0UmVhbFNlbGVjdGlvbkVsZW1lbnQoKTtcblx0XHRcdFx0XHRpZiAocmVhbFNlbGVjdGlvbkVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdGNsaXBib2FyZERhdGEuY2xlYXJEYXRhKCk7XG5cdFx0XHRcdFx0XHRjbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvaHRtbCcsIHJlYWxTZWxlY3Rpb25FbGVtZW50Lm91dGVySFRNTCk7XG5cdFx0XHRcdFx0XHRjbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCByZWFsU2VsZWN0aW9uRWxlbWVudC5vdXRlclRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdERyYWdEcm9wT3ZlcnJpZGVzLmluaXQoZWRpdG9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBhZGRDc3MoKSB7XG5cdFx0XHR2YXIgc3R5bGVzID0gZWRpdG9yLmNvbnRlbnRTdHlsZXMsIHJvb3RDbGFzcyA9ICcubWNlLWNvbnRlbnQtYm9keSc7XG5cblx0XHRcdHN0eWxlcy5wdXNoKGZha2VDYXJldC5nZXRDc3MoKSk7XG5cdFx0XHRzdHlsZXMucHVzaChcblx0XHRcdFx0cm9vdENsYXNzICsgJyAubWNlLW9mZnNjcmVlbi1zZWxlY3Rpb24geycgK1xuXHRcdFx0XHRcdCdwb3NpdGlvbjogYWJzb2x1dGU7JyArXG5cdFx0XHRcdFx0J2xlZnQ6IC05OTk5OTk5OTk5cHg7JyArXG5cdFx0XHRcdFx0J21heC13aWR0aDogMTAwMDAwMHB4OycgK1xuXHRcdFx0XHQnfScgK1xuXHRcdFx0XHRyb290Q2xhc3MgKyAnICpbY29udGVudEVkaXRhYmxlPWZhbHNlXSB7JyArXG5cdFx0XHRcdFx0J2N1cnNvcjogZGVmYXVsdDsnICtcblx0XHRcdFx0J30nICtcblx0XHRcdFx0cm9vdENsYXNzICsgJyAqW2NvbnRlbnRFZGl0YWJsZT10cnVlXSB7JyArXG5cdFx0XHRcdFx0J2N1cnNvcjogdGV4dDsnICtcblx0XHRcdFx0J30nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGlzUmFuZ2VJbkNhcmV0Q29udGFpbmVyKHJuZykge1xuXHRcdFx0cmV0dXJuIENhcmV0Q29udGFpbmVyLmlzQ2FyZXRDb250YWluZXIocm5nLnN0YXJ0Q29udGFpbmVyKSB8fCBDYXJldENvbnRhaW5lci5pc0NhcmV0Q29udGFpbmVyKHJuZy5lbmRDb250YWluZXIpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNldENvbnRlbnRFZGl0YWJsZVNlbGVjdGlvbihyYW5nZSkge1xuXHRcdFx0dmFyIG5vZGUsICQgPSBlZGl0b3IuJCwgZG9tID0gZWRpdG9yLmRvbSwgJHJlYWxTZWxlY3Rpb25Db250YWluZXIsIHNlbCxcblx0XHRcdFx0c3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGUsIGNhcmV0UG9zaXRpb24sIHRhcmdldENsb25lLCBvcmlnVGFyZ2V0Q2xvbmU7XG5cblx0XHRcdGlmICghcmFuZ2UpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyYW5nZS5jb2xsYXBzZWQpIHtcblx0XHRcdFx0aWYgKCFpc1JhbmdlSW5DYXJldENvbnRhaW5lcihyYW5nZSkpIHtcblx0XHRcdFx0XHRjYXJldFBvc2l0aW9uID0gZ2V0Tm9ybWFsaXplZFJhbmdlRW5kUG9pbnQoMSwgcmFuZ2UpO1xuXG5cdFx0XHRcdFx0aWYgKGlzQ29udGVudEVkaXRhYmxlRmFsc2UoY2FyZXRQb3NpdGlvbi5nZXROb2RlKCkpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2hvd0NhcmV0KDEsIGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSgpLCAhY2FyZXRQb3NpdGlvbi5pc0F0RW5kKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKGNhcmV0UG9zaXRpb24uZ2V0Tm9kZSh0cnVlKSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzaG93Q2FyZXQoMSwgY2FyZXRQb3NpdGlvbi5nZXROb2RlKHRydWUpLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XG5cdFx0XHRzdGFydE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuXHRcdFx0ZW5kT2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0O1xuXG5cdFx0XHQvLyBOb3JtYWxpemVzIDxzcGFuIGNFPWZhbHNlPls8L3NwYW4+XSB0byBbPHNwYW4gY0U9ZmFsc2U+PC9zcGFuPl1cblx0XHRcdGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PSAzICYmIHN0YXJ0T2Zmc2V0ID09IDAgJiYgaXNDb250ZW50RWRpdGFibGVGYWxzZShzdGFydENvbnRhaW5lci5wYXJlbnROb2RlKSkge1xuXHRcdFx0XHRzdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGU7XG5cdFx0XHRcdHN0YXJ0T2Zmc2V0ID0gZG9tLm5vZGVJbmRleChzdGFydENvbnRhaW5lcik7XG5cdFx0XHRcdHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9IDEpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlbmRPZmZzZXQgPT0gc3RhcnRPZmZzZXQgKyAxKSB7XG5cdFx0XHRcdG5vZGUgPSBzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3N0YXJ0T2Zmc2V0XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFpc0NvbnRlbnRFZGl0YWJsZUZhbHNlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHR0YXJnZXRDbG9uZSA9IG9yaWdUYXJnZXRDbG9uZSA9IG5vZGUuY2xvbmVOb2RlKHRydWUpO1xuXHRcdFx0ZSA9IGVkaXRvci5maXJlKCdPYmplY3RTZWxlY3RlZCcsIHt0YXJnZXQ6IG5vZGUsIHRhcmdldENsb25lOiB0YXJnZXRDbG9uZX0pO1xuXHRcdFx0aWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRhcmdldENsb25lID0gZS50YXJnZXRDbG9uZTtcblx0XHRcdCRyZWFsU2VsZWN0aW9uQ29udGFpbmVyID0gJCgnIycgKyByZWFsU2VsZWN0aW9uSWQpO1xuXHRcdFx0aWYgKCRyZWFsU2VsZWN0aW9uQ29udGFpbmVyLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQkcmVhbFNlbGVjdGlvbkNvbnRhaW5lciA9ICQoXG5cdFx0XHRcdFx0JzxkaXYgZGF0YS1tY2UtYm9ndXM9XCJhbGxcIiBjbGFzcz1cIm1jZS1vZmZzY3JlZW4tc2VsZWN0aW9uXCI+PC9kaXY+J1xuXHRcdFx0XHQpLmF0dHIoJ2lkJywgcmVhbFNlbGVjdGlvbklkKTtcblxuXHRcdFx0XHQkcmVhbFNlbGVjdGlvbkNvbnRhaW5lci5hcHBlbmRUbyhlZGl0b3IuZ2V0Qm9keSgpKTtcblx0XHRcdH1cblxuXHRcdFx0cmFuZ2UgPSBlZGl0b3IuZG9tLmNyZWF0ZVJuZygpO1xuXG5cdFx0XHQvLyBXSFkgaXMgSUUgbWFraW5nIHRoaW5ncyBzbyBoYXJkISBDb3B5IG9uIDxpIGNvbnRlbnRFZGl0YWJsZT1cImZhbHNlXCI+eDwvaT4gcHJvZHVjZXM6IDxlbT54PC9lbT5cblx0XHRcdC8vIFRoaXMgaXMgYSByaWRpY3Vsb3VzIGhhY2sgd2hlcmUgd2UgcGxhY2UgdGhlIHNlbGVjdGlvbiBmcm9tIGEgYmxvY2sgb3ZlciB0aGUgaW5saW5lIGVsZW1lbnRcblx0XHRcdC8vIHNvIHRoYXQganVzdCB0aGUgaW5saW5lIGVsZW1lbnQgaXMgY29waWVkIGFzIGlzIGFuZCBub3QgY29udmVydGVkLlxuXHRcdFx0aWYgKHRhcmdldENsb25lID09PSBvcmlnVGFyZ2V0Q2xvbmUgJiYgRW52LmllKSB7XG5cdFx0XHRcdCRyZWFsU2VsZWN0aW9uQ29udGFpbmVyLmVtcHR5KCkuYXBwZW5kKCc8cCBzdHlsZT1cImZvbnQtc2l6ZTogMFwiIGRhdGEtbWNlLWJvZ3VzPVwiYWxsXCI+XFx1MDBhMDwvcD4nKS5hcHBlbmQodGFyZ2V0Q2xvbmUpO1xuXHRcdFx0XHRyYW5nZS5zZXRTdGFydEFmdGVyKCRyZWFsU2VsZWN0aW9uQ29udGFpbmVyWzBdLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdHJhbmdlLnNldEVuZEFmdGVyKHRhcmdldENsb25lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCRyZWFsU2VsZWN0aW9uQ29udGFpbmVyLmVtcHR5KCkuYXBwZW5kKCdcXHUwMGEwJykuYXBwZW5kKHRhcmdldENsb25lKS5hcHBlbmQoJ1xcdTAwYTAnKTtcblx0XHRcdFx0cmFuZ2Uuc2V0U3RhcnQoJHJlYWxTZWxlY3Rpb25Db250YWluZXJbMF0uZmlyc3RDaGlsZCwgMSk7XG5cdFx0XHRcdHJhbmdlLnNldEVuZCgkcmVhbFNlbGVjdGlvbkNvbnRhaW5lclswXS5sYXN0Q2hpbGQsIDApO1xuXHRcdFx0fVxuXG5cdFx0XHQkcmVhbFNlbGVjdGlvbkNvbnRhaW5lci5jc3Moe1xuXHRcdFx0XHR0b3A6IGRvbS5nZXRQb3Mobm9kZSwgZWRpdG9yLmdldEJvZHkoKSkueVxuXHRcdFx0fSk7XG5cblx0XHRcdCRyZWFsU2VsZWN0aW9uQ29udGFpbmVyWzBdLmZvY3VzKCk7XG5cdFx0XHRzZWwgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbCgpO1xuXHRcdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0c2VsLmFkZFJhbmdlKHJhbmdlKTtcblxuXHRcdFx0ZWRpdG9yLiQoJypbZGF0YS1tY2Utc2VsZWN0ZWRdJykucmVtb3ZlQXR0cignZGF0YS1tY2Utc2VsZWN0ZWQnKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1jZS1zZWxlY3RlZCcsIDEpO1xuXHRcdFx0c2VsZWN0ZWRDb250ZW50RWRpdGFibGVOb2RlID0gbm9kZTtcblx0XHRcdGhpZGVGYWtlQ2FyZXQoKTtcblxuXHRcdFx0cmV0dXJuIHJhbmdlO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlbW92ZUNvbnRlbnRFZGl0YWJsZVNlbGVjdGlvbigpIHtcblx0XHRcdGlmIChzZWxlY3RlZENvbnRlbnRFZGl0YWJsZU5vZGUpIHtcblx0XHRcdFx0c2VsZWN0ZWRDb250ZW50RWRpdGFibGVOb2RlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tY2Utc2VsZWN0ZWQnKTtcblx0XHRcdFx0ZWRpdG9yLiQoJyMnICsgcmVhbFNlbGVjdGlvbklkKS5yZW1vdmUoKTtcblx0XHRcdFx0c2VsZWN0ZWRDb250ZW50RWRpdGFibGVOb2RlID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdFx0ZmFrZUNhcmV0LmRlc3Ryb3koKTtcblx0XHRcdHNlbGVjdGVkQ29udGVudEVkaXRhYmxlTm9kZSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGlkZUZha2VDYXJldCgpIHtcblx0XHRcdGZha2VDYXJldC5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKEVudi5jZUZhbHNlKSB7XG5cdFx0XHRyZWdpc3RlckV2ZW50cygpO1xuXHRcdFx0YWRkQ3NzKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHNob3dCbG9ja0NhcmV0Q29udGFpbmVyOiBzaG93QmxvY2tDYXJldENvbnRhaW5lcixcblx0XHRcdGhpZGVGYWtlQ2FyZXQ6IGhpZGVGYWtlQ2FyZXQsXG5cdFx0XHRkZXN0cm95OiBkZXN0cm95XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBTZWxlY3Rpb25PdmVycmlkZXM7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3V0aWwvVXVpZC5qc1xuXG4vKipcbiAqIFV1aWQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdW5pcXVlIGlkcy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51dGlsLlV1aWRcbiAqIEBwcml2YXRlXG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9VdWlkXCIsIFtcbl0sIGZ1bmN0aW9uKCkge1xuXHR2YXIgY291bnQgPSAwO1xuXG5cdHZhciBzZWVkID0gZnVuY3Rpb24gKCkge1xuXHRcdHZhciBybmQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMHhGRkZGRkZGRikudG9TdHJpbmcoMzYpO1xuXHRcdH07XG5cblx0XHR2YXIgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cdFx0cmV0dXJuICdzJyArIG5vdy50b1N0cmluZygzNikgKyBybmQoKSArIHJuZCgpICsgcm5kKCk7XG5cdH07XG5cblx0dmFyIHV1aWQgPSBmdW5jdGlvbiAocHJlZml4KSB7XG5cdFx0cmV0dXJuIHByZWZpeCArIChjb3VudCsrKSArIHNlZWQoKTtcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdHV1aWQ6IHV1aWRcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvU2lkZWJhci5qc1xuXG4vKipcbiAqIFNpZGViYXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBoYW5kbGUgc2lkZWJhciBpbnN0YW5jZXMgZm9yIHRoZSBlZGl0b3IuXG4gKlxuICogQGNsYXNzIHRpbnltY2UudWkuU2lkZWJhclxuICogQHByaXZhdGVcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9TaWRlYmFyXCIsIFtcbl0sIGZ1bmN0aW9uKFxuKSB7XG5cdHZhciBhZGQgPSBmdW5jdGlvbiAoZWRpdG9yLCBuYW1lLCBzZXR0aW5ncykge1xuXHRcdHZhciBzaWRlYmFycyA9IGVkaXRvci5zaWRlYmFycyA/IGVkaXRvci5zaWRlYmFycyA6IFtdO1xuXHRcdHNpZGViYXJzLnB1c2goe25hbWU6IG5hbWUsIHNldHRpbmdzOiBzZXR0aW5nc30pO1xuXHRcdGVkaXRvci5zaWRlYmFycyA9IHNpZGViYXJzO1xuXHR9O1xuXG5cdHJldHVybiB7XG5cdFx0YWRkOiBhZGRcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvRWRpdG9yLmpzXG5cbi8qKlxuICogRWRpdG9yLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qanNoaW50IHNjcmlwdHVybDp0cnVlICovXG5cbi8qKlxuICogSW5jbHVkZSB0aGUgYmFzZSBldmVudCBjbGFzcyBkb2N1bWVudGF0aW9uLlxuICpcbiAqIEBpbmNsdWRlIC4uLy4uLy4uL3Rvb2xzL2RvY3MvdGlueW1jZS5FdmVudC5qc1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBjb250YWlucyB0aGUgY29yZSBsb2dpYyBmb3IgYSBUaW55TUNFIGVkaXRvci5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS5FZGl0b3JcbiAqIEBtaXhlcyB0aW55bWNlLnV0aWwuT2JzZXJ2YWJsZVxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCBhIGNsYXNzIHRvIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBlZGl0b3IuXG4gKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uYWRkQ2xhc3ModGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLnNlbGVjdCgncCcpLCAnc29tZWNsYXNzJyk7XG4gKlxuICogLy8gR2V0cyB0aGUgY3VycmVudCBlZGl0b3JzIHNlbGVjdGlvbiBhcyB0ZXh0XG4gKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5zZWxlY3Rpb24uZ2V0Q29udGVudCh7Zm9ybWF0OiAndGV4dCd9KTtcbiAqXG4gKiAvLyBDcmVhdGVzIGEgbmV3IGVkaXRvciBpbnN0YW5jZVxuICogdmFyIGVkID0gbmV3IHRpbnltY2UuRWRpdG9yKCd0ZXh0YXJlYWlkJywge1xuICogICAgIHNvbWVfc2V0dGluZzogMVxuICogfSwgdGlueW1jZS5FZGl0b3JNYW5hZ2VyKTtcbiAqXG4gKiAvLyBTZWxlY3QgZWFjaCBpdGVtIHRoZSB1c2VyIGNsaWNrcyBvblxuICogZWQub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICogICAgIGVkLnNlbGVjdGlvbi5zZWxlY3QoZS50YXJnZXQpO1xuICogfSk7XG4gKlxuICogZWQucmVuZGVyKCk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvRWRpdG9yXCIsIFtcblx0XCJ0aW55bWNlL2RvbS9ET01VdGlsc1wiLFxuXHRcInRpbnltY2UvZG9tL0RvbVF1ZXJ5XCIsXG5cdFwidGlueW1jZS9BZGRPbk1hbmFnZXJcIixcblx0XCJ0aW55bWNlL05vZGVDaGFuZ2VcIixcblx0XCJ0aW55bWNlL2h0bWwvTm9kZVwiLFxuXHRcInRpbnltY2UvZG9tL1NlcmlhbGl6ZXJcIixcblx0XCJ0aW55bWNlL2h0bWwvU2VyaWFsaXplclwiLFxuXHRcInRpbnltY2UvZG9tL1NlbGVjdGlvblwiLFxuXHRcInRpbnltY2UvRm9ybWF0dGVyXCIsXG5cdFwidGlueW1jZS9VbmRvTWFuYWdlclwiLFxuXHRcInRpbnltY2UvRW50ZXJLZXlcIixcblx0XCJ0aW55bWNlL0ZvcmNlQmxvY2tzXCIsXG5cdFwidGlueW1jZS9FZGl0b3JDb21tYW5kc1wiLFxuXHRcInRpbnltY2UvdXRpbC9VUklcIixcblx0XCJ0aW55bWNlL2RvbS9TY3JpcHRMb2FkZXJcIixcblx0XCJ0aW55bWNlL2RvbS9FdmVudFV0aWxzXCIsXG5cdFwidGlueW1jZS9XaW5kb3dNYW5hZ2VyXCIsXG5cdFwidGlueW1jZS9Ob3RpZmljYXRpb25NYW5hZ2VyXCIsXG5cdFwidGlueW1jZS9odG1sL1NjaGVtYVwiLFxuXHRcInRpbnltY2UvaHRtbC9Eb21QYXJzZXJcIixcblx0XCJ0aW55bWNlL3V0aWwvUXVpcmtzXCIsXG5cdFwidGlueW1jZS9FbnZcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL3V0aWwvRGVsYXlcIixcblx0XCJ0aW55bWNlL0VkaXRvck9ic2VydmFibGVcIixcblx0XCJ0aW55bWNlL01vZGVcIixcblx0XCJ0aW55bWNlL1Nob3J0Y3V0c1wiLFxuXHRcInRpbnltY2UvRWRpdG9yVXBsb2FkXCIsXG5cdFwidGlueW1jZS9TZWxlY3Rpb25PdmVycmlkZXNcIixcblx0XCJ0aW55bWNlL3V0aWwvVXVpZFwiLFxuXHRcInRpbnltY2UvdWkvU2lkZWJhclwiLFxuXHRcInRpbnltY2UvRXJyb3JSZXBvcnRlclwiXG5dLCBmdW5jdGlvbihcblx0RE9NVXRpbHMsIERvbVF1ZXJ5LCBBZGRPbk1hbmFnZXIsIE5vZGVDaGFuZ2UsIE5vZGUsIERvbVNlcmlhbGl6ZXIsIFNlcmlhbGl6ZXIsXG5cdFNlbGVjdGlvbiwgRm9ybWF0dGVyLCBVbmRvTWFuYWdlciwgRW50ZXJLZXksIEZvcmNlQmxvY2tzLCBFZGl0b3JDb21tYW5kcyxcblx0VVJJLCBTY3JpcHRMb2FkZXIsIEV2ZW50VXRpbHMsIFdpbmRvd01hbmFnZXIsIE5vdGlmaWNhdGlvbk1hbmFnZXIsXG5cdFNjaGVtYSwgRG9tUGFyc2VyLCBRdWlya3MsIEVudiwgVG9vbHMsIERlbGF5LCBFZGl0b3JPYnNlcnZhYmxlLCBNb2RlLCBTaG9ydGN1dHMsIEVkaXRvclVwbG9hZCxcblx0U2VsZWN0aW9uT3ZlcnJpZGVzLCBVdWlkLCBTaWRlYmFyLCBFcnJvclJlcG9ydGVyXG4pIHtcblx0Ly8gU2hvcnRlbiB0aGVzZSBuYW1lc1xuXHR2YXIgRE9NID0gRE9NVXRpbHMuRE9NLCBUaGVtZU1hbmFnZXIgPSBBZGRPbk1hbmFnZXIuVGhlbWVNYW5hZ2VyLCBQbHVnaW5NYW5hZ2VyID0gQWRkT25NYW5hZ2VyLlBsdWdpbk1hbmFnZXI7XG5cdHZhciBleHRlbmQgPSBUb29scy5leHRlbmQsIGVhY2ggPSBUb29scy5lYWNoLCBleHBsb2RlID0gVG9vbHMuZXhwbG9kZTtcblx0dmFyIGluQXJyYXkgPSBUb29scy5pbkFycmF5LCB0cmltID0gVG9vbHMudHJpbSwgcmVzb2x2ZSA9IFRvb2xzLnJlc29sdmU7XG5cdHZhciBFdmVudCA9IEV2ZW50VXRpbHMuRXZlbnQ7XG5cdHZhciBpc0dlY2tvID0gRW52LmdlY2tvLCBpZSA9IEVudi5pZTtcblxuXHQvKipcblx0ICogSW5jbHVkZSBkb2N1bWVudGF0aW9uIGZvciBhbGwgdGhlIGV2ZW50cy5cblx0ICpcblx0ICogQGluY2x1ZGUgLi4vLi4vLi4vdG9vbHMvZG9jcy90aW55bWNlLkVkaXRvci5qc1xuXHQgKi9cblxuXHQvKipcblx0ICogQ29uc3RydWN0cyBhIGVkaXRvciBpbnN0YW5jZSBieSBpZC5cblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBtZXRob2QgRWRpdG9yXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpZCBVbmlxdWUgaWQgZm9yIHRoZSBlZGl0b3IuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBTZXR0aW5ncyBmb3IgdGhlIGVkaXRvci5cblx0ICogQHBhcmFtIHt0aW55bWNlLkVkaXRvck1hbmFnZXJ9IGVkaXRvck1hbmFnZXIgRWRpdG9yTWFuYWdlciBpbnN0YW5jZS5cblx0ICovXG5cdGZ1bmN0aW9uIEVkaXRvcihpZCwgc2V0dGluZ3MsIGVkaXRvck1hbmFnZXIpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXMsIGRvY3VtZW50QmFzZVVybCwgYmFzZVVyaSwgZGVmYXVsdFNldHRpbmdzO1xuXG5cdFx0ZG9jdW1lbnRCYXNlVXJsID0gc2VsZi5kb2N1bWVudEJhc2VVcmwgPSBlZGl0b3JNYW5hZ2VyLmRvY3VtZW50QmFzZVVSTDtcblx0XHRiYXNlVXJpID0gZWRpdG9yTWFuYWdlci5iYXNlVVJJO1xuXHRcdGRlZmF1bHRTZXR0aW5ncyA9IGVkaXRvck1hbmFnZXIuZGVmYXVsdFNldHRpbmdzO1xuXG5cdFx0LyoqXG5cdFx0ICogTmFtZS92YWx1ZSBjb2xsZWN0aW9uIHdpdGggZWRpdG9yIHNldHRpbmdzLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IHNldHRpbmdzXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSB0aGVtZSBzZXR0aW5nXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iud2luZG93TWFuYWdlci5hbGVydChcIllvdSBhcmUgdXNpbmcgdGhlIFwiICsgdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2V0dGluZ3MudGhlbWUgKyBcIiB0aGVtZVwiKTtcblx0XHQgKi9cblx0XHRzZXR0aW5ncyA9IGV4dGVuZCh7XG5cdFx0XHRpZDogaWQsXG5cdFx0XHR0aGVtZTogJ21vZGVybicsXG5cdFx0XHRkZWx0YV93aWR0aDogMCxcblx0XHRcdGRlbHRhX2hlaWdodDogMCxcblx0XHRcdHBvcHVwX2NzczogJycsXG5cdFx0XHRwbHVnaW5zOiAnJyxcblx0XHRcdGRvY3VtZW50X2Jhc2VfdXJsOiBkb2N1bWVudEJhc2VVcmwsXG5cdFx0XHRhZGRfZm9ybV9zdWJtaXRfdHJpZ2dlcjogdHJ1ZSxcblx0XHRcdHN1Ym1pdF9wYXRjaDogdHJ1ZSxcblx0XHRcdGFkZF91bmxvYWRfdHJpZ2dlcjogdHJ1ZSxcblx0XHRcdGNvbnZlcnRfdXJsczogdHJ1ZSxcblx0XHRcdHJlbGF0aXZlX3VybHM6IHRydWUsXG5cdFx0XHRyZW1vdmVfc2NyaXB0X2hvc3Q6IHRydWUsXG5cdFx0XHRvYmplY3RfcmVzaXppbmc6IHRydWUsXG5cdFx0XHRkb2N0eXBlOiAnPCFET0NUWVBFIGh0bWw+Jyxcblx0XHRcdHZpc3VhbDogdHJ1ZSxcblx0XHRcdGZvbnRfc2l6ZV9zdHlsZV92YWx1ZXM6ICd4eC1zbWFsbCx4LXNtYWxsLHNtYWxsLG1lZGl1bSxsYXJnZSx4LWxhcmdlLHh4LWxhcmdlJyxcblxuXHRcdFx0Ly8gU2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyL2ZvbnRzLmh0bWwjcHJvcGRlZi1mb250LXNpemVcblx0XHRcdGZvbnRfc2l6ZV9sZWdhY3lfdmFsdWVzOiAneHgtc21hbGwsc21hbGwsbWVkaXVtLGxhcmdlLHgtbGFyZ2UseHgtbGFyZ2UsMzAwJScsXG5cdFx0XHRmb3JjZWRfcm9vdF9ibG9jazogJ3AnLFxuXHRcdFx0aGlkZGVuX2lucHV0OiB0cnVlLFxuXHRcdFx0cGFkZF9lbXB0eV9lZGl0b3I6IHRydWUsXG5cdFx0XHRyZW5kZXJfdWk6IHRydWUsXG5cdFx0XHRpbmRlbnRhdGlvbjogJzMwcHgnLFxuXHRcdFx0aW5saW5lX3N0eWxlczogdHJ1ZSxcblx0XHRcdGNvbnZlcnRfZm9udHNfdG9fc3BhbnM6IHRydWUsXG5cdFx0XHRpbmRlbnQ6ICdzaW1wbGUnLFxuXHRcdFx0aW5kZW50X2JlZm9yZTogJ3AsaDEsaDIsaDMsaDQsaDUsaDYsYmxvY2txdW90ZSxkaXYsdGl0bGUsc3R5bGUscHJlLHNjcmlwdCx0ZCx0aCx1bCxvbCxsaSxkbCxkdCxkZCxhcmVhLHRhYmxlLHRoZWFkLCcgK1xuXHRcdFx0XHQndGZvb3QsdGJvZHksdHIsc2VjdGlvbixhcnRpY2xlLGhncm91cCxhc2lkZSxmaWd1cmUsZmlnY2FwdGlvbixvcHRpb24sb3B0Z3JvdXAsZGF0YWxpc3QnLFxuXHRcdFx0aW5kZW50X2FmdGVyOiAncCxoMSxoMixoMyxoNCxoNSxoNixibG9ja3F1b3RlLGRpdix0aXRsZSxzdHlsZSxwcmUsc2NyaXB0LHRkLHRoLHVsLG9sLGxpLGRsLGR0LGRkLGFyZWEsdGFibGUsdGhlYWQsJyArXG5cdFx0XHRcdCd0Zm9vdCx0Ym9keSx0cixzZWN0aW9uLGFydGljbGUsaGdyb3VwLGFzaWRlLGZpZ3VyZSxmaWdjYXB0aW9uLG9wdGlvbixvcHRncm91cCxkYXRhbGlzdCcsXG5cdFx0XHR2YWxpZGF0ZTogdHJ1ZSxcblx0XHRcdGVudGl0eV9lbmNvZGluZzogJ25hbWVkJyxcblx0XHRcdHVybF9jb252ZXJ0ZXI6IHNlbGYuY29udmVydFVSTCxcblx0XHRcdHVybF9jb252ZXJ0ZXJfc2NvcGU6IHNlbGYsXG5cdFx0XHRpZTdfY29tcGF0OiB0cnVlXG5cdFx0fSwgZGVmYXVsdFNldHRpbmdzLCBzZXR0aW5ncyk7XG5cblx0XHQvLyBNZXJnZSBleHRlcm5hbF9wbHVnaW5zXG5cdFx0aWYgKGRlZmF1bHRTZXR0aW5ncyAmJiBkZWZhdWx0U2V0dGluZ3MuZXh0ZXJuYWxfcGx1Z2lucyAmJiBzZXR0aW5ncy5leHRlcm5hbF9wbHVnaW5zKSB7XG5cdFx0XHRzZXR0aW5ncy5leHRlcm5hbF9wbHVnaW5zID0gZXh0ZW5kKHt9LCBkZWZhdWx0U2V0dGluZ3MuZXh0ZXJuYWxfcGx1Z2lucywgc2V0dGluZ3MuZXh0ZXJuYWxfcGx1Z2lucyk7XG5cdFx0fVxuXG5cdFx0c2VsZi5zZXR0aW5ncyA9IHNldHRpbmdzO1xuXHRcdEFkZE9uTWFuYWdlci5sYW5ndWFnZSA9IHNldHRpbmdzLmxhbmd1YWdlIHx8ICdlbic7XG5cdFx0QWRkT25NYW5hZ2VyLmxhbmd1YWdlTG9hZCA9IHNldHRpbmdzLmxhbmd1YWdlX2xvYWQ7XG5cdFx0QWRkT25NYW5hZ2VyLmJhc2VVUkwgPSBlZGl0b3JNYW5hZ2VyLmJhc2VVUkw7XG5cblx0XHQvKipcblx0XHQgKiBFZGl0b3IgaW5zdGFuY2UgaWQsIG5vcm1hbGx5IHRoZSBzYW1lIGFzIHRoZSBkaXYvdGV4dGFyZWEgdGhhdCB3YXMgcmVwbGFjZWQuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgaWRcblx0XHQgKiBAdHlwZSBTdHJpbmdcblx0XHQgKi9cblx0XHRzZWxmLmlkID0gc2V0dGluZ3MuaWQgPSBpZDtcblxuXHRcdC8qKlxuXHRcdCAqIFN0YXRlIHRvIGZvcmNlIHRoZSBlZGl0b3IgdG8gcmV0dXJuIGZhbHNlIG9uIGEgaXNEaXJ0eSBjYWxsLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IGlzTm90RGlydHlcblx0XHQgKiBAdHlwZSBCb29sZWFuXG5cdFx0ICogQGRlcHJlY2F0ZWQgVXNlIGVkaXRvci5zZXREaXJ0eSBpbnN0ZWFkLlxuXHRcdCAqL1xuXHRcdHNlbGYuc2V0RGlydHkoZmFsc2UpO1xuXG5cdFx0LyoqXG5cdFx0ICogTmFtZS9WYWx1ZSBvYmplY3QgY29udGFpbmluZyBwbHVnaW4gaW5zdGFuY2VzLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IHBsdWdpbnNcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIEV4ZWN1dGUgYSBtZXRob2QgaW5zaWRlIGEgcGx1Z2luIGRpcmVjdGx5XG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IucGx1Z2lucy5zb21lcGx1Z2luLnNvbWVNZXRob2QoKTtcblx0XHQgKi9cblx0XHRzZWxmLnBsdWdpbnMgPSB7fTtcblxuXHRcdC8qKlxuXHRcdCAqIFVSSSBvYmplY3QgdG8gZG9jdW1lbnQgY29uZmlndXJlZCBmb3IgdGhlIFRpbnlNQ0UgaW5zdGFuY2UuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgZG9jdW1lbnRCYXNlVVJJXG5cdFx0ICogQHR5cGUgdGlueW1jZS51dGlsLlVSSVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gR2V0IHJlbGF0aXZlIFVSTCBmcm9tIHRoZSBsb2NhdGlvbiBvZiBkb2N1bWVudF9iYXNlX3VybFxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvY3VtZW50QmFzZVVSSS50b1JlbGF0aXZlKCcvc29tZWRpci9zb21lZmlsZS5odG0nKTtcblx0XHQgKlxuXHRcdCAqIC8vIEdldCBhYnNvbHV0ZSBVUkwgZnJvbSB0aGUgbG9jYXRpb24gb2YgZG9jdW1lbnRfYmFzZV91cmxcblx0XHQgKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5kb2N1bWVudEJhc2VVUkkudG9BYnNvbHV0ZSgnc29tZWZpbGUuaHRtJyk7XG5cdFx0ICovXG5cdFx0c2VsZi5kb2N1bWVudEJhc2VVUkkgPSBuZXcgVVJJKHNldHRpbmdzLmRvY3VtZW50X2Jhc2VfdXJsIHx8IGRvY3VtZW50QmFzZVVybCwge1xuXHRcdFx0YmFzZV91cmk6IGJhc2VVcmlcblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqIFVSSSBvYmplY3QgdG8gY3VycmVudCBkb2N1bWVudCB0aGF0IGhvbGRzIHRoZSBUaW55TUNFIGVkaXRvciBpbnN0YW5jZS5cblx0XHQgKlxuXHRcdCAqIEBwcm9wZXJ0eSBiYXNlVVJJXG5cdFx0ICogQHR5cGUgdGlueW1jZS51dGlsLlVSSVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gR2V0IHJlbGF0aXZlIFVSTCBmcm9tIHRoZSBsb2NhdGlvbiBvZiB0aGUgQVBJXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IuYmFzZVVSSS50b1JlbGF0aXZlKCcvc29tZWRpci9zb21lZmlsZS5odG0nKTtcblx0XHQgKlxuXHRcdCAqIC8vIEdldCBhYnNvbHV0ZSBVUkwgZnJvbSB0aGUgbG9jYXRpb24gb2YgdGhlIEFQSVxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmJhc2VVUkkudG9BYnNvbHV0ZSgnc29tZWZpbGUuaHRtJyk7XG5cdFx0ICovXG5cdFx0c2VsZi5iYXNlVVJJID0gYmFzZVVyaTtcblxuXHRcdC8qKlxuXHRcdCAqIEFycmF5IHdpdGggQ1NTIGZpbGVzIHRvIGxvYWQgaW50byB0aGUgaWZyYW1lLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IGNvbnRlbnRDU1Ncblx0XHQgKiBAdHlwZSBBcnJheVxuXHRcdCAqL1xuXHRcdHNlbGYuY29udGVudENTUyA9IFtdO1xuXG5cdFx0LyoqXG5cdFx0ICogQXJyYXkgb2YgQ1NTIHN0eWxlcyB0byBhZGQgdG8gaGVhZCBvZiBkb2N1bWVudCB3aGVuIHRoZSBlZGl0b3IgbG9hZHMuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgY29udGVudFN0eWxlc1xuXHRcdCAqIEB0eXBlIEFycmF5XG5cdFx0ICovXG5cdFx0c2VsZi5jb250ZW50U3R5bGVzID0gW107XG5cblx0XHQvLyBDcmVhdGVzIGFsbCBldmVudHMgbGlrZSBvbkNsaWNrLCBvblNldENvbnRlbnQgZXRjIHNlZSBFZGl0b3IuRXZlbnRzLmpzIGZvciB0aGUgYWN0dWFsIGxvZ2ljXG5cdFx0c2VsZi5zaG9ydGN1dHMgPSBuZXcgU2hvcnRjdXRzKHNlbGYpO1xuXHRcdHNlbGYubG9hZGVkQ1NTID0ge307XG5cdFx0c2VsZi5lZGl0b3JDb21tYW5kcyA9IG5ldyBFZGl0b3JDb21tYW5kcyhzZWxmKTtcblx0XHRzZWxmLnN1ZmZpeCA9IGVkaXRvck1hbmFnZXIuc3VmZml4O1xuXHRcdHNlbGYuZWRpdG9yTWFuYWdlciA9IGVkaXRvck1hbmFnZXI7XG5cdFx0c2VsZi5pbmxpbmUgPSBzZXR0aW5ncy5pbmxpbmU7XG5cdFx0c2VsZi5zZXR0aW5ncy5jb250ZW50X2VkaXRhYmxlID0gc2VsZi5pbmxpbmU7XG5cblx0XHRpZiAoc2V0dGluZ3MuY2FjaGVfc3VmZml4KSB7XG5cdFx0XHRFbnYuY2FjaGVTdWZmaXggPSBzZXR0aW5ncy5jYWNoZV9zdWZmaXgucmVwbGFjZSgvXltcXD9cXCZdKy8sICcnKTtcblx0XHR9XG5cblx0XHRpZiAoc2V0dGluZ3Mub3ZlcnJpZGVfdmlld3BvcnQgPT09IGZhbHNlKSB7XG5cdFx0XHRFbnYub3ZlcnJpZGVWaWV3UG9ydCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIENhbGwgc2V0dXBcblx0XHRlZGl0b3JNYW5hZ2VyLmZpcmUoJ1NldHVwRWRpdG9yJywgc2VsZik7XG5cdFx0c2VsZi5leGVjQ2FsbGJhY2soJ3NldHVwJywgc2VsZik7XG5cblx0XHQvKipcblx0XHQgKiBEb20gcXVlcnkgaW5zdGFuY2Ugd2l0aCBkZWZhdWx0IHNjb3BlIHRvIHRoZSBlZGl0b3IgZG9jdW1lbnQgYW5kIGRlZmF1bHQgZWxlbWVudCBpcyB0aGUgYm9keSBvZiB0aGUgZWRpdG9yLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5ICRcblx0XHQgKiBAdHlwZSB0aW55bWNlLmRvbS5Eb21RdWVyeVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IuJCgncCcpLmNzcygnY29sb3InLCAncmVkJyk7XG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IuJCgpLmFwcGVuZCgnPHA+bmV3PC9wPicpO1xuXHRcdCAqL1xuXHRcdHNlbGYuJCA9IERvbVF1ZXJ5Lm92ZXJyaWRlRGVmYXVsdHMoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0OiBzZWxmLmlubGluZSA/IHNlbGYuZ2V0Qm9keSgpIDogc2VsZi5nZXREb2MoKSxcblx0XHRcdFx0ZWxlbWVudDogc2VsZi5nZXRCb2R5KClcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblxuXHRFZGl0b3IucHJvdG90eXBlID0ge1xuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGVkaXRvci9hZGRzIGl0IHRvIHRoZSBwYWdlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJcblx0XHQgKi9cblx0XHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3MsIGlkID0gc2VsZi5pZCwgc3VmZml4ID0gc2VsZi5zdWZmaXg7XG5cblx0XHRcdGZ1bmN0aW9uIHJlYWR5SGFuZGxlcigpIHtcblx0XHRcdFx0RE9NLnVuYmluZCh3aW5kb3csICdyZWFkeScsIHJlYWR5SGFuZGxlcik7XG5cdFx0XHRcdHNlbGYucmVuZGVyKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhZ2UgaXMgbm90IGxvYWRlZCB5ZXQsIHdhaXQgZm9yIGl0XG5cdFx0XHRpZiAoIUV2ZW50LmRvbUxvYWRlZCkge1xuXHRcdFx0XHRET00uYmluZCh3aW5kb3csICdyZWFkeScsIHJlYWR5SGFuZGxlcik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRWxlbWVudCBub3QgZm91bmQsIHRoZW4gc2tpcCBpbml0aWFsaXphdGlvblxuXHRcdFx0aWYgKCFzZWxmLmdldEVsZW1lbnQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5vIGVkaXRhYmxlIHN1cHBvcnQgb2xkIGlPUyB2ZXJzaW9ucyBldGNcblx0XHRcdGlmICghRW52LmNvbnRlbnRFZGl0YWJsZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhpZGUgdGFyZ2V0IGVsZW1lbnQgZWFybHkgdG8gcHJldmVudCBjb250ZW50IGZsYXNoaW5nXG5cdFx0XHRpZiAoIXNldHRpbmdzLmlubGluZSkge1xuXHRcdFx0XHRzZWxmLm9yZ1Zpc2liaWxpdHkgPSBzZWxmLmdldEVsZW1lbnQoKS5zdHlsZS52aXNpYmlsaXR5O1xuXHRcdFx0XHRzZWxmLmdldEVsZW1lbnQoKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmlubGluZSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBmb3JtID0gc2VsZi5nZXRFbGVtZW50KCkuZm9ybSB8fCBET00uZ2V0UGFyZW50KGlkLCAnZm9ybScpO1xuXHRcdFx0aWYgKGZvcm0pIHtcblx0XHRcdFx0c2VsZi5mb3JtRWxlbWVudCA9IGZvcm07XG5cblx0XHRcdFx0Ly8gQWRkIGhpZGRlbiBpbnB1dCBmb3Igbm9uIGlucHV0IGVsZW1lbnRzIGluc2lkZSBmb3JtIGVsZW1lbnRzXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5oaWRkZW5faW5wdXQgJiYgIS9URVhUQVJFQXxJTlBVVC9pLnRlc3Qoc2VsZi5nZXRFbGVtZW50KCkubm9kZU5hbWUpKSB7XG5cdFx0XHRcdFx0RE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGUoJ2lucHV0Jywge3R5cGU6ICdoaWRkZW4nLCBuYW1lOiBpZH0pLCBpZCk7XG5cdFx0XHRcdFx0c2VsZi5oYXNIaWRkZW5JbnB1dCA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQYXNzIHN1Ym1pdC9yZXNldCBmcm9tIGZvcm0gdG8gZWRpdG9yIGluc3RhbmNlXG5cdFx0XHRcdHNlbGYuZm9ybUV2ZW50RGVsZWdhdGUgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0c2VsZi5maXJlKGUudHlwZSwgZSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0RE9NLmJpbmQoZm9ybSwgJ3N1Ym1pdCByZXNldCcsIHNlbGYuZm9ybUV2ZW50RGVsZWdhdGUpO1xuXG5cdFx0XHRcdC8vIFJlc2V0IGNvbnRlbnRzIGluIGVkaXRvciB3aGVuIHRoZSBmb3JtIGlzIHJlc2V0XG5cdFx0XHRcdHNlbGYub24oJ3Jlc2V0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5zZXRDb250ZW50KHNlbGYuc3RhcnRDb250ZW50LCB7Zm9ybWF0OiAncmF3J30pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyBDaGVjayBwYWdlIHVzZXMgaWQ9XCJzdWJtaXRcIiBvciBuYW1lPVwic3VibWl0XCIgZm9yIGl0J3Mgc3VibWl0IGJ1dHRvblxuXHRcdFx0XHRpZiAoc2V0dGluZ3Muc3VibWl0X3BhdGNoICYmICFmb3JtLnN1Ym1pdC5ub2RlVHlwZSAmJiAhZm9ybS5zdWJtaXQubGVuZ3RoICYmICFmb3JtLl9tY2VPbGRTdWJtaXQpIHtcblx0XHRcdFx0XHRmb3JtLl9tY2VPbGRTdWJtaXQgPSBmb3JtLnN1Ym1pdDtcblx0XHRcdFx0XHRmb3JtLnN1Ym1pdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c2VsZi5lZGl0b3JNYW5hZ2VyLnRyaWdnZXJTYXZlKCk7XG5cdFx0XHRcdFx0XHRzZWxmLnNldERpcnR5KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGZvcm0uX21jZU9sZFN1Ym1pdChmb3JtKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogV2luZG93IG1hbmFnZXIgcmVmZXJlbmNlLCB1c2UgdGhpcyB0byBvcGVuIG5ldyB3aW5kb3dzIGFuZCBkaWFsb2dzLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcm9wZXJ0eSB3aW5kb3dNYW5hZ2VyXG5cdFx0XHQgKiBAdHlwZSB0aW55bWNlLldpbmRvd01hbmFnZXJcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiAvLyBTaG93cyBhbiBhbGVydCBtZXNzYWdlXG5cdFx0XHQgKiB0aW55bWNlLmFjdGl2ZUVkaXRvci53aW5kb3dNYW5hZ2VyLmFsZXJ0KCdIZWxsbyB3b3JsZCEnKTtcblx0XHRcdCAqXG5cdFx0XHQgKiAvLyBPcGVucyBhIG5ldyBkaWFsb2cgd2l0aCB0aGUgZmlsZS5odG0gZmlsZSBhbmQgdGhlIHNpemUgMzIweDI0MFxuXHRcdFx0ICogLy8gSXQgYWxzbyBhZGRzIGEgY3VzdG9tIHBhcmFtZXRlciB0aGlzIGNhbiBiZSByZXRyaWV2ZWQgYnkgdXNpbmcgdGlueU1DRVBvcHVwLmdldFdpbmRvd0FyZyBpbnNpZGUgdGhlIGRpYWxvZy5cblx0XHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLndpbmRvd01hbmFnZXIub3Blbih7XG5cdFx0XHQgKiAgICB1cmw6ICdmaWxlLmh0bScsXG5cdFx0XHQgKiAgICB3aWR0aDogMzIwLFxuXHRcdFx0ICogICAgaGVpZ2h0OiAyNDBcblx0XHRcdCAqIH0sIHtcblx0XHRcdCAqICAgIGN1c3RvbV9wYXJhbTogMVxuXHRcdFx0ICogfSk7XG5cdFx0XHQgKi9cblx0XHRcdHNlbGYud2luZG93TWFuYWdlciA9IG5ldyBXaW5kb3dNYW5hZ2VyKHNlbGYpO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIE5vdGlmaWNhdGlvbiBtYW5hZ2VyIHJlZmVyZW5jZSwgdXNlIHRoaXMgdG8gb3BlbiBuZXcgd2luZG93cyBhbmQgZGlhbG9ncy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJvcGVydHkgbm90aWZpY2F0aW9uTWFuYWdlclxuXHRcdFx0ICogQHR5cGUgdGlueW1jZS5Ob3RpZmljYXRpb25NYW5hZ2VyXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogLy8gU2hvd3MgYSBub3RpZmljYXRpb24gaW5mbyBtZXNzYWdlLlxuXHRcdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iubm90aWZpY2F0aW9uTWFuYWdlci5vcGVuKHt0ZXh0OiAnSGVsbG8gd29ybGQhJywgdHlwZTogJ2luZm8nfSk7XG5cdFx0XHQgKi9cblx0XHRcdHNlbGYubm90aWZpY2F0aW9uTWFuYWdlciA9IG5ldyBOb3RpZmljYXRpb25NYW5hZ2VyKHNlbGYpO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MuZW5jb2RpbmcgPT0gJ3htbCcpIHtcblx0XHRcdFx0c2VsZi5vbignR2V0Q29udGVudCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRpZiAoZS5zYXZlKSB7XG5cdFx0XHRcdFx0XHRlLmNvbnRlbnQgPSBET00uZW5jb2RlKGUuY29udGVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLmFkZF9mb3JtX3N1Ym1pdF90cmlnZ2VyKSB7XG5cdFx0XHRcdHNlbGYub24oJ3N1Ym1pdCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmIChzZWxmLmluaXRpYWxpemVkKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnNhdmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3MuYWRkX3VubG9hZF90cmlnZ2VyKSB7XG5cdFx0XHRcdHNlbGYuX2JlZm9yZVVubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmIChzZWxmLmluaXRpYWxpemVkICYmICFzZWxmLmRlc3Ryb3llZCAmJiAhc2VsZi5pc0hpZGRlbigpKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnNhdmUoe2Zvcm1hdDogJ3JhdycsIG5vX2V2ZW50czogdHJ1ZSwgc2V0X2RpcnR5OiBmYWxzZX0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRzZWxmLmVkaXRvck1hbmFnZXIub24oJ0JlZm9yZVVubG9hZCcsIHNlbGYuX2JlZm9yZVVubG9hZCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvYWQgc2NyaXB0c1xuXHRcdFx0ZnVuY3Rpb24gbG9hZFNjcmlwdHMoKSB7XG5cdFx0XHRcdHZhciBzY3JpcHRMb2FkZXIgPSBTY3JpcHRMb2FkZXIuU2NyaXB0TG9hZGVyO1xuXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5sYW5ndWFnZSAmJiBzZXR0aW5ncy5sYW5ndWFnZSAhPSAnZW4nICYmICFzZXR0aW5ncy5sYW5ndWFnZV91cmwpIHtcblx0XHRcdFx0XHRzZXR0aW5ncy5sYW5ndWFnZV91cmwgPSBzZWxmLmVkaXRvck1hbmFnZXIuYmFzZVVSTCArICcvbGFuZ3MvJyArIHNldHRpbmdzLmxhbmd1YWdlICsgJy5qcyc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc2V0dGluZ3MubGFuZ3VhZ2VfdXJsKSB7XG5cdFx0XHRcdFx0c2NyaXB0TG9hZGVyLmFkZChzZXR0aW5ncy5sYW5ndWFnZV91cmwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNldHRpbmdzLnRoZW1lICYmIHR5cGVvZiBzZXR0aW5ncy50aGVtZSAhPSBcImZ1bmN0aW9uXCIgJiZcblx0XHRcdFx0XHRzZXR0aW5ncy50aGVtZS5jaGFyQXQoMCkgIT0gJy0nICYmICFUaGVtZU1hbmFnZXIudXJsc1tzZXR0aW5ncy50aGVtZV0pIHtcblx0XHRcdFx0XHR2YXIgdGhlbWVVcmwgPSBzZXR0aW5ncy50aGVtZV91cmw7XG5cblx0XHRcdFx0XHRpZiAodGhlbWVVcmwpIHtcblx0XHRcdFx0XHRcdHRoZW1lVXJsID0gc2VsZi5kb2N1bWVudEJhc2VVUkkudG9BYnNvbHV0ZSh0aGVtZVVybCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoZW1lVXJsID0gJ3RoZW1lcy8nICsgc2V0dGluZ3MudGhlbWUgKyAnL3RoZW1lJyArIHN1ZmZpeCArICcuanMnO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFRoZW1lTWFuYWdlci5sb2FkKHNldHRpbmdzLnRoZW1lLCB0aGVtZVVybCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoVG9vbHMuaXNBcnJheShzZXR0aW5ncy5wbHVnaW5zKSkge1xuXHRcdFx0XHRcdHNldHRpbmdzLnBsdWdpbnMgPSBzZXR0aW5ncy5wbHVnaW5zLmpvaW4oJyAnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVhY2goc2V0dGluZ3MuZXh0ZXJuYWxfcGx1Z2lucywgZnVuY3Rpb24odXJsLCBuYW1lKSB7XG5cdFx0XHRcdFx0UGx1Z2luTWFuYWdlci5sb2FkKG5hbWUsIHVybCk7XG5cdFx0XHRcdFx0c2V0dGluZ3MucGx1Z2lucyArPSAnICcgKyBuYW1lO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRlYWNoKHNldHRpbmdzLnBsdWdpbnMuc3BsaXQoL1sgLF0vKSwgZnVuY3Rpb24ocGx1Z2luKSB7XG5cdFx0XHRcdFx0cGx1Z2luID0gdHJpbShwbHVnaW4pO1xuXG5cdFx0XHRcdFx0aWYgKHBsdWdpbiAmJiAhUGx1Z2luTWFuYWdlci51cmxzW3BsdWdpbl0pIHtcblx0XHRcdFx0XHRcdGlmIChwbHVnaW4uY2hhckF0KDApID09ICctJykge1xuXHRcdFx0XHRcdFx0XHRwbHVnaW4gPSBwbHVnaW4uc3Vic3RyKDEsIHBsdWdpbi5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0XHRcdHZhciBkZXBlbmRlbmNpZXMgPSBQbHVnaW5NYW5hZ2VyLmRlcGVuZGVuY2llcyhwbHVnaW4pO1xuXG5cdFx0XHRcdFx0XHRcdGVhY2goZGVwZW5kZW5jaWVzLCBmdW5jdGlvbihkZXApIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZGVmYXVsdFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJlZml4OiAncGx1Z2lucy8nLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2U6IGRlcCxcblx0XHRcdFx0XHRcdFx0XHRcdHN1ZmZpeDogJy9wbHVnaW4nICsgc3VmZml4ICsgJy5qcydcblx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0ZGVwID0gUGx1Z2luTWFuYWdlci5jcmVhdGVVcmwoZGVmYXVsdFNldHRpbmdzLCBkZXApO1xuXHRcdFx0XHRcdFx0XHRcdFBsdWdpbk1hbmFnZXIubG9hZChkZXAucmVzb3VyY2UsIGRlcCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0UGx1Z2luTWFuYWdlci5sb2FkKHBsdWdpbiwge1xuXHRcdFx0XHRcdFx0XHRcdHByZWZpeDogJ3BsdWdpbnMvJyxcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZTogcGx1Z2luLFxuXHRcdFx0XHRcdFx0XHRcdHN1ZmZpeDogJy9wbHVnaW4nICsgc3VmZml4ICsgJy5qcydcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzY3JpcHRMb2FkZXIubG9hZFF1ZXVlKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICghc2VsZi5yZW1vdmVkKSB7XG5cdFx0XHRcdFx0XHRzZWxmLmluaXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIHNlbGYsIGZ1bmN0aW9uICh1cmxzKSB7XG5cdFx0XHRcdFx0RXJyb3JSZXBvcnRlci5wbHVnaW5Mb2FkRXJyb3Ioc2VsZiwgdXJsc1swXSk7XG5cblx0XHRcdFx0XHRpZiAoIXNlbGYucmVtb3ZlZCkge1xuXHRcdFx0XHRcdFx0c2VsZi5pbml0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5lZGl0b3JNYW5hZ2VyLmFkZChzZWxmKTtcblx0XHRcdGxvYWRTY3JpcHRzKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEluaXRpYWxpemVzIHRoZSBlZGl0b3IgdGhpcyB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW5cblx0XHQgKiBhbGwgcGx1Z2lucy90aGVtZXMgYW5kIGxhbmd1YWdlIHBhY2tzIGFyZSBsb2FkZWQgYnkgdGhlIHJlbmRlcmVkIG1ldGhvZC5cblx0XHQgKiBUaGlzIG1ldGhvZCB3aWxsIHNldHVwIHRoZSBpZnJhbWUgYW5kIGNyZWF0ZSB0aGUgdGhlbWUgYW5kIHBsdWdpbiBpbnN0YW5jZXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGluaXRcblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzLCBlbG0gPSBzZWxmLmdldEVsZW1lbnQoKTtcblx0XHRcdHZhciB3LCBoLCBtaW5IZWlnaHQsIG4sIG8sIFRoZW1lLCB1cmwsIGJvZHlJZCwgYm9keUNsYXNzLCByZSwgaSwgaW5pdGlhbGl6ZWRQbHVnaW5zID0gW107XG5cblx0XHRcdHNlbGYucnRsID0gc2V0dGluZ3MucnRsX3VpIHx8IHNlbGYuZWRpdG9yTWFuYWdlci5pMThuLnJ0bDtcblx0XHRcdHNlbGYuZWRpdG9yTWFuYWdlci5pMThuLnNldENvZGUoc2V0dGluZ3MubGFuZ3VhZ2UpO1xuXHRcdFx0c2V0dGluZ3MuYXJpYV9sYWJlbCA9IHNldHRpbmdzLmFyaWFfbGFiZWwgfHwgRE9NLmdldEF0dHJpYihlbG0sICdhcmlhLWxhYmVsJywgc2VsZi5nZXRMYW5nKCdhcmlhLnJpY2hfdGV4dF9hcmVhJykpO1xuXG5cdFx0XHRzZWxmLmZpcmUoJ1NjcmlwdHNMb2FkZWQnKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZWZlcmVuY2UgdG8gdGhlIHRoZW1lIGluc3RhbmNlIHRoYXQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFVJLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcm9wZXJ0eSB0aGVtZVxuXHRcdFx0ICogQHR5cGUgdGlueW1jZS5UaGVtZVxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIC8vIEV4ZWN1dGVzIGEgbWV0aG9kIG9uIHRoZSB0aGVtZSBkaXJlY3RseVxuXHRcdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3IudGhlbWUuc29tZU1ldGhvZCgpO1xuXHRcdFx0ICovXG5cdFx0XHRpZiAoc2V0dGluZ3MudGhlbWUpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBzZXR0aW5ncy50aGVtZSAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRzZXR0aW5ncy50aGVtZSA9IHNldHRpbmdzLnRoZW1lLnJlcGxhY2UoLy0vLCAnJyk7XG5cdFx0XHRcdFx0VGhlbWUgPSBUaGVtZU1hbmFnZXIuZ2V0KHNldHRpbmdzLnRoZW1lKTtcblx0XHRcdFx0XHRzZWxmLnRoZW1lID0gbmV3IFRoZW1lKHNlbGYsIFRoZW1lTWFuYWdlci51cmxzW3NldHRpbmdzLnRoZW1lXSk7XG5cblx0XHRcdFx0XHRpZiAoc2VsZi50aGVtZS5pbml0KSB7XG5cdFx0XHRcdFx0XHRzZWxmLnRoZW1lLmluaXQoc2VsZiwgVGhlbWVNYW5hZ2VyLnVybHNbc2V0dGluZ3MudGhlbWVdIHx8IHNlbGYuZG9jdW1lbnRCYXNlVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyksIHNlbGYuJCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGYudGhlbWUgPSBzZXR0aW5ncy50aGVtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBpbml0UGx1Z2luKHBsdWdpbikge1xuXHRcdFx0XHR2YXIgUGx1Z2luID0gUGx1Z2luTWFuYWdlci5nZXQocGx1Z2luKSwgcGx1Z2luVXJsLCBwbHVnaW5JbnN0YW5jZTtcblxuXHRcdFx0XHRwbHVnaW5VcmwgPSBQbHVnaW5NYW5hZ2VyLnVybHNbcGx1Z2luXSB8fCBzZWxmLmRvY3VtZW50QmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXHRcdFx0XHRwbHVnaW4gPSB0cmltKHBsdWdpbik7XG5cdFx0XHRcdGlmIChQbHVnaW4gJiYgaW5BcnJheShpbml0aWFsaXplZFBsdWdpbnMsIHBsdWdpbikgPT09IC0xKSB7XG5cdFx0XHRcdFx0ZWFjaChQbHVnaW5NYW5hZ2VyLmRlcGVuZGVuY2llcyhwbHVnaW4pLCBmdW5jdGlvbihkZXApIHtcblx0XHRcdFx0XHRcdGluaXRQbHVnaW4oZGVwKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChzZWxmLnBsdWdpbnNbcGx1Z2luXSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHBsdWdpbkluc3RhbmNlID0gbmV3IFBsdWdpbihzZWxmLCBwbHVnaW5VcmwsIHNlbGYuJCk7XG5cblx0XHRcdFx0XHRzZWxmLnBsdWdpbnNbcGx1Z2luXSA9IHBsdWdpbkluc3RhbmNlO1xuXG5cdFx0XHRcdFx0aWYgKHBsdWdpbkluc3RhbmNlLmluaXQpIHtcblx0XHRcdFx0XHRcdHBsdWdpbkluc3RhbmNlLmluaXQoc2VsZiwgcGx1Z2luVXJsKTtcblx0XHRcdFx0XHRcdGluaXRpYWxpemVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBhbGwgcGx1Z2luc1xuXHRcdFx0ZWFjaChzZXR0aW5ncy5wbHVnaW5zLnJlcGxhY2UoL1xcLS9nLCAnJykuc3BsaXQoL1sgLF0vKSwgaW5pdFBsdWdpbik7XG5cblx0XHRcdC8vIE1lYXN1cmUgYm94XG5cdFx0XHRpZiAoc2V0dGluZ3MucmVuZGVyX3VpICYmIHNlbGYudGhlbWUpIHtcblx0XHRcdFx0c2VsZi5vcmdEaXNwbGF5ID0gZWxtLnN0eWxlLmRpc3BsYXk7XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBzZXR0aW5ncy50aGVtZSAhPSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR3ID0gc2V0dGluZ3Mud2lkdGggfHwgZWxtLnN0eWxlLndpZHRoIHx8IGVsbS5vZmZzZXRXaWR0aDtcblx0XHRcdFx0XHRoID0gc2V0dGluZ3MuaGVpZ2h0IHx8IGVsbS5zdHlsZS5oZWlnaHQgfHwgZWxtLm9mZnNldEhlaWdodDtcblx0XHRcdFx0XHRtaW5IZWlnaHQgPSBzZXR0aW5ncy5taW5faGVpZ2h0IHx8IDEwMDtcblx0XHRcdFx0XHRyZSA9IC9eWzAtOVxcLl0rKHxweCkkL2k7XG5cblx0XHRcdFx0XHRpZiAocmUudGVzdCgnJyArIHcpKSB7XG5cdFx0XHRcdFx0XHR3ID0gTWF0aC5tYXgocGFyc2VJbnQodywgMTApLCAxMDApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZS50ZXN0KCcnICsgaCkpIHtcblx0XHRcdFx0XHRcdGggPSBNYXRoLm1heChwYXJzZUludChoLCAxMCksIG1pbkhlaWdodCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUmVuZGVyIFVJXG5cdFx0XHRcdFx0byA9IHNlbGYudGhlbWUucmVuZGVyVUkoe1xuXHRcdFx0XHRcdFx0dGFyZ2V0Tm9kZTogZWxtLFxuXHRcdFx0XHRcdFx0d2lkdGg6IHcsXG5cdFx0XHRcdFx0XHRoZWlnaHQ6IGgsXG5cdFx0XHRcdFx0XHRkZWx0YVdpZHRoOiBzZXR0aW5ncy5kZWx0YV93aWR0aCxcblx0XHRcdFx0XHRcdGRlbHRhSGVpZ2h0OiBzZXR0aW5ncy5kZWx0YV9oZWlnaHRcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIFJlc2l6ZSBlZGl0b3Jcblx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLmNvbnRlbnRfZWRpdGFibGUpIHtcblx0XHRcdFx0XHRcdGggPSAoby5pZnJhbWVIZWlnaHQgfHwgaCkgKyAodHlwZW9mIGggPT0gJ251bWJlcicgPyAoby5kZWx0YUhlaWdodCB8fCAwKSA6ICcnKTtcblx0XHRcdFx0XHRcdGlmIChoIDwgbWluSGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRcdGggPSBtaW5IZWlnaHQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG8gPSBzZXR0aW5ncy50aGVtZShzZWxmLCBlbG0pO1xuXG5cdFx0XHRcdFx0aWYgKG8uZWRpdG9yQ29udGFpbmVyLm5vZGVUeXBlKSB7XG5cdFx0XHRcdFx0XHRvLmVkaXRvckNvbnRhaW5lci5pZCA9IG8uZWRpdG9yQ29udGFpbmVyLmlkIHx8IHNlbGYuaWQgKyBcIl9wYXJlbnRcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoby5pZnJhbWVDb250YWluZXIubm9kZVR5cGUpIHtcblx0XHRcdFx0XHRcdG8uaWZyYW1lQ29udGFpbmVyLmlkID0gby5pZnJhbWVDb250YWluZXIuaWQgfHwgc2VsZi5pZCArIFwiX2lmcmFtZWNvbnRhaW5lclwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFVzZSBzcGVjaWZpZWQgaWZyYW1lIGhlaWdodCBvciB0aGUgdGFyZ2V0cyBvZmZzZXRIZWlnaHRcblx0XHRcdFx0XHRoID0gby5pZnJhbWVIZWlnaHQgfHwgZWxtLm9mZnNldEhlaWdodDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYuZWRpdG9yQ29udGFpbmVyID0gby5lZGl0b3JDb250YWluZXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvYWQgc3BlY2lmaWVkIGNvbnRlbnQgQ1NTIGxhc3Rcblx0XHRcdGlmIChzZXR0aW5ncy5jb250ZW50X2Nzcykge1xuXHRcdFx0XHRlYWNoKGV4cGxvZGUoc2V0dGluZ3MuY29udGVudF9jc3MpLCBmdW5jdGlvbih1KSB7XG5cdFx0XHRcdFx0c2VsZi5jb250ZW50Q1NTLnB1c2goc2VsZi5kb2N1bWVudEJhc2VVUkkudG9BYnNvbHV0ZSh1KSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb2FkIHNwZWNpZmllZCBjb250ZW50IENTUyBsYXN0XG5cdFx0XHRpZiAoc2V0dGluZ3MuY29udGVudF9zdHlsZSkge1xuXHRcdFx0XHRzZWxmLmNvbnRlbnRTdHlsZXMucHVzaChzZXR0aW5ncy5jb250ZW50X3N0eWxlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udGVudCBlZGl0YWJsZSBtb2RlIGVuZHMgaGVyZVxuXHRcdFx0aWYgKHNldHRpbmdzLmNvbnRlbnRfZWRpdGFibGUpIHtcblx0XHRcdFx0ZWxtID0gbiA9IG8gPSBudWxsOyAvLyBGaXggSUUgbGVha1xuXHRcdFx0XHRyZXR1cm4gc2VsZi5pbml0Q29udGVudEJvZHkoKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5pZnJhbWVIVE1MID0gc2V0dGluZ3MuZG9jdHlwZSArICc8aHRtbD48aGVhZD4nO1xuXG5cdFx0XHQvLyBXZSBvbmx5IG5lZWQgdG8gb3ZlcnJpZGUgcGF0aHMgaWYgd2UgaGF2ZSB0b1xuXHRcdFx0Ly8gSUUgaGFzIGEgYnVnIHdoZXJlIGl0IHJlbW92ZSBzaXRlIGFic29sdXRlIHVybHMgdG8gcmVsYXRpdmUgb25lcyBpZiB0aGlzIGlzIHNwZWNpZmllZFxuXHRcdFx0aWYgKHNldHRpbmdzLmRvY3VtZW50X2Jhc2VfdXJsICE9IHNlbGYuZG9jdW1lbnRCYXNlVXJsKSB7XG5cdFx0XHRcdHNlbGYuaWZyYW1lSFRNTCArPSAnPGJhc2UgaHJlZj1cIicgKyBzZWxmLmRvY3VtZW50QmFzZVVSSS5nZXRVUkkoKSArICdcIiAvPic7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgY2FyZXRzIGJlaGluZCBpbWFnZXMgc2V0dGluZyBpZTdfY29tcGF0IHdvdWxkIGZvcmNlIElFOCsgdG8gcnVuIGluIElFNyBjb21wYXQgbW9kZS5cblx0XHRcdGlmICghRW52LmNhcmV0QWZ0ZXIgJiYgc2V0dGluZ3MuaWU3X2NvbXBhdCkge1xuXHRcdFx0XHRzZWxmLmlmcmFtZUhUTUwgKz0gJzxtZXRhIGh0dHAtZXF1aXY9XCJYLVVBLUNvbXBhdGlibGVcIiBjb250ZW50PVwiSUU9N1wiIC8+Jztcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5pZnJhbWVIVE1MICs9ICc8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiIC8+JztcblxuXHRcdFx0Ly8gTG9hZCB0aGUgQ1NTIGJ5IGluamVjdGluZyB0aGVtIGludG8gdGhlIEhUTUwgdGhpcyB3aWxsIHJlZHVjZSBcImZsaWNrZXJcIlxuXHRcdFx0Ly8gSG93ZXZlciB3ZSBjYW4ndCBkbyB0aGF0IG9uIENocm9tZSBzaW5jZSAjIHdpbGwgc2Nyb2xsIHRvIHRoZSBlZGl0b3IgZm9yIHNvbWUgb2RkIHJlYXNvbiBzZWUgIzI0Mjdcblx0XHRcdGlmICghLyMkLy50ZXN0KGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpKSB7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBzZWxmLmNvbnRlbnRDU1MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgY3NzVXJsID0gc2VsZi5jb250ZW50Q1NTW2ldO1xuXHRcdFx0XHRcdHNlbGYuaWZyYW1lSFRNTCArPSAoXG5cdFx0XHRcdFx0XHQnPGxpbmsgdHlwZT1cInRleHQvY3NzXCIgJyArXG5cdFx0XHRcdFx0XHRcdCdyZWw9XCJzdHlsZXNoZWV0XCIgJyArXG5cdFx0XHRcdFx0XHRcdCdocmVmPVwiJyArIFRvb2xzLl9hZGRDYWNoZVN1ZmZpeChjc3NVcmwpICsgJ1wiIC8+J1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0c2VsZi5sb2FkZWRDU1NbY3NzVXJsXSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ym9keUlkID0gc2V0dGluZ3MuYm9keV9pZCB8fCAndGlueW1jZSc7XG5cdFx0XHRpZiAoYm9keUlkLmluZGV4T2YoJz0nKSAhPSAtMSkge1xuXHRcdFx0XHRib2R5SWQgPSBzZWxmLmdldFBhcmFtKCdib2R5X2lkJywgJycsICdoYXNoJyk7XG5cdFx0XHRcdGJvZHlJZCA9IGJvZHlJZFtzZWxmLmlkXSB8fCBib2R5SWQ7XG5cdFx0XHR9XG5cblx0XHRcdGJvZHlDbGFzcyA9IHNldHRpbmdzLmJvZHlfY2xhc3MgfHwgJyc7XG5cdFx0XHRpZiAoYm9keUNsYXNzLmluZGV4T2YoJz0nKSAhPSAtMSkge1xuXHRcdFx0XHRib2R5Q2xhc3MgPSBzZWxmLmdldFBhcmFtKCdib2R5X2NsYXNzJywgJycsICdoYXNoJyk7XG5cdFx0XHRcdGJvZHlDbGFzcyA9IGJvZHlDbGFzc1tzZWxmLmlkXSB8fCAnJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLmNvbnRlbnRfc2VjdXJpdHlfcG9saWN5KSB7XG5cdFx0XHRcdHNlbGYuaWZyYW1lSFRNTCArPSAnPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCIgY29udGVudD1cIicgKyBzZXR0aW5ncy5jb250ZW50X3NlY3VyaXR5X3BvbGljeSArICdcIiAvPic7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuaWZyYW1lSFRNTCArPSAnPC9oZWFkPjxib2R5IGlkPVwiJyArIGJvZHlJZCArXG5cdFx0XHRcdCdcIiBjbGFzcz1cIm1jZS1jb250ZW50LWJvZHkgJyArIGJvZHlDbGFzcyArXG5cdFx0XHRcdCdcIiBkYXRhLWlkPVwiJyArIHNlbGYuaWQgKyAnXCI+PGJyPjwvYm9keT48L2h0bWw+JztcblxuXHRcdFx0Lyplc2xpbnQgbm8tc2NyaXB0LXVybDowICovXG5cdFx0XHR2YXIgZG9tYWluUmVsYXhVcmwgPSAnamF2YXNjcmlwdDooZnVuY3Rpb24oKXsnICtcblx0XHRcdFx0J2RvY3VtZW50Lm9wZW4oKTtkb2N1bWVudC5kb21haW49XCInICsgZG9jdW1lbnQuZG9tYWluICsgJ1wiOycgK1xuXHRcdFx0XHQndmFyIGVkID0gd2luZG93LnBhcmVudC50aW55bWNlLmdldChcIicgKyBzZWxmLmlkICsgJ1wiKTtkb2N1bWVudC53cml0ZShlZC5pZnJhbWVIVE1MKTsnICtcblx0XHRcdFx0J2RvY3VtZW50LmNsb3NlKCk7ZWQuaW5pdENvbnRlbnRCb2R5KHRydWUpO30pKCknO1xuXG5cdFx0XHQvLyBEb21haW4gcmVsYXhpbmcgaXMgcmVxdWlyZWQgc2luY2UgdGhlIHVzZXIgaGFzIG1lc3NlZCBhcm91bmQgd2l0aCBkb2N1bWVudC5kb21haW5cblx0XHRcdGlmIChkb2N1bWVudC5kb21haW4gIT0gbG9jYXRpb24uaG9zdG5hbWUpIHtcblx0XHRcdFx0Ly8gRWRnZSBzZWVtcyB0byBiZSBhYmxlIHRvIGhhbmRsZSBkb21haW4gcmVsYXhpbmdcblx0XHRcdFx0aWYgKEVudi5pZSAmJiBFbnYuaWUgPCAxMikge1xuXHRcdFx0XHRcdHVybCA9IGRvbWFpblJlbGF4VXJsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBpZnJhbWVcblx0XHRcdC8vIFRPRE86IEFDQyBhZGQgdGhlIGFwcHJvcHJpYXRlIGRlc2NyaXB0aW9uIG9uIHRoaXMuXG5cdFx0XHR2YXIgaWZyID0gRE9NLmNyZWF0ZSgnaWZyYW1lJywge1xuXHRcdFx0XHRpZDogc2VsZi5pZCArIFwiX2lmclwiLFxuXHRcdFx0XHQvL3NyYzogdXJsIHx8ICdqYXZhc2NyaXB0OlwiXCInLCAvLyBXb3JrYXJvdW5kIGZvciBIVFRQUyB3YXJuaW5nIGluIElFNi83XG5cdFx0XHRcdGZyYW1lQm9yZGVyOiAnMCcsXG5cdFx0XHRcdGFsbG93VHJhbnNwYXJlbmN5OiBcInRydWVcIixcblx0XHRcdFx0dGl0bGU6IHNlbGYuZWRpdG9yTWFuYWdlci50cmFuc2xhdGUoXG5cdFx0XHRcdFx0XHRcIlJpY2ggVGV4dCBBcmVhLiBQcmVzcyBBTFQtRjkgZm9yIG1lbnUuIFwiICtcblx0XHRcdFx0XHRcdFwiUHJlc3MgQUxULUYxMCBmb3IgdG9vbGJhci4gUHJlc3MgQUxULTAgZm9yIGhlbHBcIlxuXHRcdFx0XHQpLFxuXHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdHdpZHRoOiAnMTAwJScsXG5cdFx0XHRcdFx0aGVpZ2h0OiBoLFxuXHRcdFx0XHRcdGRpc3BsYXk6ICdibG9jaycgLy8gSW1wb3J0YW50IGZvciBHZWNrbyB0byByZW5kZXIgdGhlIGlmcmFtZSBjb3JyZWN0bHlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWZyLm9ubG9hZCA9IG51bGw7XG5cdFx0XHRcdHNlbGYuZmlyZShcImxvYWRcIik7XG5cdFx0XHR9O1xuXG5cdFx0XHRET00uc2V0QXR0cmliKGlmciwgXCJzcmNcIiwgdXJsIHx8ICdqYXZhc2NyaXB0OlwiXCInKTtcblxuXHRcdFx0c2VsZi5jb250ZW50QXJlYUNvbnRhaW5lciA9IG8uaWZyYW1lQ29udGFpbmVyO1xuXHRcdFx0c2VsZi5pZnJhbWVFbGVtZW50ID0gaWZyO1xuXG5cdFx0XHRuID0gRE9NLmFkZChvLmlmcmFtZUNvbnRhaW5lciwgaWZyKTtcblxuXHRcdFx0Ly8gVHJ5IGFjY2Vzc2luZyB0aGUgZG9jdW1lbnQgdGhpcyB3aWxsIGZhaWwgb24gSUUgd2hlbiBkb2N1bWVudC5kb21haW4gaXMgc2V0IHRvIHRoZSBzYW1lIGFzIGxvY2F0aW9uLmhvc3RuYW1lXG5cdFx0XHQvLyBUaGVuIHdlIGhhdmUgdG8gZm9yY2UgZG9tYWluIHJlbGF4aW5nIHVzaW5nIHRoZSBkb21haW5SZWxheFVybCBhcHByb2FjaCB2ZXJ5IHVnbHkhIVxuXHRcdFx0aWYgKGllKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c2VsZi5nZXREb2MoKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdG4uc3JjID0gdXJsID0gZG9tYWluUmVsYXhVcmw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG8uZWRpdG9yQ29udGFpbmVyKSB7XG5cdFx0XHRcdERPTS5nZXQoby5lZGl0b3JDb250YWluZXIpLnN0eWxlLmRpc3BsYXkgPSBzZWxmLm9yZ0Rpc3BsYXk7XG5cdFx0XHRcdHNlbGYuaGlkZGVuID0gRE9NLmlzSGlkZGVuKG8uZWRpdG9yQ29udGFpbmVyKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5nZXRFbGVtZW50KCkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdERPTS5zZXRBdHRyaWIoc2VsZi5pZCwgJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG5cblx0XHRcdGlmICghdXJsKSB7XG5cdFx0XHRcdHNlbGYuaW5pdENvbnRlbnRCb2R5KCk7XG5cdFx0XHR9XG5cblx0XHRcdGVsbSA9IG4gPSBvID0gbnVsbDsgLy8gQ2xlYW51cFxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUaGlzIG1ldGhvZCBnZXQgY2FsbGVkIGJ5IHRoZSBpbml0IG1ldGhvZCBvbmNlIHRoZSBpZnJhbWUgaXMgbG9hZGVkLlxuXHRcdCAqIEl0IHdpbGwgZmlsbCB0aGUgaWZyYW1lIHdpdGggY29udGVudHMsIHNldHMgdXAgRE9NIGFuZCBzZWxlY3Rpb24gb2JqZWN0cyBmb3IgdGhlIGlmcmFtZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaW5pdENvbnRlbnRCb2R5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRpbml0Q29udGVudEJvZHk6IGZ1bmN0aW9uKHNraXBXcml0ZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3MsIHRhcmdldEVsbSA9IHNlbGYuZ2V0RWxlbWVudCgpLCBkb2MgPSBzZWxmLmdldERvYygpLCBib2R5LCBjb250ZW50Q3NzVGV4dDtcblxuXHRcdFx0Ly8gUmVzdG9yZSB2aXNpYmlsaXR5IG9uIHRhcmdldCBlbGVtZW50XG5cdFx0XHRpZiAoIXNldHRpbmdzLmlubGluZSkge1xuXHRcdFx0XHRzZWxmLmdldEVsZW1lbnQoKS5zdHlsZS52aXNpYmlsaXR5ID0gc2VsZi5vcmdWaXNpYmlsaXR5O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXR1cCBpZnJhbWUgYm9keVxuXHRcdFx0aWYgKCFza2lwV3JpdGUgJiYgIXNldHRpbmdzLmNvbnRlbnRfZWRpdGFibGUpIHtcblx0XHRcdFx0ZG9jLm9wZW4oKTtcblx0XHRcdFx0ZG9jLndyaXRlKHNlbGYuaWZyYW1lSFRNTCk7XG5cdFx0XHRcdGRvYy5jbG9zZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3MuY29udGVudF9lZGl0YWJsZSkge1xuXHRcdFx0XHRzZWxmLm9uKCdyZW1vdmUnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgYm9keUVsID0gdGhpcy5nZXRCb2R5KCk7XG5cblx0XHRcdFx0XHRET00ucmVtb3ZlQ2xhc3MoYm9keUVsLCAnbWNlLWNvbnRlbnQtYm9keScpO1xuXHRcdFx0XHRcdERPTS5yZW1vdmVDbGFzcyhib2R5RWwsICdtY2UtZWRpdC1mb2N1cycpO1xuXHRcdFx0XHRcdERPTS5zZXRBdHRyaWIoYm9keUVsLCAnY29udGVudEVkaXRhYmxlJywgbnVsbCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdERPTS5hZGRDbGFzcyh0YXJnZXRFbG0sICdtY2UtY29udGVudC1ib2R5Jyk7XG5cdFx0XHRcdHNlbGYuY29udGVudERvY3VtZW50ID0gZG9jID0gc2V0dGluZ3MuY29udGVudF9kb2N1bWVudCB8fCBkb2N1bWVudDtcblx0XHRcdFx0c2VsZi5jb250ZW50V2luZG93ID0gc2V0dGluZ3MuY29udGVudF93aW5kb3cgfHwgd2luZG93O1xuXHRcdFx0XHRzZWxmLmJvZHlFbGVtZW50ID0gdGFyZ2V0RWxtO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbGVhayBpbiBJRVxuXHRcdFx0XHRzZXR0aW5ncy5jb250ZW50X2RvY3VtZW50ID0gc2V0dGluZ3MuY29udGVudF93aW5kb3cgPSBudWxsO1xuXG5cdFx0XHRcdC8vIFRPRE86IEZpeCB0aGlzXG5cdFx0XHRcdHNldHRpbmdzLnJvb3RfbmFtZSA9IHRhcmdldEVsbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJdCB3aWxsIG5vdCBzdGVhbCBmb2N1cyB3aGlsZSBzZXR0aW5nIGNvbnRlbnRFZGl0YWJsZVxuXHRcdFx0Ym9keSA9IHNlbGYuZ2V0Qm9keSgpO1xuXHRcdFx0Ym9keS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRzZWxmLnJlYWRvbmx5ID0gc2V0dGluZ3MucmVhZG9ubHk7XG5cblx0XHRcdGlmICghc2VsZi5yZWFkb25seSkge1xuXHRcdFx0XHRpZiAoc2VsZi5pbmxpbmUgJiYgRE9NLmdldFN0eWxlKGJvZHksICdwb3NpdGlvbicsIHRydWUpID09ICdzdGF0aWMnKSB7XG5cdFx0XHRcdFx0Ym9keS5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRib2R5LmNvbnRlbnRFZGl0YWJsZSA9IHNlbGYuZ2V0UGFyYW0oJ2NvbnRlbnRfZWRpdGFibGVfc3RhdGUnLCB0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0Ym9keS5kaXNhYmxlZCA9IGZhbHNlO1xuXG5cdFx0XHRzZWxmLmVkaXRvclVwbG9hZCA9IG5ldyBFZGl0b3JVcGxvYWQoc2VsZik7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogU2NoZW1hIGluc3RhbmNlLCBlbmFibGVzIHlvdSB0byB2YWxpZGF0ZSBlbGVtZW50cyBhbmQgaXRzIGNoaWxkcmVuLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcm9wZXJ0eSBzY2hlbWFcblx0XHRcdCAqIEB0eXBlIHRpbnltY2UuaHRtbC5TY2hlbWFcblx0XHRcdCAqL1xuXHRcdFx0c2VsZi5zY2hlbWEgPSBuZXcgU2NoZW1hKHNldHRpbmdzKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBET00gaW5zdGFuY2UgZm9yIHRoZSBlZGl0b3IuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByb3BlcnR5IGRvbVxuXHRcdFx0ICogQHR5cGUgdGlueW1jZS5kb20uRE9NVXRpbHNcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiAvLyBBZGRzIGEgY2xhc3MgdG8gYWxsIHBhcmFncmFwaHMgd2l0aGluIHRoZSBlZGl0b3Jcblx0XHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmRvbS5hZGRDbGFzcyh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2VsZWN0KCdwJyksICdzb21lY2xhc3MnKTtcblx0XHRcdCAqL1xuXHRcdFx0c2VsZi5kb20gPSBuZXcgRE9NVXRpbHMoZG9jLCB7XG5cdFx0XHRcdGtlZXBfdmFsdWVzOiB0cnVlLFxuXHRcdFx0XHR1cmxfY29udmVydGVyOiBzZWxmLmNvbnZlcnRVUkwsXG5cdFx0XHRcdHVybF9jb252ZXJ0ZXJfc2NvcGU6IHNlbGYsXG5cdFx0XHRcdGhleF9jb2xvcnM6IHNldHRpbmdzLmZvcmNlX2hleF9zdHlsZV9jb2xvcnMsXG5cdFx0XHRcdGNsYXNzX2ZpbHRlcjogc2V0dGluZ3MuY2xhc3NfZmlsdGVyLFxuXHRcdFx0XHR1cGRhdGVfc3R5bGVzOiB0cnVlLFxuXHRcdFx0XHRyb290X2VsZW1lbnQ6IHNlbGYuaW5saW5lID8gc2VsZi5nZXRCb2R5KCkgOiBudWxsLFxuXHRcdFx0XHRjb2xsZWN0OiBzZXR0aW5ncy5jb250ZW50X2VkaXRhYmxlLFxuXHRcdFx0XHRzY2hlbWE6IHNlbGYuc2NoZW1hLFxuXHRcdFx0XHRvblNldEF0dHJpYjogZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdHNlbGYuZmlyZSgnU2V0QXR0cmliJywgZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIEhUTUwgcGFyc2VyIHdpbGwgYmUgdXNlZCB3aGVuIGNvbnRlbnRzIGlzIGluc2VydGVkIGludG8gdGhlIGVkaXRvci5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJvcGVydHkgcGFyc2VyXG5cdFx0XHQgKiBAdHlwZSB0aW55bWNlLmh0bWwuRG9tUGFyc2VyXG5cdFx0XHQgKi9cblx0XHRcdHNlbGYucGFyc2VyID0gbmV3IERvbVBhcnNlcihzZXR0aW5ncywgc2VsZi5zY2hlbWEpO1xuXG5cdFx0XHQvLyBDb252ZXJ0IHNyYyBhbmQgaHJlZiBpbnRvIGRhdGEtbWNlLXNyYywgZGF0YS1tY2UtaHJlZiBhbmQgZGF0YS1tY2Utc3R5bGVcblx0XHRcdHNlbGYucGFyc2VyLmFkZEF0dHJpYnV0ZUZpbHRlcignc3JjLGhyZWYsc3R5bGUsdGFiaW5kZXgnLCBmdW5jdGlvbihub2RlcywgbmFtZSkge1xuXHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgZG9tID0gc2VsZi5kb20sIHZhbHVlLCBpbnRlcm5hbE5hbWU7XG5cblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdG5vZGUgPSBub2Rlc1tpXTtcblx0XHRcdFx0XHR2YWx1ZSA9IG5vZGUuYXR0cihuYW1lKTtcblx0XHRcdFx0XHRpbnRlcm5hbE5hbWUgPSAnZGF0YS1tY2UtJyArIG5hbWU7XG5cblx0XHRcdFx0XHQvLyBBZGQgaW50ZXJuYWwgYXR0cmlidXRlIGlmIHdlIG5lZWQgdG8gd2UgZG9uJ3Qgb24gYSByZWZyZXNoIG9mIHRoZSBkb2N1bWVudFxuXHRcdFx0XHRcdGlmICghbm9kZS5hdHRyaWJ1dGVzLm1hcFtpbnRlcm5hbE5hbWVdKSB7XG5cdFx0XHRcdFx0XHQvLyBEb24ndCBkdXBsaWNhdGUgdGhlc2Ugc2luY2UgdGhleSB3b24ndCBnZXQgbW9kaWZpZWQgYnkgYW55IGJyb3dzZXJcblx0XHRcdFx0XHRcdGlmICh2YWx1ZS5pbmRleE9mKCdkYXRhOicpID09PSAwIHx8IHZhbHVlLmluZGV4T2YoJ2Jsb2I6JykgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChuYW1lID09PSBcInN0eWxlXCIpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSBkb20uc2VyaWFsaXplU3R5bGUoZG9tLnBhcnNlU3R5bGUodmFsdWUpLCBub2RlLm5hbWUpO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bm9kZS5hdHRyKGludGVybmFsTmFtZSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRub2RlLmF0dHIobmFtZSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChuYW1lID09PSBcInRhYmluZGV4XCIpIHtcblx0XHRcdFx0XHRcdFx0bm9kZS5hdHRyKGludGVybmFsTmFtZSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRub2RlLmF0dHIobmFtZSwgbnVsbCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRub2RlLmF0dHIoaW50ZXJuYWxOYW1lLCBzZWxmLmNvbnZlcnRVUkwodmFsdWUsIG5hbWUsIG5vZGUubmFtZSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEtlZXAgc2NyaXB0cyBmcm9tIGV4ZWN1dGluZ1xuXHRcdFx0c2VsZi5wYXJzZXIuYWRkTm9kZUZpbHRlcignc2NyaXB0JywgZnVuY3Rpb24obm9kZXMpIHtcblx0XHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGgsIG5vZGUsIHR5cGU7XG5cblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdG5vZGUgPSBub2Rlc1tpXTtcblx0XHRcdFx0XHR0eXBlID0gbm9kZS5hdHRyKCd0eXBlJykgfHwgJ25vL3R5cGUnO1xuXHRcdFx0XHRcdGlmICh0eXBlLmluZGV4T2YoJ21jZS0nKSAhPT0gMCkge1xuXHRcdFx0XHRcdFx0bm9kZS5hdHRyKCd0eXBlJywgJ21jZS0nICsgdHlwZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5wYXJzZXIuYWRkTm9kZUZpbHRlcignI2NkYXRhJywgZnVuY3Rpb24obm9kZXMpIHtcblx0XHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG5cblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdG5vZGUgPSBub2Rlc1tpXTtcblx0XHRcdFx0XHRub2RlLnR5cGUgPSA4O1xuXHRcdFx0XHRcdG5vZGUubmFtZSA9ICcjY29tbWVudCc7XG5cdFx0XHRcdFx0bm9kZS52YWx1ZSA9ICdbQ0RBVEFbJyArIG5vZGUudmFsdWUgKyAnXV0nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5wYXJzZXIuYWRkTm9kZUZpbHRlcigncCxoMSxoMixoMyxoNCxoNSxoNixkaXYnLCBmdW5jdGlvbihub2Rlcykge1xuXHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZSwgbm9uRW1wdHlFbGVtZW50cyA9IHNlbGYuc2NoZW1hLmdldE5vbkVtcHR5RWxlbWVudHMoKTtcblxuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldO1xuXG5cdFx0XHRcdFx0aWYgKG5vZGUuaXNFbXB0eShub25FbXB0eUVsZW1lbnRzKSAmJiBub2RlLmdldEFsbCgnYnInKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdG5vZGUuYXBwZW5kKG5ldyBOb2RlKCdicicsIDEpKS5zaG9ydEVuZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIERPTSBzZXJpYWxpemVyIGZvciB0aGUgZWRpdG9yLiBXaWxsIGJlIHVzZWQgd2hlbiBjb250ZW50cyBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgZWRpdG9yLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcm9wZXJ0eSBzZXJpYWxpemVyXG5cdFx0XHQgKiBAdHlwZSB0aW55bWNlLmRvbS5TZXJpYWxpemVyXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogLy8gU2VyaWFsaXplcyB0aGUgZmlyc3QgcGFyYWdyYXBoIGluIHRoZSBlZGl0b3IgaW50byBhIHN0cmluZ1xuXHRcdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VyaWFsaXplci5zZXJpYWxpemUodGlueW1jZS5hY3RpdmVFZGl0b3IuZG9tLnNlbGVjdCgncCcpWzBdKTtcblx0XHRcdCAqL1xuXHRcdFx0c2VsZi5zZXJpYWxpemVyID0gbmV3IERvbVNlcmlhbGl6ZXIoc2V0dGluZ3MsIHNlbGYpO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFNlbGVjdGlvbiBpbnN0YW5jZSBmb3IgdGhlIGVkaXRvci5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJvcGVydHkgc2VsZWN0aW9uXG5cdFx0XHQgKiBAdHlwZSB0aW55bWNlLmRvbS5TZWxlY3Rpb25cblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiAvLyBTZXRzIHNvbWUgY29udGVudHMgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3Jcblx0XHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLnNlbGVjdGlvbi5zZXRDb250ZW50KCdTb21lIGNvbnRlbnRzJyk7XG5cdFx0XHQgKlxuXHRcdFx0ICogLy8gR2V0cyB0aGUgY3VycmVudCBzZWxlY3Rpb25cblx0XHRcdCAqIGFsZXJ0KHRpbnltY2UuYWN0aXZlRWRpdG9yLnNlbGVjdGlvbi5nZXRDb250ZW50KCkpO1xuXHRcdFx0ICpcblx0XHRcdCAqIC8vIFNlbGVjdHMgdGhlIGZpcnN0IHBhcmFncmFwaCBmb3VuZFxuXHRcdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdCh0aW55bWNlLmFjdGl2ZUVkaXRvci5kb20uc2VsZWN0KCdwJylbMF0pO1xuXHRcdFx0ICovXG5cdFx0XHRzZWxmLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oc2VsZi5kb20sIHNlbGYuZ2V0V2luKCksIHNlbGYuc2VyaWFsaXplciwgc2VsZik7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogRm9ybWF0dGVyIGluc3RhbmNlLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcm9wZXJ0eSBmb3JtYXR0ZXJcblx0XHRcdCAqIEB0eXBlIHRpbnltY2UuRm9ybWF0dGVyXG5cdFx0XHQgKi9cblx0XHRcdHNlbGYuZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihzZWxmKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBVbmRvIG1hbmFnZXIgaW5zdGFuY2UsIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB1bmRvIGxldmVscy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJvcGVydHkgdW5kb01hbmFnZXJcblx0XHRcdCAqIEB0eXBlIHRpbnltY2UuVW5kb01hbmFnZXJcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiAvLyBVbmRvZXMgdGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRvIHRoZSBlZGl0b3Jcblx0XHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLnVuZG9NYW5hZ2VyLnVuZG8oKTtcblx0XHRcdCAqL1xuXHRcdFx0c2VsZi51bmRvTWFuYWdlciA9IG5ldyBVbmRvTWFuYWdlcihzZWxmKTtcblxuXHRcdFx0c2VsZi5mb3JjZUJsb2NrcyA9IG5ldyBGb3JjZUJsb2NrcyhzZWxmKTtcblx0XHRcdHNlbGYuZW50ZXJLZXkgPSBuZXcgRW50ZXJLZXkoc2VsZik7XG5cdFx0XHRzZWxmLl9ub2RlQ2hhbmdlRGlzcGF0Y2hlciA9IG5ldyBOb2RlQ2hhbmdlKHNlbGYpO1xuXHRcdFx0c2VsZi5fc2VsZWN0aW9uT3ZlcnJpZGVzID0gbmV3IFNlbGVjdGlvbk92ZXJyaWRlcyhzZWxmKTtcblxuXHRcdFx0c2VsZi5maXJlKCdQcmVJbml0Jyk7XG5cblx0XHRcdGlmICghc2V0dGluZ3MuYnJvd3Nlcl9zcGVsbGNoZWNrICYmICFzZXR0aW5ncy5nZWNrb19zcGVsbGNoZWNrKSB7XG5cdFx0XHRcdGRvYy5ib2R5LnNwZWxsY2hlY2sgPSBmYWxzZTsgLy8gR2Vja29cblx0XHRcdFx0RE9NLnNldEF0dHJpYihib2R5LCBcInNwZWxsY2hlY2tcIiwgXCJmYWxzZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5xdWlya3MgPSBuZXcgUXVpcmtzKHNlbGYpO1xuXHRcdFx0c2VsZi5maXJlKCdQb3N0UmVuZGVyJyk7XG5cblx0XHRcdGlmIChzZXR0aW5ncy5kaXJlY3Rpb25hbGl0eSkge1xuXHRcdFx0XHRib2R5LmRpciA9IHNldHRpbmdzLmRpcmVjdGlvbmFsaXR5O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3Mubm93cmFwKSB7XG5cdFx0XHRcdGJvZHkuc3R5bGUud2hpdGVTcGFjZSA9IFwibm93cmFwXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5wcm90ZWN0KSB7XG5cdFx0XHRcdHNlbGYub24oJ0JlZm9yZVNldENvbnRlbnQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0ZWFjaChzZXR0aW5ncy5wcm90ZWN0LCBmdW5jdGlvbihwYXR0ZXJuKSB7XG5cdFx0XHRcdFx0XHRlLmNvbnRlbnQgPSBlLmNvbnRlbnQucmVwbGFjZShwYXR0ZXJuLCBmdW5jdGlvbihzdHIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuICc8IS0tbWNlOnByb3RlY3RlZCAnICsgZXNjYXBlKHN0cikgKyAnLS0+Jztcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5vbignU2V0Q29udGVudCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmFkZFZpc3VhbChzZWxmLmdldEJvZHkoKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gUmVtb3ZlIGVtcHR5IGNvbnRlbnRzXG5cdFx0XHRpZiAoc2V0dGluZ3MucGFkZF9lbXB0eV9lZGl0b3IpIHtcblx0XHRcdFx0c2VsZi5vbignUG9zdFByb2Nlc3MnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0ZS5jb250ZW50ID0gZS5jb250ZW50LnJlcGxhY2UoL14oPHBbXj5dKj4oJm5ic3A7fCYjMTYwO3xcXHN8XFx1MDBhMHw8YnIgXFwvPnwpPFxcL3A+W1xcclxcbl0qfDxiciBcXC8+W1xcclxcbl0qKSQvLCAnJyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLmxvYWQoe2luaXRpYWw6IHRydWUsIGZvcm1hdDogJ2h0bWwnfSk7XG5cdFx0XHRzZWxmLnN0YXJ0Q29udGVudCA9IHNlbGYuZ2V0Q29udGVudCh7Zm9ybWF0OiAncmF3J30pO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIElzIHNldCB0byB0cnVlIGFmdGVyIHRoZSBlZGl0b3IgaW5zdGFuY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJvcGVydHkgaW5pdGlhbGl6ZWRcblx0XHRcdCAqIEB0eXBlIEJvb2xlYW5cblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBmdW5jdGlvbiBpc0VkaXRvckluaXRpYWxpemVkKGVkaXRvcikge1xuXHRcdFx0ICogICAgIHJldHVybiBlZGl0b3IgJiYgZWRpdG9yLmluaXRpYWxpemVkO1xuXHRcdFx0ICogfVxuXHRcdFx0ICovXG5cdFx0XHRzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHRcdHNlbGYuYmluZFBlbmRpbmdFdmVudERlbGVnYXRlcygpO1xuXG5cdFx0XHRzZWxmLmZpcmUoJ2luaXQnKTtcblx0XHRcdHNlbGYuZm9jdXModHJ1ZSk7XG5cdFx0XHRzZWxmLm5vZGVDaGFuZ2VkKHtpbml0aWFsOiB0cnVlfSk7XG5cdFx0XHRzZWxmLmV4ZWNDYWxsYmFjaygnaW5pdF9pbnN0YW5jZV9jYWxsYmFjaycsIHNlbGYpO1xuXG5cdFx0XHRzZWxmLm9uKCdjb21wb3NpdGlvbnN0YXJ0IGNvbXBvc2l0aW9uZW5kJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRzZWxmLmNvbXBvc2luZyA9IGUudHlwZSA9PT0gJ2NvbXBvc2l0aW9uc3RhcnQnO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFkZCBlZGl0b3Igc3BlY2lmaWMgQ1NTIHN0eWxlc1xuXHRcdFx0aWYgKHNlbGYuY29udGVudFN0eWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnRlbnRDc3NUZXh0ID0gJyc7XG5cblx0XHRcdFx0ZWFjaChzZWxmLmNvbnRlbnRTdHlsZXMsIGZ1bmN0aW9uKHN0eWxlKSB7XG5cdFx0XHRcdFx0Y29udGVudENzc1RleHQgKz0gc3R5bGUgKyBcIlxcclxcblwiO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZWxmLmRvbS5hZGRTdHlsZShjb250ZW50Q3NzVGV4dCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvYWQgc3BlY2lmaWVkIGNvbnRlbnQgQ1NTIGxhc3Rcblx0XHRcdGVhY2goc2VsZi5jb250ZW50Q1NTLCBmdW5jdGlvbihjc3NVcmwpIHtcblx0XHRcdFx0aWYgKCFzZWxmLmxvYWRlZENTU1tjc3NVcmxdKSB7XG5cdFx0XHRcdFx0c2VsZi5kb20ubG9hZENTUyhjc3NVcmwpO1xuXHRcdFx0XHRcdHNlbGYubG9hZGVkQ1NTW2Nzc1VybF0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gSGFuZGxlIGF1dG8gZm9jdXNcblx0XHRcdGlmIChzZXR0aW5ncy5hdXRvX2ZvY3VzKSB7XG5cdFx0XHRcdERlbGF5LnNldEVkaXRvclRpbWVvdXQoc2VsZiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGVkaXRvcjtcblxuXHRcdFx0XHRcdGlmIChzZXR0aW5ncy5hdXRvX2ZvY3VzID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRlZGl0b3IgPSBzZWxmO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlZGl0b3IgPSBzZWxmLmVkaXRvck1hbmFnZXIuZ2V0KHNldHRpbmdzLmF1dG9fZm9jdXMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghZWRpdG9yLmRlc3Ryb3llZCkge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCAxMDApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhbiB1cCByZWZlcmVuY2VzIGZvciBJRVxuXHRcdFx0dGFyZ2V0RWxtID0gZG9jID0gYm9keSA9IG51bGw7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEZvY3VzZXMvYWN0aXZhdGVzIHRoZSBlZGl0b3IuIFRoaXMgd2lsbCBzZXQgdGhpcyBlZGl0b3IgYXMgdGhlIGFjdGl2ZUVkaXRvciBpbiB0aGUgdGlueW1jZSBjb2xsZWN0aW9uXG5cdFx0ICogaXQgd2lsbCBhbHNvIHBsYWNlIERPTSBmb2N1cyBpbnNpZGUgdGhlIGVkaXRvci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZm9jdXNcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHNraXBGb2N1cyBTa2lwIERPTSBmb2N1cy4gSnVzdCBzZXQgaXMgYXMgdGhlIGFjdGl2ZSBlZGl0b3IuXG5cdFx0ICovXG5cdFx0Zm9jdXM6IGZ1bmN0aW9uKHNraXBGb2N1cykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBzZWxlY3Rpb24gPSBzZWxmLnNlbGVjdGlvbiwgY29udGVudEVkaXRhYmxlID0gc2VsZi5zZXR0aW5ncy5jb250ZW50X2VkaXRhYmxlLCBybmc7XG5cdFx0XHR2YXIgY29udHJvbEVsbSwgZG9jID0gc2VsZi5nZXREb2MoKSwgYm9keSA9IHNlbGYuZ2V0Qm9keSgpLCBjb250ZW50RWRpdGFibGVIb3N0O1xuXG5cdFx0XHRmdW5jdGlvbiBnZXRDb250ZW50RWRpdGFibGVIb3N0KG5vZGUpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYuZG9tLmdldFBhcmVudChub2RlLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNlbGYuZG9tLmdldENvbnRlbnRFZGl0YWJsZShub2RlKSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNraXBGb2N1cykge1xuXHRcdFx0XHQvLyBHZXQgc2VsZWN0ZWQgY29udHJvbCBlbGVtZW50XG5cdFx0XHRcdHJuZyA9IHNlbGVjdGlvbi5nZXRSbmcoKTtcblx0XHRcdFx0aWYgKHJuZy5pdGVtKSB7XG5cdFx0XHRcdFx0Y29udHJvbEVsbSA9IHJuZy5pdGVtKDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5xdWlya3MucmVmcmVzaENvbnRlbnRFZGl0YWJsZSgpO1xuXG5cdFx0XHRcdC8vIE1vdmUgZm9jdXMgdG8gY29udGVudEVkaXRhYmxlPXRydWUgY2hpbGQgaWYgbmVlZGVkXG5cdFx0XHRcdGNvbnRlbnRFZGl0YWJsZUhvc3QgPSBnZXRDb250ZW50RWRpdGFibGVIb3N0KHNlbGVjdGlvbi5nZXROb2RlKCkpO1xuXHRcdFx0XHRpZiAoc2VsZi4kLmNvbnRhaW5zKGJvZHksIGNvbnRlbnRFZGl0YWJsZUhvc3QpKSB7XG5cdFx0XHRcdFx0Y29udGVudEVkaXRhYmxlSG9zdC5mb2N1cygpO1xuXHRcdFx0XHRcdHNlbGVjdGlvbi5ub3JtYWxpemUoKTtcblx0XHRcdFx0XHRzZWxmLmVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKHNlbGYpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvY3VzIHRoZSB3aW5kb3cgaWZyYW1lXG5cdFx0XHRcdGlmICghY29udGVudEVkaXRhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gV2ViS2l0IG5lZWRzIHRoaXMgY2FsbCB0byBmaXJlIGZvY3VzaW4gZXZlbnQgcHJvcGVybHkgc2VlICM1OTQ4XG5cdFx0XHRcdFx0Ly8gQnV0IE9wZXJhIHByZSBCbGluayBlbmdpbmUgd2lsbCBwcm9kdWNlIGFuIGVtcHR5IHNlbGVjdGlvbiBzbyBza2lwIE9wZXJhXG5cdFx0XHRcdFx0aWYgKCFFbnYub3BlcmEpIHtcblx0XHRcdFx0XHRcdHNlbGYuZ2V0Qm9keSgpLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c2VsZi5nZXRXaW4oKS5mb2N1cygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9jdXMgdGhlIGJvZHkgYXMgd2VsbCBzaW5jZSBpdCdzIGNvbnRlbnRFZGl0YWJsZVxuXHRcdFx0XHRpZiAoaXNHZWNrbyB8fCBjb250ZW50RWRpdGFibGUpIHtcblx0XHRcdFx0XHQvLyBDaGVjayBmb3Igc2V0QWN0aXZlIHNpbmNlIGl0IGRvZXNuJ3Qgc2Nyb2xsIHRvIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0aWYgKGJvZHkuc2V0QWN0aXZlKSB7XG5cdFx0XHRcdFx0XHQvLyBJRSAxMSBzb21ldGltZXMgdGhyb3dzIFwiSW52YWxpZCBmdW5jdGlvblwiIHRoZW4gZmFsbGJhY2sgdG8gZm9jdXNcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGJvZHkuc2V0QWN0aXZlKCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdFx0XHRib2R5LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJvZHkuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoY29udGVudEVkaXRhYmxlKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24ubm9ybWFsaXplKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSBzZWxlY3RlZCBjb250cm9sIGVsZW1lbnRcblx0XHRcdFx0Ly8gVGhpcyBpcyBuZWVkZWQgd2hlbiBmb3IgZXhhbXBsZSBhbiBpbWFnZSBpcyBzZWxlY3RlZCB3aXRoaW4gYVxuXHRcdFx0XHQvLyBsYXllciBhIGNhbGwgdG8gZm9jdXMgd2lsbCB0aGVuIHJlbW92ZSB0aGUgY29udHJvbCBzZWxlY3Rpb25cblx0XHRcdFx0aWYgKGNvbnRyb2xFbG0gJiYgY29udHJvbEVsbS5vd25lckRvY3VtZW50ID09IGRvYykge1xuXHRcdFx0XHRcdHJuZyA9IGRvYy5ib2R5LmNyZWF0ZUNvbnRyb2xSYW5nZSgpO1xuXHRcdFx0XHRcdHJuZy5hZGRFbGVtZW50KGNvbnRyb2xFbG0pO1xuXHRcdFx0XHRcdHJuZy5zZWxlY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLmVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKHNlbGYpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBFeGVjdXRlcyBhIGxlZ2FjeSBjYWxsYmFjay4gVGhpcyBtZXRob2QgaXMgdXNlZnVsIHRvIGNhbGwgb2xkIDIueCBvcHRpb24gY2FsbGJhY2tzLlxuXHRcdCAqIFRoZXJlIG5ldyBldmVudCBtb2RlbCBpcyBhIGJldHRlciB3YXkgdG8gYWRkIGNhbGxiYWNrIHNvIHRoaXMgbWV0aG9kIG1pZ2h0IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZXhlY0NhbGxiYWNrXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgY2FsbGJhY2sgdG8gZXhlY3V0ZS5cblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybiB2YWx1ZSBwYXNzZWQgZnJvbSBjYWxsYmFjayBmdW5jdGlvbi5cblx0XHQgKi9cblx0XHRleGVjQ2FsbGJhY2s6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgY2FsbGJhY2sgPSBzZWxmLnNldHRpbmdzW25hbWVdLCBzY29wZTtcblxuXHRcdFx0aWYgKCFjYWxsYmFjaykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgdGhyb3VnaCBsb29rdXBcblx0XHRcdGlmIChzZWxmLmNhbGxiYWNrTG9va3VwICYmIChzY29wZSA9IHNlbGYuY2FsbGJhY2tMb29rdXBbbmFtZV0pKSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gc2NvcGUuZnVuYztcblx0XHRcdFx0c2NvcGUgPSBzY29wZS5zY29wZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0c2NvcGUgPSBjYWxsYmFjay5yZXBsYWNlKC9cXC5cXHcrJC8sICcnKTtcblx0XHRcdFx0c2NvcGUgPSBzY29wZSA/IHJlc29sdmUoc2NvcGUpIDogMDtcblx0XHRcdFx0Y2FsbGJhY2sgPSByZXNvbHZlKGNhbGxiYWNrKTtcblx0XHRcdFx0c2VsZi5jYWxsYmFja0xvb2t1cCA9IHNlbGYuY2FsbGJhY2tMb29rdXAgfHwge307XG5cdFx0XHRcdHNlbGYuY2FsbGJhY2tMb29rdXBbbmFtZV0gPSB7ZnVuYzogY2FsbGJhY2ssIHNjb3BlOiBzY29wZX07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjYWxsYmFjay5hcHBseShzY29wZSB8fCBzZWxmLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVHJhbnNsYXRlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyBieSByZXBsYWNpbmcgdmFyaWFibGVzIHdpdGggbGFuZ3VhZ2UgcGFjayBpdGVtcyBpdCB3aWxsIGFsc28gY2hlY2sgaWYgdGhlcmUgaXNcblx0XHQgKiBhIGtleSBtYXRjaGluZyB0aGUgaW5wdXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHRyYW5zbGF0ZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFN0cmluZyB0byB0cmFuc2xhdGUgYnkgdGhlIGxhbmd1YWdlIHBhY2sgZGF0YS5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IFRyYW5zbGF0ZWQgc3RyaW5nLlxuXHRcdCAqL1xuXHRcdHRyYW5zbGF0ZTogZnVuY3Rpb24odGV4dCkge1xuXHRcdFx0dmFyIGxhbmcgPSB0aGlzLnNldHRpbmdzLmxhbmd1YWdlIHx8ICdlbicsIGkxOG4gPSB0aGlzLmVkaXRvck1hbmFnZXIuaTE4bjtcblxuXHRcdFx0aWYgKCF0ZXh0KSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0dGV4dCA9IGkxOG4uZGF0YVtsYW5nICsgJy4nICsgdGV4dF0gfHwgdGV4dC5yZXBsYWNlKC9cXHtcXCMoW15cXH1dKylcXH0vZywgZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0XHRyZXR1cm4gaTE4bi5kYXRhW2xhbmcgKyAnLicgKyBiXSB8fCAneyMnICsgYiArICd9Jztcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5lZGl0b3JNYW5hZ2VyLnRyYW5zbGF0ZSh0ZXh0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIGxhbmd1YWdlIHBhY2sgaXRlbSBieSBuYW1lL2tleS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0TGFuZ1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUva2V5IHRvIGdldCBmcm9tIHRoZSBsYW5ndWFnZSBwYWNrLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0VmFsIE9wdGlvbmFsIGRlZmF1bHQgdmFsdWUgdG8gcmV0cmlldmUuXG5cdFx0ICovXG5cdFx0Z2V0TGFuZzogZnVuY3Rpb24obmFtZSwgZGVmYXVsdFZhbCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGhpcy5lZGl0b3JNYW5hZ2VyLmkxOG4uZGF0YVsodGhpcy5zZXR0aW5ncy5sYW5ndWFnZSB8fCAnZW4nKSArICcuJyArIG5hbWVdIHx8XG5cdFx0XHRcdChkZWZhdWx0VmFsICE9PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsIDogJ3sjJyArIG5hbWUgKyAnfScpXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgYnkgbmFtZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0UGFyYW1cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBDb25maWdydWF0aW9uIHBhcmFtZXRlciB0byByZXRyaWV2ZS5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gZGVmYXVsdFZhbCBPcHRpb25hbCBkZWZhdWx0IHZhbHVlIHRvIHJldHVybi5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBPcHRpb25hbCB0eXBlIHBhcmFtZXRlci5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IENvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHZhbHVlIG9yIGRlZmF1bHQgdmFsdWUuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBSZXR1cm5zIGEgc3BlY2lmaWMgY29uZmlnIHZhbHVlIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdmFyIHNvbWV2YWwgPSB0aW55bWNlLmFjdGl2ZUVkaXRvci5nZXRQYXJhbSgnbXl2YWx1ZScpO1xuXHRcdCAqXG5cdFx0ICogLy8gUmV0dXJucyBhIHNwZWNpZmljIGNvbmZpZyB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgZWRpdG9yIGluc3RhbmNlIGJ5IGlkXG5cdFx0ICogdmFyIHNvbWV2YWwyID0gdGlueW1jZS5nZXQoJ215X2VkaXRvcicpLmdldFBhcmFtKCdteXZhbHVlJyk7XG5cdFx0ICovXG5cdFx0Z2V0UGFyYW06IGZ1bmN0aW9uKG5hbWUsIGRlZmF1bHRWYWwsIHR5cGUpIHtcblx0XHRcdHZhciB2YWx1ZSA9IG5hbWUgaW4gdGhpcy5zZXR0aW5ncyA/IHRoaXMuc2V0dGluZ3NbbmFtZV0gOiBkZWZhdWx0VmFsLCBvdXRwdXQ7XG5cblx0XHRcdGlmICh0eXBlID09PSAnaGFzaCcpIHtcblx0XHRcdFx0b3V0cHV0ID0ge307XG5cblx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRlYWNoKHZhbHVlLmluZGV4T2YoJz0nKSA+IDAgPyB2YWx1ZS5zcGxpdCgvWzssXSg/IVtePTssXSooPzpbOyxdfCQpKS8pIDogdmFsdWUuc3BsaXQoJywnKSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoJz0nKTtcblxuXHRcdFx0XHRcdFx0aWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0b3V0cHV0W3RyaW0odmFsdWVbMF0pXSA9IHRyaW0odmFsdWVbMV0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b3V0cHV0W3RyaW0odmFsdWVbMF0pXSA9IHRyaW0odmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG91dHB1dCA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBEaXNwYXRjaGVzIG91dCBhIG9uTm9kZUNoYW5nZSBldmVudCB0byBhbGwgb2JzZXJ2ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW4geW91XG5cdFx0ICogbmVlZCB0byB1cGRhdGUgdGhlIFVJIHN0YXRlcyBvciBlbGVtZW50IHBhdGggZXRjLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBub2RlQ2hhbmdlZFxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIE9wdGlvbmFsIGFyZ3MgdG8gcGFzcyB0byBOb2RlQ2hhbmdlIGV2ZW50IGhhbmRsZXJzLlxuXHRcdCAqL1xuXHRcdG5vZGVDaGFuZ2VkOiBmdW5jdGlvbihhcmdzKSB7XG5cdFx0XHR0aGlzLl9ub2RlQ2hhbmdlRGlzcGF0Y2hlci5ub2RlQ2hhbmdlZChhcmdzKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIGJ1dHRvbiB0aGF0IGxhdGVyIGdldHMgY3JlYXRlZCBieSB0aGUgdGhlbWUgaW4gdGhlIGVkaXRvcnMgdG9vbGJhcnMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZEJ1dHRvblxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIEJ1dHRvbiBuYW1lIHRvIGFkZC5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgU2V0dGluZ3Mgb2JqZWN0IHdpdGggdGl0bGUsIGNtZCBldGMuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBBZGRzIGEgY3VzdG9tIGJ1dHRvbiB0byB0aGUgZWRpdG9yIHRoYXQgaW5zZXJ0cyBjb250ZW50cyB3aGVuIGNsaWNrZWRcblx0XHQgKiB0aW55bWNlLmluaXQoe1xuXHRcdCAqICAgIC4uLlxuXHRcdCAqXG5cdFx0ICogICAgdG9vbGJhcjogJ2V4YW1wbGUnXG5cdFx0ICpcblx0XHQgKiAgICBzZXR1cDogZnVuY3Rpb24oZWQpIHtcblx0XHQgKiAgICAgICBlZC5hZGRCdXR0b24oJ2V4YW1wbGUnLCB7XG5cdFx0ICogICAgICAgICAgdGl0bGU6ICdNeSB0aXRsZScsXG5cdFx0ICogICAgICAgICAgaW1hZ2U6ICcuLi9qcy90aW55bWNlL3BsdWdpbnMvZXhhbXBsZS9pbWcvZXhhbXBsZS5naWYnLFxuXHRcdCAqICAgICAgICAgIG9uY2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdCAqICAgICAgICAgICAgIGVkLmluc2VydENvbnRlbnQoJ0hlbGxvIHdvcmxkISEnKTtcblx0XHQgKiAgICAgICAgICB9XG5cdFx0ICogICAgICAgfSk7XG5cdFx0ICogICAgfVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHRcdGFkZEJ1dHRvbjogZnVuY3Rpb24obmFtZSwgc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKHNldHRpbmdzLmNtZCkge1xuXHRcdFx0XHRzZXR0aW5ncy5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5leGVjQ29tbWFuZChzZXR0aW5ncy5jbWQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNldHRpbmdzLnRleHQgJiYgIXNldHRpbmdzLmljb24pIHtcblx0XHRcdFx0c2V0dGluZ3MuaWNvbiA9IG5hbWU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuYnV0dG9ucyA9IHNlbGYuYnV0dG9ucyB8fCB7fTtcblx0XHRcdHNldHRpbmdzLnRvb2x0aXAgPSBzZXR0aW5ncy50b29sdGlwIHx8IHNldHRpbmdzLnRpdGxlO1xuXHRcdFx0c2VsZi5idXR0b25zW25hbWVdID0gc2V0dGluZ3M7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYSBzaWRlYmFyIGZvciB0aGUgZWRpdG9yIGluc3RhbmNlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRTaWRlYmFyXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgU2lkZWJhciBuYW1lIHRvIGFkZC5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgU2V0dGluZ3Mgb2JqZWN0IHdpdGggaWNvbiwgb25zaG93IGV0Yy5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIEFkZHMgYSBjdXN0b20gc2lkZWJhciB0aGF0IHdoZW4gY2xpY2tlZCBsb2dzIHRoZSBwYW5lbCBlbGVtZW50XG5cdFx0ICogdGlueW1jZS5pbml0KHtcblx0XHQgKiAgICAuLi5cblx0XHQgKiAgICBzZXR1cDogZnVuY3Rpb24oZWQpIHtcblx0XHQgKiAgICAgICBlZC5hZGRTaWRlYmFyKCdleGFtcGxlJywge1xuXHRcdCAqICAgICAgICAgIHRvb2x0aXA6ICdNeSBzaWRlYmFyJyxcblx0XHQgKiAgICAgICAgICBpY29uOiAnbXktc2lkZS1iYXInLFxuXHRcdCAqICAgICAgICAgIG9uc2hvdzogZnVuY3Rpb24oYXBpKSB7XG5cdFx0ICogICAgICAgICAgICAgY29uc29sZS5sb2coYXBpLmVsZW1lbnQoKSk7XG5cdFx0ICogICAgICAgICAgfVxuXHRcdCAqICAgICAgIH0pO1xuXHRcdCAqICAgIH1cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0XHRhZGRTaWRlYmFyOiBmdW5jdGlvbiAobmFtZSwgc2V0dGluZ3MpIHtcblx0XHRcdHJldHVybiBTaWRlYmFyLmFkZCh0aGlzLCBuYW1lLCBzZXR0aW5ncyk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYSBtZW51IGl0ZW0gdG8gYmUgdXNlZCBpbiB0aGUgbWVudXMgb2YgdGhlIHRoZW1lLiBUaGVyZSBtaWdodCBiZSBtdWx0aXBsZSBpbnN0YW5jZXNcblx0XHQgKiBvZiB0aGlzIG1lbnUgaXRlbSBmb3IgZXhhbXBsZSBpdCBtaWdodCBiZSB1c2VkIGluIHRoZSBtYWluIG1lbnVzIG9mIHRoZSB0aGVtZSBidXQgYWxzbyBpblxuXHRcdCAqIHRoZSBjb250ZXh0IG1lbnUgc28gbWFrZSBzdXJlIHRoYXQgaXQncyBzZWxmIGNvbnRhaW5lZCBhbmQgc3VwcG9ydHMgbXVsdGlwbGUgaW5zdGFuY2VzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRNZW51SXRlbVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE1lbnUgaXRlbSBuYW1lIHRvIGFkZC5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgU2V0dGluZ3Mgb2JqZWN0IHdpdGggdGl0bGUsIGNtZCBldGMuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvLyBBZGRzIGEgY3VzdG9tIG1lbnUgaXRlbSB0byB0aGUgZWRpdG9yIHRoYXQgaW5zZXJ0cyBjb250ZW50cyB3aGVuIGNsaWNrZWRcblx0XHQgKiAvLyBUaGUgY29udGV4dCBvcHRpb24gYWxsb3dzIHlvdSB0byBhZGQgdGhlIG1lbnUgaXRlbSB0byBhbiBleGlzdGluZyBkZWZhdWx0IG1lbnVcblx0XHQgKiB0aW55bWNlLmluaXQoe1xuXHRcdCAqICAgIC4uLlxuXHRcdCAqXG5cdFx0ICogICAgc2V0dXA6IGZ1bmN0aW9uKGVkKSB7XG5cdFx0ICogICAgICAgZWQuYWRkTWVudUl0ZW0oJ2V4YW1wbGUnLCB7XG5cdFx0ICogICAgICAgICAgdGV4dDogJ015IG1lbnUgaXRlbScsXG5cdFx0ICogICAgICAgICAgY29udGV4dDogJ3Rvb2xzJyxcblx0XHQgKiAgICAgICAgICBvbmNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHQgKiAgICAgICAgICAgICBlZC5pbnNlcnRDb250ZW50KCdIZWxsbyB3b3JsZCEhJyk7XG5cdFx0ICogICAgICAgICAgfVxuXHRcdCAqICAgICAgIH0pO1xuXHRcdCAqICAgIH1cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0XHRhZGRNZW51SXRlbTogZnVuY3Rpb24obmFtZSwgc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKHNldHRpbmdzLmNtZCkge1xuXHRcdFx0XHRzZXR0aW5ncy5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5leGVjQ29tbWFuZChzZXR0aW5ncy5jbWQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLm1lbnVJdGVtcyA9IHNlbGYubWVudUl0ZW1zIHx8IHt9O1xuXHRcdFx0c2VsZi5tZW51SXRlbXNbbmFtZV0gPSBzZXR0aW5ncztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIGNvbnRleHR1YWwgdG9vbGJhciB0byBiZSByZW5kZXJlZCB3aGVuIHRoZSBzZWxlY3RvciBtYXRjaGVzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRDb250ZXh0VG9vbGJhclxuXHRcdCAqIEBwYXJhbSB7ZnVuY3Rpb24vc3RyaW5nfSBwcmVkaWNhdGUgUHJlZGljYXRlIHRoYXQgbmVlZHMgdG8gcmV0dXJuIHRydWUgaWYgcHJvdmlkZWQgc3RyaW5ncyBnZXQgY29udmVydGVkIGludG8gQ1NTIHByZWRpY2F0ZXMuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvQXJyYXl9IGl0ZW1zIFN0cmluZyBvciBhcnJheSB3aXRoIGl0ZW1zIHRvIGFkZCB0byB0aGUgY29udGV4dCB0b29sYmFyLlxuXHRcdCAqL1xuXHRcdGFkZENvbnRleHRUb29sYmFyOiBmdW5jdGlvbihwcmVkaWNhdGUsIGl0ZW1zKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHNlbGVjdG9yO1xuXG5cdFx0XHRzZWxmLmNvbnRleHRUb29sYmFycyA9IHNlbGYuY29udGV4dFRvb2xiYXJzIHx8IFtdO1xuXG5cdFx0XHQvLyBDb252ZXJ0IHNlbGVjdG9yIHRvIHByZWRpY2F0ZVxuXHRcdFx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRzZWxlY3RvciA9IHByZWRpY2F0ZTtcblx0XHRcdFx0cHJlZGljYXRlID0gZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNlbGYuZG9tLmlzKGVsbSwgc2VsZWN0b3IpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLmNvbnRleHRUb29sYmFycy5wdXNoKHtcblx0XHRcdFx0aWQ6IFV1aWQudXVpZCgnbWNldCcpLFxuXHRcdFx0XHRwcmVkaWNhdGU6IHByZWRpY2F0ZSxcblx0XHRcdFx0aXRlbXM6IGl0ZW1zXG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIGN1c3RvbSBjb21tYW5kIHRvIHRoZSBlZGl0b3IsIHlvdSBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBjb21tYW5kcyB3aXRoIHRoaXMgbWV0aG9kLlxuXHRcdCAqIFRoZSBjb21tYW5kIHRoYXQgeW91IGFkZCBjYW4gYmUgZXhlY3V0ZWQgd2l0aCBleGVjQ29tbWFuZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYWRkQ29tbWFuZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIENvbW1hbmQgbmFtZSB0byBhZGQvb3ZlcnJpZGUuXG5cdFx0ICogQHBhcmFtIHthZGRDb21tYW5kQ2FsbGJhY2t9IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgY29tbWFuZCBvY2N1cnMuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIE9wdGlvbmFsIHNjb3BlIHRvIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGluLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gQWRkcyBhIGN1c3RvbSBjb21tYW5kIHRoYXQgbGF0ZXIgY2FuIGJlIGV4ZWN1dGVkIHVzaW5nIGV4ZWNDb21tYW5kXG5cdFx0ICogdGlueW1jZS5pbml0KHtcblx0XHQgKiAgICAuLi5cblx0XHQgKlxuXHRcdCAqICAgIHNldHVwOiBmdW5jdGlvbihlZCkge1xuXHRcdCAqICAgICAgIC8vIFJlZ2lzdGVyIGV4YW1wbGUgY29tbWFuZFxuXHRcdCAqICAgICAgIGVkLmFkZENvbW1hbmQoJ215Y29tbWFuZCcsIGZ1bmN0aW9uKHVpLCB2KSB7XG5cdFx0ICogICAgICAgICAgZWQud2luZG93TWFuYWdlci5hbGVydCgnSGVsbG8gd29ybGQhISBTZWxlY3Rpb246ICcgKyBlZC5zZWxlY3Rpb24uZ2V0Q29udGVudCh7Zm9ybWF0OiAndGV4dCd9KSk7XG5cdFx0ICogICAgICAgfSk7XG5cdFx0ICogICAgfVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHRcdGFkZENvbW1hbmQ6IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBzY29wZSkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSBjb21tYW5kIGlzIGV4ZWN1dGVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBjYWxsYmFjayBhZGRDb21tYW5kQ2FsbGJhY2tcblx0XHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gdWkgRGlzcGxheSBVSSBzdGF0ZSB0cnVlL2ZhbHNlLlxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IHZhbHVlIE9wdGlvbmFsIHZhbHVlIGZvciBjb21tYW5kLlxuXHRcdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZS9mYWxzZSBzdGF0ZSBpZiB0aGUgY29tbWFuZCB3YXMgaGFuZGxlZCBvciBub3QuXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuZWRpdG9yQ29tbWFuZHMuYWRkQ29tbWFuZChuYW1lLCBjYWxsYmFjaywgc2NvcGUpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIGEgY3VzdG9tIHF1ZXJ5IHN0YXRlIGNvbW1hbmQgdG8gdGhlIGVkaXRvciwgeW91IGNhbiBhbHNvIG92ZXJyaWRlIGV4aXN0aW5nIGNvbW1hbmRzIHdpdGggdGhpcyBtZXRob2QuXG5cdFx0ICogVGhlIGNvbW1hbmQgdGhhdCB5b3UgYWRkIGNhbiBiZSBleGVjdXRlZCB3aXRoIHF1ZXJ5Q29tbWFuZFN0YXRlIGZ1bmN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRRdWVyeVN0YXRlSGFuZGxlclxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIENvbW1hbmQgbmFtZSB0byBhZGQvb3ZlcnJpZGUuXG5cdFx0ICogQHBhcmFtIHthZGRRdWVyeVN0YXRlSGFuZGxlckNhbGxiYWNrfSBjYWxsYmFjayBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGNvbW1hbmQgc3RhdGUgcmV0cmlldmFsIG9jY3Vycy5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2NvcGUgT3B0aW9uYWwgc2NvcGUgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gaW4uXG5cdFx0ICovXG5cdFx0YWRkUXVlcnlTdGF0ZUhhbmRsZXI6IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBzY29wZSkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSBxdWVyeUNvbW1hbmRTdGF0ZSBpcyBleGVjdXRlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAY2FsbGJhY2sgYWRkUXVlcnlTdGF0ZUhhbmRsZXJDYWxsYmFja1xuXHRcdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZS9mYWxzZSBzdGF0ZSBpZiB0aGUgY29tbWFuZCBpcyBlbmFibGVkIG9yIG5vdCBsaWtlIGlzIGl0IGJvbGQuXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuZWRpdG9yQ29tbWFuZHMuYWRkUXVlcnlTdGF0ZUhhbmRsZXIobmFtZSwgY2FsbGJhY2ssIHNjb3BlKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWRkcyBhIGN1c3RvbSBxdWVyeSB2YWx1ZSBjb21tYW5kIHRvIHRoZSBlZGl0b3IsIHlvdSBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBjb21tYW5kcyB3aXRoIHRoaXMgbWV0aG9kLlxuXHRcdCAqIFRoZSBjb21tYW5kIHRoYXQgeW91IGFkZCBjYW4gYmUgZXhlY3V0ZWQgd2l0aCBxdWVyeUNvbW1hbmRWYWx1ZSBmdW5jdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgYWRkUXVlcnlWYWx1ZUhhbmRsZXJcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBDb21tYW5kIG5hbWUgdG8gYWRkL292ZXJyaWRlLlxuXHRcdCAqIEBwYXJhbSB7YWRkUXVlcnlWYWx1ZUhhbmRsZXJDYWxsYmFja30gY2FsbGJhY2sgRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBjb21tYW5kIHZhbHVlIHJldHJpZXZhbCBvY2N1cnMuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIE9wdGlvbmFsIHNjb3BlIHRvIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGluLlxuXHRcdCAqL1xuXHRcdGFkZFF1ZXJ5VmFsdWVIYW5kbGVyOiBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaywgc2NvcGUpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIGEgcXVlcnlDb21tYW5kVmFsdWUgaXMgZXhlY3V0ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQGNhbGxiYWNrIGFkZFF1ZXJ5VmFsdWVIYW5kbGVyQ2FsbGJhY2tcblx0XHRcdCAqIEByZXR1cm4ge09iamVjdH0gVmFsdWUgb2YgdGhlIGNvbW1hbmQgb3IgdW5kZWZpbmVkLlxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmVkaXRvckNvbW1hbmRzLmFkZFF1ZXJ5VmFsdWVIYW5kbGVyKG5hbWUsIGNhbGxiYWNrLCBzY29wZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYSBrZXlib2FyZCBzaG9ydGN1dCBmb3Igc29tZSBjb21tYW5kIG9yIGZ1bmN0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRTaG9ydGN1dFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuIFNob3J0Y3V0IHBhdHRlcm4uIExpa2UgZm9yIGV4YW1wbGU6IGN0cmwrYWx0K28uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGRlc2MgVGV4dCBkZXNjcmlwdGlvbiBmb3IgdGhlIGNvbW1hbmQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvRnVuY3Rpb259IGNtZEZ1bmMgQ29tbWFuZCBuYW1lIHN0cmluZyBvciBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzYyBPcHRpb25hbCBzY29wZSB0byBleGVjdXRlIHRoZSBmdW5jdGlvbiBpbi5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIHN0YXRlIGlmIHRoZSBzaG9ydGN1dCB3YXMgYWRkZWQgb3Igbm90LlxuXHRcdCAqL1xuXHRcdGFkZFNob3J0Y3V0OiBmdW5jdGlvbihwYXR0ZXJuLCBkZXNjLCBjbWRGdW5jLCBzY29wZSkge1xuXHRcdFx0dGhpcy5zaG9ydGN1dHMuYWRkKHBhdHRlcm4sIGRlc2MsIGNtZEZ1bmMsIHNjb3BlKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRXhlY3V0ZXMgYSBjb21tYW5kIG9uIHRoZSBjdXJyZW50IGluc3RhbmNlLiBUaGVzZSBjb21tYW5kcyBjYW4gYmUgVGlueU1DRSBpbnRlcm5hbCBjb21tYW5kcyBwcmVmaXhlZCB3aXRoIFwibWNlXCIgb3Jcblx0XHQgKiB0aGV5IGNhbiBiZSBidWlsZCBpbiBicm93c2VyIGNvbW1hbmRzIHN1Y2ggYXMgXCJCb2xkXCIuIEEgY29tcGxlYXRlIGxpc3Qgb2YgYnJvd3NlciBjb21tYW5kcyBpcyBhdmFpbGFibGUgb24gTVNETiBvciBNb3ppbGxhLm9yZy5cblx0XHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzcGF0Y2ggdGhlIGV4ZWNDb21tYW5kIGZ1bmN0aW9uIG9uIGVhY2ggcGx1Z2luLCB0aGVtZSBvciB0aGUgZXhlY2NvbW1hbmRfY2FsbGJhY2sgb3B0aW9uIGlmIG5vbmUgb2YgdGhlc2Vcblx0XHQgKiByZXR1cm4gdHJ1ZSBpdCB3aWxsIGhhbmRsZSB0aGUgY29tbWFuZCBhcyBhIGludGVybmFsIGJyb3dzZXIgY29tbWFuZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZXhlY0NvbW1hbmRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY21kIENvbW1hbmQgbmFtZSB0byBleGVjdXRlLCBmb3IgZXhhbXBsZSBtY2VMaW5rIG9yIEJvbGQuXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSB1aSBUcnVlL2ZhbHNlIHN0YXRlIGlmIGEgVUkgKGRpYWxvZykgc2hvdWxkIGJlIHByZXNlbnRlZCBvciBub3QuXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gdmFsdWUgT3B0aW9uYWwgY29tbWFuZCB2YWx1ZSwgdGhpcyBjYW4gYmUgYW55dGhpbmcuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgT3B0aW9uYWwgYXJndW1lbnRzIG9iamVjdC5cblx0XHQgKi9cblx0XHRleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kLCB1aSwgdmFsdWUsIGFyZ3MpIHtcblx0XHRcdHJldHVybiB0aGlzLmVkaXRvckNvbW1hbmRzLmV4ZWNDb21tYW5kKGNtZCwgdWksIHZhbHVlLCBhcmdzKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyBhIGNvbW1hbmQgc3BlY2lmaWMgc3RhdGUsIGZvciBleGFtcGxlIGlmIGJvbGQgaXMgZW5hYmxlZCBvciBub3QuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHF1ZXJ5Q29tbWFuZFN0YXRlXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IGNtZCBDb21tYW5kIHRvIHF1ZXJ5IHN0YXRlIGZyb20uXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gQ29tbWFuZCBzcGVjaWZpYyBzdGF0ZSwgZm9yIGV4YW1wbGUgaWYgYm9sZCBpcyBlbmFibGVkIG9yIG5vdC5cblx0XHQgKi9cblx0XHRxdWVyeUNvbW1hbmRTdGF0ZTogZnVuY3Rpb24oY21kKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lZGl0b3JDb21tYW5kcy5xdWVyeUNvbW1hbmRTdGF0ZShjbWQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIGEgY29tbWFuZCBzcGVjaWZpYyB2YWx1ZSwgZm9yIGV4YW1wbGUgdGhlIGN1cnJlbnQgZm9udCBzaXplLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBxdWVyeUNvbW1hbmRWYWx1ZVxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBjbWQgQ29tbWFuZCB0byBxdWVyeSB2YWx1ZSBmcm9tLlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gQ29tbWFuZCBzcGVjaWZpYyB2YWx1ZSwgZm9yIGV4YW1wbGUgdGhlIGN1cnJlbnQgZm9udCBzaXplLlxuXHRcdCAqL1xuXHRcdHF1ZXJ5Q29tbWFuZFZhbHVlOiBmdW5jdGlvbihjbWQpIHtcblx0XHRcdHJldHVybiB0aGlzLmVkaXRvckNvbW1hbmRzLnF1ZXJ5Q29tbWFuZFZhbHVlKGNtZCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiB0aGUgY29tbWFuZCBpcyBzdXBwb3J0ZWQgb3Igbm90LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBxdWVyeUNvbW1hbmRTdXBwb3J0ZWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY21kIENvbW1hbmQgdGhhdCB3ZSBjaGVjayBzdXBwb3J0IGZvci5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBjb21tYW5kIGlzIHN1cHBvcnRlZCBvciBub3QuXG5cdFx0ICovXG5cdFx0cXVlcnlDb21tYW5kU3VwcG9ydGVkOiBmdW5jdGlvbihjbWQpIHtcblx0XHRcdHJldHVybiB0aGlzLmVkaXRvckNvbW1hbmRzLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChjbWQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTaG93cyB0aGUgZWRpdG9yIGFuZCBoaWRlcyBhbnkgdGV4dGFyZWEvZGl2IHRoYXQgdGhlIGVkaXRvciBpcyBzdXBwb3NlZCB0byByZXBsYWNlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzaG93XG5cdFx0ICovXG5cdFx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGlmIChzZWxmLmhpZGRlbikge1xuXHRcdFx0XHRzZWxmLmhpZGRlbiA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmIChzZWxmLmlubGluZSkge1xuXHRcdFx0XHRcdHNlbGYuZ2V0Qm9keSgpLmNvbnRlbnRFZGl0YWJsZSA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0RE9NLnNob3coc2VsZi5nZXRDb250YWluZXIoKSk7XG5cdFx0XHRcdFx0RE9NLmhpZGUoc2VsZi5pZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxmLmxvYWQoKTtcblx0XHRcdFx0c2VsZi5maXJlKCdzaG93Jyk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEhpZGVzIHRoZSBlZGl0b3IgYW5kIHNob3dzIGFueSB0ZXh0YXJlYS9kaXYgdGhhdCB0aGUgZWRpdG9yIGlzIHN1cHBvc2VkIHRvIHJlcGxhY2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGhpZGVcblx0XHQgKi9cblx0XHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgZG9jID0gc2VsZi5nZXREb2MoKTtcblxuXHRcdFx0aWYgKCFzZWxmLmhpZGRlbikge1xuXHRcdFx0XHQvLyBGaXhlZCBidWcgd2hlcmUgSUUgaGFzIGEgYmxpbmtpbmcgY3Vyc29yIGxlZnQgZnJvbSB0aGUgZWRpdG9yXG5cdFx0XHRcdGlmIChpZSAmJiBkb2MgJiYgIXNlbGYuaW5saW5lKSB7XG5cdFx0XHRcdFx0ZG9jLmV4ZWNDb21tYW5kKCdTZWxlY3RBbGwnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIG11c3Qgc2F2ZSBiZWZvcmUgd2UgaGlkZSBzbyBTYWZhcmkgZG9lc24ndCBjcmFzaFxuXHRcdFx0XHRzZWxmLnNhdmUoKTtcblxuXHRcdFx0XHRpZiAoc2VsZi5pbmxpbmUpIHtcblx0XHRcdFx0XHRzZWxmLmdldEJvZHkoKS5jb250ZW50RWRpdGFibGUgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGUgZWRpdG9yIGdldHMgYmx1cnJlZFxuXHRcdFx0XHRcdGlmIChzZWxmID09IHNlbGYuZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yKSB7XG5cdFx0XHRcdFx0XHRzZWxmLmVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvciA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdERPTS5oaWRlKHNlbGYuZ2V0Q29udGFpbmVyKCkpO1xuXHRcdFx0XHRcdERPTS5zZXRTdHlsZShzZWxmLmlkLCAnZGlzcGxheScsIHNlbGYub3JnRGlzcGxheSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxmLmhpZGRlbiA9IHRydWU7XG5cdFx0XHRcdHNlbGYuZmlyZSgnaGlkZScpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgdGhlIGVkaXRvciBpcyBoaWRkZW4gb3Igbm90LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpc0hpZGRlblxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUvZmFsc2UgaWYgdGhlIGVkaXRvciBpcyBoaWRkZW4gb3Igbm90LlxuXHRcdCAqL1xuXHRcdGlzSGlkZGVuOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiAhIXRoaXMuaGlkZGVuO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBwcm9ncmVzcyBzdGF0ZSwgdGhpcyB3aWxsIGRpc3BsYXkgYSB0aHJvYmJlci9wcm9nZXNzIGZvciB0aGUgZWRpdG9yLlxuXHRcdCAqIFRoaXMgaXMgaWRlYWwgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGxpa2UgYW4gQUpBWCBzYXZlIGNhbGwuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNldFByb2dyZXNzU3RhdGVcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHN0YXRlIEJvb2xlYW4gc3RhdGUgaWYgdGhlIHByb2dyZXNzIHNob3VsZCBiZSBzaG93biBvciBoaWRkZW4uXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHRpbWUgT3B0aW9uYWwgdGltZSB0byB3YWl0IGJlZm9yZSB0aGUgcHJvZ3Jlc3MgZ2V0cyBzaG93bi5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBTYW1lIGFzIHRoZSBpbnB1dCBzdGF0ZS5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIFNob3cgcHJvZ3Jlc3MgZm9yIHRoZSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2V0UHJvZ3Jlc3NTdGF0ZSh0cnVlKTtcblx0XHQgKlxuXHRcdCAqIC8vIEhpZGUgcHJvZ3Jlc3MgZm9yIHRoZSBhY3RpdmUgZWRpdG9yXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2V0UHJvZ3Jlc3NTdGF0ZShmYWxzZSk7XG5cdFx0ICpcblx0XHQgKiAvLyBTaG93IHByb2dyZXNzIGFmdGVyIDMgc2Vjb25kc1xuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLnNldFByb2dyZXNzU3RhdGUodHJ1ZSwgMzAwMCk7XG5cdFx0ICovXG5cdFx0c2V0UHJvZ3Jlc3NTdGF0ZTogZnVuY3Rpb24oc3RhdGUsIHRpbWUpIHtcblx0XHRcdHRoaXMuZmlyZSgnUHJvZ3Jlc3NTdGF0ZScsIHtzdGF0ZTogc3RhdGUsIHRpbWU6IHRpbWV9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTG9hZHMgY29udGVudHMgZnJvbSB0aGUgdGV4dGFyZWEgb3IgZGl2IGVsZW1lbnQgdGhhdCBnb3QgY29udmVydGVkIGludG8gYW4gZWRpdG9yIGluc3RhbmNlLlxuXHRcdCAqIFRoaXMgbWV0aG9kIHdpbGwgbW92ZSB0aGUgY29udGVudHMgZnJvbSB0aGF0IHRleHRhcmVhIG9yIGRpdiBpbnRvIHRoZSBlZGl0b3IgYnkgdXNpbmcgc2V0Q29udGVudFxuXHRcdCAqIHNvIGFsbCBldmVudHMgZXRjIHRoYXQgbWV0aG9kIGhhcyB3aWxsIGdldCBkaXNwYXRjaGVkIGFzIHdlbGwuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGxvYWRcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gYXJncyBPcHRpb25hbCBjb250ZW50IG9iamVjdCwgdGhpcyBnZXRzIHBhc3NlZCBhcm91bmQgdGhyb3VnaCB0aGUgd2hvbGUgbG9hZCBwcm9jZXNzLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCBzdHJpbmcgdGhhdCBnb3Qgc2V0IGludG8gdGhlIGVkaXRvci5cblx0XHQgKi9cblx0XHRsb2FkOiBmdW5jdGlvbihhcmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGVsbSA9IHNlbGYuZ2V0RWxlbWVudCgpLCBodG1sO1xuXG5cdFx0XHRpZiAoZWxtKSB7XG5cdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IHt9O1xuXHRcdFx0XHRhcmdzLmxvYWQgPSB0cnVlO1xuXG5cdFx0XHRcdGh0bWwgPSBzZWxmLnNldENvbnRlbnQoZWxtLnZhbHVlICE9PSB1bmRlZmluZWQgPyBlbG0udmFsdWUgOiBlbG0uaW5uZXJIVE1MLCBhcmdzKTtcblx0XHRcdFx0YXJncy5lbGVtZW50ID0gZWxtO1xuXG5cdFx0XHRcdGlmICghYXJncy5ub19ldmVudHMpIHtcblx0XHRcdFx0XHRzZWxmLmZpcmUoJ0xvYWRDb250ZW50JywgYXJncyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhcmdzLmVsZW1lbnQgPSBlbG0gPSBudWxsO1xuXG5cdFx0XHRcdHJldHVybiBodG1sO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTYXZlcyB0aGUgY29udGVudHMgZnJvbSBhIGVkaXRvciBvdXQgdG8gdGhlIHRleHRhcmVhIG9yIGRpdiBlbGVtZW50IHRoYXQgZ290IGNvbnZlcnRlZCBpbnRvIGFuIGVkaXRvciBpbnN0YW5jZS5cblx0XHQgKiBUaGlzIG1ldGhvZCB3aWxsIG1vdmUgdGhlIEhUTUwgY29udGVudHMgZnJvbSB0aGUgZWRpdG9yIGludG8gdGhhdCB0ZXh0YXJlYSBvciBkaXYgYnkgZ2V0Q29udGVudFxuXHRcdCAqIHNvIGFsbCBldmVudHMgZXRjIHRoYXQgbWV0aG9kIGhhcyB3aWxsIGdldCBkaXNwYXRjaGVkIGFzIHdlbGwuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNhdmVcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gYXJncyBPcHRpb25hbCBjb250ZW50IG9iamVjdCwgdGhpcyBnZXRzIHBhc3NlZCBhcm91bmQgdGhyb3VnaCB0aGUgd2hvbGUgc2F2ZSBwcm9jZXNzLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCBzdHJpbmcgdGhhdCBnb3Qgc2V0IGludG8gdGhlIHRleHRhcmVhL2Rpdi5cblx0XHQgKi9cblx0XHRzYXZlOiBmdW5jdGlvbihhcmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGVsbSA9IHNlbGYuZ2V0RWxlbWVudCgpLCBodG1sLCBmb3JtO1xuXG5cdFx0XHRpZiAoIWVsbSB8fCAhc2VsZi5pbml0aWFsaXplZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGFyZ3MgPSBhcmdzIHx8IHt9O1xuXHRcdFx0YXJncy5zYXZlID0gdHJ1ZTtcblxuXHRcdFx0YXJncy5lbGVtZW50ID0gZWxtO1xuXHRcdFx0aHRtbCA9IGFyZ3MuY29udGVudCA9IHNlbGYuZ2V0Q29udGVudChhcmdzKTtcblxuXHRcdFx0aWYgKCFhcmdzLm5vX2V2ZW50cykge1xuXHRcdFx0XHRzZWxmLmZpcmUoJ1NhdmVDb250ZW50JywgYXJncyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFsd2F5cyBydW4gdGhpcyBpbnRlcm5hbCBldmVudFxuXHRcdFx0aWYgKGFyZ3MuZm9ybWF0ID09ICdyYXcnKSB7XG5cdFx0XHRcdHNlbGYuZmlyZSgnUmF3U2F2ZUNvbnRlbnQnLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0aHRtbCA9IGFyZ3MuY29udGVudDtcblxuXHRcdFx0aWYgKCEvVEVYVEFSRUF8SU5QVVQvaS50ZXN0KGVsbS5ub2RlTmFtZSkpIHtcblx0XHRcdFx0Ly8gVXBkYXRlIERJViBlbGVtZW50IHdoZW4gbm90IGluIGlubGluZSBtb2RlXG5cdFx0XHRcdGlmICghc2VsZi5pbmxpbmUpIHtcblx0XHRcdFx0XHRlbG0uaW5uZXJIVE1MID0gaHRtbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVwZGF0ZSBoaWRkZW4gZm9ybSBlbGVtZW50XG5cdFx0XHRcdGlmICgoZm9ybSA9IERPTS5nZXRQYXJlbnQoc2VsZi5pZCwgJ2Zvcm0nKSkpIHtcblx0XHRcdFx0XHRlYWNoKGZvcm0uZWxlbWVudHMsIGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0XHRcdFx0aWYgKGVsbS5uYW1lID09IHNlbGYuaWQpIHtcblx0XHRcdFx0XHRcdFx0ZWxtLnZhbHVlID0gaHRtbDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbG0udmFsdWUgPSBodG1sO1xuXHRcdFx0fVxuXG5cdFx0XHRhcmdzLmVsZW1lbnQgPSBlbG0gPSBudWxsO1xuXG5cdFx0XHRpZiAoYXJncy5zZXRfZGlydHkgIT09IGZhbHNlKSB7XG5cdFx0XHRcdHNlbGYuc2V0RGlydHkoZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaHRtbDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgdG8gdGhlIGVkaXRvciBpbnN0YW5jZSwgdGhpcyB3aWxsIGNsZWFudXAgdGhlIGNvbnRlbnQgYmVmb3JlIGl0IGdldHMgc2V0IHVzaW5nXG5cdFx0ICogdGhlIGRpZmZlcmVudCBjbGVhbnVwIHJ1bGVzIG9wdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNldENvbnRlbnRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudCBDb250ZW50IHRvIHNldCB0byBlZGl0b3IsIG5vcm1hbGx5IEhUTUwgY29udGVudHMgYnV0IGNhbiBiZSBvdGhlciBmb3JtYXRzIGFzIHdlbGwuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgT3B0aW9uYWwgY29udGVudCBvYmplY3QsIHRoaXMgZ2V0cyBwYXNzZWQgYXJvdW5kIHRocm91Z2ggdGhlIHdob2xlIHNldCBwcm9jZXNzLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCBzdHJpbmcgdGhhdCBnb3Qgc2V0IGludG8gdGhlIGVkaXRvci5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIFNldHMgdGhlIEhUTUwgY29udGVudHMgb2YgdGhlIGFjdGl2ZUVkaXRvciBlZGl0b3Jcblx0XHQgKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5zZXRDb250ZW50KCc8c3Bhbj5zb21lPC9zcGFuPiBodG1sJyk7XG5cdFx0ICpcblx0XHQgKiAvLyBTZXRzIHRoZSByYXcgY29udGVudHMgb2YgdGhlIGFjdGl2ZUVkaXRvciBlZGl0b3Jcblx0XHQgKiB0aW55bWNlLmFjdGl2ZUVkaXRvci5zZXRDb250ZW50KCc8c3Bhbj5zb21lPC9zcGFuPiBodG1sJywge2Zvcm1hdDogJ3Jhdyd9KTtcblx0XHQgKlxuXHRcdCAqIC8vIFNldHMgdGhlIGNvbnRlbnQgb2YgYSBzcGVjaWZpYyBlZGl0b3IgKG15X2VkaXRvciBpbiB0aGlzIGV4YW1wbGUpXG5cdFx0ICogdGlueW1jZS5nZXQoJ215X2VkaXRvcicpLnNldENvbnRlbnQoZGF0YSk7XG5cdFx0ICpcblx0XHQgKiAvLyBTZXRzIHRoZSBiYmNvZGUgY29udGVudHMgb2YgdGhlIGFjdGl2ZUVkaXRvciBlZGl0b3IgaWYgdGhlIGJiY29kZSBwbHVnaW4gd2FzIGFkZGVkXG5cdFx0ICogdGlueW1jZS5hY3RpdmVFZGl0b3Iuc2V0Q29udGVudCgnW2Jdc29tZVsvYl0gaHRtbCcsIHtmb3JtYXQ6ICdiYmNvZGUnfSk7XG5cdFx0ICovXG5cdFx0c2V0Q29udGVudDogZnVuY3Rpb24oY29udGVudCwgYXJncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBib2R5ID0gc2VsZi5nZXRCb2R5KCksIGZvcmNlZFJvb3RCbG9ja05hbWUsIHBhZGQ7XG5cblx0XHRcdC8vIFNldHVwIGFyZ3Mgb2JqZWN0XG5cdFx0XHRhcmdzID0gYXJncyB8fCB7fTtcblx0XHRcdGFyZ3MuZm9ybWF0ID0gYXJncy5mb3JtYXQgfHwgJ2h0bWwnO1xuXHRcdFx0YXJncy5zZXQgPSB0cnVlO1xuXHRcdFx0YXJncy5jb250ZW50ID0gY29udGVudDtcblxuXHRcdFx0Ly8gRG8gcHJlcHJvY2Vzc2luZ1xuXHRcdFx0aWYgKCFhcmdzLm5vX2V2ZW50cykge1xuXHRcdFx0XHRzZWxmLmZpcmUoJ0JlZm9yZVNldENvbnRlbnQnLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGVudCA9IGFyZ3MuY29udGVudDtcblxuXHRcdFx0Ly8gUGFkZCBlbXB0eSBjb250ZW50IGluIEdlY2tvIGFuZCBTYWZhcmkuIENvbW1hbmRzIHdpbGwgb3RoZXJ3aXNlIGZhaWwgb24gdGhlIGNvbnRlbnRcblx0XHRcdC8vIEl0IHdpbGwgYWxzbyBiZSBpbXBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbiB0aGUgZWRpdG9yIHVubGVzcyB0aGVyZSBpcyBhIEJSIGVsZW1lbnQgcHJlc2VudFxuXHRcdFx0aWYgKGNvbnRlbnQubGVuZ3RoID09PSAwIHx8IC9eXFxzKyQvLnRlc3QoY29udGVudCkpIHtcblx0XHRcdFx0cGFkZCA9IGllICYmIGllIDwgMTEgPyAnJyA6ICc8YnIgZGF0YS1tY2UtYm9ndXM9XCIxXCI+JztcblxuXHRcdFx0XHQvLyBUb2RvOiBUaGVyZSBpcyBhIGxvdCBtb3JlIHJvb3QgZWxlbWVudHMgdGhhdCBuZWVkIHNwZWNpYWwgcGFkZGluZ1xuXHRcdFx0XHQvLyBzbyBzZXBhcmF0ZSB0aGlzIGFuZCBhZGQgYWxsIG9mIHRoZW0gYXQgc29tZSBwb2ludC5cblx0XHRcdFx0aWYgKGJvZHkubm9kZU5hbWUgPT0gJ1RBQkxFJykge1xuXHRcdFx0XHRcdGNvbnRlbnQgPSAnPHRyPjx0ZD4nICsgcGFkZCArICc8L3RkPjwvdHI+Jztcblx0XHRcdFx0fSBlbHNlIGlmICgvXihVTHxPTCkkLy50ZXN0KGJvZHkubm9kZU5hbWUpKSB7XG5cdFx0XHRcdFx0Y29udGVudCA9ICc8bGk+JyArIHBhZGQgKyAnPC9saT4nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yY2VkUm9vdEJsb2NrTmFtZSA9IHNlbGYuc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2s7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgZm9yY2VkUm9vdEJsb2NrIGlzIGNvbmZpZ3VyZWQgYW5kIHRoYXQgdGhlIGJsb2NrIGlzIGEgdmFsaWQgY2hpbGQgb2YgdGhlIGJvZHlcblx0XHRcdFx0aWYgKGZvcmNlZFJvb3RCbG9ja05hbWUgJiYgc2VsZi5zY2hlbWEuaXNWYWxpZENoaWxkKGJvZHkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgZm9yY2VkUm9vdEJsb2NrTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuXHRcdFx0XHRcdC8vIFBhZGQgd2l0aCBib2d1cyBCUiBlbGVtZW50cyBvbiBtb2Rlcm4gYnJvd3NlcnMgYW5kIElFIDcgYW5kIDggc2luY2UgdGhleSBkb24ndCByZW5kZXIgZW1wdHkgUCB0YWdzIHByb3Blcmx5XG5cdFx0XHRcdFx0Y29udGVudCA9IHBhZGQ7XG5cdFx0XHRcdFx0Y29udGVudCA9IHNlbGYuZG9tLmNyZWF0ZUhUTUwoZm9yY2VkUm9vdEJsb2NrTmFtZSwgc2VsZi5zZXR0aW5ncy5mb3JjZWRfcm9vdF9ibG9ja19hdHRycywgY29udGVudCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWllICYmICFjb250ZW50KSB7XG5cdFx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhZGQgYSBCUiB3aGVuIGZvcmNlZF9yb290X2Jsb2NrIGlzIGRpc2FibGVkIG9uIG5vbiBJRSBicm93c2VycyB0byBwbGFjZSB0aGUgY2FyZXRcblx0XHRcdFx0XHRjb250ZW50ID0gJzxiciBkYXRhLW1jZS1ib2d1cz1cIjFcIj4nO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5kb20uc2V0SFRNTChib2R5LCBjb250ZW50KTtcblxuXHRcdFx0XHRzZWxmLmZpcmUoJ1NldENvbnRlbnQnLCBhcmdzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFBhcnNlIGFuZCBzZXJpYWxpemUgdGhlIGh0bWxcblx0XHRcdFx0aWYgKGFyZ3MuZm9ybWF0ICE9PSAncmF3Jykge1xuXHRcdFx0XHRcdGNvbnRlbnQgPSBuZXcgU2VyaWFsaXplcih7XG5cdFx0XHRcdFx0XHR2YWxpZGF0ZTogc2VsZi52YWxpZGF0ZVxuXHRcdFx0XHRcdH0sIHNlbGYuc2NoZW1hKS5zZXJpYWxpemUoXG5cdFx0XHRcdFx0XHRzZWxmLnBhcnNlci5wYXJzZShjb250ZW50LCB7aXNSb290Q29udGVudDogdHJ1ZX0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCB0aGUgbmV3IGNsZWFuZWQgY29udGVudHMgdG8gdGhlIGVkaXRvclxuXHRcdFx0XHRhcmdzLmNvbnRlbnQgPSB0cmltKGNvbnRlbnQpO1xuXHRcdFx0XHRzZWxmLmRvbS5zZXRIVE1MKGJvZHksIGFyZ3MuY29udGVudCk7XG5cblx0XHRcdFx0Ly8gRG8gcG9zdCBwcm9jZXNzaW5nXG5cdFx0XHRcdGlmICghYXJncy5ub19ldmVudHMpIHtcblx0XHRcdFx0XHRzZWxmLmZpcmUoJ1NldENvbnRlbnQnLCBhcmdzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIERvbid0IG5vcm1hbGl6ZSBzZWxlY3Rpb24gaWYgdGhlIGZvY3VzZWQgZWxlbWVudCBpc24ndCB0aGUgYm9keSBpblxuXHRcdFx0XHQvLyBjb250ZW50IGVkaXRhYmxlIG1vZGUgc2luY2UgaXQgd2lsbCBzdGVhbCBmb2N1cyBvdGhlcndpc2Vcblx0XHRcdFx0LyppZiAoIXNlbGYuc2V0dGluZ3MuY29udGVudF9lZGl0YWJsZSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBzZWxmLmdldEJvZHkoKSkge1xuXHRcdFx0XHRcdHNlbGYuc2VsZWN0aW9uLm5vcm1hbGl6ZSgpO1xuXHRcdFx0XHR9Ki9cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGFyZ3MuY29udGVudDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogR2V0cyB0aGUgY29udGVudCBmcm9tIHRoZSBlZGl0b3IgaW5zdGFuY2UsIHRoaXMgd2lsbCBjbGVhbnVwIHRoZSBjb250ZW50IGJlZm9yZSBpdCBnZXRzIHJldHVybmVkIHVzaW5nXG5cdFx0ICogdGhlIGRpZmZlcmVudCBjbGVhbnVwIHJ1bGVzIG9wdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldENvbnRlbnRcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gYXJncyBPcHRpb25hbCBjb250ZW50IG9iamVjdCwgdGhpcyBnZXRzIHBhc3NlZCBhcm91bmQgdGhyb3VnaCB0aGUgd2hvbGUgZ2V0IHByb2Nlc3MuXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBDbGVhbmVkIGNvbnRlbnQgc3RyaW5nLCBub3JtYWxseSBIVE1MIGNvbnRlbnRzLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gR2V0IHRoZSBIVE1MIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVkaXRvclxuXHRcdCAqIGNvbnNvbGUuZGVidWcodGlueW1jZS5hY3RpdmVFZGl0b3IuZ2V0Q29udGVudCgpKTtcblx0XHQgKlxuXHRcdCAqIC8vIEdldCB0aGUgcmF3IGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVkaXRvclxuXHRcdCAqIHRpbnltY2UuYWN0aXZlRWRpdG9yLmdldENvbnRlbnQoe2Zvcm1hdDogJ3Jhdyd9KTtcblx0XHQgKlxuXHRcdCAqIC8vIEdldCBjb250ZW50IG9mIGEgc3BlY2lmaWMgZWRpdG9yOlxuXHRcdCAqIHRpbnltY2UuZ2V0KCdjb250ZW50IGlkJykuZ2V0Q29udGVudCgpXG5cdFx0ICovXG5cdFx0Z2V0Q29udGVudDogZnVuY3Rpb24oYXJncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBjb250ZW50LCBib2R5ID0gc2VsZi5nZXRCb2R5KCk7XG5cblx0XHRcdC8vIFNldHVwIGFyZ3Mgb2JqZWN0XG5cdFx0XHRhcmdzID0gYXJncyB8fCB7fTtcblx0XHRcdGFyZ3MuZm9ybWF0ID0gYXJncy5mb3JtYXQgfHwgJ2h0bWwnO1xuXHRcdFx0YXJncy5nZXQgPSB0cnVlO1xuXHRcdFx0YXJncy5nZXRJbm5lciA9IHRydWU7XG5cblx0XHRcdC8vIERvIHByZXByb2Nlc3Npbmdcblx0XHRcdGlmICghYXJncy5ub19ldmVudHMpIHtcblx0XHRcdFx0c2VsZi5maXJlKCdCZWZvcmVHZXRDb250ZW50JywgYXJncyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEdldCByYXcgY29udGVudHMgb3IgYnkgZGVmYXVsdCB0aGUgY2xlYW5lZCBjb250ZW50c1xuXHRcdFx0aWYgKGFyZ3MuZm9ybWF0ID09ICdyYXcnKSB7XG5cdFx0XHRcdGNvbnRlbnQgPSBUb29scy50cmltKHNlbGYuc2VyaWFsaXplci5nZXRUcmltbWVkQ29udGVudCgpKTtcblx0XHRcdH0gZWxzZSBpZiAoYXJncy5mb3JtYXQgPT0gJ3RleHQnKSB7XG5cdFx0XHRcdGNvbnRlbnQgPSBib2R5LmlubmVyVGV4dCB8fCBib2R5LnRleHRDb250ZW50O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGVudCA9IHNlbGYuc2VyaWFsaXplci5zZXJpYWxpemUoYm9keSwgYXJncyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyaW0gd2hpdGVzcGFjZSBpbiBiZWdpbm5pbmcvZW5kIG9mIEhUTUxcblx0XHRcdGlmIChhcmdzLmZvcm1hdCAhPSAndGV4dCcpIHtcblx0XHRcdFx0YXJncy5jb250ZW50ID0gdHJpbShjb250ZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFyZ3MuY29udGVudCA9IGNvbnRlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERvIHBvc3QgcHJvY2Vzc2luZ1xuXHRcdFx0aWYgKCFhcmdzLm5vX2V2ZW50cykge1xuXHRcdFx0XHRzZWxmLmZpcmUoJ0dldENvbnRlbnQnLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGFyZ3MuY29udGVudDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW5zZXJ0cyBjb250ZW50IGF0IGNhcmV0IHBvc2l0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpbnNlcnRDb250ZW50XG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnQgQ29udGVudCB0byBpbnNlcnQuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGFyZ3MgT3B0aW9uYWwgYXJncyB0byBwYXNzIHRvIGluc2VydCBjYWxsLlxuXHRcdCAqL1xuXHRcdGluc2VydENvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRlbnQsIGFyZ3MpIHtcblx0XHRcdGlmIChhcmdzKSB7XG5cdFx0XHRcdGNvbnRlbnQgPSBleHRlbmQoe2NvbnRlbnQ6IGNvbnRlbnR9LCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIGZhbHNlLCBjb250ZW50KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBlZGl0b3IgaXMgZGlydHkgb3Igbm90LiBJdCB3aWxsIGdldCBkaXJ0eSBpZiB0aGUgdXNlciBoYXMgbWFkZSBtb2RpZmljYXRpb25zIHRvIHRoZSBjb250ZW50cy5cblx0XHQgKlxuXHRcdCAqIFRoZSBkaXJ0eSBzdGF0ZSBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlIGlmIHlvdSBkbyBtb2RpZmljYXRpb25zIHRvIHRoZSBjb250ZW50IGluIG90aGVyXG5cdFx0ICogd29yZHMgd2hlbiBuZXcgdW5kbyBsZXZlbHMgaXMgY3JlYXRlZCBvciBpZiB5b3UgdW5kby9yZWRvIHRvIHVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGVkaXRvci4gSXQgd2lsbCBhbHNvIGJlIHNldFxuXHRcdCAqIHRvIGZhbHNlIGlmIHlvdSBjYWxsIGVkaXRvci5zYXZlKCkuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGlzRGlydHlcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlL2ZhbHNlIGlmIHRoZSBlZGl0b3IgaXMgZGlydHkgb3Igbm90LiBJdCB3aWxsIGdldCBkaXJ0eSBpZiB0aGUgdXNlciBoYXMgbWFkZSBtb2RpZmljYXRpb25zIHRvIHRoZSBjb250ZW50cy5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGlmICh0aW55bWNlLmFjdGl2ZUVkaXRvci5pc0RpcnR5KCkpXG5cdFx0ICogICAgIGFsZXJ0KFwiWW91IG11c3Qgc2F2ZSB5b3VyIGNvbnRlbnRzLlwiKTtcblx0XHQgKi9cblx0XHRpc0RpcnR5OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiAhdGhpcy5pc05vdERpcnR5O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBFeHBsaWNpdGx5IHNldHMgdGhlIGRpcnR5IHN0YXRlLiBUaGlzIHdpbGwgZmlyZSB0aGUgZGlydHkgZXZlbnQgaWYgdGhlIGVkaXRvciBkaXJ0eSBzdGF0ZSBpcyBjaGFuZ2VkIGZyb20gZmFsc2UgdG8gdHJ1ZVxuXHRcdCAqIGJ5IGludm9raW5nIHRoaXMgbWV0aG9kLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXREaXJ0eVxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc3RhdGUgVHJ1ZS9mYWxzZSBpZiB0aGUgZWRpdG9yIGlzIGNvbnNpZGVyZWQgZGlydHkuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBmdW5jdGlvbiBhamF4U2F2ZSgpIHtcblx0XHQgKiAgICAgdmFyIGVkaXRvciA9IHRpbnltY2UuZ2V0KCdlbG0xJyk7XG5cdFx0ICpcblx0XHQgKiAgICAgLy8gU2F2ZSBjb250ZW50cyB1c2luZyBzb21lIFhIUiBjYWxsXG5cdFx0ICogICAgIGFsZXJ0KGVkaXRvci5nZXRDb250ZW50KCkpO1xuXHRcdCAqXG5cdFx0ICogICAgIGVkaXRvci5zZXREaXJ0eShmYWxzZSk7IC8vIEZvcmNlIG5vdCBkaXJ0eSBzdGF0ZVxuXHRcdCAqIH1cblx0XHQgKi9cblx0XHRzZXREaXJ0eTogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdHZhciBvbGRTdGF0ZSA9ICF0aGlzLmlzTm90RGlydHk7XG5cblx0XHRcdHRoaXMuaXNOb3REaXJ0eSA9ICFzdGF0ZTtcblxuXHRcdFx0aWYgKHN0YXRlICYmIHN0YXRlICE9IG9sZFN0YXRlKSB7XG5cdFx0XHRcdHRoaXMuZmlyZSgnZGlydHknKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgZWRpdG9yIG1vZGUuIE1vZGUgY2FuIGJlIGZvciBleGFtcGxlIFwiZGVzaWduXCIsIFwiY29kZVwiIG9yIFwicmVhZG9ubHlcIi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0TW9kZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBtb2RlIE1vZGUgdG8gc2V0IHRoZSBlZGl0b3IgaW4uXG5cdFx0ICovXG5cdFx0c2V0TW9kZTogZnVuY3Rpb24obW9kZSkge1xuXHRcdFx0TW9kZS5zZXRNb2RlKHRoaXMsIG1vZGUpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBlZGl0b3JzIGNvbnRhaW5lciBlbGVtZW50LiBUaGUgY29udGFpbmVyIGVsZW1lbnQgd3JhcHBlcyBpblxuXHRcdCAqIGFsbCB0aGUgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHBhZ2UgZm9yIHRoZSBlZGl0b3IuIFN1Y2ggYXMgVUksIGlmcmFtZSBldGMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldENvbnRhaW5lclxuXHRcdCAqIEByZXR1cm4ge0VsZW1lbnR9IEhUTUwgRE9NIGVsZW1lbnQgZm9yIHRoZSBlZGl0b3IgY29udGFpbmVyLlxuXHRcdCAqL1xuXHRcdGdldENvbnRhaW5lcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGlmICghc2VsZi5jb250YWluZXIpIHtcblx0XHRcdFx0c2VsZi5jb250YWluZXIgPSBET00uZ2V0KHNlbGYuZWRpdG9yQ29udGFpbmVyIHx8IHNlbGYuaWQgKyAnX3BhcmVudCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZi5jb250YWluZXI7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGVkaXRvcnMgY29udGVudCBhcmVhIGNvbnRhaW5lciBlbGVtZW50LiBUaGUgdGhpcyBlbGVtZW50IGlzIHRoZSBvbmUgd2hvXG5cdFx0ICogaG9sZHMgdGhlIGlmcmFtZSBvciB0aGUgZWRpdGFibGUgZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0Q29udGVudEFyZWFDb250YWluZXJcblx0XHQgKiBAcmV0dXJuIHtFbGVtZW50fSBIVE1MIERPTSBlbGVtZW50IGZvciB0aGUgZWRpdG9yIGFyZWEgY29udGFpbmVyLlxuXHRcdCAqL1xuXHRcdGdldENvbnRlbnRBcmVhQ29udGFpbmVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnRBcmVhQ29udGFpbmVyO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0YXJnZXQgZWxlbWVudC90ZXh0YXJlYSB0aGF0IGdvdCByZXBsYWNlZCB3aXRoIGEgVGlueU1DRSBlZGl0b3IgaW5zdGFuY2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldEVsZW1lbnRcblx0XHQgKiBAcmV0dXJuIHtFbGVtZW50fSBIVE1MIERPTSBlbGVtZW50IGZvciB0aGUgcmVwbGFjZWQgZWxlbWVudC5cblx0XHQgKi9cblx0XHRnZXRFbGVtZW50OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICghdGhpcy50YXJnZXRFbG0pIHtcblx0XHRcdFx0dGhpcy50YXJnZXRFbG0gPSBET00uZ2V0KHRoaXMuaWQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy50YXJnZXRFbG07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGlmcmFtZXMgd2luZG93IG9iamVjdC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZ2V0V2luXG5cdFx0ICogQHJldHVybiB7V2luZG93fSBJZnJhbWUgRE9NIHdpbmRvdyBvYmplY3QuXG5cdFx0ICovXG5cdFx0Z2V0V2luOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgZWxtO1xuXG5cdFx0XHRpZiAoIXNlbGYuY29udGVudFdpbmRvdykge1xuXHRcdFx0XHRlbG0gPSBzZWxmLmlmcmFtZUVsZW1lbnQ7XG5cblx0XHRcdFx0aWYgKGVsbSkge1xuXHRcdFx0XHRcdHNlbGYuY29udGVudFdpbmRvdyA9IGVsbS5jb250ZW50V2luZG93O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmLmNvbnRlbnRXaW5kb3c7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGlmcmFtZXMgZG9jdW1lbnQgb2JqZWN0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXREb2Ncblx0XHQgKiBAcmV0dXJuIHtEb2N1bWVudH0gSWZyYW1lIERPTSBkb2N1bWVudCBvYmplY3QuXG5cdFx0ICovXG5cdFx0Z2V0RG9jOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgd2luO1xuXG5cdFx0XHRpZiAoIXNlbGYuY29udGVudERvY3VtZW50KSB7XG5cdFx0XHRcdHdpbiA9IHNlbGYuZ2V0V2luKCk7XG5cblx0XHRcdFx0aWYgKHdpbikge1xuXHRcdFx0XHRcdHNlbGYuY29udGVudERvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmLmNvbnRlbnREb2N1bWVudDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBlZGl0YWJsZSBhcmVhLlxuXHRcdCAqIEZvciBhIG5vbi1pbmxpbmUgaWZyYW1lLWJhc2VkIGVkaXRvciwgcmV0dXJucyB0aGUgaWZyYW1lJ3MgYm9keSBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRCb2R5XG5cdFx0ICogQHJldHVybiB7RWxlbWVudH0gVGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgZWRpdGFibGUgYXJlYS5cblx0XHQgKi9cblx0XHRnZXRCb2R5OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkb2MgPSB0aGlzLmdldERvYygpO1xuXHRcdFx0cmV0dXJuIHRoaXMuYm9keUVsZW1lbnQgfHwgKGRvYyA/IGRvYy5ib2R5IDogbnVsbCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFVSTCBjb252ZXJ0ZXIgZnVuY3Rpb24gdGhpcyBnZXRzIGV4ZWN1dGVkIGVhY2ggdGltZSBhIHVzZXIgYWRkcyBhbiBpbWcsIGEgb3Jcblx0XHQgKiBhbnkgb3RoZXIgZWxlbWVudCB0aGF0IGhhcyBhIFVSTCBpbiBpdC4gVGhpcyB3aWxsIGJlIGNhbGxlZCBib3RoIGJ5IHRoZSBET00gYW5kIEhUTUxcblx0XHQgKiBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBjb252ZXJ0VVJMXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgdG8gY29udmVydC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBdHRyaWJ1dGUgbmFtZSBzcmMsIGhyZWYgZXRjLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nL0hUTUxFbGVtZW50fSBlbG0gVGFnIG5hbWUgb3IgSFRNTCBET00gZWxlbWVudCBkZXBlbmRpbmcgb24gSFRNTCBvciBET00gaW5zZXJ0LlxuXHRcdCAqIEByZXR1cm4ge3N0cmluZ30gQ29udmVydGVkIFVSTCBzdHJpbmcuXG5cdFx0ICovXG5cdFx0Y29udmVydFVSTDogZnVuY3Rpb24odXJsLCBuYW1lLCBlbG0pIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzO1xuXG5cdFx0XHQvLyBVc2UgY2FsbGJhY2sgaW5zdGVhZFxuXHRcdFx0aWYgKHNldHRpbmdzLnVybGNvbnZlcnRlcl9jYWxsYmFjaykge1xuXHRcdFx0XHRyZXR1cm4gc2VsZi5leGVjQ2FsbGJhY2soJ3VybGNvbnZlcnRlcl9jYWxsYmFjaycsIHVybCwgZWxtLCB0cnVlLCBuYW1lKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRG9uJ3QgY29udmVydCBsaW5rIGhyZWYgc2luY2UgdGhhdHMgdGhlIENTUyBmaWxlcyB0aGF0IGdldHMgbG9hZGVkIGludG8gdGhlIGVkaXRvciBhbHNvIHNraXAgbG9jYWwgZmlsZSBVUkxzXG5cdFx0XHRpZiAoIXNldHRpbmdzLmNvbnZlcnRfdXJscyB8fCAoZWxtICYmIGVsbS5ub2RlTmFtZSA9PSAnTElOSycpIHx8IHVybC5pbmRleE9mKCdmaWxlOicpID09PSAwIHx8IHVybC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIHVybDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byByZWxhdGl2ZVxuXHRcdFx0aWYgKHNldHRpbmdzLnJlbGF0aXZlX3VybHMpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYuZG9jdW1lbnRCYXNlVVJJLnRvUmVsYXRpdmUodXJsKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBhYnNvbHV0ZVxuXHRcdFx0dXJsID0gc2VsZi5kb2N1bWVudEJhc2VVUkkudG9BYnNvbHV0ZSh1cmwsIHNldHRpbmdzLnJlbW92ZV9zY3JpcHRfaG9zdCk7XG5cblx0XHRcdHJldHVybiB1cmw7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgdmlzdWFsIGFpZCBmb3IgdGFibGVzLCBhbmNob3JzIGV0YyBzbyB0aGV5IGNhbiBiZSBtb3JlIGVhc2lseSBlZGl0ZWQgaW5zaWRlIHRoZSBlZGl0b3IuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZFZpc3VhbFxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxtIE9wdGlvbmFsIHJvb3QgZWxlbWVudCB0byBsb29wIHRob3VnaCB0byBmaW5kIHRhYmxlcyBldGMgdGhhdCBuZWVkcyB0aGUgdmlzdWFsIGFpZC5cblx0XHQgKi9cblx0XHRhZGRWaXN1YWw6IGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3MsIGRvbSA9IHNlbGYuZG9tLCBjbHM7XG5cblx0XHRcdGVsbSA9IGVsbSB8fCBzZWxmLmdldEJvZHkoKTtcblxuXHRcdFx0aWYgKHNlbGYuaGFzVmlzdWFsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0c2VsZi5oYXNWaXN1YWwgPSBzZXR0aW5ncy52aXN1YWw7XG5cdFx0XHR9XG5cblx0XHRcdGVhY2goZG9tLnNlbGVjdCgndGFibGUsYScsIGVsbSksIGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0XHR2YXIgdmFsdWU7XG5cblx0XHRcdFx0c3dpdGNoIChlbG0ubm9kZU5hbWUpIHtcblx0XHRcdFx0XHRjYXNlICdUQUJMRSc6XG5cdFx0XHRcdFx0XHRjbHMgPSBzZXR0aW5ncy52aXN1YWxfdGFibGVfY2xhc3MgfHwgJ21jZS1pdGVtLXRhYmxlJztcblx0XHRcdFx0XHRcdHZhbHVlID0gZG9tLmdldEF0dHJpYihlbG0sICdib3JkZXInKTtcblxuXHRcdFx0XHRcdFx0aWYgKCghdmFsdWUgfHwgdmFsdWUgPT0gJzAnKSAmJiBzZWxmLmhhc1Zpc3VhbCkge1xuXHRcdFx0XHRcdFx0XHRkb20uYWRkQ2xhc3MoZWxtLCBjbHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZG9tLnJlbW92ZUNsYXNzKGVsbSwgY2xzKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdFx0Y2FzZSAnQSc6XG5cdFx0XHRcdFx0XHRpZiAoIWRvbS5nZXRBdHRyaWIoZWxtLCAnaHJlZicsIGZhbHNlKSkge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IGRvbS5nZXRBdHRyaWIoZWxtLCAnbmFtZScpIHx8IGVsbS5pZDtcblx0XHRcdFx0XHRcdFx0Y2xzID0gc2V0dGluZ3MudmlzdWFsX2FuY2hvcl9jbGFzcyB8fCAnbWNlLWl0ZW0tYW5jaG9yJztcblxuXHRcdFx0XHRcdFx0XHRpZiAodmFsdWUgJiYgc2VsZi5oYXNWaXN1YWwpIHtcblx0XHRcdFx0XHRcdFx0XHRkb20uYWRkQ2xhc3MoZWxtLCBjbHMpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGRvbS5yZW1vdmVDbGFzcyhlbG0sIGNscyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5maXJlKCdWaXN1YWxBaWQnLCB7ZWxlbWVudDogZWxtLCBoYXNWaXN1YWw6IHNlbGYuaGFzVmlzdWFsfSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgdGhlIGVkaXRvciBmcm9tIHRoZSBkb20gYW5kIHRpbnltY2UgY29sbGVjdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlXG5cdFx0ICovXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKCFzZWxmLnJlbW92ZWQpIHtcblx0XHRcdFx0c2VsZi5zYXZlKCk7XG5cdFx0XHRcdHNlbGYucmVtb3ZlZCA9IDE7XG5cdFx0XHRcdHNlbGYudW5iaW5kQWxsTmF0aXZlRXZlbnRzKCk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSBoaWRkZW4gaW5wdXRcblx0XHRcdFx0aWYgKHNlbGYuaGFzSGlkZGVuSW5wdXQpIHtcblx0XHRcdFx0XHRET00ucmVtb3ZlKHNlbGYuZ2V0RWxlbWVudCgpLm5leHRTaWJsaW5nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghc2VsZi5pbmxpbmUpIHtcblx0XHRcdFx0XHQvLyBJRSA5IGhhcyBhIGJ1ZyB3aGVyZSB0aGUgc2VsZWN0aW9uIHN0b3BzIHdvcmtpbmcgaWYgeW91IHBsYWNlIHRoZVxuXHRcdFx0XHRcdC8vIGNhcmV0IGluc2lkZSB0aGUgZWRpdG9yIHRoZW4gcmVtb3ZlIHRoZSBpZnJhbWVcblx0XHRcdFx0XHRpZiAoaWUgJiYgaWUgPCAxMCkge1xuXHRcdFx0XHRcdFx0c2VsZi5nZXREb2MoKS5leGVjQ29tbWFuZCgnU2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdERPTS5zZXRTdHlsZShzZWxmLmlkLCAnZGlzcGxheScsIHNlbGYub3JnRGlzcGxheSk7XG5cdFx0XHRcdFx0c2VsZi5nZXRCb2R5KCkub25sb2FkID0gbnVsbDsgLy8gUHJldmVudCAjNjgxNlxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5maXJlKCdyZW1vdmUnKTtcblxuXHRcdFx0XHRzZWxmLmVkaXRvck1hbmFnZXIucmVtb3ZlKHNlbGYpO1xuXHRcdFx0XHRET00ucmVtb3ZlKHNlbGYuZ2V0Q29udGFpbmVyKCkpO1xuXHRcdFx0XHRzZWxmLl9zZWxlY3Rpb25PdmVycmlkZXMuZGVzdHJveSgpO1xuXHRcdFx0XHRzZWxmLmVkaXRvclVwbG9hZC5kZXN0cm95KCk7XG5cdFx0XHRcdHNlbGYuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBEZXN0cm95cyB0aGUgZWRpdG9yIGluc3RhbmNlIGJ5IHJlbW92aW5nIGFsbCBldmVudHMsIGVsZW1lbnQgcmVmZXJlbmNlcyBvciBvdGhlciByZXNvdXJjZXNcblx0XHQgKiB0aGF0IGNvdWxkIGxlYWsgbWVtb3J5LiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHBhZ2UgaXMgdW5sb2FkZWRcblx0XHQgKiBidXQgeW91IGNhbiBhbHNvIGNhbGwgaXQgZGlyZWN0bHkgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBkZXN0cm95XG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBhdXRvbWF0aWMgT3B0aW9uYWwgc3RhdGUgaWYgdGhlIGRlc3Ryb3kgaXMgYW4gYXV0b21hdGljIGRlc3Ryb3kgb3IgdXNlciBjYWxsZWQgb25lLlxuXHRcdCAqL1xuXHRcdGRlc3Ryb3k6IGZ1bmN0aW9uKGF1dG9tYXRpYykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBmb3JtO1xuXG5cdFx0XHQvLyBPbmUgdGltZSBpcyBlbm91Z2hcblx0XHRcdGlmIChzZWxmLmRlc3Ryb3llZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHVzZXIgbWFudWFsbHkgY2FsbHMgZGVzdHJveSBhbmQgbm90IHJlbW92ZVxuXHRcdFx0Ly8gVXNlcnMgc2VlbXMgdG8gaGF2ZSBsb2dpYyB0aGF0IGNhbGxzIGRlc3Ryb3kgaW5zdGVhZCBvZiByZW1vdmVcblx0XHRcdGlmICghYXV0b21hdGljICYmICFzZWxmLnJlbW92ZWQpIHtcblx0XHRcdFx0c2VsZi5yZW1vdmUoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWF1dG9tYXRpYykge1xuXHRcdFx0XHRzZWxmLmVkaXRvck1hbmFnZXIub2ZmKCdiZWZvcmV1bmxvYWQnLCBzZWxmLl9iZWZvcmVVbmxvYWQpO1xuXG5cdFx0XHRcdC8vIE1hbnVhbCBkZXN0cm95XG5cdFx0XHRcdGlmIChzZWxmLnRoZW1lICYmIHNlbGYudGhlbWUuZGVzdHJveSkge1xuXHRcdFx0XHRcdHNlbGYudGhlbWUuZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRGVzdHJveSBjb250cm9scywgc2VsZWN0aW9uIGFuZCBkb21cblx0XHRcdFx0c2VsZi5zZWxlY3Rpb24uZGVzdHJveSgpO1xuXHRcdFx0XHRzZWxmLmRvbS5kZXN0cm95KCk7XG5cdFx0XHR9XG5cblx0XHRcdGZvcm0gPSBzZWxmLmZvcm1FbGVtZW50O1xuXHRcdFx0aWYgKGZvcm0pIHtcblx0XHRcdFx0aWYgKGZvcm0uX21jZU9sZFN1Ym1pdCkge1xuXHRcdFx0XHRcdGZvcm0uc3VibWl0ID0gZm9ybS5fbWNlT2xkU3VibWl0O1xuXHRcdFx0XHRcdGZvcm0uX21jZU9sZFN1Ym1pdCA9IG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRET00udW5iaW5kKGZvcm0sICdzdWJtaXQgcmVzZXQnLCBzZWxmLmZvcm1FdmVudERlbGVnYXRlKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5jb250ZW50QXJlYUNvbnRhaW5lciA9IHNlbGYuZm9ybUVsZW1lbnQgPSBzZWxmLmNvbnRhaW5lciA9IHNlbGYuZWRpdG9yQ29udGFpbmVyID0gbnVsbDtcblx0XHRcdHNlbGYuYm9keUVsZW1lbnQgPSBzZWxmLmNvbnRlbnREb2N1bWVudCA9IHNlbGYuY29udGVudFdpbmRvdyA9IG51bGw7XG5cdFx0XHRzZWxmLmlmcmFtZUVsZW1lbnQgPSBzZWxmLnRhcmdldEVsbSA9IG51bGw7XG5cblx0XHRcdGlmIChzZWxmLnNlbGVjdGlvbikge1xuXHRcdFx0XHRzZWxmLnNlbGVjdGlvbiA9IHNlbGYuc2VsZWN0aW9uLndpbiA9IHNlbGYuc2VsZWN0aW9uLmRvbSA9IHNlbGYuc2VsZWN0aW9uLmRvbS5kb2MgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLmRlc3Ryb3llZCA9IDE7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFVwbG9hZHMgYWxsIGRhdGEgdXJpL2Jsb2IgdXJpIGltYWdlcyBpbiB0aGUgZWRpdG9yIGNvbnRlbnRzIHRvIHNlcnZlci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdXBsb2FkSW1hZ2VzXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3B0aW9uYWwgY2FsbGJhY2sgd2l0aCBpbWFnZXMgYW5kIHN0YXR1cyBmb3IgZWFjaCBpbWFnZS5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnV0aWwuUHJvbWlzZX0gUHJvbWlzZSBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHR1cGxvYWRJbWFnZXM6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lZGl0b3JVcGxvYWQudXBsb2FkSW1hZ2VzKGNhbGxiYWNrKTtcblx0XHR9LFxuXG5cdFx0Ly8gSW50ZXJuYWwgZnVuY3Rpb25zXG5cblx0XHRfc2NhbkZvckltYWdlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lZGl0b3JVcGxvYWQuc2NhbkZvckltYWdlcygpO1xuXHRcdH1cblx0fTtcblxuXHRleHRlbmQoRWRpdG9yLnByb3RvdHlwZSwgRWRpdG9yT2JzZXJ2YWJsZSk7XG5cblx0cmV0dXJuIEVkaXRvcjtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9JMThuLmpzXG5cbi8qKlxuICogSTE4bi5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIEkxOG4gY2xhc3MgdGhhdCBoYW5kbGVzIHRyYW5zbGF0aW9uIG9mIFRpbnlNQ0UgVUkuXG4gKiBVc2VzIHBvIHN0eWxlIHdpdGggY3NoYXJwIHN0eWxlIHBhcmFtZXRlcnMuXG4gKlxuICogQGNsYXNzIHRpbnltY2UudXRpbC5JMThuXG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9JMThuXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxuXSwgZnVuY3Rpb24oVG9vbHMpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIGRhdGEgPSB7fSwgY29kZSA9IFwiZW5cIjtcblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgY29kZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0Q29kZVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBuZXdDb2RlIEN1cnJlbnQgbGFuZ3VhZ2UgY29kZS5cblx0XHQgKi9cblx0XHRzZXRDb2RlOiBmdW5jdGlvbihuZXdDb2RlKSB7XG5cdFx0XHRpZiAobmV3Q29kZSkge1xuXHRcdFx0XHRjb2RlID0gbmV3Q29kZTtcblx0XHRcdFx0dGhpcy5ydGwgPSB0aGlzLmRhdGFbbmV3Q29kZV0gPyB0aGlzLmRhdGFbbmV3Q29kZV0uX2RpciA9PT0gJ3J0bCcgOiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgY3VycmVudCBsYW5ndWFnZSBjb2RlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRDb2RlXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBDdXJyZW50IGxhbmd1YWdlIGNvZGUuXG5cdFx0ICovXG5cdFx0Z2V0Q29kZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gY29kZTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUHJvcGVydHkgZ2V0cyBzZXQgdG8gdHJ1ZSBpZiBhIFJUTCBsYW5ndWFnZSBwYWNrIHdhcyBsb2FkZWQuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgcnRsXG5cdFx0ICogQHR5cGUgQm9vbGVhblxuXHRcdCAqL1xuXHRcdHJ0bDogZmFsc2UsXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIHRyYW5zbGF0aW9ucyBmb3IgYSBzcGVjaWZpYyBsYW5ndWFnZSBjb2RlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY29kZSBMYW5ndWFnZSBjb2RlIGxpa2Ugc3ZfU0UuXG5cdFx0ICogQHBhcmFtIHtBcnJheX0gaXRlbXMgTmFtZS92YWx1ZSBhcnJheSB3aXRoIEVuZ2xpc2ggZW5fVVMgdG8gc3ZfU0UuXG5cdFx0ICovXG5cdFx0YWRkOiBmdW5jdGlvbihjb2RlLCBpdGVtcykge1xuXHRcdFx0dmFyIGxhbmdEYXRhID0gZGF0YVtjb2RlXTtcblxuXHRcdFx0aWYgKCFsYW5nRGF0YSkge1xuXHRcdFx0XHRkYXRhW2NvZGVdID0gbGFuZ0RhdGEgPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBpdGVtcykge1xuXHRcdFx0XHRsYW5nRGF0YVtuYW1lXSA9IGl0ZW1zW25hbWVdO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldENvZGUoY29kZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyYW5zbGF0ZXMgdGhlIHNwZWNpZmllZCB0ZXh0LlxuXHRcdCAqXG5cdFx0ICogSXQgaGFzIGEgZmV3IGZvcm1hdHM6XG5cdFx0ICogSTE4bi50cmFuc2xhdGUoXCJUZXh0XCIpO1xuXHRcdCAqIEkxOG4udHJhbnNsYXRlKFtcIlRleHQgezB9L3sxfVwiLCAwLCAxXSk7XG5cdFx0ICogSTE4bi50cmFuc2xhdGUoe3JhdzogXCJSYXcgc3RyaW5nXCJ9KTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdHJhbnNsYXRlXG5cdFx0ICogQHBhcmFtIHtTdHJpbmcvT2JqZWN0L0FycmF5fSB0ZXh0IFRleHQgdG8gdHJhbnNsYXRlLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gU3RyaW5nIHRoYXQgZ290IHRyYW5zbGF0ZWQuXG5cdFx0ICovXG5cdFx0dHJhbnNsYXRlOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0XHR2YXIgbGFuZ0RhdGEgPSBkYXRhW2NvZGVdIHx8IHt9O1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIG51bWJlciAtIHN0cmluZ1xuXHRcdFx0ICogbnVsbCwgdW5kZWZpbmVkIGFuZCBlbXB0eSBzdHJpbmcgLSBlbXB0eSBzdHJpbmdcblx0XHRcdCAqIGFycmF5IC0gY29tbWEtZGVsaW1pdGVkIHN0cmluZ1xuXHRcdFx0ICogb2JqZWN0IC0gaW4gW29iamVjdCBPYmplY3RdXG5cdFx0XHQgKiBmdW5jdGlvbiAtIGluIFtvYmplY3QgRnVuY3Rpb25dXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIG9ialxuXHRcdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHRcdCAqL1xuXHRcdFx0ZnVuY3Rpb24gdG9TdHJpbmcob2JqKSB7XG5cdFx0XHRcdGlmIChUb29scy5pcyhvYmosICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAhaXNFbXB0eShvYmopID8gJycgKyBvYmogOiAnJztcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gaXNFbXB0eSh0ZXh0KSB7XG5cdFx0XHRcdHJldHVybiB0ZXh0ID09PSAnJyB8fCB0ZXh0ID09PSBudWxsIHx8IFRvb2xzLmlzKHRleHQsICd1bmRlZmluZWQnKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZ2V0TGFuZ0RhdGEodGV4dCkge1xuXHRcdFx0XHQvLyBtYWtlIHN1cmUgd2Ugd29yayBvbiBhIHN0cmluZyBhbmQgcmV0dXJuIGEgc3RyaW5nXG5cdFx0XHRcdHRleHQgPSB0b1N0cmluZyh0ZXh0KTtcblx0XHRcdFx0cmV0dXJuIFRvb2xzLmhhc093bihsYW5nRGF0YSwgdGV4dCkgPyB0b1N0cmluZyhsYW5nRGF0YVt0ZXh0XSkgOiB0ZXh0O1xuXHRcdFx0fVxuXG5cblx0XHRcdGlmIChpc0VtcHR5KHRleHQpKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKFRvb2xzLmlzKHRleHQsICdvYmplY3QnKSAmJiBUb29scy5oYXNPd24odGV4dCwgJ3JhdycpKSB7XG5cdFx0XHRcdHJldHVybiB0b1N0cmluZyh0ZXh0LnJhdyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChUb29scy5pcyh0ZXh0LCAnYXJyYXknKSkge1xuXHRcdFx0XHR2YXIgdmFsdWVzID0gdGV4dC5zbGljZSgxKTtcblx0XHRcdFx0dGV4dCA9IGdldExhbmdEYXRhKHRleHRbMF0pLnJlcGxhY2UoL1xceyhbMC05XSspXFx9L2csIGZ1bmN0aW9uKCQxLCAkMikge1xuXHRcdFx0XHRcdHJldHVybiBUb29scy5oYXNPd24odmFsdWVzLCAkMikgPyB0b1N0cmluZyh2YWx1ZXNbJDJdKSA6ICQxO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGdldExhbmdEYXRhKHRleHQpLnJlcGxhY2UoL3tjb250ZXh0Olxcdyt9JC8sICcnKTtcblx0XHR9LFxuXG5cdFx0ZGF0YTogZGF0YVxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9Gb2N1c01hbmFnZXIuanNcblxuLyoqXG4gKiBGb2N1c01hbmFnZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIGZvY3VzL2JsdXIgc3RhdGUgb2YgdGhlIGVkaXRvci4gVGhpcyBjbGFzcyBpcyBuZWVkZWQgc2luY2Ugc29tZVxuICogYnJvd3NlcnMgZmlyZSBmYWxzZSBmb2N1cy9ibHVyIHN0YXRlcyB3aGVuIHRoZSBzZWxlY3Rpb24gaXMgbW92ZWQgdG8gYSBVSSBkaWFsb2cgb3Igc2ltaWxhci5cbiAqXG4gKiBUaGlzIGNsYXNzIHdpbGwgZmlyZSB0d28gZXZlbnRzIGZvY3VzIGFuZCBibHVyIG9uIHRoZSBlZGl0b3IgaW5zdGFuY2VzIHRoYXQgZ290IGFmZmVjdGVkLlxuICogSXQgd2lsbCBhbHNvIGhhbmRsZSB0aGUgcmVzdG9yZSBvZiBzZWxlY3Rpb24gd2hlbiB0aGUgZm9jdXMgaXMgbG9zdCBhbmQgcmV0dXJuZWQuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuRm9jdXNNYW5hZ2VyXG4gKi9cbmRlZmluZShcInRpbnltY2UvRm9jdXNNYW5hZ2VyXCIsIFtcblx0XCJ0aW55bWNlL2RvbS9ET01VdGlsc1wiLFxuXHRcInRpbnltY2UvdXRpbC9EZWxheVwiLFxuXHRcInRpbnltY2UvRW52XCJcbl0sIGZ1bmN0aW9uKERPTVV0aWxzLCBEZWxheSwgRW52KSB7XG5cdHZhciBzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyLCBkb2N1bWVudEZvY3VzSW5IYW5kbGVyLCBkb2N1bWVudE1vdXNlVXBIYW5kbGVyLCBET00gPSBET01VdGlscy5ET007XG5cblx0dmFyIGlzVUlFbGVtZW50ID0gZnVuY3Rpb24gKGVkaXRvciwgZWxtKSB7XG5cdFx0dmFyIGN1c3RvbVNlbGVjdG9yID0gZWRpdG9yID8gZWRpdG9yLnNldHRpbmdzLmN1c3RvbV91aV9zZWxlY3RvciA6ICcnO1xuXHRcdHZhciBwYXJlbnQgPSBET00uZ2V0UGFyZW50KGVsbSwgZnVuY3Rpb24gKGVsbSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0Rm9jdXNNYW5hZ2VyLmlzRWRpdG9yVUlFbGVtZW50KGVsbSkgfHxcblx0XHRcdFx0KGN1c3RvbVNlbGVjdG9yID8gZWRpdG9yLmRvbS5pcyhlbG0sIGN1c3RvbVNlbGVjdG9yKSA6IGZhbHNlKVxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcGFyZW50ICE9PSBudWxsO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIGEgbmV3IGZvY3VzIG1hbmFnZXIgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvciBGb2N1c01hbmFnZXJcblx0ICogQHBhcmFtIHt0aW55bWNlLkVkaXRvck1hbmFnZXJ9IGVkaXRvck1hbmFnZXIgRWRpdG9yIG1hbmFnZXIgaW5zdGFuY2UgdG8gaGFuZGxlIGZvY3VzIGZvci5cblx0ICovXG5cdGZ1bmN0aW9uIEZvY3VzTWFuYWdlcihlZGl0b3JNYW5hZ2VyKSB7XG5cdFx0ZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudCgpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0Ly8gSUUgc29tZXRpbWVzIGZhaWxzIHRvIGdldCB0aGUgYWN0aXZlRWxlbWVudCB3aGVuIHJlc2l6aW5nIHRhYmxlXG5cdFx0XHRcdC8vIFRPRE86IEludmVzdGlnYXRlIHRoaXNcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmJvZHk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuJ3Qgc3RvcmUgYSByZWFsIHJhbmdlIG9uIElFIDExIHNpbmNlIGl0IGdldHMgbXV0YXRlZCBzbyB3ZSBuZWVkIHRvIHVzZSBhIGJvb2ttYXJrIG9iamVjdFxuXHRcdC8vIFRPRE86IE1vdmUgdGhpcyB0byBhIHNlcGFyYXRlIHJhbmdlIHV0aWxzIGNsYXNzIHNpbmNlIGl0J3MgaXQncyBsb2dpYyBpcyBwcmVzZW50IGluIFNlbGVjdGlvbiBhcyB3ZWxsLlxuXHRcdGZ1bmN0aW9uIGNyZWF0ZUJvb2ttYXJrKGRvbSwgcm5nKSB7XG5cdFx0XHRpZiAocm5nICYmIHJuZy5zdGFydENvbnRhaW5lcikge1xuXHRcdFx0XHQvLyBWZXJpZnkgdGhhdCB0aGUgcmFuZ2UgaXMgd2l0aGluIHRoZSByb290IG9mIHRoZSBlZGl0b3Jcblx0XHRcdFx0aWYgKCFkb20uaXNDaGlsZE9mKHJuZy5zdGFydENvbnRhaW5lciwgZG9tLmdldFJvb3QoKSkgfHwgIWRvbS5pc0NoaWxkT2Yocm5nLmVuZENvbnRhaW5lciwgZG9tLmdldFJvb3QoKSkpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHN0YXJ0Q29udGFpbmVyOiBybmcuc3RhcnRDb250YWluZXIsXG5cdFx0XHRcdFx0c3RhcnRPZmZzZXQ6IHJuZy5zdGFydE9mZnNldCxcblx0XHRcdFx0XHRlbmRDb250YWluZXI6IHJuZy5lbmRDb250YWluZXIsXG5cdFx0XHRcdFx0ZW5kT2Zmc2V0OiBybmcuZW5kT2Zmc2V0XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBybmc7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gYm9va21hcmtUb1JuZyhlZGl0b3IsIGJvb2ttYXJrKSB7XG5cdFx0XHR2YXIgcm5nO1xuXG5cdFx0XHRpZiAoYm9va21hcmsuc3RhcnRDb250YWluZXIpIHtcblx0XHRcdFx0cm5nID0gZWRpdG9yLmdldERvYygpLmNyZWF0ZVJhbmdlKCk7XG5cdFx0XHRcdHJuZy5zZXRTdGFydChib29rbWFyay5zdGFydENvbnRhaW5lciwgYm9va21hcmsuc3RhcnRPZmZzZXQpO1xuXHRcdFx0XHRybmcuc2V0RW5kKGJvb2ttYXJrLmVuZENvbnRhaW5lciwgYm9va21hcmsuZW5kT2Zmc2V0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJuZyA9IGJvb2ttYXJrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcm5nO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKGUpIHtcblx0XHRcdHZhciBlZGl0b3IgPSBlLmVkaXRvcjtcblxuXHRcdFx0ZWRpdG9yLm9uKCdpbml0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIEdlY2tvL1dlYktpdCBoYXMgZ2hvc3Qgc2VsZWN0aW9ucyBpbiBpZnJhbWVzIGFuZCBJRSBvbmx5IGhhcyBvbmUgc2VsZWN0aW9uIHBlciBicm93c2VyIHRhYlxuXHRcdFx0XHRpZiAoZWRpdG9yLmlubGluZSB8fCBFbnYuaWUpIHtcblx0XHRcdFx0XHQvLyBVc2UgdGhlIG9uYmVmb3JlZGVhY3RpdmF0ZSBldmVudCB3aGVuIGF2YWlsYWJsZSBzaW5jZSBpdCB3b3JrcyBiZXR0ZXIgc2VlICM3MDIzXG5cdFx0XHRcdFx0aWYgKFwib25iZWZvcmVkZWFjdGl2YXRlXCIgaW4gZG9jdW1lbnQgJiYgRW52LmllIDwgOSkge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLmRvbS5iaW5kKGVkaXRvci5nZXRCb2R5KCksICdiZWZvcmVkZWFjdGl2YXRlJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoZS50YXJnZXQgIT0gZWRpdG9yLmdldEJvZHkoKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWRpdG9yLmxhc3RSbmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIElFIHRocm93cyBcIlVuZXhjcGVjdGVkIGNhbGwgdG8gbWV0aG9kIG9yIHByb3BlcnR5IGFjY2Vzc1wiIHNvbWUgdGltZXMgc28gbGV0cyBpZ25vcmUgaXRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIE9uIG90aGVyIGJyb3dzZXJzIHRha2Ugc25hcHNob3Qgb24gbm9kZWNoYW5nZSBpbiBpbmxpbmUgbW9kZSBzaW5jZSB0aGV5IGhhdmUgR2hvc3Qgc2VsZWN0aW9ucyBmb3IgaWZyYW1lc1xuXHRcdFx0XHRcdFx0ZWRpdG9yLm9uKCdub2RlY2hhbmdlIG1vdXNldXAga2V5dXAnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBub2RlID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9ubHkgYWN0IG9uIG1hbnVhbCBub2RlY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRpZiAoZS50eXBlID09ICdub2RlY2hhbmdlJyAmJiBlLnNlbGVjdGlvbkNoYW5nZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIElFIDExIHJlcG9ydHMgYWN0aXZlIGVsZW1lbnQgYXMgaWZyYW1lIG5vdCBib2R5IG9mIGlmcmFtZVxuXHRcdFx0XHRcdFx0XHRpZiAobm9kZSAmJiBub2RlLmlkID09IGVkaXRvci5pZCArICdfaWZyJykge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlZGl0b3IuZ2V0Qm9keSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGVkaXRvci5kb20uaXNDaGlsZE9mKG5vZGUsIGVkaXRvci5nZXRCb2R5KCkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWRpdG9yLmxhc3RSbmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBIYW5kbGVzIHRoZSBpc3N1ZSB3aXRoIFdlYktpdCBub3QgcmV0YWluaW5nIHNlbGVjdGlvbiB3aXRoaW4gaW5saW5lIGRvY3VtZW50XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHVzZXIgcmVsZWFzZXMgdGhlIG1vdXNlIG91dCBzaWRlIHRoZSBib2R5IHNpbmNlIGEgbW91c2UgdXAgZXZlbnQgd29udCBvY2N1ciBvbiB0aGUgYm9keVxuXHRcdFx0XHRcdGlmIChFbnYud2Via2l0ICYmICFzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhY3RpdmVFZGl0b3IgPSBlZGl0b3JNYW5hZ2VyLmFjdGl2ZUVkaXRvcjtcblxuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aXZlRWRpdG9yICYmIGFjdGl2ZUVkaXRvci5zZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcm5nID0gYWN0aXZlRWRpdG9yLnNlbGVjdGlvbi5nZXRSbmcoKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN0b3JlIHdoZW4gaXQncyBub24gY29sbGFwc2VkXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJuZyAmJiAhcm5nLmNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWRpdG9yLmxhc3RSbmcgPSBybmc7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRET00uYmluZChkb2N1bWVudCwgJ3NlbGVjdGlvbmNoYW5nZScsIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGVkaXRvci5vbignc2V0Y29udGVudCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRlZGl0b3IubGFzdFJuZyA9IG51bGw7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gUmVtb3ZlIGxhc3Qgc2VsZWN0aW9uIGJvb2ttYXJrIG9uIG1vdXNlZG93biBzZWUgIzYzMDVcblx0XHRcdGVkaXRvci5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24ubGFzdEZvY3VzQm9va21hcmsgPSBudWxsO1xuXHRcdFx0fSk7XG5cblx0XHRcdGVkaXRvci5vbignZm9jdXNpbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZm9jdXNlZEVkaXRvciA9IGVkaXRvck1hbmFnZXIuZm9jdXNlZEVkaXRvciwgbGFzdFJuZztcblxuXHRcdFx0XHRpZiAoZWRpdG9yLnNlbGVjdGlvbi5sYXN0Rm9jdXNCb29rbWFyaykge1xuXHRcdFx0XHRcdGxhc3RSbmcgPSBib29rbWFya1RvUm5nKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbi5sYXN0Rm9jdXNCb29rbWFyayk7XG5cdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5sYXN0Rm9jdXNCb29rbWFyayA9IG51bGw7XG5cdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcobGFzdFJuZyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZm9jdXNlZEVkaXRvciAhPSBlZGl0b3IpIHtcblx0XHRcdFx0XHRpZiAoZm9jdXNlZEVkaXRvcikge1xuXHRcdFx0XHRcdFx0Zm9jdXNlZEVkaXRvci5maXJlKCdibHVyJywge2ZvY3VzZWRFZGl0b3I6IGVkaXRvcn0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVkaXRvck1hbmFnZXIuc2V0QWN0aXZlKGVkaXRvcik7XG5cdFx0XHRcdFx0ZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gZWRpdG9yO1xuXHRcdFx0XHRcdGVkaXRvci5maXJlKCdmb2N1cycsIHtibHVycmVkRWRpdG9yOiBmb2N1c2VkRWRpdG9yfSk7XG5cdFx0XHRcdFx0ZWRpdG9yLmZvY3VzKHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZWRpdG9yLmxhc3RSbmcgPSBudWxsO1xuXHRcdFx0fSk7XG5cblx0XHRcdGVkaXRvci5vbignZm9jdXNvdXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0RGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBmb2N1c2VkRWRpdG9yID0gZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yO1xuXG5cdFx0XHRcdFx0Ly8gU3RpbGwgdGhlIHNhbWUgZWRpdG9yIHRoZSBibHVyIHdhcyBvdXRzaWRlIGFueSBlZGl0b3IgVUlcblx0XHRcdFx0XHRpZiAoIWlzVUlFbGVtZW50KGVkaXRvciwgZ2V0QWN0aXZlRWxlbWVudCgpKSAmJiBmb2N1c2VkRWRpdG9yID09IGVkaXRvcikge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLmZpcmUoJ2JsdXInLCB7Zm9jdXNlZEVkaXRvcjogbnVsbH0pO1xuXHRcdFx0XHRcdFx0ZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0Ly8gTWFrZSBzdXJlIHNlbGVjdGlvbiBpcyB2YWxpZCBjb3VsZCBiZSBpbnZhbGlkIGlmIHRoZSBlZGl0b3IgaXMgYmx1cmVkIGFuZCByZW1vdmVkIGJlZm9yZSB0aGUgdGltZW91dCBvY2N1cnNcblx0XHRcdFx0XHRcdGlmIChlZGl0b3Iuc2VsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24ubGFzdEZvY3VzQm9va21hcmsgPSBudWxsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgZm9jdXMgaXMgbW92ZWQgdG8gYW4gZWxlbWVudCBvdXRzaWRlIHRoZSBhY3RpdmUgZWRpdG9yIGJ5IGNoZWNraW5nIGlmIHRoZSB0YXJnZXQgbm9kZVxuXHRcdFx0Ly8gaXNuJ3Qgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBhY3RpdmVFZGl0b3Igbm9yIGEgVUkgZWxlbWVudCBzdWNoIGFzIGEgZGlhbG9nIGNoaWxkIGNvbnRyb2xcblx0XHRcdGlmICghZG9jdW1lbnRGb2N1c0luSGFuZGxlcikge1xuXHRcdFx0XHRkb2N1bWVudEZvY3VzSW5IYW5kbGVyID0gZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdHZhciBhY3RpdmVFZGl0b3IgPSBlZGl0b3JNYW5hZ2VyLmFjdGl2ZUVkaXRvciwgdGFyZ2V0O1xuXG5cdFx0XHRcdFx0dGFyZ2V0ID0gZS50YXJnZXQ7XG5cblx0XHRcdFx0XHRpZiAoYWN0aXZlRWRpdG9yICYmIHRhcmdldC5vd25lckRvY3VtZW50ID09IGRvY3VtZW50KSB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIHNlbGVjdGlvbiBkb24ndCB1cGRhdGUgdGhlIGJvb2ttYXJrIGlmIGl0J3Ncblx0XHRcdFx0XHRcdC8vIGEgZm9jdXNpbiB0byB0aGUgYm9keSBvZiB0aGUgZWRpdG9yIHNlZSAjNzAyNVxuXHRcdFx0XHRcdFx0aWYgKGFjdGl2ZUVkaXRvci5zZWxlY3Rpb24gJiYgdGFyZ2V0ICE9IGFjdGl2ZUVkaXRvci5nZXRCb2R5KCkpIHtcblx0XHRcdFx0XHRcdFx0YWN0aXZlRWRpdG9yLnNlbGVjdGlvbi5sYXN0Rm9jdXNCb29rbWFyayA9IGNyZWF0ZUJvb2ttYXJrKGFjdGl2ZUVkaXRvci5kb20sIGFjdGl2ZUVkaXRvci5sYXN0Um5nKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gRmlyZSBhIGJsdXIgZXZlbnQgaWYgdGhlIGVsZW1lbnQgaXNuJ3QgYSBVSSBlbGVtZW50XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0ICE9IGRvY3VtZW50LmJvZHkgJiYgIWlzVUlFbGVtZW50KGFjdGl2ZUVkaXRvciwgdGFyZ2V0KSAmJiBlZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPT0gYWN0aXZlRWRpdG9yKSB7XG5cdFx0XHRcdFx0XHRcdGFjdGl2ZUVkaXRvci5maXJlKCdibHVyJywge2ZvY3VzZWRFZGl0b3I6IG51bGx9KTtcblx0XHRcdFx0XHRcdFx0ZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gbnVsbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0RE9NLmJpbmQoZG9jdW1lbnQsICdmb2N1c2luJywgZG9jdW1lbnRGb2N1c0luSGFuZGxlcik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBlZGdlIGNhc2Ugd2hlbiB1c2VyIHN0YXJ0cyB0aGUgc2VsZWN0aW9uIGluc2lkZSB0aGUgZWRpdG9yIGFuZCByZWxlYXNlc1xuXHRcdFx0Ly8gdGhlIG1vdXNlIG91dHNpZGUgdGhlIGVkaXRvciBwcm9kdWNpbmcgYSBuZXcgc2VsZWN0aW9uLiBUaGlzIHdlaXJkIHdvcmthcm91bmQgaXMgbmVlZGVkIHNpbmNlXG5cdFx0XHQvLyBHZWNrbyBkb2Vzbid0IGhhdmUgdGhlIFwic2VsZWN0aW9uY2hhbmdlXCIgZXZlbnQgd2UgbmVlZCB0byBkbyB0aGlzLiBGaXhlczogIzY4NDNcblx0XHRcdGlmIChlZGl0b3IuaW5saW5lICYmICFkb2N1bWVudE1vdXNlVXBIYW5kbGVyKSB7XG5cdFx0XHRcdGRvY3VtZW50TW91c2VVcEhhbmRsZXIgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIGFjdGl2ZUVkaXRvciA9IGVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yLCBkb20gPSBhY3RpdmVFZGl0b3IuZG9tO1xuXG5cdFx0XHRcdFx0aWYgKGFjdGl2ZUVkaXRvci5pbmxpbmUgJiYgZG9tICYmICFkb20uaXNDaGlsZE9mKGUudGFyZ2V0LCBhY3RpdmVFZGl0b3IuZ2V0Qm9keSgpKSkge1xuXHRcdFx0XHRcdFx0dmFyIHJuZyA9IGFjdGl2ZUVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XG5cblx0XHRcdFx0XHRcdGlmICghcm5nLmNvbGxhcHNlZCkge1xuXHRcdFx0XHRcdFx0XHRhY3RpdmVFZGl0b3IubGFzdFJuZyA9IHJuZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0RE9NLmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgZG9jdW1lbnRNb3VzZVVwSGFuZGxlcik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdW5yZWdpc3RlckRvY3VtZW50RXZlbnRzKGUpIHtcblx0XHRcdGlmIChlZGl0b3JNYW5hZ2VyLmZvY3VzZWRFZGl0b3IgPT0gZS5lZGl0b3IpIHtcblx0XHRcdFx0ZWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFlZGl0b3JNYW5hZ2VyLmFjdGl2ZUVkaXRvcikge1xuXHRcdFx0XHRET00udW5iaW5kKGRvY3VtZW50LCAnc2VsZWN0aW9uY2hhbmdlJywgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlcik7XG5cdFx0XHRcdERPTS51bmJpbmQoZG9jdW1lbnQsICdmb2N1c2luJywgZG9jdW1lbnRGb2N1c0luSGFuZGxlcik7XG5cdFx0XHRcdERPTS51bmJpbmQoZG9jdW1lbnQsICdtb3VzZXVwJywgZG9jdW1lbnRNb3VzZVVwSGFuZGxlcik7XG5cdFx0XHRcdHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIgPSBkb2N1bWVudEZvY3VzSW5IYW5kbGVyID0gZG9jdW1lbnRNb3VzZVVwSGFuZGxlciA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZWRpdG9yTWFuYWdlci5vbignQWRkRWRpdG9yJywgcmVnaXN0ZXJFdmVudHMpO1xuXHRcdGVkaXRvck1hbmFnZXIub24oJ1JlbW92ZUVkaXRvcicsIHVucmVnaXN0ZXJEb2N1bWVudEV2ZW50cyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBpcyBwYXJ0IG9mIHRoZSBVSSBmb3IgZXhhbXBsZSBhbiBidXR0b24gb3IgdGV4dCBpbnB1dC5cblx0ICpcblx0ICogQG1ldGhvZCBpc0VkaXRvclVJRWxlbWVudFxuXHQgKiBAcGFyYW0gIHtFbGVtZW50fSBlbG0gRWxlbWVudCB0byBjaGVjayBpZiBpdCdzIHBhcnQgb2YgdGhlIFVJIG9yIG5vdC5cblx0ICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZS9mYWxzZSBzdGF0ZSBpZiB0aGUgZWxlbWVudCBpcyBwYXJ0IG9mIHRoZSBVSSBvciBub3QuXG5cdCAqL1xuXHRGb2N1c01hbmFnZXIuaXNFZGl0b3JVSUVsZW1lbnQgPSBmdW5jdGlvbihlbG0pIHtcblx0XHQvLyBOZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHNpbmNlIHN2ZyBjYW4gaGF2ZSBmb2N1czogIzY3NzZcblx0XHRyZXR1cm4gZWxtLmNsYXNzTmFtZS50b1N0cmluZygpLmluZGV4T2YoJ21jZS0nKSAhPT0gLTE7XG5cdH07XG5cblx0Rm9jdXNNYW5hZ2VyLl9pc1VJRWxlbWVudCA9IGlzVUlFbGVtZW50O1xuXG5cdHJldHVybiBGb2N1c01hbmFnZXI7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL0VkaXRvck1hbmFnZXIuanNcblxuLyoqXG4gKiBFZGl0b3JNYW5hZ2VyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyB1c2VkIGFzIGEgZmFjdG9yeSBmb3IgbWFuYWdlciBmb3IgdGlueW1jZS5FZGl0b3IgaW5zdGFuY2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiB0aW55bWNlLkVkaXRvck1hbmFnZXIuaW5pdCh7fSk7XG4gKlxuICogQGNsYXNzIHRpbnltY2UuRWRpdG9yTWFuYWdlclxuICogQG1peGVzIHRpbnltY2UudXRpbC5PYnNlcnZhYmxlXG4gKiBAc3RhdGljXG4gKi9cbmRlZmluZShcInRpbnltY2UvRWRpdG9yTWFuYWdlclwiLCBbXG5cdFwidGlueW1jZS9FZGl0b3JcIixcblx0XCJ0aW55bWNlL2RvbS9Eb21RdWVyeVwiLFxuXHRcInRpbnltY2UvZG9tL0RPTVV0aWxzXCIsXG5cdFwidGlueW1jZS91dGlsL1VSSVwiLFxuXHRcInRpbnltY2UvRW52XCIsXG5cdFwidGlueW1jZS91dGlsL1Rvb2xzXCIsXG5cdFwidGlueW1jZS91dGlsL1Byb21pc2VcIixcblx0XCJ0aW55bWNlL3V0aWwvT2JzZXJ2YWJsZVwiLFxuXHRcInRpbnltY2UvdXRpbC9JMThuXCIsXG5cdFwidGlueW1jZS9Gb2N1c01hbmFnZXJcIixcblx0XCJ0aW55bWNlL0FkZE9uTWFuYWdlclwiXG5dLCBmdW5jdGlvbihFZGl0b3IsICQsIERPTVV0aWxzLCBVUkksIEVudiwgVG9vbHMsIFByb21pc2UsIE9ic2VydmFibGUsIEkxOG4sIEZvY3VzTWFuYWdlciwgQWRkT25NYW5hZ2VyKSB7XG5cdHZhciBET00gPSBET01VdGlscy5ET007XG5cdHZhciBleHBsb2RlID0gVG9vbHMuZXhwbG9kZSwgZWFjaCA9IFRvb2xzLmVhY2gsIGV4dGVuZCA9IFRvb2xzLmV4dGVuZDtcblx0dmFyIGluc3RhbmNlQ291bnRlciA9IDAsIGJlZm9yZVVubG9hZERlbGVnYXRlLCBFZGl0b3JNYW5hZ2VyLCBib3VuZEdsb2JhbEV2ZW50cyA9IGZhbHNlO1xuXG5cdGZ1bmN0aW9uIGdsb2JhbEV2ZW50RGVsZWdhdGUoZSkge1xuXHRcdGVhY2goRWRpdG9yTWFuYWdlci5lZGl0b3JzLCBmdW5jdGlvbihlZGl0b3IpIHtcblx0XHRcdGlmIChlLnR5cGUgPT09ICdzY3JvbGwnKSB7XG5cdFx0XHRcdGVkaXRvci5maXJlKCdTY3JvbGxXaW5kb3cnLCBlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRvci5maXJlKCdSZXNpemVXaW5kb3cnLCBlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHRvZ2dsZUdsb2JhbEV2ZW50cyhlZGl0b3JzLCBzdGF0ZSkge1xuXHRcdGlmIChzdGF0ZSAhPT0gYm91bmRHbG9iYWxFdmVudHMpIHtcblx0XHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0XHQkKHdpbmRvdykub24oJ3Jlc2l6ZSBzY3JvbGwnLCBnbG9iYWxFdmVudERlbGVnYXRlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQod2luZG93KS5vZmYoJ3Jlc2l6ZSBzY3JvbGwnLCBnbG9iYWxFdmVudERlbGVnYXRlKTtcblx0XHRcdH1cblxuXHRcdFx0Ym91bmRHbG9iYWxFdmVudHMgPSBzdGF0ZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmVFZGl0b3JGcm9tTGlzdChlZGl0b3IpIHtcblx0XHR2YXIgZWRpdG9ycyA9IEVkaXRvck1hbmFnZXIuZWRpdG9ycywgcmVtb3ZlZEZyb21MaXN0O1xuXG5cdFx0ZGVsZXRlIGVkaXRvcnNbZWRpdG9yLmlkXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWRpdG9ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGVkaXRvcnNbaV0gPT0gZWRpdG9yKSB7XG5cdFx0XHRcdGVkaXRvcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRyZW1vdmVkRnJvbUxpc3QgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZWxlY3QgYW5vdGhlciBlZGl0b3Igc2luY2UgdGhlIGFjdGl2ZSBvbmUgd2FzIHJlbW92ZWRcblx0XHRpZiAoRWRpdG9yTWFuYWdlci5hY3RpdmVFZGl0b3IgPT0gZWRpdG9yKSB7XG5cdFx0XHRFZGl0b3JNYW5hZ2VyLmFjdGl2ZUVkaXRvciA9IGVkaXRvcnNbMF07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYXIgZm9jdXNlZEVkaXRvciBpZiBuZWNlc3NhcnksIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGJsdXIgdGhlIGRlc3Ryb3llZCBlZGl0b3Jcblx0XHRpZiAoRWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID09IGVkaXRvcikge1xuXHRcdFx0RWRpdG9yTWFuYWdlci5mb2N1c2VkRWRpdG9yID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEZyb21MaXN0O1xuXHR9XG5cblx0ZnVuY3Rpb24gcHVyZ2VEZXN0cm95ZWRFZGl0b3IoZWRpdG9yKSB7XG5cdFx0Ly8gVXNlciBoYXMgbWFudWFsbHkgZGVzdHJveWVkIHRoZSBlZGl0b3IgbGV0cyBjbGVhbiB1cCB0aGUgbWVzc1xuXHRcdGlmIChlZGl0b3IgJiYgZWRpdG9yLmluaXRpYWxpemVkICYmICEoZWRpdG9yLmdldENvbnRhaW5lcigpIHx8IGVkaXRvci5nZXRCb2R5KCkpLnBhcmVudE5vZGUpIHtcblx0XHRcdHJlbW92ZUVkaXRvckZyb21MaXN0KGVkaXRvcik7XG5cdFx0XHRlZGl0b3IudW5iaW5kQWxsTmF0aXZlRXZlbnRzKCk7XG5cdFx0XHRlZGl0b3IuZGVzdHJveSh0cnVlKTtcblx0XHRcdGVkaXRvci5yZW1vdmVkID0gdHJ1ZTtcblx0XHRcdGVkaXRvciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVkaXRvcjtcblx0fVxuXG5cdEVkaXRvck1hbmFnZXIgPSB7XG5cdFx0LyoqXG5cdFx0ICogRG9tIHF1ZXJ5IGluc3RhbmNlLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5ICRcblx0XHQgKiBAdHlwZSB0aW55bWNlLmRvbS5Eb21RdWVyeVxuXHRcdCAqL1xuXHRcdCQ6ICQsXG5cblx0XHQvKipcblx0XHQgKiBNYWpvciB2ZXJzaW9uIG9mIFRpbnlNQ0UgYnVpbGQuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgbWFqb3JWZXJzaW9uXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0bWFqb3JWZXJzaW9uOiAnNCcsXG5cblx0XHQvKipcblx0XHQgKiBNaW5vciB2ZXJzaW9uIG9mIFRpbnlNQ0UgYnVpbGQuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgbWlub3JWZXJzaW9uXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0bWlub3JWZXJzaW9uOiAnNS42JyxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbGVhc2UgZGF0ZSBvZiBUaW55TUNFIGJ1aWxkLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IHJlbGVhc2VEYXRlXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0cmVsZWFzZURhdGU6ICcyMDE3LTAzLTMwJyxcblxuXHRcdC8qKlxuXHRcdCAqIENvbGxlY3Rpb24gb2YgZWRpdG9yIGluc3RhbmNlcy5cblx0XHQgKlxuXHRcdCAqIEBwcm9wZXJ0eSBlZGl0b3JzXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBmb3IgKGVkSWQgaW4gdGlueW1jZS5lZGl0b3JzKVxuXHRcdCAqICAgICB0aW55bWNlLmVkaXRvcnNbZWRJZF0uc2F2ZSgpO1xuXHRcdCAqL1xuXHRcdGVkaXRvcnM6IFtdLFxuXG5cdFx0LyoqXG5cdFx0ICogQ29sbGVjdGlvbiBvZiBsYW5ndWFnZSBwYWNrIGRhdGEuXG5cdFx0ICpcblx0XHQgKiBAcHJvcGVydHkgaTE4blxuXHRcdCAqIEB0eXBlIE9iamVjdFxuXHRcdCAqL1xuXHRcdGkxOG46IEkxOG4sXG5cblx0XHQvKipcblx0XHQgKiBDdXJyZW50bHkgYWN0aXZlIGVkaXRvciBpbnN0YW5jZS5cblx0XHQgKlxuXHRcdCAqIEBwcm9wZXJ0eSBhY3RpdmVFZGl0b3Jcblx0XHQgKiBAdHlwZSB0aW55bWNlLkVkaXRvclxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdGlueU1DRS5hY3RpdmVFZGl0b3Iuc2VsZWN0aW9uLmdldENvbnRlbnQoKTtcblx0XHQgKiB0aW55bWNlLkVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yLnNlbGVjdGlvbi5nZXRDb250ZW50KCk7XG5cdFx0ICovXG5cdFx0YWN0aXZlRWRpdG9yOiBudWxsLFxuXG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBiYXNlVVJMLCBkb2N1bWVudEJhc2VVUkwsIHN1ZmZpeCA9IFwiXCIsIHByZUluaXQsIHNyYztcblxuXHRcdFx0Ly8gR2V0IGJhc2UgVVJMIGZvciB0aGUgY3VycmVudCBkb2N1bWVudFxuXHRcdFx0ZG9jdW1lbnRCYXNlVVJMID0gVVJJLmdldERvY3VtZW50QmFzZVVybChkb2N1bWVudC5sb2NhdGlvbik7XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBVUkwgaXMgYSBkb2N1bWVudCBiYXNlZCBmb3JtYXQgbGlrZTogaHR0cDovL3NpdGUvZGlyL2ZpbGUgYW5kIGZpbGU6Ly8vXG5cdFx0XHQvLyBsZWF2ZSBvdGhlciBmb3JtYXRzIGxpa2UgYXBwbGV3ZWJkYXRhOi8vLi4uIGludGFjdFxuXHRcdFx0aWYgKC9eW146XSs6XFwvXFwvXFwvP1teXFwvXStcXC8vLnRlc3QoZG9jdW1lbnRCYXNlVVJMKSkge1xuXHRcdFx0XHRkb2N1bWVudEJhc2VVUkwgPSBkb2N1bWVudEJhc2VVUkwucmVwbGFjZSgvW1xcPyNdLiokLywgJycpLnJlcGxhY2UoL1tcXC9cXFxcXVteXFwvXSskLywgJycpO1xuXG5cdFx0XHRcdGlmICghL1tcXC9cXFxcXSQvLnRlc3QoZG9jdW1lbnRCYXNlVVJMKSkge1xuXHRcdFx0XHRcdGRvY3VtZW50QmFzZVVSTCArPSAnLyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGlueW1jZSBpcyBkZWZpbmVkIGFuZCBoYXMgYSBiYXNlIHVzZSB0aGF0IG9yIHVzZSB0aGUgb2xkIHRpbnlNQ0VQcmVJbml0XG5cdFx0XHRwcmVJbml0ID0gd2luZG93LnRpbnltY2UgfHwgd2luZG93LnRpbnlNQ0VQcmVJbml0O1xuXHRcdFx0aWYgKHByZUluaXQpIHtcblx0XHRcdFx0YmFzZVVSTCA9IHByZUluaXQuYmFzZSB8fCBwcmVJbml0LmJhc2VVUkw7XG5cdFx0XHRcdHN1ZmZpeCA9IHByZUluaXQuc3VmZml4O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gR2V0IGJhc2Ugd2hlcmUgdGhlIHRpbnltY2Ugc2NyaXB0IGlzIGxvY2F0ZWRcblx0XHRcdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHNyYyA9IHNjcmlwdHNbaV0uc3JjO1xuXG5cdFx0XHRcdFx0Ly8gU2NyaXB0IHR5cGVzIHN1cHBvcnRlZDpcblx0XHRcdFx0XHQvLyB0aW55bWNlLmpzIHRpbnltY2UubWluLmpzIHRpbnltY2UuZGV2LmpzXG5cdFx0XHRcdFx0Ly8gdGlueW1jZS5qcXVlcnkuanMgdGlueW1jZS5qcXVlcnkubWluLmpzIHRpbnltY2UuanF1ZXJ5LmRldi5qc1xuXHRcdFx0XHRcdC8vIHRpbnltY2UuZnVsbC5qcyB0aW55bWNlLmZ1bGwubWluLmpzIHRpbnltY2UuZnVsbC5kZXYuanNcblx0XHRcdFx0XHR2YXIgc3JjU2NyaXB0ID0gc3JjLnN1YnN0cmluZyhzcmMubGFzdEluZGV4T2YoJy8nKSk7XG5cdFx0XHRcdFx0aWYgKC90aW55bWNlKFxcLmZ1bGx8XFwuanF1ZXJ5fCkoXFwubWlufFxcLmRldnwpXFwuanMvLnRlc3Qoc3JjKSkge1xuXHRcdFx0XHRcdFx0aWYgKHNyY1NjcmlwdC5pbmRleE9mKCcubWluJykgIT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0c3VmZml4ID0gJy5taW4nO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRiYXNlVVJMID0gc3JjLnN1YnN0cmluZygwLCBzcmMubGFzdEluZGV4T2YoJy8nKSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSBkaWRuJ3QgZmluZCBhbnkgYmFzZVVSTCBieSBsb29raW5nIGF0IHRoZSBzY3JpcHQgZWxlbWVudHNcblx0XHRcdFx0Ly8gVHJ5IHRvIHVzZSB0aGUgZG9jdW1lbnQuY3VycmVudFNjcmlwdCBhcyBhIGZhbGxiYWNrXG5cdFx0XHRcdGlmICghYmFzZVVSTCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7XG5cdFx0XHRcdFx0c3JjID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cblx0XHRcdFx0XHRpZiAoc3JjLmluZGV4T2YoJy5taW4nKSAhPSAtMSkge1xuXHRcdFx0XHRcdFx0c3VmZml4ID0gJy5taW4nO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJhc2VVUkwgPSBzcmMuc3Vic3RyaW5nKDAsIHNyYy5sYXN0SW5kZXhPZignLycpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEJhc2UgVVJMIHdoZXJlIHRoZSByb290IGRpcmVjdG9yeSBpZiBUaW55TUNFIGlzIGxvY2F0ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByb3BlcnR5IGJhc2VVUkxcblx0XHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdFx0ICovXG5cdFx0XHRzZWxmLmJhc2VVUkwgPSBuZXcgVVJJKGRvY3VtZW50QmFzZVVSTCkudG9BYnNvbHV0ZShiYXNlVVJMKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBEb2N1bWVudCBiYXNlIFVSTCB3aGVyZSB0aGUgY3VycmVudCBkb2N1bWVudCBpcyBsb2NhdGVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwcm9wZXJ0eSBkb2N1bWVudEJhc2VVUkxcblx0XHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdFx0ICovXG5cdFx0XHRzZWxmLmRvY3VtZW50QmFzZVVSTCA9IGRvY3VtZW50QmFzZVVSTDtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBYnNvbHV0ZSBiYXNlVVJJIGZvciB0aGUgaW5zdGFsbGF0aW9uIHBhdGggb2YgVGlueU1DRS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcHJvcGVydHkgYmFzZVVSSVxuXHRcdFx0ICogQHR5cGUgdGlueW1jZS51dGlsLlVSSVxuXHRcdFx0ICovXG5cdFx0XHRzZWxmLmJhc2VVUkkgPSBuZXcgVVJJKHNlbGYuYmFzZVVSTCk7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQ3VycmVudCBzdWZmaXggdG8gYWRkIHRvIGVhY2ggcGx1Z2luL3RoZW1lIHRoYXQgZ2V0cyBsb2FkZWQgZm9yIGV4YW1wbGUgXCIubWluXCIuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHByb3BlcnR5IHN1ZmZpeFxuXHRcdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0XHQgKi9cblx0XHRcdHNlbGYuc3VmZml4ID0gc3VmZml4O1xuXG5cdFx0XHRzZWxmLmZvY3VzTWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoc2VsZik7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgZWRpdG9yIGluc3RhbmNlcy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgb3ZlcnJpZGVEZWZhdWx0c1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0U2V0dGluZ3MgRGVmYXVsdHMgc2V0dGluZ3Mgb2JqZWN0LlxuXHRcdCAqL1xuXHRcdG92ZXJyaWRlRGVmYXVsdHM6IGZ1bmN0aW9uKGRlZmF1bHRTZXR0aW5ncykge1xuXHRcdFx0dmFyIGJhc2VVcmwsIHN1ZmZpeDtcblxuXHRcdFx0YmFzZVVybCA9IGRlZmF1bHRTZXR0aW5ncy5iYXNlX3VybDtcblx0XHRcdGlmIChiYXNlVXJsKSB7XG5cdFx0XHRcdHRoaXMuYmFzZVVSTCA9IG5ldyBVUkkodGhpcy5kb2N1bWVudEJhc2VVUkwpLnRvQWJzb2x1dGUoYmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKSk7XG5cdFx0XHRcdHRoaXMuYmFzZVVSSSA9IG5ldyBVUkkodGhpcy5iYXNlVVJMKTtcblx0XHRcdH1cblxuXHRcdFx0c3VmZml4ID0gZGVmYXVsdFNldHRpbmdzLnN1ZmZpeDtcblx0XHRcdGlmIChkZWZhdWx0U2V0dGluZ3Muc3VmZml4KSB7XG5cdFx0XHRcdHRoaXMuc3VmZml4ID0gc3VmZml4O1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRlZmF1bHRTZXR0aW5ncyA9IGRlZmF1bHRTZXR0aW5ncztcblxuXHRcdFx0dmFyIHBsdWdpbkJhc2VVcmxzID0gZGVmYXVsdFNldHRpbmdzLnBsdWdpbl9iYXNlX3VybHM7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIHBsdWdpbkJhc2VVcmxzKSB7XG5cdFx0XHRcdEFkZE9uTWFuYWdlci5QbHVnaW5NYW5hZ2VyLnVybHNbbmFtZV0gPSBwbHVnaW5CYXNlVXJsc1tuYW1lXTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW5pdGlhbGl6ZXMgYSBzZXQgb2YgZWRpdG9ycy4gVGhpcyBtZXRob2Qgd2lsbCBjcmVhdGUgZWRpdG9ycyBiYXNlZCBvbiB2YXJpb3VzIHNldHRpbmdzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpbml0XG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIFNldHRpbmdzIG9iamVjdCB0byBiZSBwYXNzZWQgdG8gZWFjaCBlZGl0b3IgaW5zdGFuY2UuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51dGlsLlByb21pc2V9IFByb21pc2UgdGhhdCBnZXRzIHJlc29sdmVkIHdpdGggYW4gYXJyYXkgb2YgZWRpdG9ycyB3aGVuIGFsbCBlZGl0b3IgaW5zdGFuY2VzIGFyZSBpbml0aWFsaXplZC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIEluaXRpYWxpemVzIGEgZWRpdG9yIHVzaW5nIHRoZSBsb25nZXIgbWV0aG9kXG5cdFx0ICogdGlueW1jZS5FZGl0b3JNYW5hZ2VyLmluaXQoe1xuXHRcdCAqICAgIHNvbWVfc2V0dGluZ3MgOiAnc29tZSB2YWx1ZSdcblx0XHQgKiB9KTtcblx0XHQgKlxuXHRcdCAqIC8vIEluaXRpYWxpemVzIGEgZWRpdG9yIGluc3RhbmNlIHVzaW5nIHRoZSBzaG9ydGVyIHZlcnNpb24gYW5kIHdpdGggYSBwcm9taXNlXG5cdFx0ICogdGlueW1jZS5pbml0KHtcblx0XHQgKiAgICBzb21lX3NldHRpbmdzIDogJ3NvbWUgdmFsdWUnXG5cdFx0ICogfSkudGhlbihmdW5jdGlvbihlZGl0b3JzKSB7XG5cdFx0ICogICAgLi4uXG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcmVzdWx0LCBpbnZhbGlkSW5saW5lVGFyZ2V0cztcblxuXHRcdFx0aW52YWxpZElubGluZVRhcmdldHMgPSBUb29scy5tYWtlTWFwKFxuXHRcdFx0XHQnYXJlYSBiYXNlIGJhc2Vmb250IGJyIGNvbCBmcmFtZSBociBpbWcgaW5wdXQgaXNpbmRleCBsaW5rIG1ldGEgcGFyYW0gZW1iZWQgc291cmNlIHdiciB0cmFjayAnICtcblx0XHRcdFx0J2NvbGdyb3VwIG9wdGlvbiB0Ym9keSB0Zm9vdCB0aGVhZCB0ciBzY3JpcHQgbm9zY3JpcHQgc3R5bGUgdGV4dGFyZWEgdmlkZW8gYXVkaW8gaWZyYW1lIG9iamVjdCBtZW51Jyxcblx0XHRcdFx0JyAnXG5cdFx0XHQpO1xuXG5cdFx0XHRmdW5jdGlvbiBpc0ludmFsaWRJbmxpbmVUYXJnZXQoc2V0dGluZ3MsIGVsbSkge1xuXHRcdFx0XHRyZXR1cm4gc2V0dGluZ3MuaW5saW5lICYmIGVsbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgaW4gaW52YWxpZElubGluZVRhcmdldHM7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHJlcG9ydChtc2csIGVsbSkge1xuXHRcdFx0XHQvLyBMb2cgaW4gYSBub24gdGVzdCBlbnZpcm9ubWVudFxuXHRcdFx0XHRpZiAod2luZG93LmNvbnNvbGUgJiYgIXdpbmRvdy50ZXN0KSB7XG5cdFx0XHRcdFx0d2luZG93LmNvbnNvbGUubG9nKG1zZywgZWxtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBjcmVhdGVJZChlbG0pIHtcblx0XHRcdFx0dmFyIGlkID0gZWxtLmlkO1xuXG5cdFx0XHRcdC8vIFVzZSBlbGVtZW50IGlkLCBvciB1bmlxdWUgbmFtZSBvciBnZW5lcmF0ZSBhIHVuaXF1ZSBpZFxuXHRcdFx0XHRpZiAoIWlkKSB7XG5cdFx0XHRcdFx0aWQgPSBlbG0ubmFtZTtcblxuXHRcdFx0XHRcdGlmIChpZCAmJiAhRE9NLmdldChpZCkpIHtcblx0XHRcdFx0XHRcdGlkID0gZWxtLm5hbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIEdlbmVyYXRlIHVuaXF1ZSBuYW1lXG5cdFx0XHRcdFx0XHRpZCA9IERPTS51bmlxdWVJZCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsbS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGlkO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBleGVjQ2FsbGJhY2sobmFtZSkge1xuXHRcdFx0XHR2YXIgY2FsbGJhY2sgPSBzZXR0aW5nc1tuYW1lXTtcblxuXHRcdFx0XHRpZiAoIWNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrLmFwcGx5KHNlbGYsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMikpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBoYXNDbGFzcyhlbG0sIGNsYXNzTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gY2xhc3NOYW1lLmNvbnN0cnVjdG9yID09PSBSZWdFeHAgPyBjbGFzc05hbWUudGVzdChlbG0uY2xhc3NOYW1lKSA6IERPTS5oYXNDbGFzcyhlbG0sIGNsYXNzTmFtZSk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZpbmRUYXJnZXRzKHNldHRpbmdzKSB7XG5cdFx0XHRcdHZhciBsLCB0YXJnZXRzID0gW107XG5cblx0XHRcdFx0aWYgKHNldHRpbmdzLnR5cGVzKSB7XG5cdFx0XHRcdFx0ZWFjaChzZXR0aW5ncy50eXBlcywgZnVuY3Rpb24odHlwZSkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0cyA9IHRhcmdldHMuY29uY2F0KERPTS5zZWxlY3QodHlwZS5zZWxlY3RvcikpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRhcmdldHM7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc2V0dGluZ3Muc2VsZWN0b3IpIHtcblx0XHRcdFx0XHRyZXR1cm4gRE9NLnNlbGVjdChzZXR0aW5ncy5zZWxlY3Rvcik7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc2V0dGluZ3MudGFyZ2V0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtzZXR0aW5ncy50YXJnZXRdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gb2xkIHNldHRpbmdcblx0XHRcdFx0c3dpdGNoIChzZXR0aW5ncy5tb2RlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImV4YWN0XCI6XG5cdFx0XHRcdFx0XHRsID0gc2V0dGluZ3MuZWxlbWVudHMgfHwgJyc7XG5cblx0XHRcdFx0XHRcdGlmIChsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0ZWFjaChleHBsb2RlKGwpLCBmdW5jdGlvbihpZCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlbG07XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoKGVsbSA9IERPTS5nZXQoaWQpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0cy5wdXNoKGVsbSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVhY2goZG9jdW1lbnQuZm9ybXMsIGZ1bmN0aW9uKGYpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWFjaChmLmVsZW1lbnRzLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUubmFtZSA9PT0gaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkID0gJ21jZV9lZGl0b3JfJyArIGluc3RhbmNlQ291bnRlcisrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0RE9NLnNldEF0dHJpYihlLCAnaWQnLCBpZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXRzLnB1c2goZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJ0ZXh0YXJlYXNcIjpcblx0XHRcdFx0XHRjYXNlIFwic3BlY2lmaWNfdGV4dGFyZWFzXCI6XG5cdFx0XHRcdFx0XHRlYWNoKERPTS5zZWxlY3QoJ3RleHRhcmVhJyksIGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoc2V0dGluZ3MuZWRpdG9yX2Rlc2VsZWN0b3IgJiYgaGFzQ2xhc3MoZWxtLCBzZXR0aW5ncy5lZGl0b3JfZGVzZWxlY3RvcikpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLmVkaXRvcl9zZWxlY3RvciB8fCBoYXNDbGFzcyhlbG0sIHNldHRpbmdzLmVkaXRvcl9zZWxlY3RvcikpIHtcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRzLnB1c2goZWxtKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0YXJnZXRzO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcHJvdmlkZVJlc3VsdHMgPSBmdW5jdGlvbihlZGl0b3JzKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGVkaXRvcnM7XG5cdFx0XHR9O1xuXG5cdFx0XHRmdW5jdGlvbiBpbml0RWRpdG9ycygpIHtcblx0XHRcdFx0dmFyIGluaXRDb3VudCA9IDAsIGVkaXRvcnMgPSBbXSwgdGFyZ2V0cztcblxuXHRcdFx0XHRmdW5jdGlvbiBjcmVhdGVFZGl0b3IoaWQsIHNldHRpbmdzLCB0YXJnZXRFbG0pIHtcblx0XHRcdFx0XHR2YXIgZWRpdG9yID0gbmV3IEVkaXRvcihpZCwgc2V0dGluZ3MsIHNlbGYpO1xuXG5cdFx0XHRcdFx0ZWRpdG9ycy5wdXNoKGVkaXRvcik7XG5cblx0XHRcdFx0XHRlZGl0b3Iub24oJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICgrK2luaXRDb3VudCA9PT0gdGFyZ2V0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0cHJvdmlkZVJlc3VsdHMoZWRpdG9ycyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRlZGl0b3IudGFyZ2V0RWxtID0gZWRpdG9yLnRhcmdldEVsbSB8fCB0YXJnZXRFbG07XG5cdFx0XHRcdFx0ZWRpdG9yLnJlbmRlcigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0RE9NLnVuYmluZCh3aW5kb3csICdyZWFkeScsIGluaXRFZGl0b3JzKTtcblx0XHRcdFx0ZXhlY0NhbGxiYWNrKCdvbnBhZ2Vsb2FkJyk7XG5cblx0XHRcdFx0dGFyZ2V0cyA9ICQudW5pcXVlKGZpbmRUYXJnZXRzKHNldHRpbmdzKSk7XG5cblx0XHRcdFx0Ly8gVE9ETzogRGVwcmVjYXRlIHRoaXMgb25lXG5cdFx0XHRcdGlmIChzZXR0aW5ncy50eXBlcykge1xuXHRcdFx0XHRcdGVhY2goc2V0dGluZ3MudHlwZXMsIGZ1bmN0aW9uKHR5cGUpIHtcblx0XHRcdFx0XHRcdFRvb2xzLmVhY2godGFyZ2V0cywgZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChET00uaXMoZWxtLCB0eXBlLnNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUVkaXRvcihjcmVhdGVJZChlbG0pLCBleHRlbmQoe30sIHNldHRpbmdzLCB0eXBlKSwgZWxtKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0VG9vbHMuZWFjaCh0YXJnZXRzLCBmdW5jdGlvbihlbG0pIHtcblx0XHRcdFx0XHRwdXJnZURlc3Ryb3llZEVkaXRvcihzZWxmLmdldChlbG0uaWQpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGFyZ2V0cyA9IFRvb2xzLmdyZXAodGFyZ2V0cywgZnVuY3Rpb24oZWxtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICFzZWxmLmdldChlbG0uaWQpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRlYWNoKHRhcmdldHMsIGZ1bmN0aW9uKGVsbSkge1xuXHRcdFx0XHRcdGlmIChpc0ludmFsaWRJbmxpbmVUYXJnZXQoc2V0dGluZ3MsIGVsbSkpIHtcblx0XHRcdFx0XHRcdHJlcG9ydCgnQ291bGQgbm90IGluaXRpYWxpemUgaW5saW5lIGVkaXRvciBvbiBpbnZhbGlkIGlubGluZSB0YXJnZXQgZWxlbWVudCcsIGVsbSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNyZWF0ZUVkaXRvcihjcmVhdGVJZChlbG0pLCBzZXR0aW5ncywgZWxtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLnNldHRpbmdzID0gc2V0dGluZ3M7XG5cdFx0XHRET00uYmluZCh3aW5kb3csICdyZWFkeScsIGluaXRFZGl0b3JzKTtcblxuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwcm92aWRlUmVzdWx0cyA9IGZ1bmN0aW9uKGVkaXRvcnMpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoZWRpdG9ycyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgYSBlZGl0b3IgaW5zdGFuY2UgYnkgaWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGdldFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nL051bWJlcn0gaWQgRWRpdG9yIGluc3RhbmNlIGlkIG9yIGluZGV4IHRvIHJldHVybi5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLkVkaXRvcn0gRWRpdG9yIGluc3RhbmNlIHRvIHJldHVybi5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIEFkZHMgYW4gb25jbGljayBldmVudCB0byBhbiBlZGl0b3IgYnkgaWQgKHNob3J0ZXIgdmVyc2lvbilcblx0XHQgKiB0aW55bWNlLmdldCgnbXl0ZXh0Ym94Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdCAqICAgIGVkLndpbmRvd01hbmFnZXIuYWxlcnQoJ0hlbGxvIHdvcmxkIScpO1xuXHRcdCAqIH0pO1xuXHRcdCAqXG5cdFx0ICogLy8gQWRkcyBhbiBvbmNsaWNrIGV2ZW50IHRvIGFuIGVkaXRvciBieSBpZCAobG9uZ2VyIHZlcnNpb24pXG5cdFx0ICogdGlueW1jZS5FZGl0b3JNYW5hZ2VyLmdldCgnbXl0ZXh0Ym94Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdCAqICAgIGVkLndpbmRvd01hbmFnZXIuYWxlcnQoJ0hlbGxvIHdvcmxkIScpO1xuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHRcdGdldDogZnVuY3Rpb24oaWQpIHtcblx0XHRcdGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lZGl0b3JzO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaWQgaW4gdGhpcy5lZGl0b3JzID8gdGhpcy5lZGl0b3JzW2lkXSA6IG51bGw7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgYW4gZWRpdG9yIGluc3RhbmNlIHRvIHRoZSBlZGl0b3IgY29sbGVjdGlvbi4gVGhpcyB3aWxsIGFsc28gc2V0IGl0IGFzIHRoZSBhY3RpdmUgZWRpdG9yLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhZGRcblx0XHQgKiBAcGFyYW0ge3RpbnltY2UuRWRpdG9yfSBlZGl0b3IgRWRpdG9yIGluc3RhbmNlIHRvIGFkZCB0byB0aGUgY29sbGVjdGlvbi5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLkVkaXRvcn0gVGhlIHNhbWUgaW5zdGFuY2UgdGhhdCBnb3QgcGFzc2VkIGluLlxuXHRcdCAqL1xuXHRcdGFkZDogZnVuY3Rpb24oZWRpdG9yKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGVkaXRvcnMgPSBzZWxmLmVkaXRvcnM7XG5cblx0XHRcdC8vIEFkZCBuYW1lZCBhbmQgaW5kZXggZWRpdG9yIGluc3RhbmNlXG5cdFx0XHRlZGl0b3JzW2VkaXRvci5pZF0gPSBlZGl0b3I7XG5cdFx0XHRlZGl0b3JzLnB1c2goZWRpdG9yKTtcblxuXHRcdFx0dG9nZ2xlR2xvYmFsRXZlbnRzKGVkaXRvcnMsIHRydWUpO1xuXG5cdFx0XHQvLyBEb2Vzbid0IGNhbGwgc2V0QWN0aXZlIG1ldGhvZCBzaW5jZSB3ZSBkb24ndCB3YW50XG5cdFx0XHQvLyB0byBmaXJlIGEgYnVuY2ggb2YgYWN0aXZhdGUvZGVhY3RpdmF0ZSBjYWxscyB3aGlsZSBpbml0aWFsaXppbmdcblx0XHRcdHNlbGYuYWN0aXZlRWRpdG9yID0gZWRpdG9yO1xuXG5cdFx0XHRzZWxmLmZpcmUoJ0FkZEVkaXRvcicsIHtlZGl0b3I6IGVkaXRvcn0pO1xuXG5cdFx0XHRpZiAoIWJlZm9yZVVubG9hZERlbGVnYXRlKSB7XG5cdFx0XHRcdGJlZm9yZVVubG9hZERlbGVnYXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5maXJlKCdCZWZvcmVVbmxvYWQnKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRET00uYmluZCh3aW5kb3csICdiZWZvcmV1bmxvYWQnLCBiZWZvcmVVbmxvYWREZWxlZ2F0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlZGl0b3I7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZXMgYW4gZWRpdG9yIGluc3RhbmNlIGFuZCBhZGRzIGl0IHRvIHRoZSBFZGl0b3JNYW5hZ2VyIGNvbGxlY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNyZWF0ZUVkaXRvclxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBpZCBJbnN0YW5jZSBpZCB0byB1c2UgZm9yIGVkaXRvci5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgRWRpdG9yIGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuRWRpdG9yfSBFZGl0b3IgaW5zdGFuY2UgdGhhdCBnb3QgY3JlYXRlZC5cblx0XHQgKi9cblx0XHRjcmVhdGVFZGl0b3I6IGZ1bmN0aW9uKGlkLCBzZXR0aW5ncykge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRkKG5ldyBFZGl0b3IoaWQsIHNldHRpbmdzLCB0aGlzKSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgYSBlZGl0b3Igb3IgZWRpdG9ycyBmb3JtIHBhZ2UuXG5cdFx0ICpcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vIFJlbW92ZSBhbGwgZWRpdG9ycyBib3VuZCB0byBkaXZzXG5cdFx0ICogdGlueW1jZS5yZW1vdmUoJ2RpdicpO1xuXHRcdCAqXG5cdFx0ICogLy8gUmVtb3ZlIGFsbCBlZGl0b3JzIGJvdW5kIHRvIHRleHRhcmVhc1xuXHRcdCAqIHRpbnltY2UucmVtb3ZlKCd0ZXh0YXJlYScpO1xuXHRcdCAqXG5cdFx0ICogLy8gUmVtb3ZlIGFsbCBlZGl0b3JzXG5cdFx0ICogdGlueW1jZS5yZW1vdmUoKTtcblx0XHQgKlxuXHRcdCAqIC8vIFJlbW92ZSBzcGVjaWZpYyBpbnN0YW5jZSBieSBpZFxuXHRcdCAqIHRpbnltY2UucmVtb3ZlKCcjaWQnKTtcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVtb3ZlXG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLkVkaXRvci9TdHJpbmcvT2JqZWN0fSBbc2VsZWN0b3JdIENTUyBzZWxlY3RvciBvciBlZGl0b3IgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UuRWRpdG9yfSBUaGUgZWRpdG9yIHRoYXQgZ290IHBhc3NlZCBpbiB3aWxsIGJlIHJldHVybiBpZiBpdCB3YXMgZm91bmQgb3RoZXJ3aXNlIG51bGwuXG5cdFx0ICovXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbihzZWxlY3Rvcikge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBpLCBlZGl0b3JzID0gc2VsZi5lZGl0b3JzLCBlZGl0b3I7XG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgZWRpdG9yc1xuXHRcdFx0aWYgKCFzZWxlY3Rvcikge1xuXHRcdFx0XHRmb3IgKGkgPSBlZGl0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0c2VsZi5yZW1vdmUoZWRpdG9yc1tpXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBlZGl0b3JzIGJ5IHNlbGVjdG9yXG5cdFx0XHRpZiAodHlwZW9mIHNlbGVjdG9yID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3RvciB8fCBzZWxlY3RvcjtcblxuXHRcdFx0XHRlYWNoKERPTS5zZWxlY3Qoc2VsZWN0b3IpLCBmdW5jdGlvbihlbG0pIHtcblx0XHRcdFx0XHRlZGl0b3IgPSBlZGl0b3JzW2VsbS5pZF07XG5cblx0XHRcdFx0XHRpZiAoZWRpdG9yKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZShlZGl0b3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgc3BlY2lmaWMgZWRpdG9yXG5cdFx0XHRlZGl0b3IgPSBzZWxlY3RvcjtcblxuXHRcdFx0Ly8gTm90IGluIHRoZSBjb2xsZWN0aW9uXG5cdFx0XHRpZiAoIWVkaXRvcnNbZWRpdG9yLmlkXSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlbW92ZUVkaXRvckZyb21MaXN0KGVkaXRvcikpIHtcblx0XHRcdFx0c2VsZi5maXJlKCdSZW1vdmVFZGl0b3InLCB7ZWRpdG9yOiBlZGl0b3J9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFlZGl0b3JzLmxlbmd0aCkge1xuXHRcdFx0XHRET00udW5iaW5kKHdpbmRvdywgJ2JlZm9yZXVubG9hZCcsIGJlZm9yZVVubG9hZERlbGVnYXRlKTtcblx0XHRcdH1cblxuXHRcdFx0ZWRpdG9yLnJlbW92ZSgpO1xuXG5cdFx0XHR0b2dnbGVHbG9iYWxFdmVudHMoZWRpdG9ycywgZWRpdG9ycy5sZW5ndGggPiAwKTtcblxuXHRcdFx0cmV0dXJuIGVkaXRvcjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRXhlY3V0ZXMgYSBzcGVjaWZpYyBjb21tYW5kIG9uIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVkaXRvci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZXhlY0NvbW1hbmRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY21kIENvbW1hbmQgdG8gcGVyZm9ybSBmb3IgZXhhbXBsZSBCb2xkLlxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gdWkgT3B0aW9uYWwgYm9vbGVhbiBzdGF0ZSBpZiBhIFVJIHNob3VsZCBiZSBwcmVzZW50ZWQgZm9yIHRoZSBjb21tYW5kIG9yIG5vdC5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgT3B0aW9uYWwgdmFsdWUgcGFyYW1ldGVyIGxpa2UgZm9yIGV4YW1wbGUgYW4gVVJMIHRvIGEgbGluay5cblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBjb21tYW5kIHdhcyBleGVjdXRlZCBvciBub3QuXG5cdFx0ICovXG5cdFx0ZXhlY0NvbW1hbmQ6IGZ1bmN0aW9uKGNtZCwgdWksIHZhbHVlKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGVkaXRvciA9IHNlbGYuZ2V0KHZhbHVlKTtcblxuXHRcdFx0Ly8gTWFuYWdlciBjb21tYW5kc1xuXHRcdFx0c3dpdGNoIChjbWQpIHtcblx0XHRcdFx0Y2FzZSBcIm1jZUFkZEVkaXRvclwiOlxuXHRcdFx0XHRcdGlmICghc2VsZi5nZXQodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRuZXcgRWRpdG9yKHZhbHVlLCBzZWxmLnNldHRpbmdzLCBzZWxmKS5yZW5kZXIoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdFx0XHRjYXNlIFwibWNlUmVtb3ZlRWRpdG9yXCI6XG5cdFx0XHRcdFx0aWYgKGVkaXRvcikge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLnJlbW92ZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0XHRcdGNhc2UgJ21jZVRvZ2dsZUVkaXRvcic6XG5cdFx0XHRcdFx0aWYgKCFlZGl0b3IpIHtcblx0XHRcdFx0XHRcdHNlbGYuZXhlY0NvbW1hbmQoJ21jZUFkZEVkaXRvcicsIDAsIHZhbHVlKTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChlZGl0b3IuaXNIaWRkZW4oKSkge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUnVuIGNvbW1hbmQgb24gYWN0aXZlIGVkaXRvclxuXHRcdFx0aWYgKHNlbGYuYWN0aXZlRWRpdG9yKSB7XG5cdFx0XHRcdHJldHVybiBzZWxmLmFjdGl2ZUVkaXRvci5leGVjQ29tbWFuZChjbWQsIHVpLCB2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ2FsbHMgdGhlIHNhdmUgbWV0aG9kIG9uIGFsbCBlZGl0b3IgaW5zdGFuY2VzIGluIHRoZSBjb2xsZWN0aW9uLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBhIGZvcm0gaXMgdG8gYmUgc3VibWl0dGVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0cmlnZ2VyU2F2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy8gU2F2ZXMgYWxsIGNvbnRlbnRzXG5cdFx0ICogdGlueU1DRS50cmlnZ2VyU2F2ZSgpO1xuXHRcdCAqL1xuXHRcdHRyaWdnZXJTYXZlOiBmdW5jdGlvbigpIHtcblx0XHRcdGVhY2godGhpcy5lZGl0b3JzLCBmdW5jdGlvbihlZGl0b3IpIHtcblx0XHRcdFx0ZWRpdG9yLnNhdmUoKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBBZGRzIGEgbGFuZ3VhZ2UgcGFjaywgdGhpcyBnZXRzIGNhbGxlZCBieSB0aGUgbG9hZGVkIGxhbmd1YWdlIGZpbGVzIGxpa2UgZW4uanMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGFkZEkxOG5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY29kZSBPcHRpb25hbCBsYW5ndWFnZSBjb2RlLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtcyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHRyYW5zbGF0aW9ucy5cblx0XHQgKi9cblx0XHRhZGRJMThuOiBmdW5jdGlvbihjb2RlLCBpdGVtcykge1xuXHRcdFx0STE4bi5hZGQoY29kZSwgaXRlbXMpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUcmFuc2xhdGVzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIHVzaW5nIHRoZSBsYW5ndWFnZSBwYWNrIGl0ZW1zLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0cmFuc2xhdGVcblx0XHQgKiBAcGFyYW0ge1N0cmluZy9BcnJheS9PYmplY3R9IHRleHQgU3RyaW5nIHRvIHRyYW5zbGF0ZVxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gVHJhbnNsYXRlZCBzdHJpbmcuXG5cdFx0ICovXG5cdFx0dHJhbnNsYXRlOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0XHRyZXR1cm4gSTE4bi50cmFuc2xhdGUodGV4dCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhlIGFjdGl2ZSBlZGl0b3IgaW5zdGFuY2UgYW5kIGZpcmVzIHRoZSBkZWFjdGl2YXRlL2FjdGl2YXRlIGV2ZW50cy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2V0QWN0aXZlXG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLkVkaXRvcn0gZWRpdG9yIEVkaXRvciBpbnN0YW5jZSB0byBzZXQgYXMgdGhlIGFjdGl2ZSBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRzZXRBY3RpdmU6IGZ1bmN0aW9uKGVkaXRvcikge1xuXHRcdFx0dmFyIGFjdGl2ZUVkaXRvciA9IHRoaXMuYWN0aXZlRWRpdG9yO1xuXG5cdFx0XHRpZiAodGhpcy5hY3RpdmVFZGl0b3IgIT0gZWRpdG9yKSB7XG5cdFx0XHRcdGlmIChhY3RpdmVFZGl0b3IpIHtcblx0XHRcdFx0XHRhY3RpdmVFZGl0b3IuZmlyZSgnZGVhY3RpdmF0ZScsIHtyZWxhdGVkVGFyZ2V0OiBlZGl0b3J9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVkaXRvci5maXJlKCdhY3RpdmF0ZScsIHtyZWxhdGVkVGFyZ2V0OiBhY3RpdmVFZGl0b3J9KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hY3RpdmVFZGl0b3IgPSBlZGl0b3I7XG5cdFx0fVxuXHR9O1xuXG5cdGV4dGVuZChFZGl0b3JNYW5hZ2VyLCBPYnNlcnZhYmxlKTtcblxuXHRFZGl0b3JNYW5hZ2VyLnNldHVwKCk7XG5cblx0Ly8gRXhwb3J0IEVkaXRvck1hbmFnZXIgYXMgdGlueW1jZS90aW55bWNlIGluIGdsb2JhbCBuYW1lc3BhY2Vcblx0d2luZG93LnRpbnltY2UgPSB3aW5kb3cudGlueU1DRSA9IEVkaXRvck1hbmFnZXI7XG5cblx0cmV0dXJuIEVkaXRvck1hbmFnZXI7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL0xlZ2FjeUlucHV0LmpzXG5cbi8qKlxuICogTGVnYWN5SW5wdXQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBsZWdhY3kgaW5wdXQgdG8gbW9kZXJuIEhUTUwuXG4gKlxuICogQGNsYXNzIHRpbnltY2UuTGVnYWN5SW5wdXRcbiAqIEBwcml2YXRlXG4gKi9cbmRlZmluZShcInRpbnltY2UvTGVnYWN5SW5wdXRcIiwgW1xuXHRcInRpbnltY2UvRWRpdG9yTWFuYWdlclwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihFZGl0b3JNYW5hZ2VyLCBUb29scykge1xuXHR2YXIgZWFjaCA9IFRvb2xzLmVhY2gsIGV4cGxvZGUgPSBUb29scy5leHBsb2RlO1xuXG5cdEVkaXRvck1hbmFnZXIub24oJ0FkZEVkaXRvcicsIGZ1bmN0aW9uKGUpIHtcblx0XHR2YXIgZWRpdG9yID0gZS5lZGl0b3I7XG5cblx0XHRlZGl0b3Iub24oJ3ByZUluaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBmaWx0ZXJzLCBmb250U2l6ZXMsIGRvbSwgc2V0dGluZ3MgPSBlZGl0b3Iuc2V0dGluZ3M7XG5cblx0XHRcdGZ1bmN0aW9uIHJlcGxhY2VXaXRoU3Bhbihub2RlLCBzdHlsZXMpIHtcblx0XHRcdFx0ZWFjaChzdHlsZXMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRkb20uc2V0U3R5bGUobm9kZSwgbmFtZSwgdmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0ZG9tLnJlbmFtZShub2RlLCAnc3BhbicpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBjb252ZXJ0KGUpIHtcblx0XHRcdFx0ZG9tID0gZWRpdG9yLmRvbTtcblxuXHRcdFx0XHRpZiAoc2V0dGluZ3MuY29udmVydF9mb250c190b19zcGFucykge1xuXHRcdFx0XHRcdGVhY2goZG9tLnNlbGVjdCgnZm9udCx1LHN0cmlrZScsIGUubm9kZSksIGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRcdFx0XHRcdGZpbHRlcnNbbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXShkb20sIG5vZGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5pbmxpbmVfc3R5bGVzKSB7XG5cdFx0XHRcdGZvbnRTaXplcyA9IGV4cGxvZGUoc2V0dGluZ3MuZm9udF9zaXplX2xlZ2FjeV92YWx1ZXMpO1xuXG5cdFx0XHRcdGZpbHRlcnMgPSB7XG5cdFx0XHRcdFx0Zm9udDogZnVuY3Rpb24oZG9tLCBub2RlKSB7XG5cdFx0XHRcdFx0XHRyZXBsYWNlV2l0aFNwYW4obm9kZSwge1xuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG5vZGUuc3R5bGUuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0XHRcdFx0XHRjb2xvcjogbm9kZS5jb2xvcixcblx0XHRcdFx0XHRcdFx0Zm9udEZhbWlseTogbm9kZS5mYWNlLFxuXHRcdFx0XHRcdFx0XHRmb250U2l6ZTogZm9udFNpemVzW3BhcnNlSW50KG5vZGUuc2l6ZSwgMTApIC0gMV1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHR1OiBmdW5jdGlvbihkb20sIG5vZGUpIHtcblx0XHRcdFx0XHRcdC8vIEhUTUw1IGFsbG93cyBVIGVsZW1lbnRcblx0XHRcdFx0XHRcdGlmIChlZGl0b3Iuc2V0dGluZ3Muc2NoZW1hID09PSBcImh0bWw0XCIpIHtcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVdpdGhTcGFuKG5vZGUsIHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSdcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdHN0cmlrZTogZnVuY3Rpb24oZG9tLCBub2RlKSB7XG5cdFx0XHRcdFx0XHRyZXBsYWNlV2l0aFNwYW4obm9kZSwge1xuXHRcdFx0XHRcdFx0XHR0ZXh0RGVjb3JhdGlvbjogJ2xpbmUtdGhyb3VnaCdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRlZGl0b3Iub24oJ1ByZVByb2Nlc3MgU2V0Q29udGVudCcsIGNvbnZlcnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9YSFIuanNcblxuLyoqXG4gKiBYSFIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGVuYWJsZXMgeW91IHRvIHNlbmQgWE1MSFRUUFJlcXVlc3RzIGNyb3NzIGJyb3dzZXIuXG4gKiBAY2xhc3MgdGlueW1jZS51dGlsLlhIUlxuICogQG1peGVzIHRpbnltY2UudXRpbC5PYnNlcnZhYmxlXG4gKiBAc3RhdGljXG4gKiBAZXhhbXBsZVxuICogLy8gU2VuZHMgYSBsb3cgbGV2ZWwgQWpheCByZXF1ZXN0XG4gKiB0aW55bWNlLnV0aWwuWEhSLnNlbmQoe1xuICogICAgdXJsOiAnc29tZXVybCcsXG4gKiAgICBzdWNjZXNzOiBmdW5jdGlvbih0ZXh0KSB7XG4gKiAgICAgICBjb25zb2xlLmRlYnVnKHRleHQpO1xuICogICAgfVxuICogfSk7XG4gKlxuICogLy8gQWRkIGN1c3RvbSBoZWFkZXIgdG8gWEhSIHJlcXVlc3RcbiAqIHRpbnltY2UudXRpbC5YSFIub24oJ2JlZm9yZVNlbmQnLCBmdW5jdGlvbihlKSB7XG4gKiAgICAgZS54aHIuc2V0UmVxdWVzdEhlYWRlcignWC1SZXF1ZXN0ZWQtV2l0aCcsICdTb21ldGhpbmcnKTtcbiAqIH0pO1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL3V0aWwvWEhSXCIsIFtcblx0XCJ0aW55bWNlL3V0aWwvT2JzZXJ2YWJsZVwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihPYnNlcnZhYmxlLCBUb29scykge1xuXHR2YXIgWEhSID0ge1xuXHRcdC8qKlxuXHRcdCAqIFNlbmRzIGEgWE1MSFRUUFJlcXVlc3QuXG5cdFx0ICogQ29uc3VsdCB0aGUgV2lraSBmb3IgZGV0YWlscyBvbiB3aGF0IHNldHRpbmdzIHRoaXMgbWV0aG9kIHRha2VzLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZW5kXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE9iamVjdCB3aWxsIHRhcmdldCBVUkwsIGNhbGxiYWNrcyBhbmQgb3RoZXIgaW5mbyBuZWVkZWQgdG8gbWFrZSB0aGUgcmVxdWVzdC5cblx0XHQgKi9cblx0XHRzZW5kOiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHhociwgY291bnQgPSAwO1xuXG5cdFx0XHRmdW5jdGlvbiByZWFkeSgpIHtcblx0XHRcdFx0aWYgKCFzZXR0aW5ncy5hc3luYyB8fCB4aHIucmVhZHlTdGF0ZSA9PSA0IHx8IGNvdW50KysgPiAxMDAwMCkge1xuXHRcdFx0XHRcdGlmIChzZXR0aW5ncy5zdWNjZXNzICYmIGNvdW50IDwgMTAwMDAgJiYgeGhyLnN0YXR1cyA9PSAyMDApIHtcblx0XHRcdFx0XHRcdHNldHRpbmdzLnN1Y2Nlc3MuY2FsbChzZXR0aW5ncy5zdWNjZXNzX3Njb3BlLCAnJyArIHhoci5yZXNwb25zZVRleHQsIHhociwgc2V0dGluZ3MpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc2V0dGluZ3MuZXJyb3IpIHtcblx0XHRcdFx0XHRcdHNldHRpbmdzLmVycm9yLmNhbGwoc2V0dGluZ3MuZXJyb3Jfc2NvcGUsIGNvdW50ID4gMTAwMDAgPyAnVElNRURfT1VUJyA6ICdHRU5FUkFMJywgeGhyLCBzZXR0aW5ncyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0eGhyID0gbnVsbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KHJlYWR5LCAxMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVmYXVsdCBzZXR0aW5nc1xuXHRcdFx0c2V0dGluZ3Muc2NvcGUgPSBzZXR0aW5ncy5zY29wZSB8fCB0aGlzO1xuXHRcdFx0c2V0dGluZ3Muc3VjY2Vzc19zY29wZSA9IHNldHRpbmdzLnN1Y2Nlc3Nfc2NvcGUgfHwgc2V0dGluZ3Muc2NvcGU7XG5cdFx0XHRzZXR0aW5ncy5lcnJvcl9zY29wZSA9IHNldHRpbmdzLmVycm9yX3Njb3BlIHx8IHNldHRpbmdzLnNjb3BlO1xuXHRcdFx0c2V0dGluZ3MuYXN5bmMgPSBzZXR0aW5ncy5hc3luYyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XG5cdFx0XHRzZXR0aW5ncy5kYXRhID0gc2V0dGluZ3MuZGF0YSB8fCAnJztcblxuXHRcdFx0WEhSLmZpcmUoJ2JlZm9yZUluaXRpYWxpemUnLCB7c2V0dGluZ3M6IHNldHRpbmdzfSk7XG5cblx0XHRcdHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG5cdFx0XHRpZiAoeGhyKSB7XG5cdFx0XHRcdGlmICh4aHIub3ZlcnJpZGVNaW1lVHlwZSkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKHNldHRpbmdzLmNvbnRlbnRfdHlwZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR4aHIub3BlbihzZXR0aW5ncy50eXBlIHx8IChzZXR0aW5ncy5kYXRhID8gJ1BPU1QnIDogJ0dFVCcpLCBzZXR0aW5ncy51cmwsIHNldHRpbmdzLmFzeW5jKTtcblxuXHRcdFx0XHRpZiAoc2V0dGluZ3MuY3Jvc3NEb21haW4pIHtcblx0XHRcdFx0XHR4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5jb250ZW50X3R5cGUpIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgc2V0dGluZ3MuY29udGVudF90eXBlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5yZXF1ZXN0aGVhZGVycykge1xuXHRcdFx0XHRcdFRvb2xzLmVhY2goc2V0dGluZ3MucmVxdWVzdGhlYWRlcnMsIGZ1bmN0aW9uKGhlYWRlcikge1xuXHRcdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLmtleSwgaGVhZGVyLnZhbHVlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7XG5cblx0XHRcdFx0eGhyID0gWEhSLmZpcmUoJ2JlZm9yZVNlbmQnLCB7eGhyOiB4aHIsIHNldHRpbmdzOiBzZXR0aW5nc30pLnhocjtcblx0XHRcdFx0eGhyLnNlbmQoc2V0dGluZ3MuZGF0YSk7XG5cblx0XHRcdFx0Ly8gU3luY3Jvbm91cyByZXF1ZXN0XG5cdFx0XHRcdGlmICghc2V0dGluZ3MuYXN5bmMpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVhZHkoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdhaXQgZm9yIHJlc3BvbnNlLCBvblJlYWR5U3RhdGVDaGFuZ2UgY2FuIG5vdCBiZSB1c2VkIHNpbmNlIGl0IGxlYWtzIG1lbW9yeSBpbiBJRVxuXHRcdFx0XHRzZXRUaW1lb3V0KHJlYWR5LCAxMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdFRvb2xzLmV4dGVuZChYSFIsIE9ic2VydmFibGUpO1xuXG5cdHJldHVybiBYSFI7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3V0aWwvSlNPTi5qc1xuXG4vKipcbiAqIEpTT04uanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBKU09OIHBhcnNlciBhbmQgc2VyaWFsaXplciBjbGFzcy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51dGlsLkpTT05cbiAqIEBzdGF0aWNcbiAqIEBleGFtcGxlXG4gKiAvLyBKU09OIHBhcnNlIGEgc3RyaW5nIGludG8gYW4gb2JqZWN0XG4gKiB2YXIgb2JqID0gdGlueW1jZS51dGlsLkpTT04ucGFyc2Uoc29tZXN0cmluZyk7XG4gKlxuICogLy8gSlNPTiBzZXJpYWxpemUgYSBvYmplY3QgaW50byBhbiBzdHJpbmdcbiAqIHZhciBzdHIgPSB0aW55bWNlLnV0aWwuSlNPTi5zZXJpYWxpemUob2JqKTtcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91dGlsL0pTT05cIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRmdW5jdGlvbiBzZXJpYWxpemUobywgcXVvdGUpIHtcblx0XHR2YXIgaSwgdiwgdCwgbmFtZTtcblxuXHRcdHF1b3RlID0gcXVvdGUgfHwgJ1wiJztcblxuXHRcdGlmIChvID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gJ251bGwnO1xuXHRcdH1cblxuXHRcdHQgPSB0eXBlb2YgbztcblxuXHRcdGlmICh0ID09ICdzdHJpbmcnKSB7XG5cdFx0XHR2ID0gJ1xcYmJcXHR0XFxublxcZmZcXHJyXFxcIlwiXFwnXFwnXFxcXFxcXFwnO1xuXG5cdFx0XHQvKmVzbGludCBuby1jb250cm9sLXJlZ2V4OjAgKi9cblx0XHRcdHJldHVybiBxdW90ZSArIG8ucmVwbGFjZSgvKFtcXHUwMDgwLVxcdUZGRkZcXHgwMC1cXHgxZlxcXCJcXCdcXFxcXSkvZywgZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0XHQvLyBNYWtlIHN1cmUgc2luZ2xlIHF1b3RlcyBuZXZlciBnZXQgZW5jb2RlZCBpbnNpZGUgZG91YmxlIHF1b3RlcyBmb3IgSlNPTiBjb21wYXRpYmlsaXR5XG5cdFx0XHRcdGlmIChxdW90ZSA9PT0gJ1wiJyAmJiBhID09PSBcIidcIikge1xuXHRcdFx0XHRcdHJldHVybiBhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSA9IHYuaW5kZXhPZihiKTtcblxuXHRcdFx0XHRpZiAoaSArIDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gJ1xcXFwnICsgdi5jaGFyQXQoaSArIDEpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YSA9IGIuY2hhckNvZGVBdCgpLnRvU3RyaW5nKDE2KTtcblxuXHRcdFx0XHRyZXR1cm4gJ1xcXFx1JyArICcwMDAwJy5zdWJzdHJpbmcoYS5sZW5ndGgpICsgYTtcblx0XHRcdH0pICsgcXVvdGU7XG5cdFx0fVxuXG5cdFx0aWYgKHQgPT0gJ29iamVjdCcpIHtcblx0XHRcdGlmIChvLmhhc093blByb3BlcnR5ICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuXHRcdFx0XHRmb3IgKGkgPSAwLCB2ID0gJ1snOyBpIDwgby5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHYgKz0gKGkgPiAwID8gJywnIDogJycpICsgc2VyaWFsaXplKG9baV0sIHF1b3RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2ICsgJ10nO1xuXHRcdFx0fVxuXG5cdFx0XHR2ID0gJ3snO1xuXG5cdFx0XHRmb3IgKG5hbWUgaW4gbykge1xuXHRcdFx0XHRpZiAoby5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuXHRcdFx0XHRcdHYgKz0gdHlwZW9mIG9bbmFtZV0gIT0gJ2Z1bmN0aW9uJyA/ICh2Lmxlbmd0aCA+IDEgPyAnLCcgKyBxdW90ZSA6IHF1b3RlKSArIG5hbWUgK1xuXHRcdFx0XHRcdFx0cXVvdGUgKyAnOicgKyBzZXJpYWxpemUob1tuYW1lXSwgcXVvdGUpIDogJyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHYgKyAnfSc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnICsgbztcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0LyoqXG5cdFx0ICogU2VyaWFsaXplcyB0aGUgc3BlY2lmaWVkIG9iamVjdCBhcyBhIEpTT04gc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXJpYWxpemVcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBzZXJpYWxpemUgYXMgYSBKU09OIHN0cmluZy5cblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcXVvdGUgT3B0aW9uYWwgcXVvdGUgc3RyaW5nIGRlZmF1bHRzIHRvIFwiLlxuXHRcdCAqIEByZXR1cm4ge3N0cmluZ30gSlNPTiBzdHJpbmcgc2VyaWFsaXplZCBmcm9tIGlucHV0LlxuXHRcdCAqL1xuXHRcdHNlcmlhbGl6ZTogc2VyaWFsaXplLFxuXG5cdFx0LyoqXG5cdFx0ICogVW5zZXJpYWxpemVzL3BhcnNlcyB0aGUgc3BlY2lmaWVkIEpTT04gc3RyaW5nIGludG8gYSBvYmplY3QuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBhcnNlXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHMgSlNPTiBTdHJpbmcgdG8gcGFyc2UgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gT2JqZWN0IGZyb20gaW5wdXQgSlNPTiBzdHJpbmcgb3IgdW5kZWZpbmVkIGlmIGl0IGZhaWxlZC5cblx0XHQgKi9cblx0XHRwYXJzZTogZnVuY3Rpb24odGV4dCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gVHJpY2sgdWdsaWZ5IEpTXG5cdFx0XHRcdHJldHVybiB3aW5kb3dbU3RyaW5nLmZyb21DaGFyQ29kZSgxMDEpICsgJ3ZhbCddKCcoJyArIHRleHQgKyAnKScpO1xuXHRcdFx0fSBjYXRjaCAoZXgpIHtcblx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqI0AtKi9cblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9KU09OUmVxdWVzdC5qc1xuXG4vKipcbiAqIEpTT05SZXF1ZXN0LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBlbmFibGVzIHlvdSB0byB1c2UgSlNPTi1SUEMgdG8gY2FsbCBiYWNrZW5kIG1ldGhvZHMuXG4gKlxuICogQGNsYXNzIHRpbnltY2UudXRpbC5KU09OUmVxdWVzdFxuICogQGV4YW1wbGVcbiAqIHZhciBqc29uID0gbmV3IHRpbnltY2UudXRpbC5KU09OUmVxdWVzdCh7XG4gKiAgICAgdXJsOiAnc29tZWJhY2tlbmQucGhwJ1xuICogfSk7XG4gKlxuICogLy8gU2VuZCBSUEMgY2FsbCAxXG4gKiBqc29uLnNlbmQoe1xuICogICAgIG1ldGhvZDogJ3NvbWVNZXRob2QxJyxcbiAqICAgICBwYXJhbXM6IFsnYScsICdiJ10sXG4gKiAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzdWx0KSB7XG4gKiAgICAgICAgIGNvbnNvbGUuZGlyKHJlc3VsdCk7XG4gKiAgICAgfVxuICogfSk7XG4gKlxuICogLy8gU2VuZCBSUEMgY2FsbCAyXG4gKiBqc29uLnNlbmQoe1xuICogICAgIG1ldGhvZDogJ3NvbWVNZXRob2QyJyxcbiAqICAgICBwYXJhbXM6IFsnYScsICdiJ10sXG4gKiAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzdWx0KSB7XG4gKiAgICAgICAgIGNvbnNvbGUuZGlyKHJlc3VsdCk7XG4gKiAgICAgfVxuICogfSk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9KU09OUmVxdWVzdFwiLCBbXG5cdFwidGlueW1jZS91dGlsL0pTT05cIixcblx0XCJ0aW55bWNlL3V0aWwvWEhSXCIsXG5cdFwidGlueW1jZS91dGlsL1Rvb2xzXCJcbl0sIGZ1bmN0aW9uKEpTT04sIFhIUiwgVG9vbHMpIHtcblx0dmFyIGV4dGVuZCA9IFRvb2xzLmV4dGVuZDtcblxuXHRmdW5jdGlvbiBKU09OUmVxdWVzdChzZXR0aW5ncykge1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBleHRlbmQoe30sIHNldHRpbmdzKTtcblx0XHR0aGlzLmNvdW50ID0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaW1wbGUgaGVscGVyIGZ1bmN0aW9uIHRvIHNlbmQgYSBKU09OLVJQQyByZXF1ZXN0IHdpdGhvdXQgdGhlIG5lZWQgdG8gaW5pdGlhbGl6ZSBhbiBvYmplY3QuXG5cdCAqIENvbnN1bHQgdGhlIFdpa2kgQVBJIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB3aGF0IHlvdSBjYW4gcGFzcyB0byB0aGlzIGZ1bmN0aW9uLlxuXHQgKlxuXHQgKiBAbWV0aG9kIHNlbmRSUENcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge09iamVjdH0gbyBDYWxsIG9iamVjdCB3aGVyZSB0aGVyZSBhcmUgdGhyZWUgZmllbGQgaWQsIG1ldGhvZCBhbmQgcGFyYW1zIHRoaXMgb2JqZWN0IHNob3VsZCBhbHNvIGNvbnRhaW4gY2FsbGJhY2tzIGV0Yy5cblx0ICovXG5cdEpTT05SZXF1ZXN0LnNlbmRSUEMgPSBmdW5jdGlvbihvKSB7XG5cdFx0cmV0dXJuIG5ldyBKU09OUmVxdWVzdCgpLnNlbmQobyk7XG5cdH07XG5cblx0SlNPTlJlcXVlc3QucHJvdG90eXBlID0ge1xuXHRcdC8qKlxuXHRcdCAqIFNlbmRzIGEgSlNPTi1SUEMgY2FsbC4gQ29uc3VsdCB0aGUgV2lraSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIHdoYXQgeW91IGNhbiBwYXNzIHRvIHRoaXMgZnVuY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNlbmRcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gYXJncyBDYWxsIG9iamVjdCB3aGVyZSB0aGVyZSBhcmUgdGhyZWUgZmllbGQgaWQsIG1ldGhvZCBhbmQgcGFyYW1zIHRoaXMgb2JqZWN0IHNob3VsZCBhbHNvIGNvbnRhaW4gY2FsbGJhY2tzIGV0Yy5cblx0XHQgKi9cblx0XHRzZW5kOiBmdW5jdGlvbihhcmdzKSB7XG5cdFx0XHR2YXIgZWNiID0gYXJncy5lcnJvciwgc2NiID0gYXJncy5zdWNjZXNzO1xuXG5cdFx0XHRhcmdzID0gZXh0ZW5kKHRoaXMuc2V0dGluZ3MsIGFyZ3MpO1xuXG5cdFx0XHRhcmdzLnN1Y2Nlc3MgPSBmdW5jdGlvbihjLCB4KSB7XG5cdFx0XHRcdGMgPSBKU09OLnBhcnNlKGMpO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgYyA9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdGMgPSB7XG5cdFx0XHRcdFx0XHRlcnJvcjogJ0pTT04gUGFyc2UgZXJyb3IuJ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYy5lcnJvcikge1xuXHRcdFx0XHRcdGVjYi5jYWxsKGFyZ3MuZXJyb3Jfc2NvcGUgfHwgYXJncy5zY29wZSwgYy5lcnJvciwgeCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2NiLmNhbGwoYXJncy5zdWNjZXNzX3Njb3BlIHx8IGFyZ3Muc2NvcGUsIGMucmVzdWx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0YXJncy5lcnJvciA9IGZ1bmN0aW9uKHR5LCB4KSB7XG5cdFx0XHRcdGlmIChlY2IpIHtcblx0XHRcdFx0XHRlY2IuY2FsbChhcmdzLmVycm9yX3Njb3BlIHx8IGFyZ3Muc2NvcGUsIHR5LCB4KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0YXJncy5kYXRhID0gSlNPTi5zZXJpYWxpemUoe1xuXHRcdFx0XHRpZDogYXJncy5pZCB8fCAnYycgKyAodGhpcy5jb3VudCsrKSxcblx0XHRcdFx0bWV0aG9kOiBhcmdzLm1ldGhvZCxcblx0XHRcdFx0cGFyYW1zOiBhcmdzLnBhcmFtc1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEpTT04gY29udGVudCB0eXBlIGZvciBSdWJ5IG9uIHJhaWxzLiBCdWc6ICMxODgzMjg3XG5cdFx0XHRhcmdzLmNvbnRlbnRfdHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuXHRcdFx0WEhSLnNlbmQoYXJncyk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBKU09OUmVxdWVzdDtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdXRpbC9KU09OUC5qc1xuXG4vKipcbiAqIEpTT05QLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbmRlZmluZShcInRpbnltY2UvdXRpbC9KU09OUFwiLCBbXG5cdFwidGlueW1jZS9kb20vRE9NVXRpbHNcIlxuXSwgZnVuY3Rpb24oRE9NVXRpbHMpIHtcblx0cmV0dXJuIHtcblx0XHRjYWxsYmFja3M6IHt9LFxuXHRcdGNvdW50OiAwLFxuXG5cdFx0c2VuZDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgZG9tID0gRE9NVXRpbHMuRE9NLCBjb3VudCA9IHNldHRpbmdzLmNvdW50ICE9PSB1bmRlZmluZWQgPyBzZXR0aW5ncy5jb3VudCA6IHNlbGYuY291bnQ7XG5cdFx0XHR2YXIgaWQgPSAndGlueW1jZV9qc29ucF8nICsgY291bnQ7XG5cblx0XHRcdHNlbGYuY2FsbGJhY2tzW2NvdW50XSA9IGZ1bmN0aW9uKGpzb24pIHtcblx0XHRcdFx0ZG9tLnJlbW92ZShpZCk7XG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmNhbGxiYWNrc1tjb3VudF07XG5cblx0XHRcdFx0c2V0dGluZ3MuY2FsbGJhY2soanNvbik7XG5cdFx0XHR9O1xuXG5cdFx0XHRkb20uYWRkKGRvbS5kb2MuYm9keSwgJ3NjcmlwdCcsIHtcblx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRzcmM6IHNldHRpbmdzLnVybCxcblx0XHRcdFx0dHlwZTogJ3RleHQvamF2YXNjcmlwdCdcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLmNvdW50Kys7XG5cdFx0fVxuXHR9O1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91dGlsL0xvY2FsU3RvcmFnZS5qc1xuXG4vKipcbiAqIExvY2FsU3RvcmFnZS5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3Mgd2lsbCBzaW11bGF0ZSBMb2NhbFN0b3JhZ2Ugb24gSUUgNyBhbmQgcmV0dXJuIHRoZSBuYXRpdmUgdmVyc2lvbiBvbiBtb2Rlcm4gYnJvd3NlcnMuXG4gKiBTdG9yYWdlIGlzIGRvbmUgdXNpbmcgdXNlckRhdGEgb24gSUUgNyBhbmQgYSBzcGVjaWFsIHNlcmlhbGl6YXRpb24gZm9ybWF0LiBUaGUgZm9ybWF0IGlzIGRlc2lnbmVkXG4gKiB0byBiZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSBieSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgZG9lc24ndCBuZWVkIHRvIGJlIGVuY29kZWQuIFRoaXNcbiAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN0b3JlIGZvciBleGFtcGxlIEhUTUwgZGF0YS5cbiAqXG4gKiBTdG9yYWdlIGZvcm1hdCBmb3IgdXNlckRhdGE6XG4gKiA8YmFzZSAzMiBrZXkgbGVuZ3RoPiw8a2V5IHN0cmluZz4sPGJhc2UgMzIgdmFsdWUgbGVuZ3RoPiw8dmFsdWU+LC4uLlxuICpcbiAqIEZvciBleGFtcGxlIHRoaXMgZGF0YSBrZXkxPXZhbHVlMSxrZXkyPXZhbHVlMiB3b3VsZCBiZTpcbiAqIDQsa2V5MSw2LHZhbHVlMSw0LGtleTIsNix2YWx1ZTJcbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51dGlsLkxvY2FsU3RvcmFnZVxuICogQHN0YXRpY1xuICogQHZlcnNpb24gNC4wXG4gKiBAZXhhbXBsZVxuICogdGlueW1jZS51dGlsLkxvY2FsU3RvcmFnZS5zZXRJdGVtKCdrZXknLCAndmFsdWUnKTtcbiAqIHZhciB2YWx1ZSA9IHRpbnltY2UudXRpbC5Mb2NhbFN0b3JhZ2UuZ2V0SXRlbSgna2V5Jyk7XG4gKi9cbmRlZmluZShcInRpbnltY2UvdXRpbC9Mb2NhbFN0b3JhZ2VcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHR2YXIgTG9jYWxTdG9yYWdlLCBzdG9yYWdlRWxtLCBpdGVtcywga2V5cywgdXNlckRhdGFLZXksIGhhc09sZElFRGF0YVN1cHBvcnQ7XG5cblx0Ly8gQ2hlY2sgZm9yIG5hdGl2ZSBzdXBwb3J0XG5cdHRyeSB7XG5cdFx0aWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcblx0XHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdFx0fVxuXHR9IGNhdGNoIChleCkge1xuXHRcdC8vIElnbm9yZVxuXHR9XG5cblx0dXNlckRhdGFLZXkgPSBcInRpbnltY2VcIjtcblx0c3RvcmFnZUVsbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0aGFzT2xkSUVEYXRhU3VwcG9ydCA9ICEhc3RvcmFnZUVsbS5hZGRCZWhhdmlvcjtcblxuXHRpZiAoaGFzT2xkSUVEYXRhU3VwcG9ydCkge1xuXHRcdHN0b3JhZ2VFbG0uYWRkQmVoYXZpb3IoJyNkZWZhdWx0I3VzZXJEYXRhJyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUga2V5cyBuYW1lcyBhbmQgdXBkYXRlcyBMb2NhbFN0b3JhZ2UubGVuZ3RoIHByb3BlcnR5LiBTaW5jZSBJRTcgZG9lc24ndCBoYXZlIGFueSBnZXR0ZXJzL3NldHRlcnMuXG5cdCAqL1xuXHRmdW5jdGlvbiB1cGRhdGVLZXlzKCkge1xuXHRcdGtleXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBpdGVtcykge1xuXHRcdFx0a2V5cy5wdXNoKGtleSk7XG5cdFx0fVxuXG5cdFx0TG9jYWxTdG9yYWdlLmxlbmd0aCA9IGtleXMubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWRzIHRoZSB1c2VyRGF0YSBzdHJpbmcgYW5kIHBhcnNlcyBpdCBpbnRvIHRoZSBpdGVtcyBzdHJ1Y3R1cmUuXG5cdCAqL1xuXHRmdW5jdGlvbiBsb2FkKCkge1xuXHRcdHZhciBrZXksIGRhdGEsIHZhbHVlLCBwb3MgPSAwO1xuXG5cdFx0aXRlbXMgPSB7fTtcblxuXHRcdC8vIGxvY2FsU3RvcmFnZSBjYW4gYmUgZGlzYWJsZWQgb24gV2ViS2l0L0dlY2tvIHNvIG1ha2UgYSBkdW1teSBzdG9yYWdlXG5cdFx0aWYgKCFoYXNPbGRJRURhdGFTdXBwb3J0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbmV4dChlbmQpIHtcblx0XHRcdHZhciB2YWx1ZSwgbmV4dFBvcztcblxuXHRcdFx0bmV4dFBvcyA9IGVuZCAhPT0gdW5kZWZpbmVkID8gcG9zICsgZW5kIDogZGF0YS5pbmRleE9mKCcsJywgcG9zKTtcblx0XHRcdGlmIChuZXh0UG9zID09PSAtMSB8fCBuZXh0UG9zID4gZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlID0gZGF0YS5zdWJzdHJpbmcocG9zLCBuZXh0UG9zKTtcblx0XHRcdHBvcyA9IG5leHRQb3MgKyAxO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0c3RvcmFnZUVsbS5sb2FkKHVzZXJEYXRhS2V5KTtcblx0XHRkYXRhID0gc3RvcmFnZUVsbS5nZXRBdHRyaWJ1dGUodXNlckRhdGFLZXkpIHx8ICcnO1xuXG5cdFx0ZG8ge1xuXHRcdFx0dmFyIG9mZnNldCA9IG5leHQoKTtcblx0XHRcdGlmIChvZmZzZXQgPT09IG51bGwpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGtleSA9IG5leHQocGFyc2VJbnQob2Zmc2V0LCAzMikgfHwgMCk7XG5cdFx0XHRpZiAoa2V5ICE9PSBudWxsKSB7XG5cdFx0XHRcdG9mZnNldCA9IG5leHQoKTtcblx0XHRcdFx0aWYgKG9mZnNldCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFsdWUgPSBuZXh0KHBhcnNlSW50KG9mZnNldCwgMzIpIHx8IDApO1xuXG5cdFx0XHRcdGlmIChrZXkpIHtcblx0XHRcdFx0XHRpdGVtc1trZXldID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IHdoaWxlIChrZXkgIT09IG51bGwpO1xuXG5cdFx0dXBkYXRlS2V5cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBpdGVtcyBzdHJ1Y3R1cmUgaW50byBhIHRoZSB1c2VyRGF0YSBmb3JtYXQuXG5cdCAqL1xuXHRmdW5jdGlvbiBzYXZlKCkge1xuXHRcdHZhciB2YWx1ZSwgZGF0YSA9ICcnO1xuXG5cdFx0Ly8gbG9jYWxTdG9yYWdlIGNhbiBiZSBkaXNhYmxlZCBvbiBXZWJLaXQvR2Vja28gc28gbWFrZSBhIGR1bW15IHN0b3JhZ2Vcblx0XHRpZiAoIWhhc09sZElFRGF0YVN1cHBvcnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gaXRlbXMpIHtcblx0XHRcdHZhbHVlID0gaXRlbXNba2V5XTtcblx0XHRcdGRhdGEgKz0gKGRhdGEgPyAnLCcgOiAnJykgKyBrZXkubGVuZ3RoLnRvU3RyaW5nKDMyKSArICcsJyArIGtleSArICcsJyArIHZhbHVlLmxlbmd0aC50b1N0cmluZygzMikgKyAnLCcgKyB2YWx1ZTtcblx0XHR9XG5cblx0XHRzdG9yYWdlRWxtLnNldEF0dHJpYnV0ZSh1c2VyRGF0YUtleSwgZGF0YSk7XG5cblx0XHR0cnkge1xuXHRcdFx0c3RvcmFnZUVsbS5zYXZlKHVzZXJEYXRhS2V5KTtcblx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0Ly8gSWdub3JlIGRpc2sgZnVsbFxuXHRcdH1cblxuXHRcdHVwZGF0ZUtleXMoKTtcblx0fVxuXG5cdExvY2FsU3RvcmFnZSA9IHtcblx0XHQvKipcblx0XHQgKiBMZW5ndGggb2YgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBzdG9yYWdlLlxuXHRcdCAqXG5cdFx0ICogQHByb3BlcnR5IGxlbmd0aFxuXHRcdCAqIEB0eXBlIE51bWJlclxuXHRcdCAqIEByZXR1cm4ge051bWJlcn0gTnVtYmVyIG9mIGl0ZW1zIGluIHN0b3JhZ2UuXG5cdFx0ICovXG5cdFx0Ly9sZW5ndGg6MCxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGtleSBuYW1lIGJ5IGluZGV4LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBrZXlcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gaW5kZXggSW5kZXggb2Yga2V5IHRvIHJldHVybi5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEtleSB2YWx1ZSBvciBudWxsIGlmIGl0IHdhc24ndCBmb3VuZC5cblx0XHQgKi9cblx0XHRrZXk6IGZ1bmN0aW9uKGluZGV4KSB7XG5cdFx0XHRyZXR1cm4ga2V5c1tpbmRleF07XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHZhbHVlIGlmIHRoZSBzcGVjaWZpZWQga2V5IG9yIG51bGwgaWYgaXQgd2Fzbid0IGZvdW5kLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBnZXRJdGVtXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGtleSBLZXkgb2YgaXRlbSB0byByZXRyaWV2ZS5cblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IFZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgaXRlbSBvciBudWxsIGlmIGl0IHdhc24ndCBmb3VuZC5cblx0XHQgKi9cblx0XHRnZXRJdGVtOiBmdW5jdGlvbihrZXkpIHtcblx0XHRcdHJldHVybiBrZXkgaW4gaXRlbXMgPyBpdGVtc1trZXldIDogbnVsbDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBpdGVtIGJ5IGl0J3Mga2V5LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzZXRJdGVtXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGtleSBLZXkgb2YgdGhlIGl0ZW0gdG8gc2V0LlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBWYWx1ZSBvZiB0aGUgaXRlbSB0byBzZXQuXG5cdFx0ICovXG5cdFx0c2V0SXRlbTogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuXHRcdFx0aXRlbXNba2V5XSA9IFwiXCIgKyB2YWx1ZTtcblx0XHRcdHNhdmUoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGl0ZW0gYnkga2V5LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW1vdmVJdGVtXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGtleSBLZXkgb2YgaXRlbSB0byByZW1vdmUuXG5cdFx0ICovXG5cdFx0cmVtb3ZlSXRlbTogZnVuY3Rpb24oa2V5KSB7XG5cdFx0XHRkZWxldGUgaXRlbXNba2V5XTtcblx0XHRcdHNhdmUoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlcyBhbGwgaXRlbXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNsZWFyXG5cdFx0ICovXG5cdFx0Y2xlYXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aXRlbXMgPSB7fTtcblx0XHRcdHNhdmUoKTtcblx0XHR9XG5cdH07XG5cblx0bG9hZCgpO1xuXG5cdHJldHVybiBMb2NhbFN0b3JhZ2U7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL0NvbXBhdC5qc1xuXG4vKipcbiAqIENvbXBhdC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRpbnlNQ0UgY29yZSBjbGFzcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAY2xhc3MgdGlueW1jZVxuICogQGJvcnJvdy1tZW1iZXJzIHRpbnltY2UuRWRpdG9yTWFuYWdlclxuICogQGJvcnJvdy1tZW1iZXJzIHRpbnltY2UudXRpbC5Ub29sc1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL0NvbXBhdFwiLCBbXG5cdFwidGlueW1jZS9kb20vRE9NVXRpbHNcIixcblx0XCJ0aW55bWNlL2RvbS9FdmVudFV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vU2NyaXB0TG9hZGVyXCIsXG5cdFwidGlueW1jZS9BZGRPbk1hbmFnZXJcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcblx0XCJ0aW55bWNlL0VudlwiXG5dLCBmdW5jdGlvbihET01VdGlscywgRXZlbnRVdGlscywgU2NyaXB0TG9hZGVyLCBBZGRPbk1hbmFnZXIsIFRvb2xzLCBFbnYpIHtcblx0dmFyIHRpbnltY2UgPSB3aW5kb3cudGlueW1jZTtcblxuXHQvKipcblx0ICogQHByb3BlcnR5IHt0aW55bWNlLmRvbS5ET01VdGlsc30gRE9NIEdsb2JhbCBET00gaW5zdGFuY2UuXG5cdCAqIEBwcm9wZXJ0eSB7dGlueW1jZS5kb20uU2NyaXB0TG9hZGVyfSBTY3JpcHRMb2FkZXIgR2xvYmFsIFNjcmlwdExvYWRlciBpbnN0YW5jZS5cblx0ICogQHByb3BlcnR5IHt0aW55bWNlLkFkZE9uTWFuYWdlcn0gUGx1Z2luTWFuYWdlciBHbG9iYWwgUGx1Z2luTWFuYWdlciBpbnN0YW5jZS5cblx0ICogQHByb3BlcnR5IHt0aW55bWNlLkFkZE9uTWFuYWdlcn0gVGhlbWVNYW5hZ2VyIEdsb2JhbCBUaGVtZU1hbmFnZXIgaW5zdGFuY2UuXG5cdCAqL1xuXHR0aW55bWNlLkRPTSA9IERPTVV0aWxzLkRPTTtcblx0dGlueW1jZS5TY3JpcHRMb2FkZXIgPSBTY3JpcHRMb2FkZXIuU2NyaXB0TG9hZGVyO1xuXHR0aW55bWNlLlBsdWdpbk1hbmFnZXIgPSBBZGRPbk1hbmFnZXIuUGx1Z2luTWFuYWdlcjtcblx0dGlueW1jZS5UaGVtZU1hbmFnZXIgPSBBZGRPbk1hbmFnZXIuVGhlbWVNYW5hZ2VyO1xuXG5cdHRpbnltY2UuZG9tID0gdGlueW1jZS5kb20gfHwge307XG5cdHRpbnltY2UuZG9tLkV2ZW50ID0gRXZlbnRVdGlscy5FdmVudDtcblxuXHRUb29scy5lYWNoKFxuXHRcdCd0cmltIGlzQXJyYXkgaXMgdG9BcnJheSBtYWtlTWFwIGVhY2ggbWFwIGdyZXAgaW5BcnJheSBleHRlbmQgY3JlYXRlIHdhbGsgY3JlYXRlTlMgcmVzb2x2ZSBleHBsb2RlIF9hZGRDYWNoZVN1ZmZpeCcuc3BsaXQoJyAnKSxcblx0XHRmdW5jdGlvbihrZXkpIHtcblx0XHRcdHRpbnltY2Vba2V5XSA9IFRvb2xzW2tleV07XG5cdFx0fVxuXHQpO1xuXG5cdFRvb2xzLmVhY2goJ2lzT3BlcmEgaXNXZWJLaXQgaXNJRSBpc0dlY2tvIGlzTWFjJy5zcGxpdCgnICcpLCBmdW5jdGlvbihuYW1lKSB7XG5cdFx0dGlueW1jZVtuYW1lXSA9IEVudltuYW1lLnN1YnN0cigyKS50b0xvd2VyQ2FzZSgpXTtcblx0fSk7XG5cblx0cmV0dXJuIHt9O1xufSk7XG5cbi8vIERlc2NyaWJlIHRoZSBkaWZmZXJlbnQgbmFtZXNwYWNlc1xuXG4vKipcbiAqIFJvb3QgbGV2ZWwgbmFtZXNwYWNlIHRoaXMgY29udGFpbnMgY2xhc3NlcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBUaW55TUNFIGVkaXRvci5cbiAqXG4gKiBAbmFtZXNwYWNlIHRpbnltY2VcbiAqL1xuXG4vKipcbiAqIENvbnRhaW5zIGNsYXNzZXMgZm9yIGhhbmRsaW5nIHRoZSBicm93c2VycyBET00uXG4gKlxuICogQG5hbWVzcGFjZSB0aW55bWNlLmRvbVxuICovXG5cbi8qKlxuICogQ29udGFpbnMgaHRtbCBwYXJzZXIgYW5kIHNlcmlhbGl6ZXIgbG9naWMuXG4gKlxuICogQG5hbWVzcGFjZSB0aW55bWNlLmh0bWxcbiAqL1xuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBkaWZmZXJlbnQgVUkgdHlwZXMgc3VjaCBhcyBidXR0b25zLCBsaXN0Ym94ZXMgZXRjLlxuICpcbiAqIEBuYW1lc3BhY2UgdGlueW1jZS51aVxuICovXG5cbi8qKlxuICogQ29udGFpbnMgdmFyaW91cyB1dGlsaXR5IGNsYXNzZXMgc3VjaCBhcyBqc29uIHBhcnNlciwgY29va2llcyBldGMuXG4gKlxuICogQG5hbWVzcGFjZSB0aW55bWNlLnV0aWxcbiAqL1xuXG4vKipcbiAqIENvbnRhaW5zIG1vZHVsZXMgdG8gaGFuZGxlIGRhdGEgYmluZGluZy5cbiAqXG4gKiBAbmFtZXNwYWNlIHRpbnltY2UuZGF0YVxuICovXG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9MYXlvdXQuanNcblxuLyoqXG4gKiBMYXlvdXQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBCYXNlIGxheW91dCBtYW5hZ2VyIGNsYXNzLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkxheW91dFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0xheW91dFwiLCBbXG5cdFwidGlueW1jZS91dGlsL0NsYXNzXCIsXG5cdFwidGlueW1jZS91dGlsL1Rvb2xzXCJcbl0sIGZ1bmN0aW9uKENsYXNzLCBUb29scykge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gQ2xhc3MuZXh0ZW5kKHtcblx0XHREZWZhdWx0czoge1xuXHRcdFx0Zmlyc3RDb250cm9sQ2xhc3M6ICdmaXJzdCcsXG5cdFx0XHRsYXN0Q29udHJvbENsYXNzOiAnbGFzdCdcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIGxheW91dCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dGhpcy5zZXR0aW5ncyA9IFRvb2xzLmV4dGVuZCh7fSwgdGhpcy5EZWZhdWx0cywgc2V0dGluZ3MpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUaGlzIG1ldGhvZCBnZXRzIGludm9rZWQgYmVmb3JlIHRoZSBsYXlvdXQgcmVuZGVycyB0aGUgY29udHJvbHMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHByZVJlbmRlclxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS51aS5Db250YWluZXJ9IGNvbnRhaW5lciBDb250YWluZXIgaW5zdGFuY2UgdG8gcHJlUmVuZGVyLlxuXHRcdCAqL1xuXHRcdHByZVJlbmRlcjogZnVuY3Rpb24oY29udGFpbmVyKSB7XG5cdFx0XHRjb250YWluZXIuYm9keUNsYXNzZXMuYWRkKHRoaXMuc2V0dGluZ3MuY29udGFpbmVyQ2xhc3MpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBBcHBsaWVzIGxheW91dCBjbGFzc2VzIHRvIHRoZSBjb250YWluZXIuXG5cdFx0ICpcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGFwcGx5Q2xhc3NlczogZnVuY3Rpb24oaXRlbXMpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzLCBmaXJzdENsYXNzLCBsYXN0Q2xhc3MsIGZpcnN0SXRlbSwgbGFzdEl0ZW07XG5cblx0XHRcdGZpcnN0Q2xhc3MgPSBzZXR0aW5ncy5maXJzdENvbnRyb2xDbGFzcztcblx0XHRcdGxhc3RDbGFzcyA9IHNldHRpbmdzLmxhc3RDb250cm9sQ2xhc3M7XG5cblx0XHRcdGl0ZW1zLmVhY2goZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRpdGVtLmNsYXNzZXMucmVtb3ZlKGZpcnN0Q2xhc3MpLnJlbW92ZShsYXN0Q2xhc3MpLmFkZChzZXR0aW5ncy5jb250cm9sQ2xhc3MpO1xuXG5cdFx0XHRcdGlmIChpdGVtLnZpc2libGUoKSkge1xuXHRcdFx0XHRcdGlmICghZmlyc3RJdGVtKSB7XG5cdFx0XHRcdFx0XHRmaXJzdEl0ZW0gPSBpdGVtO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGxhc3RJdGVtID0gaXRlbTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChmaXJzdEl0ZW0pIHtcblx0XHRcdFx0Zmlyc3RJdGVtLmNsYXNzZXMuYWRkKGZpcnN0Q2xhc3MpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobGFzdEl0ZW0pIHtcblx0XHRcdFx0bGFzdEl0ZW0uY2xhc3Nlcy5hZGQobGFzdENsYXNzKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVuZGVycyB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBhbmQgYW55IGxheW91dCBzcGVjaWZpYyBIVE1MLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJIdG1sXG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLnVpLkNvbnRhaW5lcn0gY29udGFpbmVyIENvbnRhaW5lciB0byByZW5kZXIgSFRNTCBmb3IuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oY29udGFpbmVyKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGh0bWwgPSAnJztcblxuXHRcdFx0c2VsZi5hcHBseUNsYXNzZXMoY29udGFpbmVyLml0ZW1zKCkpO1xuXG5cdFx0XHRjb250YWluZXIuaXRlbXMoKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0aHRtbCArPSBpdGVtLnJlbmRlckh0bWwoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gaHRtbDtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVjYWxjdWxhdGVzIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGNvbnRyb2xzIGluIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZWNhbGNcblx0XHQgKiBAcGFyYW0ge3RpbnltY2UudWkuQ29udGFpbmVyfSBjb250YWluZXIgQ29udGFpbmVyIGluc3RhbmNlIHRvIHJlY2FsYy5cblx0XHQgKi9cblx0XHRyZWNhbGM6IGZ1bmN0aW9uKCkge1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUaGlzIG1ldGhvZCBnZXRzIGludm9rZWQgYWZ0ZXIgdGhlIGxheW91dCByZW5kZXJzIHRoZSBjb250cm9scy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcG9zdFJlbmRlclxuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS51aS5Db250YWluZXJ9IGNvbnRhaW5lciBDb250YWluZXIgaW5zdGFuY2UgdG8gcG9zdFJlbmRlci5cblx0XHQgKi9cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR9LFxuXG5cdFx0aXNOYXRpdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0Fic29sdXRlTGF5b3V0LmpzXG5cbi8qKlxuICogQWJzb2x1dGVMYXlvdXQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBMYXlvdXRNYW5hZ2VyIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmluZy4gVGhpcyBsYXlvdXQgbWFuYWdlciBpcyBtb3JlIG9mXG4gKiBhIGJhc2UgY2xhc3MgZm9yIG90aGVyIGxheW91dHMgYnV0IGNhbiBiZSBjcmVhdGVkIGFuZCB1c2VkIGRpcmVjdGx5LlxuICpcbiAqIEAteC1sZXNzIEFic29sdXRlTGF5b3V0Lmxlc3NcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkFic29sdXRlTGF5b3V0XG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkxheW91dFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0Fic29sdXRlTGF5b3V0XCIsIFtcblx0XCJ0aW55bWNlL3VpL0xheW91dFwiXG5dLCBmdW5jdGlvbihMYXlvdXQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIExheW91dC5leHRlbmQoe1xuXHRcdERlZmF1bHRzOiB7XG5cdFx0XHRjb250YWluZXJDbGFzczogJ2Ficy1sYXlvdXQnLFxuXHRcdFx0Y29udHJvbENsYXNzOiAnYWJzLWxheW91dC1pdGVtJ1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZWNhbGN1bGF0ZXMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29udHJvbHMgaW4gdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlY2FsY1xuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS51aS5Db250YWluZXJ9IGNvbnRhaW5lciBDb250YWluZXIgaW5zdGFuY2UgdG8gcmVjYWxjLlxuXHRcdCAqL1xuXHRcdHJlY2FsYzogZnVuY3Rpb24oY29udGFpbmVyKSB7XG5cdFx0XHRjb250YWluZXIuaXRlbXMoKS5maWx0ZXIoJzp2aXNpYmxlJykuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdHZhciBzZXR0aW5ncyA9IGN0cmwuc2V0dGluZ3M7XG5cblx0XHRcdFx0Y3RybC5sYXlvdXRSZWN0KHtcblx0XHRcdFx0XHR4OiBzZXR0aW5ncy54LFxuXHRcdFx0XHRcdHk6IHNldHRpbmdzLnksXG5cdFx0XHRcdFx0dzogc2V0dGluZ3Mudyxcblx0XHRcdFx0XHRoOiBzZXR0aW5ncy5oXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChjdHJsLnJlY2FsYykge1xuXHRcdFx0XHRcdGN0cmwucmVjYWxjKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZW5kZXJzIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGFuZCBhbnkgbGF5b3V0IHNwZWNpZmljIEhUTUwuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbmRlckh0bWxcblx0XHQgKiBAcGFyYW0ge3RpbnltY2UudWkuQ29udGFpbmVyfSBjb250YWluZXIgQ29udGFpbmVyIHRvIHJlbmRlciBIVE1MIGZvci5cblx0XHQgKi9cblx0XHRyZW5kZXJIdG1sOiBmdW5jdGlvbihjb250YWluZXIpIHtcblx0XHRcdHJldHVybiAnPGRpdiBpZD1cIicgKyBjb250YWluZXIuX2lkICsgJy1hYnNlbmRcIiBjbGFzcz1cIicgKyBjb250YWluZXIuY2xhc3NQcmVmaXggKyAnYWJzLWVuZFwiPjwvZGl2PicgKyB0aGlzLl9zdXBlcihjb250YWluZXIpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0J1dHRvbi5qc1xuXG4vKipcbiAqIEJ1dHRvbi5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgYnV0dG9ucy4gWW91IGNhbiBjcmVhdGUgdGhlbSBkaXJlY3RseSBvciB0aHJvdWdoIHRoZSBGYWN0b3J5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW5kIHJlbmRlciBhIGJ1dHRvbiB0byB0aGUgYm9keSBlbGVtZW50XG4gKiB0aW55bWNlLnVpLkZhY3RvcnkuY3JlYXRlKHtcbiAqICAgICB0eXBlOiAnYnV0dG9uJyxcbiAqICAgICB0ZXh0OiAnTXkgYnV0dG9uJ1xuICogfSkucmVuZGVyVG8oZG9jdW1lbnQuYm9keSk7XG4gKlxuICogQC14LWxlc3MgQnV0dG9uLmxlc3NcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkJ1dHRvblxuICogQGV4dGVuZHMgdGlueW1jZS51aS5XaWRnZXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9CdXR0b25cIiwgW1xuXHRcInRpbnltY2UvdWkvV2lkZ2V0XCJcbl0sIGZ1bmN0aW9uKFdpZGdldCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gV2lkZ2V0LmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGNsYXNzZXM6IFwid2lkZ2V0IGJ0blwiLFxuXHRcdFx0cm9sZTogXCJidXR0b25cIlxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDb25zdHJ1Y3RzIGEgbmV3IGJ1dHRvbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKiBAc2V0dGluZyB7U3RyaW5nfSBzaXplIFNpemUgb2YgdGhlIGJ1dHRvbiBzbWFsbHxtZWRpdW18bGFyZ2UuXG5cdFx0ICogQHNldHRpbmcge1N0cmluZ30gaW1hZ2UgSW1hZ2UgdG8gdXNlIGZvciBpY29uLlxuXHRcdCAqIEBzZXR0aW5nIHtTdHJpbmd9IGljb24gSWNvbiB0byB1c2UgZm9yIGJ1dHRvbi5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBzaXplO1xuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cdFx0XHRzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3M7XG5cblx0XHRcdHNpemUgPSBzZWxmLnNldHRpbmdzLnNpemU7XG5cblx0XHRcdHNlbGYub24oJ2NsaWNrIG1vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub24oJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHNlbGYuZmlyZSgnY2xpY2snLCBlKTtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChzZXR0aW5ncy5zdWJ0eXBlKSB7XG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoc2V0dGluZ3Muc3VidHlwZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzaXplKSB7XG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ2J0bi0nICsgc2l6ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5pY29uKSB7XG5cdFx0XHRcdHNlbGYuaWNvbihzZXR0aW5ncy5pY29uKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogU2V0cy9nZXRzIHRoZSBjdXJyZW50IGJ1dHRvbiBpY29uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpY29uXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IFtpY29uXSBOZXcgaWNvbiBpZGVudGlmaWVyLlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ3x0aW55bWNlLnVpLk1lbnVCdXR0b259IEN1cnJlbnQgaWNvbiBvciBjdXJyZW50IE1lbnVCdXR0b24gaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0aWNvbjogZnVuY3Rpb24oaWNvbikge1xuXHRcdFx0aWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0YXRlLmdldCgnaWNvbicpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnN0YXRlLnNldCgnaWNvbicsIGljb24pO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVwYWludHMgdGhlIGJ1dHRvbiBmb3IgZXhhbXBsZSBhZnRlciBpdCdzIGJlZW4gcmVzaXplcyBieSBhIGxheW91dCBlbmdpbmUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlcGFpbnRcblx0XHQgKi9cblx0XHRyZXBhaW50OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBidG5FbG0gPSB0aGlzLmdldEVsKCkuZmlyc3RDaGlsZCxcblx0XHRcdFx0YnRuU3R5bGU7XG5cblx0XHRcdGlmIChidG5FbG0pIHtcblx0XHRcdFx0YnRuU3R5bGUgPSBidG5FbG0uc3R5bGU7XG5cdFx0XHRcdGJ0blN0eWxlLndpZHRoID0gYnRuU3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3N1cGVyKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGlkID0gc2VsZi5faWQsIHByZWZpeCA9IHNlbGYuY2xhc3NQcmVmaXg7XG5cdFx0XHR2YXIgaWNvbiA9IHNlbGYuc3RhdGUuZ2V0KCdpY29uJyksIGltYWdlLCB0ZXh0ID0gc2VsZi5zdGF0ZS5nZXQoJ3RleHQnKSwgdGV4dEh0bWwgPSAnJztcblxuXHRcdFx0aW1hZ2UgPSBzZWxmLnNldHRpbmdzLmltYWdlO1xuXHRcdFx0aWYgKGltYWdlKSB7XG5cdFx0XHRcdGljb24gPSAnbm9uZSc7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydCBmb3IgW2hpZ2ggZHBpLCBsb3cgZHBpXSBpbWFnZSBzb3VyY2VzXG5cdFx0XHRcdGlmICh0eXBlb2YgaW1hZ2UgIT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdGltYWdlID0gd2luZG93LmdldFNlbGVjdGlvbiA/IGltYWdlWzBdIDogaW1hZ2VbMV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbWFnZSA9ICcgc3R5bGU9XCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFwnJyArIGltYWdlICsgJ1xcJylcIic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbWFnZSA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4dCkge1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdidG4taGFzLXRleHQnKTtcblx0XHRcdFx0dGV4dEh0bWwgPSAnPHNwYW4gY2xhc3M9XCInICsgcHJlZml4ICsgJ3R4dFwiPicgKyBzZWxmLmVuY29kZSh0ZXh0KSArICc8L3NwYW4+Jztcblx0XHRcdH1cblxuXHRcdFx0aWNvbiA9IGljb24gPyBwcmVmaXggKyAnaWNvICcgKyBwcmVmaXggKyAnaS0nICsgaWNvbiA6ICcnO1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPGRpdiBpZD1cIicgKyBpZCArICdcIiBjbGFzcz1cIicgKyBzZWxmLmNsYXNzZXMgKyAnXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cIicgKyBpZCArICdcIj4nICtcblx0XHRcdFx0XHQnPGJ1dHRvbiByb2xlPVwicHJlc2VudGF0aW9uXCIgdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdChpY29uID8gJzxpIGNsYXNzPVwiJyArIGljb24gKyAnXCInICsgaW1hZ2UgKyAnPjwvaT4nIDogJycpICtcblx0XHRcdFx0XHRcdHRleHRIdG1sICtcblx0XHRcdFx0XHQnPC9idXR0b24+JyArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgJCA9IHNlbGYuJCwgdGV4dENscyA9IHNlbGYuY2xhc3NQcmVmaXggKyAndHh0JztcblxuXHRcdFx0ZnVuY3Rpb24gc2V0QnV0dG9uVGV4dCh0ZXh0KSB7XG5cdFx0XHRcdHZhciAkc3BhbiA9ICQoJ3NwYW4uJyArIHRleHRDbHMsIHNlbGYuZ2V0RWwoKSk7XG5cblx0XHRcdFx0aWYgKHRleHQpIHtcblx0XHRcdFx0XHRpZiAoISRzcGFuWzBdKSB7XG5cdFx0XHRcdFx0XHQkKCdidXR0b246Zmlyc3QnLCBzZWxmLmdldEVsKCkpLmFwcGVuZCgnPHNwYW4gY2xhc3M9XCInICsgdGV4dENscyArICdcIj48L3NwYW4+Jyk7XG5cdFx0XHRcdFx0XHQkc3BhbiA9ICQoJ3NwYW4uJyArIHRleHRDbHMsIHNlbGYuZ2V0RWwoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JHNwYW4uaHRtbChzZWxmLmVuY29kZSh0ZXh0KSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JHNwYW4ucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxmLmNsYXNzZXMudG9nZ2xlKCdidG4taGFzLXRleHQnLCAhIXRleHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6dGV4dCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0c2V0QnV0dG9uVGV4dChlLnZhbHVlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6aWNvbicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGljb24gPSBlLnZhbHVlLCBwcmVmaXggPSBzZWxmLmNsYXNzUHJlZml4O1xuXG5cdFx0XHRcdHNlbGYuc2V0dGluZ3MuaWNvbiA9IGljb247XG5cdFx0XHRcdGljb24gPSBpY29uID8gcHJlZml4ICsgJ2ljbyAnICsgcHJlZml4ICsgJ2ktJyArIHNlbGYuc2V0dGluZ3MuaWNvbiA6ICcnO1xuXG5cdFx0XHRcdHZhciBidG5FbG0gPSBzZWxmLmdldEVsKCkuZmlyc3RDaGlsZCwgaWNvbkVsbSA9IGJ0bkVsbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaScpWzBdO1xuXG5cdFx0XHRcdGlmIChpY29uKSB7XG5cdFx0XHRcdFx0aWYgKCFpY29uRWxtIHx8IGljb25FbG0gIT0gYnRuRWxtLmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0XHRcdGljb25FbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XG5cdFx0XHRcdFx0XHRidG5FbG0uaW5zZXJ0QmVmb3JlKGljb25FbG0sIGJ0bkVsbS5maXJzdENoaWxkKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpY29uRWxtLmNsYXNzTmFtZSA9IGljb247XG5cdFx0XHRcdH0gZWxzZSBpZiAoaWNvbkVsbSkge1xuXHRcdFx0XHRcdGJ0bkVsbS5yZW1vdmVDaGlsZChpY29uRWxtKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNldEJ1dHRvblRleHQoc2VsZi5zdGF0ZS5nZXQoJ3RleHQnKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvQnV0dG9uR3JvdXAuanNcblxuLyoqXG4gKiBCdXR0b25Hcm91cC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY29udHJvbCBlbmFibGVzIHlvdSB0byBwdXQgbXVsdGlwbGUgYnV0dG9ucyBpbnRvIGEgZ3JvdXAuIFRoaXMgaXNcbiAqIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGNvbWJpbmUgc2ltaWxhciB0b29sYmFyIGJ1dHRvbnMgaW50byBhIGdyb3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW5kIHJlbmRlciBhIGJ1dHRvbmdyb3VwIHdpdGggdHdvIGJ1dHRvbnMgdG8gdGhlIGJvZHkgZWxlbWVudFxuICogdGlueW1jZS51aS5GYWN0b3J5LmNyZWF0ZSh7XG4gKiAgICAgdHlwZTogJ2J1dHRvbmdyb3VwJyxcbiAqICAgICBpdGVtczogW1xuICogICAgICAgICB7dGV4dDogJ0J1dHRvbiBBJ30sXG4gKiAgICAgICAgIHt0ZXh0OiAnQnV0dG9uIEInfVxuICogICAgIF1cbiAqIH0pLnJlbmRlclRvKGRvY3VtZW50LmJvZHkpO1xuICpcbiAqIEAteC1sZXNzIEJ1dHRvbkdyb3VwLmxlc3NcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkJ1dHRvbkdyb3VwXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkNvbnRhaW5lclxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0J1dHRvbkdyb3VwXCIsIFtcblx0XCJ0aW55bWNlL3VpL0NvbnRhaW5lclwiXG5dLCBmdW5jdGlvbihDb250YWluZXIpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIENvbnRhaW5lci5leHRlbmQoe1xuXHRcdERlZmF1bHRzOiB7XG5cdFx0XHRkZWZhdWx0VHlwZTogJ2J1dHRvbicsXG5cdFx0XHRyb2xlOiAnZ3JvdXAnXG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGxheW91dCA9IHNlbGYuX2xheW91dDtcblxuXHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnYnRuLWdyb3VwJyk7XG5cdFx0XHRzZWxmLnByZVJlbmRlcigpO1xuXHRcdFx0bGF5b3V0LnByZVJlbmRlcihzZWxmKTtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0JzxkaXYgaWQ9XCInICsgc2VsZi5faWQgKyAnXCIgY2xhc3M9XCInICsgc2VsZi5jbGFzc2VzICsgJ1wiPicgK1xuXHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJy1ib2R5XCI+JyArXG5cdFx0XHRcdFx0XHQoc2VsZi5zZXR0aW5ncy5odG1sIHx8ICcnKSArIGxheW91dC5yZW5kZXJIdG1sKHNlbGYpICtcblx0XHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0NoZWNrYm94LmpzXG5cbi8qKlxuICogQ2hlY2tib3guanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNvbnRyb2wgY3JlYXRlcyBhIGN1c3RvbSBjaGVja2JveC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFuZCByZW5kZXIgYSBjaGVja2JveCB0byB0aGUgYm9keSBlbGVtZW50XG4gKiB0aW55bWNlLnVpLkZhY3RvcnkuY3JlYXRlKHtcbiAqICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICogICAgIGNoZWNrZWQ6IHRydWUsXG4gKiAgICAgdGV4dDogJ015IGNoZWNrYm94J1xuICogfSkucmVuZGVyVG8oZG9jdW1lbnQuYm9keSk7XG4gKlxuICogQC14LWxlc3MgQ2hlY2tib3gubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuQ2hlY2tib3hcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuV2lkZ2V0XG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvQ2hlY2tib3hcIiwgW1xuXHRcInRpbnltY2UvdWkvV2lkZ2V0XCJcbl0sIGZ1bmN0aW9uKFdpZGdldCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gV2lkZ2V0LmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGNsYXNzZXM6IFwiY2hlY2tib3hcIixcblx0XHRcdHJvbGU6IFwiY2hlY2tib3hcIixcblx0XHRcdGNoZWNrZWQ6IGZhbHNlXG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENvbnN0cnVjdHMgYSBuZXcgQ2hlY2tib3ggaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNldHRpbmdzLlxuXHRcdCAqXG5cdFx0ICogQGNvbnN0cnVjdG9yXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE5hbWUvdmFsdWUgb2JqZWN0IHdpdGggc2V0dGluZ3MuXG5cdFx0ICogQHNldHRpbmcge0Jvb2xlYW59IGNoZWNrZWQgVHJ1ZSBpZiB0aGUgY2hlY2tib3ggc2hvdWxkIGJlIGNoZWNrZWQgYnkgZGVmYXVsdC5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cblx0XHRcdHNlbGYub24oJ2NsaWNrIG1vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0aWYgKCFzZWxmLmRpc2FibGVkKCkpIHtcblx0XHRcdFx0XHRzZWxmLmNoZWNrZWQoIXNlbGYuY2hlY2tlZCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYuY2hlY2tlZChzZWxmLnNldHRpbmdzLmNoZWNrZWQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBHZXR0ZXIvc2V0dGVyIGZ1bmN0aW9uIGZvciB0aGUgY2hlY2tlZCBzdGF0ZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgY2hlY2tlZFxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3N0YXRlXSBTdGF0ZSB0byBiZSBzZXQuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbnx0aW55bWNlLnVpLkNoZWNrYm94fSBUcnVlL2ZhbHNlIG9yIGNoZWNrYm94IGlmIGl0J3MgYSBzZXQgb3BlcmF0aW9uLlxuXHRcdCAqL1xuXHRcdGNoZWNrZWQ6IGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3RhdGUuZ2V0KCdjaGVja2VkJyk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc3RhdGUuc2V0KCdjaGVja2VkJywgc3RhdGUpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogR2V0dGVyL3NldHRlciBmdW5jdGlvbiBmb3IgdGhlIHZhbHVlIHN0YXRlLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB2YWx1ZVxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3N0YXRlXSBTdGF0ZSB0byBiZSBzZXQuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbnx0aW55bWNlLnVpLkNoZWNrYm94fSBUcnVlL2ZhbHNlIG9yIGNoZWNrYm94IGlmIGl0J3MgYSBzZXQgb3BlcmF0aW9uLlxuXHRcdCAqL1xuXHRcdHZhbHVlOiBmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0aWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNoZWNrZWQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tlZChzdGF0ZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGlkID0gc2VsZi5faWQsIHByZWZpeCA9IHNlbGYuY2xhc3NQcmVmaXg7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIiB1bnNlbGVjdGFibGU9XCJvblwiIGFyaWEtbGFiZWxsZWRieT1cIicgKyBpZCArICctYWxcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0JzxpIGNsYXNzPVwiJyArIHByZWZpeCArICdpY28gJyArIHByZWZpeCArICdpLWNoZWNrYm94XCI+PC9pPicgK1xuXHRcdFx0XHRcdCc8c3BhbiBpZD1cIicgKyBpZCArICctYWxcIiBjbGFzcz1cIicgKyBwcmVmaXggKyAnbGFiZWxcIj4nICsgc2VsZi5lbmNvZGUoc2VsZi5zdGF0ZS5nZXQoJ3RleHQnKSkgKyAnPC9zcGFuPicgK1xuXHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0KTtcblx0XHR9LFxuXG5cdFx0YmluZFN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGZ1bmN0aW9uIGNoZWNrZWQoc3RhdGUpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLnRvZ2dsZShcImNoZWNrZWRcIiwgc3RhdGUpO1xuXHRcdFx0XHRzZWxmLmFyaWEoJ2NoZWNrZWQnLCBzdGF0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTp0ZXh0JywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRzZWxmLmdldEVsKCdhbCcpLmZpcnN0Q2hpbGQuZGF0YSA9IHNlbGYudHJhbnNsYXRlKGUudmFsdWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTpjaGVja2VkIGNoYW5nZTp2YWx1ZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0c2VsZi5maXJlKCdjaGFuZ2UnKTtcblx0XHRcdFx0Y2hlY2tlZChlLnZhbHVlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6aWNvbicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGljb24gPSBlLnZhbHVlLCBwcmVmaXggPSBzZWxmLmNsYXNzUHJlZml4O1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgaWNvbiA9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdHJldHVybiBzZWxmLnNldHRpbmdzLmljb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxmLnNldHRpbmdzLmljb24gPSBpY29uO1xuXHRcdFx0XHRpY29uID0gaWNvbiA/IHByZWZpeCArICdpY28gJyArIHByZWZpeCArICdpLScgKyBzZWxmLnNldHRpbmdzLmljb24gOiAnJztcblxuXHRcdFx0XHR2YXIgYnRuRWxtID0gc2VsZi5nZXRFbCgpLmZpcnN0Q2hpbGQsIGljb25FbG0gPSBidG5FbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2knKVswXTtcblxuXHRcdFx0XHRpZiAoaWNvbikge1xuXHRcdFx0XHRcdGlmICghaWNvbkVsbSB8fCBpY29uRWxtICE9IGJ0bkVsbS5maXJzdENoaWxkKSB7XG5cdFx0XHRcdFx0XHRpY29uRWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuXHRcdFx0XHRcdFx0YnRuRWxtLmluc2VydEJlZm9yZShpY29uRWxtLCBidG5FbG0uZmlyc3RDaGlsZCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWNvbkVsbS5jbGFzc05hbWUgPSBpY29uO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGljb25FbG0pIHtcblx0XHRcdFx0XHRidG5FbG0ucmVtb3ZlQ2hpbGQoaWNvbkVsbSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoc2VsZi5zdGF0ZS5nZXQoJ2NoZWNrZWQnKSkge1xuXHRcdFx0XHRjaGVja2VkKHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9Db21ib0JveC5qc1xuXG4vKipcbiAqIENvbWJvQm94LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBjcmVhdGVzIGEgY29tYm9ib3ggY29udHJvbC4gU2VsZWN0IGJveCB0aGF0IHlvdSBzZWxlY3QgYSB2YWx1ZSBmcm9tIG9yXG4gKiB0eXBlIGEgdmFsdWUgaW50by5cbiAqXG4gKiBALXgtbGVzcyBDb21ib0JveC5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Db21ib0JveFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5XaWRnZXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9Db21ib0JveFwiLCBbXG5cdFwidGlueW1jZS91aS9XaWRnZXRcIixcblx0XCJ0aW55bWNlL3VpL0ZhY3RvcnlcIixcblx0XCJ0aW55bWNlL3VpL0RvbVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vRG9tUXVlcnlcIixcblx0XCJ0aW55bWNlL3V0aWwvVktcIixcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxuXSwgZnVuY3Rpb24oV2lkZ2V0LCBGYWN0b3J5LCBEb21VdGlscywgJCwgVkssIFRvb2xzKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBXaWRnZXQuZXh0ZW5kKHtcblx0XHQvKipcblx0XHQgKiBDb25zdHJ1Y3RzIGEgbmV3IGNvbnRyb2wgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNldHRpbmdzLlxuXHRcdCAqXG5cdFx0ICogQGNvbnN0cnVjdG9yXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE5hbWUvdmFsdWUgb2JqZWN0IHdpdGggc2V0dGluZ3MuXG5cdFx0ICogQHNldHRpbmcge1N0cmluZ30gcGxhY2Vob2xkZXIgUGxhY2Vob2xkZXIgdGV4dCB0byBkaXNwbGF5LlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuX3N1cGVyKHNldHRpbmdzKTtcblx0XHRcdHNldHRpbmdzID0gc2VsZi5zZXR0aW5ncztcblxuXHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnY29tYm9ib3gnKTtcblx0XHRcdHNlbGYuc3ViaW5wdXQgPSB0cnVlO1xuXHRcdFx0c2VsZi5hcmlhVGFyZ2V0ID0gJ2lucCc7IC8vIFRPRE86IEZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5XG5cblx0XHRcdHNldHRpbmdzLm1lbnUgPSBzZXR0aW5ncy5tZW51IHx8IHNldHRpbmdzLnZhbHVlcztcblxuXHRcdFx0aWYgKHNldHRpbmdzLm1lbnUpIHtcblx0XHRcdFx0c2V0dGluZ3MuaWNvbiA9ICdjYXJldCc7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHR2YXIgZWxtID0gZS50YXJnZXQsIHJvb3QgPSBzZWxmLmdldEVsKCk7XG5cblx0XHRcdFx0aWYgKCEkLmNvbnRhaW5zKHJvb3QsIGVsbSkgJiYgZWxtICE9IHJvb3QpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aGlsZSAoZWxtICYmIGVsbSAhPSByb290KSB7XG5cdFx0XHRcdFx0aWYgKGVsbS5pZCAmJiBlbG0uaWQuaW5kZXhPZignLW9wZW4nKSAhPSAtMSkge1xuXHRcdFx0XHRcdFx0c2VsZi5maXJlKCdhY3Rpb24nKTtcblxuXHRcdFx0XHRcdFx0aWYgKHNldHRpbmdzLm1lbnUpIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5zaG93TWVudSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChlLmFyaWEpIHtcblx0XHRcdFx0XHRcdFx0XHRzZWxmLm1lbnUuaXRlbXMoKVswXS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxtID0gZWxtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBUT0RPOiBSZXdvcmsgdGhpc1xuXHRcdFx0c2VsZi5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIHJvb3RDb250cm9sO1xuXG5cdFx0XHRcdGlmIChlLmtleUNvZGUgPT0gMTMgJiYgZS50YXJnZXQubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHQvLyBGaW5kIHJvb3QgY29udHJvbCB0aGF0IHdlIGNhbiBkbyB0b0pTT04gb25cblx0XHRcdFx0XHRzZWxmLnBhcmVudHMoKS5yZXZlcnNlKCkuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdFx0XHRpZiAoY3RybC50b0pTT04pIHtcblx0XHRcdFx0XHRcdFx0cm9vdENvbnRyb2wgPSBjdHJsO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBGaXJlIGV2ZW50IG9uIGN1cnJlbnQgdGV4dCBib3ggd2l0aCB0aGUgc2VyaWFsaXplZCBkYXRhIG9mIHRoZSB3aG9sZSBmb3JtXG5cdFx0XHRcdFx0c2VsZi5maXJlKCdzdWJtaXQnLCB7ZGF0YTogcm9vdENvbnRyb2wudG9KU09OKCl9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub24oJ2tleXVwJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRpZiAoZS50YXJnZXQubm9kZU5hbWUgPT0gXCJJTlBVVFwiKSB7XG5cdFx0XHRcdFx0dmFyIG9sZFZhbHVlID0gc2VsZi5zdGF0ZS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHRcdFx0dmFyIG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWU7XG5cblx0XHRcdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnN0YXRlLnNldCgndmFsdWUnLCBuZXdWYWx1ZSk7XG5cdFx0XHRcdFx0XHRzZWxmLmZpcmUoJ2F1dG9jb21wbGV0ZScsIGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIHRvb2x0aXAgPSBzZWxmLnRvb2x0aXAoKS5tb3ZlVG8oLTB4RkZGRik7XG5cblx0XHRcdFx0aWYgKHNlbGYuc3RhdHVzTGV2ZWwoKSAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihzZWxmLmNsYXNzUHJlZml4ICsgJ3N0YXR1cycpICE9PSAtMSkge1xuXHRcdFx0XHRcdHZhciBzdGF0dXNNZXNzYWdlID0gc2VsZi5zdGF0dXNNZXNzYWdlKCkgfHwgJ09rJztcblx0XHRcdFx0XHR2YXIgcmVsID0gdG9vbHRpcC50ZXh0KHN0YXR1c01lc3NhZ2UpLnNob3coKS50ZXN0TW92ZVJlbChlLnRhcmdldCwgWydiYy10YycsICdiYy10bCcsICdiYy10ciddKTtcblxuXHRcdFx0XHRcdHRvb2x0aXAuY2xhc3Nlcy50b2dnbGUoJ3Rvb2x0aXAtbicsIHJlbCA9PSAnYmMtdGMnKTtcblx0XHRcdFx0XHR0b29sdGlwLmNsYXNzZXMudG9nZ2xlKCd0b29sdGlwLW53JywgcmVsID09ICdiYy10bCcpO1xuXHRcdFx0XHRcdHRvb2x0aXAuY2xhc3Nlcy50b2dnbGUoJ3Rvb2x0aXAtbmUnLCByZWwgPT0gJ2JjLXRyJyk7XG5cblx0XHRcdFx0XHR0b29sdGlwLm1vdmVSZWwoZS50YXJnZXQsIHJlbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRzdGF0dXNMZXZlbDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5zZXQoJ3N0YXR1c0xldmVsJywgdmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5nZXQoJ3N0YXR1c0xldmVsJyk7XG5cdFx0fSxcblxuXHRcdHN0YXR1c01lc3NhZ2U6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRoaXMuc3RhdGUuc2V0KCdzdGF0dXNNZXNzYWdlJywgdmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5nZXQoJ3N0YXR1c01lc3NhZ2UnKTtcblx0XHR9LFxuXG5cdFx0c2hvd01lbnU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3MsIG1lbnU7XG5cblx0XHRcdGlmICghc2VsZi5tZW51KSB7XG5cdFx0XHRcdG1lbnUgPSBzZXR0aW5ncy5tZW51IHx8IFtdO1xuXG5cdFx0XHRcdC8vIElzIG1lbnUgYXJyYXkgdGhlbiBhdXRvIGNvbnN0dWN0IG1lbnUgY29udHJvbFxuXHRcdFx0XHRpZiAobWVudS5sZW5ndGgpIHtcblx0XHRcdFx0XHRtZW51ID0ge1xuXHRcdFx0XHRcdFx0dHlwZTogJ21lbnUnLFxuXHRcdFx0XHRcdFx0aXRlbXM6IG1lbnVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lbnUudHlwZSA9IG1lbnUudHlwZSB8fCAnbWVudSc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxmLm1lbnUgPSBGYWN0b3J5LmNyZWF0ZShtZW51KS5wYXJlbnQoc2VsZikucmVuZGVyVG8oc2VsZi5nZXRDb250YWluZXJFbG0oKSk7XG5cdFx0XHRcdHNlbGYuZmlyZSgnY3JlYXRlbWVudScpO1xuXHRcdFx0XHRzZWxmLm1lbnUucmVmbG93KCk7XG5cdFx0XHRcdHNlbGYubWVudS5vbignY2FuY2VsJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGlmIChlLmNvbnRyb2wgPT09IHNlbGYubWVudSkge1xuXHRcdFx0XHRcdFx0c2VsZi5mb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2VsZi5tZW51Lm9uKCdzaG93IGhpZGUnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0ZS5jb250cm9sLml0ZW1zKCkuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdFx0XHRjdHJsLmFjdGl2ZShjdHJsLnZhbHVlKCkgPT0gc2VsZi52YWx1ZSgpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSkuZmlyZSgnc2hvdycpO1xuXG5cdFx0XHRcdHNlbGYubWVudS5vbignc2VsZWN0JywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdHNlbGYudmFsdWUoZS5jb250cm9sLnZhbHVlKCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZWxmLm9uKCdmb2N1c2luJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGlmIChlLnRhcmdldC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT0gJ0lOUFVUJykge1xuXHRcdFx0XHRcdFx0c2VsZi5tZW51LmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHNlbGYuYXJpYSgnZXhwYW5kZWQnLCB0cnVlKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5tZW51LnNob3coKTtcblx0XHRcdHNlbGYubWVudS5sYXlvdXRSZWN0KHt3OiBzZWxmLmxheW91dFJlY3QoKS53fSk7XG5cdFx0XHRzZWxmLm1lbnUubW92ZVJlbChzZWxmLmdldEVsKCksIHNlbGYuaXNSdGwoKSA/IFsnYnItdHInLCAndHItYnInXSA6IFsnYmwtdGwnLCAndGwtYmwnXSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEZvY3VzZXMgdGhlIGlucHV0IGFyZWEgb2YgdGhlIGNvbnRyb2wuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGZvY3VzXG5cdFx0ICovXG5cdFx0Zm9jdXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5nZXRFbCgnaW5wJykuZm9jdXMoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVwYWludHMgdGhlIGNvbnRyb2wgYWZ0ZXIgYSBsYXlvdXQgb3BlcmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZXBhaW50XG5cdFx0ICovXG5cdFx0cmVwYWludDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGVsbSA9IHNlbGYuZ2V0RWwoKSwgb3BlbkVsbSA9IHNlbGYuZ2V0RWwoJ29wZW4nKSwgcmVjdCA9IHNlbGYubGF5b3V0UmVjdCgpO1xuXHRcdFx0dmFyIHdpZHRoLCBsaW5lSGVpZ2h0LCBpbm5lclBhZGRpbmcgPSAwLCBpbnB1dEVsbSA9IGVsbS5maXJzdENoaWxkO1xuXG5cdFx0XHRpZiAoc2VsZi5zdGF0dXNMZXZlbCgpICYmIHNlbGYuc3RhdHVzTGV2ZWwoKSAhPT0gJ25vbmUnKSB7XG5cdFx0XHRcdGlubmVyUGFkZGluZyA9IChcblx0XHRcdFx0XHRwYXJzZUludChEb21VdGlscy5nZXRSdW50aW1lU3R5bGUoaW5wdXRFbG0sICdwYWRkaW5nLXJpZ2h0JyksIDEwKSAtXG5cdFx0XHRcdFx0cGFyc2VJbnQoRG9tVXRpbHMuZ2V0UnVudGltZVN0eWxlKGlucHV0RWxtLCAncGFkZGluZy1sZWZ0JyksIDEwKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob3BlbkVsbSkge1xuXHRcdFx0XHR3aWR0aCA9IHJlY3QudyAtIERvbVV0aWxzLmdldFNpemUob3BlbkVsbSkud2lkdGggLSAxMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpZHRoID0gcmVjdC53IC0gMTA7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERldGVjdCBvbGQgSUUgNys4IGFkZCBsaW5lSGVpZ2h0IHRvIGFsaWduIGNhcmV0IHZlcnRpY2FsbHkgaW4gdGhlIG1pZGRsZVxuXHRcdFx0dmFyIGRvYyA9IGRvY3VtZW50O1xuXHRcdFx0aWYgKGRvYy5hbGwgJiYgKCFkb2MuZG9jdW1lbnRNb2RlIHx8IGRvYy5kb2N1bWVudE1vZGUgPD0gOCkpIHtcblx0XHRcdFx0bGluZUhlaWdodCA9IChzZWxmLmxheW91dFJlY3QoKS5oIC0gMikgKyAncHgnO1xuXHRcdFx0fVxuXG5cdFx0XHQkKGlucHV0RWxtKS5jc3Moe1xuXHRcdFx0XHR3aWR0aDogd2lkdGggLSBpbm5lclBhZGRpbmcsXG5cdFx0XHRcdGxpbmVIZWlnaHQ6IGxpbmVIZWlnaHRcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLl9zdXBlcigpO1xuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUG9zdCByZW5kZXIgbWV0aG9kLiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmVuZGVyZWQgdG8gdGhlIHRhcmdldC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcG9zdFJlbmRlclxuXHRcdCAqIEByZXR1cm4ge3RpbnltY2UudWkuQ29tYm9Cb3h9IEN1cnJlbnQgY29tYm9ib3ggaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdCQodGhpcy5nZXRFbCgnaW5wJykpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHNlbGYuc3RhdGUuc2V0KCd2YWx1ZScsIGUudGFyZ2V0LnZhbHVlKTtcblx0XHRcdFx0c2VsZi5maXJlKCdjaGFuZ2UnLCBlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVuZGVycyB0aGUgY29udHJvbCBhcyBhIEhUTUwgc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJIdG1sXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBIVE1MIHJlcHJlc2VudGluZyB0aGUgY29udHJvbC5cblx0XHQgKi9cblx0XHRyZW5kZXJIdG1sOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgaWQgPSBzZWxmLl9pZCwgc2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzLCBwcmVmaXggPSBzZWxmLmNsYXNzUHJlZml4O1xuXHRcdFx0dmFyIHZhbHVlID0gc2VsZi5zdGF0ZS5nZXQoJ3ZhbHVlJykgfHwgJyc7XG5cdFx0XHR2YXIgaWNvbiwgdGV4dCwgb3BlbkJ0bkh0bWwgPSAnJywgZXh0cmFBdHRycyA9ICcnLCBzdGF0dXNIdG1sID0gJyc7XG5cblx0XHRcdGlmIChcInNwZWxsY2hlY2tcIiBpbiBzZXR0aW5ncykge1xuXHRcdFx0XHRleHRyYUF0dHJzICs9ICcgc3BlbGxjaGVjaz1cIicgKyBzZXR0aW5ncy5zcGVsbGNoZWNrICsgJ1wiJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLm1heExlbmd0aCkge1xuXHRcdFx0XHRleHRyYUF0dHJzICs9ICcgbWF4bGVuZ3RoPVwiJyArIHNldHRpbmdzLm1heExlbmd0aCArICdcIic7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5zaXplKSB7XG5cdFx0XHRcdGV4dHJhQXR0cnMgKz0gJyBzaXplPVwiJyArIHNldHRpbmdzLnNpemUgKyAnXCInO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3Muc3VidHlwZSkge1xuXHRcdFx0XHRleHRyYUF0dHJzICs9ICcgdHlwZT1cIicgKyBzZXR0aW5ncy5zdWJ0eXBlICsgJ1wiJztcblx0XHRcdH1cblxuXHRcdFx0c3RhdHVzSHRtbCA9ICc8aSBpZD1cIicgKyBpZCArICctc3RhdHVzXCIgY2xhc3M9XCJtY2Utc3RhdHVzIG1jZS1pY29cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2k+JztcblxuXHRcdFx0aWYgKHNlbGYuZGlzYWJsZWQoKSkge1xuXHRcdFx0XHRleHRyYUF0dHJzICs9ICcgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiJztcblx0XHRcdH1cblxuXHRcdFx0aWNvbiA9IHNldHRpbmdzLmljb247XG5cdFx0XHRpZiAoaWNvbiAmJiBpY29uICE9ICdjYXJldCcpIHtcblx0XHRcdFx0aWNvbiA9IHByZWZpeCArICdpY28gJyArIHByZWZpeCArICdpLScgKyBzZXR0aW5ncy5pY29uO1xuXHRcdFx0fVxuXG5cdFx0XHR0ZXh0ID0gc2VsZi5zdGF0ZS5nZXQoJ3RleHQnKTtcblxuXHRcdFx0aWYgKGljb24gfHwgdGV4dCkge1xuXHRcdFx0XHRvcGVuQnRuSHRtbCA9IChcblx0XHRcdFx0XHQnPGRpdiBpZD1cIicgKyBpZCArICctb3BlblwiIGNsYXNzPVwiJyArIHByZWZpeCArICdidG4gJyArIHByZWZpeCArICdvcGVuXCIgdGFiSW5kZXg9XCItMVwiIHJvbGU9XCJidXR0b25cIj4nICtcblx0XHRcdFx0XHRcdCc8YnV0dG9uIGlkPVwiJyArIGlkICsgJy1hY3Rpb25cIiB0eXBlPVwiYnV0dG9uXCIgaGlkZWZvY3VzPVwiMVwiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdFx0KGljb24gIT0gJ2NhcmV0JyA/ICc8aSBjbGFzcz1cIicgKyBpY29uICsgJ1wiPjwvaT4nIDogJzxpIGNsYXNzPVwiJyArIHByZWZpeCArICdjYXJldFwiPjwvaT4nKSArXG5cdFx0XHRcdFx0XHRcdCh0ZXh0ID8gKGljb24gPyAnICcgOiAnJykgKyB0ZXh0IDogJycpICtcblx0XHRcdFx0XHRcdCc8L2J1dHRvbj4nICtcblx0XHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ2hhcy1vcGVuJyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIj4nICtcblx0XHRcdFx0XHQnPGlucHV0IGlkPVwiJyArIGlkICsgJy1pbnBcIiBjbGFzcz1cIicgKyBwcmVmaXggKyAndGV4dGJveFwiIHZhbHVlPVwiJyArXG5cdFx0XHRcdFx0c2VsZi5lbmNvZGUodmFsdWUsIGZhbHNlKSArICdcIiBoaWRlZm9jdXM9XCIxXCInICsgZXh0cmFBdHRycyArICcgcGxhY2Vob2xkZXI9XCInICtcblx0XHRcdFx0XHRzZWxmLmVuY29kZShzZXR0aW5ncy5wbGFjZWhvbGRlcikgKyAnXCIgLz4nICtcblx0XHRcdFx0XHRzdGF0dXNIdG1sICtcblx0XHRcdFx0XHRvcGVuQnRuSHRtbCArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHR2YWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc3RhdGUuc2V0KCd2YWx1ZScsIHZhbHVlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGUgcmVhbCBzdGF0ZSBpcyBpbiBzeW5jXG5cdFx0XHRpZiAodGhpcy5zdGF0ZS5nZXQoJ3JlbmRlcmVkJykpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5zZXQoJ3ZhbHVlJywgdGhpcy5nZXRFbCgnaW5wJykudmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5nZXQoJ3ZhbHVlJyk7XG5cdFx0fSxcblxuXHRcdHNob3dBdXRvQ29tcGxldGU6IGZ1bmN0aW9uIChpdGVtcywgdGVybSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHNlbGYuaGlkZU1lbnUoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgaW5zZXJ0ID0gZnVuY3Rpb24gKHZhbHVlLCB0aXRsZSkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHNlbGYuZmlyZSgnc2VsZWN0aXRlbScsIHtcblx0XHRcdFx0XHRcdHRpdGxlOiB0aXRsZSxcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHNlbGYubWVudSkge1xuXHRcdFx0XHRzZWxmLm1lbnUuaXRlbXMoKS5yZW1vdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYubWVudSA9IEZhY3RvcnkuY3JlYXRlKHtcblx0XHRcdFx0XHR0eXBlOiAnbWVudScsXG5cdFx0XHRcdFx0Y2xhc3NlczogJ2NvbWJvYm94LW1lbnUnLFxuXHRcdFx0XHRcdGxheW91dDogJ2Zsb3cnXG5cdFx0XHRcdH0pLnBhcmVudChzZWxmKS5yZW5kZXJUbygpO1xuXHRcdFx0fVxuXG5cdFx0XHRUb29scy5lYWNoKGl0ZW1zLCBmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0XHRzZWxmLm1lbnUuYWRkKHtcblx0XHRcdFx0XHR0ZXh0OiBpdGVtLnRpdGxlLFxuXHRcdFx0XHRcdHVybDogaXRlbS5wcmV2aWV3VXJsLFxuXHRcdFx0XHRcdG1hdGNoOiB0ZXJtLFxuXHRcdFx0XHRcdGNsYXNzZXM6ICdtZW51LWl0ZW0tZWxsaXBzaXMnLFxuXHRcdFx0XHRcdG9uY2xpY2s6IGluc2VydChpdGVtLnZhbHVlLCBpdGVtLnRpdGxlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLm1lbnUucmVuZGVyTmV3KCk7XG5cdFx0XHRzZWxmLmhpZGVNZW51KCk7XG5cblx0XHRcdHNlbGYubWVudS5vbignY2FuY2VsJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRpZiAoZS5jb250cm9sLnBhcmVudCgpID09PSBzZWxmLm1lbnUpIHtcblx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdHNlbGYuZm9jdXMoKTtcblx0XHRcdFx0XHRzZWxmLmhpZGVNZW51KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLm1lbnUub24oJ3NlbGVjdCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZvY3VzKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dmFyIG1heFcgPSBzZWxmLmxheW91dFJlY3QoKS53O1xuXHRcdFx0c2VsZi5tZW51LmxheW91dFJlY3Qoe3c6IG1heFcsIG1pblc6IDAsIG1heFc6IG1heFd9KTtcblx0XHRcdHNlbGYubWVudS5yZWZsb3coKTtcblx0XHRcdHNlbGYubWVudS5zaG93KCk7XG5cdFx0XHRzZWxmLm1lbnUubW92ZVJlbChzZWxmLmdldEVsKCksIHNlbGYuaXNSdGwoKSA/IFsnYnItdHInLCAndHItYnInXSA6IFsnYmwtdGwnLCAndGwtYmwnXSk7XG5cdFx0fSxcblxuXHRcdGhpZGVNZW51OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICh0aGlzLm1lbnUpIHtcblx0XHRcdFx0dGhpcy5tZW51LmhpZGUoKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmluZFN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTp2YWx1ZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKHNlbGYuZ2V0RWwoJ2lucCcpLnZhbHVlICE9IGUudmFsdWUpIHtcblx0XHRcdFx0XHRzZWxmLmdldEVsKCdpbnAnKS52YWx1ZSA9IGUudmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6ZGlzYWJsZWQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHNlbGYuZ2V0RWwoJ2lucCcpLmRpc2FibGVkID0gZS52YWx1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6c3RhdHVzTGV2ZWwnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBzdGF0dXNJY29uRWxtID0gc2VsZi5nZXRFbCgnc3RhdHVzJyk7XG5cdFx0XHRcdHZhciBwcmVmaXggPSBzZWxmLmNsYXNzUHJlZml4LCB2YWx1ZSA9IGUudmFsdWU7XG5cblx0XHRcdFx0RG9tVXRpbHMuY3NzKHN0YXR1c0ljb25FbG0sICdkaXNwbGF5JywgdmFsdWUgPT09ICdub25lJyA/ICdub25lJyA6ICcnKTtcblx0XHRcdFx0RG9tVXRpbHMudG9nZ2xlQ2xhc3Moc3RhdHVzSWNvbkVsbSwgcHJlZml4ICsgJ2ktY2hlY2ttYXJrJywgdmFsdWUgPT09ICdvaycpO1xuXHRcdFx0XHREb21VdGlscy50b2dnbGVDbGFzcyhzdGF0dXNJY29uRWxtLCBwcmVmaXggKyAnaS13YXJuaW5nJywgdmFsdWUgPT09ICd3YXJuJyk7XG5cdFx0XHRcdERvbVV0aWxzLnRvZ2dsZUNsYXNzKHN0YXR1c0ljb25FbG0sIHByZWZpeCArICdpLWVycm9yJywgdmFsdWUgPT09ICdlcnJvcicpO1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMudG9nZ2xlKCdoYXMtc3RhdHVzJywgdmFsdWUgIT09ICdub25lJyk7XG5cdFx0XHRcdHNlbGYucmVwYWludCgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdERvbVV0aWxzLm9uKHNlbGYuZ2V0RWwoJ3N0YXR1cycpLCAnbW91c2VsZWF2ZScsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZi50b29sdGlwKCkuaGlkZSgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub24oJ2NhbmNlbCcsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdGlmIChzZWxmLm1lbnUgJiYgc2VsZi5tZW51LnZpc2libGUoKSkge1xuXHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0c2VsZi5oaWRlTWVudSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dmFyIGZvY3VzSWR4ID0gZnVuY3Rpb24gKGlkeCwgbWVudSkge1xuXHRcdFx0XHRpZiAobWVudSAmJiBtZW51Lml0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG1lbnUuaXRlbXMoKS5lcShpZHgpWzBdLmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdHNlbGYub24oJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHR2YXIga2V5Q29kZSA9IGUua2V5Q29kZTtcblxuXHRcdFx0XHRpZiAoZS50YXJnZXQubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcblx0XHRcdFx0XHRpZiAoa2V5Q29kZSA9PT0gVksuRE9XTikge1xuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0c2VsZi5maXJlKCdhdXRvY29tcGxldGUnKTtcblx0XHRcdFx0XHRcdGZvY3VzSWR4KDAsIHNlbGYubWVudSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChrZXlDb2RlID09PSBWSy5VUCkge1xuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0Zm9jdXNJZHgoLTEsIHNlbGYubWVudSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fSxcblxuXHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHQkKHRoaXMuZ2V0RWwoJ2lucCcpKS5vZmYoKTtcblxuXHRcdFx0aWYgKHRoaXMubWVudSkge1xuXHRcdFx0XHR0aGlzLm1lbnUucmVtb3ZlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3N1cGVyKCk7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvQ29sb3JCb3guanNcblxuLyoqXG4gKiBDb2xvckJveC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgd2lkZ2V0IGxldHMgeW91IGVudGVyIGNvbG9ycyBhbmQgYnJvd3NlIGZvciBjb2xvcnMgYnkgcHJlc3NpbmcgdGhlIGNvbG9yIGJ1dHRvbi4gSXQgYWxzbyBkaXNwbGF5c1xuICogYSBwcmV2aWV3IG9mIHRoZSBjdXJyZW50IGNvbG9yLlxuICpcbiAqIEAteC1sZXNzIENvbG9yQm94Lmxlc3NcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkNvbG9yQm94XG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkNvbWJvQm94XG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvQ29sb3JCb3hcIiwgW1xuXHRcInRpbnltY2UvdWkvQ29tYm9Cb3hcIlxuXSwgZnVuY3Rpb24oQ29tYm9Cb3gpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIENvbWJvQm94LmV4dGVuZCh7XG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIG5ldyBjb250cm9sIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNldHRpbmdzLnNwZWxsY2hlY2sgPSBmYWxzZTtcblxuXHRcdFx0aWYgKHNldHRpbmdzLm9uYWN0aW9uKSB7XG5cdFx0XHRcdHNldHRpbmdzLmljb24gPSAnbm9uZSc7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuX3N1cGVyKHNldHRpbmdzKTtcblxuXHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnY29sb3Jib3gnKTtcblx0XHRcdHNlbGYub24oJ2NoYW5nZSBrZXl1cCBwb3N0cmVuZGVyJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYucmVwYWludENvbG9yKHNlbGYudmFsdWUoKSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0cmVwYWludENvbG9yOiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0dmFyIG9wZW5FbG0gPSB0aGlzLmdldEVsKCdvcGVuJyk7XG5cdFx0XHR2YXIgZWxtID0gb3BlbkVsbSA/IG9wZW5FbG0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2knKVswXSA6IG51bGw7XG5cblx0XHRcdGlmIChlbG0pIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbG0uc3R5bGUuYmFja2dyb3VuZCA9IHZhbHVlO1xuXHRcdFx0XHR9IGNhdGNoIChleCkge1xuXHRcdFx0XHRcdC8vIElnbm9yZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJpbmRTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6dmFsdWUnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmIChzZWxmLnN0YXRlLmdldCgncmVuZGVyZWQnKSkge1xuXHRcdFx0XHRcdHNlbGYucmVwYWludENvbG9yKGUudmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvUGFuZWxCdXR0b24uanNcblxuLyoqXG4gKiBQYW5lbEJ1dHRvbi5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcGFuZWwgYnV0dG9uLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLlBhbmVsQnV0dG9uXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkJ1dHRvblxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL1BhbmVsQnV0dG9uXCIsIFtcblx0XCJ0aW55bWNlL3VpL0J1dHRvblwiLFxuXHRcInRpbnltY2UvdWkvRmxvYXRQYW5lbFwiXG5dLCBmdW5jdGlvbihCdXR0b24sIEZsb2F0UGFuZWwpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIEJ1dHRvbi5leHRlbmQoe1xuXHRcdC8qKlxuXHRcdCAqIFNob3dzIHRoZSBwYW5lbCBmb3IgdGhlIGJ1dHRvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgc2hvd1BhbmVsXG5cdFx0ICovXG5cdFx0c2hvd1BhbmVsOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzO1xuXG5cdFx0XHRzZWxmLmFjdGl2ZSh0cnVlKTtcblxuXHRcdFx0aWYgKCFzZWxmLnBhbmVsKSB7XG5cdFx0XHRcdHZhciBwYW5lbFNldHRpbmdzID0gc2V0dGluZ3MucGFuZWw7XG5cblx0XHRcdFx0Ly8gV3JhcCBwYW5lbCBpbiBncmlkIGxheW91dCBpZiB0eXBlIGlmIHNwZWNpZmllZFxuXHRcdFx0XHQvLyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFkZCBmb3JtcyBvciBvdGhlciBjb250YWluZXJzIGRpcmVjdGx5IGluIHRoZSBwYW5lbCBvcHRpb25cblx0XHRcdFx0aWYgKHBhbmVsU2V0dGluZ3MudHlwZSkge1xuXHRcdFx0XHRcdHBhbmVsU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRsYXlvdXQ6ICdncmlkJyxcblx0XHRcdFx0XHRcdGl0ZW1zOiBwYW5lbFNldHRpbmdzXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHBhbmVsU2V0dGluZ3Mucm9sZSA9IHBhbmVsU2V0dGluZ3Mucm9sZSB8fCAnZGlhbG9nJztcblx0XHRcdFx0cGFuZWxTZXR0aW5ncy5wb3BvdmVyID0gdHJ1ZTtcblx0XHRcdFx0cGFuZWxTZXR0aW5ncy5hdXRvaGlkZSA9IHRydWU7XG5cdFx0XHRcdHBhbmVsU2V0dGluZ3MuYXJpYVJvb3QgPSB0cnVlO1xuXG5cdFx0XHRcdHNlbGYucGFuZWwgPSBuZXcgRmxvYXRQYW5lbChwYW5lbFNldHRpbmdzKS5vbignaGlkZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNlbGYuYWN0aXZlKGZhbHNlKTtcblx0XHRcdFx0fSkub24oJ2NhbmNlbCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdHNlbGYuZm9jdXMoKTtcblx0XHRcdFx0XHRzZWxmLmhpZGVQYW5lbCgpO1xuXHRcdFx0XHR9KS5wYXJlbnQoc2VsZikucmVuZGVyVG8oc2VsZi5nZXRDb250YWluZXJFbG0oKSk7XG5cblx0XHRcdFx0c2VsZi5wYW5lbC5maXJlKCdzaG93Jyk7XG5cdFx0XHRcdHNlbGYucGFuZWwucmVmbG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLnBhbmVsLnNob3coKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5wYW5lbC5tb3ZlUmVsKHNlbGYuZ2V0RWwoKSwgc2V0dGluZ3MucG9wb3ZlckFsaWduIHx8IChzZWxmLmlzUnRsKCkgPyBbJ2JjLXRyJywgJ2JjLXRjJ10gOiBbJ2JjLXRsJywgJ2JjLXRjJ10pKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSGlkZXMgdGhlIHBhbmVsIGZvciB0aGUgYnV0dG9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBoaWRlUGFuZWxcblx0XHQgKi9cblx0XHRoaWRlUGFuZWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRpZiAoc2VsZi5wYW5lbCkge1xuXHRcdFx0XHRzZWxmLnBhbmVsLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIHJlbmRlcmVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwb3N0UmVuZGVyXG5cdFx0ICovXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuYXJpYSgnaGFzcG9wdXAnLCB0cnVlKTtcblxuXHRcdFx0c2VsZi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmIChlLmNvbnRyb2wgPT09IHNlbGYpIHtcblx0XHRcdFx0XHRpZiAoc2VsZi5wYW5lbCAmJiBzZWxmLnBhbmVsLnZpc2libGUoKSkge1xuXHRcdFx0XHRcdFx0c2VsZi5oaWRlUGFuZWwoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5zaG93UGFuZWwoKTtcblx0XHRcdFx0XHRcdHNlbGYucGFuZWwuZm9jdXMoISFlLmFyaWEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBzZWxmLl9zdXBlcigpO1xuXHRcdH0sXG5cblx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKHRoaXMucGFuZWwpIHtcblx0XHRcdFx0dGhpcy5wYW5lbC5yZW1vdmUoKTtcblx0XHRcdFx0dGhpcy5wYW5lbCA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLl9zdXBlcigpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0NvbG9yQnV0dG9uLmpzXG5cbi8qKlxuICogQ29sb3JCdXR0b24uanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNyZWF0ZXMgYSBjb2xvciBidXR0b24gY29udHJvbC4gVGhpcyBpcyBhIHNwbGl0IGJ1dHRvbiBpbiB3aGljaCB0aGUgbWFpblxuICogYnV0dG9uIGhhcyBhIHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbG9yLiBXaGVuIGNsaWNrZWRcbiAqIHRoZSBjYXJldCBidXR0b24gZGlzcGxheXMgYSBjb2xvciBwaWNrZXIsIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNlbGVjdCBhIG5ldyBjb2xvci5cbiAqXG4gKiBALXgtbGVzcyBDb2xvckJ1dHRvbi5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Db2xvckJ1dHRvblxuICogQGV4dGVuZHMgdGlueW1jZS51aS5QYW5lbEJ1dHRvblxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0NvbG9yQnV0dG9uXCIsIFtcblx0XCJ0aW55bWNlL3VpL1BhbmVsQnV0dG9uXCIsXG5cdFwidGlueW1jZS9kb20vRE9NVXRpbHNcIlxuXSwgZnVuY3Rpb24oUGFuZWxCdXR0b24sIERvbVV0aWxzKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBET00gPSBEb21VdGlscy5ET007XG5cblx0cmV0dXJuIFBhbmVsQnV0dG9uLmV4dGVuZCh7XG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIG5ldyBDb2xvckJ1dHRvbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dGhpcy5fc3VwZXIoc2V0dGluZ3MpO1xuXHRcdFx0dGhpcy5jbGFzc2VzLmFkZCgnY29sb3JidXR0b24nKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogR2V0dGVyL3NldHRlciBmb3IgdGhlIGN1cnJlbnQgY29sb3IuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNvbG9yXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IFtjb2xvcl0gQ29sb3IgdG8gc2V0LlxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ3x0aW55bWNlLnVpLkNvbG9yQnV0dG9ufSBDdXJyZW50IGNvbG9yIG9yIGN1cnJlbnQgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0Y29sb3I6IGZ1bmN0aW9uKGNvbG9yKSB7XG5cdFx0XHRpZiAoY29sb3IpIHtcblx0XHRcdFx0dGhpcy5fY29sb3IgPSBjb2xvcjtcblx0XHRcdFx0dGhpcy5nZXRFbCgncHJldmlldycpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuX2NvbG9yO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXNldHMgdGhlIGN1cnJlbnQgY29sb3IuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlc2V0Q29sb3Jcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbG9yQnV0dG9ufSBDdXJyZW50IGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdHJlc2V0Q29sb3I6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fY29sb3IgPSBudWxsO1xuXHRcdFx0dGhpcy5nZXRFbCgncHJldmlldycpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IG51bGw7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVuZGVycyB0aGUgY29udHJvbCBhcyBhIEhUTUwgc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJIdG1sXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBIVE1MIHJlcHJlc2VudGluZyB0aGUgY29udHJvbC5cblx0XHQgKi9cblx0XHRyZW5kZXJIdG1sOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgaWQgPSBzZWxmLl9pZCwgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeCwgdGV4dCA9IHNlbGYuc3RhdGUuZ2V0KCd0ZXh0Jyk7XG5cdFx0XHR2YXIgaWNvbiA9IHNlbGYuc2V0dGluZ3MuaWNvbiA/IHByZWZpeCArICdpY28gJyArIHByZWZpeCArICdpLScgKyBzZWxmLnNldHRpbmdzLmljb24gOiAnJztcblx0XHRcdHZhciBpbWFnZSA9IHNlbGYuc2V0dGluZ3MuaW1hZ2UgPyAnIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcJycgKyBzZWxmLnNldHRpbmdzLmltYWdlICsgJ1xcJylcIicgOiAnJyxcblx0XHRcdFx0dGV4dEh0bWwgPSAnJztcblxuXHRcdFx0aWYgKHRleHQpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnYnRuLWhhcy10ZXh0Jyk7XG5cdFx0XHRcdHRleHRIdG1sID0gJzxzcGFuIGNsYXNzPVwiJyArIHByZWZpeCArICd0eHRcIj4nICsgc2VsZi5lbmNvZGUodGV4dCkgKyAnPC9zcGFuPic7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCI+JyArXG5cdFx0XHRcdFx0JzxidXR0b24gcm9sZT1cInByZXNlbnRhdGlvblwiIGhpZGVmb2N1cz1cIjFcIiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0KGljb24gPyAnPGkgY2xhc3M9XCInICsgaWNvbiArICdcIicgKyBpbWFnZSArICc+PC9pPicgOiAnJykgK1xuXHRcdFx0XHRcdFx0JzxzcGFuIGlkPVwiJyArIGlkICsgJy1wcmV2aWV3XCIgY2xhc3M9XCInICsgcHJlZml4ICsgJ3ByZXZpZXdcIj48L3NwYW4+JyArXG5cdFx0XHRcdFx0XHR0ZXh0SHRtbCArXG5cdFx0XHRcdFx0JzwvYnV0dG9uPicgK1xuXHRcdFx0XHRcdCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIicgKyBwcmVmaXggKyAnb3BlblwiIGhpZGVmb2N1cz1cIjFcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHQnIDxpIGNsYXNzPVwiJyArIHByZWZpeCArICdjYXJldFwiPjwvaT4nICtcblx0XHRcdFx0XHQnPC9idXR0b24+JyArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmVuZGVyZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBvc3RSZW5kZXJcblx0XHQgKi9cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgb25DbGlja0hhbmRsZXIgPSBzZWxmLnNldHRpbmdzLm9uY2xpY2s7XG5cblx0XHRcdHNlbGYub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRpZiAoZS5hcmlhICYmIGUuYXJpYS5rZXkgPT0gJ2Rvd24nKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGUuY29udHJvbCA9PSBzZWxmICYmICFET00uZ2V0UGFyZW50KGUudGFyZ2V0LCAnLicgKyBzZWxmLmNsYXNzUHJlZml4ICsgJ29wZW4nKSkge1xuXHRcdFx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0b25DbGlja0hhbmRsZXIuY2FsbChzZWxmLCBlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGRlbGV0ZSBzZWxmLnNldHRpbmdzLm9uY2xpY2s7XG5cblx0XHRcdHJldHVybiBzZWxmLl9zdXBlcigpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3V0aWwvQ29sb3IuanNcblxuLyoqXG4gKiBDb2xvci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgbGV0cyB5b3UgcGFyc2Uvc2VyaWFsaXplIGNvbG9ycyBhbmQgY29udmVydCByZ2IvaHNiLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnV0aWwuQ29sb3JcbiAqIEBleGFtcGxlXG4gKiB2YXIgd2hpdGUgPSBuZXcgdGlueW1jZS51dGlsLkNvbG9yKHtyOiAyNTUsIGc6IDI1NSwgYjogMjU1fSk7XG4gKiB2YXIgcmVkID0gbmV3IHRpbnltY2UudXRpbC5Db2xvcignI0ZGMDAwMCcpO1xuICpcbiAqIGNvbnNvbGUubG9nKHdoaXRlLnRvSGV4KCksIHJlZC50b0hzdigpKTtcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91dGlsL0NvbG9yXCIsIFtdLCBmdW5jdGlvbigpIHtcblx0dmFyIG1pbiA9IE1hdGgubWluLCBtYXggPSBNYXRoLm1heCwgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIGEgbmV3IGNvbG9yIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQG1ldGhvZCBDb2xvclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgT3B0aW9uYWwgaW5pdGlhbCB2YWx1ZSB0byBwYXJzZS5cblx0ICovXG5cdGZ1bmN0aW9uIENvbG9yKHZhbHVlKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzLCByID0gMCwgZyA9IDAsIGIgPSAwO1xuXG5cdFx0ZnVuY3Rpb24gcmdiMmhzdihyLCBnLCBiKSB7XG5cdFx0XHR2YXIgaCwgcywgdiwgZCwgbWluUkdCLCBtYXhSR0I7XG5cblx0XHRcdGggPSAwO1xuXHRcdFx0cyA9IDA7XG5cdFx0XHR2ID0gMDtcblx0XHRcdHIgPSByIC8gMjU1O1xuXHRcdFx0ZyA9IGcgLyAyNTU7XG5cdFx0XHRiID0gYiAvIDI1NTtcblxuXHRcdFx0bWluUkdCID0gbWluKHIsIG1pbihnLCBiKSk7XG5cdFx0XHRtYXhSR0IgPSBtYXgociwgbWF4KGcsIGIpKTtcblxuXHRcdFx0aWYgKG1pblJHQiA9PSBtYXhSR0IpIHtcblx0XHRcdFx0diA9IG1pblJHQjtcblxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGg6IDAsXG5cdFx0XHRcdFx0czogMCxcblx0XHRcdFx0XHR2OiB2ICogMTAwXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdC8qZXNsaW50IG5vLW5lc3RlZC10ZXJuYXJ5OjAgKi9cblx0XHRcdGQgPSAociA9PSBtaW5SR0IpID8gZyAtIGIgOiAoKGIgPT0gbWluUkdCKSA/IHIgLSBnIDogYiAtIHIpO1xuXHRcdFx0aCA9IChyID09IG1pblJHQikgPyAzIDogKChiID09IG1pblJHQikgPyAxIDogNSk7XG5cdFx0XHRoID0gNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSk7XG5cdFx0XHRzID0gKG1heFJHQiAtIG1pblJHQikgLyBtYXhSR0I7XG5cdFx0XHR2ID0gbWF4UkdCO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRoOiByb3VuZChoKSxcblx0XHRcdFx0czogcm91bmQocyAqIDEwMCksXG5cdFx0XHRcdHY6IHJvdW5kKHYgKiAxMDApXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhzdlRvUmdiKGh1ZSwgc2F0dXJhdGlvbiwgYnJpZ2h0bmVzcykge1xuXHRcdFx0dmFyIHNpZGUsIGNocm9tYSwgeCwgbWF0Y2g7XG5cblx0XHRcdGh1ZSA9IChwYXJzZUludChodWUsIDEwKSB8fCAwKSAlIDM2MDtcblx0XHRcdHNhdHVyYXRpb24gPSBwYXJzZUludChzYXR1cmF0aW9uLCAxMCkgLyAxMDA7XG5cdFx0XHRicmlnaHRuZXNzID0gcGFyc2VJbnQoYnJpZ2h0bmVzcywgMTApIC8gMTAwO1xuXHRcdFx0c2F0dXJhdGlvbiA9IG1heCgwLCBtaW4oc2F0dXJhdGlvbiwgMSkpO1xuXHRcdFx0YnJpZ2h0bmVzcyA9IG1heCgwLCBtaW4oYnJpZ2h0bmVzcywgMSkpO1xuXG5cdFx0XHRpZiAoc2F0dXJhdGlvbiA9PT0gMCkge1xuXHRcdFx0XHRyID0gZyA9IGIgPSByb3VuZCgyNTUgKiBicmlnaHRuZXNzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRzaWRlID0gaHVlIC8gNjA7XG5cdFx0XHRjaHJvbWEgPSBicmlnaHRuZXNzICogc2F0dXJhdGlvbjtcblx0XHRcdHggPSBjaHJvbWEgKiAoMSAtIE1hdGguYWJzKHNpZGUgJSAyIC0gMSkpO1xuXHRcdFx0bWF0Y2ggPSBicmlnaHRuZXNzIC0gY2hyb21hO1xuXG5cdFx0XHRzd2l0Y2ggKE1hdGguZmxvb3Ioc2lkZSkpIHtcblx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdHIgPSBjaHJvbWE7XG5cdFx0XHRcdFx0ZyA9IHg7XG5cdFx0XHRcdFx0YiA9IDA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdHIgPSB4O1xuXHRcdFx0XHRcdGcgPSBjaHJvbWE7XG5cdFx0XHRcdFx0YiA9IDA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdHIgPSAwO1xuXHRcdFx0XHRcdGcgPSBjaHJvbWE7XG5cdFx0XHRcdFx0YiA9IHg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRcdHIgPSAwO1xuXHRcdFx0XHRcdGcgPSB4O1xuXHRcdFx0XHRcdGIgPSBjaHJvbWE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRcdHIgPSB4O1xuXHRcdFx0XHRcdGcgPSAwO1xuXHRcdFx0XHRcdGIgPSBjaHJvbWE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSA1OlxuXHRcdFx0XHRcdHIgPSBjaHJvbWE7XG5cdFx0XHRcdFx0ZyA9IDA7XG5cdFx0XHRcdFx0YiA9IHg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyID0gZyA9IGIgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHRyID0gcm91bmQoMjU1ICogKHIgKyBtYXRjaCkpO1xuXHRcdFx0ZyA9IHJvdW5kKDI1NSAqIChnICsgbWF0Y2gpKTtcblx0XHRcdGIgPSByb3VuZCgyNTUgKiAoYiArIG1hdGNoKSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgaGV4IHN0cmluZyBvZiB0aGUgY3VycmVudCBjb2xvci4gRm9yIGV4YW1wbGU6ICNmZjAwZmZcblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdG9IZXhcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhleCBzdHJpbmcgb2YgY3VycmVudCBjb2xvci5cblx0XHQgKi9cblx0XHRmdW5jdGlvbiB0b0hleCgpIHtcblx0XHRcdGZ1bmN0aW9uIGhleCh2YWwpIHtcblx0XHRcdFx0dmFsID0gcGFyc2VJbnQodmFsLCAxMCkudG9TdHJpbmcoMTYpO1xuXG5cdFx0XHRcdHJldHVybiB2YWwubGVuZ3RoID4gMSA/IHZhbCA6ICcwJyArIHZhbDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICcjJyArIGhleChyKSArIGhleChnKSArIGhleChiKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZXR1cm5zIHRoZSByLCBnLCBiIHZhbHVlcyBvZiB0aGUgY29sb3IuIEVhY2ggY2hhbm5lbCBoYXMgYSByYW5nZSBmcm9tIDAtMjU1LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0b1JnYlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gT2JqZWN0IHdpdGggciwgZywgYiBmaWVsZHMuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gdG9SZ2IoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyOiByLFxuXHRcdFx0XHRnOiBnLFxuXHRcdFx0XHRiOiBiXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGgsIHMsIHYgdmFsdWVzIG9mIHRoZSBjb2xvci4gUmFuZ2VzOiBoPTAtMzYwLCBzPTAtMTAwLCB2PTAtMTAwLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCB0b0hzdlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gT2JqZWN0IHdpdGggaCwgcywgdiBmaWVsZHMuXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gdG9Ic3YoKSB7XG5cdFx0XHRyZXR1cm4gcmdiMmhzdihyLCBnLCBiKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBQYXJzZXMgdGhlIHNwZWNpZmllZCB2YWx1ZSBhbmQgcG9wdWxhdGVzIHRoZSBjb2xvciBpbnN0YW5jZS5cblx0XHQgKlxuXHRcdCAqIFN1cHBvcnRlZCBmb3JtYXQgZXhhbXBsZXM6XG5cdFx0ICogICogcmJnKDI1NSwwLDApXG5cdFx0ICogICogI2ZmMDAwMFxuXHRcdCAqICAqICNmZmZcblx0XHQgKiAgKiB7cjogMjU1LCBnOiAwLCBiOiAwfVxuXHRcdCAqICAqIHtoOiAzNjAsIHM6IDEwMCwgdjogMTAwfVxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwYXJzZVxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0L1N0cmluZ30gdmFsdWUgQ29sb3IgdmFsdWUgdG8gcGFyc2UuXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51dGlsLkNvbG9yfSBDdXJyZW50IGNvbG9yIGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHBhcnNlKHZhbHVlKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcztcblxuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpZiAoXCJyXCIgaW4gdmFsdWUpIHtcblx0XHRcdFx0XHRyID0gdmFsdWUucjtcblx0XHRcdFx0XHRnID0gdmFsdWUuZztcblx0XHRcdFx0XHRiID0gdmFsdWUuYjtcblx0XHRcdFx0fSBlbHNlIGlmIChcInZcIiBpbiB2YWx1ZSkge1xuXHRcdFx0XHRcdGhzdlRvUmdiKHZhbHVlLmgsIHZhbHVlLnMsIHZhbHVlLnYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoKG1hdGNoZXMgPSAvcmdiXFxzKlxcKFxccyooWzAtOV0rKVxccyosXFxzKihbMC05XSspXFxzKixcXHMqKFswLTldKylbXlxcKV0qXFwpL2dpLmV4ZWModmFsdWUpKSkge1xuXHRcdFx0XHRcdHIgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCk7XG5cdFx0XHRcdFx0ZyA9IHBhcnNlSW50KG1hdGNoZXNbMl0sIDEwKTtcblx0XHRcdFx0XHRiID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKChtYXRjaGVzID0gLyMoWzAtRl17Mn0pKFswLUZdezJ9KShbMC1GXXsyfSkvZ2kuZXhlYyh2YWx1ZSkpKSB7XG5cdFx0XHRcdFx0ciA9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDE2KTtcblx0XHRcdFx0XHRnID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTYpO1xuXHRcdFx0XHRcdGIgPSBwYXJzZUludChtYXRjaGVzWzNdLCAxNik7XG5cdFx0XHRcdH0gZWxzZSBpZiAoKG1hdGNoZXMgPSAvIyhbMC1GXSkoWzAtRl0pKFswLUZdKS9naS5leGVjKHZhbHVlKSkpIHtcblx0XHRcdFx0XHRyID0gcGFyc2VJbnQobWF0Y2hlc1sxXSArIG1hdGNoZXNbMV0sIDE2KTtcblx0XHRcdFx0XHRnID0gcGFyc2VJbnQobWF0Y2hlc1syXSArIG1hdGNoZXNbMl0sIDE2KTtcblx0XHRcdFx0XHRiID0gcGFyc2VJbnQobWF0Y2hlc1szXSArIG1hdGNoZXNbM10sIDE2KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyID0gciA8IDAgPyAwIDogKHIgPiAyNTUgPyAyNTUgOiByKTtcblx0XHRcdGcgPSBnIDwgMCA/IDAgOiAoZyA+IDI1NSA/IDI1NSA6IGcpO1xuXHRcdFx0YiA9IGIgPCAwID8gMCA6IChiID4gMjU1ID8gMjU1IDogYik7XG5cblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cGFyc2UodmFsdWUpO1xuXHRcdH1cblxuXHRcdHNlbGYudG9SZ2IgPSB0b1JnYjtcblx0XHRzZWxmLnRvSHN2ID0gdG9Ic3Y7XG5cdFx0c2VsZi50b0hleCA9IHRvSGV4O1xuXHRcdHNlbGYucGFyc2UgPSBwYXJzZTtcblx0fVxuXG5cdHJldHVybiBDb2xvcjtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvQ29sb3JQaWNrZXIuanNcblxuLyoqXG4gKiBDb2xvclBpY2tlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIENvbG9yIHBpY2tlciB3aWRnZXQgbGV0cyB5b3Ugc2VsZWN0IGNvbG9ycy5cbiAqXG4gKiBALXgtbGVzcyBDb2xvclBpY2tlci5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Db2xvclBpY2tlclxuICogQGV4dGVuZHMgdGlueW1jZS51aS5XaWRnZXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9Db2xvclBpY2tlclwiLCBbXG5cdFwidGlueW1jZS91aS9XaWRnZXRcIixcblx0XCJ0aW55bWNlL3VpL0RyYWdIZWxwZXJcIixcblx0XCJ0aW55bWNlL3VpL0RvbVV0aWxzXCIsXG5cdFwidGlueW1jZS91dGlsL0NvbG9yXCJcbl0sIGZ1bmN0aW9uKFdpZGdldCwgRHJhZ0hlbHBlciwgRG9tVXRpbHMsIENvbG9yKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBXaWRnZXQuZXh0ZW5kKHtcblx0XHREZWZhdWx0czoge1xuXHRcdFx0Y2xhc3NlczogXCJ3aWRnZXQgY29sb3JwaWNrZXJcIlxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDb25zdHJ1Y3RzIGEgbmV3IGNvbG9ycGlja2VyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqIEBzZXR0aW5nIHtTdHJpbmd9IGNvbG9yIEluaXRpYWwgY29sb3IgdmFsdWUuXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHRoaXMuX3N1cGVyKHNldHRpbmdzKTtcblx0XHR9LFxuXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGNvbG9yID0gc2VsZi5jb2xvcigpLCBoc3YsIGh1ZVJvb3RFbG0sIGh1ZVBvaW50RWxtLCBzdlJvb3RFbG0sIHN2UG9pbnRFbG07XG5cblx0XHRcdGh1ZVJvb3RFbG0gPSBzZWxmLmdldEVsKCdoJyk7XG5cdFx0XHRodWVQb2ludEVsbSA9IHNlbGYuZ2V0RWwoJ2hwJyk7XG5cdFx0XHRzdlJvb3RFbG0gPSBzZWxmLmdldEVsKCdzdicpO1xuXHRcdFx0c3ZQb2ludEVsbSA9IHNlbGYuZ2V0RWwoJ3N2cCcpO1xuXG5cdFx0XHRmdW5jdGlvbiBnZXRQb3MoZWxtLCBldmVudCkge1xuXHRcdFx0XHR2YXIgcG9zID0gRG9tVXRpbHMuZ2V0UG9zKGVsbSksIHgsIHk7XG5cblx0XHRcdFx0eCA9IGV2ZW50LnBhZ2VYIC0gcG9zLng7XG5cdFx0XHRcdHkgPSBldmVudC5wYWdlWSAtIHBvcy55O1xuXG5cdFx0XHRcdHggPSBNYXRoLm1heCgwLCBNYXRoLm1pbih4IC8gZWxtLmNsaWVudFdpZHRoLCAxKSk7XG5cdFx0XHRcdHkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih5IC8gZWxtLmNsaWVudEhlaWdodCwgMSkpO1xuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0eDogeCxcblx0XHRcdFx0XHR5OiB5XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHVwZGF0ZUNvbG9yKGhzdiwgaHVlVXBkYXRlKSB7XG5cdFx0XHRcdHZhciBodWUgPSAoMzYwIC0gaHN2LmgpIC8gMzYwO1xuXG5cdFx0XHRcdERvbVV0aWxzLmNzcyhodWVQb2ludEVsbSwge1xuXHRcdFx0XHRcdHRvcDogKGh1ZSAqIDEwMCkgKyAnJSdcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKCFodWVVcGRhdGUpIHtcblx0XHRcdFx0XHREb21VdGlscy5jc3Moc3ZQb2ludEVsbSwge1xuXHRcdFx0XHRcdFx0bGVmdDogaHN2LnMgKyAnJScsXG5cdFx0XHRcdFx0XHR0b3A6ICgxMDAgLSBoc3YudikgKyAnJSdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN2Um9vdEVsbS5zdHlsZS5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKHtzOiAxMDAsIHY6IDEwMCwgaDogaHN2Lmh9KS50b0hleCgpO1xuXHRcdFx0XHRzZWxmLmNvbG9yKCkucGFyc2Uoe3M6IGhzdi5zLCB2OiBoc3YudiwgaDogaHN2Lmh9KTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gdXBkYXRlU2F0dXJhdGlvbkFuZFZhbHVlKGUpIHtcblx0XHRcdFx0dmFyIHBvcztcblxuXHRcdFx0XHRwb3MgPSBnZXRQb3Moc3ZSb290RWxtLCBlKTtcblx0XHRcdFx0aHN2LnMgPSBwb3MueCAqIDEwMDtcblx0XHRcdFx0aHN2LnYgPSAoMSAtIHBvcy55KSAqIDEwMDtcblxuXHRcdFx0XHR1cGRhdGVDb2xvcihoc3YpO1xuXHRcdFx0XHRzZWxmLmZpcmUoJ2NoYW5nZScpO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiB1cGRhdGVIdWUoZSkge1xuXHRcdFx0XHR2YXIgcG9zO1xuXG5cdFx0XHRcdHBvcyA9IGdldFBvcyhodWVSb290RWxtLCBlKTtcblx0XHRcdFx0aHN2ID0gY29sb3IudG9Ic3YoKTtcblx0XHRcdFx0aHN2LmggPSAoMSAtIHBvcy55KSAqIDM2MDtcblx0XHRcdFx0dXBkYXRlQ29sb3IoaHN2LCB0cnVlKTtcblx0XHRcdFx0c2VsZi5maXJlKCdjaGFuZ2UnKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5fcmVwYWludCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRoc3YgPSBjb2xvci50b0hzdigpO1xuXHRcdFx0XHR1cGRhdGVDb2xvcihoc3YpO1xuXHRcdFx0fTtcblxuXHRcdFx0c2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0c2VsZi5fc3ZkcmFnaGVscGVyID0gbmV3IERyYWdIZWxwZXIoc2VsZi5faWQgKyAnLXN2Jywge1xuXHRcdFx0XHRzdGFydDogdXBkYXRlU2F0dXJhdGlvbkFuZFZhbHVlLFxuXHRcdFx0XHRkcmFnOiB1cGRhdGVTYXR1cmF0aW9uQW5kVmFsdWVcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLl9oZHJhZ2hlbHBlciA9IG5ldyBEcmFnSGVscGVyKHNlbGYuX2lkICsgJy1oJywge1xuXHRcdFx0XHRzdGFydDogdXBkYXRlSHVlLFxuXHRcdFx0XHRkcmFnOiB1cGRhdGVIdWVcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLl9yZXBhaW50KCk7XG5cdFx0fSxcblxuXHRcdHJnYjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb2xvcigpLnRvUmdiKCk7XG5cdFx0fSxcblxuXHRcdHZhbHVlOiBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHRcdFx0XHRzZWxmLmNvbG9yKCkucGFyc2UodmFsdWUpO1xuXG5cdFx0XHRcdGlmIChzZWxmLl9yZW5kZXJlZCkge1xuXHRcdFx0XHRcdHNlbGYuX3JlcGFpbnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYuY29sb3IoKS50b0hleCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjb2xvcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIXRoaXMuX2NvbG9yKSB7XG5cdFx0XHRcdHRoaXMuX2NvbG9yID0gbmV3IENvbG9yKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLl9jb2xvcjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVuZGVycyB0aGUgY29udHJvbCBhcyBhIEhUTUwgc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJIdG1sXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBIVE1MIHJlcHJlc2VudGluZyB0aGUgY29udHJvbC5cblx0XHQgKi9cblx0XHRyZW5kZXJIdG1sOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgaWQgPSBzZWxmLl9pZCwgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeCwgaHVlSHRtbDtcblx0XHRcdHZhciBzdG9wcyA9ICcjZmYwMDAwLCNmZjAwODAsI2ZmMDBmZiwjODAwMGZmLCMwMDAwZmYsIzAwODBmZiwjMDBmZmZmLCMwMGZmODAsIzAwZmYwMCwjODBmZjAwLCNmZmZmMDAsI2ZmODAwMCwjZmYwMDAwJztcblxuXHRcdFx0ZnVuY3Rpb24gZ2V0T2xkSWVGYWxsYmFja0h0bWwoKSB7XG5cdFx0XHRcdHZhciBpLCBsLCBodG1sID0gJycsIGdyYWRpZW50UHJlZml4LCBzdG9wc0xpc3Q7XG5cblx0XHRcdFx0Z3JhZGllbnRQcmVmaXggPSAnZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChHcmFkaWVudFR5cGU9MCxzdGFydENvbG9yc3RyPSc7XG5cdFx0XHRcdHN0b3BzTGlzdCA9IHN0b3BzLnNwbGl0KCcsJyk7XG5cdFx0XHRcdGZvciAoaSA9IDAsIGwgPSBzdG9wc0xpc3QubGVuZ3RoIC0gMTsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdGh0bWwgKz0gKFxuXHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCInICsgcHJlZml4ICsgJ2NvbG9ycGlja2VyLWgtY2h1bmtcIiBzdHlsZT1cIicgK1xuXHRcdFx0XHRcdFx0XHQnaGVpZ2h0OicgKyAoMTAwIC8gbCkgKyAnJTsnICtcblx0XHRcdFx0XHRcdFx0Z3JhZGllbnRQcmVmaXggKyBzdG9wc0xpc3RbaV0gKyAnLGVuZENvbG9yc3RyPScgKyBzdG9wc0xpc3RbaSArIDFdICsgJyk7JyArXG5cdFx0XHRcdFx0XHRcdCctbXMtJyArIGdyYWRpZW50UHJlZml4ICsgc3RvcHNMaXN0W2ldICsgJyxlbmRDb2xvcnN0cj0nICsgc3RvcHNMaXN0W2kgKyAxXSArICcpJyArXG5cdFx0XHRcdFx0XHQnXCI+PC9kaXY+J1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gaHRtbDtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGdyYWRpZW50Q3NzVGV4dCA9IChcblx0XHRcdFx0J2JhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCcgKyBzdG9wcyArICcpOycgK1xuXHRcdFx0XHQnYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwnICsgc3RvcHMgKyAnKTsnXG5cdFx0XHQpO1xuXG5cdFx0XHRodWVIdG1sID0gKFxuXHRcdFx0XHQnPGRpdiBpZD1cIicgKyBpZCArICctaFwiIGNsYXNzPVwiJyArIHByZWZpeCArICdjb2xvcnBpY2tlci1oXCIgc3R5bGU9XCInICsgZ3JhZGllbnRDc3NUZXh0ICsgJ1wiPicgK1xuXHRcdFx0XHRcdGdldE9sZEllRmFsbGJhY2tIdG1sKCkgK1xuXHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJy1ocFwiIGNsYXNzPVwiJyArIHByZWZpeCArICdjb2xvcnBpY2tlci1oLW1hcmtlclwiPjwvZGl2PicgK1xuXHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0JzxkaXYgaWQ9XCInICsgaWQgKyAnXCIgY2xhc3M9XCInICsgc2VsZi5jbGFzc2VzICsgJ1wiPicgK1xuXHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJy1zdlwiIGNsYXNzPVwiJyArIHByZWZpeCArICdjb2xvcnBpY2tlci1zdlwiPicgK1xuXHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCInICsgcHJlZml4ICsgJ2NvbG9ycGlja2VyLW92ZXJsYXkxXCI+JyArXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiJyArIHByZWZpeCArICdjb2xvcnBpY2tlci1vdmVybGF5MlwiPicgK1xuXHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJy1zdnBcIiBjbGFzcz1cIicgKyBwcmVmaXggKyAnY29sb3JwaWNrZXItc2VsZWN0b3IxXCI+JyArXG5cdFx0XHRcdFx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIicgKyBwcmVmaXggKyAnY29sb3JwaWNrZXItc2VsZWN0b3IyXCI+PC9kaXY+JyArXG5cdFx0XHRcdFx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0XHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0XHRcdGh1ZUh0bWwgK1xuXHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9QYXRoLmpzXG5cbi8qKlxuICogUGF0aC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcGF0aCBjb250cm9sLlxuICpcbiAqIEAteC1sZXNzIFBhdGgubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuUGF0aFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5XaWRnZXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9QYXRoXCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiXG5dLCBmdW5jdGlvbihXaWRnZXQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIFdpZGdldC5leHRlbmQoe1xuXHRcdC8qKlxuXHRcdCAqIENvbnN0cnVjdHMgYSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKiBAc2V0dGluZyB7U3RyaW5nfSBkZWxpbWl0ZXIgRGVsaW1pdGVyIHRvIGRpc3BsYXkgYmV0d2VlbiByb3cgaW4gcGF0aC5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRpZiAoIXNldHRpbmdzLmRlbGltaXRlcikge1xuXHRcdFx0XHRzZXR0aW5ncy5kZWxpbWl0ZXIgPSAnXFx1MDBCQic7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuX3N1cGVyKHNldHRpbmdzKTtcblx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ3BhdGgnKTtcblx0XHRcdHNlbGYuY2FuRm9jdXMgPSB0cnVlO1xuXG5cdFx0XHRzZWxmLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dmFyIGluZGV4LCB0YXJnZXQgPSBlLnRhcmdldDtcblxuXHRcdFx0XHRpZiAoKGluZGV4ID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpKSkge1xuXHRcdFx0XHRcdHNlbGYuZmlyZSgnc2VsZWN0Jywge3ZhbHVlOiBzZWxmLnJvdygpW2luZGV4XSwgaW5kZXg6IGluZGV4fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLnJvdyhzZWxmLnNldHRpbmdzLnJvdyk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEZvY3VzZXMgdGhlIGN1cnJlbnQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgZm9jdXNcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbnRyb2x9IEN1cnJlbnQgY29udHJvbCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRmb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuZ2V0RWwoKS5maXJzdENoaWxkLmZvY3VzKCk7XG5cblx0XHRcdHJldHVybiBzZWxmO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzL2dldHMgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhdGguXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJvd1xuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHJvdyBBcnJheSB3aXRoIHJvdyBuYW1lIGlzIHJlbmRlcmVkIHRvIHBhdGguXG5cdFx0ICovXG5cdFx0cm93OiBmdW5jdGlvbihyb3cpIHtcblx0XHRcdGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5nZXQoJ3JvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnN0YXRlLnNldCgncm93Jywgcm93KTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIj4nICtcblx0XHRcdFx0XHRzZWxmLl9nZXREYXRhUGF0aEh0bWwoc2VsZi5zdGF0ZS5nZXQoJ3JvdycpKSArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5zdGF0ZS5vbignY2hhbmdlOnJvdycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0c2VsZi5pbm5lckh0bWwoc2VsZi5fZ2V0RGF0YVBhdGhIdG1sKGUudmFsdWUpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0X2dldERhdGFQYXRoSHRtbDogZnVuY3Rpb24oZGF0YSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBwYXJ0cyA9IGRhdGEgfHwgW10sIGksIGwsIGh0bWwgPSAnJywgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeDtcblxuXHRcdFx0Zm9yIChpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRodG1sICs9IChcblx0XHRcdFx0XHQoaSA+IDAgPyAnPGRpdiBjbGFzcz1cIicgKyBwcmVmaXggKyAnZGl2aWRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiAnICsgc2VsZi5zZXR0aW5ncy5kZWxpbWl0ZXIgKyAnIDwvZGl2PicgOiAnJykgK1xuXHRcdFx0XHRcdCc8ZGl2IHJvbGU9XCJidXR0b25cIiBjbGFzcz1cIicgKyBwcmVmaXggKyAncGF0aC1pdGVtJyArIChpID09IGwgLSAxID8gJyAnICsgcHJlZml4ICsgJ2xhc3QnIDogJycpICsgJ1wiIGRhdGEtaW5kZXg9XCInICtcblx0XHRcdFx0XHRpICsgJ1wiIHRhYmluZGV4PVwiLTFcIiBpZD1cIicgKyBzZWxmLl9pZCArICctJyArIGkgKyAnXCIgYXJpYS1sZXZlbD1cIicgKyAoaSArIDEpICsgJ1wiPicgKyBwYXJ0c1tpXS5uYW1lICsgJzwvZGl2Pidcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFodG1sKSB7XG5cdFx0XHRcdGh0bWwgPSAnPGRpdiBjbGFzcz1cIicgKyBwcmVmaXggKyAncGF0aC1pdGVtXCI+XFx1MDBhMDwvZGl2Pic7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBodG1sO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0VsZW1lbnRQYXRoLmpzXG5cbi8qKlxuICogRWxlbWVudFBhdGguanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNvbnRyb2wgY3JlYXRlcyBhbiBwYXRoIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb25zIHBhcmVudCBlbGVtZW50cyBpbiBUaW55TUNFLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkVsZW1lbnRQYXRoXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLlBhdGhcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9FbGVtZW50UGF0aFwiLCBbXG5cdFwidGlueW1jZS91aS9QYXRoXCJcbl0sIGZ1bmN0aW9uKFBhdGgpIHtcblx0cmV0dXJuIFBhdGguZXh0ZW5kKHtcblx0XHQvKipcblx0XHQgKiBQb3N0IHJlbmRlciBtZXRob2QuIENhbGxlZCBhZnRlciB0aGUgY29udHJvbCBoYXMgYmVlbiByZW5kZXJlZCB0byB0aGUgdGFyZ2V0LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwb3N0UmVuZGVyXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5FbGVtZW50UGF0aH0gQ3VycmVudCBjb21ib2JveCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgZWRpdG9yID0gc2VsZi5zZXR0aW5ncy5lZGl0b3I7XG5cblx0XHRcdGZ1bmN0aW9uIGlzSGlkZGVuKGVsbSkge1xuXHRcdFx0XHRpZiAoZWxtLm5vZGVUeXBlID09PSAxKSB7XG5cdFx0XHRcdFx0aWYgKGVsbS5ub2RlTmFtZSA9PSBcIkJSXCIgfHwgISFlbG0uZ2V0QXR0cmlidXRlKCdkYXRhLW1jZS1ib2d1cycpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoZWxtLmdldEF0dHJpYnV0ZSgnZGF0YS1tY2UtdHlwZScpID09PSAnYm9va21hcmsnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlZGl0b3Iuc2V0dGluZ3MuZWxlbWVudHBhdGggIT09IGZhbHNlKSB7XG5cdFx0XHRcdHNlbGYub24oJ3NlbGVjdCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRlZGl0b3IuZm9jdXMoKTtcblx0XHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLnJvdygpW2UuaW5kZXhdLmVsZW1lbnQpO1xuXHRcdFx0XHRcdGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRlZGl0b3Iub24oJ25vZGVDaGFuZ2UnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIG91dFBhcmVudHMgPSBbXSwgcGFyZW50cyA9IGUucGFyZW50cywgaSA9IHBhcmVudHMubGVuZ3RoO1xuXG5cdFx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdFx0aWYgKHBhcmVudHNbaV0ubm9kZVR5cGUgPT0gMSAmJiAhaXNIaWRkZW4ocGFyZW50c1tpXSkpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFyZ3MgPSBlZGl0b3IuZmlyZSgnUmVzb2x2ZU5hbWUnLCB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogcGFyZW50c1tpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldDogcGFyZW50c1tpXVxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIWFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRvdXRQYXJlbnRzLnB1c2goe25hbWU6IGFyZ3MubmFtZSwgZWxlbWVudDogcGFyZW50c1tpXX0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGFyZ3MuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c2VsZi5yb3cob3V0UGFyZW50cyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9Gb3JtSXRlbS5qc1xuXG4vKipcbiAqIEZvcm1JdGVtLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhIGNvbnRhaW5lciBjcmVhdGVkIGJ5IHRoZSBmb3JtIGVsZW1lbnQgd2l0aFxuICogYSBsYWJlbCBhbmQgY29udHJvbCBpdGVtLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkZvcm1JdGVtXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkNvbnRhaW5lclxuICogQHNldHRpbmcge1N0cmluZ30gbGFiZWwgTGFiZWwgdG8gZGlzcGxheSBmb3IgdGhlIGZvcm0gaXRlbS5cbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9Gb3JtSXRlbVwiLCBbXG5cdFwidGlueW1jZS91aS9Db250YWluZXJcIlxuXSwgZnVuY3Rpb24oQ29udGFpbmVyKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBDb250YWluZXIuZXh0ZW5kKHtcblx0XHREZWZhdWx0czoge1xuXHRcdFx0bGF5b3V0OiAnZmxleCcsXG5cdFx0XHRhbGlnbjogJ2NlbnRlcicsXG5cdFx0XHRkZWZhdWx0czoge1xuXHRcdFx0XHRmbGV4OiAxXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGxheW91dCA9IHNlbGYuX2xheW91dCwgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeDtcblxuXHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnZm9ybWl0ZW0nKTtcblx0XHRcdGxheW91dC5wcmVSZW5kZXIoc2VsZik7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIiBoaWRlZm9jdXM9XCIxXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdChzZWxmLnNldHRpbmdzLnRpdGxlID8gKCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJy10aXRsZVwiIGNsYXNzPVwiJyArIHByZWZpeCArICd0aXRsZVwiPicgK1xuXHRcdFx0XHRcdFx0c2VsZi5zZXR0aW5ncy50aXRsZSArICc8L2Rpdj4nKSA6ICcnKSArXG5cdFx0XHRcdFx0JzxkaXYgaWQ9XCInICsgc2VsZi5faWQgKyAnLWJvZHlcIiBjbGFzcz1cIicgKyBzZWxmLmJvZHlDbGFzc2VzICsgJ1wiPicgK1xuXHRcdFx0XHRcdFx0KHNlbGYuc2V0dGluZ3MuaHRtbCB8fCAnJykgKyBsYXlvdXQucmVuZGVySHRtbChzZWxmKSArXG5cdFx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9Gb3JtLmpzXG5cbi8qKlxuICogRm9ybS5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhIGZvcm0gY29udGFpbmVyLiBBIGZvcm0gY29udGFpbmVyIGhhcyB0aGUgYWJpbGl0eVxuICogdG8gYXV0b21hdGljYWxseSB3cmFwIGl0ZW1zIGluIHRpbnltY2UudWkuRm9ybUl0ZW0gaW5zdGFuY2VzLlxuICpcbiAqIEVhY2ggRm9ybUl0ZW0gaW5zdGFuY2UgaXMgYSBjb250YWluZXIgZm9yIHRoZSBsYWJlbCBhbmQgdGhlIGl0ZW0uXG4gKlxuICogQGV4YW1wbGVcbiAqIHRpbnltY2UudWkuRmFjdG9yeS5jcmVhdGUoe1xuICogICAgIHR5cGU6ICdmb3JtJyxcbiAqICAgICBpdGVtczogW1xuICogICAgICAgICB7dHlwZTogJ3RleHRib3gnLCBsYWJlbDogJ015IHRleHQgYm94J31cbiAqICAgICBdXG4gKiB9KS5yZW5kZXJUbyhkb2N1bWVudC5ib2R5KTtcbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Gb3JtXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkNvbnRhaW5lclxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0Zvcm1cIiwgW1xuXHRcInRpbnltY2UvdWkvQ29udGFpbmVyXCIsXG5cdFwidGlueW1jZS91aS9Gb3JtSXRlbVwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihDb250YWluZXIsIEZvcm1JdGVtLCBUb29scykge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gQ29udGFpbmVyLmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGNvbnRhaW5lckNsczogJ2Zvcm0nLFxuXHRcdFx0bGF5b3V0OiAnZmxleCcsXG5cdFx0XHRkaXJlY3Rpb246ICdjb2x1bW4nLFxuXHRcdFx0YWxpZ246ICdzdHJldGNoJyxcblx0XHRcdGZsZXg6IDEsXG5cdFx0XHRwYWRkaW5nOiAyMCxcblx0XHRcdGxhYmVsR2FwOiAzMCxcblx0XHRcdHNwYWNpbmc6IDEwLFxuXHRcdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHRcdHN1Ym1pdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUaGlzIG1ldGhvZCBnZXRzIGludm9rZWQgYmVmb3JlIHRoZSBjb250cm9sIGlzIHJlbmRlcmVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwcmVSZW5kZXJcblx0XHQgKi9cblx0XHRwcmVSZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBpdGVtcyA9IHNlbGYuaXRlbXMoKTtcblxuXHRcdFx0aWYgKCFzZWxmLnNldHRpbmdzLmZvcm1JdGVtRGVmYXVsdHMpIHtcblx0XHRcdFx0c2VsZi5zZXR0aW5ncy5mb3JtSXRlbURlZmF1bHRzID0ge1xuXHRcdFx0XHRcdGxheW91dDogJ2ZsZXgnLFxuXHRcdFx0XHRcdGF1dG9SZXNpemU6IFwib3ZlcmZsb3dcIixcblx0XHRcdFx0XHRkZWZhdWx0czoge2ZsZXg6IDF9XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdyYXAgYW55IGxhYmVsZWQgaXRlbXMgaW4gRm9ybUl0ZW1zXG5cdFx0XHRpdGVtcy5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0dmFyIGZvcm1JdGVtLCBsYWJlbCA9IGN0cmwuc2V0dGluZ3MubGFiZWw7XG5cblx0XHRcdFx0aWYgKGxhYmVsKSB7XG5cdFx0XHRcdFx0Zm9ybUl0ZW0gPSBuZXcgRm9ybUl0ZW0oVG9vbHMuZXh0ZW5kKHtcblx0XHRcdFx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdsYWJlbCcsXG5cdFx0XHRcdFx0XHRcdGlkOiBjdHJsLl9pZCArICctbCcsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IGxhYmVsLFxuXHRcdFx0XHRcdFx0XHRmbGV4OiAwLFxuXHRcdFx0XHRcdFx0XHRmb3JJZDogY3RybC5faWQsXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiBjdHJsLmRpc2FibGVkKClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCBzZWxmLnNldHRpbmdzLmZvcm1JdGVtRGVmYXVsdHMpKTtcblxuXHRcdFx0XHRcdGZvcm1JdGVtLnR5cGUgPSAnZm9ybWl0ZW0nO1xuXHRcdFx0XHRcdGN0cmwuYXJpYSgnbGFiZWxsZWRieScsIGN0cmwuX2lkICsgJy1sJyk7XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIGN0cmwuc2V0dGluZ3MuZmxleCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHRjdHJsLnNldHRpbmdzLmZsZXggPSAxO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNlbGYucmVwbGFjZShjdHJsLCBmb3JtSXRlbSk7XG5cdFx0XHRcdFx0Zm9ybUl0ZW0uYWRkKGN0cmwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRmlyZXMgYSBzdWJtaXQgZXZlbnQgd2l0aCB0aGUgc2VyaWFsaXplZCBmb3JtLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzdWJtaXRcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9IEV2ZW50IGFyZ3VtZW50cyBvYmplY3QuXG5cdFx0ICovXG5cdFx0c3VibWl0OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmZpcmUoJ3N1Ym1pdCcsIHtkYXRhOiB0aGlzLnRvSlNPTigpfSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFBvc3QgcmVuZGVyIG1ldGhvZC4gQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIHJlbmRlcmVkIHRvIHRoZSB0YXJnZXQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBvc3RSZW5kZXJcblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLkNvbWJvQm94fSBDdXJyZW50IGNvbWJvYm94IGluc3RhbmNlLlxuXHRcdCAqL1xuXHRcdHBvc3RSZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLl9zdXBlcigpO1xuXHRcdFx0c2VsZi5mcm9tSlNPTihzZWxmLnNldHRpbmdzLmRhdGEpO1xuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0ZnVuY3Rpb24gcmVjYWxjTGFiZWxzKCkge1xuXHRcdFx0XHR2YXIgbWF4TGFiZWxXaWR0aCA9IDAsIGxhYmVscyA9IFtdLCBpLCBsYWJlbEdhcCwgaXRlbXM7XG5cblx0XHRcdFx0aWYgKHNlbGYuc2V0dGluZ3MubGFiZWxHYXBDYWxjID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChzZWxmLnNldHRpbmdzLmxhYmVsR2FwQ2FsYyA9PSBcImNoaWxkcmVuXCIpIHtcblx0XHRcdFx0XHRpdGVtcyA9IHNlbGYuZmluZCgnZm9ybWl0ZW0nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpdGVtcyA9IHNlbGYuaXRlbXMoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW1zLmZpbHRlcignZm9ybWl0ZW0nKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0XHR2YXIgbGFiZWxDdHJsID0gaXRlbS5pdGVtcygpWzBdLCBsYWJlbFdpZHRoID0gbGFiZWxDdHJsLmdldEVsKCkuY2xpZW50V2lkdGg7XG5cblx0XHRcdFx0XHRtYXhMYWJlbFdpZHRoID0gbGFiZWxXaWR0aCA+IG1heExhYmVsV2lkdGggPyBsYWJlbFdpZHRoIDogbWF4TGFiZWxXaWR0aDtcblx0XHRcdFx0XHRsYWJlbHMucHVzaChsYWJlbEN0cmwpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsYWJlbEdhcCA9IHNlbGYuc2V0dGluZ3MubGFiZWxHYXAgfHwgMDtcblxuXHRcdFx0XHRpID0gbGFiZWxzLmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdGxhYmVsc1tpXS5zZXR0aW5ncy5taW5XaWR0aCA9IG1heExhYmVsV2lkdGggKyBsYWJlbEdhcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLm9uKCdzaG93JywgcmVjYWxjTGFiZWxzKTtcblx0XHRcdHJlY2FsY0xhYmVscygpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0ZpZWxkU2V0LmpzXG5cbi8qKlxuICogRmllbGRTZXQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNyZWF0ZXMgZmllbGRzZXQgY29udGFpbmVycy5cbiAqXG4gKiBALXgtbGVzcyBGaWVsZFNldC5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5GaWVsZFNldFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5Gb3JtXG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvRmllbGRTZXRcIiwgW1xuXHRcInRpbnltY2UvdWkvRm9ybVwiXG5dLCBmdW5jdGlvbihGb3JtKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBGb3JtLmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGNvbnRhaW5lckNsczogJ2ZpZWxkc2V0Jyxcblx0XHRcdGxheW91dDogJ2ZsZXgnLFxuXHRcdFx0ZGlyZWN0aW9uOiAnY29sdW1uJyxcblx0XHRcdGFsaWduOiAnc3RyZXRjaCcsXG5cdFx0XHRmbGV4OiAxLFxuXHRcdFx0cGFkZGluZzogXCIyNSAxNSA1IDE1XCIsXG5cdFx0XHRsYWJlbEdhcDogMzAsXG5cdFx0XHRzcGFjaW5nOiAxMCxcblx0XHRcdGJvcmRlcjogMVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZW5kZXJzIHRoZSBjb250cm9sIGFzIGEgSFRNTCBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbmRlckh0bWxcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sLlxuXHRcdCAqL1xuXHRcdHJlbmRlckh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBsYXlvdXQgPSBzZWxmLl9sYXlvdXQsIHByZWZpeCA9IHNlbGYuY2xhc3NQcmVmaXg7XG5cblx0XHRcdHNlbGYucHJlUmVuZGVyKCk7XG5cdFx0XHRsYXlvdXQucHJlUmVuZGVyKHNlbGYpO1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPGZpZWxkc2V0IGlkPVwiJyArIHNlbGYuX2lkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIiBoaWRlZm9jdXM9XCIxXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdChzZWxmLnNldHRpbmdzLnRpdGxlID8gKCc8bGVnZW5kIGlkPVwiJyArIHNlbGYuX2lkICsgJy10aXRsZVwiIGNsYXNzPVwiJyArIHByZWZpeCArICdmaWVsZHNldC10aXRsZVwiPicgK1xuXHRcdFx0XHRcdFx0c2VsZi5zZXR0aW5ncy50aXRsZSArICc8L2xlZ2VuZD4nKSA6ICcnKSArXG5cdFx0XHRcdFx0JzxkaXYgaWQ9XCInICsgc2VsZi5faWQgKyAnLWJvZHlcIiBjbGFzcz1cIicgKyBzZWxmLmJvZHlDbGFzc2VzICsgJ1wiPicgK1xuXHRcdFx0XHRcdFx0KHNlbGYuc2V0dGluZ3MuaHRtbCB8fCAnJykgKyBsYXlvdXQucmVuZGVySHRtbChzZWxmKSArXG5cdFx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0XHQnPC9maWVsZHNldD4nXG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL2NvbnRlbnQvTGlua1RhcmdldHMuanNcblxuLyoqXG4gKiBMaW5rVGFyZ2V0cy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE2IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGlzIGVuYWJsZXMgeW91IHRvIGdldCBhbnl0aGluZyB0aGF0IHlvdSBjYW4gbGluayB0byBpbiBhIGVsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmNvbnRlbnQuTGlua1RhcmdldHNcbiAqL1xuZGVmaW5lKCd0aW55bWNlL2NvbnRlbnQvTGlua1RhcmdldHMnLCBbXG5cdCd0aW55bWNlL2RvbS9ET01VdGlscycsXG5cdCd0aW55bWNlL3V0aWwvRnVuJyxcblx0J3RpbnltY2UvdXRpbC9BcnInLFxuXHQndGlueW1jZS91dGlsL1V1aWQnLFxuXHQndGlueW1jZS91dGlsL1Rvb2xzJyxcblx0J3RpbnltY2UvZG9tL05vZGVUeXBlJ1xuXSwgZnVuY3Rpb24oXG5cdERPTVV0aWxzLFxuXHRGdW4sXG5cdEFycixcblx0VXVpZCxcblx0VG9vbHMsXG5cdE5vZGVUeXBlXG4pIHtcblx0dmFyIHRyaW0gPSBUb29scy50cmltO1xuXG5cdHZhciBjcmVhdGUgPSBmdW5jdGlvbiAodHlwZSwgdGl0bGUsIHVybCwgbGV2ZWwsIGF0dGFjaCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0dGl0bGU6IHRpdGxlLFxuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRhdHRhY2g6IGF0dGFjaFxuXHRcdH07XG5cdH07XG5cblx0dmFyIGlzQ2hpbGRPZkNvbnRlbnRFZGl0YWJsZVRydWUgPSBmdW5jdGlvbiAobm9kZSkge1xuXHRcdHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcblx0XHRcdHZhciB2YWx1ZSA9IG5vZGUuY29udGVudEVkaXRhYmxlO1xuXHRcdFx0aWYgKHZhbHVlICYmIHZhbHVlICE9PSAnaW5oZXJpdCcpIHtcblx0XHRcdFx0cmV0dXJuIE5vZGVUeXBlLmlzQ29udGVudEVkaXRhYmxlVHJ1ZShub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0dmFyIHNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3Rvciwgcm9vdCkge1xuXHRcdHJldHVybiBET01VdGlscy5ET00uc2VsZWN0KHNlbGVjdG9yLCByb290KTtcblx0fTtcblxuXHR2YXIgZ2V0RWxlbWVudFRleHQgPSBmdW5jdGlvbiAoZWxtKSB7XG5cdFx0cmV0dXJuIGVsbS5pbm5lclRleHQgfHwgZWxtLnRleHRDb250ZW50O1xuXHR9O1xuXG5cdHZhciBnZXRPckdlbmVyYXRlSWQgPSBmdW5jdGlvbiAoZWxtKSB7XG5cdFx0cmV0dXJuIGVsbS5pZCA/IGVsbS5pZCA6IFV1aWQudXVpZCgnaCcpO1xuXHR9O1xuXG5cdHZhciBpc0FuY2hvciA9IGZ1bmN0aW9uIChlbG0pIHtcblx0XHRyZXR1cm4gZWxtICYmIGVsbS5ub2RlTmFtZSA9PT0gJ0EnICYmIChlbG0uaWQgfHwgZWxtLm5hbWUpO1xuXHR9O1xuXG5cdHZhciBpc1ZhbGlkQW5jaG9yID0gZnVuY3Rpb24gKGVsbSkge1xuXHRcdHJldHVybiBpc0FuY2hvcihlbG0pICYmIGlzRWRpdGFibGUoZWxtKTtcblx0fTtcblxuXHR2YXIgaXNIZWFkZXIgPSBmdW5jdGlvbiAoZWxtKSB7XG5cdFx0cmV0dXJuIGVsbSAmJiAvXihIWzEtNl0pJC8udGVzdChlbG0ubm9kZU5hbWUpO1xuXHR9O1xuXG5cdHZhciBpc0VkaXRhYmxlID0gZnVuY3Rpb24gKGVsbSkge1xuXHRcdHJldHVybiBpc0NoaWxkT2ZDb250ZW50RWRpdGFibGVUcnVlKGVsbSkgJiYgIU5vZGVUeXBlLmlzQ29udGVudEVkaXRhYmxlRmFsc2UoZWxtKTtcblx0fTtcblxuXHR2YXIgaXNWYWxpZEhlYWRlciA9IGZ1bmN0aW9uIChlbG0pIHtcblx0XHRyZXR1cm4gaXNIZWFkZXIoZWxtKSAmJiBpc0VkaXRhYmxlKGVsbSk7XG5cdH07XG5cblx0dmFyIGdldExldmVsID0gZnVuY3Rpb24gKGVsbSkge1xuXHRcdHJldHVybiBpc0hlYWRlcihlbG0pID8gcGFyc2VJbnQoZWxtLm5vZGVOYW1lLnN1YnN0cigxKSwgMTApIDogMDtcblx0fTtcblxuXHR2YXIgaGVhZGVyVGFyZ2V0ID0gZnVuY3Rpb24gKGVsbSkge1xuXHRcdHZhciBoZWFkZXJJZCA9IGdldE9yR2VuZXJhdGVJZChlbG0pO1xuXG5cdFx0dmFyIGF0dGFjaCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGVsbS5pZCA9IGhlYWRlcklkO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gY3JlYXRlKCdoZWFkZXInLCBnZXRFbGVtZW50VGV4dChlbG0pLCAnIycgKyBoZWFkZXJJZCwgZ2V0TGV2ZWwoZWxtKSwgYXR0YWNoKTtcblx0fTtcblxuXHR2YXIgYW5jaG9yVGFyZ2V0ID0gZnVuY3Rpb24gKGVsbSkge1xuXHRcdHZhciBhbmNob3JJZCA9IGVsbS5pZCB8fCBlbG0ubmFtZTtcblx0XHR2YXIgYW5jaG9yVGV4dCA9IGdldEVsZW1lbnRUZXh0KGVsbSk7XG5cblx0XHRyZXR1cm4gY3JlYXRlKCdhbmNob3InLCBhbmNob3JUZXh0ID8gYW5jaG9yVGV4dCA6ICcjJyArIGFuY2hvcklkLCAnIycgKyBhbmNob3JJZCwgMCwgRnVuLm5vb3ApO1xuXHR9O1xuXG5cdHZhciBnZXRIZWFkZXJUYXJnZXRzID0gZnVuY3Rpb24gKGVsbXMpIHtcblx0XHRyZXR1cm4gQXJyLm1hcChBcnIuZmlsdGVyKGVsbXMsIGlzVmFsaWRIZWFkZXIpLCBoZWFkZXJUYXJnZXQpO1xuXHR9O1xuXG5cdHZhciBnZXRBbmNob3JUYXJnZXRzID0gZnVuY3Rpb24gKGVsbXMpIHtcblx0XHRyZXR1cm4gQXJyLm1hcChBcnIuZmlsdGVyKGVsbXMsIGlzVmFsaWRBbmNob3IpLCBhbmNob3JUYXJnZXQpO1xuXHR9O1xuXG5cdHZhciBnZXRUYXJnZXRFbGVtZW50cyA9IGZ1bmN0aW9uIChlbG0pIHtcblx0XHR2YXIgZWxtcyA9IHNlbGVjdCgnaDEsaDIsaDMsaDQsaDUsaDYsYTpub3QoW2hyZWZdKScsIGVsbSk7XG5cdFx0cmV0dXJuIGVsbXM7XG5cdH07XG5cblx0dmFyIGhhc1RpdGxlID0gZnVuY3Rpb24gKHRhcmdldCkge1xuXHRcdHJldHVybiB0cmltKHRhcmdldC50aXRsZSkubGVuZ3RoID4gMDtcblx0fTtcblxuXHR2YXIgZmluZCA9IGZ1bmN0aW9uIChlbG0pIHtcblx0XHR2YXIgZWxtcyA9IGdldFRhcmdldEVsZW1lbnRzKGVsbSk7XG5cdFx0cmV0dXJuIEFyci5maWx0ZXIoZ2V0SGVhZGVyVGFyZ2V0cyhlbG1zKS5jb25jYXQoZ2V0QW5jaG9yVGFyZ2V0cyhlbG1zKSksIGhhc1RpdGxlKTtcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGZpbmQ6IGZpbmRcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvRmlsZVBpY2tlci5qc1xuXG4vKipcbiAqIEZpbGVQaWNrZXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLypnbG9iYWwgdGlueW1jZTp0cnVlICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBjcmVhdGVzIGEgZmlsZSBwaWNrZXIgY29udHJvbC5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51aS5GaWxlUGlja2VyXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkNvbWJvQm94XG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvRmlsZVBpY2tlclwiLCBbXG5cdFwidGlueW1jZS91aS9Db21ib0JveFwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL3V0aWwvRnVuXCIsXG5cdFwidGlueW1jZS91dGlsL1ZLXCIsXG5cdFwidGlueW1jZS9jb250ZW50L0xpbmtUYXJnZXRzXCJcbl0sIGZ1bmN0aW9uKENvbWJvQm94LCBUb29scywgQXJyLCBGdW4sIFZLLCBMaW5rVGFyZ2V0cykge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgaGlzdG9yeSA9IHt9O1xuXHR2YXIgSElTVE9SWV9MRU5HVEggPSA1O1xuXG5cdHZhciB0b01lbnVJdGVtID0gZnVuY3Rpb24gKHRhcmdldCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogdGFyZ2V0LnRpdGxlLFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0dGl0bGU6IHtyYXc6IHRhcmdldC50aXRsZX0sXG5cdFx0XHRcdHVybDogdGFyZ2V0LnVybCxcblx0XHRcdFx0YXR0YWNoOiB0YXJnZXQuYXR0YWNoXG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHR2YXIgdG9NZW51SXRlbXMgPSBmdW5jdGlvbiAodGFyZ2V0cykge1xuXHRcdHJldHVybiBUb29scy5tYXAodGFyZ2V0cywgdG9NZW51SXRlbSk7XG5cdH07XG5cblx0dmFyIHN0YXRpY01lbnVJdGVtID0gZnVuY3Rpb24gKHRpdGxlLCB1cmwpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IHRpdGxlLFxuXHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0dGl0bGU6IHRpdGxlLFxuXHRcdFx0XHR1cmw6IHVybCxcblx0XHRcdFx0YXR0YWNoOiBGdW4ubm9vcFxuXHRcdFx0fVxuXHRcdH07XG5cdH07XG5cblx0dmFyIGlzVW5pcXVlVXJsID0gZnVuY3Rpb24gKHVybCwgdGFyZ2V0cykge1xuXHRcdHZhciBmb3VuZFRhcmdldCA9IEFyci5maW5kKHRhcmdldHMsIGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQudXJsID09PSB1cmw7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gIWZvdW5kVGFyZ2V0O1xuXHR9O1xuXG5cdHZhciBnZXRTZXR0aW5nID0gZnVuY3Rpb24gKGVkaXRvclNldHRpbmdzLCBuYW1lLCBkZWZhdWx0VmFsdWUpIHtcblx0XHR2YXIgdmFsdWUgPSBuYW1lIGluIGVkaXRvclNldHRpbmdzID8gZWRpdG9yU2V0dGluZ3NbbmFtZV0gOiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlID09PSBmYWxzZSA/IG51bGwgOiB2YWx1ZTtcblx0fTtcblxuXHR2YXIgY3JlYXRlTWVudUl0ZW1zID0gZnVuY3Rpb24gKHRlcm0sIHRhcmdldHMsIGZpbGVUeXBlLCBlZGl0b3JTZXR0aW5ncykge1xuXHRcdHZhciBzZXBhcmF0b3IgPSB7dGl0bGU6ICctJ307XG5cblx0XHR2YXIgZnJvbUhpc3RvcnlNZW51SXRlbXMgPSBmdW5jdGlvbiAoaGlzdG9yeSkge1xuXHRcdFx0dmFyIHVuaXF1ZUhpc3RvcnkgPSBBcnIuZmlsdGVyKGhpc3RvcnlbZmlsZVR5cGVdLCBmdW5jdGlvbiAodXJsKSB7XG5cdFx0XHRcdHJldHVybiBpc1VuaXF1ZVVybCh1cmwsIHRhcmdldHMpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBUb29scy5tYXAodW5pcXVlSGlzdG9yeSwgZnVuY3Rpb24gKHVybCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRpdGxlOiB1cmwsXG5cdFx0XHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0XHRcdHRpdGxlOiB1cmwsXG5cdFx0XHRcdFx0XHR1cmw6IHVybCxcblx0XHRcdFx0XHRcdGF0dGFjaDogRnVuLm5vb3Bcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0dmFyIGZyb21NZW51SXRlbXMgPSBmdW5jdGlvbiAodHlwZSkge1xuXHRcdFx0dmFyIGZpbHRlcmVkVGFyZ2V0cyA9IEFyci5maWx0ZXIodGFyZ2V0cywgZnVuY3Rpb24gKHRhcmdldCkge1xuXHRcdFx0XHRyZXR1cm4gdGFyZ2V0LnR5cGUgPT0gdHlwZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdG9NZW51SXRlbXMoZmlsdGVyZWRUYXJnZXRzKTtcblx0XHR9O1xuXG5cdFx0dmFyIGFuY2hvck1lbnVJdGVtcyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBhbmNob3JNZW51SXRlbXMgPSBmcm9tTWVudUl0ZW1zKCdhbmNob3InKTtcblx0XHRcdHZhciB0b3BBbmNob3IgPSBnZXRTZXR0aW5nKGVkaXRvclNldHRpbmdzLCAnYW5jaG9yX3RvcCcsICcjdG9wJyk7XG5cdFx0XHR2YXIgYm90dG9tQWNob3IgPSBnZXRTZXR0aW5nKGVkaXRvclNldHRpbmdzLCAnYW5jaG9yX2JvdHRvbScsICcjYm90dG9tJyk7XG5cblx0XHRcdGlmICh0b3BBbmNob3IgIT09IG51bGwpIHtcblx0XHRcdFx0YW5jaG9yTWVudUl0ZW1zLnVuc2hpZnQoc3RhdGljTWVudUl0ZW0oJzx0b3A+JywgdG9wQW5jaG9yKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChib3R0b21BY2hvciAhPT0gbnVsbCkge1xuXHRcdFx0XHRhbmNob3JNZW51SXRlbXMucHVzaChzdGF0aWNNZW51SXRlbSgnPGJvdHRvbT4nLCBib3R0b21BY2hvcikpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYW5jaG9yTWVudUl0ZW1zO1xuXHRcdH07XG5cblx0XHR2YXIgam9pbiA9IGZ1bmN0aW9uIChpdGVtcykge1xuXHRcdFx0cmV0dXJuIEFyci5yZWR1Y2UoaXRlbXMsIGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHRcdHZhciBib3RoRW1wdHkgPSBhLmxlbmd0aCA9PT0gMCB8fCBiLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0cmV0dXJuIGJvdGhFbXB0eSA/IGEuY29uY2F0KGIpIDogYS5jb25jYXQoc2VwYXJhdG9yLCBiKTtcblx0XHRcdH0sIFtdKTtcblx0XHR9O1xuXG5cdFx0aWYgKGVkaXRvclNldHRpbmdzLnR5cGVhaGVhZF91cmxzID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiBmaWxlVHlwZSA9PT0gJ2ZpbGUnID8gam9pbihbXG5cdFx0XHRmaWx0ZXJCeVF1ZXJ5KHRlcm0sIGZyb21IaXN0b3J5TWVudUl0ZW1zKGhpc3RvcnkpKSxcblx0XHRcdGZpbHRlckJ5UXVlcnkodGVybSwgZnJvbU1lbnVJdGVtcygnaGVhZGVyJykpLFxuXHRcdFx0ZmlsdGVyQnlRdWVyeSh0ZXJtLCBhbmNob3JNZW51SXRlbXMoKSlcblx0XHRdKSA6IGZpbHRlckJ5UXVlcnkodGVybSwgZnJvbUhpc3RvcnlNZW51SXRlbXMoaGlzdG9yeSkpO1xuXHR9O1xuXG5cdHZhciBhZGRUb0hpc3RvcnkgPSBmdW5jdGlvbiAodXJsLCBmaWxlVHlwZSkge1xuXHRcdHZhciBpdGVtcyA9IGhpc3RvcnlbZmlsZVR5cGVdO1xuXG5cdFx0aWYgKCEvXmh0dHBzPy8udGVzdCh1cmwpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1zKSB7XG5cdFx0XHRpZiAoQXJyLmluZGV4T2YoaXRlbXMsIHVybCkgPT09IC0xKSB7XG5cdFx0XHRcdGhpc3RvcnlbZmlsZVR5cGVdID0gaXRlbXMuc2xpY2UoMCwgSElTVE9SWV9MRU5HVEgpLmNvbmNhdCh1cmwpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRoaXN0b3J5W2ZpbGVUeXBlXSA9IFt1cmxdO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgZmlsdGVyQnlRdWVyeSA9IGZ1bmN0aW9uICh0ZXJtLCBtZW51SXRlbXMpIHtcblx0XHR2YXIgbG93ZXJDYXNlVGVybSA9IHRlcm0udG9Mb3dlckNhc2UoKTtcblx0XHR2YXIgcmVzdWx0ID0gVG9vbHMuZ3JlcChtZW51SXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHRyZXR1cm4gaXRlbS50aXRsZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobG93ZXJDYXNlVGVybSkgIT09IC0xO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDEgJiYgcmVzdWx0WzBdLnRpdGxlID09PSB0ZXJtID8gW10gOiByZXN1bHQ7XG5cdH07XG5cblx0dmFyIGdldFRpdGxlID0gZnVuY3Rpb24gKGxpbmtEZXRhaWxzKSB7XG5cdFx0dmFyIHRpdGxlID0gbGlua0RldGFpbHMudGl0bGU7XG5cdFx0cmV0dXJuIHRpdGxlLnJhdyA/IHRpdGxlLnJhdyA6IHRpdGxlO1xuXHR9O1xuXG5cdHZhciBzZXR1cEF1dG9Db21wbGV0ZUhhbmRsZXIgPSBmdW5jdGlvbiAoY3RybCwgZWRpdG9yU2V0dGluZ3MsIGJvZHlFbG0sIGZpbGVUeXBlKSB7XG5cdFx0dmFyIGF1dG9jb21wbGV0ZSA9IGZ1bmN0aW9uICh0ZXJtKSB7XG5cdFx0XHR2YXIgbGlua1RhcmdldHMgPSBMaW5rVGFyZ2V0cy5maW5kKGJvZHlFbG0pO1xuXHRcdFx0dmFyIG1lbnVJdGVtcyA9IGNyZWF0ZU1lbnVJdGVtcyh0ZXJtLCBsaW5rVGFyZ2V0cywgZmlsZVR5cGUsIGVkaXRvclNldHRpbmdzKTtcblx0XHRcdGN0cmwuc2hvd0F1dG9Db21wbGV0ZShtZW51SXRlbXMsIHRlcm0pO1xuXHRcdH07XG5cblx0XHRjdHJsLm9uKCdhdXRvY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRhdXRvY29tcGxldGUoY3RybC52YWx1ZSgpKTtcblx0XHR9KTtcblxuXHRcdGN0cmwub24oJ3NlbGVjdGl0ZW0nLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0dmFyIGxpbmtEZXRhaWxzID0gZS52YWx1ZTtcblxuXHRcdFx0Y3RybC52YWx1ZShsaW5rRGV0YWlscy51cmwpO1xuXHRcdFx0dmFyIHRpdGxlID0gZ2V0VGl0bGUobGlua0RldGFpbHMpO1xuXG5cdFx0XHRpZiAoZmlsZVR5cGUgPT09ICdpbWFnZScpIHtcblx0XHRcdFx0Y3RybC5maXJlKCdjaGFuZ2UnLCB7bWV0YToge2FsdDogdGl0bGUsIGF0dGFjaDogbGlua0RldGFpbHMuYXR0YWNofX0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3RybC5maXJlKCdjaGFuZ2UnLCB7bWV0YToge3RleHQ6IHRpdGxlLCBhdHRhY2g6IGxpbmtEZXRhaWxzLmF0dGFjaH19KTtcblx0XHRcdH1cblxuXHRcdFx0Y3RybC5mb2N1cygpO1xuXHRcdH0pO1xuXG5cdFx0Y3RybC5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0aWYgKGN0cmwudmFsdWUoKS5sZW5ndGggPT09IDAgJiYgZS50YXJnZXQubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcblx0XHRcdFx0YXV0b2NvbXBsZXRlKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGN0cmwub24oJ1Bvc3RSZW5kZXInLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjdHJsLmdldFJvb3QoKS5vbignc3VibWl0JywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0aWYgKCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG5cdFx0XHRcdFx0YWRkVG9IaXN0b3J5KGN0cmwudmFsdWUoKSwgZmlsZVR5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fTtcblxuXHR2YXIgc3RhdHVzVG9VaVN0YXRlID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuXHRcdHZhciBzdGF0dXMgPSByZXN1bHQuc3RhdHVzLCBtZXNzYWdlID0gcmVzdWx0Lm1lc3NhZ2U7XG5cblx0XHRpZiAoc3RhdHVzID09PSAndmFsaWQnKSB7XG5cdFx0XHRyZXR1cm4ge3N0YXR1czogJ29rJywgbWVzc2FnZTogbWVzc2FnZX07XG5cdFx0fSBlbHNlIGlmIChzdGF0dXMgPT09ICd1bmtub3duJykge1xuXHRcdFx0cmV0dXJuIHtzdGF0dXM6ICd3YXJuJywgbWVzc2FnZTogbWVzc2FnZX07XG5cdFx0fSBlbHNlIGlmIChzdGF0dXMgPT09ICdpbnZhbGlkJykge1xuXHRcdFx0cmV0dXJuIHtzdGF0dXM6ICd3YXJuJywgbWVzc2FnZTogbWVzc2FnZX07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7c3RhdHVzOiAnbm9uZScsIG1lc3NhZ2U6ICcnfTtcblx0XHR9XG5cdH07XG5cblx0dmFyIHNldHVwTGlua1ZhbGlkYXRvckhhbmRsZXIgPSBmdW5jdGlvbiAoY3RybCwgZWRpdG9yU2V0dGluZ3MsIGZpbGVUeXBlKSB7XG5cdFx0dmFyIHZhbGlkYXRvckhhbmRsZXIgPSBlZGl0b3JTZXR0aW5ncy5maWxlcGlja2VyX3ZhbGlkYXRvcl9oYW5kbGVyO1xuXHRcdGlmICh2YWxpZGF0b3JIYW5kbGVyKSB7XG5cdFx0XHR2YXIgdmFsaWRhdGVVcmwgPSBmdW5jdGlvbiAodXJsKSB7XG5cdFx0XHRcdGlmICh1cmwubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Y3RybC5zdGF0dXNMZXZlbCgnbm9uZScpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbGlkYXRvckhhbmRsZXIoe1xuXHRcdFx0XHRcdHVybDogdXJsLFxuXHRcdFx0XHRcdHR5cGU6IGZpbGVUeXBlXG5cdFx0XHRcdH0sIGZ1bmN0aW9uIChyZXN1bHQpIHtcblx0XHRcdFx0XHR2YXIgdWlTdGF0ZSA9IHN0YXR1c1RvVWlTdGF0ZShyZXN1bHQpO1xuXG5cdFx0XHRcdFx0Y3RybC5zdGF0dXNNZXNzYWdlKHVpU3RhdGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0Y3RybC5zdGF0dXNMZXZlbCh1aVN0YXRlLnN0YXR1cyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0Y3RybC5zdGF0ZS5vbignY2hhbmdlOnZhbHVlJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0dmFsaWRhdGVVcmwoZS52YWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIENvbWJvQm94LmV4dGVuZCh7XG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIG5ldyBjb250cm9sIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGVkaXRvciA9IHRpbnltY2UuYWN0aXZlRWRpdG9yLCBlZGl0b3JTZXR0aW5ncyA9IGVkaXRvci5zZXR0aW5ncztcblx0XHRcdHZhciBhY3Rpb25DYWxsYmFjaywgZmlsZUJyb3dzZXJDYWxsYmFjaywgZmlsZUJyb3dzZXJDYWxsYmFja1R5cGVzO1xuXHRcdFx0dmFyIGZpbGVUeXBlID0gc2V0dGluZ3MuZmlsZXR5cGU7XG5cblx0XHRcdHNldHRpbmdzLnNwZWxsY2hlY2sgPSBmYWxzZTtcblxuXHRcdFx0ZmlsZUJyb3dzZXJDYWxsYmFja1R5cGVzID0gZWRpdG9yU2V0dGluZ3MuZmlsZV9waWNrZXJfdHlwZXMgfHwgZWRpdG9yU2V0dGluZ3MuZmlsZV9icm93c2VyX2NhbGxiYWNrX3R5cGVzO1xuXHRcdFx0aWYgKGZpbGVCcm93c2VyQ2FsbGJhY2tUeXBlcykge1xuXHRcdFx0XHRmaWxlQnJvd3NlckNhbGxiYWNrVHlwZXMgPSBUb29scy5tYWtlTWFwKGZpbGVCcm93c2VyQ2FsbGJhY2tUeXBlcywgL1ssIF0vKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFmaWxlQnJvd3NlckNhbGxiYWNrVHlwZXMgfHwgZmlsZUJyb3dzZXJDYWxsYmFja1R5cGVzW2ZpbGVUeXBlXSkge1xuXHRcdFx0XHRmaWxlQnJvd3NlckNhbGxiYWNrID0gZWRpdG9yU2V0dGluZ3MuZmlsZV9waWNrZXJfY2FsbGJhY2s7XG5cdFx0XHRcdGlmIChmaWxlQnJvd3NlckNhbGxiYWNrICYmICghZmlsZUJyb3dzZXJDYWxsYmFja1R5cGVzIHx8IGZpbGVCcm93c2VyQ2FsbGJhY2tUeXBlc1tmaWxlVHlwZV0pKSB7XG5cdFx0XHRcdFx0YWN0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBtZXRhID0gc2VsZi5maXJlKCdiZWZvcmVjYWxsJykubWV0YTtcblxuXHRcdFx0XHRcdFx0bWV0YSA9IFRvb2xzLmV4dGVuZCh7ZmlsZXR5cGU6IGZpbGVUeXBlfSwgbWV0YSk7XG5cblx0XHRcdFx0XHRcdC8vIGZpbGVfcGlja2VyX2NhbGxiYWNrKGNhbGxiYWNrLCBjdXJyZW50VmFsdWUsIG1ldGFEYXRhKVxuXHRcdFx0XHRcdFx0ZmlsZUJyb3dzZXJDYWxsYmFjay5jYWxsKFxuXHRcdFx0XHRcdFx0XHRlZGl0b3IsXG5cdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKHZhbHVlLCBtZXRhKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZi52YWx1ZSh2YWx1ZSkuZmlyZSgnY2hhbmdlJywge21ldGE6IG1ldGF9KTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0c2VsZi52YWx1ZSgpLFxuXHRcdFx0XHRcdFx0XHRtZXRhXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gTGVnYWN5IGNhbGxiYWNrOiBmaWxlX3BpY2tlcl9jYWxsYmFjayhpZCwgY3VycmVudFZhbHVlLCBmaWxldHlwZSwgd2luZG93KVxuXHRcdFx0XHRcdGZpbGVCcm93c2VyQ2FsbGJhY2sgPSBlZGl0b3JTZXR0aW5ncy5maWxlX2Jyb3dzZXJfY2FsbGJhY2s7XG5cdFx0XHRcdFx0aWYgKGZpbGVCcm93c2VyQ2FsbGJhY2sgJiYgKCFmaWxlQnJvd3NlckNhbGxiYWNrVHlwZXMgfHwgZmlsZUJyb3dzZXJDYWxsYmFja1R5cGVzW2ZpbGVUeXBlXSkpIHtcblx0XHRcdFx0XHRcdGFjdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdGZpbGVCcm93c2VyQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0c2VsZi5nZXRFbCgnaW5wJykuaWQsXG5cdFx0XHRcdFx0XHRcdFx0c2VsZi52YWx1ZSgpLFxuXHRcdFx0XHRcdFx0XHRcdGZpbGVUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvd1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGFjdGlvbkNhbGxiYWNrKSB7XG5cdFx0XHRcdHNldHRpbmdzLmljb24gPSAnYnJvd3NlJztcblx0XHRcdFx0c2V0dGluZ3Mub25hY3Rpb24gPSBhY3Rpb25DYWxsYmFjaztcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5fc3VwZXIoc2V0dGluZ3MpO1xuXG5cdFx0XHRzZXR1cEF1dG9Db21wbGV0ZUhhbmRsZXIoc2VsZiwgZWRpdG9yU2V0dGluZ3MsIGVkaXRvci5nZXRCb2R5KCksIGZpbGVUeXBlKTtcblx0XHRcdHNldHVwTGlua1ZhbGlkYXRvckhhbmRsZXIoc2VsZiwgZWRpdG9yU2V0dGluZ3MsIGZpbGVUeXBlKTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9GaXRMYXlvdXQuanNcblxuLyoqXG4gKiBGaXRMYXlvdXQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGxheW91dCBtYW5hZ2VyIHdpbGwgcmVzaXplIHRoZSBjb250cm9sIHRvIGJlIHRoZSBzaXplIG9mIGl0J3MgcGFyZW50IGNvbnRhaW5lci5cbiAqIEluIG90aGVyIHdvcmRzIHdpZHRoOiAxMDAlIGFuZCBoZWlnaHQ6IDEwMCUuXG4gKlxuICogQC14LWxlc3MgRml0TGF5b3V0Lmxlc3NcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkZpdExheW91dFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5BYnNvbHV0ZUxheW91dFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0ZpdExheW91dFwiLCBbXG5cdFwidGlueW1jZS91aS9BYnNvbHV0ZUxheW91dFwiXG5dLCBmdW5jdGlvbihBYnNvbHV0ZUxheW91dCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gQWJzb2x1dGVMYXlvdXQuZXh0ZW5kKHtcblx0XHQvKipcblx0XHQgKiBSZWNhbGN1bGF0ZXMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29udHJvbHMgaW4gdGhlIHNwZWNpZmllZCBjb250YWluZXIuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlY2FsY1xuXHRcdCAqIEBwYXJhbSB7dGlueW1jZS51aS5Db250YWluZXJ9IGNvbnRhaW5lciBDb250YWluZXIgaW5zdGFuY2UgdG8gcmVjYWxjLlxuXHRcdCAqL1xuXHRcdHJlY2FsYzogZnVuY3Rpb24oY29udGFpbmVyKSB7XG5cdFx0XHR2YXIgY29udExheW91dFJlY3QgPSBjb250YWluZXIubGF5b3V0UmVjdCgpLCBwYWRkaW5nQm94ID0gY29udGFpbmVyLnBhZGRpbmdCb3g7XG5cblx0XHRcdGNvbnRhaW5lci5pdGVtcygpLmZpbHRlcignOnZpc2libGUnKS5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0Y3RybC5sYXlvdXRSZWN0KHtcblx0XHRcdFx0XHR4OiBwYWRkaW5nQm94LmxlZnQsXG5cdFx0XHRcdFx0eTogcGFkZGluZ0JveC50b3AsXG5cdFx0XHRcdFx0dzogY29udExheW91dFJlY3QuaW5uZXJXIC0gcGFkZGluZ0JveC5yaWdodCAtIHBhZGRpbmdCb3gubGVmdCxcblx0XHRcdFx0XHRoOiBjb250TGF5b3V0UmVjdC5pbm5lckggLSBwYWRkaW5nQm94LnRvcCAtIHBhZGRpbmdCb3guYm90dG9tXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChjdHJsLnJlY2FsYykge1xuXHRcdFx0XHRcdGN0cmwucmVjYWxjKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0ZsZXhMYXlvdXQuanNcblxuLyoqXG4gKiBGbGV4TGF5b3V0LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBsYXlvdXQgbWFuYWdlciB3b3JrcyBzaW1pbGFyIHRvIHRoZSBDU1MgZmxleCBib3guXG4gKlxuICogQHNldHRpbmcge1N0cmluZ30gZGlyZWN0aW9uIHJvd3xyb3ctcmV2ZXJzZXxjb2x1bW58Y29sdW1uLXJldmVyc2VcbiAqIEBzZXR0aW5nIHtOdW1iZXJ9IGZsZXggQSBwb3NpdGl2ZS1udW1iZXIgdG8gZmxleCBieS5cbiAqIEBzZXR0aW5nIHtTdHJpbmd9IGFsaWduIHN0YXJ0fGVuZHxjZW50ZXJ8c3RyZXRjaFxuICogQHNldHRpbmcge1N0cmluZ30gcGFjayBzdGFydHxlbmR8anVzdGlmeVxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLkZsZXhMYXlvdXRcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuQWJzb2x1dGVMYXlvdXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9GbGV4TGF5b3V0XCIsIFtcblx0XCJ0aW55bWNlL3VpL0Fic29sdXRlTGF5b3V0XCJcbl0sIGZ1bmN0aW9uKEFic29sdXRlTGF5b3V0KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBBYnNvbHV0ZUxheW91dC5leHRlbmQoe1xuXHRcdC8qKlxuXHRcdCAqIFJlY2FsY3VsYXRlcyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjb250cm9scyBpbiB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVjYWxjXG5cdFx0ICogQHBhcmFtIHt0aW55bWNlLnVpLkNvbnRhaW5lcn0gY29udGFpbmVyIENvbnRhaW5lciBpbnN0YW5jZSB0byByZWNhbGMuXG5cdFx0ICovXG5cdFx0cmVjYWxjOiBmdW5jdGlvbihjb250YWluZXIpIHtcblx0XHRcdC8vIEEgdG9uIG9mIHZhcmlhYmxlcywgbmVlZHMgdG8gYmUgaW4gdGhlIHNhbWUgc2NvcGUgZm9yIHBlcmZvcm1hbmNlXG5cdFx0XHR2YXIgaSwgbCwgaXRlbXMsIGNvbnRMYXlvdXRSZWN0LCBjb250UGFkZGluZ0JveCwgY29udFNldHRpbmdzLCBhbGlnbiwgcGFjaywgc3BhY2luZywgdG90YWxGbGV4LCBhdmFpbGFibGVTcGFjZSwgZGlyZWN0aW9uO1xuXHRcdFx0dmFyIGN0cmwsIGN0cmxMYXlvdXRSZWN0LCBjdHJsU2V0dGluZ3MsIGZsZXgsIG1heFNpemVJdGVtcyA9IFtdLCBzaXplLCBtYXhTaXplLCByYXRpbywgcmVjdCwgcG9zLCBtYXhBbGlnbkVuZFBvcztcblx0XHRcdHZhciBzaXplTmFtZSwgbWluU2l6ZU5hbWUsIHBvc05hbWUsIG1heFNpemVOYW1lLCBiZWZvcmVOYW1lLCBpbm5lclNpemVOYW1lLCBkZWx0YVNpemVOYW1lLCBjb250ZW50U2l6ZU5hbWU7XG5cdFx0XHR2YXIgYWxpZ25BeGlzTmFtZSwgYWxpZ25Jbm5lclNpemVOYW1lLCBhbGlnblNpemVOYW1lLCBhbGlnbk1pblNpemVOYW1lLCBhbGlnbkJlZm9yZU5hbWUsIGFsaWduQWZ0ZXJOYW1lO1xuXHRcdFx0dmFyIGFsaWduRGVsdGFTaXplTmFtZSwgYWxpZ25Db250ZW50U2l6ZU5hbWU7XG5cdFx0XHR2YXIgbWF4ID0gTWF0aC5tYXgsIG1pbiA9IE1hdGgubWluO1xuXG5cdFx0XHQvLyBHZXQgY29udGFpbmVyIGl0ZW1zLCBwcm9wZXJ0aWVzIGFuZCBzZXR0aW5nc1xuXHRcdFx0aXRlbXMgPSBjb250YWluZXIuaXRlbXMoKS5maWx0ZXIoJzp2aXNpYmxlJyk7XG5cdFx0XHRjb250TGF5b3V0UmVjdCA9IGNvbnRhaW5lci5sYXlvdXRSZWN0KCk7XG5cdFx0XHRjb250UGFkZGluZ0JveCA9IGNvbnRhaW5lci5wYWRkaW5nQm94O1xuXHRcdFx0Y29udFNldHRpbmdzID0gY29udGFpbmVyLnNldHRpbmdzO1xuXHRcdFx0ZGlyZWN0aW9uID0gY29udGFpbmVyLmlzUnRsKCkgPyAoY29udFNldHRpbmdzLmRpcmVjdGlvbiB8fCAncm93LXJldmVyc2VkJykgOiBjb250U2V0dGluZ3MuZGlyZWN0aW9uO1xuXHRcdFx0YWxpZ24gPSBjb250U2V0dGluZ3MuYWxpZ247XG5cdFx0XHRwYWNrID0gY29udGFpbmVyLmlzUnRsKCkgPyAoY29udFNldHRpbmdzLnBhY2sgfHwgJ2VuZCcpIDogY29udFNldHRpbmdzLnBhY2s7XG5cdFx0XHRzcGFjaW5nID0gY29udFNldHRpbmdzLnNwYWNpbmcgfHwgMDtcblxuXHRcdFx0aWYgKGRpcmVjdGlvbiA9PSBcInJvdy1yZXZlcnNlZFwiIHx8IGRpcmVjdGlvbiA9PSBcImNvbHVtbi1yZXZlcnNlXCIpIHtcblx0XHRcdFx0aXRlbXMgPSBpdGVtcy5zZXQoaXRlbXMudG9BcnJheSgpLnJldmVyc2UoKSk7XG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi5zcGxpdCgnLScpWzBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXR1cCBheGlzIHZhcmlhYmxlIG5hbWUgZm9yIHJvdy9jb2x1bW4gZGlyZWN0aW9uIHNpbmNlIHRoZSBjYWxjdWxhdGlvbnMgaXMgdGhlIHNhbWVcblx0XHRcdGlmIChkaXJlY3Rpb24gPT0gXCJjb2x1bW5cIikge1xuXHRcdFx0XHRwb3NOYW1lID0gXCJ5XCI7XG5cdFx0XHRcdHNpemVOYW1lID0gXCJoXCI7XG5cdFx0XHRcdG1pblNpemVOYW1lID0gXCJtaW5IXCI7XG5cdFx0XHRcdG1heFNpemVOYW1lID0gXCJtYXhIXCI7XG5cdFx0XHRcdGlubmVyU2l6ZU5hbWUgPSBcImlubmVySFwiO1xuXHRcdFx0XHRiZWZvcmVOYW1lID0gJ3RvcCc7XG5cdFx0XHRcdGRlbHRhU2l6ZU5hbWUgPSBcImRlbHRhSFwiO1xuXHRcdFx0XHRjb250ZW50U2l6ZU5hbWUgPSBcImNvbnRlbnRIXCI7XG5cblx0XHRcdFx0YWxpZ25CZWZvcmVOYW1lID0gXCJsZWZ0XCI7XG5cdFx0XHRcdGFsaWduU2l6ZU5hbWUgPSBcIndcIjtcblx0XHRcdFx0YWxpZ25BeGlzTmFtZSA9IFwieFwiO1xuXHRcdFx0XHRhbGlnbklubmVyU2l6ZU5hbWUgPSBcImlubmVyV1wiO1xuXHRcdFx0XHRhbGlnbk1pblNpemVOYW1lID0gXCJtaW5XXCI7XG5cdFx0XHRcdGFsaWduQWZ0ZXJOYW1lID0gXCJyaWdodFwiO1xuXHRcdFx0XHRhbGlnbkRlbHRhU2l6ZU5hbWUgPSBcImRlbHRhV1wiO1xuXHRcdFx0XHRhbGlnbkNvbnRlbnRTaXplTmFtZSA9IFwiY29udGVudFdcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBvc05hbWUgPSBcInhcIjtcblx0XHRcdFx0c2l6ZU5hbWUgPSBcIndcIjtcblx0XHRcdFx0bWluU2l6ZU5hbWUgPSBcIm1pbldcIjtcblx0XHRcdFx0bWF4U2l6ZU5hbWUgPSBcIm1heFdcIjtcblx0XHRcdFx0aW5uZXJTaXplTmFtZSA9IFwiaW5uZXJXXCI7XG5cdFx0XHRcdGJlZm9yZU5hbWUgPSAnbGVmdCc7XG5cdFx0XHRcdGRlbHRhU2l6ZU5hbWUgPSBcImRlbHRhV1wiO1xuXHRcdFx0XHRjb250ZW50U2l6ZU5hbWUgPSBcImNvbnRlbnRXXCI7XG5cblx0XHRcdFx0YWxpZ25CZWZvcmVOYW1lID0gXCJ0b3BcIjtcblx0XHRcdFx0YWxpZ25TaXplTmFtZSA9IFwiaFwiO1xuXHRcdFx0XHRhbGlnbkF4aXNOYW1lID0gXCJ5XCI7XG5cdFx0XHRcdGFsaWduSW5uZXJTaXplTmFtZSA9IFwiaW5uZXJIXCI7XG5cdFx0XHRcdGFsaWduTWluU2l6ZU5hbWUgPSBcIm1pbkhcIjtcblx0XHRcdFx0YWxpZ25BZnRlck5hbWUgPSBcImJvdHRvbVwiO1xuXHRcdFx0XHRhbGlnbkRlbHRhU2l6ZU5hbWUgPSBcImRlbHRhSFwiO1xuXHRcdFx0XHRhbGlnbkNvbnRlbnRTaXplTmFtZSA9IFwiY29udGVudEhcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRmlndXJlIG91dCB0b3RhbCBmbGV4LCBhdmFpbGFibGVTcGFjZSBhbmQgY29sbGVjdCBhbnkgbWF4IHNpemUgZWxlbWVudHNcblx0XHRcdGF2YWlsYWJsZVNwYWNlID0gY29udExheW91dFJlY3RbaW5uZXJTaXplTmFtZV0gLSBjb250UGFkZGluZ0JveFtiZWZvcmVOYW1lXSAtIGNvbnRQYWRkaW5nQm94W2JlZm9yZU5hbWVdO1xuXHRcdFx0bWF4QWxpZ25FbmRQb3MgPSB0b3RhbEZsZXggPSAwO1xuXHRcdFx0Zm9yIChpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRjdHJsID0gaXRlbXNbaV07XG5cdFx0XHRcdGN0cmxMYXlvdXRSZWN0ID0gY3RybC5sYXlvdXRSZWN0KCk7XG5cdFx0XHRcdGN0cmxTZXR0aW5ncyA9IGN0cmwuc2V0dGluZ3M7XG5cdFx0XHRcdGZsZXggPSBjdHJsU2V0dGluZ3MuZmxleDtcblx0XHRcdFx0YXZhaWxhYmxlU3BhY2UgLT0gKGkgPCBsIC0gMSA/IHNwYWNpbmcgOiAwKTtcblxuXHRcdFx0XHRpZiAoZmxleCA+IDApIHtcblx0XHRcdFx0XHR0b3RhbEZsZXggKz0gZmxleDtcblxuXHRcdFx0XHRcdC8vIEZsZXhlZCBpdGVtIGhhcyBhIG1heCBzaXplIHRoZW4gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSB3aWxsIGhpdCB0aGF0IHNpemVcblx0XHRcdFx0XHRpZiAoY3RybExheW91dFJlY3RbbWF4U2l6ZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRtYXhTaXplSXRlbXMucHVzaChjdHJsKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdC5mbGV4ID0gZmxleDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGF2YWlsYWJsZVNwYWNlIC09IGN0cmxMYXlvdXRSZWN0W21pblNpemVOYW1lXTtcblxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgdGhlIGFsaWduIGVuZCBwb3NpdGlvbiB0byBiZSB1c2VkIHRvIGNoZWNrIGZvciBvdmVyZmxvdy91bmRlcmZsb3dcblx0XHRcdFx0c2l6ZSA9IGNvbnRQYWRkaW5nQm94W2FsaWduQmVmb3JlTmFtZV0gKyBjdHJsTGF5b3V0UmVjdFthbGlnbk1pblNpemVOYW1lXSArIGNvbnRQYWRkaW5nQm94W2FsaWduQWZ0ZXJOYW1lXTtcblx0XHRcdFx0aWYgKHNpemUgPiBtYXhBbGlnbkVuZFBvcykge1xuXHRcdFx0XHRcdG1heEFsaWduRW5kUG9zID0gc2l6ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgbWluVy9taW5IXG5cdFx0XHRyZWN0ID0ge307XG5cdFx0XHRpZiAoYXZhaWxhYmxlU3BhY2UgPCAwKSB7XG5cdFx0XHRcdHJlY3RbbWluU2l6ZU5hbWVdID0gY29udExheW91dFJlY3RbbWluU2l6ZU5hbWVdIC0gYXZhaWxhYmxlU3BhY2UgKyBjb250TGF5b3V0UmVjdFtkZWx0YVNpemVOYW1lXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlY3RbbWluU2l6ZU5hbWVdID0gY29udExheW91dFJlY3RbaW5uZXJTaXplTmFtZV0gLSBhdmFpbGFibGVTcGFjZSArIGNvbnRMYXlvdXRSZWN0W2RlbHRhU2l6ZU5hbWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWN0W2FsaWduTWluU2l6ZU5hbWVdID0gbWF4QWxpZ25FbmRQb3MgKyBjb250TGF5b3V0UmVjdFthbGlnbkRlbHRhU2l6ZU5hbWVdO1xuXG5cdFx0XHRyZWN0W2NvbnRlbnRTaXplTmFtZV0gPSBjb250TGF5b3V0UmVjdFtpbm5lclNpemVOYW1lXSAtIGF2YWlsYWJsZVNwYWNlO1xuXHRcdFx0cmVjdFthbGlnbkNvbnRlbnRTaXplTmFtZV0gPSBtYXhBbGlnbkVuZFBvcztcblx0XHRcdHJlY3QubWluVyA9IG1pbihyZWN0Lm1pblcsIGNvbnRMYXlvdXRSZWN0Lm1heFcpO1xuXHRcdFx0cmVjdC5taW5IID0gbWluKHJlY3QubWluSCwgY29udExheW91dFJlY3QubWF4SCk7XG5cdFx0XHRyZWN0Lm1pblcgPSBtYXgocmVjdC5taW5XLCBjb250TGF5b3V0UmVjdC5zdGFydE1pbldpZHRoKTtcblx0XHRcdHJlY3QubWluSCA9IG1heChyZWN0Lm1pbkgsIGNvbnRMYXlvdXRSZWN0LnN0YXJ0TWluSGVpZ2h0KTtcblxuXHRcdFx0Ly8gUmVzaXplIGNvbnRhaW5lciBjb250YWluZXIgaWYgbWluU2l6ZSB3YXMgY2hhbmdlZFxuXHRcdFx0aWYgKGNvbnRMYXlvdXRSZWN0LmF1dG9SZXNpemUgJiYgKHJlY3QubWluVyAhPSBjb250TGF5b3V0UmVjdC5taW5XIHx8IHJlY3QubWluSCAhPSBjb250TGF5b3V0UmVjdC5taW5IKSkge1xuXHRcdFx0XHRyZWN0LncgPSByZWN0Lm1pblc7XG5cdFx0XHRcdHJlY3QuaCA9IHJlY3QubWluSDtcblxuXHRcdFx0XHRjb250YWluZXIubGF5b3V0UmVjdChyZWN0KTtcblx0XHRcdFx0dGhpcy5yZWNhbGMoY29udGFpbmVyKTtcblxuXHRcdFx0XHQvLyBGb3JjZWQgcmVjYWxjIGZvciBleGFtcGxlIGlmIGl0ZW1zIGFyZSBoaWRkZW4vc2hvd25cblx0XHRcdFx0aWYgKGNvbnRhaW5lci5fbGFzdFJlY3QgPT09IG51bGwpIHtcblx0XHRcdFx0XHR2YXIgcGFyZW50Q3RybCA9IGNvbnRhaW5lci5wYXJlbnQoKTtcblx0XHRcdFx0XHRpZiAocGFyZW50Q3RybCkge1xuXHRcdFx0XHRcdFx0cGFyZW50Q3RybC5fbGFzdFJlY3QgPSBudWxsO1xuXHRcdFx0XHRcdFx0cGFyZW50Q3RybC5yZWNhbGMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBtYXggc2l6ZSBlbGVtZW50cywgY2hlY2sgaWYgdGhleSB3aWxsIGJlY29tZSB0byB3aWRlIHdpdGggY3VycmVudCBvcHRpb25zXG5cdFx0XHRyYXRpbyA9IGF2YWlsYWJsZVNwYWNlIC8gdG90YWxGbGV4O1xuXHRcdFx0Zm9yIChpID0gMCwgbCA9IG1heFNpemVJdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y3RybCA9IG1heFNpemVJdGVtc1tpXTtcblx0XHRcdFx0Y3RybExheW91dFJlY3QgPSBjdHJsLmxheW91dFJlY3QoKTtcblx0XHRcdFx0bWF4U2l6ZSA9IGN0cmxMYXlvdXRSZWN0W21heFNpemVOYW1lXTtcblx0XHRcdFx0c2l6ZSA9IGN0cmxMYXlvdXRSZWN0W21pblNpemVOYW1lXSArIGN0cmxMYXlvdXRSZWN0LmZsZXggKiByYXRpbztcblxuXHRcdFx0XHRpZiAoc2l6ZSA+IG1heFNpemUpIHtcblx0XHRcdFx0XHRhdmFpbGFibGVTcGFjZSAtPSAoY3RybExheW91dFJlY3RbbWF4U2l6ZU5hbWVdIC0gY3RybExheW91dFJlY3RbbWluU2l6ZU5hbWVdKTtcblx0XHRcdFx0XHR0b3RhbEZsZXggLT0gY3RybExheW91dFJlY3QuZmxleDtcblx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdC5mbGV4ID0gMDtcblx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdC5tYXhGbGV4U2l6ZSA9IG1heFNpemU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3RybExheW91dFJlY3QubWF4RmxleFNpemUgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldHVwIG5ldyByYXRpbywgdGFyZ2V0IGxheW91dCByZWN0LCBzdGFydCBwb3NpdGlvblxuXHRcdFx0cmF0aW8gPSBhdmFpbGFibGVTcGFjZSAvIHRvdGFsRmxleDtcblx0XHRcdHBvcyA9IGNvbnRQYWRkaW5nQm94W2JlZm9yZU5hbWVdO1xuXHRcdFx0cmVjdCA9IHt9O1xuXG5cdFx0XHQvLyBIYW5kbGUgcGFjayBzZXR0aW5nIG1vdmVzIHRoZSBzdGFydCBwb3NpdGlvbiB0byBlbmQsIGNlbnRlclxuXHRcdFx0aWYgKHRvdGFsRmxleCA9PT0gMCkge1xuXHRcdFx0XHRpZiAocGFjayA9PSBcImVuZFwiKSB7XG5cdFx0XHRcdFx0cG9zID0gYXZhaWxhYmxlU3BhY2UgKyBjb250UGFkZGluZ0JveFtiZWZvcmVOYW1lXTtcblx0XHRcdFx0fSBlbHNlIGlmIChwYWNrID09IFwiY2VudGVyXCIpIHtcblx0XHRcdFx0XHRwb3MgPSBNYXRoLnJvdW5kKFxuXHRcdFx0XHRcdFx0KGNvbnRMYXlvdXRSZWN0W2lubmVyU2l6ZU5hbWVdIC8gMikgLSAoKGNvbnRMYXlvdXRSZWN0W2lubmVyU2l6ZU5hbWVdIC0gYXZhaWxhYmxlU3BhY2UpIC8gMilcblx0XHRcdFx0XHQpICsgY29udFBhZGRpbmdCb3hbYmVmb3JlTmFtZV07XG5cblx0XHRcdFx0XHRpZiAocG9zIDwgMCkge1xuXHRcdFx0XHRcdFx0cG9zID0gY29udFBhZGRpbmdCb3hbYmVmb3JlTmFtZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHBhY2sgPT0gXCJqdXN0aWZ5XCIpIHtcblx0XHRcdFx0XHRwb3MgPSBjb250UGFkZGluZ0JveFtiZWZvcmVOYW1lXTtcblx0XHRcdFx0XHRzcGFjaW5nID0gTWF0aC5mbG9vcihhdmFpbGFibGVTcGFjZSAvIChpdGVtcy5sZW5ndGggLSAxKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVmYXVsdCBhbGlnbmluZyAoc3RhcnQpIHRoZSBvdGhlciBvbmVzIG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQgd2hpbGUgZG9pbmcgdGhlIGxheW91dFxuXHRcdFx0cmVjdFthbGlnbkF4aXNOYW1lXSA9IGNvbnRQYWRkaW5nQm94W2FsaWduQmVmb3JlTmFtZV07XG5cblx0XHRcdC8vIFN0YXJ0IGxheWluZyBvdXQgY29udHJvbHNcblx0XHRcdGZvciAoaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0Y3RybCA9IGl0ZW1zW2ldO1xuXHRcdFx0XHRjdHJsTGF5b3V0UmVjdCA9IGN0cmwubGF5b3V0UmVjdCgpO1xuXHRcdFx0XHRzaXplID0gY3RybExheW91dFJlY3QubWF4RmxleFNpemUgfHwgY3RybExheW91dFJlY3RbbWluU2l6ZU5hbWVdO1xuXG5cdFx0XHRcdC8vIEFsaWduIHRoZSBjb250cm9sIG9uIHRoZSBvdGhlciBheGlzXG5cdFx0XHRcdGlmIChhbGlnbiA9PT0gXCJjZW50ZXJcIikge1xuXHRcdFx0XHRcdHJlY3RbYWxpZ25BeGlzTmFtZV0gPSBNYXRoLnJvdW5kKChjb250TGF5b3V0UmVjdFthbGlnbklubmVyU2l6ZU5hbWVdIC8gMikgLSAoY3RybExheW91dFJlY3RbYWxpZ25TaXplTmFtZV0gLyAyKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWxpZ24gPT09IFwic3RyZXRjaFwiKSB7XG5cdFx0XHRcdFx0cmVjdFthbGlnblNpemVOYW1lXSA9IG1heChcblx0XHRcdFx0XHRcdGN0cmxMYXlvdXRSZWN0W2FsaWduTWluU2l6ZU5hbWVdIHx8IDAsXG5cdFx0XHRcdFx0XHRjb250TGF5b3V0UmVjdFthbGlnbklubmVyU2l6ZU5hbWVdIC0gY29udFBhZGRpbmdCb3hbYWxpZ25CZWZvcmVOYW1lXSAtIGNvbnRQYWRkaW5nQm94W2FsaWduQWZ0ZXJOYW1lXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmVjdFthbGlnbkF4aXNOYW1lXSA9IGNvbnRQYWRkaW5nQm94W2FsaWduQmVmb3JlTmFtZV07XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWxpZ24gPT09IFwiZW5kXCIpIHtcblx0XHRcdFx0XHRyZWN0W2FsaWduQXhpc05hbWVdID0gY29udExheW91dFJlY3RbYWxpZ25Jbm5lclNpemVOYW1lXSAtIGN0cmxMYXlvdXRSZWN0W2FsaWduU2l6ZU5hbWVdIC0gY29udFBhZGRpbmdCb3gudG9wO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIG5ldyBzaXplIGJhc2VkIG9uIGZsZXhcblx0XHRcdFx0aWYgKGN0cmxMYXlvdXRSZWN0LmZsZXggPiAwKSB7XG5cdFx0XHRcdFx0c2l6ZSArPSBjdHJsTGF5b3V0UmVjdC5mbGV4ICogcmF0aW87XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZWN0W3NpemVOYW1lXSA9IHNpemU7XG5cdFx0XHRcdHJlY3RbcG9zTmFtZV0gPSBwb3M7XG5cdFx0XHRcdGN0cmwubGF5b3V0UmVjdChyZWN0KTtcblxuXHRcdFx0XHQvLyBSZWNhbGN1bGF0ZSBjb250YWluZXJzXG5cdFx0XHRcdGlmIChjdHJsLnJlY2FsYykge1xuXHRcdFx0XHRcdGN0cmwucmVjYWxjKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIHgveSBwb3NpdGlvblxuXHRcdFx0XHRwb3MgKz0gc2l6ZSArIHNwYWNpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvRmxvd0xheW91dC5qc1xuXG4vKipcbiAqIEZsb3dMYXlvdXQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGxheW91dCBtYW5hZ2VyIHdpbGwgcGxhY2UgdGhlIGNvbnRyb2xzIGJ5IHVzaW5nIHRoZSBicm93c2VycyBuYXRpdmUgbGF5b3V0LlxuICpcbiAqIEAteC1sZXNzIEZsb3dMYXlvdXQubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuRmxvd0xheW91dFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5MYXlvdXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9GbG93TGF5b3V0XCIsIFtcblx0XCJ0aW55bWNlL3VpL0xheW91dFwiXG5dLCBmdW5jdGlvbihMYXlvdXQpIHtcblx0cmV0dXJuIExheW91dC5leHRlbmQoe1xuXHRcdERlZmF1bHRzOiB7XG5cdFx0XHRjb250YWluZXJDbGFzczogJ2Zsb3ctbGF5b3V0Jyxcblx0XHRcdGNvbnRyb2xDbGFzczogJ2Zsb3ctbGF5b3V0LWl0ZW0nLFxuXHRcdFx0ZW5kQ2xhc3M6ICdicmVhaydcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVjYWxjdWxhdGVzIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGNvbnRyb2xzIGluIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZWNhbGNcblx0XHQgKiBAcGFyYW0ge3RpbnltY2UudWkuQ29udGFpbmVyfSBjb250YWluZXIgQ29udGFpbmVyIGluc3RhbmNlIHRvIHJlY2FsYy5cblx0XHQgKi9cblx0XHRyZWNhbGM6IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuXHRcdFx0Y29udGFpbmVyLml0ZW1zKCkuZmlsdGVyKCc6dmlzaWJsZScpLmVhY2goZnVuY3Rpb24oY3RybCkge1xuXHRcdFx0XHRpZiAoY3RybC5yZWNhbGMpIHtcblx0XHRcdFx0XHRjdHJsLnJlY2FsYygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0aXNOYXRpdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvZm10L0ZvbnRJbmZvLmpzXG5cbi8qKlxuICogRm9udEluZm8uanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyBmb3IgY29tcHV0aW5nIGZvbnQgc2l6ZSBmb3IgZWxlbWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLmZtdC5Gb250SW5mb1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL2ZtdC9Gb250SW5mb1wiLCBbXG5cdFwidGlueW1jZS9kb20vRE9NVXRpbHNcIlxuXSwgZnVuY3Rpb24oRE9NVXRpbHMpIHtcblx0dmFyIGdldFNwZWNpZmllZEZvbnRQcm9wID0gZnVuY3Rpb24gKHByb3BOYW1lLCByb290RWxtLCBlbG0pIHtcblx0XHR3aGlsZSAoZWxtICE9PSByb290RWxtKSB7XG5cdFx0XHRpZiAoZWxtLnN0eWxlW3Byb3BOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gZWxtLnN0eWxlW3Byb3BOYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0ZWxtID0gZWxtLnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXG5cdHZhciB0b1B0ID0gZnVuY3Rpb24gKGZvbnRTaXplKSB7XG5cdFx0aWYgKC9bMC05Ll0rcHgkLy50ZXN0KGZvbnRTaXplKSkge1xuXHRcdFx0cmV0dXJuIE1hdGgucm91bmQocGFyc2VJbnQoZm9udFNpemUsIDEwKSAqIDcyIC8gOTYpICsgJ3B0Jztcblx0XHR9XG5cblx0XHRyZXR1cm4gZm9udFNpemU7XG5cdH07XG5cblx0dmFyIG5vcm1hbGl6ZUZvbnRGYW1pbHkgPSBmdW5jdGlvbiAoZm9udEZhbWlseSkge1xuXHRcdC8vICdGb250IG5hbWUnLCBGb250IC0+IEZvbnQgbmFtZSxGb250XG5cdFx0cmV0dXJuIGZvbnRGYW1pbHkucmVwbGFjZSgvW1xcJ1xcXCJdL2csICcnKS5yZXBsYWNlKC8sXFxzKy9nLCAnLCcpO1xuXHR9O1xuXG5cdHZhciBnZXRDb21wdXRlZEZvbnRQcm9wID0gZnVuY3Rpb24gKHByb3BOYW1lLCBlbG0pIHtcblx0XHRyZXR1cm4gRE9NVXRpbHMuRE9NLmdldFN0eWxlKGVsbSwgcHJvcE5hbWUsIHRydWUpO1xuXHR9O1xuXG5cdHZhciBnZXRGb250U2l6ZSA9IGZ1bmN0aW9uIChyb290RWxtLCBlbG0pIHtcblx0XHR2YXIgc3BlY2lmaWVkRm9udFNpemUgPSBnZXRTcGVjaWZpZWRGb250UHJvcCgnZm9udFNpemUnLCByb290RWxtLCBlbG0pO1xuXHRcdHJldHVybiBzcGVjaWZpZWRGb250U2l6ZSAhPT0gJycgPyBzcGVjaWZpZWRGb250U2l6ZSA6IGdldENvbXB1dGVkRm9udFByb3AoJ2ZvbnRTaXplJywgZWxtKTtcblx0fTtcblxuXHR2YXIgZ2V0Rm9udEZhbWlseSA9IGZ1bmN0aW9uIChyb290RWxtLCBlbG0pIHtcblx0XHR2YXIgc3BlY2lmaWVkRm9udFNpemUgPSBnZXRTcGVjaWZpZWRGb250UHJvcCgnZm9udEZhbWlseScsIHJvb3RFbG0sIGVsbSk7XG5cdFx0dmFyIGZvbnRWYWx1ZSA9IHNwZWNpZmllZEZvbnRTaXplICE9PSAnJyA/IHNwZWNpZmllZEZvbnRTaXplIDogZ2V0Q29tcHV0ZWRGb250UHJvcCgnZm9udEZhbWlseScsIGVsbSk7XG5cblx0XHRyZXR1cm4gZm9udFZhbHVlICE9PSB1bmRlZmluZWQgPyBub3JtYWxpemVGb250RmFtaWx5KGZvbnRWYWx1ZSkgOiAnJztcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGdldEZvbnRTaXplOiBnZXRGb250U2l6ZSxcblx0XHRnZXRGb250RmFtaWx5OiBnZXRGb250RmFtaWx5LFxuXHRcdHRvUHQ6IHRvUHRcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvRm9ybWF0Q29udHJvbHMuanNcblxuLyoqXG4gKiBGb3JtYXRDb250cm9scy5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIEludGVybmFsIGNsYXNzIGNvbnRhaW5pbmcgYWxsIFRpbnlNQ0Ugc3BlY2lmaWMgY29udHJvbCB0eXBlcyBzdWNoIGFzXG4gKiBmb3JtYXQgbGlzdGJveGVzLCBmb250bGlzdCBib3hlcywgdG9vbGJhciBidXR0b25zIGV0Yy5cbiAqXG4gKiBAY2xhc3MgdGlueW1jZS51aS5Gb3JtYXRDb250cm9sc1xuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0Zvcm1hdENvbnRyb2xzXCIsIFtcblx0XCJ0aW55bWNlL3VpL0NvbnRyb2xcIixcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiLFxuXHRcInRpbnltY2UvdWkvRmxvYXRQYW5lbFwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvdXRpbC9BcnJcIixcblx0XCJ0aW55bWNlL2RvbS9ET01VdGlsc1wiLFxuXHRcInRpbnltY2UvRWRpdG9yTWFuYWdlclwiLFxuXHRcInRpbnltY2UvRW52XCIsXG5cdFwidGlueW1jZS9mbXQvRm9udEluZm9cIlxuXSwgZnVuY3Rpb24oQ29udHJvbCwgV2lkZ2V0LCBGbG9hdFBhbmVsLCBUb29scywgQXJyLCBET01VdGlscywgRWRpdG9yTWFuYWdlciwgRW52LCBGb250SW5mbykge1xuXHR2YXIgZWFjaCA9IFRvb2xzLmVhY2g7XG5cblx0dmFyIGZsYXR0ZW4gPSBmdW5jdGlvbiAoYXIpIHtcblx0XHRyZXR1cm4gQXJyLnJlZHVjZShhciwgZnVuY3Rpb24gKHJlc3VsdCwgaXRlbSkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdC5jb25jYXQoaXRlbSk7XG5cdFx0fSwgW10pO1xuXHR9O1xuXG5cdEVkaXRvck1hbmFnZXIub24oJ0FkZEVkaXRvcicsIGZ1bmN0aW9uKGUpIHtcblx0XHR2YXIgZWRpdG9yID0gZS5lZGl0b3I7XG5cblx0XHRzZXR1cFJ0bE1vZGUoZWRpdG9yKTtcblx0XHRyZWdpc3RlckNvbnRyb2xzKGVkaXRvcik7XG5cdFx0c2V0dXBDb250YWluZXIoZWRpdG9yKTtcblx0fSk7XG5cblx0Q29udHJvbC50cmFuc2xhdGUgPSBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0cmV0dXJuIEVkaXRvck1hbmFnZXIudHJhbnNsYXRlKHRleHQpO1xuXHR9O1xuXG5cdFdpZGdldC50b29sdGlwcyA9ICFFbnYuaU9TO1xuXG5cdGZ1bmN0aW9uIHNldHVwQ29udGFpbmVyKGVkaXRvcikge1xuXHRcdGlmIChlZGl0b3Iuc2V0dGluZ3MudWlfY29udGFpbmVyKSB7XG5cdFx0XHRFbnYuY29udGFpbmVyID0gRE9NVXRpbHMuRE9NLnNlbGVjdChlZGl0b3Iuc2V0dGluZ3MudWlfY29udGFpbmVyKVswXTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBzZXR1cFJ0bE1vZGUoZWRpdG9yKSB7XG5cdFx0ZWRpdG9yLm9uKCdTY3JpcHRzTG9hZGVkJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGVkaXRvci5ydGwpIHtcblx0XHRcdFx0Q29udHJvbC5ydGwgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVnaXN0ZXJDb250cm9scyhlZGl0b3IpIHtcblx0XHR2YXIgZm9ybWF0TWVudTtcblxuXHRcdGZ1bmN0aW9uIGNyZWF0ZUxpc3RCb3hDaGFuZ2VIYW5kbGVyKGl0ZW1zLCBmb3JtYXROYW1lKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0XHRlZGl0b3Iub24oJ25vZGVDaGFuZ2UnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0dmFyIGZvcm1hdHRlciA9IGVkaXRvci5mb3JtYXR0ZXI7XG5cdFx0XHRcdFx0dmFyIHZhbHVlID0gbnVsbDtcblxuXHRcdFx0XHRcdGVhY2goZS5wYXJlbnRzLCBmdW5jdGlvbihub2RlKSB7XG5cdFx0XHRcdFx0XHRlYWNoKGl0ZW1zLCBmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChmb3JtYXROYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdHRlci5tYXRjaE5vZGUobm9kZSwgZm9ybWF0TmFtZSwge3ZhbHVlOiBpdGVtLnZhbHVlfSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gaXRlbS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdHRlci5tYXRjaE5vZGUobm9kZSwgaXRlbS52YWx1ZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gaXRlbS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0c2VsZi52YWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjcmVhdGVGb250TmFtZUxpc3RCb3hDaGFuZ2VIYW5kbGVyKGl0ZW1zKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0XHR2YXIgZ2V0Rmlyc3RGb250ID0gZnVuY3Rpb24gKGZvbnRGYW1pbHkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZm9udEZhbWlseSA/IGZvbnRGYW1pbHkuc3BsaXQoJywnKVswXSA6ICcnO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGVkaXRvci5vbignbm9kZUNoYW5nZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHR2YXIgZm9udEZhbWlseSwgdmFsdWUgPSBudWxsO1xuXG5cdFx0XHRcdFx0Zm9udEZhbWlseSA9IEZvbnRJbmZvLmdldEZvbnRGYW1pbHkoZWRpdG9yLmdldEJvZHkoKSwgZS5lbGVtZW50KTtcblxuXHRcdFx0XHRcdGVhY2goaXRlbXMsIGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGZvbnRGYW1pbHkudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IGl0ZW0udmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRlYWNoKGl0ZW1zLCBmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRcdFx0XHRpZiAoIXZhbHVlICYmIGdldEZpcnN0Rm9udChpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSBnZXRGaXJzdEZvbnQoZm9udEZhbWlseSkudG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IGl0ZW0udmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRzZWxmLnZhbHVlKHZhbHVlKTtcblxuXHRcdFx0XHRcdGlmICghdmFsdWUgJiYgZm9udEZhbWlseSkge1xuXHRcdFx0XHRcdFx0c2VsZi50ZXh0KGdldEZpcnN0Rm9udChmb250RmFtaWx5KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY3JlYXRlRm9udFNpemVMaXN0Qm94Q2hhbmdlSGFuZGxlcihpdGVtcykge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdFx0ZWRpdG9yLm9uKCdub2RlQ2hhbmdlJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdHZhciBweCwgcHQsIHZhbHVlID0gbnVsbDtcblxuXHRcdFx0XHRcdHB4ID0gRm9udEluZm8uZ2V0Rm9udFNpemUoZWRpdG9yLmdldEJvZHkoKSwgZS5lbGVtZW50KTtcblx0XHRcdFx0XHRwdCA9IEZvbnRJbmZvLnRvUHQocHgpO1xuXG5cdFx0XHRcdFx0ZWFjaChpdGVtcywgZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0udmFsdWUgPT09IHB4KSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gcHg7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0udmFsdWUgPT09IHB0KSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gcHQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRzZWxmLnZhbHVlKHZhbHVlKTtcblxuXHRcdFx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0XHRcdHNlbGYudGV4dChwdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY3JlYXRlRm9ybWF0cyhmb3JtYXRzKSB7XG5cdFx0XHRmb3JtYXRzID0gZm9ybWF0cy5yZXBsYWNlKC87JC8sICcnKS5zcGxpdCgnOycpO1xuXG5cdFx0XHR2YXIgaSA9IGZvcm1hdHMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRmb3JtYXRzW2ldID0gZm9ybWF0c1tpXS5zcGxpdCgnPScpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm9ybWF0cztcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjcmVhdGVGb3JtYXRNZW51KCkge1xuXHRcdFx0dmFyIGNvdW50ID0gMCwgbmV3Rm9ybWF0cyA9IFtdO1xuXG5cdFx0XHR2YXIgZGVmYXVsdFN0eWxlRm9ybWF0cyA9IFtcblx0XHRcdFx0e3RpdGxlOiAnSGVhZGluZ3MnLCBpdGVtczogW1xuXHRcdFx0XHRcdHt0aXRsZTogJ0hlYWRpbmcgMScsIGZvcm1hdDogJ2gxJ30sXG5cdFx0XHRcdFx0e3RpdGxlOiAnSGVhZGluZyAyJywgZm9ybWF0OiAnaDInfSxcblx0XHRcdFx0XHR7dGl0bGU6ICdIZWFkaW5nIDMnLCBmb3JtYXQ6ICdoMyd9LFxuXHRcdFx0XHRcdHt0aXRsZTogJ0hlYWRpbmcgNCcsIGZvcm1hdDogJ2g0J30sXG5cdFx0XHRcdFx0e3RpdGxlOiAnSGVhZGluZyA1JywgZm9ybWF0OiAnaDUnfSxcblx0XHRcdFx0XHR7dGl0bGU6ICdIZWFkaW5nIDYnLCBmb3JtYXQ6ICdoNid9XG5cdFx0XHRcdF19LFxuXG5cdFx0XHRcdHt0aXRsZTogJ0lubGluZScsIGl0ZW1zOiBbXG5cdFx0XHRcdFx0e3RpdGxlOiAnQm9sZCcsIGljb246ICdib2xkJywgZm9ybWF0OiAnYm9sZCd9LFxuXHRcdFx0XHRcdHt0aXRsZTogJ0l0YWxpYycsIGljb246ICdpdGFsaWMnLCBmb3JtYXQ6ICdpdGFsaWMnfSxcblx0XHRcdFx0XHR7dGl0bGU6ICdVbmRlcmxpbmUnLCBpY29uOiAndW5kZXJsaW5lJywgZm9ybWF0OiAndW5kZXJsaW5lJ30sXG5cdFx0XHRcdFx0e3RpdGxlOiAnU3RyaWtldGhyb3VnaCcsIGljb246ICdzdHJpa2V0aHJvdWdoJywgZm9ybWF0OiAnc3RyaWtldGhyb3VnaCd9LFxuXHRcdFx0XHRcdHt0aXRsZTogJ1N1cGVyc2NyaXB0JywgaWNvbjogJ3N1cGVyc2NyaXB0JywgZm9ybWF0OiAnc3VwZXJzY3JpcHQnfSxcblx0XHRcdFx0XHR7dGl0bGU6ICdTdWJzY3JpcHQnLCBpY29uOiAnc3Vic2NyaXB0JywgZm9ybWF0OiAnc3Vic2NyaXB0J30sXG5cdFx0XHRcdFx0e3RpdGxlOiAnQ29kZScsIGljb246ICdjb2RlJywgZm9ybWF0OiAnY29kZSd9XG5cdFx0XHRcdF19LFxuXG5cdFx0XHRcdHt0aXRsZTogJ0Jsb2NrcycsIGl0ZW1zOiBbXG5cdFx0XHRcdFx0e3RpdGxlOiAnUGFyYWdyYXBoJywgZm9ybWF0OiAncCd9LFxuXHRcdFx0XHRcdHt0aXRsZTogJ0Jsb2NrcXVvdGUnLCBmb3JtYXQ6ICdibG9ja3F1b3RlJ30sXG5cdFx0XHRcdFx0e3RpdGxlOiAnRGl2JywgZm9ybWF0OiAnZGl2J30sXG5cdFx0XHRcdFx0e3RpdGxlOiAnUHJlJywgZm9ybWF0OiAncHJlJ31cblx0XHRcdFx0XX0sXG5cblx0XHRcdFx0e3RpdGxlOiAnQWxpZ25tZW50JywgaXRlbXM6IFtcblx0XHRcdFx0XHR7dGl0bGU6ICdMZWZ0JywgaWNvbjogJ2FsaWdubGVmdCcsIGZvcm1hdDogJ2FsaWdubGVmdCd9LFxuXHRcdFx0XHRcdHt0aXRsZTogJ0NlbnRlcicsIGljb246ICdhbGlnbmNlbnRlcicsIGZvcm1hdDogJ2FsaWduY2VudGVyJ30sXG5cdFx0XHRcdFx0e3RpdGxlOiAnUmlnaHQnLCBpY29uOiAnYWxpZ25yaWdodCcsIGZvcm1hdDogJ2FsaWducmlnaHQnfSxcblx0XHRcdFx0XHR7dGl0bGU6ICdKdXN0aWZ5JywgaWNvbjogJ2FsaWduanVzdGlmeScsIGZvcm1hdDogJ2FsaWduanVzdGlmeSd9XG5cdFx0XHRcdF19XG5cdFx0XHRdO1xuXG5cdFx0XHRmdW5jdGlvbiBjcmVhdGVNZW51KGZvcm1hdHMpIHtcblx0XHRcdFx0dmFyIG1lbnUgPSBbXTtcblxuXHRcdFx0XHRpZiAoIWZvcm1hdHMpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlYWNoKGZvcm1hdHMsIGZ1bmN0aW9uKGZvcm1hdCkge1xuXHRcdFx0XHRcdHZhciBtZW51SXRlbSA9IHtcblx0XHRcdFx0XHRcdHRleHQ6IGZvcm1hdC50aXRsZSxcblx0XHRcdFx0XHRcdGljb246IGZvcm1hdC5pY29uXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChmb3JtYXQuaXRlbXMpIHtcblx0XHRcdFx0XHRcdG1lbnVJdGVtLm1lbnUgPSBjcmVhdGVNZW51KGZvcm1hdC5pdGVtcyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZhciBmb3JtYXROYW1lID0gZm9ybWF0LmZvcm1hdCB8fCBcImN1c3RvbVwiICsgY291bnQrKztcblxuXHRcdFx0XHRcdFx0aWYgKCFmb3JtYXQuZm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRcdGZvcm1hdC5uYW1lID0gZm9ybWF0TmFtZTtcblx0XHRcdFx0XHRcdFx0bmV3Rm9ybWF0cy5wdXNoKGZvcm1hdCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG1lbnVJdGVtLmZvcm1hdCA9IGZvcm1hdE5hbWU7XG5cdFx0XHRcdFx0XHRtZW51SXRlbS5jbWQgPSBmb3JtYXQuY21kO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1lbnUucHVzaChtZW51SXRlbSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBtZW51O1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBjcmVhdGVTdHlsZXNNZW51KCkge1xuXHRcdFx0XHR2YXIgbWVudTtcblxuXHRcdFx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLnN0eWxlX2Zvcm1hdHNfbWVyZ2UpIHtcblx0XHRcdFx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLnN0eWxlX2Zvcm1hdHMpIHtcblx0XHRcdFx0XHRcdG1lbnUgPSBjcmVhdGVNZW51KGRlZmF1bHRTdHlsZUZvcm1hdHMuY29uY2F0KGVkaXRvci5zZXR0aW5ncy5zdHlsZV9mb3JtYXRzKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lbnUgPSBjcmVhdGVNZW51KGRlZmF1bHRTdHlsZUZvcm1hdHMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtZW51ID0gY3JlYXRlTWVudShlZGl0b3Iuc2V0dGluZ3Muc3R5bGVfZm9ybWF0cyB8fCBkZWZhdWx0U3R5bGVGb3JtYXRzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtZW51O1xuXHRcdFx0fVxuXG5cdFx0XHRlZGl0b3Iub24oJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZWFjaChuZXdGb3JtYXRzLCBmdW5jdGlvbihmb3JtYXQpIHtcblx0XHRcdFx0XHRlZGl0b3IuZm9ybWF0dGVyLnJlZ2lzdGVyKGZvcm1hdC5uYW1lLCBmb3JtYXQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiAnbWVudScsXG5cdFx0XHRcdGl0ZW1zOiBjcmVhdGVTdHlsZXNNZW51KCksXG5cdFx0XHRcdG9uUG9zdFJlbmRlcjogZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGVkaXRvci5maXJlKCdyZW5kZXJGb3JtYXRzTWVudScsIHtjb250cm9sOiBlLmNvbnRyb2x9KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0aXRlbURlZmF1bHRzOiB7XG5cdFx0XHRcdFx0cHJldmlldzogdHJ1ZSxcblxuXHRcdFx0XHRcdHRleHRTdHlsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5zZXR0aW5ncy5mb3JtYXQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVkaXRvci5mb3JtYXR0ZXIuZ2V0Q3NzVGV4dCh0aGlzLnNldHRpbmdzLmZvcm1hdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdG9uUG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdFx0XHRcdHNlbGYucGFyZW50KCkub24oJ3Nob3cnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGZvcm1hdE5hbWUsIGNvbW1hbmQ7XG5cblx0XHRcdFx0XHRcdFx0Zm9ybWF0TmFtZSA9IHNlbGYuc2V0dGluZ3MuZm9ybWF0O1xuXHRcdFx0XHRcdFx0XHRpZiAoZm9ybWF0TmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYuZGlzYWJsZWQoIWVkaXRvci5mb3JtYXR0ZXIuY2FuQXBwbHkoZm9ybWF0TmFtZSkpO1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYuYWN0aXZlKGVkaXRvci5mb3JtYXR0ZXIubWF0Y2goZm9ybWF0TmFtZSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Y29tbWFuZCA9IHNlbGYuc2V0dGluZ3MuY21kO1xuXHRcdFx0XHRcdFx0XHRpZiAoY29tbWFuZCkge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYuYWN0aXZlKGVkaXRvci5xdWVyeUNvbW1hbmRTdGF0ZShjb21tYW5kKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRvbmNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmZvcm1hdCkge1xuXHRcdFx0XHRcdFx0XHR0b2dnbGVGb3JtYXQodGhpcy5zZXR0aW5ncy5mb3JtYXQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5zZXR0aW5ncy5jbWQpIHtcblx0XHRcdFx0XHRcdFx0ZWRpdG9yLmV4ZWNDb21tYW5kKHRoaXMuc2V0dGluZ3MuY21kKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Zm9ybWF0TWVudSA9IGNyZWF0ZUZvcm1hdE1lbnUoKTtcblxuXHRcdGZ1bmN0aW9uIGluaXRPblBvc3RSZW5kZXIobmFtZSkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdFx0Ly8gVE9ETzogRml4IHRoaXNcblx0XHRcdFx0aWYgKGVkaXRvci5mb3JtYXR0ZXIpIHtcblx0XHRcdFx0XHRlZGl0b3IuZm9ybWF0dGVyLmZvcm1hdENoYW5nZWQobmFtZSwgZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdFx0XHRcdHNlbGYuYWN0aXZlKHN0YXRlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlZGl0b3Iub24oJ2luaXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGVkaXRvci5mb3JtYXR0ZXIuZm9ybWF0Q2hhbmdlZChuYW1lLCBmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRzZWxmLmFjdGl2ZShzdGF0ZSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBTaW1wbGUgZm9ybWF0IGNvbnRyb2xzIDxjb250cm9sL2Zvcm1hdD46PFVJIHRleHQ+XG5cdFx0ZWFjaCh7XG5cdFx0XHRib2xkOiAnQm9sZCcsXG5cdFx0XHRpdGFsaWM6ICdJdGFsaWMnLFxuXHRcdFx0dW5kZXJsaW5lOiAnVW5kZXJsaW5lJyxcblx0XHRcdHN0cmlrZXRocm91Z2g6ICdTdHJpa2V0aHJvdWdoJyxcblx0XHRcdHN1YnNjcmlwdDogJ1N1YnNjcmlwdCcsXG5cdFx0XHRzdXBlcnNjcmlwdDogJ1N1cGVyc2NyaXB0J1xuXHRcdH0sIGZ1bmN0aW9uKHRleHQsIG5hbWUpIHtcblx0XHRcdGVkaXRvci5hZGRCdXR0b24obmFtZSwge1xuXHRcdFx0XHR0b29sdGlwOiB0ZXh0LFxuXHRcdFx0XHRvblBvc3RSZW5kZXI6IGluaXRPblBvc3RSZW5kZXIobmFtZSksXG5cdFx0XHRcdG9uY2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHRvZ2dsZUZvcm1hdChuYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBTaW1wbGUgY29tbWFuZCBjb250cm9scyA8Y29udHJvbD46WzxVSSB0ZXh0Piw8Q29tbWFuZD5dXG5cdFx0ZWFjaCh7XG5cdFx0XHRvdXRkZW50OiBbJ0RlY3JlYXNlIGluZGVudCcsICdPdXRkZW50J10sXG5cdFx0XHRpbmRlbnQ6IFsnSW5jcmVhc2UgaW5kZW50JywgJ0luZGVudCddLFxuXHRcdFx0Y3V0OiBbJ0N1dCcsICdDdXQnXSxcblx0XHRcdGNvcHk6IFsnQ29weScsICdDb3B5J10sXG5cdFx0XHRwYXN0ZTogWydQYXN0ZScsICdQYXN0ZSddLFxuXHRcdFx0aGVscDogWydIZWxwJywgJ21jZUhlbHAnXSxcblx0XHRcdHNlbGVjdGFsbDogWydTZWxlY3QgYWxsJywgJ1NlbGVjdEFsbCddLFxuXHRcdFx0cmVtb3ZlZm9ybWF0OiBbJ0NsZWFyIGZvcm1hdHRpbmcnLCAnUmVtb3ZlRm9ybWF0J10sXG5cdFx0XHR2aXN1YWxhaWQ6IFsnVmlzdWFsIGFpZHMnLCAnbWNlVG9nZ2xlVmlzdWFsQWlkJ10sXG5cdFx0XHRuZXdkb2N1bWVudDogWydOZXcgZG9jdW1lbnQnLCAnbWNlTmV3RG9jdW1lbnQnXVxuXHRcdH0sIGZ1bmN0aW9uKGl0ZW0sIG5hbWUpIHtcblx0XHRcdGVkaXRvci5hZGRCdXR0b24obmFtZSwge1xuXHRcdFx0XHR0b29sdGlwOiBpdGVtWzBdLFxuXHRcdFx0XHRjbWQ6IGl0ZW1bMV1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gU2ltcGxlIGNvbW1hbmQgY29udHJvbHMgd2l0aCBmb3JtYXQgc3RhdGVcblx0XHRlYWNoKHtcblx0XHRcdGJsb2NrcXVvdGU6IFsnQmxvY2txdW90ZScsICdtY2VCbG9ja1F1b3RlJ10sXG5cdFx0XHRzdWJzY3JpcHQ6IFsnU3Vic2NyaXB0JywgJ1N1YnNjcmlwdCddLFxuXHRcdFx0c3VwZXJzY3JpcHQ6IFsnU3VwZXJzY3JpcHQnLCAnU3VwZXJzY3JpcHQnXSxcblx0XHRcdGFsaWdubGVmdDogWydBbGlnbiBsZWZ0JywgJ0p1c3RpZnlMZWZ0J10sXG5cdFx0XHRhbGlnbmNlbnRlcjogWydBbGlnbiBjZW50ZXInLCAnSnVzdGlmeUNlbnRlciddLFxuXHRcdFx0YWxpZ25yaWdodDogWydBbGlnbiByaWdodCcsICdKdXN0aWZ5UmlnaHQnXSxcblx0XHRcdGFsaWduanVzdGlmeTogWydKdXN0aWZ5JywgJ0p1c3RpZnlGdWxsJ10sXG5cdFx0XHRhbGlnbm5vbmU6IFsnTm8gYWxpZ25tZW50JywgJ0p1c3RpZnlOb25lJ11cblx0XHR9LCBmdW5jdGlvbihpdGVtLCBuYW1lKSB7XG5cdFx0XHRlZGl0b3IuYWRkQnV0dG9uKG5hbWUsIHtcblx0XHRcdFx0dG9vbHRpcDogaXRlbVswXSxcblx0XHRcdFx0Y21kOiBpdGVtWzFdLFxuXHRcdFx0XHRvblBvc3RSZW5kZXI6IGluaXRPblBvc3RSZW5kZXIobmFtZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0ZnVuY3Rpb24gdG9nZ2xlVW5kb1JlZG9TdGF0ZSh0eXBlKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0XHRmdW5jdGlvbiBjaGVja1N0YXRlKCkge1xuXHRcdFx0XHRcdHZhciB0eXBlRm4gPSB0eXBlID09ICdyZWRvJyA/ICdoYXNSZWRvJyA6ICdoYXNVbmRvJztcblx0XHRcdFx0XHRyZXR1cm4gZWRpdG9yLnVuZG9NYW5hZ2VyID8gZWRpdG9yLnVuZG9NYW5hZ2VyW3R5cGVGbl0oKSA6IGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5kaXNhYmxlZCghY2hlY2tTdGF0ZSgpKTtcblx0XHRcdFx0ZWRpdG9yLm9uKCdVbmRvIFJlZG8gQWRkVW5kbyBUeXBpbmdVbmRvIENsZWFyVW5kb3MgU3dpdGNoTW9kZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNlbGYuZGlzYWJsZWQoZWRpdG9yLnJlYWRvbmx5IHx8ICFjaGVja1N0YXRlKCkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gdG9nZ2xlVmlzdWFsQWlkU3RhdGUoKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGVkaXRvci5vbignVmlzdWFsQWlkJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRzZWxmLmFjdGl2ZShlLmhhc1Zpc3VhbCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5hY3RpdmUoZWRpdG9yLmhhc1Zpc3VhbCk7XG5cdFx0fVxuXG5cdFx0dmFyIHRyaW1NZW51SXRlbXMgPSBmdW5jdGlvbiAobWVudUl0ZW1zKSB7XG5cdFx0XHR2YXIgb3V0cHV0TWVudUl0ZW1zID0gbWVudUl0ZW1zO1xuXG5cdFx0XHRpZiAob3V0cHV0TWVudUl0ZW1zLmxlbmd0aCA+IDAgJiYgb3V0cHV0TWVudUl0ZW1zWzBdLnRleHQgPT09ICctJykge1xuXHRcdFx0XHRvdXRwdXRNZW51SXRlbXMgPSBvdXRwdXRNZW51SXRlbXMuc2xpY2UoMSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvdXRwdXRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiBvdXRwdXRNZW51SXRlbXNbb3V0cHV0TWVudUl0ZW1zLmxlbmd0aCAtIDFdLnRleHQgPT09ICctJykge1xuXHRcdFx0XHRvdXRwdXRNZW51SXRlbXMgPSBvdXRwdXRNZW51SXRlbXMuc2xpY2UoMCwgb3V0cHV0TWVudUl0ZW1zLmxlbmd0aCAtIDEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb3V0cHV0TWVudUl0ZW1zO1xuXHRcdH07XG5cblx0XHR2YXIgY3JlYXRlQ3VzdG9tTWVudUl0ZW1zID0gZnVuY3Rpb24gKG5hbWVzKSB7XG5cdFx0XHR2YXIgaXRlbXMsIG5hbWVMaXN0O1xuXG5cdFx0XHRpZiAodHlwZW9mIG5hbWVzID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRuYW1lTGlzdCA9IG5hbWVzLnNwbGl0KCcgJyk7XG5cdFx0XHR9IGVsc2UgaWYgKFRvb2xzLmlzQXJyYXkobmFtZXMpKSB7XG5cdFx0XHRcdHJldHVybiBmbGF0dGVuKFRvb2xzLm1hcChuYW1lcywgY3JlYXRlQ3VzdG9tTWVudUl0ZW1zKSk7XG5cdFx0XHR9XG5cblx0XHRcdGl0ZW1zID0gVG9vbHMuZ3JlcChuYW1lTGlzdCwgZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIG5hbWUgPT09ICd8JyB8fCBuYW1lIGluIGVkaXRvci5tZW51SXRlbXM7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIFRvb2xzLm1hcChpdGVtcywgZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIG5hbWUgPT09ICd8JyA/IHt0ZXh0OiAnLSd9IDogZWRpdG9yLm1lbnVJdGVtc1tuYW1lXTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHR2YXIgY3JlYXRlQ29udGV4dE1lbnVJdGVtcyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdFx0XHR2YXIgb3V0cHV0TWVudUl0ZW1zID0gW3t0ZXh0OiAnLSd9XTtcblx0XHRcdHZhciBtZW51SXRlbXMgPSBUb29scy5ncmVwKGVkaXRvci5tZW51SXRlbXMsIGZ1bmN0aW9uIChtZW51SXRlbSkge1xuXHRcdFx0XHRyZXR1cm4gbWVudUl0ZW0uY29udGV4dCA9PT0gY29udGV4dDtcblx0XHRcdH0pO1xuXG5cdFx0XHRUb29scy5lYWNoKG1lbnVJdGVtcywgZnVuY3Rpb24gKG1lbnVJdGVtKSB7XG5cdFx0XHRcdGlmIChtZW51SXRlbS5zZXBhcmF0b3IgPT0gJ2JlZm9yZScpIHtcblx0XHRcdFx0XHRvdXRwdXRNZW51SXRlbXMucHVzaCh7dGV4dDogJ3wnfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobWVudUl0ZW0ucHJlcGVuZFRvQ29udGV4dCkge1xuXHRcdFx0XHRcdG91dHB1dE1lbnVJdGVtcy51bnNoaWZ0KG1lbnVJdGVtKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvdXRwdXRNZW51SXRlbXMucHVzaChtZW51SXRlbSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobWVudUl0ZW0uc2VwYXJhdG9yID09ICdhZnRlcicpIHtcblx0XHRcdFx0XHRvdXRwdXRNZW51SXRlbXMucHVzaCh7dGV4dDogJ3wnfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gb3V0cHV0TWVudUl0ZW1zO1xuXHRcdH07XG5cblx0XHR2YXIgY3JlYXRlSW5zZXJ0TWVudSA9IGZ1bmN0aW9uIChlZGl0b3JTZXR0aW5ncykge1xuXHRcdFx0aWYgKGVkaXRvclNldHRpbmdzLmluc2VydF9idXR0b25faXRlbXMpIHtcblx0XHRcdFx0cmV0dXJuIHRyaW1NZW51SXRlbXMoY3JlYXRlQ3VzdG9tTWVudUl0ZW1zKGVkaXRvclNldHRpbmdzLmluc2VydF9idXR0b25faXRlbXMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0cmltTWVudUl0ZW1zKGNyZWF0ZUNvbnRleHRNZW51SXRlbXMoJ2luc2VydCcpKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0ZWRpdG9yLmFkZEJ1dHRvbigndW5kbycsIHtcblx0XHRcdHRvb2x0aXA6ICdVbmRvJyxcblx0XHRcdG9uUG9zdFJlbmRlcjogdG9nZ2xlVW5kb1JlZG9TdGF0ZSgndW5kbycpLFxuXHRcdFx0Y21kOiAndW5kbydcblx0XHR9KTtcblxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ3JlZG8nLCB7XG5cdFx0XHR0b29sdGlwOiAnUmVkbycsXG5cdFx0XHRvblBvc3RSZW5kZXI6IHRvZ2dsZVVuZG9SZWRvU3RhdGUoJ3JlZG8nKSxcblx0XHRcdGNtZDogJ3JlZG8nXG5cdFx0fSk7XG5cblx0XHRlZGl0b3IuYWRkTWVudUl0ZW0oJ25ld2RvY3VtZW50Jywge1xuXHRcdFx0dGV4dDogJ05ldyBkb2N1bWVudCcsXG5cdFx0XHRpY29uOiAnbmV3ZG9jdW1lbnQnLFxuXHRcdFx0Y21kOiAnbWNlTmV3RG9jdW1lbnQnXG5cdFx0fSk7XG5cblx0XHRlZGl0b3IuYWRkTWVudUl0ZW0oJ3VuZG8nLCB7XG5cdFx0XHR0ZXh0OiAnVW5kbycsXG5cdFx0XHRpY29uOiAndW5kbycsXG5cdFx0XHRzaG9ydGN1dDogJ01ldGErWicsXG5cdFx0XHRvblBvc3RSZW5kZXI6IHRvZ2dsZVVuZG9SZWRvU3RhdGUoJ3VuZG8nKSxcblx0XHRcdGNtZDogJ3VuZG8nXG5cdFx0fSk7XG5cblx0XHRlZGl0b3IuYWRkTWVudUl0ZW0oJ3JlZG8nLCB7XG5cdFx0XHR0ZXh0OiAnUmVkbycsXG5cdFx0XHRpY29uOiAncmVkbycsXG5cdFx0XHRzaG9ydGN1dDogJ01ldGErWScsXG5cdFx0XHRvblBvc3RSZW5kZXI6IHRvZ2dsZVVuZG9SZWRvU3RhdGUoJ3JlZG8nKSxcblx0XHRcdGNtZDogJ3JlZG8nXG5cdFx0fSk7XG5cblx0XHRlZGl0b3IuYWRkTWVudUl0ZW0oJ3Zpc3VhbGFpZCcsIHtcblx0XHRcdHRleHQ6ICdWaXN1YWwgYWlkcycsXG5cdFx0XHRzZWxlY3RhYmxlOiB0cnVlLFxuXHRcdFx0b25Qb3N0UmVuZGVyOiB0b2dnbGVWaXN1YWxBaWRTdGF0ZSxcblx0XHRcdGNtZDogJ21jZVRvZ2dsZVZpc3VhbEFpZCdcblx0XHR9KTtcblxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ3JlbW92ZScsIHtcblx0XHRcdHRvb2x0aXA6ICdSZW1vdmUnLFxuXHRcdFx0aWNvbjogJ3JlbW92ZScsXG5cdFx0XHRjbWQ6ICdEZWxldGUnXG5cdFx0fSk7XG5cblx0XHRlZGl0b3IuYWRkQnV0dG9uKCdpbnNlcnQnLCB7XG5cdFx0XHR0eXBlOiAnbWVudWJ1dHRvbicsXG5cdFx0XHRpY29uOiAnaW5zZXJ0Jyxcblx0XHRcdG1lbnU6IFtdLFxuXHRcdFx0b25jcmVhdGVtZW51OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHRoaXMubWVudS5hZGQoY3JlYXRlSW5zZXJ0TWVudShlZGl0b3Iuc2V0dGluZ3MpKTtcblx0XHRcdFx0dGhpcy5tZW51LnJlbmRlck5ldygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZWFjaCh7XG5cdFx0XHRjdXQ6IFsnQ3V0JywgJ0N1dCcsICdNZXRhK1gnXSxcblx0XHRcdGNvcHk6IFsnQ29weScsICdDb3B5JywgJ01ldGErQyddLFxuXHRcdFx0cGFzdGU6IFsnUGFzdGUnLCAnUGFzdGUnLCAnTWV0YStWJ10sXG5cdFx0XHRzZWxlY3RhbGw6IFsnU2VsZWN0IGFsbCcsICdTZWxlY3RBbGwnLCAnTWV0YStBJ10sXG5cdFx0XHRib2xkOiBbJ0JvbGQnLCAnQm9sZCcsICdNZXRhK0InXSxcblx0XHRcdGl0YWxpYzogWydJdGFsaWMnLCAnSXRhbGljJywgJ01ldGErSSddLFxuXHRcdFx0dW5kZXJsaW5lOiBbJ1VuZGVybGluZScsICdVbmRlcmxpbmUnLCAnTWV0YStVJ10sXG5cdFx0XHRzdHJpa2V0aHJvdWdoOiBbJ1N0cmlrZXRocm91Z2gnLCAnU3RyaWtldGhyb3VnaCddLFxuXHRcdFx0c3Vic2NyaXB0OiBbJ1N1YnNjcmlwdCcsICdTdWJzY3JpcHQnXSxcblx0XHRcdHN1cGVyc2NyaXB0OiBbJ1N1cGVyc2NyaXB0JywgJ1N1cGVyc2NyaXB0J10sXG5cdFx0XHRyZW1vdmVmb3JtYXQ6IFsnQ2xlYXIgZm9ybWF0dGluZycsICdSZW1vdmVGb3JtYXQnXVxuXHRcdH0sIGZ1bmN0aW9uKGl0ZW0sIG5hbWUpIHtcblx0XHRcdGVkaXRvci5hZGRNZW51SXRlbShuYW1lLCB7XG5cdFx0XHRcdHRleHQ6IGl0ZW1bMF0sXG5cdFx0XHRcdGljb246IG5hbWUsXG5cdFx0XHRcdHNob3J0Y3V0OiBpdGVtWzJdLFxuXHRcdFx0XHRjbWQ6IGl0ZW1bMV1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0ZWRpdG9yLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbigpIHtcblx0XHRcdEZsb2F0UGFuZWwuaGlkZUFsbCgpO1xuXHRcdH0pO1xuXG5cdFx0ZnVuY3Rpb24gdG9nZ2xlRm9ybWF0KGZtdCkge1xuXHRcdFx0aWYgKGZtdC5jb250cm9sKSB7XG5cdFx0XHRcdGZtdCA9IGZtdC5jb250cm9sLnZhbHVlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChmbXQpIHtcblx0XHRcdFx0ZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VUb2dnbGVGb3JtYXQnLCBmYWxzZSwgZm10KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoaWRlTWVudU9iamVjdHMobWVudSkge1xuXHRcdFx0dmFyIGNvdW50ID0gbWVudS5sZW5ndGg7XG5cblx0XHRcdFRvb2xzLmVhY2gobWVudSwgZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdFx0aWYgKGl0ZW0ubWVudSkge1xuXHRcdFx0XHRcdGl0ZW0uaGlkZGVuID0gaGlkZU1lbnVPYmplY3RzKGl0ZW0ubWVudSkgPT09IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZm9ybWF0TmFtZSA9IGl0ZW0uZm9ybWF0O1xuXHRcdFx0XHRpZiAoZm9ybWF0TmFtZSkge1xuXHRcdFx0XHRcdGl0ZW0uaGlkZGVuID0gIWVkaXRvci5mb3JtYXR0ZXIuY2FuQXBwbHkoZm9ybWF0TmFtZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaXRlbS5oaWRkZW4pIHtcblx0XHRcdFx0XHRjb3VudC0tO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGNvdW50O1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhpZGVGb3JtYXRNZW51SXRlbXMobWVudSkge1xuXHRcdFx0dmFyIGNvdW50ID0gbWVudS5pdGVtcygpLmxlbmd0aDtcblxuXHRcdFx0bWVudS5pdGVtcygpLmVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdFx0aWYgKGl0ZW0ubWVudSkge1xuXHRcdFx0XHRcdGl0ZW0udmlzaWJsZShoaWRlRm9ybWF0TWVudUl0ZW1zKGl0ZW0ubWVudSkgPiAwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghaXRlbS5tZW51ICYmIGl0ZW0uc2V0dGluZ3MubWVudSkge1xuXHRcdFx0XHRcdGl0ZW0udmlzaWJsZShoaWRlTWVudU9iamVjdHMoaXRlbS5zZXR0aW5ncy5tZW51KSA+IDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGZvcm1hdE5hbWUgPSBpdGVtLnNldHRpbmdzLmZvcm1hdDtcblx0XHRcdFx0aWYgKGZvcm1hdE5hbWUpIHtcblx0XHRcdFx0XHRpdGVtLnZpc2libGUoZWRpdG9yLmZvcm1hdHRlci5jYW5BcHBseShmb3JtYXROYW1lKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWl0ZW0udmlzaWJsZSgpKSB7XG5cdFx0XHRcdFx0Y291bnQtLTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBjb3VudDtcblx0XHR9XG5cblx0XHRlZGl0b3IuYWRkQnV0dG9uKCdzdHlsZXNlbGVjdCcsIHtcblx0XHRcdHR5cGU6ICdtZW51YnV0dG9uJyxcblx0XHRcdHRleHQ6ICdGb3JtYXRzJyxcblx0XHRcdG1lbnU6IGZvcm1hdE1lbnUsXG5cdFx0XHRvblNob3dNZW51OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChlZGl0b3Iuc2V0dGluZ3Muc3R5bGVfZm9ybWF0c19hdXRvaGlkZSkge1xuXHRcdFx0XHRcdGhpZGVGb3JtYXRNZW51SXRlbXModGhpcy5tZW51KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZWRpdG9yLmFkZEJ1dHRvbignZm9ybWF0c2VsZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaXRlbXMgPSBbXSwgYmxvY2tzID0gY3JlYXRlRm9ybWF0cyhlZGl0b3Iuc2V0dGluZ3MuYmxvY2tfZm9ybWF0cyB8fFxuXHRcdFx0XHQnUGFyYWdyYXBoPXA7JyArXG5cdFx0XHRcdCdIZWFkaW5nIDE9aDE7JyArXG5cdFx0XHRcdCdIZWFkaW5nIDI9aDI7JyArXG5cdFx0XHRcdCdIZWFkaW5nIDM9aDM7JyArXG5cdFx0XHRcdCdIZWFkaW5nIDQ9aDQ7JyArXG5cdFx0XHRcdCdIZWFkaW5nIDU9aDU7JyArXG5cdFx0XHRcdCdIZWFkaW5nIDY9aDY7JyArXG5cdFx0XHRcdCdQcmVmb3JtYXR0ZWQ9cHJlJ1xuXHRcdFx0KTtcblxuXHRcdFx0ZWFjaChibG9ja3MsIGZ1bmN0aW9uKGJsb2NrKSB7XG5cdFx0XHRcdGl0ZW1zLnB1c2goe1xuXHRcdFx0XHRcdHRleHQ6IGJsb2NrWzBdLFxuXHRcdFx0XHRcdHZhbHVlOiBibG9ja1sxXSxcblx0XHRcdFx0XHR0ZXh0U3R5bGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVkaXRvci5mb3JtYXR0ZXIuZ2V0Q3NzVGV4dChibG9ja1sxXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiAnbGlzdGJveCcsXG5cdFx0XHRcdHRleHQ6IGJsb2Nrc1swXVswXSxcblx0XHRcdFx0dmFsdWVzOiBpdGVtcyxcblx0XHRcdFx0Zml4ZWRXaWR0aDogdHJ1ZSxcblx0XHRcdFx0b25zZWxlY3Q6IHRvZ2dsZUZvcm1hdCxcblx0XHRcdFx0b25Qb3N0UmVuZGVyOiBjcmVhdGVMaXN0Qm94Q2hhbmdlSGFuZGxlcihpdGVtcylcblx0XHRcdH07XG5cdFx0fSk7XG5cblx0XHRlZGl0b3IuYWRkQnV0dG9uKCdmb250c2VsZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVmYXVsdEZvbnRzRm9ybWF0cyA9XG5cdFx0XHRcdCdBbmRhbGUgTW9ubz1hbmRhbGUgbW9ubyxtb25vc3BhY2U7JyArXG5cdFx0XHRcdCdBcmlhbD1hcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsnICtcblx0XHRcdFx0J0FyaWFsIEJsYWNrPWFyaWFsIGJsYWNrLHNhbnMtc2VyaWY7JyArXG5cdFx0XHRcdCdCb29rIEFudGlxdWE9Ym9vayBhbnRpcXVhLHBhbGF0aW5vLHNlcmlmOycgK1xuXHRcdFx0XHQnQ29taWMgU2FucyBNUz1jb21pYyBzYW5zIG1zLHNhbnMtc2VyaWY7JyArXG5cdFx0XHRcdCdDb3VyaWVyIE5ldz1jb3VyaWVyIG5ldyxjb3VyaWVyLG1vbm9zcGFjZTsnICtcblx0XHRcdFx0J0dlb3JnaWE9Z2VvcmdpYSxwYWxhdGlubyxzZXJpZjsnICtcblx0XHRcdFx0J0hlbHZldGljYT1oZWx2ZXRpY2EsYXJpYWwsc2Fucy1zZXJpZjsnICtcblx0XHRcdFx0J0ltcGFjdD1pbXBhY3Qsc2Fucy1zZXJpZjsnICtcblx0XHRcdFx0J1N5bWJvbD1zeW1ib2w7JyArXG5cdFx0XHRcdCdUYWhvbWE9dGFob21hLGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmOycgK1xuXHRcdFx0XHQnVGVybWluYWw9dGVybWluYWwsbW9uYWNvLG1vbm9zcGFjZTsnICtcblx0XHRcdFx0J1RpbWVzIE5ldyBSb21hbj10aW1lcyBuZXcgcm9tYW4sdGltZXMsc2VyaWY7JyArXG5cdFx0XHRcdCdUcmVidWNoZXQgTVM9dHJlYnVjaGV0IG1zLGdlbmV2YSxzYW5zLXNlcmlmOycgK1xuXHRcdFx0XHQnVmVyZGFuYT12ZXJkYW5hLGdlbmV2YSxzYW5zLXNlcmlmOycgK1xuXHRcdFx0XHQnV2ViZGluZ3M9d2ViZGluZ3M7JyArXG5cdFx0XHRcdCdXaW5nZGluZ3M9d2luZ2RpbmdzLHphcGYgZGluZ2JhdHMnO1xuXG5cdFx0XHR2YXIgaXRlbXMgPSBbXSwgZm9udHMgPSBjcmVhdGVGb3JtYXRzKGVkaXRvci5zZXR0aW5ncy5mb250X2Zvcm1hdHMgfHwgZGVmYXVsdEZvbnRzRm9ybWF0cyk7XG5cblx0XHRcdGVhY2goZm9udHMsIGZ1bmN0aW9uKGZvbnQpIHtcblx0XHRcdFx0aXRlbXMucHVzaCh7XG5cdFx0XHRcdFx0dGV4dDoge3JhdzogZm9udFswXX0sXG5cdFx0XHRcdFx0dmFsdWU6IGZvbnRbMV0sXG5cdFx0XHRcdFx0dGV4dFN0eWxlOiBmb250WzFdLmluZGV4T2YoJ2RpbmdzJykgPT0gLTEgPyAnZm9udC1mYW1pbHk6JyArIGZvbnRbMV0gOiAnJ1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiAnbGlzdGJveCcsXG5cdFx0XHRcdHRleHQ6ICdGb250IEZhbWlseScsXG5cdFx0XHRcdHRvb2x0aXA6ICdGb250IEZhbWlseScsXG5cdFx0XHRcdHZhbHVlczogaXRlbXMsXG5cdFx0XHRcdGZpeGVkV2lkdGg6IHRydWUsXG5cdFx0XHRcdG9uUG9zdFJlbmRlcjogY3JlYXRlRm9udE5hbWVMaXN0Qm94Q2hhbmdlSGFuZGxlcihpdGVtcyksXG5cdFx0XHRcdG9uc2VsZWN0OiBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0aWYgKGUuY29udHJvbC5zZXR0aW5ncy52YWx1ZSkge1xuXHRcdFx0XHRcdFx0ZWRpdG9yLmV4ZWNDb21tYW5kKCdGb250TmFtZScsIGZhbHNlLCBlLmNvbnRyb2wuc2V0dGluZ3MudmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ2ZvbnRzaXplc2VsZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaXRlbXMgPSBbXSwgZGVmYXVsdEZvbnRzaXplRm9ybWF0cyA9ICc4cHQgMTBwdCAxMnB0IDE0cHQgMThwdCAyNHB0IDM2cHQnO1xuXHRcdFx0dmFyIGZvbnRzaXplX2Zvcm1hdHMgPSBlZGl0b3Iuc2V0dGluZ3MuZm9udHNpemVfZm9ybWF0cyB8fCBkZWZhdWx0Rm9udHNpemVGb3JtYXRzO1xuXG5cdFx0XHRlYWNoKGZvbnRzaXplX2Zvcm1hdHMuc3BsaXQoJyAnKSwgZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHR2YXIgdGV4dCA9IGl0ZW0sIHZhbHVlID0gaXRlbTtcblx0XHRcdFx0Ly8gQWxsb3cgdGV4dD12YWx1ZSBmb250IHNpemVzLlxuXHRcdFx0XHR2YXIgdmFsdWVzID0gaXRlbS5zcGxpdCgnPScpO1xuXHRcdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0ZXh0ID0gdmFsdWVzWzBdO1xuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWVzWzFdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGl0ZW1zLnB1c2goe3RleHQ6IHRleHQsIHZhbHVlOiB2YWx1ZX0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6ICdsaXN0Ym94Jyxcblx0XHRcdFx0dGV4dDogJ0ZvbnQgU2l6ZXMnLFxuXHRcdFx0XHR0b29sdGlwOiAnRm9udCBTaXplcycsXG5cdFx0XHRcdHZhbHVlczogaXRlbXMsXG5cdFx0XHRcdGZpeGVkV2lkdGg6IHRydWUsXG5cdFx0XHRcdG9uUG9zdFJlbmRlcjogY3JlYXRlRm9udFNpemVMaXN0Qm94Q2hhbmdlSGFuZGxlcihpdGVtcyksXG5cdFx0XHRcdG9uY2xpY2s6IGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRpZiAoZS5jb250cm9sLnNldHRpbmdzLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHRlZGl0b3IuZXhlY0NvbW1hbmQoJ0ZvbnRTaXplJywgZmFsc2UsIGUuY29udHJvbC5zZXR0aW5ncy52YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdFx0ZWRpdG9yLmFkZE1lbnVJdGVtKCdmb3JtYXRzJywge1xuXHRcdFx0dGV4dDogJ0Zvcm1hdHMnLFxuXHRcdFx0bWVudTogZm9ybWF0TWVudVxuXHRcdH0pO1xuXHR9XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0dyaWRMYXlvdXQuanNcblxuLyoqXG4gKiBHcmlkTGF5b3V0LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBsYXlvdXQgbWFuYWdlciBwbGFjZXMgY29udHJvbHMgaW4gYSBncmlkLlxuICpcbiAqIEBzZXR0aW5nIHtOdW1iZXJ9IHNwYWNpbmcgU3BhY2luZyBiZXR3ZWVuIGNvbnRyb2xzLlxuICogQHNldHRpbmcge051bWJlcn0gc3BhY2luZ0ggSG9yaXpvbnRhbCBzcGFjaW5nIGJldHdlZW4gY29udHJvbHMuXG4gKiBAc2V0dGluZyB7TnVtYmVyfSBzcGFjaW5nViBWZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gY29udHJvbHMuXG4gKiBAc2V0dGluZyB7TnVtYmVyfSBjb2x1bW5zIE51bWJlciBvZiBjb2x1bW5zIHRvIHVzZS5cbiAqIEBzZXR0aW5nIHtTdHJpbmcvQXJyYXl9IGFsaWduSCBzdGFydHxlbmR8Y2VudGVyfHN0cmV0Y2ggb3IgYXJyYXkgb2YgdmFsdWVzIGZvciBlYWNoIGNvbHVtbi5cbiAqIEBzZXR0aW5nIHtTdHJpbmcvQXJyYXl9IGFsaWduViBzdGFydHxlbmR8Y2VudGVyfHN0cmV0Y2ggb3IgYXJyYXkgb2YgdmFsdWVzIGZvciBlYWNoIGNvbHVtbi5cbiAqIEBzZXR0aW5nIHtTdHJpbmd9IHBhY2sgc3RhcnR8ZW5kXG4gKlxuICogQGNsYXNzIHRpbnltY2UudWkuR3JpZExheW91dFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5BYnNvbHV0ZUxheW91dFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL0dyaWRMYXlvdXRcIiwgW1xuXHRcInRpbnltY2UvdWkvQWJzb2x1dGVMYXlvdXRcIlxuXSwgZnVuY3Rpb24oQWJzb2x1dGVMYXlvdXQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIEFic29sdXRlTGF5b3V0LmV4dGVuZCh7XG5cdFx0LyoqXG5cdFx0ICogUmVjYWxjdWxhdGVzIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGNvbnRyb2xzIGluIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZWNhbGNcblx0XHQgKiBAcGFyYW0ge3RpbnltY2UudWkuQ29udGFpbmVyfSBjb250YWluZXIgQ29udGFpbmVyIGluc3RhbmNlIHRvIHJlY2FsYy5cblx0XHQgKi9cblx0XHRyZWNhbGM6IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuXHRcdFx0dmFyIHNldHRpbmdzLCByb3dzLCBjb2xzLCBpdGVtcywgY29udExheW91dFJlY3QsIHdpZHRoLCBoZWlnaHQsIHJlY3QsXG5cdFx0XHRcdGN0cmxMYXlvdXRSZWN0LCBjdHJsLCB4LCB5LCBwb3NYLCBwb3NZLCBjdHJsU2V0dGluZ3MsIGNvbnRQYWRkaW5nQm94LCBhbGlnbiwgc3BhY2luZ0gsIHNwYWNpbmdWLCBhbGlnbkgsIGFsaWduViwgbWF4WCwgbWF4WSxcblx0XHRcdFx0Y29sV2lkdGhzID0gW10sIHJvd0hlaWdodHMgPSBbXSwgY3RybE1pbldpZHRoLCBjdHJsTWluSGVpZ2h0LCBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0LCByZXZlcnNlUm93cywgaWR4O1xuXG5cdFx0XHQvLyBHZXQgbGF5b3V0IHNldHRpbmdzXG5cdFx0XHRzZXR0aW5ncyA9IGNvbnRhaW5lci5zZXR0aW5ncztcblx0XHRcdGl0ZW1zID0gY29udGFpbmVyLml0ZW1zKCkuZmlsdGVyKCc6dmlzaWJsZScpO1xuXHRcdFx0Y29udExheW91dFJlY3QgPSBjb250YWluZXIubGF5b3V0UmVjdCgpO1xuXHRcdFx0Y29scyA9IHNldHRpbmdzLmNvbHVtbnMgfHwgTWF0aC5jZWlsKE1hdGguc3FydChpdGVtcy5sZW5ndGgpKTtcblx0XHRcdHJvd3MgPSBNYXRoLmNlaWwoaXRlbXMubGVuZ3RoIC8gY29scyk7XG5cdFx0XHRzcGFjaW5nSCA9IHNldHRpbmdzLnNwYWNpbmdIIHx8IHNldHRpbmdzLnNwYWNpbmcgfHwgMDtcblx0XHRcdHNwYWNpbmdWID0gc2V0dGluZ3Muc3BhY2luZ1YgfHwgc2V0dGluZ3Muc3BhY2luZyB8fCAwO1xuXHRcdFx0YWxpZ25IID0gc2V0dGluZ3MuYWxpZ25IIHx8IHNldHRpbmdzLmFsaWduO1xuXHRcdFx0YWxpZ25WID0gc2V0dGluZ3MuYWxpZ25WIHx8IHNldHRpbmdzLmFsaWduO1xuXHRcdFx0Y29udFBhZGRpbmdCb3ggPSBjb250YWluZXIucGFkZGluZ0JveDtcblx0XHRcdHJldmVyc2VSb3dzID0gJ3JldmVyc2VSb3dzJyBpbiBzZXR0aW5ncyA/IHNldHRpbmdzLnJldmVyc2VSb3dzIDogY29udGFpbmVyLmlzUnRsKCk7XG5cblx0XHRcdGlmIChhbGlnbkggJiYgdHlwZW9mIGFsaWduSCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGFsaWduSCA9IFthbGlnbkhdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWxpZ25WICYmIHR5cGVvZiBhbGlnblYgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRhbGlnblYgPSBbYWxpZ25WXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gWmVybyBwYWRkIGNvbHVtbldpZHRoc1xuXHRcdFx0Zm9yICh4ID0gMDsgeCA8IGNvbHM7IHgrKykge1xuXHRcdFx0XHRjb2xXaWR0aHMucHVzaCgwKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gWmVybyBwYWRkIHJvd0hlaWdodHNcblx0XHRcdGZvciAoeSA9IDA7IHkgPCByb3dzOyB5KyspIHtcblx0XHRcdFx0cm93SGVpZ2h0cy5wdXNoKDApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgY29sdW1uV2lkdGhzIGFuZCByb3dIZWlnaHRzXG5cdFx0XHRmb3IgKHkgPSAwOyB5IDwgcm93czsgeSsrKSB7XG5cdFx0XHRcdGZvciAoeCA9IDA7IHggPCBjb2xzOyB4KyspIHtcblx0XHRcdFx0XHRjdHJsID0gaXRlbXNbeSAqIGNvbHMgKyB4XTtcblxuXHRcdFx0XHRcdC8vIE91dCBvZiBib3VuZHNcblx0XHRcdFx0XHRpZiAoIWN0cmwpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGN0cmxMYXlvdXRSZWN0ID0gY3RybC5sYXlvdXRSZWN0KCk7XG5cdFx0XHRcdFx0Y3RybE1pbldpZHRoID0gY3RybExheW91dFJlY3QubWluVztcblx0XHRcdFx0XHRjdHJsTWluSGVpZ2h0ID0gY3RybExheW91dFJlY3QubWluSDtcblxuXHRcdFx0XHRcdGNvbFdpZHRoc1t4XSA9IGN0cmxNaW5XaWR0aCA+IGNvbFdpZHRoc1t4XSA/IGN0cmxNaW5XaWR0aCA6IGNvbFdpZHRoc1t4XTtcblx0XHRcdFx0XHRyb3dIZWlnaHRzW3ldID0gY3RybE1pbkhlaWdodCA+IHJvd0hlaWdodHNbeV0gPyBjdHJsTWluSGVpZ2h0IDogcm93SGVpZ2h0c1t5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgbWF4WFxuXHRcdFx0YXZhaWxhYmxlV2lkdGggPSBjb250TGF5b3V0UmVjdC5pbm5lclcgLSBjb250UGFkZGluZ0JveC5sZWZ0IC0gY29udFBhZGRpbmdCb3gucmlnaHQ7XG5cdFx0XHRmb3IgKG1heFggPSAwLCB4ID0gMDsgeCA8IGNvbHM7IHgrKykge1xuXHRcdFx0XHRtYXhYICs9IGNvbFdpZHRoc1t4XSArICh4ID4gMCA/IHNwYWNpbmdIIDogMCk7XG5cdFx0XHRcdGF2YWlsYWJsZVdpZHRoIC09ICh4ID4gMCA/IHNwYWNpbmdIIDogMCkgKyBjb2xXaWR0aHNbeF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGN1bGF0ZSBtYXhZXG5cdFx0XHRhdmFpbGFibGVIZWlnaHQgPSBjb250TGF5b3V0UmVjdC5pbm5lckggLSBjb250UGFkZGluZ0JveC50b3AgLSBjb250UGFkZGluZ0JveC5ib3R0b207XG5cdFx0XHRmb3IgKG1heFkgPSAwLCB5ID0gMDsgeSA8IHJvd3M7IHkrKykge1xuXHRcdFx0XHRtYXhZICs9IHJvd0hlaWdodHNbeV0gKyAoeSA+IDAgPyBzcGFjaW5nViA6IDApO1xuXHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgLT0gKHkgPiAwID8gc3BhY2luZ1YgOiAwKSArIHJvd0hlaWdodHNbeV07XG5cdFx0XHR9XG5cblx0XHRcdG1heFggKz0gY29udFBhZGRpbmdCb3gubGVmdCArIGNvbnRQYWRkaW5nQm94LnJpZ2h0O1xuXHRcdFx0bWF4WSArPSBjb250UGFkZGluZ0JveC50b3AgKyBjb250UGFkZGluZ0JveC5ib3R0b207XG5cblx0XHRcdC8vIENhbGN1bGF0ZSBtaW5XL21pbkhcblx0XHRcdHJlY3QgPSB7fTtcblx0XHRcdHJlY3QubWluVyA9IG1heFggKyAoY29udExheW91dFJlY3QudyAtIGNvbnRMYXlvdXRSZWN0LmlubmVyVyk7XG5cdFx0XHRyZWN0Lm1pbkggPSBtYXhZICsgKGNvbnRMYXlvdXRSZWN0LmggLSBjb250TGF5b3V0UmVjdC5pbm5lckgpO1xuXG5cdFx0XHRyZWN0LmNvbnRlbnRXID0gcmVjdC5taW5XIC0gY29udExheW91dFJlY3QuZGVsdGFXO1xuXHRcdFx0cmVjdC5jb250ZW50SCA9IHJlY3QubWluSCAtIGNvbnRMYXlvdXRSZWN0LmRlbHRhSDtcblx0XHRcdHJlY3QubWluVyA9IE1hdGgubWluKHJlY3QubWluVywgY29udExheW91dFJlY3QubWF4Vyk7XG5cdFx0XHRyZWN0Lm1pbkggPSBNYXRoLm1pbihyZWN0Lm1pbkgsIGNvbnRMYXlvdXRSZWN0Lm1heEgpO1xuXHRcdFx0cmVjdC5taW5XID0gTWF0aC5tYXgocmVjdC5taW5XLCBjb250TGF5b3V0UmVjdC5zdGFydE1pbldpZHRoKTtcblx0XHRcdHJlY3QubWluSCA9IE1hdGgubWF4KHJlY3QubWluSCwgY29udExheW91dFJlY3Quc3RhcnRNaW5IZWlnaHQpO1xuXG5cdFx0XHQvLyBSZXNpemUgY29udGFpbmVyIGNvbnRhaW5lciBpZiBtaW5TaXplIHdhcyBjaGFuZ2VkXG5cdFx0XHRpZiAoY29udExheW91dFJlY3QuYXV0b1Jlc2l6ZSAmJiAocmVjdC5taW5XICE9IGNvbnRMYXlvdXRSZWN0Lm1pblcgfHwgcmVjdC5taW5IICE9IGNvbnRMYXlvdXRSZWN0Lm1pbkgpKSB7XG5cdFx0XHRcdHJlY3QudyA9IHJlY3QubWluVztcblx0XHRcdFx0cmVjdC5oID0gcmVjdC5taW5IO1xuXG5cdFx0XHRcdGNvbnRhaW5lci5sYXlvdXRSZWN0KHJlY3QpO1xuXHRcdFx0XHR0aGlzLnJlY2FsYyhjb250YWluZXIpO1xuXG5cdFx0XHRcdC8vIEZvcmNlZCByZWNhbGMgZm9yIGV4YW1wbGUgaWYgaXRlbXMgYXJlIGhpZGRlbi9zaG93blxuXHRcdFx0XHRpZiAoY29udGFpbmVyLl9sYXN0UmVjdCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdHZhciBwYXJlbnRDdHJsID0gY29udGFpbmVyLnBhcmVudCgpO1xuXHRcdFx0XHRcdGlmIChwYXJlbnRDdHJsKSB7XG5cdFx0XHRcdFx0XHRwYXJlbnRDdHJsLl9sYXN0UmVjdCA9IG51bGw7XG5cdFx0XHRcdFx0XHRwYXJlbnRDdHJsLnJlY2FsYygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXBkYXRlIGNvbnRlbnRXL2NvbnRlbnRIIHNvIGFic0VuZCBtb3ZlcyBjb3JyZWN0bHlcblx0XHRcdGlmIChjb250TGF5b3V0UmVjdC5hdXRvUmVzaXplKSB7XG5cdFx0XHRcdHJlY3QgPSBjb250YWluZXIubGF5b3V0UmVjdChyZWN0KTtcblx0XHRcdFx0cmVjdC5jb250ZW50VyA9IHJlY3QubWluVyAtIGNvbnRMYXlvdXRSZWN0LmRlbHRhVztcblx0XHRcdFx0cmVjdC5jb250ZW50SCA9IHJlY3QubWluSCAtIGNvbnRMYXlvdXRSZWN0LmRlbHRhSDtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGZsZXhWO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MucGFja1YgPT0gJ3N0YXJ0Jykge1xuXHRcdFx0XHRmbGV4ViA9IDA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmbGV4ViA9IGF2YWlsYWJsZUhlaWdodCA+IDAgPyBNYXRoLmZsb29yKGF2YWlsYWJsZUhlaWdodCAvIHJvd3MpIDogMDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRvdGFsRmxleFxuXHRcdFx0dmFyIHRvdGFsRmxleCA9IDA7XG5cdFx0XHR2YXIgZmxleFdpZHRocyA9IHNldHRpbmdzLmZsZXhXaWR0aHM7XG5cdFx0XHRpZiAoZmxleFdpZHRocykge1xuXHRcdFx0XHRmb3IgKHggPSAwOyB4IDwgZmxleFdpZHRocy5sZW5ndGg7IHgrKykge1xuXHRcdFx0XHRcdHRvdGFsRmxleCArPSBmbGV4V2lkdGhzW3hdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b3RhbEZsZXggPSBjb2xzO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxjdWxhdGUgbmV3IGNvbHVtbiB3aWR0aHMgYmFzZWQgb24gZmxleCB2YWx1ZXNcblx0XHRcdHZhciByYXRpbyA9IGF2YWlsYWJsZVdpZHRoIC8gdG90YWxGbGV4O1xuXHRcdFx0Zm9yICh4ID0gMDsgeCA8IGNvbHM7IHgrKykge1xuXHRcdFx0XHRjb2xXaWR0aHNbeF0gKz0gZmxleFdpZHRocyA/IGZsZXhXaWR0aHNbeF0gKiByYXRpbyA6IHJhdGlvO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNb3ZlL3Jlc2l6ZSBjb250cm9sc1xuXHRcdFx0cG9zWSA9IGNvbnRQYWRkaW5nQm94LnRvcDtcblx0XHRcdGZvciAoeSA9IDA7IHkgPCByb3dzOyB5KyspIHtcblx0XHRcdFx0cG9zWCA9IGNvbnRQYWRkaW5nQm94LmxlZnQ7XG5cdFx0XHRcdGhlaWdodCA9IHJvd0hlaWdodHNbeV0gKyBmbGV4VjtcblxuXHRcdFx0XHRmb3IgKHggPSAwOyB4IDwgY29sczsgeCsrKSB7XG5cdFx0XHRcdFx0aWYgKHJldmVyc2VSb3dzKSB7XG5cdFx0XHRcdFx0XHRpZHggPSB5ICogY29scyArIGNvbHMgLSAxIC0geDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWR4ID0geSAqIGNvbHMgKyB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGN0cmwgPSBpdGVtc1tpZHhdO1xuXG5cdFx0XHRcdFx0Ly8gTm8gbW9yZSBjb250cm9scyB0byByZW5kZXIgdGhlbiBicmVha1xuXHRcdFx0XHRcdGlmICghY3RybCkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gR2V0IGNvbnRyb2wgc2V0dGluZ3MgYW5kIGNhbGN1bGF0ZSB4LCB5XG5cdFx0XHRcdFx0Y3RybFNldHRpbmdzID0gY3RybC5zZXR0aW5ncztcblx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdCA9IGN0cmwubGF5b3V0UmVjdCgpO1xuXHRcdFx0XHRcdHdpZHRoID0gTWF0aC5tYXgoY29sV2lkdGhzW3hdLCBjdHJsTGF5b3V0UmVjdC5zdGFydE1pbldpZHRoKTtcblx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdC54ID0gcG9zWDtcblx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdC55ID0gcG9zWTtcblxuXHRcdFx0XHRcdC8vIEFsaWduIGNvbnRyb2wgaG9yaXpvbnRhbFxuXHRcdFx0XHRcdGFsaWduID0gY3RybFNldHRpbmdzLmFsaWduSCB8fCAoYWxpZ25IID8gKGFsaWduSFt4XSB8fCBhbGlnbkhbMF0pIDogbnVsbCk7XG5cdFx0XHRcdFx0aWYgKGFsaWduID09IFwiY2VudGVyXCIpIHtcblx0XHRcdFx0XHRcdGN0cmxMYXlvdXRSZWN0LnggPSBwb3NYICsgKHdpZHRoIC8gMikgLSAoY3RybExheW91dFJlY3QudyAvIDIpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYWxpZ24gPT0gXCJyaWdodFwiKSB7XG5cdFx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdC54ID0gcG9zWCArIHdpZHRoIC0gY3RybExheW91dFJlY3Qudztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFsaWduID09IFwic3RyZXRjaFwiKSB7XG5cdFx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdC53ID0gd2lkdGg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQWxpZ24gY29udHJvbCB2ZXJ0aWNhbFxuXHRcdFx0XHRcdGFsaWduID0gY3RybFNldHRpbmdzLmFsaWduViB8fCAoYWxpZ25WID8gKGFsaWduVlt4XSB8fCBhbGlnblZbMF0pIDogbnVsbCk7XG5cdFx0XHRcdFx0aWYgKGFsaWduID09IFwiY2VudGVyXCIpIHtcblx0XHRcdFx0XHRcdGN0cmxMYXlvdXRSZWN0LnkgPSBwb3NZICsgKGhlaWdodCAvIDIpIC0gKGN0cmxMYXlvdXRSZWN0LmggLyAyKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFsaWduID09IFwiYm90dG9tXCIpIHtcblx0XHRcdFx0XHRcdGN0cmxMYXlvdXRSZWN0LnkgPSBwb3NZICsgaGVpZ2h0IC0gY3RybExheW91dFJlY3QuaDtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFsaWduID09IFwic3RyZXRjaFwiKSB7XG5cdFx0XHRcdFx0XHRjdHJsTGF5b3V0UmVjdC5oID0gaGVpZ2h0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGN0cmwubGF5b3V0UmVjdChjdHJsTGF5b3V0UmVjdCk7XG5cblx0XHRcdFx0XHRwb3NYICs9IHdpZHRoICsgc3BhY2luZ0g7XG5cblx0XHRcdFx0XHRpZiAoY3RybC5yZWNhbGMpIHtcblx0XHRcdFx0XHRcdGN0cmwucmVjYWxjKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cG9zWSArPSBoZWlnaHQgKyBzcGFjaW5nVjtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9JZnJhbWUuanNcblxuLyoqXG4gKiBJZnJhbWUuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLypqc2hpbnQgc2NyaXB0dXJsOnRydWUgKi9cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGNyZWF0ZXMgYW4gaWZyYW1lLlxuICpcbiAqIEBzZXR0aW5nIHtTdHJpbmd9IHVybCBVcmwgdG8gb3BlbiBpbiB0aGUgaWZyYW1lLlxuICpcbiAqIEAteC1sZXNzIElmcmFtZS5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5JZnJhbWVcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuV2lkZ2V0XG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvSWZyYW1lXCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiLFxuXHRcInRpbnltY2UvdXRpbC9EZWxheVwiXG5dLCBmdW5jdGlvbihXaWRnZXQsIERlbGF5KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBXaWRnZXQuZXh0ZW5kKHtcblx0XHQvKipcblx0XHQgKiBSZW5kZXJzIHRoZSBjb250cm9sIGFzIGEgSFRNTCBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbmRlckh0bWxcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sLlxuXHRcdCAqL1xuXHRcdHJlbmRlckh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdpZnJhbWUnKTtcblx0XHRcdHNlbGYuY2FuRm9jdXMgPSBmYWxzZTtcblxuXHRcdFx0Lyplc2xpbnQgbm8tc2NyaXB0LXVybDowICovXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPGlmcmFtZSBpZD1cIicgKyBzZWxmLl9pZCArICdcIiBjbGFzcz1cIicgKyBzZWxmLmNsYXNzZXMgKyAnXCIgdGFiaW5kZXg9XCItMVwiIHNyYz1cIicgK1xuXHRcdFx0XHQoc2VsZi5zZXR0aW5ncy51cmwgfHwgXCJqYXZhc2NyaXB0OicnXCIpICsgJ1wiIGZyYW1lYm9yZGVyPVwiMFwiPjwvaWZyYW1lPidcblx0XHRcdCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldHRlciBmb3IgdGhlIGlmcmFtZSBzb3VyY2UuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNyY1xuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBzcmMgU291cmNlIFVSTCBmb3IgaWZyYW1lLlxuXHRcdCAqL1xuXHRcdHNyYzogZnVuY3Rpb24oc3JjKSB7XG5cdFx0XHR0aGlzLmdldEVsKCkuc3JjID0gc3JjO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbm5lciBIVE1MIGZvciB0aGUgaWZyYW1lLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBodG1sXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgSFRNTCBzdHJpbmcgdG8gc2V0IGFzIEhUTUwgaW5zaWRlIHRoZSBpZnJhbWUuXG5cdFx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3B0aW9uYWwgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBpZnJhbWUgYm9keSBpcyBmaWxsZWQgd2l0aCBjb250ZW50cy5cblx0XHQgKiBAcmV0dXJuIHt0aW55bWNlLnVpLklmcmFtZX0gQ3VycmVudCBpZnJhbWUgY29udHJvbC5cblx0XHQgKi9cblx0XHRodG1sOiBmdW5jdGlvbihodG1sLCBjYWxsYmFjaykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBib2R5ID0gdGhpcy5nZXRFbCgpLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuYm9keTtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgaWZyYW1lIHRvIGluaXRpYWxpemUgSUUgMTAgdGFrZXMgdGltZVxuXHRcdFx0aWYgKCFib2R5KSB7XG5cdFx0XHRcdERlbGF5LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5odG1sKGh0bWwpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJvZHkuaW5uZXJIVE1MID0gaHRtbDtcblxuXHRcdFx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL0luZm9Cb3guanNcblxuLyoqXG4gKiBJbmZvQm94LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTYgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogLi4uLlxuICpcbiAqIEAteC1sZXNzIEluZm9Cb3gubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuSW5mb0JveFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5XaWRnZXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9JbmZvQm94XCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiXG5dLCBmdW5jdGlvbihXaWRnZXQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIFdpZGdldC5leHRlbmQoe1xuXHRcdC8qKlxuXHRcdCAqIENvbnN0cnVjdHMgYSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKiBAc2V0dGluZyB7Qm9vbGVhbn0gbXVsdGlsaW5lIE11bHRpbGluZSBsYWJlbC5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCd3aWRnZXQnKS5hZGQoJ2luZm9ib3gnKTtcblx0XHRcdHNlbGYuY2FuRm9jdXMgPSBmYWxzZTtcblx0XHR9LFxuXG5cdFx0c2V2ZXJpdHk6IGZ1bmN0aW9uKGxldmVsKSB7XG5cdFx0XHR0aGlzLmNsYXNzZXMucmVtb3ZlKCdlcnJvcicpO1xuXHRcdFx0dGhpcy5jbGFzc2VzLnJlbW92ZSgnd2FybmluZycpO1xuXHRcdFx0dGhpcy5jbGFzc2VzLnJlbW92ZSgnc3VjY2VzcycpO1xuXHRcdFx0dGhpcy5jbGFzc2VzLmFkZChsZXZlbCk7XG5cdFx0fSxcblxuXHRcdGhlbHA6IGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHR0aGlzLnN0YXRlLnNldCgnaGVscCcsIHN0YXRlKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVuZGVycyB0aGUgY29udHJvbCBhcyBhIEhUTUwgc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJIdG1sXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBIVE1MIHJlcHJlc2VudGluZyB0aGUgY29udHJvbC5cblx0XHQgKi9cblx0XHRyZW5kZXJIdG1sOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeDtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0JzxkaXYgaWQ9XCInICsgc2VsZi5faWQgKyAnXCIgY2xhc3M9XCInICsgc2VsZi5jbGFzc2VzICsgJ1wiPicgK1xuXHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJy1ib2R5XCI+JyArXG5cdFx0XHRcdFx0XHRzZWxmLmVuY29kZShzZWxmLnN0YXRlLmdldCgndGV4dCcpKSArXG5cdFx0XHRcdFx0XHQnPGJ1dHRvbiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCInICsgcHJlZml4ICsgJ2ljbyAnICsgcHJlZml4ICsgJ2ktaGVscFwiPjwvaT4nICtcblx0XHRcdFx0XHRcdCc8L2J1dHRvbj4nICtcblx0XHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5zdGF0ZS5vbignY2hhbmdlOnRleHQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHNlbGYuZ2V0RWwoJ2JvZHknKS5maXJzdENoaWxkLmRhdGEgPSBzZWxmLmVuY29kZShlLnZhbHVlKTtcblxuXHRcdFx0XHRpZiAoc2VsZi5zdGF0ZS5nZXQoJ3JlbmRlcmVkJykpIHtcblx0XHRcdFx0XHRzZWxmLnVwZGF0ZUxheW91dFJlY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTpoZWxwJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMudG9nZ2xlKCdoYXMtaGVscCcsIGUudmFsdWUpO1xuXG5cdFx0XHRcdGlmIChzZWxmLnN0YXRlLmdldCgncmVuZGVyZWQnKSkge1xuXHRcdFx0XHRcdHNlbGYudXBkYXRlTGF5b3V0UmVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvTGFiZWwuanNcblxuLyoqXG4gKiBMYWJlbC5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhIGxhYmVsIGVsZW1lbnQuIEEgbGFiZWwgaXMgYSBzaW1wbGUgdGV4dCBjb250cm9sXG4gKiB0aGF0IGNhbiBiZSBib3VuZCB0byBvdGhlciBjb250cm9scy5cbiAqXG4gKiBALXgtbGVzcyBMYWJlbC5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5MYWJlbFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5XaWRnZXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9MYWJlbFwiLCBbXG5cdFwidGlueW1jZS91aS9XaWRnZXRcIixcblx0XCJ0aW55bWNlL3VpL0RvbVV0aWxzXCJcbl0sIGZ1bmN0aW9uKFdpZGdldCwgRG9tVXRpbHMpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIFdpZGdldC5leHRlbmQoe1xuXHRcdC8qKlxuXHRcdCAqIENvbnN0cnVjdHMgYSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKiBAc2V0dGluZyB7Qm9vbGVhbn0gbXVsdGlsaW5lIE11bHRpbGluZSBsYWJlbC5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCd3aWRnZXQnKS5hZGQoJ2xhYmVsJyk7XG5cdFx0XHRzZWxmLmNhbkZvY3VzID0gZmFsc2U7XG5cblx0XHRcdGlmIChzZXR0aW5ncy5tdWx0aWxpbmUpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnYXV0b3Njcm9sbCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3Muc3Ryb25nKSB7XG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ3N0cm9uZycpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbml0aWFsaXplcyB0aGUgY3VycmVudCBjb250cm9scyBsYXlvdXQgcmVjdC5cblx0XHQgKiBUaGlzIHdpbGwgYmUgZXhlY3V0ZWQgYnkgdGhlIGxheW91dCBtYW5hZ2VycyB0byBkZXRlcm1pbmUgdGhlXG5cdFx0ICogZGVmYXVsdCBtaW5XaWR0aC9taW5IZWlnaHQgZXRjLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBpbml0TGF5b3V0UmVjdFxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gTGF5b3V0IHJlY3QgaW5zdGFuY2UuXG5cdFx0ICovXG5cdFx0aW5pdExheW91dFJlY3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBsYXlvdXRSZWN0ID0gc2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0aWYgKHNlbGYuc2V0dGluZ3MubXVsdGlsaW5lKSB7XG5cdFx0XHRcdHZhciBzaXplID0gRG9tVXRpbHMuZ2V0U2l6ZShzZWxmLmdldEVsKCkpO1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSB0ZXh0IGZpdHMgd2l0aGluIG1heFcgaWYgbm90IHRoZW4gdHJ5IHdvcmQgd3JhcHBpbmcgaXRcblx0XHRcdFx0aWYgKHNpemUud2lkdGggPiBsYXlvdXRSZWN0Lm1heFcpIHtcblx0XHRcdFx0XHRsYXlvdXRSZWN0Lm1pblcgPSBsYXlvdXRSZWN0Lm1heFc7XG5cdFx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnbXVsdGlsaW5lJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxmLmdldEVsKCkuc3R5bGUud2lkdGggPSBsYXlvdXRSZWN0Lm1pblcgKyAncHgnO1xuXHRcdFx0XHRsYXlvdXRSZWN0LnN0YXJ0TWluSCA9IGxheW91dFJlY3QuaCA9IGxheW91dFJlY3QubWluSCA9IE1hdGgubWluKGxheW91dFJlY3QubWF4SCwgRG9tVXRpbHMuZ2V0U2l6ZShzZWxmLmdldEVsKCkpLmhlaWdodCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsYXlvdXRSZWN0O1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXBhaW50cyB0aGUgY29udHJvbCBhZnRlciBhIGxheW91dCBvcGVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlcGFpbnRcblx0XHQgKi9cblx0XHRyZXBhaW50OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKCFzZWxmLnNldHRpbmdzLm11bHRpbGluZSkge1xuXHRcdFx0XHRzZWxmLmdldEVsKCkuc3R5bGUubGluZUhlaWdodCA9IHNlbGYubGF5b3V0UmVjdCgpLmggKyAncHgnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0c2V2ZXJpdHk6IGZ1bmN0aW9uKGxldmVsKSB7XG5cdFx0XHR0aGlzLmNsYXNzZXMucmVtb3ZlKCdlcnJvcicpO1xuXHRcdFx0dGhpcy5jbGFzc2VzLnJlbW92ZSgnd2FybmluZycpO1xuXHRcdFx0dGhpcy5jbGFzc2VzLnJlbW92ZSgnc3VjY2VzcycpO1xuXHRcdFx0dGhpcy5jbGFzc2VzLmFkZChsZXZlbCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHRhcmdldEN0cmwsIGZvck5hbWUsIGZvcklkID0gc2VsZi5zZXR0aW5ncy5mb3JJZDtcblxuXHRcdFx0aWYgKCFmb3JJZCAmJiAoZm9yTmFtZSA9IHNlbGYuc2V0dGluZ3MuZm9yTmFtZSkpIHtcblx0XHRcdFx0dGFyZ2V0Q3RybCA9IHNlbGYuZ2V0Um9vdCgpLmZpbmQoJyMnICsgZm9yTmFtZSlbMF07XG5cblx0XHRcdFx0aWYgKHRhcmdldEN0cmwpIHtcblx0XHRcdFx0XHRmb3JJZCA9IHRhcmdldEN0cmwuX2lkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChmb3JJZCkge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdCc8bGFiZWwgaWQ9XCInICsgc2VsZi5faWQgKyAnXCIgY2xhc3M9XCInICsgc2VsZi5jbGFzc2VzICsgJ1wiJyArIChmb3JJZCA/ICcgZm9yPVwiJyArIGZvcklkICsgJ1wiJyA6ICcnKSArICc+JyArXG5cdFx0XHRcdFx0XHRzZWxmLmVuY29kZShzZWxmLnN0YXRlLmdldCgndGV4dCcpKSArXG5cdFx0XHRcdFx0JzwvbGFiZWw+J1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPHNwYW4gaWQ9XCInICsgc2VsZi5faWQgKyAnXCIgY2xhc3M9XCInICsgc2VsZi5jbGFzc2VzICsgJ1wiPicgK1xuXHRcdFx0XHRcdHNlbGYuZW5jb2RlKHNlbGYuc3RhdGUuZ2V0KCd0ZXh0JykpICtcblx0XHRcdFx0Jzwvc3Bhbj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5zdGF0ZS5vbignY2hhbmdlOnRleHQnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHNlbGYuaW5uZXJIdG1sKHNlbGYuZW5jb2RlKGUudmFsdWUpKTtcblxuXHRcdFx0XHRpZiAoc2VsZi5zdGF0ZS5nZXQoJ3JlbmRlcmVkJykpIHtcblx0XHRcdFx0XHRzZWxmLnVwZGF0ZUxheW91dFJlY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBzZWxmLl9zdXBlcigpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1Rvb2xiYXIuanNcblxuLyoqXG4gKiBUb29sYmFyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0b29sYmFyLlxuICpcbiAqIEBjbGFzcyB0aW55bWNlLnVpLlRvb2xiYXJcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuQ29udGFpbmVyXG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvVG9vbGJhclwiLCBbXG5cdFwidGlueW1jZS91aS9Db250YWluZXJcIlxuXSwgZnVuY3Rpb24oQ29udGFpbmVyKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBDb250YWluZXIuZXh0ZW5kKHtcblx0XHREZWZhdWx0czoge1xuXHRcdFx0cm9sZTogJ3Rvb2xiYXInLFxuXHRcdFx0bGF5b3V0OiAnZmxvdydcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuX3N1cGVyKHNldHRpbmdzKTtcblx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ3Rvb2xiYXInKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ2FsbGVkIGFmdGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIHJlbmRlcmVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwb3N0UmVuZGVyXG5cdFx0ICovXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuaXRlbXMoKS5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0Y3RybC5jbGFzc2VzLmFkZCgndG9vbGJhci1pdGVtJyk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvTWVudUJhci5qc1xuXG4vKipcbiAqIE1lbnVCYXIuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1lbnViYXIuXG4gKlxuICogQC14LWxlc3MgTWVudUJhci5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5NZW51QmFyXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkNvbnRhaW5lclxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL01lbnVCYXJcIiwgW1xuXHRcInRpbnltY2UvdWkvVG9vbGJhclwiXG5dLCBmdW5jdGlvbihUb29sYmFyKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBUb29sYmFyLmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdHJvbGU6ICdtZW51YmFyJyxcblx0XHRcdGNvbnRhaW5lckNsczogJ21lbnViYXInLFxuXHRcdFx0YXJpYVJvb3Q6IHRydWUsXG5cdFx0XHRkZWZhdWx0czoge1xuXHRcdFx0XHR0eXBlOiAnbWVudWJ1dHRvbidcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9NZW51QnV0dG9uLmpzXG5cbi8qKlxuICogTWVudUJ1dHRvbi5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgbWVudSBidXR0b24uXG4gKlxuICogQC14LWxlc3MgTWVudUJ1dHRvbi5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5NZW51QnV0dG9uXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkJ1dHRvblxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL01lbnVCdXR0b25cIiwgW1xuXHRcInRpbnltY2UvdWkvQnV0dG9uXCIsXG5cdFwidGlueW1jZS91aS9GYWN0b3J5XCIsXG5cdFwidGlueW1jZS91aS9NZW51QmFyXCJcbl0sIGZ1bmN0aW9uKEJ1dHRvbiwgRmFjdG9yeSwgTWVudUJhcikge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvLyBUT0RPOiBNYXliZSBhZGQgYXMgc29tZSBnbG9iYWwgZnVuY3Rpb25cblx0ZnVuY3Rpb24gaXNDaGlsZE9mKG5vZGUsIHBhcmVudCkge1xuXHRcdHdoaWxlIChub2RlKSB7XG5cdFx0XHRpZiAocGFyZW50ID09PSBub2RlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHZhciBNZW51QnV0dG9uID0gQnV0dG9uLmV4dGVuZCh7XG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqL1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuX3JlbmRlck9wZW4gPSB0cnVlO1xuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cdFx0XHRzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3M7XG5cblx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ21lbnVidG4nKTtcblxuXHRcdFx0aWYgKHNldHRpbmdzLmZpeGVkV2lkdGgpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnZml4ZWQtd2lkdGgnKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5hcmlhKCdoYXNwb3B1cCcsIHRydWUpO1xuXG5cdFx0XHRzZWxmLnN0YXRlLnNldCgnbWVudScsIHNldHRpbmdzLm1lbnUgfHwgc2VsZi5yZW5kZXIoKSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNob3dzIHRoZSBtZW51IGZvciB0aGUgYnV0dG9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzaG93TWVudVxuXHRcdCAqL1xuXHRcdHNob3dNZW51OiBmdW5jdGlvbih0b2dnbGUpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbWVudTtcblxuXHRcdFx0aWYgKHNlbGYubWVudSAmJiBzZWxmLm1lbnUudmlzaWJsZSgpICYmIHRvZ2dsZSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYuaGlkZU1lbnUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxmLm1lbnUpIHtcblx0XHRcdFx0bWVudSA9IHNlbGYuc3RhdGUuZ2V0KCdtZW51JykgfHwgW107XG5cblx0XHRcdFx0Ly8gSXMgbWVudSBhcnJheSB0aGVuIGF1dG8gY29uc3R1Y3QgbWVudSBjb250cm9sXG5cdFx0XHRcdGlmIChtZW51Lmxlbmd0aCkge1xuXHRcdFx0XHRcdG1lbnUgPSB7XG5cdFx0XHRcdFx0XHR0eXBlOiAnbWVudScsXG5cdFx0XHRcdFx0XHRpdGVtczogbWVudVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bWVudS50eXBlID0gbWVudS50eXBlIHx8ICdtZW51Jztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghbWVudS5yZW5kZXJUbykge1xuXHRcdFx0XHRcdHNlbGYubWVudSA9IEZhY3RvcnkuY3JlYXRlKG1lbnUpLnBhcmVudChzZWxmKS5yZW5kZXJUbygpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGYubWVudSA9IG1lbnUucGFyZW50KHNlbGYpLnNob3coKS5yZW5kZXJUbygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5maXJlKCdjcmVhdGVtZW51Jyk7XG5cdFx0XHRcdHNlbGYubWVudS5yZWZsb3coKTtcblx0XHRcdFx0c2VsZi5tZW51Lm9uKCdjYW5jZWwnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0aWYgKGUuY29udHJvbC5wYXJlbnQoKSA9PT0gc2VsZi5tZW51KSB7XG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0c2VsZi5mb2N1cygpO1xuXHRcdFx0XHRcdFx0c2VsZi5oaWRlTWVudSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gTW92ZSBmb2N1cyB0byBidXR0b24gd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC9jbGlja2VkXG5cdFx0XHRcdHNlbGYubWVudS5vbignc2VsZWN0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5mb2N1cygpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZWxmLm1lbnUub24oJ3Nob3cgaGlkZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRpZiAoZS5jb250cm9sID09IHNlbGYubWVudSkge1xuXHRcdFx0XHRcdFx0c2VsZi5hY3RpdmVNZW51KGUudHlwZSA9PSAnc2hvdycpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNlbGYuYXJpYSgnZXhwYW5kZWQnLCBlLnR5cGUgPT0gJ3Nob3cnKTtcblx0XHRcdFx0fSkuZmlyZSgnc2hvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLm1lbnUuc2hvdygpO1xuXHRcdFx0c2VsZi5tZW51LmxheW91dFJlY3Qoe3c6IHNlbGYubGF5b3V0UmVjdCgpLnd9KTtcblx0XHRcdHNlbGYubWVudS5tb3ZlUmVsKHNlbGYuZ2V0RWwoKSwgc2VsZi5pc1J0bCgpID8gWydici10cicsICd0ci1iciddIDogWydibC10bCcsICd0bC1ibCddKTtcblx0XHRcdHNlbGYuZmlyZSgnc2hvd21lbnUnKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSGlkZXMgdGhlIG1lbnUgZm9yIHRoZSBidXR0b24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGhpZGVNZW51XG5cdFx0ICovXG5cdFx0aGlkZU1lbnU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRpZiAoc2VsZi5tZW51KSB7XG5cdFx0XHRcdHNlbGYubWVudS5pdGVtcygpLmVhY2goZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmhpZGVNZW51KSB7XG5cdFx0XHRcdFx0XHRpdGVtLmhpZGVNZW51KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZWxmLm1lbnUuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBTZXRzIHRoZSBhY3RpdmUgbWVudSBzdGF0ZS5cblx0XHQgKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0YWN0aXZlTWVudTogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdHRoaXMuY2xhc3Nlcy50b2dnbGUoJ2FjdGl2ZScsIHN0YXRlKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVuZGVycyB0aGUgY29udHJvbCBhcyBhIEhUTUwgc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJIdG1sXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBIVE1MIHJlcHJlc2VudGluZyB0aGUgY29udHJvbC5cblx0XHQgKi9cblx0XHRyZW5kZXJIdG1sOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgaWQgPSBzZWxmLl9pZCwgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeDtcblx0XHRcdHZhciBpY29uID0gc2VsZi5zZXR0aW5ncy5pY29uLCBpbWFnZSwgdGV4dCA9IHNlbGYuc3RhdGUuZ2V0KCd0ZXh0JyksXG5cdFx0XHRcdHRleHRIdG1sID0gJyc7XG5cblx0XHRcdGltYWdlID0gc2VsZi5zZXR0aW5ncy5pbWFnZTtcblx0XHRcdGlmIChpbWFnZSkge1xuXHRcdFx0XHRpY29uID0gJ25vbmUnO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQgZm9yIFtoaWdoIGRwaSwgbG93IGRwaV0gaW1hZ2Ugc291cmNlc1xuXHRcdFx0XHRpZiAodHlwZW9mIGltYWdlICE9IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRpbWFnZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyBpbWFnZVswXSA6IGltYWdlWzFdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW1hZ2UgPSAnIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcJycgKyBpbWFnZSArICdcXCcpXCInO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aW1hZ2UgPSAnJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRleHQpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnYnRuLWhhcy10ZXh0Jyk7XG5cdFx0XHRcdHRleHRIdG1sID0gJzxzcGFuIGNsYXNzPVwiJyArIHByZWZpeCArICd0eHRcIj4nICsgc2VsZi5lbmNvZGUodGV4dCkgKyAnPC9zcGFuPic7XG5cdFx0XHR9XG5cblx0XHRcdGljb24gPSBzZWxmLnNldHRpbmdzLmljb24gPyBwcmVmaXggKyAnaWNvICcgKyBwcmVmaXggKyAnaS0nICsgaWNvbiA6ICcnO1xuXG5cdFx0XHRzZWxmLmFyaWEoJ3JvbGUnLCBzZWxmLnBhcmVudCgpIGluc3RhbmNlb2YgTWVudUJhciA/ICdtZW51aXRlbScgOiAnYnV0dG9uJyk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1sYWJlbGxlZGJ5PVwiJyArIGlkICsgJ1wiPicgK1xuXHRcdFx0XHRcdCc8YnV0dG9uIGlkPVwiJyArIGlkICsgJy1vcGVuXCIgcm9sZT1cInByZXNlbnRhdGlvblwiIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHQoaWNvbiA/ICc8aSBjbGFzcz1cIicgKyBpY29uICsgJ1wiJyArIGltYWdlICsgJz48L2k+JyA6ICcnKSArXG5cdFx0XHRcdFx0XHR0ZXh0SHRtbCArXG5cdFx0XHRcdFx0XHQnIDxpIGNsYXNzPVwiJyArIHByZWZpeCArICdjYXJldFwiPjwvaT4nICtcblx0XHRcdFx0XHQnPC9idXR0b24+JyArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBHZXRzIGludm9rZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmVuZGVyZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBvc3RSZW5kZXJcblx0XHQgKi9cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmIChlLmNvbnRyb2wgPT09IHNlbGYgJiYgaXNDaGlsZE9mKGUudGFyZ2V0LCBzZWxmLmdldEVsKCkpKSB7XG5cdFx0XHRcdFx0c2VsZi5mb2N1cygpO1xuXHRcdFx0XHRcdHNlbGYuc2hvd01lbnUoIWUuYXJpYSk7XG5cblx0XHRcdFx0XHRpZiAoZS5hcmlhKSB7XG5cdFx0XHRcdFx0XHRzZWxmLm1lbnUuaXRlbXMoKS5maWx0ZXIoJzp2aXNpYmxlJylbMF0uZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLm9uKCdtb3VzZWVudGVyJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHR2YXIgb3ZlckN0cmwgPSBlLmNvbnRyb2wsIHBhcmVudCA9IHNlbGYucGFyZW50KCksIGhhc1Zpc2libGVTaWJsaW5nTWVudTtcblxuXHRcdFx0XHRpZiAob3ZlckN0cmwgJiYgcGFyZW50ICYmIG92ZXJDdHJsIGluc3RhbmNlb2YgTWVudUJ1dHRvbiAmJiBvdmVyQ3RybC5wYXJlbnQoKSA9PSBwYXJlbnQpIHtcblx0XHRcdFx0XHRwYXJlbnQuaXRlbXMoKS5maWx0ZXIoJ01lbnVCdXR0b24nKS5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0XHRcdGlmIChjdHJsLmhpZGVNZW51ICYmIGN0cmwgIT0gb3ZlckN0cmwpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGN0cmwubWVudSAmJiBjdHJsLm1lbnUudmlzaWJsZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0aGFzVmlzaWJsZVNpYmxpbmdNZW51ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGN0cmwuaGlkZU1lbnUoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChoYXNWaXNpYmxlU2libGluZ01lbnUpIHtcblx0XHRcdFx0XHRcdG92ZXJDdHJsLmZvY3VzKCk7IC8vIEZpeCBmb3I6ICM1ODg3XG5cdFx0XHRcdFx0XHRvdmVyQ3RybC5zaG93TWVudSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBzZWxmLl9zdXBlcigpO1xuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5zdGF0ZS5vbignY2hhbmdlOm1lbnUnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKHNlbGYubWVudSkge1xuXHRcdFx0XHRcdHNlbGYubWVudS5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYubWVudSA9IG51bGw7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgdGhlIGNvbnRyb2wgYW5kIGl0J3MgbWVudXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbW92ZVxuXHRcdCAqL1xuXHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9zdXBlcigpO1xuXG5cdFx0XHRpZiAodGhpcy5tZW51KSB7XG5cdFx0XHRcdHRoaXMubWVudS5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBNZW51QnV0dG9uO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9NZW51SXRlbS5qc1xuXG4vKipcbiAqIE1lbnVJdGVtLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBtZW51IGl0ZW0uXG4gKlxuICogQC14LWxlc3MgTWVudUl0ZW0ubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuTWVudUl0ZW1cbiAqIEBleHRlbmRzIHRpbnltY2UudWkuQ29udHJvbFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL01lbnVJdGVtXCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiLFxuXHRcInRpbnltY2UvdWkvRmFjdG9yeVwiLFxuXHRcInRpbnltY2UvRW52XCIsXG5cdFwidGlueW1jZS91dGlsL0RlbGF5XCJcbl0sIGZ1bmN0aW9uKFdpZGdldCwgRmFjdG9yeSwgRW52LCBEZWxheSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gV2lkZ2V0LmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGJvcmRlcjogMCxcblx0XHRcdHJvbGU6ICdtZW51aXRlbSdcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQ29uc3RydWN0cyBhIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzZXR0aW5ncy5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyBOYW1lL3ZhbHVlIG9iamVjdCB3aXRoIHNldHRpbmdzLlxuXHRcdCAqIEBzZXR0aW5nIHtCb29sZWFufSBzZWxlY3RhYmxlIFNlbGVjdGFibGUgbWVudS5cblx0XHQgKiBAc2V0dGluZyB7QXJyYXl9IG1lbnUgU3VibWVudSBhcnJheSB3aXRoIGl0ZW1zLlxuXHRcdCAqIEBzZXR0aW5nIHtTdHJpbmd9IHNob3J0Y3V0IFNob3J0Y3V0IHRvIGRpc3BsYXkgZm9yIG1lbnUgaXRlbS4gRXhhbXBsZTogQ3RybCtYXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgdGV4dDtcblxuXHRcdFx0c2VsZi5fc3VwZXIoc2V0dGluZ3MpO1xuXG5cdFx0XHRzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3M7XG5cblx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ21lbnUtaXRlbScpO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MubWVudSkge1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdtZW51LWl0ZW0tZXhwYW5kJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5wcmV2aWV3KSB7XG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ21lbnUtaXRlbS1wcmV2aWV3Jyk7XG5cdFx0XHR9XG5cblx0XHRcdHRleHQgPSBzZWxmLnN0YXRlLmdldCgndGV4dCcpO1xuXHRcdFx0aWYgKHRleHQgPT09ICctJyB8fCB0ZXh0ID09PSAnfCcpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnbWVudS1pdGVtLXNlcCcpO1xuXHRcdFx0XHRzZWxmLmFyaWEoJ3JvbGUnLCAnc2VwYXJhdG9yJyk7XG5cdFx0XHRcdHNlbGYuc3RhdGUuc2V0KCd0ZXh0JywgJy0nKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLnNlbGVjdGFibGUpIHtcblx0XHRcdFx0c2VsZi5hcmlhKCdyb2xlJywgJ21lbnVpdGVtY2hlY2tib3gnKTtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnbWVudS1pdGVtLWNoZWNrYm94Jyk7XG5cdFx0XHRcdHNldHRpbmdzLmljb24gPSAnc2VsZWN0ZWQnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXNldHRpbmdzLnByZXZpZXcgJiYgIXNldHRpbmdzLnNlbGVjdGFibGUpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnbWVudS1pdGVtLW5vcm1hbCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MubWVudSAmJiAhc2V0dGluZ3MuYXJpYUhpZGVNZW51KSB7XG5cdFx0XHRcdHNlbGYuYXJpYSgnaGFzcG9wdXAnLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIHRoZSBtZW51aXRlbSBoYXMgc3ViIG1lbnUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGhhc01lbnVzXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZS9mYWxzZSBzdGF0ZSBpZiBpdCBoYXMgc3VibWVudS5cblx0XHQgKi9cblx0XHRoYXNNZW51czogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gISF0aGlzLnNldHRpbmdzLm1lbnU7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNob3dzIHRoZSBtZW51IGZvciB0aGUgbWVudSBpdGVtLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBzaG93TWVudVxuXHRcdCAqL1xuXHRcdHNob3dNZW51OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzLCBtZW51LCBwYXJlbnQgPSBzZWxmLnBhcmVudCgpO1xuXG5cdFx0XHRwYXJlbnQuaXRlbXMoKS5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0aWYgKGN0cmwgIT09IHNlbGYpIHtcblx0XHRcdFx0XHRjdHJsLmhpZGVNZW51KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MubWVudSkge1xuXHRcdFx0XHRtZW51ID0gc2VsZi5tZW51O1xuXG5cdFx0XHRcdGlmICghbWVudSkge1xuXHRcdFx0XHRcdG1lbnUgPSBzZXR0aW5ncy5tZW51O1xuXG5cdFx0XHRcdFx0Ly8gSXMgbWVudSBhcnJheSB0aGVuIGF1dG8gY29uc3R1Y3QgbWVudSBjb250cm9sXG5cdFx0XHRcdFx0aWYgKG1lbnUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRtZW51ID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiAnbWVudScsXG5cdFx0XHRcdFx0XHRcdGl0ZW1zOiBtZW51XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtZW51LnR5cGUgPSBtZW51LnR5cGUgfHwgJ21lbnUnO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChwYXJlbnQuc2V0dGluZ3MuaXRlbURlZmF1bHRzKSB7XG5cdFx0XHRcdFx0XHRtZW51Lml0ZW1EZWZhdWx0cyA9IHBhcmVudC5zZXR0aW5ncy5pdGVtRGVmYXVsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWVudSA9IHNlbGYubWVudSA9IEZhY3RvcnkuY3JlYXRlKG1lbnUpLnBhcmVudChzZWxmKS5yZW5kZXJUbygpO1xuXHRcdFx0XHRcdG1lbnUucmVmbG93KCk7XG5cdFx0XHRcdFx0bWVudS5vbignY2FuY2VsJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdHNlbGYuZm9jdXMoKTtcblx0XHRcdFx0XHRcdG1lbnUuaGlkZSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG1lbnUub24oJ3Nob3cgaGlkZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRcdGlmIChlLmNvbnRyb2wuaXRlbXMpIHtcblx0XHRcdFx0XHRcdFx0ZS5jb250cm9sLml0ZW1zKCkuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y3RybC5hY3RpdmUoY3RybC5zZXR0aW5ncy5zZWxlY3RlZCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmZpcmUoJ3Nob3cnKTtcblxuXHRcdFx0XHRcdG1lbnUub24oJ2hpZGUnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0XHRpZiAoZS5jb250cm9sID09PSBtZW51KSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYuY2xhc3Nlcy5yZW1vdmUoJ3NlbGVjdGVkJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRtZW51LnN1Ym1lbnUgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lbnUuc2hvdygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bWVudS5fcGFyZW50TWVudSA9IHBhcmVudDtcblxuXHRcdFx0XHRtZW51LmNsYXNzZXMuYWRkKCdtZW51LXN1YicpO1xuXG5cdFx0XHRcdHZhciByZWwgPSBtZW51LnRlc3RNb3ZlUmVsKFxuXHRcdFx0XHRcdHNlbGYuZ2V0RWwoKSxcblx0XHRcdFx0XHRzZWxmLmlzUnRsKCkgPyBbJ3RsLXRyJywgJ2JsLWJyJywgJ3RyLXRsJywgJ2JyLWJsJ10gOiBbJ3RyLXRsJywgJ2JyLWJsJywgJ3RsLXRyJywgJ2JsLWJyJ11cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRtZW51Lm1vdmVSZWwoc2VsZi5nZXRFbCgpLCByZWwpO1xuXHRcdFx0XHRtZW51LnJlbCA9IHJlbDtcblxuXHRcdFx0XHRyZWwgPSAnbWVudS1zdWItJyArIHJlbDtcblx0XHRcdFx0bWVudS5jbGFzc2VzLnJlbW92ZShtZW51Ll9sYXN0UmVsKS5hZGQocmVsKTtcblx0XHRcdFx0bWVudS5fbGFzdFJlbCA9IHJlbDtcblxuXHRcdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdzZWxlY3RlZCcpO1xuXHRcdFx0XHRzZWxmLmFyaWEoJ2V4cGFuZGVkJywgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEhpZGVzIHRoZSBtZW51IGZvciB0aGUgbWVudSBpdGVtLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBoaWRlTWVudVxuXHRcdCAqL1xuXHRcdGhpZGVNZW51OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0aWYgKHNlbGYubWVudSkge1xuXHRcdFx0XHRzZWxmLm1lbnUuaXRlbXMoKS5lYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5oaWRlTWVudSkge1xuXHRcdFx0XHRcdFx0aXRlbS5oaWRlTWVudSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2VsZi5tZW51LmhpZGUoKTtcblx0XHRcdFx0c2VsZi5hcmlhKCdleHBhbmRlZCcsIGZhbHNlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIGlkID0gc2VsZi5faWQsIHNldHRpbmdzID0gc2VsZi5zZXR0aW5ncywgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeCwgdGV4dCA9IHNlbGYuc3RhdGUuZ2V0KCd0ZXh0Jyk7XG5cdFx0XHR2YXIgaWNvbiA9IHNlbGYuc2V0dGluZ3MuaWNvbiwgaW1hZ2UgPSAnJywgc2hvcnRjdXQgPSBzZXR0aW5ncy5zaG9ydGN1dDtcblx0XHRcdHZhciB1cmwgPSBzZWxmLmVuY29kZShzZXR0aW5ncy51cmwpLCBpY29uSHRtbCA9ICcnO1xuXG5cdFx0XHQvLyBDb252ZXJ0cyBzaG9ydGN1dCBmb3JtYXQgdG8gTWFjL1BDIHZhcmlhbnRzXG5cdFx0XHRmdW5jdGlvbiBjb252ZXJ0U2hvcnRjdXQoc2hvcnRjdXQpIHtcblx0XHRcdFx0dmFyIGksIHZhbHVlLCByZXBsYWNlID0ge307XG5cblx0XHRcdFx0aWYgKEVudi5tYWMpIHtcblx0XHRcdFx0XHRyZXBsYWNlID0ge1xuXHRcdFx0XHRcdFx0YWx0OiAnJiN4MjMyNTsnLFxuXHRcdFx0XHRcdFx0Y3RybDogJyYjeDIzMTg7Jyxcblx0XHRcdFx0XHRcdHNoaWZ0OiAnJiN4MjFFNzsnLFxuXHRcdFx0XHRcdFx0bWV0YTogJyYjeDIzMTg7J1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVwbGFjZSA9IHtcblx0XHRcdFx0XHRcdG1ldGE6ICdDdHJsJ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzaG9ydGN1dCA9IHNob3J0Y3V0LnNwbGl0KCcrJyk7XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IHNob3J0Y3V0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSByZXBsYWNlW3Nob3J0Y3V0W2ldLnRvTG93ZXJDYXNlKCldO1xuXG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRzaG9ydGN1dFtpXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBzaG9ydGN1dC5qb2luKCcrJyk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHtcblx0XHRcdFx0cmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIG1hcmtNYXRjaGVzKHRleHQpIHtcblx0XHRcdFx0dmFyIG1hdGNoID0gc2V0dGluZ3MubWF0Y2ggfHwgJyc7XG5cblx0XHRcdFx0cmV0dXJuIG1hdGNoID8gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKG1hdGNoKSwgJ2dpJyksIGZ1bmN0aW9uIChtYXRjaCkge1xuXHRcdFx0XHRcdHJldHVybiAnIW1jZX5tYXRjaFsnICsgbWF0Y2ggKyAnXW1jZX5tYXRjaCEnO1xuXHRcdFx0XHR9KSA6IHRleHQ7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGJvbGRNYXRjaGVzKHRleHQpIHtcblx0XHRcdFx0cmV0dXJuIHRleHQuXG5cdFx0XHRcdFx0cmVwbGFjZShuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cCgnIW1jZX5tYXRjaFsnKSwgJ2cnKSwgJzxiPicpLlxuXHRcdFx0XHRcdHJlcGxhY2UobmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoJ11tY2V+bWF0Y2ghJyksICdnJyksICc8L2I+Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpY29uKSB7XG5cdFx0XHRcdHNlbGYucGFyZW50KCkuY2xhc3Nlcy5hZGQoJ21lbnUtaGFzLWljb25zJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5pbWFnZSkge1xuXHRcdFx0XHRpbWFnZSA9ICcgc3R5bGU9XCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFwnJyArIHNldHRpbmdzLmltYWdlICsgJ1xcJylcIic7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzaG9ydGN1dCkge1xuXHRcdFx0XHRzaG9ydGN1dCA9IGNvbnZlcnRTaG9ydGN1dChzaG9ydGN1dCk7XG5cdFx0XHR9XG5cblx0XHRcdGljb24gPSBwcmVmaXggKyAnaWNvICcgKyBwcmVmaXggKyAnaS0nICsgKHNlbGYuc2V0dGluZ3MuaWNvbiB8fCAnbm9uZScpO1xuXHRcdFx0aWNvbkh0bWwgPSAodGV4dCAhPT0gJy0nID8gJzxpIGNsYXNzPVwiJyArIGljb24gKyAnXCInICsgaW1hZ2UgKyAnPjwvaT5cXHUwMGEwJyA6ICcnKTtcblxuXHRcdFx0dGV4dCA9IGJvbGRNYXRjaGVzKHNlbGYuZW5jb2RlKG1hcmtNYXRjaGVzKHRleHQpKSk7XG5cdFx0XHR1cmwgPSBib2xkTWF0Y2hlcyhzZWxmLmVuY29kZShtYXJrTWF0Y2hlcyh1cmwpKSk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0aWNvbkh0bWwgK1xuXHRcdFx0XHRcdCh0ZXh0ICE9PSAnLScgPyAnPHNwYW4gaWQ9XCInICsgaWQgKyAnLXRleHRcIiBjbGFzcz1cIicgKyBwcmVmaXggKyAndGV4dFwiPicgKyB0ZXh0ICsgJzwvc3Bhbj4nIDogJycpICtcblx0XHRcdFx0XHQoc2hvcnRjdXQgPyAnPGRpdiBpZD1cIicgKyBpZCArICctc2hvcnRjdXRcIiBjbGFzcz1cIicgKyBwcmVmaXggKyAnbWVudS1zaG9ydGN1dFwiPicgKyBzaG9ydGN1dCArICc8L2Rpdj4nIDogJycpICtcblx0XHRcdFx0XHQoc2V0dGluZ3MubWVudSA/ICc8ZGl2IGNsYXNzPVwiJyArIHByZWZpeCArICdjYXJldFwiPjwvZGl2PicgOiAnJykgK1xuXHRcdFx0XHRcdCh1cmwgPyAnPGRpdiBjbGFzcz1cIicgKyBwcmVmaXggKyAnbWVudS1pdGVtLWxpbmtcIj4nICsgdXJsICsgJzwvZGl2PicgOiAnJykgK1xuXHRcdFx0XHQnPC9kaXY+J1xuXHRcdFx0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogR2V0cyBpbnZva2VkIGFmdGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIHJlbmRlcmVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwb3N0UmVuZGVyXG5cdFx0ICovXG5cdFx0cG9zdFJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHNldHRpbmdzID0gc2VsZi5zZXR0aW5ncztcblxuXHRcdFx0dmFyIHRleHRTdHlsZSA9IHNldHRpbmdzLnRleHRTdHlsZTtcblx0XHRcdGlmICh0eXBlb2YgdGV4dFN0eWxlID09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHR0ZXh0U3R5bGUgPSB0ZXh0U3R5bGUuY2FsbCh0aGlzKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRleHRTdHlsZSkge1xuXHRcdFx0XHR2YXIgdGV4dEVsbSA9IHNlbGYuZ2V0RWwoJ3RleHQnKTtcblx0XHRcdFx0aWYgKHRleHRFbG0pIHtcblx0XHRcdFx0XHR0ZXh0RWxtLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB0ZXh0U3R5bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYub24oJ21vdXNlZW50ZXIgY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmIChlLmNvbnRyb2wgPT09IHNlbGYpIHtcblx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLm1lbnUgJiYgZS50eXBlID09PSAnY2xpY2snKSB7XG5cdFx0XHRcdFx0XHRzZWxmLmZpcmUoJ3NlbGVjdCcpO1xuXG5cdFx0XHRcdFx0XHQvLyBFZGdlIHdpbGwgY3Jhc2ggaWYgeW91IHN0cmVzcyBpdCBzZWUgIzI2NjBcblx0XHRcdFx0XHRcdERlbGF5LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5wYXJlbnQoKS5oaWRlQWxsKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5zaG93TWVudSgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZS5hcmlhKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYubWVudS5mb2N1cyh0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLl9zdXBlcigpO1xuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0aG92ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLnBhcmVudCgpLml0ZW1zKCkuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdGN0cmwuY2xhc3Nlcy5yZW1vdmUoJ3NlbGVjdGVkJyk7XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5jbGFzc2VzLnRvZ2dsZSgnc2VsZWN0ZWQnLCB0cnVlKTtcblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdGFjdGl2ZTogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdGlmICh0eXBlb2Ygc3RhdGUgIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHR0aGlzLmFyaWEoJ2NoZWNrZWQnLCBzdGF0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLl9zdXBlcihzdGF0ZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlbW92ZXMgdGhlIGNvbnRyb2wgYW5kIGl0J3MgbWVudXMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbW92ZVxuXHRcdCAqL1xuXHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9zdXBlcigpO1xuXG5cdFx0XHRpZiAodGhpcy5tZW51KSB7XG5cdFx0XHRcdHRoaXMubWVudS5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9UaHJvYmJlci5qc1xuXG4vKipcbiAqIFRocm9iYmVyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBlbmFibGVzIHlvdSB0byBkaXNwbGF5IGEgVGhyb2JiZXIgZm9yIGFueSBlbGVtZW50LlxuICpcbiAqIEAteC1sZXNzIFRocm9iYmVyLmxlc3NcbiAqIEBjbGFzcyB0aW55bWNlLnVpLlRocm9iYmVyXG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvVGhyb2JiZXJcIiwgW1xuXHRcInRpbnltY2UvZG9tL0RvbVF1ZXJ5XCIsXG5cdFwidGlueW1jZS91aS9Db250cm9sXCIsXG5cdFwidGlueW1jZS91dGlsL0RlbGF5XCJcbl0sIGZ1bmN0aW9uKCQsIENvbnRyb2wsIERlbGF5KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIGEgbmV3IHRocm9iYmVyLlxuXHQgKlxuXHQgKiBAY29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHtFbGVtZW50fSBlbG0gRE9NIEh0bWwgZWxlbWVudCB0byBkaXNwbGF5IHRocm9iYmVyIGluLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IGlubGluZSBPcHRpb25hbCB0cnVlL2ZhbHNlIHN0YXRlIGlmIHRoZSB0aHJvYmJlciBzaG91bGQgYmUgYXBwZW5kZWQgdG8gZW5kIG9mIGVsZW1lbnQgZm9yIGluZmluaXRlIHNjcm9sbC5cblx0ICovXG5cdHJldHVybiBmdW5jdGlvbihlbG0sIGlubGluZSkge1xuXHRcdHZhciBzZWxmID0gdGhpcywgc3RhdGUsIGNsYXNzUHJlZml4ID0gQ29udHJvbC5jbGFzc1ByZWZpeCwgdGltZXI7XG5cblx0XHQvKipcblx0XHQgKiBTaG93cyB0aGUgdGhyb2JiZXIuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHNob3dcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gW3RpbWVdIFRpbWUgdG8gd2FpdCBiZWZvcmUgc2hvd2luZy5cblx0XHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIE9wdGlvbmFsIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgdGhyb2JiZXIgaXMgc2hvd24uXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5UaHJvYmJlcn0gQ3VycmVudCB0aHJvYmJlciBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRzZWxmLnNob3cgPSBmdW5jdGlvbih0aW1lLCBjYWxsYmFjaykge1xuXHRcdFx0ZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0XHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0XHRcdFx0JChlbG0pLmFwcGVuZChcblx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCInICsgY2xhc3NQcmVmaXggKyAndGhyb2JiZXInICsgKGlubGluZSA/ICcgJyArIGNsYXNzUHJlZml4ICsgJ3Rocm9iYmVyLWlubGluZScgOiAnJykgKyAnXCI+PC9kaXY+J1xuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLmhpZGUoKTtcblxuXHRcdFx0c3RhdGUgPSB0cnVlO1xuXG5cdFx0XHRpZiAodGltZSkge1xuXHRcdFx0XHR0aW1lciA9IERlbGF5LnNldFRpbWVvdXQocmVuZGVyLCB0aW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlbmRlcigpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogSGlkZXMgdGhlIHRocm9iYmVyLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBoaWRlXG5cdFx0ICogQHJldHVybiB7dGlueW1jZS51aS5UaHJvYmJlcn0gQ3VycmVudCB0aHJvYmJlciBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRzZWxmLmhpZGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjaGlsZCA9IGVsbS5sYXN0Q2hpbGQ7XG5cblx0XHRcdERlbGF5LmNsZWFyVGltZW91dCh0aW1lcik7XG5cblx0XHRcdGlmIChjaGlsZCAmJiBjaGlsZC5jbGFzc05hbWUuaW5kZXhPZigndGhyb2JiZXInKSAhPSAtMSkge1xuXHRcdFx0XHRjaGlsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcblx0XHRcdH1cblxuXHRcdFx0c3RhdGUgPSBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fTtcblx0fTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvTWVudS5qc1xuXG4vKipcbiAqIE1lbnUuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1lbnUuXG4gKlxuICogQC14LWxlc3MgTWVudS5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5NZW51XG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkZsb2F0UGFuZWxcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9NZW51XCIsIFtcblx0XCJ0aW55bWNlL3VpL0Zsb2F0UGFuZWxcIixcblx0XCJ0aW55bWNlL3VpL01lbnVJdGVtXCIsXG5cdFwidGlueW1jZS91aS9UaHJvYmJlclwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiXG5dLCBmdW5jdGlvbihGbG9hdFBhbmVsLCBNZW51SXRlbSwgVGhyb2JiZXIsIFRvb2xzKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBGbG9hdFBhbmVsLmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGRlZmF1bHRUeXBlOiAnbWVudWl0ZW0nLFxuXHRcdFx0Ym9yZGVyOiAxLFxuXHRcdFx0bGF5b3V0OiAnc3RhY2snLFxuXHRcdFx0cm9sZTogJ2FwcGxpY2F0aW9uJyxcblx0XHRcdGJvZHlSb2xlOiAnbWVudScsXG5cdFx0XHRhcmlhUm9vdDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDb25zdHJ1Y3RzIGEgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNldHRpbmdzLlxuXHRcdCAqXG5cdFx0ICogQGNvbnN0cnVjdG9yXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIE5hbWUvdmFsdWUgb2JqZWN0IHdpdGggc2V0dGluZ3MuXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2V0dGluZ3MuYXV0b2hpZGUgPSB0cnVlO1xuXHRcdFx0c2V0dGluZ3MuY29uc3RyYWluVG9WaWV3cG9ydCA9IHRydWU7XG5cblx0XHRcdGlmICh0eXBlb2Ygc2V0dGluZ3MuaXRlbXMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0c2V0dGluZ3MuaXRlbXNGYWN0b3J5ID0gc2V0dGluZ3MuaXRlbXM7XG5cdFx0XHRcdHNldHRpbmdzLml0ZW1zID0gW107XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5pdGVtRGVmYXVsdHMpIHtcblx0XHRcdFx0dmFyIGl0ZW1zID0gc2V0dGluZ3MuaXRlbXMsIGkgPSBpdGVtcy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0XHRcdGl0ZW1zW2ldID0gVG9vbHMuZXh0ZW5kKHt9LCBzZXR0aW5ncy5pdGVtRGVmYXVsdHMsIGl0ZW1zW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdtZW51Jyk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlcGFpbnRzIHRoZSBjb250cm9sIGFmdGVyIGEgbGF5b3V0IG9wZXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVwYWludFxuXHRcdCAqL1xuXHRcdHJlcGFpbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5jbGFzc2VzLnRvZ2dsZSgnbWVudS1hbGlnbicsIHRydWUpO1xuXG5cdFx0XHR0aGlzLl9zdXBlcigpO1xuXG5cdFx0XHR0aGlzLmdldEVsKCkuc3R5bGUuaGVpZ2h0ID0gJyc7XG5cdFx0XHR0aGlzLmdldEVsKCdib2R5Jykuc3R5bGUuaGVpZ2h0ID0gJyc7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBIaWRlcy9jbG9zZXMgdGhlIG1lbnUuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGNhbmNlbFxuXHRcdCAqL1xuXHRcdGNhbmNlbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuaGlkZUFsbCgpO1xuXHRcdFx0c2VsZi5maXJlKCdzZWxlY3QnKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTG9hZHMgbmV3IGl0ZW1zIGZyb20gdGhlIGZhY3RvcnkgaXRlbXMgZnVuY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGxvYWRcblx0XHQgKi9cblx0XHRsb2FkOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgdGltZSwgZmFjdG9yeTtcblxuXHRcdFx0ZnVuY3Rpb24gaGlkZVRocm9iYmVyKCkge1xuXHRcdFx0XHRpZiAoc2VsZi50aHJvYmJlcikge1xuXHRcdFx0XHRcdHNlbGYudGhyb2JiZXIuaGlkZSgpO1xuXHRcdFx0XHRcdHNlbGYudGhyb2JiZXIgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZhY3RvcnkgPSBzZWxmLnNldHRpbmdzLml0ZW1zRmFjdG9yeTtcblx0XHRcdGlmICghZmFjdG9yeSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc2VsZi50aHJvYmJlcikge1xuXHRcdFx0XHRzZWxmLnRocm9iYmVyID0gbmV3IFRocm9iYmVyKHNlbGYuZ2V0RWwoJ2JvZHknKSwgdHJ1ZSk7XG5cblx0XHRcdFx0aWYgKHNlbGYuaXRlbXMoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRzZWxmLnRocm9iYmVyLnNob3coKTtcblx0XHRcdFx0XHRzZWxmLmZpcmUoJ2xvYWRpbmcnKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZWxmLnRocm9iYmVyLnNob3coMTAwLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHNlbGYuaXRlbXMoKS5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdHNlbGYuZmlyZSgnbG9hZGluZycpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5vbignaGlkZSBjbG9zZScsIGhpZGVUaHJvYmJlcik7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYucmVxdWVzdFRpbWUgPSB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cblx0XHRcdHNlbGYuc2V0dGluZ3MuaXRlbXNGYWN0b3J5KGZ1bmN0aW9uKGl0ZW1zKSB7XG5cdFx0XHRcdGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRzZWxmLmhpZGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc2VsZi5yZXF1ZXN0VGltZSAhPT0gdGltZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlbGYuZ2V0RWwoKS5zdHlsZS53aWR0aCA9ICcnO1xuXHRcdFx0XHRzZWxmLmdldEVsKCdib2R5Jykuc3R5bGUud2lkdGggPSAnJztcblxuXHRcdFx0XHRoaWRlVGhyb2JiZXIoKTtcblx0XHRcdFx0c2VsZi5pdGVtcygpLnJlbW92ZSgpO1xuXHRcdFx0XHRzZWxmLmdldEVsKCdib2R5JykuaW5uZXJIVE1MID0gJyc7XG5cblx0XHRcdFx0c2VsZi5hZGQoaXRlbXMpO1xuXHRcdFx0XHRzZWxmLnJlbmRlck5ldygpO1xuXHRcdFx0XHRzZWxmLmZpcmUoJ2xvYWRlZCcpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEhpZGUgbWVudSBhbmQgYWxsIHN1YiBtZW51cy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgaGlkZUFsbFxuXHRcdCAqL1xuXHRcdGhpZGVBbGw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHR0aGlzLmZpbmQoJ21lbnVpdGVtJykuZXhlYygnaGlkZU1lbnUnKTtcblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZWQgYmVmb3JlIHRoZSBtZW51IGlzIHJlbmRlcmVkLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBwcmVSZW5kZXJcblx0XHQgKi9cblx0XHRwcmVSZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLml0ZW1zKCkuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdHZhciBzZXR0aW5ncyA9IGN0cmwuc2V0dGluZ3M7XG5cblx0XHRcdFx0aWYgKHNldHRpbmdzLmljb24gfHwgc2V0dGluZ3MuaW1hZ2UgfHwgc2V0dGluZ3Muc2VsZWN0YWJsZSkge1xuXHRcdFx0XHRcdHNlbGYuX2hhc0ljb25zID0gdHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoc2VsZi5zZXR0aW5ncy5pdGVtc0ZhY3RvcnkpIHtcblx0XHRcdFx0c2VsZi5vbigncG9zdHJlbmRlcicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmIChzZWxmLnNldHRpbmdzLml0ZW1zRmFjdG9yeSkge1xuXHRcdFx0XHRcdFx0c2VsZi5sb2FkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlbGYuX3N1cGVyKCk7XG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvTGlzdEJveC5qc1xuXG4vKipcbiAqIExpc3RCb3guanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGxpc3QgYm94IGNvbnRyb2wuXG4gKlxuICogQC14LWxlc3MgTGlzdEJveC5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5MaXN0Qm94XG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLk1lbnVCdXR0b25cbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9MaXN0Qm94XCIsIFtcblx0XCJ0aW55bWNlL3VpL01lbnVCdXR0b25cIixcblx0XCJ0aW55bWNlL3VpL01lbnVcIlxuXSwgZnVuY3Rpb24oTWVudUJ1dHRvbiwgTWVudSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gTWVudUJ1dHRvbi5leHRlbmQoe1xuXHRcdC8qKlxuXHRcdCAqIENvbnN0cnVjdHMgYSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKiBAc2V0dGluZyB7QXJyYXl9IHZhbHVlcyBBcnJheSB3aXRoIHZhbHVlcyB0byBhZGQgdG8gbGlzdCBib3guXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgdmFsdWVzLCBzZWxlY3RlZCwgc2VsZWN0ZWRUZXh0LCBsYXN0SXRlbUN0cmw7XG5cblx0XHRcdGZ1bmN0aW9uIHNldFNlbGVjdGVkKG1lbnVWYWx1ZXMpIHtcblx0XHRcdFx0Ly8gVHJ5IHRvIGZpbmQgYSBzZWxlY3RlZCB2YWx1ZVxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1lbnVWYWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRzZWxlY3RlZCA9IG1lbnVWYWx1ZXNbaV0uc2VsZWN0ZWQgfHwgc2V0dGluZ3MudmFsdWUgPT09IG1lbnVWYWx1ZXNbaV0udmFsdWU7XG5cblx0XHRcdFx0XHRpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dCB8fCBtZW51VmFsdWVzW2ldLnRleHQ7XG5cdFx0XHRcdFx0XHRzZWxmLnN0YXRlLnNldCgndmFsdWUnLCBtZW51VmFsdWVzW2ldLnZhbHVlKTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIElmIHRoZSB2YWx1ZSBoYXMgYSBzdWJtZW51LCB0cnkgdG8gZmluZCB0aGUgc2VsZWN0ZWQgdmFsdWVzIGluIHRoYXQgbWVudVxuXHRcdFx0XHRcdGlmIChtZW51VmFsdWVzW2ldLm1lbnUpIHtcblx0XHRcdFx0XHRcdGlmIChzZXRTZWxlY3RlZChtZW51VmFsdWVzW2ldLm1lbnUpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cdFx0XHRzZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3M7XG5cblx0XHRcdHNlbGYuX3ZhbHVlcyA9IHZhbHVlcyA9IHNldHRpbmdzLnZhbHVlcztcblx0XHRcdGlmICh2YWx1ZXMpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBzZXR0aW5ncy52YWx1ZSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0c2V0U2VsZWN0ZWQodmFsdWVzKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIERlZmF1bHQgd2l0aCBmaXJzdCBpdGVtXG5cdFx0XHRcdGlmICghc2VsZWN0ZWQgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzZWxlY3RlZFRleHQgPSB2YWx1ZXNbMF0udGV4dDtcblx0XHRcdFx0XHRzZWxmLnN0YXRlLnNldCgndmFsdWUnLCB2YWx1ZXNbMF0udmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VsZi5zdGF0ZS5zZXQoJ21lbnUnLCB2YWx1ZXMpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLnN0YXRlLnNldCgndGV4dCcsIHNldHRpbmdzLnRleHQgfHwgc2VsZWN0ZWRUZXh0KTtcblxuXHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnbGlzdGJveCcpO1xuXG5cdFx0XHRzZWxmLm9uKCdzZWxlY3QnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBjdHJsID0gZS5jb250cm9sO1xuXG5cdFx0XHRcdGlmIChsYXN0SXRlbUN0cmwpIHtcblx0XHRcdFx0XHRlLmxhc3RDb250cm9sID0gbGFzdEl0ZW1DdHJsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNldHRpbmdzLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0Y3RybC5hY3RpdmUoIWN0cmwuYWN0aXZlKCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGYudmFsdWUoZS5jb250cm9sLnZhbHVlKCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGFzdEl0ZW1DdHJsID0gY3RybDtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBHZXR0ZXIvc2V0dGVyIGZ1bmN0aW9uIGZvciB0aGUgY29udHJvbCB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgdmFsdWVcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gW3ZhbHVlXSBWYWx1ZSB0byBiZSBzZXQuXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbi90aW55bWNlLnVpLkxpc3RCb3h9IFZhbHVlIG9yIHNlbGYgaWYgaXQncyBhIHNldCBvcGVyYXRpb24uXG5cdFx0ICovXG5cdFx0YmluZFN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGZ1bmN0aW9uIGFjdGl2YXRlTWVudUl0ZW1zQnlWYWx1ZShtZW51LCB2YWx1ZSkge1xuXHRcdFx0XHRpZiAobWVudSBpbnN0YW5jZW9mIE1lbnUpIHtcblx0XHRcdFx0XHRtZW51Lml0ZW1zKCkuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWN0cmwuaGFzTWVudXMoKSkge1xuXHRcdFx0XHRcdFx0XHRjdHJsLmFjdGl2ZShjdHJsLnZhbHVlKCkgPT09IHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBnZXRTZWxlY3RlZEl0ZW0obWVudVZhbHVlcywgdmFsdWUpIHtcblx0XHRcdFx0dmFyIHNlbGVjdGVkSXRlbTtcblxuXHRcdFx0XHRpZiAoIW1lbnVWYWx1ZXMpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1lbnVWYWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAobWVudVZhbHVlc1tpXS52YWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBtZW51VmFsdWVzW2ldO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChtZW51VmFsdWVzW2ldLm1lbnUpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkSXRlbSA9IGdldFNlbGVjdGVkSXRlbShtZW51VmFsdWVzW2ldLm1lbnUsIHZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3RlZEl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdGVkSXRlbTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0c2VsZi5vbignc2hvdycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0YWN0aXZhdGVNZW51SXRlbXNCeVZhbHVlKGUuY29udHJvbCwgc2VsZi52YWx1ZSgpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLnN0YXRlLm9uKCdjaGFuZ2U6dmFsdWUnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBzZWxlY3RlZEl0ZW0gPSBnZXRTZWxlY3RlZEl0ZW0oc2VsZi5zdGF0ZS5nZXQoJ21lbnUnKSwgZS52YWx1ZSk7XG5cblx0XHRcdFx0aWYgKHNlbGVjdGVkSXRlbSkge1xuXHRcdFx0XHRcdHNlbGYudGV4dChzZWxlY3RlZEl0ZW0udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VsZi50ZXh0KHNlbGYuc2V0dGluZ3MudGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9SYWRpby5qc1xuXG4vKipcbiAqIFJhZGlvLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByYWRpbyBidXR0b24uXG4gKlxuICogQC14LWxlc3MgUmFkaW8ubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuUmFkaW9cbiAqIEBleHRlbmRzIHRpbnltY2UudWkuQ2hlY2tib3hcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9SYWRpb1wiLCBbXG5cdFwidGlueW1jZS91aS9DaGVja2JveFwiXG5dLCBmdW5jdGlvbihDaGVja2JveCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRyZXR1cm4gQ2hlY2tib3guZXh0ZW5kKHtcblx0XHREZWZhdWx0czoge1xuXHRcdFx0Y2xhc3NlczogXCJyYWRpb1wiLFxuXHRcdFx0cm9sZTogXCJyYWRpb1wiXG5cdFx0fVxuXHR9KTtcbn0pO1xuXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL2NsYXNzZXMvdWkvUmVzaXplSGFuZGxlLmpzXG5cbi8qKlxuICogUmVzaXplSGFuZGxlLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogUmVuZGVycyBhIHJlc2l6ZSBoYW5kbGUgdGhhdCBmaXJlcyBSZXNpemVTdGFydCwgUmVzaXplIGFuZCBSZXNpemVFbmQgZXZlbnRzLlxuICpcbiAqIEAteC1sZXNzIFJlc2l6ZUhhbmRsZS5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5SZXNpemVIYW5kbGVcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuV2lkZ2V0XG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvUmVzaXplSGFuZGxlXCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiLFxuXHRcInRpbnltY2UvdWkvRHJhZ0hlbHBlclwiXG5dLCBmdW5jdGlvbihXaWRnZXQsIERyYWdIZWxwZXIpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIFdpZGdldC5leHRlbmQoe1xuXHRcdC8qKlxuXHRcdCAqIFJlbmRlcnMgdGhlIGNvbnRyb2wgYXMgYSBIVE1MIHN0cmluZy5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVuZGVySHRtbFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gSFRNTCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2wuXG5cdFx0ICovXG5cdFx0cmVuZGVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHByZWZpeCA9IHNlbGYuY2xhc3NQcmVmaXg7XG5cblx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ3Jlc2l6ZWhhbmRsZScpO1xuXG5cdFx0XHRpZiAoc2VsZi5zZXR0aW5ncy5kaXJlY3Rpb24gPT0gXCJib3RoXCIpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgncmVzaXplaGFuZGxlLWJvdGgnKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5jYW5Gb2N1cyA9IGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPGRpdiBpZD1cIicgKyBzZWxmLl9pZCArICdcIiBjbGFzcz1cIicgKyBzZWxmLmNsYXNzZXMgKyAnXCI+JyArXG5cdFx0XHRcdFx0JzxpIGNsYXNzPVwiJyArIHByZWZpeCArICdpY28gJyArIHByZWZpeCArICdpLXJlc2l6ZVwiPjwvaT4nICtcblx0XHRcdFx0JzwvZGl2Pidcblx0XHRcdCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENhbGxlZCBhZnRlciB0aGUgY29udHJvbCBoYXMgYmVlbiByZW5kZXJlZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcG9zdFJlbmRlclxuXHRcdCAqL1xuXHRcdHBvc3RSZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLl9zdXBlcigpO1xuXG5cdFx0XHRzZWxmLnJlc2l6ZURyYWdIZWxwZXIgPSBuZXcgRHJhZ0hlbHBlcih0aGlzLl9pZCwge1xuXHRcdFx0XHRzdGFydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5maXJlKCdSZXNpemVTdGFydCcpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdGRyYWc6IGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRpZiAoc2VsZi5zZXR0aW5ncy5kaXJlY3Rpb24gIT0gXCJib3RoXCIpIHtcblx0XHRcdFx0XHRcdGUuZGVsdGFYID0gMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzZWxmLmZpcmUoJ1Jlc2l6ZScsIGUpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHN0b3A6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNlbGYuZmlyZSgnUmVzaXplRW5kJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKHRoaXMucmVzaXplRHJhZ0hlbHBlcikge1xuXHRcdFx0XHR0aGlzLnJlc2l6ZURyYWdIZWxwZXIuZGVzdHJveSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5fc3VwZXIoKTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy91aS9TZWxlY3RCb3guanNcblxuLyoqXG4gKiBTZWxlY3RCb3guanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNlbGVjdCBib3ggY29udHJvbC5cbiAqXG4gKiBALXgtbGVzcyBTZWxlY3RCb3gubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuU2VsZWN0Qm94XG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLldpZGdldFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL1NlbGVjdEJveFwiLCBbXG5cdFwidGlueW1jZS91aS9XaWRnZXRcIlxuXSwgZnVuY3Rpb24oV2lkZ2V0KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMob3B0aW9ucykge1xuXHRcdHZhciBzdHJPcHRpb25zID0gJyc7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRzdHJPcHRpb25zICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIG9wdGlvbnNbaV0gKyAnXCI+JyArIG9wdGlvbnNbaV0gKyAnPC9vcHRpb24+Jztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHN0ck9wdGlvbnM7XG5cdH1cblxuXHRyZXR1cm4gV2lkZ2V0LmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGNsYXNzZXM6IFwic2VsZWN0Ym94XCIsXG5cdFx0XHRyb2xlOiBcInNlbGVjdGJveFwiLFxuXHRcdFx0b3B0aW9uczogW11cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIENvbnN0cnVjdHMgYSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKiBAc2V0dGluZyB7QXJyYXl9IG9wdGlvbnMgQXJyYXkgd2l0aCBvcHRpb25zIHRvIGFkZCB0byB0aGUgc2VsZWN0IGJveC5cblx0XHQgKi9cblx0XHRpbml0OiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLl9zdXBlcihzZXR0aW5ncyk7XG5cblx0XHRcdGlmIChzZWxmLnNldHRpbmdzLnNpemUpIHtcblx0XHRcdFx0c2VsZi5zaXplID0gc2VsZi5zZXR0aW5ncy5zaXplO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5zZXR0aW5ncy5vcHRpb25zKSB7XG5cdFx0XHRcdHNlbGYuX29wdGlvbnMgPSBzZWxmLnNldHRpbmdzLm9wdGlvbnM7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciByb290Q29udHJvbDtcblxuXHRcdFx0XHRpZiAoZS5rZXlDb2RlID09IDEzKSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdFx0Ly8gRmluZCByb290IGNvbnRyb2wgdGhhdCB3ZSBjYW4gZG8gdG9KU09OIG9uXG5cdFx0XHRcdFx0c2VsZi5wYXJlbnRzKCkucmV2ZXJzZSgpLmVhY2goZnVuY3Rpb24oY3RybCkge1xuXHRcdFx0XHRcdFx0aWYgKGN0cmwudG9KU09OKSB7XG5cdFx0XHRcdFx0XHRcdHJvb3RDb250cm9sID0gY3RybDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gRmlyZSBldmVudCBvbiBjdXJyZW50IHRleHQgYm94IHdpdGggdGhlIHNlcmlhbGl6ZWQgZGF0YSBvZiB0aGUgd2hvbGUgZm9ybVxuXHRcdFx0XHRcdHNlbGYuZmlyZSgnc3VibWl0Jywge2RhdGE6IHJvb3RDb250cm9sLnRvSlNPTigpfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBHZXR0ZXIvc2V0dGVyIGZ1bmN0aW9uIGZvciB0aGUgb3B0aW9ucyBzdGF0ZS5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2Qgb3B0aW9uc1xuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IFtzdGF0ZV0gU3RhdGUgdG8gYmUgc2V0LlxuXHRcdCAqIEByZXR1cm4ge0FycmF5fHRpbnltY2UudWkuU2VsZWN0Qm94fSBBcnJheSBvZiBzdHJpbmcgb3B0aW9ucy5cblx0XHQgKi9cblx0XHRvcHRpb25zOiBmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0aWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0YXRlLmdldCgnb3B0aW9ucycpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnN0YXRlLnNldCgnb3B0aW9ucycsIHN0YXRlKTtcblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblxuXHRcdHJlbmRlckh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBvcHRpb25zLCBzaXplID0gJyc7XG5cblx0XHRcdG9wdGlvbnMgPSBjcmVhdGVPcHRpb25zKHNlbGYuX29wdGlvbnMpO1xuXG5cdFx0XHRpZiAoc2VsZi5zaXplKSB7XG5cdFx0XHRcdHNpemUgPSAnIHNpemUgPSBcIicgKyBzZWxmLnNpemUgKyAnXCInO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPHNlbGVjdCBpZD1cIicgKyBzZWxmLl9pZCArICdcIiBjbGFzcz1cIicgKyBzZWxmLmNsYXNzZXMgKyAnXCInICsgc2l6ZSArICc+JyArXG5cdFx0XHRcdFx0b3B0aW9ucyArXG5cdFx0XHRcdCc8L3NlbGVjdD4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHRiaW5kU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5zdGF0ZS5vbignY2hhbmdlOm9wdGlvbnMnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHNlbGYuZ2V0RWwoKS5pbm5lckhUTUwgPSBjcmVhdGVPcHRpb25zKGUudmFsdWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBzZWxmLl9zdXBlcigpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1NsaWRlci5qc1xuXG4vKipcbiAqIFNsaWRlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIFNsaWRlciBjb250cm9sLlxuICpcbiAqIEAteC1sZXNzIFNsaWRlci5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5TbGlkZXJcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuV2lkZ2V0XG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvU2xpZGVyXCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiLFxuXHRcInRpbnltY2UvdWkvRHJhZ0hlbHBlclwiLFxuXHRcInRpbnltY2UvdWkvRG9tVXRpbHNcIlxuXSwgZnVuY3Rpb24oV2lkZ2V0LCBEcmFnSGVscGVyLCBEb21VdGlscykge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRmdW5jdGlvbiBjb25zdHJhaW4odmFsdWUsIG1pblZhbCwgbWF4VmFsKSB7XG5cdFx0aWYgKHZhbHVlIDwgbWluVmFsKSB7XG5cdFx0XHR2YWx1ZSA9IG1pblZhbDtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUgPiBtYXhWYWwpIHtcblx0XHRcdHZhbHVlID0gbWF4VmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldEFyaWFQcm9wKGVsLCBuYW1lLCB2YWx1ZSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZSgnYXJpYS0nICsgbmFtZSwgdmFsdWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gdXBkYXRlU2xpZGVySGFuZGxlKGN0cmwsIHZhbHVlKSB7XG5cdFx0dmFyIG1heEhhbmRsZVBvcywgc2hvcnRTaXplTmFtZSwgc2l6ZU5hbWUsIHN0eWxlUG9zTmFtZSwgc3R5bGVWYWx1ZSwgaGFuZGxlRWw7XG5cblx0XHRpZiAoY3RybC5zZXR0aW5ncy5vcmllbnRhdGlvbiA9PSBcInZcIikge1xuXHRcdFx0c3R5bGVQb3NOYW1lID0gXCJ0b3BcIjtcblx0XHRcdHNpemVOYW1lID0gXCJoZWlnaHRcIjtcblx0XHRcdHNob3J0U2l6ZU5hbWUgPSBcImhcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGVQb3NOYW1lID0gXCJsZWZ0XCI7XG5cdFx0XHRzaXplTmFtZSA9IFwid2lkdGhcIjtcblx0XHRcdHNob3J0U2l6ZU5hbWUgPSBcIndcIjtcblx0XHR9XG5cblx0XHRoYW5kbGVFbCA9IGN0cmwuZ2V0RWwoJ2hhbmRsZScpO1xuXHRcdG1heEhhbmRsZVBvcyA9IChjdHJsLmxheW91dFJlY3QoKVtzaG9ydFNpemVOYW1lXSB8fCAxMDApIC0gRG9tVXRpbHMuZ2V0U2l6ZShoYW5kbGVFbClbc2l6ZU5hbWVdO1xuXG5cdFx0c3R5bGVWYWx1ZSA9IChtYXhIYW5kbGVQb3MgKiAoKHZhbHVlIC0gY3RybC5fbWluVmFsdWUpIC8gKGN0cmwuX21heFZhbHVlIC0gY3RybC5fbWluVmFsdWUpKSkgKyAncHgnO1xuXHRcdGhhbmRsZUVsLnN0eWxlW3N0eWxlUG9zTmFtZV0gPSBzdHlsZVZhbHVlO1xuXHRcdGhhbmRsZUVsLnN0eWxlLmhlaWdodCA9IGN0cmwubGF5b3V0UmVjdCgpLmggKyAncHgnO1xuXG5cdFx0c2V0QXJpYVByb3AoaGFuZGxlRWwsICd2YWx1ZW5vdycsIHZhbHVlKTtcblx0XHRzZXRBcmlhUHJvcChoYW5kbGVFbCwgJ3ZhbHVldGV4dCcsICcnICsgY3RybC5zZXR0aW5ncy5wcmV2aWV3RmlsdGVyKHZhbHVlKSk7XG5cdFx0c2V0QXJpYVByb3AoaGFuZGxlRWwsICd2YWx1ZW1pbicsIGN0cmwuX21pblZhbHVlKTtcblx0XHRzZXRBcmlhUHJvcChoYW5kbGVFbCwgJ3ZhbHVlbWF4JywgY3RybC5fbWF4VmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIFdpZGdldC5leHRlbmQoe1xuXHRcdGluaXQ6IGZ1bmN0aW9uKHNldHRpbmdzKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdGlmICghc2V0dGluZ3MucHJldmlld0ZpbHRlcikge1xuXHRcdFx0XHRzZXR0aW5ncy5wcmV2aWV3RmlsdGVyID0gZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMCkgLyAxMDAuMDtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5fc3VwZXIoc2V0dGluZ3MpO1xuXHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnc2xpZGVyJyk7XG5cblx0XHRcdGlmIChzZXR0aW5ncy5vcmllbnRhdGlvbiA9PSBcInZcIikge1xuXHRcdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCd2ZXJ0aWNhbCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLl9taW5WYWx1ZSA9IHNldHRpbmdzLm1pblZhbHVlIHx8IDA7XG5cdFx0XHRzZWxmLl9tYXhWYWx1ZSA9IHNldHRpbmdzLm1heFZhbHVlIHx8IDEwMDtcblx0XHRcdHNlbGYuX2luaXRWYWx1ZSA9IHNlbGYuc3RhdGUuZ2V0KCd2YWx1ZScpO1xuXHRcdH0sXG5cblx0XHRyZW5kZXJIdG1sOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgaWQgPSBzZWxmLl9pZCwgcHJlZml4ID0gc2VsZi5jbGFzc1ByZWZpeDtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0JzxkaXYgaWQ9XCInICsgaWQgKyAnXCIgY2xhc3M9XCInICsgc2VsZi5jbGFzc2VzICsgJ1wiPicgK1xuXHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIGlkICsgJy1oYW5kbGVcIiBjbGFzcz1cIicgKyBwcmVmaXggKyAnc2xpZGVyLWhhbmRsZVwiIHJvbGU9XCJzbGlkZXJcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+JyArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHRyZXNldDogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnZhbHVlKHRoaXMuX2luaXRWYWx1ZSkucmVwYWludCgpO1xuXHRcdH0sXG5cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgbWluVmFsdWUsIG1heFZhbHVlLCBzY3JlZW5Db3JkTmFtZSxcblx0XHRcdFx0XHRzdHlsZVBvc05hbWUsIHNpemVOYW1lLCBzaG9ydFNpemVOYW1lO1xuXG5cdFx0XHRmdW5jdGlvbiB0b0ZyYWN0aW9uKG1pbiwgbWF4LCB2YWwpIHtcblx0XHRcdFx0cmV0dXJuICh2YWwgKyBtaW4pIC8gKG1heCAtIG1pbik7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZyb21GcmFjdGlvbihtaW4sIG1heCwgdmFsKSB7XG5cdFx0XHRcdHJldHVybiAodmFsICogKG1heCAtIG1pbikpIC0gbWluO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBoYW5kbGVLZXlib2FyZChtaW5WYWx1ZSwgbWF4VmFsdWUpIHtcblx0XHRcdFx0ZnVuY3Rpb24gYWx0ZXIoZGVsdGEpIHtcblx0XHRcdFx0XHR2YXIgdmFsdWU7XG5cblx0XHRcdFx0XHR2YWx1ZSA9IHNlbGYudmFsdWUoKTtcblx0XHRcdFx0XHR2YWx1ZSA9IGZyb21GcmFjdGlvbihtaW5WYWx1ZSwgbWF4VmFsdWUsIHRvRnJhY3Rpb24obWluVmFsdWUsIG1heFZhbHVlLCB2YWx1ZSkgKyAoZGVsdGEgKiAwLjA1KSk7XG5cdFx0XHRcdFx0dmFsdWUgPSBjb25zdHJhaW4odmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSk7XG5cblx0XHRcdFx0XHRzZWxmLnZhbHVlKHZhbHVlKTtcblxuXHRcdFx0XHRcdHNlbGYuZmlyZSgnZHJhZ3N0YXJ0Jywge3ZhbHVlOiB2YWx1ZX0pO1xuXHRcdFx0XHRcdHNlbGYuZmlyZSgnZHJhZycsIHt2YWx1ZTogdmFsdWV9KTtcblx0XHRcdFx0XHRzZWxmLmZpcmUoJ2RyYWdlbmQnLCB7dmFsdWU6IHZhbHVlfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzZWxmLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdHN3aXRjaCAoZS5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIDM3OlxuXHRcdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdFx0YWx0ZXIoLTEpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSAzOTpcblx0XHRcdFx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdFx0XHRcdGFsdGVyKDEpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBoYW5kbGVEcmFnKG1pblZhbHVlLCBtYXhWYWx1ZSwgaGFuZGxlRWwpIHtcblx0XHRcdFx0dmFyIHN0YXJ0UG9zLCBzdGFydEhhbmRsZVBvcywgbWF4SGFuZGxlUG9zLCBoYW5kbGVQb3MsIHZhbHVlO1xuXG5cdFx0XHRcdHNlbGYuX2RyYWdIZWxwZXIgPSBuZXcgRHJhZ0hlbHBlcihzZWxmLl9pZCwge1xuXHRcdFx0XHRcdGhhbmRsZTogc2VsZi5faWQgKyBcIi1oYW5kbGVcIixcblxuXHRcdFx0XHRcdHN0YXJ0OiBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0XHRzdGFydFBvcyA9IGVbc2NyZWVuQ29yZE5hbWVdO1xuXHRcdFx0XHRcdFx0c3RhcnRIYW5kbGVQb3MgPSBwYXJzZUludChzZWxmLmdldEVsKCdoYW5kbGUnKS5zdHlsZVtzdHlsZVBvc05hbWVdLCAxMCk7XG5cdFx0XHRcdFx0XHRtYXhIYW5kbGVQb3MgPSAoc2VsZi5sYXlvdXRSZWN0KClbc2hvcnRTaXplTmFtZV0gfHwgMTAwKSAtIERvbVV0aWxzLmdldFNpemUoaGFuZGxlRWwpW3NpemVOYW1lXTtcblx0XHRcdFx0XHRcdHNlbGYuZmlyZSgnZHJhZ3N0YXJ0Jywge3ZhbHVlOiB2YWx1ZX0pO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRkcmFnOiBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGVsdGEgPSBlW3NjcmVlbkNvcmROYW1lXSAtIHN0YXJ0UG9zO1xuXG5cdFx0XHRcdFx0XHRoYW5kbGVQb3MgPSBjb25zdHJhaW4oc3RhcnRIYW5kbGVQb3MgKyBkZWx0YSwgMCwgbWF4SGFuZGxlUG9zKTtcblx0XHRcdFx0XHRcdGhhbmRsZUVsLnN0eWxlW3N0eWxlUG9zTmFtZV0gPSBoYW5kbGVQb3MgKyAncHgnO1xuXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IG1pblZhbHVlICsgKGhhbmRsZVBvcyAvIG1heEhhbmRsZVBvcykgKiAobWF4VmFsdWUgLSBtaW5WYWx1ZSk7XG5cdFx0XHRcdFx0XHRzZWxmLnZhbHVlKHZhbHVlKTtcblxuXHRcdFx0XHRcdFx0c2VsZi50b29sdGlwKCkudGV4dCgnJyArIHNlbGYuc2V0dGluZ3MucHJldmlld0ZpbHRlcih2YWx1ZSkpLnNob3coKS5tb3ZlUmVsKGhhbmRsZUVsLCAnYmMgdGMnKTtcblxuXHRcdFx0XHRcdFx0c2VsZi5maXJlKCdkcmFnJywge3ZhbHVlOiB2YWx1ZX0pO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRzdG9wOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHNlbGYudG9vbHRpcCgpLmhpZGUoKTtcblx0XHRcdFx0XHRcdHNlbGYuZmlyZSgnZHJhZ2VuZCcsIHt2YWx1ZTogdmFsdWV9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRtaW5WYWx1ZSA9IHNlbGYuX21pblZhbHVlO1xuXHRcdFx0bWF4VmFsdWUgPSBzZWxmLl9tYXhWYWx1ZTtcblxuXHRcdFx0aWYgKHNlbGYuc2V0dGluZ3Mub3JpZW50YXRpb24gPT0gXCJ2XCIpIHtcblx0XHRcdFx0c2NyZWVuQ29yZE5hbWUgPSBcInNjcmVlbllcIjtcblx0XHRcdFx0c3R5bGVQb3NOYW1lID0gXCJ0b3BcIjtcblx0XHRcdFx0c2l6ZU5hbWUgPSBcImhlaWdodFwiO1xuXHRcdFx0XHRzaG9ydFNpemVOYW1lID0gXCJoXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzY3JlZW5Db3JkTmFtZSA9IFwic2NyZWVuWFwiO1xuXHRcdFx0XHRzdHlsZVBvc05hbWUgPSBcImxlZnRcIjtcblx0XHRcdFx0c2l6ZU5hbWUgPSBcIndpZHRoXCI7XG5cdFx0XHRcdHNob3J0U2l6ZU5hbWUgPSBcIndcIjtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0aGFuZGxlS2V5Ym9hcmQobWluVmFsdWUsIG1heFZhbHVlLCBzZWxmLmdldEVsKCdoYW5kbGUnKSk7XG5cdFx0XHRoYW5kbGVEcmFnKG1pblZhbHVlLCBtYXhWYWx1ZSwgc2VsZi5nZXRFbCgnaGFuZGxlJykpO1xuXHRcdH0sXG5cblx0XHRyZXBhaW50OiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuX3N1cGVyKCk7XG5cdFx0XHR1cGRhdGVTbGlkZXJIYW5kbGUodGhpcywgdGhpcy52YWx1ZSgpKTtcblx0XHR9LFxuXG5cdFx0YmluZFN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTp2YWx1ZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0dXBkYXRlU2xpZGVySGFuZGxlKHNlbGYsIGUudmFsdWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBzZWxmLl9zdXBlcigpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1NwYWNlci5qc1xuXG4vKipcbiAqIFNwYWNlci5qc1xuICpcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzcGFjZXIuIFRoaXMgY29udHJvbCBpcyB1c2VkIGluIGZsZXggbGF5b3V0cyBmb3IgZXhhbXBsZS5cbiAqXG4gKiBALXgtbGVzcyBTcGFjZXIubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuU3BhY2VyXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLldpZGdldFxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL1NwYWNlclwiLCBbXG5cdFwidGlueW1jZS91aS9XaWRnZXRcIlxuXSwgZnVuY3Rpb24oV2lkZ2V0KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBXaWRnZXQuZXh0ZW5kKHtcblx0XHQvKipcblx0XHQgKiBSZW5kZXJzIHRoZSBjb250cm9sIGFzIGEgSFRNTCBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbmRlckh0bWxcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sLlxuXHRcdCAqL1xuXHRcdHJlbmRlckh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCdzcGFjZXInKTtcblx0XHRcdHNlbGYuY2FuRm9jdXMgPSBmYWxzZTtcblxuXHRcdFx0cmV0dXJuICc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJ1wiIGNsYXNzPVwiJyArIHNlbGYuY2xhc3NlcyArICdcIj48L2Rpdj4nO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1NwbGl0QnV0dG9uLmpzXG5cbi8qKlxuICogU3BsaXRCdXR0b24uanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3BsaXQgYnV0dG9uLlxuICpcbiAqIEAteC1sZXNzIFNwbGl0QnV0dG9uLmxlc3NcbiAqIEBjbGFzcyB0aW55bWNlLnVpLlNwbGl0QnV0dG9uXG4gKiBAZXh0ZW5kcyB0aW55bWNlLnVpLkJ1dHRvblxuICovXG5kZWZpbmUoXCJ0aW55bWNlL3VpL1NwbGl0QnV0dG9uXCIsIFtcblx0XCJ0aW55bWNlL3VpL01lbnVCdXR0b25cIixcblx0XCJ0aW55bWNlL3VpL0RvbVV0aWxzXCIsXG5cdFwidGlueW1jZS9kb20vRG9tUXVlcnlcIlxuXSwgZnVuY3Rpb24oTWVudUJ1dHRvbiwgRG9tVXRpbHMsICQpIHtcblx0cmV0dXJuIE1lbnVCdXR0b24uZXh0ZW5kKHtcblx0XHREZWZhdWx0czoge1xuXHRcdFx0Y2xhc3NlczogXCJ3aWRnZXQgYnRuIHNwbGl0YnRuXCIsXG5cdFx0XHRyb2xlOiBcImJ1dHRvblwiXG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFJlcGFpbnRzIHRoZSBjb250cm9sIGFmdGVyIGEgbGF5b3V0IG9wZXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcmVwYWludFxuXHRcdCAqL1xuXHRcdHJlcGFpbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBlbG0gPSBzZWxmLmdldEVsKCksIHJlY3QgPSBzZWxmLmxheW91dFJlY3QoKSwgbWFpbkJ1dHRvbkVsbSwgbWVudUJ1dHRvbkVsbTtcblxuXHRcdFx0c2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0bWFpbkJ1dHRvbkVsbSA9IGVsbS5maXJzdENoaWxkO1xuXHRcdFx0bWVudUJ1dHRvbkVsbSA9IGVsbS5sYXN0Q2hpbGQ7XG5cblx0XHRcdCQobWFpbkJ1dHRvbkVsbSkuY3NzKHtcblx0XHRcdFx0d2lkdGg6IHJlY3QudyAtIERvbVV0aWxzLmdldFNpemUobWVudUJ1dHRvbkVsbSkud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogcmVjdC5oIC0gMlxuXHRcdFx0fSk7XG5cblx0XHRcdCQobWVudUJ1dHRvbkVsbSkuY3NzKHtcblx0XHRcdFx0aGVpZ2h0OiByZWN0LmggLSAyXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFNldHMgdGhlIGFjdGl2ZSBtZW51IHN0YXRlLlxuXHRcdCAqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0XHRhY3RpdmVNZW51OiBmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0XHQkKHNlbGYuZ2V0RWwoKS5sYXN0Q2hpbGQpLnRvZ2dsZUNsYXNzKHNlbGYuY2xhc3NQcmVmaXggKyAnYWN0aXZlJywgc3RhdGUpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZW5kZXJzIHRoZSBjb250cm9sIGFzIGEgSFRNTCBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbmRlckh0bWxcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sLlxuXHRcdCAqL1xuXHRcdHJlbmRlckh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBpZCA9IHNlbGYuX2lkLCBwcmVmaXggPSBzZWxmLmNsYXNzUHJlZml4LCBpbWFnZTtcblx0XHRcdHZhciBpY29uID0gc2VsZi5zdGF0ZS5nZXQoJ2ljb24nKSwgdGV4dCA9IHNlbGYuc3RhdGUuZ2V0KCd0ZXh0JyksXG5cdFx0XHRcdHRleHRIdG1sID0gJyc7XG5cblx0XHRcdGltYWdlID0gc2VsZi5zZXR0aW5ncy5pbWFnZTtcblx0XHRcdGlmIChpbWFnZSkge1xuXHRcdFx0XHRpY29uID0gJ25vbmUnO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQgZm9yIFtoaWdoIGRwaSwgbG93IGRwaV0gaW1hZ2Ugc291cmNlc1xuXHRcdFx0XHRpZiAodHlwZW9mIGltYWdlICE9IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRpbWFnZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyBpbWFnZVswXSA6IGltYWdlWzFdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW1hZ2UgPSAnIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcJycgKyBpbWFnZSArICdcXCcpXCInO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aW1hZ2UgPSAnJztcblx0XHRcdH1cblxuXHRcdFx0aWNvbiA9IHNlbGYuc2V0dGluZ3MuaWNvbiA/IHByZWZpeCArICdpY28gJyArIHByZWZpeCArICdpLScgKyBpY29uIDogJyc7XG5cblx0XHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRcdHNlbGYuY2xhc3Nlcy5hZGQoJ2J0bi1oYXMtdGV4dCcpO1xuXHRcdFx0XHR0ZXh0SHRtbCA9ICc8c3BhbiBjbGFzcz1cIicgKyBwcmVmaXggKyAndHh0XCI+JyArIHNlbGYuZW5jb2RlKHRleHQpICsgJzwvc3Bhbj4nO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnPGRpdiBpZD1cIicgKyBpZCArICdcIiBjbGFzcz1cIicgKyBzZWxmLmNsYXNzZXMgKyAnXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHQnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaGlkZWZvY3VzPVwiMVwiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdChpY29uID8gJzxpIGNsYXNzPVwiJyArIGljb24gKyAnXCInICsgaW1hZ2UgKyAnPjwvaT4nIDogJycpICtcblx0XHRcdFx0XHRcdHRleHRIdG1sICtcblx0XHRcdFx0XHQnPC9idXR0b24+JyArXG5cdFx0XHRcdFx0JzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiJyArIHByZWZpeCArICdvcGVuXCIgaGlkZWZvY3VzPVwiMVwiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdC8vKGljb24gPyAnPGkgY2xhc3M9XCInICsgaWNvbiArICdcIj48L2k+JyA6ICcnKSArXG5cdFx0XHRcdFx0XHQoc2VsZi5fbWVudUJ0blRleHQgPyAoaWNvbiA/ICdcXHUwMGEwJyA6ICcnKSArIHNlbGYuX21lbnVCdG5UZXh0IDogJycpICtcblx0XHRcdFx0XHRcdCcgPGkgY2xhc3M9XCInICsgcHJlZml4ICsgJ2NhcmV0XCI+PC9pPicgK1xuXHRcdFx0XHRcdCc8L2J1dHRvbj4nICtcblx0XHRcdFx0JzwvZGl2Pidcblx0XHRcdCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIENhbGxlZCBhZnRlciB0aGUgY29udHJvbCBoYXMgYmVlbiByZW5kZXJlZC5cblx0XHQgKlxuXHRcdCAqIEBtZXRob2QgcG9zdFJlbmRlclxuXHRcdCAqL1xuXHRcdHBvc3RSZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBvbkNsaWNrSGFuZGxlciA9IHNlbGYuc2V0dGluZ3Mub25jbGljaztcblxuXHRcdFx0c2VsZi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdHZhciBub2RlID0gZS50YXJnZXQ7XG5cblx0XHRcdFx0aWYgKGUuY29udHJvbCA9PSB0aGlzKSB7XG5cdFx0XHRcdFx0Ly8gRmluZCBjbGlja3MgdGhhdCBpcyBvbiB0aGUgbWFpbiBidXR0b25cblx0XHRcdFx0XHR3aGlsZSAobm9kZSkge1xuXHRcdFx0XHRcdFx0aWYgKChlLmFyaWEgJiYgZS5hcmlhLmtleSAhPSAnZG93bicpIHx8IChub2RlLm5vZGVOYW1lID09ICdCVVRUT04nICYmIG5vZGUuY2xhc3NOYW1lLmluZGV4T2YoJ29wZW4nKSA9PSAtMSkpIHtcblx0XHRcdFx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAob25DbGlja0hhbmRsZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrSGFuZGxlci5jYWxsKHRoaXMsIGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGRlbGV0ZSBzZWxmLnNldHRpbmdzLm9uY2xpY2s7XG5cblx0XHRcdHJldHVybiBzZWxmLl9zdXBlcigpO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1N0YWNrTGF5b3V0LmpzXG5cbi8qKlxuICogU3RhY2tMYXlvdXQuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBUaGlzIGxheW91dCB1c2VzIHRoZSBicm93c2VycyBsYXlvdXQgd2hlbiB0aGUgaXRlbXMgYXJlIGJsb2Nrcy5cbiAqXG4gKiBALXgtbGVzcyBTdGFja0xheW91dC5sZXNzXG4gKiBAY2xhc3MgdGlueW1jZS51aS5TdGFja0xheW91dFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5GbG93TGF5b3V0XG4gKi9cbmRlZmluZShcInRpbnltY2UvdWkvU3RhY2tMYXlvdXRcIiwgW1xuXHRcInRpbnltY2UvdWkvRmxvd0xheW91dFwiXG5dLCBmdW5jdGlvbihGbG93TGF5b3V0KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHJldHVybiBGbG93TGF5b3V0LmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGNvbnRhaW5lckNsYXNzOiAnc3RhY2stbGF5b3V0Jyxcblx0XHRcdGNvbnRyb2xDbGFzczogJ3N0YWNrLWxheW91dC1pdGVtJyxcblx0XHRcdGVuZENsYXNzOiAnYnJlYWsnXG5cdFx0fSxcblxuXHRcdGlzTmF0aXZlOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1RhYlBhbmVsLmpzXG5cbi8qKlxuICogVGFiUGFuZWwuanNcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXG4gKlxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGFiIHBhbmVsIGNvbnRyb2wuXG4gKlxuICogQC14LWxlc3MgVGFiUGFuZWwubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuVGFiUGFuZWxcbiAqIEBleHRlbmRzIHRpbnltY2UudWkuUGFuZWxcbiAqXG4gKiBAc2V0dGluZyB7TnVtYmVyfSBhY3RpdmVUYWIgQWN0aXZlIHRhYiBpbmRleC5cbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9UYWJQYW5lbFwiLCBbXG5cdFwidGlueW1jZS91aS9QYW5lbFwiLFxuXHRcInRpbnltY2UvZG9tL0RvbVF1ZXJ5XCIsXG5cdFwidGlueW1jZS91aS9Eb21VdGlsc1wiXG5dLCBmdW5jdGlvbihQYW5lbCwgJCwgRG9tVXRpbHMpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0cmV0dXJuIFBhbmVsLmV4dGVuZCh7XG5cdFx0RGVmYXVsdHM6IHtcblx0XHRcdGxheW91dDogJ2Fic29sdXRlJyxcblx0XHRcdGRlZmF1bHRzOiB7XG5cdFx0XHRcdHR5cGU6ICdwYW5lbCdcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQWN0aXZhdGVzIHRoZSBzcGVjaWZpZWQgdGFiIGJ5IGluZGV4LlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCBhY3RpdmF0ZVRhYlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBpZHggSW5kZXggb2YgdGhlIHRhYiB0byBhY3RpdmF0ZS5cblx0XHQgKi9cblx0XHRhY3RpdmF0ZVRhYjogZnVuY3Rpb24oaWR4KSB7XG5cdFx0XHR2YXIgYWN0aXZlVGFiRWxtO1xuXG5cdFx0XHRpZiAodGhpcy5hY3RpdmVUYWJJZCkge1xuXHRcdFx0XHRhY3RpdmVUYWJFbG0gPSB0aGlzLmdldEVsKHRoaXMuYWN0aXZlVGFiSWQpO1xuXHRcdFx0XHQkKGFjdGl2ZVRhYkVsbSkucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc1ByZWZpeCArICdhY3RpdmUnKTtcblx0XHRcdFx0YWN0aXZlVGFiRWxtLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIFwiZmFsc2VcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYWN0aXZlVGFiSWQgPSAndCcgKyBpZHg7XG5cblx0XHRcdGFjdGl2ZVRhYkVsbSA9IHRoaXMuZ2V0RWwoJ3QnICsgaWR4KTtcblx0XHRcdGFjdGl2ZVRhYkVsbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBcInRydWVcIik7XG5cdFx0XHQkKGFjdGl2ZVRhYkVsbSkuYWRkQ2xhc3ModGhpcy5jbGFzc1ByZWZpeCArICdhY3RpdmUnKTtcblxuXHRcdFx0dGhpcy5pdGVtcygpW2lkeF0uc2hvdygpLmZpcmUoJ3Nob3d0YWInKTtcblx0XHRcdHRoaXMucmVmbG93KCk7XG5cblx0XHRcdHRoaXMuaXRlbXMoKS5lYWNoKGZ1bmN0aW9uKGl0ZW0sIGkpIHtcblx0XHRcdFx0aWYgKGlkeCAhPSBpKSB7XG5cdFx0XHRcdFx0aXRlbS5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZW5kZXJzIHRoZSBjb250cm9sIGFzIGEgSFRNTCBzdHJpbmcuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHJlbmRlckh0bWxcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sLlxuXHRcdCAqL1xuXHRcdHJlbmRlckh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLCBsYXlvdXQgPSBzZWxmLl9sYXlvdXQsIHRhYnNIdG1sID0gJycsIHByZWZpeCA9IHNlbGYuY2xhc3NQcmVmaXg7XG5cblx0XHRcdHNlbGYucHJlUmVuZGVyKCk7XG5cdFx0XHRsYXlvdXQucHJlUmVuZGVyKHNlbGYpO1xuXG5cdFx0XHRzZWxmLml0ZW1zKCkuZWFjaChmdW5jdGlvbihjdHJsLCBpKSB7XG5cdFx0XHRcdHZhciBpZCA9IHNlbGYuX2lkICsgJy10JyArIGk7XG5cblx0XHRcdFx0Y3RybC5hcmlhKCdyb2xlJywgJ3RhYnBhbmVsJyk7XG5cdFx0XHRcdGN0cmwuYXJpYSgnbGFiZWxsZWRieScsIGlkKTtcblxuXHRcdFx0XHR0YWJzSHRtbCArPSAoXG5cdFx0XHRcdFx0JzxkaXYgaWQ9XCInICsgaWQgKyAnXCIgY2xhc3M9XCInICsgcHJlZml4ICsgJ3RhYlwiICcgK1xuXHRcdFx0XHRcdFx0J3Vuc2VsZWN0YWJsZT1cIm9uXCIgcm9sZT1cInRhYlwiIGFyaWEtY29udHJvbHM9XCInICsgY3RybC5faWQgKyAnXCIgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCIgdGFiSW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0c2VsZi5lbmNvZGUoY3RybC5zZXR0aW5ncy50aXRsZSkgK1xuXHRcdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0JzxkaXYgaWQ9XCInICsgc2VsZi5faWQgKyAnXCIgY2xhc3M9XCInICsgc2VsZi5jbGFzc2VzICsgJ1wiIGhpZGVmb2N1cz1cIjFcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0JzxkaXYgaWQ9XCInICsgc2VsZi5faWQgKyAnLWhlYWRcIiBjbGFzcz1cIicgKyBwcmVmaXggKyAndGFic1wiIHJvbGU9XCJ0YWJsaXN0XCI+JyArXG5cdFx0XHRcdFx0XHR0YWJzSHRtbCArXG5cdFx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0XHRcdCc8ZGl2IGlkPVwiJyArIHNlbGYuX2lkICsgJy1ib2R5XCIgY2xhc3M9XCInICsgc2VsZi5ib2R5Q2xhc3NlcyArICdcIj4nICtcblx0XHRcdFx0XHRcdGxheW91dC5yZW5kZXJIdG1sKHNlbGYpICtcblx0XHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHRcdCc8L2Rpdj4nXG5cdFx0XHQpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmVuZGVyZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBvc3RSZW5kZXJcblx0XHQgKi9cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5fc3VwZXIoKTtcblxuXHRcdFx0c2VsZi5zZXR0aW5ncy5hY3RpdmVUYWIgPSBzZWxmLnNldHRpbmdzLmFjdGl2ZVRhYiB8fCAwO1xuXHRcdFx0c2VsZi5hY3RpdmF0ZVRhYihzZWxmLnNldHRpbmdzLmFjdGl2ZVRhYik7XG5cblx0XHRcdHRoaXMub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0UGFyZW50ID0gZS50YXJnZXQucGFyZW50Tm9kZTtcblxuXHRcdFx0XHRpZiAodGFyZ2V0UGFyZW50ICYmIHRhcmdldFBhcmVudC5pZCA9PSBzZWxmLl9pZCArICctaGVhZCcpIHtcblx0XHRcdFx0XHR2YXIgaSA9IHRhcmdldFBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDtcblxuXHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRQYXJlbnQuY2hpbGROb2Rlc1tpXSA9PSBlLnRhcmdldCkge1xuXHRcdFx0XHRcdFx0XHRzZWxmLmFjdGl2YXRlVGFiKGkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEluaXRpYWxpemVzIHRoZSBjdXJyZW50IGNvbnRyb2xzIGxheW91dCByZWN0LlxuXHRcdCAqIFRoaXMgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgbGF5b3V0IG1hbmFnZXJzIHRvIGRldGVybWluZSB0aGVcblx0XHQgKiBkZWZhdWx0IG1pbldpZHRoL21pbkhlaWdodCBldGMuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIGluaXRMYXlvdXRSZWN0XG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBMYXlvdXQgcmVjdCBpbnN0YW5jZS5cblx0XHQgKi9cblx0XHRpbml0TGF5b3V0UmVjdDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHJlY3QsIG1pblcsIG1pbkg7XG5cblx0XHRcdG1pblcgPSBEb21VdGlscy5nZXRTaXplKHNlbGYuZ2V0RWwoJ2hlYWQnKSkud2lkdGg7XG5cdFx0XHRtaW5XID0gbWluVyA8IDAgPyAwIDogbWluVztcblx0XHRcdG1pbkggPSAwO1xuXG5cdFx0XHRzZWxmLml0ZW1zKCkuZWFjaChmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRcdG1pblcgPSBNYXRoLm1heChtaW5XLCBpdGVtLmxheW91dFJlY3QoKS5taW5XKTtcblx0XHRcdFx0bWluSCA9IE1hdGgubWF4KG1pbkgsIGl0ZW0ubGF5b3V0UmVjdCgpLm1pbkgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYuaXRlbXMoKS5lYWNoKGZ1bmN0aW9uKGN0cmwpIHtcblx0XHRcdFx0Y3RybC5zZXR0aW5ncy54ID0gMDtcblx0XHRcdFx0Y3RybC5zZXR0aW5ncy55ID0gMDtcblx0XHRcdFx0Y3RybC5zZXR0aW5ncy53ID0gbWluVztcblx0XHRcdFx0Y3RybC5zZXR0aW5ncy5oID0gbWluSDtcblxuXHRcdFx0XHRjdHJsLmxheW91dFJlY3Qoe1xuXHRcdFx0XHRcdHg6IDAsXG5cdFx0XHRcdFx0eTogMCxcblx0XHRcdFx0XHR3OiBtaW5XLFxuXHRcdFx0XHRcdGg6IG1pbkhcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dmFyIGhlYWRIID0gRG9tVXRpbHMuZ2V0U2l6ZShzZWxmLmdldEVsKCdoZWFkJykpLmhlaWdodDtcblxuXHRcdFx0c2VsZi5zZXR0aW5ncy5taW5XaWR0aCA9IG1pblc7XG5cdFx0XHRzZWxmLnNldHRpbmdzLm1pbkhlaWdodCA9IG1pbkggKyBoZWFkSDtcblxuXHRcdFx0cmVjdCA9IHNlbGYuX3N1cGVyKCk7XG5cdFx0XHRyZWN0LmRlbHRhSCArPSBoZWFkSDtcblx0XHRcdHJlY3QuaW5uZXJIID0gcmVjdC5oIC0gcmVjdC5kZWx0YUg7XG5cblx0XHRcdHJldHVybiByZWN0O1xuXHRcdH1cblx0fSk7XG59KTtcblxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9jbGFzc2VzL3VpL1RleHRCb3guanNcblxuLyoqXG4gKiBUZXh0Qm94LmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZXh0Ym94LlxuICpcbiAqIEAteC1sZXNzIFRleHRCb3gubGVzc1xuICogQGNsYXNzIHRpbnltY2UudWkuVGV4dEJveFxuICogQGV4dGVuZHMgdGlueW1jZS51aS5XaWRnZXRcbiAqL1xuZGVmaW5lKFwidGlueW1jZS91aS9UZXh0Qm94XCIsIFtcblx0XCJ0aW55bWNlL3VpL1dpZGdldFwiLFxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxuXHRcInRpbnltY2UvdWkvRG9tVXRpbHNcIlxuXSwgZnVuY3Rpb24oV2lkZ2V0LCBUb29scywgRG9tVXRpbHMpIHtcblx0cmV0dXJuIFdpZGdldC5leHRlbmQoe1xuXHRcdC8qKlxuXHRcdCAqIENvbnN0cnVjdHMgYSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2V0dGluZ3MuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3MgTmFtZS92YWx1ZSBvYmplY3Qgd2l0aCBzZXR0aW5ncy5cblx0XHQgKiBAc2V0dGluZyB7Qm9vbGVhbn0gbXVsdGlsaW5lIFRydWUgaWYgdGhlIHRleHRib3ggaXMgYSBtdWx0aWxpbmUgY29udHJvbC5cblx0XHQgKiBAc2V0dGluZyB7TnVtYmVyfSBtYXhMZW5ndGggTWF4IGxlbmd0aCBmb3IgdGhlIHRleHRib3guXG5cdFx0ICogQHNldHRpbmcge051bWJlcn0gc2l6ZSBTaXplIG9mIHRoZSB0ZXh0Ym94IGluIGNoYXJhY3RlcnMuXG5cdFx0ICovXG5cdFx0aW5pdDogZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5fc3VwZXIoc2V0dGluZ3MpO1xuXG5cdFx0XHRzZWxmLmNsYXNzZXMuYWRkKCd0ZXh0Ym94Jyk7XG5cblx0XHRcdGlmIChzZXR0aW5ncy5tdWx0aWxpbmUpIHtcblx0XHRcdFx0c2VsZi5jbGFzc2VzLmFkZCgnbXVsdGlsaW5lJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdHZhciByb290Q29udHJvbDtcblxuXHRcdFx0XHRcdGlmIChlLmtleUNvZGUgPT0gMTMpIHtcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdFx0Ly8gRmluZCByb290IGNvbnRyb2wgdGhhdCB3ZSBjYW4gZG8gdG9KU09OIG9uXG5cdFx0XHRcdFx0XHRzZWxmLnBhcmVudHMoKS5yZXZlcnNlKCkuZWFjaChmdW5jdGlvbihjdHJsKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjdHJsLnRvSlNPTikge1xuXHRcdFx0XHRcdFx0XHRcdHJvb3RDb250cm9sID0gY3RybDtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQvLyBGaXJlIGV2ZW50IG9uIGN1cnJlbnQgdGV4dCBib3ggd2l0aCB0aGUgc2VyaWFsaXplZCBkYXRhIG9mIHRoZSB3aG9sZSBmb3JtXG5cdFx0XHRcdFx0XHRzZWxmLmZpcmUoJ3N1Ym1pdCcsIHtkYXRhOiByb290Q29udHJvbC50b0pTT04oKX0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2VsZi5vbigna2V5dXAnLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0c2VsZi5zdGF0ZS5zZXQoJ3ZhbHVlJywgZS50YXJnZXQudmFsdWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVwYWludHMgdGhlIGNvbnRyb2wgYWZ0ZXIgYSBsYXlvdXQgb3BlcmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZXBhaW50XG5cdFx0ICovXG5cdFx0cmVwYWludDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsIHN0eWxlLCByZWN0LCBib3JkZXJCb3gsIGJvcmRlclcsIGJvcmRlckggPSAwLCBsYXN0UmVwYWludFJlY3Q7XG5cblx0XHRcdHN0eWxlID0gc2VsZi5nZXRFbCgpLnN0eWxlO1xuXHRcdFx0cmVjdCA9IHNlbGYuX2xheW91dFJlY3Q7XG5cdFx0XHRsYXN0UmVwYWludFJlY3QgPSBzZWxmLl9sYXN0UmVwYWludFJlY3QgfHwge307XG5cblx0XHRcdC8vIERldGVjdCBvbGQgSUUgNys4IGFkZCBsaW5lSGVpZ2h0IHRvIGFsaWduIGNhcmV0IHZlcnRpY2FsbHkgaW4gdGhlIG1pZGRsZVxuXHRcdFx0dmFyIGRvYyA9IGRvY3VtZW50O1xuXHRcdFx0aWYgKCFzZWxmLnNldHRpbmdzLm11bHRpbGluZSAmJiBkb2MuYWxsICYmICghZG9jLmRvY3VtZW50TW9kZSB8fCBkb2MuZG9jdW1lbnRNb2RlIDw9IDgpKSB7XG5cdFx0XHRcdHN0eWxlLmxpbmVIZWlnaHQgPSAocmVjdC5oIC0gYm9yZGVySCkgKyAncHgnO1xuXHRcdFx0fVxuXG5cdFx0XHRib3JkZXJCb3ggPSBzZWxmLmJvcmRlckJveDtcblx0XHRcdGJvcmRlclcgPSBib3JkZXJCb3gubGVmdCArIGJvcmRlckJveC5yaWdodCArIDg7XG5cdFx0XHRib3JkZXJIID0gYm9yZGVyQm94LnRvcCArIGJvcmRlckJveC5ib3R0b20gKyAoc2VsZi5zZXR0aW5ncy5tdWx0aWxpbmUgPyA4IDogMCk7XG5cblx0XHRcdGlmIChyZWN0LnggIT09IGxhc3RSZXBhaW50UmVjdC54KSB7XG5cdFx0XHRcdHN0eWxlLmxlZnQgPSByZWN0LnggKyAncHgnO1xuXHRcdFx0XHRsYXN0UmVwYWludFJlY3QueCA9IHJlY3QueDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlY3QueSAhPT0gbGFzdFJlcGFpbnRSZWN0LnkpIHtcblx0XHRcdFx0c3R5bGUudG9wID0gcmVjdC55ICsgJ3B4Jztcblx0XHRcdFx0bGFzdFJlcGFpbnRSZWN0LnkgPSByZWN0Lnk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZWN0LncgIT09IGxhc3RSZXBhaW50UmVjdC53KSB7XG5cdFx0XHRcdHN0eWxlLndpZHRoID0gKHJlY3QudyAtIGJvcmRlclcpICsgJ3B4Jztcblx0XHRcdFx0bGFzdFJlcGFpbnRSZWN0LncgPSByZWN0Lnc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyZWN0LmggIT09IGxhc3RSZXBhaW50UmVjdC5oKSB7XG5cdFx0XHRcdHN0eWxlLmhlaWdodCA9IChyZWN0LmggLSBib3JkZXJIKSArICdweCc7XG5cdFx0XHRcdGxhc3RSZXBhaW50UmVjdC5oID0gcmVjdC5oO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxmLl9sYXN0UmVwYWludFJlY3QgPSBsYXN0UmVwYWludFJlY3Q7XG5cdFx0XHRzZWxmLmZpcmUoJ3JlcGFpbnQnLCB7fSwgZmFsc2UpO1xuXG5cdFx0XHRyZXR1cm4gc2VsZjtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVuZGVycyB0aGUgY29udHJvbCBhcyBhIEhUTUwgc3RyaW5nLlxuXHRcdCAqXG5cdFx0ICogQG1ldGhvZCByZW5kZXJIdG1sXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBIVE1MIHJlcHJlc2VudGluZyB0aGUgY29udHJvbC5cblx0XHQgKi9cblx0XHRyZW5kZXJIdG1sOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcywgc2V0dGluZ3MgPSBzZWxmLnNldHRpbmdzLCBhdHRycywgZWxtO1xuXG5cdFx0XHRhdHRycyA9IHtcblx0XHRcdFx0aWQ6IHNlbGYuX2lkLFxuXHRcdFx0XHRoaWRlZm9jdXM6ICcxJ1xuXHRcdFx0fTtcblxuXHRcdFx0VG9vbHMuZWFjaChbXG5cdFx0XHRcdCdyb3dzJyxcdCdzcGVsbGNoZWNrJyxcdCdtYXhMZW5ndGgnLCAnc2l6ZScsICdyZWFkb25seScsICdtaW4nLFxuXHRcdFx0XHQnbWF4JywgJ3N0ZXAnLCAnbGlzdCcsICdwYXR0ZXJuJywgJ3BsYWNlaG9sZGVyJywgJ3JlcXVpcmVkJywgJ211bHRpcGxlJ1xuXHRcdFx0XSwgZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0XHRhdHRyc1tuYW1lXSA9IHNldHRpbmdzW25hbWVdO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChzZWxmLmRpc2FibGVkKCkpIHtcblx0XHRcdFx0YXR0cnMuZGlzYWJsZWQgPSAnZGlzYWJsZWQnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2V0dGluZ3Muc3VidHlwZSkge1xuXHRcdFx0XHRhdHRycy50eXBlID0gc2V0dGluZ3Muc3VidHlwZTtcblx0XHRcdH1cblxuXHRcdFx0ZWxtID0gRG9tVXRpbHMuY3JlYXRlKHNldHRpbmdzLm11bHRpbGluZSA/ICd0ZXh0YXJlYScgOiAnaW5wdXQnLCBhdHRycyk7XG5cdFx0XHRlbG0udmFsdWUgPSBzZWxmLnN0YXRlLmdldCgndmFsdWUnKTtcblx0XHRcdGVsbS5jbGFzc05hbWUgPSBzZWxmLmNsYXNzZXM7XG5cblx0XHRcdHJldHVybiBlbG0ub3V0ZXJIVE1MO1xuXHRcdH0sXG5cblx0XHR2YWx1ZTogZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc3RhdGUuc2V0KCd2YWx1ZScsIHZhbHVlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGUgcmVhbCBzdGF0ZSBpcyBpbiBzeW5jXG5cdFx0XHRpZiAodGhpcy5zdGF0ZS5nZXQoJ3JlbmRlcmVkJykpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5zZXQoJ3ZhbHVlJywgdGhpcy5nZXRFbCgpLnZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuc3RhdGUuZ2V0KCd2YWx1ZScpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmVuZGVyZWQuXG5cdFx0ICpcblx0XHQgKiBAbWV0aG9kIHBvc3RSZW5kZXJcblx0XHQgKi9cblx0XHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2VsZi5nZXRFbCgpLnZhbHVlID0gc2VsZi5zdGF0ZS5nZXQoJ3ZhbHVlJyk7XG5cdFx0XHRzZWxmLl9zdXBlcigpO1xuXG5cdFx0XHRzZWxmLiRlbC5vbignY2hhbmdlJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRzZWxmLnN0YXRlLnNldCgndmFsdWUnLCBlLnRhcmdldC52YWx1ZSk7XG5cdFx0XHRcdHNlbGYuZmlyZSgnY2hhbmdlJywgZSk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0YmluZFN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTp2YWx1ZScsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYgKHNlbGYuZ2V0RWwoKS52YWx1ZSAhPSBlLnZhbHVlKSB7XG5cdFx0XHRcdFx0c2VsZi5nZXRFbCgpLnZhbHVlID0gZS52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYuc3RhdGUub24oJ2NoYW5nZTpkaXNhYmxlZCcsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0c2VsZi5nZXRFbCgpLmRpc2FibGVkID0gZS52YWx1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gc2VsZi5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJGVsLm9mZigpO1xuXHRcdFx0dGhpcy5fc3VwZXIoKTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvY2xhc3Nlcy9SZWdpc3Rlci5qc1xuXG4vKipcbiAqIFJlZ2lzdGVyLmpzXG4gKlxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxuICpcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xuICovXG5cbi8qKlxuICogVGhpcyByZWdpc3RlcnMgdGlueW1jZSBpbiBjb21tb24gbW9kdWxlIGxvYWRlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyB0aW55bWNlLlJlZ2lzdGVyXG4gKi9cbmRlZmluZShcInRpbnltY2UvUmVnaXN0ZXJcIiwgW1xuXSwgZnVuY3Rpb24oKSB7XG5cdC8qZXNsaW50IGNvbnNpc3RlbnQtdGhpczogMCAqL1xuXHR2YXIgY29udGV4dCA9IHRoaXMgfHwgd2luZG93O1xuXG5cdHZhciB0aW55bWNlID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGNvbnRleHQudGlueW1jZTtcblx0fTtcblxuXHRpZiAodHlwZW9mIGNvbnRleHQuZGVmaW5lID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHQvLyBCb2x0XG5cdFx0aWYgKCFjb250ZXh0LmRlZmluZS5hbWQpIHtcblx0XHRcdGNvbnRleHQuZGVmaW5lKFwiZXBob3gvdGlueW1jZVwiLCBbXSwgdGlueW1jZSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG5cdFx0LyogZ2xvYmFsIG1vZHVsZSAqL1xuXHRcdG1vZHVsZS5leHBvcnRzID0gd2luZG93LnRpbnltY2U7XG5cdH1cblxuXHRyZXR1cm4ge307XG59KTtcblxuZXhwb3NlKFtcInRpbnltY2UvZ2VvbS9SZWN0XCIsXCJ0aW55bWNlL3V0aWwvUHJvbWlzZVwiLFwidGlueW1jZS91dGlsL0RlbGF5XCIsXCJ0aW55bWNlL0VudlwiLFwidGlueW1jZS9kb20vRXZlbnRVdGlsc1wiLFwidGlueW1jZS9kb20vU2l6emxlXCIsXCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcInRpbnltY2UvZG9tL0RvbVF1ZXJ5XCIsXCJ0aW55bWNlL2h0bWwvU3R5bGVzXCIsXCJ0aW55bWNlL2RvbS9UcmVlV2Fsa2VyXCIsXCJ0aW55bWNlL2h0bWwvRW50aXRpZXNcIixcInRpbnltY2UvZG9tL0RPTVV0aWxzXCIsXCJ0aW55bWNlL2RvbS9TY3JpcHRMb2FkZXJcIixcInRpbnltY2UvQWRkT25NYW5hZ2VyXCIsXCJ0aW55bWNlL2RvbS9SYW5nZVV0aWxzXCIsXCJ0aW55bWNlL2h0bWwvTm9kZVwiLFwidGlueW1jZS9odG1sL1NjaGVtYVwiLFwidGlueW1jZS9odG1sL1NheFBhcnNlclwiLFwidGlueW1jZS9odG1sL0RvbVBhcnNlclwiLFwidGlueW1jZS9odG1sL1dyaXRlclwiLFwidGlueW1jZS9odG1sL1NlcmlhbGl6ZXJcIixcInRpbnltY2UvZG9tL1NlcmlhbGl6ZXJcIixcInRpbnltY2UvdXRpbC9WS1wiLFwidGlueW1jZS9kb20vQ29udHJvbFNlbGVjdGlvblwiLFwidGlueW1jZS9kb20vQm9va21hcmtNYW5hZ2VyXCIsXCJ0aW55bWNlL2RvbS9TZWxlY3Rpb25cIixcInRpbnltY2UvRm9ybWF0dGVyXCIsXCJ0aW55bWNlL1VuZG9NYW5hZ2VyXCIsXCJ0aW55bWNlL0VkaXRvckNvbW1hbmRzXCIsXCJ0aW55bWNlL3V0aWwvVVJJXCIsXCJ0aW55bWNlL3V0aWwvQ2xhc3NcIixcInRpbnltY2UvdXRpbC9FdmVudERpc3BhdGNoZXJcIixcInRpbnltY2UvdXRpbC9PYnNlcnZhYmxlXCIsXCJ0aW55bWNlL3VpL1NlbGVjdG9yXCIsXCJ0aW55bWNlL3VpL0NvbGxlY3Rpb25cIixcInRpbnltY2UvdWkvUmVmbG93UXVldWVcIixcInRpbnltY2UvdWkvQ29udHJvbFwiLFwidGlueW1jZS91aS9GYWN0b3J5XCIsXCJ0aW55bWNlL3VpL0tleWJvYXJkTmF2aWdhdGlvblwiLFwidGlueW1jZS91aS9Db250YWluZXJcIixcInRpbnltY2UvdWkvRHJhZ0hlbHBlclwiLFwidGlueW1jZS91aS9TY3JvbGxhYmxlXCIsXCJ0aW55bWNlL3VpL1BhbmVsXCIsXCJ0aW55bWNlL3VpL01vdmFibGVcIixcInRpbnltY2UvdWkvUmVzaXphYmxlXCIsXCJ0aW55bWNlL3VpL0Zsb2F0UGFuZWxcIixcInRpbnltY2UvdWkvV2luZG93XCIsXCJ0aW55bWNlL3VpL01lc3NhZ2VCb3hcIixcInRpbnltY2UvV2luZG93TWFuYWdlclwiLFwidGlueW1jZS91aS9Ub29sdGlwXCIsXCJ0aW55bWNlL3VpL1dpZGdldFwiLFwidGlueW1jZS91aS9Qcm9ncmVzc1wiLFwidGlueW1jZS91aS9Ob3RpZmljYXRpb25cIixcInRpbnltY2UvTm90aWZpY2F0aW9uTWFuYWdlclwiLFwidGlueW1jZS9FZGl0b3JPYnNlcnZhYmxlXCIsXCJ0aW55bWNlL1Nob3J0Y3V0c1wiLFwidGlueW1jZS9FZGl0b3JcIixcInRpbnltY2UvdXRpbC9JMThuXCIsXCJ0aW55bWNlL0ZvY3VzTWFuYWdlclwiLFwidGlueW1jZS9FZGl0b3JNYW5hZ2VyXCIsXCJ0aW55bWNlL3V0aWwvWEhSXCIsXCJ0aW55bWNlL3V0aWwvSlNPTlwiLFwidGlueW1jZS91dGlsL0pTT05SZXF1ZXN0XCIsXCJ0aW55bWNlL3V0aWwvSlNPTlBcIixcInRpbnltY2UvdXRpbC9Mb2NhbFN0b3JhZ2VcIixcInRpbnltY2UvQ29tcGF0XCIsXCJ0aW55bWNlL3VpL0xheW91dFwiLFwidGlueW1jZS91aS9BYnNvbHV0ZUxheW91dFwiLFwidGlueW1jZS91aS9CdXR0b25cIixcInRpbnltY2UvdWkvQnV0dG9uR3JvdXBcIixcInRpbnltY2UvdWkvQ2hlY2tib3hcIixcInRpbnltY2UvdWkvQ29tYm9Cb3hcIixcInRpbnltY2UvdWkvQ29sb3JCb3hcIixcInRpbnltY2UvdWkvUGFuZWxCdXR0b25cIixcInRpbnltY2UvdWkvQ29sb3JCdXR0b25cIixcInRpbnltY2UvdXRpbC9Db2xvclwiLFwidGlueW1jZS91aS9Db2xvclBpY2tlclwiLFwidGlueW1jZS91aS9QYXRoXCIsXCJ0aW55bWNlL3VpL0VsZW1lbnRQYXRoXCIsXCJ0aW55bWNlL3VpL0Zvcm1JdGVtXCIsXCJ0aW55bWNlL3VpL0Zvcm1cIixcInRpbnltY2UvdWkvRmllbGRTZXRcIixcInRpbnltY2UvdWkvRmlsZVBpY2tlclwiLFwidGlueW1jZS91aS9GaXRMYXlvdXRcIixcInRpbnltY2UvdWkvRmxleExheW91dFwiLFwidGlueW1jZS91aS9GbG93TGF5b3V0XCIsXCJ0aW55bWNlL3VpL0Zvcm1hdENvbnRyb2xzXCIsXCJ0aW55bWNlL3VpL0dyaWRMYXlvdXRcIixcInRpbnltY2UvdWkvSWZyYW1lXCIsXCJ0aW55bWNlL3VpL0luZm9Cb3hcIixcInRpbnltY2UvdWkvTGFiZWxcIixcInRpbnltY2UvdWkvVG9vbGJhclwiLFwidGlueW1jZS91aS9NZW51QmFyXCIsXCJ0aW55bWNlL3VpL01lbnVCdXR0b25cIixcInRpbnltY2UvdWkvTWVudUl0ZW1cIixcInRpbnltY2UvdWkvVGhyb2JiZXJcIixcInRpbnltY2UvdWkvTWVudVwiLFwidGlueW1jZS91aS9MaXN0Qm94XCIsXCJ0aW55bWNlL3VpL1JhZGlvXCIsXCJ0aW55bWNlL3VpL1Jlc2l6ZUhhbmRsZVwiLFwidGlueW1jZS91aS9TZWxlY3RCb3hcIixcInRpbnltY2UvdWkvU2xpZGVyXCIsXCJ0aW55bWNlL3VpL1NwYWNlclwiLFwidGlueW1jZS91aS9TcGxpdEJ1dHRvblwiLFwidGlueW1jZS91aS9TdGFja0xheW91dFwiLFwidGlueW1jZS91aS9UYWJQYW5lbFwiLFwidGlueW1jZS91aS9UZXh0Qm94XCJdKTtcbn0pKHdpbmRvdyk7IiwiLyogY3BleGNlbC5qcyAoQykgMjAxMy1wcmVzZW50IFNoZWV0SlMgLS0gaHR0cDovL3NoZWV0anMuY29tICovXG4vKmpzaGludCAtVzEwMCAqL1xudmFyIGNwdGFibGUgPSB7dmVyc2lvbjpcIjEuMTIuMFwifTtcbmNwdGFibGVbNDM3XSA9IChmdW5jdGlvbigpeyB2YXIgZCA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/w4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcwqLCo8Kl4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCIsIEQgPSBbXSwgZSA9IHt9OyBmb3IodmFyIGk9MDtpIT1kLmxlbmd0aDsrK2kpIHsgaWYoZC5jaGFyQ29kZUF0KGkpICE9PSAweEZGRkQpIGVbZC5jaGFyQXQoaSldID0gaTsgRFtpXSA9IGQuY2hhckF0KGkpOyB9IHJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogRCB9OyB9KSgpO1xuY3B0YWJsZVs2MjBdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/Dh8O8w6nDosOkw6DEhcOnw6rDq8Oow6/DrsSHw4TEhMSYxJnFgsO0w7bEhsO7w7nFmsOWw5zCosWBwqXFm8aSxbnFu8Ozw5PFhMWDxbrFvMK/4oyQwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiLCBEID0gW10sIGUgPSB7fTsgZm9yKHZhciBpPTA7aSE9ZC5sZW5ndGg7KytpKSB7IGlmKGQuY2hhckNvZGVBdChpKSAhPT0gMHhGRkZEKSBlW2QuY2hhckF0KGkpXSA9IGk7IERbaV0gPSBkLmNoYXJBdChpKTsgfSByZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IEQgfTsgfSkoKTtcbmNwdGFibGVbNzM3XSA9IChmdW5jdGlvbigpeyB2YXIgZCA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4LPhM+Fz4bPh8+I4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAz4nOrM6tzq7Pis6vz4zPjc+Lz47Ohs6IzonOis6Mzo7Oj8Kx4oml4omkzqrOq8O34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzg1MF0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8OHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMO4wqPDmMOXxpLDocOtw7PDusOxw5HCqsK6wr/CrsKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LDgMKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvMOjw4PilZrilZTilanilabilaDilZDilazCpMOww5DDisOLw4jEscONw47Dj+KUmOKUjOKWiOKWhMKmw4ziloDDk8Ofw5TDksO1w5XCtcO+w57DmsObw5nDvcOdwq/CtMKtwrHigJfCvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzg1Ml0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8OHw7zDqcOiw6TFr8SHw6fFgsOrxZDFkcOuxbnDhMSGw4nEucS6w7TDtsS9xL7FmsWbw5bDnMWkxaXFgcOXxI3DocOtw7PDusSExIXFvcW+xJjEmcKsxbrEjMWfwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LEmsWe4pWj4pWR4pWX4pWdxbvFvOKUkOKUlOKUtOKUrOKUnOKUgOKUvMSCxIPilZrilZTilanilabilaDilZDilazCpMSRxJDEjsOLxI/Fh8ONw47Em+KUmOKUjOKWiOKWhMWixa7iloDDk8Ofw5TFg8WExYjFoMWhxZTDmsWVxbDDvcOdxaPCtMKty53Lm8uHy5jCp8O3wrjCsMKoy5nFscWYxZnilqDCoFwiLCBEID0gW10sIGUgPSB7fTsgZm9yKHZhciBpPTA7aSE9ZC5sZW5ndGg7KytpKSB7IGlmKGQuY2hhckNvZGVBdChpKSAhPT0gMHhGRkZEKSBlW2QuY2hhckF0KGkpXSA9IGk7IERbaV0gPSBkLmNoYXJBdChpKTsgfSByZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IEQgfTsgfSkoKTtcbmNwdGFibGVbODU3XSA9IChmdW5jdGlvbigpeyB2YXIgZCA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/w4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67EscOEw4XDicOmw4bDtMO2w7LDu8O5xLDDlsOcw7jCo8OYxZ7Fn8Ohw63Ds8O6w7HDkcSexJ/Cv8KuwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSkw4HDgsOAwqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS8w6PDg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkwrrCqsOKw4vDiO+/vcONw47Dj+KUmOKUjOKWiOKWhMKmw4ziloDDk8Ofw5TDksO1w5XCte+/vcOXw5rDm8OZw6zDv8KvwrTCrcKx77+9wr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCIsIEQgPSBbXSwgZSA9IHt9OyBmb3IodmFyIGk9MDtpIT1kLmxlbmd0aDsrK2kpIHsgaWYoZC5jaGFyQ29kZUF0KGkpICE9PSAweEZGRkQpIGVbZC5jaGFyQXQoaSldID0gaTsgRFtpXSA9IGQuY2hhckF0KGkpOyB9IHJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogRCB9OyB9KSgpO1xuY3B0YWJsZVs4NjFdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/Dh8O8w6nDosOkw6DDpcOnw6rDq8Oow5DDsMOew4TDhcOJw6bDhsO0w7bDvsO7w53DvcOWw5zDuMKjw5jigqfGksOhw63Ds8O6w4HDjcOTw5rCv+KMkMKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzg2NV0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8OHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMO4wqPDmOKCp8aSw6HDrcOzw7rDscORwqrCusK/4oyQwqzCvcK8wqHCq8Kk4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiLCBEID0gW10sIGUgPSB7fTsgZm9yKHZhciBpPTA7aSE9ZC5sZW5ndGg7KytpKSB7IGlmKGQuY2hhckNvZGVBdChpKSAhPT0gMHhGRkZEKSBlW2QuY2hhckF0KGkpXSA9IGk7IERbaV0gPSBkLmNoYXJBdChpKTsgfSByZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IEQgfTsgfSkoKTtcbmNwdGFibGVbODY2XSA9IChmdW5jdGlvbigpeyB2YXIgZCA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paA0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/QgdGR0ITRlNCH0ZfQjtGewrDiiJnCt+KImuKElsKk4pagwqBcIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzg3NF0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f+KCrO+/ve+/ve+/ve+/veKApu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vcKg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCIsIEQgPSBbXSwgZSA9IHt9OyBmb3IodmFyIGk9MDtpIT1kLmxlbmd0aDsrK2kpIHsgaWYoZC5jaGFyQ29kZUF0KGkpICE9PSAweEZGRkQpIGVbZC5jaGFyQXQoaSldID0gaTsgRFtpXSA9IGQuY2hhckF0KGkpOyB9IHJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogRCB9OyB9KSgpO1xuY3B0YWJsZVs4OTVdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/EjMO8w6nEj8OkxI7FpMSNxJvEmsS5w43Evseqw4TDgcOJxb7FvcO0w7bDk8Wvw5rDvcOWw5zFoMS9w53FmMWlw6HDrcOzw7rFiMWHxa7DlMWhxZnFlcWUwrzCp8KrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCIsIEQgPSBbXSwgZSA9IHt9OyBmb3IodmFyIGk9MDtpIT1kLmxlbmd0aDsrK2kpIHsgaWYoZC5jaGFyQ29kZUF0KGkpICE9PSAweEZGRkQpIGVbZC5jaGFyQXQoaSldID0gaTsgRFtpXSA9IGQuY2hhckF0KGkpOyB9IHJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogRCB9OyB9KSgpO1xuY3B0YWJsZVs5MzJdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gW10sIGUgPSB7fSwgRCA9IFtdLCBqO1xuRFswXSA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9772h772i772j772k772l772m772n772o772p772q772r772s772t772u772v772w772x772y772z7720772177227723772477257726772777287729772+772/776A776B776C776D776E776F776G776H776I776J776K776L776M776N776O776P776Q776R776S776T776U776V776W776X776Y776Z776a776b776c776d776e776f77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFswXS5sZW5ndGg7ICsraikgaWYoRFswXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzBdW2pdXSA9IDAgKyBqOyBkWzAgKyBqXSA9IERbMF1bal07fVxuRFsxMjldID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73jgIDjgIHjgILvvIzvvI7jg7vvvJrvvJvvvJ/vvIHjgpvjgpzCtO+9gMKo77y+77+j77y/44O944O+44Kd44Ke44CD5Lud44CF44CG44CH44O84oCV4oCQ77yP77y8772e4oil772c4oCm4oCl4oCY4oCZ4oCc4oCd77yI77yJ44CU44CV77y777y9772b772d44CI44CJ44CK44CL44CM44CN44CO44CP44CQ44CR77yL77yNwrHDl++/vcO377yd4omg77yc77ye4omm4omn4oie4oi04pmC4pmAwrDigLLigLPihIPvv6XvvITvv6Dvv6HvvIXvvIPvvIbvvIrvvKDCp+KYhuKYheKXi+KXj+KXjuKXh+KXhuKWoeKWoOKWs+KWsuKWveKWvOKAu+OAkuKGkuKGkOKGkeKGk+OAk++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKIiOKIi+KKhuKKh+KKguKKg+KIquKIqe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKIp+KIqO+/ouKHkuKHlOKIgOKIg++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKIoOKKpeKMkuKIguKIh+KJoeKJkuKJquKJq+KImuKIveKIneKIteKIq+KIrO+/ve+/ve+/ve+/ve+/ve+/ve+/veKEq+KAsOKZr+KZreKZquKAoOKAocK277+977+977+977+94pev77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMjldLmxlbmd0aDsgKytqKSBpZihEWzEyOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMjldW2pdXSA9IDMzMDI0ICsgajsgZFszMzAyNCArIGpdID0gRFsxMjldW2pdO31cbkRbMTMwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977yQ77yR77yS77yT77yU77yV77yW77yX77yY77yZ77+977+977+977+977+977+977+977yh77yi77yj77yk77yl77ym77yn77yo77yp77yq77yr77ys77yt77yu77yv77yw77yx77yy77yz77y077y177y277y377y477y577y677+977+977+977+977+977+977+9772B772C772D772E772F772G772H772I772J772K772L772M772N772O772P772Q772R772S772T772U772V772W772X772Y772Z772a77+977+977+977+944GB44GC44GD44GE44GF44GG44GH44GI44GJ44GK44GL44GM44GN44GO44GP44GQ44GR44GS44GT44GU44GV44GW44GX44GY44GZ44Ga44Gb44Gc44Gd44Ge44Gf44Gg44Gh44Gi44Gj44Gk44Gl44Gm44Gn44Go44Gp44Gq44Gr44Gs44Gt44Gu44Gv44Gw44Gx44Gy44Gz44G044G144G244G344G444G544G644G744G844G944G+44G/44KA44KB44KC44KD44KE44KF44KG44KH44KI44KJ44KK44KL44KM44KN44KO44KP44KQ44KR44KS44KT77+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzBdLmxlbmd0aDsgKytqKSBpZihEWzEzMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzBdW2pdXSA9IDMzMjgwICsgajsgZFszMzI4MCArIGpdID0gRFsxMzBdW2pdO31cbkRbMTMxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+944Kh44Ki44Kj44Kk44Kl44Km44Kn44Ko44Kp44Kq44Kr44Ks44Kt44Ku44Kv44Kw44Kx44Ky44Kz44K044K144K244K344K444K544K644K744K844K944K+44K/44OA44OB44OC44OD44OE44OF44OG44OH44OI44OJ44OK44OL44OM44ON44OO44OP44OQ44OR44OS44OT44OU44OV44OW44OX44OY44OZ44Oa44Ob44Oc44Od44Oe44Of77+944Og44Oh44Oi44Oj44Ok44Ol44Om44On44Oo44Op44Oq44Or44Os44Ot44Ou44Ov44Ow44Ox44Oy44Oz44O044O144O277+977+977+977+977+977+977+977+9zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p77+977+977+977+977+977+977+977+9zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzFdLmxlbmd0aDsgKytqKSBpZihEWzEzMV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzFdW2pdXSA9IDMzNTM2ICsgajsgZFszMzUzNiArIGpdID0gRFsxMzFdW2pdO31cbkRbMTMyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+90JDQkdCS0JPQlNCV0IHQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+90LDQsdCy0LPQtNC10ZHQttC30LjQudC60LvQvNC977+90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP77+977+977+977+977+977+977+977+977+977+977+977+977+94pSA4pSC4pSM4pSQ4pSY4pSU4pSc4pSs4pSk4pS04pS84pSB4pSD4pSP4pST4pSb4pSX4pSj4pSz4pSr4pS74pWL4pSg4pSv4pSo4pS34pS/4pSd4pSw4pSl4pS44pWC77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzJdLmxlbmd0aDsgKytqKSBpZihEWzEzMl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzJdW2pdXSA9IDMzNzkyICsgajsgZFszMzc5MiArIGpdID0gRFsxMzJdW2pdO31cbkRbMTM1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94pGg4pGh4pGi4pGj4pGk4pGl4pGm4pGn4pGo4pGp4pGq4pGr4pGs4pGt4pGu4pGv4pGw4pGx4pGy4pGz4oWg4oWh4oWi4oWj4oWk4oWl4oWm4oWn4oWo4oWp77+9442J44yU44yi442N44yY44yn44yD44y2442R442X44yN44ym44yj44yr442K44y7446c446d446e446O446P44+E446h77+977+977+977+977+977+977+977+9442777+944Cd44Cf4oSW44+N4oSh44qk44ql44qm44qn44qo44ix44iy44i5442+442944284omS4omh4oir4oiu4oiR4oia4oql4oig4oif4oq/4oi14oip4oiq77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzVdLmxlbmd0aDsgKytqKSBpZihEWzEzNV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzVdW2pdXSA9IDM0NTYwICsgajsgZFszNDU2MCArIGpdID0gRFsxMzVdW2pdO31cbkRbMTM2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95Lqc5ZSW5aiD6Zi/5ZOA5oSb5oyo5ae26YCi6JG16Iyc56mQ5oKq5o+h5ril5pet6JGm6Iqm6a+15qKT5Zyn5pah5omx5a6b5aeQ6Jm76aO057Wi57a+6a6O5oiW57Kf6KK35a6J5bq15oyJ5pqX5qGI6ZeH6Z6N5p2P5Lul5LyK5L2N5L6d5YGJ5Zuy5aS35aeU5aiB5bCJ5oOf5oSP5oWw5piT5qSF54K655WP55Ww56e757at57ev6IOD6JCO6KGj6KyC6YGV6YG65Yy75LqV5Lql5Z+f6IKy6YOB56Ov5LiA5aOx5rqi6YC456iy6Iyo6IqL6bCv5YWB5Y2w5ZK95ZOh5Zug5ae75byV6aOy5rer6IOk6JSt77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzZdLmxlbmd0aDsgKytqKSBpZihEWzEzNl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzZdW2pdXSA9IDM0ODE2ICsgajsgZFszNDgxNiArIGpdID0gRFsxMzZdW2pdO31cbkRbMTM3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96Zmi6Zmw6Zqg6Z+75ZCL5Y+z5a6H54OP57696L+C6Zuo5Y2v6bWc56q65LiR56KT6Ie85rim5ZiY5ZSE5qyd6JSa6bC75ael5Y6p5rWm55Oc6ZaP5ZmC5LqR6YGL6Zuy6I2P6aSM5Y+h5Za25ayw5b2x5pig5puz5qCE5rC45rOz5rSp55Gb55uI56mO6aC06Iux6KGb6Kmg6Yut5ray55ar55uK6aeF5oKm6KyB6LaK6Zay5qaO5Y6t5YaG77+95ZyS5aCw5aWE5a605bu25oCo5o6p5o+05rK/5ryU54KO54SU54WZ54eV54y/57iB6Im26IuR6JaX6YGg6Ymb6bSb5aGp5pa85rGa55Sl5Ye55aSu5aWl5b6A5b+c5oq85pe65qiq5qyn5q60546L57+B6KWW6bSs6bSO6buE5bKh5rKW6I275YSE5bGL5oa26IeG5qG254mh5LmZ5L+65Y245oGp5rip56mP6Z+z5LiL5YyW5Luu5L2V5Ly95L6h5L2z5Yqg5Y+v5ZiJ5aSP5auB5a625a+h56eR5pqH5p6c5p625q2M5rKz54Gr54+C56aN56a+56i8566H6Iqx6Iub6IyE6I236I+v6I+T6J2m6Kqy5Zip6LKo6L+m6YGO6Zye6JqK5L+E5bOo5oiR54mZ55S76Iel6Iq96Ju+6LOA6ZuF6aST6aeV5LuL5Lya6Kej5Zue5aGK5aOK5bu75b+r5oCq5oKU5oGi5oeQ5oiS5ouQ5pS577+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzddLmxlbmd0aDsgKytqKSBpZihEWzEzN11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzddW2pdXSA9IDM1MDcyICsgajsgZFszNTA3MiArIGpdID0gRFsxMzddW2pdO31cbkRbMTM4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96a2B5pmm5qKw5rW354Gw55WM55qG57W16Iql6J+56ZaL6ZqO6LKd5Yex5Yq+5aSW5ZKz5a6z5bSW5oWo5qaC5rav56KN6JOL6KGX6Kmy6Y6n6aq45rWs6aao6JuZ5Z6j5p+/6JuO6YiO5YqD5ZqH5ZCE5buT5ouh5pK55qC85qC45q67542y56K656mr6Kaa6KeS6LWr6LyD6YOt6Zaj6ZqU6Z2p5a2m5bKz5qW96aGN6aGO5o6b56yg5qir77+95qm/5qK26bCN5r2f5Ymy5Zad5oGw5ous5rS75riH5ruR6JGb6KSQ6L2E5LiU6bC55Y+25qSb5qi66Z6E5qCq5YWc56uD6JKy6Yec6Y6M5Zmb6bSo5qCi6IyF6JCx57Kl5YiI6IuF55Om5Lm+5L6D5Yag5a+S5YiK5YuY5Yun5be75Zaa5aCq5aem5a6M5a6Y5a+b5bmy5bm55oKj5oSf5oWj5oa+5o+b5pWi5p+R5qGT5qO65qy+5q2T5rGX5ryi5r6X5r2F55Kw55SY55uj55yL56u/566h57Ch57ep57y257+w6IKd6Imm6I6e6Kaz6KuM6LKr6YKE6ZGR6ZaT6ZaR6Zai6Zml6Z+T6aSo6IiY5Li45ZCr5bK45beM546p55mM55y85bKp57+r6LSL6ZuB6aCR6aGU6aGY5LyB5LyO5Y2x5Zac5Zmo5Z+65aWH5ayJ5a+E5bKQ5biM5bm+5b+M5o+u5py65peX5pei5pyf5qOL5qOE77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzhdLmxlbmd0aDsgKytqKSBpZihEWzEzOF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzhdW2pdXSA9IDM1MzI4ICsgajsgZFszNTMyOCArIGpdID0gRFsxMzhdW2pdO31cbkRbMTM5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95qmf5biw5q+F5rCX5rG955W/56WI5a2j56iA57SA5b696KaP6KiY6LK06LW36LuM6Lyd6aOi6aiO6ay85LqA5YG95YSA5aaT5a6c5oiv5oqA5pOs5qy654qg55aR56WH576p6J+76Kq86K2w5o6s6I+K6Z6g5ZCJ5ZCD5Zar5qGU5qmY6Kmw56Cn5p216buN5Y205a6i6ISa6JmQ6YCG5LiY5LmF5LuH5LyR5Y+K5ZC45a6u5byT5oCl5pWR77+95py95rGC5rGy5rOj54G455CD56m256qu56yI57Sa57O+57Wm5pen54mb5Y675bGF5beo5ouS5oug5oyZ5rig6Jma6Kix6Led6Yu45ryB56am6a2a5Lqo5Lqr5Lqs5L6b5L6g5YOR5YWH56u25YWx5Ye25Y2U5Yyh5Y2/5Y+r5Zas5aKD5bOh5by35b2K5oCv5oGQ5oGt5oyf5pWZ5qmL5rOB54uC54ut55+v6IO46ISF6IiI6JWO6YO36Y+h6Z+/6aWX6ama5Luw5Yed5bCt5pqB5qWt5bGA5puy5qW1546J5qGQ57KB5YOF5Yuk5Z2H5be+6Yym5pak5qyj5qy955C056aB56a9562L57eK6Iq56I+M6KG/6KWf6Ky56L+R6YeR5ZCf6YqA5Lmd5YC25Y+l5Yy654uX546W55+p6Ium6Lqv6aeG6aeI6aeS5YW35oSa6Jme5Zaw56m65YG25a+T6YGH6ZqF5Liy5qub6Yen5bGR5bGI77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzldLmxlbmd0aDsgKytqKSBpZihEWzEzOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzldW2pdXSA9IDM1NTg0ICsgajsgZFszNTU4NCArIGpdID0gRFsxMzldW2pdO31cbkRbMTQwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95o6Y56qf5rKT6Z206L2h56qq54aK6ZqI57KC5qCX57mw5qGR6Y2s5Yuy5ZCb6Jar6KiT576k6LuN6YOh5Y2m6KKI56WB5L+C5YK+5YiR5YWE5ZWT5Zyt54+q5Z6L5aWR5b2i5b6E5oG15oW25oWn5oap5o6y5pC65pWs5pmv5qGC5riT55Wm56i957O757WM57aZ57mL572r6IyO6I2K6JuN6KiI6Kmj6K2m6Lu96aCa6baP6Iq46L+O6a+o77+95YqH5oif5pKD5r+A6ZqZ5qGB5YKR5qyg5rG65r2U56m057WQ6KGA6Kij5pyI5Lu25YC55YCm5YGl5YW85Yi45Ymj5Zan5ZyP5aCF5auM5bu65oay5oe45ouz5o2y5qSc5qip54m954qs54yu56CU56Gv57W555yM6IKp6KaL6KyZ6LOi6LuS6YGj6Y216Zm66aGV6aiT6bm45YWD5Y6f5Y6z5bm75bym5rib5rqQ546E54++57WD6Ii36KiA6Ku66ZmQ5LmO5YCL5Y+k5ZG85Zu65aeR5a2k5bex5bqr5byn5oi45pWF5p6v5rmW54uQ57OK6KK06IKh6IOh6I+w6JmO6KqH6Leo6Yi36ZuH6aGn6byT5LqU5LqS5LyN5Y2I5ZGJ5ZC+5aiv5b6M5b6h5oKf5qKn5qqO55Ga56KB6Kqe6Kqk6K236YaQ5Lme6a+J5Lqk5L285L6v5YCZ5YCW5YWJ5YWs5Yqf5Yq55Yu+5Y6a5Y+j5ZCR77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDBdLmxlbmd0aDsgKytqKSBpZihEWzE0MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDBdW2pdXSA9IDM1ODQwICsgajsgZFszNTg0MCArIGpdID0gRFsxNDBdW2pdO31cbkRbMTQxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95ZCO5ZaJ5Z2R5Z6i5aW95a2U5a2d5a6P5bel5ben5be35bm45bqD5bqa5bq35byY5oGS5oWM5oqX5ouY5o6n5pS75piC5pmD5pu05p2t5qCh5qKX5qeL5rGf5rSq5rWp5riv5rqd55Sy55qH56Gs56i/57Og57SF57SY57We57ax6ICV6ICD6IKv6IKx6IWU6IaP6Iiq6I2S6KGM6KGh6Kyb6LKi6LO86YOK6YW16Ymx56C/6Yu86Zak6ZmN77+96aCF6aaZ6auY6bS75Ymb5Yqr5Y+35ZCI5aOV5ou35r+g6LGq6L2f6bq55YWL5Yi75ZGK5Zu956mA6YW36bWg6buS542E5ryJ6IWw55SR5b+95oOa6aqo54ub6L685q2k6aCD5LuK5Zuw5Z2k5aK+5ama5oGo5oeH5piP5piG5qC55qKx5re355eV57S66Imu6a2C5Lqb5L2Q5Y+J5ZSG5bWv5bem5beu5p+75rKZ55Gz56CC6KmQ6Y6W6KOf5Z2Q5bqn5oyr5YK15YKs5YaN5pyA5ZOJ5aGe5aa75a6w5b2p5omN5o6h5qC95q2z5riI54G96YeH54qA56CV56Cm56Wt5paO57Sw6I+c6KOB6LyJ6Zqb5Ymk5Zyo5p2Q572q6LKh5Ya05Z2C6Ziq5aC65qaK6IK05ZKy5bSO5Z+856KV6be65L2c5YmK5ZKL5pC+5pio5pyU5p+156qE562W57Si6Yyv5qGc6a6t56y55YyZ5YaK5Yi377+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDFdLmxlbmd0aDsgKytqKSBpZihEWzE0MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDFdW2pdXSA9IDM2MDk2ICsgajsgZFszNjA5NiArIGpdID0gRFsxNDFdW2pdO31cbkRbMTQyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95a+f5ou25pKu5pOm5pyt5q666Jap6ZuR55qQ6a+W5o2M6YyG6a6r55q/5pmS5LiJ5YKY5Y+C5bGx5oOo5pKS5pWj5qGf54em54+K55Sj566X57qC6JqV6K6D6LOb6YW46aSQ5pas5pqr5q6L5LuV5LuU5Ly65L2/5Yi65Y+45Y+y5Zej5Zub5aOr5aeL5aeJ5ae/5a2Q5bGN5biC5bir5b+X5oCd5oyH5pSv5a2c5pav5pa95peo5p6d5q2i77+95q275rCP542F56WJ56eB57O457SZ57Sr6IKi6ISC6Iez6KaW6Kme6Kmp6Kmm6KqM6Kuu6LOH6LOc6ZuM6aO85q2v5LqL5Ly85L6N5YWQ5a2X5a+65oWI5oyB5pmC5qyh5ruL5rK754i+55K955eU56OB56S66ICM6ICz6Ieq6JKU6L6e5rGQ6bm/5byP6K2Y6bSr56u66Lu45a6N6Zur5LiD5Y+x5Z+35aSx5auJ5a6k5oKJ5rm/5ryG55a+6LOq5a6f6JSA56+g5YGy5p+06Iqd5bGh6JWK57ie6IiO5YaZ5bCE5o2o6LWm5pac54Wu56S+57SX6ICF6Kyd6LuK6YGu6JuH6YKq5YCf5Yu65bC65p2T54G854i16YWM6YeI6Yyr6Iul5a+C5byx5oO55Li75Y+W5a6I5omL5pyx5q6K54up54+g56iu6IWr6Laj6YWS6aaW5YSS5Y+X5ZGq5a+/5o6I5qi557as6ZyA5Zua5Y+O5ZGo77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDJdLmxlbmd0aDsgKytqKSBpZihEWzE0Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDJdW2pdXSA9IDM2MzUyICsgajsgZFszNjM1MiArIGpdID0gRFsxNDJdW2pdO31cbkRbMTQzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95a6X5bCx5bee5L+u5oSB5ou+5rSy56eA56eL57WC57mN57+S6Iet6Iif6JKQ6KGG6KWy6K6Q6Lm06Lyv6YCx6YWL6YWs6ZuG6Yac5LuA5L2P5YWF5Y2B5b6T5oiO5p+U5rGB5riL542j57im6YeN6YqD5Y+U5aSZ5a6/5reR56Wd57iu57Kb5aG+54af5Ye66KGT6L+w5L+K5bO75pil556s56uj6Iic6ae/5YeG5b6q5pes5qWv5q6J5rez77+95rqW5r2k55u+57SU5beh6YG16YaH6aCG5Yem5Yid5omA5pqR5puZ5ria5bq257eS572y5pu46Jav6Je36Ku45Yqp5Y+Z5aWz5bqP5b6Q5oGV6Yuk6Zmk5YK35YSf5Yud5Yyg5Y2H5Y+s5ZOo5ZWG5ZSx5ZiX5aWo5aa+5ai85a615bCG5bCP5bCR5bCa5bqE5bqK5bug5b2w5om/5oqE5oub5o6M5o235piH5piM5pit5pm25p2+5qKi5qif5qi15rK85raI5riJ5rmY54S854Sm54Wn55eH55yB56Gd56SB56Wl56ew56ug56yR57Kn57S56IKW6I+W6JKL6JWJ6KGd6KOz6Kif6Ki86KmU6Kmz6LGh6LOe6Yak6Ymm6Y2+6ZCY6Zqc6Z6Y5LiK5LiI5Lie5LmX5YaX5Ymw5Z+O5aC05aOM5ayi5bi45oOF5pO+5p2h5p2W5rWE54q255Wz56mj6JK46K2y6Ya46Yyg5Zix5Z+06aO+77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDNdLmxlbmd0aDsgKytqKSBpZihEWzE0M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDNdW2pdXSA9IDM2NjA4ICsgajsgZFszNjYwOCArIGpdID0gRFsxNDNdW2pdO31cbkRbMTQ0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95out5qSN5q6W54et57mU6IG36Imy6Kem6aOf6J2V6L6x5bC75Ly45L+h5L615ZSH5aig5a+d5a+p5b+D5oWO5oyv5paw5pmL5qOu5qab5rW45rex55Sz55a555yf56We56em57Sz6Iej6Iqv6Jaq6Kaq6Ki66Lqr6L6b6YCy6Yed6ZyH5Lq65LuB5YiD5aG15aOs5bCL55Sa5bC96IWO6KiK6L+F6Zmj6Z2t56yl6KuP6aCI6YWi5Zuz5Y6o77+96YCX5ZC55Z6C5bil5o6o5rC054KK552h57KL57+g6KGw6YGC6YWU6YyQ6YyY6ZqP55Ge6auE5bSH5bWp5pWw5p6i6Lao6Zub5o2u5p2J5qSZ6I+F6aCX6ZuA6KO+5r6E5pG65a+45LiW54Cs55Wd5piv5YeE5Yi25Yui5aeT5b6B5oCn5oiQ5pS/5pW05pif5pm05qOy5qCW5q2j5riF54my55Sf55ub57K+6IGW5aOw6KO96KW/6Kqg6KqT6KuL6YCd6YaS6Z2S6Z2Z5paJ56iO6ISG6Zq75bit5oOc5oia5pal5piU5p6Q55+z56mN57GN57i+6ISK6LKs6LWk6Leh6Lmf56Kp5YiH5ouZ5o6l5pGC5oqY6Kit56qD56+A6Kqs6Zuq57W26IiM6J2J5LuZ5YWI5Y2D5Y2g5a6j5bCC5bCW5bed5oim5omH5pKw5qCT5qC05rOJ5rWF5rSX5p+T5r2c54WO54W95peL56m/566t57ea77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDRdLmxlbmd0aDsgKytqKSBpZihEWzE0NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDRdW2pdXSA9IDM2ODY0ICsgajsgZFszNjg2NCArIGpdID0gRFsxNDRdW2pdO31cbkRbMTQ1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+957mK576o6IW66Iib6Ii56Jam6Kmu6LOO6Le16YG46YG36Yqt6YqR6ZaD6a6u5YmN5ZaE5ry454S25YWo56aF57mV6Iaz57OO5ZmM5aGR5bKo5o6q5pu+5pu95qWa54uZ55aP55aO56SO56WW56ef57KX57Sg57WE6JiH6Ki06Zi76YGh6byg5YOn5Ym15Y+M5Y+i5YCJ5Zaq5aOu5aWP54i95a6L5bGk5Yyd5oOj5oOz5o2c5o6D5oy/5o6777+95pON5pep5pu55bej5qeN5qe95ryV54el5LqJ55ep55u456qT57Of57eP57ac6IGh6I2J6I2Y6JGs6JK86Je76KOF6LWw6YCB6YGt6Y6X6Zyc6aiS5YOP5aKX5oaO6IeT6JS16LSI6YCg5L+D5YG05YmH5Y2z5oGv5o2J5p2f5ris6Laz6YCf5L+X5bGe6LOK5peP57aa5Y2S6KKW5YW25o+D5a2Y5a2r5bCK5pCN5p2R6YGc5LuW5aSa5aSq5rGw6KmR5ZS+5aCV5aal5oOw5omT5p+B6Ii15qWV6ZmA6aeE6aio5L2T5aCG5a++6ICQ5bKx5biv5b6F5oCg5oWL5oi05pu/5rOw5rue6IOO6IW/6IuU6KKL6LK46YCA6YCu6ZqK6bub6a+b5Luj5Y+w5aSn56ys6YaN6aGM6be55rud54Cn5Y2T5ZWE5a6F5omY5oqe5ouT5rKi5r+v55Ci6KiX6ZC45r+B6Ku+6Iy45Yen6Ju45Y+q77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDVdLmxlbmd0aDsgKytqKSBpZihEWzE0NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDVdW2pdXSA9IDM3MTIwICsgajsgZFszNzEyMCArIGpdID0gRFsxNDVdW2pdO31cbkRbMTQ2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95Y+p5L2G6YGU6L6w5aWq6ISx5be956uq6L6/5qOa6LC354u46bGI5qi96Kqw5Li55Y2Y5ZiG5Z2m5ouF5o6i5pem5q2O5reh5rmb54Kt55+t56uv566q57a76IC96IOG6JuL6KqV6Y2b5Zuj5aOH5by+5pat5pqW5qqA5q6155S36KuH5YCk55+l5Zyw5byb5oGl5pm65rGg55e056ia572u6Ie06JyY6YGF6aaz56+J55Wc56u5562R6JOE77+96YCQ56ep56qS6Iy25auh552A5Lit5Luy5a6Z5b+g5oq95pi85p+x5rOo6Jmr6KG36Ki76YWO6Yuz6aeQ5qiX54Cm54yq6Iun6JGX6LKv5LiB5YWG5YeL5ZaL5a+15biW5biz5bqB5byU5by15b2r5b605oey5oyR5pqi5pyd5r2u54mS55S655y66IG06IS56IW46J226Kq/6Kuc6LaF6Lez6Yqa6ZW36aCC6bOl5YuF5o2X55u05pyV5rKI54+N6LOD6Y6u6Zmz5rSl5aKc5qSO5qeM6L+96Y6a55eb6YCa5aGa5qCC5o605qe75L2D5rys5p+Y6L676JSm57a06Y2U5qS/5r2w5Z2q5aO35ays57Ss54iq5ZCK6Yej6ba05Lqt5L2O5YGc5YG15YmD6LKe5ZGI5aCk5a6a5bid5bqV5bqt5bu35byf5oKM5oq15oy65o+Q5qKv5rGA56KH56aO56iL57eg6ImH6KiC6Kum6LmE6YCT77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDZdLmxlbmd0aDsgKytqKSBpZihEWzE0Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDZdW2pdXSA9IDM3Mzc2ICsgajsgZFszNzM3NiArIGpdID0gRFsxNDZdW2pdO31cbkRbMTQ3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96YK46YSt6YeY6byO5rOl5pGY5pOi5pW15ru055qE56yb6YGp6Y+R5rq65ZOy5b655pKk6L2N6L+t6YmE5YW45aGr5aSp5bGV5bqX5re757qP55Sc6LK86Lui6aGb54K55Lyd5q6/5r6x55Sw6Zu75YWO5ZCQ5aC15aGX5aas5bGg5b6S5paX5p2c5rih55m76I+f6LOt6YCU6YO96Y2N56Cl56C65Yqq5bqm5Zyf5aW05oCS5YCS5YWa5Yas77+95YeN5YiA5ZSQ5aGU5aGY5aWX5a6V5bO25baL5oK85oqV5pCt5p2x5qGD5qK85qOf55uX5reY5rmv5rab54Gv54eI5b2T55eY56W3562J562U562S57OW57Wx5Yiw6JGj6JWp6Jek6KiO6KyE6LGG6LiP6YCD6YCP6ZCZ6Zm26aCt6aiw6ZeY5YON5YuV5ZCM5aCC5bCO5oan5pKe5rSe556z56ul6IO06JCE6YGT6YqF5bOg6bSH5Yy/5b6X5b6z5rac54m5552j56a/56+k5q+S54us6Kqt5qCD5qmh5Ye456qB5qS05bGK6bO26Iur5a+F6YWJ54Ce5Zm45bGv5oOH5pWm5rKM6LGa6YGB6aCT5ZGR5puH6YiN5aWI6YKj5YaF5LmN5Yeq6JaZ6KyO54GY5o266Y2L5qWi6aa057iE55W35Y2X5qWg6Luf6Zuj5rGd5LqM5bC85byQ6L+p5YyC6LOR6IKJ6Jm55bu/5pel5Lmz5YWl77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDddLmxlbmd0aDsgKytqKSBpZihEWzE0N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDddW2pdXSA9IDM3NjMyICsgajsgZFszNzYzMiArIGpdID0gRFsxNDddW2pdO31cbkRbMTQ4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95aaC5bC/6Z+u5Lu75aaK5b+N6KqN5r+h56aw56Wi5a+n6JGx54yr54ax5bm05b+15o275pKa54eD57KY5LmD5bu85LmL5Z+c5Zqi5oKp5r+D57SN6IO96ISz6Ia/6L6y6KaX6Jqk5be05oqK5pKt6KaH5p235rOi5rS+55C256C05amG57216Iqt6aas5L+z5buD5oud5o6S5pWX5p2v55uD54mM6IOM6IK66Lyp6YWN5YCN5Z+55aqS5qKF77+95qWz54Wk54u96LK35aOy6LOg6Zmq6YCZ6J2/56ek55+n6JCp5Lyv5Yml5Y2a5ouN5p+P5rOK55m9566U57KV6Ii26JaE6L+r5pud5ryg54iG57ib6I6r6aeB6bqm5Ye9566x56Gy56646IKH562I5quo5bmh6IKM55WR55Wg5YWr6Ymi5rqM55m66YaX6auq5LyQ572w5oqc562P6Zal6bOp5Zm65aGZ6Juk6Zq85Ly05Yik5Y2K5Y+N5Y+b5biG5pCs5paR5p2/5rC+5rGO54mI54qv54+t55WU57mB6Iis6Jep6LKp56+E6YeG54Wp6aCS6aOv5oy95pmp55Wq55uk56OQ6JWD6Juu5Yyq5Y2R5ZCm5aaD5bqH5b285oKy5omJ5om55oqr5paQ5q+U5rOM55ay55qu56KR56eY57eL57236IKl6KKr6Kq56LK76YG/6Z2e6aOb5qiL57C45YKZ5bC+5b6u5p6H5q+Y55C155yJ576O77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDhdLmxlbmd0aDsgKytqKSBpZihEWzE0OF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDhdW2pdXSA9IDM3ODg4ICsgajsgZFszNzg4OCArIGpdID0gRFsxNDhdW2pdO31cbkRbMTQ5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96by75p+K56iX5Yy555aL6aut5b2m6Iad6I+x6IKY5by85b+F55Wi562G6YC85qGn5aer5aqb57SQ55m+6Kys5L+15b2q5qiZ5rC35ryC55Oi56Wo6KGo6KmV6LG55buf5o+P55eF56eS6IuX6Yyo6Yuy6JKc6Jut6bCt5ZOB5b2s5paM5rWc54CV6LKn6LOT6aC75pWP55O25LiN5LuY5Z+g5aSr5amm5a+M5Yao5biD5bqc5oCW5om25pW377+95pan5pmu5rWu54i256ym6IWQ6Iaa6IqZ6K2c6LKg6LOm6LW06Zic6ZmE5L6u5pKr5q2m6Iie6JGh6JWq6YOo5bCB5qWT6aKo6JG66JWX5LyP5Ymv5b6p5bmF5pyN56aP6IW56KSH6KaG5re15byX5omV5rK45LuP54mp6a6S5YiG5ZC75Zm05aKz5oak5omu54Sa5aWu57KJ57Oe57Sb6Zuw5paH6IGe5LiZ5L215YW15aGA5bmj5bmz5byK5p+E5Lim6JS96ZaJ6Zmb57Gz6aCB5YO75aOB55mW56Kn5Yil556l6JSR566G5YGP5aSJ54mH56+H57eo6L666L+U6YGN5L6/5YuJ5aip5byB6Z6t5L+d6IiX6Yuq5ZyD5o2V5q2p55Sr6KOc6LyU56mC5Yuf5aKT5oWV5oiK5pqu5q+N57C/6I+p5YCj5L+45YyF5ZGG5aCx5aWJ5a6d5bOw5bOv5bSp5bqW5oqx5o2n5pS+5pa55pyL77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDldLmxlbmd0aDsgKytqKSBpZihEWzE0OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDldW2pdXSA9IDM4MTQ0ICsgajsgZFszODE0NCArIGpdID0gRFsxNDldW2pdO31cbkRbMTUwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95rOV5rOh54O556Cy57ir6IOe6Iqz6JCM6JOs6JyC6KSS6Kiq6LGK6YKm6YuS6aO96bOz6bWs5LmP5Lqh5YKN5YmW5Z2K5aao5bi95b+Y5b+Z5oi/5pq05pyb5p+Q5qOS5YaS57Sh6IKq6Iao6KyA6LKM6LK/6Ym+6Ziy5ZCg6aCs5YyX5YOV5Y2c5aKo5pKy5py054mn552m56mG6Yem5YuD5rKh5q6G5aCA5bmM5aWU5pys57+75Yeh55uG77+95pGp56Oo6a2U6bq75Z+L5aa55pin5p6a5q+O5ZOp5qeZ5bmV6Iac5p6V6a6q5p++6bGS5qGd5Lqm5L+j5Y+I5oq55pyr5rKr6L+E5L6t57mt6bq/5LiH5oWi5rqA5ryr6JST5ZGz5pyq6a2F5bez566V5bKs5a+G6Jyc5rmK6JOR56iU6ISI5aaZ57KN5rCR55yg5YuZ5aSi54Sh54mf55+b6Zyn6bWh5qSL5am/5aiY5Yal5ZCN5ZG95piO55uf6L+36YqY6bO05aeq54md5ruF5YWN5qOJ57a/57es6Z2i6bq65pG45qih6IyC5aaE5a2f5q+b54yb55uy57ay6ICX6JKZ5YSy5pyo6buZ55uu5p2i5Yu/6aSF5bCk5oi757G+6LKw5ZWP5oK257SL6ZaA5YyB5Lmf5Ya25aSc54i66IC26YeO5byl55+i5Y6E5b2557SE6Jas6Kiz6LqN6Z2W5p+z6Jau6ZGT5oSJ5oSI5rK555mS77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTBdLmxlbmd0aDsgKytqKSBpZihEWzE1MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTBdW2pdXSA9IDM4NDAwICsgajsgZFszODQwMCArIGpdID0gRFsxNTBdW2pdO31cbkRbMTUxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96Kut6Ly45ZSv5L2R5YSq5YuH5Y+L5a6l5bm95oKg5oaC5o+W5pyJ5p+a5rmn5raM54y254y355Sx56WQ6KOV6KqY6YGK6YKR6YO16ZuE6J6N5aSV5LqI5L2Z5LiO6KqJ6Ly/6aCQ5YKt5bm85aaW5a655bq45o+a5o+65pOB5puc5qWK5qeY5rSL5rq254aU55So56qv576K6ICA6JGJ6JOJ6KaB6Kyh6LiK6YGl6Zm96aSK5oW+5oqR5qyy77+95rKD5rW057+M57+85reA576F6J666KO45p2l6I6x6aC86Zu35rSb57Wh6JC96YWq5Lmx5Y215bWQ5qyE5r+r6JeN6Jit6Kan5Yip5ZCP5bGl5p2O5qKo55CG55KD55ei6KOP6KOh6YeM6Zui6Zm45b6L546H56uL6JGO5o6g55Wl5YqJ5rWB5rqc55CJ55WZ56Gr57KS6ZqG56uc6b6N5L625oWu5peF6Jmc5LqG5Lqu5YOa5Lih5YeM5a+u5paZ5qKB5ra854yf55mC556t56ic57On6Imv6KuS6YG86YeP6Zm16aCY5Yqb57eR5YCr5Y6Y5p6X5reL54eQ55Cz6Ieo6Lyq6Zqj6bGX6bqf55Gg5aGB5raZ57Sv6aGe5Luk5Ly25L6L5Ya35Yqx5ba65oCc546y56S86IuT6Yi06Zq36Zu26ZyK6bqX6b2i5pqm5q205YiX5Yqj54OI6KOC5buJ5oGL5oaQ5ryj54WJ57C+57e06IGv77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTFdLmxlbmd0aDsgKytqKSBpZihEWzE1MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTFdW2pdXSA9IDM4NjU2ICsgajsgZFszODY1NiArIGpdID0gRFsxNTFdW2pdO31cbkRbMTUyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96JOu6YCj6Yys5ZGC6a2v5quT54KJ6LOC6Lev6Zyy5Yq05amB5buK5byE5pyX5qW85qaU5rWq5ryP54mi54u856+t6ICB6IG+6J2L6YOO5YWt6bqT56aE6IKL6Yyy6KuW5YCt5ZKM6Kmx5q2q6LOE6ISH5oOR5p6g6bey5LqZ5LqY6bCQ6Kmr6JeB6JWo5qSA5rm+56KX6IWV77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95byM5LiQ5LiV5Liq5Lix5Li25Li85Li/5LmC5LmW5LmY5LqC5LqF6LGr5LqK6IiS5byN5LqO5Lqe5Lqf5Lqg5Lqi5Lqw5Lqz5Lq25LuO5LuN5LuE5LuG5LuC5LuX5Lue5Lut5Luf5Lu35LyJ5L2a5Lyw5L2b5L2d5L2X5L2H5L225L6I5L6P5L6Y5L275L2p5L2w5L6R5L2v5L6G5L6W5YSY5L+U5L+f5L+O5L+Y5L+b5L+R5L+a5L+Q5L+k5L+l5YCa5YCo5YCU5YCq5YCl5YCF5Lyc5L+25YCh5YCp5YCs5L++5L+v5YCR5YCG5YGD5YGH5pyD5YGV5YGQ5YGI5YGa5YGW5YGs5YG45YKA5YKa5YKF5YK05YKy77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTJdLmxlbmd0aDsgKytqKSBpZihEWzE1Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTJdW2pdXSA9IDM4OTEyICsgajsgZFszODkxMiArIGpdID0gRFsxNTJdW2pdO31cbkRbMTUzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95YOJ5YOK5YKz5YOC5YOW5YOe5YOl5YOt5YOj5YOu5YO55YO15YSJ5YSB5YSC5YSW5YSV5YSU5YSa5YSh5YS65YS35YS85YS75YS/5YWA5YWS5YWM5YWU5YWi56u45YWp5YWq5YWu5YaA5YaC5ZuY5YaM5YaJ5YaP5YaR5YaT5YaV5YaW5Yak5Yam5Yai5Yap5Yaq5Yar5Yaz5Yax5Yay5Yaw5Ya15Ya95YeF5YeJ5Yeb5Yeg6JmV5Yep5Yet77+95Yew5Ye15Ye+5YiE5YiL5YiU5YiO5Yin5Yiq5Yiu5Yiz5Yi55YmP5YmE5YmL5YmM5Yme5YmU5Ymq5Ym05Ymp5Ymz5Ym/5Ym95YqN5YqU5YqS5Ymx5YqI5YqR6L6o6L6n5Yqs5Yqt5Yq85Yq15YuB5YuN5YuX5Yue5Yuj5Yum6aOt5Yug5Yuz5Yu15Yu45Yu55YyG5YyI55S45YyN5YyQ5YyP5YyV5Yya5Yyj5Yyv5Yyx5Yyz5Yy45Y2A5Y2G5Y2F5LiX5Y2J5Y2N5YeW5Y2e5Y2p5Y2u5aSY5Y275Y235Y6C5Y6W5Y6g5Y6m5Y6l5Y6u5Y6w5Y625Y+D57CS6ZuZ5Y+f5pu854eu5Y+u5Y+o5Y+t5Y+65ZCB5ZC95ZGA5ZCs5ZCt5ZC85ZCu5ZC25ZCp5ZCd5ZGO5ZKP5ZG15ZKO5ZGf5ZGx5ZG35ZGw5ZKS5ZG75ZKA5ZG25ZKE5ZKQ5ZKG5ZOH5ZKi5ZK45ZKl5ZKs5ZOE5ZOI5ZKo77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTNdLmxlbmd0aDsgKytqKSBpZihEWzE1M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTNdW2pdXSA9IDM5MTY4ICsgajsgZFszOTE2OCArIGpdID0gRFsxNTNdW2pdO31cbkRbMTU0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95ZKr5ZOC5ZKk5ZK+5ZK85ZOY5ZOl5ZOm5ZSP5ZSU5ZO95ZOu5ZOt5ZO65ZOi5ZS55ZWA5ZWj5ZWM5ZSu5ZWc5ZWF5ZWW5ZWX5ZS45ZSz5ZWd5ZaZ5ZaA5ZKv5ZaK5Zaf5ZW75ZW+5ZaY5Zae5Zau5ZW85ZaD5Zap5ZaH5Zao5Zea5ZeF5Zef5ZeE5Zec5Zek5ZeU5ZiU5Ze35ZiW5Ze+5Ze95Zib5Ze55ZmO5ZmQ54ef5Zi05Zi25Ziy5Zi477+95Zmr5Zmk5Ziv5Zms5Zmq5ZqG5ZqA5ZqK5Zqg5ZqU5ZqP5Zql5Zqu5Zq25Zq05ZuC5Zq85ZuB5ZuD5ZuA5ZuI5ZuO5ZuR5ZuT5ZuX5Zuu5Zu55ZyA5Zu/5ZyE5ZyJ5ZyI5ZyL5ZyN5ZyT5ZyY5ZyW5ZeH5Zyc5Zym5Zy35Zy45Z2O5Zy75Z2A5Z2P5Z2p5Z+A5Z6I5Z2h5Z2/5Z6J5Z6T5Z6g5Z6z5Z6k5Z6q5Z6w5Z+D5Z+G5Z+U5Z+S5Z+T5aCK5Z+W5Z+j5aCL5aCZ5aCd5aGy5aCh5aGi5aGL5aGw5q+A5aGS5aC95aG55aKF5aK55aKf5aKr5aK65aOe5aK75aK45aKu5aOF5aOT5aOR5aOX5aOZ5aOY5aOl5aOc5aOk5aOf5aOv5aO65aO55aO75aO85aO95aSC5aSK5aSQ5aSb5qKm5aSl5aSs5aSt5aSy5aS45aS+56uS5aWV5aWQ5aWO5aWa5aWY5aWi5aWg5aWn5aWs5aWp77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTRdLmxlbmd0aDsgKytqKSBpZihEWzE1NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTRdW2pdXSA9IDM5NDI0ICsgajsgZFszOTQyNCArIGpdID0gRFsxNTRdW2pdO31cbkRbMTU1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95aW45aaB5aad5L2e5L6r5aaj5aay5aeG5aeo5aec5aaN5aeZ5aea5ail5aif5aiR5aic5aiJ5aia5amA5ams5amJ5ai15ai25ami5amq5aqa5aq85aq+5auL5auC5aq95auj5auX5aum5aup5auW5au65au75ayM5ayL5ayW5ayy5auQ5ayq5ay25ay+5a2D5a2F5a2A5a2R5a2V5a2a5a2b5a2l5a2p5a2w5a2z5a215a245paI5a265a6A77+95a6D5a6m5a645a+D5a+H5a+J5a+U5a+Q5a+k5a+m5a+i5a+e5a+l5a+r5a+w5a+25a+z5bCF5bCH5bCI5bCN5bCT5bCg5bCi5bCo5bC45bC55bGB5bGG5bGO5bGT5bGQ5bGP5a2x5bGs5bGu5Lmi5bG25bG55bKM5bKR5bKU5aab5bKr5bK75bK25bK85bK35bOF5bK+5bOH5bOZ5bOp5bO95bO65bOt5baM5bOq5bSL5bSV5bSX5bWc5bSf5bSb5bSR5bSU5bSi5bSa5bSZ5bSY5bWM5bWS5bWO5bWL5bWs5bWz5bW25baH5baE5baC5bai5bad5bas5bau5ba95baQ5ba35ba85beJ5beN5beT5beS5beW5beb5ber5bey5be15biL5bia5biZ5biR5bib5bi25bi35bmE5bmD5bmA5bmO5bmX5bmU5bmf5bmi5bmk5bmH5bm15bm25bm66bq85bm/5bqg5buB5buC5buI5buQ5buP77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTVdLmxlbmd0aDsgKytqKSBpZihEWzE1NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTVdW2pdXSA9IDM5NjgwICsgajsgZFszOTY4MCArIGpdID0gRFsxNTVdW2pdO31cbkRbMTU2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95buW5buj5bud5bua5bub5bui5buh5buo5bup5bus5bux5buz5buw5bu05bu45bu+5byD5byJ5b2d5b2c5byL5byR5byW5byp5byt5by45b2B5b2I5b2M5b2O5byv5b2R5b2W5b2X5b2Z5b2h5b2t5b2z5b235b6D5b6C5b2/5b6K5b6I5b6R5b6H5b6e5b6Z5b6Y5b6g5b6o5b6t5b685b+W5b+75b+k5b+45b+x5b+d5oKz5b+/5oCh5oGg77+95oCZ5oCQ5oCp5oCO5oCx5oCb5oCV5oCr5oCm5oCP5oC65oGa5oGB5oGq5oG35oGf5oGK5oGG5oGN5oGj5oGD5oGk5oGC5oGs5oGr5oGZ5oKB5oKN5oOn5oKD5oKa5oKE5oKb5oKW5oKX5oKS5oKn5oKL5oOh5oK45oOg5oOT5oK05b+w5oK95oOG5oK15oOY5oWN5oSV5oSG5oO25oO35oSA5oO05oO65oSD5oSh5oO75oOx5oSN5oSO5oWH5oS+5oSo5oSn5oWK5oS/5oS85oSs5oS05oS95oWC5oWE5oWz5oW35oWY5oWZ5oWa5oWr5oW05oWv5oWl5oWx5oWf5oWd5oWT5oW15oaZ5oaW5oaH5oas5oaU5oaa5oaK5oaR5oar5oau5oeM5oeK5oeJ5oe35oeI5oeD5oeG5oa65oeL57255oeN5oem5oej5oe25oe65oe05oe/5oe95oe85oe+5oiA5oiI5oiJ5oiN5oiM5oiU5oib77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTZdLmxlbmd0aDsgKytqKSBpZihEWzE1Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTZdW2pdXSA9IDM5OTM2ICsgajsgZFszOTkzNiArIGpdID0gRFsxNTZdW2pdO31cbkRbMTU3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95oie5oih5oiq5oiu5oiw5oiy5oiz5omB5omO5ome5omj5omb5omg5omo5om85oqC5oqJ5om+5oqS5oqT5oqW5ouU5oqD5oqU5ouX5ouR5oq75ouP5ou/5ouG5pOU5ouI5ouc5ouM5ouK5ouC5ouH5oqb5ouJ5oyM5ouu5oux5oyn5oyC5oyI5ouv5ou15o2Q5oy+5o2N5pCc5o2P5o6W5o6O5o6A5o6r5o225o6j5o6P5o6J5o6f5o615o2r77+95o2p5o6+5o+p5o+A5o+G5o+j5o+J5o+S5o+25o+E5pCW5pC05pCG5pCT5pCm5pC25pSd5pCX5pCo5pCP5pGn5pGv5pG25pGO5pSq5pKV5pKT5pKl5pKp5pKI5pK85pOa5pOS5pOF5pOH5pK75pOY5pOC5pOx5pOn6IiJ5pOg5pOh5oqs5pOj5pOv5pSs5pO25pO05pOy5pO65pSA5pO95pSY5pSc5pSF5pSk5pSj5pSr5pS05pS15pS35pS25pS455WL5pWI5pWW5pWV5pWN5pWY5pWe5pWd5pWy5pW45paC5paD6K6K5pab5paf5par5pa35peD5peG5peB5peE5peM5peS5peb5peZ5peg5peh5pex5p2y5piK5piD5pe75p2z5pi15pi25pi05pic5pmP5pmE5pmJ5pmB5pme5pmd5pmk5pmn5pmo5pmf5pmi5pmw5pqD5pqI5pqO5pqJ5pqE5pqY5pqd5puB5pq55puJ5pq+5pq877+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTddLmxlbmd0aDsgKytqKSBpZihEWzE1N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTddW2pdXSA9IDQwMTkyICsgajsgZFs0MDE5MiArIGpdID0gRFsxNTddW2pdO31cbkRbMTU4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95puE5pq45puW5pua5pug5pi/5pum5pup5puw5pu15pu35pyP5pyW5pye5pym5pyn6Zy45pyu5py/5py25p2B5py45py35p2G5p2e5p2g5p2Z5p2j5p2k5p6J5p2w5p6p5p285p2q5p6M5p6L5p6m5p6h5p6F5p635p+v5p605p+s5p6z5p+p5p645p+k5p+e5p+d5p+i5p+u5p655p+O5p+G5p+n5qqc5qCe5qGG5qCp5qGA5qGN5qCy5qGO77+95qKz5qCr5qGZ5qGj5qG35qG/5qKf5qKP5qKt5qKU5qKd5qKb5qKD5qqu5qK55qG05qK15qKg5qK65qSP5qKN5qG+5qSB5qOK5qSI5qOY5qSi5qSm5qOh5qSM5qON5qOU5qOn5qOV5qS25qSS5qSE5qOX5qOj5qSl5qO55qOg5qOv5qSo5qSq5qSa5qSj5qSh5qOG5qW55qW35qWc5qW45qWr5qWU5qW+5qWu5qS55qW05qS95qWZ5qSw5qWh5qWe5qWd5qaB5qWq5qay5qau5qeQ5qa/5qeB5qeT5qa+5qeO5a+o5qeK5qed5qa75qeD5qan5qiu5qaR5qag5qac5qaV5qa05qee5qeo5qiC5qib5qe/5qyK5qe55qey5qen5qiF5qax5qie5qet5qiU5qer5qiK5qiS5quB5qij5qiT5qmE5qiM5qmy5qi25qm45qmH5qmi5qmZ5qmm5qmI5qi45qii5qqQ5qqN5qqg5qqE5qqi5qqj77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNThdLmxlbmd0aDsgKytqKSBpZihEWzE1OF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNThdW2pdXSA9IDQwNDQ4ICsgajsgZFs0MDQ0OCArIGpdID0gRFsxNThdW2pdO31cbkRbMTU5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95qqX6JiX5qq75quD5quC5qq45qqz5qqs5que5quR5quf5qqq5qua5quq5qu75qyF6JiW5qu65qyS5qyW6ayx5qyf5qy45qy355uc5qy56aOu5q2H5q2D5q2J5q2Q5q2Z5q2U5q2b5q2f5q2h5q245q255q2/5q6A5q6E5q6D5q6N5q6Y5q6V5q6e5q6k5q6q5q6r5q6v5q6y5q6x5q6z5q635q685q+G5q+L5q+T5q+f5q+s5q+r5q+z5q+v77+96bq+5rCI5rCT5rCU5rCb5rCk5rCj5rGe5rGV5rGi5rGq5rKC5rKN5rKa5rKB5rKb5rG+5rGo5rGz5rKS5rKQ5rOE5rOx5rOT5rK95rOX5rOF5rOd5rKu5rKx5rK+5rK65rOb5rOv5rOZ5rOq5rSf6KGN5rS25rSr5rS95rS45rSZ5rS15rSz5rSS5rSM5rWj5raT5rWk5rWa5rW55rWZ5raO5raV5r+k5raF5re55riV5riK5ra15reH5rem5ra45reG5res5ree5reM5reo5reS5reF5re65reZ5rek5reV5req5reu5rit5rmu5riu5riZ5rmy5rmf5ri+5rij5rmr5rir5rm25rmN5rif5rmD5ri65rmO5rik5ru/5rid5ri45rqC5rqq5rqY5ruJ5rq35ruT5rq95rqv5ruE5rqy5ruU5ruV5rqP5rql5ruC5rqf5r2B5ryR54GM5rus5ru45ru+5ry/5ruy5ryx5ruv5ryy5ruM77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTldLmxlbmd0aDsgKytqKSBpZihEWzE1OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTldW2pdXSA9IDQwNzA0ICsgajsgZFs0MDcwNCArIGpdID0gRFsxNTldW2pdO31cbkRbMjI0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95ry+5ryT5ru35r6G5r265r245r6B5r6A5r2v5r2b5r+z5r2t5r6C5r285r2Y5r6O5r6R5r+C5r2m5r6z5r6j5r6h5r6k5r655r+G5r6q5r+f5r+V5r+s5r+U5r+Y5r+x5r+u5r+b54CJ54CL5r+654CR54CB54CP5r++54Cb54Ca5r2054Cd54CY54Cf54Cw54C+54Cy54GR54Gj54KZ54KS54Kv54Ox54Ks54K454Kz54Ku54Of54OL54Od77+954OZ54SJ54O954Sc54SZ54Wl54WV54aI54Wm54Wi54WM54WW54Ws54aP54e754aE54aV54ao54as54eX54a554a+54eS54eJ54eU54eO54eg54es54en54e154e854e554e/54iN54iQ54ib54io54it54is54iw54iy54i754i854i/54mA54mG54mL54mY54m054m+54qC54qB54qH54qS54qW54qi54qn54q554qy54uD54uG54uE54uO54uS54ui54ug54uh54u554u35YCP54yX54yK54yc54yW54yd54y054yv54yp54yl54y+542O542P6buY542X542q542o542w542454215427542654+I546z54+O546754+A54+l54+u54+e55Ki55CF55Gv55Cl54+455Cy55C655GV55C/55Gf55GZ55GB55Gc55Gp55Gw55Gj55Gq55G255G+55KL55Ke55Kn55OK55OP55OU54+x77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjRdLmxlbmd0aDsgKytqKSBpZihEWzIyNF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjRdW2pdXSA9IDU3MzQ0ICsgajsgZFs1NzM0NCArIGpdID0gRFsyMjRdW2pdO31cbkRbMjI1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+955Og55Oj55On55Op55Ou55Oy55Ow55Ox55O455O355SE55SD55SF55SM55SO55SN55SV55ST55Se55Sm55Ss55S855WE55WN55WK55WJ55Wb55WG55Wa55Wp55Wk55Wn55Wr55Wt55W455W255aG55aH55W055aK55aJ55aC55aU55aa55ad55al55aj55eC55az55eD55a155a955a455a855ax55eN55eK55eS55eZ55ej55ee55e+55e/77+955e855iB55ew55e655ey55ez55iL55iN55iJ55if55in55ig55ih55ii55ik55i055iw55i755mH55mI55mG55mc55mY55mh55mi55mo55mp55mq55mn55ms55mw55my55m255m455m855qA55qD55qI55qL55qO55qW55qT55qZ55qa55qw55q055q455q555q655uC55uN55uW55uS55ue55uh55ul55un55uq6Jiv55u755yI55yH55yE55yp55yk55ye55yl55ym55yb55y355y4552H552a552o552r552b552l552/552+5525556O556L556R556g556e556w55625565556/55685569556755+H55+N55+X55+a55+c55+j55+u55+856CM56CS56Sm56Cg56Sq56GF56KO56G056KG56G856Ka56KM56Kj56K156Kq56Kv56OR56OG56OL56OU56K+56K856OF56OK56Os77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjVdLmxlbmd0aDsgKytqKSBpZihEWzIyNV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjVdW2pdXSA9IDU3NjAwICsgajsgZFs1NzYwMCArIGpdID0gRFsyMjVdW2pdO31cbkRbMjI2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+956On56Oa56O956O056SH56SS56SR56SZ56Ss56Sr56WA56Wg56WX56Wf56Wa56WV56WT56W656W/56aK56ad56an6b2L56aq56au56az56a556a656eJ56eV56en56es56eh56ej56iI56iN56iY56iZ56ig56if56aA56ix56i756i+56i356mD56mX56mJ56mh56mi56mp6b6d56mw56m556m956qI56qX56qV56qY56qW56qp56uI56qw77+956q256uF56uE56q/6YKD56uH56uK56uN56uP56uV56uT56uZ56ua56ud56uh56ui56um56ut56uw56yC56yP56yK56yG56yz56yY56yZ56ye56y156yo56y2562Q562656yE562N56yL562M562F5621562l5620562n562w562x562s562u566d566Y566f566N566c566a566L566S566P562d566Z56+L56+B56+M56+P566056+G56+d56+p57CR57CU56+m56+l57Gg57CA57CH57CT56+z56+357CX57CN56+257Cj57Cn57Cq57Cf57C357Cr57C957GM57GD57GU57GP57GA57GQ57GY57Gf57Gk57GW57Gl57Gs57G157KD57KQ57Kk57Kt57Ki57Kr57Kh57Ko57Kz57Ky57Kx57Ku57K557K957OA57OF57OC57OY57OS57Oc57Oi6ay757Ov57Oy57O057O257O657SG77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjZdLmxlbmd0aDsgKytqKSBpZihEWzIyNl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjZdW2pdXSA9IDU3ODU2ICsgajsgZFs1Nzg1NiArIGpdID0gRFsyMjZdW2pdO31cbkRbMjI3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+957SC57Sc57SV57SK57WF57WL57Su57Sy57S/57S157WG57Wz57WW57WO57Wy57Wo57Wu57WP57Wj57aT57aJ57Wb57aP57W957ab57a657au57aj57a157eH57a957ar57i957ai57av57ec57a457af57aw57eY57ed57ek57ee57e757ey57eh57iF57iK57ij57ih57iS57ix57if57iJ57iL57ii57mG57mm57i757i157i557mD57i377+957iy57i657mn57md57mW57me57mZ57ma57m557mq57mp57m857m757qD57eV57m96L6u57m/57qI57qJ57qM57qS57qQ57qT57qU57qW57qO57qb57qc57y457y6572F572M572N572O572Q572R572V572U572Y572f572g572o572p572n5724576C576G576D576I576H576M576U576e576d576a576j576v576y5765576u576257646K2x57+F57+G57+K57+V57+U57+h57+m57+p57+z57+56aOc6ICG6ICE6ICL6ICS6ICY6ICZ6ICc6ICh6ICo6IC/6IC76IGK6IGG6IGS6IGY6IGa6IGf6IGi6IGo6IGz6IGy6IGw6IG26IG56IG96IG/6IKE6IKG6IKF6IKb6IKT6IKa6IKt5YaQ6IKs6IOb6IOl6IOZ6IOd6IOE6IOa6IOW6ISJ6IOv6IOx6ISb6ISp6ISj6ISv6IWL77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjddLmxlbmd0aDsgKytqKSBpZihEWzIyN11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjddW2pdXSA9IDU4MTEyICsgajsgZFs1ODExMiArIGpdID0gRFsyMjddW2pdO31cbkRbMjI4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96ZqL6IWG6IS+6IWT6IWR6IO86IWx6IWu6IWl6IWm6IW06IaD6IaI6IaK6IaA6IaC6Iag6IaV6Iak6Iaj6IWf6IaT6Iap6Iaw6Ia16Ia+6Ia46Ia96IeA6IeC6Ia66IeJ6IeN6IeR6IeZ6IeY6IeI6Iea6Ief6Ieg6Ien6Ie66Ie76Ie+6IiB6IiC6IiF6IiH6IiK6IiN6IiQ6IiW6Iip6Iir6Ii46Iiz6ImA6ImZ6ImY6Imd6Ima6Imf6Imk77+96Imi6Imo6Imq6Imr6Iiu6Imx6Im36Im46Im+6IqN6IqS6Iqr6Iqf6Iq76Iqs6Iuh6Iuj6Iuf6IuS6Iu06Iuz6Iu66I6T6IyD6Iu76Iu56Iue6IyG6Iuc6IyJ6IuZ6Iy16Iy06IyW6Iyy6Iyx6I2A6Iy56I2Q6I2F6Iyv6Iyr6IyX6IyY6I6F6I6a6I6q6I6f6I6i6I6W6Iyj6I6O6I6H6I6K6I286I616I2z6I216I6g6I6J6I6o6I+06JCT6I+r6I+O6I+96JCD6I+Y6JCL6I+B6I+36JCH6I+g6I+y6JCN6JCi6JCg6I696JC46JSG6I+76JGt6JCq6JC86JWa6JKE6JG36JGr6JKt6JGu6JKC6JGp6JGG6JCs6JGv6JG56JC16JOK6JGi6JK56JK/6JKf6JOZ6JON6JK76JOa6JOQ6JOB6JOG6JOW6JKh6JSh6JO/6JO06JSX6JSY6JSs6JSf6JSV6JSU6JO86JWA6JWj6JWY6JWI77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjhdLmxlbmd0aDsgKytqKSBpZihEWzIyOF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjhdW2pdXSA9IDU4MzY4ICsgajsgZFs1ODM2OCArIGpdID0gRFsyMjhdW2pdO31cbkRbMjI5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96JWB6JiC6JWL6JWV6JaA6Jak6JaI6JaR6JaK6Jao6JWt6JaU6Jab6Jeq6JaH6Jac6JW36JW+6JaQ6JeJ6Ja66JeP6Ja56JeQ6JeV6Jed6Jel6Jec6Je56JiK6JiT6JiL6Je+6Je66JiG6Jii6Jia6Jiw6Ji/6JmN5LmV6JmU6Jmf6Jmn6Jmx6JqT6Jqj6Jqp6Jqq6JqL6JqM6Jq26Jqv6JuE6JuG6Jqw6JuJ6KCj6Jqr6JuU6Jue6Jup6Jus77+96Juf6Jub6Juv6JyS6JyG6JyI6JyA6JyD6Ju76JyR6JyJ6JyN6Ju56JyK6Jy06Jy/6Jy36Jy76Jyl6Jyp6Jya6J2g6J2f6J246J2M6J2O6J206J2X6J2o6J2u6J2Z6J2T6J2j6J2q6KCF6J6i6J6f6J6C6J6v6J+L6J696J+A6J+Q6ZuW6J6r6J+E6J6z6J+H6J+G6J676J+v6J+y6J+g6KCP6KCN6J++6J+26J+36KCO6J+S6KCR6KCW6KCV6KCi6KCh6KCx6KC26KC56KCn6KC76KGE6KGC6KGS6KGZ6KGe6KGi6KGr6KKB6KG+6KKe6KG16KG96KK16KGy6KKC6KKX6KKS6KKu6KKZ6KKi6KKN6KKk6KKw6KK/6KKx6KOD6KOE6KOU6KOY6KOZ6KOd6KO56KSC6KO86KO06KOo6KOy6KSE6KSM6KSK6KST6KWD6KSe6KSl6KSq6KSr6KWB6KWE6KS76KS26KS46KWM6KSd6KWg6KWe77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjldLmxlbmd0aDsgKytqKSBpZihEWzIyOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjldW2pdXSA9IDU4NjI0ICsgajsgZFs1ODYyNCArIGpdID0gRFsyMjldW2pdO31cbkRbMjMwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96KWm6KWk6KWt6KWq6KWv6KW06KW36KW+6KaD6KaI6KaK6KaT6KaY6Kah6Kap6Kam6Kas6Kav6Kay6Ka66Ka96Ka/6KeA6Kea6Kec6Ked6Ken6Ke06Ke46KiD6KiW6KiQ6KiM6Kib6Kid6Kil6Ki26KmB6Kmb6KmS6KmG6KmI6Km86Kmt6Kms6Kmi6KqF6KqC6KqE6Kqo6Kqh6KqR6Kql6Kqm6Kqa6Kqj6KuE6KuN6KuC6Kua6Kur6Kuz6Kun77+96Kuk6Kux6KyU6Kug6Kui6Ku36Kue6Kub6KyM6KyH6Kya6Kuh6KyW6KyQ6KyX6Kyg6Kyz6Z6r6Kym6Kyr6Ky+6Kyo6K2B6K2M6K2P6K2O6K2J6K2W6K2b6K2a6K2r6K2f6K2s6K2v6K206K296K6A6K6M6K6O6K6S6K6T6K6W6K6Z6K6a6LC66LGB6LC/6LGI6LGM6LGO6LGQ6LGV6LGi6LGs6LG46LG66LKC6LKJ6LKF6LKK6LKN6LKO6LKU6LG86LKY5oid6LKt6LKq6LK96LKy6LKz6LKu6LK26LOI6LOB6LOk6LOj6LOa6LO96LO66LO76LSE6LSF6LSK6LSH6LSP6LSN6LSQ6b2O6LST6LON6LSU6LSW6LWn6LWt6LWx6LWz6LaB6LaZ6LeC6La+6La66LeP6Lea6LeW6LeM6Leb6LeL6Leq6Ler6Lef6Lej6Le86LiI6LiJ6Le/6Lid6Lie6LiQ6Lif6LmC6Li16Liw6Li06LmK77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzBdLmxlbmd0aDsgKytqKSBpZihEWzIzMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzBdW2pdXSA9IDU4ODgwICsgajsgZFs1ODg4MCArIGpdID0gRFsyMzBdW2pdO31cbkRbMjMxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96LmH6LmJ6LmM6LmQ6LmI6LmZ6Lmk6Lmg6Liq6Lmj6LmV6Lm26Lmy6Lm86LqB6LqH6LqF6LqE6LqL6LqK6LqT6LqR6LqU6LqZ6Lqq6Lqh6Lqs6Lqw6LuG6Lqx6Lq+6LuF6LuI6LuL6Lub6Luj6Lu86Lu76Lur6Lu+6LyK6LyF6LyV6LyS6LyZ6LyT6Lyc6Lyf6Lyb6LyM6Lym6Lyz6Ly76Ly56L2F6L2C6Ly+6L2M6L2J6L2G6L2O6L2X6L2c77+96L2i6L2j6L2k6L6c6L6f6L6j6L6t6L6v6L636L+a6L+l6L+i6L+q6L+v6YKH6L+06YCF6L+56L+66YCR6YCV6YCh6YCN6YCe6YCW6YCL6YCn6YC26YC16YC56L+46YGP6YGQ6YGR6YGS6YCO6YGJ6YC+6YGW6YGY6YGe6YGo6YGv6YG26Zqo6YGy6YKC6YG96YKB6YKA6YKK6YKJ6YKP6YKo6YKv6YKx6YK16YOi6YOk5omI6YOb6YSC6YSS6YSZ6YSy6YSw6YWK6YWW6YWY6YWj6YWl6YWp6YWz6YWy6YaL6YaJ6YaC6Yai6Yar6Yav6Yaq6Ya16Ya06Ya66YeA6YeB6YeJ6YeL6YeQ6YeW6Yef6Yeh6Yeb6Ye86Ye16Ye26Yie6Ye/6YiU6Yis6YiV6YiR6Yme6YmX6YmF6YmJ6Ymk6YmI6YqV6Yi/6YmL6YmQ6Yqc6YqW6YqT6Yqb6Yma6YuP6Yq56Yq36Yup6YyP6Yu66Y2E6Yyu77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzFdLmxlbmd0aDsgKytqKSBpZihEWzIzMV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzFdW2pdXSA9IDU5MTM2ICsgajsgZFs1OTEzNiArIGpdID0gRFsyMzFdW2pdO31cbkRbMjMyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96YyZ6Yyi6Yya6Yyj6Yy66Yy16Yy76Y2c6Y2g6Y286Y2u6Y2W6Y6w6Y6s6Y6t6Y6U6Y656Y+W6Y+X6Y+o6Y+l6Y+Y6Y+D6Y+d6Y+Q6Y+I6Y+k6ZCa6ZCU6ZCT6ZCD6ZCH6ZCQ6ZC26ZCr6ZC16ZCh6ZC66ZGB6ZGS6ZGE6ZGb6ZGg6ZGi6ZGe6ZGq6Yip6ZGw6ZG16ZG36ZG96ZGa6ZG86ZG+6ZKB6ZG/6ZaC6ZaH6ZaK6ZaU6ZaW6ZaY6ZaZ77+96Zag6Zao6Zan6Zat6Za86Za76Za56Za+6ZeK5r+26ZeD6ZeN6ZeM6ZeV6ZeU6ZeW6Zec6Zeh6Zel6Zei6Zih6Zio6Ziu6Ziv6ZmC6ZmM6ZmP6ZmL6Zm36Zmc6Zme6Zmd6Zmf6Zmm6Zmy6Zms6ZqN6ZqY6ZqV6ZqX6Zqq6Zqn6Zqx6Zqy6Zqw6Zq06Zq26Zq46Zq56ZuO6ZuL6ZuJ6ZuN6KWN6Zuc6ZyN6ZuV6Zu56ZyE6ZyG6ZyI6ZyT6ZyO6ZyR6ZyP6ZyW6ZyZ6Zyk6Zyq6Zyw6Zy56Zy96Zy+6Z2E6Z2G6Z2I6Z2C6Z2J6Z2c6Z2g6Z2k6Z2m6Z2o5YuS6Z2r6Z2x6Z256Z6F6Z286Z6B6Z266Z6G6Z6L6Z6P6Z6Q6Z6c6Z6o6Z6m6Z6j6Z6z6Z606Z+D6Z+G6Z+I6Z+L6Z+c6Z+t6b2P6Z+y56uf6Z+26Z+16aCP6aCM6aC46aCk6aCh6aC36aC96aGG6aGP6aGL6aGr6aGv6aGw77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzJdLmxlbmd0aDsgKytqKSBpZihEWzIzMl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzJdW2pdXSA9IDU5MzkyICsgajsgZFs1OTM5MiArIGpdID0gRFsyMzJdW2pdO31cbkRbMjMzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96aGx6aG06aGz6aKq6aKv6aKx6aK26aOE6aOD6aOG6aOp6aOr6aSD6aSJ6aSS6aSU6aSY6aSh6aSd6aSe6aSk6aSg6aSs6aSu6aS96aS+6aWC6aWJ6aWF6aWQ6aWL6aWR6aWS6aWM6aWV6aaX6aaY6aal6aat6aau6aa86aef6aeb6aed6aeY6aeR6aet6aeu6aex6aey6ae76ae46aiB6aiP6aiF6aei6aiZ6air6ai36amF6amC6amA6amD77+96ai+6amV6amN6amb6amX6amf6ami6aml6amk6amp6amr6amq6aqt6aqw6aq86auA6auP6auR6auT6auU6aue6auf6aui6auj6aum6auv6aur6auu6au06aux6au36au76ayG6ayY6aya6ayf6ayi6ayj6ayl6ayn6ayo6ayp6ayq6ayu6ayv6ayy6a2E6a2D6a2P6a2N6a2O6a2R6a2Y6a206a6T6a6D6a6R6a6W6a6X6a6f6a6g6a6o6a606a+A6a+K6a656a+G6a+P6a+R6a+S6a+j6a+i6a+k6a+U6a+h6bC66a+y6a+x6a+w6bCV6bCU6bCJ6bCT6bCM6bCG6bCI6bCS6bCK6bCE6bCu6bCb6bCl6bCk6bCh6bCw6bGH6bCy6bGG6bC+6bGa6bGg6bGn6bG26bG46bOn6bOs6bOw6bSJ6bSI6bOr6bSD6bSG6bSq6bSm6bav6bSj6bSf6bWE6bSV6bSS6bWB6bS/6bS+6bWG6bWI77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzNdLmxlbmd0aDsgKytqKSBpZihEWzIzM11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzNdW2pdXSA9IDU5NjQ4ICsgajsgZFs1OTY0OCArIGpdID0gRFsyMzNdW2pdO31cbkRbMjM0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96bWd6bWe6bWk6bWR6bWQ6bWZ6bWy6baJ6baH6bar6bWv6bW66baa6bak6bap6bay6beE6beB6ba76ba46ba66beG6beP6beC6beZ6beT6be46bem6bet6bev6be96bia6bib6bie6bm16bm56bm96bqB6bqI6bqL6bqM6bqS6bqV6bqR6bqd6bql6bqp6bq46bqq6bqt6Z2h6buM6buO6buP6buQ6buU6buc6bue6bud6bug6bul6buo6buv77+96bu06bu26bu36bu56bu76bu86bu96byH6byI55q36byV6byh6bys6by+6b2K6b2S6b2U6b2j6b2f6b2g6b2h6b2m6b2n6b2s6b2q6b236b2y6b226b6V6b6c6b6g5aCv5qeH6YGZ55Gk5Yec54aZ77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzRdLmxlbmd0aDsgKytqKSBpZihEWzIzNF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzRdW2pdXSA9IDU5OTA0ICsgajsgZFs1OTkwNCArIGpdID0gRFsyMzRdW2pdO31cbkRbMjM3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+957qK6KSc6Y2I6YqI6JOc5L+J54K75pix5qOI6Yu55pu75b2F5Lio5Luh5Lu85LyA5LyD5Ly55L2W5L6S5L6K5L6a5L6U5L+N5YGA5YCi5L+/5YCe5YGG5YGw5YGC5YKU5YO05YOY5YWK5YWk5Yad5Ya+5Yes5YiV5Yqc5Yqm5YuA5Yub5YyA5YyH5Yyk5Y2y5Y6T5Y6y5Y+d76iO5ZKc5ZKK5ZKp5ZO/5ZaG5Z2Z5Z2l5Z6s5Z+I5Z+H76iP77+976iQ5aKe5aKy5aSL5aWT5aWb5aWd5aWj5aak5aa65a2W5a+A55Sv5a+Y5a+s5bCe5bKm5bK65bO15bSn5bWT76iR5bWC5bWt5ba45ba55beQ5byh5by05b2n5b635b+e5oGd5oKF5oKK5oOe5oOV5oSg5oOy5oSR5oS35oSw5oaY5oiT5oqm5o+15pGg5pKd5pOO5pWO5piA5piV5pi75piJ5piu5pie5pik5pml5pmX5pmZ76iS5pmz5pqZ5pqg5pqy5pq/5pu65pyO76Sp5p2m5p675qGS5p+A5qCB5qGE5qOP76iT5qWo76iU5qaY5qei5qiw5qmr5qmG5qmz5qm+5qui5quk5q+W5rC/5rGc5rKG5rGv5rOa5rSE5raH5rWv5raW5ras5reP5re45rey5re85ri55rmc5rin5ri85rq/5r6I5r615r+154CF54CH54Co54KF54Kr54SP54SE54Wc54WG54WH76iV54eB54e+54qx77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzddLmxlbmd0aDsgKytqKSBpZihEWzIzN11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzddW2pdXSA9IDYwNjcyICsgajsgZFs2MDY3MiArIGpdID0gRFsyMzddW2pdO31cbkRbMjM4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+954q+54yk76iW5423546954+J54+W54+j54+S55CH54+155Cm55Cq55Cp55Cu55Gi55KJ55Kf55SB55Wv55qC55qc55qe55qb55qm76iX552G5Yqv56Ch56GO56Gk56G656Sw76iY76iZ76ia56aU76ib56ab56uR56un76ic56ur566e76id57WI57Wc57a357ag57eW57mS572H576h76ie6IyB6I2i6I2/6I+H6I+26JGI6JK06JWT6JWZ77+96JWr76if6Jaw76ig76ih6KCH6KO16KiS6Ki36Km56Kqn6Kq+6Kuf76ii6Ku26K2T6K2/6LOw6LO06LSS6LW276ij6LuP76ik76il6YGn6YOe76im6YSV6YSn6Yea6YeX6Yee6Yet6Yeu6Yek6Yel6YiG6YiQ6YiK6Yi66YmA6Yi86YmO6YmZ6YmR6Yi56Ymn6Yqn6Ym36Ym46Yun6YuX6YuZ6YuQ76in6YuV6Yug6YuT6Yyl6Yyh6Yu776io6Yye6Yu/6Yyd6YyC6Y2w6Y2X6Y6k6Y+G6Y+e6Y+46ZCx6ZGF6ZGI6ZaS76ec76ip6Zqd6Zqv6Zyz6Zy76Z2D6Z2N6Z2P6Z2R6Z2V6aGX6aGl76iq76ir6aSn76is6aae6amO6auZ6auc6a216a2y6a6P6a6x6a676bCA6bWw6bWr76it6biZ6buR77+977+94oWw4oWx4oWy4oWz4oW04oW14oW24oW34oW44oW577+i77+k77yH77yC77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzhdLmxlbmd0aDsgKytqKSBpZihEWzIzOF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzhdW2pdXSA9IDYwOTI4ICsgajsgZFs2MDkyOCArIGpdID0gRFsyMzhdW2pdO31cbkRbMjUwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94oWw4oWx4oWy4oWz4oW04oW14oW24oW34oW44oW54oWg4oWh4oWi4oWj4oWk4oWl4oWm4oWn4oWo4oWp77+i77+k77yH77yC44ix4oSW4oSh4oi157qK6KSc6Y2I6YqI6JOc5L+J54K75pix5qOI6Yu55pu75b2F5Lio5Luh5Lu85LyA5LyD5Ly55L2W5L6S5L6K5L6a5L6U5L+N5YGA5YCi5L+/5YCe5YGG5YGw5YGC5YKU5YO05YOY5YWK77+95YWk5Yad5Ya+5Yes5YiV5Yqc5Yqm5YuA5Yub5YyA5YyH5Yyk5Y2y5Y6T5Y6y5Y+d76iO5ZKc5ZKK5ZKp5ZO/5ZaG5Z2Z5Z2l5Z6s5Z+I5Z+H76iP76iQ5aKe5aKy5aSL5aWT5aWb5aWd5aWj5aak5aa65a2W5a+A55Sv5a+Y5a+s5bCe5bKm5bK65bO15bSn5bWT76iR5bWC5bWt5ba45ba55beQ5byh5by05b2n5b635b+e5oGd5oKF5oKK5oOe5oOV5oSg5oOy5oSR5oS35oSw5oaY5oiT5oqm5o+15pGg5pKd5pOO5pWO5piA5piV5pi75piJ5piu5pie5pik5pml5pmX5pmZ76iS5pmz5pqZ5pqg5pqy5pq/5pu65pyO76Sp5p2m5p675qGS5p+A5qCB5qGE5qOP76iT5qWo76iU5qaY5qei5qiw5qmr5qmG5qmz5qm+5qui5quk5q+W5rC/5rGc5rKG5rGv5rOa5rSE5raH5rWv77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNTBdLmxlbmd0aDsgKytqKSBpZihEWzI1MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNTBdW2pdXSA9IDY0MDAwICsgajsgZFs2NDAwMCArIGpdID0gRFsyNTBdW2pdO31cbkRbMjUxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95raW5ras5reP5re45rey5re85ri55rmc5rin5ri85rq/5r6I5r615r+154CF54CH54Co54KF54Kr54SP54SE54Wc54WG54WH76iV54eB54e+54qx54q+54yk76iW5423546954+J54+W54+j54+S55CH54+155Cm55Cq55Cp55Cu55Gi55KJ55Kf55SB55Wv55qC55qc55qe55qb55qm76iX552G5Yqv56Ch56GO56Gk56G656Sw76iY76iZ77+976ia56aU76ib56ab56uR56un76ic56ur566e76id57WI57Wc57a357ag57eW57mS572H576h76ie6IyB6I2i6I2/6I+H6I+26JGI6JK06JWT6JWZ6JWr76if6Jaw76ig76ih6KCH6KO16KiS6Ki36Km56Kqn6Kq+6Kuf76ii6Ku26K2T6K2/6LOw6LO06LSS6LW276ij6LuP76ik76il6YGn6YOe76im6YSV6YSn6Yea6YeX6Yee6Yet6Yeu6Yek6Yel6YiG6YiQ6YiK6Yi66YmA6Yi86YmO6YmZ6YmR6Yi56Ymn6Yqn6Ym36Ym46Yun6YuX6YuZ6YuQ76in6YuV6Yug6YuT6Yyl6Yyh6Yu776io6Yye6Yu/6Yyd6YyC6Y2w6Y2X6Y6k6Y+G6Y+e6Y+46ZCx6ZGF6ZGI6ZaS76ec76ip6Zqd6Zqv6Zyz6Zy76Z2D6Z2N6Z2P6Z2R6Z2V6aGX6aGl76iq76ir6aSn76is6aae6amO6auZ77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNTFdLmxlbmd0aDsgKytqKSBpZihEWzI1MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNTFdW2pdXSA9IDY0MjU2ICsgajsgZFs2NDI1NiArIGpdID0gRFsyNTFdW2pdO31cbkRbMjUyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96auc6a216a2y6a6P6a6x6a676bCA6bWw6bWr76it6biZ6buR77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNTJdLmxlbmd0aDsgKytqKSBpZihEWzI1Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNTJdW2pdXSA9IDY0NTEyICsgajsgZFs2NDUxMiArIGpdID0gRFsyNTJdW2pdO31cbnJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogZCB9OyB9KSgpO1xuY3B0YWJsZVs5MzZdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gW10sIGUgPSB7fSwgRCA9IFtdLCBqO1xuRFswXSA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/4oKs77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFswXS5sZW5ndGg7ICsraikgaWYoRFswXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzBdW2pdXSA9IDAgKyBqOyBkWzAgKyBqXSA9IERbMF1bal07fVxuRFsxMjldID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73kuILkuITkuIXkuIbkuI/kuJLkuJfkuJ/kuKDkuKHkuKPkuKbkuKnkuK7kuK/kuLHkuLPkuLXkuLfkuLzkuYDkuYHkuYLkuYTkuYbkuYrkuZHkuZXkuZfkuZrkuZvkuaLkuaPkuaTkuaXkuafkuajkuarkuavkuazkua3kua7kua/kubLkubTkubXkubbkubfkubjkubnkubrkubvkubzkub3kub/kuoDkuoHkuoLkuoPkuoTkuoXkuofkuorvv73kupDkupbkupfkupnkupzkup3kup7kuqPkuqrkuq/kurDkurHkurTkurbkurfkurjkurnkurzkur3kur7ku4jku4zku4/ku5Dku5Lku5rku5vku5zku6Dku6Lku6bku6fku6nku63ku67ku6/ku7Hku7Tku7jku7nku7rku7zku77kvIDkvILkvIPkvITkvIXkvIbkvIfkvIjkvIvkvIzkvJLkvJPkvJTkvJXkvJbkvJzkvJ3kvKHkvKPkvKjkvKnkvKzkvK3kvK7kvLHkvLPkvLXkvLfkvLnkvLvkvL7kvL/kvYDkvYHkvYLkvYTkvYXkvYfkvYjkvYnkvYrkvYvkvYzkvZLkvZTkvZbkvaHkvaLkvabkvajkvarkvavkva3kva7kvbHkvbLkvbXkvbfkvbjkvbnkvbrkvb3kvoDkvoHkvoLkvoXkvobkvofkvorkvozkvo7kvpDkvpLkvpPkvpXkvpbkvpjkvpnkvprkvpzkvp7kvp/kvqHkvqLvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEyOV0ubGVuZ3RoOyArK2opIGlmKERbMTI5XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEyOV1bal1dID0gMzMwMjQgKyBqOyBkWzMzMDI0ICsgal0gPSBEWzEyOV1bal07fVxuRFsxMzBdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73kvqTkvqvkvq3kvrDkvrHkvrLkvrPkvrTkvrbkvrfkvrjkvrnkvrrkvrvkvrzkvr3kvr7kv4Dkv4Hkv4Lkv4bkv4fkv4jkv4nkv4vkv4zkv43kv5Lkv5Pkv5Tkv5Xkv5bkv5nkv5vkv6Dkv6Lkv6Tkv6Xkv6fkv6vkv6zkv7Dkv7Lkv7Tkv7Xkv7bkv7fkv7nkv7vkv7zkv73kv7/lgIDlgIHlgILlgIPlgITlgIXlgIblgIflgIjlgInlgIrvv73lgIvlgI7lgJDlgJHlgJPlgJXlgJblgJflgJvlgJ3lgJ7lgKDlgKLlgKPlgKTlgKflgKvlgK/lgLDlgLHlgLLlgLPlgLTlgLXlgLblgLflgLjlgLnlgLvlgL3lgL/lgYDlgYHlgYLlgYTlgYXlgYblgYnlgYrlgYvlgY3lgZDlgZHlgZLlgZPlgZTlgZblgZflgZjlgZnlgZvlgZ3lgZ7lgZ/lgaDlgaHlgaLlgaPlgaTlgablgaflgajlganlgarlgavlga3lga7lga/lgbDlgbHlgbLlgbPlgbTlgbXlgbjlgbnlgbrlgbzlgb3lgoHlgoLlgoPlgoTlgoblgoflgonlgorlgovlgozlgo7lgo/lgpDlgpHlgpLlgpPlgpTlgpXlgpblgpflgpjlgpnlgprlgpvlgpzlgp3lgp7lgp/lgqDlgqHlgqLlgqTlgqblgqrlgqvlgq3lgq7lgq/lgrDlgrHlgrPlgrTlgrXlgrblgrflgrjlgrnlgrzvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzMF0ubGVuZ3RoOyArK2opIGlmKERbMTMwXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzMF1bal1dID0gMzMyODAgKyBqOyBkWzMzMjgwICsgal0gPSBEWzEzMF1bal07fVxuRFsxMzFdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lgr3lgr7lgr/lg4Dlg4Hlg4Llg4Plg4Tlg4Xlg4blg4flg4jlg4nlg4rlg4vlg4zlg43lg47lg5Dlg5Hlg5Llg5Plg5Tlg5Xlg5flg5jlg5nlg5vlg5zlg53lg57lg5/lg6Dlg6Hlg6Llg6Plg6Tlg6Xlg6jlg6nlg6rlg6vlg6/lg7Dlg7Hlg7Llg7Tlg7blg7flg7jlg7nlg7rlg7zlg73lg77lg7/lhIDlhIHlhILlhIPlhITlhIXlhIjvv73lhInlhIrlhIzlhI3lhI7lhI/lhJDlhJHlhJPlhJTlhJXlhJblhJflhJjlhJnlhJrlhJvlhJzlhJ3lhJ7lhJ/lhKDlhKLlhKPlhKTlhKXlhKblhKflhKjlhKnlhKrlhKvlhKzlhK3lhK7lhK/lhLDlhLHlhLLlhLPlhLTlhLXlhLblhLflhLjlhLnlhLrlhLvlhLzlhL3lhL7lhYLlhYflhYrlhYzlhY7lhY/lhZDlhZLlhZPlhZflhZjlhZnlhZvlhZ3lhZ7lhZ/lhaDlhaHlhaPlhaTlhablhaflhanlharlha/lhbLlhbrlhb7lhb/lhoPlhoTlhoblhoflhorlhovlho7lho/lhpDlhpHlhpPlhpTlhpjlhprlhp3lhp7lhp/lhqHlhqPlhqblhqflhqjlhqnlhqrlhq3lhq7lhrTlhrjlhrnlhrrlhr7lhr/lh4Hlh4Llh4Plh4Xlh4jlh4rlh43lh47lh5Dlh5Llh5Plh5Tlh5Xlh5blh5fvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzMV0ubGVuZ3RoOyArK2opIGlmKERbMTMxXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzMV1bal1dID0gMzM1MzYgKyBqOyBkWzMzNTM2ICsgal0gPSBEWzEzMV1bal07fVxuRFsxMzJdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lh5jlh5nlh5rlh5zlh57lh5/lh6Llh6Plh6Xlh6blh6flh6jlh6nlh6rlh6zlh67lh7Hlh7Llh7Tlh7flh77liITliIXliInliIvliIzliI/liJDliJPliJTliJXliJzliJ7liJ/liKHliKLliKPliKXliKbliKfliKrliKzliK/liLHliLLliLTliLXliLzliL7liYTliYXliYbliYfliYjliYnliYvliY7liY/liZLliZPliZXliZfliZjvv73liZnliZrliZvliZ3liZ/liaDliaLliaPliaTliabliajliavliazlia3lia7libDlibHlibPlibTlibXlibblibflibjlibnlibrlibvlibzlib7lioDlioPlioTlioXlioblioflionliorliovliozlio3lio7lio/lipHlipLlipTlipXlipblipflipjlipnliprlipzliqTliqXliqbliqfliq7liq/lirDlirTlirXlirblirflirjlirnlirrlirvlirzlir3li4Dli4Hli4Lli4Tli4Xli4bli4jli4rli4zli43li47li4/li5Hli5Pli5Tli5Xli5fli5nli5rli5vli5zli53li57li6Dli6Hli6Lli6Pli6Xli6bli6fli6jli6nli6rli6vli6zli63li67li6/li7Hli7Lli7Pli7Tli7Xli7bli7fli7jli7vli7zli73ljIHljILljIPljITljIfljInljIrljIvljIzljI7vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzMl0ubGVuZ3RoOyArK2opIGlmKERbMTMyXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzMl1bal1dID0gMzM3OTIgKyBqOyBkWzMzNzkyICsgal0gPSBEWzEzMl1bal07fVxuRFsxMzNdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73ljJHljJLljJPljJTljJjljJvljJzljJ7ljJ/ljKLljKTljKXljKfljKjljKnljKvljKzljK3ljK/ljLDljLHljLLljLPljLTljLXljLbljLfljLjljLzljL3ljYDljYLljYTljYbljYvljYzljY3ljZDljZTljZjljZnljZvljZ3ljaXljajljarljazlja3ljbLljbbljbnljbvljbzljb3ljb7ljoDljoHljoPljofljojljorljo7ljo/vv73ljpDljpHljpLljpPljpTljpbljpfljpnljpvljpzljp7ljqDljqHljqTljqfljqrljqvljqzljq3ljq/ljrDljrHljrLljrPljrTljrXljrfljrjljrnljrrljrzljr3ljr7lj4Dlj4Plj4Tlj4Xlj4blj4flj47lj4/lj5Dlj5Llj5Plj5Xlj5rlj5zlj53lj57lj6Hlj6Llj6flj7Tlj7rlj77lj7/lkIDlkILlkIXlkIflkIvlkJTlkJjlkJnlkJrlkJzlkKLlkKTlkKXlkKrlkLDlkLPlkLblkLflkLrlkL3lkL/lkYHlkYLlkYTlkYXlkYflkYnlkYzlkY3lkY7lkY/lkZHlkZrlkZ3lkZ7lkZ/lkaDlkaHlkaPlkaXlkaflkanlkarlkavlkazlka3lka7lka/lkbDlkbTlkbnlkbrlkb7lkb/lkoHlkoPlkoXlkoflkojlkonlkorlko3lkpHlkpPlkpflkpjlkpzlkp7lkp/lkqDlkqHvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzM10ubGVuZ3RoOyArK2opIGlmKERbMTMzXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzM11bal1dID0gMzQwNDggKyBqOyBkWzM0MDQ4ICsgal0gPSBEWzEzM11bal07fVxuRFsxMzRdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lkqLlkqXlkq7lkrDlkrLlkrXlkrblkrflkrnlkrrlkrzlkr7lk4Plk4Xlk4rlk4vlk5blk5jlk5vlk6Dlk6Hlk6Llk6Plk6Tlk6vlk6zlk6/lk7Dlk7Hlk7Tlk7Xlk7blk7flk7jlk7nlk7vlk77llIDllILllIPllITllIXllIjllIrllIvllIzllI3llI7llJLllJPllJXllJbllJfllJjllJnllJrllJzllJ3llJ7llJ/llKHllKXllKbvv73llKjllKnllKvllK3llLLllLTllLXllLbllLjllLnllLrllLvllL3llYDllYLllYXllYfllYjllYvllYzllY3llY7llY/llZHllZLllZPllZTllZfllZjllZnllZrllZvllZ3llZ7llZ/llaDllaLllaPllajllanllavlla/llbDllbHllbLllbPllbTllbnllbrllb3llb/lloXllobllozllo3llo7llpDllpLllpPllpXllpbllpfllprllpvllp7llqDllqHllqLllqPllqTllqXllqbllqjllqnllqrllqvllqzllq3llq7llq/llrDllrLllrTllrbllrjllrrllrzllr/ll4Dll4Hll4Lll4Pll4bll4fll4jll4rll4vll47ll4/ll5Dll5Xll5fll5jll5nll5rll5vll57ll6Dll6Lll6fll6nll63ll67ll7Dll7Hll7Tll7bll7jll7nll7rll7vll7zll7/lmILlmIPlmITlmIXvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzNF0ubGVuZ3RoOyArK2opIGlmKERbMTM0XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzNF1bal1dID0gMzQzMDQgKyBqOyBkWzM0MzA0ICsgal0gPSBEWzEzNF1bal07fVxuRFsxMzVdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lmIblmIflmIrlmIvlmI3lmJDlmJHlmJLlmJPlmJTlmJXlmJblmJflmJnlmJrlmJzlmJ3lmKDlmKHlmKLlmKXlmKblmKjlmKnlmKrlmKvlmK7lmK/lmLDlmLPlmLXlmLflmLjlmLrlmLzlmL3lmL7lmYDlmYHlmYLlmYPlmYTlmYXlmYblmYflmYjlmYnlmYrlmYvlmY/lmZDlmZHlmZLlmZPlmZXlmZblmZrlmZvlmZ3lmZ7lmZ/lmaDlmaHvv73lmaPlmaXlmablmaflma3lma7lma/lmbDlmbLlmbPlmbTlmbXlmbflmbjlmbnlmbrlmb3lmb7lmb/lmoDlmoHlmoLlmoPlmoTlmoflmojlmonlmorlmovlmozlmo3lmpDlmpHlmpLlmpTlmpXlmpblmpflmpjlmpnlmprlmpvlmpzlmp3lmp7lmp/lmqDlmqHlmqLlmqTlmqXlmqblmqflmqjlmqnlmqrlmqvlmqzlmq3lmq7lmrDlmrHlmrLlmrPlmrTlmrXlmrblmrjlmrnlmrrlmrvlmr3lmr7lmr/lm4Dlm4Hlm4Llm4Plm4Tlm4Xlm4blm4flm4jlm4nlm4vlm4zlm43lm47lm4/lm5Dlm5Hlm5Llm5Plm5Xlm5blm5jlm5nlm5zlm6Plm6Xlm6blm6flm6jlm6nlm6rlm6zlm67lm6/lm7Llm7Plm7blm7flm7jlm7vlm7zlnIDlnIHlnILlnIXlnIflnIvlnIzlnI3lnI7lnI/lnJDlnJHvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzNV0ubGVuZ3RoOyArK2opIGlmKERbMTM1XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzNV1bal1dID0gMzQ1NjAgKyBqOyBkWzM0NTYwICsgal0gPSBEWzEzNV1bal07fVxuRFsxMzZdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lnJLlnJPlnJTlnJXlnJblnJflnJjlnJnlnJrlnJvlnJ3lnJ7lnKDlnKHlnKLlnKTlnKXlnKblnKflnKvlnLHlnLLlnLTlnLXlnLblnLflnLjlnLzlnL3lnL/lnYHlnYPlnYTlnYXlnYblnYjlnYnlnYvlnZLlnZPlnZTlnZXlnZblnZjlnZnlnaLlnaPlnaXlnaflnazlna7lnbDlnbHlnbLlnbTlnbXlnbjlnbnlnbrlnb3lnb7lnb/lnoDvv73lnoHlnoflnojlnonlnorlno3lno7lno/lnpDlnpHlnpTlnpXlnpblnpflnpjlnpnlnprlnpzlnp3lnp7lnp/lnqXlnqjlnqrlnqzlnq/lnrDlnrHlnrPlnrXlnrblnrflnrnlnrrlnrvlnrzlnr3lnr7lnr/ln4Dln4Hln4Tln4Xln4bln4fln4jln4nln4rln4zln43ln5Dln5Hln5Pln5bln5fln5vln5zln57ln6Hln6Lln6Pln6Xln6bln6fln6jln6nln6rln6vln6zln67ln7Dln7Hln7Lln7Pln7Xln7bln7fln7vln7zln77ln7/loIHloIPloITloIXloIjloInloIrloIzloI7loI/loJDloJLloJPloJTloJbloJfloJjloJrloJvloJzloJ3loJ/loKLloKPloKXloKbloKfloKjloKnloKvloKzloK3loK7loK/loLHloLLloLPloLTloLbloLfloLjloLnloLrloLvloLzloL3vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzNl0ubGVuZ3RoOyArK2opIGlmKERbMTM2XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzNl1bal1dID0gMzQ4MTYgKyBqOyBkWzM0ODE2ICsgal0gPSBEWzEzNl1bal07fVxuRFsxMzddID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73loL7loL/loYDloYHloYLloYPloYXloYbloYfloYjloYnloYrloYvloY7loY/loZDloZLloZPloZXloZbloZfloZnloZrloZvloZzloZ3loZ/loaDloaHloaLloaPloaTloabloafloajloanloarloa3loa7loa/lobDlobHlobLlobPlobTlobXlobblobflobjlobnlobrlobvlobzlob3lob/looLlooTloobloofloojloorloovloozvv73loo3loo7loo/lopDlopHlopTlopXlopblopflopjlopvlopzlop3loqDloqHloqLloqPloqTloqXloqbloqfloqrloqvloqzloq3loq7loq/lorDlorHlorLlorPlorTlorXlorblorflorjlornlorrlorvlor3lor7lor/lo4Dlo4Llo4Plo4Tlo4blo4flo4jlo4nlo4rlo4vlo4zlo43lo47lo4/lo5Dlo5Llo5Plo5Tlo5blo5flo5jlo5nlo5rlo5vlo5zlo53lo57lo5/lo6Dlo6Hlo6Llo6Plo6Xlo6blo6flo6jlo6nlo6rlo63lo6/lo7Hlo7Llo7Tlo7Xlo7flo7jlo7rlo7vlo7zlo73lo77lo7/lpIDlpIHlpIPlpIXlpIblpIjlpInlpIrlpIvlpIzlpI7lpJDlpJHlpJLlpJPlpJflpJjlpJvlpJ3lpJ7lpKDlpKHlpKLlpKPlpKblpKjlpKzlpLDlpLLlpLPlpLXlpLblpLvvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzN10ubGVuZ3RoOyArK2opIGlmKERbMTM3XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzN11bal1dID0gMzUwNzIgKyBqOyBkWzM1MDcyICsgal0gPSBEWzEzN11bal07fVxuRFsxMzhdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lpL3lpL7lpL/lpYDlpYPlpYXlpYblpYrlpYzlpY3lpZDlpZLlpZPlpZnlpZvlpZzlpZ3lpZ7lpZ/lpaHlpaPlpaTlpablpaflpajlpanlparlpavlpazlpa3lpa7lpa/lpbDlpbHlpbLlpbXlpbflpbrlpbvlpbzlpb7lpb/lpoDlpoXlponlpovlpozlpo7lpo/lppDlppHlppTlppXlppjlpprlppvlppzlpp3lpp/lpqDlpqHlpqLlpqbvv73lpqflpqzlpq3lprDlprHlprPlprTlprXlprblprflprjlprrlprzlpr3lpr/lp4Dlp4Hlp4Llp4Plp4Tlp4Xlp4flp4jlp4nlp4zlp43lp47lp4/lp5Xlp5blp5nlp5vlp57lp5/lp6Dlp6Hlp6Llp6Tlp6blp6flp6nlp6rlp6vlp63lp67lp6/lp7Dlp7Hlp7Llp7Plp7Tlp7Xlp7blp7flp7jlp7rlp7zlp73lp77lqIDlqILlqIrlqIvlqI3lqI7lqI/lqJDlqJLlqJTlqJXlqJblqJflqJnlqJrlqJvlqJ3lqJ7lqKHlqKLlqKTlqKblqKflqKjlqKrlqKvlqKzlqK3lqK7lqK/lqLDlqLPlqLXlqLflqLjlqLnlqLrlqLvlqL3lqL7lqL/lqYHlqYLlqYPlqYTlqYXlqYflqYjlqYvlqYzlqY3lqY7lqY/lqZDlqZHlqZLlqZPlqZTlqZblqZflqZjlqZnlqZvlqZzlqZ3lqZ7lqZ/lqaDvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzOF0ubGVuZ3RoOyArK2opIGlmKERbMTM4XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzOF1bal1dID0gMzUzMjggKyBqOyBkWzM1MzI4ICsgal0gPSBEWzEzOF1bal07fVxuRFsxMzldID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lqaHlqaPlqaTlqaXlqablqajlqanlqavlqazlqa3lqa7lqa/lqbDlqbHlqbLlqbPlqbjlqbnlqbvlqbzlqb3lqb7lqoDlqoHlqoLlqoPlqoTlqoXlqoblqoflqojlqonlqorlqovlqozlqo3lqo7lqo/lqpDlqpHlqpPlqpTlqpXlqpblqpflqpjlqpnlqpzlqp3lqp7lqp/lqqDlqqHlqqLlqqPlqqTlqqXlqqblqqflqqjlqqnlqqvlqqzvv73lqq3lqq7lqq/lqrDlqrHlqrTlqrblqrflqrnlqrrlqrvlqrzlqr3lqr/lq4Dlq4Plq4Tlq4Xlq4blq4flq4jlq4rlq4vlq43lq47lq4/lq5Dlq5Hlq5Plq5Xlq5flq5nlq5rlq5vlq53lq57lq5/lq6Llq6Tlq6Xlq6flq6jlq6rlq6zlq63lq67lq6/lq7Dlq7Llq7Plq7Tlq7Xlq7blq7flq7jlq7nlq7rlq7vlq7zlq73lq77lq7/lrIDlrIHlrILlrIPlrITlrIXlrIblrIflrIjlrIrlrIvlrIzlrI3lrI7lrI/lrJDlrJHlrJLlrJPlrJTlrJXlrJjlrJnlrJrlrJvlrJzlrJ3lrJ7lrJ/lrKDlrKHlrKLlrKPlrKTlrKXlrKblrKflrKjlrKnlrKrlrKvlrKzlrK3lrK7lrK/lrLDlrLHlrLPlrLXlrLblrLjlrLnlrLrlrLvlrLzlrL3lrL7lrL/lrYHlrYLlrYPlrYTlrYXlrYblrYfvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzEzOV0ubGVuZ3RoOyArK2opIGlmKERbMTM5XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzEzOV1bal1dID0gMzU1ODQgKyBqOyBkWzM1NTg0ICsgal0gPSBEWzEzOV1bal07fVxuRFsxNDBdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lrYjlrYnlrYrlrYvlrYzlrY3lrY7lrY/lrZLlrZblrZ7lraDlraHlraflrajlravlra3lra7lra/lrbLlrbTlrbblrbflrbjlrbnlrbvlrbzlrb7lrb/lroLlroblrorlro3lro7lrpDlrpHlrpLlrpTlrpblrp/lrqflrqjlrqnlrqzlrq3lrq7lrq/lrrHlrrLlrrflrrrlrrvlrrzlr4Dlr4Hlr4Plr4jlr4nlr4rlr4vlr43lr47lr4/vv73lr5Hlr5Tlr5Xlr5blr5flr5jlr5nlr5rlr5vlr5zlr6Dlr6Llr6Plr6blr6flr6nlr6rlr6vlr6zlr63lr6/lr7Hlr7Llr7Plr7Tlr7Xlr7blr7flr73lr77lsIDlsILlsIPlsIXlsIflsIjlsIvlsIzlsI3lsI7lsJDlsJLlsJPlsJflsJnlsJvlsJ7lsJ/lsKDlsKHlsKPlsKblsKjlsKnlsKrlsKvlsK3lsK7lsK/lsLDlsLLlsLPlsLXlsLblsLflsYPlsYTlsYblsYflsYzlsY3lsZLlsZPlsZTlsZblsZflsZjlsZrlsZvlsZzlsZ3lsZ/lsaLlsaTlsaflsajlsanlsarlsavlsazlsa3lsbDlsbLlsbPlsbTlsbXlsbblsbflsbjlsbvlsbzlsb3lsb7lsoDlsoPlsoTlsoXlsoblsoflsonlsorlsovlso7lso/lspLlspPlspXlsp3lsp7lsp/lsqDlsqHlsqTlsqXlsqblsqflsqjvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0MF0ubGVuZ3RoOyArK2opIGlmKERbMTQwXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0MF1bal1dID0gMzU4NDAgKyBqOyBkWzM1ODQwICsgal0gPSBEWzE0MF1bal07fVxuRFsxNDFdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lsqrlsq7lsq/lsrDlsrLlsrTlsrblsrnlsrrlsrvlsrzlsr7ls4Dls4Lls4Pls4Xls4bls4fls4jls4nls4rls4zls43ls47ls4/ls5Dls5Hls5Pls5Tls5Xls5bls5fls5jls5rls5vls5zls53ls57ls5/ls6Dls6Lls6Pls6fls6nls6vls6zls67ls6/ls7Hls7Lls7Pls7Tls7Xls7bls7fls7jls7nls7rls7zls73ls77ls7/ltIDvv73ltIHltITltIXltIjltInltIrltIvltIzltI3ltI/ltJDltJHltJLltJPltJXltJfltJjltJnltJrltJzltJ3ltJ/ltKDltKHltKLltKPltKXltKjltKrltKvltKzltK/ltLDltLHltLLltLPltLXltLbltLfltLjltLnltLrltLvltLzltL/ltYDltYHltYLltYPltYTltYXltYbltYjltYnltY3ltY7ltY/ltZDltZHltZLltZPltZTltZXltZbltZfltZnltZrltZzltZ7ltZ/ltaDltaHltaLltaPltaTltaXltabltafltajltarlta3lta7ltbDltbHltbLltbPltbXltbbltbfltbjltbnltbrltbvltbzltb3ltb7ltb/ltoDltoHltoPltoTltoXltobltofltojltonltorltovltozlto3lto7lto/ltpDltpHltpLltpPltpTltpXltpbltpfltpjltprltpvltpzltp7ltp/ltqDvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0MV0ubGVuZ3RoOyArK2opIGlmKERbMTQxXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0MV1bal1dID0gMzYwOTYgKyBqOyBkWzM2MDk2ICsgal0gPSBEWzE0MV1bal07fVxuRFsxNDJdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73ltqHltqLltqPltqTltqXltqbltqfltqjltqnltqrltqvltqzltq3ltq7ltq/ltrDltrHltrLltrPltrTltrXltrbltrjltrnltrrltrvltrzltr3ltr7ltr/lt4Dlt4Hlt4Llt4Plt4Tlt4blt4flt4jlt4nlt4rlt4vlt4zlt47lt4/lt5Dlt5Hlt5Llt5Plt5Tlt5Xlt5blt5flt5jlt5nlt5rlt5zlt5/lt6Dlt6Plt6Tlt6rlt6zlt63vv73lt7Dlt7Xlt7blt7jlt7nlt7rlt7vlt7zlt7/luIDluITluIfluInluIrluIvluI3luI7luJLluJPluJfluJ7luJ/luKDluKHluKLluKPluKTluKXluKjluKnluKrluKvluKzluK/luLDluLLluLPluLTluLXluLbluLnluLrluL7luL/luYDluYHluYPluYbluYfluYjluYnluYrluYvluY3luY7luY/luZDluZHluZLluZPluZbluZfluZjluZnluZrluZzluZ3luZ/luaDluaPluaTluaXluabluafluajluanluarluavluazlua3lua7lua/lubDlubHlubXlubflubnlub7luoHluoLluoPluoXluojluonluozluo3luo7lupLlupjlupvlup3luqHluqLluqPluqTluqjluqnluqrluqvluqzluq7luq/lurDlurHlurLlurTlurrlurvlurzlur3lur/lu4Dlu4Hlu4Llu4Plu4Tlu4Xvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0Ml0ubGVuZ3RoOyArK2opIGlmKERbMTQyXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0Ml1bal1dID0gMzYzNTIgKyBqOyBkWzM2MzUyICsgal0gPSBEWzE0Ml1bal07fVxuRFsxNDNdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73lu4blu4flu4jlu4vlu4zlu43lu47lu4/lu5Dlu5Tlu5Xlu5flu5jlu5nlu5rlu5zlu53lu57lu5/lu6Dlu6Hlu6Llu6Plu6Tlu6Xlu6blu6flu6nlu6vlu6zlu63lu67lu6/lu7Dlu7Hlu7Llu7Plu7Xlu7jlu7nlu7vlu7zlu73lvIXlvIblvIflvInlvIzlvI3lvI7lvJDlvJLlvJTlvJblvJnlvJrlvJzlvJ3lvJ7lvKHlvKLlvKPlvKTvv73lvKjlvKvlvKzlvK7lvLDlvLLlvLPlvLTlvLXlvLblvLflvLjlvLvlvL3lvL7lvL/lvYHlvYLlvYPlvYTlvYXlvYblvYflvYjlvYnlvYrlvYvlvYzlvY3lvY7lvY/lvZHlvZTlvZnlvZrlvZvlvZzlvZ7lvZ/lvaDlvaPlvaXlvaflvajlvavlva7lva/lvbLlvbTlvbXlvbblvbjlvbrlvb3lvb7lvb/lvoPlvoblvo3lvo7lvo/lvpHlvpPlvpTlvpblvprlvpvlvp3lvp7lvp/lvqDlvqLlvqPlvqTlvqXlvqblvqflvqnlvqvlvqzlvq/lvrDlvrHlvrLlvrPlvrTlvrblvrjlvrnlvrrlvrvlvr7lvr/lv4Dlv4Hlv4Llv4flv4jlv4rlv4vlv47lv5Plv5Tlv5Xlv5rlv5vlv5zlv57lv5/lv6Llv6Plv6Xlv6blv6jlv6nlv6zlv6/lv7Dlv7Llv7Plv7Tlv7blv7flv7nlv7rlv7zmgIfvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0M10ubGVuZ3RoOyArK2opIGlmKERbMTQzXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0M11bal1dID0gMzY2MDggKyBqOyBkWzM2NjA4ICsgal0gPSBEWzE0M11bal07fVxuRFsxNDRdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mgIjmgInmgIvmgIzmgJDmgJHmgJPmgJfmgJjmgJrmgJ7mgJ/mgKLmgKPmgKTmgKzmgK3mgK7mgLDmgLHmgLLmgLPmgLTmgLbmgLfmgLjmgLnmgLrmgL3mgL7mgYDmgYTmgYXmgYbmgYfmgYjmgYnmgYrmgYzmgY7mgY/mgZHmgZPmgZTmgZbmgZfmgZjmgZvmgZzmgZ7mgZ/mgaDmgaHmgaXmgabmga7mgbHmgbLmgbTmgbXmgbfmgb7mgoDvv73mgoHmgoLmgoXmgobmgofmgojmgormgovmgo7mgo/mgpDmgpHmgpPmgpXmgpfmgpjmgpnmgpzmgp7mgqHmgqLmgqTmgqXmgqfmgqnmgqrmgq7mgrDmgrPmgrXmgrbmgrfmgrnmgrrmgr3mgr7mgr/mg4Dmg4Hmg4Lmg4Pmg4Tmg4fmg4jmg4nmg4zmg43mg47mg4/mg5Dmg5Lmg5Pmg5Tmg5bmg5fmg5nmg5vmg57mg6Hmg6Lmg6Pmg6Tmg6Xmg6rmg7Hmg7Lmg7Xmg7fmg7jmg7vmg7zmg73mg77mg7/mhILmhIPmhITmhIXmhIfmhIrmhIvmhIzmhJDmhJHmhJLmhJPmhJTmhJbmhJfmhJjmhJnmhJvmhJzmhJ3mhJ7mhKHmhKLmhKXmhKjmhKnmhKrmhKzmhK3mhK7mhK/mhLDmhLHmhLLmhLPmhLTmhLXmhLbmhLfmhLjmhLnmhLrmhLvmhLzmhL3mhL7mhYDmhYHmhYLmhYPmhYTmhYXmhYbvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0NF0ubGVuZ3RoOyArK2opIGlmKERbMTQ0XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0NF1bal1dID0gMzY4NjQgKyBqOyBkWzM2ODY0ICsgal0gPSBEWzE0NF1bal07fVxuRFsxNDVdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mhYfmhYnmhYvmhY3mhY/mhZDmhZLmhZPmhZTmhZbmhZfmhZjmhZnmhZrmhZvmhZzmhZ7mhZ/mhaDmhaHmhaPmhaTmhaXmhabmhanmharmhavmhazmha3mha7mha/mhbHmhbLmhbPmhbTmhbbmhbjmhbnmhbrmhbvmhbzmhb3mhb7mhb/mhoDmhoHmhoLmhoPmhoTmhoXmhobmhofmhojmhonmhormhozmho3mho/mhpDmhpHmhpLmhpPmhpXvv73mhpbmhpfmhpjmhpnmhprmhpvmhpzmhp7mhp/mhqDmhqHmhqLmhqPmhqTmhqXmhqbmhqrmhqvmhq3mhq7mhq/mhrDmhrHmhrLmhrPmhrTmhrXmhrbmhrjmhrnmhrrmhrvmhrzmhr3mhr/mh4Dmh4Hmh4Pmh4Tmh4Xmh4bmh4fmh4nmh4zmh43mh47mh4/mh5Dmh5Pmh5Xmh5bmh5fmh5jmh5nmh5rmh5vmh5zmh53mh57mh5/mh6Dmh6Hmh6Lmh6Pmh6Tmh6Xmh6fmh6jmh6nmh6rmh6vmh6zmh63mh67mh6/mh7Dmh7Hmh7Lmh7Pmh7Tmh7bmh7fmh7jmh7nmh7rmh7vmh7zmh73mh77miIDmiIHmiILmiIPmiITmiIXmiIfmiInmiJPmiJTmiJnmiJzmiJ3miJ7miKDmiKPmiKbmiKfmiKjmiKnmiKvmiK3miK/miLDmiLHmiLLmiLXmiLbmiLjmiLnmiLrmiLvmiLzmiYLmiYTmiYXmiYbmiYrvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0NV0ubGVuZ3RoOyArK2opIGlmKERbMTQ1XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0NV1bal1dID0gMzcxMjAgKyBqOyBkWzM3MTIwICsgal0gPSBEWzE0NV1bal07fVxuRFsxNDZdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73miY/miZDmiZXmiZbmiZfmiZnmiZrmiZzmiZ3miZ7miZ/miaDmiaHmiaLmiaTmiaXmiajmibHmibLmibTmibXmibfmibjmibrmibvmib3mioHmioLmioPmioXmiobmiofmiojmiovmiozmio3mio7mio/mipDmipTmipnmipzmip3mip7miqPmiqbmiqfmiqnmiqrmiq3miq7miq/mirDmirLmirPmirTmirbmirfmirjmirrmir7mi4Dmi4Hvv73mi4Pmi4vmi4/mi5Hmi5Xmi53mi57mi6Dmi6Hmi6Tmi6rmi6vmi7Dmi7Lmi7Xmi7jmi7nmi7rmi7vmjIDmjIPmjITmjIXmjIbmjIrmjIvmjIzmjI3mjI/mjJDmjJLmjJPmjJTmjJXmjJfmjJjmjJnmjJzmjKbmjKfmjKnmjKzmjK3mjK7mjLDmjLHmjLPmjLTmjLXmjLbmjLfmjLjmjLvmjLzmjL7mjL/mjYDmjYHmjYTmjYfmjYjmjYrmjZHmjZLmjZPmjZTmjZbmjZfmjZjmjZnmjZrmjZvmjZzmjZ3mjaDmjaTmjaXmjabmjajmjarmjavmjazmja/mjbDmjbLmjbPmjbTmjbXmjbjmjbnmjbzmjb3mjb7mjb/mjoHmjoPmjoTmjoXmjobmjovmjo3mjpHmjpPmjpTmjpXmjpfmjpnmjprmjpvmjpzmjp3mjp7mjp/mjqHmjqTmjqbmjqvmjq/mjrHmjrLmjrXmjrbmjrnmjrvmjr3mjr/mj4Dvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0Nl0ubGVuZ3RoOyArK2opIGlmKERbMTQ2XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0Nl1bal1dID0gMzczNzYgKyBqOyBkWzM3Mzc2ICsgal0gPSBEWzE0Nl1bal07fVxuRFsxNDddID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mj4Hmj4Lmj4Pmj4Xmj4fmj4jmj4rmj4vmj4zmj5Hmj5Pmj5Tmj5Xmj5fmj5jmj5nmj5rmj5vmj5zmj53mj5/mj6Lmj6Tmj6Xmj6bmj6fmj6jmj6vmj6zmj67mj6/mj7Dmj7Hmj7Pmj7Xmj7fmj7nmj7rmj7vmj7zmj77mkIPmkITmkIbmkIfmkIjmkInmkIrmkI3mkI7mkJHmkJLmkJXmkJbmkJfmkJjmkJnmkJrmkJ3mkJ/mkKLmkKPmkKTvv73mkKXmkKfmkKjmkKnmkKvmkK7mkK/mkLDmkLHmkLLmkLPmkLXmkLbmkLfmkLjmkLnmkLvmkLzmkL7mkYDmkYLmkYPmkYnmkYvmkYzmkY3mkY7mkY/mkZDmkZHmkZPmkZXmkZbmkZfmkZnmkZrmkZvmkZzmkZ3mkZ/mkaDmkaHmkaLmkaPmkaTmkaXmkabmkajmkarmkavmkazmka7mka/mkbDmkbHmkbLmkbPmkbTmkbXmkbbmkbfmkbvmkbzmkb3mkb7mkb/mkoDmkoHmkoPmkobmkojmkonmkormkovmkozmko3mko7mko/mkpDmkpPmkpTmkpfmkpjmkprmkpvmkpzmkp3mkp/mkqDmkqHmkqLmkqPmkqXmkqbmkqfmkqjmkqrmkqvmkq/mkrHmkrLmkrPmkrTmkrbmkrnmkrvmkr3mkr7mkr/mk4Hmk4Pmk4Tmk4bmk4fmk4jmk4nmk4rmk4vmk4zmk4/mk5Hmk5Pmk5Tmk5Xmk5bmk5nmk5rvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0N10ubGVuZ3RoOyArK2opIGlmKERbMTQ3XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0N11bal1dID0gMzc2MzIgKyBqOyBkWzM3NjMyICsgal0gPSBEWzE0N11bal07fVxuRFsxNDhdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mk5vmk5zmk53mk5/mk6Dmk6Hmk6Pmk6Xmk6fmk6jmk6nmk6rmk6vmk6zmk63mk67mk6/mk7Dmk7Hmk7Lmk7Pmk7Tmk7Xmk7bmk7fmk7jmk7nmk7rmk7vmk7zmk73mk77mk7/mlIHmlILmlIPmlITmlIXmlIbmlIfmlIjmlIrmlIvmlIzmlI3mlI7mlI/mlJDmlJHmlJPmlJTmlJXmlJbmlJfmlJnmlJrmlJvmlJzmlJ3mlJ7mlJ/mlKDmlKHvv73mlKLmlKPmlKTmlKbmlKfmlKjmlKnmlKrmlKzmlK3mlLDmlLHmlLLmlLPmlLfmlLrmlLzmlL3mlYDmlYHmlYLmlYPmlYTmlYbmlYfmlYrmlYvmlY3mlY7mlZDmlZLmlZPmlZTmlZfmlZjmlZrmlZzmlZ/mlaDmlaHmlaTmlaXmlafmlajmlanmlarmla3mla7mla/mlbHmlbPmlbXmlbbmlbjmlbnmlbrmlbvmlbzmlb3mlb7mlb/mloDmloHmloLmloPmloTmloXmlobmlojmlonmlormlo3mlo7mlo/mlpLmlpTmlpXmlpbmlpjmlprmlp3mlp7mlqDmlqLmlqPmlqbmlqjmlqrmlqzmlq7mlrHmlrLmlrPmlrTmlrXmlrbmlrfmlrjmlrrmlrvmlr7mlr/ml4Dml4Lml4fml4jml4nml4rml43ml5Dml5Hml5Pml5Tml5Xml5jml5nml5rml5vml5zml53ml57ml5/ml6Hml6Pml6Tml6rml6vvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0OF0ubGVuZ3RoOyArK2opIGlmKERbMTQ4XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0OF1bal1dID0gMzc4ODggKyBqOyBkWzM3ODg4ICsgal0gPSBEWzE0OF1bal07fVxuRFsxNDldID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73ml7Lml7Pml7Tml7Xml7jml7nml7vml7zml73ml77ml7/mmIHmmITmmIXmmIfmmIjmmInmmIvmmI3mmJDmmJHmmJLmmJbmmJfmmJjmmJrmmJvmmJzmmJ7mmKHmmKLmmKPmmKTmmKbmmKnmmKrmmKvmmKzmmK7mmLDmmLLmmLPmmLfmmLjmmLnmmLrmmLvmmL3mmL/mmYDmmYLmmYTmmYXmmYbmmYfmmYjmmYnmmYrmmY3mmY7mmZDmmZHmmZjvv73mmZnmmZvmmZzmmZ3mmZ7mmaDmmaLmmaPmmaXmmafmmanmmarmmavmmazmma3mmbHmmbLmmbPmmbXmmbjmmbnmmbvmmbzmmb3mmb/mmoDmmoHmmoPmmoXmmobmmojmmonmmormmovmmo3mmo7mmo/mmpDmmpLmmpPmmpTmmpXmmpjmmpnmmprmmpvmmpzmmp7mmp/mmqDmmqHmmqLmmqPmmqTmmqXmmqbmmqnmmqrmmqvmmqzmmq3mmq/mmrDmmrHmmrLmmrPmmrXmmrbmmrfmmrjmmrrmmrvmmrzmmr3mmr/mm4Dmm4Hmm4Lmm4Pmm4Tmm4Xmm4bmm4fmm4jmm4nmm4rmm4vmm4zmm43mm47mm4/mm5Dmm5Hmm5Lmm5Pmm5Tmm5Xmm5bmm5fmm5jmm5rmm57mm5/mm6Dmm6Hmm6Lmm6Pmm6Tmm6Xmm6fmm6jmm6rmm6vmm6zmm63mm67mm6/mm7Hmm7Xmm7bmm7jmm7rmm7vmm73mnIHmnILmnIPvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE0OV0ubGVuZ3RoOyArK2opIGlmKERbMTQ5XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE0OV1bal1dID0gMzgxNDQgKyBqOyBkWzM4MTQ0ICsgal0gPSBEWzE0OV1bal07fVxuRFsxNTBdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mnITmnIXmnIbmnIfmnIzmnI7mnI/mnJHmnJLmnJPmnJbmnJjmnJnmnJrmnJzmnJ7mnKDmnKHmnKLmnKPmnKTmnKXmnKfmnKnmnK7mnLDmnLLmnLPmnLbmnLfmnLjmnLnmnLvmnLzmnL7mnL/mnYHmnYTmnYXmnYfmnYrmnYvmnY3mnZLmnZTmnZXmnZfmnZjmnZnmnZrmnZvmnZ3mnaLmnaPmnaTmnabmnafmnavmnazmna7mnbHmnbTmnbbvv73mnbjmnbnmnbrmnbvmnb3mnoDmnoLmnoPmnoXmnobmnojmnormnozmno3mno7mno/mnpHmnpLmnpPmnpTmnpbmnpnmnpvmnp/mnqDmnqHmnqTmnqbmnqnmnqzmnq7mnrHmnrLmnrTmnrnmnrrmnrvmnrzmnr3mnr7mnr/mn4Dmn4Lmn4Xmn4bmn4fmn4jmn4nmn4rmn4vmn4zmn43mn47mn5Xmn5bmn5fmn5vmn5/mn6Hmn6Pmn6Tmn6bmn6fmn6jmn6rmn6vmn63mn67mn7Lmn7Xmn7bmn7fmn7jmn7nmn7rmn7vmn7zmn77moIHmoILmoIPmoITmoIbmoI3moJDmoJLmoJTmoJXmoJjmoJnmoJrmoJvmoJzmoJ7moJ/moKDmoKLmoKPmoKTmoKXmoKbmoKfmoKjmoKvmoKzmoK3moK7moK/moLDmoLHmoLTmoLXmoLbmoLrmoLvmoL/moYfmoYvmoY3moY/moZLmoZbmoZfmoZjmoZnmoZrmoZvvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1MF0ubGVuZ3RoOyArK2opIGlmKERbMTUwXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1MF1bal1dID0gMzg0MDAgKyBqOyBkWzM4NDAwICsgal0gPSBEWzE1MF1bal07fVxuRFsxNTFdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73moZzmoZ3moZ7moZ/moarmoazmoa3moa7moa/mobDmobHmobLmobPmobXmobjmobnmobrmobvmobzmob3mob7mob/mooDmooLmooTmoofmoojmoonmoormoovmoozmoo3moo7mopDmopHmopLmopTmopXmopbmopjmopnmoprmopvmopzmop3mop7mop/moqDmoqHmoqPmoqTmoqXmoqnmoqrmoqvmoqzmoq7morHmorLmorTmorbmorfmorjvv73mornmorrmorvmorzmor3mor7mor/mo4Hmo4Pmo4Tmo4Xmo4bmo4fmo4jmo4rmo4zmo47mo4/mo5Dmo5Hmo5Pmo5Tmo5bmo5fmo5nmo5vmo5zmo53mo57mo5/mo6Hmo6Lmo6Tmo6Xmo6bmo6fmo6jmo6nmo6rmo6vmo6zmo63mo6/mo7Lmo7Pmo7Tmo7bmo7fmo7jmo7vmo73mo77mo7/mpIDmpILmpIPmpITmpIbmpIfmpIjmpInmpIrmpIzmpI/mpJHmpJPmpJTmpJXmpJbmpJfmpJjmpJnmpJrmpJvmpJzmpJ3mpJ7mpKHmpKLmpKPmpKXmpKbmpKfmpKjmpKnmpKrmpKvmpKzmpK7mpK/mpLHmpLLmpLPmpLXmpLbmpLfmpLjmpLrmpLvmpLzmpL7mpYDmpYHmpYPmpYTmpYXmpYbmpYfmpYjmpYnmpYrmpYvmpYzmpY3mpY7mpY/mpZDmpZHmpZLmpZPmpZXmpZbmpZjmpZnmpZvmpZzmpZ/vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1MV0ubGVuZ3RoOyArK2opIGlmKERbMTUxXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1MV1bal1dID0gMzg2NTYgKyBqOyBkWzM4NjU2ICsgal0gPSBEWzE1MV1bal07fVxuRFsxNTJdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mpaHmpaLmpaTmpaXmpafmpajmpanmparmpazmpa3mpa/mpbDmpbLmpbPmpbTmpbXmpbbmpbrmpbvmpb3mpb7mpb/mpoHmpoPmpoXmpormpovmpozmpo7mpo/mppDmppHmppLmppPmppbmppfmppnmpprmpp3mpp7mpp/mpqDmpqHmpqLmpqPmpqTmpqXmpqbmpqnmpqrmpqzmpq7mpq/mprDmprLmprPmprXmprbmprjmprnmprrmprzmpr3vv73mpr7mpr/mp4Dmp4Lmp4Pmp4Tmp4Xmp4bmp4fmp4jmp4nmp4vmp43mp4/mp5Hmp5Lmp5Pmp5Xmp5bmp5fmp5jmp5nmp5rmp5zmp53mp57mp6Hmp6Lmp6Pmp6Tmp6Xmp6bmp6fmp6jmp6nmp6rmp6vmp6zmp67mp6/mp7Dmp7Hmp7Pmp7Tmp7Xmp7bmp7fmp7jmp7nmp7rmp7vmp7zmp77mqIDmqIHmqILmqIPmqITmqIXmqIbmqIfmqIjmqInmqIvmqIzmqI3mqI7mqI/mqJDmqJHmqJLmqJPmqJTmqJXmqJbmqJnmqJrmqJvmqJzmqJ3mqJ7mqKDmqKLmqKPmqKTmqKXmqKbmqKfmqKnmqKvmqKzmqK3mqK7mqLDmqLLmqLPmqLTmqLbmqLfmqLjmqLnmqLrmqLvmqLzmqL/mqYDmqYHmqYLmqYPmqYXmqYbmqYjmqYnmqYrmqYvmqYzmqY3mqY7mqY/mqZHmqZLmqZPmqZTmqZXmqZbmqZfmqZrvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1Ml0ubGVuZ3RoOyArK2opIGlmKERbMTUyXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1Ml1bal1dID0gMzg5MTIgKyBqOyBkWzM4OTEyICsgal0gPSBEWzE1Ml1bal07fVxuRFsxNTNdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mqZzmqZ3mqZ7mqZ/mqaDmqaLmqaPmqaTmqabmqafmqajmqanmqarmqavmqazmqa3mqa7mqa/mqbDmqbLmqbPmqbTmqbXmqbbmqbfmqbjmqbrmqbvmqb3mqb7mqb/mqoHmqoLmqoPmqoXmqobmqofmqojmqonmqormqovmqozmqo3mqo/mqpLmqpPmqpTmqpXmqpbmqpjmqpnmqprmqpvmqpzmqp3mqp7mqp/mqqHmqqLmqqPmqqTmqqXmqqbvv73mqqfmqqjmqqrmqq3mqq7mqq/mqrDmqrHmqrLmqrPmqrTmqrXmqrbmqrfmqrjmqrnmqrrmqrvmqrzmqr3mqr7mqr/mq4Dmq4Hmq4Lmq4Pmq4Tmq4Xmq4bmq4fmq4jmq4nmq4rmq4vmq4zmq43mq47mq4/mq5Dmq5Hmq5Lmq5Pmq5Tmq5Xmq5bmq5fmq5jmq5nmq5rmq5vmq5zmq53mq57mq5/mq6Dmq6Hmq6Lmq6Pmq6Tmq6Xmq6bmq6fmq6jmq6nmq6rmq6vmq6zmq63mq67mq6/mq7Dmq7Hmq7Lmq7Pmq7Tmq7Xmq7bmq7fmq7jmq7nmq7rmq7vmq7zmq73mq77mq7/mrIDmrIHmrILmrIPmrITmrIXmrIbmrIfmrIjmrInmrIrmrIvmrIzmrI3mrI7mrI/mrJDmrJHmrJLmrJPmrJTmrJXmrJbmrJfmrJjmrJnmrJrmrJvmrJzmrJ3mrJ7mrJ/mrKXmrKbmrKjmrKnmrKrmrKvmrKzmrK3mrK7vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1M10ubGVuZ3RoOyArK2opIGlmKERbMTUzXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1M11bal1dID0gMzkxNjggKyBqOyBkWzM5MTY4ICsgal0gPSBEWzE1M11bal07fVxuRFsxNTRdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mrK/mrLDmrLHmrLPmrLTmrLXmrLbmrLjmrLvmrLzmrL3mrL/mrYDmrYHmrYLmrYTmrYXmrYjmrYrmrYvmrY3mrY7mrY/mrZDmrZHmrZLmrZPmrZTmrZXmrZbmrZfmrZjmrZrmrZvmrZzmrZ3mrZ7mrZ/mraDmraHmrajmranmravmrazmra3mra7mra/mrbDmrbHmrbLmrbPmrbTmrbXmrbbmrbfmrbjmrbrmrb3mrb7mrb/mroDmroXmrojvv73mrozmro7mro/mrpDmrpHmrpTmrpXmrpfmrpjmrpnmrpzmrp3mrp7mrp/mrqDmrqLmrqPmrqTmrqXmrqbmrqfmrqjmrqnmrqvmrqzmrq3mrq7mrq/mrrDmrrHmrrLmrrbmrrjmrrnmrrrmrrvmrrzmrr3mrr7mr4Dmr4Pmr4Tmr4bmr4fmr4jmr4nmr4rmr4zmr47mr5Dmr5Hmr5jmr5rmr5zmr53mr57mr5/mr6Dmr6Lmr6Pmr6Tmr6Xmr6bmr6fmr6jmr6nmr6zmr63mr67mr7Dmr7Hmr7Lmr7Tmr7bmr7fmr7jmr7rmr7vmr7zmr77mr7/msIDmsIHmsILmsIPmsITmsIjmsInmsIrmsIvmsIzmsI7msJLmsJfmsJzmsJ3msJ7msKDmsKPmsKXmsKvmsKzmsK3msLHmsLPmsLbmsLfmsLnmsLrmsLvmsLzmsL7msL/msYPmsYTmsYXmsYjmsYvmsYzmsY3msY7msY/msZHmsZLmsZPmsZbmsZjvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1NF0ubGVuZ3RoOyArK2opIGlmKERbMTU0XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1NF1bal1dID0gMzk0MjQgKyBqOyBkWzM5NDI0ICsgal0gPSBEWzE1NF1bal07fVxuRFsxNTVdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73msZnmsZrmsaLmsaPmsaXmsabmsafmsavmsazmsa3msa7msa/msbHmsbPmsbXmsbfmsbjmsbrmsbvmsbzmsb/msoDmsoTmsofmsormsovmso3mso7mspHmspLmspXmspbmspfmspjmsprmspzmsp3msp7msqDmsqLmsqjmsqzmsq/msrDmsrTmsrXmsrbmsrfmsrrms4Dms4Hms4Lms4Pms4bms4fms4jms4vms43ms47ms4/ms5Hms5Lms5jvv73ms5nms5rms5zms53ms5/ms6Tms6bms6fms6nms6zms63ms7Lms7Tms7nms7/mtIDmtILmtIPmtIXmtIbmtIjmtInmtIrmtI3mtI/mtJDmtJHmtJPmtJTmtJXmtJbmtJjmtJzmtJ3mtJ/mtKDmtKHmtKLmtKPmtKTmtKbmtKjmtKnmtKzmtK3mtK/mtLDmtLTmtLbmtLfmtLjmtLrmtL/mtYDmtYLmtYTmtYnmtYzmtZDmtZXmtZbmtZfmtZjmtZvmtZ3mtZ/mtaHmtaLmtaTmtaXmtafmtajmtavmtazmta3mtbDmtbHmtbLmtbPmtbXmtbbmtbnmtbrmtbvmtb3mtb7mtb/mtoDmtoHmtoPmtoTmtobmtofmtormtovmto3mto/mtpDmtpLmtpbmtpfmtpjmtpnmtprmtpzmtqLmtqXmtqzmtq3mtrDmtrHmtrPmtrTmtrbmtrfmtrnmtrrmtrvmtrzmtr3mtr7mt4Hmt4Lmt4Pmt4jmt4nmt4rvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1NV0ubGVuZ3RoOyArK2opIGlmKERbMTU1XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1NV1bal1dID0gMzk2ODAgKyBqOyBkWzM5NjgwICsgal0gPSBEWzE1NV1bal07fVxuRFsxNTZdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mt43mt47mt4/mt5Dmt5Lmt5Pmt5Tmt5Xmt5fmt5rmt5vmt5zmt5/mt6Lmt6Pmt6Xmt6fmt6jmt6nmt6rmt63mt6/mt7Dmt7Lmt7Tmt7Xmt7bmt7jmt7rmt73mt77mt7/muIDmuIHmuILmuIPmuITmuIbmuIfmuIjmuInmuIvmuI/muJLmuJPmuJXmuJjmuJnmuJvmuJzmuJ7muJ/muKLmuKbmuKfmuKjmuKrmuKzmuK7muLDmuLHmuLPmuLXvv73muLbmuLfmuLnmuLvmuLzmuL3muL7muL/muYDmuYHmuYLmuYXmuYbmuYfmuYjmuYnmuYrmuYvmuYzmuY/muZDmuZHmuZLmuZXmuZfmuZnmuZrmuZzmuZ3muZ7muaDmuaHmuaLmuaPmuaTmuaXmuabmuafmuajmuanmuarmuazmua3mua/mubDmubHmubLmubPmubTmubXmubbmubfmubjmubnmubrmubvmubzmub3muoDmuoHmuoLmuoTmuofmuojmuormuovmuozmuo3muo7mupHmupLmupPmupTmupXmupbmupfmupnmuprmupvmup3mup7muqDmuqHmuqPmuqTmuqbmuqjmuqnmuqvmuqzmuq3muq7murDmurPmurXmurjmurnmurzmur7mur/mu4Dmu4Pmu4Tmu4Xmu4bmu4jmu4nmu4rmu4zmu43mu47mu5Dmu5Lmu5bmu5jmu5nmu5vmu5zmu53mu6Pmu6fmu6rmu6vmu6zmu63mu67mu6/vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1Nl0ubGVuZ3RoOyArK2opIGlmKERbMTU2XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1Nl1bal1dID0gMzk5MzYgKyBqOyBkWzM5OTM2ICsgal0gPSBEWzE1Nl1bal07fVxuRFsxNTddID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mu7Dmu7Hmu7Lmu7Pmu7Xmu7bmu7fmu7jmu7rmu7vmu7zmu73mu77mu7/mvIDmvIHmvIPmvITmvIXmvIfmvIjmvIrmvIvmvIzmvI3mvI7mvJDmvJHmvJLmvJbmvJfmvJjmvJnmvJrmvJvmvJzmvJ3mvJ7mvJ/mvKHmvKLmvKPmvKXmvKbmvKfmvKjmvKzmvK7mvLDmvLLmvLTmvLXmvLfmvLjmvLnmvLrmvLvmvLzmvL3mvL/mvYDmvYHmvYLvv73mvYPmvYTmvYXmvYjmvYnmvYrmvYzmvY7mvY/mvZDmvZHmvZLmvZPmvZTmvZXmvZbmvZfmvZnmvZrmvZvmvZ3mvZ/mvaDmvaHmvaPmvaTmvaXmvafmvajmvanmvarmvavmvazmva/mvbDmvbHmvbPmvbXmvbbmvbfmvbnmvbvmvb3mvb7mvb/mvoDmvoHmvoLmvoPmvoXmvobmvofmvormvovmvo/mvpDmvpHmvpLmvpPmvpTmvpXmvpbmvpfmvpjmvpnmvprmvpvmvp3mvp7mvp/mvqDmvqLmvqPmvqTmvqXmvqbmvqjmvqnmvqrmvqvmvqzmvq3mvq7mvq/mvrDmvrHmvrLmvrTmvrXmvrfmvrjmvrrmvrvmvrzmvr3mvr7mvr/mv4Hmv4Pmv4Tmv4Xmv4bmv4fmv4jmv4rmv4vmv4zmv43mv47mv4/mv5Dmv5Pmv5Tmv5Xmv5bmv5fmv5jmv5nmv5rmv5vmv5zmv53mv5/mv6Lmv6Pmv6Tmv6Xvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1N10ubGVuZ3RoOyArK2opIGlmKERbMTU3XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1N11bal1dID0gNDAxOTIgKyBqOyBkWzQwMTkyICsgal0gPSBEWzE1N11bal07fVxuRFsxNThdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73mv6bmv6fmv6jmv6nmv6rmv6vmv6zmv63mv7Dmv7Hmv7Lmv7Pmv7Tmv7Xmv7bmv7fmv7jmv7nmv7rmv7vmv7zmv73mv77mv7/ngIDngIHngILngIPngITngIXngIbngIfngIjngInngIrngIvngIzngI3ngI7ngI/ngJDngJLngJPngJTngJXngJbngJfngJjngJnngJzngJ3ngJ7ngJ/ngKDngKHngKLngKTngKXngKbngKfngKjngKnngKrvv73ngKvngKzngK3ngK7ngK/ngLDngLHngLLngLPngLTngLbngLfngLjngLrngLvngLzngL3ngL7ngL/ngYDngYHngYLngYPngYTngYXngYbngYfngYjngYnngYrngYvngY3ngY7ngZDngZHngZLngZPngZTngZXngZbngZfngZjngZnngZrngZvngZzngZ3ngZ/ngaDngaHngaLngaPngaTngaXngabngafngajnganngarnga7ngbHngbLngbPngbTngbfngbnngbrngbvngb3ngoHngoLngoPngoTngobngofngojngovngozngo3ngo/ngpDngpHngpPngpfngpjngprngpvngp7ngp/ngqDngqHngqLngqPngqTngqXngqbngqfngqjngqnngqrngrDngrLngrTngrXngrbngrrngr7ngr/ng4Tng4Xng4bng4fng4nng4vng4zng43ng47ng4/ng5Dng5Hng5Lng5Png5Tng5Xng5bng5fng5rvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1OF0ubGVuZ3RoOyArK2opIGlmKERbMTU4XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1OF1bal1dID0gNDA0NDggKyBqOyBkWzQwNDQ4ICsgal0gPSBEWzE1OF1bal07fVxuRFsxNTldID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73ng5zng53ng57ng6Dng6Hng6Lng6Png6Xng6rng67ng7Dng7Hng7Lng7Png7Tng7Xng7bng7jng7rng7vng7zng77ng7/nhIDnhIHnhILnhIPnhITnhIXnhIbnhIfnhIjnhIvnhIznhI3nhI7nhI/nhJHnhJLnhJTnhJfnhJvnhJznhJ3nhJ7nhJ/nhKDnhKHnhKLnhKPnhKTnhKXnhKfnhKjnhKnnhKrnhKvnhKznhK3nhK7nhLLnhLPnhLTvv73nhLXnhLfnhLjnhLnnhLrnhLvnhLznhL3nhL7nhL/nhYDnhYHnhYLnhYPnhYTnhYbnhYfnhYjnhYnnhYvnhY3nhY/nhZDnhZHnhZLnhZPnhZTnhZXnhZbnhZfnhZjnhZnnhZrnhZvnhZ3nhZ/nhaDnhaHnhaLnhaPnhaXnhannharnhavnhaznha3nha/nhbDnhbHnhbTnhbXnhbbnhbfnhbnnhbvnhbznhb7nhb/nhoDnhoHnhoLnhoPnhoXnhobnhofnhojnhonnhovnhoznho3nho7nhpDnhpHnhpLnhpPnhpXnhpbnhpfnhprnhpvnhpznhp3nhp7nhqHnhqLnhqPnhqTnhqXnhqbnhqfnhqnnhqrnhqvnhq3nhq7nhq/nhrDnhrHnhrLnhrTnhrbnhrfnhrjnhrrnhrvnhrznhr3nhr7nhr/nh4Dnh4Hnh4Lnh4Tnh4Xnh4bnh4fnh4jnh4nnh4rnh4vnh4znh43nh4/nh5Dnh5Hnh5Lnh5Pvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE1OV0ubGVuZ3RoOyArK2opIGlmKERbMTU5XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE1OV1bal1dID0gNDA3MDQgKyBqOyBkWzQwNzA0ICsgal0gPSBEWzE1OV1bal07fVxuRFsxNjBdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73nh5bnh5fnh5jnh5nnh5rnh5vnh5znh53nh57nh5/nh6Hnh6Lnh6Pnh6Tnh6bnh6jnh6nnh6rnh6vnh6znh63nh6/nh7Dnh7Hnh7Lnh7Pnh7Tnh7Xnh7bnh7fnh7jnh7rnh7vnh7znh73nh77nh7/niIDniIHniILniIPniITniIXniIfniIjniInniIrniIvniIzniI3niI7niI/niJDniJHniJLniJPniJTniJXniJbniJfniJjniJnniJrvv73niJvniJzniJ7niJ/niKDniKHniKLniKPniKTniKXniKbniKfniKnniKvniK3niK7niK/niLLniLPniLTniLrniLzniL7niYDniYHniYLniYPniYTniYXniYbniYnniYrniYvniY7niY/niZDniZHniZPniZTniZXniZfniZjniZrniZzniZ7niaDniaPniaTniaXniajniarniavniaznia3nibDnibHnibPnibTnibbnibfnibjnibvnibznib3nioLnioPnioXniobniofniojnionnioznio7nipDnipHnipPnipTnipXnipbnipfnipjnipnniprnipvnipznip3nip7niqDniqHniqLniqPniqTniqXniqbniqfniqjniqnniqrniqvniq7nirHnirLnirPnirXnirrnirvnirznir3nir7nir/ni4Dni4Xni4bni4fni4nni4rni4vni4zni4/ni5Hni5Pni5Tni5Xni5bni5jni5rni5vvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE2MF0ubGVuZ3RoOyArK2opIGlmKERbMTYwXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE2MF1bal1dID0gNDA5NjAgKyBqOyBkWzQwOTYwICsgal0gPSBEWzE2MF1bal07fVxuRFsxNjFdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73jgIDjgIHjgILCt8uJy4fCqOOAg+OAheKAlO+9nuKAluKApuKAmOKAmeKAnOKAneOAlOOAleOAiOOAieOAiuOAi+OAjOOAjeOAjuOAj+OAluOAl+OAkOOAkcKxw5fDt+KItuKIp+KIqOKIkeKIj+KIquKIqeKIiOKIt+KImuKKpeKIpeKIoOKMkuKKmeKIq+KIruKJoeKJjOKJiOKIveKIneKJoOKJruKJr+KJpOKJpeKInuKIteKItOKZguKZgMKw4oCy4oCz4oSD77yEwqTvv6Dvv6HigLDCp+KEluKYhuKYheKXi+KXj+KXjuKXh+KXhuKWoeKWoOKWs+KWsuKAu+KGkuKGkOKGkeKGk+OAk++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTYxXS5sZW5ndGg7ICsraikgaWYoRFsxNjFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTYxXVtqXV0gPSA0MTIxNiArIGo7IGRbNDEyMTYgKyBqXSA9IERbMTYxXVtqXTt9XG5EWzE2Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKFsOKFseKFsuKFs+KFtOKFteKFtuKFt+KFuOKFue+/ve+/ve+/ve+/ve+/ve+/veKSiOKSieKSiuKSi+KSjOKSjeKSjuKSj+KSkOKSkeKSkuKSk+KSlOKSleKSluKSl+KSmOKSmeKSmuKSm+KRtOKRteKRtuKRt+KRuOKRueKRuuKRu+KRvOKRveKRvuKRv+KSgOKSgeKSguKSg+KShOKSheKShuKSh+KRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqe+/ve+/veOIoOOIoeOIouOIo+OIpOOIpeOIpuOIp+OIqOOIqe+/ve+/veKFoOKFoeKFouKFo+KFpOKFpeKFpuKFp+KFqOKFqeKFquKFq++/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTYyXS5sZW5ndGg7ICsraikgaWYoRFsxNjJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTYyXVtqXV0gPSA0MTQ3MiArIGo7IGRbNDE0NzIgKyBqXSA9IERbMTYyXVtqXTt9XG5EWzE2M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+8ge+8gu+8g++/pe+8he+8hu+8h++8iO+8ie+8iu+8i++8jO+8je+8ju+8j++8kO+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8me+8mu+8m++8nO+8ne+8nu+8n++8oO+8oe+8ou+8o++8pO+8pe+8pu+8p++8qO+8qe+8qu+8q++8rO+8re+8ru+8r++8sO+8se+8su+8s++8tO+8te+8tu+8t++8uO+8ue+8uu+8u++8vO+8ve+8vu+8v++9gO+9ge+9gu+9g++9hO+9he+9hu+9h++9iO+9ie+9iu+9i++9jO+9je+9ju+9j++9kO+9ke+9ku+9k++9lO+9le+9lu+9l++9mO+9me+9mu+9m++9nO+9ne+/o++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTYzXS5sZW5ndGg7ICsraikgaWYoRFsxNjNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTYzXVtqXV0gPSA0MTcyOCArIGo7IGRbNDE3MjggKyBqXSA9IERbMTYzXVtqXTt9XG5EWzE2NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veOBgeOBguOBg+OBhOOBheOBhuOBh+OBiOOBieOBiuOBi+OBjOOBjeOBjuOBj+OBkOOBkeOBkuOBk+OBlOOBleOBluOBl+OBmOOBmeOBmuOBm+OBnOOBneOBnuOBn+OBoOOBoeOBouOBo+OBpOOBpeOBpuOBp+OBqOOBqeOBquOBq+OBrOOBreOBruOBr+OBsOOBseOBsuOBs+OBtOOBteOBtuOBt+OBuOOBueOBuuOBu+OBvOOBveOBvuOBv+OCgOOCgeOCguOCg+OChOOCheOChuOCh+OCiOOCieOCiuOCi+OCjOOCjeOCjuOCj+OCkOOCkeOCkuOCk++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY0XS5sZW5ndGg7ICsraikgaWYoRFsxNjRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY0XVtqXV0gPSA0MTk4NCArIGo7IGRbNDE5ODQgKyBqXSA9IERbMTY0XVtqXTt9XG5EWzE2NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veOCoeOCouOCo+OCpOOCpeOCpuOCp+OCqOOCqeOCquOCq+OCrOOCreOCruOCr+OCsOOCseOCsuOCs+OCtOOCteOCtuOCt+OCuOOCueOCuuOCu+OCvOOCveOCvuOCv+ODgOODgeODguODg+ODhOODheODhuODh+ODiOODieODiuODi+ODjOODjeODjuODj+ODkOODkeODkuODk+ODlOODleODluODl+ODmOODmeODmuODm+ODnOODneODnuODn+ODoOODoeODouODo+ODpOODpeODpuODp+ODqOODqeODquODq+ODrOODreODruODr+ODsOODseODsuODs+ODtOODteODtu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY1XS5sZW5ndGg7ICsraikgaWYoRFsxNjVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY1XVtqXV0gPSA0MjI0MCArIGo7IGRbNDIyNDAgKyBqXSA9IERbMTY1XVtqXTt9XG5EWzE2Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vc6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vc6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPg8+Ez4XPhs+Hz4jPie+/ve+/ve+/ve+/ve+/ve+/ve+/ve+4te+4tu+4ue+4uu+4v++5gO+4ve+4vu+5ge+5gu+5g++5hO+/ve+/ve+4u++4vO+4t++4uO+4se+/ve+4s++4tO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY2XS5sZW5ndGg7ICsraikgaWYoRFsxNjZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY2XVtqXV0gPSA0MjQ5NiArIGo7IGRbNDI0OTYgKyBqXSA9IERbMTY2XVtqXTt9XG5EWzE2N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vdCQ0JHQktCT0JTQldCB0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vdCw0LHQstCz0LTQtdGR0LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY3XS5sZW5ndGg7ICsraikgaWYoRFsxNjddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY3XVtqXV0gPSA0Mjc1MiArIGo7IGRbNDI3NTIgKyBqXSA9IERbMTY3XVtqXTt9XG5EWzE2OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vcuKy4vLmeKAk+KAleKApeKAteKEheKEieKGluKGl+KGmOKGmeKIleKIn+KIo+KJkuKJpuKJp+KKv+KVkOKVkeKVkuKVk+KVlOKVleKVluKVl+KVmOKVmeKVmuKVm+KVnOKVneKVnuKVn+KVoOKVoeKVouKVo+KVpOKVpeKVpuKVp+KVqOKVqeKVquKVq+KVrOKVreKVruKVr+KVsOKVseKVsuKVs+KWgeKWguKWg+KWhOKWheKWhuKWh++/veKWiOKWieKWiuKWi+KWjOKWjeKWjuKWj+KWk+KWlOKWleKWvOKWveKXouKXo+KXpOKXpeKYieKKleOAkuOAneOAnu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vcSBw6HHjsOgxJPDqcSbw6jEq8Otx5DDrMWNw7PHksOyxavDuseUw7nHlseYx5rHnMO8w6rJke+/vcWExYjvv73Joe+/ve+/ve+/ve+/veOEheOEhuOEh+OEiOOEieOEiuOEi+OEjOOEjeOEjuOEj+OEkOOEkeOEkuOEk+OElOOEleOEluOEl+OEmOOEmeOEmuOEm+OEnOOEneOEnuOEn+OEoOOEoeOEouOEo+OEpOOEpeOEpuOEp+OEqOOEqe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY4XS5sZW5ndGg7ICsraikgaWYoRFsxNjhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY4XVtqXV0gPSA0MzAwOCArIGo7IGRbNDMwMDggKyBqXSA9IERbMTY4XVtqXTt9XG5EWzE2OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veOAoeOAouOAo+OApOOApeOApuOAp+OAqOOAqeOKo+OOjuOOj+OOnOOOneOOnuOOoeOPhOOPjuOPkeOPkuOPle+4sO+/ou+/pO+/veKEoeOIse+/veKAkO+/ve+/ve+/veODvOOCm+OCnOODveODvuOAhuOCneOCnu+5ie+5iu+5i++5jO+5je+5ju+5j++5kO+5ke+5ku+5lO+5le+5lu+5l++5me+5mu+5m++5nO+5ne+5nu+5n++5oO+5oe+/ve+5ou+5o++5pO+5pe+5pu+5qO+5qe+5qu+5q++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veOAh++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKUgOKUgeKUguKUg+KUhOKUheKUhuKUh+KUiOKUieKUiuKUi+KUjOKUjeKUjuKUj+KUkOKUkeKUkuKUk+KUlOKUleKUluKUl+KUmOKUmeKUmuKUm+KUnOKUneKUnuKUn+KUoOKUoeKUouKUo+KUpOKUpeKUpuKUp+KUqOKUqeKUquKUq+KUrOKUreKUruKUr+KUsOKUseKUsuKUs+KUtOKUteKUtuKUt+KUuOKUueKUuuKUu+KUvOKUveKUvuKUv+KVgOKVgeKVguKVg+KVhOKVheKVhuKVh+KViOKVieKViuKVi++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY5XS5sZW5ndGg7ICsraikgaWYoRFsxNjldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY5XVtqXV0gPSA0MzI2NCArIGo7IGRbNDMyNjQgKyBqXSA9IERbMTY5XVtqXTt9XG5EWzE3MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeLnOeLneeLn+eLoueLo+eLpOeLpeeLpueLp+eLqueLq+eLteeLtueLueeLveeLvueLv+eMgOeMgueMhOeMheeMhueMh+eMiOeMieeMi+eMjOeMjeeMj+eMkOeMkeeMkueMlOeMmOeMmeeMmueMn+eMoOeMo+eMpOeMpueMp+eMqOeMreeMr+eMsOeMsueMs+eMteeMtueMuueMu+eMvOeMveeNgOeNgeeNgueNg+eNhOeNheeNhueNh+eNiO+/veeNieeNiueNi+eNjOeNjueNj+eNkeeNk+eNlOeNleeNlueNmOeNmeeNmueNm+eNnOeNneeNnueNn+eNoeeNoueNo+eNpOeNpeeNpueNp+eNqOeNqeeNqueNq+eNrueNsOeNse+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTcwXS5sZW5ndGg7ICsraikgaWYoRFsxNzBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTcwXVtqXV0gPSA0MzUyMCArIGo7IGRbNDM1MjAgKyBqXSA9IERbMTcwXVtqXTt9XG5EWzE3MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeNsueNs+eNtOeNteeNtueNt+eNuOeNueeNuueNu+eNvOeNveeNv+eOgOeOgeeOgueOg+eOheeOhueOiOeOiueOjOeOjeeOj+eOkOeOkueOk+eOlOeOleeOl+eOmOeOmeeOmueOnOeOneeOnueOoOeOoeeOo+eOpOeOpeeOpueOp+eOqOeOqueOrOeOreeOseeOtOeOteeOtueOuOeOueeOvOeOveeOvueOv+ePgeePg+ePhOePheePhuePh++/veePi+ePjOePjuePkuePk+ePlOePleePluePl+ePmOePmuePm+ePnOePneePn+ePoeePouePo+ePpOePpuePqOePquePq+ePrOePruePr+ePsOePseePs+ePtOePteePtuePt++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTcxXS5sZW5ndGg7ICsraikgaWYoRFsxNzFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTcxXVtqXV0gPSA0Mzc3NiArIGo7IGRbNDM3NzYgKyBqXSA9IERbMTcxXVtqXTt9XG5EWzE3Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veePuOePueePuuePu+ePvOePveePvuePv+eQgOeQgeeQgueQhOeQh+eQiOeQi+eQjOeQjeeQjueQkeeQkueQk+eQlOeQleeQlueQl+eQmOeQmeeQnOeQneeQnueQn+eQoOeQoeeQo+eQpOeQp+eQqeeQq+eQreeQr+eQseeQsueQt+eQuOeQueeQuueQu+eQveeQvueQv+eRgOeRgueRg+eRhOeRheeRhueRh+eRiOeRieeRiueRi+eRjOeRje+/veeRjueRj+eRkOeRkeeRkueRk+eRlOeRlueRmOeRneeRoOeRoeeRoueRo+eRpOeRpeeRpueRp+eRqOeRqeeRqueRq+eRrOeRrueRr+eRseeRsueRs+eRtOeRteeRuOeRueeRuu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTcyXS5sZW5ndGg7ICsraikgaWYoRFsxNzJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTcyXVtqXV0gPSA0NDAzMiArIGo7IGRbNDQwMzIgKyBqXSA9IERbMTcyXVtqXTt9XG5EWzE3M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeRu+eRvOeRveeRv+eSgueShOeSheeShueSiOeSieeSiueSjOeSjeeSj+eSkeeSkueSk+eSlOeSleeSlueSl+eSmOeSmeeSmueSm+eSneeSn+eSoOeSoeeSoueSo+eSpOeSpeeSpueSqueSq+eSrOeSreeSrueSr+eSsOeSseeSsueSs+eStOeSteeStueSt+eSuOeSueeSu+eSvOeSveeSvueSv+eTgOeTgeeTgueTg+eThOeTheeThueTh++/veeTiOeTieeTiueTi+eTjOeTjeeTjueTj+eTkOeTkeeTk+eTlOeTleeTlueTl+eTmOeTmeeTmueTm+eTneeTn+eToeeTpeeTp+eTqOeTqeeTqueTq+eTrOeTreeTsOeTseeTsu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTczXS5sZW5ndGg7ICsraikgaWYoRFsxNzNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTczXVtqXV0gPSA0NDI4OCArIGo7IGRbNDQyODggKyBqXSA9IERbMTczXVtqXTt9XG5EWzE3NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeTs+eTteeTuOeTueeTuueTu+eTvOeTveeTvueUgOeUgeeUgueUg+eUheeUhueUh+eUiOeUieeUiueUi+eUjOeUjueUkOeUkueUlOeUleeUlueUl+eUm+eUneeUnueUoOeUoeeUoueUo+eUpOeUpueUp+eUqueUrueUtOeUtueUueeUvOeUveeUv+eVgeeVgueVg+eVhOeVhueVh+eVieeViueVjeeVkOeVkeeVkueVk+eVleeVlueVl+eVmO+/veeVneeVnueVn+eVoOeVoeeVoueVo+eVpOeVp+eVqOeVqeeVq+eVrOeVreeVrueVr+eVsOeVseeVs+eVteeVtueVt+eVuueVu+eVvOeVveeVvueWgOeWgeeWgueWhOeWheeWh++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc0XS5sZW5ndGg7ICsraikgaWYoRFsxNzRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc0XVtqXV0gPSA0NDU0NCArIGo7IGRbNDQ1NDQgKyBqXSA9IERbMTc0XVtqXTt9XG5EWzE3NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeWiOeWieeWiueWjOeWjeeWjueWkOeWk+eWleeWmOeWm+eWnOeWnueWoueWpueWp+eWqOeWqeeWqueWreeWtueWt+eWuueWu+eWv+eXgOeXgeeXhueXi+eXjOeXjueXj+eXkOeXkeeXk+eXl+eXmeeXmueXnOeXneeXn+eXoOeXoeeXpeeXqeeXrOeXreeXrueXr+eXsueXs+eXteeXtueXt+eXuOeXuueXu+eXveeXvueYgueYhOeYhueYh++/veeYiOeYieeYi+eYjeeYjueYj+eYkeeYkueYk+eYlOeYlueYmueYnOeYneeYnueYoeeYo+eYp+eYqOeYrOeYrueYr+eYseeYsueYtueYt+eYueeYuueYu+eYveeZgeeZgueZhO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc1XS5sZW5ndGg7ICsraikgaWYoRFsxNzVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc1XVtqXV0gPSA0NDgwMCArIGo7IGRbNDQ4MDAgKyBqXSA9IERbMTc1XVtqXTt9XG5EWzE3Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeZheeZhueZh+eZiOeZieeZiueZi+eZjueZj+eZkOeZkeeZkueZk+eZleeZl+eZmOeZmeeZmueZm+eZneeZn+eZoOeZoeeZoueZpOeZpeeZpueZp+eZqOeZqeeZqueZrOeZreeZrueZsOeZseeZsueZs+eZtOeZteeZtueZt+eZueeZuueZvOeZv+eagOeageeag+eaheeaieeaiueajOeajeeaj+eakOeakuealOealeeal+eamOeamueam++/veeanOeaneeanuean+eaoOeaoeeaoueao+eapeeapueap+eaqOeaqeeaqueaq+earOeareear+easOeas+eateeatueat+eauOeaueeauueau+eavOeaveeavuebgOebgeebg+WViumYv+Wfg+aMqOWTjuWUieWTgOeakeeZjOiUvOefruiJvueijeeIsemamOmejeawqOWuieS/uuaMieaal+WyuOiDuuahiOiCruaYguebjuWHueaVlueGrOe/seiihOWCsuWlpeaHiua+s+iKreaNjOaJkuWPreWQp+eshuWFq+eWpOW3tOaLlOi3i+mdtuaKiuiAmeWdnemcuOe9oueIuOeZveafj+eZvuaRhuS9sOi0peaLnOeol+aWkeePreaQrOaJs+iIrOmigeadv+eJiOaJruaLjOS8tOeTo+WNiuWKnue7iumCpuW4ruaihuamnOiGgOe7keajkuejheiajOmVkeWCjeiwpOiLnuiDnuWMheikkuWJpe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc2XS5sZW5ndGg7ICsraikgaWYoRFsxNzZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc2XVtqXV0gPSA0NTA1NiArIGo7IGRbNDUwNTYgKyBqXSA9IERbMTc2XVtqXTt9XG5EWzE3N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veebhOebh+ebieebi+ebjOebk+ebleebmeebmuebnOebneebnueboOeboeebouebo+ebpOebpuebp+ebqOebqeebquebq+ebrOebreebsOebs+ebteebtuebt+ebuuebu+ebveebv+ecgOecguecg+echeechueciuecjOecjuecj+eckOeckeeckueck+eclOecleecluecl+ecmOecm+ecnOecneecnuecoeeco+ecpOecpeecp+ecquecq++/veecrOecruecsOecseecsuecs+ectOecueecu+ecveecvuecv+edguedhOedheedhuediOedieediuedi+edjOedjeedjuedj+edkuedk+edlOedleedluedl+edmOedmeednOiWhOmbueS/neWgoemlseWuneaKseaKpeaatOixuemyjeeIhuadr+eikeaCsuWNkeWMl+i+iOiDjOi0nemSoeWAjeeLiOWkh+aDq+eEmeiiq+WllOiLr+acrOesqOW0qee7t+eUreaztei5pui/uOmAvOm8u+avlOmEmeeslOW9vOeip+iTluiUveavleavmeavluW4geW6h+eXuemXreaVneW8iuW/hei+n+WjgeiHgumBv+mZm+merei+uee8lui0rOaJgeS+v+WPmOWNnui+qOi+qei+q+mBjeagh+W9quiGmOihqOmzluaGi+WIq+eYquW9rOaWjOa/kua7qOWuvuaRiOWFteWGsOafhOS4meeniemlvOeCs++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc3XS5sZW5ndGg7ICsraikgaWYoRFsxNzddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc3XVtqXV0gPSA0NTMxMiArIGo7IGRbNDUzMTIgKyBqXSA9IERbMTc3XVtqXTt9XG5EWzE3OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veedneednuedn+edoOedpOedp+edqeedquedreedruedr+edsOedseedsueds+edtOedteedtuedt+eduOeduuedu+edvOeegeeegueeg+eehueeh+eeiOeeieeeiueei+eej+eekOeek+eelOeeleeelueel+eemOeemeeemueem+eenOeeneeenueeoeeeo+eepOeepueeqOeeq+eereeerueer+eeseeesueetOeetueet+eeuOeeueeeuu+/veeevOeevuefgOefgeefguefg+efhOefheefhuefh+efiOefieefiuefi+efjOefjuefj+efkOefkeefkuefk+eflOefleefluefmOefmeefmuefneefnuefn+efoOefoeefpOeXheW5tueOu+iPoOaSreaLqOmSteazouWNmuWLg+aQj+mTgueulOS8r+W4m+iItuiEluiGiua4pOaziumps+aNleWNnOWTuuihpeWfoOS4jeW4g+atpeewv+mDqOaAluaTpueMnOijgeadkOaJjei0ouedrOi4qemHh+W9qeiPnOiUoemkkOWPguialeaui+aDreaDqOeBv+iLjeiIseS7k+ayp+iXj+aTjeezmeanveabueiNieWOleetluS+p+WGjOa1i+Wxgui5reaPkuWPieiMrOiMtuafpeeitOaQveWvn+WylOW3ruivp+aLhuaftOixuuaQgOaOuuidiemmi+iwl+e8oOmTsuS6p+mYkOmipOaYjOeMlu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc4XS5sZW5ndGg7ICsraikgaWYoRFsxNzhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc4XVtqXV0gPSA0NTU2OCArIGo7IGRbNDU1NjggKyBqXSA9IERbMTc4XVtqXTt9XG5EWzE3OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veefpuefqOefquefr+efsOefseefsueftOefteeft+efueefuuefu+efvOegg+eghOegheeghuegh+egiOegiuegi+egjuegj+egkOegk+egleegmeegm+egnuegoOegoeegouegpOegqOegquegq+egruegr+egseegsuegs+egteegtuegveegv+ehgeehguehg+ehhOehhuehiOehieehiuehi+ehjeehj+ehkeehk+ehlOehmOehmeehmu+/veehm+ehnOehnuehn+ehoOehoeehoueho+ehpOehpeehpuehp+ehqOehqeehr+ehsOehseehsuehs+ehtOehteehtuehuOehueehuuehu+ehveehvuehv+eigOeigeeigueig+WcuuWwneW4uOmVv+WBv+iCoOWOguaVnueVheWUseWAoei2heaKhOmSnuacneWYsua9ruW3ouWQteeCkui9puaJr+aSpOaOo+W9u+a+iOmDtOiHo+i+sOWwmOaZqOW/seayiemZiOi2geihrOaSkeensOWfjuapmeaIkOWRiOS5mOeoi+aDqea+hOivmuaJv+mAnumqi+enpOWQg+eXtOaMgeWMmeaxoOi/n+W8m+mpsOiAu+m9v+S+iOWwuui1pOe/heaWpeeCveWFheWGsuiZq+W0h+WuoOaKvemFrOeVtOi4jOeooOaEgeetueS7h+e7uOeeheS4keiHreWIneWHuuapseWOqOi6h+mUhOmbj+a7gemZpOalmu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc5XS5sZW5ndGg7ICsraikgaWYoRFsxNzldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc5XVtqXV0gPSA0NTgyNCArIGo7IGRbNDU4MjQgKyBqXSA9IERbMTc5XVtqXTt9XG5EWzE4MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeihOeiheeihueiiOeiiueii+eij+eikOeikueilOeileeilueimeeineeinueioOeioueipOeipueiqOeiqeeiqueiq+eirOeireeirueir+eiteeitueit+eiuOeiuueiu+eivOeiveeiv+ejgOejguejg+ejhOejhuejh+ejiOejjOejjeejjuejj+ejkeejkuejk+ejluejl+ejmOejmuejm+ejnOejneejnuejn+ejoOejoeejouejo++/veejpOejpeejpuejp+ejqeejquejq+ejreejruejr+ejsOejseejs+ejteejtuejuOejueeju+ejvOejveejvuejv+ekgOekguekg+ekhOekhuekh+ekiOekieekiueki+ekjOehgOWCqOefl+aQkOinpuWkhOaPo+W3neepv+akveS8oOiIueWWmOS4sueWrueql+W5ouW6iumXr+WIm+WQueeCiuaNtumUpOWeguaYpeakv+mGh+WUh+a3s+e6r+igouaIs+e7sOeWteiMqOejgembjOi+nuaFiOeTt+ivjeatpOWIuui1kOasoeiBquiRseWbseWMhuS7juS4m+WHkeeyl+mGi+ewh+S/g+i5v+evoeeqnOaRp+W0lOWCrOiEhueYgeeyuea3rOe/oOadkeWtmOWvuOeji+aSruaQk+aOquaMq+mUmeaQrei+vuetlOeYqeaJk+Wkp+WRhuatueWCo+aItOW4puauhuS7o+i0t+iii+W+hemAru+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgwXS5sZW5ndGg7ICsraikgaWYoRFsxODBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgwXVtqXV0gPSA0NjA4MCArIGo7IGRbNDYwODAgKyBqXSA9IERbMTgwXVtqXTt9XG5EWzE4MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veekjeekjuekj+ekkOekkeekkueklOekleekluekl+ekmOekmeekmuekm+eknOekneekn+ekoOekoeekoueko+ekpeekpuekp+ekqOekqeekquekq+ekrOekreekruekr+eksOekseeksueks+ekteektuekt+ekuOekueekveekv+elguelg+elhOelheelh+eliueli+eljOeljeeljuelj+elkOelkeelkuellOelleelmOelmeeloeelo++/veelpOelpuelqeelquelq+elrOelruelsOelseelsuels+eltOelteeltuelueelu+elvOelveelvuelv+emguemg+emhuemh+emiOemieemi+emjOemjeemjuemkOemkeemkuaAoOiAveaLheS4ueWNlemDuOaOuOiDhuaXpuawruS9huaDrua3oeivnuW8ueibi+W9k+aMoeWFmuiNoeaho+WIgOaNo+i5iOWAkuWym+elt+WvvOWIsOeou+aCvOmBk+ebl+W+t+W+l+eahOi5rOeBr+eZu+etieeequWHs+mCk+WgpOS9jua7tOi/quaVjOesm+eLhOa2pOe/n+WroeaKteW6leWcsOiSguesrOW4neW8n+mAkue8lOmioOaOgua7h+eimOeCueWFuOmdm+Weq+eUteS9g+eUuOW6l+aDpuWloOa3gOauv+eiieWPvOmbleWHi+WIgeaOieWQiumSk+iwg+i3jOeIueein+idtui/reiwjeWPoO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgxXS5sZW5ndGg7ICsraikgaWYoRFsxODFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgxXVtqXV0gPSA0NjMzNiArIGo7IGRbNDYzMzYgKyBqXSA9IERbMTgxXVtqXTt9XG5EWzE4Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veemk+emlOemleemlueml+emmOemmeemm+emnOemneemnuemn+emoOemoeemouemo+empOempeempuemqOemqeemquemq+emrOemreemruemr+emsOemseemsuemtOemteemtuemt+emuOemvOemv+enguenhOenheenh+eniOeniuenjOenjuenj+enkOenk+enlOenluenl+enmeenmuenm+ennOenneennuenoOenoeenouenpeenqOenqu+/veenrOenruenseensuens+entOenteentuent+enueenuuenvOenvuenv+eogeeohOeoheeoh+eoiOeoieeoiueojOeoj+eokOeokeeokueok+eoleeolueomOeomeeom+eonOS4geebr+WPrumSiemhtum8jumUreWumuiuouS4ouS4nOWGrOiRo+aHguWKqOagi+S+l+aBq+WGu+a0nuWFnOaKluaWl+mZoeixhumAl+eXmOmDveedo+avkueKiueLrOivu+Wgteeduei1jOadnOmVgOiCmuW6pua4oeWmkuerr+efremUu+auteaWree8juWghuWFkemYn+WvueWiqeWQqOi5suaVpumhv+WbpOmSneebvumBgeaOh+WThuWkmuWkuuWem+i6suactei3uuiIteWJgeaDsOWgleibvuWzqOm5heS/hOmineiuueWopeaBtuWOhOaJvOmBj+mEgumlv+aBqeiAjOWEv+iAs+WwlOmltea0seS6jO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgyXS5sZW5ndGg7ICsraikgaWYoRFsxODJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgyXVtqXV0gPSA0NjU5MiArIGo7IGRbNDY1OTIgKyBqXSA9IERbMTgyXVtqXTt9XG5EWzE4M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeoneeon+eooeeooueopOeopeeopueop+eoqOeoqeeoqueoq+eorOeoreeorueor+eosOeoseeosueotOeoteeotueouOeouueovuepgOepgeepguepg+ephOepheeph+epiOepieepiuepi+epjOepjeepjuepj+epkOepkuepk+eplOepleepluepmOepmeepmuepm+epnOepneepnuepn+epoOepoeepouepo+eppOeppeeppuepp+epqO+/veepqeepquepq+eprOepreepruepr+epseepsueps+epteepu+epvOepveepvueqgueqheeqh+eqieeqiueqi+eqjOeqjueqj+eqkOeqk+eqlOeqmeeqmueqm+eqnueqoeeqoui0sOWPkee9muetj+S8kOS5j+mYgOazleePkOiXqeW4hueVque/u+aoiuefvumSkue5geWHoeeDpuWPjei/lOiMg+i0qeeKr+mlreazm+WdiuiKs+aWueiCquaIv+mYsuWmqOS7v+iuv+e6uuaUvuiPsumdnuWVoemjnuiCpeWMquivveWQoOiCuuW6n+ayuOi0ueiKrOmFmuWQqeawm+WIhue6t+Wdn+eEmuaxvueyieWli+S7veW/v+aEpOeyquS4sOWwgeaeq+icguWzsOmUi+mjjueWr+eDvemAouWGr+e8neiuveWlieWHpOS9m+WQpuWkq+aVt+iCpOWtteaJtuaLgui+kOW5heawn+espuS8j+S/mOacje+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgzXS5sZW5ndGg7ICsraikgaWYoRFsxODNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgzXVtqXV0gPSA0Njg0OCArIGo7IGRbNDY4NDggKyBqXSA9IERbMTgzXVtqXTt9XG5EWzE4NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeqo+eqpOeqp+eqqeeqqueqq+eqrueqr+eqsOeqseeqsueqtOeqteeqtueqt+equOequeequuequ+eqvOeqveeqvuergOergeerguerg+erhOerheerhuerh+eriOerieeriuerjOerjeerjuerj+erkOerkeerkuerk+erlOerleerl+ermOermuerm+ernOerneeroeerouerpOerp+erqOerqeerquerq+errOerruersOerseersuers++/veertOerteertuert+eruOeru+ervOervuesgOesgeesguesheesh+esieesjOesjeesjueskOeskuesk+esluesl+esmOesmuesnOesneesn+esoeesoueso+esp+esqeesrea1rua2quemj+iiseW8l+eUq+aKmui+heS/r+mHnOaWp+iEr+iFkeW6nOiFkOi1tOWJr+imhui1i+WkjeWCheS7mOmYnOeItuiFuei0n+WvjOiuo+mZhOWmh+e8muWSkOWZtuWYjuivpeaUueamgumSmeeblua6ieW5sueUmOadhuafkeerv+iCnei1tuaEn+enhuaVoui1o+WGiOWImumSoue8uOiCm+e6suWyl+a4r+adoOevmeeai+mrmOiGj+e+lOezleaQnumVkOeov+WRiuWTpeatjOaQgeaIiOm4veiDs+eWmeWJsumdqeiRm+agvOibpOmYgemalOmTrOS4quWQhOe7meaguei3n+iAleabtOW6mue+ue+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg0XS5sZW5ndGg7ICsraikgaWYoRFsxODRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg0XVtqXV0gPSA0NzEwNCArIGo7IGRbNDcxMDQgKyBqXSA9IERbMTg0XVtqXTt9XG5EWzE4NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veesr+essOessuestOesteestuest+esueesu+esveesv+etgOetgeetguetg+ethOethuetiOetiuetjeetjuetk+etleetl+etmeetnOetnuetn+etoeeto+etpOetpeetpuetp+etqOetqeetquetq+etrOetreetr+etsOets+ettOettuetuOetuuetvOetveetv+eugeeugueug+euhOeuhueuh+euiOeuieeuiueui+eujOeujueuj++/veeukeeukueuk+eulueumOeumeeumueum+eunueun+euoOeuo+eupOeupeeurueur+eusOeusueus+euteeutueut+euueeuuueuu+euvOeuveeuvueuv+evgOevguevg+evhOWfguiAv+ail+W3peaUu+WKn+aBrem+muS+m+i6rOWFrOWuq+W8k+W3qeaxnuaLsei0oeWFsemSqeWLvuayn+iLn+eLl+WeouaehOi0reWkn+i+nOiPh+WSleeujeS8sOayveWtpOWnkem8k+WPpOibiumqqOiwt+iCoeaVhemhvuWbuumbh+WIrueTnOWJkOWvoeaMguikguS5luaLkOaAquajuuWFs+WumOWGoOingueuoemmhue9kOaDr+eBjOi0r+WFieW5v+mAm+eRsOinhOWcreehheW9kum+n+mXuui9qOmsvOivoeeZuOahguafnOi3qui0teWIvei+iua7muajjemUhemDreWbveaenOijuei/h+WTiO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg1XS5sZW5ndGg7ICsraikgaWYoRFsxODVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg1XVtqXV0gPSA0NzM2MCArIGo7IGRbNDczNjAgKyBqXSA9IERbMTg1XVtqXTt9XG5EWzE4Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veevheeviOevieeviuevi+evjeevjuevj+evkOevkuevlOevleevluevl+evmOevm+evnOevnuevn+evoOevouevo+evpOevp+evqOevqeevq+evrOevreevr+evsOevsuevs+evtOevteevtuevuOevueevuuevu+evveevv+ewgOewgeewguewg+ewhOewheewhuewiOewieewiuewjeewjuewkOewkeewkuewk+ewlOewleewl+ewmOewme+/veewmuewm+ewnOewneewnuewoOewoeewouewo+ewpOewpeewqOewqeewq+ewrOewreewruewr+ewsOewseewsuews+ewtOewteewtuewt+ewueewuuewu+ewvOewveewvuexgumquOWtqea1t+awpuS6peWus+mqh+mFo+aGqOmCr+mfqeWQq+a2teWvkuWHveWWiue9lee/sOaSvOaNjeaXseaGvuaCjeeEiuaxl+axieWkr+adreiIquWjleWajuixquavq+mDneWlveiAl+WPt+a1qeWRteWWneiNt+iPj+aguOemvuWSjOS9leWQiOebkuiyiemYguays+a2uOi1q+ikkOm5pOi0uuWYv+m7keeXleW+iOeLoOaBqOWTvOS6qOaoquihoeaBkui9sOWThOeDmOiZuem4v+a0quWuj+W8mOe6ouWWieS+r+eMtOWQvOWOmuWAmeWQjuWRvOS5juW/veeRmuWjtuiRq+iDoeidtOeLkOeziua5lu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg2XS5sZW5ndGg7ICsraikgaWYoRFsxODZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg2XVtqXV0gPSA0NzYxNiArIGo7IGRbNDc2MTYgKyBqXSA9IERbMTg2XVtqXTt9XG5EWzE4N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veexg+exhOexheexhuexh+exiOexieexiuexi+exjOexjuexj+exkOexkeexkuexk+exlOexleexluexl+exmOexmeexmuexm+exnOexneexnuexn+exoOexoeexouexo+expOexpeexpuexp+exqOexqeexquexq+exrOexreexruexr+exsOexseexsuexteextuext+exuOexueexuuexvuexv+eygOeygeeygueyg+eyhOeyheeyhueyh++/veeyiOeyiueyi+eyjOeyjeeyjueyj+eykOeyk+eylOeylueymeeymueym+eyoOeyoeeyo+eypueyp+eyqOeyqeeyq+eyrOeyreeyr+eysOeytOeyteeytueyt+eyuOeyuueyu+W8p+iZjuWUrOaKpOS6kuayquaIt+iKseWTl+WNjueMvua7keeUu+WIkuWMluivneankOW+iuaAgOa3ruWdj+asoueOr+ahk+i/mOe8k+aNouaCo+WUpOeXquixoueElea2o+WupuW5u+iNkuaFjOm7hOejuuidl+ewp+eah+WHsOaDtueFjOaZg+W5jOaBjeiwjueBsOaMpei+ieW+veaBouiblOWbnuavgeaClOaFp+WNieaDoOaZpui0v+enveS8mueDqeaxh+ius+ivsue7mOiNpOaYj+Wpmumtgua1kea3t+ixgea0u+S8meeBq+iOt+aIluaDkemcjei0p+eluOWHu+WcvuWfuuacuueVuOeoveenr+eule+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg3XS5sZW5ndGg7ICsraikgaWYoRFsxODddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg3XVtqXV0gPSA0Nzg3MiArIGo7IGRbNDc4NzIgKyBqXSA9IERbMTg3XVtqXTt9XG5EWzE4OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeyv+ezgOezguezg+ezhOezhuezieezi+ezjuezj+ezkOezkeezkuezk+ezlOezmOezmuezm+ezneeznuezoeezouezo+ezpOezpeezpuezp+ezqeezquezq+ezrOezreezruezsOezseezsuezs+eztOezteeztuezt+ezueezuuezvOezveezvuezv+e0gOe0gee0gue0g+e0hOe0hee0hue0h+e0iOe0iee0i+e0jOe0jee0jue0j+e0kO+/vee0kee0kue0k+e0lOe0lee0lue0l+e0mOe0mee0mue0m+e0nOe0nee0nue0n+e0oee0o+e0pOe0pee0pue0qOe0qee0que0rOe0ree0rue0sOe0see0sue0s+e0tOe0tee0tuiCjOmlpei/uea/gOiupem4oeWnrOe7qee8ieWQieaegeajmOi+keexjembhuWPiuaApeeWvuaxsuWNs+Wriee6p+aMpOWHoOiEiuW3seiTn+aKgOWGgOWto+S8juelreWJguaCuOa1juWvhOWvguiuoeiusOaXouW/jOmZheWmk+e7p+e6quWYieaet+WkueS9s+WutuWKoOiNmumiiui0vueUsumSvuWBh+eovOS7t+aetumpvuWrgeatvOebkeWdmuWwluesuumXtOeFjuWFvOiCqeiJsOWluOe8hOiMp+ajgOafrOeiseeht+aLo+aNoeeugOS/reWJquWHj+iNkOanm+mJtOi3tei0seingemUrueureS7tu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg4XS5sZW5ndGg7ICsraikgaWYoRFsxODhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg4XVtqXV0gPSA0ODEyOCArIGo7IGRbNDgxMjggKyBqXSA9IERbMTg4XVtqXTt9XG5EWzE4OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee0t+e0uOe0uee0uue0u+e0vOe0vee0vue0v+e1gOe1gee1gue1g+e1hOe1hee1hue1h+e1iOe1iee1iue1i+e1jOe1jee1jue1j+e1kOe1kee1kue1k+e1lOe1lee1lue1l+e1mOe1mee1mue1m+e1nOe1nee1nue1n+e1oOe1oee1oue1o+e1pOe1pee1pue1p+e1qOe1qee1que1q+e1rOe1ree1r+e1sOe1see1sue1s+e1tOe1tee1tu+/vee1uOe1uee1uue1u+e1vOe1vee1vue1v+e2gOe2gee2gue2g+e2hOe2hee2hue2h+e2iOe2iee2iue2i+e2jOe2jee2jue2j+e2kOe2kee2kue2k+e2lOe2lee2lue2l+e2mOWBpeiIsOWJkemlr+a4kOa6hea2p+W7uuWDteWnnOWwhua1huaxn+eWhuiSi+ahqOWlluiusuWMoOmFsemZjeiVieakkuekgeeEpuiDtuS6pOmDiua1h+mqhOWoh+WavOaQhemTsOefq+S+peiEmueLoeinkumluue8tOe7nuWJv+aVmemFtei9v+i+g+WPq+eqluaPreaOpeeahuenuOihl+mYtuaIquWKq+iKguahlOadsOaNt+edq+errea0gee7k+ino+WnkOaIkuiXieiKpeeVjOWAn+S7i+eWpeivq+WxiuW3vueti+aWpOmHkeS7iua0peiln+e0p+mUpuS7heiwqOi/m+mds+aZi+emgei/keeDrOa1uO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg5XS5sZW5ndGg7ICsraikgaWYoRFsxODldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg5XVtqXV0gPSA0ODM4NCArIGo7IGRbNDgzODQgKyBqXSA9IERbMTg5XVtqXTt9XG5EWzE5MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee2mee2mue2m+e2nOe2nee2nue2n+e2oOe2oee2oue2o+e2pOe2pee2p+e2qOe2qee2que2q+e2rOe2ree2r+e2sOe2see2sue2s+e2tOe2tee2tue2t+e2uOe2uee2uue2u+e2vOe2vee2vue2v+e3gOe3gee3gue3g+e3hOe3hee3hue3h+e3iOe3iee3iue3i+e3jOe3jee3jue3j+e3kOe3kee3kue3k+e3lOe3lee3lue3l+e3mOe3me+/vee3mue3m+e3nOe3nee3nue3n+e3oOe3oee3oue3o+e3pOe3pee3pue3p+e3qOe3qee3que3q+e3rOe3ree3rue3r+e3sOe3see3sue3s+e3tOe3tee3tue3t+e3uOe3uee3uuWwveWKsuiNhuWFouiMjuedm+aZtumyuOS6rOaDiueyvueys+e7j+S6leitpuaZr+miiOmdmeWig+aVrOmVnOW+hOeXiemdluern+ernuWHgOeCr+eqmOaPqueptue6oOeOlumfreS5heeBuOS5nemFkuWOqeaVkeaXp+iHvOiIheWSjuWwseeWmumeoOaLmOeLmeeWveWxhempueiPiuWxgOWSgOefqeS4vuayruiBmuaLkuaNruW3qOWFt+i3nei4numUr+S/seWPpeaDp+eCrOWJp+aNkOm5g+Won+WApuect+WNt+e7ouaSheaUq+aKieaOmOWAlOeIteinieWGs+ivgOe7neWdh+iPjOmSp+WGm+WQm+Wzu++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkwXS5sZW5ndGg7ICsraikgaWYoRFsxOTBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkwXVtqXV0gPSA0ODY0MCArIGo7IGRbNDg2NDAgKyBqXSA9IERbMTkwXVtqXTt9XG5EWzE5MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee3u+e3vOe3vee3vue3v+e4gOe4gee4gue4g+e4hOe4hee4hue4h+e4iOe4iee4iue4i+e4jOe4jee4jue4j+e4kOe4kee4kue4k+e4lOe4lee4lue4l+e4mOe4mee4mue4m+e4nOe4nee4nue4n+e4oOe4oee4oue4o+e4pOe4pee4pue4p+e4qOe4qee4que4q+e4rOe4ree4rue4r+e4sOe4see4sue4s+e4tOe4tee4tue4t+e4uOe4ue+/vee4uue4vOe4vee4vue4v+e5gOe5gue5g+e5hOe5hee5hue5iOe5iee5iue5i+e5jOe5jee5jue5j+e5kOe5kee5kue5k+e5lOe5lee5lue5l+e5mOe5mee5mue5m+e5nOe5neS/iuero+a1mumDoemqj+WWgOWSluWNoeWSr+W8gOaPqealt+WHr+aFqOWIiuWgquWLmOWdjuegjeeci+W6t+aFt+ezoOaJm+aKl+S6oueCleiAg+aLt+eDpOmdoOWdt+iLm+afr+ajteejlemil+enkeWjs+WSs+WPr+a4tOWFi+WIu+WuouivvuiCr+WVg+WepuaBs+WdkeWQreepuuaBkOWtlOaOp+aKoOWPo+aJo+Wvh+aer+WTreeqn+iLpumFt+W6k+ijpOWkuOWeruaMjui3qOiDr+Wdl+ett+S+qeW/q+WuveasvuWMoeetkOeLguahhuefv+ectuaXt+WGteS6j+eblOWyv+eqpeiRteWljumtgeWCgO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkxXS5sZW5ndGg7ICsraikgaWYoRFsxOTFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkxXVtqXV0gPSA0ODg5NiArIGo7IGRbNDg4OTYgKyBqXSA9IERbMTkxXVtqXTt9XG5EWzE5Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee5nue5n+e5oOe5oee5oue5o+e5pOe5pee5pue5p+e5qOe5qee5que5q+e5rOe5ree5rue5r+e5sOe5see5sue5s+e5tOe5tee5tue5t+e5uOe5uee5uue5u+e5vOe5vee5vue5v+e6gOe6gee6g+e6hOe6hee6hue6h+e6iOe6iee6iue6i+e6jOe6jee6jue6j+e6kOe6kee6kue6k+e6lOe6lee6lue6l+e6mOe6mee6mue6nOe6nee6nu+/vee6rue6tOe6u+e6vOe7lue7pOe7rOe7uee8iue8kOe8nue8t+e8uee8u+e8vOe8vee8vue8v+e9gOe9gee9g+e9hue9h+e9iOe9iee9iue9i+e9jOe9jee9jue9j+e9kue9k+mmiOaEp+a6g+WdpOaYhuaNhuWbsOaLrOaJqeW7k+mYlOWeg+aLieWWh+icoeiFiui+o+WVpuiOseadpei1luiTneWpquagj+aLpuevrumYkeWFsOa+nOiwsOaPveiniOaHkue8hueDgua7peeQheamlOeLvOW7iumDjuacl+a1quaNnuWKs+eJouiAgeS9rOWnpemFqueDmea2neWLkuS5kOmbt+mVreiVvuejiue0r+WEoeWekuaTguiCi+exu+azquajsealnuWGt+WOmOaiqOeKgem7juevseeLuOemu+a8k+eQhuadjumHjOmypOekvOiOieiNlOWQj+agl+S4veWOieWKseegvuWOhuWIqeWCiOS+i+S/kO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkyXS5sZW5ndGg7ICsraikgaWYoRFsxOTJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkyXVtqXV0gPSA0OTE1MiArIGo7IGRbNDkxNTIgKyBqXSA9IERbMTkyXVtqXTt9XG5EWzE5M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee9lue9mee9m+e9nOe9nee9nue9oOe9o+e9pOe9pee9pue9p+e9q+e9rOe9ree9r+e9sOe9s+e9tee9tue9t+e9uOe9uue9u+e9vOe9vee9v+e+gOe+gue+g+e+hOe+hee+hue+h+e+iOe+iee+i+e+jee+j+e+kOe+kee+kue+k+e+lee+lue+l+e+mOe+mee+m+e+nOe+oOe+oue+o+e+pee+pue+qOe+qee+que+q+e+rOe+ree+rue+se+/vee+s+e+tOe+tee+tue+t+e+uue+u+e+vue/gOe/gue/g+e/hOe/hue/h+e/iOe/iee/i+e/jee/j+e/kOe/kee/kue/k+e/lue/l+e/mee/mue/m+e/nOe/nee/nue/oue/o+eXoueri+eykuaypematuWKm+eSg+WTqeS/qeiBlOiOsui/numVsOW7ieaAnOa2n+W4mOaVm+iEuOmTvuaBi+eCvOe7g+eyruWHieaigeeyseiJr+S4pOi+humHj+aZvuS6ruiwheaSqeiBiuWDmueWl+eHjuWvpei+vea9puS6huaSgumVo+W7luaWmeWIl+ijgueDiOWKo+eMjueQs+ael+ejt+mcluS4tOmCu+mznua3i+WHm+i1geWQneaLjueOsuiPsembtum+hOmTg+S8tue+muWHjOeBtemZteWyremihuWPpuS7pOa6nOeQieamtOehq+mmj+eVmeWImOeYpOa1geafs+WFrem+meiBi+WSmeesvOeqv++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkzXS5sZW5ndGg7ICsraikgaWYoRFsxOTNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkzXVtqXV0gPSA0OTQwOCArIGo7IGRbNDk0MDggKyBqXSA9IERbMTkzXVtqXTt9XG5EWzE5NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee/pOe/p+e/qOe/que/q+e/rOe/ree/r+e/sue/tOe/tee/tue/t+e/uOe/uee/uue/vee/vue/v+iAguiAh+iAiOiAieiAiuiAjuiAj+iAkeiAk+iAmuiAm+iAneiAnuiAn+iAoeiAo+iApOiAq+iArOiAreiAruiAr+iAsOiAsuiAtOiAueiAuuiAvOiAvuiBgOiBgeiBhOiBheiBh+iBiOiBieiBjuiBj+iBkOiBkeiBk+iBleiBluiBl++/veiBmeiBm+iBnOiBneiBnuiBn+iBoOiBoeiBouiBo+iBpOiBpeiBpuiBp+iBqOiBq+iBrOiBreiBruiBr+iBsOiBsuiBs+iBtOiBteiBtuiBt+iBuOiBueiBuuiBu+iBvOiBvemahuWehOaLoumZh+alvOWohOaQguevk+a8j+mZi+iKpuWNoumiheW6kOeCieaOs+WNpOiZj+mygem6k+eijOmcsui3r+i1gum5v+a9nuemhOW9lemZhuaIrumptOWQlemTneS+o+aXheWxpeWxoee8leiZkeawr+W+i+eOh+a7pOe7v+WzpuaMm+Wtqua7puWNteS5seaOoOeVpeaKoei9ruS8puS7keaypue6tuiuuuiQneieuue9l+mAu+mUo+euqemqoeijuOiQvea0m+mqhue7nOWmiOm6u+eOm+eggeiagumprOmqguWYm+WQl+Wfi+S5sOm6puWNlui/iOiEieeekummkuibrua7oeiUk+abvOaFoua8q++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk0XS5sZW5ndGg7ICsraikgaWYoRFsxOTRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk0XVtqXV0gPSA0OTY2NCArIGo7IGRbNDk2NjQgKyBqXSA9IERbMTk0XVtqXTt9XG5EWzE5NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiBvuiCgeiCguiCheiCiOiCiuiCjeiCjuiCj+iCkOiCkeiCkuiClOiCleiCl+iCmeiCnuiCo+iCpuiCp+iCqOiCrOiCsOiCs+iCteiCtuiCuOiCueiCu+iDheiDh+iDiOiDieiDiuiDi+iDj+iDkOiDkeiDkuiDk+iDlOiDleiDmOiDn+iDoOiDouiDo+iDpuiDruiDteiDt+iDueiDu+iDvuiDv+iEgOiEgeiEg+iEhOiEheiEh+iEiOiEi++/veiEjOiEleiEl+iEmeiEm+iEnOiEneiEn+iEoOiEoeiEouiEo+iEpOiEpeiEpuiEp+iEqOiEqeiEquiEq+iEreiEruiEsOiEs+iEtOiEteiEt+iEueiEuuiEu+iEvOiEveiEv+iwqeiKkuiMq+ebsuawk+W/meiOveeMq+iMhemUmuavm+efm+mThuWNr+iMguWGkuW4veiyjOi0uOS5iOeOq+aemuaihemFtumcieeFpOayoeecieWqkumVgeavj+e+juaYp+WvkOWmueWqmumXqOmXt+S7rOiQjOiSmeaqrOebn+mUsOeMm+aipuWtn+ecr+mGmumdoeeznOi/t+iwnOW8peexs+enmOinheazjOicnOWvhuW5guajieecoOe7teWGleWFjeWLieWoqee8hemdouiLl+aPj+eehOiXkOenkua4uuW6meWmmeiUkeeBreawkeaKv+eav+aVj+aCr+mXveaYjuien+m4o+mTreWQjeWRveiwrOaRuO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk1XS5sZW5ndGg7ICsraikgaWYoRFsxOTVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk1XVtqXV0gPSA0OTkyMCArIGo7IGRbNDk5MjAgKyBqXSA9IERbMTk1XVtqXTt9XG5EWzE5Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiFgOiFgeiFguiFg+iFhOiFheiFh+iFieiFjeiFjuiFj+iFkuiFluiFl+iFmOiFm+iFnOiFneiFnuiFn+iFoeiFouiFo+iFpOiFpuiFqOiFquiFq+iFrOiFr+iFsuiFs+iFteiFtuiFt+iFuOiGgeiGg+iGhOiGheiGhuiGh+iGieiGi+iGjOiGjeiGjuiGkOiGkuiGk+iGlOiGleiGluiGl+iGmeiGmuiGnuiGn+iGoOiGoeiGouiGpOiGpe+/veiGp+iGqeiGq+iGrOiGreiGruiGr+iGsOiGseiGsuiGtOiGteiGtuiGt+iGuOiGueiGvOiGveiGvuiGv+iHhOiHheiHh+iHiOiHieiHi+iHjeiHjuiHj+iHkOiHkeiHkuiHk+aRueiYkeaooeiGnOejqOaRqemtlOaKueacq+iOq+WiqOm7mOayq+a8oOWvnumZjOiwi+eJn+afkOaLh+eJoeS6qeWnhuavjeWik+aaruW5leWLn+aFleacqOebruedpueJp+ephuaLv+WTquWRkOmSoOmCo+WonOe6s+awluS5g+WltuiAkOWliOWNl+eUt+mavuWbiuaMoOiEkeaBvOmXuea3luWRoummgeWGheWrqeiDveWmrumck+WAquazpeWwvOaLn+S9oOWMv+iFu+mAhua6uuiUq+aLiOW5tOeivuaSteaNu+W/teWomOmFv+m4n+Wwv+aNj+iBguWtveWVrumViumVjea2heaCqOafoOeLnuWHneWuge+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk2XS5sZW5ndGg7ICsraikgaWYoRFsxOTZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk2XVtqXV0gPSA1MDE3NiArIGo7IGRbNTAxNzYgKyBqXSA9IERbMTk2XVtqXTt9XG5EWzE5N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiHlOiHleiHluiHl+iHmOiHmeiHmuiHm+iHnOiHneiHnuiHn+iHoOiHoeiHouiHpOiHpeiHpuiHqOiHqeiHq+iHruiHr+iHsOiHseiHsuiHteiHtuiHt+iHuOiHueiHuuiHveiHv+iIg+iIh+iIiOiIieiIiuiIi+iIjuiIj+iIkeiIk+iIleiIluiIl+iImOiImeiImuiIneiIoOiIpOiIpeiIpuiIp+iIqeiIruiIsuiIuuiIvOiIveiIv++/veiJgOiJgeiJguiJg+iJheiJhuiJiOiJiuiJjOiJjeiJjuiJkOiJkeiJkuiJk+iJlOiJleiJluiJl+iJmeiJm+iJnOiJneiJnuiJoOiJoeiJouiJo+iJpOiJpeiJpuiJp+iJqeaLp+aznueJm+aJremSrue6veiEk+a1k+WGnOW8hOWltOWKquaAkuWls+aaluiZkOeWn+aMquaHpuezr+ivuuWTpuasp+m4peautOiXleWRleWBtuaypOWVqui2tOeIrOW4leaAleeQtuaLjeaOkueJjOW+mOa5g+a0vuaUgOa9mOebmOejkOebvOeVlOWIpOWPm+S5k+W6nuaXgeiAquiDluaKm+WShuWIqOeCruiijei3keazoeWRuOiDmuWfueijtOi1lOmZqumFjeS9qeaym+WWt+ebhuegsOaKqOeDuea+juW9reiTrOajmuehvOevt+iGqOaci+m5j+aNp+eisOWdr+egkumcueaJueaKq+WKiOeQteavl++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk3XS5sZW5ndGg7ICsraikgaWYoRFsxOTddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk3XVtqXV0gPSA1MDQzMiArIGo7IGRbNTA0MzIgKyBqXSA9IERbMTk3XVtqXTt9XG5EWzE5OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiJquiJq+iJrOiJreiJseiJteiJtuiJt+iJuOiJu+iJvOiKgOiKgeiKg+iKheiKhuiKh+iKieiKjOiKkOiKk+iKlOiKleiKluiKmuiKm+iKnuiKoOiKouiKo+iKp+iKsuiKteiKtuiKuuiKu+iKvOiKv+iLgOiLguiLg+iLheiLhuiLieiLkOiLluiLmeiLmuiLneiLouiLp+iLqOiLqeiLquiLrOiLreiLruiLsOiLsuiLs+iLteiLtuiLuO+/veiLuuiLvOiLveiLvuiLv+iMgOiMiuiMi+iMjeiMkOiMkuiMk+iMluiMmOiMmeiMneiMnuiMn+iMoOiMoeiMouiMo+iMpOiMpeiMpuiMqeiMquiMruiMsOiMsuiMt+iMu+iMveWVpOiEvueWsuearuWMueeXnuWDu+WxgeitrOevh+WBj+eJh+mql+mjmOa8gueTouelqOaSh+eepeaLvOmikei0q+WTgeiBmOS5kuWdquiLueiQjeW5s+WHreeTtuivhOWxj+WdoeazvOmih+WphuegtOmthOi/q+eyleWJluaJkemTuuS7huiOhuiRoeiPqeiSsuWflOactOWcg+aZrua1puiwseabneeAkeacn+asuuagluaImuWmu+S4g+WHhOa8huafkuayj+WFtuaji+Wlh+atp+eVpuW0juiEkOm9kOaXl+eliOelgemqkei1t+WyguS5nuS8geWQr+WlkeegjOWZqOawlOi/hOW8g+axveazo+iuq+aOkO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk4XS5sZW5ndGg7ICsraikgaWYoRFsxOThdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk4XVtqXV0gPSA1MDY4OCArIGo7IGRbNTA2ODggKyBqXSA9IERbMTk4XVtqXTt9XG5EWzE5OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiMvuiMv+iNgeiNguiNhOiNheiNiOiNiuiNi+iNjOiNjeiNjuiNk+iNleiNluiNl+iNmOiNmeiNneiNouiNsOiNseiNsuiNs+iNtOiNteiNtuiNueiNuuiNvuiNv+iOgOiOgeiOguiOg+iOhOiOh+iOiOiOiuiOi+iOjOiOjeiOj+iOkOiOkeiOlOiOleiOluiOl+iOmeiOmuiOneiOn+iOoeiOouiOo+iOpOiOpeiOpuiOp+iOrOiOreiOru+/veiOr+iOteiOu+iOvuiOv+iPguiPg+iPhOiPhuiPiOiPieiPi+iPjeiPjuiPkOiPkeiPkuiPk+iPleiPl+iPmeiPmuiPm+iPnuiPouiPo+iPpOiPpuiPp+iPqOiPq+iPrOiPreaBsOa0veeJteaJpumSjumTheWNg+i/geetvuS7n+iwpuS5vum7lOmSsemSs+WJjea9nOmBo+a1heiwtOWgkeW1jOasoOatieaequWRm+iFlOe+jOWimeiUt+W8uuaKouaph+mUueaVsuaChOahpeeep+S5lOS+qOW3p+memOaSrOe/mOWzreS/j+eqjeWIh+iMhOS4lOaAr+eqg+mSpuS+teS6suenpueQtOWLpOiKueaTkuemveWvneaygemdkui9u+awouWAvuWNv+a4heaTjuaZtOawsOaDhemht+ivt+W6hueQvOept+eni+S4mOmCseeQg+axguWbmumFi+azhei2i+WMuuibhuabsui6r+WxiOmpsea4oO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk5XS5sZW5ndGg7ICsraikgaWYoRFsxOTldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk5XVtqXV0gPSA1MDk0NCArIGo7IGRbNTA5NDQgKyBqXSA9IERbMTk5XVtqXTt9XG5EWzIwMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiPruiPr+iPs+iPtOiPteiPtuiPt+iPuuiPu+iPvOiPvuiPv+iQgOiQguiQheiQh+iQiOiQieiQiuiQkOiQkuiQk+iQlOiQleiQluiQl+iQmeiQmuiQm+iQnuiQn+iQoOiQoeiQouiQo+iQqeiQquiQq+iQrOiQreiQruiQr+iQsOiQsuiQs+iQtOiQteiQtuiQt+iQueiQuuiQu+iQvuiQv+iRgOiRgeiRguiRg+iRhOiRheiRh+iRiOiRie+/veiRiuiRi+iRjOiRjeiRjuiRj+iRkOiRkuiRk+iRlOiRleiRluiRmOiRneiRnuiRn+iRoOiRouiRpOiRpeiRpuiRp+iRqOiRquiRruiRr+iRsOiRsuiRtOiRt+iRueiRu+iRvOWPluWotum+i+i2o+WOu+WciOmip+adg+mGm+azieWFqOeXiuaLs+eKrOWIuOWKnee8uueClOeYuOWNtOm5iuamt+ehrumbgOijmee+pOeEtueHg+WGieafk+eTpOWjpOaUmOWat+iuqemltuaJsOe7leaDueeDreWjrOS7geS6uuW/jemfp+S7u+iupOWIg+Wmiue6q+aJlOS7jeaXpeaIjuiMuOiTieiNo+iejeeGlOa6tuWuuee7kuWGl+aPieaflOiCieiMueigleWEkuWtuuWmgui+seS5s+axneWFpeikpei9r+mYruiViueRnumUkOmXsOa2puiLpeW8seaSkua0kuiQqOiFrumzg+Whnui1m+S4ieWPge+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAwXS5sZW5ndGg7ICsraikgaWYoRFsyMDBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAwXVtqXV0gPSA1MTIwMCArIGo7IGRbNTEyMDAgKyBqXSA9IERbMjAwXVtqXTt9XG5EWzIwMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiRveiRvuiRv+iSgOiSgeiSg+iShOiSheiShuiSiuiSjeiSj+iSkOiSkeiSkuiSk+iSlOiSleiSluiSmOiSmuiSm+iSneiSnuiSn+iSoOiSouiSo+iSpOiSpeiSpuiSp+iSqOiSqeiSquiSq+iSrOiSreiSruiSsOiSseiSs+iSteiStuiSt+iSu+iSvOiSvuiTgOiTguiTg+iTheiThuiTh+iTiOiTi+iTjOiTjuiTj+iTkuiTlOiTleiTl++/veiTmOiTmeiTmuiTm+iTnOiTnuiToeiTouiTpOiTp+iTqOiTqeiTquiTq+iTreiTruiTr+iTseiTsuiTs+iTtOiTteiTtuiTt+iTuOiTueiTuuiTu+iTveiTvuiUgOiUgeiUguS8nuaVo+ahkeWXk+S4p+aQlOmqmuaJq+WrgueRn+iJsua2qeajruWDp+iOjuegguadgOWIueaymee6seWCu+WVpeeFnuetm+aZkuePiuiLq+adieWxseWIoOeFveihq+mXqumZleaThei1oeiGs+WWhOaxleaJh+e8ruWikuS8pOWVhui1j+aZjOS4iuWwmuijs+aiouaNjueojeeDp+iKjeWLuumftuWwkeWTqOmCtee7jeWloui1iuibh+iIjOiIjei1puaRhOWwhOaFkea2ieekvuiuvuegt+eUs+WRu+S8uOi6q+a3seWooOe7heelnuayiOWuoeWptueUmuiCvuaFjua4l+WjsOeUn+eUpeeJsuWNh+e7s++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAxXS5sZW5ndGg7ICsraikgaWYoRFsyMDFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAxXVtqXV0gPSA1MTQ1NiArIGo7IGRbNTE0NTYgKyBqXSA9IERbMjAxXVtqXTt9XG5EWzIwMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiUg+iUhOiUheiUhuiUh+iUiOiUieiUiuiUi+iUjeiUjuiUj+iUkOiUkuiUlOiUleiUluiUmOiUmeiUm+iUnOiUneiUnuiUoOiUouiUo+iUpOiUpeiUpuiUp+iUqOiUqeiUquiUreiUruiUr+iUsOiUseiUsuiUs+iUtOiUteiUtuiUvuiUv+iVgOiVgeiVguiVhOiVheiVhuiVh+iVi+iVjOiVjeiVjuiVj+iVkOiVkeiVkuiVk+iVlOiVle+/veiVl+iVmOiVmuiVm+iVnOiVneiVn+iVoOiVoeiVouiVo+iVpeiVpuiVp+iVqeiVquiVq+iVrOiVreiVruiVr+iVsOiVseiVs+iVteiVtuiVt+iVuOiVvOiVveiVv+iWgOiWgeecgeebm+WJqeiDnOWco+W4iOWkseeLruaWvea5v+ivl+WwuOiZseWNgeefs+aLvuaXtuS7gOmjn+iagOWunuivhuWPsuefouS9v+WxjumptuWni+W8j+ekuuWjq+S4luafv+S6i+aLreiqk+mAneWKv+aYr+WXnOWZrOmAguS7leS+jemHiumlsOawj+W4guaBg+WupOinhuivleaUtuaJi+mmluWuiOWvv+aOiOWUruWPl+eYpuWFveiUrOaeouais+auiuaKkui+k+WPlOiIkua3keeWj+S5pui1juWtsOeGn+iWr+aakeabmee9suicgOm7jem8oOWxnuacr+i/sOagkeadn+aIjeerluWiheW6tuaVsOa8se+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAyXS5sZW5ndGg7ICsraikgaWYoRFsyMDJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAyXVtqXV0gPSA1MTcxMiArIGo7IGRbNTE3MTIgKyBqXSA9IERbMjAyXVtqXTt9XG5EWzIwM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiWguiWg+iWhuiWiOiWieiWiuiWi+iWjOiWjeiWjuiWkOiWkeiWkuiWk+iWlOiWleiWluiWl+iWmOiWmeiWmuiWneiWnuiWn+iWoOiWoeiWouiWo+iWpeiWpuiWp+iWqeiWq+iWrOiWreiWseiWsuiWs+iWtOiWteiWtuiWuOiWuuiWu+iWvOiWveiWvuiWv+iXgOiXguiXg+iXhOiXheiXhuiXh+iXiOiXiuiXi+iXjOiXjeiXjuiXkeiXku+/veiXlOiXluiXl+iXmOiXmeiXmuiXm+iXneiXnuiXn+iXoOiXoeiXouiXo+iXpeiXpuiXp+iXqOiXquiXq+iXrOiXreiXruiXr+iXsOiXseiXsuiXs+iXtOiXteiXtuiXt+iXuOaBleWIt+iAjeaRlOihsOeUqeW4heagk+aLtOmcnOWPjOeIveiwgeawtOedoeeojuWQrueerOmhuuiInOivtOehleaclOeDgeaWr+aSleWYtuaAneengeWPuOS4neatu+iChuWvuuWXo+Wbm+S8uuS8vOmlsuW3s+advuiAuOaAgumigumAgeWui+iuvOivteaQnOiJmOaTnuWXveiLj+mFpeS/l+e0oOmAn+eyn+WDs+Whkea6r+Wuv+ivieiCg+mFuOiSnOeul+iZvemai+maj+e7pemrk+eijuWygeepl+mBgumap+eln+WtmeaNn+esi+iTkeaireWUhue8qeeQkOe0oumUgeaJgOWhjOS7luWug+WlueWhlO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAzXS5sZW5ndGg7ICsraikgaWYoRFsyMDNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAzXVtqXV0gPSA1MTk2OCArIGo7IGRbNTE5NjggKyBqXSA9IERbMjAzXVtqXTt9XG5EWzIwNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiXueiXuuiXvOiXveiXvuiYgOiYgeiYguiYg+iYhOiYhuiYh+iYiOiYieiYiuiYi+iYjOiYjeiYjuiYj+iYkOiYkuiYk+iYlOiYleiYl+iYmOiYmeiYmuiYm+iYnOiYneiYnuiYn+iYoOiYoeiYouiYo+iYpOiYpeiYpuiYqOiYquiYq+iYrOiYreiYruiYr+iYsOiYseiYsuiYs+iYtOiYteiYtuiYt+iYueiYuuiYu+iYveiYvuiYv+iZgO+/veiZgeiZguiZg+iZhOiZheiZhuiZh+iZiOiZieiZiuiZi+iZjOiZkuiZk+iZleiZluiZl+iZmOiZmeiZm+iZnOiZneiZn+iZoOiZoeiZo+iZpOiZpeiZpuiZp+iZqOiZqeiZqueNreaMnui5i+i4j+iDjuiLlOaKrOWPsOazsOmFnuWkquaAgeaxsOWdjeaRiui0queYq+a7qeWdm+aqgOeXsOa9reiwreiwiOWdpuavr+iikueis+aOouWPueeCreaxpOWhmOaQquWgguajoOiGm+WUkOezluWAmOi6uua3jOi2n+eDq+aOj+a2m+a7lOe7puiQhOahg+mAg+a3mOmZtuiuqOWll+eJueiXpOiFvueWvOiqiuair+WJlOi4oumUkeaPkOmimOi5hOWVvOS9k+abv+Waj+aDlea2leWJg+WxieWkqea3u+Whq+eUsOeUnOaBrOiIlOiFhuaMkeadoei/ouecuui3s+i0tOmTgeW4luWOheWQrOeDg++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA0XS5sZW5ndGg7ICsraikgaWYoRFsyMDRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA0XVtqXV0gPSA1MjIyNCArIGo7IGRbNTIyMjQgKyBqXSA9IERbMjA0XVtqXTt9XG5EWzIwNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiZreiZr+iZsOiZsuiZs+iZtOiZteiZtuiZt+iZuOiag+iahOiaheiahuiah+iaiOiaieiajuiaj+iakOiakeiakuialOialuial+iamOiameiamuiam+ianuian+iaoOiaoeiaouiapeiapuiaq+iareiaruiasuias+iat+iauOiaueiau+iavOiaveiavuiav+ibgeibguibg+ibheibiOibjOibjeibkuibk+ibleibluibl+ibmuibnO+/veibneiboOiboeibouibo+ibpeibpuibp+ibqOibquibq+ibrOibr+ibteibtuibt+ibuuibu+ibvOibveibv+icgeichOicheichuici+icjOicjuicj+ickOickeiclOicluaxgOW7t+WBnOS6reW6reaMuuiJh+mAmuahkOmFruees+WQjOmTnOW9pOerpeahtuaNheetkue7n+eXm+WBt+aKleWktOmAj+WHuOeng+eqgeWbvuW+kumAlOa2guWxoOWcn+WQkOWFlOa5jeWbouaOqOmik+iFv+icleikqumAgOWQnuWxr+iHgOaLluaJmOiEsem4temZgOmprumpvOakreWmpeaLk+WUvuaMluWTh+ibmea0vOWog+eTpuiinOatquWkluixjOW8r+a5vueOqemhveS4uOeDt+WujOeil+aMveaZmuealuaDi+Wum+WpieS4h+iFleaxqueOi+S6oeaeiee9keW+gOaXuuacm+W/mOWmhOWoge+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA1XS5sZW5ndGg7ICsraikgaWYoRFsyMDVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA1XVtqXV0gPSA1MjQ4MCArIGo7IGRbNTI0ODAgKyBqXSA9IERbMjA1XVtqXTt9XG5EWzIwNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veicmeicm+icneicn+icoOicpOicpuicp+icqOicquicq+icrOicreicr+icsOicsuics+icteictuicuOicueicuuicvOicveidgOidgeidguidg+idhOidheidhuidiuidi+idjeidj+idkOidkeidkuidlOidleidluidmOidmuidm+idnOidneidnuidn+idoeidouidpuidp+idqOidqeidquidq+idrOidreidr+idseidsuids+idte+/veidt+iduOidueiduuidv+iegOiegeiehOiehuieh+ieieieiuiejOiejuiej+iekOiekeiekuielOieleieluiemOiemeiemuiem+ienOieneienuieoOieoeieouieo+iepOW3jeW+ruWNsemfpui/neahheWbtOWUr+aDn+S4uua9jee7tOiLh+iQjuWnlOS8n+S8quWwvue6rOacquiUmuWRs+eVj+iDg+WWgumtj+S9jea4reiwk+WwieaFsOWNq+eYn+a4qeiaiuaWh+mXu+e6ueWQu+eos+e0iumXruWXoee/geeTruaMneicl+a2oeeqneaIkeaWoeWNp+aPoeayg+W3q+WRnOmSqOS5jOaxoeivrOWxi+aXoOiKnOaip+WQvuWQtOavi+atpuS6lOaNguWNiOiInuS8jeS+ruWdnuaIiumbvuaZpOeJqeWLv+WKoeaCn+ivr+aYlOeGmeaekOilv+ehkuefveaZsOWYu+WQuOmUoeeJuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA2XS5sZW5ndGg7ICsraikgaWYoRFsyMDZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA2XVtqXV0gPSA1MjczNiArIGo7IGRbNTI3MzYgKyBqXSA9IERbMjA2XVtqXTt9XG5EWzIwN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiepeiepuiep+ieqeiequieruiesOieseiesuietOietuiet+ieuOieueieu+ievOievuiev+ifgeifguifg+ifhOifheifh+ifiOifieifjOifjeifjuifj+ifkOiflOifleifluifl+ifmOifmeifmuifnOifneifnuifn+ifoeifouifo+ifpOifpuifp+ifqOifqeifq+ifrOifreifr+ifsOifseifsuifs+iftOifteiftuift+ifuO+/veifuuifu+ifvOifveifv+iggOiggeigguighOigheighuigh+igiOigieigi+igjOigjeigjuigj+igkOigkeigkuiglOigl+igmOigmeigmuignOigneignuign+igoOigo+eogOaBr+W4jOaCieiGneWkleaDnOeGhOeDr+a6quaxkOeKgOaqhOiireW4reS5oOWqs+WWnOmTo+a0l+ezu+mameaIj+e7hueejuiZvuWMo+mcnui+luaah+WzoeS+oOeLreS4i+WOpuWkj+WQk+aOgOmUqOWFiOS7memynOe6pOWSuOi0pOihlOiIt+mXsua2juW8puWrjOaYvumZqeeOsOeMruWOv+iFuummhee+oeWuqumZt+mZkOe6v+ebuOWOoumVtummmeeuseilhOa5mOS5oee/lOelpeivpuaDs+WTjeS6q+mhueW3t+apoeWDj+WQkeixoeiQp+ehnemchOWJiuWTruWao+mUgOa2iOWutea3huaZk++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA3XS5sZW5ndGg7ICsraikgaWYoRFsyMDddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA3XVtqXV0gPSA1Mjk5MiArIGo7IGRbNTI5OTIgKyBqXSA9IERbMjA3XVtqXTt9XG5EWzIwOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veigpOigpeigpuigp+igqOigqeigquigq+igrOigreigruigr+igsOigseigs+igtOigteigtuigt+iguOiguuigu+igveigvuigv+ihgeihguihg+ihhuihh+ihiOihieihiuihi+ihjuihj+ihkOihkeihkuihk+ihleihluihmOihmuihm+ihnOihneihnuihn+ihoOihpuihp+ihquihreihr+ihseihs+ihtOihteihtuihuOihueihuu+/veihu+ihvOiigOiig+iihuiih+iiieiiiuiijOiijuiij+iikOiikeiik+iilOiileiil+iimOiimeiimuiim+iineiinuiin+iioOiioeiio+iipeiipuiip+iiqOiiqeiiquWwj+WtneagoeiCluWVuOeskeaViOallOS6m+ath+idjumei+WNj+aMn+aQuumCquaWnOiDgeiwkOWGmeaisOWNuOifueaHiOazhOazu+iwouWxkeiWquiKr+mUjOaso+i+m+aWsOW/u+W/g+S/oeihheaYn+iFpeeMqeaDuuWFtOWIkeWei+W9oumCouihjOmGkuW5uOadj+aAp+Wnk+WFhOWHtuiDuOWMiOaxuembhOeGiuS8keS/rue+nuacveWXhemUiOengOiilue7o+Win+aIjOmcgOiZmuWYmOmhu+W+kOiuuOiThOmFl+WPmeaXreW6j+eVnOaBpOe1ruWpv+e7que7rei9qeWWp+Wuo+aCrOaXi+eOhO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA4XS5sZW5ndGg7ICsraikgaWYoRFsyMDhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA4XVtqXV0gPSA1MzI0OCArIGo7IGRbNTMyNDggKyBqXSA9IERbMjA4XVtqXTt9XG5EWzIwOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiirOiiruiir+iisOiisuiis+iitOiiteiituiiuOiiueiiuuiiu+iiveiivuiiv+ijgOijg+ijhOijh+ijiOijiuiji+ijjOijjeijj+ijkOijkeijk+ijluijl+ijmuijm+ijnOijneijnuijoOijoeijpuijp+ijqeijquijq+ijrOijreijruijr+ijsuijteijtuijt+ijuuiju+ijveijv+ikgOikgeikg+ikhOikheikhuikh+ikiO+/veikieiki+ikjOikjeikjuikj+ikkeiklOikleikluikl+ikmOiknOikneiknuikn+ikoOikouiko+ikpOikpuikp+ikqOikqeikrOikreikruikr+ikseiksuiks+ikteikt+mAieeZo+ecqee7mumdtOiWm+WtpueptOmbquihgOWLi+eGj+W+quaXrOivouWvu+mpr+W3oeauieaxm+iureiur+mAiui/heWOi+aKvOm4pum4reWRgOS4q+iKveeJmeianOW0luihmea2r+mbheWTkeS6muiutueEieWSvemYieeDn+a3ueebkOS4peeglOickuWyqeW7tuiogOminOmYjueCjuayv+WlhOaOqeecvOihjea8lOiJs+WgsOeHleWOjOegmumbgeWUgeW9pueEsOWutOiwmumqjOaug+Wkrum4r+enp+adqOaJrOS9r+eWoee+iua0i+mYs+awp+S7sOeXkuWFu+agt+a8vumCgOiFsOWmlueRtu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA5XS5sZW5ndGg7ICsraikgaWYoRFsyMDldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA5XVtqXV0gPSA1MzUwNCArIGo7IGRbNTM1MDQgKyBqXSA9IERbMjA5XVtqXTt9XG5EWzIxMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veikuOikueikuuiku+ikvOikveikvuikv+ilgOilguilg+ilheilhuilh+iliOilieiliuili+iljOiljeiljuilj+ilkOilkeilkuilk+illOilleilluill+ilmOilmeilmuilm+ilnOilneiloOiloeilouilo+ilpOilpeilp+ilqOilqeilquilq+ilrOilreilruilr+ilsOilseilsuils+iltOilteiltuilt+iluOilueiluuilvO+/veilveilvuimgOimguimhOimheimh+imiOimieimiuimi+imjOimjeimjuimj+imkOimkeimkuimk+imlOimleimluiml+immOimmeimmuimm+imnOimneimnuimn+imoOimoeaRh+Wwp+mBpeeqkeiwo+WnmuWSrOiIgOiNr+imgeiAgOaksOWZjuiAtueIt+mHjuWGtuS5n+mhteaOluS4muWPtuabs+iFi+WknOa2suS4gOWjueWMu+aPlumTseS+neS8iuiho+mikOWkt+mBl+enu+S7quiDsOeWkeayguWunOWnqOW9neakheiageWAmuW3suS5meefo+S7peiJuuaKkeaYk+mCkeWxueS6v+W9ueiHhumAuOiChOeWq+S6puijlOaEj+avheW/huS5ieebiua6ouivo+iuruiwiuivkeW8gue/vOe/jOe7juiMteiNq+WboOaut+mfs+mYtOWnu+WQn+mTtua3q+WvhemlruWwueW8lemakO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEwXS5sZW5ndGg7ICsraikgaWYoRFsyMTBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEwXVtqXV0gPSA1Mzc2MCArIGo7IGRbNTM3NjAgKyBqXSA9IERbMjEwXVtqXTt9XG5EWzIxMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veimouimo+impOimpeimpuimp+imqOimqeimquimq+imrOimreimruimr+imsOimseimsuims+imtOimteimtuimt+imuOimueimuuimu+imvOimveimvuimv+ingOing+injeink+inlOinleinl+inmOinmeinm+inneinn+inoOinoeinouinpOinp+inqOinqeinquinrOinreinruinsOinseinsuintOinteintuint+inuOinueinuu+/veinu+invOinveinvuinv+iogeioguiog+iohOioheiohuioiOioieioiuioi+iojOiojeiojuioj+iokOiokeiokuiok+iolOioleioluiol+iomOiomeiomuiom+ionOioneWNsOiLseaoseWptOm5sOW6lOe8qOiOueiQpOiQpeiNp+idh+i/jui1ouebiOW9semiluehrOaYoOWTn+aLpeS9o+iHg+eXiOW6uOmbjei4iuibueWSj+azs+a2jOawuOaBv+WLh+eUqOW5veS8mOaCoOW/p+WwpOeUsemCrumTgOeKueayuea4uOmFieacieWPi+WPs+S9kemHieivseWPiOW5vOi/gua3pOS6juebguamhuiZnuaEmuiIhuS9meS/numAvumxvOaEiea4nea4lOmaheS6iOWosembqOS4juWxv+emueWuh+ivree+veeOieWfn+iKi+mDgeWQgemBh+WWu+WzquW+oeaEiOassueLseiCsuiqie+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjExXS5sZW5ndGg7ICsraikgaWYoRFsyMTFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjExXVtqXV0gPSA1NDAxNiArIGo7IGRbNTQwMTYgKyBqXSA9IERbMjExXVtqXTt9XG5EWzIxMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veionuion+iooOiooeioouioo+iopOiopeiopuiop+ioqOioqeioquioq+iorOioreioruior+iosOioseiosuios+iotOioteiotuiot+iouOioueiouuiou+iovOioveiov+ipgOipgeipguipg+iphOipheiphuiph+ipieipiuipi+ipjOipjeipjuipj+ipkOipkeipkuipk+iplOipleipluipl+ipmOipmeipmuipm+ipnOipneipnu+/veipn+ipoOipoeipouipo+ippOippeippuipp+ipqOipqeipquipq+iprOipreipruipr+ipsOipseipsuips+iptOipteiptuipt+ipuOipuuipu+ipvOipveipvuipv+iqgOa1tOWvk+ijlemihOixq+mprem4s+a4iuWGpOWFg+Weo+iigeWOn+aPtOi+leWbreWRmOWchueMv+a6kOe8mOi/nOiLkeaEv+aAqOmZouabsOe6pui2iui3g+mSpeWys+eypOaciOaCpumYheiAmOS6kemDp+WMgOmZqOWFgei/kOiVtOmFneaZlemfteWtleWMneeguOadguagveWTieeBvuWusOi9veWGjeWcqOWSseaUkuaagui1nui1g+iEj+iRrOmBreezn+WHv+iXu+aeo+aXqea+oeiapOi6geWZqumAoOeagueBtueHpei0o+aLqeWImeazvei0vOaAjuWinuaGjuabvui1oOaJjuWWs+a4o+acrei9p++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEyXS5sZW5ndGg7ICsraikgaWYoRFsyMTJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEyXVtqXV0gPSA1NDI3MiArIGo7IGRbNTQyNzIgKyBqXSA9IERbMjEyXVtqXTt9XG5EWzIxM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiqgeiqguiqg+iqhOiqheiqhuiqh+iqiOiqi+iqjOiqjeiqjuiqj+iqkOiqkeiqkuiqlOiqleiqluiql+iqmOiqmeiqmuiqm+iqnOiqneiqnuiqn+iqoOiqoeiqouiqo+iqpOiqpeiqpuiqp+iqqOiqqeiqquiqq+iqrOiqreiqruiqr+iqsOiqseiqsuiqs+iqtOiqteiqtuiqt+iquOiqueiquuiqu+iqvOiqveiqvuiqv+irgOirgeirgu+/veirg+irhOirheirhuirh+iriOirieiriuiri+irjOirjeirjuirj+irkOirkeirkuirk+irlOirleirluirl+irmOirmeirmuirm+irnOirneirnuirn+iroOiroeirouiro+mToemXuOecqOagheamqOWSi+S5jeeCuOiviOaRmOaWi+WuheeqhOWAuuWvqOeeu+avoeipueeymOayvuebj+aWqei+l+W0reWxleiYuOagiOWNoOaImOermea5m+e7veaon+eroOW9sOa8s+W8oOaOjOa2qOadluS4iOW4kOi0puS7l+iDgOeYtOmanOaLm+aYreaJvuayvOi1teeFp+e9qeWFhuiCh+WPrOmBruaKmOWTsuibsOi+meiAhemUl+iUl+i/mea1meePjeaWn+ecn+eUhOegp+iHu+i0numSiOS+puaeleeWueiviumch+aMr+mVh+mYteiSuOaMo+edgeW+geeLsOS6ieaAlOaVtOaLr+ato+aUv++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEzXS5sZW5ndGg7ICsraikgaWYoRFsyMTNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEzXVtqXV0gPSA1NDUyOCArIGo7IGRbNTQ1MjggKyBqXSA9IERbMjEzXVtqXTt9XG5EWzIxNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veirpOirpeirpuirp+irqOirqeirquirq+irrOirreirruirr+irsOirseirsuirs+irtOirteirtuirt+iruOirueiruuiru+irvOirveirvuirv+isgOisgeisguisg+ishOisheishuisiOisieisiuisi+isjOisjeisjuisj+iskOiskeiskuisk+islOisleisluisl+ismOismeismuism+isnOisneisnuisn+isoOisoeisouiso++/veispOispeisp+isqOisqeisquisq+isrOisreisruisr+issOisseissuiss+istOisteistuist+isuOisueisuuisu+isvOisveisvuisv+itgOitgeitguitg+ithOitheW4p+eXh+mDkeivgeiKneaeneaUr+WQseicmOefpeiCouiEguaxgeS5i+e7h+iBjOebtOakjeauluaJp+WAvOS+hOWdgOaMh+atoui2vuWPquaXqOe6uOW/l+aMmuaOt+iHs+iHtOe9ruW4nOWzmeWItuaZuuenqeeomui0qOeCmeeXlOa7nuayu+eqkuS4reebheW/oOmSn+iht+e7iOenjeiCv+mHjeS7suS8l+iIn+WRqOW3nua0suivjOeypei9tOiCmOW4muWSkueaseWumeaYvOmqpOePoOagquibm+acseeMquivuOivm+mAkOerueeDm+eFruaLhOeeqeWYseS4u+iRl+afseWKqeibgOi0rumTuOetke+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE0XS5sZW5ndGg7ICsraikgaWYoRFsyMTRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE0XVtqXV0gPSA1NDc4NCArIGo7IGRbNTQ3ODQgKyBqXSA9IERbMjE0XVtqXTt9XG5EWzIxNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veithuith+itiOitieitiuiti+itjOitjeitjuitj+itkOitkeitkuitk+itlOitleitluitl+itmOitmeitmuitm+itnOitneitnuitn+itoOitoeitouito+itpOitpeitp+itqOitqeitquitq+itreitruitr+itsOitseitsuits+ittOitteittuitt+ituOitueituuitu+itvOitveitvuitv+iugOiugeiuguiug+iuhOiuheiuhu+/veiuh+iuiOiuieiuiuiui+iujOiujeiujuiuj+iukOiukeiukuiuk+iulOiuleiuluiul+iumOiumeiumuium+iunOiuneiunuiun+iurOiuseiuu+ivh+ivkOivquiwieiwnuS9j+azqOelnempu+aKk+eIquaLveS4k+eglui9rOaSsOi1muevhuahqeW6hOijheWmhuaSnuWjrueKtuakjumUpei/vei1mOWdoOe8gOiwhuWHhuaNieaLmeWNk+ahjOeQouiMgemFjOWVhOedgOeBvOa1iuWFueWSqOi1hOWnv+a7i+a3hOWtnOe0q+S7lOexvea7k+WtkOiHqua4jeWtl+msg+ajlei4quWul+e7vOaAu+e6temCuei1sOWlj+aPjeenn+i2s+WNkuaXj+elluivhemYu+e7hOmSu+e6guWYtOmGieacgOe9quWwiumBteaYqOW3puS9kOafnuWBmuS9nOWdkOW6p++/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE1XS5sZW5ndGg7ICsraikgaWYoRFsyMTVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE1XVtqXV0gPSA1NTA0MCArIGo7IGRbNTUwNDAgKyBqXSA9IERbMjE1XVtqXTt9XG5EWzIxNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiwuOiwueiwuuiwu+iwvOiwveiwvuiwv+ixgOixguixg+ixhOixheixiOixiuixi+ixjeixjuixj+ixkOixkeixkuixk+ixlOixluixl+ixmOixmeixm+ixnOixneixnuixn+ixoOixo+ixpOixpeixpuixp+ixqOixqeixrOixreixruixr+ixsOixseixsuixtOixteixtuixt+ixu+ixvOixveixvuixv+iygOiygeiyg+iyhOiyhuiyh++/veiyiOiyi+iyjeiyjuiyj+iykOiykeiykuiyk+iyleiyluiyl+iymeiymuiym+iynOiyneiynuiyn+iyoOiyoeiyouiyo+iypOiypeiypuiyp+iyqOiyqeiyquiyq+iyrOiyreS6jeS4jOWFgOS4kOW7v+WNheS4leS6mOS4numssuWtrOWZqeS4qOemuuS4v+WMleS5h+WkreeIu+WNruawkOWbn+iDpOmml+avk+edvum8l+S4tuS6n+m8kOS5nOS5qeS6k+iKiOWtm+WVrOWYj+S7hOWOjeWOneWOo+WOpeWOrumdpei1neWMmuWPteWMpuWMruWMvui1nOWNpuWNo+WIguWIiOWIjuWIreWIs+WIv+WJgOWJjOWJnuWJoeWJnOiSr+WJveWKguWKgeWKkOWKk+WGgue9lOS6u+S7g+S7ieS7guS7qOS7oeS7q+S7nuS8m+S7s+S8ouS9pOS7teS8peS8p+S8ieS8q+S9nuS9p+aUuOS9muS9ne+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE2XS5sZW5ndGg7ICsraikgaWYoRFsyMTZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE2XVtqXV0gPSA1NTI5NiArIGo7IGRbNTUyOTYgKyBqXSA9IERbMjE2XVtqXTt9XG5EWzIxN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiyruiyr+iysOiyseiysuiys+iytOiyteiytuiyt+iyuOiyueiyuuiyu+iyvOiyveiyvuiyv+izgOizgeizguizg+izhOizheizhuizh+iziOizieiziuizi+izjOizjeizjuizj+izkOizkeizkuizk+izlOizleizluizl+izmOizmeizmuizm+iznOizneiznuizn+izoOizoeizouizo+izpOizpeizpuizp+izqOizqeizquizq+izrO+/veizreizruizr+izsOizseizsuizs+iztOizteiztuizt+izuOizueizuuizu+izvOizveizvuizv+i0gOi0gei0gui0g+i0hOi0hei0hui0h+i0iOi0iei0iui0i+i0jOi0jeS9n+S9l+S8suS8veS9tuS9tOS+keS+ieS+g+S+j+S9vuS9u+S+quS9vOS+rOS+lOS/puS/qOS/quS/heS/muS/o+S/nOS/keS/n+S/uOWAqeWBjOS/s+WArOWAj+WAruWAreS/vuWAnOWAjOWApeWAqOWBvuWBg+WBleWBiOWBjuWBrOWBu+WCpeWCp+WCqeWCuuWDluWEhuWDreWDrOWDpuWDruWEh+WEi+S7neawveS9mOS9peS/jum+oOaxhuextOWFruW3vem7iemmmOWGgeWklOWLueWMjeioh+WMkOWHq+WkmeWFleS6oOWFluS6s+ihruiipOS6teiElOijkuemgOWstOigg+e+uOWGq+WGseWGveWGvO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE3XS5sZW5ndGg7ICsraikgaWYoRFsyMTddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE3XVtqXV0gPSA1NTU1MiArIGo7IGRbNTU1NTIgKyBqXSA9IERbMjE3XVtqXTt9XG5EWzIxOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei0jui0j+i0kOi0kei0kui0k+i0lOi0lei0lui0l+i0mOi0mei0mui0m+i0nOi0oOi1kei1kui1l+i1n+i1pei1qOi1qei1qui1rOi1rui1r+i1sei1sui1uOi1uei1uui1u+i1vOi1vei1vui1v+i2gOi2gui2g+i2hui2h+i2iOi2iei2jOi2jei2jui2j+i2kOi2kui2k+i2lei2lui2l+i2mOi2mei2mui2m+i2nOi2nei2nui2oOi2oe+/vei2oui2pOi2pei2pui2p+i2qOi2qei2qui2q+i2rOi2rei2rui2r+i2sOi2sui2tui2t+i2uei2u+i2vei3gOi3gei3gui3hei3h+i3iOi3iei3iui3jei3kOi3kui3k+i3lOWHh+WGluWGouWGpeiuoOiupuiup+iuquiutOiuteiut+ivguivg+ivi+ivj+ivjuivkuivk+ivlOivluivmOivmeivnOivn+ivoOivpOivqOivqeivruivsOivs+ivtuivueivvOivv+iwgOiwguiwhOiwh+iwjOiwj+iwkeiwkuiwlOiwleiwluiwmeiwm+iwmOiwneiwn+iwoOiwoeiwpeiwp+iwquiwq+iwruiwr+iwsuiws+iwteiwtuWNqeWNuumYnemYoumYoemYsemYqumYvemYvOmZgumZiemZlOmZn+mZp+mZrOmZsumZtOmaiOmajemal+masOmCl+mCm+mCnemCmemCrOmCoemCtOmCs+mCtumCuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE4XS5sZW5ndGg7ICsraikgaWYoRFsyMThdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE4XVtqXV0gPSA1NTgwOCArIGo7IGRbNTU4MDggKyBqXSA9IERbMjE4XVtqXTt9XG5EWzIxOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei3lei3mOi3mei3nOi3oOi3oei3oui3pei3pui3p+i3qei3rei3rui3sOi3sei3sui3tOi3tui3vOi3vui3v+i4gOi4gei4gui4g+i4hOi4hui4h+i4iOi4i+i4jei4jui4kOi4kei4kui4k+i4lei4lui4l+i4mOi4mei4mui4m+i4nOi4oOi4oei4pOi4pei4pui4p+i4qOi4q+i4rei4sOi4sui4s+i4tOi4tui4t+i4uOi4u+i4vOi4vu+/vei4v+i5g+i5hei5hui5jOi5jei5jui5j+i5kOi5k+i5lOi5lei5lui5l+i5mOi5mui5m+i5nOi5nei5nui5n+i5oOi5oei5oui5o+i5pOi5pei5p+i5qOi5qui5q+i5rui5semCuOmCsOmDj+mDhemCvumDkOmDhOmDh+mDk+mDpumDoumDnOmDl+mDm+mDq+mDr+mDvumEhOmEoumEnumEo+mEsemEr+mEuemFg+mFhuWIjeWlguWKouWKrOWKreWKvuWTv+WLkOWLluWLsOWPn+eHruefjeW7tOWHteWHvOmsr+WOtuW8geeVmuW3r+WdjOWeqeWeoeWhvuWivOWjheWjkeWcqeWcrOWcquWcs+WcueWcruWcr+WdnOWcu+WdguWdqeWeheWdq+WehuWdvOWdu+WdqOWdreWdtuWds+WereWepOWejOWesuWfj+Wep+WetOWek+WeoOWfleWfmOWfmuWfmeWfkuWeuOWftOWfr+WfuOWfpOWfne+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE5XS5sZW5ndGg7ICsraikgaWYoRFsyMTldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE5XVtqXV0gPSA1NjA2NCArIGo7IGRbNTYwNjQgKyBqXSA9IERbMjE5XVtqXTt9XG5EWzIyMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei5s+i5tei5t+i5uOi5uei5uui5u+i5vei5vui6gOi6gui6g+i6hOi6hui6iOi6iei6iui6i+i6jOi6jei6jui6kei6kui6k+i6lei6lui6l+i6mOi6mei6mui6m+i6nei6n+i6oOi6oei6oui6o+i6pOi6pei6pui6p+i6qOi6qei6qui6rei6rui6sOi6sei6s+i6tOi6tei6tui6t+i6uOi6uei6u+i6vOi6vei6vui6v+i7gOi7gei7gu+/vei7g+i7hOi7hei7hui7h+i7iOi7iei7iui7i+i7jOi7jei7j+i7kOi7kei7kui7k+i7lOi7lei7lui7l+i7mOi7mei7mui7m+i7nOi7nei7nui7n+i7oOi7oei7oui7o+i7pOWgi+WgjeWfveWfreWggOWgnuWgmeWhhOWgoOWhpeWhrOWigeWiieWimuWigOmmqOm8meaHv+iJueiJveiJv+iKj+iKiuiKqOiKhOiKjuiKkeiKl+iKmeiKq+iKuOiKvuiKsOiLiOiLiuiLo+iKmOiKt+iKruiLi+iLjOiLgeiKqeiKtOiKoeiKquiKn+iLhOiLjuiKpOiLoeiMieiLt+iLpOiMj+iMh+iLnOiLtOiLkuiLmOiMjOiLu+iLk+iMkeiMmuiMhuiMlOiMleiLoOiLleiMnOiNkeiNm+iNnOiMiOiOkuiMvOiMtOiMseiOm+iNnuiMr+iNj+iNh+iNg+iNn+iNgOiMl+iNoOiMreiMuuiMs+iNpuiNpe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIwXS5sZW5ndGg7ICsraikgaWYoRFsyMjBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIwXVtqXV0gPSA1NjMyMCArIGo7IGRbNTYzMjAgKyBqXSA9IERbMjIwXVtqXTt9XG5EWzIyMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei7pei7pui7p+i7qOi7qei7qui7q+i7rOi7rei7rui7r+i7sOi7sei7sui7s+i7tOi7tei7tui7t+i7uOi7uei7uui7u+i7vOi7vei7vui7v+i8gOi8gei8gui8g+i8hOi8hei8hui8h+i8iOi8iei8iui8i+i8jOi8jei8jui8j+i8kOi8kei8kui8k+i8lOi8lei8lui8l+i8mOi8mei8mui8m+i8nOi8nei8nui8n+i8oOi8oei8oui8o++/vei8pOi8pei8pui8p+i8qOi8qei8qui8q+i8rOi8rei8rui8r+i8sOi8sei8sui8s+i8tOi8tei8tui8t+i8uOi8uei8uui8u+i8vOi8vei8vui8v+i9gOi9gei9gui9g+i9hOiNqOiMm+iNqeiNrOiNquiNreiNruiOsOiNuOiOs+iOtOiOoOiOquiOk+iOnOiOheiNvOiOtuiOqeiNveiOuOiNu+iOmOiOnuiOqOiOuuiOvOiPgeiQgeiPpeiPmOWgh+iQmOiQi+iPneiPveiPluiQnOiQuOiQkeiQhuiPlOiPn+iQj+iQg+iPuOiPueiPquiPheiPgOiQpuiPsOiPoeiRnOiRkeiRmuiRmeiRs+iSh+iSiOiRuuiSieiRuOiQvOiRhuiRqeiRtuiSjOiSjuiQseiRreiTgeiTjeiTkOiTpuiSveiTk+iTiuiSv+iSuuiToOiSoeiSueiStOiSl+iTpeiTo+iUjOeUjeiUuOiTsOiUueiUn+iUuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIxXS5sZW5ndGg7ICsraikgaWYoRFsyMjFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIxXVtqXV0gPSA1NjU3NiArIGo7IGRbNTY1NzYgKyBqXSA9IERbMjIxXVtqXTt9XG5EWzIyMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei9hei9hui9h+i9iOi9iei9iui9i+i9jOi9jei9jui9j+i9kOi9kei9kui9k+i9lOi9lei9lui9l+i9mOi9mei9mui9m+i9nOi9nei9nui9n+i9oOi9oei9oui9o+i9pOi9pei9qui+gOi+jOi+kui+nei+oOi+oei+oui+pOi+pei+pui+p+i+qui+rOi+rei+rui+r+i+sui+s+i+tOi+tei+t+i+uOi+uui+u+i+vOi+v+i/gOi/g+i/hu+/vei/iei/iui/i+i/jOi/jei/j+i/kui/lui/l+i/mui/oOi/oei/o+i/p+i/rOi/r+i/sei/sui/tOi/tei/tui/uui/u+i/vOi/vui/v+mAh+mAiOmAjOmAjumAk+mAlemAmOiVluiUu+iTv+iTvOiVmeiViOiVqOiVpOiVnuiVuueeouiVg+iVsuiVu+iWpOiWqOiWh+iWj+iVueiWruiWnOiWheiWueiWt+iWsOiXk+iXgeiXnOiXv+iYp+iYheiYqeiYluiYvOW7vuW8iOWkvOWlgeiAt+WlleWlmuWlmOWMj+WwouWwpeWwrOWwtOaJjOaJquaKn+aKu+aLiuaLmuaLl+aLruaMouaLtuaMueaNi+aNg+aOreaPtuaNseaNuuaOjuaOtOaNreaOrOaOiuaNqeaOruaOvOaPsuaPuOaPoOaPv+aPhOaPnuaPjuaRkuaPhuaOvuaRheaRgeaQi+aQm+aQoOaQjOaQpuaQoeaRnuaShOaRreaSlu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIyXS5sZW5ndGg7ICsraikgaWYoRFsyMjJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIyXVtqXV0gPSA1NjgzMiArIGo7IGRbNTY4MzIgKyBqXSA9IERbMjIyXVtqXTt9XG5EWzIyM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemAmemAnOmAo+mApOmApemAp+mAqOmAqemAqumAq+mArOmAsOmAsemAsumAs+mAtOmAt+mAuemAuumAvemAv+mBgOmBg+mBhemBhumBiOmBiemBiumBi+mBjOmBjumBlOmBlemBlumBmemBmumBnOmBnemBnumBn+mBoOmBoemBpOmBpumBp+mBqemBqumBq+mBrOmBr+mBsOmBsemBsumBs+mBtumBt+mBuOmBuemBuumBu+mBvOmBvumCge+/vemChOmChemChumCh+mCiemCiumCjOmCjemCjumCj+mCkOmCkumClOmClumCmOmCmumCnOmCnumCn+mCoOmCpOmCpemCp+mCqOmCqemCq+mCremCsumCt+mCvOmCvemCv+mDgOaRuuaSt+aSuOaSmeaSuuaTgOaTkOaTl+aTpOaTouaUieaUpeaUruW8i+W/kueUmeW8keWNn+WPseWPveWPqeWPqOWPu+WQkuWQluWQhuWRi+WRkuWRk+WRlOWRluWRg+WQoeWRl+WRmeWQo+WQsuWSguWSlOWRt+WRseWRpOWSmuWSm+WShOWRtuWRpuWSneWTkOWSreWTguWStOWTkuWSp+WSpuWTk+WTlOWRsuWSo+WTleWSu+WSv+WTjOWTmeWTmuWTnOWSqeWSquWSpOWTneWTj+WTnuWUm+WTp+WUoOWTveWUlOWTs+WUouWUo+WUj+WUkeWUp+WUquWVp+WWj+WWteWVieWVreWVgeWVleWUv+WVkOWUvO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIzXS5sZW5ndGg7ICsraikgaWYoRFsyMjNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIzXVtqXV0gPSA1NzA4OCArIGo7IGRbNTcwODggKyBqXSA9IERbMjIzXVtqXTt9XG5EWzIyNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemDgumDg+mDhumDiOmDiemDi+mDjOmDjemDkumDlOmDlemDlumDmOmDmemDmumDnumDn+mDoOmDo+mDpOmDpemDqemDqumDrOmDrumDsOmDsemDsumDs+mDtemDtumDt+mDuemDuumDu+mDvOmDv+mEgOmEgemEg+mEhemEhumEh+mEiOmEiemEiumEi+mEjOmEjemEjumEj+mEkOmEkemEkumEk+mElOmElemElumEl+mEmOmEmumEm+mEnO+/vemEnemEn+mEoOmEoemEpOmEpemEpumEp+mEqOmEqemEqumEq+mErOmEremErumEsOmEsumEs+mEtOmEtemEtumEt+mEuOmEuumEu+mEvOmEvemEvumEv+mFgOmFgemFgumFhOWUt+WVluWVteWVtuWVt+WUs+WUsOWVnOWWi+WXkuWWg+WWseWWueWWiOWWgeWWn+WVvuWXluWWkeWVu+WXn+WWveWWvuWWlOWWmeWXquWXt+WXieWYn+WXkeWXq+WXrOWXlOWXpuWXneWXhOWXr+WXpeWXsuWXs+WXjOWXjeWXqOWXteWXpOi+lOWYnuWYiOWYjOWYgeWYpOWYo+WXvuWYgOWYp+WYreWZmOWYueWZl+WYrOWZjeWZouWZmeWZnOWZjOWZlOWahuWZpOWZseWZq+WZu+WZvOWaheWak+War+WblOWbl+WbneWboeWbteWbq+WbueWbv+WchOWciuWcieWcnOW4j+W4meW4lOW4keW4seW4u+W4vO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI0XS5sZW5ndGg7ICsraikgaWYoRFsyMjRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI0XVtqXV0gPSA1NzM0NCArIGo7IGRbNTczNDQgKyBqXSA9IERbMjI0XVtqXTt9XG5EWzIyNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemFhemFh+mFiOmFkemFk+mFlOmFlemFlumFmOmFmemFm+mFnOmFn+mFoOmFpumFp+mFqOmFq+mFremFs+mFuumFu+mFvOmGgOmGgemGgumGg+mGhOmGhumGiOmGiumGjumGj+mGk+mGlOmGlemGlumGl+mGmOmGmemGnOmGnemGnumGn+mGoOmGoemGpOmGpemGpumGp+mGqOmGqemGq+mGrOmGsOmGsemGsumGs+mGtumGt+mGuOmGuemGu++/vemGvOmGvemGvumGv+mHgOmHgemHgumHg+mHhOmHhemHhumHiOmHi+mHkOmHkumHk+mHlOmHlemHlumHl+mHmOmHmemHmumHm+mHnemHnumHn+mHoOmHoemHoumHo+mHpOmHpeW4t+W5hOW5lOW5m+W5nuW5oeWyjOWxuuWyjeWykOWyluWyiOWymOWymeWykeWymuWynOWyteWyouWyveWyrOWyq+WyseWyo+WzgeWyt+WzhOWzkuWzpOWzi+WzpeW0guW0g+W0p+W0puW0ruW0pOW0nuW0huW0m+W1mOW0vuW0tOW0veW1rOW1m+W1r+W1neW1q+W1i+W1iuW1qeW1tOW2guW2meW2neixs+W2t+W3heW9s+W9t+W+guW+h+W+ieW+jOW+leW+meW+nOW+qOW+reW+teW+vOihouW9oeeKreeKsOeKtOeKt+eKuOeLg+eLgeeLjueLjeeLkueLqOeLr+eLqeeLsueLtOeLt+eMgeeLs+eMg+eLuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI1XS5sZW5ndGg7ICsraikgaWYoRFsyMjVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI1XVtqXV0gPSA1NzYwMCArIGo7IGRbNTc2MDAgKyBqXSA9IERbMjI1XVtqXTt9XG5EWzIyNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemHpumHp+mHqOmHqemHqumHq+mHrOmHremHrumHr+mHsOmHsemHsumHs+mHtOmHtemHtumHt+mHuOmHuemHuumHu+mHvOmHvemHvumHv+mIgOmIgemIgumIg+mIhOmIhemIhumIh+mIiOmIiemIiumIi+mIjOmIjemIjumIj+mIkOmIkemIkumIk+mIlOmIlemIlumIl+mImOmImemImumIm+mInOmInemInumIn+mIoOmIoemIoumIo+mIpO+/vemIpemIpumIp+mIqOmIqemIqumIq+mIrOmIremIrumIr+mIsOmIsemIsumIs+mItOmItemItumIt+mIuOmIuemIuumIu+mIvOmIvemIvumIv+mJgOmJgemJgumJg+mJhOmJheeLu+eMl+eMk+eMoeeMiueMnueMneeMleeMoueMueeMpeeMrOeMuOeMseeNkOeNjeeNl+eNoOeNrOeNr+eNvuiIm+Wkpemjp+WkpOWkgumlo+mlp+mlqOmlqemlqumlq+mlrOmltOmlt+mlvemmgOmmhOmmh+mmiummjemmkOmmkemmk+mmlOmmleW6gOW6keW6i+W6luW6peW6oOW6ueW6teW6vuW6s+i1k+W7kuW7keW7m+W7qOW7quiGuuW/hOW/ieW/luW/j+aAg+W/ruaAhOW/oeW/pOW/vuaAheaAhuW/quW/reW/uOaAmeaAteaApuaAm+aAj+aAjeaAqeaAq+aAiuaAv+aAoeaBuOaBueaBu+aBuuaBgu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI2XS5sZW5ndGg7ICsraikgaWYoRFsyMjZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI2XVtqXV0gPSA1Nzg1NiArIGo7IGRbNTc4NTYgKyBqXSA9IERbMjI2XVtqXTt9XG5EWzIyN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemJhumJh+mJiOmJiemJiumJi+mJjOmJjemJjumJj+mJkOmJkemJkumJk+mJlOmJlemJlumJl+mJmOmJmemJmumJm+mJnOmJnemJnumJn+mJoOmJoemJoumJo+mJpOmJpemJpumJp+mJqOmJqemJqumJq+mJrOmJremJrumJr+mJsOmJsemJsumJs+mJtemJtumJt+mJuOmJuemJuumJu+mJvOmJvemJvumJv+mKgOmKgemKgumKg+mKhOmKhe+/vemKhumKh+mKiOmKiemKiumKi+mKjOmKjemKj+mKkOmKkemKkumKk+mKlOmKlemKlumKl+mKmOmKmemKmumKm+mKnOmKnemKnumKn+mKoOmKoemKoumKo+mKpOmKpemKpumKp+aBquaBveaCluaCmuaCreaCneaCg+aCkuaCjOaCm+aDrOaCu+aCseaDneaDmOaDhuaDmuaCtOaEoOaEpuaEleaEo+aDtOaEgOaEjuaEq+aFiuaFteaGrOaGlOaGp+aGt+aHlOaHteW/nemas+mXqemXq+mXsemXs+mXtemXtumXvOmXvumYg+mYhOmYhumYiOmYiumYi+mYjOmYjemYj+mYkumYlemYlumYl+mYmemYmuS4rOeIv+aIleawteaxlOaxnOaxiuayo+ayheaykOaylOayjOaxqOaxqeaxtOaxtuayhuayqeazkOazlOayreazt+azuOazseazl+aysuazoOazluazuuazq+azruayseazk+azr+azvu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI3XS5sZW5ndGg7ICsraikgaWYoRFsyMjddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI3XVtqXV0gPSA1ODExMiArIGo7IGRbNTgxMTIgKyBqXSA9IERbMjI3XVtqXTt9XG5EWzIyOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemKqOmKqemKqumKq+mKrOmKremKr+mKsOmKsemKsumKs+mKtOmKtemKtumKt+mKuOmKuemKuumKu+mKvOmKvemKvumKv+mLgOmLgemLgumLg+mLhOmLhemLhumLh+mLiemLiumLi+mLjOmLjemLjumLj+mLkOmLkemLkumLk+mLlOmLlemLlumLl+mLmOmLmemLmumLm+mLnOmLnemLnumLn+mLoOmLoemLoumLo+mLpOmLpemLpumLp+mLqO+/vemLqemLqumLq+mLrOmLremLrumLr+mLsOmLsemLsumLs+mLtOmLtemLtumLt+mLuOmLuemLuumLu+mLvOmLvemLvumLv+mMgOmMgemMgumMg+mMhOmMhemMhumMh+mMiOmMiea0uea0p+a0jOa1g+a1iOa0h+a0hOa0mea0jua0q+a1jea0rua0tea0mua1j+a1kua1lOa0s+a2kea1r+a2nua2oOa1nua2k+a2lOa1nOa1oOa1vOa1o+a4mua3h+a3hea3nua4jua2v+a3oOa4kea3pua3nea3mea4lua2q+a4jOa2rua4q+a5rua5jua5q+a6sua5n+a6hua5k+a5lOa4sua4pea5hOa7n+a6sea6mOa7oOa8rea7oua6pea6p+a6vea6u+a6t+a7l+a6tOa7j+a6j+a7gua6n+a9oua9hua9h+a8pOa8lea7uea8r+a8tua9i+a9tOa8qua8iea8qea+iea+jea+jOa9uOa9sua9vOa9uua/ke+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI4XS5sZW5ndGg7ICsraikgaWYoRFsyMjhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI4XVtqXV0gPSA1ODM2OCArIGo7IGRbNTgzNjggKyBqXSA9IERbMjI4XVtqXTt9XG5EWzIyOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemMiumMi+mMjOmMjemMjumMj+mMkOmMkemMkumMk+mMlOmMlemMlumMl+mMmOmMmemMmumMm+mMnOmMnemMnumMn+mMoOmMoemMoumMo+mMpOmMpemMpumMp+mMqOmMqemMqumMq+mMrOmMremMrumMr+mMsOmMsemMsumMs+mMtOmMtemMtumMt+mMuOmMuemMuumMu+mMvOmMvemMv+mNgOmNgemNgumNg+mNhOmNhemNhumNh+mNiOmNie+/vemNiumNi+mNjOmNjemNjumNj+mNkOmNkemNkumNk+mNlOmNlemNlumNl+mNmOmNmemNmumNm+mNnOmNnemNnumNn+mNoOmNoemNoumNo+mNpOmNpemNpumNp+mNqOmNqemNq+a/iea+p+a+uea+tua/gua/oea/rua/nua/oOa/r+eAmueAo+eAm+eAueeAteeBj+eBnuWugOWuhOWuleWuk+WupeWuuOeUr+mqnuaQtOWvpOWvruiksOWvsOi5h+ish+i+tui/k+i/lei/pei/rui/pOi/qei/pui/s+i/qOmAhemAhOmAi+mApumAkemAjemAlumAoemAtemAtumAremAr+mBhOmBkemBkumBkOmBqOmBmOmBoumBm+aauemBtOmBvemCgumCiOmCg+mCi+W9kOW9l+W9luW9mOWwu+WSq+WxkOWxmeWtseWxo+Wxpue+vOW8quW8qeW8reiJtOW8vOmsu+WxruWmgeWmg+WmjeWmqeWmquWmo++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI5XS5sZW5ndGg7ICsraikgaWYoRFsyMjldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI5XVtqXV0gPSA1ODYyNCArIGo7IGRbNTg2MjQgKyBqXSA9IERbMjI5XVtqXTt9XG5EWzIzMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemNrOmNremNrumNr+mNsOmNsemNsumNs+mNtOmNtemNtumNt+mNuOmNuemNuumNu+mNvOmNvemNvumNv+mOgOmOgemOgumOg+mOhOmOhemOhumOh+mOiOmOiemOiumOi+mOjOmOjemOjumOkOmOkemOkumOk+mOlOmOlemOlumOl+mOmOmOmemOmumOm+mOnOmOnemOnumOn+mOoOmOoemOoumOo+mOpOmOpemOpumOp+mOqOmOqemOqumOq++/vemOrOmOremOrumOr+mOsOmOsemOsumOs+mOtOmOtemOtumOt+mOuOmOuemOuumOu+mOvOmOvemOvumOv+mPgOmPgemPgumPg+mPhOmPhemPhumPh+mPiOmPiemPi+mPjOmPjeWml+WniuWmq+WmnuWmpOWnkuWmsuWmr+Wnl+WmvuWoheWohuWnneWoiOWno+WnmOWnueWojOWoieWosuWotOWokeWoo+Wok+WpgOWpp+WpiuWpleWovOWpouWpteiDrOWqquWqm+Wpt+WpuuWqvuWrq+WqsuWrkuWrlOWquOWroOWro+WrseWrluWrpuWrmOWrnOWsieWsl+WsluWssuWst+WtgOWwleWwnOWtmuWtpeWts+WtkeWtk+Wtoumptempt+mpuOmpuumpv+mpvemqgOmqgemqhemqiOmqiumqkOmqkumqk+mqlumqmOmqm+mqnOmqnemqn+mqoOmqoumqo+mqpemqp+e6n+e6oee6o+e6pee6qOe6qe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMwXS5sZW5ndGg7ICsraikgaWYoRFsyMzBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMwXVtqXV0gPSA1ODg4MCArIGo7IGRbNTg4ODAgKyBqXSA9IERbMjMwXVtqXTt9XG5EWzIzMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemPjumPj+mPkOmPkemPkumPk+mPlOmPlemPl+mPmOmPmemPmumPm+mPnOmPnemPnumPn+mPoOmPoemPoumPo+mPpOmPpemPpumPp+mPqOmPqemPqumPq+mPrOmPremPrumPr+mPsOmPsemPsumPs+mPtOmPtemPtumPt+mPuOmPuemPuumPu+mPvOmPvemPvumPv+mQgOmQgemQgumQg+mQhOmQhemQhumQh+mQiOmQiemQiumQi+mQjOmQje+/vemQjumQj+mQkOmQkemQkumQk+mQlOmQlemQlumQl+mQmOmQmemQmumQm+mQnOmQnemQnumQn+mQoOmQoemQoumQo+mQpOmQpemQpumQp+mQqOmQqemQqumQq+mQrOmQremQrue6ree6sOe6vue7gOe7gee7gue7iee7i+e7jOe7kOe7lOe7l+e7m+e7oOe7oee7qOe7q+e7rue7r+e7see7sue8jee7tue7uue7u+e7vue8gee8gue8g+e8h+e8iOe8i+e8jOe8j+e8kee8kue8l+e8mee8nOe8m+e8n+e8oee8oue8o+e8pOe8pee8pue8p+e8que8q+e8rOe8ree8r+e8sOe8see8sue8s+e8teW5uueVv+W3m+eUvumCleeOjueOkeeOrueOoueOn+ePj+ePguePkeeOt+eOs+ePgOePieePiOePpeePmemhvOeQiuePqeePp+ePnueOuuePsueQj+eQqueRm+eQpueQpeeQqOeQsOeQrueQrO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMxXS5sZW5ndGg7ICsraikgaWYoRFsyMzFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMxXVtqXV0gPSA1OTEzNiArIGo7IGRbNTkxMzYgKyBqXSA9IERbMjMxXVtqXTt9XG5EWzIzMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemQr+mQsOmQsemQsumQs+mQtOmQtemQtumQt+mQuOmQuemQuumQu+mQvOmQvemQv+mRgOmRgemRgumRg+mRhOmRhemRhumRh+mRiOmRiemRiumRi+mRjOmRjemRjumRj+mRkOmRkemRkumRk+mRlOmRlemRlumRl+mRmOmRmemRmumRm+mRnOmRnemRnumRn+mRoOmRoemRoumRo+mRpOmRpemRpumRp+mRqOmRqemRqumRrOmRremRrumRr++/vemRsOmRsemRsumRs+mRtOmRtemRtumRt+mRuOmRuemRuumRu+mRvOmRvemRvumRv+mSgOmSgemSgumSg+mShOmSkemSlumSmOmTh+mTj+mTk+mTlOmTmumTpumTu+mUnOmUoOeQm+eQmueRgeeRnOeRl+eRleeRmeeRt+eRreeRvueSnOeSjueSgOeSgeeSh+eSi+eSnueSqOeSqeeSkOeSp+eTkueSuumfqumfq+mfrOadjOadk+adnuadiOadqeaepeaeh+adquads+aemOaep+adteaeqOaenuaereaei+adt+advOafsOagieafmOagiuafqeaesOagjOafmeaeteafmuaes+afneaggOafg+aeuOafouagjuafgeafveagsuags+ahoOahoeahjuahouahhOahpOaig+agneahleahpuahgeahp+ahgOagvuahiuahieagqeaiteaij+ahtOaht+aik+ahq+ajgualruajvOakn+akoOajue+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMyXS5sZW5ndGg7ICsraikgaWYoRFsyMzJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMyXVtqXV0gPSA1OTM5MiArIGo7IGRbNTkzOTIgKyBqXSA9IERbMjMyXVtqXTt9XG5EWzIzM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemUp+mUs+mUvemVg+mViOmVi+mVlemVmumVoOmVrumVtOmVtemVt+mVuOmVuemVuumVu+mVvOmVvemVvumWgOmWgemWgumWg+mWhOmWhemWhumWh+mWiOmWiemWiumWi+mWjOmWjemWjumWj+mWkOmWkemWkumWk+mWlOmWlemWlumWl+mWmOmWmemWmumWm+mWnOmWnemWnumWn+mWoOmWoemWoumWo+mWpOmWpemWpumWp+mWqOmWqemWqu+/vemWq+mWrOmWremWrumWr+mWsOmWsemWsumWs+mWtOmWtemWtumWt+mWuOmWuemWuumWu+mWvOmWvemWvumWv+mXgOmXgemXgumXg+mXhOmXhemXhumXh+mXiOmXiemXiumXi+akpOajsOaki+akgeall+ajo+akkOalseakuealoOalgualneamhOalq+amgOammOaluOaktOanjOamh+amiOanjuamiealpualo+alueamm+amp+amu+amq+amreanlOamseangeaniuann+amleanoOamjeanv+aor+anreaol+aomOappeansuaphOaovuaqoOapkOapm+aoteaqjuapueaoveaoqOapmOapvOaqkeaqkOaqqeaql+aqq+eMt+eNkuaugeauguauh+auhOaukuauk+aujeaumuaum+auoeauqui9q+i9rei9sei9sui9s+i9tei9tui9uOi9t+i9uei9uui9vOi9vui+gei+gui+hOi+h+i+i++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMzXS5sZW5ndGg7ICsraikgaWYoRFsyMzNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMzXVtqXV0gPSA1OTY0OCArIGo7IGRbNTk2NDggKyBqXSA9IERbMjMzXVtqXTt9XG5EWzIzNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemXjOmXjemXjumXj+mXkOmXkemXkumXk+mXlOmXlemXlumXl+mXmOmXmemXmumXm+mXnOmXnemXnumXn+mXoOmXoemXoumXo+mXpOmXpemXpumXp+mXrOmXv+mYh+mYk+mYmOmYm+mYnumYoOmYo+mYpOmYpemYpumYp+mYqOmYqemYq+mYrOmYremYr+mYsOmYt+mYuOmYuemYuumYvumZgemZg+mZiumZjumZj+mZkemZkumZk+mZlumZl++/vemZmOmZmemZmumZnOmZnemZnumZoOmZo+mZpemZpumZq+mZremZrumZr+mZsOmZsemZs+mZuOmZuemZuumZu+mZvOmZvemZvumZv+magOmagemagumag+mahOmah+maiemaiui+jei+jui+j+i+mOi+mui7juaIi+aIl+aIm+aIn+aIouaIoeaIpeaIpOaIrOiHp+eTr+eTtOeTv+eUj+eUkeeUk+aUtOaXruaXr+aXsOaYiuaYmeadsuaYg+aYleaYgOeCheabt+aYneaYtOaYseaYtuaYteiAhuaZn+aZlOaZgeaZj+aZluaZoeaZl+aZt+aahOaajOaap+aaneaavuabm+abnOabpuabqei0sui0s+i0tui0u+i0vei1gOi1hei1hui1iOi1iei1h+i1jei1lei1meinh+iniuini+injOinjuinj+inkOinkeeJrueKn+eJneeJpueJr+eJvueJv+eKhOeKi+eKjeeKj+eKkuaMiOaMsuaOsO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM0XS5sZW5ndGg7ICsraikgaWYoRFsyMzRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM0XVtqXV0gPSA1OTkwNCArIGo7IGRbNTk5MDQgKyBqXSA9IERbMjM0XVtqXTt9XG5EWzIzNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemajOmajumakemakumak+malemalumamumam+manemanuman+maoOmaoemaoumao+mapOmapemapumaqOmaqemaqumaq+marOmaremarumar+masemasumatOmatemat+mauOmauumau+mav+mbgumbg+mbiOmbiumbi+mbkOmbkembk+mblOmblumbl+mbmOmbmembmumbm+mbnOmbnembnumbn+mboemboumbo+mbpOmbpembpumbp+mbq++/vembrOmbrembrumbsOmbsembsumbtOmbtembuOmbuumbu+mbvOmbvembv+mcgumcg+mchemciumci+mcjOmckOmckemckumclOmclemcl+mcmOmcmemcmumcm+mcnemcn+mcoOaQv+aTmOiAhOavquavs+avveavteavueawheawh+awhuawjeawleawmOawmeawmuawoeawqeawpOawquawsuaUteaVleaVq+eJjeeJkueJlueIsOiZouWIluiCn+iCnOiCk+iCvOaciuiCveiCseiCq+iCreiCtOiCt+iDp+iDqOiDqeiDquiDm+iDguiDhOiDmeiDjeiDl+ackOiDneiDq+iDseiDtOiDreiEjeiEjuiDsuiDvOacleiEkuixmuiEtuiEnuiErOiEmOiEsuiFiOiFjOiFk+iFtOiFmeiFmuiFseiFoOiFqeiFvOiFveiFreiFp+WhjeWqteiGiOiGguiGkea7leiGo+iGquiHjOacpuiHiuiGu++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM1XS5sZW5ndGg7ICsraikgaWYoRFsyMzVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM1XVtqXV0gPSA2MDE2MCArIGo7IGRbNjAxNjAgKyBqXSA9IERbMjM1XVtqXTt9XG5EWzIzNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemcoemcoumco+mcpOmcpemcpumcp+mcqOmcqemcq+mcrOmcrumcr+mcsemcs+mctOmctemctumct+mcuumcu+mcvOmcvemcv+mdgOmdgemdgumdg+mdhOmdhemdhumdh+mdiOmdiemdiumdi+mdjOmdjemdjumdj+mdkOmdkemdlOmdlemdl+mdmOmdmumdnOmdnemdn+mdo+mdpOmdpumdp+mdqOmdqumdq+mdrOmdremdrumdr+mdsOmdse+/vemdsumdtemdt+mduOmduemduumdu+mdvemdvumdv+megOmegemegumeg+mehOmehumeh+meiOmeiemeiumejOmejumej+mekOmek+melemelumel+memememumem+menOmeneiHgeiGpuaspOast+asueatg+athuatmemjkemjkumjk+mjlemjmemjmuaus+W9gOavguins+aWkOm9keaWk+aWvOaXhuaXhOaXg+aXjOaXjuaXkuaXlueCgOeCnOeClueCneeCu+eDgOeCt+eCq+eCseeDqOeDiueEkOeEk+eElueEr+eEseeFs+eFnOeFqOeFheeFsueFiueFuOeFuueGmOeGs+eGteeGqOeGoOeHoOeHlOeHp+eHueeIneeIqOeBrOeEmOeFpueGueaIvuaIveaJg+aJiOaJieeku+elgOelhuelieelm+elnOelk+elmuelouell+eloOelr+elp+eluuemheemiuemmuemp+ems+W/keW/kO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM2XS5sZW5ndGg7ICsraikgaWYoRFsyMzZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM2XVtqXV0gPSA2MDQxNiArIGo7IGRbNjA0MTYgKyBqXSA9IERbMjM2XVtqXTt9XG5EWzIzN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemenumen+meoemeoumepOmepemepumep+meqOmeqemequmerOmerumesOmesemes+metemetumet+meuOmeuemeuumeu+mevOmevemevumev+mfgOmfgemfgumfg+mfhOmfhemfhumfh+mfiOmfiemfiumfi+mfjOmfjemfjumfj+mfkOmfkemfkumfk+mflOmflemflumfl+mfmOmfmemfmumfm+mfnOmfnemfnumfn+mfoOmfoemfoumfo++/vemfpOmfpemfqOmfrumfr+mfsOmfsemfsumftOmft+mfuOmfuemfuumfu+mfvOmfvemfvumfv+mggOmggemggumgg+mghOmghemghumgh+mgiOmgiemgiumgi+mgjOmgjemgjuaAvOaBneaBmuaBp+aBgeaBmeaBo+aCq+aEhuaEjeaFneaGqeaGneaHi+aHkeaIhuiCgOiBv+ayk+aztua3vOeftuefuOeggOegieegl+egmOegkeaWq+egreegnOegneegueeguuegu+egn+egvOegpeegrOego+egqeehjuehreehluehl+egpuehkOehh+ehjOehqueim+eik+eimueih+einOeioeeio+eisueiueeipeejlOejmeejieejrOejsuekheejtOekk+ekpOeknuektOm+m+m7uem7u+m7vOebseechOecjeebueech+eciOecmuecouecmeecreecpuecteecuOedkOedkeedh+edg+edmuedqO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM3XS5sZW5ndGg7ICsraikgaWYoRFsyMzddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM3XVtqXV0gPSA2MDY3MiArIGo7IGRbNjA2NzIgKyBqXSA9IERbMjM3XVtqXTt9XG5EWzIzOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemgj+mgkOmgkemgkumgk+mglOmglemglumgl+mgmOmgmemgmumgm+mgnOmgnemgnumgn+mgoOmgoemgoumgo+mgpOmgpemgpumgp+mgqOmgqemgqumgq+mgrOmgremgrumgr+mgsOmgsemgsumgs+mgtOmgtemgtumgt+mguOmguemguumgu+mgvOmgvemgvumgv+mhgOmhgemhgumhg+mhhOmhhemhhumhh+mhiOmhiemhiumhi+mhjOmhje+/vemhjumhj+mhkOmhkemhkumhk+mhlOmhlemhlumhl+mhmOmhmemhmumhm+mhnOmhnemhnumhn+mhoOmhoemhoumho+mhpOmhpemhpumhp+mhqOmhqemhqumhq+mhrOmhremhruedouedpeedv+eejeedveeegOeejOeekeeen+eeoOeesOeeteeeveeUuueVgOeVjueVi+eViOeVm+eVsueVueeWg+e9mOe9oee9n+ipiOe9qOe9tOe9see9uee+gee9vuebjeebpeigsumShemShumSh+mSi+mSiumSjOmSjemSj+mSkOmSlOmSl+mSlemSmumSm+mSnOmSo+mSpOmSq+mSqumSremSrOmSr+mSsOmSsumStOmStumSt+mSuOmSuemSuumSvOmSvemSv+mThOmTiOmTiemTiumTi+mTjOmTjemTjumTkOmTkemTkumTlemTlumTl+mTmemTmOmTm+mTnumTn+mToOmToumTpOmTpemTp+mTqOmTqu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM4XS5sZW5ndGg7ICsraikgaWYoRFsyMzhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM4XVtqXV0gPSA2MDkyOCArIGo7IGRbNjA5MjggKyBqXSA9IERbMjM4XVtqXTt9XG5EWzIzOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemhr+mhsOmhsemhsumhs+mhtOmii+mijumikumilemimemio+miqOmiqemiqumiq+mirOmiremirumir+misOmisemisumis+mitOmitemitumit+miuOmiuemiuumiu+mivOmivemivumiv+mjgOmjgemjgumjg+mjhOmjhemjhumjh+mjiOmjiemjiumji+mjjOmjjemjj+mjkOmjlOmjlumjl+mjm+mjnOmjnemjoOmjoemjoumjo+mjpO+/vemjpemjpumjqemjqumjq+mjrOmjremjrumjr+mjsOmjsemjsumjs+mjtOmjtemjtumjt+mjuOmjuemjuumju+mjvOmjvemjvumjv+mkgOmkgemkgumkg+mkhOmkhemkhumkh+mTqemTq+mTrumTr+mTs+mTtOmTtemTt+mTuemTvOmTvemTv+mUg+mUgumUhumUh+mUiemUiumUjemUjumUj+mUkumUk+mUlOmUlemUlumUmOmUm+mUnemUnumUn+mUoumUqumUq+mUqemUrOmUsemUsumUtOmUtumUt+mUuOmUvOmUvumUv+mVgumUtemVhOmVhemVhumViemVjOmVjumVj+mVkumVk+mVlOmVlumVl+mVmOmVmemVm+mVnumVn+mVnemVoemVoumVpOmVpemVpumVp+mVqOmVqemVqumVq+mVrOmVr+mVsemVsumVs+mUuuefp+efrOmbieenleenreeno+enq+eohuW1h+eog+eogueonueolO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM5XS5sZW5ndGg7ICsraikgaWYoRFsyMzldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM5XVtqXV0gPSA2MTE4NCArIGo7IGRbNjExODQgKyBqXSA9IERbMjM5XVtqXTt9XG5EWzI0MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemkiOmkiemkiumki+mkjOmkjumkj+mkkemkkumkk+mklOmklemklumkl+mkmOmkmemkmumkm+mknOmknemknumkn+mkoOmkoemkoumko+mkpOmkpemkpumkp+mkqOmkqemkqumkq+mkrOmkremkr+mksOmksemksumks+mktOmktemktumkt+mkuOmkuemkuumku+mkvOmkvemkvumkv+mlgOmlgemlgumlg+mlhOmlhemlhumlh+mliOmlie+/vemliumli+mljOmljemljumlj+mlkOmlkemlkumlk+mllumll+mlmOmlmemlmumlm+mlnOmlnemlnumln+mloOmloemloumlpOmlpumls+mluOmluemlu+mlvummgummg+mmieeoueeot+epkem7j+mmpeepsOeaiOeajueak+eameeapOeTnueToOeUrOm4oOm4oum4qOm4qem4qum4q+m4rOm4sum4sem4tum4uOm4t+m4uem4uum4vum5gem5gum5hOm5hum5h+m5iOm5iem5i+m5jOm5jum5kem5lem5l+m5mum5m+m5nOm5num5o+m5pum5p+m5qOm5qem5qum5q+m5rOm5sem5rem5s+eWkueWlOeWlueWoOeWneeWrOeWo+eWs+eWtOeWuOeXhOeWseeWsOeXg+eXgueXlueXjeeXo+eXqOeXpueXpOeXq+eXp+eYg+eXseeXvOeXv+eYkOeYgOeYheeYjOeYl+eYiueYpeeYmOeYleeYme+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQwXS5sZW5ndGg7ICsraikgaWYoRFsyNDBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQwXVtqXV0gPSA2MTQ0MCArIGo7IGRbNjE0NDAgKyBqXSA9IERbMjQwXVtqXTt9XG5EWzI0MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemmjOmmjummmummm+mmnOmmnemmnummn+mmoOmmoemmoummo+mmpOmmpummp+mmqemmqummq+mmrOmmremmrummr+mmsOmmsemmsumms+mmtOmmtemmtummt+mmuOmmuemmuummu+mmvOmmvemmvummv+mngOmngemngumng+mnhOmnhemnhumnh+mniOmniemniumni+mnjOmnjemnjumnj+mnkOmnkemnkumnk+mnlOmnlemnlumnl+mnmO+/vemnmemnmumnm+mnnOmnnemnnumnn+mnoOmnoemnoumno+mnpOmnpemnpumnp+mnqOmnqemnqumnq+mnrOmnremnrumnr+mnsOmnsemnsumns+mntOmntemntumnt+mnuOmnueeYm+eYvOeYoueYoOeZgOeYreeYsOeYv+eYteeZg+eYvueYs+eZjeeZnueZlOeZnOeZlueZq+eZr+e/iuerpuepuOepueeqgOeqhueqiOeqleeqpueqoOeqrOeqqOeqreeqs+ihpOihqeihsuihveihv+iiguiiouijhuiit+iivOijieijouijjuijo+ijpeijseikmuijvOijqOijvuijsOikoeikmeikk+ikm+ikiuiktOikq+iktuilgeilpuilu+eWi+iDpeeasueatOefnOiAkuiAlOiAluiAnOiAoOiAouiApeiApuiAp+iAqeiAqOiAseiAi+iAteiBg+iBhuiBjeiBkuiBqeiBseimg+mhuOmigOmig++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQxXS5sZW5ndGg7ICsraikgaWYoRFsyNDFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQxXVtqXV0gPSA2MTY5NiArIGo7IGRbNjE2OTYgKyBqXSA9IERbMjQxXVtqXTt9XG5EWzI0Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemnuumnu+mnvOmnvemnvumnv+mogOmogemogumog+mohOmohemohumoh+moiOmoiemoiumoi+mojOmojemojumoj+mokOmokemokumok+molOmolemolumol+momOmomemomumom+monOmonemonumon+mooOmooemooumoo+mopOmopemopumop+moqOmoqemoqumoq+morOmoremorumor+mosOmosemosumos+motOmotemotumot+mouO+/vemouemouumou+movOmovemovumov+mpgOmpgempgumpg+mphOmphemphumph+mpiOmpiempiumpi+mpjOmpjempjumpj+mpkOmpkempkumpk+mplOmplemplumpl+mpmOmpmemiiemijOmijemij+milOmimumim+minumin+mioemioumipemipuiZjeiZlOiZrOiZruiZv+iZuuiZvOiZu+iaqOiajeiai+iarOianeiap+iao+iaquiak+iaqeiatuibhOiateibjuiasOiauuiaseiar+ibieibj+iatOibqeibseibsuibreibs+ibkOick+ibnuibtOibn+ibmOibkeicg+ich+ibuOiciOiciuicjeicieico+icu+icnuicpeicruicmuicvuidiOictOicseicqeict+icv+ieguicouidveidvuidu+idoOidsOidjOidruiei+idk+ido+idvOidpOidmeidpeiek+ier+ieqOifku+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQyXS5sZW5ndGg7ICsraikgaWYoRFsyNDJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQyXVtqXV0gPSA2MTk1MiArIGo7IGRbNjE5NTIgKyBqXSA9IERbMjQyXVtqXTt9XG5EWzI0M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vempmumpm+mpnOmpnempnumpn+mpoOmpoempoumpo+mppOmppemppumpp+mpqOmpqempqumpq+mpsumqg+mqiemqjemqjumqlOmqlemqmemqpumqqemqqumqq+mqrOmqremqrumqr+mqsumqs+mqtOmqtemquemqu+mqvemqvumqv+mrg+mrhOmrhumrh+mriOmriemriumrjemrjumrj+mrkOmrkumrlOmrlemrlumrl+mrmemrmumrm+mrnO+/vemrnemrnumroOmroumro+mrpOmrpemrp+mrqOmrqemrqumrrOmrrumrsOmrsemrsumrs+mrtOmrtemrtumrt+mruOmruumrvOmrvemrvumrv+msgOmsgemsgumshOmshemshuifhuieiOieheiereiel+ieg+ieq+ifpeierOieteies+ifi+ifk+ieveifkeifgOifiuifm+ifquifoOifruigluigk+ifvuigiuigm+igoeigueigvOe8tue9gue9hOe9heiIkOeruuerveesiOesg+eshOesleesiuesq+esj+eth+esuOesquesmeesruesseesoOespeespOess+esvuesnuetmOetmuetheetteetjOetneetoOetruetu+etouetsuetseeukOeupueup+euuOeurOeuneeuqOeuheeuqueunOeuoueuq+eutOevkeevgeevjOevneevmuevpeevpuevquewjOevvuevvOewj+ewluewi++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQzXS5sZW5ndGg7ICsraikgaWYoRFsyNDNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQzXVtqXV0gPSA2MjIwOCArIGo7IGRbNjIyMDggKyBqXSA9IERbMjQzXVtqXTt9XG5EWzI0NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemsh+msiemsiumsi+msjOmsjemsjumskOmskemskumslOmslemslumsl+msmOmsmemsmumsm+msnOmsnemsnumsoOmsoemsoumspOmspemspumsp+msqOmsqemsqumsq+msrOmsremsrumssOmssemss+mstOmstemstumst+msuOmsuemsuumsvemsvumsv+mtgOmthumtiumti+mtjOmtjumtkOmtkumtk+mtlemtlumtl+mtmOmtmemtmu+/vemtm+mtnOmtnemtnumtn+mtoOmtoemtoumto+mtpOmtpemtpumtp+mtqOmtqemtqumtq+mtrOmtremtrumtr+mtsOmtsemtsumts+mttOmttemttumtt+mtuOmtuemtuumtu+ewn+ewquewpuewuOexgeexgOiHvuiIgeiIguiIhOiHrOihhOiIoeiIouiIo+iIreiIr+iIqOiIq+iIuOiIu+iIs+iItOiIvuiJhOiJieiJi+iJj+iJmuiJn+iJqOihvuiiheiiiOijmOijn+ilnue+nee+n+e+p+e+r+e+sOe+suexvOaVieeykeeyneeynOeynueyoueysueyvOeyveezgeezh+ezjOezjeeziOezheezl+ezqOiJruaaqOe+v+e/jue/lee/pee/oee/pue/qee/rue/s+ezuOe1t+e2pue2rue5h+e6m+m6uOm6tOi1s+i2hOi2lOi2kei2sei1p+i1reixh+ixiemFiumFkOmFjumFj+mFpO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ0XS5sZW5ndGg7ICsraikgaWYoRFsyNDRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ0XVtqXV0gPSA2MjQ2NCArIGo7IGRbNjI0NjQgKyBqXSA9IERbMjQ0XVtqXTt9XG5EWzI0NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemtvOmtvemtvumtv+mugOmugemugumug+muhOmuhemuhumuh+muiOmuiemuiumui+mujOmujemujumuj+mukOmukemukumuk+mulOmulemulumul+mumOmumemumumum+munOmunemunumun+muoOmuoemuoumuo+mupOmupemupumup+muqOmuqemuqumuq+murOmuremurumur+musOmusemusumus+mutOmutemutumut+muuOmuuemuuu+/vemuu+muvOmuvemuvumuv+mvgOmvgemvgumvg+mvhOmvhemvhumvh+mviOmviemviumvi+mvjOmvjemvjumvj+mvkOmvkemvkumvk+mvlOmvlemvlumvl+mvmOmvmemvmumvm+mFoumFoemFsOmFqemFr+mFvemFvumFsumFtOmFuemGjOmGhemGkOmGjemGkemGoumGo+mGqumGremGrumGr+mGtemGtOmGuuixlem5vui2uOi3q+i4hei5mei5qei2tei2v+i2vOi2uui3hOi3lui3l+i3mui3nui3jui3j+i3m+i3hui3rOi3t+i3uOi3o+i3uei3u+i3pOi4iei3vei4lOi4nei4n+i4rOi4rui4o+i4r+i4uui5gOi4uei4tei4vei4sei5iei5gei5gui5kei5kui5iui5sOi5tui5vOi5r+i5tOi6hei6j+i6lOi6kOi6nOi6nuixuOiyguiyiuiyheiymOiylOaWm+inluinnuinmuinnO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ1XS5sZW5ndGg7ICsraikgaWYoRFsyNDVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ1XVtqXV0gPSA2MjcyMCArIGo7IGRbNjI3MjAgKyBqXSA9IERbMjQ1XVtqXTt9XG5EWzI0Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemvnOmvnemvnumvn+mvoOmvoemvoumvo+mvpOmvpemvpumvp+mvqOmvqemvqumvq+mvrOmvremvrumvr+mvsOmvsemvsumvs+mvtOmvtemvtumvt+mvuOmvuemvuumvu+mvvOmvvemvvumvv+mwgOmwgemwgumwg+mwhOmwhemwhumwh+mwiOmwiemwiumwi+mwjOmwjemwjumwj+mwkOmwkemwkumwk+mwlOmwlemwlumwl+mwmOmwmemwmu+/vemwm+mwnOmwnemwnumwn+mwoOmwoemwoumwo+mwpOmwpemwpumwp+mwqOmwqemwqumwq+mwrOmwremwrumwr+mwsOmwsemwsumws+mwtOmwtemwtumwt+mwuOmwuemwuumwu+inpeinq+inr+iovuispumdk+mbqembs+mbr+mchumcgemciOmcj+mcjumcqumcremcsOmcvum+gOm+g+m+hem+hum+h+m+iOm+iem+ium+jOm7vum8i+m8jemauemavOmavembjumbkueev+mboOmKjumKrumLiOmMvumNqumPiumOj+mQvumRq+mxv+mygumyhemyhumyh+myiOeoo+myi+myjumykOmykemykumylOmylemymumym+mynumyn+myoOmyoemyoumyo+mypemypumyp+myqOmyqemyq+myremyrumysOmysemysumys+mytOmytemytumyt+myuumyu+myvOmyvemzhOmzhemzhumzh+mziumzi++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ2XS5sZW5ndGg7ICsraikgaWYoRFsyNDZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ2XVtqXV0gPSA2Mjk3NiArIGo7IGRbNjI5NzYgKyBqXSA9IERbMjQ2XVtqXTt9XG5EWzI0N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemwvOmwvemwvumwv+mxgOmxgemxgumxg+mxhOmxhemxhumxh+mxiOmxiemxiumxi+mxjOmxjemxjumxj+mxkOmxkemxkumxk+mxlOmxlemxlumxl+mxmOmxmemxmumxm+mxnOmxnemxnumxn+mxoOmxoemxoumxo+mxpOmxpemxpumxp+mxqOmxqemxqumxq+mxrOmxremxrumxr+mxsOmxsemxsumxs+mxtOmxtemxtumxt+mxuOmxuemxuu+/vemxu+mxvemxvumygOmyg+myhOmyiemyiumyjOmyj+myk+mylumyl+mymOmymemynemyqumyrOmyr+myuemyvumyv+mzgOmzgemzgumziOmziemzkemzkumzmumzm+mzoOmzoemzjOmzjemzjumzj+mzkOmzk+mzlOmzlemzl+mzmOmzmemznOmznemzn+mzoumdvOmehemekemekumelOmer+meq+meo+mesumetOmqsemqsOmqt+m5mOmqtumquumqvOmrgemrgOmrhemrgumri+mrjOmrkemthemtg+mth+mtiemtiOmtjemtkemjqOmkjemkrumllemllOmrn+mroemrpumrr+mrq+mru+mrremruemsiOmsj+msk+msn+mso+m6vem6vue4u+m6gum6h+m6iOm6i+m6kumPlum6nem6n+m7m+m7nOm7nem7oOm7n+m7oum7qem7p+m7pem7qum7r+m8oum8rOm8r+m8uem8t+m8vem8vum9hO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ3XS5sZW5ndGg7ICsraikgaWYoRFsyNDddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ3XVtqXV0gPSA2MzIzMiArIGo7IGRbNjMyMzIgKyBqXSA9IERbMjQ3XVtqXTt9XG5EWzI0OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemzo+mzpOmzpemzpumzp+mzqOmzqemzqumzq+mzrOmzremzrumzr+mzsOmzsemzsumzs+mztOmztemztumzt+mzuOmzuemzuumzu+mzvOmzvemzvumzv+m0gOm0gem0gum0g+m0hOm0hem0hum0h+m0iOm0iem0ium0i+m0jOm0jem0jum0j+m0kOm0kem0kum0k+m0lOm0lem0lum0l+m0mOm0mem0mum0m+m0nOm0nem0num0n+m0oOm0oe+/vem0oum0o+m0pOm0pem0pum0p+m0qOm0qem0qum0q+m0rOm0rem0rum0r+m0sOm0sem0sum0s+m0tOm0tem0tum0t+m0uOm0uem0uum0u+m0vOm0vem0vum0v+m1gOm1gem1gu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ4XS5sZW5ndGg7ICsraikgaWYoRFsyNDhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ4XVtqXV0gPSA2MzQ4OCArIGo7IGRbNjM0ODggKyBqXSA9IERbMjQ4XVtqXTt9XG5EWzI0OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem1g+m1hOm1hem1hum1h+m1iOm1iem1ium1i+m1jOm1jem1jum1j+m1kOm1kem1kum1k+m1lOm1lem1lum1l+m1mOm1mem1mum1m+m1nOm1nem1num1n+m1oOm1oem1oum1o+m1pOm1pem1pum1p+m1qOm1qem1qum1q+m1rOm1rem1rum1r+m1sOm1sem1sum1s+m1tOm1tem1tum1t+m1uOm1uem1uum1u+m1vOm1vem1vum1v+m2gOm2ge+/vem2gum2g+m2hOm2hem2hum2h+m2iOm2iem2ium2i+m2jOm2jem2jum2j+m2kOm2kem2kum2k+m2lOm2lem2lum2l+m2mOm2mem2mum2m+m2nOm2nem2num2n+m2oOm2oem2ou+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ5XS5sZW5ndGg7ICsraikgaWYoRFsyNDldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ5XVtqXV0gPSA2Mzc0NCArIGo7IGRbNjM3NDQgKyBqXSA9IERbMjQ5XVtqXTt9XG5EWzI1MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem2o+m2pOm2pem2pum2p+m2qOm2qem2qum2q+m2rOm2rem2rum2r+m2sOm2sem2sum2s+m2tOm2tem2tum2t+m2uOm2uem2uum2u+m2vOm2vem2vum2v+m3gOm3gem3gum3g+m3hOm3hem3hum3h+m3iOm3iem3ium3i+m3jOm3jem3jum3j+m3kOm3kem3kum3k+m3lOm3lem3lum3l+m3mOm3mem3mum3m+m3nOm3nem3num3n+m3oOm3oe+/vem3oum3o+m3pOm3pem3pum3p+m3qOm3qem3qum3q+m3rOm3rem3rum3r+m3sOm3sem3sum3s+m3tOm3tem3tum3t+m3uOm3uem3uum3u+m3vOm3vem3vum3v+m4gOm4gem4gu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjUwXS5sZW5ndGg7ICsraikgaWYoRFsyNTBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjUwXVtqXV0gPSA2NDAwMCArIGo7IGRbNjQwMDAgKyBqXSA9IERbMjUwXVtqXTt9XG5EWzI1MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem4g+m4hOm4hem4hum4h+m4iOm4iem4ium4i+m4jOm4jem4jum4j+m4kOm4kem4kum4k+m4lOm4lem4lum4l+m4mOm4mem4mum4m+m4nOm4nem4num4pOm4p+m4rum4sOm4tOm4u+m4vOm5gOm5jem5kOm5kum5k+m5lOm5lum5mem5nem5n+m5oOm5oem5oum5pem5rum5r+m5sum5tOm5tem5tum5t+m5uOm5uem5uum5u+m5vOm5vem6gO+/vem6gem6g+m6hOm6hem6hum6iem6ium6jOm6jem6jum6j+m6kOm6kem6lOm6lem6lum6l+m6mOm6mem6mum6m+m6nOm6num6oOm6oem6oum6o+m6pOm6pem6p+m6qOm6qem6qu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjUxXS5sZW5ndGg7ICsraikgaWYoRFsyNTFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjUxXVtqXV0gPSA2NDI1NiArIGo7IGRbNjQyNTYgKyBqXSA9IERbMjUxXVtqXTt9XG5EWzI1Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem6q+m6rOm6rem6rum6r+m6sOm6sem6sum6s+m6tem6tum6t+m6uem6uum6vOm6v+m7gOm7gem7gum7g+m7hem7hum7h+m7iOm7ium7i+m7jOm7kOm7kum7k+m7lem7lum7l+m7mem7mum7num7oem7o+m7pOm7pum7qOm7q+m7rOm7rem7rum7sOm7sem7sum7s+m7tOm7tem7tum7t+m7uOm7uum7vem7v+m8gOm8gem8gum8g+m8hOm8he+/vem8hum8h+m8iOm8iem8ium8jOm8j+m8kem8kum8lOm8lem8lum8mOm8mum8m+m8nOm8nem8num8n+m8oem8o+m8pOm8pem8pum8p+m8qOm8qem8qum8q+m8rem8rum8sOm8se+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjUyXS5sZW5ndGg7ICsraikgaWYoRFsyNTJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjUyXVtqXV0gPSA2NDUxMiArIGo7IGRbNjQ1MTIgKyBqXSA9IERbMjUyXVtqXTt9XG5EWzI1M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem8sum8s+m8tOm8tem8tum8uOm8uum8vOm8v+m9gOm9gem9gum9g+m9hem9hum9h+m9iOm9iem9ium9i+m9jOm9jem9jum9j+m9kum9k+m9lOm9lem9lum9l+m9mOm9mem9mum9m+m9nOm9nem9num9n+m9oOm9oem9oum9o+m9pOm9pem9pum9p+m9qOm9qem9qum9q+m9rOm9rem9rum9r+m9sOm9sem9sum9s+m9tOm9tem9tum9t+m9uO+/vem9uem9uum9u+m9vOm9vem9vum+gem+gum+jem+jum+j+m+kOm+kem+kum+k+m+lOm+lem+lum+l+m+mOm+nOm+nem+num+oem+oum+o+m+pOm+pe+krO+lue+mle+np++nse+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjUzXS5sZW5ndGg7ICsraikgaWYoRFsyNTNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjUzXVtqXV0gPSA2NDc2OCArIGo7IGRbNjQ3NjggKyBqXSA9IERbMjUzXVtqXTt9XG5EWzI1NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+ojO+oje+oju+oj++oke+ok++olO+omO+on++ooO+ooe+oo++opO+op++oqO+oqe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjU0XS5sZW5ndGg7ICsraikgaWYoRFsyNTRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjU0XVtqXV0gPSA2NTAyNCArIGo7IGRbNjUwMjQgKyBqXSA9IERbMjU0XVtqXTt9XG5yZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IGQgfTsgfSkoKTtcbmNwdGFibGVbOTQ5XSA9IChmdW5jdGlvbigpeyB2YXIgZCA9IFtdLCBlID0ge30sIEQgPSBbXSwgajtcbkRbMF0gPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMF0ubGVuZ3RoOyArK2opIGlmKERbMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFswXVtqXV0gPSAwICsgajsgZFswICsgal0gPSBEWzBdW2pdO31cbkRbMTI5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96rCC6rCD6rCF6rCG6rCL6rCM6rCN6rCO6rCP6rCY6rCe6rCf6rCh6rCi6rCj6rCl6rCm6rCn6rCo6rCp6rCq6rCr6rCu6rCy6rCz6rC077+977+977+977+977+977+96rC16rC26rC36rC66rC76rC96rC+6rC/6rGB6rGC6rGD6rGE6rGF6rGG6rGH6rGI6rGJ6rGK6rGM6rGO6rGP6rGQ6rGR6rGS6rGT6rGV77+977+977+977+977+977+96rGW6rGX6rGZ6rGa6rGb6rGd6rGe6rGf6rGg6rGh6rGi6rGj6rGk6rGl6rGm6rGn6rGo6rGp6rGq6rGr6rGs6rGt6rGu6rGv6rGy6rGz6rG16rG26rG56rG76rG86rG96rG+6rG/6rKC6rKH6rKI6rKN6rKO6rKP6rKR6rKS6rKT6rKV6rKW6rKX6rKY6rKZ6rKa6rKb6rKe6rKi6rKj6rKk6rKl6rKm6rKn6rKr6rKt6rKu6rKx6rKy6rKz6rK06rK16rK26rK36rK66rK+6rK/6rOA6rOC6rOD6rOF6rOG6rOH6rOJ6rOK6rOL6rON6rOO6rOP6rOQ6rOR6rOS6rOT6rOU6rOW6rOY6rOZ6rOa6rOb6rOc6rOd6rOe6rOf6rOi6rOj6rOl6rOm6rOp6rOr6rOt6rOu6rOy6rO06rO36rO46rO56rO66rO76rO+6rO/6rSB6rSC6rSD6rSF6rSH6rSI6rSJ6rSK6rSL6rSO6rSQ6rSS6rST77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMjldLmxlbmd0aDsgKytqKSBpZihEWzEyOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMjldW2pdXSA9IDMzMDI0ICsgajsgZFszMzAyNCArIGpdID0gRFsxMjldW2pdO31cbkRbMTMwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96rSU6rSV6rSW6rSX6rSZ6rSa6rSb6rSd6rSe6rSf6rSh6rSi6rSj6rSk6rSl6rSm6rSn6rSo6rSq6rSr6rSu6rSv6rSw6rSx6rSy6rSz77+977+977+977+977+977+96rS26rS36rS56rS66rS76rS96rS+6rS/6rWA6rWB6rWC6rWD6rWG6rWI6rWK6rWL6rWM6rWN6rWO6rWP6rWR6rWS6rWT6rWV6rWW6rWX77+977+977+977+977+977+96rWZ6rWa6rWb6rWc6rWd6rWe6rWf6rWg6rWi6rWk6rWl6rWm6rWn6rWo6rWp6rWq6rWr6rWu6rWv6rWx6rWy6rW36rW46rW56rW66rW+6raA6raD6raE6raF6raG6raH6raK6raL6raN6raO6raP6raR6raS6raT6raU6raV6raW6raX6raY6raZ6raa6rab6rae6raf6rag6rah6rai6raj6ral6ram6ran6rao6rap6raq6rar6ras6rat6rau6rav6raw6rax6ray6raz6ra06ra16ra26ra46ra56ra66ra76ra86ra96ra+6ra/6reC6reD6reF6reG6reH6reJ6reK6reL6reM6reN6reO6reP6reS6reU6reV6reW6reX6reY6reZ6rea6reb6red6ree6ref6reh6rei6rej6rel6rem6ren6reo6rep6req6rer6res6ret6reu6rev6rew6rex6rey6rez6re06re16re26re377+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzBdLmxlbmd0aDsgKytqKSBpZihEWzEzMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzBdW2pdXSA9IDMzMjgwICsgajsgZFszMzI4MCArIGpdID0gRFsxMzBdW2pdO31cbkRbMTMxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96re66re76re96re+6riC6riD6riE6riF6riG6riH6riK6riM6riO6riP6riQ6riR6riS6riT6riV6riW6riX6riY6riZ6ria6rib6ric77+977+977+977+977+977+96rid6rie6rif6rig6rih6rii6rij6rik6ril6rim6rin6rio6rip6riq6rir6ris6rit6riu6riv6riy6riz6ri16ri26ri56ri76ri877+977+977+977+977+977+96ri96ri+6ri/6rmC6rmE6rmH6rmI6rmJ6rmL6rmP6rmR6rmS6rmT6rmV6rmX6rmY6rmZ6rma6rmb6rme6rmi6rmj6rmk6rmm6rmn6rmq6rmr6rmt6rmu6rmv6rmx6rmy6rmz6rm06rm16rm26rm36rm66rm+6rm/6rqA6rqB6rqC6rqD6rqG6rqH6rqI6rqJ6rqK6rqL6rqN6rqO6rqP6rqQ6rqR6rqS6rqT6rqU6rqV6rqW6rqX6rqY6rqZ6rqa6rqb6rqc6rqd6rqe6rqf6rqg6rqh6rqi6rqj6rqk6rql6rqm6rqn6rqo6rqp6rqq6rqr6rqs6rqt6rqu6rqv6rqw6rqx6rqy6rqz6rq06rq16rq26rq36rq46rq56rq66rq76rq/6ruB6ruC6ruD6ruF6ruG6ruH6ruI6ruJ6ruK6ruL6ruO6ruS6ruT6ruU6ruV6ruW6ruX6rua6rub6rud6rue6ruf6rug6ruh6rui6ruj6ruk6rul77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzFdLmxlbmd0aDsgKytqKSBpZihEWzEzMV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzFdW2pdXSA9IDMzNTM2ICsgajsgZFszMzUzNiArIGpdID0gRFsxMzFdW2pdO31cbkRbMTMyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96rum6run6rup6ruq6rus6ruu6ruv6ruw6rux6ruy6ruz6ru16ru26ru36ru56ru66ru76ru96ru+6ru/6ryA6ryB6ryC6ryD6ryE6ryF77+977+977+977+977+977+96ryG6ryJ6ryK6ryL6ryM6ryO6ryP6ryR6ryS6ryT6ryU6ryV6ryW6ryX6ryY6ryZ6rya6ryb6ryc6ryd6rye6ryf6ryg6ryh6ryi6ryj77+977+977+977+977+977+96ryk6ryl6rym6ryn6ryo6ryp6ryq6ryr6ryu6ryv6ryx6ryz6ry16ry26ry36ry46ry56ry66ry76ry+6r2A6r2E6r2F6r2G6r2H6r2K6r2L6r2M6r2N6r2O6r2P6r2R6r2S6r2T6r2U6r2V6r2W6r2X6r2Y6r2Z6r2a6r2b6r2e6r2f6r2g6r2h6r2i6r2j6r2m6r2n6r2o6r2p6r2q6r2r6r2s6r2t6r2u6r2v6r2w6r2x6r2y6r2z6r206r216r226r236r246r266r276r286r296r2+6r2/6r6B6r6C6r6D6r6F6r6G6r6H6r6J6r6K6r6L6r6M6r6N6r6O6r6P6r6S6r6T6r6U6r6W6r6X6r6Y6r6Z6r6a6r6b6r6d6r6e6r6f6r6g6r6h6r6i6r6j6r6k6r6l6r6m6r6n6r6o6r6p6r6q6r6r6r6s6r6t6r6u6r6v6r6w6r6x6r6y6r6z6r606r616r626r636r666r676r696r6+77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzJdLmxlbmd0aDsgKytqKSBpZihEWzEzMl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzJdW2pdXSA9IDMzNzkyICsgajsgZFszMzc5MiArIGpdID0gRFsxMzJdW2pdO31cbkRbMTMzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96r6/6r+B6r+C6r+D6r+E6r+F6r+G6r+K6r+M6r+P6r+Q6r+R6r+S6r+T6r+V6r+W6r+X6r+Y6r+Z6r+a6r+b6r+d6r+e6r+f6r+g6r+h77+977+977+977+977+977+96r+i6r+j6r+k6r+l6r+m6r+n6r+q6r+r6r+s6r+t6r+u6r+v6r+y6r+z6r+16r+26r+36r+56r+66r+76r+86r+96r++6r+/64CC64CD77+977+977+977+977+977+964CF64CG64CH64CI64CJ64CK64CL64CN64CO64CP64CR64CS64CT64CV64CW64CX64CY64CZ64Ca64Cb64Ce64Cf64Cg64Ch64Ci64Cj64Ck64Cl64Cm64Cn64Cp64Cq64Cr64Cs64Ct64Cu64Cv64Cw64Cx64Cy64Cz64C064C164C264C364C464C564C664C764C864C964C+64C/64GA64GB64GC64GD64GG64GH64GJ64GL64GN64GP64GQ64GR64GS64GW64GY64Ga64Gb64Gc64Ge64Gf64Gg64Gh64Gi64Gj64Gk64Gl64Gm64Gn64Go64Gp64Gq64Gr64Gs64Gt64Gu64Gv64Gw64Gx64Gy64Gz64G064G164G264G364G464G564G664G764G+64G/64KB64KC64KD64KF64KG64KH64KI64KJ64KK64KL64KO64KQ64KS64KT64KU64KV64KW64KX64Kb64Kd64Ke64Kj64Kk77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzNdLmxlbmd0aDsgKytqKSBpZihEWzEzM11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzNdW2pdXSA9IDM0MDQ4ICsgajsgZFszNDA0OCArIGpdID0gRFsxMzNdW2pdO31cbkRbMTM0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+964Kl64Km64Kn64Kq64Kw64Ky64K264K364K564K664K764K964K+64K/64OA64OB64OC64OD64OG64OK64OL64OM64ON64OO64OP64OS77+977+977+977+977+977+964OT64OV64OW64OX64OZ64Oa64Ob64Oc64Od64Oe64Of64Oh64Oi64Oj64Ok64Om64On64Oo64Op64Oq64Or64Os64Ot64Ou64Ov64Ow77+977+977+977+977+977+964Ox64Oy64Oz64O064O164O264O364O464O564O664O764O864O964O+64O/64SA64SB64SC64SD64SE64SF64SG64SH64SK64SN64SO64SP64SR64SU64SV64SW64SX64Sa64Se64Sf64Sg64Sh64Si64Sm64Sn64Sp64Sq64Sr64St64Su64Sv64Sw64Sx64Sy64Sz64S264S664S764S864S964S+64S/64WC64WD64WF64WG64WH64WJ64WK64WL64WM64WN64WO64WP64WS64WT64WW64WX64WZ64Wa64Wb64Wd64We64Wf64Wh64Wi64Wj64Wk64Wl64Wm64Wn64Wo64Wp64Wq64Wr64Ws64Wt64Wu64Wv64Ww64Wx64Wy64Wz64W064W164W264W364W664W764W964W+64W/64aB64aD64aE64aF64aG64aH64aK64aM64aO64aP64aQ64aR64aV64aW64aX64aZ64aa64ab64ad77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzRdLmxlbmd0aDsgKytqKSBpZihEWzEzNF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzRdW2pdXSA9IDM0MzA0ICsgajsgZFszNDMwNCArIGpdID0gRFsxMzRdW2pdO31cbkRbMTM1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+964ae64af64ag64ah64ai64aj64ak64al64am64an64ap64aq64ar64as64at64au64av64aw64ax64ay64az64a064a164a264a364a477+977+977+977+977+977+964a564a664a764a864a964a+64a/64eA64eB64eC64eD64eE64eF64eG64eH64eI64eJ64eK64eL64eN64eO64eP64eR64eS64eT64eV77+977+977+977+977+977+964eW64eX64eY64eZ64ea64eb64ee64eg64eh64ei64ej64ek64el64em64en64eq64er64et64eu64ev64ex64ey64ez64e064e164e264e364e464e664e864e+64e/64iA64iB64iC64iD64iG64iH64iJ64iK64iN64iO64iP64iQ64iR64iS64iT64iW64iY64ia64ib64ic64id64ie64if64ih64ii64ij64ik64il64im64in64io64ip64iq64ir64is64it64iu64iv64iw64ix64iy64iz64i164i264i364i464i564i664i764i964i+64i/64mA64mB64mC64mD64mE64mF64mG64mH64mI64mJ64mK64mL64mM64mN64mO64mP64mQ64mR64mS64mT64mU64mV64mW64mX64mZ64ma64mb64md64me64mf64mh64mi64mj64mk64ml64mm64mn64mq64mr64ms64mt64mu77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzVdLmxlbmd0aDsgKytqKSBpZihEWzEzNV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzVdW2pdXSA9IDM0NTYwICsgajsgZFszNDU2MCArIGpdID0gRFsxMzVdW2pdO31cbkRbMTM2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+964mv64mw64mx64my64mz64m264m364m464m564m664m764m964m+64m/64qA64qB64qC64qD64qG64qH64qI64qK64qL64qM64qN64qO77+977+977+977+977+977+964qP64qS64qT64qV64qW64qX64qb64qc64qd64qe64qf64qi64qk64qn64qo64qp64qr64qt64qu64qv64qx64qy64qz64q164q264q377+977+977+977+977+977+964q464q564q664q764q864q964q+64q/64uA64uB64uC64uD64uE64uF64uG64uH64uK64uL64uN64uO64uP64uR64uT64uU64uV64uW64uX64ua64uc64ue64uf64ug64uh64uj64un64up64uq64uw64ux64uy64u264u864u964u+64yC64yD64yF64yG64yH64yJ64yK64yL64yM64yN64yO64yP64yS64yW64yX64yY64yZ64ya64yb64yd64ye64yf64yg64yh64yi64yj64yk64yl64ym64yn64yo64yp64yq64yr64ys64yt64yu64yv64yw64yx64yy64yz64y064y164y264y364y464y564y664y764y864y964y+64y/642A642B642C642D642E642F642G642H642I642J642K642L642M642N642O642P642Q642R642S642T642X642Z642a642d642g642h642i642j77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzZdLmxlbmd0aDsgKytqKSBpZihEWzEzNl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzZdW2pdXSA9IDM0ODE2ICsgajsgZFszNDgxNiArIGpdID0gRFsxMzZdW2pdO31cbkRbMTM3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9642m642o642q642s642t642v642y642z64216422642364256426642764286429642+642/646C646G646H646I646J646K646L646N77+977+977+977+977+977+9646O646P646R646S646T646V646W646X646Y646Z646a646b646c646d646e646f646i646j646k646l646m646n646p646q646r646t77+977+977+977+977+977+9646u646v646w646x646y646z6460646164626463646464656466646764686469646+646/64+A64+B64+C64+D64+G64+H64+J64+K64+N64+P64+R64+S64+T64+W64+Y64+a64+c64+e64+f64+h64+i64+j64+l64+m64+n64+p64+q64+r64+s64+t64+u64+v64+w64+x64+y64+z64+064+164+264+364+464+564+664+764+964++64+/65CA65CB65CC65CD65CE65CF65CG65CH65CI65CJ65CK65CL65CM65CN65CO65CP65CR65CS65CT65CU65CV65CW65CX65CZ65Ca65Cb65Cd65Ce65Cf65Ch65Ci65Cj65Ck65Cl65Cm65Cn65Cq65Cs65Ct65Cu65Cv65Cw65Cx65Cy65Cz65C165C265C365C465C565C665C765C865C965C+65C/65GA65GB65GC65GD65GE77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzddLmxlbmd0aDsgKytqKSBpZihEWzEzN11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzddW2pdXSA9IDM1MDcyICsgajsgZFszNTA3MiArIGpdID0gRFsxMzddW2pdO31cbkRbMTM4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+965GF65GG65GH65GI65GJ65GK65GL65GM65GN65GO65GP65GS65GT65GV65GW65GX65GZ65Ga65Gb65Gc65Gd65Ge65Gf65Gi65Gk65Gm77+977+977+977+977+977+965Gn65Go65Gp65Gq65Gr65Gt65Gu65Gv65Gw65Gx65Gy65Gz65G065G165G265G365G465G565G665G765G865G965G+65G/65KB65KC77+977+977+977+977+977+965KD65KE65KF65KG65KH65KJ65KK65KL65KM65KN65KO65KP65KQ65KR65KS65KT65KU65KV65KW65KX65KY65KZ65Ka65Kb65Kc65Ke65Kf65Kg65Kh65Ki65Kj65Kl65Km65Kn65Kp65Kq65Kr65Kt65Ku65Kv65Kw65Kx65Ky65Kz65K065K265K465K665K765K865K965K+65K/65OB65OC65OD65OF65OG65OH65OJ65OK65OL65OM65ON65OO65OP65OR65OS65OT65OU65OW65OX65OY65OZ65Oa65Ob65Oe65Of65Oh65Oi65Ol65On65Oo65Op65Oq65Or65Ou65Ow65Oy65Oz65O065O165O265O365O565O665O765O865O965O+65O/65SA65SB65SC65SD65SE65SF65SG65SH65SI65SJ65SK65SL65SM65SN65SO65SP65SQ65SR65SS65ST65SW65SX65SZ65Sa65Sd77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzhdLmxlbmd0aDsgKytqKSBpZihEWzEzOF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzhdW2pdXSA9IDM1MzI4ICsgajsgZFszNTMyOCArIGpdID0gRFsxMzhdW2pdO31cbkRbMTM5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+965Se65Sf65Sg65Sh65Si65Sj65Sm65Sr65Ss65St65Su65Sv65Sy65Sz65S165S265S365S565S665S765S865S965S+65S/65WC65WG77+977+977+977+977+977+965WH65WI65WJ65WK65WO65WP65WR65WS65WT65WV65WW65WX65WY65WZ65Wa65Wb65We65Wi65Wj65Wk65Wl65Wm65Wn65Wo65Wp65Wq77+977+977+977+977+977+965Wr65Ws65Wt65Wu65Wv65Ww65Wx65Wy65Wz65W065W165W265W365W465W565W665W765W865W965W+65W/65aA65aB65aC65aD65aE65aF65aG65aH65aI65aJ65aK65aL65aM65aN65aO65aP65aQ65aR65aS65aT65aU65aV65aW65aX65aY65aZ65aa65ab65ac65ad65ae65af65ai65aj65al65am65an65ap65as65at65au65av65ay65a265a365a465a565a665a+65a/65eB65eC65eD65eF65eG65eH65eI65eJ65eK65eL65eO65eS65eT65eU65eV65eW65eX65eZ65ea65eb65ec65ed65ee65ef65eg65eh65ei65ej65ek65el65em65en65eo65ep65eq65er65et65eu65ev65ew65ex65ey65ez65e065e165e265e365e465e565e665e765e865e965e+65e/77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxMzldLmxlbmd0aDsgKytqKSBpZihEWzEzOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxMzldW2pdXSA9IDM1NTg0ICsgajsgZFszNTU4NCArIGpdID0gRFsxMzldW2pdO31cbkRbMTQwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+965iA65iB65iC65iD65iE65iF65iG65iH65iI65iJ65iK65iL65iM65iN65iO65iP65iS65iT65iV65iW65iX65iZ65ia65ib65ic65id77+977+977+977+977+977+965ie65if65ig65ih65ii65ij65ik65im65in65io65ip65iq65ir65it65iu65iv65iw65ix65iy65iz65i165i265i365i465i565i677+977+977+977+977+977+965i765i865i965i+65i/65mA65mB65mC65mD65mE65mF65mG65mH65mJ65mK65mL65mM65mN65mO65mP65mQ65mR65mS65mT65mU65mV65mW65mX65mY65mZ65ma65mb65mc65md65me65mf65mg65mh65mi65mj65ml65mm65mn65mp65mq65mr65ms65mt65mu65mv65mw65mx65my65mz65m065m165m265m365m465m565m665m765m865m965m+65m/65qA65qB65qC65qD65qE65qF65qG65qH65qI65qJ65qK65qL65qM65qN65qO65qP65qQ65qR65qS65qT65qU65qV65qW65qX65qY65qZ65qa65qb65qe65qf65qh65qi65qj65ql65qm65qn65qo65qp65qq65qt65qu65qv65qw65qy65qz65q065q165q265q365q465q565q665q765q865q965q+65q/65uA65uB65uC77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDBdLmxlbmd0aDsgKytqKSBpZihEWzE0MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDBdW2pdXSA9IDM1ODQwICsgajsgZFszNTg0MCArIGpdID0gRFsxNDBdW2pdO31cbkRbMTQxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+965uD65uE65uF65uG65uH65uI65uJ65uK65uL65uM65uN65uO65uP65uQ65uR65uS65uT65uV65uW65uX65uY65uZ65ua65ub65uc65ud77+977+977+977+977+977+965ue65uf65ug65uh65ui65uj65uk65ul65um65un65uo65up65uq65ur65us65ut65uu65uv65ux65uy65uz65u165u265u365u565u677+977+977+977+977+977+965u765u865u965u+65u/65yC65yD65yE65yG65yH65yI65yJ65yK65yL65yM65yN65yO65yP65yQ65yR65yS65yT65yU65yV65yW65yX65yY65yZ65ya65yb65yc65yd65ye65yf65yg65yh65yi65yj65yk65yl65ym65yn65yq65yr65yt65yu65yx65yy65yz65y065y165y265y365y665y865y965y+65y/652A652B652C652D652F652G652H652J652K652L652N652O652P652Q652R652S652T652W652X652Y652Z652a652b652c652d652e652f652h652i652j652l652m652n652p652q652r652s652t652u652v652y6520652265236524652565266527652+652/656B656C656D656F656G656H656I656J656K656L656O656T656U656V656a656b656d656e77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDFdLmxlbmd0aDsgKytqKSBpZihEWzE0MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDFdW2pdXSA9IDM2MDk2ICsgajsgZFszNjA5NiArIGpdID0gRFsxNDFdW2pdO31cbkRbMTQyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9656f656h656i656j656k656l656m656n656q656u656v656w656x656y656z6562656365656566656765686569656+656/65+A65+B77+977+977+977+977+977+965+C65+D65+E65+F65+G65+I65+K65+L65+M65+N65+O65+P65+Q65+R65+S65+T65+U65+V65+W65+X65+Y65+Z65+a65+b65+c65+d77+977+977+977+977+977+965+e65+f65+g65+h65+i65+j65+k65+l65+m65+n65+o65+p65+q65+r65+u65+v65+x65+y65+z65+165+265+365+465+565+665+765++66CC66CD66CE66CF66CG66CK66CL66CN66CO66CP66CR66CS66CT66CU66CV66CW66CX66Ca66Cc66Ce66Cf66Cg66Ch66Ci66Cj66Cm66Cn66Cp66Cq66Cr66Ct66Cu66Cv66Cw66Cx66Cy66Cz66C266C666C766C866C966C+66C/66GB66GC66GD66GF66GG66GH66GI66GJ66GK66GL66GM66GN66GO66GP66GQ66GS66GU66GV66GW66GX66GY66GZ66Ga66Gb66Ge66Gf66Gh66Gi66Gj66Gl66Gm66Gn66Go66Gp66Gq66Gr66Gu66Gw66Gy66Gz66G066G166G266G366G566G666G766G966G+66G/66KA66KB66KC66KD66KE77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDJdLmxlbmd0aDsgKytqKSBpZihEWzE0Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDJdW2pdXSA9IDM2MzUyICsgajsgZFszNjM1MiArIGpdID0gRFsxNDJdW2pdO31cbkRbMTQzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+966KF66KG66KH66KI66KJ66KK66KL66KM66KO66KP66KQ66KR66KS66KT66KU66KV66KW66KX66KY66KZ66Ka66Kb66Kc66Kd66Ke66Kf77+977+977+977+977+977+966Kg66Kh66Ki66Kj66Kk66Kl66Km66Kn66Kp66Kq66Kr66Ks66Kt66Ku66Kv66Kx66Ky66Kz66K166K266K366K566K666K766K866K977+977+977+977+977+977+966K+66K/66OC66OE66OG66OH66OI66OJ66OK66OL66ON66OO66OP66OR66OS66OT66OV66OW66OX66OY66OZ66Oa66Ob66Oc66Oe66Og66Oi66Oj66Ok66Ol66Om66On66Oq66Or66Ot66Ou66Ov66Ox66Oy66Oz66O066O166O266O366O666O866O+66O/66SA66SB66SC66SD66SF66SG66SH66SI66SJ66SK66SL66SM66SN66SO66SP66SQ66SR66SS66ST66SU66SV66SW66SX66SZ66Sa66Sb66Sc66Sd66Se66Sf66Sh66Si66Sj66Sk66Sl66Sm66Sn66So66Sp66Sq66Sr66Ss66St66Su66Sv66Sw66Sx66Sy66Sz66S066S166S266S366S466S566S666S766S+66S/66WB66WC66WD66WF66WG66WH66WI66WJ66WK66WL66WN66WO66WQ66WS66WT66WU66WV66WW66WX77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDNdLmxlbmd0aDsgKytqKSBpZihEWzE0M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDNdW2pdXSA9IDM2NjA4ICsgajsgZFszNjYwOCArIGpdID0gRFsxNDNdW2pdO31cbkRbMTQ0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+966Wa66Wb66Wd66We66Wf66Wh66Wi66Wj66Wk66Wl66Wm66Wn66Wq66Ws66Wu66Wv66Ww66Wx66Wy66Wz66W266W366W566W666W766W977+977+977+977+977+977+966W+66W/66aA66aB66aC66aD66aG66aI66aL66aM66aP66aQ66aR66aS66aT66aU66aV66aW66aX66aY66aZ66aa66ab66ac66ad66ae77+977+977+977+977+977+966af66ag66ah66ai66aj66ak66al66am66an66ao66ap66aq66ar66au66av66ax66ay66az66a166a266a366a466a566a666a766a+66eA66eC66eD66eE66eF66eG66eH66eK66eL66eN66eT66eU66eV66eW66eX66ea66ec66ef66eg66ei66em66en66ep66eq66er66et66eu66ev66ew66ex66ey66ez66e266e766e866e966e+66e/66iC66iD66iE66iF66iG66iH66iJ66iK66iL66iM66iN66iO66iP66iQ66iR66iS66iT66iU66iW66iX66iY66iZ66ia66ib66ic66id66ie66if66ig66ih66ii66ij66ik66il66im66in66io66ip66iq66ir66is66it66iu66iv66iw66ix66iy66iz66i066i166i266i366i666i766i966i+66i/66mB66mD66mE66mF66mG77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDRdLmxlbmd0aDsgKytqKSBpZihEWzE0NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDRdW2pdXSA9IDM2ODY0ICsgajsgZFszNjg2NCArIGpdID0gRFsxNDRdW2pdO31cbkRbMTQ1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+966mH66mK66mM66mP66mQ66mR66mS66mW66mX66mZ66ma66mb66md66me66mf66mg66mh66mi66mj66mm66mq66mr66ms66mt66mu66mv77+977+977+977+977+977+966my66mz66m166m266m366m566m666m766m866m966m+66m/66qA66qB66qC66qG66qI66qJ66qK66qL66qN66qO66qP66qQ66qR66qS77+977+977+977+977+977+966qT66qU66qV66qW66qX66qY66qZ66qa66qb66qc66qd66qe66qf66qg66qh66qi66qj66qk66ql66qm66qn66qq66qt66qu66qv66qx66qz66q066q166q266q366q666q866q+66q/66uA66uB66uC66uD66uF66uG66uH66uJ66uK66uL66uM66uN66uO66uP66uQ66uR66uS66uT66uU66uV66uW66uX66ua66ub66uc66ud66ue66uf66ug66uh66ui66uj66uk66ul66um66un66uo66up66uq66ur66us66ut66uu66uv66uw66ux66uy66uz66u066u166u266u366u466u566u666u766u966u+66u/66yB66yC66yD66yF66yG66yH66yI66yJ66yK66yL66yM66yO66yQ66yS66yT66yU66yV66yW66yX66yZ66ya66yb66yd66ye66yf66yh66yi66yj66yk66yl66ym66yn77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDVdLmxlbmd0aDsgKytqKSBpZihEWzE0NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDVdW2pdXSA9IDM3MTIwICsgajsgZFszNzEyMCArIGpdID0gRFsxNDVdW2pdO31cbkRbMTQ2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+966yo66yq66ys66yt66yu66yv66yw66yx66yy66yz66y366y566y666y/662A662B662C662D662G662I662K662L662M662O662R662S77+977+977+977+977+977+9662T662V662W662X662Z662a662b662c662d662e662f662g662i662k662l662m662n662o662p662q662r662t662u662v662w662x77+977+977+977+977+977+9662y662z6620662166226623662466256626662766286629662+662/666A666B666C666D666E666F666G666H666J666K666L666N666O666P666R666S666T666U666V666W666X666Y666Z666a666b666c666d666e666f666g666h666i666j666l666m666n666p666q666r666t666u666v666w666x666y666z66616662666466656666666766686669666+666/66+B66+C66+D66+F66+G66+H66+J66+K66+L66+M66+N66+O66+P66+R66+S66+U66+V66+W66+X66+Y66+Z66+a66+b66+c66+d66+e66+f66+g66+h66+i66+j66+k66+l66+m66+n66+o66+p66+q66+r66+s66+t66+u66+v66+w66+x66+y66+z66+066+166+266+366+666+766+966++67CB77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDZdLmxlbmd0aDsgKytqKSBpZihEWzE0Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDZdW2pdXSA9IDM3Mzc2ICsgajsgZFszNzM3NiArIGpdID0gRFsxNDZdW2pdO31cbkRbMTQ3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+967CD67CE67CF67CG67CH67CK67CO67CQ67CS67CT67CZ67Ca67Cg67Ch67Ci67Cj67Cm67Co67Cq67Cr67Cs67Cu67Cv67Cy67Cz67C177+977+977+977+977+977+967C267C367C567C667C767C867C967C+67C/67GC67GG67GH67GI67GK67GL67GO67GP67GR67GS67GT67GU67GV67GW67GX67GY67GZ77+977+977+977+977+977+967Ga67Gb67Gc67Ge67Gf67Gg67Gh67Gi67Gj67Gk67Gl67Gm67Gn67Go67Gp67Gq67Gr67Gs67Gt67Gu67Gv67Gw67Gx67Gy67Gz67G067G167G267G367G467G567G667G767G867G967G+67G/67KA67KB67KC67KD67KG67KH67KJ67KK67KN67KP67KQ67KR67KS67KT67KW67KY67Kb67Kc67Kd67Ke67Kf67Ki67Kj67Kl67Km67Kp67Kq67Kr67Ks67Kt67Ku67Kv67Ky67K267K367K467K567K667K767K+67K/67OB67OC67OD67OF67OG67OH67OI67OJ67OK67OL67OM67OO67OS67OT67OU67OW67OX67OZ67Oa67Ob67Od67Oe67Of67Og67Oh67Oi67Oj67Ok67Ol67Om67On67Oo67Op67Oq67Or67Os67Ot67Ou67Ov67Ow67Ox67Oy67Oz67O367O567O667O767O977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDddLmxlbmd0aDsgKytqKSBpZihEWzE0N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDddW2pdXSA9IDM3NjMyICsgajsgZFszNzYzMiArIGpdID0gRFsxNDddW2pdO31cbkRbMTQ4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+967O+67O/67SA67SB67SC67SD67SG67SI67SK67SL67SM67SN67SO67SP67SR67SS67ST67SV67SW67SX67SY67SZ67Sa67Sb67Sc67Sd77+977+977+977+977+977+967Se67Sf67Sg67Sh67Si67Sj67Sl67Sm67Sn67So67Sp67Sq67Sr67St67Su67Sv67Sw67Sx67Sy67Sz67S067S167S267S367S467S577+977+977+977+977+977+967S667S767S867S967S+67S/67WB67WC67WD67WE67WF67WG67WH67WK67WL67WN67WO67WP67WR67WS67WT67WU67WV67WW67WX67Wa67Wb67Wc67Wd67We67Wf67Wg67Wh67Wi67Wj67Wl67Wm67Wn67Wp67Wq67Wr67Ws67Wt67Wu67Wv67Ww67Wx67Wy67Wz67W067W167W267W367W467W567W667W767W867W967W+67W/67aC67aD67aF67aG67aL67aM67aN67aO67aP67aS67aU67aW67aX67aY67ab67ad67ae67af67ag67ah67ai67aj67al67am67an67ao67ap67aq67ar67as67at67au67av67ax67ay67az67a067a167a267a367a567a667a767a867a967a+67a/67eA67eB67eC67eD67eE67eF67eG67eH67eI67eJ67eK67eL67eM67eN67eO67eP67eQ67eR77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDhdLmxlbmd0aDsgKytqKSBpZihEWzE0OF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDhdW2pdXSA9IDM3ODg4ICsgajsgZFszNzg4OCArIGpdID0gRFsxNDhdW2pdO31cbkRbMTQ5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+967eS67eT67eW67eX67eZ67ea67eb67ed67ee67ef67eg67eh67ei67ej67ek67el67em67en67eo67eq67er67es67et67eu67ev67ex77+977+977+977+977+977+967ey67ez67e167e267e367e567e667e767e867e967e+67e/67iB67iC67iE67iG67iH67iI67iJ67iK67iL67iO67iP67iR67iS67iT77+977+977+977+977+977+967iV67iW67iX67iY67iZ67ia67ib67ie67ig67ih67ii67ij67ik67il67im67in67io67ip67iq67ir67is67it67iu67iv67iw67ix67iy67iz67i067i167i267i367i467i567i667i767i867i967i+67i/67mA67mB67mC67mD67mG67mH67mJ67mK67mL67mN67mP67mQ67mR67mS67mT67mW67mY67mc67md67me67mf67mi67mj67ml67mm67mn67mp67mr67ms67mt67mu67mv67my67m267m367m467m567m667m+67m/67qB67qC67qD67qF67qG67qH67qI67qJ67qK67qL67qO67qS67qT67qU67qV67qW67qX67qa67qb67qc67qd67qe67qf67qg67qh67qi67qj67qk67ql67qm67qn67qp67qq67qr67qs67qt67qu67qv67qw67qx67qy67qz67q067q167q267q377+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNDldLmxlbmd0aDsgKytqKSBpZihEWzE0OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNDldW2pdXSA9IDM4MTQ0ICsgajsgZFszODE0NCArIGpdID0gRFsxNDldW2pdO31cbkRbMTUwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+967q467q567q667q767q867q967q+67q/67uA67uB67uC67uD67uE67uF67uG67uH67uI67uJ67uK67uL67uM67uN67uO67uP67uS67uT77+977+977+977+977+977+967uV67uW67uZ67ua67ub67uc67ud67ue67uf67uh67ui67um67un67uo67up67uq67ur67ut67uu67uv67uw67ux67uy67uz67u067u177+977+977+977+977+977+967u267u367u467u567u667u767u867u967u+67u/67yA67yC67yD67yE67yF67yG67yH67yK67yL67yM67yN67yO67yP67yQ67yR67yS67yT67yU67yV67yW67yX67ya67ye67yf67yg67yh67yi67yj67yk67yl67ym67yn67yo67yp67yq67yr67ys67yt67yu67yv67yw67yx67yy67yz67y067y167y267y367y467y567y667y767y867y967y+67y/672C672D672F672G672H672J672K672L672M672N672O672P672S672T672U672W672X672Y672Z672a672b672c672d672e672f672g672h672i672j672k672l672m672n672o672p672q672r672s672t672u672v672w672x672y672z6720672167226723672467256726672767286729672+672/676A676B676C77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTBdLmxlbmd0aDsgKytqKSBpZihEWzE1MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTBdW2pdXSA9IDM4NDAwICsgajsgZFszODQwMCArIGpdID0gRFsxNTBdW2pdO31cbkRbMTUxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9676D676E676F676G676H676I676J676K676L676M676N676O676P676Q676R676S676T676V676W676X676Y676Z676a676b676c676d77+977+977+977+977+977+9676e676f676g676h676i676j676k676l676m676n676o676p676q676r676s676t676u676v676x676y676z6760676167626763676477+977+977+977+977+977+967656766676767686769676+676/67+A67+B67+C67+D67+E67+G67+H67+I67+J67+K67+L67+O67+P67+R67+S67+T67+V67+W67+X67+Y67+Z67+a67+b67+d67+e67+g67+i67+j67+k67+l67+m67+n67+o67+p67+q67+r67+s67+t67+u67+v67+w67+x67+y67+z67+067+167+267+367+467+567+667+767+867+967++67+/7ICA7ICB7ICC7ICD7ICE7ICF7ICG7ICH7ICI7ICJ7ICK7ICL7ICM7ICN7ICO7ICP7ICQ7ICR7ICS7ICT7ICU7ICV7ICW7ICX7ICY7ICZ7ICa7ICb7ICc7ICd7ICe7ICf7ICg7ICh7ICi7ICj7ICk7ICl7ICm7ICn7ICo7ICp7ICq7ICr7ICs7ICt7ICu7ICv7ICw7ICx7ICy7ICz7IC07IC17IC27IC37IC47IC57IC67IC77IC97IC+7IC/77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTFdLmxlbmd0aDsgKytqKSBpZihEWzE1MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTFdW2pdXSA9IDM4NjU2ICsgajsgZFszODY1NiArIGpdID0gRFsxNTFdW2pdO31cbkRbMTUyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97IGA7IGB7IGC7IGD7IGE7IGF7IGG7IGH7IGI7IGJ7IGK7IGL7IGM7IGN7IGO7IGP7IGQ7IGS7IGT7IGU7IGV7IGW7IGX7IGZ7IGa7IGb77+977+977+977+977+977+97IGd7IGe7IGf7IGh7IGi7IGj7IGk7IGl7IGm7IGn7IGq7IGr7IGs7IGt7IGu7IGv7IGw7IGx7IGy7IGz7IG07IG17IG27IG37IG47IG577+977+977+977+977+977+97IG67IG77IG87IG97IG+7IG/7IKA7IKB7IKC7IKD7IKE7IKF7IKG7IKH7IKI7IKJ7IKK7IKL7IKM7IKN7IKO7IKP7IKS7IKT7IKV7IKW7IKX7IKZ7IKa7IKb7IKc7IKd7IKe7IKf7IKi7IKk7IKm7IKn7IKo7IKp7IKq7IKr7IKu7IKx7IKy7IK37IK47IK57IK67IK77IK+7IOC7IOD7IOE7IOG7IOH7IOK7IOL7ION7IOO7IOP7IOR7IOS7IOT7IOU7IOV7IOW7IOX7IOa7IOe7IOf7IOg7IOh7IOi7IOj7IOm7IOn7IOp7IOq7IOr7IOt7IOu7IOv7IOw7IOx7IOy7IOz7IO27IO47IO67IO77IO87IO97IO+7IO/7ISB7ISC7ISD7ISF7ISG7ISH7ISJ7ISK7ISL7ISM7ISN7ISO7ISP7ISR7ISS7IST7ISU7ISW7ISX7ISY7ISZ7ISa7ISb7ISh7ISi7ISl7ISo7ISp7ISq7ISr7ISu77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTJdLmxlbmd0aDsgKytqKSBpZihEWzE1Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTJdW2pdXSA9IDM4OTEyICsgajsgZFszODkxMiArIGpdID0gRFsxNTJdW2pdO31cbkRbMTUzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97ISy7ISz7IS07IS17IS37IS67IS77IS97IS+7IS/7IWB7IWC7IWD7IWE7IWF7IWG7IWH7IWK7IWO7IWP7IWQ7IWR7IWS7IWT7IWW7IWX77+977+977+977+977+977+97IWZ7IWa7IWb7IWd7IWe7IWf7IWg7IWh7IWi7IWj7IWm7IWq7IWr7IWs7IWt7IWu7IWv7IWx7IWy7IWz7IW17IW27IW37IW57IW67IW777+977+977+977+977+977+97IW87IW97IW+7IW/7IaA7IaB7IaC7IaD7IaE7IaG7IaH7IaI7IaJ7IaK7IaL7IaP7IaR7IaS7IaT7IaV7IaX7IaY7IaZ7Iaa7Iab7Iae7Iag7Iai7Iaj7Iak7Iam7Ian7Iaq7Iar7Iat7Iau7Iav7Iax7Iay7Iaz7Ia07Ia17Ia27Ia37Ia47Ia57Ia67Ia77Ia87Ia+7Ia/7IeA7IeB7IeC7IeD7IeF7IeG7IeH7IeJ7IeK7IeL7IeN7IeO7IeP7IeQ7IeR7IeS7IeT7IeV7IeW7IeZ7Iea7Ieb7Iec7Ied7Iee7Ief7Ieh7Iei7Iej7Iel7Iem7Ien7Iep7Ieq7Ier7Ies7Iet7Ieu7Iev7Iey7Ie07Ie17Ie27Ie37Ie47Ie57Ie67Ie77Ie+7Ie/7IiB7IiC7IiD7IiF7IiG7IiH7IiI7IiJ7IiK7IiL7IiO7IiQ7IiS7IiT7IiU7IiV7IiW7IiX7Iia7Iib7Iid7Iie7Iih7Iii7Iij77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTNdLmxlbmd0aDsgKytqKSBpZihEWzE1M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTNdW2pdXSA9IDM5MTY4ICsgajsgZFszOTE2OCArIGpdID0gRFsxNTNdW2pdO31cbkRbMTU0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Iik7Iil7Iim7Iin7Iiq7Iis7Iiu7Iiw7Iiz7Ii17Ii27Ii37Ii47Ii57Ii67Ii77Ii87Ii97Ii+7Ii/7ImA7ImB7ImC7ImD7ImE7ImF77+977+977+977+977+977+97ImG7ImH7ImJ7ImK7ImL7ImM7ImN7ImO7ImP7ImS7ImT7ImV7ImW7ImX7ImZ7Ima7Imb7Imc7Imd7Ime7Imf7Imh7Imi7Imj7Imk7Imm77+977+977+977+977+977+97Imn7Imo7Imp7Imq7Imr7Imu7Imv7Imx7Imy7Imz7Im17Im27Im37Im47Im57Im67Im77Im+7IqA7IqC7IqD7IqE7IqF7IqG7IqH7IqK7IqL7IqM7IqN7IqO7IqP7IqR7IqS7IqT7IqU7IqV7IqW7IqX7IqZ7Iqa7Iqc7Iqe7Iqf7Iqg7Iqh7Iqi7Iqj7Iqm7Iqn7Iqp7Iqq7Iqr7Iqu7Iqv7Iqw7Iqx7Iqy7Iqz7Iq27Iq47Iq67Iq77Iq87Iq97Iq+7Iq/7IuA7IuB7IuC7IuD7IuE7IuF7IuG7IuH7IuI7IuJ7IuK7IuL7IuM7IuN7IuO7IuP7IuQ7IuR7IuS7IuT7IuU7IuV7IuW7IuX7IuY7IuZ7Iua7Iub7Iue7Iuf7Iuh7Iui7Iul7Ium7Iun7Iuo7Iup7Iuq7Iuu7Iuw7Iuy7Iuz7Iu07Iu17Iu37Iu67Iu97Iu+7Iu/7IyB7IyC7IyD7IyE7IyF7IyG7IyH7IyK7IyL7IyO7IyP77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTRdLmxlbmd0aDsgKytqKSBpZihEWzE1NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTRdW2pdXSA9IDM5NDI0ICsgajsgZFszOTQyNCArIGpdID0gRFsxNTRdW2pdO31cbkRbMTU1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97IyQ7IyR7IyS7IyW7IyX7IyZ7Iya7Iyb7Iyd7Iye7Iyf7Iyg7Iyh7Iyi7Iyj7Iym7Iyn7Iyq7Iyr7Iys7Iyt7Iyu7Iyv7Iyw7Iyx7Iyy77+977+977+977+977+977+97Iyz7Iy07Iy17Iy27Iy37Iy47Iy57Iy67Iy77Iy87Iy97Iy+7Iy/7I2A7I2B7I2C7I2D7I2E7I2G7I2H7I2I7I2J7I2K7I2L7I2M7I2N77+977+977+977+977+977+97I2O7I2P7I2Q7I2R7I2S7I2T7I2U7I2V7I2W7I2X7I2Y7I2Z7I2a7I2b7I2c7I2d7I2e7I2f7I2g7I2h7I2i7I2j7I2k7I2l7I2m7I2n7I2q7I2r7I2t7I2u7I2v7I2x7I2z7I207I217I227I237I267I277I2+7I2/7I6A7I6B7I6C7I6D7I6F7I6G7I6H7I6J7I6K7I6L7I6N7I6O7I6P7I6Q7I6R7I6S7I6T7I6U7I6V7I6W7I6X7I6Y7I6Z7I6a7I6b7I6c7I6d7I6e7I6f7I6g7I6h7I6i7I6j7I6k7I6l7I6m7I6n7I6o7I6p7I6q7I6r7I6s7I6t7I6u7I6v7I6w7I6x7I6y7I6z7I607I617I627I637I647I657I667I677I687I697I6+7I6/7I+B7I+C7I+D7I+E7I+F7I+G7I+H7I+I7I+J7I+K7I+L7I+M7I+N7I+O7I+P7I+Q7I+R7I+S7I+T7I+U7I+V7I+W7I+X7I+a77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTVdLmxlbmd0aDsgKytqKSBpZihEWzE1NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTVdW2pdXSA9IDM5NjgwICsgajsgZFszOTY4MCArIGpdID0gRFsxNTVdW2pdO31cbkRbMTU2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97I+b7I+d7I+e7I+h7I+j7I+k7I+l7I+m7I+n7I+q7I+r7I+s7I+u7I+v7I+w7I+x7I+y7I+z7I+27I+37I+57I+67I+77I+87I+97I++77+977+977+977+977+977+97I+/7JCA7JCB7JCC7JCD7JCE7JCF7JCG7JCH7JCJ7JCK7JCL7JCM7JCN7JCO7JCP7JCR7JCS7JCT7JCU7JCV7JCW7JCX7JCY7JCZ7JCa77+977+977+977+977+977+97JCb7JCc7JCd7JCe7JCf7JCg7JCh7JCi7JCj7JCl7JCm7JCn7JCo7JCp7JCq7JCr7JCt7JCu7JCv7JCx7JCy7JCz7JC17JC27JC37JC47JC57JC67JC77JC+7JC/7JGA7JGB7JGC7JGD7JGE7JGF7JGG7JGH7JGJ7JGK7JGL7JGM7JGN7JGO7JGP7JGQ7JGR7JGS7JGT7JGU7JGV7JGW7JGX7JGY7JGZ7JGa7JGb7JGc7JGd7JGe7JGf7JGg7JGh7JGi7JGj7JGm7JGn7JGp7JGq7JGr7JGt7JGu7JGv7JGw7JGx7JGy7JGz7JG27JG37JG47JG67JG77JG87JG97JG+7JG/7JKB7JKC7JKD7JKE7JKF7JKG7JKH7JKI7JKJ7JKK7JKL7JKM7JKN7JKO7JKP7JKQ7JKR7JKS7JKT7JKV7JKW7JKX7JKY7JKZ7JKa7JKb7JKd7JKe7JKf7JKg7JKh7JKi7JKj7JKk7JKl7JKm7JKn7JKo7JKp77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTZdLmxlbmd0aDsgKytqKSBpZihEWzE1Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTZdW2pdXSA9IDM5OTM2ICsgajsgZFszOTkzNiArIGpdID0gRFsxNTZdW2pdO31cbkRbMTU3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97JKq7JKr7JKs7JKt7JKu7JKv7JKw7JKx7JKy7JKz7JK07JK17JK27JK37JK57JK67JK77JK97JK+7JK/7JOA7JOB7JOC7JOD7JOE7JOF77+977+977+977+977+977+97JOG7JOH7JOI7JOJ7JOK7JOL7JOM7JON7JOO7JOP7JOQ7JOR7JOS7JOT7JOU7JOV7JOW7JOX7JOY7JOZ7JOa7JOb7JOc7JOd7JOe7JOf77+977+977+977+977+977+97JOg7JOh7JOi7JOj7JOk7JOl7JOm7JOn7JOo7JOq7JOr7JOs7JOt7JOu7JOv7JOy7JOz7JO17JO27JO37JO57JO77JO87JO97JO+7JSC7JSD7JSE7JSF7JSG7JSH7JSI7JSJ7JSK7JSL7JSN7JSO7JSP7JSR7JSS7JST7JSV7JSW7JSX7JSY7JSZ7JSa7JSb7JSd7JSe7JSf7JSg7JSh7JSi7JSj7JSk7JSl7JSm7JSn7JSq7JSr7JSt7JSu7JSv7JSx7JSy7JSz7JS07JS17JS27JS37JS67JS87JS+7JS/7JWA7JWB7JWC7JWD7JWG7JWH7JWL7JWP7JWQ7JWR7JWS7JWW7JWa7JWb7JWc7JWf7JWi7JWj7JWl7JWm7JWn7JWp7JWq7JWr7JWs7JWt7JWu7JWv7JWy7JW27JW37JW47JW57JW67JW77JW+7JW/7JaB7JaC7JaD7JaF7JaG7JaI7JaJ7JaK7JaL7JaO7JaQ7JaS7JaT7JaU77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTddLmxlbmd0aDsgKytqKSBpZihEWzE1N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTddW2pdXSA9IDQwMTkyICsgajsgZFs0MDE5MiArIGpdID0gRFsxNTddW2pdO31cbkRbMTU4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97JaW7JaZ7Jaa7Jab7Jad7Jae7Jaf7Jah7Jai7Jaj7Jak7Jal7Jam7Jan7Jao7Jaq7Jar7Jas7Jat7Jau7Jav7Jaw7Jax7Jay7Jaz7Ja277+977+977+977+977+977+97Ja37Ja67Ja/7JeA7JeB7JeC7JeD7JeL7JeN7JeP7JeS7JeT7JeV7JeW7JeX7JeZ7Jea7Jeb7Jec7Jed7Jee7Jef7Jei7Jek7Jem7Jen77+977+977+977+977+977+97Jeo7Jep7Jeq7Jer7Jev7Jex7Jey7Jez7Je17Je47Je57Je67Je77JiC7JiD7JiE7JiJ7JiK7JiL7JiN7JiO7JiP7JiR7JiS7JiT7JiU7JiV7JiW7JiX7Jia7Jid7Jie7Jif7Jig7Jih7Jii7Jij7Jim7Jin7Jip7Jiq7Jir7Jiv7Jix7Jiy7Ji27Ji47Ji67Ji87Ji97Ji+7Ji/7JmC7JmD7JmF7JmG7JmH7JmJ7JmK7JmL7JmM7JmN7JmO7JmP7JmS7JmW7JmX7JmY7JmZ7Jma7Jmb7Jme7Jmf7Jmh7Jmi7Jmj7Jmk7Jml7Jmm7Jmn7Jmo7Jmp7Jmq7Jmr7Jmt7Jmu7Jmw7Jmy7Jmz7Jm07Jm17Jm27Jm37Jm67Jm77Jm97Jm+7Jm/7JqB7JqC7JqD7JqE7JqF7JqG7JqH7JqK7JqM7JqO7JqP7JqQ7JqR7JqS7JqT7JqW7JqX7JqZ7Jqa7Jqb7Jqd7Jqe7Jqf7Jqg7Jqh7Jqi7Jqj7Jqm77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNThdLmxlbmd0aDsgKytqKSBpZihEWzE1OF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNThdW2pdXSA9IDQwNDQ4ICsgajsgZFs0MDQ0OCArIGpdID0gRFsxNThdW2pdO31cbkRbMTU5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Jqo7Jqq7Jqr7Jqs7Jqt7Jqu7Jqv7Jqy7Jqz7Jq17Jq27Jq37Jq77Jq87Jq97Jq+7Jq/7JuC7JuE7JuG7JuH7JuI7JuJ7JuK7JuL7JuO77+977+977+977+977+977+97JuP7JuR7JuS7JuT7JuV7JuW7JuX7JuY7JuZ7Jua7Jub7Jue7Juf7Jui7Juj7Juk7Jul7Jum7Jun7Juq7Jur7Jut7Juu7Juv7Jux7Juy77+977+977+977+977+977+97Juz7Ju07Ju17Ju27Ju37Ju67Ju77Ju87Ju+7Ju/7JyA7JyB7JyC7JyD7JyG7JyH7JyJ7JyK7JyL7JyN7JyO7JyP7JyQ7JyR7JyS7JyT7JyW7JyY7Jya7Jyb7Jyc7Jyd7Jye7Jyf7Jyi7Jyj7Jyl7Jym7Jyn7Jyp7Jyq7Jyr7Jys7Jyt7Jyu7Jyv7Jyy7Jy07Jy27Jy47Jy57Jy67Jy77Jy+7Jy/7J2B7J2C7J2D7J2F7J2G7J2H7J2I7J2J7J2L7J2O7J2Q7J2Z7J2a7J2b7J2d7J2e7J2f7J2h7J2i7J2j7J2k7J2l7J2m7J2n7J2p7J2q7J2s7J2t7J2u7J2v7J2w7J2x7J2y7J2z7J227J237J257J267J277J2/7J6A7J6B7J6C7J6G7J6L7J6M7J6N7J6P7J6S7J6T7J6V7J6Z7J6b7J6c7J6d7J6e7J6f7J6i7J6n7J6o7J6p7J6q7J6r7J6u7J6v7J6x7J6y7J6z7J617J627J6377+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNTldLmxlbmd0aDsgKytqKSBpZihEWzE1OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNTldW2pdXSA9IDQwNzA0ICsgajsgZFs0MDcwNCArIGpdID0gRFsxNTldW2pdO31cbkRbMTYwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97J647J657J667J677J6+7J+C7J+D7J+E7J+F7J+G7J+H7J+K7J+L7J+N7J+P7J+R7J+S7J+T7J+U7J+V7J+W7J+X7J+Z7J+a7J+b7J+c77+977+977+977+977+977+97J+e7J+f7J+g7J+h7J+i7J+j7J+l7J+m7J+n7J+p7J+q7J+r7J+t7J+u7J+v7J+w7J+x7J+y7J+z7J+07J+17J+27J+37J+47J+57J+677+977+977+977+977+977+97J+77J+87J+97J++7J+/7KCC7KCD7KCF7KCG7KCH7KCJ7KCL7KCM7KCN7KCO7KCP7KCS7KCU7KCX7KCY7KCZ7KCa7KCb7KCe7KCf7KCh7KCi7KCj7KCl7KCm7KCn7KCo7KCp7KCq7KCr7KCu7KCw7KCy7KCz7KC07KC17KC27KC37KC57KC67KC77KC97KC+7KC/7KGB7KGC7KGD7KGE7KGF7KGG7KGH7KGK7KGL7KGO7KGP7KGQ7KGR7KGS7KGT7KGV7KGW7KGX7KGY7KGZ7KGa7KGb7KGc7KGd7KGe7KGf7KGg7KGh7KGi7KGj7KGk7KGl7KGm7KGn7KGo7KGp7KGq7KGr7KGs7KGt7KGu7KGv7KGy7KGz7KG17KG27KG37KG57KG77KG87KG97KG+7KG/7KKC7KKE7KKI7KKJ7KKK7KKO7KKP7KKQ7KKR7KKS7KKT7KKV7KKW7KKX7KKY7KKZ7KKa7KKb7KKc7KKe7KKg7KKi7KKj7KKk77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjBdLmxlbmd0aDsgKytqKSBpZihEWzE2MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjBdW2pdXSA9IDQwOTYwICsgajsgZFs0MDk2MCArIGpdID0gRFsxNjBdW2pdO31cbkRbMTYxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97KKl7KKm7KKn7KKp7KKq7KKr7KKs7KKt7KKu7KKv7KKw7KKx7KKy7KKz7KK07KK17KK27KK37KK47KK57KK67KK77KK+7KK/7KOA7KOB77+977+977+977+977+977+97KOC7KOD7KOF7KOG7KOH7KOJ7KOK7KOL7KON7KOO7KOP7KOQ7KOR7KOS7KOT7KOW7KOY7KOa7KOb7KOc7KOd7KOe7KOf7KOi7KOj7KOl77+977+977+977+977+977+97KOm7KOn7KOo7KOp7KOq7KOr7KOs7KOt7KOu7KOv7KOw7KOx7KOy7KOz7KO07KO27KO37KO47KO57KO67KO77KO+7KO/7KSB7KSC7KSD7KSH7KSI7KSJ7KSK7KSL7KSO44CA44CB44CCwrfigKXigKbCqOOAg8Kt4oCV4oil77y84oi84oCY4oCZ4oCc4oCd44CU44CV44CI44CJ44CK44CL44CM44CN44CO44CP44CQ44CRwrHDl8O34omg4omk4oml4oie4oi0wrDigLLigLPihIPihKvvv6Dvv6Hvv6XimYLimYDiiKDiiqXijJLiiILiiIfiiaHiiZLCp+KAu+KYhuKYheKXi+KXj+KXjuKXh+KXhuKWoeKWoOKWs+KWsuKWveKWvOKGkuKGkOKGkeKGk+KGlOOAk+KJquKJq+KImuKIveKIneKIteKIq+KIrOKIiOKIi+KKhuKKh+KKguKKg+KIquKIqeKIp+KIqO+/ou+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTYxXS5sZW5ndGg7ICsraikgaWYoRFsxNjFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTYxXVtqXV0gPSA0MTIxNiArIGo7IGRbNDEyMTYgKyBqXSA9IERbMTYxXVtqXTt9XG5EWzE2Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veykkOykkuykk+yklOykleykluykl+ykmeykmuykm+yknOykneyknuykn+ykoOykoeykouyko+ykpOykpeykpuykp+ykqOykqeykquykq++/ve+/ve+/ve+/ve+/ve+/veykreykruykr+yksOykseyksuyks+ykteyktuykt+ykuOykueykuuyku+ykvOykveykvuykv+ylgOylgeylguylg+ylhOylheylhuylh++/ve+/ve+/ve+/ve+/ve+/veyliOylieyliuyli+yljOyljeyljuylj+ylkuylk+ylleylluyll+ylmeylmuylm+ylnOylneylnuyln+ylouylpOylpeylpuylp+ylqOylqeylquylq+ylreylruylr+KHkuKHlOKIgOKIg8K0772ey4fLmMudy5rLmcK4y5vCocK/y5DiiK7iiJHiiI/CpOKEieKAsOKXgeKXgOKWt+KWtuKZpOKZoOKZoeKZpeKZp+KZo+KKmeKXiOKWo+KXkOKXkeKWkuKWpOKWpeKWqOKWp+KWpuKWqeKZqOKYj+KYjuKYnOKYnsK24oCg4oCh4oaV4oaX4oaZ4oaW4oaY4pmt4pmp4pmq4pms44m/44ic4oSW44+H4oSi44+C44+Y4oSh4oKswq7vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE2Ml0ubGVuZ3RoOyArK2opIGlmKERbMTYyXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE2Ml1bal1dID0gNDE0NzIgKyBqOyBkWzQxNDcyICsgal0gPSBEWzE2Ml1bal07fVxuRFsxNjNdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73spbHspbLspbPspbXspbbspbfspbjspbnspbrspbvspb3spb7spb/spoDspoHspoLspoPspoTspoXspobspofsporspovspo3spo7spo/vv73vv73vv73vv73vv73vv73sppHsppLsppPsppTsppXsppbsppfspprsppzspp7spp/spqDspqHspqLspqPspqTspqXspqbspqfspqjspqnspqrspqvspqzspq3spq7vv73vv73vv73vv73vv73vv73spq/sprDsprHsprLsprPsprTsprXsprbsprfsprjsprnsprrsprvsprzspr3spr7spr/sp4Lsp4Psp4Xsp4bsp4nsp4vsp4zsp43sp47sp4/sp5Lsp5Tsp5fsp5jsp5vvvIHvvILvvIPvvITvvIXvvIbvvIfvvIjvvInvvIrvvIvvvIzvvI3vvI7vvI/vvJDvvJHvvJLvvJPvvJTvvJXvvJbvvJfvvJjvvJnvvJrvvJvvvJzvvJ3vvJ7vvJ/vvKDvvKHvvKLvvKPvvKTvvKXvvKbvvKfvvKjvvKnvvKrvvKvvvKzvvK3vvK7vvK/vvLDvvLHvvLLvvLPvvLTvvLXvvLbvvLfvvLjvvLnvvLrvvLvvv6bvvL3vvL7vvL/vvYDvvYHvvYLvvYPvvYTvvYXvvYbvvYfvvYjvvYnvvYrvvYvvvYzvvY3vvY7vvY/vvZDvvZHvvZLvvZPvvZTvvZXvvZbvvZfvvZjvvZnvvZrvvZvvvZzvvZ3vv6Pvv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE2M10ubGVuZ3RoOyArK2opIGlmKERbMTYzXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE2M11bal1dID0gNDE3MjggKyBqOyBkWzQxNzI4ICsgal0gPSBEWzE2M11bal07fVxuRFsxNjRdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73sp57sp5/sp6Hsp6Psp6Xsp6bsp6jsp6nsp6rsp6vsp67sp7Lsp7Psp7Tsp7Xsp7bsp7fsp7rsp7vsp73sp77sp7/sqIHsqILsqIPsqITvv73vv73vv73vv73vv73vv73sqIXsqIbsqIfsqIrsqI7sqI/sqJDsqJHsqJLsqJPsqJXsqJbsqJfsqJnsqJrsqJvsqJzsqJ3sqJ7sqJ/sqKDsqKHsqKLsqKPsqKTsqKXvv73vv73vv73vv73vv73vv73sqKbsqKfsqKjsqKrsqKvsqKzsqK3sqK7sqK/sqLDsqLHsqLLsqLPsqLTsqLXsqLbsqLfsqLjsqLnsqLrsqLvsqLzsqL3sqL7sqL/sqYDsqYHsqYLsqYPsqYTsqYXsqYbjhLHjhLLjhLPjhLTjhLXjhLbjhLfjhLjjhLnjhLrjhLvjhLzjhL3jhL7jhL/jhYDjhYHjhYLjhYPjhYTjhYXjhYbjhYfjhYjjhYnjhYrjhYvjhYzjhY3jhY7jhY/jhZDjhZHjhZLjhZPjhZTjhZXjhZbjhZfjhZjjhZnjhZrjhZvjhZzjhZ3jhZ7jhZ/jhaDjhaHjhaLjhaPjhaTjhaXjhabjhafjhajjhanjharjhavjhazjha3jha7jha/jhbDjhbHjhbLjhbPjhbTjhbXjhbbjhbfjhbjjhbnjhbrjhbvjhbzjhb3jhb7jhb/jhoDjhoHjhoLjhoPjhoTjhoXjhobjhofjhojjhonjhorjhovjhozjho3jho7vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE2NF0ubGVuZ3RoOyArK2opIGlmKERbMTY0XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE2NF1bal1dID0gNDE5ODQgKyBqOyBkWzQxOTg0ICsgal0gPSBEWzE2NF1bal07fVxuRFsxNjVdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73sqYfsqYjsqYnsqYrsqYvsqY7sqY/sqZHsqZLsqZPsqZXsqZbsqZfsqZjsqZnsqZrsqZvsqZ7sqaLsqaPsqaTsqaXsqabsqafsqansqarvv73vv73vv73vv73vv73vv73sqavsqazsqa3sqa7sqa/sqbDsqbHsqbLsqbPsqbTsqbXsqbbsqbfsqbjsqbnsqbrsqbvsqbzsqb7sqb/sqoDsqoHsqoLsqoPsqoXsqobvv73vv73vv73vv73vv73vv73sqofsqojsqonsqorsqovsqozsqo3sqo7sqo/sqpDsqpHsqpLsqpPsqpTsqpXsqpbsqpfsqpnsqprsqpvsqpzsqp3sqp7sqp/sqqDsqqHsqqLsqqPsqqTsqqXsqqbsqqfihbDihbHihbLihbPihbTihbXihbbihbfihbjihbnvv73vv73vv73vv73vv73ihaDihaHihaLihaPihaTihaXihabihafihajihanvv73vv73vv73vv73vv73vv73vv73Okc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnvv73vv73vv73vv73vv73vv73vv73vv73Osc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4PPhM+Fz4bPh8+Iz4nvv73vv73vv73vv73vv73vv73vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE2NV0ubGVuZ3RoOyArK2opIGlmKERbMTY1XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE2NV1bal1dID0gNDIyNDAgKyBqOyBkWzQyMjQwICsgal0gPSBEWzE2NV1bal07fVxuRFsxNjZdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73sqqjsqqnsqqrsqqvsqqzsqq3sqq7sqq/sqrDsqrHsqrLsqrPsqrTsqrXsqrbsqrfsqrjsqrnsqrrsqrvsqr7sqr/sq4Hsq4Lsq4Psq4Xvv73vv73vv73vv73vv73vv73sq4bsq4fsq4jsq4nsq4rsq4vsq47sq5Dsq5Lsq5Tsq5Xsq5bsq5fsq5rsq5vsq5zsq53sq57sq5/sq6Hsq6Lsq6Psq6Tsq6Xsq6bsq6fvv73vv73vv73vv73vv73vv73sq6jsq6nsq6rsq6vsq63sq67sq6/sq7Dsq7Hsq7Lsq7Psq7Xsq7bsq7fsq7jsq7nsq7rsq7vsq7zsq73sq77sq7/srIDsrIHsrILsrIPsrITsrIXsrIbsrIfsrInsrIrilIDilILilIzilJDilJjilJTilJzilKzilKTilLTilLzilIHilIPilI/ilJPilJvilJfilKPilLPilKvilLvilYvilKDilK/ilKjilLfilL/ilJ3ilLDilKXilLjilYLilJLilJHilJrilJnilJbilJXilI7ilI3ilJ7ilJ/ilKHilKLilKbilKfilKnilKrilK3ilK7ilLHilLLilLXilLbilLnilLrilL3ilL7ilYDilYHilYPilYTilYXilYbilYfilYjilYnilYrvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE2Nl0ubGVuZ3RoOyArK2opIGlmKERbMTY2XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE2Nl1bal1dID0gNDI0OTYgKyBqOyBkWzQyNDk2ICsgal0gPSBEWzE2Nl1bal07fVxuRFsxNjddID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73srIvsrIzsrI3srI7srI/srJHsrJLsrJPsrJXsrJbsrJfsrJnsrJrsrJvsrJzsrJ3srJ7srJ/srKLsrKPsrKTsrKXsrKbsrKfsrKjsrKnvv73vv73vv73vv73vv73vv73srKrsrKvsrKzsrK3srK7srK/srLDsrLHsrLLsrLPsrLTsrLXsrLbsrLfsrLjsrLnsrLrsrLvsrLzsrL3srL7srL/srYDsrYLsrYPsrYTvv73vv73vv73vv73vv73vv73srYXsrYbsrYfsrYrsrYvsrY3srY7srY/srZHsrZLsrZPsrZTsrZXsrZbsrZfsrZrsrZvsrZzsrZ7srZ/sraDsraHsraLsraPsraXsrabsrafsrajsransrarsravsrazjjpXjjpbjjpfihJPjjpjjj4TjjqPjjqTjjqXjjqbjjpnjjprjjpvjjpzjjp3jjp7jjp/jjqDjjqHjjqLjj4rjjo3jjo7jjo/jj4/jjojjjonjj4jjjqfjjqjjjrDjjrHjjrLjjrPjjrTjjrXjjrbjjrfjjrjjjrnjjoDjjoHjjoLjjoPjjoTjjrrjjrvjjrzjjr3jjr7jjr/jjpDjjpHjjpLjjpPjjpTihKbjj4Djj4Hjjorjjovjjozjj5bjj4Xjjq3jjq7jjq/jj5vjjqnjjqrjjqvjjqzjj53jj5Djj5Pjj4Pjj4njj5zjj4bvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIi5zcGxpdChcIlwiKTtcbmZvcihqID0gMDsgaiAhPSBEWzE2N10ubGVuZ3RoOyArK2opIGlmKERbMTY3XVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzE2N11bal1dID0gNDI3NTIgKyBqOyBkWzQyNzUyICsgal0gPSBEWzE2N11bal07fVxuRFsxNjhdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73sra3sra7sra/srbDsrbHsrbLsrbPsrbTsrbXsrbbsrbfsrbrsrbvsrbzsrb3srb7srb/sroDsroHsroLsroPsroTsroXsrobsrofsrojvv73vv73vv73vv73vv73vv73sronsrorsrovsrozsro3sro7sro/srpDsrpHsrpLsrpPsrpTsrpXsrpbsrpfsrpjsrpnsrprsrpvsrp3srp7srp/srqDsrqHsrqLsrqPvv73vv73vv73vv73vv73vv73srqTsrqXsrqbsrqfsrqjsrqnsrqrsrqvsrqzsrq3srq7srq/srrDsrrHsrrLsrrPsrrTsrrXsrrbsrrfsrrnsrrrsrrvsrrzsrr3srr7srr/sr4Dsr4Hsr4Lsr4Psr4TDhsOQwqrEpu+/vcSy77+9xL/FgcOYxZLCusOexabFiu+/veOJoOOJoeOJouOJo+OJpOOJpeOJpuOJp+OJqOOJqeOJquOJq+OJrOOJreOJruOJr+OJsOOJseOJsuOJs+OJtOOJteOJtuOJt+OJuOOJueOJuuOJu+KTkOKTkeKTkuKTk+KTlOKTleKTluKTl+KTmOKTmeKTmuKTm+KTnOKTneKTnuKTn+KToOKToeKTouKTo+KTpOKTpeKTpuKTp+KTqOKTqeKRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqeKRquKRq+KRrOKRreKRrsK94oWT4oWUwrzCvuKFm+KFnOKFneKFnu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY4XS5sZW5ndGg7ICsraikgaWYoRFsxNjhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY4XVtqXV0gPSA0MzAwOCArIGo7IGRbNDMwMDggKyBqXSA9IERbMTY4XVtqXTt9XG5EWzE2OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veyvheyvhuyvh+yviOyvieyviuyvi+yvjOyvjeyvjuyvj+yvkOyvkeyvkuyvk+yvleyvluyvl+yvmOyvmeyvmuyvm+yvnOyvneyvnuyvn++/ve+/ve+/ve+/ve+/ve+/veyvoOyvoeyvouyvo+yvpeyvpuyvqOyvquyvq+yvrOyvreyvruyvr+yvsOyvseyvsuyvs+yvtOyvteyvtuyvt+yvuOyvueyvuuyvu+yvvO+/ve+/ve+/ve+/ve+/ve+/veyvveyvvuyvv+ywgOywgeywguywg+ywhOywheywhuywh+ywiOywieywiuywi+ywjuywj+ywkeywkuywk+ywleywluywl+ywmOywmeywmuywm+ywnuywn+ywoOywo+ywpMOmxJHDsMSnxLHEs8S4xYDFgsO4xZPDn8O+xafFi8WJ44iA44iB44iC44iD44iE44iF44iG44iH44iI44iJ44iK44iL44iM44iN44iO44iP44iQ44iR44iS44iT44iU44iV44iW44iX44iY44iZ44ia44ib4pKc4pKd4pKe4pKf4pKg4pKh4pKi4pKj4pKk4pKl4pKm4pKn4pKo4pKp4pKq4pKr4pKs4pKt4pKu4pKv4pKw4pKx4pKy4pKz4pK04pK14pG04pG14pG24pG34pG44pG54pG64pG74pG84pG94pG+4pG/4pKA4pKB4pKCwrnCssKz4oG04oG/4oKB4oKC4oKD4oKE77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjldLmxlbmd0aDsgKytqKSBpZihEWzE2OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjldW2pdXSA9IDQzMjY0ICsgajsgZFs0MzI2NCArIGpdID0gRFsxNjldW2pdO31cbkRbMTcwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97LCl7LCm7LCq7LCr7LCt7LCv7LCx7LCy7LCz7LC07LC17LC27LC37LC67LC/7LGA7LGB7LGC7LGD7LGG7LGH7LGJ7LGK7LGL7LGN7LGO77+977+977+977+977+977+97LGP7LGQ7LGR7LGS7LGT7LGW7LGa7LGb7LGc7LGd7LGe7LGf7LGh7LGi7LGj7LGl7LGn7LGp7LGq7LGr7LGs7LGt7LGu7LGv7LGx7LGy77+977+977+977+977+977+97LGz7LG07LG27LG37LG47LG57LG67LG77LG87LG97LG+7LG/7LKA7LKB7LKC7LKD7LKE7LKF7LKG7LKH7LKI7LKJ7LKK7LKL7LKM7LKN7LKO7LKP7LKQ7LKR7LKS7LKT44GB44GC44GD44GE44GF44GG44GH44GI44GJ44GK44GL44GM44GN44GO44GP44GQ44GR44GS44GT44GU44GV44GW44GX44GY44GZ44Ga44Gb44Gc44Gd44Ge44Gf44Gg44Gh44Gi44Gj44Gk44Gl44Gm44Gn44Go44Gp44Gq44Gr44Gs44Gt44Gu44Gv44Gw44Gx44Gy44Gz44G044G144G244G344G444G544G644G744G844G944G+44G/44KA44KB44KC44KD44KE44KF44KG44KH44KI44KJ44KK44KL44KM44KN44KO44KP44KQ44KR44KS44KT77+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzBdLmxlbmd0aDsgKytqKSBpZihEWzE3MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzBdW2pdXSA9IDQzNTIwICsgajsgZFs0MzUyMCArIGpdID0gRFsxNzBdW2pdO31cbkRbMTcxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97LKU7LKV7LKW7LKX7LKa7LKb7LKd7LKe7LKf7LKh7LKi7LKj7LKk7LKl7LKm7LKn7LKq7LKu7LKv7LKw7LKx7LKy7LKz7LK27LK37LK577+977+977+977+977+977+97LK67LK77LK97LK+7LK/7LOA7LOB7LOC7LOD7LOG7LOI7LOK7LOL7LOM7LON7LOO7LOP7LOR7LOS7LOT7LOV7LOW7LOX7LOY7LOZ7LOa77+977+977+977+977+977+97LOb7LOc7LOd7LOe7LOf7LOg7LOh7LOi7LOj7LOl7LOm7LOn7LOo7LOp7LOq7LOr7LOt7LOu7LOv7LOx7LOy7LOz7LO07LO17LO27LO37LO47LO57LO67LO77LO87LO944Kh44Ki44Kj44Kk44Kl44Km44Kn44Ko44Kp44Kq44Kr44Ks44Kt44Ku44Kv44Kw44Kx44Ky44Kz44K044K144K244K344K444K544K644K744K844K944K+44K/44OA44OB44OC44OD44OE44OF44OG44OH44OI44OJ44OK44OL44OM44ON44OO44OP44OQ44OR44OS44OT44OU44OV44OW44OX44OY44OZ44Oa44Ob44Oc44Od44Oe44Of44Og44Oh44Oi44Oj44Ok44Ol44Om44On44Oo44Op44Oq44Or44Os44Ot44Ou44Ov44Ow44Ox44Oy44Oz44O044O144O277+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzFdLmxlbmd0aDsgKytqKSBpZihEWzE3MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzFdW2pdXSA9IDQzNzc2ICsgajsgZFs0Mzc3NiArIGpdID0gRFsxNzFdW2pdO31cbkRbMTcyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97LO+7LO/7LSA7LSC7LSD7LSE7LSF7LSG7LSH7LSK7LSL7LSN7LSO7LSP7LSR7LSS7LST7LSU7LSV7LSW7LSX7LSa7LSc7LSe7LSf7LSg77+977+977+977+977+977+97LSh7LSi7LSj7LSl7LSm7LSn7LSp7LSq7LSr7LSt7LSu7LSv7LSw7LSx7LSy7LSz7LS07LS17LS27LS37LS47LS67LS77LS87LS97LS+77+977+977+977+977+977+97LS/7LWA7LWB7LWC7LWD7LWE7LWF7LWG7LWH7LWI7LWJ7LWK7LWL7LWM7LWN7LWO7LWP7LWQ7LWR7LWS7LWT7LWU7LWV7LWW7LWX7LWY7LWZ7LWa7LWb7LWd7LWe7LWf0JDQkdCS0JPQlNCV0IHQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+90LDQsdCy0LPQtNC10ZHQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP77+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzJdLmxlbmd0aDsgKytqKSBpZihEWzE3Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzJdW2pdXSA9IDQ0MDMyICsgajsgZFs0NDAzMiArIGpdID0gRFsxNzJdW2pdO31cbkRbMTczXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97LWh7LWi7LWj7LWl7LWm7LWn7LWo7LWp7LWq7LWr7LWu7LWw7LWy7LWz7LW07LW17LW27LW37LW57LW67LW77LW87LW97LW+7LW/7LaA77+977+977+977+977+977+97LaB7LaC7LaD7LaE7LaF7LaG7LaH7LaJ7LaK7LaL7LaM7LaN7LaO7LaP7LaQ7LaR7LaS7LaT7LaW7LaX7LaZ7Laa7Lab7Lad7Lae7Laf77+977+977+977+977+977+97Lag7Lah7Lai7Laj7Lam7Lao7Laq7Lar7Las7Lat7Lau7Lav7Lax7Lay7Laz7La07La17La27La37La47La57La67La77La87La97La+7La/7LeA7LeB7LeC7LeD7LeF77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzNdLmxlbmd0aDsgKytqKSBpZihEWzE3M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzNdW2pdXSA9IDQ0Mjg4ICsgajsgZFs0NDI4OCArIGpdID0gRFsxNzNdW2pdO31cbkRbMTc0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97LeG7LeH7LeI7LeJ7LeK7LeL7LeN7LeO7LeP7LeR7LeS7LeT7LeU7LeV7LeW7LeX7LeY7LeZ7Lea7Leb7Lec7Led7Lee7Lef7Leg7Leh77+977+977+977+977+977+97Lei7Lej7Lek7Lel7Lem7Len7Lep7Leq7Ler7Let7Leu7Lev7Lex7Ley7Lez7Le07Le17Le27Le37Le67Le87Le+7Le/7LiA7LiB7LiC77+977+977+977+977+977+97LiD7LiF7LiG7LiH7LiJ7LiK7LiL7LiN7LiO7LiP7LiQ7LiR7LiS7LiT7LiV7LiW7LiX7LiY7Lia7Lib7Lic7Lid7Lie7Lif7Lii7Lij7Lil7Lim7Lin7Lip7Liq7Lir77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzRdLmxlbmd0aDsgKytqKSBpZihEWzE3NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzRdW2pdXSA9IDQ0NTQ0ICsgajsgZFs0NDU0NCArIGpdID0gRFsxNzRdW2pdO31cbkRbMTc1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Lis7Lit7Liu7Liv7Liy7Li07Li27Li37Li47Li57Li67Li77Li87Li97Li+7Li/7LmA7LmB7LmC7LmD7LmE7LmF7LmG7LmH7LmI7LmJ77+977+977+977+977+977+97LmK7LmL7LmM7LmN7LmO7LmP7LmQ7LmR7LmS7LmT7LmU7LmV7LmW7LmX7Lma7Lmb7Lmd7Lme7Lmi7Lmj7Lmk7Lml7Lmm7Lmn7Lmq7Lms77+977+977+977+977+977+97Lmu7Lmv7Lmw7Lmx7Lmy7Lmz7Lm27Lm37Lm57Lm67Lm77Lm97Lm+7Lm/7LqA7LqB7LqC7LqD7LqG7LqI7LqK7LqL7LqM7LqN7LqO7LqP7LqS7LqT7LqV7LqW7LqX7LqZ77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzVdLmxlbmd0aDsgKytqKSBpZihEWzE3NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzVdW2pdXSA9IDQ0ODAwICsgajsgZFs0NDgwMCArIGpdID0gRFsxNzVdW2pdO31cbkRbMTc2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Lqa7Lqb7Lqc7Lqd7Lqe7Lqf7Lqi7Lqm7Lqn7Lqo7Lqp7Lqq7Lqr7Lqu7Lqv7Lqw7Lqx7Lqy7Lqz7Lq07Lq17Lq27Lq37Lq47Lq57Lq677+977+977+977+977+977+97Lq77Lq87Lq97Lq+7Lq/7LuA7LuC7LuD7LuE7LuF7LuG7LuH7LuI7LuJ7LuK7LuL7LuM7LuN7LuO7LuP7LuQ7LuR7LuS7LuT7LuU7LuV77+977+977+977+977+977+97LuW7LuX7LuY7LuZ7Lua7Lub7Luc7Lud7Lue7Luf7Lug7Luh7Lui7Luj7Lum7Lun7Lup7Luq7Lut7Luu7Luv7Luw7Lux7Luy7Luz7Lu27Lu67Lu77Lu87Lu97Lu+7Lu/6rCA6rCB6rCE6rCH6rCI6rCJ6rCK6rCQ6rCR6rCS6rCT6rCU6rCV6rCW6rCX6rCZ6rCa6rCb6rCc6rCd6rCg6rCk6rCs6rCt6rCv6rCw6rCx6rC46rC56rC86rGA6rGL6rGN6rGU6rGY6rGc6rGw6rGx6rG06rG36rG46rG66rKA6rKB6rKD6rKE6rKF6rKG6rKJ6rKK6rKL6rKM6rKQ6rKU6rKc6rKd6rKf6rKg6rKh6rKo6rKp6rKq6rKs6rKv6rKw6rK46rK56rK76rK86rK96rOB6rOE6rOI6rOM6rOV6rOX6rOg6rOh6rOk6rOn6rOo6rOq6rOs6rOv6rOw6rOx6rOz6rO16rO26rO86rO96rSA6rSE6rSG77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzZdLmxlbmd0aDsgKytqKSBpZihEWzE3Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzZdW2pdXSA9IDQ1MDU2ICsgajsgZFs0NTA1NiArIGpdID0gRFsxNzZdW2pdO31cbkRbMTc3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97LyC7LyD7LyF7LyG7LyH7LyJ7LyK7LyL7LyM7LyN7LyO7LyP7LyS7LyU7LyW7LyX7LyY7LyZ7Lya7Lyb7Lyd7Lye7Lyf7Lyh7Lyi7Lyj77+977+977+977+977+977+97Lyl7Lym7Lyn7Lyo7Lyp7Lyq7Lyr7Lyu7Lyy7Lyz7Ly07Ly17Ly27Ly37Ly57Ly67Ly77Ly87Ly97Ly+7Ly/7L2A7L2B7L2C7L2D7L2E77+977+977+977+977+977+97L2F7L2G7L2H7L2I7L2J7L2K7L2L7L2M7L2N7L2O7L2P7L2Q7L2R7L2S7L2T7L2W7L2X7L2Z7L2a7L2b7L2d7L2e7L2f7L2g7L2h7L2i7L2j7L2m7L2o7L2q7L2r7L2s6rSM6rSN6rSP6rSR6rSY6rSc6rSg6rSp6rSs6rSt6rS06rS16rS46rS86rWE6rWF6rWH6rWJ6rWQ6rWU6rWY6rWh6rWj6rWs6rWt6rWw6rWz6rW06rW16rW26rW76rW86rW96rW/6raB6raC6raI6raJ6raM6raQ6rac6rad6rak6ra36reA6reB6reE6reI6reQ6reR6reT6rec6reg6rek6re46re56re86re/6riA6riB6riI6riJ6riL6riN6riU6riw6rix6ri06ri36ri46ri66rmA6rmB6rmD6rmF6rmG6rmK6rmM6rmN6rmO6rmQ6rmU6rmW6rmc6rmd6rmf6rmg6rmh6rml6rmo6rmp6rms6rmw6rm477+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzddLmxlbmd0aDsgKytqKSBpZihEWzE3N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzddW2pdXSA9IDQ1MzEyICsgajsgZFs0NTMxMiArIGpdID0gRFsxNzddW2pdO31cbkRbMTc4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97L2t7L2u7L2v7L2y7L2z7L217L227L237L257L267L277L287L297L2+7L2/7L6B7L6C7L6D7L6E7L6G7L6H7L6I7L6J7L6K7L6L7L6N77+977+977+977+977+977+97L6O7L6P7L6Q7L6R7L6S7L6T7L6U7L6V7L6W7L6X7L6Y7L6Z7L6a7L6b7L6c7L6d7L6e7L6f7L6g7L6i7L6j7L6k7L6l7L6m7L6n7L6p77+977+977+977+977+977+97L6q7L6r7L6s7L6t7L6u7L6v7L6x7L6y7L6z7L607L617L627L637L647L657L667L677L687L697L6+7L6/7L+A7L+B7L+C7L+D7L+F7L+G7L+H7L+I7L+J7L+K7L+L6rm56rm76rm86rm96rqE6rqF6rqM6rq86rq96rq+6ruA6ruE6ruM6ruN6ruP6ruQ6ruR6ruY6ruZ6ruc6ruo6rur6rut6ru06ru46ru86ryH6ryI6ryN6ryQ6rys6ryt6ryw6ryy6ry06ry86ry96ry/6r2B6r2C6r2D6r2I6r2J6r2Q6r2c6r2d6r2k6r2l6r256r6A6r6E6r6I6r6Q6r6R6r6V6r6c6r646r656r686r+A6r+H6r+I6r+J6r+L6r+N6r+O6r+U6r+c6r+o6r+p6r+w6r+x6r+06r+464CA64CB64CE64CM64CQ64CU64Cc64Cd64Co64GE64GF64GI64GK64GM64GO64GT64GU64GV64GX64GZ77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzhdLmxlbmd0aDsgKytqKSBpZihEWzE3OF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzhdW2pdXSA9IDQ1NTY4ICsgajsgZFs0NTU2OCArIGpdID0gRFsxNzhdW2pdO31cbkRbMTc5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97L+M7L+N7L+O7L+P7L+Q7L+R7L+S7L+T7L+U7L+V7L+W7L+X7L+Y7L+Z7L+a7L+b7L+c7L+d7L+e7L+f7L+i7L+j7L+l7L+m7L+n7L+p77+977+977+977+977+977+97L+q7L+r7L+s7L+t7L+u7L+v7L+y7L+07L+27L+37L+47L+57L+67L+77L+97L++7L+/7YCB7YCC7YCD7YCF7YCG7YCH7YCI7YCJ7YCK77+977+977+977+977+977+97YCL7YCM7YCN7YCO7YCP7YCQ7YCS7YCT7YCU7YCV7YCW7YCX7YCZ7YCa7YCb7YCc7YCd7YCe7YCf7YCg7YCh7YCi7YCj7YCk7YCl7YCm7YCn7YCo7YCp7YCq7YCr7YCs64Gd64G864G964KA64KE64KM64KN64KP64KR64KY64KZ64Ka64Kc64Kf64Kg64Kh64Ki64Ko64Kp64Kr64Ks64Kt64Ku64Kv64Kx64Kz64K064K164K464K864OE64OF64OH64OI64OJ64OQ64OR64OU64OY64Og64Ol64SI64SJ64SL64SM64SQ64SS64ST64SY64SZ64Sb64Sc64Sd64Sj64Sk64Sl64So64Ss64S064S164S364S464S564WA64WB64WE64WI64WQ64WR64WU64WV64WY64Wc64Wg64W464W564W864aA64aC64aI64aJ64aL64aN64aS64aT64aU64aY64ac64ao64eM64eQ64eU64ec64ed77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNzldLmxlbmd0aDsgKytqKSBpZihEWzE3OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNzldW2pdXSA9IDQ1ODI0ICsgajsgZFs0NTgyNCArIGpdID0gRFsxNzldW2pdO31cbkRbMTgwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97YCu7YCv7YCw7YCx7YCy7YCz7YC27YC37YC57YC67YC77YC97YC+7YC/7YGA7YGB7YGC7YGD7YGG7YGI7YGK7YGL7YGM7YGN7YGO7YGP77+977+977+977+977+977+97YGR7YGS7YGT7YGV7YGW7YGX7YGZ7YGa7YGb7YGc7YGd7YGe7YGf7YGh7YGi7YGj7YGk7YGl7YGm7YGn7YGo7YGp7YGq7YGr7YGu7YGv77+977+977+977+977+977+97YGx7YGy7YGz7YG17YG27YG37YG47YG57YG67YG77YG+7YG/7YKA7YKC7YKD7YKE7YKF7YKG7YKH7YKI7YKJ7YKK7YKL7YKM7YKN7YKO7YKP7YKQ7YKR7YKS7YKT7YKU64ef64eo64ep64es64ew64e564e764e964iE64iF64iI64iL64iM64iU64iV64iX64iZ64ig64i064i864mY64mc64mg64mo64mp64m064m164m864qE64qF64qJ64qQ64qR64qU64qY64qZ64qa64qg64qh64qj64ql64qm64qq64qs64qw64q064uI64uJ64uM64uQ64uS64uY64uZ64ub64ud64ui64uk64ul64um64uo64ur64us64ut64uu64uv64uz64u064u164u364u464u564u664u764u/64yA64yB64yE64yI64yQ64yR64yT64yU64yV64yc642U642V642W642Y642b642c642e642f642k642l77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODBdLmxlbmd0aDsgKytqKSBpZihEWzE4MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODBdW2pdXSA9IDQ2MDgwICsgajsgZFs0NjA4MCArIGpdID0gRFsxODBdW2pdO31cbkRbMTgxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97YKV7YKW7YKX7YKY7YKZ7YKa7YKb7YKc7YKd7YKe7YKf7YKg7YKh7YKi7YKj7YKm7YKn7YKp7YKq7YKr7YKt7YKu7YKv7YKw7YKx7YKy77+977+977+977+977+977+97YKz7YK27YK47YK67YK77YK87YK97YK+7YK/7YOC7YOD7YOF7YOG7YOH7YOK7YOL7YOM7YON7YOO7YOP7YOS7YOW7YOX7YOY7YOZ7YOa77+977+977+977+977+977+97YOb7YOe7YOf7YOh7YOi7YOj7YOl7YOm7YOn7YOo7YOp7YOq7YOr7YOu7YOy7YOz7YO07YO17YO27YO37YO57YO67YO77YO87YO97YO+7YO/7YSA7YSB7YSC7YSD7YSE642n642p642r642u642w642x64206424646A646B646D646E646F646M646Q646U646g646h646o646s64+E64+F64+I64+L64+M64+O64+Q64+U64+V64+X64+Z64+b64+d64+g64+k64+o64+865CQ65CY65Cc65Cg65Co65Cp65Cr65C065GQ65GR65GU65GY65Gg65Gh65Gj65Gl65Gs65KA65KI65Kd65Kk65Ko65Ks65K165K365K565OA65OE65OI65OQ65OV65Oc65Od65Og65Oj65Ok65Om65Os65Ot65Ov65Ox65O465SU65SV65SY65Sb65Sc65Sk65Sl65Sn65So65Sp65Sq65Sw65Sx65S065S477+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODFdLmxlbmd0aDsgKytqKSBpZihEWzE4MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODFdW2pdXSA9IDQ2MzM2ICsgajsgZFs0NjMzNiArIGpdID0gRFsxODFdW2pdO31cbkRbMTgyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97YSF7YSG7YSH7YSI7YSJ7YSK7YSL7YSM7YSO7YSP7YSQ7YSR7YSS7YST7YSU7YSV7YSW7YSX7YSY7YSZ7YSa7YSb7YSc7YSd7YSe7YSf77+977+977+977+977+977+97YSg7YSh7YSi7YSj7YSk7YSl7YSm7YSn7YSo7YSp7YSq7YSr7YSs7YSt7YSu7YSv7YSy7YSz7YS17YS27YS37YS57YS77YS87YS97YS+77+977+977+977+977+977+97YS/7YWC7YWG7YWH7YWI7YWJ7YWK7YWL7YWO7YWP7YWR7YWS7YWT7YWV7YWW7YWX7YWY7YWZ7YWa7YWb7YWe7YWg7YWi7YWj7YWk7YWl7YWm7YWn7YWp7YWq7YWr7YWt65WA65WB65WD65WE65WF65WL65WM65WN65WQ65WU65Wc65Wd65Wf65Wg65Wh65ag65ah65ak65ao65aq65ar65aw65ax65az65a065a165a765a865a965eA65eE65eM65eN65eP65eQ65eR65eY65es65iQ65iR65iU65iY65il65is65i065mI65mk65mo65qc65qd65qg65qk65qr65qs65qx65uU65uw65u065u465yA65yB65yF65yo65yp65ys65yv65yw65y465y565y7652E652I652M652U652V652g652k652o652w652x652z652165286529656A656E656M656N656P656Q656R656S656W656X77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODJdLmxlbmd0aDsgKytqKSBpZihEWzE4Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODJdW2pdXSA9IDQ2NTkyICsgajsgZFs0NjU5MiArIGpdID0gRFsxODJdW2pdO31cbkRbMTgzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97YWu7YWv7YWw7YWx7YWy7YWz7YW07YW17YW27YW37YW47YW57YW67YW77YW97YW+7YW/7YaA7YaB7YaC7YaD7YaF7YaG7YaH7YaJ7YaK77+977+977+977+977+977+97YaL7YaM7YaN7YaO7YaP7YaQ7YaR7YaS7YaT7YaU7YaV7YaW7YaX7YaY7YaZ7Yaa7Yab7Yac7Yad7Yae7Yaf7Yai7Yaj7Yal7Yam7Yan77+977+977+977+977+977+97Yap7Yaq7Yar7Yas7Yat7Yau7Yav7Yay7Ya07Ya27Ya37Ya47Ya57Ya77Ya97Ya+7Ya/7YeB7YeC7YeD7YeE7YeF7YeG7YeH7YeI7YeJ7YeK7YeL7YeM7YeN7YeO7YeP656Y656Z656c656g656o656p656r656s656t65606561656465+H65+J65+s65+t65+w65+065+865+965+/66CA66CB66CH66CI66CJ66CM66CQ66CY66CZ66Cb66Cd66Ck66Cl66Co66Cs66C066C166C366C466C566GA66GE66GR66GT66Gc66Gd66Gg66Gk66Gs66Gt66Gv66Gx66G466G866KN66Ko66Kw66K066K466OA66OB66OD66OF66OM66OQ66OU66Od66Of66Oh66Oo66Op66Os66Ow66O466O566O766O966SE66SY66Sg66S866S966WA66WE66WM66WP66WR66WY66WZ66Wc66Wg66Wo66Wp77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODNdLmxlbmd0aDsgKytqKSBpZihEWzE4M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODNdW2pdXSA9IDQ2ODQ4ICsgajsgZFs0Njg0OCArIGpdID0gRFsxODNdW2pdO31cbkRbMTg0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97YeQ7YeR7YeS7YeT7YeU7YeV7YeW7YeX7YeZ7Yea7Yeb7Yec7Yed7Yee7Yef7Yeg7Yeh7Yei7Yej7Yek7Yel7Yem7Yen7Yeo7Yep7Yeq77+977+977+977+977+977+97Yer7Yes7Yet7Yeu7Yev7Yew7Yex7Yey7Yez7Ye17Ye27Ye37Ye57Ye67Ye77Ye87Ye97Ye+7Ye/7YiA7YiB7YiC7YiD7YiE7YiF7YiG77+977+977+977+977+977+97YiI7YiK7YiL7YiM7YiN7YiO7YiP7YiR7YiS7YiT7YiU7YiV7YiW7YiX7YiY7YiZ7Yia7Yib7Yic7Yid7Yie7Yif7Yig7Yih7Yii7Yij7Yik7Yil7Yim7Yin7Yio7Yip66Wr66Wt66W066W166W466W866aE66aF66aH66aJ66aK66aN66aO66as66at66aw66a066a866a966a/66eB66eI66eJ66eM66eO66eP66eQ66eR66eS66eY66eZ66eb66ed66ee66eh66ej66ek66el66eo66es66e066e166e366e466e566e666iA66iB66iI66iV66i466i566i866mA66mC66mI66mJ66mL66mN66mO66mT66mU66mV66mY66mc66mk66ml66mn66mo66mp66mw66mx66m066m466qD66qE66qF66qH66qM66qo66qp66qr66qs66qw66qy66q466q566q766q966uE66uI66uY66uZ66u877+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODRdLmxlbmd0aDsgKytqKSBpZihEWzE4NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODRdW2pdXSA9IDQ3MTA0ICsgajsgZFs0NzEwNCArIGpdID0gRFsxODRdW2pdO31cbkRbMTg1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Yiq7Yir7Yiu7Yiv7Yix7Yiy7Yiz7Yi17Yi27Yi37Yi47Yi57Yi67Yi77Yi+7YmA7YmC7YmD7YmE7YmF7YmG7YmH7YmJ7YmK7YmL7YmM77+977+977+977+977+977+97YmN7YmO7YmP7YmQ7YmR7YmS7YmT7YmU7YmV7YmW7YmX7YmY7YmZ7Yma7Ymb7Ymd7Yme7Ymf7Ymg7Ymh7Ymi7Ymj7Yml7Ymm7Ymn7Ymo77+977+977+977+977+977+97Ymp7Ymq7Ymr7Yms7Ymt7Ymu7Ymv7Ymw7Ymx7Ymy7Ymz7Ym07Ym17Ym27Ym37Ym47Ym57Ym67Ym77Ym87Ym97Ym+7Ym/7YqC7YqD7YqF7YqG7YqH7YqJ7YqK7YqL7YqM66yA66yE66yN66yP66yR66yY66yc66yg66yp66yr66y066y166y266y466y766y866y966y+662E662F662H662J662N662P662Q662U662Y662h662j662s666I666M666Q666k666o666s6660666366+A66+E66+I66+Q66+T66+466+566+866+/67CA67CC67CI67CJ67CL67CM67CN67CP67CR67CU67CV67CW67CX67CY67Cb67Cc67Cd67Ce67Cf67Ck67Cl67Cn67Cp67Ct67Cw67Cx67C067C467GA67GB67GD67GE67GF67GJ67GM67GN67GQ67Gd67KE67KF67KI67KL67KM67KO67KU67KV67KX77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODVdLmxlbmd0aDsgKytqKSBpZihEWzE4NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODVdW2pdXSA9IDQ3MzYwICsgajsgZFs0NzM2MCArIGpdID0gRFsxODVdW2pdO31cbkRbMTg2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97YqN7YqO7YqP7YqS7YqT7YqU7YqW7YqX7YqY7YqZ7Yqa7Yqb7Yqd7Yqe7Yqf7Yqh7Yqi7Yqj7Yql7Yqm7Yqn7Yqo7Yqp7Yqq7Yqr7Yqt77+977+977+977+977+977+97Yqu7Yqv7Yqw7Yqy7Yqz7Yq07Yq17Yq27Yq37Yq67Yq77Yq97Yq+7YuB7YuD7YuE7YuF7YuG7YuH7YuK7YuM7YuN7YuO7YuP7YuQ7YuR77+977+977+977+977+977+97YuS7YuT7YuV7YuW7YuX7YuZ7Yua7Yub7Yud7Yue7Yuf7Yug7Yuh7Yui7Yuj7Yum7Yun7Yuo7Yup7Yuq7Yur7Yus7Yut7Yuu7Yuv7Yuy7Yuz7Yu17Yu27Yu37Yu57Yu667KZ67Ka67Kg67Kh67Kk67Kn67Ko67Kw67Kx67Kz67K067K167K867K967OA67OE67ON67OP67OQ67OR67OV67OY67Oc67O067O167O267O467O867SE67SF67SH67SJ67SQ67SU67Sk67Ss67WA67WI67WJ67WM67WQ67WY67WZ67Wk67Wo67aA67aB67aE67aH67aI67aJ67aK67aQ67aR67aT67aV67aZ67aa67ac67ak67aw67a467eU67eV67eY67ec67ep67ew67e067e467iA67iD67iF67iM67iN67iQ67iU67ic67id67if67mE67mF67mI67mM67mO67mU67mV67mX67mZ67ma67mb67mg67mh67mk77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODZdLmxlbmd0aDsgKytqKSBpZihEWzE4Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODZdW2pdXSA9IDQ3NjE2ICsgajsgZFs0NzYxNiArIGpdID0gRFsxODZdW2pdO31cbkRbMTg3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Yu77Yu87Yu97Yu+7Yu/7YyC7YyE7YyG7YyH7YyI7YyJ7YyK7YyL7YyP7YyR7YyS7YyT7YyV7YyX7YyY7YyZ7Yya7Yyb7Yye7Yyi7Yyj77+977+977+977+977+977+97Yyk7Yym7Yyn7Yyq7Yyr7Yyt7Yyu7Yyv7Yyx7Yyy7Yyz7Yy07Yy17Yy27Yy37Yy67Yy+7Yy/7Y2A7Y2B7Y2C7Y2D7Y2G7Y2H7Y2I7Y2J77+977+977+977+977+977+97Y2K7Y2L7Y2M7Y2N7Y2O7Y2P7Y2Q7Y2R7Y2S7Y2T7Y2U7Y2V7Y2W7Y2X7Y2Y7Y2Z7Y2a7Y2b7Y2c7Y2d7Y2e7Y2f7Y2g7Y2h7Y2i7Y2j7Y2k7Y2l7Y2m7Y2n7Y2o7Y2p67mo67mq67mw67mx67mz67m067m167m767m867m967qA67qE67qM67qN67qP67qQ67qR67qY67qZ67qo67uQ67uR67uU67uX67uY67ug67uj67uk67ul67us67yB67yI67yJ67yY67yZ67yb67yc67yd672A672B672E672I672Q672R672V676U676w67+F67+M67+N67+Q67+U67+c67+f67+h7IC87IGR7IGY7IGc7IGg7IGo7IGp7IKQ7IKR7IKU7IKY7IKg7IKh7IKj7IKl7IKs7IKt7IKv7IKw7IKz7IK07IK17IK27IK87IK97IK/7IOA7IOB7IOF7IOI7IOJ7IOM7IOQ7IOY7IOZ7IOb7IOc7IOd7IOk77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODddLmxlbmd0aDsgKytqKSBpZihEWzE4N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODddW2pdXSA9IDQ3ODcyICsgajsgZFs0Nzg3MiArIGpdID0gRFsxODddW2pdO31cbkRbMTg4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Y2q7Y2r7Y2s7Y2t7Y2u7Y2v7Y2w7Y2x7Y2y7Y2z7Y207Y217Y227Y237Y247Y257Y267Y277Y2+7Y2/7Y6B7Y6C7Y6D7Y6F7Y6G7Y6H77+977+977+977+977+977+97Y6I7Y6J7Y6K7Y6L7Y6O7Y6S7Y6T7Y6U7Y6V7Y6W7Y6X7Y6a7Y6b7Y6d7Y6e7Y6f7Y6h7Y6i7Y6j7Y6k7Y6l7Y6m7Y6n7Y6q7Y6s7Y6u77+977+977+977+977+977+97Y6v7Y6w7Y6x7Y6y7Y6z7Y617Y627Y637Y657Y667Y677Y697Y6+7Y6/7Y+A7Y+B7Y+C7Y+D7Y+G7Y+H7Y+K7Y+L7Y+M7Y+N7Y+O7Y+P7Y+R7Y+S7Y+T7Y+U7Y+V7Y+W7IOl7IOo7IOs7IO07IO17IO37IO57ISA7ISE7ISI7ISQ7ISV7ISc7ISd7ISe7ISf7ISg7ISj7ISk7ISm7ISn7ISs7ISt7ISv7ISw7ISx7IS27IS47IS57IS87IWA7IWI7IWJ7IWL7IWM7IWN7IWU7IWV7IWY7IWc7IWk7IWl7IWn7IWo7IWp7IWw7IW07IW47IaF7IaM7IaN7IaO7IaQ7IaU7IaW7Iac7Iad7Iaf7Iah7Ial7Iao7Iap7Ias7Iaw7Ia97IeE7IeI7IeM7IeU7IeX7IeY7Ieg7Iek7Ieo7Iew7Iex7Iez7Ie87Ie97IiA7IiE7IiM7IiN7IiP7IiR7IiY7IiZ7Iic7Iif7Iig7Iio7Iip7Iir7Iit77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODhdLmxlbmd0aDsgKytqKSBpZihEWzE4OF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODhdW2pdXSA9IDQ4MTI4ICsgajsgZFs0ODEyOCArIGpdID0gRFsxODhdW2pdO31cbkRbMTg5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Y+X7Y+Z7Y+a7Y+b7Y+c7Y+d7Y+e7Y+f7Y+g7Y+i7Y+k7Y+l7Y+m7Y+n7Y+o7Y+p7Y+q7Y+r7Y+u7Y+v7Y+x7Y+y7Y+z7Y+17Y+27Y+377+977+977+977+977+977+97Y+47Y+57Y+67Y+77Y++7ZCA7ZCC7ZCD7ZCE7ZCF7ZCG7ZCH7ZCJ7ZCK7ZCL7ZCM7ZCN7ZCO7ZCP7ZCQ7ZCR7ZCS7ZCT7ZCU7ZCV7ZCW77+977+977+977+977+977+97ZCX7ZCY7ZCZ7ZCa7ZCb7ZCc7ZCe7ZCf7ZCg7ZCh7ZCi7ZCj7ZCk7ZCl7ZCm7ZCn7ZCo7ZCp7ZCq7ZCr7ZCs7ZCt7ZCu7ZCv7ZCw7ZCx7ZCy7ZCz7ZC07ZC17ZC27ZC37Iiv7Iix7Iiy7Ii07ImI7ImQ7ImR7ImU7ImY7Img7Iml7Ims7Imt7Imw7Im07Im87Im97Im/7IqB7IqI7IqJ7IqQ7IqY7Iqb7Iqd7Iqk7Iql7Iqo7Iqs7Iqt7Iq07Iq17Iq37Iq57Iuc7Iud7Iug7Iuj7Iuk7Iur7Ius7Iut7Iuv7Iux7Iu27Iu47Iu57Iu77Iu87IyA7IyI7IyJ7IyM7IyN7IyT7IyU7IyV7IyY7Iyc7Iyk7Iyl7Iyo7Iyp7I2F7I2o7I2p7I2s7I2w7I2y7I247I257I287I297I6E7I6I7I6M7I+A7I+Y7I+Z7I+c7I+f7I+g7I+i7I+o7I+p7I+t7I+07I+17I+47JCI7JCQ7JCk7JCs7JCw77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxODldLmxlbmd0aDsgKytqKSBpZihEWzE4OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxODldW2pdXSA9IDQ4Mzg0ICsgajsgZFs0ODM4NCArIGpdID0gRFsxODldW2pdO31cbkRbMTkwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97ZC47ZC57ZC67ZC77ZC87ZC97ZC+7ZC/7ZGB7ZGC7ZGD7ZGF7ZGG7ZGH7ZGI7ZGJ7ZGK7ZGL7ZGM7ZGN7ZGO7ZGP7ZGQ7ZGR7ZGS7ZGT77+977+977+977+977+977+97ZGU7ZGV7ZGW7ZGX7ZGY7ZGZ7ZGa7ZGb7ZGd7ZGe7ZGf7ZGh7ZGi7ZGj7ZGl7ZGm7ZGn7ZGo7ZGp7ZGq7ZGr7ZGs7ZGu7ZGw7ZGx7ZGy77+977+977+977+977+977+97ZGz7ZG07ZG17ZG27ZG37ZG67ZG77ZG97ZG+7ZKB7ZKD7ZKE7ZKF7ZKG7ZKH7ZKK7ZKM7ZKO7ZKP7ZKQ7ZKR7ZKS7ZKT7ZKV7ZKW7ZKX7ZKY7ZKZ7ZKa7ZKb7ZKc7ZKd7JC07JC87JC97JGI7JGk7JGl7JGo7JGs7JG07JG17JG57JKA7JKU7JKc7JK47JK87JOp7JOw7JOx7JO07JO47JO67JO/7JSA7JSB7JSM7JSQ7JSU7JSc7JSo7JSp7JSs7JSw7JS47JS57JS77JS97JWE7JWF7JWI7JWJ7JWK7JWM7JWN7JWO7JWT7JWU7JWV7JWX7JWY7JWZ7JWd7JWe7JWg7JWh7JWk7JWo7JWw7JWx7JWz7JW07JW17JW87JW97JaA7JaE7JaH7JaM7JaN7JaP7JaR7JaV7JaX7JaY7Jac7Jag7Jap7Ja07Ja17Ja47Ja57Ja77Ja87Ja97Ja+7JeE7JeF7JeG7JeH7JeI7JeJ7JeK7JeM7JeO77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTBdLmxlbmd0aDsgKytqKSBpZihEWzE5MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTBdW2pdXSA9IDQ4NjQwICsgajsgZFs0ODY0MCArIGpdID0gRFsxOTBdW2pdO31cbkRbMTkxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97ZKe7ZKf7ZKg7ZKh7ZKi7ZKj7ZKk7ZKl7ZKm7ZKn7ZKo7ZKq7ZKr7ZKs7ZKt7ZKu7ZKv7ZKw7ZKx7ZKy7ZKz7ZK07ZK17ZK27ZK37ZK477+977+977+977+977+977+97ZK57ZK67ZK77ZK87ZK97ZK+7ZK/7ZOA7ZOB7ZOC7ZOD7ZOE7ZOF7ZOG7ZOH7ZOI7ZOJ7ZOK7ZOL7ZON7ZOO7ZOP7ZOR7ZOS7ZOT7ZOV77+977+977+977+977+977+97ZOW7ZOX7ZOY7ZOZ7ZOa7ZOb7ZOd7ZOe7ZOg7ZOh7ZOi7ZOj7ZOk7ZOl7ZOm7ZOn7ZOp7ZOq7ZOr7ZOt7ZOu7ZOv7ZOx7ZOy7ZOz7ZO07ZO17ZO27ZO37ZO57ZO67ZO87JeQ7JeR7JeU7JeY7Jeg7Jeh7Jej7Jel7Jes7Jet7Jeu7Jew7Je07Je27Je37Je87Je97Je+7Je/7JiA7JiB7JiF7JiG7JiH7JiI7JiM7JiQ7JiY7JiZ7Jib7Jic7Jik7Jil7Jio7Jis7Jit7Jiu7Jiw7Jiz7Ji07Ji17Ji37Ji57Ji77JmA7JmB7JmE7JmI7JmQ7JmR7JmT7JmU7JmV7Jmc7Jmd7Jmg7Jms7Jmv7Jmx7Jm47Jm57Jm87JqA7JqI7JqJ7JqL7JqN7JqU7JqV7JqY7Jqc7Jqk7Jql7Jqn7Jqp7Jqw7Jqx7Jq07Jq47Jq57Jq67JuA7JuB7JuD7JuF7JuM7JuN7JuQ7JuU7Juc7Jud7Jug7Juh7Juo77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTFdLmxlbmd0aDsgKytqKSBpZihEWzE5MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTFdW2pdXSA9IDQ4ODk2ICsgajsgZFs0ODg5NiArIGpdID0gRFsxOTFdW2pdO31cbkRbMTkyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97ZO+7ZO/7ZSA7ZSB7ZSC7ZSD7ZSF7ZSG7ZSH7ZSJ7ZSK7ZSL7ZSN7ZSO7ZSP7ZSQ7ZSR7ZSS7ZST7ZSW7ZSY7ZSZ7ZSa7ZSb7ZSc7ZSd77+977+977+977+977+977+97ZSe7ZSf7ZSg7ZSh7ZSi7ZSj7ZSk7ZSl7ZSm7ZSn7ZSo7ZSp7ZSq7ZSr7ZSs7ZSt7ZSu7ZSv7ZSw7ZSx7ZSy7ZSz7ZS07ZS17ZS27ZS377+977+977+977+977+977+97ZS47ZS57ZS67ZS77ZS+7ZS/7ZWB7ZWC7ZWD7ZWF7ZWG7ZWH7ZWI7ZWJ7ZWK7ZWL7ZWO7ZWQ7ZWS7ZWT7ZWU7ZWV7ZWW7ZWX7ZWa7ZWb7ZWd7ZWe7ZWf7ZWh7ZWi7ZWj7Jup7Jus7Juw7Ju47Ju57Ju97JyE7JyF7JyI7JyM7JyU7JyV7JyX7JyZ7Jyg7Jyh7Jyk7Jyo7Jyw7Jyx7Jyz7Jy17Jy37Jy87Jy97J2A7J2E7J2K7J2M7J2N7J2P7J2R7J2S7J2T7J2U7J2V7J2W7J2X7J2Y7J2c7J2g7J2o7J2r7J207J217J247J287J297J2+7J6D7J6E7J6F7J6H7J6I7J6J7J6K7J6O7J6Q7J6R7J6U7J6W7J6X7J6Y7J6a7J6g7J6h7J6j7J6k7J6l7J6m7J6s7J6t7J6w7J607J687J697J6/7J+A7J+B7J+I7J+J7J+M7J+O7J+Q7J+Y7J+d7J+k7J+o7J+s7KCA7KCB7KCE7KCI7KCK77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTJdLmxlbmd0aDsgKytqKSBpZihEWzE5Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTJdW2pdXSA9IDQ5MTUyICsgajsgZFs0OTE1MiArIGpdID0gRFsxOTJdW2pdO31cbkRbMTkzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97ZWk7ZWm7ZWn7ZWq7ZWs7ZWu7ZWv7ZWw7ZWx7ZWy7ZWz7ZW27ZW37ZW57ZW67ZW77ZW97ZW+7ZW/7ZaA7ZaB7ZaC7ZaD7ZaG7ZaK7ZaL77+977+977+977+977+977+97ZaM7ZaN7ZaO7ZaP7ZaR7ZaS7ZaT7ZaU7ZaV7ZaW7ZaX7ZaY7ZaZ7Zaa7Zab7Zac7Zad7Zae7Zaf7Zag7Zah7Zai7Zaj7Zak7Zam7Zan77+977+977+977+977+977+97Zao7Zap7Zaq7Zar7Zas7Zat7Zau7Zav7Zaw7Zax7Zay7Zaz7Za07Za17Za27Za37Za47Za57Za67Za77Za87Za97Za+7Za/7ZeA7ZeB7ZeC7ZeD7ZeE7ZeF7ZeG7ZeH7KCQ7KCR7KCT7KCV7KCW7KCc7KCd7KCg7KCk7KCs7KCt7KCv7KCx7KC47KC87KGA7KGI7KGJ7KGM7KGN7KGU7KGw7KGx7KG07KG47KG67KKA7KKB7KKD7KKF7KKG7KKH7KKL7KKM7KKN7KKU7KKd7KKf7KKh7KKo7KK87KK97KOE7KOI7KOM7KOU7KOV7KOX7KOZ7KOg7KOh7KOk7KO17KO87KO97KSA7KSE7KSF7KSG7KSM7KSN7KSP7KSR7KSY7KSs7KS07KWQ7KWR7KWU7KWY7KWg7KWh7KWj7KWs7KWw7KW07KW87KaI7KaJ7KaM7KaQ7KaY7KaZ7Kab7Kad7KeA7KeB7KeE7KeH7KeI7KeK7KeQ7KeR7KeT77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTNdLmxlbmd0aDsgKytqKSBpZihEWzE5M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTNdW2pdXSA9IDQ5NDA4ICsgajsgZFs0OTQwOCArIGpdID0gRFsxOTNdW2pdO31cbkRbMTk0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97ZeK7ZeL7ZeN7ZeO7ZeP7ZeR7ZeT7ZeU7ZeV7ZeW7ZeX7Zea7Zec7Zee7Zef7Zeg7Zeh7Zei7Zej7Zem7Zen7Zep7Zeq7Zer7Zet7Zeu77+977+977+977+977+977+97Zev7Zew7Zex7Zey7Zez7Ze27Ze47Ze67Ze77Ze87Ze97Ze+7Ze/7ZiC7ZiD7ZiF7ZiG7ZiH7ZiJ7ZiK7ZiL7ZiM7ZiN7ZiO7ZiP7ZiS77+977+977+977+977+977+97ZiW7ZiX7ZiY7ZiZ7Zia7Zib7Zid7Zie7Zif7Zih7Zii7Zij7Zil7Zim7Zin7Zio7Zip7Ziq7Zir7Zis7Ziu7Ziv7Ziw7Zix7Ziy7Ziz7Zi07Zi17Zi27Zi37Zi67Zi77KeV7KeW7KeZ7Kea7Kec7Ked7Keg7Kei7Kek7Ken7Kes7Ket7Kev7Kew7Kex7Ke47Ke57Ke87KiA7KiI7KiJ7KiL7KiM7KiN7KiU7KiY7Kip7KmM7KmN7KmQ7KmU7Kmc7Kmd7Kmf7Kmg7Kmh7Kmo7Km97KqE7KqY7Kq87Kq97KuA7KuE7KuM7KuN7KuP7KuR7KuT7KuY7KuZ7Kug7Kus7Ku07KyI7KyQ7KyU7KyY7Kyg7Kyh7K2B7K2I7K2J7K2M7K2Q7K2Y7K2Z7K2d7K2k7K247K257K6c7K647K+U7K+k7K+n7K+p7LCM7LCN7LCQ7LCU7LCc7LCd7LCh7LCi7LCn7LCo7LCp7LCs7LCu7LCw7LC47LC57LC777+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTRdLmxlbmd0aDsgKytqKSBpZihEWzE5NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTRdW2pdXSA9IDQ5NjY0ICsgajsgZFs0OTY2NCArIGpdID0gRFsxOTRdW2pdO31cbkRbMTk1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Zi97Zi+7Zi/7ZmB7ZmC7ZmD7ZmE7ZmG7ZmH7ZmK7ZmM7ZmO7ZmP7ZmQ7ZmS7ZmT7ZmW7ZmX7ZmZ7Zma7Zmb7Zmd7Zme7Zmf7Zmg7Zmh77+977+977+977+977+977+97Zmi7Zmj7Zmk7Zml7Zmm7Zmo7Zmq7Zmr7Zms7Zmt7Zmu7Zmv7Zmy7Zmz7Zm17Zm27Zm37Zm47Zm57Zm67Zm77Zm87Zm97Zm+7Zm/7ZqA77+977+977+977+977+977+97ZqB7ZqC7ZqE7ZqG7ZqH7ZqI7ZqJ7ZqK7ZqL7ZqO7ZqP7ZqR7ZqS7ZqT7ZqV7ZqW7ZqX7ZqY7ZqZ7Zqa7Zqb7Zqc7Zqe7Zqg7Zqi7Zqj7Zqk7Zql7Zqm7Zqn7Zqp7Zqq7LC87LC97LC+7LGE7LGF7LGI7LGM7LGU7LGV7LGX7LGY7LGZ7LGg7LGk7LGm7LGo7LGw7LG17LKY7LKZ7LKc7LKg7LKo7LKp7LKr7LKs7LKt7LK07LK17LK47LK87LOE7LOF7LOH7LOJ7LOQ7LOU7LOk7LOs7LOw7LSB7LSI7LSJ7LSM7LSQ7LSY7LSZ7LSb7LSd7LSk7LSo7LSs7LS57LWc7LWg7LWk7LWs7LWt7LWv7LWx7LW47LaI7LaU7LaV7LaY7Lac7Lak7Lal7Lan7Lap7Law7LeE7LeM7LeQ7Leo7Les7Lew7Le47Le57Le77Le97LiE7LiI7LiM7LiU7LiZ7Lig7Lih7Lik7Lio7Liw7Lix7Liz7Li177+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTVdLmxlbmd0aDsgKytqKSBpZihEWzE5NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTVdW2pdXSA9IDQ5OTIwICsgajsgZFs0OTkyMCArIGpdID0gRFsxOTVdW2pdO31cbkRbMTk2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Zqr7Zqt7Zqu7Zqv7Zqx7Zqy7Zqz7Zq07Zq17Zq27Zq37Zq47Zq67Zq87Zq97Zq+7Zq/7ZuA7ZuB7ZuC7ZuD7ZuG7ZuH7ZuJ7ZuK7ZuL77+977+977+977+977+977+97ZuN7ZuO7ZuP7ZuQ7ZuS7ZuT7ZuV7ZuW7ZuY7Zua7Zub7Zuc7Zud7Zue7Zuf7Zuh7Zui7Zuj7Zul7Zum7Zun7Zup7Zuq7Zur7Zus7Zut77+977+977+977+977+977+97Zuu7Zuv7Zux7Zuy7Zuz7Zu07Zu27Zu37Zu47Zu57Zu67Zu77Zu+7Zu/7ZyB7ZyC7ZyD7ZyF7ZyG7ZyH7ZyI7ZyJ7ZyK7ZyL7ZyM7ZyN7ZyO7ZyP7ZyQ7ZyS7ZyT7ZyU7LmY7LmZ7Lmc7Lmf7Lmg7Lmh7Lmo7Lmp7Lmr7Lmt7Lm07Lm17Lm47Lm87LqE7LqF7LqH7LqJ7LqQ7LqR7LqU7LqY7Lqg7Lqh7Lqj7Lqk7Lql7Lqs7Lqt7LuB7Luk7Lul7Luo7Lur7Lus7Lu07Lu17Lu37Lu47Lu57LyA7LyB7LyE7LyI7LyQ7LyR7LyT7LyV7Lyc7Lyg7Lyk7Lys7Lyt7Lyv7Lyw7Lyx7Ly47L2U7L2V7L2Y7L2c7L2k7L2l7L2n7L2p7L2w7L2x7L207L247L6A7L6F7L6M7L6h7L6o7L6w7L+E7L+g7L+h7L+k7L+o7L+w7L+x7L+z7L+17L+87YCA7YCE7YCR7YCY7YCt7YC07YC17YC47YC877+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTZdLmxlbmd0aDsgKytqKSBpZihEWzE5Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTZdW2pdXSA9IDUwMTc2ICsgajsgZFs1MDE3NiArIGpdID0gRFsxOTZdW2pdO31cbkRbMTk3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97ZyV7ZyW7ZyX7Zya7Zyb7Zyd7Zye7Zyf7Zyh7Zyi7Zyj7Zyk7Zyl7Zym7Zyn7Zyq7Zys7Zyu7Zyv7Zyw7Zyx7Zyy7Zyz7Zy27Zy37Zy577+977+977+977+977+977+97Zy67Zy77Zy97Zy+7Zy/7Z2A7Z2B7Z2C7Z2D7Z2F7Z2G7Z2I7Z2K7Z2L7Z2M7Z2N7Z2O7Z2P7Z2S7Z2T7Z2V7Z2a7Z2b7Z2c7Z2d7Z2e77+977+977+977+977+977+97Z2f7Z2i7Z2k7Z2m7Z2n7Z2o7Z2q7Z2r7Z2t7Z2u7Z2v7Z2x7Z2y7Z2z7Z217Z227Z237Z247Z257Z267Z277Z2+7Z2/7Z6A7Z6C7Z6D7Z6E7Z6F7Z6G7Z6H7Z6K7Z6L7YGE7YGF7YGH7YGJ7YGQ7YGU7YGY7YGg7YGs7YGt7YGw7YG07YG87YG97YKB7YKk7YKl7YKo7YKs7YK07YK17YK37YK57YOA7YOB7YOE7YOI7YOJ7YOQ7YOR7YOT7YOU7YOV7YOc7YOd7YOg7YOk7YOs7YOt7YOv7YOw7YOx7YO47YSN7YSw7YSx7YS07YS47YS67YWA7YWB7YWD7YWE7YWF7YWM7YWN7YWQ7YWU7YWc7YWd7YWf7YWh7YWo7YWs7YW87YaE7YaI7Yag7Yah7Yak7Yao7Yaw7Yax7Yaz7Ya17Ya67Ya87YeA7YeY7Ye07Ye47YiH7YiJ7YiQ7Yis7Yit7Yiw7Yi07Yi87Yi97Yi/7YmB7YmI7Ymc77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTddLmxlbmd0aDsgKytqKSBpZihEWzE5N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTddW2pdXSA9IDUwNDMyICsgajsgZFs1MDQzMiArIGpdID0gRFsxOTddW2pdO31cbkRbMTk4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Z6N7Z6O7Z6P7Z6R7Z6S7Z6T7Z6U7Z6V7Z6W7Z6X7Z6a7Z6c7Z6e7Z6f7Z6g7Z6h7Z6i7Z6j77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Ymk7YqA7YqB7YqE7YqI7YqQ7YqR7YqV7Yqc7Yqg7Yqk7Yqs7Yqx7Yq47Yq57Yq87Yq/7YuA7YuC7YuI7YuJ7YuL7YuU7YuY7Yuc7Yuk7Yul7Yuw7Yux7Yu07Yu47YyA7YyB7YyD7YyF7YyM7YyN7YyO7YyQ7YyU7YyW7Yyc7Yyd7Yyf7Yyg7Yyh7Yyl7Yyo7Yyp7Yys7Yyw7Yy47Yy57Yy77Yy87Yy97Y2E7Y2F7Y287Y297Y6A7Y6E7Y6M7Y6N7Y6P7Y6Q7Y6R7Y6Y7Y6Z7Y6c7Y6g7Y6o7Y6p7Y6r7Y6t7Y607Y647Y687Y+E7Y+F7Y+I7Y+J7Y+Q7Y+Y7Y+h7Y+j7Y+s7Y+t7Y+w7Y+07Y+87Y+97Y+/7ZCB77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOThdLmxlbmd0aDsgKytqKSBpZihEWzE5OF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOThdW2pdXSA9IDUwNjg4ICsgajsgZFs1MDY4OCArIGpdID0gRFsxOThdW2pdO31cbkRbMTk5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97ZCI7ZCd7ZGA7ZGE7ZGc7ZGg7ZGk7ZGt7ZGv7ZG47ZG57ZG87ZG/7ZKA7ZKC7ZKI7ZKJ7ZKL7ZKN7ZKU7ZKp7ZOM7ZOQ7ZOU7ZOc7ZOf7ZOo7ZOs7ZOw7ZO47ZO77ZO97ZSE7ZSI7ZSM7ZSU7ZSV7ZSX7ZS87ZS97ZWA7ZWE7ZWM7ZWN7ZWP7ZWR7ZWY7ZWZ7ZWc7ZWg7ZWl7ZWo7ZWp7ZWr7ZWt7ZW07ZW17ZW47ZW87ZaE7ZaF7ZaH7ZaI7ZaJ7ZaQ7Zal7ZeI7ZeJ7ZeM7ZeQ7ZeS7ZeY7ZeZ7Zeb7Zed7Zek7Zel7Zeo7Zes7Ze07Ze17Ze37Ze57ZiA7ZiB7ZiE7ZiI7ZiQ7ZiR7ZiT7ZiU7ZiV7Zic7Zig77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxOTldLmxlbmd0aDsgKytqKSBpZihEWzE5OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxOTldW2pdXSA9IDUwOTQ0ICsgajsgZFs1MDk0NCArIGpdID0gRFsxOTldW2pdO31cbkRbMjAwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+97Zik7Zit7Zi47Zi57Zi87ZmA7ZmF7ZmI7ZmJ7ZmL7ZmN7ZmR7ZmU7ZmV7ZmY7Zmc7Zmn7Zmp7Zmw7Zmx7Zm07ZqD7ZqF7ZqM7ZqN7ZqQ7ZqU7Zqd7Zqf7Zqh7Zqo7Zqs7Zqw7Zq57Zq77ZuE7ZuF7ZuI7ZuM7ZuR7ZuU7ZuX7ZuZ7Zug7Zuk7Zuo7Zuw7Zu17Zu87Zu97ZyA7ZyE7ZyR7ZyY7ZyZ7Zyc7Zyg7Zyo7Zyp7Zyr7Zyt7Zy07Zy17Zy47Zy87Z2E7Z2H7Z2J7Z2Q7Z2R7Z2U7Z2W7Z2X7Z2Y7Z2Z7Z2g7Z2h7Z2j7Z2l7Z2p7Z2s7Z2w7Z207Z287Z297Z6B7Z6I7Z6J7Z6M7Z6Q7Z6Y7Z6Z7Z6b7Z6d77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDBdLmxlbmd0aDsgKytqKSBpZihEWzIwMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDBdW2pdXSA9IDUxMjAwICsgajsgZFs1MTIwMCArIGpdID0gRFsyMDBdW2pdO31cbkRbMjAyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95Ly95L2z5YGH5YO55Yqg5Y+v5ZG15ZOl5ZiJ5auB5a625pqH5p625p635p+v5q2M54+C55eC56i86Iub6IyE6KGX6KKI6Ki26LOI6LeP6Lu76L+m6aeV5Yi75Y205ZCE5oGq5oWk5q6854+P6ISa6Ka66KeS6Zaj5L6D5YiK5aK+5aW45aem5bmy5bm55oeH5o+A5p2G5p+s5qG/5r6X55mO55yL56O156iI56u/57Ch6IKd6Imu6Imx6Kur6ZaT5Lmr5Zad5pu35ri056Kj56ut6JGb6KSQ6J2O6Z6o5YuY5Z2O5aCq5bWM5oSf5oa+5oih5pWi5p+R5qmE5rib55SY55az55uj556w57S66YKv6ZGR6ZGS6b6V77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDJdLmxlbmd0aDsgKytqKSBpZihEWzIwMl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDJdW2pdXSA9IDUxNzEyICsgajsgZFs1MTcxMiArIGpdID0gRFsyMDJdW2pdO31cbkRbMjAzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95Yyj5bKs55Sy6IOb6YmA6ZaY5Ymb5aCI5aec5bKh5bSX5bq35by65b2K5oW35rGf55W655aG57Og57Wz57ax576M6IWU6Iih6JaR6KWB6Kyb6Yu86ZmN6bGH5LuL5Lu35YCL5Yex5aGP5oS35oS+5oWo5pS55qeq5ryR55al55qG55uW566H6Iql6JOL76SA6Y6n6ZaL5ZaA5a6i5Z2R76SB57Kz57656Ya15YCo5Y675bGF5beo5ouS5o2u5pOa5pOn5rig54Ks56Wb6Led6Lie76SC6YG96YmF6Yu45Lm+5Lu25YGl5be+5bu65oSG5qWX6IWx6JmU6LmH6Y216air5Lme5YKR5p2w5qGA5YSJ5YqN5YqS5qqi77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDNdLmxlbmd0aDsgKytqKSBpZihEWzIwM11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDNdW2pdXSA9IDUxOTY4ICsgajsgZFs1MTk2OCArIGpdID0gRFsyMDNdW2pdO31cbkRbMjA0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+955686YiQ6buU5Yqr5oCv6L+y5YGI5oap5o+t5pOK5qC85qqE5r+A6IaI6Kah6ZqU5aCF54m954qs55SE57W557mt6IKp6KaL6K206YGj6bWR5oqJ5rG65r2U57WQ57y66Kij5YW85oWK566d6KyZ6YmX6Y6M5Lqs5L+T5YCe5YK+5YSG5YuB5YuN5Y2/5Z2w5aKD5bqa5b6R5oW25oas5pOO5pWs5pmv5pq75pu05qKX5raH54KF54Ox55Kf55Kl55OK55eZ56Gs56Os56uf56u257WF57aT6ICV6IC/6ISb6I6W6K2m6LyV6YCV6Y+h6aCD6aC46ama6a+o5L+C5ZWT5aC65aWR5a2j5bGG5oK45oiS5qGC5qKw77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDRdLmxlbmd0aDsgKytqKSBpZihEWzIwNF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDRdW2pdXSA9IDUyMjI0ICsgajsgZFs1MjIyNCArIGpdID0gRFsyMDRdW2pdO31cbkRbMjA1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95qOo5rqq55WM55m456OO56i957O757mr57m86KiI6Kqh6LC/6ZqO6beE5Y+k5Y+p5ZGK5ZGx5Zu65aeR5a2k5bC75bqr5ou35pS35pWF5pWy5pqg5p6v5qeB5rK955e855qQ552+56i/576U6ICD6IKh6IaP6Ium6Iu96I+w6JeB6KCx6KK06Kql76SD6L6c6Yyu6ZuH6aGn6auY6byT5ZOt5pab5puy5qKP56mA6LC36bWg5Zuw5Z2k5bSR5piG5qKx5qON5ru+55Co6KKe6a+k5rGo76SE6aqo5L6b5YWs5YWx5Yqf5a2U5bel5oGQ5oGt5oux5o6n5pS754+Z56m66Jqj6LKi6Z6P5Liy5a+h5oiI5p6c55Oc77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDVdLmxlbmd0aDsgKytqKSBpZihEWzIwNV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDVdW2pdXSA9IDUyNDgwICsgajsgZFs1MjQ4MCArIGpdID0gRFsyMDVdW2pdO31cbkRbMjA2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+956eR6I+T6KqH6Kqy6Leo6YGO6Y2L6aGG5buT5qeo6Je/6YOt76SF5Yag5a6Y5a+s5oWj5qO65qy+54GM55Cv55OY566h572Q6I+F6KeA6LKr6Zec6aSo5Yiu5oGd5ous6YCC5L6K5YWJ5Yyh5aOZ5buj5pug5rS454Ka54uC54+W562Q6IOx6ZGb5Y2m5o6b572r5LmW5YKA5aGK5aOe5oCq5oSn5ouQ5qeQ6a2B5a6P57SY6IKx6L2f5Lqk5YOR5ZKs5Zas5ayM5bag5ben5pSq5pWO5qCh5qmL54uh55qO55+v57We57+56Iag6JWO6Juf6LyD6L2O6YOK6aSD6amV6a6r5LiY5LmF5Lmd5LuH5L+x5YW35Yu+77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDZdLmxlbmd0aDsgKytqKSBpZihEWzIwNl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDZdW2pdXSA9IDUyNzM2ICsgajsgZFs1MjczNiArIGpdID0gRFsyMDZdW2pdO31cbkRbMjA3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95Y2A5Y+j5Y+l5ZKO5ZiU5Z215Z6i5a+H5baH5buQ5oe85ouY5pWR5p645p+p5qeL5q2Q5q+G5q+s5rGC5rqd54G454uX546W55CD556/55+p56m257W/6ICJ6Ie86IiF6IiK6Iuf6KGi6Kyz6LO86LuA6YCR6YKx6Ymk6Yq26aeS6amF6bOp6beX6b6c5ZyL5bGA6I+K6Z6g6Z6r6bq05ZCb56qY576k6KOZ6LuN6YOh5aCA5bGI5o6Y56qf5a6u5byT56m556qu6IqO6Lqs5YCm5Yi45Yu45Y235ZyI5ouz5o2y5qyK5reD55y35Y6l542X6JWo6Lm26ZeV5py65quD5r2w6Kmt6LuM6aWL76SG5pm35q246LK077+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDddLmxlbmd0aDsgKytqKSBpZihEWzIwN11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDddW2pdXSA9IDUyOTkyICsgajsgZFs1Mjk5MiArIGpdID0gRFsyMDddW2pdO31cbkRbMjA4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96ay876SH5Y+r5Zyt5aWO5o+G5qe754+q56GF56q656uF57O+6JG16KaP6LWz6YC16Zao5Yu75Z2H55WH562g6I+M6Yie76SI5qmY5YWL5YmL5YqH5oif5qOY5qW16ZqZ5YOF5Yqk5Yuk5oeD5pak5qC55qe/55G+562L6Iq56I+r6Kay6Ky56L+R6aWJ76SJ5LuK5aaX5pOS5piR5qqO55C056aB56a96Iqp6KG+6KG/6KWf76SK6Yym5LyL5Y+K5oCl5omx5rGy57Sa57Wm5LqY5YWi55+c6IKv5LyB5LyO5YW25YaA5Zec5Zmo5Zy75Z+65Z+85aSU5aWH5aaT5a+E5bKQ5bSO5bex5bm+5b+M5oqA5peX5pej77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDhdLmxlbmd0aDsgKytqKSBpZihEWzIwOF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDhdW2pdXSA9IDUzMjQ4ICsgajsgZFs1MzI0OCArIGpdID0gRFsyMDhdW2pdO31cbkRbMjA5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95pye5pyf5p2e5qOL5qOE5qmf5qy65rCj5rG95rKC5reH546Y55Cm55Cq55KC55Kj55W455W/56KB56Ov56WB56WH56WI56W6566V57SA57a6576I6ICG6ICt6IKM6KiY6K2P6LGI6LW36Yyh6Yyk6aOi6aWR6aiO6aiP6aml6bqS57eK5L225ZCJ5ouu5qGU6YeR5Zar5YS676SL76SM5aic5oem76SN5ouP5ou/76SO76SP76SQ76SR76SS76ST6YKj76SU76SV76SW76SX76SY6Ku+76SZ76Sa76Sb76Sc5pqW76Sd54WW76Se76Sf6Zuj76Sg5o2P5o265Y2X76Sh5p6P5qWg5rmz76Si55S376Sj76Sk76Sl77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMDldLmxlbmd0aDsgKytqKSBpZihEWzIwOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMDldW2pdXSA9IDUzNTA0ICsgajsgZFs1MzUwNCArIGpdID0gRFsyMDldW2pdO31cbkRbMjEwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+957SN76Sm76Sn6KGy5ZuK5aiY76So76Sp76Sq76Sr76Ss5LmD76St5YWn5aWI5p+w6ICQ76Su5aWz5bm05pKa56eK5b+15oGs5ouI5o275a+n5a+X5Yqq76Sv5aW05byp5oCS76Sw76Sx76Sy55GZ76Sz76S076S176S276S376S46aeR76S576S676S776S876S976S+76S/76WA76WB76WC76WD5r+D76WE76WF6Ia/6L6y5oOx76WG76WH6IWm76WI76WJ5bC/76WK76WL76WM76WN76WO76WP76WQ76WR5aup6Kil5p2757SQ76WS76WT76WU76WV76WW76WX6IO976WY76WZ5bC85rOl5Yy/5rq65aSa6Iy277+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTBdLmxlbmd0aDsgKytqKSBpZihEWzIxMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTBdW2pdXSA9IDUzNzYwICsgajsgZFs1Mzc2MCArIGpdID0gRFsyMTBdW2pdO31cbkRbMjExXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95Li55Lq25L2G5Zau5ZyY5aOH5b2W5pa35pem5qqA5q615rmN55+t56uv57Ce57ee6JuL6KKS6YSy6Y2b5pK75r6+542655a46YGU5ZWW5Z2N5oa65pOU5puH5reh5rmb5r2t5r6555ew6IGD6Ia96JWB6KaD6KuH6K2a6Yyf5rKT55WT562U6LiP6YGd5ZSQ5aCC5aGY5bmi5oiH5pKe5qOg55W257OW6J6z6buo5Luj5Z6I5Z2u5aSn5bCN5bKx5bi25b6F5oi05pOh546z6Ie66KKL6LK46ZqK6bub5a6F5b635oKz5YCS5YiA5Yiw5ZyW5aC15aGX5bCO5bGg5bO25baL5bqm5b6S5oK85oyR5o6J5pCX5qGD77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTFdLmxlbmd0aDsgKytqKSBpZihEWzIxMV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTFdW2pdXSA9IDU0MDE2ICsgajsgZFs1NDAxNiArIGpdID0gRFsyMTFdW2pdO31cbkRbMjEyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95qO55quC5reY5rih5ruU5r+k54e+55uc552556ax56i76JCE6Kap6LOt6Lez6LmI6YCD6YCU6YGT6YO96Y2N6Zm26Z+c5q+S54CG54mY54qi542o552j56a/56+k57qb6K6A5aKp5oOH5pWm5pe95pq+5rKM54Se54eJ6LGa6aCT5Lmt56qB5Lud5Yas5YeN5YuV5ZCM5oan5p2x5qGQ5qOf5rSe5r2855a8556z56ul6IO06JGj6YqF5YWc5paX5p2c5p6T55eY56uH6I2z76Wa6LGG6YCX6aCt5bGv6IeA6Iqa6YGB6YGv6YiN5b6X5bad5qmZ54eI55m7562J6Jek6KyE6YSn6aiw5ZaH5oe276Wb55mp576F77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTJdLmxlbmd0aDsgKytqKSBpZihEWzIxMl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTJdW2pdXSA9IDU0MjcyICsgajsgZFs1NDI3MiArIGpdID0gRFsyMTJdW2pdO31cbkRbMjEzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96Ji/6J666KO46YKP76Wc5rSb54OZ54+e57Wh6JC976Wd6YWq6aex76We5LqC5Y215qyE5qyS54C+54ib6Jit6bie5YmM6L6j5bWQ5pOl5pSs5qyW5r+r57GD57qc6JeN6KWk6Ka95ouJ6IeY6KCf5buK5pyX5rWq54u855CF55Gv6J6C6YOe5L6G5bSN5b6g6JCK5Ya35o6g55Wl5Lqu5YCG5YWp5YeJ5qKB5qiR57Ku57Kx57On6Imv6KuS6Lyb6YeP5L625YS35Yu15ZGC5bus5oWu5oi+5peF5qua5r++56Sq6Jec6KCj6Zat6ami6amq6bqX6buO5Yqb5puG5q2354Cd56Sr6L2i6Z2C5oaQ5oiA5pSj5ryj77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTNdLmxlbmd0aDsgKytqKSBpZihEWzIxM11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTNdW2pdXSA9IDU0NTI4ICsgajsgZFs1NDUyOCArIGpdID0gRFsyMTNdW2pdO31cbkRbMjE0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+954WJ55KJ57e06IGv6JOu6Lym6YCj6Y2K5Ya95YiX5Yqj5rSM54OI6KOC5buJ5paC5q6u5r+C57C+54215Luk5Ly25Zu576Wf5bK65ba65oCc546y56yt576a57+O6IGG6YCe6Yi06Zu26Z2I6aCY6b2h5L6L5r6n56au6Ya06Zq35Yue76Wg5pKI5pOE5quT5r2e54CY54iQ55un6ICB6JiG6Jmc6Lev6LyF6Zyy6a2v6be66bm156KM56W/57ag6I+J6YyE6bm/6bqT6KuW5aOf5byE5pyn54Cn55OP57Gg6IG+5YSh54Co54mi56OK6LOC6LOa6LO06Zu35LqG5YOa5a+u5buW5paZ54eO55mC556t6IGK6JO877+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTRdLmxlbmd0aDsgKytqKSBpZihEWzIxNF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTRdW2pdXSA9IDU0Nzg0ICsgajsgZFs1NDc4NCArIGpdID0gRFsyMTRdW2pdO31cbkRbMjE1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96YG86ayn6b6N5aOY5amB5bGi5qiT5rea5ryP55i757Sv57i36JSe6KS46Y+k6ZmL5YqJ5peS5p+z5qa05rWB5rqc54CP55CJ55Gg55WZ55ik56Gr6Kys6aGe5YWt5oiu6Zm45L6W5YCr5bSZ5req57a46Lyq5b6L5oWE5qCX76Wh6ZqG5YuS6IKL5Yec5YeM5qWe56ic57a+6I+x6Zm15L+a5Yip5Y6Y5ZCP5ZSO5bGl5oKn5p2O5qKo5rWs54qB54u455CG55KD76Wi55ei57Gs572557646I6J6KOP6KOh6YeM6YeQ6Zui6a+J5ZCd5r2+54eQ55KY6Je66Lqq6Zqj6bGX6bqf5p6X5reL55Cz6Ieo6ZyW56Cs77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTVdLmxlbmd0aDsgKytqKSBpZihEWzIxNV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTVdW2pdXSA9IDU1MDQwICsgajsgZFs1NTA0MCArIGpdID0gRFsyMTVdW2pdO31cbkRbMjE2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+956uL56yg57KS5pGp55Gq55ey56K856Oo6aas6a2U6bq75a+e5bmV5ryg6Iac6I6r6YKI5LiH5Y2N5aip5beS5b2O5oWi5oy95pmp5pu85ru/5ryr54Gj556e6JCs6JST6KC76LyT6aWF6bC75ZSc5oq55pyr5rKr6IyJ6KWq6Z265Lqh5aaE5b+Y5b+Z5pyb57ay572U6IqS6Iyr6I696Lye6YKZ5Z+L5aa55aqS5a+Q5pin5p6a5qKF5q+P54Wk57216LK36LOj6YKB6a2F6ISI6LKK6ZmM6amA6bql5a2f5rCT54yb55uy55uf6JCM5Yaq6KaT5YWN5YaV5YuJ5qOJ5rKU55yE55yg57a/57es6Z2i6bq15ruF77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTZdLmxlbmd0aDsgKytqKSBpZihEWzIxNl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTZdW2pdXSA9IDU1Mjk2ICsgajsgZFs1NTI5NiArIGpdID0gRFsyMTZdW2pdO31cbkRbMjE3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96JSR5Yal5ZCN5ZG95piO5pqd5qSn5rqf55q/556R6IyX6JOC6J6f6YWp6YqY6bO06KKC5L6u5YaS5Yuf5aeG5bi95oWV5pG45pG55pqu5p+Q5qih5q+N5q+b54mf54mh55GB55y455+b6ICX6Iq86IyF6KyA6Kyo6LKM5pyo5rKQ54mn55uu552m56mG6bap5q2/5rKS5aSi5pym6JKZ5Y2v5aKT5aaZ5buf5o+P5pi05p2z5ri654yr56uX6IuX6Yyo5YuZ5ber5oau5oeL5oiK5ouH5pKr5peg5qWZ5q2m5q+L54Sh54+355Wd57mG6Iie6IyC6JWq6Kqj6LK/6Zyn6bWh5aKo6buY5YCR5YiO5ZC75ZWP5paH77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTddLmxlbmd0aDsgKytqKSBpZihEWzIxN11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTddW2pdXSA9IDU1NTUyICsgajsgZFs1NTU1MiArIGpdID0gRFsyMTddW2pdO31cbkRbMjE4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95rG257SK57SL6IGe6JqK6ZaA6Zuv5Yu/5rKV54mp5ZGz5aqa5bC+5bWL5b2M5b6u5pyq5qK25qWj5ri85rmE55yJ57Gz576O6JaH6KyO6L+36Z2h6bu05bK35oK25oSN5oar5pWP5pe75pe85rCR5rOv546f54+J57eh6ZaU5a+G6Jyc6KyQ5Ymd5Y2a5ouN5pCP5pKy5py05qi45rOK54+A55Ke566U57KV57ib6IaK6Ii26JaE6L+r6Zu56aeB5Ly05Y2K5Y+N5Y+b5ouM5pCs5pSA5paR5qeD5rOu5r2Y54+t55WU55ii55uk55u856OQ56O756Ss57WG6Iis6J+g6L+U6aCS6aOv5YuD5ouU5pKl5rik5r2R77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMThdLmxlbmd0aDsgKytqKSBpZihEWzIxOF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMThdW2pdXSA9IDU1ODA4ICsgajsgZFs1NTgwOCArIGpdID0gRFsyMThdW2pdO31cbkRbMjE5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+955m86LeL6Yax6Ymi6auu6a2D5YCj5YKN5Z2K5aao5bCo5bmH5b235oi/5pS+5pa55peB5piJ5p6L5qac5ruC56OF57Sh6IKq6IaA6Iir6Iqz6JKh6JqM6Kiq6KyX6YKm6Ziy6b6Q5YCN5L+z76Wj5Z+55b6Y5ouc5o6S5p2v5rmD54SZ55uD6IOM6IOa6KO06KO16KSZ6LOg6Lyp6YWN6Zmq5Lyv5L2w5bib5p+P5qCi55m955m+6a2E5bmh5qiK54Wp54eU55Wq76Wk57mB6JWD6Jep6aOc5LyQ562P572w6Zal5Yeh5biG5qK15rC+5rGO5rOb54qv56+E6IyD5rOV55C65YO75YqI5aOB5pOY5qqX55Kn55mW77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMTldLmxlbmd0aDsgKytqKSBpZihEWzIxOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMTldW2pdXSA9IDU2MDY0ICsgajsgZFs1NjA2NCArIGpdID0gRFsyMTldW2pdO31cbkRbMjIwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+956Kn6JiX6Zei6Zy576Wl5Y2e5byB6K6K6L6o6L6v6YKK5Yil556l6bGJ6byI5LiZ5YCC5YW15bGb5bm35pie5pi65p+E5qOF54Kz55SB55eF56eJ56ud6Lyn6aSg6aiI5L+d5aCh5aCx5a+25pmu5q2l5rSR5rm65r2954+k55Sr6I+p6KOc6KST6K2c6LyU5LyP5YOV5YyQ5Y2c5a6T5b6p5pyN56aP6IW56Iyv6JSU6KSH6KaG6Ly56Ly76aal6bCS5pys5Lm25L+45aWJ5bCB5bOv5bOw5o2n5qOS54O954ai55Cr57ir6JOs6JyC6YCi6YuS6bOz5LiN5LuY5L+v5YKF5YmW5Ymv5ZCm5ZKQ5Z+g5aSr5amm77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjBdLmxlbmd0aDsgKytqKSBpZihEWzIyMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjBdW2pdXSA9IDU2MzIwICsgajsgZFs1NjMyMCArIGpdID0gRFsyMjBdW2pdO31cbkRbMjIxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95a2a5a215a+M5bqc76Wm5om25pW35pan5rWu5rql54i256ym57C/57y26IWQ6IWR6Iaa6ImA6IqZ6I6p6KiD6LKg6LOm6LO76LW06La66YOo6Yec6Zic6ZmE6aeZ6bOn5YyX5YiG5ZCp5Zm05aKz5aWU5aWu5b+/5oak5omu5piQ5rG+54Sa55uG57KJ57Oe57Sb6Iqs6LOB6Zuw76Wn5L2b5byX5b2/5ouC5bSp5pyL5qOa56G857mD6bWs5LiV5YKZ5YyV5Yyq5Y2R5aaD5ami5bqH5oKy5oaK5omJ5om55paQ5p6H5qan5q+U5q+W5q+X5q+Y5rK476Wo55C155e656CS56KR56eV56eY57KD57eL57+h6IKl77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjFdLmxlbmd0aDsgKytqKSBpZihEWzIyMV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjFdW2pdXSA9IDU2NTc2ICsgajsgZFs1NjU3NiArIGpdID0gRFsyMjFdW2pdO31cbkRbMjIyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96IS+6IeC6I+y6Jya6KOo6Kq56K2s6LK76YSZ6Z2e6aOb6by75Zqs5ayq5b2s5paM5qqz5q6v5rWc5r+x54CV54md546t6LKn6LOT6aC75oaR5rC36IGY6aiB5LmN5LqL5Lqb5LuV5Ly65Ly85L2/5L+f5YO/5Y+y5Y+45ZSG5Zej5Zub5aOr5aWi5aiR5a+r5a+65bCE5bez5bir5b6Z5oCd5o2o5pac5pav5p+25p+75qKt5q275rKZ5rOX5rij54CJ542F56CC56S+56WA56Wg56eB56+p57SX57Wy6IKG6IiN6I6O6JOR6JuH6KOf6KmQ6Kme6Kyd6LOc6LWm6L6t6YKq6aO86aef6bqd5YmK76Wp5pyU76Wq77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjJdLmxlbmd0aDsgKytqKSBpZihEWzIyMl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjJdW2pdXSA9IDU2ODMyICsgajsgZFs1NjgzMiArIGpdID0gRFsyMjJdW2pdO31cbkRbMjIzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95YKY5Yiq5bGx5pWj5rGV54+K55Sj55ad566X6JKc6YW46Zyw5Lm35pKS5q6654We6Jap5LiJ76Wr5p2J5qOu5riX6Iqf6JSY6KGr5o+35r6B6YiS6aKv5LiK5YK35YOP5YSf5ZWG5Zaq5ZiX5a2A5bCZ5bOg5bi45bqK5bqg5buC5oOz5qGR5qmh5rmY54i954mA54uA55u456Wl566x57+U6KOz6Ke06Kmz6LGh6LOe6Zyc5aGe55K96LO95ZeH76Ws56mh57Si6Imy54my55Sf55Sl76Wt56yZ5aKF5aO75ba85bqP5bq25b6Q5oGV5oqS5o2/5pWN5pqR5puZ5pu45qCW5qOy54qA55Ge562u57Wu57eW572y77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjNdLmxlbmd0aDsgKytqKSBpZihEWzIyM11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjNdW2pdXSA9IDU3MDg4ICsgajsgZFs1NzA4OCArIGpdID0gRFsyMjNdW2pdO31cbkRbMjI0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96IOl6IiS6Jav6KW/6KqT6YCd6Yuk6buN6byg5aSV5aWt5bit5oOc5piU5pmz5p6Q5rGQ5reF5r2f55+z56Kp6JOG6YeL6Yyr5LuZ5YOK5YWI5ZaE5ayL5a6j5omH5pW+5peL5riy54W955CB55GE55KH55K/55ms56aq57ea57mV576o6IW66Iaz6Ii56Jia6J+s6Km16Lej6YG46YqR6ZCl6aWN6a6u5Y2o5bGR5qWU5rOE5rSp5rir6IiM6Jab6KS76Kit6Kqq6Zuq6b2n5Ymh5pq55q6y57qW6J++6LSN6ZaD6Zmd5pSd5raJ54eu76Wu5Z+O5aeT5a6s5oCn5oO65oiQ5pif5pmf54yp54+555ub55yB562s77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjRdLmxlbmd0aDsgKytqKSBpZihEWzIyNF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjRdW2pdXSA9IDU3MzQ0ICsgajsgZFs1NzM0NCArIGpdID0gRFsyMjRdW2pdO31cbkRbMjI1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96IGW6IGy6IWl6Kqg6YaS5LiW5Yui5q2y5rSX56iF56y557Sw76Wv6LKw5Y+s5Ziv5aGR5a615bCP5bCR5bei5omA5o6D5pCU5pit5qKz5rK85raI5rqv54Cf54Kk54eS55Sm55aP55aO55iZ56yR56+g57Cr57Sg57S56JSs6JWt6JiH6Ki06YCN6YGh6YK16Yq36Z+26ai35L+X5bGs5p2f5raR57Kf57qM6KyW6LSW6YCf5a2r5be95pCN6JOA6YGc6aOh546H5a6L5oKa5p2+5ree6Kif6Kqm6YCB6aCM5Yi376Ww54GR56KO6Y6W6KGw6YeX5L+u5Y+X5Ze95Zua5Z6C5aO95auC5a6I5bKr5bOA5bil5oSB77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjVdLmxlbmd0aDsgKytqKSBpZihEWzIyNV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjVdW2pdXSA9IDU3NjAwICsgajsgZFs1NzYwMCArIGpdID0gRFsyMjVdW2pdO31cbkRbMjI2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95oiN5omL5o6I5pCc5pS25pW45qi55q6K5rC05rSZ5ryx54en54up542455CH55Ky55im552h56eA56mX56uq57K557aP57as57mh576e6ISp6Iyx6JKQ6JOa6Jeq6KKW6Kqw6K6Q6Ly46YGC6YKD6YWs6YqW6Yq56ZqL6Zqn6Zqo6ZuW6ZyA6aCI6aaW6auT6aya5Y+U5aG+5aSZ5a2w5a6/5reR5r2a54af55Ch55K56IKF6I+95beh5b6H5b6q5oGC5pes5qCS5qWv5qmT5q6J5rS15rez54+j55u+556s562N57SU6ISj6Iic6I2A6JO06JWj6Kmi6KuE6YaH6Yye6aCG6aa05oiM6KGT6L+w6Yml5bSH5bSn77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjZdLmxlbmd0aDsgKytqKSBpZihEWzIyNl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjZdW2pdXSA9IDU3ODU2ICsgajsgZFs1Nzg1NiArIGpdID0gRFsyMjZdW2pdO31cbkRbMjI3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95bWp55Gf6Iad6J2o5r+V5ou+57+S6KS26KWy5Lie5LmY5YOn5Yud5Y2H5om/5piH57mp6KCF6Zme5L6N5YyZ5Zi25aeL5aqk5bC45bGO5bGN5biC5byR5oGD5pa95piv5pmC5p6+5p+054yc55+i56S657+F6JKU6JON6KaW6Kmm6Kmp6Kuh6LGV6LG65Z+05a+U5byP5oGv5out5qSN5q6W5rmc54aE56+S6J2V6K2Y6Lu+6aOf6aO+5Ly45L6B5L+h5ZG75aig5a645oS85paw5pmo54e855Sz56We57Sz6IWO6Iej6I6Y6Jaq6JeO6JyD6KiK6Lqr6L6b76Wx6L+F5aSx5a6k5a+m5oKJ5a+p5bCL5b+D5rKB77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjddLmxlbmd0aDsgKytqKSBpZihEWzIyN11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjddW2pdXSA9IDU4MTEyICsgajsgZFs1ODExMiArIGpdID0gRFsyMjddW2pdO31cbkRbMjI4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+976Wy5rex54CL55Sa6Iqv6Ku25LuA5Y2B76Wz6ZuZ5rCP5Lqe5L+E5YWS5ZWe5ail5bOo5oiR54mZ6Iq96I6q6Ju+6KGZ6Kid6Zi/6ZuF6aST6bSJ6bWd5aCK5bKz5ba95bmE5oOh5oSV5o+h5qiC5ril6YSC6Y2U6aGO6bCQ6b235a6J5bK45oyJ5pmP5qGI55y86ZuB6Z6N6aGU6a6f5pah6KyB6LuL6Za85ZS15bKp5beW5bq15pqX55mM6I+06ZeH5aOT5oq854uO6bSo5Luw5aSu5oCP5pi75q6D56en6bSm5Y6T5ZOA5Z+D5bSW5oSb5puW5rav56KN6Im+6ZqY6Z2E5Y6E5om85o6W5ray57iK6IWL6aGN77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjhdLmxlbmd0aDsgKytqKSBpZihEWzIyOF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjhdW2pdXSA9IDU4MzY4ICsgajsgZFs1ODM2OCArIGpdID0gRFsyMjhdW2pdO31cbkRbMjI5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95qu7572M6bav6bia5Lmf5YC75Ya25aSc5oO55o+25qSw54i66IC276W06YeO5byx76W176W257SE6Iul6JGv6JK76Jel6LqN76W35L2v76W476W55aOk5a2D5oGZ5o+a5pSY5pWt5pqY76W65qWK5qij5rSL54CB54Ws55eS55iN56az56mw76W7576K76W86KWE76W96K6T6YeA6Zm976W+6aSK5ZyE5b6h5pa85ryB55iA56am6Kqe6aat6a2a6b2s5YSE5oa25oqR5qqN6IeG5YGD5aCw5b2m54SJ6KiA6Ku65a286JiW5L+65YS85Zq05aWE5o6p5re55baq5qWt5YaG5LqI5L2Z76W/76aA76aB5aaC76aC77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMjldLmxlbmd0aDsgKytqKSBpZihEWzIyOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMjldW2pdXSA9IDU4NjI0ICsgajsgZFs1ODYyNCArIGpdID0gRFsyMjldW2pdO31cbkRbMjMwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+976aD5q2f5rGd76aE55K156SW76aF6IiH6ImF6Iy56Ly/6L2d76aG6aSY76aH76aI76aJ5Lqm76aK5Z+f5b255piT76aL76aM55ar57m56K2v76aN6YCG6amb5Zql5aCn5ae45aif5a6076aO5bu276aP76aQ5o2Q5oy776aR5qS95rKH5rK/5raO5raT5re15ryU76aS54Of54S254WZ76aT54eD54eV76aU56GP56Gv76aV562157ej76aW57iv76aX6KGN6Luf76aY76aZ76aa6Ymb76ab6bO276ac76ad76ae5oKF5raF76af54ax76ag76ah6Zax5Y6t76ai76aj76ak5p+T76al54KO54Sw55Cw6Im26IuS77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzBdLmxlbmd0aDsgKytqKSBpZihEWzIzMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzBdW2pdXSA9IDU4ODgwICsgajsgZFs1ODg4MCArIGpdID0gRFsyMzBdW2pdO31cbkRbMjMxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+976am6Za76aul6bm95puE76an54eB6JGJ76ao76ap5aGL76aq76ar5ba45b2x76as5pig5pqO5qW55qau5rC45rOz5ri25r2B5r+a54Cb54Cv54WQ54ef542w76at55Gb76au55OU55uI56mO57qT76av76aw6Iux6Kmg6L+O76ax6Y2I76ay6ZyZ76az76a05LmC5YCq76a15YiI5Y+h5puz5rGt5r+K54yK552/56mi6Iqu6Jed6JiC76a26KOU6Kmj6K296LGr76a36Yqz76a46ZyT6aCQ5LqU5LyN5L+J5YKy5Y2I5ZC+5ZCz5Zea5aGi5aK65aWn5aib5a+k5oKf76a55oeK5pWW5pe/5pmk5qKn5rGa5r6z77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzFdLmxlbmd0aDsgKytqKSBpZihEWzIzMV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzFdW2pdXSA9IDU5MTM2ICsgajsgZFs1OTEzNiArIGpdID0gRFsyMzFdW2pdO31cbkRbMjMyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+954OP54as542S56296JyI6Kqk6bCy6byH5bGL5rKD542E546J6Yi65rqr55Gl55if56mp57iV6JiK5YWA5aOF5pOB55Ou55SV55mw57+B6YKV6ZuN6aWU5rim55Om56qp56qq6Iel6JuZ6J246Kib5amJ5a6M5a6b5qKh5qSA5rWj546p55CT55Cs56KX57ep57+r6ISY6IWV6I6e6LGM6Ziu6aCR5puw5b6A5pe65p6J5rGq546L5YCt5aiD5q2q55+u5aSW5bWs5beN54yl55WP76a676a75YOl5Ye55aCv5aSt5aaW5aea5a+l76a876a95bai5ouX5pCW5pKT5pO+76a+5puc76a/5qmI76eA54e/55Gk76eB77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzJdLmxlbmd0aDsgKytqKSBpZihEWzIzMl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzJdW2pdXSA9IDU5MzkyICsgajsgZFs1OTM5MiArIGpdID0gRFsyMzJdW2pdO31cbkRbMjMzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+956qI56qv57mH57me6ICA6IWw76eC6J+v6KaB6Kyg6YGZ76eD6YKA6aWS5oW+5qyy5rW057if6KSl6L6x5L+R5YKt5YaX5YuH5Z+H5aKJ5a655bq45oWC5qaV5raM5rmn5rq254aU55Gi55So55Ss6IGz6Iy46JOJ6LiK6Y6U6Y+e76eE5LqO5L2R5YG25YSq5Y+I5Y+L5Y+z5a6H5a+T5bCk5oSa5oaC5pe054mb546X55GA55uC56WQ56aR56a557SG57696IqL6JeV6Jme6L+C6YGH6YO16Yeq6ZqF6Zuo6Zup5YuW5b2n5pet5pix5qCv54Wc56i26YOB6aCK5LqR76eF5qmS5q6e5r6Q54aJ6ICY6Iq46JWT77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzNdLmxlbmd0aDsgKytqKSBpZihEWzIzM11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzNdW2pdXSA9IDU5NjQ4ICsgajsgZFs1OTY0OCArIGpdID0gRFsyMzNdW2pdO31cbkRbMjM0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96YGL6ZqV6Zuy6Z+76JSa6ayx5LqQ54aK6ZuE5YWD5Y6f5ZOh5ZyT5ZyS5Z6j5aqb5auE5a+D5oCo5oS/5o+05rKF5rS55rmy5rqQ54iw54y/55GX6IuR6KKB6L2F6YGg76eG6Zmi6aGY6bSb5pyI6LaK6Yme5L2N5YGJ5YOe5Y2x5ZyN5aeU5aiB5bCJ5oWw5pqQ5rit54iy55GL57ev6IOD6JCO6JGm6JS/6J2f6KGb6KSY6KyC6YGV6Z+L6a2P5Lmz5L6R5YSS5YWq76eH5ZSv5Zap5a265a6l5bm85bm95bq+5oKg5oOf5oSI5oSJ5o+E5pS45pyJ76eI5p+U5p+a76eJ5qWh5qWi5rK55rSn76eK5ri476eL77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzRdLmxlbmd0aDsgKytqKSBpZihEWzIzNF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzRdW2pdXSA9IDU5OTA0ICsgajsgZFs1OTkwNCArIGpdID0gRFsyMzRdW2pdO31cbkRbMjM1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95r+h54y254y376eM55Gc55Sx76eN55mS76eO76eP57at6Ie+6JC46KOV6KqY6Kub6Kut6Liw6LmC6YGK6YC+6YG66YWJ6YeJ6Y2u76eQ76eR5aCJ76eS5q+T6IKJ6IKy76eT76eU5YWB5aWr5bC576eV76eW5r2k546n6IOk6LSH76eX6YiX6ZaP76eY76eZ76ea76eb6IG/5oiO54Cc57Wo6J6N76ec5Z6g5oGp5oWH5q636Kq+6YqA6Zqx5LmZ5ZCf5rer6JSt6Zmw6Z+z6aOu5o+W5rOj6YKR5Yed5oeJ6Ia66be55L6d5YCa5YSA5a6c5oSP5oe/5pOs5qSF5q+F55aR55+j576p6Imk6JaP6J+76KGj6Kq877+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzVdLmxlbmd0aDsgKytqKSBpZihEWzIzNV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzVdW2pdXSA9IDYwMTYwICsgajsgZFs2MDE2MCArIGpdID0gRFsyMzVdW2pdO31cbkRbMjM2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96K2w6Yar5LqM5Lul5LyK76ed76ee5aS35aeo76ef5bey5byb5b2b5oCh76eg76eh76ei76ej54i+54+l76ek55Ww55eN76el56e776em6ICM6ICz6IKE6Iuh6I2R76en76eo6LK96LKz6YKH76ep76eq6aO06aSM76er76es54C355uK57+K57+M57+86Kya5Lq65LuB5YiD5Y2w76et5ZK95Zug5ae75a+F5byV5b+N5rmu76eu76ev57Wq6Iy176ew6JqT6KqN76ex6Z2t6Z2376ey76ez5LiA5L2a5L2+5aO55pel5rqi6YC46Y6w6aa55Lu75aOs5aaK5aeZ5oGB76e076e156iU76e26I2P6LOD5YWl5Y2E77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzZdLmxlbmd0aDsgKytqKSBpZihEWzIzNl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzZdW2pdXSA9IDYwNDE2ICsgajsgZFs2MDQxNiArIGpdID0gRFsyMzZdW2pdO31cbkRbMjM3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+976e376e476e55LuN5Ymp5a2V6Iq/5LuU5Yi65ZKo5aeJ5ae/5a2Q5a2X5a2c5oGj5oWI5ruL54KZ54Wu546G55O355a156OB57Sr6ICF6Ieq6Iyo6JSX6JeJ6Kuu6LOH6ZuM5L2c5Yu65Zq85par5pio54G854K454i157a96IqN6YWM6ZuA6bWy5a2x5qOn5q6Y5r2655ue5bKR5pqr5r2b566057Cq6KC26Zuc5LiI5LuX5Yyg5aC05aK75aOv5aWs5bCH5biz5bqE5by15o6M5pqy5p2W5qif5qqj5qyM5ry/54mG76e6542Q55KL56ug57Kn6IW46Ief6Ien6I6K6JGs6JSj6JaU6JeP6KOd6LST6Yas6ZW377+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzddLmxlbmd0aDsgKytqKSBpZihEWzIzN11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzddW2pdXSA9IDYwNjcyICsgajsgZFs2MDY3MiArIGpdID0gRFsyMzddW2pdO31cbkRbMjM4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96Zqc5YaN5ZOJ5Zyo5a6w5omN5p2Q5qC95qKT5ri95ruT54G957ih6KOB6LKh6LyJ6b2L6b2O54it566P6KuN6Yya5L2H5L2O5YSy5ZKA5aeQ5bqV5oq15p215qWu5qiX5rKu5ria54uZ54yq55a9566457S16Iun6I+56JGX6Je36Kmb6LKv6LqH6YCZ6YK46ZuO6b2f5Yuj5ZCK5auh5a+C5pGY5pW15ru054uE76e755qE56mN56yb57GN57i+57+f6I276Kyr6LOK6LWk6Leh6Lmf6L+q6L+56YGp6Y+R5L2D5L265YKz5YWo5YW45YmN5Ymq5aGh5aG85aWg5bCI5bGV5bub5oKb5oiw5qCT5q6/5rCI5r6x77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzhdLmxlbmd0aDsgKytqKSBpZihEWzIzOF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzhdW2pdXSA9IDYwOTI4ICsgajsgZFs2MDkyOCArIGpdID0gRFsyMzhdW2pdO31cbkRbMjM5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+954WO55Cg55Sw55S455WR55my562M566L566t56+G57qP6Kmu6Ly+6L2J6Yi/6YqT6Yyi6ZCr6Zu76aGa6aGr6aSe5YiH5oiq5oqY5rWZ55mk56uK56+A57W25Y2g5bK+5bqX5ry454K557KY6ZyR6a6O6bue5o6l5pG66J225LiB5LqV5Lqt5YGc5YG15ZGI5aeD5a6a5bmA5bqt5bu35b6B5oOF5oy65pS/5pW05peM5pm25pm45p++5qWo5qqJ5q2j5rGA5reA5reo5rif5rme54Ce54Kh546O54+955S6552b56KH56aO56iL56m957K+57aO6ImH6KiC6Kuq6LKe6YSt6YWK6YeY6Ymm6YuM6Yyg6ZyG6Z2W77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyMzldLmxlbmd0aDsgKytqKSBpZihEWzIzOV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyMzldW2pdXSA9IDYxMTg0ICsgajsgZFs2MTE4NCArIGpdID0gRFsyMzldW2pdO31cbkRbMjQwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96Z2c6aCC6byO5Yi25YqR5ZW85aCk5bid5byf5oKM5o+Q5qKv5r+f56Wt56ys6IeN6Ja66KO96Ku46LmE6YaN6Zmk6Zqb6Zy96aGM6b2K5L+O5YWG5YeL5Yqp5Ziy5byU5b2r5o6q5pON5pep5pmB5pu65pu55pyd5qKd5qOX5qe95ryV5r2u54Wn54el54iq55Kq55y656WW56Wa56ef56ig56qV57KX57Of57WE57mw6IKH6Je76Jqk6KmU6Kq/6LaZ6LqB6YCg6YGt6Yej6Zi76ZuV6bOl5peP57CH6Laz6Y+D5a2Y5bCK5Y2S5ouZ54yd5YCn5a6X5b6e5oKw5oWr5qOV5reZ55Cu56iu57WC57ac57ix6IWr77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDBdLmxlbmd0aDsgKytqKSBpZihEWzI0MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDBdW2pdXSA9IDYxNDQwICsgajsgZFs2MTQ0MCArIGpdID0gRFsyNDBdW2pdO31cbkRbMjQxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96Liq6Li16Y2+6ZCY5L2Q5Z2Q5bem5bqn5oyr572q5Li75L2P5L6P5YGa5aed6IOE5ZGq5ZGo5Ze+5aWP5a6Z5bee5bua5pmd5pyx5p+x5qCq5rOo5rSy5rmK5r6N54K354+g55aH57GM57SC57Ss57ai6Iif6Jub6Ki76KqF6LWw6LqK6Lyz6YCx6YWO6YWS6ZGE6aeQ56u557Kl5L+K5YSB5YeG5Z+I5a+v5bO75pmZ5qi95rWa5rqW5r+s54SM55Wv56uj6KCi6YCh6YG16ZuL6ae/6IyB5Lit5Luy6KGG6YeN5Y295qub5qWr5rGB6JG65aKe5oaO5pu+5ouv54Od55SR55eH57mS6JK46K2J6LSI5LmL5Y+q77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDFdLmxlbmd0aDsgKytqKSBpZihEWzI0MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDFdW2pdXSA9IDYxNjk2ICsgajsgZFs2MTY5NiArIGpdID0gRFsyNDFdW2pdO31cbkRbMjQyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95ZKr5Zyw5Z2A5b+X5oyB5oyH5pGv5pSv5peo5pm65p6d5p6z5q2i5rGg5rKa5rys55+l56Cl56WJ56WX57SZ6IKi6ISC6Iez6Iqd6Iq36JyY6KqM76e86LSE6La+6YGy55u056iZ56i357mU6IG35ZSH5ZeU5aG15oyv5pCi5pmJ5pmL5qGt5qab5q6E5rSl5rqx54+N55Go55Kh55Wb55a555uh55ye556L56em57iJ57id6Ie76JSv6KKX6Ki66LOR6Lur6L6w6YCy6Y6t6Zmj6Zmz6ZyH5L6E5Y+x5aeq5auJ5biZ5qGO55OG55a+56ep56qS6Iaj6Jut6LOq6LeM6L+t5paf5pyV76e95Z+35r2X57ed6Lyv77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDJdLmxlbmd0aDsgKytqKSBpZihEWzI0Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDJdW2pdXSA9IDYxOTUyICsgajsgZFs2MTk1MiArIGpdID0gRFsyNDJdW2pdO31cbkRbMjQzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96Y+26ZuG5b615oey5r6E5LiU5L6Y5YCf5Y+J5Zef5bWv5beu5qyh5q2k56OL566a76e+6LmJ6LuK6YGu5o2J5pC+552A56qE6Yyv6ZG/6b2q5pKw5r6v54em55Ko55Oa56uE57CS57qC57Ky57qY6K6a6LSK6ZG96aSQ6aWM5Yi55a+f5pOm5pyt57Su5YOt5Y+D5aG55oWY5oWZ5oe65pas56uZ6K6S6K6W5YCJ5YCh5Ym15ZSx5ai85bug5b2w5oS05pWe5piM5pi25pqi5qeN5ruE5ryy54yW55ih56qT6IS56ImZ6I+W6JK85YK15Z+w5a+A5a+o5b2p5o6h56Cm57a16I+c6JSh6YeH6Ye15YaK5p+1562W77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDNdLmxlbmd0aDsgKytqKSBpZihEWzI0M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDNdW2pdXSA9IDYyMjA4ICsgajsgZFs2MjIwOCArIGpdID0gRFsyNDNdW2pdO31cbkRbMjQ0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96LKs5YeE5aa75oK96JmV5YCc76e/5YmU5bC65oW95oia5ouT5pOy5pal5ruM55ig6ISK6Lmg6Zmf6Zq75Luf5Y2D5ZaY5aSp5bed5pOF5rOJ5re6546U56m/6Iib6Jam6LOk6LiQ6YG36Yen6Zeh6Zih6Z+G5Ye45ZOy5ZaG5b655pKk5r6I57a06Lyf6L2N6ZC15YOJ5bCW5rK+5re755Sb556757C957Gk6Km56KuC5aCe5aa+5biW5o2354mS55aK552r6Kuc6LK86LyS5buz5pm05re46IG96I+B6KuL6Z2R6a+W76iA5YmD5pu/5raV5ruv57eg6Kum6YCu6YGe6auU5Yid5Ym/5ZOo5oaU5oqE5oub5qKi77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDRdLmxlbmd0aDsgKytqKSBpZihEWzI0NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDRdW2pdXSA9IDYyNDY0ICsgajsgZFs2MjQ2NCArIGpdID0gRFsyNDRdW2pdO31cbkRbMjQ1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95qSS5qWa5qi154KS54Sm56Gd56SB56SO56eS56iN6IKW6Im46IuV6I2J6JWJ6LKC6LaF6YWi6YaL6Yau5L+D5ZuR54et55+X6JyA6Ke45a+45b+W5p2R6YKo5Y+i5aGa5a+15oKk5oaB5pGg57i96IGw6JSl6YqD5pKu5YKs5bSU5pyA5aKc5oq95o6o5qSO5qW45qie5rmr55q656eL6Iq76JCp6KuP6Lao6L+96YSS6YWL6Yac6YyQ6YyY6Y6a6Zub6ai26bCN5LiR55Wc56Wd56u6562R56+J57iu6JOE6LmZ6Lm06Lu46YCQ5pil5qS/55GD5Ye65pyu6buc5YWF5b+g5rKW6J+y6KGd6KG35oK06Ia16JCD77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDVdLmxlbmd0aDsgKytqKSBpZihEWzI0NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDVdW2pdXSA9IDYyNzIwICsgajsgZFs2MjcyMCArIGpdID0gRFsyNDVdW2pdO31cbkRbMjQ2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96LSF5Y+W5ZC55Zi05ai25bCx54KK57+g6IGa6ISG6Iet6Laj6YaJ6amf6bey5YG05LuE5Y6g5oO75ris5bGk5L6I5YCk5Zek5bOZ5bmf5oGl5qKU5rK75reE54a+55eU55e055mh56ia56mJ57eH57e7572u6Ie06Jqp6Lyc6ZuJ6aaz6b2S5YmH5YuF6aOt6Kaq5LiD5p+S5ryG5L615a+i5p6V5rKI5rW455Cb56Cn6Yed6Y286J+E56ek56ix5b+r5LuW5ZKk5ZS+5aKu5aal5oOw5omT5ouW5py25qWV6Ii16ZmA6aax6aed5YCs5Y2T5ZWE5Z2876iB5omY76iC5pOi5pmr5p+d5r+B5r+v55Ci55C46KiX77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDZdLmxlbmd0aDsgKytqKSBpZihEWzI0Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDZdW2pdXSA9IDYyOTc2ICsgajsgZFs2Mjk3NiArIGpdID0gRFsyNDZdW2pdO31cbkRbMjQ3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96ZC45ZGR5ZiG5Z2m5b2I5oaa5q2O54GY54Kt57a76KqV5aWq6ISr5o6i55yI6IC96LKq5aGU5pCt5qa75a6V5biR5rmv76iD6JWp5YWM5Y+w5aSq5oCg5oWL5q6G5rGw5rOw56ye6IOO6IuU6LeG6YKw6aKx76iE5pOH5r6k5pKR5pSE5YWO5ZCQ5Zyf6KiO5oWf5qG276iF55eb562S57Wx6YCa5aCG5qeM6IW/6KSq6YCA6aC55YG45aWX5aas5oqV6YCP6ayq5oWd54m56ZeW5Z2h5amG5be05oqK5pKt5pO65p235rOi5rS+54is55C256C057236Iqt6Leb6aCX5Yik5Z2C5p2/54mI55Oj6LKp6L6m6YiR77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDddLmxlbmd0aDsgKytqKSBpZihEWzI0N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDddW2pdXSA9IDYzMjMyICsgajsgZFs2MzIzMiArIGpdID0gRFsyNDddW2pdO31cbkRbMjQ4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+96Ziq5YWr5Y+t5o2M5L2p5ZSE5oKW5pWX5rKb5rW/54mM54u956iX6KaH6LKd5b2t5r6O54O56Iao5oSO5L6/5YGP5omB54mH56+H57eo57+p6YGN6Z6t6aiZ6LK25Z2q5bmz5p6w6JCN6KmV5ZCg5ayW5bmj5bui5byK5paD6IK66JS96ZaJ6Zmb5L2I5YyF5YyN5YyP5ZKG5ZO65ZyD5biD5oCW5oqb5oqx5o2V76iG5rOh5rWm55ax56Cy6IOe6ISv6Iue6JGh6JKy6KKN6KSS6YCL6Yuq6aO96a6R5bmF5pq05pud54CR54iG76iH5L+15Ym95b2q5oWT5p2T5qiZ5ryC55Oi56Wo6KGo6LG56aOH6aOE6amD77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDhdLmxlbmd0aDsgKytqKSBpZihEWzI0OF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDhdW2pdXSA9IDYzNDg4ICsgajsgZFs2MzQ4OCArIGpdID0gRFsyNDhdW2pdO31cbkRbMjQ5XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95ZOB56if5qWT6Ku36LGK6aKo6aau5b285oqr55ay55qu6KKr6YG/6ZmC5Yy55by85b+F5rOM54+M55Wi55aL562G6Iu+6aad5LmP6YC85LiL5L2V5Y6m5aSP5buI5piw5rKz55GV6I236J2m6LOA6YGQ6Zye6bCV5aOR5a246JmQ6KyU6ba05a+S5oGo5oKN5pex5rGX5ryi5r6j54Ca572V57+w6ZaR6ZaS6ZmQ6Z+T5Ymy6L2E5Ye95ZCr5ZK45ZWj5ZaK5qq75ra157eY6Imm6Yqc6Zm36bm55ZCI5ZOI55uS6Juk6Zak6ZeU6Zmc5Lqi5LyJ5aeu5aum5be35oGS5oqX5p2t5qGB5rKG5riv57y46IKb6Iiq77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNDldLmxlbmd0aDsgKytqKSBpZihEWzI0OV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNDldW2pdXSA9IDYzNzQ0ICsgajsgZFs2Mzc0NCArIGpdID0gRFsyNDldW2pdO31cbkRbMjUwXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+976iI76iJ6aCF5Lql5YGV5ZKz5Z6T5aWa5a2p5a6z5oeI5qW35rW354Cj6J+56Kej6Kmy6Kun6YKC6aet6aq45Yq+5qC45YCW5bm45p2P6I2H6KGM5Lqr5ZCR5Zqu54+m6YSV6Z+/6aSJ6aWX6aaZ5ZmT5aKf6Jmb6Kix5oay5qu254276LuS5q2H6Zqq6amX5aWV54iA6LWr6Z2p5L+U5bO05bym5oe45pmb5rOr54Kr546E546554++55yp552N57WD57Wi57ij6Ii36KGS76iK6LOi6YmJ6aGv5a2R56m06KGA6aCB5auM5L+g5Y2U5aS+5bO95oy+5rW554u56ISF6ISH6I6i6YuP6aCw5Lqo5YWE5YiR5Z6L77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNTBdLmxlbmd0aDsgKytqKSBpZihEWzI1MF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNTBdW2pdXSA9IDY0MDAwICsgajsgZFs2NDAwMCArIGpdID0gRFsyNTBdW2pdO31cbkRbMjUxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+95b2i5rOC5ruO54CF54GQ54Kv54aS54+p55Gp6I2K6J6i6KGh6YCI6YKi6Y6j6aao5YWu5b2X5oOg5oWn5pqz6JWZ6LmK6Yav6Z6L5LmO5LqS5ZG85aOV5aO65aW95bK15byn5oi25omI5piK5pmn5q+r5rWp5reP5rmW5ru45r6U5r+g5r+p54Gd54uQ55Cl55Ga55Og55qT56Wc57OK57ie6IOh6Iqm6JGr6JK/6JmO6Jmf6J206K236LGq6Y6s6aCA6aGl5oOR5oiW6YW35ama5piP5re35ri+55C/6a2C5b+95oOa56yP5ZOE5byY5rGe5rOT5rSq54OY57SF6Jm56KiM6bS75YyW5ZKM5ayF5qi654Gr55W177+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNTFdLmxlbmd0aDsgKytqKSBpZihEWzI1MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNTFdW2pdXSA9IDY0MjU2ICsgajsgZFs2NDI1NiArIGpdID0gRFsyNTFdW2pdO31cbkRbMjUyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+956aN56a+6Iqx6I+v6Kmx6K2B6LKo6Z2076iL5pO05pSr56K656K756mr5Li45Zaa5aWQ5a6m5bm75oKj5o+b5q2h5pml5qGT5riZ54Wl55Kw57SI6YKE6amp6bCl5rS75ruR54y+6LGB6ZeK5Yew5bmM5b6o5oGN5oO25oSw5oWM5pmD5pmE5qal5rOB5rmf5ruJ5r2i54WM55Kc55qH56+B57Cn6I2S6J2X6YGR6ZqN6buD5Yyv5Zue5bu75b6K5oGi5oKU5oe35pmm5pyD5qqc5reu5r6u54Gw542q57mq6Ia+6Iy06JuU6Kqo6LOE5YqD542y5a6W5qmr6ZCE5ZOu5ZqG5a2d5pWI5paF5puJ5qKf5raN5reG77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNTJdLmxlbmd0aDsgKytqKSBpZihEWzI1Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNTJdW2pdXSA9IDY0NTEyICsgajsgZFs2NDUxMiArIGpdID0gRFsyNTJdW2pdO31cbkRbMjUzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+954i76IK06YW16amN5L6v5YCZ5Y6a5ZCO5ZC85ZaJ5ZeF5bi/5b6M5py954Wm54+d6YCF5Yub5Yuz5aGk5aOO54SE54aP54e76Jaw6KiT5pqI6Jao5Zan5pqE54WK6JCx5Y2J5ZaZ5q+B5b2Z5b695o+u5pqJ54WH6Kux6Lyd6bq+5LyR5pC654OL55Wm6Jmn5oGk6K2O6be45YWH5Ye25YyI5rS26IO46buR5piV5qyj54KY55eV5ZCD5bG557SH6KiW5qyg5qy95q2G5ZC45oGw5rS957+V6IiI5YOW5Yee5Zac5Zmr5ZuN5aes5ayJ5biM5oaZ5oaY5oix5pme5pum54aZ54a554a654qn56an56iA576y6Kmw77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsyNTNdLmxlbmd0aDsgKytqKSBpZihEWzI1M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsyNTNdW2pdXSA9IDY0NzY4ICsgajsgZFs2NDc2OCArIGpdID0gRFsyNTNdW2pdO31cbnJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogZCB9OyB9KSgpO1xuY3B0YWJsZVs5NTBdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gW10sIGUgPSB7fSwgRCA9IFtdLCBqO1xuRFswXSA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFswXS5sZW5ndGg7ICsraikgaWYoRFswXVtqXS5jaGFyQ29kZUF0KDApICE9PSAweEZGRkQpIHsgZVtEWzBdW2pdXSA9IDAgKyBqOyBkWzAgKyBqXSA9IERbMF1bal07fVxuRFsxNjFdID0gXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73jgIDvvIzjgIHjgILvvI7igKfvvJvvvJrvvJ/vvIHvuLDigKbigKXvuZDvuZHvuZLCt++5lO+5le+5lu+5l++9nOKAk++4seKAlO+4s+KVtO+4tO+5j++8iO+8ie+4te+4tu+9m++9ne+4t++4uOOAlOOAle+4ue+4uuOAkOOAke+4u++4vOOAiuOAi++4ve+4vuOAiOOAie+4v++5gOOAjOOAje+5ge+5guOAjuOAj++5g++5hO+5me+5mu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+5m++5nO+5ne+5nuKAmOKAmeKAnOKAneOAneOAnuKAteKAsu+8g++8hu+8iuKAu8Kn44CD4peL4peP4paz4pay4peO4piG4piF4peH4peG4pah4pag4pa94pa844qj4oSFwq/vv6PvvL/Lje+5ie+5iu+5je+5ju+5i++5jO+5n++5oO+5oe+8i++8jcOXw7fCseKImu+8nO+8nu+8neKJpuKJp+KJoOKInuKJkuKJoe+5ou+5o++5pO+5pe+5pu+9nuKIqeKIquKKpeKIoOKIn+KKv+OPkuOPkeKIq+KIruKIteKItOKZgOKZguKKleKKmeKGkeKGk+KGkOKGkuKGluKGl+KGmeKGmOKIpeKIo++8j++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTYxXS5sZW5ndGg7ICsraikgaWYoRFsxNjFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTYxXVtqXV0gPSA0MTIxNiArIGo7IGRbNDEyMTYgKyBqXSA9IERbMTYxXVtqXTt9XG5EWzE2Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+8vOKIle+5qO+8hO+/peOAku+/oO+/oe+8he+8oOKEg+KEie+5qe+5qu+5q+OPleOOnOOOneOOnuOPjuOOoeOOjuOOj+OPhMKw5YWZ5YWb5YWe5YWd5YWh5YWj5Zen55Op57OO4paB4paC4paD4paE4paF4paG4paH4paI4paP4paO4paN4paM4paL4paK4paJ4pS84pS04pSs4pSk4pSc4paU4pSA4pSC4paV4pSM4pSQ4pSU4pSY4pWt77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94pWu4pWw4pWv4pWQ4pWe4pWq4pWh4pei4pej4pel4pek4pWx4pWy4pWz77yQ77yR77yS77yT77yU77yV77yW77yX77yY77yZ4oWg4oWh4oWi4oWj4oWk4oWl4oWm4oWn4oWo4oWp44Ch44Ci44Cj44Ck44Cl44Cm44Cn44Co44Cp5Y2B5Y2E5Y2F77yh77yi77yj77yk77yl77ym77yn77yo77yp77yq77yr77ys77yt77yu77yv77yw77yx77yy77yz77y077y177y277y377y477y577y6772B772C772D772E772F772G772H772I772J772K772L772M772N772O772P772Q772R772S772T772U772V772W77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjJdLmxlbmd0aDsgKytqKSBpZihEWzE2Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjJdW2pdXSA9IDQxNDcyICsgajsgZFs0MTQ3MiArIGpdID0gRFsxNjJdW2pdO31cbkRbMTYzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9772X772Y772Z772azpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J44SF44SG44SH44SI44SJ44SK44SL44SM44SN44SO44SP77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+944SQ44SR44SS44ST44SU44SV44SW44SX44SY44SZ44Sa44Sb44Sc44Sd44Se44Sf44Sg44Sh44Si44Sj44Sk44Sl44Sm44Sn44So44Spy5nLicuKy4fLi++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKCrO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTYzXS5sZW5ndGg7ICsraikgaWYoRFsxNjNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTYzXVtqXV0gPSA0MTcyOCArIGo7IGRbNDE3MjggKyBqXSA9IERbMTYzXVtqXTt9XG5EWzE2NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS4gOS5meS4geS4g+S5g+S5neS6huS6jOS6uuWEv+WFpeWFq+WHoOWIgOWIgeWKm+WMleWNgeWNnOWPiOS4ieS4i+S4iOS4iuS4q+S4uOWHoeS5heS5iOS5n+S5nuS6juS6oeWFgOWIg+WLuuWNg+WPieWPo+Wcn+Wjq+WkleWkp+Wls+WtkOWtkeWtk+WvuOWwj+WwouWwuOWxseW3neW3peW3seW3suW3s+W3vuW5suW7vuW8i+W8k+aJje+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS4keS4kOS4jeS4reS4sOS4ueS5i+WwueS6iOS6keS6leS6kuS6lOS6ouS7geS7gOS7g+S7huS7h+S7jeS7iuS7i+S7hOWFg+WFgeWFp+WFreWFruWFrOWGl+WHtuWIhuWIh+WIiOWLu+WLvuWLv+WMluWMueWNiOWNh+WNheWNnuWOhOWPi+WPiuWPjeWjrOWkqeWkq+WkquWkreWtlOWwkeWwpOWwuuWxr+W3tOW5u+W7v+W8lOW8leW/g+aIiOaItuaJi+aJjuaUr+aWh+aWl+aWpOaWueaXpeabsOaciOacqOasoOatouatueavi+avlOavm+awj+awtOeBq+eIqueItueIu+eJh+eJmeeJm+eKrOeOi+S4me+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY0XS5sZW5ndGg7ICsraikgaWYoRFsxNjRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY0XVtqXV0gPSA0MTk4NCArIGo7IGRbNDE5ODQgKyBqXSA9IERbMTY0XVtqXTt9XG5EWzE2NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS4luS4leS4lOS4mOS4u+S5jeS5j+S5juS7peS7mOS7lOS7leS7luS7l+S7o+S7pOS7meS7nuWFheWFhOWGieWGiuWGrOWHueWHuuWHuOWIiuWKoOWKn+WMheWMhuWMl+WMneS7n+WNiuWNieWNoeWNoOWNr+WNruWOu+WPr+WPpOWPs+WPrOWPruWPqeWPqOWPvOWPuOWPteWPq+WPpuWPquWPsuWPseWPsOWPpeWPreWPu+Wbm+WbmuWklu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWkruWkseWltOWltuWtleWug+WwvOW3qOW3p+W3puW4guW4g+W5s+W5vOW8geW8mOW8l+W/heaIiuaJk+aJlOaJkuaJkeaWpeaXpuacruacrOacquacq+acreato+avjeawkeawkOawuOaxgeaxgOawvueKr+eOhOeOieeTnOeTpueUmOeUn+eUqOeUqeeUsOeUseeUsueUs+eWi+eZveearueav+ebruefm+efouefs+ekuuemvueptOeri+S4nuS4n+S5kuS5k+S5qeS6meS6pOS6puS6peS7v+S8ieS8meS8iuS8leS8jeS8kOS8keS8j+S7suS7tuS7u+S7sOS7s+S7veS8geS8i+WFieWFh+WFhuWFiOWFqO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY1XS5sZW5ndGg7ICsraikgaWYoRFsxNjVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY1XVtqXV0gPSA0MjI0MCArIGo7IGRbNDIyNDAgKyBqXSA9IERbMTY1XVtqXTt9XG5EWzE2Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWFseWGjeWGsOWIl+WIkeWIkuWIjuWIluWKo+WMiOWMoeWMoOWNsOWNseWQieWQj+WQjOWQiuWQkOWQgeWQi+WQhOWQkeWQjeWQiOWQg+WQjuWQhuWQkuWboOWbnuWbneWcs+WcsOWcqOWcreWcrOWcr+WcqeWkmeWkmuWkt+WkuOWmhOWluOWmg+WlveWlueWmguWmgeWtl+WtmOWuh+WuiOWuheWuieWvuuWwluWxueW3nuW4huW5tuW5tO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veW8j+W8m+W/meW/luaIjuaIjOaIjeaIkOaJo+aJm+aJmOaUtuaXqeaXqOaXrOaXreabsuabs+acieacveactOacseacteasoeatpOatu+awluaxneaxl+axmeaxn+axoOaxkOaxleaxoeaxm+axjeaxjueBsOeJn+eJneeZvuerueexs+ezuOe8tue+iue+veiAgeiAg+iAjOiAkuiAs+iBv+iCieiCi+iCjOiHo+iHquiHs+iHvOiIjOiIm+iIn+iJruiJsuiJvuiZq+ihgOihjOiho+ilv+mYoeS4suS6qOS9jeS9j+S9h+S9l+S9nuS8tOS9m+S9leS8sOS9kOS9keS8veS8uuS8uOS9g+S9lOS8vOS9huS9o++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY2XS5sZW5ndGg7ICsraikgaWYoRFsxNjZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY2XVtqXV0gPSA0MjQ5NiArIGo7IGRbNDI0OTYgKyBqXSA9IERbMTY2XVtqXTt9XG5EWzE2N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS9nOS9oOS8r+S9juS8tuS9meS9neS9iOS9muWFjOWFi+WFjeWFteWGtuWGt+WIpeWIpOWIqeWIquWIqOWKq+WKqeWKquWKrOWMo+WNs+WNteWQneWQreWQnuWQvuWQpuWRjuWQp+WRhuWRg+WQs+WRiOWRguWQm+WQqeWRiuWQueWQu+WQuOWQruWQteWQtuWQoOWQvOWRgOWQseWQq+WQn+WQrOWbquWbsOWbpOWbq+WdiuWdkeWdgOWdje+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWdh+WdjuWcvuWdkOWdj+Wcu+Wjr+WkvuWmneWmkuWmqOWmnuWmo+WmmeWmluWmjeWmpOWmk+WmiuWmpeWtneWtnOWtmuWtm+WujOWui+Wuj+WwrOWxgOWxgeWwv+WwvuWykOWykeWylOWyjOW3q+W4jOW6j+W6h+W6iuW7t+W8hOW8n+W9pOW9ouW9t+W9ueW/mOW/jOW/l+W/jeW/seW/q+W/uOW/quaIkuaIkeaKhOaKl+aKluaKgOaJtuaKieaJreaKiuaJvOaJvuaJueaJs+aKkuaJr+aKmOaJruaKleaKk+aKkeaKhuaUueaUu+aUuOaXseabtOadn+adjuadj+adkOadkeadnOadluadnuadieadhuadoO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY3XS5sZW5ndGg7ICsraikgaWYoRFsxNjddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY3XVtqXV0gPSA0Mjc1MiArIGo7IGRbNDI3NTIgKyBqXSA9IERbMTY3XVtqXTt9XG5EWzE2OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veadk+adl+atpeavj+axguaxnuaymeaygeayiOayieayheaym+axquaxuuaykOaxsOayjOaxqOayluaykuaxveayg+axsuaxvuaxtOayhuaxtuayjeaylOaymOaygueBtueBvOeBveeBuOeJoueJoeeJoOeLhOeLgueOlueUrOeUq+eUt+eUuOeaguebr+efo+engeengOemv+eptuezu+e9leiCluiCk+iCneiCmOiCm+iCmuiCsuiJr+iKku+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiKi+iKjeimi+inkuiogOiwt+ixhuixleiynei1pOi1sOi2s+i6q+i7iui+m+i+sOi/gui/hui/hei/hOW3oemCkemCoumCqumCpumCo+mFiemHhumHjOmYsumYrumYsemYqumYrOS4puS5luS5s+S6i+S6m+S6nuS6q+S6rOS9r+S+neS+jeS9s+S9v+S9rOS+m+S+i+S+huS+g+S9sOS9teS+iOS9qeS9u+S+luS9vuS+j+S+keS9uuWFlOWFkuWFleWFqeWFt+WFtuWFuOWGveWHveWIu+WIuOWIt+WIuuWIsOWIruWItuWJgeWKvuWKu+WNkuWNlOWNk+WNkeWNpuWNt+WNuOWNueWPluWPlOWPl+WRs+WRte+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY4XS5sZW5ndGg7ICsraikgaWYoRFsxNjhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY4XVtqXV0gPSA0MzAwOCArIGo7IGRbNDMwMDggKyBqXSA9IERbMTY4XVtqXTt9XG5EWzE2OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWSluWRuOWSleWSgOWRu+WRt+WShOWSkuWShuWRvOWSkOWRseWRtuWSjOWSmuWRouWRqOWSi+WRveWSjuWbuuWeg+Wdt+WdquWdqeWdoeWdpuWdpOWdvOWknOWlieWlh+WliOWlhOWllOWmvuWmu+WnlOWmueWmruWnkeWnhuWnkOWnjeWni+Wnk+WniuWmr+Wms+WnkuWnheWtn+WtpOWto+Wul+WumuWumOWunOWumeWum+WwmuWxiOWxhe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWxhuWyt+WyoeWyuOWyqeWyq+WyseWys+W4mOW4muW4luW4leW4m+W4keW5uOW6muW6l+W6nOW6leW6luW7tuW8puW8p+W8qeW+gOW+geW9v+W9vOW/neW/oOW/veW/teW/v+aAj+aAlOaAr+aAteaAluaAquaAleaAoeaAp+aAqeaAq+aAm+aIluaIleaIv+aIvuaJgOaJv+aLieaLjOaLhOaKv+aLguaKueaLkuaLm+aKq+aLk+aLlOaLi+aLiOaKqOaKveaKvOaLkOaLmeaLh+aLjeaKteaLmuaKseaLmOaLluaLl+aLhuaKrOaLjuaUvuaWp+aWvOaXuuaYlOaYk+aYjOaYhuaYguaYjuaYgOaYj+aYleaYiu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY5XS5sZW5ndGg7ICsraikgaWYoRFsxNjldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY5XVtqXV0gPSA0MzI2NCArIGo7IGRbNDMyNjQgKyBqXSA9IERbMTY5XVtqXTt9XG5EWzE3MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaYh+acjeaci+adreaei+aeleadseaenOads+adt+aeh+aeneael+adr+adsOadv+aeieadvuaekOadteaemuaek+advOadquadsuaso+atpuatp+atv+awk+awm+azo+azqOazs+ayseazjOazpeays+ayveayvuayvOazouayq+azleazk+ayuOazhOayueazgeayruazl+azheazseayv+ayu+azoeazm+aziuayrOazr+aznOazluazoO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeCleeCjueCkueCiueCmeeIrOeIreeIuOeJiOeJp+eJqeeLgOeLjueLmeeLl+eLkOeOqeeOqOeOn+eOq+eOpeeUveeWneeWmeeWmueahOebguebsuebtOefpeefveekvuelgOelgeenieeniOepuuepueeruuezvue9lOe+jOe+i+iAheiCuuiCpeiCouiCseiCoeiCq+iCqeiCtOiCquiCr+iHpeiHvuiIjeiKs+iKneiKmeiKreiKveiKn+iKueiKseiKrOiKpeiKr+iKuOiKo+iKsOiKvuiKt+iZjuiZseWIneihqOi7i+i/jui/lOi/kemCtemCuOmCsemCtumHh+mHkemVt+mWgOmYnOmZgOmYv+mYu+mZhO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTcwXS5sZW5ndGg7ICsraikgaWYoRFsxNzBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTcwXVtqXV0gPSA0MzUyMCArIGo7IGRbNDM1MjAgKyBqXSA9IERbMTcwXVtqXTt9XG5EWzE3MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemZgumauembqOmdkumdnuS6n+S6reS6ruS/oeS+teS+r+S+v+S/oOS/keS/j+S/neS/g+S+tuS/mOS/n+S/iuS/l+S+ruS/kOS/hOS/guS/muS/juS/nuS+t+WFl+WGkuWGkeWGoOWJjuWJg+WJiuWJjeWJjOWJi+WJh+WLh+WLieWLg+WLgeWMjeWNl+WNu+WOmuWPm+WSrOWTgOWSqOWTjuWTieWSuOWSpuWSs+WTh+WTguWSveWSquWTge+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWThOWTiOWSr+WSq+WSseWSu+WSqeWSp+WSv+Wbv+WeguWei+WeoOWeo+WeouWfjuWeruWek+WlleWlkeWlj+WljuWlkOWnnOWnmOWnv+Wno+WnqOWog+WnpeWnquWnmuWnpuWogeWnu+WtqeWuo+WupuWupOWuouWupeWwgeWxjuWxj+WxjeWxi+WzmeWzkuW3t+W4neW4peW4n+W5veW6oOW6puW7uuW8iOW8reW9peW+iOW+heW+iuW+i+W+h+W+jOW+ieaAkuaAneaAoOaApeaAjuaAqOaBjeaBsOaBqOaBouaBhuaBg+aBrOaBq+aBquaBpOaJgeaLnOaMluaMieaLvOaLreaMgeaLruaLveaMh+aLseaLt++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTcxXS5sZW5ndGg7ICsraikgaWYoRFsxNzFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTcxXVtqXV0gPSA0Mzc3NiArIGo7IGRbNDM3NzYgKyBqXSA9IERbMTcxXVtqXTt9XG5EWzE3Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaLr+aLrOaLvuaLtOaMkeaMguaUv+aVheaWq+aWveaXouaYpeaYreaYoOaYp+aYr+aYn+aYqOaYseaYpOabt+afv+afk+afseaflOafkOafrOaetuaer+afteafqeafr+afhOafkeaetOafmuafpeaeuOafj+afnuafs+aesOafmeafouafneafkuatquaug+auhuauteavkuavl+awn+aziea0i+a0sua0qua1gea0pea0jOa0sea0nua0l++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea0u+a0vea0vua0tua0m+aztea0uea0p+a0uOa0qea0rua0tea0jua0q+eCq+eCuueCs+eCrOeCr+eCreeCuOeCrueCpOeIsOeJsueJr+eJtOeLqeeLoOeLoeeOt+ePiueOu+eOsuePjeePgOeOs+eUmueUreeVj+eVjOeVjueVi+eWq+eWpOeWpeeWoueWo+eZuOeahueah+eaiOebiOebhuebg+ebheecgeebueebuOecieeci+ebvuebvOech+efnOeggueglOegjOegjeelhuelieeliOelh+emueemuuenkeenkueni+epv+eqgeerv+erveexvee0gue0hee0gOe0iee0h+e0hOe0hue8uOe+jue+v+iAhO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTcyXS5sZW5ndGg7ICsraikgaWYoRFsxNzJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTcyXVtqXV0gPSA0NDAzMiArIGo7IGRbNDQwMzIgKyBqXSA9IERbMTcyXVtqXTt9XG5EWzE3M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiAkOiAjeiAkeiAtuiDluiDpeiDmuiDg+iDhOiDjOiDoeiDm+iDjuiDnuiDpOiDneiHtOiIouiLp+iMg+iMheiLo+iLm+iLpuiMhOiLpeiMguiMieiLkuiLl+iLseiMgeiLnOiLlOiLkeiLnuiLk+iLn+iLr+iMhuiZkOiZueiZu+iZuuihjeihq+imgeinlOioiOioguiog+iynuiyoOi1tOi1s+i2tOi7jei7jOi/sOi/pui/oui/qui/pe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei/rei/q+i/pOi/qOmDiumDjumDgemDg+mFi+mFiumHjemWgumZkOmZi+mZjOmZjemdoumdqemfi+mfremfs+mggemiqOmjm+mjn+mmlummmeS5mOS6s+WAjOWAjeWAo+S/r+WApuWApeS/uOWAqeWAluWAhuWAvOWAn+WAmuWAkuWAkeS/uuWAgOWAlOWAqOS/seWAoeWAi+WAmeWAmOS/s+S/ruWAreWAquS/vuWAq+WAieWFvOWGpOWGpeWGouWHjeWHjOWHhuWHi+WJluWJnOWJlOWJm+WJneWMquWNv+WOn+WOneWPn+WTqOWUkOWUgeWUt+WTvOWTpeWTsuWUhuWTuuWUlOWTqeWTreWToeWUieWTruWTqu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTczXS5sZW5ndGg7ICsraikgaWYoRFsxNzNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTczXVtqXV0gPSA0NDI4OCArIGo7IGRbNDQyODggKyBqXSA9IERbMTczXVtqXTt9XG5EWzE3NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWTpuWUp+WUh+WTveWUj+Wcg+WchOWfguWflOWfi+Wfg+WgieWkj+Wll+WlmOWlmuWokeWomOWonOWon+Wom+Wok+WnrOWooOWoo+WoqeWopeWojOWoieWtq+WxmOWusOWus+WutuWutOWuruWuteWuueWuuOWwhOWxkeWxleWxkOWzreWzveWzu+WzquWzqOWzsOWztuW0geWztOW3ruW4reW4q+W6q+W6reW6p+W8seW+kuW+keW+kOaBme+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaBo+aBpeaBkOaBleaBreaBqeaBr+aChOaCn+aCmuaCjeaClOaCjOaCheaCluaJh+aLs+aMiOaLv+aNjuaMvuaMr+aNleaNguaNhuaNj+aNieaMuuaNkOaMveaMquaMq+aMqOaNjeaNjOaViOaVieaWmeaXgeaXheaZguaZieaZj+aZg+aZkuaZjOaZheaZgeabuOaclOacleacl+agoeaguOahiOahhuahk+agueahguahlOagqeais+agl+ahjOahkeagveaftOahkOahgOagvOahg+agquahheagk+agmOahgeauiuauieaut+awo+awp+awqOawpuawpOazsOa1qua2lea2iOa2h+a1pua1uOa1t+a1mea2k++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc0XS5sZW5ndGg7ICsraikgaWYoRFsxNzRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc0XVtqXV0gPSA0NDU0NCArIGo7IGRbNDQ1NDQgKyBqXSA9IERbMTc0XVtqXTt9XG5EWzE3NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea1rOa2iea1rua1mua1tOa1qea2jOa2iua1uea2hea1pea2lOeDiueDmOeDpOeDmeeDiOeDj+eIueeJueeLvOeLueeLveeLuOeLt+eOhuePreeQieePruePoOePquePnueVlOeVneeVnOeVmueVmeeWvueXheeXh+eWsueWs+eWveeWvOeWueeXgueWuOeai+easOebiuebjeebjuecqeecn+ecoOecqOefqeegsOegp+eguOegneegtOegt++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veegpeegreegoOegn+egsuelleelkOeloOeln+elluelnuelneell+elmuenpOeno+enp+enn+enpuenqeenmOeqhOeqiOermeeshueskeeyiee0oee0l+e0i+e0iue0oOe0oue0lOe0kOe0lee0mue0nOe0jee0mee0m+e8uue9n+e+lOe/hee/geiAhuiAmOiAleiAmeiAl+iAveiAv+iDseiEguiDsOiEheiDreiDtOiEhuiDuOiDs+iEiOiDveiEiuiDvOiDr+iHreiHrOiIgOiIkOiIquiIq+iIqOiIrOiKu+iMq+iNkuiNlOiNiuiMuOiNkOiNieiMteiMtOiNj+iMsuiMueiMtuiMl+iNgOiMseiMqOiNg++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc1XS5sZW5ndGg7ICsraikgaWYoRFsxNzVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc1XVtqXV0gPSA0NDgwMCArIGo7IGRbNDQ4MDAgKyBqXSA9IERbMTc1XVtqXTt9XG5EWzE3Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiZlOiaiuiaquiak+iapOiaqeiajOiao+ianOihsOiht+iigeiiguihveihueiomOiokOiojuiojOioleioiuiol+iok+ioluioj+iokeixiOixuuixueiyoeiyoui1t+i6rOi7kui7lOi7j+i+semAgemAhui/t+mAgOi/uui/tOmAg+i/vemAhei/uOmClemDoemDnemDoumFkumFjemFjOmHmOmHnemHl+mHnOmHmemWg+mZoumZo+mZoe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemZm+mZnemZpOmZmOmZnumau+mjoummrOmqqOmrmOmspemssumsvOS5vuWBuuWBveWBnOWBh+WBg+WBjOWBmuWBieWBpeWBtuWBjuWBleWBteWBtOWBt+WBj+WAj+WBr+WBreWFnOWGleWHsOWJquWJr+WLkuWLmeWLmOWLleWMkOWMj+WMmeWMv+WNgOWMvuWPg+abvOWVhuWVquWVpuWVhOWVnuWVoeWVg+WViuWUseWVluWVj+WVleWUr+WVpOWUuOWUruWVnOWUrOWVo+WUs+WVgeWVl+WciOWci+WcieWfn+WgheWgiuWghuWfoOWfpOWfuuWgguWgteWft+WfueWkoOWlouWotuWpgeWpieWppuWpquWpgO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc2XS5sZW5ndGg7ICsraikgaWYoRFsxNzZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc2XVtqXV0gPSA0NTA1NiArIGo7IGRbNDUwNTYgKyBqXSA9IERbMTc2XVtqXTt9XG5EWzE3N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWovOWpouWpmuWphuWpiuWtsOWvh+WvheWvhOWvguWuv+WvhuWwieWwiOWwh+WxoOWxnOWxneW0h+W0huW0juW0m+W0luW0ouW0keW0qeW0lOW0meW0pOW0p+W0l+W3ouW4uOW4tuW4s+W4t+W6t+W6uOW6tuW6teW6vuW8teW8t+W9l+W9rOW9qeW9q+W+l+W+meW+nuW+mOW+oeW+oOW+nOaBv+aCo+aCieaCoOaCqOaDi+aCtOaDpuaCve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaDheaCu+aCteaDnOaCvOaDmOaDleaDhuaDn+aCuOaDmuaDh+aImuaIm+aJiOaOoOaOp+aNsuaOluaOouaOpeaNt+aNp+aOmOaOquaNseaOqeaOieaOg+aOm+aNq+aOqOaOhOaOiOaOmeaOoeaOrOaOkuaOj+aOgOaNu+aNqeaNqOaNuuaVneaVluaVkeaVmeaVl+WVn+aVj+aVmOaVleaVlOaWnOaWm+aWrOaXj+aXi+aXjOaXjuaZneaZmuaZpOaZqOaZpuaZnuabueWLl+acm+aigeair+aiouaik+aiteahv+ahtuaiseaip+ail+aisOaig+ajhOaireaihuaiheailOaineaiqOain+aioeaiguassuauuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc3XS5sZW5ndGg7ICsraikgaWYoRFsxNzddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc3XVtqXV0gPSA0NTMxMiArIGo7IGRbNDUzMTIgKyBqXSA9IERbMTc3XVtqXTt9XG5EWzE3OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veavq+avrOawq+a2jua2vOa3s+a3mea2sua3oea3jOa3pOa3u+a3uua4hea3h+a3i+a2r+a3kea2rua3nua3uea2uOa3t+a3tea3hea3kua4mua2tea3mua3q+a3mOa3qua3sea3rua3qOa3hua3hOa2qua3rOa2v+a3pueDueeEieeEiueDveeDr+eIveeJveeKgeeMnOeMm+eMlueMk+eMmeeOh+eQheeQiueQg+eQhuePvueQjeeToOeTtu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeTt+eUnOeUoueVpeeVpueVoueVsOeWj+eXlOeXleeWteeXiueXjeeajueblOebkuebm+ect+ecvuecvOectuecuOecuuehq+ehg+ehjuelpeelqOelreenu+eqkueqleesoOesqOesm+esrOespuesmeesnuesrueykueyl+eylee1hue1g+e1see0rue0uee0vOe1gOe0sOe0s+e1hOe0r+e1gue0sue0see8vee+nue+mue/jOe/jue/kuiAnOiBiuiBhuiEr+iEluiEo+iEq+iEqeiEsOiEpOiIguiIteiIt+iItuiIueiOjuiOnuiOmOiNuOiOouiOluiOveiOq+iOkuiOiuiOk+iOieiOoOiNt+iNu+iNvO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc4XS5sZW5ndGg7ICsraikgaWYoRFsxNzhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc4XVtqXV0gPSA0NTU2OCArIGo7IGRbNDU1NjggKyBqXSA9IERbMTc4XVtqXTt9XG5EWzE3OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiOhuiOp+iZleW9quibh+ibgOiatuibhOiateibhuibi+iaseiar+ibieihk+iinuiiiOiiq+iikuiiluiijeiii+imk+imj+ioquioneioo+iopeioseioreion+iom+ioouixieixmuiyqeiyrOiyq+iyqOiyquiyp+i1p+i1pui2vui2uui7m+i7n+mAmemAjemAmumAl+mAo+mAn+mAnemAkOmAlemAnumAoOmAj+mAoumAlumAm+mAlO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemDqOmDremDvemFl+mHjumHtemHpumHo+mHp+mHremHqemWiemZqumZtemZs+mZuOmZsOmZtOmZtumZt+mZrOmbgOmbqumbqeeroOern+mggumgg+mtmumzpem5tem5v+m6pem6u+WCouWCjeWCheWCmeWCkeWCgOWCluWCmOWCmuacgOWHseWJsuWJtOWJteWJqeWLnuWLneWLm+WNmuWOpeWVu+WWgOWWp+WVvOWWiuWWneWWmOWWguWWnOWWquWWlOWWh+WWi+WWg+WWs+WWruWWn+WUvuWWsuWWmuWWu+WWrOWWseWVvuWWieWWq+WWmeWcjeWgr+WgquWgtOWgpOWgsOWgseWgoeWgneWgoOWjueWjuuWloO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc5XS5sZW5ndGg7ICsraikgaWYoRFsxNzldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc5XVtqXV0gPSA0NTgyNCArIGo7IGRbNDU4MjQgKyBqXSA9IERbMTc5XVtqXTt9XG5EWzE4MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWpt+WqmuWpv+WqkuWqm+Wqp+Wts+WtseWvkuWvjOWvk+WvkOWwiuWwi+WwseW1jOW1kOW0tOW1h+W3veW5heW4veW5gOW5g+W5vuW7iuW7geW7guW7hOW8vOW9reW+qeW+quW+qOaDkeaDoeaCsuaCtuaDoOaEnOaEo+aDuuaEleaDsOaDu+aDtOaFqOaDseaEjuaDtuaEieaEgOaEkuaIn+aJieaOo+aOjOaPj+aPgOaPqeaPieaPhuaPje+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaPkuaPo+aPkOaPoeaPluaPreaPruaNtuaPtOaPquaPm+aRkuaPmuaPueaVnuaVpuaVouaVo+aWkeaWkOaWr+aZruaZsOaZtOaZtuaZr+aakeaZuuaZvuaZt+abvuabv+acn+acneajuuajleajoOajmOajl+akheajn+ajteajruajp+ajueajkuajsuajo+aji+ajjeakjeakkuakjuajieajmualruaju+asvuasuuasveaumOauluauvOavr+awruawr+awrOa4r+a4uOa5lOa4oea4sua5p+a5iua4oOa4pea4o+a4m+a5m+a5mOa4pOa5lua5rua4rea4pua5r+a4tOa5jea4uua4rOa5g+a4nea4vua7i++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgwXS5sZW5ndGg7ICsraikgaWYoRFsxODBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgwXVtqXV0gPSA0NjA4MCArIGo7IGRbNDYwODAgKyBqXSA9IERbMTgwXVtqXTt9XG5EWzE4MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea6iea4mea5jua5o+a5hOa5sua5qea5n+eEmeeEmueEpueEsOeEoeeEtueFrueEnOeJjOeKhOeKgOeMtueMpeeMtOeMqeeQuueQqueQs+eQoueQpeeQteeQtueQtOeQr+eQm+eQpueQqOeUpeeUpueVq+eVqueXoueXm+eXo+eXmeeXmOeXnueXoOeZu+eZvOealueak+eatOebnOedj+efreehneehrOehr+eojeeoiOeoi+eoheeogOeqmO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeql+eqluerpeero+etieetluethuetkOetkuetlOetjeeti+etj+etkeeyn+eypee1nue1kOe1qOe1lee0q+e1rue1sue1oee1pue1oue1sOe1s+WWhOe/lOe/leiAi+iBkuiCheiFleiFlOiFi+iFkeiFjuiEueiFhuiEvuiFjOiFk+iFtOiIkuiInOiPqeiQg+iPuOiQjeiPoOiPheiQi+iPgeiPr+iPseiPtOiRl+iQiuiPsOiQjOiPjOiPveiPsuiPiuiQuOiQjuiQhOiPnOiQh+iPlOiPn+iZm+ibn+ibmeibreiblOibm+ibpOibkOibnuihl+ijgeijguiiseimg+imluiou+ipoOipleipnuiovOipge+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgxXS5sZW5ndGg7ICsraikgaWYoRFsxODFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgxXVtqXV0gPSA0NjMzNiArIGo7IGRbNDYzMzYgKyBqXSA9IERbMTgxXVtqXTt9XG5EWzE4Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiplOipm+ipkOiphuiotOiouuiotuipluixoeiyguiyr+iyvOiys+iyveizgeiyu+izgOiytOiyt+iytuiyv+iyuOi2iui2hei2gei3jui3nei3i+i3mui3kei3jOi3m+i3hui7u+i7uOi7vOi+nOmArumAtemAsemAuOmAsumAtumEgumDtemEiemDvumFo+mFpemHj+mIlOmIlemIo+mIiemInumIjemIkOmIh+mIkemWlOmWj+mWi+mWke+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemWk+mWkumWjumaiumajumai+mZvemahemahumajemZsumahOmbgembhembhOmbhumbh+mbr+mbsumfjOmghemghumgiOmjp+mjqumjr+mjqemjsumjremmrummrem7g+m7jem7keS6guWCreWCteWCsuWCs+WDheWCvuWCrOWCt+WCu+WCr+WDh+WJv+WJt+WJveWLn+WLpuWLpOWLouWLo+WMr+WXn+WXqOWXk+WXpuWXjuWXnOWXh+WXkeWXo+WXpOWXr+WXmuWXoeWXheWXhuWXpeWXieWckuWck+WhnuWhkeWhmOWhl+WhmuWhlOWhq+WhjOWhreWhiuWhouWhkuWhi+Wlp+WrgeWrieWrjOWqvuWqveWqvO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgyXS5sZW5ndGg7ICsraikgaWYoRFsxODJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgyXVtqXV0gPSA0NjU5MiArIGo7IGRbNDY1OTIgKyBqXSA9IERbMTgyXVtqXTt9XG5EWzE4M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWqs+WrguWqsuW1qeW1r+W5jOW5ueW7ieW7iOW8kuW9meW+rOW+ruaEmuaEj+aFiOaEn+aDs+aEm+aDueaEgeaEiOaFjuaFjOaFhOaFjeaEvuaEtOaEp+aEjeaEhuaEt+aIoeaIouaQk+aQvuaQnuaQquaQreaQveaQrOaQj+aQnOaQlOaQjeaQtuaQluaQl+aQhuaVrOaWn+aWsOaal+aaieaah+aaiOaaluaahOaamOaajeacg+amlOalre+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vealmualt+aloOallOalteaksOamgualiualqOalq+alnualk+alueamhualnealo+alm+ath+atsuavgOauv+avk+avvea6oua6r+a7k+a6tua7gua6kOa6nea7h+a7hea6pea6mOa6vOa6uua6q+a7kea6lua6nOa7hOa7lOa6qua6p+a6tOeFjueFmeeFqeeFpOeFieeFp+eFnOeFrOeFpueFjOeFpeeFnueFhueFqOeFlueIuueJkueMt+eNheeMv+eMvueRr+eRmueRleeRn+eRnueRgeeQv+eRmeeRm+eRnOeVtueVuOeYgOeXsOeYgeeXsueXseeXuueXv+eXtOeXs+ebnuebn+edm+edq+edpuednuedo++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgzXS5sZW5ndGg7ICsraikgaWYoRFsxODNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgzXVtqXV0gPSA0Njg0OCArIGo7IGRbNDY4NDggKyBqXSA9IERbMTgzXVtqXTt9XG5EWzE4NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veedueedquedrOednOedpeedqOedouefrueijueisOeil+eimOeijOeiieehvOeikeeik+ehv+eluuelv+emgeiQrOemveeonOeomueooOeolOeon+eonueqn+eqoOett+evgOetoOetruetp+eyseeys+eytee2k+e1uee2kee2gee2j+e1m+e9rue9qee9que9sue+qee+qOe+pOiBluiBmOiChuiChOiFseiFsOiFuOiFpeiFruiFs+iFq++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiFueiFuuiFpuiIheiJh+iSguiRt+iQveiQseiRteiRpuiRq+iRieiRrOiRm+iQvOiQteiRoeiRo+iRqeiRreiRhuiZnuiZnOiZn+ibueick+iciOich+icgOibvuibu+icguicg+ichuiciuihmeijn+ijlOijmeijnOijmOijneijoeijiuijleijkuimnOino+ipq+ipsuips+ippuipqeipsOiqh+ipvOipo+iqoOipseiqheipreipouipruiprOipueipu+iovuipqOixouiyiuiyieiziuizh+iziOizhOiysuizg+izguizhei3oei3n+i3qOi3r+i3s+i3uui3qui3pOi3pui6sui8g+i8iei7vui8iu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg0XS5sZW5ndGg7ICsraikgaWYoRFsxODRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg0XVtqXV0gPSA0NzEwNCArIGo7IGRbNDcxMDQgKyBqXSA9IERbMTg0XVtqXTt9XG5EWzE4NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei+n+i+sumBi+mBiumBk+mBgumBlOmAvOmBlemBkOmBh+mBj+mBjumBjemBkemAvumBgemEkumEl+mFrOmFqumFqemHiemIt+mJl+mIuOmIvemJgOmIvumJm+mJi+mJpOmJkemItOmJiemJjemJhemIuemIv+mJmumWmOmamOmalOmalembjembi+mbiembiumbt+mbu+mbuembtumdlumdtOmdtumgkOmgkemgk+mgiumgkumgjOmjvOmjtO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemjvemjvumms+mmsemmtOmroemzqem6gum8jum8k+m8oOWDp+WDruWDpeWDluWDreWDmuWDleWDj+WDkeWDseWDjuWDqeWFouWHs+WKg+WKguWMseWOreWXvuWYgOWYm+WYl+WXveWYlOWYhuWYieWYjeWYjuWXt+WYluWYn+WYiOWYkOWXtuWcmOWcluWhteWhvuWig+Wik+WiiuWhueWiheWhveWjveWkpeWkouWkpOWlquWlqeWroeWrpuWrqeWrl+WrluWrmOWro+WtteWvnuWvp+WvoeWvpeWvpuWvqOWvouWvpOWvn+WwjeWxouW2hOW2h+W5m+W5o+W5leW5l+W5lOW7k+W7luW8iuW9huW9sOW+ueaFh++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg1XS5sZW5ndGg7ICsraikgaWYoRFsxODVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg1XVtqXV0gPSA0NzM2MCArIGo7IGRbNDczNjAgKyBqXSA9IERbMTg1XVtqXTt9XG5EWzE4Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaEv+aFi+aFt+aFouaFo+aFn+aFmuaFmOaFteaIquaSh+aRmOaRlOaSpOaRuOaRn+aRuuaRkeaRp+aQtOaRreaRu+aVsuaWoeaXl+aXluaaouaaqOaaneamnOamqOamleangeamruank+ani+amm+amt+amu+amq+amtOankOanjeamreanjOampuang+amo+atieatjOaws+a8s+a8lOa7vua8k+a7tOa8qea8vua8oOa8rOa8j+a8gua8ou+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea7v+a7r+a8hua8sea8uOa8sua8o+a8lea8q+a8r+a+iOa8qua7rOa8gea7sua7jOa7t+eGlOeGmeeFveeGiueGhOeGkueIvueKkueKlueNhOeNkOeRpOeRo+eRqueRsOeRreeUhOeWkeeYp+eYjeeYi+eYieeYk+eboeebo+eehOedveedv+edoeejgeein+eip+eis+eiqeeio+emjuemj+emjeeorueoseeqqueqqeerreerr+euoeeuleeui+etteeul+euneeulOeuj+euuOeuh+euhOeyueeyveeyvue2u+e2sOe2nOe2vee2vue2oOe3iue2tOe2sue2see2uue2oue2v+e2tee2uOe2ree3kue3h+e2rO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg2XS5sZW5ndGg7ICsraikgaWYoRFsxODZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg2XVtqXV0gPSA0NzYxNiArIGo7IGRbNDc2MTYgKyBqXSA9IERbMTg2XVtqXTt9XG5EWzE4N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee9sOe/oOe/oee/n+iBnuiBmuiCh+iFkOiGgOiGj+iGiOiGiuiFv+iGguiHp+iHuuiIh+iIlOiInuiJi+iTieiSv+iThuiThOiSmeiSnuiSsuiSnOiTi+iSuOiTgOiTk+iSkOiSvOiTkeiTiuicv+icnOicu+icouicpeictOicmOidleict+icqeijs+ikguijtOijueijuOijveijqOikmuijr+iqpuiqjOiqnuiqo+iqjeiqoeiqk+iqpO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiqquiqpeiqqOiqmOiqkeiqmuiqp+ixquiyjeiyjOizk+izkeizkui1q+i2mei2lei3vOi8lOi8kui8lei8k+i+o+mBoOmBmOmBnOmBo+mBmemBnumBoumBnemBm+mEmemEmOmEnumFtemFuOmFt+mFtOmJuOmKgOmKhemKmOmKlumJu+mKk+mKnOmKqOmJvOmKkemWoemWqOmWqemWo+mWpemWpOmamemanOmam+mbjOmbkumcgOmdvOmehemftumgl+mgmOmir+misemkg+mkhemkjOmkiemngemqr+mqsOmrpumtgemtgumztOmztumzs+m6vOm8u+m9iuWEhOWEgOWDu+WDteWDueWEguWEiOWEieWEheWHnO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg3XS5sZW5ndGg7ICsraikgaWYoRFsxODddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg3XVtqXV0gPSA0Nzg3MiArIGo7IGRbNDc4NzIgKyBqXSA9IERbMTg3XVtqXTt9XG5EWzE4OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWKh+WKiOWKieWKjeWKiuWLsOWOsuWYruWYu+WYueWYsuWYv+WYtOWYqeWZk+WZjuWZl+WZtOWYtuWYr+WYsOWigOWin+WinuWis+WinOWiruWiqeWipuWlreWsieWru+Wsi+WrteWsjOWsiOWvruWvrOWvqeWvq+WxpOWxpeW2neW2lOW5ouW5n+W5oeW7ouW7muW7n+W7neW7o+W7oOW9iOW9seW+t+W+teaFtuaFp+aFruaFneaFleaGgu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaFvOaFsOaFq+aFvuaGp+aGkOaGq+aGjuaGrOaGmuaGpOaGlOaGruaIruaRqeaRr+aRueaSnuaSsuaSiOaSkOaSsOaSpeaSk+aSleaSqeaSkuaSruaSreaSq+aSmuaSrOaSmeaSouaSs+aVteaVt+aVuOaaruaaq+aatOaaseaoo+aon+anqOaogeaonuaomeanveaooeaok+aoiuans+aoguaoheanreaokeatkOatjuaupOavheavhua8v+a9vOa+hOa9kea9pua9lOa+hua9rea9m+a9uOa9rua+jua9uua9sOa9pOa+l+a9mOa7lea9r+a9oOa9n+eGn+eGrOeGseeGqOeJlueKm+eNjueNl+eRqeeSi+eSg++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg4XS5sZW5ndGg7ICsraikgaWYoRFsxODhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg4XVtqXV0gPSA0ODEyOCArIGo7IGRbNDgxMjggKyBqXSA9IERbMTg4XVtqXTt9XG5EWzE4OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeRvueSgOeVv+eYoOeYqeeYn+eYpOeYpueYoeeYoueamueauuebpOeejueeh+eejOeekeeei+eji+ejheeiuuejiueivuejleeivOejkOeov+eovOepgOeoveeot+eou+eqr+eqrueureeuseevhOeutOevhuevh+evgeeuoOevjOeziue3oOe3tOe3r+e3u+e3mOe3rOe3nee3qOe3o+e3mue3nue3qee2nue3mee3sue3uee9tee9t+e+r++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee/qeiApuiGm+iGnOiGneiGoOiGmuiGmOiUl+iUveiUmuiTruiUrOiUreiUk+iUkeiUo+iUoeiUlOiTrOiUpeiTv+iUhuieguidtOidtuidoOidpuiduOidqOidmeidl+idjOidk+ihm+ihneikkOikh+ikkuikk+ikleikiuiqvOirkuirh+irhOiqleiri+iruOiqsuirieirguiqv+iqsOirluirjeiqtuiqueirm+ixjOixjuixrOizoOiznuizpuizpOizrOizreizouizo+iznOizquizoei1rei2n+i2o+i4q+i4kOi4nei4oui4j+i4qei4n+i4oei4nui6uui8nei8m+i8n+i8qei8pui8qui8nOi8nu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg5XS5sZW5ndGg7ICsraikgaWYoRFsxODldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg5XVtqXV0gPSA0ODM4NCArIGo7IGRbNDgzODQgKyBqXSA9IERbMTg5XVtqXTt9XG5EWzE5MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei8pemBqemBrumBqOmBremBt+mEsOmEremEp+mEsemGh+mGiemGi+mGg+mLhemKu+mKt+mLqumKrOmLpOmLgemKs+mKvOmLkumLh+mLsOmKsumWremWsemchOmchumch+mciemdoOmejemei+mej+mgoemgq+mgnOmis+mkiumkk+mkkumkmOmnnemnkOmnn+mnm+mnkemnlemnkumnmemqt+mrrumrr+msp+mthemthOmtt+mtr+m0hum0ie+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem0g+m6qem6vum7juWiqOm9kuWEkuWEmOWElOWEkOWEleWGgOWGquWHneWKkeWKk+WLs+WZmeWZq+WZueWZqeWZpOWZuOWZquWZqOWZpeWZseWZr+WZrOWZouWZtuWjgeWivuWjh+WjheWlruWsneWstOWtuOWvsOWwjuW9iuaGsuaGkeaGqeaGiuaHjeaGtuaGvuaHiuaHiOaIsOaTheaTgeaTi+aSu+aSvOaTmuaThOaTh+aTguaTjeaSv+aTkuaTlOaSvuaVtOabhuabieaaueabhOabh+aauOaoveaouOaouuapmeapq+apmOaoueaphOapouapoeapi+aph+aoteapn+apiOatmeatt+awhea/gua+sea+oe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkwXS5sZW5ndGg7ICsraikgaWYoRFsxOTBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkwXVtqXV0gPSA0ODY0MCArIGo7IGRbNDg2NDAgKyBqXSA9IERbMTkwXVtqXTt9XG5EWzE5MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea/g+a+pOa/gea+p+a+s+a/gOa+uea+tua+pua+oOa+tOeGvueHieeHkOeHkueHiOeHleeGueeHjueHmeeHnOeHg+eHhOeNqOeSnOeSo+eSmOeSn+eSnueToueUjOeUjeeYtOeYuOeYuuebp+ebpeeeoOeenueen+eepeejqOejmuejrOejp+empuepjeepjuephuepjOepi+equuevmeewkeevieevpOevm+evoeevqeevpuezleezlue4iu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee4kee4iOe4m+e4o+e4nue4nee4iee4kOe9uee+sue/sOe/see/ruiAqOiGs+iGqeiGqOiHu+iIiOiJmOiJmeiViuiVmeiViOiVqOiVqeiVg+iVieiVreiVquiVnuieg+ien+ienuieouiejeihoeikquiksuikpeikq+ikoeimquimpuirpuiruuirq+irseisgOirnOirp+irruirvuisgeisguirt+irreirs+irtuirvOixq+ixreiyk+iztOi5hOi4sei4tOi5gui4uei4tei8u+i8r+i8uOi8s+i+qOi+pumBtemBtOmBuOmBsumBvOmBuumEtOmGkumMoOmMtumLuOmMs+mMr+mMoumLvOmMq+mMhOmMmu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkxXS5sZW5ndGg7ICsraikgaWYoRFsxOTFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkxXVtqXV0gPSA0ODg5NiArIGo7IGRbNDg4OTYgKyBqXSA9IERbMTkxXVtqXTt9XG5EWzE5Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemMkOmMpumMoemMlemMrumMmemWu+map+maqOmaqumblemcjumckemclumcjemck+mcj+mdm+mdnOmdpumemOmgsOmguOmgu+mgt+mgremguemgpOmkkOmkqOmknumkm+mkoemkmumnremnoumnsemquOmqvOmru+mrremsqOmukem0lem0o+m0pum0qOm0kum0m+m7mOm7lOm+jem+nOWEquWEn+WEoeWEsuWLteWajuWagOWakOWaheWah++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWaj+WjleWjk+WjkeWjjuWssOWsquWspOWtuuWwt+WxqOW2vOW2uuW2veW2uOW5q+W9jOW+veaHieaHguaHh+aHpuaHi+aIsuaItOaTjuaTiuaTmOaToOaTsOaTpuaTrOaTseaTouaTreaWguaWg+abmeabluaqgOaqlOaqhOaqouaqnOarm+aqo+apvuaql+aqkOaqoOatnOauruavmuawiOa/mOa/sea/n+a/oOa/m+a/pOa/q+a/r+a+gOa/rOa/oea/qea/lea/rua/sOeHp+eHn+eHrueHpueHpeeHreeHrOeHtOeHoOeIteeJhueNsOeNsueSqeeSsOeSpueSqOeZhueZgueZjOebquees+eequeesOeerO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkyXS5sZW5ndGg7ICsraikgaWYoRFsxOTJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkyXVtqXV0gPSA0OTE1MiArIGo7IGRbNDkxNTIgKyBqXSA9IERbMTkyXVtqXTt9XG5EWzE5M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeep+eereefr+ejt+ejuuejtOejr+ekgeemp+emquepl+eqv+ewh+ewjeevvuevt+ewjOevoOezoOeznOeznuezouezn+ezmeeznee4rue4vue5hue4t+e4sue5g+e4q+e4vee4see5hee5gee4tOe4uee5iOe4tee4v+e4r+e9hOe/s+e/vOiBseiBsuiBsOiBr+iBs+iHhuiHg+iGuuiHguiHgOiGv+iGveiHieiGvuiHqOiIieiJseiWqu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiWhOiVvuiWnOiWkeiWlOiWr+iWm+iWh+iWqOiWiuiZp+ifgOifkeies+ifkuifhuieq+ieu+ieuuifiOifi+iku+iktuilhOikuOikveimrOisjuisl+ismeism+isiuisoOisneishOiskOixgeiwv+ixs+izuuizveizvOizuOizu+i2qOi5iei5i+i5iOi5iui9hOi8vui9gui9hei8v+mBv+mBvemChOmCgemCgumCgOmEuemGo+mGnumGnOmNjemOgumMqOmNtemNiumNpemNi+mMmOmNvumNrOmNm+mNsOmNmumNlOmXiumXi+mXjOmXiOmXhumasemauOmblumcnOmcnumeoOmfk+mhhumitumktemoge+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkzXS5sZW5ndGg7ICsraikgaWYoRFsxOTNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkzXVtqXV0gPSA0OTQwOCArIGo7IGRbNDk0MDggKyBqXSA9IERbMTkzXVtqXTt9XG5EWzE5NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemnv+murumuq+muqumurem0u+m0v+m6i+m7j+m7num7nOm7nem7m+m8vum9i+WPouWaleWaruWjmeWjmOWsuOW9neaHo+aIs+aTtOaTsuaTvuaUhuaTuuaTu+aTt+aWt+abnOacpuaqs+aqrOarg+aqu+aquOarguaqruaqr+atn+atuOaur+eAieeAi+a/vueAhua/uueAkeeAj+eHu+eHvOeHvueHuOeNt+eNteeSp+eSv+eUleeZlueZmO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeZkueeveeev+eeu+eevOekjuemruepoeepouepoOerhOerheewq+ewp+ewquewnuewo+ewoeezp+e5lOe5lee5nue5mue5oee5kue5mee9iOe/uee/u+iBt+iBtuiHjeiHj+iIiuiXj+iWqeiXjeiXkOiXieiWsOiWuuiWueiWpuifr+ifrOifsuifoOimhuimsuintOisqOisueisrOisq+ixkOi0hei5mei5o+i5pui5pOi5n+i5lei7gOi9iei9jemCh+mCg+mCiOmGq+mGrOmHkOmOlOmOiumOlumOoumOs+mOrumOrOmOsOmOmOmOmumOl+mXlOmXlumXkOmXlemboumbnOmbmembm+mbnumcpOmeo+mepu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk0XS5sZW5ndGg7ICsraikgaWYoRFsxOTRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk0XVtqXV0gPSA0OTY2NCArIGo7IGRbNDk2NjQgKyBqXSA9IERbMTk0XVtqXTt9XG5EWzE5NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemeremfuemhjemhj+mhjOmhjumhk+miuumkvumkv+mkvemkrummpemojumrgemsg+mshumtj+mtjumtjemviumviemvvemviOmvgOm1kem1nem1oOm7oOm8lem8rOWEs+WapeWjnuWjn+WjouWvtem+kOW7rOaHsuaHt+aHtuaHteaUgOaUj+aboOabnearpearnearmuark+eAm+eAn+eAqOeAmueAneeAleeAmOeIhueIjeeJmOeKoueNuO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeNuueSveeTiueTo+eWh+eWhueZn+eZoeefh+ekmeemseepq+epqeewvuewv+ewuOewveewt+exgOe5q+e5ree5uee5qee5que+hee5s+e+tue+uee+uOiHmOiXqeiXneiXquiXleiXpOiXpeiXt+ifu+igheigjeifueifvuiloOiln+illuilnuitgeitnOitmOitieitmuitjuitj+ithuitmei0iOi0iui5vOi5sui6h+i5tui5rOi5uui5tOi9lOi9jui+remCiumCi+mGsemGrumPoemPkemPn+mPg+mPiOmPnOmPnemPlumPoumPjemPmOmPpOmPl+mPqOmXnOmatOmbo+mcqumcp+mdoemfnOmfu+mhnu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk1XS5sZW5ndGg7ICsraikgaWYoRFsxOTVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk1XVtqXV0gPSA0OTkyMCArIGo7IGRbNDk5MjAgKyBqXSA9IERbMTk1XVtqXTt9XG5EWzE5Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemhmOmhm+mivOmlhemliemolumomemsjemvqOmvp+mvlumvm+m2iem1oem1sum1qum1rOm6kum6l+m6k+m6tOWLuOWaqOWat+WatuWatOWavOWjpOWtgOWtg+WtveWvtuW3ieaHuOaHuuaUmOaUlOaUmeabpuacp+arrOeAvueAsOeAsueIkOeNu+eTj+eZoueZpeekpuekquekrOekq+erh+ertuexjOexg+exjeezr+ezsOi+rue5vee5vO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee6gue9jOiAgOiHmuiJpuiXu+iXueiYkeiXuuiYhuiYi+iYh+iYiuiglOigleilpOimuuinuOitsOitrOitpuitr+itn+itq+i0j+i0jei6iei6gei6hei6gumGtOmHi+mQmOmQg+mPvemXoemcsOmjhOmlkumlkemmqOmoq+mosOmot+motemwk+mwjem5uem6tem7qOm8r+m9n+m9o+m9oeWEt+WEuOWbgeWbgOWbguWklOWxrOW3jeaHvOaHvuaUneaUnOaWleabqearu+ashOaruuausueBjOeIm+eKp+eTlueTlOeZqeefk+exkOe6j+e6jOe+vOiYl+iYreiYmuigo+igouigoeign+ilquilrOimveittO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk2XS5sZW5ndGg7ICsraikgaWYoRFsxOTZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk2XVtqXV0gPSA1MDE3NiArIGo7IGRbNTAxNzYgKyBqXSA9IERbMTk2XVtqXTt9XG5EWzE5N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veitt+itvei0k+i6iui6jei6i+i9n+i+r+mGuumQrumQs+mQtemQuumQuOmQsumQq+mXoumcuOmcuemcsumfv+mhp+mhpemll+mphempg+mpgOmovumrj+mtlOmtkemwremwpem2r+m2tOm3gum2uOm6nem7r+m8mem9nOm9pum9p+WEvOWEu+WbiOWbiuWbieWtv+W3lOW3kuW9juaHv+aUpOasiuatoeeBkeeBmOeOgOeTpOeWiueZrueZrO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veems+exoOexn+iBvuiBveiHn+ilsuilr+invOiugOi0lui0l+i6kei6k+i9oemFiOmRhOmRkemRkumcvemcvumfg+mfgemhq+mllemplempjemrkumsmumxiemwsemwvumwu+m3k+m3l+m8tOm9rOm9qum+lOWbjOW3luaIgOaUo+aUq+aUquabrOaskOeTmueriuexpOexo+expee6k+e6lue6lOiHouiYuOiYv+igseiuiumCkOmCj+mRo+mRoOmRpOmdqOmhr+mlnOmpmumpm+mpl+mrk+mrlOmrkemxlOmxl+mxlum3pem6n+m7tOWbkeWjqeaUrOeBnueZseeZsuefl+e9kOe+iOigtuigueihouiuk+iuku+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk3XS5sZW5ndGg7ICsraikgaWYoRFsxOTddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk3XVtqXV0gPSA1MDQzMiArIGo7IGRbNTA0MzIgKyBqXSA9IERbMTk3XVtqXTt9XG5EWzE5OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiuluiJt+i0m+mHgOmRqumdgumdiOmdhOmfhumhsOmpn+msoumtmOmxn+m3uem3uum5vOm5vem8h+m9t+m9suW7s+aslueBo+exrOexruigu+ingOi6oemHgemRsumRsOmhsemlnumrlumso+m7jOeBpOefmuiumumRt+mfiempoumppee6nOiunOi6qumHhemRvemRvumRvOmxt+mxuOm7t+ixlOmRv+m4mueIqOmpqumssem4m+m4nuexsu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk4XS5sZW5ndGg7ICsraikgaWYoRFsxOThdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk4XVtqXV0gPSA1MDY4OCArIGo7IGRbNTA2ODggKyBqXSA9IERbMTk4XVtqXTt9XG5EWzIwMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS5guS5nOWHteWMmuWOguS4h+S4jOS5h+S6jeWbl++ojOWxruW9s+S4j+WGh+S4juS4ruS6k+S7guS7ieS7iOWGmOWLvOWNrOWOueWcoOWkg+WkrOWwkOW3v+aXoeaus+avjOawlOeIv+S4seS4vOS7qOS7nOS7qeS7oeS7neS7muWIjOWMnOWNjOWcouWco+Wkl+Wkr+WugeWuhOWwkuWwu+WxtOWxs+W4hOW6gOW6guW/ieaIieaJkOawle+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veawtuaxg+awv+awu+eKrueKsOeOiuemuOiCiumYnuS8juS8mOS8rOS7teS8lOS7seS8gOS7t+S8iOS8neS8guS8heS8ouS8k+S8hOS7tOS8kuWGseWIk+WIieWIkOWKpuWMouWMn+WNjeWOiuWQh+WboeWbn+WcruWcquWctOWkvOWmgOWlvOWmheWlu+WlvuWlt+Wlv+WtluWwleWwpeWxvOWxuuWxu+WxvuW3n+W5teW6hOW8guW8muW9tOW/leW/lOW/j+aJnOaJnuaJpOaJoeaJpuaJouaJmeaJoOaJmuaJpeaXr+aXruacvuacueacuOacu+acuuacv+acvOacs+awmOaxhuaxkuaxnOaxj+axiuaxlOaxi++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAxXS5sZW5ndGg7ICsraikgaWYoRFsyMDFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAxXVtqXV0gPSA1MTQ1NiArIGo7IGRbNTE0NTYgKyBqXSA9IERbMjAxXVtqXTt9XG5EWzIwMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaxjOeBseeJnueKtOeKteeOjueUqueZv+eptee9keiJuOiJvOiKgOiJveiJv+iZjeilvumCmemCl+mCmOmCm+mClOmYoumYpOmYoOmYo+S9luS8u+S9ouS9ieS9k+S9pOS8vuS9p+S9kuS9n+S9geS9mOS8reS8s+S8v+S9oeWGj+WGueWInOWInuWIoeWKreWKruWMieWNo+WNsuWOjuWOj+WQsOWQt+WQquWRlOWRheWQmeWQnOWQpeWQmO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWQveWRj+WRgeWQqOWQpOWRh+WbruWbp+WbpeWdgeWdheWdjOWdieWdi+WdkuWkhuWlgOWmpuWmmOWmoOWml+WmjuWmouWmkOWmj+Wmp+WmoeWujuWukuWwqOWwquWyjeWyj+WyiOWyi+WyieWykuWyiuWyhuWyk+WyleW3oOW4iuW4juW6i+W6ieW6jOW6iOW6jeW8heW8neW9uOW9tuW/kuW/keW/kOW/reW/qOW/ruW/s+W/oeW/pOW/o+W/uuW/r+W/t+W/u+aAgOW/tOaIuuaKg+aKjOaKjuaKj+aKlOaKh+aJseaJu+aJuuaJsOaKgeaKiOaJt+aJveaJsuaJtOaUt+aXsOaXtOaXs+aXsuaXteadheadh++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAyXS5sZW5ndGg7ICsraikgaWYoRFsyMDJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAyXVtqXV0gPSA1MTcxMiArIGo7IGRbNTE3MTIgKyBqXSA9IERbMjAyXVtqXTt9XG5EWzIwM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veadmeadleadjOadiOadneadjeadmuadi+avkOawmeawmuaxuOaxp+axq+ayhOayi+ayj+axseaxr+axqeaymuaxreayh+ayleaynOaxpuaxs+axpeaxu+ayjueBtOeBuueJo+eKv+eKveeLg+eLhueLgeeKuueLheeOleeOl+eOk+eOlOeOkueUuueUueeWlOeWleeageekveiAtOiCleiCmeiCkOiCkuiCnOiKkOiKj+iKheiKjuiKkeiKk++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiKiuiKg+iKhOixuOi/iei+v+mCn+mCoemCpemCnumCp+mCoOmYsOmYqOmYr+mYreS4s+S+mOS9vOS+heS9veS+gOS+h+S9tuS9tOS+ieS+hOS9t+S9jOS+l+S9quS+muS9ueS+geS9uOS+kOS+nOS+lOS+nuS+kuS+guS+leS9q+S9ruWGnuWGvOWGvuWIteWIsuWIs+WJhuWIseWKvOWMiuWMi+WMvOWOkuWOlOWSh+WRv+WSgeWSkeWSguWSiOWRq+WRuuWRvuWRpeWRrOWRtOWRpuWSjeWRr+WRoeWRoOWSmOWRo+WRp+WRpOWbt+WbueWdr+WdsuWdreWdq+WdseWdsOWdtuWegOWdteWdu+Wds+WdtOWdou+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAzXS5sZW5ndGg7ICsraikgaWYoRFsyMDNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAzXVtqXV0gPSA1MTk2OCArIGo7IGRbNTE5NjggKyBqXSA9IERbMjAzXVtqXTt9XG5EWzIwNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWdqOWdveWkjOWlheWmteWmuuWnj+WnjuWmsuWnjOWngeWmtuWmvOWng+WnluWmseWmveWngOWniOWmtOWnh+WtouWtpeWuk+WuleWxhOWxh+WyruWypOWyoOWyteWyr+WyqOWyrOWyn+Wyo+WyreWyouWyquWyp+WyneWypeWytuWysOWypuW4l+W4lOW4meW8qOW8ouW8o+W8pOW9lOW+guW9vuW9veW/nuW/peaAreaApuaAmeaAsuaAi++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaAtOaAiuaAl+aAs+aAmuaAnuaArOaAouaAjeaAkOaAruaAk+aAkeaAjOaAieaAnOaIlOaIveaKreaKtOaLkeaKvuaKquaKtuaLiuaKruaKs+aKr+aKu+aKqeaKsOaKuOaUveaWqOaWu+aYieaXvOaYhOaYkuaYiOaXu+aYg+aYi+aYjeaYheaXveaYkeaYkOabtuaciuaeheadrOaejuaekuadtuadu+aemOaehuaehOadtOaejeaejOaduuaen+aekeaemeaeg+adveaegeaduOadueaelOaspeaugOatvuavnuawneayk+azrOazq+azruazmeaytuazlOayreazp+ayt+azkOazguayuuazg+azhuazreazsu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA0XS5sZW5ndGg7ICsraikgaWYoRFsyMDRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA0XVtqXV0gPSA1MjIyNCArIGo7IGRbNTIyMjQgKyBqXSA9IERbMjA0XVtqXTt9XG5EWzIwNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veazkuazneaytOayiuayneaygOaznuazgOa0sOazjeazh+aysOazueazj+azqeazkeeClOeCmOeCheeCk+eChueChOeCkeeClueCgueCmueCg+eJqueLlueLi+eLmOeLieeLnOeLkueLlOeLmueLjOeLkeeOpOeOoeeOreeOpueOoueOoOeOrOeOneeTneeTqOeUv+eVgOeUvueWjOeWmOear+ebs+ebseebsOebteefuOefvOefueefu+efuu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeft+elguekv+enheepuOepu+eru+exteezveiAteiCj+iCruiCo+iCuOiCteiCreiIoOiKoOiLgOiKq+iKmuiKmOiKm+iKteiKp+iKruiKvOiKnuiKuuiKtOiKqOiKoeiKqeiLguiKpOiLg+iKtuiKouiZsOiZr+iZreiZruixlui/kui/i+i/k+i/jei/lui/lei/l+mCsumCtOmCr+mCs+mCsOmYuemYvemYvOmYuumZg+S/jeS/heS/k+S+suS/ieS/i+S/geS/lOS/nOS/meS+u+S+s+S/m+S/h+S/luS+uuS/gOS+ueS/rOWJhOWJieWLgOWLguWMveWNvOWOl+WOluWOmeWOmOWSuuWSoeWSreWSpeWTj++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA1XS5sZW5ndGg7ICsraikgaWYoRFsyMDVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA1XVtqXV0gPSA1MjQ4MCArIGo7IGRbNTI0ODAgKyBqXSA9IERbMjA1XVtqXTt9XG5EWzIwNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWTg+iMjeWSt+WSruWTluWStuWTheWThuWSoOWRsOWSvOWSouWSvuWRsuWTnuWSsOWeteWenuWen+WepOWejOWel+WeneWem+WelOWemOWej+WemeWepeWemuWeleWjtOWkjeWlk+WnoeWnnuWnruWogOWnseWnneWnuuWnveWnvOWntuWnpOWnsuWnt+Wnm+WnqeWns+WnteWnoOWnvuWntOWnreWuqOWxjOWzkOWzmOWzjOWzl+Wzi+Wzm++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWznuWzmuWzieWzh+WziuWzluWzk+WzlOWzj+WziOWzhuWzjuWzn+WzuOW3ueW4oeW4ouW4o+W4oOW4pOW6sOW6pOW6ouW6m+W6o+W6peW8h+W8ruW9luW+huaAt+aAueaBlOaBsuaBnuaBheaBk+aBh+aBieaBm+aBjOaBgOaBguaBn+aApOaBhOaBmOaBpuaBruaJguaJg+aLj+aMjeaMi+aLteaMjuaMg+aLq+aLueaMj+aMjOaLuOaLtuaMgOaMk+aMlOaLuuaMleaLu+aLsOaVgeaVg+aWquaWv+aYtuaYoeaYsuaYteaYnOaYpuaYouaYs+aYq+aYuuaYneaYtOaYueaYruacj+ackOafgeafsuafiOaeuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA2XS5sZW5ndGg7ICsraikgaWYoRFsyMDZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA2XVtqXV0gPSA1MjczNiArIGo7IGRbNTI3MzYgKyBqXSA9IERbMjA2XVtqXTt9XG5EWzIwN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veafnOaeu+afuOafmOafgOaet+afheafq+afpOafn+aeteafjeaes+aft+aftuafruafo+afguaeueafjuafp+afsOaesuafvOafhuafreafjOaeruafpuafm+afuuafieafiuafg+afquafi+asqOauguauhOautuavluavmOavoOawoOawoea0qOa0tOa0rea0n+a0vOa0v+a0kua0iuazmua0s+a0hOa0mea0uua0mua0kea0gOa0nea1gu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea0gea0mOa0t+a0g+a0j+a1gOa0h+a0oOa0rOa0iOa0oua0iea0kOeCt+eCn+eCvueCseeCsOeCoeeCtOeCteeCqeeJgeeJieeJiueJrOeJsOeJs+eJrueLiueLpOeLqOeLq+eLn+eLqueLpueLo+eOheePjOePguePiOePheeOueeOtueOteeOtOePq+eOv+ePh+eOvuePg+ePhueOuOePi+eTrOeTrueUrueVh+eViOeWp+eWqueZueebhOeciOecg+echOecheeciuebt+ebu+ebuuefp+efqOeghuegkeegkuegheegkOegj+egjuegieegg+egk+eliueljOeli+elheelhOenleenjeenj+enluenjueqgO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA3XS5sZW5ndGg7ICsraikgaWYoRFsyMDddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA3XVtqXV0gPSA1Mjk5MiArIGo7IGRbNTI5OTIgKyBqXSA9IERbMjA3XVtqXTt9XG5EWzIwOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veepvuerkeesgOesgeexuuexuOexueexv+eygOeygee0g+e0iOe0gee9mOe+kee+jee+vuiAh+iAjuiAj+iAlOiAt+iDmOiDh+iDoOiDkeiDiOiDguiDkOiDheiDo+iDmeiDnOiDiuiDleiDieiDj+iDl+iDpuiDjeiHv+iIoeiKlOiLmeiLvuiLueiMh+iLqOiMgOiLleiMuuiLq+iLluiLtOiLrOiLoeiLsuiLteiMjOiLu+iLtuiLsOiLqu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiLpOiLoOiLuuiLs+iLreiZt+iZtOiZvOiZs+ihgeihjuihp+ihquihqeink+iohOioh+i1sui/o+i/oei/rui/oOmDsemCvemCv+mDlemDhemCvumDh+mDi+mDiOmHlOmHk+mZlOmZj+mZkemZk+mZiumZjuWAnuWAheWAh+WAk+WAouWAsOWAm+S/teS/tOWAs+WAt+WArOS/tuS/t+WAl+WAnOWAoOWAp+WAteWAr+WAseWAjuWFmuWGlOWGk+WHiuWHhOWHheWHiOWHjuWJoeWJmuWJkuWJnuWJn+WJleWJouWLjeWMjuWOnuWUpuWTouWUl+WUkuWTp+WTs+WTpOWUmuWTv+WUhOWUiOWTq+WUkeWUheWTse+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA4XS5sZW5ndGg7ICsraikgaWYoRFsyMDhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA4XVtqXV0gPSA1MzI0OCArIGo7IGRbNTMyNDggKyBqXSA9IERbMjA4XVtqXTt9XG5EWzIwOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWUiuWTu+WTt+WTuOWToOWUjuWUg+WUi+WcgeWcguWfjOWgsuWfleWfkuWeuuWfhuWeveWevOWeuOWetuWev+Wfh+WfkOWeueWfgeWkjuWliuWomeWoluWoreWoruWoleWoj+Wol+WoiuWonuWos+WtrOWup+WureWurOWwg+WxluWxlOWzrOWzv+WzruWzseWzt+W0gOWzueW4qeW4qOW6qOW6ruW6quW6rOW8s+W8sOW9p+aBneaBmuaBp++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaBgeaCouaCiOaCgOaCkuaCgeaCneaCg+aCleaCm+aCl+aCh+aCnOaCjuaImeaJhuaLsuaMkOaNluaMrOaNhOaNheaMtuaNg+aPpOaMueaNi+aNiuaMvOaMqeaNgeaMtOaNmOaNlOaNmeaMreaNh+aMs+aNmuaNkeaMuOaNl+aNgOaNiOaViuaVhuaXhuaXg+aXhOaXguaZiuaZn+aZh+aZkeackuack+agn+agmuahieagsuags+agu+ahi+ahj+agluagseagnOagteagq+agreagr+ahjuahhOagtOagneagkuaglOagpuagqOagruahjeaguuagpeagoOasrOasr+asreasseastOatreiCguauiOavpuavpO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA5XS5sZW5ndGg7ICsraikgaWYoRFsyMDldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA5XVtqXV0gPSA1MzUwNCArIGo7IGRbNTM1MDQgKyBqXSA9IERbMjA5XVtqXTt9XG5EWzIxMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veavqOavo+avouavp+awpea1uua1o+a1pOa1tua0jea1oea2kua1mOa1oua1rea1r+a2kea2jea3r+a1v+a2hua1nua1p+a1oOa2l+a1sOa1vOa1n+a2gua2mOa0r+a1qOa2i+a1vua2gOa2hOa0lua2g+a1u+a1vea1tea2kOeDnOeDk+eDkeeDneeDi+e8ueeDoueDl+eDkueDnueDoOeDlOeDjeeDheeDhueDh+eDmueDjueDoeeJgueJuO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeJt+eJtueMgOeLuueLtOeLvueLtueLs+eLu+eMgeePk+ePmeePpeePlueOvOePp+ePo+ePqeePnOePkuePm+ePlOePneePmuePl+ePmOePqOeTnueTn+eTtOeTteeUoeeVm+eVn+eWsOeXgeeWu+eXhOeXgOeWv+eWtueWuueaiuebieecneecm+eckOeck+eckueco+eckeecleecmeecmuecouecp+ego+egrOegouegteegr+egqOegruegq+egoeegqeegs+egquegseellOelm+elj+elnOelk+elkuelkeenq+enrOenoOenruenreenquennOennuenneeqhueqieeqheeqi+eqjOeqiueqh+ermOeskO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEwXS5sZW5ndGg7ICsraikgaWYoRFsyMTBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEwXVtqXV0gPSA1Mzc2MCArIGo7IGRbNTM3NjAgKyBqXSA9IERbMjEwXVtqXTt9XG5EWzIxMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeshOesk+esheesj+esiOesiuesjuesieeskueyhOeykeeyiueyjOeyiOeyjeeyhee0nue0nee0kee0jue0mOe0lue0k+e0n+e0kue0j+e0jOe9nOe9oee9nue9oOe9nee9m+e+lue+kue/g+e/gue/gOiAluiAvuiAueiDuuiDsuiDueiDteiEgeiDu+iEgOiIgeiIr+iIpeiMs+iMreiNhOiMmeiNkeiMpeiNluiMv+iNgeiMpuiMnOiMou+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiNguiNjuiMm+iMquiMiOiMvOiNjeiMluiMpOiMoOiMt+iMr+iMqeiNh+iNheiNjOiNk+iMnuiMrOiNi+iMp+iNiOiZk+iZkuiaouiaqOialuiajeiakeianuiah+ial+iahuiai+iamuiaheiapeiameiaoeiap+ialeiamOiajuianeiakOialOihg+ihhOihreihteihtuihsuiigOihseihv+ihr+iig+ihvuihtOihvOiokuixh+ixl+ixu+iypOiyo+i1tui1uOi2tei2t+i2tui7kei7k+i/vui/temAgui/v+i/u+mAhOi/vOi/tumDlumDoOmDmemDmumDo+mDn+mDpemDmOmDm+mDl+mDnOmDpOmFkO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjExXS5sZW5ndGg7ICsraikgaWYoRFsyMTFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjExXVtqXV0gPSA1NDAxNiArIGo7IGRbNTQwMTYgKyBqXSA9IERbMjExXVtqXTt9XG5EWzIxMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemFjumFj+mHlemHoumHmumZnOmZn+mavOmjo+mrn+msr+S5v+WBsOWBquWBoeWBnuWBoOWBk+WBi+WBneWBsuWBiOWBjeWBgeWBm+WBiuWBouWAleWBheWBn+WBqeWBq+WBo+WBpOWBhuWBgOWBruWBs+WBl+WBkeWHkOWJq+WJreWJrOWJruWLluWLk+WMreWOnOWVteWVtuWUvOWVjeWVkOWUtOWUquWVkeWVouWUtuWUteWUsOWVkuWVhe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWUjOWUsuWVpeWVjuWUueWViOWUreWUu+WVgOWVi+WciuWch+Wfu+WglOWfouWftuWfnOWftOWggOWfreWfveWgiOWfuOWgi+Wfs+Wfj+Wgh+WfruWfo+WfsuWfpeWfrOWfoeWgjuWfvOWgkOWfp+WggeWgjOWfseWfqeWfsOWgjeWghOWlnOWpoOWpmOWpleWpp+WpnuWouOWoteWpreWpkOWpn+WppeWprOWpk+WppOWpl+Wpg+WpneWpkuWphOWpm+WpiOWqjuWovuWpjeWoueWpjOWpsOWpqeWph+WpkeWpluWpguWpnOWtsuWtruWvgeWvgOWxmeW0nuW0i+W0neW0muW0oOW0jOW0qOW0jeW0puW0peW0j++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEyXS5sZW5ndGg7ICsraikgaWYoRFsyMTJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEyXVtqXV0gPSA1NDI3MiArIGo7IGRbNTQyNzIgKyBqXSA9IERbMjEyXVtqXTt9XG5EWzIxM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veW0sOW0kuW0o+W0n+W0ruW4vuW4tOW6seW6tOW6ueW6suW6s+W8tuW8uOW+m+W+luW+n+aCiuaCkOaChuaCvuaCsOaCuuaDk+aDlOaDj+aDpOaDmeaDneaDiOaCseaDm+aCt+aDiuaCv+aDg+aDjeaDgOaMsuaNpeaOiuaOguaNveaOveaOnuaOreaOneaOl+aOq+aOjuaNr+aOh+aOkOaNruaOr+aNteaOnOaNreaOruaNvOaOpOaMu+aOn++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaNuOaOheaOgeaOkeaOjeaNsOaVk+aXjeaZpeaZoeaZm+aZmeaZnOaZouacmOahueaih+aikOainOahreahruairuaiq+alluahr+aio+airOaiqeahteahtOaisuaij+aht+aikuahvOahq+ahsuaiquaigOahseahvuaim+ailuaii+aioOaiieaipOahuOahu+aikeaijOaiiuahveastuass+ast+asuOaukeauj+aujeaujuaujOawqua3gOa2q+a2tOa2s+a5tOa2rOa3qea3oua2t+a3tua3lOa4gOa3iOa3oOa3n+a3lua2vua3pea3nOa3nea3m+a3tOa3iua2vea3rea3sOa2uua3lea3gua3j+a3ie+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEzXS5sZW5ndGg7ICsraikgaWYoRFsyMTNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEzXVtqXV0gPSA1NDUyOCArIGo7IGRbNTQ1MjggKyBqXSA9IERbMjEzXVtqXTt9XG5EWzIxNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea3kOa3sua3k+a3vea3l+a3jea3o+a2u+eDuueEjeeDt+eEl+eDtOeEjOeDsOeEhOeDs+eEkOeDvOeDv+eEhueEk+eEgOeDuOeDtueEi+eEgueEjueJvueJu+eJvOeJv+eMneeMl+eMh+eMkeeMmOeMiueMiOeLv+eMj+eMnueOiOePtuePuOePteeQhOeQgeePveeQh+eQgOePuuePvOePv+eQjOeQi+ePtOeQiOeVpOeVo+eXjueXkueXj++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeXi+eXjOeXkeeXkOeaj+eaieebk+ecueecr+ecreecseecsuectOecs+ecveecpeecu+ecteehiOehkuehieehjeehiuehjOegpuehheehkOelpOelp+elqeelquelo+elq+eloeemu+enuuenuOentuent+eqj+eqlOeqkOesteeth+estOespeessOesouespOess+esmOesquesneesseesq+esreesr+essuesuOesmueso+eylOeymOeylueyo+e0tee0vee0uOe0tue0uue1hee0rOe0qee1gee1h+e0vue0v+e1iue0u+e0qOe9o+e+lee+nOe+nee+m+e/iue/i+e/jee/kOe/kee/h+e/j+e/ieiAn++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE0XS5sZW5ndGg7ICsraikgaWYoRFsyMTRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE0XVtqXV0gPSA1NDc4NCArIGo7IGRbNTQ3ODQgKyBqXSA9IERbMjE0XVtqXTt9XG5EWzIxNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiAnuiAm+iBh+iBg+iBiOiEmOiEpeiEmeiEm+iEreiEn+iErOiEnuiEoeiEleiEp+iEneiEouiIkeiIuOiIs+iIuuiItOiIsuiJtOiOkOiOo+iOqOiOjeiNuuiNs+iOpOiNtOiOj+iOgeiOleiOmeiNteiOlOiOqeiNveiOg+iOjOiOneiOm+iOquiOi+iNvuiOpeiOr+iOiOiOl+iOsOiNv+iOpuiOh+iOruiNtuiOmuiZmeiZluiav+iat++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veibguibgeibheiauuiasOibiOiaueias+iauOibjOiatOiau+iavOibg+iaveiavuihkuiiieiileiiqOiiouiiquiimuiikeiioeiin+iimOiip+iimeiim+iil+iipOiirOiijOiik+iijuimguinluinmeinleiosOiop+iorOionuiwueiwu+ixnOixneixveiypei1vei1u+i1uei2vOi3gui2uei2v+i3gei7mOi7nui7nei7nOi7l+i7oOi7oemApOmAi+mAkemAnOmAjOmAoemDr+mDqumDsOmDtOmDsumDs+mDlOmDq+mDrOmDqemFlumFmOmFmumFk+mFlemHrOmHtOmHsemHs+mHuOmHpOmHuemHqu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE1XS5sZW5ndGg7ICsraikgaWYoRFsyMTVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE1XVtqXV0gPSA1NTA0MCArIGo7IGRbNTUwNDAgKyBqXSA9IERbMjE1XVtqXTt9XG5EWzIxNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemHq+mHt+mHqOmHrumVuumWhumWiOmZvOmZremZq+mZsemZr+mav+mdqumghOmjpemml+WCm+WCleWClOWCnuWCi+WCo+WCg+WCjOWCjuWCneWBqOWCnOWCkuWCguWCh+WFn+WHlOWMkuWMkeWOpOWOp+WWkeWWqOWWpeWWreWVt+WZheWWouWWk+WWiOWWj+WWteWWgeWWo+WWkuWWpOWVveWWjOWWpuWVv+WWleWWoeWWjuWcjOWgqeWgt++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWgmeWgnuWgp+Wgo+WgqOWfteWhiOWgpeWgnOWgm+Wgs+Wgv+WgtuWgruWgueWguOWgreWgrOWgu+WloeWqr+WqlOWqn+WpuuWqouWqnuWpuOWqpuWpvOWqpeWqrOWqleWqruWot+WqhOWqiuWql+Wqg+Wqi+WqqeWpu+WpveWqjOWqnOWqj+Wqk+WqneWvquWvjeWvi+WvlOWvkeWviuWvjuWwjOWwsOW0t+W1g+W1q+W1geW1i+W0v+W0teW1keW1juW1leW0s+W0uuW1kuW0veW0seW1meW1guW0ueW1ieW0uOW0vOW0suW0tuW1gOW1heW5hOW5geW9mOW+puW+peW+q+aDieaCueaDjOaDouaDjuaDhOaElO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE2XS5sZW5ndGg7ICsraikgaWYoRFsyMTZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE2XVtqXV0gPSA1NTI5NiArIGo7IGRbNTUyOTYgKyBqXSA9IERbMjE2XVtqXTt9XG5EWzIxN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaDsuaEiuaEluaEheaDteaEk+aDuOaDvOaDvuaDgeaEg+aEmOaEneaEkOaDv+aEhOaEi+aJiuaOlOaOseaOsOaPjuaPpeaPqOaPr+aPg+aSneaPs+aPiuaPoOaPtuaPleaPsuaPteaRoeaPn+aOvuaPneaPnOaPhOaPmOaPk+aPguaPh+aPjOaPi+aPiOaPsOaPl+aPmeaUsuaVp+aVquaVpOaVnOaVqOaVpeaWjOaWneaWnuaWruaXkOaXku+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaZvOaZrOaZu+aagOaZseaZueaZquaZsuacgeakjOajk+akhOajnOakquajrOajquajseakj+ajluajt+ajq+ajpOajtuakk+akkOajs+ajoeakh+ajjOakiOalsOaitOakkeajr+ajhuaklOajuOajkOajveajvOajqOaki+akiuakl+ajjuajiOajneajnuajpuajtOajkeakhuajlOajqeakleakpeajh+asueasu+asv+asvOaulOaul+aumeauleauveavsOavsuavs+awsOa3vOa5hua5h+a4n+a5iea6iOa4vOa4vea5hea5oua4q+a4v+a5gea5nea5s+a4nOa4s+a5i+a5gOa5kea4u+a4g+a4rua5nu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE3XS5sZW5ndGg7ICsraikgaWYoRFsyMTddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE3XVtqXV0gPSA1NTU1MiArIGo7IGRbNTU1NTIgKyBqXSA9IERbMjE3XVtqXTt9XG5EWzIxOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea5qOa5nOa5oea4sea4qOa5oOa5sea5q+a4uea4oua4sOa5k+a5pea4p+a5uOa5pOa5t+a5lea5uea5kua5pua4tea4tua5mueEoOeEnueEr+eDu+eErueEseeEo+eEpeeEoueEsueEn+eEqOeEuueEm+eJi+eJmueKiOeKieeKhueKheeKi+eMkueMi+eMsOeMoueMseeMs+eMp+eMsueMreeMpueMo+eMteeMjOeQrueQrOeQsOeQq+eQlu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeQmueQoeeQreeQseeQpOeQo+eQneeQqeeQoOeQsueTu+eUr+eVr+eVrOeXp+eXmueXoeeXpueXneeXn+eXpOeXl+ealeeakuebmuedhuedh+edhOedjeedheediuedjuedi+edjOefnuefrOehoOehpOehpeehnOehreehseehquehruehsOehqeehqOehnuehoueltOels+elsuelsOeogueoiueog+eojOeohOeqmeerpuerpOetiuesu+ethOetiOetjOetjuetgOetmOetheeyoueynueyqOeyoee1mOe1r+e1o+e1k+e1lue1p+e1que1j+e1ree1nOe1q+e1kue1lOe1qee1kee1n+e1jue8vue8v+e9pe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE4XS5sZW5ndGg7ICsraikgaWYoRFsyMThdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE4XVtqXV0gPSA1NTgwOCArIGo7IGRbNTU4MDggKyBqXSA9IERbMjE4XVtqXTt9XG5EWzIxOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee9pue+oue+oOe+oee/l+iBkeiBj+iBkOiDvuiDlOiFg+iFiuiFkuiFj+iFh+iEveiFjeiEuuiHpuiHruiHt+iHuOiHueiIhOiIvOiIveiIv+iJteiMu+iPj+iPueiQo+iPgOiPqOiQkuiPp+iPpOiPvOiPtuiQkOiPhuiPiOiPq+iPo+iOv+iQgeiPneiPpeiPmOiPv+iPoeiPi+iPjuiPluiPteiPieiQieiQj+iPnuiQkeiQhuiPguiPs++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiPleiPuuiPh+iPkeiPquiQk+iPg+iPrOiPruiPhOiPu+iPl+iPouiQm+iPm+iPvuibmOibouibpuibk+ibo+ibmuibquibneibq+ibnOibrOibqeibl+ibqOibkeihiOihluihleiiuuijl+iiueiiuOijgOiivuiituiivOiit+iiveiisuikgeijieimleimmOiml+inneinmuinm+ipjuipjeioueipmeipgOipl+ipmOiphOipheipkuipiOipkeipiuipjOipj+ixn+iygeiygOiyuuiyvuiysOiyueiytei2hOi2gOi2iei3mOi3k+i3jei3h+i3lui3nOi3j+i3lei3mei3iOi3l+i3hei7r+i7t+i7uu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE5XS5sZW5ndGg7ICsraikgaWYoRFsyMTldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE5XVtqXV0gPSA1NjA2NCArIGo7IGRbNTYwNjQgKyBqXSA9IERbMjE5XVtqXTt9XG5EWzIyMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei7uei7pui7rui7pei7tei7p+i7qOi7tui7q+i7sei7rOi7tOi7qemAremAtOmAr+mEhumErOmEhOmDv+mDvOmEiOmDuemDu+mEgemEgOmEh+mEhemEg+mFoemFpOmFn+mFoumFoOmIgemIiumIpemIg+mImumIpumIj+mIjOmIgOmIkumHv+mHvemIhumIhOmIp+mIgumInOmIpOmImemIl+mIhemIlumVu+mWjemWjOmWkOmah+mZvumaiO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemaiemag+magOmbgumbiOmbg+mbsembsOmdrOmdsOmdrumgh+miqemjq+mzpum7ueS6g+S6hOS6tuWCveWCv+WDhuWCruWDhOWDiuWCtOWDiOWDguWCsOWDgeWCuuWCseWDi+WDieWCtuWCuOWHl+WJuuWJuOWJu+WJvOWXg+WXm+WXjOWXkOWXi+WXiuWXneWXgOWXlOWXhOWXqeWWv+WXkuWWjeWXj+WXleWXouWXluWXiOWXsuWXjeWXmeWXguWclOWhk+WhqOWhpOWhj+WhjeWhieWhr+WhleWhjuWhneWhmeWhpeWhm+WgveWho+WhseWjvOWrh+WrhOWri+WquuWquOWqseWqteWqsOWqv+WriOWqu+Wrhu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIwXS5sZW5ndGg7ICsraikgaWYoRFsyMjBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIwXVtqXV0gPSA1NjMyMCArIGo7IGRbNTYzMjAgKyBqXSA9IERbMjIwXVtqXTt9XG5EWzIyMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWqt+WrgOWriuWqtOWqtuWrjeWqueWqkOWvluWvmOWvmeWwn+Wws+W1seW1o+W1iuW1peW1suW1rOW1nuW1qOW1p+W1ouW3sOW5j+W5juW5iuW5jeW5i+W7heW7jOW7huW7i+W7h+W9gOW+r+W+reaDt+aFieaFiuaEq+aFheaEtuaEsuaEruaFhuaEr+aFj+aEqeaFgOaIoOmFqOaIo+aIpeaIpOaPheaPseaPq+aQkOaQkuaQieaQoOaQpO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaQs+aRg+aQn+aQleaQmOaQueaQt+aQouaQo+aQjOaQpuaQsOaQqOaRgeaQteaQr+aQiuaQmuaRgOaQpeaQp+aQi+aPp+aQm+aQruaQoeaQjuaVr+aWkuaXk+aahuaajOaaleaakOaai+aaiuaameaalOaZuOacoOalpualn+akuOaljualoualseakv+alhealquakuealguall+almealuualiOalieaktealrOaks+akvealpeajsOaluOaktOalqealgOalr+alhOaltualmOalgealtOaljOaku+ali+akt+alnOalj+alkeaksualkuakr+alu+akvOathuatheatg+atguatiOatgeaum++ojeavu+avvO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIxXS5sZW5ndGg7ICsraikgaWYoRFsyMjFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIxXVtqXV0gPSA1NjU3NiArIGo7IGRbNTY1NzYgKyBqXSA9IERbMjIxXVtqXTt9XG5EWzIyMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veavueavt+avuOa6m+a7lua7iOa6j+a7gOa6n+a6k+a6lOa6oOa6sea6uea7hua7kua6vea7gea6nua7iea6t+a6sOa7jea6pua7j+a6sua6vua7g+a7nOa7mOa6mea6kua6jua6jea6pOa6oea6v+a6s+a7kOa7iua6l+a6rua6o+eFh+eFlOeFkueFo+eFoOeFgeeFneeFoueFsueFuOeFqueFoeeFgueFmOeFg+eFi+eFsOeFn+eFkOeFk++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeFhOeFjeeFmueJj+eKjeeKjOeKkeeKkOeKjueMvOeNgueMu+eMuueNgOeNiueNieeRhOeRiueRi+eRkueRkeeRl+eRgOeRj+eRkOeRjueRgueRhueRjeeRlOeToeeTv+eTvueTveeUneeVueeVt+amg+eXr+eYj+eYg+eXt+eXvueXvOeXueeXuOeYkOeXu+eXtueXreeXteeXveeameeateebneedleedn+edoOedkuedluedmuedqeedp+edlOedmeedreefoOeih+eimueilOeij+eihOeileeiheeihueioeeig+ehueeimeeigOeiluehu+elvOemguelveelueeokeeomOeomeeokueol+eoleeooueok++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIyXS5sZW5ndGg7ICsraikgaWYoRFsyMjJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIyXVtqXV0gPSA1NjgzMiArIGo7IGRbNTY4MzIgKyBqXSA9IERbMjIyXVtqXTt9XG5EWzIyM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeom+eokOeqo+eqoueqnuerq+etpuetpOetreettOetqeetsuetpeets+etseetsOetoeetuOettueto+eysueytOeyr+e2iOe2hue2gOe2jee1v+e2hee1uue2jue1u+e2g+e1vOe2jOe2lOe2hOe1vee2kue9ree9q+e9p+e9qOe9rOe+pue+pee+p+e/m+e/nOiAoeiFpOiFoOiFt+iFnOiFqeiFm+iFouiFsuacoeiFnuiFtuiFp+iFr++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiFhOiFoeiIneiJieiJhOiJgOiJguiJheiTseiQv+iRluiRtuiRueiSj+iSjeiRpeiRkeiRgOiShuiRp+iQsOiRjeiRveiRmuiRmeiRtOiRs+iRneiUh+iRnuiQt+iQuuiQtOiRuuiRg+iRuOiQsuiRheiQqeiPmeiRi+iQr+iRguiQreiRn+iRsOiQueiRjuiRjOiRkuiRr+iTheiSjuiQu+iRh+iQtuiQs+iRqOiRvuiRhOiQq+iRoOiRlOiRruiRkOici+ichOibt+icjOibuuibluibteidjeibuOicjuicieicgeibtuicjeicheijluiji+ijjeijjuijnuijm+ijmuijjOijkOimheimm+inn+inpeinpO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIzXS5sZW5ndGg7ICsraikgaWYoRFsyMjNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIzXVtqXV0gPSA1NzA4OCArIGo7IGRbNTcwODggKyBqXSA9IERbMjIzXVtqXTt9XG5EWzIyNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veinoeinoOinouinnOinpuiptuiqhuipv+ipoeiov+ipt+iqguiqhOipteiqg+iqgeiptOipuuiwvOixi+ixiuixpeixpOixpuiyhuiyhOiyheizjOi1qOi1qei2kei2jOi2jui2j+i2jei2k+i2lOi2kOi2kui3sOi3oOi3rOi3sei3rui3kOi3qei3o+i3oui3p+i3sui3q+i3tOi8hui7v+i8gei8gOi8hei8h+i8iOi8gui8i+mBkumAv++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemBhOmBiemAvemEkOmEjemEj+mEkemElumElOmEi+mEjumFrumFr+mJiOmJkumIsOmIuumJpumIs+mJpemJnumKg+mIrumJiumJhumJremJrOmJj+mJoOmJp+mJr+mItumJoemJsOmIsemJlOmJo+mJkOmJsumJjumJk+mJjOmJlumIsumWn+mWnOmWnumWm+makumak+makemal+mbjumbuumbvembuOmbtemds+mdt+mduOmdsumgj+mgjemgjumirOmjtumjuemmr+mmsummsOmmtemqremqq+mtm+mzqumzremzp+m6gOm7veWDpuWDlOWDl+WDqOWDs+WDm+WDquWDneWDpOWDk+WDrOWDsOWDr+WDo+WDoO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI0XS5sZW5ndGg7ICsraikgaWYoRFsyMjRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI0XVtqXV0gPSA1NzM0NCArIGo7IGRbNTczNDQgKyBqXSA9IERbMjI0XVtqXTt9XG5EWzIyNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWHmOWKgOWKgeWLqeWLq+WMsOWOrOWYp+WYleWYjOWYkuWXvOWYj+WYnOWYgeWYk+WYguWXuuWYneWYhOWXv+WXueWiieWhvOWikOWimOWihuWigeWhv+WhtOWii+WhuuWih+WikeWijuWhtuWiguWiiOWhu+WilOWij+WjvuWlq+WrnOWrruWrpeWrleWrquWrmuWrreWrq+Wrs+WrouWroOWrm+WrrOWrnuWrneWrmeWrqOWrn+Wtt+WvoO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWvo+Wxo+W2guW2gOW1veW2huW1uuW2geW1t+W2iuW2ieW2iOW1vuW1vOW2jeW1ueW1v+W5mOW5meW5k+W7mOW7keW7l+W7juW7nOW7leW7meW7kuW7lOW9hOW9g+W9r+W+tuaErOaEqOaFgeaFnuaFseaFs+aFkuaFk+aFsuaFrOaGgOaFtOaFlOaFuuaFm+aFpeaEu+aFquaFoeaFluaIqeaIp+aIq+aQq+aRjeaRm+aRneaRtOaRtuaRsuaRs+aRveaRteaRpuaSpuaRjuaSguaRnuaRnOaRi+aRk+aRoOaRkOaRv+aQv+aRrOaRq+aRmeaRpeaRt+aVs+aWoOaaoeaaoOaan+acheachOacouamseamtuanie+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI1XS5sZW5ndGg7ICsraikgaWYoRFsyMjVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI1XVtqXV0gPSA1NzYwMCArIGo7IGRbNTc2MDAgKyBqXSA9IERbMjI1XVtqXTt9XG5EWzIyNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veamoOanjuamluamsOamrOamvOamkeammeamjuamp+amjeamqeamvuamr+amv+anhOamveampOanlOamueaniuammuanj+ams+amk+amquamoeamnuanmeaml+amkOanguamteampeanhuatiuatjeati+aunuaun+auoOavg+avhOavvua7jua7tea7sea8g+a8pea7uOa8t+a7u+a8rua8iea9jua8mea8mua8p+a8mOa8u+a8kua7rea8iu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea8tua9s+a7uea7rua8rea9gOa8sOa8vOa8tea7q+a8h+a8jua9g+a8hea7vea7tua8uea8nOa7vOa8uua8n+a8jea8nua8iOa8oeeGh+eGkOeGieeGgOeGheeGgueGj+eFu+eGhueGgeeGl+eJhOeJk+eKl+eKleeKk+eNg+eNjeeNkeeNjOeRoueRs+eRseeRteeRsueRp+eRrueUgOeUgueUg+eVveeWkOeYlueYiOeYjOeYleeYkeeYiueYlOeauOeegeedvOeeheeeguedrueegOedr+edvueeg+eisueiqueitOeireeiqOehvueiq+einueipeeioOeirOeioueipOemmOemiuemi+emluemleemlOemk++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI2XS5sZW5ndGg7ICsraikgaWYoRFsyMjZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI2XVtqXV0gPSA1Nzg1NiArIGo7IGRbNTc4NTYgKyBqXSA9IERbMjI2XVtqXTt9XG5EWzIyN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeml+emiOemkuemkOeoq+epiueosOeor+eoqOeopueqqOeqq+eqrOerrueuiOeunOeuiueukeeukOeulueujeeujOeum+eujueuheeumOWKhOeumeeupOeugueyu+eyv+eyvOeyuue2p+e2t+e3gue2o+e2que3gee3gOe3hee2nee3jue3hOe3hue3i+e3jOe2r+e2uee2lue2vOe2n+e2pue2rue2qee2oee3iee9s+e/oue/o+e/pee/nu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiApOiBneiBnOiGieiGhuiGg+iGh+iGjeiGjOiGi+iIleiSl+iSpOiSoeiSn+iSuuiTjuiTguiSrOiSruiSq+iSueiStOiTgeiTjeiSquiSmuiSseiTkOiSneiSp+iSu+iSouiSlOiTh+iTjOiSm+iSqeiSr+iSqOiTluiSmOiStuiTj+iSoOiTl+iTlOiTkuiTm+iSsOiSkeiZoeics+ico+icqOidq+idgOicruicnuicoeicmeicm+idg+icrOidgeicvuidhuicoOicsuicquicreicvOickuicuuicseicteidguicpuicp+icuOicpOicmuicsOickeijt+ijp+ijseijsuijuuijvuijruijvOijtuiju++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI3XS5sZW5ndGg7ICsraikgaWYoRFsyMjddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI3XVtqXV0gPSA1ODExMiArIGo7IGRbNTgxMTIgKyBqXSA9IERbMjI3XVtqXTt9XG5EWzIyOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veijsOijrOijq+imneimoeimn+imnuinqeinq+inqOiqq+iqmeiqi+iqkuiqj+iqluiwveixqOixqeizleizj+izl+i2lui4iei4gui3v+i4jei3vei4iui4g+i4h+i4hui4hei3vui4gOi4hOi8kOi8kei8jui8jemEo+mEnOmEoOmEoumEn+mEnemEmumEpOmEoemEm+mFuumFsumFuemFs+mKpemKpOmJtumKm+mJuumKoOmKlOmKqumKje+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemKpumKmumKq+mJuemKl+mJv+mKo+mLrumKjumKgumKlemKoumJvemKiOmKoemKiumKhumKjOmKmemKp+mJvumKh+mKqemKnemKi+mIremanumaoembv+mdmOmdvemduumdvumeg+megOmegumdu+mehOmegemdv+mfjumfjemglumiremirumkgumkgOmkh+mmnemmnOmng+mmuemmu+mmuumngummvemnh+mqsemro+mrp+msvumsv+mtoOmtoemtn+mzsemzsumztem6p+WDv+WEg+WEsOWDuOWEhuWEh+WDtuWDvuWEi+WEjOWDveWEiuWKi+WKjOWLseWLr+WZiOWZguWZjOWYteWZgeWZiuWZieWZhuWZmO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI4XS5sZW5ndGg7ICsraikgaWYoRFsyMjhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI4XVtqXV0gPSA1ODM2OCArIGo7IGRbNTgzNjggKyBqXSA9IERbMjI4XVtqXTt9XG5EWzIyOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWZmuWZgOWYs+WYveWYrOWYvuWYuOWYquWYuuWcmuWiq+WineWiseWioOWio+Wir+WirOWipeWioeWjv+Wrv+WrtOWrveWrt+WrtuWsg+WruOWsguWrueWsgeWsh+WsheWsj+Wxp+W2meW2l+W2n+W2kuW2ouW2k+W2leW2oOW2nOW2oeW2muW2nuW5qeW5neW5oOW5nOe3s+W7m+W7nuW7oeW9ieW+suaGi+aGg+aFueaGseaGsOaGouaGie+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaGm+aGk+aGr+aGreaGn+aGkuaGquaGoeaGjeaFpuaGs+aIreaRruaRsOaSluaSoOaSheaSl+aSnOaSj+aSi+aSiuaSjOaSo+aSn+aRqOaSseaSmOaVtuaVuuaVueaVu+aWsuaWs+aateaasOaaqeaasuaat+aaquaar+aogOaohuaol+anpeanuOaoleanseanpOaooOanv+anrOanouaom+aoneanvuaop+ansuanruaolOant+anp+apgOaoiOanpuanu+aojeanvOanq+aoieaohOaomOaopeaoj+antuaopuaoh+antOaoluatkeaupeauo+auouaupuawgeawgOavv+awgua9gea8pua9vua+h+a/hua+ku+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI5XS5sZW5ndGg7ICsraikgaWYoRFsyMjldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI5XVtqXV0gPSA1ODYyNCArIGo7IGRbNTg2MjQgKyBqXSA9IERbMjI5XVtqXTt9XG5EWzIzMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea+jea+iea+jOa9oua9j+a+hea9mua+lua9tua9rOa+gua9lea9sua9kua9kOa9l+a+lOa+k+a9nea8gOa9oea9q+a9vea9p+a+kOa9k+a+i+a9qea9v+a+lea9o+a9t+a9qua9u+eGsueGr+eGm+eGsOeGoOeGmueGqeeGteeGneeGpeeGnueGpOeGoeeGqueGnOeGp+eGs+eKmOeKmueNmOeNkueNnueNn+eNoOeNneeNm+eNoeeNmueNme+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeNoueSh+eSieeSiueShueSgeeRveeSheeSiOeRvOeRueeUiOeUh+eVvueYpeeYnueYmeeYneeYnOeYo+eYmueYqOeYm+eanOeaneeanueam+eejeeej+eeieeeiOejjeeiu+ejj+ejjOejkeejjuejlOejiOejg+ejhOejieemmuemoeemoOemnOemouemm+attueoueeqsueqtOeqs+eut+evi+euvueurOevjueur+euueeviueuteezheeziOezjOezi+e3t+e3m+e3que3p+e3l+e3oee4g+e3uue3pue3tue3see3sOe3rue3n+e9tue+rOe+sOe+ree/ree/q+e/que/rOe/pue/qOiBpOiBp+iGo+iGn++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMwXS5sZW5ndGg7ICsraikgaWYoRFsyMzBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMwXVtqXV0gPSA1ODg4MCArIGo7IGRbNTg4ODAgKyBqXSA9IERbMjMwXVtqXTt9XG5EWzIzMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiGnuiGleiGouiGmeiGl+iIluiJj+iJk+iJkuiJkOiJjuiJkeiUpOiUu+iUj+iUgOiUqeiUjuiUieiUjeiUn+iUiuiUp+iUnOiTu+iUq+iTuuiUiOiUjOiTtOiUquiTsuiUleiTt+iTq+iTs+iTvOiUkuiTquiTqeiUluiTvuiUqOiUneiUruiUguiTveiUnuiTtuiUseiUpuiTp+iTqOiTsOiTr+iTueiUmOiUoOiUsOiUi+iUmeiUr+iZou+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veidluido+idpOidt+ifoeids+idmOidlOidm+idkuidoeidmuidkeidnuidreidquidkOidjuidn+idneidr+idrOiduuidruidnOidpeidj+idu+idteidouidp+idqeihmuikheikjOiklOiki+ikl+ikmOikmeikhuikluikkeikjuikieimouimpOimo+inreinsOinrOirj+irhuiquOirk+irkeirlOirleiqu+irl+iqvuirgOirheirmOirg+iquuiqveirmeiwvuixjeiyj+izpeizn+izmeizqOizmuizneizp+i2oOi2nOi2oei2m+i4oOi4o+i4pei4pOi4rui4lei4m+i4lui4kei4mei4pui4p++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMxXS5sZW5ndGg7ICsraikgaWYoRFsyMzFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMxXVtqXV0gPSA1OTEzNiArIGo7IGRbNTkxMzYgKyBqXSA9IERbMjMxXVtqXTt9XG5EWzIzMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei4lOi4kui4mOi4k+i4nOi4l+i4mui8rOi8pOi8mOi8mui8oOi8o+i8lui8l+mBs+mBsOmBr+mBp+mBq+mEr+mEq+mEqemEqumEsumEpumErumGhemGhumGiumGgemGgumGhOmGgOmLkOmLg+mLhOmLgOmLmemKtumLj+mLsemLn+mLmOmLqemLl+mLnemLjOmLr+mLgumLqOmLiumLiOmLjumLpumLjemLlemLiemLoOmLnumLp+mLkemLk++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemKtemLoemLhumKtOmVvOmWrOmWq+mWrumWsOmapOmaoumbk+mchemciOmcgumdmumeiumejumeiOmfkOmfj+mgnumgnemgpumgqemgqOmgoOmgm+mgp+misumkiOmjuumkkemklOmklumkl+mklemnnOmnjemnj+mnk+mnlOmnjumniemnlumnmOmni+mnl+mnjOmqs+mrrOmrq+mrs+mrsumrsemthumtg+mtp+mttOmtsemtpumttumttemtsOmtqOmtpOmtrOmzvOmzuumzvemzv+mzt+m0h+m0gOmzuemzu+m0iOm0hem0hOm6g+m7k+m8j+m8kOWEnOWEk+WEl+WEmuWEkeWHnuWMtOWPoeWZsOWZoOWZru+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMyXS5sZW5ndGg7ICsraikgaWYoRFsyMzJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMyXVtqXV0gPSA1OTM5MiArIGo7IGRbNTkzOTIgKyBqXSA9IERbMjMyXVtqXTt9XG5EWzIzM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWZs+WZpuWZo+WZreWZsuWZnuWZt+WcnOWcm+WjiOWiveWjieWiv+WiuuWjguWivOWjhuWsl+WsmeWsm+WsoeWslOWsk+WskOWsluWsqOWsmuWsoOWsnuWvr+W2rOW2seW2qeW2p+W2teW2sOW2ruW2quW2qOW2suW2reW2r+W2tOW5p+W5qOW5puW5r+W7qeW7p+W7puW7qOW7peW9i+W+vOaGneaGqOaGluaHheaGtOaHhuaHgeaHjOaGuu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaGv+aGuOaGjOaTl+aTluaTkOaTj+aTieaSveaSieaTg+aTm+aTs+aTmeaUs+aVv+aVvOaWouabiOaavuabgOabiuabi+abj+aaveaau+aauuabjOaco+aotOappuapieapp+aosuapqOaovuapneapreaptuapm+apkeaoqOapmuaou+aov+apgeapquappOapkOapj+aplOapr+apqeapoOaovOapnuapluapleapjeapjuaphuatleatlOatluaup+auquauq+aviOavh+awhOawg+awhua+rea/i+a+o+a/h+a+vOa/jua/iOa9nua/hOa+vea+nua/iua+qOeAhOa+pea+rua+uua+rOa+qua/j+a+v+a+uO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMzXS5sZW5ndGg7ICsraikgaWYoRFsyMzNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMzXVtqXV0gPSA1OTY0OCArIGo7IGRbNTk2NDggKyBqXSA9IERbMjMzXVtqXTt9XG5EWzIzNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea+oua/iea+q+a/jea+r+a+sua+sOeHheeHgueGv+eGuOeHlueHgOeHgeeHi+eHlOeHiueHh+eHj+eGveeHmOeGvOeHhueHmueHm+eKneeKnueNqeeNpueNp+eNrOeNpeeNq+eNqueRv+eSmueSoOeSlOeSkueSleeSoeeUi+eWgOeYr+eYreeYseeYveeYs+eYvOeYteeYsueYsOeau+ebpueemueeneeeoeeenOeem+eeoueeo+eeleeeme+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeel+ejneejqeejpeejquejnuejo+ejm+ejoeejouejreejn+ejoOempOephOepiOeph+eqtuequOeqteeqseeqt+evnuevo+evp+evneevleevpeevmuevqOevueevlOevquevouevnOevq+evmOevn+ezkuezlOezl+ezkOezkee4kue4oee4l+e4jOe4n+e4oOe4k+e4jue4nOe4lee4mue4oue4i+e4j+e4lue4jee4lOe4pee4pOe9g+e9u+e9vOe9uue+see/r+iAquiAqeiBrOiGseiGpuiGruiGueiGteiGq+iGsOiGrOiGtOiGsuiGt+iGp+iHsuiJleiJluiJl+iVluiVheiVq+iVjeiVk+iVoeiVmO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM0XS5sZW5ndGg7ICsraikgaWYoRFsyMzRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM0XVtqXV0gPSA1OTkwNCArIGo7IGRbNTk5MDQgKyBqXSA9IERbMjM0XVtqXTt9XG5EWzIzNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiVgOiVhuiVpOiVgeiVouiVhOiVkeiVh+iVo+iUvuiVm+iVseiVjuiVruiVteiVleiVp+iVoOiWjOiVpuiVneiVlOiVpeiVrOiZo+iZpeiZpOiem+iej+iel+iek+iekuieiOiegeieluiemOidueieh+ieo+ieheiekOiekeieneiehOielOienOiemuieieiknuikpuiksOikreikruikp+ikseikouikqeiko+ikr+ikrOikn+inseiroO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veirouirsuirtOirteirneislOirpOirn+irsOiriOirnuiroeirqOirv+irr+iru+iykeiykuiykOizteizruizseizsOizs+i1rOi1rui2pei2p+i4s+i4vui4uOi5gOi5hei4tui4vOi4vei5gei4sOi4v+i6vei8tui8rui8tei8sui8uei8t+i8tOmBtumBuemBu+mChumDuumEs+mEtemEtumGk+mGkOmGkemGjemGj+mMp+mMnumMiOmMn+mMhumMj+mNuumMuOmMvOmMm+mMo+mMkumMgemNhumMremMjumMjemLi+mMnemLuumMpemMk+mLuemLt+mMtOmMgumMpOmLv+mMqemMuemMtemMqumMlOmMjO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM1XS5sZW5ndGg7ICsraikgaWYoRFsyMzVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM1XVtqXV0gPSA2MDE2MCArIGo7IGRbNjAxNjAgKyBqXSA9IERbMjM1XVtqXTt9XG5EWzIzNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemMi+mLvumMiemMgOmLu+mMlumWvOmXjemWvumWuemWuumWtumWv+mWtemWvemaqemblOmci+mckumckOmememel+melOmfsOmfuOmgtemgr+mgsumkpOmkn+mkp+mkqemmnumnrumnrOmnpemnpOmnsOmno+mnqumnqemnp+mquemqv+mqtOmqu+mrtumruumruemrt+mss+mugOmuhemuh+mtvOmtvumtu+mugumuk+mukumukOmtuumule+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemtvemuiOm0pem0l+m0oOm0num0lOm0qem0nem0mOm0oum0kOm0mem0n+m6iOm6hum6h+m6rum6rem7lem7lum7uum8kum8veWEpuWEpeWEouWEpOWEoOWEqeWLtOWak+WajOWajeWahuWahOWag+WZvuWaguWZv+WageWjluWjlOWjj+WjkuWsreWspeWssuWso+WsrOWsp+WspuWsr+WsruWtu+WvseWvsuW2t+W5rOW5quW+vuW+u+aHg+aGteaGvOaHp+aHoOaHpeaHpOaHqOaHnuaTr+aTqeaTo+aTq+aTpOaTqOaWgeaWgOaWtuaXmuabkuaqjeaqluaqgeaqpeaqieaqn+aqm+aqoeaqnuaqh+aqk+aqju+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM2XS5sZW5ndGg7ICsraikgaWYoRFsyMzZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM2XVtqXV0gPSA2MDQxNiArIGo7IGRbNjA0MTYgKyBqXSA9IERbMjM2XVtqXTt9XG5EWzIzN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaqleaqg+aqqOaqpOaqkeapv+aqpuaqmuaqheaqjOaqkuatm+aureawiea/jOa+qea/tOa/lOa/o+a/nOa/rea/p+a/pua/nua/sua/nea/oua/qOeHoeeHseeHqOeHsueHpOeHsOeHoueNs+eNrueNr+eSl+eSsueSq+eSkOeSqueSreeSseeSpeeSr+eUkOeUkeeUkueUj+eWhOeZg+eZiOeZieeZh+eapOebqeeeteeeq+eesueet+eetu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeetOeeseeeqOefsOejs+ejveekgueju+ejvOejsuekheejueejvuekhOemq+emqOepnOepm+epluepmOeplOepmueqvuergOergeewheewj+evsuewgOevv+evu+ewjuevtOewi+evs+ewguewieewg+ewgeevuOevveewhuevsOevseewkOewiuezqOe4ree4vOe5gue4s+mhiOe4uOe4que5iee5gOe5h+e4qee5jOe4sOe4u+e4tue5hOe4uue9hee9v+e9vue9vee/tOe/suiArOiGu+iHhOiHjOiHiuiHheiHh+iGvOiHqeiJm+iJmuiJnOiWg+iWgOiWj+iWp+iWleiWoOiWi+iWo+iVu+iWpOiWmuiWnu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM3XS5sZW5ndGg7ICsraikgaWYoRFsyMzddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM3XVtqXV0gPSA2MDY3MiArIGo7IGRbNjA2NzIgKyBqXSA9IERbMjM3XVtqXTt9XG5EWzIzOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiVt+iVvOiWieiWoeiVuuiVuOiVl+iWjuiWluiWhuiWjeiWmeiWneiWgeiWouiWguiWiOiWheiVueiVtuiWmOiWkOiWn+iZqOievuiequiereifheiesOierOieueieteievOieruifieifg+ifguifjOiet+ier+ifhOifiuietOietuiev+ieuOieveifnuiesuikteiks+ikvOikvuilgeilkuikt+ilguimreimr+imruinsuins+isnu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veismOisluiskeisheisi+isouisj+iskuisleish+isjeisiOishuisnOisk+ismuixj+ixsOixsuixseixr+iyleiylOizuei1r+i5jui5jei5k+i5kOi5jOi5h+i9g+i9gOmChemBvumEuOmGmumGoumGm+mGmemGn+mGoemGnemGoOmOoemOg+mOr+mNpOmNlumNh+mNvOmNmOmNnOmNtumNiemNkOmNkemNoOmNremOj+mNjOmNqumNuemNl+mNlemNkumNj+mNsemNt+mNu+mNoemNnumNo+mNp+mOgOmNjumNmemXh+mXgOmXiemXg+mXhemWt+marumasOmarOmcoOmcn+mcmOmcnemcmememumeoemenO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM4XS5sZW5ndGg7ICsraikgaWYoRFsyMzhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM4XVtqXV0gPSA2MDkyOCArIGo7IGRbNjA5MjggKyBqXSA9IERbMjM4XVtqXTt9XG5EWzIzOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemenumenemflemflOmfsemhgemhhOmhiumhiemhhemhg+mkpemkq+mkrOmkqumks+mksumkr+mkremksemksOmmmOmmo+mmoemogumnuumntOmnt+mnuemnuOmntumnu+mnvemnvumnvOmog+mqvumrvumrvemsgemrvOmtiOmumumuqOmunumum+mupumuoemupemupOmuhumuoumuoOmur+m0s+m1gem1p+m0tum0rum0r+m0sem0uOm0sO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem1hem1gum1g+m0vum0t+m1gOm0vee/tem0rem6ium6iem6jem6sOm7iOm7mum7u+m7v+m8pOm8o+m8oum9lOm+oOWEseWEreWEruWamOWanOWal+WamuWaneWameWlsOWsvOWxqeWxquW3gOW5reW5ruaHmOaHn+aHreaHruaHseaHquaHsOaHq+aHluaHqeaTv+aUhOaTveaTuOaUgeaUg+aTvOaWlOaXm+abmuabm+abmOarheaqueaqvearoearhuaquuaqtuaqt+arh+aqtOaqreatnuavieawi+eAh+eAjOeAjeeAgeeAheeAlOeAjua/v+eAgOa/u+eApua/vOa/t+eAiueIgeeHv+eHueeIg+eHveeNtu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM5XS5sZW5ndGg7ICsraikgaWYoRFsyMzldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM5XVtqXV0gPSA2MTE4NCArIGo7IGRbNjExODQgKyBqXSA9IERbMjM5XVtqXTt9XG5EWzI0MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeSuOeTgOeSteeTgeeSvueStueSu+eTgueUlOeUk+eZnOeZpOeZmeeZkOeZk+eZl+eZmueapueaveebrOefgueeuuejv+ekjOekk+eklOekieekkOekkuekkeemreemrOepn+ewnOewqeewmeewoOewn+ewreewneewpuewqOewouewpeewsOe5nOe5kOe5lue5o+e5mOe5oue5n+e5kee5oOe5l+e5k+e+tee+s+e/t+e/uOiBteiHkeiHku+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiHkOiJn+iJnuiWtOiXhuiXgOiXg+iXguiWs+iWteiWveiXh+iXhOiWv+iXi+iXjuiXiOiXheiWseiWtuiXkuiYpOiWuOiWt+iWvuiZqeifp+ifpuifouifm+ifq+ifquifpeifn+ifs+ifpOiflOifnOifk+ifreifmOifo+iepOifl+ifmeiggeiftOifqOifneilk+ili+ilj+iljOilhuilkOilkeilieisquisp+iso+iss+issOisteith+isr+isvOisvuisseispeist+ispuistuisruispOisu+isveisuuixguixteiymeiymOiyl+izvui0hOi0gui0gOi5nOi5oui5oOi5l+i5lui5nui5pei5p++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQwXS5sZW5ndGg7ICsraikgaWYoRFsyNDBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQwXVtqXV0gPSA2MTQ0MCArIGo7IGRbNjE0NDAgKyBqXSA9IERbMjQwXVtqXTt9XG5EWzI0MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei5m+i5mui5oei5nei5qei5lOi9hui9h+i9iOi9i+mEqOmEuumEu+mEvumGqOmGpemGp+mGr+mGqumOtemOjOmOkumOt+mOm+mOnemOiemOp+mOjumOqumOnumOpumOlemOiOmOmemOn+mOjemOsemOkemOsumOpOmOqOmOtOmOo+mOpemXkumXk+mXkemas+mbl+mbmuW3gumbn+mbmOmbnemco+mcoumcpemerOmerumeqOmeq+mepOmequ+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemeoumepemfl+mfmemflumfmOmfuumhkOmhkemhkumiuOmlgemkvOmkuumoj+moi+moiemojemohOmokemoiumohemoh+mohumrgOmrnOmsiOmshOmshemsqemstemtiumtjOmti+mvh+mvhumvg+muv+mvgemutemuuOmvk+mutumvhOmuuemuvem1nOm1k+m1j+m1ium1m+m1i+m1mem1lum1jOm1l+m1kum1lOm1n+m1mOm1mum6jum6jOm7n+m8gem8gOm8lum8pem8q+m8qum8qem8qOm9jOm9leWEtOWEteWKluWLt+WOtOWaq+WareWapuWap+WaquWarOWjmuWjneWjm+WkkuWsveWsvuWsv+W3g+W5sO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQxXS5sZW5ndGg7ICsraikgaWYoRFsyNDFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQxXVtqXV0gPSA2MTY5NiArIGo7IGRbNjE2OTYgKyBqXSA9IERbMjQxXVtqXTt9XG5EWzI0Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veW+v+aHu+aUh+aUkOaUjeaUieaUjOaUjuaWhOaXnuaXneabnuarp+aroOarjOarkearmeari+arn+arnOarkOarq+arj+arjearnuatoOausOawjOeAmeeAp+eAoOeAlueAq+eAoeeAoueAo+eAqeeAl+eApOeAnOeAqueIjOeIiueIh+eIgueIheeKpeeKpueKpOeKo+eKoeeTi+eTheeSt+eTg+eUlueZoOefieefiuefhOefseekneekm++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veekoeeknOekl+eknuemsOepp+epqOews+ewvOewueewrOewu+ezrOezque5tue5tee5uOe5sOe5t+e5r+e5uue5sue5tOe5qOe9i+e9iue+g+e+hue+t+e/vee/vuiBuOiHl+iHleiJpOiJoeiJo+iXq+iXseiXreiXmeiXoeiXqOiXmuiXl+iXrOiXsuiXuOiXmOiXn+iXo+iXnOiXkeiXsOiXpuiXr+iXnuiXouiggOifuuigg+iftuift+igieigjOigi+ighuifvOigiOifv+igiuigguilouilmuilm+ill+iloeilnOilmOilneilmeimiOimt+imtuintuitkOitiOitiuitgOitk+itluitlOiti+itle+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQyXS5sZW5ndGg7ICsraikgaWYoRFsyNDJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQyXVtqXV0gPSA2MTk1MiArIGo7IGRbNjE5NTIgKyBqXSA9IERbMjQyXVtqXTt9XG5EWzI0M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veitkeitguitkuitl+ixg+ixt+ixtuiymui0hui0h+i0iei2rOi2qui2rei2q+i5rei5uOi5s+i5qui5r+i5u+i7gui9kui9kei9j+i9kOi9k+i+tOmFgOmEv+mGsOmGremPnumPh+mPj+mPgumPmumPkOmPuemPrOmPjOmPmemOqemPpumPiumPlOmPrumPo+mPlemPhOmPjumPgOmPkumPp+mVvemXmumXm+mboemcqemcq+mcrOmcqOmcpu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemes+met+metumfnemfnumfn+mhnOmhmemhnemhl+miv+mivemiu+mivumliOmlh+mlg+mmpummp+momumolemopemonemopOmom+mooumooOmop+moo+monumonOmolOmrgumsi+msiumsjumsjOmst+mvqumvq+mvoOmvnumvpOmvpumvoumvsOmvlOmvl+mvrOmvnOmvmemvpemvlemvoemvmum1t+m2gem2ium2hOm2iOm1sem2gOm1uOm2hum2i+m2jOm1vem1q+m1tOm1tem1sOm1qem2hem1s+m1u+m2gum1r+m1uem1v+m2h+m1qOm6lOm6kem7gOm7vOm8rem9gOm9gem9jem9lum9l+m9mOWMt+Wasu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQzXS5sZW5ndGg7ICsraikgaWYoRFsyNDNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQzXVtqXV0gPSA2MjIwOCArIGo7IGRbNjIyMDggKyBqXSA9IERbMjQzXVtqXTt9XG5EWzI0NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWateWas+Wjo+WtheW3huW3h+W7ruW7r+W/gOW/geaHueaUl+aUluaUleaUk+aXn+abqOabo+abpOars+arsOarquarqOaruearsearruarr+eAvOeAteeAr+eAt+eAtOeAseeBgueAuOeAv+eAuueAueeBgOeAu+eAs+eBgeeIk+eIlOeKqOeNveeNvOeSuueaq+eaqueavuebreefjOefjuefj+efjeefsuekpeeko+ekp+ekqOekpOekqe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veemsueprueprOepreert+exieexiOexiuexh+exheezrue5u+e5vue6gee6gOe+uue/v+iBueiHm+iHmeiIi+iJqOiJqeiYouiXv+iYgeiXvuiYm+iYgOiXtuiYhOiYieiYheiYjOiXveigmeigkOigkeigl+igk+igluilo+ilpuimueint+itoOitquitneitqOito+itpeitp+itrei2rui6hui6iOi6hOi9mei9lui9l+i9lei9mOi9mumCjemFg+mFgemGt+mGtemGsumGs+mQi+mQk+mPu+mQoOmQj+mQlOmPvumQlemQkOmQqOmQmemQjemPtemQgOmPt+mQh+mQjumQlumQkumPuumQiemPuOmQiumPv++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ0XS5sZW5ndGg7ICsraikgaWYoRFsyNDRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ0XVtqXV0gPSA2MjQ2NCArIGo7IGRbNjI0NjQgKyBqXSA9IERbMjQ0XVtqXTt9XG5EWzI0NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemPvOmQjOmPtumQkemQhumXnumXoOmXn+mcrumcr+meuemeu+mfvemfvumhoOmhoumho+mhn+mjgemjgumlkOmljumlmemljOmli+mlk+mosumotOmosemorOmoqumotumoqemorumouOmoremrh+mriumrhumskOmskumskemwi+mwiOmvt+mwhemwkumvuOmxgOmwh+mwjumwhumwl+mwlOmwiem2n+m2mem2pOm2nem2kum2mOm2kOm2m++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem2oOm2lOm2nOm2qum2l+m2oem2mum2oum2qOm2num2o+m2v+m2qem2lum2pum2p+m6mem6m+m6mum7pem7pOm7p+m7pum8sOm8rum9m+m9oOm9num9nem9mem+keWEuuWEueWKmOWKl+Wbg+WaveWavuWtiOWth+W3i+W3j+W7seaHveaUm+asguarvOasg+aruOasgOeBg+eBhOeBiueBiOeBieeBheeBhueIneeImueImeeNvueUl+eZquefkOekreekseekr+exlOexk+ezsue6iue6h+e6iOe6i+e6hue6jee9jee+u+iAsOiHneiYmOiYquiYpuiYn+iYo+iYnOiYmeiYp+iYruiYoeiYoOiYqeiYnuiYpe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ1XS5sZW5ndGg7ICsraikgaWYoRFsyNDVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ1XVtqXV0gPSA2MjcyMCArIGo7IGRbNjI3MjAgKyBqXSA9IERbMjQ1XVtqXTt9XG5EWzI0Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veigqeigneigm+igoOigpOignOigq+ihiuilreilqeilruilq+inuuitueituOitheituuitu+i0kOi0lOi2r+i6jui6jOi9nui9m+i9nemFhumFhOmFhemGuemQv+mQu+mQtumQqemQvemQvOmQsOmQuemQqumQt+mQrOmRgOmQsemXpemXpOmXo+mctemcuumev+mfoemhpOmjiemjhumjgOmlmOmllumouemovemphumphOmpgumpgemouu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemov+mrjemslemsl+msmOmslumsuumtkumwq+mwnemwnOmwrOmwo+mwqOmwqemwpOmwoem2t+m2tum2vOm3gem3h+m3ium3j+m2vum3hem3g+m2u+m2tem3jum2uem2uum2rOm3iOm2sem2rem3jOm2s+m3jem2sum5uum6nOm7q+m7rum7rem8m+m8mOm8mum8sem9jum9pem9pOm+kuS6ueWbhuWbheWbi+WlseWti+WtjOW3leW3keW7suaUoeaUoOaUpuaUouasi+asiOasieawjeeBleeBlueBl+eBkueInueIn+eKqeeNv+eTmOeTleeTmeeTl+eZreeareekteemtOepsOepseexl+exnOexmeexm+exmu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ2XS5sZW5ndGg7ICsraikgaWYoRFsyNDZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ2XVtqXV0gPSA2Mjk3NiArIGo7IGRbNjI5NzYgKyBqXSA9IERbMjQ2XVtqXTt9XG5EWzI0N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeztOezsee6kee9j+e+h+iHnuiJq+iYtOiYteiYs+iYrOiYsuiYtuigrOigqOigpuigquigpeilseimv+imvuinu+itvuiuhOiuguiuhuiuheitv+i0lei6lei6lOi6mui6kui6kOi6lui6l+i9oOi9oumFh+mRjOmRkOmRiumRi+mRj+mRh+mRhemRiOmRiemRhumcv+mfo+mhqumhqemji+mllOmlm+mpjumpk+mplOmpjOmpj+mpiOmpiu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vempiempkumpkOmrkOmsmemsq+msu+mtlumtlemxhumxiOmwv+mxhOmwuemws+mxgemwvOmwt+mwtOmwsumwvemwtum3m+m3kum3num3mum3i+m3kOm3nOm3kem3n+m3qem3mem3mOm3lum3tem3lem3nem6tum7sOm8tem8s+m8sum9gum9q+m+lem+ouWEveWKmeWjqOWjp+WlsuWtjeW3mOigr+W9j+aIgeaIg+aIhOaUqeaUpeaWluabq+askeaskuasj+aviueBm+eBmueIoueOgueOgeeOg+eZsOeflOexp+expue6leiJrOiYuuiZgOiYueiYvOiYseiYu+iYvuigsOigsuigruigs+iltuiltOils+invu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ3XS5sZW5ndGg7ICsraikgaWYoRFsyNDddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ3XVtqXV0gPSA2MzIzMiArIGo7IGRbNjMyMzIgKyBqXSA9IERbMjQ3XVtqXTt9XG5EWzI0OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiujOiujuiui+iuiOixhei0mei6mOi9pOi9o+mGvOmRoumRlemRnemRl+mRnumfhOmfhemggOmplumpmemsnumsn+msoOmxkumxmOmxkOmxiumxjemxi+mxlemxmemxjOmxjum3u+m3t+m3r+m3o+m3q+m3uOm3pOm3tum3oem3rum3pum3sum3sOm3oum3rOm3tOm3s+m3qOm3rem7gum7kOm7sum7s+m8hum8nOm8uOm8t+m8tum9g+m9j++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem9sem9sOm9rum9r+Wbk+WbjeWtjuWxreaUreabreabruask+eBn+eBoeeBneeBoOeIo+eTm+eTpeefleekuOemt+emtuexque6l+e+ieiJreiZg+iguOigt+igteihi+iulOiulei6nui6n+i6oOi6nemGvumGvemHgumRq+mRqOmRqembpemdhumdg+mdh+mfh+mfpempnumrlemtmemxo+mxp+mxpumxoumxnumxoOm4gum3vum4h+m4g+m4hum4hem4gOm4gem4iem3v+m3vem4hOm6oOm8num9hum9tOm9tem9tuWblOaUruaWuOasmOasmeasl+asmueBoueIpueKquefmOefmeekueexqeexq+eztue6mu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ4XS5sZW5ndGg7ICsraikgaWYoRFsyNDhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ4XVtqXV0gPSA2MzQ4OCArIGo7IGRbNjM0ODggKyBqXSA9IERbMjQ4XVtqXTt9XG5EWzI0OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee6mOe6m+e6meiHoOiHoeiZhuiZh+iZiOilueiluuilvOilu+inv+iumOiumei6pei6pOi6o+mRrumRremRr+mRsemRs+mdiemhsumln+mxqOmxrumxrem4i+m4jem4kOm4j+m4kum4kem6oem7tem8iem9h+m9uOm9u+m9uum9ueWcnueBpuexr+igvOi2sui6pumHg+mRtOmRuOmRtumRtempoOmxtOmxs+mxsemxtem4lOm4k+m7tum8iu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vem+pOeBqOeBpeezt+iZquigvuigveigv+iunuiynOi6qei7iemdi+mhs+mhtOmjjOmloemmq+mppOmppumpp+mspOm4lem4l+m9iOaIh+asnueIp+iZjOi6qOmSgumSgOmSgempqempqOmsrum4meeIqeiZi+iun+mSg+mxuem6t+eZtempq+mxuum4neeBqeeBqum6pOm9vum9iem+mOeigemKueijj+Wiu+aBkueyp+WruuKVlOKVpuKVl+KVoOKVrOKVo+KVmuKVqeKVneKVkuKVpOKVleKVnuKVquKVoeKVmOKVp+KVm+KVk+KVpeKVluKVn+KVq+KVouKVmeKVqOKVnOKVkeKVkOKVreKVruKVsOKVr+KWk++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ5XS5sZW5ndGg7ICsraikgaWYoRFsyNDldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ5XVtqXV0gPSA2Mzc0NCArIGo7IGRbNjM3NDQgKyBqXSA9IERbMjQ5XVtqXTt9XG5yZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IGQgfTsgfSkoKTtcbmNwdGFibGVbMTI1MF0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f+KCrO+/veKAmu+/veKAnuKApuKAoOKAoe+/veKAsMWg4oC5xZrFpMW9xbnvv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLFoeKAusWbxaXFvsW6wqDLh8uYxYHCpMSEwqbCp8KowqnFnsKrwqzCrcKuxbvCsMKxy5vFgsK0wrXCtsK3wrjEhcWfwrvEvcudxL7FvMWUw4HDgsSCw4TEucSGw4fEjMOJxJjDi8Saw43DjsSOxJDFg8WHw5PDlMWQw5bDl8WYxa7DmsWww5zDncWiw5/FlcOhw6LEg8OkxLrEh8OnxI3DqcSZw6vEm8Otw67Ej8SRxYTFiMOzw7TFkcO2w7fFmcWvw7rFscO8w73Fo8uZXCIsIEQgPSBbXSwgZSA9IHt9OyBmb3IodmFyIGk9MDtpIT1kLmxlbmd0aDsrK2kpIHsgaWYoZC5jaGFyQ29kZUF0KGkpICE9PSAweEZGRkQpIGVbZC5jaGFyQXQoaSldID0gaTsgRFtpXSA9IGQuY2hhckF0KGkpOyB9IHJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogRCB9OyB9KSgpO1xuY3B0YWJsZVsxMjUxXSA9IChmdW5jdGlvbigpeyB2YXIgZCA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/0ILQg+KAmtGT4oCe4oCm4oCg4oCh4oKs4oCw0InigLnQitCM0IvQj9GS4oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi0ZnigLrRmtGc0ZvRn8Kg0I7RntCIwqTSkMKmwqfQgcKp0ITCq8Kswq3CrtCHwrDCsdCG0ZbSkcK1wrbCt9GR4oSW0ZTCu9GY0IXRldGX0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y9cIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzEyNTJdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/igqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFku+/vcW977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWT77+9xb7FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiLCBEID0gW10sIGUgPSB7fTsgZm9yKHZhciBpPTA7aSE9ZC5sZW5ndGg7KytpKSB7IGlmKGQuY2hhckNvZGVBdChpKSAhPT0gMHhGRkZEKSBlW2QuY2hhckF0KGkpXSA9IGk7IERbaV0gPSBkLmNoYXJBdChpKTsgfSByZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IEQgfTsgfSkoKTtcbmNwdGFibGVbMTI1M10gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f+KCrO+/veKAmsaS4oCe4oCm4oCg4oCh77+94oCw77+94oC577+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi77+94oC677+977+977+977+9wqDOhc6GwqPCpMKlwqbCp8Kowqnvv73Cq8Kswq3CruKAlcKwwrHCssKzzoTCtcK2wrfOiM6JzorCu86Mwr3Ojs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6h77+9zqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz43Pju+/vVwiLCBEID0gW10sIGUgPSB7fTsgZm9yKHZhciBpPTA7aSE9ZC5sZW5ndGg7KytpKSB7IGlmKGQuY2hhckNvZGVBdChpKSAhPT0gMHhGRkZEKSBlW2QuY2hhckF0KGkpXSA9IGk7IERbaV0gPSBkLmNoYXJBdChpKTsgfSByZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IEQgfTsgfSkoKTtcbmNwdGFibGVbMTI1NF0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f+KCrO+/veKAmsaS4oCe4oCm4oCg4oChy4bigLDFoOKAucWS77+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWT77+977+9xbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/EnsORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMSwxZ7Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvxJ/DscOyw7PDtMO1w7bDt8O4w7nDusO7w7zEscWfw79cIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzEyNTVdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/igqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCw77+94oC577+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLvv73igLrvv73vv73vv73vv73CoMKhwqLCo+KCqsKlwqbCp8KowqnDl8KrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucO3wrvCvMK9wr7Cv9aw1rHWstaz1rTWtda21rfWuNa577+91rvWvNa91r7Wv9eA14HXgteD17DXsdey17PXtO+/ve+/ve+/ve+/ve+/ve+/ve+/vdeQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqu+/ve+/veKAjuKAj++/vVwiLCBEID0gW10sIGUgPSB7fTsgZm9yKHZhciBpPTA7aSE9ZC5sZW5ndGg7KytpKSB7IGlmKGQuY2hhckNvZGVBdChpKSAhPT0gMHhGRkZEKSBlW2QuY2hhckF0KGkpXSA9IGk7IERbaV0gPSBkLmNoYXJBdChpKTsgfSByZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IEQgfTsgfSkoKTtcbmNwdGFibGVbMTI1Nl0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f+KCrNm+4oCaxpLigJ7igKbigKDigKHLhuKAsNm54oC5xZLahtqY2ojar+KAmOKAmeKAnOKAneKAouKAk+KAlNqp4oSi2pHigLrFk+KAjOKAjdq6wqDYjMKiwqPCpMKlwqbCp8KowqnavsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCudibwrvCvMK9wr7Yn9uB2KHYotij2KTYpdim2KfYqNip2KrYq9is2K3Yrtiv2LDYsdiy2LPYtNi12LbDl9i32LjYudi62YDZgdmC2YPDoNmEw6LZhdmG2YfZiMOnw6jDqcOqw6vZidmKw67Dr9mL2YzZjdmOw7TZj9mQw7fZkcO52ZLDu8O84oCO4oCP25JcIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzEyNTddID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/igqzvv73igJrvv73igJ7igKbigKDigKHvv73igLDvv73igLnvv73CqMuHwrjvv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLvv73igLrvv73Cr8ub77+9wqDvv73CosKjwqTvv73CpsKnw5jCqcWWwqvCrMKtwq7DhsKwwrHCssKzwrTCtcK2wrfDuMK5xZfCu8K8wr3CvsOmxITErsSAxIbDhMOFxJjEksSMw4nFucSWxKLEtsSqxLvFoMWDxYXDk8WMw5XDlsOXxbLFgcWaxarDnMW7xb3Dn8SFxK/EgcSHw6TDpcSZxJPEjcOpxbrEl8SjxLfEq8S8xaHFhMWGw7PFjcO1w7bDt8WzxYLFm8Wrw7zFvMW+y5lcIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzEyNThdID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/igqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCw77+94oC5xZLvv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTLnOKEou+/veKAusWT77+977+9xbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCxILDhMOFw4bDh8OIw4nDisOLzIDDjcOOw4/EkMORzInDk8OUxqDDlsOXw5jDmcOaw5vDnMavzIPDn8Ogw6HDosSDw6TDpcOmw6fDqMOpw6rDq8yBw63DrsOvxJHDscyjw7PDtMahw7bDt8O4w7nDusO7w7zGsOKCq8O/XCIsIEQgPSBbXSwgZSA9IHt9OyBmb3IodmFyIGk9MDtpIT1kLmxlbmd0aDsrK2kpIHsgaWYoZC5jaGFyQ29kZUF0KGkpICE9PSAweEZGRkQpIGVbZC5jaGFyQXQoaSldID0gaTsgRFtpXSA9IGQuY2hhckF0KGkpOyB9IHJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogRCB9OyB9KSgpO1xuY3B0YWJsZVsxMDAwMF0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8OEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzEwMDA2XSA9IChmdW5jdGlvbigpeyB2YXIgZCA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/w4TCucKyw4nCs8OWw5zOhcOgw6LDpM6EwqjDp8Opw6jDqsOrwqPihKLDrsOv4oCiwr3igLDDtMO2wqbCrcO5w7vDvOKAoM6TzpTOmM6bzp7OoMOfwq7Cqc6jzqrCp+KJoMKwzofOkcKx4omk4omlwqXOks6VzpbOl86ZzprOnM6mzqvOqM6pzqzOncKszp/OoeKJiM6kwqvCu+KApsKgzqXOp86GzojFk+KAk+KAleKAnOKAneKAmOKAmcO3zonOis6Mzo7Orc6uzq/PjM6Pz43Osc6yz4jOtM61z4bOs863zrnOvs66zrvOvM69zr/PgM+Oz4HPg8+EzrjPic+Cz4fPhc62z4rPi86QzrDvv71cIiwgRCA9IFtdLCBlID0ge307IGZvcih2YXIgaT0wO2khPWQubGVuZ3RoOysraSkgeyBpZihkLmNoYXJDb2RlQXQoaSkgIT09IDB4RkZGRCkgZVtkLmNoYXJBdChpKV0gPSBpOyBEW2ldID0gZC5jaGFyQXQoaSk7IH0gcmV0dXJuIHtcImVuY1wiOiBlLCBcImRlY1wiOiBEIH07IH0pKCk7XG5jcHRhYmxlWzEwMDA3XSA9IChmdW5jdGlvbigpeyB2YXIgZCA9IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr+KAoMKwwqLCo8Kn4oCiwrbQhsKuwqnihKLQgtGS4omg0IPRk+KInsKx4omk4oml0ZbCteKIgtCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjsKkXCIsIEQgPSBbXSwgZSA9IHt9OyBmb3IodmFyIGk9MDtpIT1kLmxlbmd0aDsrK2kpIHsgaWYoZC5jaGFyQ29kZUF0KGkpICE9PSAweEZGRkQpIGVbZC5jaGFyQXQoaSldID0gaTsgRFtpXSA9IGQuY2hhckF0KGkpOyB9IHJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogRCB9OyB9KSgpO1xuY3B0YWJsZVsxMDAwOF0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBbXSwgZSA9IHt9LCBEID0gW10sIGo7XG5EWzBdID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/CgO+jmO+jme+jmu+jm++jnO+jne+jnu+jn++joO+joe+jou+jo++jpO+jpe+jpu+jp++jqO+jqe+jqu+jq++jrO+jre+jru+jr++jsO+jse+jsu+js++jtO+jte+jtu+jt++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+juO+jue+juu+ju++jvO+jve+jvu+jv1wiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMF0ubGVuZ3RoOyArK2opIGlmKERbMF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFswXVtqXV0gPSAwICsgajsgZFswICsgal0gPSBEWzBdW2pdO31cbkRbMTYxXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+944CA44CB44CC44O7y4nLh8Ko44CD44CF4oCV772e77+94oCm4oCY4oCZ4oCc4oCd44CU44CV44CI44CJ44CK44CL44CM44CN44CO44CP44CW44CX44CQ44CRwrHDl8O34oi24oin4oio4oiR4oiP4oiq4oip4oiI4oi34oia4oql4oil4oig4oyS4oqZ4oir4oiu4omh4omM4omI4oi94oid4omg4omu4omv4omk4oml4oie4oi14oi04pmC4pmAwrDigLLigLPihIPvvITCpO+/oO+/oeKAsMKn4oSW4piG4piF4peL4peP4peO4peH4peG4pah4pag4paz4pay4oC74oaS4oaQ4oaR4oaT44CT77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjFdLmxlbmd0aDsgKytqKSBpZihEWzE2MV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjFdW2pdXSA9IDQxMjE2ICsgajsgZFs0MTIxNiArIGpdID0gRFsxNjFdW2pdO31cbkRbMTYyXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94pKI4pKJ4pKK4pKL4pKM4pKN4pKO4pKP4pKQ4pKR4pKS4pKT4pKU4pKV4pKW4pKX4pKY4pKZ4pKa4pKb4pG04pG14pG24pG34pG44pG54pG64pG74pG84pG94pG+4pG/4pKA4pKB4pKC4pKD4pKE4pKF4pKG4pKH4pGg4pGh4pGi4pGj4pGk4pGl4pGm4pGn4pGo4pGp77+977+944ig44ih44ii44ij44ik44il44im44in44io44ip77+977+94oWg4oWh4oWi4oWj4oWk4oWl4oWm4oWn4oWo4oWp4oWq4oWr77+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjJdLmxlbmd0aDsgKytqKSBpZihEWzE2Ml1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjJdW2pdXSA9IDQxNDcyICsgajsgZFs0MTQ3MiArIGpdID0gRFsxNjJdW2pdO31cbkRbMTYzXSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977yB77yC77yD77+l77yF77yG77yH77yI77yJ77yK77yL77yM77yN77yO77yP77yQ77yR77yS77yT77yU77yV77yW77yX77yY77yZ77ya77yb77yc77yd77ye77yf77yg77yh77yi77yj77yk77yl77ym77yn77yo77yp77yq77yr77ys77yt77yu77yv77yw77yx77yy77yz77y077y177y277y377y477y577y677y777y877y977y+77y/772A772B772C772D772E772F772G772H772I772J772K772L772M772N772O772P772Q772R772S772T772U772V772W772X772Y772Z772a772b772c772d77+j77+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjNdLmxlbmd0aDsgKytqKSBpZihEWzE2M11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjNdW2pdXSA9IDQxNzI4ICsgajsgZFs0MTcyOCArIGpdID0gRFsxNjNdW2pdO31cbkRbMTY0XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+944GB44GC44GD44GE44GF44GG44GH44GI44GJ44GK44GL44GM44GN44GO44GP44GQ44GR44GS44GT44GU44GV44GW44GX44GY44GZ44Ga44Gb44Gc44Gd44Ge44Gf44Gg44Gh44Gi44Gj44Gk44Gl44Gm44Gn44Go44Gp44Gq44Gr44Gs44Gt44Gu44Gv44Gw44Gx44Gy44Gz44G044G144G244G344G444G544G644G744G844G944G+44G/44KA44KB44KC44KD44KE44KF44KG44KH44KI44KJ44KK44KL44KM44KN44KO44KP44KQ44KR44KS44KT77+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjRdLmxlbmd0aDsgKytqKSBpZihEWzE2NF1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjRdW2pdXSA9IDQxOTg0ICsgajsgZFs0MTk4NCArIGpdID0gRFsxNjRdW2pdO31cbkRbMTY1XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+944Kh44Ki44Kj44Kk44Kl44Km44Kn44Ko44Kp44Kq44Kr44Ks44Kt44Ku44Kv44Kw44Kx44Ky44Kz44K044K144K244K344K444K544K644K744K844K944K+44K/44OA44OB44OC44OD44OE44OF44OG44OH44OI44OJ44OK44OL44OM44ON44OO44OP44OQ44OR44OS44OT44OU44OV44OW44OX44OY44OZ44Oa44Ob44Oc44Od44Oe44Of44Og44Oh44Oi44Oj44Ok44Ol44Om44On44Oo44Op44Oq44Or44Os44Ot44Ou44Ov44Ow44Ox44Oy44Oz44O044O144O277+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjVdLmxlbmd0aDsgKytqKSBpZihEWzE2NV1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjVdW2pdXSA9IDQyMjQwICsgajsgZFs0MjI0MCArIGpdID0gRFsxNjVdW2pdO31cbkRbMTY2XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p77+977+977+977+977+977+977+977+9zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjZdLmxlbmd0aDsgKytqKSBpZihEWzE2Nl1bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjZdW2pdXSA9IDQyNDk2ICsgajsgZFs0MjQ5NiArIGpdID0gRFsxNjZdW2pdO31cbkRbMTY3XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+90JDQkdCS0JPQlNCV0IHQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+90LDQsdCy0LPQtNC10ZHQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP77+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCIuc3BsaXQoXCJcIik7XG5mb3IoaiA9IDA7IGogIT0gRFsxNjddLmxlbmd0aDsgKytqKSBpZihEWzE2N11bal0uY2hhckNvZGVBdCgwKSAhPT0gMHhGRkZEKSB7IGVbRFsxNjddW2pdXSA9IDQyNzUyICsgajsgZFs0Mjc1MiArIGpdID0gRFsxNjddW2pdO31cbkRbMTY4XSA9IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9xIHDoceOw6DEk8OpxJvDqMSrw63HkMOsxY3Ds8eSw7LFq8O6x5TDuceWx5jHmsecw7zDqu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veOEheOEhuOEh+OEiOOEieOEiuOEi+OEjOOEjeOEjuOEj+OEkOOEkeOEkuOEk+OElOOEleOEluOEl+OEmOOEmeOEmuOEm+OEnOOEneOEnuOEn+OEoOOEoeOEouOEo+OEpOOEpeOEpuOEp+OEqOOEqe+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY4XS5sZW5ndGg7ICsraikgaWYoRFsxNjhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY4XVtqXV0gPSA0MzAwOCArIGo7IGRbNDMwMDggKyBqXSA9IERbMTY4XVtqXTt9XG5EWzE2OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKUgOKUgeKUguKUg+KUhOKUheKUhuKUh+KUiOKUieKUiuKUi+KUjOKUjeKUjuKUj+KUkOKUkeKUkuKUk+KUlOKUleKUluKUl+KUmOKUmeKUmuKUm+KUnOKUneKUnuKUn+KUoOKUoeKUouKUo+KUpOKUpeKUpuKUp+KUqOKUqeKUquKUq+KUrOKUreKUruKUr+KUsOKUseKUsuKUs+KUtOKUteKUtuKUt+KUuOKUueKUuuKUu+KUvOKUveKUvuKUv+KVgOKVgeKVguKVg+KVhOKVheKVhuKVh+KViOKVieKViuKVi++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTY5XS5sZW5ndGg7ICsraikgaWYoRFsxNjldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTY5XVtqXV0gPSA0MzI2NCArIGo7IGRbNDMyNjQgKyBqXSA9IERbMTY5XVtqXTt9XG5EWzE3Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWViumYv+Wfg+aMqOWTjuWUieWTgOeakeeZjOiUvOefruiJvueijeeIsemamOmejeawqOWuieS/uuaMieaal+WyuOiDuuahiOiCruaYguebjuWHueaVlueGrOe/seiihOWCsuWlpeaHiua+s+iKreaNjOaJkuWPreWQp+eshuWFq+eWpOW3tOaLlOi3i+mdtuaKiuiAmeWdnemcuOe9oueIuOeZveafj+eZvuaRhuS9sOi0peaLnOeol+aWkeePreaQrOaJs+iIrOmigeadv+eJiOaJruaLjOS8tOeTo+WNiuWKnue7iumCpuW4ruaihuamnOiGgOe7keajkuejheiajOmVkeWCjeiwpOiLnuiDnuWMheikkuWJpe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc2XS5sZW5ndGg7ICsraikgaWYoRFsxNzZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc2XVtqXV0gPSA0NTA1NiArIGo7IGRbNDUwNTYgKyBqXSA9IERbMTc2XVtqXTt9XG5EWzE3N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiWhOmbueS/neWgoemlseWuneaKseaKpeaatOixuemyjeeIhuadr+eikeaCsuWNkeWMl+i+iOiDjOi0nemSoeWAjeeLiOWkh+aDq+eEmeiiq+WllOiLr+acrOesqOW0qee7t+eUreaztei5pui/uOmAvOm8u+avlOmEmeeslOW9vOeip+iTluiUveavleavmeavluW4geW6h+eXuemXreaVneW8iuW/hei+n+WjgeiHgumBv+mZm+merei+uee8lui0rOaJgeS+v+WPmOWNnui+qOi+qei+q+mBjeagh+W9quiGmOihqOmzluaGi+WIq+eYquW9rOaWjOa/kua7qOWuvuaRiOWFteWGsOafhOS4meeniemlvOeCs++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc3XS5sZW5ndGg7ICsraikgaWYoRFsxNzddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc3XVtqXV0gPSA0NTMxMiArIGo7IGRbNDUzMTIgKyBqXSA9IERbMTc3XVtqXTt9XG5EWzE3OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeXheW5tueOu+iPoOaSreaLqOmSteazouWNmuWLg+aQj+mTgueulOS8r+W4m+iItuiEluiGiua4pOaziumps+aNleWNnOWTuuihpeWfoOS4jeW4g+atpeewv+mDqOaAluaTpueMnOijgeadkOaJjei0ouedrOi4qemHh+W9qeiPnOiUoemkkOWPguialeaui+aDreaDqOeBv+iLjeiIseS7k+ayp+iXj+aTjeezmeanveabueiNieWOleetluS+p+WGjOa1i+Wxgui5reaPkuWPieiMrOiMtuafpeeitOaQveWvn+WylOW3ruivp+aLhuaftOixuuaQgOaOuuidiemmi+iwl+e8oOmTsuS6p+mYkOmipOaYjOeMlu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc4XS5sZW5ndGg7ICsraikgaWYoRFsxNzhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc4XVtqXV0gPSA0NTU2OCArIGo7IGRbNDU1NjggKyBqXSA9IERbMTc4XVtqXTt9XG5EWzE3OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWcuuWwneW4uOmVv+WBv+iCoOWOguaVnueVheWUseWAoei2heaKhOmSnuacneWYsua9ruW3ouWQteeCkui9puaJr+aSpOaOo+W9u+a+iOmDtOiHo+i+sOWwmOaZqOW/seayiemZiOi2geihrOaSkeensOWfjuapmeaIkOWRiOS5mOeoi+aDqea+hOivmuaJv+mAnumqi+enpOWQg+eXtOaMgeWMmeaxoOi/n+W8m+mpsOiAu+m9v+S+iOWwuui1pOe/heaWpeeCveWFheWGsuiZq+W0h+WuoOaKvemFrOeVtOi4jOeooOaEgeetueS7h+e7uOeeheS4keiHreWIneWHuuapseWOqOi6h+mUhOmbj+a7gemZpOalmu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTc5XS5sZW5ndGg7ICsraikgaWYoRFsxNzldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTc5XVtqXV0gPSA0NTgyNCArIGo7IGRbNDU4MjQgKyBqXSA9IERbMTc5XVtqXTt9XG5EWzE4MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veehgOWCqOefl+aQkOinpuWkhOaPo+W3neepv+akveS8oOiIueWWmOS4sueWrueql+W5ouW6iumXr+WIm+WQueeCiuaNtumUpOWeguaYpeakv+mGh+WUh+a3s+e6r+igouaIs+e7sOeWteiMqOejgembjOi+nuaFiOeTt+ivjeatpOWIuui1kOasoeiBquiRseWbseWMhuS7juS4m+WHkeeyl+mGi+ewh+S/g+i5v+evoeeqnOaRp+W0lOWCrOiEhueYgeeyuea3rOe/oOadkeWtmOWvuOeji+aSruaQk+aOquaMq+mUmeaQrei+vuetlOeYqeaJk+Wkp+WRhuatueWCo+aItOW4puauhuS7o+i0t+iii+W+hemAru+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgwXS5sZW5ndGg7ICsraikgaWYoRFsxODBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgwXVtqXV0gPSA0NjA4MCArIGo7IGRbNDYwODAgKyBqXSA9IERbMTgwXVtqXTt9XG5EWzE4MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaAoOiAveaLheS4ueWNlemDuOaOuOiDhuaXpuawruS9huaDrua3oeivnuW8ueibi+W9k+aMoeWFmuiNoeaho+WIgOaNo+i5iOWAkuWym+elt+WvvOWIsOeou+aCvOmBk+ebl+W+t+W+l+eahOi5rOeBr+eZu+etieeequWHs+mCk+WgpOS9jua7tOi/quaVjOesm+eLhOa2pOe/n+WroeaKteW6leWcsOiSguesrOW4neW8n+mAkue8lOmioOaOgua7h+eimOeCueWFuOmdm+Weq+eUteS9g+eUuOW6l+aDpuWloOa3gOauv+eiieWPvOmbleWHi+WIgeaOieWQiumSk+iwg+i3jOeIueein+idtui/reiwjeWPoO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgxXS5sZW5ndGg7ICsraikgaWYoRFsxODFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgxXVtqXV0gPSA0NjMzNiArIGo7IGRbNDYzMzYgKyBqXSA9IERbMTgxXVtqXTt9XG5EWzE4Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS4geebr+WPrumSiemhtum8jumUreWumuiuouS4ouS4nOWGrOiRo+aHguWKqOagi+S+l+aBq+WGu+a0nuWFnOaKluaWl+mZoeixhumAl+eXmOmDveedo+avkueKiueLrOivu+Wgteeduei1jOadnOmVgOiCmuW6pua4oeWmkuerr+efremUu+auteaWree8juWghuWFkemYn+WvueWiqeWQqOi5suaVpumhv+WbpOmSneebvumBgeaOh+WThuWkmuWkuuWem+i6suactei3uuiIteWJgeaDsOWgleibvuWzqOm5heS/hOmineiuueWopeaBtuWOhOaJvOmBj+mEgumlv+aBqeiAjOWEv+iAs+WwlOmltea0seS6jO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgyXS5sZW5ndGg7ICsraikgaWYoRFsxODJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgyXVtqXV0gPSA0NjU5MiArIGo7IGRbNDY1OTIgKyBqXSA9IERbMTgyXVtqXTt9XG5EWzE4M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei0sOWPkee9muetj+S8kOS5j+mYgOazleePkOiXqeW4hueVque/u+aoiuefvumSkue5geWHoeeDpuWPjei/lOiMg+i0qeeKr+mlreazm+WdiuiKs+aWueiCquaIv+mYsuWmqOS7v+iuv+e6uuaUvuiPsumdnuWVoemjnuiCpeWMquivveWQoOiCuuW6n+ayuOi0ueiKrOmFmuWQqeawm+WIhue6t+Wdn+eEmuaxvueyieWli+S7veW/v+aEpOeyquS4sOWwgeaeq+icguWzsOmUi+mjjueWr+eDvemAouWGr+e8neiuveWlieWHpOS9m+WQpuWkq+aVt+iCpOWtteaJtuaLgui+kOW5heawn+espuS8j+S/mOacje+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTgzXS5sZW5ndGg7ICsraikgaWYoRFsxODNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTgzXVtqXV0gPSA0Njg0OCArIGo7IGRbNDY4NDggKyBqXSA9IERbMTgzXVtqXTt9XG5EWzE4NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea1rua2quemj+iiseW8l+eUq+aKmui+heS/r+mHnOaWp+iEr+iFkeW6nOiFkOi1tOWJr+imhui1i+WkjeWCheS7mOmYnOeItuiFuei0n+WvjOiuo+mZhOWmh+e8muWSkOWZtuWYjuivpeaUueamgumSmeeblua6ieW5sueUmOadhuafkeerv+iCnei1tuaEn+enhuaVoui1o+WGiOWImumSoue8uOiCm+e6suWyl+a4r+adoOevmeeai+mrmOiGj+e+lOezleaQnumVkOeov+WRiuWTpeatjOaQgeaIiOm4veiDs+eWmeWJsumdqeiRm+agvOibpOmYgemalOmTrOS4quWQhOe7meaguei3n+iAleabtOW6mue+ue+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg0XS5sZW5ndGg7ICsraikgaWYoRFsxODRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg0XVtqXV0gPSA0NzEwNCArIGo7IGRbNDcxMDQgKyBqXSA9IERbMTg0XVtqXTt9XG5EWzE4NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWfguiAv+ail+W3peaUu+WKn+aBrem+muS+m+i6rOWFrOWuq+W8k+W3qeaxnuaLsei0oeWFsemSqeWLvuayn+iLn+eLl+WeouaehOi0reWkn+i+nOiPh+WSleeujeS8sOayveWtpOWnkem8k+WPpOibiumqqOiwt+iCoeaVhemhvuWbuumbh+WIrueTnOWJkOWvoeaMguikguS5luaLkOaAquajuuWFs+WumOWGoOingueuoemmhue9kOaDr+eBjOi0r+WFieW5v+mAm+eRsOinhOWcreehheW9kum+n+mXuui9qOmsvOivoeeZuOahguafnOi3qui0teWIvei+iua7muajjemUhemDreWbveaenOijuei/h+WTiO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg1XS5sZW5ndGg7ICsraikgaWYoRFsxODVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg1XVtqXV0gPSA0NzM2MCArIGo7IGRbNDczNjAgKyBqXSA9IERbMTg1XVtqXTt9XG5EWzE4Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemquOWtqea1t+awpuS6peWus+mqh+mFo+aGqOmCr+mfqeWQq+a2teWvkuWHveWWiue9lee/sOaSvOaNjeaXseaGvuaCjeeEiuaxl+axieWkr+adreiIquWjleWajuixquavq+mDneWlveiAl+WPt+a1qeWRteWWneiNt+iPj+aguOemvuWSjOS9leWQiOebkuiyiemYguays+a2uOi1q+ikkOm5pOi0uuWYv+m7keeXleW+iOeLoOaBqOWTvOS6qOaoquihoeaBkui9sOWThOeDmOiZuem4v+a0quWuj+W8mOe6ouWWieS+r+eMtOWQvOWOmuWAmeWQjuWRvOS5juW/veeRmuWjtuiRq+iDoeidtOeLkOeziua5lu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg2XS5sZW5ndGg7ICsraikgaWYoRFsxODZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg2XVtqXV0gPSA0NzYxNiArIGo7IGRbNDc2MTYgKyBqXSA9IERbMTg2XVtqXTt9XG5EWzE4N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veW8p+iZjuWUrOaKpOS6kuayquaIt+iKseWTl+WNjueMvua7keeUu+WIkuWMluivneankOW+iuaAgOa3ruWdj+asoueOr+ahk+i/mOe8k+aNouaCo+WUpOeXquixoueElea2o+WupuW5u+iNkuaFjOm7hOejuuidl+ewp+eah+WHsOaDtueFjOaZg+W5jOaBjeiwjueBsOaMpei+ieW+veaBouiblOWbnuavgeaClOaFp+WNieaDoOaZpui0v+enveS8mueDqeaxh+ius+ivsue7mOiNpOaYj+Wpmumtgua1kea3t+ixgea0u+S8meeBq+iOt+aIluaDkemcjei0p+eluOWHu+WcvuWfuuacuueVuOeoveenr+eule+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg3XS5sZW5ndGg7ICsraikgaWYoRFsxODddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg3XVtqXV0gPSA0Nzg3MiArIGo7IGRbNDc4NzIgKyBqXSA9IERbMTg3XVtqXTt9XG5EWzE4OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiCjOmlpei/uea/gOiupem4oeWnrOe7qee8ieWQieaegeajmOi+keexjembhuWPiuaApeeWvuaxsuWNs+Wriee6p+aMpOWHoOiEiuW3seiTn+aKgOWGgOWto+S8juelreWJguaCuOa1juWvhOWvguiuoeiusOaXouW/jOmZheWmk+e7p+e6quWYieaet+WkueS9s+WutuWKoOiNmumiiui0vueUsumSvuWBh+eovOS7t+aetumpvuWrgeatvOebkeWdmuWwluesuumXtOeFjuWFvOiCqeiJsOWluOe8hOiMp+ajgOafrOeiseeht+aLo+aNoeeugOS/reWJquWHj+iNkOanm+mJtOi3tei0seingemUrueureS7tu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg4XS5sZW5ndGg7ICsraikgaWYoRFsxODhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg4XVtqXV0gPSA0ODEyOCArIGo7IGRbNDgxMjggKyBqXSA9IERbMTg4XVtqXTt9XG5EWzE4OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWBpeiIsOWJkemlr+a4kOa6hea2p+W7uuWDteWnnOWwhua1huaxn+eWhuiSi+ahqOWlluiusuWMoOmFsemZjeiVieakkuekgeeEpuiDtuS6pOmDiua1h+mqhOWoh+WavOaQhemTsOefq+S+peiEmueLoeinkumluue8tOe7nuWJv+aVmemFtei9v+i+g+WPq+eqluaPreaOpeeahuenuOihl+mYtuaIquWKq+iKguahlOadsOaNt+edq+errea0gee7k+ino+WnkOaIkuiXieiKpeeVjOWAn+S7i+eWpeivq+WxiuW3vueti+aWpOmHkeS7iua0peiln+e0p+mUpuS7heiwqOi/m+mds+aZi+emgei/keeDrOa1uO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTg5XS5sZW5ndGg7ICsraikgaWYoRFsxODldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTg5XVtqXV0gPSA0ODM4NCArIGo7IGRbNDgzODQgKyBqXSA9IERbMTg5XVtqXTt9XG5EWzE5MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWwveWKsuiNhuWFouiMjuedm+aZtumyuOS6rOaDiueyvueys+e7j+S6leitpuaZr+miiOmdmeWig+aVrOmVnOW+hOeXiemdluern+ernuWHgOeCr+eqmOaPqueptue6oOeOlumfreS5heeBuOS5nemFkuWOqeaVkeaXp+iHvOiIheWSjuWwseeWmumeoOaLmOeLmeeWveWxhempueiPiuWxgOWSgOefqeS4vuayruiBmuaLkuaNruW3qOWFt+i3nei4numUr+S/seWPpeaDp+eCrOWJp+aNkOm5g+Won+WApuect+WNt+e7ouaSheaUq+aKieaOmOWAlOeIteinieWGs+ivgOe7neWdh+iPjOmSp+WGm+WQm+Wzu++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkwXS5sZW5ndGg7ICsraikgaWYoRFsxOTBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkwXVtqXV0gPSA0ODY0MCArIGo7IGRbNDg2NDAgKyBqXSA9IERbMTkwXVtqXTt9XG5EWzE5MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS/iuero+a1mumDoemqj+WWgOWSluWNoeWSr+W8gOaPqealt+WHr+aFqOWIiuWgquWLmOWdjuegjeeci+W6t+aFt+ezoOaJm+aKl+S6oueCleiAg+aLt+eDpOmdoOWdt+iLm+afr+ajteejlemil+enkeWjs+WSs+WPr+a4tOWFi+WIu+WuouivvuiCr+WVg+WepuaBs+WdkeWQreepuuaBkOWtlOaOp+aKoOWPo+aJo+Wvh+aer+WTreeqn+iLpumFt+W6k+ijpOWkuOWeruaMjui3qOiDr+Wdl+ett+S+qeW/q+WuveasvuWMoeetkOeLguahhuefv+ectuaXt+WGteS6j+eblOWyv+eqpeiRteWljumtgeWCgO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkxXS5sZW5ndGg7ICsraikgaWYoRFsxOTFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkxXVtqXV0gPSA0ODg5NiArIGo7IGRbNDg4OTYgKyBqXSA9IERbMTkxXVtqXTt9XG5EWzE5Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemmiOaEp+a6g+WdpOaYhuaNhuWbsOaLrOaJqeW7k+mYlOWeg+aLieWWh+icoeiFiui+o+WVpuiOseadpei1luiTneWpquagj+aLpuevrumYkeWFsOa+nOiwsOaPveiniOaHkue8hueDgua7peeQheamlOeLvOW7iumDjuacl+a1quaNnuWKs+eJouiAgeS9rOWnpemFqueDmea2neWLkuS5kOmbt+mVreiVvuejiue0r+WEoeWekuaTguiCi+exu+azquajsealnuWGt+WOmOaiqOeKgem7juevseeLuOemu+a8k+eQhuadjumHjOmypOekvOiOieiNlOWQj+agl+S4veWOieWKseegvuWOhuWIqeWCiOS+i+S/kO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkyXS5sZW5ndGg7ICsraikgaWYoRFsxOTJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkyXVtqXV0gPSA0OTE1MiArIGo7IGRbNDkxNTIgKyBqXSA9IERbMTkyXVtqXTt9XG5EWzE5M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeXoueri+eykuaypematuWKm+eSg+WTqeS/qeiBlOiOsui/numVsOW7ieaAnOa2n+W4mOaVm+iEuOmTvuaBi+eCvOe7g+eyruWHieaigeeyseiJr+S4pOi+humHj+aZvuS6ruiwheaSqeiBiuWDmueWl+eHjuWvpei+vea9puS6huaSgumVo+W7luaWmeWIl+ijgueDiOWKo+eMjueQs+ael+ejt+mcluS4tOmCu+mznua3i+WHm+i1geWQneaLjueOsuiPsembtum+hOmTg+S8tue+muWHjOeBtemZteWyremihuWPpuS7pOa6nOeQieamtOehq+mmj+eVmeWImOeYpOa1geafs+WFrem+meiBi+WSmeesvOeqv++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTkzXS5sZW5ndGg7ICsraikgaWYoRFsxOTNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTkzXVtqXV0gPSA0OTQwOCArIGo7IGRbNDk0MDggKyBqXSA9IERbMTkzXVtqXTt9XG5EWzE5NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemahuWehOaLoumZh+alvOWohOaQguevk+a8j+mZi+iKpuWNoumiheW6kOeCieaOs+WNpOiZj+mygem6k+eijOmcsui3r+i1gum5v+a9nuemhOW9lemZhuaIrumptOWQlemTneS+o+aXheWxpeWxoee8leiZkeawr+W+i+eOh+a7pOe7v+WzpuaMm+Wtqua7puWNteS5seaOoOeVpeaKoei9ruS8puS7keaypue6tuiuuuiQneieuue9l+mAu+mUo+euqemqoeijuOiQvea0m+mqhue7nOWmiOm6u+eOm+eggeiagumprOmqguWYm+WQl+Wfi+S5sOm6puWNlui/iOiEieeekummkuibrua7oeiUk+abvOaFoua8q++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk0XS5sZW5ndGg7ICsraikgaWYoRFsxOTRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk0XVtqXV0gPSA0OTY2NCArIGo7IGRbNDk2NjQgKyBqXSA9IERbMTk0XVtqXTt9XG5EWzE5NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiwqeiKkuiMq+ebsuawk+W/meiOveeMq+iMhemUmuavm+efm+mThuWNr+iMguWGkuW4veiyjOi0uOS5iOeOq+aemuaihemFtumcieeFpOayoeecieWqkumVgeavj+e+juaYp+WvkOWmueWqmumXqOmXt+S7rOiQjOiSmeaqrOebn+mUsOeMm+aipuWtn+ecr+mGmumdoeeznOi/t+iwnOW8peexs+enmOinheazjOicnOWvhuW5guajieecoOe7teWGleWFjeWLieWoqee8hemdouiLl+aPj+eehOiXkOenkua4uuW6meWmmeiUkeeBreawkeaKv+eav+aVj+aCr+mXveaYjuien+m4o+mTreWQjeWRveiwrOaRuO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk1XS5sZW5ndGg7ICsraikgaWYoRFsxOTVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk1XVtqXV0gPSA0OTkyMCArIGo7IGRbNDk5MjAgKyBqXSA9IERbMTk1XVtqXTt9XG5EWzE5Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaRueiYkeaooeiGnOejqOaRqemtlOaKueacq+iOq+WiqOm7mOayq+a8oOWvnumZjOiwi+eJn+afkOaLh+eJoeS6qeWnhuavjeWik+aaruW5leWLn+aFleacqOebruedpueJp+ephuaLv+WTquWRkOmSoOmCo+WonOe6s+awluS5g+WltuiAkOWliOWNl+eUt+mavuWbiuaMoOiEkeaBvOmXuea3luWRoummgeWGheWrqeiDveWmrumck+WAquazpeWwvOaLn+S9oOWMv+iFu+mAhua6uuiUq+aLiOW5tOeivuaSteaNu+W/teWomOmFv+m4n+Wwv+aNj+iBguWtveWVrumViumVjea2heaCqOafoOeLnuWHneWuge+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk2XS5sZW5ndGg7ICsraikgaWYoRFsxOTZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk2XVtqXV0gPSA1MDE3NiArIGo7IGRbNTAxNzYgKyBqXSA9IERbMTk2XVtqXTt9XG5EWzE5N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaLp+aznueJm+aJremSrue6veiEk+a1k+WGnOW8hOWltOWKquaAkuWls+aaluiZkOeWn+aMquaHpuezr+ivuuWTpuasp+m4peautOiXleWRleWBtuaypOWVqui2tOeIrOW4leaAleeQtuaLjeaOkueJjOW+mOa5g+a0vuaUgOa9mOebmOejkOebvOeVlOWIpOWPm+S5k+W6nuaXgeiAquiDluaKm+WShuWIqOeCruiijei3keazoeWRuOiDmuWfueijtOi1lOmZqumFjeS9qeaym+WWt+ebhuegsOaKqOeDuea+juW9reiTrOajmuehvOevt+iGqOaci+m5j+aNp+eisOWdr+egkumcueaJueaKq+WKiOeQteavl++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk3XS5sZW5ndGg7ICsraikgaWYoRFsxOTddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk3XVtqXV0gPSA1MDQzMiArIGo7IGRbNTA0MzIgKyBqXSA9IERbMTk3XVtqXTt9XG5EWzE5OF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWVpOiEvueWsuearuWMueeXnuWDu+WxgeitrOevh+WBj+eJh+mql+mjmOa8gueTouelqOaSh+eepeaLvOmikei0q+WTgeiBmOS5kuWdquiLueiQjeW5s+WHreeTtuivhOWxj+WdoeazvOmih+WphuegtOmthOi/q+eyleWJluaJkemTuuS7huiOhuiRoeiPqeiSsuWflOactOWcg+aZrua1puiwseabneeAkeacn+asuuagluaImuWmu+S4g+WHhOa8huafkuayj+WFtuaji+Wlh+atp+eVpuW0juiEkOm9kOaXl+eliOelgemqkei1t+WyguS5nuS8geWQr+WlkeegjOWZqOawlOi/hOW8g+axveazo+iuq+aOkO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk4XS5sZW5ndGg7ICsraikgaWYoRFsxOThdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk4XVtqXV0gPSA1MDY4OCArIGo7IGRbNTA2ODggKyBqXSA9IERbMTk4XVtqXTt9XG5EWzE5OV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaBsOa0veeJteaJpumSjumTheWNg+i/geetvuS7n+iwpuS5vum7lOmSsemSs+WJjea9nOmBo+a1heiwtOWgkeW1jOasoOatieaequWRm+iFlOe+jOWimeiUt+W8uuaKouaph+mUueaVsuaChOahpeeep+S5lOS+qOW3p+memOaSrOe/mOWzreS/j+eqjeWIh+iMhOS4lOaAr+eqg+mSpuS+teS6suenpueQtOWLpOiKueaTkuemveWvneaygemdkui9u+awouWAvuWNv+a4heaTjuaZtOawsOaDhemht+ivt+W6hueQvOept+eni+S4mOmCseeQg+axguWbmumFi+azhei2i+WMuuibhuabsui6r+WxiOmpsea4oO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMTk5XS5sZW5ndGg7ICsraikgaWYoRFsxOTldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMTk5XVtqXV0gPSA1MDk0NCArIGo7IGRbNTA5NDQgKyBqXSA9IERbMTk5XVtqXTt9XG5EWzIwMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWPluWotum+i+i2o+WOu+WciOmip+adg+mGm+azieWFqOeXiuaLs+eKrOWIuOWKnee8uueClOeYuOWNtOm5iuamt+ehrumbgOijmee+pOeEtueHg+WGieafk+eTpOWjpOaUmOWat+iuqemltuaJsOe7leaDueeDreWjrOS7geS6uuW/jemfp+S7u+iupOWIg+Wmiue6q+aJlOS7jeaXpeaIjuiMuOiTieiNo+iejeeGlOa6tuWuuee7kuWGl+aPieaflOiCieiMueigleWEkuWtuuWmgui+seS5s+axneWFpeikpei9r+mYruiViueRnumUkOmXsOa2puiLpeW8seaSkua0kuiQqOiFrumzg+Whnui1m+S4ieWPge+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAwXS5sZW5ndGg7ICsraikgaWYoRFsyMDBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAwXVtqXV0gPSA1MTIwMCArIGo7IGRbNTEyMDAgKyBqXSA9IERbMjAwXVtqXTt9XG5EWzIwMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS8nuaVo+ahkeWXk+S4p+aQlOmqmuaJq+WrgueRn+iJsua2qeajruWDp+iOjuegguadgOWIueaymee6seWCu+WVpeeFnuetm+aZkuePiuiLq+adieWxseWIoOeFveihq+mXqumZleaThei1oeiGs+WWhOaxleaJh+e8ruWikuS8pOWVhui1j+aZjOS4iuWwmuijs+aiouaNjueojeeDp+iKjeWLuumftuWwkeWTqOmCtee7jeWloui1iuibh+iIjOiIjei1puaRhOWwhOaFkea2ieekvuiuvuegt+eUs+WRu+S8uOi6q+a3seWooOe7heelnuayiOWuoeWptueUmuiCvuaFjua4l+WjsOeUn+eUpeeJsuWNh+e7s++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAxXS5sZW5ndGg7ICsraikgaWYoRFsyMDFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAxXVtqXV0gPSA1MTQ1NiArIGo7IGRbNTE0NTYgKyBqXSA9IERbMjAxXVtqXTt9XG5EWzIwMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veecgeebm+WJqeiDnOWco+W4iOWkseeLruaWvea5v+ivl+WwuOiZseWNgeefs+aLvuaXtuS7gOmjn+iagOWunuivhuWPsuefouS9v+WxjumptuWni+W8j+ekuuWjq+S4luafv+S6i+aLreiqk+mAneWKv+aYr+WXnOWZrOmAguS7leS+jemHiumlsOawj+W4guaBg+WupOinhuivleaUtuaJi+mmluWuiOWvv+aOiOWUruWPl+eYpuWFveiUrOaeouais+auiuaKkui+k+WPlOiIkua3keeWj+S5pui1juWtsOeGn+iWr+aakeabmee9suicgOm7jem8oOWxnuacr+i/sOagkeadn+aIjeerluWiheW6tuaVsOa8se+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAyXS5sZW5ndGg7ICsraikgaWYoRFsyMDJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAyXVtqXV0gPSA1MTcxMiArIGo7IGRbNTE3MTIgKyBqXSA9IERbMjAyXVtqXTt9XG5EWzIwM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaBleWIt+iAjeaRlOihsOeUqeW4heagk+aLtOmcnOWPjOeIveiwgeawtOedoeeojuWQrueerOmhuuiInOivtOehleaclOeDgeaWr+aSleWYtuaAneengeWPuOS4neatu+iChuWvuuWXo+Wbm+S8uuS8vOmlsuW3s+advuiAuOaAgumigumAgeWui+iuvOivteaQnOiJmOaTnuWXveiLj+mFpeS/l+e0oOmAn+eyn+WDs+Whkea6r+Wuv+ivieiCg+mFuOiSnOeul+iZvemai+maj+e7pemrk+eijuWygeepl+mBgumap+eln+WtmeaNn+esi+iTkeaireWUhue8qeeQkOe0oumUgeaJgOWhjOS7luWug+WlueWhlO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjAzXS5sZW5ndGg7ICsraikgaWYoRFsyMDNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjAzXVtqXV0gPSA1MTk2OCArIGo7IGRbNTE5NjggKyBqXSA9IERbMjAzXVtqXTt9XG5EWzIwNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeNreaMnui5i+i4j+iDjuiLlOaKrOWPsOazsOmFnuWkquaAgeaxsOWdjeaRiui0queYq+a7qeWdm+aqgOeXsOa9reiwreiwiOWdpuavr+iikueis+aOouWPueeCreaxpOWhmOaQquWgguajoOiGm+WUkOezluWAmOi6uua3jOi2n+eDq+aOj+a2m+a7lOe7puiQhOahg+mAg+a3mOmZtuiuqOWll+eJueiXpOiFvueWvOiqiuair+WJlOi4oumUkeaPkOmimOi5hOWVvOS9k+abv+Waj+aDlea2leWJg+WxieWkqea3u+Whq+eUsOeUnOaBrOiIlOiFhuaMkeadoei/ouecuui3s+i0tOmTgeW4luWOheWQrOeDg++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA0XS5sZW5ndGg7ICsraikgaWYoRFsyMDRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA0XVtqXV0gPSA1MjIyNCArIGo7IGRbNTIyMjQgKyBqXSA9IERbMjA0XVtqXTt9XG5EWzIwNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaxgOW7t+WBnOS6reW6reaMuuiJh+mAmuahkOmFruees+WQjOmTnOW9pOerpeahtuaNheetkue7n+eXm+WBt+aKleWktOmAj+WHuOeng+eqgeWbvuW+kumAlOa2guWxoOWcn+WQkOWFlOa5jeWbouaOqOmik+iFv+icleikqumAgOWQnuWxr+iHgOaLluaJmOiEsem4temZgOmprumpvOakreWmpeaLk+WUvuaMluWTh+ibmea0vOWog+eTpuiinOatquWkluixjOW8r+a5vueOqemhveS4uOeDt+WujOeil+aMveaZmuealuaDi+Wum+WpieS4h+iFleaxqueOi+S6oeaeiee9keW+gOaXuuacm+W/mOWmhOWoge+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA1XS5sZW5ndGg7ICsraikgaWYoRFsyMDVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA1XVtqXV0gPSA1MjQ4MCArIGo7IGRbNTI0ODAgKyBqXSA9IERbMjA1XVtqXTt9XG5EWzIwNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veW3jeW+ruWNsemfpui/neahheWbtOWUr+aDn+S4uua9jee7tOiLh+iQjuWnlOS8n+S8quWwvue6rOacquiUmuWRs+eVj+iDg+WWgumtj+S9jea4reiwk+WwieaFsOWNq+eYn+a4qeiaiuaWh+mXu+e6ueWQu+eos+e0iumXruWXoee/geeTruaMneicl+a2oeeqneaIkeaWoeWNp+aPoeayg+W3q+WRnOmSqOS5jOaxoeivrOWxi+aXoOiKnOaip+WQvuWQtOavi+atpuS6lOaNguWNiOiInuS8jeS+ruWdnuaIiumbvuaZpOeJqeWLv+WKoeaCn+ivr+aYlOeGmeaekOilv+ehkuefveaZsOWYu+WQuOmUoeeJuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA2XS5sZW5ndGg7ICsraikgaWYoRFsyMDZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA2XVtqXV0gPSA1MjczNiArIGo7IGRbNTI3MzYgKyBqXSA9IERbMjA2XVtqXTt9XG5EWzIwN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeogOaBr+W4jOaCieiGneWkleaDnOeGhOeDr+a6quaxkOeKgOaqhOiireW4reS5oOWqs+WWnOmTo+a0l+ezu+mameaIj+e7hueejuiZvuWMo+mcnui+luaah+WzoeS+oOeLreS4i+WOpuWkj+WQk+aOgOmUqOWFiOS7memynOe6pOWSuOi0pOihlOiIt+mXsua2juW8puWrjOaYvumZqeeOsOeMruWOv+iFuummhee+oeWuqumZt+mZkOe6v+ebuOWOoumVtummmeeuseilhOa5mOS5oee/lOelpeivpuaDs+WTjeS6q+mhueW3t+apoeWDj+WQkeixoeiQp+ehnemchOWJiuWTruWao+mUgOa2iOWutea3huaZk++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA3XS5sZW5ndGg7ICsraikgaWYoRFsyMDddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA3XVtqXV0gPSA1Mjk5MiArIGo7IGRbNTI5OTIgKyBqXSA9IERbMjA3XVtqXTt9XG5EWzIwOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWwj+WtneagoeiCluWVuOeskeaViOallOS6m+ath+idjumei+WNj+aMn+aQuumCquaWnOiDgeiwkOWGmeaisOWNuOifueaHiOazhOazu+iwouWxkeiWquiKr+mUjOaso+i+m+aWsOW/u+W/g+S/oeihheaYn+iFpeeMqeaDuuWFtOWIkeWei+W9oumCouihjOmGkuW5uOadj+aAp+Wnk+WFhOWHtuiDuOWMiOaxuembhOeGiuS8keS/rue+nuacveWXhemUiOengOiilue7o+Win+aIjOmcgOiZmuWYmOmhu+W+kOiuuOiThOmFl+WPmeaXreW6j+eVnOaBpOe1ruWpv+e7que7rei9qeWWp+Wuo+aCrOaXi+eOhO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA4XS5sZW5ndGg7ICsraikgaWYoRFsyMDhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA4XVtqXV0gPSA1MzI0OCArIGo7IGRbNTMyNDggKyBqXSA9IERbMjA4XVtqXTt9XG5EWzIwOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemAieeZo+ecqee7mumdtOiWm+WtpueptOmbquihgOWLi+eGj+W+quaXrOivouWvu+mpr+W3oeauieaxm+iureiur+mAiui/heWOi+aKvOm4pum4reWRgOS4q+iKveeJmeianOW0luihmea2r+mbheWTkeS6muiutueEieWSvemYieeDn+a3ueebkOS4peeglOickuWyqeW7tuiogOminOmYjueCjuayv+WlhOaOqeecvOihjea8lOiJs+WgsOeHleWOjOegmumbgeWUgeW9pueEsOWutOiwmumqjOaug+Wkrum4r+enp+adqOaJrOS9r+eWoee+iua0i+mYs+awp+S7sOeXkuWFu+agt+a8vumCgOiFsOWmlueRtu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjA5XS5sZW5ndGg7ICsraikgaWYoRFsyMDldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjA5XVtqXV0gPSA1MzUwNCArIGo7IGRbNTM1MDQgKyBqXSA9IERbMjA5XVtqXTt9XG5EWzIxMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaRh+Wwp+mBpeeqkeiwo+WnmuWSrOiIgOiNr+imgeiAgOaksOWZjuiAtueIt+mHjuWGtuS5n+mhteaOluS4muWPtuabs+iFi+WknOa2suS4gOWjueWMu+aPlumTseS+neS8iuiho+mikOWkt+mBl+enu+S7quiDsOeWkeayguWunOWnqOW9neakheiageWAmuW3suS5meefo+S7peiJuuaKkeaYk+mCkeWxueS6v+W9ueiHhumAuOiChOeWq+S6puijlOaEj+avheW/huS5ieebiua6ouivo+iuruiwiuivkeW8gue/vOe/jOe7juiMteiNq+WboOaut+mfs+mYtOWnu+WQn+mTtua3q+WvhemlruWwueW8lemakO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEwXS5sZW5ndGg7ICsraikgaWYoRFsyMTBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEwXVtqXV0gPSA1Mzc2MCArIGo7IGRbNTM3NjAgKyBqXSA9IERbMjEwXVtqXTt9XG5EWzIxMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWNsOiLseaoseWptOm5sOW6lOe8qOiOueiQpOiQpeiNp+idh+i/jui1ouebiOW9semiluehrOaYoOWTn+aLpeS9o+iHg+eXiOW6uOmbjei4iuibueWSj+azs+a2jOawuOaBv+WLh+eUqOW5veS8mOaCoOW/p+WwpOeUsemCrumTgOeKueayuea4uOmFieacieWPi+WPs+S9kemHieivseWPiOW5vOi/gua3pOS6juebguamhuiZnuaEmuiIhuS9meS/numAvumxvOaEiea4nea4lOmaheS6iOWosembqOS4juWxv+emueWuh+ivree+veeOieWfn+iKi+mDgeWQgemBh+WWu+WzquW+oeaEiOassueLseiCsuiqie+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjExXS5sZW5ndGg7ICsraikgaWYoRFsyMTFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjExXVtqXV0gPSA1NDAxNiArIGo7IGRbNTQwMTYgKyBqXSA9IERbMjExXVtqXTt9XG5EWzIxMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea1tOWvk+ijlemihOixq+mprem4s+a4iuWGpOWFg+Weo+iigeWOn+aPtOi+leWbreWRmOWchueMv+a6kOe8mOi/nOiLkeaEv+aAqOmZouabsOe6pui2iui3g+mSpeWys+eypOaciOaCpumYheiAmOS6kemDp+WMgOmZqOWFgei/kOiVtOmFneaZlemfteWtleWMneeguOadguagveWTieeBvuWusOi9veWGjeWcqOWSseaUkuaagui1nui1g+iEj+iRrOmBreezn+WHv+iXu+aeo+aXqea+oeiapOi6geWZqumAoOeagueBtueHpei0o+aLqeWImeazvei0vOaAjuWinuaGjuabvui1oOaJjuWWs+a4o+acrei9p++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEyXS5sZW5ndGg7ICsraikgaWYoRFsyMTJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEyXVtqXV0gPSA1NDI3MiArIGo7IGRbNTQyNzIgKyBqXSA9IERbMjEyXVtqXTt9XG5EWzIxM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemToemXuOecqOagheamqOWSi+S5jeeCuOiviOaRmOaWi+WuheeqhOWAuuWvqOeeu+avoeipueeymOayvuebj+aWqei+l+W0reWxleiYuOagiOWNoOaImOermea5m+e7veaon+eroOW9sOa8s+W8oOaOjOa2qOadluS4iOW4kOi0puS7l+iDgOeYtOmanOaLm+aYreaJvuayvOi1teeFp+e9qeWFhuiCh+WPrOmBruaKmOWTsuibsOi+meiAhemUl+iUl+i/mea1meePjeaWn+ecn+eUhOegp+iHu+i0numSiOS+puaeleeWueiviumch+aMr+mVh+mYteiSuOaMo+edgeW+geeLsOS6ieaAlOaVtOaLr+ato+aUv++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjEzXS5sZW5ndGg7ICsraikgaWYoRFsyMTNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjEzXVtqXV0gPSA1NDUyOCArIGo7IGRbNTQ1MjggKyBqXSA9IERbMjEzXVtqXTt9XG5EWzIxNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veW4p+eXh+mDkeivgeiKneaeneaUr+WQseicmOefpeiCouiEguaxgeS5i+e7h+iBjOebtOakjeauluaJp+WAvOS+hOWdgOaMh+atoui2vuWPquaXqOe6uOW/l+aMmuaOt+iHs+iHtOe9ruW4nOWzmeWItuaZuuenqeeomui0qOeCmeeXlOa7nuayu+eqkuS4reebheW/oOmSn+iht+e7iOenjeiCv+mHjeS7suS8l+iIn+WRqOW3nua0suivjOeypei9tOiCmOW4muWSkueaseWumeaYvOmqpOePoOagquibm+acseeMquivuOivm+mAkOerueeDm+eFruaLhOeeqeWYseS4u+iRl+afseWKqeibgOi0rumTuOetke+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE0XS5sZW5ndGg7ICsraikgaWYoRFsyMTRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE0XVtqXV0gPSA1NDc4NCArIGo7IGRbNTQ3ODQgKyBqXSA9IERbMjE0XVtqXTt9XG5EWzIxNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS9j+azqOelnempu+aKk+eIquaLveS4k+eglui9rOaSsOi1muevhuahqeW6hOijheWmhuaSnuWjrueKtuakjumUpei/vei1mOWdoOe8gOiwhuWHhuaNieaLmeWNk+ahjOeQouiMgemFjOWVhOedgOeBvOa1iuWFueWSqOi1hOWnv+a7i+a3hOWtnOe0q+S7lOexvea7k+WtkOiHqua4jeWtl+msg+ajlei4quWul+e7vOaAu+e6temCuei1sOWlj+aPjeenn+i2s+WNkuaXj+elluivhemYu+e7hOmSu+e6guWYtOmGieacgOe9quWwiumBteaYqOW3puS9kOafnuWBmuS9nOWdkOW6p++/ve+/ve+/ve+/ve+/ve+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE1XS5sZW5ndGg7ICsraikgaWYoRFsyMTVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE1XVtqXV0gPSA1NTA0MCArIGo7IGRbNTUwNDAgKyBqXSA9IERbMjE1XVtqXTt9XG5EWzIxNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS6jeS4jOWFgOS4kOW7v+WNheS4leS6mOS4numssuWtrOWZqeS4qOemuuS4v+WMleS5h+WkreeIu+WNruawkOWbn+iDpOmml+avk+edvum8l+S4tuS6n+m8kOS5nOS5qeS6k+iKiOWtm+WVrOWYj+S7hOWOjeWOneWOo+WOpeWOrumdpei1neWMmuWPteWMpuWMruWMvui1nOWNpuWNo+WIguWIiOWIjuWIreWIs+WIv+WJgOWJjOWJnuWJoeWJnOiSr+WJveWKguWKgeWKkOWKk+WGgue9lOS6u+S7g+S7ieS7guS7qOS7oeS7q+S7nuS8m+S7s+S8ouS9pOS7teS8peS8p+S8ieS8q+S9nuS9p+aUuOS9muS9ne+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE2XS5sZW5ndGg7ICsraikgaWYoRFsyMTZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE2XVtqXV0gPSA1NTI5NiArIGo7IGRbNTUyOTYgKyBqXSA9IERbMjE2XVtqXTt9XG5EWzIxN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veS9n+S9l+S8suS8veS9tuS9tOS+keS+ieS+g+S+j+S9vuS9u+S+quS9vOS+rOS+lOS/puS/qOS/quS/heS/muS/o+S/nOS/keS/n+S/uOWAqeWBjOS/s+WArOWAj+WAruWAreS/vuWAnOWAjOWApeWAqOWBvuWBg+WBleWBiOWBjuWBrOWBu+WCpeWCp+WCqeWCuuWDluWEhuWDreWDrOWDpuWDruWEh+WEi+S7neawveS9mOS9peS/jum+oOaxhuextOWFruW3vem7iemmmOWGgeWklOWLueWMjeioh+WMkOWHq+WkmeWFleS6oOWFluS6s+ihruiipOS6teiElOijkuemgOWstOigg+e+uOWGq+WGseWGveWGvO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE3XS5sZW5ndGg7ICsraikgaWYoRFsyMTddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE3XVtqXV0gPSA1NTU1MiArIGo7IGRbNTU1NTIgKyBqXSA9IERbMjE3XVtqXTt9XG5EWzIxOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWHh+WGluWGouWGpeiuoOiupuiup+iuquiutOiuteiut+ivguivg+ivi+ivj+ivjuivkuivk+ivlOivluivmOivmeivnOivn+ivoOivpOivqOivqeivruivsOivs+ivtuivueivvOivv+iwgOiwguiwhOiwh+iwjOiwj+iwkeiwkuiwlOiwleiwluiwmeiwm+iwmOiwneiwn+iwoOiwoeiwpeiwp+iwquiwq+iwruiwr+iwsuiws+iwteiwtuWNqeWNuumYnemYoumYoemYsemYqumYvemYvOmZgumZiemZlOmZn+mZp+mZrOmZsumZtOmaiOmajemal+masOmCl+mCm+mCnemCmemCrOmCoemCtOmCs+mCtumCuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE4XS5sZW5ndGg7ICsraikgaWYoRFsyMThdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE4XVtqXV0gPSA1NTgwOCArIGo7IGRbNTU4MDggKyBqXSA9IERbMjE4XVtqXTt9XG5EWzIxOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemCuOmCsOmDj+mDhemCvumDkOmDhOmDh+mDk+mDpumDoumDnOmDl+mDm+mDq+mDr+mDvumEhOmEoumEnumEo+mEsemEr+mEuemFg+mFhuWIjeWlguWKouWKrOWKreWKvuWTv+WLkOWLluWLsOWPn+eHruefjeW7tOWHteWHvOmsr+WOtuW8geeVmuW3r+WdjOWeqeWeoeWhvuWivOWjheWjkeWcqeWcrOWcquWcs+WcueWcruWcr+WdnOWcu+WdguWdqeWeheWdq+WehuWdvOWdu+WdqOWdreWdtuWds+WereWepOWejOWesuWfj+Wep+WetOWek+WeoOWfleWfmOWfmuWfmeWfkuWeuOWftOWfr+WfuOWfpOWfne+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjE5XS5sZW5ndGg7ICsraikgaWYoRFsyMTldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjE5XVtqXV0gPSA1NjA2NCArIGo7IGRbNTYwNjQgKyBqXSA9IERbMjE5XVtqXTt9XG5EWzIyMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWgi+WgjeWfveWfreWggOWgnuWgmeWhhOWgoOWhpeWhrOWigeWiieWimuWigOmmqOm8meaHv+iJueiJveiJv+iKj+iKiuiKqOiKhOiKjuiKkeiKl+iKmeiKq+iKuOiKvuiKsOiLiOiLiuiLo+iKmOiKt+iKruiLi+iLjOiLgeiKqeiKtOiKoeiKquiKn+iLhOiLjuiKpOiLoeiMieiLt+iLpOiMj+iMh+iLnOiLtOiLkuiLmOiMjOiLu+iLk+iMkeiMmuiMhuiMlOiMleiLoOiLleiMnOiNkeiNm+iNnOiMiOiOkuiMvOiMtOiMseiOm+iNnuiMr+iNj+iNh+iNg+iNn+iNgOiMl+iNoOiMreiMuuiMs+iNpuiNpe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIwXS5sZW5ndGg7ICsraikgaWYoRFsyMjBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIwXVtqXV0gPSA1NjMyMCArIGo7IGRbNTYzMjAgKyBqXSA9IERbMjIwXVtqXTt9XG5EWzIyMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiNqOiMm+iNqeiNrOiNquiNreiNruiOsOiNuOiOs+iOtOiOoOiOquiOk+iOnOiOheiNvOiOtuiOqeiNveiOuOiNu+iOmOiOnuiOqOiOuuiOvOiPgeiQgeiPpeiPmOWgh+iQmOiQi+iPneiPveiPluiQnOiQuOiQkeiQhuiPlOiPn+iQj+iQg+iPuOiPueiPquiPheiPgOiQpuiPsOiPoeiRnOiRkeiRmuiRmeiRs+iSh+iSiOiRuuiSieiRuOiQvOiRhuiRqeiRtuiSjOiSjuiQseiRreiTgeiTjeiTkOiTpuiSveiTk+iTiuiSv+iSuuiToOiSoeiSueiStOiSl+iTpeiTo+iUjOeUjeiUuOiTsOiUueiUn+iUuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIxXS5sZW5ndGg7ICsraikgaWYoRFsyMjFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIxXVtqXV0gPSA1NjU3NiArIGo7IGRbNTY1NzYgKyBqXSA9IERbMjIxXVtqXTt9XG5EWzIyMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiVluiUu+iTv+iTvOiVmeiViOiVqOiVpOiVnuiVuueeouiVg+iVsuiVu+iWpOiWqOiWh+iWj+iVueiWruiWnOiWheiWueiWt+iWsOiXk+iXgeiXnOiXv+iYp+iYheiYqeiYluiYvOW7vuW8iOWkvOWlgeiAt+WlleWlmuWlmOWMj+WwouWwpeWwrOWwtOaJjOaJquaKn+aKu+aLiuaLmuaLl+aLruaMouaLtuaMueaNi+aNg+aOreaPtuaNseaNuuaOjuaOtOaNreaOrOaOiuaNqeaOruaOvOaPsuaPuOaPoOaPv+aPhOaPnuaPjuaRkuaPhuaOvuaRheaRgeaQi+aQm+aQoOaQjOaQpuaQoeaRnuaShOaRreaSlu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIyXS5sZW5ndGg7ICsraikgaWYoRFsyMjJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIyXVtqXV0gPSA1NjgzMiArIGo7IGRbNTY4MzIgKyBqXSA9IERbMjIyXVtqXTt9XG5EWzIyM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaRuuaSt+aSuOaSmeaSuuaTgOaTkOaTl+aTpOaTouaUieaUpeaUruW8i+W/kueUmeW8keWNn+WPseWPveWPqeWPqOWPu+WQkuWQluWQhuWRi+WRkuWRk+WRlOWRluWRg+WQoeWRl+WRmeWQo+WQsuWSguWSlOWRt+WRseWRpOWSmuWSm+WShOWRtuWRpuWSneWTkOWSreWTguWStOWTkuWSp+WSpuWTk+WTlOWRsuWSo+WTleWSu+WSv+WTjOWTmeWTmuWTnOWSqeWSquWSpOWTneWTj+WTnuWUm+WTp+WUoOWTveWUlOWTs+WUouWUo+WUj+WUkeWUp+WUquWVp+WWj+WWteWVieWVreWVgeWVleWUv+WVkOWUvO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjIzXS5sZW5ndGg7ICsraikgaWYoRFsyMjNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjIzXVtqXV0gPSA1NzA4OCArIGo7IGRbNTcwODggKyBqXSA9IERbMjIzXVtqXTt9XG5EWzIyNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWUt+WVluWVteWVtuWVt+WUs+WUsOWVnOWWi+WXkuWWg+WWseWWueWWiOWWgeWWn+WVvuWXluWWkeWVu+WXn+WWveWWvuWWlOWWmeWXquWXt+WXieWYn+WXkeWXq+WXrOWXlOWXpuWXneWXhOWXr+WXpeWXsuWXs+WXjOWXjeWXqOWXteWXpOi+lOWYnuWYiOWYjOWYgeWYpOWYo+WXvuWYgOWYp+WYreWZmOWYueWZl+WYrOWZjeWZouWZmeWZnOWZjOWZlOWahuWZpOWZseWZq+WZu+WZvOWaheWak+War+WblOWbl+WbneWboeWbteWbq+WbueWbv+WchOWciuWcieWcnOW4j+W4meW4lOW4keW4seW4u+W4vO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI0XS5sZW5ndGg7ICsraikgaWYoRFsyMjRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI0XVtqXV0gPSA1NzM0NCArIGo7IGRbNTczNDQgKyBqXSA9IERbMjI0XVtqXTt9XG5EWzIyNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veW4t+W5hOW5lOW5m+W5nuW5oeWyjOWxuuWyjeWykOWyluWyiOWymOWymeWykeWymuWynOWyteWyouWyveWyrOWyq+WyseWyo+WzgeWyt+WzhOWzkuWzpOWzi+WzpeW0guW0g+W0p+W0puW0ruW0pOW0nuW0huW0m+W1mOW0vuW0tOW0veW1rOW1m+W1r+W1neW1q+W1i+W1iuW1qeW1tOW2guW2meW2neixs+W2t+W3heW9s+W9t+W+guW+h+W+ieW+jOW+leW+meW+nOW+qOW+reW+teW+vOihouW9oeeKreeKsOeKtOeKt+eKuOeLg+eLgeeLjueLjeeLkueLqOeLr+eLqeeLsueLtOeLt+eMgeeLs+eMg+eLuu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI1XS5sZW5ndGg7ICsraikgaWYoRFsyMjVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI1XVtqXV0gPSA1NzYwMCArIGo7IGRbNTc2MDAgKyBqXSA9IERbMjI1XVtqXTt9XG5EWzIyNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeLu+eMl+eMk+eMoeeMiueMnueMneeMleeMoueMueeMpeeMrOeMuOeMseeNkOeNjeeNl+eNoOeNrOeNr+eNvuiIm+Wkpemjp+WkpOWkgumlo+mlp+mlqOmlqemlqumlq+mlrOmltOmlt+mlvemmgOmmhOmmh+mmiummjemmkOmmkemmk+mmlOmmleW6gOW6keW6i+W6luW6peW6oOW6ueW6teW6vuW6s+i1k+W7kuW7keW7m+W7qOW7quiGuuW/hOW/ieW/luW/j+aAg+W/ruaAhOW/oeW/pOW/vuaAheaAhuW/quW/reW/uOaAmeaAteaApuaAm+aAj+aAjeaAqeaAq+aAiuaAv+aAoeaBuOaBueaBu+aBuuaBgu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI2XS5sZW5ndGg7ICsraikgaWYoRFsyMjZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI2XVtqXV0gPSA1Nzg1NiArIGo7IGRbNTc4NTYgKyBqXSA9IERbMjI2XVtqXTt9XG5EWzIyN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaBquaBveaCluaCmuaCreaCneaCg+aCkuaCjOaCm+aDrOaCu+aCseaDneaDmOaDhuaDmuaCtOaEoOaEpuaEleaEo+aDtOaEgOaEjuaEq+aFiuaFteaGrOaGlOaGp+aGt+aHlOaHteW/nemas+mXqemXq+mXsemXs+mXtemXtumXvOmXvumYg+mYhOmYhumYiOmYiumYi+mYjOmYjemYj+mYkumYlemYlumYl+mYmemYmuS4rOeIv+aIleawteaxlOaxnOaxiuayo+ayheaykOaylOayjOaxqOaxqeaxtOaxtuayhuayqeazkOazlOayreazt+azuOazseazl+aysuazoOazluazuuazq+azruayseazk+azr+azvu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI3XS5sZW5ndGg7ICsraikgaWYoRFsyMjddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI3XVtqXV0gPSA1ODExMiArIGo7IGRbNTgxMTIgKyBqXSA9IERbMjI3XVtqXTt9XG5EWzIyOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea0uea0p+a0jOa1g+a1iOa0h+a0hOa0mea0jua0q+a1jea0rua0tea0mua1j+a1kua1lOa0s+a2kea1r+a2nua2oOa1nua2k+a2lOa1nOa1oOa1vOa1o+a4mua3h+a3hea3nua4jua2v+a3oOa4kea3pua3nea3mea4lua2q+a4jOa2rua4q+a5rua5jua5q+a6sua5n+a6hua5k+a5lOa4sua4pea5hOa7n+a6sea6mOa7oOa8rea7oua6pea6p+a6vea6u+a6t+a7l+a6tOa7j+a6j+a7gua6n+a9oua9hua9h+a8pOa8lea7uea8r+a8tua9i+a9tOa8qua8iea8qea+iea+jea+jOa9uOa9sua9vOa9uua/ke+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI4XS5sZW5ndGg7ICsraikgaWYoRFsyMjhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI4XVtqXV0gPSA1ODM2OCArIGo7IGRbNTgzNjggKyBqXSA9IERbMjI4XVtqXTt9XG5EWzIyOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vea/iea+p+a+uea+tua/gua/oea/rua/nua/oOa/r+eAmueAo+eAm+eAueeAteeBj+eBnuWugOWuhOWuleWuk+WupeWuuOeUr+mqnuaQtOWvpOWvruiksOWvsOi5h+ish+i+tui/k+i/lei/pei/rui/pOi/qei/pui/s+i/qOmAhemAhOmAi+mApumAkemAjemAlumAoemAtemAtumAremAr+mBhOmBkemBkumBkOmBqOmBmOmBoumBm+aauemBtOmBvemCgumCiOmCg+mCi+W9kOW9l+W9luW9mOWwu+WSq+WxkOWxmeWtseWxo+Wxpue+vOW8quW8qeW8reiJtOW8vOmsu+WxruWmgeWmg+WmjeWmqeWmquWmo++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjI5XS5sZW5ndGg7ICsraikgaWYoRFsyMjldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjI5XVtqXV0gPSA1ODYyNCArIGo7IGRbNTg2MjQgKyBqXSA9IERbMjI5XVtqXTt9XG5EWzIzMF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veWml+WniuWmq+WmnuWmpOWnkuWmsuWmr+Wnl+WmvuWoheWohuWnneWoiOWno+WnmOWnueWojOWoieWosuWotOWokeWoo+Wok+WpgOWpp+WpiuWpleWovOWpouWpteiDrOWqquWqm+Wpt+WpuuWqvuWrq+WqsuWrkuWrlOWquOWroOWro+WrseWrluWrpuWrmOWrnOWsieWsl+WsluWssuWst+WtgOWwleWwnOWtmuWtpeWts+WtkeWtk+Wtoumptempt+mpuOmpuumpv+mpvemqgOmqgemqhemqiOmqiumqkOmqkumqk+mqlumqmOmqm+mqnOmqnemqn+mqoOmqoumqo+mqpemqp+e6n+e6oee6o+e6pee6qOe6qe+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMwXS5sZW5ndGg7ICsraikgaWYoRFsyMzBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMwXVtqXV0gPSA1ODg4MCArIGo7IGRbNTg4ODAgKyBqXSA9IERbMjMwXVtqXTt9XG5EWzIzMV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vee6ree6sOe6vue7gOe7gee7gue7iee7i+e7jOe7kOe7lOe7l+e7m+e7oOe7oee7qOe7q+e7rue7r+e7see7sue8jee7tue7uue7u+e7vue8gee8gue8g+e8h+e8iOe8i+e8jOe8j+e8kee8kue8l+e8mee8nOe8m+e8n+e8oee8oue8o+e8pOe8pee8pue8p+e8que8q+e8rOe8ree8r+e8sOe8see8sue8s+e8teW5uueVv+W3m+eUvumCleeOjueOkeeOrueOoueOn+ePj+ePguePkeeOt+eOs+ePgOePieePiOePpeePmemhvOeQiuePqeePp+ePnueOuuePsueQj+eQqueRm+eQpueQpeeQqOeQsOeQrueQrO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMxXS5sZW5ndGg7ICsraikgaWYoRFsyMzFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMxXVtqXV0gPSA1OTEzNiArIGo7IGRbNTkxMzYgKyBqXSA9IERbMjMxXVtqXTt9XG5EWzIzMl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeQm+eQmueRgeeRnOeRl+eRleeRmeeRt+eRreeRvueSnOeSjueSgOeSgeeSh+eSi+eSnueSqOeSqeeSkOeSp+eTkueSuumfqumfq+mfrOadjOadk+adnuadiOadqeaepeaeh+adquads+aemOaep+adteaeqOaenuaereaei+adt+advOafsOagieafmOagiuafqeaesOagjOafmeaeteafmuaes+afneaggOafg+aeuOafouagjuafgeafveagsuags+ahoOahoeahjuahouahhOahpOaig+agneahleahpuahgeahp+ahgOagvuahiuahieagqeaiteaij+ahtOaht+aik+ahq+ajgualruajvOakn+akoOajue+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMyXS5sZW5ndGg7ICsraikgaWYoRFsyMzJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMyXVtqXV0gPSA1OTM5MiArIGo7IGRbNTkzOTIgKyBqXSA9IERbMjMyXVtqXTt9XG5EWzIzM10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veakpOajsOaki+akgeall+ajo+akkOalseakuealoOalgualneamhOalq+amgOammOaluOaktOanjOamh+amiOanjuamiealpualo+alueamm+amp+amu+amq+amreanlOamseangeaniuann+amleanoOamjeanv+aor+anreaol+aomOappeansuaphOaovuaqoOapkOapm+aoteaqjuapueaoveaoqOapmOapvOaqkeaqkOaqqeaql+aqq+eMt+eNkuaugeauguauh+auhOaukuauk+aujeaumuaum+auoeauqui9q+i9rei9sei9sui9s+i9tei9tui9uOi9t+i9uei9uui9vOi9vui+gei+gui+hOi+h+i+i++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjMzXS5sZW5ndGg7ICsraikgaWYoRFsyMzNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjMzXVtqXV0gPSA1OTY0OCArIGo7IGRbNTk2NDggKyBqXSA9IERbMjMzXVtqXTt9XG5EWzIzNF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vei+jei+jui+j+i+mOi+mui7juaIi+aIl+aIm+aIn+aIouaIoeaIpeaIpOaIrOiHp+eTr+eTtOeTv+eUj+eUkeeUk+aUtOaXruaXr+aXsOaYiuaYmeadsuaYg+aYleaYgOeCheabt+aYneaYtOaYseaYtuaYteiAhuaZn+aZlOaZgeaZj+aZluaZoeaZl+aZt+aahOaajOaap+aaneaavuabm+abnOabpuabqei0sui0s+i0tui0u+i0vei1gOi1hei1hui1iOi1iei1h+i1jei1lei1meinh+iniuini+injOinjuinj+inkOinkeeJrueKn+eJneeJpueJr+eJvueJv+eKhOeKi+eKjeeKj+eKkuaMiOaMsuaOsO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM0XS5sZW5ndGg7ICsraikgaWYoRFsyMzRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM0XVtqXV0gPSA1OTkwNCArIGo7IGRbNTk5MDQgKyBqXSA9IERbMjM0XVtqXTt9XG5EWzIzNV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaQv+aTmOiAhOavquavs+avveavteavueawheawh+awhuawjeawleawmOawmeawmuawoeawqeawpOawquawsuaUteaVleaVq+eJjeeJkueJlueIsOiZouWIluiCn+iCnOiCk+iCvOaciuiCveiCseiCq+iCreiCtOiCt+iDp+iDqOiDqeiDquiDm+iDguiDhOiDmeiDjeiDl+ackOiDneiDq+iDseiDtOiDreiEjeiEjuiDsuiDvOacleiEkuixmuiEtuiEnuiErOiEmOiEsuiFiOiFjOiFk+iFtOiFmeiFmuiFseiFoOiFqeiFvOiFveiFreiFp+WhjeWqteiGiOiGguiGkea7leiGo+iGquiHjOacpuiHiuiGu++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM1XS5sZW5ndGg7ICsraikgaWYoRFsyMzVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM1XVtqXV0gPSA2MDE2MCArIGo7IGRbNjAxNjAgKyBqXSA9IERbMjM1XVtqXTt9XG5EWzIzNl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veiHgeiGpuaspOast+asueatg+athuatmemjkemjkumjk+mjlemjmemjmuaus+W9gOavguins+aWkOm9keaWk+aWvOaXhuaXhOaXg+aXjOaXjuaXkuaXlueCgOeCnOeClueCneeCu+eDgOeCt+eCq+eCseeDqOeDiueEkOeEk+eElueEr+eEseeFs+eFnOeFqOeFheeFsueFiueFuOeFuueGmOeGs+eGteeGqOeGoOeHoOeHlOeHp+eHueeIneeIqOeBrOeEmOeFpueGueaIvuaIveaJg+aJiOaJieeku+elgOelhuelieelm+elnOelk+elmuelouell+eloOelr+elp+eluuemheemiuemmuemp+ems+W/keW/kO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM2XS5sZW5ndGg7ICsraikgaWYoRFsyMzZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM2XVtqXV0gPSA2MDQxNiArIGo7IGRbNjA0MTYgKyBqXSA9IERbMjM2XVtqXTt9XG5EWzIzN10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veaAvOaBneaBmuaBp+aBgeaBmeaBo+aCq+aEhuaEjeaFneaGqeaGneaHi+aHkeaIhuiCgOiBv+ayk+aztua3vOeftuefuOeggOegieegl+egmOegkeaWq+egreegnOegneegueeguuegu+egn+egvOegpeegrOego+egqeehjuehreehluehl+egpuehkOehh+ehjOehqueim+eik+eimueih+einOeioeeio+eisueiueeipeejlOejmeejieejrOejsuekheejtOekk+ekpOeknuektOm+m+m7uem7u+m7vOebseechOecjeebueech+eciOecmuecouecmeecreecpuecteecuOedkOedkeedh+edg+edmuedqO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM3XS5sZW5ndGg7ICsraikgaWYoRFsyMzddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM3XVtqXV0gPSA2MDY3MiArIGo7IGRbNjA2NzIgKyBqXSA9IERbMjM3XVtqXTt9XG5EWzIzOF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veedouedpeedv+eejeedveeegOeejOeekeeen+eeoOeesOeeteeeveeUuueVgOeVjueVi+eViOeVm+eVsueVueeWg+e9mOe9oee9n+ipiOe9qOe9tOe9see9uee+gee9vuebjeebpeigsumShemShumSh+mSi+mSiumSjOmSjemSj+mSkOmSlOmSl+mSlemSmumSm+mSnOmSo+mSpOmSq+mSqumSremSrOmSr+mSsOmSsumStOmStumSt+mSuOmSuemSuumSvOmSvemSv+mThOmTiOmTiemTiumTi+mTjOmTjemTjumTkOmTkemTkumTlemTlumTl+mTmemTmOmTm+mTnumTn+mToOmToumTpOmTpemTp+mTqOmTqu+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM4XS5sZW5ndGg7ICsraikgaWYoRFsyMzhdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM4XVtqXV0gPSA2MDkyOCArIGo7IGRbNjA5MjggKyBqXSA9IERbMjM4XVtqXTt9XG5EWzIzOV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemTqemTq+mTrumTr+mTs+mTtOmTtemTt+mTuemTvOmTvemTv+mUg+mUgumUhumUh+mUiemUiumUjemUjumUj+mUkumUk+mUlOmUlemUlumUmOmUm+mUnemUnumUn+mUoumUqumUq+mUqemUrOmUsemUsumUtOmUtumUt+mUuOmUvOmUvumUv+mVgumUtemVhOmVhemVhumViemVjOmVjumVj+mVkumVk+mVlOmVlumVl+mVmOmVmemVm+mVnumVn+mVnemVoemVoumVpOmVpemVpumVp+mVqOmVqemVqumVq+mVrOmVr+mVsemVsumVs+mUuuefp+efrOmbieenleenreeno+enq+eohuW1h+eog+eogueonueolO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjM5XS5sZW5ndGg7ICsraikgaWYoRFsyMzldW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjM5XVtqXV0gPSA2MTE4NCArIGo7IGRbNjExODQgKyBqXSA9IERbMjM5XVtqXTt9XG5EWzI0MF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeoueeot+epkem7j+mmpeepsOeaiOeajueak+eameeapOeTnueToOeUrOm4oOm4oum4qOm4qem4qum4q+m4rOm4sum4sem4tum4uOm4t+m4uem4uum4vum5gem5gum5hOm5hum5h+m5iOm5iem5i+m5jOm5jum5kem5lem5l+m5mum5m+m5nOm5num5o+m5pum5p+m5qOm5qem5qum5q+m5rOm5sem5rem5s+eWkueWlOeWlueWoOeWneeWrOeWo+eWs+eWtOeWuOeXhOeWseeWsOeXg+eXgueXlueXjeeXo+eXqOeXpueXpOeXq+eXp+eYg+eXseeXvOeXv+eYkOeYgOeYheeYjOeYl+eYiueYpeeYmOeYleeYme+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQwXS5sZW5ndGg7ICsraikgaWYoRFsyNDBdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQwXVtqXV0gPSA2MTQ0MCArIGo7IGRbNjE0NDAgKyBqXSA9IERbMjQwXVtqXTt9XG5EWzI0MV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veeYm+eYvOeYoueYoOeZgOeYreeYsOeYv+eYteeZg+eYvueYs+eZjeeZnueZlOeZnOeZlueZq+eZr+e/iuerpuepuOepueeqgOeqhueqiOeqleeqpueqoOeqrOeqqOeqreeqs+ihpOihqeihsuihveihv+iiguiiouijhuiit+iivOijieijouijjuijo+ijpeijseikmuijvOijqOijvuijsOikoeikmeikk+ikm+ikiuiktOikq+iktuilgeilpuilu+eWi+iDpeeasueatOefnOiAkuiAlOiAluiAnOiAoOiAouiApeiApuiAp+iAqeiAqOiAseiAi+iAteiBg+iBhuiBjeiBkuiBqeiBseimg+mhuOmigOmig++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQxXS5sZW5ndGg7ICsraikgaWYoRFsyNDFdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQxXVtqXV0gPSA2MTY5NiArIGo7IGRbNjE2OTYgKyBqXSA9IERbMjQxXVtqXTt9XG5EWzI0Ml0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemiiemijOmijemij+milOmimumim+minumin+mioemioumipemipuiZjeiZlOiZrOiZruiZv+iZuuiZvOiZu+iaqOiajeiai+iarOianeiap+iao+iaquiak+iaqeiatuibhOiateibjuiasOiauuiaseiar+ibieibj+iatOibqeibseibsuibreibs+ibkOick+ibnuibtOibn+ibmOibkeicg+ich+ibuOiciOiciuicjeicieico+icu+icnuicpeicruicmuicvuidiOictOicseicqeict+icv+ieguicouidveidvuidu+idoOidsOidjOidruiei+idk+ido+idvOidpOidmeidpeiek+ier+ieqOifku+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQyXS5sZW5ndGg7ICsraikgaWYoRFsyNDJdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQyXVtqXV0gPSA2MTk1MiArIGo7IGRbNjE5NTIgKyBqXSA9IERbMjQyXVtqXTt9XG5EWzI0M10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veifhuieiOieheiereiel+ieg+ieq+ifpeierOieteies+ifi+ifk+ieveifkeifgOifiuifm+ifquifoOifruigluigk+ifvuigiuigm+igoeigueigvOe8tue9gue9hOe9heiIkOeruuerveesiOesg+eshOesleesiuesq+esj+eth+esuOesquesmeesruesseesoOespeespOess+esvuesnuetmOetmuetheetteetjOetneetoOetruetu+etouetsuetseeukOeupueup+euuOeurOeuneeuqOeuheeuqueunOeuoueuq+eutOevkeevgeevjOevneevmuevpeevpuevquewjOevvuevvOewj+ewluewi++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQzXS5sZW5ndGg7ICsraikgaWYoRFsyNDNdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQzXVtqXV0gPSA2MjIwOCArIGo7IGRbNjIyMDggKyBqXSA9IERbMjQzXVtqXTt9XG5EWzI0NF0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veewn+ewquewpuewuOexgeexgOiHvuiIgeiIguiIhOiHrOihhOiIoeiIouiIo+iIreiIr+iIqOiIq+iIuOiIu+iIs+iItOiIvuiJhOiJieiJi+iJj+iJmuiJn+iJqOihvuiiheiiiOijmOijn+ilnue+nee+n+e+p+e+r+e+sOe+suexvOaVieeykeeyneeynOeynueyoueysueyvOeyveezgeezh+ezjOezjeeziOezheezl+ezqOiJruaaqOe+v+e/jue/lee/pee/oee/pue/qee/rue/s+ezuOe1t+e2pue2rue5h+e6m+m6uOm6tOi1s+i2hOi2lOi2kei2sei1p+i1reixh+ixiemFiumFkOmFjumFj+mFpO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ0XS5sZW5ndGg7ICsraikgaWYoRFsyNDRdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ0XVtqXV0gPSA2MjQ2NCArIGo7IGRbNjI0NjQgKyBqXSA9IERbMjQ0XVtqXTt9XG5EWzI0NV0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemFoumFoemFsOmFqemFr+mFvemFvumFsumFtOmFuemGjOmGhemGkOmGjemGkemGoumGo+mGqumGremGrumGr+mGtemGtOmGuuixlem5vui2uOi3q+i4hei5mei5qei2tei2v+i2vOi2uui3hOi3lui3l+i3mui3nui3jui3j+i3m+i3hui3rOi3t+i3uOi3o+i3uei3u+i3pOi4iei3vei4lOi4nei4n+i4rOi4rui4o+i4r+i4uui5gOi4uei4tei4vei4sei5iei5gei5gui5kei5kui5iui5sOi5tui5vOi5r+i5tOi6hei6j+i6lOi6kOi6nOi6nuixuOiyguiyiuiyheiymOiylOaWm+inluinnuinmuinnO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ1XS5sZW5ndGg7ICsraikgaWYoRFsyNDVdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ1XVtqXV0gPSA2MjcyMCArIGo7IGRbNjI3MjAgKyBqXSA9IERbMjQ1XVtqXTt9XG5EWzI0Nl0gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veinpeinq+inr+iovuispumdk+mbqembs+mbr+mchumcgemciOmcj+mcjumcqumcremcsOmcvum+gOm+g+m+hem+hum+h+m+iOm+iem+ium+jOm7vum8i+m8jemauemavOmavembjumbkueev+mboOmKjumKrumLiOmMvumNqumPiumOj+mQvumRq+mxv+mygumyhemyhumyh+myiOeoo+myi+myjumykOmykemykumylOmylemymumym+mynumyn+myoOmyoemyoumyo+mypemypumyp+myqOmyqemyq+myremyrumysOmysemysumys+mytOmytemytumyt+myuumyu+myvOmyvemzhOmzhemzhumzh+mziumzi++/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ2XS5sZW5ndGg7ICsraikgaWYoRFsyNDZdW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ2XVtqXV0gPSA2Mjk3NiArIGo7IGRbNjI5NzYgKyBqXSA9IERbMjQ2XVtqXTt9XG5EWzI0N10gPSBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vemzjOmzjemzjumzj+mzkOmzk+mzlOmzlemzl+mzmOmzmemznOmznemzn+mzoumdvOmehemekemekumelOmer+meq+meo+mesumetOmqsemqsOmqt+m5mOmqtumquumqvOmrgemrgOmrhemrgumri+mrjOmrkemthemtg+mth+mtiemtiOmtjemtkemjqOmkjemkrumllemllOmrn+mroemrpumrr+mrq+mru+mrremruemsiOmsj+msk+msn+mso+m6vem6vue4u+m6gum6h+m6iOm6i+m6kumPlum6nem6n+m7m+m7nOm7nem7oOm7n+m7oum7qem7p+m7pem7qum7r+m8oum8rOm8r+m8uem8t+m8vem8vum9hO+/vVwiLnNwbGl0KFwiXCIpO1xuZm9yKGogPSAwOyBqICE9IERbMjQ3XS5sZW5ndGg7ICsraikgaWYoRFsyNDddW2pdLmNoYXJDb2RlQXQoMCkgIT09IDB4RkZGRCkgeyBlW0RbMjQ3XVtqXV0gPSA2MzIzMiArIGo7IGRbNjMyMzIgKyBqXSA9IERbMjQ3XVtqXTt9XG5yZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IGQgfTsgfSkoKTtcbmNwdGFibGVbMTAwMjldID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/DhMSAxIHDicSEw5bDnMOhxIXEjMOkxI3EhsSHw6nFucW6xI7DrcSPxJLEk8SWw7PEl8O0w7bDtcO6xJrEm8O84oCgwrDEmMKjwqfigKLCtsOfwq7CqeKEosSZwqjiiaDEo8SuxK/EquKJpOKJpcSrxLbiiILiiJHFgsS7xLzEvcS+xLnEusWFxYbFg8Ks4oiaxYTFh+KIhsKrwrvigKbCoMWIxZDDlcWRxYzigJPigJTigJzigJ3igJjigJnDt+KXisWNxZTFlcWY4oC54oC6xZnFlsWXxaDigJrigJ7FocWaxZvDgcWkxaXDjcW9xb7FqsOTw5TFq8Wuw5rFr8WwxbHFssWzw53DvcS3xbvFgcW8xKLLh1wiLCBEID0gW10sIGUgPSB7fTsgZm9yKHZhciBpPTA7aSE9ZC5sZW5ndGg7KytpKSB7IGlmKGQuY2hhckNvZGVBdChpKSAhPT0gMHhGRkZEKSBlW2QuY2hhckF0KGkpXSA9IGk7IERbaV0gPSBkLmNoYXJBdChpKTsgfSByZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IEQgfTsgfSkoKTtcbmNwdGFibGVbMTAwNzldID0gKGZ1bmN0aW9uKCl7IHZhciBkID0gXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/DhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O8w53CsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTDkMOww57DvsO9wrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsIEQgPSBbXSwgZSA9IHt9OyBmb3IodmFyIGk9MDtpIT1kLmxlbmd0aDsrK2kpIHsgaWYoZC5jaGFyQ29kZUF0KGkpICE9PSAweEZGRkQpIGVbZC5jaGFyQXQoaSldID0gaTsgRFtpXSA9IGQuY2hhckF0KGkpOyB9IHJldHVybiB7XCJlbmNcIjogZSwgXCJkZWNcIjogRCB9OyB9KSgpO1xuY3B0YWJsZVsxMDA4MV0gPSAoZnVuY3Rpb24oKXsgdmFyIGQgPSBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8OEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W4xJ7En8SwxLHFnsWf4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nvv73Lhsucwq/LmMuZy5rCuMudy5vLh1wiLCBEID0gW10sIGUgPSB7fTsgZm9yKHZhciBpPTA7aSE9ZC5sZW5ndGg7KytpKSB7IGlmKGQuY2hhckNvZGVBdChpKSAhPT0gMHhGRkZEKSBlW2QuY2hhckF0KGkpXSA9IGk7IERbaV0gPSBkLmNoYXJBdChpKTsgfSByZXR1cm4ge1wiZW5jXCI6IGUsIFwiZGVjXCI6IEQgfTsgfSkoKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzICYmIHR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFID09PSAndW5kZWZpbmVkJykgbW9kdWxlLmV4cG9ydHMgPSBjcHRhYmxlO1xuLyogY3B1dGlscy5qcyAoQykgMjAxMy1wcmVzZW50IFNoZWV0SlMgLS0gaHR0cDovL3NoZWV0anMuY29tICovXG4vKiB2aW06IHNldCBmdD1qYXZhc2NyaXB0OiAqL1xuLypqc2hpbnQgbmV3Y2FwOiBmYWxzZSAqL1xuKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgLypqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIC8qZXNsaW50LWRpc2FibGUgKi9cbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIGlmKHR5cGVvZiBjcHRhYmxlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaWYodHlwZW9mIHJlcXVpcmUgIT09IFwidW5kZWZpbmVkXCIpe1xuICAgICAgdmFyIGNwdCA9IGNwdGFibGU7XG4gICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgJiYgdHlwZW9mIERPX05PVF9FWFBPUlRfQ09ERVBBR0UgPT09ICd1bmRlZmluZWQnKSBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoY3B0KTtcbiAgICAgIGVsc2Ugcm9vdC5jcHRhYmxlID0gZmFjdG9yeShjcHQpO1xuICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJjcHRhYmxlIG5vdCBmb3VuZFwiKTtcbiAgfSBlbHNlIGNwdGFibGUgPSBmYWN0b3J5KGNwdGFibGUpO1xuICAvKmVzbGludC1lbmFibGUgKi9cbiAgLypqc2hpbnQgaWdub3JlOmVuZCAqL1xufSh0aGlzLCBmdW5jdGlvbihjcHQpe1xuICBcInVzZSBzdHJpY3RcIjtcbiAgLypnbG9iYWwgbW9kdWxlLCBCdWZmZXIgKi9cbiAgdmFyIG1hZ2ljID0ge1xuICAgIFwiMTIwMFwiOlwidXRmMTZsZVwiLFxuICAgIFwiMTIwMVwiOlwidXRmMTZiZVwiLFxuICAgIFwiMTIwMDBcIjpcInV0ZjMybGVcIixcbiAgICBcIjEyMDAxXCI6XCJ1dGYzMmJlXCIsXG4gICAgXCIxNjk2OVwiOlwidXRmNjRsZVwiLFxuICAgIFwiMjAxMjdcIjpcImFzY2lpXCIsXG4gICAgXCI2NTAwMFwiOlwidXRmN1wiLFxuICAgIFwiNjUwMDFcIjpcInV0ZjhcIlxuICB9O1xuXG4gIHZhciBzYmNzX2NhY2hlID0gWzg3NCwxMjUwLDEyNTEsMTI1MiwxMjUzLDEyNTQsMTI1NSwxMjU2LDEwMDAwXTtcbiAgdmFyIGRiY3NfY2FjaGUgPSBbOTMyLDkzNiw5NDksOTUwXTtcbiAgdmFyIG1hZ2ljX2NhY2hlID0gWzY1MDAxXTtcbiAgdmFyIG1hZ2ljX2RlY29kZSA9IHt9O1xuICB2YXIgbWFnaWNfZW5jb2RlID0ge307XG4gIHZhciBjcGRjYWNoZSA9IHt9O1xuICB2YXIgY3BlY2FjaGUgPSB7fTtcblxuICB2YXIgc2ZjYyA9IGZ1bmN0aW9uIHNmY2MoeCkgeyByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh4KTsgfTtcbiAgdmFyIGNjYSA9IGZ1bmN0aW9uIGNjYSh4KSB7IHJldHVybiB4LmNoYXJDb2RlQXQoMCk7IH07XG5cbiAgdmFyIGhhc19idWYgPSAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpO1xuICBpZihoYXNfYnVmKSB7XG4gICAgdmFyIG1kbCA9IDEwMjQsIG1kYiA9IG5ldyBCdWZmZXIobWRsKTtcbiAgICB2YXIgbWFrZV9FRSA9IGZ1bmN0aW9uIG1ha2VfRUUoRSl7XG4gICAgICB2YXIgRUUgPSBuZXcgQnVmZmVyKDY1NTM2KTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCA2NTUzNjsrK2kpIEVFW2ldID0gMDtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoRSksIGxlbiA9IGtleXMubGVuZ3RoO1xuICAgICAgZm9yKHZhciBlZSA9IDAsIGUgPSBrZXlzW2VlXTsgZWUgPCBsZW47ICsrZWUpIHtcbiAgICAgICAgaWYoIShlID0ga2V5c1tlZV0pKSBjb250aW51ZTtcbiAgICAgICAgRUVbZS5jaGFyQ29kZUF0KDApXSA9IEVbZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gRUU7XG4gICAgfTtcbiAgICB2YXIgc2Jjc19lbmNvZGUgPSBmdW5jdGlvbiBtYWtlX3NiY3NfZW5jb2RlKGNwKSB7XG4gICAgICB2YXIgRUUgPSBtYWtlX0VFKGNwdFtjcF0uZW5jKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBzYmNzX2UoZGF0YSwgb2ZtdCkge1xuICAgICAgICB2YXIgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHZhciBvdXQsIGk9MCwgaj0wLCBEPTAsIHc9MDtcbiAgICAgICAgaWYodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgb3V0ID0gbmV3IEJ1ZmZlcihsZW4pO1xuICAgICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgKytpKSBvdXRbaV0gPSBFRVtkYXRhLmNoYXJDb2RlQXQoaSldO1xuICAgICAgICB9IGVsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgb3V0ID0gbmV3IEJ1ZmZlcigyKmxlbik7XG4gICAgICAgICAgaiA9IDA7XG4gICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIEQgPSBkYXRhW2ldO1xuICAgICAgICAgICAgaWYoRCA8IDEyOCkgb3V0W2orK10gPSBFRVtEXTtcbiAgICAgICAgICAgIGVsc2UgaWYoRCA8IDIyNCkgeyBvdXRbaisrXSA9IEVFWygoRCYzMSk8PDYpKyhkYXRhW2krMV0mNjMpXTsgKytpOyB9XG4gICAgICAgICAgICBlbHNlIGlmKEQgPCAyNDApIHsgb3V0W2orK10gPSBFRVsoKEQmMTUpPDwxMikrKChkYXRhW2krMV0mNjMpPDw2KSsoZGF0YVtpKzJdJjYzKV07IGkrPTI7IH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB3ID0gKChEJjcpPDwxOCkrKChkYXRhW2krMV0mNjMpPDwxMikrKChkYXRhW2krMl0mNjMpPDw2KSsoZGF0YVtpKzNdJjYzKTsgaSs9MztcbiAgICAgICAgICAgICAgaWYodyA8IDY1NTM2KSBvdXRbaisrXSA9IEVFW3ddO1xuICAgICAgICAgICAgICBlbHNlIHsgdyAtPSA2NTUzNjsgb3V0W2orK10gPSBFRVsweEQ4MDAgKyAoKHc+PjEwKSYxMDIzKV07IG91dFtqKytdID0gRUVbMHhEQzAwICsgKHcmMTAyMyldOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCA9IG91dC5zbGljZSgwLGopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IG5ldyBCdWZmZXIobGVuKTtcbiAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47ICsraSkgb3V0W2ldID0gRUVbZGF0YVtpXS5jaGFyQ29kZUF0KDApXTtcbiAgICAgICAgfVxuICAgICAgICBpZighb2ZtdCB8fCBvZm10ID09PSAnYnVmJykgcmV0dXJuIG91dDtcbiAgICAgICAgaWYob2ZtdCAhPT0gJ2FycicpIHJldHVybiBvdXQudG9TdHJpbmcoJ2JpbmFyeScpO1xuICAgICAgICByZXR1cm4gW10uc2xpY2UuY2FsbChvdXQpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBzYmNzX2RlY29kZSA9IGZ1bmN0aW9uIG1ha2Vfc2Jjc19kZWNvZGUoY3ApIHtcbiAgICAgIHZhciBEID0gY3B0W2NwXS5kZWM7XG4gICAgICB2YXIgREQgPSBuZXcgQnVmZmVyKDEzMTA3MiksIGQ9MCwgYz1cIlwiO1xuICAgICAgZm9yKGQ9MDtkPEQubGVuZ3RoOysrZCkge1xuICAgICAgICBpZighKGM9RFtkXSkpIGNvbnRpbnVlO1xuICAgICAgICB2YXIgdyA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgRERbMipkXSA9IHcmMjU1OyBERFsyKmQrMV0gPSB3Pj44O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNiY3NfZChkYXRhKSB7XG4gICAgICAgIHZhciBsZW4gPSBkYXRhLmxlbmd0aCwgaT0wLCBqPTA7XG4gICAgICAgIGlmKDIgKiBsZW4gPiBtZGwpIHsgbWRsID0gMiAqIGxlbjsgbWRiID0gbmV3IEJ1ZmZlcihtZGwpOyB9XG4gICAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBqID0gMipkYXRhW2ldO1xuICAgICAgICAgICAgbWRiWzIqaV0gPSBERFtqXTsgbWRiWzIqaSsxXSA9IEREW2orMV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaiA9IDIqZGF0YS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgbWRiWzIqaV0gPSBERFtqXTsgbWRiWzIqaSsxXSA9IEREW2orMV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBqID0gMipkYXRhW2ldO1xuICAgICAgICAgICAgbWRiWzIqaV0gPSBERFtqXTsgbWRiWzIqaSsxXSA9IEREW2orMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZGIuc2xpY2UoMCwgMiAqIGxlbikudG9TdHJpbmcoJ3VjczInKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZGJjc19lbmNvZGUgPSBmdW5jdGlvbiBtYWtlX2RiY3NfZW5jb2RlKGNwKSB7XG4gICAgICB2YXIgRSA9IGNwdFtjcF0uZW5jO1xuICAgICAgdmFyIEVFID0gbmV3IEJ1ZmZlcigxMzEwNzIpO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDEzMTA3MjsgKytpKSBFRVtpXSA9IDA7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKEUpO1xuICAgICAgZm9yKHZhciBlZSA9IDAsIGUgPSBrZXlzW2VlXTsgZWUgPCBrZXlzLmxlbmd0aDsgKytlZSkge1xuICAgICAgICBpZighKGUgPSBrZXlzW2VlXSkpIGNvbnRpbnVlO1xuICAgICAgICB2YXIgZiA9IGUuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgRUVbMipmXSA9IEVbZV0gJiAyNTU7IEVFWzIqZisxXSA9IEVbZV0+Pjg7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZGJjc19lKGRhdGEsIG9mbXQpIHtcbiAgICAgICAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoLCBvdXQgPSBuZXcgQnVmZmVyKDIqbGVuKSwgaT0wLCBqPTAsIGpqPTAsIGs9MCwgRD0wO1xuICAgICAgICBpZih0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBmb3IoaSA9IGsgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGogPSBkYXRhLmNoYXJDb2RlQXQoaSkqMjtcbiAgICAgICAgICAgIG91dFtrKytdID0gRUVbaisxXSB8fCBFRVtqXTsgaWYoRUVbaisxXSA+IDApIG91dFtrKytdID0gRUVbal07XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCA9IG91dC5zbGljZSgwLGspO1xuICAgICAgICB9IGVsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgZm9yKGkgPSBrID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBEID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGlmKEQgPCAxMjgpIGogPSBEO1xuICAgICAgICAgICAgZWxzZSBpZihEIDwgMjI0KSB7IGogPSAoKEQmMzEpPDw2KSsoZGF0YVtpKzFdJjYzKTsgKytpOyB9XG4gICAgICAgICAgICBlbHNlIGlmKEQgPCAyNDApIHsgaiA9ICgoRCYxNSk8PDEyKSsoKGRhdGFbaSsxXSY2Myk8PDYpKyhkYXRhW2krMl0mNjMpOyBpKz0yOyB9XG4gICAgICAgICAgICBlbHNlIHsgaiA9ICgoRCY3KTw8MTgpKygoZGF0YVtpKzFdJjYzKTw8MTIpKygoZGF0YVtpKzJdJjYzKTw8NikrKGRhdGFbaSszXSY2Myk7IGkrPTM7IH1cbiAgICAgICAgICAgIGlmKGo8NjU1MzYpIHsgaio9Mjsgb3V0W2srK10gPSBFRVtqKzFdIHx8IEVFW2pdOyBpZihFRVtqKzFdID4gMCkgb3V0W2srK10gPSBFRVtqXTsgfVxuICAgICAgICAgICAgZWxzZSB7IGpqID0gai02NTUzNjtcbiAgICAgICAgICAgICAgaj0yKigweEQ4MDAgKyAoKGpqPj4xMCkmMTAyMykpOyBvdXRbaysrXSA9IEVFW2orMV0gfHwgRUVbal07IGlmKEVFW2orMV0gPiAwKSBvdXRbaysrXSA9IEVFW2pdO1xuICAgICAgICAgICAgICBqPTIqKDB4REMwMCArIChqaiYxMDIzKSk7IG91dFtrKytdID0gRUVbaisxXSB8fCBFRVtqXTsgaWYoRUVbaisxXSA+IDApIG91dFtrKytdID0gRUVbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCA9IG91dC5zbGljZSgwLGspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcihpID0gayA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaiA9IGRhdGFbaV0uY2hhckNvZGVBdCgwKSoyO1xuICAgICAgICAgICAgb3V0W2srK10gPSBFRVtqKzFdIHx8IEVFW2pdOyBpZihFRVtqKzFdID4gMCkgb3V0W2srK10gPSBFRVtqXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoIW9mbXQgfHwgb2ZtdCA9PT0gJ2J1ZicpIHJldHVybiBvdXQ7XG4gICAgICAgIGlmKG9mbXQgIT09ICdhcnInKSByZXR1cm4gb3V0LnRvU3RyaW5nKCdiaW5hcnknKTtcbiAgICAgICAgcmV0dXJuIFtdLnNsaWNlLmNhbGwob3V0KTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgZGJjc19kZWNvZGUgPSBmdW5jdGlvbiBtYWtlX2RiY3NfZGVjb2RlKGNwKSB7XG4gICAgICB2YXIgRCA9IGNwdFtjcF0uZGVjO1xuICAgICAgdmFyIEREID0gbmV3IEJ1ZmZlcigxMzEwNzIpLCBkPTAsIGMsIHc9MCwgaj0wLCBpPTA7XG4gICAgICBmb3IoaSA9IDA7IGkgPCA2NTUzNjsgKytpKSB7IEREWzIqaV0gPSAweEZGOyBERFsyKmkrMV0gPSAweEZEO31cbiAgICAgIGZvcihkID0gMDsgZCA8IEQubGVuZ3RoOyArK2QpIHtcbiAgICAgICAgaWYoIShjPURbZF0pKSBjb250aW51ZTtcbiAgICAgICAgdyA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgaiA9IDIqZDtcbiAgICAgICAgRERbal0gPSB3JjI1NTsgRERbaisxXSA9IHc+Pjg7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZGJjc19kKGRhdGEpIHtcbiAgICAgICAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoLCBvdXQgPSBuZXcgQnVmZmVyKDIqbGVuKSwgaT0wLCBqPTAsIGs9MDtcbiAgICAgICAgaWYoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGogPSAyKmRhdGFbaV07XG4gICAgICAgICAgICBpZihERFtqXT09PTB4RkYgJiYgRERbaisxXT09PTB4RkQpIHsgaj0yKigoZGF0YVtpXTw8OCkrZGF0YVtpKzFdKTsgKytpOyB9XG4gICAgICAgICAgICBvdXRbaysrXSA9IEREW2pdOyBvdXRbaysrXSA9IEREW2orMV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaiA9IDIqZGF0YS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYoRERbal09PT0weEZGICYmIEREW2orMV09PT0weEZEKSB7IGo9MiooKGRhdGEuY2hhckNvZGVBdChpKTw8OCkrZGF0YS5jaGFyQ29kZUF0KGkrMSkpOyArK2k7IH1cbiAgICAgICAgICAgIG91dFtrKytdID0gRERbal07IG91dFtrKytdID0gRERbaisxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGogPSAyKmRhdGFbaV07XG4gICAgICAgICAgICBpZihERFtqXT09PTB4RkYgJiYgRERbaisxXT09PTB4RkQpIHsgaj0yKigoZGF0YVtpXTw8OCkrZGF0YVtpKzFdKTsgKytpOyB9XG4gICAgICAgICAgICBvdXRbaysrXSA9IEREW2pdOyBvdXRbaysrXSA9IEREW2orMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQuc2xpY2UoMCxrKS50b1N0cmluZygndWNzMicpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIG1hZ2ljX2RlY29kZVs2NTAwMV0gPSBmdW5jdGlvbiB1dGY4X2QoZGF0YSkge1xuICAgICAgaWYodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHJldHVybiB1dGY4X2QoZGF0YS5zcGxpdChcIlwiKS5tYXAoY2NhKSk7XG4gICAgICB2YXIgbGVuID0gZGF0YS5sZW5ndGgsIHcgPSAwLCB3dyA9IDA7XG4gICAgICBpZig0ICogbGVuID4gbWRsKSB7IG1kbCA9IDQgKiBsZW47IG1kYiA9IG5ldyBCdWZmZXIobWRsKTsgfVxuICAgICAgdmFyIGkgPSAwO1xuICAgICAgaWYobGVuID49IDMgJiYgZGF0YVswXSA9PSAweEVGKSBpZihkYXRhWzFdID09IDB4QkIgJiYgZGF0YVsyXSA9PSAweEJGKSBpID0gMztcbiAgICAgIGZvcih2YXIgaiA9IDEsIGsgPSAwLCBEID0gMDsgaSA8IGxlbjsgaSs9aikge1xuICAgICAgICBqID0gMTsgRCA9IGRhdGFbaV07XG4gICAgICAgIGlmKEQgPCAxMjgpIHcgPSBEO1xuICAgICAgICBlbHNlIGlmKEQgPCAyMjQpIHsgdz0oRCYzMSkqNjQrKGRhdGFbaSsxXSY2Myk7IGo9MjsgfVxuICAgICAgICBlbHNlIGlmKEQgPCAyNDApIHsgdz0oKEQmMTUpPDwxMikrKGRhdGFbaSsxXSY2MykqNjQrKGRhdGFbaSsyXSY2Myk7IGo9MzsgfVxuICAgICAgICBlbHNlIHsgdz0oRCY3KSoyNjIxNDQrKChkYXRhW2krMV0mNjMpPDwxMikrKGRhdGFbaSsyXSY2MykqNjQrKGRhdGFbaSszXSY2Myk7IGo9NDsgfVxuICAgICAgICBpZih3IDwgNjU1MzYpIHsgbWRiW2srK10gPSB3JjI1NTsgbWRiW2srK10gPSB3Pj44OyB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHcgLT0gNjU1MzY7IHd3ID0gMHhEODAwICsgKCh3Pj4xMCkmMTAyMyk7IHcgPSAweERDMDAgKyAodyYxMDIzKTtcbiAgICAgICAgICBtZGJbaysrXSA9IHd3JjI1NTsgbWRiW2srK10gPSB3dz4+Pjg7IG1kYltrKytdID0gdyYyNTU7IG1kYltrKytdID0gKHc+Pj44KSYyNTU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtZGIuc2xpY2UoMCxrKS50b1N0cmluZygndWNzMicpO1xuICAgIH07XG4gICAgbWFnaWNfZW5jb2RlWzY1MDAxXSA9IGZ1bmN0aW9uIHV0ZjhfZShkYXRhLCBvZm10KSB7XG4gICAgICBpZihoYXNfYnVmICYmIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICBpZighb2ZtdCB8fCBvZm10ID09PSAnYnVmJykgcmV0dXJuIGRhdGE7XG4gICAgICAgIGlmKG9mbXQgIT09ICdhcnInKSByZXR1cm4gZGF0YS50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgICAgIHJldHVybiBbXS5zbGljZS5jYWxsKGRhdGEpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoLCB3ID0gMCwgd3cgPSAwLCBqID0gMDtcbiAgICAgIHZhciBkaXJlY3QgPSB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIjtcbiAgICAgIGlmKDQgKiBsZW4gPiBtZGwpIHsgbWRsID0gNCAqIGxlbjsgbWRiID0gbmV3IEJ1ZmZlcihtZGwpOyB9XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgdyA9IGRpcmVjdCA/IGRhdGEuY2hhckNvZGVBdChpKSA6IGRhdGFbaV0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgaWYodyA8PSAweDAwN0YpIG1kYltqKytdID0gdztcbiAgICAgICAgZWxzZSBpZih3IDw9IDB4MDdGRikge1xuICAgICAgICAgIG1kYltqKytdID0gMTkyICsgKHcgPj4gNik7XG4gICAgICAgICAgbWRiW2orK10gPSAxMjggKyAodyY2Myk7XG4gICAgICAgIH0gZWxzZSBpZih3ID49IDB4RDgwMCAmJiB3IDw9IDB4REZGRikge1xuICAgICAgICAgIHcgLT0gMHhEODAwOyArK2k7XG4gICAgICAgICAgd3cgPSAoZGlyZWN0ID8gZGF0YS5jaGFyQ29kZUF0KGkpIDogZGF0YVtpXS5jaGFyQ29kZUF0KDApKSAtIDB4REMwMCArICh3IDw8IDEwKTtcbiAgICAgICAgICBtZGJbaisrXSA9IDI0MCArICgod3c+Pj4xOCkgJiAweDA3KTtcbiAgICAgICAgICBtZGJbaisrXSA9IDE0NCArICgod3c+Pj4xMikgJiAweDNGKTtcbiAgICAgICAgICBtZGJbaisrXSA9IDEyOCArICgod3c+Pj42KSAmIDB4M0YpO1xuICAgICAgICAgIG1kYltqKytdID0gMTI4ICsgKHd3ICYgMHgzRik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWRiW2orK10gPSAyMjQgKyAodyA+PiAxMik7XG4gICAgICAgICAgbWRiW2orK10gPSAxMjggKyAoKHcgPj4gNikmNjMpO1xuICAgICAgICAgIG1kYltqKytdID0gMTI4ICsgKHcmNjMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZighb2ZtdCB8fCBvZm10ID09PSAnYnVmJykgcmV0dXJuIG1kYi5zbGljZSgwLGopO1xuICAgICAgaWYob2ZtdCAhPT0gJ2FycicpIHJldHVybiBtZGIuc2xpY2UoMCxqKS50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgICByZXR1cm4gW10uc2xpY2UuY2FsbChtZGIsIDAsIGopO1xuICAgIH07XG4gIH1cblxuICB2YXIgZW5jYWNoZSA9IGZ1bmN0aW9uIGVuY2FjaGUoKSB7XG4gICAgaWYoaGFzX2J1Zikge1xuICAgICAgaWYoY3BkY2FjaGVbc2Jjc19jYWNoZVswXV0pIHJldHVybjtcbiAgICAgIHZhciBpPTAsIHM9MDtcbiAgICAgIGZvcihpID0gMDsgaSA8IHNiY3NfY2FjaGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcyA9IHNiY3NfY2FjaGVbaV07XG4gICAgICAgIGlmKGNwdFtzXSkge1xuICAgICAgICAgIGNwZGNhY2hlW3NdID0gc2Jjc19kZWNvZGUocyk7XG4gICAgICAgICAgY3BlY2FjaGVbc10gPSBzYmNzX2VuY29kZShzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yKGkgPSAwOyBpIDwgZGJjc19jYWNoZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBzID0gZGJjc19jYWNoZVtpXTtcbiAgICAgICAgaWYoY3B0W3NdKSB7XG4gICAgICAgICAgY3BkY2FjaGVbc10gPSBkYmNzX2RlY29kZShzKTtcbiAgICAgICAgICBjcGVjYWNoZVtzXSA9IGRiY3NfZW5jb2RlKHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IoaSA9IDA7IGkgPCBtYWdpY19jYWNoZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBzID0gbWFnaWNfY2FjaGVbaV07XG4gICAgICAgIGlmKG1hZ2ljX2RlY29kZVtzXSkgY3BkY2FjaGVbc10gPSBtYWdpY19kZWNvZGVbc107XG4gICAgICAgIGlmKG1hZ2ljX2VuY29kZVtzXSkgY3BlY2FjaGVbc10gPSBtYWdpY19lbmNvZGVbc107XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgbnVsbF9lbmMgPSBmdW5jdGlvbihkYXRhLCBvZm10KSB7IHZvaWQgb2ZtdDsgcmV0dXJuIFwiXCI7IH07XG4gIHZhciBjcF9kZWNhY2hlID0gZnVuY3Rpb24gY3BfZGVjYWNoZShjcCkgeyBkZWxldGUgY3BkY2FjaGVbY3BdOyBkZWxldGUgY3BlY2FjaGVbY3BdOyB9O1xuICB2YXIgZGVjYWNoZSA9IGZ1bmN0aW9uIGRlY2FjaGUoKSB7XG4gICAgaWYoaGFzX2J1Zikge1xuICAgICAgaWYoIWNwZGNhY2hlW3NiY3NfY2FjaGVbMF1dKSByZXR1cm47XG4gICAgICBzYmNzX2NhY2hlLmZvckVhY2goY3BfZGVjYWNoZSk7XG4gICAgICBkYmNzX2NhY2hlLmZvckVhY2goY3BfZGVjYWNoZSk7XG4gICAgICBtYWdpY19jYWNoZS5mb3JFYWNoKGNwX2RlY2FjaGUpO1xuICAgIH1cbiAgICBsYXN0X2VuYyA9IG51bGxfZW5jOyBsYXN0X2NwID0gMDtcbiAgfTtcbiAgdmFyIGNhY2hlID0ge1xuICAgIGVuY2FjaGU6IGVuY2FjaGUsXG4gICAgZGVjYWNoZTogZGVjYWNoZSxcbiAgICBzYmNzOiBzYmNzX2NhY2hlLFxuICAgIGRiY3M6IGRiY3NfY2FjaGVcbiAgfTtcblxuICBlbmNhY2hlKCk7XG5cbiAgdmFyIEJNID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7XG4gIHZhciBTZXREID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScoKSwtLi86P1wiO1xuICB2YXIgbGFzdF9lbmMgPSBudWxsX2VuYywgbGFzdF9jcCA9IDA7XG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoY3AsIGRhdGEsIG9mbXQpIHtcbiAgICBpZihjcCA9PT0gbGFzdF9jcCAmJiBsYXN0X2VuYykgeyByZXR1cm4gbGFzdF9lbmMoZGF0YSwgb2ZtdCk7IH1cbiAgICBpZihjcGVjYWNoZVtjcF0pIHsgbGFzdF9lbmMgPSBjcGVjYWNoZVtsYXN0X2NwPWNwXTsgcmV0dXJuIGxhc3RfZW5jKGRhdGEsIG9mbXQpOyB9XG4gICAgaWYoaGFzX2J1ZiAmJiBCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgIHZhciBvdXQgPSBoYXNfYnVmID8gbmV3IEJ1ZmZlcig0KmxlbikgOiBbXSwgdz0wLCBpPTAsIGogPSAwLCB3dz0wO1xuICAgIHZhciBDID0gY3B0W2NwXSwgRSwgTSA9IFwiXCI7XG4gICAgdmFyIGlzc3RyID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnO1xuICAgIGlmKEMgJiYgKEU9Qy5lbmMpKSBmb3IoaSA9IDA7IGkgPCBsZW47ICsraSwgKytqKSB7XG4gICAgICB3ID0gRVtpc3N0cj8gZGF0YS5jaGFyQXQoaSkgOiBkYXRhW2ldXTtcbiAgICAgIGlmKHcgPiAyNTUpIHtcbiAgICAgICAgb3V0W2pdID0gdz4+ODtcbiAgICAgICAgb3V0Wysral0gPSB3JjI1NTtcbiAgICAgIH0gZWxzZSBvdXRbal0gPSB3JjI1NTtcbiAgICB9XG4gICAgZWxzZSBpZigoTT1tYWdpY1tjcF0pKSBzd2l0Y2goTSkge1xuICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgaWYoaGFzX2J1ZiAmJiBpc3N0cikgeyBvdXQgPSBuZXcgQnVmZmVyKGRhdGEsIE0pOyBqID0gb3V0Lmxlbmd0aDsgYnJlYWs7IH1cbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyArK2ksICsraikge1xuICAgICAgICAgIHcgPSBpc3N0ciA/IGRhdGEuY2hhckNvZGVBdChpKSA6IGRhdGFbaV0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICBpZih3IDw9IDB4MDA3Rikgb3V0W2pdID0gdztcbiAgICAgICAgICBlbHNlIGlmKHcgPD0gMHgwN0ZGKSB7XG4gICAgICAgICAgICBvdXRbal0gICA9IDE5MiArICh3ID4+IDYpO1xuICAgICAgICAgICAgb3V0Wysral0gPSAxMjggKyAodyY2Myk7XG4gICAgICAgICAgfSBlbHNlIGlmKHcgPj0gMHhEODAwICYmIHcgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICB3IC09IDB4RDgwMDtcbiAgICAgICAgICAgIHd3ID0gKGlzc3RyID8gZGF0YS5jaGFyQ29kZUF0KCsraSkgOiBkYXRhWysraV0uY2hhckNvZGVBdCgwKSkgLSAweERDMDAgKyAodyA8PCAxMCk7XG4gICAgICAgICAgICBvdXRbal0gICA9IDI0MCArICgod3c+Pj4xOCkgJiAweDA3KTtcbiAgICAgICAgICAgIG91dFsrK2pdID0gMTQ0ICsgKCh3dz4+PjEyKSAmIDB4M0YpO1xuICAgICAgICAgICAgb3V0Wysral0gPSAxMjggKyAoKHd3Pj4+NikgJiAweDNGKTtcbiAgICAgICAgICAgIG91dFsrK2pdID0gMTI4ICsgKHd3ICYgMHgzRik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dFtqXSAgID0gMjI0ICsgKHcgPj4gMTIpO1xuICAgICAgICAgICAgb3V0Wysral0gPSAxMjggKyAoKHcgPj4gNikmNjMpO1xuICAgICAgICAgICAgb3V0Wysral0gPSAxMjggKyAodyY2Myk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFzY2lpXCI6XG4gICAgICAgIGlmKGhhc19idWYgJiYgdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHsgb3V0ID0gbmV3IEJ1ZmZlcihkYXRhLCBNKTsgaiA9IG91dC5sZW5ndGg7IGJyZWFrOyB9XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgKytpLCArK2opIHtcbiAgICAgICAgICB3ID0gaXNzdHIgPyBkYXRhLmNoYXJDb2RlQXQoaSkgOiBkYXRhW2ldLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgaWYodyA8PSAweDAwN0YpIG91dFtqXSA9IHc7XG4gICAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJiYWQgYXNjaWkgXCIgKyB3KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgIGlmKGhhc19idWYgJiYgdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHsgb3V0ID0gbmV3IEJ1ZmZlcihkYXRhLCBNKTsgaiA9IG91dC5sZW5ndGg7IGJyZWFrOyB9XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgdyA9IGlzc3RyID8gZGF0YS5jaGFyQ29kZUF0KGkpIDogZGF0YVtpXS5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgIG91dFtqKytdID0gdyYyNTU7XG4gICAgICAgICAgb3V0W2orK10gPSB3Pj44O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICB3ID0gaXNzdHIgPyBkYXRhLmNoYXJDb2RlQXQoaSkgOiBkYXRhW2ldLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgb3V0W2orK10gPSB3Pj44O1xuICAgICAgICAgIG91dFtqKytdID0gdyYyNTU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidXRmMzJsZVwiOlxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgIHcgPSBpc3N0ciA/IGRhdGEuY2hhckNvZGVBdChpKSA6IGRhdGFbaV0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICBpZih3ID49IDB4RDgwMCAmJiB3IDw9IDB4REZGRikgdyA9IDB4MTAwMDAgKyAoKHcgLSAweEQ4MDApIDw8IDEwKSArIChkYXRhWysraV0uY2hhckNvZGVBdCgwKSAtIDB4REMwMCk7XG4gICAgICAgICAgb3V0W2orK10gPSB3JjI1NTsgdyA+Pj0gODtcbiAgICAgICAgICBvdXRbaisrXSA9IHcmMjU1OyB3ID4+PSA4O1xuICAgICAgICAgIG91dFtqKytdID0gdyYyNTU7IHcgPj49IDg7XG4gICAgICAgICAgb3V0W2orK10gPSB3JjI1NTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ1dGYzMmJlXCI6XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgdyA9IGlzc3RyID8gZGF0YS5jaGFyQ29kZUF0KGkpIDogZGF0YVtpXS5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgIGlmKHcgPj0gMHhEODAwICYmIHcgPD0gMHhERkZGKSB3ID0gMHgxMDAwMCArICgodyAtIDB4RDgwMCkgPDwgMTApICsgKGRhdGFbKytpXS5jaGFyQ29kZUF0KDApIC0gMHhEQzAwKTtcbiAgICAgICAgICBvdXRbaiszXSA9IHcmMjU1OyB3ID4+PSA4O1xuICAgICAgICAgIG91dFtqKzJdID0gdyYyNTU7IHcgPj49IDg7XG4gICAgICAgICAgb3V0W2orMV0gPSB3JjI1NTsgdyA+Pj0gODtcbiAgICAgICAgICBvdXRbal0gPSB3JjI1NTtcbiAgICAgICAgICBqKz00O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInV0ZjdcIjpcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICB2YXIgYyA9IGlzc3RyID8gZGF0YS5jaGFyQXQoaSkgOiBkYXRhW2ldLmNoYXJBdCgwKTtcbiAgICAgICAgICBpZihjID09PSBcIitcIikgeyBvdXRbaisrXSA9IDB4MmI7IG91dFtqKytdID0gMHgyZDsgY29udGludWU7IH1cbiAgICAgICAgICBpZihTZXRELmluZGV4T2YoYykgPiAtMSkgeyBvdXRbaisrXSA9IGMuY2hhckNvZGVBdCgwKTsgY29udGludWU7IH1cbiAgICAgICAgICB2YXIgdHQgPSBlbmNvZGUoMTIwMSwgYyk7XG4gICAgICAgICAgb3V0W2orK10gPSAweDJiO1xuICAgICAgICAgIG91dFtqKytdID0gQk0uY2hhckNvZGVBdCh0dFswXT4+Mik7XG4gICAgICAgICAgb3V0W2orK10gPSBCTS5jaGFyQ29kZUF0KCgodHRbMF0mMHgwMyk8PDQpICsgKCh0dFsxXXx8MCk+PjQpKTtcbiAgICAgICAgICBvdXRbaisrXSA9IEJNLmNoYXJDb2RlQXQoKCh0dFsxXSYweDBGKTw8MikgKyAoKHR0WzJdfHwwKT4+NikpO1xuICAgICAgICAgIG91dFtqKytdID0gMHgyZDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIG1hZ2ljOiBcIiArIGNwICsgXCIgXCIgKyBtYWdpY1tjcF0pO1xuICAgIH1cbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBDUDogXCIgKyBjcCk7XG4gICAgb3V0ID0gb3V0LnNsaWNlKDAsaik7XG4gICAgaWYoIWhhc19idWYpIHJldHVybiAob2ZtdCA9PSAnc3RyJykgPyAob3V0KS5tYXAoc2ZjYykuam9pbihcIlwiKSA6IG91dDtcbiAgICBpZighb2ZtdCB8fCBvZm10ID09PSAnYnVmJykgcmV0dXJuIG91dDtcbiAgICBpZihvZm10ICE9PSAnYXJyJykgcmV0dXJuIG91dC50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgcmV0dXJuIFtdLnNsaWNlLmNhbGwob3V0KTtcbiAgfTtcbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShjcCwgZGF0YSkge1xuICAgIHZhciBGOyBpZigoRj1jcGRjYWNoZVtjcF0pKSByZXR1cm4gRihkYXRhKTtcbiAgICBpZih0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGRlY29kZShjcCwgZGF0YS5zcGxpdChcIlwiKS5tYXAoY2NhKSk7XG4gICAgdmFyIGxlbiA9IGRhdGEubGVuZ3RoLCBvdXQgPSBuZXcgQXJyYXkobGVuKSwgcz1cIlwiLCB3PTAsIGk9MCwgaj0xLCBrPTAsIHd3PTA7XG4gICAgdmFyIEMgPSBjcHRbY3BdLCBELCBNPVwiXCI7XG4gICAgaWYoQyAmJiAoRD1DLmRlYykpIHtcbiAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSs9aikge1xuICAgICAgICBqID0gMjtcbiAgICAgICAgcyA9IERbKGRhdGFbaV08PDgpKyBkYXRhW2krMV1dO1xuICAgICAgICBpZighcykge1xuICAgICAgICAgIGogPSAxO1xuICAgICAgICAgIHMgPSBEW2RhdGFbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFzKSB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBjb2RlOiAnICsgZGF0YVtpXSArICcgJyArIGRhdGFbaStqLTFdICsgJyAnICsgaSArICcgJyArIGogKyAnICcgKyBEW2RhdGFbaV1dKTtcbiAgICAgICAgb3V0W2srK10gPSBzO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmKChNPW1hZ2ljW2NwXSkpIHN3aXRjaChNKSB7XG4gICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICBpZihsZW4gPj0gMyAmJiBkYXRhWzBdID09IDB4RUYpIGlmKGRhdGFbMV0gPT0gMHhCQiAmJiBkYXRhWzJdID09IDB4QkYpIGkgPSAzO1xuICAgICAgICBmb3IoOyBpIDwgbGVuOyBpKz1qKSB7XG4gICAgICAgICAgaiA9IDE7XG4gICAgICAgICAgaWYoZGF0YVtpXSA8IDEyOCkgdyA9IGRhdGFbaV07XG4gICAgICAgICAgZWxzZSBpZihkYXRhW2ldIDwgMjI0KSB7IHc9KGRhdGFbaV0mMzEpKjY0KyhkYXRhW2krMV0mNjMpOyBqPTI7IH1cbiAgICAgICAgICBlbHNlIGlmKGRhdGFbaV0gPCAyNDApIHsgdz0oKGRhdGFbaV0mMTUpPDwxMikrKGRhdGFbaSsxXSY2MykqNjQrKGRhdGFbaSsyXSY2Myk7IGo9MzsgfVxuICAgICAgICAgIGVsc2UgeyB3PShkYXRhW2ldJjcpKjI2MjE0NCsoKGRhdGFbaSsxXSY2Myk8PDEyKSsoZGF0YVtpKzJdJjYzKSo2NCsoZGF0YVtpKzNdJjYzKTsgaj00OyB9XG4gICAgICAgICAgaWYodyA8IDY1NTM2KSB7IG91dFtrKytdID0gU3RyaW5nLmZyb21DaGFyQ29kZSh3KTsgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdyAtPSA2NTUzNjsgd3cgPSAweEQ4MDAgKyAoKHc+PjEwKSYxMDIzKTsgdyA9IDB4REMwMCArICh3JjEwMjMpO1xuICAgICAgICAgICAgb3V0W2srK10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHd3KTsgb3V0W2srK10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICBpZihoYXNfYnVmICYmIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgcmV0dXJuIGRhdGEudG9TdHJpbmcoTSk7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSBvdXRbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGFbaV0pO1xuICAgICAgICBrID0gbGVuOyBicmVhaztcbiAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgIGlmKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gMHhGRikgaWYoZGF0YVsxXSA9PSAweEZFKSBpID0gMjtcbiAgICAgICAgaWYoaGFzX2J1ZiAmJiBCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHJldHVybiBkYXRhLnRvU3RyaW5nKE0pO1xuICAgICAgICBqID0gMjtcbiAgICAgICAgZm9yKDsgaSsxIDwgbGVuOyBpKz1qKSB7XG4gICAgICAgICAgb3V0W2srK10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChkYXRhW2krMV08PDgpICsgZGF0YVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICBpZihsZW4gPj0gMiAmJiBkYXRhWzBdID09IDB4RkUpIGlmKGRhdGFbMV0gPT0gMHhGRikgaSA9IDI7XG4gICAgICAgIGogPSAyO1xuICAgICAgICBmb3IoOyBpKzEgPCBsZW47IGkrPWopIHtcbiAgICAgICAgICBvdXRbaysrXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGRhdGFbaV08PDgpICsgZGF0YVtpKzFdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ1dGYzMmxlXCI6XG4gICAgICAgIGlmKGxlbiA+PSA0ICYmIGRhdGFbMF0gPT0gMHhGRikgaWYoZGF0YVsxXSA9PSAweEZFICYmIGRhdGFbMl0gPT09IDAgJiYgZGF0YVszXSA9PT0gMCkgaSA9IDQ7XG4gICAgICAgIGogPSA0O1xuICAgICAgICBmb3IoOyBpIDwgbGVuOyBpKz1qKSB7XG4gICAgICAgICAgdyA9IChkYXRhW2krM108PDI0KSArIChkYXRhW2krMl08PDE2KSArIChkYXRhW2krMV08PDgpICsgKGRhdGFbaV0pO1xuICAgICAgICAgIGlmKHcgPiAweEZGRkYpIHtcbiAgICAgICAgICAgIHcgLT0gMHgxMDAwMDtcbiAgICAgICAgICAgIG91dFtrKytdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDAgKyAoKHcgPj4gMTApICYgMHgzRkYpKTtcbiAgICAgICAgICAgIG91dFtrKytdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgKyAodyAmIDB4M0ZGKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Ugb3V0W2srK10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInV0ZjMyYmVcIjpcbiAgICAgICAgaWYobGVuID49IDQgJiYgZGF0YVszXSA9PSAweEZGKSBpZihkYXRhWzJdID09IDB4RkUgJiYgZGF0YVsxXSA9PT0gMCAmJiBkYXRhWzBdID09PSAwKSBpID0gNDtcbiAgICAgICAgaiA9IDQ7XG4gICAgICAgIGZvcig7IGkgPCBsZW47IGkrPWopIHtcbiAgICAgICAgICB3ID0gKGRhdGFbaV08PDI0KSArIChkYXRhW2krMV08PDE2KSArIChkYXRhW2krMl08PDgpICsgKGRhdGFbaSszXSk7XG4gICAgICAgICAgaWYodyA+IDB4RkZGRikge1xuICAgICAgICAgICAgdyAtPSAweDEwMDAwO1xuICAgICAgICAgICAgb3V0W2srK10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgwMCArICgodyA+PiAxMCkgJiAweDNGRikpO1xuICAgICAgICAgICAgb3V0W2srK10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4REMwMCArICh3ICYgMHgzRkYpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBvdXRbaysrXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidXRmN1wiOlxuICAgICAgICBpZihsZW4gPj0gNCAmJiBkYXRhWzBdID09IDB4MkIgJiYgZGF0YVsxXSA9PSAweDJGICYmIGRhdGFbMl0gPT0gMHg3Nikge1xuICAgICAgICAgIGlmKGxlbiA+PSA1ICYmIGRhdGFbM10gPT0gMHgzOCAmJiBkYXRhWzRdID09IDB4MkQpIGkgPSA1O1xuICAgICAgICAgIGVsc2UgaWYoZGF0YVszXSA9PSAweDM4IHx8IGRhdGFbM10gPT0gMHgzOSB8fCBkYXRhWzNdID09IDB4MkIgfHwgZGF0YVszXSA9PSAweDJGKSBpID0gNDtcbiAgICAgICAgfVxuICAgICAgICBmb3IoOyBpIDwgbGVuOyBpKz1qKSB7XG4gICAgICAgICAgaWYoZGF0YVtpXSAhPT0gMHgyYikgeyBqPTE7IG91dFtrKytdID0gU3RyaW5nLmZyb21DaGFyQ29kZShkYXRhW2ldKTsgY29udGludWU7IH1cbiAgICAgICAgICBqPTE7XG4gICAgICAgICAgaWYoZGF0YVtpKzFdID09PSAweDJkKSB7IGogPSAyOyBvdXRbaysrXSA9IFwiK1wiOyBjb250aW51ZTsgfVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgICAgICAgIHdoaWxlKFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0YVtpK2pdKS5tYXRjaCgvW0EtWmEtejAtOStcXC9dLykpIGorKztcbiAgICAgICAgICB2YXIgZGFzaCA9IDA7XG4gICAgICAgICAgaWYoZGF0YVtpK2pdID09PSAweDJkKSB7ICsrajsgZGFzaD0xOyB9XG4gICAgICAgICAgdmFyIHR0ID0gW107XG4gICAgICAgICAgdmFyIG82NCA9IFwiXCI7XG4gICAgICAgICAgdmFyIGMxPTAsIGMyPTAsIGMzPTA7XG4gICAgICAgICAgdmFyIGUxPTAsIGUyPTAsIGUzPTAsIGU0PTA7XG4gICAgICAgICAgZm9yKHZhciBsID0gMTsgbCA8IGogLSBkYXNoOykge1xuICAgICAgICAgICAgZTEgPSBCTS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0YVtpK2wrK10pKTtcbiAgICAgICAgICAgIGUyID0gQk0uaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGFbaStsKytdKSk7XG4gICAgICAgICAgICBjMSA9IGUxIDw8IDIgfCBlMiA+PiA0O1xuICAgICAgICAgICAgdHQucHVzaChjMSk7XG4gICAgICAgICAgICBlMyA9IEJNLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShkYXRhW2krbCsrXSkpO1xuICAgICAgICAgICAgaWYoZTMgPT09IC0xKSBicmVhaztcbiAgICAgICAgICAgIGMyID0gKGUyICYgMTUpIDw8IDQgfCBlMyA+PiAyO1xuICAgICAgICAgICAgdHQucHVzaChjMik7XG4gICAgICAgICAgICBlNCA9IEJNLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShkYXRhW2krbCsrXSkpO1xuICAgICAgICAgICAgaWYoZTQgPT09IC0xKSBicmVhaztcbiAgICAgICAgICAgIGMzID0gKGUzICYgMykgPDwgNiB8IGU0O1xuICAgICAgICAgICAgaWYoZTQgPCA2NCkgdHQucHVzaChjMyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG82NCA9IGRlY29kZSgxMjAxLCB0dCk7XG4gICAgICAgICAgZm9yKGwgPSAwOyBsIDwgbzY0Lmxlbmd0aDsgKytsKSBvdXRbaysrXSA9IG82NC5jaGFyQXQobCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBtYWdpYzogXCIgKyBjcCArIFwiIFwiICsgbWFnaWNbY3BdKTtcbiAgICB9XG4gICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgQ1A6IFwiICsgY3ApO1xuICAgIHJldHVybiBvdXQuc2xpY2UoMCxrKS5qb2luKFwiXCIpO1xuICB9O1xuICB2YXIgaGFzY3AgPSBmdW5jdGlvbiBoYXNjcChjcCkgeyByZXR1cm4gISEoY3B0W2NwXSB8fCBtYWdpY1tjcF0pOyB9O1xuICBjcHQudXRpbHMgPSB7IGRlY29kZTogZGVjb2RlLCBlbmNvZGU6IGVuY29kZSwgaGFzY3A6IGhhc2NwLCBtYWdpYzogbWFnaWMsIGNhY2hlOmNhY2hlIH07XG4gIHJldHVybiBjcHQ7XG59KSk7XG4iLCIvKiFcblxuSlNaaXAgLSBBIEphdmFzY3JpcHQgY2xhc3MgZm9yIGdlbmVyYXRpbmcgYW5kIHJlYWRpbmcgemlwIGZpbGVzXG48aHR0cDovL3N0dWFydGsuY29tL2pzemlwPlxuXG4oYykgMjAwOS0yMDE0IFN0dWFydCBLbmlnaHRsZXkgPHN0dWFydCBbYXRdIHN0dWFydGsuY29tPlxuRHVhbCBsaWNlbmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2Ugb3IgR1BMdjMuIFNlZSBodHRwczovL3Jhdy5naXRodWIuY29tL1N0dWsvanN6aXAvbWFzdGVyL0xJQ0VOU0UubWFya2Rvd24uXG5cbkpTWmlwIHVzZXMgdGhlIGxpYnJhcnkgcGFrbyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgOlxuaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9wYWtvL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiovXG4oZnVuY3Rpb24oZSl7XG5cdGlmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiZcInVuZGVmaW5lZFwiPT10eXBlb2YgRE9fTk9UX0VYUE9SVF9KU1pJUCltb2R1bGUuZXhwb3J0cz1lKCk7XG5cdGVsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKXtKU1ppcD1lKCk7ZGVmaW5lKFtdLGUpO31cblx0ZWxzZXtcblx0XHR2YXIgZjtcblx0XHRcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P2Y9d2luZG93OlxuXHRcdFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Zj1nbG9iYWw6XG5cdFx0XCJ1bmRlZmluZWRcIiE9dHlwZW9mICQgJiYgJC5nbG9iYWw/Zj0kLmdsb2JhbDpcblx0XHRcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmKGY9c2VsZiksZi5KU1ppcD1lKClcblx0fVxufShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0Jztcbi8vIHByaXZhdGUgcHJvcGVydHlcbnZhciBfa2V5U3RyID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO1xuXG5cbi8vIHB1YmxpYyBtZXRob2QgZm9yIGVuY29kaW5nXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uKGlucHV0LCB1dGY4KSB7XG4gICAgdmFyIG91dHB1dCA9IFwiXCI7XG4gICAgdmFyIGNocjEsIGNocjIsIGNocjMsIGVuYzEsIGVuYzIsIGVuYzMsIGVuYzQ7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcblxuICAgICAgICBjaHIxID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xuICAgICAgICBjaHIyID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xuICAgICAgICBjaHIzID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xuXG4gICAgICAgIGVuYzEgPSBjaHIxID4+IDI7XG4gICAgICAgIGVuYzIgPSAoKGNocjEgJiAzKSA8PCA0KSB8IChjaHIyID4+IDQpO1xuICAgICAgICBlbmMzID0gKChjaHIyICYgMTUpIDw8IDIpIHwgKGNocjMgPj4gNik7XG4gICAgICAgIGVuYzQgPSBjaHIzICYgNjM7XG5cbiAgICAgICAgaWYgKGlzTmFOKGNocjIpKSB7XG4gICAgICAgICAgICBlbmMzID0gZW5jNCA9IDY0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTmFOKGNocjMpKSB7XG4gICAgICAgICAgICBlbmM0ID0gNjQ7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBfa2V5U3RyLmNoYXJBdChlbmMxKSArIF9rZXlTdHIuY2hhckF0KGVuYzIpICsgX2tleVN0ci5jaGFyQXQoZW5jMykgKyBfa2V5U3RyLmNoYXJBdChlbmM0KTtcblxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vLyBwdWJsaWMgbWV0aG9kIGZvciBkZWNvZGluZ1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbihpbnB1dCwgdXRmOCkge1xuICAgIHZhciBvdXRwdXQgPSBcIlwiO1xuICAgIHZhciBjaHIxLCBjaHIyLCBjaHIzO1xuICAgIHZhciBlbmMxLCBlbmMyLCBlbmMzLCBlbmM0O1xuICAgIHZhciBpID0gMDtcblxuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9cXD1dL2csIFwiXCIpO1xuXG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcblxuICAgICAgICBlbmMxID0gX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcbiAgICAgICAgZW5jMiA9IF9rZXlTdHIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG4gICAgICAgIGVuYzMgPSBfa2V5U3RyLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xuICAgICAgICBlbmM0ID0gX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcblxuICAgICAgICBjaHIxID0gKGVuYzEgPDwgMikgfCAoZW5jMiA+PiA0KTtcbiAgICAgICAgY2hyMiA9ICgoZW5jMiAmIDE1KSA8PCA0KSB8IChlbmMzID4+IDIpO1xuICAgICAgICBjaHIzID0gKChlbmMzICYgMykgPDwgNikgfCBlbmM0O1xuXG4gICAgICAgIG91dHB1dCA9IG91dHB1dCArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7XG5cbiAgICAgICAgaWYgKGVuYzMgIT0gNjQpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuYzQgIT0gNjQpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMyk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG5cbn07XG5cbn0se31dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuZnVuY3Rpb24gQ29tcHJlc3NlZE9iamVjdCgpIHtcbiAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gMDtcbiAgICB0aGlzLnVuY29tcHJlc3NlZFNpemUgPSAwO1xuICAgIHRoaXMuY3JjMzIgPSAwO1xuICAgIHRoaXMuY29tcHJlc3Npb25NZXRob2QgPSBudWxsO1xuICAgIHRoaXMuY29tcHJlc3NlZENvbnRlbnQgPSBudWxsO1xufVxuXG5Db21wcmVzc2VkT2JqZWN0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGRlY29tcHJlc3NlZCBjb250ZW50IGluIGFuIHVuc3BlY2lmaWVkIGZvcm1hdC5cbiAgICAgKiBUaGUgZm9ybWF0IHdpbGwgZGVwZW5kIG9uIHRoZSBkZWNvbXByZXNzb3IuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSB0aGUgZGVjb21wcmVzc2VkIGNvbnRlbnQuXG4gICAgICovXG4gICAgZ2V0Q29udGVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsOyAvLyBzZWUgaW1wbGVtZW50YXRpb25cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY29tcHJlc3NlZCBjb250ZW50IGluIGFuIHVuc3BlY2lmaWVkIGZvcm1hdC5cbiAgICAgKiBUaGUgZm9ybWF0IHdpbGwgZGVwZW5kIG9uIHRoZSBjb21wcmVzc2VkIGNvbnRlbiBzb3VyY2UuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSB0aGUgY29tcHJlc3NlZCBjb250ZW50LlxuICAgICAqL1xuICAgIGdldENvbXByZXNzZWRDb250ZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7IC8vIHNlZSBpbXBsZW1lbnRhdGlvblxuICAgIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IENvbXByZXNzZWRPYmplY3Q7XG5cbn0se31dLDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuZXhwb3J0cy5TVE9SRSA9IHtcbiAgICBtYWdpYzogXCJcXHgwMFxceDAwXCIsXG4gICAgY29tcHJlc3M6IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7IC8vIG5vIGNvbXByZXNzaW9uXG4gICAgfSxcbiAgICB1bmNvbXByZXNzOiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50OyAvLyBubyBjb21wcmVzc2lvblxuICAgIH0sXG4gICAgY29tcHJlc3NJbnB1dFR5cGU6IG51bGwsXG4gICAgdW5jb21wcmVzc0lucHV0VHlwZTogbnVsbFxufTtcbmV4cG9ydHMuREVGTEFURSA9IF9kZXJlcV8oJy4vZmxhdGUnKTtcblxufSx7XCIuL2ZsYXRlXCI6OH1dLDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7XG5cbnZhciB0YWJsZSA9IFtcbiAgICAweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweEVFMEU2MTJDLCAweDk5MDk1MUJBLFxuICAgIDB4MDc2REM0MTksIDB4NzA2QUY0OEYsIDB4RTk2M0E1MzUsIDB4OUU2NDk1QTMsXG4gICAgMHgwRURCODgzMiwgMHg3OURDQjhBNCwgMHhFMEQ1RTkxRSwgMHg5N0QyRDk4OCxcbiAgICAweDA5QjY0QzJCLCAweDdFQjE3Q0JELCAweEU3QjgyRDA3LCAweDkwQkYxRDkxLFxuICAgIDB4MURCNzEwNjQsIDB4NkFCMDIwRjIsIDB4RjNCOTcxNDgsIDB4ODRCRTQxREUsXG4gICAgMHgxQURBRDQ3RCwgMHg2RERERTRFQiwgMHhGNEQ0QjU1MSwgMHg4M0QzODVDNyxcbiAgICAweDEzNkM5ODU2LCAweDY0NkJBOEMwLCAweEZENjJGOTdBLCAweDhBNjVDOUVDLFxuICAgIDB4MTQwMTVDNEYsIDB4NjMwNjZDRDksIDB4RkEwRjNENjMsIDB4OEQwODBERjUsXG4gICAgMHgzQjZFMjBDOCwgMHg0QzY5MTA1RSwgMHhENTYwNDFFNCwgMHhBMjY3NzE3MixcbiAgICAweDNDMDNFNEQxLCAweDRCMDRENDQ3LCAweEQyMEQ4NUZELCAweEE1MEFCNTZCLFxuICAgIDB4MzVCNUE4RkEsIDB4NDJCMjk4NkMsIDB4REJCQkM5RDYsIDB4QUNCQ0Y5NDAsXG4gICAgMHgzMkQ4NkNFMywgMHg0NURGNUM3NSwgMHhEQ0Q2MERDRiwgMHhBQkQxM0Q1OSxcbiAgICAweDI2RDkzMEFDLCAweDUxREUwMDNBLCAweEM4RDc1MTgwLCAweEJGRDA2MTE2LFxuICAgIDB4MjFCNEY0QjUsIDB4NTZCM0M0MjMsIDB4Q0ZCQTk1OTksIDB4QjhCREE1MEYsXG4gICAgMHgyODAyQjg5RSwgMHg1RjA1ODgwOCwgMHhDNjBDRDlCMiwgMHhCMTBCRTkyNCxcbiAgICAweDJGNkY3Qzg3LCAweDU4Njg0QzExLCAweEMxNjExREFCLCAweEI2NjYyRDNELFxuICAgIDB4NzZEQzQxOTAsIDB4MDFEQjcxMDYsIDB4OThEMjIwQkMsIDB4RUZENTEwMkEsXG4gICAgMHg3MUIxODU4OSwgMHgwNkI2QjUxRiwgMHg5RkJGRTRBNSwgMHhFOEI4RDQzMyxcbiAgICAweDc4MDdDOUEyLCAweDBGMDBGOTM0LCAweDk2MDlBODhFLCAweEUxMEU5ODE4LFxuICAgIDB4N0Y2QTBEQkIsIDB4MDg2RDNEMkQsIDB4OTE2NDZDOTcsIDB4RTY2MzVDMDEsXG4gICAgMHg2QjZCNTFGNCwgMHgxQzZDNjE2MiwgMHg4NTY1MzBEOCwgMHhGMjYyMDA0RSxcbiAgICAweDZDMDY5NUVELCAweDFCMDFBNTdCLCAweDgyMDhGNEMxLCAweEY1MEZDNDU3LFxuICAgIDB4NjVCMEQ5QzYsIDB4MTJCN0U5NTAsIDB4OEJCRUI4RUEsIDB4RkNCOTg4N0MsXG4gICAgMHg2MkREMURERiwgMHgxNURBMkQ0OSwgMHg4Q0QzN0NGMywgMHhGQkQ0NEM2NSxcbiAgICAweDREQjI2MTU4LCAweDNBQjU1MUNFLCAweEEzQkMwMDc0LCAweEQ0QkIzMEUyLFxuICAgIDB4NEFERkE1NDEsIDB4M0REODk1RDcsIDB4QTREMUM0NkQsIDB4RDNENkY0RkIsXG4gICAgMHg0MzY5RTk2QSwgMHgzNDZFRDlGQywgMHhBRDY3ODg0NiwgMHhEQTYwQjhEMCxcbiAgICAweDQ0MDQyRDczLCAweDMzMDMxREU1LCAweEFBMEE0QzVGLCAweEREMEQ3Q0M5LFxuICAgIDB4NTAwNTcxM0MsIDB4MjcwMjQxQUEsIDB4QkUwQjEwMTAsIDB4QzkwQzIwODYsXG4gICAgMHg1NzY4QjUyNSwgMHgyMDZGODVCMywgMHhCOTY2RDQwOSwgMHhDRTYxRTQ5RixcbiAgICAweDVFREVGOTBFLCAweDI5RDlDOTk4LCAweEIwRDA5ODIyLCAweEM3RDdBOEI0LFxuICAgIDB4NTlCMzNEMTcsIDB4MkVCNDBEODEsIDB4QjdCRDVDM0IsIDB4QzBCQTZDQUQsXG4gICAgMHhFREI4ODMyMCwgMHg5QUJGQjNCNiwgMHgwM0I2RTIwQywgMHg3NEIxRDI5QSxcbiAgICAweEVBRDU0NzM5LCAweDlERDI3N0FGLCAweDA0REIyNjE1LCAweDczREMxNjgzLFxuICAgIDB4RTM2MzBCMTIsIDB4OTQ2NDNCODQsIDB4MEQ2RDZBM0UsIDB4N0E2QTVBQTgsXG4gICAgMHhFNDBFQ0YwQiwgMHg5MzA5RkY5RCwgMHgwQTAwQUUyNywgMHg3RDA3OUVCMSxcbiAgICAweEYwMEY5MzQ0LCAweDg3MDhBM0QyLCAweDFFMDFGMjY4LCAweDY5MDZDMkZFLFxuICAgIDB4Rjc2MjU3NUQsIDB4ODA2NTY3Q0IsIDB4MTk2QzM2NzEsIDB4NkU2QjA2RTcsXG4gICAgMHhGRUQ0MUI3NiwgMHg4OUQzMkJFMCwgMHgxMERBN0E1QSwgMHg2N0RENEFDQyxcbiAgICAweEY5QjlERjZGLCAweDhFQkVFRkY5LCAweDE3QjdCRTQzLCAweDYwQjA4RUQ1LFxuICAgIDB4RDZENkEzRTgsIDB4QTFEMTkzN0UsIDB4MzhEOEMyQzQsIDB4NEZERkYyNTIsXG4gICAgMHhEMUJCNjdGMSwgMHhBNkJDNTc2NywgMHgzRkI1MDZERCwgMHg0OEIyMzY0QixcbiAgICAweEQ4MEQyQkRBLCAweEFGMEExQjRDLCAweDM2MDM0QUY2LCAweDQxMDQ3QTYwLFxuICAgIDB4REY2MEVGQzMsIDB4QTg2N0RGNTUsIDB4MzE2RThFRUYsIDB4NDY2OUJFNzksXG4gICAgMHhDQjYxQjM4QywgMHhCQzY2ODMxQSwgMHgyNTZGRDJBMCwgMHg1MjY4RTIzNixcbiAgICAweENDMEM3Nzk1LCAweEJCMEI0NzAzLCAweDIyMDIxNkI5LCAweDU1MDUyNjJGLFxuICAgIDB4QzVCQTNCQkUsIDB4QjJCRDBCMjgsIDB4MkJCNDVBOTIsIDB4NUNCMzZBMDQsXG4gICAgMHhDMkQ3RkZBNywgMHhCNUQwQ0YzMSwgMHgyQ0Q5OUU4QiwgMHg1QkRFQUUxRCxcbiAgICAweDlCNjRDMkIwLCAweEVDNjNGMjI2LCAweDc1NkFBMzlDLCAweDAyNkQ5MzBBLFxuICAgIDB4OUMwOTA2QTksIDB4RUIwRTM2M0YsIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsXG4gICAgMHg5NUJGNEE4MiwgMHhFMkI4N0ExNCwgMHg3QkIxMkJBRSwgMHgwQ0I2MUIzOCxcbiAgICAweDkyRDI4RTlCLCAweEU1RDVCRTBELCAweDdDRENFRkI3LCAweDBCREJERjIxLFxuICAgIDB4ODZEM0QyRDQsIDB4RjFENEUyNDIsIDB4NjhEREIzRjgsIDB4MUZEQTgzNkUsXG4gICAgMHg4MUJFMTZDRCwgMHhGNkI5MjY1QiwgMHg2RkIwNzdFMSwgMHgxOEI3NDc3NyxcbiAgICAweDg4MDg1QUU2LCAweEZGMEY2QTcwLCAweDY2MDYzQkNBLCAweDExMDEwQjVDLFxuICAgIDB4OEY2NTlFRkYsIDB4Rjg2MkFFNjksIDB4NjE2QkZGRDMsIDB4MTY2Q0NGNDUsXG4gICAgMHhBMDBBRTI3OCwgMHhENzBERDJFRSwgMHg0RTA0ODM1NCwgMHgzOTAzQjNDMixcbiAgICAweEE3NjcyNjYxLCAweEQwNjAxNkY3LCAweDQ5Njk0NzRELCAweDNFNkU3N0RCLFxuICAgIDB4QUVEMTZBNEEsIDB4RDlENjVBREMsIDB4NDBERjBCNjYsIDB4MzdEODNCRjAsXG4gICAgMHhBOUJDQUU1MywgMHhERUJCOUVDNSwgMHg0N0IyQ0Y3RiwgMHgzMEI1RkZFOSxcbiAgICAweEJEQkRGMjFDLCAweENBQkFDMjhBLCAweDUzQjM5MzMwLCAweDI0QjRBM0E2LFxuICAgIDB4QkFEMDM2MDUsIDB4Q0RENzA2OTMsIDB4NTRERTU3MjksIDB4MjNEOTY3QkYsXG4gICAgMHhCMzY2N0EyRSwgMHhDNDYxNEFCOCwgMHg1RDY4MUIwMiwgMHgyQTZGMkI5NCxcbiAgICAweEI0MEJCRTM3LCAweEMzMEM4RUExLCAweDVBMDVERjFCLCAweDJEMDJFRjhEXG5dO1xuXG4vKipcbiAqXG4gKiAgSmF2YXNjcmlwdCBjcmMzMlxuICogIGh0dHA6Ly93d3cud2VidG9vbGtpdC5pbmZvL1xuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmMzMihpbnB1dCwgY3JjKSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHZhciBpc0FycmF5ID0gdXRpbHMuZ2V0VHlwZU9mKGlucHV0KSAhPT0gXCJzdHJpbmdcIjtcblxuICAgIGlmICh0eXBlb2YoY3JjKSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGNyYyA9IDA7XG4gICAgfVxuICAgIHZhciB4ID0gMDtcbiAgICB2YXIgeSA9IDA7XG4gICAgdmFyIGIgPSAwO1xuXG4gICAgY3JjID0gY3JjIF4gKC0xKTtcbiAgICBmb3IgKHZhciBpID0gMCwgaVRvcCA9IGlucHV0Lmxlbmd0aDsgaSA8IGlUb3A7IGkrKykge1xuICAgICAgICBiID0gaXNBcnJheSA/IGlucHV0W2ldIDogaW5wdXQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgeSA9IChjcmMgXiBiKSAmIDB4RkY7XG4gICAgICAgIHggPSB0YWJsZVt5XTtcbiAgICAgICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB4O1xuICAgIH1cblxuICAgIHJldHVybiBjcmMgXiAoLTEpO1xufTtcbi8vIHZpbTogc2V0IHNoaWZ0d2lkdGg9NCBzb2Z0dGFic3RvcD00OlxuXG59LHtcIi4vdXRpbHNcIjoyMX1dLDU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscycpO1xuXG5mdW5jdGlvbiBEYXRhUmVhZGVyKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBudWxsOyAvLyB0eXBlIDogc2VlIGltcGxlbWVudGF0aW9uXG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaW5kZXggPSAwO1xufVxuRGF0YVJlYWRlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhhdCB0aGUgb2Zmc2V0IHdpbGwgbm90IGdvIHRvbyBmYXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9mZnNldCB0aGUgYWRkaXRpb25hbCBvZmZzZXQgdG8gY2hlY2suXG4gICAgICogQHRocm93cyB7RXJyb3J9IGFuIEVycm9yIGlmIHRoZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kcy5cbiAgICAgKi9cbiAgICBjaGVja09mZnNldDogZnVuY3Rpb24ob2Zmc2V0KSB7XG4gICAgICAgIHRoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4ICsgb2Zmc2V0KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENoZWNrIHRoYXQgdGhlIHNwZWNpZmVkIGluZGV4IHdpbGwgbm90IGJlIHRvbyBmYXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld0luZGV4IHRoZSBpbmRleCB0byBjaGVjay5cbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gYW4gRXJyb3IgaWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuXG4gICAgICovXG4gICAgY2hlY2tJbmRleDogZnVuY3Rpb24obmV3SW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoIDwgbmV3SW5kZXggfHwgbmV3SW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9IFwiICsgdGhpcy5sZW5ndGggKyBcIiwgYXNrZWQgaW5kZXggPSBcIiArIChuZXdJbmRleCkgKyBcIikuIENvcnJ1cHRlZCB6aXAgP1wiKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSBpbmRleC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbmV3SW5kZXggVGhlIG5ldyBpbmRleC5cbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIG5ldyBpbmRleCBpcyBvdXQgb2YgdGhlIGRhdGEuXG4gICAgICovXG4gICAgc2V0SW5kZXg6IGZ1bmN0aW9uKG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMuY2hlY2tJbmRleChuZXdJbmRleCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBuZXdJbmRleDtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIG5leHQgbiBieXRlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAuXG4gICAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBuZXcgaW5kZXggaXMgb3V0IG9mIHRoZSBkYXRhLlxuICAgICAqL1xuICAgIHNraXA6IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdGhpcy5zZXRJbmRleCh0aGlzLmluZGV4ICsgbik7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGJ5dGUgYXQgdGhlIHNwZWNpZmllZCBpbmRleC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaSB0aGUgaW5kZXggdG8gdXNlLlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gYSBieXRlLlxuICAgICAqL1xuICAgIGJ5dGVBdDogZnVuY3Rpb24oaSkge1xuICAgICAgICAvLyBzZWUgaW1wbGVtZW50YXRpb25zXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG5leHQgbnVtYmVyIHdpdGggYSBnaXZlbiBieXRlIHNpemUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGNvcnJlc3BvbmRpbmcgbnVtYmVyLlxuICAgICAqL1xuICAgIHJlYWRJbnQ6IGZ1bmN0aW9uKHNpemUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICB0aGlzLmNoZWNrT2Zmc2V0KHNpemUpO1xuICAgICAgICBmb3IgKGkgPSB0aGlzLmluZGV4ICsgc2l6ZSAtIDE7IGkgPj0gdGhpcy5pbmRleDsgaS0tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IDw8IDgpICsgdGhpcy5ieXRlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleCArPSBzaXplO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBuZXh0IHN0cmluZyB3aXRoIGEgZ2l2ZW4gYnl0ZSBzaXplLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZy5cbiAgICAgKi9cbiAgICByZWFkU3RyaW5nOiBmdW5jdGlvbihzaXplKSB7XG4gICAgICAgIHJldHVybiB1dGlscy50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLCB0aGlzLnJlYWREYXRhKHNpemUpKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEdldCByYXcgZGF0YSB3aXRob3V0IGNvbnZlcnNpb24sIDxzaXplPiBieXRlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSB0aGUgcmF3IGRhdGEsIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLlxuICAgICAqL1xuICAgIHJlYWREYXRhOiBmdW5jdGlvbihzaXplKSB7XG4gICAgICAgIC8vIHNlZSBpbXBsZW1lbnRhdGlvbnNcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGxhc3Qgb2NjdXJlbmNlIG9mIGEgemlwIHNpZ25hdHVyZSAoNCBieXRlcykuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZyB0aGUgc2lnbmF0dXJlIHRvIGZpbmQuXG4gICAgICogQHJldHVybiB7bnVtYmVyfSB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJlbmNlLCAtMSBpZiBub3QgZm91bmQuXG4gICAgICovXG4gICAgbGFzdEluZGV4T2ZTaWduYXR1cmU6IGZ1bmN0aW9uKHNpZykge1xuICAgICAgICAvLyBzZWUgaW1wbGVtZW50YXRpb25zXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG5leHQgZGF0ZS5cbiAgICAgKiBAcmV0dXJuIHtEYXRlfSB0aGUgZGF0ZS5cbiAgICAgKi9cbiAgICByZWFkRGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkb3N0aW1lID0gdGhpcy5yZWFkSW50KDQpO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICgoZG9zdGltZSA+PiAyNSkgJiAweDdmKSArIDE5ODAsIC8vIHllYXJcbiAgICAgICAgKChkb3N0aW1lID4+IDIxKSAmIDB4MGYpIC0gMSwgLy8gbW9udGhcbiAgICAgICAgKGRvc3RpbWUgPj4gMTYpICYgMHgxZiwgLy8gZGF5XG4gICAgICAgIChkb3N0aW1lID4+IDExKSAmIDB4MWYsIC8vIGhvdXJcbiAgICAgICAgKGRvc3RpbWUgPj4gNSkgJiAweDNmLCAvLyBtaW51dGVcbiAgICAgICAgKGRvc3RpbWUgJiAweDFmKSA8PCAxKTsgLy8gc2Vjb25kXG4gICAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gRGF0YVJlYWRlcjtcblxufSx7XCIuL3V0aWxzXCI6MjF9XSw2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcbmV4cG9ydHMuYmFzZTY0ID0gZmFsc2U7XG5leHBvcnRzLmJpbmFyeSA9IGZhbHNlO1xuZXhwb3J0cy5kaXIgPSBmYWxzZTtcbmV4cG9ydHMuY3JlYXRlRm9sZGVycyA9IGZhbHNlO1xuZXhwb3J0cy5kYXRlID0gbnVsbDtcbmV4cG9ydHMuY29tcHJlc3Npb24gPSBudWxsO1xuZXhwb3J0cy5jb21tZW50ID0gbnVsbDtcblxufSx7fV0sNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0cy5zdHJpbmcyYmluYXJ5ID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHV0aWxzLnN0cmluZzJiaW5hcnkoc3RyKTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0cy5zdHJpbmcyVWludDhBcnJheSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB1dGlscy50cmFuc2Zvcm1UbyhcInVpbnQ4YXJyYXlcIiwgc3RyKTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0cy51aW50OEFycmF5MlN0cmluZyA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyYW5zZm9ybVRvKFwic3RyaW5nXCIsIGFycmF5KTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0cy5zdHJpbmcyQmxvYiA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWZmZXIgPSB1dGlscy50cmFuc2Zvcm1UbyhcImFycmF5YnVmZmVyXCIsIHN0cik7XG4gICAgcmV0dXJuIHV0aWxzLmFycmF5QnVmZmVyMkJsb2IoYnVmZmVyKTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0cy5hcnJheUJ1ZmZlcjJCbG9iID0gZnVuY3Rpb24oYnVmZmVyKSB7XG4gICAgcmV0dXJuIHV0aWxzLmFycmF5QnVmZmVyMkJsb2IoYnVmZmVyKTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0cy50cmFuc2Zvcm1UbyA9IGZ1bmN0aW9uKG91dHB1dFR5cGUsIGlucHV0KSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyYW5zZm9ybVRvKG91dHB1dFR5cGUsIGlucHV0KTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0cy5nZXRUeXBlT2YgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgIHJldHVybiB1dGlscy5nZXRUeXBlT2YoaW5wdXQpO1xufTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LlxuICovXG5leHBvcnRzLmNoZWNrU3VwcG9ydCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICByZXR1cm4gdXRpbHMuY2hlY2tTdXBwb3J0KHR5cGUpO1xufTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogVGhpcyB2YWx1ZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LlxuICovXG5leHBvcnRzLk1BWF9WQUxVRV8xNkJJVFMgPSB1dGlscy5NQVhfVkFMVUVfMTZCSVRTO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBUaGlzIHZhbHVlIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gKi9cbmV4cG9ydHMuTUFYX1ZBTFVFXzMyQklUUyA9IHV0aWxzLk1BWF9WQUxVRV8zMkJJVFM7XG5cblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LlxuICovXG5leHBvcnRzLnByZXR0eSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB1dGlscy5wcmV0dHkoc3RyKTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0cy5maW5kQ29tcHJlc3Npb24gPSBmdW5jdGlvbihjb21wcmVzc2lvbk1ldGhvZCkge1xuICAgIHJldHVybiB1dGlscy5maW5kQ29tcHJlc3Npb24oY29tcHJlc3Npb25NZXRob2QpO1xufTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LlxuICovXG5leHBvcnRzLmlzUmVnRXhwID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiB1dGlscy5pc1JlZ0V4cChvYmplY3QpO1xufTtcblxuXG59LHtcIi4vdXRpbHNcIjoyMX1dLDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIFVTRV9UWVBFREFSUkFZID0gKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJykgJiYgKHR5cGVvZiBVaW50MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YgVWludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKTtcblxudmFyIHBha28gPSBfZGVyZXFfKFwicGFrb1wiKTtcbmV4cG9ydHMudW5jb21wcmVzc0lucHV0VHlwZSA9IFVTRV9UWVBFREFSUkFZID8gXCJ1aW50OGFycmF5XCIgOiBcImFycmF5XCI7XG5leHBvcnRzLmNvbXByZXNzSW5wdXRUeXBlID0gVVNFX1RZUEVEQVJSQVkgPyBcInVpbnQ4YXJyYXlcIiA6IFwiYXJyYXlcIjtcblxuZXhwb3J0cy5tYWdpYyA9IFwiXFx4MDhcXHgwMFwiO1xuZXhwb3J0cy5jb21wcmVzcyA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIHBha28uZGVmbGF0ZVJhdyhpbnB1dCk7XG59O1xuZXhwb3J0cy51bmNvbXByZXNzID0gIGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIHBha28uaW5mbGF0ZVJhdyhpbnB1dCk7XG59O1xuXG59LHtcInBha29cIjoyNH1dLDk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmFzZTY0ID0gX2RlcmVxXygnLi9iYXNlNjQnKTtcblxuLyoqXG5Vc2FnZTpcbiAgIHppcCA9IG5ldyBKU1ppcCgpO1xuICAgemlwLmZpbGUoXCJoZWxsby50eHRcIiwgXCJIZWxsbywgV29ybGQhXCIpLmZpbGUoXCJ0ZW1wZmlsZVwiLCBcIm5vdGhpbmdcIik7XG4gICB6aXAuZm9sZGVyKFwiaW1hZ2VzXCIpLmZpbGUoXCJzbWlsZS5naWZcIiwgYmFzZTY0RGF0YSwge2Jhc2U2NDogdHJ1ZX0pO1xuICAgemlwLmZpbGUoXCJYbWFzLnR4dFwiLCBcIkhvIGhvIGhvICFcIiwge2RhdGUgOiBuZXcgRGF0ZShcIkRlY2VtYmVyIDI1LCAyMDA3IDAwOjAwOjAxXCIpfSk7XG4gICB6aXAucmVtb3ZlKFwidGVtcGZpbGVcIik7XG5cbiAgIGJhc2U2NHppcCA9IHppcC5nZW5lcmF0ZSgpO1xuXG4qKi9cblxuLyoqXG4gKiBSZXByZXNlbnRhdGlvbiBhIG9mIHppcCBmaWxlIGluIGpzXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nPXxBcnJheUJ1ZmZlcj18VWludDhBcnJheT19IGRhdGEgdGhlIGRhdGEgdG8gbG9hZCwgaWYgYW55IChvcHRpb25hbCkuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoaXMgb2JqZWN0cyAob3B0aW9uYWwpLlxuICovXG5mdW5jdGlvbiBKU1ppcChkYXRhLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgdGhpcyBjb25zdHJ1Y3RvciBpc8KgdXNlZCB3aXRob3V0wqBgbmV3YCwgaXTCoGFkZHMgYG5ld2AgYmVmb3JlwqBpdHNlbGY6XG4gICAgaWYoISh0aGlzIGluc3RhbmNlb2YgSlNaaXApKSByZXR1cm4gbmV3IEpTWmlwKGRhdGEsIG9wdGlvbnMpO1xuXG4gICAgLy8gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGVzIDpcbiAgICAvLyB7XG4gICAgLy8gICBcImZvbGRlci9cIiA6IHsuLi59LFxuICAgIC8vICAgXCJmb2xkZXIvZGF0YS50eHRcIiA6IHsuLi59XG4gICAgLy8gfVxuICAgIHRoaXMuZmlsZXMgPSB7fTtcblxuICAgIHRoaXMuY29tbWVudCA9IG51bGw7XG5cbiAgICAvLyBXaGVyZSB3ZSBhcmUgaW4gdGhlIGhpZXJhcmNoeVxuICAgIHRoaXMucm9vdCA9IFwiXCI7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy5sb2FkKGRhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXdPYmogPSBuZXcgSlNaaXAoKTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNbaV0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG5ld09ialtpXSA9IHRoaXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld09iajtcbiAgICB9O1xufVxuSlNaaXAucHJvdG90eXBlID0gX2RlcmVxXygnLi9vYmplY3QnKTtcbkpTWmlwLnByb3RvdHlwZS5sb2FkID0gX2RlcmVxXygnLi9sb2FkJyk7XG5KU1ppcC5zdXBwb3J0ID0gX2RlcmVxXygnLi9zdXBwb3J0Jyk7XG5KU1ppcC5kZWZhdWx0cyA9IF9kZXJlcV8oJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogVGhpcyBuYW1lc3BhY2Ugd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAqL1xuSlNaaXAudXRpbHMgPSBfZGVyZXFfKCcuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscycpO1xuXG5KU1ppcC5iYXNlNjQgPSB7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LlxuICAgICAqL1xuICAgIGVuY29kZSA6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBiYXNlNjQuZW5jb2RlKGlucHV0KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgICAgKi9cbiAgICBkZWNvZGUgOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gYmFzZTY0LmRlY29kZShpbnB1dCk7XG4gICAgfVxufTtcbkpTWmlwLmNvbXByZXNzaW9ucyA9IF9kZXJlcV8oJy4vY29tcHJlc3Npb25zJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEpTWmlwO1xuXG59LHtcIi4vYmFzZTY0XCI6MSxcIi4vY29tcHJlc3Npb25zXCI6MyxcIi4vZGVmYXVsdHNcIjo2LFwiLi9kZXByZWNhdGVkUHVibGljVXRpbHNcIjo3LFwiLi9sb2FkXCI6MTAsXCIuL29iamVjdFwiOjEzLFwiLi9zdXBwb3J0XCI6MTd9XSwxMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgYmFzZTY0ID0gX2RlcmVxXygnLi9iYXNlNjQnKTtcbnZhciBaaXBFbnRyaWVzID0gX2RlcmVxXygnLi96aXBFbnRyaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRhdGEsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmlsZXMsIHppcEVudHJpZXMsIGksIGlucHV0O1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmIChvcHRpb25zLmJhc2U2NCkge1xuICAgICAgICBkYXRhID0gYmFzZTY0LmRlY29kZShkYXRhKTtcbiAgICB9XG5cbiAgICB6aXBFbnRyaWVzID0gbmV3IFppcEVudHJpZXMoZGF0YSwgb3B0aW9ucyk7XG4gICAgZmlsZXMgPSB6aXBFbnRyaWVzLmZpbGVzO1xuICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnB1dCA9IGZpbGVzW2ldO1xuICAgICAgICB0aGlzLmZpbGUoaW5wdXQuZmlsZU5hbWUsIGlucHV0LmRlY29tcHJlc3NlZCwge1xuICAgICAgICAgICAgYmluYXJ5OiB0cnVlLFxuICAgICAgICAgICAgb3B0aW1pemVkQmluYXJ5U3RyaW5nOiB0cnVlLFxuICAgICAgICAgICAgZGF0ZTogaW5wdXQuZGF0ZSxcbiAgICAgICAgICAgIGRpcjogaW5wdXQuZGlyLFxuICAgICAgICAgICAgY29tbWVudCA6IGlucHV0LmZpbGVDb21tZW50Lmxlbmd0aCA/IGlucHV0LmZpbGVDb21tZW50IDogbnVsbCxcbiAgICAgICAgICAgIGNyZWF0ZUZvbGRlcnM6IG9wdGlvbnMuY3JlYXRlRm9sZGVyc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHppcEVudHJpZXMuemlwQ29tbWVudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gemlwRW50cmllcy56aXBDb21tZW50O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxufSx7XCIuL2Jhc2U2NFwiOjEsXCIuL3ppcEVudHJpZXNcIjoyMn1dLDExOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoQnVmZmVyKXtcbid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZGF0YSwgZW5jb2Rpbmcpe1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGRhdGEsIGVuY29kaW5nKTtcbn07XG5tb2R1bGUuZXhwb3J0cy50ZXN0ID0gZnVuY3Rpb24oYil7XG4gICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihiKTtcbn07XG59KS5jYWxsKHRoaXMsKHR5cGVvZiBCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIgPyBCdWZmZXIgOiB1bmRlZmluZWQpKVxufSx7fV0sMTI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIFVpbnQ4QXJyYXlSZWFkZXIgPSBfZGVyZXFfKCcuL3VpbnQ4QXJyYXlSZWFkZXInKTtcblxuZnVuY3Rpb24gTm9kZUJ1ZmZlclJlYWRlcihkYXRhKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5pbmRleCA9IDA7XG59XG5Ob2RlQnVmZmVyUmVhZGVyLnByb3RvdHlwZSA9IG5ldyBVaW50OEFycmF5UmVhZGVyKCk7XG5cbi8qKlxuICogQHNlZSBEYXRhUmVhZGVyLnJlYWREYXRhXG4gKi9cbk5vZGVCdWZmZXJSZWFkZXIucHJvdG90eXBlLnJlYWREYXRhID0gZnVuY3Rpb24oc2l6ZSkge1xuICAgIHRoaXMuY2hlY2tPZmZzZXQoc2l6ZSk7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LCB0aGlzLmluZGV4ICsgc2l6ZSk7XG4gICAgdGhpcy5pbmRleCArPSBzaXplO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBOb2RlQnVmZmVyUmVhZGVyO1xuXG59LHtcIi4vdWludDhBcnJheVJlYWRlclwiOjE4fV0sMTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIHN1cHBvcnQgPSBfZGVyZXFfKCcuL3N1cHBvcnQnKTtcbnZhciB1dGlscyA9IF9kZXJlcV8oJy4vdXRpbHMnKTtcbnZhciBjcmMzMiA9IF9kZXJlcV8oJy4vY3JjMzInKTtcbnZhciBzaWduYXR1cmUgPSBfZGVyZXFfKCcuL3NpZ25hdHVyZScpO1xudmFyIGRlZmF1bHRzID0gX2RlcmVxXygnLi9kZWZhdWx0cycpO1xudmFyIGJhc2U2NCA9IF9kZXJlcV8oJy4vYmFzZTY0Jyk7XG52YXIgY29tcHJlc3Npb25zID0gX2RlcmVxXygnLi9jb21wcmVzc2lvbnMnKTtcbnZhciBDb21wcmVzc2VkT2JqZWN0ID0gX2RlcmVxXygnLi9jb21wcmVzc2VkT2JqZWN0Jyk7XG52YXIgbm9kZUJ1ZmZlciA9IF9kZXJlcV8oJy4vbm9kZUJ1ZmZlcicpO1xudmFyIHV0ZjggPSBfZGVyZXFfKCcuL3V0ZjgnKTtcbnZhciBTdHJpbmdXcml0ZXIgPSBfZGVyZXFfKCcuL3N0cmluZ1dyaXRlcicpO1xudmFyIFVpbnQ4QXJyYXlXcml0ZXIgPSBfZGVyZXFfKCcuL3VpbnQ4QXJyYXlXcml0ZXInKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSByYXcgZGF0YSBvZiBhIFppcE9iamVjdCwgZGVjb21wcmVzcyB0aGUgY29udGVudCBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0ge1ppcE9iamVjdH0gZmlsZSB0aGUgZmlsZSB0byB1c2UuXG4gKiBAcmV0dXJuIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IHRoZSBkYXRhLlxuICovXG52YXIgZ2V0UmF3RGF0YSA9IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICBpZiAoZmlsZS5fZGF0YSBpbnN0YW5jZW9mIENvbXByZXNzZWRPYmplY3QpIHtcbiAgICAgICAgZmlsZS5fZGF0YSA9IGZpbGUuX2RhdGEuZ2V0Q29udGVudCgpO1xuICAgICAgICBmaWxlLm9wdGlvbnMuYmluYXJ5ID0gdHJ1ZTtcbiAgICAgICAgZmlsZS5vcHRpb25zLmJhc2U2NCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh1dGlscy5nZXRUeXBlT2YoZmlsZS5fZGF0YSkgPT09IFwidWludDhhcnJheVwiKSB7XG4gICAgICAgICAgICB2YXIgY29weSA9IGZpbGUuX2RhdGE7XG4gICAgICAgICAgICAvLyB3aGVuIHJlYWRpbmcgYW4gYXJyYXlidWZmZXIsIHRoZSBDb21wcmVzc2VkT2JqZWN0IG1lY2hhbmlzbSB3aWxsIGtlZXAgaXQgYW5kIHN1YmFycmF5KCkgYSBVaW50OEFycmF5LlxuICAgICAgICAgICAgLy8gaWYgd2UgcmVxdWVzdCBhIGZpbGUgaW4gdGhlIHNhbWUgZm9ybWF0LCB3ZSBtaWdodCBnZXQgdGhlIHNhbWUgVWludDhBcnJheSBvciBpdHMgQXJyYXlCdWZmZXIgKHRoZSBvcmlnaW5hbCB6aXAgZmlsZSkuXG4gICAgICAgICAgICBmaWxlLl9kYXRhID0gbmV3IFVpbnQ4QXJyYXkoY29weS5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gd2l0aCBhbiBlbXB0eSBVaW50OEFycmF5LCBPcGVyYSBmYWlscyB3aXRoIGEgXCJPZmZzZXQgbGFyZ2VyIHRoYW4gYXJyYXkgc2l6ZVwiXG4gICAgICAgICAgICBpZiAoY29weS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICBmaWxlLl9kYXRhLnNldChjb3B5LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZS5fZGF0YTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGF0YSBvZiBhIFppcE9iamVjdCBpbiBhIGJpbmFyeSBmb3JtLiBJZiB0aGUgY29udGVudCBpcyBhbiB1bmljb2RlIHN0cmluZywgZW5jb2RlIGl0LlxuICogQHBhcmFtIHtaaXBPYmplY3R9IGZpbGUgdGhlIGZpbGUgdG8gdXNlLlxuICogQHJldHVybiB7U3RyaW5nfEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSB0aGUgZGF0YS5cbiAqL1xudmFyIGdldEJpbmFyeURhdGEgPSBmdW5jdGlvbihmaWxlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGdldFJhd0RhdGEoZmlsZSksXG4gICAgICAgIHR5cGUgPSB1dGlscy5nZXRUeXBlT2YocmVzdWx0KTtcbiAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoIWZpbGUub3B0aW9ucy5iaW5hcnkpIHtcbiAgICAgICAgICAgIC8vIHVuaWNvZGUgdGV4dCAhXG4gICAgICAgICAgICAvLyB1bmljb2RlIHN0cmluZyA9PiBiaW5hcnkgc3RyaW5nIGlzIGEgcGFpbmZ1bCBwcm9jZXNzLCBjaGVjayBpZiB3ZSBjYW4gYXZvaWQgaXQuXG4gICAgICAgICAgICBpZiAoc3VwcG9ydC5ub2RlYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVCdWZmZXIocmVzdWx0LCBcInV0Zi04XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlLmFzQmluYXJ5KCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGlzLl9kYXRhIGludG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmaWx0ZXIgYSBmdW5jdGlvbiBTdHJpbmcgLT4gU3RyaW5nLCBhcHBsaWVkIGlmIG5vdCBudWxsIG9uIHRoZSByZXN1bHQuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMuX2RhdGEuXG4gKi9cbnZhciBkYXRhVG9TdHJpbmcgPSBmdW5jdGlvbihhc1VURjgpIHtcbiAgICB2YXIgcmVzdWx0ID0gZ2V0UmF3RGF0YSh0aGlzKTtcbiAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBkYXRhIGlzIGEgYmFzZTY0IHN0cmluZywgd2UgZGVjb2RlIGl0IGJlZm9yZSBjaGVja2luZyB0aGUgZW5jb2RpbmcgIVxuICAgIGlmICh0aGlzLm9wdGlvbnMuYmFzZTY0KSB7XG4gICAgICAgIHJlc3VsdCA9IGJhc2U2NC5kZWNvZGUocmVzdWx0KTtcbiAgICB9XG4gICAgaWYgKGFzVVRGOCAmJiB0aGlzLm9wdGlvbnMuYmluYXJ5KSB7XG4gICAgICAgIC8vIEpTWmlwLnByb3RvdHlwZS51dGY4ZGVjb2RlIHN1cHBvcnRzIGFycmF5cyBhcyBpbnB1dFxuICAgICAgICAvLyBza2lwIHRvIGFycmF5ID0+IHN0cmluZyBzdGVwLCB1dGY4ZGVjb2RlIHdpbGwgZG8gaXQuXG4gICAgICAgIHJlc3VsdCA9IG91dC51dGY4ZGVjb2RlKHJlc3VsdCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBubyB1dGY4IHRyYW5zZm9ybWF0aW9uLCBkbyB0aGUgYXJyYXkgPT4gc3RyaW5nIHN0ZXAuXG4gICAgICAgIHJlc3VsdCA9IHV0aWxzLnRyYW5zZm9ybVRvKFwic3RyaW5nXCIsIHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKCFhc1VURjggJiYgIXRoaXMub3B0aW9ucy5iaW5hcnkpIHtcbiAgICAgICAgcmVzdWx0ID0gdXRpbHMudHJhbnNmb3JtVG8oXCJzdHJpbmdcIiwgb3V0LnV0ZjhlbmNvZGUocmVzdWx0KSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuLyoqXG4gKiBBIHNpbXBsZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgZmlsZSBpbiB0aGUgemlwIGZpbGUuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gZGF0YSB0aGUgZGF0YVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgdGhlIG9wdGlvbnMgb2YgdGhlIGZpbGVcbiAqL1xudmFyIFppcE9iamVjdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZGlyID0gb3B0aW9ucy5kaXI7XG4gICAgdGhpcy5kYXRlID0gb3B0aW9ucy5kYXRlO1xuICAgIHRoaXMuY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblxuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAvKlxuICAgICAqIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGluaXRpYWwgdmFsdWVzIGZvciBkaXIgYW5kIGRhdGUuXG4gICAgICogV2l0aCB0aGVtLCB3ZSBjYW4gY2hlY2sgaWYgdGhlIHVzZXIgY2hhbmdlZCB0aGUgZGVwcmVjYXRlZCBtZXRhZGF0YSBpblxuICAgICAqIGBaaXBPYmplY3Qjb3B0aW9uc2Agb3Igbm90LlxuICAgICAqL1xuICAgIHRoaXMuX2luaXRpYWxNZXRhZGF0YSA9IHtcbiAgICAgIGRpciA6IG9wdGlvbnMuZGlyLFxuICAgICAgZGF0ZSA6IG9wdGlvbnMuZGF0ZVxuICAgIH07XG59O1xuXG5aaXBPYmplY3QucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY29udGVudCBhcyBVVEY4IHN0cmluZy5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBVVEY4IHN0cmluZy5cbiAgICAgKi9cbiAgICBhc1RleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YVRvU3RyaW5nLmNhbGwodGhpcywgdHJ1ZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiaW5hcnkgY29udGVudC5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBjb250ZW50IGFzIGJpbmFyeS5cbiAgICAgKi9cbiAgICBhc0JpbmFyeTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhVG9TdHJpbmcuY2FsbCh0aGlzLCBmYWxzZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb250ZW50IGFzIGEgbm9kZWpzIEJ1ZmZlci5cbiAgICAgKiBAcmV0dXJuIHtCdWZmZXJ9IHRoZSBjb250ZW50IGFzIGEgQnVmZmVyLlxuICAgICAqL1xuICAgIGFzTm9kZUJ1ZmZlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBnZXRCaW5hcnlEYXRhKHRoaXMpO1xuICAgICAgICByZXR1cm4gdXRpbHMudHJhbnNmb3JtVG8oXCJub2RlYnVmZmVyXCIsIHJlc3VsdCk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb250ZW50IGFzIGFuIFVpbnQ4QXJyYXkuXG4gICAgICogQHJldHVybiB7VWludDhBcnJheX0gdGhlIGNvbnRlbnQgYXMgYW4gVWludDhBcnJheS5cbiAgICAgKi9cbiAgICBhc1VpbnQ4QXJyYXk6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gZ2V0QmluYXJ5RGF0YSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLnRyYW5zZm9ybVRvKFwidWludDhhcnJheVwiLCByZXN1bHQpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29udGVudCBhcyBhbiBBcnJheUJ1ZmZlci5cbiAgICAgKiBAcmV0dXJuIHtBcnJheUJ1ZmZlcn0gdGhlIGNvbnRlbnQgYXMgYW4gQXJyYXlCdWZlci5cbiAgICAgKi9cbiAgICBhc0FycmF5QnVmZmVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXNVaW50OEFycmF5KCkuYnVmZmVyO1xuICAgIH1cbn07XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGludGVnZXIgaW50byBhIHN0cmluZyBpbiBoZXhhZGVjaW1hbC5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVjIHRoZSBudW1iZXIgdG8gY29udmVydC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBieXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdlbmVyYXRlLlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIHJlc3VsdC5cbiAqL1xudmFyIGRlY1RvSGV4ID0gZnVuY3Rpb24oZGVjLCBieXRlcykge1xuICAgIHZhciBoZXggPSBcIlwiLFxuICAgICAgICBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlczsgaSsrKSB7XG4gICAgICAgIGhleCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGRlYyAmIDB4ZmYpO1xuICAgICAgICBkZWMgPSBkZWMgPj4+IDg7XG4gICAgfVxuICAgIHJldHVybiBoZXg7XG59O1xuXG4vKipcbiAqIE1lcmdlIHRoZSBvYmplY3RzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzIGludG8gYSBuZXcgb25lLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSB2YXJfYXJncyBBbGwgb2JqZWN0cyB0byBtZXJnZS5cbiAqIEByZXR1cm4ge09iamVjdH0gYSBuZXcgb2JqZWN0IHdpdGggdGhlIGRhdGEgb2YgdGhlIG90aGVycy5cbiAqL1xudmFyIGV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXN1bHQgPSB7fSwgaSwgYXR0cjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IC8vIGFyZ3VtZW50cyBpcyBub3QgZW51bWVyYWJsZSBpbiBzb21lIGJyb3dzZXJzXG4gICAgICAgIGZvciAoYXR0ciBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0uaGFzT3duUHJvcGVydHkoYXR0cikgJiYgdHlwZW9mIHJlc3VsdFthdHRyXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdFthdHRyXSA9IGFyZ3VtZW50c1tpXVthdHRyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSAoaW5jb21wbGV0ZSkgb3B0aW9ucyBmcm9tIHRoZSB1c2VyIGludG8gdGhlIGNvbXBsZXRlXG4gKiBzZXQgb2Ygb3B0aW9ucyB0byBjcmVhdGUgYSBmaWxlLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvIHRoZSBvcHRpb25zIGZyb20gdGhlIHVzZXIuXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBjb21wbGV0ZSBzZXQgb2Ygb3B0aW9ucy5cbiAqL1xudmFyIHByZXBhcmVGaWxlQXR0cnMgPSBmdW5jdGlvbihvKSB7XG4gICAgbyA9IG8gfHwge307XG4gICAgaWYgKG8uYmFzZTY0ID09PSB0cnVlICYmIChvLmJpbmFyeSA9PT0gbnVsbCB8fCBvLmJpbmFyeSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBvLmJpbmFyeSA9IHRydWU7XG4gICAgfVxuICAgIG8gPSBleHRlbmQobywgZGVmYXVsdHMpO1xuICAgIG8uZGF0ZSA9IG8uZGF0ZSB8fCBuZXcgRGF0ZSgpO1xuICAgIGlmIChvLmNvbXByZXNzaW9uICE9PSBudWxsKSBvLmNvbXByZXNzaW9uID0gby5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIG87XG59O1xuXG4vKipcbiAqIEFkZCBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZm9sZGVyLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gZGF0YSB0aGUgZGF0YSBvZiB0aGUgZmlsZVxuICogQHBhcmFtIHtPYmplY3R9IG8gdGhlIG9wdGlvbnMgb2YgdGhlIGZpbGVcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIG5ldyBmaWxlLlxuICovXG52YXIgZmlsZUFkZCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEsIG8pIHtcbiAgICAvLyBiZSBzdXJlIHN1YiBmb2xkZXJzIGV4aXN0XG4gICAgdmFyIGRhdGFUeXBlID0gdXRpbHMuZ2V0VHlwZU9mKGRhdGEpLFxuICAgICAgICBwYXJlbnQ7XG5cbiAgICBvID0gcHJlcGFyZUZpbGVBdHRycyhvKTtcblxuICAgIGlmIChvLmNyZWF0ZUZvbGRlcnMgJiYgKHBhcmVudCA9IHBhcmVudEZvbGRlcihuYW1lKSkpIHtcbiAgICAgICAgZm9sZGVyQWRkLmNhbGwodGhpcywgcGFyZW50LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoby5kaXIgfHwgZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvLmJhc2U2NCA9IGZhbHNlO1xuICAgICAgICBvLmJpbmFyeSA9IGZhbHNlO1xuICAgICAgICBkYXRhID0gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGF0YVR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKG8uYmluYXJ5ICYmICFvLmJhc2U2NCkge1xuICAgICAgICAgICAgLy8gb3B0aW1pemVkQmluYXJ5U3RyaW5nID09IHRydWUgbWVhbnMgdGhhdCB0aGUgZmlsZSBoYXMgYWxyZWFkeSBiZWVuIGZpbHRlcmVkIHdpdGggYSAweEZGIG1hc2tcbiAgICAgICAgICAgIGlmIChvLm9wdGltaXplZEJpbmFyeVN0cmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYSBzdHJpbmcsIG5vdCBpbiBhIGJhc2U2NCBmb3JtYXQuXG4gICAgICAgICAgICAgICAgLy8gQmUgc3VyZSB0aGF0IHRoaXMgaXMgYSBjb3JyZWN0IFwiYmluYXJ5IHN0cmluZ1wiXG4gICAgICAgICAgICAgICAgZGF0YSA9IHV0aWxzLnN0cmluZzJiaW5hcnkoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7IC8vIGFycmF5YnVmZmVyLCB1aW50OGFycmF5LCAuLi5cbiAgICAgICAgby5iYXNlNjQgPSBmYWxzZTtcbiAgICAgICAgby5iaW5hcnkgPSB0cnVlO1xuXG4gICAgICAgIGlmICghZGF0YVR5cGUgJiYgIShkYXRhIGluc3RhbmNlb2YgQ29tcHJlc3NlZE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBkYXRhIG9mICdcIiArIG5hbWUgKyBcIicgaXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0ICFcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzcGVjaWFsIGNhc2UgOiBpdCdzIHdheSBlYXNpZXIgdG8gd29yayB3aXRoIFVpbnQ4QXJyYXkgdGhhbiB3aXRoIEFycmF5QnVmZmVyXG4gICAgICAgIGlmIChkYXRhVHlwZSA9PT0gXCJhcnJheWJ1ZmZlclwiKSB7XG4gICAgICAgICAgICBkYXRhID0gdXRpbHMudHJhbnNmb3JtVG8oXCJ1aW50OGFycmF5XCIsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG9iamVjdCA9IG5ldyBaaXBPYmplY3QobmFtZSwgZGF0YSwgbyk7XG4gICAgdGhpcy5maWxlc1tuYW1lXSA9IG9iamVjdDtcbiAgICByZXR1cm4gb2JqZWN0O1xufTtcblxuLyoqXG4gKiBGaW5kIHRoZSBwYXJlbnQgZm9sZGVyIG9mIHRoZSBwYXRoLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIHRoZSBwYXRoIHRvIHVzZVxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgcGFyZW50IGZvbGRlciwgb3IgXCJcIlxuICovXG52YXIgcGFyZW50Rm9sZGVyID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgICBpZiAocGF0aC5zbGljZSgtMSkgPT0gJy8nKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICB2YXIgbGFzdFNsYXNoID0gcGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgIHJldHVybiAobGFzdFNsYXNoID4gMCkgPyBwYXRoLnN1YnN0cmluZygwLCBsYXN0U2xhc2gpIDogXCJcIjtcbn07XG5cbi8qKlxuICogQWRkIGEgKHN1YikgZm9sZGVyIGluIHRoZSBjdXJyZW50IGZvbGRlci5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgZm9sZGVyJ3MgbmFtZVxuICogQHBhcmFtIHtib29sZWFuPX0gW2NyZWF0ZUZvbGRlcnNdIElmIHRydWUsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIHN1YlxuICogIGZvbGRlcnMuIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHJldHVybiB7T2JqZWN0fSB0aGUgbmV3IGZvbGRlci5cbiAqL1xudmFyIGZvbGRlckFkZCA9IGZ1bmN0aW9uKG5hbWUsIGNyZWF0ZUZvbGRlcnMpIHtcbiAgICAvLyBDaGVjayB0aGUgbmFtZSBlbmRzIHdpdGggYSAvXG4gICAgaWYgKG5hbWUuc2xpY2UoLTEpICE9IFwiL1wiKSB7XG4gICAgICAgIG5hbWUgKz0gXCIvXCI7IC8vIElFIGRvZXNuJ3QgbGlrZSBzdWJzdHIoLTEpXG4gICAgfVxuXG4gICAgY3JlYXRlRm9sZGVycyA9ICh0eXBlb2YgY3JlYXRlRm9sZGVycyAhPT0gJ3VuZGVmaW5lZCcpID8gY3JlYXRlRm9sZGVycyA6IGZhbHNlO1xuXG4gICAgLy8gRG9lcyB0aGlzIGZvbGRlciBhbHJlYWR5IGV4aXN0P1xuICAgIGlmICghdGhpcy5maWxlc1tuYW1lXSkge1xuICAgICAgICBmaWxlQWRkLmNhbGwodGhpcywgbmFtZSwgbnVsbCwge1xuICAgICAgICAgICAgZGlyOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRlRm9sZGVyczogY3JlYXRlRm9sZGVyc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsZXNbbmFtZV07XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgSlNaaXAuQ29tcHJlc3NlZE9iamVjdCBmb3IgYSBnaXZlbiB6aXBPamVjdC5cbiAqIEBwYXJhbSB7WmlwT2JqZWN0fSBmaWxlIHRoZSBvYmplY3QgdG8gcmVhZC5cbiAqIEBwYXJhbSB7SlNaaXAuY29tcHJlc3Npb259IGNvbXByZXNzaW9uIHRoZSBjb21wcmVzc2lvbiB0byB1c2UuXG4gKiBAcmV0dXJuIHtKU1ppcC5Db21wcmVzc2VkT2JqZWN0fSB0aGUgY29tcHJlc3NlZCByZXN1bHQuXG4gKi9cbnZhciBnZW5lcmF0ZUNvbXByZXNzZWRPYmplY3RGcm9tID0gZnVuY3Rpb24oZmlsZSwgY29tcHJlc3Npb24pIHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IENvbXByZXNzZWRPYmplY3QoKSxcbiAgICAgICAgY29udGVudDtcblxuICAgIC8vIHRoZSBkYXRhIGhhcyBub3QgYmVlbiBkZWNvbXByZXNzZWQsIHdlIG1pZ2h0IHJldXNlIHRoaW5ncyAhXG4gICAgaWYgKGZpbGUuX2RhdGEgaW5zdGFuY2VvZiBDb21wcmVzc2VkT2JqZWN0KSB7XG4gICAgICAgIHJlc3VsdC51bmNvbXByZXNzZWRTaXplID0gZmlsZS5fZGF0YS51bmNvbXByZXNzZWRTaXplO1xuICAgICAgICByZXN1bHQuY3JjMzIgPSBmaWxlLl9kYXRhLmNyYzMyO1xuXG4gICAgICAgIGlmIChyZXN1bHQudW5jb21wcmVzc2VkU2l6ZSA9PT0gMCB8fCBmaWxlLmRpcikge1xuICAgICAgICAgICAgY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbnNbJ1NUT1JFJ107XG4gICAgICAgICAgICByZXN1bHQuY29tcHJlc3NlZENvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgICAgcmVzdWx0LmNyYzMyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaWxlLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kID09PSBjb21wcmVzc2lvbi5tYWdpYykge1xuICAgICAgICAgICAgcmVzdWx0LmNvbXByZXNzZWRDb250ZW50ID0gZmlsZS5fZGF0YS5nZXRDb21wcmVzc2VkQ29udGVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29udGVudCA9IGZpbGUuX2RhdGEuZ2V0Q29udGVudCgpO1xuICAgICAgICAgICAgLy8gbmVlZCB0byBkZWNvbXByZXNzIC8gcmVjb21wcmVzc1xuICAgICAgICAgICAgcmVzdWx0LmNvbXByZXNzZWRDb250ZW50ID0gY29tcHJlc3Npb24uY29tcHJlc3ModXRpbHMudHJhbnNmb3JtVG8oY29tcHJlc3Npb24uY29tcHJlc3NJbnB1dFR5cGUsIGNvbnRlbnQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gaGF2ZSB1bmNvbXByZXNzZWQgZGF0YVxuICAgICAgICBjb250ZW50ID0gZ2V0QmluYXJ5RGF0YShmaWxlKTtcbiAgICAgICAgaWYgKCFjb250ZW50IHx8IGNvbnRlbnQubGVuZ3RoID09PSAwIHx8IGZpbGUuZGlyKSB7XG4gICAgICAgICAgICBjb21wcmVzc2lvbiA9IGNvbXByZXNzaW9uc1snU1RPUkUnXTtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC51bmNvbXByZXNzZWRTaXplID0gY29udGVudC5sZW5ndGg7XG4gICAgICAgIHJlc3VsdC5jcmMzMiA9IGNyYzMyKGNvbnRlbnQpO1xuICAgICAgICByZXN1bHQuY29tcHJlc3NlZENvbnRlbnQgPSBjb21wcmVzc2lvbi5jb21wcmVzcyh1dGlscy50cmFuc2Zvcm1Ubyhjb21wcmVzc2lvbi5jb21wcmVzc0lucHV0VHlwZSwgY29udGVudCkpO1xuICAgIH1cblxuICAgIHJlc3VsdC5jb21wcmVzc2VkU2l6ZSA9IHJlc3VsdC5jb21wcmVzc2VkQ29udGVudC5sZW5ndGg7XG4gICAgcmVzdWx0LmNvbXByZXNzaW9uTWV0aG9kID0gY29tcHJlc3Npb24ubWFnaWM7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgdmFyaW91cyBwYXJ0cyB1c2VkIGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGZpbmFsIHppcCBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIGZpbGUgbmFtZS5cbiAqIEBwYXJhbSB7WmlwT2JqZWN0fSBmaWxlIHRoZSBmaWxlIGNvbnRlbnQuXG4gKiBAcGFyYW0ge0pTWmlwLkNvbXByZXNzZWRPYmplY3R9IGNvbXByZXNzZWRPYmplY3QgdGhlIGNvbXByZXNzZWQgb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCB0aGUgY3VycmVudCBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHppcCBmaWxlLlxuICogQHJldHVybiB7b2JqZWN0fSB0aGUgemlwIHBhcnRzLlxuICovXG52YXIgZ2VuZXJhdGVaaXBQYXJ0cyA9IGZ1bmN0aW9uKG5hbWUsIGZpbGUsIGNvbXByZXNzZWRPYmplY3QsIG9mZnNldCkge1xuICAgIHZhciBkYXRhID0gY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCxcbiAgICAgICAgdXRmRW5jb2RlZEZpbGVOYW1lID0gdXRpbHMudHJhbnNmb3JtVG8oXCJzdHJpbmdcIiwgdXRmOC51dGY4ZW5jb2RlKGZpbGUubmFtZSkpLFxuICAgICAgICBjb21tZW50ID0gZmlsZS5jb21tZW50IHx8IFwiXCIsXG4gICAgICAgIHV0ZkVuY29kZWRDb21tZW50ID0gdXRpbHMudHJhbnNmb3JtVG8oXCJzdHJpbmdcIiwgdXRmOC51dGY4ZW5jb2RlKGNvbW1lbnQpKSxcbiAgICAgICAgdXNlVVRGOEZvckZpbGVOYW1lID0gdXRmRW5jb2RlZEZpbGVOYW1lLmxlbmd0aCAhPT0gZmlsZS5uYW1lLmxlbmd0aCxcbiAgICAgICAgdXNlVVRGOEZvckNvbW1lbnQgPSB1dGZFbmNvZGVkQ29tbWVudC5sZW5ndGggIT09IGNvbW1lbnQubGVuZ3RoLFxuICAgICAgICBvID0gZmlsZS5vcHRpb25zLFxuICAgICAgICBkb3NUaW1lLFxuICAgICAgICBkb3NEYXRlLFxuICAgICAgICBleHRyYUZpZWxkcyA9IFwiXCIsXG4gICAgICAgIHVuaWNvZGVQYXRoRXh0cmFGaWVsZCA9IFwiXCIsXG4gICAgICAgIHVuaWNvZGVDb21tZW50RXh0cmFGaWVsZCA9IFwiXCIsXG4gICAgICAgIGRpciwgZGF0ZTtcblxuXG4gICAgLy8gaGFuZGxlIHRoZSBkZXByZWNhdGVkIG9wdGlvbnMuZGlyXG4gICAgaWYgKGZpbGUuX2luaXRpYWxNZXRhZGF0YS5kaXIgIT09IGZpbGUuZGlyKSB7XG4gICAgICAgIGRpciA9IGZpbGUuZGlyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRpciA9IG8uZGlyO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSB0aGUgZGVwcmVjYXRlZCBvcHRpb25zLmRhdGVcbiAgICBpZihmaWxlLl9pbml0aWFsTWV0YWRhdGEuZGF0ZSAhPT0gZmlsZS5kYXRlKSB7XG4gICAgICAgIGRhdGUgPSBmaWxlLmRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0ZSA9IG8uZGF0ZTtcbiAgICB9XG5cblxuICAgIGRvc1RpbWUgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgZG9zVGltZSA9IGRvc1RpbWUgPDwgNjtcbiAgICBkb3NUaW1lID0gZG9zVGltZSB8IGRhdGUuZ2V0TWludXRlcygpO1xuICAgIGRvc1RpbWUgPSBkb3NUaW1lIDw8IDU7XG4gICAgZG9zVGltZSA9IGRvc1RpbWUgfCBkYXRlLmdldFNlY29uZHMoKSAvIDI7XG5cbiAgICBkb3NEYXRlID0gZGF0ZS5nZXRGdWxsWWVhcigpIC0gMTk4MDtcbiAgICBkb3NEYXRlID0gZG9zRGF0ZSA8PCA0O1xuICAgIGRvc0RhdGUgPSBkb3NEYXRlIHwgKGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgIGRvc0RhdGUgPSBkb3NEYXRlIDw8IDU7XG4gICAgZG9zRGF0ZSA9IGRvc0RhdGUgfCBkYXRlLmdldERhdGUoKTtcblxuICAgIGlmICh1c2VVVEY4Rm9yRmlsZU5hbWUpIHtcbiAgICAgICAgLy8gc2V0IHRoZSB1bmljb2RlIHBhdGggZXh0cmEgZmllbGQuIHVuemlwIG5lZWRzIGF0IGxlYXN0IG9uZSBleHRyYVxuICAgICAgICAvLyBmaWVsZCB0byBjb3JyZWN0bHkgaGFuZGxlIHVuaWNvZGUgcGF0aCwgc28gdXNpbmcgdGhlIHBhdGggaXMgYXMgZ29vZFxuICAgICAgICAvLyBhcyBhbnkgb3RoZXIgaW5mb3JtYXRpb24uIFRoaXMgY291bGQgaW1wcm92ZSB0aGUgc2l0dWF0aW9uIHdpdGhcbiAgICAgICAgLy8gb3RoZXIgYXJjaGl2ZSBtYW5hZ2VycyB0b28uXG4gICAgICAgIC8vIFRoaXMgZmllbGQgaXMgdXN1YWxseSB1c2VkIHdpdGhvdXQgdGhlIHV0ZjggZmxhZywgd2l0aCBhIG5vblxuICAgICAgICAvLyB1bmljb2RlIHBhdGggaW4gdGhlIGhlYWRlciAod2lucmFyLCB3aW56aXApLiBUaGlzIGhlbHBzIChhIGJpdClcbiAgICAgICAgLy8gd2l0aCB0aGUgbWVzc3kgV2luZG93cycgZGVmYXVsdCBjb21wcmVzc2VkIGZvbGRlcnMgZmVhdHVyZSBidXRcbiAgICAgICAgLy8gYnJlYWtzIG9uIHA3emlwIHdoaWNoIGRvZXNuJ3Qgc2VlayB0aGUgdW5pY29kZSBwYXRoIGV4dHJhIGZpZWxkLlxuICAgICAgICAvLyBTbyBmb3Igbm93LCBVVEYtOCBldmVyeXdoZXJlICFcbiAgICAgICAgdW5pY29kZVBhdGhFeHRyYUZpZWxkID1cbiAgICAgICAgICAgIC8vIFZlcnNpb25cbiAgICAgICAgICAgIGRlY1RvSGV4KDEsIDEpICtcbiAgICAgICAgICAgIC8vIE5hbWVDUkMzMlxuICAgICAgICAgICAgZGVjVG9IZXgoY3JjMzIodXRmRW5jb2RlZEZpbGVOYW1lKSwgNCkgK1xuICAgICAgICAgICAgLy8gVW5pY29kZU5hbWVcbiAgICAgICAgICAgIHV0ZkVuY29kZWRGaWxlTmFtZTtcblxuICAgICAgICBleHRyYUZpZWxkcyArPVxuICAgICAgICAgICAgLy8gSW5mby1aSVAgVW5pY29kZSBQYXRoIEV4dHJhIEZpZWxkXG4gICAgICAgICAgICBcIlxceDc1XFx4NzBcIiArXG4gICAgICAgICAgICAvLyBzaXplXG4gICAgICAgICAgICBkZWNUb0hleCh1bmljb2RlUGF0aEV4dHJhRmllbGQubGVuZ3RoLCAyKSArXG4gICAgICAgICAgICAvLyBjb250ZW50XG4gICAgICAgICAgICB1bmljb2RlUGF0aEV4dHJhRmllbGQ7XG4gICAgfVxuXG4gICAgaWYodXNlVVRGOEZvckNvbW1lbnQpIHtcblxuICAgICAgICB1bmljb2RlQ29tbWVudEV4dHJhRmllbGQgPVxuICAgICAgICAgICAgLy8gVmVyc2lvblxuICAgICAgICAgICAgZGVjVG9IZXgoMSwgMSkgK1xuICAgICAgICAgICAgLy8gQ29tbWVudENSQzMyXG4gICAgICAgICAgICBkZWNUb0hleCh0aGlzLmNyYzMyKHV0ZkVuY29kZWRDb21tZW50KSwgNCkgK1xuICAgICAgICAgICAgLy8gVW5pY29kZU5hbWVcbiAgICAgICAgICAgIHV0ZkVuY29kZWRDb21tZW50O1xuXG4gICAgICAgIGV4dHJhRmllbGRzICs9XG4gICAgICAgICAgICAvLyBJbmZvLVpJUCBVbmljb2RlIFBhdGggRXh0cmEgRmllbGRcbiAgICAgICAgICAgIFwiXFx4NzVcXHg2M1wiICtcbiAgICAgICAgICAgIC8vIHNpemVcbiAgICAgICAgICAgIGRlY1RvSGV4KHVuaWNvZGVDb21tZW50RXh0cmFGaWVsZC5sZW5ndGgsIDIpICtcbiAgICAgICAgICAgIC8vIGNvbnRlbnRcbiAgICAgICAgICAgIHVuaWNvZGVDb21tZW50RXh0cmFGaWVsZDtcbiAgICB9XG5cbiAgICB2YXIgaGVhZGVyID0gXCJcIjtcblxuICAgIC8vIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJhY3RcbiAgICBoZWFkZXIgKz0gXCJcXHgwQVxceDAwXCI7XG4gICAgLy8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnXG4gICAgLy8gc2V0IGJpdCAxMSBpZiB1dGY4XG4gICAgaGVhZGVyICs9ICh1c2VVVEY4Rm9yRmlsZU5hbWUgfHwgdXNlVVRGOEZvckNvbW1lbnQpID8gXCJcXHgwMFxceDA4XCIgOiBcIlxceDAwXFx4MDBcIjtcbiAgICAvLyBjb21wcmVzc2lvbiBtZXRob2RcbiAgICBoZWFkZXIgKz0gY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2lvbk1ldGhvZDtcbiAgICAvLyBsYXN0IG1vZCBmaWxlIHRpbWVcbiAgICBoZWFkZXIgKz0gZGVjVG9IZXgoZG9zVGltZSwgMik7XG4gICAgLy8gbGFzdCBtb2QgZmlsZSBkYXRlXG4gICAgaGVhZGVyICs9IGRlY1RvSGV4KGRvc0RhdGUsIDIpO1xuICAgIC8vIGNyYy0zMlxuICAgIGhlYWRlciArPSBkZWNUb0hleChjb21wcmVzc2VkT2JqZWN0LmNyYzMyLCA0KTtcbiAgICAvLyBjb21wcmVzc2VkIHNpemVcbiAgICBoZWFkZXIgKz0gZGVjVG9IZXgoY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkU2l6ZSwgNCk7XG4gICAgLy8gdW5jb21wcmVzc2VkIHNpemVcbiAgICBoZWFkZXIgKz0gZGVjVG9IZXgoY29tcHJlc3NlZE9iamVjdC51bmNvbXByZXNzZWRTaXplLCA0KTtcbiAgICAvLyBmaWxlIG5hbWUgbGVuZ3RoXG4gICAgaGVhZGVyICs9IGRlY1RvSGV4KHV0ZkVuY29kZWRGaWxlTmFtZS5sZW5ndGgsIDIpO1xuICAgIC8vIGV4dHJhIGZpZWxkIGxlbmd0aFxuICAgIGhlYWRlciArPSBkZWNUb0hleChleHRyYUZpZWxkcy5sZW5ndGgsIDIpO1xuXG5cbiAgICB2YXIgZmlsZVJlY29yZCA9IHNpZ25hdHVyZS5MT0NBTF9GSUxFX0hFQURFUiArIGhlYWRlciArIHV0ZkVuY29kZWRGaWxlTmFtZSArIGV4dHJhRmllbGRzO1xuXG4gICAgdmFyIGRpclJlY29yZCA9IHNpZ25hdHVyZS5DRU5UUkFMX0ZJTEVfSEVBREVSICtcbiAgICAvLyB2ZXJzaW9uIG1hZGUgYnkgKDAwOiBET1MpXG4gICAgXCJcXHgxNFxceDAwXCIgK1xuICAgIC8vIGZpbGUgaGVhZGVyIChjb21tb24gdG8gZmlsZSBhbmQgY2VudHJhbCBkaXJlY3RvcnkpXG4gICAgaGVhZGVyICtcbiAgICAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoXG4gICAgZGVjVG9IZXgodXRmRW5jb2RlZENvbW1lbnQubGVuZ3RoLCAyKSArXG4gICAgLy8gZGlzayBudW1iZXIgc3RhcnRcbiAgICBcIlxceDAwXFx4MDBcIiArXG4gICAgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIFRPRE9cbiAgICBcIlxceDAwXFx4MDBcIiArXG4gICAgLy8gZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzXG4gICAgKGRpciA9PT0gdHJ1ZSA/IFwiXFx4MTBcXHgwMFxceDAwXFx4MDBcIiA6IFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIikgK1xuICAgIC8vIHJlbGF0aXZlIG9mZnNldCBvZiBsb2NhbCBoZWFkZXJcbiAgICBkZWNUb0hleChvZmZzZXQsIDQpICtcbiAgICAvLyBmaWxlIG5hbWVcbiAgICB1dGZFbmNvZGVkRmlsZU5hbWUgK1xuICAgIC8vIGV4dHJhIGZpZWxkXG4gICAgZXh0cmFGaWVsZHMgK1xuICAgIC8vIGZpbGUgY29tbWVudFxuICAgIHV0ZkVuY29kZWRDb21tZW50O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZVJlY29yZDogZmlsZVJlY29yZCxcbiAgICAgICAgZGlyUmVjb3JkOiBkaXJSZWNvcmQsXG4gICAgICAgIGNvbXByZXNzZWRPYmplY3Q6IGNvbXByZXNzZWRPYmplY3RcbiAgICB9O1xufTtcblxuXG4vLyByZXR1cm4gdGhlIGFjdHVhbCBwcm90b3R5cGUgb2YgSlNaaXBcbnZhciBvdXQgPSB7XG4gICAgLyoqXG4gICAgICogUmVhZCBhbiBleGlzdGluZyB6aXAgYW5kIG1lcmdlIHRoZSBkYXRhIGluIHRoZSBjdXJyZW50IEpTWmlwIG9iamVjdC5cbiAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgaW4ganN6aXAtbG9hZC5qcywgZG9uJ3QgZm9yZ2V0IHRvIGluY2x1ZGUgaXQuXG4gICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IHN0cmVhbSAgVGhlIHN0cmVhbSB0byBsb2FkXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBmb3IgbG9hZGluZyB0aGUgc3RyZWFtLlxuICAgICAqICBvcHRpb25zLmJhc2U2NCA6IGlzIHRoZSBzdHJlYW0gaW4gYmFzZTY0ID8gZGVmYXVsdCA6IGZhbHNlXG4gICAgICogQHJldHVybiB7SlNaaXB9IHRoZSBjdXJyZW50IEpTWmlwIG9iamVjdFxuICAgICAqL1xuICAgIGxvYWQ6IGZ1bmN0aW9uKHN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4gSXMgdGhlIGZpbGUganN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/XCIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgbmVzdGVkIGZpbGVzL2ZvbGRlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNlYXJjaCB0aGUgcHJlZGljYXRlIHRvIHVzZSA6XG4gICAgICogZnVuY3Rpb24gKHJlbGF0aXZlUGF0aCwgZmlsZSkgey4uLn1cbiAgICAgKiBJdCB0YWtlcyAyIGFyZ3VtZW50cyA6IHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgZmlsZS5cbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgbWF0Y2hpbmcgZWxlbWVudHMuXG4gICAgICovXG4gICAgZmlsdGVyOiBmdW5jdGlvbihzZWFyY2gpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdLFxuICAgICAgICAgICAgZmlsZW5hbWUsIHJlbGF0aXZlUGF0aCwgZmlsZSwgZmlsZUNsb25lO1xuICAgICAgICBmb3IgKGZpbGVuYW1lIGluIHRoaXMuZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGUgPSB0aGlzLmZpbGVzW2ZpbGVuYW1lXTtcbiAgICAgICAgICAgIC8vIHJldHVybiBhIG5ldyBvYmplY3QsIGRvbid0IGxldCB0aGUgdXNlciBtZXNzIHdpdGggb3VyIGludGVybmFsIG9iamVjdHMgOilcbiAgICAgICAgICAgIGZpbGVDbG9uZSA9IG5ldyBaaXBPYmplY3QoZmlsZS5uYW1lLCBmaWxlLl9kYXRhLCBleHRlbmQoZmlsZS5vcHRpb25zKSk7XG4gICAgICAgICAgICByZWxhdGl2ZVBhdGggPSBmaWxlbmFtZS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLCBmaWxlbmFtZS5sZW5ndGgpO1xuICAgICAgICAgICAgaWYgKGZpbGVuYW1lLnNsaWNlKDAsIHRoaXMucm9vdC5sZW5ndGgpID09PSB0aGlzLnJvb3QgJiYgLy8gdGhlIGZpbGUgaXMgaW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgICAgICAgICAgc2VhcmNoKHJlbGF0aXZlUGF0aCwgZmlsZUNsb25lKSkgeyAvLyBhbmQgdGhlIGZpbGUgbWF0Y2hlcyB0aGUgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmaWxlQ2xvbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGZpbGUgdG8gdGhlIHppcCBmaWxlLCBvciBzZWFyY2ggYSBmaWxlLlxuICAgICAqIEBwYXJhbSAgIHtzdHJpbmd8UmVnRXhwfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGFkZCAoaWYgZGF0YSBpcyBkZWZpbmVkKSxcbiAgICAgKiB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBmaW5kIChpZiBubyBkYXRhKSBvciBhIHJlZ2V4IHRvIG1hdGNoIGZpbGVzLlxuICAgICAqIEBwYXJhbSAgIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGRhdGEgIFRoZSBmaWxlIGRhdGEsIGVpdGhlciByYXcgb3IgYmFzZTY0IGVuY29kZWRcbiAgICAgKiBAcGFyYW0gICB7T2JqZWN0fSBvICAgICBGaWxlIG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuICB7SlNaaXB8T2JqZWN0fEFycmF5fSB0aGlzIEpTWmlwIG9iamVjdCAod2hlbiBhZGRpbmcgYSBmaWxlKSxcbiAgICAgKiBhIGZpbGUgKHdoZW4gc2VhcmNoaW5nIGJ5IHN0cmluZykgb3IgYW4gYXJyYXkgb2YgZmlsZXMgKHdoZW4gc2VhcmNoaW5nIGJ5IHJlZ2V4KS5cbiAgICAgKi9cbiAgICBmaWxlOiBmdW5jdGlvbihuYW1lLCBkYXRhLCBvKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnZXhwID0gbmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocmVsYXRpdmVQYXRoLCBmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhZmlsZS5kaXIgJiYgcmVnZXhwLnRlc3QocmVsYXRpdmVQYXRoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgeyAvLyB0ZXh0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKHJlbGF0aXZlUGF0aCwgZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWZpbGUuZGlyICYmIHJlbGF0aXZlUGF0aCA9PT0gbmFtZTtcbiAgICAgICAgICAgICAgICB9KVswXSB8fCBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IDogd2UgaGF2ZSBkYXRhICFcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnJvb3QgKyBuYW1lO1xuICAgICAgICAgICAgZmlsZUFkZC5jYWxsKHRoaXMsIG5hbWUsIGRhdGEsIG8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBkaXJlY3RvcnkgdG8gdGhlIHppcCBmaWxlLCBvciBzZWFyY2guXG4gICAgICogQHBhcmFtICAge1N0cmluZ3xSZWdFeHB9IGFyZyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRvIGFkZCwgb3IgYSByZWdleCB0byBzZWFyY2ggZm9sZGVycy5cbiAgICAgKiBAcmV0dXJuICB7SlNaaXB9IGFuIG9iamVjdCB3aXRoIHRoZSBuZXcgZGlyZWN0b3J5IGFzIHRoZSByb290LCBvciBhbiBhcnJheSBjb250YWluaW5nIG1hdGNoaW5nIGZvbGRlcnMuXG4gICAgICovXG4gICAgZm9sZGVyOiBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgaWYgKCFhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKGFyZykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihyZWxhdGl2ZVBhdGgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZS5kaXIgJiYgYXJnLnRlc3QocmVsYXRpdmVQYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZWxzZSwgbmFtZSBpcyBhIG5ldyBmb2xkZXJcbiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnJvb3QgKyBhcmc7XG4gICAgICAgIHZhciBuZXdGb2xkZXIgPSBmb2xkZXJBZGQuY2FsbCh0aGlzLCBuYW1lKTtcblxuICAgICAgICAvLyBBbGxvdyBjaGFpbmluZyBieSByZXR1cm5pbmcgYSBuZXcgb2JqZWN0IHdpdGggdGhpcyBmb2xkZXIgYXMgdGhlIHJvb3RcbiAgICAgICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmV0LnJvb3QgPSBuZXdGb2xkZXIubmFtZTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlIGEgZmlsZSwgb3IgYSBkaXJlY3RvcnkgYW5kIGFsbCBzdWItZmlsZXMsIGZyb20gdGhlIHppcFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGRlbGV0ZVxuICAgICAqIEByZXR1cm4ge0pTWmlwfSB0aGlzIEpTWmlwIG9iamVjdFxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICBuYW1lID0gdGhpcy5yb290ICsgbmFtZTtcbiAgICAgICAgdmFyIGZpbGUgPSB0aGlzLmZpbGVzW25hbWVdO1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgIC8vIExvb2sgZm9yIGFueSBmb2xkZXJzXG4gICAgICAgICAgICBpZiAobmFtZS5zbGljZSgtMSkgIT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICBuYW1lICs9IFwiL1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsZSA9IHRoaXMuZmlsZXNbbmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZSAmJiAhZmlsZS5kaXIpIHtcbiAgICAgICAgICAgIC8vIGZpbGVcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWF5YmUgYSBmb2xkZXIsIGRlbGV0ZSByZWN1cnNpdmVseVxuICAgICAgICAgICAgdmFyIGtpZHMgPSB0aGlzLmZpbHRlcihmdW5jdGlvbihyZWxhdGl2ZVBhdGgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZS5uYW1lLnNsaWNlKDAsIG5hbWUubGVuZ3RoKSA9PT0gbmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBraWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmlsZXNba2lkc1tpXS5uYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSB0aGUgY29tcGxldGUgemlwIGZpbGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBnZW5lcmF0ZSB0aGUgemlwIGZpbGUgOlxuICAgICAqIC0gYmFzZTY0LCAoZGVwcmVjYXRlZCwgdXNlIHR5cGUgaW5zdGVhZCkgdHJ1ZSB0byBnZW5lcmF0ZSBiYXNlNjQuXG4gICAgICogLSBjb21wcmVzc2lvbiwgXCJTVE9SRVwiIGJ5IGRlZmF1bHQuXG4gICAgICogLSB0eXBlLCBcImJhc2U2NFwiIGJ5IGRlZmF1bHQuIFZhbHVlcyBhcmUgOiBzdHJpbmcsIGJhc2U2NCwgdWludDhhcnJheSwgYXJyYXlidWZmZXIsIGJsb2IuXG4gICAgICogQHJldHVybiB7U3RyaW5nfFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ8QnVmZmVyfEJsb2J9IHRoZSB6aXAgZmlsZVxuICAgICAqL1xuICAgIGdlbmVyYXRlOiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQob3B0aW9ucyB8fCB7fSwge1xuICAgICAgICAgICAgYmFzZTY0OiB0cnVlLFxuICAgICAgICAgICAgY29tcHJlc3Npb246IFwiU1RPUkVcIixcbiAgICAgICAgICAgIHR5cGU6IFwiYmFzZTY0XCIsXG4gICAgICAgICAgICBjb21tZW50OiBudWxsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHV0aWxzLmNoZWNrU3VwcG9ydChvcHRpb25zLnR5cGUpO1xuXG4gICAgICAgIHZhciB6aXBEYXRhID0gW10sXG4gICAgICAgICAgICBsb2NhbERpckxlbmd0aCA9IDAsXG4gICAgICAgICAgICBjZW50cmFsRGlyTGVuZ3RoID0gMCxcbiAgICAgICAgICAgIHdyaXRlciwgaSxcbiAgICAgICAgICAgIHV0ZkVuY29kZWRDb21tZW50ID0gdXRpbHMudHJhbnNmb3JtVG8oXCJzdHJpbmdcIiwgdGhpcy51dGY4ZW5jb2RlKG9wdGlvbnMuY29tbWVudCB8fCB0aGlzLmNvbW1lbnQgfHwgXCJcIikpO1xuXG4gICAgICAgIC8vIGZpcnN0LCBnZW5lcmF0ZSBhbGwgdGhlIHppcCBwYXJ0cy5cbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLmZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmaWxlID0gdGhpcy5maWxlc1tuYW1lXTtcblxuICAgICAgICAgICAgdmFyIGNvbXByZXNzaW9uTmFtZSA9IGZpbGUub3B0aW9ucy5jb21wcmVzc2lvbiB8fCBvcHRpb25zLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB2YXIgY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbnNbY29tcHJlc3Npb25OYW1lXTtcbiAgICAgICAgICAgIGlmICghY29tcHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcHJlc3Npb25OYW1lICsgXCIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICFcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjb21wcmVzc2VkT2JqZWN0ID0gZ2VuZXJhdGVDb21wcmVzc2VkT2JqZWN0RnJvbS5jYWxsKHRoaXMsIGZpbGUsIGNvbXByZXNzaW9uKTtcblxuICAgICAgICAgICAgdmFyIHppcFBhcnQgPSBnZW5lcmF0ZVppcFBhcnRzLmNhbGwodGhpcywgbmFtZSwgZmlsZSwgY29tcHJlc3NlZE9iamVjdCwgbG9jYWxEaXJMZW5ndGgpO1xuICAgICAgICAgICAgbG9jYWxEaXJMZW5ndGggKz0gemlwUGFydC5maWxlUmVjb3JkLmxlbmd0aCArIGNvbXByZXNzZWRPYmplY3QuY29tcHJlc3NlZFNpemU7XG4gICAgICAgICAgICBjZW50cmFsRGlyTGVuZ3RoICs9IHppcFBhcnQuZGlyUmVjb3JkLmxlbmd0aDtcbiAgICAgICAgICAgIHppcERhdGEucHVzaCh6aXBQYXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaXJFbmQgPSBcIlwiO1xuXG4gICAgICAgIC8vIGVuZCBvZiBjZW50cmFsIGRpciBzaWduYXR1cmVcbiAgICAgICAgZGlyRW5kID0gc2lnbmF0dXJlLkNFTlRSQUxfRElSRUNUT1JZX0VORCArXG4gICAgICAgIC8vIG51bWJlciBvZiB0aGlzIGRpc2tcbiAgICAgICAgXCJcXHgwMFxceDAwXCIgK1xuICAgICAgICAvLyBudW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIGNlbnRyYWwgZGlyZWN0b3J5XG4gICAgICAgIFwiXFx4MDBcXHgwMFwiICtcbiAgICAgICAgLy8gdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IG9uIHRoaXMgZGlza1xuICAgICAgICBkZWNUb0hleCh6aXBEYXRhLmxlbmd0aCwgMikgK1xuICAgICAgICAvLyB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJhbCBkaXJlY3RvcnlcbiAgICAgICAgZGVjVG9IZXgoemlwRGF0YS5sZW5ndGgsIDIpICtcbiAgICAgICAgLy8gc2l6ZSBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkgICA0IGJ5dGVzXG4gICAgICAgIGRlY1RvSGV4KGNlbnRyYWxEaXJMZW5ndGgsIDQpICtcbiAgICAgICAgLy8gb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXJcbiAgICAgICAgZGVjVG9IZXgobG9jYWxEaXJMZW5ndGgsIDQpICtcbiAgICAgICAgLy8gLlpJUCBmaWxlIGNvbW1lbnQgbGVuZ3RoXG4gICAgICAgIGRlY1RvSGV4KHV0ZkVuY29kZWRDb21tZW50Lmxlbmd0aCwgMikgK1xuICAgICAgICAvLyAuWklQIGZpbGUgY29tbWVudFxuICAgICAgICB1dGZFbmNvZGVkQ29tbWVudDtcblxuXG4gICAgICAgIC8vIHdlIGhhdmUgYWxsIHRoZSBwYXJ0cyAoYW5kIHRoZSB0b3RhbCBsZW5ndGgpXG4gICAgICAgIC8vIHRpbWUgdG8gY3JlYXRlIGEgd3JpdGVyICFcbiAgICAgICAgdmFyIHR5cGVOYW1lID0gb3B0aW9ucy50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmKHR5cGVOYW1lPT09XCJ1aW50OGFycmF5XCJ8fHR5cGVOYW1lPT09XCJhcnJheWJ1ZmZlclwifHx0eXBlTmFtZT09PVwiYmxvYlwifHx0eXBlTmFtZT09PVwibm9kZWJ1ZmZlclwiKSB7XG4gICAgICAgICAgICB3cml0ZXIgPSBuZXcgVWludDhBcnJheVdyaXRlcihsb2NhbERpckxlbmd0aCArIGNlbnRyYWxEaXJMZW5ndGggKyBkaXJFbmQubGVuZ3RoKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKGxvY2FsRGlyTGVuZ3RoICsgY2VudHJhbERpckxlbmd0aCArIGRpckVuZC5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHppcERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoemlwRGF0YVtpXS5maWxlUmVjb3JkKTtcbiAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoemlwRGF0YVtpXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgemlwRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCh6aXBEYXRhW2ldLmRpclJlY29yZCk7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZXIuYXBwZW5kKGRpckVuZCk7XG5cbiAgICAgICAgdmFyIHppcCA9IHdyaXRlci5maW5hbGl6ZSgpO1xuXG5cblxuICAgICAgICBzd2l0Y2gob3B0aW9ucy50eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIC8vIGNhc2UgXCJ6aXAgaXMgYW4gVWludDhBcnJheVwiXG4gICAgICAgICAgICBjYXNlIFwidWludDhhcnJheVwiIDpcbiAgICAgICAgICAgIGNhc2UgXCJhcnJheWJ1ZmZlclwiIDpcbiAgICAgICAgICAgIGNhc2UgXCJub2RlYnVmZmVyXCIgOlxuICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnRyYW5zZm9ybVRvKG9wdGlvbnMudHlwZS50b0xvd2VyQ2FzZSgpLCB6aXApO1xuICAgICAgICAgICAgY2FzZSBcImJsb2JcIiA6XG4gICAgICAgICAgICAgICByZXR1cm4gdXRpbHMuYXJyYXlCdWZmZXIyQmxvYih1dGlscy50cmFuc2Zvcm1UbyhcImFycmF5YnVmZmVyXCIsIHppcCkpO1xuICAgICAgICAgICAgLy8gY2FzZSBcInppcCBpcyBhIHN0cmluZ1wiXG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0XCIgOlxuICAgICAgICAgICAgICAgcmV0dXJuIChvcHRpb25zLmJhc2U2NCkgPyBiYXNlNjQuZW5jb2RlKHppcCkgOiB6aXA7XG4gICAgICAgICAgICBkZWZhdWx0IDogLy8gY2FzZSBcInN0cmluZ1wiIDpcbiAgICAgICAgICAgICAgIHJldHVybiB6aXA7XG4gICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LlxuICAgICAqL1xuICAgIGNyYzMyOiBmdW5jdGlvbiAoaW5wdXQsIGNyYykge1xuICAgICAgICByZXR1cm4gY3JjMzIoaW5wdXQsIGNyYyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgICAgKi9cbiAgICB1dGY4ZW5jb2RlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB1dGlscy50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLCB1dGY4LnV0ZjhlbmNvZGUoc3RyaW5nKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgICAgKi9cbiAgICB1dGY4ZGVjb2RlOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHV0ZjgudXRmOGRlY29kZShpbnB1dCk7XG4gICAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gb3V0O1xuXG59LHtcIi4vYmFzZTY0XCI6MSxcIi4vY29tcHJlc3NlZE9iamVjdFwiOjIsXCIuL2NvbXByZXNzaW9uc1wiOjMsXCIuL2NyYzMyXCI6NCxcIi4vZGVmYXVsdHNcIjo2LFwiLi9ub2RlQnVmZmVyXCI6MTEsXCIuL3NpZ25hdHVyZVwiOjE0LFwiLi9zdHJpbmdXcml0ZXJcIjoxNixcIi4vc3VwcG9ydFwiOjE3LFwiLi91aW50OEFycmF5V3JpdGVyXCI6MTksXCIuL3V0ZjhcIjoyMCxcIi4vdXRpbHNcIjoyMX1dLDE0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcbmV4cG9ydHMuTE9DQUxfRklMRV9IRUFERVIgPSBcIlBLXFx4MDNcXHgwNFwiO1xuZXhwb3J0cy5DRU5UUkFMX0ZJTEVfSEVBREVSID0gXCJQS1xceDAxXFx4MDJcIjtcbmV4cG9ydHMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EID0gXCJQS1xceDA1XFx4MDZcIjtcbmV4cG9ydHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiA9IFwiUEtcXHgwNlxceDA3XCI7XG5leHBvcnRzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCA9IFwiUEtcXHgwNlxceDA2XCI7XG5leHBvcnRzLkRBVEFfREVTQ1JJUFRPUiA9IFwiUEtcXHgwN1xceDA4XCI7XG5cbn0se31dLDE1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcbnZhciBEYXRhUmVhZGVyID0gX2RlcmVxXygnLi9kYXRhUmVhZGVyJyk7XG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIFN0cmluZ1JlYWRlcihkYXRhLCBvcHRpbWl6ZWRCaW5hcnlTdHJpbmcpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIGlmICghb3B0aW1pemVkQmluYXJ5U3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHV0aWxzLnN0cmluZzJiaW5hcnkodGhpcy5kYXRhKTtcbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgIHRoaXMuaW5kZXggPSAwO1xufVxuU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IG5ldyBEYXRhUmVhZGVyKCk7XG4vKipcbiAqIEBzZWUgRGF0YVJlYWRlci5ieXRlQXRcbiAqL1xuU3RyaW5nUmVhZGVyLnByb3RvdHlwZS5ieXRlQXQgPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KGkpO1xufTtcbi8qKlxuICogQHNlZSBEYXRhUmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlXG4gKi9cblN0cmluZ1JlYWRlci5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmUgPSBmdW5jdGlvbihzaWcpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKHNpZyk7XG59O1xuLyoqXG4gKiBAc2VlIERhdGFSZWFkZXIucmVhZERhdGFcbiAqL1xuU3RyaW5nUmVhZGVyLnByb3RvdHlwZS5yZWFkRGF0YSA9IGZ1bmN0aW9uKHNpemUpIHtcbiAgICB0aGlzLmNoZWNrT2Zmc2V0KHNpemUpO1xuICAgIC8vIHRoaXMgd2lsbCB3b3JrIGJlY2F1c2UgdGhlIGNvbnN0cnVjdG9yIGFwcGxpZWQgdGhlIFwiJiAweGZmXCIgbWFzay5cbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsIHRoaXMuaW5kZXggKyBzaXplKTtcbiAgICB0aGlzLmluZGV4ICs9IHNpemU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZ1JlYWRlcjtcblxufSx7XCIuL2RhdGFSZWFkZXJcIjo1LFwiLi91dGlsc1wiOjIxfV0sMTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRvIHdyaXRlIGFueSBjb250ZW50IHRvIGEgc3RyaW5nLlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbnZhciBTdHJpbmdXcml0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbn07XG5TdHJpbmdXcml0ZXIucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEFwcGVuZCBhbnkgY29udGVudCB0byB0aGUgY3VycmVudCBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0IHRoZSBjb250ZW50IHRvIGFkZC5cbiAgICAgKi9cbiAgICBhcHBlbmQ6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIGlucHV0ID0gdXRpbHMudHJhbnNmb3JtVG8oXCJzdHJpbmdcIiwgaW5wdXQpO1xuICAgICAgICB0aGlzLmRhdGEucHVzaChpbnB1dCk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBGaW5hbGl6ZSB0aGUgY29uc3RydWN0aW9uIGFuIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGdlbmVyYXRlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZmluYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmpvaW4oXCJcIik7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdXcml0ZXI7XG5cbn0se1wiLi91dGlsc1wiOjIxfV0sMTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChCdWZmZXIpe1xuJ3VzZSBzdHJpY3QnO1xuZXhwb3J0cy5iYXNlNjQgPSB0cnVlO1xuZXhwb3J0cy5hcnJheSA9IHRydWU7XG5leHBvcnRzLnN0cmluZyA9IHRydWU7XG5leHBvcnRzLmFycmF5YnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiO1xuLy8gY29udGFpbnMgdHJ1ZSBpZiBKU1ppcCBjYW4gcmVhZC9nZW5lcmF0ZSBub2RlanMgQnVmZmVyLCBmYWxzZSBvdGhlcndpc2UuXG4vLyBCcm93c2VyaWZ5IHdpbGwgcHJvdmlkZSBhIEJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBmb3IgYnJvd3NlcnMsIHdoaWNoIGlzXG4vLyBhbiBhdWdtZW50ZWQgVWludDhBcnJheSAoaS5lLiwgY2FuIGJlIHVzZWQgYXMgZWl0aGVyIEJ1ZmZlciBvciBVOCkuXG5leHBvcnRzLm5vZGVidWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiO1xuLy8gY29udGFpbnMgdHJ1ZSBpZiBKU1ppcCBjYW4gcmVhZC9nZW5lcmF0ZSBVaW50OEFycmF5LCBmYWxzZSBvdGhlcndpc2UuXG5leHBvcnRzLnVpbnQ4YXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGV4cG9ydHMuYmxvYiA9IGZhbHNlO1xufVxuZWxzZSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB0cnkge1xuICAgICAgICBleHBvcnRzLmJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgICAgICAgdHlwZTogXCJhcHBsaWNhdGlvbi96aXBcIlxuICAgICAgICB9KS5zaXplID09PSAwO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIEJ1aWxkZXIgPSB3aW5kb3cuQmxvYkJ1aWxkZXIgfHwgd2luZG93LldlYktpdEJsb2JCdWlsZGVyIHx8IHdpbmRvdy5Nb3pCbG9iQnVpbGRlciB8fCB3aW5kb3cuTVNCbG9iQnVpbGRlcjtcbiAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1ZmZlcik7XG4gICAgICAgICAgICBleHBvcnRzLmJsb2IgPSBidWlsZGVyLmdldEJsb2IoJ2FwcGxpY2F0aW9uL3ppcCcpLnNpemUgPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGV4cG9ydHMuYmxvYiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG59KS5jYWxsKHRoaXMsKHR5cGVvZiBCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIgPyBCdWZmZXIgOiB1bmRlZmluZWQpKVxufSx7fV0sMTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIERhdGFSZWFkZXIgPSBfZGVyZXFfKCcuL2RhdGFSZWFkZXInKTtcblxuZnVuY3Rpb24gVWludDhBcnJheVJlYWRlcihkYXRhKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICB9XG59XG5VaW50OEFycmF5UmVhZGVyLnByb3RvdHlwZSA9IG5ldyBEYXRhUmVhZGVyKCk7XG4vKipcbiAqIEBzZWUgRGF0YVJlYWRlci5ieXRlQXRcbiAqL1xuVWludDhBcnJheVJlYWRlci5wcm90b3R5cGUuYnl0ZUF0ID0gZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiB0aGlzLmRhdGFbaV07XG59O1xuLyoqXG4gKiBAc2VlIERhdGFSZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmVcbiAqL1xuVWludDhBcnJheVJlYWRlci5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmUgPSBmdW5jdGlvbihzaWcpIHtcbiAgICB2YXIgc2lnMCA9IHNpZy5jaGFyQ29kZUF0KDApLFxuICAgICAgICBzaWcxID0gc2lnLmNoYXJDb2RlQXQoMSksXG4gICAgICAgIHNpZzIgPSBzaWcuY2hhckNvZGVBdCgyKSxcbiAgICAgICAgc2lnMyA9IHNpZy5jaGFyQ29kZUF0KDMpO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDQ7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPT09IHNpZzAgJiYgdGhpcy5kYXRhW2kgKyAxXSA9PT0gc2lnMSAmJiB0aGlzLmRhdGFbaSArIDJdID09PSBzaWcyICYmIHRoaXMuZGF0YVtpICsgM10gPT09IHNpZzMpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xufTtcbi8qKlxuICogQHNlZSBEYXRhUmVhZGVyLnJlYWREYXRhXG4gKi9cblVpbnQ4QXJyYXlSZWFkZXIucHJvdG90eXBlLnJlYWREYXRhID0gZnVuY3Rpb24oc2l6ZSkge1xuICAgIHRoaXMuY2hlY2tPZmZzZXQoc2l6ZSk7XG4gICAgaWYoc2l6ZSA9PT0gMCkge1xuICAgICAgICAvLyBpbiBJRTEwLCB3aGVuIHVzaW5nIHN1YmFycmF5KGlkeCwgaWR4KSwgd2UgZ2V0IHRoZSBhcnJheSBbMHgwMF0gaW5zdGVhZCBvZiBbXS5cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsIHRoaXMuaW5kZXggKyBzaXplKTtcbiAgICB0aGlzLmluZGV4ICs9IHNpemU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXlSZWFkZXI7XG5cbn0se1wiLi9kYXRhUmVhZGVyXCI6NX1dLDE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscycpO1xuXG4vKipcbiAqIEFuIG9iamVjdCB0byB3cml0ZSBhbnkgY29udGVudCB0byBhbiBVaW50OEFycmF5LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIGFycmF5LlxuICovXG52YXIgVWludDhBcnJheVdyaXRlciA9IGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgdGhpcy5pbmRleCA9IDA7XG59O1xuVWludDhBcnJheVdyaXRlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQXBwZW5kIGFueSBjb250ZW50IHRvIHRoZSBjdXJyZW50IGFycmF5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dCB0aGUgY29udGVudCB0byBhZGQuXG4gICAgICovXG4gICAgYXBwZW5kOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAvLyB3aXRoIGFuIGVtcHR5IFVpbnQ4QXJyYXksIE9wZXJhIGZhaWxzIHdpdGggYSBcIk9mZnNldCBsYXJnZXIgdGhhbiBhcnJheSBzaXplXCJcbiAgICAgICAgICAgIGlucHV0ID0gdXRpbHMudHJhbnNmb3JtVG8oXCJ1aW50OGFycmF5XCIsIGlucHV0KTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXQoaW5wdXQsIHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5pbmRleCArPSBpbnB1dC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEZpbmFsaXplIHRoZSBjb25zdHJ1Y3Rpb24gYW4gcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICogQHJldHVybiB7VWludDhBcnJheX0gdGhlIGdlbmVyYXRlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmaW5hbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5V3JpdGVyO1xuXG59LHtcIi4vdXRpbHNcIjoyMX1dLDIwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscycpO1xudmFyIHN1cHBvcnQgPSBfZGVyZXFfKCcuL3N1cHBvcnQnKTtcbnZhciBub2RlQnVmZmVyID0gX2RlcmVxXygnLi9ub2RlQnVmZmVyJyk7XG5cbi8qKlxuICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY29tZSBmcm9tIHBha28sIGZyb20gcGFrby9saWIvdXRpbHMvc3RyaW5nc1xuICogcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgcGFrbyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bha28vXG4gKi9cblxuLy8gVGFibGUgd2l0aCB1dGY4IGxlbmd0aHMgKGNhbGN1bGF0ZWQgYnkgZmlyc3QgYnl0ZSBvZiBzZXF1ZW5jZSlcbi8vIE5vdGUsIHRoYXQgNSAmIDYtYnl0ZSB2YWx1ZXMgYW5kIHNvbWUgNC1ieXRlIHZhbHVlcyBjYW4gbm90IGJlIHJlcHJlc2VudGVkIGluIEpTLFxuLy8gYmVjYXVzZSBtYXggcG9zc2libGUgY29kZXBvaW50IGlzIDB4MTBmZmZmXG52YXIgX3V0ZjhsZW4gPSBuZXcgQXJyYXkoMjU2KTtcbmZvciAodmFyIGk9MDsgaTwyNTY7IGkrKykge1xuICBfdXRmOGxlbltpXSA9IChpID49IDI1MiA/IDYgOiBpID49IDI0OCA/IDUgOiBpID49IDI0MCA/IDQgOiBpID49IDIyNCA/IDMgOiBpID49IDE5MiA/IDIgOiAxKTtcbn1cbl91dGY4bGVuWzI1NF09X3V0ZjhsZW5bMjU0XT0xOyAvLyBJbnZhbGlkIHNlcXVlbmNlIHN0YXJ0XG5cbi8vIGNvbnZlcnQgc3RyaW5nIHRvIGFycmF5ICh0eXBlZCwgd2hlbiBwb3NzaWJsZSlcbnZhciBzdHJpbmcyYnVmID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHZhciBidWYsIGMsIGMyLCBtX3BvcywgaSwgc3RyX2xlbiA9IHN0ci5sZW5ndGgsIGJ1Zl9sZW4gPSAwO1xuXG4gICAgLy8gY291bnQgYmluYXJ5IHNpemVcbiAgICBmb3IgKG1fcG9zID0gMDsgbV9wb3MgPCBzdHJfbGVuOyBtX3BvcysrKSB7XG4gICAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChtX3Bvcyk7XG4gICAgICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAobV9wb3MrMSA8IHN0cl9sZW4pKSB7XG4gICAgICAgICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKzEpO1xuICAgICAgICAgICAgaWYgKChjMiAmIDB4ZmMwMCkgPT09IDB4ZGMwMCkge1xuICAgICAgICAgICAgICAgIGMgPSAweDEwMDAwICsgKChjIC0gMHhkODAwKSA8PCAxMCkgKyAoYzIgLSAweGRjMDApO1xuICAgICAgICAgICAgICAgIG1fcG9zKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnVmX2xlbiArPSBjIDwgMHg4MCA/IDEgOiBjIDwgMHg4MDAgPyAyIDogYyA8IDB4MTAwMDAgPyAzIDogNDtcbiAgICB9XG5cbiAgICAvLyBhbGxvY2F0ZSBidWZmZXJcbiAgICBpZiAoc3VwcG9ydC51aW50OGFycmF5KSB7XG4gICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGJ1Zl9sZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZiA9IG5ldyBBcnJheShidWZfbGVuKTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0XG4gICAgZm9yIChpPTAsIG1fcG9zID0gMDsgaSA8IGJ1Zl9sZW47IG1fcG9zKyspIHtcbiAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTtcbiAgICAgICAgaWYgKChjICYgMHhmYzAwKSA9PT0gMHhkODAwICYmIChtX3BvcysxIDwgc3RyX2xlbikpIHtcbiAgICAgICAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MrMSk7XG4gICAgICAgICAgICBpZiAoKGMyICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7XG4gICAgICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgLSAweGQ4MDApIDw8IDEwKSArIChjMiAtIDB4ZGMwMCk7XG4gICAgICAgICAgICAgICAgbV9wb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgIC8qIG9uZSBieXRlICovXG4gICAgICAgICAgICBidWZbaSsrXSA9IGM7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAgICAgICAvKiB0d28gYnl0ZXMgKi9cbiAgICAgICAgICAgIGJ1ZltpKytdID0gMHhDMCB8IChjID4+PiA2KTtcbiAgICAgICAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4MTAwMDApIHtcbiAgICAgICAgICAgIC8qIHRocmVlIGJ5dGVzICovXG4gICAgICAgICAgICBidWZbaSsrXSA9IDB4RTAgfCAoYyA+Pj4gMTIpO1xuICAgICAgICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDYgJiAweDNmKTtcbiAgICAgICAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiBmb3VyIGJ5dGVzICovXG4gICAgICAgICAgICBidWZbaSsrXSA9IDB4ZjAgfCAoYyA+Pj4gMTgpO1xuICAgICAgICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDEyICYgMHgzZik7XG4gICAgICAgICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyA+Pj4gNiAmIDB4M2YpO1xuICAgICAgICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgJiAweDNmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBidWY7XG59O1xuXG4vLyBDYWxjdWxhdGUgbWF4IHBvc3NpYmxlIHBvc2l0aW9uIGluIHV0ZjggYnVmZmVyLFxuLy8gdGhhdCB3aWxsIG5vdCBicmVhayBzZXF1ZW5jZS4gSWYgdGhhdCdzIG5vdCBwb3NzaWJsZVxuLy8gLSAodmVyeSBzbWFsbCBsaW1pdHMpIHJldHVybiBtYXggc2l6ZSBhcyBpcy5cbi8vXG4vLyBidWZbXSAtIHV0ZjggYnl0ZXMgYXJyYXlcbi8vIG1heCAgIC0gbGVuZ3RoIGxpbWl0IChtYW5kYXRvcnkpO1xudmFyIHV0Zjhib3JkZXIgPSBmdW5jdGlvbihidWYsIG1heCkge1xuICAgIHZhciBwb3M7XG5cbiAgICBtYXggPSBtYXggfHwgYnVmLmxlbmd0aDtcbiAgICBpZiAobWF4ID4gYnVmLmxlbmd0aCkgeyBtYXggPSBidWYubGVuZ3RoOyB9XG5cbiAgICAvLyBnbyBiYWNrIGZyb20gbGFzdCBwb3NpdGlvbiwgdW50aWwgc3RhcnQgb2Ygc2VxdWVuY2UgZm91bmRcbiAgICBwb3MgPSBtYXgtMTtcbiAgICB3aGlsZSAocG9zID49IDAgJiYgKGJ1Zltwb3NdICYgMHhDMCkgPT09IDB4ODApIHsgcG9zLS07IH1cblxuICAgIC8vIEZ1Y2t1cCAtIHZlcnkgc21hbGwgYW5kIGJyb2tlbiBzZXF1ZW5jZSxcbiAgICAvLyByZXR1cm4gbWF4LCBiZWNhdXNlIHdlIHNob3VsZCByZXR1cm4gc29tZXRoaW5nIGFueXdheS5cbiAgICBpZiAocG9zIDwgMCkgeyByZXR1cm4gbWF4OyB9XG5cbiAgICAvLyBJZiB3ZSBjYW1lIHRvIHN0YXJ0IG9mIGJ1ZmZlciAtIHRoYXQgbWVhbnMgdnVmZmVyIGlzIHRvbyBzbWFsbCxcbiAgICAvLyByZXR1cm4gbWF4IHRvby5cbiAgICBpZiAocG9zID09PSAwKSB7IHJldHVybiBtYXg7IH1cblxuICAgIHJldHVybiAocG9zICsgX3V0ZjhsZW5bYnVmW3Bvc11dID4gbWF4KSA/IHBvcyA6IG1heDtcbn07XG5cbi8vIGNvbnZlcnQgYXJyYXkgdG8gc3RyaW5nXG52YXIgYnVmMnN0cmluZyA9IGZ1bmN0aW9uIChidWYpIHtcbiAgICB2YXIgc3RyLCBpLCBvdXQsIGMsIGNfbGVuO1xuICAgIHZhciBsZW4gPSBidWYubGVuZ3RoO1xuXG4gICAgLy8gUmVzZXJ2ZSBtYXggcG9zc2libGUgbGVuZ3RoICgyIHdvcmRzIHBlciBjaGFyKVxuICAgIC8vIE5COiBieSB1bmtub3duIHJlYXNvbnMsIEFycmF5IGlzIHNpZ25pZmljYW50bHkgZmFzdGVyIGZvclxuICAgIC8vICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5IHRoYW4gVWludDE2QXJyYXkuXG4gICAgdmFyIHV0ZjE2YnVmID0gbmV3IEFycmF5KGxlbioyKTtcblxuICAgIGZvciAob3V0PTAsIGk9MDsgaTxsZW47KSB7XG4gICAgICAgIGMgPSBidWZbaSsrXTtcbiAgICAgICAgLy8gcXVpY2sgcHJvY2VzcyBhc2NpaVxuICAgICAgICBpZiAoYyA8IDB4ODApIHsgdXRmMTZidWZbb3V0KytdID0gYzsgY29udGludWU7IH1cblxuICAgICAgICBjX2xlbiA9IF91dGY4bGVuW2NdO1xuICAgICAgICAvLyBza2lwIDUgJiA2IGJ5dGUgY29kZXNcbiAgICAgICAgaWYgKGNfbGVuID4gNCkgeyB1dGYxNmJ1ZltvdXQrK10gPSAweGZmZmQ7IGkgKz0gY19sZW4tMTsgY29udGludWU7IH1cblxuICAgICAgICAvLyBhcHBseSBtYXNrIG9uIGZpcnN0IGJ5dGVcbiAgICAgICAgYyAmPSBjX2xlbiA9PT0gMiA/IDB4MWYgOiBjX2xlbiA9PT0gMyA/IDB4MGYgOiAweDA3O1xuICAgICAgICAvLyBqb2luIHRoZSByZXN0XG4gICAgICAgIHdoaWxlIChjX2xlbiA+IDEgJiYgaSA8IGxlbikge1xuICAgICAgICAgICAgYyA9IChjIDw8IDYpIHwgKGJ1ZltpKytdICYgMHgzZik7XG4gICAgICAgICAgICBjX2xlbi0tO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGVybWluYXRlZCBieSBlbmQgb2Ygc3RyaW5nP1xuICAgICAgICBpZiAoY19sZW4gPiAxKSB7IHV0ZjE2YnVmW291dCsrXSA9IDB4ZmZmZDsgY29udGludWU7IH1cblxuICAgICAgICBpZiAoYyA8IDB4MTAwMDApIHtcbiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjIC09IDB4MTAwMDA7XG4gICAgICAgICAgICB1dGYxNmJ1ZltvdXQrK10gPSAweGQ4MDAgfCAoKGMgPj4gMTApICYgMHgzZmYpO1xuICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gMHhkYzAwIHwgKGMgJiAweDNmZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzaHJpbmtCdWYodXRmMTZidWYsIG91dClcbiAgICBpZiAodXRmMTZidWYubGVuZ3RoICE9PSBvdXQpIHtcbiAgICAgICAgaWYodXRmMTZidWYuc3ViYXJyYXkpIHtcbiAgICAgICAgICAgIHV0ZjE2YnVmID0gdXRmMTZidWYuc3ViYXJyYXkoMCwgb3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHV0ZjE2YnVmLmxlbmd0aCA9IG91dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHV0ZjE2YnVmKTtcbiAgICByZXR1cm4gdXRpbHMuYXBwbHlGcm9tQ2hhckNvZGUodXRmMTZidWYpO1xufTtcblxuXG4vLyBUaGF0J3MgYWxsIGZvciB0aGUgcGFrbyBmdW5jdGlvbnMuXG5cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBqYXZhc2NyaXB0IHN0cmluZyBpbnRvIGFuIGFycmF5ICh0eXBlZCBpZiBwb3NzaWJsZSkgb2YgYnl0ZXMsXG4gKiBVVEYtOCBlbmNvZGVkLlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIGVuY29kZVxuICogQHJldHVybiB7QXJyYXl8VWludDhBcnJheXxCdWZmZXJ9IHRoZSBVVEYtOCBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0cy51dGY4ZW5jb2RlID0gZnVuY3Rpb24gdXRmOGVuY29kZShzdHIpIHtcbiAgICBpZiAoc3VwcG9ydC5ub2RlYnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBub2RlQnVmZmVyKHN0ciwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nMmJ1ZihzdHIpO1xufTtcblxuXG4vKipcbiAqIFRyYW5zZm9ybSBhIGJ5dGVzIGFycmF5IChvciBhIHJlcHJlc2VudGF0aW9uKSByZXByZXNlbnRpbmcgYW4gVVRGLTggZW5jb2RlZFxuICogc3RyaW5nIGludG8gYSBqYXZhc2NyaXB0IHN0cmluZy5cbiAqIEBwYXJhbSB7QXJyYXl8VWludDhBcnJheXxCdWZmZXJ9IGJ1ZiB0aGUgZGF0YSBkZSBkZWNvZGVcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGRlY29kZWQgc3RyaW5nLlxuICovXG5leHBvcnRzLnV0ZjhkZWNvZGUgPSBmdW5jdGlvbiB1dGY4ZGVjb2RlKGJ1Zikge1xuICAgIGlmIChzdXBwb3J0Lm5vZGVidWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLnRyYW5zZm9ybVRvKFwibm9kZWJ1ZmZlclwiLCBidWYpLnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgYnVmID0gdXRpbHMudHJhbnNmb3JtVG8oc3VwcG9ydC51aW50OGFycmF5ID8gXCJ1aW50OGFycmF5XCIgOiBcImFycmF5XCIsIGJ1Zik7XG5cbiAgICAvLyByZXR1cm4gYnVmMnN0cmluZyhidWYpO1xuICAgIC8vIENocm9tZSBwcmVmZXJzIHRvIHdvcmsgd2l0aCBcInNtYWxsXCIgY2h1bmtzIG9mIGRhdGFcbiAgICAvLyBmb3IgdGhlIG1ldGhvZCBidWYyc3RyaW5nLlxuICAgIC8vIEZpcmVmb3ggYW5kIENocm9tZSBoYXMgdGhlaXIgb3duIHNob3J0Y3V0LCBJRSBkb2Vzbid0IHNlZW0gdG8gcmVhbGx5IGNhcmUuXG4gICAgdmFyIHJlc3VsdCA9IFtdLCBrID0gMCwgbGVuID0gYnVmLmxlbmd0aCwgY2h1bmsgPSA2NTUzNjtcbiAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICB2YXIgbmV4dEJvdW5kYXJ5ID0gdXRmOGJvcmRlcihidWYsIE1hdGgubWluKGsgKyBjaHVuaywgbGVuKSk7XG4gICAgICAgIGlmIChzdXBwb3J0LnVpbnQ4YXJyYXkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJ1ZjJzdHJpbmcoYnVmLnN1YmFycmF5KGssIG5leHRCb3VuZGFyeSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJ1ZjJzdHJpbmcoYnVmLnNsaWNlKGssIG5leHRCb3VuZGFyeSkpKTtcbiAgICAgICAgfVxuICAgICAgICBrID0gbmV4dEJvdW5kYXJ5O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oXCJcIik7XG5cbn07XG4vLyB2aW06IHNldCBzaGlmdHdpZHRoPTQgc29mdHRhYnN0b3A9NDpcblxufSx7XCIuL25vZGVCdWZmZXJcIjoxMSxcIi4vc3VwcG9ydFwiOjE3LFwiLi91dGlsc1wiOjIxfV0sMjE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIHN1cHBvcnQgPSBfZGVyZXFfKCcuL3N1cHBvcnQnKTtcbnZhciBjb21wcmVzc2lvbnMgPSBfZGVyZXFfKCcuL2NvbXByZXNzaW9ucycpO1xudmFyIG5vZGVCdWZmZXIgPSBfZGVyZXFfKCcuL25vZGVCdWZmZXInKTtcbi8qKlxuICogQ29udmVydCBhIHN0cmluZyB0byBhIFwiYmluYXJ5IHN0cmluZ1wiIDogYSBzdHJpbmcgY29udGFpbmluZyBvbmx5IGNoYXIgY29kZXMgYmV0d2VlbiAwIGFuZCAyNTUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gdHJhbnNmb3JtLlxuICogQHJldHVybiB7U3RyaW5nfSB0aGUgYmluYXJ5IHN0cmluZy5cbiAqL1xuZXhwb3J0cy5zdHJpbmcyYmluYXJ5ID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIHJlc3VsdCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnRzLmFycmF5QnVmZmVyMkJsb2IgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgICBleHBvcnRzLmNoZWNrU3VwcG9ydChcImJsb2JcIik7XG5cbiAgICB0cnkge1xuICAgICAgICAvLyBCbG9iIGNvbnN0cnVjdG9yXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgICAgICAgdHlwZTogXCJhcHBsaWNhdGlvbi96aXBcIlxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZGVwcmVjYXRlZCwgYnJvd3NlciBvbmx5LCBvbGQgd2F5XG4gICAgICAgICAgICB2YXIgQnVpbGRlciA9IHdpbmRvdy5CbG9iQnVpbGRlciB8fCB3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgd2luZG93Lk1vekJsb2JCdWlsZGVyIHx8IHdpbmRvdy5NU0Jsb2JCdWlsZGVyO1xuICAgICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpO1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVmZmVyKTtcbiAgICAgICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoJ2FwcGxpY2F0aW9uL3ppcCcpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG5cbiAgICAgICAgICAgIC8vIHdlbGwsIGZ1Y2sgPyFcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi5cIik7XG4gICAgICAgIH1cbiAgICB9XG5cblxufTtcbi8qKlxuICogVGhlIGlkZW50aXR5IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0IHRoZSBpbnB1dC5cbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHNhbWUgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIEZpbGwgaW4gYW4gYXJyYXkgd2l0aCBhIHN0cmluZy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byB1c2UuXG4gKiBAcGFyYW0ge0FycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBhcnJheSB0aGUgYXJyYXkgdG8gZmlsbCBpbiAod2lsbCBiZSBtdXRhdGVkKS5cbiAqIEByZXR1cm4ge0FycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSB0aGUgdXBkYXRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheUxpa2Uoc3RyLCBhcnJheSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGFycmF5W2ldID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgc3RyaW5nLlxuICogQHBhcmFtIHtBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gYXJyYXkgdGhlIGFycmF5IHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlVG9TdHJpbmcoYXJyYXkpIHtcbiAgICAvLyBQZXJmb3JtYW5jZXMgbm90ZXMgOlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhcnJheSkgaXMgdGhlIGZhc3Rlc3QsIHNlZVxuICAgIC8vIHNlZSBodHRwOi8vanNwZXJmLmNvbS9jb252ZXJ0aW5nLWEtdWludDhhcnJheS10by1hLXN0cmluZy8yXG4gICAgLy8gYnV0IHRoZSBzdGFjayBpcyBsaW1pdGVkIChhbmQgd2UgY2FuIGdldCBodWdlIGFycmF5cyAhKS5cbiAgICAvL1xuICAgIC8vIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFycmF5W2ldKTsgZ2VuZXJhdGUgdG9vIG1hbnkgc3RyaW5ncyAhXG4gICAgLy9cbiAgICAvLyBUaGlzIGNvZGUgaXMgaW5zcGlyZWQgYnkgaHR0cDovL2pzcGVyZi5jb20vYXJyYXlidWZmZXItdG8tc3RyaW5nLWFwcGx5LXBlcmZvcm1hbmNlLzJcbiAgICB2YXIgY2h1bmsgPSA2NTUzNjtcbiAgICB2YXIgcmVzdWx0ID0gW10sXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgdHlwZSA9IGV4cG9ydHMuZ2V0VHlwZU9mKGFycmF5KSxcbiAgICAgICAgayA9IDAsXG4gICAgICAgIGNhblVzZUFwcGx5ID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgICBzd2l0Y2godHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInVpbnQ4YXJyYXlcIjpcbiAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibm9kZWJ1ZmZlclwiOlxuICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBub2RlQnVmZmVyKDApKTtcbiAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgfVxuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICBjYW5Vc2VBcHBseSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBubyBhcHBseSA6IHNsb3cgYW5kIHBhaW5mdWwgYWxnb3JpdGhtXG4gICAgICAvLyBkZWZhdWx0IGJyb3dzZXIgb24gYW5kcm9pZCA0LipcbiAgICAgIGlmICghY2FuVXNlQXBwbHkpIHtcbiAgICAgICAgIHZhciByZXN1bHRTdHIgPSBcIlwiO1xuICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDtpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFycmF5W2ldKTtcbiAgICAgICAgIH1cbiAgICByZXR1cm4gcmVzdWx0U3RyO1xuICAgIH1cbiAgICB3aGlsZSAoayA8IGxlbiAmJiBjaHVuayA+IDEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcImFycmF5XCIgfHwgdHlwZSA9PT0gXCJub2RlYnVmZmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGFycmF5LnNsaWNlKGssIE1hdGgubWluKGsgKyBjaHVuaywgbGVuKSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYXJyYXkuc3ViYXJyYXkoaywgTWF0aC5taW4oayArIGNodW5rLCBsZW4pKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgayArPSBjaHVuaztcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2h1bmsgPSBNYXRoLmZsb29yKGNodW5rIC8gMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKFwiXCIpO1xufVxuXG5leHBvcnRzLmFwcGx5RnJvbUNoYXJDb2RlID0gYXJyYXlMaWtlVG9TdHJpbmc7XG5cblxuLyoqXG4gKiBDb3B5IHRoZSBkYXRhIGZyb20gYW4gYXJyYXktbGlrZSB0byBhbiBvdGhlciBhcnJheS1saWtlLlxuICogQHBhcmFtIHtBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gYXJyYXlGcm9tIHRoZSBvcmlnaW4gYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBhcnJheVRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheSB3aGljaCB3aWxsIGJlIG11dGF0ZWQuXG4gKiBAcmV0dXJuIHtBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gdGhlIHVwZGF0ZWQgZGVzdGluYXRpb24gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZVRvQXJyYXlMaWtlKGFycmF5RnJvbSwgYXJyYXlUbykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlGcm9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFycmF5VG9baV0gPSBhcnJheUZyb21baV07XG4gICAgfVxuICAgIHJldHVybiBhcnJheVRvO1xufVxuXG4vLyBhIG1hdHJpeCBjb250YWluaW5nIGZ1bmN0aW9ucyB0byB0cmFuc2Zvcm0gZXZlcnl0aGluZyBpbnRvIGV2ZXJ5dGhpbmcuXG52YXIgdHJhbnNmb3JtID0ge307XG5cbi8vIHN0cmluZyB0byA/XG50cmFuc2Zvcm1bXCJzdHJpbmdcIl0gPSB7XG4gICAgXCJzdHJpbmdcIjogaWRlbnRpdHksXG4gICAgXCJhcnJheVwiOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVG9BcnJheUxpa2UoaW5wdXQsIG5ldyBBcnJheShpbnB1dC5sZW5ndGgpKTtcbiAgICB9LFxuICAgIFwiYXJyYXlidWZmZXJcIjogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVtcInN0cmluZ1wiXVtcInVpbnQ4YXJyYXlcIl0oaW5wdXQpLmJ1ZmZlcjtcbiAgICB9LFxuICAgIFwidWludDhhcnJheVwiOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVG9BcnJheUxpa2UoaW5wdXQsIG5ldyBVaW50OEFycmF5KGlucHV0Lmxlbmd0aCkpO1xuICAgIH0sXG4gICAgXCJub2RlYnVmZmVyXCI6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdUb0FycmF5TGlrZShpbnB1dCwgbm9kZUJ1ZmZlcihpbnB1dC5sZW5ndGgpKTtcbiAgICB9XG59O1xuXG4vLyBhcnJheSB0byA/XG50cmFuc2Zvcm1bXCJhcnJheVwiXSA9IHtcbiAgICBcInN0cmluZ1wiOiBhcnJheUxpa2VUb1N0cmluZyxcbiAgICBcImFycmF5XCI6IGlkZW50aXR5LFxuICAgIFwiYXJyYXlidWZmZXJcIjogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChuZXcgVWludDhBcnJheShpbnB1dCkpLmJ1ZmZlcjtcbiAgICB9LFxuICAgIFwidWludDhhcnJheVwiOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpO1xuICAgIH0sXG4gICAgXCJub2RlYnVmZmVyXCI6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBub2RlQnVmZmVyKGlucHV0KTtcbiAgICB9XG59O1xuXG4vLyBhcnJheWJ1ZmZlciB0byA/XG50cmFuc2Zvcm1bXCJhcnJheWJ1ZmZlclwiXSA9IHtcbiAgICBcInN0cmluZ1wiOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gYXJyYXlMaWtlVG9TdHJpbmcobmV3IFVpbnQ4QXJyYXkoaW5wdXQpKTtcbiAgICB9LFxuICAgIFwiYXJyYXlcIjogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXlMaWtlKG5ldyBVaW50OEFycmF5KGlucHV0KSwgbmV3IEFycmF5KGlucHV0LmJ5dGVMZW5ndGgpKTtcbiAgICB9LFxuICAgIFwiYXJyYXlidWZmZXJcIjogaWRlbnRpdHksXG4gICAgXCJ1aW50OGFycmF5XCI6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShpbnB1dCk7XG4gICAgfSxcbiAgICBcIm5vZGVidWZmZXJcIjogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVCdWZmZXIobmV3IFVpbnQ4QXJyYXkoaW5wdXQpKTtcbiAgICB9XG59O1xuXG4vLyB1aW50OGFycmF5IHRvID9cbnRyYW5zZm9ybVtcInVpbnQ4YXJyYXlcIl0gPSB7XG4gICAgXCJzdHJpbmdcIjogYXJyYXlMaWtlVG9TdHJpbmcsXG4gICAgXCJhcnJheVwiOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gYXJyYXlMaWtlVG9BcnJheUxpa2UoaW5wdXQsIG5ldyBBcnJheShpbnB1dC5sZW5ndGgpKTtcbiAgICB9LFxuICAgIFwiYXJyYXlidWZmZXJcIjogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmJ1ZmZlcjtcbiAgICB9LFxuICAgIFwidWludDhhcnJheVwiOiBpZGVudGl0eSxcbiAgICBcIm5vZGVidWZmZXJcIjogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVCdWZmZXIoaW5wdXQpO1xuICAgIH1cbn07XG5cbi8vIG5vZGVidWZmZXIgdG8gP1xudHJhbnNmb3JtW1wibm9kZWJ1ZmZlclwiXSA9IHtcbiAgICBcInN0cmluZ1wiOiBhcnJheUxpa2VUb1N0cmluZyxcbiAgICBcImFycmF5XCI6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBhcnJheUxpa2VUb0FycmF5TGlrZShpbnB1dCwgbmV3IEFycmF5KGlucHV0Lmxlbmd0aCkpO1xuICAgIH0sXG4gICAgXCJhcnJheWJ1ZmZlclwiOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtW1wibm9kZWJ1ZmZlclwiXVtcInVpbnQ4YXJyYXlcIl0oaW5wdXQpLmJ1ZmZlcjtcbiAgICB9LFxuICAgIFwidWludDhhcnJheVwiOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gYXJyYXlMaWtlVG9BcnJheUxpa2UoaW5wdXQsIG5ldyBVaW50OEFycmF5KGlucHV0Lmxlbmd0aCkpO1xuICAgIH0sXG4gICAgXCJub2RlYnVmZmVyXCI6IGlkZW50aXR5XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBpbnB1dCBpbnRvIGFueSB0eXBlLlxuICogVGhlIHN1cHBvcnRlZCBvdXRwdXQgdHlwZSBhcmUgOiBzdHJpbmcsIGFycmF5LCB1aW50OGFycmF5LCBhcnJheWJ1ZmZlciwgbm9kZWJ1ZmZlci5cbiAqIElmIG5vIG91dHB1dCB0eXBlIGlzIHNwZWNpZmllZCwgdGhlIHVubW9kaWZpZWQgaW5wdXQgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBvdXRwdXRUeXBlIHRoZSBvdXRwdXQgdHlwZS5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBpbnB1dCB0aGUgaW5wdXQgdG8gY29udmVydC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBhbiBFcnJvciBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBvdXRwdXQgdHlwZS5cbiAqL1xuZXhwb3J0cy50cmFuc2Zvcm1UbyA9IGZ1bmN0aW9uKG91dHB1dFR5cGUsIGlucHV0KSB7XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAvLyB1bmRlZmluZWQsIG51bGwsIGV0Y1xuICAgICAgICAvLyBhbiBlbXB0eSBzdHJpbmcgd29uJ3QgaGFybS5cbiAgICAgICAgaW5wdXQgPSBcIlwiO1xuICAgIH1cbiAgICBpZiAoIW91dHB1dFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBleHBvcnRzLmNoZWNrU3VwcG9ydChvdXRwdXRUeXBlKTtcbiAgICB2YXIgaW5wdXRUeXBlID0gZXhwb3J0cy5nZXRUeXBlT2YoaW5wdXQpO1xuICAgIHZhciByZXN1bHQgPSB0cmFuc2Zvcm1baW5wdXRUeXBlXVtvdXRwdXRUeXBlXShpbnB1dCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBpbnB1dC5cbiAqIFRoZSB0eXBlIHdpbGwgYmUgaW4gYSBmb3JtYXQgdmFsaWQgZm9yIEpTWmlwLnV0aWxzLnRyYW5zZm9ybVRvIDogc3RyaW5nLCBhcnJheSwgdWludDhhcnJheSwgYXJyYXlidWZmZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXQgdGhlIGlucHV0IHRvIGlkZW50aWZ5LlxuICogQHJldHVybiB7U3RyaW5nfSB0aGUgKGxvd2VyY2FzZSkgdHlwZSBvZiB0aGUgaW5wdXQuXG4gKi9cbmV4cG9ydHMuZ2V0VHlwZU9mID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgfVxuICAgIGlmIChzdXBwb3J0Lm5vZGVidWZmZXIgJiYgbm9kZUJ1ZmZlci50ZXN0KGlucHV0KSkge1xuICAgICAgICByZXR1cm4gXCJub2RlYnVmZmVyXCI7XG4gICAgfVxuICAgIGlmIChzdXBwb3J0LnVpbnQ4YXJyYXkgJiYgaW5wdXQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiBcInVpbnQ4YXJyYXlcIjtcbiAgICB9XG4gICAgaWYgKHN1cHBvcnQuYXJyYXlidWZmZXIgJiYgaW5wdXQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gXCJhcnJheWJ1ZmZlclwiO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSB0aGUgdHlwZSB0byBjaGVjay5cbiAqIEB0aHJvd3Mge0Vycm9yfSBhbiBFcnJvciBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCB0eXBlLlxuICovXG5leHBvcnRzLmNoZWNrU3VwcG9ydCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICB2YXIgc3VwcG9ydGVkID0gc3VwcG9ydFt0eXBlLnRvTG93ZXJDYXNlKCldO1xuICAgIGlmICghc3VwcG9ydGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0eXBlICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcIik7XG4gICAgfVxufTtcbmV4cG9ydHMuTUFYX1ZBTFVFXzE2QklUUyA9IDY1NTM1O1xuZXhwb3J0cy5NQVhfVkFMVUVfMzJCSVRTID0gLTE7IC8vIHdlbGwsIFwiXFx4RkZcXHhGRlxceEZGXFx4RkZcXHhGRlxceEZGXFx4RkZcXHhGRlwiIGlzIHBhcnNlZCBhcyAtMVxuXG4vKipcbiAqIFByZXR0aWZ5IGEgc3RyaW5nIHJlYWQgYXMgYmluYXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIHByZXR0aWZ5LlxuICogQHJldHVybiB7c3RyaW5nfSBhIHByZXR0eSBzdHJpbmcuXG4gKi9cbmV4cG9ydHMucHJldHR5ID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIHJlcyA9ICcnLFxuICAgICAgICBjb2RlLCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAoc3RyIHx8IFwiXCIpLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgcmVzICs9ICdcXFxceCcgKyAoY29kZSA8IDE2ID8gXCIwXCIgOiBcIlwiKSArIGNvZGUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSBjb21wcmVzc2lvbiByZWdpc3RlcmVkIGluIEpTWmlwLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXByZXNzaW9uTWV0aG9kIHRoZSBtZXRob2QgbWFnaWMgdG8gZmluZC5cbiAqIEByZXR1cm4ge09iamVjdHxudWxsfSB0aGUgSlNaaXAgY29tcHJlc3Npb24gb2JqZWN0LCBudWxsIGlmIG5vbmUgZm91bmQuXG4gKi9cbmV4cG9ydHMuZmluZENvbXByZXNzaW9uID0gZnVuY3Rpb24oY29tcHJlc3Npb25NZXRob2QpIHtcbiAgICBmb3IgKHZhciBtZXRob2QgaW4gY29tcHJlc3Npb25zKSB7XG4gICAgICAgIGlmICghY29tcHJlc3Npb25zLmhhc093blByb3BlcnR5KG1ldGhvZCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wcmVzc2lvbnNbbWV0aG9kXS5tYWdpYyA9PT0gY29tcHJlc3Npb25NZXRob2QpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wcmVzc2lvbnNbbWV0aG9kXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG4vKipcbiogQ3Jvc3Mtd2luZG93LCBjcm9zcy1Ob2RlLWNvbnRleHQgcmVndWxhciBleHByZXNzaW9uIGRldGVjdGlvblxuKiBAcGFyYW0gIHtPYmplY3R9ICBvYmplY3QgQW55dGhpbmdcbiogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbixcbiogZmFsc2Ugb3RoZXJ3aXNlXG4qL1xuZXhwb3J0cy5pc1JlZ0V4cCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09IFwiW29iamVjdCBSZWdFeHBdXCI7XG59O1xuXG5cbn0se1wiLi9jb21wcmVzc2lvbnNcIjozLFwiLi9ub2RlQnVmZmVyXCI6MTEsXCIuL3N1cHBvcnRcIjoxN31dLDIyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcbnZhciBTdHJpbmdSZWFkZXIgPSBfZGVyZXFfKCcuL3N0cmluZ1JlYWRlcicpO1xudmFyIE5vZGVCdWZmZXJSZWFkZXIgPSBfZGVyZXFfKCcuL25vZGVCdWZmZXJSZWFkZXInKTtcbnZhciBVaW50OEFycmF5UmVhZGVyID0gX2RlcmVxXygnLi91aW50OEFycmF5UmVhZGVyJyk7XG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7XG52YXIgc2lnID0gX2RlcmVxXygnLi9zaWduYXR1cmUnKTtcbnZhciBaaXBFbnRyeSA9IF9kZXJlcV8oJy4vemlwRW50cnknKTtcbnZhciBzdXBwb3J0ID0gX2RlcmVxXygnLi9zdXBwb3J0Jyk7XG52YXIganN6aXBQcm90byA9IF9kZXJlcV8oJy4vb2JqZWN0Jyk7XG4vLyAgY2xhc3MgWmlwRW50cmllcyB7e3tcbi8qKlxuICogQWxsIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheX0gZGF0YSB0aGUgYmluYXJ5IHN0cmVhbSB0byBsb2FkLlxuICogQHBhcmFtIHtPYmplY3R9IGxvYWRPcHRpb25zIE9wdGlvbnMgZm9yIGxvYWRpbmcgdGhlIHN0cmVhbS5cbiAqL1xuZnVuY3Rpb24gWmlwRW50cmllcyhkYXRhLCBsb2FkT3B0aW9ucykge1xuICAgIHRoaXMuZmlsZXMgPSBbXTtcbiAgICB0aGlzLmxvYWRPcHRpb25zID0gbG9hZE9wdGlvbnM7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy5sb2FkKGRhdGEpO1xuICAgIH1cbn1cblppcEVudHJpZXMucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIENoZWNrIHRoYXQgdGhlIHJlYWRlciBpcyBvbiB0aGUgc3BlZmljaWVkIHNpZ25hdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0ZWRTaWduYXR1cmUgdGhlIGV4cGVjdGVkIHNpZ25hdHVyZS5cbiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgaXQgaXMgYW4gb3RoZXIgc2lnbmF0dXJlLlxuICAgICAqL1xuICAgIGNoZWNrU2lnbmF0dXJlOiBmdW5jdGlvbihleHBlY3RlZFNpZ25hdHVyZSkge1xuICAgICAgICB2YXIgc2lnbmF0dXJlID0gdGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtcbiAgICAgICAgaWYgKHNpZ25hdHVyZSAhPT0gZXhwZWN0ZWRTaWduYXR1cmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgXCIgKyBcIihcIiArIHV0aWxzLnByZXR0eShzaWduYXR1cmUpICsgXCIsIGV4cGVjdGVkIFwiICsgdXRpbHMucHJldHR5KGV4cGVjdGVkU2lnbmF0dXJlKSArIFwiKVwiKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZCB0aGUgZW5kIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeS5cbiAgICAgKi9cbiAgICByZWFkQmxvY2tFbmRPZkNlbnRyYWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmRpc2tOdW1iZXIgPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpO1xuICAgICAgICB0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0ID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2sgPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpO1xuICAgICAgICB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgdGhpcy5jZW50cmFsRGlyU2l6ZSA9IHRoaXMucmVhZGVyLnJlYWRJbnQoNCk7XG4gICAgICAgIHRoaXMuY2VudHJhbERpck9mZnNldCA9IHRoaXMucmVhZGVyLnJlYWRJbnQoNCk7XG5cbiAgICAgICAgdGhpcy56aXBDb21tZW50TGVuZ3RoID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgLy8gd2FybmluZyA6IHRoZSBlbmNvZGluZyBkZXBlbmRzIG9mIHRoZSBzeXN0ZW0gbG9jYWxlXG4gICAgICAgIC8vIE9uIGEgbGludXggbWFjaGluZSB3aXRoIExBTkc9ZW5fVVMudXRmOCwgdGhpcyBmaWVsZCBpcyB1dGY4IGVuY29kZWQuXG4gICAgICAgIC8vIE9uIGEgd2luZG93cyBtYWNoaW5lLCB0aGlzIGZpZWxkIGlzIGVuY29kZWQgd2l0aCB0aGUgbG9jYWxpemVkIHdpbmRvd3MgY29kZSBwYWdlLlxuICAgICAgICB0aGlzLnppcENvbW1lbnQgPSB0aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCk7XG4gICAgICAgIC8vIFRvIGdldCBjb25zaXN0ZW50IGJlaGF2aW9yIHdpdGggdGhlIGdlbmVyYXRpb24gcGFydCwgd2Ugd2lsbCBhc3N1bWUgdGhhdFxuICAgICAgICAvLyB0aGlzIGlzIHV0ZjggZW5jb2RlZC5cbiAgICAgICAgdGhpcy56aXBDb21tZW50ID0ganN6aXBQcm90by51dGY4ZGVjb2RlKHRoaXMuemlwQ29tbWVudCk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZWFkIHRoZSBlbmQgb2YgdGhlIFppcCA2NCBjZW50cmFsIGRpcmVjdG9yeS5cbiAgICAgKiBOb3QgbWVyZ2VkIHdpdGggdGhlIG1ldGhvZCByZWFkRW5kT2ZDZW50cmFsIDpcbiAgICAgKiBUaGUgZW5kIG9mIGNlbnRyYWwgY2FuIGNvZXhpc3Qgd2l0aCBpdHMgWmlwNjQgYnJvdGhlcixcbiAgICAgKiBJIGRvbid0IHdhbnQgdG8gcmVhZCB0aGUgd3JvbmcgbnVtYmVyIG9mIGJ5dGVzICFcbiAgICAgKi9cbiAgICByZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplID0gdGhpcy5yZWFkZXIucmVhZEludCg4KTtcbiAgICAgICAgdGhpcy52ZXJzaW9uTWFkZUJ5ID0gdGhpcy5yZWFkZXIucmVhZFN0cmluZygyKTtcbiAgICAgICAgdGhpcy52ZXJzaW9uTmVlZGVkID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgdGhpcy5kaXNrTnVtYmVyID0gdGhpcy5yZWFkZXIucmVhZEludCg0KTtcbiAgICAgICAgdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydCA9IHRoaXMucmVhZGVyLnJlYWRJbnQoNCk7XG4gICAgICAgIHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrID0gdGhpcy5yZWFkZXIucmVhZEludCg4KTtcbiAgICAgICAgdGhpcy5jZW50cmFsRGlyUmVjb3JkcyA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7XG4gICAgICAgIHRoaXMuY2VudHJhbERpclNpemUgPSB0aGlzLnJlYWRlci5yZWFkSW50KDgpO1xuICAgICAgICB0aGlzLmNlbnRyYWxEaXJPZmZzZXQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDgpO1xuXG4gICAgICAgIHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YSA9IHt9O1xuICAgICAgICB2YXIgZXh0cmFEYXRhU2l6ZSA9IHRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplIC0gNDQsXG4gICAgICAgICAgICBpbmRleCA9IDAsXG4gICAgICAgICAgICBleHRyYUZpZWxkSWQsXG4gICAgICAgICAgICBleHRyYUZpZWxkTGVuZ3RoLFxuICAgICAgICAgICAgZXh0cmFGaWVsZFZhbHVlO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBleHRyYURhdGFTaXplKSB7XG4gICAgICAgICAgICBleHRyYUZpZWxkSWQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpO1xuICAgICAgICAgICAgZXh0cmFGaWVsZExlbmd0aCA9IHRoaXMucmVhZGVyLnJlYWRJbnQoNCk7XG4gICAgICAgICAgICBleHRyYUZpZWxkVmFsdWUgPSB0aGlzLnJlYWRlci5yZWFkU3RyaW5nKGV4dHJhRmllbGRMZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2V4dHJhRmllbGRJZF0gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGV4dHJhRmllbGRJZCxcbiAgICAgICAgICAgICAgICBsZW5ndGg6IGV4dHJhRmllbGRMZW5ndGgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV4dHJhRmllbGRWYWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZCB0aGUgZW5kIG9mIHRoZSBaaXAgNjQgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvci5cbiAgICAgKi9cbiAgICByZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDQpO1xuICAgICAgICB0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIgPSB0aGlzLnJlYWRlci5yZWFkSW50KDgpO1xuICAgICAgICB0aGlzLmRpc2tzQ291bnQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDQpO1xuICAgICAgICBpZiAodGhpcy5kaXNrc0NvdW50ID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlYWQgdGhlIGxvY2FsIGZpbGVzLCBiYXNlZCBvbiB0aGUgb2Zmc2V0IHJlYWQgaW4gdGhlIGNlbnRyYWwgcGFydC5cbiAgICAgKi9cbiAgICByZWFkTG9jYWxGaWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpLCBmaWxlO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5maWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZmlsZSA9IHRoaXMuZmlsZXNbaV07XG4gICAgICAgICAgICB0aGlzLnJlYWRlci5zZXRJbmRleChmaWxlLmxvY2FsSGVhZGVyT2Zmc2V0KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTaWduYXR1cmUoc2lnLkxPQ0FMX0ZJTEVfSEVBREVSKTtcbiAgICAgICAgICAgIGZpbGUucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlcik7XG4gICAgICAgICAgICBmaWxlLmhhbmRsZVVURjgoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZCB0aGUgY2VudHJhbCBkaXJlY3RvcnkuXG4gICAgICovXG4gICAgcmVhZENlbnRyYWxEaXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZmlsZTtcblxuICAgICAgICB0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO1xuICAgICAgICB3aGlsZSAodGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KSA9PT0gc2lnLkNFTlRSQUxfRklMRV9IRUFERVIpIHtcbiAgICAgICAgICAgIGZpbGUgPSBuZXcgWmlwRW50cnkoe1xuICAgICAgICAgICAgICAgIHppcDY0OiB0aGlzLnppcDY0XG4gICAgICAgICAgICB9LCB0aGlzLmxvYWRPcHRpb25zKTtcbiAgICAgICAgICAgIGZpbGUucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKTtcbiAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZCB0aGUgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIHJlYWRFbmRPZkNlbnRyYWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoc2lnLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgob2Zmc2V0KTtcbiAgICAgICAgdGhpcy5jaGVja1NpZ25hdHVyZShzaWcuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtcbiAgICAgICAgdGhpcy5yZWFkQmxvY2tFbmRPZkNlbnRyYWwoKTtcblxuXG4gICAgICAgIC8qIGV4dHJhY3QgZnJvbSB0aGUgemlwIHNwZWMgOlxuICAgICAgICAgICAgNCkgIElmIG9uZSBvZiB0aGUgZmllbGRzIGluIHRoZSBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICByZWNvcmQgaXMgdG9vIHNtYWxsIHRvIGhvbGQgcmVxdWlyZWQgZGF0YSwgdGhlIGZpZWxkXG4gICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNldCB0byAtMSAoMHhGRkZGIG9yIDB4RkZGRkZGRkYpIGFuZCB0aGVcbiAgICAgICAgICAgICAgICBaSVA2NCBmb3JtYXQgcmVjb3JkIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgICAgICAgICAgNSkgIFRoZSBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgcmVjb3JkIGFuZCB0aGVcbiAgICAgICAgICAgICAgICBaaXA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciByZWNvcmQgbXVzdFxuICAgICAgICAgICAgICAgIHJlc2lkZSBvbiB0aGUgc2FtZSBkaXNrIHdoZW4gc3BsaXR0aW5nIG9yIHNwYW5uaW5nXG4gICAgICAgICAgICAgICAgYW4gYXJjaGl2ZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLmRpc2tOdW1iZXIgPT09IHV0aWxzLk1BWF9WQUxVRV8xNkJJVFMgfHwgdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydCA9PT0gdXRpbHMuTUFYX1ZBTFVFXzE2QklUUyB8fCB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzayA9PT0gdXRpbHMuTUFYX1ZBTFVFXzE2QklUUyB8fCB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzID09PSB1dGlscy5NQVhfVkFMVUVfMTZCSVRTIHx8IHRoaXMuY2VudHJhbERpclNpemUgPT09IHV0aWxzLk1BWF9WQUxVRV8zMkJJVFMgfHwgdGhpcy5jZW50cmFsRGlyT2Zmc2V0ID09PSB1dGlscy5NQVhfVkFMVUVfMzJCSVRTKSB7XG4gICAgICAgICAgICB0aGlzLnppcDY0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIFdhcm5pbmcgOiB0aGUgemlwNjQgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCwgYnV0IE9OTFkgaWYgdGhlIDY0Yml0cyBpbnRlZ2VyIHJlYWQgZnJvbVxuICAgICAgICAgICAgdGhlIHppcCBmaWxlIGNhbiBmaXQgaW50byBhIDMyYml0cyBpbnRlZ2VyLiBUaGlzIGNhbm5vdCBiZSBzb2x2ZWQgOiBKYXZhc2NyaXB0IHJlcHJlc2VudHNcbiAgICAgICAgICAgIGFsbCBudW1iZXJzIGFzIDY0LWJpdCBkb3VibGUgcHJlY2lzaW9uIElFRUUgNzU0IGZsb2F0aW5nIHBvaW50IG51bWJlcnMuXG4gICAgICAgICAgICBTbywgd2UgaGF2ZSA1M2JpdHMgZm9yIGludGVnZXJzIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgdHJlYXQgZXZlcnl0aGluZyBhcyAzMmJpdHMuXG4gICAgICAgICAgICBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMvQml0d2lzZV9PcGVyYXRvcnNcbiAgICAgICAgICAgIGFuZCBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRUNNQS0yNjIucGRmIHNlY3Rpb24gOC41XG4gICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAvLyBzaG91bGQgbG9vayBmb3IgYSB6aXA2NCBFT0NEIGxvY2F0b3JcbiAgICAgICAgICAgIG9mZnNldCA9IHRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKHNpZy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKTtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgob2Zmc2V0KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTaWduYXR1cmUoc2lnLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpO1xuICAgICAgICAgICAgdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKTtcblxuICAgICAgICAgICAgLy8gbm93IHRoZSB6aXA2NCBFT0NEIHJlY29yZFxuICAgICAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTaWduYXR1cmUoc2lnLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCk7XG4gICAgICAgICAgICB0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByZXBhcmVSZWFkZXI6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB1dGlscy5nZXRUeXBlT2YoZGF0YSk7XG4gICAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiICYmICFzdXBwb3J0LnVpbnQ4YXJyYXkpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihkYXRhLCB0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJub2RlYnVmZmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZGVyID0gbmV3IE5vZGVCdWZmZXJSZWFkZXIoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRlciA9IG5ldyBVaW50OEFycmF5UmVhZGVyKHV0aWxzLnRyYW5zZm9ybVRvKFwidWludDhhcnJheVwiLCBkYXRhKSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlYWQgYSB6aXAgZmlsZSBhbmQgY3JlYXRlIFppcEVudHJpZXMuXG4gICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGRhdGEgdGhlIGJpbmFyeSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgemlwIGZpbGUuXG4gICAgICovXG4gICAgbG9hZDogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICB0aGlzLnByZXBhcmVSZWFkZXIoZGF0YSk7XG4gICAgICAgIHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpO1xuICAgICAgICB0aGlzLnJlYWRDZW50cmFsRGlyKCk7XG4gICAgICAgIHRoaXMucmVhZExvY2FsRmlsZXMoKTtcbiAgICB9XG59O1xuLy8gfX19IGVuZCBvZiBaaXBFbnRyaWVzXG5tb2R1bGUuZXhwb3J0cyA9IFppcEVudHJpZXM7XG5cbn0se1wiLi9ub2RlQnVmZmVyUmVhZGVyXCI6MTIsXCIuL29iamVjdFwiOjEzLFwiLi9zaWduYXR1cmVcIjoxNCxcIi4vc3RyaW5nUmVhZGVyXCI6MTUsXCIuL3N1cHBvcnRcIjoxNyxcIi4vdWludDhBcnJheVJlYWRlclwiOjE4LFwiLi91dGlsc1wiOjIxLFwiLi96aXBFbnRyeVwiOjIzfV0sMjM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIFN0cmluZ1JlYWRlciA9IF9kZXJlcV8oJy4vc3RyaW5nUmVhZGVyJyk7XG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7XG52YXIgQ29tcHJlc3NlZE9iamVjdCA9IF9kZXJlcV8oJy4vY29tcHJlc3NlZE9iamVjdCcpO1xudmFyIGpzemlwUHJvdG8gPSBfZGVyZXFfKCcuL29iamVjdCcpO1xuLy8gY2xhc3MgWmlwRW50cnkge3t7XG4vKipcbiAqIEFuIGVudHJ5IGluIHRoZSB6aXAgZmlsZS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvZiB0aGUgY3VycmVudCBmaWxlLlxuICogQHBhcmFtIHtPYmplY3R9IGxvYWRPcHRpb25zIE9wdGlvbnMgZm9yIGxvYWRpbmcgdGhlIHN0cmVhbS5cbiAqL1xuZnVuY3Rpb24gWmlwRW50cnkob3B0aW9ucywgbG9hZE9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubG9hZE9wdGlvbnMgPSBsb2FkT3B0aW9ucztcbn1cblppcEVudHJ5LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzYXkgaWYgdGhlIGZpbGUgaXMgZW5jcnlwdGVkLlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIGZpbGUgaXMgZW5jcnlwdGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNFbmNyeXB0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBiaXQgMSBpcyBzZXRcbiAgICAgICAgcmV0dXJuICh0aGlzLmJpdEZsYWcgJiAweDAwMDEpID09PSAweDAwMDE7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBzYXkgaWYgdGhlIGZpbGUgaGFzIHV0Zi04IGZpbGVuYW1lL2NvbW1lbnQuXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZmlsZW5hbWUvY29tbWVudCBpcyBpbiB1dGYtOCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHVzZVVURjg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBiaXQgMTEgaXMgc2V0XG4gICAgICAgIHJldHVybiAodGhpcy5iaXRGbGFnICYgMHgwODAwKSA9PT0gMHgwODAwO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUHJlcGFyZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgY29tcHJlc3NlZCBjb250ZW50IGZyb20gdGhpcyBaaXBGaWxlLlxuICAgICAqIEBwYXJhbSB7RGF0YVJlYWRlcn0gcmVhZGVyIHRoZSByZWFkZXIgdG8gdXNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIHRoZSBvZmZzZXQgZnJvbSB3aGVyZSB3ZSBzaG91bGQgcmVhZCB0aGUgZGF0YS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gcmVhZC5cbiAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gdGhlIGNhbGxiYWNrIHRvIGdldCB0aGUgY29tcHJlc3NlZCBjb250ZW50ICh0aGUgdHlwZSBkZXBlbmRzIG9mIHRoZSBEYXRhUmVhZGVyIGNsYXNzKS5cbiAgICAgKi9cbiAgICBwcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQ6IGZ1bmN0aW9uKHJlYWRlciwgZnJvbSwgbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c0luZGV4ID0gcmVhZGVyLmluZGV4O1xuICAgICAgICAgICAgcmVhZGVyLnNldEluZGV4KGZyb20pO1xuICAgICAgICAgICAgdmFyIGNvbXByZXNzZWRGaWxlRGF0YSA9IHJlYWRlci5yZWFkRGF0YShsZW5ndGgpO1xuICAgICAgICAgICAgcmVhZGVyLnNldEluZGV4KHByZXZpb3VzSW5kZXgpO1xuXG4gICAgICAgICAgICByZXR1cm4gY29tcHJlc3NlZEZpbGVEYXRhO1xuICAgICAgICB9O1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUHJlcGFyZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgdW5jb21wcmVzc2VkIGNvbnRlbnQgZnJvbSB0aGlzIFppcEZpbGUuXG4gICAgICogQHBhcmFtIHtEYXRhUmVhZGVyfSByZWFkZXIgdGhlIHJlYWRlciB0byB1c2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb20gdGhlIG9mZnNldCBmcm9tIHdoZXJlIHdlIHNob3VsZCByZWFkIHRoZSBkYXRhLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byByZWFkLlxuICAgICAqIEBwYXJhbSB7SlNaaXAuY29tcHJlc3Npb259IGNvbXByZXNzaW9uIHRoZSBjb21wcmVzc2lvbiB1c2VkIG9uIHRoaXMgZmlsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdW5jb21wcmVzc2VkU2l6ZSB0aGUgdW5jb21wcmVzc2VkIHNpemUgdG8gZXhwZWN0LlxuICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aGUgY2FsbGJhY2sgdG8gZ2V0IHRoZSB1bmNvbXByZXNzZWQgY29udGVudCAodGhlIHR5cGUgZGVwZW5kcyBvZiB0aGUgRGF0YVJlYWRlciBjbGFzcykuXG4gICAgICovXG4gICAgcHJlcGFyZUNvbnRlbnQ6IGZ1bmN0aW9uKHJlYWRlciwgZnJvbSwgbGVuZ3RoLCBjb21wcmVzc2lvbiwgdW5jb21wcmVzc2VkU2l6ZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIHZhciBjb21wcmVzc2VkRmlsZURhdGEgPSB1dGlscy50cmFuc2Zvcm1Ubyhjb21wcmVzc2lvbi51bmNvbXByZXNzSW5wdXRUeXBlLCB0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpO1xuICAgICAgICAgICAgdmFyIHVuY29tcHJlc3NlZEZpbGVEYXRhID0gY29tcHJlc3Npb24udW5jb21wcmVzcyhjb21wcmVzc2VkRmlsZURhdGEpO1xuXG4gICAgICAgICAgICBpZiAodW5jb21wcmVzc2VkRmlsZURhdGEubGVuZ3RoICE9PSB1bmNvbXByZXNzZWRTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuY29tcHJlc3NlZEZpbGVEYXRhO1xuICAgICAgICB9O1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZCB0aGUgbG9jYWwgcGFydCBvZiBhIHppcCBmaWxlIGFuZCBhZGQgdGhlIGluZm8gaW4gdGhpcyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtEYXRhUmVhZGVyfSByZWFkZXIgdGhlIHJlYWRlciB0byB1c2UuXG4gICAgICovXG4gICAgcmVhZExvY2FsUGFydDogZnVuY3Rpb24ocmVhZGVyKSB7XG4gICAgICAgIHZhciBjb21wcmVzc2lvbiwgbG9jYWxFeHRyYUZpZWxkc0xlbmd0aDtcblxuICAgICAgICAvLyB3ZSBhbHJlYWR5IGtub3cgZXZlcnl0aGluZyBmcm9tIHRoZSBjZW50cmFsIGRpciAhXG4gICAgICAgIC8vIElmIHRoZSBjZW50cmFsIGRpciBkYXRhIGFyZSBmYWxzZSwgd2UgYXJlIGRvb21lZC5cbiAgICAgICAgLy8gT24gdGhlIGJyaWdodCBzaWRlLCB0aGUgbG9jYWwgcGFydCBpcyBzY2FyeSAgOiB6aXA2NCwgZGF0YSBkZXNjcmlwdG9ycywgYm90aCwgZXRjLlxuICAgICAgICAvLyBUaGUgbGVzcyBkYXRhIHdlIGdldCBoZXJlLCB0aGUgbW9yZSByZWxpYWJsZSB0aGlzIHNob3VsZCBiZS5cbiAgICAgICAgLy8gTGV0J3Mgc2tpcCB0aGUgd2hvbGUgaGVhZGVyIGFuZCBkYXNoIHRvIHRoZSBkYXRhICFcbiAgICAgICAgcmVhZGVyLnNraXAoMjIpO1xuICAgICAgICAvLyBpbiBzb21lIHppcCBjcmVhdGVkIG9uIHdpbmRvd3MsIHRoZSBmaWxlbmFtZSBzdG9yZWQgaW4gdGhlIGNlbnRyYWwgZGlyIGNvbnRhaW5zIFxcIGluc3RlYWQgb2YgLy5cbiAgICAgICAgLy8gU3RyYW5nZWx5LCB0aGUgZmlsZW5hbWUgaGVyZSBpcyBPSy5cbiAgICAgICAgLy8gSSB3b3VsZCBsb3ZlIHRvIHRyZWF0IHRoZXNlIHppcCBmaWxlcyBhcyBjb3JydXB0ZWQgKHNlZSBodHRwOi8vd3d3LmluZm8temlwLm9yZy9GQVEuaHRtbCNiYWNrc2xhc2hlc1xuICAgICAgICAvLyBvciBBUFBOT1RFIzQuNC4xNy4xLCBcIkFsbCBzbGFzaGVzIE1VU1QgYmUgZm9yd2FyZCBzbGFzaGVzICcvJ1wiKSBidXQgdGhlcmUgYXJlIGEgbG90IG9mIGJhZCB6aXAgZ2VuZXJhdG9ycy4uLlxuICAgICAgICAvLyBTZWFyY2ggXCJ1bnppcCBtaXNtYXRjaGluZyBcImxvY2FsXCIgZmlsZW5hbWUgY29udGludWluZyB3aXRoIFwiY2VudHJhbFwiIGZpbGVuYW1lIHZlcnNpb25cIiBvblxuICAgICAgICAvLyB0aGUgaW50ZXJuZXQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEkgdGhpbmsgSSBzZWUgdGhlIGxvZ2ljIGhlcmUgOiB0aGUgY2VudHJhbCBkaXJlY3RvcnkgaXMgdXNlZCB0byBkaXNwbGF5XG4gICAgICAgIC8vIGNvbnRlbnQgYW5kIHRoZSBsb2NhbCBkaXJlY3RvcnkgaXMgdXNlZCB0byBleHRyYWN0IHRoZSBmaWxlcy4gTWl4aW5nIC8gYW5kIFxcXG4gICAgICAgIC8vIG1heSBiZSB1c2VkIHRvIGRpc3BsYXkgXFwgdG8gd2luZG93cyB1c2VycyBhbmQgdXNlIC8gd2hlbiBleHRyYWN0aW5nIHRoZSBmaWxlcy5cbiAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgdGhpcyBsZWFkIGFsc28gdG8gc29tZSBpc3N1ZXMgOiBodHRwOi8vc2VjbGlzdHMub3JnL2Z1bGxkaXNjbG9zdXJlLzIwMDkvU2VwLzM5NFxuICAgICAgICB0aGlzLmZpbGVOYW1lTGVuZ3RoID0gcmVhZGVyLnJlYWRJbnQoMik7XG4gICAgICAgIGxvY2FsRXh0cmFGaWVsZHNMZW5ndGggPSByZWFkZXIucmVhZEludCgyKTsgLy8gY2FuJ3QgYmUgc3VyZSB0aGlzIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGNlbnRyYWwgZGlyXG4gICAgICAgIHRoaXMuZmlsZU5hbWUgPSByZWFkZXIucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKTtcbiAgICAgICAgcmVhZGVyLnNraXAobG9jYWxFeHRyYUZpZWxkc0xlbmd0aCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcHJlc3NlZFNpemUgPT0gLTEgfHwgdGhpcy51bmNvbXByZXNzZWRTaXplID09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSBcIiArIFwiKGNvbXByZXNzZWRTaXplID09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT0gLTEpXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcHJlc3Npb24gPSB1dGlscy5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCk7XG4gICAgICAgIGlmIChjb21wcmVzc2lvbiA9PT0gbnVsbCkgeyAvLyBubyBjb21wcmVzc2lvbiBmb3VuZFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcCA6IGNvbXByZXNzaW9uIFwiICsgdXRpbHMucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpICsgXCIgdW5rbm93biAoaW5uZXIgZmlsZSA6IFwiICsgdGhpcy5maWxlTmFtZSArIFwiKVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlY29tcHJlc3NlZCA9IG5ldyBDb21wcmVzc2VkT2JqZWN0KCk7XG4gICAgICAgIHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzZWRTaXplID0gdGhpcy5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgdGhpcy5kZWNvbXByZXNzZWQudW5jb21wcmVzc2VkU2l6ZSA9IHRoaXMudW5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgdGhpcy5kZWNvbXByZXNzZWQuY3JjMzIgPSB0aGlzLmNyYzMyO1xuICAgICAgICB0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2lvbk1ldGhvZCA9IHRoaXMuY29tcHJlc3Npb25NZXRob2Q7XG4gICAgICAgIHRoaXMuZGVjb21wcmVzc2VkLmdldENvbXByZXNzZWRDb250ZW50ID0gdGhpcy5wcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQocmVhZGVyLCByZWFkZXIuaW5kZXgsIHRoaXMuY29tcHJlc3NlZFNpemUsIGNvbXByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCA9IHRoaXMucHJlcGFyZUNvbnRlbnQocmVhZGVyLCByZWFkZXIuaW5kZXgsIHRoaXMuY29tcHJlc3NlZFNpemUsIGNvbXByZXNzaW9uLCB0aGlzLnVuY29tcHJlc3NlZFNpemUpO1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gY29tcHV0ZSB0aGUgY3JjMzIuLi5cbiAgICAgICAgaWYgKHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMikge1xuICAgICAgICAgICAgdGhpcy5kZWNvbXByZXNzZWQgPSB1dGlscy50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLCB0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpO1xuICAgICAgICAgICAgaWYgKGpzemlwUHJvdG8uY3JjMzIodGhpcy5kZWNvbXByZXNzZWQpICE9PSB0aGlzLmNyYzMyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlYWQgdGhlIGNlbnRyYWwgcGFydCBvZiBhIHppcCBmaWxlIGFuZCBhZGQgdGhlIGluZm8gaW4gdGhpcyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtEYXRhUmVhZGVyfSByZWFkZXIgdGhlIHJlYWRlciB0byB1c2UuXG4gICAgICovXG4gICAgcmVhZENlbnRyYWxQYXJ0OiBmdW5jdGlvbihyZWFkZXIpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uTWFkZUJ5ID0gcmVhZGVyLnJlYWRTdHJpbmcoMik7XG4gICAgICAgIHRoaXMudmVyc2lvbk5lZWRlZCA9IHJlYWRlci5yZWFkSW50KDIpO1xuICAgICAgICB0aGlzLmJpdEZsYWcgPSByZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgdGhpcy5jb21wcmVzc2lvbk1ldGhvZCA9IHJlYWRlci5yZWFkU3RyaW5nKDIpO1xuICAgICAgICB0aGlzLmRhdGUgPSByZWFkZXIucmVhZERhdGUoKTtcbiAgICAgICAgdGhpcy5jcmMzMiA9IHJlYWRlci5yZWFkSW50KDQpO1xuICAgICAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gcmVhZGVyLnJlYWRJbnQoNCk7XG4gICAgICAgIHRoaXMudW5jb21wcmVzc2VkU2l6ZSA9IHJlYWRlci5yZWFkSW50KDQpO1xuICAgICAgICB0aGlzLmZpbGVOYW1lTGVuZ3RoID0gcmVhZGVyLnJlYWRJbnQoMik7XG4gICAgICAgIHRoaXMuZXh0cmFGaWVsZHNMZW5ndGggPSByZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgdGhpcy5maWxlQ29tbWVudExlbmd0aCA9IHJlYWRlci5yZWFkSW50KDIpO1xuICAgICAgICB0aGlzLmRpc2tOdW1iZXJTdGFydCA9IHJlYWRlci5yZWFkSW50KDIpO1xuICAgICAgICB0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXMgPSByZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID0gcmVhZGVyLnJlYWRJbnQoNCk7XG4gICAgICAgIHRoaXMubG9jYWxIZWFkZXJPZmZzZXQgPSByZWFkZXIucmVhZEludCg0KTtcblxuICAgICAgICBpZiAodGhpcy5pc0VuY3J5cHRlZCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxlTmFtZSA9IHJlYWRlci5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpO1xuICAgICAgICB0aGlzLnJlYWRFeHRyYUZpZWxkcyhyZWFkZXIpO1xuICAgICAgICB0aGlzLnBhcnNlWklQNjRFeHRyYUZpZWxkKHJlYWRlcik7XG4gICAgICAgIHRoaXMuZmlsZUNvbW1lbnQgPSByZWFkZXIucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKTtcblxuICAgICAgICAvLyB3YXJuaW5nLCB0aGlzIGlzIHRydWUgb25seSBmb3IgemlwIHdpdGggbWFkZUJ5ID09IERPUyAocGxhdGVmb3JtIGRlcGVuZGVudCBmZWF0dXJlKVxuICAgICAgICB0aGlzLmRpciA9IHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyAmIDB4MDAwMDAwMTAgPyB0cnVlIDogZmFsc2U7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBQYXJzZSB0aGUgWklQNjQgZXh0cmEgZmllbGQgYW5kIG1lcmdlIHRoZSBpbmZvIGluIHRoZSBjdXJyZW50IFppcEVudHJ5LlxuICAgICAqIEBwYXJhbSB7RGF0YVJlYWRlcn0gcmVhZGVyIHRoZSByZWFkZXIgdG8gdXNlLlxuICAgICAqL1xuICAgIHBhcnNlWklQNjRFeHRyYUZpZWxkOiBmdW5jdGlvbihyZWFkZXIpIHtcblxuICAgICAgICBpZiAoIXRoaXMuZXh0cmFGaWVsZHNbMHgwMDAxXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2hvdWxkIGJlIHNvbWV0aGluZywgcHJlcGFyaW5nIHRoZSBleHRyYSByZWFkZXJcbiAgICAgICAgdmFyIGV4dHJhUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcih0aGlzLmV4dHJhRmllbGRzWzB4MDAwMV0udmFsdWUpO1xuXG4gICAgICAgIC8vIEkgcmVhbGx5IGhvcGUgdGhhdCB0aGVzZSA2NGJpdHMgaW50ZWdlciBjYW4gZml0IGluIDMyIGJpdHMgaW50ZWdlciwgYmVjYXVzZSBqc1xuICAgICAgICAvLyB3b24ndCBsZXQgdXMgaGF2ZSBtb3JlLlxuICAgICAgICBpZiAodGhpcy51bmNvbXByZXNzZWRTaXplID09PSB1dGlscy5NQVhfVkFMVUVfMzJCSVRTKSB7XG4gICAgICAgICAgICB0aGlzLnVuY29tcHJlc3NlZFNpemUgPSBleHRyYVJlYWRlci5yZWFkSW50KDgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbXByZXNzZWRTaXplID09PSB1dGlscy5NQVhfVkFMVUVfMzJCSVRTKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gZXh0cmFSZWFkZXIucmVhZEludCg4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sb2NhbEhlYWRlck9mZnNldCA9PT0gdXRpbHMuTUFYX1ZBTFVFXzMyQklUUykge1xuICAgICAgICAgICAgdGhpcy5sb2NhbEhlYWRlck9mZnNldCA9IGV4dHJhUmVhZGVyLnJlYWRJbnQoOCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGlza051bWJlclN0YXJ0ID09PSB1dGlscy5NQVhfVkFMVUVfMzJCSVRTKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2tOdW1iZXJTdGFydCA9IGV4dHJhUmVhZGVyLnJlYWRJbnQoNCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlYWQgdGhlIGNlbnRyYWwgcGFydCBvZiBhIHppcCBmaWxlIGFuZCBhZGQgdGhlIGluZm8gaW4gdGhpcyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtEYXRhUmVhZGVyfSByZWFkZXIgdGhlIHJlYWRlciB0byB1c2UuXG4gICAgICovXG4gICAgcmVhZEV4dHJhRmllbGRzOiBmdW5jdGlvbihyZWFkZXIpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gcmVhZGVyLmluZGV4LFxuICAgICAgICAgICAgZXh0cmFGaWVsZElkLFxuICAgICAgICAgICAgZXh0cmFGaWVsZExlbmd0aCxcbiAgICAgICAgICAgIGV4dHJhRmllbGRWYWx1ZTtcblxuICAgICAgICB0aGlzLmV4dHJhRmllbGRzID0gdGhpcy5leHRyYUZpZWxkcyB8fCB7fTtcblxuICAgICAgICB3aGlsZSAocmVhZGVyLmluZGV4IDwgc3RhcnQgKyB0aGlzLmV4dHJhRmllbGRzTGVuZ3RoKSB7XG4gICAgICAgICAgICBleHRyYUZpZWxkSWQgPSByZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgICAgIGV4dHJhRmllbGRMZW5ndGggPSByZWFkZXIucmVhZEludCgyKTtcbiAgICAgICAgICAgIGV4dHJhRmllbGRWYWx1ZSA9IHJlYWRlci5yZWFkU3RyaW5nKGV4dHJhRmllbGRMZW5ndGgpO1xuXG4gICAgICAgICAgICB0aGlzLmV4dHJhRmllbGRzW2V4dHJhRmllbGRJZF0gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGV4dHJhRmllbGRJZCxcbiAgICAgICAgICAgICAgICBsZW5ndGg6IGV4dHJhRmllbGRMZW5ndGgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV4dHJhRmllbGRWYWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQXBwbHkgYW4gVVRGOCB0cmFuc2Zvcm1hdGlvbiBpZiBuZWVkZWQuXG4gICAgICovXG4gICAgaGFuZGxlVVRGODogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZVVURjgoKSkge1xuICAgICAgICAgICAgdGhpcy5maWxlTmFtZSA9IGpzemlwUHJvdG8udXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNvbW1lbnQgPSBqc3ppcFByb3RvLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdXBhdGggPSB0aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtcbiAgICAgICAgICAgIGlmICh1cGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgPSB1cGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB1Y29tbWVudCA9IHRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO1xuICAgICAgICAgICAgaWYgKHVjb21tZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlQ29tbWVudCA9IHVjb21tZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIHVuaWNvZGUgcGF0aCBkZWNsYXJlZCBpbiB0aGUgZXh0cmEgZmllbGQsIGlmIGFueS5cbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSB1bmljb2RlIHBhdGgsIG51bGwgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdXBhdGhGaWVsZCA9IHRoaXMuZXh0cmFGaWVsZHNbMHg3MDc1XTtcbiAgICAgICAgaWYgKHVwYXRoRmllbGQpIHtcbiAgICAgICAgICAgIHZhciBleHRyYVJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIodXBhdGhGaWVsZC52YWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIHdyb25nIHZlcnNpb25cbiAgICAgICAgICAgIGlmIChleHRyYVJlYWRlci5yZWFkSW50KDEpICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZSBjcmMgb2YgdGhlIGZpbGVuYW1lIGNoYW5nZWQsIHRoaXMgZmllbGQgaXMgb3V0IG9mIGRhdGUuXG4gICAgICAgICAgICBpZiAoanN6aXBQcm90by5jcmMzMih0aGlzLmZpbGVOYW1lKSAhPT0gZXh0cmFSZWFkZXIucmVhZEludCg0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ganN6aXBQcm90by51dGY4ZGVjb2RlKGV4dHJhUmVhZGVyLnJlYWRTdHJpbmcodXBhdGhGaWVsZC5sZW5ndGggLSA1KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIHVuaWNvZGUgY29tbWVudCBkZWNsYXJlZCBpbiB0aGUgZXh0cmEgZmllbGQsIGlmIGFueS5cbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSB1bmljb2RlIGNvbW1lbnQsIG51bGwgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdWNvbW1lbnRGaWVsZCA9IHRoaXMuZXh0cmFGaWVsZHNbMHg2Mzc1XTtcbiAgICAgICAgaWYgKHVjb21tZW50RmllbGQpIHtcbiAgICAgICAgICAgIHZhciBleHRyYVJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIodWNvbW1lbnRGaWVsZC52YWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIHdyb25nIHZlcnNpb25cbiAgICAgICAgICAgIGlmIChleHRyYVJlYWRlci5yZWFkSW50KDEpICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRoZSBjcmMgb2YgdGhlIGNvbW1lbnQgY2hhbmdlZCwgdGhpcyBmaWVsZCBpcyBvdXQgb2YgZGF0ZS5cbiAgICAgICAgICAgIGlmIChqc3ppcFByb3RvLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpICE9PSBleHRyYVJlYWRlci5yZWFkSW50KDQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBqc3ppcFByb3RvLnV0ZjhkZWNvZGUoZXh0cmFSZWFkZXIucmVhZFN0cmluZyh1Y29tbWVudEZpZWxkLmxlbmd0aCAtIDUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBaaXBFbnRyeTtcblxufSx7XCIuL2NvbXByZXNzZWRPYmplY3RcIjoyLFwiLi9vYmplY3RcIjoxMyxcIi4vc3RyaW5nUmVhZGVyXCI6MTUsXCIuL3V0aWxzXCI6MjF9XSwyNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4vLyBUb3AgbGV2ZWwgZmlsZSBpcyBqdXN0IGEgbWl4aW4gb2Ygc3VibW9kdWxlcyAmIGNvbnN0YW50c1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzaWduICAgID0gX2RlcmVxXygnLi9saWIvdXRpbHMvY29tbW9uJykuYXNzaWduO1xuXG52YXIgZGVmbGF0ZSAgID0gX2RlcmVxXygnLi9saWIvZGVmbGF0ZScpO1xudmFyIGluZmxhdGUgICA9IF9kZXJlcV8oJy4vbGliL2luZmxhdGUnKTtcbnZhciBjb25zdGFudHMgPSBfZGVyZXFfKCcuL2xpYi96bGliL2NvbnN0YW50cycpO1xuXG52YXIgcGFrbyA9IHt9O1xuXG5hc3NpZ24ocGFrbywgZGVmbGF0ZSwgaW5mbGF0ZSwgY29uc3RhbnRzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYWtvO1xufSx7XCIuL2xpYi9kZWZsYXRlXCI6MjUsXCIuL2xpYi9pbmZsYXRlXCI6MjYsXCIuL2xpYi91dGlscy9jb21tb25cIjoyNyxcIi4vbGliL3psaWIvY29uc3RhbnRzXCI6MzB9XSwyNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cblxudmFyIHpsaWJfZGVmbGF0ZSA9IF9kZXJlcV8oJy4vemxpYi9kZWZsYXRlLmpzJyk7XG52YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzL2NvbW1vbicpO1xudmFyIHN0cmluZ3MgPSBfZGVyZXFfKCcuL3V0aWxzL3N0cmluZ3MnKTtcbnZhciBtc2cgPSBfZGVyZXFfKCcuL3psaWIvbWVzc2FnZXMnKTtcbnZhciB6c3RyZWFtID0gX2RlcmVxXygnLi96bGliL3pzdHJlYW0nKTtcblxuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxudmFyIFpfTk9fRkxVU0ggICAgICA9IDA7XG52YXIgWl9GSU5JU0ggICAgICAgID0gNDtcblxudmFyIFpfT0sgICAgICAgICAgICA9IDA7XG52YXIgWl9TVFJFQU1fRU5EICAgID0gMTtcblxudmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xO1xuXG52YXIgWl9ERUZBVUxUX1NUUkFURUdZICAgID0gMDtcblxudmFyIFpfREVGTEFURUQgID0gODtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vKipcbiAqIGNsYXNzIERlZmxhdGVcbiAqXG4gKiBHZW5lcmljIEpTLXN0eWxlIHdyYXBwZXIgZm9yIHpsaWIgY2FsbHMuIElmIHlvdSBkb24ndCBuZWVkXG4gKiBzdHJlYW1pbmcgYmVoYXZpb3VyIC0gdXNlIG1vcmUgc2ltcGxlIGZ1bmN0aW9uczogW1tkZWZsYXRlXV0sXG4gKiBbW2RlZmxhdGVSYXddXSBhbmQgW1tnemlwXV0uXG4gKiovXG5cbi8qIGludGVybmFsXG4gKiBEZWZsYXRlLmNodW5rcyAtPiBBcnJheVxuICpcbiAqIENodW5rcyBvZiBvdXRwdXQgZGF0YSwgaWYgW1tEZWZsYXRlI29uRGF0YV1dIG5vdCBvdmVycmlkZW4uXG4gKiovXG5cbi8qKlxuICogRGVmbGF0ZS5yZXN1bHQgLT4gVWludDhBcnJheXxBcnJheVxuICpcbiAqIENvbXByZXNzZWQgcmVzdWx0LCBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBbW0RlZmxhdGUjb25EYXRhXV1cbiAqIGFuZCBbW0RlZmxhdGUjb25FbmRdXSBoYW5kbGVycy4gRmlsbGVkIGFmdGVyIHlvdSBwdXNoIGxhc3QgY2h1bmtcbiAqIChjYWxsIFtbRGVmbGF0ZSNwdXNoXV0gd2l0aCBgWl9GSU5JU0hgIC8gYHRydWVgIHBhcmFtKS5cbiAqKi9cblxuLyoqXG4gKiBEZWZsYXRlLmVyciAtPiBOdW1iZXJcbiAqXG4gKiBFcnJvciBjb2RlIGFmdGVyIGRlZmxhdGUgZmluaXNoZWQuIDAgKFpfT0spIG9uIHN1Y2Nlc3MuXG4gKiBZb3Ugd2lsbCBub3QgbmVlZCBpdCBpbiByZWFsIGxpZmUsIGJlY2F1c2UgZGVmbGF0ZSBlcnJvcnNcbiAqIGFyZSBwb3NzaWJsZSBvbmx5IG9uIHdyb25nIG9wdGlvbnMgb3IgYmFkIGBvbkRhdGFgIC8gYG9uRW5kYFxuICogY3VzdG9tIGhhbmRsZXJzLlxuICoqL1xuXG4vKipcbiAqIERlZmxhdGUubXNnIC0+IFN0cmluZ1xuICpcbiAqIEVycm9yIG1lc3NhZ2UsIGlmIFtbRGVmbGF0ZS5lcnJdXSAhPSAwXG4gKiovXG5cblxuLyoqXG4gKiBuZXcgRGVmbGF0ZShvcHRpb25zKVxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBDcmVhdGVzIG5ldyBkZWZsYXRvciBpbnN0YW5jZSB3aXRoIHNwZWNpZmllZCBwYXJhbXMuIFRocm93cyBleGNlcHRpb25cbiAqIG9uIGJhZCBwYXJhbXMuIFN1cHBvcnRlZCBvcHRpb25zOlxuICpcbiAqIC0gYGxldmVsYFxuICogLSBgd2luZG93Qml0c2BcbiAqIC0gYG1lbUxldmVsYFxuICogLSBgc3RyYXRlZ3lgXG4gKlxuICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UuXG4gKlxuICogQWRkaXRpb25hbCBvcHRpb25zLCBmb3IgaW50ZXJuYWwgbmVlZHM6XG4gKlxuICogLSBgY2h1bmtTaXplYCAtIHNpemUgb2YgZ2VuZXJhdGVkIGRhdGEgY2h1bmtzICgxNksgYnkgZGVmYXVsdClcbiAqIC0gYHJhd2AgKEJvb2xlYW4pIC0gZG8gcmF3IGRlZmxhdGVcbiAqIC0gYGd6aXBgIChCb29sZWFuKSAtIGNyZWF0ZSBnemlwIHdyYXBwZXJcbiAqIC0gYHRvYCAoU3RyaW5nKSAtIGlmIGVxdWFsIHRvICdzdHJpbmcnLCB0aGVuIHJlc3VsdCB3aWxsIGJlIFwiYmluYXJ5IHN0cmluZ1wiXG4gKiAgICAoZWFjaCBjaGFyIGNvZGUgWzAuLjI1NV0pXG4gKiAtIGBoZWFkZXJgIChPYmplY3QpIC0gY3VzdG9tIGhlYWRlciBmb3IgZ3ppcFxuICogICAtIGB0ZXh0YCAoQm9vbGVhbikgLSB0cnVlIGlmIGNvbXByZXNzZWQgZGF0YSBiZWxpZXZlZCB0byBiZSB0ZXh0XG4gKiAgIC0gYHRpbWVgIChOdW1iZXIpIC0gbW9kaWZpY2F0aW9uIHRpbWUsIHVuaXggdGltZXN0YW1wXG4gKiAgIC0gYG9zYCAoTnVtYmVyKSAtIG9wZXJhdGlvbiBzeXN0ZW0gY29kZVxuICogICAtIGBleHRyYWAgKEFycmF5KSAtIGFycmF5IG9mIGJ5dGVzIHdpdGggZXh0cmEgZGF0YSAobWF4IDY1NTM2KVxuICogICAtIGBuYW1lYCAoU3RyaW5nKSAtIGZpbGUgbmFtZSAoYmluYXJ5IHN0cmluZylcbiAqICAgLSBgY29tbWVudGAgKFN0cmluZykgLSBjb21tZW50IChiaW5hcnkgc3RyaW5nKVxuICogICAtIGBoY3JjYCAoQm9vbGVhbikgLSB0cnVlIGlmIGhlYWRlciBjcmMgc2hvdWxkIGJlIGFkZGVkXG4gKlxuICogIyMjIyMgRXhhbXBsZTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiB2YXIgcGFrbyA9IHJlcXVpcmUoJ3Bha28nKVxuICogICAsIGNodW5rMSA9IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOCw5XSlcbiAqICAgLCBjaHVuazIgPSBVaW50OEFycmF5KFsxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOV0pO1xuICpcbiAqIHZhciBkZWZsYXRlID0gbmV3IHBha28uRGVmbGF0ZSh7IGxldmVsOiAzfSk7XG4gKlxuICogZGVmbGF0ZS5wdXNoKGNodW5rMSwgZmFsc2UpO1xuICogZGVmbGF0ZS5wdXNoKGNodW5rMiwgdHJ1ZSk7ICAvLyB0cnVlIC0+IGxhc3QgY2h1bmtcbiAqXG4gKiBpZiAoZGVmbGF0ZS5lcnIpIHsgdGhyb3cgbmV3IEVycm9yKGRlZmxhdGUuZXJyKTsgfVxuICpcbiAqIGNvbnNvbGUubG9nKGRlZmxhdGUucmVzdWx0KTtcbiAqIGBgYFxuICoqL1xudmFyIERlZmxhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cbiAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHtcbiAgICBsZXZlbDogWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxuICAgIG1ldGhvZDogWl9ERUZMQVRFRCxcbiAgICBjaHVua1NpemU6IDE2Mzg0LFxuICAgIHdpbmRvd0JpdHM6IDE1LFxuICAgIG1lbUxldmVsOiA4LFxuICAgIHN0cmF0ZWd5OiBaX0RFRkFVTFRfU1RSQVRFR1ksXG4gICAgdG86ICcnXG4gIH0sIG9wdGlvbnMgfHwge30pO1xuXG4gIHZhciBvcHQgPSB0aGlzLm9wdGlvbnM7XG5cbiAgaWYgKG9wdC5yYXcgJiYgKG9wdC53aW5kb3dCaXRzID4gMCkpIHtcbiAgICBvcHQud2luZG93Qml0cyA9IC1vcHQud2luZG93Qml0cztcbiAgfVxuXG4gIGVsc2UgaWYgKG9wdC5nemlwICYmIChvcHQud2luZG93Qml0cyA+IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSkge1xuICAgIG9wdC53aW5kb3dCaXRzICs9IDE2O1xuICB9XG5cbiAgdGhpcy5lcnIgICAgPSAwOyAgICAgIC8vIGVycm9yIGNvZGUsIGlmIGhhcHBlbnMgKDAgPSBaX09LKVxuICB0aGlzLm1zZyAgICA9ICcnOyAgICAgLy8gZXJyb3IgbWVzc2FnZVxuICB0aGlzLmVuZGVkICA9IGZhbHNlOyAgLy8gdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBvbkVuZCgpIGNhbGxzXG4gIHRoaXMuY2h1bmtzID0gW107ICAgICAvLyBjaHVua3Mgb2YgY29tcHJlc3NlZCBkYXRhXG5cbiAgdGhpcy5zdHJtID0gbmV3IHpzdHJlYW0oKTtcbiAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7XG5cbiAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlSW5pdDIoXG4gICAgdGhpcy5zdHJtLFxuICAgIG9wdC5sZXZlbCxcbiAgICBvcHQubWV0aG9kLFxuICAgIG9wdC53aW5kb3dCaXRzLFxuICAgIG9wdC5tZW1MZXZlbCxcbiAgICBvcHQuc3RyYXRlZ3lcbiAgKTtcblxuICBpZiAoc3RhdHVzICE9PSBaX09LKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTtcbiAgfVxuXG4gIGlmIChvcHQuaGVhZGVyKSB7XG4gICAgemxpYl9kZWZsYXRlLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLCBvcHQuaGVhZGVyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZWZsYXRlI3B1c2goZGF0YVssIG1vZGVdKSAtPiBCb29sZWFuXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YS4gU3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICogICB1dGY4IGJ5dGUgc2VxdWVuY2UuXG4gKiAtIG1vZGUgKE51bWJlcnxCb29sZWFuKTogMC4uNiBmb3IgY29ycmVzcG9uZGluZyBaX05PX0ZMVVNILi5aX1RSRUUgbW9kZXMuXG4gKiAgIFNlZSBjb25zdGFudHMuIFNraXBwZWQgb3IgYGZhbHNlYCBtZWFucyBaX05PX0ZMVVNILCBgdHJ1ZWAgbWVhbnNoIFpfRklOSVNILlxuICpcbiAqIFNlbmRzIGlucHV0IGRhdGEgdG8gZGVmbGF0ZSBwaXBlLCBnZW5lcmF0aW5nIFtbRGVmbGF0ZSNvbkRhdGFdXSBjYWxscyB3aXRoXG4gKiBuZXcgY29tcHJlc3NlZCBjaHVua3MuIFJldHVybnMgYHRydWVgIG9uIHN1Y2Nlc3MuIFRoZSBsYXN0IGRhdGEgYmxvY2sgbXVzdCBoYXZlXG4gKiBtb2RlIFpfRklOSVNIIChvciBgdHJ1ZWApLiBUaGF0IGZsdXNoIGludGVybmFsIHBlbmRpbmcgYnVmZmVycyBhbmQgY2FsbFxuICogW1tEZWZsYXRlI29uRW5kXV0uXG4gKlxuICogT24gZmFpbCBjYWxsIFtbRGVmbGF0ZSNvbkVuZF1dIHdpdGggZXJyb3IgY29kZSBhbmQgcmV0dXJuIGZhbHNlLlxuICpcbiAqIFdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0byB1c2UgYFVpbnQ4QXJyYXlgIG9uIGlucHV0IGZvciBiZXN0IHNwZWVkIChvdXRwdXRcbiAqIGFycmF5IGZvcm1hdCBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5KS4gQWxzbywgZG9uJ3Qgc2tpcCBsYXN0IHBhcmFtIGFuZCBhbHdheXNcbiAqIHVzZSB0aGUgc2FtZSB0eXBlIGluIHlvdXIgY29kZSAoYm9vbGVhbiBvciBudW1iZXIpLiBUaGF0IHdpbGwgaW1wcm92ZSBKUyBzcGVlZC5cbiAqXG4gKiBGb3IgcmVndWxhciBgQXJyYXlgLXMgbWFrZSBzdXJlIGFsbCBlbGVtZW50cyBhcmUgWzAuLjI1NV0uXG4gKlxuICogIyMjIyMgRXhhbXBsZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHB1c2goY2h1bmssIGZhbHNlKTsgLy8gcHVzaCBvbmUgb2YgZGF0YSBjaHVua3NcbiAqIC4uLlxuICogcHVzaChjaHVuaywgdHJ1ZSk7ICAvLyBwdXNoIGxhc3QgY2h1bmtcbiAqIGBgYFxuICoqL1xuRGVmbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGRhdGEsIG1vZGUpIHtcbiAgdmFyIHN0cm0gPSB0aGlzLnN0cm07XG4gIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplO1xuICB2YXIgc3RhdHVzLCBfbW9kZTtcblxuICBpZiAodGhpcy5lbmRlZCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICBfbW9kZSA9IChtb2RlID09PSB+fm1vZGUpID8gbW9kZSA6ICgobW9kZSA9PT0gdHJ1ZSkgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpO1xuXG4gIC8vIENvbnZlcnQgZGF0YSBpZiBuZWVkZWRcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIC8vIElmIHdlIG5lZWQgdG8gY29tcHJlc3MgdGV4dCwgY2hhbmdlIGVuY29kaW5nIHRvIHV0ZjguXG4gICAgc3RybS5pbnB1dCA9IHN0cmluZ3Muc3RyaW5nMmJ1ZihkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJtLmlucHV0ID0gZGF0YTtcbiAgfVxuXG4gIHN0cm0ubmV4dF9pbiA9IDA7XG4gIHN0cm0uYXZhaWxfaW4gPSBzdHJtLmlucHV0Lmxlbmd0aDtcblxuICBkbyB7XG4gICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4KGNodW5rU2l6ZSk7XG4gICAgICBzdHJtLm5leHRfb3V0ID0gMDtcbiAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplO1xuICAgIH1cbiAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZShzdHJtLCBfbW9kZSk7ICAgIC8qIG5vIGJhZCByZXR1cm4gdmFsdWUgKi9cblxuICAgIGlmIChzdGF0dXMgIT09IFpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IFpfT0spIHtcbiAgICAgIHRoaXMub25FbmQoc3RhdHVzKTtcbiAgICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDAgfHwgKHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgX21vZGUgPT09IFpfRklOSVNIKSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5vbkRhdGEoc3RyaW5ncy5idWYyYmluc3RyaW5nKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IFpfU1RSRUFNX0VORCk7XG5cbiAgLy8gRmluYWxpemUgb24gdGhlIGxhc3QgY2h1bmsuXG4gIGlmIChfbW9kZSA9PT0gWl9GSU5JU0gpIHtcbiAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pO1xuICAgIHRoaXMub25FbmQoc3RhdHVzKTtcbiAgICB0aGlzLmVuZGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gc3RhdHVzID09PSBaX09LO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5cbi8qKlxuICogRGVmbGF0ZSNvbkRhdGEoY2h1bmspIC0+IFZvaWRcbiAqIC0gY2h1bmsgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogb3VwdXQgZGF0YS4gVHlwZSBvZiBhcnJheSBkZXBlbmRzXG4gKiAgIG9uIGpzIGVuZ2luZSBzdXBwb3J0LiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVzdGVkLCBlYWNoIGNodW5rXG4gKiAgIHdpbGwgYmUgc3RyaW5nLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHN0b3JlcyBkYXRhIGJsb2NrcyBpbiBgY2h1bmtzW11gIHByb3BlcnR5IGFuZCBnbHVlXG4gKiB0aG9zZSBpbiBgb25FbmRgLiBPdmVycmlkZSB0aGlzIGhhbmRsZXIsIGlmIHlvdSBuZWVkIGFub3RoZXIgYmVoYXZpb3VyLlxuICoqL1xuRGVmbGF0ZS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24oY2h1bmspIHtcbiAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7XG59O1xuXG5cbi8qKlxuICogRGVmbGF0ZSNvbkVuZChzdGF0dXMpIC0+IFZvaWRcbiAqIC0gc3RhdHVzIChOdW1iZXIpOiBkZWZsYXRlIHN0YXR1cy4gMCAoWl9PSykgb24gc3VjY2VzcyxcbiAqICAgb3RoZXIgaWYgbm90LlxuICpcbiAqIENhbGxlZCBvbmNlIGFmdGVyIHlvdSB0ZWxsIGRlZmxhdGUgdGhhdCBpbnB1dCBzdHJlYW0gY29tcGxldGVcbiAqIG9yIGVycm9yIGhhcHBlbm5lZC4gQnkgZGVmYXVsdCAtIGpvaW4gY29sbGVjdGVkIGNodW5rcyxcbiAqIGZyZWUgbWVtb3J5IGFuZCBmaWxsIGByZXN1bHRzYCAvIGBlcnJgIHByb3BlcnRpZXMuXG4gKiovXG5EZWZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykge1xuICAvLyBPbiBzdWNjZXNzIC0gam9pblxuICBpZiAoc3RhdHVzID09PSBaX09LKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzdWx0ID0gdXRpbHMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcyk7XG4gICAgfVxuICB9XG4gIHRoaXMuY2h1bmtzID0gW107XG4gIHRoaXMuZXJyID0gc3RhdHVzO1xuICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7XG59O1xuXG5cbi8qKlxuICogZGVmbGF0ZShkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBjb21wcmVzcy5cbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBkZWZsYXRlIG9wdGlvbnMuXG4gKlxuICogQ29tcHJlc3MgYGRhdGFgIHdpdGggZGVmbGF0ZSBhbHJvcnl0aG0gYW5kIGBvcHRpb25zYC5cbiAqXG4gKiBTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6XG4gKlxuICogLSBsZXZlbFxuICogLSB3aW5kb3dCaXRzXG4gKiAtIG1lbUxldmVsXG4gKiAtIHN0cmF0ZWd5XG4gKlxuICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UuXG4gKlxuICogU3VnYXIgKG9wdGlvbnMpOlxuICpcbiAqIC0gYHJhd2AgKEJvb2xlYW4pIC0gc2F5IHRoYXQgd2Ugd29yayB3aXRoIHJhdyBzdHJlYW0sIGlmIHlvdSBkb24ndCB3aXNoIHRvIHNwZWNpZnlcbiAqICAgbmVnYXRpdmUgd2luZG93Qml0cyBpbXBsaWNpdGx5LlxuICogLSBgdG9gIChTdHJpbmcpIC0gaWYgZXF1YWwgdG8gJ3N0cmluZycsIHRoZW4gcmVzdWx0IHdpbGwgYmUgXCJiaW5hcnkgc3RyaW5nXCJcbiAqICAgIChlYWNoIGNoYXIgY29kZSBbMC4uMjU1XSlcbiAqXG4gKiAjIyMjIyBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHZhciBwYWtvID0gcmVxdWlyZSgncGFrbycpXG4gKiAgICwgZGF0YSA9IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOCw5XSk7XG4gKlxuICogY29uc29sZS5sb2cocGFrby5kZWZsYXRlKGRhdGEpKTtcbiAqIGBgYFxuICoqL1xuZnVuY3Rpb24gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgZGVmbGF0b3IgPSBuZXcgRGVmbGF0ZShvcHRpb25zKTtcblxuICBkZWZsYXRvci5wdXNoKGlucHV0LCB0cnVlKTtcblxuICAvLyBUaGF0IHdpbGwgbmV2ZXIgaGFwcGVucywgaWYgeW91IGRvbid0IGNoZWF0IHdpdGggb3B0aW9ucyA6KVxuICBpZiAoZGVmbGF0b3IuZXJyKSB7IHRocm93IGRlZmxhdG9yLm1zZzsgfVxuXG4gIHJldHVybiBkZWZsYXRvci5yZXN1bHQ7XG59XG5cblxuLyoqXG4gKiBkZWZsYXRlUmF3KGRhdGFbLCBvcHRpb25zXSkgLT4gVWludDhBcnJheXxBcnJheXxTdHJpbmdcbiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheXxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGNvbXByZXNzLlxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBUaGUgc2FtZSBhcyBbW2RlZmxhdGVdXSwgYnV0IGNyZWF0ZXMgcmF3IGRhdGEsIHdpdGhvdXQgd3JhcHBlclxuICogKGhlYWRlciBhbmQgYWRsZXIzMiBjcmMpLlxuICoqL1xuZnVuY3Rpb24gZGVmbGF0ZVJhdyhpbnB1dCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5yYXcgPSB0cnVlO1xuICByZXR1cm4gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucyk7XG59XG5cblxuLyoqXG4gKiBnemlwKGRhdGFbLCBvcHRpb25zXSkgLT4gVWludDhBcnJheXxBcnJheXxTdHJpbmdcbiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheXxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGNvbXByZXNzLlxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBUaGUgc2FtZSBhcyBbW2RlZmxhdGVdXSwgYnV0IGNyZWF0ZSBnemlwIHdyYXBwZXIgaW5zdGVhZCBvZlxuICogZGVmbGF0ZSBvbmUuXG4gKiovXG5mdW5jdGlvbiBnemlwKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLmd6aXAgPSB0cnVlO1xuICByZXR1cm4gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucyk7XG59XG5cblxuZXhwb3J0cy5EZWZsYXRlID0gRGVmbGF0ZTtcbmV4cG9ydHMuZGVmbGF0ZSA9IGRlZmxhdGU7XG5leHBvcnRzLmRlZmxhdGVSYXcgPSBkZWZsYXRlUmF3O1xuZXhwb3J0cy5nemlwID0gZ3ppcDtcbn0se1wiLi91dGlscy9jb21tb25cIjoyNyxcIi4vdXRpbHMvc3RyaW5nc1wiOjI4LFwiLi96bGliL2RlZmxhdGUuanNcIjozMixcIi4vemxpYi9tZXNzYWdlc1wiOjM3LFwiLi96bGliL3pzdHJlYW1cIjozOX1dLDI2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuXG52YXIgemxpYl9pbmZsYXRlID0gX2RlcmVxXygnLi96bGliL2luZmxhdGUuanMnKTtcbnZhciB1dGlscyA9IF9kZXJlcV8oJy4vdXRpbHMvY29tbW9uJyk7XG52YXIgc3RyaW5ncyA9IF9kZXJlcV8oJy4vdXRpbHMvc3RyaW5ncycpO1xudmFyIGMgPSBfZGVyZXFfKCcuL3psaWIvY29uc3RhbnRzJyk7XG52YXIgbXNnID0gX2RlcmVxXygnLi96bGliL21lc3NhZ2VzJyk7XG52YXIgenN0cmVhbSA9IF9kZXJlcV8oJy4vemxpYi96c3RyZWFtJyk7XG52YXIgZ3poZWFkZXIgPSBfZGVyZXFfKCcuL3psaWIvZ3poZWFkZXInKTtcblxuXG4vKipcbiAqIGNsYXNzIEluZmxhdGVcbiAqXG4gKiBHZW5lcmljIEpTLXN0eWxlIHdyYXBwZXIgZm9yIHpsaWIgY2FsbHMuIElmIHlvdSBkb24ndCBuZWVkXG4gKiBzdHJlYW1pbmcgYmVoYXZpb3VyIC0gdXNlIG1vcmUgc2ltcGxlIGZ1bmN0aW9uczogW1tpbmZsYXRlXV1cbiAqIGFuZCBbW2luZmxhdGVSYXddXS5cbiAqKi9cblxuLyogaW50ZXJuYWxcbiAqIGluZmxhdGUuY2h1bmtzIC0+IEFycmF5XG4gKlxuICogQ2h1bmtzIG9mIG91dHB1dCBkYXRhLCBpZiBbW0luZmxhdGUjb25EYXRhXV0gbm90IG92ZXJyaWRlbi5cbiAqKi9cblxuLyoqXG4gKiBJbmZsYXRlLnJlc3VsdCAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZ1xuICpcbiAqIFVuY29tcHJlc3NlZCByZXN1bHQsIGdlbmVyYXRlZCBieSBkZWZhdWx0IFtbSW5mbGF0ZSNvbkRhdGFdXVxuICogYW5kIFtbSW5mbGF0ZSNvbkVuZF1dIGhhbmRsZXJzLiBGaWxsZWQgYWZ0ZXIgeW91IHB1c2ggbGFzdCBjaHVua1xuICogKGNhbGwgW1tJbmZsYXRlI3B1c2hdXSB3aXRoIGBaX0ZJTklTSGAgLyBgdHJ1ZWAgcGFyYW0pLlxuICoqL1xuXG4vKipcbiAqIEluZmxhdGUuZXJyIC0+IE51bWJlclxuICpcbiAqIEVycm9yIGNvZGUgYWZ0ZXIgaW5mbGF0ZSBmaW5pc2hlZC4gMCAoWl9PSykgb24gc3VjY2Vzcy5cbiAqIFNob3VsZCBiZSBjaGVja2VkIGlmIGJyb2tlbiBkYXRhIHBvc3NpYmxlLlxuICoqL1xuXG4vKipcbiAqIEluZmxhdGUubXNnIC0+IFN0cmluZ1xuICpcbiAqIEVycm9yIG1lc3NhZ2UsIGlmIFtbSW5mbGF0ZS5lcnJdXSAhPSAwXG4gKiovXG5cblxuLyoqXG4gKiBuZXcgSW5mbGF0ZShvcHRpb25zKVxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGluZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBDcmVhdGVzIG5ldyBpbmZsYXRvciBpbnN0YW5jZSB3aXRoIHNwZWNpZmllZCBwYXJhbXMuIFRocm93cyBleGNlcHRpb25cbiAqIG9uIGJhZCBwYXJhbXMuIFN1cHBvcnRlZCBvcHRpb25zOlxuICpcbiAqIC0gYHdpbmRvd0JpdHNgXG4gKlxuICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UuXG4gKlxuICogQWRkaXRpb25hbCBvcHRpb25zLCBmb3IgaW50ZXJuYWwgbmVlZHM6XG4gKlxuICogLSBgY2h1bmtTaXplYCAtIHNpemUgb2YgZ2VuZXJhdGVkIGRhdGEgY2h1bmtzICgxNksgYnkgZGVmYXVsdClcbiAqIC0gYHJhd2AgKEJvb2xlYW4pIC0gZG8gcmF3IGluZmxhdGVcbiAqIC0gYHRvYCAoU3RyaW5nKSAtIGlmIGVxdWFsIHRvICdzdHJpbmcnLCB0aGVuIHJlc3VsdCB3aWxsIGJlIGNvbnZlcnRlZFxuICogICBmcm9tIHV0ZjggdG8gdXRmMTYgKGphdmFzY3JpcHQpIHN0cmluZy4gV2hlbiBzdHJpbmcgb3V0cHV0IHJlcXVlc3RlZCxcbiAqICAgY2h1bmsgbGVuZ3RoIGNhbiBkaWZmZXIgZnJvbSBgY2h1bmtTaXplYCwgZGVwZW5kaW5nIG9uIGNvbnRlbnQuXG4gKlxuICogQnkgZGVmYXVsdCwgd2hlbiBubyBvcHRpb25zIHNldCwgYXV0b2RldGVjdCBkZWZsYXRlL2d6aXAgZGF0YSBmb3JtYXQgdmlhXG4gKiB3cmFwcGVyIGhlYWRlci5cbiAqXG4gKiAjIyMjIyBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHZhciBwYWtvID0gcmVxdWlyZSgncGFrbycpXG4gKiAgICwgY2h1bmsxID0gVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKVxuICogICAsIGNodW5rMiA9IFVpbnQ4QXJyYXkoWzEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5XSk7XG4gKlxuICogdmFyIGluZmxhdGUgPSBuZXcgcGFrby5JbmZsYXRlKHsgbGV2ZWw6IDN9KTtcbiAqXG4gKiBpbmZsYXRlLnB1c2goY2h1bmsxLCBmYWxzZSk7XG4gKiBpbmZsYXRlLnB1c2goY2h1bmsyLCB0cnVlKTsgIC8vIHRydWUgLT4gbGFzdCBjaHVua1xuICpcbiAqIGlmIChpbmZsYXRlLmVycikgeyB0aHJvdyBuZXcgRXJyb3IoaW5mbGF0ZS5lcnIpOyB9XG4gKlxuICogY29uc29sZS5sb2coaW5mbGF0ZS5yZXN1bHQpO1xuICogYGBgXG4gKiovXG52YXIgSW5mbGF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblxuICB0aGlzLm9wdGlvbnMgPSB1dGlscy5hc3NpZ24oe1xuICAgIGNodW5rU2l6ZTogMTYzODQsXG4gICAgd2luZG93Qml0czogMCxcbiAgICB0bzogJydcbiAgfSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgdmFyIG9wdCA9IHRoaXMub3B0aW9ucztcblxuICAvLyBGb3JjZSB3aW5kb3cgc2l6ZSBmb3IgYHJhd2AgZGF0YSwgaWYgbm90IHNldCBkaXJlY3RseSxcbiAgLy8gYmVjYXVzZSB3ZSBoYXZlIG5vIGhlYWRlciBmb3IgYXV0b2RldGVjdC5cbiAgaWYgKG9wdC5yYXcgJiYgKG9wdC53aW5kb3dCaXRzID49IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSkge1xuICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzO1xuICAgIGlmIChvcHQud2luZG93Qml0cyA9PT0gMCkgeyBvcHQud2luZG93Qml0cyA9IC0xNTsgfVxuICB9XG5cbiAgLy8gSWYgYHdpbmRvd0JpdHNgIG5vdCBkZWZpbmVkIChhbmQgbW9kZSBub3QgcmF3KSAtIHNldCBhdXRvZGV0ZWN0IGZsYWcgZm9yIGd6aXAvZGVmbGF0ZVxuICBpZiAoKG9wdC53aW5kb3dCaXRzID49IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSAmJlxuICAgICAgIShvcHRpb25zICYmIG9wdGlvbnMud2luZG93Qml0cykpIHtcbiAgICBvcHQud2luZG93Qml0cyArPSAzMjtcbiAgfVxuXG4gIC8vIEd6aXAgaGVhZGVyIGhhcyBubyBpbmZvIGFib3V0IHdpbmRvd3Mgc2l6ZSwgd2UgY2FuIGRvIGF1dG9kZXRlY3Qgb25seVxuICAvLyBmb3IgZGVmbGF0ZS4gU28sIGlmIHdpbmRvdyBzaXplIG5vdCBzZXQsIGZvcmNlIGl0IHRvIG1heCB3aGVuIGd6aXAgcG9zc2libGVcbiAgaWYgKChvcHQud2luZG93Qml0cyA+IDE1KSAmJiAob3B0LndpbmRvd0JpdHMgPCA0OCkpIHtcbiAgICAvLyBiaXQgMyAoMTYpIC0+IGd6aXBwZWQgZGF0YVxuICAgIC8vIGJpdCA0ICgzMikgLT4gYXV0b2RldGVjdCBnemlwL2RlZmxhdGVcbiAgICBpZiAoKG9wdC53aW5kb3dCaXRzICYgMTUpID09PSAwKSB7XG4gICAgICBvcHQud2luZG93Qml0cyB8PSAxNTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmVyciAgICA9IDA7ICAgICAgLy8gZXJyb3IgY29kZSwgaWYgaGFwcGVucyAoMCA9IFpfT0spXG4gIHRoaXMubXNnICAgID0gJyc7ICAgICAvLyBlcnJvciBtZXNzYWdlXG4gIHRoaXMuZW5kZWQgID0gZmFsc2U7ICAvLyB1c2VkIHRvIGF2b2lkIG11bHRpcGxlIG9uRW5kKCkgY2FsbHNcbiAgdGhpcy5jaHVua3MgPSBbXTsgICAgIC8vIGNodW5rcyBvZiBjb21wcmVzc2VkIGRhdGFcblxuICB0aGlzLnN0cm0gICA9IG5ldyB6c3RyZWFtKCk7XG4gIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwO1xuXG4gIHZhciBzdGF0dXMgID0gemxpYl9pbmZsYXRlLmluZmxhdGVJbml0MihcbiAgICB0aGlzLnN0cm0sXG4gICAgb3B0LndpbmRvd0JpdHNcbiAgKTtcblxuICBpZiAoc3RhdHVzICE9PSBjLlpfT0spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pO1xuICB9XG5cbiAgdGhpcy5oZWFkZXIgPSBuZXcgZ3poZWFkZXIoKTtcblxuICB6bGliX2luZmxhdGUuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sIHRoaXMuaGVhZGVyKTtcbn07XG5cbi8qKlxuICogSW5mbGF0ZSNwdXNoKGRhdGFbLCBtb2RlXSkgLT4gQm9vbGVhblxuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGFcbiAqIC0gbW9kZSAoTnVtYmVyfEJvb2xlYW4pOiAwLi42IGZvciBjb3JyZXNwb25kaW5nIFpfTk9fRkxVU0guLlpfVFJFRSBtb2Rlcy5cbiAqICAgU2VlIGNvbnN0YW50cy4gU2tpcHBlZCBvciBgZmFsc2VgIG1lYW5zIFpfTk9fRkxVU0gsIGB0cnVlYCBtZWFuc2ggWl9GSU5JU0guXG4gKlxuICogU2VuZHMgaW5wdXQgZGF0YSB0byBpbmZsYXRlIHBpcGUsIGdlbmVyYXRpbmcgW1tJbmZsYXRlI29uRGF0YV1dIGNhbGxzIHdpdGhcbiAqIG5ldyBvdXRwdXQgY2h1bmtzLiBSZXR1cm5zIGB0cnVlYCBvbiBzdWNjZXNzLiBUaGUgbGFzdCBkYXRhIGJsb2NrIG11c3QgaGF2ZVxuICogbW9kZSBaX0ZJTklTSCAob3IgYHRydWVgKS4gVGhhdCBmbHVzaCBpbnRlcm5hbCBwZW5kaW5nIGJ1ZmZlcnMgYW5kIGNhbGxcbiAqIFtbSW5mbGF0ZSNvbkVuZF1dLlxuICpcbiAqIE9uIGZhaWwgY2FsbCBbW0luZmxhdGUjb25FbmRdXSB3aXRoIGVycm9yIGNvZGUgYW5kIHJldHVybiBmYWxzZS5cbiAqXG4gKiBXZSBzdHJvbmdseSByZWNvbW1lbmQgdG8gdXNlIGBVaW50OEFycmF5YCBvbiBpbnB1dCBmb3IgYmVzdCBzcGVlZCAob3V0cHV0XG4gKiBmb3JtYXQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSkuIEFsc28sIGRvbid0IHNraXAgbGFzdCBwYXJhbSBhbmQgYWx3YXlzXG4gKiB1c2UgdGhlIHNhbWUgdHlwZSBpbiB5b3VyIGNvZGUgKGJvb2xlYW4gb3IgbnVtYmVyKS4gVGhhdCB3aWxsIGltcHJvdmUgSlMgc3BlZWQuXG4gKlxuICogRm9yIHJlZ3VsYXIgYEFycmF5YC1zIG1ha2Ugc3VyZSBhbGwgZWxlbWVudHMgYXJlIFswLi4yNTVdLlxuICpcbiAqICMjIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBwdXNoKGNodW5rLCBmYWxzZSk7IC8vIHB1c2ggb25lIG9mIGRhdGEgY2h1bmtzXG4gKiAuLi5cbiAqIHB1c2goY2h1bmssIHRydWUpOyAgLy8gcHVzaCBsYXN0IGNodW5rXG4gKiBgYGBcbiAqKi9cbkluZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihkYXRhLCBtb2RlKSB7XG4gIHZhciBzdHJtID0gdGhpcy5zdHJtO1xuICB2YXIgY2h1bmtTaXplID0gdGhpcy5vcHRpb25zLmNodW5rU2l6ZTtcbiAgdmFyIHN0YXR1cywgX21vZGU7XG4gIHZhciBuZXh0X291dF91dGY4LCB0YWlsLCB1dGY4c3RyO1xuXG4gIGlmICh0aGlzLmVuZGVkKSB7IHJldHVybiBmYWxzZTsgfVxuICBfbW9kZSA9IChtb2RlID09PSB+fm1vZGUpID8gbW9kZSA6ICgobW9kZSA9PT0gdHJ1ZSkgPyBjLlpfRklOSVNIIDogYy5aX05PX0ZMVVNIKTtcblxuICAvLyBDb252ZXJ0IGRhdGEgaWYgbmVlZGVkXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBPbmx5IGJpbmFyeSBzdHJpbmdzIGNhbiBiZSBkZWNvbXByZXNzZWQgb24gcHJhY3RpY2VcbiAgICBzdHJtLmlucHV0ID0gc3RyaW5ncy5iaW5zdHJpbmcyYnVmKGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHN0cm0uaW5wdXQgPSBkYXRhO1xuICB9XG5cbiAgc3RybS5uZXh0X2luID0gMDtcbiAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoO1xuXG4gIGRvIHtcbiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHN0cm0ub3V0cHV0ID0gbmV3IHV0aWxzLkJ1ZjgoY2h1bmtTaXplKTtcbiAgICAgIHN0cm0ubmV4dF9vdXQgPSAwO1xuICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemU7XG4gICAgfVxuXG4gICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGUoc3RybSwgYy5aX05PX0ZMVVNIKTsgICAgLyogbm8gYmFkIHJldHVybiB2YWx1ZSAqL1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gYy5aX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBjLlpfT0spIHtcbiAgICAgIHRoaXMub25FbmQoc3RhdHVzKTtcbiAgICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzdHJtLm5leHRfb3V0KSB7XG4gICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDAgfHwgc3RhdHVzID09PSBjLlpfU1RSRUFNX0VORCB8fCAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiBfbW9kZSA9PT0gYy5aX0ZJTklTSCkpIHtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykge1xuXG4gICAgICAgICAgbmV4dF9vdXRfdXRmOCA9IHN0cmluZ3MudXRmOGJvcmRlcihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCk7XG5cbiAgICAgICAgICB0YWlsID0gc3RybS5uZXh0X291dCAtIG5leHRfb3V0X3V0Zjg7XG4gICAgICAgICAgdXRmOHN0ciA9IHN0cmluZ3MuYnVmMnN0cmluZyhzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCk7XG5cbiAgICAgICAgICAvLyBtb3ZlIHRhaWxcbiAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gdGFpbDtcbiAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZSAtIHRhaWw7XG4gICAgICAgICAgaWYgKHRhaWwpIHsgdXRpbHMuYXJyYXlTZXQoc3RybS5vdXRwdXQsIHN0cm0ub3V0cHV0LCBuZXh0X291dF91dGY4LCB0YWlsLCAwKTsgfVxuXG4gICAgICAgICAgdGhpcy5vbkRhdGEodXRmOHN0cik7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uRGF0YSh1dGlscy5zaHJpbmtCdWYoc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwKSAmJiBzdGF0dXMgIT09IGMuWl9TVFJFQU1fRU5EKTtcblxuICBpZiAoc3RhdHVzID09PSBjLlpfU1RSRUFNX0VORCkge1xuICAgIF9tb2RlID0gYy5aX0ZJTklTSDtcbiAgfVxuICAvLyBGaW5hbGl6ZSBvbiB0aGUgbGFzdCBjaHVuay5cbiAgaWYgKF9tb2RlID09PSBjLlpfRklOSVNIKSB7XG4gICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVFbmQodGhpcy5zdHJtKTtcbiAgICB0aGlzLm9uRW5kKHN0YXR1cyk7XG4gICAgdGhpcy5lbmRlZCA9IHRydWU7XG4gICAgcmV0dXJuIHN0YXR1cyA9PT0gYy5aX09LO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5cbi8qKlxuICogSW5mbGF0ZSNvbkRhdGEoY2h1bmspIC0+IFZvaWRcbiAqIC0gY2h1bmsgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogb3VwdXQgZGF0YS4gVHlwZSBvZiBhcnJheSBkZXBlbmRzXG4gKiAgIG9uIGpzIGVuZ2luZSBzdXBwb3J0LiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVzdGVkLCBlYWNoIGNodW5rXG4gKiAgIHdpbGwgYmUgc3RyaW5nLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHN0b3JlcyBkYXRhIGJsb2NrcyBpbiBgY2h1bmtzW11gIHByb3BlcnR5IGFuZCBnbHVlXG4gKiB0aG9zZSBpbiBgb25FbmRgLiBPdmVycmlkZSB0aGlzIGhhbmRsZXIsIGlmIHlvdSBuZWVkIGFub3RoZXIgYmVoYXZpb3VyLlxuICoqL1xuSW5mbGF0ZS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24oY2h1bmspIHtcbiAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7XG59O1xuXG5cbi8qKlxuICogSW5mbGF0ZSNvbkVuZChzdGF0dXMpIC0+IFZvaWRcbiAqIC0gc3RhdHVzIChOdW1iZXIpOiBpbmZsYXRlIHN0YXR1cy4gMCAoWl9PSykgb24gc3VjY2VzcyxcbiAqICAgb3RoZXIgaWYgbm90LlxuICpcbiAqIENhbGxlZCBvbmNlIGFmdGVyIHlvdSB0ZWxsIGluZmxhdGUgdGhhdCBpbnB1dCBzdHJlYW0gY29tcGxldGVcbiAqIG9yIGVycm9yIGhhcHBlbm5lZC4gQnkgZGVmYXVsdCAtIGpvaW4gY29sbGVjdGVkIGNodW5rcyxcbiAqIGZyZWUgbWVtb3J5IGFuZCBmaWxsIGByZXN1bHRzYCAvIGBlcnJgIHByb3BlcnRpZXMuXG4gKiovXG5JbmZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykge1xuICAvLyBPbiBzdWNjZXNzIC0gam9pblxuICBpZiAoc3RhdHVzID09PSBjLlpfT0spIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gR2x1ZSAmIGNvbnZlcnQgaGVyZSwgdW50aWwgd2UgdGVhY2ggcGFrbyB0byBzZW5kXG4gICAgICAvLyB1dGY4IGFsbGlnbmVkIHN0cmluZ3MgdG8gb25EYXRhXG4gICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3VsdCA9IHV0aWxzLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpO1xuICAgIH1cbiAgfVxuICB0aGlzLmNodW5rcyA9IFtdO1xuICB0aGlzLmVyciA9IHN0YXR1cztcbiAgdGhpcy5tc2cgPSB0aGlzLnN0cm0ubXNnO1xufTtcblxuXG4vKipcbiAqIGluZmxhdGUoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZ1xuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gZGVjb21wcmVzcy5cbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBpbmZsYXRlIG9wdGlvbnMuXG4gKlxuICogRGVjb21wcmVzcyBgZGF0YWAgd2l0aCBpbmZsYXRlL3VuZ3ppcCBhbmQgYG9wdGlvbnNgLiBBdXRvZGV0ZWN0XG4gKiBmb3JtYXQgdmlhIHdyYXBwZXIgaGVhZGVyIGJ5IGRlZmF1bHQuIFRoYXQncyB3aHkgd2UgZG9uJ3QgcHJvdmlkZVxuICogc2VwYXJhdGUgYHVuZ3ppcGAgbWV0aG9kLlxuICpcbiAqIFN1cHBvcnRlZCBvcHRpb25zIGFyZTpcbiAqXG4gKiAtIHdpbmRvd0JpdHNcbiAqXG4gKiBbaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkXShodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWQpXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBTdWdhciAob3B0aW9ucyk6XG4gKlxuICogLSBgcmF3YCAoQm9vbGVhbikgLSBzYXkgdGhhdCB3ZSB3b3JrIHdpdGggcmF3IHN0cmVhbSwgaWYgeW91IGRvbid0IHdpc2ggdG8gc3BlY2lmeVxuICogICBuZWdhdGl2ZSB3aW5kb3dCaXRzIGltcGxpY2l0bHkuXG4gKiAtIGB0b2AgKFN0cmluZykgLSBpZiBlcXVhbCB0byAnc3RyaW5nJywgdGhlbiByZXN1bHQgd2lsbCBiZSBjb252ZXJ0ZWRcbiAqICAgZnJvbSB1dGY4IHRvIHV0ZjE2IChqYXZhc2NyaXB0KSBzdHJpbmcuIFdoZW4gc3RyaW5nIG91dHB1dCByZXF1ZXN0ZWQsXG4gKiAgIGNodW5rIGxlbmd0aCBjYW4gZGlmZmVyIGZyb20gYGNodW5rU2l6ZWAsIGRlcGVuZGluZyBvbiBjb250ZW50LlxuICpcbiAqXG4gKiAjIyMjIyBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHZhciBwYWtvID0gcmVxdWlyZSgncGFrbycpXG4gKiAgICwgaW5wdXQgPSBwYWtvLmRlZmxhdGUoWzEsMiwzLDQsNSw2LDcsOCw5XSlcbiAqICAgLCBvdXRwdXQ7XG4gKlxuICogdHJ5IHtcbiAqICAgb3V0cHV0ID0gcGFrby5pbmZsYXRlKGlucHV0KTtcbiAqIH0gY2F0Y2ggKGVycilcbiAqICAgY29uc29sZS5sb2coZXJyKTtcbiAqIH1cbiAqIGBgYFxuICoqL1xuZnVuY3Rpb24gaW5mbGF0ZShpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgaW5mbGF0b3IgPSBuZXcgSW5mbGF0ZShvcHRpb25zKTtcblxuICBpbmZsYXRvci5wdXNoKGlucHV0LCB0cnVlKTtcblxuICAvLyBUaGF0IHdpbGwgbmV2ZXIgaGFwcGVucywgaWYgeW91IGRvbid0IGNoZWF0IHdpdGggb3B0aW9ucyA6KVxuICBpZiAoaW5mbGF0b3IuZXJyKSB7IHRocm93IGluZmxhdG9yLm1zZzsgfVxuXG4gIHJldHVybiBpbmZsYXRvci5yZXN1bHQ7XG59XG5cblxuLyoqXG4gKiBpbmZsYXRlUmF3KGRhdGFbLCBvcHRpb25zXSkgLT4gVWludDhBcnJheXxBcnJheXxTdHJpbmdcbiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheXxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGRlY29tcHJlc3MuXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgaW5mbGF0ZSBvcHRpb25zLlxuICpcbiAqIFRoZSBzYW1lIGFzIFtbaW5mbGF0ZV1dLCBidXQgY3JlYXRlcyByYXcgZGF0YSwgd2l0aG91dCB3cmFwcGVyXG4gKiAoaGVhZGVyIGFuZCBhZGxlcjMyIGNyYykuXG4gKiovXG5mdW5jdGlvbiBpbmZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnJhdyA9IHRydWU7XG4gIHJldHVybiBpbmZsYXRlKGlucHV0LCBvcHRpb25zKTtcbn1cblxuXG4vKipcbiAqIHVuZ3ppcChkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBkZWNvbXByZXNzLlxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGluZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBKdXN0IHNob3J0Y3V0IHRvIFtbaW5mbGF0ZV1dLCBiZWNhdXNlIGl0IGF1dG9kZXRlY3RzIGZvcm1hdFxuICogYnkgaGVhZGVyLmNvbnRlbnQuIERvbmUgZm9yIGNvbnZlbmllbmNlLlxuICoqL1xuXG5cbmV4cG9ydHMuSW5mbGF0ZSA9IEluZmxhdGU7XG5leHBvcnRzLmluZmxhdGUgPSBpbmZsYXRlO1xuZXhwb3J0cy5pbmZsYXRlUmF3ID0gaW5mbGF0ZVJhdztcbmV4cG9ydHMudW5nemlwICA9IGluZmxhdGU7XG5cbn0se1wiLi91dGlscy9jb21tb25cIjoyNyxcIi4vdXRpbHMvc3RyaW5nc1wiOjI4LFwiLi96bGliL2NvbnN0YW50c1wiOjMwLFwiLi96bGliL2d6aGVhZGVyXCI6MzMsXCIuL3psaWIvaW5mbGF0ZS5qc1wiOjM1LFwiLi96bGliL21lc3NhZ2VzXCI6MzcsXCIuL3psaWIvenN0cmVhbVwiOjM5fV0sMjc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBUWVBFRF9PSyA9ICAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgVWludDE2QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpO1xuXG5cbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKG9iaiAvKmZyb20xLCBmcm9tMiwgZnJvbTMsIC4uLiovKSB7XG4gIHZhciBzb3VyY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcbiAgICBpZiAoIXNvdXJjZSkgeyBjb250aW51ZTsgfVxuXG4gICAgaWYgKHR5cGVvZihzb3VyY2UpICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzb3VyY2UgKyAnbXVzdCBiZSBub24tb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgcCBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocCkpIHtcbiAgICAgICAgb2JqW3BdID0gc291cmNlW3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5cbi8vIHJlZHVjZSBidWZmZXIgc2l6ZSwgYXZvaWRpbmcgbWVtIGNvcHlcbmV4cG9ydHMuc2hyaW5rQnVmID0gZnVuY3Rpb24gKGJ1Ziwgc2l6ZSkge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gc2l6ZSkgeyByZXR1cm4gYnVmOyB9XG4gIGlmIChidWYuc3ViYXJyYXkpIHsgcmV0dXJuIGJ1Zi5zdWJhcnJheSgwLCBzaXplKTsgfVxuICBidWYubGVuZ3RoID0gc2l6ZTtcbiAgcmV0dXJuIGJ1Zjtcbn07XG5cblxudmFyIGZuVHlwZWQgPSB7XG4gIGFycmF5U2V0OiBmdW5jdGlvbiAoZGVzdCwgc3JjLCBzcmNfb2ZmcywgbGVuLCBkZXN0X29mZnMpIHtcbiAgICBpZiAoc3JjLnN1YmFycmF5ICYmIGRlc3Quc3ViYXJyYXkpIHtcbiAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNfb2Zmcywgc3JjX29mZnMrbGVuKSwgZGVzdF9vZmZzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmFsbGJhY2sgdG8gb3JkaW5hcnkgYXJyYXlcbiAgICBmb3IodmFyIGk9MDsgaTxsZW47IGkrKykge1xuICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldO1xuICAgIH1cbiAgfSxcbiAgLy8gSm9pbiBhcnJheSBvZiBjaHVua3MgdG8gc2luZ2xlIGFycmF5LlxuICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICB2YXIgaSwgbCwgbGVuLCBwb3MsIGNodW5rLCByZXN1bHQ7XG5cbiAgICAvLyBjYWxjdWxhdGUgZGF0YSBsZW5ndGhcbiAgICBsZW4gPSAwO1xuICAgIGZvciAoaT0wLCBsPWNodW5rcy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICBsZW4gKz0gY2h1bmtzW2ldLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBqb2luIGNodW5rc1xuICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgcG9zID0gMDtcbiAgICBmb3IgKGk9MCwgbD1jaHVua3MubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgICAgY2h1bmsgPSBjaHVua3NbaV07XG4gICAgICByZXN1bHQuc2V0KGNodW5rLCBwb3MpO1xuICAgICAgcG9zICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG52YXIgZm5VbnR5cGVkID0ge1xuICBhcnJheVNldDogZnVuY3Rpb24gKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7XG4gICAgZm9yKHZhciBpPTA7IGk8bGVuOyBpKyspIHtcbiAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTtcbiAgICB9XG4gIH0sXG4gIC8vIEpvaW4gYXJyYXkgb2YgY2h1bmtzIHRvIHNpbmdsZSBhcnJheS5cbiAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24oY2h1bmtzKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgY2h1bmtzKTtcbiAgfVxufTtcblxuXG4vLyBFbmFibGUvRGlzYWJsZSB0eXBlZCBhcnJheXMgdXNlLCBmb3IgdGVzdGluZ1xuLy9cbmV4cG9ydHMuc2V0VHlwZWQgPSBmdW5jdGlvbiAob24pIHtcbiAgaWYgKG9uKSB7XG4gICAgZXhwb3J0cy5CdWY4ICA9IFVpbnQ4QXJyYXk7XG4gICAgZXhwb3J0cy5CdWYxNiA9IFVpbnQxNkFycmF5O1xuICAgIGV4cG9ydHMuQnVmMzIgPSBJbnQzMkFycmF5O1xuICAgIGV4cG9ydHMuYXNzaWduKGV4cG9ydHMsIGZuVHlwZWQpO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydHMuQnVmOCAgPSBBcnJheTtcbiAgICBleHBvcnRzLkJ1ZjE2ID0gQXJyYXk7XG4gICAgZXhwb3J0cy5CdWYzMiA9IEFycmF5O1xuICAgIGV4cG9ydHMuYXNzaWduKGV4cG9ydHMsIGZuVW50eXBlZCk7XG4gIH1cbn07XG5cbmV4cG9ydHMuc2V0VHlwZWQoVFlQRURfT0spO1xufSx7fV0sMjg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuLy8gU3RyaW5nIGVuY29kZS9kZWNvZGUgaGVscGVyc1xuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB1dGlscyA9IF9kZXJlcV8oJy4vY29tbW9uJyk7XG5cblxuLy8gUXVpY2sgY2hlY2sgaWYgd2UgY2FuIHVzZSBmYXN0IGFycmF5IHRvIGJpbiBzdHJpbmcgY29udmVyc2lvblxuLy9cbi8vIC0gYXBwbHkoQXJyYXkpIGNhbiBmYWlsIG9uIEFuZHJvaWQgMi4yXG4vLyAtIGFwcGx5KFVpbnQ4QXJyYXkpIGNhbiBmYWlsIG9uIGlPUyA1LjEgU2FmYXJ5XG4vL1xudmFyIFNUUl9BUFBMWV9PSyA9IHRydWU7XG52YXIgU1RSX0FQUExZX1VJQV9PSyA9IHRydWU7XG5cbnRyeSB7IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgWzBdKTsgfSBjYXRjaChfXykgeyBTVFJfQVBQTFlfT0sgPSBmYWxzZTsgfVxudHJ5IHsgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheSgxKSk7IH0gY2F0Y2goX18pIHsgU1RSX0FQUExZX1VJQV9PSyA9IGZhbHNlOyB9XG5cblxuLy8gVGFibGUgd2l0aCB1dGY4IGxlbmd0aHMgKGNhbGN1bGF0ZWQgYnkgZmlyc3QgYnl0ZSBvZiBzZXF1ZW5jZSlcbi8vIE5vdGUsIHRoYXQgNSAmIDYtYnl0ZSB2YWx1ZXMgYW5kIHNvbWUgNC1ieXRlIHZhbHVlcyBjYW4gbm90IGJlIHJlcHJlc2VudGVkIGluIEpTLFxuLy8gYmVjYXVzZSBtYXggcG9zc2libGUgY29kZXBvaW50IGlzIDB4MTBmZmZmXG52YXIgX3V0ZjhsZW4gPSBuZXcgdXRpbHMuQnVmOCgyNTYpO1xuZm9yICh2YXIgaT0wOyBpPDI1NjsgaSsrKSB7XG4gIF91dGY4bGVuW2ldID0gKGkgPj0gMjUyID8gNiA6IGkgPj0gMjQ4ID8gNSA6IGkgPj0gMjQwID8gNCA6IGkgPj0gMjI0ID8gMyA6IGkgPj0gMTkyID8gMiA6IDEpO1xufVxuX3V0ZjhsZW5bMjU0XT1fdXRmOGxlblsyNTRdPTE7IC8vIEludmFsaWQgc2VxdWVuY2Ugc3RhcnRcblxuXG4vLyBjb252ZXJ0IHN0cmluZyB0byBhcnJheSAodHlwZWQsIHdoZW4gcG9zc2libGUpXG5leHBvcnRzLnN0cmluZzJidWYgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIHZhciBidWYsIGMsIGMyLCBtX3BvcywgaSwgc3RyX2xlbiA9IHN0ci5sZW5ndGgsIGJ1Zl9sZW4gPSAwO1xuXG4gIC8vIGNvdW50IGJpbmFyeSBzaXplXG4gIGZvciAobV9wb3MgPSAwOyBtX3BvcyA8IHN0cl9sZW47IG1fcG9zKyspIHtcbiAgICBjID0gc3RyLmNoYXJDb2RlQXQobV9wb3MpO1xuICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAobV9wb3MrMSA8IHN0cl9sZW4pKSB7XG4gICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKzEpO1xuICAgICAgaWYgKChjMiAmIDB4ZmMwMCkgPT09IDB4ZGMwMCkge1xuICAgICAgICBjID0gMHgxMDAwMCArICgoYyAtIDB4ZDgwMCkgPDwgMTApICsgKGMyIC0gMHhkYzAwKTtcbiAgICAgICAgbV9wb3MrKztcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmX2xlbiArPSBjIDwgMHg4MCA/IDEgOiBjIDwgMHg4MDAgPyAyIDogYyA8IDB4MTAwMDAgPyAzIDogNDtcbiAgfVxuXG4gIC8vIGFsbG9jYXRlIGJ1ZmZlclxuICBidWYgPSBuZXcgdXRpbHMuQnVmOChidWZfbGVuKTtcblxuICAvLyBjb252ZXJ0XG4gIGZvciAoaT0wLCBtX3BvcyA9IDA7IGkgPCBidWZfbGVuOyBtX3BvcysrKSB7XG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTtcbiAgICBpZiAoKGMgJiAweGZjMDApID09PSAweGQ4MDAgJiYgKG1fcG9zKzEgPCBzdHJfbGVuKSkge1xuICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChtX3BvcysxKTtcbiAgICAgIGlmICgoYzIgJiAweGZjMDApID09PSAweGRjMDApIHtcbiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgLSAweGQ4MDApIDw8IDEwKSArIChjMiAtIDB4ZGMwMCk7XG4gICAgICAgIG1fcG9zKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgLyogb25lIGJ5dGUgKi9cbiAgICAgIGJ1ZltpKytdID0gYztcbiAgICB9IGVsc2UgaWYgKGMgPCAweDgwMCkge1xuICAgICAgLyogdHdvIGJ5dGVzICovXG4gICAgICBidWZbaSsrXSA9IDB4QzAgfCAoYyA+Pj4gNik7XG4gICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyAmIDB4M2YpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4MTAwMDApIHtcbiAgICAgIC8qIHRocmVlIGJ5dGVzICovXG4gICAgICBidWZbaSsrXSA9IDB4RTAgfCAoYyA+Pj4gMTIpO1xuICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDYgJiAweDNmKTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGZvdXIgYnl0ZXMgKi9cbiAgICAgIGJ1ZltpKytdID0gMHhmMCB8IChjID4+PiAxOCk7XG4gICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyA+Pj4gMTIgJiAweDNmKTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjID4+PiA2ICYgMHgzZik7XG4gICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyAmIDB4M2YpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWY7XG59O1xuXG4vLyBIZWxwZXIgKHVzZWQgaW4gMiBwbGFjZXMpXG5mdW5jdGlvbiBidWYyYmluc3RyaW5nKGJ1ZiwgbGVuKSB7XG4gIC8vIHVzZSBmYWxsYmFjayBmb3IgYmlnIGFycmF5cyB0byBhdm9pZCBzdGFjayBvdmVyZmxvd1xuICBpZiAobGVuIDwgNjU1MzcpIHtcbiAgICBpZiAoKGJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfVUlBX09LKSB8fCAoIWJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfT0spKSB7XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB1dGlscy5zaHJpbmtCdWYoYnVmLCBsZW4pKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGZvcih2YXIgaT0wOyBpIDwgbGVuOyBpKyspIHtcbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuLy8gQ29udmVydCBieXRlIGFycmF5IHRvIGJpbmFyeSBzdHJpbmdcbmV4cG9ydHMuYnVmMmJpbnN0cmluZyA9IGZ1bmN0aW9uKGJ1Zikge1xuICByZXR1cm4gYnVmMmJpbnN0cmluZyhidWYsIGJ1Zi5sZW5ndGgpO1xufTtcblxuXG4vLyBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgKHR5cGVkLCB3aGVuIHBvc3NpYmxlKVxuZXhwb3J0cy5iaW5zdHJpbmcyYnVmID0gZnVuY3Rpb24oc3RyKSB7XG4gIHZhciBidWYgPSBuZXcgdXRpbHMuQnVmOChzdHIubGVuZ3RoKTtcbiAgZm9yKHZhciBpPTAsIGxlbj1idWYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBidWZbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4gYnVmO1xufTtcblxuXG4vLyBjb252ZXJ0IGFycmF5IHRvIHN0cmluZ1xuZXhwb3J0cy5idWYyc3RyaW5nID0gZnVuY3Rpb24gKGJ1ZiwgbWF4KSB7XG4gIHZhciBpLCBvdXQsIGMsIGNfbGVuO1xuICB2YXIgbGVuID0gbWF4IHx8IGJ1Zi5sZW5ndGg7XG5cbiAgLy8gUmVzZXJ2ZSBtYXggcG9zc2libGUgbGVuZ3RoICgyIHdvcmRzIHBlciBjaGFyKVxuICAvLyBOQjogYnkgdW5rbm93biByZWFzb25zLCBBcnJheSBpcyBzaWduaWZpY2FudGx5IGZhc3RlciBmb3JcbiAgLy8gICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkgdGhhbiBVaW50MTZBcnJheS5cbiAgdmFyIHV0ZjE2YnVmID0gbmV3IEFycmF5KGxlbioyKTtcblxuICBmb3IgKG91dD0wLCBpPTA7IGk8bGVuOykge1xuICAgIGMgPSBidWZbaSsrXTtcbiAgICAvLyBxdWljayBwcm9jZXNzIGFzY2lpXG4gICAgaWYgKGMgPCAweDgwKSB7IHV0ZjE2YnVmW291dCsrXSA9IGM7IGNvbnRpbnVlOyB9XG5cbiAgICBjX2xlbiA9IF91dGY4bGVuW2NdO1xuICAgIC8vIHNraXAgNSAmIDYgYnl0ZSBjb2Rlc1xuICAgIGlmIChjX2xlbiA+IDQpIHsgdXRmMTZidWZbb3V0KytdID0gMHhmZmZkOyBpICs9IGNfbGVuLTE7IGNvbnRpbnVlOyB9XG5cbiAgICAvLyBhcHBseSBtYXNrIG9uIGZpcnN0IGJ5dGVcbiAgICBjICY9IGNfbGVuID09PSAyID8gMHgxZiA6IGNfbGVuID09PSAzID8gMHgwZiA6IDB4MDc7XG4gICAgLy8gam9pbiB0aGUgcmVzdFxuICAgIHdoaWxlIChjX2xlbiA+IDEgJiYgaSA8IGxlbikge1xuICAgICAgYyA9IChjIDw8IDYpIHwgKGJ1ZltpKytdICYgMHgzZik7XG4gICAgICBjX2xlbi0tO1xuICAgIH1cblxuICAgIC8vIHRlcm1pbmF0ZWQgYnkgZW5kIG9mIHN0cmluZz9cbiAgICBpZiAoY19sZW4gPiAxKSB7IHV0ZjE2YnVmW291dCsrXSA9IDB4ZmZmZDsgY29udGludWU7IH1cblxuICAgIGlmIChjIDwgMHgxMDAwMCkge1xuICAgICAgdXRmMTZidWZbb3V0KytdID0gYztcbiAgICB9IGVsc2Uge1xuICAgICAgYyAtPSAweDEwMDAwO1xuICAgICAgdXRmMTZidWZbb3V0KytdID0gMHhkODAwIHwgKChjID4+IDEwKSAmIDB4M2ZmKTtcbiAgICAgIHV0ZjE2YnVmW291dCsrXSA9IDB4ZGMwMCB8IChjICYgMHgzZmYpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYyYmluc3RyaW5nKHV0ZjE2YnVmLCBvdXQpO1xufTtcblxuXG4vLyBDYWxjdWxhdGUgbWF4IHBvc3NpYmxlIHBvc2l0aW9uIGluIHV0ZjggYnVmZmVyLFxuLy8gdGhhdCB3aWxsIG5vdCBicmVhayBzZXF1ZW5jZS4gSWYgdGhhdCdzIG5vdCBwb3NzaWJsZVxuLy8gLSAodmVyeSBzbWFsbCBsaW1pdHMpIHJldHVybiBtYXggc2l6ZSBhcyBpcy5cbi8vXG4vLyBidWZbXSAtIHV0ZjggYnl0ZXMgYXJyYXlcbi8vIG1heCAgIC0gbGVuZ3RoIGxpbWl0IChtYW5kYXRvcnkpO1xuZXhwb3J0cy51dGY4Ym9yZGVyID0gZnVuY3Rpb24oYnVmLCBtYXgpIHtcbiAgdmFyIHBvcztcblxuICBtYXggPSBtYXggfHwgYnVmLmxlbmd0aDtcbiAgaWYgKG1heCA+IGJ1Zi5sZW5ndGgpIHsgbWF4ID0gYnVmLmxlbmd0aDsgfVxuXG4gIC8vIGdvIGJhY2sgZnJvbSBsYXN0IHBvc2l0aW9uLCB1bnRpbCBzdGFydCBvZiBzZXF1ZW5jZSBmb3VuZFxuICBwb3MgPSBtYXgtMTtcbiAgd2hpbGUgKHBvcyA+PSAwICYmIChidWZbcG9zXSAmIDB4QzApID09PSAweDgwKSB7IHBvcy0tOyB9XG5cbiAgLy8gRnVja3VwIC0gdmVyeSBzbWFsbCBhbmQgYnJva2VuIHNlcXVlbmNlLFxuICAvLyByZXR1cm4gbWF4LCBiZWNhdXNlIHdlIHNob3VsZCByZXR1cm4gc29tZXRoaW5nIGFueXdheS5cbiAgaWYgKHBvcyA8IDApIHsgcmV0dXJuIG1heDsgfVxuXG4gIC8vIElmIHdlIGNhbWUgdG8gc3RhcnQgb2YgYnVmZmVyIC0gdGhhdCBtZWFucyB2dWZmZXIgaXMgdG9vIHNtYWxsLFxuICAvLyByZXR1cm4gbWF4IHRvby5cbiAgaWYgKHBvcyA9PT0gMCkgeyByZXR1cm4gbWF4OyB9XG5cbiAgcmV0dXJuIChwb3MgKyBfdXRmOGxlbltidWZbcG9zXV0gPiBtYXgpID8gcG9zIDogbWF4O1xufTtcblxufSx7XCIuL2NvbW1vblwiOjI3fV0sMjk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBOb3RlOiBhZGxlcjMyIHRha2VzIDEyJSBmb3IgbGV2ZWwgMCBhbmQgMiUgZm9yIGxldmVsIDYuXG4vLyBJdCBkb2Vzbid0IHdvcnRoIHRvIG1ha2UgYWRkaXRpb25hbCBvcHRpbWl6YXRpb25hIGFzIGluIG9yaWdpbmFsLlxuLy8gU21hbGwgc2l6ZSBpcyBwcmVmZXJhYmxlLlxuXG5mdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7XG4gIHZhciBzMSA9IChhZGxlciAmIDB4ZmZmZikgfDBcbiAgICAsIHMyID0gKChhZGxlciA+Pj4gMTYpICYgMHhmZmZmKSB8MFxuICAgICwgbiA9IDA7XG5cbiAgd2hpbGUgKGxlbiAhPT0gMCkge1xuICAgIC8vIFNldCBsaW1pdCB+IHR3aWNlIGxlc3MgdGhhbiA1NTUyLCB0byBrZWVwXG4gICAgLy8gczIgaW4gMzEtYml0cywgYmVjYXVzZSB3ZSBmb3JjZSBzaWduZWQgaW50cy5cbiAgICAvLyBpbiBvdGhlciBjYXNlICU9IHdpbGwgZmFpbC5cbiAgICBuID0gbGVuID4gMjAwMCA/IDIwMDAgOiBsZW47XG4gICAgbGVuIC09IG47XG5cbiAgICBkbyB7XG4gICAgICBzMSA9IChzMSArIGJ1Zltwb3MrK10pIHwwO1xuICAgICAgczIgPSAoczIgKyBzMSkgfDA7XG4gICAgfSB3aGlsZSAoLS1uKTtcblxuICAgIHMxICU9IDY1NTIxO1xuICAgIHMyICU9IDY1NTIxO1xuICB9XG5cbiAgcmV0dXJuIChzMSB8IChzMiA8PCAxNikpIHwwO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gYWRsZXIzMjtcbn0se31dLDMwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIC8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbiAgWl9OT19GTFVTSDogICAgICAgICAwLFxuICBaX1BBUlRJQUxfRkxVU0g6ICAgIDEsXG4gIFpfU1lOQ19GTFVTSDogICAgICAgMixcbiAgWl9GVUxMX0ZMVVNIOiAgICAgICAzLFxuICBaX0ZJTklTSDogICAgICAgICAgIDQsXG4gIFpfQkxPQ0s6ICAgICAgICAgICAgNSxcbiAgWl9UUkVFUzogICAgICAgICAgICA2LFxuXG4gIC8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXNcbiAgKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuXG4gICovXG4gIFpfT0s6ICAgICAgICAgICAgICAgMCxcbiAgWl9TVFJFQU1fRU5EOiAgICAgICAxLFxuICBaX05FRURfRElDVDogICAgICAgIDIsXG4gIFpfRVJSTk86ICAgICAgICAgICAtMSxcbiAgWl9TVFJFQU1fRVJST1I6ICAgIC0yLFxuICBaX0RBVEFfRVJST1I6ICAgICAgLTMsXG4gIC8vWl9NRU1fRVJST1I6ICAgICAtNCxcbiAgWl9CVUZfRVJST1I6ICAgICAgIC01LFxuICAvL1pfVkVSU0lPTl9FUlJPUjogLTYsXG5cbiAgLyogY29tcHJlc3Npb24gbGV2ZWxzICovXG4gIFpfTk9fQ09NUFJFU1NJT046ICAgICAgICAgMCxcbiAgWl9CRVNUX1NQRUVEOiAgICAgICAgICAgICAxLFxuICBaX0JFU1RfQ09NUFJFU1NJT046ICAgICAgIDksXG4gIFpfREVGQVVMVF9DT01QUkVTU0lPTjogICAtMSxcblxuXG4gIFpfRklMVEVSRUQ6ICAgICAgICAgICAgICAgMSxcbiAgWl9IVUZGTUFOX09OTFk6ICAgICAgICAgICAyLFxuICBaX1JMRTogICAgICAgICAgICAgICAgICAgIDMsXG4gIFpfRklYRUQ6ICAgICAgICAgICAgICAgICAgNCxcbiAgWl9ERUZBVUxUX1NUUkFURUdZOiAgICAgICAwLFxuXG4gIC8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbiAgWl9CSU5BUlk6ICAgICAgICAgICAgICAgICAwLFxuICBaX1RFWFQ6ICAgICAgICAgICAgICAgICAgIDEsXG4gIC8vWl9BU0NJSTogICAgICAgICAgICAgICAgMSwgLy8gPSBaX1RFWFQgKGRlcHJlY2F0ZWQpXG4gIFpfVU5LTk9XTjogICAgICAgICAgICAgICAgMixcblxuICAvKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi9cbiAgWl9ERUZMQVRFRDogICAgICAgICAgICAgICA4XG4gIC8vWl9OVUxMOiAgICAgICAgICAgICAgICAgbnVsbCAvLyBVc2UgLTEgb3IgbnVsbCBpbmxpbmUsIGRlcGVuZGluZyBvbiB2YXIgdHlwZVxufTtcbn0se31dLDMxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuLy8gTm90ZTogd2UgY2FuJ3QgZ2V0IHNpZ25pZmljYW50IHNwZWVkIGJvb3N0IGhlcmUuXG4vLyBTbyB3cml0ZSBjb2RlIHRvIG1pbmltaXplIHNpemUgLSBubyBwcmVnZW5lcmF0ZWQgdGFibGVzXG4vLyBhbmQgYXJyYXkgdG9vbHMgZGVwZW5kZW5jaWVzLlxuXG5cbi8vIFVzZSBvcmRpbmFyeSBhcnJheSwgc2luY2UgdW50eXBlZCBtYWtlcyBubyBib29zdCBoZXJlXG5mdW5jdGlvbiBtYWtlVGFibGUoKSB7XG4gIHZhciBjLCB0YWJsZSA9IFtdO1xuXG4gIGZvcih2YXIgbiA9MDsgbiA8IDI1NjsgbisrKXtcbiAgICBjID0gbjtcbiAgICBmb3IodmFyIGsgPTA7IGsgPCA4OyBrKyspe1xuICAgICAgYyA9ICgoYyYxKSA/ICgweEVEQjg4MzIwIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG4gICAgfVxuICAgIHRhYmxlW25dID0gYztcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn1cblxuLy8gQ3JlYXRlIHRhYmxlIG9uIGxvYWQuIEp1c3QgMjU1IHNpZ25lZCBsb25ncy4gTm90IGEgcHJvYmxlbS5cbnZhciBjcmNUYWJsZSA9IG1ha2VUYWJsZSgpO1xuXG5cbmZ1bmN0aW9uIGNyYzMyKGNyYywgYnVmLCBsZW4sIHBvcykge1xuICB2YXIgdCA9IGNyY1RhYmxlXG4gICAgLCBlbmQgPSBwb3MgKyBsZW47XG5cbiAgY3JjID0gY3JjIF4gKC0xKTtcblxuICBmb3IgKHZhciBpID0gcG9zOyBpIDwgZW5kOyBpKysgKSB7XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0WyhjcmMgXiBidWZbaV0pICYgMHhGRl07XG4gIH1cblxuICByZXR1cm4gKGNyYyBeICgtMSkpOyAvLyA+Pj4gMDtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyYzMyO1xufSx7fV0sMzI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgICA9IF9kZXJlcV8oJy4uL3V0aWxzL2NvbW1vbicpO1xudmFyIHRyZWVzICAgPSBfZGVyZXFfKCcuL3RyZWVzJyk7XG52YXIgYWRsZXIzMiA9IF9kZXJlcV8oJy4vYWRsZXIzMicpO1xudmFyIGNyYzMyICAgPSBfZGVyZXFfKCcuL2NyYzMyJyk7XG52YXIgbXNnICAgPSBfZGVyZXFfKCcuL21lc3NhZ2VzJyk7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbnZhciBaX05PX0ZMVVNIICAgICAgPSAwO1xudmFyIFpfUEFSVElBTF9GTFVTSCA9IDE7XG4vL3ZhciBaX1NZTkNfRkxVU0ggICAgPSAyO1xudmFyIFpfRlVMTF9GTFVTSCAgICA9IDM7XG52YXIgWl9GSU5JU0ggICAgICAgID0gNDtcbnZhciBaX0JMT0NLICAgICAgICAgPSA1O1xuLy92YXIgWl9UUkVFUyAgICAgICAgID0gNjtcblxuXG4vKiBSZXR1cm4gY29kZXMgZm9yIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9ucy4gTmVnYXRpdmUgdmFsdWVzXG4gKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuXG4gKi9cbnZhciBaX09LICAgICAgICAgICAgPSAwO1xudmFyIFpfU1RSRUFNX0VORCAgICA9IDE7XG4vL3ZhciBaX05FRURfRElDVCAgICAgPSAyO1xuLy92YXIgWl9FUlJOTyAgICAgICAgID0gLTE7XG52YXIgWl9TVFJFQU1fRVJST1IgID0gLTI7XG52YXIgWl9EQVRBX0VSUk9SICAgID0gLTM7XG4vL3ZhciBaX01FTV9FUlJPUiAgICAgPSAtNDtcbnZhciBaX0JVRl9FUlJPUiAgICAgPSAtNTtcbi8vdmFyIFpfVkVSU0lPTl9FUlJPUiA9IC02O1xuXG5cbi8qIGNvbXByZXNzaW9uIGxldmVscyAqL1xuLy92YXIgWl9OT19DT01QUkVTU0lPTiAgICAgID0gMDtcbi8vdmFyIFpfQkVTVF9TUEVFRCAgICAgICAgICA9IDE7XG4vL3ZhciBaX0JFU1RfQ09NUFJFU1NJT04gICAgPSA5O1xudmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xO1xuXG5cbnZhciBaX0ZJTFRFUkVEICAgICAgICAgICAgPSAxO1xudmFyIFpfSFVGRk1BTl9PTkxZICAgICAgICA9IDI7XG52YXIgWl9STEUgICAgICAgICAgICAgICAgID0gMztcbnZhciBaX0ZJWEVEICAgICAgICAgICAgICAgPSA0O1xudmFyIFpfREVGQVVMVF9TVFJBVEVHWSAgICA9IDA7XG5cbi8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbi8vdmFyIFpfQklOQVJZICAgICAgICAgICAgICA9IDA7XG4vL3ZhciBaX1RFWFQgICAgICAgICAgICAgICAgPSAxO1xuLy92YXIgWl9BU0NJSSAgICAgICAgICAgICAgID0gMTsgLy8gPSBaX1RFWFRcbnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyO1xuXG5cbi8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqL1xudmFyIFpfREVGTEFURUQgID0gODtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG52YXIgTUFYX01FTV9MRVZFTCA9IDk7XG4vKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi9cbnZhciBNQVhfV0JJVFMgPSAxNTtcbi8qIDMySyBMWjc3IHdpbmRvdyAqL1xudmFyIERFRl9NRU1fTEVWRUwgPSA4O1xuXG5cbnZhciBMRU5HVEhfQ09ERVMgID0gMjk7XG4vKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGVzLCBub3QgY291bnRpbmcgdGhlIHNwZWNpYWwgRU5EX0JMT0NLIGNvZGUgKi9cbnZhciBMSVRFUkFMUyAgICAgID0gMjU2O1xuLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovXG52YXIgTF9DT0RFUyAgICAgICA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUztcbi8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBjb2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqL1xudmFyIERfQ09ERVMgICAgICAgPSAzMDtcbi8qIG51bWJlciBvZiBkaXN0YW5jZSBjb2RlcyAqL1xudmFyIEJMX0NPREVTICAgICAgPSAxOTtcbi8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqL1xudmFyIEhFQVBfU0laRSAgICAgPSAyKkxfQ09ERVMgKyAxO1xuLyogbWF4aW11bSBoZWFwIHNpemUgKi9cbnZhciBNQVhfQklUUyAgPSAxNTtcbi8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqL1xuXG52YXIgTUlOX01BVENIID0gMztcbnZhciBNQVhfTUFUQ0ggPSAyNTg7XG52YXIgTUlOX0xPT0tBSEVBRCA9IChNQVhfTUFUQ0ggKyBNSU5fTUFUQ0ggKyAxKTtcblxudmFyIFBSRVNFVF9ESUNUID0gMHgyMDtcblxudmFyIElOSVRfU1RBVEUgPSA0MjtcbnZhciBFWFRSQV9TVEFURSA9IDY5O1xudmFyIE5BTUVfU1RBVEUgPSA3MztcbnZhciBDT01NRU5UX1NUQVRFID0gOTE7XG52YXIgSENSQ19TVEFURSA9IDEwMztcbnZhciBCVVNZX1NUQVRFID0gMTEzO1xudmFyIEZJTklTSF9TVEFURSA9IDY2NjtcblxudmFyIEJTX05FRURfTU9SRSAgICAgID0gMTsgLyogYmxvY2sgbm90IGNvbXBsZXRlZCwgbmVlZCBtb3JlIGlucHV0IG9yIG1vcmUgb3V0cHV0ICovXG52YXIgQlNfQkxPQ0tfRE9ORSAgICAgPSAyOyAvKiBibG9jayBmbHVzaCBwZXJmb3JtZWQgKi9cbnZhciBCU19GSU5JU0hfU1RBUlRFRCA9IDM7IC8qIGZpbmlzaCBzdGFydGVkLCBuZWVkIG9ubHkgbW9yZSBvdXRwdXQgYXQgbmV4dCBkZWZsYXRlICovXG52YXIgQlNfRklOSVNIX0RPTkUgICAgPSA0OyAvKiBmaW5pc2ggZG9uZSwgYWNjZXB0IG5vIG1vcmUgaW5wdXQgb3Igb3V0cHV0ICovXG5cbnZhciBPU19DT0RFID0gMHgwMzsgLy8gVW5peCA6KSAuIERvbid0IGRldGVjdCwgdXNlIHRoaXMgZGVmYXVsdC5cblxuZnVuY3Rpb24gZXJyKHN0cm0sIGVycm9yQ29kZSkge1xuICBzdHJtLm1zZyA9IG1zZ1tlcnJvckNvZGVdO1xuICByZXR1cm4gZXJyb3JDb2RlO1xufVxuXG5mdW5jdGlvbiByYW5rKGYpIHtcbiAgcmV0dXJuICgoZikgPDwgMSkgLSAoKGYpID4gNCA/IDkgOiAwKTtcbn1cblxuZnVuY3Rpb24gemVybyhidWYpIHsgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7IHdoaWxlICgtLWxlbiA+PSAwKSB7IGJ1ZltsZW5dID0gMDsgfSB9XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZS4gQWxsIGRlZmxhdGUoKSBvdXRwdXQgZ29lc1xuICogdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHNvIHNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdFxuICogdG8gYXZvaWQgYWxsb2NhdGluZyBhIGxhcmdlIHN0cm0tPm91dHB1dCBidWZmZXIgYW5kIGNvcHlpbmcgaW50byBpdC5cbiAqIChTZWUgYWxzbyByZWFkX2J1ZigpKS5cbiAqL1xuZnVuY3Rpb24gZmx1c2hfcGVuZGluZyhzdHJtKSB7XG4gIHZhciBzID0gc3RybS5zdGF0ZTtcblxuICAvL190cl9mbHVzaF9iaXRzKHMpO1xuICB2YXIgbGVuID0gcy5wZW5kaW5nO1xuICBpZiAobGVuID4gc3RybS5hdmFpbF9vdXQpIHtcbiAgICBsZW4gPSBzdHJtLmF2YWlsX291dDtcbiAgfVxuICBpZiAobGVuID09PSAwKSB7IHJldHVybjsgfVxuXG4gIHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmdfb3V0LCBsZW4sIHN0cm0ubmV4dF9vdXQpO1xuICBzdHJtLm5leHRfb3V0ICs9IGxlbjtcbiAgcy5wZW5kaW5nX291dCArPSBsZW47XG4gIHN0cm0udG90YWxfb3V0ICs9IGxlbjtcbiAgc3RybS5hdmFpbF9vdXQgLT0gbGVuO1xuICBzLnBlbmRpbmcgLT0gbGVuO1xuICBpZiAocy5wZW5kaW5nID09PSAwKSB7XG4gICAgcy5wZW5kaW5nX291dCA9IDA7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBmbHVzaF9ibG9ja19vbmx5IChzLCBsYXN0KSB7XG4gIHRyZWVzLl90cl9mbHVzaF9ibG9jayhzLCAocy5ibG9ja19zdGFydCA+PSAwID8gcy5ibG9ja19zdGFydCA6IC0xKSwgcy5zdHJzdGFydCAtIHMuYmxvY2tfc3RhcnQsIGxhc3QpO1xuICBzLmJsb2NrX3N0YXJ0ID0gcy5zdHJzdGFydDtcbiAgZmx1c2hfcGVuZGluZyhzLnN0cm0pO1xufVxuXG5cbmZ1bmN0aW9uIHB1dF9ieXRlKHMsIGIpIHtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFB1dCBhIHNob3J0IGluIHRoZSBwZW5kaW5nIGJ1ZmZlci4gVGhlIDE2LWJpdCB2YWx1ZSBpcyBwdXQgaW4gTVNCIG9yZGVyLlxuICogSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHN0YXRlIGlzIGNvcnJlY3QgYW5kIHRoZXJlIGlzIGVub3VnaCByb29tIGluXG4gKiBwZW5kaW5nX2J1Zi5cbiAqL1xuZnVuY3Rpb24gcHV0U2hvcnRNU0IocywgYikge1xuLy8gIHB1dF9ieXRlKHMsIChCeXRlKShiID4+IDgpKTtcbi8vICBwdXRfYnl0ZShzLCAoQnl0ZSkoYiAmIDB4ZmYpKTtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAoYiA+Pj4gOCkgJiAweGZmO1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGIgJiAweGZmO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmVhZCBhIG5ldyBidWZmZXIgZnJvbSB0aGUgY3VycmVudCBpbnB1dCBzdHJlYW0sIHVwZGF0ZSB0aGUgYWRsZXIzMlxuICogYW5kIHRvdGFsIG51bWJlciBvZiBieXRlcyByZWFkLiAgQWxsIGRlZmxhdGUoKSBpbnB1dCBnb2VzIHRocm91Z2hcbiAqIHRoaXMgZnVuY3Rpb24gc28gc29tZSBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gbW9kaWZ5IGl0IHRvIGF2b2lkXG4gKiBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+aW5wdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGZyb20gaXQuXG4gKiAoU2VlIGFsc28gZmx1c2hfcGVuZGluZygpKS5cbiAqL1xuZnVuY3Rpb24gcmVhZF9idWYoc3RybSwgYnVmLCBzdGFydCwgc2l6ZSkge1xuICB2YXIgbGVuID0gc3RybS5hdmFpbF9pbjtcblxuICBpZiAobGVuID4gc2l6ZSkgeyBsZW4gPSBzaXplOyB9XG4gIGlmIChsZW4gPT09IDApIHsgcmV0dXJuIDA7IH1cblxuICBzdHJtLmF2YWlsX2luIC09IGxlbjtcblxuICB1dGlscy5hcnJheVNldChidWYsIHN0cm0uaW5wdXQsIHN0cm0ubmV4dF9pbiwgbGVuLCBzdGFydCk7XG4gIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDEpIHtcbiAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBidWYsIGxlbiwgc3RhcnQpO1xuICB9XG5cbiAgZWxzZSBpZiAoc3RybS5zdGF0ZS53cmFwID09PSAyKSB7XG4gICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7XG4gIH1cblxuICBzdHJtLm5leHRfaW4gKz0gbGVuO1xuICBzdHJtLnRvdGFsX2luICs9IGxlbjtcblxuICByZXR1cm4gbGVuO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2V0IG1hdGNoX3N0YXJ0IHRvIHRoZSBsb25nZXN0IG1hdGNoIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBzdHJpbmcgYW5kXG4gKiByZXR1cm4gaXRzIGxlbmd0aC4gTWF0Y2hlcyBzaG9ydGVyIG9yIGVxdWFsIHRvIHByZXZfbGVuZ3RoIGFyZSBkaXNjYXJkZWQsXG4gKiBpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gcHJldl9sZW5ndGggYW5kIG1hdGNoX3N0YXJ0IGlzXG4gKiBnYXJiYWdlLlxuICogSU4gYXNzZXJ0aW9uczogY3VyX21hdGNoIGlzIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluIGZvciB0aGUgY3VycmVudFxuICogICBzdHJpbmcgKHN0cnN0YXJ0KSBhbmQgaXRzIGRpc3RhbmNlIGlzIDw9IE1BWF9ESVNULCBhbmQgcHJldl9sZW5ndGggPj0gMVxuICogT1VUIGFzc2VydGlvbjogdGhlIG1hdGNoIGxlbmd0aCBpcyBub3QgZ3JlYXRlciB0aGFuIHMtPmxvb2thaGVhZC5cbiAqL1xuZnVuY3Rpb24gbG9uZ2VzdF9tYXRjaChzLCBjdXJfbWF0Y2gpIHtcbiAgdmFyIGNoYWluX2xlbmd0aCA9IHMubWF4X2NoYWluX2xlbmd0aDsgICAgICAvKiBtYXggaGFzaCBjaGFpbiBsZW5ndGggKi9cbiAgdmFyIHNjYW4gPSBzLnN0cnN0YXJ0OyAvKiBjdXJyZW50IHN0cmluZyAqL1xuICB2YXIgbWF0Y2g7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVkIHN0cmluZyAqL1xuICB2YXIgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IG1hdGNoICovXG4gIHZhciBiZXN0X2xlbiA9IHMucHJldl9sZW5ndGg7ICAgICAgICAgICAgICAvKiBiZXN0IG1hdGNoIGxlbmd0aCBzbyBmYXIgKi9cbiAgdmFyIG5pY2VfbWF0Y2ggPSBzLm5pY2VfbWF0Y2g7ICAgICAgICAgICAgIC8qIHN0b3AgaWYgbWF0Y2ggbG9uZyBlbm91Z2ggKi9cbiAgdmFyIGxpbWl0ID0gKHMuc3Ryc3RhcnQgPiAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkgP1xuICAgICAgcy5zdHJzdGFydCAtIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIDogMC8qTklMKi87XG5cbiAgdmFyIF93aW4gPSBzLndpbmRvdzsgLy8gc2hvcnRjdXRcblxuICB2YXIgd21hc2sgPSBzLndfbWFzaztcbiAgdmFyIHByZXYgID0gcy5wcmV2O1xuXG4gIC8qIFN0b3Agd2hlbiBjdXJfbWF0Y2ggYmVjb21lcyA8PSBsaW1pdC4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsXG4gICAqIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmcgb2Ygd2luZG93IGluZGV4IDAuXG4gICAqL1xuXG4gIHZhciBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIO1xuICB2YXIgc2Nhbl9lbmQxICA9IF93aW5bc2NhbiArIGJlc3RfbGVuIC0gMV07XG4gIHZhciBzY2FuX2VuZCAgID0gX3dpbltzY2FuICsgYmVzdF9sZW5dO1xuXG4gIC8qIFRoZSBjb2RlIGlzIG9wdGltaXplZCBmb3IgSEFTSF9CSVRTID49IDggYW5kIE1BWF9NQVRDSC0yIG11bHRpcGxlIG9mIDE2LlxuICAgKiBJdCBpcyBlYXN5IHRvIGdldCByaWQgb2YgdGhpcyBvcHRpbWl6YXRpb24gaWYgbmVjZXNzYXJ5LlxuICAgKi9cbiAgLy8gQXNzZXJ0KHMtPmhhc2hfYml0cyA+PSA4ICYmIE1BWF9NQVRDSCA9PSAyNTgsIFwiQ29kZSB0b28gY2xldmVyXCIpO1xuXG4gIC8qIERvIG5vdCB3YXN0ZSB0b28gbXVjaCB0aW1lIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGdvb2QgbWF0Y2g6ICovXG4gIGlmIChzLnByZXZfbGVuZ3RoID49IHMuZ29vZF9tYXRjaCkge1xuICAgIGNoYWluX2xlbmd0aCA+Pj0gMjtcbiAgfVxuICAvKiBEbyBub3QgbG9vayBmb3IgbWF0Y2hlcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuIFRoaXMgaXMgbmVjZXNzYXJ5XG4gICAqIHRvIG1ha2UgZGVmbGF0ZSBkZXRlcm1pbmlzdGljLlxuICAgKi9cbiAgaWYgKG5pY2VfbWF0Y2ggPiBzLmxvb2thaGVhZCkgeyBuaWNlX21hdGNoID0gcy5sb29rYWhlYWQ7IH1cblxuICAvLyBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFELCBcIm5lZWQgbG9va2FoZWFkXCIpO1xuXG4gIGRvIHtcbiAgICAvLyBBc3NlcnQoY3VyX21hdGNoIDwgcy0+c3Ryc3RhcnQsIFwibm8gZnV0dXJlXCIpO1xuICAgIG1hdGNoID0gY3VyX21hdGNoO1xuXG4gICAgLyogU2tpcCB0byBuZXh0IG1hdGNoIGlmIHRoZSBtYXRjaCBsZW5ndGggY2Fubm90IGluY3JlYXNlXG4gICAgICogb3IgaWYgdGhlIG1hdGNoIGxlbmd0aCBpcyBsZXNzIHRoYW4gMi4gIE5vdGUgdGhhdCB0aGUgY2hlY2tzIGJlbG93XG4gICAgICogZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBvY2N1ciBvY2Nhc2lvbmFsbHkgZm9yIHBlcmZvcm1hbmNlXG4gICAgICogcmVhc29ucy4gIFRoZXJlZm9yZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aWxsIGJlIGFjY2Vzc2VkLCBhbmRcbiAgICAgKiBjb25kaXRpb25hbCBqdW1wcyB3aWxsIGJlIG1hZGUgdGhhdCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzLlxuICAgICAqIEhvd2V2ZXIgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaXMgbGltaXRlZCB0byB0aGUgbG9va2FoZWFkLCBzb1xuICAgICAqIHRoZSBvdXRwdXQgb2YgZGVmbGF0ZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuICAgICAqL1xuXG4gICAgaWYgKF93aW5bbWF0Y2ggKyBiZXN0X2xlbl0gICAgICE9PSBzY2FuX2VuZCAgfHxcbiAgICAgICAgX3dpblttYXRjaCArIGJlc3RfbGVuIC0gMV0gIT09IHNjYW5fZW5kMSB8fFxuICAgICAgICBfd2luW21hdGNoXSAgICAgICAgICAgICAgICAhPT0gX3dpbltzY2FuXSB8fFxuICAgICAgICBfd2luWysrbWF0Y2hdICAgICAgICAgICAgICAhPT0gX3dpbltzY2FuICsgMV0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qIFRoZSBjaGVjayBhdCBiZXN0X2xlbi0xIGNhbiBiZSByZW1vdmVkIGJlY2F1c2UgaXQgd2lsbCBiZSBtYWRlXG4gICAgICogYWdhaW4gbGF0ZXIuIChUaGlzIGhldXJpc3RpYyBpcyBub3QgYWx3YXlzIGEgd2luLilcbiAgICAgKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNvbXBhcmUgc2NhblsyXSBhbmQgbWF0Y2hbMl0gc2luY2UgdGhleVxuICAgICAqIGFyZSBhbHdheXMgZXF1YWwgd2hlbiB0aGUgb3RoZXIgYnl0ZXMgbWF0Y2gsIGdpdmVuIHRoYXRcbiAgICAgKiB0aGUgaGFzaCBrZXlzIGFyZSBlcXVhbCBhbmQgdGhhdCBIQVNIX0JJVFMgPj0gOC5cbiAgICAgKi9cbiAgICBzY2FuICs9IDI7XG4gICAgbWF0Y2grKztcbiAgICAvLyBBc3NlcnQoKnNjYW4gPT0gKm1hdGNoLCBcIm1hdGNoWzJdP1wiKTtcblxuICAgIC8qIFdlIGNoZWNrIGZvciBpbnN1ZmZpY2llbnQgbG9va2FoZWFkIG9ubHkgZXZlcnkgOHRoIGNvbXBhcmlzb247XG4gICAgICogdGhlIDI1NnRoIGNoZWNrIHdpbGwgYmUgbWFkZSBhdCBzdHJzdGFydCsyNTguXG4gICAgICovXG4gICAgZG8ge1xuICAgICAgLypqc2hpbnQgbm9lbXB0eTpmYWxzZSovXG4gICAgfSB3aGlsZSAoX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIHNjYW4gPCBzdHJlbmQpO1xuXG4gICAgLy8gQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1bnNpZ25lZCkocy0+d2luZG93X3NpemUtMSksIFwid2lsZCBzY2FuXCIpO1xuXG4gICAgbGVuID0gTUFYX01BVENIIC0gKHN0cmVuZCAtIHNjYW4pO1xuICAgIHNjYW4gPSBzdHJlbmQgLSBNQVhfTUFUQ0g7XG5cbiAgICBpZiAobGVuID4gYmVzdF9sZW4pIHtcbiAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7XG4gICAgICBiZXN0X2xlbiA9IGxlbjtcbiAgICAgIGlmIChsZW4gPj0gbmljZV9tYXRjaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHNjYW5fZW5kMSAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdO1xuICAgICAgc2Nhbl9lbmQgICA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTtcbiAgICB9XG4gIH0gd2hpbGUgKChjdXJfbWF0Y2ggPSBwcmV2W2N1cl9tYXRjaCAmIHdtYXNrXSkgPiBsaW1pdCAmJiAtLWNoYWluX2xlbmd0aCAhPT0gMCk7XG5cbiAgaWYgKGJlc3RfbGVuIDw9IHMubG9va2FoZWFkKSB7XG4gICAgcmV0dXJuIGJlc3RfbGVuO1xuICB9XG4gIHJldHVybiBzLmxvb2thaGVhZDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZpbGwgdGhlIHdpbmRvdyB3aGVuIHRoZSBsb29rYWhlYWQgYmVjb21lcyBpbnN1ZmZpY2llbnQuXG4gKiBVcGRhdGVzIHN0cnN0YXJ0IGFuZCBsb29rYWhlYWQuXG4gKlxuICogSU4gYXNzZXJ0aW9uOiBsb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEXG4gKiBPVVQgYXNzZXJ0aW9uczogc3Ryc3RhcnQgPD0gd2luZG93X3NpemUtTUlOX0xPT0tBSEVBRFxuICogICAgQXQgbGVhc3Qgb25lIGJ5dGUgaGFzIGJlZW4gcmVhZCwgb3IgYXZhaWxfaW4gPT0gMDsgcmVhZHMgYXJlXG4gKiAgICBwZXJmb3JtZWQgZm9yIGF0IGxlYXN0IHR3byBieXRlcyAocmVxdWlyZWQgZm9yIHRoZSB6aXAgdHJhbnNsYXRlX2VvbFxuICogICAgb3B0aW9uIC0tIG5vdCBzdXBwb3J0ZWQgaGVyZSkuXG4gKi9cbmZ1bmN0aW9uIGZpbGxfd2luZG93KHMpIHtcbiAgdmFyIF93X3NpemUgPSBzLndfc2l6ZTtcbiAgdmFyIHAsIG4sIG0sIG1vcmUsIHN0cjtcblxuICAvL0Fzc2VydChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFELCBcImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZFwiKTtcblxuICBkbyB7XG4gICAgbW9yZSA9IHMud2luZG93X3NpemUgLSBzLmxvb2thaGVhZCAtIHMuc3Ryc3RhcnQ7XG5cbiAgICAvLyBKUyBpbnRzIGhhdmUgMzIgYml0LCBibG9jayBiZWxvdyBub3QgbmVlZGVkXG4gICAgLyogRGVhbCB3aXRoICFAIyQlIDY0SyBsaW1pdDogKi9cbiAgICAvL2lmIChzaXplb2YoaW50KSA8PSAyKSB7XG4gICAgLy8gICAgaWYgKG1vcmUgPT0gMCAmJiBzLT5zdHJzdGFydCA9PSAwICYmIHMtPmxvb2thaGVhZCA9PSAwKSB7XG4gICAgLy8gICAgICAgIG1vcmUgPSB3c2l6ZTtcbiAgICAvL1xuICAgIC8vICB9IGVsc2UgaWYgKG1vcmUgPT0gKHVuc2lnbmVkKSgtMSkpIHtcbiAgICAvLyAgICAgICAgLyogVmVyeSB1bmxpa2VseSwgYnV0IHBvc3NpYmxlIG9uIDE2IGJpdCBtYWNoaW5lIGlmXG4gICAgLy8gICAgICAgICAqIHN0cnN0YXJ0ID09IDAgJiYgbG9va2FoZWFkID09IDEgKGlucHV0IGRvbmUgYSBieXRlIGF0IHRpbWUpXG4gICAgLy8gICAgICAgICAqL1xuICAgIC8vICAgICAgICBtb3JlLS07XG4gICAgLy8gICAgfVxuICAgIC8vfVxuXG5cbiAgICAvKiBJZiB0aGUgd2luZG93IGlzIGFsbW9zdCBmdWxsIGFuZCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgbG9va2FoZWFkLFxuICAgICAqIG1vdmUgdGhlIHVwcGVyIGhhbGYgdG8gdGhlIGxvd2VyIG9uZSB0byBtYWtlIHJvb20gaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICovXG4gICAgaWYgKHMuc3Ryc3RhcnQgPj0gX3dfc2l6ZSArIChfd19zaXplIC0gTUlOX0xPT0tBSEVBRCkpIHtcblxuICAgICAgdXRpbHMuYXJyYXlTZXQocy53aW5kb3csIHMud2luZG93LCBfd19zaXplLCBfd19zaXplLCAwKTtcbiAgICAgIHMubWF0Y2hfc3RhcnQgLT0gX3dfc2l6ZTtcbiAgICAgIHMuc3Ryc3RhcnQgLT0gX3dfc2l6ZTtcbiAgICAgIC8qIHdlIG5vdyBoYXZlIHN0cnN0YXJ0ID49IE1BWF9ESVNUICovXG4gICAgICBzLmJsb2NrX3N0YXJ0IC09IF93X3NpemU7XG5cbiAgICAgIC8qIFNsaWRlIHRoZSBoYXNoIHRhYmxlIChjb3VsZCBiZSBhdm9pZGVkIHdpdGggMzIgYml0IHZhbHVlc1xuICAgICAgIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZSkuIFdlIHNsaWRlIGV2ZW4gd2hlbiBsZXZlbCA9PSAwXG4gICAgICAgdG8ga2VlcCB0aGUgaGFzaCB0YWJsZSBjb25zaXN0ZW50IGlmIHdlIHN3aXRjaCBiYWNrIHRvIGxldmVsID4gMFxuICAgICAgIGxhdGVyLiAoVXNpbmcgbGV2ZWwgMCBwZXJtYW5lbnRseSBpcyBub3QgYW4gb3B0aW1hbCB1c2FnZSBvZlxuICAgICAgIHpsaWIsIHNvIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhpcyBwYXRob2xvZ2ljYWwgY2FzZS4pXG4gICAgICAgKi9cblxuICAgICAgbiA9IHMuaGFzaF9zaXplO1xuICAgICAgcCA9IG47XG4gICAgICBkbyB7XG4gICAgICAgIG0gPSBzLmhlYWRbLS1wXTtcbiAgICAgICAgcy5oZWFkW3BdID0gKG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMCk7XG4gICAgICB9IHdoaWxlICgtLW4pO1xuXG4gICAgICBuID0gX3dfc2l6ZTtcbiAgICAgIHAgPSBuO1xuICAgICAgZG8ge1xuICAgICAgICBtID0gcy5wcmV2Wy0tcF07XG4gICAgICAgIHMucHJldltwXSA9IChtID49IF93X3NpemUgPyBtIC0gX3dfc2l6ZSA6IDApO1xuICAgICAgICAvKiBJZiBuIGlzIG5vdCBvbiBhbnkgaGFzaCBjaGFpbiwgcHJldltuXSBpcyBnYXJiYWdlIGJ1dFxuICAgICAgICAgKiBpdHMgdmFsdWUgd2lsbCBuZXZlciBiZSB1c2VkLlxuICAgICAgICAgKi9cbiAgICAgIH0gd2hpbGUgKC0tbik7XG5cbiAgICAgIG1vcmUgKz0gX3dfc2l6ZTtcbiAgICB9XG4gICAgaWYgKHMuc3RybS5hdmFpbF9pbiA9PT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogSWYgdGhlcmUgd2FzIG5vIHNsaWRpbmc6XG4gICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiZcbiAgICAgKiAgICBtb3JlID09IHdpbmRvd19zaXplIC0gbG9va2FoZWFkIC0gc3Ryc3RhcnRcbiAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gKE1JTl9MT09LQUhFQUQtMSArIFdTSVpFICsgTUFYX0RJU1QtMSlcbiAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gMipXU0laRSArIDJcbiAgICAgKiBJbiB0aGUgQklHX01FTSBvciBNTUFQIGNhc2UgKG5vdCB5ZXQgc3VwcG9ydGVkKSxcbiAgICAgKiAgIHdpbmRvd19zaXplID09IGlucHV0X3NpemUgKyBNSU5fTE9PS0FIRUFEICAmJlxuICAgICAqICAgc3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQgPD0gaW5wdXRfc2l6ZSA9PiBtb3JlID49IE1JTl9MT09LQUhFQUQuXG4gICAgICogT3RoZXJ3aXNlLCB3aW5kb3dfc2l6ZSA9PSAyKldTSVpFIHNvIG1vcmUgPj0gMi5cbiAgICAgKiBJZiB0aGVyZSB3YXMgc2xpZGluZywgbW9yZSA+PSBXU0laRS4gU28gaW4gYWxsIGNhc2VzLCBtb3JlID49IDIuXG4gICAgICovXG4gICAgLy9Bc3NlcnQobW9yZSA+PSAyLCBcIm1vcmUgPCAyXCIpO1xuICAgIG4gPSByZWFkX2J1ZihzLnN0cm0sIHMud2luZG93LCBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQsIG1vcmUpO1xuICAgIHMubG9va2FoZWFkICs9IG47XG5cbiAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi9cbiAgICBpZiAocy5sb29rYWhlYWQgKyBzLmluc2VydCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIHN0ciA9IHMuc3Ryc3RhcnQgLSBzLmluc2VydDtcbiAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzdHJdO1xuXG4gICAgICAvKiBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIDFdKTsgKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIDFdKSAmIHMuaGFzaF9tYXNrO1xuLy8jaWYgTUlOX01BVENIICE9IDNcbi8vICAgICAgICBDYWxsIHVwZGF0ZV9oYXNoKCkgTUlOX01BVENILTMgbW9yZSB0aW1lc1xuLy8jZW5kaWZcbiAgICAgIHdoaWxlIChzLmluc2VydCkge1xuICAgICAgICAvKiBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7ICovXG4gICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSkgJiBzLmhhc2hfbWFzaztcblxuICAgICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzdHI7XG4gICAgICAgIHN0cisrO1xuICAgICAgICBzLmluc2VydC0tO1xuICAgICAgICBpZiAocy5sb29rYWhlYWQgKyBzLmluc2VydCA8IE1JTl9NQVRDSCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qIElmIHRoZSB3aG9sZSBpbnB1dCBoYXMgbGVzcyB0aGFuIE1JTl9NQVRDSCBieXRlcywgaW5zX2ggaXMgZ2FyYmFnZSxcbiAgICAgKiBidXQgdGhpcyBpcyBub3QgaW1wb3J0YW50IHNpbmNlIG9ubHkgbGl0ZXJhbCBieXRlcyB3aWxsIGJlIGVtaXR0ZWQuXG4gICAgICovXG5cbiAgfSB3aGlsZSAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIHMuc3RybS5hdmFpbF9pbiAhPT0gMCk7XG5cbiAgLyogSWYgdGhlIFdJTl9JTklUIGJ5dGVzIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZGF0YSBoYXZlIG5ldmVyIGJlZW5cbiAgICogd3JpdHRlbiwgdGhlbiB6ZXJvIHRob3NlIGJ5dGVzIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBjaGVjayByZXBvcnRzIG9mXG4gICAqIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCAob3IgdW5pbml0aWFsaXNlZCBhcyBKdWxpYW4gd3JpdGVzKSBieXRlcyBieVxuICAgKiB0aGUgbG9uZ2VzdCBtYXRjaCByb3V0aW5lcy4gIFVwZGF0ZSB0aGUgaGlnaCB3YXRlciBtYXJrIGZvciB0aGUgbmV4dFxuICAgKiB0aW1lIHRocm91Z2ggaGVyZS4gIFdJTl9JTklUIGlzIHNldCB0byBNQVhfTUFUQ0ggc2luY2UgdGhlIGxvbmdlc3QgbWF0Y2hcbiAgICogcm91dGluZXMgYWxsb3cgc2Nhbm5pbmcgdG8gc3Ryc3RhcnQgKyBNQVhfTUFUQ0gsIGlnbm9yaW5nIGxvb2thaGVhZC5cbiAgICovXG4vLyAgaWYgKHMuaGlnaF93YXRlciA8IHMud2luZG93X3NpemUpIHtcbi8vICAgIHZhciBjdXJyID0gcy5zdHJzdGFydCArIHMubG9va2FoZWFkO1xuLy8gICAgdmFyIGluaXQgPSAwO1xuLy9cbi8vICAgIGlmIChzLmhpZ2hfd2F0ZXIgPCBjdXJyKSB7XG4vLyAgICAgIC8qIFByZXZpb3VzIGhpZ2ggd2F0ZXIgbWFyayBiZWxvdyBjdXJyZW50IGRhdGEgLS0gemVybyBXSU5fSU5JVFxuLy8gICAgICAgKiBieXRlcyBvciB1cCB0byBlbmQgb2Ygd2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy5cbi8vICAgICAgICovXG4vLyAgICAgIGluaXQgPSBzLndpbmRvd19zaXplIC0gY3Vycjtcbi8vICAgICAgaWYgKGluaXQgPiBXSU5fSU5JVClcbi8vICAgICAgICBpbml0ID0gV0lOX0lOSVQ7XG4vLyAgICAgIHptZW16ZXJvKHMtPndpbmRvdyArIGN1cnIsICh1bnNpZ25lZClpbml0KTtcbi8vICAgICAgcy0+aGlnaF93YXRlciA9IGN1cnIgKyBpbml0O1xuLy8gICAgfVxuLy8gICAgZWxzZSBpZiAocy0+aGlnaF93YXRlciA8ICh1bGcpY3VyciArIFdJTl9JTklUKSB7XG4vLyAgICAgIC8qIEhpZ2ggd2F0ZXIgbWFyayBhdCBvciBhYm92ZSBjdXJyZW50IGRhdGEsIGJ1dCBiZWxvdyBjdXJyZW50IGRhdGFcbi8vICAgICAgICogcGx1cyBXSU5fSU5JVCAtLSB6ZXJvIG91dCB0byBjdXJyZW50IGRhdGEgcGx1cyBXSU5fSU5JVCwgb3IgdXBcbi8vICAgICAgICogdG8gZW5kIG9mIHdpbmRvdywgd2hpY2hldmVyIGlzIGxlc3MuXG4vLyAgICAgICAqL1xuLy8gICAgICBpbml0ID0gKHVsZyljdXJyICsgV0lOX0lOSVQgLSBzLT5oaWdoX3dhdGVyO1xuLy8gICAgICBpZiAoaW5pdCA+IHMtPndpbmRvd19zaXplIC0gcy0+aGlnaF93YXRlcilcbi8vICAgICAgICBpbml0ID0gcy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyO1xuLy8gICAgICB6bWVtemVybyhzLT53aW5kb3cgKyBzLT5oaWdoX3dhdGVyLCAodW5zaWduZWQpaW5pdCk7XG4vLyAgICAgIHMtPmhpZ2hfd2F0ZXIgKz0gaW5pdDtcbi8vICAgIH1cbi8vICB9XG4vL1xuLy8gIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplIC0gTUlOX0xPT0tBSEVBRCxcbi8vICAgIFwibm90IGVub3VnaCByb29tIGZvciBzZWFyY2hcIik7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weSB3aXRob3V0IGNvbXByZXNzaW9uIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCByZXR1cm5cbiAqIHRoZSBjdXJyZW50IGJsb2NrIHN0YXRlLlxuICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBpbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGRpY3Rpb25hcnkgc2luY2VcbiAqIHVuY29tcHJlc3NpYmxlIGRhdGEgaXMgcHJvYmFibHkgbm90IHVzZWZ1bC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkXG4gKiBvbmx5IGZvciB0aGUgbGV2ZWw9MCBjb21wcmVzc2lvbiBvcHRpb24uXG4gKiBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvcHRpbWl6ZWQgdG8gYXZvaWQgZXh0cmEgY29weWluZyBmcm9tXG4gKiB3aW5kb3cgdG8gcGVuZGluZ19idWYuXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSB7XG4gIC8qIFN0b3JlZCBibG9ja3MgYXJlIGxpbWl0ZWQgdG8gMHhmZmZmIGJ5dGVzLCBwZW5kaW5nX2J1ZiBpcyBsaW1pdGVkXG4gICAqIHRvIHBlbmRpbmdfYnVmX3NpemUsIGFuZCBlYWNoIHN0b3JlZCBibG9jayBoYXMgYSA1IGJ5dGUgaGVhZGVyOlxuICAgKi9cbiAgdmFyIG1heF9ibG9ja19zaXplID0gMHhmZmZmO1xuXG4gIGlmIChtYXhfYmxvY2tfc2l6ZSA+IHMucGVuZGluZ19idWZfc2l6ZSAtIDUpIHtcbiAgICBtYXhfYmxvY2tfc2l6ZSA9IHMucGVuZGluZ19idWZfc2l6ZSAtIDU7XG4gIH1cblxuICAvKiBDb3B5IGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSBpbnB1dCB0byBvdXRwdXQ6ICovXG4gIGZvciAoOzspIHtcbiAgICAvKiBGaWxsIHRoZSB3aW5kb3cgYXMgbXVjaCBhcyBwb3NzaWJsZTogKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPD0gMSkge1xuXG4gICAgICAvL0Fzc2VydChzLT5zdHJzdGFydCA8IHMtPndfc2l6ZStNQVhfRElTVChzKSB8fFxuICAgICAgLy8gIHMtPmJsb2NrX3N0YXJ0ID49IChsb25nKXMtPndfc2l6ZSwgXCJzbGlkZSB0b28gbGF0ZVwiKTtcbi8vICAgICAgaWYgKCEocy5zdHJzdGFydCA8IHMud19zaXplICsgKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgfHxcbi8vICAgICAgICBzLmJsb2NrX3N0YXJ0ID49IHMud19zaXplKSkge1xuLy8gICAgICAgIHRocm93ICBuZXcgRXJyb3IoXCJzbGlkZSB0b28gbGF0ZVwiKTtcbi8vICAgICAgfVxuXG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuXG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cbiAgICAvL0Fzc2VydChzLT5ibG9ja19zdGFydCA+PSAwTCwgXCJibG9jayBnb25lXCIpO1xuLy8gICAgaWYgKHMuYmxvY2tfc3RhcnQgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJibG9jayBnb25lXCIpO1xuXG4gICAgcy5zdHJzdGFydCArPSBzLmxvb2thaGVhZDtcbiAgICBzLmxvb2thaGVhZCA9IDA7XG5cbiAgICAvKiBFbWl0IGEgc3RvcmVkIGJsb2NrIGlmIHBlbmRpbmdfYnVmIHdpbGwgYmUgZnVsbDogKi9cbiAgICB2YXIgbWF4X3N0YXJ0ID0gcy5ibG9ja19zdGFydCArIG1heF9ibG9ja19zaXplO1xuXG4gICAgaWYgKHMuc3Ryc3RhcnQgPT09IDAgfHwgcy5zdHJzdGFydCA+PSBtYXhfc3RhcnQpIHtcbiAgICAgIC8qIHN0cnN0YXJ0ID09IDAgaXMgcG9zc2libGUgd2hlbiB3cmFwYXJvdW5kIG9uIDE2LWJpdCBtYWNoaW5lICovXG4gICAgICBzLmxvb2thaGVhZCA9IHMuc3Ryc3RhcnQgLSBtYXhfc3RhcnQ7XG4gICAgICBzLnN0cnN0YXJ0ID0gbWF4X3N0YXJ0O1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cblxuXG4gICAgfVxuICAgIC8qIEZsdXNoIGlmIHdlIG1heSBoYXZlIHRvIHNsaWRlLCBvdGhlcndpc2UgYmxvY2tfc3RhcnQgbWF5IGJlY29tZVxuICAgICAqIG5lZ2F0aXZlIGFuZCB0aGUgZGF0YSB3aWxsIGJlIGdvbmU6XG4gICAgICovXG4gICAgaWYgKHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0ID49IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuXG4gIHMuaW5zZXJ0ID0gMDtcblxuICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cblxuICBpZiAocy5zdHJzdGFydCA+IHMuYmxvY2tfc3RhcnQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cblxuICByZXR1cm4gQlNfTkVFRF9NT1JFO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXByZXNzIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCByZXR1cm4gdGhlIGN1cnJlbnRcbiAqIGJsb2NrIHN0YXRlLlxuICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIGxhenkgZXZhbHVhdGlvbiBvZiBtYXRjaGVzIGFuZCBpbnNlcnRzXG4gKiBuZXcgc3RyaW5ncyBpbiB0aGUgZGljdGlvbmFyeSBvbmx5IGZvciB1bm1hdGNoZWQgc3RyaW5ncyBvciBmb3Igc2hvcnRcbiAqIG1hdGNoZXMuIEl0IGlzIHVzZWQgb25seSBmb3IgdGhlIGZhc3QgY29tcHJlc3Npb24gb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZV9mYXN0KHMsIGZsdXNoKSB7XG4gIHZhciBoYXNoX2hlYWQ7ICAgICAgICAvKiBoZWFkIG9mIHRoZSBoYXNoIGNoYWluICovXG4gIHZhciBiZmx1c2g7ICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0XG4gICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXNcbiAgICAgKiBmb3IgdGhlIG5leHQgbWF0Y2gsIHBsdXMgTUlOX01BVENIIGJ5dGVzIHRvIGluc2VydCB0aGVcbiAgICAgKiBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLlxuICAgICAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQpIHtcbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICAgIGJyZWFrOyAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0aGVcbiAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjpcbiAgICAgKi9cbiAgICBoYXNoX2hlYWQgPSAwLypOSUwqLztcbiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqL1xuICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0O1xuICAgICAgLyoqKi9cbiAgICB9XG5cbiAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBkaXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLlxuICAgICAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbHdheXMgbWF0Y2hfbGVuZ3RoIDwgTUlOX01BVENIXG4gICAgICovXG4gICAgaWYgKGhhc2hfaGVhZCAhPT0gMC8qTklMKi8gJiYgKChzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkKSA8PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkpIHtcbiAgICAgIC8qIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBwcmV2ZW50IG1hdGNoZXMgd2l0aCB0aGUgc3RyaW5nXG4gICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2hcbiAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS5cbiAgICAgICAqL1xuICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7XG4gICAgICAvKiBsb25nZXN0X21hdGNoKCkgc2V0cyBtYXRjaF9zdGFydCAqL1xuICAgIH1cbiAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7XG4gICAgICAvLyBjaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LCBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCk7IC8vIGZvciBkZWJ1ZyBvbmx5XG5cbiAgICAgIC8qKiogX3RyX3RhbGx5X2Rpc3Qocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7XG5cbiAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoO1xuXG4gICAgICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoXG4gICAgICAgKiBpcyBub3QgdG9vIGxhcmdlLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLlxuICAgICAgICovXG4gICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gcy5tYXhfbGF6eV9tYXRjaC8qbWF4X2luc2VydF9sZW5ndGgqLyAmJiBzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgICAgcy5tYXRjaF9sZW5ndGgtLTsgLyogc3RyaW5nIGF0IHN0cnN0YXJ0IGFscmVhZHkgaW4gdGFibGUgKi9cbiAgICAgICAgZG8ge1xuICAgICAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqL1xuICAgICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzaztcbiAgICAgICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0O1xuICAgICAgICAgIC8qKiovXG4gICAgICAgICAgLyogc3Ryc3RhcnQgbmV2ZXIgZXhjZWVkcyBXU0laRS1NQVhfTUFUQ0gsIHNvIHRoZXJlIGFyZVxuICAgICAgICAgICAqIGFsd2F5cyBNSU5fTUFUQ0ggYnl0ZXMgYWhlYWQuXG4gICAgICAgICAgICovXG4gICAgICAgIH0gd2hpbGUgKC0tcy5tYXRjaF9sZW5ndGggIT09IDApO1xuICAgICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICB9IGVsc2VcbiAgICAgIHtcbiAgICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDtcbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgICAgICBzLmluc19oID0gcy53aW5kb3dbcy5zdHJzdGFydF07XG4gICAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMuaW5zX2gsIHMud2luZG93W3Muc3Ryc3RhcnQrMV0pOyAqL1xuICAgICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgMV0pICYgcy5oYXNoX21hc2s7XG5cbi8vI2lmIE1JTl9NQVRDSCAhPSAzXG4vLyAgICAgICAgICAgICAgICBDYWxsIFVQREFURV9IQVNIKCkgTUlOX01BVENILTMgbW9yZSB0aW1lc1xuLy8jZW5kaWZcbiAgICAgICAgLyogSWYgbG9va2FoZWFkIDwgTUlOX01BVENILCBpbnNfaCBpcyBnYXJiYWdlLCBidXQgaXQgZG9lcyBub3RcbiAgICAgICAgICogbWF0dGVyIHNpbmNlIGl0IHdpbGwgYmUgcmVjb21wdXRlZCBhdCBuZXh0IGRlZmxhdGUgY2FsbC5cbiAgICAgICAgICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy53aW5kb3dbcy5zdHJzdGFydF0pKTtcbiAgICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTtcblxuICAgICAgcy5sb29rYWhlYWQtLTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICB9XG4gICAgaWYgKGJmbHVzaCkge1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cbiAgICB9XG4gIH1cbiAgcy5pbnNlcnQgPSAoKHMuc3Ryc3RhcnQgPCAoTUlOX01BVENILTEpKSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMSk7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuICBpZiAocy5sYXN0X2xpdCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuICByZXR1cm4gQlNfQkxPQ0tfRE9ORTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTYW1lIGFzIGFib3ZlLCBidXQgYWNoaWV2ZXMgYmV0dGVyIGNvbXByZXNzaW9uLiBXZSB1c2UgYSBsYXp5XG4gKiBldmFsdWF0aW9uIGZvciBtYXRjaGVzOiBhIG1hdGNoIGlzIGZpbmFsbHkgYWRvcHRlZCBvbmx5IGlmIHRoZXJlIGlzXG4gKiBubyBiZXR0ZXIgbWF0Y2ggYXQgdGhlIG5leHQgd2luZG93IHBvc2l0aW9uLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlX3Nsb3cocywgZmx1c2gpIHtcbiAgdmFyIGhhc2hfaGVhZDsgICAgICAgICAgLyogaGVhZCBvZiBoYXNoIGNoYWluICovXG4gIHZhciBiZmx1c2g7ICAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICB2YXIgbWF4X2luc2VydDtcblxuICAvKiBQcm9jZXNzIHRoZSBpbnB1dCBibG9jay4gKi9cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdFxuICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzXG4gICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlXG4gICAgICogc3RyaW5nIGZvbGxvd2luZyB0aGUgbmV4dCBtYXRjaC5cbiAgICAgKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgeyBicmVhazsgfSAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cblxuICAgIC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0aGVcbiAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjpcbiAgICAgKi9cbiAgICBoYXNoX2hlYWQgPSAwLypOSUwqLztcbiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqL1xuICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0O1xuICAgICAgLyoqKi9cbiAgICB9XG5cbiAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBkaXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLlxuICAgICAqL1xuICAgIHMucHJldl9sZW5ndGggPSBzLm1hdGNoX2xlbmd0aDtcbiAgICBzLnByZXZfbWF0Y2ggPSBzLm1hdGNoX3N0YXJ0O1xuICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENILTE7XG5cbiAgICBpZiAoaGFzaF9oZWFkICE9PSAwLypOSUwqLyAmJiBzLnByZXZfbGVuZ3RoIDwgcy5tYXhfbGF6eV9tYXRjaCAmJlxuICAgICAgICBzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkIDw9IChzLndfc2l6ZS1NSU5fTE9PS0FIRUFEKS8qTUFYX0RJU1QocykqLykge1xuICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmdcbiAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChpbiBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaFxuICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gocywgaGFzaF9oZWFkKTtcbiAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovXG5cbiAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSA1ICYmXG4gICAgICAgICAocy5zdHJhdGVneSA9PT0gWl9GSUxURVJFRCB8fCAocy5tYXRjaF9sZW5ndGggPT09IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCA+IDQwOTYvKlRPT19GQVIqLykpKSB7XG5cbiAgICAgICAgLyogSWYgcHJldl9tYXRjaCBpcyBhbHNvIE1JTl9NQVRDSCwgbWF0Y2hfc3RhcnQgaXMgZ2FyYmFnZVxuICAgICAgICAgKiBidXQgd2Ugd2lsbCBpZ25vcmUgdGhlIGN1cnJlbnQgbWF0Y2ggYW55d2F5LlxuICAgICAgICAgKi9cbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0gtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogSWYgdGhlcmUgd2FzIGEgbWF0Y2ggYXQgdGhlIHByZXZpb3VzIHN0ZXAgYW5kIHRoZSBjdXJyZW50XG4gICAgICogbWF0Y2ggaXMgbm90IGJldHRlciwgb3V0cHV0IHRoZSBwcmV2aW91cyBtYXRjaDpcbiAgICAgKi9cbiAgICBpZiAocy5wcmV2X2xlbmd0aCA+PSBNSU5fTUFUQ0ggJiYgcy5tYXRjaF9sZW5ndGggPD0gcy5wcmV2X2xlbmd0aCkge1xuICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDtcbiAgICAgIC8qIERvIG5vdCBpbnNlcnQgc3RyaW5ncyBpbiBoYXNoIHRhYmxlIGJleW9uZCB0aGlzLiAqL1xuXG4gICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQtMSwgcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoKTtcblxuICAgICAgLyoqKl90cl90YWxseV9kaXN0KHMsIHMuc3Ryc3RhcnQgLSAxIC0gcy5wcmV2X21hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIDEtIHMucHJldl9tYXRjaCwgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCk7XG4gICAgICAvKiBJbnNlcnQgaW4gaGFzaCB0YWJsZSBhbGwgc3RyaW5ncyB1cCB0byB0aGUgZW5kIG9mIHRoZSBtYXRjaC5cbiAgICAgICAqIHN0cnN0YXJ0LTEgYW5kIHN0cnN0YXJ0IGFyZSBhbHJlYWR5IGluc2VydGVkLiBJZiB0aGVyZSBpcyBub3RcbiAgICAgICAqIGVub3VnaCBsb29rYWhlYWQsIHRoZSBsYXN0IHR3byBzdHJpbmdzIGFyZSBub3QgaW5zZXJ0ZWQgaW5cbiAgICAgICAqIHRoZSBoYXNoIHRhYmxlLlxuICAgICAgICovXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLnByZXZfbGVuZ3RoLTE7XG4gICAgICBzLnByZXZfbGVuZ3RoIC09IDI7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICgrK3Muc3Ryc3RhcnQgPD0gbWF4X2luc2VydCkge1xuICAgICAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAgICAgLyoqKi9cbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoLS1zLnByZXZfbGVuZ3RoICE9PSAwKTtcbiAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENILTE7XG4gICAgICBzLnN0cnN0YXJ0Kys7XG5cbiAgICAgIGlmIChiZmx1c2gpIHtcbiAgICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgICB9XG4gICAgICAgIC8qKiovXG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHMubWF0Y2hfYXZhaWxhYmxlKSB7XG4gICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gbWF0Y2ggYXQgdGhlIHByZXZpb3VzIHBvc2l0aW9uLCBvdXRwdXQgYVxuICAgICAgICogc2luZ2xlIGxpdGVyYWwuIElmIHRoZXJlIHdhcyBhIG1hdGNoIGJ1dCB0aGUgY3VycmVudCBtYXRjaFxuICAgICAgICogaXMgbG9uZ2VyLCB0cnVuY2F0ZSB0aGUgcHJldmlvdXMgbWF0Y2ggdG8gYSBzaW5nbGUgbGl0ZXJhbC5cbiAgICAgICAqL1xuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0pKTtcbiAgICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0LTFdLCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydC0xXSk7XG5cbiAgICAgIGlmIChiZmx1c2gpIHtcbiAgICAgICAgLyoqKiBGTFVTSF9CTE9DS19PTkxZKHMsIDApICoqKi9cbiAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICAgIC8qKiovXG4gICAgICB9XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyogVGhlcmUgaXMgbm8gcHJldmlvdXMgbWF0Y2ggdG8gY29tcGFyZSB3aXRoLCB3YWl0IGZvclxuICAgICAgICogdGhlIG5leHQgc3RlcCB0byBkZWNpZGUuXG4gICAgICAgKi9cbiAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChmbHVzaCAhPSBaX05PX0ZMVVNILCBcIm5vIGZsdXNoP1wiKTtcbiAgaWYgKHMubWF0Y2hfYXZhaWxhYmxlKSB7XG4gICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0pKTtcbiAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydC0xXSwgYmZsdXNoKTsgKioqL1xuICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0LTFdKTtcblxuICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgfVxuICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMTtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG5cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGb3IgWl9STEUsIHNpbXBseSBsb29rIGZvciBydW5zIG9mIGJ5dGVzLCBnZW5lcmF0ZSBtYXRjaGVzIG9ubHkgb2YgZGlzdGFuY2VcbiAqIG9uZS4gIERvIG5vdCBtYWludGFpbiBhIGhhc2ggdGFibGUuICAoSXQgd2lsbCBiZSByZWdlbmVyYXRlZCBpZiB0aGlzIHJ1biBvZlxuICogZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gWl9STEUuKVxuICovXG5mdW5jdGlvbiBkZWZsYXRlX3JsZShzLCBmbHVzaCkge1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuICB2YXIgcHJldjsgICAgICAgICAgICAgIC8qIGJ5dGUgYXQgZGlzdGFuY2Ugb25lIHRvIG1hdGNoICovXG4gIHZhciBzY2FuLCBzdHJlbmQ7ICAgICAgLyogc2NhbiBnb2VzIHVwIHRvIHN0cmVuZCBmb3IgbGVuZ3RoIG9mIHJ1biAqL1xuXG4gIHZhciBfd2luID0gcy53aW5kb3c7XG5cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdFxuICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzXG4gICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLlxuICAgICAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHtcbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7IGJyZWFrOyB9IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgfVxuXG4gICAgLyogU2VlIGhvdyBtYW55IHRpbWVzIHRoZSBwcmV2aW91cyBieXRlIHJlcGVhdHMgKi9cbiAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0ID4gMCkge1xuICAgICAgc2NhbiA9IHMuc3Ryc3RhcnQgLSAxO1xuICAgICAgcHJldiA9IF93aW5bc2Nhbl07XG4gICAgICBpZiAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0pIHtcbiAgICAgICAgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8qanNoaW50IG5vZW1wdHk6ZmFsc2UqL1xuICAgICAgICB9IHdoaWxlIChwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiZcbiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHNjYW4gPCBzdHJlbmQpO1xuICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTtcbiAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID4gcy5sb29rYWhlYWQpIHtcbiAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IHMubG9va2FoZWFkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL0Fzc2VydChzY2FuIDw9IHMtPndpbmRvdysodUludCkocy0+d2luZG93X3NpemUtMSksIFwid2lsZCBzY2FuXCIpO1xuICAgIH1cblxuICAgIC8qIEVtaXQgbWF0Y2ggaWYgaGF2ZSBydW4gb2YgTUlOX01BVENIIG9yIGxvbmdlciwgZWxzZSBlbWl0IGxpdGVyYWwgKi9cbiAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7XG4gICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQsIHMuc3Ryc3RhcnQgLSAxLCBzLm1hdGNoX2xlbmd0aCk7XG5cbiAgICAgIC8qKiogX3RyX3RhbGx5X2Rpc3QocywgMSwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gsIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAxLCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7XG5cbiAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoO1xuICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDtcbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogTm8gbWF0Y2gsIG91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqL1xuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7XG4gICAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG5cbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgfVxuICAgIGlmIChiZmx1c2gpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG4gIHMuaW5zZXJ0ID0gMDtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZvciBaX0hVRkZNQU5fT05MWSwgZG8gbm90IGxvb2sgZm9yIG1hdGNoZXMuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLlxuICogKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2YgZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gSHVmZm1hbi4pXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfaHVmZihzLCBmbHVzaCkge1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGxpdGVyYWwgdG8gd3JpdGUuICovXG4gICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrOyAgICAgIC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogT3V0cHV0IGEgbGl0ZXJhbCBieXRlICovXG4gICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpO1xuICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZsdXNoKTsgKioqL1xuICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG4gICAgcy5sb29rYWhlYWQtLTtcbiAgICBzLnN0cnN0YXJ0Kys7XG4gICAgaWYgKGJmbHVzaCkge1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cbiAgICB9XG4gIH1cbiAgcy5pbnNlcnQgPSAwO1xuICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cbiAgaWYgKHMubGFzdF9saXQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59XG5cbi8qIFZhbHVlcyBmb3IgbWF4X2xhenlfbWF0Y2gsIGdvb2RfbWF0Y2ggYW5kIG1heF9jaGFpbl9sZW5ndGgsIGRlcGVuZGluZyBvblxuICogdGhlIGRlc2lyZWQgcGFjayBsZXZlbCAoMC4uOSkuIFRoZSB2YWx1ZXMgZ2l2ZW4gYmVsb3cgaGF2ZSBiZWVuIHR1bmVkIHRvXG4gKiBleGNsdWRlIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2UgZm9yIHBhdGhvbG9naWNhbCBmaWxlcy4gQmV0dGVyIHZhbHVlcyBtYXkgYmVcbiAqIGZvdW5kIGZvciBzcGVjaWZpYyBmaWxlcy5cbiAqL1xudmFyIENvbmZpZyA9IGZ1bmN0aW9uIChnb29kX2xlbmd0aCwgbWF4X2xhenksIG5pY2VfbGVuZ3RoLCBtYXhfY2hhaW4sIGZ1bmMpIHtcbiAgdGhpcy5nb29kX2xlbmd0aCA9IGdvb2RfbGVuZ3RoO1xuICB0aGlzLm1heF9sYXp5ID0gbWF4X2xhenk7XG4gIHRoaXMubmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDtcbiAgdGhpcy5tYXhfY2hhaW4gPSBtYXhfY2hhaW47XG4gIHRoaXMuZnVuYyA9IGZ1bmM7XG59O1xuXG52YXIgY29uZmlndXJhdGlvbl90YWJsZTtcblxuY29uZmlndXJhdGlvbl90YWJsZSA9IFtcbiAgLyogICAgICBnb29kIGxhenkgbmljZSBjaGFpbiAqL1xuICBuZXcgQ29uZmlnKDAsIDAsIDAsIDAsIGRlZmxhdGVfc3RvcmVkKSwgICAgICAgICAgLyogMCBzdG9yZSBvbmx5ICovXG4gIG5ldyBDb25maWcoNCwgNCwgOCwgNCwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgICAvKiAxIG1heCBzcGVlZCwgbm8gbGF6eSBtYXRjaGVzICovXG4gIG5ldyBDb25maWcoNCwgNSwgMTYsIDgsIGRlZmxhdGVfZmFzdCksICAgICAgICAgICAvKiAyICovXG4gIG5ldyBDb25maWcoNCwgNiwgMzIsIDMyLCBkZWZsYXRlX2Zhc3QpLCAgICAgICAgICAvKiAzICovXG5cbiAgbmV3IENvbmZpZyg0LCA0LCAxNiwgMTYsIGRlZmxhdGVfc2xvdyksICAgICAgICAgIC8qIDQgbGF6eSBtYXRjaGVzICovXG4gIG5ldyBDb25maWcoOCwgMTYsIDMyLCAzMiwgZGVmbGF0ZV9zbG93KSwgICAgICAgICAvKiA1ICovXG4gIG5ldyBDb25maWcoOCwgMTYsIDEyOCwgMTI4LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAvKiA2ICovXG4gIG5ldyBDb25maWcoOCwgMzIsIDEyOCwgMjU2LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAvKiA3ICovXG4gIG5ldyBDb25maWcoMzIsIDEyOCwgMjU4LCAxMDI0LCBkZWZsYXRlX3Nsb3cpLCAgICAvKiA4ICovXG4gIG5ldyBDb25maWcoMzIsIDI1OCwgMjU4LCA0MDk2LCBkZWZsYXRlX3Nsb3cpICAgICAvKiA5IG1heCBjb21wcmVzc2lvbiAqL1xuXTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEluaXRpYWxpemUgdGhlIFwibG9uZ2VzdCBtYXRjaFwiIHJvdXRpbmVzIGZvciBhIG5ldyB6bGliIHN0cmVhbVxuICovXG5mdW5jdGlvbiBsbV9pbml0KHMpIHtcbiAgcy53aW5kb3dfc2l6ZSA9IDIgKiBzLndfc2l6ZTtcblxuICAvKioqIENMRUFSX0hBU0gocyk7ICoqKi9cbiAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApO1xuXG4gIC8qIFNldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6XG4gICAqL1xuICBzLm1heF9sYXp5X21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfbGF6eTtcbiAgcy5nb29kX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5nb29kX2xlbmd0aDtcbiAgcy5uaWNlX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5uaWNlX2xlbmd0aDtcbiAgcy5tYXhfY2hhaW5fbGVuZ3RoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfY2hhaW47XG5cbiAgcy5zdHJzdGFydCA9IDA7XG4gIHMuYmxvY2tfc3RhcnQgPSAwO1xuICBzLmxvb2thaGVhZCA9IDA7XG4gIHMuaW5zZXJ0ID0gMDtcbiAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICBzLmluc19oID0gMDtcbn1cblxuXG5mdW5jdGlvbiBEZWZsYXRlU3RhdGUoKSB7XG4gIHRoaXMuc3RybSA9IG51bGw7ICAgICAgICAgICAgLyogcG9pbnRlciBiYWNrIHRvIHRoaXMgemxpYiBzdHJlYW0gKi9cbiAgdGhpcy5zdGF0dXMgPSAwOyAgICAgICAgICAgIC8qIGFzIHRoZSBuYW1lIGltcGxpZXMgKi9cbiAgdGhpcy5wZW5kaW5nX2J1ZiA9IG51bGw7ICAgICAgLyogb3V0cHV0IHN0aWxsIHBlbmRpbmcgKi9cbiAgdGhpcy5wZW5kaW5nX2J1Zl9zaXplID0gMDsgIC8qIHNpemUgb2YgcGVuZGluZ19idWYgKi9cbiAgdGhpcy5wZW5kaW5nX291dCA9IDA7ICAgICAgIC8qIG5leHQgcGVuZGluZyBieXRlIHRvIG91dHB1dCB0byB0aGUgc3RyZWFtICovXG4gIHRoaXMucGVuZGluZyA9IDA7ICAgICAgICAgICAvKiBuYiBvZiBieXRlcyBpbiB0aGUgcGVuZGluZyBidWZmZXIgKi9cbiAgdGhpcy53cmFwID0gMDsgICAgICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi9cbiAgdGhpcy5nemhlYWQgPSBudWxsOyAgICAgICAgIC8qIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIHRvIHdyaXRlICovXG4gIHRoaXMuZ3ppbmRleCA9IDA7ICAgICAgICAgICAvKiB3aGVyZSBpbiBleHRyYSwgbmFtZSwgb3IgY29tbWVudCAqL1xuICB0aGlzLm1ldGhvZCA9IFpfREVGTEFURUQ7IC8qIGNhbiBvbmx5IGJlIERFRkxBVEVEICovXG4gIHRoaXMubGFzdF9mbHVzaCA9IC0xOyAgIC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2aW91cyBkZWZsYXRlIGNhbGwgKi9cblxuICB0aGlzLndfc2l6ZSA9IDA7ICAvKiBMWjc3IHdpbmRvdyBzaXplICgzMksgYnkgZGVmYXVsdCkgKi9cbiAgdGhpcy53X2JpdHMgPSAwOyAgLyogbG9nMih3X3NpemUpICAoOC4uMTYpICovXG4gIHRoaXMud19tYXNrID0gMDsgIC8qIHdfc2l6ZSAtIDEgKi9cblxuICB0aGlzLndpbmRvdyA9IG51bGw7XG4gIC8qIFNsaWRpbmcgd2luZG93LiBJbnB1dCBieXRlcyBhcmUgcmVhZCBpbnRvIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgd2luZG93LFxuICAgKiBhbmQgbW92ZSB0byB0aGUgZmlyc3QgaGFsZiBsYXRlciB0byBrZWVwIGEgZGljdGlvbmFyeSBvZiBhdCBsZWFzdCB3U2l6ZVxuICAgKiBieXRlcy4gV2l0aCB0aGlzIG9yZ2FuaXphdGlvbiwgbWF0Y2hlcyBhcmUgbGltaXRlZCB0byBhIGRpc3RhbmNlIG9mXG4gICAqIHdTaXplLU1BWF9NQVRDSCBieXRlcywgYnV0IHRoaXMgZW5zdXJlcyB0aGF0IElPIGlzIGFsd2F5c1xuICAgKiBwZXJmb3JtZWQgd2l0aCBhIGxlbmd0aCBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZS5cbiAgICovXG5cbiAgdGhpcy53aW5kb3dfc2l6ZSA9IDA7XG4gIC8qIEFjdHVhbCBzaXplIG9mIHdpbmRvdzogMip3U2l6ZSwgZXhjZXB0IHdoZW4gdGhlIHVzZXIgaW5wdXQgYnVmZmVyXG4gICAqIGlzIGRpcmVjdGx5IHVzZWQgYXMgc2xpZGluZyB3aW5kb3cuXG4gICAqL1xuXG4gIHRoaXMucHJldiA9IG51bGw7XG4gIC8qIExpbmsgdG8gb2xkZXIgc3RyaW5nIHdpdGggc2FtZSBoYXNoIGluZGV4LiBUbyBsaW1pdCB0aGUgc2l6ZSBvZiB0aGlzXG4gICAqIGFycmF5IHRvIDY0SywgdGhpcyBsaW5rIGlzIG1haW50YWluZWQgb25seSBmb3IgdGhlIGxhc3QgMzJLIHN0cmluZ3MuXG4gICAqIEFuIGluZGV4IGluIHRoaXMgYXJyYXkgaXMgdGh1cyBhIHdpbmRvdyBpbmRleCBtb2R1bG8gMzJLLlxuICAgKi9cblxuICB0aGlzLmhlYWQgPSBudWxsOyAgIC8qIEhlYWRzIG9mIHRoZSBoYXNoIGNoYWlucyBvciBOSUwuICovXG5cbiAgdGhpcy5pbnNfaCA9IDA7ICAgICAgIC8qIGhhc2ggaW5kZXggb2Ygc3RyaW5nIHRvIGJlIGluc2VydGVkICovXG4gIHRoaXMuaGFzaF9zaXplID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gaGFzaCB0YWJsZSAqL1xuICB0aGlzLmhhc2hfYml0cyA9IDA7ICAgLyogbG9nMihoYXNoX3NpemUpICovXG4gIHRoaXMuaGFzaF9tYXNrID0gMDsgICAvKiBoYXNoX3NpemUtMSAqL1xuXG4gIHRoaXMuaGFzaF9zaGlmdCA9IDA7XG4gIC8qIE51bWJlciBvZiBiaXRzIGJ5IHdoaWNoIGluc19oIG11c3QgYmUgc2hpZnRlZCBhdCBlYWNoIGlucHV0XG4gICAqIHN0ZXAuIEl0IG11c3QgYmUgc3VjaCB0aGF0IGFmdGVyIE1JTl9NQVRDSCBzdGVwcywgdGhlIG9sZGVzdFxuICAgKiBieXRlIG5vIGxvbmdlciB0YWtlcyBwYXJ0IGluIHRoZSBoYXNoIGtleSwgdGhhdCBpczpcbiAgICogICBoYXNoX3NoaWZ0ICogTUlOX01BVENIID49IGhhc2hfYml0c1xuICAgKi9cblxuICB0aGlzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgLyogV2luZG93IHBvc2l0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IGJsb2NrLiBHZXRzXG4gICAqIG5lZ2F0aXZlIHdoZW4gdGhlIHdpbmRvdyBpcyBtb3ZlZCBiYWNrd2FyZHMuXG4gICAqL1xuXG4gIHRoaXMubWF0Y2hfbGVuZ3RoID0gMDsgICAgICAvKiBsZW5ndGggb2YgYmVzdCBtYXRjaCAqL1xuICB0aGlzLnByZXZfbWF0Y2ggPSAwOyAgICAgICAgLyogcHJldmlvdXMgbWF0Y2ggKi9cbiAgdGhpcy5tYXRjaF9hdmFpbGFibGUgPSAwOyAgIC8qIHNldCBpZiBwcmV2aW91cyBtYXRjaCBleGlzdHMgKi9cbiAgdGhpcy5zdHJzdGFydCA9IDA7ICAgICAgICAgIC8qIHN0YXJ0IG9mIHN0cmluZyB0byBpbnNlcnQgKi9cbiAgdGhpcy5tYXRjaF9zdGFydCA9IDA7ICAgICAgIC8qIHN0YXJ0IG9mIG1hdGNoaW5nIHN0cmluZyAqL1xuICB0aGlzLmxvb2thaGVhZCA9IDA7ICAgICAgICAgLyogbnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGFoZWFkIGluIHdpbmRvdyAqL1xuXG4gIHRoaXMucHJldl9sZW5ndGggPSAwO1xuICAvKiBMZW5ndGggb2YgdGhlIGJlc3QgbWF0Y2ggYXQgcHJldmlvdXMgc3RlcC4gTWF0Y2hlcyBub3QgZ3JlYXRlciB0aGFuIHRoaXNcbiAgICogYXJlIGRpc2NhcmRlZC4gVGhpcyBpcyB1c2VkIGluIHRoZSBsYXp5IG1hdGNoIGV2YWx1YXRpb24uXG4gICAqL1xuXG4gIHRoaXMubWF4X2NoYWluX2xlbmd0aCA9IDA7XG4gIC8qIFRvIHNwZWVkIHVwIGRlZmxhdGlvbiwgaGFzaCBjaGFpbnMgYXJlIG5ldmVyIHNlYXJjaGVkIGJleW9uZCB0aGlzXG4gICAqIGxlbmd0aC4gIEEgaGlnaGVyIGxpbWl0IGltcHJvdmVzIGNvbXByZXNzaW9uIHJhdGlvIGJ1dCBkZWdyYWRlcyB0aGVcbiAgICogc3BlZWQuXG4gICAqL1xuXG4gIHRoaXMubWF4X2xhenlfbWF0Y2ggPSAwO1xuICAvKiBBdHRlbXB0IHRvIGZpbmQgYSBiZXR0ZXIgbWF0Y2ggb25seSB3aGVuIHRoZSBjdXJyZW50IG1hdGNoIGlzIHN0cmljdGx5XG4gICAqIHNtYWxsZXIgdGhhbiB0aGlzIHZhbHVlLiBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIG9ubHkgZm9yIGNvbXByZXNzaW9uXG4gICAqIGxldmVscyA+PSA0LlxuICAgKi9cbiAgLy8gVGhhdCdzIGFsaWFzIHRvIG1heF9sYXp5X21hdGNoLCBkb24ndCB1c2UgZGlyZWN0bHlcbiAgLy90aGlzLm1heF9pbnNlcnRfbGVuZ3RoID0gMDtcbiAgLyogSW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIG9ubHkgaWYgdGhlIG1hdGNoIGxlbmd0aCBpcyBub3RcbiAgICogZ3JlYXRlciB0aGFuIHRoaXMgbGVuZ3RoLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLlxuICAgKiBtYXhfaW5zZXJ0X2xlbmd0aCBpcyB1c2VkIG9ubHkgZm9yIGNvbXByZXNzaW9uIGxldmVscyA8PSAzLlxuICAgKi9cblxuICB0aGlzLmxldmVsID0gMDsgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICgxLi45KSAqL1xuICB0aGlzLnN0cmF0ZWd5ID0gMDsgIC8qIGZhdm9yIG9yIGZvcmNlIEh1ZmZtYW4gY29kaW5nKi9cblxuICB0aGlzLmdvb2RfbWF0Y2ggPSAwO1xuICAvKiBVc2UgYSBmYXN0ZXIgc2VhcmNoIHdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGlzIGxvbmdlciB0aGFuIHRoaXMgKi9cblxuICB0aGlzLm5pY2VfbWF0Y2ggPSAwOyAvKiBTdG9wIHNlYXJjaGluZyB3aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovXG5cbiAgICAgICAgICAgICAgLyogdXNlZCBieSB0cmVlcy5jOiAqL1xuXG4gIC8qIERpZG4ndCB1c2UgY3RfZGF0YSB0eXBlZGVmIGJlbG93IHRvIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi9cblxuICAvLyBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9sdHJlZVtIRUFQX1NJWkVdOyAgIC8qIGxpdGVyYWwgYW5kIGxlbmd0aCB0cmVlICovXG4gIC8vIHN0cnVjdCBjdF9kYXRhX3MgZHluX2R0cmVlWzIqRF9DT0RFUysxXTsgLyogZGlzdGFuY2UgdHJlZSAqL1xuICAvLyBzdHJ1Y3QgY3RfZGF0YV9zIGJsX3RyZWVbMipCTF9DT0RFUysxXTsgIC8qIEh1ZmZtYW4gdHJlZSBmb3IgYml0IGxlbmd0aHMgKi9cblxuICAvLyBVc2UgZmxhdCBhcnJheSBvZiBET1VCTEUgc2l6ZSwgd2l0aCBpbnRlcmxlYXZlZCBmYXRhLFxuICAvLyBiZWNhdXNlIEpTIGRvZXMgbm90IHN1cHBvcnQgZWZmZWN0aXZlXG4gIHRoaXMuZHluX2x0cmVlICA9IG5ldyB1dGlscy5CdWYxNihIRUFQX1NJWkUgKiAyKTtcbiAgdGhpcy5keW5fZHRyZWUgID0gbmV3IHV0aWxzLkJ1ZjE2KCgyKkRfQ09ERVMrMSkgKiAyKTtcbiAgdGhpcy5ibF90cmVlICAgID0gbmV3IHV0aWxzLkJ1ZjE2KCgyKkJMX0NPREVTKzEpICogMik7XG4gIHplcm8odGhpcy5keW5fbHRyZWUpO1xuICB6ZXJvKHRoaXMuZHluX2R0cmVlKTtcbiAgemVybyh0aGlzLmJsX3RyZWUpO1xuXG4gIHRoaXMubF9kZXNjICAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBsaXRlcmFsIHRyZWUgKi9cbiAgdGhpcy5kX2Rlc2MgICA9IG51bGw7ICAgICAgICAgLyogZGVzYy4gZm9yIGRpc3RhbmNlIHRyZWUgKi9cbiAgdGhpcy5ibF9kZXNjICA9IG51bGw7ICAgICAgICAgLyogZGVzYy4gZm9yIGJpdCBsZW5ndGggdHJlZSAqL1xuXG4gIC8vdXNoIGJsX2NvdW50W01BWF9CSVRTKzFdO1xuICB0aGlzLmJsX2NvdW50ID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWF9CSVRTKzEpO1xuICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBhbiBvcHRpbWFsIHRyZWUgKi9cblxuICAvL2ludCBoZWFwWzIqTF9DT0RFUysxXTsgICAgICAvKiBoZWFwIHVzZWQgdG8gYnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgKi9cbiAgdGhpcy5oZWFwID0gbmV3IHV0aWxzLkJ1ZjE2KDIqTF9DT0RFUysxKTsgIC8qIGhlYXAgdXNlZCB0byBidWlsZCB0aGUgSHVmZm1hbiB0cmVlcyAqL1xuICB6ZXJvKHRoaXMuaGVhcCk7XG5cbiAgdGhpcy5oZWFwX2xlbiA9IDA7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoZWFwICovXG4gIHRoaXMuaGVhcF9tYXggPSAwOyAgICAgICAgICAgICAgIC8qIGVsZW1lbnQgb2YgbGFyZ2VzdCBmcmVxdWVuY3kgKi9cbiAgLyogVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS4gaGVhcFswXSBpcyBub3QgdXNlZC5cbiAgICogVGhlIHNhbWUgaGVhcCBhcnJheSBpcyB1c2VkIHRvIGJ1aWxkIGFsbCB0cmVlcy5cbiAgICovXG5cbiAgdGhpcy5kZXB0aCA9IG5ldyB1dGlscy5CdWYxNigyKkxfQ09ERVMrMSk7IC8vdWNoIGRlcHRoWzIqTF9DT0RFUysxXTtcbiAgemVybyh0aGlzLmRlcHRoKTtcbiAgLyogRGVwdGggb2YgZWFjaCBzdWJ0cmVlIHVzZWQgYXMgdGllIGJyZWFrZXIgZm9yIHRyZWVzIG9mIGVxdWFsIGZyZXF1ZW5jeVxuICAgKi9cblxuICB0aGlzLmxfYnVmID0gMDsgICAgICAgICAgLyogYnVmZmVyIGluZGV4IGZvciBsaXRlcmFscyBvciBsZW5ndGhzICovXG5cbiAgdGhpcy5saXRfYnVmc2l6ZSA9IDA7XG4gIC8qIFNpemUgb2YgbWF0Y2ggYnVmZmVyIGZvciBsaXRlcmFscy9sZW5ndGhzLiAgVGhlcmUgYXJlIDQgcmVhc29ucyBmb3JcbiAgICogbGltaXRpbmcgbGl0X2J1ZnNpemUgdG8gNjRLOlxuICAgKiAgIC0gZnJlcXVlbmNpZXMgY2FuIGJlIGtlcHQgaW4gMTYgYml0IGNvdW50ZXJzXG4gICAqICAgLSBpZiBjb21wcmVzc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgdGhlIGZpcnN0IGJsb2NrLCBhbGwgaW5wdXRcbiAgICogICAgIGRhdGEgaXMgc3RpbGwgaW4gdGhlIHdpbmRvdyBzbyB3ZSBjYW4gc3RpbGwgZW1pdCBhIHN0b3JlZCBibG9jayBldmVuXG4gICAqICAgICB3aGVuIGlucHV0IGNvbWVzIGZyb20gc3RhbmRhcmQgaW5wdXQuICAoVGhpcyBjYW4gYWxzbyBiZSBkb25lIGZvclxuICAgKiAgICAgYWxsIGJsb2NrcyBpZiBsaXRfYnVmc2l6ZSBpcyBub3QgZ3JlYXRlciB0aGFuIDMySy4pXG4gICAqICAgLSBpZiBjb21wcmVzc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgYSBmaWxlIHNtYWxsZXIgdGhhbiA2NEssIHdlIGNhblxuICAgKiAgICAgZXZlbiBlbWl0IGEgc3RvcmVkIGZpbGUgaW5zdGVhZCBvZiBhIHN0b3JlZCBibG9jayAoc2F2aW5nIDUgYnl0ZXMpLlxuICAgKiAgICAgVGhpcyBpcyBhcHBsaWNhYmxlIG9ubHkgZm9yIHppcCAobm90IGd6aXAgb3IgemxpYikuXG4gICAqICAgLSBjcmVhdGluZyBuZXcgSHVmZm1hbiB0cmVlcyBsZXNzIGZyZXF1ZW50bHkgbWF5IG5vdCBwcm92aWRlIGZhc3RcbiAgICogICAgIGFkYXB0YXRpb24gdG8gY2hhbmdlcyBpbiB0aGUgaW5wdXQgZGF0YSBzdGF0aXN0aWNzLiAoVGFrZSBmb3JcbiAgICogICAgIGV4YW1wbGUgYSBiaW5hcnkgZmlsZSB3aXRoIHBvb3JseSBjb21wcmVzc2libGUgY29kZSBmb2xsb3dlZCBieVxuICAgKiAgICAgYSBoaWdobHkgY29tcHJlc3NpYmxlIHN0cmluZyB0YWJsZS4pIFNtYWxsZXIgYnVmZmVyIHNpemVzIGdpdmVcbiAgICogICAgIGZhc3QgYWRhcHRhdGlvbiBidXQgaGF2ZSBvZiBjb3Vyc2UgdGhlIG92ZXJoZWFkIG9mIHRyYW5zbWl0dGluZ1xuICAgKiAgICAgdHJlZXMgbW9yZSBmcmVxdWVudGx5LlxuICAgKiAgIC0gSSBjYW4ndCBjb3VudCBhYm92ZSA0XG4gICAqL1xuXG4gIHRoaXMubGFzdF9saXQgPSAwOyAgICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gbF9idWYgKi9cblxuICB0aGlzLmRfYnVmID0gMDtcbiAgLyogQnVmZmVyIGluZGV4IGZvciBkaXN0YW5jZXMuIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCBkX2J1ZiBhbmQgbF9idWYgaGF2ZVxuICAgKiB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMuIFRvIHVzZSBkaWZmZXJlbnQgbGVuZ3RocywgYW4gZXh0cmEgZmxhZ1xuICAgKiBhcnJheSB3b3VsZCBiZSBuZWNlc3NhcnkuXG4gICAqL1xuXG4gIHRoaXMub3B0X2xlbiA9IDA7ICAgICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIG9wdGltYWwgdHJlZXMgKi9cbiAgdGhpcy5zdGF0aWNfbGVuID0gMDsgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICovXG4gIHRoaXMubWF0Y2hlcyA9IDA7ICAgICAgIC8qIG51bWJlciBvZiBzdHJpbmcgbWF0Y2hlcyBpbiBjdXJyZW50IGJsb2NrICovXG4gIHRoaXMuaW5zZXJ0ID0gMDsgICAgICAgIC8qIGJ5dGVzIGF0IGVuZCBvZiB3aW5kb3cgbGVmdCB0byBpbnNlcnQgKi9cblxuXG4gIHRoaXMuYmlfYnVmID0gMDtcbiAgLyogT3V0cHV0IGJ1ZmZlci4gYml0cyBhcmUgaW5zZXJ0ZWQgc3RhcnRpbmcgYXQgdGhlIGJvdHRvbSAobGVhc3RcbiAgICogc2lnbmlmaWNhbnQgYml0cykuXG4gICAqL1xuICB0aGlzLmJpX3ZhbGlkID0gMDtcbiAgLyogTnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gYmlfYnVmLiAgQWxsIGJpdHMgYWJvdmUgdGhlIGxhc3QgdmFsaWQgYml0XG4gICAqIGFyZSBhbHdheXMgemVyby5cbiAgICovXG5cbiAgLy8gVXNlZCBmb3Igd2luZG93IG1lbW9yeSBpbml0LiBXZSBzYWZlbHkgaWdub3JlIGl0IGZvciBKUy4gVGhhdCBtYWtlc1xuICAvLyBzZW5zZSBvbmx5IGZvciBwb2ludGVycyBhbmQgbWVtb3J5IGNoZWNrIHRvb2xzLlxuICAvL3RoaXMuaGlnaF93YXRlciA9IDA7XG4gIC8qIEhpZ2ggd2F0ZXIgbWFyayBvZmZzZXQgaW4gd2luZG93IGZvciBpbml0aWFsaXplZCBieXRlcyAtLSBieXRlcyBhYm92ZVxuICAgKiB0aGlzIGFyZSBzZXQgdG8gemVybyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgd2FybmluZ3Mgd2hlblxuICAgKiBsb25nZXN0IG1hdGNoIHJvdXRpbmVzIGFjY2VzcyBieXRlcyBwYXN0IHRoZSBpbnB1dC4gIFRoaXMgaXMgdGhlblxuICAgKiB1cGRhdGVkIHRvIHRoZSBuZXcgaGlnaCB3YXRlciBtYXJrLlxuICAgKi9cbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pIHtcbiAgdmFyIHM7XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7XG4gIH1cblxuICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSAwO1xuICBzdHJtLmRhdGFfdHlwZSA9IFpfVU5LTk9XTjtcblxuICBzID0gc3RybS5zdGF0ZTtcbiAgcy5wZW5kaW5nID0gMDtcbiAgcy5wZW5kaW5nX291dCA9IDA7XG5cbiAgaWYgKHMud3JhcCA8IDApIHtcbiAgICBzLndyYXAgPSAtcy53cmFwO1xuICAgIC8qIHdhcyBtYWRlIG5lZ2F0aXZlIGJ5IGRlZmxhdGUoLi4uLCBaX0ZJTklTSCk7ICovXG4gIH1cbiAgcy5zdGF0dXMgPSAocy53cmFwID8gSU5JVF9TVEFURSA6IEJVU1lfU1RBVEUpO1xuICBzdHJtLmFkbGVyID0gKHMud3JhcCA9PT0gMikgP1xuICAgIDAgIC8vIGNyYzMyKDAsIFpfTlVMTCwgMClcbiAgOlxuICAgIDE7IC8vIGFkbGVyMzIoMCwgWl9OVUxMLCAwKVxuICBzLmxhc3RfZmx1c2ggPSBaX05PX0ZMVVNIO1xuICB0cmVlcy5fdHJfaW5pdChzKTtcbiAgcmV0dXJuIFpfT0s7XG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZVJlc2V0KHN0cm0pIHtcbiAgdmFyIHJldCA9IGRlZmxhdGVSZXNldEtlZXAoc3RybSk7XG4gIGlmIChyZXQgPT09IFpfT0spIHtcbiAgICBsbV9pbml0KHN0cm0uc3RhdGUpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZVNldEhlYWRlcihzdHJtLCBoZWFkKSB7XG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgaWYgKHN0cm0uc3RhdGUud3JhcCAhPT0gMikgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RybS5zdGF0ZS5nemhlYWQgPSBoZWFkO1xuICByZXR1cm4gWl9PSztcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSB7XG4gIGlmICghc3RybSkgeyAvLyA9PT0gWl9OVUxMXG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG4gIHZhciB3cmFwID0gMTtcblxuICBpZiAobGV2ZWwgPT09IFpfREVGQVVMVF9DT01QUkVTU0lPTikge1xuICAgIGxldmVsID0gNjtcbiAgfVxuXG4gIGlmICh3aW5kb3dCaXRzIDwgMCkgeyAvKiBzdXBwcmVzcyB6bGliIHdyYXBwZXIgKi9cbiAgICB3cmFwID0gMDtcbiAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7XG4gIH1cblxuICBlbHNlIGlmICh3aW5kb3dCaXRzID4gMTUpIHtcbiAgICB3cmFwID0gMjsgICAgICAgICAgIC8qIHdyaXRlIGd6aXAgd3JhcHBlciBpbnN0ZWFkICovXG4gICAgd2luZG93Qml0cyAtPSAxNjtcbiAgfVxuXG5cbiAgaWYgKG1lbUxldmVsIDwgMSB8fCBtZW1MZXZlbCA+IE1BWF9NRU1fTEVWRUwgfHwgbWV0aG9kICE9PSBaX0RFRkxBVEVEIHx8XG4gICAgd2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1IHx8IGxldmVsIDwgMCB8fCBsZXZlbCA+IDkgfHxcbiAgICBzdHJhdGVneSA8IDAgfHwgc3RyYXRlZ3kgPiBaX0ZJWEVEKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUik7XG4gIH1cblxuXG4gIGlmICh3aW5kb3dCaXRzID09PSA4KSB7XG4gICAgd2luZG93Qml0cyA9IDk7XG4gIH1cbiAgLyogdW50aWwgMjU2LWJ5dGUgd2luZG93IGJ1ZyBmaXhlZCAqL1xuXG4gIHZhciBzID0gbmV3IERlZmxhdGVTdGF0ZSgpO1xuXG4gIHN0cm0uc3RhdGUgPSBzO1xuICBzLnN0cm0gPSBzdHJtO1xuXG4gIHMud3JhcCA9IHdyYXA7XG4gIHMuZ3poZWFkID0gbnVsbDtcbiAgcy53X2JpdHMgPSB3aW5kb3dCaXRzO1xuICBzLndfc2l6ZSA9IDEgPDwgcy53X2JpdHM7XG4gIHMud19tYXNrID0gcy53X3NpemUgLSAxO1xuXG4gIHMuaGFzaF9iaXRzID0gbWVtTGV2ZWwgKyA3O1xuICBzLmhhc2hfc2l6ZSA9IDEgPDwgcy5oYXNoX2JpdHM7XG4gIHMuaGFzaF9tYXNrID0gcy5oYXNoX3NpemUgLSAxO1xuICBzLmhhc2hfc2hpZnQgPSB+figocy5oYXNoX2JpdHMgKyBNSU5fTUFUQ0ggLSAxKSAvIE1JTl9NQVRDSCk7XG5cbiAgcy53aW5kb3cgPSBuZXcgdXRpbHMuQnVmOChzLndfc2l6ZSAqIDIpO1xuICBzLmhlYWQgPSBuZXcgdXRpbHMuQnVmMTYocy5oYXNoX3NpemUpO1xuICBzLnByZXYgPSBuZXcgdXRpbHMuQnVmMTYocy53X3NpemUpO1xuXG4gIC8vIERvbid0IG5lZWQgbWVtIGluaXQgbWFnaWMgZm9yIEpTLlxuICAvL3MuaGlnaF93YXRlciA9IDA7ICAvKiBub3RoaW5nIHdyaXR0ZW4gdG8gcy0+d2luZG93IHlldCAqL1xuXG4gIHMubGl0X2J1ZnNpemUgPSAxIDw8IChtZW1MZXZlbCArIDYpOyAvKiAxNksgZWxlbWVudHMgYnkgZGVmYXVsdCAqL1xuXG4gIHMucGVuZGluZ19idWZfc2l6ZSA9IHMubGl0X2J1ZnNpemUgKiA0O1xuICBzLnBlbmRpbmdfYnVmID0gbmV3IHV0aWxzLkJ1Zjgocy5wZW5kaW5nX2J1Zl9zaXplKTtcblxuICBzLmRfYnVmID0gcy5saXRfYnVmc2l6ZSA+PiAxO1xuICBzLmxfYnVmID0gKDEgKyAyKSAqIHMubGl0X2J1ZnNpemU7XG5cbiAgcy5sZXZlbCA9IGxldmVsO1xuICBzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gIHMubWV0aG9kID0gbWV0aG9kO1xuXG4gIHJldHVybiBkZWZsYXRlUmVzZXQoc3RybSk7XG59XG5cbmZ1bmN0aW9uIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSB7XG4gIHJldHVybiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIE1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZKTtcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlKHN0cm0sIGZsdXNoKSB7XG4gIHZhciBvbGRfZmx1c2gsIHM7XG4gIHZhciBiZWcsIHZhbDsgLy8gZm9yIGd6aXAgaGVhZGVyIHdyaXRlIG9ubHlcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHxcbiAgICBmbHVzaCA+IFpfQkxPQ0sgfHwgZmx1c2ggPCAwKSB7XG4gICAgcmV0dXJuIHN0cm0gPyBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpIDogWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICBzID0gc3RybS5zdGF0ZTtcblxuICBpZiAoIXN0cm0ub3V0cHV0IHx8XG4gICAgICAoIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgfHxcbiAgICAgIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9PSBaX0ZJTklTSCkpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIChzdHJtLmF2YWlsX291dCA9PT0gMCkgPyBaX0JVRl9FUlJPUiA6IFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG4gIHMuc3RybSA9IHN0cm07IC8qIGp1c3QgaW4gY2FzZSAqL1xuICBvbGRfZmx1c2ggPSBzLmxhc3RfZmx1c2g7XG4gIHMubGFzdF9mbHVzaCA9IGZsdXNoO1xuXG4gIC8qIFdyaXRlIHRoZSBoZWFkZXIgKi9cbiAgaWYgKHMuc3RhdHVzID09PSBJTklUX1NUQVRFKSB7XG5cbiAgICBpZiAocy53cmFwID09PSAyKSB7IC8vIEdaSVAgaGVhZGVyXG4gICAgICBzdHJtLmFkbGVyID0gMDsgIC8vY3JjMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgICBwdXRfYnl0ZShzLCAzMSk7XG4gICAgICBwdXRfYnl0ZShzLCAxMzkpO1xuICAgICAgcHV0X2J5dGUocywgOCk7XG4gICAgICBpZiAoIXMuZ3poZWFkKSB7IC8vIHMtPmd6aGVhZCA9PSBaX05VTExcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6XG4gICAgICAgICAgICAgICAgICAgIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID9cbiAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7XG4gICAgICAgIHB1dF9ieXRlKHMsIE9TX0NPREUpO1xuICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRleHQgPyAxIDogMCkgK1xuICAgICAgICAgICAgICAgICAgICAocy5nemhlYWQuaGNyYyA/IDIgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQuZXh0cmEgPyAwIDogNCkgK1xuICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLm5hbWUgPyAwIDogOCkgK1xuICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLmNvbW1lbnQgPyAwIDogMTYpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiA4KSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiAxNikgJiAweGZmKTtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gMjQpICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMubGV2ZWwgPT09IDkgPyAyIDpcbiAgICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgP1xuICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQub3MgJiAweGZmKTtcbiAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhICYmIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkge1xuICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDB4ZmYpO1xuICAgICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCkgJiAweGZmKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocy5nemhlYWQuaGNyYykge1xuICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcsIDApO1xuICAgICAgICB9XG4gICAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgICAgIHMuc3RhdHVzID0gRVhUUkFfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgLy8gREVGTEFURSBoZWFkZXJcbiAgICB7XG4gICAgICB2YXIgaGVhZGVyID0gKFpfREVGTEFURUQgKyAoKHMud19iaXRzIC0gOCkgPDwgNCkpIDw8IDg7XG4gICAgICB2YXIgbGV2ZWxfZmxhZ3MgPSAtMTtcblxuICAgICAgaWYgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAwO1xuICAgICAgfSBlbHNlIGlmIChzLmxldmVsIDwgNikge1xuICAgICAgICBsZXZlbF9mbGFncyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPT09IDYpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzO1xuICAgICAgfVxuICAgICAgaGVhZGVyIHw9IChsZXZlbF9mbGFncyA8PCA2KTtcbiAgICAgIGlmIChzLnN0cnN0YXJ0ICE9PSAwKSB7IGhlYWRlciB8PSBQUkVTRVRfRElDVDsgfVxuICAgICAgaGVhZGVyICs9IDMxIC0gKGhlYWRlciAlIDMxKTtcblxuICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTtcblxuICAgICAgLyogU2F2ZSB0aGUgYWRsZXIzMiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovXG4gICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkge1xuICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7XG4gICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpO1xuICAgICAgfVxuICAgICAgc3RybS5hZGxlciA9IDE7IC8vIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgfVxuICB9XG5cbi8vI2lmZGVmIEdaSVBcbiAgaWYgKHMuc3RhdHVzID09PSBFWFRSQV9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5leHRyYS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG5cbiAgICAgIHdoaWxlIChzLmd6aW5kZXggPCAocy5nemhlYWQuZXh0cmEubGVuZ3RoICYgMHhmZmZmKSkge1xuICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgYmVnID0gcy5wZW5kaW5nO1xuICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhW3MuZ3ppbmRleF0gJiAweGZmKTtcbiAgICAgICAgcy5nemluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkge1xuICAgICAgICBzLmd6aW5kZXggPSAwO1xuICAgICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFO1xuICAgIH1cbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IE5BTUVfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQubmFtZS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG4gICAgICAvL2ludCB2YWw7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgICAgIGJlZyA9IHMucGVuZGluZztcbiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICAgIHZhbCA9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSlMgc3BlY2lmaWM6IGxpdHRsZSBtYWdpYyB0byBhZGQgemVybyB0ZXJtaW5hdG9yIHRvIGVuZCBvZiBzdHJpbmdcbiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLm5hbWUubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsID0gcy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDB4ZmY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgfVxuICAgICAgICBwdXRfYnl0ZShzLCB2YWwpO1xuICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTtcblxuICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKXtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWwgPT09IDApIHtcbiAgICAgICAgcy5nemluZGV4ID0gMDtcbiAgICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTtcbiAgICB9XG4gIH1cbiAgaWYgKHMuc3RhdHVzID09PSBDT01NRU5UX1NUQVRFKSB7XG4gICAgaWYgKHMuZ3poZWFkLmNvbW1lbnQvKiAhPSBaX05VTEwqLykge1xuICAgICAgYmVnID0gcy5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqL1xuICAgICAgLy9pbnQgdmFsO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7XG4gICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgICB2YWwgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEpTIHNwZWNpZmljOiBsaXR0bGUgbWFnaWMgdG8gYWRkIHplcm8gdGVybWluYXRvciB0byBlbmQgb2Ygc3RyaW5nXG4gICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgICAgIHZhbCA9IHMuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChzLmd6aW5kZXgrKykgJiAweGZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcHV0X2J5dGUocywgdmFsKTtcbiAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7XG5cbiAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbCA9PT0gMCkge1xuICAgICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFO1xuICAgIH1cbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IEhDUkNfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQuaGNyYykge1xuICAgICAgaWYgKHMucGVuZGluZyArIDIgPiBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgIH1cbiAgICAgIGlmIChzLnBlbmRpbmcgKyAyIDw9IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDgpICYgMHhmZik7XG4gICAgICAgIHN0cm0uYWRsZXIgPSAwOyAvL2NyYzMyKDBMLCBaX05VTEwsIDApO1xuICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgIH1cbiAgfVxuLy8jZW5kaWZcblxuICAvKiBGbHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlICovXG4gIGlmIChzLnBlbmRpbmcgIT09IDApIHtcbiAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgLyogU2luY2UgYXZhaWxfb3V0IGlzIDAsIGRlZmxhdGUgd2lsbCBiZSBjYWxsZWQgYWdhaW4gd2l0aFxuICAgICAgICogbW9yZSBvdXRwdXQgc3BhY2UsIGJ1dCBwb3NzaWJseSB3aXRoIGJvdGggcGVuZGluZyBhbmRcbiAgICAgICAqIGF2YWlsX2luIGVxdWFsIHRvIHplcm8uIFRoZXJlIHdvbid0IGJlIGFueXRoaW5nIHRvIGRvLFxuICAgICAgICogYnV0IHRoaXMgaXMgbm90IGFuIGVycm9yIHNpdHVhdGlvbiBzbyBtYWtlIHN1cmUgd2VcbiAgICAgICAqIHJldHVybiBPSyBpbnN0ZWFkIG9mIEJVRl9FUlJPUiBhdCBuZXh0IGNhbGwgb2YgZGVmbGF0ZTpcbiAgICAgICAqL1xuICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7XG4gICAgICByZXR1cm4gWl9PSztcbiAgICB9XG5cbiAgICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIGFuZCBhdm9pZCBkdXBsaWNhdGUgY29uc2VjdXRpdmVcbiAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQgYW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcFxuICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi5cbiAgICAgKi9cbiAgfSBlbHNlIGlmIChzdHJtLmF2YWlsX2luID09PSAwICYmIHJhbmsoZmx1c2gpIDw9IHJhbmsob2xkX2ZsdXNoKSAmJlxuICAgIGZsdXNoICE9PSBaX0ZJTklTSCkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9CVUZfRVJST1IpO1xuICB9XG5cbiAgLyogVXNlciBtdXN0IG5vdCBwcm92aWRlIG1vcmUgaW5wdXQgYWZ0ZXIgdGhlIGZpcnN0IEZJTklTSDogKi9cbiAgaWYgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9CVUZfRVJST1IpO1xuICB9XG5cbiAgLyogU3RhcnQgYSBuZXcgYmxvY2sgb3IgY29udGludWUgdGhlIGN1cnJlbnQgb25lLlxuICAgKi9cbiAgaWYgKHN0cm0uYXZhaWxfaW4gIT09IDAgfHwgcy5sb29rYWhlYWQgIT09IDAgfHxcbiAgICAoZmx1c2ggIT09IFpfTk9fRkxVU0ggJiYgcy5zdGF0dXMgIT09IEZJTklTSF9TVEFURSkpIHtcbiAgICB2YXIgYnN0YXRlID0gKHMuc3RyYXRlZ3kgPT09IFpfSFVGRk1BTl9PTkxZKSA/IGRlZmxhdGVfaHVmZihzLCBmbHVzaCkgOlxuICAgICAgKHMuc3RyYXRlZ3kgPT09IFpfUkxFID8gZGVmbGF0ZV9ybGUocywgZmx1c2gpIDpcbiAgICAgICAgY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5mdW5jKHMsIGZsdXNoKSk7XG5cbiAgICBpZiAoYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9ET05FKSB7XG4gICAgICBzLnN0YXR1cyA9IEZJTklTSF9TVEFURTtcbiAgICB9XG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfTkVFRF9NT1JFIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQpIHtcbiAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTtcbiAgICAgICAgLyogYXZvaWQgQlVGX0VSUk9SIG5leHQgY2FsbCwgc2VlIGFib3ZlICovXG4gICAgICB9XG4gICAgICByZXR1cm4gWl9PSztcbiAgICAgIC8qIElmIGZsdXNoICE9IFpfTk9fRkxVU0ggJiYgYXZhaWxfb3V0ID09IDAsIHRoZSBuZXh0IGNhbGxcbiAgICAgICAqIG9mIGRlZmxhdGUgc2hvdWxkIHVzZSB0aGUgc2FtZSBmbHVzaCBwYXJhbWV0ZXIgdG8gbWFrZSBzdXJlXG4gICAgICAgKiB0aGF0IHRoZSBmbHVzaCBpcyBjb21wbGV0ZS4gU28gd2UgZG9uJ3QgaGF2ZSB0byBvdXRwdXQgYW5cbiAgICAgICAqIGVtcHR5IGJsb2NrIGhlcmUsIHRoaXMgd2lsbCBiZSBkb25lIGF0IG5leHQgY2FsbC4gVGhpcyBhbHNvXG4gICAgICAgKiBlbnN1cmVzIHRoYXQgZm9yIGEgdmVyeSBzbWFsbCBvdXRwdXQgYnVmZmVyLCB3ZSBlbWl0IGF0IG1vc3RcbiAgICAgICAqIG9uZSBlbXB0eSBibG9jay5cbiAgICAgICAqL1xuICAgIH1cbiAgICBpZiAoYnN0YXRlID09PSBCU19CTE9DS19ET05FKSB7XG4gICAgICBpZiAoZmx1c2ggPT09IFpfUEFSVElBTF9GTFVTSCkge1xuICAgICAgICB0cmVlcy5fdHJfYWxpZ24ocyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChmbHVzaCAhPT0gWl9CTE9DSykgeyAvKiBGVUxMX0ZMVVNIIG9yIFNZTkNfRkxVU0ggKi9cblxuICAgICAgICB0cmVlcy5fdHJfc3RvcmVkX2Jsb2NrKHMsIDAsIDAsIGZhbHNlKTtcbiAgICAgICAgLyogRm9yIGEgZnVsbCBmbHVzaCwgdGhpcyBlbXB0eSBibG9jayB3aWxsIGJlIHJlY29nbml6ZWRcbiAgICAgICAgICogYXMgYSBzcGVjaWFsIG1hcmtlciBieSBpbmZsYXRlX3N5bmMoKS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChmbHVzaCA9PT0gWl9GVUxMX0ZMVVNIKSB7XG4gICAgICAgICAgLyoqKiBDTEVBUl9IQVNIKHMpOyAqKiovICAgICAgICAgICAgIC8qIGZvcmdldCBoaXN0b3J5ICovXG4gICAgICAgICAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApO1xuXG4gICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDtcbiAgICAgICAgICAgIHMuYmxvY2tfc3RhcnQgPSAwO1xuICAgICAgICAgICAgcy5pbnNlcnQgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsgLyogYXZvaWQgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCwgc2VlIGFib3ZlICovXG4gICAgICAgIHJldHVybiBaX09LO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvL0Fzc2VydChzdHJtLT5hdmFpbF9vdXQgPiAwLCBcImJ1ZzJcIik7XG4gIC8vaWYgKHN0cm0uYXZhaWxfb3V0IDw9IDApIHsgdGhyb3cgbmV3IEVycm9yKFwiYnVnMlwiKTt9XG5cbiAgaWYgKGZsdXNoICE9PSBaX0ZJTklTSCkgeyByZXR1cm4gWl9PSzsgfVxuICBpZiAocy53cmFwIDw9IDApIHsgcmV0dXJuIFpfU1RSRUFNX0VORDsgfVxuXG4gIC8qIFdyaXRlIHRoZSB0cmFpbGVyICovXG4gIGlmIChzLndyYXAgPT09IDIpIHtcbiAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gOCkgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiAxNikgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiAyNCkgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCBzdHJtLnRvdGFsX2luICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gOCkgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiAxNikgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiAyNCkgJiAweGZmKTtcbiAgfVxuICBlbHNlXG4gIHtcbiAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7XG4gICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDB4ZmZmZik7XG4gIH1cblxuICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAvKiBJZiBhdmFpbF9vdXQgaXMgemVybywgdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2FsbCBkZWZsYXRlIGFnYWluXG4gICAqIHRvIGZsdXNoIHRoZSByZXN0LlxuICAgKi9cbiAgaWYgKHMud3JhcCA+IDApIHsgcy53cmFwID0gLXMud3JhcDsgfVxuICAvKiB3cml0ZSB0aGUgdHJhaWxlciBvbmx5IG9uY2UhICovXG4gIHJldHVybiBzLnBlbmRpbmcgIT09IDAgPyBaX09LIDogWl9TVFJFQU1fRU5EO1xufVxuXG5mdW5jdGlvbiBkZWZsYXRlRW5kKHN0cm0pIHtcbiAgdmFyIHN0YXR1cztcblxuICBpZiAoIXN0cm0vKj09IFpfTlVMTCovIHx8ICFzdHJtLnN0YXRlLyo9PSBaX05VTEwqLykge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzO1xuICBpZiAoc3RhdHVzICE9PSBJTklUX1NUQVRFICYmXG4gICAgc3RhdHVzICE9PSBFWFRSQV9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gTkFNRV9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gQ09NTUVOVF9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gSENSQ19TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gQlVTWV9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gRklOSVNIX1NUQVRFXG4gICkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpO1xuICB9XG5cbiAgc3RybS5zdGF0ZSA9IG51bGw7XG5cbiAgcmV0dXJuIHN0YXR1cyA9PT0gQlVTWV9TVEFURSA/IGVycihzdHJtLCBaX0RBVEFfRVJST1IpIDogWl9PSztcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weSB0aGUgc291cmNlIHN0YXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBzdGF0ZVxuICovXG4vL2Z1bmN0aW9uIGRlZmxhdGVDb3B5KGRlc3QsIHNvdXJjZSkge1xuLy9cbi8vfVxuXG5leHBvcnRzLmRlZmxhdGVJbml0ID0gZGVmbGF0ZUluaXQ7XG5leHBvcnRzLmRlZmxhdGVJbml0MiA9IGRlZmxhdGVJbml0MjtcbmV4cG9ydHMuZGVmbGF0ZVJlc2V0ID0gZGVmbGF0ZVJlc2V0O1xuZXhwb3J0cy5kZWZsYXRlUmVzZXRLZWVwID0gZGVmbGF0ZVJlc2V0S2VlcDtcbmV4cG9ydHMuZGVmbGF0ZVNldEhlYWRlciA9IGRlZmxhdGVTZXRIZWFkZXI7XG5leHBvcnRzLmRlZmxhdGUgPSBkZWZsYXRlO1xuZXhwb3J0cy5kZWZsYXRlRW5kID0gZGVmbGF0ZUVuZDtcbmV4cG9ydHMuZGVmbGF0ZUluZm8gPSAncGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSc7XG5cbi8qIE5vdCBpbXBsZW1lbnRlZFxuZXhwb3J0cy5kZWZsYXRlQm91bmQgPSBkZWZsYXRlQm91bmQ7XG5leHBvcnRzLmRlZmxhdGVDb3B5ID0gZGVmbGF0ZUNvcHk7XG5leHBvcnRzLmRlZmxhdGVTZXREaWN0aW9uYXJ5ID0gZGVmbGF0ZVNldERpY3Rpb25hcnk7XG5leHBvcnRzLmRlZmxhdGVQYXJhbXMgPSBkZWZsYXRlUGFyYW1zO1xuZXhwb3J0cy5kZWZsYXRlUGVuZGluZyA9IGRlZmxhdGVQZW5kaW5nO1xuZXhwb3J0cy5kZWZsYXRlUHJpbWUgPSBkZWZsYXRlUHJpbWU7XG5leHBvcnRzLmRlZmxhdGVUdW5lID0gZGVmbGF0ZVR1bmU7XG4qL1xufSx7XCIuLi91dGlscy9jb21tb25cIjoyNyxcIi4vYWRsZXIzMlwiOjI5LFwiLi9jcmMzMlwiOjMxLFwiLi9tZXNzYWdlc1wiOjM3LFwiLi90cmVlc1wiOjM4fV0sMzM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5cbmZ1bmN0aW9uIEdaaGVhZGVyKCkge1xuICAvKiB0cnVlIGlmIGNvbXByZXNzZWQgZGF0YSBiZWxpZXZlZCB0byBiZSB0ZXh0ICovXG4gIHRoaXMudGV4dCAgICAgICA9IDA7XG4gIC8qIG1vZGlmaWNhdGlvbiB0aW1lICovXG4gIHRoaXMudGltZSAgICAgICA9IDA7XG4gIC8qIGV4dHJhIGZsYWdzIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovXG4gIHRoaXMueGZsYWdzICAgICA9IDA7XG4gIC8qIG9wZXJhdGluZyBzeXN0ZW0gKi9cbiAgdGhpcy5vcyAgICAgICAgID0gMDtcbiAgLyogcG9pbnRlciB0byBleHRyYSBmaWVsZCBvciBaX05VTEwgaWYgbm9uZSAqL1xuICB0aGlzLmV4dHJhICAgICAgPSBudWxsO1xuICAvKiBleHRyYSBmaWVsZCBsZW5ndGggKHZhbGlkIGlmIGV4dHJhICE9IFpfTlVMTCkgKi9cbiAgdGhpcy5leHRyYV9sZW4gID0gMDsgLy8gQWN0dWFsbHksIHdlIGRvbid0IG5lZWQgaXQgaW4gSlMsXG4gICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBsZWF2ZSBmb3IgZmV3IGNvZGUgbW9kaWZpY2F0aW9uc1xuXG4gIC8vXG4gIC8vIFNldHVwIGxpbWl0cyBpcyBub3QgbmVjZXNzYXJ5IGJlY2F1c2UgaW4ganMgd2Ugc2hvdWxkIG5vdCBwcmVhbGxvY2F0ZSBtZW1vcnlcbiAgLy8gZm9yIGluZmxhdGUgdXNlIGNvbnN0YW50IGxpbWl0IGluIDY1NTM2IGJ5dGVzXG4gIC8vXG5cbiAgLyogc3BhY2UgYXQgZXh0cmEgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKi9cbiAgLy8gdGhpcy5leHRyYV9tYXggID0gMDtcbiAgLyogcG9pbnRlciB0byB6ZXJvLXRlcm1pbmF0ZWQgZmlsZSBuYW1lIG9yIFpfTlVMTCAqL1xuICB0aGlzLm5hbWUgICAgICAgPSAnJztcbiAgLyogc3BhY2UgYXQgbmFtZSAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqL1xuICAvLyB0aGlzLm5hbWVfbWF4ICAgPSAwO1xuICAvKiBwb2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBjb21tZW50IG9yIFpfTlVMTCAqL1xuICB0aGlzLmNvbW1lbnQgICAgPSAnJztcbiAgLyogc3BhY2UgYXQgY29tbWVudCAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqL1xuICAvLyB0aGlzLmNvbW1fbWF4ICAgPSAwO1xuICAvKiB0cnVlIGlmIHRoZXJlIHdhcyBvciB3aWxsIGJlIGEgaGVhZGVyIGNyYyAqL1xuICB0aGlzLmhjcmMgICAgICAgPSAwO1xuICAvKiB0cnVlIHdoZW4gZG9uZSByZWFkaW5nIGd6aXAgaGVhZGVyIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovXG4gIHRoaXMuZG9uZSAgICAgICA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEdaaGVhZGVyO1xufSx7fV0sMzQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBTZWUgc3RhdGUgZGVmcyBmcm9tIGluZmxhdGUuanNcbnZhciBCQUQgPSAzMDsgICAgICAgLyogZ290IGEgZGF0YSBlcnJvciAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqL1xudmFyIFRZUEUgPSAxMjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciB0eXBlIGJpdHMsIGluY2x1ZGluZyBsYXN0LWZsYWcgYml0ICovXG5cbi8qXG4gICBEZWNvZGUgbGl0ZXJhbCwgbGVuZ3RoLCBhbmQgZGlzdGFuY2UgY29kZXMgYW5kIHdyaXRlIG91dCB0aGUgcmVzdWx0aW5nXG4gICBsaXRlcmFsIGFuZCBtYXRjaCBieXRlcyB1bnRpbCBlaXRoZXIgbm90IGVub3VnaCBpbnB1dCBvciBvdXRwdXQgaXNcbiAgIGF2YWlsYWJsZSwgYW4gZW5kLW9mLWJsb2NrIGlzIGVuY291bnRlcmVkLCBvciBhIGRhdGEgZXJyb3IgaXMgZW5jb3VudGVyZWQuXG4gICBXaGVuIGxhcmdlIGVub3VnaCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYXJlIHN1cHBsaWVkIHRvIGluZmxhdGUoKSwgZm9yXG4gICBleGFtcGxlLCBhIDE2SyBpbnB1dCBidWZmZXIgYW5kIGEgNjRLIG91dHB1dCBidWZmZXIsIG1vcmUgdGhhbiA5NSUgb2YgdGhlXG4gICBpbmZsYXRlIGV4ZWN1dGlvbiB0aW1lIGlzIHNwZW50IGluIHRoaXMgcm91dGluZS5cblxuICAgRW50cnkgYXNzdW1wdGlvbnM6XG5cbiAgICAgICAgc3RhdGUubW9kZSA9PT0gTEVOXG4gICAgICAgIHN0cm0uYXZhaWxfaW4gPj0gNlxuICAgICAgICBzdHJtLmF2YWlsX291dCA+PSAyNThcbiAgICAgICAgc3RhcnQgPj0gc3RybS5hdmFpbF9vdXRcbiAgICAgICAgc3RhdGUuYml0cyA8IDhcblxuICAgT24gcmV0dXJuLCBzdGF0ZS5tb2RlIGlzIG9uZSBvZjpcblxuICAgICAgICBMRU4gLS0gcmFuIG91dCBvZiBlbm91Z2ggb3V0cHV0IHNwYWNlIG9yIGVub3VnaCBhdmFpbGFibGUgaW5wdXRcbiAgICAgICAgVFlQRSAtLSByZWFjaGVkIGVuZCBvZiBibG9jayBjb2RlLCBpbmZsYXRlKCkgdG8gaW50ZXJwcmV0IG5leHQgYmxvY2tcbiAgICAgICAgQkFEIC0tIGVycm9yIGluIGJsb2NrIGRhdGFcblxuICAgTm90ZXM6XG5cbiAgICAtIFRoZSBtYXhpbXVtIGlucHV0IGJpdHMgdXNlZCBieSBhIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGlzIDE1IGJpdHMgZm9yIHRoZVxuICAgICAgbGVuZ3RoIGNvZGUsIDUgYml0cyBmb3IgdGhlIGxlbmd0aCBleHRyYSwgMTUgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGNvZGUsXG4gICAgICBhbmQgMTMgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGV4dHJhLiAgVGhpcyB0b3RhbHMgNDggYml0cywgb3Igc2l4IGJ5dGVzLlxuICAgICAgVGhlcmVmb3JlIGlmIHN0cm0uYXZhaWxfaW4gPj0gNiwgdGhlbiB0aGVyZSBpcyBlbm91Z2ggaW5wdXQgdG8gYXZvaWRcbiAgICAgIGNoZWNraW5nIGZvciBhdmFpbGFibGUgaW5wdXQgd2hpbGUgZGVjb2RpbmcuXG5cbiAgICAtIFRoZSBtYXhpbXVtIGJ5dGVzIHRoYXQgYSBzaW5nbGUgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgY2FuIG91dHB1dCBpcyAyNThcbiAgICAgIGJ5dGVzLCB3aGljaCBpcyB0aGUgbWF4aW11bSBsZW5ndGggdGhhdCBjYW4gYmUgY29kZWQuICBpbmZsYXRlX2Zhc3QoKVxuICAgICAgcmVxdWlyZXMgc3RybS5hdmFpbF9vdXQgPj0gMjU4IGZvciBlYWNoIGxvb3AgdG8gYXZvaWQgY2hlY2tpbmcgZm9yXG4gICAgICBvdXRwdXQgc3BhY2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5mbGF0ZV9mYXN0KHN0cm0sIHN0YXJ0KSB7XG4gIHZhciBzdGF0ZTtcbiAgdmFyIF9pbjsgICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uaW5wdXQgKi9cbiAgdmFyIGxhc3Q7ICAgICAgICAgICAgICAgICAgIC8qIGhhdmUgZW5vdWdoIGlucHV0IHdoaWxlIGluIDwgbGFzdCAqL1xuICB2YXIgX291dDsgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5vdXRwdXQgKi9cbiAgdmFyIGJlZzsgICAgICAgICAgICAgICAgICAgIC8qIGluZmxhdGUoKSdzIGluaXRpYWwgc3RybS5vdXRwdXQgKi9cbiAgdmFyIGVuZDsgICAgICAgICAgICAgICAgICAgIC8qIHdoaWxlIG91dCA8IGVuZCwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSAqL1xuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgdmFyIGRtYXg7ICAgICAgICAgICAgICAgICAgIC8qIG1heGltdW0gZGlzdGFuY2UgZnJvbSB6bGliIGhlYWRlciAqL1xuLy8jZW5kaWZcbiAgdmFyIHdzaXplOyAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90IHVzaW5nIHdpbmRvdyAqL1xuICB2YXIgd2hhdmU7ICAgICAgICAgICAgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gdGhlIHdpbmRvdyAqL1xuICB2YXIgd25leHQ7ICAgICAgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovXG4gIHZhciB3aW5kb3c7ICAgICAgICAgICAgICAgICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIHdzaXplICE9IDAgKi9cbiAgdmFyIGhvbGQ7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uaG9sZCAqL1xuICB2YXIgYml0czsgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5iaXRzICovXG4gIHZhciBsY29kZTsgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmxlbmNvZGUgKi9cbiAgdmFyIGRjb2RlOyAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uZGlzdGNvZGUgKi9cbiAgdmFyIGxtYXNrOyAgICAgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGxlbmd0aCBjb2RlcyAqL1xuICB2YXIgZG1hc2s7ICAgICAgICAgICAgICAgICAgLyogbWFzayBmb3IgZmlyc3QgbGV2ZWwgb2YgZGlzdGFuY2UgY29kZXMgKi9cbiAgdmFyIGhlcmU7ICAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXZlZCB0YWJsZSBlbnRyeSAqL1xuICB2YXIgb3A7ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBiaXRzLCBvcGVyYXRpb24sIGV4dHJhIGJpdHMsIG9yICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgd2luZG93IHBvc2l0aW9uLCB3aW5kb3cgYnl0ZXMgdG8gY29weSAqL1xuICB2YXIgbGVuOyAgICAgICAgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoLCB1bnVzZWQgYnl0ZXMgKi9cbiAgdmFyIGRpc3Q7ICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoIGRpc3RhbmNlICovXG4gIHZhciBmcm9tOyAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGZyb20gKi9cbiAgdmFyIGZyb21fc291cmNlO1xuXG5cbiAgdmFyIGlucHV0LCBvdXRwdXQ7IC8vIEpTIHNwZWNpZmljLCBiZWNhdXNlIHdlIGhhdmUgbm8gcG9pbnRlcnNcblxuICAvKiBjb3B5IHN0YXRlIHRvIGxvY2FsIHZhcmlhYmxlcyAqL1xuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIC8vaGVyZSA9IHN0YXRlLmhlcmU7XG4gIF9pbiA9IHN0cm0ubmV4dF9pbjtcbiAgaW5wdXQgPSBzdHJtLmlucHV0O1xuICBsYXN0ID0gX2luICsgKHN0cm0uYXZhaWxfaW4gLSA1KTtcbiAgX291dCA9IHN0cm0ubmV4dF9vdXQ7XG4gIG91dHB1dCA9IHN0cm0ub3V0cHV0O1xuICBiZWcgPSBfb3V0IC0gKHN0YXJ0IC0gc3RybS5hdmFpbF9vdXQpO1xuICBlbmQgPSBfb3V0ICsgKHN0cm0uYXZhaWxfb3V0IC0gMjU3KTtcbi8vI2lmZGVmIElORkxBVEVfU1RSSUNUXG4gIGRtYXggPSBzdGF0ZS5kbWF4O1xuLy8jZW5kaWZcbiAgd3NpemUgPSBzdGF0ZS53c2l6ZTtcbiAgd2hhdmUgPSBzdGF0ZS53aGF2ZTtcbiAgd25leHQgPSBzdGF0ZS53bmV4dDtcbiAgd2luZG93ID0gc3RhdGUud2luZG93O1xuICBob2xkID0gc3RhdGUuaG9sZDtcbiAgYml0cyA9IHN0YXRlLmJpdHM7XG4gIGxjb2RlID0gc3RhdGUubGVuY29kZTtcbiAgZGNvZGUgPSBzdGF0ZS5kaXN0Y29kZTtcbiAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7XG4gIGRtYXNrID0gKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMTtcblxuXG4gIC8qIGRlY29kZSBsaXRlcmFscyBhbmQgbGVuZ3RoL2Rpc3RhbmNlcyB1bnRpbCBlbmQtb2YtYmxvY2sgb3Igbm90IGVub3VnaFxuICAgICBpbnB1dCBkYXRhIG9yIG91dHB1dCBzcGFjZSAqL1xuXG4gIHRvcDpcbiAgZG8ge1xuICAgIGlmIChiaXRzIDwgMTUpIHtcbiAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICBiaXRzICs9IDg7XG4gICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgYml0cyArPSA4O1xuICAgIH1cblxuICAgIGhlcmUgPSBsY29kZVtob2xkICYgbG1hc2tdO1xuXG4gICAgZG9sZW46XG4gICAgZm9yICg7OykgeyAvLyBHb3RvIGVtdWxhdGlvblxuICAgICAgb3AgPSBoZXJlID4+PiAyNC8qaGVyZS5iaXRzKi87XG4gICAgICBob2xkID4+Pj0gb3A7XG4gICAgICBiaXRzIC09IG9wO1xuICAgICAgb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZi8qaGVyZS5vcCovO1xuICAgICAgaWYgKG9wID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovXG4gICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgIC8vICAgICAgICBcImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXFxuXCIgOlxuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XFxuXCIsIGhlcmUudmFsKSk7XG4gICAgICAgIG91dHB1dFtfb3V0KytdID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggYmFzZSAqL1xuICAgICAgICBsZW4gPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICBvcCAmPSAxNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICBpZiAob3ApIHtcbiAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW4gKz0gaG9sZCAmICgoMSA8PCBvcCkgLSAxKTtcbiAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgYml0cyAtPSBvcDtcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxcblwiLCBsZW4pKTtcbiAgICAgICAgaWYgKGJpdHMgPCAxNSkge1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdO1xuXG4gICAgICAgIGRvZGlzdDpcbiAgICAgICAgZm9yICg7OykgeyAvLyBnb3RvIGVtdWxhdGlvblxuICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQvKmhlcmUuYml0cyovO1xuICAgICAgICAgIGhvbGQgPj4+PSBvcDtcbiAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgIG9wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmYvKmhlcmUub3AqLztcblxuICAgICAgICAgIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhc2UgKi9cbiAgICAgICAgICAgIGRpc3QgPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkge1xuICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHtcbiAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzdCArPSBob2xkICYgKCgxIDw8IG9wKSAtIDEpO1xuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgICAgICAgICAgIGlmIChkaXN0ID4gZG1heCkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxcblwiLCBkaXN0KSk7XG4gICAgICAgICAgICBvcCA9IF9vdXQgLSBiZWc7ICAgICAgICAgICAgICAgIC8qIG1heCBkaXN0YW5jZSBpbiBvdXRwdXQgKi9cbiAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsgICAgICAgICAgICAgICAgLyogc2VlIGlmIGNvcHkgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgb3AgPSBkaXN0IC0gb3A7ICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgYmFjayBpbiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgaWYgKG9wID4gd2hhdmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkge1xuICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2snO1xuICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICAgICAgICB9XG5cbi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsXG4vLyBkb24ndCBlbmFibGUgaXQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5XG4vLyNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlJcbi8vICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gb3AgLSB3aGF2ZSkge1xuLy8gICAgICAgICAgICAgICAgICBkbyB7XG4vLyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSAwO1xuLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7XG4vLyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHRvcDtcbi8vICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgIGxlbiAtPSBvcCAtIHdoYXZlO1xuLy8gICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IDA7XG4vLyAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wID4gd2hhdmUpO1xuLy8gICAgICAgICAgICAgICAgaWYgKG9wID09PSAwKSB7XG4vLyAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDtcbi8vICAgICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4vLyAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuKTtcbi8vICAgICAgICAgICAgICAgICAgY29udGludWUgdG9wO1xuLy8gICAgICAgICAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmcm9tID0gMDsgLy8gd2luZG93IGluZGV4XG4gICAgICAgICAgICAgIGZyb21fc291cmNlID0gd2luZG93O1xuICAgICAgICAgICAgICBpZiAod25leHQgPT09IDApIHsgICAgICAgICAgIC8qIHZlcnkgY29tbW9uIGNhc2UgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplIC0gb3A7XG4gICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHdpbmRvd1tmcm9tKytdO1xuICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7XG4gICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAod25leHQgPCBvcCkgeyAgICAgIC8qIHdyYXAgYXJvdW5kIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgKyB3bmV4dCAtIG9wO1xuICAgICAgICAgICAgICAgIG9wIC09IHduZXh0O1xuICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSBlbmQgb2Ygd2luZG93ICovXG4gICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7XG4gICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSAwO1xuICAgICAgICAgICAgICAgICAgaWYgKHduZXh0IDwgbGVuKSB7ICAvKiBzb21lIGZyb20gc3RhcnQgb2Ygd2luZG93ICovXG4gICAgICAgICAgICAgICAgICAgIG9wID0gd25leHQ7XG4gICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApO1xuICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAgICAgLyogcmVzdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRpZ3VvdXMgaW4gd2luZG93ICovXG4gICAgICAgICAgICAgICAgZnJvbSArPSB3bmV4dCAtIG9wO1xuICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSB3aW5kb3dbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApO1xuICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAyKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgbGVuIC09IDM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgICAgICAgICAgLyogY29weSBkaXJlY3QgZnJvbSBvdXRwdXQgKi9cbiAgICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pbmltdW0gbGVuZ3RoIGlzIHRocmVlICovXG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgbGVuIC09IDM7XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiA+IDIpO1xuICAgICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBpZiAobGVuID4gMSkge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7ICAgICAgICAgIC8qIDJuZCBsZXZlbCBkaXN0YW5jZSBjb2RlICovXG4gICAgICAgICAgICBoZXJlID0gZGNvZGVbKGhlcmUgJiAweGZmZmYpLypoZXJlLnZhbCovICsgKGhvbGQgJiAoKDEgPDwgb3ApIC0gMSkpXTtcbiAgICAgICAgICAgIGNvbnRpbnVlIGRvZGlzdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIGNvZGUnO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhazsgLy8gbmVlZCB0byBlbXVsYXRlIGdvdG8gdmlhIFwiY29udGludWVcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmICgob3AgJiA2NCkgPT09IDApIHsgICAgICAgICAgICAgIC8qIDJuZCBsZXZlbCBsZW5ndGggY29kZSAqL1xuICAgICAgICBoZXJlID0gbGNvZGVbKGhlcmUgJiAweGZmZmYpLypoZXJlLnZhbCovICsgKGhvbGQgJiAoKDEgPDwgb3ApIC0gMSkpXTtcbiAgICAgICAgY29udGludWUgZG9sZW47XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChvcCAmIDMyKSB7ICAgICAgICAgICAgICAgICAgICAgLyogZW5kLW9mLWJsb2NrICovXG4gICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgICAgZW5kIG9mIGJsb2NrXFxuXCIpKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAgIGJyZWFrIHRvcDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhayB0b3A7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrOyAvLyBuZWVkIHRvIGVtdWxhdGUgZ290byB2aWEgXCJjb250aW51ZVwiXG4gICAgfVxuICB9IHdoaWxlIChfaW4gPCBsYXN0ICYmIF9vdXQgPCBlbmQpO1xuXG4gIC8qIHJldHVybiB1bnVzZWQgYnl0ZXMgKG9uIGVudHJ5LCBiaXRzIDwgOCwgc28gaW4gd29uJ3QgZ28gdG9vIGZhciBiYWNrKSAqL1xuICBsZW4gPSBiaXRzID4+IDM7XG4gIF9pbiAtPSBsZW47XG4gIGJpdHMgLT0gbGVuIDw8IDM7XG4gIGhvbGQgJj0gKDEgPDwgYml0cykgLSAxO1xuXG4gIC8qIHVwZGF0ZSBzdGF0ZSBhbmQgcmV0dXJuICovXG4gIHN0cm0ubmV4dF9pbiA9IF9pbjtcbiAgc3RybS5uZXh0X291dCA9IF9vdXQ7XG4gIHN0cm0uYXZhaWxfaW4gPSAoX2luIDwgbGFzdCA/IDUgKyAobGFzdCAtIF9pbikgOiA1IC0gKF9pbiAtIGxhc3QpKTtcbiAgc3RybS5hdmFpbF9vdXQgPSAoX291dCA8IGVuZCA/IDI1NyArIChlbmQgLSBfb3V0KSA6IDI1NyAtIChfb3V0IC0gZW5kKSk7XG4gIHN0YXRlLmhvbGQgPSBob2xkO1xuICBzdGF0ZS5iaXRzID0gYml0cztcbiAgcmV0dXJuO1xufTtcblxufSx7fV0sMzU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB1dGlscyA9IF9kZXJlcV8oJy4uL3V0aWxzL2NvbW1vbicpO1xudmFyIGFkbGVyMzIgPSBfZGVyZXFfKCcuL2FkbGVyMzInKTtcbnZhciBjcmMzMiAgID0gX2RlcmVxXygnLi9jcmMzMicpO1xudmFyIGluZmxhdGVfZmFzdCA9IF9kZXJlcV8oJy4vaW5mZmFzdCcpO1xudmFyIGluZmxhdGVfdGFibGUgPSBfZGVyZXFfKCcuL2luZnRyZWVzJyk7XG5cbnZhciBDT0RFUyA9IDA7XG52YXIgTEVOUyA9IDE7XG52YXIgRElTVFMgPSAyO1xuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovXG4vL3ZhciBaX05PX0ZMVVNIICAgICAgPSAwO1xuLy92YXIgWl9QQVJUSUFMX0ZMVVNIID0gMTtcbi8vdmFyIFpfU1lOQ19GTFVTSCAgICA9IDI7XG4vL3ZhciBaX0ZVTExfRkxVU0ggICAgPSAzO1xudmFyIFpfRklOSVNIICAgICAgICA9IDQ7XG52YXIgWl9CTE9DSyAgICAgICAgID0gNTtcbnZhciBaX1RSRUVTICAgICAgICAgPSA2O1xuXG5cbi8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXNcbiAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy5cbiAqL1xudmFyIFpfT0sgICAgICAgICAgICA9IDA7XG52YXIgWl9TVFJFQU1fRU5EICAgID0gMTtcbnZhciBaX05FRURfRElDVCAgICAgPSAyO1xuLy92YXIgWl9FUlJOTyAgICAgICAgID0gLTE7XG52YXIgWl9TVFJFQU1fRVJST1IgID0gLTI7XG52YXIgWl9EQVRBX0VSUk9SICAgID0gLTM7XG52YXIgWl9NRU1fRVJST1IgICAgID0gLTQ7XG52YXIgWl9CVUZfRVJST1IgICAgID0gLTU7XG4vL3ZhciBaX1ZFUlNJT05fRVJST1IgPSAtNjtcblxuLyogVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kICovXG52YXIgWl9ERUZMQVRFRCAgPSA4O1xuXG5cbi8qIFNUQVRFUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbnZhciAgICBIRUFEID0gMTsgICAgICAgLyogaTogd2FpdGluZyBmb3IgbWFnaWMgaGVhZGVyICovXG52YXIgICAgRkxBR1MgPSAyOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1ldGhvZCBhbmQgZmxhZ3MgKGd6aXApICovXG52YXIgICAgVElNRSA9IDM7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1vZGlmaWNhdGlvbiB0aW1lIChnemlwKSAqL1xudmFyICAgIE9TID0gNDsgICAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBmbGFncyBhbmQgb3BlcmF0aW5nIHN5c3RlbSAoZ3ppcCkgKi9cbnZhciAgICBFWExFTiA9IDU7ICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0cmEgbGVuZ3RoIChnemlwKSAqL1xudmFyICAgIEVYVFJBID0gNjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBieXRlcyAoZ3ppcCkgKi9cbnZhciAgICBOQU1FID0gNzsgICAgICAgLyogaTogd2FpdGluZyBmb3IgZW5kIG9mIGZpbGUgbmFtZSAoZ3ppcCkgKi9cbnZhciAgICBDT01NRU5UID0gODsgICAgLyogaTogd2FpdGluZyBmb3IgZW5kIG9mIGNvbW1lbnQgKGd6aXApICovXG52YXIgICAgSENSQyA9IDk7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGhlYWRlciBjcmMgKGd6aXApICovXG52YXIgICAgRElDVElEID0gMTA7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpY3Rpb25hcnkgY2hlY2sgdmFsdWUgKi9cbnZhciAgICBESUNUID0gMTE7ICAgICAgLyogd2FpdGluZyBmb3IgaW5mbGF0ZVNldERpY3Rpb25hcnkoKSBjYWxsICovXG52YXIgICAgICAgIFRZUEUgPSAxMjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciB0eXBlIGJpdHMsIGluY2x1ZGluZyBsYXN0LWZsYWcgYml0ICovXG52YXIgICAgICAgIFRZUEVETyA9IDEzOyAgICAvKiBpOiBzYW1lLCBidXQgc2tpcCBjaGVjayB0byBleGl0IGluZmxhdGUgb24gbmV3IGJsb2NrICovXG52YXIgICAgICAgIFNUT1JFRCA9IDE0OyAgICAvKiBpOiB3YWl0aW5nIGZvciBzdG9yZWQgc2l6ZSAobGVuZ3RoIGFuZCBjb21wbGVtZW50KSAqL1xudmFyICAgICAgICBDT1BZXyA9IDE1OyAgICAgLyogaS9vOiBzYW1lIGFzIENPUFkgYmVsb3csIGJ1dCBvbmx5IGZpcnN0IHRpbWUgaW4gKi9cbnZhciAgICAgICAgQ09QWSA9IDE2OyAgICAgIC8qIGkvbzogd2FpdGluZyBmb3IgaW5wdXQgb3Igb3V0cHV0IHRvIGNvcHkgc3RvcmVkIGJsb2NrICovXG52YXIgICAgICAgIFRBQkxFID0gMTc7ICAgICAvKiBpOiB3YWl0aW5nIGZvciBkeW5hbWljIGJsb2NrIHRhYmxlIGxlbmd0aHMgKi9cbnZhciAgICAgICAgTEVOTEVOUyA9IDE4OyAgIC8qIGk6IHdhaXRpbmcgZm9yIGNvZGUgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqL1xudmFyICAgICAgICBDT0RFTEVOUyA9IDE5OyAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBhbmQgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovXG52YXIgICAgICAgICAgICBMRU5fID0gMjA7ICAgICAgLyogaTogc2FtZSBhcyBMRU4gYmVsb3csIGJ1dCBvbmx5IGZpcnN0IHRpbWUgaW4gKi9cbnZhciAgICAgICAgICAgIExFTiA9IDIxOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0L2VvYiBjb2RlICovXG52YXIgICAgICAgICAgICBMRU5FWFQgPSAyMjsgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoIGV4dHJhIGJpdHMgKi9cbnZhciAgICAgICAgICAgIERJU1QgPSAyMzsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBkaXN0YW5jZSBjb2RlICovXG52YXIgICAgICAgICAgICBESVNURVhUID0gMjQ7ICAgLyogaTogd2FpdGluZyBmb3IgZGlzdGFuY2UgZXh0cmEgYml0cyAqL1xudmFyICAgICAgICAgICAgTUFUQ0ggPSAyNTsgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byBjb3B5IHN0cmluZyAqL1xudmFyICAgICAgICAgICAgTElUID0gMjY7ICAgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byB3cml0ZSBsaXRlcmFsICovXG52YXIgICAgQ0hFQ0sgPSAyNzsgICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBjaGVjayB2YWx1ZSAqL1xudmFyICAgIExFTkdUSCA9IDI4OyAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgbGVuZ3RoIChnemlwKSAqL1xudmFyICAgIERPTkUgPSAyOTsgICAgICAvKiBmaW5pc2hlZCBjaGVjaywgZG9uZSAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqL1xudmFyICAgIEJBRCA9IDMwOyAgICAgICAvKiBnb3QgYSBkYXRhIGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgICAgTUVNID0gMzE7ICAgICAgIC8qIGdvdCBhbiBpbmZsYXRlKCkgbWVtb3J5IGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgICAgU1lOQyA9IDMyOyAgICAgIC8qIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBieXRlcyB0byByZXN0YXJ0IGluZmxhdGUoKSAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cblxudmFyIEVOT1VHSF9MRU5TID0gODUyO1xudmFyIEVOT1VHSF9ESVNUUyA9IDU5Mjtcbi8vdmFyIEVOT1VHSCA9ICAoRU5PVUdIX0xFTlMrRU5PVUdIX0RJU1RTKTtcblxudmFyIE1BWF9XQklUUyA9IDE1O1xuLyogMzJLIExaNzcgd2luZG93ICovXG52YXIgREVGX1dCSVRTID0gTUFYX1dCSVRTO1xuXG5cbmZ1bmN0aW9uIFpTV0FQMzIocSkge1xuICByZXR1cm4gICgoKHEgPj4+IDI0KSAmIDB4ZmYpICtcbiAgICAgICAgICAoKHEgPj4+IDgpICYgMHhmZjAwKSArXG4gICAgICAgICAgKChxICYgMHhmZjAwKSA8PCA4KSArXG4gICAgICAgICAgKChxICYgMHhmZikgPDwgMjQpKTtcbn1cblxuXG5mdW5jdGlvbiBJbmZsYXRlU3RhdGUoKSB7XG4gIHRoaXMubW9kZSA9IDA7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5mbGF0ZSBtb2RlICovXG4gIHRoaXMubGFzdCA9IGZhbHNlOyAgICAgICAgICAvKiB0cnVlIGlmIHByb2Nlc3NpbmcgbGFzdCBibG9jayAqL1xuICB0aGlzLndyYXAgPSAwOyAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCAqL1xuICB0aGlzLmhhdmVkaWN0ID0gZmFsc2U7ICAgICAgLyogdHJ1ZSBpZiBkaWN0aW9uYXJ5IHByb3ZpZGVkICovXG4gIHRoaXMuZmxhZ3MgPSAwOyAgICAgICAgICAgICAvKiBnemlwIGhlYWRlciBtZXRob2QgYW5kIGZsYWdzICgwIGlmIHpsaWIpICovXG4gIHRoaXMuZG1heCA9IDA7ICAgICAgICAgICAgICAvKiB6bGliIGhlYWRlciBtYXggZGlzdGFuY2UgKElORkxBVEVfU1RSSUNUKSAqL1xuICB0aGlzLmNoZWNrID0gMDsgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGNvcHkgb2YgY2hlY2sgdmFsdWUgKi9cbiAgdGhpcy50b3RhbCA9IDA7ICAgICAgICAgICAgIC8qIHByb3RlY3RlZCBjb3B5IG9mIG91dHB1dCBjb3VudCAqL1xuICAvLyBUT0RPOiBtYXkgYmUge31cbiAgdGhpcy5oZWFkID0gbnVsbDsgICAgICAgICAgIC8qIHdoZXJlIHRvIHNhdmUgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gKi9cblxuICAvKiBzbGlkaW5nIHdpbmRvdyAqL1xuICB0aGlzLndiaXRzID0gMDsgICAgICAgICAgICAgLyogbG9nIGJhc2UgMiBvZiByZXF1ZXN0ZWQgd2luZG93IHNpemUgKi9cbiAgdGhpcy53c2l6ZSA9IDA7ICAgICAgICAgICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90IHVzaW5nIHdpbmRvdyAqL1xuICB0aGlzLndoYXZlID0gMDsgICAgICAgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gdGhlIHdpbmRvdyAqL1xuICB0aGlzLnduZXh0ID0gMDsgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovXG4gIHRoaXMud2luZG93ID0gbnVsbDsgICAgICAgICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIG5lZWRlZCAqL1xuXG4gIC8qIGJpdCBhY2N1bXVsYXRvciAqL1xuICB0aGlzLmhvbGQgPSAwOyAgICAgICAgICAgICAgLyogaW5wdXQgYml0IGFjY3VtdWxhdG9yICovXG4gIHRoaXMuYml0cyA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYml0cyBpbiBcImluXCIgKi9cblxuICAvKiBmb3Igc3RyaW5nIGFuZCBzdG9yZWQgYmxvY2sgY29weWluZyAqL1xuICB0aGlzLmxlbmd0aCA9IDA7ICAgICAgICAgICAgLyogbGl0ZXJhbCBvciBsZW5ndGggb2YgZGF0YSB0byBjb3B5ICovXG4gIHRoaXMub2Zmc2V0ID0gMDsgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIHRvIGNvcHkgc3RyaW5nIGZyb20gKi9cblxuICAvKiBmb3IgdGFibGUgYW5kIGNvZGUgZGVjb2RpbmcgKi9cbiAgdGhpcy5leHRyYSA9IDA7ICAgICAgICAgICAgIC8qIGV4dHJhIGJpdHMgbmVlZGVkICovXG5cbiAgLyogZml4ZWQgYW5kIGR5bmFtaWMgY29kZSB0YWJsZXMgKi9cbiAgdGhpcy5sZW5jb2RlID0gbnVsbDsgICAgICAgICAgLyogc3RhcnRpbmcgdGFibGUgZm9yIGxlbmd0aC9saXRlcmFsIGNvZGVzICovXG4gIHRoaXMuZGlzdGNvZGUgPSBudWxsOyAgICAgICAgIC8qIHN0YXJ0aW5nIHRhYmxlIGZvciBkaXN0YW5jZSBjb2RlcyAqL1xuICB0aGlzLmxlbmJpdHMgPSAwOyAgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgbGVuY29kZSAqL1xuICB0aGlzLmRpc3RiaXRzID0gMDsgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgZGlzdGNvZGUgKi9cblxuICAvKiBkeW5hbWljIHRhYmxlIGJ1aWxkaW5nICovXG4gIHRoaXMubmNvZGUgPSAwOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovXG4gIHRoaXMubmxlbiA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLm5kaXN0ID0gMDsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLmhhdmUgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGUgbGVuZ3RocyBpbiBsZW5zW10gKi9cbiAgdGhpcy5uZXh0ID0gbnVsbDsgICAgICAgICAgICAgIC8qIG5leHQgYXZhaWxhYmxlIHNwYWNlIGluIGNvZGVzW10gKi9cblxuICB0aGlzLmxlbnMgPSBuZXcgdXRpbHMuQnVmMTYoMzIwKTsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLndvcmsgPSBuZXcgdXRpbHMuQnVmMTYoMjg4KTsgLyogd29yayBhcmVhIGZvciBjb2RlIHRhYmxlIGJ1aWxkaW5nICovXG5cbiAgLypcbiAgIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBwb2ludGVycyBpbiBqcywgd2UgdXNlIGxlbmNvZGUgYW5kIGRpc3Rjb2RlIGRpcmVjdGx5XG4gICBhcyBidWZmZXJzIHNvIHdlIGRvbid0IG5lZWQgY29kZXNcbiAgKi9cbiAgLy90aGlzLmNvZGVzID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSCk7ICAgICAgIC8qIHNwYWNlIGZvciBjb2RlIHRhYmxlcyAqL1xuICB0aGlzLmxlbmR5biA9IG51bGw7ICAgICAgICAgICAgICAvKiBkeW5hbWljIHRhYmxlIGZvciBsZW5ndGgvbGl0ZXJhbCBjb2RlcyAoSlMgc3BlY2lmaWMpICovXG4gIHRoaXMuZGlzdGR5biA9IG51bGw7ICAgICAgICAgICAgIC8qIGR5bmFtaWMgdGFibGUgZm9yIGRpc3RhbmNlIGNvZGVzIChKUyBzcGVjaWZpYykgKi9cbiAgdGhpcy5zYW5lID0gMDsgICAgICAgICAgICAgICAgICAgLyogaWYgZmFsc2UsIGFsbG93IGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciAqL1xuICB0aGlzLmJhY2sgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGJhY2sgb2YgbGFzdCB1bnByb2Nlc3NlZCBsZW5ndGgvbGl0ICovXG4gIHRoaXMud2FzID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWwgbGVuZ3RoIG9mIG1hdGNoICovXG59XG5cbmZ1bmN0aW9uIGluZmxhdGVSZXNldEtlZXAoc3RybSkge1xuICB2YXIgc3RhdGU7XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IHN0YXRlLnRvdGFsID0gMDtcbiAgc3RybS5tc2cgPSAnJzsgLypaX05VTEwqL1xuICBpZiAoc3RhdGUud3JhcCkgeyAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovXG4gICAgc3RybS5hZGxlciA9IHN0YXRlLndyYXAgJiAxO1xuICB9XG4gIHN0YXRlLm1vZGUgPSBIRUFEO1xuICBzdGF0ZS5sYXN0ID0gMDtcbiAgc3RhdGUuaGF2ZWRpY3QgPSAwO1xuICBzdGF0ZS5kbWF4ID0gMzI3Njg7XG4gIHN0YXRlLmhlYWQgPSBudWxsLypaX05VTEwqLztcbiAgc3RhdGUuaG9sZCA9IDA7XG4gIHN0YXRlLmJpdHMgPSAwO1xuICAvL3N0YXRlLmxlbmNvZGUgPSBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQgPSBzdGF0ZS5jb2RlcztcbiAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfTEVOUyk7XG4gIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfRElTVFMpO1xuXG4gIHN0YXRlLnNhbmUgPSAxO1xuICBzdGF0ZS5iYWNrID0gLTE7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogcmVzZXRcXG5cIikpO1xuICByZXR1cm4gWl9PSztcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZVJlc2V0KHN0cm0pIHtcbiAgdmFyIHN0YXRlO1xuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBzdGF0ZS53c2l6ZSA9IDA7XG4gIHN0YXRlLndoYXZlID0gMDtcbiAgc3RhdGUud25leHQgPSAwO1xuICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTtcblxufVxuXG5mdW5jdGlvbiBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpIHtcbiAgdmFyIHdyYXA7XG4gIHZhciBzdGF0ZTtcblxuICAvKiBnZXQgdGhlIHN0YXRlICovXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIC8qIGV4dHJhY3Qgd3JhcCByZXF1ZXN0IGZyb20gd2luZG93Qml0cyBwYXJhbWV0ZXIgKi9cbiAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7XG4gICAgd3JhcCA9IDA7XG4gICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzO1xuICB9XG4gIGVsc2Uge1xuICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDE7XG4gICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkge1xuICAgICAgd2luZG93Qml0cyAmPSAxNTtcbiAgICB9XG4gIH1cblxuICAvKiBzZXQgbnVtYmVyIG9mIHdpbmRvdyBiaXRzLCBmcmVlIHdpbmRvdyBpZiBkaWZmZXJlbnQgKi9cbiAgaWYgKHdpbmRvd0JpdHMgJiYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkpIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cbiAgaWYgKHN0YXRlLndpbmRvdyAhPT0gbnVsbCAmJiBzdGF0ZS53Yml0cyAhPT0gd2luZG93Qml0cykge1xuICAgIHN0YXRlLndpbmRvdyA9IG51bGw7XG4gIH1cblxuICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJlc2V0IHRoZSByZXN0IG9mIGl0ICovXG4gIHN0YXRlLndyYXAgPSB3cmFwO1xuICBzdGF0ZS53Yml0cyA9IHdpbmRvd0JpdHM7XG4gIHJldHVybiBpbmZsYXRlUmVzZXQoc3RybSk7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSB7XG4gIHZhciByZXQ7XG4gIHZhciBzdGF0ZTtcblxuICBpZiAoIXN0cm0pIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIC8vc3RybS5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqL1xuXG4gIHN0YXRlID0gbmV3IEluZmxhdGVTdGF0ZSgpO1xuXG4gIC8vaWYgKHN0YXRlID09PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjtcbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiBhbGxvY2F0ZWRcXG5cIikpO1xuICBzdHJtLnN0YXRlID0gc3RhdGU7XG4gIHN0YXRlLndpbmRvdyA9IG51bGwvKlpfTlVMTCovO1xuICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpO1xuICBpZiAocmV0ICE9PSBaX09LKSB7XG4gICAgc3RybS5zdGF0ZSA9IG51bGwvKlpfTlVMTCovO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVJbml0KHN0cm0pIHtcbiAgcmV0dXJuIGluZmxhdGVJbml0MihzdHJtLCBERUZfV0JJVFMpO1xufVxuXG5cbi8qXG4gUmV0dXJuIHN0YXRlIHdpdGggbGVuZ3RoIGFuZCBkaXN0YW5jZSBkZWNvZGluZyB0YWJsZXMgYW5kIGluZGV4IHNpemVzIHNldCB0b1xuIGZpeGVkIGNvZGUgZGVjb2RpbmcuICBOb3JtYWxseSB0aGlzIHJldHVybnMgZml4ZWQgdGFibGVzIGZyb20gaW5mZml4ZWQuaC5cbiBJZiBCVUlMREZJWEVEIGlzIGRlZmluZWQsIHRoZW4gaW5zdGVhZCB0aGlzIHJvdXRpbmUgYnVpbGRzIHRoZSB0YWJsZXMgdGhlXG4gZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHJldHVybnMgdGhvc2UgdGFibGVzIHRoZSBmaXJzdCB0aW1lIGFuZFxuIHRoZXJlYWZ0ZXIuICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlIGNvZGUgYnkgYWJvdXQgMksgYnl0ZXMsIGluXG4gZXhjaGFuZ2UgZm9yIGEgbGl0dGxlIGV4ZWN1dGlvbiB0aW1lLiAgSG93ZXZlciwgQlVJTERGSVhFRCBzaG91bGQgbm90IGJlXG4gdXNlZCBmb3IgdGhyZWFkZWQgYXBwbGljYXRpb25zLCBzaW5jZSB0aGUgcmV3cml0aW5nIG9mIHRoZSB0YWJsZXMgYW5kIHZpcmdpblxuIG1heSBub3QgYmUgdGhyZWFkLXNhZmUuXG4gKi9cbnZhciB2aXJnaW4gPSB0cnVlO1xuXG52YXIgbGVuZml4LCBkaXN0Zml4OyAvLyBXZSBoYXZlIG5vIHBvaW50ZXJzIGluIEpTLCBzbyBrZWVwIHRhYmxlcyBzZXBhcmF0ZVxuXG5mdW5jdGlvbiBmaXhlZHRhYmxlcyhzdGF0ZSkge1xuICAvKiBidWlsZCBmaXhlZCBodWZmbWFuIHRhYmxlcyBpZiBmaXJzdCBjYWxsIChtYXkgbm90IGJlIHRocmVhZCBzYWZlKSAqL1xuICBpZiAodmlyZ2luKSB7XG4gICAgdmFyIHN5bTtcblxuICAgIGxlbmZpeCA9IG5ldyB1dGlscy5CdWYzMig1MTIpO1xuICAgIGRpc3RmaXggPSBuZXcgdXRpbHMuQnVmMzIoMzIpO1xuXG4gICAgLyogbGl0ZXJhbC9sZW5ndGggdGFibGUgKi9cbiAgICBzeW0gPSAwO1xuICAgIHdoaWxlIChzeW0gPCAxNDQpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA4OyB9XG4gICAgd2hpbGUgKHN5bSA8IDI1NikgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7IH1cbiAgICB3aGlsZSAoc3ltIDwgMjgwKSB7IHN0YXRlLmxlbnNbc3ltKytdID0gNzsgfVxuICAgIHdoaWxlIChzeW0gPCAyODgpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA4OyB9XG5cbiAgICBpbmZsYXRlX3RhYmxlKExFTlMsICBzdGF0ZS5sZW5zLCAwLCAyODgsIGxlbmZpeCwgICAwLCBzdGF0ZS53b3JrLCB7Yml0czogOX0pO1xuXG4gICAgLyogZGlzdGFuY2UgdGFibGUgKi9cbiAgICBzeW0gPSAwO1xuICAgIHdoaWxlIChzeW0gPCAzMikgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDU7IH1cblxuICAgIGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIDAsIDMyLCAgIGRpc3RmaXgsIDAsIHN0YXRlLndvcmssIHtiaXRzOiA1fSk7XG5cbiAgICAvKiBkbyB0aGlzIGp1c3Qgb25jZSAqL1xuICAgIHZpcmdpbiA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGUubGVuY29kZSA9IGxlbmZpeDtcbiAgc3RhdGUubGVuYml0cyA9IDk7XG4gIHN0YXRlLmRpc3Rjb2RlID0gZGlzdGZpeDtcbiAgc3RhdGUuZGlzdGJpdHMgPSA1O1xufVxuXG5cbi8qXG4gVXBkYXRlIHRoZSB3aW5kb3cgd2l0aCB0aGUgbGFzdCB3c2l6ZSAobm9ybWFsbHkgMzJLKSBieXRlcyB3cml0dGVuIGJlZm9yZVxuIHJldHVybmluZy4gIElmIHdpbmRvdyBkb2VzIG5vdCBleGlzdCB5ZXQsIGNyZWF0ZSBpdC4gIFRoaXMgaXMgb25seSBjYWxsZWRcbiB3aGVuIGEgd2luZG93IGlzIGFscmVhZHkgaW4gdXNlLCBvciB3aGVuIG91dHB1dCBoYXMgYmVlbiB3cml0dGVuIGR1cmluZyB0aGlzXG4gaW5mbGF0ZSBjYWxsLCBidXQgdGhlIGVuZCBvZiB0aGUgZGVmbGF0ZSBzdHJlYW0gaGFzIG5vdCBiZWVuIHJlYWNoZWQgeWV0LlxuIEl0IGlzIGFsc28gY2FsbGVkIHRvIGNyZWF0ZSBhIHdpbmRvdyBmb3IgZGljdGlvbmFyeSBkYXRhIHdoZW4gYSBkaWN0aW9uYXJ5XG4gaXMgbG9hZGVkLlxuXG4gUHJvdmlkaW5nIG91dHB1dCBidWZmZXJzIGxhcmdlciB0aGFuIDMySyB0byBpbmZsYXRlKCkgc2hvdWxkIHByb3ZpZGUgYSBzcGVlZFxuIGFkdmFudGFnZSwgc2luY2Ugb25seSB0aGUgbGFzdCAzMksgb2Ygb3V0cHV0IGlzIGNvcGllZCB0byB0aGUgc2xpZGluZyB3aW5kb3dcbiB1cG9uIHJldHVybiBmcm9tIGluZmxhdGUoKSwgYW5kIHNpbmNlIGFsbCBkaXN0YW5jZXMgYWZ0ZXIgdGhlIGZpcnN0IDMySyBvZlxuIG91dHB1dCB3aWxsIGZhbGwgaW4gdGhlIG91dHB1dCBkYXRhLCBtYWtpbmcgbWF0Y2ggY29waWVzIHNpbXBsZXIgYW5kIGZhc3Rlci5cbiBUaGUgYWR2YW50YWdlIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NvcidzIGRhdGEgY2FjaGVzLlxuICovXG5mdW5jdGlvbiB1cGRhdGV3aW5kb3coc3RybSwgc3JjLCBlbmQsIGNvcHkpIHtcbiAgdmFyIGRpc3Q7XG4gIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7XG5cbiAgLyogaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHdpbmRvdyAqL1xuICBpZiAoc3RhdGUud2luZG93ID09PSBudWxsKSB7XG4gICAgc3RhdGUud3NpemUgPSAxIDw8IHN0YXRlLndiaXRzO1xuICAgIHN0YXRlLnduZXh0ID0gMDtcbiAgICBzdGF0ZS53aGF2ZSA9IDA7XG5cbiAgICBzdGF0ZS53aW5kb3cgPSBuZXcgdXRpbHMuQnVmOChzdGF0ZS53c2l6ZSk7XG4gIH1cblxuICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi9cbiAgaWYgKGNvcHkgPj0gc3RhdGUud3NpemUpIHtcbiAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csc3JjLCBlbmQgLSBzdGF0ZS53c2l6ZSwgc3RhdGUud3NpemUsIDApO1xuICAgIHN0YXRlLnduZXh0ID0gMDtcbiAgICBzdGF0ZS53aGF2ZSA9IHN0YXRlLndzaXplO1xuICB9XG4gIGVsc2Uge1xuICAgIGRpc3QgPSBzdGF0ZS53c2l6ZSAtIHN0YXRlLnduZXh0O1xuICAgIGlmIChkaXN0ID4gY29weSkge1xuICAgICAgZGlzdCA9IGNvcHk7XG4gICAgfVxuICAgIC8vem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBlbmQgLSBjb3B5LCBkaXN0KTtcbiAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csc3JjLCBlbmQgLSBjb3B5LCBkaXN0LCBzdGF0ZS53bmV4dCk7XG4gICAgY29weSAtPSBkaXN0O1xuICAgIGlmIChjb3B5KSB7XG4gICAgICAvL3ptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gY29weSwgY29weSk7XG4gICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csc3JjLCBlbmQgLSBjb3B5LCBjb3B5LCAwKTtcbiAgICAgIHN0YXRlLnduZXh0ID0gY29weTtcbiAgICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3RhdGUud25leHQgKz0gZGlzdDtcbiAgICAgIGlmIChzdGF0ZS53bmV4dCA9PT0gc3RhdGUud3NpemUpIHsgc3RhdGUud25leHQgPSAwOyB9XG4gICAgICBpZiAoc3RhdGUud2hhdmUgPCBzdGF0ZS53c2l6ZSkgeyBzdGF0ZS53aGF2ZSArPSBkaXN0OyB9XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlKHN0cm0sIGZsdXNoKSB7XG4gIHZhciBzdGF0ZTtcbiAgdmFyIGlucHV0LCBvdXRwdXQ7ICAgICAgICAgIC8vIGlucHV0L291dHB1dCBidWZmZXJzXG4gIHZhciBuZXh0OyAgICAgICAgICAgICAgICAgICAvKiBuZXh0IGlucHV0IElOREVYICovXG4gIHZhciBwdXQ7ICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IG91dHB1dCBJTkRFWCAqL1xuICB2YXIgaGF2ZSwgbGVmdDsgICAgICAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi9cbiAgdmFyIGhvbGQ7ICAgICAgICAgICAgICAgICAgIC8qIGJpdCBidWZmZXIgKi9cbiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqL1xuICB2YXIgX2luLCBfb3V0OyAgICAgICAgICAgICAgLyogc2F2ZSBzdGFydGluZyBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqL1xuICB2YXIgY29weTsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHN0b3JlZCBvciBtYXRjaCBieXRlcyB0byBjb3B5ICovXG4gIHZhciBmcm9tOyAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi9cbiAgdmFyIGZyb21fc291cmNlO1xuICB2YXIgaGVyZSA9IDA7ICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAqL1xuICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDsgLy8gcGFrZWQgXCJoZXJlXCIgZGVub3JtYWxpemVkIChKUyBzcGVjaWZpYylcbiAgLy92YXIgbGFzdDsgICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHRhYmxlIGVudHJ5ICovXG4gIHZhciBsYXN0X2JpdHMsIGxhc3Rfb3AsIGxhc3RfdmFsOyAvLyBwYWtlZCBcImxhc3RcIiBkZW5vcm1hbGl6ZWQgKEpTIHNwZWNpZmljKVxuICB2YXIgbGVuOyAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIHRvIGNvcHkgZm9yIHJlcGVhdHMsIGJpdHMgdG8gZHJvcCAqL1xuICB2YXIgcmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi9cbiAgdmFyIGhidWYgPSBuZXcgdXRpbHMuQnVmOCg0KTsgICAgLyogYnVmZmVyIGZvciBnemlwIGhlYWRlciBjcmMgY2FsY3VsYXRpb24gKi9cbiAgdmFyIG9wdHM7XG5cbiAgdmFyIG47IC8vIHRlbXBvcmFyeSB2YXIgZm9yIE5FRURfQklUU1xuXG4gIHZhciBvcmRlciA9IC8qIHBlcm11dGF0aW9uIG9mIGNvZGUgbGVuZ3RocyAqL1xuICAgIFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTtcblxuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fCAhc3RybS5vdXRwdXQgfHxcbiAgICAgICghc3RybS5pbnB1dCAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsgc3RhdGUubW9kZSA9IFRZUEVETzsgfSAgICAvKiBza2lwIGNoZWNrICovXG5cblxuICAvLy0tLSBMT0FEKCkgLS0tXG4gIHB1dCA9IHN0cm0ubmV4dF9vdXQ7XG4gIG91dHB1dCA9IHN0cm0ub3V0cHV0O1xuICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7XG4gIG5leHQgPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47XG4gIGhvbGQgPSBzdGF0ZS5ob2xkO1xuICBiaXRzID0gc3RhdGUuYml0cztcbiAgLy8tLS1cblxuICBfaW4gPSBoYXZlO1xuICBfb3V0ID0gbGVmdDtcbiAgcmV0ID0gWl9PSztcblxuICBpbmZfbGVhdmU6IC8vIGdvdG8gZW11bGF0aW9uXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKHN0YXRlLm1vZGUpIHtcbiAgICBjYXNlIEhFQUQ6XG4gICAgICBpZiAoc3RhdGUud3JhcCA9PT0gMCkge1xuICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRURPO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vPT09IE5FRURCSVRTKDE2KTtcbiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIGlmICgoc3RhdGUud3JhcCAmIDIpICYmIGhvbGQgPT09IDB4OGIxZikgeyAgLyogZ3ppcCBoZWFkZXIgKi9cbiAgICAgICAgc3RhdGUuY2hlY2sgPSAwLypjcmMzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTtcbiAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7XG4gICAgICAgIC8vPT09Ly9cblxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubW9kZSA9IEZMQUdTO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXRlLmZsYWdzID0gMDsgICAgICAgICAgIC8qIGV4cGVjdCB6bGliIGhlYWRlciAqL1xuICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIShzdGF0ZS53cmFwICYgMSkgfHwgICAvKiBjaGVjayBpZiB6bGliIGhlYWRlciBhbGxvd2VkICovXG4gICAgICAgICgoKGhvbGQgJiAweGZmKS8qQklUUyg4KSovIDw8IDgpICsgKGhvbGQgPj4gOCkpICUgMzEpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGhlYWRlciBjaGVjayc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKChob2xkICYgMHgwZikvKkJJVFMoNCkqLyAhPT0gWl9ERUZMQVRFRCkge1xuICAgICAgICBzdHJtLm1zZyA9ICd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8tLS0gRFJPUEJJVFMoNCkgLS0tLy9cbiAgICAgIGhvbGQgPj4+PSA0O1xuICAgICAgYml0cyAtPSA0O1xuICAgICAgLy8tLS0vL1xuICAgICAgbGVuID0gKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICsgODtcbiAgICAgIGlmIChzdGF0ZS53Yml0cyA9PT0gMCkge1xuICAgICAgICBzdGF0ZS53Yml0cyA9IGxlbjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbiA+IHN0YXRlLndiaXRzKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgd2luZG93IHNpemUnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXRlLmRtYXggPSAxIDw8IGxlbjtcbiAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICB6bGliIGhlYWRlciBva1xcblwiKSk7XG4gICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxLyphZGxlcjMyKDBMLCBaX05VTEwsIDApKi87XG4gICAgICBzdGF0ZS5tb2RlID0gaG9sZCAmIDB4MjAwID8gRElDVElEIDogVFlQRTtcbiAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICBob2xkID0gMDtcbiAgICAgIGJpdHMgPSAwO1xuICAgICAgLy89PT0vL1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBGTEFHUzpcbiAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLmZsYWdzID0gaG9sZDtcbiAgICAgIGlmICgoc3RhdGUuZmxhZ3MgJiAweGZmKSAhPT0gWl9ERUZMQVRFRCkge1xuICAgICAgICBzdHJtLm1zZyA9ICd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHhlMDAwKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gaGVhZGVyIGZsYWdzIHNldCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC50ZXh0ID0gKChob2xkID4+IDgpICYgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAvLz09PS8vXG4gICAgICB9XG4gICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgaG9sZCA9IDA7XG4gICAgICBiaXRzID0gMDtcbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLm1vZGUgPSBUSU1FO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgVElNRTpcbiAgICAgIC8vPT09IE5FRURCSVRTKDMyKTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQudGltZSA9IGhvbGQ7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgLy89PT0gQ1JDNChzdGF0ZS5jaGVjaywgaG9sZClcbiAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgaGJ1ZlsyXSA9IChob2xkID4+PiAxNikgJiAweGZmO1xuICAgICAgICBoYnVmWzNdID0gKGhvbGQgPj4+IDI0KSAmIDB4ZmY7XG4gICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDQsIDApO1xuICAgICAgICAvLz09PVxuICAgICAgfVxuICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgIGhvbGQgPSAwO1xuICAgICAgYml0cyA9IDA7XG4gICAgICAvLz09PS8vXG4gICAgICBzdGF0ZS5tb2RlID0gT1M7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBPUzpcbiAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQueGZsYWdzID0gKGhvbGQgJiAweGZmKTtcbiAgICAgICAgc3RhdGUuaGVhZC5vcyA9IChob2xkID4+IDgpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpO1xuICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7XG4gICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTtcbiAgICAgICAgLy89PT0vL1xuICAgICAgfVxuICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgIGhvbGQgPSAwO1xuICAgICAgYml0cyA9IDA7XG4gICAgICAvLz09PS8vXG4gICAgICBzdGF0ZS5tb2RlID0gRVhMRU47XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBFWExFTjpcbiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDQwMCkge1xuICAgICAgICAvLz09PSBORUVEQklUUygxNik7ICovXG4gICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZDtcbiAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhX2xlbiA9IGhvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC5leHRyYSA9IG51bGwvKlpfTlVMTCovO1xuICAgICAgfVxuICAgICAgc3RhdGUubW9kZSA9IEVYVFJBO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgRVhUUkE6XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA0MDApIHtcbiAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDtcbiAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSB7IGNvcHkgPSBoYXZlOyB9XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICAgIGxlbiA9IHN0YXRlLmhlYWQuZXh0cmFfbGVuIC0gc3RhdGUubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS5oZWFkLmV4dHJhKSB7XG4gICAgICAgICAgICAgIC8vIFVzZSB1bnR5cGVkIGFycmF5IGZvciBtb3JlIGNvbnZlbmllbmQgcHJvY2Vzc2luZyBsYXRlclxuICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbmV3IEFycmF5KHN0YXRlLmhlYWQuZXh0cmFfbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhLFxuICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgICAgLy8gZXh0cmEgZmllbGQgaXMgbGltaXRlZCB0byA2NTUzNiBieXRlc1xuICAgICAgICAgICAgICAvLyAtIG5vIG5lZWQgZm9yIGFkZGl0aW9uYWwgc2l6ZSBjaGVja1xuICAgICAgICAgICAgICBjb3B5LFxuICAgICAgICAgICAgICAvKmxlbiArIGNvcHkgPiBzdGF0ZS5oZWFkLmV4dHJhX21heCAtIGxlbiA/IHN0YXRlLmhlYWQuZXh0cmFfbWF4IDogY29weSwqL1xuICAgICAgICAgICAgICBsZW5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvL3ptZW1jcHkoc3RhdGUuaGVhZC5leHRyYSArIGxlbiwgbmV4dCxcbiAgICAgICAgICAgIC8vICAgICAgICBsZW4gKyBjb3B5ID4gc3RhdGUuaGVhZC5leHRyYV9tYXggP1xuICAgICAgICAgICAgLy8gICAgICAgIHN0YXRlLmhlYWQuZXh0cmFfbWF4IC0gbGVuIDogY29weSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgICAgbmV4dCArPSBjb3B5O1xuICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICB9XG4gICAgICBzdGF0ZS5sZW5ndGggPSAwO1xuICAgICAgc3RhdGUubW9kZSA9IE5BTUU7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBOQU1FOlxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwODAwKSB7XG4gICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBjb3B5ID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8vIFRPRE86IDIgb3IgMSBieXRlcz9cbiAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTtcbiAgICAgICAgICAvKiB1c2UgY29uc3RhbnQgbGltaXQgYmVjYXVzZSBpbiBqcyB3ZSBzaG91bGQgbm90IHByZWFsbG9jYXRlIG1lbW9yeSAqL1xuICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJlxuICAgICAgICAgICAgICAoc3RhdGUubGVuZ3RoIDwgNjU1MzYgLypzdGF0ZS5oZWFkLm5hbWVfbWF4Ki8pKSB7XG4gICAgICAgICAgICBzdGF0ZS5oZWFkLm5hbWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTtcblxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaGF2ZSAtPSBjb3B5O1xuICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgIGlmIChsZW4pIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQubmFtZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBzdGF0ZS5sZW5ndGggPSAwO1xuICAgICAgc3RhdGUubW9kZSA9IENPTU1FTlQ7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBDT01NRU5UOlxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgxMDAwKSB7XG4gICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBjb3B5ID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdO1xuICAgICAgICAgIC8qIHVzZSBjb25zdGFudCBsaW1pdCBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5ICovXG4gICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmXG4gICAgICAgICAgICAgIChzdGF0ZS5sZW5ndGggPCA2NTUzNiAvKnN0YXRlLmhlYWQuY29tbV9tYXgqLykpIHtcbiAgICAgICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpO1xuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaGF2ZSAtPSBjb3B5O1xuICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgIGlmIChsZW4pIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCA9IG51bGw7XG4gICAgICB9XG4gICAgICBzdGF0ZS5tb2RlID0gSENSQztcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIEhDUkM6XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUuY2hlY2sgJiAweGZmZmYpKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaGVhZGVyIGNyYyBtaXNtYXRjaCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQuaGNyYyA9ICgoc3RhdGUuZmxhZ3MgPj4gOSkgJiAxKTtcbiAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDAgLypjcmMzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERJQ1RJRDpcbiAgICAgIC8vPT09IE5FRURCSVRTKDMyKTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IFpTV0FQMzIoaG9sZCk7XG4gICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgaG9sZCA9IDA7XG4gICAgICBiaXRzID0gMDtcbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLm1vZGUgPSBESUNUO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgRElDVDpcbiAgICAgIGlmIChzdGF0ZS5oYXZlZGljdCA9PT0gMCkge1xuICAgICAgICAvLy0tLSBSRVNUT1JFKCkgLS0tXG4gICAgICAgIHN0cm0ubmV4dF9vdXQgPSBwdXQ7XG4gICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDtcbiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGhhdmU7XG4gICAgICAgIHN0YXRlLmhvbGQgPSBob2xkO1xuICAgICAgICBzdGF0ZS5iaXRzID0gYml0cztcbiAgICAgICAgLy8tLS1cbiAgICAgICAgcmV0dXJuIFpfTkVFRF9ESUNUO1xuICAgICAgfVxuICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gMS8qYWRsZXIzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBUWVBFOlxuICAgICAgaWYgKGZsdXNoID09PSBaX0JMT0NLIHx8IGZsdXNoID09PSBaX1RSRUVTKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgVFlQRURPOlxuICAgICAgaWYgKHN0YXRlLmxhc3QpIHtcbiAgICAgICAgLy8tLS0gQllURUJJVFMoKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gYml0cyAmIDc7XG4gICAgICAgIGJpdHMgLT0gYml0cyAmIDc7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUubW9kZSA9IENIRUNLO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vPT09IE5FRURCSVRTKDMpOyAqL1xuICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7XG4gICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBoYXZlLS07XG4gICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICBiaXRzICs9IDg7XG4gICAgICB9XG4gICAgICAvLz09PS8vXG4gICAgICBzdGF0ZS5sYXN0ID0gKGhvbGQgJiAweDAxKS8qQklUUygxKSovO1xuICAgICAgLy8tLS0gRFJPUEJJVFMoMSkgLS0tLy9cbiAgICAgIGhvbGQgPj4+PSAxO1xuICAgICAgYml0cyAtPSAxO1xuICAgICAgLy8tLS0vL1xuXG4gICAgICBzd2l0Y2ggKChob2xkICYgMHgwMykvKkJJVFMoMikqLykge1xuICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RvcmVkIGJsb2NrICovXG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgIHN0b3JlZCBibG9jayVzXFxuXCIsXG4gICAgICAgIC8vICAgICAgICBzdGF0ZS5sYXN0ID8gXCIgKGxhc3QpXCIgOiBcIlwiKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBTVE9SRUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZml4ZWQgYmxvY2sgKi9cbiAgICAgICAgZml4ZWR0YWJsZXMoc3RhdGUpO1xuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICBmaXhlZCBjb2RlcyBibG9jayVzXFxuXCIsXG4gICAgICAgIC8vICAgICAgICBzdGF0ZS5sYXN0ID8gXCIgKGxhc3QpXCIgOiBcIlwiKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBMRU5fOyAgICAgICAgICAgICAvKiBkZWNvZGUgY29kZXMgKi9cbiAgICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7XG4gICAgICAgICAgLy8tLS0gRFJPUEJJVFMoMikgLS0tLy9cbiAgICAgICAgICBob2xkID4+Pj0gMjtcbiAgICAgICAgICBiaXRzIC09IDI7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgYmxvY2sgKi9cbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgZHluYW1pYyBjb2RlcyBibG9jayVzXFxuXCIsXG4gICAgICAgIC8vICAgICAgICBzdGF0ZS5sYXN0ID8gXCIgKGxhc3QpXCIgOiBcIlwiKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUQUJMRTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgYmxvY2sgdHlwZSc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICB9XG4gICAgICAvLy0tLSBEUk9QQklUUygyKSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IDI7XG4gICAgICBiaXRzIC09IDI7XG4gICAgICAvLy0tLS8vXG4gICAgICBicmVhaztcbiAgICBjYXNlIFNUT1JFRDpcbiAgICAgIC8vLS0tIEJZVEVCSVRTKCkgLS0tLy8gLyogZ28gdG8gYnl0ZSBib3VuZGFyeSAqL1xuICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3O1xuICAgICAgYml0cyAtPSBiaXRzICYgNztcbiAgICAgIC8vLS0tLy9cbiAgICAgIC8vPT09IE5FRURCSVRTKDMyKTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIGlmICgoaG9sZCAmIDB4ZmZmZikgIT09ICgoaG9sZCA+Pj4gMTYpIF4gMHhmZmZmKSkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdGF0ZS5sZW5ndGggPSBob2xkICYgMHhmZmZmO1xuICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICBzdG9yZWQgbGVuZ3RoICV1XFxuXCIsXG4gICAgICAvLyAgICAgICAgc3RhdGUubGVuZ3RoKSk7XG4gICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgaG9sZCA9IDA7XG4gICAgICBiaXRzID0gMDtcbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLm1vZGUgPSBDT1BZXztcbiAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIENPUFlfOlxuICAgICAgc3RhdGUubW9kZSA9IENPUFk7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBDT1BZOlxuICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDtcbiAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgeyBjb3B5ID0gaGF2ZTsgfVxuICAgICAgICBpZiAoY29weSA+IGxlZnQpIHsgY29weSA9IGxlZnQ7IH1cbiAgICAgICAgaWYgKGNvcHkgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIC8vLS0tIHptZW1jcHkocHV0LCBuZXh0LCBjb3B5KTsgLS0tXG4gICAgICAgIHV0aWxzLmFycmF5U2V0KG91dHB1dCwgaW5wdXQsIG5leHQsIGNvcHksIHB1dCk7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgaGF2ZSAtPSBjb3B5O1xuICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgIGxlZnQgLT0gY29weTtcbiAgICAgICAgcHV0ICs9IGNvcHk7XG4gICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgc3RvcmVkIGVuZFxcblwiKSk7XG4gICAgICBzdGF0ZS5tb2RlID0gVFlQRTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVEFCTEU6XG4gICAgICAvLz09PSBORUVEQklUUygxNCk7ICovXG4gICAgICB3aGlsZSAoYml0cyA8IDE0KSB7XG4gICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBoYXZlLS07XG4gICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICBiaXRzICs9IDg7XG4gICAgICB9XG4gICAgICAvLz09PS8vXG4gICAgICBzdGF0ZS5ubGVuID0gKGhvbGQgJiAweDFmKS8qQklUUyg1KSovICsgMjU3O1xuICAgICAgLy8tLS0gRFJPUEJJVFMoNSkgLS0tLy9cbiAgICAgIGhvbGQgPj4+PSA1O1xuICAgICAgYml0cyAtPSA1O1xuICAgICAgLy8tLS0vL1xuICAgICAgc3RhdGUubmRpc3QgPSAoaG9sZCAmIDB4MWYpLypCSVRTKDUpKi8gKyAxO1xuICAgICAgLy8tLS0gRFJPUEJJVFMoNSkgLS0tLy9cbiAgICAgIGhvbGQgPj4+PSA1O1xuICAgICAgYml0cyAtPSA1O1xuICAgICAgLy8tLS0vL1xuICAgICAgc3RhdGUubmNvZGUgPSAoaG9sZCAmIDB4MGYpLypCSVRTKDQpKi8gKyA0O1xuICAgICAgLy8tLS0gRFJPUEJJVFMoNCkgLS0tLy9cbiAgICAgIGhvbGQgPj4+PSA0O1xuICAgICAgYml0cyAtPSA0O1xuICAgICAgLy8tLS0vL1xuLy8jaWZuZGVmIFBLWklQX0JVR19XT1JLQVJPVU5EXG4gICAgICBpZiAoc3RhdGUubmxlbiA+IDI4NiB8fCBzdGF0ZS5uZGlzdCA+IDMwKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ3RvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4vLyNlbmRpZlxuICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICB0YWJsZSBzaXplcyBva1xcblwiKSk7XG4gICAgICBzdGF0ZS5oYXZlID0gMDtcbiAgICAgIHN0YXRlLm1vZGUgPSBMRU5MRU5TO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgTEVOTEVOUzpcbiAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmNvZGUpIHtcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMyk7XG4gICAgICAgIHdoaWxlIChiaXRzIDwgMykge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dID0gKGhvbGQgJiAweDA3KTsvL0JJVFMoMyk7XG4gICAgICAgIC8vLS0tIERST1BCSVRTKDMpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSAzO1xuICAgICAgICBiaXRzIC09IDM7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgIH1cbiAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgMTkpIHtcbiAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBXZSBoYXZlIHNlcGFyYXRlIHRhYmxlcyAmIG5vIHBvaW50ZXJzLiAyIGNvbW1lbnRlZCBsaW5lcyBiZWxvdyBub3QgbmVlZGVkLlxuICAgICAgLy9zdGF0ZS5uZXh0ID0gc3RhdGUuY29kZXM7XG4gICAgICAvL3N0YXRlLmxlbmNvZGUgPSBzdGF0ZS5uZXh0O1xuICAgICAgLy8gU3dpdGNoIHRvIHVzZSBkeW5hbWljIHRhYmxlXG4gICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluO1xuICAgICAgc3RhdGUubGVuYml0cyA9IDc7XG5cbiAgICAgIG9wdHMgPSB7Yml0czogc3RhdGUubGVuYml0c307XG4gICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKENPREVTLCBzdGF0ZS5sZW5zLCAwLCAxOSwgc3RhdGUubGVuY29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7XG4gICAgICBzdGF0ZS5sZW5iaXRzID0gb3B0cy5iaXRzO1xuXG4gICAgICBpZiAocmV0KSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgY29kZSBsZW5ndGhzIHNldCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICBjb2RlIGxlbmd0aHMgb2tcXG5cIikpO1xuICAgICAgc3RhdGUuaGF2ZSA9IDA7XG4gICAgICBzdGF0ZS5tb2RlID0gQ09ERUxFTlM7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBDT0RFTEVOUzpcbiAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7XG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMSldOy8qQklUUyhzdGF0ZS5sZW5iaXRzKSovXG4gICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjtcblxuICAgICAgICAgIGlmICgoaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vL1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICB9XG4gICAgICAgIGlmIChoZXJlX3ZhbCA8IDE2KSB7XG4gICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7XG4gICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGhlcmVfdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChoZXJlX3ZhbCA9PT0gMTYpIHtcbiAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDIpO1xuICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDI7XG4gICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHtcbiAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7XG4gICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0cztcbiAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7XG4gICAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgYml0IGxlbmd0aCByZXBlYXQnO1xuICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxlbiA9IHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSAtIDFdO1xuICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDMpOy8vQklUUygyKTtcbiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gMjtcbiAgICAgICAgICAgIGJpdHMgLT0gMjtcbiAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaGVyZV92YWwgPT09IDE3KSB7XG4gICAgICAgICAgICAvLz09PSBORUVEQklUUyhoZXJlLmJpdHMgKyAzKTtcbiAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAzO1xuICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDcpOy8vQklUUygzKTtcbiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKDMpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gMztcbiAgICAgICAgICAgIGJpdHMgLT0gMztcbiAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLz09PSBORUVEQklUUyhoZXJlLmJpdHMgKyA3KTtcbiAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyA3O1xuICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgY29weSA9IDExICsgKGhvbGQgJiAweDdmKTsvL0JJVFMoNyk7XG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUyg3KSAtLS0vL1xuICAgICAgICAgICAgaG9sZCA+Pj49IDc7XG4gICAgICAgICAgICBiaXRzIC09IDc7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZS5oYXZlICsgY29weSA+IHN0YXRlLm5sZW4gKyBzdGF0ZS5uZGlzdCkge1xuICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCc7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChjb3B5LS0pIHtcbiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGxlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogaGFuZGxlIGVycm9yIGJyZWFrcyBpbiB3aGlsZSAqL1xuICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IEJBRCkgeyBicmVhazsgfVxuXG4gICAgICAvKiBjaGVjayBmb3IgZW5kLW9mLWJsb2NrIGNvZGUgKGJldHRlciBoYXZlIG9uZSkgKi9cbiAgICAgIGlmIChzdGF0ZS5sZW5zWzI1Nl0gPT09IDApIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzIC0tIG5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIGxlbmJpdHMgb3IgZGlzdGJpdHNcbiAgICAgICAgIHZhbHVlcyBoZXJlICg5IGFuZCA2KSB3aXRob3V0IHJlYWRpbmcgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmhcbiAgICAgICAgIGNvbmNlcm5pbmcgdGhlIEVOT1VHSCBjb25zdGFudHMsIHdoaWNoIGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMgKi9cbiAgICAgIHN0YXRlLmxlbmJpdHMgPSA5O1xuXG4gICAgICBvcHRzID0ge2JpdHM6IHN0YXRlLmxlbmJpdHN9O1xuICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCBzdGF0ZS5ubGVuLCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTtcbiAgICAgIC8vIFdlIGhhdmUgc2VwYXJhdGUgdGFibGVzICYgbm8gcG9pbnRlcnMuIDIgY29tbWVudGVkIGxpbmVzIGJlbG93IG5vdCBuZWVkZWQuXG4gICAgICAvLyBzdGF0ZS5uZXh0X2luZGV4ID0gb3B0cy50YWJsZV9pbmRleDtcbiAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7XG4gICAgICAvLyBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubmV4dDtcblxuICAgICAgaWYgKHJldCkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgc3RhdGUuZGlzdGJpdHMgPSA2O1xuICAgICAgLy9zdGF0ZS5kaXN0Y29kZS5jb3B5KHN0YXRlLmNvZGVzKTtcbiAgICAgIC8vIFN3aXRjaCB0byB1c2UgZHluYW1pYyB0YWJsZVxuICAgICAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluO1xuICAgICAgb3B0cyA9IHtiaXRzOiBzdGF0ZS5kaXN0Yml0c307XG4gICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCBzdGF0ZS5ubGVuLCBzdGF0ZS5uZGlzdCwgc3RhdGUuZGlzdGNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpO1xuICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC5cbiAgICAgIC8vIHN0YXRlLm5leHRfaW5kZXggPSBvcHRzLnRhYmxlX2luZGV4O1xuICAgICAgc3RhdGUuZGlzdGJpdHMgPSBvcHRzLmJpdHM7XG4gICAgICAvLyBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQ7XG5cbiAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZXMgc2V0JztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvL1RyYWNldigoc3RkZXJyLCAnaW5mbGF0ZTogICAgICAgY29kZXMgb2tcXG4nKSk7XG4gICAgICBzdGF0ZS5tb2RlID0gTEVOXztcbiAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIExFTl86XG4gICAgICBzdGF0ZS5tb2RlID0gTEVOO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgTEVOOlxuICAgICAgaWYgKGhhdmUgPj0gNiAmJiBsZWZ0ID49IDI1OCkge1xuICAgICAgICAvLy0tLSBSRVNUT1JFKCkgLS0tXG4gICAgICAgIHN0cm0ubmV4dF9vdXQgPSBwdXQ7XG4gICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDtcbiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGhhdmU7XG4gICAgICAgIHN0YXRlLmhvbGQgPSBob2xkO1xuICAgICAgICBzdGF0ZS5iaXRzID0gYml0cztcbiAgICAgICAgLy8tLS1cbiAgICAgICAgaW5mbGF0ZV9mYXN0KHN0cm0sIF9vdXQpO1xuICAgICAgICAvLy0tLSBMT0FEKCkgLS0tXG4gICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7XG4gICAgICAgIG91dHB1dCA9IHN0cm0ub3V0cHV0O1xuICAgICAgICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7XG4gICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47XG4gICAgICAgIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgICAgICAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47XG4gICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkO1xuICAgICAgICBiaXRzID0gc3RhdGUuYml0cztcbiAgICAgICAgLy8tLS1cblxuICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gVFlQRSkge1xuICAgICAgICAgIHN0YXRlLmJhY2sgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXRlLmJhY2sgPSAwO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmxlbmJpdHMpIC0xKV07ICAvKkJJVFMoc3RhdGUubGVuYml0cykqL1xuICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDtcbiAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgaWYgKGhlcmVfYml0cyA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgfVxuICAgICAgaWYgKGhlcmVfb3AgJiYgKGhlcmVfb3AgJiAweGYwKSA9PT0gMCkge1xuICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7XG4gICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wO1xuICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsO1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbbGFzdF92YWwgK1xuICAgICAgICAgICAgICAgICAgKChob2xkICYgKCgxIDw8IChsYXN0X2JpdHMgKyBsYXN0X29wKSkgLTEpKS8qQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSovID4+IGxhc3RfYml0cyldO1xuICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICBpZiAoKGxhc3RfYml0cyArIGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfVxuICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgfVxuICAgICAgICAvLy0tLSBEUk9QQklUUyhsYXN0LmJpdHMpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7XG4gICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzO1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzO1xuICAgICAgfVxuICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgLy8tLS0vL1xuICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7XG4gICAgICBzdGF0ZS5sZW5ndGggPSBoZXJlX3ZhbDtcbiAgICAgIGlmIChoZXJlX29wID09PSAwKSB7XG4gICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgIC8vICAgICAgICBcImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXFxuXCIgOlxuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XFxuXCIsIGhlcmUudmFsKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGhlcmVfb3AgJiAzMikge1xuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xcblwiKSk7XG4gICAgICAgIHN0YXRlLmJhY2sgPSAtMTtcbiAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGhlcmVfb3AgJiA2NCkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXRlLmV4dHJhID0gaGVyZV9vcCAmIDE1O1xuICAgICAgc3RhdGUubW9kZSA9IExFTkVYVDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIExFTkVYVDpcbiAgICAgIGlmIChzdGF0ZS5leHRyYSkge1xuICAgICAgICAvLz09PSBORUVEQklUUyhzdGF0ZS5leHRyYSk7XG4gICAgICAgIG4gPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLmxlbmd0aCArPSBob2xkICYgKCgxIDw8IHN0YXRlLmV4dHJhKSAtMSkvKkJJVFMoc3RhdGUuZXh0cmEpKi87XG4gICAgICAgIC8vLS0tIERST1BCSVRTKHN0YXRlLmV4dHJhKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7XG4gICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUuYmFjayArPSBzdGF0ZS5leHRyYTtcbiAgICAgIH1cbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XFxuXCIsIHN0YXRlLmxlbmd0aCkpO1xuICAgICAgc3RhdGUud2FzID0gc3RhdGUubGVuZ3RoO1xuICAgICAgc3RhdGUubW9kZSA9IERJU1Q7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBESVNUOlxuICAgICAgZm9yICg7Oykge1xuICAgICAgICBoZXJlID0gc3RhdGUuZGlzdGNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5kaXN0Yml0cykgLTEpXTsvKkJJVFMoc3RhdGUuZGlzdGJpdHMpKi9cbiAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmO1xuXG4gICAgICAgIGlmICgoaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgfVxuICAgICAgaWYgKChoZXJlX29wICYgMHhmMCkgPT09IDApIHtcbiAgICAgICAgbGFzdF9iaXRzID0gaGVyZV9iaXRzO1xuICAgICAgICBsYXN0X29wID0gaGVyZV9vcDtcbiAgICAgICAgbGFzdF92YWwgPSBoZXJlX3ZhbDtcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCArXG4gICAgICAgICAgICAgICAgICAoKGhvbGQgJiAoKDEgPDwgKGxhc3RfYml0cyArIGxhc3Rfb3ApKSAtMSkpLypCSVRTKGxhc3QuYml0cyArIGxhc3Qub3ApKi8gPj4gbGFzdF9iaXRzKV07XG4gICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjtcblxuICAgICAgICAgIGlmICgobGFzdF9iaXRzICsgaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vL1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICB9XG4gICAgICAgIC8vLS0tIERST1BCSVRTKGxhc3QuYml0cykgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0cztcbiAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUuYmFjayArPSBsYXN0X2JpdHM7XG4gICAgICB9XG4gICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAvLy0tLS8vXG4gICAgICBzdGF0ZS5iYWNrICs9IGhlcmVfYml0cztcbiAgICAgIGlmIChoZXJlX29wICYgNjQpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSBjb2RlJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdGF0ZS5vZmZzZXQgPSBoZXJlX3ZhbDtcbiAgICAgIHN0YXRlLmV4dHJhID0gKGhlcmVfb3ApICYgMTU7XG4gICAgICBzdGF0ZS5tb2RlID0gRElTVEVYVDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIERJU1RFWFQ6XG4gICAgICBpZiAoc3RhdGUuZXh0cmEpIHtcbiAgICAgICAgLy89PT0gTkVFREJJVFMoc3RhdGUuZXh0cmEpO1xuICAgICAgICBuID0gc3RhdGUuZXh0cmE7XG4gICAgICAgIHdoaWxlIChiaXRzIDwgbikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5vZmZzZXQgKz0gaG9sZCAmICgoMSA8PCBzdGF0ZS5leHRyYSkgLTEpLypCSVRTKHN0YXRlLmV4dHJhKSovO1xuICAgICAgICAvLy0tLSBEUk9QQklUUyhzdGF0ZS5leHRyYSkgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhO1xuICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhO1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7XG4gICAgICB9XG4vLyNpZmRlZiBJTkZMQVRFX1NUUklDVFxuICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IHN0YXRlLmRtYXgpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2snO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGRpc3RhbmNlICV1XFxuXCIsIHN0YXRlLm9mZnNldCkpO1xuICAgICAgc3RhdGUubW9kZSA9IE1BVENIO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgTUFUQ0g6XG4gICAgICBpZiAobGVmdCA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgIGNvcHkgPSBfb3V0IC0gbGVmdDtcbiAgICAgIGlmIChzdGF0ZS5vZmZzZXQgPiBjb3B5KSB7ICAgICAgICAgLyogY29weSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICBjb3B5ID0gc3RhdGUub2Zmc2V0IC0gY29weTtcbiAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53aGF2ZSkge1xuICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7XG4gICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuLy8gKCEpIFRoaXMgYmxvY2sgaXMgZGlzYWJsZWQgaW4gemxpYiBkZWZhaWx0cyxcbi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHlcbi8vI2lmZGVmIElORkxBVEVfQUxMT1dfSU5WQUxJRF9ESVNUQU5DRV9UT09GQVJfQVJSUlxuLy8gICAgICAgICAgVHJhY2UoKHN0ZGVyciwgXCJpbmZsYXRlLmMgdG9vIGZhclxcblwiKSk7XG4vLyAgICAgICAgICBjb3B5IC09IHN0YXRlLndoYXZlO1xuLy8gICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsgY29weSA9IHN0YXRlLmxlbmd0aDsgfVxuLy8gICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9XG4vLyAgICAgICAgICBsZWZ0IC09IGNvcHk7XG4vLyAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTtcbi8vICAgICAgICAgIGRvIHtcbi8vICAgICAgICAgICAgb3V0cHV0W3B1dCsrXSA9IDA7XG4vLyAgICAgICAgICB9IHdoaWxlICgtLWNvcHkpO1xuLy8gICAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgeyBzdGF0ZS5tb2RlID0gTEVOOyB9XG4vLyAgICAgICAgICBicmVhaztcbi8vI2VuZGlmXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53bmV4dCkge1xuICAgICAgICAgIGNvcHkgLT0gc3RhdGUud25leHQ7XG4gICAgICAgICAgZnJvbSA9IHN0YXRlLndzaXplIC0gY29weTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmcm9tID0gc3RhdGUud25leHQgLSBjb3B5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3B5ID4gc3RhdGUubGVuZ3RoKSB7IGNvcHkgPSBzdGF0ZS5sZW5ndGg7IH1cbiAgICAgICAgZnJvbV9zb3VyY2UgPSBzdGF0ZS53aW5kb3c7XG4gICAgICB9XG4gICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IGZyb20gb3V0cHV0ICovXG4gICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICBmcm9tID0gcHV0IC0gc3RhdGUub2Zmc2V0O1xuICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9XG4gICAgICBsZWZ0IC09IGNvcHk7XG4gICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTtcbiAgICAgIGRvIHtcbiAgICAgICAgb3V0cHV0W3B1dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICB9IHdoaWxlICgtLWNvcHkpO1xuICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgeyBzdGF0ZS5tb2RlID0gTEVOOyB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIExJVDpcbiAgICAgIGlmIChsZWZ0ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgb3V0cHV0W3B1dCsrXSA9IHN0YXRlLmxlbmd0aDtcbiAgICAgIGxlZnQtLTtcbiAgICAgIHN0YXRlLm1vZGUgPSBMRU47XG4gICAgICBicmVhaztcbiAgICBjYXNlIENIRUNLOlxuICAgICAgaWYgKHN0YXRlLndyYXApIHtcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpO1xuICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIC8vIFVzZSAnfCcgaW5zZGVhZCBvZiAnKycgdG8gbWFrZSBzdXJlIHRoYXQgcmVzdWx0IGlzIHNpZ25lZFxuICAgICAgICAgIGhvbGQgfD0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIF9vdXQgLT0gbGVmdDtcbiAgICAgICAgc3RybS50b3RhbF9vdXQgKz0gX291dDtcbiAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDtcbiAgICAgICAgaWYgKF9vdXQpIHtcbiAgICAgICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPVxuICAgICAgICAgICAgICAvKlVQREFURShzdGF0ZS5jaGVjaywgcHV0IC0gX291dCwgX291dCk7Ki9cbiAgICAgICAgICAgICAgKHN0YXRlLmZsYWdzID8gY3JjMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCkgOiBhZGxlcjMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHB1dCAtIF9vdXQpKTtcblxuICAgICAgICB9XG4gICAgICAgIF9vdXQgPSBsZWZ0O1xuICAgICAgICAvLyBOQjogY3JjMzIgc3RvcmVkIGFzIHNpZ25lZCAzMi1iaXQgaW50LCBaU1dBUDMyIHJldHVybnMgc2lnbmVkIHRvb1xuICAgICAgICBpZiAoKHN0YXRlLmZsYWdzID8gaG9sZCA6IFpTV0FQMzIoaG9sZCkpICE9PSBzdGF0ZS5jaGVjaykge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2luY29ycmVjdCBkYXRhIGNoZWNrJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgY2hlY2sgbWF0Y2hlcyB0cmFpbGVyXFxuXCIpKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLm1vZGUgPSBMRU5HVEg7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBMRU5HVEg6XG4gICAgICBpZiAoc3RhdGUud3JhcCAmJiBzdGF0ZS5mbGFncykge1xuICAgICAgICAvLz09PSBORUVEQklUUygzMik7XG4gICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS50b3RhbCAmIDB4ZmZmZmZmZmYpKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGxlbmd0aCBjaGVjayc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIGxlbmd0aCBtYXRjaGVzIHRyYWlsZXJcXG5cIikpO1xuICAgICAgfVxuICAgICAgc3RhdGUubW9kZSA9IERPTkU7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBET05FOlxuICAgICAgcmV0ID0gWl9TVFJFQU1fRU5EO1xuICAgICAgYnJlYWsgaW5mX2xlYXZlO1xuICAgIGNhc2UgQkFEOlxuICAgICAgcmV0ID0gWl9EQVRBX0VSUk9SO1xuICAgICAgYnJlYWsgaW5mX2xlYXZlO1xuICAgIGNhc2UgTUVNOlxuICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SO1xuICAgIGNhc2UgU1lOQzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICAgIH1cbiAgfVxuXG4gIC8vIGluZl9sZWF2ZSA8LSBoZXJlIGlzIHJlYWwgcGxhY2UgZm9yIFwiZ290byBpbmZfbGVhdmVcIiwgZW11bGF0ZWQgdmlhIFwiYnJlYWsgaW5mX2xlYXZlXCJcblxuICAvKlxuICAgICBSZXR1cm4gZnJvbSBpbmZsYXRlKCksIHVwZGF0aW5nIHRoZSB0b3RhbCBjb3VudHMgYW5kIHRoZSBjaGVjayB2YWx1ZS5cbiAgICAgSWYgdGhlcmUgd2FzIG5vIHByb2dyZXNzIGR1cmluZyB0aGUgaW5mbGF0ZSgpIGNhbGwsIHJldHVybiBhIGJ1ZmZlclxuICAgICBlcnJvci4gIENhbGwgdXBkYXRld2luZG93KCkgdG8gY3JlYXRlIGFuZC9vciB1cGRhdGUgdGhlIHdpbmRvdyBzdGF0ZS5cbiAgICAgTm90ZTogYSBtZW1vcnkgZXJyb3IgZnJvbSBpbmZsYXRlKCkgaXMgbm9uLXJlY292ZXJhYmxlLlxuICAgKi9cblxuICAvLy0tLSBSRVNUT1JFKCkgLS0tXG4gIHN0cm0ubmV4dF9vdXQgPSBwdXQ7XG4gIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDtcbiAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgc3RybS5hdmFpbF9pbiA9IGhhdmU7XG4gIHN0YXRlLmhvbGQgPSBob2xkO1xuICBzdGF0ZS5iaXRzID0gYml0cztcbiAgLy8tLS1cblxuICBpZiAoc3RhdGUud3NpemUgfHwgKF9vdXQgIT09IHN0cm0uYXZhaWxfb3V0ICYmIHN0YXRlLm1vZGUgPCBCQUQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUubW9kZSA8IENIRUNLIHx8IGZsdXNoICE9PSBaX0ZJTklTSCkpKSB7XG4gICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCwgX291dCAtIHN0cm0uYXZhaWxfb3V0KSkge1xuICAgICAgc3RhdGUubW9kZSA9IE1FTTtcbiAgICAgIHJldHVybiBaX01FTV9FUlJPUjtcbiAgICB9XG4gIH1cbiAgX2luIC09IHN0cm0uYXZhaWxfaW47XG4gIF9vdXQgLT0gc3RybS5hdmFpbF9vdXQ7XG4gIHN0cm0udG90YWxfaW4gKz0gX2luO1xuICBzdHJtLnRvdGFsX291dCArPSBfb3V0O1xuICBzdGF0ZS50b3RhbCArPSBfb3V0O1xuICBpZiAoc3RhdGUud3JhcCAmJiBfb3V0KSB7XG4gICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gLypVUERBVEUoc3RhdGUuY2hlY2ssIHN0cm0ubmV4dF9vdXQgLSBfb3V0LCBfb3V0KTsqL1xuICAgICAgKHN0YXRlLmZsYWdzID8gY3JjMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkpO1xuICB9XG4gIHN0cm0uZGF0YV90eXBlID0gc3RhdGUuYml0cyArIChzdGF0ZS5sYXN0ID8gNjQgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlID09PSBUWVBFID8gMTI4IDogMCkgK1xuICAgICAgICAgICAgICAgICAgICAoc3RhdGUubW9kZSA9PT0gTEVOXyB8fCBzdGF0ZS5tb2RlID09PSBDT1BZXyA/IDI1NiA6IDApO1xuICBpZiAoKChfaW4gPT09IDAgJiYgX291dCA9PT0gMCkgfHwgZmx1c2ggPT09IFpfRklOSVNIKSAmJiByZXQgPT09IFpfT0spIHtcbiAgICByZXQgPSBaX0JVRl9FUlJPUjtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlRW5kKHN0cm0pIHtcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgLyp8fCBzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTAqLykge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIGlmIChzdGF0ZS53aW5kb3cpIHtcbiAgICBzdGF0ZS53aW5kb3cgPSBudWxsO1xuICB9XG4gIHN0cm0uc3RhdGUgPSBudWxsO1xuICByZXR1cm4gWl9PSztcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZUdldEhlYWRlcihzdHJtLCBoZWFkKSB7XG4gIHZhciBzdGF0ZTtcblxuICAvKiBjaGVjayBzdGF0ZSAqL1xuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgaWYgKChzdGF0ZS53cmFwICYgMikgPT09IDApIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG5cbiAgLyogc2F2ZSBoZWFkZXIgc3RydWN0dXJlICovXG4gIHN0YXRlLmhlYWQgPSBoZWFkO1xuICBoZWFkLmRvbmUgPSBmYWxzZTtcbiAgcmV0dXJuIFpfT0s7XG59XG5cblxuZXhwb3J0cy5pbmZsYXRlUmVzZXQgPSBpbmZsYXRlUmVzZXQ7XG5leHBvcnRzLmluZmxhdGVSZXNldDIgPSBpbmZsYXRlUmVzZXQyO1xuZXhwb3J0cy5pbmZsYXRlUmVzZXRLZWVwID0gaW5mbGF0ZVJlc2V0S2VlcDtcbmV4cG9ydHMuaW5mbGF0ZUluaXQgPSBpbmZsYXRlSW5pdDtcbmV4cG9ydHMuaW5mbGF0ZUluaXQyID0gaW5mbGF0ZUluaXQyO1xuZXhwb3J0cy5pbmZsYXRlID0gaW5mbGF0ZTtcbmV4cG9ydHMuaW5mbGF0ZUVuZCA9IGluZmxhdGVFbmQ7XG5leHBvcnRzLmluZmxhdGVHZXRIZWFkZXIgPSBpbmZsYXRlR2V0SGVhZGVyO1xuZXhwb3J0cy5pbmZsYXRlSW5mbyA9ICdwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpJztcblxuLyogTm90IGltcGxlbWVudGVkXG5leHBvcnRzLmluZmxhdGVDb3B5ID0gaW5mbGF0ZUNvcHk7XG5leHBvcnRzLmluZmxhdGVHZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZUdldERpY3Rpb25hcnk7XG5leHBvcnRzLmluZmxhdGVNYXJrID0gaW5mbGF0ZU1hcms7XG5leHBvcnRzLmluZmxhdGVQcmltZSA9IGluZmxhdGVQcmltZTtcbmV4cG9ydHMuaW5mbGF0ZVNldERpY3Rpb25hcnkgPSBpbmZsYXRlU2V0RGljdGlvbmFyeTtcbmV4cG9ydHMuaW5mbGF0ZVN5bmMgPSBpbmZsYXRlU3luYztcbmV4cG9ydHMuaW5mbGF0ZVN5bmNQb2ludCA9IGluZmxhdGVTeW5jUG9pbnQ7XG5leHBvcnRzLmluZmxhdGVVbmRlcm1pbmUgPSBpbmZsYXRlVW5kZXJtaW5lO1xuKi9cbn0se1wiLi4vdXRpbHMvY29tbW9uXCI6MjcsXCIuL2FkbGVyMzJcIjoyOSxcIi4vY3JjMzJcIjozMSxcIi4vaW5mZmFzdFwiOjM0LFwiLi9pbmZ0cmVlc1wiOjM2fV0sMzY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB1dGlscyA9IF9kZXJlcV8oJy4uL3V0aWxzL2NvbW1vbicpO1xuXG52YXIgTUFYQklUUyA9IDE1O1xudmFyIEVOT1VHSF9MRU5TID0gODUyO1xudmFyIEVOT1VHSF9ESVNUUyA9IDU5Mjtcbi8vdmFyIEVOT1VHSCA9IChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpO1xuXG52YXIgQ09ERVMgPSAwO1xudmFyIExFTlMgPSAxO1xudmFyIERJU1RTID0gMjtcblxudmFyIGxiYXNlID0gWyAvKiBMZW5ndGggY29kZXMgMjU3Li4yODUgYmFzZSAqL1xuICAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMywgMjcsIDMxLFxuICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMFxuXTtcblxudmFyIGxleHQgPSBbIC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqL1xuICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCxcbiAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OFxuXTtcblxudmFyIGRiYXNlID0gWyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovXG4gIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MyxcbiAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LFxuICA4MTkzLCAxMjI4OSwgMTYzODUsIDI0NTc3LCAwLCAwXG5dO1xuXG52YXIgZGV4dCA9IFsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgZXh0cmEgKi9cbiAgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTgsIDE4LCAxOSwgMTksIDIwLCAyMCwgMjEsIDIxLCAyMiwgMjIsXG4gIDIzLCAyMywgMjQsIDI0LCAyNSwgMjUsIDI2LCAyNiwgMjcsIDI3LFxuICAyOCwgMjgsIDI5LCAyOSwgNjQsIDY0XG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfdGFibGUodHlwZSwgbGVucywgbGVuc19pbmRleCwgY29kZXMsIHRhYmxlLCB0YWJsZV9pbmRleCwgd29yaywgb3B0cylcbntcbiAgdmFyIGJpdHMgPSBvcHRzLmJpdHM7XG4gICAgICAvL2hlcmUgPSBvcHRzLmhlcmU7IC8qIHRhYmxlIGVudHJ5IGZvciBkdXBsaWNhdGlvbiAqL1xuXG4gIHZhciBsZW4gPSAwOyAgICAgICAgICAgICAgIC8qIGEgY29kZSdzIGxlbmd0aCBpbiBiaXRzICovXG4gIHZhciBzeW0gPSAwOyAgICAgICAgICAgICAgIC8qIGluZGV4IG9mIGNvZGUgc3ltYm9scyAqL1xuICB2YXIgbWluID0gMCwgbWF4ID0gMDsgICAgICAgICAgLyogbWluaW11bSBhbmQgbWF4aW11bSBjb2RlIGxlbmd0aHMgKi9cbiAgdmFyIHJvb3QgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIHJvb3QgdGFibGUgKi9cbiAgdmFyIGN1cnIgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIGN1cnJlbnQgdGFibGUgKi9cbiAgdmFyIGRyb3AgPSAwOyAgICAgICAgICAgICAgLyogY29kZSBiaXRzIHRvIGRyb3AgZm9yIHN1Yi10YWJsZSAqL1xuICB2YXIgbGVmdCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBwcmVmaXggY29kZXMgYXZhaWxhYmxlICovXG4gIHZhciB1c2VkID0gMDsgICAgICAgICAgICAgIC8qIGNvZGUgZW50cmllcyBpbiB0YWJsZSB1c2VkICovXG4gIHZhciBodWZmID0gMDsgICAgICAgICAgICAgIC8qIEh1ZmZtYW4gY29kZSAqL1xuICB2YXIgaW5jcjsgICAgICAgICAgICAgIC8qIGZvciBpbmNyZW1lbnRpbmcgY29kZSwgaW5kZXggKi9cbiAgdmFyIGZpbGw7ICAgICAgICAgICAgICAvKiBpbmRleCBmb3IgcmVwbGljYXRpbmcgZW50cmllcyAqL1xuICB2YXIgbG93OyAgICAgICAgICAgICAgIC8qIGxvdyBiaXRzIGZvciBjdXJyZW50IHJvb3QgZW50cnkgKi9cbiAgdmFyIG1hc2s7ICAgICAgICAgICAgICAvKiBtYXNrIGZvciBsb3cgcm9vdCBiaXRzICovXG4gIHZhciBuZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiB0YWJsZSAqL1xuICB2YXIgYmFzZSA9IG51bGw7ICAgICAvKiBiYXNlIHZhbHVlIHRhYmxlIHRvIHVzZSAqL1xuICB2YXIgYmFzZV9pbmRleCA9IDA7XG4vLyAgdmFyIHNob2V4dHJhOyAgICAvKiBleHRyYSBiaXRzIHRhYmxlIHRvIHVzZSAqL1xuICB2YXIgZW5kOyAgICAgICAgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPiBlbmQgKi9cbiAgdmFyIGNvdW50ID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMrMSk7IC8vW01BWEJJVFMrMV07ICAgIC8qIG51bWJlciBvZiBjb2RlcyBvZiBlYWNoIGxlbmd0aCAqL1xuICB2YXIgb2ZmcyA9IG5ldyB1dGlscy5CdWYxNihNQVhCSVRTKzEpOyAvL1tNQVhCSVRTKzFdOyAgICAgLyogb2Zmc2V0cyBpbiB0YWJsZSBmb3IgZWFjaCBsZW5ndGggKi9cbiAgdmFyIGV4dHJhID0gbnVsbDtcbiAgdmFyIGV4dHJhX2luZGV4ID0gMDtcblxuICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDtcblxuICAvKlxuICAgUHJvY2VzcyBhIHNldCBvZiBjb2RlIGxlbmd0aHMgdG8gY3JlYXRlIGEgY2Fub25pY2FsIEh1ZmZtYW4gY29kZS4gIFRoZVxuICAgY29kZSBsZW5ndGhzIGFyZSBsZW5zWzAuLmNvZGVzLTFdLiAgRWFjaCBsZW5ndGggY29ycmVzcG9uZHMgdG8gdGhlXG4gICBzeW1ib2xzIDAuLmNvZGVzLTEuICBUaGUgSHVmZm1hbiBjb2RlIGlzIGdlbmVyYXRlZCBieSBmaXJzdCBzb3J0aW5nIHRoZVxuICAgc3ltYm9scyBieSBsZW5ndGggZnJvbSBzaG9ydCB0byBsb25nLCBhbmQgcmV0YWluaW5nIHRoZSBzeW1ib2wgb3JkZXJcbiAgIGZvciBjb2RlcyB3aXRoIGVxdWFsIGxlbmd0aHMuICBUaGVuIHRoZSBjb2RlIHN0YXJ0cyB3aXRoIGFsbCB6ZXJvIGJpdHNcbiAgIGZvciB0aGUgZmlyc3QgY29kZSBvZiB0aGUgc2hvcnRlc3QgbGVuZ3RoLCBhbmQgdGhlIGNvZGVzIGFyZSBpbnRlZ2VyXG4gICBpbmNyZW1lbnRzIGZvciB0aGUgc2FtZSBsZW5ndGgsIGFuZCB6ZXJvcyBhcmUgYXBwZW5kZWQgYXMgdGhlIGxlbmd0aFxuICAgaW5jcmVhc2VzLiAgRm9yIHRoZSBkZWZsYXRlIGZvcm1hdCwgdGhlc2UgYml0cyBhcmUgc3RvcmVkIGJhY2t3YXJkc1xuICAgZnJvbSB0aGVpciBtb3JlIG5hdHVyYWwgaW50ZWdlciBpbmNyZW1lbnQgb3JkZXJpbmcsIGFuZCBzbyB3aGVuIHRoZVxuICAgZGVjb2RpbmcgdGFibGVzIGFyZSBidWlsdCBpbiB0aGUgbGFyZ2UgbG9vcCBiZWxvdywgdGhlIGludGVnZXIgY29kZXNcbiAgIGFyZSBpbmNyZW1lbnRlZCBiYWNrd2FyZHMuXG5cbiAgIFRoaXMgcm91dGluZSBhc3N1bWVzLCBidXQgZG9lcyBub3QgY2hlY2ssIHRoYXQgYWxsIG9mIHRoZSBlbnRyaWVzIGluXG4gICBsZW5zW10gYXJlIGluIHRoZSByYW5nZSAwLi5NQVhCSVRTLiAgVGhlIGNhbGxlciBtdXN0IGFzc3VyZSB0aGlzLlxuICAgMS4uTUFYQklUUyBpcyBpbnRlcnByZXRlZCBhcyB0aGF0IGNvZGUgbGVuZ3RoLiAgemVybyBtZWFucyB0aGF0IHRoYXRcbiAgIHN5bWJvbCBkb2VzIG5vdCBvY2N1ciBpbiB0aGlzIGNvZGUuXG5cbiAgIFRoZSBjb2RlcyBhcmUgc29ydGVkIGJ5IGNvbXB1dGluZyBhIGNvdW50IG9mIGNvZGVzIGZvciBlYWNoIGxlbmd0aCxcbiAgIGNyZWF0aW5nIGZyb20gdGhhdCBhIHRhYmxlIG9mIHN0YXJ0aW5nIGluZGljZXMgZm9yIGVhY2ggbGVuZ3RoIGluIHRoZVxuICAgc29ydGVkIHRhYmxlLCBhbmQgdGhlbiBlbnRlcmluZyB0aGUgc3ltYm9scyBpbiBvcmRlciBpbiB0aGUgc29ydGVkXG4gICB0YWJsZS4gIFRoZSBzb3J0ZWQgdGFibGUgaXMgd29ya1tdLCB3aXRoIHRoYXQgc3BhY2UgYmVpbmcgcHJvdmlkZWQgYnlcbiAgIHRoZSBjYWxsZXIuXG5cbiAgIFRoZSBsZW5ndGggY291bnRzIGFyZSB1c2VkIGZvciBvdGhlciBwdXJwb3NlcyBhcyB3ZWxsLCBpLmUuIGZpbmRpbmdcbiAgIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGxlbmd0aCBjb2RlcywgZGV0ZXJtaW5pbmcgaWYgdGhlcmUgYXJlIGFueVxuICAgY29kZXMgYXQgYWxsLCBjaGVja2luZyBmb3IgYSB2YWxpZCBzZXQgb2YgbGVuZ3RocywgYW5kIGxvb2tpbmcgYWhlYWRcbiAgIGF0IGxlbmd0aCBjb3VudHMgdG8gZGV0ZXJtaW5lIHN1Yi10YWJsZSBzaXplcyB3aGVuIGJ1aWxkaW5nIHRoZVxuICAgZGVjb2RpbmcgdGFibGVzLlxuICAgKi9cblxuICAvKiBhY2N1bXVsYXRlIGxlbmd0aHMgZm9yIGNvZGVzIChhc3N1bWVzIGxlbnNbXSBhbGwgaW4gMC4uTUFYQklUUykgKi9cbiAgZm9yIChsZW4gPSAwOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHtcbiAgICBjb3VudFtsZW5dID0gMDtcbiAgfVxuICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykge1xuICAgIGNvdW50W2xlbnNbbGVuc19pbmRleCArIHN5bV1dKys7XG4gIH1cblxuICAvKiBib3VuZCBjb2RlIGxlbmd0aHMsIGZvcmNlIHJvb3QgdG8gYmUgd2l0aGluIGNvZGUgbGVuZ3RocyAqL1xuICByb290ID0gYml0cztcbiAgZm9yIChtYXggPSBNQVhCSVRTOyBtYXggPj0gMTsgbWF4LS0pIHtcbiAgICBpZiAoY291bnRbbWF4XSAhPT0gMCkgeyBicmVhazsgfVxuICB9XG4gIGlmIChyb290ID4gbWF4KSB7XG4gICAgcm9vdCA9IG1heDtcbiAgfVxuICBpZiAobWF4ID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogbm8gc3ltYm9scyB0byBjb2RlIGF0IGFsbCAqL1xuICAgIC8vdGFibGUub3Bbb3B0cy50YWJsZV9pbmRleF0gPSA2NDsgIC8vaGVyZS5vcCA9ICh2YXIgY2hhcik2NDsgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqL1xuICAgIC8vdGFibGUuYml0c1tvcHRzLnRhYmxlX2luZGV4XSA9IDE7ICAgLy9oZXJlLmJpdHMgPSAodmFyIGNoYXIpMTtcbiAgICAvL3RhYmxlLnZhbFtvcHRzLnRhYmxlX2luZGV4KytdID0gMDsgICAvL2hlcmUudmFsID0gKHZhciBzaG9ydCkwO1xuICAgIHRhYmxlW3RhYmxlX2luZGV4KytdID0gKDEgPDwgMjQpIHwgKDY0IDw8IDE2KSB8IDA7XG5cblxuICAgIC8vdGFibGUub3Bbb3B0cy50YWJsZV9pbmRleF0gPSA2NDtcbiAgICAvL3RhYmxlLmJpdHNbb3B0cy50YWJsZV9pbmRleF0gPSAxO1xuICAgIC8vdGFibGUudmFsW29wdHMudGFibGVfaW5kZXgrK10gPSAwO1xuICAgIHRhYmxlW3RhYmxlX2luZGV4KytdID0gKDEgPDwgMjQpIHwgKDY0IDw8IDE2KSB8IDA7XG5cbiAgICBvcHRzLmJpdHMgPSAxO1xuICAgIHJldHVybiAwOyAgICAgLyogbm8gc3ltYm9scywgYnV0IHdhaXQgZm9yIGRlY29kaW5nIHRvIHJlcG9ydCBlcnJvciAqL1xuICB9XG4gIGZvciAobWluID0gMTsgbWluIDwgbWF4OyBtaW4rKykge1xuICAgIGlmIChjb3VudFttaW5dICE9PSAwKSB7IGJyZWFrOyB9XG4gIH1cbiAgaWYgKHJvb3QgPCBtaW4pIHtcbiAgICByb290ID0gbWluO1xuICB9XG5cbiAgLyogY2hlY2sgZm9yIGFuIG92ZXItc3Vic2NyaWJlZCBvciBpbmNvbXBsZXRlIHNldCBvZiBsZW5ndGhzICovXG4gIGxlZnQgPSAxO1xuICBmb3IgKGxlbiA9IDE7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykge1xuICAgIGxlZnQgPDw9IDE7XG4gICAgbGVmdCAtPSBjb3VudFtsZW5dO1xuICAgIGlmIChsZWZ0IDwgMCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gICAgICAgIC8qIG92ZXItc3Vic2NyaWJlZCAqL1xuICB9XG4gIGlmIChsZWZ0ID4gMCAmJiAodHlwZSA9PT0gQ09ERVMgfHwgbWF4ICE9PSAxKSkge1xuICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgLyogaW5jb21wbGV0ZSBzZXQgKi9cbiAgfVxuXG4gIC8qIGdlbmVyYXRlIG9mZnNldHMgaW50byBzeW1ib2wgdGFibGUgZm9yIGVhY2ggbGVuZ3RoIGZvciBzb3J0aW5nICovXG4gIG9mZnNbMV0gPSAwO1xuICBmb3IgKGxlbiA9IDE7IGxlbiA8IE1BWEJJVFM7IGxlbisrKSB7XG4gICAgb2Zmc1tsZW4gKyAxXSA9IG9mZnNbbGVuXSArIGNvdW50W2xlbl07XG4gIH1cblxuICAvKiBzb3J0IHN5bWJvbHMgYnkgbGVuZ3RoLCBieSBzeW1ib2wgb3JkZXIgd2l0aGluIGVhY2ggbGVuZ3RoICovXG4gIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7XG4gICAgaWYgKGxlbnNbbGVuc19pbmRleCArIHN5bV0gIT09IDApIHtcbiAgICAgIHdvcmtbb2Zmc1tsZW5zW2xlbnNfaW5kZXggKyBzeW1dXSsrXSA9IHN5bTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgQ3JlYXRlIGFuZCBmaWxsIGluIGRlY29kaW5nIHRhYmxlcy4gIEluIHRoaXMgbG9vcCwgdGhlIHRhYmxlIGJlaW5nXG4gICBmaWxsZWQgaXMgYXQgbmV4dCBhbmQgaGFzIGN1cnIgaW5kZXggYml0cy4gIFRoZSBjb2RlIGJlaW5nIHVzZWQgaXMgaHVmZlxuICAgd2l0aCBsZW5ndGggbGVuLiAgVGhhdCBjb2RlIGlzIGNvbnZlcnRlZCB0byBhbiBpbmRleCBieSBkcm9wcGluZyBkcm9wXG4gICBiaXRzIG9mZiBvZiB0aGUgYm90dG9tLiAgRm9yIGNvZGVzIHdoZXJlIGxlbiBpcyBsZXNzIHRoYW4gZHJvcCArIGN1cnIsXG4gICB0aG9zZSB0b3AgZHJvcCArIGN1cnIgLSBsZW4gYml0cyBhcmUgaW5jcmVtZW50ZWQgdGhyb3VnaCBhbGwgdmFsdWVzIHRvXG4gICBmaWxsIHRoZSB0YWJsZSB3aXRoIHJlcGxpY2F0ZWQgZW50cmllcy5cblxuICAgcm9vdCBpcyB0aGUgbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIHRoZSByb290IHRhYmxlLiAgV2hlbiBsZW4gZXhjZWVkc1xuICAgcm9vdCwgc3ViLXRhYmxlcyBhcmUgY3JlYXRlZCBwb2ludGVkIHRvIGJ5IHRoZSByb290IGVudHJ5IHdpdGggYW4gaW5kZXhcbiAgIG9mIHRoZSBsb3cgcm9vdCBiaXRzIG9mIGh1ZmYuICBUaGlzIGlzIHNhdmVkIGluIGxvdyB0byBjaGVjayBmb3Igd2hlbiBhXG4gICBuZXcgc3ViLXRhYmxlIHNob3VsZCBiZSBzdGFydGVkLiAgZHJvcCBpcyB6ZXJvIHdoZW4gdGhlIHJvb3QgdGFibGUgaXNcbiAgIGJlaW5nIGZpbGxlZCwgYW5kIGRyb3AgaXMgcm9vdCB3aGVuIHN1Yi10YWJsZXMgYXJlIGJlaW5nIGZpbGxlZC5cblxuICAgV2hlbiBhIG5ldyBzdWItdGFibGUgaXMgbmVlZGVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9vayBhaGVhZCBpbiB0aGVcbiAgIGNvZGUgbGVuZ3RocyB0byBkZXRlcm1pbmUgd2hhdCBzaXplIHN1Yi10YWJsZSBpcyBuZWVkZWQuICBUaGUgbGVuZ3RoXG4gICBjb3VudHMgYXJlIHVzZWQgZm9yIHRoaXMsIGFuZCBzbyBjb3VudFtdIGlzIGRlY3JlbWVudGVkIGFzIGNvZGVzIGFyZVxuICAgZW50ZXJlZCBpbiB0aGUgdGFibGVzLlxuXG4gICB1c2VkIGtlZXBzIHRyYWNrIG9mIGhvdyBtYW55IHRhYmxlIGVudHJpZXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZVxuICAgcHJvdmlkZWQgKnRhYmxlIHNwYWNlLiAgSXQgaXMgY2hlY2tlZCBmb3IgTEVOUyBhbmQgRElTVCB0YWJsZXMgYWdhaW5zdFxuICAgdGhlIGNvbnN0YW50cyBFTk9VR0hfTEVOUyBhbmQgRU5PVUdIX0RJU1RTIHRvIGd1YXJkIGFnYWluc3QgY2hhbmdlcyBpblxuICAgdGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplIGNvbnN0YW50cy4gIFNlZSB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaFxuICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbiAgIHN5bSBpbmNyZW1lbnRzIHRocm91Z2ggYWxsIHN5bWJvbHMsIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzIHdoZW5cbiAgIGFsbCBjb2RlcyBvZiBsZW5ndGggbWF4LCBpLmUuIGFsbCBjb2RlcywgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gIFRoaXNcbiAgIHJvdXRpbmUgcGVybWl0cyBpbmNvbXBsZXRlIGNvZGVzLCBzbyBhbm90aGVyIGxvb3AgYWZ0ZXIgdGhpcyBvbmUgZmlsbHNcbiAgIGluIHRoZSByZXN0IG9mIHRoZSBkZWNvZGluZyB0YWJsZXMgd2l0aCBpbnZhbGlkIGNvZGUgbWFya2Vycy5cbiAgICovXG5cbiAgLyogc2V0IHVwIGZvciBjb2RlIHR5cGUgKi9cbiAgLy8gcG9vciBtYW4gb3B0aW1pemF0aW9uIC0gdXNlIGlmLWVsc2UgaW5zdGVhZCBvZiBzd2l0Y2gsXG4gIC8vIHRvIGF2b2lkIGRlb3B0cyBpbiBvbGQgdjhcbiAgaWYgKHR5cGUgPT09IENPREVTKSB7XG4gICAgICBiYXNlID0gZXh0cmEgPSB3b3JrOyAgICAvKiBkdW1teSB2YWx1ZS0tbm90IHVzZWQgKi9cbiAgICAgIGVuZCA9IDE5O1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IExFTlMpIHtcbiAgICAgIGJhc2UgPSBsYmFzZTtcbiAgICAgIGJhc2VfaW5kZXggLT0gMjU3O1xuICAgICAgZXh0cmEgPSBsZXh0O1xuICAgICAgZXh0cmFfaW5kZXggLT0gMjU3O1xuICAgICAgZW5kID0gMjU2O1xuICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogRElTVFMgKi9cbiAgICAgIGJhc2UgPSBkYmFzZTtcbiAgICAgIGV4dHJhID0gZGV4dDtcbiAgICAgIGVuZCA9IC0xO1xuICB9XG5cbiAgLyogaW5pdGlhbGl6ZSBvcHRzIGZvciBsb29wICovXG4gIGh1ZmYgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlICovXG4gIHN5bSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIHN5bWJvbCAqL1xuICBsZW4gPSBtaW47ICAgICAgICAgICAgICAgICAgLyogc3RhcnRpbmcgY29kZSBsZW5ndGggKi9cbiAgbmV4dCA9IHRhYmxlX2luZGV4OyAgICAgICAgICAgICAgLyogY3VycmVudCB0YWJsZSB0byBmaWxsIGluICovXG4gIGN1cnIgPSByb290OyAgICAgICAgICAgICAgICAvKiBjdXJyZW50IHRhYmxlIGluZGV4IGJpdHMgKi9cbiAgZHJvcCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgYml0cyB0byBkcm9wIGZyb20gY29kZSBmb3IgaW5kZXggKi9cbiAgbG93ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIHRyaWdnZXIgbmV3IHN1Yi10YWJsZSB3aGVuIGxlbiA+IHJvb3QgKi9cbiAgdXNlZCA9IDEgPDwgcm9vdDsgICAgICAgICAgLyogdXNlIHJvb3QgdGFibGUgZW50cmllcyAqL1xuICBtYXNrID0gdXNlZCAtIDE7ICAgICAgICAgICAgLyogbWFzayBmb3IgY29tcGFyaW5nIGxvdyAqL1xuXG4gIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBzcGFjZSAqL1xuICBpZiAoKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fFxuICAgICh0eXBlID09PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdmFyIGk9MDtcbiAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5kIG1ha2UgdGFibGUgZW50cmllcyAqL1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIC8qIGNyZWF0ZSB0YWJsZSBlbnRyeSAqL1xuICAgIGhlcmVfYml0cyA9IGxlbiAtIGRyb3A7XG4gICAgaWYgKHdvcmtbc3ltXSA8IGVuZCkge1xuICAgICAgaGVyZV9vcCA9IDA7XG4gICAgICBoZXJlX3ZhbCA9IHdvcmtbc3ltXTtcbiAgICB9XG4gICAgZWxzZSBpZiAod29ya1tzeW1dID4gZW5kKSB7XG4gICAgICBoZXJlX29wID0gZXh0cmFbZXh0cmFfaW5kZXggKyB3b3JrW3N5bV1dO1xuICAgICAgaGVyZV92YWwgPSBiYXNlW2Jhc2VfaW5kZXggKyB3b3JrW3N5bV1dO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGhlcmVfb3AgPSAzMiArIDY0OyAgICAgICAgIC8qIGVuZCBvZiBibG9jayAqL1xuICAgICAgaGVyZV92YWwgPSAwO1xuICAgIH1cblxuICAgIC8qIHJlcGxpY2F0ZSBmb3IgdGhvc2UgaW5kaWNlcyB3aXRoIGxvdyBsZW4gYml0cyBlcXVhbCB0byBodWZmICovXG4gICAgaW5jciA9IDEgPDwgKGxlbiAtIGRyb3ApO1xuICAgIGZpbGwgPSAxIDw8IGN1cnI7XG4gICAgbWluID0gZmlsbDsgICAgICAgICAgICAgICAgIC8qIHNhdmUgb2Zmc2V0IHRvIG5leHQgdGFibGUgKi9cbiAgICBkbyB7XG4gICAgICBmaWxsIC09IGluY3I7XG4gICAgICB0YWJsZVtuZXh0ICsgKGh1ZmYgPj4gZHJvcCkgKyBmaWxsXSA9IChoZXJlX2JpdHMgPDwgMjQpIHwgKGhlcmVfb3AgPDwgMTYpIHwgaGVyZV92YWwgfDA7XG4gICAgfSB3aGlsZSAoZmlsbCAhPT0gMCk7XG5cbiAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqL1xuICAgIGluY3IgPSAxIDw8IChsZW4gLSAxKTtcbiAgICB3aGlsZSAoaHVmZiAmIGluY3IpIHtcbiAgICAgIGluY3IgPj49IDE7XG4gICAgfVxuICAgIGlmIChpbmNyICE9PSAwKSB7XG4gICAgICBodWZmICY9IGluY3IgLSAxO1xuICAgICAgaHVmZiArPSBpbmNyO1xuICAgIH0gZWxzZSB7XG4gICAgICBodWZmID0gMDtcbiAgICB9XG5cbiAgICAvKiBnbyB0byBuZXh0IHN5bWJvbCwgdXBkYXRlIGNvdW50LCBsZW4gKi9cbiAgICBzeW0rKztcbiAgICBpZiAoLS1jb3VudFtsZW5dID09PSAwKSB7XG4gICAgICBpZiAobGVuID09PSBtYXgpIHsgYnJlYWs7IH1cbiAgICAgIGxlbiA9IGxlbnNbbGVuc19pbmRleCArIHdvcmtbc3ltXV07XG4gICAgfVxuXG4gICAgLyogY3JlYXRlIG5ldyBzdWItdGFibGUgaWYgbmVlZGVkICovXG4gICAgaWYgKGxlbiA+IHJvb3QgJiYgKGh1ZmYgJiBtYXNrKSAhPT0gbG93KSB7XG4gICAgICAvKiBpZiBmaXJzdCB0aW1lLCB0cmFuc2l0aW9uIHRvIHN1Yi10YWJsZXMgKi9cbiAgICAgIGlmIChkcm9wID09PSAwKSB7XG4gICAgICAgIGRyb3AgPSByb290O1xuICAgICAgfVxuXG4gICAgICAvKiBpbmNyZW1lbnQgcGFzdCBsYXN0IHRhYmxlICovXG4gICAgICBuZXh0ICs9IG1pbjsgICAgICAgICAgICAvKiBoZXJlIG1pbiBpcyAxIDw8IGN1cnIgKi9cblxuICAgICAgLyogZGV0ZXJtaW5lIGxlbmd0aCBvZiBuZXh0IHRhYmxlICovXG4gICAgICBjdXJyID0gbGVuIC0gZHJvcDtcbiAgICAgIGxlZnQgPSAxIDw8IGN1cnI7XG4gICAgICB3aGlsZSAoY3VyciArIGRyb3AgPCBtYXgpIHtcbiAgICAgICAgbGVmdCAtPSBjb3VudFtjdXJyICsgZHJvcF07XG4gICAgICAgIGlmIChsZWZ0IDw9IDApIHsgYnJlYWs7IH1cbiAgICAgICAgY3VycisrO1xuICAgICAgICBsZWZ0IDw8PSAxO1xuICAgICAgfVxuXG4gICAgICAvKiBjaGVjayBmb3IgZW5vdWdoIHNwYWNlICovXG4gICAgICB1c2VkICs9IDEgPDwgY3VycjtcbiAgICAgIGlmICgodHlwZSA9PT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8XG4gICAgICAgICh0eXBlID09PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgLyogcG9pbnQgZW50cnkgaW4gcm9vdCB0YWJsZSB0byBzdWItdGFibGUgKi9cbiAgICAgIGxvdyA9IGh1ZmYgJiBtYXNrO1xuICAgICAgLyp0YWJsZS5vcFtsb3ddID0gY3VycjtcbiAgICAgIHRhYmxlLmJpdHNbbG93XSA9IHJvb3Q7XG4gICAgICB0YWJsZS52YWxbbG93XSA9IG5leHQgLSBvcHRzLnRhYmxlX2luZGV4OyovXG4gICAgICB0YWJsZVtsb3ddID0gKHJvb3QgPDwgMjQpIHwgKGN1cnIgPDwgMTYpIHwgKG5leHQgLSB0YWJsZV9pbmRleCkgfDA7XG4gICAgfVxuICB9XG5cbiAgLyogZmlsbCBpbiByZW1haW5pbmcgdGFibGUgZW50cnkgaWYgY29kZSBpcyBpbmNvbXBsZXRlIChndWFyYW50ZWVkIHRvIGhhdmVcbiAgIGF0IG1vc3Qgb25lIHJlbWFpbmluZyBlbnRyeSwgc2luY2UgaWYgdGhlIGNvZGUgaXMgaW5jb21wbGV0ZSwgdGhlXG4gICBtYXhpbXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovXG4gIGlmIChodWZmICE9PSAwKSB7XG4gICAgLy90YWJsZS5vcFtuZXh0ICsgaHVmZl0gPSA2NDsgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovXG4gICAgLy90YWJsZS5iaXRzW25leHQgKyBodWZmXSA9IGxlbiAtIGRyb3A7XG4gICAgLy90YWJsZS52YWxbbmV4dCArIGh1ZmZdID0gMDtcbiAgICB0YWJsZVtuZXh0ICsgaHVmZl0gPSAoKGxlbiAtIGRyb3ApIDw8IDI0KSB8ICg2NCA8PCAxNikgfDA7XG4gIH1cblxuICAvKiBzZXQgcmV0dXJuIHBhcmFtZXRlcnMgKi9cbiAgLy9vcHRzLnRhYmxlX2luZGV4ICs9IHVzZWQ7XG4gIG9wdHMuYml0cyA9IHJvb3Q7XG4gIHJldHVybiAwO1xufTtcblxufSx7XCIuLi91dGlscy9jb21tb25cIjoyN31dLDM3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICcyJzogICAgJ25lZWQgZGljdGlvbmFyeScsICAgICAvKiBaX05FRURfRElDVCAgICAgICAyICAqL1xuICAnMSc6ICAgICdzdHJlYW0gZW5kJywgICAgICAgICAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi9cbiAgJzAnOiAgICAnJywgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovXG4gICctMSc6ICAgJ2ZpbGUgZXJyb3InLCAgICAgICAgICAvKiBaX0VSUk5PICAgICAgICAgKC0xKSAqL1xuICAnLTInOiAgICdzdHJlYW0gZXJyb3InLCAgICAgICAgLyogWl9TVFJFQU1fRVJST1IgICgtMikgKi9cbiAgJy0zJzogICAnZGF0YSBlcnJvcicsICAgICAgICAgIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovXG4gICctNCc6ICAgJ2luc3VmZmljaWVudCBtZW1vcnknLCAvKiBaX01FTV9FUlJPUiAgICAgKC00KSAqL1xuICAnLTUnOiAgICdidWZmZXIgZXJyb3InLCAgICAgICAgLyogWl9CVUZfRVJST1IgICAgICgtNSkgKi9cbiAgJy02JzogICAnaW5jb21wYXRpYmxlIHZlcnNpb24nIC8qIFpfVkVSU0lPTl9FUlJPUiAoLTYpICovXG59O1xufSx7fV0sMzg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB1dGlscyA9IF9kZXJlcV8oJy4uL3V0aWxzL2NvbW1vbicpO1xuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vL3ZhciBaX0ZJTFRFUkVEICAgICAgICAgID0gMTtcbi8vdmFyIFpfSFVGRk1BTl9PTkxZICAgICAgPSAyO1xuLy92YXIgWl9STEUgICAgICAgICAgICAgICA9IDM7XG52YXIgWl9GSVhFRCAgICAgICAgICAgICAgID0gNDtcbi8vdmFyIFpfREVGQVVMVF9TVFJBVEVHWSAgPSAwO1xuXG4vKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovXG52YXIgWl9CSU5BUlkgICAgICAgICAgICAgID0gMDtcbnZhciBaX1RFWFQgICAgICAgICAgICAgICAgPSAxO1xuLy92YXIgWl9BU0NJSSAgICAgICAgICAgICA9IDE7IC8vID0gWl9URVhUXG52YXIgWl9VTktOT1dOICAgICAgICAgICAgID0gMjtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG5mdW5jdGlvbiB6ZXJvKGJ1ZikgeyB2YXIgbGVuID0gYnVmLmxlbmd0aDsgd2hpbGUgKC0tbGVuID49IDApIHsgYnVmW2xlbl0gPSAwOyB9IH1cblxuLy8gRnJvbSB6dXRpbC5oXG5cbnZhciBTVE9SRURfQkxPQ0sgPSAwO1xudmFyIFNUQVRJQ19UUkVFUyA9IDE7XG52YXIgRFlOX1RSRUVTICAgID0gMjtcbi8qIFRoZSB0aHJlZSBraW5kcyBvZiBibG9jayB0eXBlICovXG5cbnZhciBNSU5fTUFUQ0ggICAgPSAzO1xudmFyIE1BWF9NQVRDSCAgICA9IDI1ODtcbi8qIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG1hdGNoIGxlbmd0aHMgKi9cblxuLy8gRnJvbSBkZWZsYXRlLmhcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuXG4gKi9cblxudmFyIExFTkdUSF9DT0RFUyAgPSAyOTtcbi8qIG51bWJlciBvZiBsZW5ndGggY29kZXMsIG5vdCBjb3VudGluZyB0aGUgc3BlY2lhbCBFTkRfQkxPQ0sgY29kZSAqL1xuXG52YXIgTElURVJBTFMgICAgICA9IDI1Njtcbi8qIG51bWJlciBvZiBsaXRlcmFsIGJ5dGVzIDAuLjI1NSAqL1xuXG52YXIgTF9DT0RFUyAgICAgICA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUztcbi8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBjb2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqL1xuXG52YXIgRF9DT0RFUyAgICAgICA9IDMwO1xuLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovXG5cbnZhciBCTF9DT0RFUyAgICAgID0gMTk7XG4vKiBudW1iZXIgb2YgY29kZXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgYml0IGxlbmd0aHMgKi9cblxudmFyIEhFQVBfU0laRSAgICAgPSAyKkxfQ09ERVMgKyAxO1xuLyogbWF4aW11bSBoZWFwIHNpemUgKi9cblxudmFyIE1BWF9CSVRTICAgICAgPSAxNTtcbi8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqL1xuXG52YXIgQnVmX3NpemUgICAgICA9IDE2O1xuLyogc2l6ZSBvZiBiaXQgYnVmZmVyIGluIGJpX2J1ZiAqL1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RhbnRzXG4gKi9cblxudmFyIE1BWF9CTF9CSVRTID0gNztcbi8qIEJpdCBsZW5ndGggY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CTF9CSVRTIGJpdHMgKi9cblxudmFyIEVORF9CTE9DSyAgID0gMjU2O1xuLyogZW5kIG9mIGJsb2NrIGxpdGVyYWwgY29kZSAqL1xuXG52YXIgUkVQXzNfNiAgICAgPSAxNjtcbi8qIHJlcGVhdCBwcmV2aW91cyBiaXQgbGVuZ3RoIDMtNiB0aW1lcyAoMiBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi9cblxudmFyIFJFUFpfM18xMCAgID0gMTc7XG4vKiByZXBlYXQgYSB6ZXJvIGxlbmd0aCAzLTEwIHRpbWVzICAoMyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi9cblxudmFyIFJFUFpfMTFfMTM4ID0gMTg7XG4vKiByZXBlYXQgYSB6ZXJvIGxlbmd0aCAxMS0xMzggdGltZXMgICg3IGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqL1xuXG52YXIgZXh0cmFfbGJpdHMgPSAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggbGVuZ3RoIGNvZGUgKi9cbiAgWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF07XG5cbnZhciBleHRyYV9kYml0cyA9ICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBkaXN0YW5jZSBjb2RlICovXG4gIFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXTtcblxudmFyIGV4dHJhX2JsYml0cyA9ICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGJpdCBsZW5ndGggY29kZSAqL1xuICBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN107XG5cbnZhciBibF9vcmRlciA9XG4gIFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtcbi8qIFRoZSBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RoIGNvZGVzIGFyZSBzZW50IGluIG9yZGVyIG9mIGRlY3JlYXNpbmdcbiAqIHByb2JhYmlsaXR5LCB0byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIGxlbmd0aHMgZm9yIHVudXNlZCBiaXQgbGVuZ3RoIGNvZGVzLlxuICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogTG9jYWwgZGF0YS4gVGhlc2UgYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZS5cbiAqL1xuXG4vLyBXZSBwcmUtZmlsbCBhcnJheXMgd2l0aCAwIHRvIGF2b2lkIHVuaW5pdGlhbGl6ZWQgZ2Fwc1xuXG52YXIgRElTVF9DT0RFX0xFTiA9IDUxMjsgLyogc2VlIGRlZmluaXRpb24gb2YgYXJyYXkgZGlzdF9jb2RlIGJlbG93ICovXG5cbi8vICEhISEgVXNlIGZsYXQgYXJyYXkgaW5zZGVhZCBvZiBzdHJ1Y3R1cmUsIEZyZXEgPSBpKjIsIExlbiA9IGkqMisxXG52YXIgc3RhdGljX2x0cmVlICA9IG5ldyBBcnJheSgoTF9DT0RFUysyKSAqIDIpO1xuemVybyhzdGF0aWNfbHRyZWUpO1xuLyogVGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUuIFNpbmNlIHRoZSBiaXQgbGVuZ3RocyBhcmUgaW1wb3NlZCwgdGhlcmUgaXMgbm9cbiAqIG5lZWQgZm9yIHRoZSBMX0NPREVTIGV4dHJhIGNvZGVzIHVzZWQgZHVyaW5nIGhlYXAgY29uc3RydWN0aW9uLiBIb3dldmVyXG4gKiBUaGUgY29kZXMgMjg2IGFuZCAyODcgYXJlIG5lZWRlZCB0byBidWlsZCBhIGNhbm9uaWNhbCB0cmVlIChzZWUgX3RyX2luaXRcbiAqIGJlbG93KS5cbiAqL1xuXG52YXIgc3RhdGljX2R0cmVlICA9IG5ldyBBcnJheShEX0NPREVTICogMik7XG56ZXJvKHN0YXRpY19kdHJlZSk7XG4vKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUuIChBY3R1YWxseSBhIHRyaXZpYWwgdHJlZSBzaW5jZSBhbGwgY29kZXMgdXNlXG4gKiA1IGJpdHMuKVxuICovXG5cbnZhciBfZGlzdF9jb2RlICAgID0gbmV3IEFycmF5KERJU1RfQ09ERV9MRU4pO1xuemVybyhfZGlzdF9jb2RlKTtcbi8qIERpc3RhbmNlIGNvZGVzLiBUaGUgZmlyc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBkaXN0YW5jZXNcbiAqIDMgLi4gMjU4LCB0aGUgbGFzdCAyNTYgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIHRvcCA4IGJpdHMgb2ZcbiAqIHRoZSAxNSBiaXQgZGlzdGFuY2VzLlxuICovXG5cbnZhciBfbGVuZ3RoX2NvZGUgID0gbmV3IEFycmF5KE1BWF9NQVRDSC1NSU5fTUFUQ0grMSk7XG56ZXJvKF9sZW5ndGhfY29kZSk7XG4vKiBsZW5ndGggY29kZSBmb3IgZWFjaCBub3JtYWxpemVkIG1hdGNoIGxlbmd0aCAoMCA9PSBNSU5fTUFUQ0gpICovXG5cbnZhciBiYXNlX2xlbmd0aCAgID0gbmV3IEFycmF5KExFTkdUSF9DT0RFUyk7XG56ZXJvKGJhc2VfbGVuZ3RoKTtcbi8qIEZpcnN0IG5vcm1hbGl6ZWQgbGVuZ3RoIGZvciBlYWNoIGNvZGUgKDAgPSBNSU5fTUFUQ0gpICovXG5cbnZhciBiYXNlX2Rpc3QgICAgID0gbmV3IEFycmF5KERfQ09ERVMpO1xuemVybyhiYXNlX2Rpc3QpO1xuLyogRmlyc3Qgbm9ybWFsaXplZCBkaXN0YW5jZSBmb3IgZWFjaCBjb2RlICgwID0gZGlzdGFuY2Ugb2YgMSkgKi9cblxuXG52YXIgU3RhdGljVHJlZURlc2MgPSBmdW5jdGlvbiAoc3RhdGljX3RyZWUsIGV4dHJhX2JpdHMsIGV4dHJhX2Jhc2UsIGVsZW1zLCBtYXhfbGVuZ3RoKSB7XG5cbiAgdGhpcy5zdGF0aWNfdHJlZSAgPSBzdGF0aWNfdHJlZTsgIC8qIHN0YXRpYyB0cmVlIG9yIE5VTEwgKi9cbiAgdGhpcy5leHRyYV9iaXRzICAgPSBleHRyYV9iaXRzOyAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggY29kZSBvciBOVUxMICovXG4gIHRoaXMuZXh0cmFfYmFzZSAgID0gZXh0cmFfYmFzZTsgICAvKiBiYXNlIGluZGV4IGZvciBleHRyYV9iaXRzICovXG4gIHRoaXMuZWxlbXMgICAgICAgID0gZWxlbXM7ICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlICovXG4gIHRoaXMubWF4X2xlbmd0aCAgID0gbWF4X2xlbmd0aDsgICAvKiBtYXggYml0IGxlbmd0aCBmb3IgdGhlIGNvZGVzICovXG5cbiAgLy8gc2hvdyBpZiBgc3RhdGljX3RyZWVgIGhhcyBkYXRhIG9yIGR1bW15IC0gbmVlZGVkIGZvciBtb25vbW9ycGhpYyBvYmplY3RzXG4gIHRoaXMuaGFzX3N0cmVlICAgID0gc3RhdGljX3RyZWUgJiYgc3RhdGljX3RyZWUubGVuZ3RoO1xufTtcblxuXG52YXIgc3RhdGljX2xfZGVzYztcbnZhciBzdGF0aWNfZF9kZXNjO1xudmFyIHN0YXRpY19ibF9kZXNjO1xuXG5cbnZhciBUcmVlRGVzYyA9IGZ1bmN0aW9uKGR5bl90cmVlLCBzdGF0X2Rlc2MpIHtcbiAgdGhpcy5keW5fdHJlZSA9IGR5bl90cmVlOyAgICAgLyogdGhlIGR5bmFtaWMgdHJlZSAqL1xuICB0aGlzLm1heF9jb2RlID0gMDsgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi9cbiAgdGhpcy5zdGF0X2Rlc2MgPSBzdGF0X2Rlc2M7ICAgLyogdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHRyZWUgKi9cbn07XG5cblxuXG5mdW5jdGlvbiBkX2NvZGUoZGlzdCkge1xuICByZXR1cm4gZGlzdCA8IDI1NiA/IF9kaXN0X2NvZGVbZGlzdF0gOiBfZGlzdF9jb2RlWzI1NiArIChkaXN0ID4+PiA3KV07XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBPdXRwdXQgYSBzaG9ydCBMU0IgZmlyc3Qgb24gdGhlIHN0cmVhbS5cbiAqIElOIGFzc2VydGlvbjogdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gcGVuZGluZ0J1Zi5cbiAqL1xuZnVuY3Rpb24gcHV0X3Nob3J0IChzLCB3KSB7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodykgJiAweGZmKSk7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodXNoKSh3KSA+PiA4KSk7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKHcpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAodyA+Pj4gOCkgJiAweGZmO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuXG4gKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBsZW5ndGggYml0cy5cbiAqL1xuZnVuY3Rpb24gc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPiAoQnVmX3NpemUgLSBsZW5ndGgpKSB7XG4gICAgcy5iaV9idWYgfD0gKHZhbHVlIDw8IHMuYmlfdmFsaWQpICYgMHhmZmZmO1xuICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7XG4gICAgcy5iaV9idWYgPSB2YWx1ZSA+PiAoQnVmX3NpemUgLSBzLmJpX3ZhbGlkKTtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aCAtIEJ1Zl9zaXplO1xuICB9IGVsc2Uge1xuICAgIHMuYmlfYnVmIHw9ICh2YWx1ZSA8PCBzLmJpX3ZhbGlkKSAmIDB4ZmZmZjtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHNlbmRfY29kZShzLCBjLCB0cmVlKSB7XG4gIHNlbmRfYml0cyhzLCB0cmVlW2MqMl0vKi5Db2RlKi8sIHRyZWVbYyoyICsgMV0vKi5MZW4qLyk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZXZlcnNlIHRoZSBmaXJzdCBsZW4gYml0cyBvZiBhIGNvZGUsIHVzaW5nIHN0cmFpZ2h0Zm9yd2FyZCBjb2RlIChhIGZhc3RlclxuICogbWV0aG9kIHdvdWxkIHVzZSBhIHRhYmxlKVxuICogSU4gYXNzZXJ0aW9uOiAxIDw9IGxlbiA8PSAxNVxuICovXG5mdW5jdGlvbiBiaV9yZXZlcnNlKGNvZGUsIGxlbikge1xuICB2YXIgcmVzID0gMDtcbiAgZG8ge1xuICAgIHJlcyB8PSBjb2RlICYgMTtcbiAgICBjb2RlID4+Pj0gMTtcbiAgICByZXMgPDw9IDE7XG4gIH0gd2hpbGUgKC0tbGVuID4gMCk7XG4gIHJldHVybiByZXMgPj4+IDE7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGbHVzaCB0aGUgYml0IGJ1ZmZlciwga2VlcGluZyBhdCBtb3N0IDcgYml0cyBpbiBpdC5cbiAqL1xuZnVuY3Rpb24gYmlfZmx1c2gocykge1xuICBpZiAocy5iaV92YWxpZCA9PT0gMTYpIHtcbiAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpO1xuICAgIHMuYmlfYnVmID0gMDtcbiAgICBzLmJpX3ZhbGlkID0gMDtcblxuICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPj0gOCkge1xuICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWYgJiAweGZmO1xuICAgIHMuYmlfYnVmID4+PSA4O1xuICAgIHMuYmlfdmFsaWQgLT0gODtcbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29tcHV0ZSB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RocyBmb3IgYSB0cmVlIGFuZCB1cGRhdGUgdGhlIHRvdGFsIGJpdCBsZW5ndGhcbiAqIGZvciB0aGUgY3VycmVudCBibG9jay5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBmcmVxIGFuZCBkYWQgYXJlIHNldCwgaGVhcFtoZWFwX21heF0gYW5kXG4gKiAgICBhYm92ZSBhcmUgdGhlIHRyZWUgbm9kZXMgc29ydGVkIGJ5IGluY3JlYXNpbmcgZnJlcXVlbmN5LlxuICogT1VUIGFzc2VydGlvbnM6IHRoZSBmaWVsZCBsZW4gaXMgc2V0IHRvIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGgsIHRoZVxuICogICAgIGFycmF5IGJsX2NvdW50IGNvbnRhaW5zIHRoZSBmcmVxdWVuY2llcyBmb3IgZWFjaCBiaXQgbGVuZ3RoLlxuICogICAgIFRoZSBsZW5ndGggb3B0X2xlbiBpcyB1cGRhdGVkOyBzdGF0aWNfbGVuIGlzIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpc1xuICogICAgIG5vdCBudWxsLlxuICovXG5mdW5jdGlvbiBnZW5fYml0bGVuKHMsIGRlc2MpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgdHJlZV9kZXNjICpkZXNjOyAgICAvKiB0aGUgdHJlZSBkZXNjcmlwdG9yICovXG57XG4gIHZhciB0cmVlICAgICAgICAgICAgPSBkZXNjLmR5bl90cmVlO1xuICB2YXIgbWF4X2NvZGUgICAgICAgID0gZGVzYy5tYXhfY29kZTtcbiAgdmFyIHN0cmVlICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLnN0YXRpY190cmVlO1xuICB2YXIgaGFzX3N0cmVlICAgICAgID0gZGVzYy5zdGF0X2Rlc2MuaGFzX3N0cmVlO1xuICB2YXIgZXh0cmEgICAgICAgICAgID0gZGVzYy5zdGF0X2Rlc2MuZXh0cmFfYml0cztcbiAgdmFyIGJhc2UgICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2Jhc2U7XG4gIHZhciBtYXhfbGVuZ3RoICAgICAgPSBkZXNjLnN0YXRfZGVzYy5tYXhfbGVuZ3RoO1xuICB2YXIgaDsgICAgICAgICAgICAgIC8qIGhlYXAgaW5kZXggKi9cbiAgdmFyIG4sIG07ICAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgdGhlIHRyZWUgZWxlbWVudHMgKi9cbiAgdmFyIGJpdHM7ICAgICAgICAgICAvKiBiaXQgbGVuZ3RoICovXG4gIHZhciB4Yml0czsgICAgICAgICAgLyogZXh0cmEgYml0cyAqL1xuICB2YXIgZjsgICAgICAgICAgICAgIC8qIGZyZXF1ZW5jeSAqL1xuICB2YXIgb3ZlcmZsb3cgPSAwOyAgIC8qIG51bWJlciBvZiBlbGVtZW50cyB3aXRoIGJpdCBsZW5ndGggdG9vIGxhcmdlICovXG5cbiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7XG4gICAgcy5ibF9jb3VudFtiaXRzXSA9IDA7XG4gIH1cblxuICAvKiBJbiBhIGZpcnN0IHBhc3MsIGNvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgKHdoaWNoIG1heVxuICAgKiBvdmVyZmxvdyBpbiB0aGUgY2FzZSBvZiB0aGUgYml0IGxlbmd0aCB0cmVlKS5cbiAgICovXG4gIHRyZWVbcy5oZWFwW3MuaGVhcF9tYXhdKjIgKyAxXS8qLkxlbiovID0gMDsgLyogcm9vdCBvZiB0aGUgaGVhcCAqL1xuXG4gIGZvciAoaCA9IHMuaGVhcF9tYXgrMTsgaCA8IEhFQVBfU0laRTsgaCsrKSB7XG4gICAgbiA9IHMuaGVhcFtoXTtcbiAgICBiaXRzID0gdHJlZVt0cmVlW24qMiArMV0vKi5EYWQqLyAqIDIgKyAxXS8qLkxlbiovICsgMTtcbiAgICBpZiAoYml0cyA+IG1heF9sZW5ndGgpIHtcbiAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoO1xuICAgICAgb3ZlcmZsb3crKztcbiAgICB9XG4gICAgdHJlZVtuKjIgKyAxXS8qLkxlbiovID0gYml0cztcbiAgICAvKiBXZSBvdmVyd3JpdGUgdHJlZVtuXS5EYWQgd2hpY2ggaXMgbm8gbG9uZ2VyIG5lZWRlZCAqL1xuXG4gICAgaWYgKG4gPiBtYXhfY29kZSkgeyBjb250aW51ZTsgfSAvKiBub3QgYSBsZWFmIG5vZGUgKi9cblxuICAgIHMuYmxfY291bnRbYml0c10rKztcbiAgICB4Yml0cyA9IDA7XG4gICAgaWYgKG4gPj0gYmFzZSkge1xuICAgICAgeGJpdHMgPSBleHRyYVtuLWJhc2VdO1xuICAgIH1cbiAgICBmID0gdHJlZVtuICogMl0vKi5GcmVxKi87XG4gICAgcy5vcHRfbGVuICs9IGYgKiAoYml0cyArIHhiaXRzKTtcbiAgICBpZiAoaGFzX3N0cmVlKSB7XG4gICAgICBzLnN0YXRpY19sZW4gKz0gZiAqIChzdHJlZVtuKjIgKyAxXS8qLkxlbiovICsgeGJpdHMpO1xuICAgIH1cbiAgfVxuICBpZiAob3ZlcmZsb3cgPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgLy8gVHJhY2UoKHN0ZGVycixcIlxcbmJpdCBsZW5ndGggb3ZlcmZsb3dcXG5cIikpO1xuICAvKiBUaGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgb24gb2JqMiBhbmQgcGljIG9mIHRoZSBDYWxnYXJ5IGNvcnB1cyAqL1xuXG4gIC8qIEZpbmQgdGhlIGZpcnN0IGJpdCBsZW5ndGggd2hpY2ggY291bGQgaW5jcmVhc2U6ICovXG4gIGRvIHtcbiAgICBiaXRzID0gbWF4X2xlbmd0aC0xO1xuICAgIHdoaWxlIChzLmJsX2NvdW50W2JpdHNdID09PSAwKSB7IGJpdHMtLTsgfVxuICAgIHMuYmxfY291bnRbYml0c10tLTsgICAgICAvKiBtb3ZlIG9uZSBsZWFmIGRvd24gdGhlIHRyZWUgKi9cbiAgICBzLmJsX2NvdW50W2JpdHMrMV0gKz0gMjsgLyogbW92ZSBvbmUgb3ZlcmZsb3cgaXRlbSBhcyBpdHMgYnJvdGhlciAqL1xuICAgIHMuYmxfY291bnRbbWF4X2xlbmd0aF0tLTtcbiAgICAvKiBUaGUgYnJvdGhlciBvZiB0aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVwIHVwLFxuICAgICAqIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVjdCBibF9jb3VudFttYXhfbGVuZ3RoXVxuICAgICAqL1xuICAgIG92ZXJmbG93IC09IDI7XG4gIH0gd2hpbGUgKG92ZXJmbG93ID4gMCk7XG5cbiAgLyogTm93IHJlY29tcHV0ZSBhbGwgYml0IGxlbmd0aHMsIHNjYW5uaW5nIGluIGluY3JlYXNpbmcgZnJlcXVlbmN5LlxuICAgKiBoIGlzIHN0aWxsIGVxdWFsIHRvIEhFQVBfU0laRS4gKEl0IGlzIHNpbXBsZXIgdG8gcmVjb25zdHJ1Y3QgYWxsXG4gICAqIGxlbmd0aHMgaW5zdGVhZCBvZiBmaXhpbmcgb25seSB0aGUgd3Jvbmcgb25lcy4gVGhpcyBpZGVhIGlzIHRha2VuXG4gICAqIGZyb20gJ2FyJyB3cml0dGVuIGJ5IEhhcnVoaWtvIE9rdW11cmEuKVxuICAgKi9cbiAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPT0gMDsgYml0cy0tKSB7XG4gICAgbiA9IHMuYmxfY291bnRbYml0c107XG4gICAgd2hpbGUgKG4gIT09IDApIHtcbiAgICAgIG0gPSBzLmhlYXBbLS1oXTtcbiAgICAgIGlmIChtID4gbWF4X2NvZGUpIHsgY29udGludWU7IH1cbiAgICAgIGlmICh0cmVlW20qMiArIDFdLyouTGVuKi8gIT09IGJpdHMpIHtcbiAgICAgICAgLy8gVHJhY2UoKHN0ZGVycixcImNvZGUgJWQgYml0cyAlZC0+JWRcXG5cIiwgbSwgdHJlZVttXS5MZW4sIGJpdHMpKTtcbiAgICAgICAgcy5vcHRfbGVuICs9IChiaXRzIC0gdHJlZVttKjIgKyAxXS8qLkxlbiovKSp0cmVlW20qMl0vKi5GcmVxKi87XG4gICAgICAgIHRyZWVbbSoyICsgMV0vKi5MZW4qLyA9IGJpdHM7XG4gICAgICB9XG4gICAgICBuLS07XG4gICAgfVxuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBHZW5lcmF0ZSB0aGUgY29kZXMgZm9yIGEgZ2l2ZW4gdHJlZSBhbmQgYml0IGNvdW50cyAod2hpY2ggbmVlZCBub3QgYmVcbiAqIG9wdGltYWwpLlxuICogSU4gYXNzZXJ0aW9uOiB0aGUgYXJyYXkgYmxfY291bnQgY29udGFpbnMgdGhlIGJpdCBsZW5ndGggc3RhdGlzdGljcyBmb3JcbiAqIHRoZSBnaXZlbiB0cmVlIGFuZCB0aGUgZmllbGQgbGVuIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMuXG4gKiBPVVQgYXNzZXJ0aW9uOiB0aGUgZmllbGQgY29kZSBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzIG9mIG5vblxuICogICAgIHplcm8gY29kZSBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgYmxfY291bnQpXG4vLyAgICBjdF9kYXRhICp0cmVlOyAgICAgICAgICAgICAvKiB0aGUgdHJlZSB0byBkZWNvcmF0ZSAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAgICAgICAgICAgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovXG4vLyAgICB1c2hmICpibF9jb3VudDsgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoICovXG57XG4gIHZhciBuZXh0X2NvZGUgPSBuZXcgQXJyYXkoTUFYX0JJVFMrMSk7IC8qIG5leHQgY29kZSB2YWx1ZSBmb3IgZWFjaCBiaXQgbGVuZ3RoICovXG4gIHZhciBjb2RlID0gMDsgICAgICAgICAgICAgIC8qIHJ1bm5pbmcgY29kZSB2YWx1ZSAqL1xuICB2YXIgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi9cbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBpbmRleCAqL1xuXG4gIC8qIFRoZSBkaXN0cmlidXRpb24gY291bnRzIGFyZSBmaXJzdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHZhbHVlc1xuICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC5cbiAgICovXG4gIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIG5leHRfY29kZVtiaXRzXSA9IGNvZGUgPSAoY29kZSArIGJsX2NvdW50W2JpdHMtMV0pIDw8IDE7XG4gIH1cbiAgLyogQ2hlY2sgdGhhdCB0aGUgYml0IGNvdW50cyBpbiBibF9jb3VudCBhcmUgY29uc2lzdGVudC4gVGhlIGxhc3QgY29kZVxuICAgKiBtdXN0IGJlIGFsbCBvbmVzLlxuICAgKi9cbiAgLy9Bc3NlcnQgKGNvZGUgKyBibF9jb3VudFtNQVhfQklUU10tMSA9PSAoMTw8TUFYX0JJVFMpLTEsXG4gIC8vICAgICAgICBcImluY29uc2lzdGVudCBiaXQgY291bnRzXCIpO1xuICAvL1RyYWNldigoc3RkZXJyLFwiXFxuZ2VuX2NvZGVzOiBtYXhfY29kZSAlZCBcIiwgbWF4X2NvZGUpKTtcblxuICBmb3IgKG4gPSAwOyAgbiA8PSBtYXhfY29kZTsgbisrKSB7XG4gICAgdmFyIGxlbiA9IHRyZWVbbioyICsgMV0vKi5MZW4qLztcbiAgICBpZiAobGVuID09PSAwKSB7IGNvbnRpbnVlOyB9XG4gICAgLyogTm93IHJldmVyc2UgdGhlIGJpdHMgKi9cbiAgICB0cmVlW24qMl0vKi5Db2RlKi8gPSBiaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7XG5cbiAgICAvL1RyYWNlY3YodHJlZSAhPSBzdGF0aWNfbHRyZWUsIChzdGRlcnIsXCJcXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpIFwiLFxuICAgIC8vICAgICBuLCAoaXNncmFwaChuKSA/IG4gOiAnICcpLCBsZW4sIHRyZWVbbl0uQ29kZSwgbmV4dF9jb2RlW2xlbl0tMSkpO1xuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB2YXJpb3VzICdjb25zdGFudCcgdGFibGVzLlxuICovXG5mdW5jdGlvbiB0cl9zdGF0aWNfaW5pdCgpIHtcbiAgdmFyIG47ICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi9cbiAgdmFyIGJpdHM7ICAgICAvKiBiaXQgY291bnRlciAqL1xuICB2YXIgbGVuZ3RoOyAgIC8qIGxlbmd0aCB2YWx1ZSAqL1xuICB2YXIgY29kZTsgICAgIC8qIGNvZGUgdmFsdWUgKi9cbiAgdmFyIGRpc3Q7ICAgICAvKiBkaXN0YW5jZSBpbmRleCAqL1xuICB2YXIgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMrMSk7XG4gIC8qIG51bWJlciBvZiBjb2RlcyBhdCBlYWNoIGJpdCBsZW5ndGggZm9yIGFuIG9wdGltYWwgdHJlZSAqL1xuXG4gIC8vIGRvIGNoZWNrIGluIF90cl9pbml0KClcbiAgLy9pZiAoc3RhdGljX2luaXRfZG9uZSkgcmV0dXJuO1xuXG4gIC8qIEZvciBzb21lIGVtYmVkZGVkIHRhcmdldHMsIGdsb2JhbCB2YXJpYWJsZXMgYXJlIG5vdCBpbml0aWFsaXplZDogKi9cbi8qI2lmZGVmIE5PX0lOSVRfR0xPQkFMX1BPSU5URVJTXG4gIHN0YXRpY19sX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfbHRyZWU7XG4gIHN0YXRpY19sX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2xiaXRzO1xuICBzdGF0aWNfZF9kZXNjLnN0YXRpY190cmVlID0gc3RhdGljX2R0cmVlO1xuICBzdGF0aWNfZF9kZXNjLmV4dHJhX2JpdHMgPSBleHRyYV9kYml0cztcbiAgc3RhdGljX2JsX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2JsYml0cztcbiNlbmRpZiovXG5cbiAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBsZW5ndGggKDAuLjI1NSkgLT4gbGVuZ3RoIGNvZGUgKDAuLjI4KSAqL1xuICBsZW5ndGggPSAwO1xuICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgTEVOR1RIX0NPREVTLTE7IGNvZGUrKykge1xuICAgIGJhc2VfbGVuZ3RoW2NvZGVdID0gbGVuZ3RoO1xuICAgIGZvciAobiA9IDA7IG4gPCAoMTw8ZXh0cmFfbGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSBjb2RlO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAobGVuZ3RoID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogbGVuZ3RoICE9IDI1NlwiKTtcbiAgLyogTm90ZSB0aGF0IHRoZSBsZW5ndGggMjU1IChtYXRjaCBsZW5ndGggMjU4KSBjYW4gYmUgcmVwcmVzZW50ZWRcbiAgICogaW4gdHdvIGRpZmZlcmVudCB3YXlzOiBjb2RlIDI4NCArIDUgYml0cyBvciBjb2RlIDI4NSwgc28gd2VcbiAgICogb3ZlcndyaXRlIGxlbmd0aF9jb2RlWzI1NV0gdG8gdXNlIHRoZSBiZXN0IGVuY29kaW5nOlxuICAgKi9cbiAgX2xlbmd0aF9jb2RlW2xlbmd0aC0xXSA9IGNvZGU7XG5cbiAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBkaXN0ICgwLi4zMkspIC0+IGRpc3QgY29kZSAoMC4uMjkpICovXG4gIGRpc3QgPSAwO1xuICBmb3IgKGNvZGUgPSAwIDsgY29kZSA8IDE2OyBjb2RlKyspIHtcbiAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0O1xuICAgIGZvciAobiA9IDA7IG4gPCAoMTw8ZXh0cmFfZGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogZGlzdCAhPSAyNTZcIik7XG4gIGRpc3QgPj49IDc7IC8qIGZyb20gbm93IG9uLCBhbGwgZGlzdGFuY2VzIGFyZSBkaXZpZGVkIGJ5IDEyOCAqL1xuICBmb3IgKCA7IGNvZGUgPCBEX0NPREVTOyBjb2RlKyspIHtcbiAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0IDw8IDc7XG4gICAgZm9yIChuID0gMDsgbiA8ICgxPDwoZXh0cmFfZGJpdHNbY29kZV0tNykpOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyXCIpO1xuXG4gIC8qIENvbnN0cnVjdCB0aGUgY29kZXMgb2YgdGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUgKi9cbiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7XG4gICAgYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgbiA9IDA7XG4gIHdoaWxlIChuIDw9IDE0Mykge1xuICAgIHN0YXRpY19sdHJlZVtuKjIgKyAxXS8qLkxlbiovID0gODtcbiAgICBuKys7XG4gICAgYmxfY291bnRbOF0rKztcbiAgfVxuICB3aGlsZSAobiA8PSAyNTUpIHtcbiAgICBzdGF0aWNfbHRyZWVbbioyICsgMV0vKi5MZW4qLyA9IDk7XG4gICAgbisrO1xuICAgIGJsX2NvdW50WzldKys7XG4gIH1cbiAgd2hpbGUgKG4gPD0gMjc5KSB7XG4gICAgc3RhdGljX2x0cmVlW24qMiArIDFdLyouTGVuKi8gPSA3O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs3XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI4Nykge1xuICAgIHN0YXRpY19sdHJlZVtuKjIgKyAxXS8qLkxlbiovID0gODtcbiAgICBuKys7XG4gICAgYmxfY291bnRbOF0rKztcbiAgfVxuICAvKiBDb2RlcyAyODYgYW5kIDI4NyBkbyBub3QgZXhpc3QsIGJ1dCB3ZSBtdXN0IGluY2x1ZGUgdGhlbSBpbiB0aGVcbiAgICogdHJlZSBjb25zdHJ1Y3Rpb24gdG8gZ2V0IGEgY2Fub25pY2FsIEh1ZmZtYW4gdHJlZSAobG9uZ2VzdCBjb2RlXG4gICAqIGFsbCBvbmVzKVxuICAgKi9cbiAgZ2VuX2NvZGVzKHN0YXRpY19sdHJlZSwgTF9DT0RFUysxLCBibF9jb3VudCk7XG5cbiAgLyogVGhlIHN0YXRpYyBkaXN0YW5jZSB0cmVlIGlzIHRyaXZpYWw6ICovXG4gIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyBuKyspIHtcbiAgICBzdGF0aWNfZHRyZWVbbioyICsgMV0vKi5MZW4qLyA9IDU7XG4gICAgc3RhdGljX2R0cmVlW24qMl0vKi5Db2RlKi8gPSBiaV9yZXZlcnNlKG4sIDUpO1xuICB9XG5cbiAgLy8gTm93IGRhdGEgcmVhZHkgYW5kIHdlIGNhbiBpbml0IHN0YXRpYyB0cmVlc1xuICBzdGF0aWNfbF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19sdHJlZSwgZXh0cmFfbGJpdHMsIExJVEVSQUxTKzEsIExfQ09ERVMsIE1BWF9CSVRTKTtcbiAgc3RhdGljX2RfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfZHRyZWUsIGV4dHJhX2RiaXRzLCAwLCAgICAgICAgICBEX0NPREVTLCBNQVhfQklUUyk7XG4gIHN0YXRpY19ibF9kZXNjID1uZXcgU3RhdGljVHJlZURlc2MobmV3IEFycmF5KDApLCBleHRyYV9ibGJpdHMsIDAsICAgICAgICAgQkxfQ09ERVMsIE1BWF9CTF9CSVRTKTtcblxuICAvL3N0YXRpY19pbml0X2RvbmUgPSB0cnVlO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSBhIG5ldyBibG9jay5cbiAqL1xuZnVuY3Rpb24gaW5pdF9ibG9jayhzKSB7XG4gIHZhciBuOyAvKiBpdGVyYXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi9cblxuICAvKiBJbml0aWFsaXplIHRoZSB0cmVlcy4gKi9cbiAgZm9yIChuID0gMDsgbiA8IExfQ09ERVM7ICBuKyspIHsgcy5keW5fbHRyZWVbbioyXS8qLkZyZXEqLyA9IDA7IH1cbiAgZm9yIChuID0gMDsgbiA8IERfQ09ERVM7ICBuKyspIHsgcy5keW5fZHRyZWVbbioyXS8qLkZyZXEqLyA9IDA7IH1cbiAgZm9yIChuID0gMDsgbiA8IEJMX0NPREVTOyBuKyspIHsgcy5ibF90cmVlW24qMl0vKi5GcmVxKi8gPSAwOyB9XG5cbiAgcy5keW5fbHRyZWVbRU5EX0JMT0NLKjJdLyouRnJlcSovID0gMTtcbiAgcy5vcHRfbGVuID0gcy5zdGF0aWNfbGVuID0gMDtcbiAgcy5sYXN0X2xpdCA9IHMubWF0Y2hlcyA9IDA7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGbHVzaCB0aGUgYml0IGJ1ZmZlciBhbmQgYWxpZ24gdGhlIG91dHB1dCBvbiBhIGJ5dGUgYm91bmRhcnlcbiAqL1xuZnVuY3Rpb24gYmlfd2luZHVwKHMpXG57XG4gIGlmIChzLmJpX3ZhbGlkID4gOCkge1xuICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7XG4gIH0gZWxzZSBpZiAocy5iaV92YWxpZCA+IDApIHtcbiAgICAvL3B1dF9ieXRlKHMsIChCeXRlKXMtPmJpX2J1Zik7XG4gICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBzLmJpX2J1ZjtcbiAgfVxuICBzLmJpX2J1ZiA9IDA7XG4gIHMuYmlfdmFsaWQgPSAwO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHkgYSBzdG9yZWQgYmxvY2ssIHN0b3JpbmcgZmlyc3QgdGhlIGxlbmd0aCBhbmQgaXRzXG4gKiBvbmUncyBjb21wbGVtZW50IGlmIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gY29weV9ibG9jayhzLCBidWYsIGxlbiwgaGVhZGVyKVxuLy9EZWZsYXRlU3RhdGUgKnM7XG4vL2NoYXJmICAgICpidWY7ICAgIC8qIHRoZSBpbnB1dCBkYXRhICovXG4vL3Vuc2lnbmVkIGxlbjsgICAgIC8qIGl0cyBsZW5ndGggKi9cbi8vaW50ICAgICAgaGVhZGVyOyAgLyogdHJ1ZSBpZiBibG9jayBoZWFkZXIgbXVzdCBiZSB3cml0dGVuICovXG57XG4gIGJpX3dpbmR1cChzKTsgICAgICAgIC8qIGFsaWduIG9uIGJ5dGUgYm91bmRhcnkgKi9cblxuICBpZiAoaGVhZGVyKSB7XG4gICAgcHV0X3Nob3J0KHMsIGxlbik7XG4gICAgcHV0X3Nob3J0KHMsIH5sZW4pO1xuICB9XG4vLyAgd2hpbGUgKGxlbi0tKSB7XG4vLyAgICBwdXRfYnl0ZShzLCAqYnVmKyspO1xuLy8gIH1cbiAgdXRpbHMuYXJyYXlTZXQocy5wZW5kaW5nX2J1Ziwgcy53aW5kb3csIGJ1ZiwgbGVuLCBzLnBlbmRpbmcpO1xuICBzLnBlbmRpbmcgKz0gbGVuO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXBhcmVzIHRvIHN1YnRyZWVzLCB1c2luZyB0aGUgdHJlZSBkZXB0aCBhcyB0aWUgYnJlYWtlciB3aGVuXG4gKiB0aGUgc3VidHJlZXMgaGF2ZSBlcXVhbCBmcmVxdWVuY3kuIFRoaXMgbWluaW1pemVzIHRoZSB3b3JzdCBjYXNlIGxlbmd0aC5cbiAqL1xuZnVuY3Rpb24gc21hbGxlcih0cmVlLCBuLCBtLCBkZXB0aCkge1xuICB2YXIgX24yID0gbioyO1xuICB2YXIgX20yID0gbSoyO1xuICByZXR1cm4gKHRyZWVbX24yXS8qLkZyZXEqLyA8IHRyZWVbX20yXS8qLkZyZXEqLyB8fFxuICAgICAgICAgKHRyZWVbX24yXS8qLkZyZXEqLyA9PT0gdHJlZVtfbTJdLyouRnJlcSovICYmIGRlcHRoW25dIDw9IGRlcHRoW21dKSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmVzdG9yZSB0aGUgaGVhcCBwcm9wZXJ0eSBieSBtb3ZpbmcgZG93biB0aGUgdHJlZSBzdGFydGluZyBhdCBub2RlIGssXG4gKiBleGNoYW5naW5nIGEgbm9kZSB3aXRoIHRoZSBzbWFsbGVzdCBvZiBpdHMgdHdvIHNvbnMgaWYgbmVjZXNzYXJ5LCBzdG9wcGluZ1xuICogd2hlbiB0aGUgaGVhcCBwcm9wZXJ0eSBpcyByZS1lc3RhYmxpc2hlZCAoZWFjaCBmYXRoZXIgc21hbGxlciB0aGFuIGl0c1xuICogdHdvIHNvbnMpLlxuICovXG5mdW5jdGlvbiBwcWRvd25oZWFwKHMsIHRyZWUsIGspXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgIC8qIHRoZSB0cmVlIHRvIHJlc3RvcmUgKi9cbi8vICAgIGludCBrOyAgICAgICAgICAgICAgIC8qIG5vZGUgdG8gbW92ZSBkb3duICovXG57XG4gIHZhciB2ID0gcy5oZWFwW2tdO1xuICB2YXIgaiA9IGsgPDwgMTsgIC8qIGxlZnQgc29uIG9mIGsgKi9cbiAgd2hpbGUgKGogPD0gcy5oZWFwX2xlbikge1xuICAgIC8qIFNldCBqIHRvIHRoZSBzbWFsbGVzdCBvZiB0aGUgdHdvIHNvbnM6ICovXG4gICAgaWYgKGogPCBzLmhlYXBfbGVuICYmXG4gICAgICBzbWFsbGVyKHRyZWUsIHMuaGVhcFtqKzFdLCBzLmhlYXBbal0sIHMuZGVwdGgpKSB7XG4gICAgICBqKys7XG4gICAgfVxuICAgIC8qIEV4aXQgaWYgdiBpcyBzbWFsbGVyIHRoYW4gYm90aCBzb25zICovXG4gICAgaWYgKHNtYWxsZXIodHJlZSwgdiwgcy5oZWFwW2pdLCBzLmRlcHRoKSkgeyBicmVhazsgfVxuXG4gICAgLyogRXhjaGFuZ2UgdiB3aXRoIHRoZSBzbWFsbGVzdCBzb24gKi9cbiAgICBzLmhlYXBba10gPSBzLmhlYXBbal07XG4gICAgayA9IGo7XG5cbiAgICAvKiBBbmQgY29udGludWUgZG93biB0aGUgdHJlZSwgc2V0dGluZyBqIHRvIHRoZSBsZWZ0IHNvbiBvZiBrICovXG4gICAgaiA8PD0gMTtcbiAgfVxuICBzLmhlYXBba10gPSB2O1xufVxuXG5cbi8vIGlubGluZWQgbWFudWFsbHlcbi8vIHZhciBTTUFMTEVTVCA9IDE7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCB0aGUgYmxvY2sgZGF0YSBjb21wcmVzc2VkIHVzaW5nIHRoZSBnaXZlbiBIdWZmbWFuIHRyZWVzXG4gKi9cbmZ1bmN0aW9uIGNvbXByZXNzX2Jsb2NrKHMsIGx0cmVlLCBkdHJlZSlcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICBjb25zdCBjdF9kYXRhICpsdHJlZTsgLyogbGl0ZXJhbCB0cmVlICovXG4vLyAgICBjb25zdCBjdF9kYXRhICpkdHJlZTsgLyogZGlzdGFuY2UgdHJlZSAqL1xue1xuICB2YXIgZGlzdDsgICAgICAgICAgIC8qIGRpc3RhbmNlIG9mIG1hdGNoZWQgc3RyaW5nICovXG4gIHZhciBsYzsgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0ID09IDApICovXG4gIHZhciBseCA9IDA7ICAgICAgICAgLyogcnVubmluZyBpbmRleCBpbiBsX2J1ZiAqL1xuICB2YXIgY29kZTsgICAgICAgICAgIC8qIHRoZSBjb2RlIHRvIHNlbmQgKi9cbiAgdmFyIGV4dHJhOyAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyB0byBzZW5kICovXG5cbiAgaWYgKHMubGFzdF9saXQgIT09IDApIHtcbiAgICBkbyB7XG4gICAgICBkaXN0ID0gKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4KjJdIDw8IDgpIHwgKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4KjIgKyAxXSk7XG4gICAgICBsYyA9IHMucGVuZGluZ19idWZbcy5sX2J1ZiArIGx4XTtcbiAgICAgIGx4Kys7XG5cbiAgICAgIGlmIChkaXN0ID09PSAwKSB7XG4gICAgICAgIHNlbmRfY29kZShzLCBsYywgbHRyZWUpOyAvKiBzZW5kIGEgbGl0ZXJhbCBieXRlICovXG4gICAgICAgIC8vVHJhY2Vjdihpc2dyYXBoKGxjKSwgKHN0ZGVycixcIiAnJWMnIFwiLCBsYykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogSGVyZSwgbGMgaXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqL1xuICAgICAgICBjb2RlID0gX2xlbmd0aF9jb2RlW2xjXTtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUrTElURVJBTFMrMSwgbHRyZWUpOyAvKiBzZW5kIHRoZSBsZW5ndGggY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsgICAgICAgLyogc2VuZCB0aGUgZXh0cmEgbGVuZ3RoIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgICBkaXN0LS07IC8qIGRpc3QgaXMgbm93IHRoZSBtYXRjaCBkaXN0YW5jZSAtIDEgKi9cbiAgICAgICAgY29kZSA9IGRfY29kZShkaXN0KTtcbiAgICAgICAgLy9Bc3NlcnQgKGNvZGUgPCBEX0NPREVTLCBcImJhZCBkX2NvZGVcIik7XG5cbiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsgICAgICAgLyogc2VuZCB0aGUgZGlzdGFuY2UgY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2RiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBkaXN0IC09IGJhc2VfZGlzdFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOyAgIC8qIHNlbmQgdGhlIGV4dHJhIGRpc3RhbmNlIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgfSAvKiBsaXRlcmFsIG9yIG1hdGNoIHBhaXIgPyAqL1xuXG4gICAgICAvKiBDaGVjayB0aGF0IHRoZSBvdmVybGF5IGJldHdlZW4gcGVuZGluZ19idWYgYW5kIGRfYnVmK2xfYnVmIGlzIG9rOiAqL1xuICAgICAgLy9Bc3NlcnQoKHVJbnQpKHMtPnBlbmRpbmcpIDwgcy0+bGl0X2J1ZnNpemUgKyAyKmx4LFxuICAgICAgLy8gICAgICAgXCJwZW5kaW5nQnVmIG92ZXJmbG93XCIpO1xuXG4gICAgfSB3aGlsZSAobHggPCBzLmxhc3RfbGl0KTtcbiAgfVxuXG4gIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0cnVjdCBvbmUgSHVmZm1hbiB0cmVlIGFuZCBhc3NpZ25zIHRoZSBjb2RlIGJpdCBzdHJpbmdzIGFuZCBsZW5ndGhzLlxuICogVXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoIGZvciB0aGUgY3VycmVudCBibG9jay5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkIGZyZXEgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGRzIGxlbiBhbmQgY29kZSBhcmUgc2V0IHRvIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhcbiAqICAgICBhbmQgY29ycmVzcG9uZGluZyBjb2RlLiBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpc1xuICogICAgIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcyBub3QgbnVsbC4gVGhlIGZpZWxkIG1heF9jb2RlIGlzIHNldC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRfdHJlZShzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgPSBkZXNjLmR5bl90cmVlO1xuICB2YXIgc3RyZWUgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGVsZW1zICAgID0gZGVzYy5zdGF0X2Rlc2MuZWxlbXM7XG4gIHZhciBuLCBtOyAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgaGVhcCBlbGVtZW50cyAqL1xuICB2YXIgbWF4X2NvZGUgPSAtMTsgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovXG4gIHZhciBub2RlOyAgICAgICAgICAvKiBuZXcgbm9kZSBiZWluZyBjcmVhdGVkICovXG5cbiAgLyogQ29uc3RydWN0IHRoZSBpbml0aWFsIGhlYXAsIHdpdGggbGVhc3QgZnJlcXVlbnQgZWxlbWVudCBpblxuICAgKiBoZWFwW1NNQUxMRVNUXS4gVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS5cbiAgICogaGVhcFswXSBpcyBub3QgdXNlZC5cbiAgICovXG4gIHMuaGVhcF9sZW4gPSAwO1xuICBzLmhlYXBfbWF4ID0gSEVBUF9TSVpFO1xuXG4gIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7XG4gICAgaWYgKHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlID0gbjtcbiAgICAgIHMuZGVwdGhbbl0gPSAwO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVbbioyICsgMV0vKi5MZW4qLyA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyogVGhlIHBremlwIGZvcm1hdCByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IG9uZSBkaXN0YW5jZSBjb2RlIGV4aXN0cyxcbiAgICogYW5kIHRoYXQgYXQgbGVhc3Qgb25lIGJpdCBzaG91bGQgYmUgc2VudCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lXG4gICAqIHBvc3NpYmxlIGNvZGUuIFNvIHRvIGF2b2lkIHNwZWNpYWwgY2hlY2tzIGxhdGVyIG9uIHdlIGZvcmNlIGF0IGxlYXN0XG4gICAqIHR3byBjb2RlcyBvZiBub24gemVybyBmcmVxdWVuY3kuXG4gICAqL1xuICB3aGlsZSAocy5oZWFwX2xlbiA8IDIpIHtcbiAgICBub2RlID0gcy5oZWFwWysrcy5oZWFwX2xlbl0gPSAobWF4X2NvZGUgPCAyID8gKyttYXhfY29kZSA6IDApO1xuICAgIHRyZWVbbm9kZSAqIDJdLyouRnJlcSovID0gMTtcbiAgICBzLmRlcHRoW25vZGVdID0gMDtcbiAgICBzLm9wdF9sZW4tLTtcblxuICAgIGlmIChoYXNfc3RyZWUpIHtcbiAgICAgIHMuc3RhdGljX2xlbiAtPSBzdHJlZVtub2RlKjIgKyAxXS8qLkxlbiovO1xuICAgIH1cbiAgICAvKiBub2RlIGlzIDAgb3IgMSBzbyBpdCBkb2VzIG5vdCBoYXZlIGV4dHJhIGJpdHMgKi9cbiAgfVxuICBkZXNjLm1heF9jb2RlID0gbWF4X2NvZGU7XG5cbiAgLyogVGhlIGVsZW1lbnRzIGhlYXBbaGVhcF9sZW4vMisxIC4uIGhlYXBfbGVuXSBhcmUgbGVhdmVzIG9mIHRoZSB0cmVlLFxuICAgKiBlc3RhYmxpc2ggc3ViLWhlYXBzIG9mIGluY3JlYXNpbmcgbGVuZ3RoczpcbiAgICovXG4gIGZvciAobiA9IChzLmhlYXBfbGVuID4+IDEvKmludCAvMiovKTsgbiA+PSAxOyBuLS0pIHsgcHFkb3duaGVhcChzLCB0cmVlLCBuKTsgfVxuXG4gIC8qIENvbnN0cnVjdCB0aGUgSHVmZm1hbiB0cmVlIGJ5IHJlcGVhdGVkbHkgY29tYmluaW5nIHRoZSBsZWFzdCB0d29cbiAgICogZnJlcXVlbnQgbm9kZXMuXG4gICAqL1xuICBub2RlID0gZWxlbXM7ICAgICAgICAgICAgICAvKiBuZXh0IGludGVybmFsIG5vZGUgb2YgdGhlIHRyZWUgKi9cbiAgZG8ge1xuICAgIC8vcHFyZW1vdmUocywgdHJlZSwgbik7ICAvKiBuID0gbm9kZSBvZiBsZWFzdCBmcmVxdWVuY3kgKi9cbiAgICAvKioqIHBxcmVtb3ZlICoqKi9cbiAgICBuID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dO1xuICAgIHMuaGVhcFsxLypTTUFMTEVTVCovXSA9IHMuaGVhcFtzLmhlYXBfbGVuLS1dO1xuICAgIHBxZG93bmhlYXAocywgdHJlZSwgMS8qU01BTExFU1QqLyk7XG4gICAgLyoqKi9cblxuICAgIG0gPSBzLmhlYXBbMS8qU01BTExFU1QqL107IC8qIG0gPSBub2RlIG9mIG5leHQgbGVhc3QgZnJlcXVlbmN5ICovXG5cbiAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IG47IC8qIGtlZXAgdGhlIG5vZGVzIHNvcnRlZCBieSBmcmVxdWVuY3kgKi9cbiAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IG07XG5cbiAgICAvKiBDcmVhdGUgYSBuZXcgbm9kZSBmYXRoZXIgb2YgbiBhbmQgbSAqL1xuICAgIHRyZWVbbm9kZSAqIDJdLyouRnJlcSovID0gdHJlZVtuICogMl0vKi5GcmVxKi8gKyB0cmVlW20gKiAyXS8qLkZyZXEqLztcbiAgICBzLmRlcHRoW25vZGVdID0gKHMuZGVwdGhbbl0gPj0gcy5kZXB0aFttXSA/IHMuZGVwdGhbbl0gOiBzLmRlcHRoW21dKSArIDE7XG4gICAgdHJlZVtuKjIgKyAxXS8qLkRhZCovID0gdHJlZVttKjIgKyAxXS8qLkRhZCovID0gbm9kZTtcblxuICAgIC8qIGFuZCBpbnNlcnQgdGhlIG5ldyBub2RlIGluIHRoZSBoZWFwICovXG4gICAgcy5oZWFwWzEvKlNNQUxMRVNUKi9dID0gbm9kZSsrO1xuICAgIHBxZG93bmhlYXAocywgdHJlZSwgMS8qU01BTExFU1QqLyk7XG5cbiAgfSB3aGlsZSAocy5oZWFwX2xlbiA+PSAyKTtcblxuICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTtcblxuICAvKiBBdCB0aGlzIHBvaW50LCB0aGUgZmllbGRzIGZyZXEgYW5kIGRhZCBhcmUgc2V0LiBXZSBjYW4gbm93XG4gICAqIGdlbmVyYXRlIHRoZSBiaXQgbGVuZ3Rocy5cbiAgICovXG4gIGdlbl9iaXRsZW4ocywgZGVzYyk7XG5cbiAgLyogVGhlIGZpZWxkIGxlbiBpcyBub3cgc2V0LCB3ZSBjYW4gZ2VuZXJhdGUgdGhlIGJpdCBjb2RlcyAqL1xuICBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIHMuYmxfY291bnQpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2NhbiBhIGxpdGVyYWwgb3IgZGlzdGFuY2UgdHJlZSB0byBkZXRlcm1pbmUgdGhlIGZyZXF1ZW5jaWVzIG9mIHRoZSBjb2Rlc1xuICogaW4gdGhlIGJpdCBsZW5ndGggdHJlZS5cbiAqL1xuZnVuY3Rpb24gc2Nhbl90cmVlKHMsIHRyZWUsIG1heF9jb2RlKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGN0X2RhdGEgKnRyZWU7ICAgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cbntcbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqL1xuICB2YXIgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVuZ3RoICovXG4gIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi9cblxuICB2YXIgbmV4dGxlbiA9IHRyZWVbMCoyICsgMV0vKi5MZW4qLzsgLyogbGVuZ3RoIG9mIG5leHQgY29kZSAqL1xuXG4gIHZhciBjb3VudCA9IDA7ICAgICAgICAgICAgIC8qIHJlcGVhdCBjb3VudCBvZiB0aGUgY3VycmVudCBjb2RlICovXG4gIHZhciBtYXhfY291bnQgPSA3OyAgICAgICAgIC8qIG1heCByZXBlYXQgY291bnQgKi9cbiAgdmFyIG1pbl9jb3VudCA9IDQ7ICAgICAgICAgLyogbWluIHJlcGVhdCBjb3VudCAqL1xuXG4gIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgbWF4X2NvdW50ID0gMTM4O1xuICAgIG1pbl9jb3VudCA9IDM7XG4gIH1cbiAgdHJlZVsobWF4X2NvZGUrMSkqMiArIDFdLyouTGVuKi8gPSAweGZmZmY7IC8qIGd1YXJkICovXG5cbiAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7XG4gICAgY3VybGVuID0gbmV4dGxlbjtcbiAgICBuZXh0bGVuID0gdHJlZVsobisxKSoyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0vKi5GcmVxKi8gKz0gY291bnQ7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkge1xuXG4gICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7IHMuYmxfdHJlZVtjdXJsZW4gKiAyXS8qLkZyZXEqLysrOyB9XG4gICAgICBzLmJsX3RyZWVbUkVQXzNfNioyXS8qLkZyZXEqLysrO1xuXG4gICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkge1xuICAgICAgcy5ibF90cmVlW1JFUFpfM18xMCoyXS8qLkZyZXEqLysrO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHMuYmxfdHJlZVtSRVBaXzExXzEzOCoyXS8qLkZyZXEqLysrO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuXG4gICAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICAgIG1heF9jb3VudCA9IDEzODtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgbWF4X2NvdW50ID0gNjtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbWF4X2NvdW50ID0gNztcbiAgICAgIG1pbl9jb3VudCA9IDQ7XG4gICAgfVxuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZW5kIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIGluIGNvbXByZXNzZWQgZm9ybSwgdXNpbmcgdGhlIGNvZGVzIGluXG4gKiBibF90cmVlLlxuICovXG5mdW5jdGlvbiBzZW5kX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cbntcbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqL1xuICB2YXIgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVuZ3RoICovXG4gIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi9cblxuICB2YXIgbmV4dGxlbiA9IHRyZWVbMCoyICsgMV0vKi5MZW4qLzsgLyogbGVuZ3RoIG9mIG5leHQgY29kZSAqL1xuXG4gIHZhciBjb3VudCA9IDA7ICAgICAgICAgICAgIC8qIHJlcGVhdCBjb3VudCBvZiB0aGUgY3VycmVudCBjb2RlICovXG4gIHZhciBtYXhfY291bnQgPSA3OyAgICAgICAgIC8qIG1heCByZXBlYXQgY291bnQgKi9cbiAgdmFyIG1pbl9jb3VudCA9IDQ7ICAgICAgICAgLyogbWluIHJlcGVhdCBjb3VudCAqL1xuXG4gIC8qIHRyZWVbbWF4X2NvZGUrMV0uTGVuID0gLTE7ICovICAvKiBndWFyZCBhbHJlYWR5IHNldCAqL1xuICBpZiAobmV4dGxlbiA9PT0gMCkge1xuICAgIG1heF9jb3VudCA9IDEzODtcbiAgICBtaW5fY291bnQgPSAzO1xuICB9XG5cbiAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7XG4gICAgY3VybGVuID0gbmV4dGxlbjtcbiAgICBuZXh0bGVuID0gdHJlZVsobisxKSoyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBkbyB7IHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7IH0gd2hpbGUgKC0tY291bnQgIT09IDApO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHtcbiAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTtcbiAgICAgICAgY291bnQtLTtcbiAgICAgIH1cbiAgICAgIC8vQXNzZXJ0KGNvdW50ID49IDMgJiYgY291bnQgPD0gNiwgXCIgM182P1wiKTtcbiAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50LTMsIDIpO1xuXG4gICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkge1xuICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfM18xMCwgcy5ibF90cmVlKTtcbiAgICAgIHNlbmRfYml0cyhzLCBjb3VudC0zLCAzKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBzZW5kX2NvZGUocywgUkVQWl8xMV8xMzgsIHMuYmxfdHJlZSk7XG4gICAgICBzZW5kX2JpdHMocywgY291bnQtMTEsIDcpO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuICAgIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgICBtYXhfY291bnQgPSAxMzg7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHtcbiAgICAgIG1heF9jb3VudCA9IDY7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIG1heF9jb3VudCA9IDc7XG4gICAgICBtaW5fY291bnQgPSA0O1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgZm9yIHRoZSBiaXQgbGVuZ3RocyBhbmQgcmV0dXJuIHRoZSBpbmRleCBpblxuICogYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocykge1xuICB2YXIgbWF4X2JsaW5kZXg7ICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogRGV0ZXJtaW5lIHRoZSBiaXQgbGVuZ3RoIGZyZXF1ZW5jaWVzIGZvciBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICBzY2FuX3RyZWUocywgcy5keW5fbHRyZWUsIHMubF9kZXNjLm1heF9jb2RlKTtcbiAgc2Nhbl90cmVlKHMsIHMuZHluX2R0cmVlLCBzLmRfZGVzYy5tYXhfY29kZSk7XG5cbiAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZTogKi9cbiAgYnVpbGRfdHJlZShzLCBzLmJsX2Rlc2MpO1xuICAvKiBvcHRfbGVuIG5vdyBpbmNsdWRlcyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucywgZXhjZXB0XG4gICAqIHRoZSBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RocyBjb2RlcyBhbmQgdGhlIDUrNSs0IGJpdHMgZm9yIHRoZSBjb3VudHMuXG4gICAqL1xuXG4gIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJpdCBsZW5ndGggY29kZXMgdG8gc2VuZC4gVGhlIHBremlwIGZvcm1hdFxuICAgKiByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IDQgYml0IGxlbmd0aCBjb2RlcyBiZSBzZW50LiAoYXBwbm90ZS50eHQgc2F5c1xuICAgKiAzIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaXMgNC4pXG4gICAqL1xuICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMtMTsgbWF4X2JsaW5kZXggPj0gMzsgbWF4X2JsaW5kZXgtLSkge1xuICAgIGlmIChzLmJsX3RyZWVbYmxfb3JkZXJbbWF4X2JsaW5kZXhdKjIgKyAxXS8qLkxlbiovICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgLyogVXBkYXRlIG9wdF9sZW4gdG8gaW5jbHVkZSB0aGUgYml0IGxlbmd0aCB0cmVlIGFuZCBjb3VudHMgKi9cbiAgcy5vcHRfbGVuICs9IDMqKG1heF9ibGluZGV4KzEpICsgNSs1KzQ7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuZHluIHRyZWVzOiBkeW4gJWxkLCBzdGF0ICVsZFwiLFxuICAvLyAgICAgICAgcy0+b3B0X2xlbiwgcy0+c3RhdGljX2xlbikpO1xuXG4gIHJldHVybiBtYXhfYmxpbmRleDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGhlYWRlciBmb3IgYSBibG9jayB1c2luZyBkeW5hbWljIEh1ZmZtYW4gdHJlZXM6IHRoZSBjb3VudHMsIHRoZVxuICogbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUuXG4gKiBJTiBhc3NlcnRpb246IGxjb2RlcyA+PSAyNTcsIGRjb2RlcyA+PSAxLCBibGNvZGVzID49IDQuXG4gKi9cbmZ1bmN0aW9uIHNlbmRfYWxsX3RyZWVzKHMsIGxjb2RlcywgZGNvZGVzLCBibGNvZGVzKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGludCBsY29kZXMsIGRjb2RlcywgYmxjb2RlczsgLyogbnVtYmVyIG9mIGNvZGVzIGZvciBlYWNoIHRyZWUgKi9cbntcbiAgdmFyIHJhbms7ICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBibF9vcmRlciAqL1xuXG4gIC8vQXNzZXJ0IChsY29kZXMgPj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgXCJub3QgZW5vdWdoIGNvZGVzXCIpO1xuICAvL0Fzc2VydCAobGNvZGVzIDw9IExfQ09ERVMgJiYgZGNvZGVzIDw9IERfQ09ERVMgJiYgYmxjb2RlcyA8PSBCTF9DT0RFUyxcbiAgLy8gICAgICAgIFwidG9vIG1hbnkgY29kZXNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgY291bnRzOiBcIikpO1xuICBzZW5kX2JpdHMocywgbGNvZGVzLTI1NywgNSk7IC8qIG5vdCArMjU1IGFzIHN0YXRlZCBpbiBhcHBub3RlLnR4dCAqL1xuICBzZW5kX2JpdHMocywgZGNvZGVzLTEsICAgNSk7XG4gIHNlbmRfYml0cyhzLCBibGNvZGVzLTQsICA0KTsgLyogbm90IC0zIGFzIHN0YXRlZCBpbiBhcHBub3RlLnR4dCAqL1xuICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7XG4gICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5ibCBjb2RlICUyZCBcIiwgYmxfb3JkZXJbcmFua10pKTtcbiAgICBzZW5kX2JpdHMocywgcy5ibF90cmVlW2JsX29yZGVyW3JhbmtdKjIgKyAxXS8qLkxlbiovLCAzKTtcbiAgfVxuICAvL1RyYWNldigoc3RkZXJyLCBcIlxcbmJsIHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xuXG4gIHNlbmRfdHJlZShzLCBzLmR5bl9sdHJlZSwgbGNvZGVzLTEpOyAvKiBsaXRlcmFsIHRyZWUgKi9cbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5saXQgdHJlZTogc2VudCAlbGRcIiwgcy0+Yml0c19zZW50KSk7XG5cbiAgc2VuZF90cmVlKHMsIHMuZHluX2R0cmVlLCBkY29kZXMtMSk7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlwZSBpcyBURVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gKiAtIFRFWFQgaWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6XG4gKiAgICBhKSBUaGVyZSBhcmUgbm8gbm9uLXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBiZWxvbmdpbmcgdG8gdGhlXG4gKiAgICAgICBcImJsYWNrIGxpc3RcIiAoMC4uNiwgMTQuLjI1LCAyOC4uMzEpLlxuICogICAgYikgVGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByaW50YWJsZSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIHRoZVxuICogICAgICAgXCJ3aGl0ZSBsaXN0XCIgKDkge1RBQn0sIDEwIHtMRn0sIDEzIHtDUn0sIDMyLi4yNTUpLlxuICogLSBCSU5BUlkgb3RoZXJ3aXNlLlxuICogLSBUaGUgZm9sbG93aW5nIHBhcnRpYWxseS1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgZm9ybSBhXG4gKiAgIFwiZ3JheSBsaXN0XCIgdGhhdCBpcyBpZ25vcmVkIGluIHRoaXMgZGV0ZWN0aW9uIGFsZ29yaXRobTpcbiAqICAgKDcge0JFTH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LlxuICovXG5mdW5jdGlvbiBkZXRlY3RfZGF0YV90eXBlKHMpIHtcbiAgLyogYmxhY2tfbWFzayBpcyB0aGUgYml0IG1hc2sgb2YgYmxhY2stbGlzdGVkIGJ5dGVzXG4gICAqIHNldCBiaXRzIDAuLjYsIDE0Li4yNSwgYW5kIDI4Li4zMVxuICAgKiAweGYzZmZjMDdmID0gYmluYXJ5IDExMTEwMDExMTExMTExMTExMTAwMDAwMDAxMTExMTExXG4gICAqL1xuICB2YXIgYmxhY2tfbWFzayA9IDB4ZjNmZmMwN2Y7XG4gIHZhciBuO1xuXG4gIC8qIENoZWNrIGZvciBub24tdGV4dHVhbCAoXCJibGFjay1saXN0ZWRcIikgYnl0ZXMuICovXG4gIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxhY2tfbWFzayA+Pj49IDEpIHtcbiAgICBpZiAoKGJsYWNrX21hc2sgJiAxKSAmJiAocy5keW5fbHRyZWVbbioyXS8qLkZyZXEqLyAhPT0gMCkpIHtcbiAgICAgIHJldHVybiBaX0JJTkFSWTtcbiAgICB9XG4gIH1cblxuICAvKiBDaGVjayBmb3IgdGV4dHVhbCAoXCJ3aGl0ZS1saXN0ZWRcIikgYnl0ZXMuICovXG4gIGlmIChzLmR5bl9sdHJlZVs5ICogMl0vKi5GcmVxKi8gIT09IDAgfHwgcy5keW5fbHRyZWVbMTAgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fFxuICAgICAgcy5keW5fbHRyZWVbMTMgKiAyXS8qLkZyZXEqLyAhPT0gMCkge1xuICAgIHJldHVybiBaX1RFWFQ7XG4gIH1cbiAgZm9yIChuID0gMzI7IG4gPCBMSVRFUkFMUzsgbisrKSB7XG4gICAgaWYgKHMuZHluX2x0cmVlW24gKiAyXS8qLkZyZXEqLyAhPT0gMCkge1xuICAgICAgcmV0dXJuIFpfVEVYVDtcbiAgICB9XG4gIH1cblxuICAvKiBUaGVyZSBhcmUgbm8gXCJibGFjay1saXN0ZWRcIiBvciBcIndoaXRlLWxpc3RlZFwiIGJ5dGVzOlxuICAgKiB0aGlzIHN0cmVhbSBlaXRoZXIgaXMgZW1wdHkgb3IgaGFzIHRvbGVyYXRlZCAoXCJncmF5LWxpc3RlZFwiKSBieXRlcyBvbmx5LlxuICAgKi9cbiAgcmV0dXJuIFpfQklOQVJZO1xufVxuXG5cbnZhciBzdGF0aWNfaW5pdF9kb25lID0gZmFsc2U7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSB0aGUgdHJlZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGEgbmV3IHpsaWIgc3RyZWFtLlxuICovXG5mdW5jdGlvbiBfdHJfaW5pdChzKVxue1xuXG4gIGlmICghc3RhdGljX2luaXRfZG9uZSkge1xuICAgIHRyX3N0YXRpY19pbml0KCk7XG4gICAgc3RhdGljX2luaXRfZG9uZSA9IHRydWU7XG4gIH1cblxuICBzLmxfZGVzYyAgPSBuZXcgVHJlZURlc2Mocy5keW5fbHRyZWUsIHN0YXRpY19sX2Rlc2MpO1xuICBzLmRfZGVzYyAgPSBuZXcgVHJlZURlc2Mocy5keW5fZHRyZWUsIHN0YXRpY19kX2Rlc2MpO1xuICBzLmJsX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5ibF90cmVlLCBzdGF0aWNfYmxfZGVzYyk7XG5cbiAgcy5iaV9idWYgPSAwO1xuICBzLmJpX3ZhbGlkID0gMDtcblxuICAvKiBJbml0aWFsaXplIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgZmlyc3QgZmlsZTogKi9cbiAgaW5pdF9ibG9jayhzKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgYSBzdG9yZWQgYmxvY2tcbiAqL1xuZnVuY3Rpb24gX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpXG4vL0RlZmxhdGVTdGF0ZSAqcztcbi8vY2hhcmYgKmJ1ZjsgICAgICAgLyogaW5wdXQgYmxvY2sgKi9cbi8vdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovXG4vL2ludCBsYXN0OyAgICAgICAgIC8qIG9uZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZvciBhIGZpbGUgKi9cbntcbiAgc2VuZF9iaXRzKHMsIChTVE9SRURfQkxPQ0s8PDEpKyhsYXN0ID8gMSA6IDApLCAzKTsgICAgLyogc2VuZCBibG9jayB0eXBlICovXG4gIGNvcHlfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCB0cnVlKTsgLyogd2l0aCBoZWFkZXIgKi9cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuXG4gKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gX3RyX2FsaWduKHMpIHtcbiAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUzw8MSwgMyk7XG4gIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIHN0YXRpY19sdHJlZSk7XG4gIGJpX2ZsdXNoKHMpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nIGZvciB0aGUgY3VycmVudCBibG9jazogZHluYW1pYyB0cmVlcywgc3RhdGljXG4gKiB0cmVlcyBvciBzdG9yZSwgYW5kIG91dHB1dCB0aGUgZW5jb2RlZCBibG9jayB0byB0aGUgemlwIGZpbGUuXG4gKi9cbmZ1bmN0aW9uIF90cl9mbHVzaF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpXG4vL0RlZmxhdGVTdGF0ZSAqcztcbi8vY2hhcmYgKmJ1ZjsgICAgICAgLyogaW5wdXQgYmxvY2ssIG9yIE5VTEwgaWYgdG9vIG9sZCAqL1xuLy91bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi9cbi8vaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqL1xue1xuICB2YXIgb3B0X2xlbmIsIHN0YXRpY19sZW5iOyAgLyogb3B0X2xlbiBhbmQgc3RhdGljX2xlbiBpbiBieXRlcyAqL1xuICB2YXIgbWF4X2JsaW5kZXggPSAwOyAgICAgICAgLyogaW5kZXggb2YgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgb2Ygbm9uIHplcm8gZnJlcSAqL1xuXG4gIC8qIEJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzIHVubGVzcyBhIHN0b3JlZCBibG9jayBpcyBmb3JjZWQgKi9cbiAgaWYgKHMubGV2ZWwgPiAwKSB7XG5cbiAgICAvKiBDaGVjayBpZiB0aGUgZmlsZSBpcyBiaW5hcnkgb3IgdGV4dCAqL1xuICAgIGlmIChzLnN0cm0uZGF0YV90eXBlID09PSBaX1VOS05PV04pIHtcbiAgICAgIHMuc3RybS5kYXRhX3R5cGUgPSBkZXRlY3RfZGF0YV90eXBlKHMpO1xuICAgIH1cblxuICAgIC8qIENvbnN0cnVjdCB0aGUgbGl0ZXJhbCBhbmQgZGlzdGFuY2UgdHJlZXMgKi9cbiAgICBidWlsZF90cmVlKHMsIHMubF9kZXNjKTtcbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5saXQgZGF0YTogZHluICVsZCwgc3RhdCAlbGRcIiwgcy0+b3B0X2xlbixcbiAgICAvLyAgICAgICAgcy0+c3RhdGljX2xlbikpO1xuXG4gICAgYnVpbGRfdHJlZShzLCBzLmRfZGVzYyk7XG4gICAgLy8gVHJhY2V2KChzdGRlcnIsIFwiXFxuZGlzdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZFwiLCBzLT5vcHRfbGVuLFxuICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7XG4gICAgLyogQXQgdGhpcyBwb2ludCwgb3B0X2xlbiBhbmQgc3RhdGljX2xlbiBhcmUgdGhlIHRvdGFsIGJpdCBsZW5ndGhzIG9mXG4gICAgICogdGhlIGNvbXByZXNzZWQgYmxvY2sgZGF0YSwgZXhjbHVkaW5nIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKi9cblxuICAgIC8qIEJ1aWxkIHRoZSBiaXQgbGVuZ3RoIHRyZWUgZm9yIHRoZSBhYm92ZSB0d28gdHJlZXMsIGFuZCBnZXQgdGhlIGluZGV4XG4gICAgICogaW4gYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gICAgICovXG4gICAgbWF4X2JsaW5kZXggPSBidWlsZF9ibF90cmVlKHMpO1xuXG4gICAgLyogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nLiBDb21wdXRlIHRoZSBibG9jayBsZW5ndGhzIGluIGJ5dGVzLiAqL1xuICAgIG9wdF9sZW5iID0gKHMub3B0X2xlbiszKzcpID4+PiAzO1xuICAgIHN0YXRpY19sZW5iID0gKHMuc3RhdGljX2xlbiszKzcpID4+PiAzO1xuXG4gICAgLy8gVHJhY2V2KChzdGRlcnIsIFwiXFxub3B0ICVsdSglbHUpIHN0YXQgJWx1KCVsdSkgc3RvcmVkICVsdSBsaXQgJXUgXCIsXG4gICAgLy8gICAgICAgIG9wdF9sZW5iLCBzLT5vcHRfbGVuLCBzdGF0aWNfbGVuYiwgcy0+c3RhdGljX2xlbiwgc3RvcmVkX2xlbixcbiAgICAvLyAgICAgICAgcy0+bGFzdF9saXQpKTtcblxuICAgIGlmIChzdGF0aWNfbGVuYiA8PSBvcHRfbGVuYikgeyBvcHRfbGVuYiA9IHN0YXRpY19sZW5iOyB9XG5cbiAgfSBlbHNlIHtcbiAgICAvLyBBc3NlcnQoYnVmICE9IChjaGFyKikwLCBcImxvc3QgYnVmXCIpO1xuICAgIG9wdF9sZW5iID0gc3RhdGljX2xlbmIgPSBzdG9yZWRfbGVuICsgNTsgLyogZm9yY2UgYSBzdG9yZWQgYmxvY2sgKi9cbiAgfVxuXG4gIGlmICgoc3RvcmVkX2xlbis0IDw9IG9wdF9sZW5iKSAmJiAoYnVmICE9PSAtMSkpIHtcbiAgICAvKiA0OiB0d28gd29yZHMgZm9yIHRoZSBsZW5ndGhzICovXG5cbiAgICAvKiBUaGUgdGVzdCBidWYgIT0gTlVMTCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBMSVRfQlVGU0laRSA+IFdTSVpFLlxuICAgICAqIE90aGVyd2lzZSB3ZSBjYW4ndCBoYXZlIHByb2Nlc3NlZCBtb3JlIHRoYW4gV1NJWkUgaW5wdXQgYnl0ZXMgc2luY2VcbiAgICAgKiB0aGUgbGFzdCBibG9jayBmbHVzaCwgYmVjYXVzZSBjb21wcmVzc2lvbiB3b3VsZCBoYXZlIGJlZW5cbiAgICAgKiBzdWNjZXNzZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG9cbiAgICAgKiB0cmFuc2Zvcm0gYSBibG9jayBpbnRvIGEgc3RvcmVkIGJsb2NrLlxuICAgICAqL1xuICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTtcblxuICB9IGVsc2UgaWYgKHMuc3RyYXRlZ3kgPT09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7XG5cbiAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUzw8MSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7XG4gICAgY29tcHJlc3NfYmxvY2socywgc3RhdGljX2x0cmVlLCBzdGF0aWNfZHRyZWUpO1xuXG4gIH0gZWxzZSB7XG4gICAgc2VuZF9iaXRzKHMsIChEWU5fVFJFRVM8PDEpICsgKGxhc3QgPyAxIDogMCksIDMpO1xuICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMubF9kZXNjLm1heF9jb2RlKzEsIHMuZF9kZXNjLm1heF9jb2RlKzEsIG1heF9ibGluZGV4KzEpO1xuICAgIGNvbXByZXNzX2Jsb2NrKHMsIHMuZHluX2x0cmVlLCBzLmR5bl9kdHJlZSk7XG4gIH1cbiAgLy8gQXNzZXJ0IChzLT5jb21wcmVzc2VkX2xlbiA9PSBzLT5iaXRzX3NlbnQsIFwiYmFkIGNvbXByZXNzZWQgc2l6ZVwiKTtcbiAgLyogVGhlIGFib3ZlIGNoZWNrIGlzIG1hZGUgbW9kIDJeMzIsIGZvciBmaWxlcyBsYXJnZXIgdGhhbiA1MTIgTUJcbiAgICogYW5kIHVMb25nIGltcGxlbWVudGVkIG9uIDMyIGJpdHMuXG4gICAqL1xuICBpbml0X2Jsb2NrKHMpO1xuXG4gIGlmIChsYXN0KSB7XG4gICAgYmlfd2luZHVwKHMpO1xuICB9XG4gIC8vIFRyYWNldigoc3RkZXJyLFwiXFxuY29tcHJsZW4gJWx1KCVsdSkgXCIsIHMtPmNvbXByZXNzZWRfbGVuPj4zLFxuICAvLyAgICAgICBzLT5jb21wcmVzc2VkX2xlbi03Kmxhc3QpKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTYXZlIHRoZSBtYXRjaCBpbmZvIGFuZCB0YWxseSB0aGUgZnJlcXVlbmN5IGNvdW50cy4gUmV0dXJuIHRydWUgaWZcbiAqIHRoZSBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gX3RyX3RhbGx5KHMsIGRpc3QsIGxjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHVuc2lnbmVkIGRpc3Q7ICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqL1xuLy8gICAgdW5zaWduZWQgbGM7ICAgIC8qIG1hdGNoIGxlbmd0aC1NSU5fTUFUQ0ggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3Q9PTApICovXG57XG4gIC8vdmFyIG91dF9sZW5ndGgsIGluX2xlbmd0aCwgZGNvZGU7XG5cbiAgcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgcy5sYXN0X2xpdCAqIDJdICAgICA9IChkaXN0ID4+PiA4KSAmIDB4ZmY7XG4gIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyICsgMV0gPSBkaXN0ICYgMHhmZjtcblxuICBzLnBlbmRpbmdfYnVmW3MubF9idWYgKyBzLmxhc3RfbGl0XSA9IGxjICYgMHhmZjtcbiAgcy5sYXN0X2xpdCsrO1xuXG4gIGlmIChkaXN0ID09PSAwKSB7XG4gICAgLyogbGMgaXMgdGhlIHVubWF0Y2hlZCBjaGFyICovXG4gICAgcy5keW5fbHRyZWVbbGMqMl0vKi5GcmVxKi8rKztcbiAgfSBlbHNlIHtcbiAgICBzLm1hdGNoZXMrKztcbiAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgZGlzdC0tOyAgICAgICAgICAgICAvKiBkaXN0ID0gbWF0Y2ggZGlzdGFuY2UgLSAxICovXG4gICAgLy9Bc3NlcnQoKHVzaClkaXN0IDwgKHVzaClNQVhfRElTVChzKSAmJlxuICAgIC8vICAgICAgICh1c2gpbGMgPD0gKHVzaCkoTUFYX01BVENILU1JTl9NQVRDSCkgJiZcbiAgICAvLyAgICAgICAodXNoKWRfY29kZShkaXN0KSA8ICh1c2gpRF9DT0RFUywgIFwiX3RyX3RhbGx5OiBiYWQgbWF0Y2hcIik7XG5cbiAgICBzLmR5bl9sdHJlZVsoX2xlbmd0aF9jb2RlW2xjXStMSVRFUkFMUysxKSAqIDJdLyouRnJlcSovKys7XG4gICAgcy5keW5fZHRyZWVbZF9jb2RlKGRpc3QpICogMl0vKi5GcmVxKi8rKztcbiAgfVxuXG4vLyAoISkgVGhpcyBibG9jayBpcyBkaXNhYmxlZCBpbiB6bGliIGRlZmFpbHRzLFxuLy8gZG9uJ3QgZW5hYmxlIGl0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eVxuXG4vLyNpZmRlZiBUUlVOQ0FURV9CTE9DS1xuLy8gIC8qIFRyeSB0byBndWVzcyBpZiBpdCBpcyBwcm9maXRhYmxlIHRvIHN0b3AgdGhlIGN1cnJlbnQgYmxvY2sgaGVyZSAqL1xuLy8gIGlmICgocy5sYXN0X2xpdCAmIDB4MWZmZikgPT09IDAgJiYgcy5sZXZlbCA+IDIpIHtcbi8vICAgIC8qIENvbXB1dGUgYW4gdXBwZXIgYm91bmQgZm9yIHRoZSBjb21wcmVzc2VkIGxlbmd0aCAqL1xuLy8gICAgb3V0X2xlbmd0aCA9IHMubGFzdF9saXQqODtcbi8vICAgIGluX2xlbmd0aCA9IHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0O1xuLy9cbi8vICAgIGZvciAoZGNvZGUgPSAwOyBkY29kZSA8IERfQ09ERVM7IGRjb2RlKyspIHtcbi8vICAgICAgb3V0X2xlbmd0aCArPSBzLmR5bl9kdHJlZVtkY29kZSoyXS8qLkZyZXEqLyAqICg1ICsgZXh0cmFfZGJpdHNbZGNvZGVdKTtcbi8vICAgIH1cbi8vICAgIG91dF9sZW5ndGggPj4+PSAzO1xuLy8gICAgLy9UcmFjZXYoKHN0ZGVycixcIlxcbmxhc3RfbGl0ICV1LCBpbiAlbGQsIG91dCB+JWxkKCVsZCUlKSBcIixcbi8vICAgIC8vICAgICAgIHMtPmxhc3RfbGl0LCBpbl9sZW5ndGgsIG91dF9sZW5ndGgsXG4vLyAgICAvLyAgICAgICAxMDBMIC0gb3V0X2xlbmd0aCoxMDBML2luX2xlbmd0aCkpO1xuLy8gICAgaWYgKHMubWF0Y2hlcyA8IChzLmxhc3RfbGl0Pj4xKS8qaW50IC8yKi8gJiYgb3V0X2xlbmd0aCA8IChpbl9sZW5ndGg+PjEpLyppbnQgLzIqLykge1xuLy8gICAgICByZXR1cm4gdHJ1ZTtcbi8vICAgIH1cbi8vICB9XG4vLyNlbmRpZlxuXG4gIHJldHVybiAocy5sYXN0X2xpdCA9PT0gcy5saXRfYnVmc2l6ZS0xKTtcbiAgLyogV2UgYXZvaWQgZXF1YWxpdHkgd2l0aCBsaXRfYnVmc2l6ZSBiZWNhdXNlIG9mIHdyYXBhcm91bmQgYXQgNjRLXG4gICAqIG9uIDE2IGJpdCBtYWNoaW5lcyBhbmQgYmVjYXVzZSBzdG9yZWQgYmxvY2tzIGFyZSByZXN0cmljdGVkIHRvXG4gICAqIDY0Sy0xIGJ5dGVzLlxuICAgKi9cbn1cblxuZXhwb3J0cy5fdHJfaW5pdCAgPSBfdHJfaW5pdDtcbmV4cG9ydHMuX3RyX3N0b3JlZF9ibG9jayA9IF90cl9zdG9yZWRfYmxvY2s7XG5leHBvcnRzLl90cl9mbHVzaF9ibG9jayAgPSBfdHJfZmx1c2hfYmxvY2s7XG5leHBvcnRzLl90cl90YWxseSA9IF90cl90YWxseTtcbmV4cG9ydHMuX3RyX2FsaWduID0gX3RyX2FsaWduO1xufSx7XCIuLi91dGlscy9jb21tb25cIjoyN31dLDM5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuXG5mdW5jdGlvbiBaU3RyZWFtKCkge1xuICAvKiBuZXh0IGlucHV0IGJ5dGUgKi9cbiAgdGhpcy5pbnB1dCA9IG51bGw7IC8vIEpTIHNwZWNpZmljLCBiZWNhdXNlIHdlIGhhdmUgbm8gcG9pbnRlcnNcbiAgdGhpcy5uZXh0X2luID0gMDtcbiAgLyogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBpbnB1dCAqL1xuICB0aGlzLmF2YWlsX2luID0gMDtcbiAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovXG4gIHRoaXMudG90YWxfaW4gPSAwO1xuICAvKiBuZXh0IG91dHB1dCBieXRlIHNob3VsZCBiZSBwdXQgdGhlcmUgKi9cbiAgdGhpcy5vdXRwdXQgPSBudWxsOyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzXG4gIHRoaXMubmV4dF9vdXQgPSAwO1xuICAvKiByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBvdXRwdXQgKi9cbiAgdGhpcy5hdmFpbF9vdXQgPSAwO1xuICAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqL1xuICB0aGlzLnRvdGFsX291dCA9IDA7XG4gIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqL1xuICB0aGlzLm1zZyA9ICcnLypaX05VTEwqLztcbiAgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovXG4gIHRoaXMuc3RhdGUgPSBudWxsO1xuICAvKiBiZXN0IGd1ZXNzIGFib3V0IHRoZSBkYXRhIHR5cGU6IGJpbmFyeSBvciB0ZXh0ICovXG4gIHRoaXMuZGF0YV90eXBlID0gMi8qWl9VTktOT1dOKi87XG4gIC8qIGFkbGVyMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovXG4gIHRoaXMuYWRsZXIgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFpTdHJlYW07XG59LHt9XX0se30sWzldKVxuKDkpXG59KSk7XG4iLCIvKiB4bHN4LmpzIChDKSAyMDEzLXByZXNlbnQgU2hlZXRKUyAtLSBodHRwOi8vc2hlZXRqcy5jb20gKi9cbi8qIHZpbTogc2V0IHRzPTI6ICovXG4vKmV4cG9ydGVkIFhMU1ggKi9cbi8qZ2xvYmFsIGdsb2JhbCwgZXhwb3J0cywgbW9kdWxlLCByZXF1aXJlOmZhbHNlLCBwcm9jZXNzOmZhbHNlLCBCdWZmZXI6ZmFsc2UsIEFycmF5QnVmZmVyOmZhbHNlICovXG52YXIgWExTWCA9IHt9O1xuKGZ1bmN0aW9uIG1ha2VfeGxzeChYTFNYKXtcblhMU1gudmVyc2lvbiA9ICcwLjExLjE5JztcbnZhciBjdXJyZW50X2NvZGVwYWdlID0gMTIwMCwgY3VycmVudF9hbnNpID0gMTI1Mjtcbi8qZ2xvYmFsIGNwdGFibGU6dHJ1ZSAqL1xuaWYodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0aWYodHlwZW9mIGNwdGFibGUgPT09ICd1bmRlZmluZWQnKSBnbG9iYWwuY3B0YWJsZSA9IHJlcXVpcmUoJy4vZGlzdC9jcGV4Y2VsLmpzJyk7XG59XG5cbnZhciBWQUxJRF9BTlNJID0gWyA4NzQsIDkzMiwgOTM2LCA5NDksIDk1MCBdO1xuZm9yKHZhciBpID0gMDsgaSA8PSA4OyArK2kpIFZBTElEX0FOU0kucHVzaCgxMjUwICsgaSk7XG4vKiBFQ01BLTM3NiBQYXJ0IEkgMTguNC4xIGNoYXJzZXQgdG8gY29kZXBhZ2UgbWFwcGluZyAqL1xudmFyIENTMkNQID0gKHtcbjA6ICAgIDEyNTIsIC8qIEFOU0kgKi9cbjE6ICAgNjUwMDEsIC8qIERFRkFVTFQgKi9cbjI6ICAgNjUwMDEsIC8qIFNZTUJPTCAqL1xuNzc6ICAxMDAwMCwgLyogTUFDICovXG4xMjg6ICAgOTMyLCAvKiBTSElGVEpJUyAqL1xuMTI5OiAgIDk0OSwgLyogSEFOR1VMICovXG4xMzA6ICAxMzYxLCAvKiBKT0hBQiAqL1xuMTM0OiAgIDkzNiwgLyogR0IyMzEyICovXG4xMzY6ICAgOTUwLCAvKiBDSElORVNFQklHNSAqL1xuMTYxOiAgMTI1MywgLyogR1JFRUsgKi9cbjE2MjogIDEyNTQsIC8qIFRVUktJU0ggKi9cbjE2MzogIDEyNTgsIC8qIFZJRVROQU1FU0UgKi9cbjE3NzogIDEyNTUsIC8qIEhFQlJFVyAqL1xuMTc4OiAgMTI1NiwgLyogQVJBQklDICovXG4xODY6ICAxMjU3LCAvKiBCQUxUSUMgKi9cbjIwNDogIDEyNTEsIC8qIFJVU1NJQU4gKi9cbjIyMjogICA4NzQsIC8qIFRIQUkgKi9cbjIzODogIDEyNTAsIC8qIEVBU1RFVVJPUEUgKi9cbjI1NTogIDEyNTIsIC8qIE9FTSAqL1xuNjk6ICAgNjk2OSAgLyogTUlTQyAqL1xufSk7XG5cbnZhciBzZXRfYW5zaSA9IGZ1bmN0aW9uKGNwKSB7IGlmKFZBTElEX0FOU0kuaW5kZXhPZihjcCkgPT0gLTEpIHJldHVybjsgY3VycmVudF9hbnNpID0gQ1MyQ1BbMF0gPSBjcDsgfTtcbmZ1bmN0aW9uIHJlc2V0X2Fuc2koKSB7IHNldF9hbnNpKDEyNTIpOyB9XG5cbnZhciBzZXRfY3AgPSBmdW5jdGlvbihjcCkgeyBjdXJyZW50X2NvZGVwYWdlID0gY3A7IHNldF9hbnNpKGNwKTsgfTtcbmZ1bmN0aW9uIHJlc2V0X2NwKCkgeyBzZXRfY3AoMTIwMCk7IHJlc2V0X2Fuc2koKTsgfVxuXG5mdW5jdGlvbiBjaGFyX2NvZGVzKGRhdGEpIHsgdmFyIG8gPSBbXTsgZm9yKHZhciBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47ICsraSkgb1tpXSA9IGRhdGEuY2hhckNvZGVBdChpKTsgcmV0dXJuIG87IH1cblxuZnVuY3Rpb24gdXRmMTZsZXJlYWQoZGF0YSkge1xuXHR2YXIgbyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgKGRhdGEubGVuZ3RoPj4xKTsgKytpKSBvW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZShkYXRhLmNoYXJDb2RlQXQoMippKSArIChkYXRhLmNoYXJDb2RlQXQoMippKzEpPDw4KSk7XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiB1dGYxNmJlcmVhZChkYXRhKSB7XG5cdHZhciBvID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCAoZGF0YS5sZW5ndGg+PjEpOyArK2kpIG9baV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGEuY2hhckNvZGVBdCgyKmkrMSkgKyAoZGF0YS5jaGFyQ29kZUF0KDIqaSk8PDgpKTtcblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cblxudmFyIGRlYm9tID0gZnVuY3Rpb24oZGF0YSkge1xuXHR2YXIgYzEgPSBkYXRhLmNoYXJDb2RlQXQoMCksIGMyID0gZGF0YS5jaGFyQ29kZUF0KDEpO1xuXHRpZihjMSA9PSAweEZGICYmIGMyID09IDB4RkUpIHJldHVybiB1dGYxNmxlcmVhZChkYXRhLnNsaWNlKDIpKTtcblx0aWYoYzEgPT0gMHhGRSAmJiBjMiA9PSAweEZGKSByZXR1cm4gdXRmMTZiZXJlYWQoZGF0YS5zbGljZSgyKSk7XG5cdGlmKGMxID09IDB4RkVGRikgcmV0dXJuIGRhdGEuc2xpY2UoMSk7XG5cdHJldHVybiBkYXRhO1xufTtcblxudmFyIF9nZXRjaGFyID0gZnVuY3Rpb24gX2djMSh4KSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHgpOyB9O1xuaWYodHlwZW9mIGNwdGFibGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdHNldF9jcCA9IGZ1bmN0aW9uKGNwKSB7IGN1cnJlbnRfY29kZXBhZ2UgPSBjcDsgfTtcblx0ZGVib20gPSBmdW5jdGlvbihkYXRhKSB7XG5cdFx0aWYoZGF0YS5jaGFyQ29kZUF0KDApID09PSAweEZGICYmIGRhdGEuY2hhckNvZGVBdCgxKSA9PT0gMHhGRSkgeyByZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCwgY2hhcl9jb2RlcyhkYXRhLnNsaWNlKDIpKSk7IH1cblx0XHRyZXR1cm4gZGF0YTtcblx0fTtcblx0X2dldGNoYXIgPSBmdW5jdGlvbiBfZ2MyKHgpIHtcblx0XHRpZihjdXJyZW50X2NvZGVwYWdlID09PSAxMjAwKSByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh4KTtcblx0XHRyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoY3VycmVudF9jb2RlcGFnZSwgW3gmMjU1LHg+PjhdKVswXTtcblx0fTtcbn1cbnZhciBERU5TRSA9IG51bGw7XG52YXIgRElGX1hMID0gdHJ1ZTtcbnZhciBCYXNlNjQgPSAoZnVuY3Rpb24gbWFrZV9iNjQoKXtcblx0dmFyIG1hcCA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcblx0cmV0dXJuIHtcblx0XHRlbmNvZGU6IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0XHR2YXIgbyA9IFwiXCI7XG5cdFx0XHR2YXIgYzE9MCwgYzI9MCwgYzM9MCwgZTE9MCwgZTI9MCwgZTM9MCwgZTQ9MDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7ICkge1xuXHRcdFx0XHRjMSA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcblx0XHRcdFx0YzIgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XG5cdFx0XHRcdGMzID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xuXHRcdFx0XHRlMSA9IGMxID4+IDI7XG5cdFx0XHRcdGUyID0gKChjMSAmIDMpIDw8IDQpIHwgKGMyID4+IDQpO1xuXHRcdFx0XHRlMyA9ICgoYzIgJiAxNSkgPDwgMikgfCAoYzMgPj4gNik7XG5cdFx0XHRcdGU0ID0gYzMgJiA2Mztcblx0XHRcdFx0aWYgKGlzTmFOKGMyKSkgeyBlMyA9IGU0ID0gNjQ7IH1cblx0XHRcdFx0ZWxzZSBpZiAoaXNOYU4oYzMpKSB7IGU0ID0gNjQ7IH1cblx0XHRcdFx0byArPSBtYXAuY2hhckF0KGUxKSArIG1hcC5jaGFyQXQoZTIpICsgbWFwLmNoYXJBdChlMykgKyBtYXAuY2hhckF0KGU0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvO1xuXHRcdH0sXG5cdFx0ZGVjb2RlOiBmdW5jdGlvbiBiNjRfZGVjb2RlKGlucHV0KSB7XG5cdFx0XHR2YXIgbyA9IFwiXCI7XG5cdFx0XHR2YXIgYzE9MCwgYzI9MCwgYzM9MDtcblx0XHRcdHZhciBlMT0wLCBlMj0wLCBlMz0wLCBlND0wO1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL1xcPV0vZywgXCJcIik7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOykge1xuXHRcdFx0XHRlMSA9IG1hcC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcblx0XHRcdFx0ZTIgPSBtYXAuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XG5cdFx0XHRcdGUzID0gbWFwLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xuXHRcdFx0XHRlNCA9IG1hcC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtcblx0XHRcdFx0YzEgPSAoZTEgPDwgMikgfCAoZTIgPj4gNCk7XG5cdFx0XHRcdGMyID0gKChlMiAmIDE1KSA8PCA0KSB8IChlMyA+PiAyKTtcblx0XHRcdFx0YzMgPSAoKGUzICYgMykgPDwgNikgfCBlNDtcblx0XHRcdFx0byArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMxKTtcblx0XHRcdFx0aWYgKGUzICE9PSA2NCkgeyBvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYzIpOyB9XG5cdFx0XHRcdGlmIChlNCAhPT0gNjQpIHsgbyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMzKTsgfVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG87XG5cdFx0fVxuXHR9O1xufSkoKTtcbnZhciBoYXNfYnVmID0gKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKTtcblxuZnVuY3Rpb24gbmV3X3Jhd19idWYobGVuKSB7XG5cdC8qIGpzaGludCAtVzA1NiAqL1xuXHQvLyAkRmxvd0lnbm9yZVxuXHRyZXR1cm4gbmV3IChoYXNfYnVmID8gQnVmZmVyIDogQXJyYXkpKGxlbik7XG5cdC8qIGpzaGludCArVzA1NiAqL1xufVxuXG5mdW5jdGlvbiBzMmEocykge1xuXHRpZihoYXNfYnVmKSByZXR1cm4gbmV3IEJ1ZmZlcihzLCBcImJpbmFyeVwiKTtcblx0cmV0dXJuIHMuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKHgpeyByZXR1cm4geC5jaGFyQ29kZUF0KDApICYgMHhmZjsgfSk7XG59XG5cbmZ1bmN0aW9uIHMyYWIocykge1xuXHRpZih0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gczJhKHMpO1xuXHR2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKHMubGVuZ3RoKSwgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG5cdGZvciAodmFyIGk9MDsgaSE9cy5sZW5ndGg7ICsraSkgdmlld1tpXSA9IHMuY2hhckNvZGVBdChpKSAmIDB4RkY7XG5cdHJldHVybiBidWY7XG59XG5cbmZ1bmN0aW9uIGEycyhkYXRhKSB7XG5cdGlmKEFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBkYXRhLm1hcChfY2hyKS5qb2luKFwiXCIpO1xuXHR2YXIgbyA9IFtdOyBmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgb1tpXSA9IF9jaHIoZGF0YVtpXSk7IHJldHVybiBvLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGEydShkYXRhKSB7XG5cdGlmKHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJykgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWRcIik7XG5cdHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbn1cblxuZnVuY3Rpb24gYWIyYShkYXRhKSB7XG5cdGlmKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAndW5kZWZpbmVkJykgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWRcIik7XG5cdGlmKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgcmV0dXJuIGFiMmEobmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xudmFyIG8gPSBuZXcgQXJyYXkoZGF0YS5sZW5ndGgpO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgb1tpXSA9IGRhdGFbaV07XG5cdHJldHVybiBvO1xufVxuXG52YXIgYmNvbmNhdCA9IGZ1bmN0aW9uKGJ1ZnMpIHsgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgYnVmcyk7IH07XG5cbnZhciBjaHIwID0gL1xcdTAwMDAvZywgY2hyMSA9IC9bXFx1MDAwMS1cXHUwMDA2XS9nO1xuLyogc3NmLmpzIChDKSAyMDEzLXByZXNlbnQgU2hlZXRKUyAtLSBodHRwOi8vc2hlZXRqcy5jb20gKi9cbi8qanNoaW50IC1XMDQxICovXG52YXIgU1NGID0gKHt9KTtcbnZhciBtYWtlX3NzZiA9IGZ1bmN0aW9uIG1ha2Vfc3NmKFNTRil7XG5TU0YudmVyc2lvbiA9ICcwLjEwLjAnO1xuZnVuY3Rpb24gX3N0cnJldih4KSB7IHZhciBvID0gXCJcIiwgaSA9IHgubGVuZ3RoLTE7IHdoaWxlKGk+PTApIG8gKz0geC5jaGFyQXQoaS0tKTsgcmV0dXJuIG87IH1cbmZ1bmN0aW9uIGZpbGwoYyxsKSB7IHZhciBvID0gXCJcIjsgd2hpbGUoby5sZW5ndGggPCBsKSBvKz1jOyByZXR1cm4gbzsgfVxuZnVuY3Rpb24gcGFkMCh2LGQpe3ZhciB0PVwiXCIrdjsgcmV0dXJuIHQubGVuZ3RoPj1kP3Q6ZmlsbCgnMCcsZC10Lmxlbmd0aCkrdDt9XG5mdW5jdGlvbiBwYWRfKHYsZCl7dmFyIHQ9XCJcIit2O3JldHVybiB0Lmxlbmd0aD49ZD90OmZpbGwoJyAnLGQtdC5sZW5ndGgpK3Q7fVxuZnVuY3Rpb24gcnBhZF8odixkKXt2YXIgdD1cIlwiK3Y7IHJldHVybiB0Lmxlbmd0aD49ZD90OnQrZmlsbCgnICcsZC10Lmxlbmd0aCk7fVxuZnVuY3Rpb24gcGFkMHIxKHYsZCl7dmFyIHQ9XCJcIitNYXRoLnJvdW5kKHYpOyByZXR1cm4gdC5sZW5ndGg+PWQ/dDpmaWxsKCcwJyxkLXQubGVuZ3RoKSt0O31cbmZ1bmN0aW9uIHBhZDByMih2LGQpe3ZhciB0PVwiXCIrdjsgcmV0dXJuIHQubGVuZ3RoPj1kP3Q6ZmlsbCgnMCcsZC10Lmxlbmd0aCkrdDt9XG52YXIgcDJfMzIgPSBNYXRoLnBvdygyLDMyKTtcbmZ1bmN0aW9uIHBhZDByKHYsZCl7aWYodj5wMl8zMnx8djwtcDJfMzIpIHJldHVybiBwYWQwcjEodixkKTsgdmFyIGkgPSBNYXRoLnJvdW5kKHYpOyByZXR1cm4gcGFkMHIyKGksZCk7IH1cbmZ1bmN0aW9uIGlzZ2VuZXJhbChzLCBpKSB7IGkgPSBpIHx8IDA7IHJldHVybiBzLmxlbmd0aCA+PSA3ICsgaSAmJiAocy5jaGFyQ29kZUF0KGkpfDMyKSA9PT0gMTAzICYmIChzLmNoYXJDb2RlQXQoaSsxKXwzMikgPT09IDEwMSAmJiAocy5jaGFyQ29kZUF0KGkrMil8MzIpID09PSAxMTAgJiYgKHMuY2hhckNvZGVBdChpKzMpfDMyKSA9PT0gMTAxICYmIChzLmNoYXJDb2RlQXQoaSs0KXwzMikgPT09IDExNCAmJiAocy5jaGFyQ29kZUF0KGkrNSl8MzIpID09PSA5NyAmJiAocy5jaGFyQ29kZUF0KGkrNil8MzIpID09PSAxMDg7IH1cbnZhciBkYXlzID0gW1xuXHRbJ1N1bicsICdTdW5kYXknXSxcblx0WydNb24nLCAnTW9uZGF5J10sXG5cdFsnVHVlJywgJ1R1ZXNkYXknXSxcblx0WydXZWQnLCAnV2VkbmVzZGF5J10sXG5cdFsnVGh1JywgJ1RodXJzZGF5J10sXG5cdFsnRnJpJywgJ0ZyaWRheSddLFxuXHRbJ1NhdCcsICdTYXR1cmRheSddXG5dO1xudmFyIG1vbnRocyA9IFtcblx0WydKJywgJ0phbicsICdKYW51YXJ5J10sXG5cdFsnRicsICdGZWInLCAnRmVicnVhcnknXSxcblx0WydNJywgJ01hcicsICdNYXJjaCddLFxuXHRbJ0EnLCAnQXByJywgJ0FwcmlsJ10sXG5cdFsnTScsICdNYXknLCAnTWF5J10sXG5cdFsnSicsICdKdW4nLCAnSnVuZSddLFxuXHRbJ0onLCAnSnVsJywgJ0p1bHknXSxcblx0WydBJywgJ0F1ZycsICdBdWd1c3QnXSxcblx0WydTJywgJ1NlcCcsICdTZXB0ZW1iZXInXSxcblx0WydPJywgJ09jdCcsICdPY3RvYmVyJ10sXG5cdFsnTicsICdOb3YnLCAnTm92ZW1iZXInXSxcblx0WydEJywgJ0RlYycsICdEZWNlbWJlciddXG5dO1xuZnVuY3Rpb24gaW5pdF90YWJsZSh0KSB7XG5cdHRbMF09ICAnR2VuZXJhbCc7XG5cdHRbMV09ICAnMCc7XG5cdHRbMl09ICAnMC4wMCc7XG5cdHRbM109ICAnIywjIzAnO1xuXHR0WzRdPSAgJyMsIyMwLjAwJztcblx0dFs5XT0gICcwJSc7XG5cdHRbMTBdPSAnMC4wMCUnO1xuXHR0WzExXT0gJzAuMDBFKzAwJztcblx0dFsxMl09ICcjID8vPyc7XG5cdHRbMTNdPSAnIyA/Py8/Pyc7XG5cdHRbMTRdPSAnbS9kL3l5Jztcblx0dFsxNV09ICdkLW1tbS15eSc7XG5cdHRbMTZdPSAnZC1tbW0nO1xuXHR0WzE3XT0gJ21tbS15eSc7XG5cdHRbMThdPSAnaDptbSBBTS9QTSc7XG5cdHRbMTldPSAnaDptbTpzcyBBTS9QTSc7XG5cdHRbMjBdPSAnaDptbSc7XG5cdHRbMjFdPSAnaDptbTpzcyc7XG5cdHRbMjJdPSAnbS9kL3l5IGg6bW0nO1xuXHR0WzM3XT0gJyMsIyMwIDsoIywjIzApJztcblx0dFszOF09ICcjLCMjMCA7W1JlZF0oIywjIzApJztcblx0dFszOV09ICcjLCMjMC4wMDsoIywjIzAuMDApJztcblx0dFs0MF09ICcjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCknO1xuXHR0WzQ1XT0gJ21tOnNzJztcblx0dFs0Nl09ICdbaF06bW06c3MnO1xuXHR0WzQ3XT0gJ21tc3MuMCc7XG5cdHRbNDhdPSAnIyMwLjBFKzAnO1xuXHR0WzQ5XT0gJ0AnO1xuXHR0WzU2XT0gJ1wi5LiK5Y2IL+S4i+WNiCBcImhoXCLmmYJcIm1tXCLliIZcInNzXCLnp5IgXCInO1xuXHR0WzY1NTM1XT0gJ0dlbmVyYWwnO1xufVxuXG52YXIgdGFibGVfZm10ID0ge307XG5pbml0X3RhYmxlKHRhYmxlX2ZtdCk7XG5mdW5jdGlvbiBmcmFjKHgsIEQsIG1peGVkKSB7XG5cdHZhciBzZ24gPSB4IDwgMCA/IC0xIDogMTtcblx0dmFyIEIgPSB4ICogc2duO1xuXHR2YXIgUF8yID0gMCwgUF8xID0gMSwgUCA9IDA7XG5cdHZhciBRXzIgPSAxLCBRXzEgPSAwLCBRID0gMDtcblx0dmFyIEEgPSBNYXRoLmZsb29yKEIpO1xuXHR3aGlsZShRXzEgPCBEKSB7XG5cdFx0QSA9IE1hdGguZmxvb3IoQik7XG5cdFx0UCA9IEEgKiBQXzEgKyBQXzI7XG5cdFx0USA9IEEgKiBRXzEgKyBRXzI7XG5cdFx0aWYoKEIgLSBBKSA8IDAuMDAwMDAwMDUpIGJyZWFrO1xuXHRcdEIgPSAxIC8gKEIgLSBBKTtcblx0XHRQXzIgPSBQXzE7IFBfMSA9IFA7XG5cdFx0UV8yID0gUV8xOyBRXzEgPSBRO1xuXHR9XG5cdGlmKFEgPiBEKSB7IGlmKFFfMSA+IEQpIHsgUSA9IFFfMjsgUCA9IFBfMjsgfSBlbHNlIHsgUSA9IFFfMTsgUCA9IFBfMTsgfSB9XG5cdGlmKCFtaXhlZCkgcmV0dXJuIFswLCBzZ24gKiBQLCBRXTtcblx0dmFyIHEgPSBNYXRoLmZsb29yKHNnbiAqIFAvUSk7XG5cdHJldHVybiBbcSwgc2duKlAgLSBxKlEsIFFdO1xufVxuZnVuY3Rpb24gcGFyc2VfZGF0ZV9jb2RlKHYsb3B0cyxiMikge1xuXHRpZih2ID4gMjk1ODQ2NSB8fCB2IDwgMCkgcmV0dXJuIG51bGw7XG5cdHZhciBkYXRlID0gKHZ8MCksIHRpbWUgPSBNYXRoLmZsb29yKDg2NDAwICogKHYgLSBkYXRlKSksIGRvdz0wO1xuXHR2YXIgZG91dD1bXTtcblx0dmFyIG91dD17RDpkYXRlLCBUOnRpbWUsIHU6ODY0MDAqKHYtZGF0ZSktdGltZSx5OjAsbTowLGQ6MCxIOjAsTTowLFM6MCxxOjB9O1xuXHRpZihNYXRoLmFicyhvdXQudSkgPCAxZS02KSBvdXQudSA9IDA7XG5cdGlmKG9wdHMgJiYgb3B0cy5kYXRlMTkwNCkgZGF0ZSArPSAxNDYyO1xuXHRpZihvdXQudSA+IDAuOTk5OSkge1xuXHRcdG91dC51ID0gMDtcblx0XHRpZigrK3RpbWUgPT0gODY0MDApIHsgb3V0LlQgPSB0aW1lID0gMDsgKytkYXRlOyArK291dC5EOyB9XG5cdH1cblx0aWYoZGF0ZSA9PT0gNjApIHtkb3V0ID0gYjIgPyBbMTMxNywxMCwyOV0gOiBbMTkwMCwyLDI5XTsgZG93PTM7fVxuXHRlbHNlIGlmKGRhdGUgPT09IDApIHtkb3V0ID0gYjIgPyBbMTMxNyw4LDI5XSA6IFsxOTAwLDEsMF07IGRvdz02O31cblx0ZWxzZSB7XG5cdFx0aWYoZGF0ZSA+IDYwKSAtLWRhdGU7XG5cdFx0LyogMSA9IEphbiAxIDE5MDAgaW4gR3JlZ29yaWFuICovXG5cdFx0dmFyIGQgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxKTtcblx0XHRkLnNldERhdGUoZC5nZXREYXRlKCkgKyBkYXRlIC0gMSk7XG5cdFx0ZG91dCA9IFtkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSsxLGQuZ2V0RGF0ZSgpXTtcblx0XHRkb3cgPSBkLmdldERheSgpO1xuXHRcdGlmKGRhdGUgPCA2MCkgZG93ID0gKGRvdyArIDYpICUgNztcblx0XHRpZihiMikgZG93ID0gZml4X2hpanJpKGQsIGRvdXQpO1xuXHR9XG5cdG91dC55ID0gZG91dFswXTsgb3V0Lm0gPSBkb3V0WzFdOyBvdXQuZCA9IGRvdXRbMl07XG5cdG91dC5TID0gdGltZSAlIDYwOyB0aW1lID0gTWF0aC5mbG9vcih0aW1lIC8gNjApO1xuXHRvdXQuTSA9IHRpbWUgJSA2MDsgdGltZSA9IE1hdGguZmxvb3IodGltZSAvIDYwKTtcblx0b3V0LkggPSB0aW1lO1xuXHRvdXQucSA9IGRvdztcblx0cmV0dXJuIG91dDtcbn1cblNTRi5wYXJzZV9kYXRlX2NvZGUgPSBwYXJzZV9kYXRlX2NvZGU7XG52YXIgYmFzZWRhdGUgPSBuZXcgRGF0ZSgxODk5LCAxMSwgMzEsIDAsIDAsIDApO1xudmFyIGRudGhyZXNoID0gYmFzZWRhdGUuZ2V0VGltZSgpO1xudmFyIGJhc2UxOTA0ID0gbmV3IERhdGUoMTkwMCwgMiwgMSwgMCwgMCwgMCk7XG5mdW5jdGlvbiBkYXRlbnVtX2xvY2FsKHYsIGRhdGUxOTA0KSB7XG5cdHZhciBlcG9jaCA9IHYuZ2V0VGltZSgpO1xuXHRpZihkYXRlMTkwNCkgZXBvY2ggLT0gMTQ2MSoyNCo2MCo2MCoxMDAwO1xuXHRlbHNlIGlmKHYgPj0gYmFzZTE5MDQpIGVwb2NoICs9IDI0KjYwKjYwKjEwMDA7XG5cdHJldHVybiAoZXBvY2ggLSAoZG50aHJlc2ggKyAodi5nZXRUaW1lem9uZU9mZnNldCgpIC0gYmFzZWRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiA2MDAwMCkpIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApO1xufVxuZnVuY3Rpb24gZ2VuZXJhbF9mbXRfaW50KHYpIHsgcmV0dXJuIHYudG9TdHJpbmcoMTApOyB9XG5TU0YuX2dlbmVyYWxfaW50ID0gZ2VuZXJhbF9mbXRfaW50O1xudmFyIGdlbmVyYWxfZm10X251bSA9IChmdW5jdGlvbiBtYWtlX2dlbmVyYWxfZm10X251bSgpIHtcbnZhciBnbnIxID0gL1xcLihcXGQqWzEtOV0pMCskLywgZ25yMiA9IC9cXC4wKiQvLCBnbnI0ID0gL1xcLihcXGQqWzEtOV0pMCsvLCBnbnI1ID0gL1xcLjAqW0VlXS8sIGducjYgPSAvKEVbKy1dKShcXGQpJC87XG5mdW5jdGlvbiBnZm4yKHYpIHtcblx0dmFyIHcgPSAodjwwPzEyOjExKTtcblx0dmFyIG8gPSBnZm41KHYudG9GaXhlZCgxMikpOyBpZihvLmxlbmd0aCA8PSB3KSByZXR1cm4gbztcblx0byA9IHYudG9QcmVjaXNpb24oMTApOyBpZihvLmxlbmd0aCA8PSB3KSByZXR1cm4gbztcblx0cmV0dXJuIHYudG9FeHBvbmVudGlhbCg1KTtcbn1cbmZ1bmN0aW9uIGdmbjModikge1xuXHR2YXIgbyA9IHYudG9GaXhlZCgxMSkucmVwbGFjZShnbnIxLFwiLiQxXCIpO1xuXHRpZihvLmxlbmd0aCA+ICh2PDA/MTI6MTEpKSBvID0gdi50b1ByZWNpc2lvbig2KTtcblx0cmV0dXJuIG87XG59XG5mdW5jdGlvbiBnZm40KG8pIHtcblx0Zm9yKHZhciBpID0gMDsgaSAhPSBvLmxlbmd0aDsgKytpKSBpZigoby5jaGFyQ29kZUF0KGkpIHwgMHgyMCkgPT09IDEwMSkgcmV0dXJuIG8ucmVwbGFjZShnbnI0LFwiLiQxXCIpLnJlcGxhY2UoZ25yNSxcIkVcIikucmVwbGFjZShcImVcIixcIkVcIikucmVwbGFjZShnbnI2LFwiJDEwJDJcIik7XG5cdHJldHVybiBvO1xufVxuZnVuY3Rpb24gZ2ZuNShvKSB7XG5cdHJldHVybiBvLmluZGV4T2YoXCIuXCIpID4gLTEgPyBvLnJlcGxhY2UoZ25yMixcIlwiKS5yZXBsYWNlKGducjEsXCIuJDFcIikgOiBvO1xufVxucmV0dXJuIGZ1bmN0aW9uIGdlbmVyYWxfZm10X251bSh2KSB7XG5cdHZhciBWID0gTWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyh2KSkqTWF0aC5MT0cxMEUpLCBvO1xuXHRpZihWID49IC00ICYmIFYgPD0gLTEpIG8gPSB2LnRvUHJlY2lzaW9uKDEwK1YpO1xuXHRlbHNlIGlmKE1hdGguYWJzKFYpIDw9IDkpIG8gPSBnZm4yKHYpO1xuXHRlbHNlIGlmKFYgPT09IDEwKSBvID0gdi50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik7XG5cdGVsc2UgbyA9IGdmbjModik7XG5cdHJldHVybiBnZm41KGdmbjQobykpO1xufTt9KSgpO1xuU1NGLl9nZW5lcmFsX251bSA9IGdlbmVyYWxfZm10X251bTtcbmZ1bmN0aW9uIGdlbmVyYWxfZm10KHYsIG9wdHMpIHtcblx0c3dpdGNoKHR5cGVvZiB2KSB7XG5cdFx0Y2FzZSAnc3RyaW5nJzogcmV0dXJuIHY7XG5cdFx0Y2FzZSAnYm9vbGVhbic6IHJldHVybiB2ID8gXCJUUlVFXCIgOiBcIkZBTFNFXCI7XG5cdFx0Y2FzZSAnbnVtYmVyJzogcmV0dXJuICh2fDApID09PSB2ID8gZ2VuZXJhbF9mbXRfaW50KHYpIDogZ2VuZXJhbF9mbXRfbnVtKHYpO1xuXHRcdGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiBcIlwiO1xuXHRcdGNhc2UgJ29iamVjdCc6XG5cdFx0XHRpZih2ID09IG51bGwpIHJldHVybiBcIlwiO1xuXHRcdFx0aWYodiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBmb3JtYXQoMTQsIGRhdGVudW1fbG9jYWwodiwgb3B0cyAmJiBvcHRzLmRhdGUxOTA0KSwgb3B0cyk7XG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6IFwiICsgdik7XG59XG5TU0YuX2dlbmVyYWwgPSBnZW5lcmFsX2ZtdDtcbmZ1bmN0aW9uIGZpeF9oaWpyaSgpIHsgcmV0dXJuIDA7IH1cbi8qanNoaW50IC1XMDg2ICovXG5mdW5jdGlvbiB3cml0ZV9kYXRlKHR5cGUsIGZtdCwgdmFsLCBzczApIHtcblx0dmFyIG89XCJcIiwgc3M9MCwgdHQ9MCwgeSA9IHZhbC55LCBvdXQsIG91dGwgPSAwO1xuXHRzd2l0Y2godHlwZSkge1xuXHRcdGNhc2UgOTg6IC8qICdiJyBidWRkaGlzdCB5ZWFyICovXG5cdFx0XHR5ID0gdmFsLnkgKyA1NDM7XG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0Y2FzZSAxMjE6IC8qICd5JyB5ZWFyICovXG5cdFx0c3dpdGNoKGZtdC5sZW5ndGgpIHtcblx0XHRcdGNhc2UgMTogY2FzZSAyOiBvdXQgPSB5ICUgMTAwOyBvdXRsID0gMjsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBvdXQgPSB5ICUgMTAwMDA7IG91dGwgPSA0OyBicmVhaztcblx0XHR9IGJyZWFrO1xuXHRcdGNhc2UgMTA5OiAvKiAnbScgbW9udGggKi9cblx0XHRzd2l0Y2goZm10Lmxlbmd0aCkge1xuXHRcdFx0Y2FzZSAxOiBjYXNlIDI6IG91dCA9IHZhbC5tOyBvdXRsID0gZm10Lmxlbmd0aDsgYnJlYWs7XG5cdFx0XHRjYXNlIDM6IHJldHVybiBtb250aHNbdmFsLm0tMV1bMV07XG5cdFx0XHRjYXNlIDU6IHJldHVybiBtb250aHNbdmFsLm0tMV1bMF07XG5cdFx0XHRkZWZhdWx0OiByZXR1cm4gbW9udGhzW3ZhbC5tLTFdWzJdO1xuXHRcdH0gYnJlYWs7XG5cdFx0Y2FzZSAxMDA6IC8qICdkJyBkYXkgKi9cblx0XHRzd2l0Y2goZm10Lmxlbmd0aCkge1xuXHRcdFx0Y2FzZSAxOiBjYXNlIDI6IG91dCA9IHZhbC5kOyBvdXRsID0gZm10Lmxlbmd0aDsgYnJlYWs7XG5cdFx0XHRjYXNlIDM6IHJldHVybiBkYXlzW3ZhbC5xXVswXTtcblx0XHRcdGRlZmF1bHQ6IHJldHVybiBkYXlzW3ZhbC5xXVsxXTtcblx0XHR9IGJyZWFrO1xuXHRcdGNhc2UgMTA0OiAvKiAnaCcgMTItaG91ciAqL1xuXHRcdHN3aXRjaChmbXQubGVuZ3RoKSB7XG5cdFx0XHRjYXNlIDE6IGNhc2UgMjogb3V0ID0gMSsodmFsLkgrMTEpJTEyOyBvdXRsID0gZm10Lmxlbmd0aDsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyAnYmFkIGhvdXIgZm9ybWF0OiAnICsgZm10O1xuXHRcdH0gYnJlYWs7XG5cdFx0Y2FzZSA3MjogLyogJ0gnIDI0LWhvdXIgKi9cblx0XHRzd2l0Y2goZm10Lmxlbmd0aCkge1xuXHRcdFx0Y2FzZSAxOiBjYXNlIDI6IG91dCA9IHZhbC5IOyBvdXRsID0gZm10Lmxlbmd0aDsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyAnYmFkIGhvdXIgZm9ybWF0OiAnICsgZm10O1xuXHRcdH0gYnJlYWs7XG5cdFx0Y2FzZSA3NzogLyogJ00nIG1pbnV0ZXMgKi9cblx0XHRzd2l0Y2goZm10Lmxlbmd0aCkge1xuXHRcdFx0Y2FzZSAxOiBjYXNlIDI6IG91dCA9IHZhbC5NOyBvdXRsID0gZm10Lmxlbmd0aDsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyAnYmFkIG1pbnV0ZSBmb3JtYXQ6ICcgKyBmbXQ7XG5cdFx0fSBicmVhaztcblx0XHRjYXNlIDExNTogLyogJ3MnIHNlY29uZHMgKi9cblx0XHRcdGlmKGZtdCAhPSAncycgJiYgZm10ICE9ICdzcycgJiYgZm10ICE9ICcuMCcgJiYgZm10ICE9ICcuMDAnICYmIGZtdCAhPSAnLjAwMCcpIHRocm93ICdiYWQgc2Vjb25kIGZvcm1hdDogJyArIGZtdDtcblx0XHRcdGlmKHZhbC51ID09PSAwICYmIChmbXQgPT0gXCJzXCIgfHwgZm10ID09IFwic3NcIikpIHJldHVybiBwYWQwKHZhbC5TLCBmbXQubGVuZ3RoKTtcbmlmKHNzMCA+PSAyKSB0dCA9IHNzMCA9PT0gMyA/IDEwMDAgOiAxMDA7XG5cdFx0XHRlbHNlIHR0ID0gc3MwID09PSAxID8gMTAgOiAxO1xuXHRcdFx0c3MgPSBNYXRoLnJvdW5kKCh0dCkqKHZhbC5TICsgdmFsLnUpKTtcblx0XHRcdGlmKHNzID49IDYwKnR0KSBzcyA9IDA7XG5cdFx0XHRpZihmbXQgPT09ICdzJykgcmV0dXJuIHNzID09PSAwID8gXCIwXCIgOiBcIlwiK3NzL3R0O1xuXHRcdFx0byA9IHBhZDAoc3MsMiArIHNzMCk7XG5cdFx0XHRpZihmbXQgPT09ICdzcycpIHJldHVybiBvLnN1YnN0cigwLDIpO1xuXHRcdFx0cmV0dXJuIFwiLlwiICsgby5zdWJzdHIoMixmbXQubGVuZ3RoLTEpO1xuXHRcdGNhc2UgOTA6IC8qICdaJyBhYnNvbHV0ZSB0aW1lICovXG5cdFx0c3dpdGNoKGZtdCkge1xuXHRcdFx0Y2FzZSAnW2hdJzogY2FzZSAnW2hoXSc6IG91dCA9IHZhbC5EKjI0K3ZhbC5IOyBicmVhaztcblx0XHRcdGNhc2UgJ1ttXSc6IGNhc2UgJ1ttbV0nOiBvdXQgPSAodmFsLkQqMjQrdmFsLkgpKjYwK3ZhbC5NOyBicmVhaztcblx0XHRcdGNhc2UgJ1tzXSc6IGNhc2UgJ1tzc10nOiBvdXQgPSAoKHZhbC5EKjI0K3ZhbC5IKSo2MCt2YWwuTSkqNjArTWF0aC5yb3VuZCh2YWwuUyt2YWwudSk7IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgJ2JhZCBhYnN0aW1lIGZvcm1hdDogJyArIGZtdDtcblx0XHR9IG91dGwgPSBmbXQubGVuZ3RoID09PSAzID8gMSA6IDI7IGJyZWFrO1xuXHRcdGNhc2UgMTAxOiAvKiAnZScgZXJhICovXG5cdFx0XHRvdXQgPSB5OyBvdXRsID0gMTtcblx0fVxuXHRpZihvdXRsID4gMCkgcmV0dXJuIHBhZDAob3V0LCBvdXRsKTsgZWxzZSByZXR1cm4gXCJcIjtcbn1cbi8qanNoaW50ICtXMDg2ICovXG5mdW5jdGlvbiBjb21tYWlmeShzKSB7XG5cdHZhciB3ID0gMztcblx0aWYocy5sZW5ndGggPD0gdykgcmV0dXJuIHM7XG5cdHZhciBqID0gKHMubGVuZ3RoICUgdyksIG8gPSBzLnN1YnN0cigwLGopO1xuXHRmb3IoOyBqIT1zLmxlbmd0aDsgais9dykgbys9KG8ubGVuZ3RoID4gMCA/IFwiLFwiIDogXCJcIikgKyBzLnN1YnN0cihqLHcpO1xuXHRyZXR1cm4gbztcbn1cbnZhciB3cml0ZV9udW0gPSAoZnVuY3Rpb24gbWFrZV93cml0ZV9udW0oKXtcbnZhciBwY3QxID0gLyUvZztcbmZ1bmN0aW9uIHdyaXRlX251bV9wY3QodHlwZSwgZm10LCB2YWwpe1xuXHR2YXIgc2ZtdCA9IGZtdC5yZXBsYWNlKHBjdDEsXCJcIiksIG11bCA9IGZtdC5sZW5ndGggLSBzZm10Lmxlbmd0aDtcblx0cmV0dXJuIHdyaXRlX251bSh0eXBlLCBzZm10LCB2YWwgKiBNYXRoLnBvdygxMCwyKm11bCkpICsgZmlsbChcIiVcIixtdWwpO1xufVxuZnVuY3Rpb24gd3JpdGVfbnVtX2NtKHR5cGUsIGZtdCwgdmFsKXtcblx0dmFyIGlkeCA9IGZtdC5sZW5ndGggLSAxO1xuXHR3aGlsZShmbXQuY2hhckNvZGVBdChpZHgtMSkgPT09IDQ0KSAtLWlkeDtcblx0cmV0dXJuIHdyaXRlX251bSh0eXBlLCBmbXQuc3Vic3RyKDAsaWR4KSwgdmFsIC8gTWF0aC5wb3coMTAsMyooZm10Lmxlbmd0aC1pZHgpKSk7XG59XG5mdW5jdGlvbiB3cml0ZV9udW1fZXhwKGZtdCwgdmFsKXtcblx0dmFyIG87XG5cdHZhciBpZHggPSBmbXQuaW5kZXhPZihcIkVcIikgLSBmbXQuaW5kZXhPZihcIi5cIikgLSAxO1xuXHRpZihmbXQubWF0Y2goL14jKzAuMEVcXCswJC8pKSB7XG5cdFx0aWYodmFsID09IDApIHJldHVybiBcIjAuMEUrMFwiO1xuXHRcdGVsc2UgaWYodmFsIDwgMCkgcmV0dXJuIFwiLVwiICsgd3JpdGVfbnVtX2V4cChmbXQsIC12YWwpO1xuXHRcdHZhciBwZXJpb2QgPSBmbXQuaW5kZXhPZihcIi5cIik7IGlmKHBlcmlvZCA9PT0gLTEpIHBlcmlvZD1mbXQuaW5kZXhPZignRScpO1xuXHRcdHZhciBlZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsKSpNYXRoLkxPRzEwRSklcGVyaW9kO1xuXHRcdGlmKGVlIDwgMCkgZWUgKz0gcGVyaW9kO1xuXHRcdG8gPSAodmFsL01hdGgucG93KDEwLGVlKSkudG9QcmVjaXNpb24oaWR4KzErKHBlcmlvZCtlZSklcGVyaW9kKTtcblx0XHRpZihvLmluZGV4T2YoXCJlXCIpID09PSAtMSkge1xuXHRcdFx0dmFyIGZha2VlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWwpKk1hdGguTE9HMTBFKTtcblx0XHRcdGlmKG8uaW5kZXhPZihcIi5cIikgPT09IC0xKSBvID0gby5jaGFyQXQoMCkgKyBcIi5cIiArIG8uc3Vic3RyKDEpICsgXCJFK1wiICsgKGZha2VlIC0gby5sZW5ndGgrZWUpO1xuXHRcdFx0ZWxzZSBvICs9IFwiRStcIiArIChmYWtlZSAtIGVlKTtcblx0XHRcdHdoaWxlKG8uc3Vic3RyKDAsMikgPT09IFwiMC5cIikge1xuXHRcdFx0XHRvID0gby5jaGFyQXQoMCkgKyBvLnN1YnN0cigyLHBlcmlvZCkgKyBcIi5cIiArIG8uc3Vic3RyKDIrcGVyaW9kKTtcblx0XHRcdFx0byA9IG8ucmVwbGFjZSgvXjArKFsxLTldKS8sXCIkMVwiKS5yZXBsYWNlKC9eMCtcXC4vLFwiMC5cIik7XG5cdFx0XHR9XG5cdFx0XHRvID0gby5yZXBsYWNlKC9cXCstLyxcIi1cIik7XG5cdFx0fVxuXHRcdG8gPSBvLnJlcGxhY2UoL14oWystXT8pKFxcZCopXFwuKFxcZCopW0VlXS8sZnVuY3Rpb24oJCQsJDEsJDIsJDMpIHsgcmV0dXJuICQxICsgJDIgKyAkMy5zdWJzdHIoMCwocGVyaW9kK2VlKSVwZXJpb2QpICsgXCIuXCIgKyAkMy5zdWJzdHIoZWUpICsgXCJFXCI7IH0pO1xuXHR9IGVsc2UgbyA9IHZhbC50b0V4cG9uZW50aWFsKGlkeCk7XG5cdGlmKGZtdC5tYXRjaCgvRVxcKzAwJC8pICYmIG8ubWF0Y2goL2VbKy1dXFxkJC8pKSBvID0gby5zdWJzdHIoMCxvLmxlbmd0aC0xKSArIFwiMFwiICsgby5jaGFyQXQoby5sZW5ndGgtMSk7XG5cdGlmKGZtdC5tYXRjaCgvRVxcLS8pICYmIG8ubWF0Y2goL2VcXCsvKSkgbyA9IG8ucmVwbGFjZSgvZVxcKy8sXCJlXCIpO1xuXHRyZXR1cm4gby5yZXBsYWNlKFwiZVwiLFwiRVwiKTtcbn1cbnZhciBmcmFjMSA9IC8jIChcXD8rKSggPylcXC8oID8pKFxcZCspLztcbmZ1bmN0aW9uIHdyaXRlX251bV9mMShyLCBhdmFsLCBzaWduKSB7XG5cdHZhciBkZW4gPSBwYXJzZUludChyWzRdLDEwKSwgcnIgPSBNYXRoLnJvdW5kKGF2YWwgKiBkZW4pLCBiYXNlID0gTWF0aC5mbG9vcihyci9kZW4pO1xuXHR2YXIgbXluID0gKHJyIC0gYmFzZSpkZW4pLCBteWQgPSBkZW47XG5cdHJldHVybiBzaWduICsgKGJhc2UgPT09IDAgPyBcIlwiIDogXCJcIitiYXNlKSArIFwiIFwiICsgKG15biA9PT0gMCA/IGZpbGwoXCIgXCIsIHJbMV0ubGVuZ3RoICsgMSArIHJbNF0ubGVuZ3RoKSA6IHBhZF8obXluLHJbMV0ubGVuZ3RoKSArIHJbMl0gKyBcIi9cIiArIHJbM10gKyBwYWQwKG15ZCxyWzRdLmxlbmd0aCkpO1xufVxuZnVuY3Rpb24gd3JpdGVfbnVtX2YyKHIsIGF2YWwsIHNpZ24pIHtcblx0cmV0dXJuIHNpZ24gKyAoYXZhbCA9PT0gMCA/IFwiXCIgOiBcIlwiK2F2YWwpICsgZmlsbChcIiBcIiwgclsxXS5sZW5ndGggKyAyICsgcls0XS5sZW5ndGgpO1xufVxudmFyIGRlYzEgPSAvXiMqMCpcXC4oWzAjXSspLztcbnZhciBjbG9zZXBhcmVuID0gL1xcKS4qWzAjXS87XG52YXIgcGhvbmUgPSAvXFwoIyMjXFwpICMjI1xcXFw/LSMjIyMvO1xuZnVuY3Rpb24gaGFzaHEoc3RyKSB7XG5cdHZhciBvID0gXCJcIiwgY2M7XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gc3RyLmxlbmd0aDsgKytpKSBzd2l0Y2goKGNjPXN0ci5jaGFyQ29kZUF0KGkpKSkge1xuXHRcdGNhc2UgMzU6IGJyZWFrO1xuXHRcdGNhc2UgNjM6IG8rPSBcIiBcIjsgYnJlYWs7XG5cdFx0Y2FzZSA0ODogbys9IFwiMFwiOyBicmVhaztcblx0XHRkZWZhdWx0OiBvKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjYyk7XG5cdH1cblx0cmV0dXJuIG87XG59XG5mdW5jdGlvbiBybmQodmFsLCBkKSB7IHZhciBkZCA9IE1hdGgucG93KDEwLGQpOyByZXR1cm4gXCJcIisoTWF0aC5yb3VuZCh2YWwgKiBkZCkvZGQpOyB9XG5mdW5jdGlvbiBkZWModmFsLCBkKSB7XG5cdGlmIChkIDwgKCcnICsgTWF0aC5yb3VuZCgodmFsLU1hdGguZmxvb3IodmFsKSkqTWF0aC5wb3coMTAsZCkpKS5sZW5ndGgpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXHRyZXR1cm4gTWF0aC5yb3VuZCgodmFsLU1hdGguZmxvb3IodmFsKSkqTWF0aC5wb3coMTAsZCkpO1xufVxuZnVuY3Rpb24gY2FycnkodmFsLCBkKSB7XG5cdGlmIChkIDwgKCcnICsgTWF0aC5yb3VuZCgodmFsLU1hdGguZmxvb3IodmFsKSkqTWF0aC5wb3coMTAsZCkpKS5sZW5ndGgpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGZscih2YWwpIHsgaWYodmFsIDwgMjE0NzQ4MzY0NyAmJiB2YWwgPiAtMjE0NzQ4MzY0OCkgcmV0dXJuIFwiXCIrKHZhbCA+PSAwID8gKHZhbHwwKSA6ICh2YWwtMXwwKSk7IHJldHVybiBcIlwiK01hdGguZmxvb3IodmFsKTsgfVxuZnVuY3Rpb24gd3JpdGVfbnVtX2ZsdCh0eXBlLCBmbXQsIHZhbCkge1xuXHRpZih0eXBlLmNoYXJDb2RlQXQoMCkgPT09IDQwICYmICFmbXQubWF0Y2goY2xvc2VwYXJlbikpIHtcblx0XHR2YXIgZmZtdCA9IGZtdC5yZXBsYWNlKC9cXCggKi8sXCJcIikucmVwbGFjZSgvIFxcKS8sXCJcIikucmVwbGFjZSgvXFwpLyxcIlwiKTtcblx0XHRpZih2YWwgPj0gMCkgcmV0dXJuIHdyaXRlX251bV9mbHQoJ24nLCBmZm10LCB2YWwpO1xuXHRcdHJldHVybiAnKCcgKyB3cml0ZV9udW1fZmx0KCduJywgZmZtdCwgLXZhbCkgKyAnKSc7XG5cdH1cblx0aWYoZm10LmNoYXJDb2RlQXQoZm10Lmxlbmd0aCAtIDEpID09PSA0NCkgcmV0dXJuIHdyaXRlX251bV9jbSh0eXBlLCBmbXQsIHZhbCk7XG5cdGlmKGZtdC5pbmRleE9mKCclJykgIT09IC0xKSByZXR1cm4gd3JpdGVfbnVtX3BjdCh0eXBlLCBmbXQsIHZhbCk7XG5cdGlmKGZtdC5pbmRleE9mKCdFJykgIT09IC0xKSByZXR1cm4gd3JpdGVfbnVtX2V4cChmbXQsIHZhbCk7XG5cdGlmKGZtdC5jaGFyQ29kZUF0KDApID09PSAzNikgcmV0dXJuIFwiJFwiK3dyaXRlX251bV9mbHQodHlwZSxmbXQuc3Vic3RyKGZtdC5jaGFyQXQoMSk9PScgJz8yOjEpLHZhbCk7XG5cdHZhciBvO1xuXHR2YXIgciwgcmksIGZmLCBhdmFsID0gTWF0aC5hYnModmFsKSwgc2lnbiA9IHZhbCA8IDAgPyBcIi1cIiA6IFwiXCI7XG5cdGlmKGZtdC5tYXRjaCgvXjAwKyQvKSkgcmV0dXJuIHNpZ24gKyBwYWQwcihhdmFsLGZtdC5sZW5ndGgpO1xuXHRpZihmbXQubWF0Y2goL15bIz9dKyQvKSkge1xuXHRcdG8gPSBwYWQwcih2YWwsMCk7IGlmKG8gPT09IFwiMFwiKSBvID0gXCJcIjtcblx0XHRyZXR1cm4gby5sZW5ndGggPiBmbXQubGVuZ3RoID8gbyA6IGhhc2hxKGZtdC5zdWJzdHIoMCxmbXQubGVuZ3RoLW8ubGVuZ3RoKSkgKyBvO1xuXHR9XG5cdGlmKChyID0gZm10Lm1hdGNoKGZyYWMxKSkpIHJldHVybiB3cml0ZV9udW1fZjEociwgYXZhbCwgc2lnbik7XG5cdGlmKGZtdC5tYXRjaCgvXiMrMCskLykpIHJldHVybiBzaWduICsgcGFkMHIoYXZhbCxmbXQubGVuZ3RoIC0gZm10LmluZGV4T2YoXCIwXCIpKTtcblx0aWYoKHIgPSBmbXQubWF0Y2goZGVjMSkpKSB7XG5cdFx0byA9IHJuZCh2YWwsIHJbMV0ubGVuZ3RoKS5yZXBsYWNlKC9eKFteXFwuXSspJC8sXCIkMS5cIitoYXNocShyWzFdKSkucmVwbGFjZSgvXFwuJC8sXCIuXCIraGFzaHEoclsxXSkpLnJlcGxhY2UoL1xcLihcXGQqKSQvLGZ1bmN0aW9uKCQkLCAkMSkgeyByZXR1cm4gXCIuXCIgKyAkMSArIGZpbGwoXCIwXCIsIGhhc2hxKHJbMV0pLmxlbmd0aC0kMS5sZW5ndGgpOyB9KTtcblx0XHRyZXR1cm4gZm10LmluZGV4T2YoXCIwLlwiKSAhPT0gLTEgPyBvIDogby5yZXBsYWNlKC9eMFxcLi8sXCIuXCIpO1xuXHR9XG5cdGZtdCA9IGZtdC5yZXBsYWNlKC9eIysoWzAuXSkvLCBcIiQxXCIpO1xuXHRpZigociA9IGZtdC5tYXRjaCgvXigwKilcXC4oIyopJC8pKSkge1xuXHRcdHJldHVybiBzaWduICsgcm5kKGF2YWwsIHJbMl0ubGVuZ3RoKS5yZXBsYWNlKC9cXC4oXFxkKlsxLTldKTAqJC8sXCIuJDFcIikucmVwbGFjZSgvXigtP1xcZCopJC8sXCIkMS5cIikucmVwbGFjZSgvXjBcXC4vLHJbMV0ubGVuZ3RoP1wiMC5cIjpcIi5cIik7XG5cdH1cblx0aWYoKHIgPSBmbXQubWF0Y2goL14jezEsM30sIyMwKFxcLj8pJC8pKSkgcmV0dXJuIHNpZ24gKyBjb21tYWlmeShwYWQwcihhdmFsLDApKTtcblx0aWYoKHIgPSBmbXQubWF0Y2goL14jLCMjMFxcLihbIzBdKjApJC8pKSkge1xuXHRcdHJldHVybiB2YWwgPCAwID8gXCItXCIgKyB3cml0ZV9udW1fZmx0KHR5cGUsIGZtdCwgLXZhbCkgOiBjb21tYWlmeShcIlwiKyhNYXRoLmZsb29yKHZhbCkgKyBjYXJyeSh2YWwsIHJbMV0ubGVuZ3RoKSkpICsgXCIuXCIgKyBwYWQwKGRlYyh2YWwsIHJbMV0ubGVuZ3RoKSxyWzFdLmxlbmd0aCk7XG5cdH1cblx0aWYoKHIgPSBmbXQubWF0Y2goL14jLCMqLCMwLykpKSByZXR1cm4gd3JpdGVfbnVtX2ZsdCh0eXBlLGZtdC5yZXBsYWNlKC9eIywjKiwvLFwiXCIpLHZhbCk7XG5cdGlmKChyID0gZm10Lm1hdGNoKC9eKFswI10rKShcXFxcPy0oWzAjXSspKSskLykpKSB7XG5cdFx0byA9IF9zdHJyZXYod3JpdGVfbnVtX2ZsdCh0eXBlLCBmbXQucmVwbGFjZSgvW1xcXFwtXS9nLFwiXCIpLCB2YWwpKTtcblx0XHRyaSA9IDA7XG5cdFx0cmV0dXJuIF9zdHJyZXYoX3N0cnJldihmbXQucmVwbGFjZSgvXFxcXC9nLFwiXCIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oeCl7cmV0dXJuIHJpPG8ubGVuZ3RoP28uY2hhckF0KHJpKyspOng9PT0nMCc/JzAnOlwiXCI7fSkpO1xuXHR9XG5cdGlmKGZtdC5tYXRjaChwaG9uZSkpIHtcblx0XHRvID0gd3JpdGVfbnVtX2ZsdCh0eXBlLCBcIiMjIyMjIyMjIyNcIiwgdmFsKTtcblx0XHRyZXR1cm4gXCIoXCIgKyBvLnN1YnN0cigwLDMpICsgXCIpIFwiICsgby5zdWJzdHIoMywgMykgKyBcIi1cIiArIG8uc3Vic3RyKDYpO1xuXHR9XG5cdHZhciBvYSA9IFwiXCI7XG5cdGlmKChyID0gZm10Lm1hdGNoKC9eKFsjMD9dKykoID8pXFwvKCA/KShbIzA/XSspLykpKSB7XG5cdFx0cmkgPSBNYXRoLm1pbihyWzRdLmxlbmd0aCw3KTtcblx0XHRmZiA9IGZyYWMoYXZhbCwgTWF0aC5wb3coMTAscmkpLTEsIGZhbHNlKTtcblx0XHRvID0gXCJcIiArIHNpZ247XG5cdFx0b2EgPSB3cml0ZV9udW0oXCJuXCIsIHJbMV0sIGZmWzFdKTtcblx0XHRpZihvYS5jaGFyQXQob2EubGVuZ3RoLTEpID09IFwiIFwiKSBvYSA9IG9hLnN1YnN0cigwLG9hLmxlbmd0aC0xKSArIFwiMFwiO1xuXHRcdG8gKz0gb2EgKyByWzJdICsgXCIvXCIgKyByWzNdO1xuXHRcdG9hID0gcnBhZF8oZmZbMl0scmkpO1xuXHRcdGlmKG9hLmxlbmd0aCA8IHJbNF0ubGVuZ3RoKSBvYSA9IGhhc2hxKHJbNF0uc3Vic3RyKHJbNF0ubGVuZ3RoLW9hLmxlbmd0aCkpICsgb2E7XG5cdFx0byArPSBvYTtcblx0XHRyZXR1cm4gbztcblx0fVxuXHRpZigociA9IGZtdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXFwvKCA/KShbIzA/XSspLykpKSB7XG5cdFx0cmkgPSBNYXRoLm1pbihNYXRoLm1heChyWzFdLmxlbmd0aCwgcls0XS5sZW5ndGgpLDcpO1xuXHRcdGZmID0gZnJhYyhhdmFsLCBNYXRoLnBvdygxMCxyaSktMSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHNpZ24gKyAoZmZbMF18fChmZlsxXSA/IFwiXCIgOiBcIjBcIikpICsgXCIgXCIgKyAoZmZbMV0gPyBwYWRfKGZmWzFdLHJpKSArIHJbMl0gKyBcIi9cIiArIHJbM10gKyBycGFkXyhmZlsyXSxyaSk6IGZpbGwoXCIgXCIsIDIqcmkrMSArIHJbMl0ubGVuZ3RoICsgclszXS5sZW5ndGgpKTtcblx0fVxuXHRpZigociA9IGZtdC5tYXRjaCgvXlsjMD9dKyQvKSkpIHtcblx0XHRvID0gcGFkMHIodmFsLCAwKTtcblx0XHRpZihmbXQubGVuZ3RoIDw9IG8ubGVuZ3RoKSByZXR1cm4gbztcblx0XHRyZXR1cm4gaGFzaHEoZm10LnN1YnN0cigwLGZtdC5sZW5ndGgtby5sZW5ndGgpKSArIG87XG5cdH1cblx0aWYoKHIgPSBmbXQubWF0Y2goL14oWyMwP10rKVxcLihbIzBdKykkLykpKSB7XG5cdFx0byA9IFwiXCIgKyB2YWwudG9GaXhlZChNYXRoLm1pbihyWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sXCIkMVwiKTtcblx0XHRyaSA9IG8uaW5kZXhPZihcIi5cIik7XG5cdFx0dmFyIGxyZXMgPSBmbXQuaW5kZXhPZihcIi5cIikgLSByaSwgcnJlcyA9IGZtdC5sZW5ndGggLSBvLmxlbmd0aCAtIGxyZXM7XG5cdFx0cmV0dXJuIGhhc2hxKGZtdC5zdWJzdHIoMCxscmVzKSArIG8gKyBmbXQuc3Vic3RyKGZtdC5sZW5ndGgtcnJlcykpO1xuXHR9XG5cdGlmKChyID0gZm10Lm1hdGNoKC9eMDAsMDAwXFwuKFsjMF0qMCkkLykpKSB7XG5cdFx0cmkgPSBkZWModmFsLCByWzFdLmxlbmd0aCk7XG5cdFx0cmV0dXJuIHZhbCA8IDAgPyBcIi1cIiArIHdyaXRlX251bV9mbHQodHlwZSwgZm10LCAtdmFsKSA6IGNvbW1haWZ5KGZscih2YWwpKS5yZXBsYWNlKC9eXFxkLFxcZHszfSQvLFwiMCQmXCIpLnJlcGxhY2UoL15cXGQqJC8sZnVuY3Rpb24oJCQpIHsgcmV0dXJuIFwiMDAsXCIgKyAoJCQubGVuZ3RoIDwgMyA/IHBhZDAoMCwzLSQkLmxlbmd0aCkgOiBcIlwiKSArICQkOyB9KSArIFwiLlwiICsgcGFkMChyaSxyWzFdLmxlbmd0aCk7XG5cdH1cblx0c3dpdGNoKGZtdCkge1xuXHRcdGNhc2UgXCIjIyMsIyMwLjAwXCI6IHJldHVybiB3cml0ZV9udW1fZmx0KHR5cGUsIFwiIywjIzAuMDBcIiwgdmFsKTtcblx0XHRjYXNlIFwiIyMjLCMjI1wiOlxuXHRcdGNhc2UgXCIjIywjIyNcIjpcblx0XHRjYXNlIFwiIywjIyNcIjogdmFyIHggPSBjb21tYWlmeShwYWQwcihhdmFsLDApKTsgcmV0dXJuIHggIT09IFwiMFwiID8gc2lnbiArIHggOiBcIlwiO1xuXHRcdGNhc2UgXCIjIyMsIyMjLjAwXCI6IHJldHVybiB3cml0ZV9udW1fZmx0KHR5cGUsIFwiIyMjLCMjMC4wMFwiLHZhbCkucmVwbGFjZSgvXjBcXC4vLFwiLlwiKTtcblx0XHRjYXNlIFwiIywjIyMuMDBcIjogcmV0dXJuIHdyaXRlX251bV9mbHQodHlwZSwgXCIjLCMjMC4wMFwiLHZhbCkucmVwbGFjZSgvXjBcXC4vLFwiLlwiKTtcblx0XHRkZWZhdWx0OlxuXHR9XG5cdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGZvcm1hdCB8XCIgKyBmbXQgKyBcInxcIik7XG59XG5mdW5jdGlvbiB3cml0ZV9udW1fY20yKHR5cGUsIGZtdCwgdmFsKXtcblx0dmFyIGlkeCA9IGZtdC5sZW5ndGggLSAxO1xuXHR3aGlsZShmbXQuY2hhckNvZGVBdChpZHgtMSkgPT09IDQ0KSAtLWlkeDtcblx0cmV0dXJuIHdyaXRlX251bSh0eXBlLCBmbXQuc3Vic3RyKDAsaWR4KSwgdmFsIC8gTWF0aC5wb3coMTAsMyooZm10Lmxlbmd0aC1pZHgpKSk7XG59XG5mdW5jdGlvbiB3cml0ZV9udW1fcGN0Mih0eXBlLCBmbXQsIHZhbCl7XG5cdHZhciBzZm10ID0gZm10LnJlcGxhY2UocGN0MSxcIlwiKSwgbXVsID0gZm10Lmxlbmd0aCAtIHNmbXQubGVuZ3RoO1xuXHRyZXR1cm4gd3JpdGVfbnVtKHR5cGUsIHNmbXQsIHZhbCAqIE1hdGgucG93KDEwLDIqbXVsKSkgKyBmaWxsKFwiJVwiLG11bCk7XG59XG5mdW5jdGlvbiB3cml0ZV9udW1fZXhwMihmbXQsIHZhbCl7XG5cdHZhciBvO1xuXHR2YXIgaWR4ID0gZm10LmluZGV4T2YoXCJFXCIpIC0gZm10LmluZGV4T2YoXCIuXCIpIC0gMTtcblx0aWYoZm10Lm1hdGNoKC9eIyswLjBFXFwrMCQvKSkge1xuXHRcdGlmKHZhbCA9PSAwKSByZXR1cm4gXCIwLjBFKzBcIjtcblx0XHRlbHNlIGlmKHZhbCA8IDApIHJldHVybiBcIi1cIiArIHdyaXRlX251bV9leHAyKGZtdCwgLXZhbCk7XG5cdFx0dmFyIHBlcmlvZCA9IGZtdC5pbmRleE9mKFwiLlwiKTsgaWYocGVyaW9kID09PSAtMSkgcGVyaW9kPWZtdC5pbmRleE9mKCdFJyk7XG5cdFx0dmFyIGVlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWwpKk1hdGguTE9HMTBFKSVwZXJpb2Q7XG5cdFx0aWYoZWUgPCAwKSBlZSArPSBwZXJpb2Q7XG5cdFx0byA9ICh2YWwvTWF0aC5wb3coMTAsZWUpKS50b1ByZWNpc2lvbihpZHgrMSsocGVyaW9kK2VlKSVwZXJpb2QpO1xuXHRcdGlmKCFvLm1hdGNoKC9bRWVdLykpIHtcblx0XHRcdHZhciBmYWtlZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsKSpNYXRoLkxPRzEwRSk7XG5cdFx0XHRpZihvLmluZGV4T2YoXCIuXCIpID09PSAtMSkgbyA9IG8uY2hhckF0KDApICsgXCIuXCIgKyBvLnN1YnN0cigxKSArIFwiRStcIiArIChmYWtlZSAtIG8ubGVuZ3RoK2VlKTtcblx0XHRcdGVsc2UgbyArPSBcIkUrXCIgKyAoZmFrZWUgLSBlZSk7XG5cdFx0XHRvID0gby5yZXBsYWNlKC9cXCstLyxcIi1cIik7XG5cdFx0fVxuXHRcdG8gPSBvLnJlcGxhY2UoL14oWystXT8pKFxcZCopXFwuKFxcZCopW0VlXS8sZnVuY3Rpb24oJCQsJDEsJDIsJDMpIHsgcmV0dXJuICQxICsgJDIgKyAkMy5zdWJzdHIoMCwocGVyaW9kK2VlKSVwZXJpb2QpICsgXCIuXCIgKyAkMy5zdWJzdHIoZWUpICsgXCJFXCI7IH0pO1xuXHR9IGVsc2UgbyA9IHZhbC50b0V4cG9uZW50aWFsKGlkeCk7XG5cdGlmKGZtdC5tYXRjaCgvRVxcKzAwJC8pICYmIG8ubWF0Y2goL2VbKy1dXFxkJC8pKSBvID0gby5zdWJzdHIoMCxvLmxlbmd0aC0xKSArIFwiMFwiICsgby5jaGFyQXQoby5sZW5ndGgtMSk7XG5cdGlmKGZtdC5tYXRjaCgvRVxcLS8pICYmIG8ubWF0Y2goL2VcXCsvKSkgbyA9IG8ucmVwbGFjZSgvZVxcKy8sXCJlXCIpO1xuXHRyZXR1cm4gby5yZXBsYWNlKFwiZVwiLFwiRVwiKTtcbn1cbmZ1bmN0aW9uIHdyaXRlX251bV9pbnQodHlwZSwgZm10LCB2YWwpIHtcblx0aWYodHlwZS5jaGFyQ29kZUF0KDApID09PSA0MCAmJiAhZm10Lm1hdGNoKGNsb3NlcGFyZW4pKSB7XG5cdFx0dmFyIGZmbXQgPSBmbXQucmVwbGFjZSgvXFwoICovLFwiXCIpLnJlcGxhY2UoLyBcXCkvLFwiXCIpLnJlcGxhY2UoL1xcKS8sXCJcIik7XG5cdFx0aWYodmFsID49IDApIHJldHVybiB3cml0ZV9udW1faW50KCduJywgZmZtdCwgdmFsKTtcblx0XHRyZXR1cm4gJygnICsgd3JpdGVfbnVtX2ludCgnbicsIGZmbXQsIC12YWwpICsgJyknO1xuXHR9XG5cdGlmKGZtdC5jaGFyQ29kZUF0KGZtdC5sZW5ndGggLSAxKSA9PT0gNDQpIHJldHVybiB3cml0ZV9udW1fY20yKHR5cGUsIGZtdCwgdmFsKTtcblx0aWYoZm10LmluZGV4T2YoJyUnKSAhPT0gLTEpIHJldHVybiB3cml0ZV9udW1fcGN0Mih0eXBlLCBmbXQsIHZhbCk7XG5cdGlmKGZtdC5pbmRleE9mKCdFJykgIT09IC0xKSByZXR1cm4gd3JpdGVfbnVtX2V4cDIoZm10LCB2YWwpO1xuXHRpZihmbXQuY2hhckNvZGVBdCgwKSA9PT0gMzYpIHJldHVybiBcIiRcIit3cml0ZV9udW1faW50KHR5cGUsZm10LnN1YnN0cihmbXQuY2hhckF0KDEpPT0nICc/MjoxKSx2YWwpO1xuXHR2YXIgbztcblx0dmFyIHIsIHJpLCBmZiwgYXZhbCA9IE1hdGguYWJzKHZhbCksIHNpZ24gPSB2YWwgPCAwID8gXCItXCIgOiBcIlwiO1xuXHRpZihmbXQubWF0Y2goL14wMCskLykpIHJldHVybiBzaWduICsgcGFkMChhdmFsLGZtdC5sZW5ndGgpO1xuXHRpZihmbXQubWF0Y2goL15bIz9dKyQvKSkge1xuXHRcdG8gPSAoXCJcIit2YWwpOyBpZih2YWwgPT09IDApIG8gPSBcIlwiO1xuXHRcdHJldHVybiBvLmxlbmd0aCA+IGZtdC5sZW5ndGggPyBvIDogaGFzaHEoZm10LnN1YnN0cigwLGZtdC5sZW5ndGgtby5sZW5ndGgpKSArIG87XG5cdH1cblx0aWYoKHIgPSBmbXQubWF0Y2goZnJhYzEpKSkgcmV0dXJuIHdyaXRlX251bV9mMihyLCBhdmFsLCBzaWduKTtcblx0aWYoZm10Lm1hdGNoKC9eIyswKyQvKSkgcmV0dXJuIHNpZ24gKyBwYWQwKGF2YWwsZm10Lmxlbmd0aCAtIGZtdC5pbmRleE9mKFwiMFwiKSk7XG5cdGlmKChyID0gZm10Lm1hdGNoKGRlYzEpKSkge1xubyA9IChcIlwiK3ZhbCkucmVwbGFjZSgvXihbXlxcLl0rKSQvLFwiJDEuXCIraGFzaHEoclsxXSkpLnJlcGxhY2UoL1xcLiQvLFwiLlwiK2hhc2hxKHJbMV0pKTtcblx0XHRvID0gby5yZXBsYWNlKC9cXC4oXFxkKikkLyxmdW5jdGlvbigkJCwgJDEpIHtcbnJldHVybiBcIi5cIiArICQxICsgZmlsbChcIjBcIiwgaGFzaHEoclsxXSkubGVuZ3RoLSQxLmxlbmd0aCk7IH0pO1xuXHRcdHJldHVybiBmbXQuaW5kZXhPZihcIjAuXCIpICE9PSAtMSA/IG8gOiBvLnJlcGxhY2UoL14wXFwuLyxcIi5cIik7XG5cdH1cblx0Zm10ID0gZm10LnJlcGxhY2UoL14jKyhbMC5dKS8sIFwiJDFcIik7XG5cdGlmKChyID0gZm10Lm1hdGNoKC9eKDAqKVxcLigjKikkLykpKSB7XG5cdFx0cmV0dXJuIHNpZ24gKyAoXCJcIithdmFsKS5yZXBsYWNlKC9cXC4oXFxkKlsxLTldKTAqJC8sXCIuJDFcIikucmVwbGFjZSgvXigtP1xcZCopJC8sXCIkMS5cIikucmVwbGFjZSgvXjBcXC4vLHJbMV0ubGVuZ3RoP1wiMC5cIjpcIi5cIik7XG5cdH1cblx0aWYoKHIgPSBmbXQubWF0Y2goL14jezEsM30sIyMwKFxcLj8pJC8pKSkgcmV0dXJuIHNpZ24gKyBjb21tYWlmeSgoXCJcIithdmFsKSk7XG5cdGlmKChyID0gZm10Lm1hdGNoKC9eIywjIzBcXC4oWyMwXSowKSQvKSkpIHtcblx0XHRyZXR1cm4gdmFsIDwgMCA/IFwiLVwiICsgd3JpdGVfbnVtX2ludCh0eXBlLCBmbXQsIC12YWwpIDogY29tbWFpZnkoKFwiXCIrdmFsKSkgKyBcIi5cIiArIGZpbGwoJzAnLHJbMV0ubGVuZ3RoKTtcblx0fVxuXHRpZigociA9IGZtdC5tYXRjaCgvXiMsIyosIzAvKSkpIHJldHVybiB3cml0ZV9udW1faW50KHR5cGUsZm10LnJlcGxhY2UoL14jLCMqLC8sXCJcIiksdmFsKTtcblx0aWYoKHIgPSBmbXQubWF0Y2goL14oWzAjXSspKFxcXFw/LShbMCNdKykpKyQvKSkpIHtcblx0XHRvID0gX3N0cnJldih3cml0ZV9udW1faW50KHR5cGUsIGZtdC5yZXBsYWNlKC9bXFxcXC1dL2csXCJcIiksIHZhbCkpO1xuXHRcdHJpID0gMDtcblx0XHRyZXR1cm4gX3N0cnJldihfc3RycmV2KGZtdC5yZXBsYWNlKC9cXFxcL2csXCJcIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbih4KXtyZXR1cm4gcmk8by5sZW5ndGg/by5jaGFyQXQocmkrKyk6eD09PScwJz8nMCc6XCJcIjt9KSk7XG5cdH1cblx0aWYoZm10Lm1hdGNoKHBob25lKSkge1xuXHRcdG8gPSB3cml0ZV9udW1faW50KHR5cGUsIFwiIyMjIyMjIyMjI1wiLCB2YWwpO1xuXHRcdHJldHVybiBcIihcIiArIG8uc3Vic3RyKDAsMykgKyBcIikgXCIgKyBvLnN1YnN0cigzLCAzKSArIFwiLVwiICsgby5zdWJzdHIoNik7XG5cdH1cblx0dmFyIG9hID0gXCJcIjtcblx0aWYoKHIgPSBmbXQubWF0Y2goL14oWyMwP10rKSggPylcXC8oID8pKFsjMD9dKykvKSkpIHtcblx0XHRyaSA9IE1hdGgubWluKHJbNF0ubGVuZ3RoLDcpO1xuXHRcdGZmID0gZnJhYyhhdmFsLCBNYXRoLnBvdygxMCxyaSktMSwgZmFsc2UpO1xuXHRcdG8gPSBcIlwiICsgc2lnbjtcblx0XHRvYSA9IHdyaXRlX251bShcIm5cIiwgclsxXSwgZmZbMV0pO1xuXHRcdGlmKG9hLmNoYXJBdChvYS5sZW5ndGgtMSkgPT0gXCIgXCIpIG9hID0gb2Euc3Vic3RyKDAsb2EubGVuZ3RoLTEpICsgXCIwXCI7XG5cdFx0byArPSBvYSArIHJbMl0gKyBcIi9cIiArIHJbM107XG5cdFx0b2EgPSBycGFkXyhmZlsyXSxyaSk7XG5cdFx0aWYob2EubGVuZ3RoIDwgcls0XS5sZW5ndGgpIG9hID0gaGFzaHEocls0XS5zdWJzdHIocls0XS5sZW5ndGgtb2EubGVuZ3RoKSkgKyBvYTtcblx0XHRvICs9IG9hO1xuXHRcdHJldHVybiBvO1xuXHR9XG5cdGlmKChyID0gZm10Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcXC8oID8pKFsjMD9dKykvKSkpIHtcblx0XHRyaSA9IE1hdGgubWluKE1hdGgubWF4KHJbMV0ubGVuZ3RoLCByWzRdLmxlbmd0aCksNyk7XG5cdFx0ZmYgPSBmcmFjKGF2YWwsIE1hdGgucG93KDEwLHJpKS0xLCB0cnVlKTtcblx0XHRyZXR1cm4gc2lnbiArIChmZlswXXx8KGZmWzFdID8gXCJcIiA6IFwiMFwiKSkgKyBcIiBcIiArIChmZlsxXSA/IHBhZF8oZmZbMV0scmkpICsgclsyXSArIFwiL1wiICsgclszXSArIHJwYWRfKGZmWzJdLHJpKTogZmlsbChcIiBcIiwgMipyaSsxICsgclsyXS5sZW5ndGggKyByWzNdLmxlbmd0aCkpO1xuXHR9XG5cdGlmKChyID0gZm10Lm1hdGNoKC9eWyMwP10rJC8pKSkge1xuXHRcdG8gPSBcIlwiICsgdmFsO1xuXHRcdGlmKGZtdC5sZW5ndGggPD0gby5sZW5ndGgpIHJldHVybiBvO1xuXHRcdHJldHVybiBoYXNocShmbXQuc3Vic3RyKDAsZm10Lmxlbmd0aC1vLmxlbmd0aCkpICsgbztcblx0fVxuXHRpZigociA9IGZtdC5tYXRjaCgvXihbIzBdKylcXC4oWyMwXSspJC8pKSkge1xuXHRcdG8gPSBcIlwiICsgdmFsLnRvRml4ZWQoTWF0aC5taW4oclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLFwiJDFcIik7XG5cdFx0cmkgPSBvLmluZGV4T2YoXCIuXCIpO1xuXHRcdHZhciBscmVzID0gZm10LmluZGV4T2YoXCIuXCIpIC0gcmksIHJyZXMgPSBmbXQubGVuZ3RoIC0gby5sZW5ndGggLSBscmVzO1xuXHRcdHJldHVybiBoYXNocShmbXQuc3Vic3RyKDAsbHJlcykgKyBvICsgZm10LnN1YnN0cihmbXQubGVuZ3RoLXJyZXMpKTtcblx0fVxuXHRpZigociA9IGZtdC5tYXRjaCgvXjAwLDAwMFxcLihbIzBdKjApJC8pKSkge1xuXHRcdHJldHVybiB2YWwgPCAwID8gXCItXCIgKyB3cml0ZV9udW1faW50KHR5cGUsIGZtdCwgLXZhbCkgOiBjb21tYWlmeShcIlwiK3ZhbCkucmVwbGFjZSgvXlxcZCxcXGR7M30kLyxcIjAkJlwiKS5yZXBsYWNlKC9eXFxkKiQvLGZ1bmN0aW9uKCQkKSB7IHJldHVybiBcIjAwLFwiICsgKCQkLmxlbmd0aCA8IDMgPyBwYWQwKDAsMy0kJC5sZW5ndGgpIDogXCJcIikgKyAkJDsgfSkgKyBcIi5cIiArIHBhZDAoMCxyWzFdLmxlbmd0aCk7XG5cdH1cblx0c3dpdGNoKGZtdCkge1xuXHRcdGNhc2UgXCIjIyMsIyMjXCI6XG5cdFx0Y2FzZSBcIiMjLCMjI1wiOlxuXHRcdGNhc2UgXCIjLCMjI1wiOiB2YXIgeCA9IGNvbW1haWZ5KFwiXCIrYXZhbCk7IHJldHVybiB4ICE9PSBcIjBcIiA/IHNpZ24gKyB4IDogXCJcIjtcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYoZm10Lm1hdGNoKC9cXC5bMCM/XSokLykpIHJldHVybiB3cml0ZV9udW1faW50KHR5cGUsIGZtdC5zbGljZSgwLGZtdC5sYXN0SW5kZXhPZihcIi5cIikpLCB2YWwpICsgaGFzaHEoZm10LnNsaWNlKGZtdC5sYXN0SW5kZXhPZihcIi5cIikpKTtcblx0fVxuXHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBmb3JtYXQgfFwiICsgZm10ICsgXCJ8XCIpO1xufVxucmV0dXJuIGZ1bmN0aW9uIHdyaXRlX251bSh0eXBlLCBmbXQsIHZhbCkge1xuXHRyZXR1cm4gKHZhbHwwKSA9PT0gdmFsID8gd3JpdGVfbnVtX2ludCh0eXBlLCBmbXQsIHZhbCkgOiB3cml0ZV9udW1fZmx0KHR5cGUsIGZtdCwgdmFsKTtcbn07fSkoKTtcbmZ1bmN0aW9uIHNwbGl0X2ZtdChmbXQpIHtcblx0dmFyIG91dCA9IFtdO1xuXHR2YXIgaW5fc3RyID0gZmFsc2UvKiwgY2MqLztcblx0Zm9yKHZhciBpID0gMCwgaiA9IDA7IGkgPCBmbXQubGVuZ3RoOyArK2kpIHN3aXRjaCgoLypjYz0qL2ZtdC5jaGFyQ29kZUF0KGkpKSkge1xuXHRcdGNhc2UgMzQ6IC8qICdcIicgKi9cblx0XHRcdGluX3N0ciA9ICFpbl9zdHI7IGJyZWFrO1xuXHRcdGNhc2UgOTU6IGNhc2UgNDI6IGNhc2UgOTI6IC8qICdfJyAnKicgJ1xcXFwnICovXG5cdFx0XHQrK2k7IGJyZWFrO1xuXHRcdGNhc2UgNTk6IC8qICc7JyAqL1xuXHRcdFx0b3V0W291dC5sZW5ndGhdID0gZm10LnN1YnN0cihqLGktaik7XG5cdFx0XHRqID0gaSsxO1xuXHR9XG5cdG91dFtvdXQubGVuZ3RoXSA9IGZtdC5zdWJzdHIoaik7XG5cdGlmKGluX3N0ciA9PT0gdHJ1ZSkgdGhyb3cgbmV3IEVycm9yKFwiRm9ybWF0IHxcIiArIGZtdCArIFwifCB1bnRlcm1pbmF0ZWQgc3RyaW5nIFwiKTtcblx0cmV0dXJuIG91dDtcbn1cblNTRi5fc3BsaXQgPSBzcGxpdF9mbXQ7XG52YXIgYWJzdGltZSA9IC9cXFtbSGhNbVNzXSpcXF0vO1xuZnVuY3Rpb24gZm10X2lzX2RhdGUoZm10KSB7XG5cdHZhciBpID0gMCwgLypjYyA9IDAsKi8gYyA9IFwiXCIsIG8gPSBcIlwiO1xuXHR3aGlsZShpIDwgZm10Lmxlbmd0aCkge1xuXHRcdHN3aXRjaCgoYyA9IGZtdC5jaGFyQXQoaSkpKSB7XG5cdFx0XHRjYXNlICdHJzogaWYoaXNnZW5lcmFsKGZtdCwgaSkpIGkrPSA2OyBpKys7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnXCInOiBmb3IoOygvKmNjPSovZm10LmNoYXJDb2RlQXQoKytpKSkgIT09IDM0ICYmIGkgPCBmbXQubGVuZ3RoOykgKytpOyArK2k7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnXFxcXCc6IGkrPTI7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnXyc6IGkrPTI7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnQCc6ICsraTsgYnJlYWs7XG5cdFx0XHRjYXNlICdCJzogY2FzZSAnYic6XG5cdFx0XHRcdGlmKGZtdC5jaGFyQXQoaSsxKSA9PT0gXCIxXCIgfHwgZm10LmNoYXJBdChpKzEpID09PSBcIjJcIikgcmV0dXJuIHRydWU7XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdGNhc2UgJ00nOiBjYXNlICdEJzogY2FzZSAnWSc6IGNhc2UgJ0gnOiBjYXNlICdTJzogY2FzZSAnRSc6XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdGNhc2UgJ20nOiBjYXNlICdkJzogY2FzZSAneSc6IGNhc2UgJ2gnOiBjYXNlICdzJzogY2FzZSAnZSc6IGNhc2UgJ2cnOiByZXR1cm4gdHJ1ZTtcblx0XHRcdGNhc2UgJ0EnOiBjYXNlICdhJzpcblx0XHRcdFx0aWYoZm10LnN1YnN0cihpLCAzKS50b1VwcGVyQ2FzZSgpID09PSBcIkEvUFwiKSByZXR1cm4gdHJ1ZTtcblx0XHRcdFx0aWYoZm10LnN1YnN0cihpLCA1KS50b1VwcGVyQ2FzZSgpID09PSBcIkFNL1BNXCIpIHJldHVybiB0cnVlO1xuXHRcdFx0XHQrK2k7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnWyc6XG5cdFx0XHRcdG8gPSBjO1xuXHRcdFx0XHR3aGlsZShmbXQuY2hhckF0KGkrKykgIT09ICddJyAmJiBpIDwgZm10Lmxlbmd0aCkgbyArPSBmbXQuY2hhckF0KGkpO1xuXHRcdFx0XHRpZihvLm1hdGNoKGFic3RpbWUpKSByZXR1cm4gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICcuJzpcblx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Y2FzZSAnMCc6IGNhc2UgJyMnOlxuXHRcdFx0XHR3aGlsZShpIDwgZm10Lmxlbmd0aCAmJiAoXCIwIz8uLEUrLSVcIi5pbmRleE9mKGM9Zm10LmNoYXJBdCgrK2kpKSA+IC0xIHx8IChjPT0nXFxcXCcgJiYgZm10LmNoYXJBdChpKzEpID09IFwiLVwiICYmIFwiMCNcIi5pbmRleE9mKGZtdC5jaGFyQXQoaSsyKSk+LTEpKSl7LyogZW1wdHkgKi99XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnPyc6IHdoaWxlKGZtdC5jaGFyQXQoKytpKSA9PT0gYyl7LyogZW1wdHkgKi99IGJyZWFrO1xuXHRcdFx0Y2FzZSAnKic6ICsraTsgaWYoZm10LmNoYXJBdChpKSA9PSAnICcgfHwgZm10LmNoYXJBdChpKSA9PSAnKicpICsraTsgYnJlYWs7XG5cdFx0XHRjYXNlICcoJzogY2FzZSAnKSc6ICsraTsgYnJlYWs7XG5cdFx0XHRjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuXHRcdFx0XHR3aGlsZShpIDwgZm10Lmxlbmd0aCAmJiBcIjAxMjM0NTY3ODlcIi5pbmRleE9mKGZtdC5jaGFyQXQoKytpKSkgPiAtMSl7LyogZW1wdHkgKi99IGJyZWFrO1xuXHRcdFx0Y2FzZSAnICc6ICsraTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiArK2k7IGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5TU0YuaXNfZGF0ZSA9IGZtdF9pc19kYXRlO1xuZnVuY3Rpb24gZXZhbF9mbXQoZm10LCB2LCBvcHRzLCBmbGVuKSB7XG5cdHZhciBvdXQgPSBbXSwgbyA9IFwiXCIsIGkgPSAwLCBjID0gXCJcIiwgbHN0PSd0JywgZHQsIGosIGNjO1xuXHR2YXIgaHI9J0gnO1xuXHQvKiBUb2tlbml6ZSAqL1xuXHR3aGlsZShpIDwgZm10Lmxlbmd0aCkge1xuXHRcdHN3aXRjaCgoYyA9IGZtdC5jaGFyQXQoaSkpKSB7XG5cdFx0XHRjYXNlICdHJzogLyogR2VuZXJhbCAqL1xuXHRcdFx0XHRpZighaXNnZW5lcmFsKGZtdCwgaSkpIHRocm93IG5ldyBFcnJvcigndW5yZWNvZ25pemVkIGNoYXJhY3RlciAnICsgYyArICcgaW4gJyArZm10KTtcblx0XHRcdFx0b3V0W291dC5sZW5ndGhdID0ge3Q6J0cnLCB2OidHZW5lcmFsJ307IGkrPTc7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnXCInOiAvKiBMaXRlcmFsIHRleHQgKi9cblx0XHRcdFx0Zm9yKG89XCJcIjsoY2M9Zm10LmNoYXJDb2RlQXQoKytpKSkgIT09IDM0ICYmIGkgPCBmbXQubGVuZ3RoOykgbyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNjKTtcblx0XHRcdFx0b3V0W291dC5sZW5ndGhdID0ge3Q6J3QnLCB2Om99OyArK2k7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnXFxcXCc6IHZhciB3ID0gZm10LmNoYXJBdCgrK2kpLCB0ID0gKHcgPT09IFwiKFwiIHx8IHcgPT09IFwiKVwiKSA/IHcgOiAndCc7XG5cdFx0XHRcdG91dFtvdXQubGVuZ3RoXSA9IHt0OnQsIHY6d307ICsraTsgYnJlYWs7XG5cdFx0XHRjYXNlICdfJzogb3V0W291dC5sZW5ndGhdID0ge3Q6J3QnLCB2OlwiIFwifTsgaSs9MjsgYnJlYWs7XG5cdFx0XHRjYXNlICdAJzogLyogVGV4dCBQbGFjZWhvbGRlciAqL1xuXHRcdFx0XHRvdXRbb3V0Lmxlbmd0aF0gPSB7dDonVCcsIHY6dn07ICsraTsgYnJlYWs7XG5cdFx0XHRjYXNlICdCJzogY2FzZSAnYic6XG5cdFx0XHRcdGlmKGZtdC5jaGFyQXQoaSsxKSA9PT0gXCIxXCIgfHwgZm10LmNoYXJBdChpKzEpID09PSBcIjJcIikge1xuXHRcdFx0XHRcdGlmKGR0PT1udWxsKSB7IGR0PXBhcnNlX2RhdGVfY29kZSh2LCBvcHRzLCBmbXQuY2hhckF0KGkrMSkgPT09IFwiMlwiKTsgaWYoZHQ9PW51bGwpIHJldHVybiBcIlwiOyB9XG5cdFx0XHRcdFx0b3V0W291dC5sZW5ndGhdID0ge3Q6J1gnLCB2OmZtdC5zdWJzdHIoaSwyKX07IGxzdCA9IGM7IGkrPTI7IGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdGNhc2UgJ00nOiBjYXNlICdEJzogY2FzZSAnWSc6IGNhc2UgJ0gnOiBjYXNlICdTJzogY2FzZSAnRSc6XG5cdFx0XHRcdGMgPSBjLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdGNhc2UgJ20nOiBjYXNlICdkJzogY2FzZSAneSc6IGNhc2UgJ2gnOiBjYXNlICdzJzogY2FzZSAnZSc6IGNhc2UgJ2cnOlxuXHRcdFx0XHRpZih2IDwgMCkgcmV0dXJuIFwiXCI7XG5cdFx0XHRcdGlmKGR0PT1udWxsKSB7IGR0PXBhcnNlX2RhdGVfY29kZSh2LCBvcHRzKTsgaWYoZHQ9PW51bGwpIHJldHVybiBcIlwiOyB9XG5cdFx0XHRcdG8gPSBjOyB3aGlsZSgrK2kgPCBmbXQubGVuZ3RoICYmIGZtdC5jaGFyQXQoaSkudG9Mb3dlckNhc2UoKSA9PT0gYykgbys9Yztcblx0XHRcdFx0aWYoYyA9PT0gJ20nICYmIGxzdC50b0xvd2VyQ2FzZSgpID09PSAnaCcpIGMgPSAnTSc7XG5cdFx0XHRcdGlmKGMgPT09ICdoJykgYyA9IGhyO1xuXHRcdFx0XHRvdXRbb3V0Lmxlbmd0aF0gPSB7dDpjLCB2Om99OyBsc3QgPSBjOyBicmVhaztcblx0XHRcdGNhc2UgJ0EnOiBjYXNlICdhJzpcblx0XHRcdFx0dmFyIHE9e3Q6YywgdjpjfTtcblx0XHRcdFx0aWYoZHQ9PW51bGwpIGR0PXBhcnNlX2RhdGVfY29kZSh2LCBvcHRzKTtcblx0XHRcdFx0aWYoZm10LnN1YnN0cihpLCAzKS50b1VwcGVyQ2FzZSgpID09PSBcIkEvUFwiKSB7IGlmKGR0IT1udWxsKSBxLnYgPSBkdC5IID49IDEyID8gXCJQXCIgOiBcIkFcIjsgcS50ID0gJ1QnOyBocj0naCc7aSs9Mzt9XG5cdFx0XHRcdGVsc2UgaWYoZm10LnN1YnN0cihpLDUpLnRvVXBwZXJDYXNlKCkgPT09IFwiQU0vUE1cIikgeyBpZihkdCE9bnVsbCkgcS52ID0gZHQuSCA+PSAxMiA/IFwiUE1cIiA6IFwiQU1cIjsgcS50ID0gJ1QnOyBpKz01OyBocj0naCc7IH1cblx0XHRcdFx0ZWxzZSB7IHEudCA9IFwidFwiOyArK2k7IH1cblx0XHRcdFx0aWYoZHQ9PW51bGwgJiYgcS50ID09PSAnVCcpIHJldHVybiBcIlwiO1xuXHRcdFx0XHRvdXRbb3V0Lmxlbmd0aF0gPSBxOyBsc3QgPSBjOyBicmVhaztcblx0XHRcdGNhc2UgJ1snOlxuXHRcdFx0XHRvID0gYztcblx0XHRcdFx0d2hpbGUoZm10LmNoYXJBdChpKyspICE9PSAnXScgJiYgaSA8IGZtdC5sZW5ndGgpIG8gKz0gZm10LmNoYXJBdChpKTtcblx0XHRcdFx0aWYoby5zbGljZSgtMSkgIT09ICddJykgdGhyb3cgJ3VudGVybWluYXRlZCBcIltcIiBibG9jazogfCcgKyBvICsgJ3wnO1xuXHRcdFx0XHRpZihvLm1hdGNoKGFic3RpbWUpKSB7XG5cdFx0XHRcdFx0aWYoZHQ9PW51bGwpIHsgZHQ9cGFyc2VfZGF0ZV9jb2RlKHYsIG9wdHMpOyBpZihkdD09bnVsbCkgcmV0dXJuIFwiXCI7IH1cblx0XHRcdFx0XHRvdXRbb3V0Lmxlbmd0aF0gPSB7dDonWicsIHY6by50b0xvd2VyQ2FzZSgpfTtcblx0XHRcdFx0XHRsc3QgPSBvLmNoYXJBdCgxKTtcblx0XHRcdFx0fSBlbHNlIGlmKG8uaW5kZXhPZihcIiRcIikgPiAtMSkge1xuXHRcdFx0XHRcdG8gPSAoby5tYXRjaCgvXFwkKFteLVxcW1xcXV0qKS8pfHxbXSlbMV18fFwiJFwiO1xuXHRcdFx0XHRcdGlmKCFmbXRfaXNfZGF0ZShmbXQpKSBvdXRbb3V0Lmxlbmd0aF0gPSB7dDondCcsdjpvfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8qIE51bWJlcnMgKi9cblx0XHRcdGNhc2UgJy4nOlxuXHRcdFx0XHRpZihkdCAhPSBudWxsKSB7XG5cdFx0XHRcdFx0byA9IGM7IHdoaWxlKCsraSA8IGZtdC5sZW5ndGggJiYgKGM9Zm10LmNoYXJBdChpKSkgPT09IFwiMFwiKSBvICs9IGM7XG5cdFx0XHRcdFx0b3V0W291dC5sZW5ndGhdID0ge3Q6J3MnLCB2Om99OyBicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRjYXNlICcwJzogY2FzZSAnIyc6XG5cdFx0XHRcdG8gPSBjOyB3aGlsZSgoKytpIDwgZm10Lmxlbmd0aCAmJiBcIjAjPy4sRSstJVwiLmluZGV4T2YoYz1mbXQuY2hhckF0KGkpKSA+IC0xKSB8fCAoYz09J1xcXFwnICYmIGZtdC5jaGFyQXQoaSsxKSA9PSBcIi1cIiAmJiBpIDwgZm10Lmxlbmd0aCAtIDIgJiYgXCIwI1wiLmluZGV4T2YoZm10LmNoYXJBdChpKzIpKT4tMSkpIG8gKz0gYztcblx0XHRcdFx0b3V0W291dC5sZW5ndGhdID0ge3Q6J24nLCB2Om99OyBicmVhaztcblx0XHRcdGNhc2UgJz8nOlxuXHRcdFx0XHRvID0gYzsgd2hpbGUoZm10LmNoYXJBdCgrK2kpID09PSBjKSBvKz1jO1xuXHRcdFx0XHRvdXRbb3V0Lmxlbmd0aF0gPSB7dDpjLCB2Om99OyBsc3QgPSBjOyBicmVhaztcblx0XHRcdGNhc2UgJyonOiArK2k7IGlmKGZtdC5jaGFyQXQoaSkgPT0gJyAnIHx8IGZtdC5jaGFyQXQoaSkgPT0gJyonKSArK2k7IGJyZWFrOyAvLyAqKlxuXHRcdFx0Y2FzZSAnKCc6IGNhc2UgJyknOiBvdXRbb3V0Lmxlbmd0aF0gPSB7dDooZmxlbj09PTE/J3QnOmMpLCB2OmN9OyArK2k7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5Jzpcblx0XHRcdFx0byA9IGM7IHdoaWxlKGkgPCBmbXQubGVuZ3RoICYmIFwiMDEyMzQ1Njc4OVwiLmluZGV4T2YoZm10LmNoYXJBdCgrK2kpKSA+IC0xKSBvKz1mbXQuY2hhckF0KGkpO1xuXHRcdFx0XHRvdXRbb3V0Lmxlbmd0aF0gPSB7dDonRCcsIHY6b307IGJyZWFrO1xuXHRcdFx0Y2FzZSAnICc6IG91dFtvdXQubGVuZ3RoXSA9IHt0OmMsIHY6Y307ICsraTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZihcIiwkLSsvKCk6IV4mJ357fTw+PeKCrGFjZmlqa2xvcHFydHV2d3h6UFwiLmluZGV4T2YoYykgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ3VucmVjb2duaXplZCBjaGFyYWN0ZXIgJyArIGMgKyAnIGluICcgKyBmbXQpO1xuXHRcdFx0XHRvdXRbb3V0Lmxlbmd0aF0gPSB7dDondCcsIHY6Y307ICsraTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHZhciBidCA9IDAsIHNzMCA9IDAsIHNzbTtcblx0Zm9yKGk9b3V0Lmxlbmd0aC0xLCBsc3Q9J3QnOyBpID49IDA7IC0taSkge1xuXHRcdHN3aXRjaChvdXRbaV0udCkge1xuXHRcdFx0Y2FzZSAnaCc6IGNhc2UgJ0gnOiBvdXRbaV0udCA9IGhyOyBsc3Q9J2gnOyBpZihidCA8IDEpIGJ0ID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdzJzpcblx0XHRcdFx0aWYoKHNzbT1vdXRbaV0udi5tYXRjaCgvXFwuMCskLykpKSBzczA9TWF0aC5tYXgoc3MwLHNzbVswXS5sZW5ndGgtMSk7XG5cdFx0XHRcdGlmKGJ0IDwgMykgYnQgPSAzO1xuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Y2FzZSAnZCc6IGNhc2UgJ3knOiBjYXNlICdNJzogY2FzZSAnZSc6IGxzdD1vdXRbaV0udDsgYnJlYWs7XG5cdFx0XHRjYXNlICdtJzogaWYobHN0ID09PSAncycpIHsgb3V0W2ldLnQgPSAnTSc7IGlmKGJ0IDwgMikgYnQgPSAyOyB9IGJyZWFrO1xuXHRcdFx0Y2FzZSAnWCc6IC8qaWYob3V0W2ldLnYgPT09IFwiQjJcIik7Ki9cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdaJzpcblx0XHRcdFx0aWYoYnQgPCAxICYmIG91dFtpXS52Lm1hdGNoKC9bSGhdLykpIGJ0ID0gMTtcblx0XHRcdFx0aWYoYnQgPCAyICYmIG91dFtpXS52Lm1hdGNoKC9bTW1dLykpIGJ0ID0gMjtcblx0XHRcdFx0aWYoYnQgPCAzICYmIG91dFtpXS52Lm1hdGNoKC9bU3NdLykpIGJ0ID0gMztcblx0XHR9XG5cdH1cblx0c3dpdGNoKGJ0KSB7XG5cdFx0Y2FzZSAwOiBicmVhaztcblx0XHRjYXNlIDE6XG5pZihkdC51ID49IDAuNSkgeyBkdC51ID0gMDsgKytkdC5TOyB9XG5cdFx0XHRpZihkdC5TID49ICA2MCkgeyBkdC5TID0gMDsgKytkdC5NOyB9XG5cdFx0XHRpZihkdC5NID49ICA2MCkgeyBkdC5NID0gMDsgKytkdC5IOyB9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIDI6XG5pZihkdC51ID49IDAuNSkgeyBkdC51ID0gMDsgKytkdC5TOyB9XG5cdFx0XHRpZihkdC5TID49ICA2MCkgeyBkdC5TID0gMDsgKytkdC5NOyB9XG5cdFx0XHRicmVhaztcblx0fVxuXHQvKiByZXBsYWNlIGZpZWxkcyAqL1xuXHR2YXIgbnN0ciA9IFwiXCIsIGpqO1xuXHRmb3IoaT0wOyBpIDwgb3V0Lmxlbmd0aDsgKytpKSB7XG5cdFx0c3dpdGNoKG91dFtpXS50KSB7XG5cdFx0XHRjYXNlICd0JzogY2FzZSAnVCc6IGNhc2UgJyAnOiBjYXNlICdEJzogYnJlYWs7XG5cdFx0XHRjYXNlICdYJzogb3V0W2ldLnYgPSBcIlwiOyBvdXRbaV0udCA9IFwiO1wiOyBicmVhaztcblx0XHRcdGNhc2UgJ2QnOiBjYXNlICdtJzogY2FzZSAneSc6IGNhc2UgJ2gnOiBjYXNlICdIJzogY2FzZSAnTSc6IGNhc2UgJ3MnOiBjYXNlICdlJzogY2FzZSAnYic6IGNhc2UgJ1onOlxub3V0W2ldLnYgPSB3cml0ZV9kYXRlKG91dFtpXS50LmNoYXJDb2RlQXQoMCksIG91dFtpXS52LCBkdCwgc3MwKTtcblx0XHRcdFx0b3V0W2ldLnQgPSAndCc7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnbic6IGNhc2UgJygnOiBjYXNlICc/Jzpcblx0XHRcdFx0amogPSBpKzE7XG5cdFx0XHRcdHdoaWxlKG91dFtqal0gIT0gbnVsbCAmJiAoXG5cdFx0XHRcdFx0KGM9b3V0W2pqXS50KSA9PT0gXCI/XCIgfHwgYyA9PT0gXCJEXCIgfHxcblx0XHRcdFx0XHQoKGMgPT09IFwiIFwiIHx8IGMgPT09IFwidFwiKSAmJiBvdXRbamorMV0gIT0gbnVsbCAmJiAob3V0W2pqKzFdLnQgPT09ICc/JyB8fCBvdXRbamorMV0udCA9PT0gXCJ0XCIgJiYgb3V0W2pqKzFdLnYgPT09ICcvJykpIHx8XG5cdFx0XHRcdFx0KG91dFtpXS50ID09PSAnKCcgJiYgKGMgPT09ICcgJyB8fCBjID09PSAnbicgfHwgYyA9PT0gJyknKSkgfHxcblx0XHRcdFx0XHQoYyA9PT0gJ3QnICYmIChvdXRbampdLnYgPT09ICcvJyB8fCBvdXRbampdLnYgPT09ICcgJyAmJiBvdXRbamorMV0gIT0gbnVsbCAmJiBvdXRbamorMV0udCA9PSAnPycpKVxuXHRcdFx0XHQpKSB7XG5cdFx0XHRcdFx0b3V0W2ldLnYgKz0gb3V0W2pqXS52O1xuXHRcdFx0XHRcdG91dFtqal0gPSB7djpcIlwiLCB0OlwiO1wifTsgKytqajtcblx0XHRcdFx0fVxuXHRcdFx0XHRuc3RyICs9IG91dFtpXS52O1xuXHRcdFx0XHRpID0gamotMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdHJzogb3V0W2ldLnQgPSAndCc7IG91dFtpXS52ID0gZ2VuZXJhbF9mbXQodixvcHRzKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG5cdHZhciB2diA9IFwiXCIsIG15diwgb3N0cjtcblx0aWYobnN0ci5sZW5ndGggPiAwKSB7XG5cdFx0aWYobnN0ci5jaGFyQ29kZUF0KDApID09IDQwKSAvKiAnKCcgKi8ge1xuXHRcdFx0bXl2ID0gKHY8MCYmbnN0ci5jaGFyQ29kZUF0KDApID09PSA0NSA/IC12IDogdik7XG5cdFx0XHRvc3RyID0gd3JpdGVfbnVtKCcoJywgbnN0ciwgbXl2KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bXl2ID0gKHY8MCAmJiBmbGVuID4gMSA/IC12IDogdik7XG5cdFx0XHRvc3RyID0gd3JpdGVfbnVtKCduJywgbnN0ciwgbXl2KTtcblx0XHRcdGlmKG15diA8IDAgJiYgb3V0WzBdICYmIG91dFswXS50ID09ICd0Jykge1xuXHRcdFx0XHRvc3RyID0gb3N0ci5zdWJzdHIoMSk7XG5cdFx0XHRcdG91dFswXS52ID0gXCItXCIgKyBvdXRbMF0udjtcblx0XHRcdH1cblx0XHR9XG5cdFx0amo9b3N0ci5sZW5ndGgtMTtcblx0XHR2YXIgZGVjcHQgPSBvdXQubGVuZ3RoO1xuXHRcdGZvcihpPTA7IGkgPCBvdXQubGVuZ3RoOyArK2kpIGlmKG91dFtpXSAhPSBudWxsICYmIG91dFtpXS50ICE9ICd0JyAmJiBvdXRbaV0udi5pbmRleE9mKFwiLlwiKSA+IC0xKSB7IGRlY3B0ID0gaTsgYnJlYWs7IH1cblx0XHR2YXIgbGFzdGk9b3V0Lmxlbmd0aDtcblx0XHRpZihkZWNwdCA9PT0gb3V0Lmxlbmd0aCAmJiBvc3RyLmluZGV4T2YoXCJFXCIpID09PSAtMSkge1xuXHRcdFx0Zm9yKGk9b3V0Lmxlbmd0aC0xOyBpPj0gMDstLWkpIHtcblx0XHRcdFx0aWYob3V0W2ldID09IG51bGwgfHwgJ24/KCcuaW5kZXhPZihvdXRbaV0udCkgPT09IC0xKSBjb250aW51ZTtcblx0XHRcdFx0aWYoamo+PW91dFtpXS52Lmxlbmd0aC0xKSB7IGpqIC09IG91dFtpXS52Lmxlbmd0aDsgb3V0W2ldLnYgPSBvc3RyLnN1YnN0cihqaisxLCBvdXRbaV0udi5sZW5ndGgpOyB9XG5cdFx0XHRcdGVsc2UgaWYoamogPCAwKSBvdXRbaV0udiA9IFwiXCI7XG5cdFx0XHRcdGVsc2UgeyBvdXRbaV0udiA9IG9zdHIuc3Vic3RyKDAsIGpqKzEpOyBqaiA9IC0xOyB9XG5cdFx0XHRcdG91dFtpXS50ID0gJ3QnO1xuXHRcdFx0XHRsYXN0aSA9IGk7XG5cdFx0XHR9XG5cdFx0XHRpZihqaj49MCAmJiBsYXN0aTxvdXQubGVuZ3RoKSBvdXRbbGFzdGldLnYgPSBvc3RyLnN1YnN0cigwLGpqKzEpICsgb3V0W2xhc3RpXS52O1xuXHRcdH1cblx0XHRlbHNlIGlmKGRlY3B0ICE9PSBvdXQubGVuZ3RoICYmIG9zdHIuaW5kZXhPZihcIkVcIikgPT09IC0xKSB7XG5cdFx0XHRqaiA9IG9zdHIuaW5kZXhPZihcIi5cIiktMTtcblx0XHRcdGZvcihpPWRlY3B0OyBpPj0gMDsgLS1pKSB7XG5cdFx0XHRcdGlmKG91dFtpXSA9PSBudWxsIHx8ICduPygnLmluZGV4T2Yob3V0W2ldLnQpID09PSAtMSkgY29udGludWU7XG5cdFx0XHRcdGo9b3V0W2ldLnYuaW5kZXhPZihcIi5cIik+LTEmJmk9PT1kZWNwdD9vdXRbaV0udi5pbmRleE9mKFwiLlwiKS0xOm91dFtpXS52Lmxlbmd0aC0xO1xuXHRcdFx0XHR2diA9IG91dFtpXS52LnN1YnN0cihqKzEpO1xuXHRcdFx0XHRmb3IoOyBqPj0wOyAtLWopIHtcblx0XHRcdFx0XHRpZihqaj49MCAmJiAob3V0W2ldLnYuY2hhckF0KGopID09PSBcIjBcIiB8fCBvdXRbaV0udi5jaGFyQXQoaikgPT09IFwiI1wiKSkgdnYgPSBvc3RyLmNoYXJBdChqai0tKSArIHZ2O1xuXHRcdFx0XHR9XG5cdFx0XHRcdG91dFtpXS52ID0gdnY7XG5cdFx0XHRcdG91dFtpXS50ID0gJ3QnO1xuXHRcdFx0XHRsYXN0aSA9IGk7XG5cdFx0XHR9XG5cdFx0XHRpZihqaj49MCAmJiBsYXN0aTxvdXQubGVuZ3RoKSBvdXRbbGFzdGldLnYgPSBvc3RyLnN1YnN0cigwLGpqKzEpICsgb3V0W2xhc3RpXS52O1xuXHRcdFx0amogPSBvc3RyLmluZGV4T2YoXCIuXCIpKzE7XG5cdFx0XHRmb3IoaT1kZWNwdDsgaTxvdXQubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYob3V0W2ldID09IG51bGwgfHwgKCduPygnLmluZGV4T2Yob3V0W2ldLnQpID09PSAtMSAmJiBpICE9PSBkZWNwdCkpIGNvbnRpbnVlO1xuXHRcdFx0XHRqPW91dFtpXS52LmluZGV4T2YoXCIuXCIpPi0xJiZpPT09ZGVjcHQ/b3V0W2ldLnYuaW5kZXhPZihcIi5cIikrMTowO1xuXHRcdFx0XHR2diA9IG91dFtpXS52LnN1YnN0cigwLGopO1xuXHRcdFx0XHRmb3IoOyBqPG91dFtpXS52Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdFx0aWYoamo8b3N0ci5sZW5ndGgpIHZ2ICs9IG9zdHIuY2hhckF0KGpqKyspO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG91dFtpXS52ID0gdnY7XG5cdFx0XHRcdG91dFtpXS50ID0gJ3QnO1xuXHRcdFx0XHRsYXN0aSA9IGk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGZvcihpPTA7IGk8b3V0Lmxlbmd0aDsgKytpKSBpZihvdXRbaV0gIT0gbnVsbCAmJiAnbig/Jy5pbmRleE9mKG91dFtpXS50KT4tMSkge1xuXHRcdG15diA9IChmbGVuID4xICYmIHYgPCAwICYmIGk+MCAmJiBvdXRbaS0xXS52ID09PSBcIi1cIiA/IC12OnYpO1xuXHRcdG91dFtpXS52ID0gd3JpdGVfbnVtKG91dFtpXS50LCBvdXRbaV0udiwgbXl2KTtcblx0XHRvdXRbaV0udCA9ICd0Jztcblx0fVxuXHR2YXIgcmV0dmFsID0gXCJcIjtcblx0Zm9yKGk9MDsgaSAhPT0gb3V0Lmxlbmd0aDsgKytpKSBpZihvdXRbaV0gIT0gbnVsbCkgcmV0dmFsICs9IG91dFtpXS52O1xuXHRyZXR1cm4gcmV0dmFsO1xufVxuU1NGLl9ldmFsID0gZXZhbF9mbXQ7XG52YXIgY2ZyZWdleCA9IC9cXFtbPTw+XS87XG52YXIgY2ZyZWdleDIgPSAvXFxbKFs9PD5dKikoLT9cXGQrXFwuP1xcZCopXFxdLztcbmZ1bmN0aW9uIGNoa2NvbmQodiwgcnIpIHtcblx0aWYocnIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHR2YXIgdGhyZXNoID0gcGFyc2VGbG9hdChyclsyXSk7XG5cdHN3aXRjaChyclsxXSkge1xuXHRcdGNhc2UgXCI9XCI6ICBpZih2ID09IHRocmVzaCkgcmV0dXJuIHRydWU7IGJyZWFrO1xuXHRcdGNhc2UgXCI+XCI6ICBpZih2ID4gIHRocmVzaCkgcmV0dXJuIHRydWU7IGJyZWFrO1xuXHRcdGNhc2UgXCI8XCI6ICBpZih2IDwgIHRocmVzaCkgcmV0dXJuIHRydWU7IGJyZWFrO1xuXHRcdGNhc2UgXCI8PlwiOiBpZih2ICE9IHRocmVzaCkgcmV0dXJuIHRydWU7IGJyZWFrO1xuXHRcdGNhc2UgXCI+PVwiOiBpZih2ID49IHRocmVzaCkgcmV0dXJuIHRydWU7IGJyZWFrO1xuXHRcdGNhc2UgXCI8PVwiOiBpZih2IDw9IHRocmVzaCkgcmV0dXJuIHRydWU7IGJyZWFrO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNob29zZV9mbXQoZiwgdikge1xuXHR2YXIgZm10ID0gc3BsaXRfZm10KGYpO1xuXHR2YXIgbCA9IGZtdC5sZW5ndGgsIGxhdCA9IGZtdFtsLTFdLmluZGV4T2YoXCJAXCIpO1xuXHRpZihsPDQgJiYgbGF0Pi0xKSAtLWw7XG5cdGlmKGZtdC5sZW5ndGggPiA0KSB0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHxcIiArIGZtdC5qb2luKFwifFwiKSArIFwifFwiKTtcblx0aWYodHlwZW9mIHYgIT09IFwibnVtYmVyXCIpIHJldHVybiBbNCwgZm10Lmxlbmd0aCA9PT0gNCB8fCBsYXQ+LTE/Zm10W2ZtdC5sZW5ndGgtMV06XCJAXCJdO1xuXHRzd2l0Y2goZm10Lmxlbmd0aCkge1xuXHRcdGNhc2UgMTogZm10ID0gbGF0Pi0xID8gW1wiR2VuZXJhbFwiLCBcIkdlbmVyYWxcIiwgXCJHZW5lcmFsXCIsIGZtdFswXV0gOiBbZm10WzBdLCBmbXRbMF0sIGZtdFswXSwgXCJAXCJdOyBicmVhaztcblx0XHRjYXNlIDI6IGZtdCA9IGxhdD4tMSA/IFtmbXRbMF0sIGZtdFswXSwgZm10WzBdLCBmbXRbMV1dIDogW2ZtdFswXSwgZm10WzFdLCBmbXRbMF0sIFwiQFwiXTsgYnJlYWs7XG5cdFx0Y2FzZSAzOiBmbXQgPSBsYXQ+LTEgPyBbZm10WzBdLCBmbXRbMV0sIGZtdFswXSwgZm10WzJdXSA6IFtmbXRbMF0sIGZtdFsxXSwgZm10WzJdLCBcIkBcIl07IGJyZWFrO1xuXHRcdGNhc2UgNDogYnJlYWs7XG5cdH1cblx0dmFyIGZmID0gdiA+IDAgPyBmbXRbMF0gOiB2IDwgMCA/IGZtdFsxXSA6IGZtdFsyXTtcblx0aWYoZm10WzBdLmluZGV4T2YoXCJbXCIpID09PSAtMSAmJiBmbXRbMV0uaW5kZXhPZihcIltcIikgPT09IC0xKSByZXR1cm4gW2wsIGZmXTtcblx0aWYoZm10WzBdLm1hdGNoKGNmcmVnZXgpICE9IG51bGwgfHwgZm10WzFdLm1hdGNoKGNmcmVnZXgpICE9IG51bGwpIHtcblx0XHR2YXIgbTEgPSBmbXRbMF0ubWF0Y2goY2ZyZWdleDIpO1xuXHRcdHZhciBtMiA9IGZtdFsxXS5tYXRjaChjZnJlZ2V4Mik7XG5cdFx0cmV0dXJuIGNoa2NvbmQodiwgbTEpID8gW2wsIGZtdFswXV0gOiBjaGtjb25kKHYsIG0yKSA/IFtsLCBmbXRbMV1dIDogW2wsIGZtdFttMSAhPSBudWxsICYmIG0yICE9IG51bGwgPyAyIDogMV1dO1xuXHR9XG5cdHJldHVybiBbbCwgZmZdO1xufVxuZnVuY3Rpb24gZm9ybWF0KGZtdCx2LG8pIHtcblx0aWYobyA9PSBudWxsKSBvID0ge307XG5cdHZhciBzZm10ID0gXCJcIjtcblx0c3dpdGNoKHR5cGVvZiBmbXQpIHtcblx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRpZihmbXQgPT0gXCJtL2QveXlcIiAmJiBvLmRhdGVORikgc2ZtdCA9IG8uZGF0ZU5GO1xuXHRcdFx0ZWxzZSBzZm10ID0gZm10O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0aWYoZm10ID09IDE0ICYmIG8uZGF0ZU5GKSBzZm10ID0gby5kYXRlTkY7XG5cdFx0XHRlbHNlIHNmbXQgPSAoby50YWJsZSAhPSBudWxsID8gKG8udGFibGUpIDogdGFibGVfZm10KVtmbXRdO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYoaXNnZW5lcmFsKHNmbXQsMCkpIHJldHVybiBnZW5lcmFsX2ZtdCh2LCBvKTtcblx0aWYodiBpbnN0YW5jZW9mIERhdGUpIHYgPSBkYXRlbnVtX2xvY2FsKHYsIG8uZGF0ZTE5MDQpO1xuXHR2YXIgZiA9IGNob29zZV9mbXQoc2ZtdCwgdik7XG5cdGlmKGlzZ2VuZXJhbChmWzFdKSkgcmV0dXJuIGdlbmVyYWxfZm10KHYsIG8pO1xuXHRpZih2ID09PSB0cnVlKSB2ID0gXCJUUlVFXCI7IGVsc2UgaWYodiA9PT0gZmFsc2UpIHYgPSBcIkZBTFNFXCI7XG5cdGVsc2UgaWYodiA9PT0gXCJcIiB8fCB2ID09IG51bGwpIHJldHVybiBcIlwiO1xuXHRyZXR1cm4gZXZhbF9mbXQoZlsxXSwgdiwgbywgZlswXSk7XG59XG5mdW5jdGlvbiBsb2FkX2VudHJ5KGZtdCwgaWR4KSB7XG5cdGlmKHR5cGVvZiBpZHggIT0gJ251bWJlcicpIHtcblx0XHRpZHggPSAraWR4IHx8IC0xO1xuZm9yKHZhciBpID0gMDsgaSA8IDB4MDE4ODsgKytpKSB7XG5pZih0YWJsZV9mbXRbaV0gPT0gdW5kZWZpbmVkKSB7IGlmKGlkeCA8IDApIGlkeCA9IGk7IGNvbnRpbnVlOyB9XG5cdFx0XHRpZih0YWJsZV9mbXRbaV0gPT0gZm10KSB7IGlkeCA9IGk7IGJyZWFrOyB9XG5cdFx0fVxuaWYoaWR4IDwgMCkgaWR4ID0gMHgxODc7XG5cdH1cbnRhYmxlX2ZtdFtpZHhdID0gZm10O1xuXHRyZXR1cm4gaWR4O1xufVxuU1NGLmxvYWQgPSBsb2FkX2VudHJ5O1xuU1NGLl90YWJsZSA9IHRhYmxlX2ZtdDtcblNTRi5nZXRfdGFibGUgPSBmdW5jdGlvbiBnZXRfdGFibGUoKSB7IHJldHVybiB0YWJsZV9mbXQ7IH07XG5TU0YubG9hZF90YWJsZSA9IGZ1bmN0aW9uIGxvYWRfdGFibGUodGJsKSB7XG5cdGZvcih2YXIgaT0wOyBpIT0weDAxODg7ICsraSlcblx0XHRpZih0YmxbaV0gIT09IHVuZGVmaW5lZCkgbG9hZF9lbnRyeSh0YmxbaV0sIGkpO1xufTtcblNTRi5pbml0X3RhYmxlID0gaW5pdF90YWJsZTtcblNTRi5mb3JtYXQgPSBmb3JtYXQ7XG59O1xubWFrZV9zc2YoU1NGKTtcbi8qIG1hcCBmcm9tIHhsbWwgbmFtZWQgZm9ybWF0cyB0byBTU0YgVE9ETzogbG9jYWxpemUgKi9cbnZhciBYTE1MRm9ybWF0TWFwLyp7W3N0cmluZ106c3RyaW5nfSovID0gKHtcblx0XCJHZW5lcmFsIE51bWJlclwiOiBcIkdlbmVyYWxcIixcblx0XCJHZW5lcmFsIERhdGVcIjogU1NGLl90YWJsZVsyMl0sXG5cdFwiTG9uZyBEYXRlXCI6IFwiZGRkZCwgbW1tbSBkZCwgeXl5eVwiLFxuXHRcIk1lZGl1bSBEYXRlXCI6IFNTRi5fdGFibGVbMTVdLFxuXHRcIlNob3J0IERhdGVcIjogU1NGLl90YWJsZVsxNF0sXG5cdFwiTG9uZyBUaW1lXCI6IFNTRi5fdGFibGVbMTldLFxuXHRcIk1lZGl1bSBUaW1lXCI6IFNTRi5fdGFibGVbMThdLFxuXHRcIlNob3J0IFRpbWVcIjogU1NGLl90YWJsZVsyMF0sXG5cdFwiQ3VycmVuY3lcIjogJ1wiJFwiIywjIzAuMDBfKTtbUmVkXVxcXFwoXCIkXCIjLCMjMC4wMFxcXFwpJyxcblx0XCJGaXhlZFwiOiBTU0YuX3RhYmxlWzJdLFxuXHRcIlN0YW5kYXJkXCI6IFNTRi5fdGFibGVbNF0sXG5cdFwiUGVyY2VudFwiOiBTU0YuX3RhYmxlWzEwXSxcblx0XCJTY2llbnRpZmljXCI6IFNTRi5fdGFibGVbMTFdLFxuXHRcIlllcy9Ob1wiOiAnXCJZZXNcIjtcIlllc1wiO1wiTm9cIjtAJyxcblx0XCJUcnVlL0ZhbHNlXCI6ICdcIlRydWVcIjtcIlRydWVcIjtcIkZhbHNlXCI7QCcsXG5cdFwiT24vT2ZmXCI6ICdcIlllc1wiO1wiWWVzXCI7XCJOb1wiO0AnXG59KTtcblxuLyogZGF0ZU5GIHBhcnNlIFRPRE86IG1vdmUgdG8gU1NGICovXG52YXIgZGF0ZU5GcmVnZXggPSAvW2REXSt8W21NXSt8W3lZZUVdK3xbSGhdK3xbU3NdKy9nO1xuZnVuY3Rpb24gZGF0ZU5GX3JlZ2V4KGRhdGVORikge1xuXHR2YXIgZm10ID0gdHlwZW9mIGRhdGVORiA9PSBcIm51bWJlclwiID8gU1NGLl90YWJsZVtkYXRlTkZdIDogZGF0ZU5GO1xuXHRmbXQgPSBmbXQucmVwbGFjZShkYXRlTkZyZWdleCwgXCIoXFxcXGQrKVwiKTtcblx0cmV0dXJuIG5ldyBSZWdFeHAoXCJeXCIgKyBmbXQgKyBcIiRcIik7XG59XG5mdW5jdGlvbiBkYXRlTkZfZml4KHN0ciwgZGF0ZU5GLCBtYXRjaCkge1xuXHR2YXIgWSA9IC0xLCBtID0gLTEsIGQgPSAtMSwgSCA9IC0xLCBNID0gLTEsIFMgPSAtMTtcblx0KGRhdGVORi5tYXRjaChkYXRlTkZyZWdleCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG4sIGkpIHtcblx0XHR2YXIgdiA9IHBhcnNlSW50KG1hdGNoW2krMV0sIDEwKTtcblx0XHRzd2l0Y2gobi50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSkge1xuXHRcdFx0Y2FzZSAneSc6IFkgPSB2OyBicmVhazsgY2FzZSAnZCc6IGQgPSB2OyBicmVhaztcblx0XHRcdGNhc2UgJ2gnOiBIID0gdjsgYnJlYWs7IGNhc2UgJ3MnOiBTID0gdjsgYnJlYWs7XG5cdFx0XHRjYXNlICdtJzogaWYoSCA+PSAwKSBNID0gdjsgZWxzZSBtID0gdjsgYnJlYWs7XG5cdFx0fVxuXHR9KTtcblx0aWYoUyA+PSAwICYmIE0gPT0gLTEgJiYgbSA+PSAwKSB7IE0gPSBtOyBtID0gLTE7IH1cblx0dmFyIGRhdGVzdHIgPSAoKFwiXCIgKyAoWT49MD9ZOiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkpKS5zbGljZSgtNCkgKyBcIi1cIiArIChcIjAwXCIgKyAobT49MT9tOjEpKS5zbGljZSgtMikgKyBcIi1cIiArIChcIjAwXCIgKyAoZD49MT9kOjEpKS5zbGljZSgtMikpO1xuXHRpZihkYXRlc3RyLmxlbmd0aCA9PSA3KSBkYXRlc3RyID0gXCIwXCIgKyBkYXRlc3RyO1xuXHRpZihkYXRlc3RyLmxlbmd0aCA9PSA4KSBkYXRlc3RyID0gXCIyMFwiICsgZGF0ZXN0cjtcblx0dmFyIHRpbWVzdHIgPSAoKFwiMDBcIiArIChIPj0wP0g6MCkpLnNsaWNlKC0yKSArIFwiOlwiICsgKFwiMDBcIiArIChNPj0wP006MCkpLnNsaWNlKC0yKSArIFwiOlwiICsgKFwiMDBcIiArIChTPj0wP1M6MCkpLnNsaWNlKC0yKSk7XG5cdGlmKEggPT0gLTEgJiYgTSA9PSAtMSAmJiBTID09IC0xKSByZXR1cm4gZGF0ZXN0cjtcblx0aWYoWSA9PSAtMSAmJiBtID09IC0xICYmIGQgPT0gLTEpIHJldHVybiB0aW1lc3RyO1xuXHRyZXR1cm4gZGF0ZXN0ciArIFwiVFwiICsgdGltZXN0cjtcbn1cblxudmFyIERPX05PVF9FWFBPUlRfQ0ZCID0gdHJ1ZTtcbi8qIGNmYi5qcyAoQykgMjAxMy1wcmVzZW50IFNoZWV0SlMgLS0gaHR0cDovL3NoZWV0anMuY29tICovXG4vKiB2aW06IHNldCB0cz0yOiAqL1xuLypqc2hpbnQgZXFudWxsOnRydWUgKi9cbi8qZXhwb3J0ZWQgQ0ZCICovXG4vKmdsb2JhbCBtb2R1bGUsIHJlcXVpcmU6ZmFsc2UsIHByb2Nlc3M6ZmFsc2UsIEJ1ZmZlcjpmYWxzZSwgVWludDhBcnJheTpmYWxzZSAqL1xuXG4vKiBbTVMtQ0ZCXSB2MjAxMzAxMTggKi9cbnZhciBDRkIgPSAoZnVuY3Rpb24gX0NGQigpe1xudmFyIGV4cG9ydHMgPSB7fTtcbmV4cG9ydHMudmVyc2lvbiA9ICcxLjAuMic7XG4vKiBbTVMtQ0ZCXSAyLjYuNCAqL1xuZnVuY3Rpb24gbmFtZWNtcChsLCByKSB7XG5cdHZhciBMID0gbC5zcGxpdChcIi9cIiksIFIgPSByLnNwbGl0KFwiL1wiKTtcblx0Zm9yKHZhciBpID0gMCwgYyA9IDAsIFogPSBNYXRoLm1pbihMLmxlbmd0aCwgUi5sZW5ndGgpOyBpIDwgWjsgKytpKSB7XG5cdFx0aWYoKGMgPSBMW2ldLmxlbmd0aCAtIFJbaV0ubGVuZ3RoKSkgcmV0dXJuIGM7XG5cdFx0aWYoTFtpXSAhPSBSW2ldKSByZXR1cm4gTFtpXSA8IFJbaV0gPyAtMSA6IDE7XG5cdH1cblx0cmV0dXJuIEwubGVuZ3RoIC0gUi5sZW5ndGg7XG59XG5mdW5jdGlvbiBkaXJuYW1lKHApIHtcblx0aWYocC5jaGFyQXQocC5sZW5ndGggLSAxKSA9PSBcIi9cIikgcmV0dXJuIChwLnNsaWNlKDAsLTEpLmluZGV4T2YoXCIvXCIpID09PSAtMSkgPyBwIDogZGlybmFtZShwLnNsaWNlKDAsIC0xKSk7XG5cdHZhciBjID0gcC5sYXN0SW5kZXhPZihcIi9cIik7XG5cdHJldHVybiAoYyA9PT0gLTEpID8gcCA6IHAuc2xpY2UoMCwgYysxKTtcbn1cblxuZnVuY3Rpb24gZmlsZW5hbWUocCkge1xuXHRpZihwLmNoYXJBdChwLmxlbmd0aCAtIDEpID09IFwiL1wiKSByZXR1cm4gZmlsZW5hbWUocC5zbGljZSgwLCAtMSkpO1xuXHR2YXIgYyA9IHAubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRyZXR1cm4gKGMgPT09IC0xKSA/IHAgOiBwLnNsaWNlKGMrMSk7XG59XG52YXIgZnM7XG5mdW5jdGlvbiBnZXRfZnMoKSB7IHJldHVybiBmcyB8fCAoZnMgPSByZXF1aXJlKCdmcycpKTsgfVxuZnVuY3Rpb24gcGFyc2UoZmlsZSwgb3B0aW9ucykge1xudmFyIG12ZXIgPSAzO1xudmFyIHNzeiA9IDUxMjtcbnZhciBubWZzID0gMDsgLy8gbnVtYmVyIG9mIG1pbmkgRkFUIHNlY3RvcnNcbnZhciBkaWZhdF9zZWNfY250ID0gMDtcbnZhciBkaXJfc3RhcnQgPSAwO1xudmFyIG1pbmlmYXRfc3RhcnQgPSAwO1xudmFyIGRpZmF0X3N0YXJ0ID0gMDtcblxudmFyIGZhdF9hZGRycyA9IFtdOyAvLyBsb2NhdGlvbnMgb2YgRkFUIHNlY3RvcnNcblxuLyogW01TLUNGQl0gMi4yIENvbXBvdW5kIEZpbGUgSGVhZGVyICovXG52YXIgYmxvYiA9IGZpbGUuc2xpY2UoMCw1MTIpO1xucHJlcF9ibG9iKGJsb2IsIDApO1xuXG4vKiBtYWpvciB2ZXJzaW9uICovXG52YXIgbXYgPSBjaGVja19nZXRfbXZlcihibG9iKTtcbm12ZXIgPSBtdlswXTtcbnN3aXRjaChtdmVyKSB7XG5cdGNhc2UgMzogc3N6ID0gNTEyOyBicmVhazsgY2FzZSA0OiBzc3ogPSA0MDk2OyBicmVhaztcblx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiTWFqb3IgVmVyc2lvbjogRXhwZWN0ZWQgMyBvciA0IHNhdyBcIiArIG12ZXIpO1xufVxuXG4vKiByZXByb2Nlc3MgaGVhZGVyICovXG5pZihzc3ogIT09IDUxMikgeyBibG9iID0gZmlsZS5zbGljZSgwLHNzeik7IHByZXBfYmxvYihibG9iLCAyOCAvKiBibG9iLmwgKi8pOyB9XG4vKiBTYXZlIGhlYWRlciBmb3IgZmluYWwgb2JqZWN0ICovXG52YXIgaGVhZGVyID0gZmlsZS5zbGljZSgwLHNzeik7XG5cbmNoZWNrX3NoaWZ0cyhibG9iLCBtdmVyKTtcblxuLy8gTnVtYmVyIG9mIERpcmVjdG9yeSBTZWN0b3JzXG52YXIgZGlyX2NudCA9IGJsb2IucmVhZF9zaGlmdCg0LCAnaScpO1xuaWYobXZlciA9PT0gMyAmJiBkaXJfY250ICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJyMgRGlyZWN0b3J5IFNlY3RvcnM6IEV4cGVjdGVkIDAgc2F3ICcgKyBkaXJfY250KTtcblxuLy8gTnVtYmVyIG9mIEZBVCBTZWN0b3JzXG5ibG9iLmwgKz0gNDtcblxuLy8gRmlyc3QgRGlyZWN0b3J5IFNlY3RvciBMb2NhdGlvblxuZGlyX3N0YXJ0ID0gYmxvYi5yZWFkX3NoaWZ0KDQsICdpJyk7XG5cbi8vIFRyYW5zYWN0aW9uIFNpZ25hdHVyZVxuYmxvYi5sICs9IDQ7XG5cbi8vIE1pbmkgU3RyZWFtIEN1dG9mZiBTaXplXG5ibG9iLmNoaygnMDAxMDAwMDAnLCAnTWluaSBTdHJlYW0gQ3V0b2ZmIFNpemU6ICcpO1xuXG4vLyBGaXJzdCBNaW5pIEZBVCBTZWN0b3IgTG9jYXRpb25cbm1pbmlmYXRfc3RhcnQgPSBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKTtcblxuLy8gTnVtYmVyIG9mIE1pbmkgRkFUIFNlY3RvcnNcbm5tZnMgPSBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKTtcblxuLy8gRmlyc3QgRElGQVQgc2VjdG9yIGxvY2F0aW9uXG5kaWZhdF9zdGFydCA9IGJsb2IucmVhZF9zaGlmdCg0LCAnaScpO1xuXG4vLyBOdW1iZXIgb2YgRElGQVQgU2VjdG9yc1xuZGlmYXRfc2VjX2NudCA9IGJsb2IucmVhZF9zaGlmdCg0LCAnaScpO1xuXG4vLyBHcmFiIEZBVCBTZWN0b3IgTG9jYXRpb25zXG5mb3IodmFyIHEgPSAtMSwgaiA9IDA7IGogPCAxMDk7ICsraikgeyAvKiAxMDkgPSAoNTEyIC0gYmxvYi5sKT4+PjI7ICovXG5cdHEgPSBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKTtcblx0aWYocTwwKSBicmVhaztcblx0ZmF0X2FkZHJzW2pdID0gcTtcbn1cblxuLyoqIEJyZWFrIHRoZSBmaWxlIHVwIGludG8gc2VjdG9ycyAqL1xudmFyIHNlY3RvcnMgPSBzZWN0b3JpZnkoZmlsZSwgc3N6KTtcblxuc2xldXRoX2ZhdChkaWZhdF9zdGFydCwgZGlmYXRfc2VjX2NudCwgc2VjdG9ycywgc3N6LCBmYXRfYWRkcnMpO1xuXG4vKiogQ2hhaW5zICovXG52YXIgc2VjdG9yX2xpc3QgPSBtYWtlX3NlY3Rvcl9saXN0KHNlY3RvcnMsIGRpcl9zdGFydCwgZmF0X2FkZHJzLCBzc3opO1xuXG5zZWN0b3JfbGlzdFtkaXJfc3RhcnRdLm5hbWUgPSBcIiFEaXJlY3RvcnlcIjtcbmlmKG5tZnMgPiAwICYmIG1pbmlmYXRfc3RhcnQgIT09IEVORE9GQ0hBSU4pIHNlY3Rvcl9saXN0W21pbmlmYXRfc3RhcnRdLm5hbWUgPSBcIiFNaW5pRkFUXCI7XG5zZWN0b3JfbGlzdFtmYXRfYWRkcnNbMF1dLm5hbWUgPSBcIiFGQVRcIjtcbnNlY3Rvcl9saXN0LmZhdF9hZGRycyA9IGZhdF9hZGRycztcbnNlY3Rvcl9saXN0LnNzeiA9IHNzejtcblxuLyogW01TLUNGQl0gMi42LjEgQ29tcG91bmQgRmlsZSBEaXJlY3RvcnkgRW50cnkgKi9cbnZhciBmaWxlcyA9IHt9LCBQYXRocyA9IFtdLCBGaWxlSW5kZXggPSBbXSwgRnVsbFBhdGhzID0gW107XG5yZWFkX2RpcmVjdG9yeShkaXJfc3RhcnQsIHNlY3Rvcl9saXN0LCBzZWN0b3JzLCBQYXRocywgbm1mcywgZmlsZXMsIEZpbGVJbmRleCwgbWluaWZhdF9zdGFydCk7XG5cbmJ1aWxkX2Z1bGxfcGF0aHMoRmlsZUluZGV4LCBGdWxsUGF0aHMsIFBhdGhzKTtcblBhdGhzLnNoaWZ0KCk7XG5cbnZhciBvID0ge1xuXHRGaWxlSW5kZXg6IEZpbGVJbmRleCxcblx0RnVsbFBhdGhzOiBGdWxsUGF0aHNcbn07XG5cbi8vICRGbG93SWdub3JlXG5pZihvcHRpb25zICYmIG9wdGlvbnMucmF3KSBvLnJhdyA9IHtoZWFkZXI6IGhlYWRlciwgc2VjdG9yczogc2VjdG9yc307XG5yZXR1cm4gbztcbn0gLy8gcGFyc2VcblxuLyogW01TLUNGQl0gMi4yIENvbXBvdW5kIEZpbGUgSGVhZGVyIC0tIHJlYWQgdXAgdG8gbWFqb3IgdmVyc2lvbiAqL1xuZnVuY3Rpb24gY2hlY2tfZ2V0X212ZXIoYmxvYikge1xuXHQvLyBoZWFkZXIgc2lnbmF0dXJlIDhcblx0YmxvYi5jaGsoSEVBREVSX1NJR05BVFVSRSwgJ0hlYWRlciBTaWduYXR1cmU6ICcpO1xuXG5cdC8vIGNsc2lkIDE2XG5cdGJsb2IuY2hrKEhFQURFUl9DTFNJRCwgJ0NMU0lEOiAnKTtcblxuXHQvLyBtaW5vciB2ZXJzaW9uIDJcblx0dmFyIG12ZXIgPSBibG9iLnJlYWRfc2hpZnQoMiwgJ3UnKTtcblxuXHRyZXR1cm4gW2Jsb2IucmVhZF9zaGlmdCgyLCd1JyksIG12ZXJdO1xufVxuZnVuY3Rpb24gY2hlY2tfc2hpZnRzKGJsb2IsIG12ZXIpIHtcblx0dmFyIHNoaWZ0ID0gMHgwOTtcblxuXHQvLyBCeXRlIE9yZGVyXG5cdC8vYmxvYi5jaGsoJ2ZlZmYnLCAnQnl0ZSBPcmRlcjogJyk7IC8vIG5vdGU6IHNvbWUgd3JpdGVycyBwdXQgMHhmZmZmXG5cdGJsb2IubCArPSAyO1xuXG5cdC8vIFNlY3RvciBTaGlmdFxuXHRzd2l0Y2goKHNoaWZ0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpKSkge1xuXHRcdGNhc2UgMHgwOTogaWYobXZlciAhPSAzKSB0aHJvdyBuZXcgRXJyb3IoJ1NlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBzYXcgJyArIHNoaWZ0KTsgYnJlYWs7XG5cdFx0Y2FzZSAweDBjOiBpZihtdmVyICE9IDQpIHRocm93IG5ldyBFcnJvcignU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCAxMiBzYXcgJyArIHNoaWZ0KTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgb3IgMTIgc2F3ICcgKyBzaGlmdCk7XG5cdH1cblxuXHQvLyBNaW5pIFNlY3RvciBTaGlmdFxuXHRibG9iLmNoaygnMDYwMCcsICdNaW5pIFNlY3RvciBTaGlmdDogJyk7XG5cblx0Ly8gUmVzZXJ2ZWRcblx0YmxvYi5jaGsoJzAwMDAwMDAwMDAwMCcsICdSZXNlcnZlZDogJyk7XG59XG5cbi8qKiBCcmVhayB0aGUgZmlsZSB1cCBpbnRvIHNlY3RvcnMgKi9cbmZ1bmN0aW9uIHNlY3RvcmlmeShmaWxlLCBzc3opIHtcblx0dmFyIG5zZWN0b3JzID0gTWF0aC5jZWlsKGZpbGUubGVuZ3RoL3NzeiktMTtcblx0dmFyIHNlY3RvcnMgPSBbXTtcblx0Zm9yKHZhciBpPTE7IGkgPCBuc2VjdG9yczsgKytpKSBzZWN0b3JzW2ktMV0gPSBmaWxlLnNsaWNlKGkqc3N6LChpKzEpKnNzeik7XG5cdHNlY3RvcnNbbnNlY3RvcnMtMV0gPSBmaWxlLnNsaWNlKG5zZWN0b3JzKnNzeik7XG5cdHJldHVybiBzZWN0b3JzO1xufVxuXG4vKiBbTVMtQ0ZCXSAyLjYuNCBSZWQtQmxhY2sgVHJlZSAqL1xuZnVuY3Rpb24gYnVpbGRfZnVsbF9wYXRocyhGSSwgRlAsIFBhdGhzKSB7XG5cdHZhciBpID0gMCwgTCA9IDAsIFIgPSAwLCBDID0gMCwgaiA9IDAsIHBsID0gUGF0aHMubGVuZ3RoO1xuXHR2YXIgZGFkID0gW10sIHEgPSBbXTtcblxuXHRmb3IoOyBpIDwgcGw7ICsraSkgeyBkYWRbaV09cVtpXT1pOyBGUFtpXT1QYXRoc1tpXTsgfVxuXG5cdGZvcig7IGogPCBxLmxlbmd0aDsgKytqKSB7XG5cdFx0aSA9IHFbal07XG5cdFx0TCA9IEZJW2ldLkw7IFIgPSBGSVtpXS5SOyBDID0gRklbaV0uQztcblx0XHRpZihkYWRbaV0gPT09IGkpIHtcblx0XHRcdGlmKEwgIT09IC0xIC8qTk9TVFJFQU0qLyAmJiBkYWRbTF0gIT09IEwpIGRhZFtpXSA9IGRhZFtMXTtcblx0XHRcdGlmKFIgIT09IC0xICYmIGRhZFtSXSAhPT0gUikgZGFkW2ldID0gZGFkW1JdO1xuXHRcdH1cblx0XHRpZihDICE9PSAtMSAvKk5PU1RSRUFNKi8pIGRhZFtDXSA9IGk7XG5cdFx0aWYoTCAhPT0gLTEpIHsgZGFkW0xdID0gZGFkW2ldOyBxLnB1c2goTCk7IH1cblx0XHRpZihSICE9PSAtMSkgeyBkYWRbUl0gPSBkYWRbaV07IHEucHVzaChSKTsgfVxuXHR9XG5cdGZvcihpPTE7IGkgIT09IHBsOyArK2kpIGlmKGRhZFtpXSA9PT0gaSkge1xuXHRcdGlmKFIgIT09IC0xIC8qTk9TVFJFQU0qLyAmJiBkYWRbUl0gIT09IFIpIGRhZFtpXSA9IGRhZFtSXTtcblx0XHRlbHNlIGlmKEwgIT09IC0xICYmIGRhZFtMXSAhPT0gTCkgZGFkW2ldID0gZGFkW0xdO1xuXHR9XG5cblx0Zm9yKGk9MTsgaSA8IHBsOyArK2kpIHtcblx0XHRpZihGSVtpXS50eXBlID09PSAwIC8qIHVua25vd24gKi8pIGNvbnRpbnVlO1xuXHRcdGogPSBkYWRbaV07XG5cdFx0aWYoaiA9PT0gMCkgRlBbaV0gPSBGUFswXSArIFwiL1wiICsgRlBbaV07XG5cdFx0ZWxzZSB3aGlsZShqICE9PSAwICYmIGogIT09IGRhZFtqXSkge1xuXHRcdFx0RlBbaV0gPSBGUFtqXSArIFwiL1wiICsgRlBbaV07XG5cdFx0XHRqID0gZGFkW2pdO1xuXHRcdH1cblx0XHRkYWRbaV0gPSAwO1xuXHR9XG5cblx0RlBbMF0gKz0gXCIvXCI7XG5cdGZvcihpPTE7IGkgPCBwbDsgKytpKSB7XG5cdFx0aWYoRklbaV0udHlwZSAhPT0gMiAvKiBzdHJlYW0gKi8pIEZQW2ldICs9IFwiL1wiO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldF9tZmF0X2VudHJ5KGVudHJ5LCBwYXlsb2FkLCBtaW5pKSB7XG5cdHZhciBzdGFydCA9IGVudHJ5LnN0YXJ0LCBzaXplID0gZW50cnkuc2l6ZTtcblx0Ly9yZXR1cm4gKHBheWxvYWQuc2xpY2Uoc3RhcnQqTVNTWiwgc3RhcnQqTVNTWiArIHNpemUpKTtcblx0dmFyIG8gPSBbXTtcblx0dmFyIGlkeCA9IHN0YXJ0O1xuXHR3aGlsZShtaW5pICYmIHNpemUgPiAwICYmIGlkeCA+PSAwKSB7XG5cdFx0by5wdXNoKHBheWxvYWQuc2xpY2UoaWR4ICogTVNTWiwgaWR4ICogTVNTWiArIE1TU1opKTtcblx0XHRzaXplIC09IE1TU1o7XG5cdFx0aWR4ID0gX19yZWFkSW50MzJMRShtaW5pLCBpZHggKiA0KTtcblx0fVxuXHRpZihvLmxlbmd0aCA9PT0gMCkgcmV0dXJuIChuZXdfYnVmKDApKTtcblx0cmV0dXJuIChiY29uY2F0KG8pLnNsaWNlKDAsIGVudHJ5LnNpemUpKTtcbn1cblxuLyoqIENoYXNlIGRvd24gdGhlIHJlc3Qgb2YgdGhlIERJRkFUIGNoYWluIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBsaXN0XG4gICAgRElGQVQgY2hhaW5zIGJ5IHN0b3JpbmcgdGhlIG5leHQgc2VjdG9yIG51bWJlciBhcyB0aGUgbGFzdCAzMiBiaXRzICovXG5mdW5jdGlvbiBzbGV1dGhfZmF0KGlkeCwgY250LCBzZWN0b3JzLCBzc3osIGZhdF9hZGRycykge1xuXHR2YXIgcSA9IEVORE9GQ0hBSU47XG5cdGlmKGlkeCA9PT0gRU5ET0ZDSEFJTikge1xuXHRcdGlmKGNudCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkXCIpO1xuXHR9IGVsc2UgaWYoaWR4ICE9PSAtMSAvKkZSRUVTRUNUKi8pIHtcblx0XHR2YXIgc2VjdG9yID0gc2VjdG9yc1tpZHhdLCBtID0gKHNzej4+PjIpLTE7XG5cdFx0aWYoIXNlY3RvcikgcmV0dXJuO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBtOyArK2kpIHtcblx0XHRcdGlmKChxID0gX19yZWFkSW50MzJMRShzZWN0b3IsaSo0KSkgPT09IEVORE9GQ0hBSU4pIGJyZWFrO1xuXHRcdFx0ZmF0X2FkZHJzLnB1c2gocSk7XG5cdFx0fVxuXHRcdHNsZXV0aF9mYXQoX19yZWFkSW50MzJMRShzZWN0b3Isc3N6LTQpLGNudCAtIDEsIHNlY3RvcnMsIHNzeiwgZmF0X2FkZHJzKTtcblx0fVxufVxuXG4vKiogRm9sbG93IHRoZSBsaW5rZWQgbGlzdCBvZiBzZWN0b3JzIGZvciBhIGdpdmVuIHN0YXJ0aW5nIHBvaW50ICovXG5mdW5jdGlvbiBnZXRfc2VjdG9yX2xpc3Qoc2VjdG9ycywgc3RhcnQsIGZhdF9hZGRycywgc3N6LCBjaGtkKSB7XG5cdHZhciBidWYgPSBbXSwgYnVmX2NoYWluID0gW107XG5cdGlmKCFjaGtkKSBjaGtkID0gW107XG5cdHZhciBtb2R1bHVzID0gc3N6IC0gMSwgaiA9IDAsIGpqID0gMDtcblx0Zm9yKGo9c3RhcnQ7IGo+PTA7KSB7XG5cdFx0Y2hrZFtqXSA9IHRydWU7XG5cdFx0YnVmW2J1Zi5sZW5ndGhdID0gajtcblx0XHRidWZfY2hhaW4ucHVzaChzZWN0b3JzW2pdKTtcblx0XHR2YXIgYWRkciA9IGZhdF9hZGRyc1tNYXRoLmZsb29yKGoqNC9zc3opXTtcblx0XHRqaiA9ICgoaio0KSAmIG1vZHVsdXMpO1xuXHRcdGlmKHNzeiA8IDQgKyBqaikgdGhyb3cgbmV3IEVycm9yKFwiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6IFwiICsgaiArIFwiIDQgXCIrc3N6KTtcblx0XHRpZighc2VjdG9yc1thZGRyXSkgYnJlYWs7XG5cdFx0aiA9IF9fcmVhZEludDMyTEUoc2VjdG9yc1thZGRyXSwgamopO1xuXHR9XG5cdHJldHVybiB7bm9kZXM6IGJ1ZiwgZGF0YTpfX3RvQnVmZmVyKFtidWZfY2hhaW5dKX07XG59XG5cbi8qKiBDaGFzZSBkb3duIHRoZSBzZWN0b3IgbGlua2VkIGxpc3RzICovXG5mdW5jdGlvbiBtYWtlX3NlY3Rvcl9saXN0KHNlY3RvcnMsIGRpcl9zdGFydCwgZmF0X2FkZHJzLCBzc3opIHtcblx0dmFyIHNsID0gc2VjdG9ycy5sZW5ndGgsIHNlY3Rvcl9saXN0ID0gKFtdKTtcblx0dmFyIGNoa2QgPSBbXSwgYnVmID0gW10sIGJ1Zl9jaGFpbiA9IFtdO1xuXHR2YXIgbW9kdWx1cyA9IHNzeiAtIDEsIGk9MCwgaj0wLCBrPTAsIGpqPTA7XG5cdGZvcihpPTA7IGkgPCBzbDsgKytpKSB7XG5cdFx0YnVmID0gKFtdKTtcblx0XHRrID0gKGkgKyBkaXJfc3RhcnQpOyBpZihrID49IHNsKSBrLT1zbDtcblx0XHRpZihjaGtkW2tdKSBjb250aW51ZTtcblx0XHRidWZfY2hhaW4gPSBbXTtcblx0XHRmb3Ioaj1rOyBqPj0wOykge1xuXHRcdFx0Y2hrZFtqXSA9IHRydWU7XG5cdFx0XHRidWZbYnVmLmxlbmd0aF0gPSBqO1xuXHRcdFx0YnVmX2NoYWluLnB1c2goc2VjdG9yc1tqXSk7XG5cdFx0XHR2YXIgYWRkciA9IGZhdF9hZGRyc1tNYXRoLmZsb29yKGoqNC9zc3opXTtcblx0XHRcdGpqID0gKChqKjQpICYgbW9kdWx1cyk7XG5cdFx0XHRpZihzc3ogPCA0ICsgamopIHRocm93IG5ldyBFcnJvcihcIkZBVCBib3VuZGFyeSBjcm9zc2VkOiBcIiArIGogKyBcIiA0IFwiK3Nzeik7XG5cdFx0XHRpZighc2VjdG9yc1thZGRyXSkgYnJlYWs7XG5cdFx0XHRqID0gX19yZWFkSW50MzJMRShzZWN0b3JzW2FkZHJdLCBqaik7XG5cdFx0fVxuXHRcdHNlY3Rvcl9saXN0W2tdID0gKHtub2RlczogYnVmLCBkYXRhOl9fdG9CdWZmZXIoW2J1Zl9jaGFpbl0pfSk7XG5cdH1cblx0cmV0dXJuIHNlY3Rvcl9saXN0O1xufVxuXG4vKiBbTVMtQ0ZCXSAyLjYuMSBDb21wb3VuZCBGaWxlIERpcmVjdG9yeSBFbnRyeSAqL1xuZnVuY3Rpb24gcmVhZF9kaXJlY3RvcnkoZGlyX3N0YXJ0LCBzZWN0b3JfbGlzdCwgc2VjdG9ycywgUGF0aHMsIG5tZnMsIGZpbGVzLCBGaWxlSW5kZXgsIG1pbmkpIHtcblx0dmFyIG1pbmlmYXRfc3RvcmUgPSAwLCBwbCA9IChQYXRocy5sZW5ndGg/MjowKTtcblx0dmFyIHNlY3RvciA9IHNlY3Rvcl9saXN0W2Rpcl9zdGFydF0uZGF0YTtcblx0dmFyIGkgPSAwLCBuYW1lbGVuID0gMCwgbmFtZTtcblx0Zm9yKDsgaSA8IHNlY3Rvci5sZW5ndGg7IGkrPSAxMjgpIHtcblx0XHR2YXIgYmxvYiA9IHNlY3Rvci5zbGljZShpLCBpKzEyOCk7XG5cdFx0cHJlcF9ibG9iKGJsb2IsIDY0KTtcblx0XHRuYW1lbGVuID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRcdG5hbWUgPSBfX3V0ZjE2bGUoYmxvYiwwLG5hbWVsZW4tcGwpO1xuXHRcdFBhdGhzLnB1c2gobmFtZSk7XG5cdFx0dmFyIG8gPSAoe1xuXHRcdFx0bmFtZTogIG5hbWUsXG5cdFx0XHR0eXBlOiAgYmxvYi5yZWFkX3NoaWZ0KDEpLFxuXHRcdFx0Y29sb3I6IGJsb2IucmVhZF9zaGlmdCgxKSxcblx0XHRcdEw6ICAgICBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKSxcblx0XHRcdFI6ICAgICBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKSxcblx0XHRcdEM6ICAgICBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKSxcblx0XHRcdGNsc2lkOiBibG9iLnJlYWRfc2hpZnQoMTYpLFxuXHRcdFx0c3RhdGU6IGJsb2IucmVhZF9zaGlmdCg0LCAnaScpLFxuXHRcdFx0c3RhcnQ6IDAsXG5cdFx0XHRzaXplOiAwXG5cdFx0fSk7XG5cdFx0dmFyIGN0aW1lID0gYmxvYi5yZWFkX3NoaWZ0KDIpICsgYmxvYi5yZWFkX3NoaWZ0KDIpICsgYmxvYi5yZWFkX3NoaWZ0KDIpICsgYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRcdGlmKGN0aW1lICE9PSAwKSBvLmN0ID0gcmVhZF9kYXRlKGJsb2IsIGJsb2IubC04KTtcblx0XHR2YXIgbXRpbWUgPSBibG9iLnJlYWRfc2hpZnQoMikgKyBibG9iLnJlYWRfc2hpZnQoMikgKyBibG9iLnJlYWRfc2hpZnQoMikgKyBibG9iLnJlYWRfc2hpZnQoMik7XG5cdFx0aWYobXRpbWUgIT09IDApIG8ubXQgPSByZWFkX2RhdGUoYmxvYiwgYmxvYi5sLTgpO1xuXHRcdG8uc3RhcnQgPSBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKTtcblx0XHRvLnNpemUgPSBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKTtcblx0XHRpZihvLnNpemUgPCAwICYmIG8uc3RhcnQgPCAwKSB7IG8uc2l6ZSA9IG8udHlwZSA9IDA7IG8uc3RhcnQgPSBFTkRPRkNIQUlOOyBvLm5hbWUgPSBcIlwiOyB9XG5cdFx0aWYoby50eXBlID09PSA1KSB7IC8qIHJvb3QgKi9cblx0XHRcdG1pbmlmYXRfc3RvcmUgPSBvLnN0YXJ0O1xuXHRcdFx0aWYobm1mcyA+IDAgJiYgbWluaWZhdF9zdG9yZSAhPT0gRU5ET0ZDSEFJTikgc2VjdG9yX2xpc3RbbWluaWZhdF9zdG9yZV0ubmFtZSA9IFwiIVN0cmVhbURhdGFcIjtcblx0XHRcdC8qbWluaWZhdF9zaXplID0gby5zaXplOyovXG5cdFx0fSBlbHNlIGlmKG8uc2l6ZSA+PSA0MDk2IC8qIE1TQ1NaICovKSB7XG5cdFx0XHRvLnN0b3JhZ2UgPSAnZmF0Jztcblx0XHRcdGlmKHNlY3Rvcl9saXN0W28uc3RhcnRdID09PSB1bmRlZmluZWQpIHNlY3Rvcl9saXN0W28uc3RhcnRdID0gZ2V0X3NlY3Rvcl9saXN0KHNlY3RvcnMsIG8uc3RhcnQsIHNlY3Rvcl9saXN0LmZhdF9hZGRycywgc2VjdG9yX2xpc3Quc3N6KTtcblx0XHRcdHNlY3Rvcl9saXN0W28uc3RhcnRdLm5hbWUgPSBvLm5hbWU7XG5cdFx0XHRvLmNvbnRlbnQgPSAoc2VjdG9yX2xpc3Rbby5zdGFydF0uZGF0YS5zbGljZSgwLG8uc2l6ZSkpO1xuXHRcdFx0cHJlcF9ibG9iKG8uY29udGVudCwgMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG8uc3RvcmFnZSA9ICdtaW5pZmF0Jztcblx0XHRcdGlmKG1pbmlmYXRfc3RvcmUgIT09IEVORE9GQ0hBSU4gJiYgby5zdGFydCAhPT0gRU5ET0ZDSEFJTiAmJiBzZWN0b3JfbGlzdFttaW5pZmF0X3N0b3JlXSkge1xuXHRcdFx0XHRvLmNvbnRlbnQgPSBnZXRfbWZhdF9lbnRyeShvLCBzZWN0b3JfbGlzdFttaW5pZmF0X3N0b3JlXS5kYXRhLCAoc2VjdG9yX2xpc3RbbWluaV18fHt9KS5kYXRhKTtcblx0XHRcdFx0cHJlcF9ibG9iKG8uY29udGVudCwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZpbGVzW25hbWVdID0gbztcblx0XHRGaWxlSW5kZXgucHVzaChvKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWFkX2RhdGUoYmxvYiwgb2Zmc2V0KSB7XG5cdHJldHVybiBuZXcgRGF0ZSgoICggKF9fcmVhZFVJbnQzMkxFKGJsb2Isb2Zmc2V0KzQpLzFlNykqTWF0aC5wb3coMiwzMikrX19yZWFkVUludDMyTEUoYmxvYixvZmZzZXQpLzFlNyApIC0gMTE2NDQ0NzM2MDApKjEwMDApO1xufVxuXG5mdW5jdGlvbiByZWFkX2ZpbGUoZmlsZW5hbWUsIG9wdGlvbnMpIHtcblx0Z2V0X2ZzKCk7XG5cdHJldHVybiBwYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUpLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVhZChibG9iLCBvcHRpb25zKSB7XG5cdHN3aXRjaChvcHRpb25zICYmIG9wdGlvbnMudHlwZSB8fCBcImJhc2U2NFwiKSB7XG5cdFx0Y2FzZSBcImZpbGVcIjogcmV0dXJuIHJlYWRfZmlsZShibG9iLCBvcHRpb25zKTtcblx0XHRjYXNlIFwiYmFzZTY0XCI6IHJldHVybiBwYXJzZShzMmEoQmFzZTY0LmRlY29kZShibG9iKSksIG9wdGlvbnMpO1xuXHRcdGNhc2UgXCJiaW5hcnlcIjogcmV0dXJuIHBhcnNlKHMyYShibG9iKSwgb3B0aW9ucyk7XG5cdH1cblx0cmV0dXJuIHBhcnNlKGJsb2IsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBpbml0X2NmYihjZmIsIG9wdHMpIHtcblx0dmFyIG8gPSBvcHRzIHx8IHt9LCByb290ID0gby5yb290IHx8IFwiUm9vdCBFbnRyeVwiO1xuXHRpZighY2ZiLkZ1bGxQYXRocykgY2ZiLkZ1bGxQYXRocyA9IFtdO1xuXHRpZighY2ZiLkZpbGVJbmRleCkgY2ZiLkZpbGVJbmRleCA9IFtdO1xuXHRpZihjZmIuRnVsbFBhdGhzLmxlbmd0aCAhPT0gY2ZiLkZpbGVJbmRleC5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihcImluY29uc2lzdGVudCBDRkIgc3RydWN0dXJlXCIpO1xuXHRpZihjZmIuRnVsbFBhdGhzLmxlbmd0aCA9PT0gMCkge1xuXHRcdGNmYi5GdWxsUGF0aHNbMF0gPSByb290ICsgXCIvXCI7XG5cdFx0Y2ZiLkZpbGVJbmRleFswXSA9ICh7IG5hbWU6IHJvb3QsIHR5cGU6IDUgfSk7XG5cdH1cblx0aWYoby5DTFNJRCkgY2ZiLkZpbGVJbmRleFswXS5jbHNpZCA9IG8uQ0xTSUQ7XG5cdHNlZWRfY2ZiKGNmYik7XG59XG5mdW5jdGlvbiBzZWVkX2NmYihjZmIpIHtcblx0dmFyIG5tID0gXCJcXHUwMDAxU2gzM3RKNVwiO1xuXHRpZihDRkIuZmluZChjZmIsIFwiL1wiICsgbm0pKSByZXR1cm47XG5cdHZhciBwID0gbmV3X2J1Zig0KTsgcFswXSA9IDU1OyBwWzFdID0gcFszXSA9IDUwOyBwWzJdID0gNTQ7XG5cdGNmYi5GaWxlSW5kZXgucHVzaCgoeyBuYW1lOiBubSwgdHlwZTogMiwgY29udGVudDpwLCBzaXplOjQsIEw6NjksIFI6NjksIEM6NjkgfSkpO1xuXHRjZmIuRnVsbFBhdGhzLnB1c2goY2ZiLkZ1bGxQYXRoc1swXSArIG5tKTtcblx0cmVidWlsZF9jZmIoY2ZiKTtcbn1cbmZ1bmN0aW9uIHJlYnVpbGRfY2ZiKGNmYiwgZikge1xuXHRpbml0X2NmYihjZmIpO1xuXHR2YXIgZ2MgPSBmYWxzZSwgcyA9IGZhbHNlO1xuXHRmb3IodmFyIGkgPSBjZmIuRnVsbFBhdGhzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0dmFyIF9maWxlID0gY2ZiLkZpbGVJbmRleFtpXTtcblx0XHRzd2l0Y2goX2ZpbGUudHlwZSkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRpZihzKSBnYyA9IHRydWU7XG5cdFx0XHRcdGVsc2UgeyBjZmIuRmlsZUluZGV4LnBvcCgpOyBjZmIuRnVsbFBhdGhzLnBvcCgpOyB9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAxOiBjYXNlIDI6IGNhc2UgNTpcblx0XHRcdFx0cyA9IHRydWU7XG5cdFx0XHRcdGlmKGlzTmFOKF9maWxlLlIgKiBfZmlsZS5MICogX2ZpbGUuQykpIGdjID0gdHJ1ZTtcblx0XHRcdFx0aWYoX2ZpbGUuUiA+IC0xICYmIF9maWxlLkwgPiAtMSAmJiBfZmlsZS5SID09IF9maWxlLkwpIGdjID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBnYyA9IHRydWU7IGJyZWFrO1xuXHRcdH1cblx0fVxuXHRpZighZ2MgJiYgIWYpIHJldHVybjtcblxuXHR2YXIgbm93ID0gbmV3IERhdGUoMTk4NywgMSwgMTkpLCBqID0gMDtcblx0dmFyIGRhdGEgPSBbXTtcblx0Zm9yKGkgPSAwOyBpIDwgY2ZiLkZ1bGxQYXRocy5sZW5ndGg7ICsraSkge1xuXHRcdGlmKGNmYi5GaWxlSW5kZXhbaV0udHlwZSA9PT0gMCkgY29udGludWU7XG5cdFx0ZGF0YS5wdXNoKFtjZmIuRnVsbFBhdGhzW2ldLCBjZmIuRmlsZUluZGV4W2ldXSk7XG5cdH1cblx0Zm9yKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xuXHRcdHZhciBkYWQgPSBkaXJuYW1lKGRhdGFbaV1bMF0pO1xuXHRcdHMgPSBmYWxzZTtcblx0XHRmb3IoaiA9IDA7IGogPCBkYXRhLmxlbmd0aDsgKytqKSBpZihkYXRhW2pdWzBdID09PSBkYWQpIHMgPSB0cnVlO1xuXHRcdGlmKCFzKSBkYXRhLnB1c2goW2RhZCwgKHtcblx0XHRcdG5hbWU6IGZpbGVuYW1lKGRhZCkucmVwbGFjZShcIi9cIixcIlwiKSxcblx0XHRcdHR5cGU6IDEsXG5cdFx0XHRjbHNpZDogSEVBREVSX0NMU0lELFxuXHRcdFx0Y3Q6IG5vdywgbXQ6IG5vdyxcblx0XHRcdGNvbnRlbnQ6IG51bGxcblx0XHR9KV0pO1xuXHR9XG5cblx0ZGF0YS5zb3J0KGZ1bmN0aW9uKHgseSkgeyByZXR1cm4gbmFtZWNtcCh4WzBdLCB5WzBdKTsgfSk7XG5cdGNmYi5GdWxsUGF0aHMgPSBbXTsgY2ZiLkZpbGVJbmRleCA9IFtdO1xuXHRmb3IoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7IGNmYi5GdWxsUGF0aHNbaV0gPSBkYXRhW2ldWzBdOyBjZmIuRmlsZUluZGV4W2ldID0gZGF0YVtpXVsxXTsgfVxuXHRmb3IoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7XG5cdFx0dmFyIGVsdCA9IGNmYi5GaWxlSW5kZXhbaV07XG5cdFx0dmFyIG5tID0gY2ZiLkZ1bGxQYXRoc1tpXTtcblxuXHRcdGVsdC5uYW1lID0gIGZpbGVuYW1lKG5tKS5yZXBsYWNlKFwiL1wiLFwiXCIpO1xuXHRcdGVsdC5MID0gZWx0LlIgPSBlbHQuQyA9IC0oZWx0LmNvbG9yID0gMSk7XG5cdFx0ZWx0LnNpemUgPSBlbHQuY29udGVudCA/IGVsdC5jb250ZW50Lmxlbmd0aCA6IDA7XG5cdFx0ZWx0LnN0YXJ0ID0gMDtcblx0XHRlbHQuY2xzaWQgPSAoZWx0LmNsc2lkIHx8IEhFQURFUl9DTFNJRCk7XG5cdFx0aWYoaSA9PT0gMCkge1xuXHRcdFx0ZWx0LkMgPSBkYXRhLmxlbmd0aCA+IDEgPyAxIDogLTE7XG5cdFx0XHRlbHQuc2l6ZSA9IDA7XG5cdFx0XHRlbHQudHlwZSA9IDU7XG5cdFx0fSBlbHNlIGlmKG5tLnNsaWNlKC0xKSA9PSBcIi9cIikge1xuXHRcdFx0Zm9yKGo9aSsxO2ogPCBkYXRhLmxlbmd0aDsgKytqKSBpZihkaXJuYW1lKGNmYi5GdWxsUGF0aHNbal0pPT1ubSkgYnJlYWs7XG5cdFx0XHRlbHQuQyA9IGogPj0gZGF0YS5sZW5ndGggPyAtMSA6IGo7XG5cdFx0XHRmb3Ioaj1pKzE7aiA8IGRhdGEubGVuZ3RoOyArK2opIGlmKGRpcm5hbWUoY2ZiLkZ1bGxQYXRoc1tqXSk9PWRpcm5hbWUobm0pKSBicmVhaztcblx0XHRcdGVsdC5SID0gaiA+PSBkYXRhLmxlbmd0aCA/IC0xIDogajtcblx0XHRcdGVsdC50eXBlID0gMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoZGlybmFtZShjZmIuRnVsbFBhdGhzW2krMV18fFwiXCIpID09IGRpcm5hbWUobm0pKSBlbHQuUiA9IGkgKyAxO1xuXHRcdFx0ZWx0LnR5cGUgPSAyO1xuXHRcdH1cblx0fVxuXG59XG5cbmZ1bmN0aW9uIF93cml0ZShjZmIsIG9wdGlvbnMpIHtcblx0dmFyIF9vcHRzID0gb3B0aW9ucyB8fCB7fTtcblx0cmVidWlsZF9jZmIoY2ZiKTtcblx0dmFyIEwgPSAoZnVuY3Rpb24oY2ZiKXtcblx0XHR2YXIgbWluaV9zaXplID0gMCwgZmF0X3NpemUgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjZmIuRmlsZUluZGV4Lmxlbmd0aDsgKytpKSB7XG5cdFx0XHR2YXIgZmlsZSA9IGNmYi5GaWxlSW5kZXhbaV07XG5cdFx0XHRpZighZmlsZS5jb250ZW50KSBjb250aW51ZTtcbnZhciBmbGVuID0gZmlsZS5jb250ZW50Lmxlbmd0aDtcblx0XHRcdGlmKGZsZW4gPiAwKXtcblx0XHRcdFx0aWYoZmxlbiA8IDB4MTAwMCkgbWluaV9zaXplICs9IChmbGVuICsgMHgzRikgPj4gNjtcblx0XHRcdFx0ZWxzZSBmYXRfc2l6ZSArPSAoZmxlbiArIDB4MDFGRikgPj4gOTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dmFyIGRpcl9jbnQgPSAoY2ZiLkZ1bGxQYXRocy5sZW5ndGggKzMpID4+IDI7XG5cdFx0dmFyIG1pbmlfY250ID0gKG1pbmlfc2l6ZSArIDcpID4+IDM7XG5cdFx0dmFyIG1mYXRfY250ID0gKG1pbmlfc2l6ZSArIDB4N0YpID4+IDc7XG5cdFx0dmFyIGZhdF9iYXNlID0gbWluaV9jbnQgKyBmYXRfc2l6ZSArIGRpcl9jbnQgKyBtZmF0X2NudDtcblx0XHR2YXIgZmF0X2NudCA9IChmYXRfYmFzZSArIDB4N0YpID4+IDc7XG5cdFx0dmFyIGRpZmF0X2NudCA9IGZhdF9jbnQgPD0gMTA5ID8gMCA6IE1hdGguY2VpbCgoZmF0X2NudC0xMDkpLzB4N0YpO1xuXHRcdHdoaWxlKCgoZmF0X2Jhc2UgKyBmYXRfY250ICsgZGlmYXRfY250ICsgMHg3RikgPj4gNykgPiBmYXRfY250KSBkaWZhdF9jbnQgPSArK2ZhdF9jbnQgPD0gMTA5ID8gMCA6IE1hdGguY2VpbCgoZmF0X2NudC0xMDkpLzB4N0YpO1xuXHRcdHZhciBMID0gIFsxLCBkaWZhdF9jbnQsIGZhdF9jbnQsIG1mYXRfY250LCBkaXJfY250LCBmYXRfc2l6ZSwgbWluaV9zaXplLCAwXTtcblx0XHRjZmIuRmlsZUluZGV4WzBdLnNpemUgPSBtaW5pX3NpemUgPDwgNjtcblx0XHRMWzddID0gKGNmYi5GaWxlSW5kZXhbMF0uc3RhcnQ9TFswXStMWzFdK0xbMl0rTFszXStMWzRdK0xbNV0pKygoTFs2XSs3KSA+PiAzKTtcblx0XHRyZXR1cm4gTDtcblx0fSkoY2ZiKTtcblx0dmFyIG8gPSBuZXdfYnVmKExbN10gPDwgOSk7XG5cdHZhciBpID0gMCwgVCA9IDA7XG5cdHtcblx0XHRmb3IoaSA9IDA7IGkgPCA4OyArK2kpIG8ud3JpdGVfc2hpZnQoMSwgSEVBREVSX1NJR1tpXSk7XG5cdFx0Zm9yKGkgPSAwOyBpIDwgODsgKytpKSBvLndyaXRlX3NoaWZ0KDIsIDApO1xuXHRcdG8ud3JpdGVfc2hpZnQoMiwgMHgwMDNFKTtcblx0XHRvLndyaXRlX3NoaWZ0KDIsIDB4MDAwMyk7XG5cdFx0by53cml0ZV9zaGlmdCgyLCAweEZGRkUpO1xuXHRcdG8ud3JpdGVfc2hpZnQoMiwgMHgwMDA5KTtcblx0XHRvLndyaXRlX3NoaWZ0KDIsIDB4MDAwNik7XG5cdFx0Zm9yKGkgPSAwOyBpIDwgMzsgKytpKSBvLndyaXRlX3NoaWZ0KDIsIDApO1xuXHRcdG8ud3JpdGVfc2hpZnQoNCwgMCk7XG5cdFx0by53cml0ZV9zaGlmdCg0LCBMWzJdKTtcblx0XHRvLndyaXRlX3NoaWZ0KDQsIExbMF0gKyBMWzFdICsgTFsyXSArIExbM10gLSAxKTtcblx0XHRvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRcdG8ud3JpdGVfc2hpZnQoNCwgMTw8MTIpO1xuXHRcdG8ud3JpdGVfc2hpZnQoNCwgTFszXSA/IExbMF0gKyBMWzFdICsgTFsyXSAtIDE6IEVORE9GQ0hBSU4pO1xuXHRcdG8ud3JpdGVfc2hpZnQoNCwgTFszXSk7XG5cdFx0by53cml0ZV9zaGlmdCgtNCwgTFsxXSA/IExbMF0gLSAxOiBFTkRPRkNIQUlOKTtcblx0XHRvLndyaXRlX3NoaWZ0KDQsIExbMV0pO1xuXHRcdGZvcihpID0gMDsgaSA8IDEwOTsgKytpKSBvLndyaXRlX3NoaWZ0KC00LCBpIDwgTFsyXSA/IExbMV0gKyBpIDogLTEpO1xuXHR9XG5cdGlmKExbMV0pIHtcblx0XHRmb3IoVCA9IDA7IFQgPCBMWzFdOyArK1QpIHtcblx0XHRcdGZvcig7IGkgPCAyMzYgKyBUICogMTI3OyArK2kpIG8ud3JpdGVfc2hpZnQoLTQsIGkgPCBMWzJdID8gTFsxXSArIGkgOiAtMSk7XG5cdFx0XHRvLndyaXRlX3NoaWZ0KC00LCBUID09PSBMWzFdIC0gMSA/IEVORE9GQ0hBSU4gOiBUICsgMSk7XG5cdFx0fVxuXHR9XG5cdHZhciBjaGFpbml0ID0gZnVuY3Rpb24odykge1xuXHRcdGZvcihUICs9IHc7IGk8VC0xOyArK2kpIG8ud3JpdGVfc2hpZnQoLTQsIGkrMSk7XG5cdFx0aWYodykgeyArK2k7IG8ud3JpdGVfc2hpZnQoLTQsIEVORE9GQ0hBSU4pOyB9XG5cdH07XG5cdFQgPSBpID0gMDtcblx0Zm9yKFQrPUxbMV07IGk8VDsgKytpKSBvLndyaXRlX3NoaWZ0KC00LCBjb25zdHMuRElGU0VDVCk7XG5cdGZvcihUKz1MWzJdOyBpPFQ7ICsraSkgby53cml0ZV9zaGlmdCgtNCwgY29uc3RzLkZBVFNFQ1QpO1xuXHRjaGFpbml0KExbM10pO1xuXHRjaGFpbml0KExbNF0pO1xuXHR2YXIgaiA9IDAsIGZsZW4gPSAwO1xuXHR2YXIgZmlsZSA9IGNmYi5GaWxlSW5kZXhbMF07XG5cdGZvcig7IGogPCBjZmIuRmlsZUluZGV4Lmxlbmd0aDsgKytqKSB7XG5cdFx0ZmlsZSA9IGNmYi5GaWxlSW5kZXhbal07XG5cdFx0aWYoIWZpbGUuY29udGVudCkgY29udGludWU7XG5mbGVuID0gZmlsZS5jb250ZW50Lmxlbmd0aDtcblx0XHRpZihmbGVuIDwgMHgxMDAwKSBjb250aW51ZTtcblx0XHRmaWxlLnN0YXJ0ID0gVDtcblx0XHRjaGFpbml0KChmbGVuICsgMHgwMUZGKSA+PiA5KTtcblx0fVxuXHRjaGFpbml0KChMWzZdICsgNykgPj4gMyk7XG5cdHdoaWxlKG8ubCAmIDB4MUZGKSBvLndyaXRlX3NoaWZ0KC00LCBjb25zdHMuRU5ET0ZDSEFJTik7XG5cdFQgPSBpID0gMDtcblx0Zm9yKGogPSAwOyBqIDwgY2ZiLkZpbGVJbmRleC5sZW5ndGg7ICsraikge1xuXHRcdGZpbGUgPSBjZmIuRmlsZUluZGV4W2pdO1xuXHRcdGlmKCFmaWxlLmNvbnRlbnQpIGNvbnRpbnVlO1xuZmxlbiA9IGZpbGUuY29udGVudC5sZW5ndGg7XG5cdFx0aWYoIWZsZW4gfHwgZmxlbiA+PSAweDEwMDApIGNvbnRpbnVlO1xuXHRcdGZpbGUuc3RhcnQgPSBUO1xuXHRcdGNoYWluaXQoKGZsZW4gKyAweDNGKSA+PiA2KTtcblx0fVxuXHR3aGlsZShvLmwgJiAweDFGRikgby53cml0ZV9zaGlmdCgtNCwgY29uc3RzLkVORE9GQ0hBSU4pO1xuXHRmb3IoaSA9IDA7IGkgPCBMWzRdPDwyOyArK2kpIHtcblx0XHR2YXIgbm0gPSBjZmIuRnVsbFBhdGhzW2ldO1xuXHRcdGlmKCFubSB8fCBubS5sZW5ndGggPT09IDApIHtcblx0XHRcdGZvcihqID0gMDsgaiA8IDE3OyArK2opIG8ud3JpdGVfc2hpZnQoNCwgMCk7XG5cdFx0XHRmb3IoaiA9IDA7IGogPCAzOyArK2opIG8ud3JpdGVfc2hpZnQoNCwgLTEpO1xuXHRcdFx0Zm9yKGogPSAwOyBqIDwgMTI7ICsraikgby53cml0ZV9zaGlmdCg0LCAwKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRmaWxlID0gY2ZiLkZpbGVJbmRleFtpXTtcblx0XHRpZihpID09PSAwKSBmaWxlLnN0YXJ0ID0gZmlsZS5zaXplID8gZmlsZS5zdGFydCAtIDEgOiBFTkRPRkNIQUlOO1xuXHRcdHZhciBfbm0gPSAoaSA9PT0gMCAmJiBfb3B0cy5yb290KSB8fCBmaWxlLm5hbWU7XG5cdFx0ZmxlbiA9IDIqKF9ubS5sZW5ndGgrMSk7XG5cdFx0by53cml0ZV9zaGlmdCg2NCwgX25tLCBcInV0ZjE2bGVcIik7XG5cdFx0by53cml0ZV9zaGlmdCgyLCBmbGVuKTtcblx0XHRvLndyaXRlX3NoaWZ0KDEsIGZpbGUudHlwZSk7XG5cdFx0by53cml0ZV9zaGlmdCgxLCBmaWxlLmNvbG9yKTtcblx0XHRvLndyaXRlX3NoaWZ0KC00LCBmaWxlLkwpO1xuXHRcdG8ud3JpdGVfc2hpZnQoLTQsIGZpbGUuUik7XG5cdFx0by53cml0ZV9zaGlmdCgtNCwgZmlsZS5DKTtcblx0XHRpZighZmlsZS5jbHNpZCkgZm9yKGogPSAwOyBqIDwgNDsgKytqKSBvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRcdGVsc2Ugby53cml0ZV9zaGlmdCgxNiwgZmlsZS5jbHNpZCwgXCJoZXhcIik7XG5cdFx0by53cml0ZV9zaGlmdCg0LCBmaWxlLnN0YXRlIHx8IDApO1xuXHRcdG8ud3JpdGVfc2hpZnQoNCwgMCk7IG8ud3JpdGVfc2hpZnQoNCwgMCk7XG5cdFx0by53cml0ZV9zaGlmdCg0LCAwKTsgby53cml0ZV9zaGlmdCg0LCAwKTtcblx0XHRvLndyaXRlX3NoaWZ0KDQsIGZpbGUuc3RhcnQpO1xuXHRcdG8ud3JpdGVfc2hpZnQoNCwgZmlsZS5zaXplKTsgby53cml0ZV9zaGlmdCg0LCAwKTtcblx0fVxuXHRmb3IoaSA9IDE7IGkgPCBjZmIuRmlsZUluZGV4Lmxlbmd0aDsgKytpKSB7XG5cdFx0ZmlsZSA9IGNmYi5GaWxlSW5kZXhbaV07XG5pZihmaWxlLnNpemUgPj0gMHgxMDAwKSB7XG5cdFx0XHRvLmwgPSAoZmlsZS5zdGFydCsxKSA8PCA5O1xuXHRcdFx0Zm9yKGogPSAwOyBqIDwgZmlsZS5zaXplOyArK2opIG8ud3JpdGVfc2hpZnQoMSwgZmlsZS5jb250ZW50W2pdKTtcblx0XHRcdGZvcig7IGogJiAweDFGRjsgKytqKSBvLndyaXRlX3NoaWZ0KDEsIDApO1xuXHRcdH1cblx0fVxuXHRmb3IoaSA9IDE7IGkgPCBjZmIuRmlsZUluZGV4Lmxlbmd0aDsgKytpKSB7XG5cdFx0ZmlsZSA9IGNmYi5GaWxlSW5kZXhbaV07XG5pZihmaWxlLnNpemUgPiAwICYmIGZpbGUuc2l6ZSA8IDB4MTAwMCkge1xuXHRcdFx0Zm9yKGogPSAwOyBqIDwgZmlsZS5zaXplOyArK2opIG8ud3JpdGVfc2hpZnQoMSwgZmlsZS5jb250ZW50W2pdKTtcblx0XHRcdGZvcig7IGogJiAweDNGOyArK2opIG8ud3JpdGVfc2hpZnQoMSwgMCk7XG5cdFx0fVxuXHR9XG5cdHdoaWxlKG8ubCA8IG8ubGVuZ3RoKSBvLndyaXRlX3NoaWZ0KDEsIDApO1xuXHRyZXR1cm4gbztcbn1cbi8qIFtNUy1DRkJdIDIuNi40IChVbmljb2RlIDMuMC4xIGNhc2UgY29udmVyc2lvbikgKi9cbmZ1bmN0aW9uIGZpbmQoY2ZiLCBwYXRoKSB7XG5cdC8vcmV0dXJuIGNmYi5maW5kKHBhdGgpO1xuXHR2YXIgVUNGdWxsUGF0aHMgPSBjZmIuRnVsbFBhdGhzLm1hcChmdW5jdGlvbih4KSB7IHJldHVybiB4LnRvVXBwZXJDYXNlKCk7IH0pO1xuXHR2YXIgVUNQYXRocyA9IFVDRnVsbFBhdGhzLm1hcChmdW5jdGlvbih4KSB7IHZhciB5ID0geC5zcGxpdChcIi9cIik7IHJldHVybiB5W3kubGVuZ3RoIC0gKHguc2xpY2UoLTEpID09IFwiL1wiID8gMiA6IDEpXTsgfSk7XG5cdHZhciBrID0gZmFsc2U7XG5cdGlmKHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyogXCIvXCIgKi8pIHsgayA9IHRydWU7IHBhdGggPSBVQ0Z1bGxQYXRoc1swXS5zbGljZSgwLCAtMSkgKyBwYXRoOyB9XG5cdGVsc2UgayA9IHBhdGguaW5kZXhPZihcIi9cIikgIT09IC0xO1xuXHR2YXIgVUNQYXRoID0gcGF0aC50b1VwcGVyQ2FzZSgpO1xuXHR2YXIgdyA9IGsgPT09IHRydWUgPyBVQ0Z1bGxQYXRocy5pbmRleE9mKFVDUGF0aCkgOiBVQ1BhdGhzLmluZGV4T2YoVUNQYXRoKTtcblx0aWYodyAhPT0gLTEpIHJldHVybiBjZmIuRmlsZUluZGV4W3ddO1xuXG5cdFVDUGF0aCA9IFVDUGF0aC5yZXBsYWNlKGNocjAsJycpLnJlcGxhY2UoY2hyMSwnIScpO1xuXHRmb3IodyA9IDA7IHcgPCBVQ0Z1bGxQYXRocy5sZW5ndGg7ICsrdykge1xuXHRcdGlmKFVDRnVsbFBhdGhzW3ddLnJlcGxhY2UoY2hyMCwnJykucmVwbGFjZShjaHIxLCchJykgPT0gVUNQYXRoKSByZXR1cm4gY2ZiLkZpbGVJbmRleFt3XTtcblx0XHRpZihVQ1BhdGhzW3ddLnJlcGxhY2UoY2hyMCwnJykucmVwbGFjZShjaHIxLCchJykgPT0gVUNQYXRoKSByZXR1cm4gY2ZiLkZpbGVJbmRleFt3XTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cbi8qKiBDRkIgQ29uc3RhbnRzICovXG52YXIgTVNTWiA9IDY0OyAvKiBNaW5pIFNlY3RvciBTaXplID0gMTw8NiAqL1xuLy92YXIgTVNDU1ogPSA0MDk2OyAvKiBNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZSAqL1xuLyogMi4xIENvbXBvdW5kIEZpbGUgU2VjdG9yIE51bWJlcnMgYW5kIFR5cGVzICovXG52YXIgRU5ET0ZDSEFJTiA9IC0yO1xuLyogMi4yIENvbXBvdW5kIEZpbGUgSGVhZGVyICovXG52YXIgSEVBREVSX1NJR05BVFVSRSA9ICdkMGNmMTFlMGExYjExYWUxJztcbnZhciBIRUFERVJfU0lHID0gWzB4RDAsIDB4Q0YsIDB4MTEsIDB4RTAsIDB4QTEsIDB4QjEsIDB4MUEsIDB4RTFdO1xudmFyIEhFQURFUl9DTFNJRCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgY29uc3RzID0ge1xuXHQvKiAyLjEgQ29tcHVuZCBGaWxlIFNlY3RvciBOdW1iZXJzIGFuZCBUeXBlcyAqL1xuXHRNQVhSRUdTRUNUOiAtNixcblx0RElGU0VDVDogLTQsXG5cdEZBVFNFQ1Q6IC0zLFxuXHRFTkRPRkNIQUlOOiBFTkRPRkNIQUlOLFxuXHRGUkVFU0VDVDogLTEsXG5cdC8qIDIuMiBDb21wb3VuZCBGaWxlIEhlYWRlciAqL1xuXHRIRUFERVJfU0lHTkFUVVJFOiBIRUFERVJfU0lHTkFUVVJFLFxuXHRIRUFERVJfTUlOT1JfVkVSU0lPTjogJzNlMDAnLFxuXHRNQVhSRUdTSUQ6IC02LFxuXHROT1NUUkVBTTogLTEsXG5cdEhFQURFUl9DTFNJRDogSEVBREVSX0NMU0lELFxuXHQvKiAyLjYuMSBDb21wb3VuZCBGaWxlIERpcmVjdG9yeSBFbnRyeSAqL1xuXHRFbnRyeVR5cGVzOiBbJ3Vua25vd24nLCdzdG9yYWdlJywnc3RyZWFtJywnbG9ja2J5dGVzJywncHJvcGVydHknLCdyb290J11cbn07XG5cbmZ1bmN0aW9uIHdyaXRlX2ZpbGUoY2ZiLCBmaWxlbmFtZSwgb3B0aW9ucykge1xuXHRnZXRfZnMoKTtcblx0dmFyIG8gPSBfd3JpdGUoY2ZiLCBvcHRpb25zKTtcbmZzLndyaXRlRmlsZVN5bmMoZmlsZW5hbWUsIG8pO1xufVxuXG5mdW5jdGlvbiBhMnMobykge1xuXHR2YXIgb3V0ID0gbmV3IEFycmF5KG8ubGVuZ3RoKTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG8ubGVuZ3RoOyArK2kpIG91dFtpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUob1tpXSk7XG5cdHJldHVybiBvdXQuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gd3JpdGUoY2ZiLCBvcHRpb25zKSB7XG5cdHZhciBvID0gX3dyaXRlKGNmYiwgb3B0aW9ucyk7XG5cdHN3aXRjaChvcHRpb25zICYmIG9wdGlvbnMudHlwZSkge1xuXHRcdGNhc2UgXCJmaWxlXCI6IGdldF9mcygpOyBmcy53cml0ZUZpbGVTeW5jKG9wdGlvbnMuZmlsZW5hbWUsIChvKSk7IHJldHVybiBvO1xuXHRcdGNhc2UgXCJiaW5hcnlcIjogcmV0dXJuIGEycyhvKTtcblx0XHRjYXNlIFwiYmFzZTY0XCI6IHJldHVybiBCYXNlNjQuZW5jb2RlKGEycyhvKSk7XG5cdH1cblx0cmV0dXJuIG87XG59XG5mdW5jdGlvbiBjZmJfbmV3KG9wdHMpIHtcblx0dmFyIG8gPSAoe30pO1xuXHRpbml0X2NmYihvLCBvcHRzKTtcblx0cmV0dXJuIG87XG59XG5cbmZ1bmN0aW9uIGNmYl9hZGQoY2ZiLCBuYW1lLCBjb250ZW50LCBvcHRzKSB7XG5cdGluaXRfY2ZiKGNmYik7XG5cdHZhciBmaWxlID0gQ0ZCLmZpbmQoY2ZiLCBuYW1lKTtcblx0aWYoIWZpbGUpIHtcblx0XHR2YXIgZnBhdGggPSBjZmIuRnVsbFBhdGhzWzBdO1xuXHRcdGlmKG5hbWUuc2xpY2UoMCwgZnBhdGgubGVuZ3RoKSA9PSBmcGF0aCkgZnBhdGggPSBuYW1lO1xuXHRcdGVsc2Uge1xuXHRcdFx0aWYoZnBhdGguc2xpY2UoLTEpICE9IFwiL1wiKSBmcGF0aCArPSBcIi9cIjtcblx0XHRcdGZwYXRoID0gKGZwYXRoICsgbmFtZSkucmVwbGFjZShcIi8vXCIsXCIvXCIpO1xuXHRcdH1cblx0XHRmaWxlID0gKHtuYW1lOiBmaWxlbmFtZShuYW1lKSwgdHlwZTogMn0pO1xuXHRcdGNmYi5GaWxlSW5kZXgucHVzaChmaWxlKTtcblx0XHRjZmIuRnVsbFBhdGhzLnB1c2goZnBhdGgpO1xuXHRcdENGQi51dGlscy5jZmJfZ2MoY2ZiKTtcblx0fVxuZmlsZS5jb250ZW50ID0gKGNvbnRlbnQpO1xuXHRmaWxlLnNpemUgPSBjb250ZW50ID8gY29udGVudC5sZW5ndGggOiAwO1xuXHRpZihvcHRzKSB7XG5cdFx0aWYob3B0cy5DTFNJRCkgZmlsZS5jbHNpZCA9IG9wdHMuQ0xTSUQ7XG5cdH1cblx0cmV0dXJuIGZpbGU7XG59XG5cbmZ1bmN0aW9uIGNmYl9kZWwoY2ZiLCBuYW1lKSB7XG5cdGluaXRfY2ZiKGNmYik7XG5cdHZhciBmaWxlID0gQ0ZCLmZpbmQoY2ZiLCBuYW1lKTtcblx0aWYoZmlsZSkgZm9yKHZhciBqID0gMDsgaiA8IGNmYi5GaWxlSW5kZXgubGVuZ3RoOyArK2opIGlmKGNmYi5GaWxlSW5kZXhbal0gPT0gZmlsZSkge1xuXHRcdGNmYi5GaWxlSW5kZXguc3BsaWNlKGosIDEpO1xuXHRcdGNmYi5GdWxsUGF0aHMuc3BsaWNlKGosIDEpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY2ZiX21vdihjZmIsIG9sZF9uYW1lLCBuZXdfbmFtZSkge1xuXHRpbml0X2NmYihjZmIpO1xuXHR2YXIgZmlsZSA9IENGQi5maW5kKGNmYiwgb2xkX25hbWUpO1xuXHRpZihmaWxlKSBmb3IodmFyIGogPSAwOyBqIDwgY2ZiLkZpbGVJbmRleC5sZW5ndGg7ICsraikgaWYoY2ZiLkZpbGVJbmRleFtqXSA9PSBmaWxlKSB7XG5cdFx0Y2ZiLkZpbGVJbmRleFtqXS5uYW1lID0gZmlsZW5hbWUobmV3X25hbWUpO1xuXHRcdGNmYi5GdWxsUGF0aHNbal0gPSBuZXdfbmFtZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNmYl9nYyhjZmIpIHsgcmVidWlsZF9jZmIoY2ZiLCB0cnVlKTsgfVxuXG5leHBvcnRzLmZpbmQgPSBmaW5kO1xuZXhwb3J0cy5yZWFkID0gcmVhZDtcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmV4cG9ydHMud3JpdGUgPSB3cml0ZTtcbmV4cG9ydHMud3JpdGVGaWxlID0gd3JpdGVfZmlsZTtcbmV4cG9ydHMudXRpbHMgPSB7XG5cdGNmYl9uZXc6IGNmYl9uZXcsXG5cdGNmYl9hZGQ6IGNmYl9hZGQsXG5cdGNmYl9kZWw6IGNmYl9kZWwsXG5cdGNmYl9tb3Y6IGNmYl9tb3YsXG5cdGNmYl9nYzogY2ZiX2djLFxuXHRSZWFkU2hpZnQ6IFJlYWRTaGlmdCxcblx0Q2hlY2tGaWVsZDogQ2hlY2tGaWVsZCxcblx0cHJlcF9ibG9iOiBwcmVwX2Jsb2IsXG5cdGJjb25jYXQ6IGJjb25jYXQsXG5cdGNvbnN0czogY29uc3RzXG59O1xuXG5yZXR1cm4gZXhwb3J0cztcbn0pKCk7XG5cbmlmKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgRE9fTk9UX0VYUE9SVF9DRkIgPT09ICd1bmRlZmluZWQnKSB7IG1vZHVsZS5leHBvcnRzID0gQ0ZCOyB9XG52YXIgX2ZzO1xuaWYodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnKSB0cnkgeyBfZnMgPSByZXF1aXJlKCdmcycpOyB9IGNhdGNoKGUpIHt9XG5cbi8qIG5vcm1hbGl6ZSBkYXRhIGZvciBibG9iIGN0b3IgKi9cbmZ1bmN0aW9uIGJsb2JpZnkoZGF0YSkge1xuXHRpZih0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHMyYWIoZGF0YSk7XG5cdGlmKEFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBhMnUoZGF0YSk7XG5cdHJldHVybiBkYXRhO1xufVxuLyogd3JpdGUgb3IgZG93bmxvYWQgZmlsZSAqL1xuZnVuY3Rpb24gd3JpdGVfZGwoZm5hbWUsIHBheWxvYWQsIGVuYykge1xuXHQvKmdsb2JhbCBJRV9TYXZlRmlsZSwgQmxvYiwgbmF2aWdhdG9yLCBzYXZlQXMsIFVSTCwgZG9jdW1lbnQgKi9cblx0aWYodHlwZW9mIF9mcyAhPT0gJ3VuZGVmaW5lZCcgJiYgX2ZzLndyaXRlRmlsZVN5bmMpIHJldHVybiBlbmMgPyBfZnMud3JpdGVGaWxlU3luYyhmbmFtZSwgcGF5bG9hZCwgZW5jKSA6IF9mcy53cml0ZUZpbGVTeW5jKGZuYW1lLCBwYXlsb2FkKTtcblx0dmFyIGRhdGEgPSAoZW5jID09IFwidXRmOFwiKSA/IHV0Zjh3cml0ZShwYXlsb2FkKSA6IHBheWxvYWQ7XG5pZih0eXBlb2YgSUVfU2F2ZUZpbGUgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gSUVfU2F2ZUZpbGUoZGF0YSwgZm5hbWUpO1xuXHRpZih0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHR2YXIgYmxvYiA9IG5ldyBCbG9iKFtibG9iaWZ5KGRhdGEpXSwge3R5cGU6XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIn0pO1xuaWYodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLm1zU2F2ZUJsb2IpIHJldHVybiBuYXZpZ2F0b3IubXNTYXZlQmxvYihibG9iLCBmbmFtZSk7XG5pZih0eXBlb2Ygc2F2ZUFzICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHNhdmVBcyhibG9iLCBmbmFtZSk7XG5cdFx0aWYodHlwZW9mIFVSTCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jcmVhdGVFbGVtZW50ICYmIFVSTC5jcmVhdGVPYmplY3RVUkwpIHtcblx0XHRcdHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG5cdFx0XHRpZihhLmRvd25sb2FkICE9IG51bGwpIHtcblx0XHRcdFx0dmFyIHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5hLmRvd25sb2FkID0gZm5hbWU7IGEuaHJlZiA9IHVybDsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsgYS5jbGljaygpO1xuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcblx0XHRcdFx0aWYoVVJMLnJldm9rZU9iamVjdFVSTCAmJiB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVmaW5lZCcpIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsgfSwgNjAwMDApO1xuXHRcdFx0XHRyZXR1cm4gdXJsO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgaW5pdGlhdGUgZG93bmxvYWRcIik7XG59XG5cbmZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gT2JqZWN0LmtleXMobyk7IH1cblxuZnVuY3Rpb24gZXZlcnRfa2V5KG9iaiwga2V5KSB7XG5cdHZhciBvID0gKFtdKSwgSyA9IGtleXMob2JqKTtcblx0Zm9yKHZhciBpID0gMDsgaSAhPT0gSy5sZW5ndGg7ICsraSkgb1tvYmpbS1tpXV1ba2V5XV0gPSBLW2ldO1xuXHRyZXR1cm4gbztcbn1cblxuZnVuY3Rpb24gZXZlcnQob2JqKSB7XG5cdHZhciBvID0gKFtdKSwgSyA9IGtleXMob2JqKTtcblx0Zm9yKHZhciBpID0gMDsgaSAhPT0gSy5sZW5ndGg7ICsraSkgb1tvYmpbS1tpXV1dID0gS1tpXTtcblx0cmV0dXJuIG87XG59XG5cbmZ1bmN0aW9uIGV2ZXJ0X251bShvYmopIHtcblx0dmFyIG8gPSAoW10pLCBLID0ga2V5cyhvYmopO1xuXHRmb3IodmFyIGkgPSAwOyBpICE9PSBLLmxlbmd0aDsgKytpKSBvW29ialtLW2ldXV0gPSBwYXJzZUludChLW2ldLDEwKTtcblx0cmV0dXJuIG87XG59XG5cbmZ1bmN0aW9uIGV2ZXJ0X2FycihvYmopIHtcblx0dmFyIG8gPSAoW10pLCBLID0ga2V5cyhvYmopO1xuXHRmb3IodmFyIGkgPSAwOyBpICE9PSBLLmxlbmd0aDsgKytpKSB7XG5cdFx0aWYob1tvYmpbS1tpXV1dID09IG51bGwpIG9bb2JqW0tbaV1dXSA9IFtdO1xuXHRcdG9bb2JqW0tbaV1dXS5wdXNoKEtbaV0pO1xuXHR9XG5cdHJldHVybiBvO1xufVxuXG52YXIgYmFzZWRhdGUgPSBuZXcgRGF0ZSgxODk5LCAxMSwgMzAsIDAsIDAsIDApOyAvLyAyMjA5MTYxNjAwMDAwXG52YXIgZG50aHJlc2ggPSBiYXNlZGF0ZS5nZXRUaW1lKCkgKyAobmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpIC0gYmFzZWRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiA2MDAwMDtcbmZ1bmN0aW9uIGRhdGVudW0odiwgZGF0ZTE5MDQpIHtcblx0dmFyIGVwb2NoID0gdi5nZXRUaW1lKCk7XG5cdGlmKGRhdGUxOTA0KSBlcG9jaCAtPSAxNDYyKjI0KjYwKjYwKjEwMDA7XG5cdHJldHVybiAoZXBvY2ggLSBkbnRocmVzaCkgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7XG59XG5mdW5jdGlvbiBudW1kYXRlKHYpIHtcblx0dmFyIG91dCA9IG5ldyBEYXRlKCk7XG5cdG91dC5zZXRUaW1lKHYgKiAyNCAqIDYwICogNjAgKiAxMDAwICsgZG50aHJlc2gpO1xuXHRyZXR1cm4gb3V0O1xufVxuXG4vKiBJU08gODYwMSBEdXJhdGlvbiAqL1xuZnVuY3Rpb24gcGFyc2VfaXNvZHVyKHMpIHtcblx0dmFyIHNlYyA9IDAsIG10ID0gMCwgdGltZSA9IGZhbHNlO1xuXHR2YXIgbSA9IHMubWF0Y2goL1AoWzAtOVxcLl0rWSk/KFswLTlcXC5dK00pPyhbMC05XFwuXStEKT9UKFswLTlcXC5dK0gpPyhbMC05XFwuXStNKT8oWzAtOVxcLl0rUyk/Lyk7XG5cdGlmKCFtKSB0aHJvdyBuZXcgRXJyb3IoXCJ8XCIgKyBzICsgXCJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9uXCIpO1xuXHRmb3IodmFyIGkgPSAxOyBpICE9IG0ubGVuZ3RoOyArK2kpIHtcblx0XHRpZighbVtpXSkgY29udGludWU7XG5cdFx0bXQgPSAxO1xuXHRcdGlmKGkgPiAzKSB0aW1lID0gdHJ1ZTtcblx0XHRzd2l0Y2gobVtpXS5zbGljZShtW2ldLmxlbmd0aC0xKSkge1xuXHRcdFx0Y2FzZSAnWSc6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogXCIgKyBtW2ldLnNsaWNlKG1baV0ubGVuZ3RoLTEpKTtcblx0XHRcdGNhc2UgJ0QnOiBtdCAqPSAyNDtcblx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Y2FzZSAnSCc6IG10ICo9IDYwO1xuXHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRjYXNlICdNJzpcblx0XHRcdFx0aWYoIXRpbWUpIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTVwiKTtcblx0XHRcdFx0ZWxzZSBtdCAqPSA2MDtcblx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Y2FzZSAnUyc6IGJyZWFrO1xuXHRcdH1cblx0XHRzZWMgKz0gbXQgKiBwYXJzZUludChtW2ldLCAxMCk7XG5cdH1cblx0cmV0dXJuIHNlYztcbn1cblxudmFyIGdvb2RfcGRfZGF0ZSA9IG5ldyBEYXRlKCcyMDE3LTAyLTE5VDE5OjA2OjA5LjAwMFonKTtcbmlmKGlzTmFOKGdvb2RfcGRfZGF0ZS5nZXRGdWxsWWVhcigpKSkgZ29vZF9wZF9kYXRlID0gbmV3IERhdGUoJzIvMTkvMTcnKTtcbnZhciBnb29kX3BkID0gZ29vZF9wZF9kYXRlLmdldEZ1bGxZZWFyKCkgPT0gMjAxNztcbi8qIHBhcnNlcyBhIGRhdGUgYXMgYSBsb2NhbCBkYXRlICovXG5mdW5jdGlvbiBwYXJzZURhdGUoc3RyLCBmaXhkYXRlKSB7XG5cdHZhciBkID0gbmV3IERhdGUoc3RyKTtcblx0aWYoZ29vZF9wZCkge1xuaWYoZml4ZGF0ZSA+IDApIGQuc2V0VGltZShkLmdldFRpbWUoKSArIGQuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwICogMTAwMCk7XG5cdFx0ZWxzZSBpZihmaXhkYXRlIDwgMCkgZC5zZXRUaW1lKGQuZ2V0VGltZSgpIC0gZC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwKTtcblx0XHRyZXR1cm4gZDtcblx0fVxuXHRpZihzdHIgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gc3RyO1xuXHRpZihnb29kX3BkX2RhdGUuZ2V0RnVsbFllYXIoKSA9PSAxOTE3ICYmICFpc05hTihkLmdldEZ1bGxZZWFyKCkpKSB7XG5cdFx0dmFyIHMgPSBkLmdldEZ1bGxZZWFyKCk7XG5cdFx0aWYoc3RyLmluZGV4T2YoXCJcIiArIHMpID4gLTEpIHJldHVybiBkO1xuXHRcdGQuc2V0RnVsbFllYXIoZC5nZXRGdWxsWWVhcigpICsgMTAwKTsgcmV0dXJuIGQ7XG5cdH1cblx0dmFyIG4gPSBzdHIubWF0Y2goL1xcZCsvZyl8fFtcIjIwMTdcIixcIjJcIixcIjE5XCIsXCIwXCIsXCIwXCIsXCIwXCJdO1xuXHR2YXIgb3V0ID0gbmV3IERhdGUoK25bMF0sICtuWzFdIC0gMSwgK25bMl0sICgrblszXXx8MCksICgrbls0XXx8MCksICgrbls1XXx8MCkpO1xuXHRpZihzdHIuaW5kZXhPZihcIlpcIikgPiAtMSkgb3V0ID0gbmV3IERhdGUob3V0LmdldFRpbWUoKSAtIG91dC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwKTtcblx0cmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gY2Myc3RyKGFycikge1xuXHR2YXIgbyA9IFwiXCI7XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gYXJyLmxlbmd0aDsgKytpKSBvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYXJyW2ldKTtcblx0cmV0dXJuIG87XG59XG5cbmZ1bmN0aW9uIGR1cChvKSB7XG5cdGlmKHR5cGVvZiBKU09OICE9ICd1bmRlZmluZWQnICYmICFBcnJheS5pc0FycmF5KG8pKSByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSk7XG5cdGlmKHR5cGVvZiBvICE9ICdvYmplY3QnIHx8IG8gPT0gbnVsbCkgcmV0dXJuIG87XG5cdGlmKG8gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gbmV3IERhdGUoby5nZXRUaW1lKCkpO1xuXHR2YXIgb3V0ID0ge307XG5cdGZvcih2YXIgayBpbiBvKSBpZihvLmhhc093blByb3BlcnR5KGspKSBvdXRba10gPSBkdXAob1trXSk7XG5cdHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGZpbGwoYyxsKSB7IHZhciBvID0gXCJcIjsgd2hpbGUoby5sZW5ndGggPCBsKSBvKz1jOyByZXR1cm4gbzsgfVxuXG4vKiBUT0RPOiBzdHJlc3MgdGVzdCAqL1xuZnVuY3Rpb24gZnV6enludW0ocykge1xuXHR2YXIgdiA9IE51bWJlcihzKTtcblx0aWYoIWlzTmFOKHYpKSByZXR1cm4gdjtcblx0dmFyIHd0ID0gMTtcblx0dmFyIHNzID0gcy5yZXBsYWNlKC8oW1xcZF0pLChbXFxkXSkvZyxcIiQxJDJcIikucmVwbGFjZSgvWyRdL2csXCJcIikucmVwbGFjZSgvWyVdL2csIGZ1bmN0aW9uKCkgeyB3dCAqPSAxMDA7IHJldHVybiBcIlwiO30pO1xuXHRpZighaXNOYU4odiA9IE51bWJlcihzcykpKSByZXR1cm4gdiAvIHd0O1xuXHRzcyA9IHNzLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKCQkLCAkMSkgeyB3dCA9IC13dDsgcmV0dXJuICQxO30pO1xuXHRpZighaXNOYU4odiA9IE51bWJlcihzcykpKSByZXR1cm4gdiAvIHd0O1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIGZ1enp5ZGF0ZShzKSB7XG5cdHZhciBvID0gbmV3IERhdGUocyksIG4gPSBuZXcgRGF0ZShOYU4pO1xuXHR2YXIgeSA9IG8uZ2V0WWVhcigpLCBtID0gby5nZXRNb250aCgpLCBkID0gby5nZXREYXRlKCk7XG5cdGlmKGlzTmFOKGQpKSByZXR1cm4gbjtcblx0aWYoeSA8IDAgfHwgeSA+IDgwOTkpIHJldHVybiBuO1xuXHRpZigobSA+IDAgfHwgZCA+IDEpICYmIHkgIT0gMTAxKSByZXR1cm4gbztcblx0aWYocy50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pKSByZXR1cm4gbztcblx0aWYocy5tYXRjaCgvW14tMC05OixcXC9cXFxcXS8pKSByZXR1cm4gbjtcblx0cmV0dXJuIG87XG59XG5cbnZhciBzYWZlX3NwbGl0X3JlZ2V4ID0gXCJhYmFjYWJhXCIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aCA9PSA1O1xuZnVuY3Rpb24gc3BsaXRfcmVnZXgoc3RyLCByZSwgZGVmKSB7XG5cdGlmKHNhZmVfc3BsaXRfcmVnZXggfHwgdHlwZW9mIHJlID09IFwic3RyaW5nXCIpIHJldHVybiBzdHIuc3BsaXQocmUpO1xuXHR2YXIgcCA9IHN0ci5zcGxpdChyZSksIG8gPSBbcFswXV07XG5cdGZvcih2YXIgaSA9IDE7IGkgPCBwLmxlbmd0aDsgKytpKSB7IG8ucHVzaChkZWYpOyBvLnB1c2gocFtpXSk7IH1cblx0cmV0dXJuIG87XG59XG5mdW5jdGlvbiBnZXRkYXRhc3RyKGRhdGEpIHtcblx0aWYoIWRhdGEpIHJldHVybiBudWxsO1xuXHRpZihkYXRhLmRhdGEpIHJldHVybiBkZWJvbShkYXRhLmRhdGEpO1xuXHRpZihkYXRhLmFzTm9kZUJ1ZmZlciAmJiBoYXNfYnVmKSByZXR1cm4gZGVib20oZGF0YS5hc05vZGVCdWZmZXIoKS50b1N0cmluZygnYmluYXJ5JykpO1xuXHRpZihkYXRhLmFzQmluYXJ5KSByZXR1cm4gZGVib20oZGF0YS5hc0JpbmFyeSgpKTtcblx0aWYoZGF0YS5fZGF0YSAmJiBkYXRhLl9kYXRhLmdldENvbnRlbnQpIHJldHVybiBkZWJvbShjYzJzdHIoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZGF0YS5fZGF0YS5nZXRDb250ZW50KCksMCkpKTtcblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldGRhdGFiaW4oZGF0YSkge1xuXHRpZighZGF0YSkgcmV0dXJuIG51bGw7XG5cdGlmKGRhdGEuZGF0YSkgcmV0dXJuIGNoYXJfY29kZXMoZGF0YS5kYXRhKTtcblx0aWYoZGF0YS5hc05vZGVCdWZmZXIgJiYgaGFzX2J1ZikgcmV0dXJuIGRhdGEuYXNOb2RlQnVmZmVyKCk7XG5cdGlmKGRhdGEuX2RhdGEgJiYgZGF0YS5fZGF0YS5nZXRDb250ZW50KSB7XG5cdFx0dmFyIG8gPSBkYXRhLl9kYXRhLmdldENvbnRlbnQoKTtcblx0XHRpZih0eXBlb2YgbyA9PSBcInN0cmluZ1wiKSByZXR1cm4gY2hhcl9jb2RlcyhvKTtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobyk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldGRhdGEoZGF0YSkgeyByZXR1cm4gKGRhdGEgJiYgZGF0YS5uYW1lLnNsaWNlKC00KSA9PT0gXCIuYmluXCIpID8gZ2V0ZGF0YWJpbihkYXRhKSA6IGdldGRhdGFzdHIoZGF0YSk7IH1cblxuLyogUGFydCAyIFNlY3Rpb24gMTAuMS4yIFwiTWFwcGluZyBDb250ZW50IFR5cGVzXCIgTmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgKi9cbi8qIE9BU0lTIGRvZXMgbm90IGNvbW1lbnQgb24gZmlsZW5hbWUgY2FzZSBzZW5zaXRpdml0eSAqL1xuZnVuY3Rpb24gc2FmZWdldHppcGZpbGUoemlwLCBmaWxlKSB7XG5cdHZhciBrID0ga2V5cyh6aXAuZmlsZXMpO1xuXHR2YXIgZiA9IGZpbGUudG9Mb3dlckNhc2UoKSwgZyA9IGYucmVwbGFjZSgvXFwvL2csJ1xcXFwnKTtcblx0Zm9yKHZhciBpPTA7IGk8ay5sZW5ndGg7ICsraSkge1xuXHRcdHZhciBuID0ga1tpXS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmKGYgPT0gbiB8fCBnID09IG4pIHJldHVybiB6aXAuZmlsZXNba1tpXV07XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldHppcGZpbGUoemlwLCBmaWxlKSB7XG5cdHZhciBvID0gc2FmZWdldHppcGZpbGUoemlwLCBmaWxlKTtcblx0aWYobyA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBmaWxlIFwiICsgZmlsZSArIFwiIGluIHppcFwiKTtcblx0cmV0dXJuIG87XG59XG5cbmZ1bmN0aW9uIGdldHppcGRhdGEoemlwLCBmaWxlLCBzYWZlKSB7XG5cdGlmKCFzYWZlKSByZXR1cm4gZ2V0ZGF0YShnZXR6aXBmaWxlKHppcCwgZmlsZSkpO1xuXHRpZighZmlsZSkgcmV0dXJuIG51bGw7XG5cdHRyeSB7IHJldHVybiBnZXR6aXBkYXRhKHppcCwgZmlsZSk7IH0gY2F0Y2goZSkgeyByZXR1cm4gbnVsbDsgfVxufVxuXG5mdW5jdGlvbiBnZXR6aXBzdHIoemlwLCBmaWxlLCBzYWZlKSB7XG5cdGlmKCFzYWZlKSByZXR1cm4gZ2V0ZGF0YXN0cihnZXR6aXBmaWxlKHppcCwgZmlsZSkpO1xuXHRpZighZmlsZSkgcmV0dXJuIG51bGw7XG5cdHRyeSB7IHJldHVybiBnZXR6aXBzdHIoemlwLCBmaWxlKTsgfSBjYXRjaChlKSB7IHJldHVybiBudWxsOyB9XG59XG5cbnZhciBqc3ppcDtcbi8qZ2xvYmFsIEpTWmlwOnRydWUgKi9cbmlmKHR5cGVvZiBKU1ppcCAhPT0gJ3VuZGVmaW5lZCcpIGpzemlwID0gSlNaaXA7XG5pZih0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0aWYodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRpZih0eXBlb2YganN6aXAgPT09ICd1bmRlZmluZWQnKSBqc3ppcCA9IHJlcXVpcmUoJy4vanN6aXAuanMnKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZXNvbHZlX3BhdGgocGF0aCwgYmFzZSkge1xuXHR2YXIgcmVzdWx0ID0gYmFzZS5zcGxpdCgnLycpO1xuXHRpZihiYXNlLnNsaWNlKC0xKSAhPSBcIi9cIikgcmVzdWx0LnBvcCgpOyAvLyBmb2xkZXIgcGF0aFxuXHR2YXIgdGFyZ2V0ID0gcGF0aC5zcGxpdCgnLycpO1xuXHR3aGlsZSAodGFyZ2V0Lmxlbmd0aCAhPT0gMCkge1xuXHRcdHZhciBzdGVwID0gdGFyZ2V0LnNoaWZ0KCk7XG5cdFx0aWYgKHN0ZXAgPT09ICcuLicpIHJlc3VsdC5wb3AoKTtcblx0XHRlbHNlIGlmIChzdGVwICE9PSAnLicpIHJlc3VsdC5wdXNoKHN0ZXApO1xuXHR9XG5cdHJldHVybiByZXN1bHQuam9pbignLycpO1xufVxudmFyIFhNTF9IRUFERVIgPSAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiBzdGFuZGFsb25lPVwieWVzXCI/Plxcclxcbic7XG52YXIgYXR0cmVnZXhnPS8oW15cIlxccz8+XFwvXSspXFxzKj1cXHMqKCg/OlwiKShbXlwiXSopKD86XCIpfCg/OicpKFteJ10qKSg/OicpfChbXidcIj5cXHNdKykpL2c7XG52YXIgdGFncmVnZXg9LzxbXFwvXFw/XT9bYS16QS1aMC05Ol0rKD86XFxzK1teXCJcXHM/PlxcL10rXFxzKj1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteJ1wiPlxcc10rKSkqXFxzP1tcXC9cXD9dPz4vZztcbmlmKCEoWE1MX0hFQURFUi5tYXRjaCh0YWdyZWdleCkpKSB0YWdyZWdleCA9IC88W14+XSo+L2c7XG52YXIgbnNyZWdleD0vPFxcdyo6LywgbnNyZWdleDIgPSAvPChcXC8/KVxcdys6LztcbmZ1bmN0aW9uIHBhcnNleG1sdGFnKHRhZywgc2tpcF9yb290KSB7XG5cdHZhciB6ID0gKHt9KTtcblx0dmFyIGVxID0gMCwgYyA9IDA7XG5cdGZvcig7IGVxICE9PSB0YWcubGVuZ3RoOyArK2VxKSBpZigoYyA9IHRhZy5jaGFyQ29kZUF0KGVxKSkgPT09IDMyIHx8IGMgPT09IDEwIHx8IGMgPT09IDEzKSBicmVhaztcblx0aWYoIXNraXBfcm9vdCkgelswXSA9IHRhZy5zbGljZSgwLCBlcSk7XG5cdGlmKGVxID09PSB0YWcubGVuZ3RoKSByZXR1cm4gejtcblx0dmFyIG0gPSB0YWcubWF0Y2goYXR0cmVnZXhnKSwgaj0wLCB2PVwiXCIsIGk9MCwgcT1cIlwiLCBjYz1cIlwiLCBxdW90ID0gMTtcblx0aWYobSkgZm9yKGkgPSAwOyBpICE9IG0ubGVuZ3RoOyArK2kpIHtcblx0XHRjYyA9IG1baV07XG5cdFx0Zm9yKGM9MDsgYyAhPSBjYy5sZW5ndGg7ICsrYykgaWYoY2MuY2hhckNvZGVBdChjKSA9PT0gNjEpIGJyZWFrO1xuXHRcdHEgPSBjYy5zbGljZSgwLGMpLnRyaW0oKTtcblx0XHR3aGlsZShjYy5jaGFyQ29kZUF0KGMrMSkgPT0gMzIpICsrYztcblx0XHRxdW90ID0gKChlcT1jYy5jaGFyQ29kZUF0KGMrMSkpID09IDM0IHx8IGVxID09IDM5KSA/IDEgOiAwO1xuXHRcdHYgPSBjYy5zbGljZShjKzErcXVvdCwgY2MubGVuZ3RoLXF1b3QpO1xuXHRcdGZvcihqPTA7aiE9cS5sZW5ndGg7KytqKSBpZihxLmNoYXJDb2RlQXQoaikgPT09IDU4KSBicmVhaztcblx0XHRpZihqPT09cS5sZW5ndGgpIHtcblx0XHRcdGlmKHEuaW5kZXhPZihcIl9cIikgPiAwKSBxID0gcS5zbGljZSgwLCBxLmluZGV4T2YoXCJfXCIpKTsgLy8gZnJvbSBvZHNcblx0XHRcdHpbcV0gPSB2O1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHZhciBrID0gKGo9PT01ICYmIHEuc2xpY2UoMCw1KT09PVwieG1sbnNcIj9cInhtbG5zXCI6XCJcIikrcS5zbGljZShqKzEpO1xuXHRcdFx0aWYoeltrXSAmJiBxLnNsaWNlKGotMyxqKSA9PSBcImV4dFwiKSBjb250aW51ZTsgLy8gZnJvbSBvZHNcblx0XHRcdHpba10gPSB2O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gejtcbn1cbmZ1bmN0aW9uIHN0cmlwX25zKHgpIHsgcmV0dXJuIHgucmVwbGFjZShuc3JlZ2V4MiwgXCI8JDFcIik7IH1cblxudmFyIGVuY29kaW5ncyA9IHtcblx0JyZxdW90Oyc6ICdcIicsXG5cdCcmYXBvczsnOiBcIidcIixcblx0JyZndDsnOiAnPicsXG5cdCcmbHQ7JzogJzwnLFxuXHQnJmFtcDsnOiAnJidcbn07XG52YXIgcmVuY29kaW5nID0gZXZlcnQoZW5jb2RpbmdzKTtcbi8vdmFyIHJlbmNzdHIgPSBcIiY8PidcXFwiXCIuc3BsaXQoXCJcIik7XG5cbi8vIFRPRE86IENQIHJlbWFwIChuZWVkIHRvIHJlYWQgZmlsZSB2ZXJzaW9uIHRvIGRldGVybWluZSBPUylcbnZhciB1bmVzY2FwZXhtbCA9IChmdW5jdGlvbigpIHtcblx0LyogMjIuNC4yLjQgYnN0ciAoQmFzaWMgU3RyaW5nKSAqL1xuXHR2YXIgZW5jcmVnZXggPSAvJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcXGRhLWZBLUZdKykpOy9nLCBjb2RlcmVnZXggPSAvX3goW1xcZGEtZkEtRl17NH0pXy9nO1xuXHRyZXR1cm4gZnVuY3Rpb24gdW5lc2NhcGV4bWwodGV4dCkge1xuXHRcdHZhciBzID0gdGV4dCArICcnLCBpID0gcy5pbmRleE9mKFwiPCFbQ0RBVEFbXCIpO1xuXHRcdGlmKGkgPT0gLTEpIHJldHVybiBzLnJlcGxhY2UoZW5jcmVnZXgsIGZ1bmN0aW9uKCQkLCAkMSkgeyByZXR1cm4gZW5jb2RpbmdzWyQkXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCgkMSwkJC5pbmRleE9mKFwieFwiKT4tMT8xNjoxMCkpfHwkJDsgfSkucmVwbGFjZShjb2RlcmVnZXgsZnVuY3Rpb24obSxjKSB7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYywxNikpO30pO1xuXHRcdHZhciBqID0gcy5pbmRleE9mKFwiXV0+XCIpO1xuXHRcdHJldHVybiB1bmVzY2FwZXhtbChzLnNsaWNlKDAsIGkpKSArIHMuc2xpY2UoaSs5LGopICsgdW5lc2NhcGV4bWwocy5zbGljZShqKzMpKTtcblx0fTtcbn0pKCk7XG5cbnZhciBkZWNyZWdleD0vWyY8PidcIl0vZywgY2hhcmVnZXggPSAvW1xcdTAwMDAtXFx1MDAwOFxcdTAwMGItXFx1MDAxZl0vZztcbmZ1bmN0aW9uIGVzY2FwZXhtbCh0ZXh0KXtcblx0dmFyIHMgPSB0ZXh0ICsgJyc7XG5cdHJldHVybiBzLnJlcGxhY2UoZGVjcmVnZXgsIGZ1bmN0aW9uKHkpIHsgcmV0dXJuIHJlbmNvZGluZ1t5XTsgfSkucmVwbGFjZShjaGFyZWdleCxmdW5jdGlvbihzKSB7IHJldHVybiBcIl94XCIgKyAoXCIwMDBcIitzLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkgKyBcIl9cIjt9KTtcbn1cbmZ1bmN0aW9uIGVzY2FwZXhtbHRhZyh0ZXh0KXsgcmV0dXJuIGVzY2FwZXhtbCh0ZXh0KS5yZXBsYWNlKC8gL2csXCJfeDAwMjBfXCIpOyB9XG5cbnZhciBodG1sY2hhcmVnZXggPSAvW1xcdTAwMDAtXFx1MDAxZl0vZztcbmZ1bmN0aW9uIGVzY2FwZWh0bWwodGV4dCl7XG5cdHZhciBzID0gdGV4dCArICcnO1xuXHRyZXR1cm4gcy5yZXBsYWNlKGRlY3JlZ2V4LCBmdW5jdGlvbih5KSB7IHJldHVybiByZW5jb2RpbmdbeV07IH0pLnJlcGxhY2UoaHRtbGNoYXJlZ2V4LGZ1bmN0aW9uKHMpIHsgcmV0dXJuIFwiJiN4XCIgKyAoXCIwMDBcIitzLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkgKyBcIjtcIjsgfSk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZXhsbWwodGV4dCl7XG5cdHZhciBzID0gdGV4dCArICcnO1xuXHRyZXR1cm4gcy5yZXBsYWNlKGRlY3JlZ2V4LCBmdW5jdGlvbih5KSB7IHJldHVybiByZW5jb2RpbmdbeV07IH0pLnJlcGxhY2UoaHRtbGNoYXJlZ2V4LGZ1bmN0aW9uKHMpIHsgcmV0dXJuIFwiJiN4XCIgKyAocy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKSArIFwiO1wiOyB9KTtcbn1cblxuLyogVE9ETzogaGFuZGxlIGNvZGVwYWdlcyAqL1xudmFyIHhsbWxfZml4c3RyID0gKGZ1bmN0aW9uKCkge1xuXHR2YXIgZW50cmVnZXggPSAvJiMoXFxkKyk7L2c7XG5cdGZ1bmN0aW9uIGVudHJlcGwoJCQsJDEpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoJDEsMTApKTsgfVxuXHRyZXR1cm4gZnVuY3Rpb24geGxtbF9maXhzdHIoc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZShlbnRyZWdleCxlbnRyZXBsKTsgfTtcbn0pKCk7XG52YXIgeGxtbF91bmZpeHN0ciA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIHhsbWxfdW5maXhzdHIoc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZSgvKFxcclxcbnxbXFxyXFxuXSkvZyxcIlxcJiMxMDtcIik7IH07XG59KSgpO1xuXG5mdW5jdGlvbiBwYXJzZXhtbGJvb2wodmFsdWUpIHtcblx0c3dpdGNoKHZhbHVlKSB7XG5cdFx0Y2FzZSAxOiBjYXNlIHRydWU6IGNhc2UgJzEnOiBjYXNlICd0cnVlJzogY2FzZSAnVFJVRSc6IHJldHVybiB0cnVlO1xuXHRcdC8qIGNhc2UgJzAnOiBjYXNlICdmYWxzZSc6IGNhc2UgJ0ZBTFNFJzoqL1xuXHRcdGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcblx0fVxufVxuXG52YXIgdXRmOHJlYWQgPSBmdW5jdGlvbiB1dGY4cmVhZGEob3JpZykge1xuXHR2YXIgb3V0ID0gXCJcIiwgaSA9IDAsIGMgPSAwLCBkID0gMCwgZSA9IDAsIGYgPSAwLCB3ID0gMDtcblx0d2hpbGUgKGkgPCBvcmlnLmxlbmd0aCkge1xuXHRcdGMgPSBvcmlnLmNoYXJDb2RlQXQoaSsrKTtcblx0XHRpZiAoYyA8IDEyOCkgeyBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTsgY29udGludWU7IH1cblx0XHRkID0gb3JpZy5jaGFyQ29kZUF0KGkrKyk7XG5cdFx0aWYgKGM+MTkxICYmIGM8MjI0KSB7IGYgPSAoKGMgJiAzMSkgPDwgNik7IGYgfD0gKGQgJiA2Myk7IG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGYpOyBjb250aW51ZTsgfVxuXHRcdGUgPSBvcmlnLmNoYXJDb2RlQXQoaSsrKTtcblx0XHRpZiAoYyA8IDI0MCkgeyBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAxNSkgPDwgMTIpIHwgKChkICYgNjMpIDw8IDYpIHwgKGUgJiA2MykpOyBjb250aW51ZTsgfVxuXHRcdGYgPSBvcmlnLmNoYXJDb2RlQXQoaSsrKTtcblx0XHR3ID0gKCgoYyAmIDcpIDw8IDE4KSB8ICgoZCAmIDYzKSA8PCAxMikgfCAoKGUgJiA2MykgPDwgNikgfCAoZiAmIDYzKSktNjU1MzY7XG5cdFx0b3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODAwICsgKCh3Pj4+MTApJjEwMjMpKTtcblx0XHRvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgKyAodyYxMDIzKSk7XG5cdH1cblx0cmV0dXJuIG91dDtcbn07XG5cbnZhciB1dGY4d3JpdGUgPSBmdW5jdGlvbihvcmlnKSB7XG5cdHZhciBvdXQgPSBbXSwgaSA9IDAsIGMgPSAwLCBkID0gMDtcblx0d2hpbGUoaSA8IG9yaWcubGVuZ3RoKSB7XG5cdFx0YyA9IG9yaWcuY2hhckNvZGVBdChpKyspO1xuXHRcdHN3aXRjaCh0cnVlKSB7XG5cdFx0XHRjYXNlIGMgPCAxMjg6IG91dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpOyBicmVhaztcblx0XHRcdGNhc2UgYyA8IDIwNDg6XG5cdFx0XHRcdG91dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTkyICsgKGMgPj4gNikpKTtcblx0XHRcdFx0b3V0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjggKyAoYyAmIDYzKSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYyA+PSA1NTI5NiAmJiBjIDwgNTczNDQ6XG5cdFx0XHRcdGMgLT0gNTUyOTY7IGQgPSBvcmlnLmNoYXJDb2RlQXQoaSsrKSAtIDU2MzIwICsgKGM8PDEwKTtcblx0XHRcdFx0b3V0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyNDAgKyAoKGQgPj4xOCkgJiA3KSkpO1xuXHRcdFx0XHRvdXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCArICgoZCA+PjEyKSAmIDYzKSkpO1xuXHRcdFx0XHRvdXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCArICgoZCA+PiA2KSAmIDYzKSkpO1xuXHRcdFx0XHRvdXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCArIChkICYgNjMpKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0b3V0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQgKyAoYyA+PiAxMikpKTtcblx0XHRcdFx0b3V0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjggKyAoKGMgPj4gNikgJiA2MykpKTtcblx0XHRcdFx0b3V0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjggKyAoYyAmIDYzKSkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0LmpvaW4oXCJcIik7XG59O1xuXG5pZihoYXNfYnVmKSB7XG5cdHZhciB1dGY4cmVhZGIgPSBmdW5jdGlvbiB1dGY4cmVhZGIoZGF0YSkge1xuXHRcdHZhciBvdXQgPSBuZXcgQnVmZmVyKDIqZGF0YS5sZW5ndGgpLCB3LCBpLCBqID0gMSwgayA9IDAsIHd3PTAsIGM7XG5cdFx0Zm9yKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrPWopIHtcblx0XHRcdGogPSAxO1xuXHRcdFx0aWYoKGM9ZGF0YS5jaGFyQ29kZUF0KGkpKSA8IDEyOCkgdyA9IGM7XG5cdFx0XHRlbHNlIGlmKGMgPCAyMjQpIHsgdyA9IChjJjMxKSo2NCsoZGF0YS5jaGFyQ29kZUF0KGkrMSkmNjMpOyBqPTI7IH1cblx0XHRcdGVsc2UgaWYoYyA8IDI0MCkgeyB3PShjJjE1KSo0MDk2KyhkYXRhLmNoYXJDb2RlQXQoaSsxKSY2MykqNjQrKGRhdGEuY2hhckNvZGVBdChpKzIpJjYzKTsgaj0zOyB9XG5cdFx0XHRlbHNlIHsgaiA9IDQ7XG5cdFx0XHRcdHcgPSAoYyAmIDcpKjI2MjE0NCsoZGF0YS5jaGFyQ29kZUF0KGkrMSkmNjMpKjQwOTYrKGRhdGEuY2hhckNvZGVBdChpKzIpJjYzKSo2NCsoZGF0YS5jaGFyQ29kZUF0KGkrMykmNjMpO1xuXHRcdFx0XHR3IC09IDY1NTM2OyB3dyA9IDB4RDgwMCArICgodz4+PjEwKSYxMDIzKTsgdyA9IDB4REMwMCArICh3JjEwMjMpO1xuXHRcdFx0fVxuXHRcdFx0aWYod3cgIT09IDApIHsgb3V0W2srK10gPSB3dyYyNTU7IG91dFtrKytdID0gd3c+Pj44OyB3dyA9IDA7IH1cblx0XHRcdG91dFtrKytdID0gdyUyNTY7IG91dFtrKytdID0gdz4+Pjg7XG5cdFx0fVxuXHRcdHJldHVybiBvdXQuc2xpY2UoMCxrKS50b1N0cmluZygndWNzMicpO1xuXHR9O1xuXHR2YXIgY29ycHVzID0gXCJmb28gYmFyIGJhelxcdTAwZTJcXHUwMDk4XFx1MDA4M1xcdTAwZjBcXHUwMDlmXFx1MDA4ZFxcdTAwYTNcIjtcblx0aWYodXRmOHJlYWQoY29ycHVzKSA9PSB1dGY4cmVhZGIoY29ycHVzKSkgdXRmOHJlYWQgPSB1dGY4cmVhZGI7XG5cdC8vICRGbG93SWdub3JlXG5cdHZhciB1dGY4cmVhZGMgPSBmdW5jdGlvbiB1dGY4cmVhZGMoZGF0YSkgeyByZXR1cm4gQnVmZmVyKGRhdGEsICdiaW5hcnknKS50b1N0cmluZygndXRmOCcpOyB9O1xuXHRpZih1dGY4cmVhZChjb3JwdXMpID09IHV0ZjhyZWFkYyhjb3JwdXMpKSB1dGY4cmVhZCA9IHV0ZjhyZWFkYztcblxuXHR1dGY4d3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7IHJldHVybiBuZXcgQnVmZmVyKGRhdGEsICd1dGY4JykudG9TdHJpbmcoXCJiaW5hcnlcIik7IH07XG59XG5cbi8vIG1hdGNoZXMgPGZvbz4uLi48L2Zvbz4gZXh0cmFjdHMgY29udGVudFxudmFyIG1hdGNodGFnID0gKGZ1bmN0aW9uKCkge1xuXHR2YXIgbXRjYWNoZSA9ICh7fSk7XG5cdHJldHVybiBmdW5jdGlvbiBtYXRjaHRhZyhmLGcpIHtcblx0XHR2YXIgdCA9IGYrXCJ8XCIrKGd8fFwiXCIpO1xuXHRcdGlmKG10Y2FjaGVbdF0pIHJldHVybiBtdGNhY2hlW3RdO1xuXHRcdHJldHVybiAobXRjYWNoZVt0XSA9IG5ldyBSZWdFeHAoJzwoPzpcXFxcdys6KT8nK2YrJyg/OiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiKT8oPzpbXj5dKik+KFtcXFxcc1xcXFxTXSo/KTwvKD86XFxcXHcrOik/JytmKyc+JywoKGd8fFwiXCIpKSkpO1xuXHR9O1xufSkoKTtcblxudmFyIGh0bWxkZWNvZGUgPSAoZnVuY3Rpb24oKSB7XG5cdHZhciBlbnRpdGllcyA9IFtcblx0XHRbJ25ic3AnLCAnICddLCBbJ21pZGRvdCcsICfCtyddLFxuXHRcdFsncXVvdCcsICdcIiddLCBbJ2Fwb3MnLCBcIidcIl0sIFsnZ3QnLCAgICc+J10sIFsnbHQnLCAgICc8J10sIFsnYW1wJywgICcmJ11cblx0XS5tYXAoZnVuY3Rpb24oeCkgeyByZXR1cm4gW25ldyBSZWdFeHAoJyYnICsgeFswXSArICc7JywgXCJnXCIpLCB4WzFdXTsgfSk7XG5cdHJldHVybiBmdW5jdGlvbiBodG1sZGVjb2RlKHN0cikge1xuXHRcdHZhciBvID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKS5yZXBsYWNlKC88XFxzKltiQl1bclJdXFxzKlxcLz8+L2csXCJcXG5cIikucmVwbGFjZSgvPFtePl0qPi9nLFwiXCIpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBlbnRpdGllcy5sZW5ndGg7ICsraSkgbyA9IG8ucmVwbGFjZShlbnRpdGllc1tpXVswXSwgZW50aXRpZXNbaV1bMV0pO1xuXHRcdHJldHVybiBvO1xuXHR9O1xufSkoKTtcblxudmFyIHZ0cmVnZXggPSAoZnVuY3Rpb24oKXsgdmFyIHZ0X2NhY2hlID0ge307XG5cdHJldHVybiBmdW5jdGlvbiB2dF9yZWdleChidCkge1xuXHRcdGlmKHZ0X2NhY2hlW2J0XSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdnRfY2FjaGVbYnRdO1xuXHRcdHJldHVybiAodnRfY2FjaGVbYnRdID0gbmV3IFJlZ0V4cChcIjwoPzp2dDopP1wiICsgYnQgKyBcIj4oW1xcXFxzXFxcXFNdKj8pPC8oPzp2dDopP1wiICsgYnQgKyBcIj5cIiwgJ2cnKSApO1xufTt9KSgpO1xudmFyIHZ0dnJlZ2V4ID0gLzxcXC8/KD86dnQ6KT92YXJpYW50Pi9nLCB2dG1yZWdleCA9IC88KD86dnQ6KShbXj5dKik+KFtcXHNcXFNdKik8LztcbmZ1bmN0aW9uIHBhcnNlVmVjdG9yKGRhdGEsIG9wdHMpIHtcblx0dmFyIGggPSBwYXJzZXhtbHRhZyhkYXRhKTtcblxuXHR2YXIgbWF0Y2hlcyA9IGRhdGEubWF0Y2godnRyZWdleChoLmJhc2VUeXBlKSl8fFtdO1xuXHR2YXIgcmVzID0gW107XG5cdGlmKG1hdGNoZXMubGVuZ3RoICE9IGguc2l6ZSkge1xuXHRcdGlmKG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5ndGggXCIgKyBtYXRjaGVzLmxlbmd0aCArIFwiICE9IFwiICsgaC5zaXplKTtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cdG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbih4KSB7XG5cdFx0dmFyIHYgPSB4LnJlcGxhY2UodnR2cmVnZXgsXCJcIikubWF0Y2godnRtcmVnZXgpO1xuXHRcdGlmKHYpIHJlcy5wdXNoKHt2OnV0ZjhyZWFkKHZbMl0pLCB0OnZbMV19KTtcblx0fSk7XG5cdHJldHVybiByZXM7XG59XG5cbnZhciB3dHJlZ2V4ID0gLyheXFxzfFxccyR8XFxuKS87XG5mdW5jdGlvbiB3cml0ZXRhZyhmLGcpIHsgcmV0dXJuICc8JyArIGYgKyAoZy5tYXRjaCh3dHJlZ2V4KT8nIHhtbDpzcGFjZT1cInByZXNlcnZlXCInIDogXCJcIikgKyAnPicgKyBnICsgJzwvJyArIGYgKyAnPic7IH1cblxuZnVuY3Rpb24gd3h0X2hlbHBlcihoKSB7IHJldHVybiBrZXlzKGgpLm1hcChmdW5jdGlvbihrKSB7IHJldHVybiBcIiBcIiArIGsgKyAnPVwiJyArIGhba10gKyAnXCInO30pLmpvaW4oXCJcIik7IH1cbmZ1bmN0aW9uIHdyaXRleHRhZyhmLGcsaCkgeyByZXR1cm4gJzwnICsgZiArICgoaCAhPSBudWxsKSA/IHd4dF9oZWxwZXIoaCkgOiBcIlwiKSArICgoZyAhPSBudWxsKSA/IChnLm1hdGNoKHd0cmVnZXgpPycgeG1sOnNwYWNlPVwicHJlc2VydmVcIicgOiBcIlwiKSArICc+JyArIGcgKyAnPC8nICsgZiA6IFwiL1wiKSArICc+Jzt9XG5cbmZ1bmN0aW9uIHdyaXRlX3czY2R0ZihkLCB0KSB7IHRyeSB7IHJldHVybiBkLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXFwuXFxkKi8sXCJcIik7IH0gY2F0Y2goZSkgeyBpZih0KSB0aHJvdyBlOyB9IHJldHVybiBcIlwiOyB9XG5cbmZ1bmN0aW9uIHdyaXRlX3Z0KHMpIHtcblx0c3dpdGNoKHR5cGVvZiBzKSB7XG5cdFx0Y2FzZSAnc3RyaW5nJzogcmV0dXJuIHdyaXRleHRhZygndnQ6bHB3c3RyJywgcyk7XG5cdFx0Y2FzZSAnbnVtYmVyJzogcmV0dXJuIHdyaXRleHRhZygoc3wwKT09cz8ndnQ6aTQnOid2dDpyOCcsIFN0cmluZyhzKSk7XG5cdFx0Y2FzZSAnYm9vbGVhbic6IHJldHVybiB3cml0ZXh0YWcoJ3Z0OmJvb2wnLHM/J3RydWUnOidmYWxzZScpO1xuXHR9XG5cdGlmKHMgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gd3JpdGV4dGFnKCd2dDpmaWxldGltZScsIHdyaXRlX3czY2R0ZihzKSk7XG5cdHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBzZXJpYWxpemUgXCIgKyBzKTtcbn1cblxudmFyIFhNTE5TID0gKHtcblx0J2RjJzogJ2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJyxcblx0J2RjdGVybXMnOiAnaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLycsXG5cdCdkY21pdHlwZSc6ICdodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvJyxcblx0J214JzogJ2h0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL21hYy9leGNlbC8yMDA4L21haW4nLFxuXHQncic6ICdodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzJyxcblx0J3Nqcyc6ICdodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzJyxcblx0J3Z0JzogJ2h0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzJyxcblx0J3hzaSc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScsXG5cdCd4c2QnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnXG59KTtcblxuWE1MTlMubWFpbiA9IFtcblx0J2h0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbicsXG5cdCdodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9zcHJlYWRzaGVldG1sL21haW4nLFxuXHQnaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWluJyxcblx0J2h0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvMidcbl07XG5cbnZhciBYTE1MTlMgPSAoe1xuXHQnbyc6ICAgICd1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UnLFxuXHQneCc6ICAgICd1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCcsXG5cdCdzcyc6ICAgJ3VybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0Jyxcblx0J2R0JzogICAndXVpZDpDMkY0MTAxMC02NUIzLTExZDEtQTI5Ri0wMEFBMDBDMTQ4ODInLFxuXHQnbXYnOiAgICdodHRwOi8vbWFjVm1sU2NoZW1hVXJpJyxcblx0J3YnOiAgICAndXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwnLFxuXHQnaHRtbCc6ICdodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwJ1xufSk7XG5mdW5jdGlvbiByZWFkX2RvdWJsZV9sZShiLCBpZHgpIHtcblx0dmFyIHMgPSAxIC0gMiAqIChiW2lkeCArIDddID4+PiA3KTtcblx0dmFyIGUgPSAoKGJbaWR4ICsgN10gJiAweDdmKSA8PCA0KSArICgoYltpZHggKyA2XSA+Pj4gNCkgJiAweDBmKTtcblx0dmFyIG0gPSAoYltpZHgrNl0mMHgwZik7XG5cdGZvcih2YXIgaSA9IDU7IGkgPj0gMDsgLS1pKSBtID0gbSAqIDI1NiArIGJbaWR4ICsgaV07XG5cdGlmKGUgPT0gMHg3ZmYpIHJldHVybiBtID09IDAgPyBzICogSW5maW5pdHkgOiBOYU47XG5cdGlmKGUgPT0gMCkgZSA9IC0xMDIyO1xuXHRlbHNlIHsgZSAtPSAxMDIzOyBtICs9IE1hdGgucG93KDIsNTIpOyB9XG5cdHJldHVybiBzICogTWF0aC5wb3coMiwgZSAtIDUyKSAqIG07XG59XG5cbmZ1bmN0aW9uIHdyaXRlX2RvdWJsZV9sZShiLCB2LCBpZHgpIHtcblx0dmFyIGJzID0gKCh2IDwgMCB8fCAxL3YgPT0gLUluZmluaXR5KSA/IDEgOiAwKSA8PCA3LCBlID0gMCwgbSA9IDA7XG5cdHZhciBhdiA9IGJzID8gLXYgOiB2O1xuXHRpZighaXNGaW5pdGUoYXYpKSB7IGUgPSAweDdmZjsgbSA9IGlzTmFOKHYpID8gMHg2OTY5IDogMDsgfVxuXHRlbHNlIGlmKGF2ID09IDApIGUgPSBtID0gMDtcblx0ZWxzZSB7XG5cdFx0ZSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYXYpIC8gTWF0aC5MTjIpO1xuXHRcdG0gPSBhdiAqIE1hdGgucG93KDIsIDUyIC0gZSk7XG5cdFx0aWYoZSA8PSAtMTAyMyAmJiAoIWlzRmluaXRlKG0pIHx8IG0gPCBNYXRoLnBvdygyLDUyKSkpIHsgZSA9IC0xMDIyOyB9XG5cdFx0ZWxzZSB7IG0gLT0gTWF0aC5wb3coMiw1Mik7IGUrPTEwMjM7IH1cblx0fVxuXHRmb3IodmFyIGkgPSAwOyBpIDw9IDU7ICsraSwgbS89MjU2KSBiW2lkeCArIGldID0gbSAmIDB4ZmY7XG5cdGJbaWR4ICsgNl0gPSAoKGUgJiAweDBmKSA8PCA0KSB8IG0gJiAweGY7XG5cdGJbaWR4ICsgN10gPSAoZSA+PiA0KSB8IGJzO1xufVxuXG52YXIgX190b0J1ZmZlciA9IGZ1bmN0aW9uKGJ1ZnMpIHsgdmFyIHg9W10sdz0xMDI0MDsgZm9yKHZhciBpPTA7aTxidWZzWzBdLmxlbmd0aDsrK2kpIGZvcih2YXIgaj0wLEw9YnVmc1swXVtpXS5sZW5ndGg7ajxMO2orPXcpIHgucHVzaC5hcHBseSh4LCBidWZzWzBdW2ldLnNsaWNlKGosait3KSk7IHJldHVybiB4OyB9O1xudmFyIF9fX3RvQnVmZmVyID0gX190b0J1ZmZlcjtcbnZhciBfX3V0ZjE2bGUgPSBmdW5jdGlvbihiLHMsZSkgeyB2YXIgc3M9W107IGZvcih2YXIgaT1zOyBpPGU7IGkrPTIpIHNzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShfX3JlYWRVSW50MTZMRShiLGkpKSk7IHJldHVybiBzcy5qb2luKFwiXCIpLnJlcGxhY2UoY2hyMCwnJyk7IH07XG52YXIgX19fdXRmMTZsZSA9IF9fdXRmMTZsZTtcbnZhciBfX2hleGxpZnkgPSBmdW5jdGlvbihiLHMsbCkgeyB2YXIgc3M9W107IGZvcih2YXIgaT1zOyBpPHMrbDsgKytpKSBzcy5wdXNoKChcIjBcIiArIGJbaV0udG9TdHJpbmcoMTYpKS5zbGljZSgtMikpOyByZXR1cm4gc3Muam9pbihcIlwiKTsgfTtcbnZhciBfX19oZXhsaWZ5ID0gX19oZXhsaWZ5O1xudmFyIF9fdXRmOCA9IGZ1bmN0aW9uKGIscyxlKSB7IHZhciBzcz1bXTsgZm9yKHZhciBpPXM7IGk8ZTsgaSsrKSBzcy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoX19yZWFkVUludDgoYixpKSkpOyByZXR1cm4gc3Muam9pbihcIlwiKTsgfTtcbnZhciBfX2xwc3RyID0gZnVuY3Rpb24oYixpKSB7IHZhciBsZW4gPSBfX3JlYWRVSW50MzJMRShiLGkpOyByZXR1cm4gbGVuID4gMCA/IF9fdXRmOChiLCBpKzQsaSs0K2xlbi0xKSA6IFwiXCI7fTtcbnZhciBfX19scHN0ciA9IF9fbHBzdHI7XG52YXIgX19jcHN0ciA9IGZ1bmN0aW9uKGIsaSkgeyB2YXIgbGVuID0gX19yZWFkVUludDMyTEUoYixpKTsgcmV0dXJuIGxlbiA+IDAgPyBfX3V0ZjgoYiwgaSs0LGkrNCtsZW4tMSkgOiBcIlwiO307XG52YXIgX19fY3BzdHIgPSBfX2Nwc3RyO1xudmFyIF9fbHB3c3RyID0gZnVuY3Rpb24oYixpKSB7IHZhciBsZW4gPSAyKl9fcmVhZFVJbnQzMkxFKGIsaSk7IHJldHVybiBsZW4gPiAwID8gX191dGY4KGIsIGkrNCxpKzQrbGVuLTEpIDogXCJcIjt9O1xudmFyIF9fX2xwd3N0ciA9IF9fbHB3c3RyO1xudmFyIF9fbHBwNCwgX19fbHBwNDtcbl9fbHBwNCA9IF9fX2xwcDQgPSBmdW5jdGlvbiBscHA0XyhiLGkpIHsgdmFyIGxlbiA9IF9fcmVhZFVJbnQzMkxFKGIsaSk7IHJldHVybiBsZW4gPiAwID8gX191dGYxNmxlKGIsIGkrNCxpKzQrbGVuKSA6IFwiXCI7fTtcbnZhciBfXzhscHA0ID0gZnVuY3Rpb24oYixpKSB7IHZhciBsZW4gPSBfX3JlYWRVSW50MzJMRShiLGkpOyByZXR1cm4gbGVuID4gMCA/IF9fdXRmOChiLCBpKzQsaSs0K2xlbikgOiBcIlwiO307XG52YXIgX19fOGxwcDQgPSBfXzhscHA0O1xudmFyIF9fZG91YmxlLCBfX19kb3VibGU7XG5fX2RvdWJsZSA9IF9fX2RvdWJsZSA9IGZ1bmN0aW9uKGIsIGlkeCkgeyByZXR1cm4gcmVhZF9kb3VibGVfbGUoYiwgaWR4KTt9O1xudmFyIGlzX2J1ZiA9IGZ1bmN0aW9uIGlzX2J1Zl9hKGEpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSk7IH07XG5cbmlmKGhhc19idWYpIHtcblx0X191dGYxNmxlID0gZnVuY3Rpb24oYixzLGUpIHsgaWYoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgcmV0dXJuIF9fX3V0ZjE2bGUoYixzLGUpOyByZXR1cm4gYi50b1N0cmluZygndXRmMTZsZScscyxlKS5yZXBsYWNlKGNocjAsJycpLyoucmVwbGFjZShjaHIxLCchJykqLzsgfTtcblx0X19oZXhsaWZ5ID0gZnVuY3Rpb24oYixzLGwpIHsgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihiKSA/IGIudG9TdHJpbmcoJ2hleCcscyxzK2wpIDogX19faGV4bGlmeShiLHMsbCk7IH07XG5cdF9fbHBzdHIgPSBmdW5jdGlvbiBscHN0cl9iKGIsIGkpIHsgaWYoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgcmV0dXJuIF9fX2xwc3RyKGIsIGkpOyB2YXIgbGVuID0gYi5yZWFkVUludDMyTEUoaSk7IHJldHVybiBsZW4gPiAwID8gYi50b1N0cmluZygndXRmOCcsaSs0LGkrNCtsZW4tMSkgOiBcIlwiO307XG5cdF9fY3BzdHIgPSBmdW5jdGlvbiBjcHN0cl9iKGIsIGkpIHsgaWYoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgcmV0dXJuIF9fX2Nwc3RyKGIsIGkpOyB2YXIgbGVuID0gYi5yZWFkVUludDMyTEUoaSk7IHJldHVybiBsZW4gPiAwID8gYi50b1N0cmluZygndXRmOCcsaSs0LGkrNCtsZW4tMSkgOiBcIlwiO307XG5cdF9fbHB3c3RyID0gZnVuY3Rpb24gbHB3c3RyX2IoYiwgaSkgeyBpZighQnVmZmVyLmlzQnVmZmVyKGIpKSByZXR1cm4gX19fbHB3c3RyKGIsIGkpOyB2YXIgbGVuID0gMipiLnJlYWRVSW50MzJMRShpKTsgcmV0dXJuIGIudG9TdHJpbmcoJ3V0ZjE2bGUnLGkrNCxpKzQrbGVuLTEpO307XG5cdF9fbHBwNCA9IGZ1bmN0aW9uIGxwcDRfYihiLCBpKSB7IGlmKCFCdWZmZXIuaXNCdWZmZXIoYikpIHJldHVybiBfX19scHA0KGIsIGkpOyB2YXIgbGVuID0gYi5yZWFkVUludDMyTEUoaSk7IHJldHVybiBiLnRvU3RyaW5nKCd1dGYxNmxlJyxpKzQsaSs0K2xlbik7fTtcblx0X184bHBwNCA9IGZ1bmN0aW9uIGxwcDRfOGIoYiwgaSkgeyBpZighQnVmZmVyLmlzQnVmZmVyKGIpKSByZXR1cm4gX19fOGxwcDQoYiwgaSk7IHZhciBsZW4gPSBiLnJlYWRVSW50MzJMRShpKTsgcmV0dXJuIGIudG9TdHJpbmcoJ3V0ZjgnLGkrNCxpKzQrbGVuKTt9O1xuXHRfX3V0ZjggPSBmdW5jdGlvbiB1dGY4X2IoYiwgcywgZSkgeyByZXR1cm4gKEJ1ZmZlci5pc0J1ZmZlcihiKSkgPyBiLnRvU3RyaW5nKCd1dGY4JyxzLGUpIDogX191dGY4KGIscyxlKTsgfTtcblx0X190b0J1ZmZlciA9IGZ1bmN0aW9uKGJ1ZnMpIHsgcmV0dXJuIChidWZzWzBdLmxlbmd0aCA+IDAgJiYgQnVmZmVyLmlzQnVmZmVyKGJ1ZnNbMF1bMF0pKSA/IEJ1ZmZlci5jb25jYXQoYnVmc1swXSkgOiBfX190b0J1ZmZlcihidWZzKTt9O1xuXHRiY29uY2F0ID0gZnVuY3Rpb24oYnVmcykgeyByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGJ1ZnNbMF0pID8gQnVmZmVyLmNvbmNhdChidWZzKSA6IFtdLmNvbmNhdC5hcHBseShbXSwgYnVmcyk7IH07XG5cdF9fZG91YmxlID0gZnVuY3Rpb24gZG91YmxlXyhiLCBpKSB7IGlmKEJ1ZmZlci5pc0J1ZmZlcihiKSkgcmV0dXJuIGIucmVhZERvdWJsZUxFKGkpOyByZXR1cm4gX19fZG91YmxlKGIsaSk7IH07XG5cdGlzX2J1ZiA9IGZ1bmN0aW9uIGlzX2J1Zl9iKGEpIHsgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihhKSB8fCBBcnJheS5pc0FycmF5KGEpOyB9O1xufVxuXG4vKiBmcm9tIGpzLXhscyAqL1xuaWYodHlwZW9mIGNwdGFibGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdF9fdXRmMTZsZSA9IGZ1bmN0aW9uKGIscyxlKSB7IHJldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLCBiLnNsaWNlKHMsZSkpLnJlcGxhY2UoY2hyMCwgJycpOyB9O1xuXHRfX3V0ZjggPSBmdW5jdGlvbihiLHMsZSkgeyByZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsIGIuc2xpY2UocyxlKSk7IH07XG5cdF9fbHBzdHIgPSBmdW5jdGlvbihiLGkpIHsgdmFyIGxlbiA9IF9fcmVhZFVJbnQzMkxFKGIsaSk7IHJldHVybiBsZW4gPiAwID8gY3B0YWJsZS51dGlscy5kZWNvZGUoY3VycmVudF9hbnNpLCBiLnNsaWNlKGkrNCwgaSs0K2xlbi0xKSkgOiBcIlwiO307XG5cdF9fY3BzdHIgPSBmdW5jdGlvbihiLGkpIHsgdmFyIGxlbiA9IF9fcmVhZFVJbnQzMkxFKGIsaSk7IHJldHVybiBsZW4gPiAwID8gY3B0YWJsZS51dGlscy5kZWNvZGUoY3VycmVudF9jb2RlcGFnZSwgYi5zbGljZShpKzQsIGkrNCtsZW4tMSkpIDogXCJcIjt9O1xuXHRfX2xwd3N0ciA9IGZ1bmN0aW9uKGIsaSkgeyB2YXIgbGVuID0gMipfX3JlYWRVSW50MzJMRShiLGkpOyByZXR1cm4gbGVuID4gMCA/IGNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsIGIuc2xpY2UoaSs0LGkrNCtsZW4tMSkpIDogXCJcIjt9O1xuXHRfX2xwcDQgPSBmdW5jdGlvbihiLGkpIHsgdmFyIGxlbiA9IF9fcmVhZFVJbnQzMkxFKGIsaSk7IHJldHVybiBsZW4gPiAwID8gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCwgYi5zbGljZShpKzQsaSs0K2xlbikpIDogXCJcIjt9O1xuXHRfXzhscHA0ID0gZnVuY3Rpb24oYixpKSB7IHZhciBsZW4gPSBfX3JlYWRVSW50MzJMRShiLGkpOyByZXR1cm4gbGVuID4gMCA/IGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLCBiLnNsaWNlKGkrNCxpKzQrbGVuKSkgOiBcIlwiO307XG59XG5cbnZhciBfX3JlYWRVSW50OCA9IGZ1bmN0aW9uKGIsIGlkeCkgeyByZXR1cm4gYltpZHhdOyB9O1xudmFyIF9fcmVhZFVJbnQxNkxFID0gZnVuY3Rpb24oYiwgaWR4KSB7IHJldHVybiBiW2lkeCsxXSooMTw8OCkrYltpZHhdOyB9O1xudmFyIF9fcmVhZEludDE2TEUgPSBmdW5jdGlvbihiLCBpZHgpIHsgdmFyIHUgPSBiW2lkeCsxXSooMTw8OCkrYltpZHhdOyByZXR1cm4gKHUgPCAweDgwMDApID8gdSA6ICgweGZmZmYgLSB1ICsgMSkgKiAtMTsgfTtcbnZhciBfX3JlYWRVSW50MzJMRSA9IGZ1bmN0aW9uKGIsIGlkeCkgeyByZXR1cm4gYltpZHgrM10qKDE8PDI0KSsoYltpZHgrMl08PDE2KSsoYltpZHgrMV08PDgpK2JbaWR4XTsgfTtcbnZhciBfX3JlYWRJbnQzMkxFID0gZnVuY3Rpb24oYiwgaWR4KSB7IHJldHVybiAoYltpZHgrM108PDI0KXwoYltpZHgrMl08PDE2KXwoYltpZHgrMV08PDgpfGJbaWR4XTsgfTtcbnZhciBfX3JlYWRJbnQzMkJFID0gZnVuY3Rpb24oYiwgaWR4KSB7IHJldHVybiAoYltpZHhdPDwyNCl8KGJbaWR4KzFdPDwxNil8KGJbaWR4KzJdPDw4KXxiW2lkeCszXTsgfTtcblxuZnVuY3Rpb24gUmVhZFNoaWZ0KHNpemUsIHQpIHtcblx0dmFyIG89XCJcIiwgb0ksIG9SLCBvbz1bXSwgdywgdnYsIGksIGxvYztcblx0c3dpdGNoKHQpIHtcblx0XHRjYXNlICdkYmNzJzpcblx0XHRcdGxvYyA9IHRoaXMubDtcblx0XHRcdGlmKGhhc19idWYgJiYgQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSBvID0gdGhpcy5zbGljZSh0aGlzLmwsIHRoaXMubCsyKnNpemUpLnRvU3RyaW5nKFwidXRmMTZsZVwiKTtcblx0XHRcdGVsc2UgZm9yKGkgPSAwOyBpICE9IHNpemU7ICsraSkgeyBvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKF9fcmVhZFVJbnQxNkxFKHRoaXMsIGxvYykpOyBsb2MrPTI7IH1cblx0XHRcdHNpemUgKj0gMjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAndXRmOCc6IG8gPSBfX3V0ZjgodGhpcywgdGhpcy5sLCB0aGlzLmwgKyBzaXplKTsgYnJlYWs7XG5cdFx0Y2FzZSAndXRmMTZsZSc6IHNpemUgKj0gMjsgbyA9IF9fdXRmMTZsZSh0aGlzLCB0aGlzLmwsIHRoaXMubCArIHNpemUpOyBicmVhaztcblxuXHRcdGNhc2UgJ3dzdHInOlxuXHRcdFx0aWYodHlwZW9mIGNwdGFibGUgIT09ICd1bmRlZmluZWQnKSBvID0gY3B0YWJsZS51dGlscy5kZWNvZGUoY3VycmVudF9jb2RlcGFnZSwgdGhpcy5zbGljZSh0aGlzLmwsIHRoaXMubCsyKnNpemUpKTtcblx0XHRcdGVsc2UgcmV0dXJuIFJlYWRTaGlmdC5jYWxsKHRoaXMsIHNpemUsICdkYmNzJyk7XG5cdFx0XHRzaXplID0gMiAqIHNpemU7IGJyZWFrO1xuXG5cdFx0LyogW01TLU9MRURTXSAyLjEuNCBMZW5ndGhQcmVmaXhlZEFuc2lTdHJpbmcgKi9cblx0XHRjYXNlICdscHN0ci1hbnNpJzogbyA9IF9fbHBzdHIodGhpcywgdGhpcy5sKTsgc2l6ZSA9IDQgKyBfX3JlYWRVSW50MzJMRSh0aGlzLCB0aGlzLmwpOyBicmVhaztcblx0XHRjYXNlICdscHN0ci1jcCc6IG8gPSBfX2Nwc3RyKHRoaXMsIHRoaXMubCk7IHNpemUgPSA0ICsgX19yZWFkVUludDMyTEUodGhpcywgdGhpcy5sKTsgYnJlYWs7XG5cdFx0LyogW01TLU9MRURTXSAyLjEuNSBMZW5ndGhQcmVmaXhlZFVuaWNvZGVTdHJpbmcgKi9cblx0XHRjYXNlICdscHdzdHInOiBvID0gX19scHdzdHIodGhpcywgdGhpcy5sKTsgc2l6ZSA9IDQgKyAyICogX19yZWFkVUludDMyTEUodGhpcywgdGhpcy5sKTsgYnJlYWs7XG5cdFx0LyogW01TLU9GRkNSWVBUT10gMi4xLjIgTGVuZ3RoLVByZWZpeGVkIFBhZGRlZCBVbmljb2RlIFN0cmluZyAoVU5JQ09ERS1MUC1QNCkgKi9cblx0XHRjYXNlICdscHA0Jzogc2l6ZSA9IDQgKyAgX19yZWFkVUludDMyTEUodGhpcywgdGhpcy5sKTsgbyA9IF9fbHBwNCh0aGlzLCB0aGlzLmwpOyBpZihzaXplICYgMHgwMikgc2l6ZSArPSAyOyBicmVhaztcblx0XHQvKiBbTVMtT0ZGQ1JZUFRPXSAyLjEuMyBMZW5ndGgtUHJlZml4ZWQgVVRGLTggU3RyaW5nIChVVEYtOC1MUC1QNCkgKi9cblx0XHRjYXNlICc4bHBwNCc6IHNpemUgPSA0ICsgIF9fcmVhZFVJbnQzMkxFKHRoaXMsIHRoaXMubCk7IG8gPSBfXzhscHA0KHRoaXMsIHRoaXMubCk7IGlmKHNpemUgJiAweDAzKSBzaXplICs9IDQgLSAoc2l6ZSAmIDB4MDMpOyBicmVhaztcblxuXHRcdGNhc2UgJ2NzdHInOiBzaXplID0gMDsgbyA9IFwiXCI7XG5cdFx0XHR3aGlsZSgodz1fX3JlYWRVSW50OCh0aGlzLCB0aGlzLmwgKyBzaXplKyspKSE9PTApIG9vLnB1c2goX2dldGNoYXIodykpO1xuXHRcdFx0byA9IG9vLmpvaW4oXCJcIik7IGJyZWFrO1xuXHRcdGNhc2UgJ193c3RyJzogc2l6ZSA9IDA7IG8gPSBcIlwiO1xuXHRcdFx0d2hpbGUoKHc9X19yZWFkVUludDE2TEUodGhpcyx0aGlzLmwgK3NpemUpKSE9PTApe29vLnB1c2goX2dldGNoYXIodykpO3NpemUrPTI7fVxuXHRcdFx0c2l6ZSs9MjsgbyA9IG9vLmpvaW4oXCJcIik7IGJyZWFrO1xuXG5cdFx0Lyogc2JjcyBhbmQgZGJjcyBzdXBwb3J0IGNvbnRpbnVlIHJlY29yZHMgaW4gdGhlIFNTVCB3YXkgVE9ETyBjb2RlcGFnZXMgKi9cblx0XHRjYXNlICdkYmNzLWNvbnQnOiBvID0gXCJcIjsgbG9jID0gdGhpcy5sO1xuXHRcdFx0Zm9yKGkgPSAwOyBpICE9IHNpemU7ICsraSkge1xuXHRcdFx0XHRpZih0aGlzLmxlbnMgJiYgdGhpcy5sZW5zLmluZGV4T2YobG9jKSAhPT0gLTEpIHtcblx0XHRcdFx0XHR3ID0gX19yZWFkVUludDgodGhpcywgbG9jKTtcblx0XHRcdFx0XHR0aGlzLmwgPSBsb2MgKyAxO1xuXHRcdFx0XHRcdHZ2ID0gUmVhZFNoaWZ0LmNhbGwodGhpcywgc2l6ZS1pLCB3ID8gJ2RiY3MtY29udCcgOiAnc2Jjcy1jb250Jyk7XG5cdFx0XHRcdFx0cmV0dXJuIG9vLmpvaW4oXCJcIikgKyB2djtcblx0XHRcdFx0fVxuXHRcdFx0XHRvby5wdXNoKF9nZXRjaGFyKF9fcmVhZFVJbnQxNkxFKHRoaXMsIGxvYykpKTtcblx0XHRcdFx0bG9jKz0yO1xuXHRcdFx0fSBvID0gb28uam9pbihcIlwiKTsgc2l6ZSAqPSAyOyBicmVhaztcblxuXHRcdGNhc2UgJ2Nwc3RyJzpcblx0XHRcdGlmKHR5cGVvZiBjcHRhYmxlICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRvID0gY3B0YWJsZS51dGlscy5kZWNvZGUoY3VycmVudF9jb2RlcGFnZSwgdGhpcy5zbGljZSh0aGlzLmwsIHRoaXMubCArIHNpemUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdGNhc2UgJ3NiY3MtY29udCc6IG8gPSBcIlwiOyBsb2MgPSB0aGlzLmw7XG5cdFx0XHRmb3IoaSA9IDA7IGkgIT0gc2l6ZTsgKytpKSB7XG5cdFx0XHRcdGlmKHRoaXMubGVucyAmJiB0aGlzLmxlbnMuaW5kZXhPZihsb2MpICE9PSAtMSkge1xuXHRcdFx0XHRcdHcgPSBfX3JlYWRVSW50OCh0aGlzLCBsb2MpO1xuXHRcdFx0XHRcdHRoaXMubCA9IGxvYyArIDE7XG5cdFx0XHRcdFx0dnYgPSBSZWFkU2hpZnQuY2FsbCh0aGlzLCBzaXplLWksIHcgPyAnZGJjcy1jb250JyA6ICdzYmNzLWNvbnQnKTtcblx0XHRcdFx0XHRyZXR1cm4gb28uam9pbihcIlwiKSArIHZ2O1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9vLnB1c2goX2dldGNoYXIoX19yZWFkVUludDgodGhpcywgbG9jKSkpO1xuXHRcdFx0XHRsb2MrPTE7XG5cdFx0XHR9IG8gPSBvby5qb2luKFwiXCIpOyBicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdHN3aXRjaChzaXplKSB7XG5cdFx0Y2FzZSAxOiBvSSA9IF9fcmVhZFVJbnQ4KHRoaXMsIHRoaXMubCk7IHRoaXMubCsrOyByZXR1cm4gb0k7XG5cdFx0Y2FzZSAyOiBvSSA9ICh0ID09PSAnaScgPyBfX3JlYWRJbnQxNkxFIDogX19yZWFkVUludDE2TEUpKHRoaXMsIHRoaXMubCk7IHRoaXMubCArPSAyOyByZXR1cm4gb0k7XG5cdFx0Y2FzZSA0OiBjYXNlIC00OlxuXHRcdFx0aWYodCA9PT0gJ2knIHx8ICh0aGlzW3RoaXMubCszXSAmIDB4ODApPT09MCkgeyBvSSA9IChzaXplID4gMCA/IF9fcmVhZEludDMyTEUgOiBfX3JlYWRJbnQzMkJFKSh0aGlzLCB0aGlzLmwpOyB0aGlzLmwgKz0gNDsgcmV0dXJuIG9JOyB9XG5cdFx0XHRlbHNlIHsgb1IgPSBfX3JlYWRVSW50MzJMRSh0aGlzLCB0aGlzLmwpOyB0aGlzLmwgKz0gNDsgfSByZXR1cm4gb1I7XG5cdFx0Y2FzZSA4OiBjYXNlIC04OlxuXHRcdFx0aWYodCA9PT0gJ2YnKSB7XG5cdFx0XHRcdGlmKHNpemUgPT0gOCkgb1IgPSBfX2RvdWJsZSh0aGlzLCB0aGlzLmwpO1xuXHRcdFx0XHRlbHNlIG9SID0gX19kb3VibGUoW3RoaXNbdGhpcy5sKzddLHRoaXNbdGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRoaXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwgMCk7XG5cdFx0XHRcdHRoaXMubCArPSA4OyByZXR1cm4gb1I7XG5cdFx0XHR9IGVsc2Ugc2l6ZSA9IDg7XG5cdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdGNhc2UgMTY6IG8gPSBfX2hleGxpZnkodGhpcywgdGhpcy5sLCBzaXplKTsgYnJlYWs7XG5cdH19XG5cdHRoaXMubCs9c2l6ZTsgcmV0dXJuIG87XG59XG5cbnZhciBfX3dyaXRlVUludDMyTEUgPSBmdW5jdGlvbihiLCB2YWwsIGlkeCkgeyBiW2lkeF0gPSAodmFsICYgMHhGRik7IGJbaWR4KzFdID0gKCh2YWwgPj4+IDgpICYgMHhGRik7IGJbaWR4KzJdID0gKCh2YWwgPj4+IDE2KSAmIDB4RkYpOyBiW2lkeCszXSA9ICgodmFsID4+PiAyNCkgJiAweEZGKTsgfTtcbnZhciBfX3dyaXRlSW50MzJMRSAgPSBmdW5jdGlvbihiLCB2YWwsIGlkeCkgeyBiW2lkeF0gPSAodmFsICYgMHhGRik7IGJbaWR4KzFdID0gKCh2YWwgPj4gOCkgJiAweEZGKTsgYltpZHgrMl0gPSAoKHZhbCA+PiAxNikgJiAweEZGKTsgYltpZHgrM10gPSAoKHZhbCA+PiAyNCkgJiAweEZGKTsgfTtcbnZhciBfX3dyaXRlVUludDE2TEUgPSBmdW5jdGlvbihiLCB2YWwsIGlkeCkgeyBiW2lkeF0gPSAodmFsICYgMHhGRik7IGJbaWR4KzFdID0gKCh2YWwgPj4+IDgpICYgMHhGRik7IH07XG5cbmZ1bmN0aW9uIFdyaXRlU2hpZnQodCwgdmFsLCBmKSB7XG5cdHZhciBzaXplID0gMCwgaSA9IDA7XG5cdGlmKGYgPT09ICdkYmNzJykge1xuZm9yKGkgPSAwOyBpICE9IHZhbC5sZW5ndGg7ICsraSkgX193cml0ZVVJbnQxNkxFKHRoaXMsIHZhbC5jaGFyQ29kZUF0KGkpLCB0aGlzLmwgKyAyICogaSk7XG5cdFx0c2l6ZSA9IDIgKiB2YWwubGVuZ3RoO1xuXHR9IGVsc2UgaWYoZiA9PT0gJ3NiY3MnKSB7XG5cdFx0LyogVE9ETzogY29kZXBhZ2UgKi9cbnZhbCA9IHZhbC5yZXBsYWNlKC9bXlxceDAwLVxceDdGXS9nLCBcIl9cIik7XG5mb3IoaSA9IDA7IGkgIT0gdmFsLmxlbmd0aDsgKytpKSB0aGlzW3RoaXMubCArIGldID0gdmFsLmNoYXJDb2RlQXQoaSkgJiAweEZGO1xuXHRcdHNpemUgPSB2YWwubGVuZ3RoO1xuXHR9IGVsc2UgaWYoZiA9PT0gJ2hleCcpIHtcblx0XHRmb3IoOyBpIDwgdDsgKytpKSB7XG50aGlzW3RoaXMubCsrXSA9IHBhcnNlSW50KHZhbC5zbGljZSgyKmksIDIqaSsyKSwgMTYpfHwwO1xuXHRcdH0gcmV0dXJuIHRoaXM7XG5cdH0gZWxzZSBpZihmID09PSAndXRmMTZsZScpIHtcbnZhciBlbmQgPSB0aGlzLmwgKyB0O1xuXHRcdFx0Zm9yKGkgPSAwOyBpIDwgTWF0aC5taW4odmFsLmxlbmd0aCwgdCk7ICsraSkge1xuXHRcdFx0XHR2YXIgY2MgPSB2YWwuY2hhckNvZGVBdChpKTtcblx0XHRcdFx0dGhpc1t0aGlzLmwrK10gPSBjYyAmIDB4ZmY7XG5cdFx0XHRcdHRoaXNbdGhpcy5sKytdID0gY2MgPj4gODtcblx0XHRcdH1cblx0XHRcdHdoaWxlKHRoaXMubCA8IGVuZCkgdGhpc1t0aGlzLmwrK10gPSAwO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdH0gZWxzZSAgc3dpdGNoKHQpIHtcblx0XHRjYXNlICAxOiBzaXplID0gMTsgdGhpc1t0aGlzLmxdID0gdmFsJjB4RkY7IGJyZWFrO1xuXHRcdGNhc2UgIDI6IHNpemUgPSAyOyB0aGlzW3RoaXMubF0gPSB2YWwmMHhGRjsgdmFsID4+Pj0gODsgdGhpc1t0aGlzLmwrMV0gPSB2YWwmMHhGRjsgYnJlYWs7XG5cdFx0Y2FzZSAgMzogc2l6ZSA9IDM7IHRoaXNbdGhpcy5sXSA9IHZhbCYweEZGOyB2YWwgPj4+PSA4OyB0aGlzW3RoaXMubCsxXSA9IHZhbCYweEZGOyB2YWwgPj4+PSA4OyB0aGlzW3RoaXMubCsyXSA9IHZhbCYweEZGOyBicmVhaztcblx0XHRjYXNlICA0OiBzaXplID0gNDsgX193cml0ZVVJbnQzMkxFKHRoaXMsIHZhbCwgdGhpcy5sKTsgYnJlYWs7XG5cdFx0Y2FzZSAgODogc2l6ZSA9IDg7IGlmKGYgPT09ICdmJykgeyB3cml0ZV9kb3VibGVfbGUodGhpcywgdmFsLCB0aGlzLmwpOyBicmVhazsgfVxuXHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRjYXNlIDE2OiBicmVhaztcblx0XHRjYXNlIC00OiBzaXplID0gNDsgX193cml0ZUludDMyTEUodGhpcywgdmFsLCB0aGlzLmwpOyBicmVhaztcblx0fVxuXHR0aGlzLmwgKz0gc2l6ZTsgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIENoZWNrRmllbGQoaGV4c3RyLCBmbGQpIHtcblx0dmFyIG0gPSBfX2hleGxpZnkodGhpcyx0aGlzLmwsaGV4c3RyLmxlbmd0aD4+MSk7XG5cdGlmKG0gIT09IGhleHN0cikgdGhyb3cgbmV3IEVycm9yKGZsZCArICdFeHBlY3RlZCAnICsgaGV4c3RyICsgJyBzYXcgJyArIG0pO1xuXHR0aGlzLmwgKz0gaGV4c3RyLmxlbmd0aD4+MTtcbn1cblxuZnVuY3Rpb24gcHJlcF9ibG9iKGJsb2IsIHBvcykge1xuXHRibG9iLmwgPSBwb3M7XG5cdGJsb2IucmVhZF9zaGlmdCA9IFJlYWRTaGlmdDtcblx0YmxvYi5jaGsgPSBDaGVja0ZpZWxkO1xuXHRibG9iLndyaXRlX3NoaWZ0ID0gV3JpdGVTaGlmdDtcbn1cblxuZnVuY3Rpb24gcGFyc2Vub29wKGJsb2IsIGxlbmd0aCkgeyBibG9iLmwgKz0gbGVuZ3RoOyB9XG5cbmZ1bmN0aW9uIG5ld19idWYoc3opIHtcblx0dmFyIG8gPSBuZXdfcmF3X2J1Zihzeik7XG5cdHByZXBfYmxvYihvLCAwKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjEuNCBSZWNvcmQgKi9cbmZ1bmN0aW9uIHJlY29yZGhvcHBlcihkYXRhLCBjYiwgb3B0cykge1xuXHRpZighZGF0YSkgcmV0dXJuO1xuXHR2YXIgdG1wYnl0ZSwgY250Ynl0ZSwgbGVuZ3RoO1xuXHRwcmVwX2Jsb2IoZGF0YSwgZGF0YS5sIHx8IDApO1xuXHR2YXIgTCA9IGRhdGEubGVuZ3RoLCBSVCA9IDAsIHRndCA9IDA7XG5cdHdoaWxlKGRhdGEubCA8IEwpIHtcblx0XHRSVCA9IGRhdGEucmVhZF9zaGlmdCgxKTtcblx0XHRpZihSVCAmIDB4ODApIFJUID0gKFJUICYgMHg3RikgKyAoKGRhdGEucmVhZF9zaGlmdCgxKSAmIDB4N0YpPDw3KTtcblx0XHR2YXIgUiA9IFhMU0JSZWNvcmRFbnVtW1JUXSB8fCBYTFNCUmVjb3JkRW51bVsweEZGRkZdO1xuXHRcdHRtcGJ5dGUgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cdFx0bGVuZ3RoID0gdG1wYnl0ZSAmIDB4N0Y7XG5cdFx0Zm9yKGNudGJ5dGUgPSAxOyBjbnRieXRlIDw0ICYmICh0bXBieXRlICYgMHg4MCk7ICsrY250Ynl0ZSkgbGVuZ3RoICs9ICgodG1wYnl0ZSA9IGRhdGEucmVhZF9zaGlmdCgxKSkgJiAweDdGKTw8KDcqY250Ynl0ZSk7XG5cdFx0dGd0ID0gZGF0YS5sICsgbGVuZ3RoO1xuXHRcdHZhciBkID0gKFIuZnx8cGFyc2Vub29wKShkYXRhLCBsZW5ndGgsIG9wdHMpO1xuXHRcdGRhdGEubCA9IHRndDtcblx0XHRpZihjYihkLCBSLm4sIFJUKSkgcmV0dXJuO1xuXHR9XG59XG5cbi8qIGNvbnRyb2wgYnVmZmVyIHVzYWdlIGZvciBmaXhlZC1sZW5ndGggYnVmZmVycyAqL1xuZnVuY3Rpb24gYnVmX2FycmF5KCkge1xuXHR2YXIgYnVmcyA9IFtdLCBibGtzeiA9IGhhc19idWYgPyAyNTYgOiAyMDQ4O1xuXHR2YXIgbmV3YmxrID0gZnVuY3Rpb24gYmFfbmV3YmxrKHN6KSB7XG5cdFx0dmFyIG8gPSAobmV3X2J1ZihzeikpO1xuXHRcdHByZXBfYmxvYihvLCAwKTtcblx0XHRyZXR1cm4gbztcblx0fTtcblxuXHR2YXIgY3VyYnVmID0gbmV3YmxrKGJsa3N6KTtcblxuXHR2YXIgZW5kYnVmID0gZnVuY3Rpb24gYmFfZW5kYnVmKCkge1xuXHRcdGlmKCFjdXJidWYpIHJldHVybjtcblx0XHRpZihjdXJidWYubGVuZ3RoID4gY3VyYnVmLmwpIGN1cmJ1ZiA9IGN1cmJ1Zi5zbGljZSgwLCBjdXJidWYubCk7XG5cdFx0aWYoY3VyYnVmLmxlbmd0aCA+IDApIGJ1ZnMucHVzaChjdXJidWYpO1xuXHRcdGN1cmJ1ZiA9IG51bGw7XG5cdH07XG5cblx0dmFyIG5leHQgPSBmdW5jdGlvbiBiYV9uZXh0KHN6KSB7XG5cdFx0aWYoY3VyYnVmICYmIHN6IDwgY3VyYnVmLmxlbmd0aCAtIGN1cmJ1Zi5sKSByZXR1cm4gY3VyYnVmO1xuXHRcdGVuZGJ1ZigpO1xuXHRcdHJldHVybiAoY3VyYnVmID0gbmV3YmxrKE1hdGgubWF4KHN6KzEsIGJsa3N6KSkpO1xuXHR9O1xuXG5cdHZhciBlbmQgPSBmdW5jdGlvbiBiYV9lbmQoKSB7XG5cdFx0ZW5kYnVmKCk7XG5cdFx0cmV0dXJuIF9fdG9CdWZmZXIoW2J1ZnNdKTtcblx0fTtcblxuXHR2YXIgcHVzaCA9IGZ1bmN0aW9uIGJhX3B1c2goYnVmKSB7IGVuZGJ1ZigpOyBjdXJidWYgPSBidWY7IG5leHQoYmxrc3opOyB9O1xuXG5cdHJldHVybiAoeyBuZXh0Om5leHQsIHB1c2g6cHVzaCwgZW5kOmVuZCwgX2J1ZnM6YnVmcyB9KTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfcmVjb3JkKGJhLCB0eXBlLCBwYXlsb2FkLCBsZW5ndGgpIHtcblx0dmFyIHQgPSArWExTQlJFW3R5cGVdLCBsO1xuXHRpZihpc05hTih0KSkgcmV0dXJuOyAvLyBUT0RPOiB0aHJvdyBzb21ldGhpbmcgaGVyZT9cblx0aWYoIWxlbmd0aCkgbGVuZ3RoID0gWExTQlJlY29yZEVudW1bdF0ucCB8fCAocGF5bG9hZHx8W10pLmxlbmd0aCB8fCAwO1xuXHRsID0gMSArICh0ID49IDB4ODAgPyAxIDogMCkgKyAxLyogKyBsZW5ndGgqLztcblx0aWYobGVuZ3RoID49IDB4ODApICsrbDsgaWYobGVuZ3RoID49IDB4NDAwMCkgKytsOyBpZihsZW5ndGggPj0gMHgyMDAwMDApICsrbDtcblx0dmFyIG8gPSBiYS5uZXh0KGwpO1xuXHRpZih0IDw9IDB4N0YpIG8ud3JpdGVfc2hpZnQoMSwgdCk7XG5cdGVsc2Uge1xuXHRcdG8ud3JpdGVfc2hpZnQoMSwgKHQgJiAweDdGKSArIDB4ODApO1xuXHRcdG8ud3JpdGVfc2hpZnQoMSwgKHQgPj4gNykpO1xuXHR9XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gNDsgKytpKSB7XG5cdFx0aWYobGVuZ3RoID49IDB4ODApIHsgby53cml0ZV9zaGlmdCgxLCAobGVuZ3RoICYgMHg3RikrMHg4MCk7IGxlbmd0aCA+Pj0gNzsgfVxuXHRcdGVsc2UgeyBvLndyaXRlX3NoaWZ0KDEsIGxlbmd0aCk7IGJyZWFrOyB9XG5cdH1cblx0aWYobGVuZ3RoID4gMCAmJiBpc19idWYocGF5bG9hZCkpIGJhLnB1c2gocGF5bG9hZCk7XG59XG4vKiBYTFMgcmFuZ2VzIGVuZm9yY2VkICovXG5mdW5jdGlvbiBzaGlmdF9jZWxsX3hscyhjZWxsLCB0Z3QsIG9wdHMpIHtcblx0dmFyIG91dCA9IGR1cChjZWxsKTtcblx0aWYodGd0LnMpIHtcblx0XHRpZihvdXQuY1JlbCkgb3V0LmMgKz0gdGd0LnMuYztcblx0XHRpZihvdXQuclJlbCkgb3V0LnIgKz0gdGd0LnMucjtcblx0fSBlbHNlIHtcblx0XHRpZihvdXQuY1JlbCkgb3V0LmMgKz0gdGd0LmM7XG5cdFx0aWYob3V0LnJSZWwpIG91dC5yICs9IHRndC5yO1xuXHR9XG5cdGlmKCFvcHRzIHx8IG9wdHMuYmlmZiA8IDEyKSB7XG5cdFx0d2hpbGUob3V0LmMgPj0gMHgxMDApIG91dC5jIC09IDB4MTAwO1xuXHRcdHdoaWxlKG91dC5yID49IDB4MTAwMDApIG91dC5yIC09IDB4MTAwMDA7XG5cdH1cblx0cmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gc2hpZnRfcmFuZ2VfeGxzKGNlbGwsIHJhbmdlLCBvcHRzKSB7XG5cdHZhciBvdXQgPSBkdXAoY2VsbCk7XG5cdG91dC5zID0gc2hpZnRfY2VsbF94bHMob3V0LnMsIHJhbmdlLnMsIG9wdHMpO1xuXHRvdXQuZSA9IHNoaWZ0X2NlbGxfeGxzKG91dC5lLCByYW5nZS5zLCBvcHRzKTtcblx0cmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlX2NlbGxfeGxzKGMpIHtcblx0dmFyIHMgPSBlbmNvZGVfY2VsbChjKTtcblx0aWYoYy5jUmVsID09PSAwKSBzID0gZml4X2NvbChzKTtcblx0aWYoYy5yUmVsID09PSAwKSBzID0gZml4X3JvdyhzKTtcblx0cmV0dXJuIHM7XG59XG5cbmZ1bmN0aW9uIGVuY29kZV9yYW5nZV94bHMociwgb3B0cykge1xuXHRpZihyLnMuciA9PSAwICYmICFyLnMuclJlbCkge1xuXHRcdGlmKHIuZS5yID09IChvcHRzLmJpZmYgPj0gMTIgPyAweEZGRkZGIDogMHhGRkZGKSAmJiAhci5lLnJSZWwpIHtcblx0XHRcdHJldHVybiAoci5zLmNSZWwgPyBcIlwiIDogXCIkXCIpICsgZW5jb2RlX2NvbChyLnMuYykgKyBcIjpcIiArIChyLmUuY1JlbCA/IFwiXCIgOiBcIiRcIikgKyBlbmNvZGVfY29sKHIuZS5jKTtcblx0XHR9XG5cdH1cblx0aWYoci5zLmMgPT0gMCAmJiAhci5zLmNSZWwpIHtcblx0XHRpZihyLmUuYyA9PSAob3B0cy5iaWZmID49IDEyID8gMHhGRkZGIDogMHhGRikgJiYgIXIuZS5jUmVsKSB7XG5cdFx0XHRyZXR1cm4gKHIucy5yUmVsID8gXCJcIiA6IFwiJFwiKSArIGVuY29kZV9yb3coci5zLnIpICsgXCI6XCIgKyAoci5lLnJSZWwgPyBcIlwiIDogXCIkXCIpICsgZW5jb2RlX3JvdyhyLmUucik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBlbmNvZGVfY2VsbF94bHMoci5zKSArIFwiOlwiICsgZW5jb2RlX2NlbGxfeGxzKHIuZSk7XG59XG52YXIgT0ZGQ1JZUFRPID0ge307XG5cbnZhciBtYWtlX29mZmNyeXB0byA9IGZ1bmN0aW9uKE8sIF9jcnlwdG8pIHtcblx0dmFyIGNyeXB0bztcblx0aWYodHlwZW9mIF9jcnlwdG8gIT09ICd1bmRlZmluZWQnKSBjcnlwdG8gPSBfY3J5cHRvO1xuXHRlbHNlIGlmKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHRyeSB7IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB9XG5cdFx0Y2F0Y2goZSkgeyBjcnlwdG8gPSBudWxsOyB9XG5cdH1cblxuXHRPLnJjNCA9IGZ1bmN0aW9uKGtleSwgZGF0YSkge1xuXHRcdHZhciBTID0gbmV3IEFycmF5KDI1Nik7XG5cdFx0dmFyIGMgPSAwLCBpID0gMCwgaiA9IDAsIHQgPSAwO1xuXHRcdGZvcihpID0gMDsgaSAhPSAyNTY7ICsraSkgU1tpXSA9IGk7XG5cdFx0Zm9yKGkgPSAwOyBpICE9IDI1NjsgKytpKSB7XG5cdFx0XHRqID0gKGogKyBTW2ldICsgKGtleVtpJWtleS5sZW5ndGhdKS5jaGFyQ29kZUF0KDApKSYyNTU7XG5cdFx0XHR0ID0gU1tpXTsgU1tpXSA9IFNbal07IFNbal0gPSB0O1xuXHRcdH1cblx0XHQvLyAkRmxvd0lnbm9yZVxuXHRcdGkgPSBqID0gMDsgdmFyIG91dCA9IEJ1ZmZlcihkYXRhLmxlbmd0aCk7XG5cdFx0Zm9yKGMgPSAwOyBjICE9IGRhdGEubGVuZ3RoOyArK2MpIHtcblx0XHRcdGkgPSAoaSArIDEpJjI1NTtcblx0XHRcdGogPSAoaiArIFNbaV0pJTI1Njtcblx0XHRcdHQgPSBTW2ldOyBTW2ldID0gU1tqXTsgU1tqXSA9IHQ7XG5cdFx0XHRvdXRbY10gPSAoZGF0YVtjXSBeIFNbKFNbaV0rU1tqXSkmMjU1XSk7XG5cdFx0fVxuXHRcdHJldHVybiBvdXQ7XG5cdH07XG5cblx0Ty5tZDUgPSBmdW5jdGlvbihoZXgpIHtcblx0XHRpZighY3J5cHRvKSB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBjcnlwdG9cIik7XG5cdFx0cmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoaGV4KS5kaWdlc3QoJ2hleCcpO1xuXHR9O1xufTtcbi8qZ2xvYmFsIGNyeXB0bzp0cnVlICovXG5tYWtlX29mZmNyeXB0byhPRkZDUllQVE8sIHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIgPyBjcnlwdG8gOiB1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBkZWNvZGVfcm93KHJvd3N0cikgeyByZXR1cm4gcGFyc2VJbnQodW5maXhfcm93KHJvd3N0ciksMTApIC0gMTsgfVxuZnVuY3Rpb24gZW5jb2RlX3Jvdyhyb3cpIHsgcmV0dXJuIFwiXCIgKyAocm93ICsgMSk7IH1cbmZ1bmN0aW9uIGZpeF9yb3coY3N0cikgeyByZXR1cm4gY3N0ci5yZXBsYWNlKC8oW0EtWl18XikoXFxkKykkLyxcIiQxJCQkMlwiKTsgfVxuZnVuY3Rpb24gdW5maXhfcm93KGNzdHIpIHsgcmV0dXJuIGNzdHIucmVwbGFjZSgvXFwkKFxcZCspJC8sXCIkMVwiKTsgfVxuXG5mdW5jdGlvbiBkZWNvZGVfY29sKGNvbHN0cikgeyB2YXIgYyA9IHVuZml4X2NvbChjb2xzdHIpLCBkID0gMCwgaSA9IDA7IGZvcig7IGkgIT09IGMubGVuZ3RoOyArK2kpIGQgPSAyNipkICsgYy5jaGFyQ29kZUF0KGkpIC0gNjQ7IHJldHVybiBkIC0gMTsgfVxuZnVuY3Rpb24gZW5jb2RlX2NvbChjb2wpIHsgdmFyIHM9XCJcIjsgZm9yKCsrY29sOyBjb2w7IGNvbD1NYXRoLmZsb29yKChjb2wtMSkvMjYpKSBzID0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGNvbC0xKSUyNikgKyA2NSkgKyBzOyByZXR1cm4gczsgfVxuZnVuY3Rpb24gZml4X2NvbChjc3RyKSB7IHJldHVybiBjc3RyLnJlcGxhY2UoL14oW0EtWl0pLyxcIiQkJDFcIik7IH1cbmZ1bmN0aW9uIHVuZml4X2NvbChjc3RyKSB7IHJldHVybiBjc3RyLnJlcGxhY2UoL15cXCQoW0EtWl0pLyxcIiQxXCIpOyB9XG5cbmZ1bmN0aW9uIHNwbGl0X2NlbGwoY3N0cikgeyByZXR1cm4gY3N0ci5yZXBsYWNlKC8oXFwkP1tBLVpdKikoXFwkP1xcZCopLyxcIiQxLCQyXCIpLnNwbGl0KFwiLFwiKTsgfVxuZnVuY3Rpb24gZGVjb2RlX2NlbGwoY3N0cikgeyB2YXIgc3BsdCA9IHNwbGl0X2NlbGwoY3N0cik7IHJldHVybiB7IGM6ZGVjb2RlX2NvbChzcGx0WzBdKSwgcjpkZWNvZGVfcm93KHNwbHRbMV0pIH07IH1cbmZ1bmN0aW9uIGVuY29kZV9jZWxsKGNlbGwpIHsgcmV0dXJuIGVuY29kZV9jb2woY2VsbC5jKSArIGVuY29kZV9yb3coY2VsbC5yKTsgfVxuZnVuY3Rpb24gZGVjb2RlX3JhbmdlKHJhbmdlKSB7IHZhciB4ID1yYW5nZS5zcGxpdChcIjpcIikubWFwKGRlY29kZV9jZWxsKTsgcmV0dXJuIHtzOnhbMF0sZTp4W3gubGVuZ3RoLTFdfTsgfVxuZnVuY3Rpb24gZW5jb2RlX3JhbmdlKGNzLGNlKSB7XG5cdGlmKHR5cGVvZiBjZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGNlID09PSAnbnVtYmVyJykge1xucmV0dXJuIGVuY29kZV9yYW5nZShjcy5zLCBjcy5lKTtcblx0fVxuaWYodHlwZW9mIGNzICE9PSAnc3RyaW5nJykgY3MgPSBlbmNvZGVfY2VsbCgoY3MpKTtcblx0aWYodHlwZW9mIGNlICE9PSAnc3RyaW5nJykgY2UgPSBlbmNvZGVfY2VsbCgoY2UpKTtcbnJldHVybiBjcyA9PSBjZSA/IGNzIDogY3MgKyBcIjpcIiArIGNlO1xufVxuXG5mdW5jdGlvbiBzYWZlX2RlY29kZV9yYW5nZShyYW5nZSkge1xuXHR2YXIgbyA9IHtzOntjOjAscjowfSxlOntjOjAscjowfX07XG5cdHZhciBpZHggPSAwLCBpID0gMCwgY2MgPSAwO1xuXHR2YXIgbGVuID0gcmFuZ2UubGVuZ3RoO1xuXHRmb3IoaWR4ID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdFx0aWYoKGNjPXJhbmdlLmNoYXJDb2RlQXQoaSktNjQpIDwgMSB8fCBjYyA+IDI2KSBicmVhaztcblx0XHRpZHggPSAyNippZHggKyBjYztcblx0fVxuXHRvLnMuYyA9IC0taWR4O1xuXG5cdGZvcihpZHggPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0XHRpZigoY2M9cmFuZ2UuY2hhckNvZGVBdChpKS00OCkgPCAwIHx8IGNjID4gOSkgYnJlYWs7XG5cdFx0aWR4ID0gMTAqaWR4ICsgY2M7XG5cdH1cblx0by5zLnIgPSAtLWlkeDtcblxuXHRpZihpID09PSBsZW4gfHwgcmFuZ2UuY2hhckNvZGVBdCgrK2kpID09PSA1OCkgeyBvLmUuYz1vLnMuYzsgby5lLnI9by5zLnI7IHJldHVybiBvOyB9XG5cblx0Zm9yKGlkeCA9IDA7IGkgIT0gbGVuOyArK2kpIHtcblx0XHRpZigoY2M9cmFuZ2UuY2hhckNvZGVBdChpKS02NCkgPCAxIHx8IGNjID4gMjYpIGJyZWFrO1xuXHRcdGlkeCA9IDI2KmlkeCArIGNjO1xuXHR9XG5cdG8uZS5jID0gLS1pZHg7XG5cblx0Zm9yKGlkeCA9IDA7IGkgIT0gbGVuOyArK2kpIHtcblx0XHRpZigoY2M9cmFuZ2UuY2hhckNvZGVBdChpKS00OCkgPCAwIHx8IGNjID4gOSkgYnJlYWs7XG5cdFx0aWR4ID0gMTAqaWR4ICsgY2M7XG5cdH1cblx0by5lLnIgPSAtLWlkeDtcblx0cmV0dXJuIG87XG59XG5cbmZ1bmN0aW9uIHNhZmVfZm9ybWF0X2NlbGwoY2VsbCwgdikge1xuXHR2YXIgcSA9IChjZWxsLnQgPT0gJ2QnICYmIHYgaW5zdGFuY2VvZiBEYXRlKTtcblx0aWYoY2VsbC56ICE9IG51bGwpIHRyeSB7IHJldHVybiAoY2VsbC53ID0gU1NGLmZvcm1hdChjZWxsLnosIHEgPyBkYXRlbnVtKHYpIDogdikpOyB9IGNhdGNoKGUpIHsgfVxuXHR0cnkgeyByZXR1cm4gKGNlbGwudyA9IFNTRi5mb3JtYXQoKGNlbGwuWEZ8fHt9KS5udW1GbXRJZHx8KHEgPyAxNCA6IDApLCAgcSA/IGRhdGVudW0odikgOiB2KSk7IH0gY2F0Y2goZSkgeyByZXR1cm4gJycrdjsgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRfY2VsbChjZWxsLCB2LCBvKSB7XG5cdGlmKGNlbGwgPT0gbnVsbCB8fCBjZWxsLnQgPT0gbnVsbCB8fCBjZWxsLnQgPT0gJ3onKSByZXR1cm4gXCJcIjtcblx0aWYoY2VsbC53ICE9PSB1bmRlZmluZWQpIHJldHVybiBjZWxsLnc7XG5cdGlmKGNlbGwudCA9PSAnZCcgJiYgIWNlbGwueiAmJiBvICYmIG8uZGF0ZU5GKSBjZWxsLnogPSBvLmRhdGVORjtcblx0aWYodiA9PSB1bmRlZmluZWQpIHJldHVybiBzYWZlX2Zvcm1hdF9jZWxsKGNlbGwsIGNlbGwudik7XG5cdHJldHVybiBzYWZlX2Zvcm1hdF9jZWxsKGNlbGwsIHYpO1xufVxuXG5mdW5jdGlvbiBzaGVldF90b193b3JrYm9vayhzaGVldCwgb3B0cykge1xuXHR2YXIgbiA9IG9wdHMgJiYgb3B0cy5zaGVldCA/IG9wdHMuc2hlZXQgOiBcIlNoZWV0MVwiO1xuXHR2YXIgc2hlZXRzID0ge307IHNoZWV0c1tuXSA9IHNoZWV0O1xuXHRyZXR1cm4geyBTaGVldE5hbWVzOiBbbl0sIFNoZWV0czogc2hlZXRzIH07XG59XG5cbmZ1bmN0aW9uIHNoZWV0X2FkZF9hb2EoX3dzLCBkYXRhLCBvcHRzKSB7XG5cdHZhciBvID0gb3B0cyB8fCB7fTtcblx0dmFyIGRlbnNlID0gX3dzID8gQXJyYXkuaXNBcnJheShfd3MpIDogby5kZW5zZTtcblx0aWYoREVOU0UgIT0gbnVsbCAmJiBkZW5zZSA9PSBudWxsKSBkZW5zZSA9IERFTlNFO1xuXHR2YXIgd3MgPSBfd3MgfHwgKGRlbnNlID8gKFtdKSA6ICh7fSkpO1xuXHR2YXIgX1IgPSAwLCBfQyA9IDA7XG5cdGlmKHdzICYmIG8ub3JpZ2luICE9IG51bGwpIHtcblx0XHRpZih0eXBlb2Ygby5vcmlnaW4gPT0gJ251bWJlcicpIF9SID0gby5vcmlnaW47XG5cdFx0ZWxzZSB7XG5cdFx0XHR2YXIgX29yaWdpbiA9IHR5cGVvZiBvLm9yaWdpbiA9PSBcInN0cmluZ1wiID8gZGVjb2RlX2NlbGwoby5vcmlnaW4pIDogby5vcmlnaW47XG5cdFx0XHRfUiA9IF9vcmlnaW4ucjsgX0MgPSBfb3JpZ2luLmM7XG5cdFx0fVxuXHR9XG5cdHZhciByYW5nZSA9ICh7czoge2M6MTAwMDAwMDAsIHI6MTAwMDAwMDB9LCBlOiB7YzowLCByOjB9fSk7XG5cdGlmKHdzWychcmVmJ10pIHtcblx0XHR2YXIgX3JhbmdlID0gc2FmZV9kZWNvZGVfcmFuZ2Uod3NbJyFyZWYnXSk7XG5cdFx0cmFuZ2Uucy5jID0gX3JhbmdlLnMuYztcblx0XHRyYW5nZS5zLnIgPSBfcmFuZ2Uucy5yO1xuXHRcdHJhbmdlLmUuYyA9IE1hdGgubWF4KHJhbmdlLmUuYywgX3JhbmdlLmUuYyk7XG5cdFx0cmFuZ2UuZS5yID0gTWF0aC5tYXgocmFuZ2UuZS5yLCBfcmFuZ2UuZS5yKTtcblx0XHRpZihfUiA9PSAtMSkgcmFuZ2UuZS5yID0gX1IgPSBfcmFuZ2UuZS5yICsgMTtcblx0fVxuXHRmb3IodmFyIFIgPSAwOyBSICE9IGRhdGEubGVuZ3RoOyArK1IpIHtcblx0XHRmb3IodmFyIEMgPSAwOyBDICE9IGRhdGFbUl0ubGVuZ3RoOyArK0MpIHtcblx0XHRcdGlmKHR5cGVvZiBkYXRhW1JdW0NdID09PSAndW5kZWZpbmVkJykgY29udGludWU7XG5cdFx0XHR2YXIgY2VsbCA9ICh7djogZGF0YVtSXVtDXSB9KTtcblx0XHRcdGlmKEFycmF5LmlzQXJyYXkoY2VsbC52KSkgeyBjZWxsLmYgPSBkYXRhW1JdW0NdWzFdOyBjZWxsLnYgPSBjZWxsLnZbMF07IH1cblx0XHRcdHZhciBfX1IgPSBfUiArIFIsIF9fQyA9IF9DICsgQztcblx0XHRcdGlmKHJhbmdlLnMuciA+IF9fUikgcmFuZ2Uucy5yID0gX19SO1xuXHRcdFx0aWYocmFuZ2Uucy5jID4gX19DKSByYW5nZS5zLmMgPSBfX0M7XG5cdFx0XHRpZihyYW5nZS5lLnIgPCBfX1IpIHJhbmdlLmUuciA9IF9fUjtcblx0XHRcdGlmKHJhbmdlLmUuYyA8IF9fQykgcmFuZ2UuZS5jID0gX19DO1xuXHRcdFx0aWYoY2VsbC52ID09PSBudWxsKSB7IGlmKGNlbGwuZikgY2VsbC50ID0gJ24nOyBlbHNlIGlmKCFvLmNlbGxTdHVicykgY29udGludWU7IGVsc2UgY2VsbC50ID0gJ3onOyB9XG5cdFx0XHRlbHNlIGlmKHR5cGVvZiBjZWxsLnYgPT09ICdudW1iZXInKSBjZWxsLnQgPSAnbic7XG5cdFx0XHRlbHNlIGlmKHR5cGVvZiBjZWxsLnYgPT09ICdib29sZWFuJykgY2VsbC50ID0gJ2InO1xuXHRcdFx0ZWxzZSBpZihjZWxsLnYgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdGNlbGwueiA9IG8uZGF0ZU5GIHx8IFNTRi5fdGFibGVbMTRdO1xuXHRcdFx0XHRpZihvLmNlbGxEYXRlcykgeyBjZWxsLnQgPSAnZCc7IGNlbGwudyA9IFNTRi5mb3JtYXQoY2VsbC56LCBkYXRlbnVtKGNlbGwudikpOyB9XG5cdFx0XHRcdGVsc2UgeyBjZWxsLnQgPSAnbic7IGNlbGwudiA9IGRhdGVudW0oY2VsbC52KTsgY2VsbC53ID0gU1NGLmZvcm1hdChjZWxsLnosIGNlbGwudik7IH1cblx0XHRcdH1cblx0XHRcdGVsc2UgY2VsbC50ID0gJ3MnO1xuXHRcdFx0aWYoZGVuc2UpIHtcblx0XHRcdFx0aWYoIXdzW19fUl0pIHdzW19fUl0gPSBbXTtcblx0XHRcdFx0d3NbX19SXVtfX0NdID0gY2VsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBjZWxsX3JlZiA9IGVuY29kZV9jZWxsKCh7YzpfX0MscjpfX1J9KSk7XG5cdFx0XHRcdHdzW2NlbGxfcmVmXSA9IGNlbGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmKHJhbmdlLnMuYyA8IDEwMDAwMDAwKSB3c1snIXJlZiddID0gZW5jb2RlX3JhbmdlKHJhbmdlKTtcblx0cmV0dXJuIHdzO1xufVxuZnVuY3Rpb24gYW9hX3RvX3NoZWV0KGRhdGEsIG9wdHMpIHsgcmV0dXJuIHNoZWV0X2FkZF9hb2EobnVsbCwgZGF0YSwgb3B0cyk7IH1cblxuZnVuY3Rpb24gd3JpdGVfVUludDMyTEUoeCwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoNCk7XG5cdG8ud3JpdGVfc2hpZnQoNCwgeCk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtWExTQl0gMi41LjE2OCAqL1xuZnVuY3Rpb24gcGFyc2VfWExXaWRlU3RyaW5nKGRhdGEpIHtcblx0dmFyIGNjaENoYXJhY3RlcnMgPSBkYXRhLnJlYWRfc2hpZnQoNCk7XG5cdHJldHVybiBjY2hDaGFyYWN0ZXJzID09PSAwID8gXCJcIiA6IGRhdGEucmVhZF9zaGlmdChjY2hDaGFyYWN0ZXJzLCAnZGJjcycpO1xufVxuZnVuY3Rpb24gd3JpdGVfWExXaWRlU3RyaW5nKGRhdGEsIG8pIHtcblx0dmFyIF9udWxsID0gZmFsc2U7IGlmKG8gPT0gbnVsbCkgeyBfbnVsbCA9IHRydWU7IG8gPSBuZXdfYnVmKDQrMipkYXRhLmxlbmd0aCk7IH1cblx0by53cml0ZV9zaGlmdCg0LCBkYXRhLmxlbmd0aCk7XG5cdGlmKGRhdGEubGVuZ3RoID4gMCkgby53cml0ZV9zaGlmdCgwLCBkYXRhLCAnZGJjcycpO1xuXHRyZXR1cm4gX251bGwgPyBvLnNsaWNlKDAsIG8ubCkgOiBvO1xufVxuXG4vKiBbTVMtWExTQl0gMi41LjE0MyAqL1xuZnVuY3Rpb24gcGFyc2VfU3RyUnVuKGRhdGEpIHtcblx0cmV0dXJuIHsgaWNoOiBkYXRhLnJlYWRfc2hpZnQoMiksIGlmbnQ6IGRhdGEucmVhZF9zaGlmdCgyKSB9O1xufVxuZnVuY3Rpb24gd3JpdGVfU3RyUnVuKHJ1biwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoNCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgcnVuLmljaCB8fCAwKTtcblx0by53cml0ZV9zaGlmdCgyLCBydW4uaWZudCB8fCAwKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjEuNy4xMjEgKi9cbmZ1bmN0aW9uIHBhcnNlX1JpY2hTdHIoZGF0YSwgbGVuZ3RoKSB7XG5cdHZhciBzdGFydCA9IGRhdGEubDtcblx0dmFyIGZsYWdzID0gZGF0YS5yZWFkX3NoaWZ0KDEpO1xuXHR2YXIgc3RyID0gcGFyc2VfWExXaWRlU3RyaW5nKGRhdGEpO1xuXHR2YXIgcmdzU3RyUnVuID0gW107XG5cdHZhciB6ID0gKHsgdDogc3RyLCBoOiBzdHIgfSk7XG5cdGlmKChmbGFncyAmIDEpICE9PSAwKSB7IC8qIGZSaWNoU3RyICovXG5cdFx0LyogVE9ETzogZm9ybWF0dGVkIHN0cmluZyAqL1xuXHRcdHZhciBkd1NpemVTdHJSdW4gPSBkYXRhLnJlYWRfc2hpZnQoNCk7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSAhPSBkd1NpemVTdHJSdW47ICsraSkgcmdzU3RyUnVuLnB1c2gocGFyc2VfU3RyUnVuKGRhdGEpKTtcblx0XHR6LnIgPSByZ3NTdHJSdW47XG5cdH1cblx0ZWxzZSB6LnIgPSBbe2ljaDowLCBpZm50OjB9XTtcblx0Ly9pZigoZmxhZ3MgJiAyKSAhPT0gMCkgeyAvKiBmRXh0U3RyICovXG5cdC8vXHQvKiBUT0RPOiBwaG9uZXRpYyBzdHJpbmcgKi9cblx0Ly99XG5cdGRhdGEubCA9IHN0YXJ0ICsgbGVuZ3RoO1xuXHRyZXR1cm4gejtcbn1cbmZ1bmN0aW9uIHdyaXRlX1JpY2hTdHIoc3RyLCBvKSB7XG5cdC8qIFRPRE86IGZvcm1hdHRlZCBzdHJpbmcgKi9cblx0dmFyIF9udWxsID0gZmFsc2U7IGlmKG8gPT0gbnVsbCkgeyBfbnVsbCA9IHRydWU7IG8gPSBuZXdfYnVmKDE1KzQqc3RyLnQubGVuZ3RoKTsgfVxuXHRvLndyaXRlX3NoaWZ0KDEsMCk7XG5cdHdyaXRlX1hMV2lkZVN0cmluZyhzdHIudCwgbyk7XG5cdHJldHVybiBfbnVsbCA/IG8uc2xpY2UoMCwgby5sKSA6IG87XG59XG4vKiBbTVMtWExTQl0gMi40LjMyNSBCcnRDb21tZW50VGV4dCAoUmljaFN0ciB3LzEgcnVuKSAqL1xudmFyIHBhcnNlX0JydENvbW1lbnRUZXh0ID0gcGFyc2VfUmljaFN0cjtcbmZ1bmN0aW9uIHdyaXRlX0JydENvbW1lbnRUZXh0KHN0ciwgbykge1xuXHQvKiBUT0RPOiBmb3JtYXR0ZWQgc3RyaW5nICovXG5cdHZhciBfbnVsbCA9IGZhbHNlOyBpZihvID09IG51bGwpIHsgX251bGwgPSB0cnVlOyBvID0gbmV3X2J1ZigyMys0KnN0ci50Lmxlbmd0aCk7IH1cblx0by53cml0ZV9zaGlmdCgxLDEpO1xuXHR3cml0ZV9YTFdpZGVTdHJpbmcoc3RyLnQsIG8pO1xuXHRvLndyaXRlX3NoaWZ0KDQsMSk7XG5cdHdyaXRlX1N0clJ1bih7aWNoOjAsaWZudDowfSwgbyk7XG5cdHJldHVybiBfbnVsbCA/IG8uc2xpY2UoMCwgby5sKSA6IG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjUuOSAqL1xuZnVuY3Rpb24gcGFyc2VfWExTQkNlbGwoZGF0YSkge1xuXHR2YXIgY29sID0gZGF0YS5yZWFkX3NoaWZ0KDQpO1xuXHR2YXIgaVN0eWxlUmVmID0gZGF0YS5yZWFkX3NoaWZ0KDIpO1xuXHRpU3R5bGVSZWYgKz0gZGF0YS5yZWFkX3NoaWZ0KDEpIDw8MTY7XG5cdGRhdGEubCsrOyAvL3ZhciBmUGhTaG93ID0gZGF0YS5yZWFkX3NoaWZ0KDEpO1xuXHRyZXR1cm4geyBjOmNvbCwgaVN0eWxlUmVmOiBpU3R5bGVSZWYgfTtcbn1cbmZ1bmN0aW9uIHdyaXRlX1hMU0JDZWxsKGNlbGwsIG8pIHtcblx0aWYobyA9PSBudWxsKSBvID0gbmV3X2J1Zig4KTtcblx0by53cml0ZV9zaGlmdCgtNCwgY2VsbC5jKTtcblx0by53cml0ZV9zaGlmdCgzLCBjZWxsLmlTdHlsZVJlZiB8fCBjZWxsLnMpO1xuXHRvLndyaXRlX3NoaWZ0KDEsIDApOyAvKiBmUGhTaG93ICovXG5cdHJldHVybiBvO1xufVxuXG5cbi8qIFtNUy1YTFNCXSAyLjUuMjEgKi9cbnZhciBwYXJzZV9YTFNCQ29kZU5hbWUgPSBwYXJzZV9YTFdpZGVTdHJpbmc7XG52YXIgd3JpdGVfWExTQkNvZGVOYW1lID0gd3JpdGVfWExXaWRlU3RyaW5nO1xuXG4vKiBbTVMtWExTQl0gMi41LjE2NiAqL1xuZnVuY3Rpb24gcGFyc2VfWExOdWxsYWJsZVdpZGVTdHJpbmcoZGF0YSkge1xuXHR2YXIgY2NoQ2hhcmFjdGVycyA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0cmV0dXJuIGNjaENoYXJhY3RlcnMgPT09IDAgfHwgY2NoQ2hhcmFjdGVycyA9PT0gMHhGRkZGRkZGRiA/IFwiXCIgOiBkYXRhLnJlYWRfc2hpZnQoY2NoQ2hhcmFjdGVycywgJ2RiY3MnKTtcbn1cbmZ1bmN0aW9uIHdyaXRlX1hMTnVsbGFibGVXaWRlU3RyaW5nKGRhdGEsIG8pIHtcblx0dmFyIF9udWxsID0gZmFsc2U7IGlmKG8gPT0gbnVsbCkgeyBfbnVsbCA9IHRydWU7IG8gPSBuZXdfYnVmKDEyNyk7IH1cblx0by53cml0ZV9zaGlmdCg0LCBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhLmxlbmd0aCA6IDB4RkZGRkZGRkYpO1xuXHRpZihkYXRhLmxlbmd0aCA+IDApIG8ud3JpdGVfc2hpZnQoMCwgZGF0YSwgJ2RiY3MnKTtcblx0cmV0dXJuIF9udWxsID8gby5zbGljZSgwLCBvLmwpIDogbztcbn1cblxuLyogW01TLVhMU0JdIDIuNS4xNjUgKi9cbnZhciBwYXJzZV9YTE5hbWVXaWRlU3RyaW5nID0gcGFyc2VfWExXaWRlU3RyaW5nO1xuLy92YXIgd3JpdGVfWExOYW1lV2lkZVN0cmluZyA9IHdyaXRlX1hMV2lkZVN0cmluZztcblxuLyogW01TLVhMU0JdIDIuNS4xMTQgKi9cbnZhciBwYXJzZV9SZWxJRCA9IHBhcnNlX1hMTnVsbGFibGVXaWRlU3RyaW5nO1xudmFyIHdyaXRlX1JlbElEID0gd3JpdGVfWExOdWxsYWJsZVdpZGVTdHJpbmc7XG5cblxuLyogW01TLVhMU0JdIDIuNS4xMjIgKi9cbi8qIFtNUy1YTFNdIDIuNS4yMTcgKi9cbmZ1bmN0aW9uIHBhcnNlX1JrTnVtYmVyKGRhdGEpIHtcblx0dmFyIGIgPSBkYXRhLnNsaWNlKGRhdGEubCwgZGF0YS5sKzQpO1xuXHR2YXIgZlgxMDAgPSBiWzBdICYgMSwgZkludCA9IGJbMF0gJiAyO1xuXHRkYXRhLmwrPTQ7XG5cdGJbMF0gJj0gMHhGQzsgLy8gYlswXSAmPSB+Mztcblx0dmFyIFJLID0gZkludCA9PT0gMCA/IF9fZG91YmxlKFswLDAsMCwwLGJbMF0sYlsxXSxiWzJdLGJbM11dLDApIDogX19yZWFkSW50MzJMRShiLDApPj4yO1xuXHRyZXR1cm4gZlgxMDAgPyBSSy8xMDAgOiBSSztcbn1cbmZ1bmN0aW9uIHdyaXRlX1JrTnVtYmVyKGRhdGEsIG8pIHtcblx0aWYobyA9PSBudWxsKSBvID0gbmV3X2J1Zig0KTtcblx0dmFyIGZYMTAwID0gMCwgZkludCA9IDAsIGQxMDAgPSBkYXRhICogMTAwO1xuXHRpZihkYXRhID09IChkYXRhIHwgMCkgJiYgZGF0YSA+PSAtKDE8PDI5KSAmJiBkYXRhIDwgKDEgPDwgMjkpKSB7IGZJbnQgPSAxOyB9XG5cdGVsc2UgaWYoZDEwMCA9PSAoZDEwMCB8IDApICYmIGQxMDAgPj0gLSgxPDwyOSkgJiYgZDEwMCA8ICgxIDw8IDI5KSkgeyBmSW50ID0gMTsgZlgxMDAgPSAxOyB9XG5cdGlmKGZJbnQpIG8ud3JpdGVfc2hpZnQoLTQsICgoZlgxMDAgPyBkMTAwIDogZGF0YSkgPDwgMikgKyAoZlgxMDAgKyAyKSk7XG5cdGVsc2UgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgUmtOdW1iZXIgXCIgKyBkYXRhKTsgLy8gVE9ET1xufVxuXG5cbi8qIFtNUy1YTFNCXSAyLjUuMTE3IFJmWCAqL1xuZnVuY3Rpb24gcGFyc2VfUmZYKGRhdGEgKSB7XG5cdHZhciBjZWxsID0gKHtzOiB7fSwgZToge319KTtcblx0Y2VsbC5zLnIgPSBkYXRhLnJlYWRfc2hpZnQoNCk7XG5cdGNlbGwuZS5yID0gZGF0YS5yZWFkX3NoaWZ0KDQpO1xuXHRjZWxsLnMuYyA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0Y2VsbC5lLmMgPSBkYXRhLnJlYWRfc2hpZnQoNCk7XG5cdHJldHVybiBjZWxsO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9SZlgociwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoMTYpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIHIucy5yKTtcblx0by53cml0ZV9zaGlmdCg0LCByLmUucik7XG5cdG8ud3JpdGVfc2hpZnQoNCwgci5zLmMpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIHIuZS5jKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjUuMTUzIFVuY2hlY2tlZFJmWCAqL1xudmFyIHBhcnNlX1VuY2hlY2tlZFJmWCA9IHBhcnNlX1JmWDtcbnZhciB3cml0ZV9VbmNoZWNrZWRSZlggPSB3cml0ZV9SZlg7XG5cbi8qIFtNUy1YTFNCXSAyLjUuMTcxICovXG4vKiBbTVMtWExTXSAyLjUuMzQyICovXG4vKiBUT0RPOiBlcnJvciBjaGVja2luZywgTmFOIGFuZCBJbmZpbml0eSB2YWx1ZXMgYXJlIG5vdCB2YWxpZCBYbnVtICovXG5mdW5jdGlvbiBwYXJzZV9YbnVtKGRhdGEpIHsgcmV0dXJuIGRhdGEucmVhZF9zaGlmdCg4LCAnZicpOyB9XG5mdW5jdGlvbiB3cml0ZV9YbnVtKGRhdGEsIG8pIHsgcmV0dXJuIChvIHx8IG5ld19idWYoOCkpLndyaXRlX3NoaWZ0KDgsIGRhdGEsICdmJyk7IH1cblxuLyogW01TLVhMU0JdIDIuNS4xOTguMiAqL1xudmFyIEJFcnIgPSB7XG4weDAwOiBcIiNOVUxMIVwiLFxuMHgwNzogXCIjRElWLzAhXCIsXG4weDBGOiBcIiNWQUxVRSFcIixcbjB4MTc6IFwiI1JFRiFcIixcbjB4MUQ6IFwiI05BTUU/XCIsXG4weDI0OiBcIiNOVU0hXCIsXG4weDJBOiBcIiNOL0FcIixcbjB4MkI6IFwiI0dFVFRJTkdfREFUQVwiLFxuMHhGRjogXCIjV1RGP1wiXG59O1xudmFyIFJCRXJyID0gZXZlcnRfbnVtKEJFcnIpO1xuXG4vKiBbTVMtWExTQl0gMi40LjMyMSBCcnRDb2xvciAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0Q29sb3IoZGF0YSkge1xuXHR2YXIgb3V0ID0ge307XG5cdHZhciBkID0gZGF0YS5yZWFkX3NoaWZ0KDEpO1xuXG5cdC8vdmFyIGZWYWxpZFJHQiA9IGQgJiAxO1xuXHR2YXIgeENvbG9yVHlwZSA9IGQgPj4+IDE7XG5cblx0dmFyIGluZGV4ID0gZGF0YS5yZWFkX3NoaWZ0KDEpO1xuXHR2YXIgblRTID0gZGF0YS5yZWFkX3NoaWZ0KDIsICdpJyk7XG5cdHZhciBiUiA9IGRhdGEucmVhZF9zaGlmdCgxKTtcblx0dmFyIGJHID0gZGF0YS5yZWFkX3NoaWZ0KDEpO1xuXHR2YXIgYkIgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cdGRhdGEubCsrOyAvL3ZhciBiQWxwaGEgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cblx0c3dpdGNoKHhDb2xvclR5cGUpIHtcblx0XHRjYXNlIDA6IG91dC5hdXRvID0gMTsgYnJlYWs7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0b3V0LmluZGV4ID0gaW5kZXg7XG5cdFx0XHR2YXIgaWN2ID0gWExTSWN2W2luZGV4XTtcblx0XHRcdC8qIGF1dG9tYXRpYyBwc2V1ZG8gaW5kZXggODEgKi9cblx0XHRcdGlmKGljdikgb3V0LnJnYiA9IHJnYjJIZXgoaWN2KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgMjpcblx0XHRcdC8qIGlmKCFmVmFsaWRSR0IpIHRocm93IG5ldyBFcnJvcihcImludmFsaWRcIik7ICovXG5cdFx0XHRvdXQucmdiID0gcmdiMkhleChbYlIsIGJHLCBiQl0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAzOiBvdXQudGhlbWUgPSBpbmRleDsgYnJlYWs7XG5cdH1cblx0aWYoblRTICE9IDApIG91dC50aW50ID0gblRTID4gMCA/IG5UUyAvIDMyNzY3IDogblRTIC8gMzI3Njg7XG5cblx0cmV0dXJuIG91dDtcbn1cbmZ1bmN0aW9uIHdyaXRlX0JydENvbG9yKGNvbG9yLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1Zig4KTtcblx0aWYoIWNvbG9yfHxjb2xvci5hdXRvKSB7IG8ud3JpdGVfc2hpZnQoNCwgMCk7IG8ud3JpdGVfc2hpZnQoNCwgMCk7IHJldHVybiBvOyB9XG5cdGlmKGNvbG9yLmluZGV4KSB7XG5cdFx0by53cml0ZV9zaGlmdCgxLCAweDAyKTtcblx0XHRvLndyaXRlX3NoaWZ0KDEsIGNvbG9yLmluZGV4KTtcblx0fSBlbHNlIGlmKGNvbG9yLnRoZW1lKSB7XG5cdFx0by53cml0ZV9zaGlmdCgxLCAweDA2KTtcblx0XHRvLndyaXRlX3NoaWZ0KDEsIGNvbG9yLnRoZW1lKTtcblx0fSBlbHNlIHtcblx0XHRvLndyaXRlX3NoaWZ0KDEsIDB4MDUpO1xuXHRcdG8ud3JpdGVfc2hpZnQoMSwgMCk7XG5cdH1cblx0dmFyIG5UUyA9IGNvbG9yLnRpbnQgfHwgMDtcblx0aWYoblRTID4gMCkgblRTICo9IDMyNzY3O1xuXHRlbHNlIGlmKG5UUyA8IDApIG5UUyAqPSAzMjc2ODtcblx0by53cml0ZV9zaGlmdCgyLCBuVFMpO1xuXHRpZighY29sb3IucmdiKSB7XG5cdFx0by53cml0ZV9zaGlmdCgyLCAwKTtcblx0XHRvLndyaXRlX3NoaWZ0KDEsIDApO1xuXHRcdG8ud3JpdGVfc2hpZnQoMSwgMCk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHJnYiA9IChjb2xvci5yZ2IgfHwgJ0ZGRkZGRicpO1xuXHRcdG8ud3JpdGVfc2hpZnQoMSwgcGFyc2VJbnQocmdiLnNsaWNlKDAsMiksMTYpKTtcblx0XHRvLndyaXRlX3NoaWZ0KDEsIHBhcnNlSW50KHJnYi5zbGljZSgyLDQpLDE2KSk7XG5cdFx0by53cml0ZV9zaGlmdCgxLCBwYXJzZUludChyZ2Iuc2xpY2UoNCw2KSwxNikpO1xuXHRcdG8ud3JpdGVfc2hpZnQoMSwgMHhGRik7XG5cdH1cblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjUuNTIgKi9cbmZ1bmN0aW9uIHBhcnNlX0ZvbnRGbGFncyhkYXRhKSB7XG5cdHZhciBkID0gZGF0YS5yZWFkX3NoaWZ0KDEpO1xuXHRkYXRhLmwrKztcblx0dmFyIG91dCA9IHtcblx0XHQvKiBmQm9sZDogZCAmIDB4MDEgKi9cblx0XHRmSXRhbGljOiBkICYgMHgwMixcblx0XHQvKiBmVW5kZXJsaW5lOiBkICYgMHgwNCAqL1xuXHRcdGZTdHJpa2VvdXQ6IGQgJiAweDA4LFxuXHRcdGZPdXRsaW5lOiBkICYgMHgxMCxcblx0XHRmU2hhZG93OiBkICYgMHgyMCxcblx0XHRmQ29uZGVuc2U6IGQgJiAweDQwLFxuXHRcdGZFeHRlbmQ6IGQgJiAweDgwXG5cdH07XG5cdHJldHVybiBvdXQ7XG59XG5mdW5jdGlvbiB3cml0ZV9Gb250RmxhZ3MoZm9udCwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoMik7XG5cdHZhciBncmJpdCA9XG5cdFx0KGZvbnQuaXRhbGljICAgPyAweDAyIDogMCkgfFxuXHRcdChmb250LnN0cmlrZSAgID8gMHgwOCA6IDApIHxcblx0XHQoZm9udC5vdXRsaW5lICA/IDB4MTAgOiAwKSB8XG5cdFx0KGZvbnQuc2hhZG93ICAgPyAweDIwIDogMCkgfFxuXHRcdChmb250LmNvbmRlbnNlID8gMHg0MCA6IDApIHxcblx0XHQoZm9udC5leHRlbmQgICA/IDB4ODAgOiAwKTtcblx0by53cml0ZV9zaGlmdCgxLCBncmJpdCk7XG5cdG8ud3JpdGVfc2hpZnQoMSwgMCk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtT0xFRFNdIDIuMy4xIGFuZCAyLjMuMiAqL1xuZnVuY3Rpb24gcGFyc2VfQ2xpcGJvYXJkRm9ybWF0T3JTdHJpbmcobywgdykge1xuXHQvLyAkRmxvd0lnbm9yZVxuXHR2YXIgQ2xpcEZtdCA9IHsyOlwiQklUTUFQXCIsMzpcIk1FVEFGSUxFUElDVFwiLDg6XCJESUJcIiwxNDpcIkVOSE1FVEFGSUxFXCJ9O1xuXHR2YXIgbSA9IG8ucmVhZF9zaGlmdCg0KTtcblx0c3dpdGNoKG0pIHtcblx0XHRjYXNlIDB4MDAwMDAwMDA6IHJldHVybiBcIlwiO1xuXHRcdGNhc2UgMHhmZmZmZmZmZjogY2FzZSAweGZmZmZmZmZlOiByZXR1cm4gQ2xpcEZtdFtvLnJlYWRfc2hpZnQoNCldfHxcIlwiO1xuXHR9XG5cdGlmKG0gPiAweDE5MCkgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiBcIiArIG0udG9TdHJpbmcoMTYpKTtcblx0by5sIC09IDQ7XG5cdHJldHVybiBvLnJlYWRfc2hpZnQoMCwgdyA9PSAxID8gXCJscHN0clwiIDogXCJscHdzdHJcIik7XG59XG5mdW5jdGlvbiBwYXJzZV9DbGlwYm9hcmRGb3JtYXRPckFuc2lTdHJpbmcobykgeyByZXR1cm4gcGFyc2VfQ2xpcGJvYXJkRm9ybWF0T3JTdHJpbmcobywgMSk7IH1cbmZ1bmN0aW9uIHBhcnNlX0NsaXBib2FyZEZvcm1hdE9yVW5pY29kZVN0cmluZyhvKSB7IHJldHVybiBwYXJzZV9DbGlwYm9hcmRGb3JtYXRPclN0cmluZyhvLCAyKTsgfVxuXG4vKiBbTVMtT0xFUFNdIDIuMiBQcm9wZXJ0eVR5cGUgKi9cbi8vdmFyIFZUX0VNUFRZICAgID0gMHgwMDAwO1xuLy92YXIgVlRfTlVMTCAgICAgPSAweDAwMDE7XG52YXIgVlRfSTIgICAgICAgPSAweDAwMDI7XG52YXIgVlRfSTQgICAgICAgPSAweDAwMDM7XG4vL3ZhciBWVF9SNCAgICAgICA9IDB4MDAwNDtcbi8vdmFyIFZUX1I4ICAgICAgID0gMHgwMDA1O1xuLy92YXIgVlRfQ1kgICAgICAgPSAweDAwMDY7XG4vL3ZhciBWVF9EQVRFICAgICA9IDB4MDAwNztcbi8vdmFyIFZUX0JTVFIgICAgID0gMHgwMDA4O1xuLy92YXIgVlRfRVJST1IgICAgPSAweDAwMEE7XG52YXIgVlRfQk9PTCAgICAgPSAweDAwMEI7XG52YXIgVlRfVkFSSUFOVCAgPSAweDAwMEM7XG4vL3ZhciBWVF9ERUNJTUFMICA9IDB4MDAwRTtcbi8vdmFyIFZUX0kxICAgICAgID0gMHgwMDEwO1xuLy92YXIgVlRfVUkxICAgICAgPSAweDAwMTE7XG4vL3ZhciBWVF9VSTIgICAgICA9IDB4MDAxMjtcbnZhciBWVF9VSTQgICAgICA9IDB4MDAxMztcbi8vdmFyIFZUX0k4ICAgICAgID0gMHgwMDE0O1xuLy92YXIgVlRfVUk4ICAgICAgPSAweDAwMTU7XG4vL3ZhciBWVF9JTlQgICAgICA9IDB4MDAxNjtcbi8vdmFyIFZUX1VJTlQgICAgID0gMHgwMDE3O1xudmFyIFZUX0xQU1RSICAgID0gMHgwMDFFO1xuLy92YXIgVlRfTFBXU1RSICAgPSAweDAwMUY7XG52YXIgVlRfRklMRVRJTUUgPSAweDAwNDA7XG4vL3ZhciBWVF9CTE9CICAgICA9IDB4MDA0MTtcbi8vdmFyIFZUX1NUUkVBTSAgID0gMHgwMDQyO1xuLy92YXIgVlRfU1RPUkFHRSAgPSAweDAwNDM7XG4vL3ZhciBWVF9TVFJFQU1FRF9PYmplY3QgID0gMHgwMDQ0O1xuLy92YXIgVlRfU1RPUkVEX09iamVjdCAgICA9IDB4MDA0NTtcbi8vdmFyIFZUX0JMT0JfT2JqZWN0ICAgICAgPSAweDAwNDY7XG52YXIgVlRfQ0YgICAgICAgPSAweDAwNDc7XG4vL3ZhciBWVF9DTFNJRCAgICA9IDB4MDA0ODtcbi8vdmFyIFZUX1ZFUlNJT05FRF9TVFJFQU0gPSAweDAwNDk7XG52YXIgVlRfVkVDVE9SICAgPSAweDEwMDA7XG4vL3ZhciBWVF9BUlJBWSAgICA9IDB4MjAwMDtcblxudmFyIFZUX1NUUklORyAgID0gMHgwMDUwOyAvLyAyLjMuMy4xLjExIFZ0U3RyaW5nXG52YXIgVlRfVVNUUiAgICAgPSAweDAwNTE7IC8vIDIuMy4zLjEuMTIgVnRVbmFsaWduZWRTdHJpbmdcbnZhciBWVF9DVVNUT00gICA9IFtWVF9TVFJJTkcsIFZUX1VTVFJdO1xuXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjMuMi4yLjEgRG9jdW1lbnQgU3VtbWFyeSBJbmZvcm1hdGlvbiBQSUREU0kgKi9cbnZhciBEb2NTdW1tYXJ5UElERFNJID0ge1xuMHgwMTogeyBuOiAnQ29kZVBhZ2UnLCB0OiBWVF9JMiB9LFxuMHgwMjogeyBuOiAnQ2F0ZWdvcnknLCB0OiBWVF9TVFJJTkcgfSxcbjB4MDM6IHsgbjogJ1ByZXNlbnRhdGlvbkZvcm1hdCcsIHQ6IFZUX1NUUklORyB9LFxuMHgwNDogeyBuOiAnQnl0ZUNvdW50JywgdDogVlRfSTQgfSxcbjB4MDU6IHsgbjogJ0xpbmVDb3VudCcsIHQ6IFZUX0k0IH0sXG4weDA2OiB7IG46ICdQYXJhZ3JhcGhDb3VudCcsIHQ6IFZUX0k0IH0sXG4weDA3OiB7IG46ICdTbGlkZUNvdW50JywgdDogVlRfSTQgfSxcbjB4MDg6IHsgbjogJ05vdGVDb3VudCcsIHQ6IFZUX0k0IH0sXG4weDA5OiB7IG46ICdIaWRkZW5Db3VudCcsIHQ6IFZUX0k0IH0sXG4weDBhOiB7IG46ICdNdWx0aW1lZGlhQ2xpcENvdW50JywgdDogVlRfSTQgfSxcbjB4MGI6IHsgbjogJ1NjYWxlJywgdDogVlRfQk9PTCB9LFxuMHgwYzogeyBuOiAnSGVhZGluZ1BhaXInLCB0OiBWVF9WRUNUT1IgfCBWVF9WQVJJQU5UIH0sXG4weDBkOiB7IG46ICdEb2NQYXJ0cycsIHQ6IFZUX1ZFQ1RPUiB8IFZUX0xQU1RSIH0sXG4weDBlOiB7IG46ICdNYW5hZ2VyJywgdDogVlRfU1RSSU5HIH0sXG4weDBmOiB7IG46ICdDb21wYW55JywgdDogVlRfU1RSSU5HIH0sXG4weDEwOiB7IG46ICdMaW5rc0RpcnR5JywgdDogVlRfQk9PTCB9LFxuMHgxMTogeyBuOiAnQ2hhcmFjdGVyQ291bnQnLCB0OiBWVF9JNCB9LFxuMHgxMzogeyBuOiAnU2hhcmVkRG9jJywgdDogVlRfQk9PTCB9LFxuMHgxNjogeyBuOiAnSExpbmtzQ2hhbmdlZCcsIHQ6IFZUX0JPT0wgfSxcbjB4MTc6IHsgbjogJ0FwcFZlcnNpb24nLCB0OiBWVF9JNCwgcDogJ3ZlcnNpb24nIH0sXG4weDFBOiB7IG46ICdDb250ZW50VHlwZScsIHQ6IFZUX1NUUklORyB9LFxuMHgxQjogeyBuOiAnQ29udGVudFN0YXR1cycsIHQ6IFZUX1NUUklORyB9LFxuMHgxQzogeyBuOiAnTGFuZ3VhZ2UnLCB0OiBWVF9TVFJJTkcgfSxcbjB4MUQ6IHsgbjogJ1ZlcnNpb24nLCB0OiBWVF9TVFJJTkcgfSxcbjB4RkY6IHt9XG59O1xuXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjMuMi4xLjEgU3VtbWFyeSBJbmZvcm1hdGlvbiBQcm9wZXJ0eSBTZXQgUElEU0kgKi9cbnZhciBTdW1tYXJ5UElEU0kgPSB7XG4weDAxOiB7IG46ICdDb2RlUGFnZScsIHQ6IFZUX0kyIH0sXG4weDAyOiB7IG46ICdUaXRsZScsIHQ6IFZUX1NUUklORyB9LFxuMHgwMzogeyBuOiAnU3ViamVjdCcsIHQ6IFZUX1NUUklORyB9LFxuMHgwNDogeyBuOiAnQXV0aG9yJywgdDogVlRfU1RSSU5HIH0sXG4weDA1OiB7IG46ICdLZXl3b3JkcycsIHQ6IFZUX1NUUklORyB9LFxuMHgwNjogeyBuOiAnQ29tbWVudHMnLCB0OiBWVF9TVFJJTkcgfSxcbjB4MDc6IHsgbjogJ1RlbXBsYXRlJywgdDogVlRfU1RSSU5HIH0sXG4weDA4OiB7IG46ICdMYXN0QXV0aG9yJywgdDogVlRfU1RSSU5HIH0sXG4weDA5OiB7IG46ICdSZXZOdW1iZXInLCB0OiBWVF9TVFJJTkcgfSxcbjB4MEE6IHsgbjogJ0VkaXRUaW1lJywgdDogVlRfRklMRVRJTUUgfSxcbjB4MEI6IHsgbjogJ0xhc3RQcmludGVkJywgdDogVlRfRklMRVRJTUUgfSxcbjB4MEM6IHsgbjogJ0NyZWF0ZWREYXRlJywgdDogVlRfRklMRVRJTUUgfSxcbjB4MEQ6IHsgbjogJ01vZGlmaWVkRGF0ZScsIHQ6IFZUX0ZJTEVUSU1FIH0sXG4weDBFOiB7IG46ICdQYWdlQ291bnQnLCB0OiBWVF9JNCB9LFxuMHgwRjogeyBuOiAnV29yZENvdW50JywgdDogVlRfSTQgfSxcbjB4MTA6IHsgbjogJ0NoYXJDb3VudCcsIHQ6IFZUX0k0IH0sXG4weDExOiB7IG46ICdUaHVtYm5haWwnLCB0OiBWVF9DRiB9LFxuMHgxMjogeyBuOiAnQXBwbGljYXRpb25OYW1lJywgdDogVlRfU1RSSU5HIH0sXG4weDEzOiB7IG46ICdEb2N1bWVudFNlY3VyaXR5JywgdDogVlRfSTQgfSxcbjB4RkY6IHt9XG59O1xuXG4vKiBbTVMtT0xFUFNdIDIuMTggKi9cbnZhciBTcGVjaWFsUHJvcGVydGllcyA9IHtcbjB4ODAwMDAwMDA6IHsgbjogJ0xvY2FsZScsIHQ6IFZUX1VJNCB9LFxuMHg4MDAwMDAwMzogeyBuOiAnQmVoYXZpb3InLCB0OiBWVF9VSTQgfSxcbjB4NzI2MjcyNjI6IHt9XG59O1xuXG4oZnVuY3Rpb24oKSB7XG5cdGZvcih2YXIgeSBpbiBTcGVjaWFsUHJvcGVydGllcykgaWYoU3BlY2lhbFByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoeSkpXG5cdERvY1N1bW1hcnlQSUREU0lbeV0gPSBTdW1tYXJ5UElEU0lbeV0gPSBTcGVjaWFsUHJvcGVydGllc1t5XTtcbn0pKCk7XG5cbi8qIFtNUy1YTFNdIDIuNC42MyBDb3VudHJ5L1JlZ2lvbiBjb2RlcyAqL1xudmFyIENvdW50cnlFbnVtID0ge1xuMHgwMDAxOiBcIlVTXCIsIC8vIFVuaXRlZCBTdGF0ZXNcbjB4MDAwMjogXCJDQVwiLCAvLyBDYW5hZGFcbjB4MDAwMzogXCJcIiwgLy8gTGF0aW4gQW1lcmljYSAoZXhjZXB0IEJyYXppbClcbjB4MDAwNzogXCJSVVwiLCAvLyBSdXNzaWFcbjB4MDAxNDogXCJFR1wiLCAvLyBFZ3lwdFxuMHgwMDFFOiBcIkdSXCIsIC8vIEdyZWVjZVxuMHgwMDFGOiBcIk5MXCIsIC8vIE5ldGhlcmxhbmRzXG4weDAwMjA6IFwiQkVcIiwgLy8gQmVsZ2l1bVxuMHgwMDIxOiBcIkZSXCIsIC8vIEZyYW5jZVxuMHgwMDIyOiBcIkVTXCIsIC8vIFNwYWluXG4weDAwMjQ6IFwiSFVcIiwgLy8gSHVuZ2FyeVxuMHgwMDI3OiBcIklUXCIsIC8vIEl0YWx5XG4weDAwMjk6IFwiQ0hcIiwgLy8gU3dpdHplcmxhbmRcbjB4MDAyQjogXCJBVFwiLCAvLyBBdXN0cmlhXG4weDAwMkM6IFwiR0JcIiwgLy8gVW5pdGVkIEtpbmdkb21cbjB4MDAyRDogXCJES1wiLCAvLyBEZW5tYXJrXG4weDAwMkU6IFwiU0VcIiwgLy8gU3dlZGVuXG4weDAwMkY6IFwiTk9cIiwgLy8gTm9yd2F5XG4weDAwMzA6IFwiUExcIiwgLy8gUG9sYW5kXG4weDAwMzE6IFwiREVcIiwgLy8gR2VybWFueVxuMHgwMDM0OiBcIk1YXCIsIC8vIE1leGljb1xuMHgwMDM3OiBcIkJSXCIsIC8vIEJyYXppbFxuMHgwMDNkOiBcIkFVXCIsIC8vIEF1c3RyYWxpYVxuMHgwMDQwOiBcIk5aXCIsIC8vIE5ldyBaZWFsYW5kXG4weDAwNDI6IFwiVEhcIiwgLy8gVGhhaWxhbmRcbjB4MDA1MTogXCJKUFwiLCAvLyBKYXBhblxuMHgwMDUyOiBcIktSXCIsIC8vIEtvcmVhXG4weDAwNTQ6IFwiVk5cIiwgLy8gVmlldCBOYW1cbjB4MDA1NjogXCJDTlwiLCAvLyBDaGluYVxuMHgwMDVBOiBcIlRSXCIsIC8vIFR1cmtleVxuMHgwMDY5OiBcIkpTXCIsIC8vIFJhbWFzdGFuXG4weDAwRDU6IFwiRFpcIiwgLy8gQWxnZXJpYVxuMHgwMEQ4OiBcIk1BXCIsIC8vIE1vcm9jY29cbjB4MDBEQTogXCJMWVwiLCAvLyBMaWJ5YVxuMHgwMTVGOiBcIlBUXCIsIC8vIFBvcnR1Z2FsXG4weDAxNjI6IFwiSVNcIiwgLy8gSWNlbGFuZFxuMHgwMTY2OiBcIkZJXCIsIC8vIEZpbmxhbmRcbjB4MDFBNDogXCJDWlwiLCAvLyBDemVjaCBSZXB1YmxpY1xuMHgwMzc2OiBcIlRXXCIsIC8vIFRhaXdhblxuMHgwM0MxOiBcIkxCXCIsIC8vIExlYmFub25cbjB4MDNDMjogXCJKT1wiLCAvLyBKb3JkYW5cbjB4MDNDMzogXCJTWVwiLCAvLyBTeXJpYVxuMHgwM0M0OiBcIklRXCIsIC8vIElyYXFcbjB4MDNDNTogXCJLV1wiLCAvLyBLdXdhaXRcbjB4MDNDNjogXCJTQVwiLCAvLyBTYXVkaSBBcmFiaWFcbjB4MDNDQjogXCJBRVwiLCAvLyBVbml0ZWQgQXJhYiBFbWlyYXRlc1xuMHgwM0NDOiBcIklMXCIsIC8vIElzcmFlbFxuMHgwM0NFOiBcIlFBXCIsIC8vIFFhdGFyXG4weDAzRDU6IFwiSVJcIiwgLy8gSXJhblxuMHhGRkZGOiBcIlVTXCIgIC8vIFVuaXRlZCBTdGF0ZXNcbn07XG5cbi8qIFtNUy1YTFNdIDIuNS4xMjcgKi9cbnZhciBYTFNGaWxsUGF0dGVybiA9IFtcblx0bnVsbCxcblx0J3NvbGlkJyxcblx0J21lZGl1bUdyYXknLFxuXHQnZGFya0dyYXknLFxuXHQnbGlnaHRHcmF5Jyxcblx0J2RhcmtIb3Jpem9udGFsJyxcblx0J2RhcmtWZXJ0aWNhbCcsXG5cdCdkYXJrRG93bicsXG5cdCdkYXJrVXAnLFxuXHQnZGFya0dyaWQnLFxuXHQnZGFya1RyZWxsaXMnLFxuXHQnbGlnaHRIb3Jpem9udGFsJyxcblx0J2xpZ2h0VmVydGljYWwnLFxuXHQnbGlnaHREb3duJyxcblx0J2xpZ2h0VXAnLFxuXHQnbGlnaHRHcmlkJyxcblx0J2xpZ2h0VHJlbGxpcycsXG5cdCdncmF5MTI1Jyxcblx0J2dyYXkwNjI1J1xuXTtcblxuZnVuY3Rpb24gcmdiaWZ5KGFycikgeyByZXR1cm4gYXJyLm1hcChmdW5jdGlvbih4KSB7IHJldHVybiBbKHg+PjE2KSYyNTUsKHg+PjgpJjI1NSx4JjI1NV07IH0pOyB9XG5cbi8qIFtNUy1YTFNdIDIuNS4xNjEgKi9cbi8qIFtNUy1YTFNCXSAyLjUuNzUgKi9cbnZhciBYTFNJY3YgPSByZ2JpZnkoW1xuXHQvKiBDb2xvciBDb25zdGFudHMgKi9cblx0MHgwMDAwMDAsXG5cdDB4RkZGRkZGLFxuXHQweEZGMDAwMCxcblx0MHgwMEZGMDAsXG5cdDB4MDAwMEZGLFxuXHQweEZGRkYwMCxcblx0MHhGRjAwRkYsXG5cdDB4MDBGRkZGLFxuXG5cdC8qIE92ZXJyaWRhYmxlIERlZmF1bHRzICovXG5cdDB4MDAwMDAwLFxuXHQweEZGRkZGRixcblx0MHhGRjAwMDAsXG5cdDB4MDBGRjAwLFxuXHQweDAwMDBGRixcblx0MHhGRkZGMDAsXG5cdDB4RkYwMEZGLFxuXHQweDAwRkZGRixcblxuXHQweDgwMDAwMCxcblx0MHgwMDgwMDAsXG5cdDB4MDAwMDgwLFxuXHQweDgwODAwMCxcblx0MHg4MDAwODAsXG5cdDB4MDA4MDgwLFxuXHQweEMwQzBDMCxcblx0MHg4MDgwODAsXG5cdDB4OTk5OUZGLFxuXHQweDk5MzM2Nixcblx0MHhGRkZGQ0MsXG5cdDB4Q0NGRkZGLFxuXHQweDY2MDA2Nixcblx0MHhGRjgwODAsXG5cdDB4MDA2NkNDLFxuXHQweENDQ0NGRixcblxuXHQweDAwMDA4MCxcblx0MHhGRjAwRkYsXG5cdDB4RkZGRjAwLFxuXHQweDAwRkZGRixcblx0MHg4MDAwODAsXG5cdDB4ODAwMDAwLFxuXHQweDAwODA4MCxcblx0MHgwMDAwRkYsXG5cdDB4MDBDQ0ZGLFxuXHQweENDRkZGRixcblx0MHhDQ0ZGQ0MsXG5cdDB4RkZGRjk5LFxuXHQweDk5Q0NGRixcblx0MHhGRjk5Q0MsXG5cdDB4Q0M5OUZGLFxuXHQweEZGQ0M5OSxcblxuXHQweDMzNjZGRixcblx0MHgzM0NDQ0MsXG5cdDB4OTlDQzAwLFxuXHQweEZGQ0MwMCxcblx0MHhGRjk5MDAsXG5cdDB4RkY2NjAwLFxuXHQweDY2NjY5OSxcblx0MHg5Njk2OTYsXG5cdDB4MDAzMzY2LFxuXHQweDMzOTk2Nixcblx0MHgwMDMzMDAsXG5cdDB4MzMzMzAwLFxuXHQweDk5MzMwMCxcblx0MHg5OTMzNjYsXG5cdDB4MzMzMzk5LFxuXHQweDMzMzMzMyxcblxuXHQvKiBPdGhlciBlbnRyaWVzIHRvIGFwcGVhc2UgQklGRjgvMTIgKi9cblx0MHhGRkZGRkYsIC8qIDB4NDAgaWN2Rm9yZWdyb3VuZCA/PyAqL1xuXHQweDAwMDAwMCwgLyogMHg0MSBpY3ZCYWNrZ3JvdW5kID8/ICovXG5cdDB4MDAwMDAwLCAvKiAweDQyIGljdkZyYW1lID8/ICovXG5cdDB4MDAwMDAwLCAvKiAweDQzIGljdjNEID8/ICovXG5cdDB4MDAwMDAwLCAvKiAweDQ0IGljdjNEVGV4dCA/PyAqL1xuXHQweDAwMDAwMCwgLyogMHg0NSBpY3YzREhpbGl0ZSA/PyAqL1xuXHQweDAwMDAwMCwgLyogMHg0NiBpY3YzRFNoYWRvdyA/PyAqL1xuXHQweDAwMDAwMCwgLyogMHg0NyBpY3ZIaWxpdGUgPz8gKi9cblx0MHgwMDAwMDAsIC8qIDB4NDggaWN2Q3RsVGV4dCA/PyAqL1xuXHQweDAwMDAwMCwgLyogMHg0OSBpY3ZDdGxTY3JsID8/ICovXG5cdDB4MDAwMDAwLCAvKiAweDRBIGljdkN0bEludiA/PyAqL1xuXHQweDAwMDAwMCwgLyogMHg0QiBpY3ZDdGxCb2R5ID8/ICovXG5cdDB4MDAwMDAwLCAvKiAweDRDIGljdkN0bEZyYW1lID8/ICovXG5cdDB4MDAwMDAwLCAvKiAweDREIGljdkN0bEZvcmUgPz8gKi9cblx0MHgwMDAwMDAsIC8qIDB4NEUgaWN2Q3RsQmFjayA/PyAqL1xuXHQweDAwMDAwMCwgLyogMHg0RiBpY3ZDdGxOZXV0cmFsICovXG5cdDB4MDAwMDAwLCAvKiAweDUwIGljdkluZm9CayA/PyAqL1xuXHQweDAwMDAwMCAvKiAweDUxIGljdkluZm9UZXh0ID8/ICovXG5dKTtcblxuLyogUGFydHMgZW51bWVyYXRlZCBpbiBPUEMgc3BlYywgTVMtWExTQiBhbmQgTVMtWExTWCAqL1xuLyogMTIuMyBQYXJ0IFN1bW1hcnkgPFNwcmVhZHNoZWV0TUw+ICovXG4vKiAxNC4yIFBhcnQgU3VtbWFyeSA8RHJhd2luZ01MPiAqL1xuLyogW01TLVhMU1hdIDIuMSBQYXJ0IEVudW1lcmF0aW9ucyAqL1xuLyogW01TLVhMU0JdIDIuMS43IFBhcnQgRW51bWVyYXRpb24gKi9cbnZhciBjdDJ0eXBlLyp7W3N0cmluZ106c3RyaW5nfSovID0gKHtcblx0LyogV29ya2Jvb2sgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbFwiOiBcIndvcmtib29rc1wiLFxuXG5cdC8qIFdvcmtzaGVldCAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleFdzXCI6IFwiVE9ET1wiLCAvKiBCaW5hcnkgSW5kZXggKi9cblxuXHQvKiBNYWNyb3NoZWV0ICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0XCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zXCI6IFwiVE9ET1wiLCAvKiBCaW5hcnkgSW5kZXggKi9cblxuXHQvKiBGaWxlIFByb3BlcnRpZXMgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sXCI6IFwiY29yZXByb3BzXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbFwiOiBcImN1c3Rwcm9wc1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbFwiOiBcImV4dHByb3BzXCIsXG5cblx0LyogQ3VzdG9tIERhdGEgUHJvcGVydGllcyAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0aWVzK3htbFwiOiBcIlRPRE9cIixcblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jdXN0b21Qcm9wZXJ0eVwiOiBcIlRPRE9cIixcblxuXHQvKiBQaXZvdFRhYmxlICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGVcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWxcIjogXCJUT0RPXCIsXG5cblx0LyogQ2hhcnQgQ29sb3JzICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sXCI6IFwiVE9ET1wiLFxuXG5cdC8qIENoYXJ0IFN0eWxlICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydHN0eWxlK3htbFwiOiBcIlRPRE9cIixcblxuXHQvKiBDYWxjdWxhdGlvbiBDaGFpbiAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jYWxjQ2hhaW5cIjogXCJjYWxjY2hhaW5zXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY0NoYWluK3htbFwiOiBcImNhbGNjaGFpbnNcIixcblxuXHQvKiBQcmludGVyIFNldHRpbmdzICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzXCI6IFwiVE9ET1wiLFxuXG5cdC8qIEFjdGl2ZVggKi9cblx0XCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVhcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYK3htbFwiOiBcIlRPRE9cIixcblxuXHQvKiBDdXN0b20gVG9vbGJhcnMgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFyc1wiOiBcIlRPRE9cIixcblxuXHQvKiBFeHRlcm5hbCBEYXRhIENvbm5lY3Rpb25zICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbFwiOiBcIlRPRE9cIixcblxuXHQvKiBFeHRlcm5hbCBMaW5rcyAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmtcIjogXCJsaW5rc1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFsTGluayt4bWxcIjogXCJsaW5rc1wiLFxuXG5cdC8qIE1ldGFkYXRhICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGFcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRNZXRhZGF0YSt4bWxcIjogXCJUT0RPXCIsXG5cblx0LyogUGl2b3RDYWNoZSAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvblwiOiBcIlRPRE9cIixcblx0XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHNcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZURlZmluaXRpb24reG1sXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbFwiOiBcIlRPRE9cIixcblxuXHQvKiBRdWVyeSBUYWJsZSAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5VGFibGUreG1sXCI6IFwiVE9ET1wiLFxuXG5cdC8qIFNoYXJlZCBXb3JrYm9vayAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXNcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVyc1wiOiBcIlRPRE9cIixcblx0XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2dcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbFwiOiBcIlRPRE9cIixcblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWxcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbFwiOiBcIlRPRE9cIixcblxuXHQvKiBTaW5nbGUgQ2VsbCBUYWJsZSAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmdsZUNlbGxzXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sXCI6IFwiVE9ET1wiLFxuXG5cdC8qIFNsaWNlciAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWxcIjogXCJUT0RPXCIsXG5cblx0LyogU29ydCBNYXAgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud3NTb3J0TWFwXCI6IFwiVE9ET1wiLFxuXG5cdC8qIFRhYmxlICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbFwiOiBcIlRPRE9cIixcblxuXHQvKiBUaGVtZXMgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sXCI6IFwidGhlbWVzXCIsXG5cblx0LyogVGhlbWUgT3ZlcnJpZGUgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVPdmVycmlkZSt4bWxcIjogXCJUT0RPXCIsXG5cblx0LyogVGltZWxpbmUgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmUreG1sXCI6IFwiVE9ET1wiLCAvKiB2ZXJpZnkgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmVDYWNoZSt4bWxcIjogXCJUT0RPXCIsIC8qIHZlcmlmeSAqL1xuXG5cdC8qIFZCQSAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFwiOiBcInZiYVwiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZVwiOiBcInZiYVwiLFxuXG5cdC8qIFZvbGF0aWxlIERlcGVuZGVuY2llcyAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2Uudm9sYXRpbGVEZXBlbmRlbmNpZXNcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudm9sYXRpbGVEZXBlbmRlbmNpZXMreG1sXCI6IFwiVE9ET1wiLFxuXG5cdC8qIENvbnRyb2wgUHJvcGVydGllcyAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb250cm9scHJvcGVydGllcyt4bWxcIjogXCJUT0RPXCIsXG5cblx0LyogRGF0YSBNb2RlbCAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhXCI6IFwiVE9ET1wiLFxuXG5cdC8qIFN1cnZleSAqL1xuXHRcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sXCI6IFwiVE9ET1wiLFxuXG5cdC8qIERyYXdpbmcgKi9cblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZyt4bWxcIjogXCJkcmF3aW5nc1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnRzaGFwZXMreG1sXCI6IFwiVE9ET1wiLFxuXHRcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUNvbG9ycyt4bWxcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtRGF0YSt4bWxcIjogXCJUT0RPXCIsXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtTGF5b3V0K3htbFwiOiBcIlRPRE9cIixcblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1TdHlsZSt4bWxcIjogXCJUT0RPXCIsXG5cblx0LyogVk1MICovXG5cdFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmdcIjogXCJUT0RPXCIsXG5cblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbFwiOiBcInJlbHNcIixcblx0XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0XCI6IFwiVE9ET1wiLFxuXG5cdC8qIEltYWdlICovXG5cdFwiaW1hZ2UvcG5nXCI6IFwiVE9ET1wiLFxuXG5cdFwic2hlZXRcIjogXCJqc1wiXG59KTtcblxudmFyIENUX0xJU1QgPSAoZnVuY3Rpb24oKXtcblx0dmFyIG8gPSB7XG5cdFx0d29ya2Jvb2tzOiB7XG5cdFx0XHR4bHN4OiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sXCIsXG5cdFx0XHR4bHNtOiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWxcIixcblx0XHRcdHhsc2I6IFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpblwiLFxuXHRcdFx0eGxhbTogXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYWRkaW4ubWFjcm9FbmFibGVkLm1haW4reG1sXCIsXG5cdFx0XHR4bHR4OiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sXCJcblx0XHR9LFxuXHRcdHN0cnM6IHsgLyogU2hhcmVkIFN0cmluZ3MgKi9cblx0XHRcdHhsc3g6IFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkU3RyaW5ncyt4bWxcIixcblx0XHRcdHhsc2I6IFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3NcIlxuXHRcdH0sXG5cdFx0Y29tbWVudHM6IHsgLyogQ29tbWVudHMgKi9cblx0XHRcdHhsc3g6IFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sXCIsXG5cdFx0XHR4bHNiOiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb21tZW50c1wiXG5cdFx0fSxcblx0XHRzaGVldHM6IHsgLyogV29ya3NoZWV0ICovXG5cdFx0XHR4bHN4OiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWxcIixcblx0XHRcdHhsc2I6IFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndvcmtzaGVldFwiXG5cdFx0fSxcblx0XHRjaGFydHM6IHsgLyogQ2hhcnRzaGVldCAqL1xuXHRcdFx0eGxzeDogXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbFwiLFxuXHRcdFx0eGxzYjogXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldFwiXG5cdFx0fSxcblx0XHRkaWFsb2dzOiB7IC8qIERpYWxvZ3NoZWV0ICovXG5cdFx0XHR4bHN4OiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbFwiLFxuXHRcdFx0eGxzYjogXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZGlhbG9nc2hlZXRcIlxuXHRcdH0sXG5cdFx0bWFjcm9zOiB7IC8qIE1hY3Jvc2hlZXQgKEV4Y2VsIDQuMCBNYWNyb3MpICovXG5cdFx0XHR4bHN4OiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0K3htbFwiLFxuXHRcdFx0eGxzYjogXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldFwiXG5cdFx0fSxcblx0XHRzdHlsZXM6IHsgLyogU3R5bGVzICovXG5cdFx0XHR4bHN4OiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWxcIixcblx0XHRcdHhsc2I6IFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlc1wiXG5cdFx0fVxuXHR9O1xuXHRrZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oaykgeyBbXCJ4bHNtXCIsIFwieGxhbVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHsgaWYoIW9ba11bdl0pIG9ba11bdl0gPSBvW2tdLnhsc3g7IH0pOyB9KTtcblx0a2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGspeyBrZXlzKG9ba10pLmZvckVhY2goZnVuY3Rpb24odikgeyBjdDJ0eXBlW29ba11bdl1dID0gazsgfSk7IH0pO1xuXHRyZXR1cm4gbztcbn0pKCk7XG5cbnZhciB0eXBlMmN0Lyp7W3N0cmluZ106QXJyYXk8c3RyaW5nPn0qLyA9IGV2ZXJ0X2FycihjdDJ0eXBlKTtcblxuWE1MTlMuQ1QgPSAnaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzJztcblxuZnVuY3Rpb24gbmV3X2N0KCkge1xuXHRyZXR1cm4gKHtcblx0XHR3b3JrYm9va3M6W10sIHNoZWV0czpbXSwgY2hhcnRzOltdLCBkaWFsb2dzOltdLCBtYWNyb3M6W10sXG5cdFx0cmVsczpbXSwgc3RyczpbXSwgY29tbWVudHM6W10sIGxpbmtzOltdLFxuXHRcdGNvcmVwcm9wczpbXSwgZXh0cHJvcHM6W10sIGN1c3Rwcm9wczpbXSwgdGhlbWVzOltdLCBzdHlsZXM6W10sXG5cdFx0Y2FsY2NoYWluczpbXSwgdmJhOiBbXSwgZHJhd2luZ3M6IFtdLFxuXHRcdFRPRE86W10sIHhtbG5zOiBcIlwiIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jdChkYXRhKSB7XG5cdHZhciBjdCA9IG5ld19jdCgpO1xuXHRpZighZGF0YSB8fCAhZGF0YS5tYXRjaCkgcmV0dXJuIGN0O1xuXHR2YXIgY3RleHQgPSB7fTtcblx0KGRhdGEubWF0Y2godGFncmVnZXgpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih4KSB7XG5cdFx0dmFyIHkgPSBwYXJzZXhtbHRhZyh4KTtcblx0XHRzd2l0Y2goeVswXS5yZXBsYWNlKG5zcmVnZXgsXCI8XCIpKSB7XG5cdFx0XHRjYXNlICc8P3htbCc6IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPFR5cGVzJzogY3QueG1sbnMgPSB5Wyd4bWxucycgKyAoeVswXS5tYXRjaCgvPChcXHcrKTovKXx8W1wiXCIsXCJcIl0pWzFdIF07IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPERlZmF1bHQnOiBjdGV4dFt5LkV4dGVuc2lvbl0gPSB5LkNvbnRlbnRUeXBlOyBicmVhaztcblx0XHRcdGNhc2UgJzxPdmVycmlkZSc6XG5cdFx0XHRcdGlmKGN0W2N0MnR5cGVbeS5Db250ZW50VHlwZV1dICE9PSB1bmRlZmluZWQpIGN0W2N0MnR5cGVbeS5Db250ZW50VHlwZV1dLnB1c2goeS5QYXJ0TmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSk7XG5cdGlmKGN0LnhtbG5zICE9PSBYTUxOUy5DVCkgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBOYW1lc3BhY2U6IFwiICsgY3QueG1sbnMpO1xuXHRjdC5jYWxjY2hhaW4gPSBjdC5jYWxjY2hhaW5zLmxlbmd0aCA+IDAgPyBjdC5jYWxjY2hhaW5zWzBdIDogXCJcIjtcblx0Y3Quc3N0ID0gY3Quc3Rycy5sZW5ndGggPiAwID8gY3Quc3Ryc1swXSA6IFwiXCI7XG5cdGN0LnN0eWxlID0gY3Quc3R5bGVzLmxlbmd0aCA+IDAgPyBjdC5zdHlsZXNbMF0gOiBcIlwiO1xuXHRjdC5kZWZhdWx0cyA9IGN0ZXh0O1xuXHRkZWxldGUgY3QuY2FsY2NoYWlucztcblx0cmV0dXJuIGN0O1xufVxuXG52YXIgQ1RZUEVfWE1MX1JPT1QgPSB3cml0ZXh0YWcoJ1R5cGVzJywgbnVsbCwge1xuXHQneG1sbnMnOiBYTUxOUy5DVCxcblx0J3htbG5zOnhzZCc6IFhNTE5TLnhzZCxcblx0J3htbG5zOnhzaSc6IFhNTE5TLnhzaVxufSk7XG5cbnZhciBDVFlQRV9ERUZBVUxUUyA9IFtcblx0Wyd4bWwnLCAnYXBwbGljYXRpb24veG1sJ10sXG5cdFsnYmluJywgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4nXSxcblx0Wyd2bWwnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmcnXSxcblx0LyogZnJvbSB0ZXN0IGZpbGVzICovXG5cdFsnYm1wJywgJ2ltYWdlL2JtcCddLFxuXHRbJ3BuZycsICdpbWFnZS9wbmcnXSxcblx0WydnaWYnLCAnaW1hZ2UvZ2lmJ10sXG5cdFsnZW1mJywgJ2ltYWdlL3gtZW1mJ10sXG5cdFsnd21mJywgJ2ltYWdlL3gtd21mJ10sXG5cdFsnanBnJywgJ2ltYWdlL2pwZWcnXSwgWydqcGVnJywgJ2ltYWdlL2pwZWcnXSxcblx0Wyd0aWYnLCAnaW1hZ2UvdGlmZiddLCBbJ3RpZmYnLCAnaW1hZ2UvdGlmZiddLFxuXHRbJ3BkZicsICdhcHBsaWNhdGlvbi9wZGYnXSxcblx0WydyZWxzJywgdHlwZTJjdC5yZWxzWzBdXVxuXS5tYXAoZnVuY3Rpb24oeCkge1xuXHRyZXR1cm4gd3JpdGV4dGFnKCdEZWZhdWx0JywgbnVsbCwgeydFeHRlbnNpb24nOnhbMF0sICdDb250ZW50VHlwZSc6IHhbMV19KTtcbn0pO1xuXG5mdW5jdGlvbiB3cml0ZV9jdChjdCwgb3B0cykge1xuXHR2YXIgbyA9IFtdLCB2O1xuXHRvW28ubGVuZ3RoXSA9IChYTUxfSEVBREVSKTtcblx0b1tvLmxlbmd0aF0gPSAoQ1RZUEVfWE1MX1JPT1QpO1xuXHRvID0gby5jb25jYXQoQ1RZUEVfREVGQVVMVFMpO1xuXHR2YXIgZjEgPSBmdW5jdGlvbih3KSB7XG5cdFx0aWYoY3Rbd10gJiYgY3Rbd10ubGVuZ3RoID4gMCkge1xuXHRcdFx0diA9IGN0W3ddWzBdO1xuXHRcdFx0b1tvLmxlbmd0aF0gPSAod3JpdGV4dGFnKCdPdmVycmlkZScsIG51bGwsIHtcblx0XHRcdFx0J1BhcnROYW1lJzogKHZbMF0gPT0gJy8nID8gXCJcIjpcIi9cIikgKyB2LFxuXHRcdFx0XHQnQ29udGVudFR5cGUnOiBDVF9MSVNUW3ddW29wdHMuYm9va1R5cGUgfHwgJ3hsc3gnXVxuXHRcdFx0fSkpO1xuXHRcdH1cblx0fTtcblx0dmFyIGYyID0gZnVuY3Rpb24odykge1xuXHRcdChjdFt3XXx8W10pLmZvckVhY2goZnVuY3Rpb24odikge1xuXHRcdFx0b1tvLmxlbmd0aF0gPSAod3JpdGV4dGFnKCdPdmVycmlkZScsIG51bGwsIHtcblx0XHRcdFx0J1BhcnROYW1lJzogKHZbMF0gPT0gJy8nID8gXCJcIjpcIi9cIikgKyB2LFxuXHRcdFx0XHQnQ29udGVudFR5cGUnOiBDVF9MSVNUW3ddW29wdHMuYm9va1R5cGUgfHwgJ3hsc3gnXVxuXHRcdFx0fSkpO1xuXHRcdH0pO1xuXHR9O1xuXHR2YXIgZjMgPSBmdW5jdGlvbih0KSB7XG5cdFx0KGN0W3RdfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2KSB7XG5cdFx0XHRvW28ubGVuZ3RoXSA9ICh3cml0ZXh0YWcoJ092ZXJyaWRlJywgbnVsbCwge1xuXHRcdFx0XHQnUGFydE5hbWUnOiAodlswXSA9PSAnLycgPyBcIlwiOlwiL1wiKSArIHYsXG5cdFx0XHRcdCdDb250ZW50VHlwZSc6IHR5cGUyY3RbdF1bMF1cblx0XHRcdH0pKTtcblx0XHR9KTtcblx0fTtcblx0ZjEoJ3dvcmtib29rcycpO1xuXHRmMignc2hlZXRzJyk7XG5cdGYyKCdjaGFydHMnKTtcblx0ZjMoJ3RoZW1lcycpO1xuXHRbJ3N0cnMnLCAnc3R5bGVzJ10uZm9yRWFjaChmMSk7XG5cdFsnY29yZXByb3BzJywgJ2V4dHByb3BzJywgJ2N1c3Rwcm9wcyddLmZvckVhY2goZjMpO1xuXHRmMygndmJhJyk7XG5cdGYzKCdjb21tZW50cycpO1xuXHRmMygnZHJhd2luZ3MnKTtcblx0aWYoby5sZW5ndGg+Mil7IG9bby5sZW5ndGhdID0gKCc8L1R5cGVzPicpOyBvWzFdPW9bMV0ucmVwbGFjZShcIi8+XCIsXCI+XCIpOyB9XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG4vKiA5LjMgUmVsYXRpb25zaGlwcyAqL1xudmFyIFJFTFMgPSAoe1xuXHRXQjogXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50XCIsXG5cdFNIRUVUOiBcImh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnRcIixcblx0SExJTks6IFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmtcIixcblx0Vk1MOiBcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdm1sRHJhd2luZ1wiLFxuXHRWQkE6IFwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVByb2plY3RcIlxufSk7XG5cbi8qIDkuMy4zIFJlcHJlc2VudGluZyBSZWxhdGlvbnNoaXBzICovXG5mdW5jdGlvbiBnZXRfcmVsc19wYXRoKGZpbGUpIHtcblx0dmFyIG4gPSBmaWxlLmxhc3RJbmRleE9mKFwiL1wiKTtcblx0cmV0dXJuIGZpbGUuc2xpY2UoMCxuKzEpICsgJ19yZWxzLycgKyBmaWxlLnNsaWNlKG4rMSkgKyBcIi5yZWxzXCI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX3JlbHMoZGF0YSwgY3VycmVudEZpbGVQYXRoKSB7XG5cdGlmICghZGF0YSkgcmV0dXJuIGRhdGE7XG5cdGlmIChjdXJyZW50RmlsZVBhdGguY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRjdXJyZW50RmlsZVBhdGggPSAnLycrY3VycmVudEZpbGVQYXRoO1xuXHR9XG5cdHZhciByZWxzID0ge307XG5cdHZhciBoYXNoID0ge307XG5cblx0KGRhdGEubWF0Y2godGFncmVnZXgpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih4KSB7XG5cdFx0dmFyIHkgPSBwYXJzZXhtbHRhZyh4KTtcblx0XHQvKiA5LjMuMi4yIE9QQ19SZWxhdGlvbnNoaXBzICovXG5cdFx0aWYgKHlbMF0gPT09ICc8UmVsYXRpb25zaGlwJykge1xuXHRcdFx0dmFyIHJlbCA9IHt9OyByZWwuVHlwZSA9IHkuVHlwZTsgcmVsLlRhcmdldCA9IHkuVGFyZ2V0OyByZWwuSWQgPSB5LklkOyByZWwuVGFyZ2V0TW9kZSA9IHkuVGFyZ2V0TW9kZTtcblx0XHRcdHZhciBjYW5vbmljdGFyZ2V0ID0geS5UYXJnZXRNb2RlID09PSAnRXh0ZXJuYWwnID8geS5UYXJnZXQgOiByZXNvbHZlX3BhdGgoeS5UYXJnZXQsIGN1cnJlbnRGaWxlUGF0aCk7XG5cdFx0XHRyZWxzW2Nhbm9uaWN0YXJnZXRdID0gcmVsO1xuXHRcdFx0aGFzaFt5LklkXSA9IHJlbDtcblx0XHR9XG5cdH0pO1xuXHRyZWxzW1wiIWlkXCJdID0gaGFzaDtcblx0cmV0dXJuIHJlbHM7XG59XG5cblhNTE5TLlJFTFMgPSAnaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzJztcblxudmFyIFJFTFNfUk9PVCA9IHdyaXRleHRhZygnUmVsYXRpb25zaGlwcycsIG51bGwsIHtcblx0Ly8neG1sbnM6bnMwJzogWE1MTlMuUkVMUyxcblx0J3htbG5zJzogWE1MTlMuUkVMU1xufSk7XG5cbi8qIFRPRE8gKi9cbmZ1bmN0aW9uIHdyaXRlX3JlbHMocmVscykge1xuXHR2YXIgbyA9IFtYTUxfSEVBREVSLCBSRUxTX1JPT1RdO1xuXHRrZXlzKHJlbHNbJyFpZCddKS5mb3JFYWNoKGZ1bmN0aW9uKHJpZCkge1xuXHRcdG9bby5sZW5ndGhdID0gKHdyaXRleHRhZygnUmVsYXRpb25zaGlwJywgbnVsbCwgcmVsc1snIWlkJ11bcmlkXSkpO1xuXHR9KTtcblx0aWYoby5sZW5ndGg+Mil7IG9bby5sZW5ndGhdID0gKCc8L1JlbGF0aW9uc2hpcHM+Jyk7IG9bMV09b1sxXS5yZXBsYWNlKFwiLz5cIixcIj5cIik7IH1cblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gYWRkX3JlbHMocmVscywgcklkLCBmLCB0eXBlLCByZWxvYmopIHtcblx0aWYoIXJlbG9iaikgcmVsb2JqID0ge307XG5cdGlmKCFyZWxzWychaWQnXSkgcmVsc1snIWlkJ10gPSB7fTtcblx0aWYocklkIDwgMCkgZm9yKHJJZCA9IDE7IHJlbHNbJyFpZCddWydySWQnICsgcklkXTsgKytySWQpey8qIGVtcHR5ICovfVxuXHRyZWxvYmouSWQgPSAncklkJyArIHJJZDtcblx0cmVsb2JqLlR5cGUgPSB0eXBlO1xuXHRyZWxvYmouVGFyZ2V0ID0gZjtcblx0aWYocmVsb2JqLlR5cGUgPT0gUkVMUy5ITElOSykgcmVsb2JqLlRhcmdldE1vZGUgPSBcIkV4dGVybmFsXCI7XG5cdGlmKHJlbHNbJyFpZCddW3JlbG9iai5JZF0pIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZXdyaXRlIHJJZCBcIiArIHJJZCk7XG5cdHJlbHNbJyFpZCddW3JlbG9iai5JZF0gPSByZWxvYmo7XG5cdHJlbHNbKCcvJyArIHJlbG9iai5UYXJnZXQpLnJlcGxhY2UoXCIvL1wiLFwiL1wiKV0gPSByZWxvYmo7XG5cdHJldHVybiBySWQ7XG59XG4vKiBPcGVuIERvY3VtZW50IEZvcm1hdCBmb3IgT2ZmaWNlIEFwcGxpY2F0aW9ucyAoT3BlbkRvY3VtZW50KSBWZXJzaW9uIDEuMiAqL1xuLyogUGFydCAzIFNlY3Rpb24gNCBNYW5pZmVzdCBGaWxlICovXG52YXIgQ1RfT0RTID0gXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0XCI7XG5mdW5jdGlvbiBwYXJzZV9tYW5pZmVzdChkLCBvcHRzKSB7XG5cdHZhciBzdHIgPSB4bG1sX25vcm1hbGl6ZShkKTtcblx0dmFyIFJuO1xuXHR2YXIgRkV0YWc7XG5cdHdoaWxlKChSbiA9IHhsbWxyZWdleC5leGVjKHN0cikpKSBzd2l0Y2goUm5bM10pIHtcblx0XHRjYXNlICdtYW5pZmVzdCc6IGJyZWFrOyAvLyA0LjIgPG1hbmlmZXN0Om1hbmlmZXN0PlxuXHRcdGNhc2UgJ2ZpbGUtZW50cnknOiAvLyA0LjMgPG1hbmlmZXN0OmZpbGUtZW50cnk+XG5cdFx0XHRGRXRhZyA9IHBhcnNleG1sdGFnKFJuWzBdLCBmYWxzZSk7XG5cdFx0XHRpZihGRXRhZy5wYXRoID09ICcvJyAmJiBGRXRhZy50eXBlICE9PSBDVF9PRFMpIHRocm93IG5ldyBFcnJvcihcIlRoaXMgT3BlbkRvY3VtZW50IGlzIG5vdCBhIHNwcmVhZHNoZWV0XCIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnZW5jcnlwdGlvbi1kYXRhJzogLy8gNC40IDxtYW5pZmVzdDplbmNyeXB0aW9uLWRhdGE+XG5cdFx0Y2FzZSAnYWxnb3JpdGhtJzogLy8gNC41IDxtYW5pZmVzdDphbGdvcml0aG0+XG5cdFx0Y2FzZSAnc3RhcnQta2V5LWdlbmVyYXRpb24nOiAvLyA0LjYgPG1hbmlmZXN0OnN0YXJ0LWtleS1nZW5lcmF0aW9uPlxuXHRcdGNhc2UgJ2tleS1kZXJpdmF0aW9uJzogLy8gNC43IDxtYW5pZmVzdDprZXktZGVyaXZhdGlvbj5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIE9EUyBFbmNyeXB0aW9uXCIpO1xuXHRcdGRlZmF1bHQ6IGlmKG9wdHMgJiYgb3B0cy5XVEYpIHRocm93IFJuO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHdyaXRlX21hbmlmZXN0KG1hbmlmZXN0KSB7XG5cdHZhciBvID0gW1hNTF9IRUFERVJdO1xuXHRvLnB1c2goJzxtYW5pZmVzdDptYW5pZmVzdCB4bWxuczptYW5pZmVzdD1cInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWFuaWZlc3Q6MS4wXCIgbWFuaWZlc3Q6dmVyc2lvbj1cIjEuMlwiPlxcbicpO1xuXHRvLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPVwiL1wiIG1hbmlmZXN0OnZlcnNpb249XCIxLjJcIiBtYW5pZmVzdDptZWRpYS10eXBlPVwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldFwiLz5cXG4nKTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG1hbmlmZXN0Lmxlbmd0aDsgKytpKSBvLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPVwiJyArIG1hbmlmZXN0W2ldWzBdICsgJ1wiIG1hbmlmZXN0Om1lZGlhLXR5cGU9XCInICsgbWFuaWZlc3RbaV1bMV0gKyAnXCIvPlxcbicpO1xuXHRvLnB1c2goJzwvbWFuaWZlc3Q6bWFuaWZlc3Q+Jyk7XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG5cbi8qIFBhcnQgMyBTZWN0aW9uIDYgTWV0YWRhdGEgTWFuaWZlc3QgRmlsZSAqL1xuZnVuY3Rpb24gd3JpdGVfcmRmX3R5cGUoZmlsZSwgcmVzLCB0YWcpIHtcblx0cmV0dXJuIFtcblx0XHQnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD1cIicgKyBmaWxlICsgJ1wiPlxcbicsXG5cdFx0JyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPVwiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhLycgKyAodGFnIHx8IFwib2RmXCIpICsgJyMnICsgcmVzICsgJ1wiLz5cXG4nLFxuXHRcdCcgIDwvcmRmOkRlc2NyaXB0aW9uPlxcbidcblx0XS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gd3JpdGVfcmRmX2hhcyhiYXNlLCBmaWxlKSB7XG5cdHJldHVybiBbXG5cdFx0JyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9XCInICsgYmFzZSArICdcIj5cXG4nLFxuXHRcdCcgICAgPG5zMDpoYXNQYXJ0IHhtbG5zOm5zMD1cImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjXCIgcmRmOnJlc291cmNlPVwiJyArIGZpbGUgKyAnXCIvPlxcbicsXG5cdFx0JyAgPC9yZGY6RGVzY3JpcHRpb24+XFxuJ1xuXHRdLmpvaW4oXCJcIik7XG59XG5mdW5jdGlvbiB3cml0ZV9yZGYocmRmKSB7XG5cdHZhciBvID0gW1hNTF9IRUFERVJdO1xuXHRvLnB1c2goJzxyZGY6UkRGIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIj5cXG4nKTtcblx0Zm9yKHZhciBpID0gMDsgaSAhPSByZGYubGVuZ3RoOyArK2kpIHtcblx0XHRvLnB1c2god3JpdGVfcmRmX3R5cGUocmRmW2ldWzBdLCByZGZbaV1bMV0pKTtcblx0XHRvLnB1c2god3JpdGVfcmRmX2hhcyhcIlwiLHJkZltpXVswXSkpO1xuXHR9XG5cdG8ucHVzaCh3cml0ZV9yZGZfdHlwZShcIlwiLFwiRG9jdW1lbnRcIiwgXCJwa2dcIikpO1xuXHRvLnB1c2goJzwvcmRmOlJERj4nKTtcblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cbi8qIFRPRE86IHB1bGwgcHJvcGVydGllcyAqL1xudmFyIHdyaXRlX21ldGFfb2RzID0gKGZ1bmN0aW9uKCkge1xuXHR2YXIgcGF5bG9hZCA9ICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiIHN0YW5kYWxvbmU9XCJ5ZXNcIj8+PG9mZmljZTpkb2N1bWVudC1tZXRhIHhtbG5zOm9mZmljZT1cInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMFwiIHhtbG5zOm1ldGE9XCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIG9mZmljZTp2ZXJzaW9uPVwiMS4yXCI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldCcgKyAnSlMgJyArIFhMU1gudmVyc2lvbiArICc8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4nO1xuXHRyZXR1cm4gZnVuY3Rpb24gd21vKCkge1xuXHRcdHJldHVybiBwYXlsb2FkO1xuXHR9O1xufSkoKTtcblxuLyogRUNNQS0zNzYgUGFydCBJSSAxMS4xIENvcmUgUHJvcGVydGllcyBQYXJ0ICovXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjMuMi5bMS0yXS4xIChQSURTSS9QSUREU0kpICovXG52YXIgQ09SRV9QUk9QUyA9IFtcblx0W1wiY3A6Y2F0ZWdvcnlcIiwgXCJDYXRlZ29yeVwiXSxcblx0W1wiY3A6Y29udGVudFN0YXR1c1wiLCBcIkNvbnRlbnRTdGF0dXNcIl0sXG5cdFtcImNwOmtleXdvcmRzXCIsIFwiS2V5d29yZHNcIl0sXG5cdFtcImNwOmxhc3RNb2RpZmllZEJ5XCIsIFwiTGFzdEF1dGhvclwiXSxcblx0W1wiY3A6bGFzdFByaW50ZWRcIiwgXCJMYXN0UHJpbnRlZFwiXSxcblx0W1wiY3A6cmV2aXNpb25cIiwgXCJSZXZOdW1iZXJcIl0sXG5cdFtcImNwOnZlcnNpb25cIiwgXCJWZXJzaW9uXCJdLFxuXHRbXCJkYzpjcmVhdG9yXCIsIFwiQXV0aG9yXCJdLFxuXHRbXCJkYzpkZXNjcmlwdGlvblwiLCBcIkNvbW1lbnRzXCJdLFxuXHRbXCJkYzppZGVudGlmaWVyXCIsIFwiSWRlbnRpZmllclwiXSxcblx0W1wiZGM6bGFuZ3VhZ2VcIiwgXCJMYW5ndWFnZVwiXSxcblx0W1wiZGM6c3ViamVjdFwiLCBcIlN1YmplY3RcIl0sXG5cdFtcImRjOnRpdGxlXCIsIFwiVGl0bGVcIl0sXG5cdFtcImRjdGVybXM6Y3JlYXRlZFwiLCBcIkNyZWF0ZWREYXRlXCIsICdkYXRlJ10sXG5cdFtcImRjdGVybXM6bW9kaWZpZWRcIiwgXCJNb2RpZmllZERhdGVcIiwgJ2RhdGUnXVxuXTtcblxuWE1MTlMuQ09SRV9QUk9QUyA9IFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXNcIjtcblJFTFMuQ09SRV9QUk9QUyAgPSAnaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyc7XG5cbnZhciBDT1JFX1BST1BTX1JFR0VYID0gKGZ1bmN0aW9uKCkge1xuXHR2YXIgciA9IG5ldyBBcnJheShDT1JFX1BST1BTLmxlbmd0aCk7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBDT1JFX1BST1BTLmxlbmd0aDsgKytpKSB7XG5cdFx0dmFyIGYgPSBDT1JFX1BST1BTW2ldO1xuXHRcdHZhciBnID0gXCIoPzpcIisgZlswXS5zbGljZSgwLGZbMF0uaW5kZXhPZihcIjpcIikpICtcIjopXCIrIGZbMF0uc2xpY2UoZlswXS5pbmRleE9mKFwiOlwiKSsxKTtcblx0XHRyW2ldID0gbmV3IFJlZ0V4cChcIjxcIiArIGcgKyBcIltePl0qPihbXFxcXHNcXFxcU10qPyk8XFwvXCIgKyBnICsgXCI+XCIpO1xuXHR9XG5cdHJldHVybiByO1xufSkoKTtcblxuZnVuY3Rpb24gcGFyc2VfY29yZV9wcm9wcyhkYXRhKSB7XG5cdHZhciBwID0ge307XG5cdGRhdGEgPSB1dGY4cmVhZChkYXRhKTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgQ09SRV9QUk9QUy5sZW5ndGg7ICsraSkge1xuXHRcdHZhciBmID0gQ09SRV9QUk9QU1tpXSwgY3VyID0gZGF0YS5tYXRjaChDT1JFX1BST1BTX1JFR0VYW2ldKTtcblx0XHRpZihjdXIgIT0gbnVsbCAmJiBjdXIubGVuZ3RoID4gMCkgcFtmWzFdXSA9IGN1clsxXTtcblx0XHRpZihmWzJdID09PSAnZGF0ZScgJiYgcFtmWzFdXSkgcFtmWzFdXSA9IHBhcnNlRGF0ZShwW2ZbMV1dKTtcblx0fVxuXG5cdHJldHVybiBwO1xufVxuXG52YXIgQ09SRV9QUk9QU19YTUxfUk9PVCA9IHdyaXRleHRhZygnY3A6Y29yZVByb3BlcnRpZXMnLCBudWxsLCB7XG5cdC8vJ3htbG5zJzogWE1MTlMuQ09SRV9QUk9QUyxcblx0J3htbG5zOmNwJzogWE1MTlMuQ09SRV9QUk9QUyxcblx0J3htbG5zOmRjJzogWE1MTlMuZGMsXG5cdCd4bWxuczpkY3Rlcm1zJzogWE1MTlMuZGN0ZXJtcyxcblx0J3htbG5zOmRjbWl0eXBlJzogWE1MTlMuZGNtaXR5cGUsXG5cdCd4bWxuczp4c2knOiBYTUxOUy54c2lcbn0pO1xuXG5mdW5jdGlvbiBjcF9kb2l0KGYsIGcsIGgsIG8sIHApIHtcblx0aWYocFtmXSAhPSBudWxsIHx8IGcgPT0gbnVsbCB8fCBnID09PSBcIlwiKSByZXR1cm47XG5cdHBbZl0gPSBnO1xuXHRvW28ubGVuZ3RoXSA9IChoID8gd3JpdGV4dGFnKGYsZyxoKSA6IHdyaXRldGFnKGYsZykpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9jb3JlX3Byb3BzKGNwLCBfb3B0cykge1xuXHR2YXIgb3B0cyA9IF9vcHRzIHx8IHt9O1xuXHR2YXIgbyA9IFtYTUxfSEVBREVSLCBDT1JFX1BST1BTX1hNTF9ST09UXSwgcCA9IHt9O1xuXHRpZighY3AgJiYgIW9wdHMuUHJvcHMpIHJldHVybiBvLmpvaW4oXCJcIik7XG5cblx0aWYoY3ApIHtcblx0XHRpZihjcC5DcmVhdGVkRGF0ZSAhPSBudWxsKSBjcF9kb2l0KFwiZGN0ZXJtczpjcmVhdGVkXCIsIHR5cGVvZiBjcC5DcmVhdGVkRGF0ZSA9PT0gXCJzdHJpbmdcIiA/IGNwLkNyZWF0ZWREYXRlIDogd3JpdGVfdzNjZHRmKGNwLkNyZWF0ZWREYXRlLCBvcHRzLldURiksIHtcInhzaTp0eXBlXCI6XCJkY3Rlcm1zOlczQ0RURlwifSwgbywgcCk7XG5cdFx0aWYoY3AuTW9kaWZpZWREYXRlICE9IG51bGwpIGNwX2RvaXQoXCJkY3Rlcm1zOm1vZGlmaWVkXCIsIHR5cGVvZiBjcC5Nb2RpZmllZERhdGUgPT09IFwic3RyaW5nXCIgPyBjcC5Nb2RpZmllZERhdGUgOiB3cml0ZV93M2NkdGYoY3AuTW9kaWZpZWREYXRlLCBvcHRzLldURiksIHtcInhzaTp0eXBlXCI6XCJkY3Rlcm1zOlczQ0RURlwifSwgbywgcCk7XG5cdH1cblxuXHRmb3IodmFyIGkgPSAwOyBpICE9IENPUkVfUFJPUFMubGVuZ3RoOyArK2kpIHtcblx0XHR2YXIgZiA9IENPUkVfUFJPUFNbaV07XG5cdFx0dmFyIHYgPSBvcHRzLlByb3BzICYmIG9wdHMuUHJvcHNbZlsxXV0gIT0gbnVsbCA/IG9wdHMuUHJvcHNbZlsxXV0gOiBjcCA/IGNwW2ZbMV1dIDogbnVsbDtcblx0XHRpZih2ID09PSB0cnVlKSB2ID0gXCIxXCI7XG5cdFx0ZWxzZSBpZih2ID09PSBmYWxzZSkgdiA9IFwiMFwiO1xuXHRcdGVsc2UgaWYodHlwZW9mIHYgPT0gXCJudW1iZXJcIikgdiA9IFN0cmluZyh2KTtcblx0XHRpZih2ICE9IG51bGwpIGNwX2RvaXQoZlswXSwgdiwgbnVsbCwgbywgcCk7XG5cdH1cblx0aWYoby5sZW5ndGg+Mil7IG9bby5sZW5ndGhdID0gKCc8L2NwOmNvcmVQcm9wZXJ0aWVzPicpOyBvWzFdPW9bMV0ucmVwbGFjZShcIi8+XCIsXCI+XCIpOyB9XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG4vKiAxNS4yLjEyLjMgRXh0ZW5kZWQgRmlsZSBQcm9wZXJ0aWVzIFBhcnQgKi9cbi8qIFtNUy1PU0hBUkVEXSAyLjMuMy4yLlsxLTJdLjEgKFBJRFNJL1BJRERTSSkgKi9cbnZhciBFWFRfUFJPUFMgPSBbXG5cdFtcIkFwcGxpY2F0aW9uXCIsIFwiQXBwbGljYXRpb25cIiwgXCJzdHJpbmdcIl0sXG5cdFtcIkFwcFZlcnNpb25cIiwgXCJBcHBWZXJzaW9uXCIsIFwic3RyaW5nXCJdLFxuXHRbXCJDb21wYW55XCIsIFwiQ29tcGFueVwiLCBcInN0cmluZ1wiXSxcblx0W1wiRG9jU2VjdXJpdHlcIiwgXCJEb2NTZWN1cml0eVwiLCBcInN0cmluZ1wiXSxcblx0W1wiTWFuYWdlclwiLCBcIk1hbmFnZXJcIiwgXCJzdHJpbmdcIl0sXG5cdFtcIkh5cGVybGlua3NDaGFuZ2VkXCIsIFwiSHlwZXJsaW5rc0NoYW5nZWRcIiwgXCJib29sXCJdLFxuXHRbXCJTaGFyZWREb2NcIiwgXCJTaGFyZWREb2NcIiwgXCJib29sXCJdLFxuXHRbXCJMaW5rc1VwVG9EYXRlXCIsIFwiTGlua3NVcFRvRGF0ZVwiLCBcImJvb2xcIl0sXG5cdFtcIlNjYWxlQ3JvcFwiLCBcIlNjYWxlQ3JvcFwiLCBcImJvb2xcIl0sXG5cdFtcIkhlYWRpbmdQYWlyc1wiLCBcIkhlYWRpbmdQYWlyc1wiLCBcInJhd1wiXSxcblx0W1wiVGl0bGVzT2ZQYXJ0c1wiLCBcIlRpdGxlc09mUGFydHNcIiwgXCJyYXdcIl1cbl07XG5cblhNTE5TLkVYVF9QUk9QUyA9IFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZXh0ZW5kZWQtcHJvcGVydGllc1wiO1xuUkVMUy5FWFRfUFJPUFMgID0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyc7XG5cbmZ1bmN0aW9uIHBhcnNlX2V4dF9wcm9wcyhkYXRhLCBwLCBvcHRzKSB7XG5cdHZhciBxID0ge307IGlmKCFwKSBwID0ge307XG5cdGRhdGEgPSB1dGY4cmVhZChkYXRhKTtcblxuXHRFWFRfUFJPUFMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG5cdFx0c3dpdGNoKGZbMl0pIHtcblx0XHRcdGNhc2UgXCJzdHJpbmdcIjogcFtmWzFdXSA9IChkYXRhLm1hdGNoKG1hdGNodGFnKGZbMF0pKXx8W10pWzFdOyBicmVhaztcblx0XHRcdGNhc2UgXCJib29sXCI6IHBbZlsxXV0gPSAoZGF0YS5tYXRjaChtYXRjaHRhZyhmWzBdKSl8fFtdKVsxXSA9PT0gXCJ0cnVlXCI7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJhd1wiOlxuXHRcdFx0XHR2YXIgY3VyID0gZGF0YS5tYXRjaChuZXcgUmVnRXhwKFwiPFwiICsgZlswXSArIFwiW14+XSo+KFtcXFxcc1xcXFxTXSo/KTxcXC9cIiArIGZbMF0gKyBcIj5cIikpO1xuXHRcdFx0XHRpZihjdXIgJiYgY3VyLmxlbmd0aCA+IDApIHFbZlsxXV0gPSBjdXJbMV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSk7XG5cblx0aWYocS5IZWFkaW5nUGFpcnMgJiYgcS5UaXRsZXNPZlBhcnRzKSB7XG5cdFx0dmFyIHYgPSBwYXJzZVZlY3RvcihxLkhlYWRpbmdQYWlycywgb3B0cyk7XG5cdFx0dmFyIHBhcnRzID0gcGFyc2VWZWN0b3IocS5UaXRsZXNPZlBhcnRzLCBvcHRzKS5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudjsgfSk7XG5cdFx0dmFyIGlkeCA9IDAsIGxlbiA9IDA7XG5cdFx0aWYocGFydHMubGVuZ3RoID4gMCkgZm9yKHZhciBpID0gMDsgaSAhPT0gdi5sZW5ndGg7IGkgKz0gMikge1xuXHRcdFx0bGVuID0gKyh2W2krMV0udik7XG5cdFx0XHRzd2l0Y2godltpXS52KSB7XG5cdFx0XHRcdGNhc2UgXCJXb3Jrc2hlZXRzXCI6XG5cdFx0XHRcdGNhc2UgXCLlt6XkvZzooahcIjpcblx0XHRcdFx0Y2FzZSBcItCb0LjRgdGC0YtcIjpcblx0XHRcdFx0Y2FzZSBcItij2YjYsdin2YIg2KfZhNi52YXZhFwiOlxuXHRcdFx0XHRjYXNlIFwi44Ov44O844Kv44K344O844OIXCI6XG5cdFx0XHRcdGNhc2UgXCLXktec15nXldeg15XXqiDXoteR15XXk9eUXCI6XG5cdFx0XHRcdGNhc2UgXCJBcmJlaXRzYmzDpHR0ZXJcIjpcblx0XHRcdFx0Y2FzZSBcIsOHYWzEscWfbWEgU2F5ZmFsYXLEsVwiOlxuXHRcdFx0XHRjYXNlIFwiRmV1aWxsZXMgZGUgY2FsY3VsXCI6XG5cdFx0XHRcdGNhc2UgXCJGb2dsaSBkaSBsYXZvcm9cIjpcblx0XHRcdFx0Y2FzZSBcIkZvbGhhcyBkZSBjw6FsY3Vsb1wiOlxuXHRcdFx0XHRjYXNlIFwiUGxhbmlsaGFzXCI6XG5cdFx0XHRcdGNhc2UgXCJSZWduZWFya1wiOlxuXHRcdFx0XHRjYXNlIFwiV2Vya2JsYWRlblwiOlxuXHRcdFx0XHRcdHAuV29ya3NoZWV0cyA9IGxlbjtcblx0XHRcdFx0XHRwLlNoZWV0TmFtZXMgPSBwYXJ0cy5zbGljZShpZHgsIGlkeCArIGxlbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIk5hbWVkIFJhbmdlc1wiOlxuXHRcdFx0XHRjYXNlIFwi5ZCN5YmN5LuY44GN5LiA6KanXCI6XG5cdFx0XHRcdGNhc2UgXCJCZW5hbm50ZSBCZXJlaWNoZVwiOlxuXHRcdFx0XHRjYXNlIFwiTmF2bmdpdm5lIG9tcsOlZGVyXCI6XG5cdFx0XHRcdFx0cC5OYW1lZFJhbmdlcyA9IGxlbjtcblx0XHRcdFx0XHRwLkRlZmluZWROYW1lcyA9IHBhcnRzLnNsaWNlKGlkeCwgaWR4ICsgbGVuKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiQ2hhcnRzXCI6XG5cdFx0XHRcdGNhc2UgXCJEaWFncmFtbWVcIjpcblx0XHRcdFx0XHRwLkNoYXJ0c2hlZXRzID0gbGVuO1xuXHRcdFx0XHRcdHAuQ2hhcnROYW1lcyA9IHBhcnRzLnNsaWNlKGlkeCwgaWR4ICsgbGVuKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlkeCArPSBsZW47XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHA7XG59XG5cbnZhciBFWFRfUFJPUFNfWE1MX1JPT1QgPSB3cml0ZXh0YWcoJ1Byb3BlcnRpZXMnLCBudWxsLCB7XG5cdCd4bWxucyc6IFhNTE5TLkVYVF9QUk9QUyxcblx0J3htbG5zOnZ0JzogWE1MTlMudnRcbn0pO1xuXG5mdW5jdGlvbiB3cml0ZV9leHRfcHJvcHMoY3ApIHtcblx0dmFyIG8gPSBbXSwgVyA9IHdyaXRleHRhZztcblx0aWYoIWNwKSBjcCA9IHt9O1xuXHRjcC5BcHBsaWNhdGlvbiA9IFwiU2hlZXRKU1wiO1xuXHRvW28ubGVuZ3RoXSA9IChYTUxfSEVBREVSKTtcblx0b1tvLmxlbmd0aF0gPSAoRVhUX1BST1BTX1hNTF9ST09UKTtcblxuXHRFWFRfUFJPUFMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG5cdFx0aWYoY3BbZlsxXV0gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXHRcdHZhciB2O1xuXHRcdHN3aXRjaChmWzJdKSB7XG5cdFx0XHRjYXNlICdzdHJpbmcnOiB2ID0gU3RyaW5nKGNwW2ZbMV1dKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdib29sJzogdiA9IGNwW2ZbMV1dID8gJ3RydWUnIDogJ2ZhbHNlJzsgYnJlYWs7XG5cdFx0fVxuXHRcdGlmKHYgIT09IHVuZGVmaW5lZCkgb1tvLmxlbmd0aF0gPSAoVyhmWzBdLCB2KSk7XG5cdH0pO1xuXG5cdC8qIFRPRE86IEhlYWRpbmdQYWlycywgVGl0bGVzT2ZQYXJ0cyAqL1xuXHRvW28ubGVuZ3RoXSA9IChXKCdIZWFkaW5nUGFpcnMnLCBXKCd2dDp2ZWN0b3InLCBXKCd2dDp2YXJpYW50JywgJzx2dDpscHN0cj5Xb3Jrc2hlZXRzPC92dDpscHN0cj4nKStXKCd2dDp2YXJpYW50JywgVygndnQ6aTQnLCBTdHJpbmcoY3AuV29ya3NoZWV0cykpKSwge3NpemU6MiwgYmFzZVR5cGU6XCJ2YXJpYW50XCJ9KSkpO1xuXHRvW28ubGVuZ3RoXSA9IChXKCdUaXRsZXNPZlBhcnRzJywgVygndnQ6dmVjdG9yJywgY3AuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24ocykgeyByZXR1cm4gXCI8dnQ6bHBzdHI+XCIgKyBlc2NhcGV4bWwocykgKyBcIjwvdnQ6bHBzdHI+XCI7IH0pLmpvaW4oXCJcIiksIHtzaXplOiBjcC5Xb3Jrc2hlZXRzLCBiYXNlVHlwZTpcImxwc3RyXCJ9KSkpO1xuXHRpZihvLmxlbmd0aD4yKXsgb1tvLmxlbmd0aF0gPSAoJzwvUHJvcGVydGllcz4nKTsgb1sxXT1vWzFdLnJlcGxhY2UoXCIvPlwiLFwiPlwiKTsgfVxuXHRyZXR1cm4gby5qb2luKFwiXCIpO1xufVxuLyogMTUuMi4xMi4yIEN1c3RvbSBGaWxlIFByb3BlcnRpZXMgUGFydCAqL1xuWE1MTlMuQ1VTVF9QUk9QUyA9IFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvY3VzdG9tLXByb3BlcnRpZXNcIjtcblJFTFMuQ1VTVF9QUk9QUyAgPSAnaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyc7XG5cbnZhciBjdXN0cmVnZXggPSAvPFtePl0rPltePF0qL2c7XG5mdW5jdGlvbiBwYXJzZV9jdXN0X3Byb3BzKGRhdGEsIG9wdHMpIHtcblx0dmFyIHAgPSB7fSwgbmFtZSA9IFwiXCI7XG5cdHZhciBtID0gZGF0YS5tYXRjaChjdXN0cmVnZXgpO1xuXHRpZihtKSBmb3IodmFyIGkgPSAwOyBpICE9IG0ubGVuZ3RoOyArK2kpIHtcblx0XHR2YXIgeCA9IG1baV0sIHkgPSBwYXJzZXhtbHRhZyh4KTtcblx0XHRzd2l0Y2goeVswXSkge1xuXHRcdFx0Y2FzZSAnPD94bWwnOiBicmVhaztcblx0XHRcdGNhc2UgJzxQcm9wZXJ0aWVzJzogYnJlYWs7XG5cdFx0XHRjYXNlICc8cHJvcGVydHknOiBuYW1lID0geS5uYW1lOyBicmVhaztcblx0XHRcdGNhc2UgJzwvcHJvcGVydHk+JzogbmFtZSA9IG51bGw7IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogaWYgKHguaW5kZXhPZignPHZ0OicpID09PSAwKSB7XG5cdFx0XHRcdHZhciB0b2tzID0geC5zcGxpdCgnPicpO1xuXHRcdFx0XHR2YXIgdHlwZSA9IHRva3NbMF0uc2xpY2UoNCksIHRleHQgPSB0b2tzWzFdO1xuXHRcdFx0XHQvKiAyMi40LjIuMzIgKENUX1ZhcmlhbnQpLiBPbWl0IHRoZSBiaW5hcnkgdHlwZXMgZnJvbSAyMi40IChWYXJpYW50IFR5cGVzKSAqL1xuXHRcdFx0XHRzd2l0Y2godHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgJ2xwc3RyJzogY2FzZSAnYnN0cic6IGNhc2UgJ2xwd3N0cic6XG5cdFx0XHRcdFx0XHRwW25hbWVdID0gdW5lc2NhcGV4bWwodGV4dCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdib29sJzpcblx0XHRcdFx0XHRcdHBbbmFtZV0gPSBwYXJzZXhtbGJvb2wodGV4dCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdpMSc6IGNhc2UgJ2kyJzogY2FzZSAnaTQnOiBjYXNlICdpOCc6IGNhc2UgJ2ludCc6IGNhc2UgJ3VpbnQnOlxuXHRcdFx0XHRcdFx0cFtuYW1lXSA9IHBhcnNlSW50KHRleHQsIDEwKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3I0JzogY2FzZSAncjgnOiBjYXNlICdkZWNpbWFsJzpcblx0XHRcdFx0XHRcdHBbbmFtZV0gPSBwYXJzZUZsb2F0KHRleHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnZmlsZXRpbWUnOiBjYXNlICdkYXRlJzpcblx0XHRcdFx0XHRcdHBbbmFtZV0gPSBwYXJzZURhdGUodGV4dCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdjeSc6IGNhc2UgJ2Vycm9yJzpcblx0XHRcdFx0XHRcdHBbbmFtZV0gPSB1bmVzY2FwZXhtbCh0ZXh0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRpZih0eXBlLnNsaWNlKC0xKSA9PSAnLycpIGJyZWFrO1xuXHRcdFx0XHRcdFx0aWYob3B0cy5XVEYgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSBjb25zb2xlLndhcm4oJ1VuZXhwZWN0ZWQnLCB4LCB0eXBlLCB0b2tzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmKHguc2xpY2UoMCwyKSA9PT0gXCI8L1wiKSB7LyogZW1wdHkgKi9cblx0XHRcdH0gZWxzZSBpZihvcHRzLldURikgdGhyb3cgbmV3IEVycm9yKHgpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcDtcbn1cblxudmFyIENVU1RfUFJPUFNfWE1MX1JPT1QgPSB3cml0ZXh0YWcoJ1Byb3BlcnRpZXMnLCBudWxsLCB7XG5cdCd4bWxucyc6IFhNTE5TLkNVU1RfUFJPUFMsXG5cdCd4bWxuczp2dCc6IFhNTE5TLnZ0XG59KTtcblxuZnVuY3Rpb24gd3JpdGVfY3VzdF9wcm9wcyhjcCkge1xuXHR2YXIgbyA9IFtYTUxfSEVBREVSLCBDVVNUX1BST1BTX1hNTF9ST09UXTtcblx0aWYoIWNwKSByZXR1cm4gby5qb2luKFwiXCIpO1xuXHR2YXIgcGlkID0gMTtcblx0a2V5cyhjcCkuZm9yRWFjaChmdW5jdGlvbiBjdXN0cHJvcChrKSB7ICsrcGlkO1xuXHRcdC8vICRGbG93SWdub3JlXG5cdFx0b1tvLmxlbmd0aF0gPSAod3JpdGV4dGFnKCdwcm9wZXJ0eScsIHdyaXRlX3Z0KGNwW2tdKSwge1xuXHRcdFx0J2ZtdGlkJzogJ3tENUNERDUwNS0yRTlDLTEwMUItOTM5Ny0wODAwMkIyQ0Y5QUV9Jyxcblx0XHRcdCdwaWQnOiBwaWQsXG5cdFx0XHQnbmFtZSc6IGtcblx0XHR9KSk7XG5cdH0pO1xuXHRpZihvLmxlbmd0aD4yKXsgb1tvLmxlbmd0aF0gPSAnPC9Qcm9wZXJ0aWVzPic7IG9bMV09b1sxXS5yZXBsYWNlKFwiLz5cIixcIj5cIik7IH1cblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cbi8qIENvbW1vbiBOYW1lIC0+IFhMTUwgTmFtZSAqL1xudmFyIFhMTUxEb2NQcm9wc01hcCA9IHtcblx0VGl0bGU6ICdUaXRsZScsXG5cdFN1YmplY3Q6ICdTdWJqZWN0Jyxcblx0QXV0aG9yOiAnQXV0aG9yJyxcblx0S2V5d29yZHM6ICdLZXl3b3JkcycsXG5cdENvbW1lbnRzOiAnRGVzY3JpcHRpb24nLFxuXHRMYXN0QXV0aG9yOiAnTGFzdEF1dGhvcicsXG5cdFJldk51bWJlcjogJ1JldmlzaW9uJyxcblx0QXBwbGljYXRpb246ICdBcHBOYW1lJyxcblx0LyogVG90YWxUaW1lOiAnVG90YWxUaW1lJywgKi9cblx0TGFzdFByaW50ZWQ6ICdMYXN0UHJpbnRlZCcsXG5cdENyZWF0ZWREYXRlOiAnQ3JlYXRlZCcsXG5cdE1vZGlmaWVkRGF0ZTogJ0xhc3RTYXZlZCcsXG5cdC8qIFBhZ2VzICovXG5cdC8qIFdvcmRzICovXG5cdC8qIENoYXJhY3RlcnMgKi9cblx0Q2F0ZWdvcnk6ICdDYXRlZ29yeScsXG5cdC8qIFByZXNlbnRhdGlvbkZvcm1hdCAqL1xuXHRNYW5hZ2VyOiAnTWFuYWdlcicsXG5cdENvbXBhbnk6ICdDb21wYW55Jyxcblx0LyogR3VpZCAqL1xuXHQvKiBIeXBlcmxpbmtCYXNlICovXG5cdC8qIEJ5dGVzICovXG5cdC8qIExpbmVzICovXG5cdC8qIFBhcmFncmFwaHMgKi9cblx0LyogQ2hhcmFjdGVyc1dpdGhTcGFjZXMgKi9cblx0QXBwVmVyc2lvbjogJ1ZlcnNpb24nLFxuXG5cdENvbnRlbnRTdGF0dXM6ICdDb250ZW50U3RhdHVzJywgLyogTk9URTogbWlzc2luZyBmcm9tIHNjaGVtYSAqL1xuXHRJZGVudGlmaWVyOiAnSWRlbnRpZmllcicsIC8qIE5PVEU6IG1pc3NpbmcgZnJvbSBzY2hlbWEgKi9cblx0TGFuZ3VhZ2U6ICdMYW5ndWFnZScgLyogTk9URTogbWlzc2luZyBmcm9tIHNjaGVtYSAqL1xufTtcbnZhciBldmVydF9YTE1MRFBNID0gZXZlcnQoWExNTERvY1Byb3BzTWFwKTtcblxuZnVuY3Rpb24geGxtbF9zZXRfcHJvcChQcm9wcywgdGFnLCB2YWwpIHtcblx0dGFnID0gZXZlcnRfWExNTERQTVt0YWddIHx8IHRhZztcblx0UHJvcHNbdGFnXSA9IHZhbDtcbn1cblxuZnVuY3Rpb24geGxtbF93cml0ZV9kb2Nwcm9wcyhQcm9wcywgb3B0cykge1xuXHR2YXIgbyA9IFtdO1xuXHRrZXlzKFhMTUxEb2NQcm9wc01hcCkubWFwKGZ1bmN0aW9uKG0pIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgQ09SRV9QUk9QUy5sZW5ndGg7ICsraSkgaWYoQ09SRV9QUk9QU1tpXVsxXSA9PSBtKSByZXR1cm4gQ09SRV9QUk9QU1tpXTtcblx0XHRmb3IoaSA9IDA7IGkgPCBFWFRfUFJPUFMubGVuZ3RoOyArK2kpIGlmKEVYVF9QUk9QU1tpXVsxXSA9PSBtKSByZXR1cm4gRVhUX1BST1BTW2ldO1xuXHRcdHRocm93IG07XG5cdH0pLmZvckVhY2goZnVuY3Rpb24ocCkge1xuXHRcdGlmKFByb3BzW3BbMV1dID09IG51bGwpIHJldHVybjtcblx0XHR2YXIgbSA9IG9wdHMgJiYgb3B0cy5Qcm9wcyAmJiBvcHRzLlByb3BzW3BbMV1dICE9IG51bGwgPyBvcHRzLlByb3BzW3BbMV1dIDogUHJvcHNbcFsxXV07XG5cdFx0c3dpdGNoKHBbMl0pIHtcblx0XHRcdGNhc2UgJ2RhdGUnOiBtID0gbmV3IERhdGUobSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cXC5cXGQqWi8sXCJaXCIpOyBicmVhaztcblx0XHR9XG5cdFx0aWYodHlwZW9mIG0gPT0gJ251bWJlcicpIG0gPSBTdHJpbmcobSk7XG5cdFx0ZWxzZSBpZihtID09PSB0cnVlIHx8IG0gPT09IGZhbHNlKSB7IG0gPSBtID8gXCIxXCIgOiBcIjBcIjsgfVxuXHRcdGVsc2UgaWYobSBpbnN0YW5jZW9mIERhdGUpIG0gPSBuZXcgRGF0ZShtKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1xcLlxcZCpaLyxcIlwiKTtcblx0XHRvLnB1c2god3JpdGV0YWcoWExNTERvY1Byb3BzTWFwW3BbMV1dIHx8IHBbMV0sIG0pKTtcblx0fSk7XG5cdHJldHVybiB3cml0ZXh0YWcoJ0RvY3VtZW50UHJvcGVydGllcycsIG8uam9pbihcIlwiKSwge3htbG5zOlhMTUxOUy5vIH0pO1xufVxuZnVuY3Rpb24geGxtbF93cml0ZV9jdXN0cHJvcHMoUHJvcHMsIEN1c3Rwcm9wcykge1xuXHR2YXIgQkxBQ0tMSVNUID0gW1wiV29ya3NoZWV0c1wiLFwiU2hlZXROYW1lc1wiXTtcblx0dmFyIFQgPSAnQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzJztcblx0dmFyIG8gPSBbXTtcblx0aWYoUHJvcHMpIGtleXMoUHJvcHMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuaWYoIVByb3BzLmhhc093blByb3BlcnR5KGspKSByZXR1cm47XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IENPUkVfUFJPUFMubGVuZ3RoOyArK2kpIGlmKGsgPT0gQ09SRV9QUk9QU1tpXVsxXSkgcmV0dXJuO1xuXHRcdGZvcihpID0gMDsgaSA8IEVYVF9QUk9QUy5sZW5ndGg7ICsraSkgaWYoayA9PSBFWFRfUFJPUFNbaV1bMV0pIHJldHVybjtcblx0XHRmb3IoaSA9IDA7IGkgPCBCTEFDS0xJU1QubGVuZ3RoOyArK2kpIGlmKGsgPT0gQkxBQ0tMSVNUW2ldKSByZXR1cm47XG5cblx0XHR2YXIgbSA9IFByb3BzW2tdO1xuXHRcdHZhciB0ID0gXCJzdHJpbmdcIjtcblx0XHRpZih0eXBlb2YgbSA9PSAnbnVtYmVyJykgeyB0ID0gXCJmbG9hdFwiOyBtID0gU3RyaW5nKG0pOyB9XG5cdFx0ZWxzZSBpZihtID09PSB0cnVlIHx8IG0gPT09IGZhbHNlKSB7IHQgPSBcImJvb2xlYW5cIjsgbSA9IG0gPyBcIjFcIiA6IFwiMFwiOyB9XG5cdFx0ZWxzZSBtID0gU3RyaW5nKG0pO1xuXHRcdG8ucHVzaCh3cml0ZXh0YWcoZXNjYXBleG1sdGFnKGspLCBtLCB7XCJkdDpkdFwiOnR9KSk7XG5cdH0pO1xuXHRpZihDdXN0cHJvcHMpIGtleXMoQ3VzdHByb3BzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbmlmKCFDdXN0cHJvcHMuaGFzT3duUHJvcGVydHkoaykpIHJldHVybjtcblx0XHRpZihQcm9wcyAmJiBQcm9wcy5oYXNPd25Qcm9wZXJ0eShrKSkgcmV0dXJuO1xuXHRcdHZhciBtID0gQ3VzdHByb3BzW2tdO1xuXHRcdHZhciB0ID0gXCJzdHJpbmdcIjtcblx0XHRpZih0eXBlb2YgbSA9PSAnbnVtYmVyJykgeyB0ID0gXCJmbG9hdFwiOyBtID0gU3RyaW5nKG0pOyB9XG5cdFx0ZWxzZSBpZihtID09PSB0cnVlIHx8IG0gPT09IGZhbHNlKSB7IHQgPSBcImJvb2xlYW5cIjsgbSA9IG0gPyBcIjFcIiA6IFwiMFwiOyB9XG5cdFx0ZWxzZSBpZihtIGluc3RhbmNlb2YgRGF0ZSkgeyB0ID0gXCJkYXRlVGltZS50elwiOyBtID0gbS50b0lTT1N0cmluZygpOyB9XG5cdFx0ZWxzZSBtID0gU3RyaW5nKG0pO1xuXHRcdG8ucHVzaCh3cml0ZXh0YWcoZXNjYXBleG1sdGFnKGspLCBtLCB7XCJkdDpkdFwiOnR9KSk7XG5cdH0pO1xuXHRyZXR1cm4gJzwnICsgVCArICcgeG1sbnM9XCInICsgWExNTE5TLm8gKyAnXCI+JyArIG8uam9pbihcIlwiKSArICc8LycgKyBUICsgJz4nO1xufVxuLyogW01TLURUWVBdIDIuMy4zIEZJTEVUSU1FICovXG4vKiBbTVMtT0xFRFNdIDIuMS4zIEZJTEVUSU1FIChQYWNrZXQgVmVyc2lvbikgKi9cbi8qIFtNUy1PTEVQU10gMi44IEZJTEVUSU1FIChQYWNrZXQgVmVyc2lvbikgKi9cbmZ1bmN0aW9uIHBhcnNlX0ZJTEVUSU1FKGJsb2IpIHtcblx0dmFyIGR3TG93RGF0ZVRpbWUgPSBibG9iLnJlYWRfc2hpZnQoNCksIGR3SGlnaERhdGVUaW1lID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRyZXR1cm4gbmV3IERhdGUoKChkd0hpZ2hEYXRlVGltZS8xZTcqTWF0aC5wb3coMiwzMikgKyBkd0xvd0RhdGVUaW1lLzFlNykgLSAxMTY0NDQ3MzYwMCkqMTAwMCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cXC4wMDAvLFwiXCIpO1xufVxuXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjMuMS40IExwc3RyICovXG5mdW5jdGlvbiBwYXJzZV9scHN0cihibG9iLCB0eXBlLCBwYWQpIHtcblx0dmFyIHN0YXJ0ID0gYmxvYi5sO1xuXHR2YXIgc3RyID0gYmxvYi5yZWFkX3NoaWZ0KDAsICdscHN0ci1jcCcpO1xuXHRpZihwYWQpIHdoaWxlKChibG9iLmwgLSBzdGFydCkgJiAzKSArK2Jsb2IubDtcblx0cmV0dXJuIHN0cjtcbn1cblxuLyogW01TLU9TSEFSRURdIDIuMy4zLjEuNiBMcHdzdHIgKi9cbmZ1bmN0aW9uIHBhcnNlX2xwd3N0cihibG9iLCB0eXBlLCBwYWQpIHtcblx0dmFyIHN0ciA9IGJsb2IucmVhZF9zaGlmdCgwLCAnbHB3c3RyJyk7XG5cdGlmKHBhZCkgYmxvYi5sICs9ICg0IC0gKChzdHIubGVuZ3RoKzEpICYgMykpICYgMztcblx0cmV0dXJuIHN0cjtcbn1cblxuXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjMuMS4xMSBWdFN0cmluZyAqL1xuLyogW01TLU9TSEFSRURdIDIuMy4zLjEuMTIgVnRVbmFsaWduZWRTdHJpbmcgKi9cbmZ1bmN0aW9uIHBhcnNlX1Z0U3RyaW5nQmFzZShibG9iLCBzdHJpbmdUeXBlLCBwYWQpIHtcblx0aWYoc3RyaW5nVHlwZSA9PT0gMHgxRiAvKlZUX0xQV1NUUiovKSByZXR1cm4gcGFyc2VfbHB3c3RyKGJsb2IpO1xuXHRyZXR1cm4gcGFyc2VfbHBzdHIoYmxvYiwgc3RyaW5nVHlwZSwgcGFkKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfVnRTdHJpbmcoYmxvYiwgdCwgcGFkKSB7IHJldHVybiBwYXJzZV9WdFN0cmluZ0Jhc2UoYmxvYiwgdCwgcGFkID09PSBmYWxzZSA/IDA6IDQpOyB9XG5mdW5jdGlvbiBwYXJzZV9WdFVuYWxpZ25lZFN0cmluZyhibG9iLCB0KSB7IGlmKCF0KSB0aHJvdyBuZXcgRXJyb3IoXCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoXCIpOyByZXR1cm4gcGFyc2VfVnRTdHJpbmdCYXNlKGJsb2IsIHQsIDApOyB9XG5cbi8qIFtNUy1PU0hBUkVEXSAyLjMuMy4xLjkgVnRWZWNVbmFsaWduZWRMcHN0clZhbHVlICovXG5mdW5jdGlvbiBwYXJzZV9WdFZlY1VuYWxpZ25lZExwc3RyVmFsdWUoYmxvYikge1xuXHR2YXIgbGVuZ3RoID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHR2YXIgcmV0ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHJldFtpXSA9IGJsb2IucmVhZF9zaGlmdCgwLCAnbHBzdHItY3AnKS5yZXBsYWNlKGNocjAsJycpO1xuXHRyZXR1cm4gcmV0O1xufVxuXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjMuMS4xMCBWdFZlY1VuYWxpZ25lZExwc3RyICovXG5mdW5jdGlvbiBwYXJzZV9WdFZlY1VuYWxpZ25lZExwc3RyKGJsb2IpIHtcblx0cmV0dXJuIHBhcnNlX1Z0VmVjVW5hbGlnbmVkTHBzdHJWYWx1ZShibG9iKTtcbn1cblxuLyogW01TLU9TSEFSRURdIDIuMy4zLjEuMTMgVnRIZWFkaW5nUGFpciAqL1xuZnVuY3Rpb24gcGFyc2VfVnRIZWFkaW5nUGFpcihibG9iKSB7XG5cdHZhciBoZWFkaW5nU3RyaW5nID0gcGFyc2VfVHlwZWRQcm9wZXJ0eVZhbHVlKGJsb2IsIFZUX1VTVFIpO1xuXHR2YXIgaGVhZGVyUGFydHMgPSBwYXJzZV9UeXBlZFByb3BlcnR5VmFsdWUoYmxvYiwgVlRfSTQpO1xuXHRyZXR1cm4gW2hlYWRpbmdTdHJpbmcsIGhlYWRlclBhcnRzXTtcbn1cblxuLyogW01TLU9TSEFSRURdIDIuMy4zLjEuMTQgVnRWZWNIZWFkaW5nUGFpclZhbHVlICovXG5mdW5jdGlvbiBwYXJzZV9WdFZlY0hlYWRpbmdQYWlyVmFsdWUoYmxvYikge1xuXHR2YXIgY0VsZW1lbnRzID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHR2YXIgb3V0ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gY0VsZW1lbnRzIC8gMjsgKytpKSBvdXQucHVzaChwYXJzZV9WdEhlYWRpbmdQYWlyKGJsb2IpKTtcblx0cmV0dXJuIG91dDtcbn1cblxuLyogW01TLU9TSEFSRURdIDIuMy4zLjEuMTUgVnRWZWNIZWFkaW5nUGFpciAqL1xuZnVuY3Rpb24gcGFyc2VfVnRWZWNIZWFkaW5nUGFpcihibG9iKSB7XG5cdC8vIE5PVEU6IFdoZW4gaW52b2tlZCwgd1R5cGUgJiBwYWRkaW5nIHdlcmUgYWxyZWFkeSBjb25zdW1lZFxuXHRyZXR1cm4gcGFyc2VfVnRWZWNIZWFkaW5nUGFpclZhbHVlKGJsb2IpO1xufVxuXG4vKiBbTVMtT0xFUFNdIDIuMTguMSBEaWN0aW9uYXJ5ICh1c2VzIDIuMTcsIDIuMTYpICovXG5mdW5jdGlvbiBwYXJzZV9kaWN0aW9uYXJ5KGJsb2IsQ29kZVBhZ2UpIHtcblx0dmFyIGNudCA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0dmFyIGRpY3QgPSAoe30pO1xuXHRmb3IodmFyIGogPSAwOyBqICE9IGNudDsgKytqKSB7XG5cdFx0dmFyIHBpZCA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0XHR2YXIgbGVuID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRcdGRpY3RbcGlkXSA9IGJsb2IucmVhZF9zaGlmdChsZW4sIChDb2RlUGFnZSA9PT0gMHg0QjAgPyd1dGYxNmxlJzondXRmOCcpKS5yZXBsYWNlKGNocjAsJycpLnJlcGxhY2UoY2hyMSwnIScpO1xuXHR9XG5cdGlmKGJsb2IubCAmIDMpIGJsb2IubCA9IChibG9iLmw+PjIrMSk8PDI7XG5cdHJldHVybiBkaWN0O1xufVxuXG4vKiBbTVMtT0xFUFNdIDIuOSBCTE9CICovXG5mdW5jdGlvbiBwYXJzZV9CTE9CKGJsb2IpIHtcblx0dmFyIHNpemUgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHZhciBieXRlcyA9IGJsb2Iuc2xpY2UoYmxvYi5sLGJsb2IubCtzaXplKTtcblx0aWYoKHNpemUgJiAzKSA+IDApIGJsb2IubCArPSAoNCAtIChzaXplICYgMykpICYgMztcblx0cmV0dXJuIGJ5dGVzO1xufVxuXG4vKiBbTVMtT0xFUFNdIDIuMTEgQ2xpcGJvYXJkRGF0YSAqL1xuZnVuY3Rpb24gcGFyc2VfQ2xpcGJvYXJkRGF0YShibG9iKSB7XG5cdC8vIFRPRE9cblx0dmFyIG8gPSB7fTtcblx0by5TaXplID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHQvL28uRm9ybWF0ID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRibG9iLmwgKz0gby5TaXplO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLU9MRVBTXSAyLjE1IFR5cGVkUHJvcGVydHlWYWx1ZSAqL1xuZnVuY3Rpb24gcGFyc2VfVHlwZWRQcm9wZXJ0eVZhbHVlKGJsb2IsIHR5cGUsIF9vcHRzKSB7XG5cdHZhciB0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpLCByZXQsIG9wdHMgPSBfb3B0c3x8e307XG5cdGJsb2IubCArPSAyO1xuXHRpZih0eXBlICE9PSBWVF9WQVJJQU5UKVxuXHRpZih0ICE9PSB0eXBlICYmIFZUX0NVU1RPTS5pbmRleE9mKHR5cGUpPT09LTEpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdHlwZSAnICsgdHlwZSArICcgc2F3ICcgKyB0KTtcblx0c3dpdGNoKHR5cGUgPT09IFZUX1ZBUklBTlQgPyB0IDogdHlwZSkge1xuXHRcdGNhc2UgMHgwMiAvKlZUX0kyKi86IHJldCA9IGJsb2IucmVhZF9zaGlmdCgyLCAnaScpOyBpZighb3B0cy5yYXcpIGJsb2IubCArPSAyOyByZXR1cm4gcmV0O1xuXHRcdGNhc2UgMHgwMyAvKlZUX0k0Ki86IHJldCA9IGJsb2IucmVhZF9zaGlmdCg0LCAnaScpOyByZXR1cm4gcmV0O1xuXHRcdGNhc2UgMHgwQiAvKlZUX0JPT0wqLzogcmV0dXJuIGJsb2IucmVhZF9zaGlmdCg0KSAhPT0gMHgwO1xuXHRcdGNhc2UgMHgxMyAvKlZUX1VJNCovOiByZXQgPSBibG9iLnJlYWRfc2hpZnQoNCk7IHJldHVybiByZXQ7XG5cdFx0Y2FzZSAweDFFIC8qVlRfTFBTVFIqLzogcmV0dXJuIHBhcnNlX2xwc3RyKGJsb2IsIHQsIDQpLnJlcGxhY2UoY2hyMCwnJyk7XG5cdFx0Y2FzZSAweDFGIC8qVlRfTFBXU1RSKi86IHJldHVybiBwYXJzZV9scHdzdHIoYmxvYik7XG5cdFx0Y2FzZSAweDQwIC8qVlRfRklMRVRJTUUqLzogcmV0dXJuIHBhcnNlX0ZJTEVUSU1FKGJsb2IpO1xuXHRcdGNhc2UgMHg0MSAvKlZUX0JMT0IqLzogcmV0dXJuIHBhcnNlX0JMT0IoYmxvYik7XG5cdFx0Y2FzZSAweDQ3IC8qVlRfQ0YqLzogcmV0dXJuIHBhcnNlX0NsaXBib2FyZERhdGEoYmxvYik7XG5cdFx0Y2FzZSAweDUwIC8qVlRfU1RSSU5HKi86IHJldHVybiBwYXJzZV9WdFN0cmluZyhibG9iLCB0LCAhb3B0cy5yYXcpLnJlcGxhY2UoY2hyMCwnJyk7XG5cdFx0Y2FzZSAweDUxIC8qVlRfVVNUUiovOiByZXR1cm4gcGFyc2VfVnRVbmFsaWduZWRTdHJpbmcoYmxvYiwgdC8qLCA0Ki8pLnJlcGxhY2UoY2hyMCwnJyk7XG5cdFx0Y2FzZSAweDEwMEMgLypWVF9WRUNUT1J8VlRfVkFSSUFOVCovOiByZXR1cm4gcGFyc2VfVnRWZWNIZWFkaW5nUGFpcihibG9iKTtcblx0XHRjYXNlIDB4MTAxRSAvKlZUX0xQU1RSKi86IHJldHVybiBwYXJzZV9WdFZlY1VuYWxpZ25lZExwc3RyKGJsb2IpO1xuXHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSBcIiArIHR5cGUgKyBcIiBcIiArIHQpO1xuXHR9XG59XG5cbi8qIFtNUy1PTEVQU10gMi4yMCBQcm9wZXJ0eVNldCAqL1xuZnVuY3Rpb24gcGFyc2VfUHJvcGVydHlTZXQoYmxvYiwgUElEU0kpIHtcblx0dmFyIHN0YXJ0X2FkZHIgPSBibG9iLmw7XG5cdHZhciBzaXplID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHR2YXIgTnVtUHJvcHMgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHZhciBQcm9wcyA9IFtdLCBpID0gMDtcblx0dmFyIENvZGVQYWdlID0gMDtcblx0dmFyIERpY3Rpb25hcnkgPSAtMSwgRGljdE9iaiA9ICh7fSk7XG5cdGZvcihpID0gMDsgaSAhPSBOdW1Qcm9wczsgKytpKSB7XG5cdFx0dmFyIFByb3BJRCA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0XHR2YXIgT2Zmc2V0ID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRcdFByb3BzW2ldID0gW1Byb3BJRCwgT2Zmc2V0ICsgc3RhcnRfYWRkcl07XG5cdH1cblx0UHJvcHMuc29ydChmdW5jdGlvbih4LHkpIHsgcmV0dXJuIHhbMV0gLSB5WzFdOyB9KTtcblx0dmFyIFByb3BIID0ge307XG5cdGZvcihpID0gMDsgaSAhPSBOdW1Qcm9wczsgKytpKSB7XG5cdFx0aWYoYmxvYi5sICE9PSBQcm9wc1tpXVsxXSkge1xuXHRcdFx0dmFyIGZhaWwgPSB0cnVlO1xuXHRcdFx0aWYoaT4wICYmIFBJRFNJKSBzd2l0Y2goUElEU0lbUHJvcHNbaS0xXVswXV0udCkge1xuXHRcdFx0XHRjYXNlIDB4MDIgLypWVF9JMiovOiBpZihibG9iLmwrMiA9PT0gUHJvcHNbaV1bMV0pIHsgYmxvYi5sKz0yOyBmYWlsID0gZmFsc2U7IH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgMHg1MCAvKlZUX1NUUklORyovOiBpZihibG9iLmwgPD0gUHJvcHNbaV1bMV0pIHsgYmxvYi5sPVByb3BzW2ldWzFdOyBmYWlsID0gZmFsc2U7IH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgMHgxMDBDIC8qVlRfVkVDVE9SfFZUX1ZBUklBTlQqLzogaWYoYmxvYi5sIDw9IFByb3BzW2ldWzFdKSB7IGJsb2IubD1Qcm9wc1tpXVsxXTsgZmFpbCA9IGZhbHNlOyB9IGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYoKCFQSURTSXx8aT09MCkgJiYgYmxvYi5sIDw9IFByb3BzW2ldWzFdKSB7IGZhaWw9ZmFsc2U7IGJsb2IubCA9IFByb3BzW2ldWzFdOyB9XG5cdFx0XHRpZihmYWlsKSB0aHJvdyBuZXcgRXJyb3IoXCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzIFwiICsgUHJvcHNbaV1bMV0gKyAnIGF0ICcgKyBibG9iLmwgKyAnIDonICsgaSk7XG5cdFx0fVxuXHRcdGlmKFBJRFNJKSB7XG5cdFx0XHR2YXIgcGlkZHNpID0gUElEU0lbUHJvcHNbaV1bMF1dO1xuXHRcdFx0UHJvcEhbcGlkZHNpLm5dID0gcGFyc2VfVHlwZWRQcm9wZXJ0eVZhbHVlKGJsb2IsIHBpZGRzaS50LCB7cmF3OnRydWV9KTtcblx0XHRcdGlmKHBpZGRzaS5wID09PSAndmVyc2lvbicpIFByb3BIW3BpZGRzaS5uXSA9IFN0cmluZyhQcm9wSFtwaWRkc2kubl0gPj4gMTYpICsgXCIuXCIgKyBTdHJpbmcoUHJvcEhbcGlkZHNpLm5dICYgMHhGRkZGKTtcblx0XHRcdGlmKHBpZGRzaS5uID09IFwiQ29kZVBhZ2VcIikgc3dpdGNoKFByb3BIW3BpZGRzaS5uXSkge1xuXHRcdFx0XHRjYXNlIDA6IFByb3BIW3BpZGRzaS5uXSA9IDEyNTI7XG5cdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlIDg3NDpcblx0XHRcdFx0Y2FzZSA5MzI6XG5cdFx0XHRcdGNhc2UgOTM2OlxuXHRcdFx0XHRjYXNlIDk0OTpcblx0XHRcdFx0Y2FzZSA5NTA6XG5cdFx0XHRcdGNhc2UgMTI1MDpcblx0XHRcdFx0Y2FzZSAxMjUxOlxuXHRcdFx0XHRjYXNlIDEyNTM6XG5cdFx0XHRcdGNhc2UgMTI1NDpcblx0XHRcdFx0Y2FzZSAxMjU1OlxuXHRcdFx0XHRjYXNlIDEyNTY6XG5cdFx0XHRcdGNhc2UgMTI1Nzpcblx0XHRcdFx0Y2FzZSAxMjU4OlxuXHRcdFx0XHRjYXNlIDEwMDAwOlxuXHRcdFx0XHRjYXNlIDEyMDA6XG5cdFx0XHRcdGNhc2UgMTIwMTpcblx0XHRcdFx0Y2FzZSAxMjUyOlxuXHRcdFx0XHRjYXNlIDY1MDAwOiBjYXNlIC01MzY6XG5cdFx0XHRcdGNhc2UgNjUwMDE6IGNhc2UgLTUzNTpcblx0XHRcdFx0XHRzZXRfY3AoQ29kZVBhZ2UgPSAoUHJvcEhbcGlkZHNpLm5dPj4+MCkgJiAweEZGRkYpOyBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6IFwiICsgUHJvcEhbcGlkZHNpLm5dKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoUHJvcHNbaV1bMF0gPT09IDB4MSkge1xuXHRcdFx0XHRDb2RlUGFnZSA9IFByb3BILkNvZGVQYWdlID0gKHBhcnNlX1R5cGVkUHJvcGVydHlWYWx1ZShibG9iLCBWVF9JMikpO1xuXHRcdFx0XHRzZXRfY3AoQ29kZVBhZ2UpO1xuXHRcdFx0XHRpZihEaWN0aW9uYXJ5ICE9PSAtMSkge1xuXHRcdFx0XHRcdHZhciBvbGRwb3MgPSBibG9iLmw7XG5cdFx0XHRcdFx0YmxvYi5sID0gUHJvcHNbRGljdGlvbmFyeV1bMV07XG5cdFx0XHRcdFx0RGljdE9iaiA9IHBhcnNlX2RpY3Rpb25hcnkoYmxvYixDb2RlUGFnZSk7XG5cdFx0XHRcdFx0YmxvYi5sID0gb2xkcG9zO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYoUHJvcHNbaV1bMF0gPT09IDApIHtcblx0XHRcdFx0aWYoQ29kZVBhZ2UgPT09IDApIHsgRGljdGlvbmFyeSA9IGk7IGJsb2IubCA9IFByb3BzW2krMV1bMV07IGNvbnRpbnVlOyB9XG5cdFx0XHRcdERpY3RPYmogPSBwYXJzZV9kaWN0aW9uYXJ5KGJsb2IsQ29kZVBhZ2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIG5hbWUgPSBEaWN0T2JqW1Byb3BzW2ldWzBdXTtcblx0XHRcdFx0dmFyIHZhbDtcblx0XHRcdFx0LyogW01TLU9TSEFSRURdIDIuMy4zLjIuMy4xLjIgKyBQUk9QVkFSSUFOVCAqL1xuXHRcdFx0XHRzd2l0Y2goYmxvYltibG9iLmxdKSB7XG5cdFx0XHRcdFx0Y2FzZSAweDQxIC8qVlRfQkxPQiovOiBibG9iLmwgKz0gNDsgdmFsID0gcGFyc2VfQkxPQihibG9iKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAweDFFIC8qVlRfTFBTVFIqLzogYmxvYi5sICs9IDQ7IHZhbCA9IHBhcnNlX1Z0U3RyaW5nKGJsb2IsIGJsb2JbYmxvYi5sLTRdKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAweDFGIC8qVlRfTFBXU1RSKi86IGJsb2IubCArPSA0OyB2YWwgPSBwYXJzZV9WdFN0cmluZyhibG9iLCBibG9iW2Jsb2IubC00XSk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgMHgwMyAvKlZUX0k0Ki86IGJsb2IubCArPSA0OyB2YWwgPSBibG9iLnJlYWRfc2hpZnQoNCwgJ2knKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAweDEzIC8qVlRfVUk0Ki86IGJsb2IubCArPSA0OyB2YWwgPSBibG9iLnJlYWRfc2hpZnQoNCk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgMHgwNSAvKlZUX1I4Ki86IGJsb2IubCArPSA0OyB2YWwgPSBibG9iLnJlYWRfc2hpZnQoOCwgJ2YnKTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAweDBCIC8qVlRfQk9PTCovOiBibG9iLmwgKz0gNDsgdmFsID0gcGFyc2Vib29sKGJsb2IsIDQpOyBicmVhaztcblx0XHRcdFx0XHRjYXNlIDB4NDAgLypWVF9GSUxFVElNRSovOiBibG9iLmwgKz0gNDsgdmFsID0gcGFyc2VEYXRlKHBhcnNlX0ZJTEVUSU1FKGJsb2IpKTsgYnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwidW5wYXJzZWQgdmFsdWU6IFwiICsgYmxvYltibG9iLmxdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRQcm9wSFtuYW1lXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0YmxvYi5sID0gc3RhcnRfYWRkciArIHNpemU7IC8qIHN0ZXAgYWhlYWQgdG8gc2tpcCBwYWRkaW5nICovXG5cdHJldHVybiBQcm9wSDtcbn1cblxuLyogW01TLU9MRVBTXSAyLjIxIFByb3BlcnR5U2V0U3RyZWFtICovXG5mdW5jdGlvbiBwYXJzZV9Qcm9wZXJ0eVNldFN0cmVhbShmaWxlLCBQSURTSSkge1xuXHR2YXIgYmxvYiA9IGZpbGUuY29udGVudDtcblx0aWYoIWJsb2IpIHJldHVybiAoe30pO1xuXHRwcmVwX2Jsb2IoYmxvYiwgMCk7XG5cblx0dmFyIE51bVNldHMsIEZNVElEMCwgRk1USUQxLCBPZmZzZXQwLCBPZmZzZXQxID0gMDtcblx0YmxvYi5jaGsoJ2ZlZmYnLCAnQnl0ZSBPcmRlcjogJyk7XG5cblx0Lyp2YXIgdmVycyA9ICovYmxvYi5yZWFkX3NoaWZ0KDIpOyAvLyBUT0RPOiBjaGVjayB2ZXJzaW9uXG5cdHZhciBTeXN0ZW1JZGVudGlmaWVyID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRibG9iLmNoayhDRkIudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCwgJ0NMU0lEOiAnKTtcblx0TnVtU2V0cyA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0aWYoTnVtU2V0cyAhPT0gMSAmJiBOdW1TZXRzICE9PSAyKSB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgI1NldHM6IFwiICsgTnVtU2V0cyk7XG5cdEZNVElEMCA9IGJsb2IucmVhZF9zaGlmdCgxNik7IE9mZnNldDAgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cblx0aWYoTnVtU2V0cyA9PT0gMSAmJiBPZmZzZXQwICE9PSBibG9iLmwpIHRocm93IG5ldyBFcnJvcihcIkxlbmd0aCBtaXNtYXRjaDogXCIgKyBPZmZzZXQwICsgXCIgIT09IFwiICsgYmxvYi5sKTtcblx0ZWxzZSBpZihOdW1TZXRzID09PSAyKSB7IEZNVElEMSA9IGJsb2IucmVhZF9zaGlmdCgxNik7IE9mZnNldDEgPSBibG9iLnJlYWRfc2hpZnQoNCk7IH1cblx0dmFyIFBTZXQwID0gcGFyc2VfUHJvcGVydHlTZXQoYmxvYiwgUElEU0kpO1xuXG5cdHZhciBydmFsID0gKHsgU3lzdGVtSWRlbnRpZmllcjogU3lzdGVtSWRlbnRpZmllciB9KTtcblx0Zm9yKHZhciB5IGluIFBTZXQwKSBydmFsW3ldID0gUFNldDBbeV07XG5cdC8vcnZhbC5ibG9iID0gYmxvYjtcblx0cnZhbC5GTVRJRCA9IEZNVElEMDtcblx0Ly9ydmFsLlBTZXQwID0gUFNldDA7XG5cdGlmKE51bVNldHMgPT09IDEpIHJldHVybiBydmFsO1xuXHRpZihibG9iLmwgIT09IE9mZnNldDEpIHRocm93IG5ldyBFcnJvcihcIkxlbmd0aCBtaXNtYXRjaCAyOiBcIiArIGJsb2IubCArIFwiICE9PSBcIiArIE9mZnNldDEpO1xuXHR2YXIgUFNldDE7XG5cdHRyeSB7IFBTZXQxID0gcGFyc2VfUHJvcGVydHlTZXQoYmxvYiwgbnVsbCk7IH0gY2F0Y2goZSkgey8qIGVtcHR5ICovfVxuXHRmb3IoeSBpbiBQU2V0MSkgcnZhbFt5XSA9IFBTZXQxW3ldO1xuXHRydmFsLkZNVElEID0gW0ZNVElEMCwgRk1USUQxXTsgLy8gVE9ETzogdmVyaWZ5IEZNVElEMC8xXG5cdHJldHVybiBydmFsO1xufVxuXG5cbmZ1bmN0aW9uIHBhcnNlbm9vcDIoYmxvYiwgbGVuZ3RoKSB7IGJsb2IucmVhZF9zaGlmdChsZW5ndGgpOyByZXR1cm4gbnVsbDsgfVxuZnVuY3Rpb24gd3JpdGV6ZXJvZXMobiwgbykgeyBpZighbykgbz1uZXdfYnVmKG4pOyBmb3IodmFyIGo9MDsgajxuOyArK2opIG8ud3JpdGVfc2hpZnQoMSwgMCk7IHJldHVybiBvOyB9XG5cbmZ1bmN0aW9uIHBhcnNsdXJwKGJsb2IsIGxlbmd0aCwgY2IpIHtcblx0dmFyIGFyciA9IFtdLCB0YXJnZXQgPSBibG9iLmwgKyBsZW5ndGg7XG5cdHdoaWxlKGJsb2IubCA8IHRhcmdldCkgYXJyLnB1c2goY2IoYmxvYiwgdGFyZ2V0IC0gYmxvYi5sKSk7XG5cdGlmKHRhcmdldCAhPT0gYmxvYi5sKSB0aHJvdyBuZXcgRXJyb3IoXCJTbHVycCBlcnJvclwiKTtcblx0cmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gcGFyc2Vib29sKGJsb2IsIGxlbmd0aCkgeyByZXR1cm4gYmxvYi5yZWFkX3NoaWZ0KGxlbmd0aCkgPT09IDB4MTsgfVxuZnVuY3Rpb24gd3JpdGVib29sKHYsIG8pIHsgaWYoIW8pIG89bmV3X2J1ZigyKTsgby53cml0ZV9zaGlmdCgyLCArISF2KTsgcmV0dXJuIG87IH1cblxuZnVuY3Rpb24gcGFyc2V1aW50MTYoYmxvYikgeyByZXR1cm4gYmxvYi5yZWFkX3NoaWZ0KDIsICd1Jyk7IH1cbmZ1bmN0aW9uIHdyaXRldWludDE2KHYsIG8pIHsgaWYoIW8pIG89bmV3X2J1ZigyKTsgby53cml0ZV9zaGlmdCgyLCB2KTsgcmV0dXJuIG87IH1cbmZ1bmN0aW9uIHBhcnNldWludDE2YShibG9iLCBsZW5ndGgpIHsgcmV0dXJuIHBhcnNsdXJwKGJsb2IsbGVuZ3RoLHBhcnNldWludDE2KTt9XG5cbi8qIC0tLSAyLjUgU3RydWN0dXJlcyAtLS0gKi9cblxuLyogW01TLVhMU10gMi41LjEwIEJlcyAoYm9vbGVhbiBvciBlcnJvcikgKi9cbmZ1bmN0aW9uIHBhcnNlX0JlcyhibG9iKSB7XG5cdHZhciB2ID0gYmxvYi5yZWFkX3NoaWZ0KDEpLCB0ID0gYmxvYi5yZWFkX3NoaWZ0KDEpO1xuXHRyZXR1cm4gdCA9PT0gMHgwMSA/IHYgOiB2ID09PSAweDAxO1xufVxuZnVuY3Rpb24gd3JpdGVfQmVzKHYsIHQsIG8pIHtcblx0aWYoIW8pIG8gPSBuZXdfYnVmKDIpO1xuXHRvLndyaXRlX3NoaWZ0KDEsICt2KTtcblx0by53cml0ZV9zaGlmdCgxLCB0ID09ICdlJyA/IDEgOiAwKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNdIDIuNS4yNDAgU2hvcnRYTFVuaWNvZGVTdHJpbmcgKi9cbmZ1bmN0aW9uIHBhcnNlX1Nob3J0WExVbmljb2RlU3RyaW5nKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgY2NoID0gYmxvYi5yZWFkX3NoaWZ0KG9wdHMgJiYgb3B0cy5iaWZmID49IDEyID8gMiA6IDEpO1xuXHR2YXIgZW5jb2RpbmcgPSAnc2Jjcy1jb250Jztcblx0dmFyIGNwID0gY3VycmVudF9jb2RlcGFnZTtcblx0aWYob3B0cyAmJiBvcHRzLmJpZmYgPj0gOCkgY3VycmVudF9jb2RlcGFnZSA9IDEyMDA7XG5cdGlmKCFvcHRzIHx8IG9wdHMuYmlmZiA9PSA4ICkge1xuXHRcdHZhciBmSGlnaEJ5dGUgPSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdFx0aWYoZkhpZ2hCeXRlKSB7IGVuY29kaW5nID0gJ2RiY3MtY29udCc7IH1cblx0fSBlbHNlIGlmKG9wdHMuYmlmZiA9PSAxMikge1xuXHRcdGVuY29kaW5nID0gJ3dzdHInO1xuXHR9XG5cdGlmKG9wdHMuYmlmZiA+PSAyICYmIG9wdHMuYmlmZiA8PSA1KSBlbmNvZGluZyA9ICdjcHN0cic7XG5cdHZhciBvID0gY2NoID8gYmxvYi5yZWFkX3NoaWZ0KGNjaCwgZW5jb2RpbmcpIDogXCJcIjtcblx0Y3VycmVudF9jb2RlcGFnZSA9IGNwO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi41LjI5MyBYTFVuaWNvZGVSaWNoRXh0ZW5kZWRTdHJpbmcgKi9cbmZ1bmN0aW9uIHBhcnNlX1hMVW5pY29kZVJpY2hFeHRlbmRlZFN0cmluZyhibG9iKSB7XG5cdHZhciBjcCA9IGN1cnJlbnRfY29kZXBhZ2U7XG5cdGN1cnJlbnRfY29kZXBhZ2UgPSAxMjAwO1xuXHR2YXIgY2NoID0gYmxvYi5yZWFkX3NoaWZ0KDIpLCBmbGFncyA9IGJsb2IucmVhZF9zaGlmdCgxKTtcblx0dmFyIC8qZkhpZ2hCeXRlID0gZmxhZ3MgJiAweDEsKi8gZkV4dFN0ID0gZmxhZ3MgJiAweDQsIGZSaWNoU3QgPSBmbGFncyAmIDB4ODtcblx0dmFyIHdpZHRoID0gMSArIChmbGFncyAmIDB4MSk7IC8vIDB4MCAtPiB1dGY4LCAweDEgLT4gZGJjc1xuXHR2YXIgY1J1biA9IDAsIGNiRXh0UnN0O1xuXHR2YXIgeiA9IHt9O1xuXHRpZihmUmljaFN0KSBjUnVuID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRpZihmRXh0U3QpIGNiRXh0UnN0ID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHR2YXIgZW5jb2RpbmcgPSB3aWR0aCA9PSAyID8gJ2RiY3MtY29udCcgOiAnc2Jjcy1jb250Jztcblx0dmFyIG1zZyA9IGNjaCA9PT0gMCA/IFwiXCIgOiBibG9iLnJlYWRfc2hpZnQoY2NoLCBlbmNvZGluZyk7XG5cdGlmKGZSaWNoU3QpIGJsb2IubCArPSA0ICogY1J1bjsgLy9UT0RPOiBwYXJzZSB0aGlzXG5cdGlmKGZFeHRTdCkgYmxvYi5sICs9IGNiRXh0UnN0OyAvL1RPRE86IHBhcnNlIHRoaXNcblx0ei50ID0gbXNnO1xuXHRpZighZlJpY2hTdCkgeyB6LnJhdyA9IFwiPHQ+XCIgKyB6LnQgKyBcIjwvdD5cIjsgei5yID0gei50OyB9XG5cdGN1cnJlbnRfY29kZXBhZ2UgPSBjcDtcblx0cmV0dXJuIHo7XG59XG5cbi8qIDIuNS4yOTYgWExVbmljb2RlU3RyaW5nTm9DY2ggKi9cbmZ1bmN0aW9uIHBhcnNlX1hMVW5pY29kZVN0cmluZ05vQ2NoKGJsb2IsIGNjaCwgb3B0cykge1xuXHR2YXIgcmV0dmFsO1xuXHRpZihvcHRzKSB7XG5cdFx0aWYob3B0cy5iaWZmID49IDIgJiYgb3B0cy5iaWZmIDw9IDUpIHJldHVybiBibG9iLnJlYWRfc2hpZnQoY2NoLCAnY3BzdHInKTtcblx0XHRpZihvcHRzLmJpZmYgPj0gMTIpIHJldHVybiBibG9iLnJlYWRfc2hpZnQoY2NoLCAnZGJjcy1jb250Jyk7XG5cdH1cblx0dmFyIGZIaWdoQnl0ZSA9IGJsb2IucmVhZF9zaGlmdCgxKTtcblx0aWYoZkhpZ2hCeXRlPT09MCkgeyByZXR2YWwgPSBibG9iLnJlYWRfc2hpZnQoY2NoLCAnc2Jjcy1jb250Jyk7IH1cblx0ZWxzZSB7IHJldHZhbCA9IGJsb2IucmVhZF9zaGlmdChjY2gsICdkYmNzLWNvbnQnKTsgfVxuXHRyZXR1cm4gcmV0dmFsO1xufVxuXG4vKiAyLjUuMjk0IFhMVW5pY29kZVN0cmluZyAqL1xuZnVuY3Rpb24gcGFyc2VfWExVbmljb2RlU3RyaW5nKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgY2NoID0gYmxvYi5yZWFkX3NoaWZ0KG9wdHMgJiYgb3B0cy5iaWZmID09IDIgPyAxIDogMik7XG5cdGlmKGNjaCA9PT0gMCkgeyBibG9iLmwrKzsgcmV0dXJuIFwiXCI7IH1cblx0cmV0dXJuIHBhcnNlX1hMVW5pY29kZVN0cmluZ05vQ2NoKGJsb2IsIGNjaCwgb3B0cyk7XG59XG4vKiBCSUZGNSBvdmVycmlkZSAqL1xuZnVuY3Rpb24gcGFyc2VfWExVbmljb2RlU3RyaW5nMihibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0aWYob3B0cy5iaWZmID4gNSkgcmV0dXJuIHBhcnNlX1hMVW5pY29kZVN0cmluZyhibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHR2YXIgY2NoID0gYmxvYi5yZWFkX3NoaWZ0KDEpO1xuXHRpZihjY2ggPT09IDApIHsgYmxvYi5sKys7IHJldHVybiBcIlwiOyB9XG5cdHJldHVybiBibG9iLnJlYWRfc2hpZnQoY2NoLCAob3B0cy5iaWZmIDw9IDQgfHwgIWJsb2IubGVucyApID8gJ2Nwc3RyJyA6ICdzYmNzLWNvbnQnKTtcbn1cbi8qIFRPRE86IEJJRkY1IGFuZCBsb3dlciwgY29kZXBhZ2UgYXdhcmVuZXNzICovXG5mdW5jdGlvbiB3cml0ZV9YTFVuaWNvZGVTdHJpbmcoc3RyLCBvcHRzLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1ZigzICsgMiAqIHN0ci5sZW5ndGgpO1xuXHRvLndyaXRlX3NoaWZ0KDIsIHN0ci5sZW5ndGgpO1xuXHRvLndyaXRlX3NoaWZ0KDEsIDEpO1xuXHRvLndyaXRlX3NoaWZ0KDMxLCBzdHIsICd1dGYxNmxlJyk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtWExTXSAyLjUuNjEgQ29udHJvbEluZm8gKi9cbmZ1bmN0aW9uIHBhcnNlX0NvbnRyb2xJbmZvKGJsb2IpIHtcblx0dmFyIGZsYWdzID0gYmxvYi5yZWFkX3NoaWZ0KDEpO1xuXHRibG9iLmwrKztcblx0dmFyIGFjY2VsID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gMjtcblx0cmV0dXJuIFtmbGFncywgYWNjZWxdO1xufVxuXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjcuNiBVUkxNb25pa2VyIFRPRE86IGZsYWdzICovXG5mdW5jdGlvbiBwYXJzZV9VUkxNb25pa2VyKGJsb2IpIHtcblx0dmFyIGxlbiA9IGJsb2IucmVhZF9zaGlmdCg0KSwgc3RhcnQgPSBibG9iLmw7XG5cdHZhciBleHRyYSA9IGZhbHNlO1xuXHRpZihsZW4gPiAyNCkge1xuXHRcdC8qIGxvb2sgYWhlYWQgKi9cblx0XHRibG9iLmwgKz0gbGVuIC0gMjQ7XG5cdFx0aWYoYmxvYi5yZWFkX3NoaWZ0KDE2KSA9PT0gXCI3OTU4ODFmNDNiMWQ3ZjQ4YWYyYzgyNWRjNDg1Mjc2M1wiKSBleHRyYSA9IHRydWU7XG5cdFx0YmxvYi5sID0gc3RhcnQ7XG5cdH1cblx0dmFyIHVybCA9IGJsb2IucmVhZF9zaGlmdCgoZXh0cmE/bGVuLTI0Omxlbik+PjEsICd1dGYxNmxlJykucmVwbGFjZShjaHIwLFwiXCIpO1xuXHRpZihleHRyYSkgYmxvYi5sICs9IDI0O1xuXHRyZXR1cm4gdXJsO1xufVxuXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjcuOCBGaWxlTW9uaWtlciBUT0RPOiBhbGwgZmllbGRzICovXG5mdW5jdGlvbiBwYXJzZV9GaWxlTW9uaWtlcihibG9iKSB7XG5cdGJsb2IubCArPSAyOyAvL3ZhciBjQW50aSA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0dmFyIGFuc2lQYXRoID0gYmxvYi5yZWFkX3NoaWZ0KDAsICdscHN0ci1hbnNpJyk7XG5cdGJsb2IubCArPSAyOyAvL3ZhciBlbmRTZXJ2ZXIgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdGlmKGJsb2IucmVhZF9zaGlmdCgyKSAhPSAweERFQUQpIHRocm93IG5ldyBFcnJvcihcIkJhZCBGaWxlTW9uaWtlclwiKTtcblx0dmFyIHN6ID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRpZihzeiA9PT0gMCkgcmV0dXJuIGFuc2lQYXRoLnJlcGxhY2UoL1xcXFwvZyxcIi9cIik7XG5cdHZhciBieXRlcyA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0aWYoYmxvYi5yZWFkX3NoaWZ0KDIpICE9IDMpIHRocm93IG5ldyBFcnJvcihcIkJhZCBGaWxlTW9uaWtlclwiKTtcblx0dmFyIHVuaWNvZGVQYXRoID0gYmxvYi5yZWFkX3NoaWZ0KGJ5dGVzPj4xLCAndXRmMTZsZScpLnJlcGxhY2UoY2hyMCxcIlwiKTtcblx0cmV0dXJuIHVuaWNvZGVQYXRoO1xufVxuXG4vKiBbTVMtT1NIQVJFRF0gMi4zLjcuMiBIeXBlcmxpbmtNb25pa2VyIFRPRE86IGFsbCB0aGUgbW9uaWtlcnMgKi9cbmZ1bmN0aW9uIHBhcnNlX0h5cGVybGlua01vbmlrZXIoYmxvYiwgbGVuZ3RoKSB7XG5cdHZhciBjbHNpZCA9IGJsb2IucmVhZF9zaGlmdCgxNik7IGxlbmd0aCAtPSAxNjtcblx0c3dpdGNoKGNsc2lkKSB7XG5cdFx0Y2FzZSBcImUwYzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiXCI6IHJldHVybiBwYXJzZV9VUkxNb25pa2VyKGJsb2IsIGxlbmd0aCk7XG5cdFx0Y2FzZSBcIjAzMDMwMDAwMDAwMDAwMDBjMDAwMDAwMDAwMDAwMDQ2XCI6IHJldHVybiBwYXJzZV9GaWxlTW9uaWtlcihibG9iLCBsZW5ndGgpO1xuXHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIE1vbmlrZXIgXCIgKyBjbHNpZCk7XG5cdH1cbn1cblxuLyogW01TLU9TSEFSRURdIDIuMy43LjkgSHlwZXJsaW5rU3RyaW5nICovXG5mdW5jdGlvbiBwYXJzZV9IeXBlcmxpbmtTdHJpbmcoYmxvYikge1xuXHR2YXIgbGVuID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHR2YXIgbyA9IGxlbiA+IDAgPyBibG9iLnJlYWRfc2hpZnQobGVuLCAndXRmMTZsZScpLnJlcGxhY2UoY2hyMCwgXCJcIikgOiBcIlwiO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLU9TSEFSRURdIDIuMy43LjEgSHlwZXJsaW5rIE9iamVjdCAqL1xuZnVuY3Rpb24gcGFyc2VfSHlwZXJsaW5rKGJsb2IsIGxlbmd0aCkge1xuXHR2YXIgZW5kID0gYmxvYi5sICsgbGVuZ3RoO1xuXHR2YXIgc1ZlciA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0aWYoc1ZlciAhPT0gMikgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246IFwiICsgc1Zlcik7XG5cdHZhciBmbGFncyA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IDI7XG5cdHZhciBkaXNwbGF5TmFtZSwgdGFyZ2V0RnJhbWVOYW1lLCBtb25pa2VyLCBvbGVNb25pa2VyLCBMb2M9XCJcIiwgZ3VpZCwgZmlsZVRpbWU7XG5cdGlmKGZsYWdzICYgMHgwMDEwKSBkaXNwbGF5TmFtZSA9IHBhcnNlX0h5cGVybGlua1N0cmluZyhibG9iLCBlbmQgLSBibG9iLmwpO1xuXHRpZihmbGFncyAmIDB4MDA4MCkgdGFyZ2V0RnJhbWVOYW1lID0gcGFyc2VfSHlwZXJsaW5rU3RyaW5nKGJsb2IsIGVuZCAtIGJsb2IubCk7XG5cdGlmKChmbGFncyAmIDB4MDEwMSkgPT09IDB4MDEwMSkgbW9uaWtlciA9IHBhcnNlX0h5cGVybGlua1N0cmluZyhibG9iLCBlbmQgLSBibG9iLmwpO1xuXHRpZigoZmxhZ3MgJiAweDAxMDEpID09PSAweDAwMDEpIG9sZU1vbmlrZXIgPSBwYXJzZV9IeXBlcmxpbmtNb25pa2VyKGJsb2IsIGVuZCAtIGJsb2IubCk7XG5cdGlmKGZsYWdzICYgMHgwMDA4KSBMb2MgPSBwYXJzZV9IeXBlcmxpbmtTdHJpbmcoYmxvYiwgZW5kIC0gYmxvYi5sKTtcblx0aWYoZmxhZ3MgJiAweDAwMjApIGd1aWQgPSBibG9iLnJlYWRfc2hpZnQoMTYpO1xuXHRpZihmbGFncyAmIDB4MDA0MCkgZmlsZVRpbWUgPSBwYXJzZV9GSUxFVElNRShibG9iLyosIDgqLyk7XG5cdGJsb2IubCA9IGVuZDtcblx0dmFyIHRhcmdldCA9IHRhcmdldEZyYW1lTmFtZXx8bW9uaWtlcnx8b2xlTW9uaWtlcnx8XCJcIjtcblx0aWYodGFyZ2V0ICYmIExvYykgdGFyZ2V0Kz1cIiNcIitMb2M7XG5cdGlmKCF0YXJnZXQpIHRhcmdldCA9IFwiI1wiICsgTG9jO1xuXHR2YXIgb3V0ID0gKHtUYXJnZXQ6dGFyZ2V0fSk7XG5cdGlmKGd1aWQpIG91dC5ndWlkID0gZ3VpZDtcblx0aWYoZmlsZVRpbWUpIG91dC50aW1lID0gZmlsZVRpbWU7XG5cdGlmKGRpc3BsYXlOYW1lKSBvdXQuVG9vbHRpcCA9IGRpc3BsYXlOYW1lO1xuXHRyZXR1cm4gb3V0O1xufVxuZnVuY3Rpb24gd3JpdGVfSHlwZXJsaW5rKGhsKSB7XG5cdHZhciBvdXQgPSBuZXdfYnVmKDUxMiksIGkgPSAwO1xuXHR2YXIgVGFyZ2V0ID0gaGwuVGFyZ2V0O1xuXHR2YXIgRiA9IFRhcmdldC5pbmRleE9mKFwiI1wiKSA+IC0xID8gMHgxZiA6IDB4MTc7XG5cdHN3aXRjaChUYXJnZXQuY2hhckF0KDApKSB7IGNhc2UgXCIjXCI6IEY9MHgxYzsgYnJlYWs7IGNhc2UgXCIuXCI6IEYmPX4yOyBicmVhazsgfVxuXHRvdXQud3JpdGVfc2hpZnQoNCwyKTsgb3V0LndyaXRlX3NoaWZ0KDQsIEYpO1xuXHR2YXIgZGF0YSA9IFs4LDY4MTU4MjcsNjYxOTIzNyw0ODQ5NzgwLDgzXTsgZm9yKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgb3V0LndyaXRlX3NoaWZ0KDQsIGRhdGFbaV0pO1xuXHRpZihGID09IDB4MUMpIHtcblx0XHRUYXJnZXQgPSBUYXJnZXQuc2xpY2UoMSk7XG5cdFx0b3V0LndyaXRlX3NoaWZ0KDQsIFRhcmdldC5sZW5ndGggKyAxKTtcblx0XHRmb3IoaSA9IDA7IGkgPCBUYXJnZXQubGVuZ3RoOyArK2kpIG91dC53cml0ZV9zaGlmdCgyLCBUYXJnZXQuY2hhckNvZGVBdChpKSk7XG5cdFx0b3V0LndyaXRlX3NoaWZ0KDIsIDApO1xuXHR9IGVsc2UgaWYoRiAmIDB4MDIpIHtcblx0XHRkYXRhID0gXCJlMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYlwiLnNwbGl0KFwiIFwiKTtcblx0XHRmb3IoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSBvdXQud3JpdGVfc2hpZnQoMSwgcGFyc2VJbnQoZGF0YVtpXSwgMTYpKTtcblx0XHRvdXQud3JpdGVfc2hpZnQoNCwgMiooVGFyZ2V0Lmxlbmd0aCArIDEpKTtcblx0XHRmb3IoaSA9IDA7IGkgPCBUYXJnZXQubGVuZ3RoOyArK2kpIG91dC53cml0ZV9zaGlmdCgyLCBUYXJnZXQuY2hhckNvZGVBdChpKSk7XG5cdFx0b3V0LndyaXRlX3NoaWZ0KDIsIDApO1xuXHR9IGVsc2Uge1xuXHRcdGRhdGEgPSBcIjAzIDAzIDAwIDAwIDAwIDAwIDAwIDAwIGMwIDAwIDAwIDAwIDAwIDAwIDAwIDQ2XCIuc3BsaXQoXCIgXCIpO1xuXHRcdGZvcihpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIG91dC53cml0ZV9zaGlmdCgxLCBwYXJzZUludChkYXRhW2ldLCAxNikpO1xuXHRcdHZhciBQID0gMDtcblx0XHR3aGlsZShUYXJnZXQuc2xpY2UoUCozLFAqMyszKT09XCIuLi9cInx8VGFyZ2V0LnNsaWNlKFAqMyxQKjMrMyk9PVwiLi5cXFxcXCIpICsrUDtcblx0XHRvdXQud3JpdGVfc2hpZnQoMiwgUCk7XG5cdFx0b3V0LndyaXRlX3NoaWZ0KDQsIFRhcmdldC5sZW5ndGggKyAxKTtcblx0XHRmb3IoaSA9IDA7IGkgPCBUYXJnZXQubGVuZ3RoOyArK2kpIG91dC53cml0ZV9zaGlmdCgxLCBUYXJnZXQuY2hhckNvZGVBdChpKSAmIDB4RkYpO1xuXHRcdG91dC53cml0ZV9zaGlmdCgxLCAwKTtcblx0XHRvdXQud3JpdGVfc2hpZnQoMiwgMHhGRkZGKTtcblx0XHRvdXQud3JpdGVfc2hpZnQoMiwgMHhERUFEKTtcblx0XHRmb3IoaSA9IDA7IGkgPCA2OyArK2kpIG91dC53cml0ZV9zaGlmdCg0LCAwKTtcblx0fVxuXHRyZXR1cm4gb3V0LnNsaWNlKDAsIG91dC5sKTtcbn1cblxuLyogMi41LjE3OCBMb25nUkdCQSAqL1xuZnVuY3Rpb24gcGFyc2VfTG9uZ1JHQkEoYmxvYikgeyB2YXIgciA9IGJsb2IucmVhZF9zaGlmdCgxKSwgZyA9IGJsb2IucmVhZF9zaGlmdCgxKSwgYiA9IGJsb2IucmVhZF9zaGlmdCgxKSwgYSA9IGJsb2IucmVhZF9zaGlmdCgxKTsgcmV0dXJuIFtyLGcsYixhXTsgfVxuXG4vKiAyLjUuMTc3IExvbmdSR0IgKi9cbmZ1bmN0aW9uIHBhcnNlX0xvbmdSR0IoYmxvYiwgbGVuZ3RoKSB7IHZhciB4ID0gcGFyc2VfTG9uZ1JHQkEoYmxvYiwgbGVuZ3RoKTsgeFszXSA9IDA7IHJldHVybiB4OyB9XG5cblxuLyogLS0tIE1TLVhMUyAtLS0gKi9cblxuLyogMi41LjE5ICovXG5mdW5jdGlvbiBwYXJzZV9YTFNDZWxsKGJsb2IpIHtcblx0dmFyIHJ3ID0gYmxvYi5yZWFkX3NoaWZ0KDIpOyAvLyAwLWluZGV4ZWRcblx0dmFyIGNvbCA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0dmFyIGl4ZmUgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHJldHVybiAoe3I6cncsIGM6Y29sLCBpeGZlOml4ZmV9KTtcbn1cbmZ1bmN0aW9uIHdyaXRlX1hMU0NlbGwoUiwgQywgaXhmZSwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoNik7XG5cdG8ud3JpdGVfc2hpZnQoMiwgUik7XG5cdG8ud3JpdGVfc2hpZnQoMiwgQyk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgaXhmZXx8MCk7XG5cdHJldHVybiBvO1xufVxuXG4vKiAyLjUuMTM0ICovXG5mdW5jdGlvbiBwYXJzZV9mcnRIZWFkZXIoYmxvYikge1xuXHR2YXIgcnQgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBmbGFncyA9IGJsb2IucmVhZF9zaGlmdCgyKTsgLy8gVE9ETzogcGFyc2UgdGhlc2UgZmxhZ3Ncblx0YmxvYi5sICs9IDg7XG5cdHJldHVybiB7dHlwZTogcnQsIGZsYWdzOiBmbGFnc307XG59XG5cblxuXG5mdW5jdGlvbiBwYXJzZV9PcHRYTFVuaWNvZGVTdHJpbmcoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7IHJldHVybiBsZW5ndGggPT09IDAgPyBcIlwiIDogcGFyc2VfWExVbmljb2RlU3RyaW5nMihibG9iLCBsZW5ndGgsIG9wdHMpOyB9XG5cbi8qIDIuNS4zNDQgKi9cbmZ1bmN0aW9uIHBhcnNlX1hUSShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHcgPSBvcHRzLmJpZmYgPiA4ID8gNCA6IDI7XG5cdHZhciBpU3VwQm9vayA9IGJsb2IucmVhZF9zaGlmdCh3KSwgaXRhYkZpcnN0ID0gYmxvYi5yZWFkX3NoaWZ0KHcsJ2knKSwgaXRhYkxhc3QgPSBibG9iLnJlYWRfc2hpZnQodywnaScpO1xuXHRyZXR1cm4gW2lTdXBCb29rLCBpdGFiRmlyc3QsIGl0YWJMYXN0XTtcbn1cblxuLyogMi41LjIxOCAqL1xuZnVuY3Rpb24gcGFyc2VfUmtSZWMoYmxvYikge1xuXHR2YXIgaXhmZSA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0dmFyIFJLID0gcGFyc2VfUmtOdW1iZXIoYmxvYik7XG5cdHJldHVybiBbaXhmZSwgUktdO1xufVxuXG4vKiAyLjUuMSAqL1xuZnVuY3Rpb24gcGFyc2VfQWRkaW5VZGYoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdGJsb2IubCArPSA0OyBsZW5ndGggLT0gNDtcblx0dmFyIGwgPSBibG9iLmwgKyBsZW5ndGg7XG5cdHZhciB1ZGZOYW1lID0gcGFyc2VfU2hvcnRYTFVuaWNvZGVTdHJpbmcoYmxvYiwgbGVuZ3RoLCBvcHRzKTtcblx0dmFyIGNiID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRsIC09IGJsb2IubDtcblx0aWYoY2IgIT09IGwpIHRocm93IG5ldyBFcnJvcihcIk1hbGZvcm1lZCBBZGRpblVkZjogcGFkZGluZyA9IFwiICsgbCArIFwiICE9IFwiICsgY2IpO1xuXHRibG9iLmwgKz0gY2I7XG5cdHJldHVybiB1ZGZOYW1lO1xufVxuXG4vKiAyLjUuMjA5IFRPRE86IENoZWNrIHNpemVzICovXG5mdW5jdGlvbiBwYXJzZV9SZWY4VShibG9iKSB7XG5cdHZhciByd0ZpcnN0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgcndMYXN0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgY29sRmlyc3QgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBjb2xMYXN0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRyZXR1cm4ge3M6e2M6Y29sRmlyc3QsIHI6cndGaXJzdH0sIGU6e2M6Y29sTGFzdCxyOnJ3TGFzdH19O1xufVxuZnVuY3Rpb24gd3JpdGVfUmVmOFUociwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoOCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgci5zLnIpO1xuXHRvLndyaXRlX3NoaWZ0KDIsIHIuZS5yKTtcblx0by53cml0ZV9zaGlmdCgyLCByLnMuYyk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgci5lLmMpO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi41LjIxMSAqL1xuZnVuY3Rpb24gcGFyc2VfUmVmVShibG9iKSB7XG5cdHZhciByd0ZpcnN0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgcndMYXN0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgY29sRmlyc3QgPSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdHZhciBjb2xMYXN0ID0gYmxvYi5yZWFkX3NoaWZ0KDEpO1xuXHRyZXR1cm4ge3M6e2M6Y29sRmlyc3QsIHI6cndGaXJzdH0sIGU6e2M6Y29sTGFzdCxyOnJ3TGFzdH19O1xufVxuXG4vKiAyLjUuMjA3ICovXG52YXIgcGFyc2VfUmVmID0gcGFyc2VfUmVmVTtcblxuLyogMi41LjE0MyAqL1xuZnVuY3Rpb24gcGFyc2VfRnRDbW8oYmxvYikge1xuXHRibG9iLmwgKz0gNDtcblx0dmFyIG90ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgaWQgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBmbGFncyA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sKz0xMjtcblx0cmV0dXJuIFtpZCwgb3QsIGZsYWdzXTtcbn1cblxuLyogMi41LjE0OSAqL1xuZnVuY3Rpb24gcGFyc2VfRnROdHMoYmxvYikge1xuXHR2YXIgb3V0ID0ge307XG5cdGJsb2IubCArPSA0O1xuXHRibG9iLmwgKz0gMTY7IC8vIEdVSUQgVE9ET1xuXHRvdXQuZlNoYXJlZE5vdGUgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdGJsb2IubCArPSA0O1xuXHRyZXR1cm4gb3V0O1xufVxuXG4vKiAyLjUuMTQyICovXG5mdW5jdGlvbiBwYXJzZV9GdENmKGJsb2IpIHtcblx0dmFyIG91dCA9IHt9O1xuXHRibG9iLmwgKz0gNDtcblx0YmxvYi5jZiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0cmV0dXJuIG91dDtcbn1cblxuLyogMi41LjE0MCAtIDIuNS4xNTQgYW5kIGZyaWVuZHMgKi9cbmZ1bmN0aW9uIHBhcnNlX0Z0U2tpcChibG9iKSB7IGJsb2IubCArPSAyOyBibG9iLmwgKz0gYmxvYi5yZWFkX3NoaWZ0KDIpOyB9XG52YXIgRnRUYWIgPSB7XG4weDAwOiBwYXJzZV9GdFNraXAsICAgICAgLyogRnRFbmQgKi9cbjB4MDQ6IHBhcnNlX0Z0U2tpcCwgICAgICAvKiBGdE1hY3JvICovXG4weDA1OiBwYXJzZV9GdFNraXAsICAgICAgLyogRnRCdXR0b24gKi9cbjB4MDY6IHBhcnNlX0Z0U2tpcCwgICAgICAvKiBGdEdtbyAqL1xuMHgwNzogcGFyc2VfRnRDZiwgICAgICAgIC8qIEZ0Q2YgKi9cbjB4MDg6IHBhcnNlX0Z0U2tpcCwgICAgICAvKiBGdFBpb0dyYml0ICovXG4weDA5OiBwYXJzZV9GdFNraXAsICAgICAgLyogRnRQaWN0Rm1sYSAqL1xuMHgwQTogcGFyc2VfRnRTa2lwLCAgICAgIC8qIEZ0Q2JscyAqL1xuMHgwQjogcGFyc2VfRnRTa2lwLCAgICAgIC8qIEZ0UmJvICovXG4weDBDOiBwYXJzZV9GdFNraXAsICAgICAgLyogRnRTYnMgKi9cbjB4MEQ6IHBhcnNlX0Z0TnRzLCAgICAgICAvKiBGdE50cyAqL1xuMHgwRTogcGFyc2VfRnRTa2lwLCAgICAgIC8qIEZ0U2JzRm1sYSAqL1xuMHgwRjogcGFyc2VfRnRTa2lwLCAgICAgIC8qIEZ0R2JvRGF0YSAqL1xuMHgxMDogcGFyc2VfRnRTa2lwLCAgICAgIC8qIEZ0RWRvRGF0YSAqL1xuMHgxMTogcGFyc2VfRnRTa2lwLCAgICAgIC8qIEZ0UmJvRGF0YSAqL1xuMHgxMjogcGFyc2VfRnRTa2lwLCAgICAgIC8qIEZ0Q2Jsc0RhdGEgKi9cbjB4MTM6IHBhcnNlX0Z0U2tpcCwgICAgICAvKiBGdExic0RhdGEgKi9cbjB4MTQ6IHBhcnNlX0Z0U2tpcCwgICAgICAvKiBGdENibHNGbWxhICovXG4weDE1OiBwYXJzZV9GdENtb1xufTtcbmZ1bmN0aW9uIHBhcnNlX0Z0QXJyYXkoYmxvYiwgbGVuZ3RoKSB7XG5cdHZhciB0Z3QgPSBibG9iLmwgKyBsZW5ndGg7XG5cdHZhciBmdHMgPSBbXTtcblx0d2hpbGUoYmxvYi5sIDwgdGd0KSB7XG5cdFx0dmFyIGZ0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRcdGJsb2IubC09Mjtcblx0XHR0cnkge1xuXHRcdFx0ZnRzLnB1c2goRnRUYWJbZnRdKGJsb2IsIHRndCAtIGJsb2IubCkpO1xuXHRcdH0gY2F0Y2goZSkgeyBibG9iLmwgPSB0Z3Q7IHJldHVybiBmdHM7IH1cblx0fVxuXHRpZihibG9iLmwgIT0gdGd0KSBibG9iLmwgPSB0Z3Q7IC8vdGhyb3cgbmV3IEVycm9yKFwiYmFkIE9iamVjdCBGdC1zZXF1ZW5jZVwiKTtcblx0cmV0dXJuIGZ0cztcbn1cblxuLyogLS0tIDIuNCBSZWNvcmRzIC0tLSAqL1xuXG4vKiAyLjQuMjEgKi9cbmZ1bmN0aW9uIHBhcnNlX0JPRihibG9iLCBsZW5ndGgpIHtcblx0dmFyIG8gPSB7QklGRlZlcjowLCBkdDowfTtcblx0by5CSUZGVmVyID0gYmxvYi5yZWFkX3NoaWZ0KDIpOyBsZW5ndGggLT0gMjtcblx0aWYobGVuZ3RoID49IDIpIHsgby5kdCA9IGJsb2IucmVhZF9zaGlmdCgyKTsgYmxvYi5sIC09IDI7IH1cblx0c3dpdGNoKG8uQklGRlZlcikge1xuXHRcdGNhc2UgMHgwNjAwOiAvKiBCSUZGOCAqL1xuXHRcdGNhc2UgMHgwNTAwOiAvKiBCSUZGNSAqL1xuXHRcdGNhc2UgMHgwMDAyOiBjYXNlIDB4MDAwNzogLyogQklGRjIgKi9cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6IGlmKGxlbmd0aCA+IDYpIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgQklGRiBWZXIgXCIgKyBvLkJJRkZWZXIpO1xuXHR9XG5cblx0YmxvYi5yZWFkX3NoaWZ0KGxlbmd0aCk7XG5cdHJldHVybiBvO1xufVxuZnVuY3Rpb24gd3JpdGVfQk9GKHdiLCB0LCBvKSB7XG5cdHZhciBoID0gMHgwNjAwLCB3ID0gMTY7XG5cdHN3aXRjaChvLmJvb2tUeXBlKSB7XG5cdFx0Y2FzZSAnYmlmZjgnOiBicmVhaztcblx0XHRjYXNlICdiaWZmNSc6IGggPSAweDA1MDA7IHcgPSA4OyBicmVhaztcblx0XHRjYXNlICdiaWZmNCc6IGggPSAweDAwMDQ7IHcgPSA2OyBicmVhaztcblx0XHRjYXNlICdiaWZmMyc6IGggPSAweDAwMDM7IHcgPSA2OyBicmVhaztcblx0XHRjYXNlICdiaWZmMic6IGggPSAweDAwMDI7IHcgPSA0OyBicmVhaztcblx0XHRjYXNlICd4bGEnOiBicmVhaztcblx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBCSUZGIHZlcnNpb25cIik7XG5cdH1cblx0dmFyIG91dCA9IG5ld19idWYodyk7XG5cdG91dC53cml0ZV9zaGlmdCgyLCBoKTtcblx0b3V0LndyaXRlX3NoaWZ0KDIsIHQpO1xuXHRpZih3ID4gNCkgb3V0LndyaXRlX3NoaWZ0KDIsIDB4NzI2Mik7XG5cdGlmKHcgPiA2KSBvdXQud3JpdGVfc2hpZnQoMiwgMHgwN0NEKTtcblx0aWYodyA+IDgpIHtcblx0XHRvdXQud3JpdGVfc2hpZnQoMiwgMHhDMDA5KTtcblx0XHRvdXQud3JpdGVfc2hpZnQoMiwgMHgwMDAxKTtcblx0XHRvdXQud3JpdGVfc2hpZnQoMiwgMHgwNzA2KTtcblx0XHRvdXQud3JpdGVfc2hpZnQoMiwgMHgwMDAwKTtcblx0fVxuXHRyZXR1cm4gb3V0O1xufVxuXG5cbi8qIDIuNC4xNDYgKi9cbmZ1bmN0aW9uIHBhcnNlX0ludGVyZmFjZUhkcihibG9iLCBsZW5ndGgpIHtcblx0aWYobGVuZ3RoID09PSAwKSByZXR1cm4gMHgwNGIwO1xuXHRpZigoYmxvYi5yZWFkX3NoaWZ0KDIpKSE9PTB4MDRiMCl7LyogZW1wdHkgKi99XG5cdHJldHVybiAweDA0YjA7XG59XG5cblxuLyogMi40LjM0OSAqL1xuZnVuY3Rpb24gcGFyc2VfV3JpdGVBY2Nlc3MoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdGlmKG9wdHMuZW5jKSB7IGJsb2IubCArPSBsZW5ndGg7IHJldHVybiBcIlwiOyB9XG5cdHZhciBsID0gYmxvYi5sO1xuXHQvLyBUT0RPOiBtYWtlIHN1cmUgWExVbmljb2RlU3RyaW5nIGRvZXNudCBvdmVycnVuXG5cdHZhciBVc2VyTmFtZSA9IHBhcnNlX1hMVW5pY29kZVN0cmluZzIoYmxvYiwgMCwgb3B0cyk7XG5cdGJsb2IucmVhZF9zaGlmdChsZW5ndGggKyBsIC0gYmxvYi5sKTtcblx0cmV0dXJuIFVzZXJOYW1lO1xufVxuZnVuY3Rpb24gd3JpdGVfV3JpdGVBY2Nlc3Mocywgb3B0cykge1xuXHR2YXIgYjggPSAhb3B0cyB8fCBvcHRzLmJpZmYgPT0gODtcblx0dmFyIG8gPSBuZXdfYnVmKGI4ID8gMTEyIDogNTQpO1xuXHRvLndyaXRlX3NoaWZ0KG9wdHMuYmlmZiA9PSA4ID8gMiA6IDEsIDcpO1xuXHRvLndyaXRlX3NoaWZ0KDEsIDApO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDB4MzMzMzY4NTMpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDB4MDA1MzRBNzQpO1xuXHR3aGlsZShvLmwgPCBvLmxlbmd0aCkgby53cml0ZV9zaGlmdCgxLCAwKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIDIuNC4zNTEgKi9cbmZ1bmN0aW9uIHBhcnNlX1dzQm9vbChibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGZsYWdzID0gb3B0cyAmJiBvcHRzLmJpZmYgPT0gOCB8fCBsZW5ndGggPT0gMiA/IGJsb2IucmVhZF9zaGlmdCgyKSA6IChibG9iLmwgKz0gbGVuZ3RoLCAwKTtcblx0cmV0dXJuIHsgZkRpYWxvZzogZmxhZ3MgJiAweDEwIH07XG59XG5cbi8qIDIuNC4yOCAqL1xuZnVuY3Rpb24gcGFyc2VfQm91bmRTaGVldDgoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciBwb3MgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHZhciBoaWRkZW4gPSBibG9iLnJlYWRfc2hpZnQoMSkgJiAweDAzO1xuXHR2YXIgZHQgPSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdHN3aXRjaChkdCkge1xuXHRcdGNhc2UgMDogZHQgPSAnV29ya3NoZWV0JzsgYnJlYWs7XG5cdFx0Y2FzZSAxOiBkdCA9ICdNYWNyb3NoZWV0JzsgYnJlYWs7XG5cdFx0Y2FzZSAyOiBkdCA9ICdDaGFydHNoZWV0JzsgYnJlYWs7XG5cdFx0Y2FzZSA2OiBkdCA9ICdWQkFNb2R1bGUnOyBicmVhaztcblx0fVxuXHR2YXIgbmFtZSA9IHBhcnNlX1Nob3J0WExVbmljb2RlU3RyaW5nKGJsb2IsIDAsIG9wdHMpO1xuXHRpZihuYW1lLmxlbmd0aCA9PT0gMCkgbmFtZSA9IFwiU2hlZXQxXCI7XG5cdHJldHVybiB7IHBvczpwb3MsIGhzOmhpZGRlbiwgZHQ6ZHQsIG5hbWU6bmFtZSB9O1xufVxuZnVuY3Rpb24gd3JpdGVfQm91bmRTaGVldDgoZGF0YSwgb3B0cykge1xuXHR2YXIgdyA9ICghb3B0cyB8fCBvcHRzLmJpZmYgPj0gOCA/IDIgOiAxKTtcblx0dmFyIG8gPSBuZXdfYnVmKDggKyB3ICogZGF0YS5uYW1lLmxlbmd0aCk7XG5cdG8ud3JpdGVfc2hpZnQoNCwgZGF0YS5wb3MpO1xuXHRvLndyaXRlX3NoaWZ0KDEsIGRhdGEuaHMgfHwgMCk7XG5cdG8ud3JpdGVfc2hpZnQoMSwgZGF0YS5kdCk7XG5cdG8ud3JpdGVfc2hpZnQoMSwgZGF0YS5uYW1lLmxlbmd0aCk7XG5cdGlmKG9wdHMuYmlmZiA+PSA4KSBvLndyaXRlX3NoaWZ0KDEsIDEpO1xuXHRvLndyaXRlX3NoaWZ0KHcgKiBkYXRhLm5hbWUubGVuZ3RoLCBkYXRhLm5hbWUsIG9wdHMuYmlmZiA8IDggPyAnc2JjcycgOiAndXRmMTZsZScpO1xuXHRyZXR1cm4gby5zbGljZSgwLCBvLmwpO1xufVxuXG4vKiAyLjQuMjY1IFRPRE8gKi9cbmZ1bmN0aW9uIHBhcnNlX1NTVChibG9iLCBsZW5ndGgpIHtcblx0dmFyIGVuZCA9IGJsb2IubCArIGxlbmd0aDtcblx0dmFyIGNudCA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0dmFyIHVjbnQgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHZhciBzdHJzID0gKFtdKTtcblx0Zm9yKHZhciBpID0gMDsgaSAhPSB1Y250ICYmIGJsb2IubCA8IGVuZDsgKytpKSB7XG5cdFx0c3Rycy5wdXNoKHBhcnNlX1hMVW5pY29kZVJpY2hFeHRlbmRlZFN0cmluZyhibG9iKSk7XG5cdH1cblx0c3Rycy5Db3VudCA9IGNudDsgc3Rycy5VbmlxdWUgPSB1Y250O1xuXHRyZXR1cm4gc3Rycztcbn1cblxuLyogMi40LjEwNyAqL1xuZnVuY3Rpb24gcGFyc2VfRXh0U1NUKGJsb2IsIGxlbmd0aCkge1xuXHR2YXIgZXh0c3N0ID0ge307XG5cdGV4dHNzdC5kc3N0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gbGVuZ3RoLTI7XG5cdHJldHVybiBleHRzc3Q7XG59XG5cblxuLyogMi40LjIyMSBUT0RPOiBjaGVjayBCSUZGMi00ICovXG5mdW5jdGlvbiBwYXJzZV9Sb3coYmxvYikge1xuXHR2YXIgeiA9ICh7fSk7XG5cdHouciA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0ei5jID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR6LmNudCA9IGJsb2IucmVhZF9zaGlmdCgyKSAtIHouYztcblx0dmFyIG1peVJ3ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gNDsgLy8gcmVzZXJ2ZWQoMiksIHVudXNlZCgyKVxuXHR2YXIgZmxhZ3MgPSBibG9iLnJlYWRfc2hpZnQoMSk7IC8vIHZhcmlvdXMgZmxhZ3Ncblx0YmxvYi5sICs9IDM7IC8vIHJlc2VydmVkKDgpLCBpeGZlKDEyKSwgZmxhZ3MoNClcblx0aWYoZmxhZ3MgJiAweDA3KSB6LmxldmVsID0gZmxhZ3MgJiAweDA3O1xuXHQvLyBjb2xsYXBzZWQ6IGZsYWdzICYgMHgxMFxuXHRpZihmbGFncyAmIDB4MjApIHouaGlkZGVuID0gdHJ1ZTtcblx0aWYoZmxhZ3MgJiAweDQwKSB6LmhwdCA9IG1peVJ3IC8gMjA7XG5cdHJldHVybiB6O1xufVxuXG5cbi8qIDIuNC4xMjUgKi9cbmZ1bmN0aW9uIHBhcnNlX0ZvcmNlRnVsbENhbGN1bGF0aW9uKGJsb2IpIHtcblx0dmFyIGhlYWRlciA9IHBhcnNlX2ZydEhlYWRlcihibG9iKTtcblx0aWYoaGVhZGVyLnR5cGUgIT0gMHgwOEEzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEZ1dHVyZSBSZWNvcmQgXCIgKyBoZWFkZXIudHlwZSk7XG5cdHZhciBmdWxsY2FsYyA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0cmV0dXJuIGZ1bGxjYWxjICE9PSAweDA7XG59XG5cblxuXG5cblxuLyogMi40LjIxNSBydCAqL1xuZnVuY3Rpb24gcGFyc2VfUmVjYWxjSWQoYmxvYikge1xuXHRibG9iLnJlYWRfc2hpZnQoMik7XG5cdHJldHVybiBibG9iLnJlYWRfc2hpZnQoNCk7XG59XG5cbi8qIDIuNC44NyAqL1xuZnVuY3Rpb24gcGFyc2VfRGVmYXVsdFJvd0hlaWdodChibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGYgPSAwO1xuXHRpZighKG9wdHMgJiYgb3B0cy5iaWZmID09IDIpKSB7XG5cdFx0ZiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0fVxuXHR2YXIgbWl5UncgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdGlmKChvcHRzICYmIG9wdHMuYmlmZiA9PSAyKSkge1xuXHRcdGYgPSAxIC0gKG1peVJ3ID4+IDE1KTsgbWl5UncgJj0gMHg3ZmZmO1xuXHR9XG5cdHZhciBmbCA9IHtVbnN5bmNlZDpmJjEsRHlaZXJvOihmJjIpPj4xLEV4QXNjOihmJjQpPj4yLEV4RHNjOihmJjgpPj4zfTtcblx0cmV0dXJuIFtmbCwgbWl5UnddO1xufVxuXG4vKiAyLjQuMzQ1IFRPRE8gKi9cbmZ1bmN0aW9uIHBhcnNlX1dpbmRvdzEoYmxvYikge1xuXHR2YXIgeFduID0gYmxvYi5yZWFkX3NoaWZ0KDIpLCB5V24gPSBibG9iLnJlYWRfc2hpZnQoMiksIGR4V24gPSBibG9iLnJlYWRfc2hpZnQoMiksIGR5V24gPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBmbGFncyA9IGJsb2IucmVhZF9zaGlmdCgyKSwgaVRhYkN1ciA9IGJsb2IucmVhZF9zaGlmdCgyKSwgaVRhYkZpcnN0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgY3RhYlNlbCA9IGJsb2IucmVhZF9zaGlmdCgyKSwgd1RhYlJhdGlvID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRyZXR1cm4geyBQb3M6IFt4V24sIHlXbl0sIERpbTogW2R4V24sIGR5V25dLCBGbGFnczogZmxhZ3MsIEN1clRhYjogaVRhYkN1cixcblx0XHRGaXJzdFRhYjogaVRhYkZpcnN0LCBTZWxlY3RlZDogY3RhYlNlbCwgVGFiUmF0aW86IHdUYWJSYXRpbyB9O1xufVxuZnVuY3Rpb24gd3JpdGVfV2luZG93MSgpIHtcblx0dmFyIG8gPSBuZXdfYnVmKDE4KTtcblx0by53cml0ZV9zaGlmdCgyLCAwKTtcblx0by53cml0ZV9zaGlmdCgyLCAwKTtcblx0by53cml0ZV9zaGlmdCgyLCAweDcyNjApO1xuXHRvLndyaXRlX3NoaWZ0KDIsIDB4NDRjMCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgMHgzOCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgMCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgMCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgMSk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgMHgwMWY0KTtcblx0cmV0dXJuIG87XG59XG4vKiAyLjQuMzQ2IFRPRE8gKi9cbmZ1bmN0aW9uIHBhcnNlX1dpbmRvdzIoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdGlmKG9wdHMgJiYgb3B0cy5iaWZmID49IDIgJiYgb3B0cy5iaWZmIDwgOCkgcmV0dXJuIHt9O1xuXHR2YXIgZiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0cmV0dXJuIHsgUlRMOiBmICYgMHg0MCB9O1xufVxuZnVuY3Rpb24gd3JpdGVfV2luZG93Mih2aWV3KSB7XG5cdHZhciBvID0gbmV3X2J1ZigxOCksIGYgPSAweDZiNjtcblx0aWYodmlldyAmJiB2aWV3LlJUTCkgZiB8PSAweDQwO1xuXHRvLndyaXRlX3NoaWZ0KDIsIGYpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDY0KTtcblx0by53cml0ZV9zaGlmdCg0LCAwKTtcblx0by53cml0ZV9zaGlmdCg0LCAwKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIDIuNC4xMjIgVE9ETyAqL1xuZnVuY3Rpb24gcGFyc2VfRm9udChibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIG8gPSB7XG5cdFx0ZHlIZWlnaHQ6IGJsb2IucmVhZF9zaGlmdCgyKSxcblx0XHRmbDogYmxvYi5yZWFkX3NoaWZ0KDIpXG5cdH07XG5cdHN3aXRjaChvcHRzICYmIG9wdHMuYmlmZiB8fCA4KSB7XG5cdFx0Y2FzZSAyOiBicmVhaztcblx0XHRjYXNlIDM6IGNhc2UgNDogYmxvYi5sICs9IDI7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IGJsb2IubCArPSAxMDsgYnJlYWs7XG5cdH1cblx0by5uYW1lID0gcGFyc2VfU2hvcnRYTFVuaWNvZGVTdHJpbmcoYmxvYiwgMCwgb3B0cyk7XG5cdHJldHVybiBvO1xufVxuXG4vKiAyLjQuMTQ5ICovXG5mdW5jdGlvbiBwYXJzZV9MYWJlbFNzdChibG9iKSB7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQ2VsbChibG9iKTtcblx0Y2VsbC5pc3N0ID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRyZXR1cm4gY2VsbDtcbn1cblxuLyogMi40LjE0OCAqL1xuZnVuY3Rpb24gcGFyc2VfTGFiZWwoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciB0YXJnZXQgPSBibG9iLmwgKyBsZW5ndGg7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQ2VsbChibG9iLCA2KTtcblx0aWYob3B0cy5iaWZmID09IDIpIGJsb2IubCsrO1xuXHR2YXIgc3RyID0gcGFyc2VfWExVbmljb2RlU3RyaW5nKGJsb2IsIHRhcmdldCAtIGJsb2IubCwgb3B0cyk7XG5cdGNlbGwudmFsID0gc3RyO1xuXHRyZXR1cm4gY2VsbDtcbn1cbmZ1bmN0aW9uIHdyaXRlX0xhYmVsKFIsIEMsIHYsIG9wdHMpIHtcblx0dmFyIGI4ID0gIW9wdHMgfHwgb3B0cy5iaWZmID09IDg7XG5cdHZhciBvID0gbmV3X2J1Zig2ICsgMiArICgrYjgpICsgKDEgKyBiOCkgKiB2Lmxlbmd0aCk7XG5cdHdyaXRlX1hMU0NlbGwoUiwgQywgMCwgbyk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgdi5sZW5ndGgpO1xuXHRpZihiOCkgby53cml0ZV9zaGlmdCgxLCAxKTtcblx0by53cml0ZV9zaGlmdCgoMSArIGI4KSAqIHYubGVuZ3RoLCB2LCBiOCA/ICd1dGYxNmxlJyA6ICdzYmNzJyk7XG5cdHJldHVybiBvO1xufVxuXG5cbi8qIDIuNC4xMjYgTnVtYmVyIEZvcm1hdHMgKi9cbmZ1bmN0aW9uIHBhcnNlX0Zvcm1hdChibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIG51bUZtdElkID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgZm10c3RyID0gcGFyc2VfWExVbmljb2RlU3RyaW5nMihibG9iLCAwLCBvcHRzKTtcblx0cmV0dXJuIFtudW1GbXRJZCwgZm10c3RyXTtcbn1cbnZhciBwYXJzZV9CSUZGMkZvcm1hdCA9IHBhcnNlX1hMVW5pY29kZVN0cmluZzI7XG5cbi8qIDIuNC45MCAqL1xuZnVuY3Rpb24gcGFyc2VfRGltZW5zaW9ucyhibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGVuZCA9IGJsb2IubCArIGxlbmd0aDtcblx0dmFyIHcgPSBvcHRzLmJpZmYgPT0gOCB8fCAhb3B0cy5iaWZmID8gNCA6IDI7XG5cdHZhciByID0gYmxvYi5yZWFkX3NoaWZ0KHcpLCBSID0gYmxvYi5yZWFkX3NoaWZ0KHcpO1xuXHR2YXIgYyA9IGJsb2IucmVhZF9zaGlmdCgyKSwgQyA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sID0gZW5kO1xuXHRyZXR1cm4ge3M6IHtyOnIsIGM6Y30sIGU6IHtyOlIsIGM6Q319O1xufVxuZnVuY3Rpb24gd3JpdGVfRGltZW5zaW9ucyhyYW5nZSwgb3B0cykge1xuXHR2YXIgdyA9IG9wdHMuYmlmZiA9PSA4IHx8ICFvcHRzLmJpZmYgPyA0IDogMjtcblx0dmFyIG8gPSBuZXdfYnVmKDIqdyArIDYpO1xuXHRvLndyaXRlX3NoaWZ0KHcsIHJhbmdlLnMucik7XG5cdG8ud3JpdGVfc2hpZnQodywgcmFuZ2UuZS5yICsgMSk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgcmFuZ2Uucy5jKTtcblx0by53cml0ZV9zaGlmdCgyLCByYW5nZS5lLmMgKyAxKTtcblx0by53cml0ZV9zaGlmdCgyLCAwKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIDIuNC4yMjAgKi9cbmZ1bmN0aW9uIHBhcnNlX1JLKGJsb2IpIHtcblx0dmFyIHJ3ID0gYmxvYi5yZWFkX3NoaWZ0KDIpLCBjb2wgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBya3JlYyA9IHBhcnNlX1JrUmVjKGJsb2IpO1xuXHRyZXR1cm4ge3I6cncsIGM6Y29sLCBpeGZlOnJrcmVjWzBdLCBya251bTpya3JlY1sxXX07XG59XG5cbi8qIDIuNC4xNzUgKi9cbmZ1bmN0aW9uIHBhcnNlX011bFJrKGJsb2IsIGxlbmd0aCkge1xuXHR2YXIgdGFyZ2V0ID0gYmxvYi5sICsgbGVuZ3RoIC0gMjtcblx0dmFyIHJ3ID0gYmxvYi5yZWFkX3NoaWZ0KDIpLCBjb2wgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBya3JlY3MgPSBbXTtcblx0d2hpbGUoYmxvYi5sIDwgdGFyZ2V0KSBya3JlY3MucHVzaChwYXJzZV9Sa1JlYyhibG9iKSk7XG5cdGlmKGJsb2IubCAhPT0gdGFyZ2V0KSB0aHJvdyBuZXcgRXJyb3IoXCJNdWxSSyByZWFkIGVycm9yXCIpO1xuXHR2YXIgbGFzdGNvbCA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0aWYocmtyZWNzLmxlbmd0aCAhPSBsYXN0Y29sIC0gY29sICsgMSkgdGhyb3cgbmV3IEVycm9yKFwiTXVsUksgbGVuZ3RoIG1pc21hdGNoXCIpO1xuXHRyZXR1cm4ge3I6cncsIGM6Y29sLCBDOmxhc3Rjb2wsIHJrcmVjOnJrcmVjc307XG59XG4vKiAyLjQuMTc0ICovXG5mdW5jdGlvbiBwYXJzZV9NdWxCbGFuayhibG9iLCBsZW5ndGgpIHtcblx0dmFyIHRhcmdldCA9IGJsb2IubCArIGxlbmd0aCAtIDI7XG5cdHZhciBydyA9IGJsb2IucmVhZF9zaGlmdCgyKSwgY29sID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgaXhmZXMgPSBbXTtcblx0d2hpbGUoYmxvYi5sIDwgdGFyZ2V0KSBpeGZlcy5wdXNoKGJsb2IucmVhZF9zaGlmdCgyKSk7XG5cdGlmKGJsb2IubCAhPT0gdGFyZ2V0KSB0aHJvdyBuZXcgRXJyb3IoXCJNdWxCbGFuayByZWFkIGVycm9yXCIpO1xuXHR2YXIgbGFzdGNvbCA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0aWYoaXhmZXMubGVuZ3RoICE9IGxhc3Rjb2wgLSBjb2wgKyAxKSB0aHJvdyBuZXcgRXJyb3IoXCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2hcIik7XG5cdHJldHVybiB7cjpydywgYzpjb2wsIEM6bGFzdGNvbCwgaXhmZTppeGZlc307XG59XG5cbi8qIDIuNS4yMCAyLjUuMjQ5IFRPRE86IGludGVycHJldCB2YWx1ZXMgaGVyZSAqL1xuZnVuY3Rpb24gcGFyc2VfQ2VsbFN0eWxlWEYoYmxvYiwgbGVuZ3RoLCBzdHlsZSwgb3B0cykge1xuXHR2YXIgbyA9IHt9O1xuXHR2YXIgYSA9IGJsb2IucmVhZF9zaGlmdCg0KSwgYiA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0dmFyIGMgPSBibG9iLnJlYWRfc2hpZnQoNCksIGQgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdG8ucGF0dGVyblR5cGUgPSBYTFNGaWxsUGF0dGVybltjID4+IDI2XTtcblxuXHRpZighb3B0cy5jZWxsU3R5bGVzKSByZXR1cm4gbztcblx0by5hbGMgPSBhICYgMHgwNztcblx0by5mV3JhcCA9IChhID4+IDMpICYgMHgwMTtcblx0by5hbGNWID0gKGEgPj4gNCkgJiAweDA3O1xuXHRvLmZKdXN0TGFzdCA9IChhID4+IDcpICYgMHgwMTtcblx0by50cm90ID0gKGEgPj4gOCkgJiAweEZGO1xuXHRvLmNJbmRlbnQgPSAoYSA+PiAxNikgJiAweDBGO1xuXHRvLmZTaHJpbmtUb0ZpdCA9IChhID4+IDIwKSAmIDB4MDE7XG5cdG8uaVJlYWRPcmRlciA9IChhID4+IDIyKSAmIDB4MDI7XG5cdG8uZkF0ck51bSA9IChhID4+IDI2KSAmIDB4MDE7XG5cdG8uZkF0ckZudCA9IChhID4+IDI3KSAmIDB4MDE7XG5cdG8uZkF0ckFsYyA9IChhID4+IDI4KSAmIDB4MDE7XG5cdG8uZkF0ckJkciA9IChhID4+IDI5KSAmIDB4MDE7XG5cdG8uZkF0clBhdCA9IChhID4+IDMwKSAmIDB4MDE7XG5cdG8uZkF0clByb3QgPSAoYSA+PiAzMSkgJiAweDAxO1xuXG5cdG8uZGdMZWZ0ID0gYiAmIDB4MEY7XG5cdG8uZGdSaWdodCA9IChiID4+IDQpICYgMHgwRjtcblx0by5kZ1RvcCA9IChiID4+IDgpICYgMHgwRjtcblx0by5kZ0JvdHRvbSA9IChiID4+IDEyKSAmIDB4MEY7XG5cdG8uaWN2TGVmdCA9IChiID4+IDE2KSAmIDB4N0Y7XG5cdG8uaWN2UmlnaHQgPSAoYiA+PiAyMykgJiAweDdGO1xuXHRvLmdyYml0RGlhZyA9IChiID4+IDMwKSAmIDB4MDM7XG5cblx0by5pY3ZUb3AgPSBjICYgMHg3Rjtcblx0by5pY3ZCb3R0b20gPSAoYyA+PiA3KSAmIDB4N0Y7XG5cdG8uaWN2RGlhZyA9IChjID4+IDE0KSAmIDB4N0Y7XG5cdG8uZGdEaWFnID0gKGMgPj4gMjEpICYgMHgwRjtcblxuXHRvLmljdkZvcmUgPSBkICYgMHg3Rjtcblx0by5pY3ZCYWNrID0gKGQgPj4gNykgJiAweDdGO1xuXHRvLmZzeEJ1dHRvbiA9IChkID4+IDE0KSAmIDB4MDE7XG5cdHJldHVybiBvO1xufVxuLy9mdW5jdGlvbiBwYXJzZV9DZWxsWEYoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7cmV0dXJuIHBhcnNlX0NlbGxTdHlsZVhGKGJsb2IsbGVuZ3RoLDAsIG9wdHMpO31cbi8vZnVuY3Rpb24gcGFyc2VfU3R5bGVYRihibG9iLCBsZW5ndGgsIG9wdHMpIHtyZXR1cm4gcGFyc2VfQ2VsbFN0eWxlWEYoYmxvYixsZW5ndGgsMSwgb3B0cyk7fVxuXG4vKiAyLjQuMzUzIFRPRE86IGFjdHVhbGx5IGRvIHRoaXMgcmlnaHQgKi9cbmZ1bmN0aW9uIHBhcnNlX1hGKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgbyA9IHt9O1xuXHRvLmlmbnQgPSBibG9iLnJlYWRfc2hpZnQoMik7IG8ubnVtRm10SWQgPSBibG9iLnJlYWRfc2hpZnQoMik7IG8uZmxhZ3MgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdG8uZlN0eWxlID0gKG8uZmxhZ3MgPj4gMikgJiAweDAxO1xuXHRsZW5ndGggLT0gNjtcblx0by5kYXRhID0gcGFyc2VfQ2VsbFN0eWxlWEYoYmxvYiwgbGVuZ3RoLCBvLmZTdHlsZSwgb3B0cyk7XG5cdHJldHVybiBvO1xufVxuXG4vKiAyLjQuMTM0ICovXG5mdW5jdGlvbiBwYXJzZV9HdXRzKGJsb2IpIHtcblx0YmxvYi5sICs9IDQ7XG5cdHZhciBvdXQgPSBbYmxvYi5yZWFkX3NoaWZ0KDIpLCBibG9iLnJlYWRfc2hpZnQoMildO1xuXHRpZihvdXRbMF0gIT09IDApIG91dFswXS0tO1xuXHRpZihvdXRbMV0gIT09IDApIG91dFsxXS0tO1xuXHRpZihvdXRbMF0gPiA3IHx8IG91dFsxXSA+IDcpIHRocm93IG5ldyBFcnJvcihcIkJhZCBHdXR0ZXJzOiBcIiArIG91dC5qb2luKFwifFwiKSk7XG5cdHJldHVybiBvdXQ7XG59XG5mdW5jdGlvbiB3cml0ZV9HdXRzKGd1dHMpIHtcblx0dmFyIG8gPSBuZXdfYnVmKDgpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRvLndyaXRlX3NoaWZ0KDIsIGd1dHNbMF0gPyBndXRzWzBdICsgMSA6IDApO1xuXHRvLndyaXRlX3NoaWZ0KDIsIGd1dHNbMV0gPyBndXRzWzFdICsgMSA6IDApO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi40LjI0ICovXG5mdW5jdGlvbiBwYXJzZV9Cb29sRXJyKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgY2VsbCA9IHBhcnNlX1hMU0NlbGwoYmxvYiwgNik7XG5cdGlmKG9wdHMuYmlmZiA9PSAyKSArK2Jsb2IubDtcblx0dmFyIHZhbCA9IHBhcnNlX0JlcyhibG9iLCAyKTtcblx0Y2VsbC52YWwgPSB2YWw7XG5cdGNlbGwudCA9ICh2YWwgPT09IHRydWUgfHwgdmFsID09PSBmYWxzZSkgPyAnYicgOiAnZSc7XG5cdHJldHVybiBjZWxsO1xufVxuZnVuY3Rpb24gd3JpdGVfQm9vbEVycihSLCBDLCB2LCBvcHRzLCB0KSB7XG5cdHZhciBvID0gbmV3X2J1Zig4KTtcblx0d3JpdGVfWExTQ2VsbChSLCBDLCAwLCBvKTtcblx0d3JpdGVfQmVzKHYsIHQsIG8pO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi40LjE4MCBOdW1iZXIgKi9cbmZ1bmN0aW9uIHBhcnNlX051bWJlcihibG9iKSB7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQ2VsbChibG9iLCA2KTtcblx0dmFyIHhudW0gPSBwYXJzZV9YbnVtKGJsb2IsIDgpO1xuXHRjZWxsLnZhbCA9IHhudW07XG5cdHJldHVybiBjZWxsO1xufVxuZnVuY3Rpb24gd3JpdGVfTnVtYmVyKFIsIEMsIHYpIHtcblx0dmFyIG8gPSBuZXdfYnVmKDE0KTtcblx0d3JpdGVfWExTQ2VsbChSLCBDLCAwLCBvKTtcblx0d3JpdGVfWG51bSh2LCBvKTtcblx0cmV0dXJuIG87XG59XG5cbnZhciBwYXJzZV9YTEhlYWRlckZvb3RlciA9IHBhcnNlX09wdFhMVW5pY29kZVN0cmluZzsgLy8gVE9ETzogcGFyc2UgMi40LjEzNlxuXG4vKiAyLjQuMjcxICovXG5mdW5jdGlvbiBwYXJzZV9TdXBCb29rKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgZW5kID0gYmxvYi5sICsgbGVuZ3RoO1xuXHR2YXIgY3RhYiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0dmFyIGNjaCA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0b3B0cy5zYmNjaCA9IGNjaDtcblx0aWYoY2NoID09IDB4MDQwMSB8fCBjY2ggPT0gMHgzQTAxKSByZXR1cm4gW2NjaCwgY3RhYl07XG5cdGlmKGNjaCA8IDB4MDEgfHwgY2NoID4weGZmKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogXCIrY2NoKTtcblx0dmFyIHZpcnRQYXRoID0gcGFyc2VfWExVbmljb2RlU3RyaW5nTm9DY2goYmxvYiwgY2NoKTtcblx0LyogVE9ETzogMi41LjI3NyBWaXJ0dWFsIFBhdGggKi9cblx0dmFyIHJnc3QgPSBbXTtcblx0d2hpbGUoZW5kID4gYmxvYi5sKSByZ3N0LnB1c2gocGFyc2VfWExVbmljb2RlU3RyaW5nKGJsb2IpKTtcblx0cmV0dXJuIFtjY2gsIGN0YWIsIHZpcnRQYXRoLCByZ3N0XTtcbn1cblxuLyogMi40LjEwNSBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9FeHRlcm5OYW1lKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgZmxhZ3MgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBib2R5O1xuXHR2YXIgbyA9ICh7XG5cdFx0ZkJ1aWx0SW46IGZsYWdzICYgMHgwMSxcblx0XHRmV2FudEFkdmlzZTogKGZsYWdzID4+PiAxKSAmIDB4MDEsXG5cdFx0ZldhbnRQaWN0OiAoZmxhZ3MgPj4+IDIpICYgMHgwMSxcblx0XHRmT2xlOiAoZmxhZ3MgPj4+IDMpICYgMHgwMSxcblx0XHRmT2xlTGluazogKGZsYWdzID4+PiA0KSAmIDB4MDEsXG5cdFx0Y2Y6IChmbGFncyA+Pj4gNSkgJiAweDNGRixcblx0XHRmSWNvbjogZmxhZ3MgPj4+IDE1ICYgMHgwMVxuXHR9KTtcblx0aWYob3B0cy5zYmNjaCA9PT0gMHgzQTAxKSBib2R5ID0gcGFyc2VfQWRkaW5VZGYoYmxvYiwgbGVuZ3RoLTIsIG9wdHMpO1xuXHQvL2Vsc2UgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgU3VwQm9vayBjY2g6IFwiICsgb3B0cy5zYmNjaCk7XG5cdG8uYm9keSA9IGJvZHkgfHwgYmxvYi5yZWFkX3NoaWZ0KGxlbmd0aC0yKTtcblx0aWYodHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCIpIG8uTmFtZSA9IGJvZHk7XG5cdHJldHVybiBvO1xufVxuXG4vKiAyLjQuMTUwIFRPRE8gKi9cbnZhciBYTFNMYmxCdWlsdEluID0gW1xuXHRcIl94bG5tLkNvbnNvbGlkYXRlX0FyZWFcIixcblx0XCJfeGxubS5BdXRvX09wZW5cIixcblx0XCJfeGxubS5BdXRvX0Nsb3NlXCIsXG5cdFwiX3hsbm0uRXh0cmFjdFwiLFxuXHRcIl94bG5tLkRhdGFiYXNlXCIsXG5cdFwiX3hsbm0uQ3JpdGVyaWFcIixcblx0XCJfeGxubS5QcmludF9BcmVhXCIsXG5cdFwiX3hsbm0uUHJpbnRfVGl0bGVzXCIsXG5cdFwiX3hsbm0uUmVjb3JkZXJcIixcblx0XCJfeGxubS5EYXRhX0Zvcm1cIixcblx0XCJfeGxubS5BdXRvX0FjdGl2YXRlXCIsXG5cdFwiX3hsbm0uQXV0b19EZWFjdGl2YXRlXCIsXG5cdFwiX3hsbm0uU2hlZXRfVGl0bGVcIixcblx0XCJfeGxubS5fRmlsdGVyRGF0YWJhc2VcIlxuXTtcbmZ1bmN0aW9uIHBhcnNlX0xibChibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHRhcmdldCA9IGJsb2IubCArIGxlbmd0aDtcblx0dmFyIGZsYWdzID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgY2hLZXkgPSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdHZhciBjY2ggPSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdHZhciBjY2UgPSBibG9iLnJlYWRfc2hpZnQob3B0cyAmJiBvcHRzLmJpZmYgPT0gMiA/IDEgOiAyKTtcblx0dmFyIGl0YWIgPSAwO1xuXHRpZighb3B0cyB8fCBvcHRzLmJpZmYgPj0gNSkge1xuXHRcdGlmKG9wdHMuYmlmZiAhPSA1KSBibG9iLmwgKz0gMjtcblx0XHRpdGFiID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRcdGlmKG9wdHMuYmlmZiA9PSA1KSBibG9iLmwgKz0gMjtcblx0XHRibG9iLmwgKz0gNDtcblx0fVxuXHR2YXIgbmFtZSA9IHBhcnNlX1hMVW5pY29kZVN0cmluZ05vQ2NoKGJsb2IsIGNjaCwgb3B0cyk7XG5cdGlmKGZsYWdzICYgMHgyMCkgbmFtZSA9IFhMU0xibEJ1aWx0SW5bbmFtZS5jaGFyQ29kZUF0KDApXTtcblx0dmFyIG5wZmxlbiA9IHRhcmdldCAtIGJsb2IubDsgaWYob3B0cyAmJiBvcHRzLmJpZmYgPT0gMikgLS1ucGZsZW47XG5cdHZhciByZ2NlID0gdGFyZ2V0ID09IGJsb2IubCB8fCBjY2UgPT09IDAgPyBbXSA6IHBhcnNlX05hbWVQYXJzZWRGb3JtdWxhKGJsb2IsIG5wZmxlbiwgb3B0cywgY2NlKTtcblx0cmV0dXJuIHtcblx0XHRjaEtleTogY2hLZXksXG5cdFx0TmFtZTogbmFtZSxcblx0XHRpdGFiOiBpdGFiLFxuXHRcdHJnY2U6IHJnY2Vcblx0fTtcbn1cblxuLyogMi40LjEwNiBUT0RPOiB2ZXJpZnkgZmlsZW5hbWUgZW5jb2RpbmcgKi9cbmZ1bmN0aW9uIHBhcnNlX0V4dGVyblNoZWV0KGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHRpZihvcHRzLmJpZmYgPCA4KSByZXR1cm4gcGFyc2VfQklGRjVFeHRlcm5TaGVldChibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHR2YXIgbyA9IFtdLCB0YXJnZXQgPSBibG9iLmwgKyBsZW5ndGgsIGxlbiA9IGJsb2IucmVhZF9zaGlmdChvcHRzLmJpZmYgPiA4ID8gNCA6IDIpO1xuXHR3aGlsZShsZW4tLSAhPT0gMCkgby5wdXNoKHBhcnNlX1hUSShibG9iLCBvcHRzLmJpZmYgPiA4ID8gMTIgOiA2LCBvcHRzKSk7XG5cdFx0Ly8gW2lTdXBCb29rLCBpdGFiRmlyc3QsIGl0YWJMYXN0XTtcblx0aWYoYmxvYi5sICE9IHRhcmdldCkgdGhyb3cgbmV3IEVycm9yKFwiQmFkIEV4dGVyblNoZWV0OiBcIiArIGJsb2IubCArIFwiICE9IFwiICsgdGFyZ2V0KTtcblx0cmV0dXJuIG87XG59XG5mdW5jdGlvbiBwYXJzZV9CSUZGNUV4dGVyblNoZWV0KGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHRpZihibG9iW2Jsb2IubCArIDFdID09IDB4MDMpIGJsb2JbYmxvYi5sXSsrO1xuXHR2YXIgbyA9IHBhcnNlX1Nob3J0WExVbmljb2RlU3RyaW5nKGJsb2IsIGxlbmd0aCwgb3B0cyk7XG5cdHJldHVybiBvLmNoYXJDb2RlQXQoMCkgPT0gMHgwMyA/IG8uc2xpY2UoMSkgOiBvO1xufVxuXG4vKiAyLjQuMTc2IFRPRE86IGNoZWNrIG9sZGVyIGJpZmYgKi9cbmZ1bmN0aW9uIHBhcnNlX05hbWVDbXQoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdGlmKG9wdHMuYmlmZiA8IDgpIHsgYmxvYi5sICs9IGxlbmd0aDsgcmV0dXJuOyB9XG5cdHZhciBjY2hOYW1lID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgY2NoQ29tbWVudCA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0dmFyIG5hbWUgPSBwYXJzZV9YTFVuaWNvZGVTdHJpbmdOb0NjaChibG9iLCBjY2hOYW1lLCBvcHRzKTtcblx0dmFyIGNvbW1lbnQgPSBwYXJzZV9YTFVuaWNvZGVTdHJpbmdOb0NjaChibG9iLCBjY2hDb21tZW50LCBvcHRzKTtcblx0cmV0dXJuIFtuYW1lLCBjb21tZW50XTtcbn1cblxuLyogMi40LjI2MCAqL1xuZnVuY3Rpb24gcGFyc2VfU2hyRm1sYShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHJlZiA9IHBhcnNlX1JlZlUoYmxvYiwgNik7XG5cdGJsb2IubCsrO1xuXHR2YXIgY1VzZSA9IGJsb2IucmVhZF9zaGlmdCgxKTtcblx0bGVuZ3RoIC09IDg7XG5cdHJldHVybiBbcGFyc2VfU2hhcmVkUGFyc2VkRm9ybXVsYShibG9iLCBsZW5ndGgsIG9wdHMpLCBjVXNlLCByZWZdO1xufVxuXG4vKiAyLjQuNCBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9BcnJheShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHJlZiA9IHBhcnNlX1JlZihibG9iLCA2KTtcblx0LyogVE9ETzogZkFsd2F5c0NhbGMgKi9cblx0c3dpdGNoKG9wdHMuYmlmZikge1xuXHRcdGNhc2UgMjogYmxvYi5sICsrOyBsZW5ndGggLT0gNzsgYnJlYWs7XG5cdFx0Y2FzZSAzOiBjYXNlIDQ6IGJsb2IubCArPSAyOyBsZW5ndGggLT0gODsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogYmxvYi5sICs9IDY7IGxlbmd0aCAtPSAxMjtcblx0fVxuXHRyZXR1cm4gW3JlZiwgcGFyc2VfQXJyYXlQYXJzZWRGb3JtdWxhKGJsb2IsIGxlbmd0aCwgb3B0cywgcmVmKV07XG59XG5cbi8qIDIuNC4xNzMgKi9cbmZ1bmN0aW9uIHBhcnNlX01UUlNldHRpbmdzKGJsb2IpIHtcblx0dmFyIGZNVFJFbmFibGVkID0gYmxvYi5yZWFkX3NoaWZ0KDQpICE9PSAweDAwO1xuXHR2YXIgZlVzZXJTZXRUaHJlYWRDb3VudCA9IGJsb2IucmVhZF9zaGlmdCg0KSAhPT0gMHgwMDtcblx0dmFyIGNVc2VyVGhyZWFkQ291bnQgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHJldHVybiBbZk1UUkVuYWJsZWQsIGZVc2VyU2V0VGhyZWFkQ291bnQsIGNVc2VyVGhyZWFkQ291bnRdO1xufVxuXG4vKiAyLjUuMTg2IFRPRE86IEJJRkY1ICovXG5mdW5jdGlvbiBwYXJzZV9Ob3RlU2goYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdGlmKG9wdHMuYmlmZiA8IDgpIHJldHVybjtcblx0dmFyIHJvdyA9IGJsb2IucmVhZF9zaGlmdCgyKSwgY29sID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgZmxhZ3MgPSBibG9iLnJlYWRfc2hpZnQoMiksIGlkT2JqID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgc3RBdXRob3IgPSBwYXJzZV9YTFVuaWNvZGVTdHJpbmcyKGJsb2IsIDAsIG9wdHMpO1xuXHRpZihvcHRzLmJpZmYgPCA4KSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdHJldHVybiBbe3I6cm93LGM6Y29sfSwgc3RBdXRob3IsIGlkT2JqLCBmbGFnc107XG59XG5cbi8qIDIuNC4xNzkgKi9cbmZ1bmN0aW9uIHBhcnNlX05vdGUoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdC8qIFRPRE86IFN1cHBvcnQgcmV2aXNpb25zICovXG5cdHJldHVybiBwYXJzZV9Ob3RlU2goYmxvYiwgbGVuZ3RoLCBvcHRzKTtcbn1cblxuLyogMi40LjE2OCAqL1xuZnVuY3Rpb24gcGFyc2VfTWVyZ2VDZWxscyhibG9iLCBsZW5ndGgpIHtcblx0dmFyIG1lcmdlcyA9IFtdO1xuXHR2YXIgY21jcyA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0d2hpbGUgKGNtY3MtLSkgbWVyZ2VzLnB1c2gocGFyc2VfUmVmOFUoYmxvYixsZW5ndGgpKTtcblx0cmV0dXJuIG1lcmdlcztcbn1cbmZ1bmN0aW9uIHdyaXRlX01lcmdlQ2VsbHMobWVyZ2VzKSB7XG5cdHZhciBvID0gbmV3X2J1ZigyICsgbWVyZ2VzLmxlbmd0aCAqIDgpO1xuXHRvLndyaXRlX3NoaWZ0KDIsIG1lcmdlcy5sZW5ndGgpO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbWVyZ2VzLmxlbmd0aDsgKytpKSB3cml0ZV9SZWY4VShtZXJnZXNbaV0sIG8pO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi40LjE4MSBUT0RPOiBwYXJzZSBhbGwgdGhlIHRoaW5ncyEgKi9cbmZ1bmN0aW9uIHBhcnNlX09iaihibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0aWYob3B0cyAmJiBvcHRzLmJpZmYgPCA4KSByZXR1cm4gcGFyc2VfQklGRjVPYmooYmxvYiwgbGVuZ3RoLCBvcHRzKTtcblx0dmFyIGNtbyA9IHBhcnNlX0Z0Q21vKGJsb2IsIDIyKTsgLy8gaWQsIG90LCBmbGFnc1xuXHR2YXIgZnRzID0gcGFyc2VfRnRBcnJheShibG9iLCBsZW5ndGgtMjIsIGNtb1sxXSk7XG5cdHJldHVybiB7IGNtbzogY21vLCBmdDpmdHMgfTtcbn1cbi8qIGZyb20gb2xkZXIgc3BlYyAqL1xudmFyIHBhcnNlX0JJRkY1T1QgPSBbXTtcbnBhcnNlX0JJRkY1T1RbMHgwOF0gPSBmdW5jdGlvbihibG9iLCBsZW5ndGgpIHtcblx0dmFyIHRndCA9IGJsb2IubCArIGxlbmd0aDtcblx0YmxvYi5sICs9IDEwOyAvLyB0b2RvXG5cdHZhciBjZiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IDQ7XG5cdGJsb2IubCArPSAyOyAvL3ZhciBjYlBpY3RGbWxhID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gMjtcblx0YmxvYi5sICs9IDI7IC8vdmFyIGdyYml0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gNDtcblx0dmFyIGNjaE5hbWUgPSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdGJsb2IubCArPSBjY2hOYW1lOyAvLyBUT0RPOiBzdE5hbWVcblx0YmxvYi5sID0gdGd0OyAvLyBUT0RPOiBmbWxhXG5cdHJldHVybiB7IGZtdDpjZiB9O1xufTtcblxuZnVuY3Rpb24gcGFyc2VfQklGRjVPYmooYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdGJsb2IubCArPSA0OyAvL3ZhciBjbnQgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHZhciBvdCA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0dmFyIGlkID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgZ3JiaXQgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdGJsb2IubCArPSAyOyAvL3ZhciBjb2xMID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gMjsgLy92YXIgZHhMID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gMjsgLy92YXIgcndUID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gMjsgLy92YXIgZHlUID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRibG9iLmwgKz0gMjsgLy92YXIgY29sUiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IDI7IC8vdmFyIGR4UiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IDI7IC8vdmFyIHJ3QiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IDI7IC8vdmFyIGR5QiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IDI7IC8vdmFyIGNiTWFjcm8gPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdGJsb2IubCArPSA2O1xuXHRsZW5ndGggLT0gMzY7XG5cdHZhciBmdHMgPSBbXTtcblx0ZnRzLnB1c2goKHBhcnNlX0JJRkY1T1Rbb3RdfHxwYXJzZW5vb3ApKGJsb2IsIGxlbmd0aCwgb3B0cykpO1xuXHRyZXR1cm4geyBjbW86IFtpZCwgb3QsIGdyYml0XSwgZnQ6ZnRzIH07XG59XG5cbi8qIDIuNC4zMjkgVE9ETzogcGFyc2UgcHJvcGVybHkgKi9cbmZ1bmN0aW9uIHBhcnNlX1R4TyhibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHMgPSBibG9iLmw7XG5cdHZhciB0ZXh0cyA9IFwiXCI7XG50cnkge1xuXHRibG9iLmwgKz0gNDtcblx0dmFyIG90ID0gKG9wdHMubGFzdG9ianx8e2NtbzpbMCwwXX0pLmNtb1sxXTtcblx0dmFyIGNvbnRyb2xJbmZvOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cdGlmKFswLDUsNywxMSwxMiwxNF0uaW5kZXhPZihvdCkgPT0gLTEpIGJsb2IubCArPSA2O1xuXHRlbHNlIGNvbnRyb2xJbmZvID0gcGFyc2VfQ29udHJvbEluZm8oYmxvYiwgNiwgb3B0cyk7XG5cdHZhciBjY2hUZXh0ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHQvKnZhciBjYlJ1bnMgPSAqL2Jsb2IucmVhZF9zaGlmdCgyKTtcblx0Lyp2YXIgaWZudEVtcHR5ID0gKi9wYXJzZXVpbnQxNihibG9iLCAyKTtcblx0dmFyIGxlbiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IGxlbjtcblx0Ly92YXIgZm1sYSA9IHBhcnNlX09iakZtbGEoYmxvYiwgcyArIGxlbmd0aCAtIGJsb2IubCk7XG5cblx0Zm9yKHZhciBpID0gMTsgaSA8IGJsb2IubGVucy5sZW5ndGgtMTsgKytpKSB7XG5cdFx0aWYoYmxvYi5sLXMgIT0gYmxvYi5sZW5zW2ldKSB0aHJvdyBuZXcgRXJyb3IoXCJUeE86IGJhZCBjb250aW51ZSByZWNvcmRcIik7XG5cdFx0dmFyIGhkciA9IGJsb2JbYmxvYi5sXTtcblx0XHR2YXIgdCA9IHBhcnNlX1hMVW5pY29kZVN0cmluZ05vQ2NoKGJsb2IsIGJsb2IubGVuc1tpKzFdLWJsb2IubGVuc1tpXS0xKTtcblx0XHR0ZXh0cyArPSB0O1xuXHRcdGlmKHRleHRzLmxlbmd0aCA+PSAoaGRyID8gY2NoVGV4dCA6IDIqY2NoVGV4dCkpIGJyZWFrO1xuXHR9XG5cdGlmKHRleHRzLmxlbmd0aCAhPT0gY2NoVGV4dCAmJiB0ZXh0cy5sZW5ndGggIT09IGNjaFRleHQqMikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcImNjaFRleHQ6IFwiICsgY2NoVGV4dCArIFwiICE9IFwiICsgdGV4dHMubGVuZ3RoKTtcblx0fVxuXG5cdGJsb2IubCA9IHMgKyBsZW5ndGg7XG5cdC8qIDIuNS4yNzIgVHhPUnVucyAqL1xuLy9cdHZhciByZ1R4b1J1bnMgPSBbXTtcbi8vXHRmb3IodmFyIGogPSAwOyBqICE9IGNiUnVucy84LTE7ICsraikgYmxvYi5sICs9IDg7XG4vL1x0dmFyIGNjaFRleHQyID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuLy9cdGlmKGNjaFRleHQyICE9PSBjY2hUZXh0KSB0aHJvdyBuZXcgRXJyb3IoXCJUeE9MYXN0UnVuIG1pc21hdGNoOiBcIiArIGNjaFRleHQyICsgXCIgXCIgKyBjY2hUZXh0KTtcbi8vXHRibG9iLmwgKz0gNjtcbi8vXHRpZihzICsgbGVuZ3RoICE9IGJsb2IubCkgdGhyb3cgbmV3IEVycm9yKFwiVHhPIFwiICsgKHMgKyBsZW5ndGgpICsgXCIsIGF0IFwiICsgYmxvYi5sKTtcblx0cmV0dXJuIHsgdDogdGV4dHMgfTtcbn0gY2F0Y2goZSkgeyBibG9iLmwgPSBzICsgbGVuZ3RoOyByZXR1cm4geyB0OiB0ZXh0cyB9OyB9XG59XG5cbi8qIDIuNC4xNDAgKi9cbmZ1bmN0aW9uIHBhcnNlX0hMaW5rKGJsb2IsIGxlbmd0aCkge1xuXHR2YXIgcmVmID0gcGFyc2VfUmVmOFUoYmxvYiwgOCk7XG5cdGJsb2IubCArPSAxNjsgLyogQ0xTSUQgKi9cblx0dmFyIGhsaW5rID0gcGFyc2VfSHlwZXJsaW5rKGJsb2IsIGxlbmd0aC0yNCk7XG5cdHJldHVybiBbcmVmLCBobGlua107XG59XG5mdW5jdGlvbiB3cml0ZV9ITGluayhobCkge1xuXHR2YXIgTyA9IG5ld19idWYoMjQpO1xuXHR2YXIgcmVmID0gZGVjb2RlX2NlbGwoaGxbMF0pO1xuXHRPLndyaXRlX3NoaWZ0KDIsIHJlZi5yKTsgTy53cml0ZV9zaGlmdCgyLCByZWYucik7XG5cdE8ud3JpdGVfc2hpZnQoMiwgcmVmLmMpOyBPLndyaXRlX3NoaWZ0KDIsIHJlZi5jKTtcblx0dmFyIGNsc2lkID0gXCJkMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYlwiLnNwbGl0KFwiIFwiKTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIE8ud3JpdGVfc2hpZnQoMSwgcGFyc2VJbnQoY2xzaWRbaV0sIDE2KSk7XG5cdHJldHVybiBiY29uY2F0KFtPLCB3cml0ZV9IeXBlcmxpbmsoaGxbMV0pXSk7XG59XG5cblxuLyogMi40LjE0MSAqL1xuZnVuY3Rpb24gcGFyc2VfSExpbmtUb29sdGlwKGJsb2IsIGxlbmd0aCkge1xuXHRibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciByZWYgPSBwYXJzZV9SZWY4VShibG9iLCA4KTtcblx0dmFyIHd6VG9vbHRpcCA9IGJsb2IucmVhZF9zaGlmdCgobGVuZ3RoLTEwKS8yLCAnZGJjcy1jb250Jyk7XG5cdHd6VG9vbHRpcCA9IHd6VG9vbHRpcC5yZXBsYWNlKGNocjAsXCJcIik7XG5cdHJldHVybiBbcmVmLCB3elRvb2x0aXBdO1xufVxuZnVuY3Rpb24gd3JpdGVfSExpbmtUb29sdGlwKGhsKSB7XG5cdHZhciBUVCA9IGhsWzFdLlRvb2x0aXA7XG5cdHZhciBPID0gbmV3X2J1ZigxMCArIDIgKiAoVFQubGVuZ3RoICsgMSkpO1xuXHRPLndyaXRlX3NoaWZ0KDIsIDB4MDgwMCk7XG5cdHZhciByZWYgPSBkZWNvZGVfY2VsbChobFswXSk7XG5cdE8ud3JpdGVfc2hpZnQoMiwgcmVmLnIpOyBPLndyaXRlX3NoaWZ0KDIsIHJlZi5yKTtcblx0Ty53cml0ZV9zaGlmdCgyLCByZWYuYyk7IE8ud3JpdGVfc2hpZnQoMiwgcmVmLmMpO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgVFQubGVuZ3RoOyArK2kpIE8ud3JpdGVfc2hpZnQoMiwgVFQuY2hhckNvZGVBdChpKSk7XG5cdE8ud3JpdGVfc2hpZnQoMiwgMCk7XG5cdHJldHVybiBPO1xufVxuXG4vKiAyLjQuNjMgKi9cbmZ1bmN0aW9uIHBhcnNlX0NvdW50cnkoYmxvYikge1xuXHR2YXIgbyA9IFswLDBdLCBkO1xuXHRkID0gYmxvYi5yZWFkX3NoaWZ0KDIpOyBvWzBdID0gQ291bnRyeUVudW1bZF0gfHwgZDtcblx0ZCA9IGJsb2IucmVhZF9zaGlmdCgyKTsgb1sxXSA9IENvdW50cnlFbnVtW2RdIHx8IGQ7XG5cdHJldHVybiBvO1xufVxuZnVuY3Rpb24gd3JpdGVfQ291bnRyeShvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1Zig0KTtcblx0by53cml0ZV9zaGlmdCgyLCAweDAxKTtcblx0by53cml0ZV9zaGlmdCgyLCAweDAxKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIDIuNC41MCBDbHJ0Q2xpZW50ICovXG5mdW5jdGlvbiBwYXJzZV9DbHJ0Q2xpZW50KGJsb2IpIHtcblx0dmFyIGNjdiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0dmFyIG8gPSBbXTtcblx0d2hpbGUoY2N2LS0+MCkgby5wdXNoKHBhcnNlX0xvbmdSR0IoYmxvYiwgOCkpO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi40LjE4OCAqL1xuZnVuY3Rpb24gcGFyc2VfUGFsZXR0ZShibG9iKSB7XG5cdHZhciBjY3YgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBvID0gW107XG5cdHdoaWxlKGNjdi0tPjApIG8ucHVzaChwYXJzZV9Mb25nUkdCKGJsb2IsIDgpKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIDIuNC4zNTQgKi9cbmZ1bmN0aW9uIHBhcnNlX1hGQ1JDKGJsb2IpIHtcblx0YmxvYi5sICs9IDI7XG5cdHZhciBvID0ge2N4ZnM6MCwgY3JjOjB9O1xuXHRvLmN4ZnMgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdG8uY3JjID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi40LjUzIFRPRE86IHBhcnNlIGZsYWdzICovXG4vKiBbTVMtWExTQl0gMi40LjMyMyBUT0RPOiBwYXJzZSBmbGFncyAqL1xuZnVuY3Rpb24gcGFyc2VfQ29sSW5mbyhibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0aWYoIW9wdHMuY2VsbFN0eWxlcykgcmV0dXJuIHBhcnNlbm9vcChibG9iLCBsZW5ndGgpO1xuXHR2YXIgdyA9IG9wdHMgJiYgb3B0cy5iaWZmID49IDEyID8gNCA6IDI7XG5cdHZhciBjb2xGaXJzdCA9IGJsb2IucmVhZF9zaGlmdCh3KTtcblx0dmFyIGNvbExhc3QgPSBibG9iLnJlYWRfc2hpZnQodyk7XG5cdHZhciBjb2xkeCA9IGJsb2IucmVhZF9zaGlmdCh3KTtcblx0dmFyIGl4ZmUgPSBibG9iLnJlYWRfc2hpZnQodyk7XG5cdHZhciBmbGFncyA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0aWYodyA9PSAyKSBibG9iLmwgKz0gMjtcblx0cmV0dXJuIHtzOmNvbEZpcnN0LCBlOmNvbExhc3QsIHc6Y29sZHgsIGl4ZmU6aXhmZSwgZmxhZ3M6ZmxhZ3N9O1xufVxuXG4vKiAyLjQuMjU3ICovXG5mdW5jdGlvbiBwYXJzZV9TZXR1cChibG9iLyosIGxlbmd0aCovKSB7XG5cdHZhciBvID0ge307XG5cdGJsb2IubCArPSAxNjtcblx0by5oZWFkZXIgPSBwYXJzZV9YbnVtKGJsb2IsIDgpO1xuXHRvLmZvb3RlciA9IHBhcnNlX1hudW0oYmxvYiwgOCk7XG5cdGJsb2IubCArPSAyO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi40LjI2MSAqL1xuZnVuY3Rpb24gcGFyc2VfU2h0UHJvcHMoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciBkZWYgPSB7YXJlYTpmYWxzZX07XG5cdGlmKG9wdHMuYmlmZiAhPSA1KSB7IGJsb2IubCArPSBsZW5ndGg7IHJldHVybiBkZWY7IH1cblx0dmFyIGQgPSBibG9iLnJlYWRfc2hpZnQoMSk7IGJsb2IubCArPSAzO1xuXHRpZigoZCAmIDB4MTApKSBkZWYuYXJlYSA9IHRydWU7XG5cdHJldHVybiBkZWY7XG59XG5cbi8qIDIuNC4yNDEgKi9cbmZ1bmN0aW9uIHdyaXRlX1JSVGFiSWQobikge1xuXHR2YXIgb3V0ID0gbmV3X2J1ZigyICogbik7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyArK2kpIG91dC53cml0ZV9zaGlmdCgyLCBpKzEpO1xuXHRyZXR1cm4gb3V0O1xufVxuXG52YXIgcGFyc2VfQmxhbmsgPSBwYXJzZV9YTFNDZWxsOyAvKiAyLjQuMjAgSnVzdCB0aGUgY2VsbCAqL1xudmFyIHBhcnNlX1NjbCA9IHBhcnNldWludDE2YTsgLyogMi40LjI0NyBudW0sIGRlbiAqL1xudmFyIHBhcnNlX1N0cmluZyA9IHBhcnNlX1hMVW5pY29kZVN0cmluZzsgLyogMi40LjI2OCAqL1xuXG4vKiAtLS0gU3BlY2lmaWMgdG8gdmVyc2lvbnMgYmVmb3JlIEJJRkY4IC0tLSAqL1xuZnVuY3Rpb24gcGFyc2VfSW1EYXRhKGJsb2IpIHtcblx0dmFyIGNmID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgZW52ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgbGNiID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHR2YXIgbyA9IHtmbXQ6Y2YsIGVudjplbnYsIGxlbjpsY2IsIGRhdGE6YmxvYi5zbGljZShibG9iLmwsYmxvYi5sK2xjYil9O1xuXHRibG9iLmwgKz0gbGNiO1xuXHRyZXR1cm4gbztcbn1cblxuLyogQklGRjJfPz8/IHdoZXJlID8/PyBpcyB0aGUgbmFtZSBmcm9tIFtYTFNdICovXG5mdW5jdGlvbiBwYXJzZV9CSUZGMlNUUihibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGNlbGwgPSBwYXJzZV9YTFNDZWxsKGJsb2IsIDYpO1xuXHQrK2Jsb2IubDtcblx0dmFyIHN0ciA9IHBhcnNlX1hMVW5pY29kZVN0cmluZzIoYmxvYiwgbGVuZ3RoLTcsIG9wdHMpO1xuXHRjZWxsLnQgPSAnc3RyJztcblx0Y2VsbC52YWwgPSBzdHI7XG5cdHJldHVybiBjZWxsO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9CSUZGMk5VTShibG9iKSB7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQ2VsbChibG9iLCA2KTtcblx0KytibG9iLmw7XG5cdHZhciBudW0gPSBwYXJzZV9YbnVtKGJsb2IsIDgpO1xuXHRjZWxsLnQgPSAnbic7XG5cdGNlbGwudmFsID0gbnVtO1xuXHRyZXR1cm4gY2VsbDtcbn1cbmZ1bmN0aW9uIHdyaXRlX0JJRkYyTlVNKHIsIGMsIHZhbCkge1xuXHR2YXIgb3V0ID0gbmV3X2J1ZigxNSk7XG5cdHdyaXRlX0JJRkYyQ2VsbChvdXQsIHIsIGMpO1xuXHRvdXQud3JpdGVfc2hpZnQoOCwgdmFsLCAnZicpO1xuXHRyZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBwYXJzZV9CSUZGMklOVChibG9iKSB7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQ2VsbChibG9iLCA2KTtcblx0KytibG9iLmw7XG5cdHZhciBudW0gPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdGNlbGwudCA9ICduJztcblx0Y2VsbC52YWwgPSBudW07XG5cdHJldHVybiBjZWxsO1xufVxuZnVuY3Rpb24gd3JpdGVfQklGRjJJTlQociwgYywgdmFsKSB7XG5cdHZhciBvdXQgPSBuZXdfYnVmKDkpO1xuXHR3cml0ZV9CSUZGMkNlbGwob3V0LCByLCBjKTtcblx0b3V0LndyaXRlX3NoaWZ0KDIsIHZhbCk7XG5cdHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX0JJRkYyU1RSSU5HKGJsb2IpIHtcblx0dmFyIGNjaCA9IGJsb2IucmVhZF9zaGlmdCgxKTtcblx0aWYoY2NoID09PSAwKSB7IGJsb2IubCsrOyByZXR1cm4gXCJcIjsgfVxuXHRyZXR1cm4gYmxvYi5yZWFkX3NoaWZ0KGNjaCwgJ3NiY3MtY29udCcpO1xufVxuXG4vKiBUT0RPOiBjb252ZXJ0IHRvIEJJRkY4IGZvbnQgc3RydWN0ICovXG5mdW5jdGlvbiBwYXJzZV9CSUZGMkZPTlRYVFJBKGJsb2IsIGxlbmd0aCkge1xuXHRibG9iLmwgKz0gNjsgLy8gdW5rbm93blxuXHRibG9iLmwgKz0gMjsgLy8gZm9udCB3ZWlnaHQgXCJibHNcIlxuXHRibG9iLmwgKz0gMTsgLy8gY2hhcnNldFxuXHRibG9iLmwgKz0gMzsgLy8gdW5rbm93blxuXHRibG9iLmwgKz0gMTsgLy8gZm9udCBmYW1pbHlcblx0YmxvYi5sICs9IGxlbmd0aCAtIDEzO1xufVxuXG4vKiBUT0RPOiBwYXJzZSByaWNoIHRleHQgcnVucyAqL1xuZnVuY3Rpb24gcGFyc2VfUlN0cmluZyhibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGVuZCA9IGJsb2IubCArIGxlbmd0aDtcblx0dmFyIGNlbGwgPSBwYXJzZV9YTFNDZWxsKGJsb2IsIDYpO1xuXHR2YXIgY2NoID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgc3RyID0gcGFyc2VfWExVbmljb2RlU3RyaW5nTm9DY2goYmxvYiwgY2NoLCBvcHRzKTtcblx0YmxvYi5sID0gZW5kO1xuXHRjZWxsLnQgPSAnc3RyJztcblx0Y2VsbC52YWwgPSBzdHI7XG5cdHJldHVybiBjZWxsO1xufVxuLyogZnJvbSBqcy1oYXJiIChDKSAyMDE0LXByZXNlbnQgIFNoZWV0SlMgKi9cbnZhciBEQkYgPSAoZnVuY3Rpb24oKSB7XG52YXIgZGJmX2NvZGVwYWdlX21hcCA9IHtcblx0LyogQ29kZSBQYWdlcyBTdXBwb3J0ZWQgYnkgVmlzdWFsIEZveFBybyAqL1xuMHgwMTogICA0MzcsICAgICAgICAgICAweDAyOiAgIDg1MCxcbjB4MDM6ICAxMjUyLCAgICAgICAgICAgMHgwNDogMTAwMDAsXG4weDY0OiAgIDg1MiwgICAgICAgICAgIDB4NjU6ICAgODY2LFxuMHg2NjogICA4NjUsICAgICAgICAgICAweDY3OiAgIDg2MSxcbjB4Njg6ICAgODk1LCAgICAgICAgICAgMHg2OTogICA2MjAsXG4weDZBOiAgIDczNywgICAgICAgICAgIDB4NkI6ICAgODU3LFxuMHg3ODogICA5NTAsICAgICAgICAgICAweDc5OiAgIDk0OSxcbjB4N0E6ICAgOTM2LCAgICAgICAgICAgMHg3QjogICA5MzIsXG4weDdDOiAgIDg3NCwgICAgICAgICAgIDB4N0Q6ICAxMjU1LFxuMHg3RTogIDEyNTYsICAgICAgICAgICAweDk2OiAxMDAwNyxcbjB4OTc6IDEwMDI5LCAgICAgICAgICAgMHg5ODogMTAwMDYsXG4weEM4OiAgMTI1MCwgICAgICAgICAgIDB4Qzk6ICAxMjUxLFxuMHhDQTogIDEyNTQsICAgICAgICAgICAweENCOiAgMTI1MyxcblxuXHQvKiBzaGFwZWZpbGUgREJGIGV4dGVuc2lvbiAqL1xuMHgwMDogMjAxMjcsICAgICAgICAgICAweDA4OiAgIDg2NSxcbjB4MDk6ICAgNDM3LCAgICAgICAgICAgMHgwQTogICA4NTAsXG4weDBCOiAgIDQzNywgICAgICAgICAgIDB4MEQ6ICAgNDM3LFxuMHgwRTogICA4NTAsICAgICAgICAgICAweDBGOiAgIDQzNyxcbjB4MTA6ICAgODUwLCAgICAgICAgICAgMHgxMTogICA0MzcsXG4weDEyOiAgIDg1MCwgICAgICAgICAgIDB4MTM6ICAgOTMyLFxuMHgxNDogICA4NTAsICAgICAgICAgICAweDE1OiAgIDQzNyxcbjB4MTY6ICAgODUwLCAgICAgICAgICAgMHgxNzogICA4NjUsXG4weDE4OiAgIDQzNywgICAgICAgICAgIDB4MTk6ICAgNDM3LFxuMHgxQTogICA4NTAsICAgICAgICAgICAweDFCOiAgIDQzNyxcbjB4MUM6ICAgODYzLCAgICAgICAgICAgMHgxRDogICA4NTAsXG4weDFGOiAgIDg1MiwgICAgICAgICAgIDB4MjI6ICAgODUyLFxuMHgyMzogICA4NTIsICAgICAgICAgICAweDI0OiAgIDg2MCxcbjB4MjU6ICAgODUwLCAgICAgICAgICAgMHgyNjogICA4NjYsXG4weDM3OiAgIDg1MCwgICAgICAgICAgIDB4NDA6ICAgODUyLFxuMHg0RDogICA5MzYsICAgICAgICAgICAweDRFOiAgIDk0OSxcbjB4NEY6ICAgOTUwLCAgICAgICAgICAgMHg1MDogICA4NzQsXG4weDU3OiAgMTI1MiwgICAgICAgICAgIDB4NTg6ICAxMjUyLFxuMHg1OTogIDEyNTIsXG5cbjB4RkY6IDE2OTY5XG59O1xuXG4vKiBUT0RPOiBmaW5kIGFuIGFjdHVhbCBzcGVjaWZpY2F0aW9uICovXG5mdW5jdGlvbiBkYmZfdG9fYW9hKGJ1Ziwgb3B0cykge1xuXHR2YXIgb3V0ID0gW107XG5cdC8qIFRPRE86IGJyb3dzZXIgYmFzZWQgKi9cblx0dmFyIGQgPSAobmV3X3Jhd19idWYoMSkpO1xuXHRzd2l0Y2gob3B0cy50eXBlKSB7XG5cdFx0Y2FzZSAnYmFzZTY0JzogZCA9IHMyYShCYXNlNjQuZGVjb2RlKGJ1ZikpOyBicmVhaztcblx0XHRjYXNlICdiaW5hcnknOiBkID0gczJhKGJ1Zik7IGJyZWFrO1xuXHRcdGNhc2UgJ2J1ZmZlcic6XG5cdFx0Y2FzZSAnYXJyYXknOiBkID0gYnVmOyBicmVhaztcblx0fVxuXHRwcmVwX2Jsb2IoZCwgMCk7XG5cdC8qIGhlYWRlciAqL1xuXHR2YXIgZnQgPSBkLnJlYWRfc2hpZnQoMSk7XG5cdHZhciBtZW1vID0gZmFsc2U7XG5cdHZhciB2ZnAgPSBmYWxzZSwgbDcgPSBmYWxzZTtcblx0c3dpdGNoKGZ0KSB7XG5cdFx0Y2FzZSAweDAyOiBjYXNlIDB4MDM6IGJyZWFrO1xuXHRcdGNhc2UgMHgzMDogdmZwID0gdHJ1ZTsgbWVtbyA9IHRydWU7IGJyZWFrO1xuXHRcdGNhc2UgMHgzMTogdmZwID0gdHJ1ZTsgYnJlYWs7XG5cdFx0Y2FzZSAweDgzOiBtZW1vID0gdHJ1ZTsgYnJlYWs7XG5cdFx0Y2FzZSAweDhCOiBtZW1vID0gdHJ1ZTsgYnJlYWs7XG5cdFx0Y2FzZSAweDhDOiBtZW1vID0gdHJ1ZTsgbDcgPSB0cnVlOyBicmVhaztcblx0XHRjYXNlIDB4RjU6IG1lbW8gPSB0cnVlOyBicmVhaztcblx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogXCIgKyBmdC50b1N0cmluZygxNikpO1xuXHR9XG5cdHZhciAvKmZpbGVkYXRlID0gbmV3IERhdGUoKSwqLyBucm93ID0gMCwgZnBvcyA9IDA7XG5cdGlmKGZ0ID09IDB4MDIpIG5yb3cgPSBkLnJlYWRfc2hpZnQoMik7XG5cdC8qZmlsZWRhdGUgPSBuZXcgRGF0ZShkLnJlYWRfc2hpZnQoMSkgKyAxOTAwLCBkLnJlYWRfc2hpZnQoMSkgLSAxLCBkLnJlYWRfc2hpZnQoMSkpOyovZC5sICs9IDM7XG5cdGlmKGZ0ICE9IDB4MDIpIG5yb3cgPSBkLnJlYWRfc2hpZnQoNCk7XG5cdGlmKGZ0ICE9IDB4MDIpIGZwb3MgPSBkLnJlYWRfc2hpZnQoMik7XG5cdHZhciBybGVuID0gZC5yZWFkX3NoaWZ0KDIpO1xuXG5cdHZhciAvKmZsYWdzID0gMCwqLyBjdXJyZW50X2NwID0gMTI1Mjtcblx0aWYoZnQgIT0gMHgwMikge1xuXHRkLmwrPTE2O1xuXHQvKmZsYWdzID0gKi9kLnJlYWRfc2hpZnQoMSk7XG5cdC8vaWYobWVtbyAmJiAoKGZsYWdzICYgMHgwMikgPT09IDApKSB0aHJvdyBuZXcgRXJyb3IoXCJEQkYgRmxhZ3MgXCIgKyBmbGFncy50b1N0cmluZygxNikgKyBcIiBmdCBcIiArIGZ0LnRvU3RyaW5nKDE2KSk7XG5cblx0LyogY29kZXBhZ2UgcHJlc2VudCBpbiBGb3hQcm8gKi9cblx0aWYoZFtkLmxdICE9PSAwKSBjdXJyZW50X2NwID0gZGJmX2NvZGVwYWdlX21hcFtkW2QubF1dO1xuXHRkLmwrPTE7XG5cblx0ZC5sKz0yO1xuXHR9XG5cdGlmKGw3KSBkLmwgKz0gMzY7XG52YXIgZmllbGRzID0gW10sIGZpZWxkID0gKHt9KTtcblx0dmFyIGhlbmQgPSBmcG9zIC0gMTAgLSAodmZwID8gMjY0IDogMCksIHd3ID0gbDcgPyAzMiA6IDExO1xuXHR3aGlsZShmdCA9PSAweDAyID8gZC5sIDwgZC5sZW5ndGggJiYgZFtkLmxdICE9IDB4MGQ6IGQubCA8IGhlbmQpIHtcblx0XHRmaWVsZCA9ICh7fSk7XG5cdFx0ZmllbGQubmFtZSA9IGNwdGFibGUudXRpbHMuZGVjb2RlKGN1cnJlbnRfY3AsIGQuc2xpY2UoZC5sLCBkLmwrd3cpKS5yZXBsYWNlKC9bXFx1MDAwMFxcclxcbl0uKiQvZyxcIlwiKTtcblx0XHRkLmwgKz0gd3c7XG5cdFx0ZmllbGQudHlwZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZC5yZWFkX3NoaWZ0KDEpKTtcblx0XHRpZihmdCAhPSAweDAyICYmICFsNykgZmllbGQub2Zmc2V0ID0gZC5yZWFkX3NoaWZ0KDQpO1xuXHRcdGZpZWxkLmxlbiA9IGQucmVhZF9zaGlmdCgxKTtcblx0XHRpZihmdCA9PSAweDAyKSBmaWVsZC5vZmZzZXQgPSBkLnJlYWRfc2hpZnQoMik7XG5cdFx0ZmllbGQuZGVjID0gZC5yZWFkX3NoaWZ0KDEpO1xuXHRcdGlmKGZpZWxkLm5hbWUubGVuZ3RoKSBmaWVsZHMucHVzaChmaWVsZCk7XG5cdFx0aWYoZnQgIT0gMHgwMikgZC5sICs9IGw3ID8gMTMgOiAxNDtcblx0XHRzd2l0Y2goZmllbGQudHlwZSkge1xuXHRcdFx0Y2FzZSAnQic6IC8vIFZGUCBEb3VibGVcblx0XHRcdFx0aWYoKCF2ZnAgfHwgZmllbGQubGVuICE9IDgpICYmIG9wdHMuV1RGKSBjb25zb2xlLmxvZygnU2tpcHBpbmcgJyArIGZpZWxkLm5hbWUgKyAnOicgKyBmaWVsZC50eXBlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdHJzogLy8gR2VuZXJhbFxuXHRcdFx0Y2FzZSAnUCc6IC8vIFBpY3R1cmVcblx0XHRcdFx0aWYob3B0cy5XVEYpIGNvbnNvbGUubG9nKCdTa2lwcGluZyAnICsgZmllbGQubmFtZSArICc6JyArIGZpZWxkLnR5cGUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0MnOiAvLyBjaGFyYWN0ZXJcblx0XHRcdGNhc2UgJ0QnOiAvLyBkYXRlXG5cdFx0XHRjYXNlICdGJzogLy8gZmxvYXRpbmcgcG9pbnRcblx0XHRcdGNhc2UgJ0knOiAvLyBsb25nXG5cdFx0XHRjYXNlICdMJzogLy8gYm9vbGVhblxuXHRcdFx0Y2FzZSAnTSc6IC8vIG1lbW9cblx0XHRcdGNhc2UgJ04nOiAvLyBudW1iZXJcblx0XHRcdGNhc2UgJ08nOiAvLyBkb3VibGVcblx0XHRcdGNhc2UgJ1QnOiAvLyBkYXRldGltZVxuXHRcdFx0Y2FzZSAnWSc6IC8vIGN1cnJlbmN5XG5cdFx0XHRjYXNlICcwJzogLy8gVkZQIF9OdWxsRmxhZ3Ncblx0XHRcdGNhc2UgJ0AnOiAvLyB0aW1lc3RhbXBcblx0XHRcdGNhc2UgJysnOiAvLyBhdXRvaW5jcmVtZW50XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIEZpZWxkIFR5cGU6ICcgKyBmaWVsZC50eXBlKTtcblx0XHR9XG5cdH1cblx0aWYoZFtkLmxdICE9PSAweDBEKSBkLmwgPSBmcG9zLTE7XG5cdGVsc2UgaWYoZnQgPT0gMHgwMikgZC5sID0gMHgyMDk7XG5cdGlmKGZ0ICE9IDB4MDIpIHtcblx0XHRpZihkLnJlYWRfc2hpZnQoMSkgIT09IDB4MEQpIHRocm93IG5ldyBFcnJvcihcIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCBcIiArIGQubCArIFwiIFwiICsgZFtkLmxdKTtcblx0XHRkLmwgPSBmcG9zO1xuXHR9XG5cdC8qIGRhdGEgKi9cblx0dmFyIFIgPSAwLCBDID0gMDtcblx0b3V0WzBdID0gW107XG5cdGZvcihDID0gMDsgQyAhPSBmaWVsZHMubGVuZ3RoOyArK0MpIG91dFswXVtDXSA9IGZpZWxkc1tDXS5uYW1lO1xuXHR3aGlsZShucm93LS0gPiAwKSB7XG5cdFx0aWYoZFtkLmxdID09PSAweDJBKSB7IGQubCs9cmxlbjsgY29udGludWU7IH1cblx0XHQrK2QubDtcblx0XHRvdXRbKytSXSA9IFtdOyBDID0gMDtcblx0XHRmb3IoQyA9IDA7IEMgIT0gZmllbGRzLmxlbmd0aDsgKytDKSB7XG5cdFx0XHR2YXIgZGQgPSBkLnNsaWNlKGQubCwgZC5sK2ZpZWxkc1tDXS5sZW4pOyBkLmwrPWZpZWxkc1tDXS5sZW47XG5cdFx0XHRwcmVwX2Jsb2IoZGQsIDApO1xuXHRcdFx0dmFyIHMgPSBjcHRhYmxlLnV0aWxzLmRlY29kZShjdXJyZW50X2NwLCBkZCk7XG5cdFx0XHRzd2l0Y2goZmllbGRzW0NdLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnQyc6XG5cdFx0XHRcdFx0b3V0W1JdW0NdID0gY3B0YWJsZS51dGlscy5kZWNvZGUoY3VycmVudF9jcCwgZGQpO1xuXHRcdFx0XHRcdG91dFtSXVtDXSA9IG91dFtSXVtDXS50cmltKCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0QnOlxuXHRcdFx0XHRcdGlmKHMubGVuZ3RoID09PSA4KSBvdXRbUl1bQ10gPSBuZXcgRGF0ZSgrcy5zbGljZSgwLDQpLCArcy5zbGljZSg0LDYpLTEsICtzLnNsaWNlKDYsOCkpO1xuXHRcdFx0XHRcdGVsc2Ugb3V0W1JdW0NdID0gcztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnRic6IG91dFtSXVtDXSA9IHBhcnNlRmxvYXQocy50cmltKCkpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnKyc6IGNhc2UgJ0knOiBvdXRbUl1bQ10gPSBsNyA/IGRkLnJlYWRfc2hpZnQoLTQsICdpJykgXiAweDgwMDAwMDAwIDogZGQucmVhZF9zaGlmdCg0LCAnaScpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnTCc6IHN3aXRjaChzLnRvVXBwZXJDYXNlKCkpIHtcblx0XHRcdFx0XHRjYXNlICdZJzogY2FzZSAnVCc6IG91dFtSXVtDXSA9IHRydWU7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ04nOiBjYXNlICdGJzogb3V0W1JdW0NdID0gZmFsc2U7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJyAnOiBjYXNlICc/Jzogb3V0W1JdW0NdID0gZmFsc2U7IGJyZWFrOyAvKiBOT1RFOiB0ZWNobmljYWxseSB1bmluaXRpYWxpemVkICovXG5cdFx0XHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiREJGIFVucmVjb2duaXplZCBMOnxcIiArIHMgKyBcInxcIik7XG5cdFx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnTSc6IC8qIFRPRE86IGhhbmRsZSBtZW1vIGZpbGVzICovXG5cdFx0XHRcdFx0aWYoIW1lbW8pIHRocm93IG5ldyBFcnJvcihcIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgXCIgKyBmdC50b1N0cmluZygxNikpO1xuXHRcdFx0XHRcdG91dFtSXVtDXSA9IFwiIyNNRU1PIyNcIiArIChsNyA/IHBhcnNlSW50KHMudHJpbSgpLCAxMCk6IGRkLnJlYWRfc2hpZnQoNCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdOJzogb3V0W1JdW0NdID0gK3MucmVwbGFjZSgvXFx1MDAwMC9nLFwiXCIpLnRyaW0oKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0AnOiBvdXRbUl1bQ10gPSBuZXcgRGF0ZShkZC5yZWFkX3NoaWZ0KC04LCAnZicpIC0gMHgzODgzMTc1MzM0MDApOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnVCc6IG91dFtSXVtDXSA9IG5ldyBEYXRlKChkZC5yZWFkX3NoaWZ0KDQpIC0gMHgyNTNEOEMpICogMHg1MjY1QzAwICsgZGQucmVhZF9zaGlmdCg0KSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdZJzogb3V0W1JdW0NdID0gZGQucmVhZF9zaGlmdCg0LCdpJykvMWU0OyBicmVhaztcblx0XHRcdFx0Y2FzZSAnTyc6IG91dFtSXVtDXSA9IC1kZC5yZWFkX3NoaWZ0KC04LCAnZicpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnQic6IGlmKHZmcCAmJiBmaWVsZHNbQ10ubGVuID09IDgpIHsgb3V0W1JdW0NdID0gZGQucmVhZF9zaGlmdCg4LCdmJyk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlICdHJzogY2FzZSAnUCc6IGRkLmwgKz0gZmllbGRzW0NdLmxlbjsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRcdGlmKGZpZWxkc1tDXS5uYW1lID09PSAnX051bGxGbGFncycpIGJyZWFrO1xuXHRcdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSBcIiArIGZpZWxkc1tDXS50eXBlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYoZnQgIT0gMHgwMikgaWYoZC5sIDwgZC5sZW5ndGggJiYgZFtkLmwrK10gIT0gMHgxQSkgdGhyb3cgbmV3IEVycm9yKFwiREJGIEVPRiBNYXJrZXIgbWlzc2luZyBcIiArIChkLmwtMSkgKyBcIiBvZiBcIiArIGQubGVuZ3RoICsgXCIgXCIgKyBkW2QubC0xXS50b1N0cmluZygxNikpO1xuXHRyZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBkYmZfdG9fc2hlZXQoYnVmLCBvcHRzKSB7XG5cdHZhciBvID0gb3B0cyB8fCB7fTtcblx0aWYoIW8uZGF0ZU5GKSBvLmRhdGVORiA9IFwieXl5eW1tZGRcIjtcblx0cmV0dXJuIGFvYV90b19zaGVldChkYmZfdG9fYW9hKGJ1ZiwgbyksIG8pO1xufVxuXG5mdW5jdGlvbiBkYmZfdG9fd29ya2Jvb2soYnVmLCBvcHRzKSB7XG5cdHRyeSB7IHJldHVybiBzaGVldF90b193b3JrYm9vayhkYmZfdG9fc2hlZXQoYnVmLCBvcHRzKSwgb3B0cyk7IH1cblx0Y2F0Y2goZSkgeyBpZihvcHRzICYmIG9wdHMuV1RGKSB0aHJvdyBlOyB9XG5cdHJldHVybiAoe1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fSk7XG59XG5cbnZhciBfUkxFTiA9IHsgJ0InOiA4LCAnQyc6IDI1MCwgJ0wnOiAxLCAnRCc6IDgsICc/JzogMCwgJyc6IDAgfTtcbmZ1bmN0aW9uIHNoZWV0X3RvX2RiZih3cywgb3B0cykge1xuXHR2YXIgbyA9IG9wdHMgfHwge307XG5cdGlmKG8udHlwZSA9PSBcInN0cmluZ1wiKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZ1wiKTtcblx0dmFyIGJhID0gYnVmX2FycmF5KCk7XG5cdHZhciBhb2EgPSBzaGVldF90b19qc29uKHdzLCB7aGVhZGVyOjEsIHJhdzp0cnVlLCBjZWxsRGF0ZXM6dHJ1ZX0pO1xuXHR2YXIgaGVhZGVycyA9IGFvYVswXSwgZGF0YSA9IGFvYS5zbGljZSgxKTtcblx0dmFyIGkgPSAwLCBqID0gMCwgaGNudCA9IDAsIHJsZW4gPSAxO1xuXHRmb3IoaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgKytpKSB7XG5cdFx0aWYoaSA9PSBudWxsKSBjb250aW51ZTtcblx0XHQrK2hjbnQ7XG5cdFx0aWYodHlwZW9mIGhlYWRlcnNbaV0gIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgRXJyb3IoXCJEQkYgSW52YWxpZCBjb2x1bW4gbmFtZVwiKTtcblx0XHRpZihoZWFkZXJzLmluZGV4T2YoaGVhZGVyc1tpXSkgIT09IGkpIGZvcihqPTA7IGo8MTAyNDsrK2opXG5cdFx0XHRpZihoZWFkZXJzLmluZGV4T2YoaGVhZGVyc1tpXSArIFwiX1wiICsgaikgPT0gLTEpIHsgaGVhZGVyc1tpXSArPSBcIl9cIiArIGo7IGJyZWFrOyB9XG5cdH1cblx0dmFyIHJhbmdlID0gc2FmZV9kZWNvZGVfcmFuZ2Uod3NbJyFyZWYnXSk7XG5cdHZhciBjb2x0eXBlcyA9IFtdO1xuXHRmb3IoaSA9IDA7IGkgPD0gcmFuZ2UuZS5jIC0gcmFuZ2Uucy5jOyArK2kpIHtcblx0XHR2YXIgY29sID0gW107XG5cdFx0Zm9yKGo9MDsgaiA8IGRhdGEubGVuZ3RoOyArK2opIHtcblx0XHRcdGlmKGRhdGFbal1baV0gIT0gbnVsbCkgY29sLnB1c2goZGF0YVtqXVtpXSk7XG5cdFx0fVxuXHRcdGlmKGNvbC5sZW5ndGggPT0gMCB8fCBoZWFkZXJzW2ldID09IG51bGwpIHsgY29sdHlwZXNbaV0gPSAnPyc7IGNvbnRpbnVlOyB9XG5cdFx0dmFyIGd1ZXNzID0gJycsIF9ndWVzcyA9ICcnO1xuXHRcdGZvcihqID0gMDsgaiA8IGNvbC5sZW5ndGg7ICsraikge1xuXHRcdFx0c3dpdGNoKHR5cGVvZiBjb2xbal0pIHtcblx0XHRcdFx0LyogVE9ETzogY2hlY2sgaWYgTDIgY29tcGF0IGlzIGRlc2lyZWQgKi9cblx0XHRcdFx0Y2FzZSAnbnVtYmVyJzogX2d1ZXNzID0gJ0InOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnc3RyaW5nJzogX2d1ZXNzID0gJ0MnOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnYm9vbGVhbic6IF9ndWVzcyA9ICdMJzsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ29iamVjdCc6IF9ndWVzcyA9IGNvbFtqXSBpbnN0YW5jZW9mIERhdGUgPyAnRCcgOiAnQyc7IGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiBfZ3Vlc3MgPSAnQyc7XG5cdFx0XHR9XG5cdFx0XHRndWVzcyA9IGd1ZXNzICYmIGd1ZXNzICE9IF9ndWVzcyA/ICdDJyA6IF9ndWVzcztcblx0XHRcdGlmKGd1ZXNzID09ICdDJykgYnJlYWs7XG5cdFx0fVxuXHRcdHJsZW4gKz0gX1JMRU5bZ3Vlc3NdIHx8IDA7XG5cdFx0Y29sdHlwZXNbaV0gPSBndWVzcztcblx0fVxuXG5cdHZhciBoID0gYmEubmV4dCgzMik7XG5cdGgud3JpdGVfc2hpZnQoNCwgMHgxMzAyMTEzMCk7XG5cdGgud3JpdGVfc2hpZnQoNCwgZGF0YS5sZW5ndGgpO1xuXHRoLndyaXRlX3NoaWZ0KDIsIDI5NiArIDMyICogaGNudCk7XG5cdGgud3JpdGVfc2hpZnQoMiwgcmxlbik7XG5cdGZvcihpPTA7IGkgPCA0OyArK2kpIGgud3JpdGVfc2hpZnQoNCwgMCk7XG5cdGgud3JpdGVfc2hpZnQoNCwgMHgwMDAwMDMwMCk7IC8vIFRPRE86IENQXG5cblx0Zm9yKGkgPSAwLCBqID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kpIHtcblx0XHRpZihoZWFkZXJzW2ldID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdHZhciBoZiA9IGJhLm5leHQoMzIpO1xuXHRcdHZhciBfZiA9IChoZWFkZXJzW2ldLnNsaWNlKC0xMCkgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIikuc2xpY2UoMCwgMTEpO1xuXHRcdGhmLndyaXRlX3NoaWZ0KDEsIF9mLCBcInNiY3NcIik7XG5cdFx0aGYud3JpdGVfc2hpZnQoMSwgY29sdHlwZXNbaV0gPT0gJz8nID8gJ0MnIDogY29sdHlwZXNbaV0sIFwic2Jjc1wiKTtcblx0XHRoZi53cml0ZV9zaGlmdCg0LCBqKTtcblx0XHRoZi53cml0ZV9zaGlmdCgxLCBfUkxFTltjb2x0eXBlc1tpXV0gfHwgMCk7XG5cdFx0aGYud3JpdGVfc2hpZnQoMSwgMCk7XG5cdFx0aGYud3JpdGVfc2hpZnQoMSwgMHgwMik7XG5cdFx0aGYud3JpdGVfc2hpZnQoNCwgMCk7XG5cdFx0aGYud3JpdGVfc2hpZnQoMSwgMCk7XG5cdFx0aGYud3JpdGVfc2hpZnQoNCwgMCk7XG5cdFx0aGYud3JpdGVfc2hpZnQoNCwgMCk7XG5cdFx0aiArPSBfUkxFTltjb2x0eXBlc1tpXV0gfHwgMDtcblx0fVxuXG5cdHZhciBoYiA9IGJhLm5leHQoMjY0KTtcblx0aGIud3JpdGVfc2hpZnQoNCwgMHgwMDAwMDAwRCk7XG5cdGZvcihpPTA7IGkgPCA2NTsrK2kpIGhiLndyaXRlX3NoaWZ0KDQsIDB4MDAwMDAwMDApO1xuXHRmb3IoaT0wOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xuXHRcdHZhciByb3V0ID0gYmEubmV4dChybGVuKTtcblx0XHRyb3V0LndyaXRlX3NoaWZ0KDEsIDApO1xuXHRcdGZvcihqPTA7IGo8aGVhZGVycy5sZW5ndGg7ICsraikge1xuXHRcdFx0aWYoaGVhZGVyc1tqXSA9PSBudWxsKSBjb250aW51ZTtcblx0XHRcdHN3aXRjaChjb2x0eXBlc1tqXSkge1xuXHRcdFx0XHRjYXNlICdMJzogcm91dC53cml0ZV9zaGlmdCgxLCBkYXRhW2ldW2pdID09IG51bGwgPyAweDNGIDogZGF0YVtpXVtqXSA/IDB4NTQgOiAweDQ2KTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0InOiByb3V0LndyaXRlX3NoaWZ0KDgsIGRhdGFbaV1bal18fDAsICdmJyk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdEJzpcblx0XHRcdFx0XHRpZighZGF0YVtpXVtqXSkgcm91dC53cml0ZV9zaGlmdCg4LCBcIjAwMDAwMDAwXCIsIFwic2Jjc1wiKTtcblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdHJvdXQud3JpdGVfc2hpZnQoNCwgKFwiMDAwMFwiK2RhdGFbaV1bal0uZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTQpLCBcInNiY3NcIik7XG5cdFx0XHRcdFx0XHRyb3V0LndyaXRlX3NoaWZ0KDIsIChcIjAwXCIrKGRhdGFbaV1bal0uZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpLCBcInNiY3NcIik7XG5cdFx0XHRcdFx0XHRyb3V0LndyaXRlX3NoaWZ0KDIsIChcIjAwXCIrZGF0YVtpXVtqXS5nZXREYXRlKCkpLnNsaWNlKC0yKSwgXCJzYmNzXCIpO1xuXHRcdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0MnOlxuXHRcdFx0XHRcdHZhciBfcyA9IFN0cmluZyhkYXRhW2ldW2pdfHxcIlwiKTtcblx0XHRcdFx0XHRyb3V0LndyaXRlX3NoaWZ0KDEsIF9zLCBcInNiY3NcIik7XG5cdFx0XHRcdFx0Zm9yKGhjbnQ9MDsgaGNudCA8IDI1MC1fcy5sZW5ndGg7ICsraGNudCkgcm91dC53cml0ZV9zaGlmdCgxLCAweDIwKTsgYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGRhdGFcblx0fVxuXHRiYS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsIDB4MUEpO1xuXHRyZXR1cm4gYmEuZW5kKCk7XG59XG5cdHJldHVybiB7XG5cdFx0dG9fd29ya2Jvb2s6IGRiZl90b193b3JrYm9vayxcblx0XHR0b19zaGVldDogZGJmX3RvX3NoZWV0LFxuXHRcdGZyb21fc2hlZXQ6IHNoZWV0X3RvX2RiZlxuXHR9O1xufSkoKTtcblxudmFyIFNZTEsgPSAoZnVuY3Rpb24oKSB7XG5cdC8qIFRPRE86IGZpbmQgYW4gYWN0dWFsIHNwZWNpZmljYXRpb24gKi9cblx0ZnVuY3Rpb24gc3lsa190b19hb2EoZCwgb3B0cykge1xuXHRcdHN3aXRjaChvcHRzLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2Jhc2U2NCc6IHJldHVybiBzeWxrX3RvX2FvYV9zdHIoQmFzZTY0LmRlY29kZShkKSwgb3B0cyk7XG5cdFx0XHRjYXNlICdiaW5hcnknOiByZXR1cm4gc3lsa190b19hb2Ffc3RyKGQsIG9wdHMpO1xuXHRcdFx0Y2FzZSAnYnVmZmVyJzogcmV0dXJuIHN5bGtfdG9fYW9hX3N0cihkLnRvU3RyaW5nKCdiaW5hcnknKSwgb3B0cyk7XG5cdFx0XHRjYXNlICdhcnJheSc6IHJldHVybiBzeWxrX3RvX2FvYV9zdHIoY2Myc3RyKGQpLCBvcHRzKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIHR5cGUgXCIgKyBvcHRzLnR5cGUpO1xuXHR9XG5cdGZ1bmN0aW9uIHN5bGtfdG9fYW9hX3N0cihzdHIsIG9wdHMpIHtcblx0XHR2YXIgcmVjb3JkcyA9IHN0ci5zcGxpdCgvW1xcblxccl0rLyksIFIgPSAtMSwgQyA9IC0xLCByaSA9IDAsIHJqID0gMCwgYXJyID0gW107XG5cdFx0dmFyIGZvcm1hdHMgPSBbXTtcblx0XHR2YXIgbmV4dF9jZWxsX2Zvcm1hdCA9IG51bGw7XG5cdFx0dmFyIHNodCA9IHt9LCByb3dpbmZvID0gW10sIGNvbGluZm8gPSBbXSwgY3cgPSBbXTtcblx0XHR2YXIgTXZhbCA9IDAsIGo7XG5cdFx0Zm9yICg7IHJpICE9PSByZWNvcmRzLmxlbmd0aDsgKytyaSkge1xuXHRcdFx0TXZhbCA9IDA7XG5cdFx0XHR2YXIgcnN0cj1yZWNvcmRzW3JpXS50cmltKCk7XG5cdFx0XHR2YXIgcmVjb3JkPXJzdHIucmVwbGFjZSgvOzsvZywgXCJcXHUwMDAxXCIpLnNwbGl0KFwiO1wiKS5tYXAoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5yZXBsYWNlKC9cXHUwMDAxL2csIFwiO1wiKTsgfSk7XG5cdFx0XHR2YXIgUlQ9cmVjb3JkWzBdLCB2YWw7XG5cdFx0XHRpZihyc3RyLmxlbmd0aCA+IDApIHN3aXRjaChSVCkge1xuXHRcdFx0Y2FzZSAnSUQnOiBicmVhazsgLyogaGVhZGVyICovXG5cdFx0XHRjYXNlICdFJzogYnJlYWs7IC8qIEVPRiAqL1xuXHRcdFx0Y2FzZSAnQic6IGJyZWFrOyAvKiBkaW1lbnNpb25zICovXG5cdFx0XHRjYXNlICdPJzogYnJlYWs7IC8qIG9wdGlvbnM/ICovXG5cdFx0XHRjYXNlICdQJzpcblx0XHRcdFx0aWYocmVjb3JkWzFdLmNoYXJBdCgwKSA9PSAnUCcpXG5cdFx0XHRcdFx0Zm9ybWF0cy5wdXNoKHJzdHIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywgXCI7XCIpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdDJzpcblx0XHRcdGZvcihyaj0xOyByajxyZWNvcmQubGVuZ3RoOyArK3JqKSBzd2l0Y2gocmVjb3JkW3JqXS5jaGFyQXQoMCkpIHtcblx0XHRcdFx0Y2FzZSAnWCc6IEMgPSBwYXJzZUludChyZWNvcmRbcmpdLnNsaWNlKDEpKS0xOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnWSc6XG5cdFx0XHRcdFx0UiA9IHBhcnNlSW50KHJlY29yZFtyal0uc2xpY2UoMSkpLTE7IEMgPSAwO1xuXHRcdFx0XHRcdGZvcihqID0gYXJyLmxlbmd0aDsgaiA8PSBSOyArK2opIGFycltqXSA9IFtdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdLJzpcblx0XHRcdFx0XHR2YWwgPSByZWNvcmRbcmpdLnNsaWNlKDEpO1xuXHRcdFx0XHRcdGlmKHZhbC5jaGFyQXQoMCkgPT09ICdcIicpIHZhbCA9IHZhbC5zbGljZSgxLHZhbC5sZW5ndGggLSAxKTtcblx0XHRcdFx0XHRlbHNlIGlmKHZhbCA9PT0gJ1RSVUUnKSB2YWwgPSB0cnVlO1xuXHRcdFx0XHRcdGVsc2UgaWYodmFsID09PSAnRkFMU0UnKSB2YWwgPSBmYWxzZTtcblx0XHRcdFx0XHRlbHNlIGlmKCFpc05hTihmdXp6eW51bSh2YWwpKSkge1xuXHRcdFx0XHRcdFx0dmFsID0gZnV6enludW0odmFsKTtcblx0XHRcdFx0XHRcdGlmKG5leHRfY2VsbF9mb3JtYXQgIT09IG51bGwgJiYgU1NGLmlzX2RhdGUobmV4dF9jZWxsX2Zvcm1hdCkpIHZhbCA9IG51bWRhdGUodmFsKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYoIWlzTmFOKGZ1enp5ZGF0ZSh2YWwpLmdldERhdGUoKSkpIHtcblx0XHRcdFx0XHRcdHZhbCA9IHBhcnNlRGF0ZSh2YWwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhcnJbUl1bQ10gPSB2YWw7XG5cdFx0XHRcdFx0bmV4dF9jZWxsX2Zvcm1hdCA9IG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0UnOlxuXHRcdFx0XHRcdHZhciBmb3JtdWxhID0gcmNfdG9fYTEocmVjb3JkW3JqXS5zbGljZSgxKSwge3I6UixjOkN9KTtcblx0XHRcdFx0XHRhcnJbUl1bQ10gPSBbYXJyW1JdW0NdLCBmb3JtdWxhXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogaWYob3B0cyAmJiBvcHRzLldURikgdGhyb3cgbmV3IEVycm9yKFwiU1lMSyBiYWQgcmVjb3JkIFwiICsgcnN0cik7XG5cdFx0XHR9IGJyZWFrO1xuXHRcdFx0Y2FzZSAnRic6XG5cdFx0XHR2YXIgRl9zZWVuID0gMDtcblx0XHRcdGZvcihyaj0xOyByajxyZWNvcmQubGVuZ3RoOyArK3JqKSBzd2l0Y2gocmVjb3JkW3JqXS5jaGFyQXQoMCkpIHtcblx0XHRcdFx0Y2FzZSAnWCc6IEMgPSBwYXJzZUludChyZWNvcmRbcmpdLnNsaWNlKDEpKS0xOyArK0Zfc2VlbjsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1knOlxuXHRcdFx0XHRcdFIgPSBwYXJzZUludChyZWNvcmRbcmpdLnNsaWNlKDEpKS0xOyAvKkMgPSAwOyovXG5cdFx0XHRcdFx0Zm9yKGogPSBhcnIubGVuZ3RoOyBqIDw9IFI7ICsraikgYXJyW2pdID0gW107XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ00nOiBNdmFsID0gcGFyc2VJbnQocmVjb3JkW3JqXS5zbGljZSgxKSkgLyAyMDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0YnOiBicmVhazsgLyogPz8/ICovXG5cdFx0XHRcdGNhc2UgJ1AnOlxuXHRcdFx0XHRcdG5leHRfY2VsbF9mb3JtYXQgPSBmb3JtYXRzW3BhcnNlSW50KHJlY29yZFtyal0uc2xpY2UoMSkpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnUyc6IGJyZWFrOyAvKiBjZWxsIHN0eWxlICovXG5cdFx0XHRcdGNhc2UgJ0QnOiBicmVhazsgLyogY29sdW1uICovXG5cdFx0XHRcdGNhc2UgJ04nOiBicmVhazsgLyogZm9udCAqL1xuXHRcdFx0XHRjYXNlICdXJzpcblx0XHRcdFx0XHRjdyA9IHJlY29yZFtyal0uc2xpY2UoMSkuc3BsaXQoXCIgXCIpO1xuXHRcdFx0XHRcdGZvcihqID0gcGFyc2VJbnQoY3dbMF0sIDEwKTsgaiA8PSBwYXJzZUludChjd1sxXSwgMTApOyArK2opIHtcblx0XHRcdFx0XHRcdE12YWwgPSBwYXJzZUludChjd1syXSwgMTApO1xuXHRcdFx0XHRcdFx0Y29saW5mb1tqLTFdID0gTXZhbCA9PT0gMCA/IHtoaWRkZW46dHJ1ZX06IHt3Y2g6TXZhbH07IHByb2Nlc3NfY29sKGNvbGluZm9bai0xXSk7XG5cdFx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnQyc6IC8qIGRlZmF1bHQgY29sdW1uIGZvcm1hdCAqL1xuXHRcdFx0XHRcdEMgPSBwYXJzZUludChyZWNvcmRbcmpdLnNsaWNlKDEpKS0xO1xuXHRcdFx0XHRcdGlmKCFjb2xpbmZvW0NdKSBjb2xpbmZvW0NdID0ge307XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1InOiAvKiByb3cgcHJvcGVydGllcyAqL1xuXHRcdFx0XHRcdFIgPSBwYXJzZUludChyZWNvcmRbcmpdLnNsaWNlKDEpKS0xO1xuXHRcdFx0XHRcdGlmKCFyb3dpbmZvW1JdKSByb3dpbmZvW1JdID0ge307XG5cdFx0XHRcdFx0aWYoTXZhbCA+IDApIHsgcm93aW5mb1tSXS5ocHQgPSBNdmFsOyByb3dpbmZvW1JdLmhweCA9IHB0MnB4KE12YWwpOyB9XG5cdFx0XHRcdFx0ZWxzZSBpZihNdmFsID09PSAwKSByb3dpbmZvW1JdLmhpZGRlbiA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IGlmKG9wdHMgJiYgb3B0cy5XVEYpIHRocm93IG5ldyBFcnJvcihcIlNZTEsgYmFkIHJlY29yZCBcIiArIHJzdHIpO1xuXHRcdFx0fVxuXHRcdFx0aWYoRl9zZWVuIDwgMSkgbmV4dF9jZWxsX2Zvcm1hdCA9IG51bGw7IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogaWYob3B0cyAmJiBvcHRzLldURikgdGhyb3cgbmV3IEVycm9yKFwiU1lMSyBiYWQgcmVjb3JkIFwiICsgcnN0cik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKHJvd2luZm8ubGVuZ3RoID4gMCkgc2h0Wychcm93cyddID0gcm93aW5mbztcblx0XHRpZihjb2xpbmZvLmxlbmd0aCA+IDApIHNodFsnIWNvbHMnXSA9IGNvbGluZm87XG5cdFx0cmV0dXJuIFthcnIsIHNodF07XG5cdH1cblxuXHRmdW5jdGlvbiBzeWxrX3RvX3NoZWV0KGQsIG9wdHMpIHtcblx0XHR2YXIgYW9hc2h0ID0gc3lsa190b19hb2EoZCwgb3B0cyk7XG5cdFx0dmFyIGFvYSA9IGFvYXNodFswXSwgd3MgPSBhb2FzaHRbMV07XG5cdFx0dmFyIG8gPSBhb2FfdG9fc2hlZXQoYW9hLCBvcHRzKTtcblx0XHRrZXlzKHdzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsgb1trXSA9IHdzW2tdOyB9KTtcblx0XHRyZXR1cm4gbztcblx0fVxuXG5cdGZ1bmN0aW9uIHN5bGtfdG9fd29ya2Jvb2soZCwgb3B0cykgeyByZXR1cm4gc2hlZXRfdG9fd29ya2Jvb2soc3lsa190b19zaGVldChkLCBvcHRzKSwgb3B0cyk7IH1cblxuXHRmdW5jdGlvbiB3cml0ZV93c19jZWxsX3N5bGsoY2VsbCwgd3MsIFIsIEMpIHtcblx0XHR2YXIgbyA9IFwiQztZXCIgKyAoUisxKSArIFwiO1hcIiArIChDKzEpICsgXCI7S1wiO1xuXHRcdHN3aXRjaChjZWxsLnQpIHtcblx0XHRcdGNhc2UgJ24nOlxuXHRcdFx0XHRvICs9IChjZWxsLnZ8fDApO1xuXHRcdFx0XHRpZihjZWxsLmYgJiYgIWNlbGwuRikgbyArPSBcIjtFXCIgKyBhMV90b19yYyhjZWxsLmYsIHtyOlIsIGM6Q30pOyBicmVhaztcblx0XHRcdGNhc2UgJ2InOiBvICs9IGNlbGwudiA/IFwiVFJVRVwiIDogXCJGQUxTRVwiOyBicmVhaztcblx0XHRcdGNhc2UgJ2UnOiBvICs9IGNlbGwudyB8fCBjZWxsLnY7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnZCc6IG8gKz0gJ1wiJyArIChjZWxsLncgfHwgY2VsbC52KSArICdcIic7IGJyZWFrO1xuXHRcdFx0Y2FzZSAncyc6IG8gKz0gJ1wiJyArIGNlbGwudi5yZXBsYWNlKC9cIi9nLFwiXCIpICsgJ1wiJzsgYnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JpdGVfd3NfY29sc19zeWxrKG91dCwgY29scykge1xuXHRcdGNvbHMuZm9yRWFjaChmdW5jdGlvbihjb2wsIGkpIHtcblx0XHRcdHZhciByZWMgPSBcIkY7V1wiICsgKGkrMSkgKyBcIiBcIiArIChpKzEpICsgXCIgXCI7XG5cdFx0XHRpZihjb2wuaGlkZGVuKSByZWMgKz0gXCIwXCI7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYodHlwZW9mIGNvbC53aWR0aCA9PSAnbnVtYmVyJykgY29sLndweCA9IHdpZHRoMnB4KGNvbC53aWR0aCk7XG5cdFx0XHRcdGlmKHR5cGVvZiBjb2wud3B4ID09ICdudW1iZXInKSBjb2wud2NoID0gcHgyY2hhcihjb2wud3B4KTtcblx0XHRcdFx0aWYodHlwZW9mIGNvbC53Y2ggPT0gJ251bWJlcicpIHJlYyArPSBNYXRoLnJvdW5kKGNvbC53Y2gpO1xuXHRcdFx0fVxuXHRcdFx0aWYocmVjLmNoYXJBdChyZWMubGVuZ3RoIC0gMSkgIT0gXCIgXCIpIG91dC5wdXNoKHJlYyk7XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiB3cml0ZV93c19yb3dzX3N5bGsob3V0LCByb3dzKSB7XG5cdFx0cm93cy5mb3JFYWNoKGZ1bmN0aW9uKHJvdywgaSkge1xuXHRcdFx0dmFyIHJlYyA9IFwiRjtcIjtcblx0XHRcdGlmKHJvdy5oaWRkZW4pIHJlYyArPSBcIk0wO1wiO1xuXHRcdFx0ZWxzZSBpZihyb3cuaHB0KSByZWMgKz0gXCJNXCIgKyAyMCAqIHJvdy5ocHQgKyBcIjtcIjtcblx0XHRcdGVsc2UgaWYocm93LmhweCkgcmVjICs9IFwiTVwiICsgMjAgKiBweDJwdChyb3cuaHB4KSArIFwiO1wiO1xuXHRcdFx0aWYocmVjLmxlbmd0aCA+IDIpIG91dC5wdXNoKHJlYyArIFwiUlwiICsgKGkrMSkpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2hlZXRfdG9fc3lsayh3cywgb3B0cykge1xuXHRcdHZhciBwcmVhbWJsZSA9IFtcIklEO1BXWEw7TjtFXCJdLCBvID0gW107XG5cdFx0dmFyIHIgPSBzYWZlX2RlY29kZV9yYW5nZSh3c1snIXJlZiddKSwgY2VsbDtcblx0XHR2YXIgZGVuc2UgPSBBcnJheS5pc0FycmF5KHdzKTtcblx0XHR2YXIgUlMgPSBcIlxcclxcblwiO1xuXG5cdFx0cHJlYW1ibGUucHVzaChcIlA7UEdlbmVyYWxcIik7XG5cdFx0cHJlYW1ibGUucHVzaChcIkY7UDA7REcwRzg7TTI1NVwiKTtcblx0XHRpZih3c1snIWNvbHMnXSkgd3JpdGVfd3NfY29sc19zeWxrKHByZWFtYmxlLCB3c1snIWNvbHMnXSk7XG5cdFx0aWYod3NbJyFyb3dzJ10pIHdyaXRlX3dzX3Jvd3Nfc3lsayhwcmVhbWJsZSwgd3NbJyFyb3dzJ10pO1xuXG5cdFx0cHJlYW1ibGUucHVzaChcIkI7WVwiICsgKHIuZS5yIC0gci5zLnIgKyAxKSArIFwiO1hcIiArIChyLmUuYyAtIHIucy5jICsgMSkgKyBcIjtEXCIgKyBbci5zLmMsci5zLnIsci5lLmMsci5lLnJdLmpvaW4oXCIgXCIpKTtcblx0XHRmb3IodmFyIFIgPSByLnMucjsgUiA8PSByLmUucjsgKytSKSB7XG5cdFx0XHRmb3IodmFyIEMgPSByLnMuYzsgQyA8PSByLmUuYzsgKytDKSB7XG5cdFx0XHRcdHZhciBjb29yZCA9IGVuY29kZV9jZWxsKHtyOlIsYzpDfSk7XG5cdFx0XHRcdGNlbGwgPSBkZW5zZSA/ICh3c1tSXXx8W10pW0NdOiB3c1tjb29yZF07XG5cdFx0XHRcdGlmKCFjZWxsIHx8IGNlbGwudiA9PSBudWxsICYmICghY2VsbC5mIHx8IGNlbGwuRikpIGNvbnRpbnVlO1xuXHRcdFx0XHRvLnB1c2god3JpdGVfd3NfY2VsbF9zeWxrKGNlbGwsIHdzLCBSLCBDLCBvcHRzKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBwcmVhbWJsZS5qb2luKFJTKSArIFJTICsgby5qb2luKFJTKSArIFJTICsgXCJFXCIgKyBSUztcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dG9fd29ya2Jvb2s6IHN5bGtfdG9fd29ya2Jvb2ssXG5cdFx0dG9fc2hlZXQ6IHN5bGtfdG9fc2hlZXQsXG5cdFx0ZnJvbV9zaGVldDogc2hlZXRfdG9fc3lsa1xuXHR9O1xufSkoKTtcblxudmFyIERJRiA9IChmdW5jdGlvbigpIHtcblx0ZnVuY3Rpb24gZGlmX3RvX2FvYShkLCBvcHRzKSB7XG5cdFx0c3dpdGNoKG9wdHMudHlwZSkge1xuXHRcdFx0Y2FzZSAnYmFzZTY0JzogcmV0dXJuIGRpZl90b19hb2Ffc3RyKEJhc2U2NC5kZWNvZGUoZCksIG9wdHMpO1xuXHRcdFx0Y2FzZSAnYmluYXJ5JzogcmV0dXJuIGRpZl90b19hb2Ffc3RyKGQsIG9wdHMpO1xuXHRcdFx0Y2FzZSAnYnVmZmVyJzogcmV0dXJuIGRpZl90b19hb2Ffc3RyKGQudG9TdHJpbmcoJ2JpbmFyeScpLCBvcHRzKTtcblx0XHRcdGNhc2UgJ2FycmF5JzogcmV0dXJuIGRpZl90b19hb2Ffc3RyKGNjMnN0cihkKSwgb3B0cyk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCB0eXBlIFwiICsgb3B0cy50eXBlKTtcblx0fVxuXHRmdW5jdGlvbiBkaWZfdG9fYW9hX3N0cihzdHIpIHtcblx0XHR2YXIgcmVjb3JkcyA9IHN0ci5zcGxpdCgnXFxuJyksIFIgPSAtMSwgQyA9IC0xLCByaSA9IDAsIGFyciA9IFtdO1xuXHRcdGZvciAoOyByaSAhPT0gcmVjb3Jkcy5sZW5ndGg7ICsrcmkpIHtcblx0XHRcdGlmIChyZWNvcmRzW3JpXS50cmltKCkgPT09ICdCT1QnKSB7IGFyclsrK1JdID0gW107IEMgPSAwOyBjb250aW51ZTsgfVxuXHRcdFx0aWYgKFIgPCAwKSBjb250aW51ZTtcblx0XHRcdHZhciBtZXRhZGF0YSA9IHJlY29yZHNbcmldLnRyaW0oKS5zcGxpdChcIixcIik7XG5cdFx0XHR2YXIgdHlwZSA9IG1ldGFkYXRhWzBdLCB2YWx1ZSA9IG1ldGFkYXRhWzFdO1xuXHRcdFx0KytyaTtcblx0XHRcdHZhciBkYXRhID0gcmVjb3Jkc1tyaV0udHJpbSgpO1xuXHRcdFx0c3dpdGNoICgrdHlwZSkge1xuXHRcdFx0XHRjYXNlIC0xOlxuXHRcdFx0XHRcdGlmIChkYXRhID09PSAnQk9UJykgeyBhcnJbKytSXSA9IFtdOyBDID0gMDsgY29udGludWU7IH1cblx0XHRcdFx0XHRlbHNlIGlmIChkYXRhICE9PSAnRU9EJykgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIERJRiBzcGVjaWFsIGNvbW1hbmQgXCIgKyBkYXRhKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdGlmKGRhdGEgPT09ICdUUlVFJykgYXJyW1JdW0NdID0gdHJ1ZTtcblx0XHRcdFx0XHRlbHNlIGlmKGRhdGEgPT09ICdGQUxTRScpIGFycltSXVtDXSA9IGZhbHNlO1xuXHRcdFx0XHRcdGVsc2UgaWYoIWlzTmFOKGZ1enp5bnVtKHZhbHVlKSkpIGFycltSXVtDXSA9IGZ1enp5bnVtKHZhbHVlKTtcblx0XHRcdFx0XHRlbHNlIGlmKCFpc05hTihmdXp6eWRhdGUodmFsdWUpLmdldERhdGUoKSkpIGFycltSXVtDXSA9IHBhcnNlRGF0ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0ZWxzZSBhcnJbUl1bQ10gPSB2YWx1ZTtcblx0XHRcdFx0XHQrK0M7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0ZGF0YSA9IGRhdGEuc2xpY2UoMSxkYXRhLmxlbmd0aC0xKTtcblx0XHRcdFx0XHRhcnJbUl1bQysrXSA9IGRhdGEgIT09ICcnID8gZGF0YSA6IG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGF0YSA9PT0gJ0VPRCcpIGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyO1xuXHR9XG5cblx0ZnVuY3Rpb24gZGlmX3RvX3NoZWV0KHN0ciwgb3B0cykgeyByZXR1cm4gYW9hX3RvX3NoZWV0KGRpZl90b19hb2Eoc3RyLCBvcHRzKSwgb3B0cyk7IH1cblx0ZnVuY3Rpb24gZGlmX3RvX3dvcmtib29rKHN0ciwgb3B0cykgeyByZXR1cm4gc2hlZXRfdG9fd29ya2Jvb2soZGlmX3RvX3NoZWV0KHN0ciwgb3B0cyksIG9wdHMpOyB9XG5cblx0dmFyIHNoZWV0X3RvX2RpZiA9IChmdW5jdGlvbigpIHtcblx0XHR2YXIgcHVzaF9maWVsZCA9IGZ1bmN0aW9uIHBmKG8sIHRvcGljLCB2LCBuLCBzKSB7XG5cdFx0XHRvLnB1c2godG9waWMpO1xuXHRcdFx0by5wdXNoKHYgKyBcIixcIiArIG4pO1xuXHRcdFx0by5wdXNoKCdcIicgKyBzLnJlcGxhY2UoL1wiL2csJ1wiXCInKSArICdcIicpO1xuXHRcdH07XG5cdFx0dmFyIHB1c2hfdmFsdWUgPSBmdW5jdGlvbiBwbyhvLCB0eXBlLCB2LCBzKSB7XG5cdFx0XHRvLnB1c2godHlwZSArIFwiLFwiICsgdik7XG5cdFx0XHRvLnB1c2godHlwZSA9PSAxID8gJ1wiJyArIHMucmVwbGFjZSgvXCIvZywnXCJcIicpICsgJ1wiJyA6IHMpO1xuXHRcdH07XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIHNoZWV0X3RvX2RpZih3cykge1xuXHRcdFx0dmFyIG8gPSBbXTtcblx0XHRcdHZhciByID0gc2FmZV9kZWNvZGVfcmFuZ2Uod3NbJyFyZWYnXSksIGNlbGw7XG5cdFx0XHR2YXIgZGVuc2UgPSBBcnJheS5pc0FycmF5KHdzKTtcblx0XHRcdHB1c2hfZmllbGQobywgXCJUQUJMRVwiLCAwLCAxLCBcInNoZWV0anNcIik7XG5cdFx0XHRwdXNoX2ZpZWxkKG8sIFwiVkVDVE9SU1wiLCAwLCByLmUuciAtIHIucy5yICsgMSxcIlwiKTtcblx0XHRcdHB1c2hfZmllbGQobywgXCJUVVBMRVNcIiwgMCwgci5lLmMgLSByLnMuYyArIDEsXCJcIik7XG5cdFx0XHRwdXNoX2ZpZWxkKG8sIFwiREFUQVwiLCAwLCAwLFwiXCIpO1xuXHRcdFx0Zm9yKHZhciBSID0gci5zLnI7IFIgPD0gci5lLnI7ICsrUikge1xuXHRcdFx0XHRwdXNoX3ZhbHVlKG8sIC0xLCAwLCBcIkJPVFwiKTtcblx0XHRcdFx0Zm9yKHZhciBDID0gci5zLmM7IEMgPD0gci5lLmM7ICsrQykge1xuXHRcdFx0XHRcdHZhciBjb29yZCA9IGVuY29kZV9jZWxsKHtyOlIsYzpDfSk7XG5cdFx0XHRcdFx0Y2VsbCA9IGRlbnNlID8gKHdzW1JdfHxbXSlbQ10gOiB3c1tjb29yZF07XG5cdFx0XHRcdFx0aWYoIWNlbGwpIHsgcHVzaF92YWx1ZShvLCAxLCAwLCBcIlwiKTsgY29udGludWU7fVxuXHRcdFx0XHRcdHN3aXRjaChjZWxsLnQpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ24nOlxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gRElGX1hMID8gY2VsbC53IDogY2VsbC52O1xuXHRcdFx0XHRcdFx0XHRpZighdmFsICYmIGNlbGwudiAhPSBudWxsKSB2YWwgPSBjZWxsLnY7XG5cdFx0XHRcdFx0XHRcdGlmKHZhbCA9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoRElGX1hMICYmIGNlbGwuZiAmJiAhY2VsbC5GKSBwdXNoX3ZhbHVlKG8sIDEsIDAsIFwiPVwiICsgY2VsbC5mKTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIHB1c2hfdmFsdWUobywgMSwgMCwgXCJcIik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZSBwdXNoX3ZhbHVlKG8sIDAsIHZhbCwgXCJWXCIpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2InOlxuXHRcdFx0XHRcdFx0XHRwdXNoX3ZhbHVlKG8sIDAsIGNlbGwudiA/IDEgOiAwLCBjZWxsLnYgPyBcIlRSVUVcIiA6IFwiRkFMU0VcIik7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAncyc6XG5cdFx0XHRcdFx0XHRcdHB1c2hfdmFsdWUobywgMSwgMCwgKCFESUZfWEwgfHwgaXNOYU4oY2VsbC52KSkgPyBjZWxsLnYgOiAnPVwiJyArIGNlbGwudiArICdcIicpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOlxuXHRcdFx0XHRcdFx0XHRpZighY2VsbC53KSBjZWxsLncgPSBTU0YuZm9ybWF0KGNlbGwueiB8fCBTU0YuX3RhYmxlWzE0XSwgZGF0ZW51bShwYXJzZURhdGUoY2VsbC52KSkpO1xuXHRcdFx0XHRcdFx0XHRpZihESUZfWEwpIHB1c2hfdmFsdWUobywgMCwgY2VsbC53LCBcIlZcIik7XG5cdFx0XHRcdFx0XHRcdGVsc2UgcHVzaF92YWx1ZShvLCAxLCAwLCBjZWxsLncpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6IHB1c2hfdmFsdWUobywgMSwgMCwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRwdXNoX3ZhbHVlKG8sIC0xLCAwLCBcIkVPRFwiKTtcblx0XHRcdHZhciBSUyA9IFwiXFxyXFxuXCI7XG5cdFx0XHR2YXIgb28gPSBvLmpvaW4oUlMpO1xuXHRcdFx0Ly93aGlsZSgob28ubGVuZ3RoICYgMHg3RikgIT0gMCkgb28gKz0gXCJcXDBcIjtcblx0XHRcdHJldHVybiBvbztcblx0XHR9O1xuXHR9KSgpO1xuXHRyZXR1cm4ge1xuXHRcdHRvX3dvcmtib29rOiBkaWZfdG9fd29ya2Jvb2ssXG5cdFx0dG9fc2hlZXQ6IGRpZl90b19zaGVldCxcblx0XHRmcm9tX3NoZWV0OiBzaGVldF90b19kaWZcblx0fTtcbn0pKCk7XG5cbnZhciBFVEggPSAoZnVuY3Rpb24oKSB7XG5cdGZ1bmN0aW9uIGRlY29kZShzKSB7IHJldHVybiBzLnJlcGxhY2UoL1xcXFxiL2csXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxjL2csXCI6XCIpLnJlcGxhY2UoL1xcXFxuL2csXCJcXG5cIik7IH1cblx0ZnVuY3Rpb24gZW5jb2RlKHMpIHsgcmV0dXJuIHMucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxiXCIpLnJlcGxhY2UoLzovZywgXCJcXFxcY1wiKS5yZXBsYWNlKC9cXG4vZyxcIlxcXFxuXCIpOyB9XG5cblx0ZnVuY3Rpb24gZXRoX3RvX2FvYShzdHIpIHtcblx0XHR2YXIgcmVjb3JkcyA9IHN0ci5zcGxpdCgnXFxuJyksIFIgPSAtMSwgQyA9IC0xLCByaSA9IDAsIGFyciA9IFtdO1xuXHRcdGZvciAoOyByaSAhPT0gcmVjb3Jkcy5sZW5ndGg7ICsrcmkpIHtcblx0XHRcdHZhciByZWNvcmQgPSByZWNvcmRzW3JpXS50cmltKCkuc3BsaXQoXCI6XCIpO1xuXHRcdFx0aWYocmVjb3JkWzBdICE9PSAnY2VsbCcpIGNvbnRpbnVlO1xuXHRcdFx0dmFyIGFkZHIgPSBkZWNvZGVfY2VsbChyZWNvcmRbMV0pO1xuXHRcdFx0aWYoYXJyLmxlbmd0aCA8PSBhZGRyLnIpIGZvcihSID0gYXJyLmxlbmd0aDsgUiA8PSBhZGRyLnI7ICsrUikgaWYoIWFycltSXSkgYXJyW1JdID0gW107XG5cdFx0XHRSID0gYWRkci5yOyBDID0gYWRkci5jO1xuXHRcdFx0c3dpdGNoKHJlY29yZFsyXSkge1xuXHRcdFx0XHRjYXNlICd0JzogYXJyW1JdW0NdID0gZGVjb2RlKHJlY29yZFszXSk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICd2JzogYXJyW1JdW0NdID0gK3JlY29yZFszXTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3Z0Zic6IHZhciBfZiA9IHJlY29yZFtyZWNvcmQubGVuZ3RoIC0gMV07XG5cdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlICd2dGMnOlxuXHRcdFx0XHRcdHN3aXRjaChyZWNvcmRbM10pIHtcblx0XHRcdFx0XHRcdGNhc2UgJ25sJzogYXJyW1JdW0NdID0gK3JlY29yZFs0XSA/IHRydWUgOiBmYWxzZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OiBhcnJbUl1bQ10gPSArcmVjb3JkWzRdOyBicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYocmVjb3JkWzJdID09ICd2dGYnKSBhcnJbUl1bQ10gPSBbYXJyW1JdW0NdLCBfZl07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhcnI7XG5cdH1cblxuXHRmdW5jdGlvbiBldGhfdG9fc2hlZXQoZCwgb3B0cykgeyByZXR1cm4gYW9hX3RvX3NoZWV0KGV0aF90b19hb2EoZCwgb3B0cyksIG9wdHMpOyB9XG5cdGZ1bmN0aW9uIGV0aF90b193b3JrYm9vayhkLCBvcHRzKSB7IHJldHVybiBzaGVldF90b193b3JrYm9vayhldGhfdG9fc2hlZXQoZCwgb3B0cyksIG9wdHMpOyB9XG5cblx0dmFyIGhlYWRlciA9IFtcblx0XHRcInNvY2lhbGNhbGM6dmVyc2lvbjoxLjVcIixcblx0XHRcIk1JTUUtVmVyc2lvbjogMS4wXCIsXG5cdFx0XCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9U29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmVcIlxuXHRdLmpvaW4oXCJcXG5cIik7XG5cblx0dmFyIHNlcCA9IFtcblx0XHRcIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmVcIixcblx0XHRcIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFwiXG5cdF0uam9pbihcIlxcblwiKSArIFwiXFxuXCI7XG5cblx0LyogVE9ETzogdGhlIG90aGVyIHBhcnRzICovXG5cdHZhciBtZXRhID0gW1xuXHRcdFwiIyBTb2NpYWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZVwiLFxuXHRcdFwicGFydDpzaGVldFwiXG5cdF0uam9pbihcIlxcblwiKTtcblxuXHR2YXIgZW5kID0gXCItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS1cIjtcblxuXHRmdW5jdGlvbiBzaGVldF90b19ldGhfZGF0YSh3cykge1xuXHRcdGlmKCF3cyB8fCAhd3NbJyFyZWYnXSkgcmV0dXJuIFwiXCI7XG5cdFx0dmFyIG8gPSBbXSwgb28gPSBbXSwgY2VsbCwgY29vcmQgPSBcIlwiO1xuXHRcdHZhciByID0gZGVjb2RlX3JhbmdlKHdzWychcmVmJ10pO1xuXHRcdHZhciBkZW5zZSA9IEFycmF5LmlzQXJyYXkod3MpO1xuXHRcdGZvcih2YXIgUiA9IHIucy5yOyBSIDw9IHIuZS5yOyArK1IpIHtcblx0XHRcdGZvcih2YXIgQyA9IHIucy5jOyBDIDw9IHIuZS5jOyArK0MpIHtcblx0XHRcdFx0Y29vcmQgPSBlbmNvZGVfY2VsbCh7cjpSLGM6Q30pO1xuXHRcdFx0XHRjZWxsID0gZGVuc2UgPyAod3NbUl18fFtdKVtDXSA6IHdzW2Nvb3JkXTtcblx0XHRcdFx0aWYoIWNlbGwgfHwgY2VsbC52ID09IG51bGwgfHwgY2VsbC50ID09PSAneicpIGNvbnRpbnVlO1xuXHRcdFx0XHRvbyA9IFtcImNlbGxcIiwgY29vcmQsICd0J107XG5cdFx0XHRcdHN3aXRjaChjZWxsLnQpIHtcblx0XHRcdFx0XHRjYXNlICdzJzogY2FzZSAnc3RyJzogb28ucHVzaChlbmNvZGUoY2VsbC52KSk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ24nOlxuXHRcdFx0XHRcdFx0aWYoIWNlbGwuZikgeyBvb1syXT0ndic7IG9vWzNdPWNlbGwudjsgfVxuXHRcdFx0XHRcdFx0ZWxzZSB7IG9vWzJdPSd2dGYnOyBvb1szXT0nbic7IG9vWzRdPWNlbGwudjsgb29bNV09ZW5jb2RlKGNlbGwuZik7IH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2InOlxuXHRcdFx0XHRcdFx0b29bMl0gPSAndnQnKyhjZWxsLmY/J2YnOidjJyk7IG9vWzNdPSdubCc7IG9vWzRdPWNlbGwudj9cIjFcIjpcIjBcIjtcblx0XHRcdFx0XHRcdG9vWzVdID0gZW5jb2RlKGNlbGwuZnx8KGNlbGwudj8nVFJVRSc6J0ZBTFNFJykpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnZCc6XG5cdFx0XHRcdFx0XHR2YXIgdCA9IGRhdGVudW0ocGFyc2VEYXRlKGNlbGwudikpO1xuXHRcdFx0XHRcdFx0b29bMl0gPSAndnRjJzsgb29bM10gPSAnbmQnOyBvb1s0XSA9IFwiXCIrdDtcblx0XHRcdFx0XHRcdG9vWzVdID0gY2VsbC53IHx8IFNTRi5mb3JtYXQoY2VsbC56IHx8IFNTRi5fdGFibGVbMTRdLCB0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2UnOiBjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvLnB1c2gob28uam9pbihcIjpcIikpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRvLnB1c2goXCJzaGVldDpjOlwiICsgKHIuZS5jLXIucy5jKzEpICsgXCI6cjpcIiArIChyLmUuci1yLnMucisxKSArIFwiOnR2ZjoxXCIpO1xuXHRcdG8ucHVzaChcInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpXCIpO1xuXHRcdC8vby5wdXNoKFwiY29waWVkZnJvbTpcIiArIHdzWychcmVmJ10pOyAvLyBjbGlwYm9hcmQgb25seVxuXHRcdHJldHVybiBvLmpvaW4oXCJcXG5cIik7XG5cdH1cblxuXHRmdW5jdGlvbiBzaGVldF90b19ldGgod3MpIHtcblx0XHRyZXR1cm4gW2hlYWRlciwgc2VwLCBtZXRhLCBzZXAsIHNoZWV0X3RvX2V0aF9kYXRhKHdzKSwgZW5kXS5qb2luKFwiXFxuXCIpO1xuXHRcdC8vIHJldHVybiBbXCJ2ZXJzaW9uOjEuNVwiLCBzaGVldF90b19ldGhfZGF0YSh3cyldLmpvaW4oXCJcXG5cIik7IC8vIGNsaXBib2FyZCBmb3JtXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRvX3dvcmtib29rOiBldGhfdG9fd29ya2Jvb2ssXG5cdFx0dG9fc2hlZXQ6IGV0aF90b19zaGVldCxcblx0XHRmcm9tX3NoZWV0OiBzaGVldF90b19ldGhcblx0fTtcbn0pKCk7XG5cbnZhciBQUk4gPSAoZnVuY3Rpb24oKSB7XG5cdGZ1bmN0aW9uIHNldF90ZXh0X2FycihkYXRhLCBhcnIsIFIsIEMsIG8pIHtcblx0XHRpZihvLnJhdykgYXJyW1JdW0NdID0gZGF0YTtcblx0XHRlbHNlIGlmKGRhdGEgPT09ICdUUlVFJykgYXJyW1JdW0NdID0gdHJ1ZTtcblx0XHRlbHNlIGlmKGRhdGEgPT09ICdGQUxTRScpIGFycltSXVtDXSA9IGZhbHNlO1xuXHRcdGVsc2UgaWYoZGF0YSA9PT0gXCJcIil7LyogZW1wdHkgKi99XG5cdFx0ZWxzZSBpZighaXNOYU4oZnV6enludW0oZGF0YSkpKSBhcnJbUl1bQ10gPSBmdXp6eW51bShkYXRhKTtcblx0XHRlbHNlIGlmKCFpc05hTihmdXp6eWRhdGUoZGF0YSkuZ2V0RGF0ZSgpKSkgYXJyW1JdW0NdID0gcGFyc2VEYXRlKGRhdGEpO1xuXHRcdGVsc2UgYXJyW1JdW0NdID0gZGF0YTtcblx0fVxuXG5cdGZ1bmN0aW9uIHBybl90b19hb2Ffc3RyKGYsIG9wdHMpIHtcblx0XHR2YXIgbyA9IG9wdHMgfHwge307XG5cdFx0dmFyIGFyciA9IChbXSk7XG5cdFx0aWYoIWYgfHwgZi5sZW5ndGggPT09IDApIHJldHVybiBhcnI7XG5cdFx0dmFyIGxpbmVzID0gZi5zcGxpdCgvW1xcclxcbl0vKTtcblx0XHR2YXIgTCA9IGxpbmVzLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUoTCA+PSAwICYmIGxpbmVzW0xdLmxlbmd0aCA9PT0gMCkgLS1MO1xuXHRcdHZhciBzdGFydCA9IDEwLCBpZHggPSAwO1xuXHRcdHZhciBSID0gMDtcblx0XHRmb3IoOyBSIDw9IEw7ICsrUikge1xuXHRcdFx0aWR4ID0gbGluZXNbUl0uaW5kZXhPZihcIiBcIik7XG5cdFx0XHRpZihpZHggPT0gLTEpIGlkeCA9IGxpbmVzW1JdLmxlbmd0aDsgZWxzZSBpZHgrKztcblx0XHRcdHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIGlkeCk7XG5cdFx0fVxuXHRcdGZvcihSID0gMDsgUiA8PSBMOyArK1IpIHtcblx0XHRcdGFycltSXSA9IFtdO1xuXHRcdFx0LyogVE9ETzogY29uZmlybSB0aGF0IHdpZHRocyBhcmUgYWx3YXlzIDEwICovXG5cdFx0XHR2YXIgQyA9IDA7XG5cdFx0XHRzZXRfdGV4dF9hcnIobGluZXNbUl0uc2xpY2UoMCwgc3RhcnQpLnRyaW0oKSwgYXJyLCBSLCBDLCBvKTtcblx0XHRcdGZvcihDID0gMTsgQyA8PSAobGluZXNbUl0ubGVuZ3RoIC0gc3RhcnQpLzEwICsgMTsgKytDKVxuXHRcdFx0XHRzZXRfdGV4dF9hcnIobGluZXNbUl0uc2xpY2Uoc3RhcnQrKEMtMSkqMTAsc3RhcnQrQyoxMCkudHJpbSgpLGFycixSLEMsbyk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnI7XG5cdH1cblxuXHQvLyBMaXN0IG9mIGFjY2VwdGVkIENTViBzZXBhcmF0b3JzXG5cdHZhciBndWVzc19zZXBzID0ge1xuMHgyQzogJywnLFxuMHgwOTogXCJcXHRcIixcbjB4M0I6ICc7J1xuXHR9O1xuXG5cdC8vIENTViBzZXBhcmF0b3Igd2VpZ2h0cyB0byBiZSB1c2VkIGluIGNhc2Ugb2YgZXF1YWwgbnVtYmVyc1xuXHR2YXIgZ3Vlc3Nfc2VwX3dlaWdodHMgPSB7XG4weDJDOiAzLFxuMHgwOTogMixcbjB4M0I6IDFcblx0fTtcblxuXHRmdW5jdGlvbiBndWVzc19zZXAoc3RyKSB7XG5cdFx0dmFyIGNudCA9IHt9LCBpbnN0ciA9IGZhbHNlLCBlbmQgPSAwLCBjYyA9IDA7XG5cdFx0Zm9yKDtlbmQgPCBzdHIubGVuZ3RoOysrZW5kKSB7XG5cdFx0XHRpZigoY2M9c3RyLmNoYXJDb2RlQXQoZW5kKSkgPT0gMHgyMikgaW5zdHIgPSAhaW5zdHI7XG5cdFx0XHRlbHNlIGlmKCFpbnN0ciAmJiBjYyBpbiBndWVzc19zZXBzKSBjbnRbY2NdID0gKGNudFtjY118fDApKzE7XG5cdFx0fVxuXG5cdFx0Y2MgPSBbXTtcblx0XHRmb3IoZW5kIGluIGNudCkgaWYgKCBjbnQuaGFzT3duUHJvcGVydHkoZW5kKSApIHtcblx0XHRcdGNjLnB1c2goWyBjbnRbZW5kXSwgZW5kIF0pO1xuXHRcdH1cblxuXHRcdGlmICggIWNjLmxlbmd0aCApIHtcblx0XHRcdGNudCA9IGd1ZXNzX3NlcF93ZWlnaHRzO1xuXHRcdFx0Zm9yKGVuZCBpbiBjbnQpIGlmICggY250Lmhhc093blByb3BlcnR5KGVuZCkgKSB7XG5cdFx0XHRcdGNjLnB1c2goWyBjbnRbZW5kXSwgZW5kIF0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNjLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYVswXSAtIGJbMF0gfHwgZ3Vlc3Nfc2VwX3dlaWdodHNbYVsxXV0gLSBndWVzc19zZXBfd2VpZ2h0c1tiWzFdXTsgfSk7XG5cblx0XHRyZXR1cm4gZ3Vlc3Nfc2Vwc1tjYy5wb3AoKVsxXV07XG5cdH1cblxuXHRmdW5jdGlvbiBkc3ZfdG9fc2hlZXRfc3RyKHN0ciwgb3B0cykge1xuXHRcdHZhciBvID0gb3B0cyB8fCB7fTtcblx0XHR2YXIgc2VwID0gXCJcIjtcblx0XHRpZihERU5TRSAhPSBudWxsICYmIG8uZGVuc2UgPT0gbnVsbCkgby5kZW5zZSA9IERFTlNFO1xuXHRcdHZhciB3cyA9IG8uZGVuc2UgPyAoW10pIDogKHt9KTtcblx0XHR2YXIgcmFuZ2UgPSAoe3M6IHtjOjAsIHI6MH0sIGU6IHtjOjAsIHI6MH19KTtcblxuXHRcdGlmKHN0ci5zbGljZSgwLDQpID09IFwic2VwPVwiICYmIHN0ci5jaGFyQ29kZUF0KDUpID09IDEwKSB7IHNlcCA9IHN0ci5jaGFyQXQoNCk7IHN0ciA9IHN0ci5zbGljZSg2KTsgfVxuXHRcdGVsc2Ugc2VwID0gZ3Vlc3Nfc2VwKHN0ci5zbGljZSgwLDEwMjQpKTtcblx0XHR2YXIgUiA9IDAsIEMgPSAwLCB2ID0gMDtcblx0XHR2YXIgc3RhcnQgPSAwLCBlbmQgPSAwLCBzZXBjYyA9IHNlcC5jaGFyQ29kZUF0KDApLCBpbnN0ciA9IGZhbHNlLCBjYz0wO1xuXHRcdHN0ciA9IHN0ci5yZXBsYWNlKC9cXHJcXG4vbWcsIFwiXFxuXCIpO1xuXHRcdHZhciBfcmUgPSBvLmRhdGVORiAhPSBudWxsID8gZGF0ZU5GX3JlZ2V4KG8uZGF0ZU5GKSA6IG51bGw7XG5cdFx0ZnVuY3Rpb24gZmluaXNoX2NlbGwoKSB7XG5cdFx0XHR2YXIgcyA9IHN0ci5zbGljZShzdGFydCwgZW5kKTtcblx0XHRcdHZhciBjZWxsID0gKHt9KTtcblx0XHRcdGlmKHMuY2hhckF0KDApID09ICdcIicgJiYgcy5jaGFyQXQocy5sZW5ndGggLSAxKSA9PSAnXCInKSBzID0gcy5zbGljZSgxLC0xKS5yZXBsYWNlKC9cIlwiL2csJ1wiJyk7XG5cdFx0XHRpZihzLmxlbmd0aCA9PT0gMCkgY2VsbC50ID0gJ3onO1xuXHRcdFx0ZWxzZSBpZihvLnJhdykgeyBjZWxsLnQgPSAncyc7IGNlbGwudiA9IHM7IH1cblx0XHRcdGVsc2UgaWYocy50cmltKCkubGVuZ3RoID09PSAwKSB7IGNlbGwudCA9ICdzJzsgY2VsbC52ID0gczsgfVxuXHRcdFx0ZWxzZSBpZihzLmNoYXJDb2RlQXQoMCkgPT0gMHgzRCkge1xuXHRcdFx0XHRpZihzLmNoYXJDb2RlQXQoMSkgPT0gMHgyMiAmJiBzLmNoYXJDb2RlQXQocy5sZW5ndGggLSAxKSA9PSAweDIyKSB7IGNlbGwudCA9ICdzJzsgY2VsbC52ID0gcy5zbGljZSgyLC0xKS5yZXBsYWNlKC9cIlwiL2csJ1wiJyk7IH1cblx0XHRcdFx0ZWxzZSBpZihmdXp6eWZtbGEocykpIHsgY2VsbC50ID0gJ24nOyBjZWxsLmYgPSBzLnNsaWNlKDEpOyB9XG5cdFx0XHRcdGVsc2UgeyBjZWxsLnQgPSAncyc7IGNlbGwudiA9IHM7IH0gfVxuXHRcdFx0ZWxzZSBpZihzID09IFwiVFJVRVwiKSB7IGNlbGwudCA9ICdiJzsgY2VsbC52ID0gdHJ1ZTsgfVxuXHRcdFx0ZWxzZSBpZihzID09IFwiRkFMU0VcIikgeyBjZWxsLnQgPSAnYic7IGNlbGwudiA9IGZhbHNlOyB9XG5cdFx0XHRlbHNlIGlmKCFpc05hTih2ID0gZnV6enludW0ocykpKSB7IGNlbGwudCA9ICduJzsgaWYoby5jZWxsVGV4dCAhPT0gZmFsc2UpIGNlbGwudyA9IHM7IGNlbGwudiA9IHY7IH1cblx0XHRcdGVsc2UgaWYoIWlzTmFOKGZ1enp5ZGF0ZShzKS5nZXREYXRlKCkpIHx8IF9yZSAmJiBzLm1hdGNoKF9yZSkpIHtcblx0XHRcdFx0Y2VsbC56ID0gby5kYXRlTkYgfHwgU1NGLl90YWJsZVsxNF07XG5cdFx0XHRcdHZhciBrID0gMDtcblx0XHRcdFx0aWYoX3JlICYmIHMubWF0Y2goX3JlKSl7IHM9ZGF0ZU5GX2ZpeChzLCBvLmRhdGVORiwgKHMubWF0Y2goX3JlKXx8W10pKTsgaz0xOyB9XG5cdFx0XHRcdGlmKG8uY2VsbERhdGVzKSB7IGNlbGwudCA9ICdkJzsgY2VsbC52ID0gcGFyc2VEYXRlKHMsIGspOyB9XG5cdFx0XHRcdGVsc2UgeyBjZWxsLnQgPSAnbic7IGNlbGwudiA9IGRhdGVudW0ocGFyc2VEYXRlKHMsIGspKTsgfVxuXHRcdFx0XHRpZihvLmNlbGxUZXh0ICE9PSBmYWxzZSkgY2VsbC53ID0gU1NGLmZvcm1hdChjZWxsLnosIGNlbGwudiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlbnVtKGNlbGwudik6Y2VsbC52KTtcblx0XHRcdFx0aWYoIW8uY2VsbE5GKSBkZWxldGUgY2VsbC56O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2VsbC50ID0gJ3MnO1xuXHRcdFx0XHRjZWxsLnYgPSBzO1xuXHRcdFx0fVxuXHRcdFx0aWYoY2VsbC50ID09ICd6Jyl7fVxuXHRcdFx0ZWxzZSBpZihvLmRlbnNlKSB7IGlmKCF3c1tSXSkgd3NbUl0gPSBbXTsgd3NbUl1bQ10gPSBjZWxsOyB9XG5cdFx0XHRlbHNlIHdzW2VuY29kZV9jZWxsKHtjOkMscjpSfSldID0gY2VsbDtcblx0XHRcdHN0YXJ0ID0gZW5kKzE7XG5cdFx0XHRpZihyYW5nZS5lLmMgPCBDKSByYW5nZS5lLmMgPSBDO1xuXHRcdFx0aWYocmFuZ2UuZS5yIDwgUikgcmFuZ2UuZS5yID0gUjtcblx0XHRcdGlmKGNjID09IHNlcGNjKSArK0M7IGVsc2UgeyBDID0gMDsgKytSOyB9XG5cdFx0fVxuXHRcdGZvcig7ZW5kIDwgc3RyLmxlbmd0aDsrK2VuZCkgc3dpdGNoKChjYz1zdHIuY2hhckNvZGVBdChlbmQpKSkge1xuXHRcdFx0Y2FzZSAweDIyOiBpbnN0ciA9ICFpbnN0cjsgYnJlYWs7XG5cdFx0XHRjYXNlIHNlcGNjOiBjYXNlIDB4MGE6IGNhc2UgMHgwZDogaWYoIWluc3RyKSBmaW5pc2hfY2VsbCgpOyBicmVhaztcblx0XHRcdGRlZmF1bHQ6IGJyZWFrO1xuXHRcdH1cblx0XHRpZihlbmQgLSBzdGFydCA+IDApIGZpbmlzaF9jZWxsKCk7XG5cblx0XHR3c1snIXJlZiddID0gZW5jb2RlX3JhbmdlKHJhbmdlKTtcblx0XHRyZXR1cm4gd3M7XG5cdH1cblxuXHRmdW5jdGlvbiBwcm5fdG9fc2hlZXRfc3RyKHN0ciwgb3B0cykge1xuXHRcdGlmKHN0ci5zbGljZSgwLDQpID09IFwic2VwPVwiKSByZXR1cm4gZHN2X3RvX3NoZWV0X3N0cihzdHIsIG9wdHMpO1xuXHRcdGlmKHN0ci5pbmRleE9mKFwiXFx0XCIpID49IDAgfHwgc3RyLmluZGV4T2YoXCIsXCIpID49IDAgfHwgc3RyLmluZGV4T2YoXCI7XCIpID49IDApIHJldHVybiBkc3ZfdG9fc2hlZXRfc3RyKHN0ciwgb3B0cyk7XG5cdFx0cmV0dXJuIGFvYV90b19zaGVldChwcm5fdG9fYW9hX3N0cihzdHIsIG9wdHMpLCBvcHRzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHBybl90b19zaGVldChkLCBvcHRzKSB7XG5cdFx0dmFyIHN0ciA9IFwiXCIsIGJ5dGVzID0gb3B0cy50eXBlID09ICdzdHJpbmcnID8gWzAsMCwwLDBdIDogZmlyc3RieXRlKGQsIG9wdHMpO1xuXHRcdHN3aXRjaChvcHRzLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2Jhc2U2NCc6IHN0ciA9IEJhc2U2NC5kZWNvZGUoZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnYmluYXJ5Jzogc3RyID0gZDsgYnJlYWs7XG5cdFx0XHRjYXNlICdidWZmZXInOiBzdHIgPSBkLnRvU3RyaW5nKCdiaW5hcnknKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdhcnJheSc6IHN0ciA9IGNjMnN0cihkKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdzdHJpbmcnOiBzdHIgPSBkOyBicmVhaztcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCB0eXBlIFwiICsgb3B0cy50eXBlKTtcblx0XHR9XG5cdFx0aWYoYnl0ZXNbMF0gPT0gMHhFRiAmJiBieXRlc1sxXSA9PSAweEJCICYmIGJ5dGVzWzJdID09IDB4QkYpIHN0ciA9IHV0ZjhyZWFkKHN0ci5zbGljZSgzKSk7XG5cdFx0ZWxzZSBpZigob3B0cy50eXBlID09ICdiaW5hcnknIHx8IG9wdHMudHlwZSA9PSAnYnVmZmVyJykgJiYgdHlwZW9mIGNwdGFibGUgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY29kZXBhZ2UpICBzdHIgPSBjcHRhYmxlLnV0aWxzLmRlY29kZShvcHRzLmNvZGVwYWdlLCBjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjUyLHN0cikpO1xuXHRcdGlmKHN0ci5zbGljZSgwLDE5KSA9PSBcInNvY2lhbGNhbGM6dmVyc2lvbjpcIikgcmV0dXJuIEVUSC50b19zaGVldChvcHRzLnR5cGUgPT0gJ3N0cmluZycgPyBzdHIgOiB1dGY4cmVhZChzdHIpLCBvcHRzKTtcblx0XHRyZXR1cm4gcHJuX3RvX3NoZWV0X3N0cihzdHIsIG9wdHMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcHJuX3RvX3dvcmtib29rKGQsIG9wdHMpIHsgcmV0dXJuIHNoZWV0X3RvX3dvcmtib29rKHBybl90b19zaGVldChkLCBvcHRzKSwgb3B0cyk7IH1cblxuXHRmdW5jdGlvbiBzaGVldF90b19wcm4od3MpIHtcblx0XHR2YXIgbyA9IFtdO1xuXHRcdHZhciByID0gc2FmZV9kZWNvZGVfcmFuZ2Uod3NbJyFyZWYnXSksIGNlbGw7XG5cdFx0dmFyIGRlbnNlID0gQXJyYXkuaXNBcnJheSh3cyk7XG5cdFx0Zm9yKHZhciBSID0gci5zLnI7IFIgPD0gci5lLnI7ICsrUikge1xuXHRcdFx0dmFyIG9vID0gW107XG5cdFx0XHRmb3IodmFyIEMgPSByLnMuYzsgQyA8PSByLmUuYzsgKytDKSB7XG5cdFx0XHRcdHZhciBjb29yZCA9IGVuY29kZV9jZWxsKHtyOlIsYzpDfSk7XG5cdFx0XHRcdGNlbGwgPSBkZW5zZSA/ICh3c1tSXXx8W10pW0NdIDogd3NbY29vcmRdO1xuXHRcdFx0XHRpZighY2VsbCB8fCBjZWxsLnYgPT0gbnVsbCkgeyBvby5wdXNoKFwiICAgICAgICAgIFwiKTsgY29udGludWU7IH1cblx0XHRcdFx0dmFyIHcgPSAoY2VsbC53IHx8IChmb3JtYXRfY2VsbChjZWxsKSwgY2VsbC53KSB8fCBcIlwiKS5zbGljZSgwLDEwKTtcblx0XHRcdFx0d2hpbGUody5sZW5ndGggPCAxMCkgdyArPSBcIiBcIjtcblx0XHRcdFx0b28ucHVzaCh3ICsgKEMgPT09IDAgPyBcIiBcIiA6IFwiXCIpKTtcblx0XHRcdH1cblx0XHRcdG8ucHVzaChvby5qb2luKFwiXCIpKTtcblx0XHR9XG5cdFx0cmV0dXJuIG8uam9pbihcIlxcblwiKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dG9fd29ya2Jvb2s6IHBybl90b193b3JrYm9vayxcblx0XHR0b19zaGVldDogcHJuX3RvX3NoZWV0LFxuXHRcdGZyb21fc2hlZXQ6IHNoZWV0X3RvX3ByblxuXHR9O1xufSkoKTtcblxuLyogRXhjZWwgZGVmYXVsdHMgdG8gU1lMSyBidXQgd2FybnMgaWYgZGF0YSBpcyBub3QgdmFsaWQgKi9cbmZ1bmN0aW9uIHJlYWRfd2JfSUQoZCwgb3B0cykge1xuXHR2YXIgbyA9IG9wdHMgfHwge30sIE9MRF9XVEYgPSAhIW8uV1RGOyBvLldURiA9IHRydWU7XG5cdHRyeSB7XG5cdFx0dmFyIG91dCA9IFNZTEsudG9fd29ya2Jvb2soZCwgbyk7XG5cdFx0by5XVEYgPSBPTERfV1RGO1xuXHRcdHJldHVybiBvdXQ7XG5cdH0gY2F0Y2goZSkge1xuXHRcdG8uV1RGID0gT0xEX1dURjtcblx0XHRpZighZS5tZXNzYWdlLm1hdGNoKC9TWUxLIGJhZCByZWNvcmQgSUQvKSAmJiBPTERfV1RGKSB0aHJvdyBlO1xuXHRcdHJldHVybiBQUk4udG9fd29ya2Jvb2soZCwgb3B0cyk7XG5cdH1cbn1cblxudmFyIFdLXyA9IChmdW5jdGlvbigpIHtcblx0ZnVuY3Rpb24gbG90dXNob3BwZXIoZGF0YSwgY2IsIG9wdHMpIHtcblx0XHRpZighZGF0YSkgcmV0dXJuO1xuXHRcdHByZXBfYmxvYihkYXRhLCBkYXRhLmwgfHwgMCk7XG5cdFx0dmFyIEVudW0gPSBvcHRzLkVudW0gfHwgV0sxRW51bTtcblx0XHR3aGlsZShkYXRhLmwgPCBkYXRhLmxlbmd0aCkge1xuXHRcdFx0dmFyIFJUID0gZGF0YS5yZWFkX3NoaWZ0KDIpO1xuXHRcdFx0dmFyIFIgPSBFbnVtW1JUXSB8fCBFbnVtWzB4RkZdO1xuXHRcdFx0dmFyIGxlbmd0aCA9IGRhdGEucmVhZF9zaGlmdCgyKTtcblx0XHRcdHZhciB0Z3QgPSBkYXRhLmwgKyBsZW5ndGg7XG5cdFx0XHR2YXIgZCA9IChSLmZ8fHBhcnNlbm9vcCkoZGF0YSwgbGVuZ3RoLCBvcHRzKTtcblx0XHRcdGRhdGEubCA9IHRndDtcblx0XHRcdGlmKGNiKGQsIFIubiwgUlQpKSByZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gbG90dXNfdG9fd29ya2Jvb2soZCwgb3B0cykge1xuXHRcdHN3aXRjaChvcHRzLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2Jhc2U2NCc6IHJldHVybiBsb3R1c190b193b3JrYm9va19idWYoczJhKEJhc2U2NC5kZWNvZGUoZCkpLCBvcHRzKTtcblx0XHRcdGNhc2UgJ2JpbmFyeSc6IHJldHVybiBsb3R1c190b193b3JrYm9va19idWYoczJhKGQpLCBvcHRzKTtcblx0XHRcdGNhc2UgJ2J1ZmZlcic6XG5cdFx0XHRjYXNlICdhcnJheSc6IHJldHVybiBsb3R1c190b193b3JrYm9va19idWYoZCwgb3B0cyk7XG5cdFx0fVxuXHRcdHRocm93IFwiVW5zdXBwb3J0ZWQgdHlwZSBcIiArIG9wdHMudHlwZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGxvdHVzX3RvX3dvcmtib29rX2J1ZihkLG9wdHMpIHtcblx0XHRpZighZCkgcmV0dXJuIGQ7XG5cdFx0dmFyIG8gPSBvcHRzIHx8IHt9O1xuXHRcdGlmKERFTlNFICE9IG51bGwgJiYgby5kZW5zZSA9PSBudWxsKSBvLmRlbnNlID0gREVOU0U7XG5cdFx0dmFyIHMgPSAoKG8uZGVuc2UgPyBbXSA6IHt9KSksIG4gPSBcIlNoZWV0MVwiLCBzaWR4ID0gMDtcblx0XHR2YXIgc2hlZXRzID0ge30sIHNuYW1lcyA9IFtuXTtcblxuXHRcdHZhciByZWZndWVzcyA9IHtzOiB7cjowLCBjOjB9LCBlOiB7cjowLCBjOjB9IH07XG5cblx0XHRpZihkWzJdID09IDB4MDIpIG8uRW51bSA9IFdLMUVudW07XG5cdFx0ZWxzZSBpZihkWzJdID09IDB4MWEpIG8uRW51bSA9IFdLM0VudW07XG5cdFx0ZWxzZSBpZihkWzJdID09IDB4MGUpIHsgby5FbnVtID0gV0szRW51bTsgby5xcHJvID0gdHJ1ZTsgZC5sID0gMDsgfVxuXHRcdGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIExPVFVTIEJPRiBcIiArIGRbMl0pO1xuXHRcdGxvdHVzaG9wcGVyKGQsIGZ1bmN0aW9uKHZhbCwgUm4sIFJUKSB7XG5cdFx0XHRpZihkWzJdID09IDB4MDIpIHN3aXRjaChSVCkge1xuXHRcdFx0XHRjYXNlIDB4MDA6XG5cdFx0XHRcdFx0by52ZXJzID0gdmFsO1xuXHRcdFx0XHRcdGlmKHZhbCA+PSAweDEwMDApIG8ucXBybyA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMHgwNjogcmVmZ3Vlc3MgPSB2YWw7IGJyZWFrOyAvKiBSQU5HRSAqL1xuXHRcdFx0XHRjYXNlIDB4MEY6IC8qIExBQkVMICovXG5cdFx0XHRcdFx0aWYoIW8ucXBybykgdmFsWzFdLnYgPSB2YWxbMV0udi5zbGljZSgxKTtcblx0XHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRcdGNhc2UgMHgwRDogLyogSU5URUdFUiAqL1xuXHRcdFx0XHRjYXNlIDB4MEU6IC8qIE5VTUJFUiAqL1xuXHRcdFx0XHRjYXNlIDB4MTA6IC8qIEZPUk1VTEEgKi9cblx0XHRcdFx0Y2FzZSAweDMzOiAvKiBTVFJJTkcgKi9cblx0XHRcdFx0XHQvKiBUT0RPOiBhY3R1YWwgdHJhbnNsYXRpb24gb2YgdGhlIGZvcm1hdCBjb2RlICovXG5cdFx0XHRcdFx0aWYoUlQgPT0gMHgwRSAmJiAodmFsWzJdICYgMHg3MCkgPT0gMHg3MCAmJiAodmFsWzJdICYgMHgwRikgPiAxICYmICh2YWxbMl0gJiAweDBGKSA8IDE1KSB7XG5cdFx0XHRcdFx0XHR2YWxbMV0ueiA9IG8uZGF0ZU5GIHx8IFNTRi5fdGFibGVbMTRdO1xuXHRcdFx0XHRcdFx0aWYoby5jZWxsRGF0ZXMpIHsgdmFsWzFdLnQgPSAnZCc7IHZhbFsxXS52ID0gbnVtZGF0ZSh2YWxbMV0udik7IH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoby5kZW5zZSkge1xuXHRcdFx0XHRcdFx0aWYoIXNbdmFsWzBdLnJdKSBzW3ZhbFswXS5yXSA9IFtdO1xuXHRcdFx0XHRcdFx0c1t2YWxbMF0ucl1bdmFsWzBdLmNdID0gdmFsWzFdO1xuXHRcdFx0XHRcdH0gZWxzZSBzW2VuY29kZV9jZWxsKHZhbFswXSldID0gdmFsWzFdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fSBlbHNlIHN3aXRjaChSVCkge1xuXHRcdFx0XHRjYXNlIDB4MTY6IC8qIExBQkVMMTYgKi9cblx0XHRcdFx0XHR2YWxbMV0udiA9IHZhbFsxXS52LnNsaWNlKDEpO1xuXHRcdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSAweDE3OiAvKiBOVU1CRVIxNyAqL1xuXHRcdFx0XHRjYXNlIDB4MTg6IC8qIE5VTUJFUjE4ICovXG5cdFx0XHRcdGNhc2UgMHgxOTogLyogRk9STVVMQTE5ICovXG5cdFx0XHRcdGNhc2UgMHgyNTogLyogTlVNQkVSMjUgKi9cblx0XHRcdFx0Y2FzZSAweDI3OiAvKiBOVU1CRVIyNyAqL1xuXHRcdFx0XHRjYXNlIDB4Mjg6IC8qIEZPUk1VTEEyOCAqL1xuXHRcdFx0XHRcdGlmKHZhbFszXSA+IHNpZHgpIHtcblx0XHRcdFx0XHRcdHNbXCIhcmVmXCJdID0gZW5jb2RlX3JhbmdlKHJlZmd1ZXNzKTtcblx0XHRcdFx0XHRcdHNoZWV0c1tuXSA9IHM7XG5cdFx0XHRcdFx0XHRzID0gKG8uZGVuc2UgPyBbXSA6IHt9KTtcblx0XHRcdFx0XHRcdHJlZmd1ZXNzID0ge3M6IHtyOjAsIGM6MH0sIGU6IHtyOjAsIGM6MH0gfTtcblx0XHRcdFx0XHRcdHNpZHggPSB2YWxbM107IG4gPSBcIlNoZWV0XCIgKyAoc2lkeCArIDEpO1xuXHRcdFx0XHRcdFx0c25hbWVzLnB1c2gobik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKG8uZGVuc2UpIHtcblx0XHRcdFx0XHRcdGlmKCFzW3ZhbFswXS5yXSkgc1t2YWxbMF0ucl0gPSBbXTtcblx0XHRcdFx0XHRcdHNbdmFsWzBdLnJdW3ZhbFswXS5jXSA9IHZhbFsxXTtcblx0XHRcdFx0XHR9IGVsc2Ugc1tlbmNvZGVfY2VsbCh2YWxbMF0pXSA9IHZhbFsxXTtcblx0XHRcdFx0XHRpZihyZWZndWVzcy5lLmMgPCB2YWxbMF0uYykgcmVmZ3Vlc3MuZS5jID0gdmFsWzBdLmM7XG5cdFx0XHRcdFx0aWYocmVmZ3Vlc3MuZS5yIDwgdmFsWzBdLnIpIHJlZmd1ZXNzLmUuciA9IHZhbFswXS5yO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiBicmVhaztcblx0XHRcdH1cblx0XHR9LCBvKTtcblxuXHRcdHNbXCIhcmVmXCJdID0gZW5jb2RlX3JhbmdlKHJlZmd1ZXNzKTtcblx0XHRzaGVldHNbbl0gPSBzO1xuXHRcdHJldHVybiB7IFNoZWV0TmFtZXM6IHNuYW1lcywgU2hlZXRzOnNoZWV0cyB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VfUkFOR0UoYmxvYikge1xuXHRcdHZhciBvID0ge3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtcblx0XHRvLnMuYyA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0XHRvLnMuciA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0XHRvLmUuYyA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0XHRvLmUuciA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0XHRpZihvLnMuYyA9PSAweEZGRkYpIG8ucy5jID0gby5lLmMgPSBvLnMuciA9IG8uZS5yID0gMDtcblx0XHRyZXR1cm4gbztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlX2NlbGwoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdFx0dmFyIG8gPSBbe2M6MCxyOjB9LCB7dDonbicsdjowfSwgMF07XG5cdFx0aWYob3B0cy5xcHJvICYmIG9wdHMudmVycyAhPSAweDUxMjApIHtcblx0XHRcdG9bMF0uYyA9IGJsb2IucmVhZF9zaGlmdCgxKTtcblx0XHRcdGJsb2IubCsrO1xuXHRcdFx0b1swXS5yID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRcdFx0YmxvYi5sKz0yO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvWzJdID0gYmxvYi5yZWFkX3NoaWZ0KDEpO1xuXHRcdFx0b1swXS5jID0gYmxvYi5yZWFkX3NoaWZ0KDIpOyBvWzBdLnIgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdFx0fVxuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VfTEFCRUwoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdFx0dmFyIHRndCA9IGJsb2IubCArIGxlbmd0aDtcblx0XHR2YXIgbyA9IHBhcnNlX2NlbGwoYmxvYiwgbGVuZ3RoLCBvcHRzKTtcblx0XHRvWzFdLnQgPSAncyc7XG5cdFx0aWYob3B0cy52ZXJzID09IDB4NTEyMCkge1xuXHRcdFx0YmxvYi5sKys7XG5cdFx0XHR2YXIgbGVuID0gYmxvYi5yZWFkX3NoaWZ0KDEpO1xuXHRcdFx0b1sxXS52ID0gYmxvYi5yZWFkX3NoaWZ0KGxlbiwgJ3V0ZjgnKTtcblx0XHRcdHJldHVybiBvO1xuXHRcdH1cblx0XHRpZihvcHRzLnFwcm8pIGJsb2IubCsrO1xuXHRcdG9bMV0udiA9IGJsb2IucmVhZF9zaGlmdCh0Z3QgLSBibG9iLmwsICdjc3RyJyk7XG5cdFx0cmV0dXJuIG87XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZV9JTlRFR0VSKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHRcdHZhciBvID0gcGFyc2VfY2VsbChibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHRcdG9bMV0udiA9IGJsb2IucmVhZF9zaGlmdCgyLCAnaScpO1xuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VfTlVNQkVSKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHRcdHZhciBvID0gcGFyc2VfY2VsbChibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHRcdG9bMV0udiA9IGJsb2IucmVhZF9zaGlmdCg4LCAnZicpO1xuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VfRk9STVVMQShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0XHR2YXIgdGd0ID0gYmxvYi5sICsgbGVuZ3RoO1xuXHRcdHZhciBvID0gcGFyc2VfY2VsbChibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHRcdC8qIFRPRE86IGZvcm11bGEgKi9cblx0XHRvWzFdLnYgPSBibG9iLnJlYWRfc2hpZnQoOCwgJ2YnKTtcblx0XHRpZihvcHRzLnFwcm8pIGJsb2IubCA9IHRndDtcblx0XHRlbHNlIHtcblx0XHRcdHZhciBmbGVuID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRcdFx0YmxvYi5sICs9IGZsZW47XG5cdFx0fVxuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VfY2VsbF8zKGJsb2IpIHtcblx0XHR2YXIgbyA9IFt7YzowLHI6MH0sIHt0OiduJyx2OjB9LCAwXTtcblx0XHRvWzBdLnIgPSBibG9iLnJlYWRfc2hpZnQoMik7IG9bM10gPSBibG9iW2Jsb2IubCsrXTsgb1swXS5jID0gYmxvYltibG9iLmwrK107XG5cdFx0cmV0dXJuIG87XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZV9MQUJFTF8xNihibG9iLCBsZW5ndGgpIHtcblx0XHR2YXIgbyA9IHBhcnNlX2NlbGxfMyhibG9iLCBsZW5ndGgpO1xuXHRcdG9bMV0udCA9ICdzJztcblx0XHRvWzFdLnYgPSBibG9iLnJlYWRfc2hpZnQobGVuZ3RoIC0gNCwgJ2NzdHInKTtcblx0XHRyZXR1cm4gbztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlX05VTUJFUl8xOChibG9iLCBsZW5ndGgpIHtcblx0XHR2YXIgbyA9IHBhcnNlX2NlbGxfMyhibG9iLCBsZW5ndGgpO1xuXHRcdG9bMV0udiA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0XHR2YXIgdiA9IG9bMV0udiA+PiAxO1xuXHRcdC8qIFRPRE86IGZpZ3VyZSBvdXQgYWxsIG9mIHRoZSBjb3JuZXIgY2FzZXMgKi9cblx0XHRpZihvWzFdLnYgJiAweDEpIHtcblx0XHRcdHN3aXRjaCh2ICYgMHgwNykge1xuXHRcdFx0XHRjYXNlIDE6IHYgPSAodiA+PiAzKSAqIDUwMDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgMjogdiA9ICh2ID4+IDMpIC8gMjA7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIDQ6IHYgPSAodiA+PiAzKSAvIDIwMDA7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIDY6IHYgPSAodiA+PiAzKSAvIDE2OyBicmVhaztcblx0XHRcdFx0Y2FzZSA3OiB2ID0gKHYgPj4gMykgLyA2NDsgYnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IHRocm93IFwidW5rbm93biBOVU1CRVJfMTggZW5jb2RpbmcgXCIgKyAodiAmIDB4MDcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRvWzFdLnYgPSB2O1xuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VfTlVNQkVSXzE3KGJsb2IsIGxlbmd0aCkge1xuXHRcdHZhciBvID0gcGFyc2VfY2VsbF8zKGJsb2IsIGxlbmd0aCk7XG5cdFx0dmFyIHYxID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRcdHZhciB2MiA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0XHR2YXIgZSA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0XHRpZihlID09IDB4RkZGRikgeyBvWzFdLnYgPSAwOyByZXR1cm4gbzsgfVxuXHRcdHZhciBzID0gZSAmIDB4ODAwMDsgZSA9IChlJjB4N0ZGRikgLSAxNjQ0Njtcblx0XHRvWzFdLnYgPSAocyoyIC0gMSkgKiAoKGUgPiAwID8gKHYyIDw8IGUpIDogKHYyID4+PiAtZSkpICsgKGUgPiAtMzIgPyAodjEgPDwgKGUgKyAzMikpIDogKHYxID4+PiAtKGUgKyAzMikpKSk7XG5cdFx0cmV0dXJuIG87XG5cdH1cblxuXHRmdW5jdGlvbiBwYXJzZV9GT1JNVUxBXzE5KGJsb2IsIGxlbmd0aCkge1xuXHRcdHZhciBvID0gcGFyc2VfTlVNQkVSXzE3KGJsb2IsIDE0KTtcblx0XHRibG9iLmwgKz0gbGVuZ3RoIC0gMTQ7IC8qIFRPRE86IGZvcm11bGEgKi9cblx0XHRyZXR1cm4gbztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlX05VTUJFUl8yNShibG9iLCBsZW5ndGgpIHtcblx0XHR2YXIgbyA9IHBhcnNlX2NlbGxfMyhibG9iLCBsZW5ndGgpO1xuXHRcdHZhciB2MSA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0XHRvWzFdLnYgPSB2MSA+PiA2O1xuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VfTlVNQkVSXzI3KGJsb2IsIGxlbmd0aCkge1xuXHRcdHZhciBvID0gcGFyc2VfY2VsbF8zKGJsb2IsIGxlbmd0aCk7XG5cdFx0dmFyIHYxID0gYmxvYi5yZWFkX3NoaWZ0KDgsJ2YnKTtcblx0XHRvWzFdLnYgPSB2MTtcblx0XHRyZXR1cm4gbztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlX0ZPUk1VTEFfMjgoYmxvYiwgbGVuZ3RoKSB7XG5cdFx0dmFyIG8gPSBwYXJzZV9OVU1CRVJfMjcoYmxvYiwgMTQpO1xuXHRcdGJsb2IubCArPSBsZW5ndGggLSAxMDsgLyogVE9ETzogZm9ybXVsYSAqL1xuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0dmFyIFdLMUVudW0gPSB7XG4weDAwMDA6IHsgbjpcIkJPRlwiLCBmOnBhcnNldWludDE2IH0sXG4weDAwMDE6IHsgbjpcIkVPRlwiIH0sXG4weDAwMDI6IHsgbjpcIkNBTENNT0RFXCIgfSxcbjB4MDAwMzogeyBuOlwiQ0FMQ09SREVSXCIgfSxcbjB4MDAwNDogeyBuOlwiU1BMSVRcIiB9LFxuMHgwMDA1OiB7IG46XCJTWU5DXCIgfSxcbjB4MDAwNjogeyBuOlwiUkFOR0VcIiwgZjpwYXJzZV9SQU5HRSB9LFxuMHgwMDA3OiB7IG46XCJXSU5ET1cxXCIgfSxcbjB4MDAwODogeyBuOlwiQ09MVzFcIiB9LFxuMHgwMDA5OiB7IG46XCJXSU5UV09cIiB9LFxuMHgwMDBBOiB7IG46XCJDT0xXMlwiIH0sXG4weDAwMEI6IHsgbjpcIk5BTUVcIiB9LFxuMHgwMDBDOiB7IG46XCJCTEFOS1wiIH0sXG4weDAwMEQ6IHsgbjpcIklOVEVHRVJcIiwgZjpwYXJzZV9JTlRFR0VSIH0sXG4weDAwMEU6IHsgbjpcIk5VTUJFUlwiLCBmOnBhcnNlX05VTUJFUiB9LFxuMHgwMDBGOiB7IG46XCJMQUJFTFwiLCBmOnBhcnNlX0xBQkVMIH0sXG4weDAwMTA6IHsgbjpcIkZPUk1VTEFcIiwgZjpwYXJzZV9GT1JNVUxBIH0sXG4weDAwMTg6IHsgbjpcIlRBQkxFXCIgfSxcbjB4MDAxOTogeyBuOlwiT1JBTkdFXCIgfSxcbjB4MDAxQTogeyBuOlwiUFJBTkdFXCIgfSxcbjB4MDAxQjogeyBuOlwiU1JBTkdFXCIgfSxcbjB4MDAxQzogeyBuOlwiRlJBTkdFXCIgfSxcbjB4MDAxRDogeyBuOlwiS1JBTkdFMVwiIH0sXG4weDAwMjA6IHsgbjpcIkhSQU5HRVwiIH0sXG4weDAwMjM6IHsgbjpcIktSQU5HRTJcIiB9LFxuMHgwMDI0OiB7IG46XCJQUk9URUNcIiB9LFxuMHgwMDI1OiB7IG46XCJGT09URVJcIiB9LFxuMHgwMDI2OiB7IG46XCJIRUFERVJcIiB9LFxuMHgwMDI3OiB7IG46XCJTRVRVUFwiIH0sXG4weDAwMjg6IHsgbjpcIk1BUkdJTlNcIiB9LFxuMHgwMDI5OiB7IG46XCJMQUJFTEZNVFwiIH0sXG4weDAwMkE6IHsgbjpcIlRJVExFU1wiIH0sXG4weDAwMkI6IHsgbjpcIlNIRUVUSlNcIiB9LFxuMHgwMDJEOiB7IG46XCJHUkFQSFwiIH0sXG4weDAwMkU6IHsgbjpcIk5HUkFQSFwiIH0sXG4weDAwMkY6IHsgbjpcIkNBTENDT1VOVFwiIH0sXG4weDAwMzA6IHsgbjpcIlVORk9STUFUVEVEXCIgfSxcbjB4MDAzMTogeyBuOlwiQ1VSU09SVzEyXCIgfSxcbjB4MDAzMjogeyBuOlwiV0lORE9XXCIgfSxcbjB4MDAzMzogeyBuOlwiU1RSSU5HXCIsIGY6cGFyc2VfTEFCRUwgfSxcbjB4MDAzNzogeyBuOlwiUEFTU1dPUkRcIiB9LFxuMHgwMDM4OiB7IG46XCJMT0NLRURcIiB9LFxuMHgwMDNDOiB7IG46XCJRVUVSWVwiIH0sXG4weDAwM0Q6IHsgbjpcIlFVRVJZTkFNRVwiIH0sXG4weDAwM0U6IHsgbjpcIlBSSU5UXCIgfSxcbjB4MDAzRjogeyBuOlwiUFJJTlROQU1FXCIgfSxcbjB4MDA0MDogeyBuOlwiR1JBUEgyXCIgfSxcbjB4MDA0MTogeyBuOlwiR1JBUEhOQU1FXCIgfSxcbjB4MDA0MjogeyBuOlwiWk9PTVwiIH0sXG4weDAwNDM6IHsgbjpcIlNZTVNQTElUXCIgfSxcbjB4MDA0NDogeyBuOlwiTlNST1dTXCIgfSxcbjB4MDA0NTogeyBuOlwiTlNDT0xTXCIgfSxcbjB4MDA0NjogeyBuOlwiUlVMRVJcIiB9LFxuMHgwMDQ3OiB7IG46XCJOTkFNRVwiIH0sXG4weDAwNDg6IHsgbjpcIkFDT01NXCIgfSxcbjB4MDA0OTogeyBuOlwiQU1BQ1JPXCIgfSxcbjB4MDA0QTogeyBuOlwiUEFSU0VcIiB9LFxuMHgwMEZGOiB7IG46XCJcIiwgZjpwYXJzZW5vb3AgfVxuXHR9O1xuXG5cdHZhciBXSzNFbnVtID0ge1xuMHgwMDAwOiB7IG46XCJCT0ZcIiB9LFxuMHgwMDAxOiB7IG46XCJFT0ZcIiB9LFxuMHgwMDAzOiB7IG46XCI/P1wiIH0sXG4weDAwMDQ6IHsgbjpcIj8/XCIgfSxcbjB4MDAwNTogeyBuOlwiPz9cIiB9LFxuMHgwMDA2OiB7IG46XCI/P1wiIH0sXG4weDAwMDc6IHsgbjpcIj8/XCIgfSxcbjB4MDAwOTogeyBuOlwiPz9cIiB9LFxuMHgwMDBhOiB7IG46XCI/P1wiIH0sXG4weDAwMGI6IHsgbjpcIj8/XCIgfSxcbjB4MDAwYzogeyBuOlwiPz9cIiB9LFxuMHgwMDBlOiB7IG46XCI/P1wiIH0sXG4weDAwMGY6IHsgbjpcIj8/XCIgfSxcbjB4MDAxMDogeyBuOlwiPz9cIiB9LFxuMHgwMDExOiB7IG46XCI/P1wiIH0sXG4weDAwMTI6IHsgbjpcIj8/XCIgfSxcbjB4MDAxMzogeyBuOlwiPz9cIiB9LFxuMHgwMDE1OiB7IG46XCI/P1wiIH0sXG4weDAwMTY6IHsgbjpcIkxBQkVMMTZcIiwgZjpwYXJzZV9MQUJFTF8xNn0sXG4weDAwMTc6IHsgbjpcIk5VTUJFUjE3XCIsIGY6cGFyc2VfTlVNQkVSXzE3IH0sXG4weDAwMTg6IHsgbjpcIk5VTUJFUjE4XCIsIGY6cGFyc2VfTlVNQkVSXzE4IH0sXG4weDAwMTk6IHsgbjpcIkZPUk1VTEExOVwiLCBmOnBhcnNlX0ZPUk1VTEFfMTl9LFxuMHgwMDFhOiB7IG46XCI/P1wiIH0sXG4weDAwMWI6IHsgbjpcIj8/XCIgfSxcbjB4MDAxYzogeyBuOlwiPz9cIiB9LFxuMHgwMDFkOiB7IG46XCI/P1wiIH0sXG4weDAwMWU6IHsgbjpcIj8/XCIgfSxcbjB4MDAxZjogeyBuOlwiPz9cIiB9LFxuMHgwMDIxOiB7IG46XCI/P1wiIH0sXG4weDAwMjU6IHsgbjpcIk5VTUJFUjI1XCIsIGY6cGFyc2VfTlVNQkVSXzI1IH0sXG4weDAwMjc6IHsgbjpcIk5VTUJFUjI3XCIsIGY6cGFyc2VfTlVNQkVSXzI3IH0sXG4weDAwMjg6IHsgbjpcIkZPUk1VTEEyOFwiLCBmOnBhcnNlX0ZPUk1VTEFfMjggfSxcbjB4MDBGRjogeyBuOlwiXCIsIGY6cGFyc2Vub29wIH1cblx0fTtcblx0cmV0dXJuIHtcblx0XHR0b193b3JrYm9vazogbG90dXNfdG9fd29ya2Jvb2tcblx0fTtcbn0pKCk7XG4vKiBQYXJzZSBhIGxpc3Qgb2YgPHI+IHRhZ3MgKi9cbnZhciBwYXJzZV9ycyA9IChmdW5jdGlvbiBwYXJzZV9yc19mYWN0b3J5KCkge1xuXHR2YXIgdHJlZ2V4ID0gbWF0Y2h0YWcoXCJ0XCIpLCBycHJlZ2V4ID0gbWF0Y2h0YWcoXCJyUHJcIiksIHJyZWdleCA9IC88KD86XFx3KzopP3I+L2csIHJlbmQgPSAvPFxcLyg/Olxcdys6KT9yPi8sIG5scmVnZXggPSAvXFxyXFxuL2c7XG5cdC8qIDE4LjQuNyByUHIgQ1RfUlByRWx0ICovXG5cdHZhciBwYXJzZV9ycHIgPSBmdW5jdGlvbiBwYXJzZV9ycHIocnByLCBpbnRybywgb3V0cm8pIHtcblx0XHR2YXIgZm9udCA9IHt9LCBjcCA9IDY1MDAxLCBhbGlnbiA9IFwiXCI7XG5cdFx0dmFyIG0gPSBycHIubWF0Y2godGFncmVnZXgpLCBpID0gMDtcblx0XHRpZihtKSBmb3IoO2khPW0ubGVuZ3RoOyArK2kpIHtcblx0XHRcdHZhciB5ID0gcGFyc2V4bWx0YWcobVtpXSk7XG5cdFx0XHRzd2l0Y2goeVswXS5yZXBsYWNlKC9cXHcqOi9nLFwiXCIpKSB7XG5cdFx0XHRcdC8qIDE4LjguMTIgY29uZGVuc2UgQ1RfQm9vbGVhblByb3BlcnR5ICovXG5cdFx0XHRcdC8qICoqIG5vdCByZXF1aXJlZCAuICovXG5cdFx0XHRcdGNhc2UgJzxjb25kZW5zZSc6IGJyZWFrO1xuXHRcdFx0XHQvKiAxOC44LjE3IGV4dGVuZCBDVF9Cb29sZWFuUHJvcGVydHkgKi9cblx0XHRcdFx0LyogKiogbm90IHJlcXVpcmVkIC4gKi9cblx0XHRcdFx0Y2FzZSAnPGV4dGVuZCc6IGJyZWFrO1xuXHRcdFx0XHQvKiAxOC44LjM2IHNoYWRvdyBDVF9Cb29sZWFuUHJvcGVydHkgKi9cblx0XHRcdFx0LyogKiogbm90IHJlcXVpcmVkIC4gKi9cblx0XHRcdFx0Y2FzZSAnPHNoYWRvdyc6XG5cdFx0XHRcdFx0aWYoIXkudmFsKSBicmVhaztcblx0XHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRcdGNhc2UgJzxzaGFkb3c+Jzpcblx0XHRcdFx0Y2FzZSAnPHNoYWRvdy8+JzogZm9udC5zaGFkb3cgPSAxOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnPC9zaGFkb3c+JzogYnJlYWs7XG5cblx0XHRcdFx0LyogMTguNC4xIGNoYXJzZXQgQ1RfSW50UHJvcGVydHkgVE9ETyAqL1xuXHRcdFx0XHRjYXNlICc8Y2hhcnNldCc6XG5cdFx0XHRcdFx0aWYoeS52YWwgPT0gJzEnKSBicmVhaztcblx0XHRcdFx0XHRjcCA9IENTMkNQW3BhcnNlSW50KHkudmFsLCAxMCldO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdC8qIDE4LjQuMiBvdXRsaW5lIENUX0Jvb2xlYW5Qcm9wZXJ0eSBUT0RPICovXG5cdFx0XHRcdGNhc2UgJzxvdXRsaW5lJzpcblx0XHRcdFx0XHRpZigheS52YWwpIGJyZWFrO1xuXHRcdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSAnPG91dGxpbmU+Jzpcblx0XHRcdFx0Y2FzZSAnPG91dGxpbmUvPic6IGZvbnQub3V0bGluZSA9IDE7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICc8L291dGxpbmU+JzogYnJlYWs7XG5cblx0XHRcdFx0LyogMTguNC41IHJGb250IENUX0ZvbnROYW1lICovXG5cdFx0XHRcdGNhc2UgJzxyRm9udCc6IGZvbnQubmFtZSA9IHkudmFsOyBicmVhaztcblxuXHRcdFx0XHQvKiAxOC40LjExIHN6IENUX0ZvbnRTaXplICovXG5cdFx0XHRcdGNhc2UgJzxzeic6IGZvbnQuc3ogPSB5LnZhbDsgYnJlYWs7XG5cblx0XHRcdFx0LyogMTguNC4xMCBzdHJpa2UgQ1RfQm9vbGVhblByb3BlcnR5ICovXG5cdFx0XHRcdGNhc2UgJzxzdHJpa2UnOlxuXHRcdFx0XHRcdGlmKCF5LnZhbCkgYnJlYWs7XG5cdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlICc8c3RyaWtlPic6XG5cdFx0XHRcdGNhc2UgJzxzdHJpa2UvPic6IGZvbnQuc3RyaWtlID0gMTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJzwvc3RyaWtlPic6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIDE4LjQuMTMgdSBDVF9VbmRlcmxpbmVQcm9wZXJ0eSAqL1xuXHRcdFx0XHRjYXNlICc8dSc6XG5cdFx0XHRcdFx0aWYoIXkudmFsKSBicmVhaztcblx0XHRcdFx0XHRzd2l0Y2goeS52YWwpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2RvdWJsZSc6IGZvbnQudXZhbCA9IFwiZG91YmxlXCI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnc2luZ2xlQWNjb3VudGluZyc6IGZvbnQudXZhbCA9IFwic2luZ2xlLWFjY291bnRpbmdcIjsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdkb3VibGVBY2NvdW50aW5nJzogZm9udC51dmFsID0gXCJkb3VibGUtYWNjb3VudGluZ1wiOyBicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlICc8dT4nOlxuXHRcdFx0XHRjYXNlICc8dS8+JzogZm9udC51ID0gMTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJzwvdT4nOiBicmVhaztcblxuXHRcdFx0XHQvKiAxOC44LjIgYiAqL1xuXHRcdFx0XHRjYXNlICc8Yic6XG5cdFx0XHRcdFx0aWYoeS52YWwgPT0gJzAnKSBicmVhaztcblx0XHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRcdGNhc2UgJzxiPic6XG5cdFx0XHRcdGNhc2UgJzxiLz4nOiBmb250LmIgPSAxOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnPC9iPic6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIDE4LjguMjYgaSAqL1xuXHRcdFx0XHRjYXNlICc8aSc6XG5cdFx0XHRcdFx0aWYoeS52YWwgPT0gJzAnKSBicmVhaztcblx0XHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRcdGNhc2UgJzxpPic6XG5cdFx0XHRcdGNhc2UgJzxpLz4nOiBmb250LmkgPSAxOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnPC9pPic6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIDE4LjMuMS4xNSBjb2xvciBDVF9Db2xvciBUT0RPOiB0aW50LCB0aGVtZSwgYXV0bywgaW5kZXhlZCAqL1xuXHRcdFx0XHRjYXNlICc8Y29sb3InOlxuXHRcdFx0XHRcdGlmKHkucmdiKSBmb250LmNvbG9yID0geS5yZ2Iuc2xpY2UoMiw4KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHQvKiAxOC44LjE4IGZhbWlseSBTVF9Gb250RmFtaWx5ICovXG5cdFx0XHRcdGNhc2UgJzxmYW1pbHknOiBmb250LmZhbWlseSA9IHkudmFsOyBicmVhaztcblxuXHRcdFx0XHQvKiAxOC40LjE0IHZlcnRBbGlnbiBDVF9WZXJ0aWNhbEFsaWduRm9udFByb3BlcnR5IFRPRE8gKi9cblx0XHRcdFx0Y2FzZSAnPHZlcnRBbGlnbic6IGFsaWduID0geS52YWw7IGJyZWFrO1xuXG5cdFx0XHRcdC8qIDE4LjguMzUgc2NoZW1lIENUX0ZvbnRTY2hlbWUgVE9ETyAqL1xuXHRcdFx0XHRjYXNlICc8c2NoZW1lJzogYnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRpZih5WzBdLmNoYXJDb2RlQXQoMSkgIT09IDQ3KSB0aHJvdyAnVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICcgKyB5WzBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR2YXIgc3R5bGUgPSBbXTtcblxuXHRcdGlmKGZvbnQudSkgc3R5bGUucHVzaChcInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiKTtcblx0XHRpZihmb250LnV2YWwpIHN0eWxlLnB1c2goXCJ0ZXh0LXVuZGVybGluZS1zdHlsZTpcIiArIGZvbnQudXZhbCArIFwiO1wiKTtcblx0XHRpZihmb250LnN6KSBzdHlsZS5wdXNoKFwiZm9udC1zaXplOlwiICsgZm9udC5zeiArIFwiO1wiKTtcblx0XHRpZihmb250Lm91dGxpbmUpIHN0eWxlLnB1c2goXCJ0ZXh0LWVmZmVjdDogb3V0bGluZTtcIik7XG5cdFx0aWYoZm9udC5zaGFkb3cpIHN0eWxlLnB1c2goXCJ0ZXh0LXNoYWRvdzogYXV0bztcIik7XG5cdFx0aW50cm8ucHVzaCgnPHNwYW4gc3R5bGU9XCInICsgc3R5bGUuam9pbihcIlwiKSArICdcIj4nKTtcblxuXHRcdGlmKGZvbnQuYikgeyBpbnRyby5wdXNoKFwiPGI+XCIpOyBvdXRyby5wdXNoKFwiPC9iPlwiKTsgfVxuXHRcdGlmKGZvbnQuaSkgeyBpbnRyby5wdXNoKFwiPGk+XCIpOyBvdXRyby5wdXNoKFwiPC9pPlwiKTsgfVxuXHRcdGlmKGZvbnQuc3RyaWtlKSB7IGludHJvLnB1c2goXCI8cz5cIik7IG91dHJvLnB1c2goXCI8L3M+XCIpOyB9XG5cblx0XHRpZihhbGlnbiA9PSBcInN1cGVyc2NyaXB0XCIpIGFsaWduID0gXCJzdXBcIjtcblx0XHRlbHNlIGlmKGFsaWduID09IFwic3Vic2NyaXB0XCIpIGFsaWduID0gXCJzdWJcIjtcblx0XHRpZihhbGlnbiAhPSBcIlwiKSB7IGludHJvLnB1c2goXCI8XCIgKyBhbGlnbiArIFwiPlwiKTsgb3V0cm8ucHVzaChcIjwvXCIgKyBhbGlnbiArIFwiPlwiKTsgfVxuXG5cdFx0b3V0cm8ucHVzaChcIjwvc3Bhbj5cIik7XG5cdFx0cmV0dXJuIGNwO1xuXHR9O1xuXG5cdC8qIDE4LjQuNCByIENUX1JFbHQgKi9cblx0ZnVuY3Rpb24gcGFyc2VfcihyKSB7XG5cdFx0dmFyIHRlcm1zID0gW1tdLFwiXCIsW11dO1xuXHRcdC8qIDE4LjQuMTIgdCBTVF9Yc3RyaW5nICovXG5cdFx0dmFyIHQgPSByLm1hdGNoKHRyZWdleCkvKiwgY3AgPSA2NTAwMSovO1xuXHRcdGlmKCF0KSByZXR1cm4gXCJcIjtcblx0XHR0ZXJtc1sxXSA9IHRbMV07XG5cblx0XHR2YXIgcnByID0gci5tYXRjaChycHJlZ2V4KTtcblx0XHRpZihycHIpIC8qY3AgPSAqL3BhcnNlX3JwcihycHJbMV0sIHRlcm1zWzBdLCB0ZXJtc1syXSk7XG5cblx0XHRyZXR1cm4gdGVybXNbMF0uam9pbihcIlwiKSArIHRlcm1zWzFdLnJlcGxhY2UobmxyZWdleCwnPGJyLz4nKSArIHRlcm1zWzJdLmpvaW4oXCJcIik7XG5cdH1cblx0cmV0dXJuIGZ1bmN0aW9uIHBhcnNlX3JzKHJzKSB7XG5cdFx0cmV0dXJuIHJzLnJlcGxhY2UocnJlZ2V4LFwiXCIpLnNwbGl0KHJlbmQpLm1hcChwYXJzZV9yKS5qb2luKFwiXCIpO1xuXHR9O1xufSkoKTtcblxuLyogMTguNC44IHNpIENUX1JzdCAqL1xudmFyIHNpdHJlZ2V4ID0gLzwoPzpcXHcrOik/dFtePl0qPihbXjxdKik8XFwvKD86XFx3KzopP3Q+L2csIHNpcnJlZ2V4ID0gLzwoPzpcXHcrOik/cj4vO1xudmFyIHNpcnBocmVnZXggPSAvPCg/Olxcdys6KT9yUGguKj8+KFtcXHNcXFNdKj8pPFxcLyg/Olxcdys6KT9yUGg+L2c7XG5mdW5jdGlvbiBwYXJzZV9zaSh4LCBvcHRzKSB7XG5cdHZhciBodG1sID0gb3B0cyA/IG9wdHMuY2VsbEhUTUwgOiB0cnVlO1xuXHR2YXIgeiA9IHt9O1xuXHRpZigheCkgcmV0dXJuIG51bGw7XG5cdC8vdmFyIHk7XG5cdC8qIDE4LjQuMTIgdCBTVF9Yc3RyaW5nIChQbGFpbnRleHQgU3RyaW5nKSAqL1xuXHQvLyBUT0RPOiBpcyB3aGl0ZXNwYWNlIGFjdHVhbGx5IHZhbGlkIGhlcmU/XG5cdGlmKHgubWF0Y2goL15cXHMqPCg/Olxcdys6KT90W14+XSo+LykpIHtcblx0XHR6LnQgPSB1bmVzY2FwZXhtbCh1dGY4cmVhZCh4LnNsaWNlKHguaW5kZXhPZihcIj5cIikrMSkuc3BsaXQoLzxcXC8oPzpcXHcrOik/dD4vKVswXXx8XCJcIikpO1xuXHRcdHouciA9IHV0ZjhyZWFkKHgpO1xuXHRcdGlmKGh0bWwpIHouaCA9IGVzY2FwZWh0bWwoei50KTtcblx0fVxuXHQvKiAxOC40LjQgciBDVF9SRWx0IChSaWNoIFRleHQgUnVuKSAqL1xuXHRlbHNlIGlmKCgvKnkgPSAqL3gubWF0Y2goc2lycmVnZXgpKSkge1xuXHRcdHouciA9IHV0ZjhyZWFkKHgpO1xuXHRcdHoudCA9IHVuZXNjYXBleG1sKHV0ZjhyZWFkKCh4LnJlcGxhY2Uoc2lycGhyZWdleCwgJycpLm1hdGNoKHNpdHJlZ2V4KXx8W10pLmpvaW4oXCJcIikucmVwbGFjZSh0YWdyZWdleCxcIlwiKSkpO1xuXHRcdGlmKGh0bWwpIHouaCA9IHBhcnNlX3JzKHoucik7XG5cdH1cblx0LyogMTguNC4zIHBob25ldGljUHIgQ1RfUGhvbmV0aWNQciAoVE9ETzogbmVlZGVkIGZvciBBc2lhbiBzdXBwb3J0KSAqL1xuXHQvKiAxOC40LjYgclBoIENUX1Bob25ldGljUnVuIChUT0RPOiBuZWVkZWQgZm9yIEFzaWFuIHN1cHBvcnQpICovXG5cdHJldHVybiB6O1xufVxuXG4vKiAxOC40IFNoYXJlZCBTdHJpbmcgVGFibGUgKi9cbnZhciBzc3RyMCA9IC88KD86XFx3KzopP3NzdChbXj5dKik+KFtcXHNcXFNdKik8XFwvKD86XFx3KzopP3NzdD4vO1xudmFyIHNzdHIxID0gLzwoPzpcXHcrOik/KD86c2l8c3N0SXRlbSk+L2c7XG52YXIgc3N0cjIgPSAvPFxcLyg/Olxcdys6KT8oPzpzaXxzc3RJdGVtKT4vO1xuZnVuY3Rpb24gcGFyc2Vfc3N0X3htbChkYXRhLCBvcHRzKSB7XG5cdHZhciBzID0gKFtdKSwgc3MgPSBcIlwiO1xuXHRpZighZGF0YSkgcmV0dXJuIHM7XG5cdC8qIDE4LjQuOSBzc3QgQ1RfU3N0ICovXG5cdHZhciBzc3QgPSBkYXRhLm1hdGNoKHNzdHIwKTtcblx0aWYoc3N0KSB7XG5cdFx0c3MgPSBzc3RbMl0ucmVwbGFjZShzc3RyMSxcIlwiKS5zcGxpdChzc3RyMik7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSAhPSBzcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0dmFyIG8gPSBwYXJzZV9zaShzc1tpXS50cmltKCksIG9wdHMpO1xuXHRcdFx0aWYobyAhPSBudWxsKSBzW3MubGVuZ3RoXSA9IG87XG5cdFx0fVxuXHRcdHNzdCA9IHBhcnNleG1sdGFnKHNzdFsxXSk7IHMuQ291bnQgPSBzc3QuY291bnQ7IHMuVW5pcXVlID0gc3N0LnVuaXF1ZUNvdW50O1xuXHR9XG5cdHJldHVybiBzO1xufVxuXG5SRUxTLlNTVCA9IFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzXCI7XG52YXIgc3RyYXl3c3JlZ2V4ID0gL15cXHN8XFxzJHxbXFx0XFxuXFxyXS87XG5mdW5jdGlvbiB3cml0ZV9zc3RfeG1sKHNzdCwgb3B0cykge1xuXHRpZighb3B0cy5ib29rU1NUKSByZXR1cm4gXCJcIjtcblx0dmFyIG8gPSBbWE1MX0hFQURFUl07XG5cdG9bby5sZW5ndGhdID0gKHdyaXRleHRhZygnc3N0JywgbnVsbCwge1xuXHRcdHhtbG5zOiBYTUxOUy5tYWluWzBdLFxuXHRcdGNvdW50OiBzc3QuQ291bnQsXG5cdFx0dW5pcXVlQ291bnQ6IHNzdC5VbmlxdWVcblx0fSkpO1xuXHRmb3IodmFyIGkgPSAwOyBpICE9IHNzdC5sZW5ndGg7ICsraSkgeyBpZihzc3RbaV0gPT0gbnVsbCkgY29udGludWU7XG5cdFx0dmFyIHMgPSBzc3RbaV07XG5cdFx0dmFyIHNpdGFnID0gXCI8c2k+XCI7XG5cdFx0aWYocy5yKSBzaXRhZyArPSBzLnI7XG5cdFx0ZWxzZSB7XG5cdFx0XHRzaXRhZyArPSBcIjx0XCI7XG5cdFx0XHRpZighcy50KSBzLnQgPSBcIlwiO1xuXHRcdFx0aWYocy50Lm1hdGNoKHN0cmF5d3NyZWdleCkpIHNpdGFnICs9ICcgeG1sOnNwYWNlPVwicHJlc2VydmVcIic7XG5cdFx0XHRzaXRhZyArPSBcIj5cIiArIGVzY2FwZXhtbChzLnQpICsgXCI8L3Q+XCI7XG5cdFx0fVxuXHRcdHNpdGFnICs9IFwiPC9zaT5cIjtcblx0XHRvW28ubGVuZ3RoXSA9IChzaXRhZyk7XG5cdH1cblx0aWYoby5sZW5ndGg+Mil7IG9bby5sZW5ndGhdID0gKCc8L3NzdD4nKTsgb1sxXT1vWzFdLnJlcGxhY2UoXCIvPlwiLFwiPlwiKTsgfVxuXHRyZXR1cm4gby5qb2luKFwiXCIpO1xufVxuLyogW01TLVhMU0JdIDIuNC4yMTkgQnJ0QmVnaW5Tc3QgKi9cbmZ1bmN0aW9uIHBhcnNlX0JydEJlZ2luU3N0KGRhdGEpIHtcblx0cmV0dXJuIFtkYXRhLnJlYWRfc2hpZnQoNCksIGRhdGEucmVhZF9zaGlmdCg0KV07XG59XG5cbi8qIFtNUy1YTFNCXSAyLjEuNy40NSBTaGFyZWQgU3RyaW5ncyAqL1xuZnVuY3Rpb24gcGFyc2Vfc3N0X2JpbihkYXRhLCBvcHRzKSB7XG5cdHZhciBzID0gKFtdKTtcblx0dmFyIHBhc3MgPSBmYWxzZTtcblx0cmVjb3JkaG9wcGVyKGRhdGEsIGZ1bmN0aW9uIGhvcHBlcl9zc3QodmFsLCBSX24sIFJUKSB7XG5cdFx0c3dpdGNoKFJUKSB7XG5cdFx0XHRjYXNlIDB4MDA5RjogLyogJ0JydEJlZ2luU3N0JyAqL1xuXHRcdFx0XHRzLkNvdW50ID0gdmFsWzBdOyBzLlVuaXF1ZSA9IHZhbFsxXTsgYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAxMzogLyogJ0JydFNTVEl0ZW0nICovXG5cdFx0XHRcdHMucHVzaCh2YWwpOyBicmVhaztcblx0XHRcdGNhc2UgMHgwMEEwOiAvKiAnQnJ0RW5kU3N0JyAqL1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdFx0Y2FzZSAweDAwMjM6IC8qICdCcnRGUlRCZWdpbicgKi9cblx0XHRcdFx0cGFzcyA9IHRydWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMjQ6IC8qICdCcnRGUlRFbmQnICovXG5cdFx0XHRcdHBhc3MgPSBmYWxzZTsgYnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmKFJfbi5pbmRleE9mKFwiQmVnaW5cIikgPiAwKXsvKiBlbXB0eSAqL31cblx0XHRcdFx0ZWxzZSBpZihSX24uaW5kZXhPZihcIkVuZFwiKSA+IDApey8qIGVtcHR5ICovfVxuXHRcdFx0XHRpZighcGFzcyB8fCBvcHRzLldURikgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCByZWNvcmQgXCIgKyBSVCArIFwiIFwiICsgUl9uKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gd3JpdGVfQnJ0QmVnaW5Tc3Qoc3N0LCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1Zig4KTtcblx0by53cml0ZV9zaGlmdCg0LCBzc3QuQ291bnQpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIHNzdC5VbmlxdWUpO1xuXHRyZXR1cm4gbztcbn1cblxudmFyIHdyaXRlX0JydFNTVEl0ZW0gPSB3cml0ZV9SaWNoU3RyO1xuXG5mdW5jdGlvbiB3cml0ZV9zc3RfYmluKHNzdCkge1xuXHR2YXIgYmEgPSBidWZfYXJyYXkoKTtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEJlZ2luU3N0XCIsIHdyaXRlX0JydEJlZ2luU3N0KHNzdCkpO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgc3N0Lmxlbmd0aDsgKytpKSB3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0U1NUSXRlbVwiLCB3cml0ZV9CcnRTU1RJdGVtKHNzdFtpXSkpO1xuXHQvKiBGUlRTU1QgKi9cblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZFNzdFwiKTtcblx0cmV0dXJuIGJhLmVuZCgpO1xufVxuZnVuY3Rpb24gX0pTMkFOU0koc3RyKSB7XG5cdGlmKHR5cGVvZiBjcHRhYmxlICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGNwdGFibGUudXRpbHMuZW5jb2RlKGN1cnJlbnRfYW5zaSwgc3RyKTtcblx0dmFyIG8gPSBbXSwgb28gPSBzdHIuc3BsaXQoXCJcIik7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBvby5sZW5ndGg7ICsraSkgb1tpXSA9IG9vW2ldLmNoYXJDb2RlQXQoMCk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtT0ZGQ1JZUFRPXSAyLjEuNCBWZXJzaW9uICovXG5mdW5jdGlvbiBwYXJzZV9DUllQVE9WZXJzaW9uKGJsb2IsIGxlbmd0aCkge1xuXHR2YXIgbyA9IHt9O1xuXHRvLk1ham9yID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRvLk1pbm9yID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuaWYobGVuZ3RoID49IDQpIGJsb2IubCArPSBsZW5ndGggLSA0O1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLU9GRkNSWVBUT10gMi4xLjUgRGF0YVNwYWNlVmVyc2lvbkluZm8gKi9cbmZ1bmN0aW9uIHBhcnNlX0RhdGFTcGFjZVZlcnNpb25JbmZvKGJsb2IpIHtcblx0dmFyIG8gPSB7fTtcblx0by5pZCA9IGJsb2IucmVhZF9zaGlmdCgwLCAnbHBwNCcpO1xuXHRvLlIgPSBwYXJzZV9DUllQVE9WZXJzaW9uKGJsb2IsIDQpO1xuXHRvLlUgPSBwYXJzZV9DUllQVE9WZXJzaW9uKGJsb2IsIDQpO1xuXHRvLlcgPSBwYXJzZV9DUllQVE9WZXJzaW9uKGJsb2IsIDQpO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLU9GRkNSWVBUT10gMi4xLjYuMSBEYXRhU3BhY2VNYXBFbnRyeSBTdHJ1Y3R1cmUgKi9cbmZ1bmN0aW9uIHBhcnNlX0RhdGFTcGFjZU1hcEVudHJ5KGJsb2IpIHtcblx0dmFyIGxlbiA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0dmFyIGVuZCA9IGJsb2IubCArIGxlbiAtIDQ7XG5cdHZhciBvID0ge307XG5cdHZhciBjbnQgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHZhciBjb21wcyA9IFtdO1xuXHQvKiBbTVMtT0ZGQ1JZUFRPXSAyLjEuNi4yIERhdGFTcGFjZVJlZmVyZW5jZUNvbXBvbmVudCBTdHJ1Y3R1cmUgKi9cblx0d2hpbGUoY250LS0gPiAwKSBjb21wcy5wdXNoKHsgdDogYmxvYi5yZWFkX3NoaWZ0KDQpLCB2OiBibG9iLnJlYWRfc2hpZnQoMCwgJ2xwcDQnKSB9KTtcblx0by5uYW1lID0gYmxvYi5yZWFkX3NoaWZ0KDAsICdscHA0Jyk7XG5cdG8uY29tcHMgPSBjb21wcztcblx0aWYoYmxvYi5sICE9IGVuZCkgdGhyb3cgbmV3IEVycm9yKFwiQmFkIERhdGFTcGFjZU1hcEVudHJ5OiBcIiArIGJsb2IubCArIFwiICE9IFwiICsgZW5kKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1PRkZDUllQVE9dIDIuMS42IERhdGFTcGFjZU1hcCAqL1xuZnVuY3Rpb24gcGFyc2VfRGF0YVNwYWNlTWFwKGJsb2IpIHtcblx0dmFyIG8gPSBbXTtcblx0YmxvYi5sICs9IDQ7IC8vIG11c3QgYmUgMHg4XG5cdHZhciBjbnQgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHdoaWxlKGNudC0tID4gMCkgby5wdXNoKHBhcnNlX0RhdGFTcGFjZU1hcEVudHJ5KGJsb2IpKTtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1PRkZDUllQVE9dIDIuMS43IERhdGFTcGFjZURlZmluaXRpb24gKi9cbmZ1bmN0aW9uIHBhcnNlX0RhdGFTcGFjZURlZmluaXRpb24oYmxvYikge1xuXHR2YXIgbyA9IFtdO1xuXHRibG9iLmwgKz0gNDsgLy8gbXVzdCBiZSAweDhcblx0dmFyIGNudCA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0d2hpbGUoY250LS0gPiAwKSBvLnB1c2goYmxvYi5yZWFkX3NoaWZ0KDAsICdscHA0JykpO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLU9GRkNSWVBUT10gMi4xLjggRGF0YVNwYWNlRGVmaW5pdGlvbiAqL1xuZnVuY3Rpb24gcGFyc2VfVHJhbnNmb3JtSW5mb0hlYWRlcihibG9iKSB7XG5cdHZhciBvID0ge307XG5cdC8qdmFyIGxlbiA9ICovYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRibG9iLmwgKz0gNDsgLy8gbXVzdCBiZSAweDFcblx0by5pZCA9IGJsb2IucmVhZF9zaGlmdCgwLCAnbHBwNCcpO1xuXHRvLm5hbWUgPSBibG9iLnJlYWRfc2hpZnQoMCwgJ2xwcDQnKTtcblx0by5SID0gcGFyc2VfQ1JZUFRPVmVyc2lvbihibG9iLCA0KTtcblx0by5VID0gcGFyc2VfQ1JZUFRPVmVyc2lvbihibG9iLCA0KTtcblx0by5XID0gcGFyc2VfQ1JZUFRPVmVyc2lvbihibG9iLCA0KTtcblx0cmV0dXJuIG87XG59XG5cbmZ1bmN0aW9uIHBhcnNlX1ByaW1hcnkoYmxvYikge1xuXHQvKiBbTVMtT0ZGQ1JZUFRPXSAyLjIuNiBJUk1EU1RyYW5zZm9ybUluZm8gKi9cblx0dmFyIGhkciA9IHBhcnNlX1RyYW5zZm9ybUluZm9IZWFkZXIoYmxvYik7XG5cdC8qIFtNUy1PRkZDUllQVE9dIDIuMS45IEVuY3J5cHRpb25UcmFuc2Zvcm1JbmZvICovXG5cdGhkci5lbmFtZSA9IGJsb2IucmVhZF9zaGlmdCgwLCAnOGxwcDQnKTtcblx0aGRyLmJsa3N6ID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRoZHIuY21vZGUgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdGlmKGJsb2IucmVhZF9zaGlmdCg0KSAhPSAweDA0KSB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgIVByaW1hcnkgcmVjb3JkXCIpO1xuXHRyZXR1cm4gaGRyO1xufVxuXG4vKiBbTVMtT0ZGQ1JZUFRPXSAyLjMuMiBFbmNyeXB0aW9uIEhlYWRlciAqL1xuZnVuY3Rpb24gcGFyc2VfRW5jcnlwdGlvbkhlYWRlcihibG9iLCBsZW5ndGgpIHtcblx0dmFyIHRndCA9IGJsb2IubCArIGxlbmd0aDtcblx0dmFyIG8gPSB7fTtcblx0by5GbGFncyA9IChibG9iLnJlYWRfc2hpZnQoNCkgJiAweDNGKTtcblx0YmxvYi5sICs9IDQ7XG5cdG8uQWxnSUQgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdHZhciB2YWxpZCA9IGZhbHNlO1xuXHRzd2l0Y2goby5BbGdJRCkge1xuXHRcdGNhc2UgMHg2NjBFOiBjYXNlIDB4NjYwRjogY2FzZSAweDY2MTA6IHZhbGlkID0gKG8uRmxhZ3MgPT0gMHgyNCk7IGJyZWFrO1xuXHRcdGNhc2UgMHg2ODAxOiB2YWxpZCA9IChvLkZsYWdzID09IDB4MDQpOyBicmVhaztcblx0XHRjYXNlIDA6IHZhbGlkID0gKG8uRmxhZ3MgPT0gMHgxMCB8fCBvLkZsYWdzID09IDB4MDQgfHwgby5GbGFncyA9PSAweDI0KTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogdGhyb3cgJ1VucmVjb2duaXplZCBlbmNyeXB0aW9uIGFsZ29yaXRobTogJyArIG8uQWxnSUQ7XG5cdH1cblx0aWYoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoXCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoXCIpO1xuXHRvLkFsZ0lESGFzaCA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0by5LZXlTaXplID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRvLlByb3ZpZGVyVHlwZSA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0YmxvYi5sICs9IDg7XG5cdG8uQ1NQTmFtZSA9IGJsb2IucmVhZF9zaGlmdCgodGd0LWJsb2IubCk+PjEsICd1dGYxNmxlJyk7XG5cdGJsb2IubCA9IHRndDtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1PRkZDUllQVE9dIDIuMy4zIEVuY3J5cHRpb24gVmVyaWZpZXIgKi9cbmZ1bmN0aW9uIHBhcnNlX0VuY3J5cHRpb25WZXJpZmllcihibG9iLCBsZW5ndGgpIHtcblx0dmFyIG8gPSB7fSwgdGd0ID0gYmxvYi5sICsgbGVuZ3RoO1xuXHRibG9iLmwgKz0gNDsgLy8gU2FsdFNpemUgbXVzdCBiZSAweDEwXG5cdG8uU2FsdCA9IGJsb2Iuc2xpY2UoYmxvYi5sLCBibG9iLmwrMTYpOyBibG9iLmwgKz0gMTY7XG5cdG8uVmVyaWZpZXIgPSBibG9iLnNsaWNlKGJsb2IubCwgYmxvYi5sKzE2KTsgYmxvYi5sICs9IDE2O1xuXHQvKnZhciBzeiA9ICovYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRvLlZlcmlmaWVySGFzaCA9IGJsb2Iuc2xpY2UoYmxvYi5sLCB0Z3QpOyBibG9iLmwgPSB0Z3Q7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtT0ZGQ1JZUFRPXSAyLjMuNC4qIEVuY3J5cHRpb25JbmZvIFN0cmVhbSAqL1xuZnVuY3Rpb24gcGFyc2VfRW5jcnlwdGlvbkluZm8oYmxvYikge1xuXHR2YXIgdmVycyA9IHBhcnNlX0NSWVBUT1ZlcnNpb24oYmxvYik7XG5cdHN3aXRjaCh2ZXJzLk1pbm9yKSB7XG5cdFx0Y2FzZSAweDAyOiByZXR1cm4gW3ZlcnMuTWlub3IsIHBhcnNlX0VuY0luZm9TdGQoYmxvYiwgdmVycyldO1xuXHRcdGNhc2UgMHgwMzogcmV0dXJuIFt2ZXJzLk1pbm9yLCBwYXJzZV9FbmNJbmZvRXh0KGJsb2IsIHZlcnMpXTtcblx0XHRjYXNlIDB4MDQ6IHJldHVybiBbdmVycy5NaW5vciwgcGFyc2VfRW5jSW5mb0FnbChibG9iLCB2ZXJzKV07XG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFwiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgdW5yZWNvZ25pemVkIFZlcnNpb246IFwiICsgdmVycy5NaW5vcik7XG59XG5cbi8qIFtNUy1PRkZDUllQVE9dIDIuMy40LjUgIEVuY3J5cHRpb25JbmZvIFN0cmVhbSAoU3RhbmRhcmQgRW5jcnlwdGlvbikgKi9cbmZ1bmN0aW9uIHBhcnNlX0VuY0luZm9TdGQoYmxvYikge1xuXHR2YXIgZmxhZ3MgPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdGlmKChmbGFncyAmIDB4M0YpICE9IDB4MjQpIHRocm93IG5ldyBFcnJvcihcIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoXCIpO1xuXHR2YXIgc3ogPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdC8vdmFyIHRndCA9IGJsb2IubCArIHN6O1xuXHR2YXIgaGRyID0gcGFyc2VfRW5jcnlwdGlvbkhlYWRlcihibG9iLCBzeik7XG5cdHZhciB2ZXJpZmllciA9IHBhcnNlX0VuY3J5cHRpb25WZXJpZmllcihibG9iLCBibG9iLmxlbmd0aCAtIGJsb2IubCk7XG5cdHJldHVybiB7IHQ6XCJTdGRcIiwgaDpoZHIsIHY6dmVyaWZpZXIgfTtcbn1cbi8qIFtNUy1PRkZDUllQVE9dIDIuMy40LjYgIEVuY3J5cHRpb25JbmZvIFN0cmVhbSAoRXh0ZW5zaWJsZSBFbmNyeXB0aW9uKSAqL1xuZnVuY3Rpb24gcGFyc2VfRW5jSW5mb0V4dCgpIHsgdGhyb3cgbmV3IEVycm9yKFwiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQ6IEVDTUEtMzc2IEV4dGVuc2libGVcIik7IH1cbi8qIFtNUy1PRkZDUllQVE9dIDIuMy40LjEwIEVuY3J5cHRpb25JbmZvIFN0cmVhbSAoQWdpbGUgRW5jcnlwdGlvbikgKi9cbmZ1bmN0aW9uIHBhcnNlX0VuY0luZm9BZ2woYmxvYikge1xuXHR2YXIgS2V5RGF0YSA9IFtcInNhbHRTaXplXCIsXCJibG9ja1NpemVcIixcImtleUJpdHNcIixcImhhc2hTaXplXCIsXCJjaXBoZXJBbGdvcml0aG1cIixcImNpcGhlckNoYWluaW5nXCIsXCJoYXNoQWxnb3JpdGhtXCIsXCJzYWx0VmFsdWVcIl07XG5cdGJsb2IubCs9NDtcblx0dmFyIHhtbCA9IGJsb2IucmVhZF9zaGlmdChibG9iLmxlbmd0aCAtIGJsb2IubCwgJ3V0ZjgnKTtcblx0dmFyIG8gPSB7fTtcblx0eG1sLnJlcGxhY2UodGFncmVnZXgsIGZ1bmN0aW9uIHhtbF9hZ2lsZSh4KSB7XG5cdFx0dmFyIHkgPSBwYXJzZXhtbHRhZyh4KTtcblx0XHRzd2l0Y2goc3RyaXBfbnMoeVswXSkpIHtcblx0XHRcdGNhc2UgJzw/eG1sJzogYnJlYWs7XG5cdFx0XHRjYXNlICc8ZW5jcnlwdGlvbic6IGNhc2UgJzwvZW5jcnlwdGlvbj4nOiBicmVhaztcblx0XHRcdGNhc2UgJzxrZXlEYXRhJzogS2V5RGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsgb1trXSA9IHlba107IH0pOyBicmVhaztcblx0XHRcdGNhc2UgJzxkYXRhSW50ZWdyaXR5Jzogby5lbmNyeXB0ZWRIbWFjS2V5ID0geS5lbmNyeXB0ZWRIbWFjS2V5OyBvLmVuY3J5cHRlZEhtYWNWYWx1ZSA9IHkuZW5jcnlwdGVkSG1hY1ZhbHVlOyBicmVhaztcblx0XHRcdGNhc2UgJzxrZXlFbmNyeXB0b3JzPic6IGNhc2UgJzxrZXlFbmNyeXB0b3JzJzogby5lbmNzID0gW107IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPC9rZXlFbmNyeXB0b3JzPic6IGJyZWFrO1xuXG5cdFx0XHRjYXNlICc8a2V5RW5jcnlwdG9yJzogby51cmkgPSB5LnVyaTsgYnJlYWs7XG5cdFx0XHRjYXNlICc8L2tleUVuY3J5cHRvcj4nOiBicmVhaztcblx0XHRcdGNhc2UgJzxlbmNyeXB0ZWRLZXknOiBvLmVuY3MucHVzaCh5KTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyB5WzBdO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtT0ZGQ1JZUFRPXSAyLjMuNS4xIFJDNCBDcnlwdG9BUEkgRW5jcnlwdGlvbiBIZWFkZXIgKi9cbmZ1bmN0aW9uIHBhcnNlX1JDNENyeXB0b0hlYWRlcihibG9iLCBsZW5ndGgpIHtcblx0dmFyIG8gPSB7fTtcblx0dmFyIHZlcnMgPSBvLkVuY3J5cHRpb25WZXJzaW9uSW5mbyA9IHBhcnNlX0NSWVBUT1ZlcnNpb24oYmxvYiwgNCk7IGxlbmd0aCAtPSA0O1xuXHRpZih2ZXJzLk1pbm9yICE9IDIpIHRocm93IG5ldyBFcnJvcigndW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogJyArIHZlcnMuTWlub3IpO1xuXHRpZih2ZXJzLk1ham9yID4gNCB8fCB2ZXJzLk1ham9yIDwgMikgdGhyb3cgbmV3IEVycm9yKCd1bnJlY29nbml6ZWQgbWFqb3IgdmVyc2lvbiBjb2RlOiAnICsgdmVycy5NYWpvcik7XG5cdG8uRmxhZ3MgPSBibG9iLnJlYWRfc2hpZnQoNCk7IGxlbmd0aCAtPSA0O1xuXHR2YXIgc3ogPSBibG9iLnJlYWRfc2hpZnQoNCk7IGxlbmd0aCAtPSA0O1xuXHRvLkVuY3J5cHRpb25IZWFkZXIgPSBwYXJzZV9FbmNyeXB0aW9uSGVhZGVyKGJsb2IsIHN6KTsgbGVuZ3RoIC09IHN6O1xuXHRvLkVuY3J5cHRpb25WZXJpZmllciA9IHBhcnNlX0VuY3J5cHRpb25WZXJpZmllcihibG9iLCBsZW5ndGgpO1xuXHRyZXR1cm4gbztcbn1cbi8qIFtNUy1PRkZDUllQVE9dIDIuMy42LjEgUkM0IEVuY3J5cHRpb24gSGVhZGVyICovXG5mdW5jdGlvbiBwYXJzZV9SQzRIZWFkZXIoYmxvYikge1xuXHR2YXIgbyA9IHt9O1xuXHR2YXIgdmVycyA9IG8uRW5jcnlwdGlvblZlcnNpb25JbmZvID0gcGFyc2VfQ1JZUFRPVmVyc2lvbihibG9iLCA0KTtcblx0aWYodmVycy5NYWpvciAhPSAxIHx8IHZlcnMuTWlub3IgIT0gMSkgdGhyb3cgJ3VucmVjb2duaXplZCB2ZXJzaW9uIGNvZGUgJyArIHZlcnMuTWFqb3IgKyAnIDogJyArIHZlcnMuTWlub3I7XG5cdG8uU2FsdCA9IGJsb2IucmVhZF9zaGlmdCgxNik7XG5cdG8uRW5jcnlwdGVkVmVyaWZpZXIgPSBibG9iLnJlYWRfc2hpZnQoMTYpO1xuXHRvLkVuY3J5cHRlZFZlcmlmaWVySGFzaCA9IGJsb2IucmVhZF9zaGlmdCgxNik7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtT0ZGQ1JZUFRPXSAyLjMuNy4xIEJpbmFyeSBEb2N1bWVudCBQYXNzd29yZCBWZXJpZmllciBEZXJpdmF0aW9uICovXG5mdW5jdGlvbiBjcnlwdG9fQ3JlYXRlUGFzc3dvcmRWZXJpZmllcl9NZXRob2QxKFBhc3N3b3JkKSB7XG5cdHZhciBWZXJpZmllciA9IDB4MDAwMCwgUGFzc3dvcmRBcnJheTtcblx0dmFyIFBhc3N3b3JkRGVjb2RlZCA9IF9KUzJBTlNJKFBhc3N3b3JkKTtcblx0dmFyIGxlbiA9IFBhc3N3b3JkRGVjb2RlZC5sZW5ndGggKyAxLCBpLCBQYXNzd29yZEJ5dGU7XG5cdHZhciBJbnRlcm1lZGlhdGUxLCBJbnRlcm1lZGlhdGUyLCBJbnRlcm1lZGlhdGUzO1xuXHRQYXNzd29yZEFycmF5ID0gbmV3X3Jhd19idWYobGVuKTtcblx0UGFzc3dvcmRBcnJheVswXSA9IFBhc3N3b3JkRGVjb2RlZC5sZW5ndGg7XG5cdGZvcihpID0gMTsgaSAhPSBsZW47ICsraSkgUGFzc3dvcmRBcnJheVtpXSA9IFBhc3N3b3JkRGVjb2RlZFtpLTFdO1xuXHRmb3IoaSA9IGxlbi0xOyBpID49IDA7IC0taSkge1xuXHRcdFBhc3N3b3JkQnl0ZSA9IFBhc3N3b3JkQXJyYXlbaV07XG5cdFx0SW50ZXJtZWRpYXRlMSA9ICgoVmVyaWZpZXIgJiAweDQwMDApID09PSAweDAwMDApID8gMCA6IDE7XG5cdFx0SW50ZXJtZWRpYXRlMiA9IChWZXJpZmllciA8PCAxKSAmIDB4N0ZGRjtcblx0XHRJbnRlcm1lZGlhdGUzID0gSW50ZXJtZWRpYXRlMSB8IEludGVybWVkaWF0ZTI7XG5cdFx0VmVyaWZpZXIgPSBJbnRlcm1lZGlhdGUzIF4gUGFzc3dvcmRCeXRlO1xuXHR9XG5cdHJldHVybiBWZXJpZmllciBeIDB4Q0U0Qjtcbn1cblxuLyogW01TLU9GRkNSWVBUT10gMi4zLjcuMiBCaW5hcnkgRG9jdW1lbnQgWE9SIEFycmF5IEluaXRpYWxpemF0aW9uICovXG52YXIgY3J5cHRvX0NyZWF0ZVhvckFycmF5X01ldGhvZDEgPSAoZnVuY3Rpb24oKSB7XG5cdHZhciBQYWRBcnJheSA9IFsweEJCLCAweEZGLCAweEZGLCAweEJBLCAweEZGLCAweEZGLCAweEI5LCAweDgwLCAweDAwLCAweEJFLCAweDBGLCAweDAwLCAweEJGLCAweDBGLCAweDAwXTtcblx0dmFyIEluaXRpYWxDb2RlID0gWzB4RTFGMCwgMHgxRDBGLCAweENDOUMsIDB4ODRDMCwgMHgxMTBDLCAweDBFMTAsIDB4RjFDRSwgMHgzMTNFLCAweDE4NzIsIDB4RTEzOSwgMHhENDBGLCAweDg0RjksIDB4MjgwQywgMHhBOTZBLCAweDRFQzNdO1xuXHR2YXIgWG9yTWF0cml4ID0gWzB4QUVGQywgMHg0REQ5LCAweDlCQjIsIDB4Mjc0NSwgMHg0RThBLCAweDlEMTQsIDB4MkEwOSwgMHg3QjYxLCAweEY2QzIsIDB4RkRBNSwgMHhFQjZCLCAweEM2RjcsIDB4OURDRiwgMHgyQkJGLCAweDQ1NjMsIDB4OEFDNiwgMHgwNUFELCAweDBCNUEsIDB4MTZCNCwgMHgyRDY4LCAweDVBRDAsIDB4MDM3NSwgMHgwNkVBLCAweDBERDQsIDB4MUJBOCwgMHgzNzUwLCAweDZFQTAsIDB4REQ0MCwgMHhEODQ5LCAweEEwQjMsIDB4NTE0NywgMHhBMjhFLCAweDU1M0QsIDB4QUE3QSwgMHg0NEQ1LCAweDZGNDUsIDB4REU4QSwgMHhBRDM1LCAweDRBNEIsIDB4OTQ5NiwgMHgzOTBELCAweDcyMUEsIDB4RUIyMywgMHhDNjY3LCAweDlDRUYsIDB4MjlGRiwgMHg1M0ZFLCAweEE3RkMsIDB4NUZEOSwgMHg0N0QzLCAweDhGQTYsIDB4MEY2RCwgMHgxRURBLCAweDNEQjQsIDB4N0I2OCwgMHhGNkQwLCAweEI4NjEsIDB4NjBFMywgMHhDMUM2LCAweDkzQUQsIDB4Mzc3QiwgMHg2RUY2LCAweERERUMsIDB4NDVBMCwgMHg4QjQwLCAweDA2QTEsIDB4MEQ0MiwgMHgxQTg0LCAweDM1MDgsIDB4NkExMCwgMHhBQTUxLCAweDQ0ODMsIDB4ODkwNiwgMHgwMjJELCAweDA0NUEsIDB4MDhCNCwgMHgxMTY4LCAweDc2QjQsIDB4RUQ2OCwgMHhDQUYxLCAweDg1QzMsIDB4MUJBNywgMHgzNzRFLCAweDZFOUMsIDB4MzczMCwgMHg2RTYwLCAweERDQzAsIDB4QTlBMSwgMHg0MzYzLCAweDg2QzYsIDB4MURBRCwgMHgzMzMxLCAweDY2NjIsIDB4Q0NDNCwgMHg4OUE5LCAweDAzNzMsIDB4MDZFNiwgMHgwRENDLCAweDEwMjEsIDB4MjA0MiwgMHg0MDg0LCAweDgxMDgsIDB4MTIzMSwgMHgyNDYyLCAweDQ4QzRdO1xuXHR2YXIgUm9yID0gZnVuY3Rpb24oQnl0ZSkgeyByZXR1cm4gKChCeXRlLzIpIHwgKEJ5dGUqMTI4KSkgJiAweEZGOyB9O1xuXHR2YXIgWG9yUm9yID0gZnVuY3Rpb24oYnl0ZTEsIGJ5dGUyKSB7IHJldHVybiBSb3IoYnl0ZTEgXiBieXRlMik7IH07XG5cdHZhciBDcmVhdGVYb3JLZXlfTWV0aG9kMSA9IGZ1bmN0aW9uKFBhc3N3b3JkKSB7XG5cdFx0dmFyIFhvcktleSA9IEluaXRpYWxDb2RlW1Bhc3N3b3JkLmxlbmd0aCAtIDFdO1xuXHRcdHZhciBDdXJyZW50RWxlbWVudCA9IDB4Njg7XG5cdFx0Zm9yKHZhciBpID0gUGFzc3dvcmQubGVuZ3RoLTE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHR2YXIgQ2hhciA9IFBhc3N3b3JkW2ldO1xuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiAhPSA3OyArK2opIHtcblx0XHRcdFx0aWYoQ2hhciAmIDB4NDApIFhvcktleSBePSBYb3JNYXRyaXhbQ3VycmVudEVsZW1lbnRdO1xuXHRcdFx0XHRDaGFyICo9IDI7IC0tQ3VycmVudEVsZW1lbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBYb3JLZXk7XG5cdH07XG5cdHJldHVybiBmdW5jdGlvbihwYXNzd29yZCkge1xuXHRcdHZhciBQYXNzd29yZCA9IF9KUzJBTlNJKHBhc3N3b3JkKTtcblx0XHR2YXIgWG9yS2V5ID0gQ3JlYXRlWG9yS2V5X01ldGhvZDEoUGFzc3dvcmQpO1xuXHRcdHZhciBJbmRleCA9IFBhc3N3b3JkLmxlbmd0aDtcblx0XHR2YXIgT2JmdXNjYXRpb25BcnJheSA9IG5ld19yYXdfYnVmKDE2KTtcblx0XHRmb3IodmFyIGkgPSAwOyBpICE9IDE2OyArK2kpIE9iZnVzY2F0aW9uQXJyYXlbaV0gPSAweDAwO1xuXHRcdHZhciBUZW1wLCBQYXNzd29yZExhc3RDaGFyLCBQYWRJbmRleDtcblx0XHRpZigoSW5kZXggJiAxKSA9PT0gMSkge1xuXHRcdFx0VGVtcCA9IFhvcktleSA+PiA4O1xuXHRcdFx0T2JmdXNjYXRpb25BcnJheVtJbmRleF0gPSBYb3JSb3IoUGFkQXJyYXlbMF0sIFRlbXApO1xuXHRcdFx0LS1JbmRleDtcblx0XHRcdFRlbXAgPSBYb3JLZXkgJiAweEZGO1xuXHRcdFx0UGFzc3dvcmRMYXN0Q2hhciA9IFBhc3N3b3JkW1Bhc3N3b3JkLmxlbmd0aCAtIDFdO1xuXHRcdFx0T2JmdXNjYXRpb25BcnJheVtJbmRleF0gPSBYb3JSb3IoUGFzc3dvcmRMYXN0Q2hhciwgVGVtcCk7XG5cdFx0fVxuXHRcdHdoaWxlKEluZGV4ID4gMCkge1xuXHRcdFx0LS1JbmRleDtcblx0XHRcdFRlbXAgPSBYb3JLZXkgPj4gODtcblx0XHRcdE9iZnVzY2F0aW9uQXJyYXlbSW5kZXhdID0gWG9yUm9yKFBhc3N3b3JkW0luZGV4XSwgVGVtcCk7XG5cdFx0XHQtLUluZGV4O1xuXHRcdFx0VGVtcCA9IFhvcktleSAmIDB4RkY7XG5cdFx0XHRPYmZ1c2NhdGlvbkFycmF5W0luZGV4XSA9IFhvclJvcihQYXNzd29yZFtJbmRleF0sIFRlbXApO1xuXHRcdH1cblx0XHRJbmRleCA9IDE1O1xuXHRcdFBhZEluZGV4ID0gMTUgLSBQYXNzd29yZC5sZW5ndGg7XG5cdFx0d2hpbGUoUGFkSW5kZXggPiAwKSB7XG5cdFx0XHRUZW1wID0gWG9yS2V5ID4+IDg7XG5cdFx0XHRPYmZ1c2NhdGlvbkFycmF5W0luZGV4XSA9IFhvclJvcihQYWRBcnJheVtQYWRJbmRleF0sIFRlbXApO1xuXHRcdFx0LS1JbmRleDtcblx0XHRcdC0tUGFkSW5kZXg7XG5cdFx0XHRUZW1wID0gWG9yS2V5ICYgMHhGRjtcblx0XHRcdE9iZnVzY2F0aW9uQXJyYXlbSW5kZXhdID0gWG9yUm9yKFBhc3N3b3JkW0luZGV4XSwgVGVtcCk7XG5cdFx0XHQtLUluZGV4O1xuXHRcdFx0LS1QYWRJbmRleDtcblx0XHR9XG5cdFx0cmV0dXJuIE9iZnVzY2F0aW9uQXJyYXk7XG5cdH07XG59KSgpO1xuXG4vKiBbTVMtT0ZGQ1JZUFRPXSAyLjMuNy4zIEJpbmFyeSBEb2N1bWVudCBYT1IgRGF0YSBUcmFuc2Zvcm1hdGlvbiBNZXRob2QgMSAqL1xudmFyIGNyeXB0b19EZWNyeXB0RGF0YV9NZXRob2QxID0gZnVuY3Rpb24ocGFzc3dvcmQsIERhdGEsIFhvckFycmF5SW5kZXgsIFhvckFycmF5LCBPKSB7XG5cdC8qIElmIFhvckFycmF5IGlzIHNldCwgdXNlIGl0OyBpZiBPIGlzIG5vdCBzZXQsIG1ha2UgY2hhbmdlcyBpbi1wbGFjZSAqL1xuXHRpZighTykgTyA9IERhdGE7XG5cdGlmKCFYb3JBcnJheSkgWG9yQXJyYXkgPSBjcnlwdG9fQ3JlYXRlWG9yQXJyYXlfTWV0aG9kMShwYXNzd29yZCk7XG5cdHZhciBJbmRleCwgVmFsdWU7XG5cdGZvcihJbmRleCA9IDA7IEluZGV4ICE9IERhdGEubGVuZ3RoOyArK0luZGV4KSB7XG5cdFx0VmFsdWUgPSBEYXRhW0luZGV4XTtcblx0XHRWYWx1ZSBePSBYb3JBcnJheVtYb3JBcnJheUluZGV4XTtcblx0XHRWYWx1ZSA9ICgoVmFsdWU+PjUpIHwgKFZhbHVlPDwzKSkgJiAweEZGO1xuXHRcdE9bSW5kZXhdID0gVmFsdWU7XG5cdFx0KytYb3JBcnJheUluZGV4O1xuXHR9XG5cdHJldHVybiBbTywgWG9yQXJyYXlJbmRleCwgWG9yQXJyYXldO1xufTtcblxudmFyIGNyeXB0b19NYWtlWG9yRGVjcnlwdG9yID0gZnVuY3Rpb24ocGFzc3dvcmQpIHtcblx0dmFyIFhvckFycmF5SW5kZXggPSAwLCBYb3JBcnJheSA9IGNyeXB0b19DcmVhdGVYb3JBcnJheV9NZXRob2QxKHBhc3N3b3JkKTtcblx0cmV0dXJuIGZ1bmN0aW9uKERhdGEpIHtcblx0XHR2YXIgTyA9IGNyeXB0b19EZWNyeXB0RGF0YV9NZXRob2QxKFwiXCIsIERhdGEsIFhvckFycmF5SW5kZXgsIFhvckFycmF5KTtcblx0XHRYb3JBcnJheUluZGV4ID0gT1sxXTtcblx0XHRyZXR1cm4gT1swXTtcblx0fTtcbn07XG5cbi8qIDIuNS4zNDMgKi9cbmZ1bmN0aW9uIHBhcnNlX1hPUk9iZnVzY2F0aW9uKGJsb2IsIGxlbmd0aCwgb3B0cywgb3V0KSB7XG5cdHZhciBvID0gKHsga2V5OiBwYXJzZXVpbnQxNihibG9iKSwgdmVyaWZpY2F0aW9uQnl0ZXM6IHBhcnNldWludDE2KGJsb2IpIH0pO1xuXHRpZihvcHRzLnBhc3N3b3JkKSBvLnZlcmlmaWVyID0gY3J5cHRvX0NyZWF0ZVBhc3N3b3JkVmVyaWZpZXJfTWV0aG9kMShvcHRzLnBhc3N3b3JkKTtcblx0b3V0LnZhbGlkID0gby52ZXJpZmljYXRpb25CeXRlcyA9PT0gby52ZXJpZmllcjtcblx0aWYob3V0LnZhbGlkKSBvdXQuaW5zaXR1ID0gY3J5cHRvX01ha2VYb3JEZWNyeXB0b3Iob3B0cy5wYXNzd29yZCk7XG5cdHJldHVybiBvO1xufVxuXG4vKiAyLjQuMTE3ICovXG5mdW5jdGlvbiBwYXJzZV9GaWxlUGFzc0hlYWRlcihibG9iLCBsZW5ndGgsIG9vKSB7XG5cdHZhciBvID0gb28gfHwge307IG8uSW5mbyA9IGJsb2IucmVhZF9zaGlmdCgyKTsgYmxvYi5sIC09IDI7XG5cdGlmKG8uSW5mbyA9PT0gMSkgby5EYXRhID0gcGFyc2VfUkM0SGVhZGVyKGJsb2IsIGxlbmd0aCk7XG5cdGVsc2Ugby5EYXRhID0gcGFyc2VfUkM0Q3J5cHRvSGVhZGVyKGJsb2IsIGxlbmd0aCk7XG5cdHJldHVybiBvO1xufVxuZnVuY3Rpb24gcGFyc2VfRmlsZVBhc3MoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciBvID0gKHsgVHlwZTogb3B0cy5iaWZmID49IDggPyBibG9iLnJlYWRfc2hpZnQoMikgOiAwIH0pOyAvKiB3RW5jcnlwdGlvblR5cGUgKi9cblx0aWYoby5UeXBlKSBwYXJzZV9GaWxlUGFzc0hlYWRlcihibG9iLCBsZW5ndGgtMiwgbyk7XG5cdGVsc2UgcGFyc2VfWE9ST2JmdXNjYXRpb24oYmxvYiwgbGVuZ3RoLTIsIG9wdHMsIG8pO1xuXHRyZXR1cm4gbztcbn1cblxuXG52YXIgUlRGID0gKGZ1bmN0aW9uKCkge1xuXHRmdW5jdGlvbiBydGZfdG9fc2hlZXQoZCwgb3B0cykge1xuXHRcdHN3aXRjaChvcHRzLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2Jhc2U2NCc6IHJldHVybiBydGZfdG9fc2hlZXRfc3RyKEJhc2U2NC5kZWNvZGUoZCksIG9wdHMpO1xuXHRcdFx0Y2FzZSAnYmluYXJ5JzogcmV0dXJuIHJ0Zl90b19zaGVldF9zdHIoZCwgb3B0cyk7XG5cdFx0XHRjYXNlICdidWZmZXInOiByZXR1cm4gcnRmX3RvX3NoZWV0X3N0cihkLnRvU3RyaW5nKCdiaW5hcnknKSwgb3B0cyk7XG5cdFx0XHRjYXNlICdhcnJheSc6ICByZXR1cm4gcnRmX3RvX3NoZWV0X3N0cihjYzJzdHIoZCksIG9wdHMpO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgdHlwZSBcIiArIG9wdHMudHlwZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBydGZfdG9fc2hlZXRfc3RyKHN0ciwgb3B0cykge1xuXHRcdHZhciBvID0gb3B0cyB8fCB7fTtcblx0XHR2YXIgd3MgPSBvLmRlbnNlID8gKFtdKSA6ICh7fSk7XG5cdFx0dmFyIHJhbmdlID0gKHtzOiB7YzowLCByOjB9LCBlOiB7YzowLCByOjB9fSk7XG5cblx0XHQvLyBUT0RPOiBwYXJzZVxuXHRcdGlmKCFzdHIubWF0Y2goL1xcXFx0cm93ZC8pKSB0aHJvdyBuZXcgRXJyb3IoXCJSVEYgbWlzc2luZyB0YWJsZVwiKTtcblxuXHRcdHdzWychcmVmJ10gPSBlbmNvZGVfcmFuZ2UocmFuZ2UpO1xuXHRcdHJldHVybiB3cztcblx0fVxuXG5cdGZ1bmN0aW9uIHJ0Zl90b193b3JrYm9vayhkLCBvcHRzKSB7IHJldHVybiBzaGVldF90b193b3JrYm9vayhydGZfdG9fc2hlZXQoZCwgb3B0cyksIG9wdHMpOyB9XG5cblx0LyogVE9ETzogdGhpcyBpcyBhIHN0dWIgKi9cblx0ZnVuY3Rpb24gc2hlZXRfdG9fcnRmKHdzKSB7XG5cdFx0dmFyIG8gPSBbXCJ7XFxcXHJ0ZjFcXFxcYW5zaVwiXTtcblx0XHR2YXIgciA9IHNhZmVfZGVjb2RlX3JhbmdlKHdzWychcmVmJ10pLCBjZWxsO1xuXHRcdHZhciBkZW5zZSA9IEFycmF5LmlzQXJyYXkod3MpO1xuXHRcdGZvcih2YXIgUiA9IHIucy5yOyBSIDw9IHIuZS5yOyArK1IpIHtcblx0XHRcdG8ucHVzaChcIlxcXFx0cm93ZFxcXFx0cmF1dG9maXQxXCIpO1xuXHRcdFx0Zm9yKHZhciBDID0gci5zLmM7IEMgPD0gci5lLmM7ICsrQykgby5wdXNoKFwiXFxcXGNlbGx4XCIgKyAoQysxKSk7XG5cdFx0XHRvLnB1c2goXCJcXFxccGFyZFxcXFxpbnRibFwiKTtcblx0XHRcdGZvcihDID0gci5zLmM7IEMgPD0gci5lLmM7ICsrQykge1xuXHRcdFx0XHR2YXIgY29vcmQgPSBlbmNvZGVfY2VsbCh7cjpSLGM6Q30pO1xuXHRcdFx0XHRjZWxsID0gZGVuc2UgPyAod3NbUl18fFtdKVtDXTogd3NbY29vcmRdO1xuXHRcdFx0XHRpZighY2VsbCB8fCBjZWxsLnYgPT0gbnVsbCAmJiAoIWNlbGwuZiB8fCBjZWxsLkYpKSBjb250aW51ZTtcblx0XHRcdFx0by5wdXNoKFwiIFwiICsgKGNlbGwudyB8fCAoZm9ybWF0X2NlbGwoY2VsbCksIGNlbGwudykpKTtcblx0XHRcdFx0by5wdXNoKFwiXFxcXGNlbGxcIik7XG5cdFx0XHR9XG5cdFx0XHRvLnB1c2goXCJcXFxccGFyZFxcXFxpbnRibFxcXFxyb3dcIik7XG5cdFx0fVxuXHRcdHJldHVybiBvLmpvaW4oXCJcIikgKyBcIn1cIjtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dG9fd29ya2Jvb2s6IHJ0Zl90b193b3JrYm9vayxcblx0XHR0b19zaGVldDogcnRmX3RvX3NoZWV0LFxuXHRcdGZyb21fc2hlZXQ6IHNoZWV0X3RvX3J0ZlxuXHR9O1xufSkoKTtcbmZ1bmN0aW9uIGhleDJSR0IoaCkge1xuXHR2YXIgbyA9IGguc2xpY2UoaFswXT09PVwiI1wiPzE6MCkuc2xpY2UoMCw2KTtcblx0cmV0dXJuIFtwYXJzZUludChvLnNsaWNlKDAsMiksMTYpLHBhcnNlSW50KG8uc2xpY2UoMiw0KSwxNikscGFyc2VJbnQoby5zbGljZSg0LDYpLDE2KV07XG59XG5mdW5jdGlvbiByZ2IySGV4KHJnYikge1xuXHRmb3IodmFyIGk9MCxvPTE7IGkhPTM7ICsraSkgbyA9IG8qMjU2ICsgKHJnYltpXT4yNTU/MjU1OnJnYltpXTwwPzA6cmdiW2ldKTtcblx0cmV0dXJuIG8udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJIU0wocmdiKSB7XG5cdHZhciBSID0gcmdiWzBdLzI1NSwgRyA9IHJnYlsxXS8yNTUsIEI9cmdiWzJdLzI1NTtcblx0dmFyIE0gPSBNYXRoLm1heChSLCBHLCBCKSwgbSA9IE1hdGgubWluKFIsIEcsIEIpLCBDID0gTSAtIG07XG5cdGlmKEMgPT09IDApIHJldHVybiBbMCwgMCwgUl07XG5cblx0dmFyIEg2ID0gMCwgUyA9IDAsIEwyID0gKE0gKyBtKTtcblx0UyA9IEMgLyAoTDIgPiAxID8gMiAtIEwyIDogTDIpO1xuXHRzd2l0Y2goTSl7XG5cdFx0Y2FzZSBSOiBINiA9ICgoRyAtIEIpIC8gQyArIDYpJTY7IGJyZWFrO1xuXHRcdGNhc2UgRzogSDYgPSAoKEIgLSBSKSAvIEMgKyAyKTsgYnJlYWs7XG5cdFx0Y2FzZSBCOiBINiA9ICgoUiAtIEcpIC8gQyArIDQpOyBicmVhaztcblx0fVxuXHRyZXR1cm4gW0g2IC8gNiwgUywgTDIgLyAyXTtcbn1cblxuZnVuY3Rpb24gaHNsMlJHQihoc2wpe1xuXHR2YXIgSCA9IGhzbFswXSwgUyA9IGhzbFsxXSwgTCA9IGhzbFsyXTtcblx0dmFyIEMgPSBTICogMiAqIChMIDwgMC41ID8gTCA6IDEgLSBMKSwgbSA9IEwgLSBDLzI7XG5cdHZhciByZ2IgPSBbbSxtLG1dLCBoNiA9IDYqSDtcblxuXHR2YXIgWDtcblx0aWYoUyAhPT0gMCkgc3dpdGNoKGg2fDApIHtcblx0XHRjYXNlIDA6IGNhc2UgNjogWCA9IEMgKiBoNjsgcmdiWzBdICs9IEM7IHJnYlsxXSArPSBYOyBicmVhaztcblx0XHRjYXNlIDE6IFggPSBDICogKDIgLSBoNik7ICAgcmdiWzBdICs9IFg7IHJnYlsxXSArPSBDOyBicmVhaztcblx0XHRjYXNlIDI6IFggPSBDICogKGg2IC0gMik7ICAgcmdiWzFdICs9IEM7IHJnYlsyXSArPSBYOyBicmVhaztcblx0XHRjYXNlIDM6IFggPSBDICogKDQgLSBoNik7ICAgcmdiWzFdICs9IFg7IHJnYlsyXSArPSBDOyBicmVhaztcblx0XHRjYXNlIDQ6IFggPSBDICogKGg2IC0gNCk7ICAgcmdiWzJdICs9IEM7IHJnYlswXSArPSBYOyBicmVhaztcblx0XHRjYXNlIDU6IFggPSBDICogKDYgLSBoNik7ICAgcmdiWzJdICs9IFg7IHJnYlswXSArPSBDOyBicmVhaztcblx0fVxuXHRmb3IodmFyIGkgPSAwOyBpICE9IDM7ICsraSkgcmdiW2ldID0gTWF0aC5yb3VuZChyZ2JbaV0qMjU1KTtcblx0cmV0dXJuIHJnYjtcbn1cblxuLyogMTguOC4zIGJnQ29sb3IgdGludCBhbGdvcml0aG0gKi9cbmZ1bmN0aW9uIHJnYl90aW50KGhleCwgdGludCkge1xuXHRpZih0aW50ID09PSAwKSByZXR1cm4gaGV4O1xuXHR2YXIgaHNsID0gcmdiMkhTTChoZXgyUkdCKGhleCkpO1xuXHRpZiAodGludCA8IDApIGhzbFsyXSA9IGhzbFsyXSAqICgxICsgdGludCk7XG5cdGVsc2UgaHNsWzJdID0gMSAtICgxIC0gaHNsWzJdKSAqICgxIC0gdGludCk7XG5cdHJldHVybiByZ2IySGV4KGhzbDJSR0IoaHNsKSk7XG59XG5cbi8qIDE4LjMuMS4xMyB3aWR0aCBjYWxjdWxhdGlvbnMgKi9cbi8qIFtNUy1PSTI5NTAwXSAyLjEuNTk1IENvbHVtbiBXaWR0aCAmIEZvcm1hdHRpbmcgKi9cbnZhciBERUZfTURXID0gNiwgTUFYX01EVyA9IDE1LCBNSU5fTURXID0gMSwgTURXID0gREVGX01EVztcbmZ1bmN0aW9uIHdpZHRoMnB4KHdpZHRoKSB7IHJldHVybiBNYXRoLmZsb29yKCggd2lkdGggKyAoTWF0aC5yb3VuZCgxMjgvTURXKSkvMjU2ICkqIE1EVyApOyB9XG5mdW5jdGlvbiBweDJjaGFyKHB4KSB7IHJldHVybiAoTWF0aC5mbG9vcigocHggLSA1KS9NRFcgKiAxMDAgKyAwLjUpKS8xMDA7IH1cbmZ1bmN0aW9uIGNoYXIyd2lkdGgoY2hyKSB7IHJldHVybiAoTWF0aC5yb3VuZCgoY2hyICogTURXICsgNSkvTURXKjI1NikpLzI1NjsgfVxuLy9mdW5jdGlvbiBweDJjaGFyXyhweCkgeyByZXR1cm4gKCgocHggLSA1KS9NRFcgKiAxMDAgKyAwLjUpKS8xMDA7IH1cbi8vZnVuY3Rpb24gY2hhcjJ3aWR0aF8oY2hyKSB7IHJldHVybiAoKChjaHIgKiBNRFcgKyA1KS9NRFcqMjU2KSkvMjU2OyB9XG5mdW5jdGlvbiBjeWNsZV93aWR0aChjb2xsdykgeyByZXR1cm4gY2hhcjJ3aWR0aChweDJjaGFyKHdpZHRoMnB4KGNvbGx3KSkpOyB9XG4vKiBYTFNYL1hMU0IvWExTIHNwZWNpZnkgd2lkdGggaW4gdW5pdHMgb2YgTURXICovXG5mdW5jdGlvbiBmaW5kX21kd19jb2x3KGNvbGx3KSB7XG5cdHZhciBkZWx0YSA9IE1hdGguYWJzKGNvbGx3IC0gY3ljbGVfd2lkdGgoY29sbHcpKSwgX01EVyA9IE1EVztcblx0aWYoZGVsdGEgPiAwLjAwNSkgZm9yKE1EVz1NSU5fTURXOyBNRFc8TUFYX01EVzsgKytNRFcpIGlmKE1hdGguYWJzKGNvbGx3IC0gY3ljbGVfd2lkdGgoY29sbHcpKSA8PSBkZWx0YSkgeyBkZWx0YSA9IE1hdGguYWJzKGNvbGx3IC0gY3ljbGVfd2lkdGgoY29sbHcpKTsgX01EVyA9IE1EVzsgfVxuXHRNRFcgPSBfTURXO1xufVxuLyogWExNTCBzcGVjaWZpZXMgd2lkdGggaW4gdGVybXMgb2YgcGl4ZWxzICovXG4vKmZ1bmN0aW9uIGZpbmRfbWR3X3dweCh3cHgpIHtcblx0dmFyIGRlbHRhID0gSW5maW5pdHksIGd1ZXNzID0gMCwgX01EVyA9IE1JTl9NRFc7XG5cdGZvcihNRFc9TUlOX01EVzsgTURXPE1BWF9NRFc7ICsrTURXKSB7XG5cdFx0Z3Vlc3MgPSBjaGFyMndpZHRoXyhweDJjaGFyXyh3cHgpKSoyNTY7XG5cdFx0Z3Vlc3MgPSAoZ3Vlc3MpICUgMTtcblx0XHRpZihndWVzcyA+IDAuNSkgZ3Vlc3MtLTtcblx0XHRpZihNYXRoLmFicyhndWVzcykgPCBkZWx0YSkgeyBkZWx0YSA9IE1hdGguYWJzKGd1ZXNzKTsgX01EVyA9IE1EVzsgfVxuXHR9XG5cdE1EVyA9IF9NRFc7XG59Ki9cblxuZnVuY3Rpb24gcHJvY2Vzc19jb2woY29sbCkge1xuXHRpZihjb2xsLndpZHRoKSB7XG5cdFx0Y29sbC53cHggPSB3aWR0aDJweChjb2xsLndpZHRoKTtcblx0XHRjb2xsLndjaCA9IHB4MmNoYXIoY29sbC53cHgpO1xuXHRcdGNvbGwuTURXID0gTURXO1xuXHR9IGVsc2UgaWYoY29sbC53cHgpIHtcblx0XHRjb2xsLndjaCA9IHB4MmNoYXIoY29sbC53cHgpO1xuXHRcdGNvbGwud2lkdGggPSBjaGFyMndpZHRoKGNvbGwud2NoKTtcblx0XHRjb2xsLk1EVyA9IE1EVztcblx0fSBlbHNlIGlmKHR5cGVvZiBjb2xsLndjaCA9PSAnbnVtYmVyJykge1xuXHRcdGNvbGwud2lkdGggPSBjaGFyMndpZHRoKGNvbGwud2NoKTtcblx0XHRjb2xsLndweCA9IHdpZHRoMnB4KGNvbGwud2lkdGgpO1xuXHRcdGNvbGwuTURXID0gTURXO1xuXHR9XG5cdGlmKGNvbGwuY3VzdG9tV2lkdGgpIGRlbGV0ZSBjb2xsLmN1c3RvbVdpZHRoO1xufVxuXG52YXIgREVGX1BQSSA9IDk2LCBQUEkgPSBERUZfUFBJO1xuZnVuY3Rpb24gcHgycHQocHgpIHsgcmV0dXJuIHB4ICogOTYgLyBQUEk7IH1cbmZ1bmN0aW9uIHB0MnB4KHB0KSB7IHJldHVybiBwdCAqIFBQSSAvIDk2OyB9XG5cbi8qIFtNUy1FWFNQWE1MM10gMi40LjU0IFNUX2VubVBhdHRlcm4gKi9cbnZhciBYTE1MUGF0dGVyblR5cGVNYXAgPSB7XG5cdFwiTm9uZVwiOiBcIm5vbmVcIixcblx0XCJTb2xpZFwiOiBcInNvbGlkXCIsXG5cdFwiR3JheTUwXCI6IFwibWVkaXVtR3JheVwiLFxuXHRcIkdyYXk3NVwiOiBcImRhcmtHcmF5XCIsXG5cdFwiR3JheTI1XCI6IFwibGlnaHRHcmF5XCIsXG5cdFwiSG9yelN0cmlwZVwiOiBcImRhcmtIb3Jpem9udGFsXCIsXG5cdFwiVmVydFN0cmlwZVwiOiBcImRhcmtWZXJ0aWNhbFwiLFxuXHRcIlJldmVyc2VEaWFnU3RyaXBlXCI6IFwiZGFya0Rvd25cIixcblx0XCJEaWFnU3RyaXBlXCI6IFwiZGFya1VwXCIsXG5cdFwiRGlhZ0Nyb3NzXCI6IFwiZGFya0dyaWRcIixcblx0XCJUaGlja0RpYWdDcm9zc1wiOiBcImRhcmtUcmVsbGlzXCIsXG5cdFwiVGhpbkhvcnpTdHJpcGVcIjogXCJsaWdodEhvcml6b250YWxcIixcblx0XCJUaGluVmVydFN0cmlwZVwiOiBcImxpZ2h0VmVydGljYWxcIixcblx0XCJUaGluUmV2ZXJzZURpYWdTdHJpcGVcIjogXCJsaWdodERvd25cIixcblx0XCJUaGluSG9yekNyb3NzXCI6IFwibGlnaHRHcmlkXCJcbn07XG5cbi8qIDE4LjguNSBib3JkZXJzIENUX0JvcmRlcnMgKi9cbmZ1bmN0aW9uIHBhcnNlX2JvcmRlcnModCwgc3R5bGVzLCB0aGVtZXMsIG9wdHMpIHtcblx0c3R5bGVzLkJvcmRlcnMgPSBbXTtcblx0dmFyIGJvcmRlciA9IHt9LyosIHN1Yl9ib3JkZXIgPSB7fSovO1xuXHR0WzBdLm1hdGNoKHRhZ3JlZ2V4KS5mb3JFYWNoKGZ1bmN0aW9uKHgpIHtcblx0XHR2YXIgeSA9IHBhcnNleG1sdGFnKHgpO1xuXHRcdHN3aXRjaCAoeVswXSkge1xuXHRcdFx0Y2FzZSAnPGJvcmRlcnMnOiBjYXNlICc8Ym9yZGVycz4nOiBjYXNlICc8L2JvcmRlcnM+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguNCBib3JkZXIgQ1RfQm9yZGVyICovXG5cdFx0XHRjYXNlICc8Ym9yZGVyJzogY2FzZSAnPGJvcmRlcj4nOiBjYXNlICc8Ym9yZGVyLz4nOlxuXHRcdFx0XHRib3JkZXIgPSB7fTtcblx0XHRcdFx0aWYgKHkuZGlhZ29uYWxVcCkgeyBib3JkZXIuZGlhZ29uYWxVcCA9IHkuZGlhZ29uYWxVcDsgfVxuXHRcdFx0XHRpZiAoeS5kaWFnb25hbERvd24pIHsgYm9yZGVyLmRpYWdvbmFsRG93biA9IHkuZGlhZ29uYWxEb3duOyB9XG5cdFx0XHRcdHN0eWxlcy5Cb3JkZXJzLnB1c2goYm9yZGVyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICc8L2JvcmRlcj4nOiBicmVhaztcblxuXHRcdFx0Lyogbm90ZTogbm90IGluIHNwZWMsIGFwcGVhcnMgdG8gYmUgQ1RfQm9yZGVyUHIgKi9cblx0XHRcdGNhc2UgJzxsZWZ0Lz4nOiBicmVhaztcblx0XHRcdGNhc2UgJzxsZWZ0JzogY2FzZSAnPGxlZnQ+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8L2xlZnQ+JzogYnJlYWs7XG5cblx0XHRcdC8qIG5vdGU6IG5vdCBpbiBzcGVjLCBhcHBlYXJzIHRvIGJlIENUX0JvcmRlclByICovXG5cdFx0XHRjYXNlICc8cmlnaHQvPic6IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPHJpZ2h0JzogY2FzZSAnPHJpZ2h0Pic6IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPC9yaWdodD4nOiBicmVhaztcblxuXHRcdFx0LyogMTguOC40MyB0b3AgQ1RfQm9yZGVyUHIgKi9cblx0XHRcdGNhc2UgJzx0b3AvPic6IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPHRvcCc6IGNhc2UgJzx0b3A+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8L3RvcD4nOiBicmVhaztcblxuXHRcdFx0LyogMTguOC42IGJvdHRvbSBDVF9Cb3JkZXJQciAqL1xuXHRcdFx0Y2FzZSAnPGJvdHRvbS8+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8Ym90dG9tJzogY2FzZSAnPGJvdHRvbT4nOiBicmVhaztcblx0XHRcdGNhc2UgJzwvYm90dG9tPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC44LjEzIGRpYWdvbmFsIENUX0JvcmRlclByICovXG5cdFx0XHRjYXNlICc8ZGlhZ29uYWwnOiBjYXNlICc8ZGlhZ29uYWw+JzogY2FzZSAnPGRpYWdvbmFsLz4nOiBicmVhaztcblx0XHRcdGNhc2UgJzwvZGlhZ29uYWw+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMjUgaG9yaXpvbnRhbCBDVF9Cb3JkZXJQciAqL1xuXHRcdFx0Y2FzZSAnPGhvcml6b250YWwnOiBjYXNlICc8aG9yaXpvbnRhbD4nOiBjYXNlICc8aG9yaXpvbnRhbC8+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8L2hvcml6b250YWw+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguNDQgdmVydGljYWwgQ1RfQm9yZGVyUHIgKi9cblx0XHRcdGNhc2UgJzx2ZXJ0aWNhbCc6IGNhc2UgJzx2ZXJ0aWNhbD4nOiBjYXNlICc8dmVydGljYWwvPic6IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPC92ZXJ0aWNhbD4nOiBicmVhaztcblxuXHRcdFx0LyogMTguOC4zNyBzdGFydCBDVF9Cb3JkZXJQciAqL1xuXHRcdFx0Y2FzZSAnPHN0YXJ0JzogY2FzZSAnPHN0YXJ0Pic6IGNhc2UgJzxzdGFydC8+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8L3N0YXJ0Pic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC44LjE2IGVuZCBDVF9Cb3JkZXJQciAqL1xuXHRcdFx0Y2FzZSAnPGVuZCc6IGNhc2UgJzxlbmQ+JzogY2FzZSAnPGVuZC8+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8L2VuZD4nOiBicmVhaztcblxuXHRcdFx0LyogMTguOC4/IGNvbG9yIENUX0NvbG9yICovXG5cdFx0XHRjYXNlICc8Y29sb3InOiBjYXNlICc8Y29sb3I+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8Y29sb3IvPic6IGNhc2UgJzwvY29sb3I+JzogYnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6IGlmKG9wdHMgJiYgb3B0cy5XVEYpIHRocm93IG5ldyBFcnJvcigndW5yZWNvZ25pemVkICcgKyB5WzBdICsgJyBpbiBib3JkZXJzJyk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyogMTguOC4yMSBmaWxscyBDVF9GaWxscyAqL1xuZnVuY3Rpb24gcGFyc2VfZmlsbHModCwgc3R5bGVzLCB0aGVtZXMsIG9wdHMpIHtcblx0c3R5bGVzLkZpbGxzID0gW107XG5cdHZhciBmaWxsID0ge307XG5cdHRbMF0ubWF0Y2godGFncmVnZXgpLmZvckVhY2goZnVuY3Rpb24oeCkge1xuXHRcdHZhciB5ID0gcGFyc2V4bWx0YWcoeCk7XG5cdFx0c3dpdGNoKHlbMF0pIHtcblx0XHRcdGNhc2UgJzxmaWxscyc6IGNhc2UgJzxmaWxscz4nOiBjYXNlICc8L2ZpbGxzPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC44LjIwIGZpbGwgQ1RfRmlsbCAqL1xuXHRcdFx0Y2FzZSAnPGZpbGw+JzogY2FzZSAnPGZpbGwnOiBjYXNlICc8ZmlsbC8+Jzpcblx0XHRcdFx0ZmlsbCA9IHt9OyBzdHlsZXMuRmlsbHMucHVzaChmaWxsKTsgYnJlYWs7XG5cdFx0XHRjYXNlICc8L2ZpbGw+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMjQgZ3JhZGllbnRGaWxsIENUX0dyYWRpZW50RmlsbCAqL1xuXHRcdFx0Y2FzZSAnPGdyYWRpZW50RmlsbD4nOiBicmVhaztcblx0XHRcdGNhc2UgJzxncmFkaWVudEZpbGwnOlxuXHRcdFx0Y2FzZSAnPC9ncmFkaWVudEZpbGw+Jzogc3R5bGVzLkZpbGxzLnB1c2goZmlsbCk7IGZpbGwgPSB7fTsgYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMzIgcGF0dGVybkZpbGwgQ1RfUGF0dGVybkZpbGwgKi9cblx0XHRcdGNhc2UgJzxwYXR0ZXJuRmlsbCc6IGNhc2UgJzxwYXR0ZXJuRmlsbD4nOlxuXHRcdFx0XHRpZih5LnBhdHRlcm5UeXBlKSBmaWxsLnBhdHRlcm5UeXBlID0geS5wYXR0ZXJuVHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICc8cGF0dGVybkZpbGwvPic6IGNhc2UgJzwvcGF0dGVybkZpbGw+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMyBiZ0NvbG9yIENUX0NvbG9yICovXG5cdFx0XHRjYXNlICc8YmdDb2xvcic6XG5cdFx0XHRcdGlmKCFmaWxsLmJnQ29sb3IpIGZpbGwuYmdDb2xvciA9IHt9O1xuXHRcdFx0XHRpZih5LmluZGV4ZWQpIGZpbGwuYmdDb2xvci5pbmRleGVkID0gcGFyc2VJbnQoeS5pbmRleGVkLCAxMCk7XG5cdFx0XHRcdGlmKHkudGhlbWUpIGZpbGwuYmdDb2xvci50aGVtZSA9IHBhcnNlSW50KHkudGhlbWUsIDEwKTtcblx0XHRcdFx0aWYoeS50aW50KSBmaWxsLmJnQ29sb3IudGludCA9IHBhcnNlRmxvYXQoeS50aW50KTtcblx0XHRcdFx0LyogRXhjZWwgdXNlcyBBUkdCIHN0cmluZ3MgKi9cblx0XHRcdFx0aWYoeS5yZ2IpIGZpbGwuYmdDb2xvci5yZ2IgPSB5LnJnYi5zbGljZSgtNik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnPGJnQ29sb3IvPic6IGNhc2UgJzwvYmdDb2xvcj4nOiBicmVhaztcblxuXHRcdFx0LyogMTguOC4xOSBmZ0NvbG9yIENUX0NvbG9yICovXG5cdFx0XHRjYXNlICc8ZmdDb2xvcic6XG5cdFx0XHRcdGlmKCFmaWxsLmZnQ29sb3IpIGZpbGwuZmdDb2xvciA9IHt9O1xuXHRcdFx0XHRpZih5LnRoZW1lKSBmaWxsLmZnQ29sb3IudGhlbWUgPSBwYXJzZUludCh5LnRoZW1lLCAxMCk7XG5cdFx0XHRcdGlmKHkudGludCkgZmlsbC5mZ0NvbG9yLnRpbnQgPSBwYXJzZUZsb2F0KHkudGludCk7XG5cdFx0XHRcdC8qIEV4Y2VsIHVzZXMgQVJHQiBzdHJpbmdzICovXG5cdFx0XHRcdGlmKHkucmdiKSBmaWxsLmZnQ29sb3IucmdiID0geS5yZ2Iuc2xpY2UoLTYpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJzxmZ0NvbG9yLz4nOiBjYXNlICc8L2ZnQ29sb3I+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMzggc3RvcCBDVF9HcmFkaWVudFN0b3AgKi9cblx0XHRcdGNhc2UgJzxzdG9wJzogY2FzZSAnPHN0b3AvPic6IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPC9zdG9wPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC44Lj8gY29sb3IgQ1RfQ29sb3IgKi9cblx0XHRcdGNhc2UgJzxjb2xvcic6IGNhc2UgJzxjb2xvci8+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8L2NvbG9yPic6IGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OiBpZihvcHRzICYmIG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoJ3VucmVjb2duaXplZCAnICsgeVswXSArICcgaW4gZmlsbHMnKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKiAxOC44LjIzIGZvbnRzIENUX0ZvbnRzICovXG5mdW5jdGlvbiBwYXJzZV9mb250cyh0LCBzdHlsZXMsIHRoZW1lcywgb3B0cykge1xuXHRzdHlsZXMuRm9udHMgPSBbXTtcblx0dmFyIGZvbnQgPSB7fTtcblx0dFswXS5tYXRjaCh0YWdyZWdleCkuZm9yRWFjaChmdW5jdGlvbih4KSB7XG5cdFx0dmFyIHkgPSBwYXJzZXhtbHRhZyh4KTtcblx0XHRzd2l0Y2ggKHlbMF0pIHtcblx0XHRcdGNhc2UgJzxmb250cyc6IGNhc2UgJzxmb250cz4nOiBjYXNlICc8L2ZvbnRzPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC44LjIyIGZvbnQgQ1RfRm9udCAqL1xuXHRcdFx0Y2FzZSAnPGZvbnQnOiBjYXNlICc8Zm9udD4nOiBicmVhaztcblx0XHRcdGNhc2UgJzwvZm9udD4nOiBjYXNlICc8Zm9udC8+Jzpcblx0XHRcdFx0c3R5bGVzLkZvbnRzLnB1c2goZm9udCk7XG5cdFx0XHRcdGZvbnQgPSB7fTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMjkgbmFtZSBDVF9Gb250TmFtZSAqL1xuXHRcdFx0Y2FzZSAnPG5hbWUnOiBpZih5LnZhbCkgZm9udC5uYW1lID0geS52YWw7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPG5hbWUvPic6IGNhc2UgJzwvbmFtZT4nOiBicmVhaztcblxuXHRcdFx0LyogMTguOC4yICBiIENUX0Jvb2xlYW5Qcm9wZXJ0eSAqL1xuXHRcdFx0Y2FzZSAnPGInOiBmb250LmJvbGQgPSB5LnZhbCA/IHBhcnNleG1sYm9vbCh5LnZhbCkgOiAxOyBicmVhaztcblx0XHRcdGNhc2UgJzxiLz4nOiBmb250LmJvbGQgPSAxOyBicmVhaztcblxuXHRcdFx0LyogMTguOC4yNiBpIENUX0Jvb2xlYW5Qcm9wZXJ0eSAqL1xuXHRcdFx0Y2FzZSAnPGknOiBmb250Lml0YWxpYyA9IHkudmFsID8gcGFyc2V4bWxib29sKHkudmFsKSA6IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPGkvPic6IGZvbnQuaXRhbGljID0gMTsgYnJlYWs7XG5cblx0XHRcdC8qIDE4LjQuMTMgdSBDVF9VbmRlcmxpbmVQcm9wZXJ0eSAqL1xuXHRcdFx0Y2FzZSAnPHUnOlxuXHRcdFx0XHRzd2l0Y2goeS52YWwpIHtcblx0XHRcdFx0XHRjYXNlIFwibm9uZVwiOiBmb250LnVuZGVybGluZSA9IDB4MDA7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJzaW5nbGVcIjogZm9udC51bmRlcmxpbmUgPSAweDAxOyBicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiZG91YmxlXCI6IGZvbnQudW5kZXJsaW5lID0gMHgwMjsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInNpbmdsZUFjY291bnRpbmdcIjogZm9udC51bmRlcmxpbmUgPSAweDIxOyBicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiZG91YmxlQWNjb3VudGluZ1wiOiBmb250LnVuZGVybGluZSA9IDB4MjI7IGJyZWFrO1xuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPHUvPic6IGZvbnQudW5kZXJsaW5lID0gMTsgYnJlYWs7XG5cblx0XHRcdC8qIDE4LjQuMTAgc3RyaWtlIENUX0Jvb2xlYW5Qcm9wZXJ0eSAqL1xuXHRcdFx0Y2FzZSAnPHN0cmlrZSc6IGZvbnQuc3RyaWtlID0geS52YWwgPyBwYXJzZXhtbGJvb2woeS52YWwpIDogMTsgYnJlYWs7XG5cdFx0XHRjYXNlICc8c3RyaWtlLz4nOiBmb250LnN0cmlrZSA9IDE7IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC40LjIgIG91dGxpbmUgQ1RfQm9vbGVhblByb3BlcnR5ICovXG5cdFx0XHRjYXNlICc8b3V0bGluZSc6IGZvbnQub3V0bGluZSA9IHkudmFsID8gcGFyc2V4bWxib29sKHkudmFsKSA6IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPG91dGxpbmUvPic6IGZvbnQub3V0bGluZSA9IDE7IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC44LjM2IHNoYWRvdyBDVF9Cb29sZWFuUHJvcGVydHkgKi9cblx0XHRcdGNhc2UgJzxzaGFkb3cnOiBmb250LnNoYWRvdyA9IHkudmFsID8gcGFyc2V4bWxib29sKHkudmFsKSA6IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPHNoYWRvdy8+JzogZm9udC5zaGFkb3cgPSAxOyBicmVhaztcblxuXHRcdFx0LyogMTguOC4xMiBjb25kZW5zZSBDVF9Cb29sZWFuUHJvcGVydHkgKi9cblx0XHRcdGNhc2UgJzxjb25kZW5zZSc6IGZvbnQuY29uZGVuc2UgPSB5LnZhbCA/IHBhcnNleG1sYm9vbCh5LnZhbCkgOiAxOyBicmVhaztcblx0XHRcdGNhc2UgJzxjb25kZW5zZS8+JzogZm9udC5jb25kZW5zZSA9IDE7IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC44LjE3IGV4dGVuZCBDVF9Cb29sZWFuUHJvcGVydHkgKi9cblx0XHRcdGNhc2UgJzxleHRlbmQnOiBmb250LmV4dGVuZCA9IHkudmFsID8gcGFyc2V4bWxib29sKHkudmFsKSA6IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPGV4dGVuZC8+JzogZm9udC5leHRlbmQgPSAxOyBicmVhaztcblxuXHRcdFx0LyogMTguNC4xMSBzeiBDVF9Gb250U2l6ZSAqL1xuXHRcdFx0Y2FzZSAnPHN6JzogaWYoeS52YWwpIGZvbnQuc3ogPSAreS52YWw7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPHN6Lz4nOiBjYXNlICc8L3N6Pic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC40LjE0IHZlcnRBbGlnbiBDVF9WZXJ0aWNhbEFsaWduRm9udFByb3BlcnR5ICovXG5cdFx0XHRjYXNlICc8dmVydEFsaWduJzogaWYoeS52YWwpIGZvbnQudmVydEFsaWduID0geS52YWw7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPHZlcnRBbGlnbi8+JzogY2FzZSAnPC92ZXJ0QWxpZ24+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMTggZmFtaWx5IENUX0ZvbnRGYW1pbHkgKi9cblx0XHRcdGNhc2UgJzxmYW1pbHknOiBpZih5LnZhbCkgZm9udC5mYW1pbHkgPSBwYXJzZUludCh5LnZhbCwxMCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPGZhbWlseS8+JzogY2FzZSAnPC9mYW1pbHk+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMzUgc2NoZW1lIENUX0ZvbnRTY2hlbWUgKi9cblx0XHRcdGNhc2UgJzxzY2hlbWUnOiBpZih5LnZhbCkgZm9udC5zY2hlbWUgPSB5LnZhbDsgYnJlYWs7XG5cdFx0XHRjYXNlICc8c2NoZW1lLz4nOiBjYXNlICc8L3NjaGVtZT4nOiBicmVhaztcblxuXHRcdFx0LyogMTguNC4xIGNoYXJzZXQgQ1RfSW50UHJvcGVydHkgKi9cblx0XHRcdGNhc2UgJzxjaGFyc2V0Jzpcblx0XHRcdFx0aWYoeS52YWwgPT0gJzEnKSBicmVhaztcblx0XHRcdFx0eS5jb2RlcGFnZSA9IENTMkNQW3BhcnNlSW50KHkudmFsLCAxMCldO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0LyogMTguPy4/IGNvbG9yIENUX0NvbG9yICovXG5cdFx0XHRjYXNlICc8Y29sb3InOlxuXHRcdFx0XHRpZighZm9udC5jb2xvcikgZm9udC5jb2xvciA9IHt9O1xuXHRcdFx0XHRpZih5LmF1dG8pIGZvbnQuY29sb3IuYXV0byA9IHBhcnNleG1sYm9vbCh5LmF1dG8pO1xuXG5cdFx0XHRcdGlmKHkucmdiKSBmb250LmNvbG9yLnJnYiA9IHkucmdiLnNsaWNlKC02KTtcblx0XHRcdFx0ZWxzZSBpZih5LmluZGV4ZWQpIHtcblx0XHRcdFx0XHRmb250LmNvbG9yLmluZGV4ID0gcGFyc2VJbnQoeS5pbmRleGVkLCAxMCk7XG5cdFx0XHRcdFx0dmFyIGljdiA9IFhMU0ljdltmb250LmNvbG9yLmluZGV4XTtcblx0XHRcdFx0XHRpZihmb250LmNvbG9yLmluZGV4ID09IDgxKSBpY3YgPSBYTFNJY3ZbMV07XG5cdFx0XHRcdFx0aWYoIWljdikgdGhyb3cgbmV3IEVycm9yKHgpO1xuXHRcdFx0XHRcdGZvbnQuY29sb3IucmdiID0gaWN2WzBdLnRvU3RyaW5nKDE2KSArIGljdlsxXS50b1N0cmluZygxNikgKyBpY3ZbMl0udG9TdHJpbmcoMTYpO1xuXHRcdFx0XHR9IGVsc2UgaWYoeS50aGVtZSkge1xuXHRcdFx0XHRcdGZvbnQuY29sb3IudGhlbWUgPSBwYXJzZUludCh5LnRoZW1lLCAxMCk7XG5cdFx0XHRcdFx0aWYoeS50aW50KSBmb250LmNvbG9yLnRpbnQgPSBwYXJzZUZsb2F0KHkudGludCk7XG5cdFx0XHRcdFx0aWYoeS50aGVtZSAmJiB0aGVtZXMudGhlbWVFbGVtZW50cyAmJiB0aGVtZXMudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUpIHtcblx0XHRcdFx0XHRcdGZvbnQuY29sb3IucmdiID0gcmdiX3RpbnQodGhlbWVzLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2ZvbnQuY29sb3IudGhlbWVdLnJnYiwgZm9udC5jb2xvci50aW50IHx8IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnPGNvbG9yLz4nOiBjYXNlICc8L2NvbG9yPic6IGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OiBpZihvcHRzICYmIG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoJ3VucmVjb2duaXplZCAnICsgeVswXSArICcgaW4gZm9udHMnKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKiAxOC44LjMxIG51bUZtdHMgQ1RfTnVtRm10cyAqL1xuZnVuY3Rpb24gcGFyc2VfbnVtRm10cyh0LCBzdHlsZXMsIG9wdHMpIHtcblx0c3R5bGVzLk51bWJlckZtdCA9IFtdO1xuXHR2YXIgay8qQXJyYXk8bnVtYmVyPiovID0gKGtleXMoU1NGLl90YWJsZSkpO1xuXHRmb3IodmFyIGk9MDsgaSA8IGsubGVuZ3RoOyArK2kpIHN0eWxlcy5OdW1iZXJGbXRba1tpXV0gPSBTU0YuX3RhYmxlW2tbaV1dO1xuXHR2YXIgbSA9IHRbMF0ubWF0Y2godGFncmVnZXgpO1xuXHRpZighbSkgcmV0dXJuO1xuXHRmb3IoaT0wOyBpIDwgbS5sZW5ndGg7ICsraSkge1xuXHRcdHZhciB5ID0gcGFyc2V4bWx0YWcobVtpXSk7XG5cdFx0c3dpdGNoKHlbMF0pIHtcblx0XHRcdGNhc2UgJzxudW1GbXRzJzogY2FzZSAnPC9udW1GbXRzPic6IGNhc2UgJzxudW1GbXRzLz4nOiBjYXNlICc8bnVtRm10cz4nOiBicmVhaztcblx0XHRcdGNhc2UgJzxudW1GbXQnOiB7XG5cdFx0XHRcdHZhciBmPXVuZXNjYXBleG1sKHV0ZjhyZWFkKHkuZm9ybWF0Q29kZSkpLCBqPXBhcnNlSW50KHkubnVtRm10SWQsMTApO1xuXHRcdFx0XHRzdHlsZXMuTnVtYmVyRm10W2pdID0gZjtcblx0XHRcdFx0aWYoaj4wKSB7XG5cdFx0XHRcdFx0aWYoaiA+IDB4MTg4KSB7XG5cdFx0XHRcdFx0XHRmb3IoaiA9IDB4MTg4OyBqID4gMHgzYzsgLS1qKSBpZihzdHlsZXMuTnVtYmVyRm10W2pdID09IG51bGwpIGJyZWFrO1xuXHRcdFx0XHRcdFx0c3R5bGVzLk51bWJlckZtdFtqXSA9IGY7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFNTRi5sb2FkKGYsaik7XG5cdFx0XHRcdH1cblx0XHRcdH0gYnJlYWs7XG5cdFx0XHRjYXNlICc8L251bUZtdD4nOiBicmVhaztcblx0XHRcdGRlZmF1bHQ6IGlmKG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoJ3VucmVjb2duaXplZCAnICsgeVswXSArICcgaW4gbnVtRm10cycpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiB3cml0ZV9udW1GbXRzKE5GKSB7XG5cdHZhciBvID0gW1wiPG51bUZtdHM+XCJdO1xuXHRbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFsvKjYzKi81MCwvKjY2XSxbMTY0LCovMzkyXV0uZm9yRWFjaChmdW5jdGlvbihyKSB7XG5cdFx0Zm9yKHZhciBpID0gclswXTsgaSA8PSByWzFdOyArK2kpIGlmKE5GW2ldICE9IG51bGwpIG9bby5sZW5ndGhdID0gKHdyaXRleHRhZygnbnVtRm10JyxudWxsLHtudW1GbXRJZDppLGZvcm1hdENvZGU6ZXNjYXBleG1sKE5GW2ldKX0pKTtcblx0fSk7XG5cdGlmKG8ubGVuZ3RoID09PSAxKSByZXR1cm4gXCJcIjtcblx0b1tvLmxlbmd0aF0gPSAoXCI8L251bUZtdHM+XCIpO1xuXHRvWzBdID0gd3JpdGV4dGFnKCdudW1GbXRzJywgbnVsbCwgeyBjb3VudDpvLmxlbmd0aC0yIH0pLnJlcGxhY2UoXCIvPlwiLCBcIj5cIik7XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG5cbi8qIDE4LjguMTAgY2VsbFhmcyBDVF9DZWxsWGZzICovXG52YXIgY2VsbFhGX3VpbnQgPSBbIFwibnVtRm10SWRcIiwgXCJmaWxsSWRcIiwgXCJmb250SWRcIiwgXCJib3JkZXJJZFwiLCBcInhmSWRcIiBdO1xudmFyIGNlbGxYRl9ib29sID0gWyBcImFwcGx5QWxpZ25tZW50XCIsIFwiYXBwbHlCb3JkZXJcIiwgXCJhcHBseUZpbGxcIiwgXCJhcHBseUZvbnRcIiwgXCJhcHBseU51bWJlckZvcm1hdFwiLCBcImFwcGx5UHJvdGVjdGlvblwiLCBcInBpdm90QnV0dG9uXCIsIFwicXVvdGVQcmVmaXhcIiBdO1xuZnVuY3Rpb24gcGFyc2VfY2VsbFhmcyh0LCBzdHlsZXMsIG9wdHMpIHtcblx0c3R5bGVzLkNlbGxYZiA9IFtdO1xuXHR2YXIgeGY7XG5cdHRbMF0ubWF0Y2godGFncmVnZXgpLmZvckVhY2goZnVuY3Rpb24oeCkge1xuXHRcdHZhciB5ID0gcGFyc2V4bWx0YWcoeCksIGkgPSAwO1xuXHRcdHN3aXRjaCh5WzBdKSB7XG5cdFx0XHRjYXNlICc8Y2VsbFhmcyc6IGNhc2UgJzxjZWxsWGZzPic6IGNhc2UgJzxjZWxsWGZzLz4nOiBjYXNlICc8L2NlbGxYZnM+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguNDUgeGYgQ1RfWGYgKi9cblx0XHRcdGNhc2UgJzx4Zic6IGNhc2UgJzx4Zi8+Jzpcblx0XHRcdFx0eGYgPSB5O1xuXHRcdFx0XHRkZWxldGUgeGZbMF07XG5cdFx0XHRcdGZvcihpID0gMDsgaSA8IGNlbGxYRl91aW50Lmxlbmd0aDsgKytpKSBpZih4ZltjZWxsWEZfdWludFtpXV0pXG5cdFx0XHRcdFx0eGZbY2VsbFhGX3VpbnRbaV1dID0gcGFyc2VJbnQoeGZbY2VsbFhGX3VpbnRbaV1dLCAxMCk7XG5cdFx0XHRcdGZvcihpID0gMDsgaSA8IGNlbGxYRl9ib29sLmxlbmd0aDsgKytpKSBpZih4ZltjZWxsWEZfYm9vbFtpXV0pXG5cdFx0XHRcdFx0eGZbY2VsbFhGX2Jvb2xbaV1dID0gcGFyc2V4bWxib29sKHhmW2NlbGxYRl9ib29sW2ldXSk7XG5cdFx0XHRcdGlmKHhmLm51bUZtdElkID4gMHgxODgpIHtcblx0XHRcdFx0XHRmb3IoaSA9IDB4MTg4OyBpID4gMHgzYzsgLS1pKSBpZihzdHlsZXMuTnVtYmVyRm10W3hmLm51bUZtdElkXSA9PSBzdHlsZXMuTnVtYmVyRm10W2ldKSB7IHhmLm51bUZtdElkID0gaTsgYnJlYWs7IH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZXMuQ2VsbFhmLnB1c2goeGYpOyBicmVhaztcblx0XHRcdGNhc2UgJzwveGY+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMSBhbGlnbm1lbnQgQ1RfQ2VsbEFsaWdubWVudCAqL1xuXHRcdFx0Y2FzZSAnPGFsaWdubWVudCc6IGNhc2UgJzxhbGlnbm1lbnQvPic6XG5cdFx0XHRcdHZhciBhbGlnbm1lbnQgPSB7fTtcblx0XHRcdFx0aWYoeS52ZXJ0aWNhbCkgYWxpZ25tZW50LnZlcnRpY2FsID0geS52ZXJ0aWNhbDtcblx0XHRcdFx0aWYoeS5ob3Jpem9udGFsKSBhbGlnbm1lbnQuaG9yaXpvbnRhbCA9IHkuaG9yaXpvbnRhbDtcblx0XHRcdFx0aWYoeS50ZXh0Um90YXRpb24gIT0gbnVsbCkgYWxpZ25tZW50LnRleHRSb3RhdGlvbiA9IHkudGV4dFJvdGF0aW9uO1xuXHRcdFx0XHRpZih5LmluZGVudCkgYWxpZ25tZW50LmluZGVudCA9IHkuaW5kZW50O1xuXHRcdFx0XHRpZih5LndyYXBUZXh0KSBhbGlnbm1lbnQud3JhcFRleHQgPSB5LndyYXBUZXh0O1xuXHRcdFx0XHR4Zi5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnPC9hbGlnbm1lbnQ+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjguMzMgcHJvdGVjdGlvbiBDVF9DZWxsUHJvdGVjdGlvbiAqL1xuXHRcdFx0Y2FzZSAnPHByb3RlY3Rpb24nOiBjYXNlICc8L3Byb3RlY3Rpb24+JzogY2FzZSAnPHByb3RlY3Rpb24vPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC4yLjEwIGV4dExzdCBDVF9FeHRlbnNpb25MaXN0ID8gKi9cblx0XHRcdGNhc2UgJzxleHRMc3QnOiBjYXNlICc8L2V4dExzdD4nOiBicmVhaztcblx0XHRcdGNhc2UgJzxleHQnOiBicmVhaztcblx0XHRcdGRlZmF1bHQ6IGlmKG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoJ3VucmVjb2duaXplZCAnICsgeVswXSArICcgaW4gY2VsbFhmcycpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX2NlbGxYZnMoY2VsbFhmcykge1xuXHR2YXIgbyA9IFtdO1xuXHRvW28ubGVuZ3RoXSA9ICh3cml0ZXh0YWcoJ2NlbGxYZnMnLG51bGwpKTtcblx0Y2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHsgb1tvLmxlbmd0aF0gPSAod3JpdGV4dGFnKCd4ZicsIG51bGwsIGMpKTsgfSk7XG5cdG9bby5sZW5ndGhdID0gKFwiPC9jZWxsWGZzPlwiKTtcblx0aWYoby5sZW5ndGggPT09IDIpIHJldHVybiBcIlwiO1xuXHRvWzBdID0gd3JpdGV4dGFnKCdjZWxsWGZzJyxudWxsLCB7Y291bnQ6by5sZW5ndGgtMn0pLnJlcGxhY2UoXCIvPlwiLFwiPlwiKTtcblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cblxuLyogMTguOCBTdHlsZXMgQ1RfU3R5bGVzaGVldCovXG52YXIgcGFyc2Vfc3R5X3htbD0gKGZ1bmN0aW9uIG1ha2VfcHN0eXgoKSB7XG52YXIgbnVtRm10UmVnZXggPSAvPG51bUZtdHMoW14+XSopPltcXFNcXHNdKj88XFwvbnVtRm10cz4vO1xudmFyIGNlbGxYZlJlZ2V4ID0gLzxjZWxsWGZzKFtePl0qKT5bXFxTXFxzXSo/PFxcL2NlbGxYZnM+LztcbnZhciBmaWxsc1JlZ2V4ID0gLzxmaWxscyhbXj5dKik+W1xcU1xcc10qPzxcXC9maWxscz4vO1xudmFyIGZvbnRzUmVnZXggPSAvPGZvbnRzKFtePl0qKT5bXFxTXFxzXSo/PFxcL2ZvbnRzPi87XG52YXIgYm9yZGVyc1JlZ2V4ID0gLzxib3JkZXJzKFtePl0qKT5bXFxTXFxzXSo/PFxcL2JvcmRlcnM+LztcblxucmV0dXJuIGZ1bmN0aW9uIHBhcnNlX3N0eV94bWwoZGF0YSwgdGhlbWVzLCBvcHRzKSB7XG5cdHZhciBzdHlsZXMgPSB7fTtcblx0aWYoIWRhdGEpIHJldHVybiBzdHlsZXM7XG5cdGRhdGEgPSBkYXRhLnJlcGxhY2UoLzwhLS0oW1xcc1xcU10qPyktLT4vbWcsXCJcIikucmVwbGFjZSgvPCFET0NUWVBFW15cXFtdKlxcW1teXFxdXSpcXF0+L2dtLFwiXCIpO1xuXHQvKiAxOC44LjM5IHN0eWxlU2hlZXQgQ1RfU3R5bGVzaGVldCAqL1xuXHR2YXIgdDtcblxuXHQvKiAxOC44LjMxIG51bUZtdHMgQ1RfTnVtRm10cyA/ICovXG5cdGlmKCh0PWRhdGEubWF0Y2gobnVtRm10UmVnZXgpKSkgcGFyc2VfbnVtRm10cyh0LCBzdHlsZXMsIG9wdHMpO1xuXG5cdC8qIDE4LjguMjMgZm9udHMgQ1RfRm9udHMgPyAqL1xuXHRpZigodD1kYXRhLm1hdGNoKGZvbnRzUmVnZXgpKSkgcGFyc2VfZm9udHModCwgc3R5bGVzLCB0aGVtZXMsIG9wdHMpO1xuXG5cdC8qIDE4LjguMjEgZmlsbHMgQ1RfRmlsbHMgPyAqL1xuXHRpZigodD1kYXRhLm1hdGNoKGZpbGxzUmVnZXgpKSkgcGFyc2VfZmlsbHModCwgc3R5bGVzLCB0aGVtZXMsIG9wdHMpO1xuXG5cdC8qIDE4LjguNSAgYm9yZGVycyBDVF9Cb3JkZXJzID8gKi9cblx0aWYoKHQ9ZGF0YS5tYXRjaChib3JkZXJzUmVnZXgpKSkgcGFyc2VfYm9yZGVycyh0LCBzdHlsZXMsIHRoZW1lcywgb3B0cyk7XG5cblx0LyogMTguOC45ICBjZWxsU3R5bGVYZnMgQ1RfQ2VsbFN0eWxlWGZzID8gKi9cblxuXHQvKiAxOC44LjEwIGNlbGxYZnMgQ1RfQ2VsbFhmcyA/ICovXG5cdGlmKCh0PWRhdGEubWF0Y2goY2VsbFhmUmVnZXgpKSkgcGFyc2VfY2VsbFhmcyh0LCBzdHlsZXMsIG9wdHMpO1xuXG5cdC8qIDE4LjguOCAgY2VsbFN0eWxlcyBDVF9DZWxsU3R5bGVzID8gKi9cblx0LyogMTguOC4xNSBkeGZzIENUX0R4ZnMgPyAqL1xuXHQvKiAxOC44LjQyIHRhYmxlU3R5bGVzIENUX1RhYmxlU3R5bGVzID8gKi9cblx0LyogMTguOC4xMSBjb2xvcnMgQ1RfQ29sb3JzID8gKi9cblx0LyogMTguMi4xMCBleHRMc3QgQ1RfRXh0ZW5zaW9uTGlzdCA/ICovXG5cblx0cmV0dXJuIHN0eWxlcztcbn07XG59KSgpO1xuXG52YXIgU1RZTEVTX1hNTF9ST09UID0gd3JpdGV4dGFnKCdzdHlsZVNoZWV0JywgbnVsbCwge1xuXHQneG1sbnMnOiBYTUxOUy5tYWluWzBdLFxuXHQneG1sbnM6dnQnOiBYTUxOUy52dFxufSk7XG5cblJFTFMuU1RZID0gXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlc1wiO1xuXG5mdW5jdGlvbiB3cml0ZV9zdHlfeG1sKHdiLCBvcHRzKSB7XG5cdHZhciBvID0gW1hNTF9IRUFERVIsIFNUWUxFU19YTUxfUk9PVF0sIHc7XG5cdGlmKHdiLlNTRiAmJiAodyA9IHdyaXRlX251bUZtdHMod2IuU1NGKSkgIT0gbnVsbCkgb1tvLmxlbmd0aF0gPSB3O1xuXHRvW28ubGVuZ3RoXSA9ICgnPGZvbnRzIGNvdW50PVwiMVwiPjxmb250PjxzeiB2YWw9XCIxMlwiLz48Y29sb3IgdGhlbWU9XCIxXCIvPjxuYW1lIHZhbD1cIkNhbGlicmlcIi8+PGZhbWlseSB2YWw9XCIyXCIvPjxzY2hlbWUgdmFsPVwibWlub3JcIi8+PC9mb250PjwvZm9udHM+Jyk7XG5cdG9bby5sZW5ndGhdID0gKCc8ZmlsbHMgY291bnQ9XCIyXCI+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPVwibm9uZVwiLz48L2ZpbGw+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPVwiZ3JheTEyNVwiLz48L2ZpbGw+PC9maWxscz4nKTtcblx0b1tvLmxlbmd0aF0gPSAoJzxib3JkZXJzIGNvdW50PVwiMVwiPjxib3JkZXI+PGxlZnQvPjxyaWdodC8+PHRvcC8+PGJvdHRvbS8+PGRpYWdvbmFsLz48L2JvcmRlcj48L2JvcmRlcnM+Jyk7XG5cdG9bby5sZW5ndGhdID0gKCc8Y2VsbFN0eWxlWGZzIGNvdW50PVwiMVwiPjx4ZiBudW1GbXRJZD1cIjBcIiBmb250SWQ9XCIwXCIgZmlsbElkPVwiMFwiIGJvcmRlcklkPVwiMFwiLz48L2NlbGxTdHlsZVhmcz4nKTtcblx0aWYoKHcgPSB3cml0ZV9jZWxsWGZzKG9wdHMuY2VsbFhmcykpKSBvW28ubGVuZ3RoXSA9ICh3KTtcblx0b1tvLmxlbmd0aF0gPSAoJzxjZWxsU3R5bGVzIGNvdW50PVwiMVwiPjxjZWxsU3R5bGUgbmFtZT1cIk5vcm1hbFwiIHhmSWQ9XCIwXCIgYnVpbHRpbklkPVwiMFwiLz48L2NlbGxTdHlsZXM+Jyk7XG5cdG9bby5sZW5ndGhdID0gKCc8ZHhmcyBjb3VudD1cIjBcIi8+Jyk7XG5cdG9bby5sZW5ndGhdID0gKCc8dGFibGVTdHlsZXMgY291bnQ9XCIwXCIgZGVmYXVsdFRhYmxlU3R5bGU9XCJUYWJsZVN0eWxlTWVkaXVtOVwiIGRlZmF1bHRQaXZvdFN0eWxlPVwiUGl2b3RTdHlsZU1lZGl1bTRcIi8+Jyk7XG5cblx0aWYoby5sZW5ndGg+Mil7IG9bby5sZW5ndGhdID0gKCc8L3N0eWxlU2hlZXQ+Jyk7IG9bMV09b1sxXS5yZXBsYWNlKFwiLz5cIixcIj5cIik7IH1cblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cbi8qIFtNUy1YTFNCXSAyLjQuNjUxIEJydEZtdCAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0Rm10KGRhdGEsIGxlbmd0aCkge1xuXHR2YXIgbnVtRm10SWQgPSBkYXRhLnJlYWRfc2hpZnQoMik7XG5cdHZhciBzdEZtdENvZGUgPSBwYXJzZV9YTFdpZGVTdHJpbmcoZGF0YSxsZW5ndGgtMik7XG5cdHJldHVybiBbbnVtRm10SWQsIHN0Rm10Q29kZV07XG59XG5mdW5jdGlvbiB3cml0ZV9CcnRGbXQoaSwgZiwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoNiArIDQgKiBmLmxlbmd0aCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgaSk7XG5cdHdyaXRlX1hMV2lkZVN0cmluZyhmLCBvKTtcblx0cmV0dXJuIG8ubGVuZ3RoID4gby5sID8gby5zbGljZSgwLCBvLmwpIDogbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC42NTMgQnJ0Rm9udCBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9CcnRGb250KGRhdGEsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgb3V0ID0gKHt9KTtcblxuXHRvdXQuc3ogPSBkYXRhLnJlYWRfc2hpZnQoMikgLyAyMDtcblxuXHR2YXIgZ3JiaXQgPSBwYXJzZV9Gb250RmxhZ3MoZGF0YSwgMiwgb3B0cyk7XG5cdGlmKGdyYml0LmZDb25kZW5zZSkgb3V0LmNvbmRlbnNlID0gMTtcblx0aWYoZ3JiaXQuZkV4dGVuZCkgb3V0LmV4dGVuZCA9IDE7XG5cdGlmKGdyYml0LmZTaGFkb3cpIG91dC5zaGFkb3cgPSAxO1xuXHRpZihncmJpdC5mT3V0bGluZSkgb3V0Lm91dGxpbmUgPSAxO1xuXHRpZihncmJpdC5mU3RyaWtlb3V0KSBvdXQuc3RyaWtlID0gMTtcblx0aWYoZ3JiaXQuZkl0YWxpYykgb3V0Lml0YWxpYyA9IDE7XG5cblx0dmFyIGJscyA9IGRhdGEucmVhZF9zaGlmdCgyKTtcblx0aWYoYmxzID09PSAweDAyQkMpIG91dC5ib2xkID0gMTtcblxuXHRzd2l0Y2goZGF0YS5yZWFkX3NoaWZ0KDIpKSB7XG5cdFx0LyogY2FzZSAwOiBvdXQudmVydEFsaWduID0gXCJiYXNlbGluZVwiOyBicmVhazsgKi9cblx0XHRjYXNlIDE6IG91dC52ZXJ0QWxpZ24gPSBcInN1cGVyc2NyaXB0XCI7IGJyZWFrO1xuXHRcdGNhc2UgMjogb3V0LnZlcnRBbGlnbiA9IFwic3Vic2NyaXB0XCI7IGJyZWFrO1xuXHR9XG5cblx0dmFyIHVuZGVybGluZSA9IGRhdGEucmVhZF9zaGlmdCgxKTtcblx0aWYodW5kZXJsaW5lICE9IDApIG91dC51bmRlcmxpbmUgPSB1bmRlcmxpbmU7XG5cblx0dmFyIGZhbWlseSA9IGRhdGEucmVhZF9zaGlmdCgxKTtcblx0aWYoZmFtaWx5ID4gMCkgb3V0LmZhbWlseSA9IGZhbWlseTtcblxuXHR2YXIgYkNoYXJTZXQgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cdGlmKGJDaGFyU2V0ID4gMCkgb3V0LmNoYXJzZXQgPSBiQ2hhclNldDtcblxuXHRkYXRhLmwrKztcblx0b3V0LmNvbG9yID0gcGFyc2VfQnJ0Q29sb3IoZGF0YSwgOCk7XG5cblx0c3dpdGNoKGRhdGEucmVhZF9zaGlmdCgxKSkge1xuXHRcdC8qIGNhc2UgMDogb3V0LnNjaGVtZSA9IFwibm9uZVwiOiBicmVhazsgKi9cblx0XHRjYXNlIDE6IG91dC5zY2hlbWUgPSBcIm1ham9yXCI7IGJyZWFrO1xuXHRcdGNhc2UgMjogb3V0LnNjaGVtZSA9IFwibWlub3JcIjsgYnJlYWs7XG5cdH1cblxuXHRvdXQubmFtZSA9IHBhcnNlX1hMV2lkZVN0cmluZyhkYXRhLCBsZW5ndGggLSAyMSk7XG5cblx0cmV0dXJuIG91dDtcbn1cbmZ1bmN0aW9uIHdyaXRlX0JydEZvbnQoZm9udCwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoMjUrNCozMik7XG5cdG8ud3JpdGVfc2hpZnQoMiwgZm9udC5zeiAqIDIwKTtcblx0d3JpdGVfRm9udEZsYWdzKGZvbnQsIG8pO1xuXHRvLndyaXRlX3NoaWZ0KDIsIGZvbnQuYm9sZCA/IDB4MDJCQyA6IDB4MDE5MCk7XG5cdHZhciBzc3MgPSAwO1xuXHRpZihmb250LnZlcnRBbGlnbiA9PSBcInN1cGVyc2NyaXB0XCIpIHNzcyA9IDE7XG5cdGVsc2UgaWYoZm9udC52ZXJ0QWxpZ24gPT0gXCJzdWJzY3JpcHRcIikgc3NzID0gMjtcblx0by53cml0ZV9zaGlmdCgyLCBzc3MpO1xuXHRvLndyaXRlX3NoaWZ0KDEsIGZvbnQudW5kZXJsaW5lIHx8IDApO1xuXHRvLndyaXRlX3NoaWZ0KDEsIGZvbnQuZmFtaWx5IHx8IDApO1xuXHRvLndyaXRlX3NoaWZ0KDEsIGZvbnQuY2hhcnNldCB8fCAwKTtcblx0by53cml0ZV9zaGlmdCgxLCAwKTtcblx0d3JpdGVfQnJ0Q29sb3IoZm9udC5jb2xvciwgbyk7XG5cdHZhciBzY2hlbWUgPSAwO1xuXHRpZihmb250LnNjaGVtZSA9PSBcIm1ham9yXCIpIHNjaGVtZSA9IDE7XG5cdGlmKGZvbnQuc2NoZW1lID09IFwibWlub3JcIikgc2NoZW1lID0gMjtcblx0by53cml0ZV9zaGlmdCgxLCBzY2hlbWUpO1xuXHR3cml0ZV9YTFdpZGVTdHJpbmcoZm9udC5uYW1lLCBvKTtcblx0cmV0dXJuIG8ubGVuZ3RoID4gby5sID8gby5zbGljZSgwLCBvLmwpIDogbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC42NDQgQnJ0RmlsbCAqL1xudmFyIFhMU0JGaWxsUFROYW1lcyA9IFtcblx0XCJub25lXCIsXG5cdFwic29saWRcIixcblx0XCJtZWRpdW1HcmF5XCIsXG5cdFwiZGFya0dyYXlcIixcblx0XCJsaWdodEdyYXlcIixcblx0XCJkYXJrSG9yaXpvbnRhbFwiLFxuXHRcImRhcmtWZXJ0aWNhbFwiLFxuXHRcImRhcmtEb3duXCIsXG5cdFwiZGFya1VwXCIsXG5cdFwiZGFya0dyaWRcIixcblx0XCJkYXJrVHJlbGxpc1wiLFxuXHRcImxpZ2h0SG9yaXpvbnRhbFwiLFxuXHRcImxpZ2h0VmVydGljYWxcIixcblx0XCJsaWdodERvd25cIixcblx0XCJsaWdodFVwXCIsXG5cdFwibGlnaHRHcmlkXCIsXG5cdFwibGlnaHRUcmVsbGlzXCIsXG5cdFwiZ3JheTEyNVwiLFxuXHRcImdyYXkwNjI1XCJcbl07XG52YXIgcmV2X1hMU0JGaWxsUFROYW1lcyA9IChldmVydChYTFNCRmlsbFBUTmFtZXMpKTtcbi8qIFRPRE86IGdyYWRpZW50IGZpbGwgcmVwcmVzZW50YXRpb24gKi9cbnZhciBwYXJzZV9CcnRGaWxsID0gcGFyc2Vub29wO1xuZnVuY3Rpb24gd3JpdGVfQnJ0RmlsbChmaWxsLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1Zig0KjMgKyA4KjcgKyAxNioxKTtcblx0dmFyIGZscyA9IHJldl9YTFNCRmlsbFBUTmFtZXNbZmlsbC5wYXR0ZXJuVHlwZV07XG5cdGlmKGZscyA9PSBudWxsKSBmbHMgPSAweDI4O1xuXHRvLndyaXRlX3NoaWZ0KDQsIGZscyk7XG5cdHZhciBqID0gMDtcblx0aWYoZmxzICE9IDB4MjgpIHtcblx0XHQvKiBUT0RPOiBjdXN0b20gRkcgQ29sb3IgKi9cblx0XHR3cml0ZV9CcnRDb2xvcih7YXV0bzoxfSwgbyk7XG5cdFx0LyogVE9ETzogY3VzdG9tIEJHIENvbG9yICovXG5cdFx0d3JpdGVfQnJ0Q29sb3Ioe2F1dG86MX0sIG8pO1xuXG5cdFx0Zm9yKDsgaiA8IDEyOyArK2opIG8ud3JpdGVfc2hpZnQoNCwgMCk7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yKDsgaiA8IDQ7ICsraikgby53cml0ZV9zaGlmdCg0LCAwKTtcblxuXHRcdGZvcig7IGogPCAxMjsgKytqKSBvLndyaXRlX3NoaWZ0KDQsIDApOyAvKiBUT0RPICovXG5cdFx0LyogaUdyYWRpZW50VHlwZSAqL1xuXHRcdC8qIHhudW1EZWdyZWUgKi9cblx0XHQvKiB4bnVtRmlsbFRvTGVmdCAqL1xuXHRcdC8qIHhudW1GaWxsVG9SaWdodCAqL1xuXHRcdC8qIHhudW1GaWxsVG9Ub3AgKi9cblx0XHQvKiB4bnVtRmlsbFRvQm90dG9tICovXG5cdFx0LyogY051bVN0b3AgKi9cblx0XHQvKiB4ZmlsbEdyYWRpZW50U3RvcCAqL1xuXHR9XG5cdHJldHVybiBvLmxlbmd0aCA+IG8ubCA/IG8uc2xpY2UoMCwgby5sKSA6IG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuODE2IEJydFhGICovXG5mdW5jdGlvbiBwYXJzZV9CcnRYRihkYXRhLCBsZW5ndGgpIHtcblx0dmFyIHRndCA9IGRhdGEubCArIGxlbmd0aDtcblx0dmFyIGl4ZmVQYXJlbnQgPSBkYXRhLnJlYWRfc2hpZnQoMik7XG5cdHZhciBpZm10ID0gZGF0YS5yZWFkX3NoaWZ0KDIpO1xuXHRkYXRhLmwgPSB0Z3Q7XG5cdHJldHVybiB7aXhmZTppeGZlUGFyZW50LCBudW1GbXRJZDppZm10IH07XG59XG5mdW5jdGlvbiB3cml0ZV9CcnRYRihkYXRhLCBpeGZlUCwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoMTYpO1xuXHRvLndyaXRlX3NoaWZ0KDIsIGl4ZmVQfHwwKTtcblx0by53cml0ZV9zaGlmdCgyLCBkYXRhLm51bUZtdElkfHwwKTtcblx0by53cml0ZV9zaGlmdCgyLCAwKTsgLyogaUZvbnQgKi9cblx0by53cml0ZV9zaGlmdCgyLCAwKTsgLyogaUZpbGwgKi9cblx0by53cml0ZV9zaGlmdCgyLCAwKTsgLyogaXhCb3JkZXIgKi9cblx0by53cml0ZV9zaGlmdCgxLCAwKTsgLyogdHJvdCAqL1xuXHRvLndyaXRlX3NoaWZ0KDEsIDApOyAvKiBpbmRlbnQgKi9cblx0by53cml0ZV9zaGlmdCgxLCAwKTsgLyogZmxhZ3MgKi9cblx0by53cml0ZV9zaGlmdCgxLCAwKTsgLyogZmxhZ3MgKi9cblx0by53cml0ZV9zaGlmdCgxLCAwKTsgLyogeGZHcmJpdEF0ciAqL1xuXHRvLndyaXRlX3NoaWZ0KDEsIDApO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLVhMU0JdIDIuNS40IEJseGYgVE9ETyAqL1xuZnVuY3Rpb24gd3JpdGVfQmx4ZihkYXRhLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1ZigxMCk7XG5cdG8ud3JpdGVfc2hpZnQoMSwgMCk7IC8qIGRnICovXG5cdG8ud3JpdGVfc2hpZnQoMSwgMCk7XG5cdG8ud3JpdGVfc2hpZnQoNCwgMCk7IC8qIGNvbG9yICovXG5cdG8ud3JpdGVfc2hpZnQoNCwgMCk7IC8qIGNvbG9yICovXG5cdHJldHVybiBvO1xufVxuLyogW01TLVhMU0JdIDIuNC4yOTkgQnJ0Qm9yZGVyIFRPRE8gKi9cbnZhciBwYXJzZV9CcnRCb3JkZXIgPSBwYXJzZW5vb3A7XG5mdW5jdGlvbiB3cml0ZV9CcnRCb3JkZXIoYm9yZGVyLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1Zig1MSk7XG5cdG8ud3JpdGVfc2hpZnQoMSwgMCk7IC8qIGRpYWdvbmFsICovXG5cdHdyaXRlX0JseGYobnVsbCwgbyk7IC8qIHRvcCAqL1xuXHR3cml0ZV9CbHhmKG51bGwsIG8pOyAvKiBib3R0b20gKi9cblx0d3JpdGVfQmx4ZihudWxsLCBvKTsgLyogbGVmdCAqL1xuXHR3cml0ZV9CbHhmKG51bGwsIG8pOyAvKiByaWdodCAqL1xuXHR3cml0ZV9CbHhmKG51bGwsIG8pOyAvKiBkaWFnICovXG5cdHJldHVybiBvLmxlbmd0aCA+IG8ubCA/IG8uc2xpY2UoMCwgby5sKSA6IG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuNzU1IEJydFN0eWxlIFRPRE8gKi9cbmZ1bmN0aW9uIHdyaXRlX0JydFN0eWxlKHN0eWxlLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1ZigxMis0KjEwKTtcblx0by53cml0ZV9zaGlmdCg0LCBzdHlsZS54ZklkKTtcblx0by53cml0ZV9zaGlmdCgyLCAxKTtcblx0by53cml0ZV9zaGlmdCgxLCArc3R5bGUuYnVpbHRpbklkKTtcblx0by53cml0ZV9zaGlmdCgxLCAwKTsgLyogaUxldmVsICovXG5cdHdyaXRlX1hMTnVsbGFibGVXaWRlU3RyaW5nKHN0eWxlLm5hbWUgfHwgXCJcIiwgbyk7XG5cdHJldHVybiBvLmxlbmd0aCA+IG8ubCA/IG8uc2xpY2UoMCwgby5sKSA6IG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuMjY5IEJydEJlZ2luVGFibGVTdHlsZXMgKi9cbmZ1bmN0aW9uIHdyaXRlX0JydEJlZ2luVGFibGVTdHlsZXMoY250LCBkZWZUYWJsZVN0eWxlLCBkZWZQaXZvdFN0eWxlKSB7XG5cdHZhciBvID0gbmV3X2J1Zig0KzI1NioyKjQpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIGNudCk7XG5cdHdyaXRlX1hMTnVsbGFibGVXaWRlU3RyaW5nKGRlZlRhYmxlU3R5bGUsIG8pO1xuXHR3cml0ZV9YTE51bGxhYmxlV2lkZVN0cmluZyhkZWZQaXZvdFN0eWxlLCBvKTtcblx0cmV0dXJuIG8ubGVuZ3RoID4gby5sID8gby5zbGljZSgwLCBvLmwpIDogbztcbn1cblxuLyogW01TLVhMU0JdIDIuMS43LjUwIFN0eWxlcyAqL1xuZnVuY3Rpb24gcGFyc2Vfc3R5X2JpbihkYXRhLCB0aGVtZXMsIG9wdHMpIHtcblx0dmFyIHN0eWxlcyA9IHt9O1xuXHRzdHlsZXMuTnVtYmVyRm10ID0gKFtdKTtcblx0Zm9yKHZhciB5IGluIFNTRi5fdGFibGUpIHN0eWxlcy5OdW1iZXJGbXRbeV0gPSBTU0YuX3RhYmxlW3ldO1xuXG5cdHN0eWxlcy5DZWxsWGYgPSBbXTtcblx0c3R5bGVzLkZvbnRzID0gW107XG5cdHZhciBzdGF0ZSA9IFtdO1xuXHR2YXIgcGFzcyA9IGZhbHNlO1xuXHRyZWNvcmRob3BwZXIoZGF0YSwgZnVuY3Rpb24gaG9wcGVyX3N0eSh2YWwsIFJfbiwgUlQpIHtcblx0XHRzd2l0Y2goUlQpIHtcblx0XHRcdGNhc2UgMHgwMDJDOiAvKiAnQnJ0Rm10JyAqL1xuXHRcdFx0XHRzdHlsZXMuTnVtYmVyRm10W3ZhbFswXV0gPSB2YWxbMV07IFNTRi5sb2FkKHZhbFsxXSwgdmFsWzBdKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAyQjogLyogJ0JydEZvbnQnICovXG5cdFx0XHRcdHN0eWxlcy5Gb250cy5wdXNoKHZhbCk7XG5cdFx0XHRcdGlmKHZhbC5jb2xvci50aGVtZSAhPSBudWxsICYmIHRoZW1lcyAmJiB0aGVtZXMudGhlbWVFbGVtZW50cyAmJiB0aGVtZXMudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUpIHtcblx0XHRcdFx0XHR2YWwuY29sb3IucmdiID0gcmdiX3RpbnQodGhlbWVzLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW3ZhbC5jb2xvci50aGVtZV0ucmdiLCB2YWwuY29sb3IudGludCB8fCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMHgwNDAxOiAvKiAnQnJ0S25vd25Gb250cycgKi8gYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAyRDogLyogJ0JydEZpbGwnICovIGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMkU6IC8qICdCcnRCb3JkZXInICovIGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMkY6IC8qICdCcnRYRicgKi9cblx0XHRcdFx0aWYoc3RhdGVbc3RhdGUubGVuZ3RoIC0gMV0gPT0gXCJCcnRCZWdpbkNlbGxYRnNcIikge1xuXHRcdFx0XHRcdHN0eWxlcy5DZWxsWGYucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMzA6IC8qICdCcnRTdHlsZScgKi9cblx0XHRcdGNhc2UgMHgwMUZCOiAvKiAnQnJ0RFhGJyAqL1xuXHRcdFx0Y2FzZSAweDAyM0M6IC8qICdCcnRNUlVDb2xvcicgKi9cblx0XHRcdGNhc2UgMHgwMURCOiAvKiAnQnJ0SW5kZXhlZENvbG9yJzogKi9cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwNDkzOiAvKiAnQnJ0RFhGMTQnICovXG5cdFx0XHRjYXNlIDB4MDgzNjogLyogJ0JydERYRjE1JyAqL1xuXHRcdFx0Y2FzZSAweDA0NkE6IC8qICdCcnRTbGljZXJTdHlsZUVsZW1lbnQnICovXG5cdFx0XHRjYXNlIDB4MDIwMDogLyogJ0JydFRhYmxlU3R5bGVFbGVtZW50JyAqL1xuXHRcdFx0Y2FzZSAweDA4MkY6IC8qICdCcnRUaW1lbGluZVN0eWxlRWxlbWVudCcgKi9cblx0XHRcdC8qIGNhc2UgJ0JydFVpZCcgKi9cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwMDIzOiAvKiAnQnJ0RlJUQmVnaW4nICovXG5cdFx0XHRcdHBhc3MgPSB0cnVlOyBicmVhaztcblx0XHRcdGNhc2UgMHgwMDI0OiAvKiAnQnJ0RlJURW5kJyAqL1xuXHRcdFx0XHRwYXNzID0gZmFsc2U7IGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMjU6IC8qICdCcnRBQ0JlZ2luJyAqL1xuXHRcdFx0XHRzdGF0ZS5wdXNoKFJfbik7IGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMjY6IC8qICdCcnRBQ0VuZCcgKi9cblx0XHRcdFx0c3RhdGUucG9wKCk7IGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZigoUl9ufHxcIlwiKS5pbmRleE9mKFwiQmVnaW5cIikgPiAwKSBzdGF0ZS5wdXNoKFJfbik7XG5cdFx0XHRcdGVsc2UgaWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkVuZFwiKSA+IDApIHN0YXRlLnBvcCgpO1xuXHRcdFx0XHRlbHNlIGlmKCFwYXNzIHx8IG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHJlY29yZCBcIiArIFJUICsgXCIgXCIgKyBSX24pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX0ZNVFNfYmluKGJhLCBORikge1xuXHRpZighTkYpIHJldHVybjtcblx0dmFyIGNudCA9IDA7XG5cdFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWy8qNjMqLzUwLC8qNjZdLFsxNjQsKi8zOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKHIpIHtcbmZvcih2YXIgaSA9IHJbMF07IGkgPD0gclsxXTsgKytpKSBpZihORltpXSAhPSBudWxsKSArK2NudDtcblx0fSk7XG5cblx0aWYoY250ID09IDApIHJldHVybjtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEJlZ2luRm10c1wiLCB3cml0ZV9VSW50MzJMRShjbnQpKTtcblx0W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbLyo2MyovNTAsLyo2Nl0sWzE2NCwqLzM5Ml1dLmZvckVhY2goZnVuY3Rpb24ocikge1xuZm9yKHZhciBpID0gclswXTsgaSA8PSByWzFdOyArK2kpIGlmKE5GW2ldICE9IG51bGwpIHdyaXRlX3JlY29yZChiYSwgXCJCcnRGbXRcIiwgd3JpdGVfQnJ0Rm10KGksIE5GW2ldKSk7XG5cdH0pO1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RW5kRm10c1wiKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfRk9OVFNfYmluKGJhKSB7XG5cdHZhciBjbnQgPSAxO1xuXG5cdGlmKGNudCA9PSAwKSByZXR1cm47XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpbkZvbnRzXCIsIHdyaXRlX1VJbnQzMkxFKGNudCkpO1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0Rm9udFwiLCB3cml0ZV9CcnRGb250KHtcblx0XHRzejoxMixcblx0XHRjb2xvcjoge3RoZW1lOjF9LFxuXHRcdG5hbWU6IFwiQ2FsaWJyaVwiLFxuXHRcdGZhbWlseTogMixcblx0XHRzY2hlbWU6IFwibWlub3JcIlxuXHR9KSk7XG5cdC8qIDEqNjU0OTFCcnRGb250IFtBQ0ZPTlRTXSAqL1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RW5kRm9udHNcIik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX0ZJTExTX2JpbihiYSkge1xuXHR2YXIgY250ID0gMjtcblxuXHRpZihjbnQgPT0gMCkgcmV0dXJuO1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5GaWxsc1wiLCB3cml0ZV9VSW50MzJMRShjbnQpKTtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEZpbGxcIiwgd3JpdGVfQnJ0RmlsbCh7cGF0dGVyblR5cGU6XCJub25lXCJ9KSk7XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRGaWxsXCIsIHdyaXRlX0JydEZpbGwoe3BhdHRlcm5UeXBlOlwiZ3JheTEyNVwifSkpO1xuXHQvKiAxKjY1NDMxQnJ0RmlsbCAqL1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RW5kRmlsbHNcIik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX0JPUkRFUlNfYmluKGJhKSB7XG5cdHZhciBjbnQgPSAxO1xuXG5cdGlmKGNudCA9PSAwKSByZXR1cm47XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpbkJvcmRlcnNcIiwgd3JpdGVfVUludDMyTEUoY250KSk7XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCb3JkZXJcIiwgd3JpdGVfQnJ0Qm9yZGVyKHt9KSk7XG5cdC8qIDEqNjU0MzBCcnRCb3JkZXIgKi9cblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZEJvcmRlcnNcIik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX0NFTExTVFlMRVhGU19iaW4oYmEpIHtcblx0dmFyIGNudCA9IDE7XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpbkNlbGxTdHlsZVhGc1wiLCB3cml0ZV9VSW50MzJMRShjbnQpKTtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydFhGXCIsIHdyaXRlX0JydFhGKHtcblx0XHRudW1GbXRJZDowLFxuXHRcdGZvbnRJZDowLFxuXHRcdGZpbGxJZDowLFxuXHRcdGJvcmRlcklkOjBcblx0fSwgMHhGRkZGKSk7XG5cdC8qIDEqNjU0MzAoQnJ0WEYgKkZSVCkgKi9cblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZENlbGxTdHlsZVhGc1wiKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfQ0VMTFhGU19iaW4oYmEsIGRhdGEpIHtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEJlZ2luQ2VsbFhGc1wiLCB3cml0ZV9VSW50MzJMRShkYXRhLmxlbmd0aCkpO1xuXHRkYXRhLmZvckVhY2goZnVuY3Rpb24oYykgeyB3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0WEZcIiwgd3JpdGVfQnJ0WEYoYywwKSk7IH0pO1xuXHQvKiAxKjY1NDMwKEJydFhGICpGUlQpICovXG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRFbmRDZWxsWEZzXCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9TVFlMRVNfYmluKGJhKSB7XG5cdHZhciBjbnQgPSAxO1xuXG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpblN0eWxlc1wiLCB3cml0ZV9VSW50MzJMRShjbnQpKTtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydFN0eWxlXCIsIHdyaXRlX0JydFN0eWxlKHtcblx0XHR4ZklkOjAsXG5cdFx0YnVpbHRpbklkOjAsXG5cdFx0bmFtZTpcIk5vcm1hbFwiXG5cdH0pKTtcblx0LyogMSo2NTQzMChCcnRTdHlsZSAqRlJUKSAqL1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RW5kU3R5bGVzXCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9EWEZTX2JpbihiYSkge1xuXHR2YXIgY250ID0gMDtcblxuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5EWEZzXCIsIHdyaXRlX1VJbnQzMkxFKGNudCkpO1xuXHQvKiAqMjE0NzQ4MzY0NyhCcnREWEYgKkZSVCkgKi9cblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZERYRnNcIik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX1RBQkxFU1RZTEVTX2JpbihiYSkge1xuXHR2YXIgY250ID0gMDtcblxuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5UYWJsZVN0eWxlc1wiLCB3cml0ZV9CcnRCZWdpblRhYmxlU3R5bGVzKGNudCwgXCJUYWJsZVN0eWxlTWVkaXVtOVwiLCBcIlBpdm90U3R5bGVNZWRpdW00XCIpKTtcblx0LyogKlRBQkxFU1RZTEUgKi9cblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZFRhYmxlU3R5bGVzXCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9DT0xPUlBBTEVUVEVfYmluKCkge1xuXHRyZXR1cm47XG5cdC8qIEJydEJlZ2luQ29sb3JQYWxldHRlIFtJTkRFWEVEQ09MT1JTXSBbTVJVQ09MT1JTXSBCcnRFbmRDb2xvclBhbGV0dGUgKi9cbn1cblxuLyogW01TLVhMU0JdIDIuMS43LjUwIFN0eWxlcyAqL1xuZnVuY3Rpb24gd3JpdGVfc3R5X2Jpbih3Yiwgb3B0cykge1xuXHR2YXIgYmEgPSBidWZfYXJyYXkoKTtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEJlZ2luU3R5bGVTaGVldFwiKTtcblx0d3JpdGVfRk1UU19iaW4oYmEsIHdiLlNTRik7XG5cdHdyaXRlX0ZPTlRTX2JpbihiYSwgd2IpO1xuXHR3cml0ZV9GSUxMU19iaW4oYmEsIHdiKTtcblx0d3JpdGVfQk9SREVSU19iaW4oYmEsIHdiKTtcblx0d3JpdGVfQ0VMTFNUWUxFWEZTX2JpbihiYSwgd2IpO1xuXHR3cml0ZV9DRUxMWEZTX2JpbihiYSwgb3B0cy5jZWxsWGZzKTtcblx0d3JpdGVfU1RZTEVTX2JpbihiYSwgd2IpO1xuXHR3cml0ZV9EWEZTX2JpbihiYSwgd2IpO1xuXHR3cml0ZV9UQUJMRVNUWUxFU19iaW4oYmEsIHdiKTtcblx0d3JpdGVfQ09MT1JQQUxFVFRFX2JpbihiYSwgd2IpO1xuXHQvKiBGUlRTVFlMRVNIRUVUKi9cblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZFN0eWxlU2hlZXRcIik7XG5cdHJldHVybiBiYS5lbmQoKTtcbn1cblJFTFMuVEhFTUUgPSBcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGhlbWVcIjtcblxuLyogMjAuMS42LjIgY2xyU2NoZW1lIENUX0NvbG9yU2NoZW1lICovXG5mdW5jdGlvbiBwYXJzZV9jbHJTY2hlbWUodCwgdGhlbWVzLCBvcHRzKSB7XG5cdHRoZW1lcy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSA9IFtdO1xuXHR2YXIgY29sb3IgPSB7fTtcblx0KHRbMF0ubWF0Y2godGFncmVnZXgpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih4KSB7XG5cdFx0dmFyIHkgPSBwYXJzZXhtbHRhZyh4KTtcblx0XHRzd2l0Y2goeVswXSkge1xuXHRcdFx0LyogMjAuMS42LjIgY2xyU2NoZW1lIChDb2xvciBTY2hlbWUpIENUX0NvbG9yU2NoZW1lICovXG5cdFx0XHRjYXNlICc8YTpjbHJTY2hlbWUnOiBjYXNlICc8L2E6Y2xyU2NoZW1lPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAyMC4xLjIuMy4zMiBzcmdiQ2xyIENUX1NSZ2JDb2xvciAqL1xuXHRcdFx0Y2FzZSAnPGE6c3JnYkNscic6XG5cdFx0XHRcdGNvbG9yLnJnYiA9IHkudmFsOyBicmVhaztcblxuXHRcdFx0LyogMjAuMS4yLjMuMzMgc3lzQ2xyIENUX1N5c3RlbUNvbG9yICovXG5cdFx0XHRjYXNlICc8YTpzeXNDbHInOlxuXHRcdFx0XHRjb2xvci5yZ2IgPSB5Lmxhc3RDbHI7IGJyZWFrO1xuXG5cdFx0XHQvKiAyMC4xLjQuMS4xIGFjY2VudDEgKEFjY2VudCAxKSAqL1xuXHRcdFx0LyogMjAuMS40LjEuMiBhY2NlbnQyIChBY2NlbnQgMikgKi9cblx0XHRcdC8qIDIwLjEuNC4xLjMgYWNjZW50MyAoQWNjZW50IDMpICovXG5cdFx0XHQvKiAyMC4xLjQuMS40IGFjY2VudDQgKEFjY2VudCA0KSAqL1xuXHRcdFx0LyogMjAuMS40LjEuNSBhY2NlbnQ1IChBY2NlbnQgNSkgKi9cblx0XHRcdC8qIDIwLjEuNC4xLjYgYWNjZW50NiAoQWNjZW50IDYpICovXG5cdFx0XHQvKiAyMC4xLjQuMS45IGRrMSAoRGFyayAxKSAqL1xuXHRcdFx0LyogMjAuMS40LjEuMTAgZGsyIChEYXJrIDIpICovXG5cdFx0XHQvKiAyMC4xLjQuMS4xNSBmb2xIbGluayAoRm9sbG93ZWQgSHlwZXJsaW5rKSAqL1xuXHRcdFx0LyogMjAuMS40LjEuMTkgaGxpbmsgKEh5cGVybGluaykgKi9cblx0XHRcdC8qIDIwLjEuNC4xLjIyIGx0MSAoTGlnaHQgMSkgKi9cblx0XHRcdC8qIDIwLjEuNC4xLjIzIGx0MiAoTGlnaHQgMikgKi9cblx0XHRcdGNhc2UgJzxhOmRrMT4nOiBjYXNlICc8L2E6ZGsxPic6XG5cdFx0XHRjYXNlICc8YTpsdDE+JzogY2FzZSAnPC9hOmx0MT4nOlxuXHRcdFx0Y2FzZSAnPGE6ZGsyPic6IGNhc2UgJzwvYTpkazI+Jzpcblx0XHRcdGNhc2UgJzxhOmx0Mj4nOiBjYXNlICc8L2E6bHQyPic6XG5cdFx0XHRjYXNlICc8YTphY2NlbnQxPic6IGNhc2UgJzwvYTphY2NlbnQxPic6XG5cdFx0XHRjYXNlICc8YTphY2NlbnQyPic6IGNhc2UgJzwvYTphY2NlbnQyPic6XG5cdFx0XHRjYXNlICc8YTphY2NlbnQzPic6IGNhc2UgJzwvYTphY2NlbnQzPic6XG5cdFx0XHRjYXNlICc8YTphY2NlbnQ0Pic6IGNhc2UgJzwvYTphY2NlbnQ0Pic6XG5cdFx0XHRjYXNlICc8YTphY2NlbnQ1Pic6IGNhc2UgJzwvYTphY2NlbnQ1Pic6XG5cdFx0XHRjYXNlICc8YTphY2NlbnQ2Pic6IGNhc2UgJzwvYTphY2NlbnQ2Pic6XG5cdFx0XHRjYXNlICc8YTpobGluaz4nOiBjYXNlICc8L2E6aGxpbms+Jzpcblx0XHRcdGNhc2UgJzxhOmZvbEhsaW5rPic6IGNhc2UgJzwvYTpmb2xIbGluaz4nOlxuXHRcdFx0XHRpZiAoeVswXS5jaGFyQXQoMSkgPT09ICcvJykge1xuXHRcdFx0XHRcdHRoZW1lcy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZS5wdXNoKGNvbG9yKTtcblx0XHRcdFx0XHRjb2xvciA9IHt9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbG9yLm5hbWUgPSB5WzBdLnNsaWNlKDMsIHlbMF0ubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6IGlmKG9wdHMgJiYgb3B0cy5XVEYpIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkICcgKyB5WzBdICsgJyBpbiBjbHJTY2hlbWUnKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKiAyMC4xLjQuMS4xOCBmb250U2NoZW1lIENUX0ZvbnRTY2hlbWUgKi9cbmZ1bmN0aW9uIHBhcnNlX2ZvbnRTY2hlbWUoKSB7IH1cblxuLyogMjAuMS40LjEuMTUgZm10U2NoZW1lIENUX1N0eWxlTWF0cml4ICovXG5mdW5jdGlvbiBwYXJzZV9mbXRTY2hlbWUoKSB7IH1cblxudmFyIGNscnNyZWdleCA9IC88YTpjbHJTY2hlbWUoW14+XSopPltcXHNcXFNdKjxcXC9hOmNsclNjaGVtZT4vO1xudmFyIGZudHNyZWdleCA9IC88YTpmb250U2NoZW1lKFtePl0qKT5bXFxzXFxTXSo8XFwvYTpmb250U2NoZW1lPi87XG52YXIgZm10c3JlZ2V4ID0gLzxhOmZtdFNjaGVtZShbXj5dKik+W1xcc1xcU10qPFxcL2E6Zm10U2NoZW1lPi87XG5cbi8qIDIwLjEuNi4xMCB0aGVtZUVsZW1lbnRzIENUX0Jhc2VTdHlsZXMgKi9cbmZ1bmN0aW9uIHBhcnNlX3RoZW1lRWxlbWVudHMoZGF0YSwgdGhlbWVzLCBvcHRzKSB7XG5cdHRoZW1lcy50aGVtZUVsZW1lbnRzID0ge307XG5cblx0dmFyIHQ7XG5cblx0W1xuXHRcdC8qIGNsclNjaGVtZSBDVF9Db2xvclNjaGVtZSAqL1xuXHRcdFsnY2xyU2NoZW1lJywgY2xyc3JlZ2V4LCBwYXJzZV9jbHJTY2hlbWVdLFxuXHRcdC8qIGZvbnRTY2hlbWUgQ1RfRm9udFNjaGVtZSAqL1xuXHRcdFsnZm9udFNjaGVtZScsIGZudHNyZWdleCwgcGFyc2VfZm9udFNjaGVtZV0sXG5cdFx0LyogZm10U2NoZW1lIENUX1N0eWxlTWF0cml4ICovXG5cdFx0WydmbXRTY2hlbWUnLCBmbXRzcmVnZXgsIHBhcnNlX2ZtdFNjaGVtZV1cblx0XS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcblx0XHRpZighKHQ9ZGF0YS5tYXRjaChtWzFdKSkpIHRocm93IG5ldyBFcnJvcihtWzBdICsgJyBub3QgZm91bmQgaW4gdGhlbWVFbGVtZW50cycpO1xuXHRcdG1bMl0odCwgdGhlbWVzLCBvcHRzKTtcblx0fSk7XG59XG5cbnZhciB0aGVtZWx0cmVnZXggPSAvPGE6dGhlbWVFbGVtZW50cyhbXj5dKik+W1xcc1xcU10qPFxcL2E6dGhlbWVFbGVtZW50cz4vO1xuXG4vKiAxNC4yLjcgVGhlbWUgUGFydCAqL1xuZnVuY3Rpb24gcGFyc2VfdGhlbWVfeG1sKGRhdGEsIG9wdHMpIHtcblx0LyogMjAuMS42LjkgdGhlbWUgQ1RfT2ZmaWNlU3R5bGVTaGVldCAqL1xuXHRpZighZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHBhcnNlX3RoZW1lX3htbCh3cml0ZV90aGVtZSgpKTtcblxuXHR2YXIgdDtcblx0dmFyIHRoZW1lcyA9IHt9O1xuXG5cdC8qIHRoZW1lRWxlbWVudHMgQ1RfQmFzZVN0eWxlcyAqL1xuXHRpZighKHQ9ZGF0YS5tYXRjaCh0aGVtZWx0cmVnZXgpKSkgdGhyb3cgbmV3IEVycm9yKCd0aGVtZUVsZW1lbnRzIG5vdCBmb3VuZCBpbiB0aGVtZScpO1xuXHRwYXJzZV90aGVtZUVsZW1lbnRzKHRbMF0sIHRoZW1lcywgb3B0cyk7XG5cblx0cmV0dXJuIHRoZW1lcztcbn1cblxuZnVuY3Rpb24gd3JpdGVfdGhlbWUoVGhlbWVzLCBvcHRzKSB7XG5cdGlmKG9wdHMgJiYgb3B0cy50aGVtZVhMU1gpIHJldHVybiBvcHRzLnRoZW1lWExTWDtcblx0dmFyIG8gPSBbWE1MX0hFQURFUl07XG5cdG9bby5sZW5ndGhdID0gJzxhOnRoZW1lIHhtbG5zOmE9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpblwiIG5hbWU9XCJPZmZpY2UgVGhlbWVcIj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAnPGE6dGhlbWVFbGVtZW50cz4nO1xuXG5cdG9bby5sZW5ndGhdID0gICAnPGE6Y2xyU2NoZW1lIG5hbWU9XCJPZmZpY2VcIj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8YTpkazE+PGE6c3lzQ2xyIHZhbD1cIndpbmRvd1RleHRcIiBsYXN0Q2xyPVwiMDAwMDAwXCIvPjwvYTpkazE+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPGE6bHQxPjxhOnN5c0NsciB2YWw9XCJ3aW5kb3dcIiBsYXN0Q2xyPVwiRkZGRkZGXCIvPjwvYTpsdDE+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPVwiMUY0OTdEXCIvPjwvYTpkazI+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPVwiRUVFQ0UxXCIvPjwvYTpsdDI+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD1cIjRGODFCRFwiLz48L2E6YWNjZW50MT4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPVwiQzA1MDREXCIvPjwvYTphY2NlbnQyPic7XG5cdG9bby5sZW5ndGhdID0gICAgJzxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9XCI5QkJCNTlcIi8+PC9hOmFjY2VudDM+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD1cIjgwNjRBMlwiLz48L2E6YWNjZW50ND4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPVwiNEJBQ0M2XCIvPjwvYTphY2NlbnQ1Pic7XG5cdG9bby5sZW5ndGhdID0gICAgJzxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9XCJGNzk2NDZcIi8+PC9hOmFjY2VudDY+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPGE6aGxpbms+PGE6c3JnYkNsciB2YWw9XCIwMDAwRkZcIi8+PC9hOmhsaW5rPic7XG5cdG9bby5sZW5ndGhdID0gICAgJzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPVwiODAwMDgwXCIvPjwvYTpmb2xIbGluaz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgJzwvYTpjbHJTY2hlbWU+JztcblxuXHRvW28ubGVuZ3RoXSA9ICAgJzxhOmZvbnRTY2hlbWUgbmFtZT1cIk9mZmljZVwiPic7XG5cdG9bby5sZW5ndGhdID0gICAgJzxhOm1ham9yRm9udD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6bGF0aW4gdHlwZWZhY2U9XCJDYW1icmlhXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTplYSB0eXBlZmFjZT1cIlwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Y3MgdHlwZWZhY2U9XCJcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiSnBhblwiIHR5cGVmYWNlPVwi77yt77yzIO+8sOOCtOOCt+ODg+OCr1wiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJIYW5nXCIgdHlwZWZhY2U9XCLrp5HsnYAg6rOg65SVXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIkhhbnNcIiB0eXBlZmFjZT1cIuWui+S9k1wiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJIYW50XCIgdHlwZWZhY2U9XCLmlrDntLDmmI7pq5RcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiQXJhYlwiIHR5cGVmYWNlPVwiVGltZXMgTmV3IFJvbWFuXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIkhlYnJcIiB0eXBlZmFjZT1cIlRpbWVzIE5ldyBSb21hblwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJUaGFpXCIgdHlwZWZhY2U9XCJUYWhvbWFcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiRXRoaVwiIHR5cGVmYWNlPVwiTnlhbGFcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiQmVuZ1wiIHR5cGVmYWNlPVwiVnJpbmRhXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIkd1anJcIiB0eXBlZmFjZT1cIlNocnV0aVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJLaG1yXCIgdHlwZWZhY2U9XCJNb29sQm9yYW5cIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiS25kYVwiIHR5cGVmYWNlPVwiVHVuZ2FcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiR3VydVwiIHR5cGVmYWNlPVwiUmFhdmlcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiQ2Fuc1wiIHR5cGVmYWNlPVwiRXVwaGVtaWFcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiQ2hlclwiIHR5cGVmYWNlPVwiUGxhbnRhZ2VuZXQgQ2hlcm9rZWVcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiWWlpaVwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IFlpIEJhaXRpXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIlRpYnRcIiB0eXBlZmFjZT1cIk1pY3Jvc29mdCBIaW1hbGF5YVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJUaGFhXCIgdHlwZWZhY2U9XCJNViBCb2xpXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIkRldmFcIiB0eXBlZmFjZT1cIk1hbmdhbFwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJUZWx1XCIgdHlwZWZhY2U9XCJHYXV0YW1pXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIlRhbWxcIiB0eXBlZmFjZT1cIkxhdGhhXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIlN5cmNcIiB0eXBlZmFjZT1cIkVzdHJhbmdlbG8gRWRlc3NhXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIk9yeWFcIiB0eXBlZmFjZT1cIkthbGluZ2FcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiTWx5bVwiIHR5cGVmYWNlPVwiS2FydGlrYVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJMYW9vXCIgdHlwZWZhY2U9XCJEb2tDaGFtcGFcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiU2luaFwiIHR5cGVmYWNlPVwiSXNrb29sYSBQb3RhXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIk1vbmdcIiB0eXBlZmFjZT1cIk1vbmdvbGlhbiBCYWl0aVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJWaWV0XCIgdHlwZWZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiVWlnaFwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IFVpZ2h1clwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJHZW9yXCIgdHlwZWZhY2U9XCJTeWxmYWVuXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgJzwvYTptYWpvckZvbnQ+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPGE6bWlub3JGb250Pic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpsYXRpbiB0eXBlZmFjZT1cIkNhbGlicmlcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmVhIHR5cGVmYWNlPVwiXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpjcyB0eXBlZmFjZT1cIlwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJKcGFuXCIgdHlwZWZhY2U9XCLvvK3vvLMg77yw44K044K344OD44KvXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIkhhbmdcIiB0eXBlZmFjZT1cIuunkeydgCDqs6DrlJVcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiSGFuc1wiIHR5cGVmYWNlPVwi5a6L5L2TXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIkhhbnRcIiB0eXBlZmFjZT1cIuaWsOe0sOaYjumrlFwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJBcmFiXCIgdHlwZWZhY2U9XCJBcmlhbFwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJIZWJyXCIgdHlwZWZhY2U9XCJBcmlhbFwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJUaGFpXCIgdHlwZWZhY2U9XCJUYWhvbWFcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiRXRoaVwiIHR5cGVmYWNlPVwiTnlhbGFcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiQmVuZ1wiIHR5cGVmYWNlPVwiVnJpbmRhXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIkd1anJcIiB0eXBlZmFjZT1cIlNocnV0aVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJLaG1yXCIgdHlwZWZhY2U9XCJEYXVuUGVuaFwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJLbmRhXCIgdHlwZWZhY2U9XCJUdW5nYVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJHdXJ1XCIgdHlwZWZhY2U9XCJSYWF2aVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJDYW5zXCIgdHlwZWZhY2U9XCJFdXBoZW1pYVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJDaGVyXCIgdHlwZWZhY2U9XCJQbGFudGFnZW5ldCBDaGVyb2tlZVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJZaWlpXCIgdHlwZWZhY2U9XCJNaWNyb3NvZnQgWWkgQmFpdGlcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiVGlidFwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IEhpbWFsYXlhXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIlRoYWFcIiB0eXBlZmFjZT1cIk1WIEJvbGlcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiRGV2YVwiIHR5cGVmYWNlPVwiTWFuZ2FsXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIlRlbHVcIiB0eXBlZmFjZT1cIkdhdXRhbWlcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiVGFtbFwiIHR5cGVmYWNlPVwiTGF0aGFcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiU3lyY1wiIHR5cGVmYWNlPVwiRXN0cmFuZ2VsbyBFZGVzc2FcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiT3J5YVwiIHR5cGVmYWNlPVwiS2FsaW5nYVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJNbHltXCIgdHlwZWZhY2U9XCJLYXJ0aWthXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIkxhb29cIiB0eXBlZmFjZT1cIkRva0NoYW1wYVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6Zm9udCBzY3JpcHQ9XCJTaW5oXCIgdHlwZWZhY2U9XCJJc2tvb2xhIFBvdGFcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiTW9uZ1wiIHR5cGVmYWNlPVwiTW9uZ29saWFuIEJhaXRpXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIlZpZXRcIiB0eXBlZmFjZT1cIkFyaWFsXCIvPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpmb250IHNjcmlwdD1cIlVpZ2hcIiB0eXBlZmFjZT1cIk1pY3Jvc29mdCBVaWdodXJcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmZvbnQgc2NyaXB0PVwiR2VvclwiIHR5cGVmYWNlPVwiU3lsZmFlblwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8L2E6bWlub3JGb250Pic7XG5cdG9bby5sZW5ndGhdID0gICAnPC9hOmZvbnRTY2hlbWU+JztcblxuXHRvW28ubGVuZ3RoXSA9ICAgJzxhOmZtdFNjaGVtZSBuYW1lPVwiT2ZmaWNlXCI+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPGE6ZmlsbFN0eWxlTHN0Pic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCIvPjwvYTpzb2xpZEZpbGw+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT1cIjFcIj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzxhOmdzTHN0Pic7XG5cdG9bby5sZW5ndGhdID0gICAgICAgJzxhOmdzIHBvcz1cIjBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTp0aW50IHZhbD1cIjUwMDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIzMDAwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICAnPGE6Z3MgcG9zPVwiMzUwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTp0aW50IHZhbD1cIjM3MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIzMDAwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICAnPGE6Z3MgcG9zPVwiMTAwMDAwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6dGludCB2YWw9XCIxNTAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMzUwMDAwXCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPic7XG5cdG9bby5sZW5ndGhdID0gICAgICAnPC9hOmdzTHN0Pic7XG5cdG9bby5sZW5ndGhdID0gICAgICAnPGE6bGluIGFuZz1cIjE2MjAwMDAwXCIgc2NhbGVkPVwiMVwiLz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPC9hOmdyYWRGaWxsPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9XCIxXCI+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICc8YTpnc0xzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgICc8YTpncyBwb3M9XCIwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6dGludCB2YWw9XCIxMDAwMDBcIi8+PGE6c2hhZGUgdmFsPVwiMTAwMDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxMzAwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICAnPGE6Z3MgcG9zPVwiMTAwMDAwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6dGludCB2YWw9XCI1MDAwMFwiLz48YTpzaGFkZSB2YWw9XCIxMDAwMDBcIi8+PGE6c2F0TW9kIHZhbD1cIjM1MDAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzwvYTpnc0xzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzxhOmxpbiBhbmc9XCIxNjIwMDAwMFwiIHNjYWxlZD1cIjBcIi8+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzwvYTpncmFkRmlsbD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8L2E6ZmlsbFN0eWxlTHN0Pic7XG5cdG9bby5sZW5ndGhdID0gICAgJzxhOmxuU3R5bGVMc3Q+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmxuIHc9XCI5NTI1XCIgY2FwPVwiZmxhdFwiIGNtcGQ9XCJzbmdcIiBhbGduPVwiY3RyXCI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiPjxhOnNoYWRlIHZhbD1cIjk1MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxMDUwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD1cInNvbGlkXCIvPjwvYTpsbj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6bG4gdz1cIjI1NDAwXCIgY2FwPVwiZmxhdFwiIGNtcGQ9XCJzbmdcIiBhbGduPVwiY3RyXCI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD1cInNvbGlkXCIvPjwvYTpsbj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6bG4gdz1cIjM4MTAwXCIgY2FwPVwiZmxhdFwiIGNtcGQ9XCJzbmdcIiBhbGduPVwiY3RyXCI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD1cInNvbGlkXCIvPjwvYTpsbj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8L2E6bG5TdHlsZUxzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8YTplZmZlY3RTdHlsZUxzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6ZWZmZWN0U3R5bGU+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICc8YTplZmZlY3RMc3Q+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICAnPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9XCI0MDAwMFwiIGRpc3Q9XCIyMDAwMFwiIGRpcj1cIjU0MDAwMDBcIiByb3RXaXRoU2hhcGU9XCIwXCI+PGE6c3JnYkNsciB2YWw9XCIwMDAwMDBcIj48YTphbHBoYSB2YWw9XCIzODAwMFwiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Pic7XG5cdG9bby5sZW5ndGhdID0gICAgICAnPC9hOmVmZmVjdExzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPC9hOmVmZmVjdFN0eWxlPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTplZmZlY3RTdHlsZT4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzxhOmVmZmVjdExzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgICc8YTpvdXRlclNoZHcgYmx1clJhZD1cIjQwMDAwXCIgZGlzdD1cIjIzMDAwXCIgZGlyPVwiNTQwMDAwMFwiIHJvdFdpdGhTaGFwZT1cIjBcIj48YTpzcmdiQ2xyIHZhbD1cIjAwMDAwMFwiPjxhOmFscGhhIHZhbD1cIjM1MDAwXCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICc8L2E6ZWZmZWN0THN0Pic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8L2E6ZWZmZWN0U3R5bGU+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmVmZmVjdFN0eWxlPic7XG5cdG9bby5sZW5ndGhdID0gICAgICAnPGE6ZWZmZWN0THN0Pic7XG5cdG9bby5sZW5ndGhdID0gICAgICAgJzxhOm91dGVyU2hkdyBibHVyUmFkPVwiNDAwMDBcIiBkaXN0PVwiMjMwMDBcIiBkaXI9XCI1NDAwMDAwXCIgcm90V2l0aFNoYXBlPVwiMFwiPjxhOnNyZ2JDbHIgdmFsPVwiMDAwMDAwXCI+PGE6YWxwaGEgdmFsPVwiMzUwMDBcIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzwvYTplZmZlY3RMc3Q+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICc8YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PVwib3J0aG9ncmFwaGljRnJvbnRcIj48YTpyb3QgbGF0PVwiMFwiIGxvbj1cIjBcIiByZXY9XCIwXCIvPjwvYTpjYW1lcmE+PGE6bGlnaHRSaWcgcmlnPVwidGhyZWVQdFwiIGRpcj1cInRcIj48YTpyb3QgbGF0PVwiMFwiIGxvbj1cIjBcIiByZXY9XCIxMjAwMDAwXCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzxhOnNwM2Q+PGE6YmV2ZWxUIHc9XCI2MzUwMFwiIGg9XCIyNTQwMFwiLz48L2E6c3AzZD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPC9hOmVmZmVjdFN0eWxlPic7XG5cdG9bby5sZW5ndGhdID0gICAgJzwvYTplZmZlY3RTdHlsZUxzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8YTpiZ0ZpbGxTdHlsZUxzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAnPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz48L2E6c29saWRGaWxsPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9XCIxXCI+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICc8YTpnc0xzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgICc8YTpncyBwb3M9XCIwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6dGludCB2YWw9XCI0MDAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMzUwMDAwXCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPic7XG5cdG9bby5sZW5ndGhdID0gICAgICAgJzxhOmdzIHBvcz1cIjQwMDAwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6dGludCB2YWw9XCI0NTAwMFwiLz48YTpzaGFkZSB2YWw9XCI5OTAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMzUwMDAwXCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPic7XG5cdG9bby5sZW5ndGhdID0gICAgICAgJzxhOmdzIHBvcz1cIjEwMDAwMFwiPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiPjxhOnNoYWRlIHZhbD1cIjIwMDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIyNTUwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICc8L2E6Z3NMc3Q+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICc8YTpwYXRoIHBhdGg9XCJjaXJjbGVcIj48YTpmaWxsVG9SZWN0IGw9XCI1MDAwMFwiIHQ9XCItODAwMDBcIiByPVwiNTAwMDBcIiBiPVwiMTgwMDAwXCIvPjwvYTpwYXRoPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8L2E6Z3JhZEZpbGw+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgJzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT1cIjFcIj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzxhOmdzTHN0Pic7XG5cdG9bby5sZW5ndGhdID0gICAgICAgJzxhOmdzIHBvcz1cIjBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTp0aW50IHZhbD1cIjgwMDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIzMDAwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAgICAnPGE6Z3MgcG9zPVwiMTAwMDAwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6c2hhZGUgdmFsPVwiMzAwMDBcIi8+PGE6c2F0TW9kIHZhbD1cIjIwMDAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzwvYTpnc0xzdD4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICAgJzxhOnBhdGggcGF0aD1cImNpcmNsZVwiPjxhOmZpbGxUb1JlY3QgbD1cIjUwMDAwXCIgdD1cIjUwMDAwXCIgcj1cIjUwMDAwXCIgYj1cIjUwMDAwXCIvPjwvYTpwYXRoPic7XG5cdG9bby5sZW5ndGhdID0gICAgICc8L2E6Z3JhZEZpbGw+Jztcblx0b1tvLmxlbmd0aF0gPSAgICAnPC9hOmJnRmlsbFN0eWxlTHN0Pic7XG5cdG9bby5sZW5ndGhdID0gICAnPC9hOmZtdFNjaGVtZT4nO1xuXHRvW28ubGVuZ3RoXSA9ICAnPC9hOnRoZW1lRWxlbWVudHM+JztcblxuXHRvW28ubGVuZ3RoXSA9ICAnPGE6b2JqZWN0RGVmYXVsdHM+Jztcblx0b1tvLmxlbmd0aF0gPSAgICc8YTpzcERlZj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9XCIxXCI+PGE6c2NoZW1lQ2xyIHZhbD1cImFjY2VudDFcIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PVwiM1wiPjxhOnNjaGVtZUNsciB2YWw9XCJhY2NlbnQxXCIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9XCIyXCI+PGE6c2NoZW1lQ2xyIHZhbD1cImFjY2VudDFcIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD1cIm1pbm9yXCI+PGE6c2NoZW1lQ2xyIHZhbD1cImx0MVwiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+Jztcblx0b1tvLmxlbmd0aF0gPSAgICc8L2E6c3BEZWY+Jztcblx0b1tvLmxlbmd0aF0gPSAgICc8YTpsbkRlZj4nO1xuXHRvW28ubGVuZ3RoXSA9ICAgICc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9XCIyXCI+PGE6c2NoZW1lQ2xyIHZhbD1cImFjY2VudDFcIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PVwiMFwiPjxhOnNjaGVtZUNsciB2YWw9XCJhY2NlbnQxXCIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9XCIxXCI+PGE6c2NoZW1lQ2xyIHZhbD1cImFjY2VudDFcIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD1cIm1pbm9yXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInR4MVwiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+Jztcblx0b1tvLmxlbmd0aF0gPSAgICc8L2E6bG5EZWY+Jztcblx0b1tvLmxlbmd0aF0gPSAgJzwvYTpvYmplY3REZWZhdWx0cz4nO1xuXHRvW28ubGVuZ3RoXSA9ICAnPGE6ZXh0cmFDbHJTY2hlbWVMc3QvPic7XG5cdG9bby5sZW5ndGhdID0gJzwvYTp0aGVtZT4nO1xuXHRyZXR1cm4gby5qb2luKFwiXCIpO1xufVxuLyogW01TLVhMU10gMi40LjMyNiBUT0RPOiBwYXlsb2FkIGlzIGEgemlwIGZpbGUgKi9cbmZ1bmN0aW9uIHBhcnNlX1RoZW1lKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgZW5kID0gYmxvYi5sICsgbGVuZ3RoO1xuXHR2YXIgZHdUaGVtZVZlcnNpb24gPSBibG9iLnJlYWRfc2hpZnQoNCk7XG5cdGlmKGR3VGhlbWVWZXJzaW9uID09PSAxMjQyMjYpIHJldHVybjtcblx0aWYoIW9wdHMuY2VsbFN0eWxlcyB8fCAhanN6aXApIHsgYmxvYi5sID0gZW5kOyByZXR1cm47IH1cblx0dmFyIGRhdGEgPSBibG9iLnNsaWNlKGJsb2IubCk7XG5cdGJsb2IubCA9IGVuZDtcblx0dmFyIHppcDsgdHJ5IHsgemlwID0gbmV3IGpzemlwKGRhdGEpOyB9IGNhdGNoKGUpIHsgcmV0dXJuOyB9XG5cdHZhciB0aGVtZVhNTCA9IGdldHppcHN0cih6aXAsIFwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbFwiLCB0cnVlKTtcblx0aWYoIXRoZW1lWE1MKSByZXR1cm47XG5cdHJldHVybiBwYXJzZV90aGVtZV94bWwodGhlbWVYTUwsIG9wdHMpO1xufVxuXG4vKiAyLjUuNDkgKi9cbmZ1bmN0aW9uIHBhcnNlX0NvbG9yVGhlbWUoYmxvYikgeyByZXR1cm4gYmxvYi5yZWFkX3NoaWZ0KDQpOyB9XG5cbi8qIDIuNS4xNTUgKi9cbmZ1bmN0aW9uIHBhcnNlX0Z1bGxDb2xvckV4dChibG9iKSB7XG5cdHZhciBvID0ge307XG5cdG8ueGNsclR5cGUgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdG8ublRpbnRTaGFkZSA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0c3dpdGNoKG8ueGNsclR5cGUpIHtcblx0XHRjYXNlIDA6IGJsb2IubCArPSA0OyBicmVhaztcblx0XHRjYXNlIDE6IG8ueGNsclZhbHVlID0gcGFyc2VfSWN2WEYoYmxvYiwgNCk7IGJyZWFrO1xuXHRcdGNhc2UgMjogby54Y2xyVmFsdWUgPSBwYXJzZV9Mb25nUkdCQShibG9iLCA0KTsgYnJlYWs7XG5cdFx0Y2FzZSAzOiBvLnhjbHJWYWx1ZSA9IHBhcnNlX0NvbG9yVGhlbWUoYmxvYiwgNCk7IGJyZWFrO1xuXHRcdGNhc2UgNDogYmxvYi5sICs9IDQ7IGJyZWFrO1xuXHR9XG5cdGJsb2IubCArPSA4O1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi41LjE2NCBUT0RPOiByZWFkIDcgYml0cyovXG5mdW5jdGlvbiBwYXJzZV9JY3ZYRihibG9iLCBsZW5ndGgpIHtcblx0cmV0dXJuIHBhcnNlbm9vcChibG9iLCBsZW5ndGgpO1xufVxuXG4vKiAyLjUuMjgwICovXG5mdW5jdGlvbiBwYXJzZV9YRkV4dEdyYWRpZW50KGJsb2IsIGxlbmd0aCkge1xuXHRyZXR1cm4gcGFyc2Vub29wKGJsb2IsIGxlbmd0aCk7XG59XG5cbi8qIDIuNS4xMDggKi9cbmZ1bmN0aW9uIHBhcnNlX0V4dFByb3AoYmxvYikge1xuXHR2YXIgZXh0VHlwZSA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0dmFyIGNiID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgbyA9IFtleHRUeXBlXTtcblx0c3dpdGNoKGV4dFR5cGUpIHtcblx0XHRjYXNlIDB4MDQ6IGNhc2UgMHgwNTogY2FzZSAweDA3OiBjYXNlIDB4MDg6XG5cdFx0Y2FzZSAweDA5OiBjYXNlIDB4MEE6IGNhc2UgMHgwQjogY2FzZSAweDBEOlxuXHRcdFx0b1sxXSA9IHBhcnNlX0Z1bGxDb2xvckV4dChibG9iLCBjYik7IGJyZWFrO1xuXHRcdGNhc2UgMHgwNjogb1sxXSA9IHBhcnNlX1hGRXh0R3JhZGllbnQoYmxvYiwgY2IpOyBicmVhaztcblx0XHRjYXNlIDB4MEU6IGNhc2UgMHgwRjogb1sxXSA9IGJsb2IucmVhZF9zaGlmdChjYiA9PT0gNSA/IDEgOiAyKTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIEV4dFByb3AgdHlwZTogXCIgKyBleHRUeXBlICsgXCIgXCIgKyBjYik7XG5cdH1cblx0cmV0dXJuIG87XG59XG5cbi8qIDIuNC4zNTUgKi9cbmZ1bmN0aW9uIHBhcnNlX1hGRXh0KGJsb2IsIGxlbmd0aCkge1xuXHR2YXIgZW5kID0gYmxvYi5sICsgbGVuZ3RoO1xuXHRibG9iLmwgKz0gMjtcblx0dmFyIGl4ZmUgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdGJsb2IubCArPSAyO1xuXHR2YXIgY2V4dHMgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBleHQgPSBbXTtcblx0d2hpbGUoY2V4dHMtLSA+IDApIGV4dC5wdXNoKHBhcnNlX0V4dFByb3AoYmxvYiwgZW5kLWJsb2IubCkpO1xuXHRyZXR1cm4ge2l4ZmU6aXhmZSwgZXh0OmV4dH07XG59XG5cbi8qIHhmIGlzIGFuIFhGLCBzZWUgcGFyc2VfWEZFeHQgZm9yIHhmZXh0ICovXG5mdW5jdGlvbiB1cGRhdGVfeGZleHQoeGYsIHhmZXh0KSB7XG5cdHhmZXh0LmZvckVhY2goZnVuY3Rpb24oeGZlKSB7XG5cdFx0c3dpdGNoKHhmZVswXSkgeyAvKiAyLjUuMTA4IGV4dFByb3BEYXRhICovXG5cdFx0XHRjYXNlIDB4MDQ6IGJyZWFrOyAvKiBmb3JlZ3JvdW5kIGNvbG9yICovXG5cdFx0XHRjYXNlIDB4MDU6IGJyZWFrOyAvKiBiYWNrZ3JvdW5kIGNvbG9yICovXG5cdFx0XHRjYXNlIDB4MDY6IGJyZWFrOyAvKiBncmFkaWVudCBmaWxsICovXG5cdFx0XHRjYXNlIDB4MDc6IGJyZWFrOyAvKiB0b3AgY2VsbCBib3JkZXIgY29sb3IgKi9cblx0XHRcdGNhc2UgMHgwODogYnJlYWs7IC8qIGJvdHRvbSBjZWxsIGJvcmRlciBjb2xvciAqL1xuXHRcdFx0Y2FzZSAweDA5OiBicmVhazsgLyogbGVmdCBjZWxsIGJvcmRlciBjb2xvciAqL1xuXHRcdFx0Y2FzZSAweDBhOiBicmVhazsgLyogcmlnaHQgY2VsbCBib3JkZXIgY29sb3IgKi9cblx0XHRcdGNhc2UgMHgwYjogYnJlYWs7IC8qIGRpYWdvbmFsIGNlbGwgYm9yZGVyIGNvbG9yICovXG5cdFx0XHRjYXNlIDB4MGQ6IGJyZWFrOyAvKiB0ZXh0IGNvbG9yICovXG5cdFx0XHRjYXNlIDB4MGU6IGJyZWFrOyAvKiBmb250IHNjaGVtZSAqL1xuXHRcdFx0Y2FzZSAweDBmOiBicmVhazsgLyogaW5kZW50YXRpb24gbGV2ZWwgKi9cblx0XHR9XG5cdH0pO1xufVxuXG4vKiAxOC42IENhbGN1bGF0aW9uIENoYWluICovXG5mdW5jdGlvbiBwYXJzZV9jY194bWwoZGF0YSkge1xuXHR2YXIgZCA9IFtdO1xuXHRpZighZGF0YSkgcmV0dXJuIGQ7XG5cdHZhciBpID0gMTtcblx0KGRhdGEubWF0Y2godGFncmVnZXgpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih4KSB7XG5cdFx0dmFyIHkgPSBwYXJzZXhtbHRhZyh4KTtcblx0XHRzd2l0Y2goeVswXSkge1xuXHRcdFx0Y2FzZSAnPD94bWwnOiBicmVhaztcblx0XHRcdC8qIDE4LjYuMiAgY2FsY0NoYWluIENUX0NhbGNDaGFpbiAxICovXG5cdFx0XHRjYXNlICc8Y2FsY0NoYWluJzogY2FzZSAnPGNhbGNDaGFpbj4nOiBjYXNlICc8L2NhbGNDaGFpbj4nOiBicmVhaztcblx0XHRcdC8qIDE4LjYuMSAgYyBDVF9DYWxjQ2VsbCAxICovXG5cdFx0XHRjYXNlICc8Yyc6IGRlbGV0ZSB5WzBdOyBpZih5LmkpIGkgPSB5Lmk7IGVsc2UgeS5pID0gaTsgZC5wdXNoKHkpOyBicmVhaztcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZDtcbn1cblxuLy9mdW5jdGlvbiB3cml0ZV9jY194bWwoZGF0YSwgb3B0cykgeyB9XG5cbi8qIFtNUy1YTFNCXSAyLjYuNC4xICovXG5mdW5jdGlvbiBwYXJzZV9CcnRDYWxjQ2hhaW5JdGVtJChkYXRhKSB7XG5cdHZhciBvdXQgPSB7fTtcblx0b3V0LmkgPSBkYXRhLnJlYWRfc2hpZnQoNCk7XG5cdHZhciBjZWxsID0ge307XG5cdGNlbGwuciA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0Y2VsbC5jID0gZGF0YS5yZWFkX3NoaWZ0KDQpO1xuXHRvdXQuciA9IGVuY29kZV9jZWxsKGNlbGwpO1xuXHR2YXIgZmxhZ3MgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cdGlmKGZsYWdzICYgMHgyKSBvdXQubCA9ICcxJztcblx0aWYoZmxhZ3MgJiAweDgpIG91dC5hID0gJzEnO1xuXHRyZXR1cm4gb3V0O1xufVxuXG4vKiAxOC42IENhbGN1bGF0aW9uIENoYWluICovXG5mdW5jdGlvbiBwYXJzZV9jY19iaW4oZGF0YSwgbmFtZSwgb3B0cykge1xuXHR2YXIgb3V0ID0gW107XG5cdHZhciBwYXNzID0gZmFsc2U7XG5cdHJlY29yZGhvcHBlcihkYXRhLCBmdW5jdGlvbiBob3BwZXJfY2ModmFsLCBSX24sIFJUKSB7XG5cdFx0c3dpdGNoKFJUKSB7XG5cdFx0XHRjYXNlIDB4MDAzRjogLyogJ0JydENhbGNDaGFpbkl0ZW0kJyAqL1xuXHRcdFx0XHRvdXQucHVzaCh2YWwpOyBicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkJlZ2luXCIpID4gMCl7LyogZW1wdHkgKi99XG5cdFx0XHRcdGVsc2UgaWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkVuZFwiKSA+IDApey8qIGVtcHR5ICovfVxuXHRcdFx0XHRlbHNlIGlmKCFwYXNzIHx8IG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHJlY29yZCBcIiArIFJUICsgXCIgXCIgKyBSX24pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBvdXQ7XG59XG5cbi8vZnVuY3Rpb24gd3JpdGVfY2NfYmluKGRhdGEsIG9wdHMpIHsgfVxuLyogMTguMTQgU3VwcGxlbWVudGFyeSBXb3JrYm9vayBEYXRhICovXG5mdW5jdGlvbiBwYXJzZV94bGlua194bWwoKSB7XG5cdC8vdmFyIG9wdHMgPSBfb3B0cyB8fCB7fTtcblx0Ly9pZihvcHRzLldURikgdGhyb3cgXCJYTFNYIEV4dGVybmFsIExpbmtcIjtcbn1cblxuLyogW01TLVhMU0JdIDIuMS43LjI1IEV4dGVybmFsIExpbmsgKi9cbmZ1bmN0aW9uIHBhcnNlX3hsaW5rX2JpbihkYXRhLCBuYW1lLCBfb3B0cykge1xuXHRpZighZGF0YSkgcmV0dXJuIGRhdGE7XG5cdHZhciBvcHRzID0gX29wdHMgfHwge307XG5cblx0dmFyIHBhc3MgPSBmYWxzZSwgZW5kID0gZmFsc2U7XG5cblx0cmVjb3JkaG9wcGVyKGRhdGEsIGZ1bmN0aW9uIHhsaW5rX3BhcnNlKHZhbCwgUl9uLCBSVCkge1xuXHRcdGlmKGVuZCkgcmV0dXJuO1xuXHRcdHN3aXRjaChSVCkge1xuXHRcdFx0Y2FzZSAweDAxNjc6IC8qICdCcnRTdXBUYWJzJyAqL1xuXHRcdFx0Y2FzZSAweDAxNkI6IC8qICdCcnRFeHRlcm5UYWJsZVN0YXJ0JyAqL1xuXHRcdFx0Y2FzZSAweDAxNkM6IC8qICdCcnRFeHRlcm5UYWJsZUVuZCcgKi9cblx0XHRcdGNhc2UgMHgwMTZFOiAvKiAnQnJ0RXh0ZXJuUm93SGRyJyAqL1xuXHRcdFx0Y2FzZSAweDAxNkY6IC8qICdCcnRFeHRlcm5DZWxsQmxhbmsnICovXG5cdFx0XHRjYXNlIDB4MDE3MDogLyogJ0JydEV4dGVybkNlbGxSZWFsJyAqL1xuXHRcdFx0Y2FzZSAweDAxNzE6IC8qICdCcnRFeHRlcm5DZWxsQm9vbCcgKi9cblx0XHRcdGNhc2UgMHgwMTcyOiAvKiAnQnJ0RXh0ZXJuQ2VsbEVycm9yJyAqL1xuXHRcdFx0Y2FzZSAweDAxNzM6IC8qICdCcnRFeHRlcm5DZWxsU3RyaW5nJyAqL1xuXHRcdFx0Y2FzZSAweDAxRDg6IC8qICdCcnRFeHRlcm5WYWx1ZU1ldGEnICovXG5cdFx0XHRjYXNlIDB4MDI0MTogLyogJ0JydFN1cE5hbWVTdGFydCcgKi9cblx0XHRcdGNhc2UgMHgwMjQyOiAvKiAnQnJ0U3VwTmFtZVZhbHVlU3RhcnQnICovXG5cdFx0XHRjYXNlIDB4MDI0MzogLyogJ0JydFN1cE5hbWVWYWx1ZUVuZCcgKi9cblx0XHRcdGNhc2UgMHgwMjQ0OiAvKiAnQnJ0U3VwTmFtZU51bScgKi9cblx0XHRcdGNhc2UgMHgwMjQ1OiAvKiAnQnJ0U3VwTmFtZUVycicgKi9cblx0XHRcdGNhc2UgMHgwMjQ2OiAvKiAnQnJ0U3VwTmFtZVN0JyAqL1xuXHRcdFx0Y2FzZSAweDAyNDc6IC8qICdCcnRTdXBOYW1lTmlsJyAqL1xuXHRcdFx0Y2FzZSAweDAyNDg6IC8qICdCcnRTdXBOYW1lQm9vbCcgKi9cblx0XHRcdGNhc2UgMHgwMjQ5OiAvKiAnQnJ0U3VwTmFtZUZtbGEnICovXG5cdFx0XHRjYXNlIDB4MDI0QTogLyogJ0JydFN1cE5hbWVCaXRzJyAqL1xuXHRcdFx0Y2FzZSAweDAyNEI6IC8qICdCcnRTdXBOYW1lRW5kJyAqL1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAweDAwMjM6IC8qICdCcnRGUlRCZWdpbicgKi9cblx0XHRcdFx0cGFzcyA9IHRydWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMjQ6IC8qICdCcnRGUlRFbmQnICovXG5cdFx0XHRcdHBhc3MgPSBmYWxzZTsgYnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmKChSX258fFwiXCIpLmluZGV4T2YoXCJCZWdpblwiKSA+IDApey8qIGVtcHR5ICovfVxuXHRcdFx0XHRlbHNlIGlmKChSX258fFwiXCIpLmluZGV4T2YoXCJFbmRcIikgPiAwKXsvKiBlbXB0eSAqL31cblx0XHRcdFx0ZWxzZSBpZighcGFzcyB8fCBvcHRzLldURikgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCByZWNvcmQgXCIgKyBSVC50b1N0cmluZygxNikgKyBcIiBcIiArIFJfbik7XG5cdFx0fVxuXHR9LCBvcHRzKTtcbn1cblJFTFMuSU1HID0gXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlXCI7XG5SRUxTLkRSQVcgPSBcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZHJhd2luZ1wiO1xuLyogMjAuNSBEcmF3aW5nTUwgLSBTcHJlYWRzaGVldE1MIERyYXdpbmcgKi9cbmZ1bmN0aW9uIHBhcnNlX2RyYXdpbmcoZGF0YSwgcmVscykge1xuXHRpZighZGF0YSkgcmV0dXJuIFwiPz9cIjtcblx0Lypcblx0ICBDaGFydHNoZWV0IERyYXdpbmc6XG5cdCAgIC0gMjAuNS4yLjM1IHdzRHIgQ1RfRHJhd2luZ1xuXHQgICAgLSAyMC41LjIuMSAgYWJzb2x1dGVBbmNob3IgQ1RfQWJzb2x1dGVBbmNob3Jcblx0ICAgICAtIDIwLjUuMi4xNiBncmFwaGljRnJhbWUgQ1RfR3JhcGhpY2FsT2JqZWN0RnJhbWVcblx0ICAgICAgLSAyMC4xLjIuMi4xNiBncmFwaGljIENUX0dyYXBoaWNhbE9iamVjdFxuXHQgICAgICAgLSAyMC4xLjIuMi4xNyBncmFwaGljRGF0YSBDVF9HcmFwaGljYWxPYmplY3REYXRhXG4gICAgICAgICAgLSBjaGFydCByZWZlcmVuY2Vcblx0ICAgdGhlIGFjdHVhbCB0eXBlIGlzIGJhc2VkIG9uIHRoZSBVUkkgb2YgdGhlIGdyYXBoaWNEYXRhXG5cdFx0VE9ETzogaGFuZGxlIGVtYmVkZGVkIGNoYXJ0cyBhbmQgb3RoZXIgdHlwZXMgb2YgZ3JhcGhpY3Ncblx0Ki9cblx0dmFyIGlkID0gKGRhdGEubWF0Y2goLzxjOmNoYXJ0IFtePl0qcjppZD1cIihbXlwiXSopXCIvKXx8W1wiXCIsXCJcIl0pWzFdO1xuXG5cdHJldHVybiByZWxzWychaWQnXVtpZF0uVGFyZ2V0O1xufVxuXG4vKiBMLjUuNS4yIFNwcmVhZHNoZWV0TUwgQ29tbWVudHMgKyBWTUwgU2NoZW1hICovXG52YXIgX3NoYXBlaWQgPSAxMDI0O1xuZnVuY3Rpb24gd3JpdGVfY29tbWVudHNfdm1sKHJJZCwgY29tbWVudHMpIHtcblx0dmFyIGNzaXplID0gWzIxNjAwLCAyMTYwMF07XG5cdC8qIEwuNS4yLjEuMiBQYXRoIEF0dHJpYnV0ZSAqL1xuXHR2YXIgYmJveCA9IFtcIm0wLDBsMFwiLGNzaXplWzFdLGNzaXplWzBdLGNzaXplWzFdLGNzaXplWzBdLFwiMHhlXCJdLmpvaW4oXCIsXCIpO1xuXHR2YXIgbyA9IFtcblx0XHR3cml0ZXh0YWcoXCJ4bWxcIiwgbnVsbCwgeyAneG1sbnM6dic6IFhMTUxOUy52LCAneG1sbnM6byc6IFhMTUxOUy5vLCAneG1sbnM6eCc6IFhMTUxOUy54LCAneG1sbnM6bXYnOiBYTE1MTlMubXYgfSkucmVwbGFjZSgvXFwvPi8sXCI+XCIpLFxuXHRcdHdyaXRleHRhZyhcIm86c2hhcGVsYXlvdXRcIiwgd3JpdGV4dGFnKFwibzppZG1hcFwiLCBudWxsLCB7J3Y6ZXh0JzpcImVkaXRcIiwgJ2RhdGEnOnJJZH0pLCB7J3Y6ZXh0JzpcImVkaXRcIn0pLFxuXHRcdHdyaXRleHRhZyhcInY6c2hhcGV0eXBlXCIsIFtcblx0XHRcdHdyaXRleHRhZyhcInY6c3Ryb2tlXCIsIG51bGwsIHtqb2luc3R5bGU6XCJtaXRlclwifSksXG5cdFx0XHR3cml0ZXh0YWcoXCJ2OnBhdGhcIiwgbnVsbCwge2dyYWRpZW50c2hhcGVvazpcInRcIiwgJ286Y29ubmVjdHR5cGUnOlwicmVjdFwifSlcblx0XHRdLmpvaW4oXCJcIiksIHtpZDpcIl94MDAwMF90MjAyXCIsICdvOnNwdCc6MjAyLCBjb29yZHNpemU6Y3NpemUuam9pbihcIixcIikscGF0aDpiYm94fSlcblx0XTtcblx0d2hpbGUoX3NoYXBlaWQgPCBySWQgKiAxMDAwKSBfc2hhcGVpZCArPSAxMDAwO1xuXG5cdGNvbW1lbnRzLm1hcChmdW5jdGlvbih4KSB7IHJldHVybiBkZWNvZGVfY2VsbCh4WzBdKTsgfSkuZm9yRWFjaChmdW5jdGlvbihjKSB7IG8gPSBvLmNvbmNhdChbXG5cdCc8djpzaGFwZScgKyB3eHRfaGVscGVyKHtcblx0XHRpZDonX3gwMDAwX3MnICsgKCsrX3NoYXBlaWQpLFxuXHRcdHR5cGU6XCIjX3gwMDAwX3QyMDJcIixcblx0XHRzdHlsZTpcInBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6NXB0O3dpZHRoOjEwNHB0O2hlaWdodDo2NHB0O3otaW5kZXg6MTA7dmlzaWJpbGl0eTpoaWRkZW5cIixcblx0XHRmaWxsY29sb3I6XCIjRUNGQUQ0XCIsXG5cdFx0c3Ryb2tlY29sb3I6XCIjZWRlYWExXCJcblx0fSkgKyAnPicsXG5cdFx0d3JpdGV4dGFnKCd2OmZpbGwnLCB3cml0ZXh0YWcoXCJvOmZpbGxcIiwgbnVsbCwge3R5cGU6XCJncmFkaWVudFVuc2NhbGVkXCIsICd2OmV4dCc6XCJ2aWV3XCJ9KSwgeydjb2xvcjInOlwiI0JFRkY4MlwiLCAnYW5nbGUnOlwiLTE4MFwiLCAndHlwZSc6XCJncmFkaWVudFwifSksXG5cdFx0d3JpdGV4dGFnKFwidjpzaGFkb3dcIiwgbnVsbCwge29uOlwidFwiLCAnb2JzY3VyZWQnOlwidFwifSksXG5cdFx0d3JpdGV4dGFnKFwidjpwYXRoXCIsIG51bGwsIHsnbzpjb25uZWN0dHlwZSc6XCJub25lXCJ9KSxcblx0XHQnPHY6dGV4dGJveD48ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+PC9kaXY+PC92OnRleHRib3g+Jyxcblx0XHQnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPVwiTm90ZVwiPicsXG5cdFx0XHQnPHg6TW92ZVdpdGhDZWxscy8+Jyxcblx0XHRcdCc8eDpTaXplV2l0aENlbGxzLz4nLFxuXHRcdFx0LyogUGFydCA0IDE5LjQuMi4zIEFuY2hvciAoQW5jaG9yKSAqL1xuXHRcdFx0d3JpdGV0YWcoJ3g6QW5jaG9yJywgW2MuYywgMCwgYy5yLCAwLCBjLmMrMywgMTAwLCBjLnIrNSwgMTAwXS5qb2luKFwiLFwiKSksXG5cdFx0XHR3cml0ZXRhZygneDpBdXRvRmlsbCcsIFwiRmFsc2VcIiksXG5cdFx0XHR3cml0ZXRhZygneDpSb3cnLCBTdHJpbmcoYy5yKSksXG5cdFx0XHR3cml0ZXRhZygneDpDb2x1bW4nLCBTdHJpbmcoYy5jKSksXG5cdFx0XHQnPHg6VmlzaWJsZS8+Jyxcblx0XHQnPC94OkNsaWVudERhdGE+Jyxcblx0JzwvdjpzaGFwZT4nXG5cdF0pOyB9KTtcblx0by5wdXNoKCc8L3htbD4nKTtcblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cblxuUkVMUy5DTU5UID0gXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzXCI7XG5cbmZ1bmN0aW9uIHBhcnNlX2NvbW1lbnRzKHppcCwgZGlyQ29tbWVudHMsIHNoZWV0cywgc2hlZXRSZWxzLCBvcHRzKSB7XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gZGlyQ29tbWVudHMubGVuZ3RoOyArK2kpIHtcblx0XHR2YXIgY2Fub25pY2FscGF0aD1kaXJDb21tZW50c1tpXTtcblx0XHR2YXIgY29tbWVudHM9cGFyc2VfY21udChnZXR6aXBkYXRhKHppcCwgY2Fub25pY2FscGF0aC5yZXBsYWNlKC9eXFwvLywnJyksIHRydWUpLCBjYW5vbmljYWxwYXRoLCBvcHRzKTtcblx0XHRpZighY29tbWVudHMgfHwgIWNvbW1lbnRzLmxlbmd0aCkgY29udGludWU7XG5cdFx0Ly8gZmluZCB0aGUgc2hlZXRzIHRhcmdldGVkIGJ5IHRoZXNlIGNvbW1lbnRzXG5cdFx0dmFyIHNoZWV0TmFtZXMgPSBrZXlzKHNoZWV0cyk7XG5cdFx0Zm9yKHZhciBqID0gMDsgaiAhPSBzaGVldE5hbWVzLmxlbmd0aDsgKytqKSB7XG5cdFx0XHR2YXIgc2hlZXROYW1lID0gc2hlZXROYW1lc1tqXTtcblx0XHRcdHZhciByZWxzID0gc2hlZXRSZWxzW3NoZWV0TmFtZV07XG5cdFx0XHRpZihyZWxzKSB7XG5cdFx0XHRcdHZhciByZWwgPSByZWxzW2Nhbm9uaWNhbHBhdGhdO1xuXHRcdFx0XHRpZihyZWwpIGluc2VydENvbW1lbnRzSW50b1NoZWV0KHNoZWV0TmFtZSwgc2hlZXRzW3NoZWV0TmFtZV0sIGNvbW1lbnRzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0Q29tbWVudHNJbnRvU2hlZXQoc2hlZXROYW1lLCBzaGVldCwgY29tbWVudHMpIHtcblx0dmFyIGRlbnNlID0gQXJyYXkuaXNBcnJheShzaGVldCk7XG5cdHZhciBjZWxsLCByO1xuXHRjb21tZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGNvbW1lbnQpIHtcblx0XHRpZihkZW5zZSkge1xuXHRcdFx0ciA9IGRlY29kZV9jZWxsKGNvbW1lbnQucmVmKTtcblx0XHRcdGlmKCFzaGVldFtyLnJdKSBzaGVldFtyLnJdID0gW107XG5cdFx0XHRjZWxsID0gc2hlZXRbci5yXVtyLmNdO1xuXHRcdH0gZWxzZSBjZWxsID0gc2hlZXRbY29tbWVudC5yZWZdO1xuXHRcdGlmICghY2VsbCkge1xuXHRcdFx0Y2VsbCA9IHt9O1xuXHRcdFx0aWYoZGVuc2UpIHNoZWV0W3Iucl1bci5jXSA9IGNlbGw7XG5cdFx0XHRlbHNlIHNoZWV0W2NvbW1lbnQucmVmXSA9IGNlbGw7XG5cdFx0XHR2YXIgcmFuZ2UgPSBzYWZlX2RlY29kZV9yYW5nZShzaGVldFtcIiFyZWZcIl18fFwiQkRXR08xMDAwMDAxOkExXCIpO1xuXHRcdFx0dmFyIHRoaXNDZWxsID0gZGVjb2RlX2NlbGwoY29tbWVudC5yZWYpO1xuXHRcdFx0aWYocmFuZ2Uucy5yID4gdGhpc0NlbGwucikgcmFuZ2Uucy5yID0gdGhpc0NlbGwucjtcblx0XHRcdGlmKHJhbmdlLmUuciA8IHRoaXNDZWxsLnIpIHJhbmdlLmUuciA9IHRoaXNDZWxsLnI7XG5cdFx0XHRpZihyYW5nZS5zLmMgPiB0aGlzQ2VsbC5jKSByYW5nZS5zLmMgPSB0aGlzQ2VsbC5jO1xuXHRcdFx0aWYocmFuZ2UuZS5jIDwgdGhpc0NlbGwuYykgcmFuZ2UuZS5jID0gdGhpc0NlbGwuYztcblx0XHRcdHZhciBlbmNvZGVkID0gZW5jb2RlX3JhbmdlKHJhbmdlKTtcblx0XHRcdGlmIChlbmNvZGVkICE9PSBzaGVldFtcIiFyZWZcIl0pIHNoZWV0W1wiIXJlZlwiXSA9IGVuY29kZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFjZWxsLmMpIGNlbGwuYyA9IFtdO1xuXHRcdHZhciBvID0gKHthOiBjb21tZW50LmF1dGhvciwgdDogY29tbWVudC50LCByOiBjb21tZW50LnJ9KTtcblx0XHRpZihjb21tZW50LmgpIG8uaCA9IGNvbW1lbnQuaDtcblx0XHRjZWxsLmMucHVzaChvKTtcblx0fSk7XG59XG5cbi8qIDE4LjcgQ29tbWVudHMgKi9cbmZ1bmN0aW9uIHBhcnNlX2NvbW1lbnRzX3htbChkYXRhLCBvcHRzKSB7XG5cdC8qIDE4LjcuNiBDVF9Db21tZW50cyAqL1xuXHRpZihkYXRhLm1hdGNoKC88KD86XFx3KzopP2NvbW1lbnRzICpcXC8+LykpIHJldHVybiBbXTtcblx0dmFyIGF1dGhvcnMgPSBbXTtcblx0dmFyIGNvbW1lbnRMaXN0ID0gW107XG5cdHZhciBhdXRodGFnID0gZGF0YS5tYXRjaCgvPCg/Olxcdys6KT9hdXRob3JzPihbXFxzXFxTXSopPFxcLyg/Olxcdys6KT9hdXRob3JzPi8pO1xuXHRpZihhdXRodGFnICYmIGF1dGh0YWdbMV0pIGF1dGh0YWdbMV0uc3BsaXQoLzxcXC9cXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbih4KSB7XG5cdFx0aWYoeCA9PT0gXCJcIiB8fCB4LnRyaW0oKSA9PT0gXCJcIikgcmV0dXJuO1xuXHRcdHZhciBhID0geC5tYXRjaCgvPCg/Olxcdys6KT9hdXRob3JbXj5dKj4oLiopLyk7XG5cdFx0aWYoYSkgYXV0aG9ycy5wdXNoKGFbMV0pO1xuXHR9KTtcblx0dmFyIGNtbnR0YWcgPSBkYXRhLm1hdGNoKC88KD86XFx3KzopP2NvbW1lbnRMaXN0PihbXFxzXFxTXSopPFxcLyg/Olxcdys6KT9jb21tZW50TGlzdD4vKTtcblx0aWYoY21udHRhZyAmJiBjbW50dGFnWzFdKSBjbW50dGFnWzFdLnNwbGl0KC88XFwvXFx3Kjo/Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKHgpIHtcblx0XHRpZih4ID09PSBcIlwiIHx8IHgudHJpbSgpID09PSBcIlwiKSByZXR1cm47XG5cdFx0dmFyIGNtID0geC5tYXRjaCgvPCg/Olxcdys6KT9jb21tZW50W14+XSo+Lyk7XG5cdFx0aWYoIWNtKSByZXR1cm47XG5cdFx0dmFyIHkgPSBwYXJzZXhtbHRhZyhjbVswXSk7XG5cdFx0dmFyIGNvbW1lbnQgPSAoeyBhdXRob3I6IHkuYXV0aG9ySWQgJiYgYXV0aG9yc1t5LmF1dGhvcklkXSB8fCBcInNoZWV0anNnaG9zdFwiLCByZWY6IHkucmVmLCBndWlkOiB5Lmd1aWQgfSk7XG5cdFx0dmFyIGNlbGwgPSBkZWNvZGVfY2VsbCh5LnJlZik7XG5cdFx0aWYob3B0cy5zaGVldFJvd3MgJiYgb3B0cy5zaGVldFJvd3MgPD0gY2VsbC5yKSByZXR1cm47XG5cdFx0dmFyIHRleHRNYXRjaCA9IHgubWF0Y2goLzwoPzpcXHcrOik/dGV4dD4oW1xcc1xcU10qKTxcXC8oPzpcXHcrOik/dGV4dD4vKTtcblx0XHR2YXIgcnQgPSAhIXRleHRNYXRjaCAmJiAhIXRleHRNYXRjaFsxXSAmJiBwYXJzZV9zaSh0ZXh0TWF0Y2hbMV0pIHx8IHtyOlwiXCIsdDpcIlwiLGg6XCJcIn07XG5cdFx0Y29tbWVudC5yID0gcnQucjtcblx0XHRpZihydC5yID09IFwiPHQ+PC90PlwiKSBydC50ID0gcnQuaCA9IFwiXCI7XG5cdFx0Y29tbWVudC50ID0gcnQudC5yZXBsYWNlKC9cXHJcXG4vZyxcIlxcblwiKS5yZXBsYWNlKC9cXHIvZyxcIlxcblwiKTtcblx0XHRpZihvcHRzLmNlbGxIVE1MKSBjb21tZW50LmggPSBydC5oO1xuXHRcdGNvbW1lbnRMaXN0LnB1c2goY29tbWVudCk7XG5cdH0pO1xuXHRyZXR1cm4gY29tbWVudExpc3Q7XG59XG5cbnZhciBDTU5UX1hNTF9ST09UID0gd3JpdGV4dGFnKCdjb21tZW50cycsIG51bGwsIHsgJ3htbG5zJzogWE1MTlMubWFpblswXSB9KTtcbmZ1bmN0aW9uIHdyaXRlX2NvbW1lbnRzX3htbChkYXRhKSB7XG5cdHZhciBvID0gW1hNTF9IRUFERVIsIENNTlRfWE1MX1JPT1RdO1xuXG5cdHZhciBpYXV0aG9yID0gW107XG5cdG8ucHVzaChcIjxhdXRob3JzPlwiKTtcblx0ZGF0YS5tYXAoZnVuY3Rpb24oeCkgeyByZXR1cm4geFsxXTsgfSkuZm9yRWFjaChmdW5jdGlvbihjb21tZW50KSB7XG5cdFx0Y29tbWVudC5tYXAoZnVuY3Rpb24oeCkgeyByZXR1cm4gZXNjYXBleG1sKHguYSk7IH0pLmZvckVhY2goZnVuY3Rpb24oYSkge1xuXHRcdFx0aWYoaWF1dGhvci5pbmRleE9mKGEpID4gLTEpIHJldHVybjtcblx0XHRcdGlhdXRob3IucHVzaChhKTtcblx0XHRcdG8ucHVzaChcIjxhdXRob3I+XCIgKyBhICsgXCI8L2F1dGhvcj5cIik7XG5cdFx0fSk7XG5cdH0pO1xuXHRvLnB1c2goXCI8L2F1dGhvcnM+XCIpO1xuXHRvLnB1c2goXCI8Y29tbWVudExpc3Q+XCIpO1xuXHRkYXRhLmZvckVhY2goZnVuY3Rpb24oZCkge1xuXHRcdGRbMV0uZm9yRWFjaChmdW5jdGlvbihjKSB7XG5cdFx0XHQvKiAxOC43LjMgQ1RfQ29tbWVudCAqL1xuXHRcdFx0by5wdXNoKCc8Y29tbWVudCByZWY9XCInICsgZFswXSArICdcIiBhdXRob3JJZD1cIicgKyBpYXV0aG9yLmluZGV4T2YoZXNjYXBleG1sKGMuYSkpICsgJ1wiPjx0ZXh0PicpO1xuXHRcdFx0by5wdXNoKHdyaXRldGFnKFwidFwiLCBjLnQgPT0gbnVsbCA/IFwiXCIgOiBjLnQpKTtcblx0XHRcdG8ucHVzaCgnPC90ZXh0PjwvY29tbWVudD4nKTtcblx0XHR9KTtcblx0fSk7XG5cdG8ucHVzaChcIjwvY29tbWVudExpc3Q+XCIpO1xuXHRpZihvLmxlbmd0aD4yKSB7IG9bby5sZW5ndGhdID0gKCc8L2NvbW1lbnRzPicpOyBvWzFdPW9bMV0ucmVwbGFjZShcIi8+XCIsXCI+XCIpOyB9XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG4vKiBbTVMtWExTQl0gMi40LjI4IEJydEJlZ2luQ29tbWVudCAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0QmVnaW5Db21tZW50KGRhdGEpIHtcblx0dmFyIG91dCA9IHt9O1xuXHRvdXQuaWF1dGhvciA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0dmFyIHJmeCA9IHBhcnNlX1VuY2hlY2tlZFJmWChkYXRhLCAxNik7XG5cdG91dC5yZnggPSByZngucztcblx0b3V0LnJlZiA9IGVuY29kZV9jZWxsKHJmeC5zKTtcblx0ZGF0YS5sICs9IDE2OyAvKnZhciBndWlkID0gcGFyc2VfR1VJRChkYXRhKTsgKi9cblx0cmV0dXJuIG91dDtcbn1cbmZ1bmN0aW9uIHdyaXRlX0JydEJlZ2luQ29tbWVudChkYXRhLCBvKSB7XG5cdGlmKG8gPT0gbnVsbCkgbyA9IG5ld19idWYoMzYpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIGRhdGFbMV0uaWF1dGhvcik7XG5cdHdyaXRlX1VuY2hlY2tlZFJmWCgoZGF0YVswXSksIG8pO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC4zMjQgQnJ0Q29tbWVudEF1dGhvciAqL1xudmFyIHBhcnNlX0JydENvbW1lbnRBdXRob3IgPSBwYXJzZV9YTFdpZGVTdHJpbmc7XG5mdW5jdGlvbiB3cml0ZV9CcnRDb21tZW50QXV0aG9yKGRhdGEpIHsgcmV0dXJuIHdyaXRlX1hMV2lkZVN0cmluZyhkYXRhLnNsaWNlKDAsIDU0KSk7IH1cblxuLyogW01TLVhMU0JdIDIuMS43LjggQ29tbWVudHMgKi9cbmZ1bmN0aW9uIHBhcnNlX2NvbW1lbnRzX2JpbihkYXRhLCBvcHRzKSB7XG5cdHZhciBvdXQgPSBbXTtcblx0dmFyIGF1dGhvcnMgPSBbXTtcblx0dmFyIGMgPSB7fTtcblx0dmFyIHBhc3MgPSBmYWxzZTtcblx0cmVjb3JkaG9wcGVyKGRhdGEsIGZ1bmN0aW9uIGhvcHBlcl9jbW50KHZhbCwgUl9uLCBSVCkge1xuXHRcdHN3aXRjaChSVCkge1xuXHRcdFx0Y2FzZSAweDAyNzg6IC8qICdCcnRDb21tZW50QXV0aG9yJyAqL1xuXHRcdFx0XHRhdXRob3JzLnB1c2godmFsKTsgYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDI3QjogLyogJ0JydEJlZ2luQ29tbWVudCcgKi9cblx0XHRcdFx0YyA9IHZhbDsgYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDI3RDogLyogJ0JydENvbW1lbnRUZXh0JyAqL1xuXHRcdFx0XHRjLnQgPSB2YWwudDsgYy5oID0gdmFsLmg7IGMuciA9IHZhbC5yOyBicmVhaztcblx0XHRcdGNhc2UgMHgwMjdDOiAvKiAnQnJ0RW5kQ29tbWVudCcgKi9cblx0XHRcdFx0Yy5hdXRob3IgPSBhdXRob3JzW2MuaWF1dGhvcl07XG5cdFx0XHRcdGRlbGV0ZSBjLmlhdXRob3I7XG5cdFx0XHRcdGlmKG9wdHMuc2hlZXRSb3dzICYmIG9wdHMuc2hlZXRSb3dzIDw9IGMucmZ4LnIpIGJyZWFrO1xuXHRcdFx0XHRpZighYy50KSBjLnQgPSBcIlwiO1xuXHRcdFx0XHRkZWxldGUgYy5yZng7IG91dC5wdXNoKGMpOyBicmVhaztcblxuXHRcdFx0LyogY2FzZSAnQnJ0VWlkJzogKi9cblxuXHRcdFx0Y2FzZSAweDAwMjM6IC8qICdCcnRGUlRCZWdpbicgKi9cblx0XHRcdFx0cGFzcyA9IHRydWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMjQ6IC8qICdCcnRGUlRFbmQnICovXG5cdFx0XHRcdHBhc3MgPSBmYWxzZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAyNTogLyogJ0JydEFDQmVnaW4nICovIGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMjY6IC8qICdCcnRBQ0VuZCcgKi8gYnJlYWs7XG5cblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkJlZ2luXCIpID4gMCl7LyogZW1wdHkgKi99XG5cdFx0XHRcdGVsc2UgaWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkVuZFwiKSA+IDApey8qIGVtcHR5ICovfVxuXHRcdFx0XHRlbHNlIGlmKCFwYXNzIHx8IG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHJlY29yZCBcIiArIFJUICsgXCIgXCIgKyBSX24pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX2NvbW1lbnRzX2JpbihkYXRhKSB7XG5cdHZhciBiYSA9IGJ1Zl9hcnJheSgpO1xuXHR2YXIgaWF1dGhvciA9IFtdO1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5Db21tZW50c1wiKTtcblxuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5Db21tZW50QXV0aG9yc1wiKTtcblx0ZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGNvbW1lbnQpIHtcblx0XHRjb21tZW50WzFdLmZvckVhY2goZnVuY3Rpb24oYykge1xuXHRcdFx0aWYoaWF1dGhvci5pbmRleE9mKGMuYSkgPiAtMSkgcmV0dXJuO1xuXHRcdFx0aWF1dGhvci5wdXNoKGMuYS5zbGljZSgwLDU0KSk7XG5cdFx0XHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0Q29tbWVudEF1dGhvclwiLCB3cml0ZV9CcnRDb21tZW50QXV0aG9yKGMuYSkpO1xuXHRcdH0pO1xuXHR9KTtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZENvbW1lbnRBdXRob3JzXCIpO1xuXG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpbkNvbW1lbnRMaXN0XCIpO1xuXHRkYXRhLmZvckVhY2goZnVuY3Rpb24oY29tbWVudCkge1xuXHRcdGNvbW1lbnRbMV0uZm9yRWFjaChmdW5jdGlvbihjKSB7XG5cdFx0XHRjLmlhdXRob3IgPSBpYXV0aG9yLmluZGV4T2YoYy5hKTtcblx0XHRcdHZhciByYW5nZSA9IHtzOmRlY29kZV9jZWxsKGNvbW1lbnRbMF0pLGU6ZGVjb2RlX2NlbGwoY29tbWVudFswXSl9O1xuXHRcdFx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEJlZ2luQ29tbWVudFwiLCB3cml0ZV9CcnRCZWdpbkNvbW1lbnQoW3JhbmdlLCBjXSkpO1xuXHRcdFx0aWYoYy50ICYmIGMudC5sZW5ndGggPiAwKSB3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0Q29tbWVudFRleHRcIiwgd3JpdGVfQnJ0Q29tbWVudFRleHQoYykpO1xuXHRcdFx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZENvbW1lbnRcIik7XG5cdFx0XHRkZWxldGUgYy5pYXV0aG9yO1xuXHRcdH0pO1xuXHR9KTtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZENvbW1lbnRMaXN0XCIpO1xuXG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRFbmRDb21tZW50c1wiKTtcblx0cmV0dXJuIGJhLmVuZCgpO1xufVxuZnVuY3Rpb24gbWFrZV92YmFfeGxzKGNmYikge1xuXHR2YXIgbmV3Y2ZiID0gQ0ZCLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6XCJSXCJ9KTtcblx0Y2ZiLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKHAsIGkpIHtcblx0XHRpZihwLnNsaWNlKC0xKSA9PT0gXCIvXCIgfHwgIXAubWF0Y2goL19WQkFfUFJPSkVDVF9DVVIvKSkgcmV0dXJuO1xuXHRcdHZhciBuZXdwYXRoID0gcC5yZXBsYWNlKC9eW14vXSovLFwiUlwiKS5yZXBsYWNlKC9cXC9fVkJBX1BST0pFQ1RfQ1VSXFx1MDAwMCovLCBcIlwiKTtcblx0XHRDRkIudXRpbHMuY2ZiX2FkZChuZXdjZmIsIG5ld3BhdGgsIGNmYi5GaWxlSW5kZXhbaV0uY29udGVudCk7XG5cdH0pO1xuXHRyZXR1cm4gQ0ZCLndyaXRlKG5ld2NmYik7XG59XG5cbmZ1bmN0aW9uIGZpbGxfdmJhX3hscyhjZmIsIHZiYSkge1xuXHR2YmEuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24ocCwgaSkge1xuXHRcdGlmKGkgPT0gMCkgcmV0dXJuO1xuXHRcdHZhciBuZXdwYXRoID0gcC5yZXBsYWNlKC9bXi9dKlsvXS8sIFwiL19WQkFfUFJPSkVDVF9DVVIvXCIpO1xuXHRcdGlmKG5ld3BhdGguc2xpY2UoLTEpICE9PSBcIi9cIikgQ0ZCLnV0aWxzLmNmYl9hZGQoY2ZiLCBuZXdwYXRoLCB2YmEuRmlsZUluZGV4W2ldLmNvbnRlbnQpO1xuXHR9KTtcbn1cblxudmFyIFZCQUZNVFMgPSBbIFwieGxzYlwiLCBcInhsc21cIiwgXCJ4bGFtXCIsIFwiYmlmZjhcIiwgXCJ4bGFcIiBdO1xuXG5SRUxTLkRTID0gXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0XCI7XG5SRUxTLk1TID0gXCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxNYWNyb3NoZWV0XCI7XG5cbi8qIG1hY3JvIGFuZCBkaWFsb2cgc2hlZXQgc3R1YnMgKi9cbmZ1bmN0aW9uIHBhcnNlX2RzX2JpbigpIHsgcmV0dXJuIHsnIXR5cGUnOidkaWFsb2cnfTsgfVxuZnVuY3Rpb24gcGFyc2VfZHNfeG1sKCkgeyByZXR1cm4geychdHlwZSc6J2RpYWxvZyd9OyB9XG5mdW5jdGlvbiBwYXJzZV9tc19iaW4oKSB7IHJldHVybiB7JyF0eXBlJzonbWFjcm8nfTsgfVxuZnVuY3Rpb24gcGFyc2VfbXNfeG1sKCkgeyByZXR1cm4geychdHlwZSc6J21hY3JvJ307IH1cbi8qIFRPRE86IGl0IHdpbGwgYmUgdXNlZnVsIHRvIHBhcnNlIHRoZSBmdW5jdGlvbiBzdHIgKi9cbnZhciByY190b19hMSA9IChmdW5jdGlvbigpe1xuXHR2YXIgcmNyZWdleCA9IC8oXnxbXkEtWmEtel0pUihcXFs/KSgtP1xcZCt8KVxcXT9DKFxcWz8pKC0/XFxkK3wpXFxdPy9nO1xuXHR2YXIgcmNiYXNlID0gKHtyOjAsYzowfSk7XG5cdGZ1bmN0aW9uIHJjZnVuYygkJCwkMSwkMiwkMywkNCwkNSkge1xuXHRcdHZhciBSID0gJDMubGVuZ3RoPjA/cGFyc2VJbnQoJDMsMTApfDA6MCwgQyA9ICQ1Lmxlbmd0aD4wP3BhcnNlSW50KCQ1LDEwKXwwOjA7XG5cdFx0aWYoQzwwICYmICQ0Lmxlbmd0aCA9PT0gMCkgQz0wO1xuXHRcdHZhciBjUmVsID0gZmFsc2UsIHJSZWwgPSBmYWxzZTtcblx0XHRpZigkNC5sZW5ndGggPiAwIHx8ICQ1Lmxlbmd0aCA9PSAwKSBjUmVsID0gdHJ1ZTsgaWYoY1JlbCkgQyArPSByY2Jhc2UuYzsgZWxzZSAtLUM7XG5cdFx0aWYoJDIubGVuZ3RoID4gMCB8fCAkMy5sZW5ndGggPT0gMCkgclJlbCA9IHRydWU7IGlmKHJSZWwpIFIgKz0gcmNiYXNlLnI7IGVsc2UgLS1SO1xuXHRcdHJldHVybiAkMSArIChjUmVsID8gXCJcIiA6IFwiJFwiKSArIGVuY29kZV9jb2woQykgKyAoclJlbCA/IFwiXCIgOiBcIiRcIikgKyBlbmNvZGVfcm93KFIpO1xuXHR9XG5cdHJldHVybiBmdW5jdGlvbiByY190b19hMShmc3RyLCBiYXNlKSB7XG5cdFx0cmNiYXNlID0gYmFzZTtcblx0XHRyZXR1cm4gZnN0ci5yZXBsYWNlKHJjcmVnZXgsIHJjZnVuYyk7XG5cdH07XG59KSgpO1xuXG52YXIgY3JlZnJlZ2V4ID0gLyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoWzEtOV1cXGR7MCw1fXwxMFswLTNdXFxkezR9fDEwNFswLTddXFxkezN9fDEwNDhbMC00XVxcZHsyfXwxMDQ4NVswLTZdXFxkfDEwNDg1N1swLTZdKSg/IVtfLlxcKEEtWmEtejAtOV0pL2c7XG52YXIgYTFfdG9fcmMgPShmdW5jdGlvbigpe1xuXHRyZXR1cm4gZnVuY3Rpb24gYTFfdG9fcmMoZnN0ciwgYmFzZSkge1xuXHRcdHJldHVybiBmc3RyLnJlcGxhY2UoY3JlZnJlZ2V4LCBmdW5jdGlvbigkMCwgJDEsICQyLCAkMywgJDQsICQ1KSB7XG5cdFx0XHR2YXIgYyA9IGRlY29kZV9jb2woJDMpIC0gKCQyID8gMCA6IGJhc2UuYyk7XG5cdFx0XHR2YXIgciA9IGRlY29kZV9yb3coJDUpIC0gKCQ0ID8gMCA6IGJhc2Uucik7XG5cdFx0XHR2YXIgUiA9IChyID09IDAgPyBcIlwiIDogISQ0ID8gXCJbXCIgKyByICsgXCJdXCIgOiAocisxKSk7XG5cdFx0XHR2YXIgQyA9IChjID09IDAgPyBcIlwiIDogISQyID8gXCJbXCIgKyBjICsgXCJdXCIgOiAoYysxKSk7XG5cdFx0XHRyZXR1cm4gJDEgKyBcIlJcIiArIFIgKyBcIkNcIiArIEM7XG5cdFx0fSk7XG5cdH07XG59KSgpO1xuXG4vKiBubyBkZWZpbmVkIG5hbWUgY2FuIGNvbGxpZGUgd2l0aCBhIHZhbGlkIGNlbGwgYWRkcmVzcyBBMTpYRkQxMDQ4NTc2IC4uLiBleGNlcHQgTE9HMTAhICovXG5mdW5jdGlvbiBzaGlmdF9mb3JtdWxhX3N0cihmLCBkZWx0YSkge1xuXHRyZXR1cm4gZi5yZXBsYWNlKGNyZWZyZWdleCwgZnVuY3Rpb24oJDAsICQxLCAkMiwgJDMsICQ0LCAkNSkge1xuXHRcdHJldHVybiAkMSsoJDI9PVwiJFwiID8gJDIrJDMgOiBlbmNvZGVfY29sKGRlY29kZV9jb2woJDMpK2RlbHRhLmMpKSsoJDQ9PVwiJFwiID8gJDQrJDUgOiBlbmNvZGVfcm93KGRlY29kZV9yb3coJDUpICsgZGVsdGEucikpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gc2hpZnRfZm9ybXVsYV94bHN4KGYsIHJhbmdlLCBjZWxsKSB7XG5cdHZhciByID0gZGVjb2RlX3JhbmdlKHJhbmdlKSwgcyA9IHIucywgYyA9IGRlY29kZV9jZWxsKGNlbGwpO1xuXHR2YXIgZGVsdGEgPSB7cjpjLnIgLSBzLnIsIGM6Yy5jIC0gcy5jfTtcblx0cmV0dXJuIHNoaWZ0X2Zvcm11bGFfc3RyKGYsIGRlbHRhKTtcbn1cblxuLyogVE9ETzogcGFyc2UgZm9ybXVsYSAqL1xuZnVuY3Rpb24gZnV6enlmbWxhKGYpIHtcblx0aWYoZi5sZW5ndGggPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX3hsZm4oZikge1xuXHRyZXR1cm4gZi5yZXBsYWNlKC9feGxmblxcLi9nLFwiXCIpO1xufVxuLyogLS0tIGZvcm11bGEgcmVmZXJlbmNlcyBwb2ludCB0byBNUy1YTFMgLS0tICovXG4vKiBTbWFsbCBoZWxwZXJzICovXG5mdW5jdGlvbiBwYXJzZXJlYWQxKGJsb2IpIHsgYmxvYi5sKz0xOyByZXR1cm47IH1cblxuLyogUmdjZSBIZWxwZXJzICovXG5cbi8qIDIuNS41MSAqL1xuZnVuY3Rpb24gcGFyc2VfQ29sUmVsVShibG9iLCBsZW5ndGgpIHtcblx0dmFyIGMgPSBibG9iLnJlYWRfc2hpZnQobGVuZ3RoID09IDEgPyAxIDogMik7XG5cdHJldHVybiBbYyAmIDB4M0ZGRiwgKGMgPj4gMTQpICYgMSwgKGMgPj4gMTUpICYgMV07XG59XG5cbi8qIFtNUy1YTFNdIDIuNS4xOTguMTA1ICovXG4vKiBbTVMtWExTQl0gMi41Ljk3Ljg5ICovXG5mdW5jdGlvbiBwYXJzZV9SZ2NlQXJlYShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHcgPSAyO1xuXHRpZihvcHRzKSB7XG5cdFx0aWYob3B0cy5iaWZmID49IDIgJiYgb3B0cy5iaWZmIDw9IDUpIHJldHVybiBwYXJzZV9SZ2NlQXJlYV9CSUZGMihibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHRcdGVsc2UgaWYob3B0cy5iaWZmID09IDEyKSB3ID0gNDtcblx0fVxuXHR2YXIgcj1ibG9iLnJlYWRfc2hpZnQodyksIFI9YmxvYi5yZWFkX3NoaWZ0KHcpO1xuXHR2YXIgYz1wYXJzZV9Db2xSZWxVKGJsb2IsIDIpO1xuXHR2YXIgQz1wYXJzZV9Db2xSZWxVKGJsb2IsIDIpO1xuXHRyZXR1cm4geyBzOntyOnIsIGM6Y1swXSwgY1JlbDpjWzFdLCByUmVsOmNbMl19LCBlOntyOlIsIGM6Q1swXSwgY1JlbDpDWzFdLCByUmVsOkNbMl19IH07XG59XG4vKiBCSUZGIDItNSBlbmNvZGVzIGZsYWdzIGluIHRoZSByb3cgZmllbGQgKi9cbmZ1bmN0aW9uIHBhcnNlX1JnY2VBcmVhX0JJRkYyKGJsb2IpIHtcblx0dmFyIHI9cGFyc2VfQ29sUmVsVShibG9iLCAyKSwgUj1wYXJzZV9Db2xSZWxVKGJsb2IsIDIpO1xuXHR2YXIgYz1ibG9iLnJlYWRfc2hpZnQoMSk7XG5cdHZhciBDPWJsb2IucmVhZF9zaGlmdCgxKTtcblx0cmV0dXJuIHsgczp7cjpyWzBdLCBjOmMsIGNSZWw6clsxXSwgclJlbDpyWzJdfSwgZTp7cjpSWzBdLCBjOkMsIGNSZWw6UlsxXSwgclJlbDpSWzJdfSB9O1xufVxuXG4vKiAyLjUuMTk4LjEwNSBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9SZ2NlQXJlYVJlbChibG9iLCBsZW5ndGgpIHtcblx0dmFyIHI9YmxvYi5yZWFkX3NoaWZ0KGxlbmd0aCA9PSAxMiA/IDQgOiAyKSwgUj1ibG9iLnJlYWRfc2hpZnQobGVuZ3RoID09IDEyID8gNCA6IDIpO1xuXHR2YXIgYz1wYXJzZV9Db2xSZWxVKGJsb2IsIDIpO1xuXHR2YXIgQz1wYXJzZV9Db2xSZWxVKGJsb2IsIDIpO1xuXHRyZXR1cm4geyBzOntyOnIsIGM6Y1swXSwgY1JlbDpjWzFdLCByUmVsOmNbMl19LCBlOntyOlIsIGM6Q1swXSwgY1JlbDpDWzFdLCByUmVsOkNbMl19IH07XG59XG5cbi8qIDIuNS4xOTguMTA5ICovXG5mdW5jdGlvbiBwYXJzZV9SZ2NlTG9jKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHRpZihvcHRzICYmIG9wdHMuYmlmZiA+PSAyICYmIG9wdHMuYmlmZiA8PSA1KSByZXR1cm4gcGFyc2VfUmdjZUxvY19CSUZGMihibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHR2YXIgciA9IGJsb2IucmVhZF9zaGlmdChvcHRzICYmIG9wdHMuYmlmZiA9PSAxMiA/IDQgOiAyKTtcblx0dmFyIGMgPSBwYXJzZV9Db2xSZWxVKGJsb2IsIDIpO1xuXHRyZXR1cm4ge3I6ciwgYzpjWzBdLCBjUmVsOmNbMV0sIHJSZWw6Y1syXX07XG59XG5mdW5jdGlvbiBwYXJzZV9SZ2NlTG9jX0JJRkYyKGJsb2IpIHtcblx0dmFyIHIgPSBwYXJzZV9Db2xSZWxVKGJsb2IsIDIpO1xuXHR2YXIgYyA9IGJsb2IucmVhZF9zaGlmdCgxKTtcblx0cmV0dXJuIHtyOnJbMF0sIGM6YywgY1JlbDpyWzFdLCByUmVsOnJbMl19O1xufVxuXG4vKiAyLjUuMTk4LjEwNyAsIDIuNS40NyAqL1xuZnVuY3Rpb24gcGFyc2VfUmdjZUVsZkxvYyhibG9iKSB7XG5cdHZhciByID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgYyA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0cmV0dXJuIHtyOnIsIGM6YyAmIDB4RkYsIGZRdW90ZWQ6ISEoYyAmIDB4NDAwMCksIGNSZWw6Yz4+MTUsIHJSZWw6Yz4+MTUgfTtcbn1cblxuLyogW01TLVhMU10gMi41LjE5OC4xMTEgVE9ETyAqL1xuLyogW01TLVhMU0JdIDIuNS45Ny45MiBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9SZ2NlTG9jUmVsKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgYmlmZiA9IG9wdHMgJiYgb3B0cy5iaWZmID8gb3B0cy5iaWZmIDogODtcblx0aWYoYmlmZiA+PSAyICYmIGJpZmYgPD0gNSkgcmV0dXJuIHBhcnNlX1JnY2VMb2NSZWxfQklGRjIoYmxvYiwgbGVuZ3RoLCBvcHRzKTtcblx0dmFyIHIgPSBibG9iLnJlYWRfc2hpZnQoYmlmZiA+PSAxMiA/IDQgOiAyKTtcblx0dmFyIGNsID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgY1JlbCA9IChjbCAmIDB4NDAwMCkgPj4gMTQsIHJSZWwgPSAoY2wgJiAweDgwMDApID4+IDE1O1xuXHRjbCAmPSAweDNGRkY7XG5cdGlmKHJSZWwgPT0gMSkgd2hpbGUociA+IDB4N0ZGRkYpIHIgLT0gMHgxMDAwMDA7XG5cdGlmKGNSZWwgPT0gMSkgd2hpbGUoY2wgPiAweDFGRkYpIGNsID0gY2wgLSAweDQwMDA7XG5cdHJldHVybiB7cjpyLGM6Y2wsY1JlbDpjUmVsLHJSZWw6clJlbH07XG59XG5mdW5jdGlvbiBwYXJzZV9SZ2NlTG9jUmVsX0JJRkYyKGJsb2IpIHtcblx0dmFyIHJsID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgYyA9IGJsb2IucmVhZF9zaGlmdCgxKTtcblx0dmFyIHJSZWwgPSAocmwgJiAweDgwMDApID4+IDE1LCBjUmVsID0gKHJsICYgMHg0MDAwKSA+PiAxNDtcblx0cmwgJj0gMHgzRkZGO1xuXHRpZihyUmVsID09IDEgJiYgcmwgPj0gMHgyMDAwKSBybCA9IHJsIC0gMHg0MDAwO1xuXHRpZihjUmVsID09IDEgJiYgYyA+PSAweDgwKSBjID0gYyAtIDB4MTAwO1xuXHRyZXR1cm4ge3I6cmwsYzpjLGNSZWw6Y1JlbCxyUmVsOnJSZWx9O1xufVxuXG4vKiBQdGcgVG9rZW5zICovXG5cbi8qIDIuNS4xOTguMjcgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z0FyZWEoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciB0eXBlID0gKGJsb2JbYmxvYi5sKytdICYgMHg2MCkgPj4gNTtcblx0dmFyIGFyZWEgPSBwYXJzZV9SZ2NlQXJlYShibG9iLCBvcHRzLmJpZmYgPj0gMiAmJiBvcHRzLmJpZmYgPD0gNSA/IDYgOiA4LCBvcHRzKTtcblx0cmV0dXJuIFt0eXBlLCBhcmVhXTtcbn1cblxuLyogW01TLVhMU10gMi41LjE5OC4yOCAqL1xuLyogW01TLVhMU0JdIDIuNS45Ny4xOSAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnQXJlYTNkKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgdHlwZSA9IChibG9iW2Jsb2IubCsrXSAmIDB4NjApID4+IDU7XG5cdHZhciBpeHRpID0gYmxvYi5yZWFkX3NoaWZ0KDIsICdpJyk7XG5cdHZhciB3ID0gODtcblx0aWYob3B0cykgc3dpdGNoKG9wdHMuYmlmZikge1xuXHRcdGNhc2UgNTogYmxvYi5sICs9IDEyOyB3ID0gNjsgYnJlYWs7XG5cdFx0Y2FzZSAxMjogdyA9IDEyOyBicmVhaztcblx0fVxuXHR2YXIgYXJlYSA9IHBhcnNlX1JnY2VBcmVhKGJsb2IsIHcsIG9wdHMpO1xuXHRyZXR1cm4gW3R5cGUsIGl4dGksIGFyZWFdO1xufVxuXG4vKiAyLjUuMTk4LjI5ICovXG5mdW5jdGlvbiBwYXJzZV9QdGdBcmVhRXJyKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgdHlwZSA9IChibG9iW2Jsb2IubCsrXSAmIDB4NjApID4+IDU7XG5cdGJsb2IubCArPSBvcHRzICYmIG9wdHMuYmlmZiA+IDggPyAxMiA6IDg7XG5cdHJldHVybiBbdHlwZV07XG59XG4vKiAyLjUuMTk4LjMwICovXG5mdW5jdGlvbiBwYXJzZV9QdGdBcmVhRXJyM2QoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciB0eXBlID0gKGJsb2JbYmxvYi5sKytdICYgMHg2MCkgPj4gNTtcblx0dmFyIGl4dGkgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciB3ID0gODtcblx0aWYob3B0cykgc3dpdGNoKG9wdHMuYmlmZikge1xuXHRcdGNhc2UgNTogYmxvYi5sICs9IDEyOyB3ID0gNjsgYnJlYWs7XG5cdFx0Y2FzZSAxMjogdyA9IDEyOyBicmVhaztcblx0fVxuXHRibG9iLmwgKz0gdztcblx0cmV0dXJuIFt0eXBlLCBpeHRpXTtcbn1cblxuLyogMi41LjE5OC4zMSAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnQXJlYU4oYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciB0eXBlID0gKGJsb2JbYmxvYi5sKytdICYgMHg2MCkgPj4gNTtcblx0dmFyIGFyZWEgPSBwYXJzZV9SZ2NlQXJlYVJlbChibG9iLCBvcHRzICYmIG9wdHMuYmlmZiA+IDggPyAxMiA6IDgsIG9wdHMpO1xuXHRyZXR1cm4gW3R5cGUsIGFyZWFdO1xufVxuXG4vKiBbTVMtWExTXSAyLjUuMTk4LjMyICovXG4vKiBbTVMtWExTQl0gMi41Ljk3LjIzICovXG5mdW5jdGlvbiBwYXJzZV9QdGdBcnJheShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHR5cGUgPSAoYmxvYltibG9iLmwrK10gJiAweDYwKSA+PiA1O1xuXHRibG9iLmwgKz0gb3B0cy5iaWZmID09IDIgPyA2IDogb3B0cy5iaWZmID09IDEyID8gMTQgOiA3O1xuXHRyZXR1cm4gW3R5cGVdO1xufVxuXG4vKiAyLjUuMTk4LjMzICovXG5mdW5jdGlvbiBwYXJzZV9QdGdBdHRyQmF4Y2VsKGJsb2IpIHtcblx0dmFyIGJpdFNlbWkgPSBibG9iW2Jsb2IubCsxXSAmIDB4MDE7IC8qIDEgPSB2b2xhdGlsZSAqL1xuXHR2YXIgYml0QmF4Y2VsID0gMTtcblx0YmxvYi5sICs9IDQ7XG5cdHJldHVybiBbYml0U2VtaSwgYml0QmF4Y2VsXTtcbn1cblxuLyogMi41LjE5OC4zNCAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnQXR0ckNob29zZShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0YmxvYi5sICs9Mjtcblx0dmFyIG9mZnNldCA9IGJsb2IucmVhZF9zaGlmdChvcHRzICYmIG9wdHMuYmlmZiA9PSAyID8gMSA6IDIpO1xuXHR2YXIgbyA9IFtdO1xuXHQvKiBvZmZzZXQgaXMgMSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyAqL1xuXHRmb3IodmFyIGkgPSAwOyBpIDw9IG9mZnNldDsgKytpKSBvLnB1c2goYmxvYi5yZWFkX3NoaWZ0KG9wdHMgJiYgb3B0cy5iaWZmID09IDIgPyAxIDogMikpO1xuXHRyZXR1cm4gbztcbn1cblxuLyogMi41LjE5OC4zNSAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnQXR0ckdvdG8oYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciBiaXRHb3RvID0gKGJsb2JbYmxvYi5sKzFdICYgMHhGRikgPyAxIDogMDtcblx0YmxvYi5sICs9IDI7XG5cdHJldHVybiBbYml0R290bywgYmxvYi5yZWFkX3NoaWZ0KG9wdHMgJiYgb3B0cy5iaWZmID09IDIgPyAxIDogMildO1xufVxuXG4vKiAyLjUuMTk4LjM2ICovXG5mdW5jdGlvbiBwYXJzZV9QdGdBdHRySWYoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciBiaXRJZiA9IChibG9iW2Jsb2IubCsxXSAmIDB4RkYpID8gMSA6IDA7XG5cdGJsb2IubCArPSAyO1xuXHRyZXR1cm4gW2JpdElmLCBibG9iLnJlYWRfc2hpZnQob3B0cyAmJiBvcHRzLmJpZmYgPT0gMiA/IDEgOiAyKV07XG59XG5cbi8qIFtNUy1YTFNCXSAyLjUuOTcuMjggKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z0F0dHJJZkVycm9yKGJsb2IpIHtcblx0dmFyIGJpdElmID0gKGJsb2JbYmxvYi5sKzFdICYgMHhGRikgPyAxIDogMDtcblx0YmxvYi5sICs9IDI7XG5cdHJldHVybiBbYml0SWYsIGJsb2IucmVhZF9zaGlmdCgyKV07XG59XG5cbi8qIDIuNS4xOTguMzcgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z0F0dHJTZW1pKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgYml0U2VtaSA9IChibG9iW2Jsb2IubCsxXSAmIDB4RkYpID8gMSA6IDA7XG5cdGJsb2IubCArPSBvcHRzICYmIG9wdHMuYmlmZiA9PSAyID8gMyA6IDQ7XG5cdHJldHVybiBbYml0U2VtaV07XG59XG5cbi8qIDIuNS4xOTguNDAgKHVzZWQgYnkgUHRnQXR0clNwYWNlIGFuZCBQdGdBdHRyU3BhY2VTZW1pKSAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnQXR0clNwYWNlVHlwZShibG9iKSB7XG5cdHZhciB0eXBlID0gYmxvYi5yZWFkX3NoaWZ0KDEpLCBjY2ggPSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdHJldHVybiBbdHlwZSwgY2NoXTtcbn1cblxuLyogMi41LjE5OC4zOCAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnQXR0clNwYWNlKGJsb2IpIHtcblx0YmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRyZXR1cm4gcGFyc2VfUHRnQXR0clNwYWNlVHlwZShibG9iLCAyKTtcbn1cblxuLyogMi41LjE5OC4zOSAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnQXR0clNwYWNlU2VtaShibG9iKSB7XG5cdGJsb2IucmVhZF9zaGlmdCgyKTtcblx0cmV0dXJuIHBhcnNlX1B0Z0F0dHJTcGFjZVR5cGUoYmxvYiwgMik7XG59XG5cbi8qIDIuNS4xOTguODQgVE9ETyAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnUmVmKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHQvL3ZhciBwdGcgPSBibG9iW2Jsb2IubF0gJiAweDFGO1xuXHR2YXIgdHlwZSA9IChibG9iW2Jsb2IubF0gJiAweDYwKT4+NTtcblx0YmxvYi5sICs9IDE7XG5cdHZhciBsb2MgPSBwYXJzZV9SZ2NlTG9jKGJsb2IsIDAsIG9wdHMpO1xuXHRyZXR1cm4gW3R5cGUsIGxvY107XG59XG5cbi8qIDIuNS4xOTguODggVE9ETyAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnUmVmTihibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHR5cGUgPSAoYmxvYltibG9iLmxdICYgMHg2MCk+PjU7XG5cdGJsb2IubCArPSAxO1xuXHR2YXIgbG9jID0gcGFyc2VfUmdjZUxvY1JlbChibG9iLCAwLCBvcHRzKTtcblx0cmV0dXJuIFt0eXBlLCBsb2NdO1xufVxuXG4vKiAyLjUuMTk4Ljg1IFRPRE8gKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z1JlZjNkKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgdHlwZSA9IChibG9iW2Jsb2IubF0gJiAweDYwKT4+NTtcblx0YmxvYi5sICs9IDE7XG5cdHZhciBpeHRpID0gYmxvYi5yZWFkX3NoaWZ0KDIpOyAvLyBYdGlJbmRleFxuXHR2YXIgbG9jID0gcGFyc2VfUmdjZUxvYyhibG9iLCAwLCBvcHRzKTsgLy8gVE9ETzogb3IgUmdjZUxvY1JlbFxuXHRyZXR1cm4gW3R5cGUsIGl4dGksIGxvY107XG59XG5cblxuLyogMi41LjE5OC42MiBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9QdGdGdW5jKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHQvL3ZhciBwdGcgPSBibG9iW2Jsb2IubF0gJiAweDFGO1xuXHR2YXIgdHlwZSA9IChibG9iW2Jsb2IubF0gJiAweDYwKT4+NTtcblx0YmxvYi5sICs9IDE7XG5cdHZhciBpZnRhYiA9IGJsb2IucmVhZF9zaGlmdChvcHRzICYmIG9wdHMuYmlmZiA8PSAzID8gMSA6IDIpO1xuXHRyZXR1cm4gW0Z0YWJBcmdjW2lmdGFiXSwgRnRhYltpZnRhYl0sIHR5cGVdO1xufVxuLyogMi41LjE5OC42MyBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9QdGdGdW5jVmFyKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHRibG9iLmwrKztcblx0dmFyIGNwYXJhbXMgPSBibG9iLnJlYWRfc2hpZnQoMSksIHRhYiA9IG9wdHMgJiYgb3B0cy5iaWZmIDw9IDMgPyBbMCwgYmxvYi5yZWFkX3NoaWZ0KDEpXTogcGFyc2V0YWIoYmxvYik7XG5cdHJldHVybiBbY3BhcmFtcywgKHRhYlswXSA9PT0gMCA/IEZ0YWIgOiBDZXRhYilbdGFiWzFdXV07XG59XG5cbmZ1bmN0aW9uIHBhcnNldGFiKGJsb2IpIHtcblx0cmV0dXJuIFtibG9iW2Jsb2IubCsxXT4+NywgYmxvYi5yZWFkX3NoaWZ0KDIpICYgMHg3RkZGXTtcbn1cblxuLyogMi41LjE5OC40MSAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnQXR0clN1bShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0YmxvYi5sICs9IG9wdHMgJiYgb3B0cy5iaWZmID09IDIgPyAzIDogNDsgcmV0dXJuO1xufVxuXG4vKiAyLjUuMTk4LjU4ICovXG5mdW5jdGlvbiBwYXJzZV9QdGdFeHAoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdGJsb2IubCsrO1xuXHRpZihvcHRzICYmIG9wdHMuYmlmZiA9PSAxMikgcmV0dXJuIFtibG9iLnJlYWRfc2hpZnQoNCwgJ2knKSwgMF07XG5cdHZhciByb3cgPSBibG9iLnJlYWRfc2hpZnQoMik7XG5cdHZhciBjb2wgPSBibG9iLnJlYWRfc2hpZnQob3B0cyAmJiBvcHRzLmJpZmYgPT0gMiA/IDEgOiAyKTtcblx0cmV0dXJuIFtyb3csIGNvbF07XG59XG5cbi8qIDIuNS4xOTguNTcgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z0VycihibG9iKSB7IGJsb2IubCsrOyByZXR1cm4gQkVycltibG9iLnJlYWRfc2hpZnQoMSldOyB9XG5cbi8qIDIuNS4xOTguNjYgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z0ludChibG9iKSB7IGJsb2IubCsrOyByZXR1cm4gYmxvYi5yZWFkX3NoaWZ0KDIpOyB9XG5cbi8qIDIuNS4xOTguNDIgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z0Jvb2woYmxvYikgeyBibG9iLmwrKzsgcmV0dXJuIGJsb2IucmVhZF9zaGlmdCgxKSE9PTA7fVxuXG4vKiAyLjUuMTk4Ljc5ICovXG5mdW5jdGlvbiBwYXJzZV9QdGdOdW0oYmxvYikgeyBibG9iLmwrKzsgcmV0dXJuIHBhcnNlX1hudW0oYmxvYiwgOCk7IH1cblxuLyogMi41LjE5OC44OSAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnU3RyKGJsb2IsIGxlbmd0aCwgb3B0cykgeyBibG9iLmwrKzsgcmV0dXJuIHBhcnNlX1Nob3J0WExVbmljb2RlU3RyaW5nKGJsb2IsIGxlbmd0aC0xLCBvcHRzKTsgfVxuXG4vKiBbTVMtWExTXSAyLjUuMTkyLjExMiArIDIuNS4xOTIuMTF7Myw0LDUsNiw3fSAqL1xuLyogW01TLVhMU0JdIDIuNS45Ny45MyArIDIuNS45Ny45ezQsNSw2LDd9ICovXG5mdW5jdGlvbiBwYXJzZV9TZXJBcihibG9iLCBiaWZmKSB7XG5cdHZhciB2YWwgPSBbYmxvYi5yZWFkX3NoaWZ0KDEpXTtcblx0aWYoYmlmZiA9PSAxMikgc3dpdGNoKHZhbFswXSkge1xuXHRcdGNhc2UgMHgwMjogdmFsWzBdID0gMHgwNDsgYnJlYWs7IC8qIFNlckJvb2wgKi9cblx0XHRjYXNlIDB4MDQ6IHZhbFswXSA9IDB4MTA7IGJyZWFrOyAvKiBTZXJFcnIgKi9cblx0XHRjYXNlIDB4MDA6IHZhbFswXSA9IDB4MDE7IGJyZWFrOyAvKiBTZXJOdW0gKi9cblx0XHRjYXNlIDB4MDE6IHZhbFswXSA9IDB4MDI7IGJyZWFrOyAvKiBTZXJTdHIgKi9cblx0fVxuXHRzd2l0Y2godmFsWzBdKSB7XG5cdFx0LyogMi41LjE5Mi4xMTMgKi9cblx0XHRjYXNlIDB4MDQ6IC8qIFNlckJvb2wgLS0gYm9vbGVhbiAqL1xuXHRcdFx0dmFsWzFdID0gcGFyc2Vib29sKGJsb2IsIDEpID8gJ1RSVUUnIDogJ0ZBTFNFJztcblx0XHRcdGJsb2IubCArPSA3OyBicmVhaztcblx0XHQvKiAyLjUuMTkyLjExNCAqL1xuXHRcdGNhc2UgMHgxMDogLyogU2VyRXJyIC0tIGVycm9yICovXG5cdFx0XHR2YWxbMV0gPSBCRXJyW2Jsb2JbYmxvYi5sXV07XG5cdFx0XHRibG9iLmwgKz0gODsgYnJlYWs7XG5cdFx0LyogMi41LjE5Mi4xMTUgKi9cblx0XHRjYXNlIDB4MDA6IC8qIFNlck5pbCAtLSBob25lc3RseSwgSSdtIG5vdCBzdXJlIGhvdyB0byByZXByb2R1Y2UgdGhpcyAqL1xuXHRcdFx0YmxvYi5sICs9IDg7IGJyZWFrO1xuXHRcdC8qIDIuNS4xOTIuMTE2ICovXG5cdFx0Y2FzZSAweDAxOiAvKiBTZXJOdW0gLS0gWG51bSAqL1xuXHRcdFx0dmFsWzFdID0gcGFyc2VfWG51bShibG9iLCA4KTsgYnJlYWs7XG5cdFx0LyogMi41LjE5Mi4xMTcgKi9cblx0XHRjYXNlIDB4MDI6IC8qIFNlclN0ciAtLSBYTFVuaWNvZGVTdHJpbmcgKDwyNTYgY2hhcnMpICovXG5cdFx0XHR2YWxbMV0gPSBwYXJzZV9YTFVuaWNvZGVTdHJpbmcyKGJsb2IsIDAsIHtiaWZmOmJpZmYgPiAwICYmIGJpZmYgPCA4ID8gMiA6IGJpZmZ9KTsgYnJlYWs7XG5cdFx0Ly8gZGVmYXVsdDogdGhyb3cgXCJCYWQgU2VyQXI6IFwiICsgdmFsWzBdOyAvKiBVbnJlYWNoYWJsZSAqL1xuXHR9XG5cdHJldHVybiB2YWw7XG59XG5cbi8qIDIuNS4xOTguNjEgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z0V4dHJhTWVtKGJsb2IpIHtcblx0dmFyIGNvdW50ID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgb3V0ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgb3V0LnB1c2gocGFyc2VfUmVmOFUoYmxvYiwgOCkpO1xuXHRyZXR1cm4gb3V0O1xufVxuXG4vKiAyLjUuMTk4LjU5ICovXG5mdW5jdGlvbiBwYXJzZV9QdGdFeHRyYUFycmF5KGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgcm93cyA9IDAsIGNvbHMgPSAwO1xuXHRpZihvcHRzLmJpZmYgPT0gMTIpIHtcblx0XHRyb3dzID0gYmxvYi5yZWFkX3NoaWZ0KDQpOyAvLyBEUndcblx0XHRjb2xzID0gYmxvYi5yZWFkX3NoaWZ0KDQpOyAvLyBEQ29sXG5cdH0gZWxzZSB7XG5cdFx0Y29scyA9IDEgKyBibG9iLnJlYWRfc2hpZnQoMSk7IC8vRENvbEJ5dGVVXG5cdFx0cm93cyA9IDEgKyBibG9iLnJlYWRfc2hpZnQoMik7IC8vRFJ3XG5cdH1cblx0aWYob3B0cy5iaWZmID49IDIgJiYgb3B0cy5iaWZmIDwgOCkgeyAtLXJvd3M7IGlmKC0tY29scyA9PSAwKSBjb2xzID0gMHgxMDA7IH1cblx0Ly8gJEZsb3dJZ25vcmVcblx0Zm9yKHZhciBpID0gMCwgbyA9IFtdOyBpICE9IHJvd3MgJiYgKG9baV0gPSBbXSk7ICsraSlcblx0XHRmb3IodmFyIGogPSAwOyBqICE9IGNvbHM7ICsraikgb1tpXVtqXSA9IHBhcnNlX1NlckFyKGJsb2IsIG9wdHMuYmlmZik7XG5cdHJldHVybiBvO1xufVxuXG4vKiAyLjUuMTk4Ljc2ICovXG5mdW5jdGlvbiBwYXJzZV9QdGdOYW1lKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgdHlwZSA9IChibG9iLnJlYWRfc2hpZnQoMSkgPj4+IDUpICYgMHgwMztcblx0dmFyIHcgPSAoIW9wdHMgfHwgKG9wdHMuYmlmZiA+PSA4KSkgPyA0IDogMjtcblx0dmFyIG5hbWVpbmRleCA9IGJsb2IucmVhZF9zaGlmdCh3KTtcblx0c3dpdGNoKG9wdHMuYmlmZikge1xuXHRcdGNhc2UgMjogYmxvYi5sICs9IDU7IGJyZWFrO1xuXHRcdGNhc2UgMzogY2FzZSA0OiBibG9iLmwgKz0gODsgYnJlYWs7XG5cdFx0Y2FzZSA1OiBibG9iLmwgKz0gMTI7IGJyZWFrO1xuXHR9XG5cdHJldHVybiBbdHlwZSwgMCwgbmFtZWluZGV4XTtcbn1cblxuLyogMi41LjE5OC43NyAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnTmFtZVgoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdGlmKG9wdHMuYmlmZiA9PSA1KSByZXR1cm4gcGFyc2VfUHRnTmFtZVhfQklGRjUoYmxvYiwgbGVuZ3RoLCBvcHRzKTtcblx0dmFyIHR5cGUgPSAoYmxvYi5yZWFkX3NoaWZ0KDEpID4+PiA1KSAmIDB4MDM7XG5cdHZhciBpeHRpID0gYmxvYi5yZWFkX3NoaWZ0KDIpOyAvLyBYdGlJbmRleFxuXHR2YXIgbmFtZWluZGV4ID0gYmxvYi5yZWFkX3NoaWZ0KDQpO1xuXHRyZXR1cm4gW3R5cGUsIGl4dGksIG5hbWVpbmRleF07XG59XG5mdW5jdGlvbiBwYXJzZV9QdGdOYW1lWF9CSUZGNShibG9iKSB7XG5cdHZhciB0eXBlID0gKGJsb2IucmVhZF9zaGlmdCgxKSA+Pj4gNSkgJiAweDAzO1xuXHR2YXIgaXh0aSA9IGJsb2IucmVhZF9zaGlmdCgyLCAnaScpOyAvLyBYdGlJbmRleFxuXHRibG9iLmwgKz0gODtcblx0dmFyIG5hbWVpbmRleCA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IDEyO1xuXHRyZXR1cm4gW3R5cGUsIGl4dGksIG5hbWVpbmRleF07XG59XG5cbi8qIDIuNS4xOTguNzAgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z01lbUFyZWEoYmxvYiwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciB0eXBlID0gKGJsb2IucmVhZF9zaGlmdCgxKSA+Pj4gNSkgJiAweDAzO1xuXHRibG9iLmwgKz0gKG9wdHMgJiYgb3B0cy5iaWZmID09IDIgPyAzIDogNCk7XG5cdHZhciBjY2UgPSBibG9iLnJlYWRfc2hpZnQob3B0cyAmJiBvcHRzLmJpZmYgPT0gMiA/IDEgOiAyKTtcblx0cmV0dXJuIFt0eXBlLCBjY2VdO1xufVxuXG4vKiAyLjUuMTk4LjcyICovXG5mdW5jdGlvbiBwYXJzZV9QdGdNZW1GdW5jKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgdHlwZSA9IChibG9iLnJlYWRfc2hpZnQoMSkgPj4+IDUpICYgMHgwMztcblx0dmFyIGNjZSA9IGJsb2IucmVhZF9zaGlmdChvcHRzICYmIG9wdHMuYmlmZiA9PSAyID8gMSA6IDIpO1xuXHRyZXR1cm4gW3R5cGUsIGNjZV07XG59XG5cblxuLyogMi41LjE5OC44NiAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnUmVmRXJyKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgdHlwZSA9IChibG9iLnJlYWRfc2hpZnQoMSkgPj4+IDUpICYgMHgwMztcblx0YmxvYi5sICs9IDQ7XG5cdGlmKG9wdHMuYmlmZiA9PSAxMikgYmxvYi5sICs9IDI7XG5cdHJldHVybiBbdHlwZV07XG59XG5cbi8qIDIuNS4xOTguODcgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z1JlZkVycjNkKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgdHlwZSA9IChibG9iW2Jsb2IubCsrXSAmIDB4NjApID4+IDU7XG5cdHZhciBpeHRpID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHR2YXIgdyA9IDQ7XG5cdGlmKG9wdHMpIHN3aXRjaChvcHRzLmJpZmYpIHtcblx0XHRjYXNlIDU6IHRocm93IG5ldyBFcnJvcihcIlB0Z1JlZkVycjNkIC0tIDVcIik7IC8vIFRPRE86IGZpbmQgdGVzdCBjYXNlXG5cdFx0Y2FzZSAxMjogdyA9IDY7IGJyZWFrO1xuXHR9XG5cdGJsb2IubCArPSB3O1xuXHRyZXR1cm4gW3R5cGUsIGl4dGldO1xufVxuXG4vKiAyLjUuMTk4LjcxICovXG52YXIgcGFyc2VfUHRnTWVtRXJyID0gcGFyc2Vub29wO1xuLyogMi41LjE5OC43MyAqL1xudmFyIHBhcnNlX1B0Z01lbU5vTWVtID0gcGFyc2Vub29wO1xuLyogMi41LjE5OC45MiAqL1xudmFyIHBhcnNlX1B0Z1RibCA9IHBhcnNlbm9vcDtcblxuZnVuY3Rpb24gcGFyc2VfUHRnRWxmTG9jKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHRibG9iLmwgKz0gMjtcblx0cmV0dXJuIFtwYXJzZV9SZ2NlRWxmTG9jKGJsb2IsIDQsIG9wdHMpXTtcbn1cbmZ1bmN0aW9uIHBhcnNlX1B0Z0VsZk5vb3AoYmxvYikge1xuXHRibG9iLmwgKz0gNjtcblx0cmV0dXJuIFtdO1xufVxuLyogMi41LjE5OC40NiAqL1xudmFyIHBhcnNlX1B0Z0VsZkNvbCA9IHBhcnNlX1B0Z0VsZkxvYztcbi8qIDIuNS4xOTguNDcgKi9cbnZhciBwYXJzZV9QdGdFbGZDb2xTID0gcGFyc2VfUHRnRWxmTm9vcDtcbi8qIDIuNS4xOTguNDggKi9cbnZhciBwYXJzZV9QdGdFbGZDb2xTViA9IHBhcnNlX1B0Z0VsZk5vb3A7XG4vKiAyLjUuMTk4LjQ5ICovXG52YXIgcGFyc2VfUHRnRWxmQ29sViA9IHBhcnNlX1B0Z0VsZkxvYztcbi8qIDIuNS4xOTguNTAgKi9cbmZ1bmN0aW9uIHBhcnNlX1B0Z0VsZkxlbChibG9iKSB7XG5cdGJsb2IubCArPSAyO1xuXHRyZXR1cm4gW3BhcnNldWludDE2KGJsb2IpLCBibG9iLnJlYWRfc2hpZnQoMikgJiAweDAxXTtcbn1cbi8qIDIuNS4xOTguNTEgKi9cbnZhciBwYXJzZV9QdGdFbGZSYWRpY2FsID0gcGFyc2VfUHRnRWxmTG9jO1xuLyogMi41LjE5OC41MiAqL1xudmFyIHBhcnNlX1B0Z0VsZlJhZGljYWxMZWwgPSBwYXJzZV9QdGdFbGZMZWw7XG4vKiAyLjUuMTk4LjUzICovXG52YXIgcGFyc2VfUHRnRWxmUmFkaWNhbFMgPSBwYXJzZV9QdGdFbGZOb29wO1xuLyogMi41LjE5OC41NCAqL1xudmFyIHBhcnNlX1B0Z0VsZlJ3ID0gcGFyc2VfUHRnRWxmTG9jO1xuLyogMi41LjE5OC41NSAqL1xudmFyIHBhcnNlX1B0Z0VsZlJ3ViA9IHBhcnNlX1B0Z0VsZkxvYztcblxuLyogW01TLVhMU0JdIDIuNS45Ny41MiAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnTGlzdChibG9iKSB7XG5cdGJsb2IubCArPSAyO1xuXHR2YXIgaXh0aSA9IGJsb2IucmVhZF9zaGlmdCgyKTtcblx0YmxvYi5sICs9IDEwO1xuXHRyZXR1cm4ge2l4dGk6IGl4dGl9O1xufVxuLyogMi41LjE5OC45MSAqL1xuZnVuY3Rpb24gcGFyc2VfUHRnU3hOYW1lKGJsb2IpIHtcblx0YmxvYi5sICs9IDI7XG5cdHJldHVybiBbYmxvYi5yZWFkX3NoaWZ0KDQpXTtcbn1cblxuLyogMi41LjE5OC4yNSAqL1xudmFyIFB0Z1R5cGVzID0ge1xuMHgwMTogeyBuOidQdGdFeHAnLCBmOnBhcnNlX1B0Z0V4cCB9LFxuMHgwMjogeyBuOidQdGdUYmwnLCBmOnBhcnNlX1B0Z1RibCB9LFxuMHgwMzogeyBuOidQdGdBZGQnLCBmOnBhcnNlcmVhZDEgfSxcbjB4MDQ6IHsgbjonUHRnU3ViJywgZjpwYXJzZXJlYWQxIH0sXG4weDA1OiB7IG46J1B0Z011bCcsIGY6cGFyc2VyZWFkMSB9LFxuMHgwNjogeyBuOidQdGdEaXYnLCBmOnBhcnNlcmVhZDEgfSxcbjB4MDc6IHsgbjonUHRnUG93ZXInLCBmOnBhcnNlcmVhZDEgfSxcbjB4MDg6IHsgbjonUHRnQ29uY2F0JywgZjpwYXJzZXJlYWQxIH0sXG4weDA5OiB7IG46J1B0Z0x0JywgZjpwYXJzZXJlYWQxIH0sXG4weDBBOiB7IG46J1B0Z0xlJywgZjpwYXJzZXJlYWQxIH0sXG4weDBCOiB7IG46J1B0Z0VxJywgZjpwYXJzZXJlYWQxIH0sXG4weDBDOiB7IG46J1B0Z0dlJywgZjpwYXJzZXJlYWQxIH0sXG4weDBEOiB7IG46J1B0Z0d0JywgZjpwYXJzZXJlYWQxIH0sXG4weDBFOiB7IG46J1B0Z05lJywgZjpwYXJzZXJlYWQxIH0sXG4weDBGOiB7IG46J1B0Z0lzZWN0JywgZjpwYXJzZXJlYWQxIH0sXG4weDEwOiB7IG46J1B0Z1VuaW9uJywgZjpwYXJzZXJlYWQxIH0sXG4weDExOiB7IG46J1B0Z1JhbmdlJywgZjpwYXJzZXJlYWQxIH0sXG4weDEyOiB7IG46J1B0Z1VwbHVzJywgZjpwYXJzZXJlYWQxIH0sXG4weDEzOiB7IG46J1B0Z1VtaW51cycsIGY6cGFyc2VyZWFkMSB9LFxuMHgxNDogeyBuOidQdGdQZXJjZW50JywgZjpwYXJzZXJlYWQxIH0sXG4weDE1OiB7IG46J1B0Z1BhcmVuJywgZjpwYXJzZXJlYWQxIH0sXG4weDE2OiB7IG46J1B0Z01pc3NBcmcnLCBmOnBhcnNlcmVhZDEgfSxcbjB4MTc6IHsgbjonUHRnU3RyJywgZjpwYXJzZV9QdGdTdHIgfSxcbjB4MUM6IHsgbjonUHRnRXJyJywgZjpwYXJzZV9QdGdFcnIgfSxcbjB4MUQ6IHsgbjonUHRnQm9vbCcsIGY6cGFyc2VfUHRnQm9vbCB9LFxuMHgxRTogeyBuOidQdGdJbnQnLCBmOnBhcnNlX1B0Z0ludCB9LFxuMHgxRjogeyBuOidQdGdOdW0nLCBmOnBhcnNlX1B0Z051bSB9LFxuMHgyMDogeyBuOidQdGdBcnJheScsIGY6cGFyc2VfUHRnQXJyYXkgfSxcbjB4MjE6IHsgbjonUHRnRnVuYycsIGY6cGFyc2VfUHRnRnVuYyB9LFxuMHgyMjogeyBuOidQdGdGdW5jVmFyJywgZjpwYXJzZV9QdGdGdW5jVmFyIH0sXG4weDIzOiB7IG46J1B0Z05hbWUnLCBmOnBhcnNlX1B0Z05hbWUgfSxcbjB4MjQ6IHsgbjonUHRnUmVmJywgZjpwYXJzZV9QdGdSZWYgfSxcbjB4MjU6IHsgbjonUHRnQXJlYScsIGY6cGFyc2VfUHRnQXJlYSB9LFxuMHgyNjogeyBuOidQdGdNZW1BcmVhJywgZjpwYXJzZV9QdGdNZW1BcmVhIH0sXG4weDI3OiB7IG46J1B0Z01lbUVycicsIGY6cGFyc2VfUHRnTWVtRXJyIH0sXG4weDI4OiB7IG46J1B0Z01lbU5vTWVtJywgZjpwYXJzZV9QdGdNZW1Ob01lbSB9LFxuMHgyOTogeyBuOidQdGdNZW1GdW5jJywgZjpwYXJzZV9QdGdNZW1GdW5jIH0sXG4weDJBOiB7IG46J1B0Z1JlZkVycicsIGY6cGFyc2VfUHRnUmVmRXJyIH0sXG4weDJCOiB7IG46J1B0Z0FyZWFFcnInLCBmOnBhcnNlX1B0Z0FyZWFFcnIgfSxcbjB4MkM6IHsgbjonUHRnUmVmTicsIGY6cGFyc2VfUHRnUmVmTiB9LFxuMHgyRDogeyBuOidQdGdBcmVhTicsIGY6cGFyc2VfUHRnQXJlYU4gfSxcbjB4Mzk6IHsgbjonUHRnTmFtZVgnLCBmOnBhcnNlX1B0Z05hbWVYIH0sXG4weDNBOiB7IG46J1B0Z1JlZjNkJywgZjpwYXJzZV9QdGdSZWYzZCB9LFxuMHgzQjogeyBuOidQdGdBcmVhM2QnLCBmOnBhcnNlX1B0Z0FyZWEzZCB9LFxuMHgzQzogeyBuOidQdGdSZWZFcnIzZCcsIGY6cGFyc2VfUHRnUmVmRXJyM2QgfSxcbjB4M0Q6IHsgbjonUHRnQXJlYUVycjNkJywgZjpwYXJzZV9QdGdBcmVhRXJyM2QgfSxcbjB4RkY6IHt9XG59O1xuLyogVGhlc2UgYXJlIGR1cGxpY2F0ZWQgaW4gdGhlIFB0Z1R5cGVzIHRhYmxlICovXG52YXIgUHRnRHVwZXMgPSB7XG4weDQwOiAweDIwLCAweDYwOiAweDIwLFxuMHg0MTogMHgyMSwgMHg2MTogMHgyMSxcbjB4NDI6IDB4MjIsIDB4NjI6IDB4MjIsXG4weDQzOiAweDIzLCAweDYzOiAweDIzLFxuMHg0NDogMHgyNCwgMHg2NDogMHgyNCxcbjB4NDU6IDB4MjUsIDB4NjU6IDB4MjUsXG4weDQ2OiAweDI2LCAweDY2OiAweDI2LFxuMHg0NzogMHgyNywgMHg2NzogMHgyNyxcbjB4NDg6IDB4MjgsIDB4Njg6IDB4MjgsXG4weDQ5OiAweDI5LCAweDY5OiAweDI5LFxuMHg0QTogMHgyQSwgMHg2QTogMHgyQSxcbjB4NEI6IDB4MkIsIDB4NkI6IDB4MkIsXG4weDRDOiAweDJDLCAweDZDOiAweDJDLFxuMHg0RDogMHgyRCwgMHg2RDogMHgyRCxcbjB4NTk6IDB4MzksIDB4Nzk6IDB4MzksXG4weDVBOiAweDNBLCAweDdBOiAweDNBLFxuMHg1QjogMHgzQiwgMHg3QjogMHgzQixcbjB4NUM6IDB4M0MsIDB4N0M6IDB4M0MsXG4weDVEOiAweDNELCAweDdEOiAweDNEXG59O1xuKGZ1bmN0aW9uKCl7Zm9yKHZhciB5IGluIFB0Z0R1cGVzKSBQdGdUeXBlc1t5XSA9IFB0Z1R5cGVzW1B0Z0R1cGVzW3ldXTt9KSgpO1xuXG52YXIgUHRnMTggPSB7XG4weDAxOiB7IG46J1B0Z0VsZkxlbCcsIGY6cGFyc2VfUHRnRWxmTGVsIH0sXG4weDAyOiB7IG46J1B0Z0VsZlJ3JywgZjpwYXJzZV9QdGdFbGZSdyB9LFxuMHgwMzogeyBuOidQdGdFbGZDb2wnLCBmOnBhcnNlX1B0Z0VsZkNvbCB9LFxuMHgwNjogeyBuOidQdGdFbGZSd1YnLCBmOnBhcnNlX1B0Z0VsZlJ3ViB9LFxuMHgwNzogeyBuOidQdGdFbGZDb2xWJywgZjpwYXJzZV9QdGdFbGZDb2xWIH0sXG4weDBBOiB7IG46J1B0Z0VsZlJhZGljYWwnLCBmOnBhcnNlX1B0Z0VsZlJhZGljYWwgfSxcbjB4MEI6IHsgbjonUHRnRWxmUmFkaWNhbFMnLCBmOnBhcnNlX1B0Z0VsZlJhZGljYWxTIH0sXG4weDBEOiB7IG46J1B0Z0VsZkNvbFMnLCBmOnBhcnNlX1B0Z0VsZkNvbFMgfSxcbjB4MEY6IHsgbjonUHRnRWxmQ29sU1YnLCBmOnBhcnNlX1B0Z0VsZkNvbFNWIH0sXG4weDEwOiB7IG46J1B0Z0VsZlJhZGljYWxMZWwnLCBmOnBhcnNlX1B0Z0VsZlJhZGljYWxMZWwgfSxcbjB4MTk6IHsgbjonUHRnTGlzdCcsIGY6cGFyc2VfUHRnTGlzdCB9LFxuMHgxRDogeyBuOidQdGdTeE5hbWUnLCBmOnBhcnNlX1B0Z1N4TmFtZSB9LFxuMHhGRjoge31cbn07XG52YXIgUHRnMTkgPSB7XG4weDAxOiB7IG46J1B0Z0F0dHJTZW1pJywgZjpwYXJzZV9QdGdBdHRyU2VtaSB9LFxuMHgwMjogeyBuOidQdGdBdHRySWYnLCBmOnBhcnNlX1B0Z0F0dHJJZiB9LFxuMHgwNDogeyBuOidQdGdBdHRyQ2hvb3NlJywgZjpwYXJzZV9QdGdBdHRyQ2hvb3NlIH0sXG4weDA4OiB7IG46J1B0Z0F0dHJHb3RvJywgZjpwYXJzZV9QdGdBdHRyR290byB9LFxuMHgxMDogeyBuOidQdGdBdHRyU3VtJywgZjpwYXJzZV9QdGdBdHRyU3VtIH0sXG4weDIwOiB7IG46J1B0Z0F0dHJCYXhjZWwnLCBmOnBhcnNlX1B0Z0F0dHJCYXhjZWwgfSxcbjB4NDA6IHsgbjonUHRnQXR0clNwYWNlJywgZjpwYXJzZV9QdGdBdHRyU3BhY2UgfSxcbjB4NDE6IHsgbjonUHRnQXR0clNwYWNlU2VtaScsIGY6cGFyc2VfUHRnQXR0clNwYWNlU2VtaSB9LFxuMHg4MDogeyBuOidQdGdBdHRySWZFcnJvcicsIGY6cGFyc2VfUHRnQXR0cklmRXJyb3IgfSxcbjB4RkY6IHt9XG59O1xuUHRnMTlbMHgyMV0gPSBQdGcxOVsweDIwXTtcblxuLyogMi41LjE5OC4xMDMgKi9cbmZ1bmN0aW9uIHBhcnNlX1JnYkV4dHJhKGJsb2IsIGxlbmd0aCwgcmdjZSwgb3B0cykge1xuXHRpZihvcHRzLmJpZmYgPCA4KSByZXR1cm4gcGFyc2Vub29wKGJsb2IsIGxlbmd0aCk7XG5cdHZhciB0YXJnZXQgPSBibG9iLmwgKyBsZW5ndGg7XG5cdHZhciBvID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgIT09IHJnY2UubGVuZ3RoOyArK2kpIHtcblx0XHRzd2l0Y2gocmdjZVtpXVswXSkge1xuXHRcdFx0Y2FzZSAnUHRnQXJyYXknOiAvKiBQdGdBcnJheSAtPiBQdGdFeHRyYUFycmF5ICovXG5cdFx0XHRcdHJnY2VbaV1bMV0gPSBwYXJzZV9QdGdFeHRyYUFycmF5KGJsb2IsIDAsIG9wdHMpO1xuXHRcdFx0XHRvLnB1c2gocmdjZVtpXVsxXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnUHRnTWVtQXJlYSc6IC8qIFB0Z01lbUFyZWEgLT4gUHRnRXh0cmFNZW0gKi9cblx0XHRcdFx0cmdjZVtpXVsyXSA9IHBhcnNlX1B0Z0V4dHJhTWVtKGJsb2IsIHJnY2VbaV1bMV0pO1xuXHRcdFx0XHRvLnB1c2gocmdjZVtpXVsyXSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnUHRnRXhwJzogLyogUHRnRXhwIC0+IFB0Z0V4dHJhQ29sICovXG5cdFx0XHRcdGlmKG9wdHMgJiYgb3B0cy5iaWZmID09IDEyKSB7XG5cdFx0XHRcdFx0cmdjZVtpXVsxXVsxXSA9IGJsb2IucmVhZF9zaGlmdCg0KTtcblx0XHRcdFx0XHRvLnB1c2gocmdjZVtpXVsxXSk7XG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRjYXNlICdQdGdMaXN0JzogLyogVE9ETzogUHRnTGlzdCAtPiBQdGdFeHRyYUxpc3QgKi9cblx0XHRcdGNhc2UgJ1B0Z0VsZlJhZGljYWxTJzogLyogVE9ETzogUHRnRWxmUmFkaWNhbFMgLT4gUHRnRXh0cmFFbGYgKi9cblx0XHRcdGNhc2UgJ1B0Z0VsZkNvbFMnOiAvKiBUT0RPOiBQdGdFbGZDb2xTIC0+IFB0Z0V4dHJhRWxmICovXG5cdFx0XHRjYXNlICdQdGdFbGZDb2xTVic6IC8qIFRPRE86IFB0Z0VsZkNvbFNWIC0+IFB0Z0V4dHJhRWxmICovXG5cdFx0XHRcdHRocm93IFwiVW5zdXBwb3J0ZWQgXCIgKyByZ2NlW2ldWzBdO1xuXHRcdFx0ZGVmYXVsdDogYnJlYWs7XG5cdFx0fVxuXHR9XG5cdGxlbmd0aCA9IHRhcmdldCAtIGJsb2IubDtcblx0Lyogbm90ZTogdGhpcyBpcyB0ZWNobmljYWxseSBhbiBlcnJvciBidXQgRXhjZWwgZGlzcmVnYXJkcyAqL1xuXHQvL2lmKHRhcmdldCAhPT0gYmxvYi5sICYmIGJsb2IubCAhPT0gdGFyZ2V0IC0gbGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IodGFyZ2V0ICsgXCIgIT0gXCIgKyBibG9iLmwpO1xuXHRpZihsZW5ndGggIT09IDApIG8ucHVzaChwYXJzZW5vb3AoYmxvYiwgbGVuZ3RoKSk7XG5cdHJldHVybiBvO1xufVxuXG4vKiAyLjUuMTk4LjEwNCAqL1xuZnVuY3Rpb24gcGFyc2VfUmdjZShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHRhcmdldCA9IGJsb2IubCArIGxlbmd0aDtcblx0dmFyIFIsIGlkLCBwdGdzID0gW107XG5cdHdoaWxlKHRhcmdldCAhPSBibG9iLmwpIHtcblx0XHRsZW5ndGggPSB0YXJnZXQgLSBibG9iLmw7XG5cdFx0aWQgPSBibG9iW2Jsb2IubF07XG5cdFx0UiA9IFB0Z1R5cGVzW2lkXTtcblx0XHRpZihpZCA9PT0gMHgxOCB8fCBpZCA9PT0gMHgxOSkge1xuXHRcdFx0aWQgPSBibG9iW2Jsb2IubCArIDFdO1xuXHRcdFx0UiA9IChpZCA9PT0gMHgxOCA/IFB0ZzE4IDogUHRnMTkpW2lkXTtcblx0XHR9XG5cdFx0aWYoIVIgfHwgIVIuZikgeyAvKnB0Z3MucHVzaCovKHBhcnNlbm9vcChibG9iLCBsZW5ndGgpKTsgfVxuXHRcdC8vICRGbG93SWdub3JlXG5cdFx0ZWxzZSB7IHB0Z3MucHVzaChbUi5uLCBSLmYoYmxvYiwgbGVuZ3RoLCBvcHRzKV0pOyB9XG5cdH1cblx0cmV0dXJuIHB0Z3M7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeV9hcnJheShmKSB7XG5cdHZhciBvID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBmLmxlbmd0aDsgKytpKSB7XG5cdFx0dmFyIHggPSBmW2ldLCByID0gW107XG5cdFx0Zm9yKHZhciBqID0gMDsgaiA8IHgubGVuZ3RoOyArK2opIHtcblx0XHRcdHZhciB5ID0geFtqXTtcblx0XHRcdGlmKHkpIHN3aXRjaCh5WzBdKSB7XG5cdFx0XHRcdC8vIFRPRE86IGhhbmRsZSBlbWJlZGRlZCBxdW90ZXNcblx0XHRcdFx0Y2FzZSAweDAyOlxuci5wdXNoKCdcIicgKyB5WzFdLnJlcGxhY2UoL1wiL2csJ1wiXCInKSArICdcIicpOyBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogci5wdXNoKHlbMV0pO1xuXHRcdFx0fSBlbHNlIHIucHVzaChcIlwiKTtcblx0XHR9XG5cdFx0by5wdXNoKHIuam9pbihcIixcIikpO1xuXHR9XG5cdHJldHVybiBvLmpvaW4oXCI7XCIpO1xufVxuXG4vKiBbTVMtWExTXSAyLjIuMiBUT0RPICovXG4vKiBbTVMtWExTQl0gMi4yLjIgKi9cbnZhciBQdGdCaW5PcCA9IHtcblx0UHRnQWRkOiBcIitcIixcblx0UHRnQ29uY2F0OiBcIiZcIixcblx0UHRnRGl2OiBcIi9cIixcblx0UHRnRXE6IFwiPVwiLFxuXHRQdGdHZTogXCI+PVwiLFxuXHRQdGdHdDogXCI+XCIsXG5cdFB0Z0xlOiBcIjw9XCIsXG5cdFB0Z0x0OiBcIjxcIixcblx0UHRnTXVsOiBcIipcIixcblx0UHRnTmU6IFwiPD5cIixcblx0UHRnUG93ZXI6IFwiXlwiLFxuXHRQdGdTdWI6IFwiLVwiXG59O1xuZnVuY3Rpb24gZm9ybXVsYV9xdW90ZV9zaGVldF9uYW1lKHNuYW1lLCBvcHRzKSB7XG5cdGlmKCFzbmFtZSAmJiAhKG9wdHMgJiYgb3B0cy5iaWZmIDw9IDUgJiYgb3B0cy5iaWZmID49IDIpKSB0aHJvdyBuZXcgRXJyb3IoXCJlbXB0eSBzaGVldCBuYW1lXCIpO1xuXHRpZihzbmFtZS5pbmRleE9mKFwiIFwiKSA+IC0xKSByZXR1cm4gXCInXCIgKyBzbmFtZSArIFwiJ1wiO1xuXHRyZXR1cm4gc25hbWU7XG59XG5mdW5jdGlvbiBnZXRfaXh0aV9yYXcoc3VwYm9va3MsIGl4dGksIG9wdHMpIHtcblx0aWYoIXN1cGJvb2tzKSByZXR1cm4gXCJTSDMzVEpTRVJSMFwiO1xuXHRpZighc3VwYm9va3MuWFRJKSByZXR1cm4gXCJTSDMzVEpTRVJSNlwiO1xuXHR2YXIgWFRJID0gc3VwYm9va3MuWFRJW2l4dGldO1xuXHRpZihvcHRzLmJpZmYgPiA4ICYmICFzdXBib29rcy5YVElbaXh0aV0pIHJldHVybiBzdXBib29rcy5TaGVldE5hbWVzW2l4dGldO1xuXHRpZihvcHRzLmJpZmYgPCA4KSB7XG5cdFx0aWYoaXh0aSA+IDEwMDAwKSBpeHRpLT0gNjU1MzY7XG5cdFx0aWYoaXh0aSA8IDApIGl4dGkgPSAtaXh0aTtcblx0XHRyZXR1cm4gaXh0aSA9PSAwID8gXCJcIiA6IHN1cGJvb2tzLlhUSVtpeHRpIC0gMV07XG5cdH1cblx0aWYoIVhUSSkgcmV0dXJuIFwiU0gzM1RKU0VSUjFcIjtcblx0dmFyIG8gPSBcIlwiO1xuXHRpZihvcHRzLmJpZmYgPiA4KSBzd2l0Y2goc3VwYm9va3NbWFRJWzBdXVswXSkge1xuXHRcdGNhc2UgMHgwMTY1OiAvKiAnQnJ0U3VwU2VsZicgKi9cblx0XHRcdG8gPSBYVElbMV0gPT0gLTEgPyBcIiNSRUZcIiA6IHN1cGJvb2tzLlNoZWV0TmFtZXNbWFRJWzFdXTtcblx0XHRcdHJldHVybiBYVElbMV0gPT0gWFRJWzJdID8gbyA6IG8gKyBcIjpcIiArIHN1cGJvb2tzLlNoZWV0TmFtZXNbWFRJWzJdXTtcblx0XHRjYXNlIDB4MDE2NjogLyogJ0JydFN1cFNhbWUnICovXG5cdFx0XHRpZihvcHRzLlNJRCAhPSBudWxsKSByZXR1cm4gc3VwYm9va3MuU2hlZXROYW1lc1tvcHRzLlNJRF07XG5cdFx0XHRyZXR1cm4gXCJTSDMzVEpTU0FNRVwiICsgc3VwYm9va3NbWFRJWzBdXVswXTtcblx0XHRjYXNlIDB4MDE2MzogLyogJ0JydFN1cEJvb2tTcmMnICovXG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0ZGVmYXVsdDogcmV0dXJuIFwiU0gzM1RKU1NSQ1wiICsgc3VwYm9va3NbWFRJWzBdXVswXTtcblx0fVxuXHRzd2l0Y2goc3VwYm9va3NbWFRJWzBdXVswXVswXSkge1xuXHRcdGNhc2UgMHgwNDAxOlxuXHRcdFx0byA9IFhUSVsxXSA9PSAtMSA/IFwiI1JFRlwiIDogKHN1cGJvb2tzLlNoZWV0TmFtZXNbWFRJWzFdXSB8fCBcIlNIMzNUSlNFUlIzXCIpO1xuXHRcdFx0cmV0dXJuIFhUSVsxXSA9PSBYVElbMl0gPyBvIDogbyArIFwiOlwiICsgc3VwYm9va3MuU2hlZXROYW1lc1tYVElbMl1dO1xuXHRcdGNhc2UgMHgzQTAxOiByZXR1cm4gXCJTSDMzVEpTRVJSOFwiO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZighc3VwYm9va3NbWFRJWzBdXVswXVszXSkgcmV0dXJuIFwiU0gzM1RKU0VSUjJcIjtcblx0XHRcdG8gPSBYVElbMV0gPT0gLTEgPyBcIiNSRUZcIiA6IChzdXBib29rc1tYVElbMF1dWzBdWzNdW1hUSVsxXV0gfHwgXCJTSDMzVEpTRVJSNFwiKTtcblx0XHRcdHJldHVybiBYVElbMV0gPT0gWFRJWzJdID8gbyA6IG8gKyBcIjpcIiArIHN1cGJvb2tzW1hUSVswXV1bMF1bM11bWFRJWzJdXTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0X2l4dGkoc3VwYm9va3MsIGl4dGksIG9wdHMpIHtcblx0cmV0dXJuIGZvcm11bGFfcXVvdGVfc2hlZXRfbmFtZShnZXRfaXh0aV9yYXcoc3VwYm9va3MsIGl4dGksIG9wdHMpLCBvcHRzKTtcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeV9mb3JtdWxhKGZvcm11bGEvKkFycmF5PGFueT4qLywgcmFuZ2UsIGNlbGwsIHN1cGJvb2tzLCBvcHRzKSB7XG5cdHZhciBfcmFuZ2UgPSAvKnJhbmdlICE9IG51bGwgPyByYW5nZSA6Ki8ge3M6e2M6MCwgcjowfSxlOntjOjAsIHI6MH19O1xuXHR2YXIgc3RhY2sgPSBbXSwgZTEsIGUyLCAgYywgaXh0aT0wLCBuYW1laWR4PTAsIHIsIHNuYW1lPVwiXCI7XG5cdGlmKCFmb3JtdWxhWzBdIHx8ICFmb3JtdWxhWzBdWzBdKSByZXR1cm4gXCJcIjtcblx0dmFyIGxhc3Rfc3AgPSAtMSwgc3AgPSBcIlwiO1xuXHRmb3IodmFyIGZmID0gMCwgZmZsZW4gPSBmb3JtdWxhWzBdLmxlbmd0aDsgZmYgPCBmZmxlbjsgKytmZikge1xuXHRcdHZhciBmID0gZm9ybXVsYVswXVtmZl07XG5cdFx0c3dpdGNoKGZbMF0pIHtcblx0XHRcdGNhc2UgJ1B0Z1VtaW51cyc6IC8qIDIuNS4xOTguOTMgKi9cblx0XHRcdFx0c3RhY2sucHVzaChcIi1cIiArIHN0YWNrLnBvcCgpKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdQdGdVcGx1cyc6IC8qIDIuNS4xOTguOTUgKi9cblx0XHRcdFx0c3RhY2sucHVzaChcIitcIiArIHN0YWNrLnBvcCgpKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdQdGdQZXJjZW50JzogLyogMi41LjE5OC44MSAqL1xuXHRcdFx0XHRzdGFjay5wdXNoKHN0YWNrLnBvcCgpICsgXCIlXCIpOyBicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnQWRkJzogICAgLyogMi41LjE5OC4yNiAqL1xuXHRcdFx0Y2FzZSAnUHRnQ29uY2F0JzogLyogMi41LjE5OC40MyAqL1xuXHRcdFx0Y2FzZSAnUHRnRGl2JzogICAgLyogMi41LjE5OC40NSAqL1xuXHRcdFx0Y2FzZSAnUHRnRXEnOiAgICAgLyogMi41LjE5OC41NiAqL1xuXHRcdFx0Y2FzZSAnUHRnR2UnOiAgICAgLyogMi41LjE5OC42NCAqL1xuXHRcdFx0Y2FzZSAnUHRnR3QnOiAgICAgLyogMi41LjE5OC42NSAqL1xuXHRcdFx0Y2FzZSAnUHRnTGUnOiAgICAgLyogMi41LjE5OC42OCAqL1xuXHRcdFx0Y2FzZSAnUHRnTHQnOiAgICAgLyogMi41LjE5OC42OSAqL1xuXHRcdFx0Y2FzZSAnUHRnTXVsJzogICAgLyogMi41LjE5OC43NSAqL1xuXHRcdFx0Y2FzZSAnUHRnTmUnOiAgICAgLyogMi41LjE5OC43OCAqL1xuXHRcdFx0Y2FzZSAnUHRnUG93ZXInOiAgLyogMi41LjE5OC44MiAqL1xuXHRcdFx0Y2FzZSAnUHRnU3ViJzogICAgLyogMi41LjE5OC45MCAqL1xuXHRcdFx0XHRlMSA9IHN0YWNrLnBvcCgpOyBlMiA9IHN0YWNrLnBvcCgpO1xuXHRcdFx0XHRpZihsYXN0X3NwID49IDApIHtcblx0XHRcdFx0XHRzd2l0Y2goZm9ybXVsYVswXVtsYXN0X3NwXVsxXVswXSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdFx0XHQvLyAkRmxvd0lnbm9yZVxuXHRcdFx0XHRcdFx0XHRzcCA9IGZpbGwoXCIgXCIsIGZvcm11bGFbMF1bbGFzdF9zcF1bMV1bMV0pOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRcdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHRcdFx0XHRcdFx0c3AgPSBmaWxsKFwiXFxyXCIsIGZvcm11bGFbMF1bbGFzdF9zcF1bMV1bMV0pOyBicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHNwID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHRcdFx0XHRcdFx0aWYob3B0cy5XVEYpIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSBcIiArIGZvcm11bGFbMF1bbGFzdF9zcF1bMV1bMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlMiA9IGUyICsgc3A7XG5cdFx0XHRcdFx0bGFzdF9zcCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0YWNrLnB1c2goZTIrUHRnQmluT3BbZlswXV0rZTEpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnSXNlY3QnOiAvKiAyLjUuMTk4LjY3ICovXG5cdFx0XHRcdGUxID0gc3RhY2sucG9wKCk7IGUyID0gc3RhY2sucG9wKCk7XG5cdFx0XHRcdHN0YWNrLnB1c2goZTIrXCIgXCIrZTEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ1B0Z1VuaW9uJzogLyogMi41LjE5OC45NCAqL1xuXHRcdFx0XHRlMSA9IHN0YWNrLnBvcCgpOyBlMiA9IHN0YWNrLnBvcCgpO1xuXHRcdFx0XHRzdGFjay5wdXNoKGUyK1wiLFwiK2UxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdQdGdSYW5nZSc6IC8qIDIuNS4xOTguODMgKi9cblx0XHRcdFx0ZTEgPSBzdGFjay5wb3AoKTsgZTIgPSBzdGFjay5wb3AoKTtcblx0XHRcdFx0c3RhY2sucHVzaChlMitcIjpcIitlMSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQdGdBdHRyQ2hvb3NlJzogLyogMi41LjE5OC4zNCAqL1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ1B0Z0F0dHJHb3RvJzogLyogMi41LjE5OC4zNSAqL1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ1B0Z0F0dHJJZic6IC8qIDIuNS4xOTguMzYgKi9cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdQdGdBdHRySWZFcnJvcic6IC8qIFtNUy1YTFNCXSAyLjUuOTcuMjggKi9cblx0XHRcdFx0YnJlYWs7XG5cblxuXHRcdFx0Y2FzZSAnUHRnUmVmJzogLyogMi41LjE5OC44NCAqL1xuYyA9IHNoaWZ0X2NlbGxfeGxzKChmWzFdWzFdKSwgX3JhbmdlLCBvcHRzKTtcblx0XHRcdFx0c3RhY2sucHVzaChlbmNvZGVfY2VsbF94bHMoYykpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ1B0Z1JlZk4nOiAvKiAyLjUuMTk4Ljg4ICovXG5jID0gY2VsbCA/IHNoaWZ0X2NlbGxfeGxzKChmWzFdWzFdKSwgY2VsbCwgb3B0cykgOiAoZlsxXVsxXSk7XG5cdFx0XHRcdHN0YWNrLnB1c2goZW5jb2RlX2NlbGxfeGxzKGMpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdQdGdSZWYzZCc6IC8qIDIuNS4xOTguODUgKi9cbml4dGkgPSBmWzFdWzFdOyBjID0gc2hpZnRfY2VsbF94bHMoKGZbMV1bMl0pLCBfcmFuZ2UsIG9wdHMpO1xuXHRcdFx0XHRzbmFtZSA9IGdldF9peHRpKHN1cGJvb2tzLCBpeHRpLCBvcHRzKTtcblx0XHRcdFx0dmFyIHcgPSBzbmFtZTsgLyogSUU5IGZhaWxzIG9uIGRlZmluZWQgbmFtZXMgKi8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXHRcdFx0XHRzdGFjay5wdXNoKHNuYW1lICsgXCIhXCIgKyBlbmNvZGVfY2VsbF94bHMoYykpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnRnVuYyc6IC8qIDIuNS4xOTguNjIgKi9cblx0XHRcdGNhc2UgJ1B0Z0Z1bmNWYXInOiAvKiAyLjUuMTk4LjYzICovXG5cdFx0XHRcdC8qIGZbMV0gPSBbYXJnYywgZnVuYywgdHlwZV0gKi9cblx0XHRcdFx0dmFyIGFyZ2MgPSAoZlsxXVswXSksIGZ1bmMgPSAoZlsxXVsxXSk7XG5cdFx0XHRcdGlmKCFhcmdjKSBhcmdjID0gMDtcblx0XHRcdFx0dmFyIGFyZ3MgPSBhcmdjID09IDAgPyBbXSA6IHN0YWNrLnNsaWNlKC1hcmdjKTtcblx0XHRcdFx0c3RhY2subGVuZ3RoIC09IGFyZ2M7XG5cdFx0XHRcdGlmKGZ1bmMgPT09ICdVc2VyJykgZnVuYyA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0c3RhY2sucHVzaChmdW5jICsgXCIoXCIgKyBhcmdzLmpvaW4oXCIsXCIpICsgXCIpXCIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnQm9vbCc6IC8qIDIuNS4xOTguNDIgKi9cblx0XHRcdFx0c3RhY2sucHVzaChmWzFdID8gXCJUUlVFXCIgOiBcIkZBTFNFXCIpOyBicmVhaztcblx0XHRcdGNhc2UgJ1B0Z0ludCc6IC8qIDIuNS4xOTguNjYgKi9cblx0XHRcdFx0c3RhY2sucHVzaChmWzFdKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdQdGdOdW0nOiAvKiAyLjUuMTk4Ljc5IFRPRE86IHByZWNpc2lvbj8gKi9cblx0XHRcdFx0c3RhY2sucHVzaChTdHJpbmcoZlsxXSkpOyBicmVhaztcblx0XHRcdGNhc2UgJ1B0Z1N0cic6IC8qIDIuNS4xOTguODkgKi9cblx0XHRcdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHRcdFx0c3RhY2sucHVzaCgnXCInICsgZlsxXSArICdcIicpOyBicmVhaztcblx0XHRcdGNhc2UgJ1B0Z0Vycic6IC8qIDIuNS4xOTguNTcgKi9cblx0XHRcdFx0c3RhY2sucHVzaChmWzFdKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdQdGdBcmVhTic6IC8qIDIuNS4xOTguMzEgVE9ETyAqL1xuciA9IHNoaWZ0X3JhbmdlX3hscyhmWzFdWzFdLCBjZWxsID8ge3M6Y2VsbH0gOiBfcmFuZ2UsIG9wdHMpO1xuXHRcdFx0XHRzdGFjay5wdXNoKGVuY29kZV9yYW5nZV94bHMoKHIpLCBvcHRzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnUHRnQXJlYSc6IC8qIDIuNS4xOTguMjcgVE9ETzogZml4ZWQgcG9pbnRzICovXG5yID0gc2hpZnRfcmFuZ2VfeGxzKGZbMV1bMV0sIF9yYW5nZSwgb3B0cyk7XG5cdFx0XHRcdHN0YWNrLnB1c2goZW5jb2RlX3JhbmdlX3hscygociksIG9wdHMpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdQdGdBcmVhM2QnOiAvKiAyLjUuMTk4LjI4IFRPRE8gKi9cbml4dGkgPSBmWzFdWzFdOyByID0gZlsxXVsyXTtcblx0XHRcdFx0c25hbWUgPSBnZXRfaXh0aShzdXBib29rcywgaXh0aSwgb3B0cyk7XG5cdFx0XHRcdHN0YWNrLnB1c2goc25hbWUgKyBcIiFcIiArIGVuY29kZV9yYW5nZV94bHMoKHIpLCBvcHRzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnUHRnQXR0clN1bSc6IC8qIDIuNS4xOTguNDEgKi9cblx0XHRcdFx0c3RhY2sucHVzaChcIlNVTShcIiArIHN0YWNrLnBvcCgpICsgXCIpXCIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnQXR0clNlbWknOiAvKiAyLjUuMTk4LjM3ICovXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQdGdOYW1lJzogLyogMi41Ljk3LjYwIFRPRE86IHJldmlzaW9ucyAqL1xuXHRcdFx0XHQvKiBmWzFdID0gdHlwZSwgMCwgbmFtZWluZGV4ICovXG5cdFx0XHRcdG5hbWVpZHggPSAoZlsxXVsyXSk7XG5cdFx0XHRcdHZhciBsYmwgPSAoc3VwYm9va3MubmFtZXN8fFtdKVtuYW1laWR4LTFdIHx8IChzdXBib29rc1swXXx8W10pW25hbWVpZHhdO1xuXHRcdFx0XHR2YXIgbmFtZSA9IGxibCA/IGxibC5OYW1lIDogXCJTSDMzVEpTTkFNRVwiICsgU3RyaW5nKG5hbWVpZHgpO1xuXHRcdFx0XHRpZihuYW1lIGluIFhMU1hGdXR1cmVGdW5jdGlvbnMpIG5hbWUgPSBYTFNYRnV0dXJlRnVuY3Rpb25zW25hbWVdO1xuXHRcdFx0XHRzdGFjay5wdXNoKG5hbWUpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnTmFtZVgnOiAvKiAyLjUuOTcuNjEgVE9ETzogcmV2aXNpb25zICovXG5cdFx0XHRcdC8qIGZbMV0gPSB0eXBlLCBpeHRpLCBuYW1laW5kZXggKi9cblx0XHRcdFx0dmFyIGJvb2tpZHggPSAoZlsxXVsxXSk7IG5hbWVpZHggPSAoZlsxXVsyXSk7IHZhciBleHRlcm5ib29rO1xuXHRcdFx0XHQvKiBUT0RPOiBQcm9wZXJseSBoYW5kbGUgbWlzc2luZyB2YWx1ZXMgKi9cblx0XHRcdFx0aWYob3B0cy5iaWZmIDw9IDUpIHtcblx0XHRcdFx0XHRpZihib29raWR4IDwgMCkgYm9va2lkeCA9IC1ib29raWR4O1xuXHRcdFx0XHRcdGlmKHN1cGJvb2tzW2Jvb2tpZHhdKSBleHRlcm5ib29rID0gc3VwYm9va3NbYm9va2lkeF1bbmFtZWlkeF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIG8gPSBcIlwiO1xuXHRcdFx0XHRcdGlmKCgoc3VwYm9va3NbYm9va2lkeF18fFtdKVswXXx8W10pWzBdID09IDB4M0EwMSl7LyogZW1wdHkgKi99XG5cdFx0XHRcdFx0ZWxzZSBpZigoKHN1cGJvb2tzW2Jvb2tpZHhdfHxbXSlbMF18fFtdKVswXSA9PSAweDA0MDEpe1xuXHRcdFx0XHRcdFx0aWYoc3VwYm9va3NbYm9va2lkeF1bbmFtZWlkeF0gJiYgc3VwYm9va3NbYm9va2lkeF1bbmFtZWlkeF0uaXRhYiA+IDApIHtcblx0XHRcdFx0XHRcdFx0byA9IHN1cGJvb2tzLlNoZWV0TmFtZXNbc3VwYm9va3NbYm9va2lkeF1bbmFtZWlkeF0uaXRhYi0xXSArIFwiIVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIG8gPSBzdXBib29rcy5TaGVldE5hbWVzW25hbWVpZHgtMV0rIFwiIVwiO1xuXHRcdFx0XHRcdGlmKHN1cGJvb2tzW2Jvb2tpZHhdICYmIHN1cGJvb2tzW2Jvb2tpZHhdW25hbWVpZHhdKSBvICs9IHN1cGJvb2tzW2Jvb2tpZHhdW25hbWVpZHhdLk5hbWU7XG5cdFx0XHRcdFx0ZWxzZSBpZihzdXBib29rc1swXSAmJiBzdXBib29rc1swXVtuYW1laWR4XSkgbyArPSBzdXBib29rc1swXVtuYW1laWR4XS5OYW1lO1xuXHRcdFx0XHRcdGVsc2UgbyArPSBcIlNIMzNUSlNFUlJYXCI7XG5cdFx0XHRcdFx0c3RhY2sucHVzaChvKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighZXh0ZXJuYm9vaykgZXh0ZXJuYm9vayA9IHtOYW1lOiBcIlNIMzNUSlNFUlJZXCJ9O1xuXHRcdFx0XHRzdGFjay5wdXNoKGV4dGVybmJvb2suTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQdGdQYXJlbic6IC8qIDIuNS4xOTguODAgKi9cblx0XHRcdFx0dmFyIGxwID0gJygnLCBycCA9ICcpJztcblx0XHRcdFx0aWYobGFzdF9zcCA+PSAwKSB7XG5cdFx0XHRcdFx0c3AgPSBcIlwiO1xuXHRcdFx0XHRcdHN3aXRjaChmb3JtdWxhWzBdW2xhc3Rfc3BdWzFdWzBdKSB7XG5cdFx0XHRcdFx0XHQvLyAkRmxvd0lnbm9yZVxuXHRcdFx0XHRcdFx0Y2FzZSAyOiBscCA9IGZpbGwoXCIgXCIsIGZvcm11bGFbMF1bbGFzdF9zcF1bMV1bMV0pICsgbHA7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHRcdFx0XHRcdGNhc2UgMzogbHAgPSBmaWxsKFwiXFxyXCIsIGZvcm11bGFbMF1bbGFzdF9zcF1bMV1bMV0pICsgbHA7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHRcdFx0XHRcdGNhc2UgNDogcnAgPSBmaWxsKFwiIFwiLCBmb3JtdWxhWzBdW2xhc3Rfc3BdWzFdWzFdKSArIHJwOyBicmVhaztcblx0XHRcdFx0XHRcdC8vICRGbG93SWdub3JlXG5cdFx0XHRcdFx0XHRjYXNlIDU6IHJwID0gZmlsbChcIlxcclwiLCBmb3JtdWxhWzBdW2xhc3Rfc3BdWzFdWzFdKSArIHJwOyBicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdC8vICRGbG93SWdub3JlXG5cdFx0XHRcdFx0XHRcdGlmKG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgXCIgKyBmb3JtdWxhWzBdW2xhc3Rfc3BdWzFdWzBdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bGFzdF9zcCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0YWNrLnB1c2gobHAgKyBzdGFjay5wb3AoKSArIHJwKTsgYnJlYWs7XG5cblx0XHRcdGNhc2UgJ1B0Z1JlZkVycic6IC8qIDIuNS4xOTguODYgKi9cblx0XHRcdFx0c3RhY2sucHVzaCgnI1JFRiEnKTsgYnJlYWs7XG5cblx0XHRcdGNhc2UgJ1B0Z1JlZkVycjNkJzogLyogMi41LjE5OC44NyAqL1xuXHRcdFx0XHRzdGFjay5wdXNoKCcjUkVGIScpOyBicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnRXhwJzogLyogMi41LjE5OC41OCBUT0RPICovXG5cdFx0XHRcdGMgPSB7YzooZlsxXVsxXSkscjooZlsxXVswXSl9O1xuXHRcdFx0XHR2YXIgcSA9ICh7YzogY2VsbC5jLCByOmNlbGwucn0pO1xuXHRcdFx0XHRpZihzdXBib29rcy5zaGFyZWRmW2VuY29kZV9jZWxsKGMpXSkge1xuXHRcdFx0XHRcdHZhciBwYXJzZWRmID0gKHN1cGJvb2tzLnNoYXJlZGZbZW5jb2RlX2NlbGwoYyldKTtcblx0XHRcdFx0XHRzdGFjay5wdXNoKHN0cmluZ2lmeV9mb3JtdWxhKHBhcnNlZGYsIF9yYW5nZSwgcSwgc3VwYm9va3MsIG9wdHMpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR2YXIgZm5kID0gZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGUxPTA7ZTEhPXN1cGJvb2tzLmFycmF5Zi5sZW5ndGg7ICsrZTEpIHtcblx0XHRcdFx0XHRcdC8qIFRPRE86IHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZSByYW5nZV9oYXMgKi9cblx0XHRcdFx0XHRcdGUyID0gc3VwYm9va3MuYXJyYXlmW2UxXTtcblx0XHRcdFx0XHRcdGlmKGMuYyA8IGUyWzBdLnMuYyB8fCBjLmMgPiBlMlswXS5lLmMpIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0aWYoYy5yIDwgZTJbMF0ucy5yIHx8IGMuciA+IGUyWzBdLmUucikgY29udGludWU7XG5cdFx0XHRcdFx0XHRzdGFjay5wdXNoKHN0cmluZ2lmeV9mb3JtdWxhKGUyWzFdLCBfcmFuZ2UsIHEsIHN1cGJvb2tzLCBvcHRzKSk7XG5cdFx0XHRcdFx0XHRmbmQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKCFmbmQpIHN0YWNrLnB1c2goZlsxXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ1B0Z0FycmF5JzogLyogMi41LjE5OC4zMiBUT0RPICovXG5cdFx0XHRcdHN0YWNrLnB1c2goXCJ7XCIgKyBzdHJpbmdpZnlfYXJyYXkoZlsxXSkgKyBcIn1cIik7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQdGdNZW1BcmVhJzogLyogMi41LjE5OC43MCBUT0RPOiBjb25maXJtIHRoaXMgaXMgYSBub24tZGlzcGxheSAqL1xuXHRcdFx0XHQvL3N0YWNrLnB1c2goXCIoXCIgKyBmWzJdLm1hcChlbmNvZGVfcmFuZ2UpLmpvaW4oXCIsXCIpICsgXCIpXCIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnQXR0clNwYWNlJzogLyogMi41LjE5OC4zOCAqL1xuXHRcdFx0Y2FzZSAnUHRnQXR0clNwYWNlU2VtaSc6IC8qIDIuNS4xOTguMzkgKi9cblx0XHRcdFx0bGFzdF9zcCA9IGZmO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnVGJsJzogLyogMi41LjE5OC45MiBUT0RPICovXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQdGdNZW1FcnInOiAvKiAyLjUuMTk4LjcxICovXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQdGdNaXNzQXJnJzogLyogMi41LjE5OC43NCAqL1xuXHRcdFx0XHRzdGFjay5wdXNoKFwiXCIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnQXJlYUVycic6IC8qIDIuNS4xOTguMjkgKi9cblx0XHRcdFx0c3RhY2sucHVzaChcIiNSRUYhXCIpOyBicmVhaztcblxuXHRcdFx0Y2FzZSAnUHRnQXJlYUVycjNkJzogLyogMi41LjE5OC4zMCAqL1xuXHRcdFx0XHRzdGFjay5wdXNoKFwiI1JFRiFcIik7IGJyZWFrO1xuXG5cdFx0XHRjYXNlICdQdGdNZW1GdW5jJzogLyogMi41LjE5OC43MiBUT0RPICovXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnUHRnTWVtTm9NZW0nOiAvKiAyLjUuMTk4LjczIFRPRE8gLS0gZmluZCBhIHRlc3QgY2FzZSAqL1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAnICsgU3RyaW5nKGYpKTtcblxuXHRcdFx0Y2FzZSAnUHRnRWxmQ29sJzogLyogMi41LjE5OC40NiAqL1xuXHRcdFx0Y2FzZSAnUHRnRWxmQ29sUyc6IC8qIDIuNS4xOTguNDcgKi9cblx0XHRcdGNhc2UgJ1B0Z0VsZkNvbFNWJzogLyogMi41LjE5OC40OCAqL1xuXHRcdFx0Y2FzZSAnUHRnRWxmQ29sVic6IC8qIDIuNS4xOTguNDkgKi9cblx0XHRcdGNhc2UgJ1B0Z0VsZkxlbCc6IC8qIDIuNS4xOTguNTAgKi9cblx0XHRcdGNhc2UgJ1B0Z0VsZlJhZGljYWwnOiAvKiAyLjUuMTk4LjUxICovXG5cdFx0XHRjYXNlICdQdGdFbGZSYWRpY2FsTGVsJzogLyogMi41LjE5OC41MiAqL1xuXHRcdFx0Y2FzZSAnUHRnRWxmUmFkaWNhbFMnOiAvKiAyLjUuMTk4LjUzICovXG5cdFx0XHRjYXNlICdQdGdFbGZSdyc6IC8qIDIuNS4xOTguNTQgKi9cblx0XHRcdGNhc2UgJ1B0Z0VsZlJ3Vic6IC8qIDIuNS4xOTguNTUgKi9cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgRUxGc1wiKTtcblxuXHRcdFx0Y2FzZSAnUHRnQXR0ckJheGNlbCc6IC8qIDIuNS4xOTguMzMgVE9ETyAtLSBmaW5kIGEgdGVzdCBjYXNlKi9cblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgRm9ybXVsYSBUb2tlbjogJyArIFN0cmluZyhmKSk7XG5cdFx0XHRjYXNlICdQdGdTeE5hbWUnOiAvKiAyLjUuMTk4LjkxIFRPRE8gLS0gZmluZCBhIHRlc3QgY2FzZSAqL1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAnICsgU3RyaW5nKGYpKTtcblx0XHRcdGNhc2UgJ1B0Z0xpc3QnOiAvKiBbTVMtWExTQl0gMi41Ljk3LjUyIFRPRE8gLS0gZmluZCBhIHRlc3QgY2FzZSAqL1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAnICsgU3RyaW5nKGYpKTtcblxuXHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgRm9ybXVsYSBUb2tlbjogJyArIFN0cmluZyhmKSk7XG5cdFx0fVxuXHRcdHZhciBQdGdOb25EaXNwID0gWydQdGdBdHRyU3BhY2UnLCAnUHRnQXR0clNwYWNlU2VtaScsICdQdGdBdHRyR290byddO1xuXHRcdGlmKGxhc3Rfc3AgPj0gMCAmJiBQdGdOb25EaXNwLmluZGV4T2YoZm9ybXVsYVswXVtmZl1bMF0pID09IC0xKSB7XG5cdFx0XHRmID0gZm9ybXVsYVswXVtsYXN0X3NwXTtcblx0XHRcdHZhciBfbGVmdCA9IHRydWU7XG5cdFx0XHRzd2l0Y2goZlsxXVswXSkge1xuXHRcdFx0XHQvKiBub3RlOiBzb21lIGJhZCBYTFNCIGZpbGVzIG9taXQgdGhlIFB0Z1BhcmVuICovXG5cdFx0XHRcdGNhc2UgNDogX2xlZnQgPSBmYWxzZTtcblx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHRcdFx0XHRzcCA9IGZpbGwoXCIgXCIsIGZbMV1bMV0pOyBicmVhaztcblx0XHRcdFx0Y2FzZSA1OiBfbGVmdCA9IGZhbHNlO1xuXHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHQvLyAkRmxvd0lnbm9yZVxuXHRcdFx0XHRcdHNwID0gZmlsbChcIlxcclwiLCBmWzFdWzFdKTsgYnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0c3AgPSBcIlwiO1xuXHRcdFx0XHRcdC8vICRGbG93SWdub3JlXG5cdFx0XHRcdFx0aWYob3B0cy5XVEYpIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSBcIiArIGZbMV1bMF0pO1xuXHRcdFx0fVxuXHRcdFx0c3RhY2sucHVzaCgoX2xlZnQgPyBzcCA6IFwiXCIpICsgc3RhY2sucG9wKCkgKyAoX2xlZnQgPyBcIlwiIDogc3ApKTtcblx0XHRcdGxhc3Rfc3AgPSAtMTtcblx0XHR9XG5cdH1cblx0aWYoc3RhY2subGVuZ3RoID4gMSAmJiBvcHRzLldURikgdGhyb3cgbmV3IEVycm9yKFwiYmFkIGZvcm11bGEgc3RhY2tcIik7XG5cdHJldHVybiBzdGFja1swXTtcbn1cblxuLyogW01TLVhMU10gMi41LjE5OC4xIFRPRE8gKi9cbmZ1bmN0aW9uIHBhcnNlX0FycmF5UGFyc2VkRm9ybXVsYShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHRhcmdldCA9IGJsb2IubCArIGxlbmd0aCwgbGVuID0gb3B0cy5iaWZmID09IDIgPyAxIDogMjtcblx0dmFyIHJnY2IsIGNjZSA9IGJsb2IucmVhZF9zaGlmdChsZW4pOyAvLyBsZW5ndGggb2YgcmdjZVxuXHRpZihjY2UgPT0gMHhGRkZGKSByZXR1cm4gW1tdLHBhcnNlbm9vcChibG9iLCBsZW5ndGgtMildO1xuXHR2YXIgcmdjZSA9IHBhcnNlX1JnY2UoYmxvYiwgY2NlLCBvcHRzKTtcblx0aWYobGVuZ3RoICE9PSBjY2UgKyBsZW4pIHJnY2IgPSBwYXJzZV9SZ2JFeHRyYShibG9iLCBsZW5ndGggLSBjY2UgLSBsZW4sIHJnY2UsIG9wdHMpO1xuXHRibG9iLmwgPSB0YXJnZXQ7XG5cdHJldHVybiBbcmdjZSwgcmdjYl07XG59XG5cbi8qIFtNUy1YTFNdIDIuNS4xOTguMyBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9YTFNDZWxsUGFyc2VkRm9ybXVsYShibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIHRhcmdldCA9IGJsb2IubCArIGxlbmd0aCwgbGVuID0gb3B0cy5iaWZmID09IDIgPyAxIDogMjtcblx0dmFyIHJnY2IsIGNjZSA9IGJsb2IucmVhZF9zaGlmdChsZW4pOyAvLyBsZW5ndGggb2YgcmdjZVxuXHRpZihjY2UgPT0gMHhGRkZGKSByZXR1cm4gW1tdLHBhcnNlbm9vcChibG9iLCBsZW5ndGgtMildO1xuXHR2YXIgcmdjZSA9IHBhcnNlX1JnY2UoYmxvYiwgY2NlLCBvcHRzKTtcblx0aWYobGVuZ3RoICE9PSBjY2UgKyBsZW4pIHJnY2IgPSBwYXJzZV9SZ2JFeHRyYShibG9iLCBsZW5ndGggLSBjY2UgLSBsZW4sIHJnY2UsIG9wdHMpO1xuXHRibG9iLmwgPSB0YXJnZXQ7XG5cdHJldHVybiBbcmdjZSwgcmdjYl07XG59XG5cbi8qIFtNUy1YTFNdIDIuNS4xOTguMjEgKi9cbmZ1bmN0aW9uIHBhcnNlX05hbWVQYXJzZWRGb3JtdWxhKGJsb2IsIGxlbmd0aCwgb3B0cywgY2NlKSB7XG5cdHZhciB0YXJnZXQgPSBibG9iLmwgKyBsZW5ndGg7XG5cdHZhciByZ2NlID0gcGFyc2VfUmdjZShibG9iLCBjY2UsIG9wdHMpO1xuXHR2YXIgcmdjYjtcblx0aWYodGFyZ2V0ICE9PSBibG9iLmwpIHJnY2IgPSBwYXJzZV9SZ2JFeHRyYShibG9iLCB0YXJnZXQgLSBibG9iLmwsIHJnY2UsIG9wdHMpO1xuXHRyZXR1cm4gW3JnY2UsIHJnY2JdO1xufVxuXG4vKiBbTVMtWExTXSAyLjUuMTk4LjExOCBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9TaGFyZWRQYXJzZWRGb3JtdWxhKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgdGFyZ2V0ID0gYmxvYi5sICsgbGVuZ3RoO1xuXHR2YXIgcmdjYiwgY2NlID0gYmxvYi5yZWFkX3NoaWZ0KDIpOyAvLyBsZW5ndGggb2YgcmdjZVxuXHR2YXIgcmdjZSA9IHBhcnNlX1JnY2UoYmxvYiwgY2NlLCBvcHRzKTtcblx0aWYoY2NlID09IDB4RkZGRikgcmV0dXJuIFtbXSxwYXJzZW5vb3AoYmxvYiwgbGVuZ3RoLTIpXTtcblx0aWYobGVuZ3RoICE9PSBjY2UgKyAyKSByZ2NiID0gcGFyc2VfUmdiRXh0cmEoYmxvYiwgdGFyZ2V0IC0gY2NlIC0gMiwgcmdjZSwgb3B0cyk7XG5cdHJldHVybiBbcmdjZSwgcmdjYl07XG59XG5cbi8qIFtNUy1YTFNdIDIuNS4xMzMgVE9ETzogaG93IHRvIGVtaXQgZW1wdHkgc3RyaW5ncz8gKi9cbmZ1bmN0aW9uIHBhcnNlX0Zvcm11bGFWYWx1ZShibG9iKSB7XG5cdHZhciBiO1xuXHRpZihfX3JlYWRVSW50MTZMRShibG9iLGJsb2IubCArIDYpICE9PSAweEZGRkYpIHJldHVybiBbcGFyc2VfWG51bShibG9iKSwnbiddO1xuXHRzd2l0Y2goYmxvYltibG9iLmxdKSB7XG5cdFx0Y2FzZSAweDAwOiBibG9iLmwgKz0gODsgcmV0dXJuIFtcIlN0cmluZ1wiLCAncyddO1xuXHRcdGNhc2UgMHgwMTogYiA9IGJsb2JbYmxvYi5sKzJdID09PSAweDE7IGJsb2IubCArPSA4OyByZXR1cm4gW2IsJ2InXTtcblx0XHRjYXNlIDB4MDI6IGIgPSBibG9iW2Jsb2IubCsyXTsgYmxvYi5sICs9IDg7IHJldHVybiBbYiwnZSddO1xuXHRcdGNhc2UgMHgwMzogYmxvYi5sICs9IDg7IHJldHVybiBbXCJcIiwncyddO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxuLyogW01TLVhMU10gMi40LjEyNyBUT0RPICovXG5mdW5jdGlvbiBwYXJzZV9Gb3JtdWxhKGJsb2IsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgZW5kID0gYmxvYi5sICsgbGVuZ3RoO1xuXHR2YXIgY2VsbCA9IHBhcnNlX1hMU0NlbGwoYmxvYiwgNik7XG5cdGlmKG9wdHMuYmlmZiA9PSAyKSArK2Jsb2IubDtcblx0dmFyIHZhbCA9IHBhcnNlX0Zvcm11bGFWYWx1ZShibG9iLDgpO1xuXHR2YXIgZmxhZ3MgPSBibG9iLnJlYWRfc2hpZnQoMSk7XG5cdGlmKG9wdHMuYmlmZiAhPSAyKSB7XG5cdFx0YmxvYi5yZWFkX3NoaWZ0KDEpO1xuXHRcdGlmKG9wdHMuYmlmZiA+PSA1KSB7XG5cdFx0XHQvKnZhciBjaG4gPSAqL2Jsb2IucmVhZF9zaGlmdCg0KTtcblx0XHR9XG5cdH1cblx0dmFyIGNiZiA9IHBhcnNlX1hMU0NlbGxQYXJzZWRGb3JtdWxhKGJsb2IsIGVuZCAtIGJsb2IubCwgb3B0cyk7XG5cdHJldHVybiB7Y2VsbDpjZWxsLCB2YWw6dmFsWzBdLCBmb3JtdWxhOmNiZiwgc2hhcmVkOiAoZmxhZ3MgPj4gMykgJiAxLCB0dDp2YWxbMV19O1xufVxuXG4vKiBYTFNCIFBhcnNlZCBGb3JtdWxhIHJlY29yZHMgaGF2ZSB0aGUgc2FtZSBzaGFwZSAqL1xuZnVuY3Rpb24gcGFyc2VfWExTQlBhcnNlZEZvcm11bGEoZGF0YSwgbGVuZ3RoLCBvcHRzKSB7XG5cdC8vdmFyIGVuZCA9IGRhdGEubCArIGxlbmd0aDtcblx0dmFyIGNjZSA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0dmFyIHJnY2UgPSBwYXJzZV9SZ2NlKGRhdGEsIGNjZSwgb3B0cyk7XG5cdHZhciBjYiA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0dmFyIHJnY2IgPSBjYiA+IDAgPyBwYXJzZV9SZ2JFeHRyYShkYXRhLCBjYiwgcmdjZSwgb3B0cykgOiBudWxsO1xuXHRyZXR1cm4gW3JnY2UsIHJnY2JdO1xufVxuXG4vKiBbTVMtWExTQl0gMi41Ljk3LjEgQXJyYXlQYXJzZWRGb3JtdWxhICovXG52YXIgcGFyc2VfWExTQkFycmF5UGFyc2VkRm9ybXVsYSA9IHBhcnNlX1hMU0JQYXJzZWRGb3JtdWxhO1xuLyogW01TLVhMU0JdIDIuNS45Ny40IENlbGxQYXJzZWRGb3JtdWxhICovXG52YXIgcGFyc2VfWExTQkNlbGxQYXJzZWRGb3JtdWxhID0gcGFyc2VfWExTQlBhcnNlZEZvcm11bGE7XG4vKiBbTVMtWExTQl0gMi41Ljk3LjEyIE5hbWVQYXJzZWRGb3JtdWxhICovXG52YXIgcGFyc2VfWExTQk5hbWVQYXJzZWRGb3JtdWxhID0gcGFyc2VfWExTQlBhcnNlZEZvcm11bGE7XG4vKiBbTVMtWExTQl0gMi41Ljk3Ljk4IFNoYXJlZFBhcnNlZEZvcm11bGEgKi9cbnZhciBwYXJzZV9YTFNCU2hhcmVkUGFyc2VkRm9ybXVsYSA9IHBhcnNlX1hMU0JQYXJzZWRGb3JtdWxhO1xuLyogW01TLVhMU10gMi41LjE5OC40ICovXG52YXIgQ2V0YWIgPSB7XG4weDAwMDA6ICdCRUVQJyxcbjB4MDAwMTogJ09QRU4nLFxuMHgwMDAyOiAnT1BFTi5MSU5LUycsXG4weDAwMDM6ICdDTE9TRS5BTEwnLFxuMHgwMDA0OiAnU0FWRScsXG4weDAwMDU6ICdTQVZFLkFTJyxcbjB4MDAwNjogJ0ZJTEUuREVMRVRFJyxcbjB4MDAwNzogJ1BBR0UuU0VUVVAnLFxuMHgwMDA4OiAnUFJJTlQnLFxuMHgwMDA5OiAnUFJJTlRFUi5TRVRVUCcsXG4weDAwMEE6ICdRVUlUJyxcbjB4MDAwQjogJ05FVy5XSU5ET1cnLFxuMHgwMDBDOiAnQVJSQU5HRS5BTEwnLFxuMHgwMDBEOiAnV0lORE9XLlNJWkUnLFxuMHgwMDBFOiAnV0lORE9XLk1PVkUnLFxuMHgwMDBGOiAnRlVMTCcsXG4weDAwMTA6ICdDTE9TRScsXG4weDAwMTE6ICdSVU4nLFxuMHgwMDE2OiAnU0VULlBSSU5ULkFSRUEnLFxuMHgwMDE3OiAnU0VULlBSSU5ULlRJVExFUycsXG4weDAwMTg6ICdTRVQuUEFHRS5CUkVBSycsXG4weDAwMTk6ICdSRU1PVkUuUEFHRS5CUkVBSycsXG4weDAwMUE6ICdGT05UJyxcbjB4MDAxQjogJ0RJU1BMQVknLFxuMHgwMDFDOiAnUFJPVEVDVC5ET0NVTUVOVCcsXG4weDAwMUQ6ICdQUkVDSVNJT04nLFxuMHgwMDFFOiAnQTEuUjFDMScsXG4weDAwMUY6ICdDQUxDVUxBVEUuTk9XJyxcbjB4MDAyMDogJ0NBTENVTEFUSU9OJyxcbjB4MDAyMjogJ0RBVEEuRklORCcsXG4weDAwMjM6ICdFWFRSQUNUJyxcbjB4MDAyNDogJ0RBVEEuREVMRVRFJyxcbjB4MDAyNTogJ1NFVC5EQVRBQkFTRScsXG4weDAwMjY6ICdTRVQuQ1JJVEVSSUEnLFxuMHgwMDI3OiAnU09SVCcsXG4weDAwMjg6ICdEQVRBLlNFUklFUycsXG4weDAwMjk6ICdUQUJMRScsXG4weDAwMkE6ICdGT1JNQVQuTlVNQkVSJyxcbjB4MDAyQjogJ0FMSUdOTUVOVCcsXG4weDAwMkM6ICdTVFlMRScsXG4weDAwMkQ6ICdCT1JERVInLFxuMHgwMDJFOiAnQ0VMTC5QUk9URUNUSU9OJyxcbjB4MDAyRjogJ0NPTFVNTi5XSURUSCcsXG4weDAwMzA6ICdVTkRPJyxcbjB4MDAzMTogJ0NVVCcsXG4weDAwMzI6ICdDT1BZJyxcbjB4MDAzMzogJ1BBU1RFJyxcbjB4MDAzNDogJ0NMRUFSJyxcbjB4MDAzNTogJ1BBU1RFLlNQRUNJQUwnLFxuMHgwMDM2OiAnRURJVC5ERUxFVEUnLFxuMHgwMDM3OiAnSU5TRVJUJyxcbjB4MDAzODogJ0ZJTEwuUklHSFQnLFxuMHgwMDM5OiAnRklMTC5ET1dOJyxcbjB4MDAzRDogJ0RFRklORS5OQU1FJyxcbjB4MDAzRTogJ0NSRUFURS5OQU1FUycsXG4weDAwM0Y6ICdGT1JNVUxBLkdPVE8nLFxuMHgwMDQwOiAnRk9STVVMQS5GSU5EJyxcbjB4MDA0MTogJ1NFTEVDVC5MQVNULkNFTEwnLFxuMHgwMDQyOiAnU0hPVy5BQ1RJVkUuQ0VMTCcsXG4weDAwNDM6ICdHQUxMRVJZLkFSRUEnLFxuMHgwMDQ0OiAnR0FMTEVSWS5CQVInLFxuMHgwMDQ1OiAnR0FMTEVSWS5DT0xVTU4nLFxuMHgwMDQ2OiAnR0FMTEVSWS5MSU5FJyxcbjB4MDA0NzogJ0dBTExFUlkuUElFJyxcbjB4MDA0ODogJ0dBTExFUlkuU0NBVFRFUicsXG4weDAwNDk6ICdDT01CSU5BVElPTicsXG4weDAwNEE6ICdQUkVGRVJSRUQnLFxuMHgwMDRCOiAnQURELk9WRVJMQVknLFxuMHgwMDRDOiAnR1JJRExJTkVTJyxcbjB4MDA0RDogJ1NFVC5QUkVGRVJSRUQnLFxuMHgwMDRFOiAnQVhFUycsXG4weDAwNEY6ICdMRUdFTkQnLFxuMHgwMDUwOiAnQVRUQUNILlRFWFQnLFxuMHgwMDUxOiAnQURELkFSUk9XJyxcbjB4MDA1MjogJ1NFTEVDVC5DSEFSVCcsXG4weDAwNTM6ICdTRUxFQ1QuUExPVC5BUkVBJyxcbjB4MDA1NDogJ1BBVFRFUk5TJyxcbjB4MDA1NTogJ01BSU4uQ0hBUlQnLFxuMHgwMDU2OiAnT1ZFUkxBWScsXG4weDAwNTc6ICdTQ0FMRScsXG4weDAwNTg6ICdGT1JNQVQuTEVHRU5EJyxcbjB4MDA1OTogJ0ZPUk1BVC5URVhUJyxcbjB4MDA1QTogJ0VESVQuUkVQRUFUJyxcbjB4MDA1QjogJ1BBUlNFJyxcbjB4MDA1QzogJ0pVU1RJRlknLFxuMHgwMDVEOiAnSElERScsXG4weDAwNUU6ICdVTkhJREUnLFxuMHgwMDVGOiAnV09SS1NQQUNFJyxcbjB4MDA2MDogJ0ZPUk1VTEEnLFxuMHgwMDYxOiAnRk9STVVMQS5GSUxMJyxcbjB4MDA2MjogJ0ZPUk1VTEEuQVJSQVknLFxuMHgwMDYzOiAnREFUQS5GSU5ELk5FWFQnLFxuMHgwMDY0OiAnREFUQS5GSU5ELlBSRVYnLFxuMHgwMDY1OiAnRk9STVVMQS5GSU5ELk5FWFQnLFxuMHgwMDY2OiAnRk9STVVMQS5GSU5ELlBSRVYnLFxuMHgwMDY3OiAnQUNUSVZBVEUnLFxuMHgwMDY4OiAnQUNUSVZBVEUuTkVYVCcsXG4weDAwNjk6ICdBQ1RJVkFURS5QUkVWJyxcbjB4MDA2QTogJ1VOTE9DS0VELk5FWFQnLFxuMHgwMDZCOiAnVU5MT0NLRUQuUFJFVicsXG4weDAwNkM6ICdDT1BZLlBJQ1RVUkUnLFxuMHgwMDZEOiAnU0VMRUNUJyxcbjB4MDA2RTogJ0RFTEVURS5OQU1FJyxcbjB4MDA2RjogJ0RFTEVURS5GT1JNQVQnLFxuMHgwMDcwOiAnVkxJTkUnLFxuMHgwMDcxOiAnSExJTkUnLFxuMHgwMDcyOiAnVlBBR0UnLFxuMHgwMDczOiAnSFBBR0UnLFxuMHgwMDc0OiAnVlNDUk9MTCcsXG4weDAwNzU6ICdIU0NST0xMJyxcbjB4MDA3NjogJ0FMRVJUJyxcbjB4MDA3NzogJ05FVycsXG4weDAwNzg6ICdDQU5DRUwuQ09QWScsXG4weDAwNzk6ICdTSE9XLkNMSVBCT0FSRCcsXG4weDAwN0E6ICdNRVNTQUdFJyxcbjB4MDA3QzogJ1BBU1RFLkxJTksnLFxuMHgwMDdEOiAnQVBQLkFDVElWQVRFJyxcbjB4MDA3RTogJ0RFTEVURS5BUlJPVycsXG4weDAwN0Y6ICdST1cuSEVJR0hUJyxcbjB4MDA4MDogJ0ZPUk1BVC5NT1ZFJyxcbjB4MDA4MTogJ0ZPUk1BVC5TSVpFJyxcbjB4MDA4MjogJ0ZPUk1VTEEuUkVQTEFDRScsXG4weDAwODM6ICdTRU5ELktFWVMnLFxuMHgwMDg0OiAnU0VMRUNULlNQRUNJQUwnLFxuMHgwMDg1OiAnQVBQTFkuTkFNRVMnLFxuMHgwMDg2OiAnUkVQTEFDRS5GT05UJyxcbjB4MDA4NzogJ0ZSRUVaRS5QQU5FUycsXG4weDAwODg6ICdTSE9XLklORk8nLFxuMHgwMDg5OiAnU1BMSVQnLFxuMHgwMDhBOiAnT04uV0lORE9XJyxcbjB4MDA4QjogJ09OLkRBVEEnLFxuMHgwMDhDOiAnRElTQUJMRS5JTlBVVCcsXG4weDAwOEU6ICdPVVRMSU5FJyxcbjB4MDA4RjogJ0xJU1QuTkFNRVMnLFxuMHgwMDkwOiAnRklMRS5DTE9TRScsXG4weDAwOTE6ICdTQVZFLldPUktCT09LJyxcbjB4MDA5MjogJ0RBVEEuRk9STScsXG4weDAwOTM6ICdDT1BZLkNIQVJUJyxcbjB4MDA5NDogJ09OLlRJTUUnLFxuMHgwMDk1OiAnV0FJVCcsXG4weDAwOTY6ICdGT1JNQVQuRk9OVCcsXG4weDAwOTc6ICdGSUxMLlVQJyxcbjB4MDA5ODogJ0ZJTEwuTEVGVCcsXG4weDAwOTk6ICdERUxFVEUuT1ZFUkxBWScsXG4weDAwOUI6ICdTSE9SVC5NRU5VUycsXG4weDAwOUY6ICdTRVQuVVBEQVRFLlNUQVRVUycsXG4weDAwQTE6ICdDT0xPUi5QQUxFVFRFJyxcbjB4MDBBMjogJ0RFTEVURS5TVFlMRScsXG4weDAwQTM6ICdXSU5ET1cuUkVTVE9SRScsXG4weDAwQTQ6ICdXSU5ET1cuTUFYSU1JWkUnLFxuMHgwMEE2OiAnQ0hBTkdFLkxJTksnLFxuMHgwMEE3OiAnQ0FMQ1VMQVRFLkRPQ1VNRU5UJyxcbjB4MDBBODogJ09OLktFWScsXG4weDAwQTk6ICdBUFAuUkVTVE9SRScsXG4weDAwQUE6ICdBUFAuTU9WRScsXG4weDAwQUI6ICdBUFAuU0laRScsXG4weDAwQUM6ICdBUFAuTUlOSU1JWkUnLFxuMHgwMEFEOiAnQVBQLk1BWElNSVpFJyxcbjB4MDBBRTogJ0JSSU5HLlRPLkZST05UJyxcbjB4MDBBRjogJ1NFTkQuVE8uQkFDSycsXG4weDAwQjk6ICdNQUlOLkNIQVJULlRZUEUnLFxuMHgwMEJBOiAnT1ZFUkxBWS5DSEFSVC5UWVBFJyxcbjB4MDBCQjogJ1NFTEVDVC5FTkQnLFxuMHgwMEJDOiAnT1BFTi5NQUlMJyxcbjB4MDBCRDogJ1NFTkQuTUFJTCcsXG4weDAwQkU6ICdTVEFOREFSRC5GT05UJyxcbjB4MDBCRjogJ0NPTlNPTElEQVRFJyxcbjB4MDBDMDogJ1NPUlQuU1BFQ0lBTCcsXG4weDAwQzE6ICdHQUxMRVJZLjNELkFSRUEnLFxuMHgwMEMyOiAnR0FMTEVSWS4zRC5DT0xVTU4nLFxuMHgwMEMzOiAnR0FMTEVSWS4zRC5MSU5FJyxcbjB4MDBDNDogJ0dBTExFUlkuM0QuUElFJyxcbjB4MDBDNTogJ1ZJRVcuM0QnLFxuMHgwMEM2OiAnR09BTC5TRUVLJyxcbjB4MDBDNzogJ1dPUktHUk9VUCcsXG4weDAwQzg6ICdGSUxMLkdST1VQJyxcbjB4MDBDOTogJ1VQREFURS5MSU5LJyxcbjB4MDBDQTogJ1BST01PVEUnLFxuMHgwMENCOiAnREVNT1RFJyxcbjB4MDBDQzogJ1NIT1cuREVUQUlMJyxcbjB4MDBDRTogJ1VOR1JPVVAnLFxuMHgwMENGOiAnT0JKRUNULlBST1BFUlRJRVMnLFxuMHgwMEQwOiAnU0FWRS5ORVcuT0JKRUNUJyxcbjB4MDBEMTogJ1NIQVJFJyxcbjB4MDBEMjogJ1NIQVJFLk5BTUUnLFxuMHgwMEQzOiAnRFVQTElDQVRFJyxcbjB4MDBENDogJ0FQUExZLlNUWUxFJyxcbjB4MDBENTogJ0FTU0lHTi5UTy5PQkpFQ1QnLFxuMHgwMEQ2OiAnT0JKRUNULlBST1RFQ1RJT04nLFxuMHgwMEQ3OiAnSElERS5PQkpFQ1QnLFxuMHgwMEQ4OiAnU0VULkVYVFJBQ1QnLFxuMHgwMEQ5OiAnQ1JFQVRFLlBVQkxJU0hFUicsXG4weDAwREE6ICdTVUJTQ1JJQkUuVE8nLFxuMHgwMERCOiAnQVRUUklCVVRFUycsXG4weDAwREM6ICdTSE9XLlRPT0xCQVInLFxuMHgwMERFOiAnUFJJTlQuUFJFVklFVycsXG4weDAwREY6ICdFRElULkNPTE9SJyxcbjB4MDBFMDogJ1NIT1cuTEVWRUxTJyxcbjB4MDBFMTogJ0ZPUk1BVC5NQUlOJyxcbjB4MDBFMjogJ0ZPUk1BVC5PVkVSTEFZJyxcbjB4MDBFMzogJ09OLlJFQ0FMQycsXG4weDAwRTQ6ICdFRElULlNFUklFUycsXG4weDAwRTU6ICdERUZJTkUuU1RZTEUnLFxuMHgwMEYwOiAnTElORS5QUklOVCcsXG4weDAwRjM6ICdFTlRFUi5EQVRBJyxcbjB4MDBGOTogJ0dBTExFUlkuUkFEQVInLFxuMHgwMEZBOiAnTUVSR0UuU1RZTEVTJyxcbjB4MDBGQjogJ0VESVRJT04uT1BUSU9OUycsXG4weDAwRkM6ICdQQVNURS5QSUNUVVJFJyxcbjB4MDBGRDogJ1BBU1RFLlBJQ1RVUkUuTElOSycsXG4weDAwRkU6ICdTUEVMTElORycsXG4weDAxMDA6ICdaT09NJyxcbjB4MDEwMzogJ0lOU0VSVC5PQkpFQ1QnLFxuMHgwMTA0OiAnV0lORE9XLk1JTklNSVpFJyxcbjB4MDEwOTogJ1NPVU5ELk5PVEUnLFxuMHgwMTBBOiAnU09VTkQuUExBWScsXG4weDAxMEI6ICdGT1JNQVQuU0hBUEUnLFxuMHgwMTBDOiAnRVhURU5ELlBPTFlHT04nLFxuMHgwMTBEOiAnRk9STUFULkFVVE8nLFxuMHgwMTEwOiAnR0FMTEVSWS4zRC5CQVInLFxuMHgwMTExOiAnR0FMTEVSWS4zRC5TVVJGQUNFJyxcbjB4MDExMjogJ0ZJTEwuQVVUTycsXG4weDAxMTQ6ICdDVVNUT01JWkUuVE9PTEJBUicsXG4weDAxMTU6ICdBREQuVE9PTCcsXG4weDAxMTY6ICdFRElULk9CSkVDVCcsXG4weDAxMTc6ICdPTi5ET1VCTEVDTElDSycsXG4weDAxMTg6ICdPTi5FTlRSWScsXG4weDAxMTk6ICdXT1JLQk9PSy5BREQnLFxuMHgwMTFBOiAnV09SS0JPT0suTU9WRScsXG4weDAxMUI6ICdXT1JLQk9PSy5DT1BZJyxcbjB4MDExQzogJ1dPUktCT09LLk9QVElPTlMnLFxuMHgwMTFEOiAnU0FWRS5XT1JLU1BBQ0UnLFxuMHgwMTIwOiAnQ0hBUlQuV0laQVJEJyxcbjB4MDEyMTogJ0RFTEVURS5UT09MJyxcbjB4MDEyMjogJ01PVkUuVE9PTCcsXG4weDAxMjM6ICdXT1JLQk9PSy5TRUxFQ1QnLFxuMHgwMTI0OiAnV09SS0JPT0suQUNUSVZBVEUnLFxuMHgwMTI1OiAnQVNTSUdOLlRPLlRPT0wnLFxuMHgwMTI3OiAnQ09QWS5UT09MJyxcbjB4MDEyODogJ1JFU0VULlRPT0wnLFxuMHgwMTI5OiAnQ09OU1RSQUlOLk5VTUVSSUMnLFxuMHgwMTJBOiAnUEFTVEUuVE9PTCcsXG4weDAxMkU6ICdXT1JLQk9PSy5ORVcnLFxuMHgwMTMxOiAnU0NFTkFSSU8uQ0VMTFMnLFxuMHgwMTMyOiAnU0NFTkFSSU8uREVMRVRFJyxcbjB4MDEzMzogJ1NDRU5BUklPLkFERCcsXG4weDAxMzQ6ICdTQ0VOQVJJTy5FRElUJyxcbjB4MDEzNTogJ1NDRU5BUklPLlNIT1cnLFxuMHgwMTM2OiAnU0NFTkFSSU8uU0hPVy5ORVhUJyxcbjB4MDEzNzogJ1NDRU5BUklPLlNVTU1BUlknLFxuMHgwMTM4OiAnUElWT1QuVEFCTEUuV0laQVJEJyxcbjB4MDEzOTogJ1BJVk9ULkZJRUxELlBST1BFUlRJRVMnLFxuMHgwMTNBOiAnUElWT1QuRklFTEQnLFxuMHgwMTNCOiAnUElWT1QuSVRFTScsXG4weDAxM0M6ICdQSVZPVC5BREQuRklFTERTJyxcbjB4MDEzRTogJ09QVElPTlMuQ0FMQ1VMQVRJT04nLFxuMHgwMTNGOiAnT1BUSU9OUy5FRElUJyxcbjB4MDE0MDogJ09QVElPTlMuVklFVycsXG4weDAxNDE6ICdBRERJTi5NQU5BR0VSJyxcbjB4MDE0MjogJ01FTlUuRURJVE9SJyxcbjB4MDE0MzogJ0FUVEFDSC5UT09MQkFSUycsXG4weDAxNDQ6ICdWQkFBY3RpdmF0ZScsXG4weDAxNDU6ICdPUFRJT05TLkNIQVJUJyxcbjB4MDE0ODogJ1ZCQS5JTlNFUlQuRklMRScsXG4weDAxNEE6ICdWQkEuUFJPQ0VEVVJFLkRFRklOSVRJT04nLFxuMHgwMTUwOiAnUk9VVElORy5TTElQJyxcbjB4MDE1MjogJ1JPVVRFLkRPQ1VNRU5UJyxcbjB4MDE1MzogJ01BSUwuTE9HT04nLFxuMHgwMTU2OiAnSU5TRVJULlBJQ1RVUkUnLFxuMHgwMTU3OiAnRURJVC5UT09MJyxcbjB4MDE1ODogJ0dBTExFUlkuRE9VR0hOVVQnLFxuMHgwMTVFOiAnQ0hBUlQuVFJFTkQnLFxuMHgwMTYwOiAnUElWT1QuSVRFTS5QUk9QRVJUSUVTJyxcbjB4MDE2MjogJ1dPUktCT09LLklOU0VSVCcsXG4weDAxNjM6ICdPUFRJT05TLlRSQU5TSVRJT04nLFxuMHgwMTY0OiAnT1BUSU9OUy5HRU5FUkFMJyxcbjB4MDE3MjogJ0ZJTFRFUi5BRFZBTkNFRCcsXG4weDAxNzU6ICdNQUlMLkFERC5NQUlMRVInLFxuMHgwMTc2OiAnTUFJTC5ERUxFVEUuTUFJTEVSJyxcbjB4MDE3NzogJ01BSUwuUkVQTFknLFxuMHgwMTc4OiAnTUFJTC5SRVBMWS5BTEwnLFxuMHgwMTc5OiAnTUFJTC5GT1JXQVJEJyxcbjB4MDE3QTogJ01BSUwuTkVYVC5MRVRURVInLFxuMHgwMTdCOiAnREFUQS5MQUJFTCcsXG4weDAxN0M6ICdJTlNFUlQuVElUTEUnLFxuMHgwMTdEOiAnRk9OVC5QUk9QRVJUSUVTJyxcbjB4MDE3RTogJ01BQ1JPLk9QVElPTlMnLFxuMHgwMTdGOiAnV09SS0JPT0suSElERScsXG4weDAxODA6ICdXT1JLQk9PSy5VTkhJREUnLFxuMHgwMTgxOiAnV09SS0JPT0suREVMRVRFJyxcbjB4MDE4MjogJ1dPUktCT09LLk5BTUUnLFxuMHgwMTg0OiAnR0FMTEVSWS5DVVNUT00nLFxuMHgwMTg2OiAnQURELkNIQVJULkFVVE9GT1JNQVQnLFxuMHgwMTg3OiAnREVMRVRFLkNIQVJULkFVVE9GT1JNQVQnLFxuMHgwMTg4OiAnQ0hBUlQuQURELkRBVEEnLFxuMHgwMTg5OiAnQVVUTy5PVVRMSU5FJyxcbjB4MDE4QTogJ1RBQi5PUkRFUicsXG4weDAxOEI6ICdTSE9XLkRJQUxPRycsXG4weDAxOEM6ICdTRUxFQ1QuQUxMJyxcbjB4MDE4RDogJ1VOR1JPVVAuU0hFRVRTJyxcbjB4MDE4RTogJ1NVQlRPVEFMLkNSRUFURScsXG4weDAxOEY6ICdTVUJUT1RBTC5SRU1PVkUnLFxuMHgwMTkwOiAnUkVOQU1FLk9CSkVDVCcsXG4weDAxOUM6ICdXT1JLQk9PSy5TQ1JPTEwnLFxuMHgwMTlEOiAnV09SS0JPT0suTkVYVCcsXG4weDAxOUU6ICdXT1JLQk9PSy5QUkVWJyxcbjB4MDE5RjogJ1dPUktCT09LLlRBQi5TUExJVCcsXG4weDAxQTA6ICdGVUxMLlNDUkVFTicsXG4weDAxQTE6ICdXT1JLQk9PSy5QUk9URUNUJyxcbjB4MDFBNDogJ1NDUk9MTEJBUi5QUk9QRVJUSUVTJyxcbjB4MDFBNTogJ1BJVk9ULlNIT1cuUEFHRVMnLFxuMHgwMUE2OiAnVEVYVC5UTy5DT0xVTU5TJyxcbjB4MDFBNzogJ0ZPUk1BVC5DSEFSVFRZUEUnLFxuMHgwMUE4OiAnTElOSy5GT1JNQVQnLFxuMHgwMUE5OiAnVFJBQ0VSLkRJU1BMQVknLFxuMHgwMUFFOiAnVFJBQ0VSLk5BVklHQVRFJyxcbjB4MDFBRjogJ1RSQUNFUi5DTEVBUicsXG4weDAxQjA6ICdUUkFDRVIuRVJST1InLFxuMHgwMUIxOiAnUElWT1QuRklFTEQuR1JPVVAnLFxuMHgwMUIyOiAnUElWT1QuRklFTEQuVU5HUk9VUCcsXG4weDAxQjM6ICdDSEVDS0JPWC5QUk9QRVJUSUVTJyxcbjB4MDFCNDogJ0xBQkVMLlBST1BFUlRJRVMnLFxuMHgwMUI1OiAnTElTVEJPWC5QUk9QRVJUSUVTJyxcbjB4MDFCNjogJ0VESVRCT1guUFJPUEVSVElFUycsXG4weDAxQjc6ICdQSVZPVC5SRUZSRVNIJyxcbjB4MDFCODogJ0xJTksuQ09NQk8nLFxuMHgwMUI5OiAnT1BFTi5URVhUJyxcbjB4MDFCQTogJ0hJREUuRElBTE9HJyxcbjB4MDFCQjogJ1NFVC5ESUFMT0cuRk9DVVMnLFxuMHgwMUJDOiAnRU5BQkxFLk9CSkVDVCcsXG4weDAxQkQ6ICdQVVNIQlVUVE9OLlBST1BFUlRJRVMnLFxuMHgwMUJFOiAnU0VULkRJQUxPRy5ERUZBVUxUJyxcbjB4MDFCRjogJ0ZJTFRFUicsXG4weDAxQzA6ICdGSUxURVIuU0hPVy5BTEwnLFxuMHgwMUMxOiAnQ0xFQVIuT1VUTElORScsXG4weDAxQzI6ICdGVU5DVElPTi5XSVpBUkQnLFxuMHgwMUMzOiAnQURELkxJU1QuSVRFTScsXG4weDAxQzQ6ICdTRVQuTElTVC5JVEVNJyxcbjB4MDFDNTogJ1JFTU9WRS5MSVNULklURU0nLFxuMHgwMUM2OiAnU0VMRUNULkxJU1QuSVRFTScsXG4weDAxQzc6ICdTRVQuQ09OVFJPTC5WQUxVRScsXG4weDAxQzg6ICdTQVZFLkNPUFkuQVMnLFxuMHgwMUNBOiAnT1BUSU9OUy5MSVNUUy5BREQnLFxuMHgwMUNCOiAnT1BUSU9OUy5MSVNUUy5ERUxFVEUnLFxuMHgwMUNDOiAnU0VSSUVTLkFYRVMnLFxuMHgwMUNEOiAnU0VSSUVTLlgnLFxuMHgwMUNFOiAnU0VSSUVTLlknLFxuMHgwMUNGOiAnRVJST1JCQVIuWCcsXG4weDAxRDA6ICdFUlJPUkJBUi5ZJyxcbjB4MDFEMTogJ0ZPUk1BVC5DSEFSVCcsXG4weDAxRDI6ICdTRVJJRVMuT1JERVInLFxuMHgwMUQzOiAnTUFJTC5MT0dPRkYnLFxuMHgwMUQ0OiAnQ0xFQVIuUk9VVElORy5TTElQJyxcbjB4MDFENTogJ0FQUC5BQ1RJVkFURS5NSUNST1NPRlQnLFxuMHgwMUQ2OiAnTUFJTC5FRElULk1BSUxFUicsXG4weDAxRDc6ICdPTi5TSEVFVCcsXG4weDAxRDg6ICdTVEFOREFSRC5XSURUSCcsXG4weDAxRDk6ICdTQ0VOQVJJTy5NRVJHRScsXG4weDAxREE6ICdTVU1NQVJZLklORk8nLFxuMHgwMURCOiAnRklORC5GSUxFJyxcbjB4MDFEQzogJ0FDVElWRS5DRUxMLkZPTlQnLFxuMHgwMUREOiAnRU5BQkxFLlRJUFdJWkFSRCcsXG4weDAxREU6ICdWQkEuTUFLRS5BRERJTicsXG4weDAxRTA6ICdJTlNFUlREQVRBVEFCTEUnLFxuMHgwMUUxOiAnV09SS0dST1VQLk9QVElPTlMnLFxuMHgwMUUyOiAnTUFJTC5TRU5ELk1BSUxFUicsXG4weDAxRTU6ICdBVVRPQ09SUkVDVCcsXG4weDAxRTk6ICdQT1NULkRPQ1VNRU5UJyxcbjB4MDFFQjogJ1BJQ0tMSVNUJyxcbjB4MDFFRDogJ1ZJRVcuU0hPVycsXG4weDAxRUU6ICdWSUVXLkRFRklORScsXG4weDAxRUY6ICdWSUVXLkRFTEVURScsXG4weDAxRkQ6ICdTSEVFVC5CQUNLR1JPVU5EJyxcbjB4MDFGRTogJ0lOU0VSVC5NQVAuT0JKRUNUJyxcbjB4MDFGRjogJ09QVElPTlMuTUVOT05PJyxcbjB4MDIwNTogJ01TT0NIRUNLUycsXG4weDAyMDY6ICdOT1JNQUwnLFxuMHgwMjA3OiAnTEFZT1VUJyxcbjB4MDIwODogJ1JNLlBSSU5ULkFSRUEnLFxuMHgwMjA5OiAnQ0xFQVIuUFJJTlQuQVJFQScsXG4weDAyMEE6ICdBREQuUFJJTlQuQVJFQScsXG4weDAyMEI6ICdNT1ZFLkJSSycsXG4weDAyMjE6ICdISURFQ1VSUi5OT1RFJyxcbjB4MDIyMjogJ0hJREVBTEwuTk9URVMnLFxuMHgwMjIzOiAnREVMRVRFLk5PVEUnLFxuMHgwMjI0OiAnVFJBVkVSU0UuTk9URVMnLFxuMHgwMjI1OiAnQUNUSVZBVEUuTk9URVMnLFxuMHgwMjZDOiAnUFJPVEVDVC5SRVZJU0lPTlMnLFxuMHgwMjZEOiAnVU5QUk9URUNULlJFVklTSU9OUycsXG4weDAyODc6ICdPUFRJT05TLk1FJyxcbjB4MDI4RDogJ1dFQi5QVUJMSVNIJyxcbjB4MDI5QjogJ05FV1dFQlFVRVJZJyxcbjB4MDJBMTogJ1BJVk9ULlRBQkxFLkNIQVJUJyxcbjB4MDJGMTogJ09QVElPTlMuU0FWRScsXG4weDAyRjM6ICdPUFRJT05TLlNQRUxMJyxcbjB4MDMyODogJ0hJREVBTEwuSU5LQU5OT1RTJ1xufTtcblxuLyogW01TLVhMU10gMi41LjE5OC4xNyAqL1xuLyogW01TLVhMU0JdIDIuNS45Ny4xMCAqL1xudmFyIEZ0YWIgPSB7XG4weDAwMDA6ICdDT1VOVCcsXG4weDAwMDE6ICdJRicsXG4weDAwMDI6ICdJU05BJyxcbjB4MDAwMzogJ0lTRVJST1InLFxuMHgwMDA0OiAnU1VNJyxcbjB4MDAwNTogJ0FWRVJBR0UnLFxuMHgwMDA2OiAnTUlOJyxcbjB4MDAwNzogJ01BWCcsXG4weDAwMDg6ICdST1cnLFxuMHgwMDA5OiAnQ09MVU1OJyxcbjB4MDAwQTogJ05BJyxcbjB4MDAwQjogJ05QVicsXG4weDAwMEM6ICdTVERFVicsXG4weDAwMEQ6ICdET0xMQVInLFxuMHgwMDBFOiAnRklYRUQnLFxuMHgwMDBGOiAnU0lOJyxcbjB4MDAxMDogJ0NPUycsXG4weDAwMTE6ICdUQU4nLFxuMHgwMDEyOiAnQVRBTicsXG4weDAwMTM6ICdQSScsXG4weDAwMTQ6ICdTUVJUJyxcbjB4MDAxNTogJ0VYUCcsXG4weDAwMTY6ICdMTicsXG4weDAwMTc6ICdMT0cxMCcsXG4weDAwMTg6ICdBQlMnLFxuMHgwMDE5OiAnSU5UJyxcbjB4MDAxQTogJ1NJR04nLFxuMHgwMDFCOiAnUk9VTkQnLFxuMHgwMDFDOiAnTE9PS1VQJyxcbjB4MDAxRDogJ0lOREVYJyxcbjB4MDAxRTogJ1JFUFQnLFxuMHgwMDFGOiAnTUlEJyxcbjB4MDAyMDogJ0xFTicsXG4weDAwMjE6ICdWQUxVRScsXG4weDAwMjI6ICdUUlVFJyxcbjB4MDAyMzogJ0ZBTFNFJyxcbjB4MDAyNDogJ0FORCcsXG4weDAwMjU6ICdPUicsXG4weDAwMjY6ICdOT1QnLFxuMHgwMDI3OiAnTU9EJyxcbjB4MDAyODogJ0RDT1VOVCcsXG4weDAwMjk6ICdEU1VNJyxcbjB4MDAyQTogJ0RBVkVSQUdFJyxcbjB4MDAyQjogJ0RNSU4nLFxuMHgwMDJDOiAnRE1BWCcsXG4weDAwMkQ6ICdEU1RERVYnLFxuMHgwMDJFOiAnVkFSJyxcbjB4MDAyRjogJ0RWQVInLFxuMHgwMDMwOiAnVEVYVCcsXG4weDAwMzE6ICdMSU5FU1QnLFxuMHgwMDMyOiAnVFJFTkQnLFxuMHgwMDMzOiAnTE9HRVNUJyxcbjB4MDAzNDogJ0dST1dUSCcsXG4weDAwMzU6ICdHT1RPJyxcbjB4MDAzNjogJ0hBTFQnLFxuMHgwMDM3OiAnUkVUVVJOJyxcbjB4MDAzODogJ1BWJyxcbjB4MDAzOTogJ0ZWJyxcbjB4MDAzQTogJ05QRVInLFxuMHgwMDNCOiAnUE1UJyxcbjB4MDAzQzogJ1JBVEUnLFxuMHgwMDNEOiAnTUlSUicsXG4weDAwM0U6ICdJUlInLFxuMHgwMDNGOiAnUkFORCcsXG4weDAwNDA6ICdNQVRDSCcsXG4weDAwNDE6ICdEQVRFJyxcbjB4MDA0MjogJ1RJTUUnLFxuMHgwMDQzOiAnREFZJyxcbjB4MDA0NDogJ01PTlRIJyxcbjB4MDA0NTogJ1lFQVInLFxuMHgwMDQ2OiAnV0VFS0RBWScsXG4weDAwNDc6ICdIT1VSJyxcbjB4MDA0ODogJ01JTlVURScsXG4weDAwNDk6ICdTRUNPTkQnLFxuMHgwMDRBOiAnTk9XJyxcbjB4MDA0QjogJ0FSRUFTJyxcbjB4MDA0QzogJ1JPV1MnLFxuMHgwMDREOiAnQ09MVU1OUycsXG4weDAwNEU6ICdPRkZTRVQnLFxuMHgwMDRGOiAnQUJTUkVGJyxcbjB4MDA1MDogJ1JFTFJFRicsXG4weDAwNTE6ICdBUkdVTUVOVCcsXG4weDAwNTI6ICdTRUFSQ0gnLFxuMHgwMDUzOiAnVFJBTlNQT1NFJyxcbjB4MDA1NDogJ0VSUk9SJyxcbjB4MDA1NTogJ1NURVAnLFxuMHgwMDU2OiAnVFlQRScsXG4weDAwNTc6ICdFQ0hPJyxcbjB4MDA1ODogJ1NFVC5OQU1FJyxcbjB4MDA1OTogJ0NBTExFUicsXG4weDAwNUE6ICdERVJFRicsXG4weDAwNUI6ICdXSU5ET1dTJyxcbjB4MDA1QzogJ1NFUklFUycsXG4weDAwNUQ6ICdET0NVTUVOVFMnLFxuMHgwMDVFOiAnQUNUSVZFLkNFTEwnLFxuMHgwMDVGOiAnU0VMRUNUSU9OJyxcbjB4MDA2MDogJ1JFU1VMVCcsXG4weDAwNjE6ICdBVEFOMicsXG4weDAwNjI6ICdBU0lOJyxcbjB4MDA2MzogJ0FDT1MnLFxuMHgwMDY0OiAnQ0hPT1NFJyxcbjB4MDA2NTogJ0hMT09LVVAnLFxuMHgwMDY2OiAnVkxPT0tVUCcsXG4weDAwNjc6ICdMSU5LUycsXG4weDAwNjg6ICdJTlBVVCcsXG4weDAwNjk6ICdJU1JFRicsXG4weDAwNkE6ICdHRVQuRk9STVVMQScsXG4weDAwNkI6ICdHRVQuTkFNRScsXG4weDAwNkM6ICdTRVQuVkFMVUUnLFxuMHgwMDZEOiAnTE9HJyxcbjB4MDA2RTogJ0VYRUMnLFxuMHgwMDZGOiAnQ0hBUicsXG4weDAwNzA6ICdMT1dFUicsXG4weDAwNzE6ICdVUFBFUicsXG4weDAwNzI6ICdQUk9QRVInLFxuMHgwMDczOiAnTEVGVCcsXG4weDAwNzQ6ICdSSUdIVCcsXG4weDAwNzU6ICdFWEFDVCcsXG4weDAwNzY6ICdUUklNJyxcbjB4MDA3NzogJ1JFUExBQ0UnLFxuMHgwMDc4OiAnU1VCU1RJVFVURScsXG4weDAwNzk6ICdDT0RFJyxcbjB4MDA3QTogJ05BTUVTJyxcbjB4MDA3QjogJ0RJUkVDVE9SWScsXG4weDAwN0M6ICdGSU5EJyxcbjB4MDA3RDogJ0NFTEwnLFxuMHgwMDdFOiAnSVNFUlInLFxuMHgwMDdGOiAnSVNURVhUJyxcbjB4MDA4MDogJ0lTTlVNQkVSJyxcbjB4MDA4MTogJ0lTQkxBTksnLFxuMHgwMDgyOiAnVCcsXG4weDAwODM6ICdOJyxcbjB4MDA4NDogJ0ZPUEVOJyxcbjB4MDA4NTogJ0ZDTE9TRScsXG4weDAwODY6ICdGU0laRScsXG4weDAwODc6ICdGUkVBRExOJyxcbjB4MDA4ODogJ0ZSRUFEJyxcbjB4MDA4OTogJ0ZXUklURUxOJyxcbjB4MDA4QTogJ0ZXUklURScsXG4weDAwOEI6ICdGUE9TJyxcbjB4MDA4QzogJ0RBVEVWQUxVRScsXG4weDAwOEQ6ICdUSU1FVkFMVUUnLFxuMHgwMDhFOiAnU0xOJyxcbjB4MDA4RjogJ1NZRCcsXG4weDAwOTA6ICdEREInLFxuMHgwMDkxOiAnR0VULkRFRicsXG4weDAwOTI6ICdSRUZURVhUJyxcbjB4MDA5MzogJ1RFWFRSRUYnLFxuMHgwMDk0OiAnSU5ESVJFQ1QnLFxuMHgwMDk1OiAnUkVHSVNURVInLFxuMHgwMDk2OiAnQ0FMTCcsXG4weDAwOTc6ICdBREQuQkFSJyxcbjB4MDA5ODogJ0FERC5NRU5VJyxcbjB4MDA5OTogJ0FERC5DT01NQU5EJyxcbjB4MDA5QTogJ0VOQUJMRS5DT01NQU5EJyxcbjB4MDA5QjogJ0NIRUNLLkNPTU1BTkQnLFxuMHgwMDlDOiAnUkVOQU1FLkNPTU1BTkQnLFxuMHgwMDlEOiAnU0hPVy5CQVInLFxuMHgwMDlFOiAnREVMRVRFLk1FTlUnLFxuMHgwMDlGOiAnREVMRVRFLkNPTU1BTkQnLFxuMHgwMEEwOiAnR0VULkNIQVJULklURU0nLFxuMHgwMEExOiAnRElBTE9HLkJPWCcsXG4weDAwQTI6ICdDTEVBTicsXG4weDAwQTM6ICdNREVURVJNJyxcbjB4MDBBNDogJ01JTlZFUlNFJyxcbjB4MDBBNTogJ01NVUxUJyxcbjB4MDBBNjogJ0ZJTEVTJyxcbjB4MDBBNzogJ0lQTVQnLFxuMHgwMEE4OiAnUFBNVCcsXG4weDAwQTk6ICdDT1VOVEEnLFxuMHgwMEFBOiAnQ0FOQ0VMLktFWScsXG4weDAwQUI6ICdGT1InLFxuMHgwMEFDOiAnV0hJTEUnLFxuMHgwMEFEOiAnQlJFQUsnLFxuMHgwMEFFOiAnTkVYVCcsXG4weDAwQUY6ICdJTklUSUFURScsXG4weDAwQjA6ICdSRVFVRVNUJyxcbjB4MDBCMTogJ1BPS0UnLFxuMHgwMEIyOiAnRVhFQ1VURScsXG4weDAwQjM6ICdURVJNSU5BVEUnLFxuMHgwMEI0OiAnUkVTVEFSVCcsXG4weDAwQjU6ICdIRUxQJyxcbjB4MDBCNjogJ0dFVC5CQVInLFxuMHgwMEI3OiAnUFJPRFVDVCcsXG4weDAwQjg6ICdGQUNUJyxcbjB4MDBCOTogJ0dFVC5DRUxMJyxcbjB4MDBCQTogJ0dFVC5XT1JLU1BBQ0UnLFxuMHgwMEJCOiAnR0VULldJTkRPVycsXG4weDAwQkM6ICdHRVQuRE9DVU1FTlQnLFxuMHgwMEJEOiAnRFBST0RVQ1QnLFxuMHgwMEJFOiAnSVNOT05URVhUJyxcbjB4MDBCRjogJ0dFVC5OT1RFJyxcbjB4MDBDMDogJ05PVEUnLFxuMHgwMEMxOiAnU1RERVZQJyxcbjB4MDBDMjogJ1ZBUlAnLFxuMHgwMEMzOiAnRFNUREVWUCcsXG4weDAwQzQ6ICdEVkFSUCcsXG4weDAwQzU6ICdUUlVOQycsXG4weDAwQzY6ICdJU0xPR0lDQUwnLFxuMHgwMEM3OiAnRENPVU5UQScsXG4weDAwQzg6ICdERUxFVEUuQkFSJyxcbjB4MDBDOTogJ1VOUkVHSVNURVInLFxuMHgwMENDOiAnVVNET0xMQVInLFxuMHgwMENEOiAnRklOREInLFxuMHgwMENFOiAnU0VBUkNIQicsXG4weDAwQ0Y6ICdSRVBMQUNFQicsXG4weDAwRDA6ICdMRUZUQicsXG4weDAwRDE6ICdSSUdIVEInLFxuMHgwMEQyOiAnTUlEQicsXG4weDAwRDM6ICdMRU5CJyxcbjB4MDBENDogJ1JPVU5EVVAnLFxuMHgwMEQ1OiAnUk9VTkRET1dOJyxcbjB4MDBENjogJ0FTQycsXG4weDAwRDc6ICdEQkNTJyxcbjB4MDBEODogJ1JBTksnLFxuMHgwMERCOiAnQUREUkVTUycsXG4weDAwREM6ICdEQVlTMzYwJyxcbjB4MDBERDogJ1RPREFZJyxcbjB4MDBERTogJ1ZEQicsXG4weDAwREY6ICdFTFNFJyxcbjB4MDBFMDogJ0VMU0UuSUYnLFxuMHgwMEUxOiAnRU5ELklGJyxcbjB4MDBFMjogJ0ZPUi5DRUxMJyxcbjB4MDBFMzogJ01FRElBTicsXG4weDAwRTQ6ICdTVU1QUk9EVUNUJyxcbjB4MDBFNTogJ1NJTkgnLFxuMHgwMEU2OiAnQ09TSCcsXG4weDAwRTc6ICdUQU5IJyxcbjB4MDBFODogJ0FTSU5IJyxcbjB4MDBFOTogJ0FDT1NIJyxcbjB4MDBFQTogJ0FUQU5IJyxcbjB4MDBFQjogJ0RHRVQnLFxuMHgwMEVDOiAnQ1JFQVRFLk9CSkVDVCcsXG4weDAwRUQ6ICdWT0xBVElMRScsXG4weDAwRUU6ICdMQVNULkVSUk9SJyxcbjB4MDBFRjogJ0NVU1RPTS5VTkRPJyxcbjB4MDBGMDogJ0NVU1RPTS5SRVBFQVQnLFxuMHgwMEYxOiAnRk9STVVMQS5DT05WRVJUJyxcbjB4MDBGMjogJ0dFVC5MSU5LLklORk8nLFxuMHgwMEYzOiAnVEVYVC5CT1gnLFxuMHgwMEY0OiAnSU5GTycsXG4weDAwRjU6ICdHUk9VUCcsXG4weDAwRjY6ICdHRVQuT0JKRUNUJyxcbjB4MDBGNzogJ0RCJyxcbjB4MDBGODogJ1BBVVNFJyxcbjB4MDBGQjogJ1JFU1VNRScsXG4weDAwRkM6ICdGUkVRVUVOQ1knLFxuMHgwMEZEOiAnQURELlRPT0xCQVInLFxuMHgwMEZFOiAnREVMRVRFLlRPT0xCQVInLFxuMHgwMEZGOiAnVXNlcicsXG4weDAxMDA6ICdSRVNFVC5UT09MQkFSJyxcbjB4MDEwMTogJ0VWQUxVQVRFJyxcbjB4MDEwMjogJ0dFVC5UT09MQkFSJyxcbjB4MDEwMzogJ0dFVC5UT09MJyxcbjB4MDEwNDogJ1NQRUxMSU5HLkNIRUNLJyxcbjB4MDEwNTogJ0VSUk9SLlRZUEUnLFxuMHgwMTA2OiAnQVBQLlRJVExFJyxcbjB4MDEwNzogJ1dJTkRPVy5USVRMRScsXG4weDAxMDg6ICdTQVZFLlRPT0xCQVInLFxuMHgwMTA5OiAnRU5BQkxFLlRPT0wnLFxuMHgwMTBBOiAnUFJFU1MuVE9PTCcsXG4weDAxMEI6ICdSRUdJU1RFUi5JRCcsXG4weDAxMEM6ICdHRVQuV09SS0JPT0snLFxuMHgwMTBEOiAnQVZFREVWJyxcbjB4MDEwRTogJ0JFVEFESVNUJyxcbjB4MDEwRjogJ0dBTU1BTE4nLFxuMHgwMTEwOiAnQkVUQUlOVicsXG4weDAxMTE6ICdCSU5PTURJU1QnLFxuMHgwMTEyOiAnQ0hJRElTVCcsXG4weDAxMTM6ICdDSElJTlYnLFxuMHgwMTE0OiAnQ09NQklOJyxcbjB4MDExNTogJ0NPTkZJREVOQ0UnLFxuMHgwMTE2OiAnQ1JJVEJJTk9NJyxcbjB4MDExNzogJ0VWRU4nLFxuMHgwMTE4OiAnRVhQT05ESVNUJyxcbjB4MDExOTogJ0ZESVNUJyxcbjB4MDExQTogJ0ZJTlYnLFxuMHgwMTFCOiAnRklTSEVSJyxcbjB4MDExQzogJ0ZJU0hFUklOVicsXG4weDAxMUQ6ICdGTE9PUicsXG4weDAxMUU6ICdHQU1NQURJU1QnLFxuMHgwMTFGOiAnR0FNTUFJTlYnLFxuMHgwMTIwOiAnQ0VJTElORycsXG4weDAxMjE6ICdIWVBHRU9NRElTVCcsXG4weDAxMjI6ICdMT0dOT1JNRElTVCcsXG4weDAxMjM6ICdMT0dJTlYnLFxuMHgwMTI0OiAnTkVHQklOT01ESVNUJyxcbjB4MDEyNTogJ05PUk1ESVNUJyxcbjB4MDEyNjogJ05PUk1TRElTVCcsXG4weDAxMjc6ICdOT1JNSU5WJyxcbjB4MDEyODogJ05PUk1TSU5WJyxcbjB4MDEyOTogJ1NUQU5EQVJESVpFJyxcbjB4MDEyQTogJ09ERCcsXG4weDAxMkI6ICdQRVJNVVQnLFxuMHgwMTJDOiAnUE9JU1NPTicsXG4weDAxMkQ6ICdURElTVCcsXG4weDAxMkU6ICdXRUlCVUxMJyxcbjB4MDEyRjogJ1NVTVhNWTInLFxuMHgwMTMwOiAnU1VNWDJNWTInLFxuMHgwMTMxOiAnU1VNWDJQWTInLFxuMHgwMTMyOiAnQ0hJVEVTVCcsXG4weDAxMzM6ICdDT1JSRUwnLFxuMHgwMTM0OiAnQ09WQVInLFxuMHgwMTM1OiAnRk9SRUNBU1QnLFxuMHgwMTM2OiAnRlRFU1QnLFxuMHgwMTM3OiAnSU5URVJDRVBUJyxcbjB4MDEzODogJ1BFQVJTT04nLFxuMHgwMTM5OiAnUlNRJyxcbjB4MDEzQTogJ1NURVlYJyxcbjB4MDEzQjogJ1NMT1BFJyxcbjB4MDEzQzogJ1RURVNUJyxcbjB4MDEzRDogJ1BST0InLFxuMHgwMTNFOiAnREVWU1EnLFxuMHgwMTNGOiAnR0VPTUVBTicsXG4weDAxNDA6ICdIQVJNRUFOJyxcbjB4MDE0MTogJ1NVTVNRJyxcbjB4MDE0MjogJ0tVUlQnLFxuMHgwMTQzOiAnU0tFVycsXG4weDAxNDQ6ICdaVEVTVCcsXG4weDAxNDU6ICdMQVJHRScsXG4weDAxNDY6ICdTTUFMTCcsXG4weDAxNDc6ICdRVUFSVElMRScsXG4weDAxNDg6ICdQRVJDRU5USUxFJyxcbjB4MDE0OTogJ1BFUkNFTlRSQU5LJyxcbjB4MDE0QTogJ01PREUnLFxuMHgwMTRCOiAnVFJJTU1FQU4nLFxuMHgwMTRDOiAnVElOVicsXG4weDAxNEU6ICdNT1ZJRS5DT01NQU5EJyxcbjB4MDE0RjogJ0dFVC5NT1ZJRScsXG4weDAxNTA6ICdDT05DQVRFTkFURScsXG4weDAxNTE6ICdQT1dFUicsXG4weDAxNTI6ICdQSVZPVC5BREQuREFUQScsXG4weDAxNTM6ICdHRVQuUElWT1QuVEFCTEUnLFxuMHgwMTU0OiAnR0VULlBJVk9ULkZJRUxEJyxcbjB4MDE1NTogJ0dFVC5QSVZPVC5JVEVNJyxcbjB4MDE1NjogJ1JBRElBTlMnLFxuMHgwMTU3OiAnREVHUkVFUycsXG4weDAxNTg6ICdTVUJUT1RBTCcsXG4weDAxNTk6ICdTVU1JRicsXG4weDAxNUE6ICdDT1VOVElGJyxcbjB4MDE1QjogJ0NPVU5UQkxBTksnLFxuMHgwMTVDOiAnU0NFTkFSSU8uR0VUJyxcbjB4MDE1RDogJ09QVElPTlMuTElTVFMuR0VUJyxcbjB4MDE1RTogJ0lTUE1UJyxcbjB4MDE1RjogJ0RBVEVESUYnLFxuMHgwMTYwOiAnREFURVNUUklORycsXG4weDAxNjE6ICdOVU1CRVJTVFJJTkcnLFxuMHgwMTYyOiAnUk9NQU4nLFxuMHgwMTYzOiAnT1BFTi5ESUFMT0cnLFxuMHgwMTY0OiAnU0FWRS5ESUFMT0cnLFxuMHgwMTY1OiAnVklFVy5HRVQnLFxuMHgwMTY2OiAnR0VUUElWT1REQVRBJyxcbjB4MDE2NzogJ0hZUEVSTElOSycsXG4weDAxNjg6ICdQSE9ORVRJQycsXG4weDAxNjk6ICdBVkVSQUdFQScsXG4weDAxNkE6ICdNQVhBJyxcbjB4MDE2QjogJ01JTkEnLFxuMHgwMTZDOiAnU1RERVZQQScsXG4weDAxNkQ6ICdWQVJQQScsXG4weDAxNkU6ICdTVERFVkEnLFxuMHgwMTZGOiAnVkFSQScsXG4weDAxNzA6ICdCQUhUVEVYVCcsXG4weDAxNzE6ICdUSEFJREFZT0ZXRUVLJyxcbjB4MDE3MjogJ1RIQUlESUdJVCcsXG4weDAxNzM6ICdUSEFJTU9OVEhPRllFQVInLFxuMHgwMTc0OiAnVEhBSU5VTVNPVU5EJyxcbjB4MDE3NTogJ1RIQUlOVU1TVFJJTkcnLFxuMHgwMTc2OiAnVEhBSVNUUklOR0xFTkdUSCcsXG4weDAxNzc6ICdJU1RIQUlESUdJVCcsXG4weDAxNzg6ICdST1VOREJBSFRET1dOJyxcbjB4MDE3OTogJ1JPVU5EQkFIVFVQJyxcbjB4MDE3QTogJ1RIQUlZRUFSJyxcbjB4MDE3QjogJ1JURCcsXG5cbjB4MDE3QzogJ0NVQkVWQUxVRScsXG4weDAxN0Q6ICdDVUJFTUVNQkVSJyxcbjB4MDE3RTogJ0NVQkVNRU1CRVJQUk9QRVJUWScsXG4weDAxN0Y6ICdDVUJFUkFOS0VETUVNQkVSJyxcbjB4MDE4MDogJ0hFWDJCSU4nLFxuMHgwMTgxOiAnSEVYMkRFQycsXG4weDAxODI6ICdIRVgyT0NUJyxcbjB4MDE4MzogJ0RFQzJCSU4nLFxuMHgwMTg0OiAnREVDMkhFWCcsXG4weDAxODU6ICdERUMyT0NUJyxcbjB4MDE4NjogJ09DVDJCSU4nLFxuMHgwMTg3OiAnT0NUMkhFWCcsXG4weDAxODg6ICdPQ1QyREVDJyxcbjB4MDE4OTogJ0JJTjJERUMnLFxuMHgwMThBOiAnQklOMk9DVCcsXG4weDAxOEI6ICdCSU4ySEVYJyxcbjB4MDE4QzogJ0lNU1VCJyxcbjB4MDE4RDogJ0lNRElWJyxcbjB4MDE4RTogJ0lNUE9XRVInLFxuMHgwMThGOiAnSU1BQlMnLFxuMHgwMTkwOiAnSU1TUVJUJyxcbjB4MDE5MTogJ0lNTE4nLFxuMHgwMTkyOiAnSU1MT0cyJyxcbjB4MDE5MzogJ0lNTE9HMTAnLFxuMHgwMTk0OiAnSU1TSU4nLFxuMHgwMTk1OiAnSU1DT1MnLFxuMHgwMTk2OiAnSU1FWFAnLFxuMHgwMTk3OiAnSU1BUkdVTUVOVCcsXG4weDAxOTg6ICdJTUNPTkpVR0FURScsXG4weDAxOTk6ICdJTUFHSU5BUlknLFxuMHgwMTlBOiAnSU1SRUFMJyxcbjB4MDE5QjogJ0NPTVBMRVgnLFxuMHgwMTlDOiAnSU1TVU0nLFxuMHgwMTlEOiAnSU1QUk9EVUNUJyxcbjB4MDE5RTogJ1NFUklFU1NVTScsXG4weDAxOUY6ICdGQUNURE9VQkxFJyxcbjB4MDFBMDogJ1NRUlRQSScsXG4weDAxQTE6ICdRVU9USUVOVCcsXG4weDAxQTI6ICdERUxUQScsXG4weDAxQTM6ICdHRVNURVAnLFxuMHgwMUE0OiAnSVNFVkVOJyxcbjB4MDFBNTogJ0lTT0REJyxcbjB4MDFBNjogJ01ST1VORCcsXG4weDAxQTc6ICdFUkYnLFxuMHgwMUE4OiAnRVJGQycsXG4weDAxQTk6ICdCRVNTRUxKJyxcbjB4MDFBQTogJ0JFU1NFTEsnLFxuMHgwMUFCOiAnQkVTU0VMWScsXG4weDAxQUM6ICdCRVNTRUxJJyxcbjB4MDFBRDogJ1hJUlInLFxuMHgwMUFFOiAnWE5QVicsXG4weDAxQUY6ICdQUklDRU1BVCcsXG4weDAxQjA6ICdZSUVMRE1BVCcsXG4weDAxQjE6ICdJTlRSQVRFJyxcbjB4MDFCMjogJ1JFQ0VJVkVEJyxcbjB4MDFCMzogJ0RJU0MnLFxuMHgwMUI0OiAnUFJJQ0VESVNDJyxcbjB4MDFCNTogJ1lJRUxERElTQycsXG4weDAxQjY6ICdUQklMTEVRJyxcbjB4MDFCNzogJ1RCSUxMUFJJQ0UnLFxuMHgwMUI4OiAnVEJJTExZSUVMRCcsXG4weDAxQjk6ICdQUklDRScsXG4weDAxQkE6ICdZSUVMRCcsXG4weDAxQkI6ICdET0xMQVJERScsXG4weDAxQkM6ICdET0xMQVJGUicsXG4weDAxQkQ6ICdOT01JTkFMJyxcbjB4MDFCRTogJ0VGRkVDVCcsXG4weDAxQkY6ICdDVU1QUklOQycsXG4weDAxQzA6ICdDVU1JUE1UJyxcbjB4MDFDMTogJ0VEQVRFJyxcbjB4MDFDMjogJ0VPTU9OVEgnLFxuMHgwMUMzOiAnWUVBUkZSQUMnLFxuMHgwMUM0OiAnQ09VUERBWUJTJyxcbjB4MDFDNTogJ0NPVVBEQVlTJyxcbjB4MDFDNjogJ0NPVVBEQVlTTkMnLFxuMHgwMUM3OiAnQ09VUE5DRCcsXG4weDAxQzg6ICdDT1VQTlVNJyxcbjB4MDFDOTogJ0NPVVBQQ0QnLFxuMHgwMUNBOiAnRFVSQVRJT04nLFxuMHgwMUNCOiAnTURVUkFUSU9OJyxcbjB4MDFDQzogJ09ERExQUklDRScsXG4weDAxQ0Q6ICdPRERMWUlFTEQnLFxuMHgwMUNFOiAnT0RERlBSSUNFJyxcbjB4MDFDRjogJ09EREZZSUVMRCcsXG4weDAxRDA6ICdSQU5EQkVUV0VFTicsXG4weDAxRDE6ICdXRUVLTlVNJyxcbjB4MDFEMjogJ0FNT1JERUdSQycsXG4weDAxRDM6ICdBTU9STElOQycsXG4weDAxRDQ6ICdDT05WRVJUJyxcbjB4MDJENDogJ1NIRUVUSlMnLFxuMHgwMUQ1OiAnQUNDUklOVCcsXG4weDAxRDY6ICdBQ0NSSU5UTScsXG4weDAxRDc6ICdXT1JLREFZJyxcbjB4MDFEODogJ05FVFdPUktEQVlTJyxcbjB4MDFEOTogJ0dDRCcsXG4weDAxREE6ICdNVUxUSU5PTUlBTCcsXG4weDAxREI6ICdMQ00nLFxuMHgwMURDOiAnRlZTQ0hFRFVMRScsXG4weDAxREQ6ICdDVUJFS1BJTUVNQkVSJyxcbjB4MDFERTogJ0NVQkVTRVQnLFxuMHgwMURGOiAnQ1VCRVNFVENPVU5UJyxcbjB4MDFFMDogJ0lGRVJST1InLFxuMHgwMUUxOiAnQ09VTlRJRlMnLFxuMHgwMUUyOiAnU1VNSUZTJyxcbjB4MDFFMzogJ0FWRVJBR0VJRicsXG4weDAxRTQ6ICdBVkVSQUdFSUZTJ1xufTtcbnZhciBGdGFiQXJnYyA9IHtcbjB4MDAwMjogMSwgLyogSVNOQSAqL1xuMHgwMDAzOiAxLCAvKiBJU0VSUk9SICovXG4weDAwMEY6IDEsIC8qIFNJTiAqL1xuMHgwMDEwOiAxLCAvKiBDT1MgKi9cbjB4MDAxMTogMSwgLyogVEFOICovXG4weDAwMTI6IDEsIC8qIEFUQU4gKi9cbjB4MDAxMzogMCwgLyogUEkgKi9cbjB4MDAxNDogMSwgLyogU1FSVCAqL1xuMHgwMDE1OiAxLCAvKiBFWFAgKi9cbjB4MDAxNjogMSwgLyogTE4gKi9cbjB4MDAxNzogMSwgLyogTE9HMTAgKi9cbjB4MDAxODogMSwgLyogQUJTICovXG4weDAwMTk6IDEsIC8qIElOVCAqL1xuMHgwMDFBOiAxLCAvKiBTSUdOICovXG4weDAwMUI6IDIsIC8qIFJPVU5EICovXG4weDAwMUU6IDIsIC8qIFJFUFQgKi9cbjB4MDAxRjogMywgLyogTUlEICovXG4weDAwMjA6IDEsIC8qIExFTiAqL1xuMHgwMDIxOiAxLCAvKiBWQUxVRSAqL1xuMHgwMDI2OiAxLCAvKiBOT1QgKi9cbjB4MDAyNzogMiwgLyogTU9EICovXG4weDAwMjg6IDMsIC8qIERDT1VOVCAqL1xuMHgwMDI5OiAzLCAvKiBEU1VNICovXG4weDAwMkE6IDMsIC8qIERBVkVSQUdFICovXG4weDAwMkI6IDMsIC8qIERNSU4gKi9cbjB4MDAyQzogMywgLyogRE1BWCAqL1xuMHgwMDJEOiAzLCAvKiBEU1RERVYgKi9cbjB4MDAyRjogMywgLyogRFZBUiAqL1xuMHgwMDMwOiAyLCAvKiBURVhUICovXG4weDAwMzU6IDEsIC8qIEdPVE8gKi9cbjB4MDAzRDogMywgLyogTUlSUiAqL1xuMHgwMDQxOiAzLCAvKiBEQVRFICovXG4weDAwNDI6IDMsIC8qIFRJTUUgKi9cbjB4MDA0MzogMSwgLyogREFZICovXG4weDAwNDQ6IDEsIC8qIE1PTlRIICovXG4weDAwNDU6IDEsIC8qIFlFQVIgKi9cbjB4MDA0NjogMSwgLyogV0VFS0RBWSAqL1xuMHgwMDQ3OiAxLCAvKiBIT1VSICovXG4weDAwNDg6IDEsIC8qIE1JTlVURSAqL1xuMHgwMDQ5OiAxLCAvKiBTRUNPTkQgKi9cbjB4MDA0QjogMSwgLyogQVJFQVMgKi9cbjB4MDA0QzogMSwgLyogUk9XUyAqL1xuMHgwMDREOiAxLCAvKiBDT0xVTU5TICovXG4weDAwNEY6IDIsIC8qIEFCU1JFRiAqL1xuMHgwMDUwOiAyLCAvKiBSRUxSRUYgKi9cbjB4MDA1MzogMSwgLyogVFJBTlNQT1NFICovXG4weDAwNTU6IDAsIC8qIFNURVAgKi9cbjB4MDA1NjogMSwgLyogVFlQRSAqL1xuMHgwMDVBOiAxLCAvKiBERVJFRiAqL1xuMHgwMDYxOiAyLCAvKiBBVEFOMiAqL1xuMHgwMDYyOiAxLCAvKiBBU0lOICovXG4weDAwNjM6IDEsIC8qIEFDT1MgKi9cbjB4MDA2NTogMywgLyogSExPT0tVUCAqL1xuMHgwMDY2OiAzLCAvKiBWTE9PS1VQICovXG4weDAwNjk6IDEsIC8qIElTUkVGICovXG4weDAwNkY6IDEsIC8qIENIQVIgKi9cbjB4MDA3MDogMSwgLyogTE9XRVIgKi9cbjB4MDA3MTogMSwgLyogVVBQRVIgKi9cbjB4MDA3MjogMSwgLyogUFJPUEVSICovXG4weDAwNzU6IDIsIC8qIEVYQUNUICovXG4weDAwNzY6IDEsIC8qIFRSSU0gKi9cbjB4MDA3NzogNCwgLyogUkVQTEFDRSAqL1xuMHgwMDc5OiAxLCAvKiBDT0RFICovXG4weDAwN0U6IDEsIC8qIElTRVJSICovXG4weDAwN0Y6IDEsIC8qIElTVEVYVCAqL1xuMHgwMDgwOiAxLCAvKiBJU05VTUJFUiAqL1xuMHgwMDgxOiAxLCAvKiBJU0JMQU5LICovXG4weDAwODI6IDEsIC8qIFQgKi9cbjB4MDA4MzogMSwgLyogTiAqL1xuMHgwMDg1OiAxLCAvKiBGQ0xPU0UgKi9cbjB4MDA4NjogMSwgLyogRlNJWkUgKi9cbjB4MDA4NzogMSwgLyogRlJFQURMTiAqL1xuMHgwMDg4OiAyLCAvKiBGUkVBRCAqL1xuMHgwMDg5OiAyLCAvKiBGV1JJVEVMTiAqL1xuMHgwMDhBOiAyLCAvKiBGV1JJVEUgKi9cbjB4MDA4QzogMSwgLyogREFURVZBTFVFICovXG4weDAwOEQ6IDEsIC8qIFRJTUVWQUxVRSAqL1xuMHgwMDhFOiAzLCAvKiBTTE4gKi9cbjB4MDA4RjogNCwgLyogU1lEICovXG4weDAwOTA6IDQsIC8qIEREQiAqL1xuMHgwMEEyOiAxLCAvKiBDTEVBTiAqL1xuMHgwMEEzOiAxLCAvKiBNREVURVJNICovXG4weDAwQTQ6IDEsIC8qIE1JTlZFUlNFICovXG4weDAwQTU6IDIsIC8qIE1NVUxUICovXG4weDAwQUM6IDEsIC8qIFdISUxFICovXG4weDAwQUY6IDIsIC8qIElOSVRJQVRFICovXG4weDAwQjA6IDIsIC8qIFJFUVVFU1QgKi9cbjB4MDBCMTogMywgLyogUE9LRSAqL1xuMHgwMEIyOiAyLCAvKiBFWEVDVVRFICovXG4weDAwQjM6IDEsIC8qIFRFUk1JTkFURSAqL1xuMHgwMEI4OiAxLCAvKiBGQUNUICovXG4weDAwQkQ6IDMsIC8qIERQUk9EVUNUICovXG4weDAwQkU6IDEsIC8qIElTTk9OVEVYVCAqL1xuMHgwMEMzOiAzLCAvKiBEU1RERVZQICovXG4weDAwQzQ6IDMsIC8qIERWQVJQICovXG4weDAwQzU6IDEsIC8qIFRSVU5DICovXG4weDAwQzY6IDEsIC8qIElTTE9HSUNBTCAqL1xuMHgwMEM3OiAzLCAvKiBEQ09VTlRBICovXG4weDAwQzk6IDEsIC8qIFVOUkVHSVNURVIgKi9cbjB4MDBDRjogNCwgLyogUkVQTEFDRUIgKi9cbjB4MDBEMjogMywgLyogTUlEQiAqL1xuMHgwMEQzOiAxLCAvKiBMRU5CICovXG4weDAwRDQ6IDIsIC8qIFJPVU5EVVAgKi9cbjB4MDBENTogMiwgLyogUk9VTkRET1dOICovXG4weDAwRDY6IDEsIC8qIEFTQyAqL1xuMHgwMEQ3OiAxLCAvKiBEQkNTICovXG4weDAwRTU6IDEsIC8qIFNJTkggKi9cbjB4MDBFNjogMSwgLyogQ09TSCAqL1xuMHgwMEU3OiAxLCAvKiBUQU5IICovXG4weDAwRTg6IDEsIC8qIEFTSU5IICovXG4weDAwRTk6IDEsIC8qIEFDT1NIICovXG4weDAwRUE6IDEsIC8qIEFUQU5IICovXG4weDAwRUI6IDMsIC8qIERHRVQgKi9cbjB4MDBGNDogMSwgLyogSU5GTyAqL1xuMHgwMEY3OiA0LCAvKiBEQiAqL1xuMHgwMEZDOiAyLCAvKiBGUkVRVUVOQ1kgKi9cbjB4MDEwMTogMSwgLyogRVZBTFVBVEUgKi9cbjB4MDEwNTogMSwgLyogRVJST1IuVFlQRSAqL1xuMHgwMTBGOiAxLCAvKiBHQU1NQUxOICovXG4weDAxMTE6IDQsIC8qIEJJTk9NRElTVCAqL1xuMHgwMTEyOiAyLCAvKiBDSElESVNUICovXG4weDAxMTM6IDIsIC8qIENISUlOViAqL1xuMHgwMTE0OiAyLCAvKiBDT01CSU4gKi9cbjB4MDExNTogMywgLyogQ09ORklERU5DRSAqL1xuMHgwMTE2OiAzLCAvKiBDUklUQklOT00gKi9cbjB4MDExNzogMSwgLyogRVZFTiAqL1xuMHgwMTE4OiAzLCAvKiBFWFBPTkRJU1QgKi9cbjB4MDExOTogMywgLyogRkRJU1QgKi9cbjB4MDExQTogMywgLyogRklOViAqL1xuMHgwMTFCOiAxLCAvKiBGSVNIRVIgKi9cbjB4MDExQzogMSwgLyogRklTSEVSSU5WICovXG4weDAxMUQ6IDIsIC8qIEZMT09SICovXG4weDAxMUU6IDQsIC8qIEdBTU1BRElTVCAqL1xuMHgwMTFGOiAzLCAvKiBHQU1NQUlOViAqL1xuMHgwMTIwOiAyLCAvKiBDRUlMSU5HICovXG4weDAxMjE6IDQsIC8qIEhZUEdFT01ESVNUICovXG4weDAxMjI6IDMsIC8qIExPR05PUk1ESVNUICovXG4weDAxMjM6IDMsIC8qIExPR0lOViAqL1xuMHgwMTI0OiAzLCAvKiBORUdCSU5PTURJU1QgKi9cbjB4MDEyNTogNCwgLyogTk9STURJU1QgKi9cbjB4MDEyNjogMSwgLyogTk9STVNESVNUICovXG4weDAxMjc6IDMsIC8qIE5PUk1JTlYgKi9cbjB4MDEyODogMSwgLyogTk9STVNJTlYgKi9cbjB4MDEyOTogMywgLyogU1RBTkRBUkRJWkUgKi9cbjB4MDEyQTogMSwgLyogT0REICovXG4weDAxMkI6IDIsIC8qIFBFUk1VVCAqL1xuMHgwMTJDOiAzLCAvKiBQT0lTU09OICovXG4weDAxMkQ6IDMsIC8qIFRESVNUICovXG4weDAxMkU6IDQsIC8qIFdFSUJVTEwgKi9cbjB4MDEyRjogMiwgLyogU1VNWE1ZMiAqL1xuMHgwMTMwOiAyLCAvKiBTVU1YMk1ZMiAqL1xuMHgwMTMxOiAyLCAvKiBTVU1YMlBZMiAqL1xuMHgwMTMyOiAyLCAvKiBDSElURVNUICovXG4weDAxMzM6IDIsIC8qIENPUlJFTCAqL1xuMHgwMTM0OiAyLCAvKiBDT1ZBUiAqL1xuMHgwMTM1OiAzLCAvKiBGT1JFQ0FTVCAqL1xuMHgwMTM2OiAyLCAvKiBGVEVTVCAqL1xuMHgwMTM3OiAyLCAvKiBJTlRFUkNFUFQgKi9cbjB4MDEzODogMiwgLyogUEVBUlNPTiAqL1xuMHgwMTM5OiAyLCAvKiBSU1EgKi9cbjB4MDEzQTogMiwgLyogU1RFWVggKi9cbjB4MDEzQjogMiwgLyogU0xPUEUgKi9cbjB4MDEzQzogNCwgLyogVFRFU1QgKi9cbjB4MDE0NTogMiwgLyogTEFSR0UgKi9cbjB4MDE0NjogMiwgLyogU01BTEwgKi9cbjB4MDE0NzogMiwgLyogUVVBUlRJTEUgKi9cbjB4MDE0ODogMiwgLyogUEVSQ0VOVElMRSAqL1xuMHgwMTRCOiAyLCAvKiBUUklNTUVBTiAqL1xuMHgwMTRDOiAyLCAvKiBUSU5WICovXG4weDAxNTE6IDIsIC8qIFBPV0VSICovXG4weDAxNTY6IDEsIC8qIFJBRElBTlMgKi9cbjB4MDE1NzogMSwgLyogREVHUkVFUyAqL1xuMHgwMTVBOiAyLCAvKiBDT1VOVElGICovXG4weDAxNUI6IDEsIC8qIENPVU5UQkxBTksgKi9cbjB4MDE1RTogNCwgLyogSVNQTVQgKi9cbjB4MDE1RjogMywgLyogREFURURJRiAqL1xuMHgwMTYwOiAxLCAvKiBEQVRFU1RSSU5HICovXG4weDAxNjE6IDIsIC8qIE5VTUJFUlNUUklORyAqL1xuMHgwMTY4OiAxLCAvKiBQSE9ORVRJQyAqL1xuMHgwMTcwOiAxLCAvKiBCQUhUVEVYVCAqL1xuMHgwMTcxOiAxLCAvKiBUSEFJREFZT0ZXRUVLICovXG4weDAxNzI6IDEsIC8qIFRIQUlESUdJVCAqL1xuMHgwMTczOiAxLCAvKiBUSEFJTU9OVEhPRllFQVIgKi9cbjB4MDE3NDogMSwgLyogVEhBSU5VTVNPVU5EICovXG4weDAxNzU6IDEsIC8qIFRIQUlOVU1TVFJJTkcgKi9cbjB4MDE3NjogMSwgLyogVEhBSVNUUklOR0xFTkdUSCAqL1xuMHgwMTc3OiAxLCAvKiBJU1RIQUlESUdJVCAqL1xuMHgwMTc4OiAxLCAvKiBST1VOREJBSFRET1dOICovXG4weDAxNzk6IDEsIC8qIFJPVU5EQkFIVFVQICovXG4weDAxN0E6IDEsIC8qIFRIQUlZRUFSICovXG4weDAxN0U6IDMsIC8qIENVQkVNRU1CRVJQUk9QRVJUWSAqL1xuMHgwMTgxOiAxLCAvKiBIRVgyREVDICovXG4weDAxODg6IDEsIC8qIE9DVDJERUMgKi9cbjB4MDE4OTogMSwgLyogQklOMkRFQyAqL1xuMHgwMThDOiAyLCAvKiBJTVNVQiAqL1xuMHgwMThEOiAyLCAvKiBJTURJViAqL1xuMHgwMThFOiAyLCAvKiBJTVBPV0VSICovXG4weDAxOEY6IDEsIC8qIElNQUJTICovXG4weDAxOTA6IDEsIC8qIElNU1FSVCAqL1xuMHgwMTkxOiAxLCAvKiBJTUxOICovXG4weDAxOTI6IDEsIC8qIElNTE9HMiAqL1xuMHgwMTkzOiAxLCAvKiBJTUxPRzEwICovXG4weDAxOTQ6IDEsIC8qIElNU0lOICovXG4weDAxOTU6IDEsIC8qIElNQ09TICovXG4weDAxOTY6IDEsIC8qIElNRVhQICovXG4weDAxOTc6IDEsIC8qIElNQVJHVU1FTlQgKi9cbjB4MDE5ODogMSwgLyogSU1DT05KVUdBVEUgKi9cbjB4MDE5OTogMSwgLyogSU1BR0lOQVJZICovXG4weDAxOUE6IDEsIC8qIElNUkVBTCAqL1xuMHgwMTlFOiA0LCAvKiBTRVJJRVNTVU0gKi9cbjB4MDE5RjogMSwgLyogRkFDVERPVUJMRSAqL1xuMHgwMUEwOiAxLCAvKiBTUVJUUEkgKi9cbjB4MDFBMTogMiwgLyogUVVPVElFTlQgKi9cbjB4MDFBNDogMSwgLyogSVNFVkVOICovXG4weDAxQTU6IDEsIC8qIElTT0REICovXG4weDAxQTY6IDIsIC8qIE1ST1VORCAqL1xuMHgwMUE4OiAxLCAvKiBFUkZDICovXG4weDAxQTk6IDIsIC8qIEJFU1NFTEogKi9cbjB4MDFBQTogMiwgLyogQkVTU0VMSyAqL1xuMHgwMUFCOiAyLCAvKiBCRVNTRUxZICovXG4weDAxQUM6IDIsIC8qIEJFU1NFTEkgKi9cbjB4MDFBRTogMywgLyogWE5QViAqL1xuMHgwMUI2OiAzLCAvKiBUQklMTEVRICovXG4weDAxQjc6IDMsIC8qIFRCSUxMUFJJQ0UgKi9cbjB4MDFCODogMywgLyogVEJJTExZSUVMRCAqL1xuMHgwMUJCOiAyLCAvKiBET0xMQVJERSAqL1xuMHgwMUJDOiAyLCAvKiBET0xMQVJGUiAqL1xuMHgwMUJEOiAyLCAvKiBOT01JTkFMICovXG4weDAxQkU6IDIsIC8qIEVGRkVDVCAqL1xuMHgwMUJGOiA2LCAvKiBDVU1QUklOQyAqL1xuMHgwMUMwOiA2LCAvKiBDVU1JUE1UICovXG4weDAxQzE6IDIsIC8qIEVEQVRFICovXG4weDAxQzI6IDIsIC8qIEVPTU9OVEggKi9cbjB4MDFEMDogMiwgLyogUkFOREJFVFdFRU4gKi9cbjB4MDFENDogMywgLyogQ09OVkVSVCAqL1xuMHgwMURDOiAyLCAvKiBGVlNDSEVEVUxFICovXG4weDAxREY6IDEsIC8qIENVQkVTRVRDT1VOVCAqL1xuMHgwMUUwOiAyLCAvKiBJRkVSUk9SICovXG4weEZGRkY6IDBcbn07XG4vKiBbTVMtWExTWF0gMi4yLjMgRnVuY3Rpb25zICovXG4vKiBbTVMtWExTQl0gMi41Ljk3LjEwIEZ0YWIgKi9cbnZhciBYTFNYRnV0dXJlRnVuY3Rpb25zID0ge1xuXHRcIl94bGZuLkFDT1RcIjogXCJBQ09UXCIsXG5cdFwiX3hsZm4uQUNPVEhcIjogXCJBQ09USFwiLFxuXHRcIl94bGZuLkFHR1JFR0FURVwiOiBcIkFHR1JFR0FURVwiLFxuXHRcIl94bGZuLkFSQUJJQ1wiOiBcIkFSQUJJQ1wiLFxuXHRcIl94bGZuLkFWRVJBR0VJRlwiOiBcIkFWRVJBR0VJRlwiLFxuXHRcIl94bGZuLkFWRVJBR0VJRlNcIjogXCJBVkVSQUdFSUZTXCIsXG5cdFwiX3hsZm4uQkFTRVwiOiBcIkJBU0VcIixcblx0XCJfeGxmbi5CRVRBLkRJU1RcIjogXCJCRVRBLkRJU1RcIixcblx0XCJfeGxmbi5CRVRBLklOVlwiOiBcIkJFVEEuSU5WXCIsXG5cdFwiX3hsZm4uQklOT00uRElTVFwiOiBcIkJJTk9NLkRJU1RcIixcblx0XCJfeGxmbi5CSU5PTS5ESVNULlJBTkdFXCI6IFwiQklOT00uRElTVC5SQU5HRVwiLFxuXHRcIl94bGZuLkJJTk9NLklOVlwiOiBcIkJJTk9NLklOVlwiLFxuXHRcIl94bGZuLkJJVEFORFwiOiBcIkJJVEFORFwiLFxuXHRcIl94bGZuLkJJVExTSElGVFwiOiBcIkJJVExTSElGVFwiLFxuXHRcIl94bGZuLkJJVE9SXCI6IFwiQklUT1JcIixcblx0XCJfeGxmbi5CSVRSU0hJRlRcIjogXCJCSVRSU0hJRlRcIixcblx0XCJfeGxmbi5CSVRYT1JcIjogXCJCSVRYT1JcIixcblx0XCJfeGxmbi5DRUlMSU5HLk1BVEhcIjogXCJDRUlMSU5HLk1BVEhcIixcblx0XCJfeGxmbi5DRUlMSU5HLlBSRUNJU0VcIjogXCJDRUlMSU5HLlBSRUNJU0VcIixcblx0XCJfeGxmbi5DSElTUS5ESVNUXCI6IFwiQ0hJU1EuRElTVFwiLFxuXHRcIl94bGZuLkNISVNRLkRJU1QuUlRcIjogXCJDSElTUS5ESVNULlJUXCIsXG5cdFwiX3hsZm4uQ0hJU1EuSU5WXCI6IFwiQ0hJU1EuSU5WXCIsXG5cdFwiX3hsZm4uQ0hJU1EuSU5WLlJUXCI6IFwiQ0hJU1EuSU5WLlJUXCIsXG5cdFwiX3hsZm4uQ0hJU1EuVEVTVFwiOiBcIkNISVNRLlRFU1RcIixcblx0XCJfeGxmbi5DT01CSU5BXCI6IFwiQ09NQklOQVwiLFxuXHRcIl94bGZuLkNPTkNBVFwiOiBcIkNPTkNBVFwiLFxuXHRcIl94bGZuLkNPTkZJREVOQ0UuTk9STVwiOiBcIkNPTkZJREVOQ0UuTk9STVwiLFxuXHRcIl94bGZuLkNPTkZJREVOQ0UuVFwiOiBcIkNPTkZJREVOQ0UuVFwiLFxuXHRcIl94bGZuLkNPVFwiOiBcIkNPVFwiLFxuXHRcIl94bGZuLkNPVEhcIjogXCJDT1RIXCIsXG5cdFwiX3hsZm4uQ09VTlRJRlNcIjogXCJDT1VOVElGU1wiLFxuXHRcIl94bGZuLkNPVkFSSUFOQ0UuUFwiOiBcIkNPVkFSSUFOQ0UuUFwiLFxuXHRcIl94bGZuLkNPVkFSSUFOQ0UuU1wiOiBcIkNPVkFSSUFOQ0UuU1wiLFxuXHRcIl94bGZuLkNTQ1wiOiBcIkNTQ1wiLFxuXHRcIl94bGZuLkNTQ0hcIjogXCJDU0NIXCIsXG5cdFwiX3hsZm4uREFZU1wiOiBcIkRBWVNcIixcblx0XCJfeGxmbi5ERUNJTUFMXCI6IFwiREVDSU1BTFwiLFxuXHRcIl94bGZuLkVDTUEuQ0VJTElOR1wiOiBcIkVDTUEuQ0VJTElOR1wiLFxuXHRcIl94bGZuLkVSRi5QUkVDSVNFXCI6IFwiRVJGLlBSRUNJU0VcIixcblx0XCJfeGxmbi5FUkZDLlBSRUNJU0VcIjogXCJFUkZDLlBSRUNJU0VcIixcblx0XCJfeGxmbi5FWFBPTi5ESVNUXCI6IFwiRVhQT04uRElTVFwiLFxuXHRcIl94bGZuLkYuRElTVFwiOiBcIkYuRElTVFwiLFxuXHRcIl94bGZuLkYuRElTVC5SVFwiOiBcIkYuRElTVC5SVFwiLFxuXHRcIl94bGZuLkYuSU5WXCI6IFwiRi5JTlZcIixcblx0XCJfeGxmbi5GLklOVi5SVFwiOiBcIkYuSU5WLlJUXCIsXG5cdFwiX3hsZm4uRi5URVNUXCI6IFwiRi5URVNUXCIsXG5cdFwiX3hsZm4uRklMVEVSWE1MXCI6IFwiRklMVEVSWE1MXCIsXG5cdFwiX3hsZm4uRkxPT1IuTUFUSFwiOiBcIkZMT09SLk1BVEhcIixcblx0XCJfeGxmbi5GTE9PUi5QUkVDSVNFXCI6IFwiRkxPT1IuUFJFQ0lTRVwiLFxuXHRcIl94bGZuLkZPUkVDQVNULkVUU1wiOiBcIkZPUkVDQVNULkVUU1wiLFxuXHRcIl94bGZuLkZPUkVDQVNULkVUUy5DT05GSU5UXCI6IFwiRk9SRUNBU1QuRVRTLkNPTkZJTlRcIixcblx0XCJfeGxmbi5GT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFlcIjogXCJGT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFlcIixcblx0XCJfeGxmbi5GT1JFQ0FTVC5FVFMuU1RBVFwiOiBcIkZPUkVDQVNULkVUUy5TVEFUXCIsXG5cdFwiX3hsZm4uRk9SRUNBU1QuTElORUFSXCI6IFwiRk9SRUNBU1QuTElORUFSXCIsXG5cdFwiX3hsZm4uRk9STVVMQVRFWFRcIjogXCJGT1JNVUxBVEVYVFwiLFxuXHRcIl94bGZuLkdBTU1BXCI6IFwiR0FNTUFcIixcblx0XCJfeGxmbi5HQU1NQS5ESVNUXCI6IFwiR0FNTUEuRElTVFwiLFxuXHRcIl94bGZuLkdBTU1BLklOVlwiOiBcIkdBTU1BLklOVlwiLFxuXHRcIl94bGZuLkdBTU1BTE4uUFJFQ0lTRVwiOiBcIkdBTU1BTE4uUFJFQ0lTRVwiLFxuXHRcIl94bGZuLkdBVVNTXCI6IFwiR0FVU1NcIixcblx0XCJfeGxmbi5IWVBHRU9NLkRJU1RcIjogXCJIWVBHRU9NLkRJU1RcIixcblx0XCJfeGxmbi5JRkVSUk9SXCI6IFwiSUZFUlJPUlwiLFxuXHRcIl94bGZuLklGTkFcIjogXCJJRk5BXCIsXG5cdFwiX3hsZm4uSUZTXCI6IFwiSUZTXCIsXG5cdFwiX3hsZm4uSU1DT1NIXCI6IFwiSU1DT1NIXCIsXG5cdFwiX3hsZm4uSU1DT1RcIjogXCJJTUNPVFwiLFxuXHRcIl94bGZuLklNQ1NDXCI6IFwiSU1DU0NcIixcblx0XCJfeGxmbi5JTUNTQ0hcIjogXCJJTUNTQ0hcIixcblx0XCJfeGxmbi5JTVNFQ1wiOiBcIklNU0VDXCIsXG5cdFwiX3hsZm4uSU1TRUNIXCI6IFwiSU1TRUNIXCIsXG5cdFwiX3hsZm4uSU1TSU5IXCI6IFwiSU1TSU5IXCIsXG5cdFwiX3hsZm4uSU1UQU5cIjogXCJJTVRBTlwiLFxuXHRcIl94bGZuLklTRk9STVVMQVwiOiBcIklTRk9STVVMQVwiLFxuXHRcIl94bGZuLklTTy5DRUlMSU5HXCI6IFwiSVNPLkNFSUxJTkdcIixcblx0XCJfeGxmbi5JU09XRUVLTlVNXCI6IFwiSVNPV0VFS05VTVwiLFxuXHRcIl94bGZuLkxPR05PUk0uRElTVFwiOiBcIkxPR05PUk0uRElTVFwiLFxuXHRcIl94bGZuLkxPR05PUk0uSU5WXCI6IFwiTE9HTk9STS5JTlZcIixcblx0XCJfeGxmbi5NQVhJRlNcIjogXCJNQVhJRlNcIixcblx0XCJfeGxmbi5NSU5JRlNcIjogXCJNSU5JRlNcIixcblx0XCJfeGxmbi5NT0RFLk1VTFRcIjogXCJNT0RFLk1VTFRcIixcblx0XCJfeGxmbi5NT0RFLlNOR0xcIjogXCJNT0RFLlNOR0xcIixcblx0XCJfeGxmbi5NVU5JVFwiOiBcIk1VTklUXCIsXG5cdFwiX3hsZm4uTkVHQklOT00uRElTVFwiOiBcIk5FR0JJTk9NLkRJU1RcIixcblx0XCJfeGxmbi5ORVRXT1JLREFZUy5JTlRMXCI6IFwiTkVUV09SS0RBWVMuSU5UTFwiLFxuXHRcIl94bGZuLk5JR0JJTk9NXCI6IFwiTklHQklOT01cIixcblx0XCJfeGxmbi5OT1JNLkRJU1RcIjogXCJOT1JNLkRJU1RcIixcblx0XCJfeGxmbi5OT1JNLklOVlwiOiBcIk5PUk0uSU5WXCIsXG5cdFwiX3hsZm4uTk9STS5TLkRJU1RcIjogXCJOT1JNLlMuRElTVFwiLFxuXHRcIl94bGZuLk5PUk0uUy5JTlZcIjogXCJOT1JNLlMuSU5WXCIsXG5cdFwiX3hsZm4uTlVNQkVSVkFMVUVcIjogXCJOVU1CRVJWQUxVRVwiLFxuXHRcIl94bGZuLlBEVVJBVElPTlwiOiBcIlBEVVJBVElPTlwiLFxuXHRcIl94bGZuLlBFUkNFTlRJTEUuRVhDXCI6IFwiUEVSQ0VOVElMRS5FWENcIixcblx0XCJfeGxmbi5QRVJDRU5USUxFLklOQ1wiOiBcIlBFUkNFTlRJTEUuSU5DXCIsXG5cdFwiX3hsZm4uUEVSQ0VOVFJBTksuRVhDXCI6IFwiUEVSQ0VOVFJBTksuRVhDXCIsXG5cdFwiX3hsZm4uUEVSQ0VOVFJBTksuSU5DXCI6IFwiUEVSQ0VOVFJBTksuSU5DXCIsXG5cdFwiX3hsZm4uUEVSTVVUQVRJT05BXCI6IFwiUEVSTVVUQVRJT05BXCIsXG5cdFwiX3hsZm4uUEhJXCI6IFwiUEhJXCIsXG5cdFwiX3hsZm4uUE9JU1NPTi5ESVNUXCI6IFwiUE9JU1NPTi5ESVNUXCIsXG5cdFwiX3hsZm4uUVVBUlRJTEUuRVhDXCI6IFwiUVVBUlRJTEUuRVhDXCIsXG5cdFwiX3hsZm4uUVVBUlRJTEUuSU5DXCI6IFwiUVVBUlRJTEUuSU5DXCIsXG5cdFwiX3hsZm4uUVVFUllTVFJJTkdcIjogXCJRVUVSWVNUUklOR1wiLFxuXHRcIl94bGZuLlJBTksuQVZHXCI6IFwiUkFOSy5BVkdcIixcblx0XCJfeGxmbi5SQU5LLkVRXCI6IFwiUkFOSy5FUVwiLFxuXHRcIl94bGZuLlJSSVwiOiBcIlJSSVwiLFxuXHRcIl94bGZuLlNFQ1wiOiBcIlNFQ1wiLFxuXHRcIl94bGZuLlNFQ0hcIjogXCJTRUNIXCIsXG5cdFwiX3hsZm4uU0hFRVRcIjogXCJTSEVFVFwiLFxuXHRcIl94bGZuLlNIRUVUU1wiOiBcIlNIRUVUU1wiLFxuXHRcIl94bGZuLlNLRVcuUFwiOiBcIlNLRVcuUFwiLFxuXHRcIl94bGZuLlNUREVWLlBcIjogXCJTVERFVi5QXCIsXG5cdFwiX3hsZm4uU1RERVYuU1wiOiBcIlNUREVWLlNcIixcblx0XCJfeGxmbi5TVU1JRlNcIjogXCJTVU1JRlNcIixcblx0XCJfeGxmbi5TV0lUQ0hcIjogXCJTV0lUQ0hcIixcblx0XCJfeGxmbi5ULkRJU1RcIjogXCJULkRJU1RcIixcblx0XCJfeGxmbi5ULkRJU1QuMlRcIjogXCJULkRJU1QuMlRcIixcblx0XCJfeGxmbi5ULkRJU1QuUlRcIjogXCJULkRJU1QuUlRcIixcblx0XCJfeGxmbi5ULklOVlwiOiBcIlQuSU5WXCIsXG5cdFwiX3hsZm4uVC5JTlYuMlRcIjogXCJULklOVi4yVFwiLFxuXHRcIl94bGZuLlQuVEVTVFwiOiBcIlQuVEVTVFwiLFxuXHRcIl94bGZuLlRFWFRKT0lOXCI6IFwiVEVYVEpPSU5cIixcblx0XCJfeGxmbi5VTklDSEFSXCI6IFwiVU5JQ0hBUlwiLFxuXHRcIl94bGZuLlVOSUNPREVcIjogXCJVTklDT0RFXCIsXG5cdFwiX3hsZm4uVkFSLlBcIjogXCJWQVIuUFwiLFxuXHRcIl94bGZuLlZBUi5TXCI6IFwiVkFSLlNcIixcblx0XCJfeGxmbi5XRUJTRVJWSUNFXCI6IFwiV0VCU0VSVklDRVwiLFxuXHRcIl94bGZuLldFSUJVTEwuRElTVFwiOiBcIldFSUJVTEwuRElTVFwiLFxuXHRcIl94bGZuLldPUktEQVkuSU5UTFwiOiBcIldPUktEQVkuSU5UTFwiLFxuXHRcIl94bGZuLlhPUlwiOiBcIlhPUlwiLFxuXHRcIl94bGZuLlouVEVTVFwiOiBcIlouVEVTVFwiXG59O1xuXG4vKiBQYXJ0IDMgVE9ETzogYWN0dWFsbHkgcGFyc2UgZm9ybXVsYWUgKi9cbmZ1bmN0aW9uIG9kc190b19jc2ZfZm9ybXVsYShmKSB7XG5cdGlmKGYuc2xpY2UoMCwzKSA9PSBcIm9mOlwiKSBmID0gZi5zbGljZSgzKTtcblx0LyogNS4yIEJhc2ljIEV4cHJlc3Npb25zICovXG5cdGlmKGYuY2hhckNvZGVBdCgwKSA9PSA2MSkge1xuXHRcdGYgPSBmLnNsaWNlKDEpO1xuXHRcdGlmKGYuY2hhckNvZGVBdCgwKSA9PSA2MSkgZiA9IGYuc2xpY2UoMSk7XG5cdH1cblx0ZiA9IGYucmVwbGFjZSgvQ09NXFwuTUlDUk9TT0ZUXFwuL2csIFwiXCIpO1xuXHQvKiBQYXJ0IDMgU2VjdGlvbiA1LjggUmVmZXJlbmNlcyAqL1xuXHRmID0gZi5yZXBsYWNlKC9cXFsoKD86XFwuW0EtWl0rWzAtOV0rKSg/OjpcXC5bQS1aXStbMC05XSspPylcXF0vZywgZnVuY3Rpb24oJCQsICQxKSB7IHJldHVybiAkMS5yZXBsYWNlKC9cXC4vZyxcIlwiKTsgfSk7XG5cdC8qIFRPRE86IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoaXMgKi9cblx0ZiA9IGYucmVwbGFjZSgvXFxbLigjW0EtWl0qWz8hXSlcXF0vZywgXCIkMVwiKTtcblx0cmV0dXJuIGYucmVwbGFjZSgvWzt+XS9nLFwiLFwiKS5yZXBsYWNlKC9cXHwvZyxcIjtcIik7XG59XG5cbmZ1bmN0aW9uIGNzZl90b19vZHNfZm9ybXVsYShmKSB7XG5cdHZhciBvID0gXCJvZjo9XCIgKyBmLnJlcGxhY2UoY3JlZnJlZ2V4LCBcIiQxWy4kMiQzJDQkNV1cIikucmVwbGFjZSgvXFxdOlxcWy9nLFwiOlwiKTtcblx0LyogVE9ETzogc29tZXRoaW5nIG90aGVyIHRoYW4gdGhpcyAqL1xuXHRyZXR1cm4gby5yZXBsYWNlKC87L2csIFwifFwiKS5yZXBsYWNlKC8sL2csXCI7XCIpO1xufVxuXG5mdW5jdGlvbiBvZHNfdG9fY3NmXzNEKHIpIHtcblx0dmFyIGEgPSByLnNwbGl0KFwiOlwiKTtcblx0dmFyIHMgPSBhWzBdLnNwbGl0KFwiLlwiKVswXTtcblx0cmV0dXJuIFtzLCBhWzBdLnNwbGl0KFwiLlwiKVsxXSArIChhLmxlbmd0aCA+IDEgPyAoXCI6XCIgKyAoYVsxXS5zcGxpdChcIi5cIilbMV0gfHwgYVsxXS5zcGxpdChcIi5cIilbMF0pKSA6IFwiXCIpXTtcbn1cblxuZnVuY3Rpb24gY3NmX3RvX29kc18zRChyKSB7XG5cdHJldHVybiByLnJlcGxhY2UoL1xcLi8sXCIhXCIpO1xufVxuXG52YXIgc3RycyA9IHt9OyAvLyBzaGFyZWQgc3RyaW5nc1xudmFyIF9zc2ZvcHRzID0ge307IC8vIHNwcmVhZHNoZWV0IGZvcm1hdHRpbmcgb3B0aW9uc1xuXG5SRUxTLldTID0gW1xuXHRcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0XCIsXG5cdFwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvb2ZmaWNlRG9jdW1lbnQvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXRcIlxuXTtcblxuZnVuY3Rpb24gZ2V0X3NzdF9pZChzc3QsIHN0cikge1xuXHRmb3IodmFyIGkgPSAwLCBsZW4gPSBzc3QubGVuZ3RoOyBpIDwgbGVuOyArK2kpIGlmKHNzdFtpXS50ID09PSBzdHIpIHsgc3N0LkNvdW50ICsrOyByZXR1cm4gaTsgfVxuXHRzc3RbbGVuXSA9IHt0OnN0cn07IHNzdC5Db3VudCArKzsgc3N0LlVuaXF1ZSArKzsgcmV0dXJuIGxlbjtcbn1cblxuZnVuY3Rpb24gY29sX29ial93KEMsIGNvbCkge1xuXHR2YXIgcCA9ICh7bWluOkMrMSxtYXg6QysxfSk7XG5cdC8qIHdjaCAoY2hhcnMpLCB3cHggKHBpeGVscykgKi9cblx0dmFyIHdjaCA9IC0xO1xuXHRpZihjb2wuTURXKSBNRFcgPSBjb2wuTURXO1xuXHRpZihjb2wud2lkdGggIT0gbnVsbCkgcC5jdXN0b21XaWR0aCA9IDE7XG5cdGVsc2UgaWYoY29sLndweCAhPSBudWxsKSB3Y2ggPSBweDJjaGFyKGNvbC53cHgpO1xuXHRlbHNlIGlmKGNvbC53Y2ggIT0gbnVsbCkgd2NoID0gY29sLndjaDtcblx0aWYod2NoID4gLTEpIHsgcC53aWR0aCA9IGNoYXIyd2lkdGgod2NoKTsgcC5jdXN0b21XaWR0aCA9IDE7IH1cblx0ZWxzZSBpZihjb2wud2lkdGggIT0gbnVsbCkgcC53aWR0aCA9IGNvbC53aWR0aDtcblx0aWYoY29sLmhpZGRlbikgcC5oaWRkZW4gPSB0cnVlO1xuXHRyZXR1cm4gcDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdF9tYXJnaW5zKG1hcmdpbnMsIG1vZGUpIHtcblx0aWYoIW1hcmdpbnMpIHJldHVybjtcblx0dmFyIGRlZnMgPSBbMC43LCAwLjcsIDAuNzUsIDAuNzUsIDAuMywgMC4zXTtcblx0aWYobW9kZSA9PSAneGxtbCcpIGRlZnMgPSBbMSwgMSwgMSwgMSwgMC41LCAwLjVdO1xuXHRpZihtYXJnaW5zLmxlZnQgICA9PSBudWxsKSBtYXJnaW5zLmxlZnQgICA9IGRlZnNbMF07XG5cdGlmKG1hcmdpbnMucmlnaHQgID09IG51bGwpIG1hcmdpbnMucmlnaHQgID0gZGVmc1sxXTtcblx0aWYobWFyZ2lucy50b3AgICAgPT0gbnVsbCkgbWFyZ2lucy50b3AgICAgPSBkZWZzWzJdO1xuXHRpZihtYXJnaW5zLmJvdHRvbSA9PSBudWxsKSBtYXJnaW5zLmJvdHRvbSA9IGRlZnNbM107XG5cdGlmKG1hcmdpbnMuaGVhZGVyID09IG51bGwpIG1hcmdpbnMuaGVhZGVyID0gZGVmc1s0XTtcblx0aWYobWFyZ2lucy5mb290ZXIgPT0gbnVsbCkgbWFyZ2lucy5mb290ZXIgPSBkZWZzWzVdO1xufVxuXG5mdW5jdGlvbiBnZXRfY2VsbF9zdHlsZShzdHlsZXMsIGNlbGwsIG9wdHMpIHtcblx0dmFyIHogPSBvcHRzLnJldnNzZltjZWxsLnogIT0gbnVsbCA/IGNlbGwueiA6IFwiR2VuZXJhbFwiXTtcblx0dmFyIGkgPSAweDNjLCBsZW4gPSBzdHlsZXMubGVuZ3RoO1xuXHRpZih6ID09IG51bGwgJiYgb3B0cy5zc2YpIHtcblx0XHRmb3IoOyBpIDwgMHgxODg7ICsraSkgaWYob3B0cy5zc2ZbaV0gPT0gbnVsbCkge1xuXHRcdFx0U1NGLmxvYWQoY2VsbC56LCBpKTtcblx0XHRcdC8vICRGbG93SWdub3JlXG5cdFx0XHRvcHRzLnNzZltpXSA9IGNlbGwuejtcblx0XHRcdG9wdHMucmV2c3NmW2NlbGwuel0gPSB6ID0gaTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRmb3IoaSA9IDA7IGkgIT0gbGVuOyArK2kpIGlmKHN0eWxlc1tpXS5udW1GbXRJZCA9PT0geikgcmV0dXJuIGk7XG5cdHN0eWxlc1tsZW5dID0ge1xuXHRcdG51bUZtdElkOnosXG5cdFx0Zm9udElkOjAsXG5cdFx0ZmlsbElkOjAsXG5cdFx0Ym9yZGVySWQ6MCxcblx0XHR4ZklkOjAsXG5cdFx0YXBwbHlOdW1iZXJGb3JtYXQ6MVxuXHR9O1xuXHRyZXR1cm4gbGVuO1xufVxuXG5mdW5jdGlvbiBzYWZlX2Zvcm1hdChwLCBmbXRpZCwgZmlsbGlkLCBvcHRzLCB0aGVtZXMsIHN0eWxlcykge1xuXHRpZihwLnQgPT09ICd6JykgcmV0dXJuO1xuXHRpZihwLnQgPT09ICdkJyAmJiB0eXBlb2YgcC52ID09PSAnc3RyaW5nJykgcC52ID0gcGFyc2VEYXRlKHAudik7XG5cdHRyeSB7XG5cdFx0aWYob3B0cy5jZWxsTkYpIHAueiA9IFNTRi5fdGFibGVbZm10aWRdO1xuXHR9IGNhdGNoKGUpIHsgaWYob3B0cy5XVEYpIHRocm93IGU7IH1cblx0aWYoIW9wdHMgfHwgb3B0cy5jZWxsVGV4dCAhPT0gZmFsc2UpIHRyeSB7XG5cdFx0aWYocC50ID09PSAnZScpIHAudyA9IHAudyB8fCBCRXJyW3Audl07XG5cdFx0ZWxzZSBpZihmbXRpZCA9PT0gMCkge1xuXHRcdFx0aWYocC50ID09PSAnbicpIHtcblx0XHRcdFx0aWYoKHAudnwwKSA9PT0gcC52KSBwLncgPSBTU0YuX2dlbmVyYWxfaW50KHAudik7XG5cdFx0XHRcdGVsc2UgcC53ID0gU1NGLl9nZW5lcmFsX251bShwLnYpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihwLnQgPT09ICdkJykge1xuXHRcdFx0XHR2YXIgZGQgPSBkYXRlbnVtKHAudik7XG5cdFx0XHRcdGlmKChkZHwwKSA9PT0gZGQpIHAudyA9IFNTRi5fZ2VuZXJhbF9pbnQoZGQpO1xuXHRcdFx0XHRlbHNlIHAudyA9IFNTRi5fZ2VuZXJhbF9udW0oZGQpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihwLnYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiXCI7XG5cdFx0XHRlbHNlIHAudyA9IFNTRi5fZ2VuZXJhbChwLnYsX3NzZm9wdHMpO1xuXHRcdH1cblx0XHRlbHNlIGlmKHAudCA9PT0gJ2QnKSBwLncgPSBTU0YuZm9ybWF0KGZtdGlkLGRhdGVudW0ocC52KSxfc3Nmb3B0cyk7XG5cdFx0ZWxzZSBwLncgPSBTU0YuZm9ybWF0KGZtdGlkLHAudixfc3Nmb3B0cyk7XG5cdH0gY2F0Y2goZSkgeyBpZihvcHRzLldURikgdGhyb3cgZTsgfVxuXHRpZighb3B0cy5jZWxsU3R5bGVzKSByZXR1cm47XG5cdGlmKGZpbGxpZCAhPSBudWxsKSB0cnkge1xuXHRcdHAucyA9IHN0eWxlcy5GaWxsc1tmaWxsaWRdO1xuXHRcdGlmIChwLnMuZmdDb2xvciAmJiBwLnMuZmdDb2xvci50aGVtZSAmJiAhcC5zLmZnQ29sb3IucmdiKSB7XG5cdFx0XHRwLnMuZmdDb2xvci5yZ2IgPSByZ2JfdGludCh0aGVtZXMudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbcC5zLmZnQ29sb3IudGhlbWVdLnJnYiwgcC5zLmZnQ29sb3IudGludCB8fCAwKTtcblx0XHRcdGlmKG9wdHMuV1RGKSBwLnMuZmdDb2xvci5yYXdfcmdiID0gdGhlbWVzLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW3Aucy5mZ0NvbG9yLnRoZW1lXS5yZ2I7XG5cdFx0fVxuXHRcdGlmIChwLnMuYmdDb2xvciAmJiBwLnMuYmdDb2xvci50aGVtZSkge1xuXHRcdFx0cC5zLmJnQ29sb3IucmdiID0gcmdiX3RpbnQodGhlbWVzLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW3Aucy5iZ0NvbG9yLnRoZW1lXS5yZ2IsIHAucy5iZ0NvbG9yLnRpbnQgfHwgMCk7XG5cdFx0XHRpZihvcHRzLldURikgcC5zLmJnQ29sb3IucmF3X3JnYiA9IHRoZW1lcy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtwLnMuYmdDb2xvci50aGVtZV0ucmdiO1xuXHRcdH1cblx0fSBjYXRjaChlKSB7IGlmKG9wdHMuV1RGICYmIHN0eWxlcy5GaWxscykgdGhyb3cgZTsgfVxufVxuZnVuY3Rpb24gcGFyc2Vfd3NfeG1sX2RpbSh3cywgcykge1xuXHR2YXIgZCA9IHNhZmVfZGVjb2RlX3JhbmdlKHMpO1xuXHRpZihkLnMucjw9ZC5lLnIgJiYgZC5zLmM8PWQuZS5jICYmIGQucy5yPj0wICYmIGQucy5jPj0wKSB3c1tcIiFyZWZcIl0gPSBlbmNvZGVfcmFuZ2UoZCk7XG59XG52YXIgbWVyZ2VjcmVnZXggPSAvPCg/OlxcdzopP21lcmdlQ2VsbCByZWY9XCJbQS1aMC05Ol0rXCJcXHMqW1xcL10/Pi9nO1xudmFyIHNoZWV0ZGF0YXJlZ2V4ID0gLzwoPzpcXHcrOik/c2hlZXREYXRhPihbXFxzXFxTXSopPFxcLyg/Olxcdys6KT9zaGVldERhdGE+LztcbnZhciBobGlua3JlZ2V4ID0gLzwoPzpcXHc6KT9oeXBlcmxpbmsgW14+XSo+L21nO1xudmFyIGRpbXJlZ2V4ID0gL1wiKFxcdyo6XFx3KilcIi87XG52YXIgY29scmVnZXggPSAvPCg/OlxcdzopP2NvbFtePl0qW1xcL10/Pi9nO1xudmFyIGFmcmVnZXggPSAvPCg/OlxcdzopP2F1dG9GaWx0ZXJbXj5dKihbXFwvXXw+KFtcXHNcXFNdKik8XFwvKD86XFx3Oik/YXV0b0ZpbHRlcik+L2c7XG52YXIgbWFyZ2lucmVnZXg9IC88KD86XFx3Oik/cGFnZU1hcmdpbnNbXj5dKlxcLz4vZztcbnZhciBzaGVldHBycmVnZXggPSAvPCg/OlxcdzopP3NoZWV0UHIoPzpbXj5hLXpdW14+XSopP1xcLz4vO1xudmFyIHN2c3JlZ2V4ID0gLzwoPzpcXHc6KT9zaGVldFZpZXdzW14+XSooPzpbXFwvXXw+KFtcXHNcXFNdKik8XFwvKD86XFx3Oik/c2hlZXRWaWV3cyk+Lztcbi8qIDE4LjMgV29ya3NoZWV0cyAqL1xuZnVuY3Rpb24gcGFyc2Vfd3NfeG1sKGRhdGEsIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKSB7XG5cdGlmKCFkYXRhKSByZXR1cm4gZGF0YTtcblx0aWYoREVOU0UgIT0gbnVsbCAmJiBvcHRzLmRlbnNlID09IG51bGwpIG9wdHMuZGVuc2UgPSBERU5TRTtcblxuXHQvKiAxOC4zLjEuOTkgd29ya3NoZWV0IENUX1dvcmtzaGVldCAqL1xuXHR2YXIgcyA9IG9wdHMuZGVuc2UgPyAoW10pIDogKHt9KTtcblx0dmFyIHJlZmd1ZXNzID0gKHtzOiB7cjoyMDAwMDAwLCBjOjIwMDAwMDB9LCBlOiB7cjowLCBjOjB9IH0pO1xuXG5cdHZhciBkYXRhMSA9IFwiXCIsIGRhdGEyID0gXCJcIjtcblx0dmFyIG10Y2ggPSBkYXRhLm1hdGNoKHNoZWV0ZGF0YXJlZ2V4KTtcblx0aWYobXRjaCkge1xuXHRcdGRhdGExID0gZGF0YS5zbGljZSgwLCBtdGNoLmluZGV4KTtcblx0XHRkYXRhMiA9IGRhdGEuc2xpY2UobXRjaC5pbmRleCArIG10Y2hbMF0ubGVuZ3RoKTtcblx0fSBlbHNlIGRhdGExID0gZGF0YTIgPSBkYXRhO1xuXG5cdC8qIDE4LjMuMS44MiBzaGVldFByIENUX1NoZWV0UHIgKi9cblx0dmFyIHNoZWV0UHIgPSBkYXRhMS5tYXRjaChzaGVldHBycmVnZXgpO1xuXHRpZihzaGVldFByKSBwYXJzZV93c194bWxfc2hlZXRwcihzaGVldFByWzBdLCBzLCB3YiwgaWR4KTtcblxuXHQvKiAxOC4zLjEuMzUgZGltZW5zaW9uIENUX1NoZWV0RGltZW5zaW9uICovXG5cdC8vICRGbG93SWdub3JlXG5cdHZhciByaWR4ID0gKGRhdGExLm1hdGNoKC88KD86XFx3KjopP2RpbWVuc2lvbi8pfHx7aW5kZXg6LTF9KS5pbmRleDtcblx0aWYocmlkeCA+IDApIHtcblx0XHR2YXIgcmVmID0gZGF0YTEuc2xpY2UocmlkeCxyaWR4KzUwKS5tYXRjaChkaW1yZWdleCk7XG5cdFx0aWYocmVmKSBwYXJzZV93c194bWxfZGltKHMsIHJlZlsxXSk7XG5cdH1cblxuXHQvKiAxOC4zLjEuODggc2hlZXRWaWV3cyBDVF9TaGVldFZpZXdzICovXG5cdHZhciBzdnMgPSBkYXRhMS5tYXRjaChzdnNyZWdleCk7XG5cdGlmKHN2cyAmJiBzdnNbMV0pIHBhcnNlX3dzX3htbF9zaGVldHZpZXdzKHN2c1sxXSwgd2IpO1xuXG5cdC8qIDE4LjMuMS4xNyBjb2xzIENUX0NvbHMgKi9cblx0dmFyIGNvbHVtbnMgPSBbXTtcblx0aWYob3B0cy5jZWxsU3R5bGVzKSB7XG5cdFx0LyogMTguMy4xLjEzIGNvbCBDVF9Db2wgKi9cblx0XHR2YXIgY29scyA9IGRhdGExLm1hdGNoKGNvbHJlZ2V4KTtcblx0XHRpZihjb2xzKSBwYXJzZV93c194bWxfY29scyhjb2x1bW5zLCBjb2xzKTtcblx0fVxuXG5cdC8qIDE4LjMuMS44MCBzaGVldERhdGEgQ1RfU2hlZXREYXRhID8gKi9cblx0aWYobXRjaCkgcGFyc2Vfd3NfeG1sX2RhdGEobXRjaFsxXSwgcywgb3B0cywgcmVmZ3Vlc3MsIHRoZW1lcywgc3R5bGVzKTtcblxuXHQvKiAxOC4zLjEuMiAgYXV0b0ZpbHRlciBDVF9BdXRvRmlsdGVyICovXG5cdHZhciBhZmlsdGVyID0gZGF0YTIubWF0Y2goYWZyZWdleCk7XG5cdGlmKGFmaWx0ZXIpIHNbJyFhdXRvZmlsdGVyJ10gPSBwYXJzZV93c194bWxfYXV0b2ZpbHRlcihhZmlsdGVyWzBdKTtcblxuXHQvKiAxOC4zLjEuNTUgbWVyZ2VDZWxscyBDVF9NZXJnZUNlbGxzICovXG5cdHZhciBtZXJnZXMgPSBbXTtcblx0dmFyIF9tZXJnZSA9IGRhdGEyLm1hdGNoKG1lcmdlY3JlZ2V4KTtcblx0aWYoX21lcmdlKSBmb3IocmlkeCA9IDA7IHJpZHggIT0gX21lcmdlLmxlbmd0aDsgKytyaWR4KVxuXHRcdG1lcmdlc1tyaWR4XSA9IHNhZmVfZGVjb2RlX3JhbmdlKF9tZXJnZVtyaWR4XS5zbGljZShfbWVyZ2VbcmlkeF0uaW5kZXhPZihcIlxcXCJcIikrMSkpO1xuXG5cdC8qIDE4LjMuMS40OCBoeXBlcmxpbmtzIENUX0h5cGVybGlua3MgKi9cblx0dmFyIGhsaW5rID0gZGF0YTIubWF0Y2goaGxpbmtyZWdleCk7XG5cdGlmKGhsaW5rKSBwYXJzZV93c194bWxfaGxpbmtzKHMsIGhsaW5rLCByZWxzKTtcblxuXHQvKiAxOC4zLjEuNjIgcGFnZU1hcmdpbnMgQ1RfUGFnZU1hcmdpbnMgKi9cblx0dmFyIG1hcmdpbnMgPSBkYXRhMi5tYXRjaChtYXJnaW5yZWdleCk7XG5cdGlmKG1hcmdpbnMpIHNbJyFtYXJnaW5zJ10gPSBwYXJzZV93c194bWxfbWFyZ2lucyhwYXJzZXhtbHRhZyhtYXJnaW5zWzBdKSk7XG5cblx0aWYoIXNbXCIhcmVmXCJdICYmIHJlZmd1ZXNzLmUuYyA+PSByZWZndWVzcy5zLmMgJiYgcmVmZ3Vlc3MuZS5yID49IHJlZmd1ZXNzLnMucikgc1tcIiFyZWZcIl0gPSBlbmNvZGVfcmFuZ2UocmVmZ3Vlc3MpO1xuXHRpZihvcHRzLnNoZWV0Um93cyA+IDAgJiYgc1tcIiFyZWZcIl0pIHtcblx0XHR2YXIgdG1wcmVmID0gc2FmZV9kZWNvZGVfcmFuZ2Uoc1tcIiFyZWZcIl0pO1xuXHRcdGlmKG9wdHMuc2hlZXRSb3dzIDwgK3RtcHJlZi5lLnIpIHtcblx0XHRcdHRtcHJlZi5lLnIgPSBvcHRzLnNoZWV0Um93cyAtIDE7XG5cdFx0XHRpZih0bXByZWYuZS5yID4gcmVmZ3Vlc3MuZS5yKSB0bXByZWYuZS5yID0gcmVmZ3Vlc3MuZS5yO1xuXHRcdFx0aWYodG1wcmVmLmUuciA8IHRtcHJlZi5zLnIpIHRtcHJlZi5zLnIgPSB0bXByZWYuZS5yO1xuXHRcdFx0aWYodG1wcmVmLmUuYyA+IHJlZmd1ZXNzLmUuYykgdG1wcmVmLmUuYyA9IHJlZmd1ZXNzLmUuYztcblx0XHRcdGlmKHRtcHJlZi5lLmMgPCB0bXByZWYucy5jKSB0bXByZWYucy5jID0gdG1wcmVmLmUuYztcblx0XHRcdHNbXCIhZnVsbHJlZlwiXSA9IHNbXCIhcmVmXCJdO1xuXHRcdFx0c1tcIiFyZWZcIl0gPSBlbmNvZGVfcmFuZ2UodG1wcmVmKTtcblx0XHR9XG5cdH1cblx0aWYoY29sdW1ucy5sZW5ndGggPiAwKSBzW1wiIWNvbHNcIl0gPSBjb2x1bW5zO1xuXHRpZihtZXJnZXMubGVuZ3RoID4gMCkgc1tcIiFtZXJnZXNcIl0gPSBtZXJnZXM7XG5cdHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiB3cml0ZV93c194bWxfbWVyZ2VzKG1lcmdlcykge1xuXHRpZihtZXJnZXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcblx0dmFyIG8gPSAnPG1lcmdlQ2VsbHMgY291bnQ9XCInICsgbWVyZ2VzLmxlbmd0aCArICdcIj4nO1xuXHRmb3IodmFyIGkgPSAwOyBpICE9IG1lcmdlcy5sZW5ndGg7ICsraSkgbyArPSAnPG1lcmdlQ2VsbCByZWY9XCInICsgZW5jb2RlX3JhbmdlKG1lcmdlc1tpXSkgKyAnXCIvPic7XG5cdHJldHVybiBvICsgJzwvbWVyZ2VDZWxscz4nO1xufVxuXG4vKiAxOC4zLjEuODItMyBzaGVldFByIENUX0NoYXJ0c2hlZXRQciAvIENUX1NoZWV0UHIgKi9cbmZ1bmN0aW9uIHBhcnNlX3dzX3htbF9zaGVldHByKHNoZWV0UHIsIHMsIHdiLCBpZHgpIHtcblx0dmFyIGRhdGEgPSBwYXJzZXhtbHRhZyhzaGVldFByKTtcblx0aWYoIXdiLlNoZWV0c1tpZHhdKSB3Yi5TaGVldHNbaWR4XSA9IHt9O1xuXHRpZihkYXRhLmNvZGVOYW1lKSB3Yi5TaGVldHNbaWR4XS5Db2RlTmFtZSA9IGRhdGEuY29kZU5hbWU7XG59XG5cbi8qIDE4LjMuMS44NSBzaGVldFByb3RlY3Rpb24gQ1RfU2hlZXRQcm90ZWN0aW9uICovXG5mdW5jdGlvbiB3cml0ZV93c194bWxfcHJvdGVjdGlvbihzcCkge1xuXHQvLyBhbGdvcml0aG1OYW1lLCBoYXNoVmFsdWUsIHNhbHRWYWx1ZSwgc3BpbkNvdW50cGFzc3dvcmRcblx0dmFyIG8gPSAoe3NoZWV0OjF9KTtcblx0dmFyIGRlZmZhbHNlID0gW1wib2JqZWN0c1wiLCBcInNjZW5hcmlvc1wiLCBcInNlbGVjdExvY2tlZENlbGxzXCIsIFwic2VsZWN0VW5sb2NrZWRDZWxsc1wiXTtcblx0dmFyIGRlZnRydWUgPSBbXG5cdFx0XCJmb3JtYXRDb2x1bW5zXCIsIFwiZm9ybWF0Um93c1wiLCBcImZvcm1hdENlbGxzXCIsXG5cdFx0XCJpbnNlcnRDb2x1bW5zXCIsIFwiaW5zZXJ0Um93c1wiLCBcImluc2VydEh5cGVybGlua3NcIixcblx0XHRcImRlbGV0ZUNvbHVtbnNcIiwgXCJkZWxldGVSb3dzXCIsXG5cdFx0XCJzb3J0XCIsIFwiYXV0b0ZpbHRlclwiLCBcInBpdm90VGFibGVzXCJcblx0XTtcblx0ZGVmZmFsc2UuZm9yRWFjaChmdW5jdGlvbihuKSB7IGlmKHNwW25dICE9IG51bGwgJiYgc3Bbbl0pIG9bbl0gPSBcIjFcIjsgfSk7XG5cdGRlZnRydWUuZm9yRWFjaChmdW5jdGlvbihuKSB7IGlmKHNwW25dICE9IG51bGwgJiYgIXNwW25dKSBvW25dID0gXCIwXCI7IH0pO1xuXHQvKiBUT0RPOiBhbGdvcml0aG0gKi9cblx0aWYoc3AucGFzc3dvcmQpIG8ucGFzc3dvcmQgPSBjcnlwdG9fQ3JlYXRlUGFzc3dvcmRWZXJpZmllcl9NZXRob2QxKHNwLnBhc3N3b3JkKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuIHdyaXRleHRhZygnc2hlZXRQcm90ZWN0aW9uJywgbnVsbCwgbyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX3dzX3htbF9obGlua3MocywgZGF0YSwgcmVscykge1xuXHR2YXIgZGVuc2UgPSBBcnJheS5pc0FycmF5KHMpO1xuXHRmb3IodmFyIGkgPSAwOyBpICE9IGRhdGEubGVuZ3RoOyArK2kpIHtcblx0XHR2YXIgdmFsID0gcGFyc2V4bWx0YWcodXRmOHJlYWQoZGF0YVtpXSksIHRydWUpO1xuXHRcdGlmKCF2YWwucmVmKSByZXR1cm47XG5cdFx0dmFyIHJlbCA9ICgocmVscyB8fCB7fSlbJyFpZCddfHxbXSlbdmFsLmlkXTtcblx0XHRpZihyZWwpIHtcblx0XHRcdHZhbC5UYXJnZXQgPSByZWwuVGFyZ2V0O1xuXHRcdFx0aWYodmFsLmxvY2F0aW9uKSB2YWwuVGFyZ2V0ICs9IFwiI1wiK3ZhbC5sb2NhdGlvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsLlRhcmdldCA9IFwiI1wiICsgdmFsLmxvY2F0aW9uO1xuXHRcdFx0cmVsID0ge1RhcmdldDogdmFsLlRhcmdldCwgVGFyZ2V0TW9kZTogJ0ludGVybmFsJ307XG5cdFx0fVxuXHRcdHZhbC5SZWwgPSByZWw7XG5cdFx0aWYodmFsLnRvb2x0aXApIHsgdmFsLlRvb2x0aXAgPSB2YWwudG9vbHRpcDsgZGVsZXRlIHZhbC50b29sdGlwOyB9XG5cdFx0dmFyIHJuZyA9IHNhZmVfZGVjb2RlX3JhbmdlKHZhbC5yZWYpO1xuXHRcdGZvcih2YXIgUj1ybmcucy5yO1I8PXJuZy5lLnI7KytSKSBmb3IodmFyIEM9cm5nLnMuYztDPD1ybmcuZS5jOysrQykge1xuXHRcdFx0dmFyIGFkZHIgPSBlbmNvZGVfY2VsbCh7YzpDLHI6Un0pO1xuXHRcdFx0aWYoZGVuc2UpIHtcblx0XHRcdFx0aWYoIXNbUl0pIHNbUl0gPSBbXTtcblx0XHRcdFx0aWYoIXNbUl1bQ10pIHNbUl1bQ10gPSB7dDpcInpcIix2OnVuZGVmaW5lZH07XG5cdFx0XHRcdHNbUl1bQ10ubCA9IHZhbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKCFzW2FkZHJdKSBzW2FkZHJdID0ge3Q6XCJ6XCIsdjp1bmRlZmluZWR9O1xuXHRcdFx0XHRzW2FkZHJdLmwgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlX3dzX3htbF9tYXJnaW5zKG1hcmdpbikge1xuXHR2YXIgbyA9IHt9O1xuXHRbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJoZWFkZXJcIiwgXCJmb290ZXJcIl0uZm9yRWFjaChmdW5jdGlvbihrKSB7XG5cdFx0aWYobWFyZ2luW2tdKSBvW2tdID0gcGFyc2VGbG9hdChtYXJnaW5ba10pO1xuXHR9KTtcblx0cmV0dXJuIG87XG59XG5mdW5jdGlvbiB3cml0ZV93c194bWxfbWFyZ2lucyhtYXJnaW4pIHtcblx0ZGVmYXVsdF9tYXJnaW5zKG1hcmdpbik7XG5cdHJldHVybiB3cml0ZXh0YWcoJ3BhZ2VNYXJnaW5zJywgbnVsbCwgbWFyZ2luKTtcbn1cblxuZnVuY3Rpb24gcGFyc2Vfd3NfeG1sX2NvbHMoY29sdW1ucywgY29scykge1xuXHR2YXIgc2VlbmNvbCA9IGZhbHNlO1xuXHRmb3IodmFyIGNvbGkgPSAwOyBjb2xpICE9IGNvbHMubGVuZ3RoOyArK2NvbGkpIHtcblx0XHR2YXIgY29sbCA9IHBhcnNleG1sdGFnKGNvbHNbY29saV0sIHRydWUpO1xuXHRcdGlmKGNvbGwuaGlkZGVuKSBjb2xsLmhpZGRlbiA9IHBhcnNleG1sYm9vbChjb2xsLmhpZGRlbik7XG5cdFx0dmFyIGNvbG09cGFyc2VJbnQoY29sbC5taW4sIDEwKS0xLCBjb2xNPXBhcnNlSW50KGNvbGwubWF4LDEwKS0xO1xuXHRcdGRlbGV0ZSBjb2xsLm1pbjsgZGVsZXRlIGNvbGwubWF4OyBjb2xsLndpZHRoID0gK2NvbGwud2lkdGg7XG5cdFx0aWYoIXNlZW5jb2wgJiYgY29sbC53aWR0aCkgeyBzZWVuY29sID0gdHJ1ZTsgZmluZF9tZHdfY29sdyhjb2xsLndpZHRoKTsgfVxuXHRcdHByb2Nlc3NfY29sKGNvbGwpO1xuXHRcdHdoaWxlKGNvbG0gPD0gY29sTSkgY29sdW1uc1tjb2xtKytdID0gZHVwKGNvbGwpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHdyaXRlX3dzX3htbF9jb2xzKHdzLCBjb2xzKSB7XG5cdHZhciBvID0gW1wiPGNvbHM+XCJdLCBjb2w7XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gY29scy5sZW5ndGg7ICsraSkge1xuXHRcdGlmKCEoY29sID0gY29sc1tpXSkpIGNvbnRpbnVlO1xuXHRcdG9bby5sZW5ndGhdID0gKHdyaXRleHRhZygnY29sJywgbnVsbCwgY29sX29ial93KGksIGNvbCkpKTtcblx0fVxuXHRvW28ubGVuZ3RoXSA9IFwiPC9jb2xzPlwiO1xuXHRyZXR1cm4gby5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBwYXJzZV93c194bWxfYXV0b2ZpbHRlcihkYXRhKSB7XG5cdHZhciBvID0geyByZWY6IChkYXRhLm1hdGNoKC9yZWY9XCIoW15cIl0qKVwiLyl8fFtdKVsxXX07XG5cdHJldHVybiBvO1xufVxuZnVuY3Rpb24gd3JpdGVfd3NfeG1sX2F1dG9maWx0ZXIoZGF0YSkge1xuXHRyZXR1cm4gd3JpdGV4dGFnKFwiYXV0b0ZpbHRlclwiLCBudWxsLCB7cmVmOmRhdGEucmVmfSk7XG59XG5cbi8qIDE4LjMuMS44OCBzaGVldFZpZXdzIENUX1NoZWV0Vmlld3MgKi9cbi8qIDE4LjMuMS44NyBzaGVldFZpZXcgQ1RfU2hlZXRWaWV3ICovXG52YXIgc3ZpZXdyZWdleCA9IC88KD86XFx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cXC8+LztcbmZ1bmN0aW9uIHBhcnNlX3dzX3htbF9zaGVldHZpZXdzKGRhdGEsIHdiKSB7XG5cdChkYXRhLm1hdGNoKHN2aWV3cmVnZXgpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyKSB7XG5cdFx0dmFyIHRhZyA9IHBhcnNleG1sdGFnKHIpO1xuXHRcdGlmKHBhcnNleG1sYm9vbCh0YWcucmlnaHRUb0xlZnQpKSB7XG5cdFx0XHRpZighd2IuVmlld3MpIHdiLlZpZXdzID0gW3t9XTtcblx0XHRcdGlmKCF3Yi5WaWV3c1swXSkgd2IuVmlld3NbMF0gPSB7fTtcblx0XHRcdHdiLlZpZXdzWzBdLlJUTCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIHdyaXRlX3dzX3htbF9zaGVldHZpZXdzKHdzLCBvcHRzLCBpZHgsIHdiKSB7XG5cdHZhciBzdmlldyA9IHt3b3JrYm9va1ZpZXdJZDpcIjBcIn07XG5cdC8vICRGbG93SWdub3JlXG5cdGlmKCAoKCh3Ynx8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKVswXSApIHN2aWV3LnJpZ2h0VG9MZWZ0ID0gd2IuV29ya2Jvb2suVmlld3NbMF0uUlRMID8gXCIxXCIgOiBcIjBcIjtcblx0cmV0dXJuIHdyaXRleHRhZyhcInNoZWV0Vmlld3NcIiwgd3JpdGV4dGFnKFwic2hlZXRWaWV3XCIsIG51bGwsIHN2aWV3KSwge30pO1xufVxuXG5mdW5jdGlvbiB3cml0ZV93c194bWxfY2VsbChjZWxsLCByZWYsIHdzLCBvcHRzKSB7XG5cdGlmKGNlbGwudiA9PT0gdW5kZWZpbmVkICYmIGNlbGwuZiA9PT0gdW5kZWZpbmVkIHx8IGNlbGwudCA9PT0gJ3onKSByZXR1cm4gXCJcIjtcblx0dmFyIHZ2ID0gXCJcIjtcblx0dmFyIG9sZHQgPSBjZWxsLnQsIG9sZHYgPSBjZWxsLnY7XG5cdHN3aXRjaChjZWxsLnQpIHtcblx0XHRjYXNlICdiJzogdnYgPSBjZWxsLnYgPyBcIjFcIiA6IFwiMFwiOyBicmVhaztcblx0XHRjYXNlICduJzogdnYgPSAnJytjZWxsLnY7IGJyZWFrO1xuXHRcdGNhc2UgJ2UnOiB2diA9IEJFcnJbY2VsbC52XTsgYnJlYWs7XG5cdFx0Y2FzZSAnZCc6XG5cdFx0XHRpZihvcHRzLmNlbGxEYXRlcykgdnYgPSBwYXJzZURhdGUoY2VsbC52LCAtMSkudG9JU09TdHJpbmcoKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjZWxsID0gZHVwKGNlbGwpO1xuXHRcdFx0XHRjZWxsLnQgPSAnbic7XG5cdFx0XHRcdHZ2ID0gJycrKGNlbGwudiA9IGRhdGVudW0ocGFyc2VEYXRlKGNlbGwudikpKTtcblx0XHRcdH1cblx0XHRcdGlmKHR5cGVvZiBjZWxsLnogPT09ICd1bmRlZmluZWQnKSBjZWxsLnogPSBTU0YuX3RhYmxlWzE0XTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHZ2ID0gY2VsbC52OyBicmVhaztcblx0fVxuXHR2YXIgdiA9IHdyaXRldGFnKCd2JywgZXNjYXBleG1sKHZ2KSksIG8gPSAoe3I6cmVmfSk7XG5cdC8qIFRPRE86IGNlbGwgc3R5bGUgKi9cblx0dmFyIG9zID0gZ2V0X2NlbGxfc3R5bGUob3B0cy5jZWxsWGZzLCBjZWxsLCBvcHRzKTtcblx0aWYob3MgIT09IDApIG8ucyA9IG9zO1xuXHRzd2l0Y2goY2VsbC50KSB7XG5cdFx0Y2FzZSAnbic6IGJyZWFrO1xuXHRcdGNhc2UgJ2QnOiBvLnQgPSBcImRcIjsgYnJlYWs7XG5cdFx0Y2FzZSAnYic6IG8udCA9IFwiYlwiOyBicmVhaztcblx0XHRjYXNlICdlJzogby50ID0gXCJlXCI7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IGlmKGNlbGwudiA9PSBudWxsKSB7IGRlbGV0ZSBjZWxsLnQ7IGJyZWFrOyB9XG5cdFx0XHRpZihvcHRzLmJvb2tTU1QpIHtcblx0XHRcdFx0diA9IHdyaXRldGFnKCd2JywgJycrZ2V0X3NzdF9pZChvcHRzLlN0cmluZ3MsIGNlbGwudikpO1xuXHRcdFx0XHRvLnQgPSBcInNcIjsgYnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRvLnQgPSBcInN0clwiOyBicmVhaztcblx0fVxuXHRpZihjZWxsLnQgIT0gb2xkdCkgeyBjZWxsLnQgPSBvbGR0OyBjZWxsLnYgPSBvbGR2OyB9XG5cdGlmKGNlbGwuZikge1xuXHRcdHZhciBmZiA9IGNlbGwuRiAmJiBjZWxsLkYuc2xpY2UoMCwgcmVmLmxlbmd0aCkgPT0gcmVmID8ge3Q6XCJhcnJheVwiLCByZWY6Y2VsbC5GfSA6IG51bGw7XG5cdFx0diA9IHdyaXRleHRhZygnZicsIGVzY2FwZXhtbChjZWxsLmYpLCBmZikgKyAoY2VsbC52ICE9IG51bGwgPyB2IDogXCJcIik7XG5cdH1cblx0aWYoY2VsbC5sKSB3c1snIWxpbmtzJ10ucHVzaChbcmVmLCBjZWxsLmxdKTtcblx0aWYoY2VsbC5jKSB3c1snIWNvbW1lbnRzJ10ucHVzaChbcmVmLCBjZWxsLmNdKTtcblx0cmV0dXJuIHdyaXRleHRhZygnYycsIHYsIG8pO1xufVxuXG52YXIgcGFyc2Vfd3NfeG1sX2RhdGEgPSAoZnVuY3Rpb24oKSB7XG5cdHZhciBjZWxscmVnZXggPSAvPCg/Olxcdys6KT9jWyA+XS8sIHJvd3JlZ2V4ID0gLzxcXC8oPzpcXHcrOik/cm93Pi87XG5cdHZhciBycmVnZXggPSAvcj1bXCInXShbXlwiJ10qKVtcIiddLywgaXNyZWdleCA9IC88KD86XFx3KzopP2lzPihbXFxTXFxzXSo/KTxcXC8oPzpcXHcrOik/aXM+Lztcblx0dmFyIHJlZnJlZ2V4ID0gL3JlZj1bXCInXShbXlwiJ10qKVtcIiddLztcblx0dmFyIG1hdGNoX3YgPSBtYXRjaHRhZyhcInZcIiksIG1hdGNoX2YgPSBtYXRjaHRhZyhcImZcIik7XG5cbnJldHVybiBmdW5jdGlvbiBwYXJzZV93c194bWxfZGF0YShzZGF0YSwgcywgb3B0cywgZ3Vlc3MsIHRoZW1lcywgc3R5bGVzKSB7XG5cdHZhciByaSA9IDAsIHggPSBcIlwiLCBjZWxscyA9IFtdLCBjcmVmID0gW10sIGlkeD0wLCBpPTAsIGNjPTAsIGQ9XCJcIiwgcDtcblx0dmFyIHRhZywgdGFnciA9IDAsIHRhZ2MgPSAwO1xuXHR2YXIgc3N0ciwgZnRhZztcblx0dmFyIGZtdGlkID0gMCwgZmlsbGlkID0gMDtcblx0dmFyIGRvX2Zvcm1hdCA9IEFycmF5LmlzQXJyYXkoc3R5bGVzLkNlbGxYZiksIGNmO1xuXHR2YXIgYXJyYXlmID0gW107XG5cdHZhciBzaGFyZWRmID0gW107XG5cdHZhciBkZW5zZSA9IEFycmF5LmlzQXJyYXkocyk7XG5cdHZhciByb3dzID0gW10sIHJvd29iaiA9IHt9LCByb3dyaXRlID0gZmFsc2U7XG5cdGZvcih2YXIgbWFyciA9IHNkYXRhLnNwbGl0KHJvd3JlZ2V4KSwgbXQgPSAwLCBtYXJybGVuID0gbWFyci5sZW5ndGg7IG10ICE9IG1hcnJsZW47ICsrbXQpIHtcblx0XHR4ID0gbWFyclttdF0udHJpbSgpO1xuXHRcdHZhciB4bGVuID0geC5sZW5ndGg7XG5cdFx0aWYoeGxlbiA9PT0gMCkgY29udGludWU7XG5cblx0XHQvKiAxOC4zLjEuNzMgcm93IENUX1JvdyAqL1xuXHRcdGZvcihyaSA9IDA7IHJpIDwgeGxlbjsgKytyaSkgaWYoeC5jaGFyQ29kZUF0KHJpKSA9PT0gNjIpIGJyZWFrOyArK3JpO1xuXHRcdHRhZyA9IHBhcnNleG1sdGFnKHguc2xpY2UoMCxyaSksIHRydWUpO1xuXHRcdHRhZ3IgPSB0YWcuciAhPSBudWxsID8gcGFyc2VJbnQodGFnLnIsIDEwKSA6IHRhZ3IrMTsgdGFnYyA9IC0xO1xuXHRcdGlmKG9wdHMuc2hlZXRSb3dzICYmIG9wdHMuc2hlZXRSb3dzIDwgdGFncikgY29udGludWU7XG5cdFx0aWYoZ3Vlc3Mucy5yID4gdGFnciAtIDEpIGd1ZXNzLnMuciA9IHRhZ3IgLSAxO1xuXHRcdGlmKGd1ZXNzLmUuciA8IHRhZ3IgLSAxKSBndWVzcy5lLnIgPSB0YWdyIC0gMTtcblxuXHRcdGlmKG9wdHMgJiYgb3B0cy5jZWxsU3R5bGVzKSB7XG5cdFx0XHRyb3dvYmogPSB7fTsgcm93cml0ZSA9IGZhbHNlO1xuXHRcdFx0aWYodGFnLmh0KSB7IHJvd3JpdGUgPSB0cnVlOyByb3dvYmouaHB0ID0gcGFyc2VGbG9hdCh0YWcuaHQpOyByb3dvYmouaHB4ID0gcHQycHgocm93b2JqLmhwdCk7IH1cblx0XHRcdGlmKHRhZy5oaWRkZW4gPT0gXCIxXCIpIHsgcm93cml0ZSA9IHRydWU7IHJvd29iai5oaWRkZW4gPSB0cnVlOyB9XG5cdFx0XHRpZih0YWcub3V0bGluZUxldmVsICE9IG51bGwpIHsgcm93cml0ZSA9IHRydWU7IHJvd29iai5sZXZlbCA9ICt0YWcub3V0bGluZUxldmVsOyB9XG5cdFx0XHRpZihyb3dyaXRlKSByb3dzW3RhZ3ItMV0gPSByb3dvYmo7XG5cdFx0fVxuXG5cdFx0LyogMTguMy4xLjQgYyBDVF9DZWxsICovXG5cdFx0Y2VsbHMgPSB4LnNsaWNlKHJpKS5zcGxpdChjZWxscmVnZXgpO1xuXHRcdGZvcihyaSA9IDA7IHJpICE9IGNlbGxzLmxlbmd0aDsgKytyaSkge1xuXHRcdFx0eCA9IGNlbGxzW3JpXS50cmltKCk7XG5cdFx0XHRpZih4Lmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cdFx0XHRjcmVmID0geC5tYXRjaChycmVnZXgpOyBpZHggPSByaTsgaT0wOyBjYz0wO1xuXHRcdFx0eCA9IFwiPGMgXCIgKyAoeC5zbGljZSgwLDEpPT1cIjxcIj9cIj5cIjpcIlwiKSArIHg7XG5cdFx0XHRpZihjcmVmICE9IG51bGwgJiYgY3JlZi5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0aWR4ID0gMDsgZD1jcmVmWzFdO1xuXHRcdFx0XHRmb3IoaT0wOyBpICE9IGQubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0XHRpZigoY2M9ZC5jaGFyQ29kZUF0KGkpLTY0KSA8IDEgfHwgY2MgPiAyNikgYnJlYWs7XG5cdFx0XHRcdFx0aWR4ID0gMjYqaWR4ICsgY2M7XG5cdFx0XHRcdH1cblx0XHRcdFx0LS1pZHg7XG5cdFx0XHRcdHRhZ2MgPSBpZHg7XG5cdFx0XHR9IGVsc2UgKyt0YWdjO1xuXHRcdFx0Zm9yKGkgPSAwOyBpICE9IHgubGVuZ3RoOyArK2kpIGlmKHguY2hhckNvZGVBdChpKSA9PT0gNjIpIGJyZWFrOyArK2k7XG5cdFx0XHR0YWcgPSBwYXJzZXhtbHRhZyh4LnNsaWNlKDAsaSksIHRydWUpO1xuXHRcdFx0aWYoIXRhZy5yKSB0YWcuciA9IGVuY29kZV9jZWxsKHtyOnRhZ3ItMSwgYzp0YWdjfSk7XG5cdFx0XHRkID0geC5zbGljZShpKTtcblx0XHRcdHAgPSAoe3Q6XCJcIn0pO1xuXG5cdFx0XHRpZigoY3JlZj1kLm1hdGNoKG1hdGNoX3YpKSE9IG51bGwgJiYgY3JlZlsxXSAhPT0gJycpIHAudj11bmVzY2FwZXhtbChjcmVmWzFdKTtcblx0XHRcdGlmKG9wdHMuY2VsbEZvcm11bGEpIHtcblx0XHRcdFx0aWYoKGNyZWY9ZC5tYXRjaChtYXRjaF9mKSkhPSBudWxsICYmIGNyZWZbMV0gIT09ICcnKSB7XG5cdFx0XHRcdFx0LyogVE9ETzogbWF0Y2ggYWdhaW5zdCBYTFNYRnV0dXJlRnVuY3Rpb25zICovXG5cdFx0XHRcdFx0cC5mPV94bGZuKHVuZXNjYXBleG1sKHV0ZjhyZWFkKGNyZWZbMV0pKSk7XG5cdFx0XHRcdFx0aWYoY3JlZlswXS5pbmRleE9mKCd0PVwiYXJyYXlcIicpID4gLTEpIHtcblx0XHRcdFx0XHRcdHAuRiA9IChkLm1hdGNoKHJlZnJlZ2V4KXx8W10pWzFdO1xuXHRcdFx0XHRcdFx0aWYocC5GLmluZGV4T2YoXCI6XCIpID4gLTEpIGFycmF5Zi5wdXNoKFtzYWZlX2RlY29kZV9yYW5nZShwLkYpLCBwLkZdKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYoY3JlZlswXS5pbmRleE9mKCd0PVwic2hhcmVkXCInKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBwYXJzZSBmb3JtdWxhXG5cdFx0XHRcdFx0XHRmdGFnID0gcGFyc2V4bWx0YWcoY3JlZlswXSk7XG5cdFx0XHRcdFx0XHRzaGFyZWRmW3BhcnNlSW50KGZ0YWcuc2ksIDEwKV0gPSBbZnRhZywgX3hsZm4odW5lc2NhcGV4bWwodXRmOHJlYWQoY3JlZlsxXSkpKV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYoKGNyZWY9ZC5tYXRjaCgvPGZbXj5dKlxcLz4vKSkpIHtcblx0XHRcdFx0XHRmdGFnID0gcGFyc2V4bWx0YWcoY3JlZlswXSk7XG5cdFx0XHRcdFx0aWYoc2hhcmVkZltmdGFnLnNpXSkgcC5mID0gc2hpZnRfZm9ybXVsYV94bHN4KHNoYXJlZGZbZnRhZy5zaV1bMV0sIHNoYXJlZGZbZnRhZy5zaV1bMF0ucmVmLCB0YWcucik7XG5cdFx0XHRcdH1cblx0XHRcdFx0LyogVE9ETzogZmFjdG9yIG91dCBjb250YWlucyBsb2dpYyAqL1xuXHRcdFx0XHR2YXIgX3RhZyA9IGRlY29kZV9jZWxsKHRhZy5yKTtcblx0XHRcdFx0Zm9yKGkgPSAwOyBpIDwgYXJyYXlmLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRcdGlmKF90YWcuciA+PSBhcnJheWZbaV1bMF0ucy5yICYmIF90YWcuciA8PSBhcnJheWZbaV1bMF0uZS5yKVxuXHRcdFx0XHRcdFx0aWYoX3RhZy5jID49IGFycmF5ZltpXVswXS5zLmMgJiYgX3RhZy5jIDw9IGFycmF5ZltpXVswXS5lLmMpXG5cdFx0XHRcdFx0XHRcdHAuRiA9IGFycmF5ZltpXVsxXTtcblx0XHRcdH1cblxuXHRcdFx0aWYodGFnLnQgPT0gbnVsbCAmJiBwLnYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZihwLmYgfHwgcC5GKSB7XG5cdFx0XHRcdFx0cC52ID0gMDsgcC50ID0gXCJuXCI7XG5cdFx0XHRcdH0gZWxzZSBpZighb3B0cy5zaGVldFN0dWJzKSBjb250aW51ZTtcblx0XHRcdFx0ZWxzZSBwLnQgPSBcInpcIjtcblx0XHRcdH1cblx0XHRcdGVsc2UgcC50ID0gdGFnLnQgfHwgXCJuXCI7XG5cdFx0XHRpZihndWVzcy5zLmMgPiBpZHgpIGd1ZXNzLnMuYyA9IGlkeDtcblx0XHRcdGlmKGd1ZXNzLmUuYyA8IGlkeCkgZ3Vlc3MuZS5jID0gaWR4O1xuXHRcdFx0LyogMTguMTguMTEgdCBTVF9DZWxsVHlwZSAqL1xuXHRcdFx0c3dpdGNoKHAudCkge1xuXHRcdFx0XHRjYXNlICduJzpcblx0XHRcdFx0XHRpZihwLnYgPT0gXCJcIiB8fCBwLnYgPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0aWYoIW9wdHMuc2hlZXRTdHVicykgY29udGludWU7XG5cdFx0XHRcdFx0XHRwLnQgPSAneic7XG5cdFx0XHRcdFx0fSBlbHNlIHAudiA9IHBhcnNlRmxvYXQocC52KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAncyc6XG5cdFx0XHRcdFx0aWYodHlwZW9mIHAudiA9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRcdFx0aWYoIW9wdHMuc2hlZXRTdHVicykgY29udGludWU7XG5cdFx0XHRcdFx0XHRwLnQgPSAneic7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNzdHIgPSBzdHJzW3BhcnNlSW50KHAudiwgMTApXTtcblx0XHRcdFx0XHRcdHAudiA9IHNzdHIudDtcblx0XHRcdFx0XHRcdHAuciA9IHNzdHIucjtcblx0XHRcdFx0XHRcdGlmKG9wdHMuY2VsbEhUTUwpIHAuaCA9IHNzdHIuaDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3N0cic6XG5cdFx0XHRcdFx0cC50ID0gXCJzXCI7XG5cdFx0XHRcdFx0cC52ID0gKHAudiE9bnVsbCkgPyB1dGY4cmVhZChwLnYpIDogJyc7XG5cdFx0XHRcdFx0aWYob3B0cy5jZWxsSFRNTCkgcC5oID0gZXNjYXBlaHRtbChwLnYpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdpbmxpbmVTdHInOlxuXHRcdFx0XHRcdGNyZWYgPSBkLm1hdGNoKGlzcmVnZXgpO1xuXHRcdFx0XHRcdHAudCA9ICdzJztcblx0XHRcdFx0XHRpZihjcmVmICE9IG51bGwgJiYgKHNzdHIgPSBwYXJzZV9zaShjcmVmWzFdKSkpIHAudiA9IHNzdHIudDsgZWxzZSBwLnYgPSBcIlwiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdiJzogcC52ID0gcGFyc2V4bWxib29sKHAudik7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkJzpcblx0XHRcdFx0XHRpZihvcHRzLmNlbGxEYXRlcykgcC52ID0gcGFyc2VEYXRlKHAudiwgMSk7XG5cdFx0XHRcdFx0ZWxzZSB7IHAudiA9IGRhdGVudW0ocGFyc2VEYXRlKHAudiwgMSkpOyBwLnQgPSAnbic7IH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0LyogZXJyb3Igc3RyaW5nIGluIC53LCBudW1iZXIgaW4gLnYgKi9cblx0XHRcdFx0Y2FzZSAnZSc6XG5cdFx0XHRcdFx0aWYoIW9wdHMgfHwgb3B0cy5jZWxsVGV4dCAhPT0gZmFsc2UpIHAudyA9IHAudjtcblx0XHRcdFx0XHRwLnYgPSBSQkVycltwLnZdOyBicmVhaztcblx0XHRcdH1cblx0XHRcdC8qIGZvcm1hdHRpbmcgKi9cblx0XHRcdGZtdGlkID0gZmlsbGlkID0gMDtcblx0XHRcdGlmKGRvX2Zvcm1hdCAmJiB0YWcucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNmID0gc3R5bGVzLkNlbGxYZlt0YWcuc107XG5cdFx0XHRcdGlmKGNmICE9IG51bGwpIHtcblx0XHRcdFx0XHRpZihjZi5udW1GbXRJZCAhPSBudWxsKSBmbXRpZCA9IGNmLm51bUZtdElkO1xuXHRcdFx0XHRcdGlmKG9wdHMuY2VsbFN0eWxlcykge1xuXHRcdFx0XHRcdFx0aWYoY2YuZmlsbElkICE9IG51bGwpIGZpbGxpZCA9IGNmLmZpbGxJZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHNhZmVfZm9ybWF0KHAsIGZtdGlkLCBmaWxsaWQsIG9wdHMsIHRoZW1lcywgc3R5bGVzKTtcblx0XHRcdGlmKG9wdHMuY2VsbERhdGVzICYmIGRvX2Zvcm1hdCAmJiBwLnQgPT0gJ24nICYmIFNTRi5pc19kYXRlKFNTRi5fdGFibGVbZm10aWRdKSkgeyBwLnQgPSAnZCc7IHAudiA9IG51bWRhdGUocC52KTsgfVxuXHRcdFx0aWYoZGVuc2UpIHtcblx0XHRcdFx0dmFyIF9yID0gZGVjb2RlX2NlbGwodGFnLnIpO1xuXHRcdFx0XHRpZighc1tfci5yXSkgc1tfci5yXSA9IFtdO1xuXHRcdFx0XHRzW19yLnJdW19yLmNdID0gcDtcblx0XHRcdH0gZWxzZSBzW3RhZy5yXSA9IHA7XG5cdFx0fVxuXHR9XG5cdGlmKHJvd3MubGVuZ3RoID4gMCkgc1snIXJvd3MnXSA9IHJvd3M7XG59OyB9KSgpO1xuXG5mdW5jdGlvbiB3cml0ZV93c194bWxfZGF0YSh3cywgb3B0cywgaWR4LCB3Yikge1xuXHR2YXIgbyA9IFtdLCByID0gW10sIHJhbmdlID0gc2FmZV9kZWNvZGVfcmFuZ2Uod3NbJyFyZWYnXSksIGNlbGw9XCJcIiwgcmVmLCByciA9IFwiXCIsIGNvbHMgPSBbXSwgUj0wLCBDPTAsIHJvd3MgPSB3c1snIXJvd3MnXTtcblx0dmFyIGRlbnNlID0gQXJyYXkuaXNBcnJheSh3cyk7XG5cdHZhciBwYXJhbXMgPSAoe3I6cnJ9KSwgcm93LCBoZWlnaHQgPSAtMTtcblx0Zm9yKEMgPSByYW5nZS5zLmM7IEMgPD0gcmFuZ2UuZS5jOyArK0MpIGNvbHNbQ10gPSBlbmNvZGVfY29sKEMpO1xuXHRmb3IoUiA9IHJhbmdlLnMucjsgUiA8PSByYW5nZS5lLnI7ICsrUikge1xuXHRcdHIgPSBbXTtcblx0XHRyciA9IGVuY29kZV9yb3coUik7XG5cdFx0Zm9yKEMgPSByYW5nZS5zLmM7IEMgPD0gcmFuZ2UuZS5jOyArK0MpIHtcblx0XHRcdHJlZiA9IGNvbHNbQ10gKyBycjtcblx0XHRcdHZhciBfY2VsbCA9IGRlbnNlID8gKHdzW1JdfHxbXSlbQ106IHdzW3JlZl07XG5cdFx0XHRpZihfY2VsbCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblx0XHRcdGlmKChjZWxsID0gd3JpdGVfd3NfeG1sX2NlbGwoX2NlbGwsIHJlZiwgd3MsIG9wdHMsIGlkeCwgd2IpKSAhPSBudWxsKSByLnB1c2goY2VsbCk7XG5cdFx0fVxuXHRcdGlmKHIubGVuZ3RoID4gMCB8fCByb3dzICYmIHJvd3NbUl0pIHtcblx0XHRcdHBhcmFtcyA9ICh7cjpycn0pO1xuXHRcdFx0aWYocm93cyAmJiByb3dzW1JdKSB7XG5cdFx0XHRcdHJvdyA9IHJvd3NbUl07XG5cdFx0XHRcdGlmKHJvdy5oaWRkZW4pIHBhcmFtcy5oaWRkZW4gPSAxO1xuXHRcdFx0XHRoZWlnaHQgPSAtMTtcblx0XHRcdFx0aWYgKHJvdy5ocHgpIGhlaWdodCA9IHB4MnB0KHJvdy5ocHgpO1xuXHRcdFx0XHRlbHNlIGlmIChyb3cuaHB0KSBoZWlnaHQgPSByb3cuaHB0O1xuXHRcdFx0XHRpZiAoaGVpZ2h0ID4gLTEpIHsgcGFyYW1zLmh0ID0gaGVpZ2h0OyBwYXJhbXMuY3VzdG9tSGVpZ2h0ID0gMTsgfVxuXHRcdFx0XHRpZiAocm93LmxldmVsKSB7IHBhcmFtcy5vdXRsaW5lTGV2ZWwgPSByb3cubGV2ZWw7IH1cblx0XHRcdH1cblx0XHRcdG9bby5sZW5ndGhdID0gKHdyaXRleHRhZygncm93Jywgci5qb2luKFwiXCIpLCBwYXJhbXMpKTtcblx0XHR9XG5cdH1cblx0aWYocm93cykgZm9yKDsgUiA8IHJvd3MubGVuZ3RoOyArK1IpIHtcblx0XHRpZihyb3dzICYmIHJvd3NbUl0pIHtcblx0XHRcdHBhcmFtcyA9ICh7cjpSKzF9KTtcblx0XHRcdHJvdyA9IHJvd3NbUl07XG5cdFx0XHRpZihyb3cuaGlkZGVuKSBwYXJhbXMuaGlkZGVuID0gMTtcblx0XHRcdGhlaWdodCA9IC0xO1xuXHRcdFx0aWYgKHJvdy5ocHgpIGhlaWdodCA9IHB4MnB0KHJvdy5ocHgpO1xuXHRcdFx0ZWxzZSBpZiAocm93LmhwdCkgaGVpZ2h0ID0gcm93LmhwdDtcblx0XHRcdGlmIChoZWlnaHQgPiAtMSkgeyBwYXJhbXMuaHQgPSBoZWlnaHQ7IHBhcmFtcy5jdXN0b21IZWlnaHQgPSAxOyB9XG5cdFx0XHRpZiAocm93LmxldmVsKSB7IHBhcmFtcy5vdXRsaW5lTGV2ZWwgPSByb3cubGV2ZWw7IH1cblx0XHRcdG9bby5sZW5ndGhdID0gKHdyaXRleHRhZygncm93JywgXCJcIiwgcGFyYW1zKSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG5cbnZhciBXU19YTUxfUk9PVCA9IHdyaXRleHRhZygnd29ya3NoZWV0JywgbnVsbCwge1xuXHQneG1sbnMnOiBYTUxOUy5tYWluWzBdLFxuXHQneG1sbnM6cic6IFhNTE5TLnJcbn0pO1xuXG5mdW5jdGlvbiB3cml0ZV93c194bWwoaWR4LCBvcHRzLCB3YiwgcmVscykge1xuXHR2YXIgbyA9IFtYTUxfSEVBREVSLCBXU19YTUxfUk9PVF07XG5cdHZhciBzID0gd2IuU2hlZXROYW1lc1tpZHhdLCBzaWR4ID0gMCwgcmRhdGEgPSBcIlwiO1xuXHR2YXIgd3MgPSB3Yi5TaGVldHNbc107XG5cdGlmKHdzID09IG51bGwpIHdzID0ge307XG5cdHZhciByZWYgPSB3c1snIXJlZiddOyBpZihyZWYgPT0gbnVsbCkgcmVmID0gJ0ExJztcblx0aWYoIXJlbHMpIHJlbHMgPSB7fTtcblx0d3NbJyFjb21tZW50cyddID0gW107XG5cdHdzWychZHJhd2luZyddID0gW107XG5cblx0dmFyIGNuYW1lID0gd2IuU2hlZXROYW1lc1tpZHhdO1xuXHR0cnkgeyBpZih3Yi5Xb3JrYm9vaykgY25hbWUgPSB3Yi5Xb3JrYm9vay5TaGVldHNbaWR4XS5Db2RlTmFtZSB8fCBjbmFtZTsgfSBjYXRjaChlKSB7fVxuXHRvW28ubGVuZ3RoXSA9ICh3cml0ZXh0YWcoJ3NoZWV0UHInLCBudWxsLCB7J2NvZGVOYW1lJzogZXNjYXBleG1sKGNuYW1lKX0pKTtcblxuXHRvW28ubGVuZ3RoXSA9ICh3cml0ZXh0YWcoJ2RpbWVuc2lvbicsIG51bGwsIHsncmVmJzogcmVmfSkpO1xuXG5cdG9bby5sZW5ndGhdID0gd3JpdGVfd3NfeG1sX3NoZWV0dmlld3Mod3MsIG9wdHMsIGlkeCwgd2IpO1xuXG5cdC8qIFRPRE86IHN0b3JlIGluIFdCLCBwcm9jZXNzIHN0eWxlcyAqL1xuXHRpZihvcHRzLnNoZWV0Rm9ybWF0KSBvW28ubGVuZ3RoXSA9ICh3cml0ZXh0YWcoJ3NoZWV0Rm9ybWF0UHInLCBudWxsLCB7XG5cdFx0ZGVmYXVsdFJvd0hlaWdodDpvcHRzLnNoZWV0Rm9ybWF0LmRlZmF1bHRSb3dIZWlnaHR8fCcxNicsXG5cdFx0YmFzZUNvbFdpZHRoOm9wdHMuc2hlZXRGb3JtYXQuYmFzZUNvbFdpZHRofHwnMTAnLFxuXHRcdG91dGxpbmVMZXZlbFJvdzpvcHRzLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvd3x8JzcnXG5cdH0pKTtcblxuXHRpZih3c1snIWNvbHMnXSAhPSBudWxsICYmIHdzWychY29scyddLmxlbmd0aCA+IDApIG9bby5sZW5ndGhdID0gKHdyaXRlX3dzX3htbF9jb2xzKHdzLCB3c1snIWNvbHMnXSkpO1xuXG5cdG9bc2lkeCA9IG8ubGVuZ3RoXSA9ICc8c2hlZXREYXRhLz4nO1xuXHR3c1snIWxpbmtzJ10gPSBbXTtcblx0aWYod3NbJyFyZWYnXSAhPSBudWxsKSB7XG5cdFx0cmRhdGEgPSB3cml0ZV93c194bWxfZGF0YSh3cywgb3B0cywgaWR4LCB3YiwgcmVscyk7XG5cdFx0aWYocmRhdGEubGVuZ3RoID4gMCkgb1tvLmxlbmd0aF0gPSAocmRhdGEpO1xuXHR9XG5cdGlmKG8ubGVuZ3RoPnNpZHgrMSkgeyBvW28ubGVuZ3RoXSA9ICgnPC9zaGVldERhdGE+Jyk7IG9bc2lkeF09b1tzaWR4XS5yZXBsYWNlKFwiLz5cIixcIj5cIik7IH1cblxuXHQvKiBzaGVldENhbGNQciAqL1xuXG5cdGlmKHdzWychcHJvdGVjdCddICE9IG51bGwpIG9bby5sZW5ndGhdID0gd3JpdGVfd3NfeG1sX3Byb3RlY3Rpb24od3NbJyFwcm90ZWN0J10pO1xuXG5cdC8qIHByb3RlY3RlZFJhbmdlcyAqL1xuXHQvKiBzY2VuYXJpb3MgKi9cblxuXHRpZih3c1snIWF1dG9maWx0ZXInXSAhPSBudWxsKSBvW28ubGVuZ3RoXSA9IHdyaXRlX3dzX3htbF9hdXRvZmlsdGVyKHdzWychYXV0b2ZpbHRlciddKTtcblxuXHQvKiBzb3J0U3RhdGUgKi9cblx0LyogZGF0YUNvbnNvbGlkYXRlICovXG5cdC8qIGN1c3RvbVNoZWV0Vmlld3MgKi9cblxuXHRpZih3c1snIW1lcmdlcyddICE9IG51bGwgJiYgd3NbJyFtZXJnZXMnXS5sZW5ndGggPiAwKSBvW28ubGVuZ3RoXSA9ICh3cml0ZV93c194bWxfbWVyZ2VzKHdzWychbWVyZ2VzJ10pKTtcblxuXHQvKiBwaG9uZXRpY1ByICovXG5cdC8qIGNvbmRpdGlvbmFsRm9ybWF0dGluZyAqL1xuXHQvKiBkYXRhVmFsaWRhdGlvbnMgKi9cblxuXHR2YXIgcmVsYyA9IC0xLCByZWwsIHJJZCA9IC0xO1xuXHRpZih3c1snIWxpbmtzJ10ubGVuZ3RoID4gMCkge1xuXHRcdG9bby5sZW5ndGhdID0gXCI8aHlwZXJsaW5rcz5cIjtcblx0XHR3c1snIWxpbmtzJ10uZm9yRWFjaChmdW5jdGlvbihsKSB7XG5cdFx0XHRpZighbFsxXS5UYXJnZXQpIHJldHVybjtcblx0XHRcdHJlbCA9ICh7XCJyZWZcIjpsWzBdfSk7XG5cdFx0XHRpZihsWzFdLlRhcmdldC5jaGFyQXQoMCkgIT0gXCIjXCIpIHtcblx0XHRcdFx0cklkID0gYWRkX3JlbHMocmVscywgLTEsIGVzY2FwZXhtbChsWzFdLlRhcmdldCkucmVwbGFjZSgvIy4qJC8sIFwiXCIpLCBSRUxTLkhMSU5LKTtcblx0XHRcdFx0cmVsW1wicjppZFwiXSA9IFwicklkXCIrcklkO1xuXHRcdFx0fVxuXHRcdFx0aWYoKHJlbGMgPSBsWzFdLlRhcmdldC5pbmRleE9mKFwiI1wiKSkgPiAtMSkgcmVsLmxvY2F0aW9uID0gZXNjYXBleG1sKGxbMV0uVGFyZ2V0LnNsaWNlKHJlbGMrMSkpO1xuXHRcdFx0aWYobFsxXS5Ub29sdGlwKSByZWwudG9vbHRpcCA9IGVzY2FwZXhtbChsWzFdLlRvb2x0aXApO1xuXHRcdFx0b1tvLmxlbmd0aF0gPSB3cml0ZXh0YWcoXCJoeXBlcmxpbmtcIixudWxsLHJlbCk7XG5cdFx0fSk7XG5cdFx0b1tvLmxlbmd0aF0gPSBcIjwvaHlwZXJsaW5rcz5cIjtcblx0fVxuXHRkZWxldGUgd3NbJyFsaW5rcyddO1xuXG5cdC8qIHByaW50T3B0aW9ucyAqL1xuXHRpZiAod3NbJyFtYXJnaW5zJ10gIT0gbnVsbCkgb1tvLmxlbmd0aF0gPSAgd3JpdGVfd3NfeG1sX21hcmdpbnMod3NbJyFtYXJnaW5zJ10pO1xuXHQvKiBwYWdlU2V0dXAgKi9cblxuXHQvL3ZhciBoZmlkeCA9IG8ubGVuZ3RoO1xuXHRvW28ubGVuZ3RoXSA9IFwiXCI7XG5cblx0Lyogcm93QnJlYWtzICovXG5cdC8qIGNvbEJyZWFrcyAqL1xuXHQvKiBjdXN0b21Qcm9wZXJ0aWVzICovXG5cdC8qIGNlbGxXYXRjaGVzICovXG5cdC8qIGlnbm9yZWRFcnJvcnMgKi9cblx0Lyogc21hcnRUYWdzICovXG5cblx0aWYod3NbJyFkcmF3aW5nJ10ubGVuZ3RoID4gMCkge1xuXHRcdHJJZCA9IGFkZF9yZWxzKHJlbHMsIC0xLCBcIi4uL2RyYXdpbmdzL2RyYXdpbmdcIiArIChpZHgrMSkgKyBcIi54bWxcIiwgUkVMUy5EUkFXKTtcblx0XHRvW28ubGVuZ3RoXSA9IHdyaXRleHRhZyhcImRyYXdpbmdcIiwgbnVsbCwge1wicjppZFwiOlwicklkXCIgKyBySWR9KTtcblx0fVxuXHRlbHNlIGRlbGV0ZSB3c1snIWRyYXdpbmcnXTtcblxuXHRpZih3c1snIWNvbW1lbnRzJ10ubGVuZ3RoID4gMCkge1xuXHRcdHJJZCA9IGFkZF9yZWxzKHJlbHMsIC0xLCBcIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmdcIiArIChpZHgrMSkgKyBcIi52bWxcIiwgUkVMUy5WTUwpO1xuXHRcdG9bby5sZW5ndGhdID0gd3JpdGV4dGFnKFwibGVnYWN5RHJhd2luZ1wiLCBudWxsLCB7XCJyOmlkXCI6XCJySWRcIiArIHJJZH0pO1xuXHRcdHdzWychbGVnYWN5J10gPSBySWQ7XG5cdH1cblxuXHQvKiBkcmF3aW5nSEYgKi9cblx0LyogcGljdHVyZSAqL1xuXHQvKiBvbGVPYmplY3RzICovXG5cdC8qIGNvbnRyb2xzICovXG5cdC8qIHdlYlB1Ymxpc2hJdGVtcyAqL1xuXHQvKiB0YWJsZVBhcnRzICovXG5cdC8qIGV4dExpc3QgKi9cblxuXHRpZihvLmxlbmd0aD4yKSB7IG9bby5sZW5ndGhdID0gKCc8L3dvcmtzaGVldD4nKTsgb1sxXT1vWzFdLnJlcGxhY2UoXCIvPlwiLFwiPlwiKTsgfVxuXHRyZXR1cm4gby5qb2luKFwiXCIpO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjcxOCBCcnRSb3dIZHIgKi9cbmZ1bmN0aW9uIHBhcnNlX0JydFJvd0hkcihkYXRhLCBsZW5ndGgpIHtcblx0dmFyIHogPSAoe30pO1xuXHR2YXIgdGd0ID0gZGF0YS5sICsgbGVuZ3RoO1xuXHR6LnIgPSBkYXRhLnJlYWRfc2hpZnQoNCk7XG5cdGRhdGEubCArPSA0OyAvLyBUT0RPOiBpeGZlXG5cdHZhciBtaXlSdyA9IGRhdGEucmVhZF9zaGlmdCgyKTtcblx0ZGF0YS5sICs9IDE7IC8vIFRPRE86IHRvcC9ib3QgcGFkZGluZ1xuXHR2YXIgZmxhZ3MgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cdGRhdGEubCA9IHRndDtcblx0aWYoZmxhZ3MgJiAweDA3KSB6LmxldmVsID0gZmxhZ3MgJiAweDA3O1xuXHRpZihmbGFncyAmIDB4MTApIHouaGlkZGVuID0gdHJ1ZTtcblx0aWYoZmxhZ3MgJiAweDIwKSB6LmhwdCA9IG1peVJ3IC8gMjA7XG5cdHJldHVybiB6O1xufVxuZnVuY3Rpb24gd3JpdGVfQnJ0Um93SGRyKFIsIHJhbmdlLCB3cykge1xuXHR2YXIgbyA9IG5ld19idWYoMTcrOCoxNik7XG5cdHZhciByb3cgPSAod3NbJyFyb3dzJ118fFtdKVtSXXx8e307XG5cdG8ud3JpdGVfc2hpZnQoNCwgUik7XG5cblx0by53cml0ZV9zaGlmdCg0LCAwKTsgLyogVE9ETzogaXhmZSAqL1xuXG5cdHZhciBtaXlSdyA9IDB4MDE0MDtcblx0aWYocm93LmhweCkgbWl5UncgPSBweDJwdChyb3cuaHB4KSAqIDIwO1xuXHRlbHNlIGlmKHJvdy5ocHQpIG1peVJ3ID0gcm93LmhwdCAqIDIwO1xuXHRvLndyaXRlX3NoaWZ0KDIsIG1peVJ3KTtcblxuXHRvLndyaXRlX3NoaWZ0KDEsIDApOyAvKiB0b3AvYm90IHBhZGRpbmcgKi9cblxuXHR2YXIgZmxhZ3MgPSAweDA7XG5cdGlmKHJvdy5sZXZlbCkgZmxhZ3MgfD0gcm93LmxldmVsO1xuXHRpZihyb3cuaGlkZGVuKSBmbGFncyB8PSAweDEwO1xuXHRpZihyb3cuaHB4IHx8IHJvdy5ocHQpIGZsYWdzIHw9IDB4MjA7XG5cdG8ud3JpdGVfc2hpZnQoMSwgZmxhZ3MpO1xuXG5cdG8ud3JpdGVfc2hpZnQoMSwgMCk7IC8qIHBob25ldGljIGd1aWRlICovXG5cblx0LyogW01TLVhMU0JdIDIuNS44IEJydENvbFNwYW4gZXhwbGFpbnMgdGhlIG1lY2hhbmlzbSAqL1xuXHR2YXIgbmNvbHNwYW4gPSAwLCBsY3MgPSBvLmw7XG5cdG8ubCArPSA0O1xuXG5cdHZhciBjYWRkciA9IHtyOlIsIGM6MH07XG5cdGZvcih2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG5cdFx0aWYocmFuZ2Uucy5jID4gKChpKzEpIDw8IDEwKSB8fCByYW5nZS5lLmMgPCAoaSA8PCAxMCkpIGNvbnRpbnVlO1xuXHRcdHZhciBmaXJzdCA9IC0xLCBsYXN0ID0gLTE7XG5cdFx0Zm9yKHZhciBqID0gKGk8PDEwKTsgaiA8ICgoaSsxKTw8MTApOyArK2opIHtcblx0XHRcdGNhZGRyLmMgPSBqO1xuXHRcdFx0dmFyIGNlbGwgPSBBcnJheS5pc0FycmF5KHdzKSA/ICh3c1tjYWRkci5yXXx8W10pW2NhZGRyLmNdIDogd3NbZW5jb2RlX2NlbGwoY2FkZHIpXTtcblx0XHRcdGlmKGNlbGwpIHsgaWYoZmlyc3QgPCAwKSBmaXJzdCA9IGo7IGxhc3QgPSBqOyB9XG5cdFx0fVxuXHRcdGlmKGZpcnN0IDwgMCkgY29udGludWU7XG5cdFx0KytuY29sc3Bhbjtcblx0XHRvLndyaXRlX3NoaWZ0KDQsIGZpcnN0KTtcblx0XHRvLndyaXRlX3NoaWZ0KDQsIGxhc3QpO1xuXHR9XG5cblx0dmFyIGwgPSBvLmw7XG5cdG8ubCA9IGxjcztcblx0by53cml0ZV9zaGlmdCg0LCBuY29sc3Bhbik7XG5cdG8ubCA9IGw7XG5cblx0cmV0dXJuIG8ubGVuZ3RoID4gby5sID8gby5zbGljZSgwLCBvLmwpIDogbztcbn1cbmZ1bmN0aW9uIHdyaXRlX3Jvd19oZWFkZXIoYmEsIHdzLCByYW5nZSwgUikge1xuXHR2YXIgbyA9IHdyaXRlX0JydFJvd0hkcihSLCByYW5nZSwgd3MpO1xuXHRpZihvLmxlbmd0aCA+IDE3IHx8ICh3c1snIXJvd3MnXXx8W10pW1JdKSB3cml0ZV9yZWNvcmQoYmEsICdCcnRSb3dIZHInLCBvKTtcbn1cblxuLyogW01TLVhMU0JdIDIuNC44MTIgQnJ0V3NEaW0gKi9cbnZhciBwYXJzZV9CcnRXc0RpbSA9IHBhcnNlX1VuY2hlY2tlZFJmWDtcbnZhciB3cml0ZV9CcnRXc0RpbSA9IHdyaXRlX1VuY2hlY2tlZFJmWDtcblxuLyogW01TLVhMU0JdIDIuNC44MTMgQnJ0V3NGbXRJbmZvICovXG5mdW5jdGlvbiBwYXJzZV9CcnRXc0ZtdEluZm8oKSB7XG59XG4vL2Z1bmN0aW9uIHdyaXRlX0JydFdzRm10SW5mbyh3cywgbykgeyB9XG5cbi8qIFtNUy1YTFNCXSAyLjQuODE1IEJydFdzUHJvcCAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0V3NQcm9wKGRhdGEsIGxlbmd0aCkge1xuXHR2YXIgeiA9IHt9O1xuXHQvKiBUT0RPOiBwdWxsIGZsYWdzICovXG5cdGRhdGEubCArPSAxOTtcblx0ei5uYW1lID0gcGFyc2VfWExTQkNvZGVOYW1lKGRhdGEsIGxlbmd0aCAtIDE5KTtcblx0cmV0dXJuIHo7XG59XG5mdW5jdGlvbiB3cml0ZV9CcnRXc1Byb3Aoc3RyLCBvKSB7XG5cdGlmKG8gPT0gbnVsbCkgbyA9IG5ld19idWYoODQrNCpzdHIubGVuZ3RoKTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IDM7ICsraSkgby53cml0ZV9zaGlmdCgxLDApO1xuXHR3cml0ZV9CcnRDb2xvcih7YXV0bzoxfSwgbyk7XG5cdG8ud3JpdGVfc2hpZnQoLTQsLTEpO1xuXHRvLndyaXRlX3NoaWZ0KC00LC0xKTtcblx0d3JpdGVfWExTQkNvZGVOYW1lKHN0ciwgbyk7XG5cdHJldHVybiBvLnNsaWNlKDAsIG8ubCk7XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuMzAzIEJydENlbGxCbGFuayAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0Q2VsbEJsYW5rKGRhdGEpIHtcblx0dmFyIGNlbGwgPSBwYXJzZV9YTFNCQ2VsbChkYXRhKTtcblx0cmV0dXJuIFtjZWxsXTtcbn1cbmZ1bmN0aW9uIHdyaXRlX0JydENlbGxCbGFuayhjZWxsLCBuY2VsbCwgbykge1xuXHRpZihvID09IG51bGwpIG8gPSBuZXdfYnVmKDgpO1xuXHRyZXR1cm4gd3JpdGVfWExTQkNlbGwobmNlbGwsIG8pO1xufVxuXG5cbi8qIFtNUy1YTFNCXSAyLjQuMzA0IEJydENlbGxCb29sICovXG5mdW5jdGlvbiBwYXJzZV9CcnRDZWxsQm9vbChkYXRhKSB7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQkNlbGwoZGF0YSk7XG5cdHZhciBmQm9vbCA9IGRhdGEucmVhZF9zaGlmdCgxKTtcblx0cmV0dXJuIFtjZWxsLCBmQm9vbCwgJ2InXTtcbn1cbmZ1bmN0aW9uIHdyaXRlX0JydENlbGxCb29sKGNlbGwsIG5jZWxsLCBvKSB7XG5cdGlmKG8gPT0gbnVsbCkgbyA9IG5ld19idWYoOSk7XG5cdHdyaXRlX1hMU0JDZWxsKG5jZWxsLCBvKTtcblx0by53cml0ZV9zaGlmdCgxLCBjZWxsLnYgPyAxIDogMCk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjMwNSBCcnRDZWxsRXJyb3IgKi9cbmZ1bmN0aW9uIHBhcnNlX0JydENlbGxFcnJvcihkYXRhKSB7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQkNlbGwoZGF0YSk7XG5cdHZhciBiRXJyb3IgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cdHJldHVybiBbY2VsbCwgYkVycm9yLCAnZSddO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjMwOCBCcnRDZWxsSXNzdCAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0Q2VsbElzc3QoZGF0YSkge1xuXHR2YXIgY2VsbCA9IHBhcnNlX1hMU0JDZWxsKGRhdGEpO1xuXHR2YXIgaXNzdCA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0cmV0dXJuIFtjZWxsLCBpc3N0LCAncyddO1xufVxuZnVuY3Rpb24gd3JpdGVfQnJ0Q2VsbElzc3QoY2VsbCwgbmNlbGwsIG8pIHtcblx0aWYobyA9PSBudWxsKSBvID0gbmV3X2J1ZigxMik7XG5cdHdyaXRlX1hMU0JDZWxsKG5jZWxsLCBvKTtcblx0by53cml0ZV9zaGlmdCg0LCBuY2VsbC52KTtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuMzEwIEJydENlbGxSZWFsICovXG5mdW5jdGlvbiBwYXJzZV9CcnRDZWxsUmVhbChkYXRhKSB7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQkNlbGwoZGF0YSk7XG5cdHZhciB2YWx1ZSA9IHBhcnNlX1hudW0oZGF0YSk7XG5cdHJldHVybiBbY2VsbCwgdmFsdWUsICduJ107XG59XG5mdW5jdGlvbiB3cml0ZV9CcnRDZWxsUmVhbChjZWxsLCBuY2VsbCwgbykge1xuXHRpZihvID09IG51bGwpIG8gPSBuZXdfYnVmKDE2KTtcblx0d3JpdGVfWExTQkNlbGwobmNlbGwsIG8pO1xuXHR3cml0ZV9YbnVtKGNlbGwudiwgbyk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjMxMSBCcnRDZWxsUmsgKi9cbmZ1bmN0aW9uIHBhcnNlX0JydENlbGxSayhkYXRhKSB7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQkNlbGwoZGF0YSk7XG5cdHZhciB2YWx1ZSA9IHBhcnNlX1JrTnVtYmVyKGRhdGEpO1xuXHRyZXR1cm4gW2NlbGwsIHZhbHVlLCAnbiddO1xufVxuZnVuY3Rpb24gd3JpdGVfQnJ0Q2VsbFJrKGNlbGwsIG5jZWxsLCBvKSB7XG5cdGlmKG8gPT0gbnVsbCkgbyA9IG5ld19idWYoMTIpO1xuXHR3cml0ZV9YTFNCQ2VsbChuY2VsbCwgbyk7XG5cdHdyaXRlX1JrTnVtYmVyKGNlbGwudiwgbyk7XG5cdHJldHVybiBvO1xufVxuXG5cbi8qIFtNUy1YTFNCXSAyLjQuMzE0IEJydENlbGxTdCAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0Q2VsbFN0KGRhdGEpIHtcblx0dmFyIGNlbGwgPSBwYXJzZV9YTFNCQ2VsbChkYXRhKTtcblx0dmFyIHZhbHVlID0gcGFyc2VfWExXaWRlU3RyaW5nKGRhdGEpO1xuXHRyZXR1cm4gW2NlbGwsIHZhbHVlLCAnc3RyJ107XG59XG5mdW5jdGlvbiB3cml0ZV9CcnRDZWxsU3QoY2VsbCwgbmNlbGwsIG8pIHtcblx0aWYobyA9PSBudWxsKSBvID0gbmV3X2J1ZigxMiArIDQgKiBjZWxsLnYubGVuZ3RoKTtcblx0d3JpdGVfWExTQkNlbGwobmNlbGwsIG8pO1xuXHR3cml0ZV9YTFdpZGVTdHJpbmcoY2VsbC52LCBvKTtcblx0cmV0dXJuIG8ubGVuZ3RoID4gby5sID8gby5zbGljZSgwLCBvLmwpIDogbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC42NDcgQnJ0Rm1sYUJvb2wgKi9cbmZ1bmN0aW9uIHBhcnNlX0JydEZtbGFCb29sKGRhdGEsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgZW5kID0gZGF0YS5sICsgbGVuZ3RoO1xuXHR2YXIgY2VsbCA9IHBhcnNlX1hMU0JDZWxsKGRhdGEpO1xuXHRjZWxsLnIgPSBvcHRzWychcm93J107XG5cdHZhciB2YWx1ZSA9IGRhdGEucmVhZF9zaGlmdCgxKTtcblx0dmFyIG8gPSBbY2VsbCwgdmFsdWUsICdiJ107XG5cdGlmKG9wdHMuY2VsbEZvcm11bGEpIHtcblx0XHRkYXRhLmwgKz0gMjtcblx0XHR2YXIgZm9ybXVsYSA9IHBhcnNlX1hMU0JDZWxsUGFyc2VkRm9ybXVsYShkYXRhLCBlbmQgLSBkYXRhLmwsIG9wdHMpO1xuXHRcdG9bM10gPSBzdHJpbmdpZnlfZm9ybXVsYShmb3JtdWxhLCBudWxsLypyYW5nZSovLCBjZWxsLCBvcHRzLnN1cGJvb2tzLCBvcHRzKTsvKiBUT0RPICovXG5cdH1cblx0ZWxzZSBkYXRhLmwgPSBlbmQ7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjY0OCBCcnRGbWxhRXJyb3IgKi9cbmZ1bmN0aW9uIHBhcnNlX0JydEZtbGFFcnJvcihkYXRhLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGVuZCA9IGRhdGEubCArIGxlbmd0aDtcblx0dmFyIGNlbGwgPSBwYXJzZV9YTFNCQ2VsbChkYXRhKTtcblx0Y2VsbC5yID0gb3B0c1snIXJvdyddO1xuXHR2YXIgdmFsdWUgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cdHZhciBvID0gW2NlbGwsIHZhbHVlLCAnZSddO1xuXHRpZihvcHRzLmNlbGxGb3JtdWxhKSB7XG5cdFx0ZGF0YS5sICs9IDI7XG5cdFx0dmFyIGZvcm11bGEgPSBwYXJzZV9YTFNCQ2VsbFBhcnNlZEZvcm11bGEoZGF0YSwgZW5kIC0gZGF0YS5sLCBvcHRzKTtcblx0XHRvWzNdID0gc3RyaW5naWZ5X2Zvcm11bGEoZm9ybXVsYSwgbnVsbC8qcmFuZ2UqLywgY2VsbCwgb3B0cy5zdXBib29rcywgb3B0cyk7LyogVE9ETyAqL1xuXHR9XG5cdGVsc2UgZGF0YS5sID0gZW5kO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC42NDkgQnJ0Rm1sYU51bSAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0Rm1sYU51bShkYXRhLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGVuZCA9IGRhdGEubCArIGxlbmd0aDtcblx0dmFyIGNlbGwgPSBwYXJzZV9YTFNCQ2VsbChkYXRhKTtcblx0Y2VsbC5yID0gb3B0c1snIXJvdyddO1xuXHR2YXIgdmFsdWUgPSBwYXJzZV9YbnVtKGRhdGEpO1xuXHR2YXIgbyA9IFtjZWxsLCB2YWx1ZSwgJ24nXTtcblx0aWYob3B0cy5jZWxsRm9ybXVsYSkge1xuXHRcdGRhdGEubCArPSAyO1xuXHRcdHZhciBmb3JtdWxhID0gcGFyc2VfWExTQkNlbGxQYXJzZWRGb3JtdWxhKGRhdGEsIGVuZCAtIGRhdGEubCwgb3B0cyk7XG5cdFx0b1szXSA9IHN0cmluZ2lmeV9mb3JtdWxhKGZvcm11bGEsIG51bGwvKnJhbmdlKi8sIGNlbGwsIG9wdHMuc3VwYm9va3MsIG9wdHMpOy8qIFRPRE8gKi9cblx0fVxuXHRlbHNlIGRhdGEubCA9IGVuZDtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuNjUwIEJydEZtbGFTdHJpbmcgKi9cbmZ1bmN0aW9uIHBhcnNlX0JydEZtbGFTdHJpbmcoZGF0YSwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciBlbmQgPSBkYXRhLmwgKyBsZW5ndGg7XG5cdHZhciBjZWxsID0gcGFyc2VfWExTQkNlbGwoZGF0YSk7XG5cdGNlbGwuciA9IG9wdHNbJyFyb3cnXTtcblx0dmFyIHZhbHVlID0gcGFyc2VfWExXaWRlU3RyaW5nKGRhdGEpO1xuXHR2YXIgbyA9IFtjZWxsLCB2YWx1ZSwgJ3N0ciddO1xuXHRpZihvcHRzLmNlbGxGb3JtdWxhKSB7XG5cdFx0ZGF0YS5sICs9IDI7XG5cdFx0dmFyIGZvcm11bGEgPSBwYXJzZV9YTFNCQ2VsbFBhcnNlZEZvcm11bGEoZGF0YSwgZW5kIC0gZGF0YS5sLCBvcHRzKTtcblx0XHRvWzNdID0gc3RyaW5naWZ5X2Zvcm11bGEoZm9ybXVsYSwgbnVsbC8qcmFuZ2UqLywgY2VsbCwgb3B0cy5zdXBib29rcywgb3B0cyk7LyogVE9ETyAqL1xuXHR9XG5cdGVsc2UgZGF0YS5sID0gZW5kO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC42NzYgQnJ0TWVyZ2VDZWxsICovXG52YXIgcGFyc2VfQnJ0TWVyZ2VDZWxsID0gcGFyc2VfVW5jaGVja2VkUmZYO1xudmFyIHdyaXRlX0JydE1lcmdlQ2VsbCA9IHdyaXRlX1VuY2hlY2tlZFJmWDtcbi8qIFtNUy1YTFNCXSAyLjQuMTA4IEJydEJlZ2luTWVyZ2VDZWxscyAqL1xuZnVuY3Rpb24gd3JpdGVfQnJ0QmVnaW5NZXJnZUNlbGxzKGNudCwgbykge1xuXHRpZihvID09IG51bGwpIG8gPSBuZXdfYnVmKDQpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIGNudCk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjY1NiBCcnRITGluayAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0SExpbmsoZGF0YSwgbGVuZ3RoKSB7XG5cdHZhciBlbmQgPSBkYXRhLmwgKyBsZW5ndGg7XG5cdHZhciByZnggPSBwYXJzZV9VbmNoZWNrZWRSZlgoZGF0YSwgMTYpO1xuXHR2YXIgcmVsSWQgPSBwYXJzZV9YTE51bGxhYmxlV2lkZVN0cmluZyhkYXRhKTtcblx0dmFyIGxvYyA9IHBhcnNlX1hMV2lkZVN0cmluZyhkYXRhKTtcblx0dmFyIHRvb2x0aXAgPSBwYXJzZV9YTFdpZGVTdHJpbmcoZGF0YSk7XG5cdHZhciBkaXNwbGF5ID0gcGFyc2VfWExXaWRlU3RyaW5nKGRhdGEpO1xuXHRkYXRhLmwgPSBlbmQ7XG5cdHZhciBvID0gKHtyZng6cmZ4LCByZWxJZDpyZWxJZCwgbG9jOmxvYywgZGlzcGxheTpkaXNwbGF5fSk7XG5cdGlmKHRvb2x0aXApIG8uVG9vbHRpcCA9IHRvb2x0aXA7XG5cdHJldHVybiBvO1xufVxuZnVuY3Rpb24gd3JpdGVfQnJ0SExpbmsobCwgcklkKSB7XG5cdHZhciBvID0gbmV3X2J1Zig1MCs0KihsWzFdLlRhcmdldC5sZW5ndGggKyAobFsxXS5Ub29sdGlwIHx8IFwiXCIpLmxlbmd0aCkpO1xuXHR3cml0ZV9VbmNoZWNrZWRSZlgoe3M6ZGVjb2RlX2NlbGwobFswXSksIGU6ZGVjb2RlX2NlbGwobFswXSl9LCBvKTtcblx0d3JpdGVfUmVsSUQoXCJySWRcIiArIHJJZCwgbyk7XG5cdHZhciBsb2NpZHggPSBsWzFdLlRhcmdldC5pbmRleE9mKFwiI1wiKTtcblx0dmFyIGxvYyA9IGxvY2lkeCA9PSAtMSA/IFwiXCIgOiBsWzFdLlRhcmdldC5zbGljZShsb2NpZHgrMSk7XG5cdHdyaXRlX1hMV2lkZVN0cmluZyhsb2MgfHwgXCJcIiwgbyk7XG5cdHdyaXRlX1hMV2lkZVN0cmluZyhsWzFdLlRvb2x0aXAgfHwgXCJcIiwgbyk7XG5cdHdyaXRlX1hMV2lkZVN0cmluZyhcIlwiLCBvKTtcblx0cmV0dXJuIG8uc2xpY2UoMCwgby5sKTtcbn1cblxuLyogW01TLVhMU0JdIDIuNC42IEJydEFyckZtbGEgKi9cbmZ1bmN0aW9uIHBhcnNlX0JydEFyckZtbGEoZGF0YSwgbGVuZ3RoLCBvcHRzKSB7XG5cdHZhciBlbmQgPSBkYXRhLmwgKyBsZW5ndGg7XG5cdHZhciByZnggPSBwYXJzZV9SZlgoZGF0YSwgMTYpO1xuXHR2YXIgZkFsd2F5c0NhbGMgPSBkYXRhLnJlYWRfc2hpZnQoMSk7XG5cdHZhciBvID0gW3JmeF07IG9bMl0gPSBmQWx3YXlzQ2FsYztcblx0aWYob3B0cy5jZWxsRm9ybXVsYSkge1xuXHRcdHZhciBmb3JtdWxhID0gcGFyc2VfWExTQkFycmF5UGFyc2VkRm9ybXVsYShkYXRhLCBlbmQgLSBkYXRhLmwsIG9wdHMpO1xuXHRcdG9bMV0gPSBmb3JtdWxhO1xuXHR9IGVsc2UgZGF0YS5sID0gZW5kO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC43NDIgQnJ0U2hyRm1sYSAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0U2hyRm1sYShkYXRhLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGVuZCA9IGRhdGEubCArIGxlbmd0aDtcblx0dmFyIHJmeCA9IHBhcnNlX1VuY2hlY2tlZFJmWChkYXRhLCAxNik7XG5cdHZhciBvID0gW3JmeF07XG5cdGlmKG9wdHMuY2VsbEZvcm11bGEpIHtcblx0XHR2YXIgZm9ybXVsYSA9IHBhcnNlX1hMU0JTaGFyZWRQYXJzZWRGb3JtdWxhKGRhdGEsIGVuZCAtIGRhdGEubCwgb3B0cyk7XG5cdFx0b1sxXSA9IGZvcm11bGE7XG5cdFx0ZGF0YS5sID0gZW5kO1xuXHR9IGVsc2UgZGF0YS5sID0gZW5kO1xuXHRyZXR1cm4gbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC4zMjMgQnJ0Q29sSW5mbyAqL1xuLyogVE9ETzogb25jZSBYTFMgQ29sSW5mbyBpcyBzZXQsIGNvbWJpbmUgdGhlIGZ1bmN0aW9ucyAqL1xuZnVuY3Rpb24gd3JpdGVfQnJ0Q29sSW5mbyhDLCBjb2wsIG8pIHtcblx0aWYobyA9PSBudWxsKSBvID0gbmV3X2J1ZigxOCk7XG5cdHZhciBwID0gY29sX29ial93KEMsIGNvbCk7XG5cdG8ud3JpdGVfc2hpZnQoLTQsIEMpO1xuXHRvLndyaXRlX3NoaWZ0KC00LCBDKTtcblx0by53cml0ZV9zaGlmdCg0LCAocC53aWR0aCB8fCAxMCkgKiAyNTYpO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDAvKml4ZmUqLyk7IC8vIHN0eWxlXG5cdHZhciBmbGFncyA9IDA7XG5cdGlmKGNvbC5oaWRkZW4pIGZsYWdzIHw9IDB4MDE7XG5cdGlmKHR5cGVvZiBwLndpZHRoID09ICdudW1iZXInKSBmbGFncyB8PSAweDAyO1xuXHRvLndyaXRlX3NoaWZ0KDEsIGZsYWdzKTsgLy8gYml0IGZsYWdcblx0by53cml0ZV9zaGlmdCgxLCAwKTsgLy8gYml0IGZsYWdcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuNjcyIEJydE1hcmdpbnMgKi9cbnZhciBCcnRNYXJnaW5LZXlzID0gW1wibGVmdFwiLFwicmlnaHRcIixcInRvcFwiLFwiYm90dG9tXCIsXCJoZWFkZXJcIixcImZvb3RlclwiXTtcbmZ1bmN0aW9uIHBhcnNlX0JydE1hcmdpbnMoZGF0YSkge1xuXHR2YXIgbWFyZ2lucyA9ICh7fSk7XG5cdEJydE1hcmdpbktleXMuZm9yRWFjaChmdW5jdGlvbihrKSB7IG1hcmdpbnNba10gPSBwYXJzZV9YbnVtKGRhdGEsIDgpOyB9KTtcblx0cmV0dXJuIG1hcmdpbnM7XG59XG5mdW5jdGlvbiB3cml0ZV9CcnRNYXJnaW5zKG1hcmdpbnMsIG8pIHtcblx0aWYobyA9PSBudWxsKSBvID0gbmV3X2J1Zig2KjgpO1xuXHRkZWZhdWx0X21hcmdpbnMobWFyZ2lucyk7XG5cdEJydE1hcmdpbktleXMuZm9yRWFjaChmdW5jdGlvbihrKSB7IHdyaXRlX1hudW0oKG1hcmdpbnMpW2tdLCBvKTsgfSk7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjI5MiBCcnRCZWdpbldzVmlldyAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0QmVnaW5Xc1ZpZXcoZGF0YSkge1xuXHR2YXIgZiA9IGRhdGEucmVhZF9zaGlmdCgyKTtcblx0ZGF0YS5sICs9IDI4O1xuXHRyZXR1cm4geyBSVEw6IGYgJiAweDIwIH07XG59XG5mdW5jdGlvbiB3cml0ZV9CcnRCZWdpbldzVmlldyh3cywgV29ya2Jvb2ssIG8pIHtcblx0aWYobyA9PSBudWxsKSBvID0gbmV3X2J1ZigzMCk7XG5cdHZhciBmID0gMHgzOWM7XG5cdC8vICRGbG93SWdub3JlXG5cdGlmKCgoKFdvcmtib29rfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCkgZiB8PSAweDIwO1xuXHRvLndyaXRlX3NoaWZ0KDIsIGYpOyAvLyBiaXQgZmxhZ1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApO1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApOyAvLyB2aWV3IGZpcnN0IHJvd1xuXHRvLndyaXRlX3NoaWZ0KDQsIDApOyAvLyB2aWV3IGZpcnN0IGNvbFxuXHRvLndyaXRlX3NoaWZ0KDEsIDApOyAvLyBncmlkbGluZSBjb2xvciBJQ1Zcblx0by53cml0ZV9zaGlmdCgxLCAwKTtcblx0by53cml0ZV9zaGlmdCgyLCAwKTtcblx0by53cml0ZV9zaGlmdCgyLCAxMDApOyAvLyB6b29tIHNjYWxlXG5cdG8ud3JpdGVfc2hpZnQoMiwgMCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgMCk7XG5cdG8ud3JpdGVfc2hpZnQoMiwgMCk7XG5cdG8ud3JpdGVfc2hpZnQoNCwgMCk7IC8vIHdvcmtib29rIHZpZXcgaWRcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuNzQwIEJydFNoZWV0UHJvdGVjdGlvbiAqL1xuZnVuY3Rpb24gd3JpdGVfQnJ0U2hlZXRQcm90ZWN0aW9uKHNwLCBvKSB7XG5cdGlmKG8gPT0gbnVsbCkgbyA9IG5ld19idWYoMTYqNCsyKTtcblx0by53cml0ZV9zaGlmdCgyLCBzcC5wYXNzd29yZCA/IGNyeXB0b19DcmVhdGVQYXNzd29yZFZlcmlmaWVyX01ldGhvZDEoc3AucGFzc3dvcmQpIDogMCk7XG5cdG8ud3JpdGVfc2hpZnQoNCwgMSk7IC8vIHRoaXMgcmVjb3JkIHNob3VsZCBub3QgYmUgd3JpdHRlbiBpZiBubyBwcm90ZWN0aW9uXG5cdFtcblx0XHRbXCJvYmplY3RzXCIsICAgICAgICAgICAgIGZhbHNlXSwgLy8gZk9iamVjdHNcblx0XHRbXCJzY2VuYXJpb3NcIiwgICAgICAgICAgIGZhbHNlXSwgLy8gZlNjZW5hcmlvc1xuXHRcdFtcImZvcm1hdENlbGxzXCIsICAgICAgICAgIHRydWVdLCAvLyBmRm9ybWF0Q2VsbHNcblx0XHRbXCJmb3JtYXRDb2x1bW5zXCIsICAgICAgICB0cnVlXSwgLy8gZkZvcm1hdENvbHVtbnNcblx0XHRbXCJmb3JtYXRSb3dzXCIsICAgICAgICAgICB0cnVlXSwgLy8gZkZvcm1hdFJvd3Ncblx0XHRbXCJpbnNlcnRDb2x1bW5zXCIsICAgICAgICB0cnVlXSwgLy8gZkluc2VydENvbHVtbnNcblx0XHRbXCJpbnNlcnRSb3dzXCIsICAgICAgICAgICB0cnVlXSwgLy8gZkluc2VydFJvd3Ncblx0XHRbXCJpbnNlcnRIeXBlcmxpbmtzXCIsICAgICB0cnVlXSwgLy8gZkluc2VydEh5cGVybGlua3Ncblx0XHRbXCJkZWxldGVDb2x1bW5zXCIsICAgICAgICB0cnVlXSwgLy8gZkRlbGV0ZUNvbHVtbnNcblx0XHRbXCJkZWxldGVSb3dzXCIsICAgICAgICAgICB0cnVlXSwgLy8gZkRlbGV0ZVJvd3Ncblx0XHRbXCJzZWxlY3RMb2NrZWRDZWxsc1wiLCAgIGZhbHNlXSwgLy8gZlNlbExvY2tlZENlbGxzXG5cdFx0W1wic29ydFwiLCAgICAgICAgICAgICAgICAgdHJ1ZV0sIC8vIGZTb3J0XG5cdFx0W1wiYXV0b0ZpbHRlclwiLCAgICAgICAgICAgdHJ1ZV0sIC8vIGZBdXRvRmlsdGVyXG5cdFx0W1wicGl2b3RUYWJsZXNcIiwgICAgICAgICAgdHJ1ZV0sIC8vIGZQaXZvdFRhYmxlc1xuXHRcdFtcInNlbGVjdFVubG9ja2VkQ2VsbHNcIiwgZmFsc2VdICAvLyBmU2VsVW5sb2NrZWRDZWxsc1xuXHRdLmZvckVhY2goZnVuY3Rpb24obikge1xuaWYoblsxXSkgby53cml0ZV9zaGlmdCg0LCBzcFtuWzBdXSAhPSBudWxsICYmICFzcFtuWzBdXSA/IDEgOiAwKTtcblx0XHRlbHNlICAgICAgby53cml0ZV9zaGlmdCg0LCBzcFtuWzBdXSAhPSBudWxsICYmIHNwW25bMF1dID8gMCA6IDEpO1xuXHR9KTtcblx0cmV0dXJuIG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjEuNy42MSBXb3Jrc2hlZXQgKi9cbmZ1bmN0aW9uIHBhcnNlX3dzX2JpbihkYXRhLCBfb3B0cywgaWR4LCByZWxzLCB3YiwgdGhlbWVzLCBzdHlsZXMpIHtcblx0aWYoIWRhdGEpIHJldHVybiBkYXRhO1xuXHR2YXIgb3B0cyA9IF9vcHRzIHx8IHt9O1xuXHRpZighcmVscykgcmVscyA9IHsnIWlkJzp7fX07XG5cdGlmKERFTlNFICE9IG51bGwgJiYgb3B0cy5kZW5zZSA9PSBudWxsKSBvcHRzLmRlbnNlID0gREVOU0U7XG5cdHZhciBzID0gKG9wdHMuZGVuc2UgPyBbXSA6IHt9KTtcblxuXHR2YXIgcmVmO1xuXHR2YXIgcmVmZ3Vlc3MgPSB7czoge3I6MjAwMDAwMCwgYzoyMDAwMDAwfSwgZToge3I6MCwgYzowfSB9O1xuXG5cdHZhciBwYXNzID0gZmFsc2UsIGVuZCA9IGZhbHNlO1xuXHR2YXIgcm93LCBwLCBjZiwgUiwgQywgYWRkciwgc3N0ciwgcnIsIGNlbGw7XG5cdHZhciBtZXJnZXMgPSBbXTtcblx0b3B0cy5iaWZmID0gMTI7XG5cdG9wdHNbJyFyb3cnXSA9IDA7XG5cblx0dmFyIGFpID0gMCwgYWYgPSBmYWxzZTtcblxuXHR2YXIgYXJyYXlmID0gW107XG5cdHZhciBzaGFyZWRmID0ge307XG5cdHZhciBzdXBib29rcyA9IG9wdHMuc3VwYm9va3MgfHwgKFtbXV0pO1xuXHRzdXBib29rcy5zaGFyZWRmID0gc2hhcmVkZjtcblx0c3VwYm9va3MuYXJyYXlmID0gYXJyYXlmO1xuXHRzdXBib29rcy5TaGVldE5hbWVzID0gd2IuU2hlZXROYW1lcyB8fCB3Yi5TaGVldHMubWFwKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHgubmFtZTsgfSk7XG5cdGlmKCFvcHRzLnN1cGJvb2tzKSB7XG5cdFx0b3B0cy5zdXBib29rcyA9IHN1cGJvb2tzO1xuXHRcdGlmKHdiLk5hbWVzKSBmb3IodmFyIGkgPSAwOyBpIDwgd2IuTmFtZXMubGVuZ3RoOyArK2kpIHN1cGJvb2tzWzBdW2krMV0gPSB3Yi5OYW1lc1tpXTtcblx0fVxuXG5cdHZhciBjb2xpbmZvID0gW10sIHJvd2luZm8gPSBbXTtcblx0dmFyIHNlZW5jb2wgPSBmYWxzZTtcblxuXHRyZWNvcmRob3BwZXIoZGF0YSwgZnVuY3Rpb24gd3NfcGFyc2UodmFsLCBSX24sIFJUKSB7XG5cdFx0aWYoZW5kKSByZXR1cm47XG5cdFx0c3dpdGNoKFJUKSB7XG5cdFx0XHRjYXNlIDB4MDA5NDogLyogJ0JydFdzRGltJyAqL1xuXHRcdFx0XHRyZWYgPSB2YWw7IGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAwMDA6IC8qICdCcnRSb3dIZHInICovXG5cdFx0XHRcdHJvdyA9IHZhbDtcblx0XHRcdFx0aWYob3B0cy5zaGVldFJvd3MgJiYgb3B0cy5zaGVldFJvd3MgPD0gcm93LnIpIGVuZD10cnVlO1xuXHRcdFx0XHRyciA9IGVuY29kZV9yb3coUiA9IHJvdy5yKTtcblx0XHRcdFx0b3B0c1snIXJvdyddID0gcm93LnI7XG5cdFx0XHRcdGlmKHZhbC5oaWRkZW4gfHwgdmFsLmhwdCB8fCB2YWwubGV2ZWwgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGlmKHZhbC5ocHQpIHZhbC5ocHggPSBwdDJweCh2YWwuaHB0KTtcblx0XHRcdFx0XHRyb3dpbmZvW3ZhbC5yXSA9IHZhbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAweDAwMDI6IC8qICdCcnRDZWxsUmsnICovXG5cdFx0XHRjYXNlIDB4MDAwMzogLyogJ0JydENlbGxFcnJvcicgKi9cblx0XHRcdGNhc2UgMHgwMDA0OiAvKiAnQnJ0Q2VsbEJvb2wnICovXG5cdFx0XHRjYXNlIDB4MDAwNTogLyogJ0JydENlbGxSZWFsJyAqL1xuXHRcdFx0Y2FzZSAweDAwMDY6IC8qICdCcnRDZWxsU3QnICovXG5cdFx0XHRjYXNlIDB4MDAwNzogLyogJ0JydENlbGxJc3N0JyAqL1xuXHRcdFx0Y2FzZSAweDAwMDg6IC8qICdCcnRGbWxhU3RyaW5nJyAqL1xuXHRcdFx0Y2FzZSAweDAwMDk6IC8qICdCcnRGbWxhTnVtJyAqL1xuXHRcdFx0Y2FzZSAweDAwMEE6IC8qICdCcnRGbWxhQm9vbCcgKi9cblx0XHRcdGNhc2UgMHgwMDBCOiAvKiAnQnJ0Rm1sYUVycm9yJyAqL1xuXHRcdFx0XHRwID0gKHt0OnZhbFsyXX0pO1xuXHRcdFx0XHRzd2l0Y2godmFsWzJdKSB7XG5cdFx0XHRcdFx0Y2FzZSAnbic6IHAudiA9IHZhbFsxXTsgYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncyc6IHNzdHIgPSBzdHJzW3ZhbFsxXV07IHAudiA9IHNzdHIudDsgcC5yID0gc3N0ci5yOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdiJzogcC52ID0gdmFsWzFdID8gdHJ1ZSA6IGZhbHNlOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdlJzogcC52ID0gdmFsWzFdOyBpZihvcHRzLmNlbGxUZXh0ICE9PSBmYWxzZSkgcC53ID0gQkVycltwLnZdOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdzdHInOiBwLnQgPSAncyc7IHAudiA9IHZhbFsxXTsgYnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoKGNmID0gc3R5bGVzLkNlbGxYZlt2YWxbMF0uaVN0eWxlUmVmXSkpIHNhZmVfZm9ybWF0KHAsY2YubnVtRm10SWQsbnVsbCxvcHRzLCB0aGVtZXMsIHN0eWxlcyk7XG5cdFx0XHRcdEMgPSB2YWxbMF0uYztcblx0XHRcdFx0aWYob3B0cy5kZW5zZSkgeyBpZighc1tSXSkgc1tSXSA9IFtdOyBzW1JdW0NdID0gcDsgfVxuXHRcdFx0XHRlbHNlIHNbZW5jb2RlX2NvbChDKSArIHJyXSA9IHA7XG5cdFx0XHRcdGlmKG9wdHMuY2VsbEZvcm11bGEpIHtcblx0XHRcdFx0XHRhZiA9IGZhbHNlO1xuXHRcdFx0XHRcdGZvcihhaSA9IDA7IGFpIDwgYXJyYXlmLmxlbmd0aDsgKythaSkge1xuXHRcdFx0XHRcdFx0dmFyIGFpaSA9IGFycmF5ZlthaV07XG5cdFx0XHRcdFx0XHRpZihyb3cuciA+PSBhaWlbMF0ucy5yICYmIHJvdy5yIDw9IGFpaVswXS5lLnIpXG5cdFx0XHRcdFx0XHRcdGlmKEMgPj0gYWlpWzBdLnMuYyAmJiBDIDw9IGFpaVswXS5lLmMpIHtcblx0XHRcdFx0XHRcdFx0XHRwLkYgPSBlbmNvZGVfcmFuZ2UoYWlpWzBdKTsgYWYgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKCFhZiAmJiB2YWwubGVuZ3RoID4gMykgcC5mID0gdmFsWzNdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKHJlZmd1ZXNzLnMuciA+IHJvdy5yKSByZWZndWVzcy5zLnIgPSByb3cucjtcblx0XHRcdFx0aWYocmVmZ3Vlc3Mucy5jID4gQykgcmVmZ3Vlc3Mucy5jID0gQztcblx0XHRcdFx0aWYocmVmZ3Vlc3MuZS5yIDwgcm93LnIpIHJlZmd1ZXNzLmUuciA9IHJvdy5yO1xuXHRcdFx0XHRpZihyZWZndWVzcy5lLmMgPCBDKSByZWZndWVzcy5lLmMgPSBDO1xuXHRcdFx0XHRpZihvcHRzLmNlbGxEYXRlcyAmJiBjZiAmJiBwLnQgPT0gJ24nICYmIFNTRi5pc19kYXRlKFNTRi5fdGFibGVbY2YubnVtRm10SWRdKSkge1xuXHRcdFx0XHRcdHZhciBfZCA9IFNTRi5wYXJzZV9kYXRlX2NvZGUocC52KTsgaWYoX2QpIHsgcC50ID0gJ2QnOyBwLnYgPSBuZXcgRGF0ZShfZC55LCBfZC5tLTEsX2QuZCxfZC5ILF9kLk0sX2QuUyxfZC51KTsgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDB4MDAwMTogLyogJ0JydENlbGxCbGFuaycgKi9cblx0XHRcdFx0aWYoIW9wdHMuc2hlZXRTdHVicyB8fCBwYXNzKSBicmVhaztcblx0XHRcdFx0cCA9ICh7dDoneicsdjp1bmRlZmluZWR9KTtcblx0XHRcdFx0QyA9IHZhbFswXS5jO1xuXHRcdFx0XHRpZihvcHRzLmRlbnNlKSB7IGlmKCFzW1JdKSBzW1JdID0gW107IHNbUl1bQ10gPSBwOyB9XG5cdFx0XHRcdGVsc2Ugc1tlbmNvZGVfY29sKEMpICsgcnJdID0gcDtcblx0XHRcdFx0aWYocmVmZ3Vlc3Mucy5yID4gcm93LnIpIHJlZmd1ZXNzLnMuciA9IHJvdy5yO1xuXHRcdFx0XHRpZihyZWZndWVzcy5zLmMgPiBDKSByZWZndWVzcy5zLmMgPSBDO1xuXHRcdFx0XHRpZihyZWZndWVzcy5lLnIgPCByb3cucikgcmVmZ3Vlc3MuZS5yID0gcm93LnI7XG5cdFx0XHRcdGlmKHJlZmd1ZXNzLmUuYyA8IEMpIHJlZmd1ZXNzLmUuYyA9IEM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDB4MDBCMDogLyogJ0JydE1lcmdlQ2VsbCcgKi9cblx0XHRcdFx0bWVyZ2VzLnB1c2godmFsKTsgYnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwMUVFOiAvKiAnQnJ0SExpbmsnICovXG5cdFx0XHRcdHZhciByZWwgPSByZWxzWychaWQnXVt2YWwucmVsSWRdO1xuXHRcdFx0XHRpZihyZWwpIHtcblx0XHRcdFx0XHR2YWwuVGFyZ2V0ID0gcmVsLlRhcmdldDtcblx0XHRcdFx0XHRpZih2YWwubG9jKSB2YWwuVGFyZ2V0ICs9IFwiI1wiK3ZhbC5sb2M7XG5cdFx0XHRcdFx0dmFsLlJlbCA9IHJlbDtcblx0XHRcdFx0fSBlbHNlIGlmKHZhbC5yZWxJZCA9PSAnJykge1xuXHRcdFx0XHRcdHZhbC5UYXJnZXQgPSBcIiNcIiArIHZhbC5sb2M7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yKFI9dmFsLnJmeC5zLnI7Ujw9dmFsLnJmeC5lLnI7KytSKSBmb3IoQz12YWwucmZ4LnMuYztDPD12YWwucmZ4LmUuYzsrK0MpIHtcblx0XHRcdFx0XHRpZihvcHRzLmRlbnNlKSB7XG5cdFx0XHRcdFx0XHRpZighc1tSXSkgc1tSXSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYoIXNbUl1bQ10pIHNbUl1bQ10gPSB7dDoneicsdjp1bmRlZmluZWR9O1xuXHRcdFx0XHRcdFx0c1tSXVtDXS5sID0gdmFsO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhZGRyID0gZW5jb2RlX2NlbGwoe2M6QyxyOlJ9KTtcblx0XHRcdFx0XHRcdGlmKCFzW2FkZHJdKSBzW2FkZHJdID0ge3Q6J3onLHY6dW5kZWZpbmVkfTtcblx0XHRcdFx0XHRcdHNbYWRkcl0ubCA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwMUFBOiAvKiAnQnJ0QXJyRm1sYScgKi9cblx0XHRcdFx0aWYoIW9wdHMuY2VsbEZvcm11bGEpIGJyZWFrO1xuXHRcdFx0XHRhcnJheWYucHVzaCh2YWwpO1xuXHRcdFx0XHRjZWxsID0gKChvcHRzLmRlbnNlID8gc1tSXVtDXSA6IHNbZW5jb2RlX2NvbChDKSArIHJyXSkpO1xuXHRcdFx0XHRjZWxsLmYgPSBzdHJpbmdpZnlfZm9ybXVsYSh2YWxbMV0sIHJlZmd1ZXNzLCB7cjpyb3cuciwgYzpDfSwgc3VwYm9va3MsIG9wdHMpO1xuXHRcdFx0XHRjZWxsLkYgPSBlbmNvZGVfcmFuZ2UodmFsWzBdKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIDB4MDFBQjogLyogJ0JydFNockZtbGEnICovXG5cdFx0XHRcdGlmKCFvcHRzLmNlbGxGb3JtdWxhKSBicmVhaztcblx0XHRcdFx0c2hhcmVkZltlbmNvZGVfY2VsbCh2YWxbMF0ucyldID0gdmFsWzFdO1xuXHRcdFx0XHRjZWxsID0gKG9wdHMuZGVuc2UgPyBzW1JdW0NdIDogc1tlbmNvZGVfY29sKEMpICsgcnJdKTtcblx0XHRcdFx0Y2VsbC5mID0gc3RyaW5naWZ5X2Zvcm11bGEodmFsWzFdLCByZWZndWVzcywge3I6cm93LnIsIGM6Q30sIHN1cGJvb2tzLCBvcHRzKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdC8qIGlkZW50aWNhbCB0byAnQ29sSW5mbycgaW4gWExTICovXG5cdFx0XHRjYXNlIDB4MDAzQzogLyogJ0JydENvbEluZm8nICovXG5cdFx0XHRcdGlmKCFvcHRzLmNlbGxTdHlsZXMpIGJyZWFrO1xuXHRcdFx0XHR3aGlsZSh2YWwuZSA+PSB2YWwucykge1xuXHRcdFx0XHRcdGNvbGluZm9bdmFsLmUtLV0gPSB7IHdpZHRoOiB2YWwudy8yNTYsIGhpZGRlbjogISEodmFsLmZsYWdzICYgMHgwMSkgfTtcblx0XHRcdFx0XHRpZighc2VlbmNvbCkgeyBzZWVuY29sID0gdHJ1ZTsgZmluZF9tZHdfY29sdyh2YWwudy8yNTYpOyB9XG5cdFx0XHRcdFx0cHJvY2Vzc19jb2woY29saW5mb1t2YWwuZSsxXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwMEExOiAvKiAnQnJ0QmVnaW5BRmlsdGVyJyAqL1xuXHRcdFx0XHRzWychYXV0b2ZpbHRlciddID0geyByZWY6ZW5jb2RlX3JhbmdlKHZhbCkgfTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwMURDOiAvKiAnQnJ0TWFyZ2lucycgKi9cblx0XHRcdFx0c1snIW1hcmdpbnMnXSA9IHZhbDtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwMDkzOiAvKiAnQnJ0V3NQcm9wJyAqL1xuXHRcdFx0XHRpZighd2IuU2hlZXRzW2lkeF0pIHdiLlNoZWV0c1tpZHhdID0ge307XG5cdFx0XHRcdGlmKHZhbC5uYW1lKSB3Yi5TaGVldHNbaWR4XS5Db2RlTmFtZSA9IHZhbC5uYW1lO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAweDAwODk6IC8qICdCcnRCZWdpbldzVmlldycgKi9cblx0XHRcdFx0aWYoIXdiLlZpZXdzKSB3Yi5WaWV3cyA9IFt7fV07XG5cdFx0XHRcdGlmKCF3Yi5WaWV3c1swXSkgd2IuVmlld3NbMF0gPSB7fTtcblx0XHRcdFx0aWYodmFsLlJUTCkgd2IuVmlld3NbMF0uUlRMID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwMUU1OiAvKiAnQnJ0V3NGbXRJbmZvJyAqL1xuXHRcdFx0XHRicmVhaztcblx0XHRcdC8qIGNhc2UgJ0JydFVpZCcgKi9cblx0XHRcdGNhc2UgMHgwMEFGOiAvKiAnQnJ0QUZpbHRlckRhdGVHcm91cEl0ZW0nICovXG5cdFx0XHRjYXNlIDB4MDI4NDogLyogJ0JydEFjdGl2ZVgnICovXG5cdFx0XHRjYXNlIDB4MDI3MTogLyogJ0JydEJpZ05hbWUnICovXG5cdFx0XHRjYXNlIDB4MDIzMjogLyogJ0JydEJrSGltJyAqL1xuXHRcdFx0Y2FzZSAweDAxOEM6IC8qICdCcnRCcmsnICovXG5cdFx0XHRjYXNlIDB4MDQ1ODogLyogJ0JydENGSWNvbicgKi9cblx0XHRcdGNhc2UgMHgwNDdBOiAvKiAnQnJ0Q0ZSdWxlRXh0JyAqL1xuXHRcdFx0Y2FzZSAweDAxRDc6IC8qICdCcnRDRlZPJyAqL1xuXHRcdFx0Y2FzZSAweDA0MUE6IC8qICdCcnRDRlZPMTQnICovXG5cdFx0XHRjYXNlIDB4MDI4OTogLyogJ0JydENlbGxJZ25vcmVFQycgKi9cblx0XHRcdGNhc2UgMHgwNDUxOiAvKiAnQnJ0Q2VsbElnbm9yZUVDMTQnICovXG5cdFx0XHRjYXNlIDB4MDAzMTogLyogJ0JydENlbGxNZXRhJyAqL1xuXHRcdFx0Y2FzZSAweDAyNEQ6IC8qICdCcnRDZWxsU21hcnRUYWdQcm9wZXJ0eScgKi9cblx0XHRcdGNhc2UgMHgwMjVGOiAvKiAnQnJ0Q2VsbFdhdGNoJyAqL1xuXHRcdFx0Y2FzZSAweDAyMzQ6IC8qICdCcnRDb2xvcicgKi9cblx0XHRcdGNhc2UgMHgwNDFGOiAvKiAnQnJ0Q29sb3IxNCcgKi9cblx0XHRcdGNhc2UgMHgwMEE4OiAvKiAnQnJ0Q29sb3JGaWx0ZXInICovXG5cdFx0XHRjYXNlIDB4MDBBRTogLyogJ0JydEN1c3RvbUZpbHRlcicgKi9cblx0XHRcdGNhc2UgMHgwNDlDOiAvKiAnQnJ0Q3VzdG9tRmlsdGVyMTQnICovXG5cdFx0XHRjYXNlIDB4MDFGMzogLyogJ0JydERSZWYnICovXG5cdFx0XHRjYXNlIDB4MDA0MDogLyogJ0JydERWYWwnICovXG5cdFx0XHRjYXNlIDB4MDQxRDogLyogJ0JydERWYWwxNCcgKi9cblx0XHRcdGNhc2UgMHgwMjI2OiAvKiAnQnJ0RHJhd2luZycgKi9cblx0XHRcdGNhc2UgMHgwMEFCOiAvKiAnQnJ0RHluYW1pY0ZpbHRlcicgKi9cblx0XHRcdGNhc2UgMHgwMEE3OiAvKiAnQnJ0RmlsdGVyJyAqL1xuXHRcdFx0Y2FzZSAweDA0OTk6IC8qICdCcnRGaWx0ZXIxNCcgKi9cblx0XHRcdGNhc2UgMHgwMEE5OiAvKiAnQnJ0SWNvbkZpbHRlcicgKi9cblx0XHRcdGNhc2UgMHgwNDlEOiAvKiAnQnJ0SWNvbkZpbHRlcjE0JyAqL1xuXHRcdFx0Y2FzZSAweDAyMjc6IC8qICdCcnRMZWdhY3lEcmF3aW5nJyAqL1xuXHRcdFx0Y2FzZSAweDAyMjg6IC8qICdCcnRMZWdhY3lEcmF3aW5nSEYnICovXG5cdFx0XHRjYXNlIDB4MDI5NTogLyogJ0JydExpc3RQYXJ0JyAqL1xuXHRcdFx0Y2FzZSAweDAyN0Y6IC8qICdCcnRPbGVPYmplY3QnICovXG5cdFx0XHRjYXNlIDB4MDFERTogLyogJ0JydFBhZ2VTZXR1cCcgKi9cblx0XHRcdGNhc2UgMHgwMDk3OiAvKiAnQnJ0UGFuZScgKi9cblx0XHRcdGNhc2UgMHgwMjE5OiAvKiAnQnJ0UGhvbmV0aWNJbmZvJyAqL1xuXHRcdFx0Y2FzZSAweDAxREQ6IC8qICdCcnRQcmludE9wdGlvbnMnICovXG5cdFx0XHRjYXNlIDB4MDIxODogLyogJ0JydFJhbmdlUHJvdGVjdGlvbicgKi9cblx0XHRcdGNhc2UgMHgwNDRGOiAvKiAnQnJ0UmFuZ2VQcm90ZWN0aW9uMTQnICovXG5cdFx0XHRjYXNlIDB4MDJBODogLyogJ0JydFJhbmdlUHJvdGVjdGlvbklzbycgKi9cblx0XHRcdGNhc2UgMHgwNDUwOiAvKiAnQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvMTQnICovXG5cdFx0XHRjYXNlIDB4MDQwMDogLyogJ0JydFJ3RGVzY2VudCcgKi9cblx0XHRcdGNhc2UgMHgwMDk4OiAvKiAnQnJ0U2VsJyAqL1xuXHRcdFx0Y2FzZSAweDAyOTc6IC8qICdCcnRTaGVldENhbGNQcm9wJyAqL1xuXHRcdFx0Y2FzZSAweDAyMTc6IC8qICdCcnRTaGVldFByb3RlY3Rpb24nICovXG5cdFx0XHRjYXNlIDB4MDJBNjogLyogJ0JydFNoZWV0UHJvdGVjdGlvbklzbycgKi9cblx0XHRcdGNhc2UgMHgwMUY4OiAvKiAnQnJ0U2xjJyAqL1xuXHRcdFx0Y2FzZSAweDA0MTM6IC8qICdCcnRTcGFya2xpbmUnICovXG5cdFx0XHRjYXNlIDB4MDFBQzogLyogJ0JydFRhYmxlJyAqL1xuXHRcdFx0Y2FzZSAweDAwQUE6IC8qICdCcnRUb3AxMEZpbHRlcicgKi9cblx0XHRcdGNhc2UgMHgwMDMyOiAvKiAnQnJ0VmFsdWVNZXRhJyAqL1xuXHRcdFx0Y2FzZSAweDA4MTY6IC8qICdCcnRXZWJFeHRlbnNpb24nICovXG5cdFx0XHRjYXNlIDB4MDQxNTogLyogJ0JydFdzRm10SW5mb0V4MTQnICovXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDB4MDAyMzogLyogJ0JydEZSVEJlZ2luJyAqL1xuXHRcdFx0XHRwYXNzID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAyNDogLyogJ0JydEZSVEVuZCcgKi9cblx0XHRcdFx0cGFzcyA9IGZhbHNlOyBicmVhaztcblx0XHRcdGNhc2UgMHgwMDI1OiAvKiAnQnJ0QUNCZWdpbicgKi8gYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAyNjogLyogJ0JydEFDRW5kJyAqLyBicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkJlZ2luXCIpID4gMCl7LyogZW1wdHkgKi99XG5cdFx0XHRcdGVsc2UgaWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkVuZFwiKSA+IDApey8qIGVtcHR5ICovfVxuXHRcdFx0XHRlbHNlIGlmKCFwYXNzIHx8IG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHJlY29yZCBcIiArIFJUICsgXCIgXCIgKyBSX24pO1xuXHRcdH1cblx0fSwgb3B0cyk7XG5cblx0ZGVsZXRlIG9wdHMuc3VwYm9va3M7XG5cdGRlbGV0ZSBvcHRzWychcm93J107XG5cblx0aWYoIXNbXCIhcmVmXCJdICYmIChyZWZndWVzcy5zLnIgPCAyMDAwMDAwIHx8IHJlZiAmJiAocmVmLmUuciA+IDAgfHwgcmVmLmUuYyA+IDAgfHwgcmVmLnMuciA+IDAgfHwgcmVmLnMuYyA+IDApKSkgc1tcIiFyZWZcIl0gPSBlbmNvZGVfcmFuZ2UocmVmIHx8IHJlZmd1ZXNzKTtcblx0aWYob3B0cy5zaGVldFJvd3MgJiYgc1tcIiFyZWZcIl0pIHtcblx0XHR2YXIgdG1wcmVmID0gc2FmZV9kZWNvZGVfcmFuZ2Uoc1tcIiFyZWZcIl0pO1xuXHRcdGlmKG9wdHMuc2hlZXRSb3dzIDwgK3RtcHJlZi5lLnIpIHtcblx0XHRcdHRtcHJlZi5lLnIgPSBvcHRzLnNoZWV0Um93cyAtIDE7XG5cdFx0XHRpZih0bXByZWYuZS5yID4gcmVmZ3Vlc3MuZS5yKSB0bXByZWYuZS5yID0gcmVmZ3Vlc3MuZS5yO1xuXHRcdFx0aWYodG1wcmVmLmUuciA8IHRtcHJlZi5zLnIpIHRtcHJlZi5zLnIgPSB0bXByZWYuZS5yO1xuXHRcdFx0aWYodG1wcmVmLmUuYyA+IHJlZmd1ZXNzLmUuYykgdG1wcmVmLmUuYyA9IHJlZmd1ZXNzLmUuYztcblx0XHRcdGlmKHRtcHJlZi5lLmMgPCB0bXByZWYucy5jKSB0bXByZWYucy5jID0gdG1wcmVmLmUuYztcblx0XHRcdHNbXCIhZnVsbHJlZlwiXSA9IHNbXCIhcmVmXCJdO1xuXHRcdFx0c1tcIiFyZWZcIl0gPSBlbmNvZGVfcmFuZ2UodG1wcmVmKTtcblx0XHR9XG5cdH1cblx0aWYobWVyZ2VzLmxlbmd0aCA+IDApIHNbXCIhbWVyZ2VzXCJdID0gbWVyZ2VzO1xuXHRpZihjb2xpbmZvLmxlbmd0aCA+IDApIHNbXCIhY29sc1wiXSA9IGNvbGluZm87XG5cdGlmKHJvd2luZm8ubGVuZ3RoID4gMCkgc1tcIiFyb3dzXCJdID0gcm93aW5mbztcblx0cmV0dXJuIHM7XG59XG5cbi8qIFRPRE86IHNvbWV0aGluZyB1c2VmdWwgLS0gdGhpcyBpcyBhIHN0dWIgKi9cbmZ1bmN0aW9uIHdyaXRlX3dzX2Jpbl9jZWxsKGJhLCBjZWxsLCBSLCBDLCBvcHRzLCB3cykge1xuXHRpZihjZWxsLnYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiXCI7XG5cdHZhciB2diA9IFwiXCI7XG5cdHN3aXRjaChjZWxsLnQpIHtcblx0XHRjYXNlICdiJzogdnYgPSBjZWxsLnYgPyBcIjFcIiA6IFwiMFwiOyBicmVhaztcblx0XHRjYXNlICdkJzogLy8gbm8gQnJ0Q2VsbERhdGUgOihcblx0XHRcdGNlbGwgPSBkdXAoY2VsbCk7XG5cdFx0XHRjZWxsLnogPSBjZWxsLnogfHwgU1NGLl90YWJsZVsxNF07XG5cdFx0XHRjZWxsLnYgPSBkYXRlbnVtKHBhcnNlRGF0ZShjZWxsLnYpKTsgY2VsbC50ID0gJ24nO1xuXHRcdFx0YnJlYWs7XG5cdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdGNhc2UgJ24nOiBjYXNlICdlJzogdnYgPSAnJytjZWxsLnY7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHZ2ID0gY2VsbC52OyBicmVhaztcblx0fVxuXHR2YXIgbyA9ICh7cjpSLCBjOkN9KTtcblx0LyogVE9ETzogY2VsbCBzdHlsZSAqL1xuXHRvLnMgPSBnZXRfY2VsbF9zdHlsZShvcHRzLmNlbGxYZnMsIGNlbGwsIG9wdHMpO1xuXHRpZihjZWxsLmwpIHdzWychbGlua3MnXS5wdXNoKFtlbmNvZGVfY2VsbChvKSwgY2VsbC5sXSk7XG5cdGlmKGNlbGwuYykgd3NbJyFjb21tZW50cyddLnB1c2goW2VuY29kZV9jZWxsKG8pLCBjZWxsLmNdKTtcblx0c3dpdGNoKGNlbGwudCkge1xuXHRcdGNhc2UgJ3MnOiBjYXNlICdzdHInOlxuXHRcdFx0aWYob3B0cy5ib29rU1NUKSB7XG5cdFx0XHRcdHZ2ID0gZ2V0X3NzdF9pZChvcHRzLlN0cmluZ3MsIChjZWxsLnYpKTtcblx0XHRcdFx0by50ID0gXCJzXCI7IG8udiA9IHZ2O1xuXHRcdFx0XHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0Q2VsbElzc3RcIiwgd3JpdGVfQnJ0Q2VsbElzc3QoY2VsbCwgbykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0by50ID0gXCJzdHJcIjtcblx0XHRcdFx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydENlbGxTdFwiLCB3cml0ZV9CcnRDZWxsU3QoY2VsbCwgbykpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgJ24nOlxuXHRcdFx0LyogVE9ETzogZGV0ZXJtaW5lIHRocmVzaG9sZCBmb3IgUmVhbCB2cyBSSyAqL1xuXHRcdFx0aWYoY2VsbC52ID09IChjZWxsLnYgfCAwKSAmJiBjZWxsLnYgPiAtMTAwMCAmJiBjZWxsLnYgPCAxMDAwKSB3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0Q2VsbFJrXCIsIHdyaXRlX0JydENlbGxSayhjZWxsLCBvKSk7XG5cdFx0XHRlbHNlIHdyaXRlX3JlY29yZChiYSwgXCJCcnRDZWxsUmVhbFwiLCB3cml0ZV9CcnRDZWxsUmVhbChjZWxsLCBvKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSAnYic6XG5cdFx0XHRvLnQgPSBcImJcIjtcblx0XHRcdHdyaXRlX3JlY29yZChiYSwgXCJCcnRDZWxsQm9vbFwiLCB3cml0ZV9CcnRDZWxsQm9vbChjZWxsLCBvKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSAnZSc6IC8qIFRPRE86IGVycm9yICovIG8udCA9IFwiZVwiOyBicmVhaztcblx0fVxuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0Q2VsbEJsYW5rXCIsIHdyaXRlX0JydENlbGxCbGFuayhjZWxsLCBvKSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX0NFTExUQUJMRShiYSwgd3MsIGlkeCwgb3B0cykge1xuXHR2YXIgcmFuZ2UgPSBzYWZlX2RlY29kZV9yYW5nZSh3c1snIXJlZiddIHx8IFwiQTFcIiksIHJlZiwgcnIgPSBcIlwiLCBjb2xzID0gW107XG5cdHdyaXRlX3JlY29yZChiYSwgJ0JydEJlZ2luU2hlZXREYXRhJyk7XG5cdHZhciBkZW5zZSA9IEFycmF5LmlzQXJyYXkod3MpO1xuXHR2YXIgY2FwID0gcmFuZ2UuZS5yO1xuXHRpZih3c1snIXJvd3MnXSkgY2FwID0gTWF0aC5tYXgocmFuZ2UuZS5yLCB3c1snIXJvd3MnXS5sZW5ndGggLSAxKTtcblx0Zm9yKHZhciBSID0gcmFuZ2Uucy5yOyBSIDw9IGNhcDsgKytSKSB7XG5cdFx0cnIgPSBlbmNvZGVfcm93KFIpO1xuXHRcdC8qIFtBQ0NFTExUQUJMRV0gKi9cblx0XHQvKiBCcnRSb3dIZHIgKi9cblx0XHR3cml0ZV9yb3dfaGVhZGVyKGJhLCB3cywgcmFuZ2UsIFIpO1xuXHRcdGlmKFIgPD0gcmFuZ2UuZS5yKSBmb3IodmFyIEMgPSByYW5nZS5zLmM7IEMgPD0gcmFuZ2UuZS5jOyArK0MpIHtcblx0XHRcdC8qICoxNjM4NENFTEwgKi9cblx0XHRcdGlmKFIgPT09IHJhbmdlLnMucikgY29sc1tDXSA9IGVuY29kZV9jb2woQyk7XG5cdFx0XHRyZWYgPSBjb2xzW0NdICsgcnI7XG5cdFx0XHR2YXIgY2VsbCA9IGRlbnNlID8gKHdzW1JdfHxbXSlbQ10gOiB3c1tyZWZdO1xuXHRcdFx0aWYoIWNlbGwpIGNvbnRpbnVlO1xuXHRcdFx0Lyogd3JpdGUgY2VsbCAqL1xuXHRcdFx0d3JpdGVfd3NfYmluX2NlbGwoYmEsIGNlbGwsIFIsIEMsIG9wdHMsIHdzKTtcblx0XHR9XG5cdH1cblx0d3JpdGVfcmVjb3JkKGJhLCAnQnJ0RW5kU2hlZXREYXRhJyk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX01FUkdFQ0VMTFMoYmEsIHdzKSB7XG5cdGlmKCF3cyB8fCAhd3NbJyFtZXJnZXMnXSkgcmV0dXJuO1xuXHR3cml0ZV9yZWNvcmQoYmEsICdCcnRCZWdpbk1lcmdlQ2VsbHMnLCB3cml0ZV9CcnRCZWdpbk1lcmdlQ2VsbHMod3NbJyFtZXJnZXMnXS5sZW5ndGgpKTtcblx0d3NbJyFtZXJnZXMnXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHsgd3JpdGVfcmVjb3JkKGJhLCAnQnJ0TWVyZ2VDZWxsJywgd3JpdGVfQnJ0TWVyZ2VDZWxsKG0pKTsgfSk7XG5cdHdyaXRlX3JlY29yZChiYSwgJ0JydEVuZE1lcmdlQ2VsbHMnKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfQ09MSU5GT1MoYmEsIHdzKSB7XG5cdGlmKCF3cyB8fCAhd3NbJyFjb2xzJ10pIHJldHVybjtcblx0d3JpdGVfcmVjb3JkKGJhLCAnQnJ0QmVnaW5Db2xJbmZvcycpO1xuXHR3c1snIWNvbHMnXS5mb3JFYWNoKGZ1bmN0aW9uKG0sIGkpIHsgaWYobSkgd3JpdGVfcmVjb3JkKGJhLCAnQnJ0Q29sSW5mbycsIHdyaXRlX0JydENvbEluZm8oaSwgbSkpOyB9KTtcblx0d3JpdGVfcmVjb3JkKGJhLCAnQnJ0RW5kQ29sSW5mb3MnKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfSExJTktTKGJhLCB3cywgcmVscykge1xuXHQvKiAqQnJ0SExpbmsgKi9cblx0d3NbJyFsaW5rcyddLmZvckVhY2goZnVuY3Rpb24obCkge1xuXHRcdGlmKCFsWzFdLlRhcmdldCkgcmV0dXJuO1xuXHRcdHZhciBySWQgPSBhZGRfcmVscyhyZWxzLCAtMSwgbFsxXS5UYXJnZXQucmVwbGFjZSgvIy4qJC8sIFwiXCIpLCBSRUxTLkhMSU5LKTtcblx0XHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0SExpbmtcIiwgd3JpdGVfQnJ0SExpbmsobCwgcklkKSk7XG5cdH0pO1xuXHRkZWxldGUgd3NbJyFsaW5rcyddO1xufVxuZnVuY3Rpb24gd3JpdGVfTEVHQUNZRFJBV0lORyhiYSwgd3MsIGlkeCwgcmVscykge1xuXHQvKiBbQnJ0TGVnYWN5RHJhd2luZ10gKi9cblx0aWYod3NbJyFjb21tZW50cyddLmxlbmd0aCA+IDApIHtcblx0XHR2YXIgcklkID0gYWRkX3JlbHMocmVscywgLTEsIFwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZ1wiICsgKGlkeCsxKSArIFwiLnZtbFwiLCBSRUxTLlZNTCk7XG5cdFx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydExlZ2FjeURyYXdpbmdcIiwgd3JpdGVfUmVsSUQoXCJySWRcIiArIHJJZCkpO1xuXHRcdHdzWychbGVnYWN5J10gPSBySWQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gd3JpdGVfQVVUT0ZJTFRFUihiYSwgd3MpIHtcblx0aWYoIXdzWychYXV0b2ZpbHRlciddKSByZXR1cm47XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpbkFGaWx0ZXJcIiwgd3JpdGVfVW5jaGVja2VkUmZYKGRlY29kZV9yYW5nZSh3c1snIWF1dG9maWx0ZXInXS5yZWYpKSk7XG5cdC8qICpGSUxURVJDT0xVTU4gKi9cblx0LyogW1NPUlRTVEFURV0gKi9cblx0LyogQnJ0RW5kQUZpbHRlciAqL1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RW5kQUZpbHRlclwiKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfV1NWSUVXUzIoYmEsIHdzLCBXb3JrYm9vaykge1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5Xc1ZpZXdzXCIpO1xuXHR7IC8qIDEqV1NWSUVXMiAqL1xuXHRcdC8qIFtBQ1VJRF0gKi9cblx0XHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5Xc1ZpZXdcIiwgd3JpdGVfQnJ0QmVnaW5Xc1ZpZXcod3MsIFdvcmtib29rKSk7XG5cdFx0LyogW0JydFBhbmVdICovXG5cdFx0LyogKjRCcnRTZWwgKi9cblx0XHQvKiAqNFNYU0VMRUNUICovXG5cdFx0LyogKkZSVCAqL1xuXHRcdHdyaXRlX3JlY29yZChiYSwgXCJCcnRFbmRXc1ZpZXdcIik7XG5cdH1cblx0LyogKkZSVCAqL1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RW5kV3NWaWV3c1wiKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfV1NGTVRJTkZPKCkge1xuXHQvKiBbQUNXU0ZNVElORk9dICovXG5cdC8vd3JpdGVfcmVjb3JkKGJhLCBcIkJydFdzRm10SW5mb1wiLCB3cml0ZV9CcnRXc0ZtdEluZm8od3MpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfU0hFRVRQUk9URUNUKGJhLCB3cykge1xuXHRpZighd3NbJyFwcm90ZWN0J10pIHJldHVybjtcblx0LyogW0JydFNoZWV0UHJvdGVjdGlvbklzb10gKi9cblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydFNoZWV0UHJvdGVjdGlvblwiLCB3cml0ZV9CcnRTaGVldFByb3RlY3Rpb24od3NbJyFwcm90ZWN0J10pKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfd3NfYmluKGlkeCwgb3B0cywgd2IsIHJlbHMpIHtcblx0dmFyIGJhID0gYnVmX2FycmF5KCk7XG5cdHZhciBzID0gd2IuU2hlZXROYW1lc1tpZHhdLCB3cyA9IHdiLlNoZWV0c1tzXSB8fCB7fTtcblx0dmFyIGMgPSBzOyB0cnkgeyBpZih3YiAmJiB3Yi5Xb3JrYm9vaykgYyA9IHdiLldvcmtib29rLlNoZWV0c1tpZHhdLkNvZGVOYW1lIHx8IGM7IH0gY2F0Y2goZSkge31cblx0dmFyIHIgPSBzYWZlX2RlY29kZV9yYW5nZSh3c1snIXJlZiddIHx8IFwiQTFcIik7XG5cdHdzWychbGlua3MnXSA9IFtdO1xuXHQvKiBwYXNzZWQgYmFjayB0byB3cml0ZV96aXAgYW5kIHJlbW92ZWQgdGhlcmUgKi9cblx0d3NbJyFjb21tZW50cyddID0gW107XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpblNoZWV0XCIpO1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0V3NQcm9wXCIsIHdyaXRlX0JydFdzUHJvcChjKSk7XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRXc0RpbVwiLCB3cml0ZV9CcnRXc0RpbShyKSk7XG5cdHdyaXRlX1dTVklFV1MyKGJhLCB3cywgd2IuV29ya2Jvb2spO1xuXHR3cml0ZV9XU0ZNVElORk8oYmEsIHdzKTtcblx0d3JpdGVfQ09MSU5GT1MoYmEsIHdzLCBpZHgsIG9wdHMsIHdiKTtcblx0d3JpdGVfQ0VMTFRBQkxFKGJhLCB3cywgaWR4LCBvcHRzLCB3Yik7XG5cdC8qIFtCcnRTaGVldENhbGNQcm9wXSAqL1xuXHR3cml0ZV9TSEVFVFBST1RFQ1QoYmEsIHdzKTtcblx0LyogKihbQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvXSBCcnRSYW5nZVByb3RlY3Rpb24pICovXG5cdC8qIFtTQ0VOTUFOXSAqL1xuXHR3cml0ZV9BVVRPRklMVEVSKGJhLCB3cyk7XG5cdC8qIFtTT1JUU1RBVEVdICovXG5cdC8qIFtEQ09OXSAqL1xuXHQvKiBbVVNFUlNIVklFV1NdICovXG5cdHdyaXRlX01FUkdFQ0VMTFMoYmEsIHdzKTtcblx0LyogW0JydFBob25ldGljSW5mb10gKi9cblx0LyogKkNPTkRJVElPTkFMRk9STUFUVElORyAqL1xuXHQvKiBbRFZBTFNdICovXG5cdHdyaXRlX0hMSU5LUyhiYSwgd3MsIHJlbHMpO1xuXHQvKiBbQnJ0UHJpbnRPcHRpb25zXSAqL1xuXHRpZih3c1snIW1hcmdpbnMnXSkgd3JpdGVfcmVjb3JkKGJhLCBcIkJydE1hcmdpbnNcIiwgd3JpdGVfQnJ0TWFyZ2lucyh3c1snIW1hcmdpbnMnXSkpO1xuXHQvKiBbQnJ0UGFnZVNldHVwXSAqL1xuXHQvKiBbSEVBREVSRk9PVEVSXSAqL1xuXHQvKiBbUldCUktdICovXG5cdC8qIFtDT0xCUktdICovXG5cdC8qICpCcnRCaWdOYW1lICovXG5cdC8qIFtDRUxMV0FUQ0hFU10gKi9cblx0LyogW0lHTk9SRUVDU10gKi9cblx0LyogW1NNQVJUVEFHU10gKi9cblx0LyogW0JydERyYXdpbmddICovXG5cdHdyaXRlX0xFR0FDWURSQVdJTkcoYmEsIHdzLCBpZHgsIHJlbHMpO1xuXHQvKiBbQnJ0TGVnYWN5RHJhd2luZ0hGXSAqL1xuXHQvKiBbQnJ0QmtIaW1dICovXG5cdC8qIFtPTEVPQkpFQ1RTXSAqL1xuXHQvKiBbQUNUSVZFWENPTlRST0xTXSAqL1xuXHQvKiBbV0VCUFVCSVRFTVNdICovXG5cdC8qIFtMSVNUUEFSVFNdICovXG5cdC8qIEZSVFdPUktTSEVFVCAqL1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RW5kU2hlZXRcIik7XG5cdHJldHVybiBiYS5lbmQoKTtcbn1cbmZ1bmN0aW9uIHBhcnNlX251bUNhY2hlKGRhdGEpIHtcblx0dmFyIGNvbCA9IFtdO1xuXG5cdC8qIDIxLjIuMi4xNTAgcHQgQ1RfTnVtVmFsICovXG5cdChkYXRhLm1hdGNoKC88YzpwdCBpZHg9XCIoXFxkKilcIj4oLio/KTxcXC9jOnB0Pi9tZyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHB0KSB7XG5cdFx0dmFyIHEgPSBwdC5tYXRjaCgvPGM6cHQgaWR4PVwiKC4qPylcIj48Yzp2PiguKik8XFwvYzp2PjxcXC9jOnB0Pi8pO1xuXHRcdGlmKCFxKSByZXR1cm47XG5cdFx0Y29sWytxWzFdXSA9ICtxWzJdO1xuXHR9KTtcblxuXHQvKiAyMS4yLjIuNzEgZm9ybWF0Q29kZSBDVF9Yc3RyaW5nICovXG5cdHZhciBuZiA9IHVuZXNjYXBleG1sKChkYXRhLm1hdGNoKC88Yzpmb3JtYXRDb2RlPihbXFxzXFxTXSo/KTxcXC9jOmZvcm1hdENvZGU+LykgfHwgW1wiXCIsXCJHZW5lcmFsXCJdKVsxXSk7XG5cblx0cmV0dXJuIFtjb2wsIG5mXTtcbn1cblxuLyogMjEuMiBEcmF3aW5nTUwgLSBDaGFydHMgKi9cbmZ1bmN0aW9uIHBhcnNlX2NoYXJ0KGRhdGEsIG5hbWUsIG9wdHMsIHJlbHMsIHdiLCBjc2hlZXQpIHtcblx0dmFyIGNzID0gKChjc2hlZXQgfHwge1wiIXR5cGVcIjpcImNoYXJ0XCJ9KSk7XG5cdGlmKCFkYXRhKSByZXR1cm4gY3NoZWV0O1xuXHQvKiAyMS4yLjIuMjcgY2hhcnQgQ1RfQ2hhcnQgKi9cblxuXHR2YXIgQyA9IDAsIFIgPSAwLCBjb2wgPSBcIkFcIjtcblx0dmFyIHJlZmd1ZXNzID0ge3M6IHtyOjIwMDAwMDAsIGM6MjAwMDAwMH0sIGU6IHtyOjAsIGM6MH0gfTtcblxuXHQvKiAyMS4yLjIuMTIwIG51bUNhY2hlIENUX051bURhdGEgKi9cblx0KGRhdGEubWF0Y2goLzxjOm51bUNhY2hlPltcXHNcXFNdKj88XFwvYzpudW1DYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihuYykge1xuXHRcdHZhciBjYWNoZSA9IHBhcnNlX251bUNhY2hlKG5jKTtcblx0XHRyZWZndWVzcy5zLnIgPSByZWZndWVzcy5zLmMgPSAwO1xuXHRcdHJlZmd1ZXNzLmUuYyA9IEM7XG5cdFx0Y29sID0gZW5jb2RlX2NvbChDKTtcblx0XHRjYWNoZVswXS5mb3JFYWNoKGZ1bmN0aW9uKG4saSkge1xuXHRcdFx0Y3NbY29sICsgZW5jb2RlX3JvdyhpKV0gPSB7dDonbicsIHY6biwgejpjYWNoZVsxXSB9O1xuXHRcdFx0UiA9IGk7XG5cdFx0fSk7XG5cdFx0aWYocmVmZ3Vlc3MuZS5yIDwgUikgcmVmZ3Vlc3MuZS5yID0gUjtcblx0XHQrK0M7XG5cdH0pO1xuXHRpZihDID4gMCkgY3NbXCIhcmVmXCJdID0gZW5jb2RlX3JhbmdlKHJlZmd1ZXNzKTtcblx0cmV0dXJuIGNzO1xufVxuUkVMUy5DUyA9IFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydHNoZWV0XCI7XG5cbnZhciBDU19YTUxfUk9PVCA9IHdyaXRleHRhZygnY2hhcnRzaGVldCcsIG51bGwsIHtcblx0J3htbG5zJzogWE1MTlMubWFpblswXSxcblx0J3htbG5zOnInOiBYTUxOUy5yXG59KTtcblxuLyogMTguMyBXb3Jrc2hlZXRzIGFsc28gY292ZXJzIENoYXJ0c2hlZXRzICovXG5mdW5jdGlvbiBwYXJzZV9jc194bWwoZGF0YSwgb3B0cywgaWR4LCByZWxzLCB3Yikge1xuXHRpZighZGF0YSkgcmV0dXJuIGRhdGE7XG5cdC8qIDE4LjMuMS4xMiBjaGFydHNoZWV0IENUX0NoYXJ0U2hlZXQgKi9cblx0aWYoIXJlbHMpIHJlbHMgPSB7JyFpZCc6e319O1xuXHR2YXIgcyA9IHsnIXR5cGUnOlwiY2hhcnRcIiwgJyFjaGFydCc6bnVsbCwgJyFyZWwnOlwiXCJ9O1xuXHR2YXIgbTtcblxuXHQvKiAxOC4zLjEuODMgc2hlZXRQciBDVF9DaGFydHNoZWV0UHIgKi9cblx0dmFyIHNoZWV0UHIgPSBkYXRhLm1hdGNoKHNoZWV0cHJyZWdleCk7XG5cdGlmKHNoZWV0UHIpIHBhcnNlX3dzX3htbF9zaGVldHByKHNoZWV0UHJbMF0sIHMsIHdiLCBpZHgpO1xuXG5cdC8qIDE4LjMuMS4zNiBkcmF3aW5nIENUX0RyYXdpbmcgKi9cblx0aWYoKG0gPSBkYXRhLm1hdGNoKC9kcmF3aW5nIHI6aWQ9XCIoLio/KVwiLykpKSBzWychcmVsJ10gPSBtWzFdO1xuXG5cdGlmKHJlbHNbJyFpZCddW3NbJyFyZWwnXV0pIHNbJyFjaGFydCddID0gcmVsc1snIWlkJ11bc1snIXJlbCddXTtcblx0cmV0dXJuIHM7XG59XG5mdW5jdGlvbiB3cml0ZV9jc194bWwoaWR4LCBvcHRzLCB3YiwgcmVscykge1xuXHR2YXIgbyA9IFtYTUxfSEVBREVSLCBDU19YTUxfUk9PVF07XG5cdG9bby5sZW5ndGhdID0gd3JpdGV4dGFnKFwiZHJhd2luZ1wiLCBudWxsLCB7XCJyOmlkXCI6IFwicklkMVwifSk7XG5cdGFkZF9yZWxzKHJlbHMsIC0xLCBcIi4uL2RyYXdpbmdzL2RyYXdpbmdcIiArIChpZHgrMSkgKyBcIi54bWxcIiwgUkVMUy5EUkFXKTtcblx0aWYoby5sZW5ndGg+MikgeyBvW28ubGVuZ3RoXSA9ICgnPC9jaGFydHNoZWV0PicpOyBvWzFdPW9bMV0ucmVwbGFjZShcIi8+XCIsXCI+XCIpOyB9XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuMzMxIEJydENzUHJvcCAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0Q3NQcm9wKGRhdGEsIGxlbmd0aCkge1xuXHRkYXRhLmwgKz0gMTA7XG5cdHZhciBuYW1lID0gcGFyc2VfWExXaWRlU3RyaW5nKGRhdGEsIGxlbmd0aCAtIDEwKTtcblx0cmV0dXJuIHsgbmFtZTogbmFtZSB9O1xufVxuXG4vKiBbTVMtWExTQl0gMi4xLjcuNyBDaGFydCBTaGVldCAqL1xuZnVuY3Rpb24gcGFyc2VfY3NfYmluKGRhdGEsIG9wdHMsIGlkeCwgcmVscywgd2IpIHtcblx0aWYoIWRhdGEpIHJldHVybiBkYXRhO1xuXHRpZighcmVscykgcmVscyA9IHsnIWlkJzp7fX07XG5cdHZhciBzID0geychdHlwZSc6XCJjaGFydFwiLCAnIWNoYXJ0JzpudWxsLCAnIXJlbCc6XCJcIn07XG5cdHZhciBzdGF0ZSA9IFtdO1xuXHR2YXIgcGFzcyA9IGZhbHNlO1xuXHRyZWNvcmRob3BwZXIoZGF0YSwgZnVuY3Rpb24gY3NfcGFyc2UodmFsLCBSX24sIFJUKSB7XG5cdFx0c3dpdGNoKFJUKSB7XG5cblx0XHRcdGNhc2UgMHgwMjI2OiAvKiAnQnJ0RHJhd2luZycgKi9cblx0XHRcdFx0c1snIXJlbCddID0gdmFsOyBicmVhaztcblxuXHRcdFx0Y2FzZSAweDAyOEI6IC8qICdCcnRDc1Byb3AnICovXG5cdFx0XHRcdGlmKCF3Yi5TaGVldHNbaWR4XSkgd2IuU2hlZXRzW2lkeF0gPSB7fTtcblx0XHRcdFx0aWYodmFsLm5hbWUpIHdiLlNoZWV0c1tpZHhdLkNvZGVOYW1lID0gdmFsLm5hbWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHQvKiBjYXNlICdCcnRVaWQnOiAqL1xuXHRcdFx0Y2FzZSAweDAyMzI6IC8qICdCcnRCa0hpbScgKi9cblx0XHRcdGNhc2UgMHgwMjhDOiAvKiAnQnJ0Q3NQYWdlU2V0dXAnICovXG5cdFx0XHRjYXNlIDB4MDI5RDogLyogJ0JydENzUHJvdGVjdGlvbicgKi9cblx0XHRcdGNhc2UgMHgwMkE3OiAvKiAnQnJ0Q3NQcm90ZWN0aW9uSXNvJyAqL1xuXHRcdFx0Y2FzZSAweDAyMjc6IC8qICdCcnRMZWdhY3lEcmF3aW5nJyAqL1xuXHRcdFx0Y2FzZSAweDAyMjg6IC8qICdCcnRMZWdhY3lEcmF3aW5nSEYnICovXG5cdFx0XHRjYXNlIDB4MDFEQzogLyogJ0JydE1hcmdpbnMnICovXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDB4MDAyMzogLyogJ0JydEZSVEJlZ2luJyAqL1xuXHRcdFx0XHRwYXNzID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAyNDogLyogJ0JydEZSVEVuZCcgKi9cblx0XHRcdFx0cGFzcyA9IGZhbHNlOyBicmVhaztcblx0XHRcdGNhc2UgMHgwMDI1OiAvKiAnQnJ0QUNCZWdpbicgKi9cblx0XHRcdFx0c3RhdGUucHVzaChSX24pOyBicmVhaztcblx0XHRcdGNhc2UgMHgwMDI2OiAvKiAnQnJ0QUNFbmQnICovXG5cdFx0XHRcdHN0YXRlLnBvcCgpOyBicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkJlZ2luXCIpID4gMCkgc3RhdGUucHVzaChSX24pO1xuXHRcdFx0XHRlbHNlIGlmKChSX258fFwiXCIpLmluZGV4T2YoXCJFbmRcIikgPiAwKSBzdGF0ZS5wb3AoKTtcblx0XHRcdFx0ZWxzZSBpZighcGFzcyB8fCBvcHRzLldURikgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCByZWNvcmQgXCIgKyBSVCArIFwiIFwiICsgUl9uKTtcblx0XHR9XG5cdH0sIG9wdHMpO1xuXG5cdGlmKHJlbHNbJyFpZCddW3NbJyFyZWwnXV0pIHNbJyFjaGFydCddID0gcmVsc1snIWlkJ11bc1snIXJlbCddXTtcblx0cmV0dXJuIHM7XG59XG5mdW5jdGlvbiB3cml0ZV9jc19iaW4oKSB7XG5cdHZhciBiYSA9IGJ1Zl9hcnJheSgpO1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5TaGVldFwiKTtcblx0LyogW0JydENzUHJvcF0gKi9cblx0LyogQ1NWSUVXUyAqL1xuXHQvKiBbW0JydENzUHJvdGVjdGlvbklzb10gQnJ0Q3NQcm90ZWN0aW9uXSAqL1xuXHQvKiBbVVNFUkNTVklFV1NdICovXG5cdC8qIFtCcnRNYXJnaW5zXSAqL1xuXHQvKiBbQnJ0Q3NQYWdlU2V0dXBdICovXG5cdC8qIFtIRUFERVJGT09URVJdICovXG5cdC8qIEJydERyYXdpbmcgKi9cblx0LyogW0JydExlZ2FjeURyYXdpbmddICovXG5cdC8qIFtCcnRMZWdhY3lEcmF3aW5nSEZdICovXG5cdC8qIFtCcnRCa0hpbV0gKi9cblx0LyogW1dFQlBVQklURU1TXSAqL1xuXHQvKiBGUlRDSEFSVFNIRUVUICovXG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRFbmRTaGVldFwiKTtcblx0cmV0dXJuIGJhLmVuZCgpO1xufVxuLyogMTguMi4yOCAoQ1RfV29ya2Jvb2tQcm90ZWN0aW9uKSBEZWZhdWx0cyAqL1xudmFyIFdCUHJvcHNEZWYgPSBbXG5cdFsnYWxsb3dSZWZyZXNoUXVlcnknLCAgICAgICAgICAgZmFsc2UsIFwiYm9vbFwiXSxcblx0WydhdXRvQ29tcHJlc3NQaWN0dXJlcycsICAgICAgICB0cnVlLCAgXCJib29sXCJdLFxuXHRbJ2JhY2t1cEZpbGUnLCAgICAgICAgICAgICAgICAgIGZhbHNlLCBcImJvb2xcIl0sXG5cdFsnY2hlY2tDb21wYXRpYmlsaXR5JywgICAgICAgICAgZmFsc2UsIFwiYm9vbFwiXSxcblx0WydDb2RlTmFtZScsICAgICAgICAgICAgICAgICAgICAnJ10sXG5cdFsnZGF0ZTE5MDQnLCAgICAgICAgICAgICAgICAgICAgZmFsc2UsIFwiYm9vbFwiXSxcblx0WydkZWZhdWx0VGhlbWVWZXJzaW9uJywgICAgICAgICAwLCAgICAgIFwiaW50XCJdLFxuXHRbJ2ZpbHRlclByaXZhY3knLCAgICAgICAgICAgICAgIGZhbHNlLCBcImJvb2xcIl0sXG5cdFsnaGlkZVBpdm90RmllbGRMaXN0JywgICAgICAgICAgZmFsc2UsIFwiYm9vbFwiXSxcblx0Wydwcm9tcHRlZFNvbHV0aW9ucycsICAgICAgICAgICBmYWxzZSwgXCJib29sXCJdLFxuXHRbJ3B1Ymxpc2hJdGVtcycsICAgICAgICAgICAgICAgIGZhbHNlLCBcImJvb2xcIl0sXG5cdFsncmVmcmVzaEFsbENvbm5lY3Rpb25zJywgICAgICAgZmFsc2UsIFwiYm9vbFwiXSxcblx0WydzYXZlRXh0ZXJuYWxMaW5rVmFsdWVzJywgICAgICB0cnVlLCAgXCJib29sXCJdLFxuXHRbJ3Nob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzJywgIHRydWUsICBcImJvb2xcIl0sXG5cdFsnc2hvd0lua0Fubm90YXRpb24nLCAgICAgICAgICAgdHJ1ZSwgIFwiYm9vbFwiXSxcblx0WydzaG93T2JqZWN0cycsICAgICAgICAgICAgICAgICAnYWxsJ10sXG5cdFsnc2hvd1Bpdm90Q2hhcnRGaWx0ZXInLCAgICAgICAgZmFsc2UsIFwiYm9vbFwiXSxcblx0Wyd1cGRhdGVMaW5rcycsICd1c2VyU2V0J11cbl07XG5cbi8qIDE4LjIuMzAgKENUX0Jvb2tWaWV3KSBEZWZhdWx0cyAqL1xudmFyIFdCVmlld0RlZiA9IFtcblx0WydhY3RpdmVUYWInLCAgICAgICAgICAgICAgICAgICAwLCAgICAgIFwiaW50XCJdLFxuXHRbJ2F1dG9GaWx0ZXJEYXRlR3JvdXBpbmcnLCAgICAgIHRydWUsICBcImJvb2xcIl0sXG5cdFsnZmlyc3RTaGVldCcsICAgICAgICAgICAgICAgICAgMCwgICAgICBcImludFwiXSxcblx0WydtaW5pbWl6ZWQnLCAgICAgICAgICAgICAgICAgICBmYWxzZSwgXCJib29sXCJdLFxuXHRbJ3Nob3dIb3Jpem9udGFsU2Nyb2xsJywgICAgICAgIHRydWUsICBcImJvb2xcIl0sXG5cdFsnc2hvd1NoZWV0VGFicycsICAgICAgICAgICAgICAgdHJ1ZSwgIFwiYm9vbFwiXSxcblx0WydzaG93VmVydGljYWxTY3JvbGwnLCAgICAgICAgICB0cnVlLCAgXCJib29sXCJdLFxuXHRbJ3RhYlJhdGlvJywgICAgICAgICAgICAgICAgICAgIDYwMCwgICAgXCJpbnRcIl0sXG5cdFsndmlzaWJpbGl0eScsICAgICAgICAgICAgICAgICAgJ3Zpc2libGUnXVxuXHQvL3dpbmRvd3tIZWlnaHQsV2lkdGh9LCB7eCx5fVdpbmRvd1xuXTtcblxuLyogMTguMi4xOSAoQ1RfU2hlZXQpIERlZmF1bHRzICovXG52YXIgU2hlZXREZWYgPSBbXG5cdC8vWydzdGF0ZScsICd2aXNpYmxlJ11cbl07XG5cbi8qIDE4LjIuMiAgKENUX0NhbGNQcikgRGVmYXVsdHMgKi9cbnZhciBDYWxjUHJEZWYgPSBbXG5cdFsnY2FsY0NvbXBsZXRlZCcsICd0cnVlJ10sXG5cdFsnY2FsY01vZGUnLCAnYXV0byddLFxuXHRbJ2NhbGNPblNhdmUnLCAndHJ1ZSddLFxuXHRbJ2NvbmN1cnJlbnRDYWxjJywgJ3RydWUnXSxcblx0WydmdWxsQ2FsY09uTG9hZCcsICdmYWxzZSddLFxuXHRbJ2Z1bGxQcmVjaXNpb24nLCAndHJ1ZSddLFxuXHRbJ2l0ZXJhdGUnLCAnZmFsc2UnXSxcblx0WydpdGVyYXRlQ291bnQnLCAnMTAwJ10sXG5cdFsnaXRlcmF0ZURlbHRhJywgJzAuMDAxJ10sXG5cdFsncmVmTW9kZScsICdBMSddXG5dO1xuXG4vKiAxOC4yLjMgKENUX0N1c3RvbVdvcmtib29rVmlldykgRGVmYXVsdHMgKi9cbi8qdmFyIEN1c3RvbVdCVmlld0RlZiA9IFtcblx0WydhdXRvVXBkYXRlJywgJ2ZhbHNlJ10sXG5cdFsnY2hhbmdlc1NhdmVkV2luJywgJ2ZhbHNlJ10sXG5cdFsnaW5jbHVkZUhpZGRlblJvd0NvbCcsICd0cnVlJ10sXG5cdFsnaW5jbHVkZVByaW50U2V0dGluZ3MnLCAndHJ1ZSddLFxuXHRbJ21heGltaXplZCcsICdmYWxzZSddLFxuXHRbJ21pbmltaXplZCcsICdmYWxzZSddLFxuXHRbJ29ubHlTeW5jJywgJ2ZhbHNlJ10sXG5cdFsncGVyc29uYWxWaWV3JywgJ2ZhbHNlJ10sXG5cdFsnc2hvd0NvbW1lbnRzJywgJ2NvbW1JbmRpY2F0b3InXSxcblx0WydzaG93Rm9ybXVsYUJhcicsICd0cnVlJ10sXG5cdFsnc2hvd0hvcml6b250YWxTY3JvbGwnLCAndHJ1ZSddLFxuXHRbJ3Nob3dPYmplY3RzJywgJ2FsbCddLFxuXHRbJ3Nob3dTaGVldFRhYnMnLCAndHJ1ZSddLFxuXHRbJ3Nob3dTdGF0dXNiYXInLCAndHJ1ZSddLFxuXHRbJ3Nob3dWZXJ0aWNhbFNjcm9sbCcsICd0cnVlJ10sXG5cdFsndGFiUmF0aW8nLCAnNjAwJ10sXG5cdFsneFdpbmRvdycsICcwJ10sXG5cdFsneVdpbmRvdycsICcwJ11cbl07Ki9cblxuZnVuY3Rpb24gcHVzaF9kZWZhdWx0c19hcnJheSh0YXJnZXQsIGRlZmF1bHRzKSB7XG5cdGZvcih2YXIgaiA9IDA7IGogIT0gdGFyZ2V0Lmxlbmd0aDsgKytqKSB7IHZhciB3ID0gdGFyZ2V0W2pdO1xuXHRcdGZvcih2YXIgaT0wOyBpICE9IGRlZmF1bHRzLmxlbmd0aDsgKytpKSB7IHZhciB6ID0gZGVmYXVsdHNbaV07XG5cdFx0XHRpZih3W3pbMF1dID09IG51bGwpIHdbelswXV0gPSB6WzFdO1xuXHRcdFx0ZWxzZSBzd2l0Y2goelsyXSkge1xuXHRcdFx0Y2FzZSBcImJvb2xcIjogaWYodHlwZW9mIHdbelswXV0gPT0gXCJzdHJpbmdcIikgd1t6WzBdXSA9IHBhcnNleG1sYm9vbCh3W3pbMF1dKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiaW50XCI6IGlmKHR5cGVvZiB3W3pbMF1dID09IFwic3RyaW5nXCIpIHdbelswXV0gPSBwYXJzZUludCh3W3pbMF1dLCAxMCk7IGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gcHVzaF9kZWZhdWx0cyh0YXJnZXQsIGRlZmF1bHRzKSB7XG5cdGZvcih2YXIgaSA9IDA7IGkgIT0gZGVmYXVsdHMubGVuZ3RoOyArK2kpIHsgdmFyIHogPSBkZWZhdWx0c1tpXTtcblx0XHRpZih0YXJnZXRbelswXV0gPT0gbnVsbCkgdGFyZ2V0W3pbMF1dID0gelsxXTtcblx0XHRlbHNlIHN3aXRjaCh6WzJdKSB7XG5cdFx0XHRjYXNlIFwiYm9vbFwiOiBpZih0eXBlb2YgdGFyZ2V0W3pbMF1dID09IFwic3RyaW5nXCIpIHRhcmdldFt6WzBdXSA9IHBhcnNleG1sYm9vbCh0YXJnZXRbelswXV0pOyBicmVhaztcblx0XHRcdGNhc2UgXCJpbnRcIjogaWYodHlwZW9mIHRhcmdldFt6WzBdXSA9PSBcInN0cmluZ1wiKSB0YXJnZXRbelswXV0gPSBwYXJzZUludCh0YXJnZXRbelswXV0sIDEwKTsgYnJlYWs7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlX3diX2RlZmF1bHRzKHdiKSB7XG5cdHB1c2hfZGVmYXVsdHMod2IuV0JQcm9wcywgV0JQcm9wc0RlZik7XG5cdHB1c2hfZGVmYXVsdHMod2IuQ2FsY1ByLCBDYWxjUHJEZWYpO1xuXG5cdHB1c2hfZGVmYXVsdHNfYXJyYXkod2IuV0JWaWV3LCBXQlZpZXdEZWYpO1xuXHRwdXNoX2RlZmF1bHRzX2FycmF5KHdiLlNoZWV0cywgU2hlZXREZWYpO1xuXG5cdF9zc2ZvcHRzLmRhdGUxOTA0ID0gcGFyc2V4bWxib29sKHdiLldCUHJvcHMuZGF0ZTE5MDQpO1xufVxuXG5mdW5jdGlvbiBzYWZlMTkwNCh3Yikge1xuXHQvKiBUT0RPOiBzdG9yZSBkYXRlMTkwNCBzb21ld2hlcmUgZWxzZSAqL1xuXHRpZighd2IuV29ya2Jvb2spIHJldHVybiBcImZhbHNlXCI7XG5cdGlmKCF3Yi5Xb3JrYm9vay5XQlByb3BzKSByZXR1cm4gXCJmYWxzZVwiO1xuXHRyZXR1cm4gcGFyc2V4bWxib29sKHdiLldvcmtib29rLldCUHJvcHMuZGF0ZTE5MDQpID8gXCJ0cnVlXCIgOiBcImZhbHNlXCI7XG59XG5cbnZhciBiYWRjaGFycyA9IFwiXVsqP1xcL1xcXFxcIi5zcGxpdChcIlwiKTtcbmZ1bmN0aW9uIGNoZWNrX3dzX25hbWUobiwgc2FmZSkge1xuXHRpZihuLmxlbmd0aCA+IDMxKSB7IGlmKHNhZmUpIHJldHVybiBmYWxzZTsgdGhyb3cgbmV3IEVycm9yKFwiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFyc1wiKTsgfVxuXHR2YXIgX2dvb2QgPSB0cnVlO1xuXHRiYWRjaGFycy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcblx0XHRpZihuLmluZGV4T2YoYykgPT0gLTEpIHJldHVybjtcblx0XHRpZighc2FmZSkgdGhyb3cgbmV3IEVycm9yKFwiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcXFwgLyA/ICogWyBdXCIpO1xuXHRcdF9nb29kID0gZmFsc2U7XG5cdH0pO1xuXHRyZXR1cm4gX2dvb2Q7XG59XG5mdW5jdGlvbiBjaGVja193Yl9uYW1lcyhOKSB7XG5cdE4uZm9yRWFjaChmdW5jdGlvbihuLGkpIHtcblx0XHRjaGVja193c19uYW1lKG4pO1xuXHRcdGZvcih2YXIgaiA9IDA7IGogPCBpOyArK2opIGlmKG4gPT0gTltqXSkgdGhyb3cgbmV3IEVycm9yKFwiRHVwbGljYXRlIFNoZWV0IE5hbWU6IFwiICsgbik7XG5cdH0pO1xufVxuZnVuY3Rpb24gY2hlY2tfd2Iod2IpIHtcblx0aWYoIXdiIHx8ICF3Yi5TaGVldE5hbWVzIHx8ICF3Yi5TaGVldHMpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgV29ya2Jvb2tcIik7XG5cdGlmKCF3Yi5TaGVldE5hbWVzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKFwiV29ya2Jvb2sgaXMgZW1wdHlcIik7XG5cdGNoZWNrX3diX25hbWVzKHdiLlNoZWV0TmFtZXMpO1xuXHQvKiBUT0RPOiB2YWxpZGF0ZSB3b3JrYm9vayAqL1xufVxuLyogMTguMiBXb3JrYm9vayAqL1xudmFyIHdibnNyZWdleCA9IC88XFx3Kzp3b3JrYm9vay87XG5mdW5jdGlvbiBwYXJzZV93Yl94bWwoZGF0YSwgb3B0cykge1xuXHRpZighZGF0YSkgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgZmlsZVwiKTtcblx0dmFyIHdiID0geyBBcHBWZXJzaW9uOnt9LCBXQlByb3BzOnt9LCBXQlZpZXc6W10sIFNoZWV0czpbXSwgQ2FsY1ByOnt9LCBOYW1lczpbXSwgeG1sbnM6IFwiXCIgfTtcblx0dmFyIHBhc3MgPSBmYWxzZSwgeG1sbnMgPSBcInhtbG5zXCI7XG5cdHZhciBkbmFtZSA9IHt9LCBkbnN0YXJ0ID0gMDtcblx0ZGF0YS5yZXBsYWNlKHRhZ3JlZ2V4LCBmdW5jdGlvbiB4bWxfd2IoeCwgaWR4KSB7XG5cdFx0dmFyIHkgPSBwYXJzZXhtbHRhZyh4KTtcblx0XHRzd2l0Y2goc3RyaXBfbnMoeVswXSkpIHtcblx0XHRcdGNhc2UgJzw/eG1sJzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjIuMjcgd29ya2Jvb2sgQ1RfV29ya2Jvb2sgMSAqL1xuXHRcdFx0Y2FzZSAnPHdvcmtib29rJzpcblx0XHRcdFx0aWYoeC5tYXRjaCh3Ym5zcmVnZXgpKSB4bWxucyA9IFwieG1sbnNcIiArIHgubWF0Y2goLzwoXFx3Kyk6LylbMV07XG5cdFx0XHRcdHdiLnhtbG5zID0geVt4bWxuc107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnPC93b3JrYm9vaz4nOiBicmVhaztcblxuXHRcdFx0LyogMTguMi4xMyBmaWxlVmVyc2lvbiBDVF9GaWxlVmVyc2lvbiA/ICovXG5cdFx0XHRjYXNlICc8ZmlsZVZlcnNpb24nOiBkZWxldGUgeVswXTsgd2IuQXBwVmVyc2lvbiA9IHk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPGZpbGVWZXJzaW9uLz4nOiBjYXNlICc8L2ZpbGVWZXJzaW9uPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC4yLjEyIGZpbGVTaGFyaW5nIENUX0ZpbGVTaGFyaW5nID8gKi9cblx0XHRcdGNhc2UgJzxmaWxlU2hhcmluZyc6IGNhc2UgJzxmaWxlU2hhcmluZy8+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjIuMjggd29ya2Jvb2tQciBDVF9Xb3JrYm9va1ByID8gKi9cblx0XHRcdGNhc2UgJzx3b3JrYm9va1ByJzpcblx0XHRcdGNhc2UgJzx3b3JrYm9va1ByLz4nOlxuXHRcdFx0XHRXQlByb3BzRGVmLmZvckVhY2goZnVuY3Rpb24odykge1xuXHRcdFx0XHRcdGlmKHlbd1swXV0gPT0gbnVsbCkgcmV0dXJuO1xuXHRcdFx0XHRcdHN3aXRjaCh3WzJdKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiYm9vbFwiOiB3Yi5XQlByb3BzW3dbMF1dID0gcGFyc2V4bWxib29sKHlbd1swXV0pOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJpbnRcIjogd2IuV0JQcm9wc1t3WzBdXSA9IHBhcnNlSW50KHlbd1swXV0sIDEwKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OiB3Yi5XQlByb3BzW3dbMF1dID0geVt3WzBdXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZih5LmNvZGVOYW1lKSB3Yi5XQlByb3BzLkNvZGVOYW1lID0geS5jb2RlTmFtZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICc8L3dvcmtib29rUHI+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjIuMjkgd29ya2Jvb2tQcm90ZWN0aW9uIENUX1dvcmtib29rUHJvdGVjdGlvbiA/ICovXG5cdFx0XHRjYXNlICc8d29ya2Jvb2tQcm90ZWN0aW9uJzogYnJlYWs7XG5cdFx0XHRjYXNlICc8d29ya2Jvb2tQcm90ZWN0aW9uLz4nOiBicmVhaztcblxuXHRcdFx0LyogMTguMi4xICBib29rVmlld3MgQ1RfQm9va1ZpZXdzID8gKi9cblx0XHRcdGNhc2UgJzxib29rVmlld3MnOiBjYXNlICc8Ym9va1ZpZXdzPic6IGNhc2UgJzwvYm9va1ZpZXdzPic6IGJyZWFrO1xuXHRcdFx0LyogMTguMi4zMCAgIHdvcmtib29rVmlldyBDVF9Cb29rVmlldyArICovXG5cdFx0XHRjYXNlICc8d29ya2Jvb2tWaWV3JzogZGVsZXRlIHlbMF07IHdiLldCVmlldy5wdXNoKHkpOyBicmVhaztcblx0XHRcdGNhc2UgJzwvd29ya2Jvb2tWaWV3Pic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC4yLjIwIHNoZWV0cyBDVF9TaGVldHMgMSAqL1xuXHRcdFx0Y2FzZSAnPHNoZWV0cyc6IGNhc2UgJzxzaGVldHM+JzogY2FzZSAnPC9zaGVldHM+JzogYnJlYWs7IC8vIGFnZ3JlZ2F0ZSBzaGVldFxuXHRcdFx0LyogMTguMi4xOSAgIHNoZWV0IENUX1NoZWV0ICsgKi9cblx0XHRcdGNhc2UgJzxzaGVldCc6XG5cdFx0XHRcdHN3aXRjaCh5LnN0YXRlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImhpZGRlblwiOiB5LkhpZGRlbiA9IDE7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJ2ZXJ5SGlkZGVuXCI6IHkuSGlkZGVuID0gMjsgYnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDogeS5IaWRkZW4gPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlbGV0ZSB5LnN0YXRlO1xuXHRcdFx0XHR5Lm5hbWUgPSB1bmVzY2FwZXhtbCh1dGY4cmVhZCh5Lm5hbWUpKTtcblx0XHRcdFx0ZGVsZXRlIHlbMF07IHdiLlNoZWV0cy5wdXNoKHkpOyBicmVhaztcblx0XHRcdGNhc2UgJzwvc2hlZXQ+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjIuMTUgZnVuY3Rpb25Hcm91cHMgQ1RfRnVuY3Rpb25Hcm91cHMgPyAqL1xuXHRcdFx0Y2FzZSAnPGZ1bmN0aW9uR3JvdXBzJzogY2FzZSAnPGZ1bmN0aW9uR3JvdXBzLz4nOiBicmVhaztcblx0XHRcdC8qIDE4LjIuMTQgICBmdW5jdGlvbkdyb3VwIENUX0Z1bmN0aW9uR3JvdXAgKyAqL1xuXHRcdFx0Y2FzZSAnPGZ1bmN0aW9uR3JvdXAnOiBicmVhaztcblxuXHRcdFx0LyogMTguMi45ICBleHRlcm5hbFJlZmVyZW5jZXMgQ1RfRXh0ZXJuYWxSZWZlcmVuY2VzID8gKi9cblx0XHRcdGNhc2UgJzxleHRlcm5hbFJlZmVyZW5jZXMnOiBjYXNlICc8L2V4dGVybmFsUmVmZXJlbmNlcz4nOiBjYXNlICc8ZXh0ZXJuYWxSZWZlcmVuY2VzPic6IGJyZWFrO1xuXHRcdFx0LyogMTguMi44ICAgIGV4dGVybmFsUmVmZXJlbmNlIENUX0V4dGVybmFsUmVmZXJlbmNlICsgKi9cblx0XHRcdGNhc2UgJzxleHRlcm5hbFJlZmVyZW5jZSc6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC4yLjYgIGRlZmluZWROYW1lcyBDVF9EZWZpbmVkTmFtZXMgPyAqL1xuXHRcdFx0Y2FzZSAnPGRlZmluZWROYW1lcy8+JzogYnJlYWs7XG5cdFx0XHRjYXNlICc8ZGVmaW5lZE5hbWVzPic6IGNhc2UgJzxkZWZpbmVkTmFtZXMnOiBwYXNzPXRydWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPC9kZWZpbmVkTmFtZXM+JzogcGFzcz1mYWxzZTsgYnJlYWs7XG5cdFx0XHQvKiAxOC4yLjUgICAgZGVmaW5lZE5hbWUgQ1RfRGVmaW5lZE5hbWUgKyAqL1xuXHRcdFx0Y2FzZSAnPGRlZmluZWROYW1lJzoge1xuXHRcdFx0XHRkbmFtZSA9IHt9O1xuXHRcdFx0XHRkbmFtZS5OYW1lID0geS5uYW1lO1xuXHRcdFx0XHRpZih5LmNvbW1lbnQpIGRuYW1lLkNvbW1lbnQgPSB5LmNvbW1lbnQ7XG5cdFx0XHRcdGlmKHkubG9jYWxTaGVldElkKSBkbmFtZS5TaGVldCA9ICt5LmxvY2FsU2hlZXRJZDtcblx0XHRcdFx0ZG5zdGFydCA9IGlkeCArIHgubGVuZ3RoO1xuXHRcdFx0fVx0YnJlYWs7XG5cdFx0XHRjYXNlICc8L2RlZmluZWROYW1lPic6IHtcblx0XHRcdFx0ZG5hbWUuUmVmID0gZGF0YS5zbGljZShkbnN0YXJ0LCBpZHgpO1xuXHRcdFx0XHR3Yi5OYW1lcy5wdXNoKGRuYW1lKTtcblx0XHRcdH0gYnJlYWs7XG5cdFx0XHRjYXNlICc8ZGVmaW5lZE5hbWUvPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC4yLjIgIGNhbGNQciBDVF9DYWxjUHIgPyAqL1xuXHRcdFx0Y2FzZSAnPGNhbGNQcic6IGRlbGV0ZSB5WzBdOyB3Yi5DYWxjUHIgPSB5OyBicmVhaztcblx0XHRcdGNhc2UgJzxjYWxjUHIvPic6IGRlbGV0ZSB5WzBdOyB3Yi5DYWxjUHIgPSB5OyBicmVhaztcblx0XHRcdGNhc2UgJzwvY2FsY1ByPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC4yLjE2IG9sZVNpemUgQ1RfT2xlU2l6ZSA/IChyZWYgcmVxdWlyZWQpICovXG5cdFx0XHRjYXNlICc8b2xlU2l6ZSc6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC4yLjQgIGN1c3RvbVdvcmtib29rVmlld3MgQ1RfQ3VzdG9tV29ya2Jvb2tWaWV3cyA/ICovXG5cdFx0XHRjYXNlICc8Y3VzdG9tV29ya2Jvb2tWaWV3cz4nOiBjYXNlICc8L2N1c3RvbVdvcmtib29rVmlld3M+JzogY2FzZSAnPGN1c3RvbVdvcmtib29rVmlld3MnOiBicmVhaztcblx0XHRcdC8qIDE4LjIuMyAgICBjdXN0b21Xb3JrYm9va1ZpZXcgQ1RfQ3VzdG9tV29ya2Jvb2tWaWV3ICsgKi9cblx0XHRcdGNhc2UgJzxjdXN0b21Xb3JrYm9va1ZpZXcnOiBjYXNlICc8L2N1c3RvbVdvcmtib29rVmlldz4nOiBicmVhaztcblxuXHRcdFx0LyogMTguMi4xOCBwaXZvdENhY2hlcyBDVF9QaXZvdENhY2hlcyA/ICovXG5cdFx0XHRjYXNlICc8cGl2b3RDYWNoZXM+JzogY2FzZSAnPC9waXZvdENhY2hlcz4nOiBjYXNlICc8cGl2b3RDYWNoZXMnOiBicmVhaztcblx0XHRcdC8qIDE4LjIuMTcgcGl2b3RDYWNoZSBDVF9QaXZvdENhY2hlID8gKi9cblx0XHRcdGNhc2UgJzxwaXZvdENhY2hlJzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjIuMjEgc21hcnRUYWdQciBDVF9TbWFydFRhZ1ByID8gKi9cblx0XHRcdGNhc2UgJzxzbWFydFRhZ1ByJzogY2FzZSAnPHNtYXJ0VGFnUHIvPic6IGJyZWFrO1xuXG5cdFx0XHQvKiAxOC4yLjIzIHNtYXJ0VGFnVHlwZXMgQ1RfU21hcnRUYWdUeXBlcyA/ICovXG5cdFx0XHRjYXNlICc8c21hcnRUYWdUeXBlcyc6IGNhc2UgJzxzbWFydFRhZ1R5cGVzPic6IGNhc2UgJzwvc21hcnRUYWdUeXBlcz4nOiBicmVhaztcblx0XHRcdC8qIDE4LjIuMjIgICBzbWFydFRhZ1R5cGUgQ1RfU21hcnRUYWdUeXBlID8gKi9cblx0XHRcdGNhc2UgJzxzbWFydFRhZ1R5cGUnOiBicmVhaztcblxuXHRcdFx0LyogMTguMi4yNCB3ZWJQdWJsaXNoaW5nIENUX1dlYlB1Ymxpc2hpbmcgPyAqL1xuXHRcdFx0Y2FzZSAnPHdlYlB1Ymxpc2hpbmcnOiBjYXNlICc8d2ViUHVibGlzaGluZy8+JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjIuMTEgZmlsZVJlY292ZXJ5UHIgQ1RfRmlsZVJlY292ZXJ5UHIgPyAqL1xuXHRcdFx0Y2FzZSAnPGZpbGVSZWNvdmVyeVByJzogY2FzZSAnPGZpbGVSZWNvdmVyeVByLz4nOiBicmVhaztcblxuXHRcdFx0LyogMTguMi4yNiB3ZWJQdWJsaXNoT2JqZWN0cyBDVF9XZWJQdWJsaXNoT2JqZWN0cyA/ICovXG5cdFx0XHRjYXNlICc8d2ViUHVibGlzaE9iamVjdHM+JzogY2FzZSAnPHdlYlB1Ymxpc2hPYmplY3RzJzogY2FzZSAnPC93ZWJQdWJsaXNoT2JqZWN0cz4nOiBicmVhaztcblx0XHRcdC8qIDE4LjIuMjUgd2ViUHVibGlzaE9iamVjdCBDVF9XZWJQdWJsaXNoT2JqZWN0ID8gKi9cblx0XHRcdGNhc2UgJzx3ZWJQdWJsaXNoT2JqZWN0JzogYnJlYWs7XG5cblx0XHRcdC8qIDE4LjIuMTAgZXh0THN0IENUX0V4dGVuc2lvbkxpc3QgPyAqL1xuXHRcdFx0Y2FzZSAnPGV4dExzdCc6IGNhc2UgJzxleHRMc3Q+JzogY2FzZSAnPC9leHRMc3Q+JzogY2FzZSAnPGV4dExzdC8+JzogYnJlYWs7XG5cdFx0XHQvKiAxOC4yLjcgICAgZXh0IENUX0V4dGVuc2lvbiArICovXG5cdFx0XHRjYXNlICc8ZXh0JzogcGFzcz10cnVlOyBicmVhazsgLy9UT0RPOiBjaGVjayB3aXRoIHZlcnNpb25zIG9mIGV4Y2VsXG5cdFx0XHRjYXNlICc8L2V4dD4nOiBwYXNzPWZhbHNlOyBicmVhaztcblxuXHRcdFx0LyogT3RoZXJzICovXG5cdFx0XHRjYXNlICc8QXJjaElEJzogYnJlYWs7XG5cdFx0XHRjYXNlICc8QWx0ZXJuYXRlQ29udGVudCc6XG5cdFx0XHRjYXNlICc8QWx0ZXJuYXRlQ29udGVudD4nOiBwYXNzPXRydWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnPC9BbHRlcm5hdGVDb250ZW50Pic6IHBhc3M9ZmFsc2U7IGJyZWFrO1xuXG5cdFx0XHQvKiBUT0RPICovXG5cdFx0XHRjYXNlICc8cmV2aXNpb25QdHInOiBicmVhaztcblxuXHRcdFx0ZGVmYXVsdDogaWYoIXBhc3MgJiYgb3B0cy5XVEYpIHRocm93IG5ldyBFcnJvcigndW5yZWNvZ25pemVkICcgKyB5WzBdICsgJyBpbiB3b3JrYm9vaycpO1xuXHRcdH1cblx0XHRyZXR1cm4geDtcblx0fSk7XG5cdGlmKFhNTE5TLm1haW4uaW5kZXhPZih3Yi54bWxucykgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIE5hbWVzcGFjZTogXCIgKyB3Yi54bWxucyk7XG5cblx0cGFyc2Vfd2JfZGVmYXVsdHMod2IpO1xuXG5cdHJldHVybiB3Yjtcbn1cblxudmFyIFdCX1hNTF9ST09UID0gd3JpdGV4dGFnKCd3b3JrYm9vaycsIG51bGwsIHtcblx0J3htbG5zJzogWE1MTlMubWFpblswXSxcblx0Ly8neG1sbnM6bXgnOiBYTUxOUy5teCxcblx0Ly8neG1sbnM6cyc6IFhNTE5TLm1haW5bMF0sXG5cdCd4bWxuczpyJzogWE1MTlMuclxufSk7XG5cbmZ1bmN0aW9uIHdyaXRlX3diX3htbCh3Yikge1xuXHR2YXIgbyA9IFtYTUxfSEVBREVSXTtcblx0b1tvLmxlbmd0aF0gPSBXQl9YTUxfUk9PVDtcblxuXHR2YXIgd3JpdGVfbmFtZXMgPSAod2IuV29ya2Jvb2sgJiYgKHdiLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoID4gMCk7XG5cblx0LyogZmlsZVZlcnNpb24gKi9cblx0LyogZmlsZVNoYXJpbmcgKi9cblxuXHR2YXIgd29ya2Jvb2tQciA9ICh7Y29kZU5hbWU6XCJUaGlzV29ya2Jvb2tcIn0pO1xuXHRpZih3Yi5Xb3JrYm9vayAmJiB3Yi5Xb3JrYm9vay5XQlByb3BzKSB7XG5cdFx0V0JQcm9wc0RlZi5mb3JFYWNoKGZ1bmN0aW9uKHgpIHtcbmlmKCh3Yi5Xb3JrYm9vay5XQlByb3BzW3hbMF1dKSA9PSBudWxsKSByZXR1cm47XG5cdFx0XHRpZigod2IuV29ya2Jvb2suV0JQcm9wc1t4WzBdXSkgPT0geFsxXSkgcmV0dXJuO1xuXHRcdFx0d29ya2Jvb2tQclt4WzBdXSA9ICh3Yi5Xb3JrYm9vay5XQlByb3BzW3hbMF1dKTtcblx0XHR9KTtcbmlmKHdiLldvcmtib29rLldCUHJvcHMuQ29kZU5hbWUpIHsgd29ya2Jvb2tQci5jb2RlTmFtZSA9IHdiLldvcmtib29rLldCUHJvcHMuQ29kZU5hbWU7IGRlbGV0ZSB3b3JrYm9va1ByLkNvZGVOYW1lOyB9XG5cdH1cblx0b1tvLmxlbmd0aF0gPSAod3JpdGV4dGFnKCd3b3JrYm9va1ByJywgbnVsbCwgd29ya2Jvb2tQcikpO1xuXG5cdC8qIHdvcmtib29rUHJvdGVjdGlvbiAqL1xuXHQvKiBib29rVmlld3MgKi9cblxuXHRvW28ubGVuZ3RoXSA9IFwiPHNoZWV0cz5cIjtcblx0dmFyIHNoZWV0cyA9IHdiLldvcmtib29rICYmIHdiLldvcmtib29rLlNoZWV0cyB8fCBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSAhPSB3Yi5TaGVldE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0dmFyIHNodCA9ICh7bmFtZTplc2NhcGV4bWwod2IuU2hlZXROYW1lc1tpXS5zbGljZSgwLDMxKSl9KTtcblx0XHRzaHQuc2hlZXRJZCA9IFwiXCIrKGkrMSk7XG5cdFx0c2h0W1wicjppZFwiXSA9IFwicklkXCIrKGkrMSk7XG5cdFx0aWYoc2hlZXRzW2ldKSBzd2l0Y2goc2hlZXRzW2ldLkhpZGRlbikge1xuXHRcdFx0Y2FzZSAxOiBzaHQuc3RhdGUgPSBcImhpZGRlblwiOyBicmVhaztcblx0XHRcdGNhc2UgMjogc2h0LnN0YXRlID0gXCJ2ZXJ5SGlkZGVuXCI7IGJyZWFrO1xuXHRcdH1cblx0XHRvW28ubGVuZ3RoXSA9ICh3cml0ZXh0YWcoJ3NoZWV0JyxudWxsLHNodCkpO1xuXHR9XG5cdG9bby5sZW5ndGhdID0gXCI8L3NoZWV0cz5cIjtcblxuXHQvKiBmdW5jdGlvbkdyb3VwcyAqL1xuXHQvKiBleHRlcm5hbFJlZmVyZW5jZXMgKi9cblxuXHRpZih3cml0ZV9uYW1lcykge1xuXHRcdG9bby5sZW5ndGhdID0gXCI8ZGVmaW5lZE5hbWVzPlwiO1xuXHRcdGlmKHdiLldvcmtib29rICYmIHdiLldvcmtib29rLk5hbWVzKSB3Yi5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcblx0XHRcdHZhciBkID0ge25hbWU6bi5OYW1lfTtcblx0XHRcdGlmKG4uQ29tbWVudCkgZC5jb21tZW50ID0gbi5Db21tZW50O1xuXHRcdFx0aWYobi5TaGVldCAhPSBudWxsKSBkLmxvY2FsU2hlZXRJZCA9IFwiXCIrbi5TaGVldDtcblx0XHRcdGlmKCFuLlJlZikgcmV0dXJuO1xuXHRcdFx0b1tvLmxlbmd0aF0gPSB3cml0ZXh0YWcoJ2RlZmluZWROYW1lJywgU3RyaW5nKG4uUmVmKSwgZCk7XG5cdFx0fSk7XG5cdFx0b1tvLmxlbmd0aF0gPSBcIjwvZGVmaW5lZE5hbWVzPlwiO1xuXHR9XG5cblx0LyogY2FsY1ByICovXG5cdC8qIG9sZVNpemUgKi9cblx0LyogY3VzdG9tV29ya2Jvb2tWaWV3cyAqL1xuXHQvKiBwaXZvdENhY2hlcyAqL1xuXHQvKiBzbWFydFRhZ1ByICovXG5cdC8qIHNtYXJ0VGFnVHlwZXMgKi9cblx0Lyogd2ViUHVibGlzaGluZyAqL1xuXHQvKiBmaWxlUmVjb3ZlcnlQciAqL1xuXHQvKiB3ZWJQdWJsaXNoT2JqZWN0cyAqL1xuXHQvKiBleHRMc3QgKi9cblxuXHRpZihvLmxlbmd0aD4yKXsgb1tvLmxlbmd0aF0gPSAnPC93b3JrYm9vaz4nOyBvWzFdPW9bMV0ucmVwbGFjZShcIi8+XCIsXCI+XCIpOyB9XG5cdHJldHVybiBvLmpvaW4oXCJcIik7XG59XG4vKiBbTVMtWExTQl0gMi40LjMwMSBCcnRCdW5kbGVTaCAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0QnVuZGxlU2goZGF0YSwgbGVuZ3RoKSB7XG5cdHZhciB6ID0ge307XG5cdHouSGlkZGVuID0gZGF0YS5yZWFkX3NoaWZ0KDQpOyAvL2hzU3RhdGUgU1RfU2hlZXRTdGF0ZVxuXHR6LmlUYWJJRCA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0ei5zdHJSZWxJRCA9IHBhcnNlX1JlbElEKGRhdGEsbGVuZ3RoLTgpO1xuXHR6Lm5hbWUgPSBwYXJzZV9YTFdpZGVTdHJpbmcoZGF0YSk7XG5cdHJldHVybiB6O1xufVxuZnVuY3Rpb24gd3JpdGVfQnJ0QnVuZGxlU2goZGF0YSwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoMTI3KTtcblx0by53cml0ZV9zaGlmdCg0LCBkYXRhLkhpZGRlbik7XG5cdG8ud3JpdGVfc2hpZnQoNCwgZGF0YS5pVGFiSUQpO1xuXHR3cml0ZV9SZWxJRChkYXRhLnN0clJlbElELCBvKTtcblx0d3JpdGVfWExXaWRlU3RyaW5nKGRhdGEubmFtZS5zbGljZSgwLDMxKSwgbyk7XG5cdHJldHVybiBvLmxlbmd0aCA+IG8ubCA/IG8uc2xpY2UoMCwgby5sKSA6IG87XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuODA3IEJydFdiUHJvcCAqL1xuZnVuY3Rpb24gcGFyc2VfQnJ0V2JQcm9wKGRhdGEsIGxlbmd0aCkge1xuXHR2YXIgbyA9ICh7fSk7XG5cdHZhciBmbGFncyA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0by5kZWZhdWx0VGhlbWVWZXJzaW9uID0gZGF0YS5yZWFkX3NoaWZ0KDQpO1xuXHR2YXIgc3RyTmFtZSA9IChsZW5ndGggPiA4KSA/IHBhcnNlX1hMV2lkZVN0cmluZyhkYXRhKSA6IFwiXCI7XG5cdGlmKHN0ck5hbWUubGVuZ3RoID4gMCkgby5Db2RlTmFtZSA9IHN0ck5hbWU7XG5cdG8uYXV0b0NvbXByZXNzUGljdHVyZXMgPSAhIShmbGFncyAmIDB4MTAwMDApO1xuXHRvLmJhY2t1cEZpbGUgPSAhIShmbGFncyAmIDB4NDApO1xuXHRvLmNoZWNrQ29tcGF0aWJpbGl0eSA9ICEhKGZsYWdzICYgMHgxMDAwKTtcblx0by5kYXRlMTkwNCA9ICEhKGZsYWdzICYgMHgwMSk7XG5cdG8uZmlsdGVyUHJpdmFjeSA9ICEhKGZsYWdzICYgMHgwOCk7XG5cdG8uaGlkZVBpdm90RmllbGRMaXN0ID0gISEoZmxhZ3MgJiAweDQwMCk7XG5cdG8ucHJvbXB0ZWRTb2x1dGlvbnMgPSAhIShmbGFncyAmIDB4MTApO1xuXHRvLnB1Ymxpc2hJdGVtcyA9ICEhKGZsYWdzICYgMHg4MDApO1xuXHRvLnJlZnJlc2hBbGxDb25uZWN0aW9ucyA9ICEhKGZsYWdzICYgMHg0MDAwMCk7XG5cdG8uc2F2ZUV4dGVybmFsTGlua1ZhbHVlcyA9ICEhKGZsYWdzICYgMHg4MCk7XG5cdG8uc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXMgPSAhIShmbGFncyAmIDB4MDQpO1xuXHRvLnNob3dJbmtBbm5vdGF0aW9uID0gISEoZmxhZ3MgJiAweDIwKTtcblx0by5zaG93T2JqZWN0cyA9IFtcImFsbFwiLCBcInBsYWNlaG9sZGVyc1wiLCBcIm5vbmVcIl1bKGZsYWdzID4+IDEzKSAmIDB4MDNdO1xuXHRvLnNob3dQaXZvdENoYXJ0RmlsdGVyID0gISEoZmxhZ3MgJiAweDgwMDApO1xuXHRvLnVwZGF0ZUxpbmtzID0gW1widXNlclNldFwiLCBcIm5ldmVyXCIsIFwiYWx3YXlzXCJdWyhmbGFncyA+PiA4KSAmIDB4MDNdO1xuXHRyZXR1cm4gbztcbn1cbmZ1bmN0aW9uIHdyaXRlX0JydFdiUHJvcChkYXRhLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1Zig3Mik7XG5cdHZhciBmbGFncyA9IDA7XG5cdGlmKGRhdGEpIHtcblx0XHQvKiBUT0RPOiBtaXJyb3IgcGFyc2VfQnJ0V2JQcm9wIGZpZWxkcyAqL1xuXHRcdGlmKGRhdGEuZmlsdGVyUHJpdmFjeSkgZmxhZ3MgfD0gMHgwODtcblx0fVxuXHRvLndyaXRlX3NoaWZ0KDQsIGZsYWdzKTtcblx0by53cml0ZV9zaGlmdCg0LCAwKTtcblx0d3JpdGVfWExTQkNvZGVOYW1lKGRhdGEgJiYgZGF0YS5Db2RlTmFtZSB8fCBcIlRoaXNXb3JrYm9va1wiLCBvKTtcblx0cmV0dXJuIG8uc2xpY2UoMCwgby5sKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfQnJ0RlJUQXJjaElEJChkYXRhLCBsZW5ndGgpIHtcblx0dmFyIG8gPSB7fTtcblx0ZGF0YS5yZWFkX3NoaWZ0KDQpO1xuXHRvLkFyY2hJRCA9IGRhdGEucmVhZF9zaGlmdCg0KTtcblx0ZGF0YS5sICs9IGxlbmd0aCAtIDg7XG5cdHJldHVybiBvO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjY4MCBCcnROYW1lICovXG5mdW5jdGlvbiBwYXJzZV9CcnROYW1lKGRhdGEsIGxlbmd0aCwgb3B0cykge1xuXHR2YXIgZW5kID0gZGF0YS5sICsgbGVuZ3RoO1xuXHRkYXRhLmwgKz0gNDsgLy92YXIgZmxhZ3MgPSBkYXRhLnJlYWRfc2hpZnQoNCk7XG5cdGRhdGEubCArPSAxOyAvL3ZhciBjaEtleSA9IGRhdGEucmVhZF9zaGlmdCgxKTtcblx0dmFyIGl0YWIgPSBkYXRhLnJlYWRfc2hpZnQoNCk7XG5cdHZhciBuYW1lID0gcGFyc2VfWExOYW1lV2lkZVN0cmluZyhkYXRhKTtcblx0dmFyIGZvcm11bGEgPSBwYXJzZV9YTFNCTmFtZVBhcnNlZEZvcm11bGEoZGF0YSwgMCwgb3B0cyk7XG5cdHZhciBjb21tZW50ID0gcGFyc2VfWExOdWxsYWJsZVdpZGVTdHJpbmcoZGF0YSk7XG5cdC8vaWYoMCAvKiBmUHJvYyAqLykge1xuXHRcdC8vIHVudXNlZHN0cmluZzE6IFhMTnVsbGFibGVXaWRlU3RyaW5nXG5cdFx0Ly8gZGVzY3JpcHRpb246IFhMTnVsbGFibGVXaWRlU3RyaW5nXG5cdFx0Ly8gaGVscFRvcGljOiBYTE51bGxhYmxlV2lkZVN0cmluZ1xuXHRcdC8vIHVudXNlZHN0cmluZzI6IFhMTnVsbGFibGVXaWRlU3RyaW5nXG5cdC8vfVxuXHRkYXRhLmwgPSBlbmQ7XG5cdHZhciBvdXQgPSAoe05hbWU6bmFtZSwgUHRnOmZvcm11bGF9KTtcblx0aWYoaXRhYiA8IDB4RkZGRkZGRikgb3V0LlNoZWV0ID0gaXRhYjtcblx0aWYoY29tbWVudCkgb3V0LkNvbW1lbnQgPSBjb21tZW50O1xuXHRyZXR1cm4gb3V0O1xufVxuXG4vKiBbTVMtWExTQl0gMi4xLjcuNjAgV29ya2Jvb2sgKi9cbmZ1bmN0aW9uIHBhcnNlX3diX2JpbihkYXRhLCBvcHRzKSB7XG5cdHZhciB3YiA9IHsgQXBwVmVyc2lvbjp7fSwgV0JQcm9wczp7fSwgV0JWaWV3OltdLCBTaGVldHM6W10sIENhbGNQcjp7fSwgeG1sbnM6IFwiXCIgfTtcblx0dmFyIHBhc3MgPSBmYWxzZTtcblxuXHRpZighb3B0cykgb3B0cyA9IHt9O1xuXHRvcHRzLmJpZmYgPSAxMjtcblxuXHR2YXIgTmFtZXMgPSBbXTtcblx0dmFyIHN1cGJvb2tzID0gKFtbXV0pO1xuXHRzdXBib29rcy5TaGVldE5hbWVzID0gW107XG5cdHN1cGJvb2tzLlhUSSA9IFtdO1xuXG5cdHJlY29yZGhvcHBlcihkYXRhLCBmdW5jdGlvbiBob3BwZXJfd2IodmFsLCBSX24sIFJUKSB7XG5cdFx0c3dpdGNoKFJUKSB7XG5cdFx0XHRjYXNlIDB4MDA5QzogLyogJ0JydEJ1bmRsZVNoJyAqL1xuXHRcdFx0XHRzdXBib29rcy5TaGVldE5hbWVzLnB1c2godmFsLm5hbWUpO1xuXHRcdFx0XHR3Yi5TaGVldHMucHVzaCh2YWwpOyBicmVhaztcblxuXHRcdFx0Y2FzZSAweDAwOTk6IC8qICdCcnRXYlByb3AnICovXG5cdFx0XHRcdHdiLldCUHJvcHMgPSB2YWw7IGJyZWFrO1xuXG5cdFx0XHRjYXNlIDB4MDAyNzogLyogJ0JydE5hbWUnICovXG5cdFx0XHRcdGlmKHZhbC5TaGVldCAhPSBudWxsKSBvcHRzLlNJRCA9IHZhbC5TaGVldDtcblx0XHRcdFx0dmFsLlJlZiA9IHN0cmluZ2lmeV9mb3JtdWxhKHZhbC5QdGcsIG51bGwsIG51bGwsIHN1cGJvb2tzLCBvcHRzKTtcblx0XHRcdFx0ZGVsZXRlIG9wdHMuU0lEO1xuXHRcdFx0XHRkZWxldGUgdmFsLlB0Zztcblx0XHRcdFx0TmFtZXMucHVzaCh2YWwpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMHgwNDBDOiAvKiAnQnJ0TmFtZUV4dCcgKi8gYnJlYWs7XG5cblx0XHRcdGNhc2UgMHgwMTY1OiAvKiAnQnJ0U3VwU2VsZicgKi9cblx0XHRcdGNhc2UgMHgwMTY2OiAvKiAnQnJ0U3VwU2FtZScgKi9cblx0XHRcdGNhc2UgMHgwMTYzOiAvKiAnQnJ0U3VwQm9va1NyYycgKi9cblx0XHRcdGNhc2UgMHgwMjlCOiAvKiAnQnJ0U3VwQWRkaW4nICovXG5cdFx0XHRcdGlmKCFzdXBib29rc1swXS5sZW5ndGgpIHN1cGJvb2tzWzBdID0gW1JULCB2YWxdO1xuXHRcdFx0XHRlbHNlIHN1cGJvb2tzLnB1c2goW1JULCB2YWxdKTtcblx0XHRcdFx0c3VwYm9va3Nbc3VwYm9va3MubGVuZ3RoIC0gMV0uWFRJID0gW107XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAweDAxNkE6IC8qICdCcnRFeHRlcm5TaGVldCcgKi9cblx0XHRcdFx0aWYoc3VwYm9va3MubGVuZ3RoID09PSAwKSB7IHN1cGJvb2tzWzBdID0gW107IHN1cGJvb2tzWzBdLlhUSSA9IFtdOyB9XG5cdFx0XHRcdHN1cGJvb2tzW3N1cGJvb2tzLmxlbmd0aCAtIDFdLlhUSSA9IHN1cGJvb2tzW3N1cGJvb2tzLmxlbmd0aCAtIDFdLlhUSS5jb25jYXQodmFsKTtcblx0XHRcdFx0c3VwYm9va3MuWFRJID0gc3VwYm9va3MuWFRJLmNvbmNhdCh2YWwpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMHgwMTY5OiAvKiAnQnJ0UGxhY2Vob2xkZXJOYW1lJyAqL1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0LyogY2FzZSAnQnJ0TW9kZWxUaW1lR3JvdXBpbmdDYWxjQ29sJyAqL1xuXHRcdFx0LyogY2FzZSAnQnJ0UmV2aXNpb25QdHInICovXG5cdFx0XHQvKiBjYXNlICdCcnRVaWQnICovXG5cdFx0XHRjYXNlIDB4MDgxNzogLyogJ0JydEFic1BhdGgxNScgKi9cblx0XHRcdGNhc2UgMHgwMjE2OiAvKiAnQnJ0Qm9va1Byb3RlY3Rpb24nICovXG5cdFx0XHRjYXNlIDB4MDJBNTogLyogJ0JydEJvb2tQcm90ZWN0aW9uSXNvJyAqL1xuXHRcdFx0Y2FzZSAweDAwOUU6IC8qICdCcnRCb29rVmlldycgKi9cblx0XHRcdGNhc2UgMHgwMDlEOiAvKiAnQnJ0Q2FsY1Byb3AnICovXG5cdFx0XHRjYXNlIDB4MDI2MjogLyogJ0JydENyYXNoUmVjRXJyJyAqL1xuXHRcdFx0Y2FzZSAweDA4MDI6IC8qICdCcnREZWNvdXBsZWRQaXZvdENhY2hlSUQnICovXG5cdFx0XHRjYXNlIDB4MDA5QjogLyogJ0JydEZpbGVSZWNvdmVyJyAqL1xuXHRcdFx0Y2FzZSAweDAyMjQ6IC8qICdCcnRGaWxlU2hhcmluZycgKi9cblx0XHRcdGNhc2UgMHgwMkE0OiAvKiAnQnJ0RmlsZVNoYXJpbmdJc28nICovXG5cdFx0XHRjYXNlIDB4MDA4MDogLyogJ0JydEZpbGVWZXJzaW9uJyAqL1xuXHRcdFx0Y2FzZSAweDAyOTk6IC8qICdCcnRGbkdyb3VwJyAqL1xuXHRcdFx0Y2FzZSAweDA4NTA6IC8qICdCcnRNb2RlbFJlbGF0aW9uc2hpcCcgKi9cblx0XHRcdGNhc2UgMHgwODREOiAvKiAnQnJ0TW9kZWxUYWJsZScgKi9cblx0XHRcdGNhc2UgMHgwMjI1OiAvKiAnQnJ0T2xlU2l6ZScgKi9cblx0XHRcdGNhc2UgMHgwODA1OiAvKiAnQnJ0UGl2b3RUYWJsZVJlZicgKi9cblx0XHRcdGNhc2UgMHgwMjU0OiAvKiAnQnJ0U21hcnRUYWdUeXBlJyAqL1xuXHRcdFx0Y2FzZSAweDA4MUM6IC8qICdCcnRUYWJsZVNsaWNlckNhY2hlSUQnICovXG5cdFx0XHRjYXNlIDB4MDgxQjogLyogJ0JydFRhYmxlU2xpY2VyQ2FjaGVJRHMnICovXG5cdFx0XHRjYXNlIDB4MDgyMjogLyogJ0JydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQnICovXG5cdFx0XHRjYXNlIDB4MDE4RDogLyogJ0JydFVzZXJCb29rVmlldycgKi9cblx0XHRcdGNhc2UgMHgwMDlBOiAvKiAnQnJ0V2JGYWN0b2lkJyAqL1xuXHRcdFx0Y2FzZSAweDA0NUQ6IC8qICdCcnRXYlByb3AxNCcgKi9cblx0XHRcdGNhc2UgMHgwMjI5OiAvKiAnQnJ0V2ViT3B0JyAqL1xuXHRcdFx0Y2FzZSAweDA4MkI6IC8qICdCcnRXb3JrQm9va1ByMTUnICovXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIDB4MDAyMzogLyogJ0JydEZSVEJlZ2luJyAqL1xuXHRcdFx0XHRwYXNzID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAyNDogLyogJ0JydEZSVEVuZCcgKi9cblx0XHRcdFx0cGFzcyA9IGZhbHNlOyBicmVhaztcblx0XHRcdGNhc2UgMHgwMDI1OiAvKiAnQnJ0QUNCZWdpbicgKi8gYnJlYWs7XG5cdFx0XHRjYXNlIDB4MDAyNjogLyogJ0JydEFDRW5kJyAqLyBicmVhaztcblxuXHRcdFx0Y2FzZSAweDAwMTA6IC8qICdCcnRGUlRBcmNoSUQkJyAqLyBicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkJlZ2luXCIpID4gMCl7LyogZW1wdHkgKi99XG5cdFx0XHRcdGVsc2UgaWYoKFJfbnx8XCJcIikuaW5kZXhPZihcIkVuZFwiKSA+IDApey8qIGVtcHR5ICovfVxuXHRcdFx0XHRlbHNlIGlmKCFwYXNzIHx8IG9wdHMuV1RGKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHJlY29yZCBcIiArIFJUICsgXCIgXCIgKyBSX24pO1xuXHRcdH1cblx0fSwgb3B0cyk7XG5cblx0cGFyc2Vfd2JfZGVmYXVsdHMod2IpO1xuXG5cdC8vICRGbG93SWdub3JlXG5cdHdiLk5hbWVzID0gTmFtZXM7XG5cblx0KHdiKS5zdXBib29rcyA9IHN1cGJvb2tzO1xuXHRyZXR1cm4gd2I7XG59XG5cbi8qIFtNUy1YTFNCXSAyLjEuNy42MCBXb3JrYm9vayAqL1xuZnVuY3Rpb24gd3JpdGVfQlVORExFU0hTKGJhLCB3Yikge1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QmVnaW5CdW5kbGVTaHNcIik7XG5cdGZvcih2YXIgaWR4ID0gMDsgaWR4ICE9IHdiLlNoZWV0TmFtZXMubGVuZ3RoOyArK2lkeCkge1xuXHRcdHZhciB2aXogPSB3Yi5Xb3JrYm9vayAmJiB3Yi5Xb3JrYm9vay5TaGVldHMgJiYgd2IuV29ya2Jvb2suU2hlZXRzW2lkeF0gJiYgd2IuV29ya2Jvb2suU2hlZXRzW2lkeF0uSGlkZGVuIHx8IDA7XG5cdFx0dmFyIGQgPSB7IEhpZGRlbjogdml6LCBpVGFiSUQ6IGlkeCsxLCBzdHJSZWxJRDogJ3JJZCcgKyAoaWR4KzEpLCBuYW1lOiB3Yi5TaGVldE5hbWVzW2lkeF0gfTtcblx0XHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0QnVuZGxlU2hcIiwgd3JpdGVfQnJ0QnVuZGxlU2goZCkpO1xuXHR9XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRFbmRCdW5kbGVTaHNcIik7XG59XG5cbi8qIFtNUy1YTFNCXSAyLjQuNjQzIEJydEZpbGVWZXJzaW9uICovXG5mdW5jdGlvbiB3cml0ZV9CcnRGaWxlVmVyc2lvbihkYXRhLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1ZigxMjcpO1xuXHRmb3IodmFyIGkgPSAwOyBpICE9IDQ7ICsraSkgby53cml0ZV9zaGlmdCg0LCAwKTtcblx0d3JpdGVfWExXaWRlU3RyaW5nKFwiU2hlZXRKU1wiLCBvKTtcblx0d3JpdGVfWExXaWRlU3RyaW5nKFhMU1gudmVyc2lvbiwgbyk7XG5cdHdyaXRlX1hMV2lkZVN0cmluZyhYTFNYLnZlcnNpb24sIG8pO1xuXHR3cml0ZV9YTFdpZGVTdHJpbmcoXCI3MjYyXCIsIG8pO1xuXHRvLmxlbmd0aCA9IG8ubDtcblx0cmV0dXJuIG8ubGVuZ3RoID4gby5sID8gby5zbGljZSgwLCBvLmwpIDogbztcbn1cblxuLyogW01TLVhMU0JdIDIuNC4yOTggQnJ0Qm9va1ZpZXcgKi9cbmZ1bmN0aW9uIHdyaXRlX0JydEJvb2tWaWV3KGlkeCwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoMjkpO1xuXHRvLndyaXRlX3NoaWZ0KC00LCAwKTtcblx0by53cml0ZV9zaGlmdCgtNCwgNDYwKTtcblx0by53cml0ZV9zaGlmdCg0LCAgMjg4MDApO1xuXHRvLndyaXRlX3NoaWZ0KDQsICAxNzYwMCk7XG5cdG8ud3JpdGVfc2hpZnQoNCwgIDUwMCk7XG5cdG8ud3JpdGVfc2hpZnQoNCwgIGlkeCk7XG5cdG8ud3JpdGVfc2hpZnQoNCwgIGlkeCk7XG5cdHZhciBmbGFncyA9IDB4Nzg7XG5cdG8ud3JpdGVfc2hpZnQoMSwgIGZsYWdzKTtcblx0cmV0dXJuIG8ubGVuZ3RoID4gby5sID8gby5zbGljZSgwLCBvLmwpIDogbztcbn1cblxuLyogW01TLVhMU0JdIDIuMS43LjYwIFdvcmtib29rICovXG5mdW5jdGlvbiB3cml0ZV9CT09LVklFV1MoYmEsIHdiKSB7XG5cdC8qIHJlcXVpcmVkIGlmIGhpZGRlbiB0YWIgYXBwZWFycyBiZWZvcmUgdmlzaWJsZSB0YWIgKi9cblx0aWYoIXdiLldvcmtib29rIHx8ICF3Yi5Xb3JrYm9vay5TaGVldHMpIHJldHVybjtcblx0dmFyIHNoZWV0cyA9IHdiLldvcmtib29rLlNoZWV0cztcblx0dmFyIGkgPSAwLCB2aXN0YWIgPSAtMSwgaGlkZGVuID0gLTE7XG5cdGZvcig7IGkgPCBzaGVldHMubGVuZ3RoOyArK2kpIHtcblx0XHRpZighc2hlZXRzW2ldIHx8ICFzaGVldHNbaV0uSGlkZGVuICYmIHZpc3RhYiA9PSAtMSkgdmlzdGFiID0gaTtcblx0XHRlbHNlIGlmKHNoZWV0c1tpXS5IaWRkZW4gPT0gMSAmJiBoaWRkZW4gPT0gLTEpIGhpZGRlbiA9IGk7XG5cdH1cblx0aWYoaGlkZGVuID4gdmlzdGFiKSByZXR1cm47XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpbkJvb2tWaWV3c1wiKTtcblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEJvb2tWaWV3XCIsIHdyaXRlX0JydEJvb2tWaWV3KHZpc3RhYikpO1xuXHQvKiAxKihCcnRCb29rVmlldyAqRlJUKSAqL1xuXHR3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RW5kQm9va1ZpZXdzXCIpO1xufVxuXG4vKiBbTVMtWExTQl0gMi40LjMwMiBCcnRDYWxjUHJvcCAqL1xuLypmdW5jdGlvbiB3cml0ZV9CcnRDYWxjUHJvcChkYXRhLCBvKSB7XG5cdGlmKCFvKSBvID0gbmV3X2J1ZigyNik7XG5cdG8ud3JpdGVfc2hpZnQoNCwwKTsgLy8gZm9yY2UgcmVjYWxjXG5cdG8ud3JpdGVfc2hpZnQoNCwxKTtcblx0by53cml0ZV9zaGlmdCg0LDApO1xuXHR3cml0ZV9YbnVtKDAsIG8pO1xuXHRvLndyaXRlX3NoaWZ0KC00LCAxMDIzKTtcblx0by53cml0ZV9zaGlmdCgxLCAweDMzKTtcblx0by53cml0ZV9zaGlmdCgxLCAweDAwKTtcblx0cmV0dXJuIG87XG59Ki9cblxuLyogW01TLVhMU0JdIDIuNC42NDAgQnJ0RmlsZVJlY292ZXIgKi9cbi8qZnVuY3Rpb24gd3JpdGVfQnJ0RmlsZVJlY292ZXIoZGF0YSwgbykge1xuXHRpZighbykgbyA9IG5ld19idWYoMSk7XG5cdG8ud3JpdGVfc2hpZnQoMSwwKTtcblx0cmV0dXJuIG87XG59Ki9cblxuLyogW01TLVhMU0JdIDIuMS43LjYwIFdvcmtib29rICovXG5mdW5jdGlvbiB3cml0ZV93Yl9iaW4od2IsIG9wdHMpIHtcblx0dmFyIGJhID0gYnVmX2FycmF5KCk7XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRCZWdpbkJvb2tcIik7XG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRGaWxlVmVyc2lvblwiLCB3cml0ZV9CcnRGaWxlVmVyc2lvbigpKTtcblx0LyogW1tCcnRGaWxlU2hhcmluZ0lzb10gQnJ0RmlsZVNoYXJpbmddICovXG5cdHdyaXRlX3JlY29yZChiYSwgXCJCcnRXYlByb3BcIiwgd3JpdGVfQnJ0V2JQcm9wKHdiLldvcmtib29rICYmIHdiLldvcmtib29rLldCUHJvcHMgfHwgbnVsbCkpO1xuXHQvKiBbQUNBQlNQQVRIXSAqL1xuXHQvKiBbW0JydEJvb2tQcm90ZWN0aW9uSXNvXSBCcnRCb29rUHJvdGVjdGlvbl0gKi9cblx0d3JpdGVfQk9PS1ZJRVdTKGJhLCB3Yiwgb3B0cyk7XG5cdHdyaXRlX0JVTkRMRVNIUyhiYSwgd2IsIG9wdHMpO1xuXHQvKiBbRk5HUk9VUF0gKi9cblx0LyogW0VYVEVSTkFMU10gKi9cblx0LyogKkJydE5hbWUgKi9cblx0Lyogd3JpdGVfcmVjb3JkKGJhLCBcIkJydENhbGNQcm9wXCIsIHdyaXRlX0JydENhbGNQcm9wKCkpOyAqL1xuXHQvKiBbQnJ0T2xlU2l6ZV0gKi9cblx0LyogKihCcnRVc2VyQm9va1ZpZXcgKkZSVCkgKi9cblx0LyogW1BJVk9UQ0FDSEVJRFNdICovXG5cdC8qIFtCcnRXYkZhY3RvaWRdICovXG5cdC8qIFtTTUFSVFRBR1RZUEVTXSAqL1xuXHQvKiBbQnJ0V2ViT3B0XSAqL1xuXHQvKiB3cml0ZV9yZWNvcmQoYmEsIFwiQnJ0RmlsZVJlY292ZXJcIiwgd3JpdGVfQnJ0RmlsZVJlY292ZXIoKSk7ICovXG5cdC8qIFtXRUJQVUJJVEVNU10gKi9cblx0LyogW0NSRVJSU10gKi9cblx0LyogRlJUV09SS0JPT0sgKi9cblx0d3JpdGVfcmVjb3JkKGJhLCBcIkJydEVuZEJvb2tcIik7XG5cblx0cmV0dXJuIGJhLmVuZCgpO1xufVxuZnVuY3Rpb24gcGFyc2Vfd2IoZGF0YSwgbmFtZSwgb3B0cykge1xuXHRpZihuYW1lLnNsaWNlKC00KT09PVwiLmJpblwiKSByZXR1cm4gcGFyc2Vfd2JfYmluKChkYXRhKSwgb3B0cyk7XG5cdHJldHVybiBwYXJzZV93Yl94bWwoKGRhdGEpLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2Vfd3MoZGF0YSwgbmFtZSwgaWR4LCBvcHRzLCByZWxzLCB3YiwgdGhlbWVzLCBzdHlsZXMpIHtcblx0aWYobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIikgcmV0dXJuIHBhcnNlX3dzX2JpbigoZGF0YSksIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKTtcblx0cmV0dXJuIHBhcnNlX3dzX3htbCgoZGF0YSksIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfY3MoZGF0YSwgbmFtZSwgaWR4LCBvcHRzLCByZWxzLCB3YiwgdGhlbWVzLCBzdHlsZXMpIHtcblx0aWYobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIikgcmV0dXJuIHBhcnNlX2NzX2JpbigoZGF0YSksIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKTtcblx0cmV0dXJuIHBhcnNlX2NzX3htbCgoZGF0YSksIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfbXMoZGF0YSwgbmFtZSwgaWR4LCBvcHRzLCByZWxzLCB3YiwgdGhlbWVzLCBzdHlsZXMpIHtcblx0aWYobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIikgcmV0dXJuIHBhcnNlX21zX2JpbigoZGF0YSksIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKTtcblx0cmV0dXJuIHBhcnNlX21zX3htbCgoZGF0YSksIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfZHMoZGF0YSwgbmFtZSwgaWR4LCBvcHRzLCByZWxzLCB3YiwgdGhlbWVzLCBzdHlsZXMpIHtcblx0aWYobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIikgcmV0dXJuIHBhcnNlX2RzX2JpbigoZGF0YSksIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKTtcblx0cmV0dXJuIHBhcnNlX2RzX3htbCgoZGF0YSksIG9wdHMsIGlkeCwgcmVscywgd2IsIHRoZW1lcywgc3R5bGVzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2Vfc3R5KGRhdGEsIG5hbWUsIHRoZW1lcywgb3B0cykge1xuXHRpZihuYW1lLnNsaWNlKC00KT09PVwiLmJpblwiKSByZXR1cm4gcGFyc2Vfc3R5X2JpbigoZGF0YSksIHRoZW1lcywgb3B0cyk7XG5cdHJldHVybiBwYXJzZV9zdHlfeG1sKChkYXRhKSwgdGhlbWVzLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfdGhlbWUoZGF0YSwgbmFtZSwgb3B0cykge1xuXHRyZXR1cm4gcGFyc2VfdGhlbWVfeG1sKGRhdGEsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9zc3QoZGF0YSwgbmFtZSwgb3B0cykge1xuXHRpZihuYW1lLnNsaWNlKC00KT09PVwiLmJpblwiKSByZXR1cm4gcGFyc2Vfc3N0X2JpbigoZGF0YSksIG9wdHMpO1xuXHRyZXR1cm4gcGFyc2Vfc3N0X3htbCgoZGF0YSksIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jbW50KGRhdGEsIG5hbWUsIG9wdHMpIHtcblx0aWYobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIikgcmV0dXJuIHBhcnNlX2NvbW1lbnRzX2JpbigoZGF0YSksIG9wdHMpO1xuXHRyZXR1cm4gcGFyc2VfY29tbWVudHNfeG1sKChkYXRhKSwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX2NjKGRhdGEsIG5hbWUsIG9wdHMpIHtcblx0aWYobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIikgcmV0dXJuIHBhcnNlX2NjX2JpbigoZGF0YSksIG5hbWUsIG9wdHMpO1xuXHRyZXR1cm4gcGFyc2VfY2NfeG1sKChkYXRhKSwgbmFtZSwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlX3hsaW5rKGRhdGEsIG5hbWUsIG9wdHMpIHtcblx0aWYobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIikgcmV0dXJuIHBhcnNlX3hsaW5rX2JpbigoZGF0YSksIG5hbWUsIG9wdHMpO1xuXHRyZXR1cm4gcGFyc2VfeGxpbmtfeG1sKChkYXRhKSwgbmFtZSwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX3diKHdiLCBuYW1lLCBvcHRzKSB7XG5cdHJldHVybiAobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIiA/IHdyaXRlX3diX2JpbiA6IHdyaXRlX3diX3htbCkod2IsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV93cyhkYXRhLCBuYW1lLCBvcHRzLCB3YiwgcmVscykge1xuXHRyZXR1cm4gKG5hbWUuc2xpY2UoLTQpPT09XCIuYmluXCIgPyB3cml0ZV93c19iaW4gOiB3cml0ZV93c194bWwpKGRhdGEsIG9wdHMsIHdiLCByZWxzKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5mdW5jdGlvbiB3cml0ZV9jcyhkYXRhLCBuYW1lLCBvcHRzLCB3YiwgcmVscykge1xuXHRyZXR1cm4gKG5hbWUuc2xpY2UoLTQpPT09XCIuYmluXCIgPyB3cml0ZV9jc19iaW4gOiB3cml0ZV9jc194bWwpKGRhdGEsIG9wdHMsIHdiLCByZWxzKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfc3R5KGRhdGEsIG5hbWUsIG9wdHMpIHtcblx0cmV0dXJuIChuYW1lLnNsaWNlKC00KT09PVwiLmJpblwiID8gd3JpdGVfc3R5X2JpbiA6IHdyaXRlX3N0eV94bWwpKGRhdGEsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9zc3QoZGF0YSwgbmFtZSwgb3B0cykge1xuXHRyZXR1cm4gKG5hbWUuc2xpY2UoLTQpPT09XCIuYmluXCIgPyB3cml0ZV9zc3RfYmluIDogd3JpdGVfc3N0X3htbCkoZGF0YSwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX2NtbnQoZGF0YSwgbmFtZSwgb3B0cykge1xuXHRyZXR1cm4gKG5hbWUuc2xpY2UoLTQpPT09XCIuYmluXCIgPyB3cml0ZV9jb21tZW50c19iaW4gOiB3cml0ZV9jb21tZW50c194bWwpKGRhdGEsIG9wdHMpO1xufVxuLypcbmZ1bmN0aW9uIHdyaXRlX2NjKGRhdGEsIG5hbWU6c3RyaW5nLCBvcHRzKSB7XG5cdHJldHVybiAobmFtZS5zbGljZSgtNCk9PT1cIi5iaW5cIiA/IHdyaXRlX2NjX2JpbiA6IHdyaXRlX2NjX3htbCkoZGF0YSwgb3B0cyk7XG59XG4qL1xudmFyIGF0dHJlZ2V4ZzI9LyhbXFx3Ol0rKT0oKD86XCIpKFteXCJdKikoPzpcIil8KD86JykoW14nXSopKD86JykpL2c7XG52YXIgYXR0cmVnZXgyPS8oW1xcdzpdKyk9KCg/OlwiKSg/OlteXCJdKikoPzpcIil8KD86JykoPzpbXiddKikoPzonKSkvO1xudmFyIF9jaHIgPSBmdW5jdGlvbihjKSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpOyB9O1xuZnVuY3Rpb24geGxtbF9wYXJzZXhtbHRhZyh0YWcsIHNraXBfcm9vdCkge1xuXHR2YXIgd29yZHMgPSB0YWcuc3BsaXQoL1xccysvKTtcblx0dmFyIHogPSAoW10pOyBpZighc2tpcF9yb290KSB6WzBdID0gd29yZHNbMF07XG5cdGlmKHdvcmRzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHo7XG5cdHZhciBtID0gdGFnLm1hdGNoKGF0dHJlZ2V4ZzIpLCB5LCBqLCB3LCBpO1xuXHRpZihtKSBmb3IoaSA9IDA7IGkgIT0gbS5sZW5ndGg7ICsraSkge1xuXHRcdHkgPSBtW2ldLm1hdGNoKGF0dHJlZ2V4Mik7XG5pZigoaj15WzFdLmluZGV4T2YoXCI6XCIpKSA9PT0gLTEpIHpbeVsxXV0gPSB5WzJdLnNsaWNlKDEseVsyXS5sZW5ndGgtMSk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRpZih5WzFdLnNsaWNlKDAsNikgPT09IFwieG1sbnM6XCIpIHcgPSBcInhtbG5zXCIreVsxXS5zbGljZSg2KTtcblx0XHRcdGVsc2UgdyA9IHlbMV0uc2xpY2UoaisxKTtcblx0XHRcdHpbd10gPSB5WzJdLnNsaWNlKDEseVsyXS5sZW5ndGgtMSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB6O1xufVxuZnVuY3Rpb24geGxtbF9wYXJzZXhtbHRhZ29iaih0YWcpIHtcblx0dmFyIHdvcmRzID0gdGFnLnNwbGl0KC9cXHMrLyk7XG5cdHZhciB6ID0ge307XG5cdGlmKHdvcmRzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHo7XG5cdHZhciBtID0gdGFnLm1hdGNoKGF0dHJlZ2V4ZzIpLCB5LCBqLCB3LCBpO1xuXHRpZihtKSBmb3IoaSA9IDA7IGkgIT0gbS5sZW5ndGg7ICsraSkge1xuXHRcdHkgPSBtW2ldLm1hdGNoKGF0dHJlZ2V4Mik7XG5pZigoaj15WzFdLmluZGV4T2YoXCI6XCIpKSA9PT0gLTEpIHpbeVsxXV0gPSB5WzJdLnNsaWNlKDEseVsyXS5sZW5ndGgtMSk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRpZih5WzFdLnNsaWNlKDAsNikgPT09IFwieG1sbnM6XCIpIHcgPSBcInhtbG5zXCIreVsxXS5zbGljZSg2KTtcblx0XHRcdGVsc2UgdyA9IHlbMV0uc2xpY2UoaisxKTtcblx0XHRcdHpbd10gPSB5WzJdLnNsaWNlKDEseVsyXS5sZW5ndGgtMSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB6O1xufVxuXG4vLyAtLS0tXG5cbmZ1bmN0aW9uIHhsbWxfZm9ybWF0KGZvcm1hdCwgdmFsdWUpIHtcblx0dmFyIGZtdCA9IFhMTUxGb3JtYXRNYXBbZm9ybWF0XSB8fCB1bmVzY2FwZXhtbChmb3JtYXQpO1xuXHRpZihmbXQgPT09IFwiR2VuZXJhbFwiKSByZXR1cm4gU1NGLl9nZW5lcmFsKHZhbHVlKTtcblx0cmV0dXJuIFNTRi5mb3JtYXQoZm10LCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHhsbWxfc2V0X2N1c3Rwcm9wKEN1c3Rwcm9wcywga2V5LCBjcCwgdmFsKSB7XG5cdHZhciBvdmFsID0gdmFsO1xuXHRzd2l0Y2goKGNwWzBdLm1hdGNoKC9kdDpkdD1cIihbXFx3Ll0rKVwiLyl8fFtcIlwiLFwiXCJdKVsxXSkge1xuXHRcdGNhc2UgXCJib29sZWFuXCI6IG92YWwgPSBwYXJzZXhtbGJvb2wodmFsKTsgYnJlYWs7XG5cdFx0Y2FzZSBcImkyXCI6IGNhc2UgXCJpbnRcIjogb3ZhbCA9IHBhcnNlSW50KHZhbCwgMTApOyBicmVhaztcblx0XHRjYXNlIFwicjRcIjogY2FzZSBcImZsb2F0XCI6IG92YWwgPSBwYXJzZUZsb2F0KHZhbCk7IGJyZWFrO1xuXHRcdGNhc2UgXCJkYXRlXCI6IGNhc2UgXCJkYXRlVGltZS50elwiOiBvdmFsID0gcGFyc2VEYXRlKHZhbCk7IGJyZWFrO1xuXHRcdGNhc2UgXCJpOFwiOiBjYXNlIFwic3RyaW5nXCI6IGNhc2UgXCJmaXhlZFwiOiBjYXNlIFwidXVpZFwiOiBjYXNlIFwiYmluLmJhc2U2NFwiOiBicmVhaztcblx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJiYWQgY3VzdHByb3A6XCIgKyBjcFswXSk7XG5cdH1cblx0Q3VzdHByb3BzW3VuZXNjYXBleG1sKGtleSldID0gb3ZhbDtcbn1cblxuZnVuY3Rpb24gc2FmZV9mb3JtYXRfeGxtbChjZWxsLCBuZiwgbykge1xuXHRpZihjZWxsLnQgPT09ICd6JykgcmV0dXJuO1xuXHRpZighbyB8fCBvLmNlbGxUZXh0ICE9PSBmYWxzZSkgdHJ5IHtcblx0XHRpZihjZWxsLnQgPT09ICdlJykgeyBjZWxsLncgPSBjZWxsLncgfHwgQkVycltjZWxsLnZdOyB9XG5cdFx0ZWxzZSBpZihuZiA9PT0gXCJHZW5lcmFsXCIpIHtcblx0XHRcdGlmKGNlbGwudCA9PT0gJ24nKSB7XG5cdFx0XHRcdGlmKChjZWxsLnZ8MCkgPT09IGNlbGwudikgY2VsbC53ID0gU1NGLl9nZW5lcmFsX2ludChjZWxsLnYpO1xuXHRcdFx0XHRlbHNlIGNlbGwudyA9IFNTRi5fZ2VuZXJhbF9udW0oY2VsbC52KTtcblx0XHRcdH1cblx0XHRcdGVsc2UgY2VsbC53ID0gU1NGLl9nZW5lcmFsKGNlbGwudik7XG5cdFx0fVxuXHRcdGVsc2UgY2VsbC53ID0geGxtbF9mb3JtYXQobmZ8fFwiR2VuZXJhbFwiLCBjZWxsLnYpO1xuXHR9IGNhdGNoKGUpIHsgaWYoby5XVEYpIHRocm93IGU7IH1cblx0dHJ5IHtcblx0XHR2YXIgeiA9IFhMTUxGb3JtYXRNYXBbbmZdfHxuZnx8XCJHZW5lcmFsXCI7XG5cdFx0aWYoby5jZWxsTkYpIGNlbGwueiA9IHo7XG5cdFx0aWYoby5jZWxsRGF0ZXMgJiYgY2VsbC50ID09ICduJyAmJiBTU0YuaXNfZGF0ZSh6KSkge1xuXHRcdFx0dmFyIF9kID0gU1NGLnBhcnNlX2RhdGVfY29kZShjZWxsLnYpOyBpZihfZCkgeyBjZWxsLnQgPSAnZCc7IGNlbGwudiA9IG5ldyBEYXRlKF9kLnksIF9kLm0tMSxfZC5kLF9kLkgsX2QuTSxfZC5TLF9kLnUpOyB9XG5cdFx0fVxuXHR9IGNhdGNoKGUpIHsgaWYoby5XVEYpIHRocm93IGU7IH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc19zdHlsZV94bG1sKHN0eWxlcywgc3RhZywgb3B0cykge1xuXHRpZihvcHRzLmNlbGxTdHlsZXMpIHtcblx0XHRpZihzdGFnLkludGVyaW9yKSB7XG5cdFx0XHR2YXIgSSA9IHN0YWcuSW50ZXJpb3I7XG5cdFx0XHRpZihJLlBhdHRlcm4pIEkucGF0dGVyblR5cGUgPSBYTE1MUGF0dGVyblR5cGVNYXBbSS5QYXR0ZXJuXSB8fCBJLlBhdHRlcm47XG5cdFx0fVxuXHR9XG5cdHN0eWxlc1tzdGFnLklEXSA9IHN0YWc7XG59XG5cbi8qIFRPRE86IHRoZXJlIG11c3QgZXhpc3Qgc29tZSBmb3JtIG9mIE9TUC1ibGVzc2VkIHNwZWMgKi9cbmZ1bmN0aW9uIHBhcnNlX3hsbWxfZGF0YSh4bWwsIHNzLCBkYXRhLCBjZWxsLCBiYXNlLCBzdHlsZXMsIGNzdHksIHJvdywgYXJyYXlmLCBvKSB7XG5cdHZhciBuZiA9IFwiR2VuZXJhbFwiLCBzaWQgPSBjZWxsLlN0eWxlSUQsIFMgPSB7fTsgbyA9IG8gfHwge307XG5cdHZhciBpbnRlcmlvcnMgPSBbXTtcblx0dmFyIGkgPSAwO1xuXHRpZihzaWQgPT09IHVuZGVmaW5lZCAmJiByb3cpIHNpZCA9IHJvdy5TdHlsZUlEO1xuXHRpZihzaWQgPT09IHVuZGVmaW5lZCAmJiBjc3R5KSBzaWQgPSBjc3R5LlN0eWxlSUQ7XG5cdHdoaWxlKHN0eWxlc1tzaWRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZihzdHlsZXNbc2lkXS5uZikgbmYgPSBzdHlsZXNbc2lkXS5uZjtcblx0XHRpZihzdHlsZXNbc2lkXS5JbnRlcmlvcikgaW50ZXJpb3JzLnB1c2goc3R5bGVzW3NpZF0uSW50ZXJpb3IpO1xuXHRcdGlmKCFzdHlsZXNbc2lkXS5QYXJlbnQpIGJyZWFrO1xuXHRcdHNpZCA9IHN0eWxlc1tzaWRdLlBhcmVudDtcblx0fVxuXHRzd2l0Y2goZGF0YS5UeXBlKSB7XG5cdFx0Y2FzZSAnQm9vbGVhbic6XG5cdFx0XHRjZWxsLnQgPSAnYic7XG5cdFx0XHRjZWxsLnYgPSBwYXJzZXhtbGJvb2woeG1sKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ1N0cmluZyc6XG5cdFx0XHRjZWxsLnQgPSAncyc7IGNlbGwuciA9IHhsbWxfZml4c3RyKHVuZXNjYXBleG1sKHhtbCkpO1xuXHRcdFx0Y2VsbC52ID0geG1sLmluZGV4T2YoXCI8XCIpID4gLTEgPyB1bmVzY2FwZXhtbChzcykgOiBjZWxsLnI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdEYXRlVGltZSc6XG5cdFx0XHRpZih4bWwuc2xpY2UoLTEpICE9IFwiWlwiKSB4bWwgKz0gXCJaXCI7XG5cdFx0XHRjZWxsLnYgPSAocGFyc2VEYXRlKHhtbCkgLSBuZXcgRGF0ZShEYXRlLlVUQygxODk5LCAxMSwgMzApKSkgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cdFx0XHRpZihjZWxsLnYgIT09IGNlbGwudikgY2VsbC52ID0gdW5lc2NhcGV4bWwoeG1sKTtcblx0XHRcdGVsc2UgaWYoY2VsbC52PDYwKSBjZWxsLnYgPSBjZWxsLnYgLTE7XG5cdFx0XHRpZighbmYgfHwgbmYgPT0gXCJHZW5lcmFsXCIpIG5mID0gXCJ5eXl5LW1tLWRkXCI7XG5cdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0Y2FzZSAnTnVtYmVyJzpcblx0XHRcdGlmKGNlbGwudiA9PT0gdW5kZWZpbmVkKSBjZWxsLnY9K3htbDtcblx0XHRcdGlmKCFjZWxsLnQpIGNlbGwudCA9ICduJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0Vycm9yJzogY2VsbC50ID0gJ2UnOyBjZWxsLnYgPSBSQkVyclt4bWxdOyBpZihvLmNlbGxUZXh0ICE9PSBmYWxzZSkgY2VsbC53ID0geG1sOyBicmVhaztcblx0XHRkZWZhdWx0OiBjZWxsLnQgPSAncyc7IGNlbGwudiA9IHhsbWxfZml4c3RyKHNzfHx4bWwpOyBicmVhaztcblx0fVxuXHRzYWZlX2Zvcm1hdF94bG1sKGNlbGwsIG5mLCBvKTtcblx0aWYoby5jZWxsRm9ybXVsYSAhPT0gZmFsc2UpIHtcblx0XHRpZihjZWxsLkZvcm11bGEpIHtcblx0XHRcdHZhciBmc3RyID0gdW5lc2NhcGV4bWwoY2VsbC5Gb3JtdWxhKTtcblx0XHRcdC8qIHN0cmljdGx5IHNwZWFraW5nLCB0aGUgbGVhZGluZyA9IGlzIHJlcXVpcmVkIGJ1dCBzb21lIHdyaXRlcnMgb21pdCAqL1xuXHRcdFx0aWYoZnN0ci5jaGFyQ29kZUF0KDApID09IDYxIC8qID0gKi8pIGZzdHIgPSBmc3RyLnNsaWNlKDEpO1xuXHRcdFx0Y2VsbC5mID0gcmNfdG9fYTEoZnN0ciwgYmFzZSk7XG5cdFx0XHRkZWxldGUgY2VsbC5Gb3JtdWxhO1xuXHRcdFx0aWYoY2VsbC5BcnJheVJhbmdlID09IFwiUkNcIikgY2VsbC5GID0gcmNfdG9fYTEoXCJSQzpSQ1wiLCBiYXNlKTtcblx0XHRcdGVsc2UgaWYoY2VsbC5BcnJheVJhbmdlKSB7XG5cdFx0XHRcdGNlbGwuRiA9IHJjX3RvX2ExKGNlbGwuQXJyYXlSYW5nZSwgYmFzZSk7XG5cdFx0XHRcdGFycmF5Zi5wdXNoKFtzYWZlX2RlY29kZV9yYW5nZShjZWxsLkYpLCBjZWxsLkZdKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yKGkgPSAwOyBpIDwgYXJyYXlmLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZihiYXNlLnIgPj0gYXJyYXlmW2ldWzBdLnMuciAmJiBiYXNlLnIgPD0gYXJyYXlmW2ldWzBdLmUucilcblx0XHRcdFx0XHRpZihiYXNlLmMgPj0gYXJyYXlmW2ldWzBdLnMuYyAmJiBiYXNlLmMgPD0gYXJyYXlmW2ldWzBdLmUuYylcblx0XHRcdFx0XHRcdGNlbGwuRiA9IGFycmF5ZltpXVsxXTtcblx0XHR9XG5cdH1cblx0aWYoby5jZWxsU3R5bGVzKSB7XG5cdFx0aW50ZXJpb3JzLmZvckVhY2goZnVuY3Rpb24oeCkge1xuXHRcdFx0aWYoIVMucGF0dGVyblR5cGUgJiYgeC5wYXR0ZXJuVHlwZSkgUy5wYXR0ZXJuVHlwZSA9IHgucGF0dGVyblR5cGU7XG5cdFx0fSk7XG5cdFx0Y2VsbC5zID0gUztcblx0fVxuXHRpZihjZWxsLlN0eWxlSUQgIT09IHVuZGVmaW5lZCkgY2VsbC5peGZlID0gY2VsbC5TdHlsZUlEO1xufVxuXG5mdW5jdGlvbiB4bG1sX2NsZWFuX2NvbW1lbnQoY29tbWVudCkge1xuXHRjb21tZW50LnQgPSBjb21tZW50LnYgfHwgXCJcIjtcblx0Y29tbWVudC50ID0gY29tbWVudC50LnJlcGxhY2UoL1xcclxcbi9nLFwiXFxuXCIpLnJlcGxhY2UoL1xcci9nLFwiXFxuXCIpO1xuXHRjb21tZW50LnYgPSBjb21tZW50LncgPSBjb21tZW50Lml4ZmUgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHhsbWxfbm9ybWFsaXplKGQpIHtcblx0aWYoaGFzX2J1ZiAmJiBCdWZmZXIuaXNCdWZmZXIoZCkpIHJldHVybiBkLnRvU3RyaW5nKCd1dGY4Jyk7XG5cdGlmKHR5cGVvZiBkID09PSAnc3RyaW5nJykgcmV0dXJuIGQ7XG5cdHRocm93IG5ldyBFcnJvcihcIkJhZCBpbnB1dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmdcIik7XG59XG5cbi8qIFRPRE86IEV2ZXJ5dGhpbmcgKi9cbi8qIFVPUyB1c2VzIENKSyBpbiB0YWdzICovXG52YXIgeGxtbHJlZ2V4ID0gLzwoXFwvPykoW15cXHM/PiFcXC86XSo6fCkoW15cXHM/Pl0qW15cXHM/PlxcL10pW14+XSo+L21nO1xuLy92YXIgeGxtbHJlZ2V4ID0gLzwoXFwvPykoW2EtejAtOV0qOnwpKFxcdyspW14+XSo+L21nO1xuZnVuY3Rpb24gcGFyc2VfeGxtbF94bWwoZCwgX29wdHMpIHtcblx0dmFyIG9wdHMgPSBfb3B0cyB8fCB7fTtcblx0bWFrZV9zc2YoU1NGKTtcblx0dmFyIHN0ciA9IGRlYm9tKHhsbWxfbm9ybWFsaXplKGQpKTtcblx0aWYob3B0cy50eXBlID09ICdiaW5hcnknIHx8IG9wdHMudHlwZSA9PSAnYXJyYXknIHx8IG9wdHMudHlwZSA9PSAnYmFzZTY0Jykge1xuXHRcdGlmKHR5cGVvZiBjcHRhYmxlICE9PSAndW5kZWZpbmVkJykgc3RyID0gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsIGNoYXJfY29kZXMoc3RyKSk7XG5cdFx0ZWxzZSBzdHIgPSB1dGY4cmVhZChzdHIpO1xuXHR9XG5cdHZhciBvcGVuaW5nID0gc3RyLnNsaWNlKDAsIDEwMjQpLnRvTG93ZXJDYXNlKCksIGlzaHRtbCA9IGZhbHNlO1xuXHRpZihvcGVuaW5nLmluZGV4T2YoXCI8P3htbFwiKSA9PSAtMSkgW1wiaHRtbFwiLCBcInRhYmxlXCIsIFwiaGVhZFwiLCBcIm1ldGFcIiwgXCJzY3JpcHRcIiwgXCJzdHlsZVwiLCBcImRpdlwiXS5mb3JFYWNoKGZ1bmN0aW9uKHRhZykgeyBpZihvcGVuaW5nLmluZGV4T2YoXCI8XCIgKyB0YWcpID49IDApIGlzaHRtbCA9IHRydWU7IH0pO1xuXHRpZihpc2h0bWwpIHJldHVybiBIVE1MXy50b193b3JrYm9vayhzdHIsIG9wdHMpO1xuXHR2YXIgUm47XG5cdHZhciBzdGF0ZSA9IFtdLCB0bXA7XG5cdGlmKERFTlNFICE9IG51bGwgJiYgb3B0cy5kZW5zZSA9PSBudWxsKSBvcHRzLmRlbnNlID0gREVOU0U7XG5cdHZhciBzaGVldHMgPSB7fSwgc2hlZXRuYW1lcyA9IFtdLCBjdXJzaGVldCA9IChvcHRzLmRlbnNlID8gW10gOiB7fSksIHNoZWV0bmFtZSA9IFwiXCI7XG5cdHZhciB0YWJsZSA9IHt9LCBjZWxsID0gKHt9KSwgcm93ID0ge307Ly8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXHR2YXIgZHRhZyA9IHhsbWxfcGFyc2V4bWx0YWcoJzxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj4nKSwgZGlkeCA9IDA7XG5cdHZhciBjID0gMCwgciA9IDA7XG5cdHZhciByZWZndWVzcyA9IHtzOiB7cjoyMDAwMDAwLCBjOjIwMDAwMDB9LCBlOiB7cjowLCBjOjB9IH07XG5cdHZhciBzdHlsZXMgPSB7fSwgc3RhZyA9IHt9O1xuXHR2YXIgc3MgPSBcIlwiLCBmaWR4ID0gMDtcblx0dmFyIG1lcmdlcyA9IFtdO1xuXHR2YXIgUHJvcHMgPSB7fSwgQ3VzdHByb3BzID0ge30sIHBpZHggPSAwLCBjcCA9IFtdO1xuXHR2YXIgY29tbWVudHMgPSBbXSwgY29tbWVudCA9ICh7fSk7XG5cdHZhciBjc3R5cyA9IFtdLCBjc3R5LCBzZWVuY29sID0gZmFsc2U7XG5cdHZhciBhcnJheWYgPSBbXTtcblx0dmFyIHJvd2luZm8gPSBbXSwgcm93b2JqID0ge30sIGNjID0gMCwgcnIgPSAwO1xuXHR2YXIgV29ya2Jvb2sgPSAoeyBTaGVldHM6W10sIFdCUHJvcHM6e2RhdGUxOTA0OmZhbHNlfSB9KSwgd3Nwcm9wcyA9IHt9O1xuXHR4bG1scmVnZXgubGFzdEluZGV4ID0gMDtcblx0c3RyID0gc3RyLnJlcGxhY2UoLzwhLS0oW1xcc1xcU10qPyktLT4vbWcsXCJcIik7XG5cdHdoaWxlKChSbiA9IHhsbWxyZWdleC5leGVjKHN0cikpKSBzd2l0Y2goUm5bM10pIHtcblx0XHRjYXNlICdEYXRhJzpcblx0XHRcdGlmKHN0YXRlW3N0YXRlLmxlbmd0aC0xXVsxXSkgYnJlYWs7XG5cdFx0XHRpZihSblsxXT09PScvJykgcGFyc2VfeGxtbF9kYXRhKHN0ci5zbGljZShkaWR4LCBSbi5pbmRleCksIHNzLCBkdGFnLCBzdGF0ZVtzdGF0ZS5sZW5ndGgtMV1bMF09PVwiQ29tbWVudFwiP2NvbW1lbnQ6Y2VsbCwge2M6YyxyOnJ9LCBzdHlsZXMsIGNzdHlzW2NdLCByb3csIGFycmF5Ziwgb3B0cyk7XG5cdFx0XHRlbHNlIHsgc3MgPSBcIlwiOyBkdGFnID0geGxtbF9wYXJzZXhtbHRhZyhSblswXSk7IGRpZHggPSBSbi5pbmRleCArIFJuWzBdLmxlbmd0aDsgfVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnQ2VsbCc6XG5cdFx0XHRpZihSblsxXT09PScvJyl7XG5cdFx0XHRcdGlmKGNvbW1lbnRzLmxlbmd0aCA+IDApIGNlbGwuYyA9IGNvbW1lbnRzO1xuXHRcdFx0XHRpZigoIW9wdHMuc2hlZXRSb3dzIHx8IG9wdHMuc2hlZXRSb3dzID4gcikgJiYgY2VsbC52ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZihvcHRzLmRlbnNlKSB7XG5cdFx0XHRcdFx0XHRpZighY3Vyc2hlZXRbcl0pIGN1cnNoZWV0W3JdID0gW107XG5cdFx0XHRcdFx0XHRjdXJzaGVldFtyXVtjXSA9IGNlbGw7XG5cdFx0XHRcdFx0fSBlbHNlIGN1cnNoZWV0W2VuY29kZV9jb2woYykgKyBlbmNvZGVfcm93KHIpXSA9IGNlbGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoY2VsbC5IUmVmKSB7XG5cdFx0XHRcdFx0Y2VsbC5sID0gKHtUYXJnZXQ6Y2VsbC5IUmVmfSk7XG5cdFx0XHRcdFx0aWYoY2VsbC5IUmVmU2NyZWVuVGlwKSBjZWxsLmwuVG9vbHRpcCA9IGNlbGwuSFJlZlNjcmVlblRpcDtcblx0XHRcdFx0XHRkZWxldGUgY2VsbC5IUmVmOyBkZWxldGUgY2VsbC5IUmVmU2NyZWVuVGlwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGNlbGwuTWVyZ2VBY3Jvc3MgfHwgY2VsbC5NZXJnZURvd24pIHtcblx0XHRcdFx0XHRjYyA9IGMgKyAocGFyc2VJbnQoY2VsbC5NZXJnZUFjcm9zcywxMCl8MCk7XG5cdFx0XHRcdFx0cnIgPSByICsgKHBhcnNlSW50KGNlbGwuTWVyZ2VEb3duLDEwKXwwKTtcblx0XHRcdFx0XHRtZXJnZXMucHVzaCh7czp7YzpjLHI6cn0sZTp7YzpjYyxyOnJyfX0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFvcHRzLnNoZWV0U3R1YnMpIHsgaWYoY2VsbC5NZXJnZUFjcm9zcykgYyA9IGNjICsgMTsgZWxzZSArK2M7IH1cblx0XHRcdFx0ZWxzZSBpZihjZWxsLk1lcmdlQWNyb3NzIHx8IGNlbGwuTWVyZ2VEb3duKSB7XG5mb3IodmFyIGNtYSA9IGM7IGNtYSA8PSBjYzsgKytjbWEpIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgY21kID0gcjsgY21kIDw9IHJyOyArK2NtZCkge1xuXHRcdFx0XHRcdFx0XHRpZihjbWEgPiBjIHx8IGNtZCA+IHIpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHRzLmRlbnNlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighY3Vyc2hlZXRbY21kXSkgY3Vyc2hlZXRbY21kXSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3Vyc2hlZXRbY21kXVtjbWFdID0ge3Q6J3onfTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgY3Vyc2hlZXRbZW5jb2RlX2NvbChjbWEpICsgZW5jb2RlX3JvdyhjbWQpXSA9IHt0Oid6J307XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YyA9IGNjICsgMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlICsrYztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNlbGwgPSB4bG1sX3BhcnNleG1sdGFnb2JqKFJuWzBdKTtcblx0XHRcdFx0aWYoY2VsbC5JbmRleCkgYyA9ICtjZWxsLkluZGV4IC0gMTtcblx0XHRcdFx0aWYoYyA8IHJlZmd1ZXNzLnMuYykgcmVmZ3Vlc3Mucy5jID0gYztcblx0XHRcdFx0aWYoYyA+IHJlZmd1ZXNzLmUuYykgcmVmZ3Vlc3MuZS5jID0gYztcblx0XHRcdFx0aWYoUm5bMF0uc2xpY2UoLTIpID09PSBcIi8+XCIpICsrYztcblx0XHRcdFx0Y29tbWVudHMgPSBbXTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ1Jvdyc6XG5cdFx0XHRpZihSblsxXT09PScvJyB8fCBSblswXS5zbGljZSgtMikgPT09IFwiLz5cIikge1xuXHRcdFx0XHRpZihyIDwgcmVmZ3Vlc3Mucy5yKSByZWZndWVzcy5zLnIgPSByO1xuXHRcdFx0XHRpZihyID4gcmVmZ3Vlc3MuZS5yKSByZWZndWVzcy5lLnIgPSByO1xuXHRcdFx0XHRpZihSblswXS5zbGljZSgtMikgPT09IFwiLz5cIikge1xuXHRcdFx0XHRcdHJvdyA9IHhsbWxfcGFyc2V4bWx0YWcoUm5bMF0pO1xuXHRcdFx0XHRcdGlmKHJvdy5JbmRleCkgciA9ICtyb3cuSW5kZXggLSAxO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGMgPSAwOyArK3I7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyb3cgPSB4bG1sX3BhcnNleG1sdGFnKFJuWzBdKTtcblx0XHRcdFx0aWYocm93LkluZGV4KSByID0gK3Jvdy5JbmRleCAtIDE7XG5cdFx0XHRcdHJvd29iaiA9IHt9O1xuXHRcdFx0XHRpZihyb3cuQXV0b0ZpdEhlaWdodCA9PSBcIjBcIiB8fCByb3cuSGVpZ2h0KSB7XG5cdFx0XHRcdFx0cm93b2JqLmhweCA9IHBhcnNlSW50KHJvdy5IZWlnaHQsIDEwKTsgcm93b2JqLmhwdCA9IHB4MnB0KHJvd29iai5ocHgpO1xuXHRcdFx0XHRcdHJvd2luZm9bcl0gPSByb3dvYmo7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYocm93LkhpZGRlbiA9PSBcIjFcIikgeyByb3dvYmouaGlkZGVuID0gdHJ1ZTsgcm93aW5mb1tyXSA9IHJvd29iajsgfVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnV29ya3NoZWV0JzogLyogVE9ETzogcmVhZCByYW5nZSBmcm9tIEZ1bGxSb3dzL0Z1bGxDb2x1bW5zICovXG5cdFx0XHRpZihSblsxXT09PScvJyl7XG5cdFx0XHRcdGlmKCh0bXA9c3RhdGUucG9wKCkpWzBdIT09Um5bM10pIHRocm93IG5ldyBFcnJvcihcIkJhZCBzdGF0ZTogXCIrdG1wLmpvaW4oXCJ8XCIpKTtcblx0XHRcdFx0c2hlZXRuYW1lcy5wdXNoKHNoZWV0bmFtZSk7XG5cdFx0XHRcdGlmKHJlZmd1ZXNzLnMuciA8PSByZWZndWVzcy5lLnIgJiYgcmVmZ3Vlc3Mucy5jIDw9IHJlZmd1ZXNzLmUuYykgY3Vyc2hlZXRbXCIhcmVmXCJdID0gZW5jb2RlX3JhbmdlKHJlZmd1ZXNzKTtcblx0XHRcdFx0aWYobWVyZ2VzLmxlbmd0aCkgY3Vyc2hlZXRbXCIhbWVyZ2VzXCJdID0gbWVyZ2VzO1xuXHRcdFx0XHRpZihjc3R5cy5sZW5ndGggPiAwKSBjdXJzaGVldFtcIiFjb2xzXCJdID0gY3N0eXM7XG5cdFx0XHRcdGlmKHJvd2luZm8ubGVuZ3RoID4gMCkgY3Vyc2hlZXRbXCIhcm93c1wiXSA9IHJvd2luZm87XG5cdFx0XHRcdHNoZWV0c1tzaGVldG5hbWVdID0gY3Vyc2hlZXQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZWZndWVzcyA9IHtzOiB7cjoyMDAwMDAwLCBjOjIwMDAwMDB9LCBlOiB7cjowLCBjOjB9IH07XG5cdFx0XHRcdHIgPSBjID0gMDtcblx0XHRcdFx0c3RhdGUucHVzaChbUm5bM10sIGZhbHNlXSk7XG5cdFx0XHRcdHRtcCA9IHhsbWxfcGFyc2V4bWx0YWcoUm5bMF0pO1xuXHRcdFx0XHRzaGVldG5hbWUgPSB1bmVzY2FwZXhtbCh0bXAuTmFtZSk7XG5cdFx0XHRcdGN1cnNoZWV0ID0gKG9wdHMuZGVuc2UgPyBbXSA6IHt9KTtcblx0XHRcdFx0bWVyZ2VzID0gW107XG5cdFx0XHRcdGFycmF5ZiA9IFtdO1xuXHRcdFx0XHRyb3dpbmZvID0gW107XG5cdFx0XHRcdHdzcHJvcHMgPSB7bmFtZTpzaGVldG5hbWUsIEhpZGRlbjowfTtcblx0XHRcdFx0V29ya2Jvb2suU2hlZXRzLnB1c2god3Nwcm9wcyk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdUYWJsZSc6XG5cdFx0XHRpZihSblsxXT09PScvJyl7aWYoKHRtcD1zdGF0ZS5wb3AoKSlbMF0hPT1SblszXSkgdGhyb3cgbmV3IEVycm9yKFwiQmFkIHN0YXRlOiBcIit0bXAuam9pbihcInxcIikpO31cblx0XHRcdGVsc2UgaWYoUm5bMF0uc2xpY2UoLTIpID09IFwiLz5cIikgYnJlYWs7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dGFibGUgPSB4bG1sX3BhcnNleG1sdGFnKFJuWzBdKTtcblx0XHRcdFx0c3RhdGUucHVzaChbUm5bM10sIGZhbHNlXSk7XG5cdFx0XHRcdGNzdHlzID0gW107IHNlZW5jb2wgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnU3R5bGUnOlxuXHRcdFx0aWYoUm5bMV09PT0nLycpIHByb2Nlc3Nfc3R5bGVfeGxtbChzdHlsZXMsIHN0YWcsIG9wdHMpO1xuXHRcdFx0ZWxzZSBzdGFnID0geGxtbF9wYXJzZXhtbHRhZyhSblswXSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ051bWJlckZvcm1hdCc6XG5cdFx0XHRzdGFnLm5mID0gdW5lc2NhcGV4bWwoeGxtbF9wYXJzZXhtbHRhZyhSblswXSkuRm9ybWF0IHx8IFwiR2VuZXJhbFwiKTtcblx0XHRcdGlmKFhMTUxGb3JtYXRNYXBbc3RhZy5uZl0pIHN0YWcubmYgPSBYTE1MRm9ybWF0TWFwW3N0YWcubmZdO1xuXHRcdFx0Zm9yKHZhciBzc2ZpZHggPSAwOyBzc2ZpZHggIT0gMHgxODg7ICsrc3NmaWR4KSBpZihTU0YuX3RhYmxlW3NzZmlkeF0gPT0gc3RhZy5uZikgYnJlYWs7XG5cdFx0XHRpZihzc2ZpZHggPT0gMHgxODgpIGZvcihzc2ZpZHggPSAweDM5OyBzc2ZpZHggIT0gMHgxODg7ICsrc3NmaWR4KSBpZihTU0YuX3RhYmxlW3NzZmlkeF0gPT0gbnVsbCkgeyBTU0YubG9hZChzdGFnLm5mLCBzc2ZpZHgpOyBicmVhazsgfVxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdDb2x1bW4nOlxuXHRcdFx0aWYoc3RhdGVbc3RhdGUubGVuZ3RoLTFdWzBdICE9PSAnVGFibGUnKSBicmVhaztcblx0XHRcdGNzdHkgPSB4bG1sX3BhcnNleG1sdGFnKFJuWzBdKTtcblx0XHRcdGlmKGNzdHkuSGlkZGVuKSB7IGNzdHkuaGlkZGVuID0gdHJ1ZTsgZGVsZXRlIGNzdHkuSGlkZGVuOyB9XG5cdFx0XHRpZihjc3R5LldpZHRoKSBjc3R5LndweCA9IHBhcnNlSW50KGNzdHkuV2lkdGgsIDEwKTtcblx0XHRcdGlmKCFzZWVuY29sICYmIGNzdHkud3B4ID4gMTApIHtcblx0XHRcdFx0c2VlbmNvbCA9IHRydWU7IE1EVyA9IERFRl9NRFc7IC8vZmluZF9tZHdfd3B4KGNzdHkud3B4KTtcblx0XHRcdFx0Zm9yKHZhciBfY29sID0gMDsgX2NvbCA8IGNzdHlzLmxlbmd0aDsgKytfY29sKSBpZihjc3R5c1tfY29sXSkgcHJvY2Vzc19jb2woY3N0eXNbX2NvbF0pO1xuXHRcdFx0fVxuXHRcdFx0aWYoc2VlbmNvbCkgcHJvY2Vzc19jb2woY3N0eSk7XG5cdFx0XHRjc3R5c1soY3N0eS5JbmRleC0xfHxjc3R5cy5sZW5ndGgpXSA9IGNzdHk7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgK2NzdHkuU3BhbjsgKytpKSBjc3R5c1tjc3R5cy5sZW5ndGhdID0gZHVwKGNzdHkpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdOYW1lZFJhbmdlJzpcblx0XHRcdGlmKCFXb3JrYm9vay5OYW1lcykgV29ya2Jvb2suTmFtZXMgPSBbXTtcblx0XHRcdHZhciBfTmFtZWRSYW5nZSA9IHBhcnNleG1sdGFnKFJuWzBdKTtcblx0XHRcdHZhciBfRGVmaW5lZE5hbWUgPSAoe1xuXHRcdFx0XHROYW1lOiBfTmFtZWRSYW5nZS5OYW1lLFxuXHRcdFx0XHRSZWY6IHJjX3RvX2ExKF9OYW1lZFJhbmdlLlJlZmVyc1RvLnNsaWNlKDEpLCB7cjowLCBjOjB9KVxuXHRcdFx0fSk7XG5cdFx0XHRpZihXb3JrYm9vay5TaGVldHMubGVuZ3RoPjApIF9EZWZpbmVkTmFtZS5TaGVldD1Xb3JrYm9vay5TaGVldHMubGVuZ3RoLTE7XG5Xb3JrYm9vay5OYW1lcy5wdXNoKF9EZWZpbmVkTmFtZSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ05hbWVkQ2VsbCc6IGJyZWFrO1xuXHRcdGNhc2UgJ0InOiBicmVhaztcblx0XHRjYXNlICdJJzogYnJlYWs7XG5cdFx0Y2FzZSAnVSc6IGJyZWFrO1xuXHRcdGNhc2UgJ1MnOiBicmVhaztcblx0XHRjYXNlICdTdWInOiBicmVhaztcblx0XHRjYXNlICdTdXAnOiBicmVhaztcblx0XHRjYXNlICdTcGFuJzogYnJlYWs7XG5cdFx0Y2FzZSAnQm9yZGVyJzogYnJlYWs7XG5cdFx0Y2FzZSAnQWxpZ25tZW50JzogYnJlYWs7XG5cdFx0Y2FzZSAnQm9yZGVycyc6IGJyZWFrO1xuXHRcdGNhc2UgJ0ZvbnQnOlxuXHRcdFx0aWYoUm5bMF0uc2xpY2UoLTIpID09PSBcIi8+XCIpIGJyZWFrO1xuXHRcdFx0ZWxzZSBpZihSblsxXT09PVwiL1wiKSBzcyArPSBzdHIuc2xpY2UoZmlkeCwgUm4uaW5kZXgpO1xuXHRcdFx0ZWxzZSBmaWR4ID0gUm4uaW5kZXggKyBSblswXS5sZW5ndGg7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdJbnRlcmlvcic6XG5cdFx0XHRpZighb3B0cy5jZWxsU3R5bGVzKSBicmVhaztcblx0XHRcdHN0YWcuSW50ZXJpb3IgPSB4bG1sX3BhcnNleG1sdGFnKFJuWzBdKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ1Byb3RlY3Rpb24nOiBicmVhaztcblxuXHRcdGNhc2UgJ0F1dGhvcic6XG5cdFx0Y2FzZSAnVGl0bGUnOlxuXHRcdGNhc2UgJ0Rlc2NyaXB0aW9uJzpcblx0XHRjYXNlICdDcmVhdGVkJzpcblx0XHRjYXNlICdLZXl3b3Jkcyc6XG5cdFx0Y2FzZSAnU3ViamVjdCc6XG5cdFx0Y2FzZSAnQ2F0ZWdvcnknOlxuXHRcdGNhc2UgJ0NvbXBhbnknOlxuXHRcdGNhc2UgJ0xhc3RBdXRob3InOlxuXHRcdGNhc2UgJ0xhc3RTYXZlZCc6XG5cdFx0Y2FzZSAnTGFzdFByaW50ZWQnOlxuXHRcdGNhc2UgJ1ZlcnNpb24nOlxuXHRcdGNhc2UgJ1JldmlzaW9uJzpcblx0XHRjYXNlICdUb3RhbFRpbWUnOlxuXHRcdGNhc2UgJ0h5cGVybGlua0Jhc2UnOlxuXHRcdGNhc2UgJ01hbmFnZXInOlxuXHRcdGNhc2UgJ0NvbnRlbnRTdGF0dXMnOlxuXHRcdGNhc2UgJ0lkZW50aWZpZXInOlxuXHRcdGNhc2UgJ0xhbmd1YWdlJzpcblx0XHRjYXNlICdBcHBOYW1lJzpcblx0XHRcdGlmKFJuWzBdLnNsaWNlKC0yKSA9PT0gXCIvPlwiKSBicmVhaztcblx0XHRcdGVsc2UgaWYoUm5bMV09PT1cIi9cIikgeGxtbF9zZXRfcHJvcChQcm9wcywgUm5bM10sIHN0ci5zbGljZShwaWR4LCBSbi5pbmRleCkpO1xuXHRcdFx0ZWxzZSBwaWR4ID0gUm4uaW5kZXggKyBSblswXS5sZW5ndGg7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdQYXJhZ3JhcGhzJzogYnJlYWs7XG5cblx0XHRjYXNlICdTdHlsZXMnOlxuXHRcdGNhc2UgJ1dvcmtib29rJzpcblx0XHRcdGlmKFJuWzFdPT09Jy8nKXtpZigodG1wPXN0YXRlLnBvcCgpKVswXSE9PVJuWzNdKSB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgc3RhdGU6IFwiK3RtcC5qb2luKFwifFwiKSk7fVxuXHRcdFx0ZWxzZSBzdGF0ZS5wdXNoKFtSblszXSwgZmFsc2VdKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnQ29tbWVudCc6XG5cdFx0XHRpZihSblsxXT09PScvJyl7XG5cdFx0XHRcdGlmKCh0bXA9c3RhdGUucG9wKCkpWzBdIT09Um5bM10pIHRocm93IG5ldyBFcnJvcihcIkJhZCBzdGF0ZTogXCIrdG1wLmpvaW4oXCJ8XCIpKTtcblx0XHRcdFx0eGxtbF9jbGVhbl9jb21tZW50KGNvbW1lbnQpO1xuXHRcdFx0XHRjb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUucHVzaChbUm5bM10sIGZhbHNlXSk7XG5cdFx0XHRcdHRtcCA9IHhsbWxfcGFyc2V4bWx0YWcoUm5bMF0pO1xuXHRcdFx0XHRjb21tZW50ID0gKHthOnRtcC5BdXRob3J9KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnQXV0b0ZpbHRlcic6XG5cdFx0XHRpZihSblsxXT09PScvJyl7aWYoKHRtcD1zdGF0ZS5wb3AoKSlbMF0hPT1SblszXSkgdGhyb3cgbmV3IEVycm9yKFwiQmFkIHN0YXRlOiBcIit0bXAuam9pbihcInxcIikpO31cblx0XHRcdGVsc2UgaWYoUm5bMF0uY2hhckF0KFJuWzBdLmxlbmd0aC0yKSAhPT0gJy8nKSB7XG5cdFx0XHRcdHZhciBBdXRvRmlsdGVyID0geGxtbF9wYXJzZXhtbHRhZyhSblswXSk7XG5cdFx0XHRcdGN1cnNoZWV0WychYXV0b2ZpbHRlciddID0geyByZWY6cmNfdG9fYTEoQXV0b0ZpbHRlci5SYW5nZSkucmVwbGFjZSgvXFwkL2csXCJcIikgfTtcblx0XHRcdFx0c3RhdGUucHVzaChbUm5bM10sIHRydWVdKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnTmFtZSc6IGJyZWFrO1xuXG5cdFx0Y2FzZSAnQ29tcG9uZW50T3B0aW9ucyc6XG5cdFx0Y2FzZSAnRG9jdW1lbnRQcm9wZXJ0aWVzJzpcblx0XHRjYXNlICdDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMnOlxuXHRcdGNhc2UgJ09mZmljZURvY3VtZW50U2V0dGluZ3MnOlxuXHRcdGNhc2UgJ1Bpdm90VGFibGUnOlxuXHRcdGNhc2UgJ1Bpdm90Q2FjaGUnOlxuXHRcdGNhc2UgJ05hbWVzJzpcblx0XHRjYXNlICdNYXBJbmZvJzpcblx0XHRjYXNlICdQYWdlQnJlYWtzJzpcblx0XHRjYXNlICdRdWVyeVRhYmxlJzpcblx0XHRjYXNlICdEYXRhVmFsaWRhdGlvbic6XG5cdFx0Y2FzZSAnU29ydGluZyc6XG5cdFx0Y2FzZSAnU2NoZW1hJzpcblx0XHRjYXNlICdkYXRhJzpcblx0XHRjYXNlICdDb25kaXRpb25hbEZvcm1hdHRpbmcnOlxuXHRcdGNhc2UgJ1NtYXJ0VGFnVHlwZSc6XG5cdFx0Y2FzZSAnU21hcnRUYWdzJzpcblx0XHRjYXNlICdFeGNlbFdvcmtib29rJzpcblx0XHRjYXNlICdXb3JrYm9va09wdGlvbnMnOlxuXHRcdGNhc2UgJ1dvcmtzaGVldE9wdGlvbnMnOlxuXHRcdFx0aWYoUm5bMV09PT0nLycpe2lmKCh0bXA9c3RhdGUucG9wKCkpWzBdIT09Um5bM10pIHRocm93IG5ldyBFcnJvcihcIkJhZCBzdGF0ZTogXCIrdG1wLmpvaW4oXCJ8XCIpKTt9XG5cdFx0XHRlbHNlIGlmKFJuWzBdLmNoYXJBdChSblswXS5sZW5ndGgtMikgIT09ICcvJykgc3RhdGUucHVzaChbUm5bM10sIHRydWVdKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8qIEZPRFMgZmlsZSByb290IGlzIDxvZmZpY2U6ZG9jdW1lbnQ+ICovXG5cdFx0XHRpZihzdGF0ZS5sZW5ndGggPT0gMCAmJiBSblszXSA9PSBcImRvY3VtZW50XCIpIHJldHVybiBwYXJzZV9mb2RzKHN0ciwgb3B0cyk7XG5cdFx0XHQvKiBVT1MgZmlsZSByb290IGlzIDx1b2Y6VU9GPiAqL1xuXHRcdFx0aWYoc3RhdGUubGVuZ3RoID09IDAgJiYgUm5bM10gPT0gXCJVT0ZcIikgcmV0dXJuIHBhcnNlX2ZvZHMoc3RyLCBvcHRzKTtcblxuXHRcdFx0dmFyIHNlZW4gPSB0cnVlO1xuXHRcdFx0c3dpdGNoKHN0YXRlW3N0YXRlLmxlbmd0aC0xXVswXSkge1xuXHRcdFx0XHQvKiBPZmZpY2VEb2N1bWVudFNldHRpbmdzICovXG5cdFx0XHRcdGNhc2UgJ09mZmljZURvY3VtZW50U2V0dGluZ3MnOiBzd2l0Y2goUm5bM10pIHtcblx0XHRcdFx0XHRjYXNlICdBbGxvd1BORyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1JlbW92ZVBlcnNvbmFsSW5mb3JtYXRpb24nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdEb3dubG9hZENvbXBvbmVudHMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdMb2NhdGlvbk9mQ29tcG9uZW50cyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NvbG9ycyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NvbG9yJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnSW5kZXgnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdSR0InOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdQaXhlbHNQZXJJbmNoJzogYnJlYWs7IC8vIFRPRE86IHNldCBQUElcblx0XHRcdFx0XHRjYXNlICdUYXJnZXRTY3JlZW5TaXplJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUmVhZE9ubHlSZWNvbW1lbmRlZCc6IGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6IHNlZW4gPSBmYWxzZTtcblx0XHRcdFx0fSBicmVhaztcblxuXHRcdFx0XHQvKiBDb21wb25lbnRPcHRpb25zICovXG5cdFx0XHRcdGNhc2UgJ0NvbXBvbmVudE9wdGlvbnMnOiBzd2l0Y2goUm5bM10pIHtcblx0XHRcdFx0XHRjYXNlICdUb29sYmFyJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnSGlkZU9mZmljZUxvZ28nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdTcHJlYWRzaGVldEF1dG9GaXQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdMYWJlbCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NhcHRpb24nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdNYXhIZWlnaHQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdNYXhXaWR0aCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ05leHRTaGVldE51bWJlcic6IGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6IHNlZW4gPSBmYWxzZTtcblx0XHRcdFx0fSBicmVhaztcblxuXHRcdFx0XHQvKiBFeGNlbFdvcmtib29rICovXG5cdFx0XHRcdGNhc2UgJ0V4Y2VsV29ya2Jvb2snOiBzd2l0Y2goUm5bM10pIHtcblx0XHRcdFx0XHRjYXNlICdEYXRlMTkwNCc6XG5Xb3JrYm9vay5XQlByb3BzLmRhdGUxOTA0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1dpbmRvd0hlaWdodCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1dpbmRvd1dpZHRoJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnV2luZG93VG9wWCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1dpbmRvd1RvcFknOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdUYWJSYXRpbyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1Byb3RlY3RTdHJ1Y3R1cmUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdQcm90ZWN0V2luZG93cyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0FjdGl2ZVNoZWV0JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRGlzcGxheUlua05vdGVzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRmlyc3RWaXNpYmxlU2hlZXQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdTdXBCb29rJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU2hlZXROYW1lJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU2hlZXRJbmRleCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1NoZWV0SW5kZXhGaXJzdCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1NoZWV0SW5kZXhMYXN0JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRGxsJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQWNjZXB0TGFiZWxzSW5Gb3JtdWxhcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0RvTm90U2F2ZUxpbmtWYWx1ZXMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdJdGVyYXRpb24nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdNYXhJdGVyYXRpb25zJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnTWF4Q2hhbmdlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUGF0aCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1hjdCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NvdW50JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU2VsZWN0ZWRTaGVldHMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdDYWxjdWxhdGlvbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1VuY2FsY2VkJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU3RhcnR1cFByb21wdCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0Nybic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0V4dGVybk5hbWUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdGb3JtdWxhJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQ29sRmlyc3QnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdDb2xMYXN0JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnV2FudEFkdmlzZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0Jvb2xlYW4nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdFcnJvcic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1RleHQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdPTEUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdOb0F1dG9SZWNvdmVyJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUHVibGlzaE9iamVjdHMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdEb05vdENhbGN1bGF0ZUJlZm9yZVNhdmUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdOdW1iZXInOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdSZWZNb2RlUjFDMSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0VtYmVkU2F2ZVNtYXJ0VGFncyc6IGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6IHNlZW4gPSBmYWxzZTtcblx0XHRcdFx0fSBicmVhaztcblxuXHRcdFx0XHQvKiBXb3JrYm9va09wdGlvbnMgKi9cblx0XHRcdFx0Y2FzZSAnV29ya2Jvb2tPcHRpb25zJzogc3dpdGNoKFJuWzNdKSB7XG5cdFx0XHRcdFx0Y2FzZSAnT1dDVmVyc2lvbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0hlaWdodCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1dpZHRoJzogYnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDogc2VlbiA9IGZhbHNlO1xuXHRcdFx0XHR9IGJyZWFrO1xuXG5cdFx0XHRcdC8qIFdvcmtzaGVldE9wdGlvbnMgKi9cblx0XHRcdFx0Y2FzZSAnV29ya3NoZWV0T3B0aW9ucyc6IHN3aXRjaChSblszXSkge1xuXHRcdFx0XHRcdGNhc2UgJ1Zpc2libGUnOlxuXHRcdFx0XHRcdFx0aWYoUm5bMF0uc2xpY2UoLTIpID09PSBcIi8+XCIpey8qIGVtcHR5ICovfVxuXHRcdFx0XHRcdFx0ZWxzZSBpZihSblsxXT09PVwiL1wiKSBzd2l0Y2goc3RyLnNsaWNlKHBpZHgsIFJuLmluZGV4KSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiU2hlZXRIaWRkZW5cIjogd3Nwcm9wcy5IaWRkZW4gPSAxOyBicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIlNoZWV0VmVyeUhpZGRlblwiOiB3c3Byb3BzLkhpZGRlbiA9IDI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSBwaWR4ID0gUm4uaW5kZXggKyBSblswXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdIZWFkZXInOlxuXHRcdFx0XHRcdFx0aWYoIWN1cnNoZWV0WychbWFyZ2lucyddKSBkZWZhdWx0X21hcmdpbnMoY3Vyc2hlZXRbJyFtYXJnaW5zJ109e30sICd4bG1sJyk7XG5cdFx0XHRcdFx0XHRjdXJzaGVldFsnIW1hcmdpbnMnXS5oZWFkZXIgPSBwYXJzZXhtbHRhZyhSblswXSkuTWFyZ2luO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRm9vdGVyJzpcblx0XHRcdFx0XHRcdGlmKCFjdXJzaGVldFsnIW1hcmdpbnMnXSkgZGVmYXVsdF9tYXJnaW5zKGN1cnNoZWV0WychbWFyZ2lucyddPXt9LCAneGxtbCcpO1xuXHRcdFx0XHRcdFx0Y3Vyc2hlZXRbJyFtYXJnaW5zJ10uZm9vdGVyID0gcGFyc2V4bWx0YWcoUm5bMF0pLk1hcmdpbjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1BhZ2VNYXJnaW5zJzpcblx0XHRcdFx0XHRcdHZhciBwYWdlbWFyZ2lucyA9IHBhcnNleG1sdGFnKFJuWzBdKTtcblx0XHRcdFx0XHRcdGlmKCFjdXJzaGVldFsnIW1hcmdpbnMnXSkgZGVmYXVsdF9tYXJnaW5zKGN1cnNoZWV0WychbWFyZ2lucyddPXt9LCd4bG1sJyk7XG5cdFx0XHRcdFx0XHRpZihwYWdlbWFyZ2lucy5Ub3ApIGN1cnNoZWV0WychbWFyZ2lucyddLnRvcCA9IHBhZ2VtYXJnaW5zLlRvcDtcblx0XHRcdFx0XHRcdGlmKHBhZ2VtYXJnaW5zLkxlZnQpIGN1cnNoZWV0WychbWFyZ2lucyddLmxlZnQgPSBwYWdlbWFyZ2lucy5MZWZ0O1xuXHRcdFx0XHRcdFx0aWYocGFnZW1hcmdpbnMuUmlnaHQpIGN1cnNoZWV0WychbWFyZ2lucyddLnJpZ2h0ID0gcGFnZW1hcmdpbnMuUmlnaHQ7XG5cdFx0XHRcdFx0XHRpZihwYWdlbWFyZ2lucy5Cb3R0b20pIGN1cnNoZWV0WychbWFyZ2lucyddLmJvdHRvbSA9IHBhZ2VtYXJnaW5zLkJvdHRvbTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0Rpc3BsYXlSaWdodFRvTGVmdCc6XG5cdFx0XHRcdFx0XHRpZighV29ya2Jvb2suVmlld3MpIFdvcmtib29rLlZpZXdzID0gW107XG5cdFx0XHRcdFx0XHRpZighV29ya2Jvb2suVmlld3NbMF0pIFdvcmtib29rLlZpZXdzWzBdID0ge307XG5cdFx0XHRcdFx0XHRXb3JrYm9vay5WaWV3c1swXS5SVEwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlICdVbnN5bmNlZCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1ByaW50JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUGFuZXMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdTY2FsZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1BhbmUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdOdW1iZXInOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdMYXlvdXQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdQYWdlU2V0dXAnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdTZWxlY3RlZCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1Byb3RlY3RPYmplY3RzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRW5hYmxlU2VsZWN0aW9uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUHJvdGVjdFNjZW5hcmlvcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1ZhbGlkUHJpbnRlckluZm8nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdIb3Jpem9udGFsUmVzb2x1dGlvbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1ZlcnRpY2FsUmVzb2x1dGlvbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ051bWJlcm9mQ29waWVzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQWN0aXZlUm93JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQWN0aXZlQ29sJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQWN0aXZlUGFuZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1RvcFJvd1Zpc2libGUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdUb3BSb3dCb3R0b21QYW5lJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnTGVmdENvbHVtblZpc2libGUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdMZWZ0Q29sdW1uUmlnaHRQYW5lJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRml0VG9QYWdlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUmFuZ2VTZWxlY3Rpb24nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdQYXBlclNpemVJbmRleCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1BhZ2VMYXlvdXRab29tJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUGFnZUJyZWFrWm9vbSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0ZpbHRlck9uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRG9Ob3REaXNwbGF5R3JpZGxpbmVzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU3BsaXRIb3Jpem9udGFsJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU3BsaXRWZXJ0aWNhbCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0ZyZWV6ZVBhbmVzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRnJvemVuTm9TcGxpdCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0ZpdFdpZHRoJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRml0SGVpZ2h0JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQ29tbWVudHNMYXlvdXQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdab29tJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnTGVmdFRvUmlnaHQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdHcmlkbGluZXMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdBbGxvd1NvcnQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdBbGxvd0ZpbHRlcic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0FsbG93SW5zZXJ0Um93cyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0FsbG93RGVsZXRlUm93cyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0FsbG93SW5zZXJ0Q29scyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0FsbG93RGVsZXRlQ29scyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0FsbG93SW5zZXJ0SHlwZXJsaW5rcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0FsbG93Rm9ybWF0Q2VsbHMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdBbGxvd1NpemVDb2xzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQWxsb3dTaXplUm93cyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ05vU3VtbWFyeVJvd3NCZWxvd0RldGFpbCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1RhYkNvbG9ySW5kZXgnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdEb05vdERpc3BsYXlIZWFkaW5ncyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1Nob3dQYWdlTGF5b3V0Wm9vbSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ05vU3VtbWFyeUNvbHVtbnNSaWdodERldGFpbCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0JsYWNrQW5kV2hpdGUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdEb05vdERpc3BsYXlaZXJvcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0Rpc3BsYXlQYWdlQnJlYWsnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdSb3dDb2xIZWFkaW5ncyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0RvTm90RGlzcGxheU91dGxpbmUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdOb09yaWVudGF0aW9uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQWxsb3dVc2VQaXZvdFRhYmxlcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1plcm9IZWlnaHQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdWaWV3YWJsZVJhbmdlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU2VsZWN0aW9uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUHJvdGVjdENvbnRlbnRzJzogYnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDogc2VlbiA9IGZhbHNlO1xuXHRcdFx0XHR9IGJyZWFrO1xuXG5cdFx0XHRcdC8qIFBpdm90VGFibGUgKi9cblx0XHRcdFx0Y2FzZSAnUGl2b3RUYWJsZSc6IGNhc2UgJ1Bpdm90Q2FjaGUnOiBzd2l0Y2goUm5bM10pIHtcblx0XHRcdFx0XHRjYXNlICdJbW1lZGlhdGVJdGVtc09uRHJvcCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1Nob3dQYWdlTXVsdGlwbGVJdGVtTGFiZWwnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdDb21wYWN0Um93SW5kZW50JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnTG9jYXRpb24nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdQaXZvdEZpZWxkJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnT3JpZW50YXRpb24nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdMYXlvdXRGb3JtJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnTGF5b3V0U3VidG90YWxMb2NhdGlvbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0xheW91dENvbXBhY3RSb3cnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdQb3NpdGlvbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1Bpdm90SXRlbSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0RhdGFUeXBlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRGF0YUZpZWxkJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU291cmNlTmFtZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1BhcmVudEZpZWxkJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUFRMaW5lSXRlbXMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdQVExpbmVJdGVtJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQ291bnRPZlNhbWVJdGVtcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0l0ZW0nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdJdGVtVHlwZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1BUU291cmNlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQ2FjaGVJbmRleCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NvbnNvbGlkYXRpb25SZWZlcmVuY2UnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdGaWxlTmFtZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1JlZmVyZW5jZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ05vQ29sdW1uR3JhbmQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdOb1Jvd0dyYW5kJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQmxhbmtMaW5lQWZ0ZXJJdGVtcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0hpZGRlbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1N1YnRvdGFsJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQmFzZUZpZWxkJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnTWFwQ2hpbGRJdGVtcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0Z1bmN0aW9uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUmVmcmVzaE9uRmlsZU9wZW4nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdQcmludFNldFRpdGxlcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ01lcmdlTGFiZWxzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRGVmYXVsdFZlcnNpb24nOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdSZWZyZXNoTmFtZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1JlZnJlc2hEYXRlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUmVmcmVzaERhdGVDb3B5JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVmVyc2lvbkxhc3RSZWZyZXNoJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVmVyc2lvbkxhc3RVcGRhdGUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdWZXJzaW9uVXBkYXRlYWJsZU1pbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1ZlcnNpb25SZWZyZXNoYWJsZU1pbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NhbGN1bGF0aW9uJzogYnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDogc2VlbiA9IGZhbHNlO1xuXHRcdFx0XHR9IGJyZWFrO1xuXG5cdFx0XHRcdC8qIFBhZ2VCcmVha3MgKi9cblx0XHRcdFx0Y2FzZSAnUGFnZUJyZWFrcyc6IHN3aXRjaChSblszXSkge1xuXHRcdFx0XHRcdGNhc2UgJ0NvbEJyZWFrcyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NvbEJyZWFrJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUm93QnJlYWtzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUm93QnJlYWsnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdDb2xTdGFydCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NvbEVuZCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1Jvd0VuZCc6IGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6IHNlZW4gPSBmYWxzZTtcblx0XHRcdFx0fSBicmVhaztcblxuXHRcdFx0XHQvKiBBdXRvRmlsdGVyICovXG5cdFx0XHRcdGNhc2UgJ0F1dG9GaWx0ZXInOiBzd2l0Y2goUm5bM10pIHtcblx0XHRcdFx0XHRjYXNlICdBdXRvRmlsdGVyQ29sdW1uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQXV0b0ZpbHRlckNvbmRpdGlvbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0F1dG9GaWx0ZXJBbmQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdBdXRvRmlsdGVyT3InOiBicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OiBzZWVuID0gZmFsc2U7XG5cdFx0XHRcdH0gYnJlYWs7XG5cblx0XHRcdFx0LyogUXVlcnlUYWJsZSAqL1xuXHRcdFx0XHRjYXNlICdRdWVyeVRhYmxlJzogc3dpdGNoKFJuWzNdKSB7XG5cdFx0XHRcdFx0Y2FzZSAnSWQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdBdXRvRm9ybWF0Rm9udCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0F1dG9Gb3JtYXRQYXR0ZXJuJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUXVlcnlTb3VyY2UnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdRdWVyeVR5cGUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdFbmFibGVSZWRpcmVjdGlvbnMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdSZWZyZXNoZWRJblhsOSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1VSTFN0cmluZyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0hUTUxUYWJsZXMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdDb25uZWN0aW9uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQ29tbWFuZFRleHQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdSZWZyZXNoSW5mbyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ05vVGl0bGVzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnTmV4dElkJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQ29sdW1uSW5mbyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ092ZXJ3cml0ZUNlbGxzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRG9Ob3RQcm9tcHRGb3JGaWxlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVGV4dFdpemFyZFNldHRpbmdzJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnU291cmNlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnTnVtYmVyJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRGVjaW1hbCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1Rob3VzYW5kU2VwYXJhdG9yJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVHJhaWxpbmdNaW51c051bWJlcnMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdGb3JtYXRTZXR0aW5ncyc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0ZpZWxkVHlwZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0RlbGltaXRlcnMnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdUYWInOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdDb21tYSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0F1dG9Gb3JtYXROYW1lJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVmVyc2lvbkxhc3RFZGl0JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVmVyc2lvbkxhc3RSZWZyZXNoJzogYnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDogc2VlbiA9IGZhbHNlO1xuXHRcdFx0XHR9IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ1NvcnRpbmcnOlxuXHRcdFx0XHRjYXNlICdDb25kaXRpb25hbEZvcm1hdHRpbmcnOlxuXHRcdFx0XHRjYXNlICdEYXRhVmFsaWRhdGlvbic6XG5cdFx0XHRcdHN3aXRjaChSblszXSkge1xuXHRcdFx0XHRcdGNhc2UgJ1JhbmdlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVHlwZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ01pbic6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ01heCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ1NvcnQnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdEZXNjZW5kaW5nJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnT3JkZXInOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdDYXNlU2Vuc2l0aXZlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVmFsdWUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdFcnJvclN0eWxlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRXJyb3JNZXNzYWdlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRXJyb3JUaXRsZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0NlbGxSYW5nZUxpc3QnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdJbnB1dE1lc3NhZ2UnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdJbnB1dFRpdGxlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQ29tYm9IaWRlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnSW5wdXRIaWRlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUXVhbGlmaWVyJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnVXNlQmxhbmsnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdWYWx1ZTEnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdWYWx1ZTInOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdGb3JtYXQnOiBicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OiBzZWVuID0gZmFsc2U7XG5cdFx0XHRcdH0gYnJlYWs7XG5cblx0XHRcdFx0LyogTWFwSW5mbyAoc2NoZW1hKSAqL1xuXHRcdFx0XHRjYXNlICdNYXBJbmZvJzogY2FzZSAnU2NoZW1hJzogY2FzZSAnZGF0YSc6IHN3aXRjaChSblszXSkge1xuXHRcdFx0XHRcdGNhc2UgJ01hcCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0VudHJ5JzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnUmFuZ2UnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdYUGF0aCc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0ZpZWxkJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnWFNEVHlwZSc6IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ0ZpbHRlck9uJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnQWdncmVnYXRlJzogYnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnRWxlbWVudFR5cGUnOiBicmVhaztcblx0XHRcdFx0XHRjYXNlICdBdHRyaWJ1dGVUeXBlJzogYnJlYWs7XG5cdFx0XHRcdC8qIFRoZXNlIGFyZSBmcm9tIHhzZCAoWE1MIFNjaGVtYSBEZWZpbml0aW9uKSAqL1xuXHRcdFx0XHRcdGNhc2UgJ3NjaGVtYSc6XG5cdFx0XHRcdFx0Y2FzZSAnZWxlbWVudCc6XG5cdFx0XHRcdFx0Y2FzZSAnY29tcGxleFR5cGUnOlxuXHRcdFx0XHRcdGNhc2UgJ2RhdGF0eXBlJzpcblx0XHRcdFx0XHRjYXNlICdhbGwnOlxuXHRcdFx0XHRcdGNhc2UgJ2F0dHJpYnV0ZSc6XG5cdFx0XHRcdFx0Y2FzZSAnZXh0ZW5kcyc6IGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSAncm93JzogYnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDogc2VlbiA9IGZhbHNlO1xuXHRcdFx0XHR9IGJyZWFrO1xuXG5cdFx0XHRcdC8qIFNtYXJ0VGFncyAoY2FuIGJlIGFueXRoaW5nKSAqL1xuXHRcdFx0XHRjYXNlICdTbWFydFRhZ3MnOiBicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OiBzZWVuID0gZmFsc2U7IGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYoc2VlbikgYnJlYWs7XG5cdFx0XHQvKiBDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMgKi9cblx0XHRcdGlmKCFzdGF0ZVtzdGF0ZS5sZW5ndGgtMV1bMV0pIHRocm93ICdVbnJlY29nbml6ZWQgdGFnOiAnICsgUm5bM10gKyBcInxcIiArIHN0YXRlLmpvaW4oXCJ8XCIpO1xuXHRcdFx0aWYoc3RhdGVbc3RhdGUubGVuZ3RoLTFdWzBdPT09J0N1c3RvbURvY3VtZW50UHJvcGVydGllcycpIHtcblx0XHRcdFx0aWYoUm5bMF0uc2xpY2UoLTIpID09PSBcIi8+XCIpIGJyZWFrO1xuXHRcdFx0XHRlbHNlIGlmKFJuWzFdPT09XCIvXCIpIHhsbWxfc2V0X2N1c3Rwcm9wKEN1c3Rwcm9wcywgUm5bM10sIGNwLCBzdHIuc2xpY2UocGlkeCwgUm4uaW5kZXgpKTtcblx0XHRcdFx0ZWxzZSB7IGNwID0gUm47IHBpZHggPSBSbi5pbmRleCArIFJuWzBdLmxlbmd0aDsgfVxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmKG9wdHMuV1RGKSB0aHJvdyAnVW5yZWNvZ25pemVkIHRhZzogJyArIFJuWzNdICsgXCJ8XCIgKyBzdGF0ZS5qb2luKFwifFwiKTtcblx0fVxuXHR2YXIgb3V0ID0gKHt9KTtcblx0aWYoIW9wdHMuYm9va1NoZWV0cyAmJiAhb3B0cy5ib29rUHJvcHMpIG91dC5TaGVldHMgPSBzaGVldHM7XG5cdG91dC5TaGVldE5hbWVzID0gc2hlZXRuYW1lcztcblx0b3V0Lldvcmtib29rID0gV29ya2Jvb2s7XG5cdG91dC5TU0YgPSBTU0YuZ2V0X3RhYmxlKCk7XG5cdG91dC5Qcm9wcyA9IFByb3BzO1xuXHRvdXQuQ3VzdHByb3BzID0gQ3VzdHByb3BzO1xuXHRyZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBwYXJzZV94bG1sKGRhdGEsIG9wdHMpIHtcblx0Zml4X3JlYWRfb3B0cyhvcHRzPW9wdHN8fHt9KTtcblx0c3dpdGNoKG9wdHMudHlwZXx8XCJiYXNlNjRcIikge1xuXHRcdGNhc2UgXCJiYXNlNjRcIjogcmV0dXJuIHBhcnNlX3hsbWxfeG1sKEJhc2U2NC5kZWNvZGUoZGF0YSksIG9wdHMpO1xuXHRcdGNhc2UgXCJiaW5hcnlcIjogY2FzZSBcImJ1ZmZlclwiOiBjYXNlIFwiZmlsZVwiOiByZXR1cm4gcGFyc2VfeGxtbF94bWwoZGF0YSwgb3B0cyk7XG5cdFx0Y2FzZSBcImFycmF5XCI6IHJldHVybiBwYXJzZV94bG1sX3htbChhMnMoZGF0YSksIG9wdHMpO1xuXHR9XG59XG5cbi8qIFRPRE8gKi9cbmZ1bmN0aW9uIHdyaXRlX3Byb3BzX3hsbWwod2IsIG9wdHMpIHtcblx0dmFyIG8gPSBbXTtcblx0LyogRG9jdW1lbnRQcm9wZXJ0aWVzICovXG5cdGlmKHdiLlByb3BzKSBvLnB1c2goeGxtbF93cml0ZV9kb2Nwcm9wcyh3Yi5Qcm9wcywgb3B0cykpO1xuXHQvKiBDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMgKi9cblx0aWYod2IuQ3VzdHByb3BzKSBvLnB1c2goeGxtbF93cml0ZV9jdXN0cHJvcHMod2IuUHJvcHMsIHdiLkN1c3Rwcm9wcywgb3B0cykpO1xuXHRyZXR1cm4gby5qb2luKFwiXCIpO1xufVxuLyogVE9ETyAqL1xuZnVuY3Rpb24gd3JpdGVfd2JfeGxtbCgpIHtcblx0LyogT2ZmaWNlRG9jdW1lbnRTZXR0aW5ncyAqL1xuXHQvKiBFeGNlbFdvcmtib29rICovXG5cdHJldHVybiBcIlwiO1xufVxuLyogVE9ETyAqL1xuZnVuY3Rpb24gd3JpdGVfc3R5X3hsbWwod2IsIG9wdHMpIHtcblx0LyogU3R5bGVzICovXG5cdHZhciBzdHlsZXMgPSBbJzxTdHlsZSBzczpJRD1cIkRlZmF1bHRcIiBzczpOYW1lPVwiTm9ybWFsXCI+PE51bWJlckZvcm1hdC8+PC9TdHlsZT4nXTtcblx0b3B0cy5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oeGYsIGlkKSB7XG5cdFx0dmFyIHBheWxvYWQgPSBbXTtcblx0XHRwYXlsb2FkLnB1c2god3JpdGV4dGFnKCdOdW1iZXJGb3JtYXQnLCBudWxsLCB7XCJzczpGb3JtYXRcIjogZXNjYXBleG1sKFNTRi5fdGFibGVbeGYubnVtRm10SWRdKX0pKTtcblx0XHRzdHlsZXMucHVzaCh3cml0ZXh0YWcoJ1N0eWxlJywgcGF5bG9hZC5qb2luKFwiXCIpLCB7XCJzczpJRFwiOiBcInNcIiArICgyMStpZCl9KSk7XG5cdH0pO1xuXHRyZXR1cm4gd3JpdGV4dGFnKFwiU3R5bGVzXCIsIHN0eWxlcy5qb2luKFwiXCIpKTtcbn1cbmZ1bmN0aW9uIHdyaXRlX25hbWVfeGxtbChuKSB7IHJldHVybiB3cml0ZXh0YWcoXCJOYW1lZFJhbmdlXCIsIG51bGwsIHtcInNzOk5hbWVcIjogbi5OYW1lLCBcInNzOlJlZmVyc1RvXCI6XCI9XCIgKyBhMV90b19yYyhuLlJlZiwge3I6MCxjOjB9KX0pOyB9XG5mdW5jdGlvbiB3cml0ZV9uYW1lc194bG1sKHdiKSB7XG5cdGlmKCEoKHdifHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcykgcmV0dXJuIFwiXCI7XG52YXIgbmFtZXMgPSB3Yi5Xb3JrYm9vay5OYW1lcztcblx0dmFyIG91dCA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcblx0XHR2YXIgbiA9IG5hbWVzW2ldO1xuXHRcdGlmKG4uU2hlZXQgIT0gbnVsbCkgY29udGludWU7XG5cdFx0aWYobi5OYW1lLm1hdGNoKC9eX3hsZm5cXC4vKSkgY29udGludWU7XG5cdFx0b3V0LnB1c2god3JpdGVfbmFtZV94bG1sKG4pKTtcblx0fVxuXHRyZXR1cm4gd3JpdGV4dGFnKFwiTmFtZXNcIiwgb3V0LmpvaW4oXCJcIikpO1xufVxuZnVuY3Rpb24gd3JpdGVfd3NfeGxtbF9uYW1lcyh3cywgb3B0cywgaWR4LCB3Yikge1xuXHRpZighd3MpIHJldHVybiBcIlwiO1xuXHRpZighKCh3Ynx8e30pLldvcmtib29rfHx7fSkuTmFtZXMpIHJldHVybiBcIlwiO1xudmFyIG5hbWVzID0gd2IuV29ya2Jvb2suTmFtZXM7XG5cdHZhciBvdXQgPSBbXTtcblx0b3V0ZXI6IGZvcih2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuXHRcdHZhciBuID0gbmFtZXNbaV07XG5cdFx0aWYobi5TaGVldCAhPSBpZHgpIGNvbnRpbnVlO1xuXHRcdC8qc3dpdGNoKG4uTmFtZSkge1xuXHRcdFx0Y2FzZSBcIl9cIjogY29udGludWU7XG5cdFx0fSovXG5cdFx0aWYobi5OYW1lLm1hdGNoKC9eX3hsZm5cXC4vKSkgY29udGludWU7XG5cdFx0b3V0LnB1c2god3JpdGVfbmFtZV94bG1sKG4pKTtcblx0fVxuXHRyZXR1cm4gb3V0LmpvaW4oXCJcIik7XG59XG4vKiBXb3Jrc2hlZXRPcHRpb25zICovXG5mdW5jdGlvbiB3cml0ZV93c194bG1sX3dzb3B0cyh3cywgb3B0cywgaWR4LCB3Yikge1xuXHRpZighd3MpIHJldHVybiBcIlwiO1xuXHR2YXIgbyA9IFtdO1xuXHQvKiBOT1RFOiBzcGVjIHRlY2huaWNhbGx5IGFsbG93cyBhbnkgb3JkZXIsIGJ1dCBzdGljayB3aXRoIGltcGxpZWQgb3JkZXIgKi9cblxuXHQvKiBGaXRUb1BhZ2UgKi9cblx0LyogRG9Ob3REaXNwbGF5Q29sSGVhZGVycyAqL1xuXHQvKiBEb05vdERpc3BsYXlSb3dIZWFkZXJzICovXG5cdC8qIFZpZXdhYmxlUmFuZ2UgKi9cblx0LyogU2VsZWN0aW9uICovXG5cdC8qIEdyaWRsaW5lQ29sb3IgKi9cblx0LyogTmFtZSAqL1xuXHQvKiBFeGNlbFdvcmtzaGVldFR5cGUgKi9cblx0LyogSW50bE1hY3JvICovXG5cdC8qIFVuc3luY2VkICovXG5cdC8qIFNlbGVjdGVkICovXG5cdC8qIENvZGVOYW1lICovXG5cblx0aWYod3NbJyFtYXJnaW5zJ10pIHtcblx0XHRvLnB1c2goXCI8UGFnZVNldHVwPlwiKTtcblx0XHRpZih3c1snIW1hcmdpbnMnXS5oZWFkZXIpIG8ucHVzaCh3cml0ZXh0YWcoXCJIZWFkZXJcIiwgbnVsbCwgeyd4Ok1hcmdpbic6d3NbJyFtYXJnaW5zJ10uaGVhZGVyfSkpO1xuXHRcdGlmKHdzWychbWFyZ2lucyddLmZvb3Rlcikgby5wdXNoKHdyaXRleHRhZyhcIkZvb3RlclwiLCBudWxsLCB7J3g6TWFyZ2luJzp3c1snIW1hcmdpbnMnXS5mb290ZXJ9KSk7XG5cdFx0by5wdXNoKHdyaXRleHRhZyhcIlBhZ2VNYXJnaW5zXCIsIG51bGwsIHtcblx0XHRcdCd4OkJvdHRvbSc6IHdzWychbWFyZ2lucyddLmJvdHRvbSB8fCBcIjAuNzVcIixcblx0XHRcdCd4OkxlZnQnOiB3c1snIW1hcmdpbnMnXS5sZWZ0IHx8IFwiMC43XCIsXG5cdFx0XHQneDpSaWdodCc6IHdzWychbWFyZ2lucyddLnJpZ2h0IHx8IFwiMC43XCIsXG5cdFx0XHQneDpUb3AnOiB3c1snIW1hcmdpbnMnXS50b3AgfHwgXCIwLjc1XCJcblx0XHR9KSk7XG5cdFx0by5wdXNoKFwiPC9QYWdlU2V0dXA+XCIpO1xuXHR9XG5cblx0LyogUGFnZVNldHVwICovXG5cdC8qIERpc3BsYXlQYWdlQnJlYWsgKi9cblx0LyogVHJhbnNpdGlvbkV4cHJlc3Npb25FdmFsdWF0aW9uICovXG5cdC8qIFRyYW5zaXRpb25Gb3JtdWxhRW50cnkgKi9cblx0LyogUHJpbnQgKi9cblx0LyogWm9vbSAqL1xuXHQvKiBQYWdlTGF5b3V0Wm9vbSAqL1xuXHQvKiBQYWdlQnJlYWtab29tICovXG5cdC8qIFNob3dQYWdlQnJlYWtab29tICovXG5cdC8qIERlZmF1bHRSb3dIZWlnaHQgKi9cblx0LyogRGVmYXVsdENvbHVtbldpZHRoICovXG5cdC8qIFN0YW5kYXJkV2lkdGggKi9cblxuXHRpZih3YiAmJiB3Yi5Xb3JrYm9vayAmJiB3Yi5Xb3JrYm9vay5TaGVldHMgJiYgd2IuV29ya2Jvb2suU2hlZXRzW2lkeF0pIHtcblx0XHQvKiBWaXNpYmxlICovXG5cdFx0aWYod2IuV29ya2Jvb2suU2hlZXRzW2lkeF0uSGlkZGVuKSBvLnB1c2god3JpdGV4dGFnKFwiVmlzaWJsZVwiLCAod2IuV29ya2Jvb2suU2hlZXRzW2lkeF0uSGlkZGVuID09IDEgPyBcIlNoZWV0SGlkZGVuXCIgOiBcIlNoZWV0VmVyeUhpZGRlblwiKSwge30pKTtcblx0XHRlbHNlIHtcblx0XHRcdC8qIFNlbGVjdGVkICovXG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgaWR4OyArK2kpIGlmKHdiLldvcmtib29rLlNoZWV0c1tpXSAmJiAhd2IuV29ya2Jvb2suU2hlZXRzW2ldLkhpZGRlbikgYnJlYWs7XG5cdFx0XHRpZihpID09IGlkeCkgby5wdXNoKFwiPFNlbGVjdGVkLz5cIik7XG5cdFx0fVxuXHR9XG5cblx0LyogTGVmdENvbHVtblZpc2libGUgKi9cblxuXHQvLyAkRmxvd0lnbm9yZVxuXHRpZigoKCgod2J8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwpIG8ucHVzaChcIjxEaXNwbGF5UmlnaHRUb0xlZnQvPlwiKTtcblxuXHQvKiBHcmlkbGluZUNvbG9ySW5kZXggKi9cblx0LyogRGlzcGxheUZvcm11bGFzICovXG5cdC8qIERvTm90RGlzcGxheUdyaWRsaW5lcyAqL1xuXHQvKiBEb05vdERpc3BsYXlIZWFkaW5ncyAqL1xuXHQvKiBEb05vdERpc3BsYXlPdXRsaW5lICovXG5cdC8qIEFwcGx5QXV0b21hdGljT3V0bGluZVN0eWxlcyAqL1xuXHQvKiBOb1N1bW1hcnlSb3dzQmVsb3dEZXRhaWwgKi9cblx0LyogTm9TdW1tYXJ5Q29sdW1uc1JpZ2h0RGV0YWlsICovXG5cdC8qIERvTm90RGlzcGxheVplcm9zICovXG5cdC8qIEFjdGl2ZVJvdyAqL1xuXHQvKiBBY3RpdmVDb2x1bW4gKi9cblx0LyogRmlsdGVyT24gKi9cblx0LyogUmFuZ2VTZWxlY3Rpb24gKi9cblx0LyogVG9wUm93VmlzaWJsZSAqL1xuXHQvKiBUb3BSb3dCb3R0b21QYW5lICovXG5cdC8qIExlZnRDb2x1bW5SaWdodFBhbmUgKi9cblx0LyogQWN0aXZlUGFuZSAqL1xuXHQvKiBTcGxpdEhvcml6b250YWwgKi9cblx0LyogU3BsaXRWZXJ0aWNhbCAqL1xuXHQvKiBGcmVlemVQYW5lcyAqL1xuXHQvKiBGcm96ZW5Ob1NwbGl0ICovXG5cdC8qIFRhYkNvbG9ySW5kZXggKi9cblx0LyogUGFuZXMgKi9cblxuXHQvKiBOT1RFOiBQYXNzd29yZCBub3Qgc3VwcG9ydGVkIGluIFhMTUwgRm9ybWF0ICovXG5cdGlmKHdzWychcHJvdGVjdCddKSB7XG5cdFx0by5wdXNoKHdyaXRldGFnKFwiUHJvdGVjdENvbnRlbnRzXCIsIFwiVHJ1ZVwiKSk7XG5cdFx0aWYod3NbJyFwcm90ZWN0J10ub2JqZWN0cykgby5wdXNoKHdyaXRldGFnKFwiUHJvdGVjdE9iamVjdHNcIiwgXCJUcnVlXCIpKTtcblx0XHRpZih3c1snIXByb3RlY3QnXS5zY2VuYXJpb3MpIG8ucHVzaCh3cml0ZXRhZyhcIlByb3RlY3RTY2VuYXJpb3NcIiwgXCJUcnVlXCIpKTtcblx0XHRpZih3c1snIXByb3RlY3QnXS5zZWxlY3RMb2NrZWRDZWxscyAhPSBudWxsICYmICF3c1snIXByb3RlY3QnXS5zZWxlY3RMb2NrZWRDZWxscykgby5wdXNoKHdyaXRldGFnKFwiRW5hYmxlU2VsZWN0aW9uXCIsIFwiTm9TZWxlY3Rpb25cIikpO1xuXHRcdGVsc2UgaWYod3NbJyFwcm90ZWN0J10uc2VsZWN0VW5sb2NrZWRDZWxscyAhPSBudWxsICYmICF3c1snIXByb3RlY3QnXS5zZWxlY3RVbmxvY2tlZENlbGxzKSBvLnB1c2god3JpdGV0YWcoXCJFbmFibGVTZWxlY3Rpb25cIiwgXCJVbmxvY2tlZENlbGxzXCIpKTtcblx0W1xuXHRcdFsgXCJmb3JtYXRDZWxsc1wiLCBcIkFsbG93Rm9ybWF0Q2VsbHNcIiBdLFxuXHRcdFsgXCJmb3JtYXRDb2x1bW5zXCIsIFwiQWxsb3dTaXplQ29sc1wiIF0sXG5cdFx0WyBcImZvcm1hdFJvd3NcIiwgXCJBbGxvd1NpemVSb3dzXCIgXSxcblx0XHRbIFwiaW5zZXJ0Q29sdW1uc1wiLCBcIkFsbG93SW5zZXJ0Q29sc1wiIF0sXG5cdFx0WyBcImluc2VydFJvd3NcIiwgXCJBbGxvd0luc2VydFJvd3NcIiBdLFxuXHRcdFsgXCJpbnNlcnRIeXBlcmxpbmtzXCIsIFwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzXCIgXSxcblx0XHRbIFwiZGVsZXRlQ29sdW1uc1wiLCBcIkFsbG93RGVsZXRlQ29sc1wiIF0sXG5cdFx0WyBcImRlbGV0ZVJvd3NcIiwgXCJBbGxvd0RlbGV0ZVJvd3NcIiBdLFxuXHRcdFsgXCJzb3J0XCIsIFwiQWxsb3dTb3J0XCIgXSxcblx0XHRbIFwiYXV0b0ZpbHRlclwiLCBcIkFsbG93RmlsdGVyXCIgXSxcblx0XHRbIFwicGl2b3RUYWJsZXNcIiwgXCJBbGxvd1VzZVBpdm90VGFibGVzXCIgXVxuXHRdLmZvckVhY2goZnVuY3Rpb24oeCkgeyBpZih3c1snIXByb3RlY3QnXVt4WzBdXSkgby5wdXNoKFwiPFwiK3hbMV0rXCIvPlwiKTsgfSk7XG5cdH1cblxuXHRpZihvLmxlbmd0aCA9PSAwKSByZXR1cm4gXCJcIjtcblx0cmV0dXJuIHdyaXRleHRhZyhcIldvcmtzaGVldE9wdGlvbnNcIiwgby5qb2luKFwiXCIpLCB7eG1sbnM6WExNTE5TLnh9KTtcbn1cbmZ1bmN0aW9uIHdyaXRlX3dzX3hsbWxfY29tbWVudChjb21tZW50cykge1xuXHRyZXR1cm4gY29tbWVudHMubWFwKGZ1bmN0aW9uKGMpIHtcblx0XHQvLyBUT0RPOiBmb3JtYXR0ZWQgdGV4dFxuXHRcdHZhciB0ID0geGxtbF91bmZpeHN0cihjLnR8fFwiXCIpO1xuXHRcdHZhciBkID13cml0ZXh0YWcoXCJzczpEYXRhXCIsIHQsIHtcInhtbG5zXCI6XCJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwXCJ9KTtcblx0XHRyZXR1cm4gd3JpdGV4dGFnKFwiQ29tbWVudFwiLCBkLCB7XCJzczpBdXRob3JcIjpjLmF9KTtcblx0fSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIHdyaXRlX3dzX3hsbWxfY2VsbChjZWxsLCByZWYsIHdzLCBvcHRzLCBpZHgsIHdiLCBhZGRyKXtcblx0aWYoIWNlbGwgfHwgY2VsbC52ID09IHVuZGVmaW5lZCAmJiBjZWxsLmYgPT0gdW5kZWZpbmVkKSByZXR1cm4gXCJcIjtcblxuXHR2YXIgYXR0ciA9IHt9O1xuXHRpZihjZWxsLmYpIGF0dHJbXCJzczpGb3JtdWxhXCJdID0gXCI9XCIgKyBlc2NhcGV4bWwoYTFfdG9fcmMoY2VsbC5mLCBhZGRyKSk7XG5cdGlmKGNlbGwuRiAmJiBjZWxsLkYuc2xpY2UoMCwgcmVmLmxlbmd0aCkgPT0gcmVmKSB7XG5cdFx0dmFyIGVuZCA9IGRlY29kZV9jZWxsKGNlbGwuRi5zbGljZShyZWYubGVuZ3RoICsgMSkpO1xuXHRcdGF0dHJbXCJzczpBcnJheVJhbmdlXCJdID0gXCJSQzpSXCIgKyAoZW5kLnIgPT0gYWRkci5yID8gXCJcIiA6IFwiW1wiICsgKGVuZC5yIC0gYWRkci5yKSArIFwiXVwiKSArIFwiQ1wiICsgKGVuZC5jID09IGFkZHIuYyA/IFwiXCIgOiBcIltcIiArIChlbmQuYyAtIGFkZHIuYykgKyBcIl1cIik7XG5cdH1cblxuXHRpZihjZWxsLmwgJiYgY2VsbC5sLlRhcmdldCkge1xuXHRcdGF0dHJbXCJzczpIUmVmXCJdID0gZXNjYXBleG1sKGNlbGwubC5UYXJnZXQpO1xuXHRcdGlmKGNlbGwubC5Ub29sdGlwKSBhdHRyW1wieDpIUmVmU2NyZWVuVGlwXCJdID0gZXNjYXBleG1sKGNlbGwubC5Ub29sdGlwKTtcblx0fVxuXG5cdGlmKHdzWychbWVyZ2VzJ10pIHtcblx0XHR2YXIgbWFyciA9IHdzWychbWVyZ2VzJ107XG5cdFx0Zm9yKHZhciBtaSA9IDA7IG1pICE9IG1hcnIubGVuZ3RoOyArK21pKSB7XG5cdFx0XHRpZihtYXJyW21pXS5zLmMgIT0gYWRkci5jIHx8IG1hcnJbbWldLnMuciAhPSBhZGRyLnIpIGNvbnRpbnVlO1xuXHRcdFx0aWYobWFyclttaV0uZS5jID4gbWFyclttaV0ucy5jKSBhdHRyWydzczpNZXJnZUFjcm9zcyddID0gbWFyclttaV0uZS5jIC0gbWFyclttaV0ucy5jO1xuXHRcdFx0aWYobWFyclttaV0uZS5yID4gbWFyclttaV0ucy5yKSBhdHRyWydzczpNZXJnZURvd24nXSA9IG1hcnJbbWldLmUuciAtIG1hcnJbbWldLnMucjtcblx0XHR9XG5cdH1cblxuXHR2YXIgdCA9IFwiXCIsIHAgPSBcIlwiO1xuXHRzd2l0Y2goY2VsbC50KSB7XG5cdFx0Y2FzZSAneic6IHJldHVybiBcIlwiO1xuXHRcdGNhc2UgJ24nOiB0ID0gJ051bWJlcic7IHAgPSBTdHJpbmcoY2VsbC52KTsgYnJlYWs7XG5cdFx0Y2FzZSAnYic6IHQgPSAnQm9vbGVhbic7IHAgPSAoY2VsbC52ID8gXCIxXCIgOiBcIjBcIik7IGJyZWFrO1xuXHRcdGNhc2UgJ2UnOiB0ID0gJ0Vycm9yJzsgcCA9IEJFcnJbY2VsbC52XTsgYnJlYWs7XG5cdFx0Y2FzZSAnZCc6IHQgPSAnRGF0ZVRpbWUnOyBwID0gbmV3IERhdGUoY2VsbC52KS50b0lTT1N0cmluZygpOyBpZihjZWxsLnogPT0gbnVsbCkgY2VsbC56ID0gY2VsbC56IHx8IFNTRi5fdGFibGVbMTRdOyBicmVhaztcblx0XHRjYXNlICdzJzogdCA9ICdTdHJpbmcnOyBwID0gZXNjYXBleGxtbChjZWxsLnZ8fFwiXCIpOyBicmVhaztcblx0fVxuXHQvKiBUT0RPOiBjZWxsIHN0eWxlICovXG5cdHZhciBvcyA9IGdldF9jZWxsX3N0eWxlKG9wdHMuY2VsbFhmcywgY2VsbCwgb3B0cyk7XG5cdGF0dHJbXCJzczpTdHlsZUlEXCJdID0gXCJzXCIgKyAoMjErb3MpO1xuXHRhdHRyW1wic3M6SW5kZXhcIl0gPSBhZGRyLmMgKyAxO1xuXHR2YXIgX3YgPSAoY2VsbC52ICE9IG51bGwgPyBwIDogXCJcIik7XG5cdHZhciBtID0gJzxEYXRhIHNzOlR5cGU9XCInICsgdCArICdcIj4nICsgX3YgKyAnPC9EYXRhPic7XG5cblx0aWYoKGNlbGwuY3x8W10pLmxlbmd0aCA+IDApIG0gKz0gd3JpdGVfd3NfeGxtbF9jb21tZW50KGNlbGwuYyk7XG5cblx0cmV0dXJuIHdyaXRleHRhZyhcIkNlbGxcIiwgbSwgYXR0cik7XG59XG5mdW5jdGlvbiB3cml0ZV93c194bG1sX3JvdyhSLCByb3cpIHtcblx0dmFyIG8gPSAnPFJvdyBzczpJbmRleD1cIicgKyAoUisxKSArICdcIic7XG5cdGlmKHJvdykge1xuXHRcdGlmKHJvdy5ocHQgJiYgIXJvdy5ocHgpIHJvdy5ocHggPSBwdDJweChyb3cuaHB0KTtcblx0XHRpZihyb3cuaHB4KSBvICs9ICcgc3M6QXV0b0ZpdEhlaWdodD1cIjBcIiBzczpIZWlnaHQ9XCInICsgcm93LmhweCArICdcIic7XG5cdFx0aWYocm93LmhpZGRlbikgbyArPSAnIHNzOkhpZGRlbj1cIjFcIic7XG5cdH1cblx0cmV0dXJuIG8gKyAnPic7XG59XG4vKiBUT0RPICovXG5mdW5jdGlvbiB3cml0ZV93c194bG1sX3RhYmxlKHdzLCBvcHRzLCBpZHgsIHdiKSB7XG5cdGlmKCF3c1snIXJlZiddKSByZXR1cm4gXCJcIjtcblx0dmFyIHJhbmdlID0gc2FmZV9kZWNvZGVfcmFuZ2Uod3NbJyFyZWYnXSk7XG5cdHZhciBtYXJyID0gd3NbJyFtZXJnZXMnXSB8fCBbXSwgbWkgPSAwO1xuXHR2YXIgbyA9IFtdO1xuXHRpZih3c1snIWNvbHMnXSkgd3NbJyFjb2xzJ10uZm9yRWFjaChmdW5jdGlvbihuLCBpKSB7XG5cdFx0cHJvY2Vzc19jb2wobik7XG5cdFx0dmFyIHcgPSAhIW4ud2lkdGg7XG5cdFx0dmFyIHAgPSBjb2xfb2JqX3coaSwgbik7XG5cdFx0dmFyIGsgPSB7XCJzczpJbmRleFwiOmkrMX07XG5cdFx0aWYodykga1snc3M6V2lkdGgnXSA9IHdpZHRoMnB4KHAud2lkdGgpO1xuXHRcdGlmKG4uaGlkZGVuKSBrWydzczpIaWRkZW4nXT1cIjFcIjtcblx0XHRvLnB1c2god3JpdGV4dGFnKFwiQ29sdW1uXCIsbnVsbCxrKSk7XG5cdH0pO1xuXHR2YXIgZGVuc2UgPSBBcnJheS5pc0FycmF5KHdzKTtcblx0Zm9yKHZhciBSID0gcmFuZ2Uucy5yOyBSIDw9IHJhbmdlLmUucjsgKytSKSB7XG5cdFx0dmFyIHJvdyA9IFt3cml0ZV93c194bG1sX3JvdyhSLCAod3NbJyFyb3dzJ118fFtdKVtSXSldO1xuXHRcdGZvcih2YXIgQyA9IHJhbmdlLnMuYzsgQyA8PSByYW5nZS5lLmM7ICsrQykge1xuXHRcdFx0dmFyIHNraXAgPSBmYWxzZTtcblx0XHRcdGZvcihtaSA9IDA7IG1pICE9IG1hcnIubGVuZ3RoOyArK21pKSB7XG5cdFx0XHRcdGlmKG1hcnJbbWldLnMuYyA+IEMpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZihtYXJyW21pXS5zLnIgPiBSKSBjb250aW51ZTtcblx0XHRcdFx0aWYobWFyclttaV0uZS5jIDwgQykgY29udGludWU7XG5cdFx0XHRcdGlmKG1hcnJbbWldLmUuciA8IFIpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZihtYXJyW21pXS5zLmMgIT0gQyB8fCBtYXJyW21pXS5zLnIgIT0gUikgc2tpcCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYoc2tpcCkgY29udGludWU7XG5cdFx0XHR2YXIgYWRkciA9IHtyOlIsYzpDfTtcblx0XHRcdHZhciByZWYgPSBlbmNvZGVfY2VsbChhZGRyKSwgY2VsbCA9IGRlbnNlID8gKHdzW1JdfHxbXSlbQ10gOiB3c1tyZWZdO1xuXHRcdFx0cm93LnB1c2god3JpdGVfd3NfeGxtbF9jZWxsKGNlbGwsIHJlZiwgd3MsIG9wdHMsIGlkeCwgd2IsIGFkZHIpKTtcblx0XHR9XG5cdFx0cm93LnB1c2goXCI8L1Jvdz5cIik7XG5cdFx0aWYocm93Lmxlbmd0aCA+IDIpIG8ucHVzaChyb3cuam9pbihcIlwiKSk7XG5cdH1cblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIHdyaXRlX3dzX3hsbWwoaWR4LCBvcHRzLCB3Yikge1xuXHR2YXIgbyA9IFtdO1xuXHR2YXIgcyA9IHdiLlNoZWV0TmFtZXNbaWR4XTtcblx0dmFyIHdzID0gd2IuU2hlZXRzW3NdO1xuXG5cdHZhciB0ID0gd3MgPyB3cml0ZV93c194bG1sX25hbWVzKHdzLCBvcHRzLCBpZHgsIHdiKSA6IFwiXCI7XG5cdGlmKHQubGVuZ3RoID4gMCkgby5wdXNoKFwiPE5hbWVzPlwiICsgdCArIFwiPC9OYW1lcz5cIik7XG5cblx0LyogVGFibGUgKi9cblx0dCA9IHdzID8gd3JpdGVfd3NfeGxtbF90YWJsZSh3cywgb3B0cywgaWR4LCB3YikgOiBcIlwiO1xuXHRpZih0Lmxlbmd0aCA+IDApIG8ucHVzaChcIjxUYWJsZT5cIiArIHQgKyBcIjwvVGFibGU+XCIpO1xuXG5cdC8qIFdvcmtzaGVldE9wdGlvbnMgKi9cblx0by5wdXNoKHdyaXRlX3dzX3hsbWxfd3NvcHRzKHdzLCBvcHRzLCBpZHgsIHdiKSk7XG5cblx0cmV0dXJuIG8uam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIHdyaXRlX3hsbWwod2IsIG9wdHMpIHtcblx0aWYoIW9wdHMpIG9wdHMgPSB7fTtcblx0aWYoIXdiLlNTRikgd2IuU1NGID0gU1NGLmdldF90YWJsZSgpO1xuXHRpZih3Yi5TU0YpIHtcblx0XHRtYWtlX3NzZihTU0YpOyBTU0YubG9hZF90YWJsZSh3Yi5TU0YpO1xuXHRcdC8vICRGbG93SWdub3JlXG5cdFx0b3B0cy5yZXZzc2YgPSBldmVydF9udW0od2IuU1NGKTsgb3B0cy5yZXZzc2Zbd2IuU1NGWzY1NTM1XV0gPSAwO1xuXHRcdG9wdHMuc3NmID0gd2IuU1NGO1xuXHRcdG9wdHMuY2VsbFhmcyA9IFtdO1xuXHRcdGdldF9jZWxsX3N0eWxlKG9wdHMuY2VsbFhmcywge30sIHtyZXZzc2Y6e1wiR2VuZXJhbFwiOjB9fSk7XG5cdH1cblx0dmFyIGQgPSBbXTtcblx0ZC5wdXNoKHdyaXRlX3Byb3BzX3hsbWwod2IsIG9wdHMpKTtcblx0ZC5wdXNoKHdyaXRlX3diX3hsbWwod2IsIG9wdHMpKTtcblx0ZC5wdXNoKFwiXCIpO1xuXHRkLnB1c2goXCJcIik7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB3Yi5TaGVldE5hbWVzLmxlbmd0aDsgKytpKVxuXHRcdGQucHVzaCh3cml0ZXh0YWcoXCJXb3Jrc2hlZXRcIiwgd3JpdGVfd3NfeGxtbChpLCBvcHRzLCB3YiksIHtcInNzOk5hbWVcIjplc2NhcGV4bWwod2IuU2hlZXROYW1lc1tpXSl9KSk7XG5cdGRbMl0gPSB3cml0ZV9zdHlfeGxtbCh3Yiwgb3B0cyk7XG5cdGRbM10gPSB3cml0ZV9uYW1lc194bG1sKHdiLCBvcHRzKTtcblx0cmV0dXJuIFhNTF9IRUFERVIgKyB3cml0ZXh0YWcoXCJXb3JrYm9va1wiLCBkLmpvaW4oXCJcIiksIHtcblx0XHQneG1sbnMnOiAgICAgIFhMTUxOUy5zcyxcblx0XHQneG1sbnM6byc6ICAgIFhMTUxOUy5vLFxuXHRcdCd4bWxuczp4JzogICAgWExNTE5TLngsXG5cdFx0J3htbG5zOnNzJzogICBYTE1MTlMuc3MsXG5cdFx0J3htbG5zOmR0JzogICBYTE1MTlMuZHQsXG5cdFx0J3htbG5zOmh0bWwnOiBYTE1MTlMuaHRtbFxuXHR9KTtcbn1cbi8qIFtNUy1PTEVEU10gMi4zLjggQ29tcE9ialN0cmVhbSAqL1xuZnVuY3Rpb24gcGFyc2VfY29tcG9iaihvYmopIHtcblx0dmFyIHYgPSB7fTtcblx0dmFyIG8gPSBvYmouY29udGVudDtcbi8qIFtNUy1PTEVEU10gMi4zLjcgQ29tcE9iakhlYWRlciAtLSBBbGwgZmllbGRzIE1VU1QgYmUgaWdub3JlZCAqL1xuXHRvLmwgPSAyODtcblxuXHR2LkFuc2lVc2VyVHlwZSA9IG8ucmVhZF9zaGlmdCgwLCBcImxwc3RyLWFuc2lcIik7XG5cdHYuQW5zaUNsaXBib2FyZEZvcm1hdCA9IHBhcnNlX0NsaXBib2FyZEZvcm1hdE9yQW5zaVN0cmluZyhvKTtcblxuXHRpZihvLmxlbmd0aCAtIG8ubCA8PSA0KSByZXR1cm4gdjtcblxuXHR2YXIgbSA9IG8ucmVhZF9zaGlmdCg0KTtcblx0aWYobSA9PSAwIHx8IG0gPiA0MCkgcmV0dXJuIHY7XG5cdG8ubC09NDsgdi5SZXNlcnZlZDEgPSBvLnJlYWRfc2hpZnQoMCwgXCJscHN0ci1hbnNpXCIpO1xuXG5cdGlmKG8ubGVuZ3RoIC0gby5sIDw9IDQpIHJldHVybiB2O1xuXHRtID0gby5yZWFkX3NoaWZ0KDQpO1xuXHRpZihtICE9PSAweDcxYjIzOWY0KSByZXR1cm4gdjtcblx0di5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0ID0gcGFyc2VfQ2xpcGJvYXJkRm9ybWF0T3JVbmljb2RlU3RyaW5nKG8pO1xuXG5cdG0gPSBvLnJlYWRfc2hpZnQoNCk7XG5cdGlmKG0gPT0gMCB8fCBtID4gNDApIHJldHVybiB2O1xuXHRvLmwtPTQ7IHYuUmVzZXJ2ZWQyID0gby5yZWFkX3NoaWZ0KDAsIFwibHB3c3RyXCIpO1xufVxuXG4vKlxuXHRDb250aW51ZSBsb2dpYyBmb3I6XG5cdC0gMi40LjU4IENvbnRpbnVlXG5cdC0gMi40LjU5IENvbnRpbnVlQmlnTmFtZVxuXHQtIDIuNC42MCBDb250aW51ZUZydFxuXHQtIDIuNC42MSBDb250aW51ZUZydDExXG5cdC0gMi40LjYyIENvbnRpbnVlRnJ0MTJcbiovXG5mdW5jdGlvbiBzbHVycChSLCBibG9iLCBsZW5ndGgsIG9wdHMpIHtcblx0dmFyIGwgPSBsZW5ndGg7XG5cdHZhciBidWZzID0gW107XG5cdHZhciBkID0gYmxvYi5zbGljZShibG9iLmwsYmxvYi5sK2wpO1xuXHRpZihvcHRzICYmIG9wdHMuZW5jICYmIG9wdHMuZW5jLmluc2l0dSkgc3dpdGNoKFIubikge1xuXHRjYXNlICdCT0YnOiBjYXNlICdGaWxlUGFzcyc6IGNhc2UgJ0ZpbGVMb2NrJzogY2FzZSAnSW50ZXJmYWNlSGRyJzogY2FzZSAnUlJESW5mbyc6IGNhc2UgJ1JSREhlYWQnOiBjYXNlICdVc3JFeGNsJzogYnJlYWs7XG5cdGRlZmF1bHQ6XG5cdFx0aWYoZC5sZW5ndGggPT09IDApIGJyZWFrO1xuXHRcdG9wdHMuZW5jLmluc2l0dShkKTtcblx0fVxuXHRidWZzLnB1c2goZCk7XG5cdGJsb2IubCArPSBsO1xuXHR2YXIgbmV4dCA9IChYTFNSZWNvcmRFbnVtW19fcmVhZFVJbnQxNkxFKGJsb2IsYmxvYi5sKV0pO1xuXHR2YXIgc3RhcnQgPSAwO1xuXHR3aGlsZShuZXh0ICE9IG51bGwgJiYgbmV4dC5uLnNsaWNlKDAsOCkgPT09ICdDb250aW51ZScpIHtcblx0XHRsID0gX19yZWFkVUludDE2TEUoYmxvYixibG9iLmwrMik7XG5cdFx0c3RhcnQgPSBibG9iLmwgKyA0O1xuXHRcdGlmKG5leHQubiA9PSAnQ29udGludWVGcnQnKSBzdGFydCArPSA0O1xuXHRcdGVsc2UgaWYobmV4dC5uLnNsaWNlKDAsMTEpID09ICdDb250aW51ZUZydCcpIHN0YXJ0ICs9IDEyO1xuXHRcdGJ1ZnMucHVzaChibG9iLnNsaWNlKHN0YXJ0LGJsb2IubCs0K2wpKTtcblx0XHRibG9iLmwgKz0gNCtsO1xuXHRcdG5leHQgPSAoWExTUmVjb3JkRW51bVtfX3JlYWRVSW50MTZMRShibG9iLCBibG9iLmwpXSk7XG5cdH1cblx0dmFyIGIgPSAoYmNvbmNhdChidWZzKSk7XG5cdHByZXBfYmxvYihiLCAwKTtcblx0dmFyIGxsID0gMDsgYi5sZW5zID0gW107XG5cdGZvcih2YXIgaiA9IDA7IGogPCBidWZzLmxlbmd0aDsgKytqKSB7IGIubGVucy5wdXNoKGxsKTsgbGwgKz0gYnVmc1tqXS5sZW5ndGg7IH1cblx0cmV0dXJuIFIuZihiLCBiLmxlbmd0aCwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIHNhZmVfZm9ybWF0X3hmKHAsIG9wdHMsIGRhdGUxOTA0KSB7XG5cdGlmKHAudCA9PT0gJ3onKSByZXR1cm47XG5cdGlmKCFwLlhGKSByZXR1cm47XG5cdHZhciBmbXRpZCA9IDA7XG5cdHRyeSB7XG5cdFx0Zm10aWQgPSBwLnogfHwgcC5YRi5udW1GbXRJZCB8fCAwO1xuXHRcdGlmKG9wdHMuY2VsbE5GKSBwLnogPSBTU0YuX3RhYmxlW2ZtdGlkXTtcblx0fSBjYXRjaChlKSB7IGlmKG9wdHMuV1RGKSB0aHJvdyBlOyB9XG5cdGlmKCFvcHRzIHx8IG9wdHMuY2VsbFRleHQgIT09IGZhbHNlKSB0cnkge1xuXHRcdGlmKHAudCA9PT0gJ2UnKSB7IHAudyA9IHAudyB8fCBCRXJyW3Audl07IH1cblx0XHRlbHNlIGlmKGZtdGlkID09PSAwIHx8IGZtdGlkID09IFwiR2VuZXJhbFwiKSB7XG5cdFx0XHRpZihwLnQgPT09ICduJykge1xuXHRcdFx0XHRpZigocC52fDApID09PSBwLnYpIHAudyA9IFNTRi5fZ2VuZXJhbF9pbnQocC52KTtcblx0XHRcdFx0ZWxzZSBwLncgPSBTU0YuX2dlbmVyYWxfbnVtKHAudik7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHAudyA9IFNTRi5fZ2VuZXJhbChwLnYpO1xuXHRcdH1cblx0XHRlbHNlIHAudyA9IFNTRi5mb3JtYXQoZm10aWQscC52LCB7ZGF0ZTE5MDQ6ISFkYXRlMTkwNH0pO1xuXHR9IGNhdGNoKGUpIHsgaWYob3B0cy5XVEYpIHRocm93IGU7IH1cblx0aWYob3B0cy5jZWxsRGF0ZXMgJiYgZm10aWQgJiYgcC50ID09ICduJyAmJiBTU0YuaXNfZGF0ZShTU0YuX3RhYmxlW2ZtdGlkXSB8fCBTdHJpbmcoZm10aWQpKSkge1xuXHRcdHZhciBfZCA9IFNTRi5wYXJzZV9kYXRlX2NvZGUocC52KTsgaWYoX2QpIHsgcC50ID0gJ2QnOyBwLnYgPSBuZXcgRGF0ZShfZC55LCBfZC5tLTEsX2QuZCxfZC5ILF9kLk0sX2QuUyxfZC51KTsgfVxuXHR9XG59XG5cbmZ1bmN0aW9uIG1ha2VfY2VsbCh2YWwsIGl4ZmUsIHQpIHtcblx0cmV0dXJuICh7djp2YWwsIGl4ZmU6aXhmZSwgdDp0fSk7XG59XG5cbi8vIDIuMy4yXG5mdW5jdGlvbiBwYXJzZV93b3JrYm9vayhibG9iLCBvcHRpb25zKSB7XG5cdHZhciB3YiA9ICh7b3B0czp7fX0pO1xuXHR2YXIgU2hlZXRzID0ge307XG5cdGlmKERFTlNFICE9IG51bGwgJiYgb3B0aW9ucy5kZW5zZSA9PSBudWxsKSBvcHRpb25zLmRlbnNlID0gREVOU0U7XG5cdHZhciBvdXQgPSAoKG9wdGlvbnMuZGVuc2UgPyBbXSA6IHt9KSk7XG5cdHZhciBEaXJlY3RvcnkgPSB7fTtcblx0dmFyIHJhbmdlID0gKHt9KTtcblx0dmFyIGxhc3RfZm9ybXVsYSA9IG51bGw7XG5cdHZhciBzc3QgPSAoW10pO1xuXHR2YXIgY3VyX3NoZWV0ID0gXCJcIjtcblx0dmFyIFByZWFtYmxlID0ge307XG5cdHZhciBsYXN0Y2VsbCwgbGFzdF9jZWxsID0gXCJcIiwgY2MsIGNtbnQsIHJuZ0MsIHJuZ1I7XG5cdHZhciBzaGFyZWRmID0ge307XG5cdHZhciBhcnJheWYgPSBbXTtcblx0dmFyIHRlbXBfdmFsO1xuXHR2YXIgY291bnRyeTtcblx0dmFyIGNlbGxfdmFsaWQgPSB0cnVlO1xuXHR2YXIgWEZzID0gW107IC8qIFhGIHJlY29yZHMgKi9cblx0dmFyIHBhbGV0dGUgPSBbXTtcblx0dmFyIFdvcmtib29rID0gKHsgU2hlZXRzOltdLCBXQlByb3BzOntkYXRlMTkwNDpmYWxzZX0sIFZpZXdzOlt7fV0gfSksIHdzcHJvcHMgPSB7fTtcblx0dmFyIGdldF9yZ2IgPSBmdW5jdGlvbiBnZXRyZ2IoaWN2KSB7XG5cdFx0aWYoaWN2IDwgOCkgcmV0dXJuIFhMU0ljdltpY3ZdO1xuXHRcdGlmKGljdiA8IDY0KSByZXR1cm4gcGFsZXR0ZVtpY3YtOF0gfHwgWExTSWN2W2ljdl07XG5cdFx0cmV0dXJuIFhMU0ljdltpY3ZdO1xuXHR9O1xuXHR2YXIgcHJvY2Vzc19jZWxsX3N0eWxlID0gZnVuY3Rpb24gcGNzKGNlbGwsIGxpbmUsIG9wdGlvbnMpIHtcblx0XHR2YXIgeGZkID0gbGluZS5YRi5kYXRhO1xuXHRcdGlmKCF4ZmQgfHwgIXhmZC5wYXR0ZXJuVHlwZSB8fCAhb3B0aW9ucyB8fCAhb3B0aW9ucy5jZWxsU3R5bGVzKSByZXR1cm47XG5cdFx0bGluZS5zID0gKHt9KTtcblx0XHRsaW5lLnMucGF0dGVyblR5cGUgPSB4ZmQucGF0dGVyblR5cGU7XG5cdFx0dmFyIHQ7XG5cdFx0aWYoKHQgPSByZ2IySGV4KGdldF9yZ2IoeGZkLmljdkZvcmUpKSkpIHsgbGluZS5zLmZnQ29sb3IgPSB7cmdiOnR9OyB9XG5cdFx0aWYoKHQgPSByZ2IySGV4KGdldF9yZ2IoeGZkLmljdkJhY2spKSkpIHsgbGluZS5zLmJnQ29sb3IgPSB7cmdiOnR9OyB9XG5cdH07XG5cdHZhciBhZGRjZWxsID0gZnVuY3Rpb24gYWRkY2VsbChjZWxsLCBsaW5lLCBvcHRpb25zKSB7XG5cdFx0aWYoZmlsZV9kZXB0aCA+IDEpIHJldHVybjtcblx0XHRpZighY2VsbF92YWxpZCkgcmV0dXJuO1xuXHRcdGlmKG9wdGlvbnMuY2VsbFN0eWxlcyAmJiBsaW5lLlhGICYmIGxpbmUuWEYuZGF0YSkgcHJvY2Vzc19jZWxsX3N0eWxlKGNlbGwsIGxpbmUsIG9wdGlvbnMpO1xuXHRcdGRlbGV0ZSBsaW5lLml4ZmU7IGRlbGV0ZSBsaW5lLlhGO1xuXHRcdGxhc3RjZWxsID0gY2VsbDtcblx0XHRsYXN0X2NlbGwgPSBlbmNvZGVfY2VsbChjZWxsKTtcblx0XHRpZihyYW5nZS5zKSB7XG5cdFx0XHRpZihjZWxsLnIgPCByYW5nZS5zLnIpIHJhbmdlLnMuciA9IGNlbGwucjtcblx0XHRcdGlmKGNlbGwuYyA8IHJhbmdlLnMuYykgcmFuZ2Uucy5jID0gY2VsbC5jO1xuXHRcdH1cblx0XHRpZihyYW5nZS5lKSB7XG5cdFx0XHRpZihjZWxsLnIgKyAxID4gcmFuZ2UuZS5yKSByYW5nZS5lLnIgPSBjZWxsLnIgKyAxO1xuXHRcdFx0aWYoY2VsbC5jICsgMSA+IHJhbmdlLmUuYykgcmFuZ2UuZS5jID0gY2VsbC5jICsgMTtcblx0XHR9XG5cdFx0aWYob3B0aW9ucy5jZWxsRm9ybXVsYSAmJiBsaW5lLmYpIHtcblx0XHRcdGZvcih2YXIgYWZpID0gMDsgYWZpIDwgYXJyYXlmLmxlbmd0aDsgKythZmkpIHtcblx0XHRcdFx0aWYoYXJyYXlmW2FmaV1bMF0ucy5jID4gY2VsbC5jIHx8IGFycmF5ZlthZmldWzBdLnMuciA+IGNlbGwucikgY29udGludWU7XG5cdFx0XHRcdGlmKGFycmF5ZlthZmldWzBdLmUuYyA8IGNlbGwuYyB8fCBhcnJheWZbYWZpXVswXS5lLnIgPCBjZWxsLnIpIGNvbnRpbnVlO1xuXHRcdFx0XHRsaW5lLkYgPSBlbmNvZGVfcmFuZ2UoYXJyYXlmW2FmaV1bMF0pO1xuXHRcdFx0XHRpZihhcnJheWZbYWZpXVswXS5zLmMgIT0gY2VsbC5jIHx8IGFycmF5ZlthZmldWzBdLnMuciAhPSBjZWxsLnIpIGRlbGV0ZSBsaW5lLmY7XG5cdFx0XHRcdGlmKGxpbmUuZikgbGluZS5mID0gXCJcIiArIHN0cmluZ2lmeV9mb3JtdWxhKGFycmF5ZlthZmldWzFdLCByYW5nZSwgY2VsbCwgc3VwYm9va3MsIG9wdHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYob3B0aW9ucy5zaGVldFJvd3MgJiYgbGFzdGNlbGwuciA+PSBvcHRpb25zLnNoZWV0Um93cykgY2VsbF92YWxpZCA9IGZhbHNlO1xuXHRcdGVsc2Uge1xuXHRcdFx0aWYob3B0aW9ucy5kZW5zZSkge1xuXHRcdFx0XHRpZighb3V0W2NlbGwucl0pIG91dFtjZWxsLnJdID0gW107XG5cdFx0XHRcdG91dFtjZWxsLnJdW2NlbGwuY10gPSBsaW5lO1xuXHRcdFx0fSBlbHNlIG91dFtsYXN0X2NlbGxdID0gbGluZTtcblx0XHR9XG5cdH07XG5cdHZhciBvcHRzID0gKHtcblx0XHRlbmM6IGZhbHNlLCAvLyBlbmNyeXB0ZWRcblx0XHRzYmNjaDogMCwgLy8gY2NoIGluIHRoZSBwcmVjZWRpbmcgU3VwQm9va1xuXHRcdHNuYW1lczogW10sIC8vIHNoZWV0bmFtZXNcblx0XHRzaGFyZWRmOiBzaGFyZWRmLCAvLyBzaGFyZWQgZm9ybXVsYWUgYnkgYWRkcmVzc1xuXHRcdGFycmF5ZjogYXJyYXlmLCAvLyBhcnJheSBmb3JtdWxhZSBhcnJheVxuXHRcdHJydGFiaWQ6IFtdLCAvLyBSUlRhYklkXG5cdFx0bGFzdHVzZXI6IFwiXCIsIC8vIExhc3QgVXNlciBmcm9tIFdyaXRlQWNjZXNzXG5cdFx0YmlmZjogOCwgLy8gQklGRiB2ZXJzaW9uXG5cdFx0Y29kZXBhZ2U6IDAsIC8vIENQIGZyb20gQ29kZVBhZ2UgcmVjb3JkXG5cdFx0d2lubG9ja2VkOiAwLCAvLyBmTG9ja1duIGZyb20gV2luUHJvdGVjdFxuXHRcdGNlbGxTdHlsZXM6ICEhb3B0aW9ucyAmJiAhIW9wdGlvbnMuY2VsbFN0eWxlcyxcblx0XHRXVEY6ICEhb3B0aW9ucyAmJiAhIW9wdGlvbnMud3RmXG5cdH0pO1xuXHRpZihvcHRpb25zLnBhc3N3b3JkKSBvcHRzLnBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZDtcblx0dmFyIHRoZW1lcztcblx0dmFyIG1lcmdlcyA9IFtdO1xuXHR2YXIgb2JqZWN0cyA9IFtdO1xuXHR2YXIgY29saW5mbyA9IFtdLCByb3dpbmZvID0gW107XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuXHR2YXIgZGVmd2lkdGggPSAwLCBkZWZoZWlnaHQgPSAwOyAvLyB0d2lwcyAvIE1EVyByZXNwZWN0aXZlbHlcblx0dmFyIHNlZW5jb2wgPSBmYWxzZTtcblx0dmFyIHN1cGJvb2tzID0gKFtdKTsgLy8gMS1pbmRleGVkLCB3aWxsIGhvbGQgZXh0ZXJuIG5hbWVzXG5cdHN1cGJvb2tzLlNoZWV0TmFtZXMgPSBvcHRzLnNuYW1lcztcblx0c3VwYm9va3Muc2hhcmVkZiA9IG9wdHMuc2hhcmVkZjtcblx0c3VwYm9va3MuYXJyYXlmID0gb3B0cy5hcnJheWY7XG5cdHN1cGJvb2tzLm5hbWVzID0gW107XG5cdHN1cGJvb2tzLlhUSSA9IFtdO1xuXHR2YXIgbGFzdF9SbiA9ICcnO1xuXHR2YXIgZmlsZV9kZXB0aCA9IDA7IC8qIFRPRE86IG1ha2UgYSByZWFsIHN0YWNrICovXG5cdHZhciBCSUZGMkZtdCA9IDAsIEJJRkYyRm10VGFibGUgPSBbXTtcblx0dmFyIEZpbHRlckRhdGFiYXNlcyA9IFtdOyAvKiBUT0RPOiBzb3J0IG91dCBzdXBib29rcyBhbmQgcHJvY2VzcyBlbHNld2hlcmUgKi9cblx0dmFyIGxhc3RfbGJsO1xuXG5cdC8qIGV4cGxpY2l0IG92ZXJyaWRlIGZvciBzb21lIGJyb2tlbiB3cml0ZXJzICovXG5cdG9wdHMuY29kZXBhZ2UgPSAxMjAwO1xuXHRzZXRfY3AoMTIwMCk7XG5cdHZhciBzZWVuX2NvZGVwYWdlID0gZmFsc2U7XG5cdHdoaWxlKGJsb2IubCA8IGJsb2IubGVuZ3RoIC0gMSkge1xuXHRcdHZhciBzID0gYmxvYi5sO1xuXHRcdHZhciBSZWNvcmRUeXBlID0gYmxvYi5yZWFkX3NoaWZ0KDIpO1xuXHRcdGlmKFJlY29yZFR5cGUgPT09IDAgJiYgbGFzdF9SbiA9PT0gJ0VPRicpIGJyZWFrO1xuXHRcdHZhciBsZW5ndGggPSAoYmxvYi5sID09PSBibG9iLmxlbmd0aCA/IDAgOiBibG9iLnJlYWRfc2hpZnQoMikpO1xuXHRcdHZhciBSID0gWExTUmVjb3JkRW51bVtSZWNvcmRUeXBlXTtcblx0XHQvL2NvbnNvbGUubG9nKFJlY29yZFR5cGUudG9TdHJpbmcoMTYpLCBSZWNvcmRUeXBlLCBSLCBibG9iLmwsIGxlbmd0aCwgYmxvYi5sZW5ndGgpO1xuXHRcdC8vaWYoIVIpIGNvbnNvbGUubG9nKGJsb2Iuc2xpY2UoYmxvYi5sLCBibG9iLmwgKyBsZW5ndGgpKTtcblx0XHRpZihSICYmIFIuZikge1xuXHRcdFx0aWYob3B0aW9ucy5ib29rU2hlZXRzKSB7XG5cdFx0XHRcdGlmKGxhc3RfUm4gPT09ICdCb3VuZFNoZWV0OCcgJiYgUi5uICE9PSAnQm91bmRTaGVldDgnKSBicmVhaztcblx0XHRcdH1cblx0XHRcdGxhc3RfUm4gPSBSLm47XG5cdFx0XHRpZihSLnIgPT09IDIgfHwgUi5yID09IDEyKSB7XG5cdFx0XHRcdHZhciBydCA9IGJsb2IucmVhZF9zaGlmdCgyKTsgbGVuZ3RoIC09IDI7XG5cdFx0XHRcdGlmKCFvcHRzLmVuYyAmJiBydCAhPT0gUmVjb3JkVHlwZSkgdGhyb3cgbmV3IEVycm9yKFwicnQgbWlzbWF0Y2g6IFwiICsgcnQgKyBcIiE9XCIgKyBSZWNvcmRUeXBlKTtcblx0XHRcdFx0aWYoUi5yID09IDEyKXsgYmxvYi5sICs9IDEwOyBsZW5ndGggLT0gMTA7IH0gLy8gc2tpcCBGUlRcblx0XHRcdH1cblx0XHRcdC8vY29uc29sZS5lcnJvcihSLGJsb2IubCxsZW5ndGgsYmxvYi5sZW5ndGgpO1xuXHRcdFx0dmFyIHZhbDtcblx0XHRcdGlmKFIubiA9PT0gJ0VPRicpIHZhbCA9IFIuZihibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHRcdFx0ZWxzZSB2YWwgPSBzbHVycChSLCBibG9iLCBsZW5ndGgsIG9wdHMpO1xuXHRcdFx0dmFyIFJuID0gUi5uO1xuXHRcdFx0aWYoZmlsZV9kZXB0aCA9PSAwICYmIFJuICE9ICdCT0YnKSBjb250aW51ZTtcblx0XHRcdC8qIG5lc3RlZCBzd2l0Y2ggc3RhdGVtZW50cyB0byB3b3JrYXJvdW5kIFY4IDEyOCBsaW1pdCAqL1xuXHRcdFx0c3dpdGNoKFJuKSB7XG5cdFx0XHRcdC8qIFdvcmtib29rIE9wdGlvbnMgKi9cblx0XHRcdFx0Y2FzZSAnRGF0ZTE5MDQnOlxud2Iub3B0cy5EYXRlMTkwNCA9IFdvcmtib29rLldCUHJvcHMuZGF0ZTE5MDQgPSB2YWw7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdXcml0ZVByb3RlY3QnOiB3Yi5vcHRzLldyaXRlUHJvdGVjdCA9IHRydWU7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdGaWxlUGFzcyc6XG5cdFx0XHRcdFx0aWYoIW9wdHMuZW5jKSBibG9iLmwgPSAwO1xuXHRcdFx0XHRcdG9wdHMuZW5jID0gdmFsO1xuXHRcdFx0XHRcdGlmKG9wdHMuV1RGKSBjb25zb2xlLmVycm9yKHZhbCk7XG5cdFx0XHRcdFx0aWYoIW9wdGlvbnMucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcihcIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkXCIpO1xuXHRcdFx0XHRcdGlmKHZhbC52YWxpZCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJFbmNyeXB0aW9uIHNjaGVtZSB1bnN1cHBvcnRlZFwiKTtcblx0XHRcdFx0XHRpZighdmFsLnZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoXCJQYXNzd29yZCBpcyBpbmNvcnJlY3RcIik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1dyaXRlQWNjZXNzJzogb3B0cy5sYXN0dXNlciA9IHZhbDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0ZpbGVTaGFyaW5nJzogYnJlYWs7IC8vVE9ET1xuXHRcdFx0XHRjYXNlICdDb2RlUGFnZSc6XG5cdFx0XHRcdFx0Lyogb3ZlcnJpZGVzIGJhc2VkIG9uIHRlc3QgY2FzZXMgKi9cblx0XHRcdFx0XHRzd2l0Y2godmFsKSB7XG5cdFx0XHRcdFx0XHRjYXNlIDB4NTIxMjogdmFsID0gIDEyMDA7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAweDgwMDA6IHZhbCA9IDEwMDAwOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgMHg4MDAxOiB2YWwgPSAgMTI1MjsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNldF9jcChvcHRzLmNvZGVwYWdlID0gdmFsKTtcblx0XHRcdFx0XHRzZWVuX2NvZGVwYWdlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnUlJUYWJJZCc6IG9wdHMucnJ0YWJpZCA9IHZhbDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1dpblByb3RlY3QnOiBvcHRzLndpbmxvY2tlZCA9IHZhbDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1RlbXBsYXRlJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnQm9va0Jvb2wnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdVc2VzRUxGcyc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdNVFJTZXR0aW5ncyc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdSZWZyZXNoQWxsJzpcblx0XHRcdFx0Y2FzZSAnQ2FsY0NvdW50Jzpcblx0XHRcdFx0Y2FzZSAnQ2FsY0RlbHRhJzpcblx0XHRcdFx0Y2FzZSAnQ2FsY0l0ZXInOlxuXHRcdFx0XHRjYXNlICdDYWxjTW9kZSc6XG5cdFx0XHRcdGNhc2UgJ0NhbGNQcmVjaXNpb24nOlxuXHRcdFx0XHRjYXNlICdDYWxjU2F2ZVJlY2FsYyc6XG5cdFx0XHRcdFx0d2Iub3B0c1tSbl0gPSB2YWw7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdDYWxjUmVmTW9kZSc6IG9wdHMuQ2FsY1JlZk1vZGUgPSB2YWw7IGJyZWFrOyAvLyBUT0RPOiBpbXBsZW1lbnQgUjFDMVxuXHRcdFx0XHRjYXNlICdVbmNhbGNlZCc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdGb3JjZUZ1bGxDYWxjdWxhdGlvbic6IHdiLm9wdHMuRnVsbENhbGMgPSB2YWw7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdXc0Jvb2wnOlxuXHRcdFx0XHRcdGlmKHZhbC5mRGlhbG9nKSBvdXRbXCIhdHlwZVwiXSA9IFwiZGlhbG9nXCI7XG5cdFx0XHRcdFx0YnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnWEYnOiBYRnMucHVzaCh2YWwpOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnRXh0U1NUJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnQm9va0V4dCc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1JpY2hUZXh0U3RyZWFtJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0JrSGltJzogYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnU3VwQm9vayc6XG5cdFx0XHRcdFx0c3VwYm9va3MucHVzaChbdmFsXSk7XG5cdFx0XHRcdFx0c3VwYm9va3Nbc3VwYm9va3MubGVuZ3RoLTFdLlhUSSA9IFtdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdFeHRlcm5OYW1lJzpcblx0XHRcdFx0XHRzdXBib29rc1tzdXBib29rcy5sZW5ndGgtMV0ucHVzaCh2YWwpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdJbmRleCc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ0xibCc6XG5cdFx0XHRcdFx0bGFzdF9sYmwgPSAoe1xuXHRcdFx0XHRcdFx0TmFtZTogdmFsLk5hbWUsXG5cdFx0XHRcdFx0XHRSZWY6IHN0cmluZ2lmeV9mb3JtdWxhKHZhbC5yZ2NlLHJhbmdlLG51bGwsc3VwYm9va3Msb3B0cylcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZih2YWwuaXRhYiA+IDApIGxhc3RfbGJsLlNoZWV0ID0gdmFsLml0YWIgLSAxO1xuXHRcdFx0XHRcdHN1cGJvb2tzLm5hbWVzLnB1c2gobGFzdF9sYmwpO1xuXHRcdFx0XHRcdGlmKCFzdXBib29rc1swXSkgeyBzdXBib29rc1swXSA9IFtdOyBzdXBib29rc1swXS5YVEkgPSBbXTsgfVxuXHRcdFx0XHRcdHN1cGJvb2tzW3N1cGJvb2tzLmxlbmd0aC0xXS5wdXNoKHZhbCk7XG5cdFx0XHRcdFx0aWYodmFsLk5hbWUgPT0gXCJfeGxubS5fRmlsdGVyRGF0YWJhc2VcIiAmJiB2YWwuaXRhYiA+IDApXG5cdFx0XHRcdFx0XHRpZih2YWwucmdjZSAmJiB2YWwucmdjZVswXSAmJiB2YWwucmdjZVswXVswXSAmJiB2YWwucmdjZVswXVswXVswXSA9PSAnUHRnQXJlYTNkJylcblx0XHRcdFx0XHRcdFx0RmlsdGVyRGF0YWJhc2VzW3ZhbC5pdGFiIC0gMV0gPSB7IHJlZjogZW5jb2RlX3JhbmdlKHZhbC5yZ2NlWzBdWzBdWzFdWzJdKSB9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdFeHRlcm5Db3VudCc6IG9wdHMuRXh0ZXJuQ291bnQgPSB2YWw7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdFeHRlcm5TaGVldCc6XG5cdFx0XHRcdFx0aWYoc3VwYm9va3MubGVuZ3RoID09IDApIHsgc3VwYm9va3NbMF0gPSBbXTsgc3VwYm9va3NbMF0uWFRJID0gW107IH1cblx0XHRcdFx0XHRzdXBib29rc1tzdXBib29rcy5sZW5ndGggLSAxXS5YVEkgPSBzdXBib29rc1tzdXBib29rcy5sZW5ndGggLSAxXS5YVEkuY29uY2F0KHZhbCk7IHN1cGJvb2tzLlhUSSA9IHN1cGJvb2tzLlhUSS5jb25jYXQodmFsKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ05hbWVDbXQnOlxuXHRcdFx0XHRcdC8qIFRPRE86IHNlYXJjaCBmb3IgY29ycmVjdCBuYW1lICovXG5cdFx0XHRcdFx0aWYob3B0cy5iaWZmIDwgOCkgYnJlYWs7XG5cdFx0XHRcdFx0aWYobGFzdF9sYmwgIT0gbnVsbCkgbGFzdF9sYmwuQ29tbWVudCA9IHZhbFsxXTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdQcm90ZWN0Jzogb3V0W1wiIXByb3RlY3RcIl0gPSB2YWw7IGJyZWFrOyAvKiBmb3Igc2hlZXQgb3IgYm9vayAqL1xuXHRcdFx0XHRjYXNlICdQYXNzd29yZCc6IGlmKHZhbCAhPT0gMCAmJiBvcHRzLldURikgY29uc29sZS5lcnJvcihcIlBhc3N3b3JkIHZlcmlmaWVyOiBcIiArIHZhbCk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdQcm90NFJldic6IGNhc2UgJ1Byb3Q0UmV2UGFzcyc6IGJyZWFrOyAvKlRPRE86IFJldmlzaW9uIENvbnRyb2wqL1xuXG5cdFx0XHRcdGNhc2UgJ0JvdW5kU2hlZXQ4Jzoge1xuXHRcdFx0XHRcdERpcmVjdG9yeVt2YWwucG9zXSA9IHZhbDtcblx0XHRcdFx0XHRvcHRzLnNuYW1lcy5wdXNoKHZhbC5uYW1lKTtcblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnRU9GJzoge1xuXHRcdFx0XHRcdGlmKC0tZmlsZV9kZXB0aCkgYnJlYWs7XG5cdFx0XHRcdFx0aWYocmFuZ2UuZSkge1xuXHRcdFx0XHRcdFx0aWYocmFuZ2UuZS5yID4gMCAmJiByYW5nZS5lLmMgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHJhbmdlLmUuci0tOyByYW5nZS5lLmMtLTtcblx0XHRcdFx0XHRcdFx0b3V0W1wiIXJlZlwiXSA9IGVuY29kZV9yYW5nZShyYW5nZSk7XG5cdFx0XHRcdFx0XHRcdHJhbmdlLmUucisrOyByYW5nZS5lLmMrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKG1lcmdlcy5sZW5ndGggPiAwKSBvdXRbXCIhbWVyZ2VzXCJdID0gbWVyZ2VzO1xuXHRcdFx0XHRcdFx0aWYob2JqZWN0cy5sZW5ndGggPiAwKSBvdXRbXCIhb2JqZWN0c1wiXSA9IG9iamVjdHM7XG5cdFx0XHRcdFx0XHRpZihjb2xpbmZvLmxlbmd0aCA+IDApIG91dFtcIiFjb2xzXCJdID0gY29saW5mbztcblx0XHRcdFx0XHRcdGlmKHJvd2luZm8ubGVuZ3RoID4gMCkgb3V0W1wiIXJvd3NcIl0gPSByb3dpbmZvO1xuXHRcdFx0XHRcdFx0V29ya2Jvb2suU2hlZXRzLnB1c2god3Nwcm9wcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKGN1cl9zaGVldCA9PT0gXCJcIikgUHJlYW1ibGUgPSBvdXQ7IGVsc2UgU2hlZXRzW2N1cl9zaGVldF0gPSBvdXQ7XG5cdFx0XHRcdFx0b3V0ID0gKChvcHRpb25zLmRlbnNlID8gW10gOiB7fSkpO1xuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdCT0YnOiB7XG5cdFx0XHRcdFx0aWYob3B0cy5iaWZmID09PSA4KSBvcHRzLmJpZmYgPSB7XG4weDAwMDk6MixcbjB4MDIwOTozLFxuMHgwNDA5OjRcblx0XHRcdFx0XHR9W1JlY29yZFR5cGVdIHx8IHtcbjB4MDUwMDo1LFxuMHgwNjAwOjgsXG4weDAwMDI6MixcbjB4MDAwNzoyXG5cdFx0XHRcdFx0fVt2YWwuQklGRlZlcl0gfHwgODtcblx0XHRcdFx0XHRpZihmaWxlX2RlcHRoKyspIGJyZWFrO1xuXHRcdFx0XHRcdGNlbGxfdmFsaWQgPSB0cnVlO1xuXHRcdFx0XHRcdG91dCA9ICgob3B0aW9ucy5kZW5zZSA/IFtdIDoge30pKTtcblxuXHRcdFx0XHRcdGlmKG9wdHMuYmlmZiA8IDggJiYgIXNlZW5fY29kZXBhZ2UpIHsgc2Vlbl9jb2RlcGFnZSA9IHRydWU7IHNldF9jcChvcHRzLmNvZGVwYWdlID0gb3B0aW9ucy5jb2RlcGFnZSB8fCAxMjUyKTsgfVxuXHRcdFx0XHRcdGlmKG9wdHMuYmlmZiA8IDUpIHtcblx0XHRcdFx0XHRcdGlmKGN1cl9zaGVldCA9PT0gXCJcIikgY3VyX3NoZWV0ID0gXCJTaGVldDFcIjtcblx0XHRcdFx0XHRcdHJhbmdlID0ge3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTtcblx0XHRcdFx0XHRcdC8qIGZha2UgQm91bmRTaGVldDggKi9cblx0XHRcdFx0XHRcdHZhciBmYWtlYnM4ID0ge3BvczogYmxvYi5sIC0gbGVuZ3RoLCBuYW1lOmN1cl9zaGVldH07XG5cdFx0XHRcdFx0XHREaXJlY3RvcnlbZmFrZWJzOC5wb3NdID0gZmFrZWJzODtcblx0XHRcdFx0XHRcdG9wdHMuc25hbWVzLnB1c2goY3VyX3NoZWV0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBjdXJfc2hlZXQgPSAoRGlyZWN0b3J5W3NdIHx8IHtuYW1lOlwiXCJ9KS5uYW1lO1xuXHRcdFx0XHRcdGlmKHZhbC5kdCA9PSAweDIwKSBvdXRbXCIhdHlwZVwiXSA9IFwiY2hhcnRcIjtcblx0XHRcdFx0XHRpZih2YWwuZHQgPT0gMHg0MCkgb3V0W1wiIXR5cGVcIl0gPSBcIm1hY3JvXCI7XG5cdFx0XHRcdFx0bWVyZ2VzID0gW107XG5cdFx0XHRcdFx0b2JqZWN0cyA9IFtdO1xuXHRcdFx0XHRcdG9wdHMuYXJyYXlmID0gYXJyYXlmID0gW107XG5cdFx0XHRcdFx0Y29saW5mbyA9IFtdOyByb3dpbmZvID0gW107XG5cdFx0XHRcdFx0ZGVmd2lkdGggPSBkZWZoZWlnaHQgPSAwO1xuXHRcdFx0XHRcdHNlZW5jb2wgPSBmYWxzZTtcblx0XHRcdFx0XHR3c3Byb3BzID0ge0hpZGRlbjooRGlyZWN0b3J5W3NdfHx7aHM6MH0pLmhzLCBuYW1lOmN1cl9zaGVldCB9O1xuXHRcdFx0XHR9IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ051bWJlcic6IGNhc2UgJ0JJRkYyTlVNJzogY2FzZSAnQklGRjJJTlQnOiB7XG5cdFx0XHRcdFx0aWYob3V0W1wiIXR5cGVcIl0gPT0gXCJjaGFydFwiKSBpZihvcHRpb25zLmRlbnNlID8gKG91dFt2YWwucl18fFtdKVt2YWwuY106IG91dFtlbmNvZGVfY2VsbCh7Yzp2YWwuYywgcjp2YWwucn0pXSkgKyt2YWwuYztcblx0XHRcdFx0XHR0ZW1wX3ZhbCA9ICh7aXhmZTogdmFsLml4ZmUsIFhGOiBYRnNbdmFsLml4ZmVdfHx7fSwgdjp2YWwudmFsLCB0OiduJ30pO1xuXHRcdFx0XHRcdGlmKEJJRkYyRm10ID4gMCkgdGVtcF92YWwueiA9IEJJRkYyRm10VGFibGVbKHRlbXBfdmFsLml4ZmU+PjgpICYgMHgxRl07XG5cdFx0XHRcdFx0c2FmZV9mb3JtYXRfeGYodGVtcF92YWwsIG9wdGlvbnMsIHdiLm9wdHMuRGF0ZTE5MDQpO1xuXHRcdFx0XHRcdGFkZGNlbGwoe2M6dmFsLmMsIHI6dmFsLnJ9LCB0ZW1wX3ZhbCwgb3B0aW9ucyk7XG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0Jvb2xFcnInOiB7XG5cdFx0XHRcdFx0dGVtcF92YWwgPSAoe2l4ZmU6IHZhbC5peGZlLCBYRjogWEZzW3ZhbC5peGZlXSwgdjp2YWwudmFsLCB0OnZhbC50fSk7XG5cdFx0XHRcdFx0aWYoQklGRjJGbXQgPiAwKSB0ZW1wX3ZhbC56ID0gQklGRjJGbXRUYWJsZVsodGVtcF92YWwuaXhmZT4+OCkgJiAweDFGXTtcblx0XHRcdFx0XHRzYWZlX2Zvcm1hdF94Zih0ZW1wX3ZhbCwgb3B0aW9ucywgd2Iub3B0cy5EYXRlMTkwNCk7XG5cdFx0XHRcdFx0YWRkY2VsbCh7Yzp2YWwuYywgcjp2YWwucn0sIHRlbXBfdmFsLCBvcHRpb25zKTtcblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnUksnOiB7XG5cdFx0XHRcdFx0dGVtcF92YWwgPSAoe2l4ZmU6IHZhbC5peGZlLCBYRjogWEZzW3ZhbC5peGZlXSwgdjp2YWwucmtudW0sIHQ6J24nfSk7XG5cdFx0XHRcdFx0aWYoQklGRjJGbXQgPiAwKSB0ZW1wX3ZhbC56ID0gQklGRjJGbXRUYWJsZVsodGVtcF92YWwuaXhmZT4+OCkgJiAweDFGXTtcblx0XHRcdFx0XHRzYWZlX2Zvcm1hdF94Zih0ZW1wX3ZhbCwgb3B0aW9ucywgd2Iub3B0cy5EYXRlMTkwNCk7XG5cdFx0XHRcdFx0YWRkY2VsbCh7Yzp2YWwuYywgcjp2YWwucn0sIHRlbXBfdmFsLCBvcHRpb25zKTtcblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnTXVsUmsnOiB7XG5cdFx0XHRcdFx0Zm9yKHZhciBqID0gdmFsLmM7IGogPD0gdmFsLkM7ICsraikge1xuXHRcdFx0XHRcdFx0dmFyIGl4ZmUgPSB2YWwucmtyZWNbai12YWwuY11bMF07XG5cdFx0XHRcdFx0XHR0ZW1wX3ZhbD0gKHtpeGZlOml4ZmUsIFhGOlhGc1tpeGZlXSwgdjp2YWwucmtyZWNbai12YWwuY11bMV0sIHQ6J24nfSk7XG5cdFx0XHRcdFx0XHRpZihCSUZGMkZtdCA+IDApIHRlbXBfdmFsLnogPSBCSUZGMkZtdFRhYmxlWyh0ZW1wX3ZhbC5peGZlPj44KSAmIDB4MUZdO1xuXHRcdFx0XHRcdFx0c2FmZV9mb3JtYXRfeGYodGVtcF92YWwsIG9wdGlvbnMsIHdiLm9wdHMuRGF0ZTE5MDQpO1xuXHRcdFx0XHRcdFx0YWRkY2VsbCh7YzpqLCByOnZhbC5yfSwgdGVtcF92YWwsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnRm9ybXVsYSc6IHtcblx0XHRcdFx0XHRpZih2YWwudmFsID09ICdTdHJpbmcnKSB7IGxhc3RfZm9ybXVsYSA9IHZhbDsgYnJlYWs7IH1cblx0XHRcdFx0XHR0ZW1wX3ZhbCA9IG1ha2VfY2VsbCh2YWwudmFsLCB2YWwuY2VsbC5peGZlLCB2YWwudHQpO1xuXHRcdFx0XHRcdHRlbXBfdmFsLlhGID0gWEZzW3RlbXBfdmFsLml4ZmVdO1xuXHRcdFx0XHRcdGlmKG9wdGlvbnMuY2VsbEZvcm11bGEpIHtcblx0XHRcdFx0XHRcdHZhciBfZiA9IHZhbC5mb3JtdWxhO1xuXHRcdFx0XHRcdFx0aWYoX2YgJiYgX2ZbMF0gJiYgX2ZbMF1bMF0gJiYgX2ZbMF1bMF1bMF0gPT0gJ1B0Z0V4cCcpIHtcblx0XHRcdFx0XHRcdFx0dmFyIF9mciA9IF9mWzBdWzBdWzFdWzBdLCBfZmMgPSBfZlswXVswXVsxXVsxXTtcblx0XHRcdFx0XHRcdFx0dmFyIF9mZSA9IGVuY29kZV9jZWxsKHtyOl9mciwgYzpfZmN9KTtcblx0XHRcdFx0XHRcdFx0aWYoc2hhcmVkZltfZmVdKSB0ZW1wX3ZhbC5mID0gXCJcIitzdHJpbmdpZnlfZm9ybXVsYSh2YWwuZm9ybXVsYSxyYW5nZSx2YWwuY2VsbCxzdXBib29rcywgb3B0cyk7XG5cdFx0XHRcdFx0XHRcdGVsc2UgdGVtcF92YWwuRiA9ICgob3B0aW9ucy5kZW5zZSA/IChvdXRbX2ZyXXx8W10pW19mY106IG91dFtfZmVdKSB8fCB7fSkuRjtcblx0XHRcdFx0XHRcdH0gZWxzZSB0ZW1wX3ZhbC5mID0gXCJcIitzdHJpbmdpZnlfZm9ybXVsYSh2YWwuZm9ybXVsYSxyYW5nZSx2YWwuY2VsbCxzdXBib29rcywgb3B0cyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKEJJRkYyRm10ID4gMCkgdGVtcF92YWwueiA9IEJJRkYyRm10VGFibGVbKHRlbXBfdmFsLml4ZmU+PjgpICYgMHgxRl07XG5cdFx0XHRcdFx0c2FmZV9mb3JtYXRfeGYodGVtcF92YWwsIG9wdGlvbnMsIHdiLm9wdHMuRGF0ZTE5MDQpO1xuXHRcdFx0XHRcdGFkZGNlbGwodmFsLmNlbGwsIHRlbXBfdmFsLCBvcHRpb25zKTtcblx0XHRcdFx0XHRsYXN0X2Zvcm11bGEgPSB2YWw7XG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1N0cmluZyc6IHtcblx0XHRcdFx0XHRpZihsYXN0X2Zvcm11bGEpIHsgLyogdGVjaG5pY2FsbHkgYWx3YXlzIHRydWUgKi9cblx0XHRcdFx0XHRcdGxhc3RfZm9ybXVsYS52YWwgPSB2YWw7XG5cdFx0XHRcdFx0XHR0ZW1wX3ZhbCA9IG1ha2VfY2VsbCh2YWwsIGxhc3RfZm9ybXVsYS5jZWxsLml4ZmUsICdzJyk7XG5cdFx0XHRcdFx0XHR0ZW1wX3ZhbC5YRiA9IFhGc1t0ZW1wX3ZhbC5peGZlXTtcblx0XHRcdFx0XHRcdGlmKG9wdGlvbnMuY2VsbEZvcm11bGEpIHtcblx0XHRcdFx0XHRcdFx0dGVtcF92YWwuZiA9IFwiXCIrc3RyaW5naWZ5X2Zvcm11bGEobGFzdF9mb3JtdWxhLmZvcm11bGEsIHJhbmdlLCBsYXN0X2Zvcm11bGEuY2VsbCwgc3VwYm9va3MsIG9wdHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoQklGRjJGbXQgPiAwKSB0ZW1wX3ZhbC56ID0gQklGRjJGbXRUYWJsZVsodGVtcF92YWwuaXhmZT4+OCkgJiAweDFGXTtcblx0XHRcdFx0XHRcdHNhZmVfZm9ybWF0X3hmKHRlbXBfdmFsLCBvcHRpb25zLCB3Yi5vcHRzLkRhdGUxOTA0KTtcblx0XHRcdFx0XHRcdGFkZGNlbGwobGFzdF9mb3JtdWxhLmNlbGwsIHRlbXBfdmFsLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdGxhc3RfZm9ybXVsYSA9IG51bGw7XG5cdFx0XHRcdFx0fSBlbHNlIHRocm93IG5ldyBFcnJvcihcIlN0cmluZyByZWNvcmQgZXhwZWN0cyBGb3JtdWxhXCIpO1xuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdBcnJheSc6IHtcblx0XHRcdFx0XHRhcnJheWYucHVzaCh2YWwpO1xuXHRcdFx0XHRcdHZhciBfYXJyYXlzdGFydCA9IGVuY29kZV9jZWxsKHZhbFswXS5zKTtcblx0XHRcdFx0XHRjYyA9IG9wdGlvbnMuZGVuc2UgPyAob3V0W3ZhbFswXS5zLnJdfHxbXSlbdmFsWzBdLnMuY10gOiBvdXRbX2FycmF5c3RhcnRdO1xuXHRcdFx0XHRcdGlmKG9wdGlvbnMuY2VsbEZvcm11bGEgJiYgY2MpIHtcblx0XHRcdFx0XHRcdGlmKCFsYXN0X2Zvcm11bGEpIGJyZWFrOyAvKiB0ZWNobmljYWxseSB1bnJlYWNoYWJsZSAqL1xuXHRcdFx0XHRcdFx0aWYoIV9hcnJheXN0YXJ0IHx8ICFjYykgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYy5mID0gXCJcIitzdHJpbmdpZnlfZm9ybXVsYSh2YWxbMV0sIHJhbmdlLCB2YWxbMF0sIHN1cGJvb2tzLCBvcHRzKTtcblx0XHRcdFx0XHRcdGNjLkYgPSBlbmNvZGVfcmFuZ2UodmFsWzBdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1NockZtbGEnOiB7XG5cdFx0XHRcdFx0aWYoIWNlbGxfdmFsaWQpIGJyZWFrO1xuXHRcdFx0XHRcdGlmKCFvcHRpb25zLmNlbGxGb3JtdWxhKSBicmVhaztcblx0XHRcdFx0XHRpZihsYXN0X2NlbGwpIHtcblx0XHRcdFx0XHRcdC8qIFRPRE86IGNhcHR1cmUgcmFuZ2UgKi9cblx0XHRcdFx0XHRcdGlmKCFsYXN0X2Zvcm11bGEpIGJyZWFrOyAvKiB0ZWNobmljYWxseSB1bnJlYWNoYWJsZSAqL1xuXHRcdFx0XHRcdFx0c2hhcmVkZltlbmNvZGVfY2VsbChsYXN0X2Zvcm11bGEuY2VsbCldPSB2YWxbMF07XG5cdFx0XHRcdFx0XHRjYyA9IG9wdGlvbnMuZGVuc2UgPyAob3V0W2xhc3RfZm9ybXVsYS5jZWxsLnJdfHxbXSlbbGFzdF9mb3JtdWxhLmNlbGwuY10gOiBvdXRbZW5jb2RlX2NlbGwobGFzdF9mb3JtdWxhLmNlbGwpXTtcblx0XHRcdFx0XHRcdChjY3x8e30pLmYgPSBcIlwiK3N0cmluZ2lmeV9mb3JtdWxhKHZhbFswXSwgcmFuZ2UsIGxhc3RjZWxsLCBzdXBib29rcywgb3B0cyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdMYWJlbFNzdCc6XG5cdFx0XHRcdFx0dGVtcF92YWw9bWFrZV9jZWxsKHNzdFt2YWwuaXNzdF0udCwgdmFsLml4ZmUsICdzJyk7XG5cdFx0XHRcdFx0dGVtcF92YWwuWEYgPSBYRnNbdGVtcF92YWwuaXhmZV07XG5cdFx0XHRcdFx0aWYoQklGRjJGbXQgPiAwKSB0ZW1wX3ZhbC56ID0gQklGRjJGbXRUYWJsZVsodGVtcF92YWwuaXhmZT4+OCkgJiAweDFGXTtcblx0XHRcdFx0XHRzYWZlX2Zvcm1hdF94Zih0ZW1wX3ZhbCwgb3B0aW9ucywgd2Iub3B0cy5EYXRlMTkwNCk7XG5cdFx0XHRcdFx0YWRkY2VsbCh7Yzp2YWwuYywgcjp2YWwucn0sIHRlbXBfdmFsLCBvcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnQmxhbmsnOiBpZihvcHRpb25zLnNoZWV0U3R1YnMpIHtcblx0XHRcdFx0XHR0ZW1wX3ZhbCA9ICh7aXhmZTogdmFsLml4ZmUsIFhGOiBYRnNbdmFsLml4ZmVdLCB0Oid6J30pO1xuXHRcdFx0XHRcdGlmKEJJRkYyRm10ID4gMCkgdGVtcF92YWwueiA9IEJJRkYyRm10VGFibGVbKHRlbXBfdmFsLml4ZmU+PjgpICYgMHgxRl07XG5cdFx0XHRcdFx0c2FmZV9mb3JtYXRfeGYodGVtcF92YWwsIG9wdGlvbnMsIHdiLm9wdHMuRGF0ZTE5MDQpO1xuXHRcdFx0XHRcdGFkZGNlbGwoe2M6dmFsLmMsIHI6dmFsLnJ9LCB0ZW1wX3ZhbCwgb3B0aW9ucyk7XG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ011bEJsYW5rJzogaWYob3B0aW9ucy5zaGVldFN0dWJzKSB7XG5cdFx0XHRcdFx0Zm9yKHZhciBfaiA9IHZhbC5jOyBfaiA8PSB2YWwuQzsgKytfaikge1xuXHRcdFx0XHRcdFx0dmFyIF9peGZlID0gdmFsLml4ZmVbX2otdmFsLmNdO1xuXHRcdFx0XHRcdFx0dGVtcF92YWw9ICh7aXhmZTpfaXhmZSwgWEY6WEZzW19peGZlXSwgdDoneid9KTtcblx0XHRcdFx0XHRcdGlmKEJJRkYyRm10ID4gMCkgdGVtcF92YWwueiA9IEJJRkYyRm10VGFibGVbKHRlbXBfdmFsLml4ZmU+PjgpICYgMHgxRl07XG5cdFx0XHRcdFx0XHRzYWZlX2Zvcm1hdF94Zih0ZW1wX3ZhbCwgb3B0aW9ucywgd2Iub3B0cy5EYXRlMTkwNCk7XG5cdFx0XHRcdFx0XHRhZGRjZWxsKHtjOl9qLCByOnZhbC5yfSwgdGVtcF92YWwsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnUlN0cmluZyc6XG5cdFx0XHRcdGNhc2UgJ0xhYmVsJzogY2FzZSAnQklGRjJTVFInOlxuXHRcdFx0XHRcdHRlbXBfdmFsPW1ha2VfY2VsbCh2YWwudmFsLCB2YWwuaXhmZSwgJ3MnKTtcblx0XHRcdFx0XHR0ZW1wX3ZhbC5YRiA9IFhGc1t0ZW1wX3ZhbC5peGZlXTtcblx0XHRcdFx0XHRpZihCSUZGMkZtdCA+IDApIHRlbXBfdmFsLnogPSBCSUZGMkZtdFRhYmxlWyh0ZW1wX3ZhbC5peGZlPj44KSAmIDB4MUZdO1xuXHRcdFx0XHRcdHNhZmVfZm9ybWF0X3hmKHRlbXBfdmFsLCBvcHRpb25zLCB3Yi5vcHRzLkRhdGUxOTA0KTtcblx0XHRcdFx0XHRhZGRjZWxsKHtjOnZhbC5jLCByOnZhbC5yfSwgdGVtcF92YWwsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ0RpbWVuc2lvbnMnOiB7XG5cdFx0XHRcdFx0aWYoZmlsZV9kZXB0aCA9PT0gMSkgcmFuZ2UgPSB2YWw7IC8qIFRPRE86IHN0YWNrICovXG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1NTVCc6IHtcblx0XHRcdFx0XHRzc3QgPSB2YWw7XG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0Zvcm1hdCc6IHsgLyogdmFsID0gW2lkLCBmbXRdICovXG5cdFx0XHRcdFx0aWYob3B0cy5iaWZmID09IDQpIHtcblx0XHRcdFx0XHRcdEJJRkYyRm10VGFibGVbQklGRjJGbXQrK10gPSB2YWxbMV07XG5cdFx0XHRcdFx0XHRmb3IodmFyIGI0aWR4ID0gMDsgYjRpZHggPCBCSUZGMkZtdCArIDE2MzsgKytiNGlkeCkgaWYoU1NGLl90YWJsZVtiNGlkeF0gPT0gdmFsWzFdKSBicmVhaztcblx0XHRcdFx0XHRcdGlmKGI0aWR4ID49IDE2MykgU1NGLmxvYWQodmFsWzFdLCBCSUZGMkZtdCArIDE2Myk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgU1NGLmxvYWQodmFsWzFdLCB2YWxbMF0pO1xuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdCSUZGMkZPUk1BVCc6IHtcblx0XHRcdFx0XHRCSUZGMkZtdFRhYmxlW0JJRkYyRm10KytdID0gdmFsO1xuXHRcdFx0XHRcdGZvcih2YXIgYjJpZHggPSAwOyBiMmlkeCA8IEJJRkYyRm10ICsgMTYzOyArK2IyaWR4KSBpZihTU0YuX3RhYmxlW2IyaWR4XSA9PSB2YWwpIGJyZWFrO1xuXHRcdFx0XHRcdGlmKGIyaWR4ID49IDE2MykgU1NGLmxvYWQodmFsLCBCSUZGMkZtdCArIDE2Myk7XG5cdFx0XHRcdH0gYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnTWVyZ2VDZWxscyc6IG1lcmdlcyA9IG1lcmdlcy5jb25jYXQodmFsKTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnT2JqJzogb2JqZWN0c1t2YWwuY21vWzBdXSA9IG9wdHMubGFzdG9iaiA9IHZhbDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1R4Tyc6IG9wdHMubGFzdG9iai5UeE8gPSB2YWw7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdJbURhdGEnOiBvcHRzLmxhc3RvYmouSW1EYXRhID0gdmFsOyBicmVhaztcblxuXHRcdFx0XHRjYXNlICdITGluayc6IHtcblx0XHRcdFx0XHRmb3Iocm5nUiA9IHZhbFswXS5zLnI7IHJuZ1IgPD0gdmFsWzBdLmUucjsgKytybmdSKVxuXHRcdFx0XHRcdFx0Zm9yKHJuZ0MgPSB2YWxbMF0ucy5jOyBybmdDIDw9IHZhbFswXS5lLmM7ICsrcm5nQykge1xuXHRcdFx0XHRcdFx0XHRjYyA9IG9wdGlvbnMuZGVuc2UgPyAob3V0W3JuZ1JdfHxbXSlbcm5nQ10gOiBvdXRbZW5jb2RlX2NlbGwoe2M6cm5nQyxyOnJuZ1J9KV07XG5cdFx0XHRcdFx0XHRcdGlmKGNjKSBjYy5sID0gdmFsWzFdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdITGlua1Rvb2x0aXAnOiB7XG5cdFx0XHRcdFx0Zm9yKHJuZ1IgPSB2YWxbMF0ucy5yOyBybmdSIDw9IHZhbFswXS5lLnI7ICsrcm5nUilcblx0XHRcdFx0XHRcdGZvcihybmdDID0gdmFsWzBdLnMuYzsgcm5nQyA8PSB2YWxbMF0uZS5jOyArK3JuZ0MpIHtcblx0XHRcdFx0XHRcdFx0Y2MgPSBvcHRpb25zLmRlbnNlID8gKG91dFtybmdSXXx8W10pW3JuZ0NdIDogb3V0W2VuY29kZV9jZWxsKHtjOnJuZ0MscjpybmdSfSldO1xuXHRcdFx0XHRcdFx0XHRpZihjYykgY2MubC5Ub29sdGlwID0gdmFsWzFdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gYnJlYWs7XG5cblx0XHRcdFx0LyogQ29tbWVudHMgKi9cblx0XHRcdFx0Y2FzZSAnTm90ZSc6IHtcblx0XHRcdFx0XHRpZihvcHRzLmJpZmYgPD0gNSAmJiBvcHRzLmJpZmYgPj0gMikgYnJlYWs7IC8qIFRPRE86IEJJRkY1ICovXG5cdFx0XHRcdFx0Y2MgPSBvcHRpb25zLmRlbnNlID8gKG91dFt2YWxbMF0ucl18fFtdKVt2YWxbMF0uY10gOiBvdXRbZW5jb2RlX2NlbGwodmFsWzBdKV07XG5cdFx0XHRcdFx0dmFyIG5vdGVvYmogPSBvYmplY3RzW3ZhbFsyXV07XG5cdFx0XHRcdFx0aWYoIWNjKSBicmVhaztcblx0XHRcdFx0XHRpZighY2MuYykgY2MuYyA9IFtdO1xuXHRcdFx0XHRcdGNtbnQgPSB7YTp2YWxbMV0sdDpub3Rlb2JqLlR4Ty50fTtcblx0XHRcdFx0XHRjYy5jLnB1c2goY21udCk7XG5cdFx0XHRcdH0gYnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDogc3dpdGNoKFIubikgeyAvKiBuZXN0ZWQgKi9cblx0XHRcdFx0Y2FzZSAnQ2xydENsaWVudCc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdYRkV4dCc6IHVwZGF0ZV94ZmV4dChYRnNbdmFsLml4ZmVdLCB2YWwuZXh0KTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnRGVmQ29sV2lkdGgnOiBkZWZ3aWR0aCA9IHZhbDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0RlZmF1bHRSb3dIZWlnaHQnOiBkZWZoZWlnaHQgPSB2YWxbMV07IGJyZWFrOyAvLyBUT0RPOiBmbGFnc1xuXG5cdFx0XHRcdGNhc2UgJ0NvbEluZm8nOiB7XG5cdFx0XHRcdFx0aWYoIW9wdHMuY2VsbFN0eWxlcykgYnJlYWs7XG5cdFx0XHRcdFx0d2hpbGUodmFsLmUgPj0gdmFsLnMpIHtcblx0XHRcdFx0XHRcdGNvbGluZm9bdmFsLmUtLV0gPSB7IHdpZHRoOiB2YWwudy8yNTYgfTtcblx0XHRcdFx0XHRcdGlmKCFzZWVuY29sKSB7IHNlZW5jb2wgPSB0cnVlOyBmaW5kX21kd19jb2x3KHZhbC53LzI1Nik7IH1cblx0XHRcdFx0XHRcdHByb2Nlc3NfY29sKGNvbGluZm9bdmFsLmUrMV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnUm93Jzoge1xuXHRcdFx0XHRcdHZhciByb3dvYmogPSB7fTtcblx0XHRcdFx0XHRpZih2YWwubGV2ZWwgIT0gbnVsbCkgeyByb3dpbmZvW3ZhbC5yXSA9IHJvd29iajsgcm93b2JqLmxldmVsID0gdmFsLmxldmVsOyB9XG5cdFx0XHRcdFx0aWYodmFsLmhpZGRlbikgeyByb3dpbmZvW3ZhbC5yXSA9IHJvd29iajsgcm93b2JqLmhpZGRlbiA9IHRydWU7IH1cblx0XHRcdFx0XHRpZih2YWwuaHB0KSB7XG5cdFx0XHRcdFx0XHRyb3dpbmZvW3ZhbC5yXSA9IHJvd29iajtcblx0XHRcdFx0XHRcdHJvd29iai5ocHQgPSB2YWwuaHB0OyByb3dvYmouaHB4ID0gcHQycHgodmFsLmhwdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ0xlZnRNYXJnaW4nOlxuXHRcdFx0XHRjYXNlICdSaWdodE1hcmdpbic6XG5cdFx0XHRcdGNhc2UgJ1RvcE1hcmdpbic6XG5cdFx0XHRcdGNhc2UgJ0JvdHRvbU1hcmdpbic6XG5cdFx0XHRcdFx0aWYoIW91dFsnIW1hcmdpbnMnXSkgZGVmYXVsdF9tYXJnaW5zKG91dFsnIW1hcmdpbnMnXSA9IHt9KTtcblx0XHRcdFx0XHRvdXRbJyFtYXJnaW5zJ11bUm4uc2xpY2UoMCwtNikudG9Mb3dlckNhc2UoKV0gPSB2YWw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnU2V0dXAnOiAvLyBUT0RPXG5cdFx0XHRcdFx0aWYoIW91dFsnIW1hcmdpbnMnXSkgZGVmYXVsdF9tYXJnaW5zKG91dFsnIW1hcmdpbnMnXSA9IHt9KTtcblx0XHRcdFx0XHRvdXRbJyFtYXJnaW5zJ10uaGVhZGVyID0gdmFsLmhlYWRlcjtcblx0XHRcdFx0XHRvdXRbJyFtYXJnaW5zJ10uZm9vdGVyID0gdmFsLmZvb3Rlcjtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdXaW5kb3cyJzogLy8gVE9ET1xuXHRcdFx0XHRcdC8vICRGbG93SWdub3JlXG5cdFx0XHRcdFx0aWYodmFsLlJUTCkgV29ya2Jvb2suVmlld3NbMF0uUlRMID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdIZWFkZXInOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdGb290ZXInOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdIQ2VudGVyJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnVkNlbnRlcic6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1Bscyc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ0dDVyc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdMSFJlY29yZCc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdEQkNlbGwnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdFbnRFeFUyJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnU3hWaWV3JzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnU3h2ZCc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1NYVkknOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdTWFZERXgnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdTeEl2ZCc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1NYU3RyaW5nJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnU3luYyc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdBZGRpbic6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdTWERJJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnU1hMSSc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1NYRXgnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdRc2lTWFRhZyc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1NlbGVjdGlvbic6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdGZWF0JzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0ZlYXRIZHInOiBjYXNlICdGZWF0SGRyMTEnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnRmVhdHVyZTExJzogY2FzZSAnRmVhdHVyZTEyJzogY2FzZSAnTGlzdDEyJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0NvdW50cnknOiBjb3VudHJ5ID0gdmFsOyBicmVhaztcblx0XHRcdFx0Y2FzZSAnUmVjYWxjSWQnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnRHhHQ29sJzogYnJlYWs7IC8vIFRPRE86IGh0bWxpZnlcblx0XHRcdFx0Y2FzZSAnRmJpJzogY2FzZSAnRmJpMic6IGNhc2UgJ0dlbEZyYW1lJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0ZvbnQnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdYRkNSQyc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1N0eWxlJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnU3R5bGVFeHQnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdQYWxldHRlJzogcGFsZXR0ZSA9IHZhbDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1RoZW1lJzogdGhlbWVzID0gdmFsOyBicmVhaztcblx0XHRcdFx0LyogUHJvdGVjdGlvbiAqL1xuXHRcdFx0XHRjYXNlICdTY2VuYXJpb1Byb3RlY3QnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnT2JqUHJvdGVjdCc6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIENvbmRpdGlvbmFsIEZvcm1hdHRpbmcgKi9cblx0XHRcdFx0Y2FzZSAnQ29uZEZtdDEyJzogYnJlYWs7XG5cblx0XHRcdFx0LyogVGFibGUgKi9cblx0XHRcdFx0Y2FzZSAnVGFibGUnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdUYWJsZVN0eWxlcyc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1RhYmxlU3R5bGUnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdUYWJsZVN0eWxlRWxlbWVudCc6IGJyZWFrOyAvLyBUT0RPXG5cblx0XHRcdFx0LyogUGl2b3RUYWJsZSAqL1xuXHRcdFx0XHRjYXNlICdTWFN0cmVhbUlEJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnU1hWUyc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ0RDb25SZWYnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdTWEFkZGwnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdEQ29uQmluJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnRENvbk5hbWUnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdTWFBJJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnU3hGb3JtYXQnOiBicmVhazsgLy8gVE9ET1xuXHRcdFx0XHRjYXNlICdTeFNlbGVjdCc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1N4UnVsZSc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1N4RmlsdCc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1N4SXRtJzogYnJlYWs7IC8vIFRPRE9cblx0XHRcdFx0Y2FzZSAnU3hEWEYnOiBicmVhazsgLy8gVE9ET1xuXG5cdFx0XHRcdC8qIFNjZW5hcmlvIE1hbmFnZXIgKi9cblx0XHRcdFx0Y2FzZSAnU2Nlbk1hbic6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIERhdGEgQ29uc29saWRhdGlvbiAqL1xuXHRcdFx0XHRjYXNlICdEQ29uJzogYnJlYWs7XG5cblx0XHRcdFx0LyogV2F0Y2hlZCBDZWxsICovXG5cdFx0XHRcdGNhc2UgJ0NlbGxXYXRjaCc6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIFByaW50IFNldHRpbmdzICovXG5cdFx0XHRcdGNhc2UgJ1ByaW50Um93Q29sJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1ByaW50R3JpZCc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdQcmludFNpemUnOiBicmVhaztcblxuXHRcdFx0XHRjYXNlICdYQ1QnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnQ1JOJzogYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnU2NsJzoge1xuXHRcdFx0XHRcdC8vY29uc29sZS5sb2coXCJab29tIExldmVsOlwiLCB2YWxbMF0vdmFsWzFdLHZhbCk7XG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1NoZWV0RXh0Jzoge1xuXHRcdFx0XHRcdC8qIGVtcHR5ICovXG5cdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1NoZWV0RXh0T3B0aW9uYWwnOiB7XG5cdFx0XHRcdFx0LyogZW1wdHkgKi9cblx0XHRcdFx0fSBicmVhaztcblxuXHRcdFx0XHQvKiBWQkEgKi9cblx0XHRcdFx0Y2FzZSAnT2JOb01hY3Jvcyc6IHtcblx0XHRcdFx0XHQvKiBlbXB0eSAqL1xuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdPYlByb2onOiB7XG5cdFx0XHRcdFx0LyogZW1wdHkgKi9cblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnQ29kZU5hbWUnOiB7XG5pZighY3VyX3NoZWV0KSBXb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lID0gdmFsIHx8IFwiVGhpc1dvcmtib29rXCI7XG5cdFx0XHRcdFx0ZWxzZSB3c3Byb3BzLkNvZGVOYW1lID0gdmFsIHx8IHdzcHJvcHMubmFtZTtcblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0Y2FzZSAnR1VJRFR5cGVMaWInOiB7XG5cdFx0XHRcdFx0LyogZW1wdHkgKi9cblx0XHRcdFx0fSBicmVhaztcblxuXHRcdFx0XHRjYXNlICdXT3B0JzogYnJlYWs7IC8vIFRPRE86IFdURj9cblx0XHRcdFx0Y2FzZSAnUGhvbmV0aWNJbmZvJzogYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnT2xlT2JqZWN0U2l6ZSc6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIERpZmZlcmVudGlhbCBGb3JtYXR0aW5nICovXG5cdFx0XHRcdGNhc2UgJ0RYRic6IGNhc2UgJ0RYRk4nOiBjYXNlICdEWEZOMTInOiBjYXNlICdEWEZOMTJMaXN0JzogY2FzZSAnRFhGTjEyTm9DQic6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIERhdGEgVmFsaWRhdGlvbiAqL1xuXHRcdFx0XHRjYXNlICdEdic6IGNhc2UgJ0RWYWwnOiBicmVhaztcblxuXHRcdFx0XHQvKiBEYXRhIFNlcmllcyAqL1xuXHRcdFx0XHRjYXNlICdCUkFJJzogY2FzZSAnU2VyaWVzJzogY2FzZSAnU2VyaWVzVGV4dCc6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIERhdGEgQ29ubmVjdGlvbiAqL1xuXHRcdFx0XHRjYXNlICdEQ29ubic6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdEYk9yUGFyYW1RcnknOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnREJRdWVyeUV4dCc6IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ09sZURiQ29ubic6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdFeHRTdHJpbmcnOiBicmVhaztcblxuXHRcdFx0XHQvKiBGb3JtYXR0aW5nICovXG5cdFx0XHRcdGNhc2UgJ0lGbXRSZWNvcmQnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnQ29uZEZtdCc6IGNhc2UgJ0NGJzogY2FzZSAnQ0YxMic6IGNhc2UgJ0NGRXgnOiBicmVhaztcblxuXHRcdFx0XHQvKiBFeHBsaWNpdGx5IElnbm9yZWQgKi9cblx0XHRcdFx0Y2FzZSAnRXhjZWw5RmlsZSc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdVbml0cyc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdJbnRlcmZhY2VIZHInOiBjYXNlICdNbXMnOiBjYXNlICdJbnRlcmZhY2VFbmQnOiBjYXNlICdEU0YnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnQnVpbHRJbkZuR3JvdXBDb3VudCc6IC8qIDIuNC4zMCAweDBFIG9yIDB4MTAgYnV0IGV4Y2VsIDIwMTEgZ2VuZXJhdGVzIDB4MTE/ICovIGJyZWFrO1xuXHRcdFx0XHQvKiBWaWV3IFN0dWZmICovXG5cdFx0XHRcdGNhc2UgJ1dpbmRvdzEnOiBjYXNlICdIaWRlT2JqJzogY2FzZSAnR3JpZFNldCc6IGNhc2UgJ0d1dHMnOlxuXHRcdFx0XHRjYXNlICdVc2VyQlZpZXcnOiBjYXNlICdVc2VyU1ZpZXdCZWdpbic6IGNhc2UgJ1VzZXJTVmlld0VuZCc6XG5cdFx0XHRcdGNhc2UgJ1BhbmUnOiBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogc3dpdGNoKFIubikgeyAvKiBuZXN0ZWQgKi9cblx0XHRcdFx0LyogQ2hhcnQgKi9cblx0XHRcdFx0Y2FzZSAnRGF0Jzpcblx0XHRcdFx0Y2FzZSAnQmVnaW4nOiBjYXNlICdFbmQnOlxuXHRcdFx0XHRjYXNlICdTdGFydEJsb2NrJzogY2FzZSAnRW5kQmxvY2snOlxuXHRcdFx0XHRjYXNlICdGcmFtZSc6IGNhc2UgJ0FyZWEnOlxuXHRcdFx0XHRjYXNlICdBeGlzJzogY2FzZSAnQXhpc0xpbmUnOiBjYXNlICdUaWNrJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0F4ZXNVc2VkJzpcblx0XHRcdFx0Y2FzZSAnQ3J0TGF5b3V0MTInOiBjYXNlICdDcnRMYXlvdXQxMkEnOiBjYXNlICdDcnRMaW5rJzogY2FzZSAnQ3J0TGluZSc6IGNhc2UgJ0NydE1sRnJ0JzogY2FzZSAnQ3J0TWxGcnRDb250aW51ZSc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdMaW5lRm9ybWF0JzogY2FzZSAnQXJlYUZvcm1hdCc6XG5cdFx0XHRcdGNhc2UgJ0NoYXJ0JzogY2FzZSAnQ2hhcnQzZCc6IGNhc2UgJ0NoYXJ0M0RCYXJTaGFwZSc6IGNhc2UgJ0NoYXJ0Rm9ybWF0JzogY2FzZSAnQ2hhcnRGcnRJbmZvJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1Bsb3RBcmVhJzogY2FzZSAnUGxvdEdyb3d0aCc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdTZXJpZXNMaXN0JzogY2FzZSAnU2VyUGFyZW50JzogY2FzZSAnU2VyQXV4VHJlbmQnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnRGF0YUZvcm1hdCc6IGNhc2UgJ1NlclRvQ3J0JzogY2FzZSAnRm9udFgnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnQ2F0U2VyUmFuZ2UnOiBjYXNlICdBeGNFeHQnOiBjYXNlICdTZXJGbXQnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnU2h0UHJvcHMnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnRGVmYXVsdFRleHQnOiBjYXNlICdUZXh0JzogY2FzZSAnQ2F0TGFiJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0RhdGFMYWJFeHRDb250ZW50cyc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdMZWdlbmQnOiBjYXNlICdMZWdlbmRFeGNlcHRpb24nOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnUGllJzogY2FzZSAnU2NhdHRlcic6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdQaWVGb3JtYXQnOiBjYXNlICdNYXJrZXJGb3JtYXQnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnU3RhcnRPYmplY3QnOiBjYXNlICdFbmRPYmplY3QnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnQWxSdW5zJzogY2FzZSAnT2JqZWN0TGluayc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdTSUluZGV4JzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0F0dGFjaGVkTGFiZWwnOiBjYXNlICdZTXVsdCc6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIENoYXJ0IEdyb3VwICovXG5cdFx0XHRcdGNhc2UgJ0xpbmUnOiBjYXNlICdCYXInOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnU3VyZic6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIEF4aXMgR3JvdXAgKi9cblx0XHRcdFx0Y2FzZSAnQXhpc1BhcmVudCc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdQb3MnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnVmFsdWVSYW5nZSc6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIFBpdm90IENoYXJ0ICovXG5cdFx0XHRcdGNhc2UgJ1NYVmlld0V4OSc6IGJyZWFrOyAvLyBUT0RPXG5cdFx0XHRcdGNhc2UgJ1NYVmlld0xpbmsnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnUGl2b3RDaGFydEJpdHMnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnU0Jhc2VSZWYnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnVGV4dFByb3BzU3RyZWFtJzogYnJlYWs7XG5cblx0XHRcdFx0LyogQ2hhcnQgTWlzYyAqL1xuXHRcdFx0XHRjYXNlICdMbkV4dCc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdNa3JFeHQnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnQ3J0Q29vcHQnOiBicmVhaztcblxuXHRcdFx0XHQvKiBRdWVyeSBUYWJsZSAqL1xuXHRcdFx0XHRjYXNlICdRc2knOiBjYXNlICdRc2lmJzogY2FzZSAnUXNpcic6IGNhc2UgJ1FzaVNYVGFnJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1R4dFFyeSc6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIEZpbHRlciAqL1xuXHRcdFx0XHRjYXNlICdGaWx0ZXJNb2RlJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0F1dG9GaWx0ZXInOiBjYXNlICdBdXRvRmlsdGVySW5mbyc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdBdXRvRmlsdGVyMTInOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnRHJvcERvd25PYmpJZHMnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnU29ydCc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdTb3J0RGF0YSc6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIERyYXdpbmcgKi9cblx0XHRcdFx0Y2FzZSAnU2hhcGVQcm9wc1N0cmVhbSc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdNc29EcmF3aW5nJzogY2FzZSAnTXNvRHJhd2luZ0dyb3VwJzogY2FzZSAnTXNvRHJhd2luZ1NlbGVjdGlvbic6IGJyZWFrO1xuXHRcdFx0XHQvKiBQdWIgU3R1ZmYgKi9cblx0XHRcdFx0Y2FzZSAnV2ViUHViJzogY2FzZSAnQXV0b1dlYlB1Yic6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIFByaW50IFN0dWZmICovXG5cdFx0XHRcdGNhc2UgJ0hlYWRlckZvb3Rlcic6IGNhc2UgJ0hGUGljdHVyZSc6IGNhc2UgJ1BMVic6XG5cdFx0XHRcdGNhc2UgJ0hvcml6b250YWxQYWdlQnJlYWtzJzogY2FzZSAnVmVydGljYWxQYWdlQnJlYWtzJzogYnJlYWs7XG5cdFx0XHRcdC8qIEJlaGF2aW9yYWwgKi9cblx0XHRcdFx0Y2FzZSAnQmFja3VwJzogY2FzZSAnQ29tcHJlc3NQaWN0dXJlcyc6IGNhc2UgJ0NvbXBhdDEyJzogYnJlYWs7XG5cblx0XHRcdFx0LyogU2hvdWxkIG5vdCBIYXBwZW4gKi9cblx0XHRcdFx0Y2FzZSAnQ29udGludWUnOiBjYXNlICdDb250aW51ZUZydDEyJzogYnJlYWs7XG5cblx0XHRcdFx0LyogRnV0dXJlIFJlY29yZHMgKi9cblx0XHRcdFx0Y2FzZSAnRnJ0Rm9udExpc3QnOiBjYXNlICdGcnRXcmFwcGVyJzogYnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDogc3dpdGNoKFIubikgeyAvKiBuZXN0ZWQgKi9cblx0XHRcdFx0LyogQklGRjUgcmVjb3JkcyAqL1xuXHRcdFx0XHRjYXNlICdUYWJJZENvbmYnOiBjYXNlICdSYWRhcic6IGNhc2UgJ1JhZGFyQXJlYSc6IGNhc2UgJ0Ryb3BCYXInOiBjYXNlICdJbnRsJzogY2FzZSAnQ29vcmRMaXN0JzogY2FzZSAnU2VyQXV4RXJyQmFyJzogYnJlYWs7XG5cblx0XHRcdFx0LyogQklGRjItNCByZWNvcmRzICovXG5cdFx0XHRcdGNhc2UgJ0JJRkYyRk9OVENMUic6IGNhc2UgJ0JJRkYyRk1UQ05UJzogY2FzZSAnQklGRjJGT05UWFRSQSc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdCSUZGMlhGJzogY2FzZSAnQklGRjNYRic6IGNhc2UgJ0JJRkY0WEYnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnQklGRjRGTVRDTlQnOiBjYXNlICdCSUZGMlJPVyc6IGNhc2UgJ0JJRkYyV0lORE9XMic6IGJyZWFrO1xuXG5cdFx0XHRcdC8qIE1pc2NlbGxhbmVvdXMgKi9cblx0XHRcdFx0Y2FzZSAnU0NFTkFSSU8nOiBjYXNlICdEQ29uQmluJzogY2FzZSAnUGljRic6IGNhc2UgJ0RhdGFMYWJFeHQnOlxuXHRcdFx0XHRjYXNlICdMZWwnOiBjYXNlICdCb3BQb3AnOiBjYXNlICdCb3BQb3BDdXN0b20nOiBjYXNlICdSZWFsVGltZURhdGEnOlxuXHRcdFx0XHRjYXNlICdOYW1lJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0xITkdyYXBoJzogY2FzZSAnRm5Hcm91cE5hbWUnOiBjYXNlICdBZGRNZW51JzogY2FzZSAnTFByJzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0xpc3RPYmonOiBjYXNlICdMaXN0RmllbGQnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnUlJTb3J0JzogYnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0JpZ05hbWUnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnVG9vbGJhckhkcic6IGNhc2UgJ1Rvb2xiYXJFbmQnOiBicmVhaztcblx0XHRcdFx0Y2FzZSAnRERFT2JqTmFtZSc6IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdGUlRBcmNoSWQkJzogYnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6IGlmKG9wdGlvbnMuV1RGKSB0aHJvdyAnVW5yZWNvZ25pemVkIFJlY29yZCAnICsgUi5uO1xuXHRcdFx0fX19fVxuXHRcdH0gZWxzZSBibG9iLmwgKz0gbGVuZ3RoO1xuXHR9XG5cdHdiLlNoZWV0TmFtZXM9a2V5cyhEaXJlY3RvcnkpLnNvcnQoZnVuY3Rpb24oYSxiKSB7IHJldHVybiBOdW1iZXIoYSkgLSBOdW1iZXIoYik7IH0pLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gRGlyZWN0b3J5W3hdLm5hbWU7fSk7XG5cdGlmKCFvcHRpb25zLmJvb2tTaGVldHMpIHdiLlNoZWV0cz1TaGVldHM7XG5cdGlmKHdiLlNoZWV0cykgRmlsdGVyRGF0YWJhc2VzLmZvckVhY2goZnVuY3Rpb24ocixpKSB7IHdiLlNoZWV0c1t3Yi5TaGVldE5hbWVzW2ldXVsnIWF1dG9maWx0ZXInXSA9IHI7IH0pO1xuXHR3Yi5QcmVhbWJsZT1QcmVhbWJsZTtcblx0d2IuU3RyaW5ncyA9IHNzdDtcblx0d2IuU1NGID0gU1NGLmdldF90YWJsZSgpO1xuXHRpZihvcHRzLmVuYykgd2IuRW5jcnlwdGlvbiA9IG9wdHMuZW5jO1xuXHRpZih0aGVtZXMpIHdiLlRoZW1lcyA9IHRoZW1lcztcblx0d2IuTWV0YWRhdGEgPSB7fTtcblx0aWYoY291bnRyeSAhPT0gdW5kZWZpbmVkKSB3Yi5NZXRhZGF0YS5Db3VudHJ5ID0gY291bnRyeTtcblx0aWYoc3VwYm9va3MubmFtZXMubGVuZ3RoID4gMCkgV29ya2Jvb2suTmFtZXMgPSBzdXBib29rcy5uYW1lcztcblx0d2IuV29ya2Jvb2sgPSBXb3JrYm9vaztcblx0cmV0dXJuIHdiO1xufVxuXG4vKiBUT0RPOiBXVEYgKi9cbmZ1bmN0aW9uIHBhcnNlX3Byb3BzKGNmYiwgcHJvcHMsIG8pIHtcblx0LyogW01TLU9TSEFSRURdIDIuMy4zLjIuMiBEb2N1bWVudCBTdW1tYXJ5IEluZm9ybWF0aW9uIFByb3BlcnR5IFNldCAqL1xuXHR2YXIgRFNJID0gQ0ZCLmZpbmQoY2ZiLCAnIURvY3VtZW50U3VtbWFyeUluZm9ybWF0aW9uJyk7XG5cdGlmKERTSSkgdHJ5IHtcblx0XHR2YXIgRG9jU3VtbWFyeSA9IHBhcnNlX1Byb3BlcnR5U2V0U3RyZWFtKERTSSwgRG9jU3VtbWFyeVBJRERTSSk7XG5cdFx0Zm9yKHZhciBkIGluIERvY1N1bW1hcnkpIHByb3BzW2RdID0gRG9jU3VtbWFyeVtkXTtcblx0fSBjYXRjaChlKSB7aWYoby5XVEYpIHRocm93IGU7LyogZW1wdHkgKi99XG5cblx0LyogW01TLU9TSEFSRURdIDIuMy4zLjIuMSBTdW1tYXJ5IEluZm9ybWF0aW9uIFByb3BlcnR5IFNldCovXG5cdHZhciBTSSA9IENGQi5maW5kKGNmYiwgJyFTdW1tYXJ5SW5mb3JtYXRpb24nKTtcblx0aWYoU0kpIHRyeSB7XG5cdFx0dmFyIFN1bW1hcnkgPSBwYXJzZV9Qcm9wZXJ0eVNldFN0cmVhbShTSSwgU3VtbWFyeVBJRFNJKTtcblx0XHRmb3IodmFyIHMgaW4gU3VtbWFyeSkgaWYocHJvcHNbc10gPT0gbnVsbCkgcHJvcHNbc10gPSBTdW1tYXJ5W3NdO1xuXHR9IGNhdGNoKGUpIHtpZihvLldURikgdGhyb3cgZTsvKiBlbXB0eSAqL31cbn1cblxuZnVuY3Rpb24gcGFyc2VfeGxzY2ZiKGNmYiwgb3B0aW9ucykge1xuaWYoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbmZpeF9yZWFkX29wdHMob3B0aW9ucyk7XG5yZXNldF9jcCgpO1xuaWYob3B0aW9ucy5jb2RlcGFnZSkgc2V0X2Fuc2kob3B0aW9ucy5jb2RlcGFnZSk7XG52YXIgQ29tcE9iaiwgV0I7XG5pZihjZmIuRnVsbFBhdGhzKSB7XG5cdGlmKENGQi5maW5kKGNmYiwgJy9lbmNyeXB0aW9uJykpIHRocm93IG5ldyBFcnJvcihcIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkXCIpO1xuXHRDb21wT2JqID0gQ0ZCLmZpbmQoY2ZiLCAnIUNvbXBPYmonKTtcblx0V0IgPSBDRkIuZmluZChjZmIsICcvV29ya2Jvb2snKSB8fCBDRkIuZmluZChjZmIsICcvQm9vaycpO1xufSBlbHNlIHtcblx0c3dpdGNoKG9wdGlvbnMudHlwZSkge1xuXHRcdGNhc2UgJ2Jhc2U2NCc6IGNmYiA9IHMyYShCYXNlNjQuZGVjb2RlKGNmYikpOyBicmVhaztcblx0XHRjYXNlICdiaW5hcnknOiBjZmIgPSBzMmEoY2ZiKTsgYnJlYWs7XG5cdFx0Y2FzZSAnYnVmZmVyJzogYnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXknOiBpZighQXJyYXkuaXNBcnJheShjZmIpKSBjZmIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjZmIpOyBicmVhaztcblx0fVxuXHRwcmVwX2Jsb2IoY2ZiLCAwKTtcblx0V0IgPSAoe2NvbnRlbnQ6IGNmYn0pO1xufVxudmFyIFdvcmtib29rUDtcblxudmFyIF9kYXRhO1xuaWYoQ29tcE9iaikgcGFyc2VfY29tcG9iaihDb21wT2JqKTtcbmlmKG9wdGlvbnMuYm9va1Byb3BzICYmICFvcHRpb25zLmJvb2tTaGVldHMpIFdvcmtib29rUCA9ICh7fSk7XG5lbHNlIHtcblx0dmFyIFQgPSBoYXNfYnVmID8gJ2J1ZmZlcicgOiAnYXJyYXknO1xuXHRpZihXQiAmJiBXQi5jb250ZW50KSBXb3JrYm9va1AgPSBwYXJzZV93b3JrYm9vayhXQi5jb250ZW50LCBvcHRpb25zKTtcblx0LyogUXVhdHRybyBQcm8gNy04ICovXG5cdGVsc2UgaWYoKF9kYXRhPUNGQi5maW5kKGNmYiwgJ1BlcmZlY3RPZmZpY2VfTUFJTicpKSAmJiBfZGF0YS5jb250ZW50KSBXb3JrYm9va1AgPSBXS18udG9fd29ya2Jvb2soX2RhdGEuY29udGVudCwgKG9wdGlvbnMudHlwZSA9IFQsIG9wdGlvbnMpKTtcblx0LyogUXVhdHRybyBQcm8gOSAqL1xuXHRlbHNlIGlmKChfZGF0YT1DRkIuZmluZChjZmIsICdOYXRpdmVDb250ZW50X01BSU4nKSkgJiYgX2RhdGEuY29udGVudCkgV29ya2Jvb2tQID0gV0tfLnRvX3dvcmtib29rKF9kYXRhLmNvbnRlbnQsIChvcHRpb25zLnR5cGUgPSBULCBvcHRpb25zKSk7XG5cdGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgV29ya2Jvb2sgc3RyZWFtXCIpO1xuXHRpZihvcHRpb25zLmJvb2tWQkEgJiYgY2ZiLkZ1bGxQYXRocyAmJiBDRkIuZmluZChjZmIsICcvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGlyJykpIFdvcmtib29rUC52YmFyYXcgPSBtYWtlX3ZiYV94bHMoY2ZiKTtcbn1cblxudmFyIHByb3BzID0ge307XG5pZihjZmIuRnVsbFBhdGhzKSBwYXJzZV9wcm9wcyhjZmIsIHByb3BzLCBvcHRpb25zKTtcblxuV29ya2Jvb2tQLlByb3BzID0gV29ya2Jvb2tQLkN1c3Rwcm9wcyA9IHByb3BzOyAvKiBUT0RPOiBzcGxpdCB1cCBwcm9wZXJ0aWVzICovXG5pZihvcHRpb25zLmJvb2tGaWxlcykgV29ya2Jvb2tQLmNmYiA9IGNmYjtcbi8qV29ya2Jvb2tQLkNvbXBPYmpQID0gQ29tcE9ialA7IC8vIFRPRE86IHN0b3JhZ2U/ICovXG5yZXR1cm4gV29ya2Jvb2tQO1xufVxuXG5cbmZ1bmN0aW9uIHdyaXRlX3hsc2NmYih3Yiwgb3B0cykge1xuXHR2YXIgbyA9IG9wdHMgfHwge307XG5cdHZhciBjZmIgPSBDRkIudXRpbHMuY2ZiX25ldyh7cm9vdDpcIlJcIn0pO1xuXHR2YXIgd2JwYXRoID0gXCIvV29ya2Jvb2tcIjtcblx0c3dpdGNoKG8uYm9va1R5cGUgfHwgXCJ4bHNcIikge1xuXHRcdGNhc2UgXCJ4bHNcIjogby5ib29rVHlwZSA9IFwiYmlmZjhcIjtcblx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0Y2FzZSBcInhsYVwiOiBpZighby5ib29rVHlwZSkgby5ib29rVHlwZSA9IFwieGxhXCI7XG5cdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdGNhc2UgXCJiaWZmOFwiOiB3YnBhdGggPSBcIi9Xb3JrYm9va1wiOyBvLmJpZmYgPSA4OyBicmVhaztcblx0XHRjYXNlIFwiYmlmZjVcIjogd2JwYXRoID0gXCIvQm9va1wiOyBvLmJpZmYgPSA1OyBicmVhaztcblx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHR5cGUgXCIgKyBvLmJvb2tUeXBlICsgXCIgZm9yIFhMUyBDRkJcIik7XG5cdH1cblx0Q0ZCLnV0aWxzLmNmYl9hZGQoY2ZiLCB3YnBhdGgsIHdyaXRlX2JpZmZfYnVmKHdiLCBvKSk7XG5cdC8vIFRPRE86IFNJLCBEU0ksIENPXG5cdGlmKG8uYmlmZiA9PSA4ICYmIHdiLnZiYXJhdykgZmlsbF92YmFfeGxzKGNmYiwgQ0ZCLnJlYWQod2IudmJhcmF3LCB7dHlwZTogdHlwZW9mIHdiLnZiYXJhdyA9PSBcInN0cmluZ1wiID8gXCJiaW5hcnlcIiA6IFwiYnVmZmVyXCJ9KSk7XG5cdHJldHVybiBjZmI7XG59XG4vKiBbTVMtWExTQl0gMi4zIFJlY29yZCBFbnVtZXJhdGlvbiAqL1xudmFyIFhMU0JSZWNvcmRFbnVtID0ge1xuMHgwMDAwOiB7IG46XCJCcnRSb3dIZHJcIiwgZjpwYXJzZV9CcnRSb3dIZHIgfSxcbjB4MDAwMTogeyBuOlwiQnJ0Q2VsbEJsYW5rXCIsIGY6cGFyc2VfQnJ0Q2VsbEJsYW5rIH0sXG4weDAwMDI6IHsgbjpcIkJydENlbGxSa1wiLCBmOnBhcnNlX0JydENlbGxSayB9LFxuMHgwMDAzOiB7IG46XCJCcnRDZWxsRXJyb3JcIiwgZjpwYXJzZV9CcnRDZWxsRXJyb3IgfSxcbjB4MDAwNDogeyBuOlwiQnJ0Q2VsbEJvb2xcIiwgZjpwYXJzZV9CcnRDZWxsQm9vbCB9LFxuMHgwMDA1OiB7IG46XCJCcnRDZWxsUmVhbFwiLCBmOnBhcnNlX0JydENlbGxSZWFsIH0sXG4weDAwMDY6IHsgbjpcIkJydENlbGxTdFwiLCBmOnBhcnNlX0JydENlbGxTdCB9LFxuMHgwMDA3OiB7IG46XCJCcnRDZWxsSXNzdFwiLCBmOnBhcnNlX0JydENlbGxJc3N0IH0sXG4weDAwMDg6IHsgbjpcIkJydEZtbGFTdHJpbmdcIiwgZjpwYXJzZV9CcnRGbWxhU3RyaW5nIH0sXG4weDAwMDk6IHsgbjpcIkJydEZtbGFOdW1cIiwgZjpwYXJzZV9CcnRGbWxhTnVtIH0sXG4weDAwMEE6IHsgbjpcIkJydEZtbGFCb29sXCIsIGY6cGFyc2VfQnJ0Rm1sYUJvb2wgfSxcbjB4MDAwQjogeyBuOlwiQnJ0Rm1sYUVycm9yXCIsIGY6cGFyc2VfQnJ0Rm1sYUVycm9yIH0sXG4weDAwMTA6IHsgbjpcIkJydEZSVEFyY2hJRCRcIiwgZjpwYXJzZV9CcnRGUlRBcmNoSUQkIH0sXG4weDAwMTM6IHsgbjpcIkJydFNTVEl0ZW1cIiwgZjpwYXJzZV9SaWNoU3RyIH0sXG4weDAwMTQ6IHsgbjpcIkJydFBDRElNaXNzaW5nXCIgfSxcbjB4MDAxNTogeyBuOlwiQnJ0UENESU51bWJlclwiIH0sXG4weDAwMTY6IHsgbjpcIkJydFBDRElCb29sZWFuXCIgfSxcbjB4MDAxNzogeyBuOlwiQnJ0UENESUVycm9yXCIgfSxcbjB4MDAxODogeyBuOlwiQnJ0UENESVN0cmluZ1wiIH0sXG4weDAwMTk6IHsgbjpcIkJydFBDRElEYXRldGltZVwiIH0sXG4weDAwMUE6IHsgbjpcIkJydFBDRElJbmRleFwiIH0sXG4weDAwMUI6IHsgbjpcIkJydFBDRElBTWlzc2luZ1wiIH0sXG4weDAwMUM6IHsgbjpcIkJydFBDRElBTnVtYmVyXCIgfSxcbjB4MDAxRDogeyBuOlwiQnJ0UENESUFCb29sZWFuXCIgfSxcbjB4MDAxRTogeyBuOlwiQnJ0UENESUFFcnJvclwiIH0sXG4weDAwMUY6IHsgbjpcIkJydFBDRElBU3RyaW5nXCIgfSxcbjB4MDAyMDogeyBuOlwiQnJ0UENESUFEYXRldGltZVwiIH0sXG4weDAwMjE6IHsgbjpcIkJydFBDUlJlY29yZFwiIH0sXG4weDAwMjI6IHsgbjpcIkJydFBDUlJlY29yZER0XCIgfSxcbjB4MDAyMzogeyBuOlwiQnJ0RlJUQmVnaW5cIiB9LFxuMHgwMDI0OiB7IG46XCJCcnRGUlRFbmRcIiB9LFxuMHgwMDI1OiB7IG46XCJCcnRBQ0JlZ2luXCIgfSxcbjB4MDAyNjogeyBuOlwiQnJ0QUNFbmRcIiB9LFxuMHgwMDI3OiB7IG46XCJCcnROYW1lXCIsIGY6cGFyc2VfQnJ0TmFtZSB9LFxuMHgwMDI4OiB7IG46XCJCcnRJbmRleFJvd0Jsb2NrXCIgfSxcbjB4MDAyQTogeyBuOlwiQnJ0SW5kZXhCbG9ja1wiIH0sXG4weDAwMkI6IHsgbjpcIkJydEZvbnRcIiwgZjpwYXJzZV9CcnRGb250IH0sXG4weDAwMkM6IHsgbjpcIkJydEZtdFwiLCBmOnBhcnNlX0JydEZtdCB9LFxuMHgwMDJEOiB7IG46XCJCcnRGaWxsXCIsIGY6cGFyc2VfQnJ0RmlsbCB9LFxuMHgwMDJFOiB7IG46XCJCcnRCb3JkZXJcIiwgZjpwYXJzZV9CcnRCb3JkZXIgfSxcbjB4MDAyRjogeyBuOlwiQnJ0WEZcIiwgZjpwYXJzZV9CcnRYRiB9LFxuMHgwMDMwOiB7IG46XCJCcnRTdHlsZVwiIH0sXG4weDAwMzE6IHsgbjpcIkJydENlbGxNZXRhXCIgfSxcbjB4MDAzMjogeyBuOlwiQnJ0VmFsdWVNZXRhXCIgfSxcbjB4MDAzMzogeyBuOlwiQnJ0TWRiXCIgfSxcbjB4MDAzNDogeyBuOlwiQnJ0QmVnaW5GbWRcIiB9LFxuMHgwMDM1OiB7IG46XCJCcnRFbmRGbWRcIiB9LFxuMHgwMDM2OiB7IG46XCJCcnRCZWdpbk1keFwiIH0sXG4weDAwMzc6IHsgbjpcIkJydEVuZE1keFwiIH0sXG4weDAwMzg6IHsgbjpcIkJydEJlZ2luTWR4VHVwbGVcIiB9LFxuMHgwMDM5OiB7IG46XCJCcnRFbmRNZHhUdXBsZVwiIH0sXG4weDAwM0E6IHsgbjpcIkJydE1keE1icklzdHJcIiB9LFxuMHgwMDNCOiB7IG46XCJCcnRTdHJcIiB9LFxuMHgwMDNDOiB7IG46XCJCcnRDb2xJbmZvXCIsIGY6cGFyc2VfQ29sSW5mbyB9LFxuMHgwMDNFOiB7IG46XCJCcnRDZWxsUlN0cmluZ1wiIH0sXG4weDAwM0Y6IHsgbjpcIkJydENhbGNDaGFpbkl0ZW0kXCIsIGY6cGFyc2VfQnJ0Q2FsY0NoYWluSXRlbSQgfSxcbjB4MDA0MDogeyBuOlwiQnJ0RFZhbFwiIH0sXG4weDAwNDE6IHsgbjpcIkJydFN4dmNlbGxOdW1cIiB9LFxuMHgwMDQyOiB7IG46XCJCcnRTeHZjZWxsU3RyXCIgfSxcbjB4MDA0MzogeyBuOlwiQnJ0U3h2Y2VsbEJvb2xcIiB9LFxuMHgwMDQ0OiB7IG46XCJCcnRTeHZjZWxsRXJyXCIgfSxcbjB4MDA0NTogeyBuOlwiQnJ0U3h2Y2VsbERhdGVcIiB9LFxuMHgwMDQ2OiB7IG46XCJCcnRTeHZjZWxsTmlsXCIgfSxcbjB4MDA4MDogeyBuOlwiQnJ0RmlsZVZlcnNpb25cIiB9LFxuMHgwMDgxOiB7IG46XCJCcnRCZWdpblNoZWV0XCIgfSxcbjB4MDA4MjogeyBuOlwiQnJ0RW5kU2hlZXRcIiB9LFxuMHgwMDgzOiB7IG46XCJCcnRCZWdpbkJvb2tcIiwgZjpwYXJzZW5vb3AsIHA6MCB9LFxuMHgwMDg0OiB7IG46XCJCcnRFbmRCb29rXCIgfSxcbjB4MDA4NTogeyBuOlwiQnJ0QmVnaW5Xc1ZpZXdzXCIgfSxcbjB4MDA4NjogeyBuOlwiQnJ0RW5kV3NWaWV3c1wiIH0sXG4weDAwODc6IHsgbjpcIkJydEJlZ2luQm9va1ZpZXdzXCIgfSxcbjB4MDA4ODogeyBuOlwiQnJ0RW5kQm9va1ZpZXdzXCIgfSxcbjB4MDA4OTogeyBuOlwiQnJ0QmVnaW5Xc1ZpZXdcIiwgZjpwYXJzZV9CcnRCZWdpbldzVmlldyB9LFxuMHgwMDhBOiB7IG46XCJCcnRFbmRXc1ZpZXdcIiB9LFxuMHgwMDhCOiB7IG46XCJCcnRCZWdpbkNzVmlld3NcIiB9LFxuMHgwMDhDOiB7IG46XCJCcnRFbmRDc1ZpZXdzXCIgfSxcbjB4MDA4RDogeyBuOlwiQnJ0QmVnaW5Dc1ZpZXdcIiB9LFxuMHgwMDhFOiB7IG46XCJCcnRFbmRDc1ZpZXdcIiB9LFxuMHgwMDhGOiB7IG46XCJCcnRCZWdpbkJ1bmRsZVNoc1wiIH0sXG4weDAwOTA6IHsgbjpcIkJydEVuZEJ1bmRsZVNoc1wiIH0sXG4weDAwOTE6IHsgbjpcIkJydEJlZ2luU2hlZXREYXRhXCIgfSxcbjB4MDA5MjogeyBuOlwiQnJ0RW5kU2hlZXREYXRhXCIgfSxcbjB4MDA5MzogeyBuOlwiQnJ0V3NQcm9wXCIsIGY6cGFyc2VfQnJ0V3NQcm9wIH0sXG4weDAwOTQ6IHsgbjpcIkJydFdzRGltXCIsIGY6cGFyc2VfQnJ0V3NEaW0sIHA6MTYgfSxcbjB4MDA5NzogeyBuOlwiQnJ0UGFuZVwiIH0sXG4weDAwOTg6IHsgbjpcIkJydFNlbFwiIH0sXG4weDAwOTk6IHsgbjpcIkJydFdiUHJvcFwiLCBmOnBhcnNlX0JydFdiUHJvcCB9LFxuMHgwMDlBOiB7IG46XCJCcnRXYkZhY3RvaWRcIiB9LFxuMHgwMDlCOiB7IG46XCJCcnRGaWxlUmVjb3ZlclwiIH0sXG4weDAwOUM6IHsgbjpcIkJydEJ1bmRsZVNoXCIsIGY6cGFyc2VfQnJ0QnVuZGxlU2ggfSxcbjB4MDA5RDogeyBuOlwiQnJ0Q2FsY1Byb3BcIiB9LFxuMHgwMDlFOiB7IG46XCJCcnRCb29rVmlld1wiIH0sXG4weDAwOUY6IHsgbjpcIkJydEJlZ2luU3N0XCIsIGY6cGFyc2VfQnJ0QmVnaW5Tc3QgfSxcbjB4MDBBMDogeyBuOlwiQnJ0RW5kU3N0XCIgfSxcbjB4MDBBMTogeyBuOlwiQnJ0QmVnaW5BRmlsdGVyXCIsIGY6cGFyc2VfVW5jaGVja2VkUmZYIH0sXG4weDAwQTI6IHsgbjpcIkJydEVuZEFGaWx0ZXJcIiB9LFxuMHgwMEEzOiB7IG46XCJCcnRCZWdpbkZpbHRlckNvbHVtblwiIH0sXG4weDAwQTQ6IHsgbjpcIkJydEVuZEZpbHRlckNvbHVtblwiIH0sXG4weDAwQTU6IHsgbjpcIkJydEJlZ2luRmlsdGVyc1wiIH0sXG4weDAwQTY6IHsgbjpcIkJydEVuZEZpbHRlcnNcIiB9LFxuMHgwMEE3OiB7IG46XCJCcnRGaWx0ZXJcIiB9LFxuMHgwMEE4OiB7IG46XCJCcnRDb2xvckZpbHRlclwiIH0sXG4weDAwQTk6IHsgbjpcIkJydEljb25GaWx0ZXJcIiB9LFxuMHgwMEFBOiB7IG46XCJCcnRUb3AxMEZpbHRlclwiIH0sXG4weDAwQUI6IHsgbjpcIkJydER5bmFtaWNGaWx0ZXJcIiB9LFxuMHgwMEFDOiB7IG46XCJCcnRCZWdpbkN1c3RvbUZpbHRlcnNcIiB9LFxuMHgwMEFEOiB7IG46XCJCcnRFbmRDdXN0b21GaWx0ZXJzXCIgfSxcbjB4MDBBRTogeyBuOlwiQnJ0Q3VzdG9tRmlsdGVyXCIgfSxcbjB4MDBBRjogeyBuOlwiQnJ0QUZpbHRlckRhdGVHcm91cEl0ZW1cIiB9LFxuMHgwMEIwOiB7IG46XCJCcnRNZXJnZUNlbGxcIiwgZjpwYXJzZV9CcnRNZXJnZUNlbGwgfSxcbjB4MDBCMTogeyBuOlwiQnJ0QmVnaW5NZXJnZUNlbGxzXCIgfSxcbjB4MDBCMjogeyBuOlwiQnJ0RW5kTWVyZ2VDZWxsc1wiIH0sXG4weDAwQjM6IHsgbjpcIkJydEJlZ2luUGl2b3RDYWNoZURlZlwiIH0sXG4weDAwQjQ6IHsgbjpcIkJydEVuZFBpdm90Q2FjaGVEZWZcIiB9LFxuMHgwMEI1OiB7IG46XCJCcnRCZWdpblBDREZpZWxkc1wiIH0sXG4weDAwQjY6IHsgbjpcIkJydEVuZFBDREZpZWxkc1wiIH0sXG4weDAwQjc6IHsgbjpcIkJydEJlZ2luUENERmllbGRcIiB9LFxuMHgwMEI4OiB7IG46XCJCcnRFbmRQQ0RGaWVsZFwiIH0sXG4weDAwQjk6IHsgbjpcIkJydEJlZ2luUENEU291cmNlXCIgfSxcbjB4MDBCQTogeyBuOlwiQnJ0RW5kUENEU291cmNlXCIgfSxcbjB4MDBCQjogeyBuOlwiQnJ0QmVnaW5QQ0RTUmFuZ2VcIiB9LFxuMHgwMEJDOiB7IG46XCJCcnRFbmRQQ0RTUmFuZ2VcIiB9LFxuMHgwMEJEOiB7IG46XCJCcnRCZWdpblBDREZBdGJsXCIgfSxcbjB4MDBCRTogeyBuOlwiQnJ0RW5kUENERkF0YmxcIiB9LFxuMHgwMEJGOiB7IG46XCJCcnRCZWdpblBDRElSdW5cIiB9LFxuMHgwMEMwOiB7IG46XCJCcnRFbmRQQ0RJUnVuXCIgfSxcbjB4MDBDMTogeyBuOlwiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3Jkc1wiIH0sXG4weDAwQzI6IHsgbjpcIkJydEVuZFBpdm90Q2FjaGVSZWNvcmRzXCIgfSxcbjB4MDBDMzogeyBuOlwiQnJ0QmVnaW5QQ0RIaWVyYXJjaGllc1wiIH0sXG4weDAwQzQ6IHsgbjpcIkJydEVuZFBDREhpZXJhcmNoaWVzXCIgfSxcbjB4MDBDNTogeyBuOlwiQnJ0QmVnaW5QQ0RIaWVyYXJjaHlcIiB9LFxuMHgwMEM2OiB7IG46XCJCcnRFbmRQQ0RIaWVyYXJjaHlcIiB9LFxuMHgwMEM3OiB7IG46XCJCcnRCZWdpblBDREhGaWVsZHNVc2FnZVwiIH0sXG4weDAwQzg6IHsgbjpcIkJydEVuZFBDREhGaWVsZHNVc2FnZVwiIH0sXG4weDAwQzk6IHsgbjpcIkJydEJlZ2luRXh0Q29ubmVjdGlvblwiIH0sXG4weDAwQ0E6IHsgbjpcIkJydEVuZEV4dENvbm5lY3Rpb25cIiB9LFxuMHgwMENCOiB7IG46XCJCcnRCZWdpbkVDRGJQcm9wc1wiIH0sXG4weDAwQ0M6IHsgbjpcIkJydEVuZEVDRGJQcm9wc1wiIH0sXG4weDAwQ0Q6IHsgbjpcIkJydEJlZ2luRUNPbGFwUHJvcHNcIiB9LFxuMHgwMENFOiB7IG46XCJCcnRFbmRFQ09sYXBQcm9wc1wiIH0sXG4weDAwQ0Y6IHsgbjpcIkJydEJlZ2luUENEU0NvbnNvbFwiIH0sXG4weDAwRDA6IHsgbjpcIkJydEVuZFBDRFNDb25zb2xcIiB9LFxuMHgwMEQxOiB7IG46XCJCcnRCZWdpblBDRFNDUGFnZXNcIiB9LFxuMHgwMEQyOiB7IG46XCJCcnRFbmRQQ0RTQ1BhZ2VzXCIgfSxcbjB4MDBEMzogeyBuOlwiQnJ0QmVnaW5QQ0RTQ1BhZ2VcIiB9LFxuMHgwMEQ0OiB7IG46XCJCcnRFbmRQQ0RTQ1BhZ2VcIiB9LFxuMHgwMEQ1OiB7IG46XCJCcnRCZWdpblBDRFNDUEl0ZW1cIiB9LFxuMHgwMEQ2OiB7IG46XCJCcnRFbmRQQ0RTQ1BJdGVtXCIgfSxcbjB4MDBENzogeyBuOlwiQnJ0QmVnaW5QQ0RTQ1NldHNcIiB9LFxuMHgwMEQ4OiB7IG46XCJCcnRFbmRQQ0RTQ1NldHNcIiB9LFxuMHgwMEQ5OiB7IG46XCJCcnRCZWdpblBDRFNDU2V0XCIgfSxcbjB4MDBEQTogeyBuOlwiQnJ0RW5kUENEU0NTZXRcIiB9LFxuMHgwMERCOiB7IG46XCJCcnRCZWdpblBDREZHcm91cFwiIH0sXG4weDAwREM6IHsgbjpcIkJydEVuZFBDREZHcm91cFwiIH0sXG4weDAwREQ6IHsgbjpcIkJydEJlZ2luUENERkdJdGVtc1wiIH0sXG4weDAwREU6IHsgbjpcIkJydEVuZFBDREZHSXRlbXNcIiB9LFxuMHgwMERGOiB7IG46XCJCcnRCZWdpblBDREZHUmFuZ2VcIiB9LFxuMHgwMEUwOiB7IG46XCJCcnRFbmRQQ0RGR1JhbmdlXCIgfSxcbjB4MDBFMTogeyBuOlwiQnJ0QmVnaW5QQ0RGR0Rpc2NyZXRlXCIgfSxcbjB4MDBFMjogeyBuOlwiQnJ0RW5kUENERkdEaXNjcmV0ZVwiIH0sXG4weDAwRTM6IHsgbjpcIkJydEJlZ2luUENEU0RUdXBsZUNhY2hlXCIgfSxcbjB4MDBFNDogeyBuOlwiQnJ0RW5kUENEU0RUdXBsZUNhY2hlXCIgfSxcbjB4MDBFNTogeyBuOlwiQnJ0QmVnaW5QQ0RTRFRDRW50cmllc1wiIH0sXG4weDAwRTY6IHsgbjpcIkJydEVuZFBDRFNEVENFbnRyaWVzXCIgfSxcbjB4MDBFNzogeyBuOlwiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNcIiB9LFxuMHgwMEU4OiB7IG46XCJCcnRFbmRQQ0RTRFRDRU1lbWJlcnNcIiB9LFxuMHgwMEU5OiB7IG46XCJCcnRCZWdpblBDRFNEVENFTWVtYmVyXCIgfSxcbjB4MDBFQTogeyBuOlwiQnJ0RW5kUENEU0RUQ0VNZW1iZXJcIiB9LFxuMHgwMEVCOiB7IG46XCJCcnRCZWdpblBDRFNEVENRdWVyaWVzXCIgfSxcbjB4MDBFQzogeyBuOlwiQnJ0RW5kUENEU0RUQ1F1ZXJpZXNcIiB9LFxuMHgwMEVEOiB7IG46XCJCcnRCZWdpblBDRFNEVENRdWVyeVwiIH0sXG4weDAwRUU6IHsgbjpcIkJydEVuZFBDRFNEVENRdWVyeVwiIH0sXG4weDAwRUY6IHsgbjpcIkJydEJlZ2luUENEU0RUQ1NldHNcIiB9LFxuMHgwMEYwOiB7IG46XCJCcnRFbmRQQ0RTRFRDU2V0c1wiIH0sXG4weDAwRjE6IHsgbjpcIkJydEJlZ2luUENEU0RUQ1NldFwiIH0sXG4weDAwRjI6IHsgbjpcIkJydEVuZFBDRFNEVENTZXRcIiB9LFxuMHgwMEYzOiB7IG46XCJCcnRCZWdpblBDRENhbGNJdGVtc1wiIH0sXG4weDAwRjQ6IHsgbjpcIkJydEVuZFBDRENhbGNJdGVtc1wiIH0sXG4weDAwRjU6IHsgbjpcIkJydEJlZ2luUENEQ2FsY0l0ZW1cIiB9LFxuMHgwMEY2OiB7IG46XCJCcnRFbmRQQ0RDYWxjSXRlbVwiIH0sXG4weDAwRjc6IHsgbjpcIkJydEJlZ2luUFJ1bGVcIiB9LFxuMHgwMEY4OiB7IG46XCJCcnRFbmRQUnVsZVwiIH0sXG4weDAwRjk6IHsgbjpcIkJydEJlZ2luUFJGaWx0ZXJzXCIgfSxcbjB4MDBGQTogeyBuOlwiQnJ0RW5kUFJGaWx0ZXJzXCIgfSxcbjB4MDBGQjogeyBuOlwiQnJ0QmVnaW5QUkZpbHRlclwiIH0sXG4weDAwRkM6IHsgbjpcIkJydEVuZFBSRmlsdGVyXCIgfSxcbjB4MDBGRDogeyBuOlwiQnJ0QmVnaW5QTmFtZXNcIiB9LFxuMHgwMEZFOiB7IG46XCJCcnRFbmRQTmFtZXNcIiB9LFxuMHgwMEZGOiB7IG46XCJCcnRCZWdpblBOYW1lXCIgfSxcbjB4MDEwMDogeyBuOlwiQnJ0RW5kUE5hbWVcIiB9LFxuMHgwMTAxOiB7IG46XCJCcnRCZWdpblBOUGFpcnNcIiB9LFxuMHgwMTAyOiB7IG46XCJCcnRFbmRQTlBhaXJzXCIgfSxcbjB4MDEwMzogeyBuOlwiQnJ0QmVnaW5QTlBhaXJcIiB9LFxuMHgwMTA0OiB7IG46XCJCcnRFbmRQTlBhaXJcIiB9LFxuMHgwMTA1OiB7IG46XCJCcnRCZWdpbkVDV2ViUHJvcHNcIiB9LFxuMHgwMTA2OiB7IG46XCJCcnRFbmRFQ1dlYlByb3BzXCIgfSxcbjB4MDEwNzogeyBuOlwiQnJ0QmVnaW5FY1dwVGFibGVzXCIgfSxcbjB4MDEwODogeyBuOlwiQnJ0RW5kRUNXUFRhYmxlc1wiIH0sXG4weDAxMDk6IHsgbjpcIkJydEJlZ2luRUNQYXJhbXNcIiB9LFxuMHgwMTBBOiB7IG46XCJCcnRFbmRFQ1BhcmFtc1wiIH0sXG4weDAxMEI6IHsgbjpcIkJydEJlZ2luRUNQYXJhbVwiIH0sXG4weDAxMEM6IHsgbjpcIkJydEVuZEVDUGFyYW1cIiB9LFxuMHgwMTBEOiB7IG46XCJCcnRCZWdpblBDREtQSXNcIiB9LFxuMHgwMTBFOiB7IG46XCJCcnRFbmRQQ0RLUElzXCIgfSxcbjB4MDEwRjogeyBuOlwiQnJ0QmVnaW5QQ0RLUElcIiB9LFxuMHgwMTEwOiB7IG46XCJCcnRFbmRQQ0RLUElcIiB9LFxuMHgwMTExOiB7IG46XCJCcnRCZWdpbkRpbXNcIiB9LFxuMHgwMTEyOiB7IG46XCJCcnRFbmREaW1zXCIgfSxcbjB4MDExMzogeyBuOlwiQnJ0QmVnaW5EaW1cIiB9LFxuMHgwMTE0OiB7IG46XCJCcnRFbmREaW1cIiB9LFxuMHgwMTE1OiB7IG46XCJCcnRJbmRleFBhcnRFbmRcIiB9LFxuMHgwMTE2OiB7IG46XCJCcnRCZWdpblN0eWxlU2hlZXRcIiB9LFxuMHgwMTE3OiB7IG46XCJCcnRFbmRTdHlsZVNoZWV0XCIgfSxcbjB4MDExODogeyBuOlwiQnJ0QmVnaW5TWFZpZXdcIiB9LFxuMHgwMTE5OiB7IG46XCJCcnRFbmRTWFZJXCIgfSxcbjB4MDExQTogeyBuOlwiQnJ0QmVnaW5TWFZJXCIgfSxcbjB4MDExQjogeyBuOlwiQnJ0QmVnaW5TWFZJc1wiIH0sXG4weDAxMUM6IHsgbjpcIkJydEVuZFNYVklzXCIgfSxcbjB4MDExRDogeyBuOlwiQnJ0QmVnaW5TWFZEXCIgfSxcbjB4MDExRTogeyBuOlwiQnJ0RW5kU1hWRFwiIH0sXG4weDAxMUY6IHsgbjpcIkJydEJlZ2luU1hWRHNcIiB9LFxuMHgwMTIwOiB7IG46XCJCcnRFbmRTWFZEc1wiIH0sXG4weDAxMjE6IHsgbjpcIkJydEJlZ2luU1hQSVwiIH0sXG4weDAxMjI6IHsgbjpcIkJydEVuZFNYUElcIiB9LFxuMHgwMTIzOiB7IG46XCJCcnRCZWdpblNYUElzXCIgfSxcbjB4MDEyNDogeyBuOlwiQnJ0RW5kU1hQSXNcIiB9LFxuMHgwMTI1OiB7IG46XCJCcnRCZWdpblNYRElcIiB9LFxuMHgwMTI2OiB7IG46XCJCcnRFbmRTWERJXCIgfSxcbjB4MDEyNzogeyBuOlwiQnJ0QmVnaW5TWERJc1wiIH0sXG4weDAxMjg6IHsgbjpcIkJydEVuZFNYRElzXCIgfSxcbjB4MDEyOTogeyBuOlwiQnJ0QmVnaW5TWExJXCIgfSxcbjB4MDEyQTogeyBuOlwiQnJ0RW5kU1hMSVwiIH0sXG4weDAxMkI6IHsgbjpcIkJydEJlZ2luU1hMSVJ3c1wiIH0sXG4weDAxMkM6IHsgbjpcIkJydEVuZFNYTElSd3NcIiB9LFxuMHgwMTJEOiB7IG46XCJCcnRCZWdpblNYTElDb2xzXCIgfSxcbjB4MDEyRTogeyBuOlwiQnJ0RW5kU1hMSUNvbHNcIiB9LFxuMHgwMTJGOiB7IG46XCJCcnRCZWdpblNYRm9ybWF0XCIgfSxcbjB4MDEzMDogeyBuOlwiQnJ0RW5kU1hGb3JtYXRcIiB9LFxuMHgwMTMxOiB7IG46XCJCcnRCZWdpblNYRm9ybWF0c1wiIH0sXG4weDAxMzI6IHsgbjpcIkJydEVuZFN4Rm9ybWF0c1wiIH0sXG4weDAxMzM6IHsgbjpcIkJydEJlZ2luU3hTZWxlY3RcIiB9LFxuMHgwMTM0OiB7IG46XCJCcnRFbmRTeFNlbGVjdFwiIH0sXG4weDAxMzU6IHsgbjpcIkJydEJlZ2luSVNYVkRSd3NcIiB9LFxuMHgwMTM2OiB7IG46XCJCcnRFbmRJU1hWRFJ3c1wiIH0sXG4weDAxMzc6IHsgbjpcIkJydEJlZ2luSVNYVkRDb2xzXCIgfSxcbjB4MDEzODogeyBuOlwiQnJ0RW5kSVNYVkRDb2xzXCIgfSxcbjB4MDEzOTogeyBuOlwiQnJ0RW5kU1hMb2NhdGlvblwiIH0sXG4weDAxM0E6IHsgbjpcIkJydEJlZ2luU1hMb2NhdGlvblwiIH0sXG4weDAxM0I6IHsgbjpcIkJydEVuZFNYVmlld1wiIH0sXG4weDAxM0M6IHsgbjpcIkJydEJlZ2luU1hUSHNcIiB9LFxuMHgwMTNEOiB7IG46XCJCcnRFbmRTWFRIc1wiIH0sXG4weDAxM0U6IHsgbjpcIkJydEJlZ2luU1hUSFwiIH0sXG4weDAxM0Y6IHsgbjpcIkJydEVuZFNYVEhcIiB9LFxuMHgwMTQwOiB7IG46XCJCcnRCZWdpbklTWFRIUndzXCIgfSxcbjB4MDE0MTogeyBuOlwiQnJ0RW5kSVNYVEhSd3NcIiB9LFxuMHgwMTQyOiB7IG46XCJCcnRCZWdpbklTWFRIQ29sc1wiIH0sXG4weDAxNDM6IHsgbjpcIkJydEVuZElTWFRIQ29sc1wiIH0sXG4weDAxNDQ6IHsgbjpcIkJydEJlZ2luU1hURE1QU1wiIH0sXG4weDAxNDU6IHsgbjpcIkJydEVuZFNYVERNUHNcIiB9LFxuMHgwMTQ2OiB7IG46XCJCcnRCZWdpblNYVERNUFwiIH0sXG4weDAxNDc6IHsgbjpcIkJydEVuZFNYVERNUFwiIH0sXG4weDAxNDg6IHsgbjpcIkJydEJlZ2luU1hUSEl0ZW1zXCIgfSxcbjB4MDE0OTogeyBuOlwiQnJ0RW5kU1hUSEl0ZW1zXCIgfSxcbjB4MDE0QTogeyBuOlwiQnJ0QmVnaW5TWFRISXRlbVwiIH0sXG4weDAxNEI6IHsgbjpcIkJydEVuZFNYVEhJdGVtXCIgfSxcbjB4MDE0QzogeyBuOlwiQnJ0QmVnaW5NZXRhZGF0YVwiIH0sXG4weDAxNEQ6IHsgbjpcIkJydEVuZE1ldGFkYXRhXCIgfSxcbjB4MDE0RTogeyBuOlwiQnJ0QmVnaW5Fc21kdGluZm9cIiB9LFxuMHgwMTRGOiB7IG46XCJCcnRNZHRpbmZvXCIgfSxcbjB4MDE1MDogeyBuOlwiQnJ0RW5kRXNtZHRpbmZvXCIgfSxcbjB4MDE1MTogeyBuOlwiQnJ0QmVnaW5Fc21kYlwiIH0sXG4weDAxNTI6IHsgbjpcIkJydEVuZEVzbWRiXCIgfSxcbjB4MDE1MzogeyBuOlwiQnJ0QmVnaW5Fc2ZtZFwiIH0sXG4weDAxNTQ6IHsgbjpcIkJydEVuZEVzZm1kXCIgfSxcbjB4MDE1NTogeyBuOlwiQnJ0QmVnaW5TaW5nbGVDZWxsc1wiIH0sXG4weDAxNTY6IHsgbjpcIkJydEVuZFNpbmdsZUNlbGxzXCIgfSxcbjB4MDE1NzogeyBuOlwiQnJ0QmVnaW5MaXN0XCIgfSxcbjB4MDE1ODogeyBuOlwiQnJ0RW5kTGlzdFwiIH0sXG4weDAxNTk6IHsgbjpcIkJydEJlZ2luTGlzdENvbHNcIiB9LFxuMHgwMTVBOiB7IG46XCJCcnRFbmRMaXN0Q29sc1wiIH0sXG4weDAxNUI6IHsgbjpcIkJydEJlZ2luTGlzdENvbFwiIH0sXG4weDAxNUM6IHsgbjpcIkJydEVuZExpc3RDb2xcIiB9LFxuMHgwMTVEOiB7IG46XCJCcnRCZWdpbkxpc3RYbWxDUHJcIiB9LFxuMHgwMTVFOiB7IG46XCJCcnRFbmRMaXN0WG1sQ1ByXCIgfSxcbjB4MDE1RjogeyBuOlwiQnJ0TGlzdENDRm1sYVwiIH0sXG4weDAxNjA6IHsgbjpcIkJydExpc3RUckZtbGFcIiB9LFxuMHgwMTYxOiB7IG46XCJCcnRCZWdpbkV4dGVybmFsc1wiIH0sXG4weDAxNjI6IHsgbjpcIkJydEVuZEV4dGVybmFsc1wiIH0sXG4weDAxNjM6IHsgbjpcIkJydFN1cEJvb2tTcmNcIiwgZjpwYXJzZV9SZWxJRH0sXG4weDAxNjU6IHsgbjpcIkJydFN1cFNlbGZcIiB9LFxuMHgwMTY2OiB7IG46XCJCcnRTdXBTYW1lXCIgfSxcbjB4MDE2NzogeyBuOlwiQnJ0U3VwVGFic1wiIH0sXG4weDAxNjg6IHsgbjpcIkJydEJlZ2luU3VwQm9va1wiIH0sXG4weDAxNjk6IHsgbjpcIkJydFBsYWNlaG9sZGVyTmFtZVwiIH0sXG4weDAxNkE6IHsgbjpcIkJydEV4dGVyblNoZWV0XCIsIGY6cGFyc2VfRXh0ZXJuU2hlZXQgfSxcbjB4MDE2QjogeyBuOlwiQnJ0RXh0ZXJuVGFibGVTdGFydFwiIH0sXG4weDAxNkM6IHsgbjpcIkJydEV4dGVyblRhYmxlRW5kXCIgfSxcbjB4MDE2RTogeyBuOlwiQnJ0RXh0ZXJuUm93SGRyXCIgfSxcbjB4MDE2RjogeyBuOlwiQnJ0RXh0ZXJuQ2VsbEJsYW5rXCIgfSxcbjB4MDE3MDogeyBuOlwiQnJ0RXh0ZXJuQ2VsbFJlYWxcIiB9LFxuMHgwMTcxOiB7IG46XCJCcnRFeHRlcm5DZWxsQm9vbFwiIH0sXG4weDAxNzI6IHsgbjpcIkJydEV4dGVybkNlbGxFcnJvclwiIH0sXG4weDAxNzM6IHsgbjpcIkJydEV4dGVybkNlbGxTdHJpbmdcIiB9LFxuMHgwMTc0OiB7IG46XCJCcnRCZWdpbkVzbWR4XCIgfSxcbjB4MDE3NTogeyBuOlwiQnJ0RW5kRXNtZHhcIiB9LFxuMHgwMTc2OiB7IG46XCJCcnRCZWdpbk1keFNldFwiIH0sXG4weDAxNzc6IHsgbjpcIkJydEVuZE1keFNldFwiIH0sXG4weDAxNzg6IHsgbjpcIkJydEJlZ2luTWR4TWJyUHJvcFwiIH0sXG4weDAxNzk6IHsgbjpcIkJydEVuZE1keE1iclByb3BcIiB9LFxuMHgwMTdBOiB7IG46XCJCcnRCZWdpbk1keEtQSVwiIH0sXG4weDAxN0I6IHsgbjpcIkJydEVuZE1keEtQSVwiIH0sXG4weDAxN0M6IHsgbjpcIkJydEJlZ2luRXNzdHJcIiB9LFxuMHgwMTdEOiB7IG46XCJCcnRFbmRFc3N0clwiIH0sXG4weDAxN0U6IHsgbjpcIkJydEJlZ2luUFJGSXRlbVwiIH0sXG4weDAxN0Y6IHsgbjpcIkJydEVuZFBSRkl0ZW1cIiB9LFxuMHgwMTgwOiB7IG46XCJCcnRCZWdpblBpdm90Q2FjaGVJRHNcIiB9LFxuMHgwMTgxOiB7IG46XCJCcnRFbmRQaXZvdENhY2hlSURzXCIgfSxcbjB4MDE4MjogeyBuOlwiQnJ0QmVnaW5QaXZvdENhY2hlSURcIiB9LFxuMHgwMTgzOiB7IG46XCJCcnRFbmRQaXZvdENhY2hlSURcIiB9LFxuMHgwMTg0OiB7IG46XCJCcnRCZWdpbklTWFZJc1wiIH0sXG4weDAxODU6IHsgbjpcIkJydEVuZElTWFZJc1wiIH0sXG4weDAxODY6IHsgbjpcIkJydEJlZ2luQ29sSW5mb3NcIiB9LFxuMHgwMTg3OiB7IG46XCJCcnRFbmRDb2xJbmZvc1wiIH0sXG4weDAxODg6IHsgbjpcIkJydEJlZ2luUndCcmtcIiB9LFxuMHgwMTg5OiB7IG46XCJCcnRFbmRSd0Jya1wiIH0sXG4weDAxOEE6IHsgbjpcIkJydEJlZ2luQ29sQnJrXCIgfSxcbjB4MDE4QjogeyBuOlwiQnJ0RW5kQ29sQnJrXCIgfSxcbjB4MDE4QzogeyBuOlwiQnJ0QnJrXCIgfSxcbjB4MDE4RDogeyBuOlwiQnJ0VXNlckJvb2tWaWV3XCIgfSxcbjB4MDE4RTogeyBuOlwiQnJ0SW5mb1wiIH0sXG4weDAxOEY6IHsgbjpcIkJydENVc3JcIiB9LFxuMHgwMTkwOiB7IG46XCJCcnRVc3JcIiB9LFxuMHgwMTkxOiB7IG46XCJCcnRCZWdpblVzZXJzXCIgfSxcbjB4MDE5MzogeyBuOlwiQnJ0RU9GXCIgfSxcbjB4MDE5NDogeyBuOlwiQnJ0VUNSXCIgfSxcbjB4MDE5NTogeyBuOlwiQnJ0UlJJbnNEZWxcIiB9LFxuMHgwMTk2OiB7IG46XCJCcnRSUkVuZEluc0RlbFwiIH0sXG4weDAxOTc6IHsgbjpcIkJydFJSTW92ZVwiIH0sXG4weDAxOTg6IHsgbjpcIkJydFJSRW5kTW92ZVwiIH0sXG4weDAxOTk6IHsgbjpcIkJydFJSQ2hnQ2VsbFwiIH0sXG4weDAxOUE6IHsgbjpcIkJydFJSRW5kQ2hnQ2VsbFwiIH0sXG4weDAxOUI6IHsgbjpcIkJydFJSSGVhZGVyXCIgfSxcbjB4MDE5QzogeyBuOlwiQnJ0UlJVc2VyVmlld1wiIH0sXG4weDAxOUQ6IHsgbjpcIkJydFJSUmVuU2hlZXRcIiB9LFxuMHgwMTlFOiB7IG46XCJCcnRSUkluc2VydFNoXCIgfSxcbjB4MDE5RjogeyBuOlwiQnJ0UlJEZWZOYW1lXCIgfSxcbjB4MDFBMDogeyBuOlwiQnJ0UlJOb3RlXCIgfSxcbjB4MDFBMTogeyBuOlwiQnJ0UlJDb25mbGljdFwiIH0sXG4weDAxQTI6IHsgbjpcIkJydFJSVFFTSUZcIiB9LFxuMHgwMUEzOiB7IG46XCJCcnRSUkZvcm1hdFwiIH0sXG4weDAxQTQ6IHsgbjpcIkJydFJSRW5kRm9ybWF0XCIgfSxcbjB4MDFBNTogeyBuOlwiQnJ0UlJBdXRvRm10XCIgfSxcbjB4MDFBNjogeyBuOlwiQnJ0QmVnaW5Vc2VyU2hWaWV3c1wiIH0sXG4weDAxQTc6IHsgbjpcIkJydEJlZ2luVXNlclNoVmlld1wiIH0sXG4weDAxQTg6IHsgbjpcIkJydEVuZFVzZXJTaFZpZXdcIiB9LFxuMHgwMUE5OiB7IG46XCJCcnRFbmRVc2VyU2hWaWV3c1wiIH0sXG4weDAxQUE6IHsgbjpcIkJydEFyckZtbGFcIiwgZjpwYXJzZV9CcnRBcnJGbWxhIH0sXG4weDAxQUI6IHsgbjpcIkJydFNockZtbGFcIiwgZjpwYXJzZV9CcnRTaHJGbWxhIH0sXG4weDAxQUM6IHsgbjpcIkJydFRhYmxlXCIgfSxcbjB4MDFBRDogeyBuOlwiQnJ0QmVnaW5FeHRDb25uZWN0aW9uc1wiIH0sXG4weDAxQUU6IHsgbjpcIkJydEVuZEV4dENvbm5lY3Rpb25zXCIgfSxcbjB4MDFBRjogeyBuOlwiQnJ0QmVnaW5QQ0RDYWxjTWVtc1wiIH0sXG4weDAxQjA6IHsgbjpcIkJydEVuZFBDRENhbGNNZW1zXCIgfSxcbjB4MDFCMTogeyBuOlwiQnJ0QmVnaW5QQ0RDYWxjTWVtXCIgfSxcbjB4MDFCMjogeyBuOlwiQnJ0RW5kUENEQ2FsY01lbVwiIH0sXG4weDAxQjM6IHsgbjpcIkJydEJlZ2luUENESEdMZXZlbHNcIiB9LFxuMHgwMUI0OiB7IG46XCJCcnRFbmRQQ0RIR0xldmVsc1wiIH0sXG4weDAxQjU6IHsgbjpcIkJydEJlZ2luUENESEdMZXZlbFwiIH0sXG4weDAxQjY6IHsgbjpcIkJydEVuZFBDREhHTGV2ZWxcIiB9LFxuMHgwMUI3OiB7IG46XCJCcnRCZWdpblBDREhHTEdyb3Vwc1wiIH0sXG4weDAxQjg6IHsgbjpcIkJydEVuZFBDREhHTEdyb3Vwc1wiIH0sXG4weDAxQjk6IHsgbjpcIkJydEJlZ2luUENESEdMR3JvdXBcIiB9LFxuMHgwMUJBOiB7IG46XCJCcnRFbmRQQ0RIR0xHcm91cFwiIH0sXG4weDAxQkI6IHsgbjpcIkJydEJlZ2luUENESEdMR01lbWJlcnNcIiB9LFxuMHgwMUJDOiB7IG46XCJCcnRFbmRQQ0RIR0xHTWVtYmVyc1wiIH0sXG4weDAxQkQ6IHsgbjpcIkJydEJlZ2luUENESEdMR01lbWJlclwiIH0sXG4weDAxQkU6IHsgbjpcIkJydEVuZFBDREhHTEdNZW1iZXJcIiB9LFxuMHgwMUJGOiB7IG46XCJCcnRCZWdpblFTSVwiIH0sXG4weDAxQzA6IHsgbjpcIkJydEVuZFFTSVwiIH0sXG4weDAxQzE6IHsgbjpcIkJydEJlZ2luUVNJUlwiIH0sXG4weDAxQzI6IHsgbjpcIkJydEVuZFFTSVJcIiB9LFxuMHgwMUMzOiB7IG46XCJCcnRCZWdpbkRlbGV0ZWROYW1lc1wiIH0sXG4weDAxQzQ6IHsgbjpcIkJydEVuZERlbGV0ZWROYW1lc1wiIH0sXG4weDAxQzU6IHsgbjpcIkJydEJlZ2luRGVsZXRlZE5hbWVcIiB9LFxuMHgwMUM2OiB7IG46XCJCcnRFbmREZWxldGVkTmFtZVwiIH0sXG4weDAxQzc6IHsgbjpcIkJydEJlZ2luUVNJRnNcIiB9LFxuMHgwMUM4OiB7IG46XCJCcnRFbmRRU0lGc1wiIH0sXG4weDAxQzk6IHsgbjpcIkJydEJlZ2luUVNJRlwiIH0sXG4weDAxQ0E6IHsgbjpcIkJydEVuZFFTSUZcIiB9LFxuMHgwMUNCOiB7IG46XCJCcnRCZWdpbkF1dG9Tb3J0U2NvcGVcIiB9LFxuMHgwMUNDOiB7IG46XCJCcnRFbmRBdXRvU29ydFNjb3BlXCIgfSxcbjB4MDFDRDogeyBuOlwiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmdcIiB9LFxuMHgwMUNFOiB7IG46XCJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmdcIiB9LFxuMHgwMUNGOiB7IG46XCJCcnRCZWdpbkNGUnVsZVwiIH0sXG4weDAxRDA6IHsgbjpcIkJydEVuZENGUnVsZVwiIH0sXG4weDAxRDE6IHsgbjpcIkJydEJlZ2luSWNvblNldFwiIH0sXG4weDAxRDI6IHsgbjpcIkJydEVuZEljb25TZXRcIiB9LFxuMHgwMUQzOiB7IG46XCJCcnRCZWdpbkRhdGFiYXJcIiB9LFxuMHgwMUQ0OiB7IG46XCJCcnRFbmREYXRhYmFyXCIgfSxcbjB4MDFENTogeyBuOlwiQnJ0QmVnaW5Db2xvclNjYWxlXCIgfSxcbjB4MDFENjogeyBuOlwiQnJ0RW5kQ29sb3JTY2FsZVwiIH0sXG4weDAxRDc6IHsgbjpcIkJydENGVk9cIiB9LFxuMHgwMUQ4OiB7IG46XCJCcnRFeHRlcm5WYWx1ZU1ldGFcIiB9LFxuMHgwMUQ5OiB7IG46XCJCcnRCZWdpbkNvbG9yUGFsZXR0ZVwiIH0sXG4weDAxREE6IHsgbjpcIkJydEVuZENvbG9yUGFsZXR0ZVwiIH0sXG4weDAxREI6IHsgbjpcIkJydEluZGV4ZWRDb2xvclwiIH0sXG4weDAxREM6IHsgbjpcIkJydE1hcmdpbnNcIiwgZjpwYXJzZV9CcnRNYXJnaW5zIH0sXG4weDAxREQ6IHsgbjpcIkJydFByaW50T3B0aW9uc1wiIH0sXG4weDAxREU6IHsgbjpcIkJydFBhZ2VTZXR1cFwiIH0sXG4weDAxREY6IHsgbjpcIkJydEJlZ2luSGVhZGVyRm9vdGVyXCIgfSxcbjB4MDFFMDogeyBuOlwiQnJ0RW5kSGVhZGVyRm9vdGVyXCIgfSxcbjB4MDFFMTogeyBuOlwiQnJ0QmVnaW5TWENydEZvcm1hdFwiIH0sXG4weDAxRTI6IHsgbjpcIkJydEVuZFNYQ3J0Rm9ybWF0XCIgfSxcbjB4MDFFMzogeyBuOlwiQnJ0QmVnaW5TWENydEZvcm1hdHNcIiB9LFxuMHgwMUU0OiB7IG46XCJCcnRFbmRTWENydEZvcm1hdHNcIiB9LFxuMHgwMUU1OiB7IG46XCJCcnRXc0ZtdEluZm9cIiwgZjpwYXJzZV9CcnRXc0ZtdEluZm8gfSxcbjB4MDFFNjogeyBuOlwiQnJ0QmVnaW5NZ3NcIiB9LFxuMHgwMUU3OiB7IG46XCJCcnRFbmRNR3NcIiB9LFxuMHgwMUU4OiB7IG46XCJCcnRCZWdpbk1HTWFwc1wiIH0sXG4weDAxRTk6IHsgbjpcIkJydEVuZE1HTWFwc1wiIH0sXG4weDAxRUE6IHsgbjpcIkJydEJlZ2luTUdcIiB9LFxuMHgwMUVCOiB7IG46XCJCcnRFbmRNR1wiIH0sXG4weDAxRUM6IHsgbjpcIkJydEJlZ2luTWFwXCIgfSxcbjB4MDFFRDogeyBuOlwiQnJ0RW5kTWFwXCIgfSxcbjB4MDFFRTogeyBuOlwiQnJ0SExpbmtcIiwgZjpwYXJzZV9CcnRITGluayB9LFxuMHgwMUVGOiB7IG46XCJCcnRCZWdpbkRDb25cIiB9LFxuMHgwMUYwOiB7IG46XCJCcnRFbmREQ29uXCIgfSxcbjB4MDFGMTogeyBuOlwiQnJ0QmVnaW5EUmVmc1wiIH0sXG4weDAxRjI6IHsgbjpcIkJydEVuZERSZWZzXCIgfSxcbjB4MDFGMzogeyBuOlwiQnJ0RFJlZlwiIH0sXG4weDAxRjQ6IHsgbjpcIkJydEJlZ2luU2Nlbk1hblwiIH0sXG4weDAxRjU6IHsgbjpcIkJydEVuZFNjZW5NYW5cIiB9LFxuMHgwMUY2OiB7IG46XCJCcnRCZWdpblNjdFwiIH0sXG4weDAxRjc6IHsgbjpcIkJydEVuZFNjdFwiIH0sXG4weDAxRjg6IHsgbjpcIkJydFNsY1wiIH0sXG4weDAxRjk6IHsgbjpcIkJydEJlZ2luRFhGc1wiIH0sXG4weDAxRkE6IHsgbjpcIkJydEVuZERYRnNcIiB9LFxuMHgwMUZCOiB7IG46XCJCcnREWEZcIiB9LFxuMHgwMUZDOiB7IG46XCJCcnRCZWdpblRhYmxlU3R5bGVzXCIgfSxcbjB4MDFGRDogeyBuOlwiQnJ0RW5kVGFibGVTdHlsZXNcIiB9LFxuMHgwMUZFOiB7IG46XCJCcnRCZWdpblRhYmxlU3R5bGVcIiB9LFxuMHgwMUZGOiB7IG46XCJCcnRFbmRUYWJsZVN0eWxlXCIgfSxcbjB4MDIwMDogeyBuOlwiQnJ0VGFibGVTdHlsZUVsZW1lbnRcIiB9LFxuMHgwMjAxOiB7IG46XCJCcnRUYWJsZVN0eWxlQ2xpZW50XCIgfSxcbjB4MDIwMjogeyBuOlwiQnJ0QmVnaW5Wb2xEZXBzXCIgfSxcbjB4MDIwMzogeyBuOlwiQnJ0RW5kVm9sRGVwc1wiIH0sXG4weDAyMDQ6IHsgbjpcIkJydEJlZ2luVm9sVHlwZVwiIH0sXG4weDAyMDU6IHsgbjpcIkJydEVuZFZvbFR5cGVcIiB9LFxuMHgwMjA2OiB7IG46XCJCcnRCZWdpblZvbE1haW5cIiB9LFxuMHgwMjA3OiB7IG46XCJCcnRFbmRWb2xNYWluXCIgfSxcbjB4MDIwODogeyBuOlwiQnJ0QmVnaW5Wb2xUb3BpY1wiIH0sXG4weDAyMDk6IHsgbjpcIkJydEVuZFZvbFRvcGljXCIgfSxcbjB4MDIwQTogeyBuOlwiQnJ0Vm9sU3VidG9waWNcIiB9LFxuMHgwMjBCOiB7IG46XCJCcnRWb2xSZWZcIiB9LFxuMHgwMjBDOiB7IG46XCJCcnRWb2xOdW1cIiB9LFxuMHgwMjBEOiB7IG46XCJCcnRWb2xFcnJcIiB9LFxuMHgwMjBFOiB7IG46XCJCcnRWb2xTdHJcIiB9LFxuMHgwMjBGOiB7IG46XCJCcnRWb2xCb29sXCIgfSxcbjB4MDIxMDogeyBuOlwiQnJ0QmVnaW5DYWxjQ2hhaW4kXCIgfSxcbjB4MDIxMTogeyBuOlwiQnJ0RW5kQ2FsY0NoYWluJFwiIH0sXG4weDAyMTI6IHsgbjpcIkJydEJlZ2luU29ydFN0YXRlXCIgfSxcbjB4MDIxMzogeyBuOlwiQnJ0RW5kU29ydFN0YXRlXCIgfSxcbjB4MDIxNDogeyBuOlwiQnJ0QmVnaW5Tb3J0Q29uZFwiIH0sXG4weDAyMTU6IHsgbjpcIkJydEVuZFNvcnRDb25kXCIgfSxcbjB4MDIxNjogeyBuOlwiQnJ0Qm9va1Byb3RlY3Rpb25cIiB9LFxuMHgwMjE3OiB7IG46XCJCcnRTaGVldFByb3RlY3Rpb25cIiB9LFxuMHgwMjE4OiB7IG46XCJCcnRSYW5nZVByb3RlY3Rpb25cIiB9LFxuMHgwMjE5OiB7IG46XCJCcnRQaG9uZXRpY0luZm9cIiB9LFxuMHgwMjFBOiB7IG46XCJCcnRCZWdpbkVDVHh0V2l6XCIgfSxcbjB4MDIxQjogeyBuOlwiQnJ0RW5kRUNUeHRXaXpcIiB9LFxuMHgwMjFDOiB7IG46XCJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0XCIgfSxcbjB4MDIxRDogeyBuOlwiQnJ0RW5kRUNUV0ZsZEluZm9Mc3RcIiB9LFxuMHgwMjFFOiB7IG46XCJCcnRCZWdpbkVDVHdGbGRJbmZvXCIgfSxcbjB4MDIyNDogeyBuOlwiQnJ0RmlsZVNoYXJpbmdcIiB9LFxuMHgwMjI1OiB7IG46XCJCcnRPbGVTaXplXCIgfSxcbjB4MDIyNjogeyBuOlwiQnJ0RHJhd2luZ1wiLCBmOnBhcnNlX1JlbElEIH0sXG4weDAyMjc6IHsgbjpcIkJydExlZ2FjeURyYXdpbmdcIiB9LFxuMHgwMjI4OiB7IG46XCJCcnRMZWdhY3lEcmF3aW5nSEZcIiB9LFxuMHgwMjI5OiB7IG46XCJCcnRXZWJPcHRcIiB9LFxuMHgwMjJBOiB7IG46XCJCcnRCZWdpbldlYlB1Ykl0ZW1zXCIgfSxcbjB4MDIyQjogeyBuOlwiQnJ0RW5kV2ViUHViSXRlbXNcIiB9LFxuMHgwMjJDOiB7IG46XCJCcnRCZWdpbldlYlB1Ykl0ZW1cIiB9LFxuMHgwMjJEOiB7IG46XCJCcnRFbmRXZWJQdWJJdGVtXCIgfSxcbjB4MDIyRTogeyBuOlwiQnJ0QmVnaW5TWENvbmRGbXRcIiB9LFxuMHgwMjJGOiB7IG46XCJCcnRFbmRTWENvbmRGbXRcIiB9LFxuMHgwMjMwOiB7IG46XCJCcnRCZWdpblNYQ29uZEZtdHNcIiB9LFxuMHgwMjMxOiB7IG46XCJCcnRFbmRTWENvbmRGbXRzXCIgfSxcbjB4MDIzMjogeyBuOlwiQnJ0QmtIaW1cIiB9LFxuMHgwMjM0OiB7IG46XCJCcnRDb2xvclwiIH0sXG4weDAyMzU6IHsgbjpcIkJydEJlZ2luSW5kZXhlZENvbG9yc1wiIH0sXG4weDAyMzY6IHsgbjpcIkJydEVuZEluZGV4ZWRDb2xvcnNcIiB9LFxuMHgwMjM5OiB7IG46XCJCcnRCZWdpbk1SVUNvbG9yc1wiIH0sXG4weDAyM0E6IHsgbjpcIkJydEVuZE1SVUNvbG9yc1wiIH0sXG4weDAyM0M6IHsgbjpcIkJydE1SVUNvbG9yXCIgfSxcbjB4MDIzRDogeyBuOlwiQnJ0QmVnaW5EVmFsc1wiIH0sXG4weDAyM0U6IHsgbjpcIkJydEVuZERWYWxzXCIgfSxcbjB4MDI0MTogeyBuOlwiQnJ0U3VwTmFtZVN0YXJ0XCIgfSxcbjB4MDI0MjogeyBuOlwiQnJ0U3VwTmFtZVZhbHVlU3RhcnRcIiB9LFxuMHgwMjQzOiB7IG46XCJCcnRTdXBOYW1lVmFsdWVFbmRcIiB9LFxuMHgwMjQ0OiB7IG46XCJCcnRTdXBOYW1lTnVtXCIgfSxcbjB4MDI0NTogeyBuOlwiQnJ0U3VwTmFtZUVyclwiIH0sXG4weDAyNDY6IHsgbjpcIkJydFN1cE5hbWVTdFwiIH0sXG4weDAyNDc6IHsgbjpcIkJydFN1cE5hbWVOaWxcIiB9LFxuMHgwMjQ4OiB7IG46XCJCcnRTdXBOYW1lQm9vbFwiIH0sXG4weDAyNDk6IHsgbjpcIkJydFN1cE5hbWVGbWxhXCIgfSxcbjB4MDI0QTogeyBuOlwiQnJ0U3VwTmFtZUJpdHNcIiB9LFxuMHgwMjRCOiB7IG46XCJCcnRTdXBOYW1lRW5kXCIgfSxcbjB4MDI0QzogeyBuOlwiQnJ0RW5kU3VwQm9va1wiIH0sXG4weDAyNEQ6IHsgbjpcIkJydENlbGxTbWFydFRhZ1Byb3BlcnR5XCIgfSxcbjB4MDI0RTogeyBuOlwiQnJ0QmVnaW5DZWxsU21hcnRUYWdcIiB9LFxuMHgwMjRGOiB7IG46XCJCcnRFbmRDZWxsU21hcnRUYWdcIiB9LFxuMHgwMjUwOiB7IG46XCJCcnRCZWdpbkNlbGxTbWFydFRhZ3NcIiB9LFxuMHgwMjUxOiB7IG46XCJCcnRFbmRDZWxsU21hcnRUYWdzXCIgfSxcbjB4MDI1MjogeyBuOlwiQnJ0QmVnaW5TbWFydFRhZ3NcIiB9LFxuMHgwMjUzOiB7IG46XCJCcnRFbmRTbWFydFRhZ3NcIiB9LFxuMHgwMjU0OiB7IG46XCJCcnRTbWFydFRhZ1R5cGVcIiB9LFxuMHgwMjU1OiB7IG46XCJCcnRCZWdpblNtYXJ0VGFnVHlwZXNcIiB9LFxuMHgwMjU2OiB7IG46XCJCcnRFbmRTbWFydFRhZ1R5cGVzXCIgfSxcbjB4MDI1NzogeyBuOlwiQnJ0QmVnaW5TWEZpbHRlcnNcIiB9LFxuMHgwMjU4OiB7IG46XCJCcnRFbmRTWEZpbHRlcnNcIiB9LFxuMHgwMjU5OiB7IG46XCJCcnRCZWdpblNYRklMVEVSXCIgfSxcbjB4MDI1QTogeyBuOlwiQnJ0RW5kU1hGaWx0ZXJcIiB9LFxuMHgwMjVCOiB7IG46XCJCcnRCZWdpbkZpbGxzXCIgfSxcbjB4MDI1QzogeyBuOlwiQnJ0RW5kRmlsbHNcIiB9LFxuMHgwMjVEOiB7IG46XCJCcnRCZWdpbkNlbGxXYXRjaGVzXCIgfSxcbjB4MDI1RTogeyBuOlwiQnJ0RW5kQ2VsbFdhdGNoZXNcIiB9LFxuMHgwMjVGOiB7IG46XCJCcnRDZWxsV2F0Y2hcIiB9LFxuMHgwMjYwOiB7IG46XCJCcnRCZWdpbkNSRXJyc1wiIH0sXG4weDAyNjE6IHsgbjpcIkJydEVuZENSRXJyc1wiIH0sXG4weDAyNjI6IHsgbjpcIkJydENyYXNoUmVjRXJyXCIgfSxcbjB4MDI2MzogeyBuOlwiQnJ0QmVnaW5Gb250c1wiIH0sXG4weDAyNjQ6IHsgbjpcIkJydEVuZEZvbnRzXCIgfSxcbjB4MDI2NTogeyBuOlwiQnJ0QmVnaW5Cb3JkZXJzXCIgfSxcbjB4MDI2NjogeyBuOlwiQnJ0RW5kQm9yZGVyc1wiIH0sXG4weDAyNjc6IHsgbjpcIkJydEJlZ2luRm10c1wiIH0sXG4weDAyNjg6IHsgbjpcIkJydEVuZEZtdHNcIiB9LFxuMHgwMjY5OiB7IG46XCJCcnRCZWdpbkNlbGxYRnNcIiB9LFxuMHgwMjZBOiB7IG46XCJCcnRFbmRDZWxsWEZzXCIgfSxcbjB4MDI2QjogeyBuOlwiQnJ0QmVnaW5TdHlsZXNcIiB9LFxuMHgwMjZDOiB7IG46XCJCcnRFbmRTdHlsZXNcIiB9LFxuMHgwMjcxOiB7IG46XCJCcnRCaWdOYW1lXCIgfSxcbjB4MDI3MjogeyBuOlwiQnJ0QmVnaW5DZWxsU3R5bGVYRnNcIiB9LFxuMHgwMjczOiB7IG46XCJCcnRFbmRDZWxsU3R5bGVYRnNcIiB9LFxuMHgwMjc0OiB7IG46XCJCcnRCZWdpbkNvbW1lbnRzXCIgfSxcbjB4MDI3NTogeyBuOlwiQnJ0RW5kQ29tbWVudHNcIiB9LFxuMHgwMjc2OiB7IG46XCJCcnRCZWdpbkNvbW1lbnRBdXRob3JzXCIgfSxcbjB4MDI3NzogeyBuOlwiQnJ0RW5kQ29tbWVudEF1dGhvcnNcIiB9LFxuMHgwMjc4OiB7IG46XCJCcnRDb21tZW50QXV0aG9yXCIsIGY6cGFyc2VfQnJ0Q29tbWVudEF1dGhvciB9LFxuMHgwMjc5OiB7IG46XCJCcnRCZWdpbkNvbW1lbnRMaXN0XCIgfSxcbjB4MDI3QTogeyBuOlwiQnJ0RW5kQ29tbWVudExpc3RcIiB9LFxuMHgwMjdCOiB7IG46XCJCcnRCZWdpbkNvbW1lbnRcIiwgZjpwYXJzZV9CcnRCZWdpbkNvbW1lbnR9LFxuMHgwMjdDOiB7IG46XCJCcnRFbmRDb21tZW50XCIgfSxcbjB4MDI3RDogeyBuOlwiQnJ0Q29tbWVudFRleHRcIiwgZjpwYXJzZV9CcnRDb21tZW50VGV4dCB9LFxuMHgwMjdFOiB7IG46XCJCcnRCZWdpbk9sZU9iamVjdHNcIiB9LFxuMHgwMjdGOiB7IG46XCJCcnRPbGVPYmplY3RcIiB9LFxuMHgwMjgwOiB7IG46XCJCcnRFbmRPbGVPYmplY3RzXCIgfSxcbjB4MDI4MTogeyBuOlwiQnJ0QmVnaW5TeHJ1bGVzXCIgfSxcbjB4MDI4MjogeyBuOlwiQnJ0RW5kU3hSdWxlc1wiIH0sXG4weDAyODM6IHsgbjpcIkJydEJlZ2luQWN0aXZlWENvbnRyb2xzXCIgfSxcbjB4MDI4NDogeyBuOlwiQnJ0QWN0aXZlWFwiIH0sXG4weDAyODU6IHsgbjpcIkJydEVuZEFjdGl2ZVhDb250cm9sc1wiIH0sXG4weDAyODY6IHsgbjpcIkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzU29ydEJ5XCIgfSxcbjB4MDI4ODogeyBuOlwiQnJ0QmVnaW5DZWxsSWdub3JlRUNzXCIgfSxcbjB4MDI4OTogeyBuOlwiQnJ0Q2VsbElnbm9yZUVDXCIgfSxcbjB4MDI4QTogeyBuOlwiQnJ0RW5kQ2VsbElnbm9yZUVDc1wiIH0sXG4weDAyOEI6IHsgbjpcIkJydENzUHJvcFwiLCBmOnBhcnNlX0JydENzUHJvcCB9LFxuMHgwMjhDOiB7IG46XCJCcnRDc1BhZ2VTZXR1cFwiIH0sXG4weDAyOEQ6IHsgbjpcIkJydEJlZ2luVXNlckNzVmlld3NcIiB9LFxuMHgwMjhFOiB7IG46XCJCcnRFbmRVc2VyQ3NWaWV3c1wiIH0sXG4weDAyOEY6IHsgbjpcIkJydEJlZ2luVXNlckNzVmlld1wiIH0sXG4weDAyOTA6IHsgbjpcIkJydEVuZFVzZXJDc1ZpZXdcIiB9LFxuMHgwMjkxOiB7IG46XCJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzXCIgfSxcbjB4MDI5MjogeyBuOlwiQnJ0RW5kUENEU0ZDSUVudHJpZXNcIiB9LFxuMHgwMjkzOiB7IG46XCJCcnRQQ0RTRkNJRW50cnlcIiB9LFxuMHgwMjk0OiB7IG46XCJCcnRCZWdpbkxpc3RQYXJ0c1wiIH0sXG4weDAyOTU6IHsgbjpcIkJydExpc3RQYXJ0XCIgfSxcbjB4MDI5NjogeyBuOlwiQnJ0RW5kTGlzdFBhcnRzXCIgfSxcbjB4MDI5NzogeyBuOlwiQnJ0U2hlZXRDYWxjUHJvcFwiIH0sXG4weDAyOTg6IHsgbjpcIkJydEJlZ2luRm5Hcm91cFwiIH0sXG4weDAyOTk6IHsgbjpcIkJydEZuR3JvdXBcIiB9LFxuMHgwMjlBOiB7IG46XCJCcnRFbmRGbkdyb3VwXCIgfSxcbjB4MDI5QjogeyBuOlwiQnJ0U3VwQWRkaW5cIiB9LFxuMHgwMjlDOiB7IG46XCJCcnRTWFRETVBPcmRlclwiIH0sXG4weDAyOUQ6IHsgbjpcIkJydENzUHJvdGVjdGlvblwiIH0sXG4weDAyOUY6IHsgbjpcIkJydEJlZ2luV3NTb3J0TWFwXCIgfSxcbjB4MDJBMDogeyBuOlwiQnJ0RW5kV3NTb3J0TWFwXCIgfSxcbjB4MDJBMTogeyBuOlwiQnJ0QmVnaW5SUlNvcnRcIiB9LFxuMHgwMkEyOiB7IG46XCJCcnRFbmRSUlNvcnRcIiB9LFxuMHgwMkEzOiB7IG46XCJCcnRSUlNvcnRJdGVtXCIgfSxcbjB4MDJBNDogeyBuOlwiQnJ0RmlsZVNoYXJpbmdJc29cIiB9LFxuMHgwMkE1OiB7IG46XCJCcnRCb29rUHJvdGVjdGlvbklzb1wiIH0sXG4weDAyQTY6IHsgbjpcIkJydFNoZWV0UHJvdGVjdGlvbklzb1wiIH0sXG4weDAyQTc6IHsgbjpcIkJydENzUHJvdGVjdGlvbklzb1wiIH0sXG4weDAyQTg6IHsgbjpcIkJydFJhbmdlUHJvdGVjdGlvbklzb1wiIH0sXG4weDA0MDA6IHsgbjpcIkJydFJ3RGVzY2VudFwiIH0sXG4weDA0MDE6IHsgbjpcIkJydEtub3duRm9udHNcIiB9LFxuMHgwNDAyOiB7IG46XCJCcnRCZWdpblNYVHVwbGVTZXRcIiB9LFxuMHgwNDAzOiB7IG46XCJCcnRFbmRTWFR1cGxlU2V0XCIgfSxcbjB4MDQwNDogeyBuOlwiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyXCIgfSxcbjB4MDQwNTogeyBuOlwiQnJ0RW5kU1hUdXBsZVNldEhlYWRlclwiIH0sXG4weDA0MDY6IHsgbjpcIkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtXCIgfSxcbjB4MDQwNzogeyBuOlwiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YVwiIH0sXG4weDA0MDg6IHsgbjpcIkJydEVuZFNYVHVwbGVTZXREYXRhXCIgfSxcbjB4MDQwOTogeyBuOlwiQnJ0QmVnaW5TWFR1cGxlU2V0Um93XCIgfSxcbjB4MDQwQTogeyBuOlwiQnJ0RW5kU1hUdXBsZVNldFJvd1wiIH0sXG4weDA0MEI6IHsgbjpcIkJydFNYVHVwbGVTZXRSb3dJdGVtXCIgfSxcbjB4MDQwQzogeyBuOlwiQnJ0TmFtZUV4dFwiIH0sXG4weDA0MEQ6IHsgbjpcIkJydFBDREgxNFwiIH0sXG4weDA0MEU6IHsgbjpcIkJydEJlZ2luUENEQ2FsY01lbTE0XCIgfSxcbjB4MDQwRjogeyBuOlwiQnJ0RW5kUENEQ2FsY01lbTE0XCIgfSxcbjB4MDQxMDogeyBuOlwiQnJ0U1hUSDE0XCIgfSxcbjB4MDQxMTogeyBuOlwiQnJ0QmVnaW5TcGFya2xpbmVHcm91cFwiIH0sXG4weDA0MTI6IHsgbjpcIkJydEVuZFNwYXJrbGluZUdyb3VwXCIgfSxcbjB4MDQxMzogeyBuOlwiQnJ0U3BhcmtsaW5lXCIgfSxcbjB4MDQxNDogeyBuOlwiQnJ0U1hESTE0XCIgfSxcbjB4MDQxNTogeyBuOlwiQnJ0V3NGbXRJbmZvRXgxNFwiIH0sXG4weDA0MTY6IHsgbjpcIkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTRcIiB9LFxuMHgwNDE3OiB7IG46XCJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNFwiIH0sXG4weDA0MTg6IHsgbjpcIkJydEJlZ2luQ0ZSdWxlMTRcIiB9LFxuMHgwNDE5OiB7IG46XCJCcnRFbmRDRlJ1bGUxNFwiIH0sXG4weDA0MUE6IHsgbjpcIkJydENGVk8xNFwiIH0sXG4weDA0MUI6IHsgbjpcIkJydEJlZ2luRGF0YWJhcjE0XCIgfSxcbjB4MDQxQzogeyBuOlwiQnJ0QmVnaW5JY29uU2V0MTRcIiB9LFxuMHgwNDFEOiB7IG46XCJCcnREVmFsMTRcIiB9LFxuMHgwNDFFOiB7IG46XCJCcnRCZWdpbkRWYWxzMTRcIiB9LFxuMHgwNDFGOiB7IG46XCJCcnRDb2xvcjE0XCIgfSxcbjB4MDQyMDogeyBuOlwiQnJ0QmVnaW5TcGFya2xpbmVzXCIgfSxcbjB4MDQyMTogeyBuOlwiQnJ0RW5kU3BhcmtsaW5lc1wiIH0sXG4weDA0MjI6IHsgbjpcIkJydEJlZ2luU3BhcmtsaW5lR3JvdXBzXCIgfSxcbjB4MDQyMzogeyBuOlwiQnJ0RW5kU3BhcmtsaW5lR3JvdXBzXCIgfSxcbjB4MDQyNTogeyBuOlwiQnJ0U1hWRDE0XCIgfSxcbjB4MDQyNjogeyBuOlwiQnJ0QmVnaW5TeHZpZXcxNFwiIH0sXG4weDA0Mjc6IHsgbjpcIkJydEVuZFN4dmlldzE0XCIgfSxcbjB4MDQyQTogeyBuOlwiQnJ0QmVnaW5QQ0QxNFwiIH0sXG4weDA0MkI6IHsgbjpcIkJydEVuZFBDRDE0XCIgfSxcbjB4MDQyQzogeyBuOlwiQnJ0QmVnaW5FeHRDb25uMTRcIiB9LFxuMHgwNDJEOiB7IG46XCJCcnRFbmRFeHRDb25uMTRcIiB9LFxuMHgwNDJFOiB7IG46XCJCcnRCZWdpblNsaWNlckNhY2hlSURzXCIgfSxcbjB4MDQyRjogeyBuOlwiQnJ0RW5kU2xpY2VyQ2FjaGVJRHNcIiB9LFxuMHgwNDMwOiB7IG46XCJCcnRCZWdpblNsaWNlckNhY2hlSURcIiB9LFxuMHgwNDMxOiB7IG46XCJCcnRFbmRTbGljZXJDYWNoZUlEXCIgfSxcbjB4MDQzMzogeyBuOlwiQnJ0QmVnaW5TbGljZXJDYWNoZVwiIH0sXG4weDA0MzQ6IHsgbjpcIkJydEVuZFNsaWNlckNhY2hlXCIgfSxcbjB4MDQzNTogeyBuOlwiQnJ0QmVnaW5TbGljZXJDYWNoZURlZlwiIH0sXG4weDA0MzY6IHsgbjpcIkJydEVuZFNsaWNlckNhY2hlRGVmXCIgfSxcbjB4MDQzNzogeyBuOlwiQnJ0QmVnaW5TbGljZXJzRXhcIiB9LFxuMHgwNDM4OiB7IG46XCJCcnRFbmRTbGljZXJzRXhcIiB9LFxuMHgwNDM5OiB7IG46XCJCcnRCZWdpblNsaWNlckV4XCIgfSxcbjB4MDQzQTogeyBuOlwiQnJ0RW5kU2xpY2VyRXhcIiB9LFxuMHgwNDNCOiB7IG46XCJCcnRCZWdpblNsaWNlclwiIH0sXG4weDA0M0M6IHsgbjpcIkJydEVuZFNsaWNlclwiIH0sXG4weDA0M0Q6IHsgbjpcIkJydFNsaWNlckNhY2hlUGl2b3RUYWJsZXNcIiB9LFxuMHgwNDNFOiB7IG46XCJCcnRCZWdpblNsaWNlckNhY2hlT2xhcEltcGxcIiB9LFxuMHgwNDNGOiB7IG46XCJCcnRFbmRTbGljZXJDYWNoZU9sYXBJbXBsXCIgfSxcbjB4MDQ0MDogeyBuOlwiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsc0RhdGFcIiB9LFxuMHgwNDQxOiB7IG46XCJCcnRFbmRTbGljZXJDYWNoZUxldmVsc0RhdGFcIiB9LFxuMHgwNDQyOiB7IG46XCJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxEYXRhXCIgfSxcbjB4MDQ0MzogeyBuOlwiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbERhdGFcIiB9LFxuMHgwNDQ0OiB7IG46XCJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZXNcIiB9LFxuMHgwNDQ1OiB7IG46XCJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2VzXCIgfSxcbjB4MDQ0NjogeyBuOlwiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VcIiB9LFxuMHgwNDQ3OiB7IG46XCJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2VcIiB9LFxuMHgwNDQ4OiB7IG46XCJCcnRTbGljZXJDYWNoZU9sYXBJdGVtXCIgfSxcbjB4MDQ0OTogeyBuOlwiQnJ0QmVnaW5TbGljZXJDYWNoZVNlbGVjdGlvbnNcIiB9LFxuMHgwNDRBOiB7IG46XCJCcnRTbGljZXJDYWNoZVNlbGVjdGlvblwiIH0sXG4weDA0NEI6IHsgbjpcIkJydEVuZFNsaWNlckNhY2hlU2VsZWN0aW9uc1wiIH0sXG4weDA0NEM6IHsgbjpcIkJydEJlZ2luU2xpY2VyQ2FjaGVOYXRpdmVcIiB9LFxuMHgwNDREOiB7IG46XCJCcnRFbmRTbGljZXJDYWNoZU5hdGl2ZVwiIH0sXG4weDA0NEU6IHsgbjpcIkJydFNsaWNlckNhY2hlTmF0aXZlSXRlbVwiIH0sXG4weDA0NEY6IHsgbjpcIkJydFJhbmdlUHJvdGVjdGlvbjE0XCIgfSxcbjB4MDQ1MDogeyBuOlwiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvMTRcIiB9LFxuMHgwNDUxOiB7IG46XCJCcnRDZWxsSWdub3JlRUMxNFwiIH0sXG4weDA0NTc6IHsgbjpcIkJydExpc3QxNFwiIH0sXG4weDA0NTg6IHsgbjpcIkJydENGSWNvblwiIH0sXG4weDA0NTk6IHsgbjpcIkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEc1wiIH0sXG4weDA0NUE6IHsgbjpcIkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHNcIiB9LFxuMHgwNDVCOiB7IG46XCJCcnRCZWdpblNsaWNlcnNcIiB9LFxuMHgwNDVDOiB7IG46XCJCcnRFbmRTbGljZXJzXCIgfSxcbjB4MDQ1RDogeyBuOlwiQnJ0V2JQcm9wMTRcIiB9LFxuMHgwNDVFOiB7IG46XCJCcnRCZWdpblNYRWRpdFwiIH0sXG4weDA0NUY6IHsgbjpcIkJydEVuZFNYRWRpdFwiIH0sXG4weDA0NjA6IHsgbjpcIkJydEJlZ2luU1hFZGl0c1wiIH0sXG4weDA0NjE6IHsgbjpcIkJydEVuZFNYRWRpdHNcIiB9LFxuMHgwNDYyOiB7IG46XCJCcnRCZWdpblNYQ2hhbmdlXCIgfSxcbjB4MDQ2MzogeyBuOlwiQnJ0RW5kU1hDaGFuZ2VcIiB9LFxuMHgwNDY0OiB7IG46XCJCcnRCZWdpblNYQ2hhbmdlc1wiIH0sXG4weDA0NjU6IHsgbjpcIkJydEVuZFNYQ2hhbmdlc1wiIH0sXG4weDA0NjY6IHsgbjpcIkJydFNYVHVwbGVJdGVtc1wiIH0sXG4weDA0Njg6IHsgbjpcIkJydEJlZ2luU2xpY2VyU3R5bGVcIiB9LFxuMHgwNDY5OiB7IG46XCJCcnRFbmRTbGljZXJTdHlsZVwiIH0sXG4weDA0NkE6IHsgbjpcIkJydFNsaWNlclN0eWxlRWxlbWVudFwiIH0sXG4weDA0NkI6IHsgbjpcIkJydEJlZ2luU3R5bGVTaGVldEV4dDE0XCIgfSxcbjB4MDQ2QzogeyBuOlwiQnJ0RW5kU3R5bGVTaGVldEV4dDE0XCIgfSxcbjB4MDQ2RDogeyBuOlwiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSURcIiB9LFxuMHgwNDZFOiB7IG46XCJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURcIiB9LFxuMHgwNDZGOiB7IG46XCJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZ3NcIiB9LFxuMHgwNDcwOiB7IG46XCJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmdzXCIgfSxcbjB4MDQ3MTogeyBuOlwiQnJ0QmVnaW5QQ0RDYWxjTWVtRXh0XCIgfSxcbjB4MDQ3MjogeyBuOlwiQnJ0RW5kUENEQ2FsY01lbUV4dFwiIH0sXG4weDA0NzM6IHsgbjpcIkJydEJlZ2luUENEQ2FsY01lbXNFeHRcIiB9LFxuMHgwNDc0OiB7IG46XCJCcnRFbmRQQ0RDYWxjTWVtc0V4dFwiIH0sXG4weDA0NzU6IHsgbjpcIkJydFBDREZpZWxkMTRcIiB9LFxuMHgwNDc2OiB7IG46XCJCcnRCZWdpblNsaWNlclN0eWxlc1wiIH0sXG4weDA0Nzc6IHsgbjpcIkJydEVuZFNsaWNlclN0eWxlc1wiIH0sXG4weDA0Nzg6IHsgbjpcIkJydEJlZ2luU2xpY2VyU3R5bGVFbGVtZW50c1wiIH0sXG4weDA0Nzk6IHsgbjpcIkJydEVuZFNsaWNlclN0eWxlRWxlbWVudHNcIiB9LFxuMHgwNDdBOiB7IG46XCJCcnRDRlJ1bGVFeHRcIiB9LFxuMHgwNDdCOiB7IG46XCJCcnRCZWdpblNYQ29uZEZtdDE0XCIgfSxcbjB4MDQ3QzogeyBuOlwiQnJ0RW5kU1hDb25kRm10MTRcIiB9LFxuMHgwNDdEOiB7IG46XCJCcnRCZWdpblNYQ29uZEZtdHMxNFwiIH0sXG4weDA0N0U6IHsgbjpcIkJydEVuZFNYQ29uZEZtdHMxNFwiIH0sXG4weDA0ODA6IHsgbjpcIkJydEJlZ2luU29ydENvbmQxNFwiIH0sXG4weDA0ODE6IHsgbjpcIkJydEVuZFNvcnRDb25kMTRcIiB9LFxuMHgwNDgyOiB7IG46XCJCcnRFbmREVmFsczE0XCIgfSxcbjB4MDQ4MzogeyBuOlwiQnJ0RW5kSWNvblNldDE0XCIgfSxcbjB4MDQ4NDogeyBuOlwiQnJ0RW5kRGF0YWJhcjE0XCIgfSxcbjB4MDQ4NTogeyBuOlwiQnJ0QmVnaW5Db2xvclNjYWxlMTRcIiB9LFxuMHgwNDg2OiB7IG46XCJCcnRFbmRDb2xvclNjYWxlMTRcIiB9LFxuMHgwNDg3OiB7IG46XCJCcnRCZWdpblN4cnVsZXMxNFwiIH0sXG4weDA0ODg6IHsgbjpcIkJydEVuZFN4cnVsZXMxNFwiIH0sXG4weDA0ODk6IHsgbjpcIkJydEJlZ2luUFJ1bGUxNFwiIH0sXG4weDA0OEE6IHsgbjpcIkJydEVuZFBSdWxlMTRcIiB9LFxuMHgwNDhCOiB7IG46XCJCcnRCZWdpblBSRmlsdGVyczE0XCIgfSxcbjB4MDQ4QzogeyBuOlwiQnJ0RW5kUFJGaWx0ZXJzMTRcIiB9LFxuMHgwNDhEOiB7IG46XCJCcnRCZWdpblBSRmlsdGVyMTRcIiB9LFxuMHgwNDhFOiB7IG46XCJCcnRFbmRQUkZpbHRlcjE0XCIgfSxcbjB4MDQ4RjogeyBuOlwiQnJ0QmVnaW5QUkZJdGVtMTRcIiB9LFxuMHgwNDkwOiB7IG46XCJCcnRFbmRQUkZJdGVtMTRcIiB9LFxuMHgwNDkxOiB7IG46XCJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MxNFwiIH0sXG4weDA0OTI6IHsgbjpcIkJydEVuZENlbGxJZ25vcmVFQ3MxNFwiIH0sXG4weDA0OTM6IHsgbjpcIkJydER4ZjE0XCIgfSxcbjB4MDQ5NDogeyBuOlwiQnJ0QmVnaW5EeEYxNHNcIiB9LFxuMHgwNDk1OiB7IG46XCJCcnRFbmREeGYxNHNcIiB9LFxuMHgwNDk5OiB7IG46XCJCcnRGaWx0ZXIxNFwiIH0sXG4weDA0OUE6IHsgbjpcIkJydEJlZ2luQ3VzdG9tRmlsdGVyczE0XCIgfSxcbjB4MDQ5QzogeyBuOlwiQnJ0Q3VzdG9tRmlsdGVyMTRcIiB9LFxuMHgwNDlEOiB7IG46XCJCcnRJY29uRmlsdGVyMTRcIiB9LFxuMHgwNDlFOiB7IG46XCJCcnRQaXZvdENhY2hlQ29ubmVjdGlvbk5hbWVcIiB9LFxuMHgwODAwOiB7IG46XCJCcnRCZWdpbkRlY291cGxlZFBpdm90Q2FjaGVJRHNcIiB9LFxuMHgwODAxOiB7IG46XCJCcnRFbmREZWNvdXBsZWRQaXZvdENhY2hlSURzXCIgfSxcbjB4MDgwMjogeyBuOlwiQnJ0RGVjb3VwbGVkUGl2b3RDYWNoZUlEXCIgfSxcbjB4MDgwMzogeyBuOlwiQnJ0QmVnaW5QaXZvdFRhYmxlUmVmc1wiIH0sXG4weDA4MDQ6IHsgbjpcIkJydEVuZFBpdm90VGFibGVSZWZzXCIgfSxcbjB4MDgwNTogeyBuOlwiQnJ0UGl2b3RUYWJsZVJlZlwiIH0sXG4weDA4MDY6IHsgbjpcIkJydFNsaWNlckNhY2hlQm9va1Bpdm90VGFibGVzXCIgfSxcbjB4MDgwNzogeyBuOlwiQnJ0QmVnaW5TeHZjZWxsc1wiIH0sXG4weDA4MDg6IHsgbjpcIkJydEVuZFN4dmNlbGxzXCIgfSxcbjB4MDgwOTogeyBuOlwiQnJ0QmVnaW5TeFJvd1wiIH0sXG4weDA4MEE6IHsgbjpcIkJydEVuZFN4Um93XCIgfSxcbjB4MDgwQzogeyBuOlwiQnJ0UGNkQ2FsY01lbTE1XCIgfSxcbjB4MDgxMzogeyBuOlwiQnJ0UXNpMTVcIiB9LFxuMHgwODE0OiB7IG46XCJCcnRCZWdpbldlYkV4dGVuc2lvbnNcIiB9LFxuMHgwODE1OiB7IG46XCJCcnRFbmRXZWJFeHRlbnNpb25zXCIgfSxcbjB4MDgxNjogeyBuOlwiQnJ0V2ViRXh0ZW5zaW9uXCIgfSxcbjB4MDgxNzogeyBuOlwiQnJ0QWJzUGF0aDE1XCIgfSxcbjB4MDgxODogeyBuOlwiQnJ0QmVnaW5QaXZvdFRhYmxlVUlTZXR0aW5nc1wiIH0sXG4weDA4MTk6IHsgbjpcIkJydEVuZFBpdm90VGFibGVVSVNldHRpbmdzXCIgfSxcbjB4MDgxQjogeyBuOlwiQnJ0VGFibGVTbGljZXJDYWNoZUlEc1wiIH0sXG4weDA4MUM6IHsgbjpcIkJydFRhYmxlU2xpY2VyQ2FjaGVJRFwiIH0sXG4weDA4MUQ6IHsgbjpcIkJydEJlZ2luVGFibGVTbGljZXJDYWNoZVwiIH0sXG4weDA4MUU6IHsgbjpcIkJydEVuZFRhYmxlU2xpY2VyQ2FjaGVcIiB9LFxuMHgwODFGOiB7IG46XCJCcnRTeEZpbHRlcjE1XCIgfSxcbjB4MDgyMDogeyBuOlwiQnJ0QmVnaW5UaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEc1wiIH0sXG4weDA4MjE6IHsgbjpcIkJydEVuZFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzXCIgfSxcbjB4MDgyMjogeyBuOlwiQnJ0VGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRFwiIH0sXG4weDA4MjM6IHsgbjpcIkJydEJlZ2luVGltZWxpbmVDYWNoZUlEc1wiIH0sXG4weDA4MjQ6IHsgbjpcIkJydEVuZFRpbWVsaW5lQ2FjaGVJRHNcIiB9LFxuMHgwODI1OiB7IG46XCJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRFwiIH0sXG4weDA4MjY6IHsgbjpcIkJydEVuZFRpbWVsaW5lQ2FjaGVJRFwiIH0sXG4weDA4Mjc6IHsgbjpcIkJydEJlZ2luVGltZWxpbmVzRXhcIiB9LFxuMHgwODI4OiB7IG46XCJCcnRFbmRUaW1lbGluZXNFeFwiIH0sXG4weDA4Mjk6IHsgbjpcIkJydEJlZ2luVGltZWxpbmVFeFwiIH0sXG4weDA4MkE6IHsgbjpcIkJydEVuZFRpbWVsaW5lRXhcIiB9LFxuMHgwODJCOiB7IG46XCJCcnRXb3JrQm9va1ByMTVcIiB9LFxuMHgwODJDOiB7IG46XCJCcnRQQ0RIMTVcIiB9LFxuMHgwODJEOiB7IG46XCJCcnRCZWdpblRpbWVsaW5lU3R5bGVcIiB9LFxuMHgwODJFOiB7IG46XCJCcnRFbmRUaW1lbGluZVN0eWxlXCIgfSxcbjB4MDgyRjogeyBuOlwiQnJ0VGltZWxpbmVTdHlsZUVsZW1lbnRcIiB9LFxuMHgwODMwOiB7IG46XCJCcnRCZWdpblRpbWVsaW5lU3R5bGVzaGVldEV4dDE1XCIgfSxcbjB4MDgzMTogeyBuOlwiQnJ0RW5kVGltZWxpbmVTdHlsZXNoZWV0RXh0MTVcIiB9LFxuMHgwODMyOiB7IG46XCJCcnRCZWdpblRpbWVsaW5lU3R5bGVzXCIgfSxcbjB4MDgzMzogeyBuOlwiQnJ0RW5kVGltZWxpbmVTdHlsZXNcIiB9LFxuMHgwODM0OiB7IG46XCJCcnRCZWdpblRpbWVsaW5lU3R5bGVFbGVtZW50c1wiIH0sXG4weDA4MzU6IHsgbjpcIkJydEVuZFRpbWVsaW5lU3R5bGVFbGVtZW50c1wiIH0sXG4weDA4MzY6IHsgbjpcIkJydER4ZjE1XCIgfSxcbjB4MDgzNzogeyBuOlwiQnJ0QmVnaW5EeGZzMTVcIiB9LFxuMHgwODM4OiB7IG46XCJicnRFbmREeGZzMTVcIiB9LFxuMHgwODM5OiB7IG46XCJCcnRTbGljZXJDYWNoZUhpZGVJdGVtc1dpdGhOb0RhdGFcIiB9LFxuMHgwODNBOiB7IG46XCJCcnRCZWdpbkl0ZW1VbmlxdWVOYW1lc1wiIH0sXG4weDA4M0I6IHsgbjpcIkJydEVuZEl0ZW1VbmlxdWVOYW1lc1wiIH0sXG4weDA4M0M6IHsgbjpcIkJydEl0ZW1VbmlxdWVOYW1lXCIgfSxcbjB4MDgzRDogeyBuOlwiQnJ0QmVnaW5FeHRDb25uMTVcIiB9LFxuMHgwODNFOiB7IG46XCJCcnRFbmRFeHRDb25uMTVcIiB9LFxuMHgwODNGOiB7IG46XCJCcnRCZWdpbk9sZWRiUHIxNVwiIH0sXG4weDA4NDA6IHsgbjpcIkJydEVuZE9sZWRiUHIxNVwiIH0sXG4weDA4NDE6IHsgbjpcIkJydEJlZ2luRGF0YUZlZWRQcjE1XCIgfSxcbjB4MDg0MjogeyBuOlwiQnJ0RW5kRGF0YUZlZWRQcjE1XCIgfSxcbjB4MDg0MzogeyBuOlwiQnJ0VGV4dFByMTVcIiB9LFxuMHgwODQ0OiB7IG46XCJCcnRSYW5nZVByMTVcIiB9LFxuMHgwODQ1OiB7IG46XCJCcnREYkNvbW1hbmQxNVwiIH0sXG4weDA4NDY6IHsgbjpcIkJydEJlZ2luRGJUYWJsZXMxNVwiIH0sXG4weDA4NDc6IHsgbjpcIkJydEVuZERiVGFibGVzMTVcIiB9LFxuMHgwODQ4OiB7IG46XCJCcnREYlRhYmxlMTVcIiB9LFxuMHgwODQ5OiB7IG46XCJCcnRCZWdpbkRhdGFNb2RlbFwiIH0sXG4weDA4NEE6IHsgbjpcIkJydEVuZERhdGFNb2RlbFwiIH0sXG4weDA4NEI6IHsgbjpcIkJydEJlZ2luTW9kZWxUYWJsZXNcIiB9LFxuMHgwODRDOiB7IG46XCJCcnRFbmRNb2RlbFRhYmxlc1wiIH0sXG4weDA4NEQ6IHsgbjpcIkJydE1vZGVsVGFibGVcIiB9LFxuMHgwODRFOiB7IG46XCJCcnRCZWdpbk1vZGVsUmVsYXRpb25zaGlwc1wiIH0sXG4weDA4NEY6IHsgbjpcIkJydEVuZE1vZGVsUmVsYXRpb25zaGlwc1wiIH0sXG4weDA4NTA6IHsgbjpcIkJydE1vZGVsUmVsYXRpb25zaGlwXCIgfSxcbjB4MDg1MTogeyBuOlwiQnJ0QmVnaW5FQ1R4dFdpejE1XCIgfSxcbjB4MDg1MjogeyBuOlwiQnJ0RW5kRUNUeHRXaXoxNVwiIH0sXG4weDA4NTM6IHsgbjpcIkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QxNVwiIH0sXG4weDA4NTQ6IHsgbjpcIkJydEVuZEVDVFdGbGRJbmZvTHN0MTVcIiB9LFxuMHgwODU1OiB7IG46XCJCcnRCZWdpbkVDVFdGbGRJbmZvMTVcIiB9LFxuMHgwODU2OiB7IG46XCJCcnRGaWVsZExpc3RBY3RpdmVJdGVtXCIgfSxcbjB4MDg1NzogeyBuOlwiQnJ0UGl2b3RDYWNoZUlkVmVyc2lvblwiIH0sXG4weDA4NTg6IHsgbjpcIkJydFNYREkxNVwiIH0sXG4weEZGRkY6IHsgbjpcIlwiIH1cbn07XG5cbnZhciBYTFNCUkUgPSBldmVydF9rZXkoWExTQlJlY29yZEVudW0sICduJyk7XG5cbi8qIFtNUy1YTFNdIDIuMyBSZWNvcmQgRW51bWVyYXRpb24gKi9cbnZhciBYTFNSZWNvcmRFbnVtID0ge1xuMHgwMDAzOiB7IG46XCJCSUZGMk5VTVwiLCBmOnBhcnNlX0JJRkYyTlVNIH0sXG4weDAwMDQ6IHsgbjpcIkJJRkYyU1RSXCIsIGY6cGFyc2VfQklGRjJTVFIgfSxcbjB4MDAwNjogeyBuOlwiRm9ybXVsYVwiLCBmOnBhcnNlX0Zvcm11bGEgfSxcbjB4MDAwOTogeyBuOidCT0YnLCBmOnBhcnNlX0JPRiB9LFxuMHgwMDBhOiB7IG46J0VPRicsIGY6cGFyc2Vub29wMiB9LFxuMHgwMDBjOiB7IG46XCJDYWxjQ291bnRcIiwgZjpwYXJzZXVpbnQxNiB9LFxuMHgwMDBkOiB7IG46XCJDYWxjTW9kZVwiLCBmOnBhcnNldWludDE2IH0sXG4weDAwMGU6IHsgbjpcIkNhbGNQcmVjaXNpb25cIiwgZjpwYXJzZWJvb2wgfSxcbjB4MDAwZjogeyBuOlwiQ2FsY1JlZk1vZGVcIiwgZjpwYXJzZWJvb2wgfSxcbjB4MDAxMDogeyBuOlwiQ2FsY0RlbHRhXCIsIGY6cGFyc2VfWG51bSB9LFxuMHgwMDExOiB7IG46XCJDYWxjSXRlclwiLCBmOnBhcnNlYm9vbCB9LFxuMHgwMDEyOiB7IG46XCJQcm90ZWN0XCIsIGY6cGFyc2Vib29sIH0sXG4weDAwMTM6IHsgbjpcIlBhc3N3b3JkXCIsIGY6cGFyc2V1aW50MTYgfSxcbjB4MDAxNDogeyBuOlwiSGVhZGVyXCIsIGY6cGFyc2VfWExIZWFkZXJGb290ZXIgfSxcbjB4MDAxNTogeyBuOlwiRm9vdGVyXCIsIGY6cGFyc2VfWExIZWFkZXJGb290ZXIgfSxcbjB4MDAxNzogeyBuOlwiRXh0ZXJuU2hlZXRcIiwgZjpwYXJzZV9FeHRlcm5TaGVldCB9LFxuMHgwMDE4OiB7IG46XCJMYmxcIiwgZjpwYXJzZV9MYmwgfSxcbjB4MDAxOTogeyBuOlwiV2luUHJvdGVjdFwiLCBmOnBhcnNlYm9vbCB9LFxuMHgwMDFhOiB7IG46XCJWZXJ0aWNhbFBhZ2VCcmVha3NcIiB9LFxuMHgwMDFiOiB7IG46XCJIb3Jpem9udGFsUGFnZUJyZWFrc1wiIH0sXG4weDAwMWM6IHsgbjpcIk5vdGVcIiwgZjpwYXJzZV9Ob3RlIH0sXG4weDAwMWQ6IHsgbjpcIlNlbGVjdGlvblwiIH0sXG4weDAwMjI6IHsgbjpcIkRhdGUxOTA0XCIsIGY6cGFyc2Vib29sIH0sXG4weDAwMjM6IHsgbjpcIkV4dGVybk5hbWVcIiwgZjpwYXJzZV9FeHRlcm5OYW1lIH0sXG4weDAwMjY6IHsgbjpcIkxlZnRNYXJnaW5cIiwgZjpwYXJzZV9YbnVtIH0sXG4weDAwMjc6IHsgbjpcIlJpZ2h0TWFyZ2luXCIsIGY6cGFyc2VfWG51bSB9LFxuMHgwMDI4OiB7IG46XCJUb3BNYXJnaW5cIiwgZjpwYXJzZV9YbnVtIH0sXG4weDAwMjk6IHsgbjpcIkJvdHRvbU1hcmdpblwiLCBmOnBhcnNlX1hudW0gfSxcbjB4MDAyYTogeyBuOlwiUHJpbnRSb3dDb2xcIiwgZjpwYXJzZWJvb2wgfSxcbjB4MDAyYjogeyBuOlwiUHJpbnRHcmlkXCIsIGY6cGFyc2Vib29sIH0sXG4weDAwMmY6IHsgbjpcIkZpbGVQYXNzXCIsIGY6cGFyc2VfRmlsZVBhc3MgfSxcbjB4MDAzMTogeyBuOlwiRm9udFwiLCBmOnBhcnNlX0ZvbnQgfSxcbjB4MDAzMzogeyBuOlwiUHJpbnRTaXplXCIsIGY6cGFyc2V1aW50MTYgfSxcbjB4MDAzYzogeyBuOlwiQ29udGludWVcIiB9LFxuMHgwMDNkOiB7IG46XCJXaW5kb3cxXCIsIGY6cGFyc2VfV2luZG93MSB9LFxuMHgwMDQwOiB7IG46XCJCYWNrdXBcIiwgZjpwYXJzZWJvb2wgfSxcbjB4MDA0MTogeyBuOlwiUGFuZVwiIH0sXG4weDAwNDI6IHsgbjonQ29kZVBhZ2UnLCBmOnBhcnNldWludDE2IH0sXG4weDAwNGQ6IHsgbjpcIlBsc1wiIH0sXG4weDAwNTA6IHsgbjpcIkRDb25cIiB9LFxuMHgwMDUxOiB7IG46XCJEQ29uUmVmXCIgfSxcbjB4MDA1MjogeyBuOlwiRENvbk5hbWVcIiB9LFxuMHgwMDU1OiB7IG46XCJEZWZDb2xXaWR0aFwiLCBmOnBhcnNldWludDE2IH0sXG4weDAwNTk6IHsgbjpcIlhDVFwiIH0sXG4weDAwNWE6IHsgbjpcIkNSTlwiIH0sXG4weDAwNWI6IHsgbjpcIkZpbGVTaGFyaW5nXCIgfSxcbjB4MDA1YzogeyBuOidXcml0ZUFjY2VzcycsIGY6cGFyc2VfV3JpdGVBY2Nlc3MgfSxcbjB4MDA1ZDogeyBuOlwiT2JqXCIsIGY6cGFyc2VfT2JqIH0sXG4weDAwNWU6IHsgbjpcIlVuY2FsY2VkXCIgfSxcbjB4MDA1ZjogeyBuOlwiQ2FsY1NhdmVSZWNhbGNcIiwgZjpwYXJzZWJvb2wgfSxcbjB4MDA2MDogeyBuOlwiVGVtcGxhdGVcIiB9LFxuMHgwMDYxOiB7IG46XCJJbnRsXCIgfSxcbjB4MDA2MzogeyBuOlwiT2JqUHJvdGVjdFwiLCBmOnBhcnNlYm9vbCB9LFxuMHgwMDdkOiB7IG46XCJDb2xJbmZvXCIsIGY6cGFyc2VfQ29sSW5mbyB9LFxuMHgwMDgwOiB7IG46XCJHdXRzXCIsIGY6cGFyc2VfR3V0cyB9LFxuMHgwMDgxOiB7IG46XCJXc0Jvb2xcIiwgZjpwYXJzZV9Xc0Jvb2wgfSxcbjB4MDA4MjogeyBuOlwiR3JpZFNldFwiLCBmOnBhcnNldWludDE2IH0sXG4weDAwODM6IHsgbjpcIkhDZW50ZXJcIiwgZjpwYXJzZWJvb2wgfSxcbjB4MDA4NDogeyBuOlwiVkNlbnRlclwiLCBmOnBhcnNlYm9vbCB9LFxuMHgwMDg1OiB7IG46J0JvdW5kU2hlZXQ4JywgZjpwYXJzZV9Cb3VuZFNoZWV0OCB9LFxuMHgwMDg2OiB7IG46XCJXcml0ZVByb3RlY3RcIiB9LFxuMHgwMDhjOiB7IG46XCJDb3VudHJ5XCIsIGY6cGFyc2VfQ291bnRyeSB9LFxuMHgwMDhkOiB7IG46XCJIaWRlT2JqXCIsIGY6cGFyc2V1aW50MTYgfSxcbjB4MDA5MDogeyBuOlwiU29ydFwiIH0sXG4weDAwOTI6IHsgbjpcIlBhbGV0dGVcIiwgZjpwYXJzZV9QYWxldHRlIH0sXG4weDAwOTc6IHsgbjpcIlN5bmNcIiB9LFxuMHgwMDk4OiB7IG46XCJMUHJcIiB9LFxuMHgwMDk5OiB7IG46XCJEeEdDb2xcIiB9LFxuMHgwMDlhOiB7IG46XCJGbkdyb3VwTmFtZVwiIH0sXG4weDAwOWI6IHsgbjpcIkZpbHRlck1vZGVcIiB9LFxuMHgwMDljOiB7IG46XCJCdWlsdEluRm5Hcm91cENvdW50XCIsIGY6cGFyc2V1aW50MTYgfSxcbjB4MDA5ZDogeyBuOlwiQXV0b0ZpbHRlckluZm9cIiB9LFxuMHgwMDllOiB7IG46XCJBdXRvRmlsdGVyXCIgfSxcbjB4MDBhMDogeyBuOlwiU2NsXCIsIGY6cGFyc2VfU2NsIH0sXG4weDAwYTE6IHsgbjpcIlNldHVwXCIsIGY6cGFyc2VfU2V0dXAgfSxcbjB4MDBhZTogeyBuOlwiU2Nlbk1hblwiIH0sXG4weDAwYWY6IHsgbjpcIlNDRU5BUklPXCIgfSxcbjB4MDBiMDogeyBuOlwiU3hWaWV3XCIgfSxcbjB4MDBiMTogeyBuOlwiU3h2ZFwiIH0sXG4weDAwYjI6IHsgbjpcIlNYVklcIiB9LFxuMHgwMGI0OiB7IG46XCJTeEl2ZFwiIH0sXG4weDAwYjU6IHsgbjpcIlNYTElcIiB9LFxuMHgwMGI2OiB7IG46XCJTWFBJXCIgfSxcbjB4MDBiODogeyBuOlwiRG9jUm91dGVcIiB9LFxuMHgwMGI5OiB7IG46XCJSZWNpcE5hbWVcIiB9LFxuMHgwMGJkOiB7IG46XCJNdWxSa1wiLCBmOnBhcnNlX011bFJrIH0sXG4weDAwYmU6IHsgbjpcIk11bEJsYW5rXCIsIGY6cGFyc2VfTXVsQmxhbmsgfSxcbjB4MDBjMTogeyBuOidNbXMnLCBmOnBhcnNlbm9vcDIgfSxcbjB4MDBjNTogeyBuOlwiU1hESVwiIH0sXG4weDAwYzY6IHsgbjpcIlNYREJcIiB9LFxuMHgwMGM3OiB7IG46XCJTWEZEQlwiIH0sXG4weDAwYzg6IHsgbjpcIlNYREJCXCIgfSxcbjB4MDBjOTogeyBuOlwiU1hOdW1cIiB9LFxuMHgwMGNhOiB7IG46XCJTeEJvb2xcIiwgZjpwYXJzZWJvb2wgfSxcbjB4MDBjYjogeyBuOlwiU3hFcnJcIiB9LFxuMHgwMGNjOiB7IG46XCJTWEludFwiIH0sXG4weDAwY2Q6IHsgbjpcIlNYU3RyaW5nXCIgfSxcbjB4MDBjZTogeyBuOlwiU1hEdHJcIiB9LFxuMHgwMGNmOiB7IG46XCJTeE5pbFwiIH0sXG4weDAwZDA6IHsgbjpcIlNYVGJsXCIgfSxcbjB4MDBkMTogeyBuOlwiU1hUQlJHSUlUTVwiIH0sXG4weDAwZDI6IHsgbjpcIlN4VGJwZ1wiIH0sXG4weDAwZDM6IHsgbjpcIk9iUHJvalwiIH0sXG4weDAwZDU6IHsgbjpcIlNYU3RyZWFtSURcIiB9LFxuMHgwMGQ3OiB7IG46XCJEQkNlbGxcIiB9LFxuMHgwMGQ4OiB7IG46XCJTWFJuZ1wiIH0sXG4weDAwZDk6IHsgbjpcIlN4SXN4b3BlclwiIH0sXG4weDAwZGE6IHsgbjpcIkJvb2tCb29sXCIsIGY6cGFyc2V1aW50MTYgfSxcbjB4MDBkYzogeyBuOlwiRGJPclBhcmFtUXJ5XCIgfSxcbjB4MDBkZDogeyBuOlwiU2NlbmFyaW9Qcm90ZWN0XCIsIGY6cGFyc2Vib29sIH0sXG4weDAwZGU6IHsgbjpcIk9sZU9iamVjdFNpemVcIiB9LFxuMHgwMGUwOiB7IG46XCJYRlwiLCBmOnBhcnNlX1hGIH0sXG4weDAwZTE6IHsgbjonSW50ZXJmYWNlSGRyJywgZjpwYXJzZV9JbnRlcmZhY2VIZHIgfSxcbjB4MDBlMjogeyBuOidJbnRlcmZhY2VFbmQnLCBmOnBhcnNlbm9vcDIgfSxcbjB4MDBlMzogeyBuOlwiU1hWU1wiIH0sXG4weDAwZTU6IHsgbjpcIk1lcmdlQ2VsbHNcIiwgZjpwYXJzZV9NZXJnZUNlbGxzIH0sXG4weDAwZTk6IHsgbjpcIkJrSGltXCIgfSxcbjB4MDBlYjogeyBuOlwiTXNvRHJhd2luZ0dyb3VwXCIgfSxcbjB4MDBlYzogeyBuOlwiTXNvRHJhd2luZ1wiIH0sXG4weDAwZWQ6IHsgbjpcIk1zb0RyYXdpbmdTZWxlY3Rpb25cIiB9LFxuMHgwMGVmOiB7IG46XCJQaG9uZXRpY0luZm9cIiB9LFxuMHgwMGYwOiB7IG46XCJTeFJ1bGVcIiB9LFxuMHgwMGYxOiB7IG46XCJTWEV4XCIgfSxcbjB4MDBmMjogeyBuOlwiU3hGaWx0XCIgfSxcbjB4MDBmNDogeyBuOlwiU3hEWEZcIiB9LFxuMHgwMGY1OiB7IG46XCJTeEl0bVwiIH0sXG4weDAwZjY6IHsgbjpcIlN4TmFtZVwiIH0sXG4weDAwZjc6IHsgbjpcIlN4U2VsZWN0XCIgfSxcbjB4MDBmODogeyBuOlwiU1hQYWlyXCIgfSxcbjB4MDBmOTogeyBuOlwiU3hGbWxhXCIgfSxcbjB4MDBmYjogeyBuOlwiU3hGb3JtYXRcIiB9LFxuMHgwMGZjOiB7IG46XCJTU1RcIiwgZjpwYXJzZV9TU1QgfSxcbjB4MDBmZDogeyBuOlwiTGFiZWxTc3RcIiwgZjpwYXJzZV9MYWJlbFNzdCB9LFxuMHgwMGZmOiB7IG46XCJFeHRTU1RcIiwgZjpwYXJzZV9FeHRTU1QgfSxcbjB4MDEwMDogeyBuOlwiU1hWREV4XCIgfSxcbjB4MDEwMzogeyBuOlwiU1hGb3JtdWxhXCIgfSxcbjB4MDEyMjogeyBuOlwiU1hEQkV4XCIgfSxcbjB4MDEzNzogeyBuOlwiUlJESW5zRGVsXCIgfSxcbjB4MDEzODogeyBuOlwiUlJESGVhZFwiIH0sXG4weDAxM2I6IHsgbjpcIlJSRENoZ0NlbGxcIiB9LFxuMHgwMTNkOiB7IG46XCJSUlRhYklkXCIsIGY6cGFyc2V1aW50MTZhIH0sXG4weDAxM2U6IHsgbjpcIlJSRFJlblNoZWV0XCIgfSxcbjB4MDEzZjogeyBuOlwiUlJTb3J0XCIgfSxcbjB4MDE0MDogeyBuOlwiUlJETW92ZVwiIH0sXG4weDAxNGE6IHsgbjpcIlJSRm9ybWF0XCIgfSxcbjB4MDE0YjogeyBuOlwiUlJBdXRvRm10XCIgfSxcbjB4MDE0ZDogeyBuOlwiUlJJbnNlcnRTaFwiIH0sXG4weDAxNGU6IHsgbjpcIlJSRE1vdmVCZWdpblwiIH0sXG4weDAxNGY6IHsgbjpcIlJSRE1vdmVFbmRcIiB9LFxuMHgwMTUwOiB7IG46XCJSUkRJbnNEZWxCZWdpblwiIH0sXG4weDAxNTE6IHsgbjpcIlJSREluc0RlbEVuZFwiIH0sXG4weDAxNTI6IHsgbjpcIlJSRENvbmZsaWN0XCIgfSxcbjB4MDE1MzogeyBuOlwiUlJERGVmTmFtZVwiIH0sXG4weDAxNTQ6IHsgbjpcIlJSRFJzdEV0eHBcIiB9LFxuMHgwMTVmOiB7IG46XCJMUm5nXCIgfSxcbjB4MDE2MDogeyBuOlwiVXNlc0VMRnNcIiwgZjpwYXJzZWJvb2wgfSxcbjB4MDE2MTogeyBuOlwiRFNGXCIsIGY6cGFyc2Vub29wMiB9LFxuMHgwMTkxOiB7IG46XCJDVXNyXCIgfSxcbjB4MDE5MjogeyBuOlwiQ2JVc3JcIiB9LFxuMHgwMTkzOiB7IG46XCJVc3JJbmZvXCIgfSxcbjB4MDE5NDogeyBuOlwiVXNyRXhjbFwiIH0sXG4weDAxOTU6IHsgbjpcIkZpbGVMb2NrXCIgfSxcbjB4MDE5NjogeyBuOlwiUlJESW5mb1wiIH0sXG4weDAxOTc6IHsgbjpcIkJDVXNyc1wiIH0sXG4weDAxOTg6IHsgbjpcIlVzckNoa1wiIH0sXG4weDAxYTk6IHsgbjpcIlVzZXJCVmlld1wiIH0sXG4weDAxYWE6IHsgbjpcIlVzZXJTVmlld0JlZ2luXCIgfSxcbjB4MDFhYjogeyBuOlwiVXNlclNWaWV3RW5kXCIgfSxcbjB4MDFhYzogeyBuOlwiUlJEVXNlclZpZXdcIiB9LFxuMHgwMWFkOiB7IG46XCJRc2lcIiB9LFxuMHgwMWFlOiB7IG46XCJTdXBCb29rXCIsIGY6cGFyc2VfU3VwQm9vayB9LFxuMHgwMWFmOiB7IG46XCJQcm90NFJldlwiLCBmOnBhcnNlYm9vbCB9LFxuMHgwMWIwOiB7IG46XCJDb25kRm10XCIgfSxcbjB4MDFiMTogeyBuOlwiQ0ZcIiB9LFxuMHgwMWIyOiB7IG46XCJEVmFsXCIgfSxcbjB4MDFiNTogeyBuOlwiRENvbkJpblwiIH0sXG4weDAxYjY6IHsgbjpcIlR4T1wiLCBmOnBhcnNlX1R4TyB9LFxuMHgwMWI3OiB7IG46XCJSZWZyZXNoQWxsXCIsIGY6cGFyc2Vib29sIH0sXG4weDAxYjg6IHsgbjpcIkhMaW5rXCIsIGY6cGFyc2VfSExpbmsgfSxcbjB4MDFiOTogeyBuOlwiTGVsXCIgfSxcbjB4MDFiYTogeyBuOlwiQ29kZU5hbWVcIiwgZjpwYXJzZV9YTFVuaWNvZGVTdHJpbmcgfSxcbjB4MDFiYjogeyBuOlwiU1hGREJUeXBlXCIgfSxcbjB4MDFiYzogeyBuOlwiUHJvdDRSZXZQYXNzXCIsIGY6cGFyc2V1aW50MTYgfSxcbjB4MDFiZDogeyBuOlwiT2JOb01hY3Jvc1wiIH0sXG4weDAxYmU6IHsgbjpcIkR2XCIgfSxcbjB4MDFjMDogeyBuOlwiRXhjZWw5RmlsZVwiLCBmOnBhcnNlbm9vcDIgfSxcbjB4MDFjMTogeyBuOlwiUmVjYWxjSWRcIiwgZjpwYXJzZV9SZWNhbGNJZCwgcjoyfSxcbjB4MDFjMjogeyBuOlwiRW50RXhVMlwiLCBmOnBhcnNlbm9vcDIgfSxcbjB4MDIwMDogeyBuOlwiRGltZW5zaW9uc1wiLCBmOnBhcnNlX0RpbWVuc2lvbnMgfSxcbjB4MDIwMTogeyBuOlwiQmxhbmtcIiwgZjpwYXJzZV9CbGFuayB9LFxuMHgwMjAzOiB7IG46XCJOdW1iZXJcIiwgZjpwYXJzZV9OdW1iZXIgfSxcbjB4MDIwNDogeyBuOlwiTGFiZWxcIiwgZjpwYXJzZV9MYWJlbCB9LFxuMHgwMjA1OiB7IG46XCJCb29sRXJyXCIsIGY6cGFyc2VfQm9vbEVyciB9LFxuMHgwMjA2OiB7IG46XCJGb3JtdWxhXCIsIGY6cGFyc2VfRm9ybXVsYSB9LFxuMHgwMjA3OiB7IG46XCJTdHJpbmdcIiwgZjpwYXJzZV9TdHJpbmcgfSxcbjB4MDIwODogeyBuOidSb3cnLCBmOnBhcnNlX1JvdyB9LFxuMHgwMjBiOiB7IG46XCJJbmRleFwiIH0sXG4weDAyMjE6IHsgbjpcIkFycmF5XCIsIGY6cGFyc2VfQXJyYXkgfSxcbjB4MDIyNTogeyBuOlwiRGVmYXVsdFJvd0hlaWdodFwiLCBmOnBhcnNlX0RlZmF1bHRSb3dIZWlnaHQgfSxcbjB4MDIzNjogeyBuOlwiVGFibGVcIiB9LFxuMHgwMjNlOiB7IG46XCJXaW5kb3cyXCIsIGY6cGFyc2VfV2luZG93MiB9LFxuMHgwMjdlOiB7IG46XCJSS1wiLCBmOnBhcnNlX1JLIH0sXG4weDAyOTM6IHsgbjpcIlN0eWxlXCIgfSxcbjB4MDQwNjogeyBuOlwiRm9ybXVsYVwiLCBmOnBhcnNlX0Zvcm11bGEgfSxcbjB4MDQxODogeyBuOlwiQmlnTmFtZVwiIH0sXG4weDA0MWU6IHsgbjpcIkZvcm1hdFwiLCBmOnBhcnNlX0Zvcm1hdCB9LFxuMHgwNDNjOiB7IG46XCJDb250aW51ZUJpZ05hbWVcIiB9LFxuMHgwNGJjOiB7IG46XCJTaHJGbWxhXCIsIGY6cGFyc2VfU2hyRm1sYSB9LFxuMHgwODAwOiB7IG46XCJITGlua1Rvb2x0aXBcIiwgZjpwYXJzZV9ITGlua1Rvb2x0aXAgfSxcbjB4MDgwMTogeyBuOlwiV2ViUHViXCIgfSxcbjB4MDgwMjogeyBuOlwiUXNpU1hUYWdcIiB9LFxuMHgwODAzOiB7IG46XCJEQlF1ZXJ5RXh0XCIgfSxcbjB4MDgwNDogeyBuOlwiRXh0U3RyaW5nXCIgfSxcbjB4MDgwNTogeyBuOlwiVHh0UXJ5XCIgfSxcbjB4MDgwNjogeyBuOlwiUXNpclwiIH0sXG4weDA4MDc6IHsgbjpcIlFzaWZcIiB9LFxuMHgwODA4OiB7IG46XCJSUkRUUVNJRlwiIH0sXG4weDA4MDk6IHsgbjonQk9GJywgZjpwYXJzZV9CT0YgfSxcbjB4MDgwYTogeyBuOlwiT2xlRGJDb25uXCIgfSxcbjB4MDgwYjogeyBuOlwiV09wdFwiIH0sXG4weDA4MGM6IHsgbjpcIlNYVmlld0V4XCIgfSxcbjB4MDgwZDogeyBuOlwiU1hUSFwiIH0sXG4weDA4MGU6IHsgbjpcIlNYUElFeFwiIH0sXG4weDA4MGY6IHsgbjpcIlNYVkRURXhcIiB9LFxuMHgwODEwOiB7IG46XCJTWFZpZXdFeDlcIiB9LFxuMHgwODEyOiB7IG46XCJDb250aW51ZUZydFwiIH0sXG4weDA4MTM6IHsgbjpcIlJlYWxUaW1lRGF0YVwiIH0sXG4weDA4NTA6IHsgbjpcIkNoYXJ0RnJ0SW5mb1wiIH0sXG4weDA4NTE6IHsgbjpcIkZydFdyYXBwZXJcIiB9LFxuMHgwODUyOiB7IG46XCJTdGFydEJsb2NrXCIgfSxcbjB4MDg1MzogeyBuOlwiRW5kQmxvY2tcIiB9LFxuMHgwODU0OiB7IG46XCJTdGFydE9iamVjdFwiIH0sXG4weDA4NTU6IHsgbjpcIkVuZE9iamVjdFwiIH0sXG4weDA4NTY6IHsgbjpcIkNhdExhYlwiIH0sXG4weDA4NTc6IHsgbjpcIllNdWx0XCIgfSxcbjB4MDg1ODogeyBuOlwiU1hWaWV3TGlua1wiIH0sXG4weDA4NTk6IHsgbjpcIlBpdm90Q2hhcnRCaXRzXCIgfSxcbjB4MDg1YTogeyBuOlwiRnJ0Rm9udExpc3RcIiB9LFxuMHgwODYyOiB7IG46XCJTaGVldEV4dFwiIH0sXG4weDA4NjM6IHsgbjpcIkJvb2tFeHRcIiwgcjoxMn0sXG4weDA4NjQ6IHsgbjpcIlNYQWRkbFwiIH0sXG4weDA4NjU6IHsgbjpcIkNyRXJyXCIgfSxcbjB4MDg2NjogeyBuOlwiSEZQaWN0dXJlXCIgfSxcbjB4MDg2NzogeyBuOidGZWF0SGRyJywgZjpwYXJzZW5vb3AyIH0sXG4weDA4Njg6IHsgbjpcIkZlYXRcIiB9LFxuMHgwODZhOiB7IG46XCJEYXRhTGFiRXh0XCIgfSxcbjB4MDg2YjogeyBuOlwiRGF0YUxhYkV4dENvbnRlbnRzXCIgfSxcbjB4MDg2YzogeyBuOlwiQ2VsbFdhdGNoXCIgfSxcbjB4MDg3MTogeyBuOlwiRmVhdEhkcjExXCIgfSxcbjB4MDg3MjogeyBuOlwiRmVhdHVyZTExXCIgfSxcbjB4MDg3NDogeyBuOlwiRHJvcERvd25PYmpJZHNcIiB9LFxuMHgwODc1OiB7IG46XCJDb250aW51ZUZydDExXCIgfSxcbjB4MDg3NjogeyBuOlwiRENvbm5cIiB9LFxuMHgwODc3OiB7IG46XCJMaXN0MTJcIiB9LFxuMHgwODc4OiB7IG46XCJGZWF0dXJlMTJcIiB9LFxuMHgwODc5OiB7IG46XCJDb25kRm10MTJcIiB9LFxuMHgwODdhOiB7IG46XCJDRjEyXCIgfSxcbjB4MDg3YjogeyBuOlwiQ0ZFeFwiIH0sXG4weDA4N2M6IHsgbjpcIlhGQ1JDXCIsIGY6cGFyc2VfWEZDUkMsIHI6MTIgfSxcbjB4MDg3ZDogeyBuOlwiWEZFeHRcIiwgZjpwYXJzZV9YRkV4dCwgcjoxMiB9LFxuMHgwODdlOiB7IG46XCJBdXRvRmlsdGVyMTJcIiB9LFxuMHgwODdmOiB7IG46XCJDb250aW51ZUZydDEyXCIgfSxcbjB4MDg4NDogeyBuOlwiTURUSW5mb1wiIH0sXG4weDA4ODU6IHsgbjpcIk1EWFN0clwiIH0sXG4weDA4ODY6IHsgbjpcIk1EWFR1cGxlXCIgfSxcbjB4MDg4NzogeyBuOlwiTURYU2V0XCIgfSxcbjB4MDg4ODogeyBuOlwiTURYUHJvcFwiIH0sXG4weDA4ODk6IHsgbjpcIk1EWEtQSVwiIH0sXG4weDA4OGE6IHsgbjpcIk1EQlwiIH0sXG4weDA4OGI6IHsgbjpcIlBMVlwiIH0sXG4weDA4OGM6IHsgbjpcIkNvbXBhdDEyXCIsIGY6cGFyc2Vib29sLCByOjEyIH0sXG4weDA4OGQ6IHsgbjpcIkRYRlwiIH0sXG4weDA4OGU6IHsgbjpcIlRhYmxlU3R5bGVzXCIsIHI6MTIgfSxcbjB4MDg4ZjogeyBuOlwiVGFibGVTdHlsZVwiIH0sXG4weDA4OTA6IHsgbjpcIlRhYmxlU3R5bGVFbGVtZW50XCIgfSxcbjB4MDg5MjogeyBuOlwiU3R5bGVFeHRcIiB9LFxuMHgwODkzOiB7IG46XCJOYW1lUHVibGlzaFwiIH0sXG4weDA4OTQ6IHsgbjpcIk5hbWVDbXRcIiwgZjpwYXJzZV9OYW1lQ210LCByOjEyIH0sXG4weDA4OTU6IHsgbjpcIlNvcnREYXRhXCIgfSxcbjB4MDg5NjogeyBuOlwiVGhlbWVcIiwgZjpwYXJzZV9UaGVtZSwgcjoxMiB9LFxuMHgwODk3OiB7IG46XCJHVUlEVHlwZUxpYlwiIH0sXG4weDA4OTg6IHsgbjpcIkZuR3JwMTJcIiB9LFxuMHgwODk5OiB7IG46XCJOYW1lRm5HcnAxMlwiIH0sXG4weDA4OWE6IHsgbjpcIk1UUlNldHRpbmdzXCIsIGY6cGFyc2VfTVRSU2V0dGluZ3MsIHI6MTIgfSxcbjB4MDg5YjogeyBuOlwiQ29tcHJlc3NQaWN0dXJlc1wiLCBmOnBhcnNlbm9vcDIgfSxcbjB4MDg5YzogeyBuOlwiSGVhZGVyRm9vdGVyXCIgfSxcbjB4MDg5ZDogeyBuOlwiQ3J0TGF5b3V0MTJcIiB9LFxuMHgwODllOiB7IG46XCJDcnRNbEZydFwiIH0sXG4weDA4OWY6IHsgbjpcIkNydE1sRnJ0Q29udGludWVcIiB9LFxuMHgwOGEzOiB7IG46XCJGb3JjZUZ1bGxDYWxjdWxhdGlvblwiLCBmOnBhcnNlX0ZvcmNlRnVsbENhbGN1bGF0aW9uIH0sXG4weDA4YTQ6IHsgbjpcIlNoYXBlUHJvcHNTdHJlYW1cIiB9LFxuMHgwOGE1OiB7IG46XCJUZXh0UHJvcHNTdHJlYW1cIiB9LFxuMHgwOGE2OiB7IG46XCJSaWNoVGV4dFN0cmVhbVwiIH0sXG4weDA4YTc6IHsgbjpcIkNydExheW91dDEyQVwiIH0sXG4weDEwMDE6IHsgbjpcIlVuaXRzXCIgfSxcbjB4MTAwMjogeyBuOlwiQ2hhcnRcIiB9LFxuMHgxMDAzOiB7IG46XCJTZXJpZXNcIiB9LFxuMHgxMDA2OiB7IG46XCJEYXRhRm9ybWF0XCIgfSxcbjB4MTAwNzogeyBuOlwiTGluZUZvcm1hdFwiIH0sXG4weDEwMDk6IHsgbjpcIk1hcmtlckZvcm1hdFwiIH0sXG4weDEwMGE6IHsgbjpcIkFyZWFGb3JtYXRcIiB9LFxuMHgxMDBiOiB7IG46XCJQaWVGb3JtYXRcIiB9LFxuMHgxMDBjOiB7IG46XCJBdHRhY2hlZExhYmVsXCIgfSxcbjB4MTAwZDogeyBuOlwiU2VyaWVzVGV4dFwiIH0sXG4weDEwMTQ6IHsgbjpcIkNoYXJ0Rm9ybWF0XCIgfSxcbjB4MTAxNTogeyBuOlwiTGVnZW5kXCIgfSxcbjB4MTAxNjogeyBuOlwiU2VyaWVzTGlzdFwiIH0sXG4weDEwMTc6IHsgbjpcIkJhclwiIH0sXG4weDEwMTg6IHsgbjpcIkxpbmVcIiB9LFxuMHgxMDE5OiB7IG46XCJQaWVcIiB9LFxuMHgxMDFhOiB7IG46XCJBcmVhXCIgfSxcbjB4MTAxYjogeyBuOlwiU2NhdHRlclwiIH0sXG4weDEwMWM6IHsgbjpcIkNydExpbmVcIiB9LFxuMHgxMDFkOiB7IG46XCJBeGlzXCIgfSxcbjB4MTAxZTogeyBuOlwiVGlja1wiIH0sXG4weDEwMWY6IHsgbjpcIlZhbHVlUmFuZ2VcIiB9LFxuMHgxMDIwOiB7IG46XCJDYXRTZXJSYW5nZVwiIH0sXG4weDEwMjE6IHsgbjpcIkF4aXNMaW5lXCIgfSxcbjB4MTAyMjogeyBuOlwiQ3J0TGlua1wiIH0sXG4weDEwMjQ6IHsgbjpcIkRlZmF1bHRUZXh0XCIgfSxcbjB4MTAyNTogeyBuOlwiVGV4dFwiIH0sXG4weDEwMjY6IHsgbjpcIkZvbnRYXCIsIGY6cGFyc2V1aW50MTYgfSxcbjB4MTAyNzogeyBuOlwiT2JqZWN0TGlua1wiIH0sXG4weDEwMzI6IHsgbjpcIkZyYW1lXCIgfSxcbjB4MTAzMzogeyBuOlwiQmVnaW5cIiB9LFxuMHgxMDM0OiB7IG46XCJFbmRcIiB9LFxuMHgxMDM1OiB7IG46XCJQbG90QXJlYVwiIH0sXG4weDEwM2E6IHsgbjpcIkNoYXJ0M2RcIiB9LFxuMHgxMDNjOiB7IG46XCJQaWNGXCIgfSxcbjB4MTAzZDogeyBuOlwiRHJvcEJhclwiIH0sXG4weDEwM2U6IHsgbjpcIlJhZGFyXCIgfSxcbjB4MTAzZjogeyBuOlwiU3VyZlwiIH0sXG4weDEwNDA6IHsgbjpcIlJhZGFyQXJlYVwiIH0sXG4weDEwNDE6IHsgbjpcIkF4aXNQYXJlbnRcIiB9LFxuMHgxMDQzOiB7IG46XCJMZWdlbmRFeGNlcHRpb25cIiB9LFxuMHgxMDQ0OiB7IG46XCJTaHRQcm9wc1wiLCBmOnBhcnNlX1NodFByb3BzIH0sXG4weDEwNDU6IHsgbjpcIlNlclRvQ3J0XCIgfSxcbjB4MTA0NjogeyBuOlwiQXhlc1VzZWRcIiB9LFxuMHgxMDQ4OiB7IG46XCJTQmFzZVJlZlwiIH0sXG4weDEwNGE6IHsgbjpcIlNlclBhcmVudFwiIH0sXG4weDEwNGI6IHsgbjpcIlNlckF1eFRyZW5kXCIgfSxcbjB4MTA0ZTogeyBuOlwiSUZtdFJlY29yZFwiIH0sXG4weDEwNGY6IHsgbjpcIlBvc1wiIH0sXG4weDEwNTA6IHsgbjpcIkFsUnVuc1wiIH0sXG4weDEwNTE6IHsgbjpcIkJSQUlcIiB9LFxuMHgxMDViOiB7IG46XCJTZXJBdXhFcnJCYXJcIiB9LFxuMHgxMDVjOiB7IG46XCJDbHJ0Q2xpZW50XCIsIGY6cGFyc2VfQ2xydENsaWVudCB9LFxuMHgxMDVkOiB7IG46XCJTZXJGbXRcIiB9LFxuMHgxMDVmOiB7IG46XCJDaGFydDNEQmFyU2hhcGVcIiB9LFxuMHgxMDYwOiB7IG46XCJGYmlcIiB9LFxuMHgxMDYxOiB7IG46XCJCb3BQb3BcIiB9LFxuMHgxMDYyOiB7IG46XCJBeGNFeHRcIiB9LFxuMHgxMDYzOiB7IG46XCJEYXRcIiB9LFxuMHgxMDY0OiB7IG46XCJQbG90R3Jvd3RoXCIgfSxcbjB4MTA2NTogeyBuOlwiU0lJbmRleFwiIH0sXG4weDEwNjY6IHsgbjpcIkdlbEZyYW1lXCIgfSxcbjB4MTA2NzogeyBuOlwiQm9wUG9wQ3VzdG9tXCIgfSxcbjB4MTA2ODogeyBuOlwiRmJpMlwiIH0sXG5cbjB4MDAwMDogeyBuOlwiRGltZW5zaW9uc1wiLCBmOnBhcnNlX0RpbWVuc2lvbnMgfSxcbjB4MDAwMjogeyBuOlwiQklGRjJJTlRcIiwgZjpwYXJzZV9CSUZGMklOVCB9LFxuMHgwMDA1OiB7IG46XCJCb29sRXJyXCIsIGY6cGFyc2VfQm9vbEVyciB9LFxuMHgwMDA3OiB7IG46XCJTdHJpbmdcIiwgZjpwYXJzZV9CSUZGMlNUUklORyB9LFxuMHgwMDA4OiB7IG46XCJCSUZGMlJPV1wiIH0sXG4weDAwMGI6IHsgbjpcIkluZGV4XCIgfSxcbjB4MDAxNjogeyBuOlwiRXh0ZXJuQ291bnRcIiwgZjpwYXJzZXVpbnQxNiB9LFxuMHgwMDFlOiB7IG46XCJCSUZGMkZPUk1BVFwiLCBmOnBhcnNlX0JJRkYyRm9ybWF0IH0sXG4weDAwMWY6IHsgbjpcIkJJRkYyRk1UQ05UXCIgfSwgLyogMTYtYml0IGNudCBvZiBCSUZGMkZPUk1BVCByZWNvcmRzICovXG4weDAwMjA6IHsgbjpcIkJJRkYyQ09MSU5GT1wiIH0sXG4weDAwMjE6IHsgbjpcIkFycmF5XCIsIGY6cGFyc2VfQXJyYXkgfSxcbjB4MDAyNTogeyBuOlwiRGVmYXVsdFJvd0hlaWdodFwiLCBmOnBhcnNlX0RlZmF1bHRSb3dIZWlnaHQgfSxcbjB4MDAzMjogeyBuOlwiQklGRjJGT05UWFRSQVwiLCBmOnBhcnNlX0JJRkYyRk9OVFhUUkEgfSxcbjB4MDAzNDogeyBuOlwiRERFT2JqTmFtZVwiIH0sXG4weDAwM2U6IHsgbjpcIkJJRkYyV0lORE9XMlwiIH0sXG4weDAwNDM6IHsgbjpcIkJJRkYyWEZcIiB9LFxuMHgwMDQ1OiB7IG46XCJCSUZGMkZPTlRDTFJcIiB9LFxuMHgwMDU2OiB7IG46XCJCSUZGNEZNVENOVFwiIH0sIC8qIDE2LWJpdCBjbnQsIHNpbWlsYXIgdG8gQklGRjIgKi9cbjB4MDA3ZTogeyBuOlwiUktcIiB9LCAvKiBOb3QgbmVjZXNzYXJpbHkgc2FtZSBhcyAweDAyN2UgKi9cbjB4MDA3ZjogeyBuOlwiSW1EYXRhXCIsIGY6cGFyc2VfSW1EYXRhIH0sXG4weDAwODc6IHsgbjpcIkFkZGluXCIgfSxcbjB4MDA4ODogeyBuOlwiRWRnXCIgfSxcbjB4MDA4OTogeyBuOlwiUHViXCIgfSxcbjB4MDA5MTogeyBuOlwiU3ViXCIgfSxcbjB4MDA5NDogeyBuOlwiTEhSZWNvcmRcIiB9LFxuMHgwMDk1OiB7IG46XCJMSE5HcmFwaFwiIH0sXG4weDAwOTY6IHsgbjpcIlNvdW5kXCIgfSxcbjB4MDBhOTogeyBuOlwiQ29vcmRMaXN0XCIgfSxcbjB4MDBhYjogeyBuOlwiR0NXXCIgfSxcbjB4MDBiYzogeyBuOlwiU2hyRm1sYVwiIH0sIC8qIE5vdCBuZWNlc3NhcmlseSBzYW1lIGFzIDB4MDRiYyAqL1xuMHgwMGJmOiB7IG46XCJUb29sYmFySGRyXCIgfSxcbjB4MDBjMDogeyBuOlwiVG9vbGJhckVuZFwiIH0sXG4weDAwYzI6IHsgbjpcIkFkZE1lbnVcIiB9LFxuMHgwMGMzOiB7IG46XCJEZWxNZW51XCIgfSxcbjB4MDBkNjogeyBuOlwiUlN0cmluZ1wiLCBmOnBhcnNlX1JTdHJpbmcgfSxcbjB4MDBkZjogeyBuOlwiVUREZXNjXCIgfSxcbjB4MDBlYTogeyBuOlwiVGFiSWRDb25mXCIgfSxcbjB4MDE2MjogeyBuOlwiWEw1TW9kaWZ5XCIgfSxcbjB4MDFhNTogeyBuOlwiRmlsZVNoYXJpbmcyXCIgfSxcbjB4MDIwOTogeyBuOidCT0YnLCBmOnBhcnNlX0JPRiB9LFxuMHgwMjE4OiB7IG46XCJMYmxcIiwgZjpwYXJzZV9MYmwgfSxcbjB4MDIyMzogeyBuOlwiRXh0ZXJuTmFtZVwiLCBmOnBhcnNlX0V4dGVybk5hbWUgfSxcbjB4MDIzMTogeyBuOlwiRm9udFwiIH0sXG4weDAyNDM6IHsgbjpcIkJJRkYzWEZcIiB9LFxuMHgwNDA5OiB7IG46J0JPRicsIGY6cGFyc2VfQk9GIH0sXG4weDA0NDM6IHsgbjpcIkJJRkY0WEZcIiB9LFxuMHgwODZkOiB7IG46XCJGZWF0SW5mb1wiIH0sXG4weDA4NzM6IHsgbjpcIkZlYXRJbmZvMTFcIiB9LFxuMHgwODgxOiB7IG46XCJTWEFkZGwxMlwiIH0sXG4weDA4YzA6IHsgbjpcIkF1dG9XZWJQdWJcIiB9LFxuMHgwOGMxOiB7IG46XCJMaXN0T2JqXCIgfSxcbjB4MDhjMjogeyBuOlwiTGlzdEZpZWxkXCIgfSxcbjB4MDhjMzogeyBuOlwiTGlzdERWXCIgfSxcbjB4MDhjNDogeyBuOlwiTGlzdENvbmRGbXRcIiB9LFxuMHgwOGM1OiB7IG46XCJMaXN0Q0ZcIiB9LFxuMHgwOGM2OiB7IG46XCJGTVFyeVwiIH0sXG4weDA4Yzc6IHsgbjpcIkZNU1FyeVwiIH0sXG4weDA4Yzg6IHsgbjpcIlBMVlwiIH0sXG4weDA4Yzk6IHsgbjpcIkxuRXh0XCIgfSxcbjB4MDhjYTogeyBuOlwiTWtyRXh0XCIgfSxcbjB4MDhjYjogeyBuOlwiQ3J0Q29vcHRcIiB9LFxuMHgwOGQ2OiB7IG46XCJGUlRBcmNoSWQkXCIsIHI6MTIgfSxcblxuMHg3MjYyOiB7fVxufTtcblxudmFyIFhMU1JFID0gZXZlcnRfa2V5KFhMU1JlY29yZEVudW0sICduJyk7XG5mdW5jdGlvbiB3cml0ZV9iaWZmX3JlYyhiYSwgdHlwZSwgcGF5bG9hZCwgbGVuZ3RoKSB7XG5cdHZhciB0ID0gK3R5cGUgfHwgK1hMU1JFW3R5cGVdO1xuXHRpZihpc05hTih0KSkgcmV0dXJuO1xuXHR2YXIgbGVuID0gbGVuZ3RoIHx8IChwYXlsb2FkfHxbXSkubGVuZ3RoIHx8IDA7XG5cdHZhciBvID0gYmEubmV4dCg0KTtcblx0by53cml0ZV9zaGlmdCgyLCB0KTtcblx0by53cml0ZV9zaGlmdCgyLCBsZW4pO1xuXHRpZihsZW4gPiAwICYmIGlzX2J1ZihwYXlsb2FkKSkgYmEucHVzaChwYXlsb2FkKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfQklGRjJDZWxsKG91dCwgciwgYykge1xuXHRpZighb3V0KSBvdXQgPSBuZXdfYnVmKDcpO1xuXHRvdXQud3JpdGVfc2hpZnQoMiwgcik7XG5cdG91dC53cml0ZV9zaGlmdCgyLCBjKTtcblx0b3V0LndyaXRlX3NoaWZ0KDIsIDApO1xuXHRvdXQud3JpdGVfc2hpZnQoMSwgMCk7XG5cdHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHdyaXRlX0JJRkYyQkVSUihyLCBjLCB2YWwsIHQpIHtcblx0dmFyIG91dCA9IG5ld19idWYoOSk7XG5cdHdyaXRlX0JJRkYyQ2VsbChvdXQsIHIsIGMpO1xuXHRpZih0ID09ICdlJykgeyBvdXQud3JpdGVfc2hpZnQoMSwgdmFsKTsgb3V0LndyaXRlX3NoaWZ0KDEsIDEpOyB9XG5cdGVsc2UgeyBvdXQud3JpdGVfc2hpZnQoMSwgdmFsPzE6MCk7IG91dC53cml0ZV9zaGlmdCgxLCAwKTsgfVxuXHRyZXR1cm4gb3V0O1xufVxuXG4vKiBUT0RPOiBjb2RlcGFnZSwgbGFyZ2Ugc3RyaW5ncyAqL1xuZnVuY3Rpb24gd3JpdGVfQklGRjJMQUJFTChyLCBjLCB2YWwpIHtcblx0dmFyIG91dCA9IG5ld19idWYoOCArIDIqdmFsLmxlbmd0aCk7XG5cdHdyaXRlX0JJRkYyQ2VsbChvdXQsIHIsIGMpO1xuXHRvdXQud3JpdGVfc2hpZnQoMSwgdmFsLmxlbmd0aCk7XG5cdG91dC53cml0ZV9zaGlmdCh2YWwubGVuZ3RoLCB2YWwsICdzYmNzJyk7XG5cdHJldHVybiBvdXQubCA8IG91dC5sZW5ndGggPyBvdXQuc2xpY2UoMCwgb3V0LmwpIDogb3V0O1xufVxuXG5mdW5jdGlvbiB3cml0ZV93c19iaWZmMl9jZWxsKGJhLCBjZWxsLCBSLCBDKSB7XG5cdGlmKGNlbGwudiAhPSBudWxsKSBzd2l0Y2goY2VsbC50KSB7XG5cdFx0Y2FzZSAnZCc6IGNhc2UgJ24nOlxuXHRcdFx0dmFyIHYgPSBjZWxsLnQgPT0gJ2QnID8gZGF0ZW51bShwYXJzZURhdGUoY2VsbC52KSkgOiBjZWxsLnY7XG5cdFx0XHRpZigodiA9PSAodnwwKSkgJiYgKHYgPj0gMCkgJiYgKHYgPCA2NTUzNikpXG5cdFx0XHRcdHdyaXRlX2JpZmZfcmVjKGJhLCAweDAwMDIsIHdyaXRlX0JJRkYySU5UKFIsIEMsIHYpKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0d3JpdGVfYmlmZl9yZWMoYmEsIDB4MDAwMywgd3JpdGVfQklGRjJOVU0oUixDLCB2KSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0Y2FzZSAnYic6IGNhc2UgJ2UnOiB3cml0ZV9iaWZmX3JlYyhiYSwgMHgwMDA1LCB3cml0ZV9CSUZGMkJFUlIoUiwgQywgY2VsbC52LCBjZWxsLnQpKTsgcmV0dXJuO1xuXHRcdC8qIFRPRE86IGNvZGVwYWdlLCBzc3QgKi9cblx0XHRjYXNlICdzJzogY2FzZSAnc3RyJzpcblx0XHRcdHdyaXRlX2JpZmZfcmVjKGJhLCAweDAwMDQsIHdyaXRlX0JJRkYyTEFCRUwoUiwgQywgY2VsbC52KSk7XG5cdFx0XHRyZXR1cm47XG5cdH1cblx0d3JpdGVfYmlmZl9yZWMoYmEsIDB4MDAwMSwgd3JpdGVfQklGRjJDZWxsKG51bGwsIFIsIEMpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVfd3NfYmlmZjIoYmEsIHdzLCBpZHgsIG9wdHMpIHtcblx0dmFyIGRlbnNlID0gQXJyYXkuaXNBcnJheSh3cyk7XG5cdHZhciByYW5nZSA9IHNhZmVfZGVjb2RlX3JhbmdlKHdzWychcmVmJ10gfHwgXCJBMVwiKSwgcmVmLCByciA9IFwiXCIsIGNvbHMgPSBbXTtcblx0Zm9yKHZhciBSID0gcmFuZ2Uucy5yOyBSIDw9IHJhbmdlLmUucjsgKytSKSB7XG5cdFx0cnIgPSBlbmNvZGVfcm93KFIpO1xuXHRcdGZvcih2YXIgQyA9IHJhbmdlLnMuYzsgQyA8PSByYW5nZS5lLmM7ICsrQykge1xuXHRcdFx0aWYoUiA9PT0gcmFuZ2Uucy5yKSBjb2xzW0NdID0gZW5jb2RlX2NvbChDKTtcblx0XHRcdHJlZiA9IGNvbHNbQ10gKyBycjtcblx0XHRcdHZhciBjZWxsID0gZGVuc2UgPyAod3NbUl18fFtdKVtDXSA6IHdzW3JlZl07XG5cdFx0XHRpZighY2VsbCkgY29udGludWU7XG5cdFx0XHQvKiB3cml0ZSBjZWxsICovXG5cdFx0XHR3cml0ZV93c19iaWZmMl9jZWxsKGJhLCBjZWxsLCBSLCBDLCBvcHRzKTtcblx0XHR9XG5cdH1cbn1cblxuLyogQmFzZWQgb24gdGVzdCBmaWxlcyAqL1xuZnVuY3Rpb24gd3JpdGVfYmlmZjJfYnVmKHdiLCBvcHRzKSB7XG5cdHZhciBvID0gb3B0cyB8fCB7fTtcblx0aWYoREVOU0UgIT0gbnVsbCAmJiBvLmRlbnNlID09IG51bGwpIG8uZGVuc2UgPSBERU5TRTtcblx0dmFyIGJhID0gYnVmX2FycmF5KCk7XG5cdHZhciBpZHggPSAwO1xuXHRmb3IodmFyIGk9MDtpPHdiLlNoZWV0TmFtZXMubGVuZ3RoOysraSkgaWYod2IuU2hlZXROYW1lc1tpXSA9PSBvLnNoZWV0KSBpZHg9aTtcblx0aWYoaWR4ID09IDAgJiYgISFvLnNoZWV0ICYmIHdiLlNoZWV0TmFtZXNbMF0gIT0gby5zaGVldCkgdGhyb3cgbmV3IEVycm9yKFwiU2hlZXQgbm90IGZvdW5kOiBcIiArIG8uc2hlZXQpO1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgMHgwMDA5LCB3cml0ZV9CT0Yod2IsIDB4MTAsIG8pKTtcblx0LyogLi4uICovXG5cdHdyaXRlX3dzX2JpZmYyKGJhLCB3Yi5TaGVldHNbd2IuU2hlZXROYW1lc1tpZHhdXSwgaWR4LCBvLCB3Yik7XG5cdC8qIC4uLiAqL1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgMHgwMDBBKTtcblx0cmV0dXJuIGJhLmVuZCgpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV93c19iaWZmOF9obGlua3MoYmEsIHdzKSB7XG5cdGZvcih2YXIgUj0wOyBSPHdzWychbGlua3MnXS5sZW5ndGg7ICsrUikge1xuXHRcdHZhciBITCA9IHdzWychbGlua3MnXVtSXTtcblx0XHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJITGlua1wiLCB3cml0ZV9ITGluayhITCkpO1xuXHRcdGlmKEhMWzFdLlRvb2x0aXApIHdyaXRlX2JpZmZfcmVjKGJhLCBcIkhMaW5rVG9vbHRpcFwiLCB3cml0ZV9ITGlua1Rvb2x0aXAoSEwpKTtcblx0fVxuXHRkZWxldGUgd3NbJyFsaW5rcyddO1xufVxuXG5mdW5jdGlvbiB3cml0ZV93c19iaWZmOF9jZWxsKGJhLCBjZWxsLCBSLCBDLCBvcHRzKSB7XG5cdGlmKGNlbGwudiAhPSBudWxsKSBzd2l0Y2goY2VsbC50KSB7XG5cdFx0Y2FzZSAnZCc6IGNhc2UgJ24nOlxuXHRcdFx0dmFyIHYgPSBjZWxsLnQgPT0gJ2QnID8gZGF0ZW51bShwYXJzZURhdGUoY2VsbC52KSkgOiBjZWxsLnY7XG5cdFx0XHQvKiBUT0RPOiBlbWl0IFJLIGFzIGFwcHJvcHJpYXRlICovXG5cdFx0XHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJOdW1iZXJcIiwgd3JpdGVfTnVtYmVyKFIsIEMsIHYsIG9wdHMpKTtcblx0XHRcdHJldHVybjtcblx0XHRjYXNlICdiJzogY2FzZSAnZSc6IHdyaXRlX2JpZmZfcmVjKGJhLCBcIkJvb2xFcnJcIiwgd3JpdGVfQm9vbEVycihSLCBDLCBjZWxsLnYsIG9wdHMsIGNlbGwudCkpOyByZXR1cm47XG5cdFx0LyogVE9ETzogY29kZXBhZ2UsIHNzdCAqL1xuXHRcdGNhc2UgJ3MnOiBjYXNlICdzdHInOlxuXHRcdFx0d3JpdGVfYmlmZl9yZWMoYmEsIFwiTGFiZWxcIiwgd3JpdGVfTGFiZWwoUiwgQywgY2VsbC52LCBvcHRzKSk7XG5cdFx0XHRyZXR1cm47XG5cdH1cblx0d3JpdGVfYmlmZl9yZWMoYmEsIFwiQmxhbmtcIiwgd3JpdGVfWExTQ2VsbChSLCBDKSk7XG59XG5cbi8qIFtNUy1YTFNdIDIuMS43LjIwLjUgKi9cbmZ1bmN0aW9uIHdyaXRlX3dzX2JpZmY4KGlkeCwgb3B0cywgd2IpIHtcblx0dmFyIGJhID0gYnVmX2FycmF5KCk7XG5cdHZhciBzID0gd2IuU2hlZXROYW1lc1tpZHhdLCB3cyA9IHdiLlNoZWV0c1tzXSB8fCB7fTtcblx0dmFyIF9XQiA9ICgod2J8fHt9KS5Xb3JrYm9va3x8e30pO1xuXHR2YXIgX3NoZWV0ID0gKChfV0IuU2hlZXRzfHxbXSlbaWR4XXx8e30pO1xuXHR2YXIgZGVuc2UgPSBBcnJheS5pc0FycmF5KHdzKTtcblx0dmFyIHJlZiwgcnIgPSBcIlwiLCBjb2xzID0gW107XG5cdHZhciByYW5nZSA9IHNhZmVfZGVjb2RlX3JhbmdlKHdzWychcmVmJ10gfHwgXCJBMVwiKTtcblx0dmFyIGI4ID0gb3B0cy5iaWZmID09IDg7XG5cdHdyaXRlX2JpZmZfcmVjKGJhLCAweDA4MDksIHdyaXRlX0JPRih3YiwgMHgxMCwgb3B0cykpO1xuXHQvKiAuLi4gKi9cblx0d3JpdGVfYmlmZl9yZWMoYmEsIFwiQ2FsY01vZGVcIiwgd3JpdGV1aW50MTYoMSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJDYWxjQ291bnRcIiwgd3JpdGV1aW50MTYoMTAwKSk7XG5cdHdyaXRlX2JpZmZfcmVjKGJhLCBcIkNhbGNSZWZNb2RlXCIsIHdyaXRlYm9vbCh0cnVlKSk7XG5cdHdyaXRlX2JpZmZfcmVjKGJhLCBcIkNhbGNJdGVyXCIsIHdyaXRlYm9vbChmYWxzZSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJDYWxjRGVsdGFcIiwgd3JpdGVfWG51bSgwLjAwMSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJDYWxjU2F2ZVJlY2FsY1wiLCB3cml0ZWJvb2wodHJ1ZSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJQcmludFJvd0NvbFwiLCB3cml0ZWJvb2woZmFsc2UpKTtcblx0d3JpdGVfYmlmZl9yZWMoYmEsIFwiUHJpbnRHcmlkXCIsIHdyaXRlYm9vbChmYWxzZSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJHcmlkU2V0XCIsIHdyaXRldWludDE2KDEpKTtcblx0d3JpdGVfYmlmZl9yZWMoYmEsIFwiR3V0c1wiLCB3cml0ZV9HdXRzKFswLDBdKSk7XG5cdC8qIC4uLiAqL1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJIQ2VudGVyXCIsIHdyaXRlYm9vbChmYWxzZSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJWQ2VudGVyXCIsIHdyaXRlYm9vbChmYWxzZSkpO1xuXHQvKiAuLi4gKi9cblx0d3JpdGVfYmlmZl9yZWMoYmEsIFwiRGltZW5zaW9uc1wiLCB3cml0ZV9EaW1lbnNpb25zKHJhbmdlLCBvcHRzKSk7XG5cdC8qIC4uLiAqL1xuXG5cdGlmKGI4KSB3c1snIWxpbmtzJ10gPSBbXTtcblx0Zm9yKHZhciBSID0gcmFuZ2Uucy5yOyBSIDw9IHJhbmdlLmUucjsgKytSKSB7XG5cdFx0cnIgPSBlbmNvZGVfcm93KFIpO1xuXHRcdGZvcih2YXIgQyA9IHJhbmdlLnMuYzsgQyA8PSByYW5nZS5lLmM7ICsrQykge1xuXHRcdFx0aWYoUiA9PT0gcmFuZ2Uucy5yKSBjb2xzW0NdID0gZW5jb2RlX2NvbChDKTtcblx0XHRcdHJlZiA9IGNvbHNbQ10gKyBycjtcblx0XHRcdHZhciBjZWxsID0gZGVuc2UgPyAod3NbUl18fFtdKVtDXSA6IHdzW3JlZl07XG5cdFx0XHRpZighY2VsbCkgY29udGludWU7XG5cdFx0XHQvKiB3cml0ZSBjZWxsICovXG5cdFx0XHR3cml0ZV93c19iaWZmOF9jZWxsKGJhLCBjZWxsLCBSLCBDLCBvcHRzKTtcblx0XHRcdGlmKGI4ICYmIGNlbGwubCkgd3NbJyFsaW5rcyddLnB1c2goW3JlZiwgY2VsbC5sXSk7XG5cdFx0fVxuXHR9XG5cdHZhciBjbmFtZSA9IF9zaGVldC5Db2RlTmFtZSB8fCBfc2hlZXQubmFtZSB8fCBzO1xuXHQvKiAuLi4gKi9cblx0aWYoYjggJiYgX1dCLlZpZXdzKSB3cml0ZV9iaWZmX3JlYyhiYSwgXCJXaW5kb3cyXCIsIHdyaXRlX1dpbmRvdzIoX1dCLlZpZXdzWzBdKSk7XG5cdC8qIC4uLiAqL1xuXHRpZihiOCkgd3JpdGVfYmlmZl9yZWMoYmEsIFwiTWVyZ2VDZWxsc1wiLCB3cml0ZV9NZXJnZUNlbGxzKHdzWychbWVyZ2VzJ118fFtdKSk7XG5cdC8qIC4uLiAqL1xuXHRpZihiOCkgd3JpdGVfd3NfYmlmZjhfaGxpbmtzKGJhLCB3cyk7XG5cdC8qIC4uLiAqL1xuXHR3cml0ZV9iaWZmX3JlYyhiYSwgXCJDb2RlTmFtZVwiLCB3cml0ZV9YTFVuaWNvZGVTdHJpbmcoY25hbWUsIG9wdHMpKTtcblx0LyogLi4uICovXG5cdHdyaXRlX2JpZmZfcmVjKGJhLCBcIkVPRlwiKTtcblx0cmV0dXJuIGJhLmVuZCgpO1xufVxuXG4vKiBbTVMtWExTXSAyLjEuNy4yMC4zICovXG5mdW5jdGlvbiB3cml0ZV9iaWZmOF9nbG9iYWwod2IsIGJ1ZnMsIG9wdHMpIHtcblx0dmFyIEEgPSBidWZfYXJyYXkoKTtcblx0dmFyIF93YiA9ICh3Yi5Xb3JrYm9va3x8e30pLldCUHJvcHN8fHt9O1xuXHR2YXIgYjggPSBvcHRzLmJpZmYgPT0gOCwgYjUgPSBvcHRzLmJpZmYgPT0gNTtcblx0d3JpdGVfYmlmZl9yZWMoQSwgMHgwODA5LCB3cml0ZV9CT0Yod2IsIDB4MDUsIG9wdHMpKTtcblx0aWYob3B0cy5ib29rVHlwZSA9PSBcInhsYVwiKSB3cml0ZV9iaWZmX3JlYyhBLCBcIkFkZGluXCIpO1xuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIkludGVyZmFjZUhkclwiLCBiOCA/IHdyaXRldWludDE2KDB4MDRiMCkgOiBudWxsKTtcblx0d3JpdGVfYmlmZl9yZWMoQSwgXCJNbXNcIiwgd3JpdGV6ZXJvZXMoMikpO1xuXHRpZihiNSkgd3JpdGVfYmlmZl9yZWMoQSwgXCJUb29sYmFySGRyXCIpO1xuXHRpZihiNSkgd3JpdGVfYmlmZl9yZWMoQSwgXCJUb29sYmFyRW5kXCIpO1xuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIkludGVyZmFjZUVuZFwiKTtcblx0d3JpdGVfYmlmZl9yZWMoQSwgXCJXcml0ZUFjY2Vzc1wiLCB3cml0ZV9Xcml0ZUFjY2VzcyhcIlNoZWV0SlNcIiwgb3B0cykpO1xuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIkNvZGVQYWdlXCIsIHdyaXRldWludDE2KGI4ID8gMHgwNGIwIDogMHgwNEU0KSk7XG5cdGlmKGI4KSB3cml0ZV9iaWZmX3JlYyhBLCBcIkRTRlwiLCB3cml0ZXVpbnQxNigwKSk7XG5cdHdyaXRlX2JpZmZfcmVjKEEsIFwiUlJUYWJJZFwiLCB3cml0ZV9SUlRhYklkKHdiLlNoZWV0TmFtZXMubGVuZ3RoKSk7XG5cdGlmKGI4ICYmIHdiLnZiYXJhdykge1xuXHRcdHdyaXRlX2JpZmZfcmVjKEEsIFwiT2JQcm9qXCIpO1xuXHRcdC8vICRGbG93SWdub3JlXG5cdFx0dmFyIGNuYW1lID0gX3diLkNvZGVOYW1lIHx8IFwiVGhpc1dvcmtib29rXCI7XG5cdFx0d3JpdGVfYmlmZl9yZWMoQSwgXCJDb2RlTmFtZVwiLCB3cml0ZV9YTFVuaWNvZGVTdHJpbmcoY25hbWUsIG9wdHMpKTtcblx0fVxuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIkJ1aWx0SW5Gbkdyb3VwQ291bnRcIiwgd3JpdGV1aW50MTYoMHgxMSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIldpblByb3RlY3RcIiwgd3JpdGVib29sKGZhbHNlKSk7XG5cdHdyaXRlX2JpZmZfcmVjKEEsIFwiUHJvdGVjdFwiLCB3cml0ZWJvb2woZmFsc2UpKTtcblx0d3JpdGVfYmlmZl9yZWMoQSwgXCJQYXNzd29yZFwiLCB3cml0ZXVpbnQxNigwKSk7XG5cdGlmKGI4KSB3cml0ZV9iaWZmX3JlYyhBLCBcIlByb3Q0UmV2XCIsIHdyaXRlYm9vbChmYWxzZSkpO1xuXHRpZihiOCkgd3JpdGVfYmlmZl9yZWMoQSwgXCJQcm90NFJldlBhc3NcIiwgd3JpdGV1aW50MTYoMCkpO1xuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIldpbmRvdzFcIiwgd3JpdGVfV2luZG93MShvcHRzKSk7XG5cdHdyaXRlX2JpZmZfcmVjKEEsIFwiQmFja3VwXCIsIHdyaXRlYm9vbChmYWxzZSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIkhpZGVPYmpcIiwgd3JpdGV1aW50MTYoMCkpO1xuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIkRhdGUxOTA0XCIsIHdyaXRlYm9vbChzYWZlMTkwNCh3Yik9PVwidHJ1ZVwiKSk7XG5cdHdyaXRlX2JpZmZfcmVjKEEsIFwiQ2FsY1ByZWNpc2lvblwiLCB3cml0ZWJvb2wodHJ1ZSkpO1xuXHRpZihiOCkgd3JpdGVfYmlmZl9yZWMoQSwgXCJSZWZyZXNoQWxsXCIsIHdyaXRlYm9vbChmYWxzZSkpO1xuXHR3cml0ZV9iaWZmX3JlYyhBLCBcIkJvb2tCb29sXCIsIHdyaXRldWludDE2KDApKTtcblx0LyogLi4uICovXG5cdGlmKGI4KSB3cml0ZV9iaWZmX3JlYyhBLCBcIlVzZXNFTEZzXCIsIHdyaXRlYm9vbChmYWxzZSkpO1xuXHR2YXIgYSA9IEEuZW5kKCk7XG5cblx0dmFyIEMgPSBidWZfYXJyYXkoKTtcblx0aWYoYjgpIHdyaXRlX2JpZmZfcmVjKEMsIFwiQ291bnRyeVwiLCB3cml0ZV9Db3VudHJ5KCkpO1xuXHQvKiBCSUZGODogW1NTVCAqQ29udGludWVdIEV4dFNTVCAqL1xuXHR3cml0ZV9iaWZmX3JlYyhDLCBcIkVPRlwiKTtcblx0dmFyIGMgPSBDLmVuZCgpO1xuXG5cdHZhciBCID0gYnVmX2FycmF5KCk7XG5cdHZhciBibGVuID0gMCwgaiA9IDA7XG5cdGZvcihqID0gMDsgaiA8IHdiLlNoZWV0TmFtZXMubGVuZ3RoOyArK2opIGJsZW4gKz0gKGI4ID8gMTIgOiAxMSkgKyAoYjggPyAyIDogMSkgKiB3Yi5TaGVldE5hbWVzW2pdLmxlbmd0aDtcblx0dmFyIHN0YXJ0ID0gYS5sZW5ndGggKyBibGVuICsgYy5sZW5ndGg7XG5cdGZvcihqID0gMDsgaiA8IHdiLlNoZWV0TmFtZXMubGVuZ3RoOyArK2opIHtcblx0XHR3cml0ZV9iaWZmX3JlYyhCLCBcIkJvdW5kU2hlZXQ4XCIsIHdyaXRlX0JvdW5kU2hlZXQ4KHtwb3M6c3RhcnQsIGhzOjAsIGR0OjAsIG5hbWU6d2IuU2hlZXROYW1lc1tqXX0sIG9wdHMpKTtcblx0XHRzdGFydCArPSBidWZzW2pdLmxlbmd0aDtcblx0fVxuXHQvKiAxKkJvdW5kU2hlZXQ4ICovXG5cdHZhciBiID0gQi5lbmQoKTtcblx0aWYoYmxlbiAhPSBiLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKFwiQlM4IFwiICsgYmxlbiArIFwiICE9IFwiICsgYi5sZW5ndGgpO1xuXG5cdHZhciBvdXQgPSBbXTtcblx0aWYoYS5sZW5ndGgpIG91dC5wdXNoKGEpO1xuXHRpZihiLmxlbmd0aCkgb3V0LnB1c2goYik7XG5cdGlmKGMubGVuZ3RoKSBvdXQucHVzaChjKTtcblx0cmV0dXJuIF9fdG9CdWZmZXIoW291dF0pO1xufVxuXG4vKiBbTVMtWExTXSAyLjEuNy4yMCBXb3JrYm9vayBTdHJlYW0gKi9cbmZ1bmN0aW9uIHdyaXRlX2JpZmY4X2J1Zih3Yiwgb3B0cykge1xuXHR2YXIgbyA9IG9wdHMgfHwge307XG5cdHZhciBidWZzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB3Yi5TaGVldE5hbWVzLmxlbmd0aDsgKytpKSBidWZzW2J1ZnMubGVuZ3RoXSA9IHdyaXRlX3dzX2JpZmY4KGksIG8sIHdiKTtcblx0YnVmcy51bnNoaWZ0KHdyaXRlX2JpZmY4X2dsb2JhbCh3YiwgYnVmcywgbykpO1xuXHRyZXR1cm4gX190b0J1ZmZlcihbYnVmc10pO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9iaWZmX2J1Zih3Yiwgb3B0cykge1xuXHR2YXIgbyA9IG9wdHMgfHwge307XG5cdHN3aXRjaChvLmJpZmYgfHwgMikge1xuXHRcdGNhc2UgODogY2FzZSA1OiByZXR1cm4gd3JpdGVfYmlmZjhfYnVmKHdiLCBvcHRzKTtcblx0XHRjYXNlIDQ6IGNhc2UgMzogY2FzZSAyOiByZXR1cm4gd3JpdGVfYmlmZjJfYnVmKHdiLCBvcHRzKTtcblx0fVxuXHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHR5cGUgXCIgKyBvLmJvb2tUeXBlICsgXCIgZm9yIEJJRkZcIik7XG59XG4vKiBub3RlOiBicm93c2VyIERPTSBlbGVtZW50IGNhbm5vdCBzZWUgbXNvLSBzdHlsZSBhdHRycywgbXVzdCBwYXJzZSAqL1xudmFyIEhUTUxfID0gKGZ1bmN0aW9uKCkge1xuXHRmdW5jdGlvbiBodG1sX3RvX3NoZWV0KHN0ciwgX29wdHMpIHtcblx0XHR2YXIgb3B0cyA9IF9vcHRzIHx8IHt9O1xuXHRcdGlmKERFTlNFICE9IG51bGwgJiYgb3B0cy5kZW5zZSA9PSBudWxsKSBvcHRzLmRlbnNlID0gREVOU0U7XG5cdFx0dmFyIHdzID0gb3B0cy5kZW5zZSA/IChbXSkgOiAoe30pO1xuXHRcdHZhciBtdGNoID0gc3RyLm1hdGNoKC88dGFibGUvaSk7XG5cdFx0aWYoIW10Y2gpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgSFRNTDogY291bGQgbm90IGZpbmQgPHRhYmxlPlwiKTtcblx0XHR2YXIgbXRjaDIgPSBzdHIubWF0Y2goLzxcXC90YWJsZS9pKTtcblx0XHR2YXIgaSA9IG10Y2guaW5kZXgsIGogPSBtdGNoMiAmJiBtdGNoMi5pbmRleCB8fCBzdHIubGVuZ3RoO1xuXHRcdHZhciByb3dzID0gc3BsaXRfcmVnZXgoc3RyLnNsaWNlKGksIGopLCAvKDo/PHRyW14+XSo+KS9pLCBcIjx0cj5cIik7XG5cdFx0dmFyIFIgPSAtMSwgQyA9IDAsIFJTID0gMCwgQ1MgPSAwO1xuXHRcdHZhciByYW5nZSA9IHtzOntyOjEwMDAwMDAwLCBjOjEwMDAwMDAwfSxlOntyOjAsYzowfX07XG5cdFx0dmFyIG1lcmdlcyA9IFtdO1xuXHRcdGZvcihpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyArK2kpIHtcblx0XHRcdHZhciByb3cgPSByb3dzW2ldLnRyaW0oKTtcblx0XHRcdHZhciBoZCA9IHJvdy5zbGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRpZihoZCA9PSBcIjx0clwiKSB7ICsrUjsgQyA9IDA7IGNvbnRpbnVlOyB9XG5cdFx0XHRpZihoZCAhPSBcIjx0ZFwiKSBjb250aW51ZTtcblx0XHRcdHZhciBjZWxscyA9IHJvdy5zcGxpdCgvPFxcL3RkPi9pKTtcblx0XHRcdGZvcihqID0gMDsgaiA8IGNlbGxzLmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHZhciBjZWxsID0gY2VsbHNbal0udHJpbSgpO1xuXHRcdFx0XHRpZihjZWxsLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKSAhPSBcIjx0ZFwiKSBjb250aW51ZTtcblx0XHRcdFx0dmFyIG0gPSBjZWxsLCBjYyA9IDA7XG5cdFx0XHRcdC8qIFRPRE86IHBhcnNlIHN0eWxlcyBldGMgKi9cblx0XHRcdFx0d2hpbGUobS5jaGFyQXQoMCkgPT0gXCI8XCIgJiYgKGNjID0gbS5pbmRleE9mKFwiPlwiKSkgPiAtMSkgbSA9IG0uc2xpY2UoY2MrMSk7XG5cdFx0XHRcdHZhciB0YWcgPSBwYXJzZXhtbHRhZyhjZWxsLnNsaWNlKDAsIGNlbGwuaW5kZXhPZihcIj5cIikpKTtcblx0XHRcdFx0Q1MgPSB0YWcuY29sc3BhbiA/ICt0YWcuY29sc3BhbiA6IDE7XG5cdFx0XHRcdGlmKChSUyA9ICt0YWcucm93c3Bhbik+MCB8fCBDUz4xKSBtZXJnZXMucHVzaCh7czp7cjpSLGM6Q30sZTp7cjpSICsgKFJTfHwxKSAtIDEsIGM6QyArIENTIC0gMX19KTtcblx0XHRcdFx0dmFyIF90ID0gdGFnLnQgfHwgXCJcIjtcblx0XHRcdFx0LyogVE9ETzogZ2VuZXJhdGUgc3R1YiBjZWxscyAqL1xuXHRcdFx0XHRpZighbS5sZW5ndGgpIHsgQyArPSBDUzsgY29udGludWU7IH1cblx0XHRcdFx0bSA9IGh0bWxkZWNvZGUodW5lc2NhcGV4bWwobSkpO1xuXHRcdFx0XHRpZihyYW5nZS5zLnIgPiBSKSByYW5nZS5zLnIgPSBSOyBpZihyYW5nZS5lLnIgPCBSKSByYW5nZS5lLnIgPSBSO1xuXHRcdFx0XHRpZihyYW5nZS5zLmMgPiBDKSByYW5nZS5zLmMgPSBDOyBpZihyYW5nZS5lLmMgPCBDKSByYW5nZS5lLmMgPSBDO1xuXHRcdFx0XHRpZighbS5sZW5ndGgpIGNvbnRpbnVlO1xuXHRcdFx0XHR2YXIgbyA9IHt0OidzJywgdjptfTtcblx0XHRcdFx0aWYob3B0cy5yYXcgfHwgIW0udHJpbSgpLmxlbmd0aCB8fCBfdCA9PSAncycpe31cblx0XHRcdFx0ZWxzZSBpZihtID09PSAnVFJVRScpIG8gPSB7dDonYicsIHY6dHJ1ZX07XG5cdFx0XHRcdGVsc2UgaWYobSA9PT0gJ0ZBTFNFJykgbyA9IHt0OidiJywgdjpmYWxzZX07XG5cdFx0XHRcdGVsc2UgaWYoIWlzTmFOKGZ1enp5bnVtKG0pKSkgbyA9IHt0OiduJywgdjpmdXp6eW51bShtKX07XG5cdFx0XHRcdGVsc2UgaWYoIWlzTmFOKGZ1enp5ZGF0ZShtKS5nZXREYXRlKCkpKSB7XG5cdFx0XHRcdFx0byA9ICh7dDonZCcsIHY6cGFyc2VEYXRlKG0pfSk7XG5cdFx0XHRcdFx0aWYoIW9wdHMuY2VsbERhdGVzKSBvID0gKHt0OiduJywgdjpkYXRlbnVtKG8udil9KTtcblx0XHRcdFx0XHRvLnogPSBvcHRzLmRhdGVORiB8fCBTU0YuX3RhYmxlWzE0XTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihvcHRzLmRlbnNlKSB7IGlmKCF3c1tSXSkgd3NbUl0gPSBbXTsgd3NbUl1bQ10gPSBvOyB9XG5cdFx0XHRcdGVsc2Ugd3NbZW5jb2RlX2NlbGwoe3I6UiwgYzpDfSldID0gbztcblx0XHRcdFx0QyArPSBDUztcblx0XHRcdH1cblx0XHR9XG5cdFx0d3NbJyFyZWYnXSA9IGVuY29kZV9yYW5nZShyYW5nZSk7XG5cdFx0cmV0dXJuIHdzO1xuXHR9XG5cdGZ1bmN0aW9uIGh0bWxfdG9fYm9vayhzdHIsIG9wdHMpIHtcblx0XHRyZXR1cm4gc2hlZXRfdG9fd29ya2Jvb2soaHRtbF90b19zaGVldChzdHIsIG9wdHMpLCBvcHRzKTtcblx0fVxuXHRmdW5jdGlvbiBtYWtlX2h0bWxfcm93KHdzLCByLCBSLCBvKSB7XG5cdFx0dmFyIE0gPSAod3NbJyFtZXJnZXMnXSB8fFtdKTtcblx0XHR2YXIgb28gPSBbXTtcblx0XHR2YXIgbnVsbGNlbGwgPSBcIjx0ZD5cIiArIChvLmVkaXRhYmxlID8gJzxzcGFuIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj48L3NwYW4+JyA6IFwiXCIgKSArIFwiPC90ZD5cIjtcblx0XHRmb3IodmFyIEMgPSByLnMuYzsgQyA8PSByLmUuYzsgKytDKSB7XG5cdFx0XHR2YXIgUlMgPSAwLCBDUyA9IDA7XG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgTS5sZW5ndGg7ICsraikge1xuXHRcdFx0XHRpZihNW2pdLnMuciA+IFIgfHwgTVtqXS5zLmMgPiBDKSBjb250aW51ZTtcblx0XHRcdFx0aWYoTVtqXS5lLnIgPCBSIHx8IE1bal0uZS5jIDwgQykgY29udGludWU7XG5cdFx0XHRcdGlmKE1bal0ucy5yIDwgUiB8fCBNW2pdLnMuYyA8IEMpIHsgUlMgPSAtMTsgYnJlYWs7IH1cblx0XHRcdFx0UlMgPSBNW2pdLmUuciAtIE1bal0ucy5yICsgMTsgQ1MgPSBNW2pdLmUuYyAtIE1bal0ucy5jICsgMTsgYnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZihSUyA8IDApIGNvbnRpbnVlO1xuXHRcdFx0dmFyIGNvb3JkID0gZW5jb2RlX2NlbGwoe3I6UixjOkN9KTtcblx0XHRcdHZhciBjZWxsID0gby5kZW5zZSA/ICh3c1tSXXx8W10pW0NdIDogd3NbY29vcmRdO1xuXHRcdFx0aWYoIWNlbGwgfHwgY2VsbC52ID09IG51bGwpIHsgb28ucHVzaChudWxsY2VsbCk7IGNvbnRpbnVlOyB9XG5cdFx0XHQvKiBUT0RPOiBodG1sIGVudGl0aWVzICovXG5cdFx0XHR2YXIgdyA9IGNlbGwuaCB8fCBlc2NhcGV4bWwoY2VsbC53IHx8IChmb3JtYXRfY2VsbChjZWxsKSwgY2VsbC53KSB8fCBcIlwiKTtcblx0XHRcdHZhciBzcCA9IHt9O1xuXHRcdFx0aWYoUlMgPiAxKSBzcC5yb3dzcGFuID0gUlM7XG5cdFx0XHRpZihDUyA+IDEpIHNwLmNvbHNwYW4gPSBDUztcblx0XHRcdHNwLnQgPSBjZWxsLnQ7XG5cdFx0XHRpZihvLmVkaXRhYmxlKSB3ID0gJzxzcGFuIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj4nICsgdyArICc8L3NwYW4+Jztcblx0XHRcdHNwLmlkID0gXCJzanMtXCIgKyBjb29yZDtcblx0XHRcdG9vLnB1c2god3JpdGV4dGFnKCd0ZCcsIHcsIHNwKSk7XG5cdFx0fVxuXHRcdHZhciBwcmVhbWJsZSA9IFwiPHRyPlwiO1xuXHRcdHJldHVybiBwcmVhbWJsZSArIG9vLmpvaW4oXCJcIikgKyBcIjwvdHI+XCI7XG5cdH1cblx0ZnVuY3Rpb24gbWFrZV9odG1sX3ByZWFtYmxlKHdzLCBSLCBvKSB7XG5cdFx0dmFyIG91dCA9IFtdO1xuXHRcdHJldHVybiBvdXQuam9pbihcIlwiKSArICc8dGFibGUnICsgKG8gJiYgby5pZCA/ICcgaWQ9XCInICsgby5pZCArICdcIicgOiBcIlwiKSArICc+Jztcblx0fVxuXHR2YXIgX0JFR0lOID0gJzxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nO1xuXHR2YXIgX0VORCA9ICc8L2JvZHk+PC9odG1sPic7XG5cdGZ1bmN0aW9uIHNoZWV0X3RvX2h0bWwod3MsIG9wdHMvKiwgd2I6P1dvcmtib29rKi8pIHtcblx0XHR2YXIgbyA9IG9wdHMgfHwge307XG5cdFx0dmFyIGhlYWRlciA9IG8uaGVhZGVyICE9IG51bGwgPyBvLmhlYWRlciA6IF9CRUdJTjtcblx0XHR2YXIgZm9vdGVyID0gby5mb290ZXIgIT0gbnVsbCA/IG8uZm9vdGVyIDogX0VORDtcblx0XHR2YXIgb3V0ID0gW2hlYWRlcl07XG5cdFx0dmFyIHIgPSBkZWNvZGVfcmFuZ2Uod3NbJyFyZWYnXSk7XG5cdFx0by5kZW5zZSA9IEFycmF5LmlzQXJyYXkod3MpO1xuXHRcdG91dC5wdXNoKG1ha2VfaHRtbF9wcmVhbWJsZSh3cywgciwgbykpO1xuXHRcdGZvcih2YXIgUiA9IHIucy5yOyBSIDw9IHIuZS5yOyArK1IpIG91dC5wdXNoKG1ha2VfaHRtbF9yb3cod3MsIHIsIFIsIG8pKTtcblx0XHRvdXQucHVzaChcIjwvdGFibGU+XCIgKyBmb290ZXIpO1xuXHRcdHJldHVybiBvdXQuam9pbihcIlwiKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dG9fd29ya2Jvb2s6IGh0bWxfdG9fYm9vayxcblx0XHR0b19zaGVldDogaHRtbF90b19zaGVldCxcblx0XHRfcm93OiBtYWtlX2h0bWxfcm93LFxuXHRcdEJFR0lOOiBfQkVHSU4sXG5cdFx0RU5EOiBfRU5ELFxuXHRcdF9wcmVhbWJsZTogbWFrZV9odG1sX3ByZWFtYmxlLFxuXHRcdGZyb21fc2hlZXQ6IHNoZWV0X3RvX2h0bWxcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIHBhcnNlX2RvbV90YWJsZSh0YWJsZSwgX29wdHMpIHtcblx0dmFyIG9wdHMgPSBfb3B0cyB8fCB7fTtcblx0aWYoREVOU0UgIT0gbnVsbCkgb3B0cy5kZW5zZSA9IERFTlNFO1xuXHR2YXIgd3MgPSBvcHRzLmRlbnNlID8gKFtdKSA6ICh7fSk7XG5cdHZhciByb3dzID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJyk7XG5cdHZhciByYW5nZSA9IHtzOntyOjAsYzowfSxlOntyOnJvd3MubGVuZ3RoIC0gMSxjOjB9fTtcblx0dmFyIG1lcmdlcyA9IFtdLCBtaWR4ID0gMDtcblx0dmFyIFIgPSAwLCBfQyA9IDAsIEMgPSAwLCBSUyA9IDAsIENTID0gMDtcblx0Zm9yKDsgUiA8IHJvd3MubGVuZ3RoOyArK1IpIHtcblx0XHR2YXIgcm93ID0gcm93c1tSXTtcblx0XHR2YXIgZWx0cyA9IChyb3cuY2hpbGRyZW4pO1xuXHRcdGZvcihfQyA9IEMgPSAwOyBfQyA8IGVsdHMubGVuZ3RoOyArK19DKSB7XG5cdFx0XHR2YXIgZWx0ID0gZWx0c1tfQ10sIHYgPSBodG1sZGVjb2RlKGVsdHNbX0NdLmlubmVySFRNTCk7XG5cdFx0XHRmb3IobWlkeCA9IDA7IG1pZHggPCBtZXJnZXMubGVuZ3RoOyArK21pZHgpIHtcblx0XHRcdFx0dmFyIG0gPSBtZXJnZXNbbWlkeF07XG5cdFx0XHRcdGlmKG0ucy5jID09IEMgJiYgbS5zLnIgPD0gUiAmJiBSIDw9IG0uZS5yKSB7IEMgPSBtLmUuYysxOyBtaWR4ID0gLTE7IH1cblx0XHRcdH1cblx0XHRcdC8qIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIGV4dHJhY3Qgbm9uc3RhbmRhcmQgbXNvLSBzdHlsZSAqL1xuXHRcdFx0Q1MgPSArZWx0LmdldEF0dHJpYnV0ZShcImNvbHNwYW5cIikgfHwgMTtcblx0XHRcdGlmKChSUyA9ICtlbHQuZ2V0QXR0cmlidXRlKFwicm93c3BhblwiKSk+MCB8fCBDUz4xKSBtZXJnZXMucHVzaCh7czp7cjpSLGM6Q30sZTp7cjpSICsgKFJTfHwxKSAtIDEsIGM6QyArIENTIC0gMX19KTtcblx0XHRcdHZhciBvID0ge3Q6J3MnLCB2OnZ9O1xuXHRcdFx0dmFyIF90ID0gZWx0LmdldEF0dHJpYnV0ZShcInRcIikgfHwgXCJcIjtcblx0XHRcdGlmKHYgIT0gbnVsbCkge1xuXHRcdFx0XHRpZih2Lmxlbmd0aCA9PSAwKSBvLnQgPSBfdCB8fCAneic7XG5cdFx0XHRcdGVsc2UgaWYob3B0cy5yYXcgfHwgdi50cmltKCkubGVuZ3RoID09IDAgfHwgX3QgPT0gXCJzXCIpe31cblx0XHRcdFx0ZWxzZSBpZih2ID09PSAnVFJVRScpIG8gPSB7dDonYicsIHY6dHJ1ZX07XG5cdFx0XHRcdGVsc2UgaWYodiA9PT0gJ0ZBTFNFJykgbyA9IHt0OidiJywgdjpmYWxzZX07XG5cdFx0XHRcdGVsc2UgaWYoIWlzTmFOKGZ1enp5bnVtKHYpKSkgbyA9IHt0OiduJywgdjpmdXp6eW51bSh2KX07XG5cdFx0XHRcdGVsc2UgaWYoIWlzTmFOKGZ1enp5ZGF0ZSh2KS5nZXREYXRlKCkpKSB7XG5cdFx0XHRcdFx0byA9ICh7dDonZCcsIHY6cGFyc2VEYXRlKHYpfSk7XG5cdFx0XHRcdFx0aWYoIW9wdHMuY2VsbERhdGVzKSBvID0gKHt0OiduJywgdjpkYXRlbnVtKG8udil9KTtcblx0XHRcdFx0XHRvLnogPSBvcHRzLmRhdGVORiB8fCBTU0YuX3RhYmxlWzE0XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYob3B0cy5kZW5zZSkgeyBpZighd3NbUl0pIHdzW1JdID0gW107IHdzW1JdW0NdID0gbzsgfVxuXHRcdFx0ZWxzZSB3c1tlbmNvZGVfY2VsbCh7YzpDLCByOlJ9KV0gPSBvO1xuXHRcdFx0aWYocmFuZ2UuZS5jIDwgQykgcmFuZ2UuZS5jID0gQztcblx0XHRcdEMgKz0gQ1M7XG5cdFx0fVxuXHR9XG5cdHdzWychbWVyZ2VzJ10gPSBtZXJnZXM7XG5cdHdzWychcmVmJ10gPSBlbmNvZGVfcmFuZ2UocmFuZ2UpO1xuXHRyZXR1cm4gd3M7XG59XG5cbmZ1bmN0aW9uIHRhYmxlX3RvX2Jvb2sodGFibGUsIG9wdHMpIHtcblx0cmV0dXJuIHNoZWV0X3RvX3dvcmtib29rKHBhcnNlX2RvbV90YWJsZSh0YWJsZSwgb3B0cyksIG9wdHMpO1xufVxuLyogT3BlbkRvY3VtZW50ICovXG52YXIgcGFyc2VfY29udGVudF94bWwgPSAoZnVuY3Rpb24oKSB7XG5cblx0LyogNi4xLjIgV2hpdGUgU3BhY2UgQ2hhcmFjdGVycyAqL1xuXHR2YXIgcGFyc2VfdGV4dF9wID0gZnVuY3Rpb24odGV4dCkge1xuXHRcdHJldHVybiB1bmVzY2FwZXhtbCh0ZXh0XG5cdFx0XHQucmVwbGFjZSgvW1xcdFxcclxcbl0vZywgXCIgXCIpLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCBcIiBcIilcblx0XHRcdC5yZXBsYWNlKC88dGV4dDpzXFwvPi9nLFwiIFwiKVxuXHRcdFx0LnJlcGxhY2UoLzx0ZXh0OnMgdGV4dDpjPVwiKFxcZCspXCJcXC8+L2csIGZ1bmN0aW9uKCQkLCQxKSB7IHJldHVybiBBcnJheShwYXJzZUludCgkMSwxMCkrMSkuam9pbihcIiBcIik7IH0pXG5cdFx0XHQucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcXC8+L2csXCJcXHRcIilcblx0XHRcdC5yZXBsYWNlKC88dGV4dDpsaW5lLWJyZWFrXFwvPi9nLFwiXFxuXCIpXG5cdFx0XHQucmVwbGFjZSgvPFtePl0qPi9nLFwiXCIpXG5cdFx0KTtcblx0fTtcblxuXHR2YXIgbnVtYmVyX2Zvcm1hdHMgPSB7XG5cdFx0Lyogb2RzIG5hbWU6IFtzaG9ydCBzc2YgZm10LCBsb25nIHNzZiBmbXRdICovXG5cdFx0ZGF5OiAgICAgICAgICAgW1wiZFwiLCAgIFwiZGRcIl0sXG5cdFx0bW9udGg6ICAgICAgICAgW1wibVwiLCAgIFwibW1cIl0sXG5cdFx0eWVhcjogICAgICAgICAgW1wieVwiLCAgIFwieXlcIl0sXG5cdFx0aG91cnM6ICAgICAgICAgW1wiaFwiLCAgIFwiaGhcIl0sXG5cdFx0bWludXRlczogICAgICAgW1wibVwiLCAgIFwibW1cIl0sXG5cdFx0c2Vjb25kczogICAgICAgW1wic1wiLCAgIFwic3NcIl0sXG5cdFx0XCJhbS1wbVwiOiAgICAgICBbXCJBL1BcIiwgXCJBTS9QTVwiXSxcblx0XHRcImRheS1vZi13ZWVrXCI6IFtcImRkZFwiLCBcImRkZGRcIl0sXG5cdFx0ZXJhOiAgICAgICAgICAgW1wiZVwiLCAgIFwiZWVcIl0sXG5cdFx0LyogdGhlcmUgaXMgbm8gbmF0aXZlIHJlcHJlc2VudGF0aW9uIG9mIExPIFwiUVwiIGZvcm1hdCAqL1xuXHRcdHF1YXJ0ZXI6ICAgICAgIFtcIlxcXFxRbVwiLCBcIm1cXFxcXFxcInRoIHF1YXJ0ZXJcXFwiXCJdXG5cdH07XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHBjeChkLCBfb3B0cykge1xuXHRcdHZhciBvcHRzID0gX29wdHMgfHwge307XG5cdFx0aWYoREVOU0UgIT0gbnVsbCAmJiBvcHRzLmRlbnNlID09IG51bGwpIG9wdHMuZGVuc2UgPSBERU5TRTtcblx0XHR2YXIgc3RyID0geGxtbF9ub3JtYWxpemUoZCk7XG5cdFx0dmFyIHN0YXRlID0gW10sIHRtcDtcblx0XHR2YXIgdGFnO1xuXHRcdHZhciBORnRhZyA9IHtuYW1lOlwiXCJ9LCBORiA9IFwiXCIsIHBpZHggPSAwO1xuXHRcdHZhciBzaGVldGFnO1xuXHRcdHZhciByb3d0YWc7XG5cdFx0dmFyIFNoZWV0cyA9IHt9LCBTaGVldE5hbWVzID0gW107XG5cdFx0dmFyIHdzID0gb3B0cy5kZW5zZSA/IChbXSkgOiAoe30pO1xuXHRcdHZhciBSbiwgcTtcblx0XHR2YXIgY3RhZyA9ICh7dmFsdWU6XCJcIn0pO1xuXHRcdHZhciB0ZXh0cCA9IFwiXCIsIHRleHRwaWR4ID0gMCwgdGV4dHB0YWc7XG5cdFx0dmFyIFIgPSAtMSwgQyA9IC0xLCByYW5nZSA9IHtzOiB7cjoxMDAwMDAwLGM6MTAwMDAwMDB9LCBlOiB7cjowLCBjOjB9fTtcblx0XHR2YXIgcm93X29sID0gMDtcblx0XHR2YXIgbnVtYmVyX2Zvcm1hdF9tYXAgPSB7fTtcblx0XHR2YXIgbWVyZ2VzID0gW10sIG1yYW5nZSA9IHt9LCBtUiA9IDAsIG1DID0gMDtcblx0XHR2YXIgcm93aW5mbyA9IFtdLCByb3dwZWF0ID0gMSwgY29scGVhdCA9IDE7XG5cdFx0dmFyIGFycmF5ZiA9IFtdO1xuXHRcdHZhciBXQiA9IHtOYW1lczpbXX07XG5cdFx0dmFyIGF0YWcgPSAoe30pO1xuXHRcdHZhciBfUmVmID0gW1wiXCIsIFwiXCJdO1xuXHRcdHZhciBjb21tZW50cyA9IFtdLCBjb21tZW50ID0gKHt9KTtcblx0XHR2YXIgY3JlYXRvciA9IFwiXCIsIGNyZWF0b3JpZHggPSAwO1xuXHRcdHZhciBpc3N0dWIgPSBmYWxzZSwgaW50YWJsZSA9IGZhbHNlO1xuXHRcdHZhciBpID0gMDtcblx0XHR4bG1scmVnZXgubGFzdEluZGV4ID0gMDtcblx0XHRzdHIgPSBzdHIucmVwbGFjZSgvPCEtLShbXFxzXFxTXSo/KS0tPi9tZyxcIlwiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxcW10qXFxbW15cXF1dKlxcXT4vZ20sXCJcIik7XG5cdFx0d2hpbGUoKFJuID0geGxtbHJlZ2V4LmV4ZWMoc3RyKSkpIHN3aXRjaCgoUm5bM109Um5bM10ucmVwbGFjZSgvXy4qJC8sXCJcIikpKSB7XG5cblx0XHRcdGNhc2UgJ3RhYmxlJzogY2FzZSAn5bel5L2c6KGoJzogLy8gOS4xLjIgPHRhYmxlOnRhYmxlPlxuXHRcdFx0XHRpZihSblsxXT09PScvJykge1xuXHRcdFx0XHRcdGlmKHJhbmdlLmUuYyA+PSByYW5nZS5zLmMgJiYgcmFuZ2UuZS5yID49IHJhbmdlLnMucikgd3NbJyFyZWYnXSA9IGVuY29kZV9yYW5nZShyYW5nZSk7XG5cdFx0XHRcdFx0aWYobWVyZ2VzLmxlbmd0aCkgd3NbJyFtZXJnZXMnXSA9IG1lcmdlcztcblx0XHRcdFx0XHRpZihyb3dpbmZvLmxlbmd0aCkgd3NbXCIhcm93c1wiXSA9IHJvd2luZm87XG5cdFx0XHRcdFx0c2hlZXRhZy5uYW1lID0gdXRmOHJlYWQoc2hlZXRhZ1sn5ZCN56ewJ10gfHwgc2hlZXRhZy5uYW1lKTtcblx0XHRcdFx0XHRTaGVldE5hbWVzLnB1c2goc2hlZXRhZy5uYW1lKTtcblx0XHRcdFx0XHRTaGVldHNbc2hlZXRhZy5uYW1lXSA9IHdzO1xuXHRcdFx0XHRcdGludGFibGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmKFJuWzBdLmNoYXJBdChSblswXS5sZW5ndGgtMikgIT09ICcvJykge1xuXHRcdFx0XHRcdHNoZWV0YWcgPSBwYXJzZXhtbHRhZyhSblswXSwgZmFsc2UpO1xuXHRcdFx0XHRcdFIgPSBDID0gLTE7XG5cdFx0XHRcdFx0cmFuZ2Uucy5yID0gcmFuZ2Uucy5jID0gMTAwMDAwMDA7IHJhbmdlLmUuciA9IHJhbmdlLmUuYyA9IDA7XG5cdFx0XHRcdFx0d3MgPSBvcHRzLmRlbnNlID8gKFtdKSA6ICh7fSk7IG1lcmdlcyA9IFtdO1xuXHRcdFx0XHRcdHJvd2luZm8gPSBbXTtcblx0XHRcdFx0XHRpbnRhYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAndGFibGUtcm93LWdyb3VwJzogLy8gOS4xLjkgPHRhYmxlOnRhYmxlLXJvdy1ncm91cD5cblx0XHRcdFx0aWYoUm5bMV0gPT09IFwiL1wiKSAtLXJvd19vbDsgZWxzZSArK3Jvd19vbDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd0YWJsZS1yb3cnOiBjYXNlICfooYwnOiAvLyA5LjEuMyA8dGFibGU6dGFibGUtcm93PlxuXHRcdFx0XHRpZihSblsxXSA9PT0gJy8nKSB7IFIrPXJvd3BlYXQ7IHJvd3BlYXQgPSAxOyBicmVhazsgfVxuXHRcdFx0XHRyb3d0YWcgPSBwYXJzZXhtbHRhZyhSblswXSwgZmFsc2UpO1xuXHRcdFx0XHRpZihyb3d0YWdbJ+ihjOWPtyddKSBSID0gcm93dGFnWyfooYzlj7cnXSAtIDE7IGVsc2UgaWYoUiA9PSAtMSkgUiA9IDA7XG5cdFx0XHRcdHJvd3BlYXQgPSArcm93dGFnWydudW1iZXItcm93cy1yZXBlYXRlZCddIHx8IDE7XG5cdFx0XHRcdC8qIFRPRE86IHJlbW92ZSBtYWdpYyAqL1xuXHRcdFx0XHRpZihyb3dwZWF0IDwgMTApIGZvcihpID0gMDsgaSA8IHJvd3BlYXQ7ICsraSkgaWYocm93X29sID4gMCkgcm93aW5mb1tSICsgaV0gPSB7bGV2ZWw6IHJvd19vbH07XG5cdFx0XHRcdEMgPSAtMTsgYnJlYWs7XG5cdFx0XHRjYXNlICdjb3ZlcmVkLXRhYmxlLWNlbGwnOiAvLyA5LjEuNSA8dGFibGU6Y292ZXJlZC10YWJsZS1jZWxsPlxuXHRcdFx0XHQrK0M7XG5cdFx0XHRcdGlmKG9wdHMuc2hlZXRTdHVicykge1xuXHRcdFx0XHRcdGlmKG9wdHMuZGVuc2UpIHsgaWYoIXdzW1JdKSB3c1tSXSA9IFtdOyB3c1tSXVtDXSA9IHt0Oid6J307IH1cblx0XHRcdFx0XHRlbHNlIHdzW2VuY29kZV9jZWxsKHtyOlIsYzpDfSldID0ge3Q6J3onfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhazsgLyogc3R1YiAqL1xuXHRcdFx0Y2FzZSAndGFibGUtY2VsbCc6IGNhc2UgJ+aVsOaNric6XG5cdFx0XHRcdGlmKFJuWzBdLmNoYXJBdChSblswXS5sZW5ndGgtMikgPT09ICcvJykge1xuXHRcdFx0XHRcdCsrQztcblx0XHRcdFx0XHRjdGFnID0gcGFyc2V4bWx0YWcoUm5bMF0sIGZhbHNlKTtcblx0XHRcdFx0XHRjb2xwZWF0ID0gcGFyc2VJbnQoY3RhZ1snbnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQnXXx8XCIxXCIsIDEwKTtcblx0XHRcdFx0XHRxID0gKHt0Oid6JywgdjpudWxsfSk7XG5cdFx0XHRcdFx0aWYoY3RhZy5mb3JtdWxhICYmIG9wdHMuY2VsbEZvcm11bGEgIT0gZmFsc2UpIHEuZiA9IG9kc190b19jc2ZfZm9ybXVsYSh1bmVzY2FwZXhtbChjdGFnLmZvcm11bGEpKTtcblx0XHRcdFx0XHRpZigoY3RhZ1sn5pWw5o2u57G75Z6LJ10gfHwgY3RhZ1sndmFsdWUtdHlwZSddKSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRxLnQgPSBcInNcIjsgcS52ID0gdW5lc2NhcGV4bWwoY3RhZ1snc3RyaW5nLXZhbHVlJ10gfHwgXCJcIik7XG5cdFx0XHRcdFx0XHRpZihvcHRzLmRlbnNlKSB7XG5cdFx0XHRcdFx0XHRcdGlmKCF3c1tSXSkgd3NbUl0gPSBbXTtcblx0XHRcdFx0XHRcdFx0d3NbUl1bQ10gPSBxO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0d3NbZW5jb2RlX2NlbGwoe3I6UixjOkN9KV0gPSBxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRDKz0gY29scGVhdC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYoUm5bMV0hPT0nLycpIHtcblx0XHRcdFx0XHQrK0M7XG5cdFx0XHRcdFx0Y29scGVhdCA9IDE7XG5cdFx0XHRcdFx0dmFyIHJwdFIgPSByb3dwZWF0ID8gUiArIHJvd3BlYXQgLSAxIDogUjtcblx0XHRcdFx0XHRpZihDID4gcmFuZ2UuZS5jKSByYW5nZS5lLmMgPSBDO1xuXHRcdFx0XHRcdGlmKEMgPCByYW5nZS5zLmMpIHJhbmdlLnMuYyA9IEM7XG5cdFx0XHRcdFx0aWYoUiA8IHJhbmdlLnMucikgcmFuZ2Uucy5yID0gUjtcblx0XHRcdFx0XHRpZihycHRSID4gcmFuZ2UuZS5yKSByYW5nZS5lLnIgPSBycHRSO1xuXHRcdFx0XHRcdGN0YWcgPSBwYXJzZXhtbHRhZyhSblswXSwgZmFsc2UpO1xuXHRcdFx0XHRcdGNvbW1lbnRzID0gW107IGNvbW1lbnQgPSAoe30pO1xuXHRcdFx0XHRcdHEgPSAoe3Q6Y3RhZ1sn5pWw5o2u57G75Z6LJ10gfHwgY3RhZ1sndmFsdWUtdHlwZSddLCB2Om51bGx9KTtcblx0XHRcdFx0XHRpZihvcHRzLmNlbGxGb3JtdWxhKSB7XG5cdFx0XHRcdFx0XHRpZihjdGFnLmZvcm11bGEpIGN0YWcuZm9ybXVsYSA9IHVuZXNjYXBleG1sKGN0YWcuZm9ybXVsYSk7XG5cdFx0XHRcdFx0XHRpZihjdGFnWydudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCddICYmIGN0YWdbJ251bWJlci1tYXRyaXgtcm93cy1zcGFubmVkJ10pIHtcblx0XHRcdFx0XHRcdFx0bVIgPSBwYXJzZUludChjdGFnWydudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCddLDEwKSB8fCAwO1xuXHRcdFx0XHRcdFx0XHRtQyA9IHBhcnNlSW50KGN0YWdbJ251bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkJ10sMTApIHx8IDA7XG5cdFx0XHRcdFx0XHRcdG1yYW5nZSA9IHtzOiB7cjpSLGM6Q30sIGU6e3I6UiArIG1SLTEsYzpDICsgbUMtMX19O1xuXHRcdFx0XHRcdFx0XHRxLkYgPSBlbmNvZGVfcmFuZ2UobXJhbmdlKTtcblx0XHRcdFx0XHRcdFx0YXJyYXlmLnB1c2goW21yYW5nZSwgcS5GXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihjdGFnLmZvcm11bGEpIHEuZiA9IG9kc190b19jc2ZfZm9ybXVsYShjdGFnLmZvcm11bGEpO1xuXHRcdFx0XHRcdFx0ZWxzZSBmb3IoaSA9IDA7IGkgPCBhcnJheWYubGVuZ3RoOyArK2kpXG5cdFx0XHRcdFx0XHRcdGlmKFIgPj0gYXJyYXlmW2ldWzBdLnMuciAmJiBSIDw9IGFycmF5ZltpXVswXS5lLnIpXG5cdFx0XHRcdFx0XHRcdFx0aWYoQyA+PSBhcnJheWZbaV1bMF0ucy5jICYmIEMgPD0gYXJyYXlmW2ldWzBdLmUuYylcblx0XHRcdFx0XHRcdFx0XHRcdHEuRiA9IGFycmF5ZltpXVsxXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoY3RhZ1snbnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCddIHx8IGN0YWdbJ251bWJlci1yb3dzLXNwYW5uZWQnXSkge1xuXHRcdFx0XHRcdFx0bVIgPSBwYXJzZUludChjdGFnWydudW1iZXItcm93cy1zcGFubmVkJ10sMTApIHx8IDA7XG5cdFx0XHRcdFx0XHRtQyA9IHBhcnNlSW50KGN0YWdbJ251bWJlci1jb2x1bW5zLXNwYW5uZWQnXSwxMCkgfHwgMDtcblx0XHRcdFx0XHRcdG1yYW5nZSA9IHtzOiB7cjpSLGM6Q30sIGU6e3I6UiArIG1SLTEsYzpDICsgbUMtMX19O1xuXHRcdFx0XHRcdFx0bWVyZ2VzLnB1c2gobXJhbmdlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiAxOS42NzUuMiB0YWJsZTpudW1iZXItY29sdW1ucy1yZXBlYXRlZCAqL1xuXHRcdFx0XHRcdGlmKGN0YWdbJ251bWJlci1jb2x1bW5zLXJlcGVhdGVkJ10pIGNvbHBlYXQgPSBwYXJzZUludChjdGFnWydudW1iZXItY29sdW1ucy1yZXBlYXRlZCddLCAxMCk7XG5cblx0XHRcdFx0XHQvKiAxOS4zODUgb2ZmaWNlOnZhbHVlLXR5cGUgKi9cblx0XHRcdFx0XHRzd2l0Y2gocS50KSB7XG5cdFx0XHRcdFx0XHRjYXNlICdib29sZWFuJzogcS50ID0gJ2InOyBxLnYgPSBwYXJzZXhtbGJvb2woY3RhZ1snYm9vbGVhbi12YWx1ZSddKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdmbG9hdCc6IHEudCA9ICduJzsgcS52ID0gcGFyc2VGbG9hdChjdGFnLnZhbHVlKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdwZXJjZW50YWdlJzogcS50ID0gJ24nOyBxLnYgPSBwYXJzZUZsb2F0KGN0YWcudmFsdWUpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2N1cnJlbmN5JzogcS50ID0gJ24nOyBxLnYgPSBwYXJzZUZsb2F0KGN0YWcudmFsdWUpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2RhdGUnOiBxLnQgPSAnZCc7IHEudiA9IHBhcnNlRGF0ZShjdGFnWydkYXRlLXZhbHVlJ10pO1xuXHRcdFx0XHRcdFx0XHRpZighb3B0cy5jZWxsRGF0ZXMpIHsgcS50ID0gJ24nOyBxLnYgPSBkYXRlbnVtKHEudik7IH1cblx0XHRcdFx0XHRcdFx0cS56ID0gJ20vZC95eSc7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAndGltZSc6IHEudCA9ICduJzsgcS52ID0gcGFyc2VfaXNvZHVyKGN0YWdbJ3RpbWUtdmFsdWUnXSkvODY0MDA7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnbnVtYmVyJzogcS50ID0gJ24nOyBxLnYgPSBwYXJzZUZsb2F0KGN0YWdbJ+aVsOaNruaVsOWAvCddKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRpZihxLnQgPT09ICdzdHJpbmcnIHx8IHEudCA9PT0gJ3RleHQnIHx8ICFxLnQpIHtcblx0XHRcdFx0XHRcdFx0XHRxLnQgPSAncyc7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY3RhZ1snc3RyaW5nLXZhbHVlJ10gIT0gbnVsbCkgdGV4dHAgPSB1bmVzY2FwZXhtbChjdGFnWydzdHJpbmctdmFsdWUnXSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZhbHVlIHR5cGUgJyArIHEudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlzc3R1YiA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmKHEudCA9PT0gJ3MnKSB7XG5cdFx0XHRcdFx0XHRxLnYgPSB0ZXh0cCB8fCAnJztcblx0XHRcdFx0XHRcdGlzc3R1YiA9IHRleHRwaWR4ID09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKGF0YWcuVGFyZ2V0KSBxLmwgPSBhdGFnO1xuXHRcdFx0XHRcdGlmKGNvbW1lbnRzLmxlbmd0aCA+IDApIHsgcS5jID0gY29tbWVudHM7IGNvbW1lbnRzID0gW107IH1cblx0XHRcdFx0XHRpZih0ZXh0cCAmJiBvcHRzLmNlbGxUZXh0ICE9PSBmYWxzZSkgcS53ID0gdGV4dHA7XG5cdFx0XHRcdFx0aWYoIWlzc3R1YiB8fCBvcHRzLnNoZWV0U3R1YnMpIHtcblx0XHRcdFx0XHRcdGlmKCEob3B0cy5zaGVldFJvd3MgJiYgb3B0cy5zaGVldFJvd3MgPCBSKSkge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHJwdCA9IDA7IHJwdCA8IHJvd3BlYXQ7ICsrcnB0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29scGVhdCA9IHBhcnNlSW50KGN0YWdbJ251bWJlci1jb2x1bW5zLXJlcGVhdGVkJ118fFwiMVwiLCAxMCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYob3B0cy5kZW5zZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIXdzW1IgKyBycHRdKSB3c1tSICsgcnB0XSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0d3NbUiArIHJwdF1bQ10gPSBycHQgPT0gMCA/IHEgOiBkdXAocSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSgtLWNvbHBlYXQgPiAwKSB3c1tSICsgcnB0XVtDICsgY29scGVhdF0gPSBkdXAocSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdzW2VuY29kZV9jZWxsKHtyOlIgKyBycHQsYzpDfSldID0gcTtcblx0XHRcdFx0XHRcdFx0XHRcdHdoaWxlKC0tY29scGVhdCA+IDApIHdzW2VuY29kZV9jZWxsKHtyOlIgKyBycHQsYzpDICsgY29scGVhdH0pXSA9IGR1cChxKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYocmFuZ2UuZS5jIDw9IEMpIHJhbmdlLmUuYyA9IEM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29scGVhdCA9IHBhcnNlSW50KGN0YWdbJ251bWJlci1jb2x1bW5zLXJlcGVhdGVkJ118fFwiMVwiLCAxMCk7XG5cdFx0XHRcdFx0QyArPSBjb2xwZWF0LTE7IGNvbHBlYXQgPSAwO1xuXHRcdFx0XHRcdHEgPSB7fTtcblx0XHRcdFx0XHR0ZXh0cCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXRhZyA9ICh7fSk7XG5cdFx0XHRcdGJyZWFrOyAvLyA5LjEuNCA8dGFibGU6dGFibGUtY2VsbD5cblxuXHRcdFx0LyogcHVyZSBzdGF0ZSAqL1xuXHRcdFx0Y2FzZSAnZG9jdW1lbnQnOiAvLyBUT0RPOiA8b2ZmaWNlOmRvY3VtZW50PiBpcyB0aGUgcm9vdCBmb3IgRk9EU1xuXHRcdFx0Y2FzZSAnZG9jdW1lbnQtY29udGVudCc6IGNhc2UgJ+eUteWtkOihqOagvOaWh+ahoyc6IC8vIDMuMS4zLjIgPG9mZmljZTpkb2N1bWVudC1jb250ZW50PlxuXHRcdFx0Y2FzZSAnc3ByZWFkc2hlZXQnOiBjYXNlICfkuLvkvZMnOiAvLyAzLjcgPG9mZmljZTpzcHJlYWRzaGVldD5cblx0XHRcdGNhc2UgJ3NjcmlwdHMnOiAvLyAzLjEyIDxvZmZpY2U6c2NyaXB0cz5cblx0XHRcdGNhc2UgJ3N0eWxlcyc6IC8vIFRPRE8gPG9mZmljZTpzdHlsZXM+XG5cdFx0XHRjYXNlICdmb250LWZhY2UtZGVjbHMnOiAvLyAzLjE0IDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuXHRcdFx0XHRpZihSblsxXT09PScvJyl7aWYoKHRtcD1zdGF0ZS5wb3AoKSlbMF0hPT1SblszXSkgdGhyb3cgXCJCYWQgc3RhdGU6IFwiK3RtcDt9XG5cdFx0XHRcdGVsc2UgaWYoUm5bMF0uY2hhckF0KFJuWzBdLmxlbmd0aC0yKSAhPT0gJy8nKSBzdGF0ZS5wdXNoKFtSblszXSwgdHJ1ZV0pO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnYW5ub3RhdGlvbic6IC8vIDE0LjEgPG9mZmljZTphbm5vdGF0aW9uPlxuXHRcdFx0XHRpZihSblsxXT09PScvJyl7XG5cdFx0XHRcdFx0aWYoKHRtcD1zdGF0ZS5wb3AoKSlbMF0hPT1SblszXSkgdGhyb3cgXCJCYWQgc3RhdGU6IFwiK3RtcDtcblx0XHRcdFx0XHRjb21tZW50LnQgPSB0ZXh0cDtcblx0XHRcdFx0XHRjb21tZW50LmEgPSBjcmVhdG9yO1xuXHRcdFx0XHRcdGNvbW1lbnRzLnB1c2goY29tbWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZihSblswXS5jaGFyQXQoUm5bMF0ubGVuZ3RoLTIpICE9PSAnLycpIHtzdGF0ZS5wdXNoKFtSblszXSwgZmFsc2VdKTt9XG5cdFx0XHRcdGNyZWF0b3IgPSBcIlwiOyBjcmVhdG9yaWR4ID0gMDtcblx0XHRcdFx0dGV4dHAgPSBcIlwiOyB0ZXh0cGlkeCA9IDA7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdjcmVhdG9yJzogLy8gNC4zLjIuNyA8ZGM6Y3JlYXRvcj5cblx0XHRcdFx0aWYoUm5bMV09PT0nLycpIHsgY3JlYXRvciA9IHN0ci5zbGljZShjcmVhdG9yaWR4LFJuLmluZGV4KTsgfVxuXHRcdFx0XHRlbHNlIGNyZWF0b3JpZHggPSBSbi5pbmRleCArIFJuWzBdLmxlbmd0aDtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdC8qIGlnbm9yZSBzdGF0ZSAqL1xuXHRcdFx0Y2FzZSAnbWV0YSc6IGNhc2UgJ+WFg+aVsOaNric6IC8vIFRPRE86IDxvZmZpY2U6bWV0YT4gPHVvZjrlhYPmlbDmja4+IEZPRFMvVU9GXG5cdFx0XHRjYXNlICdzZXR0aW5ncyc6IC8vIFRPRE86IDxvZmZpY2U6c2V0dGluZ3M+XG5cdFx0XHRjYXNlICdjb25maWctaXRlbS1zZXQnOiAvLyBUT0RPOiA8b2ZmaWNlOmNvbmZpZy1pdGVtLXNldD5cblx0XHRcdGNhc2UgJ2NvbmZpZy1pdGVtLW1hcC1pbmRleGVkJzogLy8gVE9ETzogPG9mZmljZTpjb25maWctaXRlbS1tYXAtaW5kZXhlZD5cblx0XHRcdGNhc2UgJ2NvbmZpZy1pdGVtLW1hcC1lbnRyeSc6IC8vIFRPRE86IDxvZmZpY2U6Y29uZmlnLWl0ZW0tbWFwLWVudHJ5PlxuXHRcdFx0Y2FzZSAnY29uZmlnLWl0ZW0tbWFwLW5hbWVkJzogLy8gVE9ETzogPG9mZmljZTpjb25maWctaXRlbS1tYXAtZW50cnk+XG5cdFx0XHRjYXNlICdzaGFwZXMnOiAvLyA5LjIuOCA8dGFibGU6c2hhcGVzPlxuXHRcdFx0Y2FzZSAnZnJhbWUnOiAvLyAxMC40LjIgPGRyYXc6ZnJhbWU+XG5cdFx0XHRjYXNlICd0ZXh0LWJveCc6IC8vIDEwLjQuMyA8ZHJhdzp0ZXh0LWJveD5cblx0XHRcdGNhc2UgJ2ltYWdlJzogLy8gMTAuNC40IDxkcmF3OmltYWdlPlxuXHRcdFx0Y2FzZSAnZGF0YS1waWxvdC10YWJsZXMnOiAvLyA5LjYuMiA8dGFibGU6ZGF0YS1waWxvdC10YWJsZXM+XG5cdFx0XHRjYXNlICdsaXN0LXN0eWxlJzogLy8gMTYuMzAgPHRleHQ6bGlzdC1zdHlsZT5cblx0XHRcdGNhc2UgJ2Zvcm0nOiAvLyAxMy4xMyA8Zm9ybTpmb3JtPlxuXHRcdFx0Y2FzZSAnZGRlLWxpbmtzJzogLy8gOS44IDx0YWJsZTpkZGUtbGlua3M+XG5cdFx0XHRjYXNlICdldmVudC1saXN0ZW5lcnMnOiAvLyBUT0RPXG5cdFx0XHRjYXNlICdjaGFydCc6IC8vIFRPRE9cblx0XHRcdFx0aWYoUm5bMV09PT0nLycpe2lmKCh0bXA9c3RhdGUucG9wKCkpWzBdIT09Um5bM10pIHRocm93IFwiQmFkIHN0YXRlOiBcIit0bXA7fVxuXHRcdFx0XHRlbHNlIGlmKFJuWzBdLmNoYXJBdChSblswXS5sZW5ndGgtMikgIT09ICcvJykgc3RhdGUucHVzaChbUm5bM10sIGZhbHNlXSk7XG5cdFx0XHRcdHRleHRwID0gXCJcIjsgdGV4dHBpZHggPSAwO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnc2NpZW50aWZpYy1udW1iZXInOiAvLyBUT0RPOiA8bnVtYmVyOnNjaWVudGlmaWMtbnVtYmVyPlxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2N1cnJlbmN5LXN5bWJvbCc6IC8vIFRPRE86IDxudW1iZXI6Y3VycmVuY3ktc3ltYm9sPlxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2N1cnJlbmN5LXN0eWxlJzogLy8gVE9ETzogPG51bWJlcjpjdXJyZW5jeS1zdHlsZT5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdudW1iZXItc3R5bGUnOiAvLyAxNi4yNy4yIDxudW1iZXI6bnVtYmVyLXN0eWxlPlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZS1zdHlsZSc6IC8vIDE2LjI3LjkgPG51bWJlcjpwZXJjZW50YWdlLXN0eWxlPlxuXHRcdFx0Y2FzZSAnZGF0ZS1zdHlsZSc6IC8vIDE2LjI3LjEwIDxudW1iZXI6ZGF0ZS1zdHlsZT5cblx0XHRcdGNhc2UgJ3RpbWUtc3R5bGUnOiAvLyAxNi4yNy4xOCA8bnVtYmVyOnRpbWUtc3R5bGU+XG5cdFx0XHRcdGlmKFJuWzFdPT09Jy8nKXtcblx0XHRcdFx0XHRudW1iZXJfZm9ybWF0X21hcFtORnRhZy5uYW1lXSA9IE5GO1xuXHRcdFx0XHRcdGlmKCh0bXA9c3RhdGUucG9wKCkpWzBdIT09Um5bM10pIHRocm93IFwiQmFkIHN0YXRlOiBcIit0bXA7XG5cdFx0XHRcdH0gZWxzZSBpZihSblswXS5jaGFyQXQoUm5bMF0ubGVuZ3RoLTIpICE9PSAnLycpIHtcblx0XHRcdFx0XHRORiA9IFwiXCI7XG5cdFx0XHRcdFx0TkZ0YWcgPSBwYXJzZXhtbHRhZyhSblswXSwgZmFsc2UpO1xuXHRcdFx0XHRcdHN0YXRlLnB1c2goW1JuWzNdLCB0cnVlXSk7XG5cdFx0XHRcdH0gYnJlYWs7XG5cblx0XHRcdGNhc2UgJ3NjcmlwdCc6IGJyZWFrOyAvLyAzLjEzIDxvZmZpY2U6c2NyaXB0PlxuXHRcdFx0Y2FzZSAnbGlicmFyaWVzJzogYnJlYWs7IC8vIFRPRE86IDxvb286bGlicmFyaWVzPlxuXHRcdFx0Y2FzZSAnYXV0b21hdGljLXN0eWxlcyc6IGJyZWFrOyAvLyAzLjE1LjMgPG9mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuXHRcdFx0Y2FzZSAnbWFzdGVyLXN0eWxlcyc6IGJyZWFrOyAvLyBUT0RPOiA8b2ZmaWNlOm1hc3Rlci1zdHlsZXM+XG5cblx0XHRcdGNhc2UgJ2RlZmF1bHQtc3R5bGUnOiAvLyBUT0RPOiA8c3R5bGU6ZGVmYXVsdC1zdHlsZT5cblx0XHRcdGNhc2UgJ3BhZ2UtbGF5b3V0JzogYnJlYWs7IC8vIFRPRE86IDxzdHlsZTpwYWdlLWxheW91dD5cblx0XHRcdGNhc2UgJ3N0eWxlJzogYnJlYWs7IC8vIDE2LjIgPHN0eWxlOnN0eWxlPlxuXHRcdFx0Y2FzZSAnbWFwJzogYnJlYWs7IC8vIDE2LjMgPHN0eWxlOm1hcD5cblx0XHRcdGNhc2UgJ2ZvbnQtZmFjZSc6IGJyZWFrOyAvLyAxNi4yMSA8c3R5bGU6Zm9udC1mYWNlPlxuXG5cdFx0XHRjYXNlICdwYXJhZ3JhcGgtcHJvcGVydGllcyc6IGJyZWFrOyAvLyAxNy42IDxzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcz5cblx0XHRcdGNhc2UgJ3RhYmxlLXByb3BlcnRpZXMnOiBicmVhazsgLy8gMTcuMTUgPHN0eWxlOnRhYmxlLXByb3BlcnRpZXM+XG5cdFx0XHRjYXNlICd0YWJsZS1jb2x1bW4tcHJvcGVydGllcyc6IGJyZWFrOyAvLyAxNy4xNiA8c3R5bGU6dGFibGUtY29sdW1uLXByb3BlcnRpZXM+XG5cdFx0XHRjYXNlICd0YWJsZS1yb3ctcHJvcGVydGllcyc6IGJyZWFrOyAvLyAxNy4xNyA8c3R5bGU6dGFibGUtcm93LXByb3BlcnRpZXM+XG5cdFx0XHRjYXNlICd0YWJsZS1jZWxsLXByb3BlcnRpZXMnOiBicmVhazsgLy8gMTcuMTggPHN0eWxlOnRhYmxlLWNlbGwtcHJvcGVydGllcz5cblxuXHRcdFx0Y2FzZSAnbnVtYmVyJzogLy8gMTYuMjcuMyA8bnVtYmVyOm51bWJlcj5cblx0XHRcdFx0c3dpdGNoKHN0YXRlW3N0YXRlLmxlbmd0aC0xXVswXSkge1xuXHRcdFx0XHRcdGNhc2UgJ3RpbWUtc3R5bGUnOlxuXHRcdFx0XHRcdGNhc2UgJ2RhdGUtc3R5bGUnOlxuXHRcdFx0XHRcdFx0dGFnID0gcGFyc2V4bWx0YWcoUm5bMF0sIGZhbHNlKTtcblx0XHRcdFx0XHRcdE5GICs9IG51bWJlcl9mb3JtYXRzW1JuWzNdXVt0YWcuc3R5bGU9PT0nbG9uZyc/MTowXTsgYnJlYWs7XG5cdFx0XHRcdH0gYnJlYWs7XG5cblx0XHRcdGNhc2UgJ2ZyYWN0aW9uJzogYnJlYWs7IC8vIFRPRE8gMTYuMjcuNiA8bnVtYmVyOmZyYWN0aW9uPlxuXG5cdFx0XHRjYXNlICdkYXknOiAvLyAxNi4yNy4xMSA8bnVtYmVyOmRheT5cblx0XHRcdGNhc2UgJ21vbnRoJzogLy8gMTYuMjcuMTIgPG51bWJlcjptb250aD5cblx0XHRcdGNhc2UgJ3llYXInOiAvLyAxNi4yNy4xMyA8bnVtYmVyOnllYXI+XG5cdFx0XHRjYXNlICdlcmEnOiAvLyAxNi4yNy4xNCA8bnVtYmVyOmVyYT5cblx0XHRcdGNhc2UgJ2RheS1vZi13ZWVrJzogLy8gMTYuMjcuMTUgPG51bWJlcjpkYXktb2Ytd2Vlaz5cblx0XHRcdGNhc2UgJ3dlZWstb2YteWVhcic6IC8vIDE2LjI3LjE2IDxudW1iZXI6d2Vlay1vZi15ZWFyPlxuXHRcdFx0Y2FzZSAncXVhcnRlcic6IC8vIDE2LjI3LjE3IDxudW1iZXI6cXVhcnRlcj5cblx0XHRcdGNhc2UgJ2hvdXJzJzogLy8gMTYuMjcuMTkgPG51bWJlcjpob3Vycz5cblx0XHRcdGNhc2UgJ21pbnV0ZXMnOiAvLyAxNi4yNy4yMCA8bnVtYmVyOm1pbnV0ZXM+XG5cdFx0XHRjYXNlICdzZWNvbmRzJzogLy8gMTYuMjcuMjEgPG51bWJlcjpzZWNvbmRzPlxuXHRcdFx0Y2FzZSAnYW0tcG0nOiAvLyAxNi4yNy4yMiA8bnVtYmVyOmFtLXBtPlxuXHRcdFx0XHRzd2l0Y2goc3RhdGVbc3RhdGUubGVuZ3RoLTFdWzBdKSB7XG5cdFx0XHRcdFx0Y2FzZSAndGltZS1zdHlsZSc6XG5cdFx0XHRcdFx0Y2FzZSAnZGF0ZS1zdHlsZSc6XG5cdFx0XHRcdFx0XHR0YWcgPSBwYXJzZXhtbHRhZyhSblswXSwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0TkYgKz0gbnVtYmVyX2Zvcm1hdHNbUm5bM11dW3RhZy5zdHlsZT09PSdsb25nJz8xOjBdOyBicmVhaztcblx0XHRcdFx0fSBicmVhaztcblxuXHRcdFx0Y2FzZSAnYm9vbGVhbi1zdHlsZSc6IGJyZWFrOyAvLyAxNi4yNy4yMyA8bnVtYmVyOmJvb2xlYW4tc3R5bGU+XG5cdFx0XHRjYXNlICdib29sZWFuJzogYnJlYWs7IC8vIDE2LjI3LjI0IDxudW1iZXI6Ym9vbGVhbj5cblx0XHRcdGNhc2UgJ3RleHQtc3R5bGUnOiBicmVhazsgLy8gMTYuMjcuMjUgPG51bWJlcjp0ZXh0LXN0eWxlPlxuXHRcdFx0Y2FzZSAndGV4dCc6IC8vIDE2LjI3LjI2IDxudW1iZXI6dGV4dD5cblx0XHRcdFx0aWYoUm5bMF0uc2xpY2UoLTIpID09PSBcIi8+XCIpIGJyZWFrO1xuXHRcdFx0XHRlbHNlIGlmKFJuWzFdPT09XCIvXCIpIHN3aXRjaChzdGF0ZVtzdGF0ZS5sZW5ndGgtMV1bMF0pIHtcblx0XHRcdFx0XHRjYXNlICdudW1iZXItc3R5bGUnOlxuXHRcdFx0XHRcdGNhc2UgJ2RhdGUtc3R5bGUnOlxuXHRcdFx0XHRcdGNhc2UgJ3RpbWUtc3R5bGUnOlxuXHRcdFx0XHRcdFx0TkYgKz0gc3RyLnNsaWNlKHBpZHgsIFJuLmluZGV4KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgcGlkeCA9IFJuLmluZGV4ICsgUm5bMF0ubGVuZ3RoO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnbmFtZWQtcmFuZ2UnOiAvLyA5LjQuMTIgPHRhYmxlOm5hbWVkLXJhbmdlPlxuXHRcdFx0XHR0YWcgPSBwYXJzZXhtbHRhZyhSblswXSwgZmFsc2UpO1xuXHRcdFx0XHRfUmVmID0gb2RzX3RvX2NzZl8zRCh0YWdbJ2NlbGwtcmFuZ2UtYWRkcmVzcyddKTtcblx0XHRcdFx0dmFyIG5yYW5nZSA9ICh7TmFtZTp0YWcubmFtZSwgUmVmOl9SZWZbMF0gKyAnIScgKyBfUmVmWzFdfSk7XG5cdFx0XHRcdGlmKGludGFibGUpIG5yYW5nZS5TaGVldCA9IFNoZWV0TmFtZXMubGVuZ3RoO1xuXHRcdFx0XHRXQi5OYW1lcy5wdXNoKG5yYW5nZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICd0ZXh0LWNvbnRlbnQnOiBicmVhazsgLy8gMTYuMjcuMjcgPG51bWJlcjp0ZXh0LWNvbnRlbnQ+XG5cdFx0XHRjYXNlICd0ZXh0LXByb3BlcnRpZXMnOiBicmVhazsgLy8gMTYuMjcuMjcgPHN0eWxlOnRleHQtcHJvcGVydGllcz5cblx0XHRcdGNhc2UgJ2VtYmVkZGVkLXRleHQnOiBicmVhazsgLy8gMTYuMjcuNCA8bnVtYmVyOmVtYmVkZGVkLXRleHQ+XG5cblx0XHRcdGNhc2UgJ2JvZHknOiBjYXNlICfnlLXlrZDooajmoLwnOiBicmVhazsgLy8gMy4zIDE2LjkuNiAxOS43MjYuM1xuXG5cdFx0XHRjYXNlICdmb3Jtcyc6IGJyZWFrOyAvLyAxMi4yNS4yIDEzLjJcblx0XHRcdGNhc2UgJ3RhYmxlLWNvbHVtbic6IGJyZWFrOyAvLyA5LjEuNiA8dGFibGU6dGFibGUtY29sdW1uPlxuXHRcdFx0Y2FzZSAndGFibGUtaGVhZGVyLXJvd3MnOiBicmVhazsgLy8gOS4xLjcgPHRhYmxlOnRhYmxlLWhlYWRlci1yb3dzPlxuXHRcdFx0Y2FzZSAndGFibGUtcm93cyc6IGJyZWFrOyAvLyA5LjEuMTIgPHRhYmxlOnRhYmxlLXJvd3M+XG5cdFx0XHQvKiBUT0RPOiBvdXRsaW5lIGxldmVscyAqL1xuXHRcdFx0Y2FzZSAndGFibGUtY29sdW1uLWdyb3VwJzogYnJlYWs7IC8vIDkuMS4xMCA8dGFibGU6dGFibGUtY29sdW1uLWdyb3VwPlxuXHRcdFx0Y2FzZSAndGFibGUtaGVhZGVyLWNvbHVtbnMnOiBicmVhazsgLy8gOS4xLjExIDx0YWJsZTp0YWJsZS1oZWFkZXItY29sdW1ucz5cblx0XHRcdGNhc2UgJ3RhYmxlLWNvbHVtbnMnOiBicmVhazsgLy8gOS4xLjEyIDx0YWJsZTp0YWJsZS1jb2x1bW5zPlxuXG5cdFx0XHRjYXNlICdudWxsLWRhdGUnOiBicmVhazsgLy8gOS40LjIgPHRhYmxlOm51bGwtZGF0ZT4gVE9ETzogZGF0ZTE5MDRcblxuXHRcdFx0Y2FzZSAnZ3JhcGhpYy1wcm9wZXJ0aWVzJzogYnJlYWs7IC8vIDE3LjIxIDxzdHlsZTpncmFwaGljLXByb3BlcnRpZXM+XG5cdFx0XHRjYXNlICdjYWxjdWxhdGlvbi1zZXR0aW5ncyc6IGJyZWFrOyAvLyA5LjQuMSA8dGFibGU6Y2FsY3VsYXRpb24tc2V0dGluZ3M+XG5cdFx0XHRjYXNlICduYW1lZC1leHByZXNzaW9ucyc6IGJyZWFrOyAvLyA5LjQuMTEgPHRhYmxlOm5hbWVkLWV4cHJlc3Npb25zPlxuXHRcdFx0Y2FzZSAnbGFiZWwtcmFuZ2UnOiBicmVhazsgLy8gOS40LjkgPHRhYmxlOmxhYmVsLXJhbmdlPlxuXHRcdFx0Y2FzZSAnbGFiZWwtcmFuZ2VzJzogYnJlYWs7IC8vIDkuNC4xMCA8dGFibGU6bGFiZWwtcmFuZ2VzPlxuXHRcdFx0Y2FzZSAnbmFtZWQtZXhwcmVzc2lvbic6IGJyZWFrOyAvLyA5LjQuMTMgPHRhYmxlOm5hbWVkLWV4cHJlc3Npb24+XG5cdFx0XHRjYXNlICdzb3J0JzogYnJlYWs7IC8vIDkuNC4xOSA8dGFibGU6c29ydD5cblx0XHRcdGNhc2UgJ3NvcnQtYnknOiBicmVhazsgLy8gOS40LjIwIDx0YWJsZTpzb3J0LWJ5PlxuXHRcdFx0Y2FzZSAnc29ydC1ncm91cHMnOiBicmVhazsgLy8gOS40LjIyIDx0YWJsZTpzb3J0LWdyb3Vwcz5cblxuXHRcdFx0Y2FzZSAndGFiJzogYnJlYWs7IC8vIDYuMS40IDx0ZXh0OnRhYj5cblx0XHRcdGNhc2UgJ2xpbmUtYnJlYWsnOiBicmVhazsgLy8gNi4xLjUgPHRleHQ6bGluZS1icmVhaz5cblx0XHRcdGNhc2UgJ3NwYW4nOiBicmVhazsgLy8gNi4xLjcgPHRleHQ6c3Bhbj5cblx0XHRcdGNhc2UgJ3AnOiBjYXNlICfmlofmnKzkuLInOiAvLyA1LjEuMyA8dGV4dDpwPlxuXHRcdFx0XHRpZihSblsxXT09PScvJyAmJiAoIWN0YWcgfHwgIWN0YWdbJ3N0cmluZy12YWx1ZSddKSkgdGV4dHAgPSAodGV4dHAubGVuZ3RoID4gMCA/IHRleHRwICsgXCJcXG5cIiA6IFwiXCIpICsgcGFyc2VfdGV4dF9wKHN0ci5zbGljZSh0ZXh0cGlkeCxSbi5pbmRleCksIHRleHRwdGFnKTtcblx0XHRcdFx0ZWxzZSB7IHRleHRwdGFnID0gcGFyc2V4bWx0YWcoUm5bMF0sIGZhbHNlKTsgdGV4dHBpZHggPSBSbi5pbmRleCArIFJuWzBdLmxlbmd0aDsgfVxuXHRcdFx0XHRicmVhazsgLy8gPHRleHQ6cD5cblx0XHRcdGNhc2UgJ3MnOiBicmVhazsgLy8gPHRleHQ6cz5cblxuXHRcdFx0Y2FzZSAnZGF0YWJhc2UtcmFuZ2UnOiAvLyA5LjQuMTUgPHRhYmxlOmRhdGFiYXNlLXJhbmdlPlxuXHRcdFx0XHRpZihSblsxXT09PScvJykgYnJlYWs7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0X1JlZiA9IG9kc190b19jc2ZfM0QocGFyc2V4bWx0YWcoUm5bMF0pWyd0YXJnZXQtcmFuZ2UtYWRkcmVzcyddKTtcblx0XHRcdFx0XHRTaGVldHNbX1JlZlswXV1bJyFhdXRvZmlsdGVyJ10gPSB7IHJlZjpfUmVmWzFdIH07XG5cdFx0XHRcdH0gY2F0Y2goZSkgey8qIGVtcHR5ICovfVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnZGF0ZSc6IGJyZWFrOyAvLyA8KjpkYXRlPlxuXG5cdFx0XHRjYXNlICdvYmplY3QnOiBicmVhazsgLy8gMTAuNC42LjIgPGRyYXc6b2JqZWN0PlxuXHRcdFx0Y2FzZSAndGl0bGUnOiBjYXNlICfmoIfpopgnOiBicmVhazsgLy8gPCo6dGl0bGU+IE9SIDx1b2Y65qCH6aKYPlxuXHRcdFx0Y2FzZSAnZGVzYyc6IGJyZWFrOyAvLyA8KjpkZXNjPlxuXHRcdFx0Y2FzZSAnYmluYXJ5LWRhdGEnOiBicmVhazsgLy8gMTAuNC41IFRPRE86IGI2NCBibG9iXG5cblx0XHRcdC8qIDkuMiBBZHZhbmNlZCBUYWJsZXMgKi9cblx0XHRcdGNhc2UgJ3RhYmxlLXNvdXJjZSc6IGJyZWFrOyAvLyA5LjIuNlxuXHRcdFx0Y2FzZSAnc2NlbmFyaW8nOiBicmVhazsgLy8gOS4yLjZcblxuXHRcdFx0Y2FzZSAnaXRlcmF0aW9uJzogYnJlYWs7IC8vIDkuNC4zIDx0YWJsZTppdGVyYXRpb24+XG5cdFx0XHRjYXNlICdjb250ZW50LXZhbGlkYXRpb25zJzogYnJlYWs7IC8vIDkuNC40IDx0YWJsZTpcblx0XHRcdGNhc2UgJ2NvbnRlbnQtdmFsaWRhdGlvbic6IGJyZWFrOyAvLyA5LjQuNSA8dGFibGU6XG5cdFx0XHRjYXNlICdoZWxwLW1lc3NhZ2UnOiBicmVhazsgLy8gOS40LjYgPHRhYmxlOlxuXHRcdFx0Y2FzZSAnZXJyb3ItbWVzc2FnZSc6IGJyZWFrOyAvLyA5LjQuNyA8dGFibGU6XG5cdFx0XHRjYXNlICdkYXRhYmFzZS1yYW5nZXMnOiBicmVhazsgLy8gOS40LjE0IDx0YWJsZTpkYXRhYmFzZS1yYW5nZXM+XG5cdFx0XHRjYXNlICdmaWx0ZXInOiBicmVhazsgLy8gOS41LjIgPHRhYmxlOmZpbHRlcj5cblx0XHRcdGNhc2UgJ2ZpbHRlci1hbmQnOiBicmVhazsgLy8gOS41LjMgPHRhYmxlOmZpbHRlci1hbmQ+XG5cdFx0XHRjYXNlICdmaWx0ZXItb3InOiBicmVhazsgLy8gOS41LjQgPHRhYmxlOmZpbHRlci1vcj5cblx0XHRcdGNhc2UgJ2ZpbHRlci1jb25kaXRpb24nOiBicmVhazsgLy8gOS41LjUgPHRhYmxlOmZpbHRlci1jb25kaXRpb24+XG5cblx0XHRcdGNhc2UgJ2xpc3QtbGV2ZWwtc3R5bGUtYnVsbGV0JzogYnJlYWs7IC8vIDE2LjMxIDx0ZXh0OlxuXHRcdFx0Y2FzZSAnbGlzdC1sZXZlbC1zdHlsZS1udW1iZXInOiBicmVhazsgLy8gMTYuMzIgPHRleHQ6XG5cdFx0XHRjYXNlICdsaXN0LWxldmVsLXByb3BlcnRpZXMnOiBicmVhazsgLy8gMTcuMTkgPHN0eWxlOlxuXG5cdFx0XHQvKiA3LjMgRG9jdW1lbnQgRmllbGRzICovXG5cdFx0XHRjYXNlICdzZW5kZXItZmlyc3RuYW1lJzogLy8gNy4zLjYuMlxuXHRcdFx0Y2FzZSAnc2VuZGVyLWxhc3RuYW1lJzogLy8gNy4zLjYuM1xuXHRcdFx0Y2FzZSAnc2VuZGVyLWluaXRpYWxzJzogLy8gNy4zLjYuNFxuXHRcdFx0Y2FzZSAnc2VuZGVyLXRpdGxlJzogLy8gNy4zLjYuNVxuXHRcdFx0Y2FzZSAnc2VuZGVyLXBvc2l0aW9uJzogLy8gNy4zLjYuNlxuXHRcdFx0Y2FzZSAnc2VuZGVyLWVtYWlsJzogLy8gNy4zLjYuN1xuXHRcdFx0Y2FzZSAnc2VuZGVyLXBob25lLXByaXZhdGUnOiAvLyA3LjMuNi44XG5cdFx0XHRjYXNlICdzZW5kZXItZmF4JzogLy8gNy4zLjYuOVxuXHRcdFx0Y2FzZSAnc2VuZGVyLWNvbXBhbnknOiAvLyA3LjMuNi4xMFxuXHRcdFx0Y2FzZSAnc2VuZGVyLXBob25lLXdvcmsnOiAvLyA3LjMuNi4xMVxuXHRcdFx0Y2FzZSAnc2VuZGVyLXN0cmVldCc6IC8vIDcuMy42LjEyXG5cdFx0XHRjYXNlICdzZW5kZXItY2l0eSc6IC8vIDcuMy42LjEzXG5cdFx0XHRjYXNlICdzZW5kZXItcG9zdGFsLWNvZGUnOiAvLyA3LjMuNi4xNFxuXHRcdFx0Y2FzZSAnc2VuZGVyLWNvdW50cnknOiAvLyA3LjMuNi4xNVxuXHRcdFx0Y2FzZSAnc2VuZGVyLXN0YXRlLW9yLXByb3ZpbmNlJzogLy8gNy4zLjYuMTZcblx0XHRcdGNhc2UgJ2F1dGhvci1uYW1lJzogLy8gNy4zLjcuMVxuXHRcdFx0Y2FzZSAnYXV0aG9yLWluaXRpYWxzJzogLy8gNy4zLjcuMlxuXHRcdFx0Y2FzZSAnY2hhcHRlcic6IC8vIDcuMy44XG5cdFx0XHRjYXNlICdmaWxlLW5hbWUnOiAvLyA3LjMuOVxuXHRcdFx0Y2FzZSAndGVtcGxhdGUtbmFtZSc6IC8vIDcuMy45XG5cdFx0XHRjYXNlICdzaGVldC1uYW1lJzogLy8gNy4zLjlcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ2V2ZW50LWxpc3RlbmVyJzpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvKiBUT0RPOiBGT0RTIFByb3BlcnRpZXMgKi9cblx0XHRcdGNhc2UgJ2luaXRpYWwtY3JlYXRvcic6XG5cdFx0XHRjYXNlICdjcmVhdGlvbi1kYXRlJzpcblx0XHRcdGNhc2UgJ3ByaW50LWRhdGUnOlxuXHRcdFx0Y2FzZSAnZ2VuZXJhdG9yJzpcblx0XHRcdGNhc2UgJ2RvY3VtZW50LXN0YXRpc3RpYyc6XG5cdFx0XHRjYXNlICd1c2VyLWRlZmluZWQnOlxuXHRcdFx0Y2FzZSAnZWRpdGluZy1kdXJhdGlvbic6XG5cdFx0XHRjYXNlICdlZGl0aW5nLWN5Y2xlcyc6XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHQvKiBUT0RPOiBGT0RTIENvbmZpZyAqL1xuXHRcdFx0Y2FzZSAnY29uZmlnLWl0ZW0nOlxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0LyogVE9ETzogc3R5bGUgdG9rZW5zICovXG5cdFx0XHRjYXNlICdwYWdlLW51bWJlcic6IGJyZWFrOyAvLyBUT0RPIDx0ZXh0OnBhZ2UtbnVtYmVyPlxuXHRcdFx0Y2FzZSAncGFnZS1jb3VudCc6IGJyZWFrOyAvLyBUT0RPIDx0ZXh0OnBhZ2UtY291bnQ+XG5cdFx0XHRjYXNlICd0aW1lJzogYnJlYWs7IC8vIFRPRE8gPHRleHQ6dGltZT5cblxuXHRcdFx0LyogOS4zIEFkdmFuY2VkIFRhYmxlIENlbGxzICovXG5cdFx0XHRjYXNlICdjZWxsLXJhbmdlLXNvdXJjZSc6IGJyZWFrOyAvLyA5LjMuMSA8dGFibGU6XG5cdFx0XHRjYXNlICdkZXRlY3RpdmUnOiBicmVhazsgLy8gOS4zLjIgPHRhYmxlOlxuXHRcdFx0Y2FzZSAnb3BlcmF0aW9uJzogYnJlYWs7IC8vIDkuMy4zIDx0YWJsZTpcblx0XHRcdGNhc2UgJ2hpZ2hsaWdodGVkLXJhbmdlJzogYnJlYWs7IC8vIDkuMy40IDx0YWJsZTpcblxuXHRcdFx0LyogOS42IERhdGEgUGlsb3QgVGFibGVzIDx0YWJsZTogKi9cblx0XHRcdGNhc2UgJ2RhdGEtcGlsb3QtdGFibGUnOiAvLyA5LjYuM1xuXHRcdFx0Y2FzZSAnc291cmNlLWNlbGwtcmFuZ2UnOiAvLyA5LjYuNVxuXHRcdFx0Y2FzZSAnc291cmNlLXNlcnZpY2UnOiAvLyA5LjYuNlxuXHRcdFx0Y2FzZSAnZGF0YS1waWxvdC1maWVsZCc6IC8vIDkuNi43XG5cdFx0XHRjYXNlICdkYXRhLXBpbG90LWxldmVsJzogLy8gOS42Ljhcblx0XHRcdGNhc2UgJ2RhdGEtcGlsb3Qtc3VidG90YWxzJzogLy8gOS42Ljlcblx0XHRcdGNhc2UgJ2RhdGEtcGlsb3Qtc3VidG90YWwnOiAvLyA5LjYuMTBcblx0XHRcdGNhc2UgJ2RhdGEtcGlsb3QtbWVtYmVycyc6IC8vIDkuNi4xMVxuXHRcdFx0Y2FzZSAnZGF0YS1waWxvdC1tZW1iZXInOiAvLyA5LjYuMTJcblx0XHRcdGNhc2UgJ2RhdGEtcGlsb3QtZGlzcGxheS1pbmZvJzogLy8gOS42LjEzXG5cdFx0XHRjYXNlICdkYXRhLXBpbG90LXNvcnQtaW5mbyc6IC8vIDkuNi4xNFxuXHRcdFx0Y2FzZSAnZGF0YS1waWxvdC1sYXlvdXQtaW5mbyc6IC8vIDkuNi4xNVxuXHRcdFx0Y2FzZSAnZGF0YS1waWxvdC1maWVsZC1yZWZlcmVuY2UnOiAvLyA5LjYuMTZcblx0XHRcdGNhc2UgJ2RhdGEtcGlsb3QtZ3JvdXBzJzogLy8gOS42LjE3XG5cdFx0XHRjYXNlICdkYXRhLXBpbG90LWdyb3VwJzogLy8gOS42LjE4XG5cdFx0XHRjYXNlICdkYXRhLXBpbG90LWdyb3VwLW1lbWJlcic6IC8vIDkuNi4xOVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0LyogMTAuMyBEcmF3aW5nIFNoYXBlcyAqL1xuXHRcdFx0Y2FzZSAncmVjdCc6IC8vIDEwLjMuMlxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0LyogMTQuNiBEREUgQ29ubmVjdGlvbnMgKi9cblx0XHRcdGNhc2UgJ2RkZS1jb25uZWN0aW9uLWRlY2xzJzogLy8gMTQuNi4yIDx0ZXh0OlxuXHRcdFx0Y2FzZSAnZGRlLWNvbm5lY3Rpb24tZGVjbCc6IC8vIDE0LjYuMyA8dGV4dDpcblx0XHRcdGNhc2UgJ2RkZS1saW5rJzogLy8gMTQuNi40IDx0YWJsZTpcblx0XHRcdGNhc2UgJ2RkZS1zb3VyY2UnOiAvLyAxNC42LjUgPG9mZmljZTpcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ3Byb3BlcnRpZXMnOiBicmVhazsgLy8gMTMuNyA8Zm9ybTpwcm9wZXJ0aWVzPlxuXHRcdFx0Y2FzZSAncHJvcGVydHknOiBicmVhazsgLy8gMTMuOCA8Zm9ybTpwcm9wZXJ0eT5cblxuXHRcdFx0Y2FzZSAnYSc6IC8vIDYuMS44IGh5cGVybGlua1xuXHRcdFx0XHRpZihSblsxXSE9PSAnLycpIHtcblx0XHRcdFx0XHRhdGFnID0gcGFyc2V4bWx0YWcoUm5bMF0sIGZhbHNlKTtcblx0XHRcdFx0XHRpZighYXRhZy5ocmVmKSBicmVhaztcblx0XHRcdFx0XHRhdGFnLlRhcmdldCA9IGF0YWcuaHJlZjsgZGVsZXRlIGF0YWcuaHJlZjtcblx0XHRcdFx0XHRpZihhdGFnLlRhcmdldC5jaGFyQXQoMCkgPT0gXCIjXCIgJiYgYXRhZy5UYXJnZXQuaW5kZXhPZihcIi5cIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0X1JlZiA9IG9kc190b19jc2ZfM0QoYXRhZy5UYXJnZXQuc2xpY2UoMSkpO1xuXHRcdFx0XHRcdFx0YXRhZy5UYXJnZXQgPSBcIiNcIiArIF9SZWZbMF0gKyBcIiFcIiArIF9SZWZbMV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHQvKiBub24tc3RhbmRhcmQgKi9cblx0XHRcdGNhc2UgJ3RhYmxlLXByb3RlY3Rpb24nOiBicmVhaztcblx0XHRcdGNhc2UgJ2RhdGEtcGlsb3QtZ3JhbmQtdG90YWwnOiBicmVhazsgLy8gPHRhYmxlOlxuXHRcdFx0Y2FzZSAnb2ZmaWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyc6IGJyZWFrOyAvLyBiYXJlXG5cdFx0XHRkZWZhdWx0OiBzd2l0Y2goUm5bMl0pIHtcblx0XHRcdFx0Y2FzZSAnZGM6JzogICAgICAgLy8gVE9ETzogcHJvcGVydGllc1xuXHRcdFx0XHRjYXNlICdjYWxjZXh0Oic6ICAvLyBpZ25vcmUgdW5kb2N1bWVudGVkIGV4dGVuc2lvbnNcblx0XHRcdFx0Y2FzZSAnbG9leHQ6JzogICAgLy8gaWdub3JlIHVuZG9jdW1lbnRlZCBleHRlbnNpb25zXG5cdFx0XHRcdGNhc2UgJ29vbzonOiAgICAgIC8vIGlnbm9yZSB1bmRvY3VtZW50ZWQgZXh0ZW5zaW9uc1xuXHRcdFx0XHRjYXNlICdjaGFydG9vbzonOiAvLyBpZ25vcmUgdW5kb2N1bWVudGVkIGV4dGVuc2lvbnNcblx0XHRcdFx0Y2FzZSAnZHJhdzonOiAgICAgLy8gVE9ETzogZHJhd2luZ1xuXHRcdFx0XHRjYXNlICdzdHlsZTonOiAgICAvLyBUT0RPOiBzdHlsZXNcblx0XHRcdFx0Y2FzZSAnY2hhcnQ6JzogICAgLy8gVE9ETzogY2hhcnRzXG5cdFx0XHRcdGNhc2UgJ2Zvcm06JzogICAgIC8vIFRPRE86IGZvcm1zXG5cdFx0XHRcdGNhc2UgJ3VvZjonOiAgICAgIC8vIFRPRE86IHVvZlxuXHRcdFx0XHRjYXNlICfooag6JzogICAgICAgLy8gVE9ETzogdW9mXG5cdFx0XHRcdGNhc2UgJ+WtlzonOiAgICAgICAvLyBUT0RPOiB1b2Zcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogaWYob3B0cy5XVEYpIHRocm93IG5ldyBFcnJvcihSbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBvdXQgPSAoe1xuXHRcdFx0U2hlZXRzOiBTaGVldHMsXG5cdFx0XHRTaGVldE5hbWVzOiBTaGVldE5hbWVzLFxuXHRcdFx0V29ya2Jvb2s6IFdCXG5cdFx0fSk7XG5cdFx0aWYob3B0cy5ib29rU2hlZXRzKSBkZWxldGUgb3V0LlNoZWV0cztcblx0XHRyZXR1cm4gb3V0O1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gcGFyc2Vfb2RzKHppcCwgb3B0cykge1xuXHRvcHRzID0gb3B0cyB8fCAoe30pO1xuXHR2YXIgb2RzID0gISFzYWZlZ2V0emlwZmlsZSh6aXAsICdvYmplY3RkYXRhJyk7XG5cdGlmKG9kcykgcGFyc2VfbWFuaWZlc3QoZ2V0emlwZGF0YSh6aXAsICdNRVRBLUlORi9tYW5pZmVzdC54bWwnKSwgb3B0cyk7XG5cdHZhciBjb250ZW50ID0gZ2V0emlwc3RyKHppcCwgJ2NvbnRlbnQueG1sJyk7XG5cdGlmKCFjb250ZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNvbnRlbnQueG1sIGluIFwiICsgKG9kcyA/IFwiT0RTXCIgOiBcIlVPRlwiKSsgXCIgZmlsZVwiKTtcblx0dmFyIHdiID0gcGFyc2VfY29udGVudF94bWwob2RzID8gY29udGVudCA6IHV0ZjhyZWFkKGNvbnRlbnQpLCBvcHRzKTtcblx0aWYoc2FmZWdldHppcGZpbGUoemlwLCAnbWV0YS54bWwnKSkgd2IuUHJvcHMgPSBwYXJzZV9jb3JlX3Byb3BzKGdldHppcGRhdGEoemlwLCAnbWV0YS54bWwnKSk7XG5cdHJldHVybiB3Yjtcbn1cbmZ1bmN0aW9uIHBhcnNlX2ZvZHMoZGF0YSwgb3B0cykge1xuXHRyZXR1cm4gcGFyc2VfY29udGVudF94bWwoZGF0YSwgb3B0cyk7XG59XG5cbi8qIE9wZW5Eb2N1bWVudCAqL1xudmFyIHdyaXRlX3N0eWxlc19vZHMgPSAoZnVuY3Rpb24oKSB7XG5cdHZhciBwYXlsb2FkID0gJzxvZmZpY2U6ZG9jdW1lbnQtc3R5bGVzICcgKyB3eHRfaGVscGVyKHtcblx0XHQneG1sbnM6b2ZmaWNlJzogICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMFwiLFxuXHRcdCd4bWxuczp0YWJsZSc6ICAgIFwidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjBcIixcblx0XHQneG1sbnM6c3R5bGUnOiAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wXCIsXG5cdFx0J3htbG5zOnRleHQnOiAgICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wXCIsXG5cdFx0J3htbG5zOmRyYXcnOiAgICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wXCIsXG5cdFx0J3htbG5zOmZvJzogICAgICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMFwiLFxuXHRcdCd4bWxuczp4bGluayc6ICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuXHRcdCd4bWxuczpkYyc6ICAgICAgIFwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIixcblx0XHQneG1sbnM6bnVtYmVyJzogICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMFwiLFxuXHRcdCd4bWxuczpzdmcnOiAgICAgIFwidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjBcIixcblx0XHQneG1sbnM6b2YnOiAgICAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yXCIsXG5cdFx0J29mZmljZTp2ZXJzaW9uJzogXCIxLjJcIlxuXHR9KSArICc+PC9vZmZpY2U6ZG9jdW1lbnQtc3R5bGVzPic7XG5cdHJldHVybiBmdW5jdGlvbiB3c28oKSB7XG5cdFx0cmV0dXJuIFhNTF9IRUFERVIgKyBwYXlsb2FkO1xuXHR9O1xufSkoKTtcbnZhciB3cml0ZV9jb250ZW50X29kcyA9IChmdW5jdGlvbigpIHtcblx0LyogNi4xLjIgV2hpdGUgU3BhY2UgQ2hhcmFjdGVycyAqL1xuXHR2YXIgd3JpdGVfdGV4dF9wID0gZnVuY3Rpb24odGV4dCkge1xuXHRcdHJldHVybiBlc2NhcGV4bWwodGV4dClcblx0XHRcdC5yZXBsYWNlKC8gICsvZywgZnVuY3Rpb24oJCQpe3JldHVybiAnPHRleHQ6cyB0ZXh0OmM9XCInKyQkLmxlbmd0aCsnXCIvPic7fSlcblx0XHRcdC5yZXBsYWNlKC9cXHQvZywgXCI8dGV4dDp0YWIvPlwiKVxuXHRcdFx0LnJlcGxhY2UoL1xcbi9nLCBcIjx0ZXh0OmxpbmUtYnJlYWsvPlwiKVxuXHRcdFx0LnJlcGxhY2UoL14gLywgXCI8dGV4dDpzLz5cIikucmVwbGFjZSgvICQvLCBcIjx0ZXh0OnMvPlwiKTtcblx0fTtcblxuXHR2YXIgbnVsbF9jZWxsX3htbCA9ICcgICAgICAgICAgPHRhYmxlOnRhYmxlLWNlbGwgLz5cXG4nO1xuXHR2YXIgY292ZXJlZF9jZWxsX3htbCA9ICcgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XFxuJztcblx0dmFyIHdyaXRlX3dzID0gZnVuY3Rpb24od3MsIHdiLCBpKSB7XG5cdFx0LyogU2VjdGlvbiA5IFRhYmxlcyAqL1xuXHRcdHZhciBvID0gW107XG5cdFx0by5wdXNoKCcgICAgICA8dGFibGU6dGFibGUgdGFibGU6bmFtZT1cIicgKyBlc2NhcGV4bWwod2IuU2hlZXROYW1lc1tpXSkgKyAnXCI+XFxuJyk7XG5cdFx0dmFyIFI9MCxDPTAsIHJhbmdlID0gZGVjb2RlX3JhbmdlKHdzWychcmVmJ10pO1xuXHRcdHZhciBtYXJyID0gd3NbJyFtZXJnZXMnXSB8fCBbXSwgbWkgPSAwO1xuXHRcdHZhciBkZW5zZSA9IEFycmF5LmlzQXJyYXkod3MpO1xuXHRcdGZvcihSID0gMDsgUiA8IHJhbmdlLnMucjsgKytSKSBvLnB1c2goJyAgICAgICAgPHRhYmxlOnRhYmxlLXJvdz48L3RhYmxlOnRhYmxlLXJvdz5cXG4nKTtcblx0XHRmb3IoOyBSIDw9IHJhbmdlLmUucjsgKytSKSB7XG5cdFx0XHRvLnB1c2goJyAgICAgICAgPHRhYmxlOnRhYmxlLXJvdz5cXG4nKTtcblx0XHRcdGZvcihDPTA7IEMgPCByYW5nZS5zLmM7ICsrQykgby5wdXNoKG51bGxfY2VsbF94bWwpO1xuXHRcdFx0Zm9yKDsgQyA8PSByYW5nZS5lLmM7ICsrQykge1xuXHRcdFx0XHR2YXIgc2tpcCA9IGZhbHNlLCBjdCA9IHt9LCB0ZXh0cCA9IFwiXCI7XG5cdFx0XHRcdGZvcihtaSA9IDA7IG1pICE9IG1hcnIubGVuZ3RoOyArK21pKSB7XG5cdFx0XHRcdFx0aWYobWFyclttaV0ucy5jID4gQykgY29udGludWU7XG5cdFx0XHRcdFx0aWYobWFyclttaV0ucy5yID4gUikgY29udGludWU7XG5cdFx0XHRcdFx0aWYobWFyclttaV0uZS5jIDwgQykgY29udGludWU7XG5cdFx0XHRcdFx0aWYobWFyclttaV0uZS5yIDwgUikgY29udGludWU7XG5cdFx0XHRcdFx0aWYobWFyclttaV0ucy5jICE9IEMgfHwgbWFyclttaV0ucy5yICE9IFIpIHNraXAgPSB0cnVlO1xuXHRcdFx0XHRcdGN0Wyd0YWJsZTpudW1iZXItY29sdW1ucy1zcGFubmVkJ10gPSAobWFyclttaV0uZS5jIC0gbWFyclttaV0ucy5jICsgMSk7XG5cdFx0XHRcdFx0Y3RbJ3RhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQnXSA9ICAgIChtYXJyW21pXS5lLnIgLSBtYXJyW21pXS5zLnIgKyAxKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihza2lwKSB7IG8ucHVzaChjb3ZlcmVkX2NlbGxfeG1sKTsgY29udGludWU7IH1cblx0XHRcdFx0dmFyIHJlZiA9IGVuY29kZV9jZWxsKHtyOlIsIGM6Q30pLCBjZWxsID0gZGVuc2UgPyAod3NbUl18fFtdKVtDXTogd3NbcmVmXTtcblx0XHRcdFx0aWYoY2VsbCAmJiBjZWxsLmYpIHtcblx0XHRcdFx0XHRjdFsndGFibGU6Zm9ybXVsYSddID0gZXNjYXBleG1sKGNzZl90b19vZHNfZm9ybXVsYShjZWxsLmYpKTtcblx0XHRcdFx0XHRpZihjZWxsLkYpIHtcblx0XHRcdFx0XHRcdGlmKGNlbGwuRi5zbGljZSgwLCByZWYubGVuZ3RoKSA9PSByZWYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIF9GcmVmID0gZGVjb2RlX3JhbmdlKGNlbGwuRik7XG5cdFx0XHRcdFx0XHRcdGN0Wyd0YWJsZTpudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCddID0gKF9GcmVmLmUuYyAtIF9GcmVmLnMuYyArIDEpO1xuXHRcdFx0XHRcdFx0XHRjdFsndGFibGU6bnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQnXSA9ICAgIChfRnJlZi5lLnIgLSBfRnJlZi5zLnIgKyAxKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIWNlbGwpIHsgby5wdXNoKG51bGxfY2VsbF94bWwpOyBjb250aW51ZTsgfVxuXHRcdFx0XHRzd2l0Y2goY2VsbC50KSB7XG5cdFx0XHRcdFx0Y2FzZSAnYic6XG5cdFx0XHRcdFx0XHR0ZXh0cCA9IChjZWxsLnYgPyAnVFJVRScgOiAnRkFMU0UnKTtcblx0XHRcdFx0XHRcdGN0WydvZmZpY2U6dmFsdWUtdHlwZSddID0gXCJib29sZWFuXCI7XG5cdFx0XHRcdFx0XHRjdFsnb2ZmaWNlOmJvb2xlYW4tdmFsdWUnXSA9IChjZWxsLnYgPyAndHJ1ZScgOiAnZmFsc2UnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ24nOlxuXHRcdFx0XHRcdFx0dGV4dHAgPSAoY2VsbC53fHxTdHJpbmcoY2VsbC52fHwwKSk7XG5cdFx0XHRcdFx0XHRjdFsnb2ZmaWNlOnZhbHVlLXR5cGUnXSA9IFwiZmxvYXRcIjtcblx0XHRcdFx0XHRcdGN0WydvZmZpY2U6dmFsdWUnXSA9IChjZWxsLnZ8fDApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncyc6IGNhc2UgJ3N0cic6XG5cdFx0XHRcdFx0XHR0ZXh0cCA9IGNlbGwudjtcblx0XHRcdFx0XHRcdGN0WydvZmZpY2U6dmFsdWUtdHlwZSddID0gXCJzdHJpbmdcIjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2QnOlxuXHRcdFx0XHRcdFx0dGV4dHAgPSAoY2VsbC53fHwocGFyc2VEYXRlKGNlbGwudikudG9JU09TdHJpbmcoKSkpO1xuXHRcdFx0XHRcdFx0Y3RbJ29mZmljZTp2YWx1ZS10eXBlJ10gPSBcImRhdGVcIjtcblx0XHRcdFx0XHRcdGN0WydvZmZpY2U6ZGF0ZS12YWx1ZSddID0gKHBhcnNlRGF0ZShjZWxsLnYpLnRvSVNPU3RyaW5nKCkpO1xuXHRcdFx0XHRcdFx0Y3RbJ3RhYmxlOnN0eWxlLW5hbWUnXSA9IFwiY2UxXCI7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvL2Nhc2UgJ2UnOlxuXHRcdFx0XHRcdGRlZmF1bHQ6IG8ucHVzaChudWxsX2NlbGxfeG1sKTsgY29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIHRleHRfcCA9IHdyaXRlX3RleHRfcCh0ZXh0cCk7XG5cdFx0XHRcdGlmKGNlbGwubCAmJiBjZWxsLmwuVGFyZ2V0KSB7XG5cdFx0XHRcdFx0dmFyIF90Z3QgPSBjZWxsLmwuVGFyZ2V0OyBfdGd0ID0gX3RndC5jaGFyQXQoMCkgPT0gXCIjXCIgPyBcIiNcIiArIGNzZl90b19vZHNfM0QoX3RndC5zbGljZSgxKSkgOiBfdGd0O1xuXHRcdFx0XHRcdHRleHRfcCA9IHdyaXRleHRhZygndGV4dDphJywgdGV4dF9wLCB7J3hsaW5rOmhyZWYnOiBfdGd0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0by5wdXNoKCcgICAgICAgICAgJyArIHdyaXRleHRhZygndGFibGU6dGFibGUtY2VsbCcsIHdyaXRleHRhZygndGV4dDpwJywgdGV4dF9wLCB7fSksIGN0KSArICdcXG4nKTtcblx0XHRcdH1cblx0XHRcdG8ucHVzaCgnICAgICAgICA8L3RhYmxlOnRhYmxlLXJvdz5cXG4nKTtcblx0XHR9XG5cdFx0by5wdXNoKCcgICAgICA8L3RhYmxlOnRhYmxlPlxcbicpO1xuXHRcdHJldHVybiBvLmpvaW4oXCJcIik7XG5cdH07XG5cblx0dmFyIHdyaXRlX2F1dG9tYXRpY19zdHlsZXNfb2RzID0gZnVuY3Rpb24obykge1xuXHRcdG8ucHVzaCgnIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cXG4nKTtcblx0XHRvLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9XCJOMzdcIiBudW1iZXI6YXV0b21hdGljLW9yZGVyPVwidHJ1ZVwiPlxcbicpO1xuXHRcdG8ucHVzaCgnICAgPG51bWJlcjptb250aCBudW1iZXI6c3R5bGU9XCJsb25nXCIvPlxcbicpO1xuXHRcdG8ucHVzaCgnICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxcbicpO1xuXHRcdG8ucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPVwibG9uZ1wiLz5cXG4nKTtcblx0XHRvLnB1c2goJyAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cXG4nKTtcblx0XHRvLnB1c2goJyAgIDxudW1iZXI6eWVhci8+XFxuJyk7XG5cdFx0by5wdXNoKCcgIDwvbnVtYmVyOmRhdGUtc3R5bGU+XFxuJyk7XG5cdFx0by5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPVwiY2UxXCIgc3R5bGU6ZmFtaWx5PVwidGFibGUtY2VsbFwiIHN0eWxlOnBhcmVudC1zdHlsZS1uYW1lPVwiRGVmYXVsdFwiIHN0eWxlOmRhdGEtc3R5bGUtbmFtZT1cIk4zN1wiLz5cXG4nKTtcblx0XHRvLnB1c2goJyA8L29mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxcbicpO1xuXHR9O1xuXG5cdHJldHVybiBmdW5jdGlvbiB3Y3god2IsIG9wdHMpIHtcblx0XHR2YXIgbyA9IFtYTUxfSEVBREVSXTtcblx0XHQvKiAzLjEuMy4yICovXG5cdFx0dmFyIGF0dHIgPSB3eHRfaGVscGVyKHtcblx0XHRcdCd4bWxuczpvZmZpY2UnOiAgICAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMFwiLFxuXHRcdFx0J3htbG5zOnRhYmxlJzogICAgICAgIFwidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjBcIixcblx0XHRcdCd4bWxuczpzdHlsZSc6ICAgICAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wXCIsXG5cdFx0XHQneG1sbnM6dGV4dCc6ICAgICAgICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wXCIsXG5cdFx0XHQneG1sbnM6ZHJhdyc6ICAgICAgICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wXCIsXG5cdFx0XHQneG1sbnM6Zm8nOiAgICAgICAgICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMFwiLFxuXHRcdFx0J3htbG5zOnhsaW5rJzogICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuXHRcdFx0J3htbG5zOmRjJzogICAgICAgICAgIFwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIixcblx0XHRcdCd4bWxuczptZXRhJzogICAgICAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjBcIixcblx0XHRcdCd4bWxuczpudW1iZXInOiAgICAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMFwiLFxuXHRcdFx0J3htbG5zOnByZXNlbnRhdGlvbic6IFwidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpwcmVzZW50YXRpb246MS4wXCIsXG5cdFx0XHQneG1sbnM6c3ZnJzogICAgICAgICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMFwiLFxuXHRcdFx0J3htbG5zOmNoYXJ0JzogICAgICAgIFwidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpjaGFydDoxLjBcIixcblx0XHRcdCd4bWxuczpkcjNkJzogICAgICAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHIzZDoxLjBcIixcblx0XHRcdCd4bWxuczptYXRoJzogICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixcblx0XHRcdCd4bWxuczpmb3JtJzogICAgICAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Zm9ybToxLjBcIixcblx0XHRcdCd4bWxuczpzY3JpcHQnOiAgICAgICBcInVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMFwiLFxuXHRcdFx0J3htbG5zOm9vbyc6ICAgICAgICAgIFwiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvb2ZmaWNlXCIsXG5cdFx0XHQneG1sbnM6b29vdyc6ICAgICAgICAgXCJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXJcIixcblx0XHRcdCd4bWxuczpvb29jJzogICAgICAgICBcImh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L2NhbGNcIixcblx0XHRcdCd4bWxuczpkb20nOiAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50c1wiLFxuXHRcdFx0J3htbG5zOnhmb3Jtcyc6ICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi94Zm9ybXNcIixcblx0XHRcdCd4bWxuczp4c2QnOiAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXCIsXG5cdFx0XHQneG1sbnM6eHNpJzogICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiLFxuXHRcdFx0J3htbG5zOnNoZWV0JzogICAgICAgIFwidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpzOjEuMFwiLFxuXHRcdFx0J3htbG5zOnJwdCc6ICAgICAgICAgIFwiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDUvcmVwb3J0XCIsXG5cdFx0XHQneG1sbnM6b2YnOiAgICAgICAgICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMlwiLFxuXHRcdFx0J3htbG5zOnhodG1sJzogICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFxuXHRcdFx0J3htbG5zOmdyZGRsJzogICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmlldyNcIixcblx0XHRcdCd4bWxuczp0YWJsZW9vbyc6ICAgICBcImh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA5L3RhYmxlXCIsXG5cdFx0XHQneG1sbnM6ZHJhd29vbyc6ICAgICAgXCJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3XCIsXG5cdFx0XHQneG1sbnM6Y2FsY2V4dCc6ICAgICAgXCJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6Y2FsYzp4bWxuczpjYWxjZXh0OjEuMFwiLFxuXHRcdFx0J3htbG5zOmxvZXh0JzogICAgICAgIFwidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOm9mZmljZTp4bWxuczpsb2V4dDoxLjBcIixcblx0XHRcdCd4bWxuczpmaWVsZCc6ICAgICAgICBcInVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb28tbXMtaW50ZXJvcDp4bWxuczpmaWVsZDoxLjBcIixcblx0XHRcdCd4bWxuczpmb3JteCc6ICAgICAgICBcInVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb3htbC1vZGYtaW50ZXJvcDp4bWxuczpmb3JtOjEuMFwiLFxuXHRcdFx0J3htbG5zOmNzczN0JzogICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10ZXh0L1wiLFxuXHRcdFx0J29mZmljZTp2ZXJzaW9uJzogICAgIFwiMS4yXCJcblx0XHR9KTtcblxuXHRcdHZhciBmb2RzID0gd3h0X2hlbHBlcih7XG5cdFx0XHQneG1sbnM6Y29uZmlnJzogICAgXCJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjBcIixcblx0XHRcdCdvZmZpY2U6bWltZXR5cGUnOiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXRcIlxuXHRcdH0pO1xuXG5cdFx0aWYob3B0cy5ib29rVHlwZSA9PSBcImZvZHNcIikgby5wdXNoKCc8b2ZmaWNlOmRvY3VtZW50JyArIGF0dHIgKyBmb2RzICsgJz5cXG4nKTtcblx0XHRlbHNlIG8ucHVzaCgnPG9mZmljZTpkb2N1bWVudC1jb250ZW50JyArIGF0dHIgICsgJz5cXG4nKTtcblx0XHR3cml0ZV9hdXRvbWF0aWNfc3R5bGVzX29kcyhvKTtcblx0XHRvLnB1c2goJyAgPG9mZmljZTpib2R5PlxcbicpO1xuXHRcdG8ucHVzaCgnICAgIDxvZmZpY2U6c3ByZWFkc2hlZXQ+XFxuJyk7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSAhPSB3Yi5TaGVldE5hbWVzLmxlbmd0aDsgKytpKSBvLnB1c2god3JpdGVfd3Mod2IuU2hlZXRzW3diLlNoZWV0TmFtZXNbaV1dLCB3YiwgaSwgb3B0cykpO1xuXHRcdG8ucHVzaCgnICAgIDwvb2ZmaWNlOnNwcmVhZHNoZWV0PlxcbicpO1xuXHRcdG8ucHVzaCgnICA8L29mZmljZTpib2R5PlxcbicpO1xuXHRcdGlmKG9wdHMuYm9va1R5cGUgPT0gXCJmb2RzXCIpIG8ucHVzaCgnPC9vZmZpY2U6ZG9jdW1lbnQ+Jyk7XG5cdFx0ZWxzZSBvLnB1c2goJzwvb2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+Jyk7XG5cdFx0cmV0dXJuIG8uam9pbihcIlwiKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIHdyaXRlX29kcyh3Yiwgb3B0cykge1xuXHRpZihvcHRzLmJvb2tUeXBlID09IFwiZm9kc1wiKSByZXR1cm4gd3JpdGVfY29udGVudF9vZHMod2IsIG9wdHMpO1xuXG52YXIgemlwID0gbmV3IGpzemlwKCk7XG5cdHZhciBmID0gXCJcIjtcblxuXHR2YXIgbWFuaWZlc3QgPSBbXTtcblx0dmFyIHJkZiA9IFtdO1xuXG5cdC8qIFBhcnQgMyBTZWN0aW9uIDMuMyBNSU1FIE1lZGlhIFR5cGUgKi9cblx0ZiA9IFwibWltZXR5cGVcIjtcblx0emlwLmZpbGUoZiwgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0XCIpO1xuXG5cdC8qIFBhcnQgMSBTZWN0aW9uIDIuMiBEb2N1bWVudHMgKi9cblx0ZiA9IFwiY29udGVudC54bWxcIjtcblx0emlwLmZpbGUoZiwgd3JpdGVfY29udGVudF9vZHMod2IsIG9wdHMpKTtcblx0bWFuaWZlc3QucHVzaChbZiwgXCJ0ZXh0L3htbFwiXSk7XG5cdHJkZi5wdXNoKFtmLCBcIkNvbnRlbnRGaWxlXCJdKTtcblxuXHQvKiBUT0RPOiB0aGVzZSBhcmUgaGFyZC1jb2RlZCBzdHlsZXMgdG8gc2F0aWF0ZSBleGNlbCAqL1xuXHRmID0gXCJzdHlsZXMueG1sXCI7XG5cdHppcC5maWxlKGYsIHdyaXRlX3N0eWxlc19vZHMod2IsIG9wdHMpKTtcblx0bWFuaWZlc3QucHVzaChbZiwgXCJ0ZXh0L3htbFwiXSk7XG5cdHJkZi5wdXNoKFtmLCBcIlN0eWxlc0ZpbGVcIl0pO1xuXG5cdC8qIFRPRE86IHRoaXMgaXMgaGFyZC1jb2RlZCB0byBzYXRpYXRlIGV4Y2VsICovXG5cdGYgPSBcIm1ldGEueG1sXCI7XG5cdHppcC5maWxlKGYsIHdyaXRlX21ldGFfb2RzKCkpO1xuXHRtYW5pZmVzdC5wdXNoKFtmLCBcInRleHQveG1sXCJdKTtcblx0cmRmLnB1c2goW2YsIFwiTWV0YWRhdGFGaWxlXCJdKTtcblxuXHQvKiBQYXJ0IDMgU2VjdGlvbiA2IE1ldGFkYXRhIE1hbmlmZXN0IEZpbGUgKi9cblx0ZiA9IFwibWFuaWZlc3QucmRmXCI7XG5cdHppcC5maWxlKGYsIHdyaXRlX3JkZihyZGYvKiwgb3B0cyovKSk7XG5cdG1hbmlmZXN0LnB1c2goW2YsIFwiYXBwbGljYXRpb24vcmRmK3htbFwiXSk7XG5cblx0LyogUGFydCAzIFNlY3Rpb24gNCBNYW5pZmVzdCBGaWxlICovXG5cdGYgPSBcIk1FVEEtSU5GL21hbmlmZXN0LnhtbFwiO1xuXHR6aXAuZmlsZShmLCB3cml0ZV9tYW5pZmVzdChtYW5pZmVzdC8qLCBvcHRzKi8pKTtcblxuXHRyZXR1cm4gemlwO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9zaGVldF9pbmRleCh3Yiwgc2hlZXQpIHtcblx0aWYoIXNoZWV0KSByZXR1cm4gMDtcblx0dmFyIGlkeCA9IHdiLlNoZWV0TmFtZXMuaW5kZXhPZihzaGVldCk7XG5cdGlmKGlkeCA9PSAtMSkgdGhyb3cgbmV3IEVycm9yKFwiU2hlZXQgbm90IGZvdW5kOiBcIiArIHNoZWV0KTtcblx0cmV0dXJuIGlkeDtcbn1cblxuZnVuY3Rpb24gd3JpdGVfb2JqX3N0cihmYWN0b3J5KSB7XG5cdHJldHVybiBmdW5jdGlvbiB3cml0ZV9zdHIod2IsIG8pIHtcblx0XHR2YXIgaWR4ID0gd3JpdGVfc2hlZXRfaW5kZXgod2IsIG8uc2hlZXQpO1xuXHRcdHJldHVybiBmYWN0b3J5LmZyb21fc2hlZXQod2IuU2hlZXRzW3diLlNoZWV0TmFtZXNbaWR4XV0sIG8sIHdiKTtcblx0fTtcbn1cblxudmFyIHdyaXRlX2h0bV9zdHIgPSB3cml0ZV9vYmpfc3RyKEhUTUxfKTtcbnZhciB3cml0ZV9jc3Zfc3RyID0gd3JpdGVfb2JqX3N0cih7ZnJvbV9zaGVldDpzaGVldF90b19jc3Z9KTtcbnZhciB3cml0ZV9zbGtfc3RyID0gd3JpdGVfb2JqX3N0cihTWUxLKTtcbnZhciB3cml0ZV9kaWZfc3RyID0gd3JpdGVfb2JqX3N0cihESUYpO1xudmFyIHdyaXRlX3Bybl9zdHIgPSB3cml0ZV9vYmpfc3RyKFBSTik7XG52YXIgd3JpdGVfcnRmX3N0ciA9IHdyaXRlX29ial9zdHIoUlRGKTtcbnZhciB3cml0ZV90eHRfc3RyID0gd3JpdGVfb2JqX3N0cih7ZnJvbV9zaGVldDpzaGVldF90b190eHR9KTtcbi8vICRGbG93SWdub3JlXG52YXIgd3JpdGVfZGJmX2J1ZiA9IHdyaXRlX29ial9zdHIoREJGKTtcbnZhciB3cml0ZV9ldGhfc3RyID0gd3JpdGVfb2JqX3N0cihFVEgpO1xuXG5mdW5jdGlvbiBmaXhfb3B0c19mdW5jKGRlZmF1bHRzKSB7XG5cdHJldHVybiBmdW5jdGlvbiBmaXhfb3B0cyhvcHRzKSB7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSAhPSBkZWZhdWx0cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0dmFyIGQgPSBkZWZhdWx0c1tpXTtcblx0XHRcdGlmKG9wdHNbZFswXV0gPT09IHVuZGVmaW5lZCkgb3B0c1tkWzBdXSA9IGRbMV07XG5cdFx0XHRpZihkWzJdID09PSAnbicpIG9wdHNbZFswXV0gPSBOdW1iZXIob3B0c1tkWzBdXSk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgZml4X3JlYWRfb3B0cyA9IGZpeF9vcHRzX2Z1bmMoW1xuXHRbJ2NlbGxORicsIGZhbHNlXSwgLyogZW1pdCBjZWxsIG51bWJlciBmb3JtYXQgc3RyaW5nIGFzIC56ICovXG5cdFsnY2VsbEhUTUwnLCB0cnVlXSwgLyogZW1pdCBodG1sIHN0cmluZyBhcyAuaCAqL1xuXHRbJ2NlbGxGb3JtdWxhJywgdHJ1ZV0sIC8qIGVtaXQgZm9ybXVsYWUgYXMgLmYgKi9cblx0WydjZWxsU3R5bGVzJywgZmFsc2VdLCAvKiBlbWl0cyBzdHlsZS90aGVtZSBhcyAucyAqL1xuXHRbJ2NlbGxUZXh0JywgdHJ1ZV0sIC8qIGVtaXQgZm9ybWF0dGVkIHRleHQgYXMgLncgKi9cblx0WydjZWxsRGF0ZXMnLCBmYWxzZV0sIC8qIGVtaXQgZGF0ZSBjZWxscyB3aXRoIHR5cGUgYGRgICovXG5cblx0WydzaGVldFN0dWJzJywgZmFsc2VdLCAvKiBlbWl0IGVtcHR5IGNlbGxzICovXG5cdFsnc2hlZXRSb3dzJywgMCwgJ24nXSwgLyogcmVhZCBuIHJvd3MgKDAgPSByZWFkIGFsbCByb3dzKSAqL1xuXG5cdFsnYm9va0RlcHMnLCBmYWxzZV0sIC8qIHBhcnNlIGNhbGN1bGF0aW9uIGNoYWlucyAqL1xuXHRbJ2Jvb2tTaGVldHMnLCBmYWxzZV0sIC8qIG9ubHkgdHJ5IHRvIGdldCBzaGVldCBuYW1lcyAobm8gU2hlZXRzKSAqL1xuXHRbJ2Jvb2tQcm9wcycsIGZhbHNlXSwgLyogb25seSB0cnkgdG8gZ2V0IHByb3BlcnRpZXMgKG5vIFNoZWV0cykgKi9cblx0Wydib29rRmlsZXMnLCBmYWxzZV0sIC8qIGluY2x1ZGUgcmF3IGZpbGUgc3RydWN0dXJlIChrZXlzLCBmaWxlcywgY2ZiKSAqL1xuXHRbJ2Jvb2tWQkEnLCBmYWxzZV0sIC8qIGluY2x1ZGUgdmJhIHJhdyBkYXRhICh2YmFyYXcpICovXG5cblx0WydwYXNzd29yZCcsJyddLCAvKiBwYXNzd29yZCAqL1xuXHRbJ1dURicsIGZhbHNlXSAvKiBXVEYgbW9kZSAodGhyb3dzIGVycm9ycykgKi9cbl0pO1xuXG5cbnZhciBmaXhfd3JpdGVfb3B0cyA9IGZpeF9vcHRzX2Z1bmMoW1xuXHRbJ2NlbGxEYXRlcycsIGZhbHNlXSwgLyogd3JpdGUgZGF0ZSBjZWxscyB3aXRoIHR5cGUgYGRgICovXG5cblx0Wydib29rU1NUJywgZmFsc2VdLCAvKiBHZW5lcmF0ZSBTaGFyZWQgU3RyaW5nIFRhYmxlICovXG5cblx0Wydib29rVHlwZScsICd4bHN4J10sIC8qIFR5cGUgb2Ygd29ya2Jvb2sgKHhsc3gvbS9iKSAqL1xuXG5cdFsnY29tcHJlc3Npb24nLCBmYWxzZV0sIC8qIFVzZSBmaWxlIGNvbXByZXNzaW9uICovXG5cblx0WydXVEYnLCBmYWxzZV0gLyogV1RGIG1vZGUgKHRocm93cyBlcnJvcnMpICovXG5dKTtcbmZ1bmN0aW9uIGdldF9zaGVldF90eXBlKG4pIHtcblx0aWYoUkVMUy5XUy5pbmRleE9mKG4pID4gLTEpIHJldHVybiBcInNoZWV0XCI7XG5cdGlmKFJFTFMuQ1MgJiYgbiA9PSBSRUxTLkNTKSByZXR1cm4gXCJjaGFydFwiO1xuXHRpZihSRUxTLkRTICYmIG4gPT0gUkVMUy5EUykgcmV0dXJuIFwiZGlhbG9nXCI7XG5cdGlmKFJFTFMuTVMgJiYgbiA9PSBSRUxTLk1TKSByZXR1cm4gXCJtYWNyb1wiO1xuXHRyZXR1cm4gKG4gJiYgbi5sZW5ndGgpID8gbiA6IFwic2hlZXRcIjtcbn1cbmZ1bmN0aW9uIHNhZmVfcGFyc2Vfd2JyZWxzKHdicmVscywgc2hlZXRzKSB7XG5cdGlmKCF3YnJlbHMpIHJldHVybiAwO1xuXHR0cnkge1xuXHRcdHdicmVscyA9IHNoZWV0cy5tYXAoZnVuY3Rpb24gcHdicih3KSB7IGlmKCF3LmlkKSB3LmlkID0gdy5zdHJSZWxJRDsgcmV0dXJuIFt3Lm5hbWUsIHdicmVsc1snIWlkJ11bdy5pZF0uVGFyZ2V0LCBnZXRfc2hlZXRfdHlwZSh3YnJlbHNbJyFpZCddW3cuaWRdLlR5cGUpXTsgfSk7XG5cdH0gY2F0Y2goZSkgeyByZXR1cm4gbnVsbDsgfVxuXHRyZXR1cm4gIXdicmVscyB8fCB3YnJlbHMubGVuZ3RoID09PSAwID8gbnVsbCA6IHdicmVscztcbn1cblxuZnVuY3Rpb24gc2FmZV9wYXJzZV9zaGVldCh6aXAsIHBhdGgsIHJlbHNQYXRoLCBzaGVldCwgaWR4LCBzaGVldFJlbHMsIHNoZWV0cywgc3R5cGUsIG9wdHMsIHdiLCB0aGVtZXMsIHN0eWxlcykge1xuXHR0cnkge1xuXHRcdHNoZWV0UmVsc1tzaGVldF09cGFyc2VfcmVscyhnZXR6aXBzdHIoemlwLCByZWxzUGF0aCwgdHJ1ZSksIHBhdGgpO1xuXHRcdHZhciBkYXRhID0gZ2V0emlwZGF0YSh6aXAsIHBhdGgpO1xuXHRcdHN3aXRjaChzdHlwZSkge1xuXHRcdFx0Y2FzZSAnc2hlZXQnOiBzaGVldHNbc2hlZXRdPXBhcnNlX3dzKGRhdGEsIHBhdGgsIGlkeCwgb3B0cywgc2hlZXRSZWxzW3NoZWV0XSwgd2IsIHRoZW1lcywgc3R5bGVzKTsgYnJlYWs7XG5cdFx0XHRjYXNlICdjaGFydCc6XG5cdFx0XHRcdHZhciBjcyA9IHBhcnNlX2NzKGRhdGEsIHBhdGgsIGlkeCwgb3B0cywgc2hlZXRSZWxzW3NoZWV0XSwgd2IsIHRoZW1lcywgc3R5bGVzKTtcblx0XHRcdFx0c2hlZXRzW3NoZWV0XSA9IGNzO1xuXHRcdFx0XHRpZighY3MgfHwgIWNzWychY2hhcnQnXSkgYnJlYWs7XG5cdFx0XHRcdHZhciBkZmlsZSA9IHJlc29sdmVfcGF0aChjc1snIWNoYXJ0J10uVGFyZ2V0LCBwYXRoKTtcblx0XHRcdFx0dmFyIGRyZWxzcCA9IGdldF9yZWxzX3BhdGgoZGZpbGUpO1xuXHRcdFx0XHR2YXIgZHJhdyA9IHBhcnNlX2RyYXdpbmcoZ2V0emlwc3RyKHppcCwgZGZpbGUsIHRydWUpLCBwYXJzZV9yZWxzKGdldHppcHN0cih6aXAsIGRyZWxzcCwgdHJ1ZSksIGRmaWxlKSk7XG5cdFx0XHRcdHZhciBjaGFydHAgPSByZXNvbHZlX3BhdGgoZHJhdywgZGZpbGUpO1xuXHRcdFx0XHR2YXIgY3JlbHNwID0gZ2V0X3JlbHNfcGF0aChjaGFydHApO1xuXHRcdFx0XHRjcyA9IHBhcnNlX2NoYXJ0KGdldHppcHN0cih6aXAsIGNoYXJ0cCwgdHJ1ZSksIGNoYXJ0cCwgb3B0cywgcGFyc2VfcmVscyhnZXR6aXBzdHIoemlwLCBjcmVsc3AsIHRydWUpLCBjaGFydHApLCB3YiwgY3MpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ21hY3JvJzogc2hlZXRzW3NoZWV0XT1wYXJzZV9tcyhkYXRhLCBwYXRoLCBpZHgsIG9wdHMsIHNoZWV0UmVsc1tzaGVldF0sIHdiLCB0aGVtZXMsIHN0eWxlcyk7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnZGlhbG9nJzogc2hlZXRzW3NoZWV0XT1wYXJzZV9kcyhkYXRhLCBwYXRoLCBpZHgsIG9wdHMsIHNoZWV0UmVsc1tzaGVldF0sIHdiLCB0aGVtZXMsIHN0eWxlcyk7IGJyZWFrO1xuXHRcdH1cblx0fSBjYXRjaChlKSB7IGlmKG9wdHMuV1RGKSB0aHJvdyBlOyB9XG59XG5cbnZhciBub2RpcnMgPSBmdW5jdGlvbiBub2RpcnMoeCl7cmV0dXJuIHguc2xpY2UoLTEpICE9ICcvJzt9O1xuZnVuY3Rpb24gc3RyaXBfZnJvbnRfc2xhc2goeCkgeyByZXR1cm4geC5jaGFyQXQoMCkgPT0gJy8nID8geC5zbGljZSgxKSA6IHg7IH1cblxuZnVuY3Rpb24gcGFyc2VfemlwKHppcCwgb3B0cykge1xuXHRtYWtlX3NzZihTU0YpO1xuXHRvcHRzID0gb3B0cyB8fCB7fTtcblx0Zml4X3JlYWRfb3B0cyhvcHRzKTtcblxuXHQvKiBPcGVuRG9jdW1lbnQgUGFydCAzIFNlY3Rpb24gMi4yLjEgT3BlbkRvY3VtZW50IFBhY2thZ2UgKi9cblx0aWYoc2FmZWdldHppcGZpbGUoemlwLCAnTUVUQS1JTkYvbWFuaWZlc3QueG1sJykpIHJldHVybiBwYXJzZV9vZHMoemlwLCBvcHRzKTtcblx0LyogVU9DICovXG5cdGlmKHNhZmVnZXR6aXBmaWxlKHppcCwgJ29iamVjdGRhdGEueG1sJykpIHJldHVybiBwYXJzZV9vZHMoemlwLCBvcHRzKTtcblx0LyogTnVtYmVycyAqL1xuXHRpZihzYWZlZ2V0emlwZmlsZSh6aXAsICdJbmRleC9Eb2N1bWVudC5pd2EnKSkgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBOVU1CRVJTIGZpbGUnKTtcblxuXHR2YXIgZW50cmllcyA9IGtleXMoemlwLmZpbGVzKS5maWx0ZXIobm9kaXJzKS5zb3J0KCk7XG5cdHZhciBkaXIgPSBwYXJzZV9jdCgoZ2V0emlwc3RyKHppcCwgJ1tDb250ZW50X1R5cGVzXS54bWwnKSkpO1xuXHR2YXIgeGxzYiA9IGZhbHNlO1xuXHR2YXIgc2hlZXRzLCBiaW5uYW1lO1xuXHRpZihkaXIud29ya2Jvb2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdGJpbm5hbWUgPSBcInhsL3dvcmtib29rLnhtbFwiO1xuXHRcdGlmKGdldHppcGRhdGEoemlwLGJpbm5hbWUsIHRydWUpKSBkaXIud29ya2Jvb2tzLnB1c2goYmlubmFtZSk7XG5cdH1cblx0aWYoZGlyLndvcmtib29rcy5sZW5ndGggPT09IDApIHtcblx0XHRiaW5uYW1lID0gXCJ4bC93b3JrYm9vay5iaW5cIjtcblx0XHRpZighZ2V0emlwZGF0YSh6aXAsYmlubmFtZSx0cnVlKSkgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgd29ya2Jvb2tcIik7XG5cdFx0ZGlyLndvcmtib29rcy5wdXNoKGJpbm5hbWUpO1xuXHRcdHhsc2IgPSB0cnVlO1xuXHR9XG5cdGlmKGRpci53b3JrYm9va3NbMF0uc2xpY2UoLTMpID09IFwiYmluXCIpIHhsc2IgPSB0cnVlO1xuXG5cdHZhciB0aGVtZXMgPSAoe30pO1xuXHR2YXIgc3R5bGVzID0gKHt9KTtcblx0aWYoIW9wdHMuYm9va1NoZWV0cyAmJiAhb3B0cy5ib29rUHJvcHMpIHtcblx0XHRzdHJzID0gW107XG5cdFx0aWYoZGlyLnNzdCkgc3Rycz1wYXJzZV9zc3QoZ2V0emlwZGF0YSh6aXAsIHN0cmlwX2Zyb250X3NsYXNoKGRpci5zc3QpKSwgZGlyLnNzdCwgb3B0cyk7XG5cblx0XHRpZihvcHRzLmNlbGxTdHlsZXMgJiYgZGlyLnRoZW1lcy5sZW5ndGgpIHRoZW1lcyA9IHBhcnNlX3RoZW1lKGdldHppcHN0cih6aXAsIGRpci50aGVtZXNbMF0ucmVwbGFjZSgvXlxcLy8sJycpLCB0cnVlKXx8XCJcIixkaXIudGhlbWVzWzBdLCBvcHRzKTtcblxuXHRcdGlmKGRpci5zdHlsZSkgc3R5bGVzID0gcGFyc2Vfc3R5KGdldHppcGRhdGEoemlwLCBzdHJpcF9mcm9udF9zbGFzaChkaXIuc3R5bGUpKSwgZGlyLnN0eWxlLCB0aGVtZXMsIG9wdHMpO1xuXHR9XG5cblx0Lyp2YXIgZXh0ZXJuYm9va3MgPSAqL2Rpci5saW5rcy5tYXAoZnVuY3Rpb24obGluaykge1xuXHRcdHJldHVybiBwYXJzZV94bGluayhnZXR6aXBkYXRhKHppcCwgc3RyaXBfZnJvbnRfc2xhc2gobGluaykpLCBsaW5rLCBvcHRzKTtcblx0fSk7XG5cblx0dmFyIHdiID0gcGFyc2Vfd2IoZ2V0emlwZGF0YSh6aXAsIHN0cmlwX2Zyb250X3NsYXNoKGRpci53b3JrYm9va3NbMF0pKSwgZGlyLndvcmtib29rc1swXSwgb3B0cyk7XG5cblx0dmFyIHByb3BzID0ge30sIHByb3BkYXRhID0gXCJcIjtcblxuXHRpZihkaXIuY29yZXByb3BzLmxlbmd0aCkge1xuXHRcdHByb3BkYXRhID0gZ2V0emlwZGF0YSh6aXAsIHN0cmlwX2Zyb250X3NsYXNoKGRpci5jb3JlcHJvcHNbMF0pLCB0cnVlKTtcblx0XHRpZihwcm9wZGF0YSkgcHJvcHMgPSBwYXJzZV9jb3JlX3Byb3BzKHByb3BkYXRhKTtcblx0XHRpZihkaXIuZXh0cHJvcHMubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRwcm9wZGF0YSA9IGdldHppcGRhdGEoemlwLCBzdHJpcF9mcm9udF9zbGFzaChkaXIuZXh0cHJvcHNbMF0pLCB0cnVlKTtcblx0XHRcdGlmKHByb3BkYXRhKSBwYXJzZV9leHRfcHJvcHMocHJvcGRhdGEsIHByb3BzLCBvcHRzKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgY3VzdHByb3BzID0ge307XG5cdGlmKCFvcHRzLmJvb2tTaGVldHMgfHwgb3B0cy5ib29rUHJvcHMpIHtcblx0XHRpZiAoZGlyLmN1c3Rwcm9wcy5sZW5ndGggIT09IDApIHtcblx0XHRcdHByb3BkYXRhID0gZ2V0emlwc3RyKHppcCwgc3RyaXBfZnJvbnRfc2xhc2goZGlyLmN1c3Rwcm9wc1swXSksIHRydWUpO1xuXHRcdFx0aWYocHJvcGRhdGEpIGN1c3Rwcm9wcyA9IHBhcnNlX2N1c3RfcHJvcHMocHJvcGRhdGEsIG9wdHMpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBvdXQgPSAoe30pO1xuXHRpZihvcHRzLmJvb2tTaGVldHMgfHwgb3B0cy5ib29rUHJvcHMpIHtcblx0XHRpZih3Yi5TaGVldHMpIHNoZWV0cyA9IHdiLlNoZWV0cy5tYXAoZnVuY3Rpb24gcGx1Y2soeCl7IHJldHVybiB4Lm5hbWU7IH0pO1xuXHRcdGVsc2UgaWYocHJvcHMuV29ya3NoZWV0cyAmJiBwcm9wcy5TaGVldE5hbWVzLmxlbmd0aCA+IDApIHNoZWV0cz1wcm9wcy5TaGVldE5hbWVzO1xuXHRcdGlmKG9wdHMuYm9va1Byb3BzKSB7IG91dC5Qcm9wcyA9IHByb3BzOyBvdXQuQ3VzdHByb3BzID0gY3VzdHByb3BzOyB9XG5cdFx0aWYob3B0cy5ib29rU2hlZXRzICYmIHR5cGVvZiBzaGVldHMgIT09ICd1bmRlZmluZWQnKSBvdXQuU2hlZXROYW1lcyA9IHNoZWV0cztcblx0XHRpZihvcHRzLmJvb2tTaGVldHMgPyBvdXQuU2hlZXROYW1lcyA6IG9wdHMuYm9va1Byb3BzKSByZXR1cm4gb3V0O1xuXHR9XG5cdHNoZWV0cyA9IHt9O1xuXG5cdHZhciBkZXBzID0ge307XG5cdGlmKG9wdHMuYm9va0RlcHMgJiYgZGlyLmNhbGNjaGFpbikgZGVwcz1wYXJzZV9jYyhnZXR6aXBkYXRhKHppcCwgc3RyaXBfZnJvbnRfc2xhc2goZGlyLmNhbGNjaGFpbikpLGRpci5jYWxjY2hhaW4sb3B0cyk7XG5cblx0dmFyIGk9MDtcblx0dmFyIHNoZWV0UmVscyA9ICh7fSk7XG5cdHZhciBwYXRoLCByZWxzUGF0aDtcblxuXHR7XG5cdFx0dmFyIHdic2hlZXRzID0gd2IuU2hlZXRzO1xuXHRcdHByb3BzLldvcmtzaGVldHMgPSB3YnNoZWV0cy5sZW5ndGg7XG5cdFx0cHJvcHMuU2hlZXROYW1lcyA9IFtdO1xuXHRcdGZvcih2YXIgaiA9IDA7IGogIT0gd2JzaGVldHMubGVuZ3RoOyArK2opIHtcblx0XHRcdHByb3BzLlNoZWV0TmFtZXNbal0gPSB3YnNoZWV0c1tqXS5uYW1lO1xuXHRcdH1cblx0fVxuXG5cdHZhciB3YmV4dCA9IHhsc2IgPyBcImJpblwiIDogXCJ4bWxcIjtcblx0dmFyIHdicmVsc2ZpbGUgPSAneGwvX3JlbHMvd29ya2Jvb2suJyArIHdiZXh0ICsgJy5yZWxzJztcblx0dmFyIHdicmVscyA9IHBhcnNlX3JlbHMoZ2V0emlwc3RyKHppcCwgd2JyZWxzZmlsZSwgdHJ1ZSksIHdicmVsc2ZpbGUpO1xuXHRpZih3YnJlbHMpIHdicmVscyA9IHNhZmVfcGFyc2Vfd2JyZWxzKHdicmVscywgd2IuU2hlZXRzKTtcblx0LyogTnVtYmVycyBpT1MgaGFjayAqL1xuXHR2YXIgbm1vZGUgPSAoZ2V0emlwZGF0YSh6aXAsXCJ4bC93b3Jrc2hlZXRzL3NoZWV0LnhtbFwiLHRydWUpKT8xOjA7XG5cdGZvcihpID0gMDsgaSAhPSBwcm9wcy5Xb3Jrc2hlZXRzOyArK2kpIHtcblx0XHR2YXIgc3R5cGUgPSBcInNoZWV0XCI7XG5cdFx0aWYod2JyZWxzICYmIHdicmVsc1tpXSkge1xuXHRcdFx0cGF0aCA9ICd4bC8nICsgKHdicmVsc1tpXVsxXSkucmVwbGFjZSgvW1xcL10/eGxcXC8vLCBcIlwiKTtcblx0XHRcdHN0eXBlID0gd2JyZWxzW2ldWzJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXRoID0gJ3hsL3dvcmtzaGVldHMvc2hlZXQnKyhpKzEtbm1vZGUpK1wiLlwiICsgd2JleHQ7XG5cdFx0XHRwYXRoID0gcGF0aC5yZXBsYWNlKC9zaGVldDBcXC4vLFwic2hlZXQuXCIpO1xuXHRcdH1cblx0XHRyZWxzUGF0aCA9IHBhdGgucmVwbGFjZSgvXiguKikoXFwvKShbXlxcL10qKSQvLCBcIiQxL19yZWxzLyQzLnJlbHNcIik7XG5cdFx0c2FmZV9wYXJzZV9zaGVldCh6aXAsIHBhdGgsIHJlbHNQYXRoLCBwcm9wcy5TaGVldE5hbWVzW2ldLCBpLCBzaGVldFJlbHMsIHNoZWV0cywgc3R5cGUsIG9wdHMsIHdiLCB0aGVtZXMsIHN0eWxlcyk7XG5cdH1cblxuXHRpZihkaXIuY29tbWVudHMpIHBhcnNlX2NvbW1lbnRzKHppcCwgZGlyLmNvbW1lbnRzLCBzaGVldHMsIHNoZWV0UmVscywgb3B0cyk7XG5cblx0b3V0ID0gKHtcblx0XHREaXJlY3Rvcnk6IGRpcixcblx0XHRXb3JrYm9vazogd2IsXG5cdFx0UHJvcHM6IHByb3BzLFxuXHRcdEN1c3Rwcm9wczogY3VzdHByb3BzLFxuXHRcdERlcHM6IGRlcHMsXG5cdFx0U2hlZXRzOiBzaGVldHMsXG5cdFx0U2hlZXROYW1lczogcHJvcHMuU2hlZXROYW1lcyxcblx0XHRTdHJpbmdzOiBzdHJzLFxuXHRcdFN0eWxlczogc3R5bGVzLFxuXHRcdFRoZW1lczogdGhlbWVzLFxuXHRcdFNTRjogU1NGLmdldF90YWJsZSgpXG5cdH0pO1xuXHRpZihvcHRzLmJvb2tGaWxlcykge1xuXHRcdG91dC5rZXlzID0gZW50cmllcztcblx0XHRvdXQuZmlsZXMgPSB6aXAuZmlsZXM7XG5cdH1cblx0aWYob3B0cy5ib29rVkJBKSB7XG5cdFx0aWYoZGlyLnZiYS5sZW5ndGggPiAwKSBvdXQudmJhcmF3ID0gZ2V0emlwZGF0YSh6aXAsc3RyaXBfZnJvbnRfc2xhc2goZGlyLnZiYVswXSksdHJ1ZSk7XG5cdFx0ZWxzZSBpZihkaXIuZGVmYXVsdHMgJiYgZGlyLmRlZmF1bHRzLmJpbiA9PT0gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCcpIG91dC52YmFyYXcgPSBnZXR6aXBkYXRhKHppcCwneGwvdmJhUHJvamVjdC5iaW4nLHRydWUpO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59XG5cbi8qIFtNUy1PRkZDUllQVE9dIDIuMS4xICovXG5mdW5jdGlvbiBwYXJzZV94bHN4Y2ZiKGNmYiwgX29wdHMpIHtcblx0dmFyIG9wdHMgPSBfb3B0cyB8fCB7fTtcblx0dmFyIGYgPSAnLyFEYXRhU3BhY2VzL1ZlcnNpb24nO1xuXHR2YXIgZGF0YSA9IENGQi5maW5kKGNmYiwgZik7IGlmKCFkYXRhIHx8ICFkYXRhLmNvbnRlbnQpIHRocm93IG5ldyBFcnJvcihcIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgXCIgKyBmKTtcblx0Lyp2YXIgdmVyc2lvbiA9ICovcGFyc2VfRGF0YVNwYWNlVmVyc2lvbkluZm8oZGF0YS5jb250ZW50KTtcblxuXHQvKiAyLjMuNC4xICovXG5cdGYgPSAnLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCc7XG5cdGRhdGEgPSBDRkIuZmluZChjZmIsIGYpOyBpZighZGF0YSB8fCAhZGF0YS5jb250ZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nIFwiICsgZik7XG5cdHZhciBkc20gPSBwYXJzZV9EYXRhU3BhY2VNYXAoZGF0YS5jb250ZW50KTtcblx0aWYoZHNtLmxlbmd0aCAhPT0gMSB8fCBkc21bMF0uY29tcHMubGVuZ3RoICE9PSAxIHx8IGRzbVswXS5jb21wc1swXS50ICE9PSAwIHx8IGRzbVswXS5uYW1lICE9PSBcIlN0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2VcIiB8fCBkc21bMF0uY29tcHNbMF0udiAhPT0gXCJFbmNyeXB0ZWRQYWNrYWdlXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkIFwiICsgZik7XG5cblx0LyogMi4zLjQuMiAqL1xuXHRmID0gJy8hRGF0YVNwYWNlcy9EYXRhU3BhY2VJbmZvL1N0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UnO1xuXHRkYXRhID0gQ0ZCLmZpbmQoY2ZiLCBmKTsgaWYoIWRhdGEgfHwgIWRhdGEuY29udGVudCkgdGhyb3cgbmV3IEVycm9yKFwiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyBcIiArIGYpO1xuXHR2YXIgc2VkcyA9IHBhcnNlX0RhdGFTcGFjZURlZmluaXRpb24oZGF0YS5jb250ZW50KTtcblx0aWYoc2Vkcy5sZW5ndGggIT0gMSB8fCBzZWRzWzBdICE9IFwiU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybVwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihcIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCBcIiArIGYpO1xuXG5cdC8qIDIuMy40LjMgKi9cblx0ZiA9ICcvIURhdGFTcGFjZXMvVHJhbnNmb3JtSW5mby9TdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtLyFQcmltYXJ5Jztcblx0ZGF0YSA9IENGQi5maW5kKGNmYiwgZik7IGlmKCFkYXRhIHx8ICFkYXRhLmNvbnRlbnQpIHRocm93IG5ldyBFcnJvcihcIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgXCIgKyBmKTtcblx0Lyp2YXIgaGRyID0gKi9wYXJzZV9QcmltYXJ5KGRhdGEuY29udGVudCk7XG5cblx0ZiA9ICcvRW5jcnlwdGlvbkluZm8nO1xuXHRkYXRhID0gQ0ZCLmZpbmQoY2ZiLCBmKTsgaWYoIWRhdGEgfHwgIWRhdGEuY29udGVudCkgdGhyb3cgbmV3IEVycm9yKFwiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyBcIiArIGYpO1xuXHR2YXIgZWluZm8gPSBwYXJzZV9FbmNyeXB0aW9uSW5mbyhkYXRhLmNvbnRlbnQpO1xuXG5cdC8qIDIuMy40LjQgKi9cblx0ZiA9ICcvRW5jcnlwdGVkUGFja2FnZSc7XG5cdGRhdGEgPSBDRkIuZmluZChjZmIsIGYpOyBpZighZGF0YSB8fCAhZGF0YS5jb250ZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nIFwiICsgZik7XG5cbi8qZ2xvYmFsIGRlY3J5cHRfYWdpbGUgKi9cbmlmKGVpbmZvWzBdID09IDB4MDQgJiYgdHlwZW9mIGRlY3J5cHRfYWdpbGUgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZGVjcnlwdF9hZ2lsZShlaW5mb1sxXSwgZGF0YS5jb250ZW50LCBvcHRzLnBhc3N3b3JkIHx8IFwiXCIsIG9wdHMpO1xuLypnbG9iYWwgZGVjcnlwdF9zdGQ3NiAqL1xuaWYoZWluZm9bMF0gPT0gMHgwMiAmJiB0eXBlb2YgZGVjcnlwdF9zdGQ3NiAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBkZWNyeXB0X3N0ZDc2KGVpbmZvWzFdLCBkYXRhLmNvbnRlbnQsIG9wdHMucGFzc3dvcmQgfHwgXCJcIiwgb3B0cyk7XG5cdHRocm93IG5ldyBFcnJvcihcIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkXCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV96aXAod2IsIG9wdHMpIHtcblx0X3NoYXBlaWQgPSAxMDI0O1xuXHRpZihvcHRzLmJvb2tUeXBlID09IFwib2RzXCIpIHJldHVybiB3cml0ZV9vZHMod2IsIG9wdHMpO1xuXHRpZih3YiAmJiAhd2IuU1NGKSB7XG5cdFx0d2IuU1NGID0gU1NGLmdldF90YWJsZSgpO1xuXHR9XG5cdGlmKHdiICYmIHdiLlNTRikge1xuXHRcdG1ha2Vfc3NmKFNTRik7IFNTRi5sb2FkX3RhYmxlKHdiLlNTRik7XG5cdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHRvcHRzLnJldnNzZiA9IGV2ZXJ0X251bSh3Yi5TU0YpOyBvcHRzLnJldnNzZlt3Yi5TU0ZbNjU1MzVdXSA9IDA7XG5cdFx0b3B0cy5zc2YgPSB3Yi5TU0Y7XG5cdH1cblx0b3B0cy5yZWxzID0ge307IG9wdHMud2JyZWxzID0ge307XG5cdG9wdHMuU3RyaW5ncyA9IFtdOyBvcHRzLlN0cmluZ3MuQ291bnQgPSAwOyBvcHRzLlN0cmluZ3MuVW5pcXVlID0gMDtcblx0dmFyIHdiZXh0ID0gb3B0cy5ib29rVHlwZSA9PSBcInhsc2JcIiA/IFwiYmluXCIgOiBcInhtbFwiO1xuXHR2YXIgdmJhZm10ID0gVkJBRk1UUy5pbmRleE9mKG9wdHMuYm9va1R5cGUpID4gLTE7XG5cdHZhciBjdCA9IG5ld19jdCgpO1xuXHRmaXhfd3JpdGVfb3B0cyhvcHRzID0gb3B0cyB8fCB7fSk7XG52YXIgemlwID0gbmV3IGpzemlwKCk7XG5cdHZhciBmID0gXCJcIiwgcklkID0gMDtcblxuXHRvcHRzLmNlbGxYZnMgPSBbXTtcblx0Z2V0X2NlbGxfc3R5bGUob3B0cy5jZWxsWGZzLCB7fSwge3JldnNzZjp7XCJHZW5lcmFsXCI6MH19KTtcblxuXHRpZighd2IuUHJvcHMpIHdiLlByb3BzID0ge307XG5cblx0ZiA9IFwiZG9jUHJvcHMvY29yZS54bWxcIjtcblx0emlwLmZpbGUoZiwgd3JpdGVfY29yZV9wcm9wcyh3Yi5Qcm9wcywgb3B0cykpO1xuXHRjdC5jb3JlcHJvcHMucHVzaChmKTtcblx0YWRkX3JlbHMob3B0cy5yZWxzLCAyLCBmLCBSRUxTLkNPUkVfUFJPUFMpO1xuXG5mID0gXCJkb2NQcm9wcy9hcHAueG1sXCI7XG5cdGlmKHdiLlByb3BzICYmIHdiLlByb3BzLlNoZWV0TmFtZXMpey8qIGVtcHR5ICovfVxuXHRlbHNlIGlmKCF3Yi5Xb3JrYm9vayB8fCAhd2IuV29ya2Jvb2suU2hlZXRzKSB3Yi5Qcm9wcy5TaGVldE5hbWVzID0gd2IuU2hlZXROYW1lcztcblx0Ly8gJEZsb3dJZ25vcmVcblx0ZWxzZSB3Yi5Qcm9wcy5TaGVldE5hbWVzID0gd2IuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oeCxpKSB7IHJldHVybiBbKHdiLldvcmtib29rLlNoZWV0c1tpXXx8e30pLkhpZGRlbiAhPSAyLCB4XTt9KS5maWx0ZXIoZnVuY3Rpb24oeCkgeyByZXR1cm4geFswXTsgfSkubWFwKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHhbMV07IH0pO1xuXHR3Yi5Qcm9wcy5Xb3Jrc2hlZXRzID0gd2IuUHJvcHMuU2hlZXROYW1lcy5sZW5ndGg7XG5cdHppcC5maWxlKGYsIHdyaXRlX2V4dF9wcm9wcyh3Yi5Qcm9wcywgb3B0cykpO1xuXHRjdC5leHRwcm9wcy5wdXNoKGYpO1xuXHRhZGRfcmVscyhvcHRzLnJlbHMsIDMsIGYsIFJFTFMuRVhUX1BST1BTKTtcblxuXHRpZih3Yi5DdXN0cHJvcHMgIT09IHdiLlByb3BzICYmIGtleXMod2IuQ3VzdHByb3BzfHx7fSkubGVuZ3RoID4gMCkge1xuXHRcdGYgPSBcImRvY1Byb3BzL2N1c3RvbS54bWxcIjtcblx0XHR6aXAuZmlsZShmLCB3cml0ZV9jdXN0X3Byb3BzKHdiLkN1c3Rwcm9wcywgb3B0cykpO1xuXHRcdGN0LmN1c3Rwcm9wcy5wdXNoKGYpO1xuXHRcdGFkZF9yZWxzKG9wdHMucmVscywgNCwgZiwgUkVMUy5DVVNUX1BST1BTKTtcblx0fVxuXG5cdGYgPSBcInhsL3dvcmtib29rLlwiICsgd2JleHQ7XG5cdHppcC5maWxlKGYsIHdyaXRlX3diKHdiLCBmLCBvcHRzKSk7XG5cdGN0Lndvcmtib29rcy5wdXNoKGYpO1xuXHRhZGRfcmVscyhvcHRzLnJlbHMsIDEsIGYsIFJFTFMuV0IpO1xuXG5cdGZvcihySWQ9MTtySWQgPD0gd2IuU2hlZXROYW1lcy5sZW5ndGg7ICsrcklkKSB7XG5cdFx0dmFyIHdzcmVscyA9IHsnIWlkJzp7fX07XG5cdFx0dmFyIHdzID0gd2IuU2hlZXRzW3diLlNoZWV0TmFtZXNbcklkLTFdXTtcblx0XHR2YXIgX3R5cGUgPSAod3MgfHwge30pW1wiIXR5cGVcIl0gfHwgXCJzaGVldFwiO1xuXHRcdHN3aXRjaChfdHlwZSkge1xuXHRcdGNhc2UgXCJjaGFydFwiOiAvKlxuXHRcdFx0ZiA9IFwieGwvY2hhcnRzaGVldHMvc2hlZXRcIiArIHJJZCArIFwiLlwiICsgd2JleHQ7XG5cdFx0XHR6aXAuZmlsZShmLCB3cml0ZV9jcyhySWQtMSwgZiwgb3B0cywgd2IsIHdzcmVscykpO1xuXHRcdFx0Y3QuY2hhcnRzLnB1c2goZik7XG5cdFx0XHRhZGRfcmVscyh3c3JlbHMsIC0xLCBcImNoYXJ0c2hlZXRzL3NoZWV0XCIgKyBySWQgKyBcIi5cIiArIHdiZXh0LCBSRUxTLkNTKTtcblx0XHRcdGJyZWFrOyAqL1xuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRmID0gXCJ4bC93b3Jrc2hlZXRzL3NoZWV0XCIgKyBySWQgKyBcIi5cIiArIHdiZXh0O1xuXHRcdFx0emlwLmZpbGUoZiwgd3JpdGVfd3MocklkLTEsIGYsIG9wdHMsIHdiLCB3c3JlbHMpKTtcblx0XHRcdGN0LnNoZWV0cy5wdXNoKGYpO1xuXHRcdFx0YWRkX3JlbHMob3B0cy53YnJlbHMsIC0xLCBcIndvcmtzaGVldHMvc2hlZXRcIiArIHJJZCArIFwiLlwiICsgd2JleHQsIFJFTFMuV1NbMF0pO1xuXHRcdH1cblxuXHRcdGlmKHdzKSB7XG5cdFx0XHR2YXIgY29tbWVudHMgPSB3c1snIWNvbW1lbnRzJ107XG5cdFx0XHRpZihjb21tZW50cyAmJiBjb21tZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHZhciBjZiA9IFwieGwvY29tbWVudHNcIiArIHJJZCArIFwiLlwiICsgd2JleHQ7XG5cdFx0XHRcdHppcC5maWxlKGNmLCB3cml0ZV9jbW50KGNvbW1lbnRzLCBjZiwgb3B0cykpO1xuXHRcdFx0XHRjdC5jb21tZW50cy5wdXNoKGNmKTtcblx0XHRcdFx0YWRkX3JlbHMod3NyZWxzLCAtMSwgXCIuLi9jb21tZW50c1wiICsgcklkICsgXCIuXCIgKyB3YmV4dCwgUkVMUy5DTU5UKTtcblx0XHRcdH1cblx0XHRcdGlmKHdzWychbGVnYWN5J10pIHtcblx0XHRcdFx0emlwLmZpbGUoXCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nXCIgKyAocklkKSArIFwiLnZtbFwiLCB3cml0ZV9jb21tZW50c192bWwocklkLCB3c1snIWNvbW1lbnRzJ10pKTtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB3c1snIWNvbW1lbnRzJ107XG5cdFx0XHRkZWxldGUgd3NbJyFsZWdhY3knXTtcblx0XHR9XG5cblx0XHRpZih3c3JlbHNbJyFpZCddLnJJZDEpIHppcC5maWxlKGdldF9yZWxzX3BhdGgoZiksIHdyaXRlX3JlbHMod3NyZWxzKSk7XG5cdH1cblxuXHRpZihvcHRzLlN0cmluZ3MgIT0gbnVsbCAmJiBvcHRzLlN0cmluZ3MubGVuZ3RoID4gMCkge1xuXHRcdGYgPSBcInhsL3NoYXJlZFN0cmluZ3MuXCIgKyB3YmV4dDtcblx0XHR6aXAuZmlsZShmLCB3cml0ZV9zc3Qob3B0cy5TdHJpbmdzLCBmLCBvcHRzKSk7XG5cdFx0Y3Quc3Rycy5wdXNoKGYpO1xuXHRcdGFkZF9yZWxzKG9wdHMud2JyZWxzLCAtMSwgXCJzaGFyZWRTdHJpbmdzLlwiICsgd2JleHQsIFJFTFMuU1NUKTtcblx0fVxuXG5cdC8qIFRPRE86IHNvbWV0aGluZyBtb3JlIGludGVsbGlnZW50IHdpdGggdGhlbWVzICovXG5cblx0ZiA9IFwieGwvdGhlbWUvdGhlbWUxLnhtbFwiO1xuXHR6aXAuZmlsZShmLCB3cml0ZV90aGVtZSh3Yi5UaGVtZXMsIG9wdHMpKTtcblx0Y3QudGhlbWVzLnB1c2goZik7XG5cdGFkZF9yZWxzKG9wdHMud2JyZWxzLCAtMSwgXCJ0aGVtZS90aGVtZTEueG1sXCIsIFJFTFMuVEhFTUUpO1xuXG5cdC8qIFRPRE86IHNvbWV0aGluZyBtb3JlIGludGVsbGlnZW50IHdpdGggc3R5bGVzICovXG5cblx0ZiA9IFwieGwvc3R5bGVzLlwiICsgd2JleHQ7XG5cdHppcC5maWxlKGYsIHdyaXRlX3N0eSh3YiwgZiwgb3B0cykpO1xuXHRjdC5zdHlsZXMucHVzaChmKTtcblx0YWRkX3JlbHMob3B0cy53YnJlbHMsIC0xLCBcInN0eWxlcy5cIiArIHdiZXh0LCBSRUxTLlNUWSk7XG5cblx0aWYod2IudmJhcmF3ICYmIHZiYWZtdCkge1xuXHRcdGYgPSBcInhsL3ZiYVByb2plY3QuYmluXCI7XG5cdFx0emlwLmZpbGUoZiwgd2IudmJhcmF3KTtcblx0XHRjdC52YmEucHVzaChmKTtcblx0XHRhZGRfcmVscyhvcHRzLndicmVscywgLTEsIFwidmJhUHJvamVjdC5iaW5cIiwgUkVMUy5WQkEpO1xuXHR9XG5cblx0emlwLmZpbGUoXCJbQ29udGVudF9UeXBlc10ueG1sXCIsIHdyaXRlX2N0KGN0LCBvcHRzKSk7XG5cdHppcC5maWxlKCdfcmVscy8ucmVscycsIHdyaXRlX3JlbHMob3B0cy5yZWxzKSk7XG5cdHppcC5maWxlKCd4bC9fcmVscy93b3JrYm9vay4nICsgd2JleHQgKyAnLnJlbHMnLCB3cml0ZV9yZWxzKG9wdHMud2JyZWxzKSk7XG5cblx0ZGVsZXRlIG9wdHMucmV2c3NmOyBkZWxldGUgb3B0cy5zc2Y7XG5cdHJldHVybiB6aXA7XG59XG5mdW5jdGlvbiBmaXJzdGJ5dGUoZixvKSB7XG5cdHZhciB4ID0gXCJcIjtcblx0c3dpdGNoKChvfHx7fSkudHlwZSB8fCBcImJhc2U2NFwiKSB7XG5cdFx0Y2FzZSAnYnVmZmVyJzogcmV0dXJuIFtmWzBdLCBmWzFdLCBmWzJdLCBmWzNdXTtcblx0XHRjYXNlICdiYXNlNjQnOiB4ID0gQmFzZTY0LmRlY29kZShmLnNsaWNlKDAsMjQpKTsgYnJlYWs7XG5cdFx0Y2FzZSAnYmluYXJ5JzogeCA9IGY7IGJyZWFrO1xuXHRcdGNhc2UgJ2FycmF5JzogIHJldHVybiBbZlswXSwgZlsxXSwgZlsyXSwgZlszXV07XG5cdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIHR5cGUgXCIgKyAobyAmJiBvLnR5cGUgfHwgXCJ1bmRlZmluZWRcIikpO1xuXHR9XG5cdHJldHVybiBbeC5jaGFyQ29kZUF0KDApLCB4LmNoYXJDb2RlQXQoMSksIHguY2hhckNvZGVBdCgyKSwgeC5jaGFyQ29kZUF0KDMpXTtcbn1cblxuZnVuY3Rpb24gcmVhZF9jZmIoY2ZiLCBvcHRzKSB7XG5cdGlmKENGQi5maW5kKGNmYiwgXCJFbmNyeXB0ZWRQYWNrYWdlXCIpKSByZXR1cm4gcGFyc2VfeGxzeGNmYihjZmIsIG9wdHMpO1xuXHRyZXR1cm4gcGFyc2VfeGxzY2ZiKGNmYiwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRfemlwKGRhdGEsIG9wdHMpIHtcbnZhciB6aXAsIGQgPSBkYXRhO1xuXHR2YXIgbyA9IG9wdHN8fHt9O1xuXHRpZighby50eXBlKSBvLnR5cGUgPSAoaGFzX2J1ZiAmJiBCdWZmZXIuaXNCdWZmZXIoZGF0YSkpID8gXCJidWZmZXJcIiA6IFwiYmFzZTY0XCI7XG5cdHN3aXRjaChvLnR5cGUpIHtcblx0XHRjYXNlIFwiYmFzZTY0XCI6IHppcCA9IG5ldyBqc3ppcChkLCB7IGJhc2U2NDp0cnVlIH0pOyBicmVhaztcblx0XHRjYXNlIFwiYmluYXJ5XCI6IGNhc2UgXCJhcnJheVwiOiB6aXAgPSBuZXcganN6aXAoZCwgeyBiYXNlNjQ6ZmFsc2UgfSk7IGJyZWFrO1xuXHRcdGNhc2UgXCJidWZmZXJcIjogemlwID0gbmV3IGpzemlwKGQpOyBicmVhaztcblx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgdHlwZSBcIiArIG8udHlwZSk7XG5cdH1cblx0cmV0dXJuIHBhcnNlX3ppcCh6aXAsIG8pO1xufVxuXG5mdW5jdGlvbiByZWFkX3BsYWludGV4dChkYXRhLCBvKSB7XG5cdHZhciBpID0gMDtcblx0bWFpbjogd2hpbGUoaSA8IGRhdGEubGVuZ3RoKSBzd2l0Y2goZGF0YS5jaGFyQ29kZUF0KGkpKSB7XG5cdFx0Y2FzZSAweDBBOiBjYXNlIDB4MEQ6IGNhc2UgMHgyMDogKytpOyBicmVhaztcblx0XHRjYXNlIDB4M0M6IHJldHVybiBwYXJzZV94bG1sKGRhdGEuc2xpY2UoaSksbyk7XG5cdFx0ZGVmYXVsdDogYnJlYWsgbWFpbjtcblx0fVxuXHRyZXR1cm4gUFJOLnRvX3dvcmtib29rKGRhdGEsIG8pO1xufVxuXG5mdW5jdGlvbiByZWFkX3BsYWludGV4dF9yYXcoZGF0YSwgbykge1xuXHR2YXIgc3RyID0gXCJcIiwgYnl0ZXMgPSBmaXJzdGJ5dGUoZGF0YSwgbyk7XG5cdHN3aXRjaChvLnR5cGUpIHtcblx0XHRjYXNlICdiYXNlNjQnOiBzdHIgPSBCYXNlNjQuZGVjb2RlKGRhdGEpOyBicmVhaztcblx0XHRjYXNlICdiaW5hcnknOiBzdHIgPSBkYXRhOyBicmVhaztcblx0XHRjYXNlICdidWZmZXInOiBzdHIgPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKTsgYnJlYWs7XG5cdFx0Y2FzZSAnYXJyYXknOiBzdHIgPSBjYzJzdHIoZGF0YSk7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCB0eXBlIFwiICsgby50eXBlKTtcblx0fVxuXHRpZihieXRlc1swXSA9PSAweEVGICYmIGJ5dGVzWzFdID09IDB4QkIgJiYgYnl0ZXNbMl0gPT0gMHhCRikgc3RyID0gdXRmOHJlYWQoc3RyKTtcblx0cmV0dXJuIHJlYWRfcGxhaW50ZXh0KHN0ciwgbyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRfdXRmMTYoZGF0YSwgbykge1xuXHR2YXIgZCA9IGRhdGE7XG5cdGlmKG8udHlwZSA9PSAnYmFzZTY0JykgZCA9IEJhc2U2NC5kZWNvZGUoZCk7XG5cdGQgPSBjcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLCBkLnNsaWNlKDIpLCAnc3RyJyk7XG5cdG8udHlwZSA9IFwiYmluYXJ5XCI7XG5cdHJldHVybiByZWFkX3BsYWludGV4dChkLCBvKTtcbn1cblxuZnVuY3Rpb24gYnN0cmlmeShkYXRhKSB7XG5cdHJldHVybiAhZGF0YS5tYXRjaCgvW15cXHgwMC1cXHg3Rl0vKSA/IGRhdGEgOiB1dGY4d3JpdGUoZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRfcHJuKGRhdGEsIGQsIG8sIHN0cikge1xuXHRpZihzdHIpIHsgby50eXBlID0gXCJzdHJpbmdcIjsgcmV0dXJuIFBSTi50b193b3JrYm9vayhkYXRhLCBvKTsgfVxuXHRyZXR1cm4gUFJOLnRvX3dvcmtib29rKGQsIG8pO1xufVxuXG5mdW5jdGlvbiByZWFkU3luYyhkYXRhLCBvcHRzKSB7XG5cdHJlc2V0X2NwKCk7XG5cdGlmKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSByZXR1cm4gcmVhZFN5bmMobmV3IFVpbnQ4QXJyYXkoZGF0YSksIG9wdHMpO1xuXHR2YXIgZCA9IGRhdGEsIG4gPSBbMCwwLDAsMF0sIHN0ciA9IGZhbHNlO1xuXHR2YXIgbyA9IG9wdHN8fHt9O1xuXHRfc3Nmb3B0cyA9IHt9O1xuXHRpZihvLmRhdGVORikgX3NzZm9wdHMuZGF0ZU5GID0gby5kYXRlTkY7XG5cdGlmKCFvLnR5cGUpIG8udHlwZSA9IChoYXNfYnVmICYmIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgPyBcImJ1ZmZlclwiIDogXCJiYXNlNjRcIjtcblx0aWYoby50eXBlID09IFwiZmlsZVwiKSB7IG8udHlwZSA9IFwiYnVmZmVyXCI7IGQgPSBfZnMucmVhZEZpbGVTeW5jKGRhdGEpOyB9XG5cdGlmKG8udHlwZSA9PSBcInN0cmluZ1wiKSB7IHN0ciA9IHRydWU7IG8udHlwZSA9IFwiYmluYXJ5XCI7IGQgPSBic3RyaWZ5KGRhdGEpOyB9XG5cdGlmKG8udHlwZSA9PSAnYXJyYXknICYmIHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHR2YXIgYWI9bmV3IEFycmF5QnVmZmVyKDMpLCB2dT1uZXcgVWludDhBcnJheShhYik7IHZ1LmZvbz1cImJhclwiO1xuXHRcdC8vICRGbG93SWdub3JlXG5cdFx0aWYoIXZ1LmZvbykge289ZHVwKG8pOyBvLnR5cGU9J2FycmF5JzsgcmV0dXJuIHJlYWRTeW5jKGFiMmEoZCksIG8pO31cblx0fVxuXHRzd2l0Y2goKG4gPSBmaXJzdGJ5dGUoZCwgbykpWzBdKSB7XG5cdFx0Y2FzZSAweEQwOiByZXR1cm4gcmVhZF9jZmIoQ0ZCLnJlYWQoZCwgbyksIG8pO1xuXHRcdGNhc2UgMHgwOTogcmV0dXJuIHBhcnNlX3hsc2NmYihkLCBvKTtcblx0XHRjYXNlIDB4M0M6IHJldHVybiBwYXJzZV94bG1sKGQsIG8pO1xuXHRcdGNhc2UgMHg0OTogaWYoblsxXSA9PT0gMHg0NCkgcmV0dXJuIHJlYWRfd2JfSUQoZCwgbyk7IGJyZWFrO1xuXHRcdGNhc2UgMHg1NDogaWYoblsxXSA9PT0gMHg0MSAmJiBuWzJdID09PSAweDQyICYmIG5bM10gPT09IDB4NEMpIHJldHVybiBESUYudG9fd29ya2Jvb2soZCwgbyk7IGJyZWFrO1xuXHRcdGNhc2UgMHg1MDogaWYoblsxXSA9PT0gMHg0QiAmJiBuWzJdIDwgMHgyMCAmJiBuWzNdIDwgMHgyMCkgcmV0dXJuIHJlYWRfemlwKGQsIG8pOyBicmVhaztcblx0XHRjYXNlIDB4RUY6IHJldHVybiBuWzNdID09PSAweDNDID8gcGFyc2VfeGxtbChkLCBvKSA6IHJlYWRfcHJuKGRhdGEsIGQsIG8sIHN0cik7XG5cdFx0Y2FzZSAweEZGOiBpZihuWzFdID09PSAweEZFKSB7IHJldHVybiByZWFkX3V0ZjE2KGQsIG8pOyB9IGJyZWFrO1xuXHRcdGNhc2UgMHgwMDogaWYoblsxXSA9PT0gMHgwMCAmJiBuWzJdID49IDB4MDIgJiYgblszXSA9PT0gMHgwMCkgcmV0dXJuIFdLXy50b193b3JrYm9vayhkLCBvKTsgYnJlYWs7XG5cdFx0Y2FzZSAweDAzOiBjYXNlIDB4ODM6IGNhc2UgMHg4QjogY2FzZSAweDhDOiByZXR1cm4gREJGLnRvX3dvcmtib29rKGQsIG8pO1xuXHRcdGNhc2UgMHg3QjogaWYoblsxXSA9PT0gMHg1QyAmJiBuWzJdID09PSAweDcyICYmIG5bM10gPT09IDB4NzQpIHJldHVybiBSVEYudG9fd29ya2Jvb2soZCwgbyk7IGJyZWFrO1xuXHRcdGNhc2UgMHgwQTogY2FzZSAweDBEOiBjYXNlIDB4MjA6IHJldHVybiByZWFkX3BsYWludGV4dF9yYXcoZCwgbyk7XG5cdH1cblx0aWYoblsyXSA8PSAxMiAmJiBuWzNdIDw9IDMxKSByZXR1cm4gREJGLnRvX3dvcmtib29rKGQsIG8pO1xuXHRyZXR1cm4gcmVhZF9wcm4oZGF0YSwgZCwgbywgc3RyKTtcbn1cblxuZnVuY3Rpb24gcmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBvcHRzKSB7XG5cdHZhciBvID0gb3B0c3x8e307IG8udHlwZSA9ICdmaWxlJztcblx0cmV0dXJuIHJlYWRTeW5jKGZpbGVuYW1lLCBvKTtcbn1cbmZ1bmN0aW9uIHdyaXRlX3ppcF90eXBlKHdiLCBvcHRzKSB7XG5cdHZhciBvID0gb3B0c3x8e307XG5cdHZhciB6ID0gd3JpdGVfemlwKHdiLCBvKTtcblx0dmFyIG9vcHRzID0ge307XG5cdGlmKG8uY29tcHJlc3Npb24pIG9vcHRzLmNvbXByZXNzaW9uID0gJ0RFRkxBVEUnO1xuXHRzd2l0Y2goby50eXBlKSB7XG5cdFx0Y2FzZSBcImJhc2U2NFwiOiBvb3B0cy50eXBlID0gXCJiYXNlNjRcIjsgYnJlYWs7XG5cdFx0Y2FzZSBcImJpbmFyeVwiOiBvb3B0cy50eXBlID0gXCJzdHJpbmdcIjsgYnJlYWs7XG5cdFx0Y2FzZSBcInN0cmluZ1wiOiB0aHJvdyBuZXcgRXJyb3IoXCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnXCIgKyBvLmJvb2tUeXBlICsgXCInIGZpbGVzXCIpO1xuXHRcdGNhc2UgXCJidWZmZXJcIjpcblx0XHRjYXNlIFwiZmlsZVwiOiBvb3B0cy50eXBlID0gaGFzX2J1ZiA/IFwibm9kZWJ1ZmZlclwiIDogXCJzdHJpbmdcIjsgYnJlYWs7XG5cdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIHR5cGUgXCIgKyBvLnR5cGUpO1xuXHR9XG5cdGlmKG8udHlwZSA9PT0gXCJmaWxlXCIpIHJldHVybiB3cml0ZV9kbChvLmZpbGUsIHouZ2VuZXJhdGUob29wdHMpKTtcblx0dmFyIG91dCA9IHouZ2VuZXJhdGUob29wdHMpO1xuXHQvLyAkRmxvd0lnbm9yZVxuXHRyZXR1cm4gby50eXBlID09IFwic3RyaW5nXCIgPyB1dGY4cmVhZChvdXQpIDogb3V0O1xufVxuXG5mdW5jdGlvbiB3cml0ZV9jZmJfdHlwZSh3Yiwgb3B0cykge1xuXHR2YXIgbyA9IG9wdHN8fHt9O1xuXHR2YXIgY2ZiID0gd3JpdGVfeGxzY2ZiKHdiLCBvKTtcblx0c3dpdGNoKG8udHlwZSkge1xuXHRcdGNhc2UgXCJiYXNlNjRcIjogY2FzZSBcImJpbmFyeVwiOiBicmVhaztcblx0XHRjYXNlIFwiYnVmZmVyXCI6IGNhc2UgXCJhcnJheVwiOiBvLnR5cGUgPSBcIlwiOyBicmVhaztcblx0XHRjYXNlIFwiZmlsZVwiOiByZXR1cm4gd3JpdGVfZGwoby5maWxlLCBDRkIud3JpdGUoY2ZiLCB7dHlwZTpoYXNfYnVmID8gJ2J1ZmZlcicgOiBcIlwifSkpO1xuXHRcdGNhc2UgXCJzdHJpbmdcIjogdGhyb3cgbmV3IEVycm9yKFwiJ3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxpZCBmb3IgJ1wiICsgby5ib29rVHlwZSArIFwiJyBmaWxlc1wiKTtcblx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgdHlwZSBcIiArIG8udHlwZSk7XG5cdH1cblx0cmV0dXJuIENGQi53cml0ZShjZmIsIG8pO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9zdHJpbmdfdHlwZShvdXQsIG9wdHMsIGJvbSkge1xuXHRpZighYm9tKSBib20gPSBcIlwiO1xuXHR2YXIgbyA9IGJvbSArIG91dDtcblx0c3dpdGNoKG9wdHMudHlwZSkge1xuXHRcdGNhc2UgXCJiYXNlNjRcIjogcmV0dXJuIEJhc2U2NC5lbmNvZGUodXRmOHdyaXRlKG8pKTtcblx0XHRjYXNlIFwiYmluYXJ5XCI6IHJldHVybiB1dGY4d3JpdGUobyk7XG5cdFx0Y2FzZSBcInN0cmluZ1wiOiByZXR1cm4gb3V0O1xuXHRcdGNhc2UgXCJmaWxlXCI6IHJldHVybiB3cml0ZV9kbChvcHRzLmZpbGUsIG8sICd1dGY4Jyk7XG5cdFx0Y2FzZSBcImJ1ZmZlclwiOiB7XG5cdFx0XHRpZihoYXNfYnVmKSByZXR1cm4gbmV3IEJ1ZmZlcihvLCAndXRmOCcpO1xuXHRcdFx0ZWxzZSByZXR1cm4gd3JpdGVfc3RyaW5nX3R5cGUobywge3R5cGU6J2JpbmFyeSd9KS5zcGxpdChcIlwiKS5tYXAoZnVuY3Rpb24oYykgeyByZXR1cm4gYy5jaGFyQ29kZUF0KDApOyB9KTtcblx0XHR9XG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIHR5cGUgXCIgKyBvcHRzLnR5cGUpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9zdHh0X3R5cGUob3V0LCBvcHRzKSB7XG5cdHN3aXRjaChvcHRzLnR5cGUpIHtcblx0XHRjYXNlIFwiYmFzZTY0XCI6IHJldHVybiBCYXNlNjQuZW5jb2RlKG91dCk7XG5cdFx0Y2FzZSBcImJpbmFyeVwiOiByZXR1cm4gb3V0O1xuXHRcdGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIG91dDsgLyogb3ZlcnJpZGUgaW4gc2hlZXRfdG9fdHh0ICovXG5cdFx0Y2FzZSBcImZpbGVcIjogcmV0dXJuIHdyaXRlX2RsKG9wdHMuZmlsZSwgb3V0LCAnYmluYXJ5Jyk7XG5cdFx0Y2FzZSBcImJ1ZmZlclwiOiB7XG5cdFx0XHRpZihoYXNfYnVmKSByZXR1cm4gbmV3IEJ1ZmZlcihvdXQsICdiaW5hcnknKTtcblx0XHRcdGVsc2UgcmV0dXJuIG91dC5zcGxpdChcIlwiKS5tYXAoZnVuY3Rpb24oYykgeyByZXR1cm4gYy5jaGFyQ29kZUF0KDApOyB9KTtcblx0XHR9XG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIHR5cGUgXCIgKyBvcHRzLnR5cGUpO1xufVxuXG4vKiBUT0RPOiB0ZXN0IGNvbnNpc3RlbmN5ICovXG5mdW5jdGlvbiB3cml0ZV9iaW5hcnlfdHlwZShvdXQsIG9wdHMpIHtcblx0c3dpdGNoKG9wdHMudHlwZSkge1xuXHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRjYXNlIFwiYmFzZTY0XCI6XG5cdFx0Y2FzZSBcImJpbmFyeVwiOlxuXHRcdFx0dmFyIGJzdHIgPSBcIlwiO1xuXHRcdFx0Ly8gJEZsb3dJZ25vcmVcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBvdXQubGVuZ3RoOyArK2kpIGJzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShvdXRbaV0pO1xuXHRcdFx0cmV0dXJuIG9wdHMudHlwZSA9PSAnYmFzZTY0JyA/IEJhc2U2NC5lbmNvZGUoYnN0cikgOiBvcHRzLnR5cGUgPT0gJ3N0cmluZycgPyB1dGY4cmVhZChic3RyKSA6IGJzdHI7XG5cdFx0Y2FzZSBcImZpbGVcIjogcmV0dXJuIHdyaXRlX2RsKG9wdHMuZmlsZSwgb3V0KTtcblx0XHRjYXNlIFwiYnVmZmVyXCI6IHJldHVybiBvdXQ7XG5cdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIHR5cGUgXCIgKyBvcHRzLnR5cGUpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3luYyh3Yiwgb3B0cykge1xuXHRjaGVja193Yih3Yik7XG5cdHZhciBvID0gb3B0c3x8e307XG5cdGlmKG8udHlwZSA9PSBcImFycmF5XCIpIHsgby50eXBlID0gXCJiaW5hcnlcIjsgdmFyIG91dCA9ICh3cml0ZVN5bmMod2IsIG8pKTsgby50eXBlID0gXCJhcnJheVwiOyByZXR1cm4gczJhYihvdXQpOyB9XG5cdHN3aXRjaChvLmJvb2tUeXBlIHx8ICd4bHNiJykge1xuXHRcdGNhc2UgJ3htbCc6XG5cdFx0Y2FzZSAneGxtbCc6IHJldHVybiB3cml0ZV9zdHJpbmdfdHlwZSh3cml0ZV94bG1sKHdiLCBvKSwgbyk7XG5cdFx0Y2FzZSAnc2xrJzpcblx0XHRjYXNlICdzeWxrJzogcmV0dXJuIHdyaXRlX3N0cmluZ190eXBlKHdyaXRlX3Nsa19zdHIod2IsIG8pLCBvKTtcblx0XHRjYXNlICdodG1sJzogcmV0dXJuIHdyaXRlX3N0cmluZ190eXBlKHdyaXRlX2h0bV9zdHIod2IsIG8pLCBvKTtcblx0XHRjYXNlICd0eHQnOiByZXR1cm4gd3JpdGVfc3R4dF90eXBlKHdyaXRlX3R4dF9zdHIod2IsIG8pLCBvKTtcblx0XHRjYXNlICdjc3YnOiByZXR1cm4gd3JpdGVfc3RyaW5nX3R5cGUod3JpdGVfY3N2X3N0cih3YiwgbyksIG8sIFwiXFx1ZmVmZlwiKTtcblx0XHRjYXNlICdkaWYnOiByZXR1cm4gd3JpdGVfc3RyaW5nX3R5cGUod3JpdGVfZGlmX3N0cih3YiwgbyksIG8pO1xuXHRcdC8vICRGbG93SWdub3JlXG5cdFx0Y2FzZSAnZGJmJzogcmV0dXJuIHdyaXRlX2JpbmFyeV90eXBlKHdyaXRlX2RiZl9idWYod2IsIG8pLCBvKTtcblx0XHRjYXNlICdwcm4nOiByZXR1cm4gd3JpdGVfc3RyaW5nX3R5cGUod3JpdGVfcHJuX3N0cih3YiwgbyksIG8pO1xuXHRcdGNhc2UgJ3J0Zic6IHJldHVybiB3cml0ZV9zdHJpbmdfdHlwZSh3cml0ZV9ydGZfc3RyKHdiLCBvKSwgbyk7XG5cdFx0Y2FzZSAnZXRoJzogcmV0dXJuIHdyaXRlX3N0cmluZ190eXBlKHdyaXRlX2V0aF9zdHIod2IsIG8pLCBvKTtcblx0XHRjYXNlICdmb2RzJzogcmV0dXJuIHdyaXRlX3N0cmluZ190eXBlKHdyaXRlX29kcyh3YiwgbyksIG8pO1xuXHRcdGNhc2UgJ2JpZmYyJzogaWYoIW8uYmlmZikgby5iaWZmID0gMjsgLyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdGNhc2UgJ2JpZmYzJzogaWYoIW8uYmlmZikgby5iaWZmID0gMzsgLyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdGNhc2UgJ2JpZmY0JzogaWYoIW8uYmlmZikgby5iaWZmID0gNDsgcmV0dXJuIHdyaXRlX2JpbmFyeV90eXBlKHdyaXRlX2JpZmZfYnVmKHdiLCBvKSwgbyk7XG5cdFx0Y2FzZSAnYmlmZjUnOiBpZighby5iaWZmKSBvLmJpZmYgPSA1OyAvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0Y2FzZSAnYmlmZjgnOlxuXHRcdGNhc2UgJ3hsYSc6XG5cdFx0Y2FzZSAneGxzJzogaWYoIW8uYmlmZikgby5iaWZmID0gODsgcmV0dXJuIHdyaXRlX2NmYl90eXBlKHdiLCBvKTtcblx0XHRjYXNlICd4bHN4Jzpcblx0XHRjYXNlICd4bHNtJzpcblx0XHRjYXNlICd4bGFtJzpcblx0XHRjYXNlICd4bHNiJzpcblx0XHRjYXNlICdvZHMnOiByZXR1cm4gd3JpdGVfemlwX3R5cGUod2IsIG8pO1xuXHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciAoXCJVbnJlY29nbml6ZWQgYm9va1R5cGUgfFwiICsgby5ib29rVHlwZSArIFwifFwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZXNvbHZlX2Jvb2tfdHlwZShvKSB7XG5cdGlmKG8uYm9va1R5cGUpIHJldHVybjtcblx0dmFyIF9CVCA9IHtcblx0XHRcInhsc1wiOiBcImJpZmY4XCIsXG5cdFx0XCJodG1cIjogXCJodG1sXCIsXG5cdFx0XCJzbGtcIjogXCJzeWxrXCIsXG5cdFx0XCJzb2NpYWxjYWxjXCI6IFwiZXRoXCIsXG5cdFx0XCJTaDMzdEpTXCI6IFwiV1RGXCJcblx0fTtcblx0dmFyIGV4dCA9IG8uZmlsZS5zbGljZShvLmZpbGUubGFzdEluZGV4T2YoXCIuXCIpKS50b0xvd2VyQ2FzZSgpO1xuXHRpZihleHQubWF0Y2goL15cXC5bYS16XSskLykpIG8uYm9va1R5cGUgPSBleHQuc2xpY2UoMSk7XG5cdG8uYm9va1R5cGUgPSBfQlRbby5ib29rVHlwZV0gfHwgby5ib29rVHlwZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGaWxlU3luYyh3YiwgZmlsZW5hbWUsIG9wdHMpIHtcblx0dmFyIG8gPSBvcHRzfHx7fTsgby50eXBlID0gJ2ZpbGUnO1xuXHRvLmZpbGUgPSBmaWxlbmFtZTtcblx0cmVzb2x2ZV9ib29rX3R5cGUobyk7XG5cdHJldHVybiB3cml0ZVN5bmMod2IsIG8pO1xufVxuXG5mdW5jdGlvbiB3cml0ZUZpbGVBc3luYyhmaWxlbmFtZSwgd2IsIG9wdHMsIGNiKSB7XG5cdHZhciBvID0gb3B0c3x8e307IG8udHlwZSA9ICdmaWxlJztcblx0by5maWxlID0gZmlsZW5hbWU7XG5cdHJlc29sdmVfYm9va190eXBlKG8pO1xuXHRvLnR5cGUgPSAnYnVmZmVyJztcblx0dmFyIF9jYiA9IGNiOyBpZighKF9jYiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkgX2NiID0gKG9wdHMpO1xuXHRyZXR1cm4gX2ZzLndyaXRlRmlsZShmaWxlbmFtZSwgd3JpdGVTeW5jKHdiLCBvKSwgX2NiKTtcbn1cbmZ1bmN0aW9uIHNoZWV0X3RvX2pzb24oc2hlZXQsIG9wdHMpIHtcblx0aWYoc2hlZXQgPT0gbnVsbCB8fCBzaGVldFtcIiFyZWZcIl0gPT0gbnVsbCkgcmV0dXJuIFtdO1xuXHR2YXIgdmFsID0ge3Q6J24nLHY6MH0sIGhlYWRlciA9IDAsIG9mZnNldCA9IDEsIGhkciA9IFtdLCBpc2VtcHR5ID0gdHJ1ZSwgdj0wLCB2dj1cIlwiO1xuXHR2YXIgciA9IHtzOntyOjAsYzowfSxlOntyOjAsYzowfX07XG5cdHZhciBvID0gb3B0cyB8fCB7fTtcblx0dmFyIHJhdyA9IG8ucmF3O1xuXHR2YXIgZGVmdmFsID0gby5kZWZ2YWw7XG5cdHZhciByYW5nZSA9IG8ucmFuZ2UgIT0gbnVsbCA/IG8ucmFuZ2UgOiBzaGVldFtcIiFyZWZcIl07XG5cdGlmKG8uaGVhZGVyID09PSAxKSBoZWFkZXIgPSAxO1xuXHRlbHNlIGlmKG8uaGVhZGVyID09PSBcIkFcIikgaGVhZGVyID0gMjtcblx0ZWxzZSBpZihBcnJheS5pc0FycmF5KG8uaGVhZGVyKSkgaGVhZGVyID0gMztcblx0c3dpdGNoKHR5cGVvZiByYW5nZSkge1xuXHRcdGNhc2UgJ3N0cmluZyc6IHIgPSBzYWZlX2RlY29kZV9yYW5nZShyYW5nZSk7IGJyZWFrO1xuXHRcdGNhc2UgJ251bWJlcic6IHIgPSBzYWZlX2RlY29kZV9yYW5nZShzaGVldFtcIiFyZWZcIl0pOyByLnMuciA9IHJhbmdlOyBicmVhaztcblx0XHRkZWZhdWx0OiByID0gcmFuZ2U7XG5cdH1cblx0aWYoaGVhZGVyID4gMCkgb2Zmc2V0ID0gMDtcblx0dmFyIHJyID0gZW5jb2RlX3JvdyhyLnMucik7XG5cdHZhciBjb2xzID0gW107XG5cdHZhciBvdXQgPSBbXTtcblx0dmFyIG91dGkgPSAwLCBjb3VudGVyID0gMDtcblx0dmFyIGRlbnNlID0gQXJyYXkuaXNBcnJheShzaGVldCk7XG5cdHZhciBSID0gci5zLnIsIEMgPSAwLCBDQyA9IDA7XG5cdGlmKGRlbnNlICYmICFzaGVldFtSXSkgc2hlZXRbUl0gPSBbXTtcblx0Zm9yKEMgPSByLnMuYzsgQyA8PSByLmUuYzsgKytDKSB7XG5cdFx0Y29sc1tDXSA9IGVuY29kZV9jb2woQyk7XG5cdFx0dmFsID0gZGVuc2UgPyBzaGVldFtSXVtDXSA6IHNoZWV0W2NvbHNbQ10gKyBycl07XG5cdFx0c3dpdGNoKGhlYWRlcikge1xuXHRcdFx0Y2FzZSAxOiBoZHJbQ10gPSBDIC0gci5zLmM7IGJyZWFrO1xuXHRcdFx0Y2FzZSAyOiBoZHJbQ10gPSBjb2xzW0NdOyBicmVhaztcblx0XHRcdGNhc2UgMzogaGRyW0NdID0gby5oZWFkZXJbQyAtIHIucy5jXTsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZih2YWwgPT0gbnVsbCkgdmFsID0ge3c6IFwiX19FTVBUWVwiLCB0OiBcInNcIn07XG5cdFx0XHRcdHZ2ID0gdiA9IGZvcm1hdF9jZWxsKHZhbCwgbnVsbCwgbyk7XG5cdFx0XHRcdGNvdW50ZXIgPSAwO1xuXHRcdFx0XHRmb3IoQ0MgPSAwOyBDQyA8IGhkci5sZW5ndGg7ICsrQ0MpIGlmKGhkcltDQ10gPT0gdnYpIHZ2ID0gdiArIFwiX1wiICsgKCsrY291bnRlcik7XG5cdFx0XHRcdGhkcltDXSA9IHZ2O1xuXHRcdH1cblx0fVxuXHR2YXIgcm93ID0gKGhlYWRlciA9PT0gMSkgPyBbXSA6IHt9O1xuXHRmb3IgKFIgPSByLnMuciArIG9mZnNldDsgUiA8PSByLmUucjsgKytSKSB7XG5cdFx0cnIgPSBlbmNvZGVfcm93KFIpO1xuXHRcdGlzZW1wdHkgPSB0cnVlO1xuXHRcdGlmKGhlYWRlciA9PT0gMSkgcm93ID0gW107XG5cdFx0ZWxzZSB7XG5cdFx0XHRyb3cgPSB7fTtcblx0XHRcdGlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgdHJ5IHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvdywgJ19fcm93TnVtX18nLCB7dmFsdWU6UiwgZW51bWVyYWJsZTpmYWxzZX0pOyB9IGNhdGNoKGUpIHsgcm93Ll9fcm93TnVtX18gPSBSOyB9XG5cdFx0XHRlbHNlIHJvdy5fX3Jvd051bV9fID0gUjtcblx0XHR9XG5cdFx0aWYoIWRlbnNlIHx8IHNoZWV0W1JdKSBmb3IgKEMgPSByLnMuYzsgQyA8PSByLmUuYzsgKytDKSB7XG5cdFx0XHR2YWwgPSBkZW5zZSA/IHNoZWV0W1JdW0NdIDogc2hlZXRbY29sc1tDXSArIHJyXTtcblx0XHRcdGlmKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbC50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYoZGVmdmFsID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXHRcdFx0XHRpZihoZHJbQ10gIT0gbnVsbCkgeyByb3dbaGRyW0NdXSA9IGRlZnZhbDsgaXNlbXB0eSA9IGZhbHNlOyB9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0diA9IHZhbC52O1xuXHRcdFx0c3dpdGNoKHZhbC50KXtcblx0XHRcdFx0Y2FzZSAneic6IGlmKHYgPT0gbnVsbCkgYnJlYWs7IGNvbnRpbnVlO1xuXHRcdFx0XHRjYXNlICdlJzogY29udGludWU7XG5cdFx0XHRcdGNhc2UgJ3MnOiBjYXNlICdkJzogY2FzZSAnYic6IGNhc2UgJ24nOiBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCd1bnJlY29nbml6ZWQgdHlwZSAnICsgdmFsLnQpO1xuXHRcdFx0fVxuXHRcdFx0aWYoaGRyW0NdICE9IG51bGwpIHtcblx0XHRcdFx0aWYodiA9PSBudWxsKSB7XG5cdFx0XHRcdFx0aWYoZGVmdmFsICE9PSB1bmRlZmluZWQpIHJvd1toZHJbQ11dID0gZGVmdmFsO1xuXHRcdFx0XHRcdGVsc2UgaWYocmF3ICYmIHYgPT09IG51bGwpIHJvd1toZHJbQ11dID0gbnVsbDtcblx0XHRcdFx0XHRlbHNlIGNvbnRpbnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJvd1toZHJbQ11dID0gcmF3ID8gdiA6IGZvcm1hdF9jZWxsKHZhbCx2LG8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlzZW1wdHkgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYoKGlzZW1wdHkgPT09IGZhbHNlKSB8fCAoaGVhZGVyID09PSAxID8gby5ibGFua3Jvd3MgIT09IGZhbHNlIDogISFvLmJsYW5rcm93cykpIG91dFtvdXRpKytdID0gcm93O1xuXHR9XG5cdG91dC5sZW5ndGggPSBvdXRpO1xuXHRyZXR1cm4gb3V0O1xufVxuXG52YXIgcXJlZyA9IC9cIi9nO1xuZnVuY3Rpb24gbWFrZV9jc3Zfcm93KHNoZWV0LCByLCBSLCBjb2xzLCBmcywgcnMsIEZTLCBvKSB7XG5cdHZhciBpc2VtcHR5ID0gdHJ1ZTtcblx0dmFyIHJvdyA9IFtdLCB0eHQgPSBcIlwiLCByciA9IGVuY29kZV9yb3coUik7XG5cdGZvcih2YXIgQyA9IHIucy5jOyBDIDw9IHIuZS5jOyArK0MpIHtcblx0XHRpZiAoIWNvbHNbQ10pIGNvbnRpbnVlO1xuXHRcdHZhciB2YWwgPSBvLmRlbnNlID8gKHNoZWV0W1JdfHxbXSlbQ106IHNoZWV0W2NvbHNbQ10gKyBycl07XG5cdFx0aWYodmFsID09IG51bGwpIHR4dCA9IFwiXCI7XG5cdFx0ZWxzZSBpZih2YWwudiAhPSBudWxsKSB7XG5cdFx0XHRpc2VtcHR5ID0gZmFsc2U7XG5cdFx0XHR0eHQgPSAnJytmb3JtYXRfY2VsbCh2YWwsIG51bGwsIG8pO1xuXHRcdFx0Zm9yKHZhciBpID0gMCwgY2MgPSAwOyBpICE9PSB0eHQubGVuZ3RoOyArK2kpIGlmKChjYyA9IHR4dC5jaGFyQ29kZUF0KGkpKSA9PT0gZnMgfHwgY2MgPT09IHJzIHx8IGNjID09PSAzNCkge3R4dCA9IFwiXFxcIlwiICsgdHh0LnJlcGxhY2UocXJlZywgJ1wiXCInKSArIFwiXFxcIlwiOyBicmVhazsgfVxuXHRcdFx0aWYodHh0ID09IFwiSURcIikgdHh0ID0gJ1wiSURcIic7XG5cdFx0fSBlbHNlIGlmKHZhbC5mICE9IG51bGwgJiYgIXZhbC5GKSB7XG5cdFx0XHRpc2VtcHR5ID0gZmFsc2U7XG5cdFx0XHR0eHQgPSAnPScgKyB2YWwuZjsgaWYodHh0LmluZGV4T2YoXCIsXCIpID49IDApIHR4dCA9ICdcIicgKyB0eHQucmVwbGFjZShxcmVnLCAnXCJcIicpICsgJ1wiJztcblx0XHR9IGVsc2UgdHh0ID0gXCJcIjtcblx0XHQvKiBOT1RFOiBFeGNlbCBDU1YgZG9lcyBub3Qgc3VwcG9ydCBhcnJheSBmb3JtdWxhZSAqL1xuXHRcdHJvdy5wdXNoKHR4dCk7XG5cdH1cblx0aWYoby5ibGFua3Jvd3MgPT09IGZhbHNlICYmIGlzZW1wdHkpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gcm93LmpvaW4oRlMpO1xufVxuXG5mdW5jdGlvbiBzaGVldF90b19jc3Yoc2hlZXQsIG9wdHMpIHtcblx0dmFyIG91dCA9IFtdO1xuXHR2YXIgbyA9IG9wdHMgPT0gbnVsbCA/IHt9IDogb3B0cztcblx0aWYoc2hlZXQgPT0gbnVsbCB8fCBzaGVldFtcIiFyZWZcIl0gPT0gbnVsbCkgcmV0dXJuIFwiXCI7XG5cdHZhciByID0gc2FmZV9kZWNvZGVfcmFuZ2Uoc2hlZXRbXCIhcmVmXCJdKTtcblx0dmFyIEZTID0gby5GUyAhPT0gdW5kZWZpbmVkID8gby5GUyA6IFwiLFwiLCBmcyA9IEZTLmNoYXJDb2RlQXQoMCk7XG5cdHZhciBSUyA9IG8uUlMgIT09IHVuZGVmaW5lZCA/IG8uUlMgOiBcIlxcblwiLCBycyA9IFJTLmNoYXJDb2RlQXQoMCk7XG5cdHZhciBlbmRyZWdleCA9IG5ldyBSZWdFeHAoKEZTPT1cInxcIiA/IFwiXFxcXHxcIiA6IEZTKStcIiskXCIpO1xuXHR2YXIgcm93ID0gXCJcIiwgY29scyA9IFtdO1xuXHRvLmRlbnNlID0gQXJyYXkuaXNBcnJheShzaGVldCk7XG5cdHZhciBjb2xpbmZvID0gby5za2lwSGlkZGVuICYmIHNoZWV0W1wiIWNvbHNcIl0gfHwgW107XG5cdHZhciByb3dpbmZvID0gby5za2lwSGlkZGVuICYmIHNoZWV0W1wiIXJvd3NcIl0gfHwgW107XG5cdGZvcih2YXIgQyA9IHIucy5jOyBDIDw9IHIuZS5jOyArK0MpIGlmICghKChjb2xpbmZvW0NdfHx7fSkuaGlkZGVuKSkgY29sc1tDXSA9IGVuY29kZV9jb2woQyk7XG5cdGZvcih2YXIgUiA9IHIucy5yOyBSIDw9IHIuZS5yOyArK1IpIHtcblx0XHRpZiAoKHJvd2luZm9bUl18fHt9KS5oaWRkZW4pIGNvbnRpbnVlO1xuXHRcdHJvdyA9IG1ha2VfY3N2X3JvdyhzaGVldCwgciwgUiwgY29scywgZnMsIHJzLCBGUywgbyk7XG5cdFx0aWYocm93ID09IG51bGwpIHsgY29udGludWU7IH1cblx0XHRpZihvLnN0cmlwKSByb3cgPSByb3cucmVwbGFjZShlbmRyZWdleCxcIlwiKTtcblx0XHRvdXQucHVzaChyb3cgKyBSUyk7XG5cdH1cblx0ZGVsZXRlIG8uZGVuc2U7XG5cdHJldHVybiBvdXQuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gc2hlZXRfdG9fdHh0KHNoZWV0LCBvcHRzKSB7XG5cdGlmKCFvcHRzKSBvcHRzID0ge307IG9wdHMuRlMgPSBcIlxcdFwiOyBvcHRzLlJTID0gXCJcXG5cIjtcblx0dmFyIHMgPSBzaGVldF90b19jc3Yoc2hlZXQsIG9wdHMpO1xuXHRpZih0eXBlb2YgY3B0YWJsZSA9PSAndW5kZWZpbmVkJyB8fCBvcHRzLnR5cGUgPT0gJ3N0cmluZycpIHJldHVybiBzO1xuXHR2YXIgbyA9IGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsIHMsICdzdHInKTtcblx0cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KSArIFN0cmluZy5mcm9tQ2hhckNvZGUoMjU0KSArIG87XG59XG5cbmZ1bmN0aW9uIHNoZWV0X3RvX2Zvcm11bGFlKHNoZWV0KSB7XG5cdHZhciB5ID0gXCJcIiwgeCwgdmFsPVwiXCI7XG5cdGlmKHNoZWV0ID09IG51bGwgfHwgc2hlZXRbXCIhcmVmXCJdID09IG51bGwpIHJldHVybiBbXTtcblx0dmFyIHIgPSBzYWZlX2RlY29kZV9yYW5nZShzaGVldFsnIXJlZiddKSwgcnIgPSBcIlwiLCBjb2xzID0gW10sIEM7XG5cdHZhciBjbWRzID0gW107XG5cdHZhciBkZW5zZSA9IEFycmF5LmlzQXJyYXkoc2hlZXQpO1xuXHRmb3IoQyA9IHIucy5jOyBDIDw9IHIuZS5jOyArK0MpIGNvbHNbQ10gPSBlbmNvZGVfY29sKEMpO1xuXHRmb3IodmFyIFIgPSByLnMucjsgUiA8PSByLmUucjsgKytSKSB7XG5cdFx0cnIgPSBlbmNvZGVfcm93KFIpO1xuXHRcdGZvcihDID0gci5zLmM7IEMgPD0gci5lLmM7ICsrQykge1xuXHRcdFx0eSA9IGNvbHNbQ10gKyBycjtcblx0XHRcdHggPSBkZW5zZSA/IChzaGVldFtSXXx8W10pW0NdIDogc2hlZXRbeV07XG5cdFx0XHR2YWwgPSBcIlwiO1xuXHRcdFx0aWYoeCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblx0XHRcdGVsc2UgaWYoeC5GICE9IG51bGwpIHtcblx0XHRcdFx0eSA9IHguRjtcblx0XHRcdFx0aWYoIXguZikgY29udGludWU7XG5cdFx0XHRcdHZhbCA9IHguZjtcblx0XHRcdFx0aWYoeS5pbmRleE9mKFwiOlwiKSA9PSAtMSkgeSA9IHkgKyBcIjpcIiArIHk7XG5cdFx0XHR9XG5cdFx0XHRpZih4LmYgIT0gbnVsbCkgdmFsID0geC5mO1xuXHRcdFx0ZWxzZSBpZih4LnQgPT0gJ3onKSBjb250aW51ZTtcblx0XHRcdGVsc2UgaWYoeC50ID09ICduJyAmJiB4LnYgIT0gbnVsbCkgdmFsID0gXCJcIiArIHgudjtcblx0XHRcdGVsc2UgaWYoeC50ID09ICdiJykgdmFsID0geC52ID8gXCJUUlVFXCIgOiBcIkZBTFNFXCI7XG5cdFx0XHRlbHNlIGlmKHgudyAhPT0gdW5kZWZpbmVkKSB2YWwgPSBcIidcIiArIHgudztcblx0XHRcdGVsc2UgaWYoeC52ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXHRcdFx0ZWxzZSBpZih4LnQgPT0gJ3MnKSB2YWwgPSBcIidcIiArIHgudjtcblx0XHRcdGVsc2UgdmFsID0gXCJcIit4LnY7XG5cdFx0XHRjbWRzW2NtZHMubGVuZ3RoXSA9IHkgKyBcIj1cIiArIHZhbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNtZHM7XG59XG5cbmZ1bmN0aW9uIHNoZWV0X2FkZF9qc29uKF93cywganMsIG9wdHMpIHtcblx0dmFyIG8gPSBvcHRzIHx8IHt9O1xuXHR2YXIgb2Zmc2V0ID0gKyFvLnNraXBIZWFkZXI7XG5cdHZhciB3cyA9IF93cyB8fCAoe30pO1xuXHR2YXIgX1IgPSAwLCBfQyA9IDA7XG5cdGlmKHdzICYmIG8ub3JpZ2luICE9IG51bGwpIHtcblx0XHRpZih0eXBlb2Ygby5vcmlnaW4gPT0gJ251bWJlcicpIF9SID0gby5vcmlnaW47XG5cdFx0ZWxzZSB7XG5cdFx0XHR2YXIgX29yaWdpbiA9IHR5cGVvZiBvLm9yaWdpbiA9PSBcInN0cmluZ1wiID8gZGVjb2RlX2NlbGwoby5vcmlnaW4pIDogby5vcmlnaW47XG5cdFx0XHRfUiA9IF9vcmlnaW4ucjsgX0MgPSBfb3JpZ2luLmM7XG5cdFx0fVxuXHR9XG5cdHZhciBjZWxsO1xuXHR2YXIgcmFuZ2UgPSAoe3M6IHtjOjAsIHI6MH0sIGU6IHtjOl9DLCByOl9SICsganMubGVuZ3RoIC0gMSArIG9mZnNldH19KTtcblx0aWYod3NbJyFyZWYnXSkge1xuXHRcdHZhciBfcmFuZ2UgPSBzYWZlX2RlY29kZV9yYW5nZSh3c1snIXJlZiddKTtcblx0XHRyYW5nZS5lLmMgPSBNYXRoLm1heChyYW5nZS5lLmMsIF9yYW5nZS5lLmMpO1xuXHRcdHJhbmdlLmUuciA9IE1hdGgubWF4KHJhbmdlLmUuciwgX3JhbmdlLmUucik7XG5cdFx0aWYoX1IgPT0gLTEpIHsgX1IgPSByYW5nZS5lLnIgKyAxOyByYW5nZS5lLnIgPSBfUiArIGpzLmxlbmd0aCAtIDEgKyBvZmZzZXQ7IH1cblx0fVxuXHR2YXIgaGRyID0gby5oZWFkZXIgfHwgW10sIEMgPSAwO1xuXG5cdGpzLmZvckVhY2goZnVuY3Rpb24gKEpTLCBSKSB7XG5cdFx0a2V5cyhKUykuZmlsdGVyKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIEpTLmhhc093blByb3BlcnR5KHgpOyB9KS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcblx0XHRcdGlmKChDPWhkci5pbmRleE9mKGspKSA9PSAtMSkgaGRyW0M9aGRyLmxlbmd0aF0gPSBrO1xuXHRcdFx0dmFyIHYgPSBKU1trXTtcblx0XHRcdHZhciB0ID0gJ3onO1xuXHRcdFx0dmFyIHogPSBcIlwiO1xuXHRcdFx0aWYodHlwZW9mIHYgPT0gJ251bWJlcicpIHQgPSAnbic7XG5cdFx0XHRlbHNlIGlmKHR5cGVvZiB2ID09ICdib29sZWFuJykgdCA9ICdiJztcblx0XHRcdGVsc2UgaWYodHlwZW9mIHYgPT0gJ3N0cmluZycpIHQgPSAncyc7XG5cdFx0XHRlbHNlIGlmKHYgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdHQgPSAnZCc7XG5cdFx0XHRcdGlmKCFvLmNlbGxEYXRlcykgeyB0ID0gJ24nOyB2ID0gZGF0ZW51bSh2KTsgfVxuXHRcdFx0XHR6ID0gby5kYXRlTkYgfHwgU1NGLl90YWJsZVsxNF07XG5cdFx0XHR9XG5cdFx0XHR3c1tlbmNvZGVfY2VsbCh7YzpfQyArIEMscjpfUiArIFIgKyBvZmZzZXR9KV0gPSBjZWxsID0gKHt0OnQsIHY6dn0pO1xuXHRcdFx0aWYoeikgY2VsbC56ID0gejtcblx0XHR9KTtcblx0fSk7XG5cdHJhbmdlLmUuYyA9IE1hdGgubWF4KHJhbmdlLmUuYywgX0MgKyBoZHIubGVuZ3RoIC0gMSk7XG5cdHZhciBfX1IgPSBlbmNvZGVfcm93KF9SKTtcblx0aWYob2Zmc2V0KSBmb3IoQyA9IDA7IEMgPCBoZHIubGVuZ3RoOyArK0MpIHdzW2VuY29kZV9jb2woQyArIF9DKSArIF9fUl0gPSB7dDoncycsIHY6aGRyW0NdfTtcblx0d3NbJyFyZWYnXSA9IGVuY29kZV9yYW5nZShyYW5nZSk7XG5cdHJldHVybiB3cztcbn1cbmZ1bmN0aW9uIGpzb25fdG9fc2hlZXQoanMsIG9wdHMpIHsgcmV0dXJuIHNoZWV0X2FkZF9qc29uKG51bGwsIGpzLCBvcHRzKTsgfVxuXG52YXIgdXRpbHMgPSB7XG5cdGVuY29kZV9jb2w6IGVuY29kZV9jb2wsXG5cdGVuY29kZV9yb3c6IGVuY29kZV9yb3csXG5cdGVuY29kZV9jZWxsOiBlbmNvZGVfY2VsbCxcblx0ZW5jb2RlX3JhbmdlOiBlbmNvZGVfcmFuZ2UsXG5cdGRlY29kZV9jb2w6IGRlY29kZV9jb2wsXG5cdGRlY29kZV9yb3c6IGRlY29kZV9yb3csXG5cdHNwbGl0X2NlbGw6IHNwbGl0X2NlbGwsXG5cdGRlY29kZV9jZWxsOiBkZWNvZGVfY2VsbCxcblx0ZGVjb2RlX3JhbmdlOiBkZWNvZGVfcmFuZ2UsXG5cdGZvcm1hdF9jZWxsOiBmb3JtYXRfY2VsbCxcblx0Z2V0X2Zvcm11bGFlOiBzaGVldF90b19mb3JtdWxhZSxcblx0bWFrZV9jc3Y6IHNoZWV0X3RvX2Nzdixcblx0bWFrZV9qc29uOiBzaGVldF90b19qc29uLFxuXHRtYWtlX2Zvcm11bGFlOiBzaGVldF90b19mb3JtdWxhZSxcblx0c2hlZXRfYWRkX2FvYTogc2hlZXRfYWRkX2FvYSxcblx0c2hlZXRfYWRkX2pzb246IHNoZWV0X2FkZF9qc29uLFxuXHRhb2FfdG9fc2hlZXQ6IGFvYV90b19zaGVldCxcblx0anNvbl90b19zaGVldDoganNvbl90b19zaGVldCxcblx0dGFibGVfdG9fc2hlZXQ6IHBhcnNlX2RvbV90YWJsZSxcblx0dGFibGVfdG9fYm9vazogdGFibGVfdG9fYm9vayxcblx0c2hlZXRfdG9fY3N2OiBzaGVldF90b19jc3YsXG5cdHNoZWV0X3RvX3R4dDogc2hlZXRfdG9fdHh0LFxuXHRzaGVldF90b19qc29uOiBzaGVldF90b19qc29uLFxuXHRzaGVldF90b19odG1sOiBIVE1MXy5mcm9tX3NoZWV0LFxuXHRzaGVldF90b19kaWY6IERJRi5mcm9tX3NoZWV0LFxuXHRzaGVldF90b19zbGs6IFNZTEsuZnJvbV9zaGVldCxcblx0c2hlZXRfdG9fZXRoOiBFVEguZnJvbV9zaGVldCxcblx0c2hlZXRfdG9fZm9ybXVsYWU6IHNoZWV0X3RvX2Zvcm11bGFlLFxuXHRzaGVldF90b19yb3dfb2JqZWN0X2FycmF5OiBzaGVldF90b19qc29uXG59O1xuXG4oZnVuY3Rpb24odXRpbHMpIHtcbnV0aWxzLmNvbnN0cyA9IHV0aWxzLmNvbnN0cyB8fCB7fTtcbmZ1bmN0aW9uIGFkZF9jb25zdHMoUi8qQXJyYXk8YW55PiovKSB7IFIuZm9yRWFjaChmdW5jdGlvbihhKXsgdXRpbHMuY29uc3RzW2FbMF1dID0gYVsxXTsgfSk7IH1cblxuZnVuY3Rpb24gZ2V0X2RlZmF1bHQoeCwgeSwgeikgeyByZXR1cm4geFt5XSAhPSBudWxsID8geFt5XSA6ICh4W3ldID0geik7IH1cblxuLyogZ2V0IGNlbGwsIGNyZWF0aW5nIGEgc3R1YiBpZiBuZWNlc3NhcnkgKi9cbmZ1bmN0aW9uIHdzX2dldF9jZWxsX3N0dWIod3MsIFIsIEMpIHtcblx0LyogQTEgY2VsbCBhZGRyZXNzICovXG5cdGlmKHR5cGVvZiBSID09IFwic3RyaW5nXCIpIHJldHVybiB3c1tSXSB8fCAod3NbUl0gPSB7dDoneid9KTtcblx0LyogY2VsbCBhZGRyZXNzIG9iamVjdCAqL1xuXHRpZih0eXBlb2YgUiAhPSBcIm51bWJlclwiKSByZXR1cm4gd3NfZ2V0X2NlbGxfc3R1Yih3cywgZW5jb2RlX2NlbGwoUikpO1xuXHQvKiBSIGFuZCBDIGFyZSAwLWJhc2VkIGluZGljZXMgKi9cblx0cmV0dXJuIHdzX2dldF9jZWxsX3N0dWIod3MsIGVuY29kZV9jZWxsKHtyOlIsYzpDfHwwfSkpO1xufVxuXG4vKiBmaW5kIHNoZWV0IGluZGV4IGZvciBnaXZlbiBuYW1lIC8gdmFsaWRhdGUgaW5kZXggKi9cbmZ1bmN0aW9uIHdiX3NoZWV0X2lkeCh3Yiwgc2gpIHtcblx0aWYodHlwZW9mIHNoID09IFwibnVtYmVyXCIpIHtcblx0XHRpZihzaCA+PSAwICYmIHdiLlNoZWV0TmFtZXMubGVuZ3RoID4gc2gpIHJldHVybiBzaDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBzaGVldCAjIFwiICsgc2gpO1xuXHR9IGVsc2UgaWYodHlwZW9mIHNoID09IFwic3RyaW5nXCIpIHtcblx0XHR2YXIgaWR4ID0gd2IuU2hlZXROYW1lcy5pbmRleE9mKHNoKTtcblx0XHRpZihpZHggPiAtMSkgcmV0dXJuIGlkeDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBzaGVldCBuYW1lIHxcIiArIHNoICsgXCJ8XCIpO1xuXHR9IGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgc2hlZXQgfFwiICsgc2ggKyBcInxcIik7XG59XG5cbi8qIHNpbXBsZSBibGFuayB3b3JrYm9vayBvYmplY3QgKi9cbnV0aWxzLmJvb2tfbmV3ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB7IFNoZWV0TmFtZXM6IFtdLCBTaGVldHM6IHt9IH07XG59O1xuXG4vKiBhZGQgYSB3b3Jrc2hlZXQgdG8gdGhlIGVuZCBvZiBhIGdpdmVuIHdvcmtib29rICovXG51dGlscy5ib29rX2FwcGVuZF9zaGVldCA9IGZ1bmN0aW9uKHdiLCB3cywgbmFtZSkge1xuXHRpZighbmFtZSkgZm9yKHZhciBpID0gMTsgaSA8PSAweEZGRkY7ICsraSkgaWYod2IuU2hlZXROYW1lcy5pbmRleE9mKG5hbWUgPSBcIlNoZWV0XCIgKyBpKSA9PSAtMSkgYnJlYWs7XG5cdGlmKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJUb28gbWFueSB3b3Jrc2hlZXRzXCIpO1xuXHRjaGVja193c19uYW1lKG5hbWUpO1xuXHRpZih3Yi5TaGVldE5hbWVzLmluZGV4T2YobmFtZSkgPj0gMCkgdGhyb3cgbmV3IEVycm9yKFwiV29ya3NoZWV0IHdpdGggbmFtZSB8XCIgKyBuYW1lICsgXCJ8IGFscmVhZHkgZXhpc3RzIVwiKTtcblxuXHR3Yi5TaGVldE5hbWVzLnB1c2gobmFtZSk7XG5cdHdiLlNoZWV0c1tuYW1lXSA9IHdzO1xufTtcblxuLyogc2V0IHNoZWV0IHZpc2liaWxpdHkgKHZpc2libGUvaGlkZGVuL3ZlcnkgaGlkZGVuKSAqL1xudXRpbHMuYm9va19zZXRfc2hlZXRfdmlzaWJpbGl0eSA9IGZ1bmN0aW9uKHdiLCBzaCwgdmlzKSB7XG5cdGdldF9kZWZhdWx0KHdiLFwiV29ya2Jvb2tcIix7fSk7XG5cdGdldF9kZWZhdWx0KHdiLldvcmtib29rLFwiU2hlZXRzXCIsW10pO1xuXG5cdHZhciBpZHggPSB3Yl9zaGVldF9pZHgod2IsIHNoKTtcblx0Ly8gJEZsb3dJZ25vcmVcblx0Z2V0X2RlZmF1bHQod2IuV29ya2Jvb2suU2hlZXRzLGlkeCwge30pO1xuXG5cdHN3aXRjaCh2aXMpIHtcblx0XHRjYXNlIDA6IGNhc2UgMTogY2FzZSAyOiBicmVhaztcblx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgc2hlZXQgdmlzaWJpbGl0eSBzZXR0aW5nIFwiICsgdmlzKTtcblx0fVxuXHQvLyAkRmxvd0lnbm9yZVxuXHR3Yi5Xb3JrYm9vay5TaGVldHNbaWR4XS5IaWRkZW4gPSB2aXM7XG59O1xuYWRkX2NvbnN0cyhbXG5cdFtcIlNIRUVUX1ZJU0lCTEVcIiwgMF0sXG5cdFtcIlNIRUVUX0hJRERFTlwiLCAxXSxcblx0W1wiU0hFRVRfVkVSWV9ISURERU5cIiwgMl1cbl0pO1xuXG4vKiBzZXQgbnVtYmVyIGZvcm1hdCAqL1xudXRpbHMuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdCA9IGZ1bmN0aW9uKGNlbGwsIGZtdCkge1xuXHRjZWxsLnogPSBmbXQ7XG5cdHJldHVybiBjZWxsO1xufTtcblxuLyogc2V0IGNlbGwgaHlwZXJsaW5rICovXG51dGlscy5jZWxsX3NldF9oeXBlcmxpbmsgPSBmdW5jdGlvbihjZWxsLCB0YXJnZXQsIHRvb2x0aXApIHtcblx0aWYoIXRhcmdldCkge1xuXHRcdGRlbGV0ZSBjZWxsLmw7XG5cdH0gZWxzZSB7XG5cdFx0Y2VsbC5sID0gKHsgVGFyZ2V0OiB0YXJnZXQgfSk7XG5cdFx0aWYodG9vbHRpcCkgY2VsbC5sLlRvb2x0aXAgPSB0b29sdGlwO1xuXHR9XG5cdHJldHVybiBjZWxsO1xufTtcbnV0aWxzLmNlbGxfc2V0X2ludGVybmFsX2xpbmsgPSBmdW5jdGlvbihjZWxsLCByYW5nZSwgdG9vbHRpcCkgeyByZXR1cm4gdXRpbHMuY2VsbF9zZXRfaHlwZXJsaW5rKGNlbGwsIFwiI1wiICsgcmFuZ2UsIHRvb2x0aXApOyB9O1xuXG4vKiBhZGQgdG8gY2VsbCBjb21tZW50cyAqL1xudXRpbHMuY2VsbF9hZGRfY29tbWVudCA9IGZ1bmN0aW9uKGNlbGwsIHRleHQsIGF1dGhvcikge1xuXHRpZighY2VsbC5jKSBjZWxsLmMgPSBbXTtcblx0Y2VsbC5jLnB1c2goe3Q6dGV4dCwgYTphdXRob3J8fFwiU2hlZXRKU1wifSk7XG59O1xuXG4vKiBzZXQgYXJyYXkgZm9ybXVsYSBhbmQgZmx1c2ggcmVsYXRlZCBjZWxscyAqL1xudXRpbHMuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGEgPSBmdW5jdGlvbih3cywgcmFuZ2UsIGZvcm11bGEpIHtcblx0dmFyIHJuZyA9IHR5cGVvZiByYW5nZSAhPSBcInN0cmluZ1wiID8gcmFuZ2UgOiBzYWZlX2RlY29kZV9yYW5nZShyYW5nZSk7XG5cdHZhciBybmdzdHIgPSB0eXBlb2YgcmFuZ2UgPT0gXCJzdHJpbmdcIiA/IHJhbmdlIDogZW5jb2RlX3JhbmdlKHJhbmdlKTtcblx0Zm9yKHZhciBSID0gcm5nLnMucjsgUiA8PSBybmcuZS5yOyArK1IpIGZvcih2YXIgQyA9IHJuZy5zLmM7IEMgPD0gcm5nLmUuYzsgKytDKSB7XG5cdFx0dmFyIGNlbGwgPSB3c19nZXRfY2VsbF9zdHViKHdzLCBSLCBDKTtcblx0XHRjZWxsLnQgPSAnbic7XG5cdFx0Y2VsbC5GID0gcm5nc3RyO1xuXHRcdGRlbGV0ZSBjZWxsLnY7XG5cdFx0aWYoUiA9PSBybmcucy5yICYmIEMgPT0gcm5nLnMuYykgY2VsbC5mID0gZm9ybXVsYTtcblx0fVxuXHRyZXR1cm4gd3M7XG59O1xuXG5yZXR1cm4gdXRpbHM7XG59KSh1dGlscyk7XG5cbmlmKGhhc19idWYgJiYgdHlwZW9mIHJlcXVpcmUgIT0gJ3VuZGVmaW5lZCcpIChmdW5jdGlvbigpIHtcblx0dmFyIFJlYWRhYmxlID0gcmVxdWlyZSgnc3RyZWFtJykuUmVhZGFibGU7XG5cblx0dmFyIHdyaXRlX2Nzdl9zdHJlYW0gPSBmdW5jdGlvbihzaGVldCwgb3B0cykge1xuXHRcdHZhciBzdHJlYW0gPSBSZWFkYWJsZSgpO1xuXHRcdHZhciBvID0gb3B0cyA9PSBudWxsID8ge30gOiBvcHRzO1xuXHRcdGlmKHNoZWV0ID09IG51bGwgfHwgc2hlZXRbXCIhcmVmXCJdID09IG51bGwpIHsgc3RyZWFtLnB1c2gobnVsbCk7IHJldHVybiBzdHJlYW07IH1cblx0XHR2YXIgciA9IHNhZmVfZGVjb2RlX3JhbmdlKHNoZWV0W1wiIXJlZlwiXSk7XG5cdFx0dmFyIEZTID0gby5GUyAhPT0gdW5kZWZpbmVkID8gby5GUyA6IFwiLFwiLCBmcyA9IEZTLmNoYXJDb2RlQXQoMCk7XG5cdFx0dmFyIFJTID0gby5SUyAhPT0gdW5kZWZpbmVkID8gby5SUyA6IFwiXFxuXCIsIHJzID0gUlMuY2hhckNvZGVBdCgwKTtcblx0XHR2YXIgZW5kcmVnZXggPSBuZXcgUmVnRXhwKChGUz09XCJ8XCIgPyBcIlxcXFx8XCIgOiBGUykrXCIrJFwiKTtcblx0XHR2YXIgcm93ID0gXCJcIiwgY29scyA9IFtdO1xuXHRcdG8uZGVuc2UgPSBBcnJheS5pc0FycmF5KHNoZWV0KTtcblx0XHR2YXIgY29saW5mbyA9IG8uc2tpcEhpZGRlbiAmJiBzaGVldFtcIiFjb2xzXCJdIHx8IFtdO1xuXHRcdHZhciByb3dpbmZvID0gby5za2lwSGlkZGVuICYmIHNoZWV0W1wiIXJvd3NcIl0gfHwgW107XG5cdFx0Zm9yKHZhciBDID0gci5zLmM7IEMgPD0gci5lLmM7ICsrQykgaWYgKCEoKGNvbGluZm9bQ118fHt9KS5oaWRkZW4pKSBjb2xzW0NdID0gZW5jb2RlX2NvbChDKTtcblx0XHR2YXIgUiA9IHIucy5yO1xuXHRcdHN0cmVhbS5fcmVhZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYoUiA+IHIuZS5yKSByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG5cdFx0XHR3aGlsZShSIDw9IHIuZS5yKSB7XG5cdFx0XHRcdCsrUjtcblx0XHRcdFx0aWYgKChyb3dpbmZvW1ItMV18fHt9KS5oaWRkZW4pIGNvbnRpbnVlO1xuXHRcdFx0XHRyb3cgPSBtYWtlX2Nzdl9yb3coc2hlZXQsIHIsIFItMSwgY29scywgZnMsIHJzLCBGUywgbyk7XG5cdFx0XHRcdGlmKHJvdyAhPSBudWxsKSB7XG5cdFx0XHRcdFx0aWYoby5zdHJpcCkgcm93ID0gcm93LnJlcGxhY2UoZW5kcmVnZXgsXCJcIik7XG5cdFx0XHRcdFx0c3RyZWFtLnB1c2gocm93ICsgUlMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4gc3RyZWFtO1xuXHR9O1xuXG5cdHZhciB3cml0ZV9odG1sX3N0cmVhbSA9IGZ1bmN0aW9uKHdzLCBvcHRzKSB7XG5cdFx0dmFyIHN0cmVhbSA9IFJlYWRhYmxlKCk7XG5cblx0XHR2YXIgbyA9IG9wdHMgfHwge307XG5cdFx0dmFyIGhlYWRlciA9IG8uaGVhZGVyICE9IG51bGwgPyBvLmhlYWRlciA6IEhUTUxfLkJFR0lOO1xuXHRcdHZhciBmb290ZXIgPSBvLmZvb3RlciAhPSBudWxsID8gby5mb290ZXIgOiBIVE1MXy5FTkQ7XG5cdFx0c3RyZWFtLnB1c2goaGVhZGVyKTtcblx0XHR2YXIgciA9IGRlY29kZV9yYW5nZSh3c1snIXJlZiddKTtcblx0XHRvLmRlbnNlID0gQXJyYXkuaXNBcnJheSh3cyk7XG5cdFx0c3RyZWFtLnB1c2goSFRNTF8uX3ByZWFtYmxlKHdzLCByLCBvKSk7XG5cdFx0dmFyIFIgPSByLnMucjtcblx0XHR2YXIgZW5kID0gZmFsc2U7XG5cdFx0c3RyZWFtLl9yZWFkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZihSID4gci5lLnIpIHtcblx0XHRcdFx0aWYoIWVuZCkgeyBlbmQgPSB0cnVlOyBzdHJlYW0ucHVzaChcIjwvdGFibGU+XCIgKyBmb290ZXIpOyB9XG5cdFx0XHRcdHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcblx0XHRcdH1cblx0XHRcdHdoaWxlKFIgPD0gci5lLnIpIHtcblx0XHRcdFx0c3RyZWFtLnB1c2goSFRNTF8uX3Jvdyh3cywgciwgUiwgbykpO1xuXHRcdFx0XHQrK1I7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIHN0cmVhbTtcblx0fTtcblxuXHRYTFNYLnN0cmVhbSA9IHtcblx0XHR0b19odG1sOiB3cml0ZV9odG1sX3N0cmVhbSxcblx0XHR0b19jc3Y6IHdyaXRlX2Nzdl9zdHJlYW1cblx0fTtcbn0pKCk7XG5cblhMU1gucGFyc2VfeGxzY2ZiID0gcGFyc2VfeGxzY2ZiO1xuWExTWC5wYXJzZV9vZHMgPSBwYXJzZV9vZHM7XG5YTFNYLnBhcnNlX2ZvZHMgPSBwYXJzZV9mb2RzO1xuWExTWC53cml0ZV9vZHMgPSB3cml0ZV9vZHM7XG5YTFNYLnBhcnNlX3ppcCA9IHBhcnNlX3ppcDtcblhMU1gucmVhZCA9IHJlYWRTeW5jOyAvL3hsc3JlYWRcblhMU1gucmVhZEZpbGUgPSByZWFkRmlsZVN5bmM7IC8vcmVhZEZpbGVcblhMU1gucmVhZEZpbGVTeW5jID0gcmVhZEZpbGVTeW5jO1xuWExTWC53cml0ZSA9IHdyaXRlU3luYztcblhMU1gud3JpdGVGaWxlID0gd3JpdGVGaWxlU3luYztcblhMU1gud3JpdGVGaWxlU3luYyA9IHdyaXRlRmlsZVN5bmM7XG5YTFNYLndyaXRlRmlsZUFzeW5jID0gd3JpdGVGaWxlQXN5bmM7XG5YTFNYLnV0aWxzID0gdXRpbHM7XG5YTFNYLlNTRiA9IFNTRjtcblhMU1guQ0ZCID0gQ0ZCO1xufSkodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnID8gZXhwb3J0cyA6IFhMU1gpO1xuLypleHBvcnRlZCBYTFMsIE9EUyAqL1xudmFyIFhMUyA9IFhMU1gsIE9EUyA9IFhMU1g7XG4iLCIvLy88cmVmZXJlbmNlIHBhdGg9XCIuLi90eXBpbmdzL2luZGV4LmQudHNcIiAvPlxyXG5pbXBvcnQgXCJhbmd1bGFyXCI7XHJcbmltcG9ydCBcImFuZ3VsYXItbWVzc2FnZXNcIjtcclxuaW1wb3J0IFwiQGlhbWFkYW1qb3dldHQvYW5ndWxhci1jbGljay1vdXRzaWRlXCI7XHJcbmltcG9ydCBcImFuZ3VsYXItdWktYm9vdHN0cmFwXCI7XHJcbmltcG9ydCBcImFuZ3VsYXItdWktdGlueW1jZVwiO1xyXG5pbXBvcnQgXCJhbmd1bGFyLXNhbml0aXplXCI7XHJcbmltcG9ydCBcImFuZ3VsYXItcmVzaXphYmxlXCI7XHJcbmltcG9ydCBcImFuZ3VsYXItZ29vZ2xlLWNoYXJ0XCI7XHJcbmltcG9ydCBcImFuZ3VsYXItaG90a2V5c1wiO1xyXG5pbXBvcnQgXCJhbmd1bGFyLWpzLXhsc3hcIjtcclxuaW1wb3J0IHsgQW5ndWxhck1vZHVsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGcUNvbXBvbmVudHMgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xyXG5cclxuZXhwb3J0IHZhciBGSVFBc3Npc3QgPSBBbmd1bGFyTW9kdWxlLkNyZWF0ZSgnRklRQXNzaXN0JywgW1xyXG4gICAgRnFDb21wb25lbnRzLm5hbWUsXHJcbiAgICAnbmdTYW5pdGl6ZScsXHJcbiAgICAnbmdDb21wb25lbnRSb3V0ZXInLFxyXG4gICAgJ2FuZ3VsYXItY2xpY2stb3V0c2lkZScsXHJcbiAgICAnYW5ndWxhclJlc2l6YWJsZScsXHJcbiAgICAnY2ZwLmhvdGtleXMnLFxyXG4gICAgJ25nTWVzc2FnZXMnLFxyXG4gICAgJ3VpLmJvb3RzdHJhcCcsXHJcbiAgICAndWkudGlueW1jZScsXHJcbiAgICAnZ29vZ2xlY2hhcnQnLFxyXG4gICAgJ2FuZ3VsYXItanMteGxzeCdcclxuXSk7XHJcbkZJUUFzc2lzdC5ydW4oWyckcScsICckd2luZG93JywgKCRxLCAkd2luZG93KSA9PiB7XHJcbiAgICAkd2luZG93LlByb21pc2UgPSBmdW5jdGlvbiAoZXhlY3V0b3IpIHtcclxuICAgICAgICByZXR1cm4gJHEoZXhlY3V0b3IpO1xyXG4gICAgfTtcclxuXHJcbiAgICAkd2luZG93LlByb21pc2UuYWxsID0gJHEuYWxsLmJpbmQoJHEpO1xyXG4gICAgJHdpbmRvdy5Qcm9taXNlLnJlamVjdCA9ICRxLnJlamVjdC5iaW5kKCRxKTtcclxuICAgICR3aW5kb3cuUHJvbWlzZS5yZXNvbHZlID0gJHEud2hlbi5iaW5kKCRxKTtcclxuXHJcbiAgICAkd2luZG93LlByb21pc2UucmFjZSA9IGZ1bmN0aW9uIChwcm9taXNlcykge1xyXG4gICAgICAgIHZhciBwcm9taXNlTWdyID0gJHEuZGVmZXIoKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9taXNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwcm9taXNlc1tpXS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9taXNlTWdyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZU1nci5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZU1nciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcHJvbWlzZXNbaV0uY2F0Y2goZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb21pc2VNZ3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlTWdyLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VNZ3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwcm9taXNlTWdyLnByb21pc2U7XHJcbiAgICB9O1xyXG59XSk7XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCAgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9nZW5lcmFsXCI7XHJcbmltcG9ydCB7IElzUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvaXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcImFib3V0XCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9hYm91dC5odG1sXCIsXHJcbiAgICByZXF1aXJlOiB7XHJcbiAgICAgICAgYXBwbGljYXRpb246IFwiXmFwcGxpY2F0aW9uXCIsXHJcbiAgICB9XHJcbn0pXHJcbmNsYXNzIEFib3V0IGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBwcml2YXRlICRyb3V0ZXI6IG5nLlJvdXRlcjtcclxuICAgIHB1YmxpYyBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaXNQcm9jZXNzaW5nU2VydmljZTogSXNQcm9jZXNzaW5nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckd2luZG93JykgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcScpIHByaXZhdGUgJHE6IG5nLklRU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZVxyXG5cclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIC8vICAgIHByaXZhdGUgc2VsZWN0ZWRDdXN0b21lcnM7XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLlRpdGxlID0gXCJBQk9VVF9QQUdFXCI7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNZW51SXRlbSA9ICdhYm91dCc7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1lbnVJdGVtID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFRpdGxlOiBzdHJpbmcgPSAnJztcclxuICAgIHB1YmxpYyBUaXRsZTI6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIGFjdGl2ZU1lbnVJdGVtOiBzdHJpbmc7XHJcbn0iLCLvu79pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBSb290Um91dGVyQ29tcG9uZW50LCBSb3V0ZUNvbmZpZyB9IGZyb20gXCJAZmlxYXMvbmdjb21wb25lbnRyb3V0ZXJcIjtcclxuaW1wb3J0IHsgTWVtb2l6ZSB9IGZyb20gXCJAZmlxYXMvdXRpbHNcIjtcclxuaW1wb3J0ICogYXMgUnggZnJvbSBcInJ4anMvUnhcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anMvU3Vic2NyaXB0aW9uXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgU2VxVVJMIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgQ29sbGVjdGlvblJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2lGcXNcIjtcclxuaW1wb3J0IHsgUGFyc2VkUmVzdWx0IH0gZnJvbSBcIi4uL21vZGVscy9iYXNlXCI7XHJcbmltcG9ydCB7IEdldEN1c3RvbWVyUmVzdWx0SXRlbSB9IGZyb20gXCIuLi9tb2RlbHMvY3VzdG9tZXJcIjtcclxuaW1wb3J0IHsgQ29tcGFjdFNlcnZpY2VDYXNlIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSBcIi4uL21vZGVscy91c2VyXCI7XHJcbmltcG9ydCB7IFN0YXJ0VmVyc2lvbiB9IGZyb20gXCIuLi9tb2RlbHMvdmVyc2lvblwiO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvYXV0aGVudGljYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgSG9tZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL2hvbWVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFJlcG9ydFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3JlcG9ydFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3VzZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IElzUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvaXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2xvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmdMb2dMaXN0ZW5lciB9IGZyb20gXCIuLi9zZXJ2aWNlcy9uZ0xvZ0xpc3RlbmVyXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zZXJ2aWNlQmFzZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVNlYXJjaFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvc2VydmljZUNhc2VTZWFyY2hTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3Nlc3Npb25cIjtcclxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblNldHRpbmdzIHtcclxuICAgIGN1bHR1cmU6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcImFwcGxpY2F0aW9uXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9hcHBsaWNhdGlvbi5odG1sXCJcclxufSlcclxuQFJvb3RSb3V0ZXJDb21wb25lbnQoRklRQXNzaXN0LCBcImFwcGxpY2F0aW9uXCIpXHJcbkBSb3V0ZUNvbmZpZyhbXHJcbiAgICB7IHBhdGg6ICcvaG9tZS8uLi4nLCBuYW1lOiBcIkhvbWVcIiwgY29tcG9uZW50OiBcImhvbWVcIiB9LFxyXG5cclxuICAgIHsgcGF0aDogJy9sb2dpbicsIG5hbWU6IFwiTG9naW5cIiwgY29tcG9uZW50OiAnbG9naW4nIH0sXHJcbiAgICB7IHBhdGg6ICcvZ29vZGJ5ZScsIG5hbWU6IFwiR29vZEJ5ZVwiLCBjb21wb25lbnQ6ICdsb2dvdXQnIH0sXHJcbiAgICB7IHBhdGg6ICcvY2hhbmdlcGFzc3dvcmQnLCBuYW1lOiBcIkNoYW5nZVBhc3N3b3JkXCIsIGNvbXBvbmVudDogJ2NoYW5nZVBhc3N3b3JkJyB9LFxyXG4gICAgeyBwYXRoOiAnL2ZvcmdvdHBhc3N3b3JkJywgbmFtZTogXCJGb3Jnb3RQYXNzd29yZFwiLCBjb21wb25lbnQ6ICdmb3Jnb3RQYXNzd29yZCcgfSxcclxuICAgIHsgcGF0aDogJy9uZXdwYXNzd29yZCcsIG5hbWU6IFwiTmV3UGFzc3dvcmRcIiwgY29tcG9uZW50OiAnbmV3UGFzc3dvcmQnIH0sXHJcblxyXG4gICAgeyBwYXRoOiAnL3JlcXVlc3QvLi4uJywgbmFtZTogXCJSZXF1ZXN0XCIsIGNvbXBvbmVudDogJ3JlcXVlc3RCYXNlJyB9LFxyXG4gICAgeyBwYXRoOiAnL3Byb2JsZW0vLi4uJywgbmFtZTogXCJQcm9ibGVtXCIsIGNvbXBvbmVudDogJ3Byb2JsZW1CYXNlJyB9LFxyXG5cclxuICAgIHsgcGF0aDogJy9jb21wbGFpbnQvLi4uJywgbmFtZTogXCJDb21wbGFpbnRcIiwgY29tcG9uZW50OiAnY29tcGxhaW50QmFzZScgfSxcclxuICAgIHsgcGF0aDogJy9jb21wbGltZW50Ly4uLicsIG5hbWU6IFwiQ29tcGxpbWVudFwiLCBjb21wb25lbnQ6ICdjb21wbGltZW50QmFzZScgfSxcclxuXHJcbiAgICB7IHBhdGg6ICcvcmVwb3J0cycsIG5hbWU6IFwiUmVwb3J0c1wiLCBjb21wb25lbnQ6ICdyZXBvcnRzJyB9LFxyXG4gICAgeyBwYXRoOiAnL2Fib3V0JywgbmFtZTogXCJBYm91dFwiLCBjb21wb25lbnQ6ICdhYm91dCcgfSxcclxuXHJcbiAgICB7IHBhdGg6ICcvb3RoZXInLCBuYW1lOiBcIk90aGVyXCIsIGNvbXBvbmVudDogXCJvdGhlclwiIH0sXHJcblxyXG4gICAgeyBwYXRoOiBcIi8qKlwiLCBuYW1lOiBcIkRlZmF1bHRcIiwgY29tcG9uZW50OiBcImhvbWVcIiB9IC8vIGRlZmF1bHQgcm91dGUsIGtlZXAgYXMgbGFzdCByb3V0ZSBpbiB0YWJsZSBkdWUgdG8gcm91dGluZyBidWcuLlxyXG5dKVxyXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb24ge1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gICAgcHVibGljIGVudHJ5Q2lkcz86IEFycmF5PG51bWJlcj47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHVpYk1vZGFsJykgcHJpdmF0ZSAkbW9kYWw6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGxvY2F0aW9uJykgcHVibGljICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHNlcnZpY2VDYXNlU2VydmljZTogU2VydmljZUNhc2VTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGhvbWVTZXJ2aWNlOiBIb21lU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSByZXBvcnRTZXJ2aWNlOiBSZXBvcnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBzZXNzaW9uU2VydmljZTogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaXNQcm9jZXNzaW5nU2VydmljZTogSXNQcm9jZXNzaW5nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcScpIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290Um91dGVyJykgcHVibGljICRyb290Um91dGVyOiBhbmd1bGFyLlJvdXRlcixcclxuICAgICAgICBASW5qZWN0KCckd2luZG93JykgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckc2NvcGUnKSBwcml2YXRlICRzY29wZTogbmcuSVNjb3BlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIG5nTG9nTGlzdGVuZXI6IE5nTG9nTGlzdGVuZXIsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ2hvdGtleXMnKSBwcml2YXRlIGhvdGtleXM6IG5nLmhvdGtleXMuSG90a2V5c1Byb3ZpZGVyLFxyXG4gICAgICAgIEBJbmplY3QoJ1NlcVVSTCcpIHByaXZhdGUgc2VxVXJsOiBTZXFVUkwsXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgc2VydmljZUNhc2VTZWFyY2hTZXJ2aWNlOiBTZXJ2aWNlQ2FzZVNlYXJjaFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHZhciBjaWRzID0gdGhpcy4kbG9jYXRpb24uc2VhcmNoKCkuY2lkIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuZW50cnlDaWRzID0gQXJyYXkuaXNBcnJheShjaWRzKSA/IGNpZHMgOiBbIGNpZHMgXTtcclxuXHJcbiAgICAgICAgbG9nU2VydmljZS5yZWdpc3Rlckxpc3RuZXIobmdMb2dMaXN0ZW5lcik7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuYWRkVW5hdXRob3JpemVkSGFuZGxlcigocywgdSkgPT4gdGhpcy5sb2dpblN1YmplY3QubmV4dCgpKTtcclxuICAgICAgICB0aGlzLmhvbWVTZXJ2aWNlLmFkZFVuYXV0aG9yaXplZEhhbmRsZXIoKHMsIHUpID0+IHRoaXMubG9naW5TdWJqZWN0Lm5leHQoKSk7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmFkZFVuYXV0aG9yaXplZEhhbmRsZXIoKHMsIHUpID0+IHRoaXMubG9naW5TdWJqZWN0Lm5leHQoKSk7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5hZGRVbmF1dGhvcml6ZWRIYW5kbGVyKChzLCB1KSA9PiB0aGlzLmxvZ2luU3ViamVjdC5uZXh0KCkpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5hZGRMb2dvdXRIYW5kbGVyKFxyXG4gICAgICAgICAgICBfID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlU2VydmljZS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kcm9vdFJvdXRlci5uYXZpZ2F0ZShbJ0xvZ2luJ10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5hZGRMb2dpbkhhbmRsZXIoXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2hvd01lbnUgPSAhIXRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uub25Sb2xlQ2hhbmdlZChcclxuICAgICAgICAgICAgICAgIChyb2xlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lbnUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF8gPSB0aGlzLnVzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21lcnMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDdXN0b21lcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLkN1c3RvbWVycyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9fID0gdGhpcy5jdXN0b21lcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcm9sZXMub2xkUm9sZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuJGxvY2F0aW9uLnVybCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmluZGV4T2YoXCIvbmV3cGFzc3dvcmRcIikgPj0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50LmluZGV4T2YoXCIvZm9yZ290cGFzc3dvcmRcIikgPj0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50LmluZGV4T2YoXCIvbG9naW5cIikgPj0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSB0aGlzLiRyb290Um91dGVyLmdlbmVyYXRlKFsnSG9tZSddKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVkaXJlY3QoaW5zdHJ1Y3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaG90a2V5cy5iaW5kVG8oJHNjb3BlKTtcclxuICAgICAgICB0aGlzLmhvdGtleSA9IFt0aGlzLmFib3V0SG90a2V5ID0ge1xyXG4gICAgICAgICAgICBjb21ibzogWydjdHJsK2FsdCthJ10sXHJcbiAgICAgICAgICAgIGFsbG93SW46IFsnSU5QVVQnLCAnU0VMRUNUJywgJ1RFWFRBUkVBJ10sXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoZSkgPT4gdGhpcy5zaG93QWJvdXRNb2RhbChlKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgY29tYm86IFsnY3RybCtzaGlmdCtmJ10sXHJcbiAgICAgICAgICAgIGFsbG93SW46IFsnSU5QVVQnLCAnU0VMRUNUJywgJ1RFWFRBUkVBJ10sXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoZSkgPT4gdGhpcy5mb2N1c0Zhc3RTZWFyY2goZSksXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5sb2dpblN1YmplY3QgPSBuZXcgUnguU3ViamVjdDx2b2lkPigpO1xyXG4gICAgICAgIHRoaXMubG9naW5TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnRocm90dGxlVGltZSgxMDApLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVuYXV0aG9yaXplZEhhbmRsZXIoKSk7XHJcbiAgICAgICAgLy90aGlzLiRyb290Um91dGVyLnN1YnNjcmliZShyID0+IHRoaXMuZW5hYmxlRmFzdFNlYXJjaCA9IHIgIT09IFwiaG9tZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhvdGtleTogbmcuaG90a2V5cy5Ib3RrZXlbXTtcclxuICAgIHByaXZhdGUgYWJvdXRIb3RrZXk6IG5nLmhvdGtleXMuSG90a2V5O1xyXG5cclxuICAgIHB1YmxpYyBTZXR0aW5nczogQXBwbGljYXRpb25TZXR0aW5ncyA9IHtcclxuICAgICAgICBjdWx0dXJlOiBcIm5sXCJcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGFzeW5jICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0VmFsdWU8Ym9vbGVhbj4oXCJuYXZpZ2F0ZWRcIiwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldFZhbHVlPHN0cmluZz4oXCJuYXZpZ2F0ZWQuZmlyc3RVcmxcIiwgdGhpcy4kbG9jYXRpb24udXJsKCkpO1xyXG4gICAgICAgIHRoaXMuX29uRmFzdFNlYXJjaFN1YmplY3QgPSBuZXcgUnguU3ViamVjdCgpO1xyXG4gICAgICAgIHRoaXMuX29uRmFzdFNlYXJjaCA9IHRoaXMuX29uRmFzdFNlYXJjaFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZHJhZ292ZXJcIiwgZSA9PiBlLnByZXZlbnREZWZhdWx0KCksIGZhbHNlKTtcclxuICAgICAgICB0aGlzLiR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRyb3BcIiwgZSA9PiBlLnByZXZlbnREZWZhdWx0KCksIGZhbHNlKTtcclxuICAgICAgICB2YXIgXyA9IHRoaXMudXNlcjtcclxuICAgICAgICB2YXIgX18gPSB0aGlzLmN1c3RvbWVycztcclxuICAgICAgICB0aGlzLnNob3dNZW51ID0gISF0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlO1xyXG4gICAgICAgIHRoaXMuaG90a2V5LmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ob3RrZXlzLmFkZChrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyAkb25EZXN0b3J5KCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUpO1xyXG4gICAgICAgIHRoaXMuaG90a2V5LmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ob3RrZXlzLmRlbChrZXkuY29tYm8pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2VhcmNoUGhyYXNlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZ2V0IHNlYXJjaFBocmFzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUGhyYXNlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzZWFyY2hQaHJhc2UodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hQaHJhc2UgPSB2YWw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX3Nob3dGYXN0U2VhcmNoOiBib29sZWFuO1xyXG4gICAgcHVibGljIGdldCBzaG93RmFzdFNlYXJjaCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0Zhc3RTZWFyY2g7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dGYXN0U2VhcmNoKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciBvID0gdGhpcy5fc2hvd0Zhc3RTZWFyY2g7XHJcbiAgICAgICAgdGhpcy5fc2hvd0Zhc3RTZWFyY2ggPSB2YWw7XHJcbiAgICAgICAgaWYgKHZhbCAhPSBvICYmIHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHRoaXMuJGVsZW1lbnRbMF0ucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucXVpY2tzZWFyY2gtZHJvcGRvd24gLnRleHRlZGl0Ym94JykuZm9jdXMoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlbmFibGVGYXN0U2VhcmNoKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5zZXJ2aWNlQ2FzZVNlYXJjaFNlcnZpY2UuU2VhcmNoaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbW9kYWxJbnN0YW5jZTogbmcudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2VJbnN0YW5jZVxyXG4gICAgcHVibGljIGFzeW5jIHNob3dBYm91dE1vZGFsKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMuaG90a2V5cy5kZWwodGhpcy5hYm91dEhvdGtleS5jb21ibyk7XHJcbiAgICAgICAgaWYgKCRldmVudCkge1xyXG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb2RhbEluc3RhbmNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dBYm91dCh0aGlzKTtcclxuICAgICAgICB0aGlzLm1vZGFsSW5zdGFuY2UucmVzdWx0LmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhvdGtleXMuYWRkKHRoaXMuYWJvdXRIb3RrZXkpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsSW5zdGFuY2UgPSBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb2N1c0Zhc3RTZWFyY2goJGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCRldmVudCkge1xyXG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlRmFzdFNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dGYXN0U2VhcmNoID0gIXRoaXMuc2hvd0Zhc3RTZWFyY2g7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25GYXN0U2VhcmNoKCk6IFJ4Lk9ic2VydmFibGU8W3N0cmluZywgQ29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+XT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vbkZhc3RTZWFyY2g7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9vbkZhc3RTZWFyY2g6IFJ4Lk9ic2VydmFibGU8W3N0cmluZywgQ29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+XT47XHJcbiAgICBwcml2YXRlIF9vbkZhc3RTZWFyY2hTdWJqZWN0OiBSeC5TdWJqZWN0PFtzdHJpbmcsIENvbGxlY3Rpb25SZXN1bHQ8Q29tcGFjdFNlcnZpY2VDYXNlPl0+O1xyXG5cclxuICAgIHB1YmxpYyBmYXN0U2VhcmNoKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RmFzdFNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNpbXBsZVNlYXJjaE1vZGUgPSA1O1xyXG4gICAgICAgICAgICB0aGlzLnNpbXBsZVNlYXJjaFN0cmluZyA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoUGhyYXNlID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHN1YiA9IHRoaXMuc2VydmljZUNhc2VTZWFyY2hTZXJ2aWNlLlNlYXJjaCh2YWx1ZSwgdGhpcy5zZWxlY3RlZEN1c3RvbWVycy5tYXAoYyA9PiBjLmtleSksIDEwMCwgMClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291bnQgIT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLiRyb290Um91dGVyLmdlbmVyYXRlKFtcIi9Ib21lL1NpbXBsZVNlYXJjaFwiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlQnlJbnN0cnVjdGlvbihpKS50aGVuKF8gPT4gdGhpcy5fb25GYXN0U2VhcmNoU3ViamVjdC5uZXh0KFt2YWx1ZSwgcmVzdWx0XSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSB7IG51bWJlcjogcmVzdWx0Lml0ZW1zWzBdLmNhc2VOdW1iZXIgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHJvb3RSb3V0ZXIubmF2aWdhdGUoW3Jlc3VsdC5pdGVtc1swXS50eXBlID09ICdidWcnID8gJ1Byb2JsZW0nIDogJ1JlcXVlc3QnLCAnRWRpdCcsIHBhcmFtZXRlcnNdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdGYXN0U2VhcmNoJywgJ0Vycm9yIHdoaWxlIHNlYXJjaGluZycsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnU0lNUExFX1NFQVJDSF9FUlJPUicsIHsgdHJhbnNsYXRlOiB0cnVlLCBlcnJvclJlc3VsdDogZXJyb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzdWIuYWRkKCgpID0+IHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09IFwiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RmFzdFNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGdldCBjbGllbnRWZXJzaW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9tZVNlcnZpY2UuZmlxYXNzaXN0Q2xpZW50VmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGFwaVZlcnNpb24oKTogU3RhcnRWZXJzaW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ob21lU2VydmljZS5maXFhc3Npc3RBcGlWZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWNpZXZlQXBpVmVyc2lvbihhY3Rpb246ICh2YWx1ZTogU3RhcnRWZXJzaW9uKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9tZVNlcnZpY2UucmVjaWV2ZUFQSVZlcnNpb24oYWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvcmNlUmVkaXJlY3QgPSAoaW5zdHJ1Y3Rpb246IG5nLkluc3RydWN0aW9uLCB0cnlOYXYgPSBudWxsKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0cnlOYXYpIHtcclxuICAgICAgICAgICAgdHJ5TmF2ID0gdGhpcy5mb3JjZVJlZGlyZWN0O1xyXG4gICAgICAgICAgICB0aGlzLmZvcmNlUmVkaXJlY3QgPSAobmV3SW5zdHJ1Y3Rpb246IG5nLkluc3RydWN0aW9uLCBuZXdUcnlOYXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi51cmxQYXRoKCkuaW5kZXhPZihcIi9uZXdwYXNzd29yZFwiKSA8IDBcclxuICAgICAgICAgICAgICAgICYmIGluc3RydWN0aW9uLnVybFBhdGgoKS5pbmRleE9mKFwiL2ZvcmdvdHBhc3N3b3JkXCIpIDwgMFxyXG4gICAgICAgICAgICAgICAgJiYgaW5zdHJ1Y3Rpb24udXJsUGF0aCgpLmluZGV4T2YoXCIvbG9naW5cIikgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXdJbnN0cnVjdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuJHJvb3RSb3V0ZXIubmF2aWdhdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB0cnlOYXYoaW5zdHJ1Y3Rpb24sIHRyeU5hdiksIDUwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcmNlUmVkaXJlY3QgPSB0cnlOYXY7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlQnlJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9naW5TdWJqZWN0OiBSeC5TdWJqZWN0PHZvaWQ+O1xyXG5cclxuICAgIHByaXZhdGUgdW5hdXRob3JpemVkSGFuZGxlcigpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuJGxvY2F0aW9uLnVybCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50LmluZGV4T2YoXCIvbmV3cGFzc3dvcmRcIikgPj0gMFxyXG4gICAgICAgICAgICB8fCBjdXJyZW50LmluZGV4T2YoXCIvZm9yZ290cGFzc3dvcmRcIikgPj0gMFxyXG4gICAgICAgICAgICB8fCBjdXJyZW50LmluZGV4T2YoXCIvbG9naW5cIikgPj0gMClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQ6IGFueVtdID0gWydMb2dpbiddO1xyXG4gICAgICAgIGlmIChjdXJyZW50LmluZGV4T2YoXCIvbG9naW5cIikgPT0gLTEgJiYgY3VycmVudC5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQuY29uY2F0KHsgc291cmNlOiBlbmNvZGVVUklDb21wb25lbnQodGhpcy4kbG9jYXRpb24udXJsKCkpIH0pXHJcblxyXG5cclxuICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSB0aGlzLiRyb290Um91dGVyLmdlbmVyYXRlKHRhcmdldCk7XHJcbiAgICAgICAgdGhpcy5mb3JjZVJlZGlyZWN0KGluc3RydWN0aW9uKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRVc2VyKCkge1xyXG4gICAgICAgIHZhciB1c2VyOiBVc2VyID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UudXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyID0gYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5zdGFydCh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS51c2VybmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoXCJBcHBsaWNhdGlvblwiLCBcIkVycm9yIHJldHJpZXZpbmcgbG9nZ2VkIGluIHVzZXIgcmVjb3JkXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9naW5TdWJqZWN0Lm5leHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uTmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5wZXJzb25JZC5ocmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnNvbiA9IGF3YWl0IHVzZXIucGVyc29uSWQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25OYW1lID0gcGVyc29uLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoXCJBcHBsaWNhdGlvblwiLCBcIkVycm9yIHJldHJpZXZpbmcgcGVyc29uIHJlY29yZFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXRTZXFVcmwoZXJyb3JSZXN1bHQ6IFBhcnNlZFJlc3VsdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmlzRmlxYXNFbXBsb3llZSkgZXJyb3JSZXN1bHQuc2VxdXJsID0gdGhpcy5zZXFVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvcmRlckJ5VGV4dCh4OiBHZXRDdXN0b21lclJlc3VsdEl0ZW0sIHk6IEdldEN1c3RvbWVyUmVzdWx0SXRlbSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHgubmFtZS50b0xvd2VyQ2FzZSgpID4geS5uYW1lLnRvTG93ZXJDYXNlKCkgPyAxIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3VzdG9tZXJzOiB7IGNoZWNrZWQ6IGJvb2xlYW4sIGtleTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfVtdO1xyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRDdXN0b21lcnMoKSB7XHJcbiAgICAgICAgdmFyIGxhc3RTZWxlY3RlZEN1c3RvbWVycyA9IHRoaXMubGFzdFNlbGVjdGVkQ3VzdG9tZXJzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBjdXN0b21lcnMgPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLkN1c3RvbWVyc1xyXG4gICAgICAgICAgICBpZiAoIWN1c3RvbWVycyB8fCAhY3VzdG9tZXJzLml0ZW1zIHx8IGN1c3RvbWVycy5pdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21lcnMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZW50cnlDaWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3VzdG9tZXJzID0gY3VzdG9tZXJzLml0ZW1zXHJcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQodGhpcy5vcmRlckJ5VGV4dClcclxuICAgICAgICAgICAgICAgICAgICAubWFwKGMgPT4geyByZXR1cm4geyBjaGVja2VkOiB0aGlzLmVudHJ5Q2lkcy5zb21lKHggPT4gYy5pZC5yZWYgPT0geC50b1N0cmluZygpKSwga2V5OiBjLmlkLnJlZiwgdGV4dDogYy5uYW1lIH0gfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY3VzdG9tZXJzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9TZWxlY3Rpb25QcmVzZW50ID0gKCF0aGlzLmxhc3RTZWxlY3RlZEN1c3RvbWVycyB8fCBsYXN0U2VsZWN0ZWRDdXN0b21lcnMubGVuZ3RoID09PSAwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1c3RvbWVycyA9IGN1c3RvbWVycy5pdGVtc1xyXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KHRoaXMub3JkZXJCeVRleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcChjID0+IHsgcmV0dXJuIHsgY2hlY2tlZDogbm9TZWxlY3Rpb25QcmVzZW50IHx8IGxhc3RTZWxlY3RlZEN1c3RvbWVycy5zb21lKHggPT4gYy5pZC5yZWYgPT0geC5rZXkpLCBrZXk6IGMuaWQucmVmLCB0ZXh0OiBjLm5hbWUgfSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEN1c3RvbWVycyA9IHRoaXMuX2N1c3RvbWVycy5maWx0ZXIoKGN1c3QpID0+IGN1c3QuY2hlY2tlZCk7XHJcbiAgICAgICAgICAgIC8vICoxOiBkb24ndCBza2lwIHRoZSBldmVudCB0cmlnZ2VyLCB3aGVuIHRoZXJlIG5vIGNoYW5nZXMgZGVkZWN0ZWQsIGZvciBpbml0aWFsaXphdGlvbiBwdXJwb3NlcyAoY291bnRlci9yZWNlbnRjYXNlcyBpbiBzaW1wbGVzZWFyY2gpXHJcbiAgICAgICAgICAgIHRoaXMub25hY2NvdW50c2NoYW5nZWQodGhpcy5zZWxlY3RlZEN1c3RvbWVycywgZmFsc2UgLyoqICoxICovKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbWVycyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbWVycztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQE1lbW9pemUoKVxyXG4gICAgcHVibGljIGdldCB1c2VyKCkge1xyXG4gICAgICAgIHZhciBwID0gdGhpcy5nZXRVc2VyKCk7XHJcbiAgICAgICAgcC5jYXRjaCgoKSA9PiB0aGlzLnVzZXIgPSBudWxsKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdXNlcihfKSB7IH1cclxuXHJcbiAgICBATWVtb2l6ZSgpXHJcbiAgICBwdWJsaWMgZ2V0IGN1c3RvbWVycygpIHtcclxuICAgICAgICB2YXIgcCA9IHRoaXMuZ2V0Q3VzdG9tZXJzKCk7XHJcbiAgICAgICAgcC5jYXRjaCgoKSA9PiB0aGlzLmN1c3RvbWVycyA9IG51bGwpO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjdXN0b21lcnMoXykge1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbWVycyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBlcnNvbk5hbWU6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9mb3JjZWRDdXN0b21lcjogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBnZXQgZm9yY2VkQ3VzdG9tZXIoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZm9yY2VkQ3VzdG9tZXI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGZvcmNlZEN1c3RvbWVyKGN1c3RvbWVyOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9mb3JjZWRDdXN0b21lciA9IGN1c3RvbWVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc2hvd0hlYWRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UudXNlcm5hbWUgJiZcclxuICAgICAgICAgICAgdGhpcy4kbG9jYXRpb24udXJsKCkuaW5kZXhPZihcIi9sb2dpblwiKSA9PSAtMSAmJlxyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwoKS5pbmRleE9mKFwiL25ld3Bhc3N3b3JkXCIpID09IC0xICYmXHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2F0aW9uLnVybCgpLmluZGV4T2YoXCIvZ29vZGJ5ZVwiKSA9PSAtMSAmJlxyXG4gICAgICAgICAgICB0aGlzLiRsb2NhdGlvbi51cmwoKS5pbmRleE9mKFwiL2ZvcmdvdHBhc3N3b3JkXCIpID09IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25BY2NvdW50c0NoYW5nZWRIYW5kbGVyczogKChzZWxlY3RlZDogeyBrZXk6IGFueSwgdGV4dDogc3RyaW5nIH1bXSkgPT4gdm9pZClbXSA9IFtdO1xyXG4gICAgcHVibGljIGFkZE9uQWNjb3VudHNDaGFuZ2VkKGhhbmRsZXI6IChzZWxlY3RlZDogeyBrZXk6IGFueSwgdGV4dDogc3RyaW5nIH1bXSkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcclxuICAgICAgICB0aGlzLm9uQWNjb3VudHNDaGFuZ2VkSGFuZGxlcnMucHVzaChoYW5kbGVyKVxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25BY2NvdW50c0NoYW5nZWRIYW5kbGVycyA9IHRoaXMub25BY2NvdW50c0NoYW5nZWRIYW5kbGVycy5maWx0ZXIoaCA9PiBoICE9IGhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRDdXN0b21lcnM6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgb25hY2NvdW50c2NoYW5nZWQoc2VsZWN0ZWQ6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10sIHNraXBPbk5vQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSwgYXV0b21hdGVkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICAvLyBGaWx0ZXIgbm9uZSBoYXZlIGNoYW5nZWQgZXZlbnRzLCBkdWUgdG8gdGhlIGJhZCBwcmVmb3JtYW5jZSBpbiBzb21lIG9mIGl0IGV2ZW50IGhhbmRsZXMgKHJlY2VudGNhc2VzICYgY291bnRlciBxdWVyaWVzIGJ5IHRoZSBzaW1wbGVzZWFyY2ggY29tcG9uZW50KS5cclxuICAgICAgICAvLyBBZGRlZCBza2lwT25Ob0NoYW5nZSBhcmd1bWVudCBkdWUgdG8gaW5pdGlhbGl6YXRpb24gb2Ygb3RoZXIgY29tcG9uZW50cy5cclxuICAgICAgICBpZiAoc2tpcE9uTm9DaGFuZ2UgJiYgdGhpcy5hcmVBY2NvdW50c0VxdWFsKHRoaXMuc2VsZWN0ZWRDdXN0b21lcnMsIHNlbGVjdGVkKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDdXN0b21lcnMgPSBzZWxlY3RlZDtcclxuICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEN1c3RvbWVycyA9IHNlbGVjdGVkO1xyXG4gICAgICAgIGlmICghYXV0b21hdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25BY2NvdW50c0NoYW5nZWRIYW5kbGVycy5mb3JFYWNoKGggPT4gaChzZWxlY3RlZCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgYXJlQWNjb3VudHNFcXVhbChvbGQ6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10sIGN1cnJlbnQ6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAob2xkID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAob2xkLmxlbmd0aCAhPSBjdXJyZW50Lmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBvbGQuZXZlcnkoeCA9PiBjdXJyZW50LmZpbHRlcih5ID0+IHgua2V5ID09IHkua2V5ICYmIHgudGV4dCA9PSB5LnRleHQpLmxlbmd0aCA9PSAxKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBvbmFjY291bnRjbGlja2VkKGtleTogYW55LCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ3VzdG9tZXJzID0gW3sga2V5OiBrZXksIHRleHQ6IHRleHQgfV07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgbGFzdFNlbGVjdGVkQ3VzdG9tZXJzKCk6IHsga2V5OiBhbnkgfVtdIHtcclxuICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFZhbHVlPGFueVtdPignc2VsZWN0ZWRDdXN0b21lcnMnKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWQgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0IGxhc3RTZWxlY3RlZEN1c3RvbWVycyh2YWw6IHsga2V5OiBhbnkgfVtdKSB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRWYWx1ZTxhbnlbXT4oJ3NlbGVjdGVkQ3VzdG9tZXJzJywgdmFsLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2ltcGxlU2VhcmNoTW9kZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHZhciBleHAgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFZhbHVlPG51bWJlcj4oJ3NpbXBsZVNlYXJjaE1vZGUnKTtcclxuICAgICAgICBpZiAoZXhwID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xyXG4gICAgICAgIHJldHVybiBleHA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBzaW1wbGVTZWFyY2hNb2RlKGV4cDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRWYWx1ZTxudW1iZXI+KCdzaW1wbGVTZWFyY2hNb2RlJywgZXhwLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2ltcGxlU2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIGV4cCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0VmFsdWU8c3RyaW5nPignc2ltcGxlU2VhcmNoU3RyaW5nJyk7XHJcbiAgICAgICAgaWYgKGV4cCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJcIjtcclxuICAgICAgICByZXR1cm4gZXhwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgc2ltcGxlU2VhcmNoU3RyaW5nKGV4cDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRWYWx1ZTxzdHJpbmc+KCdzaW1wbGVTZWFyY2hTdHJpbmcnLCBleHAsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcm9qZWN0U2VhcmNoTW9kZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHZhciBleHAgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFZhbHVlPG51bWJlcj4oJ3Byb2plY3RTZWFyY2hNb2RlJyk7XHJcbiAgICAgICAgaWYgKGV4cCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcclxuICAgICAgICByZXR1cm4gZXhwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgcHJvamVjdFNlYXJjaE1vZGUoZXhwOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnNldFZhbHVlPG51bWJlcj4oJ3Byb2plY3RTZWFyY2hNb2RlJywgZXhwLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJvamVjdFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBleHAgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFZhbHVlPHN0cmluZz4oJ3Byb2plY3RTZWFyY2hTdHJpbmcnKTtcclxuICAgICAgICBpZiAoZXhwID09PSB1bmRlZmluZWQpIHJldHVybiBcIlwiO1xyXG4gICAgICAgIHJldHVybiBleHA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBwcm9qZWN0U2VhcmNoU3RyaW5nKGV4cDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRWYWx1ZTxzdHJpbmc+KCdwcm9qZWN0U2VhcmNoU3RyaW5nJywgZXhwLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXJ2aWNlRGVza01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBhY3RpdmVNZW51SXRlbTogYW55ID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgZ28obG9jYXRpb246IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuJHJvb3RSb3V0ZXIubmF2aWdhdGVCeVVybChsb2NhdGlvbik7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSW5qZWN0LCBDb21wb25lbnQgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIlxyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCJcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IElzUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvaXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2dTZXJ2aWNlXCI7XHJcblxyXG50eXBlIHJlc2V0c3RhdHVzID0gXCJ1bmtub3duXCIgfCBcIm9rXCIgfCBcImZhaWxcIiB8IFwibm90dmFsaWRcIiB8IFwiY3VycmVudG5vdHZhbGlkXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwiY2hhbmdlUGFzc3dvcmRcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL2NoYW5nZVBhc3N3b3JkLmh0bWxcIixcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBhcHBsaWNhdGlvbjogXCJeYXBwbGljYXRpb25cIlxyXG4gICAgfVxyXG59KVxyXG5jbGFzcyBDaGFuZ2VQYXNzd29yZCB7XHJcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbjtcclxuICAgIHByaXZhdGUgYWN0aXZlTWVudUl0ZW06IHN0cmluZztcclxuICAgIHByaXZhdGUgb2xkcGFzc3dvcmQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgbmV3cGFzc3dvcmQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgY29uZmlybXBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGVycm9ydGV4dG9sZDogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgZXJyb3J0ZXh0bmV3OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBzdGF0dXM6IHJlc2V0c3RhdHVzID0gXCJ1bmtub3duXCI7XHJcbiAgICBwcml2YXRlIGZvcmNlVG9vbHRpcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBmb3JjZVRvb2x0aXAxOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGZvcmNlVG9vbHRpcDI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IG5nLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaXNQcm9jZXNzaW5nU2VydmljZTogSXNQcm9jZXNzaW5nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFJvdXRlcicpIHByaXZhdGUgJHJvb3RSb3V0ZXI6IGFuZ3VsYXIuUm91dGVyLFxyXG4gICAgICAgIEBJbmplY3QoJyR3aW5kb3cnKSBwcml2YXRlICR3aW5kb3c6IG5nLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIEF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgbG9nU2VydmljZTogTG9nU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5mb3JjZWRDdXN0b21lciA9ICcgJztcclxuICAgICAgICB0aGlzLmFjdGl2ZU1lbnVJdGVtID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLmZvcmNlZEN1c3RvbWVyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoYW5nZVBhc3N3b3JkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuSXNQcm9jZXNzaW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubmV3cGFzc3dvcmQgfHwgdGhpcy5uZXdwYXNzd29yZC5sZW5ndGggPCA4IHx8IHRoaXMubmV3cGFzc3dvcmQubGVuZ3RoID4gNTApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3J0ZXh0bmV3ID0gXCJORVdfUEFTU1dPUkRfTk9UX0FMTE9XRURcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gXCJub3R2YWxpZFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVRvb2x0aXAxID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VUb29sdGlwMiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0KFxyXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVRvb2x0aXAxID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVRvb2x0aXAyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5ld3Bhc3N3b3JkICE9PSB0aGlzLmNvbmZpcm1wYXNzd29yZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnRleHRuZXcgPSBcIk5FV19QQVNTV09SRFNfTk9UX1RIRV9TQU1FXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFwibm90dmFsaWRcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VUb29sdGlwMSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVG9vbHRpcDIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dChcclxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VUb29sdGlwMSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VUb29sdGlwMiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDBcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgdGhpcy5BdXRoZW50aWNhdGlvblNlcnZpY2UuY2hhbmdlUGFzc3dvcmQodGhpcy5BdXRoZW50aWNhdGlvblNlcnZpY2UudXNlcm5hbWUsIHRoaXMub2xkcGFzc3dvcmQsIHRoaXMubmV3cGFzc3dvcmQsIHRoaXMuYXBwbGljYXRpb24uU2V0dGluZ3MuY3VsdHVyZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93TWVzc2FnZURpYWxvZygnaW5mbycsICdJTkZPJywgJ1NBVkVfUEFTU1dPUkRfQ0hBTkdFX0NPTVBMRVRFRCcsIHsgdHJhbnNsYXRlOiB0cnVlLCBvbmNsb3NlOiAoKSA9PiB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlKFsnL0hvbWUnLCB7fV0pIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGVycm9yWydzdGF0dXMnXSA9PSA0MDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gXCJjdXJyZW50bm90dmFsaWRcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3J0ZXh0b2xkID0gXCJDVVJSRU5UX1BBU1NXT1JEX05PVF9WQUxJRFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVRvb2x0aXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dChcclxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VUb29sdGlwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gXCJmYWlsXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ0NoYW5nZVBhc3N3b3JkJywgJ0Vycm9yIGNoYW5naW5nIHBhc3N3b3JkJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnQ0hBTkdFX1BBU1NXT1JEX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uQ2hhbmdlT2xkKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5vbGRwYXNzd29yZCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZXJyb3J0ZXh0b2xkID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiY3VycmVudG5vdHZhbGlkXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBcInVua25vd25cIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZU5ldyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubmV3cGFzc3dvcmQgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmVycm9ydGV4dG5ldyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBcIm5vdHZhbGlkXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBcInVua25vd25cIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZU5ld0NvbmZpcm0odmFsdWUpIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm1wYXNzd29yZCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZXJyb3J0ZXh0bmV3ID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwibm90dmFsaWRcIikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFwidW5rbm93blwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYmFjaygpIHtcclxuICAgICAgICB0aGlzLiR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEluamVjdCwgQ29tcG9uZW50IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCJcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbG9nU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcImZvcmdvdFBhc3N3b3JkXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9mb3Jnb3RQYXNzd29yZC5odG1sXCIsXHJcbiAgICByZXF1aXJlOiB7XHJcbiAgICAgICAgYXBwbGljYXRpb246IFwiXmFwcGxpY2F0aW9uXCJcclxuICAgIH1cclxufSlcclxuY2xhc3MgRm9yZ290UGFzc3dvcmQge1xyXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcbiAgICBwcml2YXRlIGFjdGl2ZU1lbnVJdGVtOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHJlc2V0TGluazogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBlcnJvcnRleHRlbWFpbDogc3RyaW5nID0gXCJcIjtcclxuICAgIHByaXZhdGUgc2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc2Vycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBuZy5JUm9vdEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGlzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHdpbmRvdycpIHByaXZhdGUgJHdpbmRvdzogbmcuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgQXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLmZvcmNlZEN1c3RvbWVyID0gJyAnO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTWVudUl0ZW0gPSAnJztcclxuICAgICAgICB0aGlzLnJlc2V0TGluayA9IHRoaXMuJHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoXCJmb3Jnb3RwYXNzd29yZFwiLCBcIm5ld3Bhc3N3b3JkP3VzZXJuYW1lPXt1c2VybmFtZX0mdG9rZW49e3Rva2VufVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAkb25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24uZm9yY2VkQ3VzdG9tZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcmVxdWVzdFJlc2V0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVtYWlsLmxlbmd0aCA8IDUgfHwgdGhpcy5lbWFpbC5sZW5ndGggPiAyNTApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnRleHRlbWFpbCA9IFwiV1JPTkdfRU1BSUxfRk9STUFUXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RXJyb3JDbGFzcygnZW1haWwnKTtcclxuICAgICAgICAgICAgdGhpcy5pc2Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuQXV0aGVudGljYXRpb25TZXJ2aWNlLnJlc2V0UGFzc3dvcmQodGhpcy5lbWFpbCwgdGhpcy5yZXNldExpbmssIHRoaXMuYXBwbGljYXRpb24uU2V0dGluZ3MuY3VsdHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VudCA9IHRydWU7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5zZXRTZXFVcmwoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ0ZvcmdvdFBhc3N3b3JkJywgJ0Vycm9yIHJlc2V0dGluZyBwYXNzd29yZCcsIGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnUEFTU1dPUkRfUkVTRVRfRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pXHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEVycm9yQ2xhc3MoY2xhc3NuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQodGhpcy4kZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzbmFtZSkuaXRlbSgwKSkuYWRkQ2xhc3MoJ2Vycm9yJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhckVycm9yQ2xhc3MoY2xhc3NuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQodGhpcy4kZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzbmFtZSkuaXRlbSgwKSkucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZUVtYWlsKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmVtYWlsID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5lcnJvcnRleHRlbWFpbCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5jbGVhckVycm9yQ2xhc3MoJ2VtYWlsJyk7XHJcbiAgICAgICAgdGhpcy5pc2Vycm9yID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJhY2soKSB7XHJcbiAgICAgICAgdGhpcy4kd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iLCLvu79pbXBvcnQgeyBJbmplY3QsIENvbXBvbmVudCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiXHJcbmltcG9ydCB7IElSb3V0aW5nQ29tcG9uZW50LCBSb3V0ZUNvbmZpZyB9IGZyb20gXCJAZmlxYXMvbmdjb21wb25lbnRyb3V0ZXJcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuXHJcbnR5cGUgcmVzZXRzdGF0dXMgPSBcInVua25vd25cIiB8IFwib2tcIiB8IFwiZmFpbFwiIHwgXCJub3R2YWxpZFwiIHwgXCJlZGl0XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwibmV3UGFzc3dvcmRcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL25ld1Bhc3N3b3JkLmh0bWxcIixcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBhcHBsaWNhdGlvbjogXCJeYXBwbGljYXRpb25cIlxyXG4gICAgfVxyXG59KVxyXG5cclxuXHJcbmNsYXNzIE5ld1Bhc3N3b3JkIGltcGxlbWVudHMgSVJvdXRpbmdDb21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcbiAgICBwcml2YXRlIGFjdGl2ZU1lbnVJdGVtOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIG5ld3Bhc3N3b3JkOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHRva2VuOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGNvbmZpcm1wYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBlcnJvcnRleHRuZXc6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIHN0YXR1czogcmVzZXRzdGF0dXMgPSBcInVua25vd25cIjtcclxuICAgIHByaXZhdGUgZm9yY2VUb29sdGlwMTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBmb3JjZVRvb2x0aXAyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBuZy5JUm9vdEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGlzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHJvb3RSb3V0ZXInKSBwcml2YXRlICRyb290Um91dGVyOiBhbmd1bGFyLlJvdXRlcixcclxuICAgICAgICBASW5qZWN0KCckd2luZG93JykgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBBdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5mb3JjZWRDdXN0b21lciA9ICcgJztcclxuICAgICAgICB0aGlzLmFjdGl2ZU1lbnVJdGVtID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLmZvcmNlZEN1c3RvbWVyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJHJvdXRlck9uQWN0aXZhdGUobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKTogbmcuSVByb21pc2U8YW55PiB8IGFueSB7XHJcbiAgICAgICAgdGhpcy50b2tlbiA9IGRlY29kZVVSSUNvbXBvbmVudChuZXh0LnBhcmFtc1tcInRva2VuXCJdKTtcclxuICAgICAgICB0aGlzLnVzZXJuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KG5leHQucGFyYW1zW1widXNlcm5hbWVcIl0pO1xyXG5cclxuICAgICAgICBpZiAoKCF0aGlzLnRva2VuIHx8IHRoaXMudG9rZW4gPT09IFwidW5kZWZpbmVkXCIgfHwgdGhpcy50b2tlbiA9PT0gXCJ0cnVlXCIpIHx8ICghdGhpcy51c2VybmFtZSB8fCB0aGlzLnVzZXJuYW1lID09PSBcInVuZGVmaW5lZFwiIHx8IHRoaXMudXNlcm5hbWUgPT09IFwidHJ1ZVwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlKFsnSG9tZSddKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBjaGFuZ2VQYXNzd29yZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5uZXdwYXNzd29yZC5sZW5ndGggPCA4IHx8IHRoaXMubmV3cGFzc3dvcmQubGVuZ3RoID4gNTApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvcnRleHRuZXcgPSBcIk5FV19QQVNTV09SRF9OT1RfQUxMT1dFRFwiO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFwibm90dmFsaWRcIjtcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVRvb2x0aXAxID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVRvb2x0aXAyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dChcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVG9vbHRpcDEgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VUb29sdGlwMiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLm5ld3Bhc3N3b3JkICE9PSB0aGlzLmNvbmZpcm1wYXNzd29yZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9ydGV4dG5ldyA9IFwiTkVXX1BBU1NXT1JEU19OT1RfVEhFX1NBTUVcIjtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBcIm5vdHZhbGlkXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VUb29sdGlwMSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VUb29sdGlwMiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVRvb2x0aXAxID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVG9vbHRpcDIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMDBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkF1dGhlbnRpY2F0aW9uU2VydmljZS5jaGFuZ2VQYXNzd29yZFdpdGhSZXNldFRva2VuKHRoaXMudXNlcm5hbWUsIHRoaXMubmV3cGFzc3dvcmQsIHRoaXMudG9rZW4sIHRoaXMuYXBwbGljYXRpb24uU2V0dGluZ3MuY3VsdHVyZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IFwib2tcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gXCJmYWlsXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uQ2hhbmdlQ29uZmlybSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY29uZmlybXBhc3N3b3JkID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5lcnJvcnRleHRuZXcgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gXCJlZGl0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZU5ldyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubmV3cGFzc3dvcmQgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmVycm9ydGV4dG5ldyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBcImVkaXRcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYmFjaygpIHtcclxuICAgICAgICB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlKFsnTG9naW4nXSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElSb3V0aW5nQ29tcG9uZW50IH0gZnJvbSBcIkBmaXFhcy9uZ2NvbXBvbmVudHJvdXRlclwiXHJcbmltcG9ydCB7IEluamVjdCwgQ29tcG9uZW50IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXNzaW9uXCI7XHJcbmltcG9ydCB7IEhvbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9ob21lU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGFydFZlcnNpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3ZlcnNpb25cIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJsb2dpblwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmlld3MvbG9naW4uaHRtbFwiLFxyXG4gICAgYmluZGluZ3M6IHsgJHJvdXRlcjogJzwnIH1cclxufSlcclxuXHJcbmNsYXNzIExvZ2luIGltcGxlbWVudHMgSVJvdXRpbmdDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHdpbmRvdycpIHByaXZhdGUgJHdpbmRvdzogbmcuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHJvb3RTY29wZScpIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckbG9jYXRpb24nKSBwcml2YXRlICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290Um91dGVyJykgcHJpdmF0ZSAkcm9vdFJvdXRlcjogYW5ndWxhci5Sb3V0ZXIsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaG9tZVNlcnZpY2U6IEhvbWVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNvdXJjZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBpc1dyb25nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgJHJvdXRlckNhblJldXNlKG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbik6IG5nLklQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBkZWNvZGVVUklDb21wb25lbnQobmV4dC5wYXJhbXNbJ3NvdXJjZSddKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgJHJvdXRlck9uQWN0aXZhdGUobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBkZWNvZGVVUklDb21wb25lbnQobmV4dC5wYXJhbXNbJ3NvdXJjZSddKTtcclxuICAgICAgICBpZiAodGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuaXNBbGl2ZSgpKSB7XHJcbiAgICAgICAgICAgICBhd2FpdCB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLnJvbGVMb2FkZWQ7XHJcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb05leHRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25SZXVzZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNvdXJjZSA9IGRlY29kZVVSSUNvbXBvbmVudChuZXh0LnBhcmFtc1snc291cmNlJ10pO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5pc0FsaXZlKCkpIHtcclxuICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSAkcm91dGVyOiBhbmd1bGFyLlJvdXRlcjtcclxuXHJcbiAgICBwdWJsaWMgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJSRU1FTUJFUlVTRVJcIik7XHJcbiAgICAgICAgdGhpcy5wZXJzaXN0ZW50ID0gISFsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlJFTUVNQkVSTUVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jICRwb3N0TGluaygpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuaXNBbGl2ZSgpKSB7XHJcbiAgICAgICAgICAgICBhd2FpdCB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLnJvbGVMb2FkZWQ7XHJcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb05leHRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVkaXJlY3RUb05leHRQYWdlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLiRsb2NhdGlvbi51cmwoKS5pbmRleE9mKFwiL2xvZ2luXCIpID49IDAgfHwgdGhpcy4kbG9jYXRpb24udXJsKCkuaW5kZXhPZihcIi9nb29kYnllXCIpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kcm9vdFJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuc291cmNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHJvb3RSb3V0ZXIubmF2aWdhdGUoW1wiSG9tZVwiLCB7IG1lbnU6IHRydWUgfV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2dpbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xvZ2dpbmdJbikge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dnaW5nSW4gPSB0cnVlO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRlKHsgdXNlcm5hbWU6IHRoaXMudXNlcm5hbWUsIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkIH0sIHRoaXMucGVyc2lzdGVudCB8fCBmYWxzZSlcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob21lU2VydmljZS5maXFhc3Npc3RBcGlWZXJzaW9uID09IEhvbWVTZXJ2aWNlLkFwaU5vdEF2YWlsaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG9tZVNlcnZpY2UucmVjaWV2ZUFQSVZlcnNpb24oKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiUkVNRU1CRVJVU0VSXCIsIHRoaXMudXNlcm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJSRU1FTUJFUk1FXCIsICh0aGlzLnBlcnNpc3RlbnQpID8gXCIxXCIgOiBcIlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvTmV4dFBhZ2UoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAocmVhc29uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzV3JvbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2luZ0luID0gZmFsc2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9sb2dnaW5nSW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgdXNlcm5hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyBwYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcHVibGljIHBlcnNpc3RlbnQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBvblVzZXJDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJuYW1lID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5pc1dyb25nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblBhc3N3b3JkQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwZXJzaXN0ZW50Q2hhbmdlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGVyc2lzdGVudCA9IHZhbHVlO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCJcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwibG9nb3V0XCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9nb29kYnllLmh0bWxcIixcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBhcHBsaWNhdGlvbjogXCJeYXBwbGljYXRpb25cIlxyXG4gICAgfVxyXG59KVxyXG5jbGFzcyBMb2dvdXQge1xyXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgICAgYXV0aGVudGljYXRpb25TZXJ2aWNlLmxvZ291dCg1MDAwKTtcclxuICAgIH1cclxuXHJcbiAgICAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24uZm9yY2VkQ3VzdG9tZXIgPSAnICc7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLmZvcmNlZEN1c3RvbWVyID0gbnVsbDtcclxuICAgIH1cclxufSIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IElSb3V0aW5nQ29tcG9uZW50LCBSb3V0ZUNvbmZpZyB9IGZyb20gXCJAZmlxYXMvbmdjb21wb25lbnRyb3V0ZXJcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi9hcHBsaWNhdGlvblwiXHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3NlcnZpY2VDYXNlU2VydmljZVwiXHJcbmltcG9ydCB7IENvbnRyb2xCYXNlIH0gZnJvbSBcIi4uL2dlbmVyYWwvY29udHJvbEJhc2VcIlxyXG5pbXBvcnQgeyBTYXZlRGlhbG9nIH0gZnJvbSBcIi4uL2dlbmVyYWwvc2F2ZWRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcImNvbXBsYWludEJhc2VcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL2VkaXRsYXlvdXQuaHRtbFwiXHJcbn0pXHJcbkBSb3V0ZUNvbmZpZyhbXHJcbiAgICB7IHBhdGg6ICcvbmV3JywgbmFtZTogXCJOZXdcIiwgY29tcG9uZW50OiBcImNvbXBsYWludEVudHJ5XCIsIHVzZUFzRGVmYXVsdDogdHJ1ZSB9LFxyXG4gICAgeyBwYXRoOiAnL2VkaXQvOm51bWJlcicsIG5hbWU6IFwiRWRpdFwiLCBjb21wb25lbnQ6IFwiY29tcGxhaW50RWRpdFwiIH0sXHJcbl1cclxuKVxyXG5leHBvcnQgY2xhc3MgQ29tcGxhaW50QmFzZSBleHRlbmRzIENvbnRyb2xCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBzYXZlRGlhbG9nOiBTYXZlRGlhbG9nLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290Um91dGVyJykgcm9vdFJvdXRlcjogYW5ndWxhci5Sb3V0ZXIsXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSB0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoc2F2ZURpYWxvZywgcm9vdFJvdXRlciwgdGltZW91dCwgYXV0aG9yaXphdGlvblNlcnZpY2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIlxyXG5pbXBvcnQgeyBDb21wbGFpbnREYXRhLCBDb21wbGFpbnQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbXBsYWludFwiXHJcbmltcG9ydCB7IENvbXBsYWludEJhc2UgfSBmcm9tIFwiLi9jb21wbGFpbnRCYXNlXCJcclxuaW1wb3J0IHsgSXNQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9pc1Byb2Nlc3NpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NlcnZpY2VCYXNlXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwiY29tcGxhaW50RW50cnlcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL2NvbXBsYWludC5lbnRyeS5odG1sXCIsXHJcbiAgICByZXF1aXJlOiB7XHJcbiAgICAgICAgYXBwbGljYXRpb246IFwiXmFwcGxpY2F0aW9uXCIsXHJcbiAgICAgICAgYmFzZTogXCJeY29tcGxhaW50QmFzZVwiXHJcbiAgICB9XHJcbn0pXHJcbmNsYXNzIFByb2JsZW1FbnRyeSBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgcHJpdmF0ZSAkcm91dGVyOiBuZy5Sb3V0ZXI7XHJcbiAgICBwdWJsaWMgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uO1xyXG4gICAgcHJpdmF0ZSBiYXNlOiBDb21wbGFpbnRCYXNlXHJcbiAgICBwcml2YXRlIGNpZDogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHNlcnZpY2VDYXNlU2VydmljZTogU2VydmljZUNhc2VTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR3aW5kb3cnKSBwcml2YXRlICR3aW5kb3c6IG5nLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRlbGVtZW50JykgcHJvdGVjdGVkICRlbGVtZW50OiBuZy5JUm9vdEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290Um91dGVyJykgcHJpdmF0ZSAkcm9vdFJvdXRlcjogYW5ndWxhci5Sb3V0ZXIsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaXNQcm9jZXNzaW5nU2VydmljZTogSXNQcm9jZXNzaW5nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21wbGFpbnREYXRhID0gPENvbXBsYWludERhdGE+e1xyXG4gICAgICAgICAgICBDb250ZW50OiBcIlwiLFxyXG4gICAgICAgICAgICBjcmVhdGVkT246IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY3JlYXRlZEJ5OiB1bmRlZmluZWRcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdXN0b21lcnMgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uLmN1c3RvbWVycztcclxuICAgICAgICB2YXIgY3VzdCA9IGN1c3RvbWVycy5sZW5ndGggPT0gMSA/IGN1c3RvbWVyc1swXSA6IGN1c3RvbWVycy5maWx0ZXIoYyA9PiBjLmNoZWNrZWQpLmxlbmd0aCA9PSAxID8gY3VzdG9tZXJzLmZpbHRlcihjID0+IGMuY2hlY2tlZCkuc2hpZnQoKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGN1c3QpXHJcbiAgICAgICAgICAgIHRoaXMuY2lkID0gY3VzdC5rZXk7XHJcbiAgICAgICAgdGhpcy5iYXNlLlRpdGxlID0gXCJJX1dBTlRfVE9fSVNTVUVfQV9DT01QTEFJTlRcIjtcclxuICAgICAgICB0aGlzLmJhc2UuYWN0aXZlTWVudUl0ZW0gPSAnY29tcGxhaW50JztcclxuICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICRvbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5iYXNlLmFjdGl2ZU1lbnVJdGVtID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnRlbnRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jb21wbGFpbnREYXRhLkNvbnRlbnQgIT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGFpbnREYXRhLkNvbnRlbnQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY3VzdG9tZXJjaGFuZ2VkKGN1c3RvbWVyS2V5czogYW55W10pIHtcclxuICAgICAgICB2YXIgc2VsID0gKGN1c3RvbWVyS2V5cyAmJiBjdXN0b21lcktleXMubGVuZ3RoID4gMCkgPyBjdXN0b21lcktleXNbMF0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNpZCA9IHNlbDtcclxuICAgICAgICAgICAgaWYgKChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uLmN1c3RvbWVycykubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNpZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb21wbGFpbnREYXRhOiBDb21wbGFpbnREYXRhXHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNhdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGUoKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuTmV3Q29tcGxhaW50KHRoaXMuY2lkLCB0aGlzLmNvbXBsYWludERhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93TWVzc2FnZURpYWxvZygnaW5mbycsICdUSFgnLCAnU0FWRV9DT01QTEFJTlRfVEhYJywgeyB0cmFuc2xhdGU6IHRydWUsIG9uY2xvc2U6ICgpID0+IHRoaXMuJHJvb3RSb3V0ZXIubmF2aWdhdGUoWycvSG9tZScsIHt9XSkgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoU2VydmljZVV0aWxzLklzVW5hdXRob3JpemVkUmVzcG9uc2UoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ0NvbXBsYWludEVudHJ5JywgJ0Vycm9yIHNhdmluZyBjb21wbGFpbnQnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdTQVZFX0NPTVBMQUlOVF9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5jb21wbGFpbnREYXRhLkNvbnRlbnQgJiYgdGhpcy5jb21wbGFpbnREYXRhLkNvbnRlbnQubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmNsZWFyRXJyb3JDbGFzcyh0aGlzLiRlbGVtZW50LCAnZWRpdGNvbnRlbnQnKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLnNldEVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRjb250ZW50Jyk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jaWQpXHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5jbGVhckVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRjdXN0b21lcicpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2Uuc2V0RXJyb3JDbGFzcyh0aGlzLiRlbGVtZW50LCAnZWRpdGN1c3RvbWVyJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiYWNrKCkge1xyXG4gICAgICAgIHRoaXMuYmFzZS5nb0hvbWUoKTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBJUm91dGluZ0NvbXBvbmVudCwgUm91dGVDb25maWcgfSBmcm9tIFwiQGZpcWFzL25nY29tcG9uZW50cm91dGVyXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgQ29udHJvbEJhc2UgfSBmcm9tIFwiLi4vZ2VuZXJhbC9jb250cm9sQmFzZVwiXHJcbmltcG9ydCB7IFNhdmVEaWFsb2cgfSBmcm9tIFwiLi4vZ2VuZXJhbC9zYXZlZGlhbG9nXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwiY29tcGxpbWVudEJhc2VcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL2VkaXRsYXlvdXQuaHRtbFwiXHJcbn0pXHJcbkBSb3V0ZUNvbmZpZyhbXHJcbiAgICB7IHBhdGg6ICcvbmV3JywgbmFtZTogXCJOZXdcIiwgY29tcG9uZW50OiBcImNvbXBsaW1lbnRFbnRyeVwiLCB1c2VBc0RlZmF1bHQ6IHRydWUgfSxcclxuICAgIHsgcGF0aDogJy9lZGl0LzpudW1iZXInLCBuYW1lOiBcIkVkaXRcIiwgY29tcG9uZW50OiBcImNvbXBsaW1lbnRFZGl0XCIgfSxcclxuXVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBDb21wbGltZW50QmFzZSBleHRlbmRzIENvbnRyb2xCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBzYXZlRGlhbG9nOiBTYXZlRGlhbG9nLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290Um91dGVyJykgcm9vdFJvdXRlcjogYW5ndWxhci5Sb3V0ZXIsXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSB0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoc2F2ZURpYWxvZywgcm9vdFJvdXRlciwgdGltZW91dCwgYXV0aG9yaXphdGlvblNlcnZpY2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIlxyXG5pbXBvcnQgeyBDb21wbGltZW50RGF0YSwgQ29tcGxpbWVudCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tcGxpbWVudFwiXHJcbmltcG9ydCB7IENvbXBsaW1lbnRCYXNlIH0gZnJvbSBcIi4vY29tcGxpbWVudEJhc2VcIlxyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2VydmljZUJhc2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJjb21wbGltZW50RW50cnlcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL2NvbXBsaW1lbnQuZW50cnkuaHRtbFwiLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiBcIl5hcHBsaWNhdGlvblwiLFxyXG4gICAgICAgIGJhc2U6IFwiXmNvbXBsaW1lbnRCYXNlXCJcclxuICAgIH1cclxufSlcclxuY2xhc3MgQ29tcGxpbWVudEVudHJ5IGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBwcml2YXRlICRyb3V0ZXI6IG5nLlJvdXRlcjtcclxuICAgIHB1YmxpYyBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcbiAgICBwcml2YXRlIGJhc2U6IENvbXBsaW1lbnRCYXNlO1xyXG4gICAgcHJpdmF0ZSBjaWQ6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBzZXJ2aWNlQ2FzZVNlcnZpY2U6IFNlcnZpY2VDYXNlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckd2luZG93JykgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByb3RlY3RlZCAkZWxlbWVudDogbmcuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFJvdXRlcicpIHByaXZhdGUgJHJvb3RSb3V0ZXI6IGFuZ3VsYXIuUm91dGVyLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGlzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlXHJcblxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbXBsaW1lbnREYXRhID0gPENvbXBsaW1lbnREYXRhPntcclxuICAgICAgICAgICAgQ29udGVudDogXCJcIixcclxuICAgICAgICAgICAgY3JlYXRlZE9uOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRCeTogdW5kZWZpbmVkLFxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY3VzdG9tZXJzID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi5jdXN0b21lcnM7XHJcbiAgICAgICAgdmFyIGN1c3QgPSBjdXN0b21lcnMubGVuZ3RoID09IDEgPyBjdXN0b21lcnNbMF0gOiBjdXN0b21lcnMuZmlsdGVyKGMgPT4gYy5jaGVja2VkKS5sZW5ndGggPT0gMSA/IGN1c3RvbWVycy5maWx0ZXIoYyA9PiBjLmNoZWNrZWQpLnNoaWZ0KCkgOiBudWxsO1xyXG4gICAgICAgIGlmIChjdXN0KVxyXG4gICAgICAgICAgICB0aGlzLmNpZCA9IGN1c3Qua2V5O1xyXG4gICAgICAgIHRoaXMuYmFzZS5UaXRsZSA9IFwiSV9XQU5UX1RPX0dJVkVfQV9DT01QTElNRU5UXCI7XHJcbiAgICAgICAgdGhpcy5iYXNlLmFjdGl2ZU1lbnVJdGVtID0gJ2NvbXBsaW1lbnQnO1xyXG4gICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmJhc2UuYWN0aXZlTWVudUl0ZW0gPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udGVudENoYW5nZWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbXBsaW1lbnREYXRhLkNvbnRlbnQgIT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGltZW50RGF0YS5Db250ZW50ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGN1c3RvbWVyY2hhbmdlZChjdXN0b21lcktleXM6IGFueVtdKSB7XHJcbiAgICAgICAgdmFyIHNlbCA9IChjdXN0b21lcktleXMgJiYgY3VzdG9tZXJLZXlzLmxlbmd0aCA+IDApID8gY3VzdG9tZXJLZXlzWzBdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5jaWQgPSBzZWw7XHJcbiAgICAgICAgICAgIGlmICgoYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi5jdXN0b21lcnMpLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcGxpbWVudERhdGE6IENvbXBsaW1lbnREYXRhXHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNhdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGUoKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuTmV3Q29tcGxpbWVudCh0aGlzLmNpZCwgdGhpcy5jb21wbGltZW50RGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dNZXNzYWdlRGlhbG9nKCdpbmZvJywgJ1RIWCcsICdTQVZFX0NPTVBMSU1FTlRfVEhYJywgeyB0cmFuc2xhdGU6IHRydWUsIG9uY2xvc2U6ICgpID0+IHRoaXMuJHJvb3RSb3V0ZXIubmF2aWdhdGUoWycvSG9tZScsIHt9XSkgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoU2VydmljZVV0aWxzLklzVW5hdXRob3JpemVkUmVzcG9uc2UoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ0NvbXBsaW1lbnRFbnRyeScsICdFcnJvciBzYXZpbmcgY29tcGxpbWVudCcsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3JEaWFsb2coJ2Vycm9yJywgJ0VSUk9SJywgJ1NBVkVfQ09NUExJTUVOVF9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXN1bHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbXBsaW1lbnREYXRhLkNvbnRlbnQgJiYgdGhpcy5jb21wbGltZW50RGF0YS5Db250ZW50Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5jbGVhckVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRjb250ZW50Jyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5zZXRFcnJvckNsYXNzKHRoaXMuJGVsZW1lbnQsICdlZGl0Y29udGVudCcpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2lkKVxyXG4gICAgICAgICAgICB0aGlzLmJhc2UuY2xlYXJFcnJvckNsYXNzKHRoaXMuJGVsZW1lbnQsICdlZGl0Y3VzdG9tZXInKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLnNldEVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRjdXN0b21lcicpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYmFjaygpIHtcclxuICAgICAgICB0aGlzLmJhc2UuZ29Ib21lKCk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSUNvbXBvbmVudCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPdXRwdXQsIEF0dHJpYnV0ZSwgT3V0cHV0QXJncyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBEcm9wZG93bkVudHJ5IH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xzL2Ryb3Bkb3duYm94XCI7XHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvVHJhbnNsYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENhc2VUeXBlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcImNhc2V0eXBlZHJvcGRvd25ib3hcIixcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgICAgIDxkcm9wZG93bmJveFxyXG4gICAgICAgICAgICAgICAgdmFsdWUtc3VibWl0PVwiJGN0cmwucGFzc1ZhbHVlU3VibWl0KHNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiIHRyYW5zbGF0ZT1cInRydWVcIiBtdWx0aXNlbGVjdHRleHQ9XCInTVVMVElQTEVfRU5WSVJPTk1FTlRTX1NFTEVDVEVEJ1wiXHJcbiAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdD1cIiRjdHJsLm11bHRpc2VsZWN0XCIgaGludD1cIidQbGVhc2UgY2hvb3NlIGFuIHByaW9yaXR5J1wiIHNob3ctY2xlYXI9XCJ7eyRjdHJsLnNob3dDbGVhcn19XCJcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkPVwiJGN0cmwuX2Nhc2VUeXBlc1wiIGl0ZW1zPVwiJGN0cmwuaXRlbXNcIiBvbnNlbGVjdGlvbmNoYW5nZWQ9XCIkY3RybC5jYXNldHlwZXNzZWxlY3RlZChzZWxlY3RlZClcIj48L2Ryb3Bkb3duYm94PmBcclxufSlcclxuY2xhc3MgQ2FzZVR5cGVEcm9wZG93bkJveCBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfY2FzZVR5cGVzOiB7IGtleTogQ2FzZVR5cGUsIHRleHQ6IHN0cmluZyB9W107XHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIEFMTF9DQVNFVFlQRVNfU0VMRUNURUQgPSBcIkFMTF9DQVNFVFlQRVNfU0VMRUNURURcIlxyXG4gICAgcHJpdmF0ZSBNVUxUSVBMRV9DQVNFVFlQRVNfU0VMRUNURUQgPSBcIk1VTFRJUExFX0NBU0VUWVBFU19TRUxFQ1RFRFwiXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gPHsga2V5OiBDYXNlVHlwZSwgdGV4dDogc3RyaW5nIH1bXT5bXHJcbiAgICAgICAgICAgIHsga2V5OiAnYnVnJywgdGV4dDogJ0JVRycgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdyZXF1ZXN0JywgdGV4dDogJ1JFUVVFU1QnIH0sXHJcbiAgICAgICAgICAgIC8veyBrZXk6ICdzdXBwb3J0JywgdGV4dDogJ1NVUFBPUlQnIH0sXHJcbiAgICAgICAgXS5zb3J0KChhLCBiKSA9PiBhLmtleSA+IGIua2V5ID8gMSA6IC0xKTtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZUl0ZW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbXVsdGlzZWxlY3Q6Ym9vbGVhbjtcclxuICAgIEBBdHRyaWJ1dGUoKSBzZXQgbXVsdGlzZWxlY3QodmFsOiBib29sZWFuIHwgc3RyaW5nKXtcclxuICAgICAgICB0aGlzLl9tdWx0aXNlbGVjdCA9IHZhbCA9PT0gXCJ0cnVlXCIgfHwgdmFsID09PSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZ2V0IG11bHRpc2VsZWN0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpc2VsZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdHJhbnNsYXRlSXRlbXMoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uub25Mb2FkZWQ7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMubWFwKGkgPT4geyBpLnRleHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoaS50ZXh0KTsgcmV0dXJuIGk7IH0pLnNvcnQoKGEsIGIpID0+IGEudGV4dCA+IGIudGV4dCA/IDEgOiAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgY2FzZXR5cGVzKCk6IHsga2V5OiBDYXNlVHlwZSwgdGV4dDogc3RyaW5nIH1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nhc2VUeXBlcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY2FzZXR5cGVzKGNhc2V0eXBlczogeyBrZXk6IENhc2VUeXBlLCB0ZXh0OiBzdHJpbmcgfVtdKSB7XHJcbiAgICAgICAgdGhpcy5fY2FzZVR5cGVzID0gY2FzZXR5cGVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2hvd0NsZWFyO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgc2hvd0NsZWFyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93Q2xlYXI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dDbGVhcih2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zaG93Q2xlYXIgPSB2YWwgPT09IHRydWUgfHwgdmFsID09PSBcInRydWVcIjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXRlbXM6IHsga2V5OiBDYXNlVHlwZSwgdGV4dDogc3RyaW5nIH1bXTtcclxuXHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNhc2V0eXBlc0NoYW5nZWQ6IE91dHB1dEFyZ3M8eyBjYXNldHlwZXM6IGFueVtdIH0+O1xyXG4gICAgcHVibGljIGNhc2V0eXBlc3NlbGVjdGVkKHNlbGVjdGVkOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuY2FzZXR5cGVzID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5vbkNhc2V0eXBlc0NoYW5nZWQoeyBjYXNldHlwZXM6IHRoaXMuY2FzZXR5cGVzIH0pO1xyXG4gICAgfVxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZVN1Ym1pdDogT3V0cHV0QXJnczx7IGNhc2V0eXBlczogYW55W10gfT47XHJcbiAgICBwdWJsaWMgcGFzc1ZhbHVlU3VibWl0KHNlbGVjdGVkOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuY2FzZXR5cGVzID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVTdWJtaXQpIHRoaXMudmFsdWVTdWJtaXQoeyBjYXNldHlwZXM6IHRoaXMuY2FzZXR5cGVzIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IElSb3V0aW5nQ29tcG9uZW50LCBSb3V0ZUNvbmZpZyB9IGZyb20gXCJAZmlxYXMvbmdjb21wb25lbnRyb3V0ZXJcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgU2F2ZURpYWxvZyB9IGZyb20gXCIuL3NhdmVkaWFsb2dcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnRyb2xCYXNlIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgc2F2ZURpYWxvZzogU2F2ZURpYWxvZyxcclxuICAgICAgICBwcm90ZWN0ZWQgJHJvb3RSb3V0ZXI6IG5nLlJvdXRlcixcclxuICAgICAgICBwcm90ZWN0ZWQgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyAkb25Jbml0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyAkb25EZXN0cm95KCkge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogY2FsbGVkIHRvIHRvIGRldGVybWluZSB3aGV0aGVyIGEgQ29tcG9uZW50IGNhbiBiZSByZXVzZWQgYWNyb3NzIFJvdXRlIERlZmluaXRpb25zIHRoYXQgbWF0Y2ggdGhlIHNhbWUgdHlwZSBvZiBDb21wb25lbnQsIG9yIHdoZXRoZXIgdG8gZGVzdHJveSBhbmQgaW5zdGFudGlhdGUgYSBuZXcgQ29tcG9uZW50IGV2ZXJ5IHRpbWUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyAkcm91dGVyQ2FuUmV1c2UobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKTogbmcuSVByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogY2FsbGVkIGJ5IHRoZSBSb3V0ZXIgYXQgdGhlIGVuZCBvZiBhIHN1Y2Nlc3NmdWwgbmF2aWdhdGlvbi4gT25seSBvbmUgb2YgJHJvdXRlck9uQWN0aXZhdGUgYW5kICRyb3V0ZXJPblJldXNlIHdpbGwgYmUgY2FsbGVkIGRlcGVuZGluZyB1cG9uIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvICRyb3V0ZXJDYW5SZXVzZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jICRyb3V0ZXJPbkFjdGl2YXRlKG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICBhd2FpdCB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLnJvbGVMb2FkZWQ7XHJcbiAgICAgICAgbGV0IGEgPSBuZXh0O1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBjYWxsZWQgYnkgdGhlIFJvdXRlciBhdCB0aGUgZW5kIG9mIGEgc3VjY2Vzc2Z1bCBuYXZpZ2F0aW9uLiBPbmx5IG9uZSBvZiAkcm91dGVyT25BY3RpdmF0ZSBhbmQgJHJvdXRlck9uUmV1c2Ugd2lsbCBiZSBjYWxsZWQgZGVwZW5kaW5nIHVwb24gdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gJHJvdXRlckNhblJldXNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgJHJvdXRlT25SZXVzZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgICAgIGxldCBiID0gbmV4dDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgJHJvdXRlckNhbkRlYWN0aXZhdGUobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYXZlRGlhbG9nLlNhdmUoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzID0gcmVzdWx0ID09PSBTYXZlRGlhbG9nLkRpc2NhcmQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlydHkgPSByZXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgyNSkuZmluYWxseSgoKSA9PiByZXNvbHZlKHJlcykpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsgcmV0dXJuIGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljICRjYW5BY3RpdmF0ZSA9IEF1dGhvcml6YXRpb25TZXJ2aWNlLlJvbGVDaGVjaztcclxuXHJcbiAgICBwdWJsaWMgZ29Ib21lKCkge1xyXG4gICAgICAgIHRoaXMuJHJvb3RSb3V0ZXIubmF2aWdhdGUoW1wiSG9tZVwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEVycm9yQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzbmFtZSkuaXRlbSgwKSkuYWRkQ2xhc3MoJ2Vycm9yJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyRXJyb3JDbGFzcyhlbGVtZW50LCBjbGFzc25hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGFuZ3VsYXIuZWxlbWVudChlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NuYW1lKS5pdGVtKDApKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgVGl0bGU6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIFRpdGxlMjogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgU3RhdHVzOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgcHVibGljIGFjdGl2ZU1lbnVJdGVtOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaGlnaGxpZ2h0TWVudUl0ZW06IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuZGlydHk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGlzRGlydHkodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5kaXJ0eSA9IHZhbDtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE91dHB1dCwgQmluZGluZyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiXHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIlxyXG5pbXBvcnQgeyBGaWxlSXRlbSB9IGZyb20gXCIuL2ZpbGVEcm9wZG93bkxpc3RcIlxyXG5pbXBvcnQgeyBJSWRlbnRpdHlMaW5rLCBJUmVzb3VyY2VSZXNvbHZlciB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2lGcXNcIlxyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXNzaW9uXCJcclxuaW1wb3J0ICogYXMgUnggZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgUGVyc29uIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wZXJzb25cIjtcclxuaW1wb3J0IHsgY29uY2F0IH0gZnJvbSBcInJ4anMvb3BlcmF0b3IvY29uY2F0XCI7XHJcbmltcG9ydCB7IHJldHJ5IH0gZnJvbSBcInJ4anMvb3BlcmF0b3IvcmV0cnlcIjtcclxuaW1wb3J0IHsgQ29ycmVzcG9uZGVuY2UgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IFJlY29yZEhpc3RvcnkgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3JlY29yZEhpc3RvcnlcIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJjb252ZXJzYXRpb25cIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL2NvbnZlcnNhdGlvbi5odG1sXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb252ZXJzYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJGZpbHRlcicpIHByaXZhdGUgJGZpbHRlcjogbmcuSUZpbHRlclNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckc2NvcGUnKSBwcml2YXRlICRzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgYXV0aG9yaXNhdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfaXRlbXM6IENvbnZlcnNhdGlvbkl0ZW1bXTtcclxuICAgIHByaXZhdGUgX2NvbnZlcnNhdGlvbmRhdGE6IENvbnZlcnNhdGlvblNlY3Rpb25bXTtcclxuICAgIHByaXZhdGUgX2luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGZ1bGxzaXplOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9maWxlczogRmlsZUl0ZW1bXTtcclxuICAgIHByaXZhdGUgX2V4cGFuZEFsbDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3Nob3dBbGVydHM6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9zaG93SW50ZXJuYWw6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHNjcm9sbERpdjogbmcuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgc2Nyb2xsVG9vbHRpcERpdjogbmcuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgaGVhZGVyRWxlbWVudDogbmcuSUF1Z21lbnRlZEpRdWVyeTtcclxuICAgIHByaXZhdGUgZGlzcG9zYWJsZXM6ICgoKSA9PiB2b2lkKVtdID0gW107XHJcbiAgICBwcml2YXRlIHNjcm9sbFRvb2x0aXBTdWJqZWN0OiBSeC5TdWJqZWN0PHZvaWQ+O1xyXG5cclxuICAgIHByaXZhdGUgZ2V0IHNob3dBbGVydHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dBbGVydHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXQgc2hvd0FsZXJ0cyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBvbGQgPSB0aGlzLl9zaG93QWxlcnRzO1xyXG4gICAgICAgIHRoaXMuX3Nob3dBbGVydHMgPSB2YWx1ZTtcclxuICAgICAgICBpZiAob2xkICE9PSB0aGlzLl9zaG93QWxlcnRzKVxyXG4gICAgICAgICAgICB0aGlzLnNob3dBbGVydHNDaGFuZ2VkKHsgdmFsdWU6IHRoaXMuX3Nob3dBbGVydHMgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2hvd0FsZXJ0c0NoYW5nZWQoYWN0aXZlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRzID0gYWN0aXZlO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRWYWx1ZTxib29sZWFuPihcImNvbnZlcnNhdGlvbi5zaG93QWxlcnRzXCIsIGFjdGl2ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgc2hvd0ludGVybmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93SW50ZXJuYWw7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHByaXZhdGUgc2V0IHNob3dJbnRlcm5hbCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBvbGQgPSB0aGlzLl9zaG93SW50ZXJuYWw7XHJcbiAgICAgICAgdGhpcy5fc2hvd0ludGVybmFsID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKG9sZCAhPT0gdGhpcy5fc2hvd0ludGVybmFsKVxyXG4gICAgICAgICAgICB0aGlzLnNob3dJbnRlcm5hbENoYW5nZWQoeyB2YWx1ZTogdGhpcy5fc2hvd0ludGVybmFsIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNob3dJbnRlcm5hbENoYW5nZWQoYWN0aXZlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5zaG93SW50ZXJuYWwgPSBhY3RpdmU7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFZhbHVlPGJvb2xlYW4+KFwiY29udmVyc2F0aW9uLnNob3dJbnRlcm5hbFwiLCBhY3RpdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgc2hvd0FsZXJ0c0NoYW5nZWQ6IChhcmdzOiB7IHZhbHVlOiBib29sZWFuIH0pID0+IHZvaWQ7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzaG93SW50ZXJuYWxDaGFuZ2VkOiAoYXJnczogeyB2YWx1ZTogYm9vbGVhbiB9KSA9PiB2b2lkO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93SW50ZXJuYWxUb2dnbGU6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGV4cGFuZGVkOiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgY29udmVyc2F0aW9uKCk6IENvbnZlcnNhdGlvbkl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjb252ZXJzYXRpb24oaXRlbXM6IENvbnZlcnNhdGlvbkl0ZW1bXSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goYXN5bmMgKGNvbnZlcnNhdGlvbkl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udmVyc2F0aW9uSXRlbS5kaXJlY3Rpb24gPT0gXCJub25lXCIpIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0OiBQZXJzb24gPSBhd2FpdCBjb252ZXJzYXRpb25JdGVtLmNvbnRhY3RQZXJzb24udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhY3QucGhvbmUgJiYgY29udGFjdC5waG9uZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbkl0ZW0ucGhvbmUgPSBgJHtjb250YWN0Lm5hbWV9OiAke2NvbnRhY3QucGhvbmUuam9pbihcIiwgXCIpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSBpdGVtcztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRTZWN0aW9ucygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWxsb3dUeXBlQ2hhbmdlKGl0ZW06IENvbnZlcnNhdGlvbkl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG93SW50ZXJuYWxUb2dnbGUgJiYgdGhpcy5hdXRob3Jpc2F0aW9uU2VydmljZS5jdXJyZW50Um9sZSA9PSBcIlNEXCIgJiYgKGl0ZW0uY2xhc3MgPT0gJ2ludGVybmFsJyB8fCAoaXRlbS5jbGFzcyA9PSAnZ2VuZXJhbE5vdGUnICYmIGl0ZW0uZnJvbUZpcWFzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIG5ld0ZpbGVUb29sdGlwOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIG5ld0ZpbGVUb29sdGV4dDogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgZmlsZXMoKTogRmlsZUl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBmaWxlcyhmaWxlczogRmlsZUl0ZW1bXSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZClcclxuICAgICAgICAgICAgdGhpcy5fZmlsZXMgPSBmaWxlcztcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uc2l6ZWNsaWNrZWQ6IChhcmdzOiB7IGZ1bGxzaXplOiBib29sZWFuIH0pID0+IHZvaWQ7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uZmlsZWNsaWNrZWQ6IChhcmdzOiB7IGZpbGU6IEZpbGVJdGVtIH0pID0+IHZvaWQ7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uZmlsZWRlbGV0ZWQ6IChhcmdzOiB7IGZpbGU6IEZpbGVJdGVtIH0pID0+IHZvaWQ7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uVHlwZUNoYW5nZUNsaWNrOiAoYXJnczogeyBpZDogSUlkZW50aXR5TGluayB9KSA9PiB2b2lkO1xyXG5cclxuICAgICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBzID0gdGhpcy5zZXNzaW9uLmdldFZhbHVlPGJvb2xlYW4+KFwiY29udmVyc2F0aW9uLnNob3dBbGVydHNcIik7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRzID0gcyAhPT0gdW5kZWZpbmVkID8gcyA6IHRydWU7XHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLnNlc3Npb24uZ2V0VmFsdWU8Ym9vbGVhbj4oXCJjb252ZXJzYXRpb24uc2hvd0ludGVybmFsXCIpO1xyXG4gICAgICAgIHRoaXMuc2hvd0ludGVybmFsID0gcyAhPT0gdW5kZWZpbmVkID8gaSA6IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9vbHRpcFN1YmplY3QgPSBuZXcgUnguU3ViamVjdDx2b2lkPigpO1xyXG4gICAgICAgIHZhciBzdWIgPSB0aGlzLnNjcm9sbFRvb2x0aXBTdWJqZWN0LmRlYm91bmNlVGltZSgxMDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlTY3JvbGxUb29sdGlwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRhcHBseUFzeW5jKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKCgpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBkKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAkcG9zdExpbmsoKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJFbGVtZW50ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY29udmVyc2F0aW9uLWhlYWRlcicpLml0ZW0oMCkpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsRGl2ID0gYW5ndWxhci5lbGVtZW50KHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY29udmVyc2F0aW9uLXNjcm9sbCcpLml0ZW0oMCkpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9vbHRpcERpdiA9IGFuZ3VsYXIuZWxlbWVudCh0aGlzLiRlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Njcm9sbC10b29sdGlwJykuaXRlbSgwKSlcclxuICAgICAgICB0aGlzLnNjcm9sbERpdi5iaW5kKCdzY3JvbGwnLCAkZXZlbnQgPT4gdGhpcy5vbkNvbnZlcnNhdGlvblNjcm9sbCgkZXZlbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uTGF5b3V0QWp1c3Q6IChhcmdlOiB7fSkgPT4gdm9pZDtcclxuICAgIHByaXZhdGUgb25Db252ZXJzYXRpb25TY3JvbGwoJGV2ZW50OiBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QpIHtcclxuICAgICAgICB2YXIgc2Nyb2xsRGl2U2Nyb2xsUG9zdGlvbiA9ICg8SFRNTERpdkVsZW1lbnQ+dGhpcy5zY3JvbGxEaXZbMF0pLnNjcm9sbFRvcDtcclxuICAgICAgICB2YXIgc2Nyb2xsRGl2SGVpZ2h0ID0gKDxIVE1MRGl2RWxlbWVudD50aGlzLnNjcm9sbERpdlswXSkub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHZhciBzY3JvbGxEaXZTY3JvbGxIZWlnaHQgPSAoPEhUTUxEaXZFbGVtZW50PnRoaXMuc2Nyb2xsRGl2WzBdKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgICAgdmFyIGhlaWdodE1hcmdpbiA9IHNjcm9sbERpdkhlaWdodCAqIChzY3JvbGxEaXZTY3JvbGxQb3N0aW9uIC8gKHNjcm9sbERpdlNjcm9sbEhlaWdodCAtIHNjcm9sbERpdkhlaWdodCkpO1xyXG4gICAgICAgIHZhciBlbGVtZW50czogSFRNTERpdkVsZW1lbnRbXSA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGVsZW0gb2YgdGhpcy5zY3JvbGxEaXZbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY29udmVyc2F0aW9uLXNlY3Rpb24nKSlcclxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtKTtcclxuICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLmZpbHRlcihoID0+IChzY3JvbGxEaXZTY3JvbGxQb3N0aW9uICsgaGVpZ2h0TWFyZ2luKSA+PSBoLm9mZnNldFRvcCAmJiAoaC5vZmZzZXRUb3AgKyBoLm9mZnNldEhlaWdodCkgPj0gKHNjcm9sbERpdlNjcm9sbFBvc3Rpb24gKyBoZWlnaHRNYXJnaW4pKTtcclxuICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvb2x0aXAgPSAoPEhUTUxEaXZFbGVtZW50PmVsZW1lbnRzWzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NlY3Rpb24taGVhZGVyJylbMF0pLmlubmVyVGV4dDtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U2Nyb2xsVG9vbHRpcCA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBzY3JvbGxGYWN0b3IgPSAoc2Nyb2xsRGl2U2Nyb2xsSGVpZ2h0IC0gKHNjcm9sbERpdlNjcm9sbEhlaWdodCAtIHNjcm9sbERpdlNjcm9sbFBvc3Rpb24pKSAvIHNjcm9sbERpdlNjcm9sbEhlaWdodDtcclxuICAgICAgICAgICAgdmFyIHQgPSAoc2Nyb2xsRGl2SGVpZ2h0ICogc2Nyb2xsRmFjdG9yKSArICg8SFRNTERpdkVsZW1lbnQ+dGhpcy5oZWFkZXJFbGVtZW50WzBdKS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9vbHRpcERpdi5jc3MoXCJ0b3BcIiwgdCArIFwicHhcIik7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRhcHBseUFzeW5jKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9vbHRpcFN1YmplY3QubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vbkxheW91dEFqdXN0KSB0aGlzLm9uTGF5b3V0QWp1c3Qoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hhbmdlQ29udmVyc2F0aW9uVHlwZShpZDogSUlkZW50aXR5TGluaykge1xyXG4gICAgICAgIHRoaXMub25UeXBlQ2hhbmdlQ2xpY2soeyBpZDogaWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNjcm9sbFRvb2x0aXAgPSBcIlwiO1xyXG4gICAgcHVibGljIGRpc3BsYXlTY3JvbGxUb29sdGlwID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBidWlsZFNlY3Rpb25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IHRoaXMuX2l0ZW1zLnNvcnQoKGEsIGIpID0+IGEudGltZXN0YW1wID4gYi50aW1lc3RhbXAgPyAxIDogLTEpO1xyXG4gICAgICAgICAgICBsZXQgZGF0YTogQ29udmVyc2F0aW9uU2VjdGlvbltdID0gW107XHJcbiAgICAgICAgICAgIGxldCBkYXlUYWc6IERhdGUgPSBuZXcgRGF0ZSgwKTtcclxuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbjogRGlyZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHNlY3Rpb246IENvbnZlcnNhdGlvblNlY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc2lkZTogQ29udmVyc2F0aW9uU2lkZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF5VGFnLnRvRGF0ZVN0cmluZygpICE9IHgudGltZXN0YW1wLnRvRGF0ZVN0cmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF5VGFnID0geC50aW1lc3RhbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLmNvbnZlcnNhdGlvblNpZGVzLnB1c2goc2lkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChzZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiA9IHsgdGl0bGU6IHRoaXMubWFrZVRpdGxlKHgudGltZXN0YW1wKSwgY29udmVyc2F0aW9uU2lkZXM6IFtdIH07XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0geC5kaXJlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkZSA9IHsgc2lkZTogZGlyZWN0aW9uLCBjb252ZXJzYXRpb25JdGVtczogW10gfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHguZGlyZWN0aW9uICE9IGRpcmVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLmNvbnZlcnNhdGlvblNpZGVzLnB1c2goc2lkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHguZGlyZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRlID0geyBzaWRlOiBkaXJlY3Rpb24sIGNvbnZlcnNhdGlvbkl0ZW1zOiBbXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNpZGUuY29udmVyc2F0aW9uSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb24uY29udmVyc2F0aW9uU2lkZXMucHVzaChzaWRlKTtcclxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChzZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9jb252ZXJzYXRpb25kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy4kdGltZW91dCgpO1xyXG4gICAgICAgICAgICAvLyBIaWRlL3Nob3cgdGhlIGV4cGFuZCBidXR0b25zLlxyXG4gICAgICAgICAgICBsZXQgZWxzID0gdGhpcy4kZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb252ZXJzYXRpb24taXRlbScpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsID0gZWxzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IG91dGVybXNnID0gZWwucXVlcnlTZWxlY3RvcignLm91dGVyLW1lc3NhZ2UnKTtcclxuICAgICAgICAgICAgICAgIGxldCBpbm5lcm1zZyA9IG91dGVybXNnLnF1ZXJ5U2VsZWN0b3IoJy5pbm5lci1tZXNzYWdlJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnRuID0gYW5ndWxhci5lbGVtZW50KGVsLnF1ZXJ5U2VsZWN0b3IoJy5leHBhbmQtb3B0aW9uJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlubmVybXNnLmNsaWVudEhlaWdodCA+IG91dGVybXNnLmNsaWVudEhlaWdodClcclxuICAgICAgICAgICAgICAgICAgICBidG4uYWRkQ2xhc3MoXCJjYW4tZXhwYW5kXCIpXHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgYnRuLnJlbW92ZUNsYXNzKFwiY2FuLWV4cGFuZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZEFsbCAmJiB0aGlzLl9pdGVtcylcclxuICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zLmZvckVhY2goaSA9PiBpLmV4cGFuZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG1vdmUgdG8gYm90dG9tIG9mIHNjcm9sbCB0byBzaG93IG1vc3QgcmVjZW50IGVudHJpZXMuXHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGl2WzBdLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsRGl2WzBdLnNjcm9sbEhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYWtlVGl0bGUodGltZXN0YW1wOiBEYXRlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGltZXN0YW1wLnRvRGF0ZVN0cmluZygpID09IG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIHJldHVybiBcIlRPREFZXCI7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XHJcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXAudG9EYXRlU3RyaW5nKCkgPT0geWVzdGVyZGF5LnRvRGF0ZVN0cmluZygpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiWUVTVEVSREFZXCI7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRmaWx0ZXIoJ2RhdGUnKSh0aW1lc3RhbXAsICdkIE1NTSB5eXl5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNpemVDbGljayhldmVudDogRXZlbnQpIHtcclxuICAgICAgICB0aGlzLmZ1bGxzaXplID0gIXRoaXMuZnVsbHNpemU7XHJcbiAgICAgICAgdGhpcy5vbnNpemVjbGlja2VkKHsgZnVsbHNpemU6IHRoaXMuZnVsbHNpemUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBleHBhbmRBbGwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZEFsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZEFsbChleHBhbmQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgb2xkID0gdGhpcy5fZXhwYW5kQWxsO1xyXG4gICAgICAgIHRoaXMuX2V4cGFuZEFsbCA9IGV4cGFuZDtcclxuICAgICAgICBpZiAob2xkICE9IGV4cGFuZCAmJiB0aGlzLl9pdGVtcylcclxuICAgICAgICAgICAgdGhpcy5faXRlbXMuZm9yRWFjaCh4ID0+IHguZXhwYW5kZWQgPSBleHBhbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkV4cGFuZEFsbChzdGF0dXM6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbCA9IHN0YXR1cztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXRlbVRvZ2dsZShpdGVtOiBDb252ZXJzYXRpb25JdGVtKSB7XHJcbiAgICAgICAgaXRlbS5leHBhbmRlZCA9ICFpdGVtLmV4cGFuZGVkO1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5ldmVyeShpID0+ICFpLmV4cGFuZGVkKSlcclxuICAgICAgICAgICAgdGhpcy5fZXhwYW5kQWxsID0gZmFsc2U7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5faXRlbXMuZXZlcnkoaSA9PiBpLmV4cGFuZGVkKSlcclxuICAgICAgICAgICAgdGhpcy5fZXhwYW5kQWxsID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWxlQ2xpY2soZmlsZVJlZjogSUlkZW50aXR5TGluaykge1xyXG4gICAgICAgIGxldCBmaWxlID0gdGhpcy5fZmlsZXMuZmlsdGVyKHggPT4geC5pZC5ocmVmID09IGZpbGVSZWYuaHJlZikuc2hpZnQoKTtcclxuICAgICAgICB0aGlzLm9uZmlsZWNsaWNrZWQoeyBmaWxlOiBmaWxlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZpbGVEZWxldGUoZmlsZVJlZjogSUlkZW50aXR5TGluaykge1xyXG4gICAgICAgIGxldCBmaWxlID0gdGhpcy5fZmlsZXMuZmlsdGVyKHggPT4geC5pZC5ocmVmID09IGZpbGVSZWYuaHJlZikuc2hpZnQoKTtcclxuICAgICAgICB0aGlzLm9uZmlsZWRlbGV0ZWQoeyBmaWxlOiBmaWxlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNmb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBvbkZvY3VzKCkge1xyXG4gICAgICAgIHRoaXMuaXNmb2N1cyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQmx1cigpIHtcclxuICAgICAgICB0aGlzLmlzZm9jdXMgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRGlyZWN0aW9uID0gXCJpblwiIHwgXCJvdXRcIiB8IFwibm9uZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JdGVtIHtcclxuICAgIGlkOiBJSWRlbnRpdHlMaW5rLFxyXG4gICAgcGVyc29uOiBzdHJpbmc7XHJcbiAgICBjb250YWN0UGVyc29uOiBJUmVzb3VyY2VSZXNvbHZlcjxQZXJzb24+O1xyXG4gICAgcGhvbmU6IHN0cmluZztcclxuICAgIHRpbWVzdGFtcDogRGF0ZTtcclxuICAgIGRpcmVjdGlvbjogRGlyZWN0aW9uO1xyXG4gICAgdGV4dDogc3RyaW5nO1xyXG4gICAgZXhwYW5kZWQ/OiBib29sZWFuO1xyXG4gICAgY2xhc3M/OiBzdHJpbmc7XHJcbiAgICBmcm9tRmlxYXM/OiBib29sZWFuO1xyXG4gICAgZnJvbVN1cHBvcnQ/OiBib29sZWFuO1xyXG4gICAgaXRlbTogQ29ycmVzcG9uZGVuY2UgfCBSZWNvcmRIaXN0b3J5O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ29udmVyc2F0aW9uU2lkZSB7XHJcbiAgICBzaWRlOiBEaXJlY3Rpb247XHJcbiAgICBjb252ZXJzYXRpb25JdGVtczogQ29udmVyc2F0aW9uSXRlbVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ29udmVyc2F0aW9uU2VjdGlvbiB7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgY29udmVyc2F0aW9uU2lkZXM6IENvbnZlcnNhdGlvblNpZGVbXTtcclxufVxyXG5cclxuIiwi77u/aW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tICcuLi9hcHBsaWNhdGlvbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgQXR0cmlidXRlLCBJbnB1dCwgT3V0cHV0LCBPdXRwdXRBcmdzLCBJQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3NlcnZpY2VDYXNlU2VydmljZVwiXHJcbmltcG9ydCB7IENhc2VGaWxlRGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZmlsZVwiO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSBcIi4uLy4uL21vZGVscy91c2VyXCI7XHJcbmltcG9ydCB7IEFjdGlvbkxpbmtBY3Rpb24gfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9pRnFzXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgdHlwZSBDaGF0VHlwZSA9IFwiaW50ZXJuYWxcIiB8IFwiZXh0ZXJuYWxcIiB8IFwiYWxsXCI7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogJ2NvbnZlcnNhdGlvbmVudHJ5JyxcclxuICAgIHRlbXBsYXRlOiBgPHRhYmxlIGNsYXNzPVwiY29udmVyc2F0aW9uZW50cnlcIj48dHI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhdHRhY2htZW50YnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZpbGV1cGxvYWRidXR0b24gcmVhZC1vbmx5PVwiJGN0cmwucmVhZE9ubHkgfHwgJGN0cmwuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbJ0ZRUyddKVwiIG9uZmlsZWFkZGVkPVwiJGN0cmwub25OZXdBdHRhY2htZW50KGZpbGUpXCI+PC9maWxldXBsb2FkYnV0dG9uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmaXh0dXJlIHRvcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmcXRleHRhcmVhIGNhbmRlbGV0ZT1cInRydWVcIiBvbi1sYXlvdXQtcmVzZXQ9XCIkY3RybC5yZXNldER5bmFtaWNIVE1MTGF5b3V0KClcIiBvbi1sYXlvdXQtYWp1c3Q9XCIkY3RybC5hanVzdER5bmFtaWNIVE1MTGF5b3V0KGhlaWdodClcIiByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiIHZhbHVlPVwiJGN0cmwuY29yc1RleHRcIiBvbnZhbHVlY2hhbmdlZD1cIiRjdHJsLm9uVmFsdWVDaGFuZ2VkKHZhbHVlKVwiIHRvb2x0aXAtcGxhY2VtZW50PVwiJ2JvdHRvbSdcIj48L2ZxdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZmVlZGJhY2tidXR0b25cIiBuZy1zaG93PVwiJGN0cmwuZmVlZGJhY2tTdGF0dXNMaW5rcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHB1c2hidXR0b24gaXNkaXNhYmxlZD1cIiRjdHJsLnJlYWRPbmx5IHx8ICRjdHJsLmlzZGlzYWJsZWQgfHwgJGN0cmwuaXNGZWVkYmFja0Rpc2FibGVkXCIgY2xhc3M9XCJidXR0b25mZWVkYmFja1wiIGJ1dHRvbnRleHQ9XCJ7eyRjdHJsLmZlZWRiYWNrQnV0dG9uVGV4dCB8dHJhbnNsYXRlfX1cIiBvbmNsaWNrZWQ9XCIkY3RybC5vblNlbmRGZWVkYmFjaygpXCI+PC9wdXNoYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNlbmRidXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiIGNsaWNrLW91dHNpZGU9XCIkY3RybC5idXR0b25PcGVuID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHB1c2hidXR0b24gaW5kaWNhdG9yLWNvbG9yPVwie3skY3RybC5hdXRob3JpemF0aW9uU2VydmljZS5jdXJyZW50Um9sZUluKFsnRlFTJ10pID8gJyNCNURBOTEnIDogJycgfX1cIiBpc2Rpc2FibGVkPVwiJGN0cmwucmVhZE9ubHkgfHwgJGN0cmwuaXNkaXNhYmxlZFwiIGJ1dHRvbnRleHQ9XCJ7eyAoICRjdHJsLnNob3dFeHRlcm5hbCA/ICdTRU5EJyA6ICdTRU5EX0lOVEVSTkFMJykgfCB0cmFuc2xhdGV9fVwiIG9uY2xpY2tlZD1cIiRjdHJsLm9uU2VuZCgpXCI+PC9wdXNoYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLW9wdGlvbiBuZy1jbGFzczp7ZGlzYWJsZWQ6JGN0cmwucmVhZE9ubHkgfHwgJGN0cmwuaXNkaXNhYmxlZH1cIiBuZy1pZj1cIiRjdHJsLmNoYXRUeXBlID09ICdhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLW9wdGlvbi10ZXh0XCIgbmctaWY9XCIkY3RybC5idXR0b25PcGVuXCIgbmctY2xpY2s9XCIkY3RybC5vbkludGVybmFsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1sYWJlbFwiPjxkaXYgY2xhc3M9XCJidXR0b24taWNvblwiPjwvZGl2Pnt7ICdTRU5EX0lOVEVSTkFMJyB8IHRyYW5zbGF0ZX19PHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tb3B0aW9uLWhhbmRsZVwiIG5nLWNsaWNrPVwiJGN0cmwuYnV0dG9uT3BlbiA9ICEoJGN0cmwucmVhZE9ubHkgfHwgJGN0cmwuaXNkaXNhYmxlZCkgJiYgISRjdHJsLmJ1dHRvbk9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tZHJpZWhvZWsxIG5nLWNsYXNzOntjbG9zZWQ6ISRjdHJsLmJ1dHRvbk9wZW4sb3BlbjokY3RybC5idXR0b25PcGVufVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhdGgxXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhdGgyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhdGgzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhdGg0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+PC90YWJsZT5gLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiBcIl5hcHBsaWNhdGlvblwiXHJcbiAgICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb252ZXJzYXRpb25FbnRyeSB7XHJcbiAgICBwcml2YXRlIGJ1dHRvbk9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uO1xyXG4gICAgcHVibGljIGlzRmlxYXNFbXBsb3llZTogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgaXNGZWVkYmFja0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfZmVlZGJhY2tTdGF0dXNMaW5rczogRmVlZGJhY2tTdGF0dXNMaW5rW107XHJcbiAgICBASW5wdXQoKSBzZXQgZmVlZGJhY2tTdGF0dXNMaW5rcyhsaW5rczogRmVlZGJhY2tTdGF0dXNMaW5rW10pIHtcclxuICAgICAgICBsaW5rcyA9IGxpbmtzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuX2ZlZWRiYWNrU3RhdHVzTGlua3MgPSAodGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5jdXJyZW50Um9sZSA9PT0gXCJGUVNcIilcclxuICAgICAgICAgICAgICAgID8gW11cclxuICAgICAgICAgICAgICAgIDogbGlua3MuZmlsdGVyKGwgPT4gWydwcm92aWRlZCcsICdyZXF1ZXN0ZWQnXS5pbmRleE9mKGwuaWQpID4gLTEpO1xyXG4gICAgICAgIHRoaXMuaXNGZWVkYmFja0Rpc2FibGVkID0gKFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGUgPT09IFwiRlFTXCIpXHJcbiAgICAgICAgICAgICAgICB8fCAhKCh0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlID09PSBcIkNVU1RcIilcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2ZlZWRiYWNrU3RhdHVzTGlua3Muc29tZShsID0+IGwuaWQgPT0gJ3Byb3ZpZGVkJylcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2ZlZWRiYWNrU3RhdHVzTGlua3Muc29tZShsID0+IGwuaWQgPT0gJ3JlcXVlc3RlZCcpKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmVlZGJhY2tCdXR0b25UZXh0ID0gKHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGUgPT09IFwiRlFTXCIpXHJcbiAgICAgICAgICAgICAgICA/IFwiXCJcclxuICAgICAgICAgICAgICAgIDogKHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGUgPT09IFwiU0RcIikgPyAnUkVRVUVTVF9GRUVEQkFDSycgOiAnU0VORF9GRUVEQkFDSydcclxuICAgICAgICAgICAgO1xyXG4gICAgfVxyXG4gICAgZ2V0IGZlZWRiYWNrU3RhdHVzTGlua3MoKTogRmVlZGJhY2tTdGF0dXNMaW5rW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mZWVkYmFja1N0YXR1c0xpbmtzIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmZWVkYmFja0J1dHRvblRleHQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9jaGF0VHlwZTogQ2hhdFR5cGU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IGNoYXRUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGF0VHlwZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY2hhdFR5cGUodmFsdWU6IENoYXRUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5fY2hhdFR5cGUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5fY2hhdFR5cGUgPT0gXCJleHRlcm5hbFwiKVxyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbk9wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBzaG93SW50ZXJuYWwoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hhdFR5cGUgIT0gXCJleHRlcm5hbFwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IHNob3dFeHRlcm5hbCgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGF0VHlwZSAhPSBcImludGVybmFsXCI7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbm5ld2VudHJ5OiBPdXRwdXRBcmdzPHsgZW50cnk6IHN0cmluZywgaW50ZXJuYWw6IGJvb2xlYW4gfT47XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uZmVlZGJhY2s6IE91dHB1dEFyZ3M8eyBmZWVkYmFjazogc3RyaW5nLCBzdGF0dXM6IEZlZWRiYWNrU3RhdHVzTGluayB9PjtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25uZXdhdHRhY2htZW50OiBPdXRwdXRBcmdzPHsgYXR0YWNobWVudDogQ2FzZUZpbGVEYXRhIH0+O1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbnZhbHVlY2hhbmdlZDogT3V0cHV0QXJnczx7IHZhbHVlOiBzdHJpbmcgfT47XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uTGF5b3V0QWp1c3Q6IE91dHB1dEFyZ3M8eyBoZWlnaHQ6IG51bWJlciB9PjtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25MYXlvdXRSZXNldDogT3V0cHV0QXJnczx7fT47XHJcbiAgICBwdWJsaWMgYWp1c3REeW5hbWljSFRNTExheW91dChoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLm9uTGF5b3V0QWp1c3QpIHRoaXMub25MYXlvdXRBanVzdCh7IGhlaWdodDogaGVpZ2h0IH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlc2V0RHluYW1pY0hUTUxMYXlvdXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub25MYXlvdXRSZXNldCkgdGhpcy5vbkxheW91dFJlc2V0KHt9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgc2VydmljZUNhc2VTZXJ2aWNlOiBTZXJ2aWNlQ2FzZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHdpbmRvdycpIHByaXZhdGUgJHdpbmRvdzogbmcuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHVpYk1vZGFsJykgcHJpdmF0ZSAkbW9kYWw6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICAkb25Jbml0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29yc1RleHQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNkaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jb3JzVGV4dCA9IHZhbDtcclxuICAgICAgICB0aGlzLmlzZGlzYWJsZWQgPSAhKHZhbCAmJiB2YWwubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgdGhpcy5vbnZhbHVlY2hhbmdlZCh7IHZhbHVlOiB2YWwgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VuZEZlZWRiYWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlID09PSBcIkZRU1wiKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMub25mZWVkYmFjayh7XHJcbiAgICAgICAgICAgIGZlZWRiYWNrOiB0aGlzLmNvcnNUZXh0LFxyXG4gICAgICAgICAgICBzdGF0dXM6ICh0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlID09PSBcIkNVU1RcIikgPyB0aGlzLmZlZWRiYWNrU3RhdHVzTGlua3MuZmlsdGVyKHggPT4geC5pZCA9PSBcInByb3ZpZGVkXCIpWzBdIDogdGhpcy5mZWVkYmFja1N0YXR1c0xpbmtzLmZpbHRlcih4ID0+IHguaWQgPT0gXCJyZXF1ZXN0ZWRcIilbMF1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvcnNUZXh0ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIG9uU2VuZCgpIHtcclxuICAgICAgICBpZighdGhpcy5zaG93RXh0ZXJuYWwpe1xyXG4gICAgICAgICAgICB0aGlzLm9uSW50ZXJuYWwoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlID09IFwiQ1VTVFwiICYmIHRoaXMuX2ZlZWRiYWNrU3RhdHVzTGlua3Muc29tZShsID0+IGwuaWQgPT0gJ3Byb3ZpZGVkJykpe1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9uczogbmcudWkuYm9vdHN0cmFwLklNb2RhbFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAnL3ZpZXdzL3NlbmQuZmVlZGJhY2suZGlhbG9nLmh0bWwnLFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogU2VuZEZlZWRiYWNrRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlckFzOiAnJGN0cmwnLFxyXG4gICAgICAgICAgICAgICAgYmFja2Ryb3A6J3N0YXRpYydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCBtID0gdGhpcy4kbW9kYWwub3BlbihvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGxldCB4ID0gYXdhaXQgbS5yZXN1bHRcclxuICAgICAgICAgICAgICAgIGlmKHggPT0gXCJmZWVkYmFja1wiKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VuZEZlZWRiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZSA9IF87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbm5ld2VudHJ5KHsgZW50cnk6IHRoaXMuY29yc1RleHQsIGludGVybmFsOiBmYWxzZSB9KTtcclxuICAgICAgICB0aGlzLmNvcnNUZXh0ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uSW50ZXJuYWwoKSB7XHJcbiAgICAgICAgdGhpcy5vbm5ld2VudHJ5KHsgZW50cnk6IHRoaXMuY29yc1RleHQsIGludGVybmFsOiB0cnVlIH0pO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29yc1RleHQgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25OZXdBdHRhY2htZW50KGZpbGVEYXRhOiBDYXNlRmlsZURhdGEpIHtcclxuICAgICAgICB0aGlzLm9ubmV3YXR0YWNobWVudCh7IGF0dGFjaG1lbnQ6IGZpbGVEYXRhIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2VuZEZlZWRiYWNrRGlhbG9nQ29tcG9uZW50IHtcclxuICAgIHN0YXRpYyBjb250cm9sbGVySWQgPSAnU2VuZEZlZWRiYWNrRGlhbG9nQ29tcG9uZW50JztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdWliTW9kYWxJbnN0YW5jZScpIHByaXZhdGUgJG1vZGFsSW5zdGFuY2U6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2VJbnN0YW5jZVxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG4gICAgcHVibGljIEFzRmVlZGJhY2soKSB7XHJcbiAgICAgICAgdGhpcy4kbW9kYWxJbnN0YW5jZS5jbG9zZSgnZmVlZGJhY2snKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgQXNDb3JyZXNwb25kZW5jZSgpIHtcclxuICAgICAgICB0aGlzLiRtb2RhbEluc3RhbmNlLmNsb3NlKCdjb3JyZXNwb25kZW5jZScpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrU3RhdHVzTGluayB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0OiBBY3Rpb25MaW5rQWN0aW9uPGFueSwgYW55LCB2b2lkPjtcclxufVxyXG4iLCLvu79pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE91dHB1dCwgQXR0cmlidXRlLCBPdXRwdXRBcmdzIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9hcHBsaWNhdGlvblwiXHJcbmltcG9ydCB7IERyb3Bkb3duRW50cnkgfSBmcm9tIFwiLi4vLi4vY29udHJvbHMvZHJvcGRvd25ib3hcIjtcclxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9nZW5lcmFsXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbG9nU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcImN1c3RvbWVyY2hlY2tsaXN0Y29tYm9cIixcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgICAgIDxjaGVja2xpc3Rjb21ib1xyXG4gICAgICAgICAgICAgICAgdmFsdWUtc3VtYml0PVwiJGN0cmwucGFzc1ZhbHVlU3VibWl0KHNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiXHJcbiAgICAgICAgICAgICAgICBuZy12aXNpYmxlID0gXCIkY3RybC5faXRlbXMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgICBvbnNlbGVjdGlvbmNoYW5nZWQ9XCIkY3RybC5zZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICBpdGVtcz1cIiRjdHJsLl9pdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBzaG93QWxsT3B0aW9uPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgYWxsLXNlbGVjdGVkLXRleHQ9XCIkY3RybC5BTExfQ1VTVE9NRVJTX1NFTEVDVEVEIHwgdHJhbnNsYXRlIFwiXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZS1zZWxlY3RlZC10ZXh0PVwiJGN0cmwuTVVMVElQTEVfQ1VTVE9NRVJTX1NFTEVDVEVEIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIG5vbmUtc2VsZWN0ZWQtdGV4dD1cIicnXCJcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkPVwiJGN0cmwuY3VzdG9tZXJLZXlzXCJcclxuICAgICAgICAgICAgICAgIHNob3ctY2xlYXI9XCJ7eyRjdHJsLnNob3dDbGVhcn19XCJcclxuICAgICAgICAgICAgICAgID48L2NoZWNrbGlzdGNvbWJvPmAsXHJcbiAgICByZXF1aXJlOiB7XHJcbiAgICAgICAgXCJhcHBsaWNhdGlvblwiOiBcIl5hcHBsaWNhdGlvblwiXHJcbiAgICB9XHJcbn0pXHJcbmNsYXNzIEN1c3RvbWVyQ2hlY2tsaXN0Q29tYm88VD4gaW1wbGVtZW50cyBJQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcbiAgICBwcml2YXRlIGRpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdID0gW107XHJcbiAgICBwcml2YXRlIF9jdXN0b21lcktleXM6IHN0cmluZ1tdO1xyXG4gICAgcHJpdmF0ZSBfaXRlbXM6IGFueVtdO1xyXG4gICAgcHJpdmF0ZSBfc2hvd0NsZWFyO1xyXG5cclxuICAgIHByaXZhdGUgTVVMVElQTEVfQ1VTVE9NRVJTX1NFTEVDVEVEID0gXCJNVUxUSVBMRV9DVVNUT01FUlNfU0VMRUNURURcIjtcclxuICAgIHByaXZhdGUgQUxMX0NVU1RPTUVSU19TRUxFQ1RFRCA9IFwiQUxMX0NVU1RPTUVSU19TRUxFQ1RFRFwiO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgY3VzdG9tZXJLZXlzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tZXJLZXlzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjdXN0b21lcktleXMoa2V5czogc3RyaW5nW10pIHtcclxuICAgICAgICBpZiAoKCFrZXlzIHx8IGtleXMubGVuZ3RoID09IDApICYmIHRoaXMuX2l0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmNoZWNrZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1c3RvbWVyS2V5cyA9IGtleXM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgbG9nU2VydmljZTogTG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFNjb3BlJykgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzKTtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2godGhpcy5hcHBsaWNhdGlvbi5hZGRPbkFjY291bnRzQ2hhbmdlZChzID0+IHRoaXMudXBkYXRlKHMpKSk7XHJcblxyXG4gICAgICAgIHRoaXMuJHJvb3RTY29wZS4kb24oJ2V2ZW50Q2xlYXJlZCcsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZShzZWw6IHsga2V5OiBULCB0ZXh0OiBzdHJpbmcgfVtdKSB7XHJcbiAgICAgICAgdGhpcy5zaG93Q2xlYXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2l0ZW1zID0gc2VsLm1hcCgoeCkgPT4gPERyb3Bkb3duRW50cnk8VD4+eyBrZXk6IHgua2V5LCB0ZXh0OiB4LnRleHQgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21lcktleXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5faXRlbXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2xlYXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5faXRlbXNbMF0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IHNob3dDbGVhcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0NsZWFyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzaG93Q2xlYXIodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd0NsZWFyID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkN1c3RvbWVyc0NoYW5nZWQ6IE91dHB1dEFyZ3M8eyBjdXN0b21lcktleXM6IGFueVtdIH0+O1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGVkOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJLZXlzID0gc2VsZWN0ZWQubWFwKCh4KSA9PiB4WydrZXknXSk7XHJcbiAgICAgICAgdGhpcy5vbkN1c3RvbWVyc0NoYW5nZWQoe2N1c3RvbWVyS2V5czogdGhpcy5jdXN0b21lcktleXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZVN1Ym1pdDogT3V0cHV0QXJnczx7IGN1c3RvbWVyS2V5czogYW55W10gfT47XHJcbiAgICBwdWJsaWMgcGFzc1ZhbHVlU3VibWl0KHNlbGVjdGVkOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJLZXlzID0gc2VsZWN0ZWQubWFwKCh4KSA9PiB4WydrZXknXSk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVTdWJtaXQpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVN1Ym1pdCh7IGN1c3RvbWVyS2V5czogdGhpcy5jdXN0b21lcktleXMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICRvbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICAgICAgICB0cnkgeyBkKCkgfSBjYXRjaCAoZSkgeyB0aGlzLmxvZ1NlcnZpY2Uud2FybmluZygnQ3VzdG9tZXJDaGVja2xpc3RDb21ibycsIFwiRXJyb3Igd2hpbGUgZGlzcG9zaW5nXCIsIGUpOyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSUNvbXBvbmVudCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPdXRwdXQsIEF0dHJpYnV0ZSwgT3V0cHV0QXJncyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBEcm9wZG93bkVudHJ5IH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xzL2Ryb3Bkb3duYm94XCI7XHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvZ1NlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJjdXN0b21lcmRyb3Bkb3duYm94XCIsXHJcbiAgICB0ZW1wbGF0ZTogYDxkcm9wZG93bmJveCByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUtc3VibWl0PVwiJGN0cmwucGFzc1ZhbHVlU3VibWl0KHNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmctYXR0ci1tYW5kYXRvcnk9XCJ7eyRjdHJsLm1hbmRhdG9yeX19XCJcclxuICAgICAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdHRleHQ9XCInTVVMVElQTEVfQ1VTVE9NRVJTX1NFTEVDVEVEJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlzZWxlY3Q9XCIkY3RybC5tdWx0aXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmctdmlzaWJsZSA9IFwiJGN0cmwuX2l0ZW1zLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGhpbnQ9XCJcXCdTRUxFQ1RfQ1VTVE9NRVJfUExFQVNFXFwnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbWVyZHJvcGRvd25ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPVwiJGN0cmwuY3VzdG9tZXJLZXlzXCJcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcz1cIiRjdHJsLl9pdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaXNlcnJvcj1cIiRjdHJsLmlzZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNob3ctY2xlYXI9XCJ7eyRjdHJsLnNob3dDbGVhcn19XCJcclxuICAgICAgICAgICAgICAgICAgICBvbnNlbGVjdGlvbmNoYW5nZWQ9XCIkY3RybC5zZWxlY3Rpb25jaGFuZ2VkKHNlbGVjdGVkKVwiPjwvZHJvcGRvd25ib3g+YCxcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBcImFwcGxpY2F0aW9uXCI6IFwiXmFwcGxpY2F0aW9uXCJcclxuICAgIH1cclxufSlcclxuY2xhc3MgQ3VzdG9tZXJEcm9wZG93bkJveDxUPiBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGlzZXJyb3I6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uO1xyXG4gICAgcHJpdmF0ZSBkaXNwb3NhYmxlczogSURpc3Bvc2FibGVbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfY3VzdG9tZXJLZXlzOiBzdHJpbmdbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbWFuZGF0b3J5O1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgbWFuZGF0b3J5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYW5kYXRvcnk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IG1hbmRhdG9yeSh2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tYW5kYXRvcnkgPSB2YWwgPT09IHRydWUgfHwgdmFsID09PSBcInRydWVcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9lbmFibGVTaG93Q2xlYXI6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9zaG93Q2xlYXI7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGdldCBzaG93Q2xlYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dDbGVhciAmJiB0aGlzLl9lbmFibGVTaG93Q2xlYXI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dDbGVhcih2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zaG93Q2xlYXIgPSB2YWwgPT09IHRydWUgfHwgdmFsID09PSBcInRydWVcIjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IGN1c3RvbWVyS2V5cygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbWVyS2V5cztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IGN1c3RvbWVyS2V5cyhrZXlzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbWVyS2V5cyA9IGtleXM7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgbXVsdGlzZWxlY3Q6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBfaXRlbXM6IERyb3Bkb3duRW50cnk8VD5bXTtcclxuXHJcbiAgICAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuYXBwbGljYXRpb24uc2VsZWN0ZWRDdXN0b21lcnMpO1xyXG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZXMucHVzaCh0aGlzLmFwcGxpY2F0aW9uLmFkZE9uQWNjb3VudHNDaGFuZ2VkKHMgPT4gdGhpcy51cGRhdGUocykpKTtcclxuICAgIH1cclxuXHJcbiAgICAkb25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZXMuZm9yRWFjaChkID0+IHtcclxuICAgICAgICAgICAgdHJ5IHsgZCgpIH0gY2F0Y2ggKGUpIHsgdGhpcy5sb2dTZXJ2aWNlLndhcm5pbmcoJ0N1c3RvbWVyRHJvcGRvd25Cb3gnLCBcIkVycm9yIHdoaWxlIGRpc3Bvc2luZ1wiLCBlKTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlKHNlbDogeyBrZXk6IFQsIHRleHQ6IHN0cmluZyB9W10pIHtcclxuICAgICAgICB0aGlzLl9lbmFibGVTaG93Q2xlYXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2l0ZW1zID0gc2VsLm1hcCgoeCkgPT4gPERyb3Bkb3duRW50cnk8VD4+eyBrZXk6IHgua2V5LCB0ZXh0OiB4LnRleHQgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21lcktleXMgPSBbXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2l0ZW1zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNob3dDbGVhciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ3VzdG9tZXJDaGFuZ2VkOiBPdXRwdXRBcmdzPHsgY3VzdG9tZXJLZXlzOiBhbnlbXSB9PjtcclxuICAgIHB1YmxpYyBzZWxlY3Rpb25jaGFuZ2VkKHNlbGVjdGVkOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJLZXlzID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5vbkN1c3RvbWVyQ2hhbmdlZCh7IGN1c3RvbWVyS2V5czogdGhpcy5jdXN0b21lcktleXMgfSk7XHJcbiAgICB9XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIHZhbHVlU3VibWl0OiBPdXRwdXRBcmdzPHsgY3VzdG9tZXJLZXlzOiBhbnlbXSB9PjtcclxuICAgIHB1YmxpYyBwYXNzVmFsdWVTdWJtaXQoc2VsZWN0ZWQ6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5jdXN0b21lcktleXMgPSBzZWxlY3RlZDtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZVN1Ym1pdCkgdGhpcy52YWx1ZVN1Ym1pdCh7IGN1c3RvbWVyS2V5czogdGhpcy5jdXN0b21lcktleXMgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSUNvbXBvbmVudCwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgIH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3NlcnZpY2VDYXNlU2VydmljZVwiXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdkdXJhdGlvbnBhbmVsJyxcclxuICAgIHRlbXBsYXRlOiBgPHNwYW4gY2xhc3M9J2R1cmF0aW9ucGFuZWwnIG5nLXNob3c9XCIkY3RybC5kdXJhdGlvblRleHQgIT0gbnVsbFwiPnt7J0lOX1BST0dSRVNTX0JFRk9SRV9URVhUJyB8IHRyYW5zbGF0ZX19IHt7JGN0cmwuZHVyYXRpb25UZXh0fX0ge3skY3RybC5kdXJhdGlvblVuaXRzIHwgdHJhbnNsYXRlfX0ge3snSU5fUFJPR1JFU1NfQUZURVJfVEVYVCcgfCB0cmFuc2xhdGV9fSA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToyMnB4O1wiIGNsYXNzPVwiaWNvbi10aW1lclwiPjwvc3Bhbj48YnIgLz48L3NwYW4+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHVyYXRpb25QYW5lbCBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSBfZHVyYXRpb246IG51bWJlcjtcclxuICAgIHByaXZhdGUgZHVyYXRpb25UZXh0OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGR1cmF0aW9uVW5pdHM6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkdXJhdGlvbigpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kdXJhdGlvbjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgZHVyYXRpb24oZHVyOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cjtcclxuICAgICAgICB0aGlzLm1ha2VUZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYWtlVGV4dCgpIHtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kdXJhdGlvbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kdXJhdGlvbiA8IDYwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kdXJhdGlvblRleHQgPSB0aGlzLl9kdXJhdGlvbiArICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHVyYXRpb25Vbml0cyA9ICdNSU5VVEVTJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZHVyYXRpb24gPCAxMTQwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kdXJhdGlvblRleHQgPSBNYXRoLmZsb29yKHRoaXMuX2R1cmF0aW9uIC8gNjApICsgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kdXJhdGlvblVuaXRzID0gJ0hPVVJTJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kdXJhdGlvblRleHQgPSBNYXRoLmZsb29yKHRoaXMuX2R1cmF0aW9uIC8gMTQ0MCkgKyAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmR1cmF0aW9uVW5pdHMgPSAnREFZUyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR1cmF0aW9uVGV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR1cmF0aW9uVW5pdHMgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBBdHRyaWJ1dGUsIE91dHB1dEFyZ3MgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvVHJhbnNsYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcImVudmlyb25tZW50Y2hlY2tsaXN0Y29tYm9cIixcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgICAgIDxjaGVja2xpc3Rjb21ibyB2YWx1ZS1zdW1iaXQ9XCIkY3RybC5wYXNzVmFsdWVTdWJtaXQoc2VsZWN0ZWQpXCIgcmVhZC1vbmx5PVwiJGN0cmwucmVhZE9ubHlcIiBcclxuICAgICAgICAgICAgICAgIG9uc2VsZWN0aW9uY2hhbmdlZD1cIiRjdHJsLmVudmlyb25tZW50c3NlbGVjdGVkKHNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICBpdGVtcz1cIiRjdHJsLml0ZW1zXCIgXHJcbiAgICAgICAgICAgICAgICBzaG93QWxsT3B0aW9uPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgIGFsbC1zZWxlY3RlZC10ZXh0PVwiJGN0cmwuQUxMX0VOVklST05NRU5UU19TRUxFQ1RFRCB8IHRyYW5zbGF0ZSBcIlxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGUtc2VsZWN0ZWQtdGV4dD1cIiRjdHJsLk1VTFRJUExFX0VOVklST05NRU5UU19TRUxFQ1RFRCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBub25lLXNlbGVjdGVkLXRleHQ9XCInJ1wiIFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZD1cIiRjdHJsLmVudmlyb25tZW50c1wiIFxyXG4gICAgICAgICAgICAgICAgc2hvdy1jbGVhcj1cInt7JGN0cmwuc2hvd0NsZWFyfX1cIlxyXG4gICAgICAgICAgICAgICAgPjwvY2hlY2tsaXN0Y29tYm8+YFxyXG59KVxyXG5jbGFzcyBFbnZpcm9ubWVudENoZWNrbGlzdENvbWJvIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9lbnZpcm9ubWVudHM6IHsga2V5OiBFbnZpcm9ubWVudCwgdGV4dDogc3RyaW5nIH1bXTtcclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgTVVMVElQTEVfRU5WSVJPTk1FTlRTX1NFTEVDVEVEID0gXCJNVUxUSVBMRV9FTlZJUk9OTUVOVFNfU0VMRUNURURcIjtcclxuICAgIHByaXZhdGUgQUxMX0VOVklST05NRU5UU19TRUxFQ1RFRCA9IFwiQUxMX0VOVklST05NRU5UU19TRUxFQ1RFRFwiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgcHJpdmF0ZSAkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlXHJcbiAgICApIHsgfVxyXG5cclxuICAgICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IDx7IGtleTogRW52aXJvbm1lbnQsIHRleHQ6IHN0cmluZyB9W10+W1xyXG4gICAgICAgICAgICB7IGtleTogJ25hJywgdGV4dDogJ05fQScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdwcm9kJywgdGV4dDogJ1BST0RVQ1RJT04nIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAndWF0JywgdGV4dDogJ1VBVCcgfV07XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdHJhbnNsYXRlSXRlbXMoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uub25Mb2FkZWQ7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMubWFwKGkgPT4geyBpLnRleHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoaS50ZXh0KTsgcmV0dXJuIGk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IGVudmlyb25tZW50cygpOiB7IGtleTogRW52aXJvbm1lbnQsIHRleHQ6IHN0cmluZyB9W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudHM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGVudmlyb25tZW50cyhlbnZpcm9ubWVudHM6IHsga2V5OiBFbnZpcm9ubWVudCwgdGV4dDogc3RyaW5nIH1bXSkge1xyXG4gICAgICAgIHRoaXMuX2Vudmlyb25tZW50cyA9IGVudmlyb25tZW50cztcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3Nob3dDbGVhcjtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IHNob3dDbGVhcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0NsZWFyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzaG93Q2xlYXIodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd0NsZWFyID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGl0ZW1zOiB7IGtleTogRW52aXJvbm1lbnQsIHRleHQ6IHN0cmluZyB9W107XHJcblxyXG4gICAgcHVibGljIGVudmlyb25tZW50c3NlbGVjdGVkKHNlbGVjdGVkOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnRzID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5vbkVudmlyb25tZW50c0NoYW5nZWQoeyBlbnZpcm9ubWVudHM6IHRoaXMuZW52aXJvbm1lbnRzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25FbnZpcm9ubWVudHNDaGFuZ2VkOiAoYXJnczogeyBlbnZpcm9ubWVudHM6IGFueVtdIH0pID0+IHZvaWQ7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIHZhbHVlU3VibWl0OiBPdXRwdXRBcmdzPHsgZW52aXJvbm1lbnRzOiB7IGtleTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfVtdIH0+O1xyXG4gICAgcHVibGljIHBhc3NWYWx1ZVN1Ym1pdChzZWxlY3RlZDogYW55W10pIHtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50cyA9IHNlbGVjdGVkO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlU3VibWl0KSB0aGlzLnZhbHVlU3VibWl0KHsgZW52aXJvbm1lbnRzOiB0aGlzLmVudmlyb25tZW50cyB9KTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE91dHB1dCwgQXR0cmlidXRlLCBPdXRwdXRBcmdzIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9hcHBsaWNhdGlvblwiXHJcbmltcG9ydCB7IERyb3Bkb3duRW50cnkgfSBmcm9tIFwiLi4vLi4vY29udHJvbHMvZHJvcGRvd25ib3hcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2dTZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwiZW52aXJvbm1lbnRkcm9wZG93bmJveFwiLFxyXG4gICAgdGVtcGxhdGU6IGA8ZHJvcGRvd25ib3hcclxuICAgICAgICAgICAgICAgIHZhbHVlLXN1Ym1pdD1cIiRjdHJsLnBhc3NWYWx1ZVN1Ym1pdChzZWxlY3RlZClcIlxyXG4gICAgICAgICAgICAgICAgcmVhZC1vbmx5PVwiJGN0cmwucmVhZE9ubHlcIiB0cmFuc2xhdGU9XCJ0cnVlXCIgbXVsdGlzZWxlY3R0ZXh0PVwiJ01VTFRJUExFX0VOVklST05NRU5UU19TRUxFQ1RFRCdcIlxyXG4gICAgICAgICAgICAgICAgbXVsdGlzZWxlY3Q9XCIkY3RybC5tdWx0aXNlbGVjdFwiIHRvb2x0aXRsZT1cInt7J0VOVklST05NRU5UJyB8IHRyYW5zbGF0ZX19e3soJGN0cmwudG9vbHRpdGxlKSA/ICc6ICcgKyAkY3RybC50b29sdGl0bGUgOiAnJ319XCJcclxuICAgICAgICAgICAgICAgIGhpbnQ9XCInUGxlYXNlIGNob29zZSBhbiBlbnZpcm9ubWVudCdcIiBzaG93LWNsZWFyPVwie3skY3RybC5zaG93Q2xlYXJ9fVwiXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZD1cIiRjdHJsLl9lbnZpcm9ubWVudHNcIlxyXG4gICAgICAgICAgICAgICAgaXRlbXM9XCIkY3RybC5pdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBpc2Vycm9yPVwiJGN0cmwuaXNlcnJvclwiXHJcbiAgICAgICAgICAgICAgICBjaGlsZC1jbGFzc2VzPVwie3skY3RybC5jaGlsZENsYXNzZXN9fVwiXHJcbiAgICAgICAgICAgICAgICBvbnNlbGVjdGlvbmNoYW5nZWQ9XCIkY3RybC5lbnZpcm9ubWVudHNlbGVjdGVkKHNlbGVjdGVkKVwiPjwvZHJvcGRvd25ib3g+YFxyXG59KVxyXG5jbGFzcyBFbnZpcm9ubWVudERyb3Bkb3duQm94IGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBwcml2YXRlIGRpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdID0gW107XHJcbiAgICBwcml2YXRlIF9lbnZpcm9ubWVudHM6IGFueVtdO1xyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGlzZXJyb3I6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgbG9nU2VydmljZTogTG9nU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXHJcbiAgICAgICAgICAgIHsga2V5OiAnbmEnLCB0ZXh0OiAnTl9BJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ3Byb2QnLCB0ZXh0OiAnUFJPRFVDVElPTicgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICd1YXQnLCB0ZXh0OiAnVUFUJyB9XHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgdmFyIHN1YiA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZU9ic2VydmFibGUoZWxlbWVudC50ZXh0KS5zdWJzY3JpYmUodCA9PiB0aGlzLnRyYW5zbGF0aW9uc1tlbGVtZW50LmtleV0gPSB0KTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKCgpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uc1tcIlwiXSA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IGQoKSB9IGNhdGNoIChlKSB7IHRoaXMubG9nU2VydmljZS53YXJuaW5nKCdEcm9wRG93bkJveCcsICdFcnJvciBkaXNwb3NpbmcnLCBlKTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NoaWxkQ2xhc3NlcztcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IGNoaWxkQ2xhc3NlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDbGFzc2VzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjaGlsZENsYXNzZXModmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9jaGlsZENsYXNzZXMgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2hvd0NsZWFyO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgc2hvd0NsZWFyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93Q2xlYXI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dDbGVhcih2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zaG93Q2xlYXIgPSB2YWwgPT09IHRydWUgfHwgdmFsID09PSBcInRydWVcIjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBlbnZpcm9ubWVudHMoKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudHM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGVudmlyb25tZW50cyhlbnZzOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuX2Vudmlyb25tZW50cyA9IGVudnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvbnMgPSBbXTtcclxuICAgIHByaXZhdGUgaXRlbXMgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciB0b29sdGl0bGUgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLl9lbnZpcm9ubWVudHMpIHtcclxuICAgICAgICAgICAgdGhpcy5fZW52aXJvbm1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0b29sdGl0bGUgKz0gYCR7dGhpcy50cmFuc2xhdGlvbnNbKGVsZW1lbnQpID8gZWxlbWVudCA6IFwiXCJdfSwgYDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0b29sdGl0bGUuc2xpY2UoMCwgdG9vbHRpdGxlLmxhc3RJbmRleE9mKCcsICcpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIG11bHRpc2VsZWN0OiBib29sZWFuO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkVudmlyb25tZW50c0NoYW5nZWQ6IE91dHB1dEFyZ3M8eyBlbnZpcm9ubWVudHM6IGFueVtdIH0+O1xyXG4gICAgcHVibGljIGVudmlyb25tZW50c2VsZWN0ZWQoc2VsZWN0ZWQ6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudHMgPSBzZWxlY3RlZDtcclxuICAgICAgICB0aGlzLm9uRW52aXJvbm1lbnRzQ2hhbmdlZCh7IGVudmlyb25tZW50czogdGhpcy5lbnZpcm9ubWVudHMgfSk7XHJcbiAgICB9XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIHZhbHVlU3VibWl0OiBPdXRwdXRBcmdzPHsgZW52aXJvbm1lbnRzOiBhbnlbXSB9PjtcclxuICAgIHB1YmxpYyBwYXNzVmFsdWVTdWJtaXQoc2VsZWN0ZWQ6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudHMgPSBzZWxlY3RlZDtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZVN1Ym1pdCkgdGhpcy52YWx1ZVN1Ym1pdCh7IGVudmlyb25tZW50czogdGhpcy5lbnZpcm9ubWVudHMgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSUNvbXBvbmVudCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9nZW5lcmFsXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9UcmFuc2xhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSUlkZW50aXR5TGluayB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2lGcXNcIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJmaWxlZHJvcGRvd25saXN0XCIsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJmaWxlZHJvcGRvd25saXN0IG5nLWNsYXNzOntvcGVuZWQ6JGN0cmwub3BlbmVkLHJlYWRvbmx5OiRjdHJsLnJlYWRPbmx5fVwiIGlkPVwie3snZmlsZWRyb3Bkb3dubGlzdCcrJGlkfX1cIiBjbGljay1vdXRzaWRlPVwiJGN0cmwub3BlbmVkPWZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdG9yIG5nLWNsYXNzOntzZWxlY3RvcGVuOiRjdHJsLm9wZW5lZCwgbm9wb2ludGVyOiRjdHJsLmZpbGVzLmxlbmd0aCA9PSAwLCBzZWxlY3RjbG9zZTohJGN0cmwub3BlbmVkfVwiIG5nLWNsaWNrPVwiJGN0cmwub3BlbmVkID0gISRjdHJsLm9wZW5lZCAmJiAkY3RybC5maWxlcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Rvci1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbiBpY29uLWF0dGFjaG1lbnRcIiB0b29sdGlwLWFwcGVuZC10by1ib2R5PVwidHJ1ZVwiIHRvb2x0aXAtY2xhc3M9XCJjdXN0b21Ub29sdGlwVEJcIiB0b29sdGlwLXBvcHVwLWRlbGF5PVwiNTAwXCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB1aWItdG9vbHRpcD1cInt7J1NIT1dfQVRUQUNITUVOVFNfVE9PTFRJUCcgfCB0cmFuc2xhdGVBdmFpbGFibGV9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3RUaXRsZVwiPnt7JGN0cmwuX3RpdGxlfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3snQVRUQUNITUVOVFMnIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVkcm9wbGlzdFwiIG5nLXNob3c9XCIkY3RybC5vcGVuZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVkcm9wbGlzdGl0ZW1cIiBuZy1yZXBlYXQ9XCJpdGVtIGluICRjdHJsLmZpbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgdG9vbHRpcC1jbGFzcz1cImN1c3RvbVRvb2x0aXBUQlwiIHRvb2x0aXAtYXBwZW5kLXRvLWJvZHk9XCJ0cnVlXCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB1aWItdG9vbHRpcD1cInt7JGN0cmwuZ2V0VG9vbHRpcChpdGVtKX19XCIgbmctY2xpY2s9XCIkY3RybC5maWxlc2VsZWN0ZWQoaXRlbS5pZClcIj57e2l0ZW0uZGVzY3JpcHRpb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIG5nLWlmPVwiJGN0cmwuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbJ0NVU1QnLCdTRCddKVwiIGNsYXNzPVwiaWNvbiBpY29uLXRyYXNoXCIgdG9vbHRpcC1hcHBlbmQtdG8tYm9keT1cInRydWVcIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCIgdG9vbHRpcC1wb3B1cC1kZWxheT1cIjUwMFwiIHRvb2x0aXAtcGxhY2VtZW50PVwiYm90dG9tXCIgdWliLXRvb2x0aXA9XCJ7eydSRU1PVkVfQVRUQUNITUVOVF9UT09MVElQJyB8IHRyYW5zbGF0ZUF2YWlsYWJsZX19XCIgbmctaGlkZT1cIiRjdHJsLnJlYWRPbmx5XCIgbmctY2xpY2s9XCIkY3RybC5vbmZpbGVkZWxldGUoe2ZpbGU6aXRlbS5pZH0pXCI+PHNwYW4gY2xhc3M9XCJwYXRoMVwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInBhdGgyXCI+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgIDwvZGl2PmBcclxufSlcclxuY2xhc3MgRmlsZURyb3Bkb3duTGlzdCBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBvcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfZmlsZXM6IEZpbGVJdGVtW107XHJcbiAgICBwcml2YXRlIF90aXRsZTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgZmlsZXMoKTogRmlsZUl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VG9vbHRpcChpdGVtOiBGaWxlSXRlbSkge1xyXG4gICAgICAgIGxldCBwYWQgPSAobjogbnVtYmVyKSA9PiAoMTAwICsgbikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkFEREVEX0JZX3swfV9PTl97MX1cIilcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCJ7MH1cIiwgaXRlbS5jcmVhdGVkQnkpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiezF9XCIsIGAke2l0ZW0uZGF0ZS5nZXRGdWxsWWVhcigpfS0ke3BhZChpdGVtLmRhdGUuZ2V0TW9udGgoKSArIDEpfS0ke3BhZChpdGVtLmRhdGUuZ2V0RGF0ZSgpKX0gJHtwYWQoaXRlbS5kYXRlLmdldEhvdXJzKCkpfToke3BhZChpdGVtLmRhdGUuZ2V0TWludXRlcygpKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IGZpbGVzKGZpbGVzOiBGaWxlSXRlbVtdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlcyA9IGZpbGVzLnNvcnQoKGEsIGIpID0+IGIuZGF0ZS5nZXRUaW1lKCkgLSBhLmRhdGUuZ2V0VGltZSgpKTtcclxuICAgICAgICAgICAgdGhpcy5fdGl0bGUgPSAoZmlsZXMgIT0gdW5kZWZpbmVkID8gdGhpcy5fZmlsZXMubGVuZ3RoLnRvU3RyaW5nKCkgOiBcIjBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaWxlc2VsZWN0ZWQoc2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpXHJcbiAgICAgICAgICAgIHRoaXMub25maWxlY2xpY2tlZCh7IGZpbGU6IHNlbGVjdGVkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25maWxlY2xpY2tlZDogKGFyZ3M6IHsgZmlsZTogSUlkZW50aXR5TGluayB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbmZpbGVkZWxldGU6IChhcmdzOiB7IGZpbGU6IElJZGVudGl0eUxpbmsgfSkgPT4gdm9pZDtcclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5fdGl0bGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uub25Mb2FkZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpdGxlID0gXCIwXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUl0ZW0ge1xyXG4gICAgaWQ6IElJZGVudGl0eUxpbms7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgZGF0ZTogRGF0ZTtcclxuICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xyXG59XHJcbiIsIu+7v2ltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgVGFibGVDZWxsLCBUYWJsZVJvdyB9IGZyb20gXCIuLi8uLi9jb250cm9scy9kYXRhdGFibGVcIjtcclxuaW1wb3J0IHsgQ2FzZUZpbGVEYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9maWxlXCI7XHJcbmltcG9ydCB7IEZpbGVSZWFkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpbGVSZWFkZXJTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRMaW1pdCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9UcmFuc2xhdGlvblNlcnZpY2VcIjtcclxuXHJcbmludGVyZmFjZSBDYXNlRmlsZURhdGFFeHQgZXh0ZW5kcyBDYXNlRmlsZURhdGEge1xyXG4gICAgZmlsZXNpemU6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRzY29wZScpIHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICBASW5qZWN0KCckcScpIHByaXZhdGUgJHE6IG5nLklRU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCdmaWxlUmVhZGVyU2VydmljZScpIHByaXZhdGUgZmlsZVJlYWRlclNlcnZpY2U6IEZpbGVSZWFkZXJTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ0F0dGFjaG1lbnRMaW1pdCcpIHByaXZhdGUgYXR0YWNobWVudExpbWl0OiBudW1iZXIsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgICkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9sZEZpbGVzTGVuZ3RoID0gMDtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcblxyXG4gICAgJHBvc3RMaW5rKCkge1xyXG4gICAgICAgIGxldCBhID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dCcpO1xyXG4gICAgICAgIGEub24oJ2NoYW5nZScsIHRoaXMub25hZGRmaWxlLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBmaWxlcygpOiBDYXNlRmlsZURhdGFbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZXMgPSBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9sZEZpbGVzTGVuZ3RoICE9PSB0aGlzLl9maWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhVGFibGUoKTtcclxuICAgICAgICAgICAgdGhpcy5vbGRGaWxlc0xlbmd0aCA9IHRoaXMuX2ZpbGVzLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IGZpbGVzKGZpbGVzOiBDYXNlRmlsZURhdGFbXSkge1xyXG4gICAgICAgIHRoaXMuX2ZpbGVzID0gZmlsZXM7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgb25maWxlYWRkZWQ6IChhcmdzOiB7IGZpbGU6IENhc2VGaWxlRGF0YSB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgb25maWxlcmVtb3ZlZDogKGFyZ3M6IHsgZmlsZTogQ2FzZUZpbGVEYXRhIH0pID0+IHZvaWQ7XHJcblxyXG4gICAgcHJpdmF0ZSBfZmlsZXM6IENhc2VGaWxlRGF0YVtdO1xyXG4gICAgcHJpdmF0ZSBfZGF0YVRhYmxlRGF0YTogVGFibGVSb3dbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBoYXNmaWxlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlRmlsZXNFeGNlZWRpbmdTaXplTGltaXQoZmlsZWxpc3Q6IENhc2VGaWxlRGF0YVtdKSB7XHJcbiAgICAgICAgbGV0IEZJTEVfVE9fTEFSR0UgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJGSUxFX1RPX0xBUkdFXCIsIGZhbHNlKTtcclxuICAgICAgICBsZXQgRklMRV9OT05fQ09OVEVOVCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkZJTEVfTk9OX0NPTlRFTlRcIiwgZmFsc2UpO1xyXG4gICAgICAgIGxldCBGSUxFX1VOS09XTl9FUlJPUiA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkZJTEVfVU5LT1dOX0VSUk9SXCIsIGZhbHNlKTtcclxuICAgICAgICBsZXQgaW5mb3JtYXRpb246IHN0cmluZ1tdID0gW1wiPHVsPlwiXTtcclxuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVsaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICgoPENhc2VGaWxlRGF0YUV4dD5maWxlKS5maWxlc2l6ZSA+IHRoaXMuYXR0YWNobWVudExpbWl0ICogMTAyNCAqIDEwMjQpIHtcclxuICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLnB1c2goYDxsaT4ke2ZpbGUuZmlsZW5hbWV9LCAke0ZJTEVfVE9fTEFSR0V9ICgkeygoPENhc2VGaWxlRGF0YUV4dD5maWxlKS5maWxlc2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpfSBNQik8L2xpPmApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCg8Q2FzZUZpbGVEYXRhRXh0PmZpbGUpLmZpbGVzaXplID09IDApIHtcclxuICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLnB1c2goYDxsaT4ke2ZpbGUuZmlsZW5hbWV9LCAke0ZJTEVfTk9OX0NPTlRFTlR9IDwvbGk+YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi5wdXNoKGA8bGk+JHtmaWxlLmZpbGVuYW1lfSwgJHtGSUxFX1VOS09XTl9FUlJPUn0gPC9saT5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbmZvcm1hdGlvbi5wdXNoKFwiPC91bD5cIilcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yRGlhbG9nKFwid2FybmluZ1wiLCAnRVJST1InLCAnRklMRVNfRVhDRUVEU19MSU1JVCcsIHsgbWVzc2FnZUFyZ3M6IFt0aGlzLmF0dGFjaG1lbnRMaW1pdC50b0ZpeGVkKDIpLCBpbmZvcm1hdGlvbi5qb2luKCcnKV0sIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBvbmZpbGVkcm9wKGZpbGVMaXN0OiBGaWxlTGlzdCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSByZXR1cm47XHJcbiAgICAgICAgbGV0IGZhdWx0ZWRGaWxlczogQ2FzZUZpbGVEYXRhW10gPSBbXTtcclxuICAgICAgICBsZXQgY29ycmVjdFNpemVkRmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3BsaXQoZmlsZUxpc3QsIHRoaXMuYXR0YWNobWVudExpbWl0LCBjb3JyZWN0U2l6ZWRGaWxlcywgZmF1bHRlZEZpbGVzKTtcclxuICAgICAgICBsZXQgcmVhZEZpbGVQcm9taXNlcyA9IHRoaXMubWFrZVJlYWRGaWxlUHJvbWlzZXMoY29ycmVjdFNpemVkRmlsZXMpO1xyXG4gICAgICAgIGxldCBuZXdmaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKHJlYWRGaWxlUHJvbWlzZXMpXHJcbiAgICAgICAgbmV3ZmlsZXMuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKHguY29udGVudCAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gZmlsZXMgaW4gdGhlIGxpc3QgYXJlIG1haW50YWluZWQgYnkgdGhlIEBJbnB1dCBmaWxlc1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLmZpbGVzLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uZmlsZWFkZGVkKHsgZmlsZTogeCB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZhdWx0ZWRGaWxlcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVGFibGUoKTtcclxuICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICg8YW55Pih0aGlzLiRlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2RhdGFUYWJsZUNvbnRlbnQnKVswXSkpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7IH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZmF1bHRlZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWxlc0V4Y2VlZGluZ1NpemVMaW1pdChmYXVsdGVkRmlsZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9udHJhc2goKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHJldHVybjtcclxuICAgICAgICBsZXQgdG9EZWxldGUgPSB0aGlzLl9kYXRhVGFibGVEYXRhLmZpbHRlcih4ID0+IHguc2VsZWN0ZWQpLm1hcCh5ID0+IHkuaWQpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFUYWJsZURhdGEuZmlsdGVyKHggPT4geC5zZWxlY3RlZCkuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlbWFpbmluZzogQ2FzZUZpbGVEYXRhW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZXMuZm9yRWFjaCh6ID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRvRGVsZXRlLnNvbWUoeCA9PiB4ID09IHouZmlsZW5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nLnB1c2goeik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25maWxlcmVtb3ZlZCh7IGZpbGU6IHogfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBmaWxlcyBpbiB0aGUgbGlzdCBhcmUgbWFpbnRhaW5lZCBieSB0aGUgQElucHV0IGZpbGVzXHJcbiAgICAgICAgICAgIC8vdGhpcy5fZmlsZXMgPSByZW1haW5pbmc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uRGVsZXRlKHJvd3M6IFRhYmxlUm93W10pIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBpZHMgPSByb3dzLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgIGxldCByZW1haW5pbmc6IENhc2VGaWxlRGF0YVtdID0gW107XHJcbiAgICAgICAgdGhpcy5fZmlsZXMuZm9yRWFjaCh6ID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmICghKGlkcy5zb21lKHggPT4geCA9PSB6LmZpbGVuYW1lKSkpIHtcclxuICAgICAgICAgICAgICAgIHJlbWFpbmluZy5wdXNoKHopO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbmZpbGVyZW1vdmVkKHsgZmlsZTogeiB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGZpbGVzIGluIHRoZSBsaXN0IGFyZSBtYWludGFpbmVkIGJ5IHRoZSBASW5wdXQgZmlsZXNcclxuICAgICAgICAvL3RoaXMuX2ZpbGVzID0gcmVtYWluaW5nO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBvbmFkZGZpbGUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVzID09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy5fZmlsZXMgPSBbXTtcclxuICAgICAgICBsZXQgZWwgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcclxuICAgICAgICBsZXQgZmF1bHRlZEZpbGVzOiBDYXNlRmlsZURhdGFbXSA9IFtdO1xyXG4gICAgICAgIGxldCBjb3JyZWN0U2l6ZWRGaWxlczogRmlsZVtdID0gW107XHJcbiAgICAgICAgbGV0IGZpbGVMaXN0ID0gPEZpbGVMaXN0PihlbCBhcyBhbnkpLmZpbGVzO1xyXG4gICAgICAgIHRoaXMuc3BsaXQoZmlsZUxpc3QsIHRoaXMuYXR0YWNobWVudExpbWl0LCBjb3JyZWN0U2l6ZWRGaWxlcywgZmF1bHRlZEZpbGVzKTtcclxuICAgICAgICBsZXQgcmVhZEZpbGVQcm9taXNlcyA9IHRoaXMubWFrZVJlYWRGaWxlUHJvbWlzZXMoY29ycmVjdFNpemVkRmlsZXMpO1xyXG4gICAgICAgIGxldCBuZXdmaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKHJlYWRGaWxlUHJvbWlzZXMpO1xyXG4gICAgICAgIG5ld2ZpbGVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh4LmNvbnRlbnQgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGZpbGVzIGluIHRoZSBsaXN0IGFyZSBtYWludGFpbmVkIGJ5IHRoZSBASW5wdXQgZmlsZXNcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5fZmlsZXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25maWxlYWRkZWQoeyBmaWxlOiB4IH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhVGFibGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZhdWx0ZWRGaWxlcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGZhdWx0ZWRGaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsZXNFeGNlZWRpbmdTaXplTGltaXQoZmF1bHRlZEZpbGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKGVsIGFzIGFueSkudmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBmaWx0ZXJzIG9mIGxhcmdlIGZpbGVzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge0ZpbGVMaXN0fSBmaWxlTGlzdCB0aGUgbGlzdCBvZiBmaWxlc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVMaW1pdCBpbiBNQiB1bml0czsgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzLmF0dGFjaG1lbnRMaW1pdDsgbXVsdGlwbGllZCAoKiAxMDI0ICogMTAyNCkgZm9yIEJ5dGVzIG9mIE1CIHVuaXRzXHJcbiAgICAgKiBAcGFyYW0ge0ZpbGVbXX0gY29ycmVjdFNpemVkRmlsZXMgaW5pdGlhbGl6ZWQgd2l0aCBlbXB0eSBhcnJheTsgZmlsZXMgaW4gZmlsZUxpc3Qgd2lsbCBiZSBhZGRlZCB0byBoZXJlIHdoZW4gYmVsb3cgc2l6ZUxpbWl0XHJcbiAgICAgKiBAcGFyYW0ge0Nhc2VGaWxlRGF0YVtdfSBmYXVsdGVkRmlsZXMgaW5pdGlhbGl6ZWQgd2l0aCBlbXB0eSBhcnJheTsgZmlsZXMgaW4gZmlsZUxpc3Qgd2lsbCBiZSBhZGRlZCB0byBoZXJlIHdoZW4gYWJvdmUgc2l6ZUxpbWl0XHJcbiAgICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZGVyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3BsaXQoZmlsZUxpc3Q6IEZpbGVMaXN0LCBzaXplTGltaXQ6IG51bWJlciwgY29ycmVjdFNpemVkRmlsZXM6IEZpbGVbXSwgZmF1bHRlZEZpbGVzOiBDYXNlRmlsZURhdGFbXSk6IHZvaWQge1xyXG4gICAgICAgIHNpemVMaW1pdCA9IChzaXplTGltaXQpID8gc2l6ZUxpbWl0ICogMTAyNCAqIDEwMjQgOiB0aGlzLmF0dGFjaG1lbnRMaW1pdCAqIDEwMjQgKiAxMDI0O1xyXG4gICAgICAgIGlmICghY29ycmVjdFNpemVkRmlsZXMpIGNvcnJlY3RTaXplZEZpbGVzID0gW107XHJcbiAgICAgICAgaWYgKCFmYXVsdGVkRmlsZXMpIGZhdWx0ZWRGaWxlcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZpbGU6IEZpbGUgPSBmaWxlTGlzdC5pdGVtKGkpO1xyXG4gICAgICAgICAgICBpZiAoZmlsZS5zaXplID49IHNpemVMaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgZmF1bHRlZEZpbGVzLnB1c2goPENhc2VGaWxlRGF0YUV4dD57XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGJ0b2EoXCJcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNpemU6IGZpbGUuc2l6ZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3JyZWN0U2l6ZWRGaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBtYWtlUmVhZEZpbGVQcm9taXNlcyhmaWxlczogRmlsZVtdKTogbmcuSVByb21pc2U8Q2FzZUZpbGVEYXRhPltdIHtcclxuICAgICAgICByZXR1cm4gZmlsZXMubWFwKHggPT4gdGhpcy5maWxlUmVhZGVyU2VydmljZS5SZWFkQXNCaW5hcnlTdHJpbmcoeCkudGhlbih5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHguc2l6ZSA8IHRoaXMuYXR0YWNobWVudExpbWl0ICogMTAyNCAqIDEwMjQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiA8Q2FzZUZpbGVEYXRhRXh0PntcclxuICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogeC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB4Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogYnRvYSg8c3RyaW5nPnkpLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzaXplOiB4LnNpemVcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPENhc2VGaWxlRGF0YUV4dD57XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogeC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGJ0b2EoXCJcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNpemU6IHguc2l6ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICApKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZURhdGFUYWJsZSgpIHtcclxuICAgICAgICB0aGlzLmhhc2ZpbGVzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbGV0IG5ld0RhdGEgPSB0aGlzLl9maWxlcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc2ZpbGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGxldCByb3cgPSBuZXcgVGFibGVSb3coaXRlbS5maWxlbmFtZSwgbmV3IEFycmF5PFRhYmxlQ2VsbD4oKSk7XHJcbiAgICAgICAgICAgICAgICByb3cuY2VsbHMucHVzaChuZXcgVGFibGVDZWxsKGl0ZW0uZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgICAgIGlmICgoPENhc2VGaWxlRGF0YUV4dD5pdGVtKS5maWxlc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5jZWxscy5wdXNoKG5ldyBUYWJsZUNlbGwoKDxDYXNlRmlsZURhdGFFeHQ+aXRlbSkuZmlsZXNpemUudG9TdHJpbmcoKSArICcgQnl0ZXMnKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5jZWxscy5wdXNoKG5ldyBUYWJsZUNlbGwoaXRlbS5jb250ZW50Lmxlbmd0aCArICcgQnl0ZXMnKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RhdGFUYWJsZURhdGEgPSBuZXdEYXRhO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RhdGFUYWJsZURhdGEgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBvbkZpbGVTZWxlY3RvcktleSgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKVxyXG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZChcImlucHV0XCIpWzBdLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwiZmlsZXVwbG9hZGVyXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9maWxlVXBsb2FkZXIuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkZXJFeHQgZXh0ZW5kcyBGaWxlVXBsb2FkZXIge1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwiZmlsZXVwbG9hZGJ1dHRvblwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmlld3MvZmlsZVVwbG9hZEJ1dHRvbi5odG1sXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRlckV4dDIgZXh0ZW5kcyBGaWxlVXBsb2FkZXIge1xyXG59XHJcbiIsImltcG9ydCB7IFNlcnZpY2VDYXNlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiO1xyXG5pbXBvcnQgeyBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VFZGl0IH0gZnJvbSBcIi4vc2VydmljZUNhc2VFZGl0XCI7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS91c2VyU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSBcIi4uLy4uL21vZGVscy91c2VyXCI7XHJcbmltcG9ydCB7IENvbXBhY3RQZXJzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BlcnNvblwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvZ1NlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VXYXRjaGVyczxUIGV4dGVuZHMgU2VydmljZUNhc2U+IHtcclxuICAgIHN0YXRpYyBjb250cm9sbGVySWQgPSAnTWFuYWdlV2F0Y2hlcnNDb21wb25lbnQnO1xyXG4gICAgcHJpdmF0ZSBzZWFyY2hGaWx0ZXI6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNMb2FkaW5nOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBzZXJ2aWNlQ2FzZVN0YXR1czogc3RyaW5nO1xyXG4gICAgcHVibGljIHNlcnZpY2VDYXNlRGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHVpYk1vZGFsSW5zdGFuY2UnKSBwcml2YXRlICRtb2RhbEluc3RhbmNlOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlSW5zdGFuY2UsXHJcbiAgICAgICAgQEluamVjdCgncGFnZScpIHB1YmxpYyBwYWdlOiBTZXJ2aWNlQ2FzZUVkaXQ8VD4sXHJcbiAgICAgICAgQEluamVjdCgnZW5hYmxlV2F0Y2gnKSBwcml2YXRlIGVuYWJsZVdhdGNoOiBib29sZWFuLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ2FwcGxpY2F0aW9uJykgcHJpdmF0ZSBhcHBsaWNhdGlvbjogQXBwbGljYXRpb24sXHJcbiAgICAgICAgQEluamVjdCgnc2VydmljZUNhc2UnKSBwcml2YXRlIHNlcnZpY2VDYXNlOiAoKSA9PiBUXHJcbiAgICApIHtcclxuICAgICAgICAkbW9kYWxJbnN0YW5jZS5vcGVuZWQudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZExpc3RzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24udXNlci50aGVuKHUgPT4gdGhpcy51c2VyID0gdSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlQ2FzZVN0YXR1cyA9IHRoaXMuc2VydmljZUNhc2UoKS5zdGF0dXM7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlQ2FzZURpc2FibGVkID0gKHRoaXMuc2VydmljZUNhc2VTdGF0dXMgPT09ICdjbG9zZWQnIHx8IHRoaXMuc2VydmljZUNhc2VTdGF0dXMgPT09ICdjYW5jZWxsZWQnKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcGVyc29uczogKENvbXBhY3RQZXJzb24gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pW107XHJcbiAgICBwcml2YXRlIHdhdGNoZXJzOiAoQ29tcGFjdFBlcnNvbiAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSlbXTtcclxuICAgIHByaXZhdGUgdXNlcjogVXNlcjtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHBlcnNvbkxpc3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc29ucyA/XHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uc1xyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihwID0+ICgocC5pc0ZpcWFzRW1wbG95ZWUgJiYgdGhpcy51c2VyLmlzRmlxYXNFbXBsb3llZSkgfHwgIXAuaXNGaXFhc0VtcGxveWVlKSAmJiAhcC5pc0Zvcm1lckVtcGxveWVlKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihwID0+ICF0aGlzLnNlYXJjaEZpbHRlciB8fCBwLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuc2VhcmNoRmlsdGVyLnRvTG93ZXJDYXNlKCkpID4gLTEpXHJcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5uYW1lID4gYi5uYW1lID8gMSA6IC0xKVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHdhdGNoZXJzTGlzdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53YXRjaGVycyA/XHJcbiAgICAgICAgICAgIHRoaXMud2F0Y2hlcnNcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNlYXJjaFZhbHVlQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGaWx0ZXIgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGxvYWRMaXN0cygpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLndhdGNoZXJzID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2VDYXNlKCkuYWN0aW9uTGlua3MuZ2VuZXJhbExpbmtzLmdldFdhdGNoZXJzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgd2F0Y2hlcnMgPSBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlKCkuYWN0aW9uTGlua3MuZ2VuZXJhbExpbmtzLmdldFdhdGNoZXJzLmFjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaGVycyA9IHdhdGNoZXJzLml0ZW1zXHJcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS50cmltKCkgPiBiLm5hbWUudHJpbSgpID8gMSA6IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAocCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8Q29tcGFjdFBlcnNvbiAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHAubmFtZS50cmltKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcWFzRW1wbG95ZWU6IHAuaXNGaXFhc0VtcGxveWVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGb3JtZXJFbXBsb3llZTogcC5pc0Zvcm1lckVtcGxveWVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZUNhc2UoKS53YXRjaGVyQ291bnQgPSB0aGlzLndhdGNoZXJzLmZpbHRlcih4ID0+ICF4LmlzRmlxYXNFbXBsb3llZSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwZXJzb25zID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5nZXRQZXJzb25zKFt0aGlzLnNlcnZpY2VDYXNlKCkuY3VzdG9tZXIucmVmXSk7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc29ucyA9IHBlcnNvbnMuaXRlbXNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIocCA9PiBwLmhhc0xvZ2luICYmICF0aGlzLndhdGNoZXJzLnNvbWUodyA9PiB3LmlkLnJlZiA9PSBwLmlkLnJlZikpXHJcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5uYW1lLnRyaW0oKSA+IGIubmFtZS50cmltKCkgPyAxIDogLTEpXHJcbiAgICAgICAgICAgICAgICAubWFwKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8Q29tcGFjdFBlcnNvbiAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUudHJpbSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcWFzRW1wbG95ZWU6IHAuaXNGaXFhc0VtcGxveWVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0Zvcm1lckVtcGxveWVlOiBwLmlzRm9ybWVyRW1wbG95ZWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdNYW5hZ2VXYXRjaGVycycsICdFcnJvciBsb2FkaW5nIGRhdGEnLCBlKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBDbG9zZSgpIHtcclxuICAgICAgICB0aGlzLiRtb2RhbEluc3RhbmNlLmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzZWxlY3RlZFBlcnNvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc29uTGlzdCA/IHRoaXMucGVyc29uTGlzdC5maWx0ZXIocCA9PiBwLnNlbGVjdGVkKS5tYXAocCA9PiBwLmlkLnJlZikgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGFkZFdhdGNoZXIocmVmOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIHBlcnNvbnMgPSByZWYgPyBbcmVmXSA6IHRoaXMuc2VsZWN0ZWRQZXJzb25zO1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVdhdGNoICYmIHBlcnNvbnMgJiYgcGVyc29ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc29ucyA9IHRoaXMucGVyc29ucy5maWx0ZXIocCA9PiAhcGVyc29ucy5zb21lKHBwID0+IHBwID09IHAuaWQucmVmKSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlKCkuYWN0aW9uTGlua3MuZ2VuZXJhbExpbmtzLmFkZFdhdGNoZXJzLmFjdGlvbihudWxsLCB7IFwicGVyc29uSWRcIjogcGVyc29ucyB9KVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTGlzdHMoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdNYW5hZ2VXYXRjaGVycycsICdFcnJvciBsb2FkaW5nIGRhdGEnLCBlKTtcclxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzZWxlY3RlZFdhdGNoZXJzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndhdGNoZXJzID8gdGhpcy53YXRjaGVycy5maWx0ZXIocCA9PiBwLnNlbGVjdGVkKS5tYXAocCA9PiBwLmlkLnJlZikgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZVdhdGNoZXIocmVmOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIHdhdGNoZXJzID0gcmVmID8gW3JlZl0gOiB0aGlzLnNlbGVjdGVkV2F0Y2hlcnM7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlV2F0Y2ggJiYgd2F0Y2hlcnMgJiYgd2F0Y2hlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLndhdGNoZXJzID0gdGhpcy53YXRjaGVycy5maWx0ZXIodyA9PiAhd2F0Y2hlcnMuc29tZSh3aSA9PiB3aSA9PSB3LmlkLnJlZikpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZSgpLmFjdGlvbkxpbmtzLmdlbmVyYWxMaW5rcy5yZW1vdmVXYXRjaGVycy5hY3Rpb24obnVsbCwgeyBcInBlcnNvbklkXCI6IHdhdGNoZXJzIH0pXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRMaXN0cygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ01hbmFnZVdhdGNoZXJzJywgJ0Vycm9yIGxvYWRpbmcgZGF0YScsIGUpO1xyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBlcnNvbktleXByZXNzKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCkge1xyXG4gICAgICAgIHZhciBrZXljb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09IFwiYVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJXYXRjaGVyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uTGlzdC5mb3JFYWNoKHAgPT4gcC5zZWxlY3RlZCA9IHRydWUpO1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBlcnNvbkNsaWNrZWQoZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0LCBwZXJzb246IENvbXBhY3RQZXJzb24pIHtcclxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJXYXRjaGVyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uTGlzdC5maWx0ZXIocCA9PiBwLmlkLmVxdWFscyhwZXJzb24uaWQpKS5mb3JFYWNoKHAgPT4gcC5zZWxlY3RlZCA9ICFwLnNlbGVjdGVkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJXYXRjaGVyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHZhciBwZXJzb25zID0gdGhpcy5wZXJzb25MaXN0O1xyXG4gICAgICAgICAgICB2YXIgZmlyc3QgPSBwZXJzb25zLmluZGV4T2YocGVyc29ucy5maWx0ZXIocCA9PiBwLnNlbGVjdGVkKS5zaGlmdCgpKTtcclxuICAgICAgICAgICAgdmFyIGxhc3QgPSBwZXJzb25zLmxhc3RJbmRleE9mKHBlcnNvbnMuZmlsdGVyKHAgPT4gcC5zZWxlY3RlZCkuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIHZhciBwaSA9IHBlcnNvbnMuaW5kZXhPZihwZXJzb25zLmZpbHRlcihwID0+IHAuaWQuZXF1YWxzKHBlcnNvbi5pZCkpLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICBwZXJzb25zLmZvckVhY2goKHAsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwaSA+PSBmaXJzdClcclxuICAgICAgICAgICAgICAgICAgICBwLnNlbGVjdGVkID0gaSA+PSBmaXJzdCAmJiBpIDw9IHBpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHAuc2VsZWN0ZWQgPSBpIDw9IGZpcnN0ICYmIGkgPj0gcGk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJXYXRjaGVyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uTGlzdC5mb3JFYWNoKHAgPT4gcC5zZWxlY3RlZCA9IHAuaWQuZXF1YWxzKHBlcnNvbi5pZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyUGVyc29uU2VsZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucGVyc29uTGlzdC5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBwLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhcldhdGNoZXJTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyc0xpc3QuZm9yRWFjaCgodykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdy5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgd2F0Y2hlcktleXByZXNzKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCkge1xyXG4gICAgICAgIHZhciBrZXljb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09IFwiYVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJQZXJzb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgdGhpcy53YXRjaGVyc0xpc3QuZm9yRWFjaChwID0+IHAuc2VsZWN0ZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB3YXRjaGVyQ2xpY2tlZChldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QsIHdhdGNoZXI6IENvbXBhY3RQZXJzb24pIHtcclxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJQZXJzb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgdGhpcy53YXRjaGVyc0xpc3QuZmlsdGVyKHAgPT4gcC5pZC5lcXVhbHMod2F0Y2hlci5pZCkpLmZvckVhY2gocCA9PiBwLnNlbGVjdGVkID0gIXAuc2VsZWN0ZWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclBlcnNvblNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB2YXIgcGVyc29ucyA9IHRoaXMud2F0Y2hlcnM7XHJcbiAgICAgICAgICAgIHZhciBmaXJzdCA9IHBlcnNvbnMuaW5kZXhPZihwZXJzb25zLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICB2YXIgbGFzdCA9IHBlcnNvbnMubGFzdEluZGV4T2YocGVyc29ucy5maWx0ZXIocCA9PiBwLnNlbGVjdGVkKS5zaGlmdCgpKTtcclxuICAgICAgICAgICAgdmFyIHBpID0gcGVyc29ucy5pbmRleE9mKHBlcnNvbnMuZmlsdGVyKHAgPT4gcC5pZC5lcXVhbHMod2F0Y2hlci5pZCkpLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICBwZXJzb25zLmZvckVhY2goKHAsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwaSA+PSBmaXJzdClcclxuICAgICAgICAgICAgICAgICAgICBwLnNlbGVjdGVkID0gaSA+PSBmaXJzdCAmJiBpIDw9IHBpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHAuc2VsZWN0ZWQgPSBpIDw9IGZpcnN0ICYmIGkgPj0gcGk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJQZXJzb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgdGhpcy53YXRjaGVyc0xpc3QuZm9yRWFjaChwID0+IHAuc2VsZWN0ZWQgPSBwLmlkLmVxdWFscyh3YXRjaGVyLmlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPdXRwdXQsIE91dHB1dEFyZ3MsIElucHV0LCBBdHRyaWJ1dGUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvdXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGVyc29uLCBDb21wYWN0UGVyc29uLCBHZXRQZXJzb25zUmVzdWx0IH0gZnJvbSBcIi4uLy4uL21vZGVscy9wZXJzb25cIjtcclxuaW1wb3J0IHsgV2ViTGluayB9IGZyb20gXCIuLi8uLi9tb2RlbHMvYmFzZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBQZXJzb25UeXBlQWhlYWQuc2VsZWN0b3IsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwZXJzb24tdHlwZS1haGVhZC1jb250YWluZXIgbmctY2xhc3M6eydoYXMtdmFsdWUnOiAkY3RybC5oYXNWYWx1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZy1tb2RlbD1cIiRjdHJsLnNlbGVjdGVkUGVyc29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1aWItdHlwZWFoZWFkPVwicGVyc29uIGFzIHBlcnNvbi5uYW1lIGZvciBwZXJzb24gaW4gJGN0cmwuc2VhcmNoUGVyc29uKCR2aWV3VmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWFoZWFkLWxvYWRpbmc9XCJsb2FkaW5nTG9jYXRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWFoZWFkLWFwcGVuZC10by1ib2R5PVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVhaGVhZC1lZGl0YWJsZT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nLWNsaWNrPVwiJGN0cmwuQ2xlYXJGaWVsZCgpXCIgY2xhc3M9XCJjbGVhcmZpZWxkLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWNsZWFyRmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5gLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiBcIl5hcHBsaWNhdGlvblwiXHJcbiAgICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJzb25UeXBlQWhlYWQge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwicGVyc29uVHlwZUFoZWFkXCI7XHJcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbjtcclxuICAgIHByaXZhdGUgcGVyc29uczogUHJvbWlzZTxHZXRQZXJzb25zUmVzdWx0PlxyXG4gICAgcHJpdmF0ZSBpbml0YWxpemVkOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXRhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGVyc29ucyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0UGVyc29ucyh0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLm1hcChjID0+IGMua2V5KSk7XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5hZGRPbkFjY291bnRzQ2hhbmdlZCgoc2VsZWN0b3I6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10pID0+IHRoaXMub25hZG1pbmlzdHJhdGlvbmNoYW5nZShzZWxlY3RvcikpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGVyc29ucztcclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkID0gdGhpcy5pbml0aWFsSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbElkID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbFJlZikge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVmID0gdGhpcy5pbml0aWFsUmVmO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxSZWYgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9maWx0ZXJGb3JtZXI6IGJvb2xlYW47XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIHNldCBmaWx0ZXJGb3JtZXIodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9maWx0ZXJGb3JtZXIgPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGZpbHRlckZvcm1lcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRm9ybWVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbmFkbWluaXN0cmF0aW9uY2hhbmdlKHNlbGVjdG9yOiB7IGtleTogYW55LCB0ZXh0OiBzdHJpbmcgfVtdKSB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25zID0gdGhpcy51c2VyU2VydmljZS5nZXRQZXJzb25zKHNlbGVjdG9yLm1hcCh4ID0+IHgua2V5KSk7XHJcbiAgICAgICAgdGhpcy5DbGVhckZpZWxkKClcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIENsZWFyRmllbGQoKSB7XHJcbiAgICAgICAgbGV0IHZhbCA9IHRoaXMuX3NlbGVjdGVkUGVyc29uO1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUGVyc29uID0gbnVsbDtcclxuICAgICAgICBpZiAodmFsKVxyXG4gICAgICAgICAgICB0aGlzLm9uUGVyc29uQ2hhbmdlZCh7IHBlcnNvbjogbnVsbCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBoYXNWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLl9zZWxlY3RlZFBlcnNvbjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGVGaXFhc0VtcGxveWVlczogYm9vbGVhbjtcclxuXHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsSWQ6IFdlYkxpbms7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBzZWxlY3RlZElkKGlkOiBXZWJMaW5rKSB7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbml0YWxpemVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsSWQgPSBpZDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25zLnRoZW4ocHMgPT4gdGhpcy5fc2VsZWN0ZWRQZXJzb24gPSBwcy5pdGVtcy5maWx0ZXIocCA9PiBwLmlkLmVxdWFscyhpZCkpLnNoaWZ0KCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUGVyc29uID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkSWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUGVyc29uID8gdGhpcy5fc2VsZWN0ZWRQZXJzb24uaWQgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbFJlZjogc3RyaW5nO1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWRSZWYocmVmOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAocmVmKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbml0YWxpemVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsUmVmID0gcmVmO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvbnMudGhlbihwcyA9PiB0aGlzLl9zZWxlY3RlZFBlcnNvbiA9IHBzLml0ZW1zLmZpbHRlcihwID0+IHAuaWQucmVmID09IHJlZikuc2hpZnQoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRQZXJzb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRSZWYoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUGVyc29uID8gdGhpcy5fc2VsZWN0ZWRQZXJzb24uaWQucmVmIDogbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaFBlcnNvbihzZWFyY2g6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBwZXJzb25zID0gYXdhaXQgdGhpcy5wZXJzb25zO1xyXG4gICAgICAgIHJldHVybiBwZXJzb25zLml0ZW1zXHJcbiAgICAgICAgICAgIC5maWx0ZXIocCA9PiBwLmhhc0xvZ2luICYmICghdGhpcy5oaWRlRmlxYXNFbXBsb3llZXMgfHwgIXAuaXNGaXFhc0VtcGxveWVlKSAmJiAoIXRoaXMuX2ZpbHRlckZvcm1lciB8fCAhcC5pc0Zvcm1lckVtcGxveWVlKSlcclxuICAgICAgICAgICAgLmZpbHRlcihwID0+IHAubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoLnRvTG93ZXJDYXNlKCkpID4gLTEpXHJcbiAgICAgICAgICAgIC5zb3J0KChwYSwgcGIpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzZCA9IHBhLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSAtIHBiLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZCA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGEubmFtZSA9PT0gcGIubmFtZSA/IDAgOiBwYS5uYW1lIDwgcGIubmFtZSA/IC0xIDogMTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZDtcclxuXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zbGljZSgwLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRQZXJzb246IENvbXBhY3RQZXJzb247XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHJpdmF0ZSBnZXQgc2VsZWN0ZWRQZXJzb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUGVyc29uO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXQgc2VsZWN0ZWRQZXJzb24ocGVyc29uOiBDb21wYWN0UGVyc29uKSB7XHJcbiAgICAgICAgbGV0IHZhbCA9IHRoaXMuX3NlbGVjdGVkUGVyc29uO1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUGVyc29uID0gcGVyc29uO1xyXG4gICAgICAgIGlmICh2YWwgIT0gdGhpcy5fc2VsZWN0ZWRQZXJzb24gJiYgKHZhbCAmJiB2YWwuaWQgfHwgdGhpcy5fc2VsZWN0ZWRQZXJzb24gJiYgdGhpcy5fc2VsZWN0ZWRQZXJzb24uaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25QZXJzb25DaGFuZ2VkKHsgcGVyc29uOiB0aGlzLl9zZWxlY3RlZFBlcnNvbiB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblBlcnNvbkNoYW5nZWQ6IE91dHB1dEFyZ3M8eyBwZXJzb246IENvbXBhY3RQZXJzb24gfT47XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSUNvbXBvbmVudCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPdXRwdXQsIEF0dHJpYnV0ZSwgT3V0cHV0QXJncyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9UcmFuc2xhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJpb3JpdHkgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwicHJpb3JpdHljaGVja2xpc3Rjb21ib1wiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICAgICAgPGNoZWNrbGlzdGNvbWJvIHZhbHVlLXN1bWJpdD1cIiRjdHJsLnBhc3NWYWx1ZVN1Ym1pdChzZWxlY3RlZClcIiByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiIG9uc2VsZWN0aW9uY2hhbmdlZD1cIiRjdHJsLnByaW9yaXRpZXNzZWxlY3RlZChzZWxlY3RlZClcIlxyXG4gICAgICAgICAgICAgICAgaXRlbXM9XCIkY3RybC5pdGVtc1wiIHNob3dBbGxPcHRpb249XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBhbGwtc2VsZWN0ZWQtdGV4dD1cIiRjdHJsLkFMTF9QUklPUklUSUVTX1NFTEVDVEVEIHwgdHJhbnNsYXRlIFwiXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZS1zZWxlY3RlZC10ZXh0PVwiJGN0cmwuTVVMVElQTEVfUFJJT1JJVElFU19TRUxFQ1RFRCB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBub25lLXNlbGVjdGVkLXRleHQ9XCInJ1wiIGNoZWNrZWQ9XCIkY3RybC5wcmlvcml0aWVzXCIgc2hvdy1jbGVhcj1cInt7JGN0cmwuc2hvd0NsZWFyfX1cIlxyXG4gICAgICAgICAgICAgICAgPjwvY2hlY2tsaXN0Y29tYm8+YFxyXG59KVxyXG5jbGFzcyBQcmlvcml0eUNoZWNrbGlzdENvbWJvIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9wcmlvcml0aWVzOiB7IGtleTogUHJpb3JpdHksIHRleHQ6IHN0cmluZyB9W107XHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIE1VTFRJUExFX1BSSU9SSVRJRVNfU0VMRUNURUQgPSBcIk1VTFRJUExFX1BSSU9SSVRJRVNfU0VMRUNURURcIjtcclxuICAgIHByaXZhdGUgQUxMX1BSSU9SSVRJRVNfU0VMRUNURUQgPSBcIkFMTF9QUklPUklUSUVTX1NFTEVDVEVEXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gPHsga2V5OiBQcmlvcml0eSwgdGV4dDogc3RyaW5nIH1bXT5bXHJcbiAgICAgICAgICAgIHtrZXk6ICdsb3cnLHRleHQ6J0xPVyd9LFxyXG4gICAgICAgICAgICB7a2V5OiAnbWVkaXVtJyx0ZXh0OiAnTUVESVVNJ30sXHJcbiAgICAgICAgICAgIHtrZXk6ICdoaWdoJyx0ZXh0OiAnSElHSCd9XTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdHJhbnNsYXRlSXRlbXMoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uub25Mb2FkZWQ7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMubWFwKGkgPT4geyBpLnRleHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoaS50ZXh0KTsgcmV0dXJuIGk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IHByaW9yaXRpZXMoKTogeyBrZXk6IFByaW9yaXR5LCB0ZXh0OiBzdHJpbmcgfVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJpb3JpdGllcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgcHJpb3JpdGllcyhwcmlvcml0aWVzOiB7IGtleTogUHJpb3JpdHksIHRleHQ6IHN0cmluZyB9W10pIHtcclxuICAgICAgICB0aGlzLl9wcmlvcml0aWVzID0gcHJpb3JpdGllcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3Nob3dDbGVhcjtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IHNob3dDbGVhcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0NsZWFyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzaG93Q2xlYXIodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd0NsZWFyID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGl0ZW1zOiB7IGtleTogUHJpb3JpdHksIHRleHQ6IHN0cmluZyB9W107XHJcblxyXG4gICAgcHVibGljIHByaW9yaXRpZXNzZWxlY3RlZChzZWxlY3RlZDogYW55W10pIHtcclxuICAgICAgICB0aGlzLnByaW9yaXRpZXMgPSBzZWxlY3RlZDtcclxuICAgICAgICB0aGlzLm9uUHJpb3JpdHlDaGFuZ2VkKHsgcHJpb3JpdGllczogdGhpcy5wcmlvcml0aWVzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25Qcmlvcml0eUNoYW5nZWQ6IChhcmdzOiB7IHByaW9yaXRpZXM6IGFueVtdIH0pID0+IHZvaWQ7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIHZhbHVlU3VibWl0OiBPdXRwdXRBcmdzPHsgcHJpb3JpdGllczogeyBrZXk6IHN0cmluZywgdGV4dDogc3RyaW5nIH1bXSB9PjtcclxuICAgIHB1YmxpYyBwYXNzVmFsdWVTdWJtaXQoc2VsZWN0ZWQ6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5wcmlvcml0aWVzID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVTdWJtaXQpIHRoaXMudmFsdWVTdWJtaXQoeyBwcmlvcml0aWVzOiB0aGlzLnByaW9yaXRpZXMgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSUNvbXBvbmVudCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPdXRwdXQsIEF0dHJpYnV0ZSwgT3V0cHV0QXJncyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgUHJpb3JpdHkgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwicHJpb3JpdHlkcm9wZG93bmJveFwiLFxyXG4gICAgdGVtcGxhdGU6IGA8ZHJvcGRvd25ib3hcclxuICAgICAgICAgICAgICAgIHJlYWQtb25seT1cIiRjdHJsLnJlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgIHZhbHVlLXN1Ym1pdD1cIiRjdHJsLnBhc3NWYWx1ZVN1Ym1pdChzZWxlY3RlZClcIlxyXG4gICAgICAgICAgICAgICAgbXVsdGlzZWxlY3R0ZXh0PVwiJ01VTFRJUExFX1BSSU9SSVRJRVNfU0VMRUNURUQnXCIgbXVsdGlzZWxlY3Q9XCIkY3RybC5tdWx0aXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICBoaW50PVwiJ1BsZWFzZSBjaG9vc2UgYSBzZXZlcml0eSdcIiBzZWxlY3RlZD1cIiRjdHJsLnByaW9yaXRpZXNcIlxyXG4gICAgICAgICAgICAgICAgaXRlbXM9XCJbe2tleTonbG93Jyx0ZXh0OidMT1cnfSx7a2V5OidtZWRpdW0nLHRleHQ6J01FRElVTSd9LHtrZXk6J2hpZ2gnLHRleHQ6J0hJR0gnfV1cIlxyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBpc2Vycm9yPVwiJGN0cmwuaXNlcnJvclwiXHJcbiAgICAgICAgICAgICAgICBvbnNlbGVjdGlvbmNoYW5nZWQ9XCIkY3RybC5wcmlvcml0aWVzc2VsZWN0ZWQoc2VsZWN0ZWQpXCIgc2hvdy1jbGVhcj1cInt7JGN0cmwuc2hvd0NsZWFyfX1cIlxyXG4gICAgICAgICAgICAgICAgPjwvZHJvcGRvd25ib3g+YFxyXG59KVxyXG5jbGFzcyBQcmlvcml0eURyb3Bkb3duQm94IGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBwcml2YXRlIF9wcmlvcml0aWVzOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc2Vycm9yOiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IHByaW9yaXRpZXMoKTogUHJpb3JpdHlbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW9yaXRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHByaW9yaXRpZXMocHJpb3JpdGllczogUHJpb3JpdHlbXSkge1xyXG4gICAgICAgIHRoaXMuX3ByaW9yaXRpZXMgPSBwcmlvcml0aWVzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2hvd0NsZWFyO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgc2hvd0NsZWFyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93Q2xlYXI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dDbGVhcih2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zaG93Q2xlYXIgPSB2YWwgPT09IHRydWUgfHwgdmFsID09PSBcInRydWVcIjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlzZWxlY3Q6IGJvb2xlYW47XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uUHJpb3JpdHlDaGFuZ2VkOiBPdXRwdXRBcmdzPHsgcHJpb3JpdGllczogUHJpb3JpdHlbXSB9PjtcclxuICAgIHB1YmxpYyBwcmlvcml0aWVzc2VsZWN0ZWQoc2VsZWN0ZWQ6IFByaW9yaXR5W10pIHtcclxuICAgICAgICB0aGlzLnByaW9yaXRpZXMgPSBzZWxlY3RlZDtcclxuICAgICAgICB0aGlzLm9uUHJpb3JpdHlDaGFuZ2VkKHsgcHJpb3JpdGllczogdGhpcy5wcmlvcml0aWVzIH0pO1xyXG4gICAgfVxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZVN1Ym1pdDogT3V0cHV0QXJnczx7IHByaW9yaXRpZXM6IFByaW9yaXR5W10gfT47XHJcbiAgICBwdWJsaWMgcGFzc1ZhbHVlU3VibWl0KHZhbHVlOiBQcmlvcml0eVtdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVTdWJtaXQpIHRoaXMudmFsdWVTdWJtaXQoeyBwcmlvcml0aWVzOiB2YWx1ZSB9KTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBDb21wb25lbnQsIEF0dHJpYnV0ZSwgSW5wdXQsIE91dHB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdwcmlvcml0eWJhcicsXHJcbiAgICB0ZW1wbGF0ZTogYDxyYWRpb2JhciByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiIGdyb3VwPVwicHJpb3JpdHlcIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB1aWItdG9vbHRpcD1cInt7J1BSSU9SSVRZX1RPT0xUSVAnIHwgdHJhbnNsYXRlfX06IHt7JGN0cmwucHJpb3JpdHkudG9VcHBlckNhc2UoKSB8IHRyYW5zbGF0ZX19XCIgdmFsdWU9XCIkY3RybC5wcmlvcml0eVwiIG9ub3B0aW9uY2hhbmdlZD1cIiRjdHJsLm9ub3B0aW9uY2hhbmdlZCh2YWx1ZSx0ZXh0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmFkaW9iYXJvcHRpb24gdmFsdWU9XCInbG93J1wiIHRleHQ9XCIoJ0xPVycgfCB0cmFuc2xhdGUpXCIgbm90YWxsb3dlZD1cImZhbHNlXCIgYWN0aXZlY29sb3I9XCInYmx1ZSdcIj48L3JhZGlvYmFyb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmFkaW9iYXJvcHRpb24gdmFsdWU9XCInbWVkaXVtJ1wiIHRleHQ9XCIoJ01FRElVTScgfCB0cmFuc2xhdGUpXCIgbm90YWxsb3dlZD1cImZhbHNlXCIgYWN0aXZlY29sb3I9XCInYmx1ZSdcIj48L3JhZGlvYmFyb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmFkaW9iYXJvcHRpb24gdmFsdWU9XCInaGlnaCdcIiB0ZXh0PVwiKCdISUdIJyB8IHRyYW5zbGF0ZSlcIiBub3RhbGxvd2VkPVwiZmFsc2VcIiBhY3RpdmVjb2xvcj1cIidyZWQnXCI+PC9yYWRpb2Jhcm9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JhZGlvYmFyPmBcclxufSlcclxuZXhwb3J0IGNsYXNzIFByaW9yaXR5QmFyIHtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuXHJcbiAgICBwcml2YXRlIF9wcmlvcml0eTogYW55O1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgcHJpb3JpdHkoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJpb3JpdHk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHByaW9yaXR5KHByaW9yaXR5OiBhbnkpIHtcclxuICAgICAgICBsZXQgcCA9IHRoaXMuX3ByaW9yaXR5O1xyXG4gICAgICAgIHRoaXMuX3ByaW9yaXR5ID0gcHJpb3JpdHk7XHJcbiAgICAgICAgaWYgKHAgIT09IHByaW9yaXR5ICYmIHAgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aGlzLm9ucHJpb3JpdHljaGFuZ2VkKHsgcHJpb3JpdHk6IHByaW9yaXR5IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbm9wdGlvbmNoYW5nZWQodmFsdWU6IGFueSwgdGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5wcmlvcml0eSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25wcmlvcml0eWNoYW5nZWQ6IChhcmdzOiB7IHByaW9yaXR5OiBhbnkgfSkgPT4gdm9pZDtcclxuXHJcbn1cclxuXHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgUmVjZW50U2VydmljZUNhc2VzUmVzdWx0LCBDb21wYWN0U2VydmljZUNhc2UgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS91c2VyU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi9hcHBsaWNhdGlvblwiXHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiXHJcbmltcG9ydCB7IElzUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvaXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvZ1NlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJyZWNlbnRDYXNlc1wiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmlld3MvcmVjZW50Q2FzZXMuaHRtbFwiLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIFwiYXBwbGljYXRpb25cIjogXCJeYXBwbGljYXRpb25cIlxyXG4gICAgfVxyXG59KVxyXG5jbGFzcyBSZWNlbnRDYXNlcyBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgcHVibGljIGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbjtcclxuICAgIHByaXZhdGUgZGlzcG9zYWJsZXM6IElEaXNwb3NhYmxlW10gPSBbXTtcclxuICAgIGNvbnN0cnVjdG9yKCBASW5qZWN0KCkgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaXNQcm9jZXNzaW5nU2VydmljZTogSXNQcm9jZXNzaW5nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKHRoaXMuYXBwbGljYXRpb24uYWRkT25BY2NvdW50c0NoYW5nZWQocyA9PiB0aGlzLnNlbGVjdGVkQWNjb3VudHNDaGFuZ2VkKHMpKSk7XHJcbiAgICAgICAgbGV0IGN1c3RJZHMgPSB0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLm1hcCh4ID0+IHgua2V5KTtcclxuICAgICAgICB0aGlzLmdldERhdGEoY3VzdElkcyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RGF0YShjdXN0SWRzOiBudW1iZXJbXSkge1xyXG4gICAgICAgIGlmIChjdXN0SWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgICAgIGxldCByID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5SZWNlbnRTZXJ2aWNlQ2FzZXMoY3VzdElkcywgMTApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ2FzZXMgPSByLml0ZW1zO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1JlY2VudENhc2VzJywgJ0Vycm9yIHJldHJpZXZpbmcgcmVjZW50Y2FzZXMnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHsgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7IH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VDYXNlcyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IGQoKSB9IGNhdGNoIChlKSB7IHRoaXMubG9nU2VydmljZS53YXJuaW5nKCdSZWNlbnRDYXNlcycsICdFcnJvciBkaXNwb3NpbmcnLCBlKTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2VsZWN0ZWRBY2NvdW50c0NoYW5nZWQoc2VsZWN0ZWQ6IHsga2V5OiBzdHJpbmcsIHRleHQ6IHN0cmluZyB9W10pIHtcclxuICAgICAgICB0aGlzLmdldERhdGEoc2VsZWN0ZWQubWFwKHggPT4gTnVtYmVyKHgua2V5KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2VydmljZUNhc2VzOiBDb21wYWN0U2VydmljZUNhc2VbXTtcclxufSIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBBdHRyaWJ1dGUsIE91dHB1dEFyZ3MgfSBmcm9tICdAZmlxYXMvYW5ndWxhci11dGlscyc7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9nZW5lcmFsXCJcclxuaW1wb3J0IHsgVGV4dEVkaXRvckNvbW1hbmRzIH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xzL2VkaXRvci90ZXh0ZWRpdG9yXCI7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ2FzZUZpbGVEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpbGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcInJpY2h0ZXh0ZWRpdG9yXCIsXHJcbiAgICB0ZW1wbGF0ZTogUmljaHRleHRFZGl0b3IudGVtcGxhdGVcclxufSlcclxuZXhwb3J0IGNsYXNzIFJpY2h0ZXh0RWRpdG9yIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlID0gYDxkaXYgY2xhc3M9XCJlZGl0Y29udGFpbmVyXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPHRleHQtZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU9XCIkY3RybC5lZGl0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIkY3RybC5pbnRlcm5hbFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPVwiJGN0cmwub25lZGl0b3J2YWx1ZWNoYW5nZWQodmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICBtYXgtaW1hZ2Utd2lkdGg9XCIkY3RybC5tYXhJbWFnZVdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBtYXgtaW1hZ2UtaGVpZ2h0PVwiJGN0cmwubWF4SW1hZ2VIZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uZmlsZWFkZGVkPVwiJGN0cmwub25OZXdBdHRhY2htZW50KGZpbGUpXCJcclxuICAgICAgICAgICAgICAgICAgICBoaW50PVwie3s6OiRjdHJsLmhpbnR9fVwiXHJcbiAgICAgICAgICAgICAgICA+PC90ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgIDxwdXNoaWNvbiB0b29sdGlwLXBsYWNlbWVudD1cImJvdHRvbVwiIHVpYi10b29sdGlwPVwie3sgJ1JURV9PUEVOJyB8IHRyYW5zbGF0ZSB9fVwiIHRvb2x0aXAtY2xhc3M9XCJjdXN0b21Ub29sdGlwVEJcIiB0b29sdGlwLWlzLW9wZW49XCIkY3RybC5tYXhpbWl6ZVRvb2x0aXBcIiB0b29sdGlwLWFwcGVuZC10by1ib2R5PVwidHJ1ZVwiIG9uY2xpY2tlZD1cIiRjdHJsLm1vZGFsKClcIiBjbGFzcz0nZWRpdG9yQnRuIGVkaXRvckJ0bk1vZGFsJyBpY29uPVwiaWNvbi1yZXNpemVcIiBuZy1oaWRlPVwiJGN0cmwubW9kYWxJbnN0YW5jZVwiPjwvcHVzaGljb24+XHJcbiAgICAgICAgICAgICAgICA8cHVzaGljb24gdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB1aWItdG9vbHRpcD1cInt7ICdSVEVfQ0xPU0UnIHwgdHJhbnNsYXRlIH19XCIgdG9vbHRpcC1jbGFzcz1cImN1c3RvbVRvb2x0aXBUQlwiIHRvb2x0aXAtaXMtb3Blbj1cIiRjdHJsLm1pbmltaXplVG9vbHRpcFwiIHRvb2x0aXAtYXBwZW5kLXRvLWJvZHk9XCJ0cnVlXCIgb25jbGlja2VkPVwiJGN0cmwubW9kYWxDbG9zZSgpXCIgY2xhc3M9J2VkaXRvckJ0biBlZGl0b3JCdG5Nb2RhbCcgaWNvbj1cImljb24tcmVzaXplYmFja1wiIG5nLWhpZGU9XCIhJGN0cmwubW9kYWxJbnN0YW5jZSB8fCAkY3RybC5lZGl0YWJsZVwiPjwvcHVzaGljb24+XHJcbiAgICAgICAgICAgICAgICA8cHVzaGljb24gdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB1aWItdG9vbHRpcD1cInt7ICdSVEVfRURJVCcgfCB0cmFuc2xhdGUgfX1cIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCIgdG9vbHRpcC1hcHBlbmQtdG8tYm9keT1cInRydWVcIiBvbmNsaWNrZWQ9XCIkY3RybC5lZGl0KClcIiBjbGFzcz0nZWRpdG9yQnRuIGVkaXRvckJ0bkVkaXQnIGljb249XCJpY29uLWVkaXRcIiBuZy1oaWRlPVwiJGN0cmwucmVhZE9ubHkgfHwgJGN0cmwuZWRpdGFibGVcIj48L3B1c2hpY29uPlxyXG4gICAgICAgICAgICAgICAgPHB1c2hpY29uIHRvb2x0aXAtcGxhY2VtZW50PVwiYm90dG9tXCIgdWliLXRvb2x0aXA9XCJ7eyAnUlRFX1NBVkUnIHwgdHJhbnNsYXRlIH19XCIgdG9vbHRpcC1jbGFzcz1cImN1c3RvbVRvb2x0aXBUQlwiIHRvb2x0aXAtYXBwZW5kLXRvLWJvZHk9XCJ0cnVlXCIgb25jbGlja2VkPVwiJGN0cmwuc2F2ZSgpXCIgY2xhc3M9J2VkaXRvckJ0biBlZGl0b3JCdG5TYXZlJyBpY29uPVwiaWNvbi1TQVZFLUNIRUNLXCIgbmctc2hvdz1cIiRjdHJsLmVkaXRhYmxlXCI+PC9wdXNoaWNvbj5cclxuICAgICAgICAgICAgICAgIDxwdXNoaWNvbiB0b29sdGlwLXBsYWNlbWVudD1cImJvdHRvbVwiIHVpYi10b29sdGlwPVwie3sgJ1JURV9DQU5DRUwnIHwgdHJhbnNsYXRlIH19XCIgdG9vbHRpcC1jbGFzcz1cImN1c3RvbVRvb2x0aXBUQlwiIHRvb2x0aXAtYXBwZW5kLXRvLWJvZHk9XCJ0cnVlXCIgb25jbGlja2VkPVwiJGN0cmwuY2FuY2VsKClcIiBjbGFzcz0nZWRpdG9yQnRuIGVkaXRvckJ0bkNhbmNlbCcgaWNvbj1cImljb24tQ2xlYXItRWRpdFwiIG5nLXNob3c9XCIkY3RybC5lZGl0YWJsZVwiPjwvcHVzaGljb24+XHJcbiAgICAgICAgICAgICAgIDwvZGl2PmBcclxuXHJcbiAgICBwcml2YXRlIGRpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdID0gW107XHJcblxyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBoaW50OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4SW1hZ2VXaWR0aDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgcHVibGljIG1heEltYWdlSGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbmVkaXRzdGFydDogKGFyZ3M6IHsgc291cmNlOiBSaWNodGV4dEVkaXRvciB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbmVkaXRlbmQ6IChhcmdzOiB7IHNvdXJjZTogUmljaHRleHRFZGl0b3IsIHZhbHVlOiBzdHJpbmcgfSkgPT4gdm9pZDtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25lZGl0Y2FuY2VsOiAoYXJnczogeyBzb3VyY2U6IFJpY2h0ZXh0RWRpdG9yIH0pID0+IHZvaWQ7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9ubmV3YXR0YWNobWVudDogT3V0cHV0QXJnczx7IGF0dGFjaG1lbnQ6IENhc2VGaWxlRGF0YSB9PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRzY29wZScpIHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFNjb3BlJykgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbCcpIHByaXZhdGUgJHVpYk1vZGFsOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRlbGVtZW50JykgcHJpdmF0ZSAkZWxlbWVudDogYW5ndWxhci5JUm9vdEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ0F1dGhlbnRpY2F0aW9uU2VydmljZScpIHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnQXV0aG9yaXphdGlvblNlcnZpY2UnKSBwcml2YXRlIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRlbWl0KCdyaWNoVGV4dEVkaXRvckluaXRpYWxpemVkJywgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlICYmIHRoaXMuaW50ZXJuYWxWYWx1ZSAmJiB0aGlzLmludGVybmFsVmFsdWUubGVuZ3RoICYmIHRoaXMuaW50ZXJuYWxWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPSB0aGlzLmludGVybmFsVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmludGVybmFsVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lZGl0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoY2hhbmdlZClcclxuICAgICAgICAgICAgICAgIHRoaXMub25lZGl0ZW5kKHsgc291cmNlOiB0aGlzLCB2YWx1ZTogdGhpcy52YWx1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlZGl0KCkge1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25lZGl0c3RhcnQoeyBzb3VyY2U6IHRoaXMgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRicm9hZGNhc3QoVGV4dEVkaXRvckNvbW1hbmRzLkN1cnNvckF0RW5kKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsVmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuICAgICAgICB0aGlzLmludGVybmFsVmFsdWUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbmVkaXRjYW5jZWwoeyBzb3VyY2U6IHRoaXMgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBwcml2YXRlIGludGVybmFsVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgb25lZGl0b3J2YWx1ZWNoYW5nZWQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHY6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdjtcclxuICAgICAgICB0aGlzLmludGVybmFsVmFsdWUgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RyaXBSaWNoVGV4dFJlZ2V4OiBhbnkgPSAvKD8hLmltZy4qc3JjLispKDwoW14+XSspPil8Jm5ic3A7fFxccy9pZztcclxuICAgIHByaXZhdGUgZ2V0IGhhc1ZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsVmFsdWUgIT09IG51bGwgJiYgdGhpcy5pbnRlcm5hbFZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbnRlcm5hbFZhbHVlLnJlcGxhY2UodGhpcy5zdHJpcFJpY2hUZXh0UmVnZXgsIFwiXCIpICE9PSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIEBBdHRyaWJ1dGUoKVxyXG4gICAgcHVibGljIGxhbmd1YWdlOiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uRWRpdGFibGVDaGFuZ2VkOiAoYXJnczogeyBlZGl0YWJsZTogYm9vbGVhbiB9KSA9PiB2b2lkO1xyXG5cclxuICAgIHByaXZhdGUgX2VkaXRhYmxlOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgZSA9IHRoaXMuX2VkaXRhYmxlO1xyXG4gICAgICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWUgJiYgIXRoaXMuX3JlYWRPbmx5O1xyXG4gICAgICAgIGlmIChlICE9IHRoaXMuX2VkaXRhYmxlKVxyXG4gICAgICAgICAgICB0aGlzLm9uRWRpdGFibGVDaGFuZ2VkKHsgZWRpdGFibGU6IHRoaXMuX2VkaXRhYmxlIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCByZWFkT25seSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fcmVhZE9ubHkgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25OZXdBdHRhY2htZW50KGZpbGVEYXRhOiBDYXNlRmlsZURhdGEpIHtcclxuICAgICAgICB0aGlzLm9ubmV3YXR0YWNobWVudCh7IGF0dGFjaG1lbnQ6IGZpbGVEYXRhIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWluaW1pemVUb29sdGlwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG1heGltaXplVG9vbHRpcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBtb2RhbEluc3RhbmNlOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlSW5zdGFuY2U7XHJcbiAgICBwdWJsaWMgYXN5bmMgbW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5tYXhpbWl6ZVRvb2x0aXAgPSBmYWxzZTtcclxuICAgICAgICBsZXQgZGl2O1xyXG4gICAgICAgIGxldCBhZGl2ID0gdGhpcy4kZWxlbWVudC5maW5kKFwiZGl2XCIpO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChhZGl2LCBkID0+IHtcclxuICAgICAgICAgICAgaWYgKGQuY2xhc3NOYW1lLmluZGV4T2YoXCJlZGl0Y29udGFpbmVyXCIpID4gLTEpXHJcbiAgICAgICAgICAgICAgICBkaXYgPSBkO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSAoJHNjb3BlOiBhbmd1bGFyLklTY29wZSkgPT4ge1xyXG4gICAgICAgICAgICAkc2NvcGUuJG9uKFwibW9kYWwuY2xvc2luZ1wiLCBlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxlKVxyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFwcGVuZChkaXYpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udHJvbGxlci4kaW5qZWN0ID0gWyckc2NvcGUnXTtcclxuICAgICAgICB0aGlzLm1vZGFsSW5zdGFuY2UgPSB0aGlzLiR1aWJNb2RhbC5vcGVuKHtcclxuICAgICAgICAgICAgc2NvcGU6IHRoaXMuJHNjb3BlLFxyXG4gICAgICAgICAgICBhcHBlbmRUbzogdGhpcy4kZWxlbWVudCxcclxuICAgICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgICAgdGVtcGxhdGU6IFwiPGRpdj48bW9kYWw+PC9tb2RhbD48L2Rpdj5cIixcclxuICAgICAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlclxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5jbG9zZWQuZmluYWxseSgoKSA9PiB7IHRoaXMubW9kYWxJbnN0YW5jZSA9IG51bGw7IH0pO1xyXG4gICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5yZXN1bHQuY2F0Y2goXyA9PiB7IH0pXHJcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbEluc3RhbmNlLnJlbmRlcmVkO1xyXG4gICAgICAgIGxldCBtb2RhbCA9IHRoaXMuJGVsZW1lbnQuZmluZChcIm1vZGFsXCIpXHJcbiAgICAgICAgbW9kYWwucmVwbGFjZVdpdGgoZGl2KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhc3luYyBtb2RhbENsb3NlKCkge1xyXG4gICAgICAgIHRoaXMubWluaW1pemVUb29sdGlwID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB0aGlzLm1vZGFsSW5zdGFuY2UuY2xvc2UoKSwgMjApO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBBdHRyaWJ1dGUsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAncm9sZXRvZ2dsZXN3aXRjaCcsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJ0b2dnbGVzd2l0Y2ggbmctY2xhc3M6e2hhc2ZvY3VzOiRjdHJsLmhhc2ZvY3VzLCByZWFkb25seTokY3RybC5yZWFkT25seX1cIiB0YWJpbmRleD1cInt7JGN0cmwudGFiSW5kZXggfHwgMH19XCJcclxuICAgICAgICAgICAgICAgIG5nLWtleWRvd249XCIkY3RybC5vbktleWRvd24oJGV2ZW50KVwiIG5nLW1vdXNlZG93bj1cIiRjdHJsLnRvZ2dsZSgkZXZlbnQpXCIgbmctZm9jdXM9XCIkY3RybC5vbkZvY3VzKClcIiBuZy1ibHVyPVwiJGN0cmwub25CbHVyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7JGN0cmwuc3dpdGNoQ2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhdGgxXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwicGF0aDJcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJwYXRoM1wiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInBhdGg0XCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwicGF0aDVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUm9sZVRvZ2dsZXN3aXRjaCB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaWdub3JlS2V5czogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFNjb3BlJykgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgdGFiSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHN3aXRjaENsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiBgaWNvbi1jaGVja2JveCR7dGhpcy5hY3RpdmUgPyAnT04nIDogJ09GRid9JHt0aGlzLmhhc2ZvY3VzID8gJy1Gb2N1cycgOiAnJ31gO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgYWN0aXZlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW3RoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuaGlnaFJvbGVdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlKCRldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QgfCBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc2ZvY3VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzZm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2ZWNoYW5nZWQoeyBzb3VyY2U6IHRoaXMsIGFjdGl2ZTogIXRoaXMuYWN0aXZlIH0pO1xyXG4gICAgfVxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBhY3RpdmVjaGFuZ2VkOiAoYXJnczogeyBzb3VyY2U6IFJvbGVUb2dnbGVzd2l0Y2gsIGFjdGl2ZTogYm9vbGVhbiB9KSA9PiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWdub3JlS2V5cylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHN3aXRjaCAoJGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDMyOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoJGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAzNzpcclxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB0aGlzLmFjdGl2ZWNoYW5nZWQoeyBzb3VyY2U6IHRoaXMsIGFjdGl2ZTogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMzk6XHJcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHRoaXMuYWN0aXZlY2hhbmdlZCh7IHNvdXJjZTogdGhpcywgYWN0aXZlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdldCBoYXNmb2N1cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZm9jdXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGhhc2ZvY3VzKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9mb2N1cyAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGhpcy4kZWxlbWVudFswXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCcudG9nZ2xlc3dpdGNoJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9mb2N1cyA9IHZhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uRm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy5oYXNmb2N1cyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG9uQmx1cigpIHtcclxuICAgICAgICB0aGlzLmhhc2ZvY3VzID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsIu+7v2ltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IHJldHJ5IH0gZnJvbSBcInJ4anMvb3BlcmF0b3IvcmV0cnlcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFNhdmVEaWFsb2dSZXN1bHQgPSBcInN0YXlcIiB8IFwiZGlzY2FyZFwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogU2F2ZURpYWxvZy5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2F2ZURpYWxvZyB7XHJcbiAgICBzdGF0aWMgc2VsZWN0b3IgPSBcInNhdmVEaWFsb2dcIjtcclxuXHJcbiAgICBzdGF0aWMgU3RheTogU2F2ZURpYWxvZ1Jlc3VsdCA9IFwic3RheVwiO1xyXG4gICAgc3RhdGljIERpc2NhcmQ6IFNhdmVEaWFsb2dSZXN1bHQgPSBcImRpc2NhcmRcIjtcclxuICAgIHByaXZhdGUgbW9kYWxJc3RhbmNlOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlSW5zdGFuY2UgPSBudWxsO1xyXG4gICAgcHVibGljIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxJc3RhbmNlICE9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoJyR1aWJNb2RhbCcpIHByaXZhdGUgJG1vZGFsOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgU2F2ZTogKCkgPT4gUHJvbWlzZTxTYXZlRGlhbG9nUmVzdWx0PiA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGFsSXN0YW5jZSA9IHRoaXMuJG1vZGFsLm9wZW4oeyBjb21wb25lbnQ6IFNhdmVEaWFsb2dDb21wb250ZW50LnNlbGVjdG9yIH0pO1xyXG4gICAgICAgIGxldCByZXMgPSB0aGlzLm1vZGFsSXN0YW5jZS5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5tb2RhbElzdGFuY2UuY2xvc2VkLnRoZW4odGhpcy5tb2RhbElzdGFuY2UgPSBudWxsKTtcclxuICAgICAgICByZXR1cm4gPFByb21pc2U8U2F2ZURpYWxvZ1Jlc3VsdD4+cmVzO1xyXG4gICAgfTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBTYXZlRGlhbG9nQ29tcG9udGVudC5zZWxlY3RvcixcclxuICAgIHRlbXBsYXRlVXJsOiAnc2F2ZWRpYWxvZy5odG1sJyxcclxufSlcclxuY2xhc3MgU2F2ZURpYWxvZ0NvbXBvbnRlbnQge1xyXG4gICAgc3RhdGljIHNlbGVjdG9yID0gXCJzYXZlRGlhbG9nQ29tcG9udGVudFwiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIG1vZGFsSW5zdGFuY2U6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2VJbnN0YW5jZTtcclxuXHJcbiAgICBwdWJsaWMgU3RheSA9ICgpID0+IHRoaXMubW9kYWxJbnN0YW5jZS5jbG9zZShTYXZlRGlhbG9nLlN0YXkpO1xyXG5cclxuICAgIHB1YmxpYyBEaXNjYXJkID0gKCkgPT4gdGhpcy5tb2RhbEluc3RhbmNlLmNsb3NlKFNhdmVEaWFsb2cuRGlzY2FyZCk7XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSUNvbXBvbmVudCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgSVJvdXRpbmdDb21wb25lbnQsIFJvdXRlQ29uZmlnIH0gZnJvbSBcIkBmaXFhcy9uZ2NvbXBvbmVudHJvdXRlclwiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZSwgU2VydmljZUNhc2VEYXRhLCBTZXJ2aWNlQ2FzZVJlZiB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmljZUNhc2VcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIlxyXG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY2FjaGVcIjtcclxuaW1wb3J0IHsgSUlkZW50aXR5TGluayB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2lGcXNcIjtcclxuaW1wb3J0IHsgU2F2ZURpYWxvZyB9IGZyb20gXCIuL3NhdmVkaWFsb2dcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBQZXJzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BlcnNvblwiO1xyXG5pbXBvcnQgeyBDdXN0b21lciB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY3VzdG9tZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQ2FzZUJhc2U8VCBleHRlbmRzIFNlcnZpY2VDYXNlPiB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlID0gXCJ2aWV3cy9zZXJ2aWNlY2FzZS5iYXNlLmh0bWxcIjtcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uTGlzdDogU2VydmljZUNhc2VSZWZbXSA9IFtdO1xyXG4gICAgcHVibGljIGN1cnJlbnRDYXNlSW5kZXg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc05ldzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBUaXRsZTogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgYWN0aXZlTWVudUl0ZW06IHN0cmluZztcclxuICAgIHB1YmxpYyBoaWdobGlnaHRNZW51SXRlbTogc3RyaW5nO1xyXG4gICAgcHVibGljIGNvbGxhcHNlSW5mbyA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJldkNhc2UoKTogU2VydmljZUNhc2VSZWYge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDYXNlSW5kZXggPiAwID8gdGhpcy5zZWxlY3Rpb25MaXN0W3RoaXMuY3VycmVudENhc2VJbmRleCAtIDFdIDogbnVsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgbmV4dENhc2UoKTogU2VydmljZUNhc2VSZWYge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDYXNlSW5kZXggPCAodGhpcy5zZWxlY3Rpb25MaXN0Lmxlbmd0aCAtIDEpID8gdGhpcy5zZWxlY3Rpb25MaXN0W3RoaXMuY3VycmVudENhc2VJbmRleCArIDFdIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgJHJvb3RSb3V0ZXI6IGFuZ3VsYXIuUm91dGVyLFxyXG4gICAgICAgIHByb3RlY3RlZCAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkICRsb2NhdGlvbjogYW5ndWxhci5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyAkb25Jbml0KCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJG9uRGVzdHJveSgpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEuc3RhdHVzID09IFwiY2xvc2VkXCIgfHwgdGhpcy5kYXRhLnN0YXR1cyA9PSBcImNhbmNlbGxlZFwiKSB8fCAoIXRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJDVVNUXCIsIFwiU0RcIl0pKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcmVhZE9ubHlDaGF0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEuc3RhdHVzID09IFwiY2xvc2VkXCIgfHwgdGhpcy5kYXRhLnN0YXR1cyA9PSBcImNhbmNlbGxlZFwiKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyB0aXRsZUNoYW5nZWQodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5vblRpdGxlQ2hhbmdlZClcclxuICAgICAgICAgICAgdGhpcy5vblRpdGxlQ2hhbmdlZCh2YWwpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uVGl0bGVDaGFuZ2VkOiAodGl0bGU6IHN0cmluZykgPT4gdm9pZDtcclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbmV4dFByZXZDbGljayhkaXJlY3Rpb246ICduZXh0JyB8ICdwcmV2Jykge1xyXG4gICAgICAgIHZhciBuaSA9IHRoaXMuY3VycmVudENhc2VJbmRleCArIChkaXJlY3Rpb24gPT0gJ25leHQnID8gMSA6IC0xKTtcclxuICAgICAgICB2YXIgbmNhc2UgPSB0aGlzLnNlbGVjdGlvbkxpc3RbbmldO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHsgbnVtYmVyOiBuY2FzZS5udW1iZXIgfTtcclxuICAgICAgICBpZiAodGhpcy4kbG9jYXRpb24uc2VhcmNoKClbJ3JlZmVyZXInXSlcclxuICAgICAgICAgICAgcGFyYW1ldGVyc1snP3JlZmVyZXInXSA9IHRoaXMuJGxvY2F0aW9uLnNlYXJjaCgpWydyZWZlcmVyJ107XHJcbiAgICAgICAgaWYgKG5jYXNlLnR5cGUgPT0gJ2J1ZycpXHJcbiAgICAgICAgICAgIHRoaXMuJHJvb3RSb3V0ZXIubmF2aWdhdGUoWydQcm9ibGVtJywgJ0VkaXQnLCBwYXJhbWV0ZXJzXSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlKFsnUmVxdWVzdCcsICdFZGl0JywgcGFyYW1ldGVyc10pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVQcmV2TmV4dChjdXJyZW50OiBzdHJpbmcsIGlkOiBJSWRlbnRpdHlMaW5rKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FzZUluZGV4ID0gLTE7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25MaXN0LmZvckVhY2goKHgsIG4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPyB4Lm51bWJlciA9PSBjdXJyZW50IDogeC5pZC5mdWxsSHJlZiA9PSBpZC5mdWxsSHJlZilcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhc2VJbmRleCA9IG47XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljICRyb3V0ZXJPbkRlYWN0aXZhdGU/KG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbik6IG5nLklQcm9taXNlPGFueT4gfCBhbnkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudENhc2VJbmRleCA9IC0xO1xyXG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBjYWxsZWQgdG8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBDb21wb25lbnQgY2FuIGJlIHJldXNlZCBhY3Jvc3MgUm91dGUgRGVmaW5pdGlvbnMgdGhhdCBtYXRjaCB0aGUgc2FtZSB0eXBlIG9mIENvbXBvbmVudCwgb3Igd2hldGhlciB0byBkZXN0cm95IGFuZCBpbnN0YW50aWF0ZSBhIG5ldyBDb21wb25lbnQgZXZlcnkgdGltZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljICRyb3V0ZXJDYW5SZXVzZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pOiBuZy5JUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBjYWxsZWQgYnkgdGhlIFJvdXRlciBhdCB0aGUgZW5kIG9mIGEgc3VjY2Vzc2Z1bCBuYXZpZ2F0aW9uLiBPbmx5IG9uZSBvZiAkcm91dGVyT25BY3RpdmF0ZSBhbmQgJHJvdXRlck9uUmV1c2Ugd2lsbCBiZSBjYWxsZWQgZGVwZW5kaW5nIHVwb24gdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gJHJvdXRlckNhblJldXNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgJHJvdXRlck9uQWN0aXZhdGUobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbkxpc3QgPSB0aGlzLmNhY2hlU2VydmljZS5nZXRWYWx1ZTxTZXJ2aWNlQ2FzZVJlZltdPihcInNlcnZpY2VjYXNlcy5zZWxlY3RlZC5kYXRhXCIpIHx8IFtdO1xyXG4gICAgICAgIHZhciBhID0gbmV4dDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogY2FsbGVkIGJ5IHRoZSBSb3V0ZXIgYXQgdGhlIGVuZCBvZiBhIHN1Y2Nlc3NmdWwgbmF2aWdhdGlvbi4gT25seSBvbmUgb2YgJHJvdXRlck9uQWN0aXZhdGUgYW5kICRyb3V0ZXJPblJldXNlIHdpbGwgYmUgY2FsbGVkIGRlcGVuZGluZyB1cG9uIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvICRyb3V0ZXJDYW5SZXVzZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jICRyb3V0ZU9uUmV1c2UobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgICAgICB2YXIgYiA9IG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpc0RpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmRpcnR5O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBpc0RpcnR5KHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuZGlydHkgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jICRyb3V0ZXJDYW5EZWFjdGl2YXRlKG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGNhbkFjdGl2YXRlID0gQXV0aG9yaXphdGlvblNlcnZpY2UuUm9sZUNoZWNrO1xyXG5cclxuICAgIHB1YmxpYyBzZXRFcnJvckNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgYW5ndWxhci5lbGVtZW50KGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc25hbWUpLml0ZW0oMCkpLmFkZENsYXNzKCdlcnJvcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhckVycm9yQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzbmFtZSkuaXRlbSgwKSkucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvSG9tZSgpIHtcclxuICAgICAgICB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlKFtcIkhvbWVcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGF0YTogVDtcclxuICAgIHB1YmxpYyBnZXQgRGF0YSgpOiBUIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBEYXRhKGRhdGE6IFQpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMubWFrZXBob25ldGlwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBob25ldGlwOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGFzeW5jIG1ha2VwaG9uZXRpcCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YSB8fCAhdGhpcy5kYXRhLmNvbnRhY3RQZXJzb24pIHJldHVybjtcclxuICAgICAgICBsZXQgdGl0bGUgPSAnJztcclxuICAgICAgICBsZXQgY29udGFjdFBlcnNvbjogUGVyc29uID0gYXdhaXQgdGhpcy5kYXRhLmNvbnRhY3RQZXJzb24udmFsdWU7XHJcbiAgICAgICAgaWYgKGNvbnRhY3RQZXJzb24ucGhvbmUgJiYgY29udGFjdFBlcnNvbi5waG9uZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRpdGxlID0gYCR7Y29udGFjdFBlcnNvbi5uYW1lfTogJHtjb250YWN0UGVyc29uLnBob25lLnJldmVyc2UoKS5qb2luKFwiLCBcIil9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgY29udGFjdEN1c3RvbWVyOiBDdXN0b21lciA9IGF3YWl0IHRoaXMuZGF0YS5jdXN0b21lci52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbnRhY3RDdXN0b21lci5waG9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBgJHtjb250YWN0Q3VzdG9tZXIubmFtZX06ICR7Y29udGFjdEN1c3RvbWVyLnBob25lfWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGAke2NvbnRhY3RQZXJzb24ubmFtZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGhvbmV0aXAgPSBgJHt0aXRsZX1gO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gXCJAZmlxYXMvdXRpbHNcIjtcclxuaW1wb3J0IFwiYW5ndWxhci1yZXNpemFibGVcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IERyb3Bkb3duRW50cnkgfSBmcm9tICcuLi8uLi9jb250cm9scy9kcm9wZG93bmJveCc7XHJcbmltcG9ydCB7IElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb25PZiwgSUlkZW50aXR5TGluaywgSVJlc291cmNlTGluaywgSVJlc291cmNlUmVzb2x2ZXIgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9pRnFzXCI7XHJcbmltcG9ydCB7IEN1c3RvbWVyIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jdXN0b21lclwiO1xyXG5pbXBvcnQgeyBDYXNlRmlsZSwgQ2FzZUZpbGVEYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9maWxlXCI7XHJcbmltcG9ydCB7IENvbXBhY3RQZXJzb24sIEZpcWFzRW1wbG95ZWUsIFBlcnNvbiB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcGVyc29uXCI7XHJcbmltcG9ydCB7IFJlY29yZEhpc3RvcnkgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3JlY29yZEhpc3RvcnlcIjtcclxuaW1wb3J0IHsgQWN0aW9uTGlua3MsIENhc2VDYXVzZSwgQ2FzZU93bmVyc2hpcCwgQ29ycmVzcG9uZGVuY2UsIENvcnJlc3BvbmRlbmNlVHlwZSwgRmVlZGJhY2tTdGF0dXMsIEdlbmVyYWxMaW5rLCBIYXNBY3Rpb25zLCBSZXNwb25zaWJsZVNERW1wbG95ZWUsIFNlcnZpY2VDYXNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY2FjaGVcIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kaWFsb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9GaWxlU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3NlcnZpY2VDYXNlU2VydmljZVwiO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvdXNlclNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSXNQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9pc1Byb2Nlc3NpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2VydmljZUJhc2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xyXG5pbXBvcnQgeyBDb252ZXJzYXRpb25JdGVtIH0gZnJvbSBcIi4uL2dlbmVyYWwvY29udmVyc2F0aW9uXCI7XHJcbmltcG9ydCB7IEZlZWRiYWNrU3RhdHVzTGluayB9IGZyb20gXCIuLi9nZW5lcmFsL2NvbnZlcnNhdGlvbmVudHJ5XCI7XHJcbmltcG9ydCB7IEZpbGVJdGVtIH0gZnJvbSBcIi4uL2dlbmVyYWwvZmlsZURyb3Bkb3duTGlzdFwiO1xyXG5pbXBvcnQgeyBSaWNodGV4dEVkaXRvciB9IGZyb20gXCIuLi9nZW5lcmFsL3JpY2h0ZXh0ZWRpdG9yXCI7XHJcbmltcG9ydCB7IFN0YXR1c0J1dHRvbiB9IGZyb20gXCIuLi9nZW5lcmFsL3N0YXR1c2J1dHRvbnNcIjtcclxuaW1wb3J0IHsgTWFuYWdlV2F0Y2hlcnMgfSBmcm9tIFwiLi9tYW5hZ2VXYXRjaGVyc1wiO1xyXG5pbXBvcnQgeyBTYXZlRGlhbG9nIH0gZnJvbSBcIi4vc2F2ZWRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZUJhc2UgfSBmcm9tIFwiLi9zZXJ2aWNlQ2FzZUJhc2VcIjtcclxuXHJcblxyXG5leHBvcnQgdHlwZSBDYXNlVHlwZSA9IFwicHJvYmxlbVwiIHwgXCJyZXF1ZXN0XCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VydmljZUNhc2VFZGl0PFQgZXh0ZW5kcyBTZXJ2aWNlQ2FzZT4ge1xyXG4gICAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZSA9IFwidmlld3Mvc2VydmljZWNhc2UuZWRpdC5odG1sXCI7XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbjtcclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBCYXNlOiBTZXJ2aWNlQ2FzZUJhc2U8VD47XHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgJHJvdXRlcjogbmcuUm91dGVyO1xyXG4gICAgcHVibGljIGFic3RyYWN0IGNhc2V0eXBlOiBDYXNlVHlwZTtcclxuICAgIHB1YmxpYyBzdGF0dXNsaW5rczogU3RhdHVzQnV0dG9uW107XHJcbiAgICBwdWJsaWMgZmVlZGJhY2tMaW5rczogRmVlZGJhY2tTdGF0dXNMaW5rW107XHJcbiAgICBwcml2YXRlIHNob3dBbGVydHM6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHNob3dJbnRlcm5hbDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgQ29ycmVzcG9uZGVuY2VDaGVjazogR2VuZXJhbExpbms8Ym9vbGVhbiwgdm9pZCwgdm9pZD47XHJcbiAgICBwcml2YXRlIF9jb252ZXJzYXRpb25JdGVtczogQ29udmVyc2F0aW9uSXRlbVtdO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gICAgcHJvdGVjdGVkIENvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uSXRlbVtdO1xyXG4gICAgcHJvdGVjdGVkIEZpbGVzOiBGaWxlSXRlbVtdO1xyXG4gICAgcHJvdGVjdGVkIGxvYWRpbmdEYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGN0cmxSaWNoVGV4dEVkaXRvcjogUmljaHRleHRFZGl0b3I7XHJcbiAgICBwdWJsaWMgYWN0aXZlVGFiSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgZmlxYXNFbXBsb3llZXM6IFJlY29yZDxzdHJpbmcsIENvbXBhY3RQZXJzb24+O1xyXG4gICAgcHVibGljIGZpcWFzRW1wbG95ZWVzU2VsZWN0aW9uczogRHJvcGRvd25FbnRyeTxzdHJpbmc+W10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgY2FzZVR5cGVzOiBEcm9wZG93bkVudHJ5PENhc2VUeXBlPltdID0gW1xyXG4gICAgICAgIHsga2V5OiA8Q2FzZVR5cGU+J2J1ZycsIHRleHQ6IFwiUHJvYmxlbVwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlVHlwZT4ncmVxdWVzdCcsIHRleHQ6IFwiUmVxdWVzdFwiIH0sXHJcbiAgICBdLnNvcnQoKGEsIGIpID0+IGEudGV4dC5sb2NhbGVDb21wYXJlKGIudGV4dCkpO1xyXG5cclxuICAgIHB1YmxpYyBvd25lcnNoaXBUeXBlczogRHJvcGRvd25FbnRyeTxDYXNlT3duZXJzaGlwPltdID0gW1xyXG4gICAgICAgIHsga2V5OiA8Q2FzZU93bmVyc2hpcD5cInNlcnZpY2VEZXNrXCIsIHRleHQ6IFwiU2VydmljZSBkZXNrXCIgfSxcclxuICAgICAgICB7IGtleTogPENhc2VPd25lcnNoaXA+XCJiaWxsaW5nQnVyZWF1XCIsIHRleHQ6IFwiQmlsbGluZyBidXJlYXVcIiB9LFxyXG4gICAgICAgIHsga2V5OiA8Q2FzZU93bmVyc2hpcD5cInByb2plY3RNYW5hZ2VtZW50XCIsIHRleHQ6IFwiUHJvamVjdCBtYW5hZ2VtZW50XCIgfSxcclxuICAgICAgICB7IGtleTogPENhc2VPd25lcnNoaXA+XCJzYWxlc1wiLCB0ZXh0OiBcIlNhbGVzXCIgfVxyXG4gICAgXS5zb3J0KChhLCBiKSA9PiBhLnRleHQubG9jYWxlQ29tcGFyZShiLnRleHQpKTtcclxuXHJcbiAgICBwdWJsaWMgY2FzZUNhdXNlVHlwZXM6IERyb3Bkb3duRW50cnk8Q2FzZUNhdXNlPltdID0gW1xyXG4gICAgICAgIHsga2V5OiA8Q2FzZUNhdXNlPlwiYmlsbGFibGVTdXBwb3J0XCIsIHRleHQ6IFwiQmlsbGFibGUgc3VwcG9ydFwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJjb25maWdCdWdcIiwgdGV4dDogXCJDb25maWcgYnVnXCIgfSxcclxuICAgICAgICB7IGtleTogPENhc2VDYXVzZT5cInRvQmVEZXRlcm1pbmVkXCIsIHRleHQ6IFwiVG8gYmUgZGV0ZXJtaW5lZFwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJjdXN0S25vd2xlZ2RlSXNzdWVcIiwgdGV4dDogXCJDdXN0b21lciBrbm93bGVkZ2UgaXNzdWVcIiB9LFxyXG4gICAgICAgIHsga2V5OiA8Q2FzZUNhdXNlPlwiY3VzdERhdGFcIiwgdGV4dDogXCJDdXN0b21lciBkYXRhXCIgfSxcclxuICAgICAgICB7IGtleTogPENhc2VDYXVzZT5cImN1c3RDb25maWdcIiwgdGV4dDogXCJDdXN0b21lciBjb25maWd1cmF0aW9uXCIgfSxcclxuICAgICAgICB7IGtleTogPENhc2VDYXVzZT5cInVhdFwiLCB0ZXh0OiBcIlVBVFwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJjdXN0VmVyc2lvbkNvbnRyb2xJc3N1ZVwiLCB0ZXh0OiBcIkN1c3RvbWVyIHZlcnNpb24gY29udHJvbCBpc3N1ZVwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJjdXN0UmVxdWVzdFwiLCB0ZXh0OiBcIkN1c3RvbWVyIHJlcXVlc3RcIiB9LFxyXG4gICAgICAgIHsga2V5OiA8Q2FzZUNhdXNlPlwiaW5jb3JyZWN0UmVxdWlyZW1lbnRzXCIsIHRleHQ6IFwiSW5jb3JyZWN0IHJlcXVpcmVtZW50c1wiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJjaGFuZ2VkUmVxdWlyZW1lbnRzXCIsIHRleHQ6IFwiQ2hhbmdlZCByZXF1aXJlbWVudHNcIiB9LFxyXG4gICAgICAgIHsga2V5OiA8Q2FzZUNhdXNlPlwic29mdHdhcmVCdWdcIiwgdGV4dDogXCJTb2Z0d2FyZSBidWdcIiB9LFxyXG4gICAgICAgIHsga2V5OiA8Q2FzZUNhdXNlPlwiZGF0YWJhc2VJc3N1ZVwiLCB0ZXh0OiBcIkRhdGFiYXNlIChzY3JpcHQpIGlzc3VlXCIgfSxcclxuICAgICAgICB7IGtleTogPENhc2VDYXVzZT5cInZlcnNpb25Db250cm9sSXNzdWVcIiwgdGV4dDogXCJWZXJzaW9uIGNvbnRyb2wgaXNzdWVcIiB9LFxyXG4gICAgICAgIHsga2V5OiA8Q2FzZUNhdXNlPlwib3RoZXJcIiwgdGV4dDogXCJPdGhlclwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJwYXltZW50UHJvY2Vzc2luZ1wiLCB0ZXh0OiBcIlBheW1lbnQgcHJvY2Vzc2luZ1wiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJ1c2VyTWFpbnRlbmFuY2VcIiwgdGV4dDogXCJVc2VyIG1haW50ZW5hbmNlXCIgfSxcclxuICAgICAgICB7IGtleTogPENhc2VDYXVzZT5cImRCQUFjdGl2aXRpY2VcIiwgdGV4dDogXCJEQkEgYWN0aXZpdGllc1wiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJ1c2FiaWxpdHlJbXByb3ZlbWVudFwiLCB0ZXh0OiBcIlVzYWJpbGl0eSBJbXByb3ZlbWVudFwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJuZXR3b3JrXCIsIHRleHQ6IFwiTmV0d29yay9JbmZyYXN0cnVjdHVyZVwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxDYXNlQ2F1c2U+XCJ0aGlyZFBhcnR5XCIsIHRleHQ6IFwiVGhpcmQgcGFydHkgKG5vdCBhIEZJUUFTIGlzc3VlKVwiIH1cclxuICAgIF0uc29ydCgoYSwgYikgPT4gYS50ZXh0LmxvY2FsZUNvbXBhcmUoYi50ZXh0KSk7XHJcblxyXG4gICAgcHVibGljIHJlc3BvbnNpYmxlU0RFbXBsb3llZVR5cGVzOiBEcm9wZG93bkVudHJ5PFJlc3BvbnNpYmxlU0RFbXBsb3llZT5bXSA9IFtcclxuICAgICAgICB7IGtleTogPFJlc3BvbnNpYmxlU0RFbXBsb3llZT5cInN0ZWZhblwiLCB0ZXh0OiBcIlN0ZWZhbiB2YW4gUm9vc21hbGVuXCIgfSxcclxuICAgICAgICB7IGtleTogPFJlc3BvbnNpYmxlU0RFbXBsb3llZT5cImRhdmVcIiwgdGV4dDogXCJEYXZlIEJ1c2tlcm1vbGVuXCIgfSxcclxuICAgICAgICB7IGtleTogPFJlc3BvbnNpYmxlU0RFbXBsb3llZT5cImlsc2UwMVwiLCB0ZXh0OiBcIklsc2UgQmFra2VyXCIgfSxcclxuICAgICAgICB7IGtleTogPFJlc3BvbnNpYmxlU0RFbXBsb3llZT5cImluZ2Vib3JnXCIsIHRleHQ6IFwiSW5nZWJvcmcgQnJvbmtob3JzdFwiIH0sXHJcbiAgICAgICAgeyBrZXk6IDxSZXNwb25zaWJsZVNERW1wbG95ZWU+XCJ0YmRcIiwgdGV4dDogXCJUbyBiZSBkZWZpbmVkXCIgfSxcclxuICAgICAgICB7IGtleTogPFJlc3BvbnNpYmxlU0RFbXBsb3llZT5cImZpbnRlcm5cIiwgdGV4dDogXCJJbnRlcm4gRklRQVNcIiB9XHJcbiAgICBdLnNvcnQoKGEsIGIpID0+IGEudGV4dC5sb2NhbGVDb21wYXJlKGIudGV4dCkpO1xyXG5cclxuICAgIHB1YmxpYyBmZWVkYmFja1N0YXRlczogRHJvcGRvd25FbnRyeTxGZWVkYmFja1N0YXR1cz5bXSA9IFtcclxuICAgICAgICB7IGtleTogPEZlZWRiYWNrU3RhdHVzPlwibm90UmVxdWlyZWRcIiwgdGV4dDogXCJOb3QgUmVxdWlyZWRcIiB9LFxyXG4gICAgICAgIHsga2V5OiA8RmVlZGJhY2tTdGF0dXM+XCJwcm92aWRlZFwiLCB0ZXh0OiBcIlByb3ZpZGVkXCIgfSxcclxuICAgICAgICB7IGtleTogPEZlZWRiYWNrU3RhdHVzPlwicmVxdWVzdGVkXCIsIHRleHQ6IFwiUmVxdWVzdGVkXCIgfVxyXG4gICAgXS5zb3J0KChhLCBiKSA9PiBhLnRleHQubG9jYWxlQ29tcGFyZShiLnRleHQpKTtcclxuXHJcbiAgICBwcml2YXRlIGhvdGtleTogbmcuaG90a2V5cy5Ib3RrZXlbXTtcclxuICAgIHByaXZhdGUgdGFic0hvdGtleXM6IG5nLmhvdGtleXMuSG90a2V5O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIHNlcnZpY2VDYXNlU2VydmljZTogU2VydmljZUNhc2VTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBpc1Byb2Nlc3NpbmdTZXJ2aWNlOiBJc1Byb2Nlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBUcmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlICRhdXRoOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSAkcTogbmcuSVFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkICRtb2RhbDogYW5ndWxhci51aS5ib290c3RyYXAuSU1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbnZlcnNhdGlvblNldHRpbmdzOiBDb252ZXJzYXRpb25TZXR0aW5ncyxcclxuICAgICAgICBwcm90ZWN0ZWQgbG9nU2VydmljZTogTG9nU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZGlhbG9nTWFuYWdlcjogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHNhdmVEaWFsb2c6IFNhdmVEaWFsb2csXHJcbiAgICAgICAgcHJvdGVjdGVkICRzY29wZTogbmcuSVNjb3BlLFxyXG4gICAgICAgIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgJGVsZW1lbnQ6IG5nLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBob3RrZXlzOiBuZy5ob3RrZXlzLkhvdGtleXNQcm92aWRlcixcclxuICAgICAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuJHNjb3BlLiRvbihcImFuZ3VsYXItcmVzaXphYmxlLnJlc2l6ZVN0YXJ0XCIsIChldmVudCwgYXJncykgPT4gdGhpcy5vblJlc2l6ZVN0YXJ0KGV2ZW50LCBhcmdzKSk7XHJcbiAgICAgICAgdGhpcy4kc2NvcGUuJG9uKFwiYW5ndWxhci1yZXNpemFibGUucmVzaXppbmdcIiwgKGV2ZW50LCBhcmdzKSA9PiB0aGlzLm9uUmVzaXppbmcoZXZlbnQsIGFyZ3MpKTtcclxuICAgICAgICB0aGlzLiRzY29wZS4kb24oXCJhbmd1bGFyLXJlc2l6YWJsZS5yZXNpemVFbmRcIiwgKGV2ZW50LCBhcmdzKSA9PiB0aGlzLm9uUmVzaXplRW5kKGV2ZW50LCBhcmdzKSk7XHJcbiAgICAgICAgJHJvb3RTY29wZS4kb24oJ3JpY2hUZXh0RWRpdG9ySW5pdGlhbGl6ZWQnLCAoZXZlbnQsIGN0cmxSaWNoVGV4dEVkaXRvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN0cmxSaWNoVGV4dEVkaXRvciA9IGN0cmxSaWNoVGV4dEVkaXRvcjtcclxuICAgICAgICAgICAgdGhpcy5jdHJsUmljaFRleHRFZGl0b3IucmVhZE9ubHkgPSB0aGlzLnJlYWRPbmx5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgaG90a2V5cy5iaW5kVG8oJHNjb3BlKTtcclxuICAgICAgICB0aGlzLmhvdGtleSA9IFt0aGlzLnRhYnNIb3RrZXlzID0ge1xyXG4gICAgICAgICAgICBjb21ibzogWydhbHQrMSddLFxyXG4gICAgICAgICAgICBhbGxvd0luOiBbJ0lOUFVUJywgJ1NFTEVDVCcsICdURVhUQVJFQSddLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKGUpID0+IHsgdGhpcy5zZXRBY3RpdmVUYWIoZSkgfVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgY29tYm86IFsnYWx0KzInXSxcclxuICAgICAgICAgICAgYWxsb3dJbjogWydJTlBVVCcsICdTRUxFQ1QnLCAnVEVYVEFSRUEnXSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IChlKSA9PiB7IHRoaXMuc2V0QWN0aXZlVGFiKGUpIH0sXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldFZhbHVlPG51bWJlcj4oXCJzZXJ2aWNlY2FzZS50YWJzLmluZGV4XCIpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSBhY3RpdmVUYWIgPyBhY3RpdmVUYWIgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2Nyb2xsYm90dG9tOiBudW1iZXIgPSBudWxsO1xyXG4gICAgcHVibGljIG9uUmVzaXplU3RhcnQoZXZlbnQsIGFyZ3MpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjcm9sbGJvdHRvbSA9IG51bGw7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgdGhpcy5zY3JvbGxib3R0b20gPSBudWxsYCk7XHJcbiAgICAgICAgdGhpcy5hanVzdER5bmFtaWNIVE1MTGF5b3V0KDApO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uUmVzaXppbmcoZXZlbnQsIGFyZ3MpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFqdXN0RHluYW1pY0hUTUxMYXlvdXQoMCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25SZXNpemVFbmQoZXZlbnQsIGFyZ3MpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFqdXN0RHluYW1pY0hUTUxMYXlvdXQoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0RHluYW1pY0hUTUxMYXlvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxib3R0b20gPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfZGVhZGxpbmVEVDogRGF0ZTtcclxuICAgIHB1YmxpYyBnZXQgZGVhZGxpbmVEVCgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGVhZGxpbmVEVDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgZGVhZGxpbmVEVCh2YWx1ZTogRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuX2RlYWRsaW5lRFQgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZGVhZGxpbmVUaHJlc2hvbGRNb2RhbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tEZWFkbGluZUNoYW5nZSh2YWx1ZTogRGF0ZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgKCEhdmFsdWUgPT09IGZhbHNlICYmICEhdGhpcy5TZXJ2aWNlQ2FzZS5yZXF1ZXN0ZWREZWFkbGluZSA9PSBmYWxzZSlcclxuICAgICAgICAgICAgfHwgRGF0ZS5kYXRlRXF1YWxzKG5ldyBEYXRlKHRoaXMuU2VydmljZUNhc2UucmVxdWVzdGVkRGVhZGxpbmUpLCB2YWx1ZSlcclxuICAgICAgICAgICAgfHwgdGhpcy5kZWFkbGluZVRocmVzaG9sZE1vZGFsICE9PSBudWxsXHJcbiAgICAgICAgICAgIHx8ICEhdmFsdWUgJiYgdmFsdWUgPCB0aGlzLl9taW5EZWFkbGluZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIGNoYW5nZVxyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICh2YWx1ZSA9PSBudWxsICYmICEhdGhpcy5TZXJ2aWNlQ2FzZS5yZXF1ZXN0ZWREZWFkbGluZSlcclxuICAgICAgICAgICAgfHwgdmFsdWUgPj0gdGhpcy5fZGVhZGxpbmVUaHJlc2hvbGRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIENoYW5nZSwgcGx1cyBuZXcgdmFsdWUgbnVsbCBvciBvdmVyIHRocmVzaG9sZC5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDaGFuZ2UsIGJ1dCBkYXRlIGZhbGxzIGluIHRocmVzaG9sZCB0aW1lXHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zOiBuZy51aS5ib290c3RyYXAuSU1vZGFsU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6ICdoYW5kbGVfdGhyZXNob2xkZGVhZGxpbmUuaHRtbCcsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBDb25maXJtRGVhZGxpbmVDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyQXM6ICckbW9kYWwnLFxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6ICgpID0+IHRoaXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5kZWFkbGluZVRocmVzaG9sZE1vZGFsID0gdGhpcy4kbW9kYWwub3BlbihvcHRpb25zKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmRlYWRsaW5lVGhyZXNob2xkTW9kYWwucmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiICYmIHRoaXMuZGVhZGxpbmVSZW1hcmsgJiYgdGhpcy5kZWFkbGluZVJlbWFyay5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVSZW1hcmsgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWRsaW5lVGhyZXNob2xkTW9kYWwuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVUaHJlc2hvbGRNb2RhbCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBtaW5SZW1lbWJlck1lOiBEYXRlO1xyXG4gICAgcHJvdGVjdGVkIF9taW5EZWFkbGluZTogRGF0ZTtcclxuICAgIHByb3RlY3RlZCBfZGVhZGxpbmVUaHJlc2hvbGQ6IERhdGU7XHJcbiAgICBwdWJsaWMgZ2V0IGRlYWRsaW5lVGhyZXNob2xkKCk6IERhdGUgeyByZXR1cm4gdGhpcy5fZGVhZGxpbmVUaHJlc2hvbGQ7IH07XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVSZW1hcms6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVCb3hPcGVuKCkge1xyXG4gICAgICAgIHRoaXMuZGVhZGxpbmVUb29sYm94SXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRlYWRsaW5lVG9vbHRpcFRleHQgPSB0aGlzLmRlYWRsaW5lVG9vbGJveElzT3BlbiA/ICcnIDogYCR7dGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKCdERUFETElORV9UT09MVElQJyl9JHsodGhpcy5kZWFkbGluZURUKSA/IGA6ICR7dGhpcy5kZWFkbGluZURULnRvTG9jYWxlRGF0ZVN0cmluZygnbmwtTkwnKX1gIDogJyd9YDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBkZWFkbGluZUJveENsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuZGVhZGxpbmVUb29sYm94SXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZWFkbGluZVRvb2x0aXBUZXh0ID0gdGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4gPyAnJyA6IGAke3RoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSgnREVBRExJTkVfVE9PTFRJUCcpfSR7KHRoaXMuZGVhZGxpbmVEVCkgPyBgOiAke3RoaXMuZGVhZGxpbmVEVC50b0xvY2FsZURhdGVTdHJpbmcoJ25sLU5MJyl9YCA6ICcnfWA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVUb29sYm94SXNPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVUb29sdGlwVGV4dDogc3RyaW5nID0gdGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4gPyAnJyA6IGAke3RoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSgnREVBRExJTkVfVE9PTFRJUCcpfSR7KHRoaXMuZGVhZGxpbmVEVCkgPyBgOiAke3RoaXMuZGVhZGxpbmVEVC50b0xvY2FsZURhdGVTdHJpbmcoJ25sLU5MJyl9YCA6ICcnfWA7XHJcblxyXG4gICAgcHVibGljIGFqdXN0RHluYW1pY0hUTUxMYXlvdXQoaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgY2FzZXRhYnM6IEhUTUxFbGVtZW50ID0gdGhpcy4kZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYXNldGFicycpLml0ZW0oMCk7XHJcbiAgICAgICAgbGV0IGNhc2VjaGF0OiBIVE1MRWxlbWVudCA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2FzZWNoYXQnKS5pdGVtKDApO1xyXG4gICAgICAgIGxldCBjYXNlZWRpdDogSFRNTEVsZW1lbnQgPSB0aGlzLiRlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nhc2VlZGl0JykuaXRlbSgwKTtcclxuICAgICAgICBsZXQgY29udmVyc2F0aW9uSG9sZGVyOiBIVE1MRWxlbWVudCA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY29udmVyc2F0aW9uLXNjcm9sbCcpLml0ZW0oMCk7XHJcbiAgICAgICAgbGV0IHNjcm9sbGJvdHRvbTogbnVtYmVyO1xyXG4gICAgICAgIGlmIChjb252ZXJzYXRpb25Ib2xkZXIpIHtcclxuICAgICAgICAgICAgc2Nyb2xsYm90dG9tID0gKHRoaXMuc2Nyb2xsYm90dG9tKSA/IHRoaXMuc2Nyb2xsYm90dG9tIDogdGhpcy5zY3JvbGxib3R0b20gPSBjb252ZXJzYXRpb25Ib2xkZXIuc2Nyb2xsSGVpZ2h0IC0gY29udmVyc2F0aW9uSG9sZGVyLm9mZnNldEhlaWdodCAtIGNvbnZlcnNhdGlvbkhvbGRlci5zY3JvbGxUb3A7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29udmVyc2F0aW9uOiBIVE1MRWxlbWVudCA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY29udmVyc2F0aW9uLWZyYW1lJykuaXRlbSgwKTtcclxuICAgICAgICAgICAgaWYgKGhlaWdodCA+IDM5KSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJzYXRpb24uc3R5bGUucGFkZGluZ0JvdHRvbSA9IGAke2hlaWdodCAtIDM5fXB4YDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb252ZXJzYXRpb24uc3R5bGUucGFkZGluZ0JvdHRvbSkge1xyXG4gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uLnN0eWxlLnBhZGRpbmdCb3R0b20gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZUluZm8pIHtcclxuICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KGNhc2VjaGF0KS5jc3MoJ3RvcCcsIChjYXNldGFicy5jbGllbnRIZWlnaHQgKyAxNDApICsgXCJweFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnZlcnNhdGlvbkhvbGRlcikge1xyXG4gICAgICAgICAgICBjb252ZXJzYXRpb25Ib2xkZXIuc2Nyb2xsVG9wID0gY29udmVyc2F0aW9uSG9sZGVyLnNjcm9sbEhlaWdodCAtIGNvbnZlcnNhdGlvbkhvbGRlci5vZmZzZXRIZWlnaHQgLSBzY3JvbGxib3R0b207XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NvbGxhcHNlSW5mbzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBnZXQgY29sbGFwc2VJbmZvKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsYXBzZUluZm87XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbGxhcHNlSW5mbyh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9jb2xsYXBzZUluZm8gPSB2YWw7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmVsZW1lbnQodGhpcy4kZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYXNlY2hhdCcpLml0ZW0oMCkpLmNzcygndG9wJywgbnVsbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hanVzdER5bmFtaWNIVE1MTGF5b3V0KDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGFsbG93U2hvd0ludGVybmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiU0RcIiwgXCJGUVNcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgYWxsb3dJbnRlcm5hbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5jdXJyZW50Um9sZUluKFtcIlNEXCIsIFwiRlFTXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGFsbG93RXh0ZXJuYWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJTRFwiLCBcIkNVU1RcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNTREVtcGxveWVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiU0RcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY2hhdFR5cGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dJbnRlcm5hbCAmJiB0aGlzLmFsbG93RXh0ZXJuYWwpXHJcbiAgICAgICAgICAgIHJldHVybiBcImFsbFwiO1xyXG4gICAgICAgIGlmICh0aGlzLmFsbG93SW50ZXJuYWwpXHJcbiAgICAgICAgICAgIHJldHVybiBcImludGVybmFsXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dFeHRlcm5hbClcclxuICAgICAgICAgICAgcmV0dXJuIFwiZXh0ZXJuYWxcIjtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzVGFiUHJvcGVydGllc0Rpc2FibGVkKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFsaXZlOiBib29sZWFuO1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBvbkluaXQoKTtcclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBvbkRlc3Ryb3koKTtcclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBhc3luYyBsb2FkRGF0YSgpO1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGFzeW5jIEhhbmRsZU5ld0NvbnZlcnNhdGlvbkVudHJ5KGVudHJ5OiBzdHJpbmcsIGludGVybmFsOiBib29sZWFuKTtcclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGRvTG9hZERhdGEoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplUHJvcGVydGllc0Zvcm1GaWVsZHMoKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hbGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbkluaXQoKTtcclxuICAgICAgICB0aGlzLm1pblJlbWVtYmVyTWUgPSBEYXRlLnRvZGF5KCkuYWRkRGF5cygxKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkNvbnZlcnNhdGlvbiA9IFtdO1xyXG4gICAgICAgIHRoaXMuRmlsZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLmZvcmNlZEN1c3RvbWVyID0gJyAnO1xyXG4gICAgICAgIHRoaXMuQmFzZS5pc05ldyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQmFzZS5vblRpdGxlQ2hhbmdlZCA9IHRpdGxlID0+IHRoaXMub25UaXRsZUNoYW5nZWQodGl0bGUpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tFZGl0cygpO1xyXG5cclxuICAgICAgICB0aGlzLmhvdGtleS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaG90a2V5cy5hZGQoa2V5KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIHBlcnNvbnMgPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldEZpcWFzRW1wbG95ZWVzKCk7XHJcbiAgICAgICAgdGhpcy5maXFhc0VtcGxveWVlcyA9IHBlcnNvbnMuaXRlbXNcclxuICAgICAgICAgICAgLmZpbHRlcihwID0+IHAuaGFzTG9naW4gJiYgcC5pc0ZpcWFzRW1wbG95ZWUpXHJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm5hbWUudHJpbSgpID4gYi5uYW1lLnRyaW0oKSA/IDEgOiAtMSlcclxuICAgICAgICAgICAgLnJlZHVjZSgodiwgbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gISFuLmlkLnJlZiA/IG4uaWQucmVmIDogbi5pZC5fcmVmO1xyXG4gICAgICAgICAgICAgICAgdltrZXldID0gbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9LCB7fSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VDYXNlRmlxYXNPd25lclJlZiA9IHRoaXMuU2VydmljZUNhc2UgJiYgdGhpcy5TZXJ2aWNlQ2FzZS5maXFhc093bmVyc2hpcCAmJiAoISF0aGlzLlNlcnZpY2VDYXNlLmZpcWFzT3duZXJzaGlwLnJlZiA/IHRoaXMuU2VydmljZUNhc2UuZmlxYXNPd25lcnNoaXAucmVmIDogdGhpcy5TZXJ2aWNlQ2FzZS5maXFhc093bmVyc2hpcC5fcmVmKTtcclxuICAgICAgICB0aGlzLmZpcWFzRW1wbG95ZWVzU2VsZWN0aW9ucyA9IHBlcnNvbnMuaXRlbXNcclxuICAgICAgICAgICAgLmZpbHRlcihwID0+IHAuaGFzTG9naW4gJiYgcC5pc0ZpcWFzRW1wbG95ZWUgJiYgIXAuaXNGb3JtZXJFbXBsb3llZSB8fCBzZXJ2aWNlQ2FzZUZpcWFzT3duZXJSZWYgJiYgc2VydmljZUNhc2VGaXFhc093bmVyUmVmID09ICghIXAuaWQucmVmID8gcC5pZC5yZWYgOiBwLmlkLl9yZWYpKVxyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5uYW1lLnRyaW0oKSA+IGIubmFtZS50cmltKCkgPyAxIDogLTEpXHJcbiAgICAgICAgICAgIC5tYXAocCA9PiA8RHJvcGRvd25FbnRyeTxzdHJpbmc+Pnsga2V5OiAhIXAuaWQucmVmID8gcC5pZC5yZWYgOiBwLmlkLl9yZWYsIHRleHQ6IHAubmFtZSB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0VmFsdWU8bnVtYmVyPihcInNlcnZpY2VjYXNlLnRhYnMuaW5kZXhcIik7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVUYWJJbmRleCA9IGFjdGl2ZVRhYiA/IGFjdGl2ZVRhYiA6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmFsaXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLmZvcmNlZEN1c3RvbWVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLkJhc2UuVGl0bGUgPSAnJztcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldFZhbHVlKFwic2VydmljZWNhc2UudGFicy5pbmRleFwiLCB0aGlzLmFjdGl2ZVRhYkluZGV4KTtcclxuXHJcbiAgICAgICAgdGhpcy5ob3RrZXkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhvdGtleXMuZGVsKGtleS5jb21ibyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB3YXRjaGVyQ291bnQoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLlNlcnZpY2VDYXNlID9cclxuICAgICAgICAgICAgXCJcIiA6XHJcbiAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2Uud2F0Y2hlckNvdW50ID09IDAgP1xyXG4gICAgICAgICAgICAgICAgdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiTk9fV0FUQ0hFUlwiKSA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUodGhpcy5TZXJ2aWNlQ2FzZS53YXRjaGVyQ291bnQgPT0gMSA/IFwiezB9X1dBVENIRVJcIiA6IFwiezB9X1dBVENIRVJTXCIpLnJlcGxhY2UoXCJ7MH1cIiwgdGhpcy5TZXJ2aWNlQ2FzZS53YXRjaGVyQ291bnQudG9TdHJpbmcoKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkJhc2UucmVhZE9ubHk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHJlYWRPbmx5Q2hhdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5CYXNlLnJlYWRPbmx5Q2hhdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNlcnZpY2VDYXNlRGlzYWJsZWQoKSB7XHJcbiAgICAgICAgbGV0IHNlcnZpY2VDYXNlRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5TZXJ2aWNlQ2FzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZUNhc2VEaXNhYmxlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuU2VydmljZUNhc2Uuc3RhdHVzID09PSAnY2xvc2VkJyB8fCB0aGlzLlNlcnZpY2VDYXNlLnN0YXR1cyA9PT0gJ2NhbmNlbGxlZCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlU2VsZWN0VGFiKCRldmVudDogYW55LCBzZWxlY3RlZEluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gdGhpcy5hY3RpdmVUYWJJbmRleCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uRWRpdGluZyB8fCB0aGlzLl9wcm9wZXJ0aWVzVGFiRGlydHkpIHtcclxuICAgICAgICAgICAgaWYgKCRldmVudCkge1xyXG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zYXZlRGlhbG9nLlNhdmUoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBTYXZlRGlhbG9nLkRpc2NhcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvcGVydGllc1RhYkRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVByb3BlcnRpZXNGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlc2NyaXB0aW9uRWRpdGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmxSaWNoVGV4dEVkaXRvci5jYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbkVkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJJbmRleCA9IHNlbGVjdGVkSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGFwc2VJbmZvID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4geyByZXR1cm4gZmFsc2U7IH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZUluZm8gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEFjdGl2ZVRhYihldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC5rZXkgJiYgcGFyc2VJbnQoZXZlbnQua2V5LCAxMCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJJbmRleCA9IChldmVudC5rZXkgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU0VSVklDRUNBU0UgUFJPUEVSVElFUyAoS0VOTUVSS0VOKSBDT0RFIC0gV2Uga2VlcCB0aGUgY29kZSB0b2dldGhlciwgZm9yIGV4dHJhY3Rpb24gdG8gaXQncyBvd24gY29tcG9uZW50XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcm9wZXJ0aWVzVGFiRGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHByb3BlcnRpZXNUYWJGaWVsZHNEaXNhYmxlZCgpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNTREVtcGxveWVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJvcGVydGllc1RhYkNhbmNlbEJ1dHRvbkRpc2FibGVkKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc1NERW1wbG95ZWUgfHwgIXRoaXMuX3Byb3BlcnRpZXNUYWJEaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHByb3BlcnRpZXNUYWJTYXZlQnV0dG9uRW5hYmxlZCgpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZWxSZW1lbWJlck1lRGF0ZSA9IHRoaXMuJGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcignI3JlbWVtYmVyTWVEYXRlIGlucHV0Jyk7XHJcbiAgICAgICAgbGV0IHZhbGlkRGF0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgICAgaWYgKGVsUmVtZW1iZXJNZURhdGUpIHtcclxuICAgICAgICAgICAgdmFsaWREYXRlID0gIWVsUmVtZW1iZXJNZURhdGUuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkLWRhdGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbGlkRGF0ZSAmJiB0aGlzLmlzU0RFbXBsb3llZSAmJiB0aGlzLl9wcm9wZXJ0aWVzVGFiRGlydHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhc2VUeXBlOiBhbnkgPSBbXTtcclxuICAgIHB1YmxpYyBjYXNlRmVlZGJhY2tTdGF0dXM6IEFycmF5PEZlZWRiYWNrU3RhdHVzPiA9IFtdO1xyXG4gICAgcHVibGljIGNhc2VQcm9wc0ZpcWFzT3duZXJzaGlwOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBwdWJsaWMgY2FzZVByb3BzQ2FzZU93bmVyc2hpcDogQXJyYXk8Q2FzZU93bmVyc2hpcD4gPSBbXTtcclxuICAgIHB1YmxpYyBjYXNlUHJvcHNDYXNlQ2F1c2U6IEFycmF5PENhc2VDYXVzZT4gPSBbXTtcclxuICAgIHB1YmxpYyBjYXNlUHJvcHNSZXNwb25zaWJsZVNERW1wbG95ZWU6IEFycmF5PFJlc3BvbnNpYmxlU0RFbXBsb3llZT4gPSBbXTtcclxuICAgIHB1YmxpYyBjYXNlUHJvcHNBY3R1YWxIb3VyczogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjYXNlUHJvcHNCdWRnZXRJbmRpY2F0aW9uOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGNhc2VQcm9wc0FwcHJvdmVkSG91cnNNaW46IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgY2FzZVByb3BzQXBwcm92ZWRIb3Vyc01heDogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBjYXNlUHJvcHNBcHByb3ZlZEhvdXJzQ29tbWVudEJ5U0Q6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2FzZVByb3BzU3BUc1Rhc2s6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwdWJsaWMgY2FzZVByb3BzUmVtZW1iZXJNZURhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgY2FzZVByb3BzUmVtZW1iZXJNZVJlYXNvbjogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjYXNlUHJvcHNJZ25vcmVDYXNlTWVtbzogc3RyaW5nID0gbnVsbDtcclxuICAgIHB1YmxpYyBjYXNlUHJvcHNQYXJlbnQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplUHJvcGVydGllc0Zvcm1GaWVsZHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuU2VydmljZUNhc2UgJiYgdGhpcy5TZXJ2aWNlQ2FzZS5maXFhc093bmVyc2hpcCkge1xyXG4gICAgICAgICAgICBjb25zdCByZWYgPSAhIXRoaXMuU2VydmljZUNhc2UuZmlxYXNPd25lcnNoaXAucmVmID8gdGhpcy5TZXJ2aWNlQ2FzZS5maXFhc093bmVyc2hpcC5yZWYgOiB0aGlzLlNlcnZpY2VDYXNlLmZpcWFzT3duZXJzaGlwLl9yZWY7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpcWFzRW1wbG95ZWVzICYmIHRoaXMuZmlxYXNFbXBsb3llZXNbcmVmXSAmJiB0aGlzLmZpcWFzRW1wbG95ZWVzW3JlZl0uaXNGb3JtZXJFbXBsb3llZSkgdGhpcy5maXFhc0VtcGxveWVlc1NlbGVjdGlvbnMucHVzaCh7IGtleTogcmVmLCB0ZXh0OiB0aGlzLmZpcWFzRW1wbG95ZWVzW3JlZl0ubmFtZSB9KTtcclxuICAgICAgICAgICAgdGhpcy5jYXNlUHJvcHNGaXFhc093bmVyc2hpcFswXSA9IHJlZjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc0ZpcWFzT3duZXJzaGlwID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLlNlcnZpY2VDYXNlLmNhc2VPd25lcnNoaXApIHtcclxuICAgICAgICAgICAgdGhpcy5jYXNlUHJvcHNDYXNlT3duZXJzaGlwWzBdID0gdGhpcy5TZXJ2aWNlQ2FzZS5jYXNlT3duZXJzaGlwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FzZVByb3BzQ2FzZU93bmVyc2hpcCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5TZXJ2aWNlQ2FzZS5jYXNlQ2F1c2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXNlUHJvcHNDYXNlQ2F1c2VbMF0gPSB0aGlzLlNlcnZpY2VDYXNlLmNhc2VDYXVzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc0Nhc2VDYXVzZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5TZXJ2aWNlQ2FzZS5yZXNwb25zaWJsZVNERW1wbG95ZWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXNlUHJvcHNSZXNwb25zaWJsZVNERW1wbG95ZWVbMF0gPSB0aGlzLlNlcnZpY2VDYXNlLnJlc3BvbnNpYmxlU0RFbXBsb3llZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc1Jlc3BvbnNpYmxlU0RFbXBsb3llZSA9IFsndGJkJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLlNlcnZpY2VDYXNlLnR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXNlVHlwZVswXSA9IHRoaXMuU2VydmljZUNhc2UudHlwZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VUeXBlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLlNlcnZpY2VDYXNlLmZlZWRiYWNrU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FzZUZlZWRiYWNrU3RhdHVzWzBdID0gdGhpcy5TZXJ2aWNlQ2FzZS5mZWVkYmFja1N0YXR1cztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VGZWVkYmFja1N0YXR1cyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYXNlUHJvcHNQYXJlbnQgPSB0aGlzLlNlcnZpY2VDYXNlLnBhcmVudENhc2VOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5jYXNlUHJvcHNCdWRnZXRJbmRpY2F0aW9uID0gdGhpcy5TZXJ2aWNlQ2FzZS5idWRnZXRJbmRpY2F0aW9uO1xyXG4gICAgICAgIHRoaXMuY2FzZVByb3BzQXBwcm92ZWRIb3Vyc01pbiA9IHRoaXMuU2VydmljZUNhc2UuYXBwcm92ZWRIb3Vyc01pbjtcclxuICAgICAgICB0aGlzLmNhc2VQcm9wc0FwcHJvdmVkSG91cnNNYXggPSB0aGlzLlNlcnZpY2VDYXNlLmFwcHJvdmVkSG91cnNNYXg7XHJcbiAgICAgICAgdGhpcy5jYXNlUHJvcHNBcHByb3ZlZEhvdXJzQ29tbWVudEJ5U0QgPSB0aGlzLlNlcnZpY2VDYXNlLmFwcHJvdmVkSG91cnNDb21tZW50QnlTRDtcclxuICAgICAgICB0aGlzLmNhc2VQcm9wc0FjdHVhbEhvdXJzID0gdGhpcy5TZXJ2aWNlQ2FzZS5hY3R1YWxIb3Vyc1NwZW50O1xyXG4gICAgICAgIHRoaXMuY2FzZVByb3BzSWdub3JlQ2FzZU1lbW8gPSB0aGlzLlNlcnZpY2VDYXNlLmlnbm9yZUNoYXRNZW1vU2VxdWVuY2U7XHJcblxyXG4gICAgICAgIHRoaXMuY2FzZVByb3BzU3BUc1Rhc2sgPSB0aGlzLlNlcnZpY2VDYXNlLnNwVHNUYXNrO1xyXG4gICAgICAgIHRoaXMuY2FzZVByb3BzUmVtZW1iZXJNZURhdGUgPSB0aGlzLlNlcnZpY2VDYXNlLnJlbWVtYmVyTWVEYXRlID8gbmV3IERhdGUodGhpcy5TZXJ2aWNlQ2FzZS5yZW1lbWJlck1lRGF0ZSkuY2xvbmUoKSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYXNlUHJvcHNSZW1lbWJlck1lUmVhc29uID0gdGhpcy5TZXJ2aWNlQ2FzZS5yZW1lbWJlck1lUmVhc29uO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzVGFiRGlydHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldERpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQcm9wZXJ0aWVzVGFiU3RhdGUoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhc2VQcm9wc0Nhc2VPd25lcnNoaXBbMF0gPT09IHRoaXMuU2VydmljZUNhc2UuY2FzZU93bmVyc2hpcCAmJlxyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc0Nhc2VDYXVzZVswXSA9PT0gdGhpcy5TZXJ2aWNlQ2FzZS5jYXNlQ2F1c2UgJiZcclxuICAgICAgICAgICAgdGhpcy5jYXNlRmVlZGJhY2tTdGF0dXNbMF0gPT09IHRoaXMuU2VydmljZUNhc2UuZmVlZGJhY2tTdGF0dXMgJiZcclxuICAgICAgICAgICAgdGhpcy5jYXNlUHJvcHNGaXFhc093bmVyc2hpcFswXSA9PT0gKHRoaXMuU2VydmljZUNhc2UuZmlxYXNPd25lcnNoaXAgJiYgKCEhdGhpcy5TZXJ2aWNlQ2FzZS5maXFhc093bmVyc2hpcC5yZWYgPyB0aGlzLlNlcnZpY2VDYXNlLmZpcWFzT3duZXJzaGlwLnJlZiA6IHRoaXMuU2VydmljZUNhc2UuZmlxYXNPd25lcnNoaXAuX3JlZikpICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2FzZVR5cGVbMF0gPT09IHRoaXMuU2VydmljZUNhc2UudHlwZSAmJlxyXG4gICAgICAgICAgICAodGhpcy5jYXNlUHJvcHNSZXNwb25zaWJsZVNERW1wbG95ZWVbMF0gPT09IHRoaXMuU2VydmljZUNhc2UucmVzcG9uc2libGVTREVtcGxveWVlIHx8ICF0aGlzLlNlcnZpY2VDYXNlLnJlc3BvbnNpYmxlU0RFbXBsb3llZSAmJiB0aGlzLmNhc2VQcm9wc1Jlc3BvbnNpYmxlU0RFbXBsb3llZS5sZW5ndGggJiYgdGhpcy5jYXNlUHJvcHNSZXNwb25zaWJsZVNERW1wbG95ZWVbMF0gPT09ICd0YmQnKSAmJlxyXG4gICAgICAgICAgICAodGhpcy5jYXNlUHJvcHNBY3R1YWxIb3VycyB8fCAwKSA9PT0gKHRoaXMuU2VydmljZUNhc2UuYWN0dWFsSG91cnNTcGVudCB8fCAwKSAmJlxyXG4gICAgICAgICAgICAodGhpcy5jYXNlUHJvcHNCdWRnZXRJbmRpY2F0aW9uIHx8IDApID09PSAodGhpcy5TZXJ2aWNlQ2FzZS5idWRnZXRJbmRpY2F0aW9uIHx8IDApICYmXHJcbiAgICAgICAgICAgICh0aGlzLmNhc2VQcm9wc0FwcHJvdmVkSG91cnNNaW4gfHwgMCkgPT09ICh0aGlzLlNlcnZpY2VDYXNlLmFwcHJvdmVkSG91cnNNaW4gfHwgMCkgJiZcclxuICAgICAgICAgICAgKHRoaXMuY2FzZVByb3BzQXBwcm92ZWRIb3Vyc01heCB8fCAwKSA9PT0gKHRoaXMuU2VydmljZUNhc2UuYXBwcm92ZWRIb3Vyc01heCB8fCAwKSAmJlxyXG4gICAgICAgICAgICAodGhpcy5jYXNlUHJvcHNBcHByb3ZlZEhvdXJzQ29tbWVudEJ5U0QgfHwgJycpLnRyaW0oKSA9PT0gKHRoaXMuU2VydmljZUNhc2UuYXBwcm92ZWRIb3Vyc0NvbW1lbnRCeVNEIHx8ICcnKS50cmltKCkgJiZcclxuICAgICAgICAgICAgKHRoaXMuY2FzZVByb3BzU3BUc1Rhc2sgfHwgJycpLnRyaW0oKSA9PT0gKHRoaXMuU2VydmljZUNhc2Uuc3BUc1Rhc2sgfHwgJycpLnRyaW0oKSAmJlxyXG4gICAgICAgICAgICBEYXRlLmRhdGVFcXVhbHModGhpcy5jYXNlUHJvcHNSZW1lbWJlck1lRGF0ZSwgdGhpcy5TZXJ2aWNlQ2FzZS5yZW1lbWJlck1lRGF0ZSA/IG5ldyBEYXRlKHRoaXMuU2VydmljZUNhc2UucmVtZW1iZXJNZURhdGUpLmNsb25lKCkgOiBudWxsKSAmJlxyXG4gICAgICAgICAgICAodGhpcy5jYXNlUHJvcHNSZW1lbWJlck1lUmVhc29uIHx8ICcnKS50cmltKCkgPT09ICh0aGlzLlNlcnZpY2VDYXNlLnJlbWVtYmVyTWVSZWFzb24gfHwgJycpLnRyaW0oKSAmJlxyXG4gICAgICAgICAgICAodGhpcy5jYXNlUHJvcHNJZ25vcmVDYXNlTWVtbyB8fCAnJykudHJpbSgpID09PSAodGhpcy5TZXJ2aWNlQ2FzZS5pZ25vcmVDaGF0TWVtb1NlcXVlbmNlIHx8ICcnKS50cmltKCkgJiZcclxuICAgICAgICAgICAgKHRoaXMuY2FzZVByb3BzUGFyZW50IHx8ICcnKS50cmltKCkgPT09ICh0aGlzLlNlcnZpY2VDYXNlLnBhcmVudENhc2VOdW1iZXIgfHwgJycpLnRyaW0oKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzVGFiRGlydHkgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzVGFiRGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldERpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZlZWRiYWNrU3RhdGVTZWxlY3RlZCh0eXBlOiBhbnkpIHtcclxuICAgICAgICBpZiAodHlwZSAmJiB0aGlzLmNhc2VGZWVkYmFja1N0YXR1cyAhPT0gdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VGZWVkYmFja1N0YXR1cyA9IHR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydGllc1RhYlN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXNlRmlxYXNPd25lcnNoaXBTZWxlY3RlZCh0eXBlOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIC8vIGZpbHRlciBvdXQgZm9ybWVyRW1wbG95ZWVzIHdoZW4gc2F2aW5nXHJcbiAgICAgICAgLy8gdHlwZSA9IHR5cGUuZmlsdGVyKHggPT4gdGhpcy5maXFhc0VtcGxveWVlc1t4XS5pc0ZpcWFzRW1wbG95ZWUgJiYgIXRoaXMuZmlxYXNFbXBsb3llZXNbeF0uaXNGb3JtZXJFbXBsb3llZSlcclxuICAgICAgICBpZiAodHlwZSAmJiB0aGlzLmNhc2VQcm9wc0ZpcWFzT3duZXJzaGlwICE9PSB0eXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FzZVByb3BzRmlxYXNPd25lcnNoaXAgPSB0eXBlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnRpZXNUYWJTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FzZVR5cGVTZWxlY3RlZCh0eXBlOiBDYXNlVHlwZSkge1xyXG4gICAgICAgIGlmICh0eXBlICYmIHRoaXMuY2FzZVR5cGUgIT09IHR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXNlVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydGllc1RhYlN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvd25lcnNoaXBTZWxlY3RlZCh0eXBlOiBDYXNlT3duZXJzaGlwW10pIHtcclxuICAgICAgICBpZiAodHlwZSAmJiB0aGlzLmNhc2VQcm9wc0Nhc2VPd25lcnNoaXAgIT09IHR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXNlUHJvcHNDYXNlT3duZXJzaGlwID0gdHlwZTtcclxuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzVGFiU3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhc2VDYXVzZVNlbGVjdGVkKHR5cGU6IENhc2VDYXVzZVtdKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgJiYgdGhpcy5jYXNlUHJvcHNDYXNlQ2F1c2UgIT09IHR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXNlUHJvcHNDYXNlQ2F1c2UgPSB0eXBlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnRpZXNUYWJTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzcG9uc2libGVTREVtcGxveWVlU2VsZWN0ZWQodHlwZTogUmVzcG9uc2libGVTREVtcGxveWVlW10pIHtcclxuICAgICAgICBpZiAodHlwZSAmJiB0aGlzLmNhc2VQcm9wc1Jlc3BvbnNpYmxlU0RFbXBsb3llZSAhPT0gdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc1Jlc3BvbnNpYmxlU0RFbXBsb3llZSA9IHR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydGllc1RhYlN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBidWRnZXRJbmRpY2F0aW9uQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IFwiLVwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQpICYmIHRoaXMuY2FzZVByb3BzQnVkZ2V0SW5kaWNhdGlvbiAhPT0gTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc0J1ZGdldEluZGljYXRpb24gPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnRpZXNUYWJTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwcm92ZWRIb3Vyc01pbkNoYW5nZWQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcIi1cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkKSAmJiB0aGlzLmNhc2VQcm9wc0FwcHJvdmVkSG91cnNNaW4gIT09IE51bWJlcih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXNlUHJvcHNBcHByb3ZlZEhvdXJzTWluID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzVGFiU3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcHJvdmVkSG91cnNNYXhDaGFuZ2VkKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gXCItXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCkgJiYgdGhpcy5jYXNlUHJvcHNBcHByb3ZlZEhvdXJzTWF4ICE9PSBOdW1iZXIodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FzZVByb3BzQXBwcm92ZWRIb3Vyc01heCA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydGllc1RhYlN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHByb3ZlZEhvdXJzQ29tbWVudEJ5U0RDaGFuZ2VkKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQpICYmIHRoaXMuY2FzZVByb3BzQXBwcm92ZWRIb3Vyc0NvbW1lbnRCeVNEICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc0FwcHJvdmVkSG91cnNDb21tZW50QnlTRCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnRpZXNUYWJTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3BUc1Rhc2tDaGFuZ2VkKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQpICYmIHRoaXMuY2FzZVByb3BzU3BUc1Rhc2sgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FzZVByb3BzU3BUc1Rhc2sgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzVGFiU3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbWVtYmVyTWVEYXRlQ2hhbmdlZChkYXRlOiBhbnkpIHtcclxuICAgICAgICBpZiAoIShEYXRlLmRhdGVFcXVhbHModGhpcy5jYXNlUHJvcHNSZW1lbWJlck1lRGF0ZSwgZGF0ZSkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FzZVByb3BzUmVtZW1iZXJNZURhdGUgPSBkYXRlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnRpZXNUYWJTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtZW1iZXJNZVJlYXNvbkNoYW5nZWQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCkgJiYgdGhpcy5jYXNlUHJvcHNSZW1lbWJlck1lUmVhc29uICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc1JlbWVtYmVyTWVSZWFzb24gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzVGFiU3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlnbm9yZUNhc2VNZW1vQ2hhbmdlZCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkKSAmJiB0aGlzLmNhc2VQcm9wc0lnbm9yZUNhc2VNZW1vICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc0lnbm9yZUNhc2VNZW1vID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydGllc1RhYlN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwYXJlbnRDaGFuZ2VkKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQpICYmIHRoaXMuY2FzZVByb3BzUGFyZW50ICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VQcm9wc1BhcmVudCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnRpZXNUYWJTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBvcHVsYXRlU2VydmljZUNhc2VQcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG4gICAgICAgICAgICBjb25zdCBmaXFhc0VtcGxveWVlID0gdGhpcy5maXFhc0VtcGxveWVlc1t0aGlzLmNhc2VQcm9wc0ZpcWFzT3duZXJzaGlwWzBdXTtcclxuICAgICAgICAgICAgaWYgKCEhZmlxYXNFbXBsb3llZSAmJiAhIWZpcWFzRW1wbG95ZWUuaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2UuZmlxYXNPd25lcnNoaXAgPSBmaXFhc0VtcGxveWVlLmlkO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS5maXFhc093bmVyc2hpcCA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuU2VydmljZUNhc2UuZmVlZGJhY2tTdGF0dXMgPSB0aGlzLmNhc2VGZWVkYmFja1N0YXR1c1swXTtcclxuICAgICAgICB0aGlzLlNlcnZpY2VDYXNlLmlnbm9yZUNoYXRNZW1vU2VxdWVuY2UgPSB0aGlzLmNhc2VQcm9wc0lnbm9yZUNhc2VNZW1vO1xyXG4gICAgICAgIHRoaXMuU2VydmljZUNhc2UuY2FzZU93bmVyc2hpcCA9IHRoaXMuY2FzZVByb3BzQ2FzZU93bmVyc2hpcFswXTtcclxuICAgICAgICB0aGlzLlNlcnZpY2VDYXNlLmNhc2VDYXVzZSA9IHRoaXMuY2FzZVByb3BzQ2FzZUNhdXNlWzBdO1xyXG4gICAgICAgIHRoaXMuU2VydmljZUNhc2UucmVzcG9uc2libGVTREVtcGxveWVlID0gdGhpcy5jYXNlUHJvcHNSZXNwb25zaWJsZVNERW1wbG95ZWVbMF07XHJcbiAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS5idWRnZXRJbmRpY2F0aW9uID0gdGhpcy5jYXNlUHJvcHNCdWRnZXRJbmRpY2F0aW9uO1xyXG4gICAgICAgIHRoaXMuU2VydmljZUNhc2UuYXBwcm92ZWRIb3Vyc01pbiA9IHRoaXMuY2FzZVByb3BzQXBwcm92ZWRIb3Vyc01pbjtcclxuICAgICAgICB0aGlzLlNlcnZpY2VDYXNlLmFwcHJvdmVkSG91cnNNYXggPSB0aGlzLmNhc2VQcm9wc0FwcHJvdmVkSG91cnNNYXg7XHJcbiAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS5hcHByb3ZlZEhvdXJzQ29tbWVudEJ5U0QgPSB0aGlzLmNhc2VQcm9wc0FwcHJvdmVkSG91cnNDb21tZW50QnlTRDtcclxuICAgICAgICB0aGlzLlNlcnZpY2VDYXNlLnNwVHNUYXNrID0gdGhpcy5jYXNlUHJvcHNTcFRzVGFzaztcclxuICAgICAgICB0aGlzLlNlcnZpY2VDYXNlLnJlbWVtYmVyTWVEYXRlID0gdGhpcy5jYXNlUHJvcHNSZW1lbWJlck1lRGF0ZSA/IHRoaXMuY2FzZVByb3BzUmVtZW1iZXJNZURhdGUudG9JU09EYXRlU3RyaW5nKCkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuU2VydmljZUNhc2UucmVtZW1iZXJNZVJlYXNvbiA9IHRoaXMuY2FzZVByb3BzUmVtZW1iZXJNZVJlYXNvbjtcclxuICAgICAgICB0aGlzLlNlcnZpY2VDYXNlLnR5cGUgPSB0aGlzLmNhc2VUeXBlWzBdO1xyXG4gICAgICAgIHRoaXMuU2VydmljZUNhc2UuaWdub3JlTWFpbGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS5wYXJlbnRDYXNlTnVtYmVyID0gdGhpcy5jYXNlUHJvcHNQYXJlbnQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzYXZlUHJvcGVydGllcygpIHtcclxuXHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlU2VydmljZUNhc2VQcm9wZXJ0aWVzKCk7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5VcGRhdGVDYXNlPFQ+KHRoaXMuU2VydmljZUNhc2UuaWQsIHRoaXMuU2VydmljZUNhc2UpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5zZXRTZXFVcmwoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlcnZpY2VDYXNlRWRpdCcsICdFcnJvciBzYXZpbmcgcmVmZXJlbmNlJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdFRElUX1JFRkVSRU5DRV9DQVNFX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyUHJvcGVydGllcygpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVQcm9wZXJ0aWVzRm9ybUZpZWxkcygpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBFTkQgTkVXXHJcblxyXG4gICAgcHVibGljIGFzeW5jIG9uVGl0bGVDaGFuZ2VkKHRpdGxlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5VcGRhdGVDYXNlPFQ+KHRoaXMuU2VydmljZUNhc2UuaWQsIHRoaXMuU2VydmljZUNhc2UpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdTZXJ2aWNlQ2FzZUVkaXQnLCAnRXJyb3Igc2F2aW5nIHRpdGxlJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdFRElUX1RJVExFX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB3YXRjaGVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlNlcnZpY2VDYXNlICYmIHRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3MgJiYgdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5nZW5lcmFsTGlua3MpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLlNlcnZpY2VDYXNlLmFjdGlvbkxpbmtzLmdlbmVyYWxMaW5rcy53YXRjaCAmJiAhdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5nZW5lcmFsTGlua3MudW53YXRjaClcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3MuZ2VuZXJhbExpbmtzLnVud2F0Y2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZW5hYmxlV2F0Y2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIHNldCBlbmFibGVXYXRjaCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9lbmFibGVXYXRjaCA9IHZhbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZW5hYmxlV2F0Y2goKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnJlYWRPbmx5Q2hhdCAmJiB0aGlzLl9lbmFibGVXYXRjaDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhc3luYyB0b2dnbGVXYXRjaCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubG9hZGluZ0RhdGEgJiYgdGhpcy5lbmFibGVXYXRjaCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVXYXRjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFjdCA9IHRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3MuZ2VuZXJhbExpbmtzLndhdGNoIHx8IHRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3MuZ2VuZXJhbExpbmtzLnVud2F0Y2g7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBhY3QuYWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlV2F0Y2ggPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZXdGaWxlVG9vbHRpcDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBuZXdGaWxlVG9vbHRleHQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF90aW1lcjogbmcuSVByb21pc2U8YW55PjtcclxuICAgIHByaXZhdGUgX25vdGNoYW5nZWQ6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrRWRpdHMoKSB7XHJcbiAgICAgICAgdGhpcy5fbm90Y2hhbmdlZCsrO1xyXG4gICAgICAgIGlmICh0aGlzLmFsaXZlICYmIHRoaXMuY29udmVyc2F0aW9uU2V0dGluZ3MuUGVyaW9kaWNseUNoZWNrRm9yQ2hhbmdlcykge1xyXG4gICAgICAgICAgICBsZXQgY2FzZUNoYW5nZWRBY3Rpb24gPSBVdGlscy5nZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIGN0cmwgPT4gY3RybC5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5nZW5lcmFsTGlua3MuaGFzQ2hhbmdlZCk7XHJcbiAgICAgICAgICAgIGlmIChjYXNlQ2hhbmdlZEFjdGlvbiAmJiAhdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLklzUHJvY2Vzc2luZykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNhc2VDaGFuZ2VkID0gYXdhaXQgY2FzZUNoYW5nZWRBY3Rpb24uYWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FzZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90Y2hhbmdlZCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuU2VydmljZUNhc2UgJiYgdGhpcy5Db3JyZXNwb25kZW5jZUNoZWNrICYmICF0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuSXNQcm9jZXNzaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29ycmVzcG9uZGVzQ2hhbmdlZCA9IGF3YWl0IHRoaXMuQ29ycmVzcG9uZGVuY2VDaGVjay5hY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JyZXNwb25kZXNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5HZXRIaXN0b3J5QW5kQ29ycmVzcG9uZGVuY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RjaGFuZ2VkID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgdGltZU91dEluU2Vjb25kcyA9ICh0aGlzLl9ub3RjaGFuZ2VkIDwgdGhpcy5jb252ZXJzYXRpb25TZXR0aW5ncy5QZXJpb2RzV2l0aE5vQ2hhbmdlcykgPyB0aGlzLmNvbnZlcnNhdGlvblNldHRpbmdzLlNob3J0UGVyaW9kSW5TZWNvbmRzIDogdGhpcy5jb252ZXJzYXRpb25TZXR0aW5ncy5Mb25nUGVyaW9kSW5TZWNvbmRzO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB0aGlzLiR0aW1lb3V0KCgpID0+IHRoaXMuY2hlY2tFZGl0cygpLCB0aW1lT3V0SW5TZWNvbmRzICogMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0FsZXJ0c0NoYW5nZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnNob3dBbGVydHMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNldENvbnZlcnNhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0ludGVybmFsQ2hhbmdlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuc2hvd0ludGVybmFsID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRDb252ZXJzYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldENvbnZlcnNhdGlvbigpIHtcclxuICAgICAgICB0aGlzLkNvbnZlcnNhdGlvbiA9ICF0aGlzLl9jb252ZXJzYXRpb25JdGVtcyA/IHRoaXMuX2NvbnZlcnNhdGlvbkl0ZW1zIDpcclxuICAgICAgICAgICAgdGhpcy5fY29udmVyc2F0aW9uSXRlbXNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGkuZGlyZWN0aW9uICE9ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgICAgIHx8ICh0aGlzLnNob3dBbGVydHMgJiYgaS5kaXJlY3Rpb24gPT0gJ25vbmUnICYmIGkuY2xhc3MgIT0gJ2ludGVybmFsJylcclxuICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy5zaG93SW50ZXJuYWwgJiYgaS5kaXJlY3Rpb24gPT0gJ25vbmUnICYmIGkuY2xhc3MgPT0gJ2ludGVybmFsJylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jICRyb3V0ZXJPbkFjdGl2YXRlKG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgICAgICBsZXQgaWRVcmwgPSBuZXh0LnBhcmFtcy5pZCA/IGF0b2IobmV4dC5wYXJhbXMuaWQpIDogbnVsbDtcclxuICAgICAgICBsZXQgaWQgPSBudWxsO1xyXG4gICAgICAgIGlmIChpZFVybClcclxuICAgICAgICAgICAgaWQgPSB7IGhyZWY6IGlkVXJsLCBmdWxsSHJlZjogaWRVcmwgfTtcclxuICAgICAgICBsZXQgY2FzZWlkID0gcGFyc2VJbnQobmV4dC5wYXJhbXMubnVtYmVyKTtcclxuICAgICAgICBpZiAoaXNOYU4oY2FzZWlkKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIGlmIChpZCAmJiAoIXRoaXMuU2VydmljZUNhc2UgfHwgIXRoaXMuU2VydmljZUNhc2UuaWQgfHwgdGhpcy5TZXJ2aWNlQ2FzZS5pZC5mdWxsSHJlZiAhPSBpZC5mdWxsSHJlZikpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZSA9IGF3YWl0IHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLkdldEJ5SWQoaWQsIHRydWUpIGFzIFQ7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlcnZpY2VDYXNlID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuR2V0QnlOdW1iZXIoY2FzZWlkLCB0cnVlKSBhcyBUO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCghdGhpcy5TZXJ2aWNlQ2FzZSAmJiBjYXNlaWQpIHx8IHBhcnNlSW50KHRoaXMuU2VydmljZUNhc2UuY2FzZU51bWJlcikgIT0gY2FzZWlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlcnZpY2VDYXNlID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuR2V0QnlOdW1iZXIoY2FzZWlkLCB0cnVlKSBhcyBUO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLlNlcnZpY2VDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuQmFzZS51cGRhdGVQcmV2TmV4dChjYXNlaWQudG9TdHJpbmcoKSwgaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmRvTG9hZERhdGEoKTtcclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlcnZpY2VDYXNlRWRpdCcsICdFcnJvciBsb2FkaW5nIGRhdGEnLCBleCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jICRyb3V0ZXJPblJldXNlKG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgUmVsb2FkU2VydmljZUNhc2UoKSB7XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlcnZpY2VDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlcnZpY2VDYXNlID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuR2V0QnlJZDxUPih0aGlzLlNlcnZpY2VDYXNlLmlkKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZG9Mb2FkRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlcnZpY2VDYXNlRWRpdCcsICdFcnJvciByZWxvYWRpbmcgc2VydmljZWNhc2UnLCBlKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIEdldEhpc3RvcnlBbmRDb3JyZXNwb25kZW5jZShnZXRIaXN0b3J5ID0gdHJ1ZSwgZ2V0Q29ycmVzcG9uZGVuY2UgPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBbY29ycmVzcG9uZGVuY2UsIGhpc3RvcnldID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICAgICAgZ2V0Q29ycmVzcG9uZGVuY2UgPyB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5HZXRJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uUHJvcGVydHlPZih0aGlzLlNlcnZpY2VDYXNlLmNvcnJlc3BvbmRlbmNlKSA6IG5ldyBQcm9taXNlPElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb25PZjxDb3JyZXNwb25kZW5jZT4+KHIgPT4gcihudWxsKSksXHJcbiAgICAgICAgICAgICAgICBnZXRIaXN0b3J5ID8gdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuR2V0SUlkZW50aWZpYWJsZUNvbGxlY3Rpb25Qcm9wZXJ0eU9mKHRoaXMuU2VydmljZUNhc2UuaGlzdG9yeSkgOiBuZXcgUHJvbWlzZTxJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uT2Y8UmVjb3JkSGlzdG9yeT4+KHIgPT4gcihudWxsKSldKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhY3Rpb25zOiBBY3Rpb25MaW5rcyA9IGdldENvcnJlc3BvbmRlbmNlID8gKDxIYXNBY3Rpb25zPig8YW55PmNvcnJlc3BvbmRlbmNlKSkuYWN0aW9uTGlua3MgOiBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLkNvcnJlc3BvbmRlbmNlQ2hlY2sgPSBhY3Rpb25zICYmIGFjdGlvbnMuZ2VuZXJhbExpbmtzICYmIGFjdGlvbnMuZ2VuZXJhbExpbmtzLmhhc0NoYW5nZWQgPyBhY3Rpb25zLmdlbmVyYWxMaW5rcy5oYXNDaGFuZ2VkIDogbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgZXNjYXBlZENvcnJlc3BvbmRlbmNlID0gZ2V0Q29ycmVzcG9uZGVuY2UgPyBjb3JyZXNwb25kZW5jZS5pdGVtcyA6IFtdXHJcbiAgICAgICAgICAgIGVzY2FwZWRDb3JyZXNwb25kZW5jZS5mb3JFYWNoKGl0ZW0gPT4geyBpdGVtLm9yaWdpbmFsQ29udGVudCA9IGl0ZW0uY29udGVudDsgaXRlbS5jb250ZW50ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGl0ZW0uY29udGVudCkpLnBhcmVudE5vZGUgYXMgYW55KS5pbm5lckhUTUwgfSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkQ29ycmVzcG9uZGVuY2UoXHJcbiAgICAgICAgICAgICAgICBlc2NhcGVkQ29ycmVzcG9uZGVuY2UsXHJcbiAgICAgICAgICAgICAgICBnZXRIaXN0b3J5ID8gaGlzdG9yeS5pdGVtcyA6IFtdKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDb252ZXJzYXRpb24oKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignU2VydmljZUNhc2VFZGl0JywgJ0Vycm9yIGdldHRpbmcgY29ycmVzcG9uZGVuY2UnLCBlKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIEdldEZpbGVzKCkge1xyXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcCA9IGF3YWl0IHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLkdldElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZih0aGlzLlNlcnZpY2VDYXNlLmZpbGVzLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkRmlsZXMocC5pdGVtcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlcnZpY2VDYXNlRWRpdCcsICdFcnJvciBnZXR0aW5nIGZpbGVzJywgZSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29ycmVzcG9uZGVuY2U6IENvcnJlc3BvbmRlbmNlW107XHJcbiAgICBwcml2YXRlIGhpc3Rvcnk6IFJlY29yZEhpc3RvcnlbXTtcclxuICAgIHByaXZhdGUgYXN5bmMgbG9hZENvcnJlc3BvbmRlbmNlKGNvcnJlc3BvbmRlbmNlOiBDb3JyZXNwb25kZW5jZVtdLCBoaXN0b3J5OiBSZWNvcmRIaXN0b3J5W10pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5vbkxvYWRlZDtcclxuICAgICAgICBpZiAoY29ycmVzcG9uZGVuY2UgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29ycmVzcG9uZGVuY2UgPSB0aGlzLmNvcnJlc3BvbmRlbmNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ycmVzcG9uZGVuY2UgPSBjb3JyZXNwb25kZW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhpc3RvcnkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgaGlzdG9yeSA9IHRoaXMuaGlzdG9yeTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkgPSBoaXN0b3J5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdXNlciA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24udXNlcjtcclxuICAgICAgICBsZXQgY3VzdDogQ3VzdG9tZXIgPSBhd2FpdCB0aGlzLlNlcnZpY2VDYXNlLmN1c3RvbWVyLnZhbHVlO1xyXG4gICAgICAgIGxldCBjb252ID0gY29ycmVzcG9uZGVuY2UubWFwPENvbnZlcnNhdGlvbkl0ZW0+KChjKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogYy5pZCxcclxuICAgICAgICAgICAgICAgIHBlcnNvbjogYy5jcmVhdGVkQnksXHJcbiAgICAgICAgICAgICAgICBjb250YWN0UGVyc29uOiBjLmNyZWF0ZWRCeUlkLFxyXG4gICAgICAgICAgICAgICAgcGhvbmU6ICghYy5ieVN1cHBvcnRFbXBsb3llZSkgPyAoY3VzdC5waG9uZSAmJiBjdXN0LnBob25lLnRyaW0oKS5sZW5ndGggPiAwKSA/IGAke2N1c3QubmFtZX06ICR7Y3VzdC5waG9uZX1gIDogYCR7Y3VzdC5uYW1lfWAgOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZShjLmNyZWF0ZWRPbiksXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBjLmNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IChjLmNvcnJlc3BvbmRlbmNlVHlwZSA9PSBcImludGVybmFsXCIgPyAnbm9uZScgOlxyXG4gICAgICAgICAgICAgICAgICAgIChjLmJ5Q3VzdG9tZXIgfHwgYy5ieUludGVybmFsQ3VzdG9tZXIpICYmIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJDVVNUXCJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhYy5ieUN1c3RvbWVyICYmICFjLmJ5SW50ZXJuYWxDdXN0b21lciAmJiAodGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5jdXJyZW50Um9sZUluKFtcIlNEXCIsIFwiRlFTXCJdKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnb3V0JyA6ICdpbicpLFxyXG4gICAgICAgICAgICAgICAgY2xhc3M6IGMuY29ycmVzcG9uZGVuY2VUeXBlLFxyXG4gICAgICAgICAgICAgICAgZnJvbUZpcWFzOiAhYy5ieUN1c3RvbWVyICYmICFjLmJ5SW50ZXJuYWxDdXN0b21lcixcclxuICAgICAgICAgICAgICAgIGZyb21TdXBwb3J0OiBjLmJ5U3VwcG9ydEVtcGxveWVlLFxyXG4gICAgICAgICAgICAgICAgaXRlbTogY1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY29uY2F0KGhpc3RvcnkubWFwPENvbnZlcnNhdGlvbkl0ZW0+KChoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaC5pZCxcclxuICAgICAgICAgICAgICAgIHBlcnNvbjogaC5tb2RpZmllZEJ5LFxyXG4gICAgICAgICAgICAgICAgY29udGFjdFBlcnNvbjogaC5tb2RpZmllZEJ5SWQsXHJcbiAgICAgICAgICAgICAgICBwaG9uZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoaC5tb2RpZmllZE9uKSxcclxuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2VuZXJhdGVIaXN0b3J5VGV4dChoKSxcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJub25lXCIsXHJcbiAgICAgICAgICAgICAgICBjbGFzczogaC5pdGVtVHlwZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgaXRlbTogaFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpLnNvcnQoKGEsIGIpID0+IGEudGltZXN0YW1wLmdldFRpbWUoKSAtIGIudGltZXN0YW1wLmdldFRpbWUoKSk7XHJcbiAgICAgICAgdGhpcy5fY29udmVyc2F0aW9uSXRlbXMgPSBjb252O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgb25Db252ZXJzYXRpb25UeXBlQ2hhbmdlKGlkOiBJSWRlbnRpdHlMaW5rKSB7XHJcbiAgICAgICAgdmFyIGNvcnJlc3BvbmRlbmNlID0gdGhpcy5fY29udmVyc2F0aW9uSXRlbXMuZmlsdGVyKGkgPT4gaS5pZCAmJiBpLmlkLmVxdWFscyhpZCkpLnNoaWZ0KCkuaXRlbSBhcyBDb3JyZXNwb25kZW5jZTtcclxuICAgICAgICB2YXIgaXRlbSA9IHtcclxuICAgICAgICAgICAgdHlwZTogY29ycmVzcG9uZGVuY2UuY29ycmVzcG9uZGVuY2VUeXBlLFxyXG4gICAgICAgICAgICBvcmlnaW5hbENvbnRlbnQ6IGNvcnJlc3BvbmRlbmNlLm9yaWdpbmFsQ29udGVudCxcclxuICAgICAgICAgICAgdGV4dDogY29ycmVzcG9uZGVuY2UuY29udGVudCxcclxuICAgICAgICAgICAgcGVyc29uOiBjb3JyZXNwb25kZW5jZS5jcmVhdGVkQnksXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogY29ycmVzcG9uZGVuY2UuY3JlYXRlZE9uXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgb3B0aW9uczogbmcudWkuYm9vdHN0cmFwLklNb2RhbFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICBhbmltYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVVybDogJ2NvcnJlc3BvbmRlbmNldHlwZWNoYW5nZS5odG1sJyxcclxuICAgICAgICAgICAgY29udHJvbGxlcjogQ2hhbmdlQ29ycmVzcG9uZGVuY2VUeXBlQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBjb250cm9sbGVyQXM6ICckY3RybCcsXHJcbiAgICAgICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgICAgIGl0ZW06ICgpID0+IGl0ZW1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IG0gPSB0aGlzLiRtb2RhbC5vcGVuKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBsZXQgeCA9IGF3YWl0IG0ucmVzdWx0XHJcbiAgICAgICAgICAgIGlmICh4ID09ICd5ZXMnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3JyZXNwb25kZW5jZS5jb3JyZXNwb25kZW5jZVR5cGUgPT0gaXRlbS50eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRlbmNlLmNvcnJlc3BvbmRlbmNlVHlwZSA9IGl0ZW0udHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kZW5jZS5jb250ZW50ID0gaXRlbS5vcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuVXBkYXRlQ29ycmVzcG9uZGVuY2UoY29ycmVzcG9uZGVuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWp1c3REeW5hbWljSFRNTExheW91dCgwKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLkdldEhpc3RvcnlBbmRDb3JyZXNwb25kZW5jZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGNoYW5nZWQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lciAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0LmNhbmNlbCh0aGlzLl90aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB0aGlzLiR0aW1lb3V0KCgpID0+IHsgdGhpcy5jaGVja0VkaXRzKCk7IH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdTZXJ2aWNlQ2FzZUVkaXQnLCAnRXJyb3IgY2hhbmdpbmcgY29ycmVzcG9uZGVuY2UgdHlwZScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdBRERfQ09SUkVTUE9OREVOQ0VfQ0FTRV9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoXykge1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGFibGVQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBcIkNhc2VQcmlvcml0eVwiLFxyXG4gICAgICAgIFwiQ2FzZVNldmVyaXR5XCIsXHJcbiAgICAgICAgXCJDYXNlU3RhdHVzXCIsXHJcbiAgICAgICAgXCJXb3JrQXJvdW5kWU5cIixcclxuICAgICAgICBcIkVudmlyb25tZW50XCJcclxuICAgIF07XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1RyYW5zbGF0ZShpdGVtbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy50cmFuc2xhdGFibGVQcm9wZXJ0aWVzLmluZGV4T2YoaXRlbW5hbWUpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShjb250ZW50LnJlcGxhY2UoLyAvZywgXCJcIikpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbW5hbWUgPT09IFwiUmVxdWVzdGVkRGVhZGxpbmVcIiAmJiBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoY29udGVudC5sZW5ndGggPT0gOCA/IGAke2NvbnRlbnQuc3Vic3RyKDAsIDQpfS0ke2NvbnRlbnQuc3Vic3RyKDQsIDIpfS0ke2NvbnRlbnQuc3Vic3RyKDYsIDIpfWAgOiBjb250ZW50KTtcclxuICAgICAgICAgICAgaWYgKGRhdGUuaXNWYWxpZCgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVIaXN0b3J5VGV4dChoOiBSZWNvcmRIaXN0b3J5KSB7XHJcbiAgICAgICAgc3dpdGNoIChoLml0ZW1UeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0aXRsZVwiOiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaC5vbGRDb250ZW50ICE9PSB1bmRlZmluZWQgJiYgaC5vbGRDb250ZW50ICE9PSBudWxsICYmIGgub2xkQ29udGVudC50cmltKCkgIT09IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAmJiBoLm5ld0NvbnRlbnQgIT09IHVuZGVmaW5lZCAmJiBoLm5ld0NvbnRlbnQgIT09IG51bGwgJiYgaC5uZXdDb250ZW50LnRyaW0oKSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJDSEFOR0VEX3swfV9GUk9NX3sxfV9UT197Mn1cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoXCJ7MH1cIiwgYDxzcGFuIGNsYXNzPVwiaXRlbW5hbWVcIj4ke2Rlc2MgIT0gaC5pdGVtTmFtZSA/IGRlc2MgOiBoLml0ZW1EZXNjfTwvc3Bhbj5gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcInsxfVwiLCBgPHNwYW4gY2xhc3M9XCJvbGR2YWx1ZVwiPiR7dGhpcy5jaGVja1RyYW5zbGF0ZShoLml0ZW1OYW1lLCBoLm9sZENvbnRlbnQpfTwvc3Bhbj5gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcInsyfVwiLCBgPHNwYW4gY2xhc3M9XCJuZXd2YWx1ZVwiPiR7dGhpcy5jaGVja1RyYW5zbGF0ZShoLml0ZW1OYW1lLCBoLm5ld0NvbnRlbnQpfTwvc3Bhbj5gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaC5uZXdDb250ZW50ICE9PSB1bmRlZmluZWQgJiYgaC5uZXdDb250ZW50ICE9PSBudWxsICYmIGgubmV3Q29udGVudC50cmltKCkgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiQ0hBTkdFRF97MH1fVE9fezF9XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiezB9XCIsIGA8c3BhbiBjbGFzcz1cIml0ZW1uYW1lXCI+JHtkZXNjICE9IGguaXRlbU5hbWUgPyBkZXNjIDogaC5pdGVtRGVzY308L3NwYW4+YClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoXCJ7MX1cIiwgYDxzcGFuIGNsYXNzPVwibmV3dmFsdWVcIj4ke3RoaXMuY2hlY2tUcmFuc2xhdGUoaC5pdGVtTmFtZSwgaC5uZXdDb250ZW50KX08L3NwYW4+YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiQ0hBTkdFRF97MH1cIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcInswfVwiLCBgPHNwYW4gY2xhc3M9XCJpdGVtbmFtZVwiPiR7dGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKGguaXRlbVR5cGUudG9VcHBlckNhc2UoKSl9PC9zcGFuPmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShoLml0ZW1OYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChoLm9sZENvbnRlbnQgIT09IHVuZGVmaW5lZCAmJiBoLm9sZENvbnRlbnQgIT09IG51bGwgJiYgaC5vbGRDb250ZW50LnRyaW0oKSAhPT0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICYmIGgubmV3Q29udGVudCAhPT0gdW5kZWZpbmVkICYmIGgubmV3Q29udGVudCAhPT0gbnVsbCAmJiBoLm5ld0NvbnRlbnQudHJpbSgpICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkNIQU5HRURfezB9X0ZST01fezF9X1RPX3syfVwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcInswfVwiLCBgPHNwYW4gY2xhc3M9XCJpdGVtbmFtZVwiPiR7ZGVzYyAhPSBoLml0ZW1OYW1lID8gZGVzYyA6IGguaXRlbURlc2N9PC9zcGFuPmApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiezF9XCIsIGA8c3BhbiBjbGFzcz1cIm9sZHZhbHVlXCI+JHt0aGlzLmNoZWNrVHJhbnNsYXRlKGguaXRlbU5hbWUsIGgub2xkQ29udGVudCl9PC9zcGFuPmApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiezJ9XCIsIGA8c3BhbiBjbGFzcz1cIm5ld3ZhbHVlXCI+JHt0aGlzLmNoZWNrVHJhbnNsYXRlKGguaXRlbU5hbWUsIGgubmV3Q29udGVudCl9PC9zcGFuPmApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoLm5ld0NvbnRlbnQgIT09IHVuZGVmaW5lZCAmJiBoLm5ld0NvbnRlbnQgIT09IG51bGwgJiYgaC5uZXdDb250ZW50LnRyaW0oKSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJDSEFOR0VEX3swfV9UT197MX1cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoXCJ7MH1cIiwgYDxzcGFuIGNsYXNzPVwiaXRlbW5hbWVcIj4ke2Rlc2MgIT0gaC5pdGVtTmFtZSA/IGRlc2MgOiBoLml0ZW1EZXNjfTwvc3Bhbj5gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcInsxfVwiLCBgPHNwYW4gY2xhc3M9XCJuZXd2YWx1ZVwiPiR7dGhpcy5jaGVja1RyYW5zbGF0ZShoLml0ZW1OYW1lLCBoLm5ld0NvbnRlbnQpfTwvc3Bhbj5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJDTEVBUkVEX3swfV97MX1cIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcInswfVwiLCBgPHNwYW4gY2xhc3M9XCJpdGVtbmFtZVwiPiR7ZGVzYyAhPSBoLml0ZW1OYW1lID8gZGVzYyA6IGguaXRlbURlc2N9PC9zcGFuPmApXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoXCJ7MX1cIiwgYDxzcGFuIGNsYXNzPVwibmV3dmFsdWVcIj4ke3RoaXMuY2hlY2tUcmFuc2xhdGUoaC5pdGVtTmFtZSwgaC5vbGRDb250ZW50KX08L3NwYW4+YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcImRvY3VtZW50XCI6IHtcclxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaC5uZXdDb250ZW50KSA9PSAwICYmIE51bWJlcihoLm9sZENvbnRlbnQpID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiQVRUQUNITUVOVF97MH1fUkVNT1ZFRFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcInswfVwiLCBgPHNwYW4gY2xhc3M9XCJpdGVtbmFtZVwiPiR7aC5pdGVtRGVzYyB8fCBoLml0ZW1OYW1lfTwvc3Bhbj5gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTnVtYmVyKGgubmV3Q29udGVudCkgPT0gMSAmJiBOdW1iZXIoaC5vbGRDb250ZW50KSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkFUVEFDSE1FTlRfezB9X0FEREVEXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiezB9XCIsIGA8c3BhbiBjbGFzcz1cIml0ZW1uYW1lXCI+JHtoLml0ZW1EZXNjIHx8IGguaXRlbU5hbWV9PC9zcGFuPmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJmZWVkYmFja1N0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGgubmV3Q29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJGZWVkQmFja1JlcXVlc3RlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiSEFTX1JFUVVFU1RFRF9GRUVEQkFDS1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiRmVlZEJhY2tQcm92aWRlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiSEFTX1BST1ZJREVEX0ZFRURCQUNLXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJOb0ZlZWRCYWNrUmVxdWlyZWRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkRPRVNfTk9UX1JFUVVJUkVfRkVFREJBQ0tcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcIndhdGNoXCI6IHtcclxuICAgICAgICAgICAgICAgIGxldCByZXZlcnNlZERlc2MgPSBoLml0ZW1EZXNjLnNwbGl0KCcsJykucmV2ZXJzZSgpLmpvaW4oJyAnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGgubmV3Q29udGVudCkgPT0gMSAmJiBOdW1iZXIoaC5vbGRDb250ZW50KSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGguaXRlbU5hbWUgIT09IHJldmVyc2VkRGVzYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiQUREX1dBVENIX3swfVwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoXCJ7MH1cIiwgYDxzcGFuIGNsYXNzPVwiaXRlbW5hbWVcIj4ke3JldmVyc2VkRGVzY308L3NwYW4+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIldBVENISU5HXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoTnVtYmVyKGgubmV3Q29udGVudCkgPT0gMCAmJiBOdW1iZXIoaC5vbGRDb250ZW50KSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGguaXRlbU5hbWUgIT09IHJldmVyc2VkRGVzYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiUkVNT1ZFRF9XQVRDSF97MH1cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiezB9XCIsIGA8c3BhbiBjbGFzcz1cIml0ZW1uYW1lXCI+JHtyZXZlcnNlZERlc2N9PC9zcGFuPmApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJVTldBVENIRURcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiQ0hBTkdFRF97MH1cIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcInswfVwiLCBgPHNwYW4gY2xhc3M9XCJpdGVtbmFtZVwiPiR7dGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKGguaXRlbVR5cGUudG9VcHBlckNhc2UoKSl9PC9zcGFuPmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgbG9hZEZpbGVzKGRhdGE6IENhc2VGaWxlW10pIHtcclxuICAgICAgICB0aGlzLkZpbGVzID0gZGF0YS5tYXA8RmlsZUl0ZW0+KGkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGkuaWQsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaS5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKGkuY3JlYXRlZE9uKSxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRCeTogaS5jcmVhdGVkQnlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGVkaXRXYXRjaGxpc3QoKSB7XHJcbiAgICAgICAgbGV0IG9wdGlvbnM6IG5nLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVVcmw6ICcvdmlld3MvbWFuYWdlLndhdGNobGlzdC5odG1sJyxcclxuICAgICAgICAgICAgY29udHJvbGxlcjogTWFuYWdlV2F0Y2hlcnMsXHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXJBczogJyRjdHJsJyxcclxuICAgICAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogKCkgPT4gdGhpcyxcclxuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uOiAoKSA9PiB0aGlzLmFwcGxpY2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlV2F0Y2g6ICgpID0+IHRoaXMuZW5hYmxlV2F0Y2ggJiYgIXRoaXMucmVhZE9ubHksXHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ2FzZTogKCkgPT4gKCkgPT4gdGhpcy5TZXJ2aWNlQ2FzZSxcclxuICAgICAgICAgICAgICAgIHJlbG9hZDogKCkgPT4gKCkgPT4gdGhpcy5SZWxvYWRTZXJ2aWNlQ2FzZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBtID0gdGhpcy4kbW9kYWwub3BlbihvcHRpb25zKTtcclxuICAgICAgICAgICAgbGV0IHggPSBhd2FpdCBtLnJlc3VsdFxyXG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBkZXNjcmlwdGlvbkNoYW5nZWQoc291cmNlOiBSaWNodGV4dEVkaXRvciwgdmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2UuZGVzY3JpcHRpb24gPSB2YWx1ZTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuVXBkYXRlQ2FzZTxUPih0aGlzLlNlcnZpY2VDYXNlLmlkLCB0aGlzLlNlcnZpY2VDYXNlKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5SZWxvYWRTZXJ2aWNlQ2FzZSgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdTZXJ2aWNlQ2FzZUVkaXQnLCAnRXJyb3Igc2F2aW5nIGRlc2NyaXB0aW9uJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdFRElUX0RFU0NSSVBUSU9OX0NBU0VfRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgcmVmZXJlbmNlQ2hhbmdlZCh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2UuY3VzdG9tZXJSZWZlcmVuY2UgPSB2YWw7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLlVwZGF0ZUNhc2U8VD4odGhpcy5TZXJ2aWNlQ2FzZS5pZCwgdGhpcy5TZXJ2aWNlQ2FzZSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuUmVsb2FkU2VydmljZUNhc2UoKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoU2VydmljZVV0aWxzLklzVW5hdXRob3JpemVkUmVzcG9uc2UoZXJyb3IpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignU2VydmljZUNhc2VFZGl0JywgJ0Vycm9yIHNhdmluZyByZWZlcmVuY2UnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nTWFuYWdlci5zaG93RXJyb3JEaWFsb2coJ2Vycm9yJywgJ0VSUk9SJywgJ0VESVRfUkVGRVJFTkNFX0NBU0VfRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlc2NyaXB0aW9uRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRlc2NyaXB0aW9uRWRpdGFibGVDaGFuZ2VkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbkVkaXRpbmcgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNldERpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb252ZXJzYXRpb25IYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvbnZlcnNhdGlvblZhbHVlQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25IYXNWYWx1ZSA9ICEhdmFsdWUudHJpbSgpO1xyXG4gICAgICAgIHRoaXMuc2V0RGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0RGlydHkoKSB7XHJcbiAgICAgICAgdGhpcy5CYXNlLmlzRGlydHkgPSB0aGlzLmRlc2NyaXB0aW9uRWRpdGluZyB8fCB0aGlzLmNvbnZlcnNhdGlvbkhhc1ZhbHVlIHx8IHRoaXMuX3Byb3BlcnRpZXNUYWJEaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJHJvdXRlckNhbkRlYWN0aXZhdGUobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZURpYWxvZy5TYXZlKCkudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IHJlc3VsdCA9PT0gU2F2ZURpYWxvZy5EaXNjYXJkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoMjUpLmZpbmFsbHkoKCkgPT4gcmVzb2x2ZShyZXMpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7IHJldHVybiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIEFkZE5ld0F0dGFjaG1lbnQoZmlsZTogQ2FzZUZpbGVEYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWRkRmlsZSh0aGlzLlNlcnZpY2VDYXNlLmZpbGVzLCBmaWxlKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdGaWxlVG9vbHRleHQgPSB0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJGSUxFX3swfV9BRERFRFwiKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXCJ7MH1cIiwgZmlsZS5maWxlbmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMubmV3RmlsZVRvb2x0aXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWyxcclxuICAgICAgICAgICAgICAgIHRoaXMuR2V0RmlsZXMoKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuR2V0SGlzdG9yeUFuZENvcnJlc3BvbmRlbmNlKCldKTtcclxuICAgICAgICAgICAgdmFyIGVsYXBzZWRUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcclxuICAgICAgICAgICAgaWYgKGVsYXBzZWRUaW1lID4gNTAwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWxlVG9vbHRpcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWxlVG9vbHRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWxlVG9vbHRpcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsZVRvb2x0ZXh0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH0sIDUwMDAgLSBlbGFwc2VkVGltZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdTZXJ2aWNlQ2FzZUVkaXQnLCAnRXJyb3IgYWRkaW5nIGZpbGUnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nTWFuYWdlci5zaG93RXJyb3JEaWFsb2coJ2Vycm9yJywgJ0VSUk9SJywgJ0FERF9BVFRBQ0hNRU5UX0NBU0VfRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgU2VydmljZUNhc2UoKTogVCB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLkJhc2UpID8gdGhpcy5CYXNlLkRhdGEgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldCBTZXJ2aWNlQ2FzZShkYXRhOiBUKSB7XHJcbiAgICAgICAgdGhpcy5CYXNlLkRhdGEgPSBkYXRhO1xyXG4gICAgICAgIGlmIChkYXRhLmN1c3RvbWVyUmVmZXJlbmNlID09PSBcIiBcIikgZGF0YS5jdXN0b21lclJlZmVyZW5jZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBBZGRGZWVkYmFjayhmZWVkYmFjazogc3RyaW5nLCBzdGF0dXM6IEZlZWRiYWNrU3RhdHVzTGluaykge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5Q2hhdClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgdXNlciA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24udXNlcjtcclxuICAgICAgICAgICAgYXdhaXQgc3RhdHVzLmFjdChmZWVkYmFjayA/IHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGZlZWRiYWNrLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZE9uOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQnk6ICcnLFxyXG4gICAgICAgICAgICAgICAgYnlTdXBwb3J0RW1wbG95ZWU6IHVzZXIuaXNGaXFhc0VtcGxveWVlXHJcbiAgICAgICAgICAgIH0gOiBudWxsKTtcclxuICAgICAgICAgICAgdGhpcy5hanVzdER5bmFtaWNIVE1MTGF5b3V0KDApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGNoYW5nZWQgPSAwO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fdGltZXIgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQuY2FuY2VsKHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB0aGlzLiR0aW1lb3V0KCgpID0+IHsgdGhpcy5jaGVja0VkaXRzKCk7IH0sIDUwMCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5zZXRTZXFVcmwoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlcnZpY2VDYXNlRWRpdCcsICdFcnJvciBhZGRpbmcgZmVlZGJhY2snLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nTWFuYWdlci5zaG93RXJyb3JEaWFsb2coJ2Vycm9yJywgJ0VSUk9SJywgJ0FERF9GRUVEQkFDS19DQVNFX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBBZGRDb3JyZXNwb25kZW5jZShlbnRyeTogc3RyaW5nLCByZWxvYWQgPSB0cnVlLCBpbnRlcm5hbCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHlDaGF0KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpbnRlcm5hbCAmJiAhdGhpcy5hbGxvd0V4dGVybmFsKVxyXG4gICAgICAgICAgICBpbnRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd0ludGVybmFsID0gdGhpcy5zaG93SW50ZXJuYWwgfHwgaW50ZXJuYWw7XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCB1c2VyID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi51c2VyO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5BZGRDb3JyZXNwb25kZW5jZSh0aGlzLlNlcnZpY2VDYXNlLmNvcnJlc3BvbmRlbmNlLCB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiBlbnRyeSxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEJ5OiAnJyxcclxuICAgICAgICAgICAgICAgIGJ5U3VwcG9ydEVtcGxveWVlOiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiU0RcIl0pLFxyXG4gICAgICAgICAgICAgICAgYnlJbnRlcm5hbEN1c3RvbWVyOiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmxvd1JvbGUgPT09IFwiQ1VTVFwiICYmIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuaGlnaFJvbGUgPT09IFwiRlFTXCIsXHJcbiAgICAgICAgICAgICAgICBieUN1c3RvbWVyOiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmxvd1JvbGUgPT09IFwiQ1VTVFwiICYmIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuaGlnaFJvbGUgPT09IFwiQ1VTVFwiLFxyXG4gICAgICAgICAgICAgICAgY29ycmVzcG9uZGVuY2VUeXBlOiBpbnRlcm5hbCA/ICdpbnRlcm5hbCcgOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWp1c3REeW5hbWljSFRNTExheW91dCgwKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLndhdGNoZWQpXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChyZWxvYWQpXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLkdldEhpc3RvcnlBbmRDb3JyZXNwb25kZW5jZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RjaGFuZ2VkID0gMDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVyICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0LmNhbmNlbCh0aGlzLl90aW1lcik7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gdGhpcy4kdGltZW91dCgoKSA9PiB7IHRoaXMuY2hlY2tFZGl0cygpOyB9LCA1MDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdTZXJ2aWNlQ2FzZUVkaXQnLCAnRXJyb3IgYWRkaW5nIGNvcnJlc3BvbmRlbmNlJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdBRERfQ09SUkVTUE9OREVOQ0VfQ0FTRV9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZpbGVDbGljayhmaWxlOiBGaWxlSXRlbSkge1xyXG4gICAgICAgIC8vIERpc3BsYXkgdGhlIGZpbGUgb3IgYWxsb3cgZG93bmxvYWQuIEdldCBpdCBmcm9tIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIuXHJcbiAgICAgICAgdGhpcy5maWxlU2VydmljZS5HZXRGaWxlKGZpbGUuaWQpLnRoZW4oKGZpbGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVTZXJ2aWNlLkZpbGVTYXZlQXMoZmlsZSk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBvbkZpbGVEZWxldGUoZmlsZTogRmlsZUl0ZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuRGVsZXRlRmlsZShmaWxlLmlkKTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5HZXRGaWxlcygpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5HZXRIaXN0b3J5QW5kQ29ycmVzcG9uZGVuY2UoKV0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdTZXJ2aWNlQ2FzZUVkaXQnLCAnRXJyb3IgZGVsZXRpbmcgZmlsZScsIGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dNYW5hZ2VyLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnREVMRVRFX0FUVEFDSE1FTlRfQ0FTRV9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVTdGF0dXMoc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcyB8fCAhdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5zdGF0dXNMaW5rcyB8fCAhdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5zdGF0dXNMaW5rc1tzdGF0dXNdKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBvcHRpb25zOiBuZy51aS5ib290c3RyYXAuSU1vZGFsU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICAgIGFuaW1hdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAnaGFuZGxlX3N0YXR1c19jaGFuZ2UuaHRtbCcsXHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IENoYW5nZVN0YXR1c0NvbXBvbmVudCxcclxuICAgICAgICAgICAgY29udHJvbGxlckFzOiAnJG1vZGFsJyxcclxuICAgICAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogKCkgPT4gdGhpc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3B1cFRpdGxlID0gJ1BPUFVQXycgKyBzdGF0dXMudG9VcHBlckNhc2UoKSArICdfVElUTEUnO1xyXG4gICAgICAgIHRoaXMucG9wdXBUZXh0MSA9ICdQT1BVUF8nICsgc3RhdHVzLnRvVXBwZXJDYXNlKCkgKyAnX1RFWFQxJztcclxuICAgICAgICB0aGlzLnBvcHVwVGV4dDIgPSAnUE9QVVBfJyArIHN0YXR1cy50b1VwcGVyQ2FzZSgpICsgJ19URVhUMic7XHJcbiAgICAgICAgdGhpcy5wb3B1cFRleHQzID0gJ1BPUFVQXycgKyBzdGF0dXMudG9VcHBlckNhc2UoKSArICdfVEVYVDMnO1xyXG4gICAgICAgIHRoaXMucG9wdXBFZGl0SGludCA9ICdQT1BVUF8nICsgc3RhdHVzLnRvVXBwZXJDYXNlKCkgKyAnX0VESVRISU5UJztcclxuXHJcbiAgICAgICAgaWYgKFsnY2xvc2VkJywgJ2NhbmNlbGxlZCcsICdyZXdvcmsnLCAnYWNjZXB0ZWQnXS5maWx0ZXIoeCA9PiB4ID09PSBzdGF0dXMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBcInJld29ya1wiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZURpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG0gPSB0aGlzLiRtb2RhbC5vcGVuKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHggPSBhd2FpdCBtLnJlc3VsdFxyXG4gICAgICAgICAgICAgICAgaWYgKHggPT09ICd5ZXMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmluYWxTdGF0dXNSZW1hcmsgJiYgdGhpcy5maW5hbFN0YXR1c1JlbWFyay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuQWRkQ29ycmVzcG9uZGVuY2UodGhpcy5maW5hbFN0YXR1c1JlbWFyaywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5zdGF0dXNMaW5rc1tzdGF0dXNdLmFjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5SZWxvYWRTZXJ2aWNlQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5zZXRTZXFVcmwoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdTZXJ2aWNlQ2FzZUVkaXQnLCAnRXJyb3IgdXBkYXRpbmcgc3RhdHVzJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dNYW5hZ2VyLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnRURJVF9TVEFUVVNfQ0FTRV9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmFsU3RhdHVzUmVtYXJrID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLlNlcnZpY2VDYXNlLmFjdGlvbkxpbmtzLnN0YXR1c0xpbmtzW3N0YXR1c10uYWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlcnZpY2VDYXNlRWRpdCcsICdFcnJvciB1cGRhdGluZyBzdGF0dXMnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdFRElUX1NUQVRVU19DQVNFX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluYWxTdGF0dXNSZW1hcmsgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7IH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluayA9IHRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3Muc3RhdHVzTGlua3Nbc3RhdHVzXTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGxpbmsuYWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoU2VydmljZVV0aWxzLklzVW5hdXRob3JpemVkUmVzcG9uc2UoZXJyb3IpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignU2VydmljZUNhc2VFZGl0JywgJ0Vycm9yIHVwZGF0aW5nIHN0YXR1cycsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nTWFuYWdlci5zaG93RXJyb3JEaWFsb2coJ2Vycm9yJywgJ0VSUk9SJywgJ0VESVRfU1RBVFVTX0NBU0VfRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maW5hbFN0YXR1c1JlbWFyayA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZmluYWxTdGF0dXNSZW1hcms6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgZ2V0IGZpbmFsU3RhdHVzUmVtYXJrKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maW5hbFN0YXR1c1JlbWFyaztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgZmluYWxTdGF0dXNSZW1hcmsodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9maW5hbFN0YXR1c1JlbWFyayA9IHZhbDtcclxuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZURpc2FibGVkID0gdGhpcy5jb21tZW50UmVxdWlyZWQgJiYgKHZhbCA9PSB1bmRlZmluZWQgfHwgdmFsLmxlbmd0aCA9PSAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcG9wdXBUaXRsZTogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIHBvcHVwVGV4dDE6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBwb3B1cFRleHQyOiBzdHJpbmc7XHJcbiAgICBwcm90ZWN0ZWQgcG9wdXBUZXh0Mzogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIHBvcHVwRWRpdEhpbnQ6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBjb21tZW50UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBzdGF0dXNDaGFuZ2VEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICBwdWJsaWMgY29weUNhc2VJZFRvQ2xpcGJvcmQoKSB7XHJcbiAgICAgICAgLy8gU2VsZWN0IHRoZSBlbWFpbCBsaW5rIGFuY2hvciB0ZXh0XHJcbiAgICAgICAgdmFyIHNlbGVjdEVsZW1lbnQgPSB0aGlzLiRlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nhc2UtbnVtYmVyJykuaXRlbSgwKTtcclxuXHJcbiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICByYW5nZS5zZWxlY3ROb2RlKHNlbGVjdEVsZW1lbnQpO1xyXG4gICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlU3RhdHVzQ29tcG9uZW50PFQgZXh0ZW5kcyBTZXJ2aWNlQ2FzZT4ge1xyXG4gICAgc3RhdGljIGNvbnRyb2xsZXJJZCA9ICdDaGFuZ2VTdGF0dXNDb21wb25lbnQnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbEluc3RhbmNlJykgcHJpdmF0ZSAkbW9kYWxJbnN0YW5jZTogYW5ndWxhci51aS5ib290c3RyYXAuSU1vZGFsU2VydmljZUluc3RhbmNlLFxyXG4gICAgICAgIEBJbmplY3QoJ3BhZ2UnKSBwdWJsaWMgcGFnZTogU2VydmljZUNhc2VFZGl0PFQ+XHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgWWVzKCkge1xyXG4gICAgICAgIHRoaXMuJG1vZGFsSW5zdGFuY2UuY2xvc2UoJ3llcycpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBObygpIHtcclxuICAgICAgICB0aGlzLiRtb2RhbEluc3RhbmNlLmNsb3NlKCdubycpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtYXJrQ2hhbmdlZCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnBhZ2UuZmluYWxTdGF0dXNSZW1hcmsgPSB0ZXh0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlQ29ycmVzcG9uZGVuY2VUeXBlQ29tcG9uZW50IHtcclxuICAgIHN0YXRpYyBjb250cm9sbGVySWQgPSAnQ2hhbmdlQ29ycmVzcG9uZGVuY2VUeXBlQ29tcG9uZW50JztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdWliTW9kYWxJbnN0YW5jZScpIHByaXZhdGUgJG1vZGFsSW5zdGFuY2U6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2VJbnN0YW5jZSxcclxuICAgICAgICBASW5qZWN0KCdpdGVtJykgcHVibGljIGl0ZW06IHsgdHlwZTogQ29ycmVzcG9uZGVuY2VUeXBlLCB0ZXh0OiBzdHJpbmcsIHBlcnNvbjogc3RyaW5nLCB0aW1lc3RhbXA6IElTT0RhdGVUaW1lU3RyaW5nIH1cclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlID0gaXRlbS50eXBlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGluaXRpYWxWYWx1ZTogQ29ycmVzcG9uZGVuY2VUeXBlO1xyXG5cclxuICAgIHB1YmxpYyBZZXMoKSB7XHJcbiAgICAgICAgdGhpcy4kbW9kYWxJbnN0YW5jZS5jbG9zZSgneWVzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIE5vKCkge1xyXG4gICAgICAgIHRoaXMuJG1vZGFsSW5zdGFuY2UuY2xvc2UoJ25vJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbnZhbHVlY2hhbmdlZChncm91cDogc3RyaW5nLCB2YWx1ZTogQ29ycmVzcG9uZGVuY2VUeXBlLCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLml0ZW0udHlwZSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uZmlybURlYWRsaW5lQ29tcG9uZW50PFQgZXh0ZW5kcyBTZXJ2aWNlQ2FzZT4ge1xyXG4gICAgc3RhdGljIGNvbnRyb2xsZXJJZCA9ICdDb25maXJtRGVhZGxpbmVDb21wb25lbnQnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbEluc3RhbmNlJykgcHJpdmF0ZSAkbW9kYWxJbnN0YW5jZTogYW5ndWxhci51aS5ib290c3RyYXAuSU1vZGFsU2VydmljZUluc3RhbmNlLFxyXG4gICAgICAgIEBJbmplY3QoJ3BhZ2UnKSBwdWJsaWMgcGFnZTogU2VydmljZUNhc2VFZGl0PFQ+XHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgWWVzKCkge1xyXG4gICAgICAgIHRoaXMuJG1vZGFsSW5zdGFuY2UuY2xvc2UoJ3llcycpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBObygpIHtcclxuICAgICAgICB0aGlzLiRtb2RhbEluc3RhbmNlLmNsb3NlKCdubycpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtYXJrQ2hhbmdlZCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnBhZ2UuZGVhZGxpbmVSZW1hcmsgPSB0ZXh0O1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCBcIkBmaXFhcy91dGlsc1wiO1xyXG5pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEF0dHJpYnV0ZSwgSW5wdXQsIE91dHB1dCwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCJcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgVGFibGVDZWxsLCBUYWJsZVJvdywgVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vLi4vY29udHJvbHMvZGF0YXRhYmxlXCJcclxuaW1wb3J0IHtcclxuICAgIENvbXBhY3RTZXJ2aWNlQ2FzZSwgQ29tcGFjdFJlY2VudFNlcnZpY2VDYXNlLCBTZXJ2aWNlQ2FzZVJlZiwgRmVlZGJhY2tTdGF0dXMsXHJcbiAgICBDb21wYWN0U2VhcmNoU2VydmljZUNhc2VcclxufSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCJcclxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9nZW5lcmFsXCJcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiXHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXNzaW9uXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBDdXN0b21lciB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY3VzdG9tZXJcIjtcclxuaW1wb3J0IHsgUGVyc29uIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wZXJzb25cIjtcclxuaW1wb3J0IHsgSVByb21pc2UgfSBmcm9tIFwiYW5ndWxhclwiO1xyXG5pbXBvcnQgeyBJUmVzb3VyY2UsIElSZXNvdXJjZVJlc29sdmVyIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvaUZxc1wiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAnc2VydmljZWNhc2V0YWJsZScsXHJcbiAgICB0ZW1wbGF0ZTogYDxkYXRhdGFibGUgZmlsbGFjdGlvbi10ZXh0PVwiJGN0cmwuZmlsbGFjdGlvblRleHRcIiBmaWxsYWN0aW9uPVwiJGN0cmwuZmlsbGFjdGlvblBhc3MoKVwiIHN0b3JlaWQ9XCIkY3RybC5zdG9yZWlkXCIgc29ydGNvbHVtbj1cIiRjdHJsLnNvcnRjb2x1bW5cIiBub3Jlc3VsdC10ZXh0PVwiJGN0cmwubm9yZXN1bHRUZXh0XCJcclxuICAgICAgICAgICAgICAgIHNvcnRkZXNjZW5kaW5nPVwiJGN0cmwuc29ydGRlc2NlbmRpbmdcIiBjbGFzcz1cInNlcnZpY2VjYXNldGFibGUge3skY3RybC5Nb2RlfX1cIiBjb2x1bW5zPVwiJGN0cmwuQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkYXRhPVwiJGN0cmwuUm93c1wiIG9ucm93Y2xpY2tlZD1cIiRjdHJsLm9uUm93Q2xpY2socm93aWQsIGN0cmxrZXkpXCIgc2hvd3RleHRub3Jlc3VsdHM9XCIkY3RybC5zaG93dGV4dG5vcmVzdWx0c1wiXHJcbiAgICAgICAgICAgICAgICBvbnNvcnRkYXRhPVwiJGN0cmwuT25Tb3J0RGF0YShjb2x1bW4sZGVzY2VuZGluZylcIiBvbmRhdGFyZXNpemU9XCIkY3RybC5vbmRhdGFyZXNpemUoY291bnQpXCI+PC9kYXRhdGFibGU+YCxcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBcImFwcGxpY2F0aW9uXCI6IFwiXmFwcGxpY2F0aW9uXCJcclxuICAgIH1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQ2FzZVRhYmxlIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uO1xyXG4gICAgcHJpdmF0ZSBfc2VydmljZWNhc2VzOiBDb21wYWN0U2VydmljZUNhc2VbXTtcclxuICAgIHByaXZhdGUgX3Nob3doZWFkZXJzOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgY29sdW1uU29ydEZ1bmN0aW9uczogeyAoeDogQ29tcGFjdFNlcnZpY2VDYXNlLCB5OiBDb21wYWN0U2VydmljZUNhc2UpOiBudW1iZXI7IH1bXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckd2luZG93JykgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckZmlsdGVyJykgcHJpdmF0ZSAkZmlsdGVyOiBuZy5JRmlsdGVyU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBzZXNzaW9uU2VydmljZTogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290Um91dGVyJykgcHJpdmF0ZSAkcm9vdFJvdXRlcjogbmcuUm91dGVyLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc2VydmljZWNhc2VzKCk6IENvbXBhY3RTZXJ2aWNlQ2FzZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VydmljZWNhc2VzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHNlcnZpY2VjYXNlcyhzZXJ2aWNlY2FzZXM6IENvbXBhY3RTZXJ2aWNlQ2FzZVtdKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZWNhc2VzID0gc2VydmljZWNhc2VzO1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIHNlcnZpY2VjYXNlcykge1xyXG4gICAgICAgICAgICB0aGlzLlNvcnQodGhpcy5zb3J0Y29sdW1uLCB0aGlzLnNvcnRkZXNjZW5kaW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHBob25lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY29sbGFwc2VkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dlbXB0eXJvdzogYm9vbGVhbjtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgcmVjZW50bGF5b3V0OiBib29sZWFuO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyByZWZlcmVyOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc3RvcmVpZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIHN0b3JlZGF0YTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzdG9yZWdsb2JhbGlkOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd3RleHRub3Jlc3VsdHM6IGJvb2xlYW47XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIG5vcmVzdWx0VGV4dDogc3RyaW5nO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBmaWxsYWN0aW9uVGV4dDogc3RyaW5nO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBmaWxsYWN0aW9uOiAoYXJnczoge30pID0+IHZvaWQ7XHJcbiAgICBwcml2YXRlIGZpbGxhY3Rpb25QYXNzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGxhY3Rpb24gJiYgdGhpcy5maWxsYWN0aW9uVGV4dCkgdGhpcy5maWxsYWN0aW9uKHt9KTtcclxuICAgIH1cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25SZXN1bHRDb3VudENoYW5nZWQ6IChhcmdzOiB7IHJlc3VsdGNvdW50OiBudW1iZXIgfSkgPT4gdm9pZDtcclxuXHJcbiAgICBwcml2YXRlIF9zb3J0Y29sdW1uOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBnZXQgc29ydGNvbHVtbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0Y29sdW1uO1xyXG4gICAgfVxyXG4gICAgc2V0IHNvcnRjb2x1bW4odmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zb3J0Y29sdW1uID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2RlZmF1bHRzb3J0Y29sdW1uOiBzdHJpbmc7XHJcbiAgICBAQXR0cmlidXRlKCkgZ2V0IGRlZmF1bHRzb3J0Y29sdW1uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRzb3J0Y29sdW1uO1xyXG4gICAgfVxyXG4gICAgc2V0IGRlZmF1bHRzb3J0Y29sdW1uKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdHNvcnRjb2x1bW4gPSB2YWw7XHJcbiAgICAgICAgaWYgKHRoaXMuc29ydGRlc2NlbmRpbmcgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy5zb3J0Y29sdW1uID0gdmFsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfZm9yY2VNdWx0aTogYm9vbGVhbjtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IGZvcmNlTXVsdGkoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZm9yY2VNdWx0aTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgZm9yY2VNdWx0aSh2YWw6IHN0cmluZyB8IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9mb3JjZU11bHRpID0gdmFsID09PSAndHJ1ZScgfHwgdmFsID09PSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NvcnRkZXNjZW5kaW5nOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgZ2V0IHNvcnRkZXNjZW5kaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0ZGVzY2VuZGluZ1xyXG4gICAgfVxyXG4gICAgc2V0IHNvcnRkZXNjZW5kaW5nKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3NvcnRkZXNjZW5kaW5nID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2RlZmF1bHRzb3J0ZGVzY2VuZGluZzogYm9vbGVhbjtcclxuICAgIEBBdHRyaWJ1dGUoKSBnZXQgZGVmYXVsdHNvcnRkZXNjZW5kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0c29ydGRlc2NlbmRpbmdcclxuICAgIH1cclxuICAgIHNldCBkZWZhdWx0c29ydGRlc2NlbmRpbmcodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdHNvcnRkZXNjZW5kaW5nID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PSBcInRydWVcIjtcclxuICAgICAgICBpZiAodGhpcy5zb3J0ZGVzY2VuZGluZyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aGlzLnNvcnRkZXNjZW5kaW5nID0gdGhpcy5fZGVmYXVsdHNvcnRkZXNjZW5kaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IHNob3doZWFkZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93aGVhZGVycztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd2hlYWRlcnMoc2hvdzogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBvID0gdGhpcy5fc2hvd2hlYWRlcnM7XHJcbiAgICAgICAgdGhpcy5fc2hvd2hlYWRlcnMgPSBzaG93O1xyXG4gICAgICAgIGlmIChvICE9IHNob3cgJiYgdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLk1ha2VIZWFkZXJzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgUm93czogVGFibGVSb3dbXTtcclxuICAgIHByaXZhdGUgQ29sdW1uczogVGFibGVDb2x1bW5bXTtcclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkU29ydExpc3QoKSB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5Tb3J0RnVuY3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5jb2x1bW5Tb3J0RnVuY3Rpb25zLnB1c2goKHgsIHkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHgudHlwZSA+IHkudHlwZSA/IDEgOiB4LnR5cGUgPT0geS50eXBlID8geC5zZXZlcml0eSA+IHkuc2V2ZXJpdHkgPyAxIDogLTEgOiAtMTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbHVtblNvcnRGdW5jdGlvbnMucHVzaCgoeCwgeSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geC5wcmlvcml0eSA+IHkucHJpb3JpdHkgPyAxIDogLTE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5Tb3J0RnVuY3Rpb25zLnB1c2goKHgsIHkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHguYWN0aW9uUmVxdWlyZWQgPiB5LmFjdGlvblJlcXVpcmVkID8gMSA6IC0xO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29sdW1uU29ydEZ1bmN0aW9ucy5wdXNoKCh4LCB5KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoeC5mZWVkYmFja1N0YXR1cyA9PSBcInJlcXVlc3RlZFwiKSA+ICh5LmZlZWRiYWNrU3RhdHVzID09IFwicmVxdWVzdGVkXCIpID8gMSA6IC0xO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29sdW1uU29ydEZ1bmN0aW9ucy5wdXNoKCh4LCB5KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAreC5jYXNlTnVtYmVyID4gK3kuY2FzZU51bWJlciA/IDEgOiAtMTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbHVtblNvcnRGdW5jdGlvbnMucHVzaCgoeCwgeSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gK3gucGFyZW50Q2FzZU51bWJlciA+ICt5LnBhcmVudENhc2VOdW1iZXIgPyAxIDogLTE7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5Tb3J0RnVuY3Rpb25zLnB1c2goKHgsIHkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHguY3VzdG9tZXJEZXNjLnRvTG93ZXJDYXNlKCkgPiB5LmN1c3RvbWVyRGVzYy50b0xvd2VyQ2FzZSgpID8gMSA6IC0xO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29sdW1uU29ydEZ1bmN0aW9ucy5wdXNoKCh4LCB5KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoeC5zdGF0dXMpID4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKHkuc3RhdHVzKSA/IDEgOiAtMTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbHVtblNvcnRGdW5jdGlvbnMucHVzaCgoeCwgeSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geC50aXRsZS50b0xvd2VyQ2FzZSgpID4geS50aXRsZS50b0xvd2VyQ2FzZSgpID8gMSA6IC0xO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29sdW1uU29ydEZ1bmN0aW9ucy5wdXNoKCh4LCB5KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB4LmNyZWF0ZWRCeS50b0xvd2VyQ2FzZSgpID4geS5jcmVhdGVkQnkudG9Mb3dlckNhc2UoKSA/IDEgOiAtMTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5yZWNlbnRsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5Tb3J0RnVuY3Rpb25zLnB1c2goKHg6IENvbXBhY3RSZWNlbnRTZXJ2aWNlQ2FzZSwgeTogQ29tcGFjdFJlY2VudFNlcnZpY2VDYXNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeC5sYXN0T3BlbmVkKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh5Lmxhc3RPcGVuZWQpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5yZWNlbnRsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5Tb3J0RnVuY3Rpb25zLnB1c2goKHg6IENvbXBhY3RTZWFyY2hTZXJ2aWNlQ2FzZSwgeTogQ29tcGFjdFNlYXJjaFNlcnZpY2VDYXNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeC5tb2RpZmllZE9uKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh5Lm1vZGlmaWVkT24pLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29sdW1uU29ydEZ1bmN0aW9ucy5wdXNoKCh4OiBDb21wYWN0UmVjZW50U2VydmljZUNhc2UsIHk6IENvbXBhY3RSZWNlbnRTZXJ2aWNlQ2FzZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKERhdGUucGFyc2VPck51bGwoeS5yZXF1ZXN0ZWREZWFkbGluZSkgPT0gbnVsbCkgPyAtMSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChEYXRlLnBhcnNlT3JOdWxsKHgucmVxdWVzdGVkRGVhZGxpbmUpID09IG51bGwpID8gMSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlLmNvbXBhcmUoRGF0ZS5wYXJzZU9yTnVsbCh4LnJlcXVlc3RlZERlYWRsaW5lKSwgRGF0ZS5wYXJzZU9yTnVsbCh5LnJlcXVlc3RlZERlYWRsaW5lKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbHVtblNvcnRGdW5jdGlvbnMucHVzaCgoeDogQ29tcGFjdFJlY2VudFNlcnZpY2VDYXNlLCB5OiBDb21wYWN0UmVjZW50U2VydmljZUNhc2UpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIChEYXRlLnBhcnNlT3JOdWxsKHkucmVtZW1iZXJNZURhdGUpID09IG51bGwpID8gLTEgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoRGF0ZS5wYXJzZU9yTnVsbCh4LnJlbWVtYmVyTWVEYXRlKSA9PSBudWxsKSA/IDEgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZS5jb21wYXJlKERhdGUucGFyc2VPck51bGwoeC5yZW1lbWJlck1lRGF0ZSksIERhdGUucGFyc2VPck51bGwoeS5yZW1lbWJlck1lRGF0ZSkpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgZGlzcG9zYWJsZXM6IElEaXNwb3NhYmxlW10gPSBbXTtcclxuXHJcbiAgICAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuTWFrZUhlYWRlcnMoKTtcclxuICAgICAgICBpZiAodGhpcy5zdG9yZWlkKSB7XHJcbiAgICAgICAgICAgIGxldCBzb3J0Y29sdW1uID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0VmFsdWU8c3RyaW5nPihcImRhdGF0YWJsZS5cIiArIHRoaXMuc3RvcmVpZCArIFwiLnNvcnRjb2x1bW5cIik7XHJcbiAgICAgICAgICAgIGxldCBzb3J0ZGVzY2VuZGluZyA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldFZhbHVlPGJvb2xlYW4+KFwiZGF0YXRhYmxlLlwiICsgdGhpcy5zdG9yZWlkICsgXCIuc29ydGRlc2NlbmRpbmdcIik7XHJcbiAgICAgICAgICAgIGxldCBDb2x1bW5zID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0VmFsdWU8VGFibGVDb2x1bW5bXT4oXCJkYXRhdGFibGUuXCIgKyB0aGlzLnN0b3JlaWQgKyBcIi5jb2x1bW5zXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvcnRjb2x1bW4gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHNvcnRjb2x1bW4gPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFZhbHVlPHN0cmluZz4oXCJkYXRhdGFibGUuXCIgKyB0aGlzLnN0b3JlaWQgKyBcIi5zb3J0Y29sdW1uXCIpO1xyXG4gICAgICAgICAgICBpZiAoc29ydGRlc2NlbmRpbmcgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHNvcnRkZXNjZW5kaW5nID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRWYWx1ZTxib29sZWFuPihcImRhdGF0YWJsZS5cIiArIHRoaXMuc3RvcmVpZCArIFwiLnNvcnRkZXNjZW5kaW5nXCIpO1xyXG4gICAgICAgICAgICBpZiAoQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgQ29sdW1ucyA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0VmFsdWU8VGFibGVDb2x1bW5bXT4oXCJkYXRhdGFibGUuXCIgKyB0aGlzLnN0b3JlaWQgKyBcIi5jb2x1bW5zXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvcnRjb2x1bW4gIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHRoaXMuc29ydGNvbHVtbiA9IHNvcnRjb2x1bW47XHJcbiAgICAgICAgICAgIGlmIChzb3J0ZGVzY2VuZGluZyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0ZGVzY2VuZGluZyA9IHNvcnRkZXNjZW5kaW5nO1xyXG4gICAgICAgICAgICBpZiAoQ29sdW1ucyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5Db2x1bW5zID0gQ29sdW1ucztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0b3JlZGF0YSAmJiAoIXRoaXMuc2VydmljZWNhc2VzIHx8IHRoaXMuc2VydmljZWNhc2VzLmxlbmd0aCA9PSAwKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZWNhc2VzID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0VmFsdWU8Q29tcGFjdFNlcnZpY2VDYXNlW10+KFwiZGF0YXRhYmxlLlwiICsgdGhpcy5zdG9yZWlkICsgXCIuZGF0YVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZWNhc2VzICYmIHRoaXMuc2VydmljZWNhc2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMuU29ydCh0aGlzLnNvcnRjb2x1bW4sIHRoaXMuc29ydGRlc2NlbmRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgICRvbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RvcmVpZCAmJiB0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldFZhbHVlKFwiZGF0YXRhYmxlLlwiICsgdGhpcy5zdG9yZWlkICsgXCIuc29ydGNvbHVtblwiLCB0aGlzLnNvcnRjb2x1bW4pO1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlU2VydmljZS5zZXRWYWx1ZShcImRhdGF0YWJsZS5cIiArIHRoaXMuc3RvcmVpZCArIFwiLnNvcnRkZXNjZW5kaW5nXCIsIHRoaXMuc29ydGRlc2NlbmRpbmcpO1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlU2VydmljZS5zZXRWYWx1ZShcImRhdGF0YWJsZS5cIiArIHRoaXMuc3RvcmVpZCArIFwiLmNvbHVtbnNcIiwgdGhpcy5Db2x1bW5zKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RvcmVkYXRhKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0VmFsdWUoXCJkYXRhdGFibGUuXCIgKyB0aGlzLnN0b3JlaWQgKyBcIi5kYXRhXCIsIHRoaXMuc2VydmljZWNhc2VzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0VmFsdWUoXCJkYXRhdGFibGUuXCIgKyB0aGlzLnN0b3JlaWQgKyBcIi5zb3J0Y29sdW1uXCIsIHRoaXMuc29ydGNvbHVtbiwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRWYWx1ZShcImRhdGF0YWJsZS5cIiArIHRoaXMuc3RvcmVpZCArIFwiLnNvcnRkZXNjZW5kaW5nXCIsIHRoaXMuc29ydGRlc2NlbmRpbmcsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0VmFsdWUoXCJkYXRhdGFibGUuXCIgKyB0aGlzLnN0b3JlaWQgKyBcIi5jb2x1bW5zXCIsIHRoaXMuQ29sdW1ucywgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICAgICAgICB0cnkgeyBkKCkgfSBjYXRjaCAoZSkgeyB0aGlzLmxvZ1NlcnZpY2Uud2FybmluZygnU2VydmljZUNhc2VUYWJsZScsICdFcnJvciBkaXNwb3NpbmcnLCBlKTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblJvd0NsaWNrKHJvd2lkOiBhbnksIHdpdGhDdHJsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RvcmVnbG9iYWxpZCkge1xyXG4gICAgICAgICAgICBsZXQgY2FzZWRhdGEgPSB0aGlzLlJvd3MubWFwPFNlcnZpY2VDYXNlUmVmPihyID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzYyA9IHRoaXMuX3NlcnZpY2VjYXNlcy5maWx0ZXIoYyA9PiBjLmlkLmhyZWYgPT0gci5pZCkuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkOiBzYy5pZCwgbnVtYmVyOiBzYy5jYXNlTnVtYmVyLCB0eXBlOiBzYy50eXBlLCB0aXRsZTogc2MudGl0bGUgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldFZhbHVlKFwic2VydmljZWNhc2VzLlwiICsgdGhpcy5zdG9yZWdsb2JhbGlkICsgXCIuZGF0YVwiLCBjYXNlZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZpbmQgb2JqZWN0IHRvIHNlZSB3aGF0IHR5cGUgaXQgaXMuXHJcbiAgICAgICAgdGhpcy5fc2VydmljZWNhc2VzLmZpbHRlcih4ID0+IHguaWQuaHJlZiA9PSByb3dpZCkuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSB7IG51bWJlcjogeC5jYXNlTnVtYmVyIH07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZmVyZXIpXHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzWyc/cmVmZXJlciddID0gdGhpcy5yZWZlcmVyO1xyXG4gICAgICAgICAgICBpZiAoeC50eXBlID09ICdidWcnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgZWRpdCBwYWdlIGZvciB0aGlzIG9uZS5cclxuICAgICAgICAgICAgICAgIGlmICghd2l0aEN0cmwpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcm9vdFJvdXRlci5uYXZpZ2F0ZShbJ1Byb2JsZW0nLCAnRWRpdCcsIHBhcmFtZXRlcnNdKTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRvdWJsZSBiZWNhdXNlIGl0IGRvZXNudCBmb2N1cyB0aGUgZmlyc3QgdGltZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlblVybEluTmV3V2luZG93KGAvcHJvYmxlbS9lZGl0LyR7eC5jYXNlTnVtYmVyfSR7KHRoaXMucmVmZXJlciA/IGA/cmVmZXJlcj0ke3RoaXMucmVmZXJlcn1gIDogJycpfWAsIGAvcHJvYmxlbS9lZGl0LyR7eC5jYXNlTnVtYmVyfSR7KHRoaXMucmVmZXJlciA/IGA/cmVmZXJlcj0ke3RoaXMucmVmZXJlcn1gIDogJycpfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHgudHlwZSA9PSAncmVxdWVzdCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBlZGl0IHBhZ2UgZm9yIHRoaXMgb25lLlxyXG4gICAgICAgICAgICAgICAgaWYgKCF3aXRoQ3RybClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlKFsnUmVxdWVzdCcsICdFZGl0JywgcGFyYW1ldGVyc10pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuVXJsSW5OZXdXaW5kb3coYC9yZXF1ZXN0L2VkaXQvJHt4LmNhc2VOdW1iZXJ9JHsodGhpcy5yZWZlcmVyID8gYD9yZWZlcmVyPSR7dGhpcy5yZWZlcmVyfWAgOiAnJyl9YCwgYC9yZXF1ZXN0L2VkaXQvJHt4LmNhc2VOdW1iZXJ9JHsodGhpcy5yZWZlcmVyID8gYD9yZWZlcmVyPSR7dGhpcy5yZWZlcmVyfWAgOiAnJyl9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9wZW5VcmxJbk5ld1dpbmRvdyh1cmwsIG5hbWUpIHtcclxuICAgICAgICBsZXQgdyA9IHdpbmRvdy5vcGVuKHVybCwgbmFtZSk7XHJcbiAgICAgICAgdy5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBTb3J0KGNvbHVtbjogc3RyaW5nLCBkZXNjZW5kaW5nOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuQ29sdW1ucyAmJiB0aGlzLnNvcnRjb2x1bW4gJiYgdGhpcy5zb3J0ZGVzY2VuZGluZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IHRoaXMuQ29sdW1ucy5sZW5ndGg7IGNvbCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5Db2x1bW5zW2NvbF0ua2V5ID09IHRoaXMuc29ydGNvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuT25Tb3J0RGF0YShjb2wsIGRlc2NlbmRpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBPblNvcnREYXRhKGNvbHVtbjogbnVtYmVyLCBkZXNjZW5kaW5nOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlcnZpY2VjYXNlcykge1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkU29ydExpc3QoKTtcclxuICAgICAgICAgICAgaWYgKGRlc2NlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2VjYXNlcyA9IHRoaXMuX3NlcnZpY2VjYXNlcy5zb3J0KHRoaXMuY29sdW1uU29ydEZ1bmN0aW9uc1tjb2x1bW5dKS5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlY2FzZXMgPSB0aGlzLl9zZXJ2aWNlY2FzZXMuc29ydCh0aGlzLmNvbHVtblNvcnRGdW5jdGlvbnNbY29sdW1uXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5SZWZyZXNoUmVzdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgTW9kZSgpOiBcIm1vbm9cIiB8IFwibXVsdGlcIiB7XHJcbiAgICAgICAgbGV0IHNlbCA9IHRoaXMuYXBwbGljYXRpb24uc2VsZWN0ZWRDdXN0b21lcnM7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmZvcmNlTXVsdGkgfHwgc2VsICE9IHVuZGVmaW5lZCAmJiBzZWwubGVuZ3RoID4gMSkgPyAnbXVsdGknIDogJ21vbm8nO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgTWFrZUhlYWRlcnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nob3doZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWFkZXJzID0gW107XHJcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaChuZXcgVGFibGVDb2x1bW4oJ2Nhc2V0eXBlJywgJ0NBU0VfVFlQRScsIHRydWUsIHRydWUpKTtcclxuICAgICAgICAgICAgaGVhZGVycy5wdXNoKG5ldyBUYWJsZUNvbHVtbigncHJpb3JpdHknLCAnIScsIHRydWUsIGZhbHNlKSk7XHJcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaChuZXcgVGFibGVDb2x1bW4oJ2FjdGlvbnJlcXVpcmVkJywgJ0EnLCB0cnVlLCBmYWxzZSkpO1xyXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2gobmV3IFRhYmxlQ29sdW1uKCdmZWVkYmFja3JlcXVpcmVkJywgJ0YnLCB0cnVlLCBmYWxzZSkpO1xyXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2gobmV3IFRhYmxlQ29sdW1uKCdjYXNlbnVtYmVyJywgJ0NBU0VfTk8nLCB0cnVlLCB0cnVlKSk7XHJcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaChuZXcgVGFibGVDb2x1bW4oJ3BhcmVudGNhc2VudW1iZXInLCAnUEFSRU5UX05PJywgdHJ1ZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2gobmV3IFRhYmxlQ29sdW1uKCdjdXN0b21lcicsICdDVVNUT01FUicsIHRydWUsIHRydWUpKTtcclxuICAgICAgICAgICAgaGVhZGVycy5wdXNoKG5ldyBUYWJsZUNvbHVtbignc3RhdHVzJywgJ1NUQVRVUycsIHRydWUsIHRydWUpKTtcclxuICAgICAgICAgICAgaGVhZGVycy5wdXNoKG5ldyBUYWJsZUNvbHVtbignZGVzY3JpcHRpb24nLCAnREVTQ1JJUFRJT04nLCB0cnVlLCB0cnVlKSk7XHJcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaChuZXcgVGFibGVDb2x1bW4oJ2lzc3VlZGJ5JywgJ0lTU1VFRF9CWScsIHRydWUsIHRydWUpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVjZW50bGF5b3V0KSB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnB1c2gobmV3IFRhYmxlQ29sdW1uKCdsYXN0b3BlbmVkJywgJ0xBU1RfT1BFTkVEJywgdHJ1ZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycy5wdXNoKG5ldyBUYWJsZUNvbHVtbignZmlsbGVyJywgJycsIHRydWUsIHRydWUpKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiU0RcIiwgXCJGUVNcIl0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5wdXNoKG5ldyBUYWJsZUNvbHVtbignZmlsbGVyJywgJycsIHRydWUsIHRydWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVjZW50bGF5b3V0KSB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnB1c2gobmV3IFRhYmxlQ29sdW1uKCdyZWNlbnRvcGVuZWQnLCAnUkVDRU5UX09QRU5FRCcsIHRydWUsIHRydWUpKTtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnMucHVzaChuZXcgVGFibGVDb2x1bW4oJ2RlYWRsaW5lJywgJ0RFQURMSU5FJywgdHJ1ZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJTRFwiLCBcIkZRU1wiXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLnB1c2gobmV3IFRhYmxlQ29sdW1uKCdyZW1lbWJlcicsICdSRU1FTUJFUicsIHRydWUsIHRydWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5Db2x1bW5zID0gaGVhZGVycztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLkNvbHVtbnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIFJlZnJlc2hSZXN1bHQoKSB7XHJcbiAgICAgICAgdGhpcy5NYWtlSGVhZGVycygpO1xyXG5cclxuICAgICAgICBsZXQgY29sdW1uOiBUYWJsZUNvbHVtbiA9IHRoaXMuQ29sdW1ucy5maWx0ZXIoeCA9PiB4LmlzU29ydGVkQXNjZW5kaW5nIHx8IHguaXNTb3J0ZWREZXNjZW5kaW5nKS5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChjb2x1bW4gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydGRlc2NlbmRpbmcgPSBjb2x1bW4uaXNTb3J0ZWREZXNjZW5kaW5nO1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRjb2x1bW4gPSBjb2x1bW4ua2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fc2VydmljZWNhc2VzICE9IG51bGwgJiYgdGhpcy5fc2VydmljZWNhc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5Sb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fc2VydmljZWNhc2VzLm1hcChhc3luYyAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJvdyA9IG5ldyBUYWJsZVJvdyhpdGVtLmlkLmhyZWYsIG5ldyBBcnJheTxUYWJsZUNlbGw+KCkpO1xyXG4gICAgICAgICAgICAgICAgcm93LmxpbmsgPSBbaXRlbS50eXBlID09ICdidWcnID8gJy9Qcm9ibGVtJyA6ICcvUmVxdWVzdCcsICdFZGl0JywgeyBudW1iZXI6IGl0ZW0uY2FzZU51bWJlciB9XTtcclxuICAgICAgICAgICAgICAgIHJvdy5jZWxscy5wdXNoKG5ldyBUYWJsZUNlbGwodGhpcy5tYWtlVHlwZUljb24oaXRlbS50eXBlLCBpdGVtLnNldmVyaXR5KSkpO1xyXG4gICAgICAgICAgICAgICAgcm93LmNlbGxzLnB1c2gobmV3IFRhYmxlQ2VsbCh0aGlzLm1ha2VQcmlvcml0eUljb24oaXRlbS5wcmlvcml0eSkpKTtcclxuICAgICAgICAgICAgICAgIHJvdy5jZWxscy5wdXNoKG5ldyBUYWJsZUNlbGwodGhpcy5tYWtlQWN0aW9uSWNvbihpdGVtLmFjdGlvblJlcXVpcmVkKSkpO1xyXG4gICAgICAgICAgICAgICAgcm93LmNlbGxzLnB1c2gobmV3IFRhYmxlQ2VsbCh0aGlzLm1ha2VGZWVkYmFja0ljb24oaXRlbS5mZWVkYmFja1N0YXR1cykpKTtcclxuICAgICAgICAgICAgICAgIGxldCBzdHlsZSA9IFtcImNsb3NlZFwiLCBcImNhbmNlbGxlZFwiXS5pbmRleE9mKGl0ZW0uc3RhdHVzKSA+IC0xID8gXCJjbG9zZWRcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICByb3cuY2VsbHMucHVzaChuZXcgVGFibGVDZWxsKGl0ZW0uY2FzZU51bWJlciwgZmFsc2UsICgpID0+IHN0eWxlKSk7XHJcbiAgICAgICAgICAgICAgICByb3cuY2VsbHMucHVzaChuZXcgVGFibGVDZWxsKGl0ZW0ucGFyZW50Q2FzZU51bWJlciwgZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgIHJvdy5jZWxscy5wdXNoKG5ldyBUYWJsZUNlbGwoKHRoaXMucGhvbmUpID8gYXdhaXQgdGhpcy5tYWtlQ3VzdG9tZXJQaG9uZVRpdGxlKGl0ZW0uY29udGFjdFBlcnNvbiwgaXRlbS5jdXN0b21lciwgaXRlbS5jdXN0b21lckRlc2MpIDogdGhpcy5tYWtlVGl0bGVPZlZhbHVlKGl0ZW0uY3VzdG9tZXJEZXNjKSkpO1xyXG4gICAgICAgICAgICAgICAgcm93LmNlbGxzLnB1c2gobmV3IFRhYmxlQ2VsbCh0aGlzLm1ha2VUaXRsZU9mVmFsdWUoaXRlbS5zdGF0dXNEZXNjLnJlcGxhY2UoLyAvZywgJycpKSwgZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgIHJvdy5jZWxscy5wdXNoKG5ldyBUYWJsZUNlbGwodGhpcy5tYWtlVGl0bGVPZlZhbHVlKGl0ZW0udGl0bGUpKSk7XHJcbiAgICAgICAgICAgICAgICByb3cuY2VsbHMucHVzaChuZXcgVGFibGVDZWxsKCh0aGlzLnBob25lKSA/IGF3YWl0IHRoaXMubWFrZVBob25lVGl0bGUoaXRlbS5jb250YWN0UGVyc29uLCBpdGVtLmN1c3RvbWVyLCBpdGVtLmNyZWF0ZWRCeSkgOiB0aGlzLm1ha2VUaXRsZU9mVmFsdWUoaXRlbS5jcmVhdGVkQnkpKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWNlbnRsYXlvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3cuY2VsbHMucHVzaChuZXcgVGFibGVDZWxsKHRoaXMubWFrZVJlY2VudEl0ZW0oaXRlbS5tb2RpZmllZE9uLCBpdGVtLm1vZGlmaWVkQnksICg8Q29tcGFjdFJlY2VudFNlcnZpY2VDYXNlPml0ZW0pLmxhc3RPcGVuZWQpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LmNlbGxzLnB1c2gobmV3IFRhYmxlQ2VsbCgnJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiU0RcIiwgXCJGUVNcIl0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5jZWxscy5wdXNoKG5ldyBUYWJsZUNlbGwoJycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmVjZW50bGF5b3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LmNlbGxzLnB1c2gobmV3IFRhYmxlQ2VsbCh0aGlzLm1ha2VSZWNlbnRJdGVtKGl0ZW0ubW9kaWZpZWRPbiwgaXRlbS5tb2RpZmllZEJ5KSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5jZWxscy5wdXNoKG5ldyBUYWJsZUNlbGwodGhpcy5tYWtlRGVhZGxpbmVJY29uKGl0ZW0ucmVxdWVzdGVkRGVhZGxpbmUpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJTRFwiLCBcIkZRU1wiXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmNlbGxzLnB1c2gobmV3IFRhYmxlQ2VsbCh0aGlzLm1ha2VSZW1lbWJlckljb24oaXRlbS5yZW1lbWJlck1lRGF0ZSwgaXRlbS5yZW1lbWJlck1lUmVhc29uKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25SZXN1bHRDb3VudENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25SZXN1bHRDb3VudENoYW5nZWQoeyByZXN1bHRjb3VudDogdGhpcy5zZXJ2aWNlY2FzZXMubGVuZ3RoIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dlbXB0eXJvdykge1xyXG4gICAgICAgICAgICBsZXQgcm93ID0gbmV3IFRhYmxlUm93KFwiZW1wdHlcIiwgbmV3IEFycmF5PFRhYmxlQ2VsbD4oKSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByb3cuY2VsbHMucHVzaChuZXcgVGFibGVDZWxsKFwiJm5ic3A7XCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcm93cyA9IFtdO1xyXG4gICAgICAgICAgICByb3dzLnB1c2gocm93KTtcclxuICAgICAgICAgICAgdGhpcy5Sb3dzID0gcm93cztcclxuICAgICAgICAgICAgaWYgKHRoaXMub25SZXN1bHRDb3VudENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25SZXN1bHRDb3VudENoYW5nZWQoeyByZXN1bHRjb3VudDogbnVsbCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vblJlc3VsdENvdW50Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJlc3VsdENvdW50Q2hhbmdlZCh7IHJlc3VsdGNvdW50OiBudWxsIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RGF0ZVN0cmluZyhpc29EYXRlOiBJU09EYXRlVGltZVN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGlzb0RhdGUpIHtcclxuICAgICAgICAgICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIGxldCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB5ZXN0ZXJkYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIHllc3RlcmRheS5zZXREYXRlKHllc3RlcmRheS5nZXREYXRlKCkgLSAxKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKGlzb0RhdGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXAgPj0gdG9kYXkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZmlsdGVyKCdkYXRlJykodGltZXN0YW1wLCAnSEg6bW0nKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGltZXN0YW1wID49IHllc3RlcmRheSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoJ3llc3RlcmRheScpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgPT0gdGltZXN0YW1wLmdldEZ1bGxZZWFyKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZmlsdGVyKCdkYXRlJykodGltZXN0YW1wLCAnZCBNTU0nKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGZpbHRlcignZGF0ZScpKHRpbWVzdGFtcCwgJ2QgTU1NIHl5eXknKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYWtlVGl0bGVPZlZhbHVlKHZhbHVlOiBzdHJpbmcsIHRyYW5zbGF0ZTogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmcge1xyXG5cclxuICAgICAgICBpZiAodHJhbnNsYXRlKSB2YWx1ZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGA8c3BhbiB0aXRsZT1cIiR7dmFsdWUucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIil9XCI+JHt2YWx1ZX08L3NwYW4+YDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIG1ha2VDdXN0b21lclBob25lVGl0bGUoY29udGFjdDogSVJlc291cmNlUmVzb2x2ZXI8UGVyc29uPiwgY3VzdG9tZXI6IElSZXNvdXJjZVJlc29sdmVyPEN1c3RvbWVyPiwgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmcgPSBgIHRpdGxlPVwiJHtuYW1lfVwiYDtcclxuICAgICAgICBpZiAoY3VzdG9tZXIpIHtcclxuICAgICAgICAgICAgbGV0IGNvbnRhY3RDdXN0b21lcjogQ3VzdG9tZXIgPSBhd2FpdCBjdXN0b21lci52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbnRhY3RDdXN0b21lci5waG9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBgIHRpdGxlPVwiJHtuYW1lfTogJHtjb250YWN0Q3VzdG9tZXIucGhvbmV9XCJgO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBgIHRpdGxlPVwiJHtuYW1lfVwiYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYDxzcGFuJHt0aXRsZX0+JHtuYW1lfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgbWFrZVBob25lVGl0bGUoY29udGFjdDogSVJlc291cmNlUmVzb2x2ZXI8UGVyc29uPiwgY3VzdG9tZXI6IElSZXNvdXJjZVJlc29sdmVyPEN1c3RvbWVyPiwgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmcgPSBgIHRpdGxlPVwiJHtuYW1lfVwiYDtcclxuICAgICAgICBpZiAoY29udGFjdCkge1xyXG4gICAgICAgICAgICBsZXQgY29udGFjdFBlcnNvbjogUGVyc29uID0gYXdhaXQgY29udGFjdC52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbnRhY3RQZXJzb24ucGhvbmUgJiYgY29udGFjdFBlcnNvbi5waG9uZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGAgdGl0bGU9XCIke2NvbnRhY3RQZXJzb24ubmFtZX06ICR7Y29udGFjdFBlcnNvbi5waG9uZS5yZXZlcnNlKCkuam9pbihcIiwgXCIpfVwiYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250YWN0Q3VzdG9tZXI6IEN1c3RvbWVyID0gYXdhaXQgY3VzdG9tZXIudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGFjdEN1c3RvbWVyLnBob25lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBgIHRpdGxlPVwiJHtjb250YWN0Q3VzdG9tZXIubmFtZX06ICR7Y29udGFjdEN1c3RvbWVyLnBob25lfVwiYDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBgIHRpdGxlPVwiJHtjb250YWN0UGVyc29uLm5hbWV9XCJgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgPHNwYW4ke3RpdGxlfT4ke25hbWV9PC9zcGFuPmA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdHlwZWljb25zOiB7IHR5cGU6IHN0cmluZywgbGV2ZWw6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcsIHRpdGxlYWRqZWN0aXZlPzogc3RyaW5nLCBpY29uOiBzdHJpbmcgfVtdID0gW1xyXG4gICAgICAgIHsgdHlwZTogJ2J1ZycsIGxldmVsOiAnbGV2ZWwxJywgdGl0bGU6ICdQUk9CTEVNLkxFVkVMMScsIHRpdGxlYWRqZWN0aXZlOiAnTVRUUl9IT1VSUycsIGljb246ICdpY29uLXNldjEnIH0sXHJcbiAgICAgICAgeyB0eXBlOiAnYnVnJywgbGV2ZWw6ICdsZXZlbDInLCB0aXRsZTogJ1BST0JMRU0uTEVWRUwyJywgdGl0bGVhZGplY3RpdmU6ICdNVFRSX0RBWVMnLCBpY29uOiAnaWNvbi1zZXYyJyB9LFxyXG4gICAgICAgIHsgdHlwZTogJ2J1ZycsIGxldmVsOiAnbGV2ZWwzJywgdGl0bGU6ICdQUk9CTEVNLkxFVkVMMycsIHRpdGxlYWRqZWN0aXZlOiAnTVRUUl9XRUVLUycsIGljb246ICdpY29uLXNldjMnIH0sXHJcbiAgICAgICAgeyB0eXBlOiAnYnVnJywgbGV2ZWw6ICdsZXZlbDQnLCB0aXRsZTogJ1BST0JMRU0uTEVWRUw0JywgdGl0bGVhZGplY3RpdmU6ICdNVFRSX05FWFRfUkVMRUFTRScsIGljb246ICdpY29uLXNldjQnIH0sXHJcbiAgICAgICAgeyB0eXBlOiAnYnVnJywgbGV2ZWw6ICcnLCB0aXRsZTogJycsIGljb246ICdpY29uLXByb2JsZW0nIH0sXHJcbiAgICAgICAgeyB0eXBlOiAncmVxdWVzdCcsIGxldmVsOiAnJywgdGl0bGU6ICdSRVFVRVNUJywgaWNvbjogJ2ljb24tcmVxdWVzdCcgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIG1ha2VUeXBlSWNvbih0eXBlOiBzdHJpbmcsIGxldmVsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCB0eXBlaWNvbiA9IFNlcnZpY2VDYXNlVGFibGUudHlwZWljb25zLmZpbHRlcihpID0+IGkudHlwZSA9PSB0eXBlICYmIGkubGV2ZWwgPT0gbGV2ZWwpLnNoaWZ0KCkgfHwgU2VydmljZUNhc2VUYWJsZS50eXBlaWNvbnMuZmlsdGVyKGkgPT4gaS50eXBlID09IHR5cGUpLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKHR5cGVpY29uKSB7XHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9ICh0eXBlaWNvbi50aXRsZSA/IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSh0eXBlaWNvbi50aXRsZSkgOiBcIlwiKVxyXG4gICAgICAgICAgICBsZXQgYWRqZWN0aXZlID0gKHR5cGVpY29uLnRpdGxlYWRqZWN0aXZlID8gXCIgLSBcIiArIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSh0eXBlaWNvbi50aXRsZWFkamVjdGl2ZSkgOiBcIlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiB0aXRsZT1cIiR7dGl0bGV9JHthZGplY3RpdmV9XCIgY2xhc3M9XCIke3R5cGVpY29uLmljb259XCI+PC9zcGFuPmA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIG1ha2VSZWNlbnRJdGVtKG1vZGlmaWVkT246IElTT0RhdGVTdHJpbmcsIG1vZGlmaWVkQnk6IHN0cmluZywgbGFzdE9wZW5lZDogSVNPRGF0ZVN0cmluZyA9IG51bGwpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBkYXRlU3RyaW5nOiBzdHJpbmc7XHJcbiAgICAgICAgaWYgKCFtb2RpZmllZE9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgPHNwYW4+PC9zcGFuPmA7XHJcbiAgICAgICAgfSBlbHNlIGlmICghbW9kaWZpZWRCeSkge1xyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoJ0xBU1RfTU9ESUZJRURfezB9JylcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiezB9XCIsIG5ldyBEYXRlKG1vZGlmaWVkT24pLnRvTG9jYWxlU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICBkYXRlU3RyaW5nID0gdGhpcy5nZXREYXRlU3RyaW5nKChsYXN0T3BlbmVkKSA/IGxhc3RPcGVuZWQgOiBtb2RpZmllZE9uKTtcclxuICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiB0aXRsZT1cIiR7dGl0bGV9XCI+JHtkYXRlU3RyaW5nfTwvc3Bhbj5gO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSgnTEFTVF9NT0RJRklFRF9CWV97MH1fezF9JylcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiezB9XCIsIG1vZGlmaWVkQnkpXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcInsxfVwiLCBuZXcgRGF0ZShtb2RpZmllZE9uKS50b0xvY2FsZVN0cmluZygpKTtcclxuICAgICAgICAgICAgZGF0ZVN0cmluZyA9IHRoaXMuZ2V0RGF0ZVN0cmluZygobGFzdE9wZW5lZCkgPyBsYXN0T3BlbmVkIDogbW9kaWZpZWRPbik7XHJcbiAgICAgICAgICAgIHJldHVybiBgPHNwYW4gdGl0bGU9XCIke3RpdGxlfVwiPiR7ZGF0ZVN0cmluZ308L3NwYW4+YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgbWFrZURlYWRsaW5lSWNvbihkZWFkbGluZTogSVNPRGF0ZVN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFkZWFkbGluZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuPjwvc3Bhbj5gO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBkaWZmID0gRGF0ZS5kaWZmKERhdGUudG9kYXkoKSwgbmV3IERhdGUoZGVhZGxpbmUpKTtcclxuICAgICAgICAgICAgbGV0IHRleHQ6IHN0cmluZztcclxuXHJcbiAgICAgICAgICAgIGlmIChkaWZmLmRheXMgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKFwiREVBRExJTkVfRlVUVVJFXCIpLnJlcGxhY2UoXCJ7MH1cIiwgZGlmZi5kYXlzLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpZmYuZGF5cyA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkRFQURMSU5FX1RPTU9SUk9XXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpZmYuZGF5cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkRFQURMSU5FX1RPREFZXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpZmYuZGF5cyA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJERUFETElORV9ZRVNURVJEQVlcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZi5kYXlzIDwgLTEpIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJERUFETElORV9QQVNUXCIpLnJlcGxhY2UoXCJ7MH1cIiwgKC1kaWZmLmRheXMpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZGVhZGxpbmVDbGFzczogc3RyaW5nO1xyXG4gICAgICAgICAgICBpZiAoZGlmZi5kYXlzIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgZGVhZGxpbmVDbGFzcyA9IFwiZXJyb3JcIjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZmLmRheXMgPCA1KSB7XHJcbiAgICAgICAgICAgICAgICBkZWFkbGluZUNsYXNzID0gXCJ3YXJuaW5nXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWFkbGluZUNsYXNzID0gXCJpbmZvcm1hdGlvblwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIHRpdGxlPVwiJHt0ZXh0fVwiIGNsYXNzPVwiaWNvbi1kZWFkbGluZSAke2RlYWRsaW5lQ2xhc3N9XCI+PC9zcGFuPmA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIG1ha2VSZW1lbWJlckljb24ocmVtZW1iZXI6IElTT0RhdGVTdHJpbmcsIHJlYXNvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXJlbWVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgPHNwYW4+PC9zcGFuPmA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGRpZmYgPSBEYXRlLmRpZmYoRGF0ZS50b2RheSgpLCBuZXcgRGF0ZShyZW1lbWJlcikpO1xyXG4gICAgICAgICAgICBsZXQgdGV4dDogc3RyaW5nO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRpZmYuZGF5cyA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJSRU1FTUJFUl9GVVRVUkVcIikucmVwbGFjZShcIntkYXRlZGlmZn1cIiwgZGlmZi5kYXlzLnRvU3RyaW5nKCkpLnJlcGxhY2UoXCJ7cmVhc29ufVwiLCByZWFzb24pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpZmYuZGF5cyA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIlJFTUVNQkVSX1RPTU9SUk9XXCIpLnJlcGxhY2UoXCJ7cmVhc29ufVwiLCByZWFzb24pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpZmYuZGF5cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIlJFTUVNQkVSX1RPREFZXCIpLnJlcGxhY2UoXCJ7cmVhc29ufVwiLCByZWFzb24pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRpZmYuZGF5cyA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJSRU1FTUJFUl9ZRVNURVJEQVlcIikucmVwbGFjZShcIntyZWFzb259XCIsIHJlYXNvbik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZi5kYXlzIDwgLTEpIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJSRU1FTUJFUl9QQVNUXCIpLnJlcGxhY2UoXCJ7ZGF0ZWRpZmZ9XCIsICgtZGlmZi5kYXlzKS50b1N0cmluZygpKS5yZXBsYWNlKFwie3JlYXNvbn1cIiwgcmVhc29uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJlbWVtYmVyQ2xhc3M6IHN0cmluZztcclxuICAgICAgICAgICAgaWYgKGRpZmYuZGF5cyA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJlbWVtYmVyQ2xhc3MgPSBcImVycm9yXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZi5kYXlzIDwgNSkge1xyXG4gICAgICAgICAgICAgICAgcmVtZW1iZXJDbGFzcyA9IFwid2FybmluZ1wiO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVtZW1iZXJDbGFzcyA9IFwiaW5mb3JtYXRpb25cIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiB0aXRsZT1cIiR7dGV4dH1cIiBjbGFzcz1cImljb24tcmVtaW5kZXIgJHtyZW1lbWJlckNsYXNzfVwiPjwvc3Bhbj5gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByaW9yaXR5aWNvbnMgPSBbXHJcbiAgICAgICAgeyB0eXBlOiAnaGlnaCcsIHRpdGxlOiAnSElHSCcsIGljb246ICdpY29uLXByaW9ISUdIJyB9LFxyXG4gICAgICAgIHsgdHlwZTogJ21lZGl1bScsIHRpdGxlOiAnTUVESVVNJywgaWNvbjogJ2ljb24tcHJpb01FRElVTScgfSxcclxuICAgICAgICB7IHR5cGU6ICdsb3cnLCB0aXRsZTogJ0xPVycsIGljb246ICdpY29uLXByaW9MT1cnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHByaXZhdGUgbWFrZVByaW9yaXR5SWNvbih0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBwcmlvcml0eSA9IHRoaXMucHJpb3JpdHlpY29ucy5maWx0ZXIocCA9PiBwLnR5cGUgPT0gdHlwZSkuc2hpZnQoKTtcclxuICAgICAgICBpZiAocHJpb3JpdHkpIHtcclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gKHByaW9yaXR5LnRpdGxlID8gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKHByaW9yaXR5LnRpdGxlKSA6IFwiXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIHRpdGxlPVwiJHt0aXRsZX1cIiBjbGFzcz1cIiR7cHJpb3JpdHkuaWNvbn1cIj48L3NwYW4+YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXZlcml0eWljb25zID0gW1xyXG4gICAgICAgIHsgdHlwZTogJ2xldmVsMScsIHRpdGxlOiAnbGV2ZWwxJywgaWNvbjogJ2ljb24tc2V2MScgfSxcclxuICAgICAgICB7IHR5cGU6ICdsZXZlbDInLCB0aXRsZTogJ2xldmVsMicsIGljb246ICdpY29uLXNldjInIH0sXHJcbiAgICBdO1xyXG4gICAgcHJpdmF0ZSBtYWtlU2V2ZXJpdHlJY29uKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHNldmVyaXR5ID0gdGhpcy5zZXZlcml0eWljb25zLmZpbHRlcihzID0+IHMudHlwZSA9PSB0eXBlKS5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChzZXZlcml0eSlcclxuICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiB0aXRsZT1cIiR7c2V2ZXJpdHkudGl0bGV9XCIgY2xhc3M9XCIke3NldmVyaXR5Lmljb259XCI+PC9zcGFuPmA7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG1ha2VBY3Rpb25JY29uKHJlcXVpcmVkOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXJlcXVpcmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICByZXR1cm4gYDxzcGFuIHRpdGxlPVwiJHt0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJBQ1RJT05fUkVRVUlSRURcIil9XCIgY2xhc3M9XCJpY29uIGljb24tQVwiPjwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBtYWtlRmVlZGJhY2tJY29uKGZlZWRiYWNrU3RhdHVzOiBGZWVkYmFja1N0YXR1cyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGZlZWRiYWNrU3RhdHVzID09PSBcInJlcXVlc3RlZFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIHRpdGxlPVwiJHt0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJGRUVEQkFDS19SRVFVSVJFRFwiKX1cIiBjbGFzcz1cImljb24gaWNvbi1GXCI+PC9zcGFuPmA7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbmRhdGFyZXNpemUoY291bnQ6IG51bWJlcikge1xyXG4gICAgfVxyXG59XHJcblxyXG4iLCLvu79pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IFNldmVyaXR5LCBJbXBhY3QgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwic2V2ZXJpdHlBc3Nlc3NtZW50XCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9zZXZlcml0eUFzc2Vzc21lbnQuaHRtbFwiXHJcbn0pXHJcbmNsYXNzIFNldmVyaXR5QXNzZXNzbWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1YXRydWxlczogeyBkb3duOiBib29sZWFuLCBwY3RjbGFzczogc3RyaW5nLCB3bzogYm9vbGVhbiwgbWF4OiBTZXZlcml0eSwgaW5pdGlhbDogU2V2ZXJpdHkgfVtdID0gW1xyXG4gICAgICAgIHsgZG93bjogdHJ1ZSwgcGN0Y2xhc3M6IHVuZGVmaW5lZCwgd286IHVuZGVmaW5lZCwgbWF4OiAnbGV2ZWwzJywgaW5pdGlhbDogJ2xldmVsMycgfSxcclxuXHJcbiAgICAgICAgeyBkb3duOiBmYWxzZSwgcGN0Y2xhc3M6ICdoaWdoJywgd286IHRydWUsIG1heDogJ2xldmVsMycsIGluaXRpYWw6ICdsZXZlbDQnIH0sXHJcbiAgICAgICAgeyBkb3duOiBmYWxzZSwgcGN0Y2xhc3M6ICdoaWdoJywgd286IGZhbHNlLCBtYXg6ICdsZXZlbDMnLCBpbml0aWFsOiAnbGV2ZWw0JyB9LFxyXG5cclxuICAgICAgICB7IGRvd246IGZhbHNlLCBwY3RjbGFzczogJ21lZGl1bScsIHdvOiB0cnVlLCBtYXg6ICdsZXZlbDMnLCBpbml0aWFsOiAnbGV2ZWw0JyB9LFxyXG4gICAgICAgIHsgZG93bjogZmFsc2UsIHBjdGNsYXNzOiAnbWVkaXVtJywgd286IGZhbHNlLCBtYXg6ICdsZXZlbDMnLCBpbml0aWFsOiAnbGV2ZWw0JyB9LFxyXG5cclxuICAgICAgICB7IGRvd246IGZhbHNlLCBwY3RjbGFzczogJ2xvdycsIHdvOiBmYWxzZSwgbWF4OiAnbGV2ZWwzJywgaW5pdGlhbDogJ2xldmVsNCcgfSxcclxuICAgICAgICB7IGRvd246IGZhbHNlLCBwY3RjbGFzczogJ2xvdycsIHdvOiB0cnVlLCBtYXg6ICdsZXZlbDQnLCBpbml0aWFsOiAnbGV2ZWw0JyB9XHJcbiAgICBdO1xyXG5cclxuICAgIHByaXZhdGUgcHJvZHJ1bGVzOiB7IGRvd246IGJvb2xlYW4sIHBjdGNsYXNzOiBzdHJpbmcsIHdvOiBib29sZWFuLCBtYXg6IFNldmVyaXR5LCBpbml0aWFsOiBTZXZlcml0eSB9W10gPSBbXHJcbiAgICAgICAgeyBkb3duOiB0cnVlLCBwY3RjbGFzczogdW5kZWZpbmVkLCB3bzogdW5kZWZpbmVkLCBtYXg6ICdsZXZlbDEnLCBpbml0aWFsOiAnbGV2ZWwxJyB9LFxyXG5cclxuICAgICAgICB7IGRvd246IGZhbHNlLCBwY3RjbGFzczogJ2hpZ2gnLCB3bzogZmFsc2UsIG1heDogJ2xldmVsMicsIGluaXRpYWw6ICdsZXZlbDInIH0sXHJcbiAgICAgICAgeyBkb3duOiBmYWxzZSwgcGN0Y2xhc3M6ICdoaWdoJywgd286IHRydWUsIG1heDogJ2xldmVsMycsIGluaXRpYWw6ICdsZXZlbDMnIH0sXHJcblxyXG4gICAgICAgIHsgZG93bjogZmFsc2UsIHBjdGNsYXNzOiAnbWVkaXVtJywgd286IGZhbHNlLCBtYXg6ICdsZXZlbDMnLCBpbml0aWFsOiAnbGV2ZWwzJyB9LFxyXG4gICAgICAgIHsgZG93bjogZmFsc2UsIHBjdGNsYXNzOiAnbWVkaXVtJywgd286IHRydWUsIG1heDogJ2xldmVsMycsIGluaXRpYWw6ICdsZXZlbDQnIH0sXHJcblxyXG4gICAgICAgIHsgZG93bjogZmFsc2UsIHBjdGNsYXNzOiAnbG93Jywgd286IGZhbHNlLCBtYXg6ICdsZXZlbDMnLCBpbml0aWFsOiAnbGV2ZWw0JyB9LFxyXG4gICAgICAgIHsgZG93bjogZmFsc2UsIHBjdGNsYXNzOiAnbG93Jywgd286IHRydWUsIG1heDogJ2xldmVsMycsIGluaXRpYWw6ICdsZXZlbDQnIH1cclxuICAgIF07XHJcblxyXG4gICAgcHJpdmF0ZSBfZG93bjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX2ltcGFjdDogSW1wYWN0O1xyXG4gICAgcHJpdmF0ZSBfd29ya2Fyb3VuZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3NldmVyaXR5OiBTZXZlcml0eTtcclxuICAgIHByaXZhdGUgX2lzUHJvZDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkb3duKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kb3duO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBkb3duKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX2Rvd24gPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgaW1wYWN0KCk6IEltcGFjdCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltcGFjdDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgaW1wYWN0KHZhbDogSW1wYWN0KSB7XHJcbiAgICAgICAgdGhpcy5faW1wYWN0ID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IHdvcmthcm91bmQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmthcm91bmQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHdvcmthcm91bmQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fd29ya2Fyb3VuZCA9IHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBzZXZlcml0eSgpOiBTZXZlcml0eSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldmVyaXR5O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzZXZlcml0eSh2YWw6IFNldmVyaXR5KSB7XHJcbiAgICAgICAgdGhpcy5fc2V2ZXJpdHkgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgaXNwcm9kKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNQcm9kOyB9XHJcbiAgICBwdWJsaWMgc2V0IGlzcHJvZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgb2xkID0gdGhpcy5faXNQcm9kO1xyXG4gICAgICAgIHRoaXMuX2lzUHJvZCA9ICEhdmFsO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2V2ZXJpdHkob2xkICE9PSB1bmRlZmluZWQgJiYgb2xkICE9PSB0aGlzLl9pc1Byb2QpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuO1xyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25zZXZlcml0eWNoYW5nZWQ6IChhcmdzOiB7IHNldmVyaXR5OiBTZXZlcml0eSwgZG93bjogYm9vbGVhbiwgd29ya2Fyb3VuZDogYm9vbGVhbjsgaW1wYWN0OiBJbXBhY3QgfSkgPT4gdm9pZDtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNob3dpbXBhY3RlZCgpIHsgcmV0dXJuICF0aGlzLl9kb3duOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHNob3d3b3JrYXJvdW5kKCkgeyByZXR1cm4gIXRoaXMuX2Rvd247IH1cclxuXHJcbiAgICBwcml2YXRlIG1heFNldmVyaXR5OiBTZXZlcml0eSA9ICdsZXZlbDQnO1xyXG5cclxuICAgIG9ub3B0aW9uY2hhbmdlZChncm91cDogc3RyaW5nLCB2YWx1ZTogYW55LCB0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICBzd2l0Y2ggKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Rvd24nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3duID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW1wYWN0ID0gXCJsb3dcIjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmthcm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmltcGFjdCA9IHRoaXMuaW1wYWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2Fyb3VuZCA9IHRoaXMud29ya2Fyb3VuZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpbXBhY3QnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbXBhY3QgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd3b3JrYXJvdW5kJzpcclxuICAgICAgICAgICAgICAgIHRoaXMud29ya2Fyb3VuZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlU2V2ZXJpdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBTZXZlcml0eUNoYW5nZWQoc2V2ZXJpdHk6IFNldmVyaXR5KSB7XHJcbiAgICAgICAgbGV0IG9yZyA9IHRoaXMuc2V2ZXJpdHk7XHJcbiAgICAgICAgdGhpcy5zZXZlcml0eSA9IHNldmVyaXR5O1xyXG4gICAgICAgIGlmIChvcmcgIT0gdGhpcy5zZXZlcml0eSlcclxuICAgICAgICAgICAgdGhpcy5maXJlU2V2ZXJpdHlDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2V2ZXJpdHkoc2V0SW5pdGlhbCA9IHRydWUpIHtcclxuICAgICAgICBsZXQgeyBtYXgsIGluaXRpYWwgfSA9IHRoaXMuZ2V0U2V2ZXJpdHkodGhpcy5kb3duLCB0aGlzLmltcGFjdCwgdGhpcy53b3JrYXJvdW5kKTtcclxuICAgICAgICB0aGlzLm1heFNldmVyaXR5ID0gbWF4O1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmICF0aGlzLnJlYWRPbmx5ICYmIHNldEluaXRpYWwpIHtcclxuICAgICAgICAgICAgbGV0IG9yZyA9IHRoaXMuc2V2ZXJpdHk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V2ZXJpdHkgPSBpbml0aWFsO1xyXG4gICAgICAgICAgICBpZiAob3JnICE9IHRoaXMuc2V2ZXJpdHkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVTZXZlcml0eUNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldmVyaXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaXJlU2V2ZXJpdHlDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uc2V2ZXJpdHljaGFuZ2VkKHtcclxuICAgICAgICAgICAgICAgIHNldmVyaXR5OiB0aGlzLnNldmVyaXR5LFxyXG4gICAgICAgICAgICAgICAgZG93bjogdGhpcy5kb3duLFxyXG4gICAgICAgICAgICAgICAgd29ya2Fyb3VuZDogdGhpcy53b3JrYXJvdW5kLFxyXG4gICAgICAgICAgICAgICAgaW1wYWN0OiB0aGlzLmltcGFjdFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V2ZXJpdHkoaXNEb3duOiBib29sZWFuLCBpbXBhY3Q6IHN0cmluZywgd29ya2Fyb3VuZDogYm9vbGVhbik6IHsgbWF4OiBTZXZlcml0eSwgaW5pdGlhbDogU2V2ZXJpdHkgfSB7XHJcbiAgICAgICAgbGV0IHJ1bGVzID0gdGhpcy5faXNQcm9kID8gdGhpcy5wcm9kcnVsZXMgOiB0aGlzLnVhdHJ1bGVzO1xyXG4gICAgICAgIGlmIChydWxlcykge1xyXG4gICAgICAgICAgICBsZXQgcnVsZSA9IHJ1bGVzLmZpbHRlcihyID0+XHJcbiAgICAgICAgICAgICAgICByLmRvd24gPT09IGlzRG93biAmJlxyXG4gICAgICAgICAgICAgICAgKGlzRG93biA/IHIucGN0Y2xhc3MgPT09IHVuZGVmaW5lZCA6IHIucGN0Y2xhc3MgPT09IGltcGFjdCkgJiZcclxuICAgICAgICAgICAgICAgIChpc0Rvd24gPyByLndvID09PSB1bmRlZmluZWQgOiByLndvID09PSB3b3JrYXJvdW5kKSkuc2hpZnQoKTtcclxuICAgICAgICAgICAgaWYgKHJ1bGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtYXg6IHJ1bGUubWF4LCBpbml0aWFsOiBydWxlLmluaXRpYWwgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgbWF4OiAnbGV2ZWw0JywgaW5pdGlhbDogJ2xldmVsNCcgfTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE91dHB1dCwgQXR0cmlidXRlLCBPdXRwdXRBcmdzIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXZlcml0eSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmljZUNhc2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJzZXZlcml0eWNoZWNrbGlzdGNvbWJvXCIsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgICAgICA8Y2hlY2tsaXN0Y29tYm8gdmFsdWUtc3VtYml0PVwiJGN0cmwucGFzc1ZhbHVlU3VibWl0KHNlbGVjdGVkKVwiIHJlYWQtb25seT1cIiRjdHJsLnJlYWRPbmx5XCIgb25zZWxlY3Rpb25jaGFuZ2VkPVwiJGN0cmwuc2V2ZXJpdGllc3NlbGVjdGVkKHNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICBpdGVtcz1cIiRjdHJsLml0ZW1zXCIgc2hvd0FsbE9wdGlvbj1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGFsbC1zZWxlY3RlZC10ZXh0PVwiJGN0cmwuQUxMX1NFVkVSSVRJRVNfU0VMRUNURUQgfCB0cmFuc2xhdGUgXCJcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlLXNlbGVjdGVkLXRleHQ9XCIkY3RybC5NVUxUSVBMRV9TRVZFUklUSUVTX1NFTEVDVEVEIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIG5vbmUtc2VsZWN0ZWQtdGV4dD1cIicnXCIgY2hlY2tlZD1cIiRjdHJsLnNldmVyaXRpZXNcIiBzaG93LWNsZWFyPVwie3skY3RybC5zaG93Q2xlYXJ9fVwiXHJcbiAgICAgICAgICAgICAgICA+PC9jaGVja2xpc3Rjb21ibz5gXHJcbn0pXHJcbmNsYXNzIFNldmVyaXR5Q2hlY2tsaXN0Q29tYm8gaW1wbGVtZW50cyBJQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3NldmVyaXRpZXM6IHsga2V5OiBTZXZlcml0eSwgdGV4dDogc3RyaW5nIH1bXTtcclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgTVVMVElQTEVfU0VWRVJJVElFU19TRUxFQ1RFRCA9IFwiTVVMVElQTEVfU0VWRVJJVElFU19TRUxFQ1RFRFwiO1xyXG4gICAgcHJpdmF0ZSBBTExfU0VWRVJJVElFU19TRUxFQ1RFRCA9IFwiQUxMX1NFVkVSSVRJRVNfU0VMRUNURURcIjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSA8eyBrZXk6IFNldmVyaXR5LCB0ZXh0OiBzdHJpbmcgfVtdPltcclxuICAgICAgICAgICAge2tleTogJ2xldmVsMScgLHRleHQ6ICdMZXZlbCAxJ30sXHJcbiAgICAgICAgICAgIHtrZXk6ICdsZXZlbDInICx0ZXh0OiAnTGV2ZWwgMid9LFxyXG4gICAgICAgICAgICB7a2V5OiAnbGV2ZWwzJyAsdGV4dDogJ0xldmVsIDMnfSxcclxuICAgICAgICAgICAge2tleTogJ2xldmVsNCcgLHRleHQ6ICdMZXZlbCA0J31dO1xyXG5cclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZUl0ZW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyB0cmFuc2xhdGVJdGVtcygpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5vbkxvYWRlZDtcclxuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5tYXAoaSA9PiB7IGkudGV4dCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShpLnRleHQpOyByZXR1cm4gaTsgfSkuc29ydCgoYSwgYikgPT4gYS50ZXh0ID4gYi50ZXh0ID8gMSA6IC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBzZXZlcml0aWVzKCk6IHsga2V5OiBTZXZlcml0eSwgdGV4dDogc3RyaW5nIH1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldmVyaXRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNldmVyaXRpZXMoc2V2ZXJpdGllczogeyBrZXk6IFNldmVyaXR5LCB0ZXh0OiBzdHJpbmcgfVtdKSB7XHJcbiAgICAgICAgdGhpcy5fc2V2ZXJpdGllcyA9IHNldmVyaXRpZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zaG93Q2xlYXI7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGdldCBzaG93Q2xlYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dDbGVhcjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd0NsZWFyKHZhbDogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Nob3dDbGVhciA9IHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IFwidHJ1ZVwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBpdGVtczogeyBrZXk6IFNldmVyaXR5LCB0ZXh0OiBzdHJpbmcgfVtdO1xyXG5cclxuICAgIHB1YmxpYyBzZXZlcml0aWVzc2VsZWN0ZWQoc2VsZWN0ZWQ6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5zZXZlcml0aWVzID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5vblNldmVyaXR5Q2hhbmdlZCh7IHNldmVyaXRpZXM6IHRoaXMuc2V2ZXJpdGllcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uU2V2ZXJpdHlDaGFuZ2VkOiAoYXJnczogeyBzZXZlcml0aWVzOiBhbnlbXSB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZVN1Ym1pdDogT3V0cHV0QXJnczx7IHNldmVyaXRpZXM6IHsga2V5OiBzdHJpbmcsIHRleHQ6IHN0cmluZyB9W10gfT47XHJcbiAgICBwdWJsaWMgcGFzc1ZhbHVlU3VibWl0KHNlbGVjdGVkOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuc2V2ZXJpdGllcyA9IHNlbGVjdGVkO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlU3VibWl0KSB0aGlzLnZhbHVlU3VibWl0KHsgc2V2ZXJpdGllczogdGhpcy5zZXZlcml0aWVzIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBBdHRyaWJ1dGUsIE91dHB1dEFyZ3MgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgRHJvcGRvd25FbnRyeSB9IGZyb20gXCIuLi8uLi9jb250cm9scy9kcm9wZG93bmJveFwiO1xyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJzZXZlcml0eWRyb3Bkb3duYm94XCIsXHJcbiAgICB0ZW1wbGF0ZTogYDxkcm9wZG93bmJveFxyXG4gICAgICAgICAgICAgICAgcmVhZC1vbmx5PVwiJGN0cmwucmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgdmFsdWUtc3VibWl0PVwiJGN0cmwucGFzc1ZhbHVlU3VibWl0KHNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdHRleHQ9XCInTVVMVElQTEVfU0VWRVJJVElFU19TRUxFQ1RFRCdcIiBtdWx0aXNlbGVjdD1cIiRjdHJsLm11bHRpc2VsZWN0XCJcclxuICAgICAgICAgICAgICAgIGhpbnQ9XCInUGxlYXNlIGNob29zZSBhIHNldmVyaXR5J1wiIHNlbGVjdGVkPVwiJGN0cmwuc2V2ZXJpdGllc1wiXHJcbiAgICAgICAgICAgICAgICBpdGVtcz1cIlt7a2V5OidsZXZlbDEnLHRleHQ6J0xldmVsIDEnfSx7a2V5OidsZXZlbDInLHRleHQ6J0xldmVsIDInfSx7a2V5OidsZXZlbDMnLHRleHQ6J0xldmVsIDMnfSx7a2V5OidsZXZlbDQnLHRleHQ6J0xldmVsIDQnfV1cIlxyXG4gICAgICAgICAgICAgICAgb25zZWxlY3Rpb25jaGFuZ2VkPVwiJGN0cmwuc2V2ZXJpdGllc3NlbGVjdGVkKHNlbGVjdGVkKVwiIHNob3ctY2xlYXI9XCJ7eyRjdHJsLnNob3dDbGVhcn19XCJcclxuICAgICAgICAgICAgICAgID48L2Ryb3Bkb3duYm94PmBcclxufSlcclxuY2xhc3MgU2V2ZXJpdHlEcm9wZG93bkJveCBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSBfc2V2ZXJpdGllczogYW55W107XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgc2V2ZXJpdGllcygpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldmVyaXRpZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNldmVyaXRpZXMoZW52czogYW55W10pIHtcclxuICAgICAgICB0aGlzLl9zZXZlcml0aWVzID0gZW52cztcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3Nob3dDbGVhcjtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IHNob3dDbGVhcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0NsZWFyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzaG93Q2xlYXIodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd0NsZWFyID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIG11bHRpc2VsZWN0OiBib29sZWFuO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNldmVyaXR5Q2hhbmdlZDogT3V0cHV0QXJnczx7IHNldmVyaXRpZXM6IGFueVtdIH0+O1xyXG4gICAgcHVibGljIHNldmVyaXRpZXNzZWxlY3RlZChzZWxlY3RlZDogYW55W10pIHtcclxuICAgICAgICB0aGlzLnNldmVyaXRpZXMgPSBzZWxlY3RlZDtcclxuICAgICAgICB0aGlzLm9uU2V2ZXJpdHlDaGFuZ2VkKHsgc2V2ZXJpdGllczogdGhpcy5zZXZlcml0aWVzIH0pO1xyXG4gICAgfVxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZVN1Ym1pdDogT3V0cHV0QXJnczx7IHNldmVyaXRpZXM6IGFueVtdIH0+O1xyXG4gICAgcHVibGljIHBhc3NWYWx1ZVN1Ym1pdCh2YWx1ZTogYW55W10pIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZVN1Ym1pdCkgdGhpcy52YWx1ZVN1Ym1pdCh7IHNldmVyaXRpZXM6IHZhbHVlIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgU2V2ZXJpdHksIEltcGFjdCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmljZUNhc2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcInNldmVyaXR5aWNvblwiLFxyXG4gICAgdGVtcGxhdGU6IGA8c3BhblxyXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCIgbmcta2V5ZG93bj1cIiRjdHJsLm9uS2V5KCRldmVudClcIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB0b29sdGlwLWFwcGVuZC10by1ib2R5PVwidHJ1ZVwiIHVpYi10b29sdGlwPVwie3skY3RybC5zZXZlcml0eXRleHR9fVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zcGFuIHt7JGN0cmwuc2V2ZXJpdHlpY29ufX0gbmctY2xhc3M6e3JlYWRvbmx5OiRjdHJsLnJlYWRPbmx5fVwiIG5nLWNsaWNrPVwiJGN0cmwub25DbGljaygpXCI+PC9zcGFuPmBcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldmVyaXR5SWNvbiBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSBfc2V2ZXJpdHk6IFNldmVyaXR5O1xyXG4gICAgcHJpdmF0ZSBzZXZlcml0eWljb246IGFueTtcclxuICAgIHByaXZhdGUgc2V2ZXJpdHl0ZXh0OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBuZXdkb3duOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBuZXd3b3JrYXJvdW5kOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBuZXdpbXBhY3Q6IEltcGFjdDtcclxuICAgIHByaXZhdGUgbmV3c2V2ZXJpdHk6IFNldmVyaXR5O1xyXG4gICAgcHVibGljIHNldmVyaXR5Q2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbCcpIHByaXZhdGUgJG1vZGFsOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgcmVhZE9ubHkoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmVkaXRhYmxlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCByZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlID0gIXZhbDtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNldmVyaXR5KCk6IFNldmVyaXR5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2V2ZXJpdHk7XHJcbiAgICB9XHJcbiAgICBzZXQgc2V2ZXJpdHkobGV2ZWw6IFNldmVyaXR5KSB7XHJcbiAgICAgICAgdGhpcy5fc2V2ZXJpdHkgPSBsZXZlbDtcclxuICAgICAgICB0aGlzLm1ha2VTZXZlcml0eUljb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNwcm9kOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGVkaXRhYmxlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGRvd246IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaW1wYWN0OiBJbXBhY3Q7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgd29ya2Fyb3VuZDogYm9vbGVhbjtcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uc2V2ZXJpdHljaGFuZ2VkOiAoYXJnczogeyBzZXZlcml0eTogU2V2ZXJpdHksIGRvd246IGJvb2xlYW4sIHdvcmthcm91bmQ6IGJvb2xlYW47IGltcGFjdDogSW1wYWN0IH0pID0+IHZvaWQ7XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V2ZXJpdHlpY29uKVxyXG4gICAgICAgICAgICB0aGlzLm1ha2VTZXZlcml0eUljb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldmVyaXR5aWNvbnM6IHsga2V5OiBzdHJpbmcsIG5yOiBudW1iZXIsIHRleHQ6IHN0cmluZywgaWNvbjogc3RyaW5nIH1bXSA9IFtcclxuICAgICAgICB7IGtleTogJ2xldmVsMScsIG5yOiAxLCB0ZXh0OiAnTVRUUl9IT1VSUycsIGljb246ICdpY29uLXNldjEnIH0sXHJcbiAgICAgICAgeyBrZXk6ICdsZXZlbDInLCBucjogMiwgdGV4dDogJ01UVFJfREFZUycsIGljb246ICdpY29uLXNldjInIH0sXHJcbiAgICAgICAgeyBrZXk6ICdsZXZlbDMnLCBucjogMywgdGV4dDogJ01UVFJfV0VFS1MnLCBpY29uOiAnaWNvbi1zZXYzJyB9LFxyXG4gICAgICAgIHsga2V5OiAnbGV2ZWw0JywgbnI6IDQsIHRleHQ6ICdNVFRSX05FWFRfUkVMRUFTRScsIGljb246ICdpY29uLXNldjQnIH0sXHJcbiAgICBdO1xyXG4gICAgcHJpdmF0ZSBtYWtlU2V2ZXJpdHlJY29uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGxldCBpID0gdGhpcy5zZXZlcml0eWljb25zLmZpbHRlcihzID0+IHMua2V5ID09IHRoaXMuX3NldmVyaXR5KS5zaGlmdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldmVyaXR5dGV4dCA9IGkgPyBgU2V2ZXJpdHkgJHtpLm5yfSAtICR7dGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKGkudGV4dCl9YCA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc2V2ZXJpdHlpY29uID0gaSA/IGkuaWNvbiA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBPblNldmVyaXR5Q2hhbmdlZChzZXZlcml0eTogU2V2ZXJpdHksIGRvd246IGJvb2xlYW4sIHdvcmthcm91bmQ6IGJvb2xlYW4sIGltcGFjdDogSW1wYWN0KSB7XHJcbiAgICAgICAgdGhpcy5uZXdzZXZlcml0eSA9IHNldmVyaXR5O1xyXG4gICAgICAgIHRoaXMubmV3ZG93biA9IGRvd247XHJcbiAgICAgICAgdGhpcy5uZXd3b3JrYXJvdW5kID0gd29ya2Fyb3VuZDtcclxuICAgICAgICB0aGlzLm5ld2ltcGFjdCA9IGltcGFjdDtcclxuICAgICAgICB0aGlzLnNldmVyaXR5Q2hhbmdlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlU2V2ZXJpdHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V2ZXJpdHlDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25zZXZlcml0eWNoYW5nZWQoeyBzZXZlcml0eTogdGhpcy5uZXdzZXZlcml0eSwgZG93bjogdGhpcy5uZXdkb3duLCB3b3JrYXJvdW5kOiB0aGlzLm5ld3dvcmthcm91bmQsIGltcGFjdDogdGhpcy5uZXdpbXBhY3QgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgb25DbGljaygpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy4kbW9kYWwub3Blbih7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBTZXZlcml0eU1vZGVsQ29udHJvbGxlcixcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJBczogJyRjdHJsJyxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAnL3ZpZXdzL3NldmVyaXR5cG9wdXAuaHRtbCcsXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWNvbjogKCkgPT4gdGhpcyxcclxuICAgICAgICAgICAgICAgICAgICByZWFkT25seTogKCkgPT4gIXRoaXMuZWRpdGFibGVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkucmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlU2V2ZXJpdHkoKTtcclxuICAgICAgICB9IGNhdGNoIChfKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uS2V5KCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoJGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAxMzogLy9jclxyXG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVNldmVyaXR5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyNzogLy9lc2NcclxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDMyOiAvL3NwYWNlXHJcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DbGljaygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmNsYXNzIFNldmVyaXR5TW9kZWxDb250cm9sbGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJ3BhcmVudEljb24nKSBwcml2YXRlIHBhcmVudEljb246IFNldmVyaXR5SWNvbixcclxuICAgICAgICBASW5qZWN0KCdyZWFkT25seScpIHByaXZhdGUgcmVhZE9ubHk6IGJvb2xlYW4sXHJcbiAgICAgICAgQEluamVjdCgnJHVpYk1vZGFsSW5zdGFuY2UnKSBwcml2YXRlICRtb2RhbEluc3RhbmNlOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlSW5zdGFuY2VcclxuICAgICkgeyB9XHJcbiAgICBwdWJsaWMgZ2V0IGlzcHJvZCgpIHsgcmV0dXJuIHRoaXMucGFyZW50SWNvbi5pc3Byb2Q7IH1cclxuICAgIHB1YmxpYyBnZXQgc2V2ZXJpdHkoKSB7IHJldHVybiB0aGlzLnBhcmVudEljb24uc2V2ZXJpdHk7IH1cclxuICAgIHB1YmxpYyBnZXQgZG93bigpIHsgcmV0dXJuIHRoaXMucGFyZW50SWNvbi5kb3duOyB9XHJcbiAgICBwdWJsaWMgZ2V0IGltcGFjdCgpIHsgcmV0dXJuIHRoaXMucGFyZW50SWNvbi5pbXBhY3Q7IH1cclxuICAgIHB1YmxpYyBnZXQgd29ya2Fyb3VuZCgpIHsgcmV0dXJuIHRoaXMucGFyZW50SWNvbi53b3JrYXJvdW5kOyB9XHJcbiAgICBwdWJsaWMgZ2V0IHNldmVyaXR5Q2hhbmdlZCgpIHsgcmV0dXJuIHRoaXMucGFyZW50SWNvbi5zZXZlcml0eUNoYW5nZWQ7IH1cclxuICAgIHB1YmxpYyBPblNldmVyaXR5Q2hhbmdlZCA9IChzZXZlcml0eTogU2V2ZXJpdHksIGRvd246IGJvb2xlYW4sIHdvcmthcm91bmQ6IGJvb2xlYW4sIGltcGFjdDogSW1wYWN0KSA9PiB0aGlzLnBhcmVudEljb24uT25TZXZlcml0eUNoYW5nZWQoc2V2ZXJpdHksIGRvd24sIHdvcmthcm91bmQsIGltcGFjdCk7XHJcbiAgICBwdWJsaWMgQ2FuY2VsID0gKCkgPT4gdGhpcy4kbW9kYWxJbnN0YW5jZS5jbG9zZShmYWxzZSk7XHJcbiAgICBwdWJsaWMgU2F2ZSA9ICgpID0+IHRoaXMuJG1vZGFsSW5zdGFuY2UuY2xvc2UodHJ1ZSk7XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgQ29tcG9uZW50LCBBdHRyaWJ1dGUsIElucHV0LCBPdXRwdXQsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IFNldmVyaXR5IH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdzZXZlcml0eWJhcicsXHJcbiAgICB0ZW1wbGF0ZTogYDxyYWRpb2JhciByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiIGdyb3VwPVwic2V2ZXJpdHlcIiB2YWx1ZT1cIjFcIiBvbm9wdGlvbmNoYW5nZWQ9XCIkY3RybC5PblNldmVyaXR5Q2hhbmdlZCh2YWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmFkaW9iYXJvcHRpb24gYWN0aXZlPVwiJGN0cmwuX3NldmVyaXR5ID09ICdsZXZlbDEnXCIgdmFsdWU9XCInbGV2ZWwxJ1wiIHRleHQ9XCInMSdcIiBoaW50PVwiJ01UVFJfSE9VUlMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90YWxsb3dlZD1cIidsZXZlbDEnIDwgJGN0cmwuX21heHNldmVyaXR5XCIgYWN0aXZlY29sb3I9XCIncmVkJ1wiPjwvcmFkaW9iYXJvcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJhZGlvYmFyb3B0aW9uIGFjdGl2ZT1cIiRjdHJsLl9zZXZlcml0eSA9PSAnbGV2ZWwyJ1wiIHZhbHVlPVwiJ2xldmVsMidcIiB0ZXh0PVwiJzInXCIgaGludD1cIidNVFRSX0RBWVMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90YWxsb3dlZD1cIidsZXZlbDInIDwgJGN0cmwuX21heHNldmVyaXR5XCIgYWN0aXZlY29sb3I9XCInb3JhbmdlJ1wiPjwvcmFkaW9iYXJvcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJhZGlvYmFyb3B0aW9uIGFjdGl2ZT1cIiRjdHJsLl9zZXZlcml0eSA9PSAnbGV2ZWwzJ1wiIHZhbHVlPVwiJ2xldmVsMydcIiB0ZXh0PVwiJzMnXCIgaGludD1cIidNVFRSX1dFRUtTJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGFsbG93ZWQ9XCInbGV2ZWwzJyA8ICRjdHJsLl9tYXhzZXZlcml0eVwiIGFjdGl2ZWNvbG9yPVwiJ2JsdWUnXCI+PC9yYWRpb2Jhcm9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8cmFkaW9iYXJvcHRpb24gYWN0aXZlPVwiJGN0cmwuX3NldmVyaXR5ID09ICdsZXZlbDQnXCIgdmFsdWU9XCInbGV2ZWw0J1wiIHRleHQ9XCInNCdcIiBoaW50PVwiJ01UVFJfTkVYVF9SRUxFQVNFJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGFsbG93ZWQ9XCJmYWxzZVwiIGFjdGl2ZWNvbG9yPVwiJ2JsdWUnXCI+PC9yYWRpb2Jhcm9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvcmFkaW9iYXI+XHJcbmBcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldmVyaXR5QmFyIHtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3NldmVyaXR5OiBTZXZlcml0eTtcclxuICAgIHByaXZhdGUgX21heHNldmVyaXR5OiBTZXZlcml0eTtcclxuICAgIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBzZXZlcml0eSgpOiBTZXZlcml0eSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldmVyaXR5O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzZXZlcml0eSh2YWw6IFNldmVyaXR5KSB7XHJcbiAgICAgICAgdGhpcy5fc2V2ZXJpdHkgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgbWF4c2V2ZXJpdHkoKTogU2V2ZXJpdHkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhzZXZlcml0eTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgbWF4c2V2ZXJpdHkodmFsOiBTZXZlcml0eSkge1xyXG4gICAgICAgIHRoaXMuX21heHNldmVyaXR5ID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25jbGlja2VkOiAoYXJnczogeyBzZXZlcml0eTogU2V2ZXJpdHkgfSkgPT4gdm9pZDtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoIEBJbmplY3QoJyRlbGVtZW50JykgcHJpdmF0ZSAkZWxlbWVudDogYW5ndWxhci5JUm9vdEVsZW1lbnRTZXJ2aWNlKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBPblNldmVyaXR5Q2hhbmdlZCh2YWx1ZTogU2V2ZXJpdHkpIHtcclxuICAgICAgICB0aGlzLnNldmVyaXR5ID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbmNsaWNrZWQoeyBzZXZlcml0eTogdGhpcy5zZXZlcml0eSB9KTtcclxuICAgIH1cclxufVxyXG5cclxuIiwi77u/aW1wb3J0IHsgSUNvbXBvbmVudCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPdXRwdXQsIEF0dHJpYnV0ZSwgT3V0cHV0QXJncyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBEcm9wZG93bkVudHJ5IH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xzL2Ryb3Bkb3duYm94XCI7XHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvVHJhbnNsYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmljZUNhc2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJzdGF0dXNjaGVja2xpc3Rjb21ib1wiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICAgICAgPGNoZWNrbGlzdGNvbWJvIHZhbHVlLXN1bWJpdD1cIiRjdHJsLnBhc3NWYWx1ZVN1Ym1pdChzZWxlY3RlZClcIiByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiIG9uc2VsZWN0aW9uY2hhbmdlZD1cIiRjdHJsLnN0YXR1c2Vzc2VsZWN0ZWQoc2VsZWN0ZWQpXCJcclxuICAgICAgICAgICAgICAgIGl0ZW1zPVwiJGN0cmwuaXRlbXNcIiBzaG93QWxsT3B0aW9uPVwidHJ1ZVwiIGFsbC1zdWJzZXQ9XCIkY3RybC5hY3RpdmVTdWJzZXRcIlxyXG4gICAgICAgICAgICAgICAgYWxsLWl0ZW0tdGV4dD1cIiRjdHJsLkFDVElWRV9TVEFUVVNFUyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBhbGwtc2VsZWN0ZWQtdGV4dD1cIiRjdHJsLkFMTF9TVEFUVVNFU19TRUxFQ1RFRCB8IHRyYW5zbGF0ZSBcIlxyXG4gICAgICAgICAgICAgICAgc3Vic2V0LXNlbGVjdGVkLXRleHQ9XCIkY3RybC5BQ1RJVkVfU1RBVFVTRVNfU0VMRUNURUQgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGUtc2VsZWN0ZWQtdGV4dD1cIiRjdHJsLk1VTFRJUExFX1NUQVRVU0VTX1NFTEVDVEVEIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIG5vbmUtc2VsZWN0ZWQtdGV4dD1cIicnXCIgY2hlY2tlZD1cIiRjdHJsLnN0YXR1c2VzXCIgc2hvdy1jbGVhcj1cInt7JGN0cmwuc2hvd0NsZWFyfX1cIlxyXG4gICAgICAgICAgICAgICAgPjwvY2hlY2tsaXN0Y29tYm8+YFxyXG59KVxyXG5jbGFzcyBTdGF0dXNDaGVja2xpc3RDb21ibyBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfc3RhdHVzZXM6IHsga2V5OiBTdGF0dXMsIHRleHQ6IHN0cmluZyB9W107XHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIEFDVElWRV9TVEFUVVNFUyA9IFwiQUNUSVZFX1NUQVRVU0VTXCJcclxuICAgIHByaXZhdGUgQUxMX1NUQVRVU0VTX1NFTEVDVEVEID0gXCJBTExfU1RBVFVTRVNfU0VMRUNURURcIlxyXG4gICAgcHJpdmF0ZSBBQ1RJVkVfU1RBVFVTRVNfU0VMRUNURUQgPSBcIkFDVElWRV9TVEFUVVNFU19TRUxFQ1RFRFwiXHJcbiAgICBwcml2YXRlIE1VTFRJUExFX1NUQVRVU0VTX1NFTEVDVEVEID0gXCJNVUxUSVBMRV9TVEFUVVNFU19TRUxFQ1RFRFwiXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gPHsga2V5OiBTdGF0dXMsIHRleHQ6IHN0cmluZyB9W10+W1xyXG4gICAgICAgICAgICB7IGtleTogJ29wZW4nLCB0ZXh0OiAnT1BFTicgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdpblByb2dyZXNzJywgdGV4dDogJ0lOUFJPR1JFU1MnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnd2FpdGluZ0ZvclVhdCcsIHRleHQ6ICdXQUlUSU5HRk9SVUFUJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ3JlYWR5Rm9yVWF0JywgdGV4dDogJ1JFQURZRk9SVUFUJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ2FwcHJvdmVkJywgdGV4dDogJ0FQUFJPVkVEJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ3Jld29yaycsIHRleHQ6ICdSRVdPUksnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnd2FpdGluZ0ZvclJlbGVhc2UnLCB0ZXh0OiAnV0FJVElOR0ZPUlJFTEVBU0UnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnZGVsaXZlcmVkJywgdGV4dDogJ0RFTElWRVJFRCcgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdoYW5kbGVkJywgdGV4dDogJ0hBTkRMRUQnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnY2FuY2VsbGVkJywgdGV4dDogJ0NBTkNFTExFRCcgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdjbG9zZWQnLCB0ZXh0OiAnQ0xPU0VEJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ2FuYWx5c2lzJywgdGV4dDogJ0FOQUxZU0lTJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ3BhcmtlZCcsIHRleHQ6ICdQQVJLRUQnIH1dLnNvcnQoKGEsIGIpID0+IGEua2V5ID4gYi5rZXkgPyAxIDogLTEpO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlSXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHRyYW5zbGF0ZUl0ZW1zKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLm9uTG9hZGVkO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLm1hcChpID0+IHsgaS50ZXh0ID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKGkudGV4dCk7IHJldHVybiBpOyB9KS5zb3J0KChhLCBiKSA9PiBhLnRleHQgPiBiLnRleHQgPyAxIDogLTEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWN0aXZlU3Vic2V0OiBTdGF0dXNbXSA9IFsnb3BlbicsICdpblByb2dyZXNzJywgJ3dhaXRpbmdGb3JVYXQnLCAncmVhZHlGb3JVYXQnLCAnYXBwcm92ZWQnLCAncmV3b3JrJywgJ3dhaXRpbmdGb3JSZWxlYXNlJywgJ2FuYWx5c2lzJywgJ3BhcmtlZCddO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IHN0YXR1c2VzKCk6IHsga2V5OiBTdGF0dXMsIHRleHQ6IHN0cmluZyB9W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXNlcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgc3RhdHVzZXMoc3RhdHVzZXM6IHsga2V5OiBTdGF0dXMsIHRleHQ6IHN0cmluZyB9W10pIHtcclxuICAgICAgICB0aGlzLl9zdGF0dXNlcyA9IHN0YXR1c2VzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2hvd0NsZWFyO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgc2hvd0NsZWFyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93Q2xlYXI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNob3dDbGVhcih2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zaG93Q2xlYXIgPSB2YWwgPT09IHRydWUgfHwgdmFsID09PSBcInRydWVcIjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgaXRlbXM6IHsga2V5OiBTdGF0dXMsIHRleHQ6IHN0cmluZyB9W107XHJcblxyXG4gICAgcHVibGljIHN0YXR1c2Vzc2VsZWN0ZWQoc2VsZWN0ZWQ6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXNlcyA9IHNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMub25TdGF0dXNlc0NoYW5nZWQoeyBzdGF0dXNlczogdGhpcy5zdGF0dXNlcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uU3RhdHVzZXNDaGFuZ2VkOiAoYXJnczogeyBzdGF0dXNlczogYW55W10gfSkgPT4gdm9pZDtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgdmFsdWVTdWJtaXQ6IE91dHB1dEFyZ3M8eyBzdGF0dXNlczogeyBrZXk6IHN0cmluZywgdGV4dDogc3RyaW5nIH1bXSB9PjtcclxuICAgIHB1YmxpYyBwYXNzVmFsdWVTdWJtaXQoc2VsZWN0ZWQ6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXNlcyA9IHNlbGVjdGVkO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlU3VibWl0KSB0aGlzLnZhbHVlU3VibWl0KHsgc3RhdHVzZXM6IHRoaXMuc3RhdHVzZXMgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgQ29tcG9uZW50LCBBdHRyaWJ1dGUsIElucHV0LCBPdXRwdXQsIElDb21wb25lbnQsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VDYXNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvc2VydmljZUNhc2VTZXJ2aWNlXCJcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiXHJcbmltcG9ydCB7IENhc2VGaWxlRGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZmlsZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAnc3RhdHVzYnV0dG9ucycsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJzdGF0dXNidXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nLXJlcGVhdD1cImJ1dHRvbiBpbiAkY3RybC5idXR0b25zXCIgY2xhc3M9XCJzdGF0dXNidXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8cHVzaGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7YnV0dG9uLm5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzZGlzYWJsZWQ9XCIkY3RybC5yZWFkT25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtYXBwZW5kLXRvLWJvZHk9XCJ0cnVlXCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiAgdG9vbHRpcC1jbGFzcz1cImN1c3RvbVRvb2x0aXBUQlwiIHVpYi10b29sdGlwPVwie3skY3RybC50b29sdGlwKGJ1dHRvbi50b29sdGlwbmFtZSl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnRleHQ9XCJ7e2J1dHRvbi5uYW1lIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrZWQ9XCIkY3RybC5oYW5kbGVTdGF0dXMoYnV0dG9uLmlkKVwiPjwvcHVzaGJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdGF0dXNCdXR0b25zIHtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBidXR0b25zOiBTdGF0dXNCdXR0b25bXTtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25zdGF0dXM6IChhcmdzOiB7IHN0YXR1czogc3RyaW5nIH0pID0+IHZvaWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgcHVibGljIHRvb2x0aXAobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkNIQU5HRV9TVEFUVVNfVE9fMFwiKS5yZXBsYWNlKFwiMFwiLCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUobmFtZS50b1VwcGVyQ2FzZSgpKSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZVN0YXR1cyhzdGF0dXM6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMub25zdGF0dXMoeyBzdGF0dXM6IHN0YXR1cyB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdGF0dXNCdXR0b24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWQ6IGFueTtcclxuICAgIHRvb2x0aXBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbiIsIu+7v2ltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IElSb3V0aW5nQ29tcG9uZW50LCBSb3V0ZUNvbmZpZyB9IGZyb20gXCJAZmlxYXMvbmdjb21wb25lbnRyb3V0ZXJcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgU3RhcnRSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWxzL2hvbWVcIlxyXG5pbXBvcnQgeyBIb21lU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvaG9tZVNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvVHJhbnNsYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCAqIGFzIGhvdGtleXMgZnJvbSAnYW5ndWxhci1ob3RrZXlzJztcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJob21lXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9ob21lLmh0bWxcIixcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBcImFwcGxpY2F0aW9uXCI6IFwiXmFwcGxpY2F0aW9uXCJcclxuICAgIH1cclxufSlcclxuQFJvdXRlQ29uZmlnKFtcclxuICAgIHsgcGF0aDogJy9zZWFyY2gnLCBuYW1lOiBcIlNlYXJjaFwiLCBjb21wb25lbnQ6IFwic2VhcmNoXCIgfSxcclxuICAgIHsgcGF0aDogJy9wcm9qZWN0JywgbmFtZTogXCJQcm9qZWN0XCIsIGNvbXBvbmVudDogXCJwcm9qZWN0VGFiXCIgfSxcclxuICAgIHsgcGF0aDogJy8qKicsIG5hbWU6IFwiU2ltcGxlU2VhcmNoXCIsIGNvbXBvbmVudDogXCJzZWFyY2hUYWJcIiwgdXNlQXNEZWZhdWx0OiB0cnVlIH1cclxuXVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBIb21lIGltcGxlbWVudHMgSVJvdXRpbmdDb21wb25lbnQge1xyXG4gICAgcHVibGljIGFjdGl2ZTE6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYWN0aXZlMjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBhY3RpdmVNZW51SXRlbSA9IFwiaG9tZVwiO1xyXG4gICAgcHVibGljIGZ1bGxNZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZGl2aWRlclRvb2x0aXA6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9zdGFydFJlc3VsdDogU3RhcnRSZXN1bHQ7XHJcbiAgICBwdWJsaWMgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uO1xyXG5cclxuICAgIHByaXZhdGUgaG90a2V5OiBuZy5ob3RrZXlzLkhvdGtleVtdO1xyXG4gICAgcHJpdmF0ZSB0YWJzSG90a2V5czogbmcuaG90a2V5cy5Ib3RrZXk7XHJcblxyXG4gICAgQElucHV0KCkgJHJvdXRlcjogbmcuUm91dGVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBob21lU2VydmljZTogSG9tZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHNjb3BlJykgJHNjb3BlOiBuZy5JU2NvcGUsXHJcbiAgICAgICAgQEluamVjdCgnJGxvY2F0aW9uJykgcHJpdmF0ZSAkbG9jYXRpb246IG5nLklMb2NhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnaG90a2V5cycpIHByaXZhdGUgaG90a2V5czogbmcuaG90a2V5cy5Ib3RrZXlzUHJvdmlkZXJcclxuICAgICkge1xyXG4gICAgICAgIGhvdGtleXMuYmluZFRvKCRzY29wZSk7XHJcbiAgICAgICAgdGhpcy5ob3RrZXkgPSBbdGhpcy50YWJzSG90a2V5cyA9IHtcclxuICAgICAgICAgICAgY29tYm86IFsnYWx0KzEnXSxcclxuICAgICAgICAgICAgYWxsb3dJbjogWydJTlBVVCcsICdTRUxFQ1QnLCAnVEVYVEFSRUEnXSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoWydIb21lJywgJ1NpbXBsZVNlYXJjaCddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgY29tYm86IFsnYWx0KzInXSxcclxuICAgICAgICAgICAgYWxsb3dJbjogWydJTlBVVCcsICdTRUxFQ1QnLCAnVEVYVEFSRUEnXSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoWydIb21lJywgJ1Byb2plY3RTZWFyY2gnXSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBjb21ibzogWydhbHQrMyddLFxyXG4gICAgICAgICAgICBhbGxvd0luOiBbJ0lOUFVUJywgJ1NFTEVDVCcsICdURVhUQVJFQSddLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5uYXZpZ2F0ZShbJ0hvbWUnLCAnU2VhcmNoJ10pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25BY3RpdmF0ZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgICAgIHRoaXMuZnVsbE1lbnUgPSAhIW5leHQucGFyYW1zWydtZW51J107XHJcbiAgICAgICAgaWYgKG5leHRbJ3JvdXRlTmFtZSddID09ICdEZWZhdWx0Jykge1xyXG4gICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoWydIb21lJywgJ1NpbXBsZVNlYXJjaCcsIG5leHQucGFyYW1zXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiRsb2NhdGlvbi5zZWFyY2goKVsncmVmZXJlciddID09ICdwcm9qZWN0U2VhcmNoJykge1xyXG4gICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoWydIb21lJywgJ1Byb2plY3RTZWFyY2gnLCBuZXh0LnBhcmFtc10pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kbG9jYXRpb24uc2VhcmNoKClbJ3JlZmVyZXInXSA9PSAnc2VhcmNoJykge1xyXG4gICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoWydIb21lJywgJ1NlYXJjaCcsIG5leHQucGFyYW1zXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25SZXVzZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgYWN0aXZlVGFiKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy4kbG9jYXRpb24udXJsKCk7XHJcbiAgICAgICAgc3dpdGNoIChjdXJyZW50LnN1YnN0cmluZyhjdXJyZW50Lmxhc3RJbmRleE9mKCcvJykpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCIvcHJvamVjdFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGNhc2UgXCIvc2VhcmNoXCI6IC8vIGV4dGVuZGVkLXNlYXJjaFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGhvbWUvY29tcGFjdC1zZWFyY2hcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuZGl2aWRlclRvb2x0aXAgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUodGhpcy5mdWxsTWVudSA/IFwiQ09MTEFQU0VfVE9PTFRJUFwiIDogXCJFWFBBTkRfVE9PTFRJUFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5ob3RrZXkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhvdGtleXMuYWRkKGtleSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgICRvbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5ob3RrZXkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhvdGtleXMuZGVsKGtleS5jb21ibyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRnVsbE1lbnVUb2dnbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mdWxsTWVudSA9ICF0aGlzLmZ1bGxNZW51O1xyXG4gICAgICAgIHRoaXMuZGl2aWRlclRvb2x0aXAgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUodGhpcy5mdWxsTWVudSA/IFwiQ09MTEFQU0VfVE9PTFRJUFwiIDogXCJFWFBBTkRfVE9PTFRJUFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GdWxsTWVudUtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICBjYXNlIDMyOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsbE1lbnUgPSAhdGhpcy5mdWxsTWVudTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRhYmZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgdGFiRm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy50YWJmb2N1c2VkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyB0YWJCbHVyKCkge1xyXG4gICAgICAgIHRoaXMudGFiZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiXHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIlxyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZW51SW5mb3JtYXRpb24ge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGljb246IHN0cmluZztcclxuICAgIHRvb2x0aXA6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlc01lbnVJbmZvcm1hdGlvbiB7XHJcbiAgICBtZW51aW5mb3JtYXRpb246IE1lbnVJbmZvcm1hdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZW51RW50cnkge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGxpbms6IHN0cmluZ1tdO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIHN1YnRpdGxlOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWdobGlnaHRpY29uPzogc3RyaW5nO1xyXG4gICAgaXNob21lPzogYm9vbGVhbjtcclxuICAgIGlzdmlzaWJsZTogYm9vbGVhbjtcclxuICAgIGlzZGlzYWJsZWQ6ICgpID0+IGJvb2xlYW47XHJcbiAgICBpdGVtPzogTWFpbk1lbnVJdGVtO1xyXG4gICAgaXNmb2N1cz86IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJtYWlubWVudVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmlld3MvbWFpbk1lbnUuaHRtbFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFpbk1lbnUgaW1wbGVtZW50cyBJQ29tcG9uZW50IHtcclxuICAgIHByaXZhdGUgbWVudUl0ZW1zOiBNZW51RW50cnlbXSA9IFtcclxuICAgICAgICB7IGlkOiAnaG9tZScsIGxpbms6IFtcIkhvbWVcIl0sIHRpdGxlOiAnSE9NRScsIHN1YnRpdGxlOiAnJywgaWNvbjogJ2ljb24taG9tZScsIGlzaG9tZTogdHJ1ZSwgaXN2aXNpYmxlOiB0cnVlLCBpc2Rpc2FibGVkOiAoKSA9PiBmYWxzZSB9LFxyXG4gICAgICAgIHsgaWQ6ICdwcm9ibGVtJywgbGluazogW1wiUHJvYmxlbVwiLCBcIk5ld1wiXSwgdGl0bGU6ICdSRVBPUlRfQlVHJywgc3VidGl0bGU6ICdSRVBPUlRfQlVHX1NVQicsIGljb246ICdpY29uLXByb2JsZW0nLCBpc3Zpc2libGU6IHRydWUsIGlzZGlzYWJsZWQ6ICgpID0+IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJGUVNcIl0pIH0sXHJcbiAgICAgICAgeyBpZDogJ3JlcXVlc3QnLCBsaW5rOiBbXCJSZXF1ZXN0XCIsIFwiTmV3XCJdLCB0aXRsZTogJ0RPX1JFUVVFU1QnLCBzdWJ0aXRsZTogJ0RPX1JFUVVFU1RfU1VCJywgaWNvbjogJ2ljb24tcmVxdWVzdCcsIGlzdmlzaWJsZTogdHJ1ZSwgaXNkaXNhYmxlZDogKCkgPT4gdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5jdXJyZW50Um9sZUluKFtcIkZRU1wiXSkgfSxcclxuICAgICAgICB7IGlkOiAnY29tcGxpbWVudCcsIGxpbms6IFtcIkNvbXBsaW1lbnRcIl0sIHRpdGxlOiAnR0lWRV9DT01QTElNRU5UJywgc3VidGl0bGU6ICdHSVZFX0NPTVBMSU1FTlRfU1VCJywgaWNvbjogJ2ljb24tY29tcGxpbWVudCcsIGlzdmlzaWJsZTogdHJ1ZSwgaXNkaXNhYmxlZDogKCkgPT4gZmFsc2UgfSxcclxuICAgICAgICB7IGlkOiAnY29tcGxhaW50JywgbGluazogW1wiQ29tcGxhaW50XCJdLCB0aXRsZTogJ0lTU1VFX0NPTVBMQUlOVCcsIHN1YnRpdGxlOiAnSVNTVUVfQ09NUExBSU5UX1NVQicsIGljb246ICdpY29uLWNvbXBsYWludCcsIGlzdmlzaWJsZTogdHJ1ZSwgaXNkaXNhYmxlZDogKCkgPT4gZmFsc2UgfSxcclxuICAgICAgICB7IGlkOiAncmVwb3J0cycsIGxpbms6IFtcIlJlcG9ydHNcIl0sIHRpdGxlOiAnU0VSVklDRV9DQVNFX1JFUE9SVFMnLCBzdWJ0aXRsZTogJ1NFUlZJQ0VfQ0FTRV9SRVBPUlRTX1NVQicsIGljb246ICdpY29uLVJlcG9ydCcsIGlzdmlzaWJsZTogdHJ1ZSwgaXNkaXNhYmxlZDogKCkgPT4gZmFsc2UgfSxcclxuICAgICAgICB7IGlkOiAnb3RoZXInLCBsaW5rOiBbXCJPdGhlclwiXSwgdGl0bGU6ICdPVEhFUl9GVU5DVElPTlMnLCBzdWJ0aXRsZTogJ09USEVSX0ZVTkNUSU9OU19TVUInLCBpY29uOiAnaWNvbi1vdGhlcicsIGlzdmlzaWJsZTogZmFsc2UsIGlzZGlzYWJsZWQ6ICgpID0+IGZhbHNlIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJycpIHByaXZhdGUgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR3aW5kb3cnKSBwcml2YXRlICR3aW5kb3c6IG5nLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290Um91dGVyJykgcHJpdmF0ZSAkcm91dGVyOiBhbmd1bGFyLlJvdXRlcixcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLmFqdXN0RHluYW1pY0hUTUxMYXlvdXQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2lucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAoPEhUTUxFbGVtZW50PihlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21lbnVjb250ZW50JykuaXRlbSgwKSkpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFqdXN0RHluYW1pY0hUTUxMYXlvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWp1c3REeW5hbWljSFRNTExheW91dCgpIHtcclxuICAgICAgICBpZiAoKDxIVE1MRWxlbWVudD50aGlzLiRlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21lbnVjb250ZW50JykuaXRlbSgwKSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA+IDE3NSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlbWVudFRvb2xiYXIgPSBcImxlZnRcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlbWVudFRvb2xiYXIgPSBcInJpZ2h0XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwbGFjZW1lbnRUb29sYmFyOiBzdHJpbmcgPSBcInJpZ2h0XCJcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZWhvbWU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZm9jdXNpbnB1dDogYm9vbGVhbjtcclxuXHJcbiAgICBwcml2YXRlIF9hY3RpdmVNZW51SXRlbTogc3RyaW5nO1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTWVudUl0ZW0oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTWVudUl0ZW07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGFjdGl2ZU1lbnVJdGVtKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZU1lbnVJdGVtID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9oaWdobGlnaHRNZW51SXRlbTogc3RyaW5nO1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgaGlnaGxpZ2h0TWVudUl0ZW0oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0TWVudUl0ZW07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGhpZ2hsaWdodE1lbnVJdGVtKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodE1lbnVJdGVtID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uQmx1cigpIHtcclxuICAgICAgICBpZiAodGhpcy5ob3ZlcmVkKVxyXG4gICAgICAgICAgICB0aGlzLmhvdmVyZWQuaXNmb2N1cyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Gb2N1cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaG92ZXJlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmhvdmVyZWQgPSB0aGlzLmFsbG93ZWRJdGVtcy5zaGlmdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5ob3ZlcmVkKVxyXG4gICAgICAgICAgICB0aGlzLmhvdmVyZWQuaXNmb2N1cyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbktleSgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKCRldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMzg6XHJcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZSgtMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgNDA6XHJcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZSgxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBob3ZlcmVkOiBNZW51RW50cnkgPSBudWxsO1xyXG5cclxuICAgIHByaXZhdGUgZ2V0IGFsbG93ZWRJdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZW51SXRlbXMuZmlsdGVyKHggPT4geC5pc3Zpc2libGUgJiYgISh4LmlzaG9tZSAmJiB0aGlzLmhpZGVob21lKSAmJiB4LmlkICE9IHRoaXMuYWN0aXZlTWVudUl0ZW0gJiYgIXguaXNkaXNhYmxlZCgpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBtb3ZlKGRpcmVjdGlvbjogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIG5ld2luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5hbGxvd2VkSXRlbXMubGVuZ3RoIC0gMSwgdGhpcy5hbGxvd2VkSXRlbXMuaW5kZXhPZih0aGlzLmhvdmVyZWQpICsgZGlyZWN0aW9uKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaG92ZXJlZCAhPSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLmhvdmVyZWQuaXNmb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaG92ZXJlZCA9IHRoaXMuYWxsb3dlZEl0ZW1zW25ld2luZGV4XTtcclxuICAgICAgICB0aGlzLmhvdmVyZWQuaXNmb2N1cyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZWxlY3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaG92ZXJlZCAhPSBudWxsICYmICF0aGlzLmhvdmVyZWQuaXNkaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZC5pc2ZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5uYXZpZ2F0ZSh0aGlzLmhvdmVyZWQubGluayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcIm1haW5tZW51aXRlbVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmlld3MvbWFpbk1lbnVJdGVtLmh0bWxcIixcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBtYWluTWVudTogXCJebWFpbm1lbnVcIlxyXG4gICAgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFpbk1lbnVJdGVtIHtcclxuICAgIHByaXZhdGUgX3Nob3c6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZ2V0IGlzdmlzaWJsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvdyAmJiAoIXRoaXMuZW50cnkuaXNob21lIHx8ICF0aGlzLmV4cGFuZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2VtZW50VG9vbGJhcjogc3RyaW5nID0gXCJyaWdodFwiO1xyXG5cclxuICAgIHB1YmxpYyBtYWluTWVudTogTWFpbk1lbnU7XHJcblxyXG4gICAgcHVibGljIGdldCBpc2ZvY3VzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudHJ5ICYmIHRoaXMuZW50cnkuaXNmb2N1cztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzaGlnaGxpZ2h0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1haW5NZW51ICYmIHRoaXMubWFpbk1lbnUuaGlnaGxpZ2h0TWVudUl0ZW0gPT0gdGhpcy5pZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzYWN0aXZlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1haW5NZW51ICYmIHRoaXMubWFpbk1lbnUuYWN0aXZlTWVudUl0ZW0gPT0gdGhpcy5pZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cnkgPyB0aGlzLmVudHJ5LmlzZGlzYWJsZWQoKSA6IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYWluTWVudSAmJiB0aGlzLm1haW5NZW51LmV4cGFuZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbGluaygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZW50cnkgJiYgIXRoaXMuaXNkaXNhYmxlZCkgPyB0aGlzLmVudHJ5LmxpbmsgOiBbJ2hvbWUnXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5lbnRyeSAmJiAhdGhpcy5pc2Rpc2FibGVkKSA/IHRoaXMuZW50cnkudGl0bGUgOiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaWNvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc2hpZ2hsaWdodCAmJiB0aGlzLmVudHJ5ICYmIHRoaXMuZW50cnkuaGlnaGxpZ2h0aWNvbiA/XHJcbiAgICAgICAgICAgIHRoaXMuZW50cnkuaGlnaGxpZ2h0aWNvbiA6XHJcbiAgICAgICAgICAgIHRoaXMuZW50cnkgP1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnRyeS5pY29uIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudHJ5ID8gdGhpcy5lbnRyeS5pZCA6IFwiLTFcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9lbnRyeTogTWVudUVudHJ5O1xyXG4gICAgQElucHV0KCkgcHVibGljIGdldCBlbnRyeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW50cnk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGVudHJ5KGVudHJ5OiBNZW51RW50cnkpIHtcclxuICAgICAgICB0aGlzLl9lbnRyeSA9IGVudHJ5O1xyXG4gICAgICAgIGlmIChlbnRyeSlcclxuICAgICAgICAgICAgZW50cnkuaXRlbSA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9zaG93ID0gdGhpcy5lbnRyeS5pc3Zpc2libGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCAgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9nZW5lcmFsXCI7XHJcbmltcG9ydCB7IElzUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvaXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcIm90aGVyXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9vdGhlci5odG1sXCIsXHJcbiAgICByZXF1aXJlOiB7XHJcbiAgICAgICAgYXBwbGljYXRpb246IFwiXmFwcGxpY2F0aW9uXCIsXHJcbiAgICB9XHJcbn0pXHJcbmNsYXNzIE90aGVyIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBwcml2YXRlICRyb3V0ZXI6IG5nLlJvdXRlcjtcclxuICAgIHB1YmxpYyBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaXNQcm9jZXNzaW5nU2VydmljZTogSXNQcm9jZXNzaW5nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckd2luZG93JykgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcScpIHByaXZhdGUgJHE6IG5nLklRU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZVxyXG5cclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIC8vICAgIHByaXZhdGUgc2VsZWN0ZWRDdXN0b21lcnM7XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLlRpdGxlID0gXCJPVEhFUl9PUFRJT05TXCI7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNZW51SXRlbSA9ICdvdGhlcic7XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1lbnVJdGVtID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFRpdGxlOiBzdHJpbmcgPSAnJztcclxuICAgIHB1YmxpYyBUaXRsZTI6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIGFjdGl2ZU1lbnVJdGVtOiBzdHJpbmc7XHJcbn0iLCLvu79pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBJUm91dGluZ0NvbXBvbmVudCwgUm91dGVDb25maWcgfSBmcm9tIFwiQGZpcWFzL25nY29tcG9uZW50cm91dGVyXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIlxyXG5pbXBvcnQgeyBQcm9ibGVtIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiXHJcbmltcG9ydCB7IFNlcnZpY2VDYXNlQmFzZSB9IGZyb20gXCIuLi9nZW5lcmFsL3NlcnZpY2VDYXNlQmFzZVwiXHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5pbXBvcnQgeyBTYXZlRGlhbG9nIH0gZnJvbSBcIi4uL2dlbmVyYWwvc2F2ZWRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcInByb2JsZW1CYXNlXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogU2VydmljZUNhc2VCYXNlLnRlbXBsYXRlXHJcbn0pXHJcbkBSb3V0ZUNvbmZpZyhbXHJcbiAgICB7IHBhdGg6ICcvbmV3JywgbmFtZTogXCJOZXdcIiwgY29tcG9uZW50OiBcInByb2JsZW1FbnRyeVwiLCB1c2VBc0RlZmF1bHQ6IHRydWUgfSxcclxuICAgIHsgcGF0aDogJy9lZGl0LzpudW1iZXInLCBuYW1lOiBcIkVkaXRcIiwgY29tcG9uZW50OiBcInByb2JsZW1FZGl0XCIgfSxcclxuICAgIHsgcGF0aDogJy9lZGl0LzpudW1iZXIvOmlkJywgbmFtZTogXCJFZGl0V2l0aElkXCIsIGNvbXBvbmVudDogXCJwcm9ibGVtRWRpdFwiIH1cclxuXVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBQcm9ibGVtQmFzZSBleHRlbmRzIFNlcnZpY2VDYXNlQmFzZTxQcm9ibGVtPiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgpIHByb3RlY3RlZCBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByb3RlY3RlZCBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFJvdXRlcicpIHJvb3RSb3V0ZXI6IGFuZ3VsYXIuUm91dGVyLFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGxvY2F0aW9uJykgbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGF1dGhvcml6YXRpb25TZXJ2aWNlLCBjYWNoZVNlcnZpY2UsIHJvb3RSb3V0ZXIsIHRpbWVvdXQsIGxvY2F0aW9uKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwi77u/aW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3NlcnZpY2VDYXNlU2VydmljZVwiXHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvblNlcnZpY2VcIlxyXG5pbXBvcnQgeyBQcm9ibGVtIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiXHJcbmltcG9ydCB7IENhc2VGaWxlRGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZmlsZVwiXHJcbmltcG9ydCB7IFByb2JsZW1CYXNlIH0gZnJvbSBcIi4vcHJvYmxlbUJhc2VcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VFZGl0LCBDYXNlVHlwZSB9IGZyb20gXCIuLi9nZW5lcmFsL3NlcnZpY2VDYXNlRWRpdFwiO1xyXG5pbXBvcnQgeyBGZWVkYmFja1N0YXR1c0xpbmsgfSBmcm9tIFwiLi4vZ2VuZXJhbC9jb252ZXJzYXRpb25lbnRyeVwiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2V2ZXJpdHksIEltcGFjdCwgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5pbXBvcnQgeyBTdGF0dXNCdXR0b24gfSBmcm9tIFwiLi4vZ2VuZXJhbC9zdGF0dXNidXR0b25zXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9UcmFuc2xhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2F2ZURpYWxvZyB9IGZyb20gXCIuLi9nZW5lcmFsL3NhdmVkaWFsb2dcIjtcclxuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NlcnZpY2VCYXNlXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9GaWxlU2VydmljZVwiO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvdXNlclNlcnZpY2VcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwicHJvYmxlbUVkaXRcIixcclxuICAgIHRlbXBsYXRlVXJsOiBTZXJ2aWNlQ2FzZUVkaXQudGVtcGxhdGUsXHJcbiAgICByZXF1aXJlOiB7XHJcbiAgICAgICAgYXBwbGljYXRpb246IFwiXmFwcGxpY2F0aW9uXCIsXHJcbiAgICAgICAgQmFzZTogXCJecHJvYmxlbUJhc2VcIlxyXG4gICAgfVxyXG59KVxyXG5jbGFzcyBQcm9ibGVtRWRpdCBleHRlbmRzIFNlcnZpY2VDYXNlRWRpdDxQcm9ibGVtPiB7XHJcbiAgICBwcm90ZWN0ZWQgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uO1xyXG4gICAgcHJvdGVjdGVkIEJhc2U6IFByb2JsZW1CYXNlO1xyXG4gICAgQElucHV0KCkgcHJvdGVjdGVkICRyb3V0ZXI6IG5nLlJvdXRlcjtcclxuXHJcbiAgICBwdWJsaWMgY2FzZXR5cGU6IENhc2VUeXBlID0gJ3Byb2JsZW0nO1xyXG5cclxuICAgIHByaXZhdGUgaXNwcm9kOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbCcpICRtb2RhbDogYW5ndWxhci51aS5ib290c3RyYXAuSU1vZGFsU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgc2VydmljZUNhc2VTZXJ2aWNlOiBTZXJ2aWNlQ2FzZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGlzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIFRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSAkYXV0aDogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRxJykgJHE6IG5nLklRU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSAkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRzY29wZScpICRzY29wZTogbmcuSVNjb3BlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290U2NvcGUnKSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ0NvbnZlcnNhdGlvblNldHRpbmdzJykgY29udmVyc2F0aW9uU2V0dGluZ3M6IENvbnZlcnNhdGlvblNldHRpbmdzLFxyXG4gICAgICAgIEBJbmplY3QoKSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBzYXZlRGlhbG9nOiBTYXZlRGlhbG9nLFxyXG4gICAgICAgIEBJbmplY3QoJyRlbGVtZW50JykgJGVsZW1lbnQ6IG5nLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCdob3RrZXlzJykgaG90a2V5czogbmcuaG90a2V5cy5Ib3RrZXlzUHJvdmlkZXIsXHJcbiAgICAgICAgQEluamVjdChGaWxlU2VydmljZS5zZWxlY3RvcikgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoVXNlclNlcnZpY2Uuc2VsZWN0b3IpIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFJvdXRlcicpIHByaXZhdGUgJHJvb3RSb3V0ZXI6IG5nLlJvdXRlcixcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGF1dGhvcml6YXRpb25TZXJ2aWNlLCBzZXJ2aWNlQ2FzZVNlcnZpY2UsIGlzUHJvY2Vzc2luZ1NlcnZpY2UsIFRyYW5zbGF0aW9uU2VydmljZSwgJGF1dGgsICRxLCBjYWNoZVNlcnZpY2UsICR0aW1lb3V0LCAkbW9kYWwsIGNvbnZlcnNhdGlvblNldHRpbmdzLCBsb2dTZXJ2aWNlLCBkaWFsb2dTZXJ2aWNlLCBzYXZlRGlhbG9nLCAkc2NvcGUsICRyb290U2NvcGUsICRlbGVtZW50LCBob3RrZXlzLCBmaWxlU2VydmljZSwgdXNlclNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvbkluaXQoKSB7XHJcbiAgICAgICAgdmFyIHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLm1pbkRlYWRsaW5lID0gdG9kYXk7XHJcbiAgICAgICAgdGhpcy5CYXNlLlRpdGxlID0gXCJQUk9CTEVNX05PXCI7XHJcbiAgICAgICAgdGhpcy5CYXNlLmhpZ2hsaWdodE1lbnVJdGVtID0gJ3Byb2JsZW0nO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLkJhc2UuVGl0bGUgPSAnJztcclxuICAgICAgICB0aGlzLkJhc2UuaGlnaGxpZ2h0TWVudUl0ZW0gPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgbG9hZERhdGEoKSB7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLlNlcnZpY2VDYXNlO1xyXG4gICAgICAgIHRoaXMuaXNwcm9kID0gZGF0YS5lbnZpcm9ubWVudCA9PT0gJ3Byb2QnO1xyXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24uZm9yY2VkQ3VzdG9tZXIgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi5jdXN0b21lcnMpLmZpbHRlcih4ID0+IHgua2V5ID09IGRhdGEuY3VzdG9tZXIuaHJlZi5yZXBsYWNlKCdjdXN0b21lci8nLCAnJykpLm1hcChjID0+IGMudGV4dCkucG9wKCk7XHJcbiAgICAgICAgdGhpcy5kZWFkbGluZURUID0gZGF0YS5yZXF1ZXN0ZWREZWFkbGluZSA/IG5ldyBEYXRlKGRhdGEucmVxdWVzdGVkRGVhZGxpbmUpIDogbnVsbDtcclxuICAgICAgICB0aGlzLnN0YXR1c2xpbmtzID0gdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcyAmJiB0aGlzLlNlcnZpY2VDYXNlLmFjdGlvbkxpbmtzLnN0YXR1c0xpbmtzID8gT2JqZWN0LmtleXModGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5zdGF0dXNMaW5rcykubWFwPFN0YXR1c0J1dHRvbj4oeCA9PiB7IHJldHVybiB7IGlkOiB4LCBuYW1lOiBcImFjdF9cIiArIHgsIHRvb2x0aXBuYW1lOiB4IH0gfSkgOiBbXTtcclxuICAgICAgICB0aGlzLmZlZWRiYWNrTGlua3MgPSB0aGlzLlNlcnZpY2VDYXNlLmFjdGlvbkxpbmtzICYmIHRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3MuZmVlZGJhY2tTdGF0dXNMaW5rcyA/IE9iamVjdC5rZXlzKHRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3MuZmVlZGJhY2tTdGF0dXNMaW5rcykubWFwPEZlZWRiYWNrU3RhdHVzTGluaz4obCA9PiB7IHJldHVybiB7IGlkOiBsLCBuYW1lOiBcImFjdF9mZWVkYmFja19cIiArIGwsIGFjdDogdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5mZWVkYmFja1N0YXR1c0xpbmtzW2xdLmFjdGlvbiB9IH0pIDogW107XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICB0aGlzLkdldEhpc3RvcnlBbmRDb3JyZXNwb25kZW5jZSgpLFxyXG4gICAgICAgICAgICB0aGlzLkdldEZpbGVzKClcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgUmVsb2FkU2VydmljZUNhc2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU2VydmljZUNhc2UudHlwZSAhPSAnYnVnJykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzVGFiRGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXREaXJ0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLiRyb290Um91dGVyLm5hdmlnYXRlKFsnUmVxdWVzdCcsICdFZGl0JywgeyBudW1iZXI6IHRoaXMuU2VydmljZUNhc2UuY2FzZU51bWJlciB9XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgc3VwZXIuUmVsb2FkU2VydmljZUNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIG9uTmV3QXR0YWNobWVudChmaWxlOiBDYXNlRmlsZURhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuQWRkTmV3QXR0YWNobWVudChmaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblByaW9yaXR5Q2hhbmdlZChwcmlvcml0eTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMubG9hZGluZ0RhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuU2VydmljZUNhc2UucHJpb3JpdHkgIT0gcHJpb3JpdHkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2UucHJpb3JpdHkgPSBwcmlvcml0eTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuVXBkYXRlUHJvYmxlbSh0aGlzLlNlcnZpY2VDYXNlLmlkLCB0aGlzLlNlcnZpY2VDYXNlKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dNYW5hZ2VyLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnRURJVF9QUklPUklUWV9QUk9CTEVNX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7IHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpOyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRW52aXJvbm1lbnRDaGFuZ2VkKGVudmlyb25tZW50czogRW52aXJvbm1lbnRbXSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmdEYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnZpcm9ubWVudCA9IChlbnZpcm9ubWVudHMgJiYgZW52aXJvbm1lbnRzLmxlbmd0aCA+IDApID8gZW52aXJvbm1lbnRzWzBdIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudmlyb25tZW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5TZXJ2aWNlQ2FzZS5lbnZpcm9ubWVudCAhPSBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVudmlyb25tZW50ID09IFwidWF0XCIgJiYgW1wibGV2ZWwxXCIsIFwibGV2ZWwyXCJdLmluZGV4T2YodGhpcy5TZXJ2aWNlQ2FzZS5zZXZlcml0eSkgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gU2V2ZXJpdHlDaGFuZ2VNb2RhbC5ObztcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLiRtb2RhbC5vcGVuKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFNldmVyaXR5Q2hhbmdlTW9kYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyQXM6IFwiJGN0cmxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBcInNldmVyaXR5Y2hhbmdlLmh0bWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogXCJsZXZlbDNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL21vZGFsIGRpc21pc3NlZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTZXZlcml0eUNoYW5nZU1vZGFsLlllcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3JnID0gdGhpcy5TZXJ2aWNlQ2FzZS5lbnZpcm9ubWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiR0aW1lb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2UuZW52aXJvbm1lbnQgPSBvcmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2Uuc2V2ZXJpdHkgPSBcImxldmVsM1wiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5VcGRhdGVQcm9ibGVtKHRoaXMuU2VydmljZUNhc2UuaWQsIHRoaXMuU2VydmljZUNhc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuUmVsb2FkU2VydmljZUNhc2UoKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdFRElUX0VOVklST05NRU5UX1BST0JMRU1fRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxseSB7IHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpOyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBPblNldmVyaXR5Q2hhbmdlZChzZXZlcml0eTogU2V2ZXJpdHksIGRvd246IGJvb2xlYW4sIHdvcmthcm91bmQ6IGJvb2xlYW4sIGltcGFjdDogSW1wYWN0KSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLlNlcnZpY2VDYXNlLnNldmVyaXR5ICE9IHNldmVyaXR5IHx8XHJcbiAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2Uuc3lzdGVtRG93biAhPSBkb3duIHx8XHJcbiAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2UuaW1wYWN0Q2F0ZWdvcnkgIT0gaW1wYWN0IHx8XHJcbiAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2Uud29ya2Fyb3VuZEF2YWlsYWJsZSAhPSB3b3JrYXJvdW5kXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGluZ0RhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2Uuc2V2ZXJpdHkgPSBzZXZlcml0eTtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2Uuc3lzdGVtRG93biA9IGRvd247XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlcnZpY2VDYXNlLmltcGFjdENhdGVnb3J5ID0gaW1wYWN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS53b3JrYXJvdW5kQXZhaWxhYmxlID0gd29ya2Fyb3VuZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLlVwZGF0ZVByb2JsZW0odGhpcy5TZXJ2aWNlQ2FzZS5pZCwgdGhpcy5TZXJ2aWNlQ2FzZSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dNYW5hZ2VyLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnRURJVF9TRVZFUklUWV9QUk9CTEVNX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTsgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1pbkRlYWRsaW5lKCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4pID8gdGhpcy5fZGVhZGxpbmVUaHJlc2hvbGQgOiB0aGlzLl9taW5EZWFkbGluZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgbWluRGVhZGxpbmUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICB0aGlzLl9taW5EZWFkbGluZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuX2RlYWRsaW5lVGhyZXNob2xkID0gdmFsdWUuYWRkRGF5cyg3KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhc3luYyBPbkRhdGVDaGFuZ2VkKGRhdGU6IERhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSB8fCBkYXRlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMubG9hZGluZ0RhdGFcclxuICAgICAgICAgICAgJiYgdGhpcy5TZXJ2aWNlQ2FzZVxyXG4gICAgICAgICAgICAmJiB0aGlzLlNlcnZpY2VDYXNlLnN0YXR1cyAhPSBcImNsb3NlZFwiXHJcbiAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2Uuc2V2ZXJpdHkgPT0gJ2xldmVsMSdcclxuICAgICAgICAgICAgICAgIHx8IHRoaXMuU2VydmljZUNhc2Uuc2V2ZXJpdHkgPT0gJ2xldmVsMidcclxuICAgICAgICAgICAgICAgIHx8IGF3YWl0IHRoaXMuY2hlY2tEZWFkbGluZUNoYW5nZShkYXRlKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVEVCA9IGRhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuU2VydmljZUNhc2UucmVxdWVzdGVkRGVhZGxpbmUgPSBkYXRlID8gZGF0ZS50b0lTT0RhdGVTdHJpbmcoKSA6IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLlVwZGF0ZVByb2JsZW0odGhpcy5TZXJ2aWNlQ2FzZS5pZCwgdGhpcy5TZXJ2aWNlQ2FzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWFkbGluZVJlbWFyayAmJiB0aGlzLmRlYWRsaW5lUmVtYXJrLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkFkZENvcnJlc3BvbmRlbmNlKHRoaXMuZGVhZGxpbmVSZW1hcmssIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYWRsaW5lUmVtYXJrID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuUmVsb2FkU2VydmljZUNhc2UoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5zZXRTZXFVcmwoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dNYW5hZ2VyLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnRURJVF9ERUFETElORV9QUk9CTEVNX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHsgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7IH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGRlYWRMaW5lID0gdGhpcy5kZWFkbGluZURUID8gdGhpcy5kZWFkbGluZURULmNsb25lKCkgOiBudWxsXHJcbiAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVEVCA9IGRlYWRMaW5lID8gdW5kZWZpbmVkIDogRGF0ZS50b2RheSgpLmFkZERheXMoNyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5kZWFkbGluZURUID0gZGVhZExpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbldhbnRzRGVhZGxpbmVDaGFuZ2VkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy53YW50c0RlYWRsaW5lID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3YW50c0RlYWRsaW5lOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBhc3luYyBIYW5kbGVGZWVkYmFjayhmZWVkYmFjazogc3RyaW5nLCBzdGF0dXM6IEZlZWRiYWNrU3RhdHVzTGluaykge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5Q2hhdClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5sb2FkaW5nRGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5BZGRGZWVkYmFjayhmZWVkYmFjaywgc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIEhhbmRsZU5ld0NvbnZlcnNhdGlvbkVudHJ5KGVudHJ5OiBzdHJpbmcsIGludGVybmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHlDaGF0KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmdEYXRhKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuQWRkQ29ycmVzcG9uZGVuY2UoZW50cnksIHRydWUsIGludGVybmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFNldmVyaXR5Q2hhbmdlTW9kYWwge1xyXG4gICAgcHVibGljIHN0YXRpYyBZZXMgPSBcInllc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBObyA9IFwibm9cIjtcclxuICAgIHN0YXRpYyBzZWxlY3RvciA9IFwic2V2ZXJpdHlDaGFuZ2VNb2RhbFwiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbEluc3RhbmNlJykgcHJpdmF0ZSBtb2RhbEluc3RhbmNlOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlSW5zdGFuY2UsXHJcbiAgICAgICAgQEluamVjdCgnZGF0YScpIHByaXZhdGUgZGF0YTogeyBzZXZlcml0eTogU2V2ZXJpdHksIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCB9XHJcbiAgICApIHsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2V2ZXJpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5zZXZlcml0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGVudmlyb25tZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZW52aXJvbm1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFllcyA9ICgpID0+IHRoaXMubW9kYWxJbnN0YW5jZS5jbG9zZShTZXZlcml0eUNoYW5nZU1vZGFsLlllcyk7XHJcblxyXG4gICAgcHVibGljIE5vID0gKCkgPT4gdGhpcy5tb2RhbEluc3RhbmNlLmNsb3NlKFNldmVyaXR5Q2hhbmdlTW9kYWwuTm8pO1xyXG59XHJcbiIsIu+7v2ltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgU2VydmljZUNhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIlxyXG5pbXBvcnQgeyBQcm9ibGVtRGF0YSwgUHJvYmxlbSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmljZUNhc2VcIlxyXG5pbXBvcnQgeyBDYXNlRmlsZURhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2ZpbGVcIlxyXG5pbXBvcnQgeyBQcm9ibGVtQmFzZSB9IGZyb20gXCIuL3Byb2JsZW1CYXNlXCJcclxuaW1wb3J0IHsgSXNQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9pc1Byb2Nlc3NpbmdTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNldmVyaXR5LCBJbXBhY3QgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NlcnZpY2VCYXNlXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9UcmFuc2xhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2F2ZURpYWxvZyB9IGZyb20gXCIuLi9nZW5lcmFsL3NhdmVkaWFsb2dcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJwcm9ibGVtRW50cnlcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL3Byb2JsZW0uZW50cnkuaHRtbFwiLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiBcIl5hcHBsaWNhdGlvblwiLFxyXG4gICAgICAgIGJhc2U6IFwiXnByb2JsZW1CYXNlXCJcclxuICAgIH1cclxufSlcclxuY2xhc3MgUHJvYmxlbUVudHJ5IGltcGxlbWVudHMgSUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBwcml2YXRlICRyb3V0ZXI6IG5nLlJvdXRlcjtcclxuICAgIHB1YmxpYyBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcbiAgICBwcml2YXRlIGJhc2U6IFByb2JsZW1CYXNlO1xyXG4gICAgcHVibGljIGZpbGVzOiBDYXNlRmlsZURhdGFbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSB0aXRsZWlzZXJyb3I6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRlc2NyaXB0aW9uaXNlcnJvcjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgY3VzdG9tZXJpc2Vycm9yOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBkZWFkbGluZWlzZXJyb3I6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZ2V0IHJlYWRPbmx5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiRlFTXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgc2VydmljZUNhc2VTZXJ2aWNlOiBTZXJ2aWNlQ2FzZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaXNQcm9jZXNzaW5nU2VydmljZTogSXNQcm9jZXNzaW5nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckd2luZG93JykgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcScpIHByaXZhdGUgJHE6IG5nLklRU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IG5nLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZGlhbG9nTWFuYWdlcjogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIFRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbCcpIHByaXZhdGUgJG1vZGFsOiBhbmd1bGFyLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHNhdmVEaWFsb2c6IFNhdmVEaWFsb2csXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogY2FsbGVkIGJ5IHRoZSBSb3V0ZXIgYXQgdGhlIGVuZCBvZiBhIHN1Y2Nlc3NmdWwgbmF2aWdhdGlvbi4gT25seSBvbmUgb2YgJHJvdXRlck9uQWN0aXZhdGUgYW5kICRyb3V0ZXJPblJldXNlIHdpbGwgYmUgY2FsbGVkIGRlcGVuZGluZyB1cG9uIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvICRyb3V0ZXJDYW5SZXVzZS5cclxuICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgJHJvdXRlck9uQWN0aXZhdGUobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgICAgICBpZiAobmV4dFsncm91dGVOYW1lJ10gPT0gXCJOZXdcIiAmJiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiRlFTXCJdKSkge1xyXG4gICAgICAgICAgICB0aGlzLiR0aW1lb3V0KCgpID0+IHRoaXMuYmFjaygpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgJHJvdXRlck9uUmV1c2UobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYmFzZS5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgdmFyIGN1c3RzID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi5jdXN0b21lcnM7XHJcbiAgICAgICAgdGhpcy5wcm9ibGVtRGF0YSA9IDxQcm9ibGVtRGF0YT57XHJcbiAgICAgICAgICAgIHN0YXJ0OiB1bmRlZmluZWQsIC8vIElTT0RhdGVTdHJpbmdcclxuICAgICAgICAgICAgdGl0bGU6IFwiXCIsIC8vIHN0cmluZyxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiXCIsIC8vc3RyaW5nXHJcbiAgICAgICAgICAgIGN1c3RvbWVyOiB1bmRlZmluZWQsIC8vIFdlYkxpbmssXHJcbiAgICAgICAgICAgIGNvbnRhY3RQZXJzb246IHVuZGVmaW5lZCwgLy8gV2ViTGluayxcclxuICAgICAgICAgICAgZmlxYXNPd25lcnNoaXA6IHVuZGVmaW5lZCwgLy8gV2ViTGluayxcclxuICAgICAgICAgICAgc3RhdHVzOiBcIm9wZW5cIiwgLy8gU3RhdHVzLFxyXG4gICAgICAgICAgICBzZXZlcml0eTogXCJsZXZlbDRcIiwgLy8gU2V2ZXJpdHksXHJcbiAgICAgICAgICAgIHByaW9yaXR5OiBcIm1lZGl1bVwiLCAvLyBQcmlvcml0eSxcclxuICAgICAgICAgICAgaW50ZXJuYWxUYXNrTGluazogdW5kZWZpbmVkLCAvL3N0cmluZ1xyXG4gICAgICAgICAgICBjYXNlTnVtYmVyOiB1bmRlZmluZWQsIC8vc3RyaW5nXHJcbiAgICAgICAgICAgIHBhcmVudENhc2VOdW1iZXI6IHVuZGVmaW5lZCwgLy9zdHJpbmdcclxuICAgICAgICAgICAgaW5jcmVhc2VkUHJpb3JpdHk6IGZhbHNlLCAvLyBib29sZWFuXHJcbiAgICAgICAgICAgIHJlcXVlc3RlZERlYWRsaW5lOiB1bmRlZmluZWQsIC8vIElTT0RhdGVTdHJpbmdcclxuICAgICAgICAgICAgY3VzdG9tZXJSZWZlcmVuY2U6IHVuZGVmaW5lZCwgLy9zdHJpbmdcclxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IFwicHJvZFwiLCAvLyBFbnZpcm9ubWVudCxcclxuICAgICAgICAgICAgc3lzdGVtRG93bjogZmFsc2UsIC8vIGJvb2xlYW4sXHJcbiAgICAgICAgICAgIGltcGFjdENhdGVnb3J5OiBcImxvd1wiLCAvLyBJbXBhY3QsXHJcbiAgICAgICAgICAgIHdvcmthcm91bmRBdmFpbGFibGU6IHRydWUsIC8vIGJvb2xlYW5cclxuICAgICAgICAgICAgZmVlZGJhY2tzdGF0dXM6ICdub3RSZXF1aXJlZCcsXHJcbiAgICAgICAgICAgIGFjdGlvblJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgY3JlYXRlZE9uOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRCeTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBjYXNlQ2F1c2U6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY2FzZU93bmVyc2hpcDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICByZXNwb25zaWJsZVNERW1wbG95ZWU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYnVkZ2V0SW5kaWNhdGlvbjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhcHByb3ZlZEhvdXJzTWluOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGFwcHJvdmVkSG91cnNNYXg6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYWN0dWFsSG91cnNTcGVudDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhcHByb3ZlZEhvdXJzQ29tbWVudEJ5U0Q6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgc3BUc1Rhc2s6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgcmVtZW1iZXJNZURhdGU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgcmVtZW1iZXJNZVJlYXNvbjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBpZ25vcmVDaGF0TWVtb1NlcXVlbmNlOiB1bmRlZmluZWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5taW5EZWFkbGluZSA9IHRvZGF5O1xyXG4gICAgICAgIHRoaXMuYmFzZS5UaXRsZSA9IFwiSV9XQU5UX1RPX1JFUE9SVF9BX1BST0JMRU1cIjtcclxuICAgICAgICB0aGlzLmJhc2UuYWN0aXZlTWVudUl0ZW0gPSAncHJvYmxlbSc7XHJcbiAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY3VzdCA9IGN1c3RzLmxlbmd0aCA9PSAxID8gY3VzdHNbMF0gOiBjdXN0cy5maWx0ZXIoYyA9PiBjLmNoZWNrZWQpLmxlbmd0aCA9PSAxID8gY3VzdHMuZmlsdGVyKGMgPT4gYy5jaGVja2VkKS5zaGlmdCgpIDogbnVsbDtcclxuICAgICAgICBpZiAoY3VzdCkge1xyXG4gICAgICAgICAgICB2YXIgY3VzdG9tZXJzID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi51c2VyU2VydmljZS5DdXN0b21lcnM7XHJcbiAgICAgICAgICAgIHZhciBjaWQgPSBjdXN0b21lcnMuaXRlbXMuZmlsdGVyKHkgPT4geS5pZC5yZWYgPT0gY3VzdC5rZXkpLnNoaWZ0KCkuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMucHJvYmxlbURhdGEuY3VzdG9tZXIgPSBjaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyAkcm91dGVyQ2FuRGVhY3RpdmF0ZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5kaXJ0eSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYXZlRGlhbG9nLlNhdmUoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzID0gcmVzdWx0ID09PSBTYXZlRGlhbG9nLkRpc2NhcmQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgyNSkuZmluYWxseSgoKSA9PiByZXNvbHZlKHJlcykpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsgcmV0dXJuIGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAkb25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuYmFzZS5hY3RpdmVNZW51SXRlbSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbk5ld0F0dGFjaG1lbnQoZmlsZTogQ2FzZUZpbGVEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5vbmZpbGVhZGRlZChmaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uZmlsZWFkZGVkKGZpbGU6IENhc2VGaWxlRGF0YSkge1xyXG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbmZpbGVyZW1vdmVkKGZpbGU6IENhc2VGaWxlRGF0YSkge1xyXG4gICAgICAgIHRoaXMuZmlsZXMgPSB0aGlzLmZpbGVzLmZpbHRlcihmID0+IGYgIT0gZmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uZWRpdG9ydmFsdWVjaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9ibGVtRGF0YS5kZXNjcmlwdGlvbiAhPSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2JsZW1EYXRhLmRlc2NyaXB0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbmlzZXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGVzY3JpcHRpb25jaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9ibGVtRGF0YS50aXRsZSAhPSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2JsZW1EYXRhLnRpdGxlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50aXRsZWlzZXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3VzdHJlZmNoYW5nZWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLnByb2JsZW1EYXRhLmN1c3RvbWVyUmVmZXJlbmNlICE9IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvYmxlbURhdGEuY3VzdG9tZXJSZWZlcmVuY2UgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW52aXJvbm1lbnRzZWxlY3RlZChzZWxlY3RlZDogYW55W10pIHtcclxuICAgICAgICB2YXIgc2VsID0gKHNlbGVjdGVkICYmIHNlbGVjdGVkLmxlbmd0aCA+IDApID8gc2VsZWN0ZWRbMF0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHNlbCAmJiB0aGlzLnByb2JsZW1EYXRhLmVudmlyb25tZW50ICE9IHNlbCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2JsZW1EYXRhLmVudmlyb25tZW50ID0gc2VsO1xyXG4gICAgICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmlvcml0eWNoYW5nZWQocHJpb3JpdHk6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb2JsZW1EYXRhLnByaW9yaXR5ICE9IHByaW9yaXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvYmxlbURhdGEucHJpb3JpdHkgPSBwcmlvcml0eTtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlYWRsaW5lRFQ6IERhdGU7XHJcbiAgICBwdWJsaWMgYXN5bmMgT25EYXRlQ2hhbmdlZChkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgaWYgKGRhdGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2JsZW1EYXRhLnNldmVyaXR5ID09ICdsZXZlbDEnIHx8IHRoaXMucHJvYmxlbURhdGEuc2V2ZXJpdHkgPT0gJ2xldmVsMicgfHwgYXdhaXQgdGhpcy5jaGVja0RlYWRsaW5lQ2hhbmdlKGRhdGUpKSB7XHJcbiAgICAgICAgICAgIHZhciBvbGREYXRlID0gdGhpcy5kZWFkbGluZURUO1xyXG4gICAgICAgICAgICB0aGlzLmRlYWRsaW5lRFQgPSBkYXRlID8gZGF0ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSAob2xkRGF0ZSA/IG9sZERhdGUuZ2V0VGltZSgpIDogMCkgIT09ICh0aGlzLmRlYWRsaW5lRFQgPyB0aGlzLmRlYWRsaW5lRFQuZ2V0VGltZSgpIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVhZGxpbmVUaHJlc2hvbGRNb2RhbDogbmcudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2VJbnN0YW5jZSA9IG51bGw7XHJcbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tEZWFkbGluZUNoYW5nZSh2YWx1ZTogRGF0ZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgKCEhdmFsdWUgPT09IGZhbHNlICYmICEhdGhpcy5kZWFkbGluZURUID09IGZhbHNlKVxyXG4gICAgICAgICAgICB8fCB0aGlzLmRlYWRsaW5lVGhyZXNob2xkTW9kYWwgIT09IG51bGxcclxuICAgICAgICAgICAgfHwgISF2YWx1ZSAmJiB2YWx1ZSA8IHRoaXMuX21pbkRlYWRsaW5lXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gY2hhbmdlXHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgKHZhbHVlID09IG51bGwgJiYgISF0aGlzLmRlYWRsaW5lRFQpXHJcbiAgICAgICAgICAgIHx8IHZhbHVlID49IHRoaXMuX2RlYWRsaW5lVGhyZXNob2xkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIENoYW5nZSwgYnV0IGRhdGUgZmFsbHMgaW4gdGhyZXNob2xkIHRpbWVcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnM6IG5nLnVpLmJvb3RzdHJhcC5JTW9kYWxTZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogJ2hhbmRsZV90aHJlc2hvbGRkZWFkbGluZS5odG1sJyxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IENvbmZpcm1EZWFkbGluZUNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJBczogJyRtb2RhbCcsXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogKCkgPT4gdGhpc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmRlYWRsaW5lVGhyZXNob2xkTW9kYWwgPSB0aGlzLiRtb2RhbC5vcGVuKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGVhZGxpbmVUaHJlc2hvbGRNb2RhbC5yZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIgJiYgdGhpcy5kZWFkbGluZVJlbWFyayAmJiB0aGlzLmRlYWRsaW5lUmVtYXJrLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWFkbGluZURUID0gRGF0ZS50b2RheSgpLmFkZERheXMoNyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kdGltZW91dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVEVCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWFkbGluZVJlbWFyayA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcclxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVUaHJlc2hvbGRNb2RhbCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX21pbkRlYWRsaW5lOiBEYXRlO1xyXG4gICAgcHJpdmF0ZSBfZGVhZGxpbmVUaHJlc2hvbGQ6IERhdGU7XHJcbiAgICBwdWJsaWMgZ2V0IG1pbkRlYWRsaW5lKCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4gJiYgdGhpcy5wcm9ibGVtRGF0YS5zZXZlcml0eSAhPSAnbGV2ZWwxJyAmJiB0aGlzLnByb2JsZW1EYXRhLnNldmVyaXR5ICE9ICdsZXZlbDInKSA/IHRoaXMuX2RlYWRsaW5lVGhyZXNob2xkIDogdGhpcy5fbWluRGVhZGxpbmU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IG1pbkRlYWRsaW5lKHZhbHVlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fbWluRGVhZGxpbmUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9kZWFkbGluZVRocmVzaG9sZCA9IHZhbHVlLmFkZERheXMoNyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGRlYWRsaW5lVGhyZXNob2xkKCk6IERhdGUgeyByZXR1cm4gdGhpcy5fZGVhZGxpbmVUaHJlc2hvbGQ7IH07XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVSZW1hcms6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVCb3hPcGVuKCkge1xyXG4gICAgICAgIHRoaXMuZGVhZGxpbmVUb29sYm94SXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRlYWRsaW5lVG9vbHRpcFRleHQgPSB0aGlzLmRlYWRsaW5lVG9vbGJveElzT3BlbiA/ICcnIDogYCR7dGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKCdERUFETElORV9UT09MVElQJyl9JHsodGhpcy5kZWFkbGluZURUKSA/IGA6ICR7dGhpcy5kZWFkbGluZURULnRvTG9jYWxlRGF0ZVN0cmluZygnbmwtTkwnKX1gIDogJyd9YDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBkZWFkbGluZUJveENsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuZGVhZGxpbmVUb29sYm94SXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZWFkbGluZVRvb2x0aXBUZXh0ID0gdGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4gPyAnJyA6IGAke3RoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSgnREVBRExJTkVfVE9PTFRJUCcpfSR7KHRoaXMuZGVhZGxpbmVEVCkgPyBgOiAke3RoaXMuZGVhZGxpbmVEVC50b0xvY2FsZURhdGVTdHJpbmcoJ25sLU5MJyl9YCA6ICcnfWA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVUb29sYm94SXNPcGVuOiBib29sZWFuID0gIGZhbHNlO1xyXG4gICAgcHVibGljIGRlYWRsaW5lVG9vbHRpcFRleHQ6IHN0cmluZyA9IHRoaXMuZGVhZGxpbmVUb29sYm94SXNPcGVuID8gJycgOiBgJHt0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoJ0RFQURMSU5FX1RPT0xUSVAnKX0keyh0aGlzLmRlYWRsaW5lRFQpID8gYDogJHt0aGlzLmRlYWRsaW5lRFQudG9Mb2NhbGVEYXRlU3RyaW5nKCdubC1OTCcpfWAgOiAnJ31gO1xyXG5cclxuICAgIHB1YmxpYyBhc3luYyBPblNldmVyaXR5Q2hhbmdlZChzZXZlcml0eTogU2V2ZXJpdHksIGRvd246IGJvb2xlYW4sIHdvcmthcm91bmQ6IGJvb2xlYW4sIGltcGFjdDogSW1wYWN0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb2JsZW1EYXRhKSByZXR1cm47XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhIXRoaXMuZGVhZGxpbmVEVFxyXG4gICAgICAgICAgICAmJiB0aGlzLndhbnRzRGVhZGxpbmVcclxuICAgICAgICAgICAgJiYgdGhpcy5kZWFkbGluZURUIDwgdGhpcy5fZGVhZGxpbmVUaHJlc2hvbGRcclxuICAgICAgICAgICAgJiYgc2V2ZXJpdHkgIT0gJ2xldmVsMSdcclxuICAgICAgICAgICAgJiYgc2V2ZXJpdHkgIT0gJ2xldmVsMidcclxuICAgICAgICAgICAgJiYgIXRoaXMuZGVhZGxpbmVSZW1hcmtcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGRhdGUgPSB0aGlzLmRlYWRsaW5lRFQ7XHJcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRGVhZGxpbmVDaGFuZ2UoZGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVEVCA9IGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJvYmxlbURhdGEuc2V2ZXJpdHkgIT0gc2V2ZXJpdHlcclxuICAgICAgICAgICAgfHwgdGhpcy5wcm9ibGVtRGF0YS5zeXN0ZW1Eb3duICE9IGRvd25cclxuICAgICAgICAgICAgfHwgdGhpcy5wcm9ibGVtRGF0YS5pbXBhY3RDYXRlZ29yeSAhPSBpbXBhY3RcclxuICAgICAgICAgICAgfHwgdGhpcy5wcm9ibGVtRGF0YS53b3JrYXJvdW5kQXZhaWxhYmxlICE9IHdvcmthcm91bmRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9ibGVtRGF0YS5zZXZlcml0eSA9IHNldmVyaXR5O1xyXG4gICAgICAgICAgICB0aGlzLnByb2JsZW1EYXRhLnN5c3RlbURvd24gPSBkb3duO1xyXG4gICAgICAgICAgICB0aGlzLnByb2JsZW1EYXRhLndvcmthcm91bmRBdmFpbGFibGUgPSB3b3JrYXJvdW5kO1xyXG4gICAgICAgICAgICB0aGlzLnByb2JsZW1EYXRhLmltcGFjdENhdGVnb3J5ID0gaW1wYWN0O1xyXG4gICAgICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21lcmNoYW5nZWQoY3VzdG9tZXJLZXlzOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJpc2Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHNlbCA9IChjdXN0b21lcktleXMgJiYgY3VzdG9tZXJLZXlzLmxlbmd0aCA+IDApID8gY3VzdG9tZXJLZXlzWzBdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgdmFyIGN1c3RvbWVycyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24udXNlclNlcnZpY2UuQ3VzdG9tZXJzO1xyXG4gICAgICAgICAgICB2YXIgY2lkID0gY3VzdG9tZXJzLml0ZW1zLmZpbHRlcih5ID0+IHkuaWQucmVmID09IHNlbCkuc2hpZnQoKS5pZDtcclxuICAgICAgICAgICAgdGhpcy5wcm9ibGVtRGF0YS5jdXN0b21lciA9IGNpZDtcclxuICAgICAgICAgICAgaWYgKChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uLmN1c3RvbWVycykubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2JsZW1EYXRhLmN1c3RvbWVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBwcm9ibGVtRGF0YSgpOiBQcm9ibGVtRGF0YSB7IHJldHVybiB0aGlzLmJhc2UgPyB0aGlzLmJhc2UuRGF0YSA6IHVuZGVmaW5lZDsgfVxyXG4gICAgcHJpdmF0ZSBzZXQgcHJvYmxlbURhdGEodmFsdWU6IFByb2JsZW1EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5iYXNlLkRhdGEgPSB2YWx1ZSBhcyBQcm9ibGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMucHJvYmxlbURhdGEucmVxdWVzdGVkRGVhZGxpbmUgPSB0aGlzLmRlYWRsaW5lRFQgJiYgKHRoaXMuZGVhZGxpbmVSZW1hcmsgfHwgdGhpcy5wcm9ibGVtRGF0YS5zZXZlcml0eSA9PSAnbGV2ZWwxJyB8fCB0aGlzLnByb2JsZW1EYXRhLnNldmVyaXR5ID09ICdsZXZlbDInIHx8IHRoaXMuZGVhZGxpbmVEVCA+PSB0aGlzLl9kZWFkbGluZVRocmVzaG9sZCkgPyB0aGlzLmRlYWRsaW5lRFQudG9JU09EYXRlU3RyaW5nKCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2JsZW1EYXRhLnN0YXJ0ID0gbmV3IERhdGUoKS50b0lTT0RhdGVUaW1lU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2JsZW1EYXRhLmN1c3RvbWVyUmVmZXJlbmNlID09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvYmxlbURhdGEuY3VzdG9tZXJSZWZlcmVuY2UgPSAnJztcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuTmV3UHJvYmxlbSh0aGlzLnByb2JsZW1EYXRhKTtcclxuICAgICAgICAgICAgICAgIHZhciBwcm9ibGVtID0gPFByb2JsZW0+KGF3YWl0IHByby52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBwcm9ibGVtID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuZmlsbEltYWdlU291cmNlcyhwcm9ibGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ibGVtLnJlcXVlc3RlZERlYWRsaW5lICYmIHRoaXMuZGVhZGxpbmVSZW1hcmspIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5BZGRDb3JyZXNwb25kZW5jZShwcm9ibGVtLmNvcnJlc3BvbmRlbmNlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuZGVhZGxpbmVSZW1hcmssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQnk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBieVN1cHBvcnRFbXBsb3llZTogdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5jdXJyZW50Um9sZUluKFtcIlNEXCJdKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnlJbnRlcm5hbEN1c3RvbWVyOiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmxvd1JvbGUgPT09IFwiQ1VTVFwiICYmIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuaGlnaFJvbGUgPT09IFwiRlFTXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5Q3VzdG9tZXI6IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UubG93Um9sZSA9PT0gXCJDVVNUXCIgJiYgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5oaWdoUm9sZSA9PT0gXCJDVVNUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRlbmNlVHlwZTogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2UuRGF0YSA9IDxQcm9ibGVtPnByb2JsZW07XHJcbiAgICAgICAgICAgICAgICB2YXIgbXlmaWxlUHJvbWlzZXMgPSB0aGlzLmZpbGVzLm1hcCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWRkRmlsZSh0aGlzLmJhc2UuRGF0YS5maWxlcywgeCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKG15ZmlsZVByb21pc2VzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoWydFZGl0JywgeyBudW1iZXI6IHByb2JsZW0uY2FzZU51bWJlciB9XSlcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignUHJvYmxlbUVudHJ5JywgJ0Vycm9yIHNhdmluZyBwcm9ibGVtJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dNYW5hZ2VyLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnQ1JFQVRFX1BST0JMRU1fRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdHJpcFJpY2hUZXh0UmVnZXg6IGFueSA9IC8oPyEuaW1nLipzcmMuKykoPChbXj5dKyk+KXwmbmJzcDt8XFxzL2lnO1xyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5wcm9ibGVtRGF0YS50aXRsZSAmJiB0aGlzLnByb2JsZW1EYXRhLnRpdGxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmNsZWFyRXJyb3JDbGFzcyh0aGlzLiRlbGVtZW50LCAnZWRpdHRpdGxlJyk7XHJcbiAgICAgICAgICAgIHRoaXMudGl0bGVpc2Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLnNldEVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXR0aXRsZScpO1xyXG4gICAgICAgICAgICB0aGlzLnRpdGxlaXNlcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9ibGVtRGF0YS5kZXNjcmlwdGlvbiAmJiB0aGlzLnByb2JsZW1EYXRhLmRlc2NyaXB0aW9uLnJlcGxhY2UodGhpcy5zdHJpcFJpY2hUZXh0UmVnZXgsIFwiXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5jbGVhckVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRkZXNjcmlwdGlvbicpO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uaXNlcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5zZXRFcnJvckNsYXNzKHRoaXMuJGVsZW1lbnQsICdlZGl0ZGVzY3JpcHRpb24nKTtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbmlzZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJvYmxlbURhdGEuY3VzdG9tZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmNsZWFyRXJyb3JDbGFzcyh0aGlzLiRlbGVtZW50LCAnZWRpdGN1c3RvbWVyJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJpc2Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLnNldEVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRjdXN0b21lcicpO1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbWVyaXNlcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9ibGVtRGF0YS5yZXF1ZXN0ZWREZWFkbGluZSAmJiB0aGlzLnByb2JsZW1EYXRhLnJlcXVlc3RlZERlYWRsaW5lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmNsZWFyRXJyb3JDbGFzcyh0aGlzLiRlbGVtZW50LCAnZWRpdGRlYWRsaW5lJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVpc2Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndhbnRzRGVhZGxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLnNldEVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRkZWFkbGluZScpO1xyXG4gICAgICAgICAgICB0aGlzLmRlYWRsaW5laXNlcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5jbGVhckVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRkZWFkbGluZScpO1xyXG4gICAgICAgICAgICB0aGlzLmRlYWRsaW5laXNlcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYmFjaygpIHtcclxuICAgICAgICB0aGlzLmJhc2UuZ29Ib21lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uV2FudHNEZWFkbGluZUNoYW5nZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy53YW50c0RlYWRsaW5lID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3YW50c0RlYWRsaW5lOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uZmlybURlYWRsaW5lQ29tcG9uZW50IHtcclxuICAgIHN0YXRpYyBjb250cm9sbGVySWQgPSAnQ29uZmlybURlYWRsaW5lQ29tcG9uZW50JztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdWliTW9kYWxJbnN0YW5jZScpIHByaXZhdGUgJG1vZGFsSW5zdGFuY2U6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2VJbnN0YW5jZSxcclxuICAgICAgICBASW5qZWN0KCdwYWdlJykgcHVibGljIHBhZ2U6IFByb2JsZW1FbnRyeVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFllcygpIHtcclxuICAgICAgICB0aGlzLiRtb2RhbEluc3RhbmNlLmNsb3NlKCd5ZXMnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgTm8oKSB7XHJcbiAgICAgICAgdGhpcy4kbW9kYWxJbnN0YW5jZS5jbG9zZSgnbm8nKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbWFya0NoYW5nZWQodGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlLmRlYWRsaW5lUmVtYXJrID0gdGV4dDtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gXCJAZmlxYXMvdXRpbHNcIjtcclxuaW1wb3J0ICogYXMgUnggZnJvbSBcInJ4anMvUnhcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBEcm9wZG93bkVudHJ5IH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xzL2Ryb3Bkb3duYm94XCI7XHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzdWx0LCBJSWRlbnRpdHlMaW5rIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvaUZxc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgQmFsYW5jZVJlcG9ydFBhcmFtZXRlcnMsXHJcbiAgICBSZXBvcnRBbmdsZSxcclxuICAgIFJlcG9ydENvbGxlY3Rpb24sXHJcbiAgICBSZXBvcnRDb2xsZWN0aW9uSXRlbSxcclxuICAgIFJlcG9ydFBhcmFtZXRlcnMsXHJcbiAgICBSZXBvcnRQZXJpb2QsXHJcbiAgICBSZXBvcnRUeXBlLFxyXG59IGZyb20gXCIuLi8uLi9tb2RlbHMvcmVjb3JkUmVwb3J0XCI7XHJcbmltcG9ydCB7IENhc2VUeXBlLCBDb21wYWN0U2VydmljZUNhc2UgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9leHBvcnRUb0V4Y2VsU2VydmljZVwiO1xyXG5pbXBvcnQgeyBIb21lU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvaG9tZVNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvcmVwb3J0U2VydmljZVwiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXJ2aWNlQmFzZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvVHJhbnNsYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCI7XHJcblxyXG50eXBlIENoYXJ0VHlwZSA9XHJcbiAgICB8IFwiUGllQ2hhcnRcIlxyXG4gICAgfCBcIkFyZWFDaGFydFwiXHJcbiAgICB8IFwiQW5ub3RhdGlvbkNoYXJ0XCJcclxuICAgIHwgXCJCYXJDaGFydFwiXHJcbiAgICB8IFwiR2F1Z2VcIlxyXG4gICAgfCBcIkxpbmVDaGFydFwiO1xyXG5pbnRlcmZhY2UgQ2hhcnRTZXR0aW5ncyB7XHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgICBzbGljZXM/OiB7IFtpbmRleDogbnVtYmVyXTogeyBjb2xvcjogc3RyaW5nIH0gfTtcclxuICAgICAgICBzZXJpZXM/OiB7XHJcbiAgICAgICAgICAgIFtpbmRleDogbnVtYmVyXToge1xyXG4gICAgICAgICAgICAgICAgY29sb3I/OiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICB0eXBlPzogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgdmlzaWJsZUluTGVnZW5kPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgIHBvaW50U2l6ZT86IG51bWJlcjtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGhBeGlzPzoge1xyXG4gICAgICAgICAgICB0aWNrcz86IGFueVtdO1xyXG4gICAgICAgICAgICBmb3JtYXQ/OiBzdHJpbmc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2QXhpcz86IHtcclxuICAgICAgICAgICAgdGlja3M/OiBhbnlbXTtcclxuICAgICAgICAgICAgZm9ybWF0Pzogc3RyaW5nO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaXNTdGFja2VkPzogYm9vbGVhbjtcclxuICAgIH07XHJcbiAgICB0eXBlOiBDaGFydFR5cGU7XHJcbiAgICBkYXRhPzogQ2hhcnREYXRhO1xyXG4gICAgdmlldz86IHsgY29sdW1uczogKE51bWJlciB8IENoYXJ0Q29sdW1uKVtdIH07XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGFydENvbHVtbiB7XHJcbiAgICBpZD86IHN0cmluZztcclxuICAgIGxhYmVsPzogc3RyaW5nO1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgcm9sbD86IHN0cmluZztcclxuICAgIHNvdXJjZUNvbHVtbj86IG51bWJlcjtcclxufVxyXG5pbnRlcmZhY2UgQ2hhcnRSb3dEZWZpbml0aW9uIHtcclxuICAgIGM6IHsgdjogYW55OyByZWNvcmRzPzogKCkgPT4gSUlkZW50aXR5TGluayB9W107XHJcbn1cclxuaW50ZXJmYWNlIENoYXJ0Um93IGV4dGVuZHMgQ2hhcnRSb3dEZWZpbml0aW9uIHtcclxuICAgIHJlY29yZHM/OiAoKSA9PiBJSWRlbnRpdHlMaW5rO1xyXG59XHJcbmludGVyZmFjZSBDaGFydERhdGEge1xyXG4gICAgaWQ6IElJZGVudGl0eUxpbms7XHJcbiAgICBjb2xzOiBDaGFydENvbHVtbltdO1xyXG4gICAgcm93czogQ2hhcnRSb3dbXTtcclxufVxyXG5pbnRlcmZhY2UgUmVwb3J0U2V0dGluZ3Mge1xyXG4gICAgcmVwb3J0VHlwZTogUmVwb3J0VHlwZTtcclxuICAgIGZyb21EYXRlOiBEYXRlO1xyXG4gICAgdG9EYXRlOiBEYXRlO1xyXG4gICAgcmVwb3J0QW5nbGU6IFJlcG9ydEFuZ2xlO1xyXG4gICAgY2FzZVR5cGVzOiBDYXNlVHlwZVtdO1xyXG4gICAgcmVjb3JkTGluazogSUlkZW50aXR5TGluaztcclxuICAgIGFjdGl2ZU9ubHk6IGJvb2xlYW47XHJcbiAgICBjYXNlSWQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmVudW0gQ2FzZVR5cGVTZWxlY3RvciB7XHJcbiAgICBCVUcgPSAxIDw8IDAsXHJcbiAgICBSRVFVRVNUID0gMSA8PCAxLFxyXG4gICAgQlVHQU5EUkVRVUVTVCA9IDEgPDwgMixcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBSZXBvcnRzLnNlbGVjdG9yLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmlld3MvcmVwb3J0cy5odG1sXCIsXHJcbiAgICByZXF1aXJlOiB7XHJcbiAgICAgICAgYXBwbGljYXRpb246IFwiXmFwcGxpY2F0aW9uXCIsXHJcbiAgICB9LFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwb3J0cyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yID0gXCJyZXBvcnRzXCI7XHJcbiAgICBwdWJsaWMgaGlnaGxpZ2h0TWVudUl0ZW0gPSBcInJlcG9ydHNcIjtcclxuICAgIHByaXZhdGUgc3RhdGljIEFuZ2xlczogeyB2YWx1ZTogUmVwb3J0QW5nbGU7IGRlc2M6IHN0cmluZyB9W10gPSBbXHJcbiAgICAgICAgeyB2YWx1ZTogXCJzdGF0dXNcIiwgZGVzYzogXCJTdGF0dXNcIiB9LFxyXG4gICAgICAgIHsgdmFsdWU6IFwic2V2ZXJpdHlcIiwgZGVzYzogXCJTZXZlcml0eVwiIH0sXHJcbiAgICAgICAgeyB2YWx1ZTogXCJvd25lcnNoaXBcIiwgZGVzYzogXCJPd25lcnNoaXBcIiB9LFxyXG4gICAgICAgIHsgdmFsdWU6IFwiY3JlYXRlZEJ5XCIsIGRlc2M6IFwiQ3JlYXRlZEJ5XCIgfSxcclxuICAgICAgICB7IHZhbHVlOiBcImN1c3RvbWVyXCIsIGRlc2M6IFwiQ3VzdG9tZXJcIiB9LFxyXG4gICAgXTtcclxuICAgIHByaXZhdGUgc3RhdGljIENhdXNlQW5nbGU6IHsgdmFsdWU6IFJlcG9ydEFuZ2xlOyBkZXNjOiBzdHJpbmcgfSA9IHsgdmFsdWU6IFwiY2F1c2VcIiwgZGVzYzogXCJDYXVzZVwiIH07XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgUGVyaW9kczogRHJvcGRvd25FbnRyeTxSZXBvcnRQZXJpb2Q+W10gPSBbXHJcbiAgICAgICAgeyBrZXk6IFwieWVhclwiLCB0ZXh0OiBcIlllYXJcIiB9LFxyXG4gICAgICAgIHsga2V5OiBcIm1vbnRoXCIsIHRleHQ6IFwiTW9udGhcIiB9LFxyXG4gICAgICAgIHsga2V5OiBcIndlZWtcIiwgdGV4dDogXCJXZWVrXCIgfSxcclxuICAgICAgICB7IGtleTogXCJkYXlcIiwgdGV4dDogXCJEYXlcIiB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBDYXNlVHlwZXNNYXBwaW5nOiB7XHJcbiAgICAgICAgdmFsdWU6IENhc2VUeXBlU2VsZWN0b3I7XHJcbiAgICAgICAgY2FzZVR5cGU6IENhc2VUeXBlW107XHJcbiAgICAgICAgZGVzYzogc3RyaW5nO1xyXG4gICAgfVtdID0gW1xyXG4gICAgICAgIHsgdmFsdWU6IENhc2VUeXBlU2VsZWN0b3IuQlVHLCBjYXNlVHlwZTogW1wiYnVnXCJdLCBkZXNjOiBcIkJ1Z1wiIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogQ2FzZVR5cGVTZWxlY3Rvci5SRVFVRVNULFxyXG4gICAgICAgICAgICBjYXNlVHlwZTogW1wicmVxdWVzdFwiXSxcclxuICAgICAgICAgICAgZGVzYzogXCJSZXF1ZXN0XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBDYXNlVHlwZVNlbGVjdG9yLkJVR0FORFJFUVVFU1QsXHJcbiAgICAgICAgICAgIGNhc2VUeXBlOiBbXCJidWdcIiwgXCJyZXF1ZXN0XCJdLFxyXG4gICAgICAgICAgICBkZXNjOiBcIkFsbFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIHB1YmxpYyBfY2FzZUlkPzogbnVtYmVyO1xyXG4gICAgcHVibGljIGdldCBjYXNlSWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nhc2VJZDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY2FzZUlkKGNhc2VJZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYXNlSWQgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB0aGlzLl9jYXNlSWQgPSBwYXJzZUludChjYXNlSWQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2Nhc2VJZCA9IGNhc2VJZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSByZXBvcnRTZXJ2aWNlOiBSZXBvcnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGhvbWVTZXJ2aWNlOiBIb21lU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGlzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KFwiJGxvY2F0aW9uXCIpIHByaXZhdGUgJGxvY2F0aW9uOiBuZy5JTG9jYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoXCIkdGltZW91dFwiKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdChcIiRzY29wZVwiKSBwcml2YXRlICRzY29wZTogbmcuSVNjb3BlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdChcIiRlbGVtZW50XCIpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgJGNhbkFjdGl2YXRlID0gQXV0aG9yaXphdGlvblNlcnZpY2UuUm9sZUNoZWNrO1xyXG5cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25BY3RpdmF0ZShcclxuICAgICAgICBuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbixcclxuICAgICAgICBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvblxyXG4gICAgKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgICAgIHZhciBzZXR0aW5ncyA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldFZhbHVlPFJlcG9ydFNldHRpbmdzPihcclxuICAgICAgICAgICAgXCJjdXJyZW50LnJlcG9ydC52YWx1ZXNcIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0VHlwZSA9IHNldHRpbmdzLnJlcG9ydFR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRBbmdsZSA9IHNldHRpbmdzLnJlcG9ydEFuZ2xlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2FzZVR5cGVzID0gUmVwb3J0cy5DYXNlVHlwZXNNYXBwaW5nLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICh0eXBlTWFwKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVNYXAuY2FzZVR5cGUuZXZlcnkoKGN0KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5jYXNlVHlwZXMuc29tZSgoY2N0KSA9PiBjY3QgPT09IGN0KVxyXG4gICAgICAgICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5jYXNlVHlwZXMuZXZlcnkoKGN0KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlTWFwLmNhc2VUeXBlLnNvbWUoKGNjdCkgPT4gY2N0ID09PSBjdClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClbMF07XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydEZyb21EYXRlID0gc2V0dGluZ3MuZnJvbURhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydFRvRGF0ZSA9IHNldHRpbmdzLnRvRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYXNlc09ubHkgPSBzZXR0aW5ncy5hY3RpdmVPbmx5O1xyXG4gICAgICAgICAgICB0aGlzLmNhc2VJZCA9IHNldHRpbmdzLmNhc2VJZDtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy4kdGltZW91dCgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlcG9ydCgpO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MucmVjb3JkTGluaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVjb3JkTGluayA9IHNldHRpbmdzLnJlY29yZExpbms7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGxHcmlkKHNldHRpbmdzLnJlY29yZExpbmspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25SZXVzZShcclxuICAgICAgICBuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbixcclxuICAgICAgICBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvblxyXG4gICAgKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBTZWFyY2hSZXN1bHRDb3VudDogbnVtYmVyO1xyXG5cclxuICAgICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLmFkZE9uQWNjb3VudHNDaGFuZ2VkKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlcG9ydFR5cGUgPT0gXCJhY3RpdmVcIiB8fCB0aGlzLmNoYXJ0RGF0YSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUmVwb3J0KCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5yZXBvcnRUeXBlID09IFwiYWN0aXZlXCIpIHRoaXMudXBkYXRlUmVwb3J0KCk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiU0RcIiwgXCJGUVNcIl0pICYmXHJcbiAgICAgICAgICAgIFJlcG9ydHMuQW5nbGVzLmluZGV4T2YoUmVwb3J0cy5DYXVzZUFuZ2xlKSA9PSAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBSZXBvcnRzLkFuZ2xlcy5wdXNoKFJlcG9ydHMuQ2F1c2VBbmdsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEFjdGl2ZVJlcG9ydCgpIHt9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0UHJvamVjdFJlcG9ydCgpIHt9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0SGlzdG9yaWNSZXBvcnQoKSB7XHJcbiAgICAgICAgdmFyIHRvID0gRGF0ZS50b2RheSgpO1xyXG4gICAgICAgIHRvLnNldE1vbnRoKHRvLmdldE1vbnRoKCkgKyAxLCAxKTtcclxuICAgICAgICB0byA9IHRvLmFkZERheXMoLTEpO1xyXG5cclxuICAgICAgICB0aGlzLl9yZXBvcnRUb0RhdGUgPSB0by5jbG9uZSgpO1xyXG5cclxuICAgICAgICB2YXIgZnJvbSA9IERhdGUudG9kYXkoKTtcclxuICAgICAgICBmcm9tLnNldERhdGUoMSk7XHJcbiAgICAgICAgZnJvbS5zZXRGdWxsWWVhcihmcm9tLmdldEZ1bGxZZWFyKCkgLSAxKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVwb3J0RnJvbURhdGUgPSBmcm9tLmNsb25lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0QmFsYW5jZVJlcG9ydCgpIHtcclxuICAgICAgICB2YXIgdG8gPSBEYXRlLnRvZGF5KCk7XHJcbiAgICAgICAgdG8uc2V0TW9udGgodG8uZ2V0TW9udGgoKSArIDEsIDEpO1xyXG4gICAgICAgIHRvID0gdG8uYWRkRGF5cygtMSk7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0VG9EYXRlID0gdG8uY2xvbmUoKTtcclxuICAgICAgICB0aGlzLnNldERhdGVGb3JCYWxhbmNlUGVyaW9kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXREYXRlRm9yQmFsYW5jZVBlcmlvZCgpIHtcclxuICAgICAgICBsZXQgdG8gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGxldCBmcm9tOiBEYXRlO1xyXG4gICAgICAgIHRvLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFJlcG9ydFBlcmlvZFswXSkge1xyXG4gICAgICAgICAgICBjYXNlIFwieWVhclwiOiAvL2h1aWRpZyArIHZvcmlnIGphYXIgKHZvbGxlZGlnKVxyXG4gICAgICAgICAgICAgICAgdG8uc2V0TW9udGgoMTEsIDMxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydFRvRGF0ZSA9IHRvO1xyXG4gICAgICAgICAgICAgICAgZnJvbSA9IHRvLmFkZERheXMoMSk7XHJcbiAgICAgICAgICAgICAgICBmcm9tLnNldEZ1bGxZZWFyKGZyb20uZ2V0RnVsbFllYXIoKSAtIDIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtb250aFwiOiAvLyBqYWFyIHRlcnVnIHZhbmFmIGh1aWRpZ2UgbWFhbmQgZWluZGVcclxuICAgICAgICAgICAgICAgIHRvLnNldE1vbnRoKHRvLmdldE1vbnRoKCkgKyAxLCAwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydFRvRGF0ZSA9IHRvO1xyXG4gICAgICAgICAgICAgICAgZnJvbSA9IHRvLmFkZERheXMoMSk7XHJcbiAgICAgICAgICAgICAgICBmcm9tLnNldEZ1bGxZZWFyKGZyb20uZ2V0RnVsbFllYXIoKSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3ZWVrXCI6IC8vIG1hYW5kIHRlcnVnIHRvdC9tZXQga29tZW5kZSB6b25kYWdcclxuICAgICAgICAgICAgICAgIHRvLnNldERhdGUodG8uZ2V0RGF0ZSgpICsgKHRvLmdldERheSgpICUgNykgLSAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydFRvRGF0ZSA9IHRvO1xyXG4gICAgICAgICAgICAgICAgZnJvbSA9IHRvLmFkZERheXMoLTI4KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZGF5XCI6XHJcbiAgICAgICAgICAgICAgICBmcm9tID0gdG8uYWRkRGF5cygxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydFRvRGF0ZSA9IERhdGUudG9kYXkoKTtcclxuICAgICAgICAgICAgICAgIGZyb20gPSB0aGlzLl9yZXBvcnRUb0RhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIGZyb20uc2V0RGF0ZShmcm9tLmdldERhdGUoKSAtIDcpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcG9ydEZyb21EYXRlID0gZnJvbS5jbG9uZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGlzcG9zYWJsZXM6IElEaXNwb3NhYmxlW10gPSBbXTtcclxuICAgICRvbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0VmFsdWU8UmVwb3J0U2V0dGluZ3M+KFwiY3VycmVudC5yZXBvcnQudmFsdWVzXCIsIHtcclxuICAgICAgICAgICAgcmVwb3J0VHlwZTogdGhpcy5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgICBmcm9tRGF0ZTogdGhpcy5fcmVwb3J0RnJvbURhdGUsXHJcbiAgICAgICAgICAgIHRvRGF0ZTogdGhpcy5fcmVwb3J0VG9EYXRlLFxyXG4gICAgICAgICAgICBhY3RpdmVPbmx5OiB0aGlzLmFjdGl2ZUNhc2VzT25seSxcclxuICAgICAgICAgICAgcmVwb3J0QW5nbGU6IHRoaXMuc2VsZWN0ZWRSZXBvcnRBbmdsZSxcclxuICAgICAgICAgICAgY2FzZVR5cGVzOiB0aGlzLnNlbGVjdGVkQ2FzZVR5cGVzLmNhc2VUeXBlLFxyXG4gICAgICAgICAgICByZWNvcmRMaW5rOiB0aGlzLmN1cnJlbnRSZWNvcmRMaW5rLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZXMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZCgpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2Uud2FybmluZyhcIlJlcG9ydHNcIiwgXCJFcnJvciBkaXNwb3NpbmdcIiwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRHcmlkU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2ggPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb246IFJ4LlN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgZ2V0IGN1cnJlbnRTZWFyY2goKTogUnguU3Vic2NyaXB0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNlYXJjaFN1YnNjcmlwdGlvbjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0IGN1cnJlbnRTZWFyY2goc3Vic2NyaXB0aW9uOiBSeC5TdWJzY3JpcHRpb24pIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFNlYXJjaFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlcG9ydFR5cGVzOiBEcm9wZG93bkVudHJ5PFJlcG9ydFR5cGU+W10gPSBbXHJcbiAgICAgICAgeyBrZXk6IFwiYWN0aXZlXCIsIHRleHQ6IFwiUkVQT1JUX0FDVElWRV9DQVNFU1wiIH0sXHJcbiAgICAgICAgeyBrZXk6IFwicHJvamVjdFwiLCB0ZXh0OiBcIlJFUE9SVF9QUk9KRUNUX0NBU0VTXCIgfSxcclxuICAgICAgICB7IGtleTogXCJiYWxhbmNlXCIsIHRleHQ6IFwiUkVQT1JUX0JBTEFOQ0VcIiB9LFxyXG4gICAgICAgIHsga2V5OiBcImhpc3RvcmljXCIsIHRleHQ6IFwiUkVQT1JUX0hJU1RPUklDX0NBU0VTXCIgfSxcclxuICAgIF07XHJcbiAgICBwdWJsaWMgcmVwb3J0VHlwZVNlbGVjdGVkKHR5cGU6IFJlcG9ydFR5cGVbXSkge1xyXG4gICAgICAgIHRoaXMucmVwb3J0VHlwZSA9IHR5cGUuc2hpZnQoKTtcclxuICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYXNlUmVzdWx0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2ggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEdyaWRTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuU2VhcmNoUmVzdWx0Q291bnQgPSBudWxsO1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5yZXBvcnRUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhY3RpdmVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEFjdGl2ZVJlcG9ydCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZXBvcnQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicHJvamVjdFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UHJvamVjdFJlcG9ydCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSZXBvcnQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiaGlzdG9yaWNcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEhpc3RvcmljUmVwb3J0KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJhbGFuY2VcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEJhbGFuY2VSZXBvcnQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX3JlcG9ydFR5cGU6IFJlcG9ydFR5cGUgPSBcImFjdGl2ZVwiO1xyXG4gICAgcHJpdmF0ZSBnZXQgcmVwb3J0VHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVwb3J0VHlwZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0IHJlcG9ydFR5cGUodmFsOiBSZXBvcnRUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0VHlwZSA9IHZhbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0VHlwZSA9IHZhbCA/IFt2YWxdIDogW107XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRSZXBvcnRUeXBlID0gW1wiYWN0aXZlXCJdO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgY2FzZVR5cGVNYXBwaW5ncygpIHtcclxuICAgICAgICByZXR1cm4gUmVwb3J0cy5DYXNlVHlwZXNNYXBwaW5nO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZWxlY3RlZENhc2VUeXBlczoge1xyXG4gICAgICAgIHZhbHVlOiBDYXNlVHlwZVNlbGVjdG9yO1xyXG4gICAgICAgIGNhc2VUeXBlOiBDYXNlVHlwZVtdO1xyXG4gICAgICAgIGRlc2M6IHN0cmluZztcclxuICAgIH0gPSBSZXBvcnRzLkNhc2VUeXBlc01hcHBpbmdbMl07XHJcbiAgICBwdWJsaWMgY2FzZVR5cGVTZWxlY3RlZChjYXNlVHlwZVNlbGVjdGVkOiB7XHJcbiAgICAgICAgdmFsdWU6IENhc2VUeXBlU2VsZWN0b3I7XHJcbiAgICAgICAgY2FzZVR5cGU6IENhc2VUeXBlW107XHJcbiAgICAgICAgZGVzYzogc3RyaW5nO1xyXG4gICAgfSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXNlVHlwZXMgPSBjYXNlVHlwZVNlbGVjdGVkO1xyXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydFR5cGUgPT0gXCJhY3RpdmVcIiB8fCB0aGlzLmNoYXJ0RGF0YSAhPSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlcG9ydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVwb3J0UGVyaW9kcygpIHtcclxuICAgICAgICByZXR1cm4gUmVwb3J0cy5QZXJpb2RzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZWxlY3RlZFJlcG9ydFBlcmlvZDogUmVwb3J0UGVyaW9kW10gPSBbXCJtb250aFwiXTtcclxuICAgIHB1YmxpYyByZXBvcnRQZXJpb2RDaGFuZ2VkKHBlcmlvZDogUmVwb3J0UGVyaW9kW10pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0UGVyaW9kID0gcGVyaW9kIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0ZUZvckJhbGFuY2VQZXJpb2QoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJlcG9ydEFuZ2xlcygpIHtcclxuICAgICAgICByZXR1cm4gUmVwb3J0cy5BbmdsZXM7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNlbGVjdGVkUmVwb3J0QW5nbGU6IFJlcG9ydEFuZ2xlID0gXCJzdGF0dXNcIjtcclxuICAgIHB1YmxpYyByZXBvcnRBbmdsZUNoYW5nZWQoYW5nbGU6IFJlcG9ydEFuZ2xlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydEFuZ2xlID0gYW5nbGU7XHJcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0VHlwZSA9PSBcImFjdGl2ZVwiIHx8IHRoaXMuY2hhcnREYXRhICE9IG51bGwpXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVwb3J0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGFydERhdGE6IENoYXJ0RGF0YTtcclxuXHJcbiAgICBwcml2YXRlIF9yZXBvcnRUb0RhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgZ2V0IHJlcG9ydFRvRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVwb3J0VG9EYXRlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlcG9ydHRvZGF0ZWNoYW5nZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIGlmIChkYXRlKSBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydFRvRGF0ZSA9IGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVwb3J0RnJvbURhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgZ2V0IHJlcG9ydEZyb21EYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBvcnRGcm9tRGF0ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZXBvcnRmcm9tZGF0ZWNoYW5nZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIGlmIChkYXRlKSBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydEZyb21EYXRlID0gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tYXhGcm9tRGF0ZTogRGF0ZTtcclxuICAgIHB1YmxpYyBnZXQgbWF4RnJvbURhdGUoKTogRGF0ZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9yZXBvcnRUb0RhdGUpIHtcclxuICAgICAgICAgICAgbGV0IG0gPSBEYXRlLnRvZGF5KCk7XHJcbiAgICAgICAgICAgIG0uc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIG0gPSBtLmFkZERheXMoLTEpO1xyXG4gICAgICAgICAgICByZXR1cm4gbS5lcXVhbHModGhpcy5fbWF4RnJvbURhdGUpXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21heEZyb21EYXRlXHJcbiAgICAgICAgICAgICAgICA6ICh0aGlzLl9tYXhGcm9tRGF0ZSA9IG0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtID0gRGF0ZS50b2RheSgpO1xyXG4gICAgICAgICAgICBtLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVwb3J0VG9EYXRlIDw9IG0pIHtcclxuICAgICAgICAgICAgICAgIG0gPSB0aGlzLl9yZXBvcnRUb0RhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG0uZXF1YWxzKHRoaXMuX21heEZyb21EYXRlKVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tYXhGcm9tRGF0ZVxyXG4gICAgICAgICAgICAgICAgOiAodGhpcy5fbWF4RnJvbURhdGUgPSBtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9taW5Ub0RhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgZ2V0IG1pblRvRGF0ZSgpOiBEYXRlIHtcclxuICAgICAgICBpZiAodGhpcy5fcmVwb3J0RnJvbURhdGUpIHtcclxuICAgICAgICAgICAgdmFyIG0gPSB0aGlzLl9yZXBvcnRGcm9tRGF0ZTtcclxuICAgICAgICAgICAgcmV0dXJuIG0uZXF1YWxzKHRoaXMuX21pblRvRGF0ZSlcclxuICAgICAgICAgICAgICAgID8gdGhpcy5fbWluVG9EYXRlXHJcbiAgICAgICAgICAgICAgICA6ICh0aGlzLl9taW5Ub0RhdGUgPSBtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9tYXhUb0RhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgZ2V0IG1heFRvRGF0ZSgpOiBEYXRlIHtcclxuICAgICAgICB2YXIgZCA9IERhdGUudG9kYXkoKTtcclxuICAgICAgICBkLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgIGQuc2V0TW9udGgoZC5nZXRNb250aCgpICsgMSwgMSk7XHJcbiAgICAgICAgZCA9IGQuYWRkRGF5cygtMSk7XHJcbiAgICAgICAgcmV0dXJuIGQuZXF1YWxzKHRoaXMuX21heFRvRGF0ZSlcclxuICAgICAgICAgICAgPyB0aGlzLl9tYXhUb0RhdGVcclxuICAgICAgICAgICAgOiAodGhpcy5fbWF4VG9EYXRlID0gZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbWF4VG9EYXRlQmFsYW5jZVJlcG9ydDogRGF0ZTtcclxuICAgIHB1YmxpYyBnZXQgbWF4VG9EYXRlQmFsYW5jZVJlcG9ydCgpOiBEYXRlIHtcclxuICAgICAgICB2YXIgZCA9IERhdGUudG9kYXkoKTtcclxuICAgICAgICBkLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgIGQuc2V0TW9udGgoMTEsIDMxKTtcclxuICAgICAgICByZXR1cm4gZC5lcXVhbHModGhpcy5fbWF4VG9EYXRlQmFsYW5jZVJlcG9ydClcclxuICAgICAgICAgICAgPyB0aGlzLl9tYXhUb0RhdGVCYWxhbmNlUmVwb3J0XHJcbiAgICAgICAgICAgIDogKHRoaXMuX21heFRvRGF0ZUJhbGFuY2VSZXBvcnQgPSBkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFjdGl2ZUNhc2VzT25seTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBhY3RpdmVDYXNlc09ubHlDaGVja2VkKGFjdGl2ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FzZXNPbmx5ID0gYWN0aXZlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV3T25Ub3A6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIG5ld09uVG9wQ2hlY2tlZChhY3RpdmU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLm5ld09uVG9wID0gYWN0aXZlO1xyXG4gICAgICAgIGlmICh0aGlzLl9kYXRhKSB0aGlzLmxvYWQodGhpcy5fZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkaXNwbGF5QmFsYW5jZVZhbHVlczogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgb25EaXNwbGF5QmFsYW5jZVZhbHVlcyhhY3RpdmU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlCYWxhbmNlVmFsdWVzID0gYWN0aXZlO1xyXG4gICAgICAgIGlmICh0aGlzLl9kYXRhKSB0aGlzLmxvYWQodGhpcy5fZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZXBvcnRVcmwocmVwb3J0VHlwZTogUmVwb3J0VHlwZSkge1xyXG4gICAgICAgIHZhciBzdGFydCA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgdmFyIHVybDogSUlkZW50aXR5TGluaztcclxuICAgICAgICBzd2l0Y2ggKHRoaXMucmVwb3J0VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYWN0aXZlXCI6XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBzdGFydC5yZXBvcnRBY3RpdmVDYXNlcztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicHJvamVjdFwiOlxyXG4gICAgICAgICAgICAgICAgdXJsID0gc3RhcnQucmVwb3J0UHJvamVjdENhc2VzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJoaXN0b3JpY1wiOlxyXG4gICAgICAgICAgICAgICAgdXJsID0gc3RhcnQucmVwb3J0SGlzdG9yaWNDYXNlcztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYmFsYW5jZVwiOlxyXG4gICAgICAgICAgICAgICAgdXJsID0gc3RhcnQuYmFsYW5jZVJlcG9ydDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXJsLmZ1bGxIcmVmLnJlcGxhY2UoL3suKn0vLCBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlUmVwb3J0KCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMucmVwb3J0VHlwZSB8fFxyXG4gICAgICAgICAgICAhdGhpcy5zZWxlY3RlZENhc2VUeXBlcyB8fFxyXG4gICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAodGhpcy5yZXBvcnRUeXBlID09IFwiaGlzdG9yaWNcIiB8fCB0aGlzLnJlcG9ydFR5cGUgPT0gXCJiYWxhbmNlXCIpICYmXHJcbiAgICAgICAgICAgICghdGhpcy5fcmVwb3J0RnJvbURhdGUgfHwgIXRoaXMucmVwb3J0VG9EYXRlKVxyXG4gICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXBvcnRUeXBlID09IFwicHJvamVjdFwiICYmXHJcbiAgICAgICAgICAgICghdGhpcy5jYXNlSWQgfHwgdGhpcy5jYXNlSWQgPCAxMDAwMClcclxuICAgICAgICApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRMaW5rID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHJlcG9ydFVybCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY2FzZVJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBjaWQgPSB0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLm1hcCgoaykgPT4gay5rZXkpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2ggPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRHcmlkU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIFtyZXBvcnRVcmxdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRVcmwodGhpcy5yZXBvcnRUeXBlKSxcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLm9uTG9hZGVkLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoU2VydmljZVV0aWxzLklzVW5hdXRob3JpemVkUmVzcG9uc2UoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5zZXRTZXFVcmwoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICBcIlJlcG9ydHNcIixcclxuICAgICAgICAgICAgICAgIFwiRXJyb3Igd2hpbGUgZ2V0dGluZyByZXBvcnQgZGF0YVwiLFxyXG4gICAgICAgICAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvckRpYWxvZyhcclxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIixcclxuICAgICAgICAgICAgICAgIFwiRVJST1JcIixcclxuICAgICAgICAgICAgICAgIFwiUkVQT1JUX1NFQVJDSF9FUlJPUlwiLFxyXG4gICAgICAgICAgICAgICAgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzOiBSZXBvcnRQYXJhbWV0ZXJzIHwgQmFsYW5jZVJlcG9ydFBhcmFtZXRlcnM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydFR5cGUgPT0gXCJhY3RpdmVcIikge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzID0gPFJlcG9ydFBhcmFtZXRlcnM+e1xyXG4gICAgICAgICAgICAgICAgYW5nbGU6IHRoaXMuc2VsZWN0ZWRSZXBvcnRBbmdsZSxcclxuICAgICAgICAgICAgICAgIGNhc2VUeXBlOiB0aGlzLnNlbGVjdGVkQ2FzZVR5cGVzLmNhc2VUeXBlLFxyXG4gICAgICAgICAgICAgICAgY2lkOiBjaWQsXHJcbiAgICAgICAgICAgICAgICBhY3RpdmVDYXNlc09ubHk6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGZyb206IG5ldyBEYXRlKDIwMTYsIDAsIDEsIDAsIDAsIDAsIDApLnRvSVNPRGF0ZVN0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdW50aWw6IERhdGUudG9kYXkoKS5hZGREYXlzKDEpLnRvSVNPRGF0ZVN0cmluZygpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXBvcnRUeXBlID09IFwicHJvamVjdFwiKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgPSA8UmVwb3J0UGFyYW1ldGVycz57XHJcbiAgICAgICAgICAgICAgICBhbmdsZTogdGhpcy5zZWxlY3RlZFJlcG9ydEFuZ2xlLFxyXG4gICAgICAgICAgICAgICAgY2FzZVR5cGU6IHRoaXMuc2VsZWN0ZWRDYXNlVHlwZXMuY2FzZVR5cGUsXHJcbiAgICAgICAgICAgICAgICBwcm9qZWN0VHJlZU9mTnVtYmVyOiB0aGlzLmNhc2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgY2lkOiBjaWQsXHJcbiAgICAgICAgICAgICAgICBhY3RpdmVDYXNlc09ubHk6IHRoaXMuYWN0aXZlQ2FzZXNPbmx5ID8gdHJ1ZSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGZyb206ICh0aGlzLl9yZXBvcnRGcm9tRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5fcmVwb3J0RnJvbURhdGVcclxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKDIwMTYsIDAsIDEsIDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICAgICApLnRvSVNPRGF0ZVN0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdW50aWw6ICh0aGlzLl9yZXBvcnRUb0RhdGUgPyB0aGlzLl9yZXBvcnRUb0RhdGUgOiBEYXRlLnRvZGF5KCkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFkZERheXMoMSlcclxuICAgICAgICAgICAgICAgICAgICAudG9JU09EYXRlU3RyaW5nKCksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlcG9ydFR5cGUgPT0gXCJoaXN0b3JpY1wiKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgPSA8UmVwb3J0UGFyYW1ldGVycz57XHJcbiAgICAgICAgICAgICAgICBhbmdsZTogdGhpcy5zZWxlY3RlZFJlcG9ydEFuZ2xlLFxyXG4gICAgICAgICAgICAgICAgY2FzZVR5cGU6IHRoaXMuc2VsZWN0ZWRDYXNlVHlwZXMuY2FzZVR5cGUsXHJcbiAgICAgICAgICAgICAgICBjaWQ6IGNpZCxcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUNhc2VzT25seTogdGhpcy5hY3RpdmVDYXNlc09ubHkgPyB0cnVlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgZnJvbTogdGhpcy5fcmVwb3J0RnJvbURhdGUudG9JU09EYXRlU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB1bnRpbDogdGhpcy5fcmVwb3J0VG9EYXRlLmFkZERheXMoMSkudG9JU09EYXRlU3RyaW5nKCksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlcG9ydFR5cGUgPT0gXCJiYWxhbmNlXCIpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVycyA9IDxCYWxhbmNlUmVwb3J0UGFyYW1ldGVycz57XHJcbiAgICAgICAgICAgICAgICBmcm9tOiB0aGlzLl9yZXBvcnRGcm9tRGF0ZS50b0lTT0RhdGVTdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHVudGlsOiB0aGlzLl9yZXBvcnRUb0RhdGUuYWRkRGF5cygxKS50b0lTT0RhdGVTdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGNhc2VUeXBlOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXNlVHlwZXMuY2FzZVR5cGUubGVuZ3RoID09IDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZENhc2VUeXBlcy5jYXNlVHlwZVswXSxcclxuICAgICAgICAgICAgICAgIHBlcmlvZDogdGhpcy5zZWxlY3RlZFJlcG9ydFBlcmlvZFswXSxcclxuICAgICAgICAgICAgICAgIGNhc2VTdGF0ZTogXCJhbGxcIixcclxuICAgICAgICAgICAgICAgIGNpZDogY2lkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgIHZhciBzdWIgPSBSeC5PYnNlcnZhYmxlLmZyb21Qcm9taXNlKFxyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0UmVwb3J0KHJlcG9ydFVybCwgcGFyYW1ldGVycylcclxuICAgICAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB0aGlzLmxvYWQoZGF0YSksXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJSZXBvcnRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJFcnJvciB3aGlsZSBnZXR0aW5nIHJlcG9ydCBkYXRhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yRGlhbG9nKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIixcclxuICAgICAgICAgICAgICAgICAgICBcIkVSUk9SXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJSRVBPUlRfU0VBUkNIX0VSUk9SXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN1Yi5hZGQoKCkgPT4gdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCkpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaCA9IHN1YjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBjaGFydFNldHRpbmdzOiBDaGFydFNldHRpbmdzID0ge1xyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0eXBlOiBcIlBpZUNoYXJ0XCIsXHJcbiAgICAgICAgZGF0YTogPENoYXJ0RGF0YT57XHJcbiAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICBjb2xzOiBbXSxcclxuICAgICAgICAgICAgcm93czogW10sXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBhbGxMaW5rID0gbnVsbDtcclxuICAgIHByaXZhdGUgX3NlcnZpY2VDYXNlc0NvdW50OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZ2V0IHNlcnZpY2VDYXNlc0NvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VDYXNlc0NvdW50O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfZGF0YTogUmVwb3J0Q29sbGVjdGlvbjtcclxuICAgIHB1YmxpYyBsb2FkKGRhdGE6IFJlcG9ydENvbGxlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmFsbExpbmsgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2hhcnREYXRhID0gbnVsbDtcclxuICAgICAgICB2YXIgc2V0dGluZ3MgPSBhbmd1bGFyLmNvcHkodGhpcy5jaGFydERlZmluaXRpb25zW3RoaXMucmVwb3J0VHlwZV0pO1xyXG4gICAgICAgIHZhciBzb3J0aW5ncyA9IHRoaXMuY2hhcnREZWZpbml0aW9ucy5zb3J0aW5nc1t0aGlzLnNlbGVjdGVkUmVwb3J0QW5nbGVdO1xyXG4gICAgICAgIHZhciBjb2xvcnMgPSB0aGlzLmNoYXJ0RGVmaW5pdGlvbnMuY29sb3JzW3RoaXMuc2VsZWN0ZWRSZXBvcnRBbmdsZV07XHJcbiAgICAgICAgdGhpcy5fc2VydmljZUNhc2VzQ291bnQgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydFR5cGUgPT0gXCJhY3RpdmVcIikge1xyXG4gICAgICAgICAgICBzZXR0aW5ncy5vcHRpb25zLnRpdGxlID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5UcmFuc2xhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgYENIQVJULiR7dGhpcy5yZXBvcnRUeXBlfS4ke3RoaXMuc2VsZWN0ZWRSZXBvcnRBbmdsZX0uVElUTEVgXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICAgICAgICAgICBcIntjb3VudH1cIixcclxuICAgICAgICAgICAgICAgICAgICBOdW1iZXIoZGF0YS52YWx1ZSkudG9Mb2NhbGVGb3JtYXR0ZWRTdHJpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmdldExvY2FsKClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJlcG9ydEFuZ2xlID09IFwic3RhdHVzXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5wYXJzZUFjdGl2ZShcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9ycyxcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyxcclxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGluZ3NbYVswXS50b0xvY2FsZUxvd2VyQ2FzZSgpXSAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRpbmdzW2JbMF0udG9Mb2NhbGVMb3dlckNhc2UoKV1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMucGFyc2VBY3RpdmUoZGF0YSwgY29sb3JzLCBzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVwb3J0VHlwZSA9PSBcInByb2plY3RcIikge1xyXG4gICAgICAgICAgICBzZXR0aW5ncy5vcHRpb25zLnRpdGxlID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5UcmFuc2xhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgYENIQVJULiR7dGhpcy5yZXBvcnRUeXBlfS4ke3RoaXMuc2VsZWN0ZWRSZXBvcnRBbmdsZX0uVElUTEVgXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgICAgICAgICAgICBcIntjb3VudH1cIixcclxuICAgICAgICAgICAgICAgICAgICBOdW1iZXIoZGF0YS52YWx1ZSkudG9Mb2NhbGVGb3JtYXR0ZWRTdHJpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmdldExvY2FsKClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJlcG9ydEFuZ2xlID09IFwic3RhdHVzXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5wYXJzZUFjdGl2ZShcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9ycyxcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyxcclxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGluZ3NbYVswXS50b0xvY2FsZUxvd2VyQ2FzZSgpXSAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRpbmdzW2JbMF0udG9Mb2NhbGVMb3dlckNhc2UoKV1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMucGFyc2VBY3RpdmUoZGF0YSwgY29sb3JzLCBzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVwb3J0VHlwZSA9PSBcImhpc3RvcmljXCIpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3Mub3B0aW9ucy50aXRsZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuVHJhbnNsYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIGBDSEFSVC4ke3RoaXMucmVwb3J0VHlwZX0uJHt0aGlzLnNlbGVjdGVkUmVwb3J0QW5nbGV9LlRJVExFYFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ7Y291bnR9XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgTnVtYmVyKGRhdGEudmFsdWUpLnRvTG9jYWxlRm9ybWF0dGVkU3RyaW5nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRMb2NhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSZXBvcnRBbmdsZSA9PSBcInN0YXR1c1wiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMucGFyc2VIaXN0b3J5KFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JzLFxyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLFxyXG4gICAgICAgICAgICAgICAgICAgIChiLCBhKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0aW5nc1thWzBdLnRvTG9jYWxlTG93ZXJDYXNlKCldIC1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGluZ3NbYlswXS50b0xvY2FsZUxvd2VyQ2FzZSgpXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5wYXJzZUhpc3RvcnkoZGF0YSwgY29sb3JzLCBzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVwb3J0VHlwZSA9PSBcImJhbGFuY2VcIikge1xyXG4gICAgICAgICAgICB2YXIgcGVyaW9kID0gdGhpcy5yZXBvcnRQZXJpb2RzXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChwKSA9PiB0aGlzLnNlbGVjdGVkUmVwb3J0UGVyaW9kWzBdID09IHAua2V5KVxyXG4gICAgICAgICAgICAgICAgLnNoaWZ0KCkudGV4dDtcclxuICAgICAgICAgICAgc2V0dGluZ3Mub3B0aW9ucy50aXRsZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuVHJhbnNsYXRlKGBDSEFSVC5CQUxBTkNFLlRJVExFYClcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIFwie3R5cGV9XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKHBlcmlvZCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLnBhcnNlQmFsYW5jZShcclxuICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGVmaW5pdGlvbnMuY29sb3JzW1wiYmFsYW5jZVwiXSxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgYFVua25vd24gcmVwb3J0IHR5cGUgJHt0aGlzLnJlcG9ydFR5cGV9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0dGluZ3MuZGF0YSA9IHRoaXMuY2hhcnREYXRhO1xyXG4gICAgICAgIHRoaXMuY2hhcnRTZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuYWxsTGluayA9IGRhdGEucmVjb3JkcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGFyc2VCYWxhbmNlKFxyXG4gICAgICAgIGRhdGE6IFJlcG9ydENvbGxlY3Rpb24sXHJcbiAgICAgICAgY29sb3JzOiB7IFtjb2x1bW46IHN0cmluZ106IHN0cmluZyB9LFxyXG4gICAgICAgIHNldHRpbmdzOiBDaGFydFNldHRpbmdzXHJcbiAgICApOiBDaGFydERhdGEge1xyXG4gICAgICAgIHZhciBkYXRhc2V0OiBDaGFydERhdGEgPSB7XHJcbiAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxyXG4gICAgICAgICAgICBjb2xzOiBbeyBpZDogXCJNb250aFwiLCBsYWJlbDogXCJEYXRlXCIsIHR5cGU6IFwiZGF0ZVwiIH1dLFxyXG4gICAgICAgICAgICByb3dzOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBtb250aHM6IHtcclxuICAgICAgICAgICAgW21vbnRoOiBzdHJpbmddOiBSZXBvcnRDb2xsZWN0aW9uSXRlbSAmIHtcclxuICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IFJlcG9ydENvbGxlY3Rpb25JdGVtO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gPSB7fTtcclxuXHJcbiAgICAgICAgdmFyIGNvbHVtbktleXM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFxyXG4gICAgICAgICAgICBkYXRhLml0ZW1zLnJlZHVjZSgocCwgYywgaSwgYSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbW9udGhzW2MuZGVzY10gPSA8YW55PmM7XHJcbiAgICAgICAgICAgICAgICBjLml0ZW1zLmZvckVhY2goKGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwW2kuZGVzY10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoc1tjLmRlc2NdW2kuZGVzY10gPSBpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcclxuICAgICAgICAgICAgfSwge30pXHJcbiAgICAgICAgKS5tYXA8W3N0cmluZywgc3RyaW5nXT4oKGMpID0+IHtcclxuICAgICAgICAgICAgdmFyIHQgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBbYywgdFswXS50b1VwcGVyQ2FzZSgpICsgdC5zdWJzdHIoMSldO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uS2V5cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBjb2x1bW5LZXlzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgXCJub2RhdGFcIixcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIk5PX0RBVEFcIiksXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbHVtbktleXMucHVzaChbXHJcbiAgICAgICAgICAgICAgICBcIlNhbGRvXCIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJTQUxET1wiKSxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2x1bW5LZXlzLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICAgICAgICBkYXRhc2V0LmNvbHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogY29sWzBdLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGNvbFsxXSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciB0aWNrczogRGF0ZVtdID0gW107XHJcbiAgICAgICAgVXRpbHMuZm9yRWFjaEtleShtb250aHMsIChtb250aCwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBmaXJzdCA9IGtleS5zcGxpdChcInxcIilbMF07XHJcbiAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoZmlyc3QpO1xyXG4gICAgICAgICAgICB2YXIgcm93OiBDaGFydFJvdyA9IHtcclxuICAgICAgICAgICAgICAgIGM6IFt7IHY6IDxhbnk+ZGF0ZSwgcmVjb3JkczogKCkgPT4gbW9udGgucmVjb3JkcyB9XS5jb25jYXQoXHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5cy5tYXAoKGspID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBrWzBdID09IFwiU2FsZG9cIiA/IG1vbnRoIDogbW9udGhba1swXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IE51bWJlcihpdGVtLnZhbHVlIHx8IDApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogKCkgPT4gaXRlbS5yZWNvcmRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRpY2tzLnB1c2goZGF0ZSk7XHJcbiAgICAgICAgICAgIGRhdGFzZXQucm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNldHRpbmdzLm9wdGlvbnMuaEF4aXMgPSBzZXR0aW5ncy5vcHRpb25zLmhBeGlzIHx8IHt9O1xyXG4gICAgICAgIHNldHRpbmdzLm9wdGlvbnMuaEF4aXMudGlja3MgPSB0aWNrcztcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJlcG9ydFBlcmlvZFswXSA9PSBcInllYXJcIilcclxuICAgICAgICAgICAgc2V0dGluZ3Mub3B0aW9ucy5oQXhpcy5mb3JtYXQgPSBcInl5eXlcIjtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmVwb3J0UGVyaW9kWzBdID09IFwiZGF5XCIpXHJcbiAgICAgICAgICAgIHNldHRpbmdzLm9wdGlvbnMuaEF4aXMuZm9ybWF0ID0gXCJkZCBNTU0geXl5eVwiO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSZXBvcnRQZXJpb2RbMF0gPT0gXCJ3ZWVrXCIpXHJcbiAgICAgICAgICAgIHNldHRpbmdzLm9wdGlvbnMuaEF4aXMuZm9ybWF0ID0gXCJ3dyAoeXl5eSlcIjtcclxuICAgICAgICBlbHNlIHNldHRpbmdzLm9wdGlvbnMuaEF4aXMuZm9ybWF0ID0gXCJNTU0geXl5eVwiO1xyXG4gICAgICAgIHNldHRpbmdzLm9wdGlvbnMudkF4aXMgPSBzZXR0aW5ncy5vcHRpb25zLnZBeGlzIHx8IHt9O1xyXG4gICAgICAgIHNldHRpbmdzLm9wdGlvbnMudkF4aXMuZm9ybWF0ID0gXCIjOyNcIjtcclxuXHJcbiAgICAgICAgdmFyIHBlcmlvZFRvb2xUaXAgPSAodCwgciwgYykgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0LmdldFZhbHVlKHIsIGMpO1xyXG4gICAgICAgICAgICB2YXIgcHJlZml4ID0gXCJcIjtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkUmVwb3J0UGVyaW9kWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwieWVhclwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gdC5nZXRWYWx1ZShyLCAwKSBhcyBEYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IGAke2RhdGUuZ2V0RnVsbFllYXIoKX06IGA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwibW9udGhcIjpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IHQuZ2V0VmFsdWUociwgMCkgYXMgRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBgJHsoMTAxICsgZGF0ZS5nZXRNb250aCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic3RyKDEpfS0ke2RhdGUuZ2V0RnVsbFllYXIoKX06IGA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwid2Vla1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gdC5nZXRWYWx1ZShyLCAwKSBhcyBEYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IGAke3RoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJXRUVLXCJcclxuICAgICAgICAgICAgICAgICAgICApfSAke2RhdGUuZ2V0V2Vla051bWJlcigpfTogYDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXlcIjpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IHQuZ2V0VmFsdWUociwgMCkgYXMgRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBgJHtkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfTogYDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7dmFsdWV9YDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgZGF0YUNvbHVtbjAgPSAwO1xyXG4gICAgICAgIHZhciBkYXRhQ29sdW1uMSA9IHtcclxuICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICAgICAgcm9sZTogXCJkYXRhXCIsXHJcbiAgICAgICAgICAgIGxhYmVsOiBkYXRhc2V0LmNvbHNbMV0ubGFiZWwsXHJcbiAgICAgICAgICAgIGlkOiBkYXRhc2V0LmNvbHNbMV0uaWQsXHJcbiAgICAgICAgICAgIGNhbGM6ICh0LCByKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdC5nZXRWYWx1ZShyLCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPT0gMCA/IG51bGwgOiB2YWwgKiAodGhpcy5uZXdPblRvcCA/IDEgOiAtMSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZvcm1hdDogXCIjOyNcIixcclxuICAgICAgICAgICAgc291cmNlQ29sdW1uOiAxLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbZGF0YUNvbHVtbjEuaWQudG9Mb3dlckNhc2UoKV0pXHJcbiAgICAgICAgICAgIGRhdGFDb2x1bW4xW1wiY29sb3JcIl0gPSBjb2xvcnNbZGF0YUNvbHVtbjEuaWQudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgdmFyIHRvb2x0aXBDb2x1bW4xID0ge1xyXG4gICAgICAgICAgICBjYWxjOiAodCwgcikgPT4gcGVyaW9kVG9vbFRpcCh0LCByLCAxKSxcclxuICAgICAgICAgICAgZm9ybWF0OiBcIiM7I1wiLFxyXG4gICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICByb2xlOiBcInRvb2x0aXBcIixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBkdW1teURhdGFDb2x1bW4xID0ge1xyXG4gICAgICAgICAgICBjYWxjOiAodCwgcikgPT4gKCh0LmdldFZhbHVlKHIsIDEpIHx8IDApID4gMCA/IC0wLjAxIDogbnVsbCksXHJcbiAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgICAgIHJvbGU6IFwiZGF0YVwiLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGFubm90YXRpb25Db2x1bW4xID0ge1xyXG4gICAgICAgICAgICBjYWxjOiAodCwgcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHQuZ2V0VmFsdWUociwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09IDAgPyBudWxsIDogYCR7dmFsfWA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogMSxcclxuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgcm9sZTogXCJhbm5vdGF0aW9uXCIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgZGF0YUNvbHVtbjIgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgICAgIHJvbGU6IFwiZGF0YVwiLFxyXG4gICAgICAgICAgICBsYWJlbDogZGF0YXNldC5jb2xzWzJdLmxhYmVsLFxyXG4gICAgICAgICAgICBpZDogZGF0YXNldC5jb2xzWzJdLmlkLFxyXG4gICAgICAgICAgICBjYWxjOiAodCwgcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHQuZ2V0VmFsdWUociwgMik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09IDAgPyBudWxsIDogdmFsICogKHRoaXMubmV3T25Ub3AgPyAtMSA6IDEpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmb3JtYXQ6IFwiIzsjXCIsXHJcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogMixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChjb2xvcnMgJiYgY29sb3JzW2RhdGFDb2x1bW4yLmlkLnRvTG93ZXJDYXNlKCldKVxyXG4gICAgICAgICAgICBkYXRhQ29sdW1uMltcImNvbG9yXCJdID0gY29sb3JzW2RhdGFDb2x1bW4yLmlkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgIHZhciB0b29sdGlwQ29sdW1uMiA9IHtcclxuICAgICAgICAgICAgY2FsYzogKHQsIHIpID0+IHBlcmlvZFRvb2xUaXAodCwgciwgMiksXHJcbiAgICAgICAgICAgIGZvcm1hdDogXCIjOyNcIixcclxuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgcm9sZTogXCJ0b29sdGlwXCIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgZHVtbXlEYXRhQ29sdW1uMiA9IHtcclxuICAgICAgICAgICAgY2FsYzogKHQsIHIpID0+ICgodC5nZXRWYWx1ZShyLCAyKSB8fCAwKSA+IDAgPyAtMC4wMSA6IG51bGwpLFxyXG4gICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgICAgICByb2xlOiBcImRhdGFcIixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBhbm5vdGF0aW9uQ29sdW1uMiA9IHtcclxuICAgICAgICAgICAgY2FsYzogKHQsIHIpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0LmdldFZhbHVlKHIsIDIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAwID8gbnVsbCA6IGAke3ZhbH1gO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3VyY2VDb2x1bW46IDIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIHJvbGU6IFwiYW5ub3RhdGlvblwiLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGRhdGFDb2x1bW4zID0gMztcclxuICAgICAgICB2YXIgY29sb3JlZERhdGFDb2x1bW4zID0ge1xyXG4gICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgICAgICByb2xlOiBcImRhdGFcIixcclxuICAgICAgICAgICAgbGFiZWw6IGRhdGFzZXQuY29sc1szXS5sYWJlbCxcclxuICAgICAgICAgICAgaWQ6IGRhdGFzZXQuY29sc1szXS5pZCxcclxuICAgICAgICAgICAgc291cmNlQ29sdW1uOiAzLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbY29sb3JlZERhdGFDb2x1bW4zLmlkLnRvTG93ZXJDYXNlKCldKVxyXG4gICAgICAgICAgICBjb2xvcmVkRGF0YUNvbHVtbjNbXCJjb2xvclwiXSA9XHJcbiAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JlZERhdGFDb2x1bW4zLmlkLnRvTG93ZXJDYXNlKCldO1xyXG5cclxuICAgICAgICB2YXIgYW5ub3RhdGlvbkNvbHVtbjMgPSB7XHJcbiAgICAgICAgICAgIGNhbGM6IFwic3RyaW5naWZ5XCIsXHJcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogMyxcclxuICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgcm9sZTogXCJhbm5vdGF0aW9uXCIsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGNvbHVtbnM6IChDaGFydENvbHVtbiB8IE51bWJlcilbXSA9IFtkYXRhQ29sdW1uMF07XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKGRhdGFDb2x1bW4zKTtcclxuICAgICAgICBjb2x1bW5zLnB1c2goY29sb3JlZERhdGFDb2x1bW4zKTtcclxuICAgICAgICBpZiAoY29sdW1uc1syXVtcImNvbG9yXCJdKVxyXG4gICAgICAgICAgICBzZXR0aW5ncy5vcHRpb25zLnNlcmllc1sxXS5jb2xvciA9IGNvbHVtbnNbMl1bXCJjb2xvclwiXTtcclxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5QmFsYW5jZVZhbHVlcykgY29sdW1ucy5wdXNoKGFubm90YXRpb25Db2x1bW4zKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmV3T25Ub3ApIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKGRhdGFDb2x1bW4yKTtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHRvb2x0aXBDb2x1bW4yKTtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKGR1bW15RGF0YUNvbHVtbjIpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5QmFsYW5jZVZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGFubm90YXRpb25Db2x1bW4yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaChkYXRhQ29sdW1uMSk7XHJcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0b29sdGlwQ29sdW1uMSk7XHJcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaChkdW1teURhdGFDb2x1bW4xKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheUJhbGFuY2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChhbm5vdGF0aW9uQ29sdW1uMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbnNbdGhpcy5kaXNwbGF5QmFsYW5jZVZhbHVlcyA/IDQgOiAzXVtcImNvbG9yXCJdKVxyXG4gICAgICAgICAgICBzZXR0aW5ncy5vcHRpb25zLnNlcmllc1syXS5jb2xvciA9XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zW3RoaXMuZGlzcGxheUJhbGFuY2VWYWx1ZXMgPyA0IDogM11bXCJjb2xvclwiXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmV3T25Ub3ApIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKGRhdGFDb2x1bW4xKTtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHRvb2x0aXBDb2x1bW4xKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheUJhbGFuY2VWYWx1ZXMpIGNvbHVtbnMucHVzaChhbm5vdGF0aW9uQ29sdW1uMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKGRhdGFDb2x1bW4yKTtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHRvb2x0aXBDb2x1bW4yKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheUJhbGFuY2VWYWx1ZXMpIGNvbHVtbnMucHVzaChhbm5vdGF0aW9uQ29sdW1uMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2x1bW5zW3RoaXMuZGlzcGxheUJhbGFuY2VWYWx1ZXMgPyA4IDogNl1bXCJjb2xvclwiXSlcclxuICAgICAgICAgICAgc2V0dGluZ3Mub3B0aW9ucy5zZXJpZXNbNF0uY29sb3IgPVxyXG4gICAgICAgICAgICAgICAgY29sdW1uc1t0aGlzLmRpc3BsYXlCYWxhbmNlVmFsdWVzID8gOCA6IDZdW1wiY29sb3JcIl07XHJcblxyXG4gICAgICAgIHNldHRpbmdzLm9wdGlvbnMuc2VyaWVzWzFdLnBvaW50U2l6ZSA9IHRoaXMuZGlzcGxheUJhbGFuY2VWYWx1ZXNcclxuICAgICAgICAgICAgPyAyMlxyXG4gICAgICAgICAgICA6IDEyO1xyXG4gICAgICAgIHNldHRpbmdzLnZpZXcgPSB7IGNvbHVtbnM6IGNvbHVtbnMgfTtcclxuICAgICAgICByZXR1cm4gZGF0YXNldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGFyc2VIaXN0b3J5KFxyXG4gICAgICAgIGRhdGE6IFJlcG9ydENvbGxlY3Rpb24sXHJcbiAgICAgICAgY29sb3JzOiB7IFtjb2x1bW46IHN0cmluZ106IHN0cmluZyB9LFxyXG4gICAgICAgIHNldHRpbmdzOiBDaGFydFNldHRpbmdzLFxyXG4gICAgICAgIHNvcnQ/OiAoYTogW3N0cmluZywgc3RyaW5nXSwgYjogW3N0cmluZywgc3RyaW5nXSkgPT4gbnVtYmVyXHJcbiAgICApOiBDaGFydERhdGEge1xyXG4gICAgICAgIHZhciBkYXRhc2V0OiBDaGFydERhdGEgPSB7XHJcbiAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxyXG4gICAgICAgICAgICBjb2xzOiBbeyBpZDogXCJNb250aFwiLCBsYWJlbDogXCJEYXRlXCIsIHR5cGU6IFwiZGF0ZVwiIH1dLFxyXG4gICAgICAgICAgICByb3dzOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBtb250aHM6IHtcclxuICAgICAgICAgICAgW21vbnRoOiBzdHJpbmddOiBSZXBvcnRDb2xsZWN0aW9uSXRlbSAmIHtcclxuICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IFJlcG9ydENvbGxlY3Rpb25JdGVtO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gPSB7fTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuX3JlcG9ydEZyb21EYXRlLmNsb25lKCk7XHJcbiAgICAgICAgY3VycmVudC5zZXREYXRlKDEpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLmNvbXBhcmUoY3VycmVudCwgdGhpcy5fcmVwb3J0VG9EYXRlKSA8PSAwKSB7XHJcbiAgICAgICAgICAgIG1vbnRoc1tjdXJyZW50LnRvSVNPRGF0ZVN0cmluZygpLnN1YnN0cmluZygwLCA3KV0gPSA8YW55Pnt9O1xyXG4gICAgICAgICAgICBjdXJyZW50LnNldE1vbnRoKGN1cnJlbnQuZ2V0TW9udGgoKSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29sdW1uS2V5czogW3N0cmluZywgc3RyaW5nXVtdID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXHJcbiAgICAgICAgICAgIGRhdGEuaXRlbXMucmVkdWNlKChwLCBjLCBpLCBhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBtb250aHNbYy5kZXNjXSA9IDxhbnk+YztcclxuICAgICAgICAgICAgICAgIGMuaXRlbXMuZm9yRWFjaCgoaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBbaS5kZXNjXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGhzW2MuZGVzY11baS5kZXNjXSA9IGk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xyXG4gICAgICAgICAgICB9LCB7fSlcclxuICAgICAgICApXHJcbiAgICAgICAgICAgIC5tYXA8W3N0cmluZywgc3RyaW5nXT4oKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKGMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjLCB0WzBdLnRvVXBwZXJDYXNlKCkgKyB0LnN1YnN0cigxKV07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zb3J0KFxyXG4gICAgICAgICAgICAgICAgc29ydCA/IHNvcnQgOiAoYSwgYikgPT4gKGFbMV0gPCBiWzFdID8gMSA6IGFbMV0gPiBiWzFdID8gLTEgOiAwKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uS2V5cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBjb2x1bW5LZXlzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAgXCJub2RhdGFcIixcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIk5PX0RBVEFcIiksXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29sdW1uS2V5cy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICAgICAgZGF0YXNldC5jb2xzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGNvbFswXSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBjb2xbMV0sXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgdGlja3M6IERhdGVbXSA9IFtdO1xyXG4gICAgICAgIFV0aWxzLmZvckVhY2hLZXkobW9udGhzLCAobW9udGgsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGtleSArIFwiLTAxXCIpO1xyXG4gICAgICAgICAgICB2YXIgcm93OiBDaGFydFJvdyA9IHtcclxuICAgICAgICAgICAgICAgIGM6IFt7IHY6IDxhbnk+ZGF0ZSwgcmVjb3JkczogKCkgPT4gbW9udGgucmVjb3JkcyB9XS5jb25jYXQoXHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5cy5tYXAoKGspID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBtb250aFtrWzBdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogTnVtYmVyKGl0ZW0udmFsdWUgfHwgMCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiAoKSA9PiBpdGVtLnJlY29yZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGlja3MucHVzaChkYXRlKTtcclxuICAgICAgICAgICAgZGF0YXNldC5yb3dzLnB1c2gocm93KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY29sb3JzKSB7XHJcbiAgICAgICAgICAgIHZhciBzZXJpZXM6IHsgW2luZGV4OiBudW1iZXJdOiB7IGNvbG9yOiBzdHJpbmcgfSB9ID0ge307XHJcbiAgICAgICAgICAgIGNvbHVtbktleXMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChrLCBpKSA9PiAoc2VyaWVzW2ldID0geyBjb2xvcjogY29sb3JzW2tbMF0udG9Mb3dlckNhc2UoKV0gfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgc2V0dGluZ3Mub3B0aW9ucy5zZXJpZXMgPSBzZXJpZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldHRpbmdzLm9wdGlvbnMuaEF4aXMgPSB7XHJcbiAgICAgICAgICAgIHRpY2tzOiB0aWNrcyxcclxuICAgICAgICAgICAgZm9ybWF0OiBcIk1NTSB5eXl5XCIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZGF0YXNldDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBwYXJzZUFjdGl2ZShcclxuICAgICAgICBkYXRhOiBSZXBvcnRDb2xsZWN0aW9uLFxyXG4gICAgICAgIGNvbG9yczogeyBbY29sdW1uOiBzdHJpbmddOiBzdHJpbmcgfSxcclxuICAgICAgICBzZXR0aW5nczogQ2hhcnRTZXR0aW5ncyxcclxuICAgICAgICBzb3J0PzogKFxyXG4gICAgICAgICAgICBhOiBbc3RyaW5nLCBzdHJpbmcsIG51bWJlciwgSUlkZW50aXR5TGlua10sXHJcbiAgICAgICAgICAgIGI6IFtzdHJpbmcsIHN0cmluZywgbnVtYmVyLCBJSWRlbnRpdHlMaW5rXVxyXG4gICAgICAgICkgPT4gbnVtYmVyXHJcbiAgICApOiBDaGFydERhdGEge1xyXG4gICAgICAgIHZhciBjb2x1bW5LZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIHZhciByb3dzID0gW107XHJcbiAgICAgICAgZGF0YS5pdGVtc1xyXG4gICAgICAgICAgICAubWFwPFtzdHJpbmcsIHN0cmluZywgbnVtYmVyLCBJSWRlbnRpdHlMaW5rXT4oKGQpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKGQuZGVzYyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIGQuZGVzYyxcclxuICAgICAgICAgICAgICAgICAgICB0WzBdLnRvVXBwZXJDYXNlKCkgKyB0LnN1YnN0cigxKSxcclxuICAgICAgICAgICAgICAgICAgICBOdW1iZXIoZC52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgZC5yZWNvcmRzLFxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnNvcnQoXHJcbiAgICAgICAgICAgICAgICBzb3J0ID8gc29ydCA6IChhLCBiKSA9PiAoYVsxXSA8IGJbMV0gPyAtMSA6IGFbMV0gPiBiWzFdID8gMSA6IDApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJvd3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYzogW3sgdjogZFsxXSB9LCB7IHY6IGRbMl0gfV0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogKCkgPT4gZFszXSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29sdW1uS2V5cy5wdXNoKGRbMF0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIGRhdGFzZXQ6IENoYXJ0RGF0YSA9IHtcclxuICAgICAgICAgICAgaWQ6IGRhdGEuaWQsXHJcbiAgICAgICAgICAgIGNvbHM6IFtcclxuICAgICAgICAgICAgICAgIHsgaWQ6IFwidFwiLCBsYWJlbDogXCJsYWJlbFwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXHJcbiAgICAgICAgICAgICAgICB7IGlkOiBcInZcIiwgbGFiZWw6IFwidmFsdWVcIiwgdHlwZTogXCJudW1iZXJcIiB9LFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICByb3dzOiByb3dzLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbG9ycykge1xyXG4gICAgICAgICAgICB2YXIgc2xpY2VzOiB7IFtpbmRleDogbnVtYmVyXTogeyBjb2xvcjogc3RyaW5nIH0gfSA9IHt9O1xyXG4gICAgICAgICAgICBjb2x1bW5LZXlzLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAoaywgaSkgPT4gKHNsaWNlc1tpXSA9IHsgY29sb3I6IGNvbG9yc1trLnRvTG93ZXJDYXNlKCldIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHNldHRpbmdzLm9wdGlvbnMuc2xpY2VzID0gc2xpY2VzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YXNldDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRSZWNvcmRMaW5rOiBJSWRlbnRpdHlMaW5rO1xyXG4gICAgcHVibGljIGNoYXJ0T25TZWxlY3QoaXRlbT8pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRMaW5rID0gbnVsbDtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnRTZXR0aW5ncy52aWV3ICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnRTZXR0aW5ncy52aWV3LmNvbHVtbnMgJiZcclxuICAgICAgICAgICAgdGhpcy5jaGFydFNldHRpbmdzLnZpZXcuY29sdW1uc1tpdGVtLmNvbHVtbl1cclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY2hhcnRTZXR0aW5ncy52aWV3LmNvbHVtbnNbaXRlbS5jb2x1bW5dO1xyXG4gICAgICAgICAgICBpZiAoKDxDaGFydENvbHVtbj5jb2x1bW4pLnNvdXJjZUNvbHVtbilcclxuICAgICAgICAgICAgICAgIGl0ZW0uY29sdW1uID0gKDxDaGFydENvbHVtbj5jb2x1bW4pLnNvdXJjZUNvbHVtbjtcclxuICAgICAgICAgICAgZWxzZSBpZiAoIWlzTmFOKHBhcnNlSW50KGNvbHVtbi50b1N0cmluZygpKSkpIGl0ZW0uY29sdW1uID0gY29sdW1uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jaGFydERhdGEgJiYgaXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgeDogeyByZWNvcmRzPzogKCkgPT4gSUlkZW50aXR5TGluayB9O1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5yb3cgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbHVtbiA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSB0aGlzLmNoYXJ0RGF0YS5yb3dzW2l0ZW0ucm93XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IHRoaXMuY2hhcnREYXRhLnJvd3NbaXRlbS5yb3ddLmNbaXRlbS5jb2x1bW5dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVjb3JkcyA9IHggJiYgeC5yZWNvcmRzID8geC5yZWNvcmRzKCkgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAocmVjb3Jkcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVjb3JkTGluayA9IHJlY29yZHM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGxHcmlkKHJlY29yZHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHRpdGxlT25TZWxlY3QoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UmVjb3JkTGluayA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxsTGluaykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRMaW5rID0gdGhpcy5hbGxMaW5rO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxHcmlkKHRoaXMuYWxsTGluayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FzZVJlc3VsdDogQ29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+O1xyXG4gICAgcHJpdmF0ZSBub1Jlc3VsdHMgPSBbXTtcclxuICAgIHB1YmxpYyBnZXQgc2VydmljZUNhc2VzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhc2VSZXN1bHQgPyB0aGlzLmNhc2VSZXN1bHQuaXRlbXMgOiB0aGlzLm5vUmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jdXJyZW50R3JpZFN1YnNjcmlwdGlvbjogUnguU3Vic2NyaXB0aW9uO1xyXG4gICAgcHJpdmF0ZSBnZXQgY3VycmVudEdyaWRTdWJzY3JpcHRpb24oKTogUnguU3Vic2NyaXB0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEdyaWRTdWJzY3JpcHRpb247XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldCBjdXJyZW50R3JpZFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb246IFJ4LlN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50R3JpZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50R3JpZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jdXJyZW50R3JpZFN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGxHcmlkKGhyZWY6IElJZGVudGl0eUxpbmspIHtcclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgdmFyIHN1YiA9IFJ4Lk9ic2VydmFibGUuZnJvbVByb21pc2UoXHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0U2VydmljZS5HZXRSZXBvcnRDYXNlcyhocmVmLmZ1bGxIcmVmKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4gKHRoaXMuY2FzZVJlc3VsdCA9IHJlc3VsdCksXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJSZXBvcnRzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJFcnJvciByZXRyaWV2aW5nIGNhc2VzIGZvciByZXBvcnRcIixcclxuICAgICAgICAgICAgICAgICAgICBlcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3JEaWFsb2coXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRVJST1JcIixcclxuICAgICAgICAgICAgICAgICAgICBcIlJFUE9SVF9TRUFSQ0hfRVJST1JcIixcclxuICAgICAgICAgICAgICAgICAgICB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3ViLmFkZCgoKSA9PiB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50R3JpZFN1YnNjcmlwdGlvbiA9IHN1YjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoYXJ0RGVmaW5pdGlvbnM6IHsgW2NoYXJ0VHlwZTogc3RyaW5nXTogQ2hhcnRTZXR0aW5ncyB9ICYge1xyXG4gICAgICAgIGNvbG9yczogeyBbYW5nbGU6IHN0cmluZ106IHsgW2NvbHVtbjogc3RyaW5nXTogc3RyaW5nIH0gfTtcclxuICAgIH0gJiB7IHNvcnRpbmdzOiB7IFthbmdsZTogc3RyaW5nXTogeyBbY29sdW1uOiBzdHJpbmddOiBudW1iZXIgfSB9IH07XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVhsc3goKSB7XHJcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnNhdmVFeGNlbEZyb21Kc29uKHRoaXMuc2VydmljZUNhc2VzLCBudWxsKTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBJUm91dGluZ0NvbXBvbmVudCwgUm91dGVDb25maWcgfSBmcm9tIFwiQGZpcWFzL25nY29tcG9uZW50cm91dGVyXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIlxyXG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiXHJcbmltcG9ydCB7IFNlcnZpY2VDYXNlQmFzZSB9IGZyb20gXCIuLi9nZW5lcmFsL3NlcnZpY2VDYXNlQmFzZVwiXHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5pbXBvcnQgeyBTYXZlRGlhbG9nIH0gZnJvbSBcIi4uL2dlbmVyYWwvc2F2ZWRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcInJlcXVlc3RCYXNlXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogU2VydmljZUNhc2VCYXNlLnRlbXBsYXRlXHJcbn0pXHJcbkBSb3V0ZUNvbmZpZyhbXHJcbiAgICB7IHBhdGg6ICcvbmV3JywgbmFtZTogXCJOZXdcIiwgY29tcG9uZW50OiBcInJlcXVlc3RFbnRyeVwiLCB1c2VBc0RlZmF1bHQ6IHRydWUgfSxcclxuICAgIHsgcGF0aDogJy9lZGl0LzpudW1iZXInLCBuYW1lOiBcIkVkaXRcIiwgY29tcG9uZW50OiBcInJlcXVlc3RFZGl0XCIgfSxcclxuICAgIHsgcGF0aDogJy9lZGl0LzpudW1iZXIvOmlkJywgbmFtZTogXCJFZGl0V2l0aElkXCIsIGNvbXBvbmVudDogXCJyZXF1ZXN0RWRpdFwiIH1cclxuXVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0QmFzZSBleHRlbmRzIFNlcnZpY2VDYXNlQmFzZTxSZXF1ZXN0PiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgpIHByb3RlY3RlZCBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByb3RlY3RlZCBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFJvdXRlcicpIHJvb3RSb3V0ZXI6IGFuZ3VsYXIuUm91dGVyLFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGxvY2F0aW9uJykgbG9jYXRpb246IGFuZ3VsYXIuSUxvY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGF1dGhvcml6YXRpb25TZXJ2aWNlLCBjYWNoZVNlcnZpY2UsIHJvb3RSb3V0ZXIsIHRpbWVvdXQsIGxvY2F0aW9uKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwi77u/aW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIlxyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3NlcnZpY2VDYXNlU2VydmljZVwiXHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvblNlcnZpY2VcIlxyXG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiXHJcbmltcG9ydCB7IENhc2VGaWxlRGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZmlsZVwiXHJcbmltcG9ydCB7IFJlcXVlc3RCYXNlIH0gZnJvbSBcIi4vcmVxdWVzdEJhc2VcIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VFZGl0LCBDYXNlVHlwZSB9IGZyb20gXCIuLi9nZW5lcmFsL3NlcnZpY2VDYXNlRWRpdFwiO1xyXG5pbXBvcnQgeyBGZWVkYmFja1N0YXR1c0xpbmsgfSBmcm9tIFwiLi4vZ2VuZXJhbC9jb252ZXJzYXRpb25lbnRyeVwiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NhY2hlXCI7XHJcbmltcG9ydCB7IFN0YXR1c0J1dHRvbiB9IGZyb20gXCIuLi9nZW5lcmFsL3N0YXR1c2J1dHRvbnNcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb252ZXJzYXRpb25TZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTYXZlRGlhbG9nIH0gZnJvbSBcIi4uL2dlbmVyYWwvc2F2ZWRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2VydmljZUJhc2VcIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL0ZpbGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS91c2VyU2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcInJlcXVlc3RFZGl0XCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogU2VydmljZUNhc2VFZGl0LnRlbXBsYXRlLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiBcIl5hcHBsaWNhdGlvblwiLFxyXG4gICAgICAgIEJhc2U6IFwiXnJlcXVlc3RCYXNlXCJcclxuICAgIH1cclxufSlcclxuY2xhc3MgUmVxdWVzdEVkaXQgZXh0ZW5kcyBTZXJ2aWNlQ2FzZUVkaXQ8UmVxdWVzdD4ge1xyXG4gICAgcHJvdGVjdGVkIGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbjtcclxuICAgIHByb3RlY3RlZCBCYXNlOiBSZXF1ZXN0QmFzZTtcclxuICAgIEBJbnB1dCgpIHByb3RlY3RlZCAkcm91dGVyOiBuZy5Sb3V0ZXI7XHJcblxyXG4gICAgcHVibGljIGNhc2V0eXBlOiBDYXNlVHlwZSA9IFwicmVxdWVzdFwiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbCcpICRtb2RhbDogYW5ndWxhci51aS5ib290c3RyYXAuSU1vZGFsU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgc2VydmljZUNhc2VTZXJ2aWNlOiBTZXJ2aWNlQ2FzZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGlzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIFRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSAkYXV0aDogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRxJykgJHE6IG5nLklRU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSAkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRzY29wZScpICRzY29wZTogbmcuSVNjb3BlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290U2NvcGUnKSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ0NvbnZlcnNhdGlvblNldHRpbmdzJykgY29udmVyc2F0aW9uU2V0dGluZ3M6IENvbnZlcnNhdGlvblNldHRpbmdzLFxyXG4gICAgICAgIEBJbmplY3QoKSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBzYXZlRGlhbG9nOiBTYXZlRGlhbG9nLFxyXG4gICAgICAgIEBJbmplY3QoJyRlbGVtZW50JykgJGVsZW1lbnQ6IG5nLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCdob3RrZXlzJykgaG90a2V5czogbmcuaG90a2V5cy5Ib3RrZXlzUHJvdmlkZXIsXHJcbiAgICAgICAgQEluamVjdChGaWxlU2VydmljZS5zZWxlY3RvcikgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoVXNlclNlcnZpY2Uuc2VsZWN0b3IpIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFJvdXRlcicpIHByaXZhdGUgJHJvb3RSb3V0ZXI6IG5nLlJvdXRlcixcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGF1dGhvcml6YXRpb25TZXJ2aWNlLCBzZXJ2aWNlQ2FzZVNlcnZpY2UsIGlzUHJvY2Vzc2luZ1NlcnZpY2UsIFRyYW5zbGF0aW9uU2VydmljZSwgJGF1dGgsICRxLCBjYWNoZVNlcnZpY2UsICR0aW1lb3V0LCAkbW9kYWwsIGNvbnZlcnNhdGlvblNldHRpbmdzLCBsb2dTZXJ2aWNlLCBkaWFsb2dTZXJ2aWNlLCBzYXZlRGlhbG9nLCAkc2NvcGUsICRyb290U2NvcGUsICRlbGVtZW50LCBob3RrZXlzLCBmaWxlU2VydmljZSwgdXNlclNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvbkluaXQoKSB7XHJcbiAgICAgICAgdmFyIHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLm1pbkRlYWRsaW5lID0gdG9kYXk7XHJcbiAgICAgICAgdGhpcy5CYXNlLlRpdGxlID0gXCJSRVFVRVNUX05PXCI7XHJcbiAgICAgICAgdGhpcy5CYXNlLmhpZ2hsaWdodE1lbnVJdGVtID0gJ3JlcXVlc3QnO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLkJhc2UuVGl0bGUgPSAnJztcclxuICAgICAgICB0aGlzLkJhc2UuaGlnaGxpZ2h0TWVudUl0ZW0gPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgbG9hZERhdGEoKSB7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLlNlcnZpY2VDYXNlO1xyXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24uZm9yY2VkQ3VzdG9tZXIgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi5jdXN0b21lcnMpLmZpbHRlcih4ID0+IHgua2V5ID09IGRhdGEuY3VzdG9tZXIuaHJlZi5yZXBsYWNlKCdjdXN0b21lci8nLCAnJykpLm1hcChjID0+IGMudGV4dCkucG9wKCk7XHJcbiAgICAgICAgdGhpcy5kZWFkbGluZURUID0gZGF0YS5yZXF1ZXN0ZWREZWFkbGluZSA/IG5ldyBEYXRlKGRhdGEucmVxdWVzdGVkRGVhZGxpbmUpIDogbnVsbDtcclxuICAgICAgICB0aGlzLnN0YXR1c2xpbmtzID0gdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcyAmJiB0aGlzLlNlcnZpY2VDYXNlLmFjdGlvbkxpbmtzLnN0YXR1c0xpbmtzID8gT2JqZWN0LmtleXModGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5zdGF0dXNMaW5rcykubWFwPFN0YXR1c0J1dHRvbj4oeCA9PiB7IHJldHVybiB7IGlkOiB4LCBuYW1lOiBcImFjdF9cIiArIHgsIHRvb2x0aXBuYW1lOiB4IH0gfSkgOiBbXTtcclxuICAgICAgICB0aGlzLmZlZWRiYWNrTGlua3MgPSB0aGlzLlNlcnZpY2VDYXNlLmFjdGlvbkxpbmtzICYmIHRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3MuZmVlZGJhY2tTdGF0dXNMaW5rcyA/IE9iamVjdC5rZXlzKHRoaXMuU2VydmljZUNhc2UuYWN0aW9uTGlua3MuZmVlZGJhY2tTdGF0dXNMaW5rcykubWFwPEZlZWRiYWNrU3RhdHVzTGluaz4obCA9PiB7IHJldHVybiB7IGlkOiBsLCBuYW1lOiBcImFjdF9mZWVkYmFja19cIiArIGwsIGFjdDogdGhpcy5TZXJ2aWNlQ2FzZS5hY3Rpb25MaW5rcy5mZWVkYmFja1N0YXR1c0xpbmtzW2xdLmFjdGlvbiB9IH0pIDogW107XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICB0aGlzLkdldEhpc3RvcnlBbmRDb3JyZXNwb25kZW5jZSgpLFxyXG4gICAgICAgICAgICB0aGlzLkdldEZpbGVzKClcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgUmVsb2FkU2VydmljZUNhc2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU2VydmljZUNhc2UudHlwZSAhPSAncmVxdWVzdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc1RhYkRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGlydHkoKTtcclxuICAgICAgICAgICAgdGhpcy4kcm9vdFJvdXRlci5uYXZpZ2F0ZShbJ1Byb2JsZW0nLCAnRWRpdCcsIHsgbnVtYmVyOiB0aGlzLlNlcnZpY2VDYXNlLmNhc2VOdW1iZXIgfV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHN1cGVyLlJlbG9hZFNlcnZpY2VDYXNlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgb25OZXdBdHRhY2htZW50KGZpbGU6IENhc2VGaWxlRGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy5BZGROZXdBdHRhY2htZW50KGZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uUHJpb3JpdHlDaGFuZ2VkKHByaW9yaXR5OiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5sb2FkaW5nRGF0YSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5TZXJ2aWNlQ2FzZS5wcmlvcml0eSAhPSBwcmlvcml0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS5wcmlvcml0eSA9IHByaW9yaXR5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5VcGRhdGVSZXF1ZXN0KHRoaXMuU2VydmljZUNhc2UuaWQsIHRoaXMuU2VydmljZUNhc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuUmVsb2FkU2VydmljZUNhc2UoKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdFRElUX1BSSU9SSVRZX1JFUVVFU1RfRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtaW5EZWFkbGluZSgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZGVhZGxpbmVUb29sYm94SXNPcGVuKSA/IHRoaXMuX2RlYWRsaW5lVGhyZXNob2xkIDogdGhpcy5fbWluRGVhZGxpbmU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IG1pbkRlYWRsaW5lKHZhbHVlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fbWluRGVhZGxpbmUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9kZWFkbGluZVRocmVzaG9sZCA9IHZhbHVlLmFkZERheXMoNyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYXN5bmMgT25EYXRlQ2hhbmdlZChkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkgfHwgZGF0ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmdEYXRhXHJcbiAgICAgICAgICAgICYmIHRoaXMuU2VydmljZUNhc2VcclxuICAgICAgICAgICAgJiYgdGhpcy5TZXJ2aWNlQ2FzZS5zdGF0dXMgIT0gXCJjbG9zZWRcIlxyXG4gICAgICAgICAgICAmJiBhd2FpdCB0aGlzLmNoZWNrRGVhZGxpbmVDaGFuZ2UoZGF0ZSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5kZWFkbGluZURUID0gZGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5TZXJ2aWNlQ2FzZS5yZXF1ZXN0ZWREZWFkbGluZSA9IGRhdGUgPyBkYXRlLnRvSVNPRGF0ZVN0cmluZygpIDogbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuVXBkYXRlUmVxdWVzdCh0aGlzLlNlcnZpY2VDYXNlLmlkLCB0aGlzLlNlcnZpY2VDYXNlKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYWRsaW5lUmVtYXJrICYmIHRoaXMuZGVhZGxpbmVSZW1hcmsubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQWRkQ29ycmVzcG9uZGVuY2UodGhpcy5kZWFkbGluZVJlbWFyaywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVSZW1hcmsgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5SZWxvYWRTZXJ2aWNlQ2FzZSgpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ01hbmFnZXIuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdFRElUX0RFQURMSU5FX1JFUVVFU1RfRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkgeyB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTsgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZGVhZExpbmUgPSB0aGlzLmRlYWRsaW5lRFQgPyB0aGlzLmRlYWRsaW5lRFQuY2xvbmUoKSA6IG51bGxcclxuICAgICAgICAgICAgdGhpcy5kZWFkbGluZURUID0gZGVhZExpbmUgPyB1bmRlZmluZWQgOiBEYXRlLnRvZGF5KCkuYWRkRGF5cyg3KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy4kdGltZW91dCgpO1xyXG4gICAgICAgICAgICB0aGlzLmRlYWRsaW5lRFQgPSBkZWFkTGluZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIEhhbmRsZUZlZWRiYWNrKGZlZWRiYWNrOiBzdHJpbmcsIHN0YXR1czogRmVlZGJhY2tTdGF0dXNMaW5rKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHlDaGF0KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmdEYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkFkZEZlZWRiYWNrKGZlZWRiYWNrLCBzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgSGFuZGxlTmV3Q29udmVyc2F0aW9uRW50cnkoZW50cnk6IHN0cmluZywgaW50ZXJuYWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seUNoYXQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMubG9hZGluZ0RhdGEpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5BZGRDb3JyZXNwb25kZW5jZShlbnRyeSwgdHJ1ZSwgaW50ZXJuYWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBJQ29tcG9uZW50LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCJcclxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9nZW5lcmFsXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VDYXNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvc2VydmljZUNhc2VTZXJ2aWNlXCJcclxuaW1wb3J0IHsgQ2FzZUZpbGVEYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9maWxlXCJcclxuaW1wb3J0IHsgUmVxdWVzdERhdGEsIFJlcXVlc3QgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCJcclxuaW1wb3J0IHsgUmVxdWVzdEJhc2UgfSBmcm9tIFwiLi9yZXF1ZXN0QmFzZVwiXHJcbmltcG9ydCB7IElzUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvaXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXJ2aWNlQmFzZVwiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvVHJhbnNsYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSBcIkBmaXFhcy91dGlsc1wiO1xyXG5pbXBvcnQgeyBTYXZlRGlhbG9nIH0gZnJvbSBcIi4uL2dlbmVyYWwvc2F2ZWRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb25TZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwicmVxdWVzdEVudHJ5XCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9yZXF1ZXN0LmVudHJ5Lmh0bWxcIixcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBhcHBsaWNhdGlvbjogXCJeYXBwbGljYXRpb25cIixcclxuICAgICAgICBiYXNlOiBcIl5yZXF1ZXN0QmFzZVwiXHJcbiAgICB9XHJcbn0pXHJcbmNsYXNzIFJlcXVlc3RFbnRyeSBpbXBsZW1lbnRzIElDb21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbjogQXBwbGljYXRpb247XHJcbiAgICBwcml2YXRlIGJhc2U6IFJlcXVlc3RCYXNlXHJcbiAgICBASW5wdXQoKSBwcml2YXRlICRyb3V0ZXI6IG5nLlJvdXRlcjtcclxuICAgIHB1YmxpYyBmaWxlczogQ2FzZUZpbGVEYXRhW10gPSBbXTtcclxuICAgIHByaXZhdGUgdGl0bGVpc2Vycm9yOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBkZXNjcmlwdGlvbmlzZXJyb3I6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGN1c3RvbWVyaXNlcnJvcjogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBnZXQgcmVhZE9ubHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJGUVNcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBzZXJ2aWNlQ2FzZVNlcnZpY2U6IFNlcnZpY2VDYXNlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBpc1Byb2Nlc3NpbmdTZXJ2aWNlOiBJc1Byb2Nlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR3aW5kb3cnKSBwcml2YXRlICR3aW5kb3c6IG5nLklXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRxJykgcHJpdmF0ZSAkcTogbmcuSVFTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRlbGVtZW50JykgcHJpdmF0ZSAkZWxlbWVudDogbmcuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgVHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHVpYk1vZGFsJykgcHJpdmF0ZSAkbW9kYWw6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgc2F2ZURpYWxvZzogU2F2ZURpYWxvZyxcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBjYWxsZWQgYnkgdGhlIFJvdXRlciBhdCB0aGUgZW5kIG9mIGEgc3VjY2Vzc2Z1bCBuYXZpZ2F0aW9uLiBPbmx5IG9uZSBvZiAkcm91dGVyT25BY3RpdmF0ZSBhbmQgJHJvdXRlck9uUmV1c2Ugd2lsbCBiZSBjYWxsZWQgZGVwZW5kaW5nIHVwb24gdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gJHJvdXRlckNhblJldXNlLlxyXG4gICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25BY3RpdmF0ZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgICAgIGlmIChuZXh0Wydyb3V0ZU5hbWUnXSA9PSBcIk5ld1wiICYmIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJGUVNcIl0pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4gdGhpcy5iYWNrKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25SZXVzZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5iYXNlLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICB2YXIgY3VzdHMgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uLmN1c3RvbWVycztcclxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhID0ge1xyXG4gICAgICAgICAgICBzdGFydDogdW5kZWZpbmVkLCAvLyBJU09EYXRlU3RyaW5nXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIlwiLCAvLyBzdHJpbmcsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLCAvL3N0cmluZ1xyXG4gICAgICAgICAgICBjdXN0b21lcjogdW5kZWZpbmVkLCAvLyBXZWJMaW5rLFxyXG4gICAgICAgICAgICBjb250YWN0UGVyc29uOiB1bmRlZmluZWQsIC8vIFdlYkxpbmssXHJcbiAgICAgICAgICAgIGZpcWFzT3duZXJzaGlwOiB1bmRlZmluZWQsIC8vIFdlYkxpbmssXHJcbiAgICAgICAgICAgIHN0YXR1czogXCJvcGVuXCIsIC8vIFN0YXR1cyxcclxuICAgICAgICAgICAgcHJpb3JpdHk6IFwibWVkaXVtXCIsIC8vIFByaW9yaXR5LFxyXG4gICAgICAgICAgICBpbnRlcm5hbFRhc2tMaW5rOiB1bmRlZmluZWQsIC8vc3RyaW5nXHJcbiAgICAgICAgICAgIGNhc2VOdW1iZXI6IHVuZGVmaW5lZCwgLy9zdHJpbmdcclxuICAgICAgICAgICAgcGFyZW50Q2FzZU51bWJlcjogdW5kZWZpbmVkLCAvL3N0cmluZ1xyXG4gICAgICAgICAgICBpbmNyZWFzZWRQcmlvcml0eTogZmFsc2UsIC8vIGJvb2xlYW5cclxuICAgICAgICAgICAgcmVxdWVzdGVkRGVhZGxpbmU6IHVuZGVmaW5lZCwgLy8gSVNPRGF0ZVN0cmluZ1xyXG4gICAgICAgICAgICBjdXN0b21lclJlZmVyZW5jZTogdW5kZWZpbmVkLCAvL3N0cmluZ1xyXG4gICAgICAgICAgICBhY3Rpb25SZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRPbjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBjcmVhdGVkQnk6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY2FzZUNhdXNlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNhc2VPd25lcnNoaXA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgcmVzcG9uc2libGVTREVtcGxveWVlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGJ1ZGdldEluZGljYXRpb246IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYXBwcm92ZWRIb3Vyc01pbjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhcHByb3ZlZEhvdXJzTWF4OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGFjdHVhbEhvdXJzU3BlbnQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYXBwcm92ZWRIb3Vyc0NvbW1lbnRCeVNEOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHNwVHNUYXNrOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHJlbWVtYmVyTWVEYXRlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHJlbWVtYmVyTWVSZWFzb246IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgaWdub3JlQ2hhdE1lbW9TZXF1ZW5jZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMubWluRGVhZGxpbmUgPSB0b2RheTtcclxuICAgICAgICB0aGlzLmJhc2UuVGl0bGUgPSBcIklfSEFWRV9BX1JFUVVFU1RcIjtcclxuICAgICAgICB0aGlzLmJhc2UuYWN0aXZlTWVudUl0ZW0gPSAncmVxdWVzdCc7XHJcbiAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY3VzdCA9IGN1c3RzLmxlbmd0aCA9PSAxID8gY3VzdHNbMF0gOiBjdXN0cy5maWx0ZXIoYyA9PiBjLmNoZWNrZWQpLmxlbmd0aCA9PSAxID8gY3VzdHMuZmlsdGVyKGMgPT4gYy5jaGVja2VkKS5zaGlmdCgpIDogbnVsbDtcclxuICAgICAgICBpZiAoY3VzdCkge1xyXG4gICAgICAgICAgICB2YXIgY3VzdG9tZXJzID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi51c2VyU2VydmljZS5DdXN0b21lcnM7XHJcbiAgICAgICAgICAgIHZhciBjaWQgPSBjdXN0b21lcnMuaXRlbXMuZmlsdGVyKHkgPT4geS5pZC5yZWYgPT0gY3VzdC5rZXkpLnNoaWZ0KCkuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdERhdGEuY3VzdG9tZXIgPSBjaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyAkcm91dGVyQ2FuRGVhY3RpdmF0ZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5kaXJ0eSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYXZlRGlhbG9nLlNhdmUoKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzID0gcmVzdWx0ID09PSBTYXZlRGlhbG9nLkRpc2NhcmQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgyNSkuZmluYWxseSgoKSA9PiByZXNvbHZlKHJlcykpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsgcmV0dXJuIGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAkb25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuYmFzZS5hY3RpdmVNZW51SXRlbSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbk5ld0F0dGFjaG1lbnQoZmlsZTogQ2FzZUZpbGVEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5vbmZpbGVhZGRlZChmaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uZmlsZWFkZGVkKGZpbGU6IENhc2VGaWxlRGF0YSkge1xyXG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbmZpbGVyZW1vdmVkKGZpbGU6IENhc2VGaWxlRGF0YSkge1xyXG4gICAgICAgIHRoaXMuZmlsZXMgPSB0aGlzLmZpbGVzLmZpbHRlcihmID0+IGYgIT0gZmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uZWRpdG9ydmFsdWVjaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0RGF0YS5kZXNjcmlwdGlvbiAhPSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3REYXRhLmRlc2NyaXB0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbmlzZXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGVzY3JpcHRpb25jaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0RGF0YS50aXRsZSAhPSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3REYXRhLnRpdGxlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50aXRsZWlzZXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgY3VzdHJlZmNoYW5nZWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3REYXRhLmN1c3RvbWVyUmVmZXJlbmNlICE9IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdERhdGEuY3VzdG9tZXJSZWZlcmVuY2UgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmlzRGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJpb3JpdHljaGFuZ2VkKHByaW9yaXR5OiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0RGF0YS5wcmlvcml0eSAhPSBwcmlvcml0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3REYXRhLnByaW9yaXR5ID0gcHJpb3JpdHk7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWRsaW5lRFQ6IERhdGU7XHJcbiAgICBwdWJsaWMgYXN5bmMgT25EYXRlQ2hhbmdlZChkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgaWYgKGRhdGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRGVhZGxpbmVDaGFuZ2UoZGF0ZSkpIHtcclxuICAgICAgICAgICAgdmFyIG9sZERhdGUgPSB0aGlzLmRlYWRsaW5lRFQ7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVEVCA9IGRhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gKG9sZERhdGUgPyBvbGREYXRlLmdldFRpbWUoKSA6IDApICE9PSAodGhpcy5kZWFkbGluZURUID8gdGhpcy5kZWFkbGluZURULmdldFRpbWUoKSA6IDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVEVCA9IHRoaXMuZGVhZGxpbmVEVCA/IHRoaXMuZGVhZGxpbmVEVC5jbG9uZSgpIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGRlYWRsaW5lVGhyZXNob2xkTW9kYWwgPSBudWxsO1xyXG4gICAgcHVibGljIGFzeW5jIGNoZWNrRGVhZGxpbmVDaGFuZ2UodmFsdWU6IERhdGUpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICghIXZhbHVlID09PSBmYWxzZSAmJiAhIXRoaXMuZGVhZGxpbmVEVCA9PSBmYWxzZSlcclxuICAgICAgICAgICAgfHwgRGF0ZS5kYXRlRXF1YWxzKHRoaXMuZGVhZGxpbmVEVCwgdmFsdWUpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuZGVhZGxpbmVUaHJlc2hvbGRNb2RhbCAhPT0gbnVsbFxyXG4gICAgICAgICAgICB8fCAhIXZhbHVlICYmIHZhbHVlIDwgdGhpcy5fbWluRGVhZGxpbmVcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBjaGFuZ2VcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAodmFsdWUgPT0gbnVsbCAmJiAhIXRoaXMuZGVhZGxpbmVEVClcclxuICAgICAgICAgICAgfHwgdmFsdWUgPj0gdGhpcy5fZGVhZGxpbmVUaHJlc2hvbGRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIENoYW5nZSwgcGx1cyBuZXcgdmFsdWUgbnVsbCBvciBvdmVyIHRocmVzaG9sZC5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDaGFuZ2UsIGJ1dCBkYXRlIGZhbGxzIGluIHRocmVzaG9sZCB0aW1lXHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zOiBuZy51aS5ib290c3RyYXAuSU1vZGFsU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6ICdoYW5kbGVfdGhyZXNob2xkZGVhZGxpbmUuaHRtbCcsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBDb25maXJtRGVhZGxpbmVDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyQXM6ICckbW9kYWwnLFxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6ICgpID0+IHRoaXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5kZWFkbGluZVRocmVzaG9sZE1vZGFsID0gdGhpcy4kbW9kYWwub3BlbihvcHRpb25zKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmRlYWRsaW5lVGhyZXNob2xkTW9kYWwucmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiICYmIHRoaXMuZGVhZGxpbmVSZW1hcmsgJiYgdGhpcy5kZWFkbGluZVJlbWFyay5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVSZW1hcmsgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWRsaW5lVGhyZXNob2xkTW9kYWwuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVhZGxpbmVUaHJlc2hvbGRNb2RhbCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX21pbkRlYWRsaW5lOiBEYXRlO1xyXG4gICAgcHJpdmF0ZSBfZGVhZGxpbmVUaHJlc2hvbGQ6IERhdGU7XHJcbiAgICBwdWJsaWMgZ2V0IG1pbkRlYWRsaW5lKCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4pID8gdGhpcy5fZGVhZGxpbmVUaHJlc2hvbGQgOiB0aGlzLl9taW5EZWFkbGluZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgbWluRGVhZGxpbmUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICB0aGlzLl9taW5EZWFkbGluZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuX2RlYWRsaW5lVGhyZXNob2xkID0gdmFsdWUuYWRkRGF5cyg3KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZGVhZGxpbmVUaHJlc2hvbGQoKTogRGF0ZSB7IHJldHVybiB0aGlzLl9kZWFkbGluZVRocmVzaG9sZDsgfTtcclxuICAgIHB1YmxpYyBkZWFkbGluZVJlbWFyazogc3RyaW5nID0gXCJcIjtcclxuICAgIHB1YmxpYyBkZWFkbGluZUJveE9wZW4oKSB7XHJcbiAgICAgICAgdGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGVhZGxpbmVUb29sdGlwVGV4dCA9IHRoaXMuZGVhZGxpbmVUb29sYm94SXNPcGVuID8gJycgOiBgJHt0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoJ0RFQURMSU5FX1RPT0xUSVAnKX0keyh0aGlzLmRlYWRsaW5lRFQpID8gYDogJHt0aGlzLmRlYWRsaW5lRFQudG9Mb2NhbGVEYXRlU3RyaW5nKCdubC1OTCcpfWAgOiAnJ31gO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRlYWRsaW5lQm94Q2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRlYWRsaW5lVG9vbHRpcFRleHQgPSB0aGlzLmRlYWRsaW5lVG9vbGJveElzT3BlbiA/ICcnIDogYCR7dGhpcy5UcmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKCdERUFETElORV9UT09MVElQJyl9JHsodGhpcy5kZWFkbGluZURUKSA/IGA6ICR7dGhpcy5kZWFkbGluZURULnRvTG9jYWxlRGF0ZVN0cmluZygnbmwtTkwnKX1gIDogJyd9YDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBkZWFkbGluZVRvb2xib3hJc09wZW46IGJvb2xlYW4gPSAgZmFsc2U7XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVUb29sdGlwVGV4dDogc3RyaW5nID0gdGhpcy5kZWFkbGluZVRvb2xib3hJc09wZW4gPyAnJyA6IGAke3RoaXMuVHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSgnREVBRExJTkVfVE9PTFRJUCcpfSR7KHRoaXMuZGVhZGxpbmVEVCkgPyBgOiAke3RoaXMuZGVhZGxpbmVEVC50b0xvY2FsZURhdGVTdHJpbmcoJ25sLU5MJyl9YCA6ICcnfWA7XHJcblxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21lcmNoYW5nZWQoY3VzdG9tZXJLZXlzOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJpc2Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHNlbCA9IChjdXN0b21lcktleXMgJiYgY3VzdG9tZXJLZXlzLmxlbmd0aCA+IDApID8gY3VzdG9tZXJLZXlzWzBdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgdmFyIGN1c3RvbWVycyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24udXNlclNlcnZpY2UuQ3VzdG9tZXJzO1xyXG4gICAgICAgICAgICB2YXIgY2lkID0gY3VzdG9tZXJzLml0ZW1zLmZpbHRlcih5ID0+IHkuaWQucmVmID09IHNlbCkuc2hpZnQoKS5pZDtcclxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0RGF0YS5jdXN0b21lciA9IGNpZDtcclxuICAgICAgICAgICAgaWYgKChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uLmN1c3RvbWVycykubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3REYXRhLmN1c3RvbWVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCByZXF1ZXN0RGF0YSgpOiBSZXF1ZXN0RGF0YSB7IHJldHVybiB0aGlzLmJhc2UgPyB0aGlzLmJhc2UuRGF0YSA6IHVuZGVmaW5lZDsgfVxyXG4gICAgcHJpdmF0ZSBzZXQgcmVxdWVzdERhdGEodmFsdWU6IFJlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgdGhpcy5iYXNlLkRhdGEgPSB2YWx1ZSBhcyBSZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEucmVxdWVzdGVkRGVhZGxpbmUgPSB0aGlzLmRlYWRsaW5lRFQgJiYgKHRoaXMuZGVhZGxpbmVSZW1hcmsgfHwgdGhpcy5kZWFkbGluZURUID49IHRoaXMuX2RlYWRsaW5lVGhyZXNob2xkKSA/IHRoaXMuZGVhZGxpbmVEVC50b0lTT0RhdGVTdHJpbmcoKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdERhdGEuc3RhcnQgPSBuZXcgRGF0ZSgpLnRvSVNPRGF0ZVRpbWVTdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVxdWVzdERhdGEuY3VzdG9tZXJSZWZlcmVuY2UgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0RGF0YS5jdXN0b21lclJlZmVyZW5jZSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgICAgIHZhciByZXEgPSBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5OZXdSZXF1ZXN0KHRoaXMucmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSA8UmVxdWVzdD4oYXdhaXQgcmVxLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5maWxsSW1hZ2VTb3VyY2VzKHJlcXVlc3QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlLkRhdGEgPSByZXF1ZXN0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucmVxdWVzdGVkRGVhZGxpbmUgJiYgdGhpcy5kZWFkbGluZVJlbWFyaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLkFkZENvcnJlc3BvbmRlbmNlKHJlcXVlc3QuY29ycmVzcG9uZGVuY2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5kZWFkbGluZVJlbWFyayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZE9uOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRCeTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5U3VwcG9ydEVtcGxveWVlOiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiU0RcIl0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBieUludGVybmFsQ3VzdG9tZXI6IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UubG93Um9sZSA9PT0gXCJDVVNUXCIgJiYgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5oaWdoUm9sZSA9PT0gXCJGUVNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnlDdXN0b21lcjogdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5sb3dSb2xlID09PSBcIkNVU1RcIiAmJiB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmhpZ2hSb2xlID09PSBcIkNVU1RcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGVuY2VUeXBlOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBteWZpbGVQcm9taXNlcyA9IHRoaXMuZmlsZXMubWFwKHggPT4gdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWRkRmlsZSh0aGlzLmJhc2UuRGF0YS5maWxlcywgeCkpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobXlmaWxlUHJvbWlzZXMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoWydFZGl0JywgeyBudW1iZXI6IHJlcXVlc3QuY2FzZU51bWJlciB9XSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2UuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZS5pc0RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5zZXRTZXFVcmwoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdSZXF1ZXN0RW50cnknLCAnRXJyb3Igc2F2aW5nIHJlcXVlc3QnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdSRVFVRVNUX0NSRUFURV9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByZXN1bHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3REYXRhLnRpdGxlICYmIHRoaXMucmVxdWVzdERhdGEudGl0bGUubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmNsZWFyRXJyb3JDbGFzcyh0aGlzLiRlbGVtZW50LCAnZWRpdHRpdGxlJyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5zZXRFcnJvckNsYXNzKHRoaXMuJGVsZW1lbnQsICdlZGl0dGl0bGUnKTtcclxuICAgICAgICAgICAgdGhpcy50aXRsZWlzZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdERhdGEuZGVzY3JpcHRpb24gJiYgdGhpcy5yZXF1ZXN0RGF0YS5kZXNjcmlwdGlvbi5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLmJhc2UuY2xlYXJFcnJvckNsYXNzKHRoaXMuJGVsZW1lbnQsICdlZGl0ZGVzY3JpcHRpb24nKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlLnNldEVycm9yQ2xhc3ModGhpcy4kZWxlbWVudCwgJ2VkaXRkZXNjcmlwdGlvbicpO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uaXNlcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0RGF0YS5jdXN0b21lcilcclxuICAgICAgICAgICAgdGhpcy5iYXNlLmNsZWFyRXJyb3JDbGFzcyh0aGlzLiRlbGVtZW50LCAnZWRpdGN1c3RvbWVyJyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZS5zZXRFcnJvckNsYXNzKHRoaXMuJGVsZW1lbnQsICdlZGl0Y3VzdG9tZXInKTtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21lcmlzZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYmFjaygpIHtcclxuICAgICAgICB0aGlzLmJhc2UuZ29Ib21lKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb25maXJtRGVhZGxpbmVDb21wb25lbnQge1xyXG4gICAgc3RhdGljIGNvbnRyb2xsZXJJZCA9ICdDb25maXJtRGVhZGxpbmVDb21wb25lbnQnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbEluc3RhbmNlJykgcHJpdmF0ZSAkbW9kYWxJbnN0YW5jZTogYW5ndWxhci51aS5ib290c3RyYXAuSU1vZGFsU2VydmljZUluc3RhbmNlLFxyXG4gICAgICAgIEBJbmplY3QoJ3BhZ2UnKSBwdWJsaWMgcGFnZTogUmVxdWVzdEVudHJ5XHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgWWVzKCkge1xyXG4gICAgICAgIHRoaXMuJG1vZGFsSW5zdGFuY2UuY2xvc2UoJ3llcycpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBObygpIHtcclxuICAgICAgICB0aGlzLiRtb2RhbEluc3RhbmNlLmNsb3NlKCdubycpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtYXJrQ2hhbmdlZCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnBhZ2UuZGVhZGxpbmVSZW1hcmsgPSB0ZXh0O1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgKiBhcyBSeCBmcm9tIFwicnhqcy9SeFwiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzdWx0IH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvaUZxc1wiO1xyXG5pbXBvcnQgeyBDb21wYWN0U2VydmljZUNhc2UgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9leHBvcnRUb0V4Y2VsU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmlxYXNzaXN0QXBpL3NlcnZpY2VDYXNlU2VydmljZVwiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXJ2aWNlQmFzZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FzZVByb2plY3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NlcnZpY2VDYXNlUHJvamVjdFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIjtcclxuaW1wb3J0IHsgQ29udHJvbEJhc2UgfSBmcm9tIFwiLi4vZ2VuZXJhbC9jb250cm9sQmFzZVwiO1xyXG5pbXBvcnQgeyBTYXZlRGlhbG9nIH0gZnJvbSBcIi4uL2dlbmVyYWwvc2F2ZWRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBQcm9qZWN0VGFiIH0gZnJvbSBcIi4vcHJvamVjdFRhYlwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcInByb2plY3RTZWFyY2hcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL3Byb2plY3RTZWFyY2guaHRtbFwiLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIFwiYXBwbGljYXRpb25cIjogXCJeYXBwbGljYXRpb25cIixcclxuICAgICAgICBcInByb2plY3RUYWJcIjogXCJecHJvamVjdFRhYlwiXHJcbiAgICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9qZWN0U2VhcmNoIGV4dGVuZHMgQ29udHJvbEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSAkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290Um91dGVyJykgcm9vdFJvdXRlcjogYW5ndWxhci5Sb3V0ZXIsXHJcbiAgICAgICAgQEluamVjdCgpIHNhdmVEaWFsb2c6IFNhdmVEaWFsb2csXHJcbiAgICAgICAgQEluamVjdCgpIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBzZXJ2aWNlQ2FzZVNlcnZpY2U6IFNlcnZpY2VDYXNlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBpc1Byb2Nlc3NpbmdTZXJ2aWNlOiBJc1Byb2Nlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHNlcnZpY2VDYXNlUHJvamVjdFNlcnZpY2U6IFNlcnZpY2VDYXNlUHJvamVjdFNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihzYXZlRGlhbG9nLCByb290Um91dGVyLCAkdGltZW91dCwgYXV0aG9yaXphdGlvblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaENhc2VOdW1iZXIgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgJHJvdXRlck9uQWN0aXZhdGUobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgJHJvdXRlck9uUmV1c2UobmV4dD86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24sIHByZXY/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uKSB7XHJcbiAgICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uO1xyXG4gICAgcHJpdmF0ZSBfc2VhcmNoQ2FzZU51bWJlcjogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBoaW50OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGRpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBvblNlYXJjaFRleHRDaGFuZ2VkOiBSeC5TdWJqZWN0PHN0cmluZz47XHJcbiAgICBwcml2YXRlIF9jb2xsYXBzZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgY29sbGFwc2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsYXBzZWQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbGxhcHNlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaGhpbnQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgbG9nZWRJblVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2hvd3RleHRub3Jlc3VsdHM6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHRvbXVjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBwcm9qZWN0VGFiOiBQcm9qZWN0VGFiO1xyXG4gICAgcHJpdmF0ZSBsYXN0U2VhcmNoTW9kZSA9IDA7XHJcbiAgICBwdWJsaWMgU2VhcmNoUmVzdWx0OiBDb21wYWN0U2VydmljZUNhc2VbXTtcclxuICAgIHB1YmxpYyBTZWFyY2hSZXN1bHRDb3VudDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBzZWFyY2hSZXN1bHRQYWdlQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgICAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24udXNlci50aGVuKHggPT4geyB4LnBlcnNvbklkLnZhbHVlLnRoZW4oeSA9PiB0aGlzLmxvZ2VkSW5Vc2VybmFtZSA9IHkubmFtZSkgfSlcclxuICAgICAgICB0aGlzLl9wcm9qZWN0dHJlZSA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldFZhbHVlPGJvb2xlYW4+KFwicHJvamVjdHNlYXJjaC5wcm9qZWN0dHJlZVwiKSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldFZhbHVlPG51bWJlcj4oXCJwcm9qZWN0c2VhcmNoLnJlc3VsdHNQYWdlQ291bnRcIikgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnRvbXVjaCA9IHRoaXMuY2hlY2tUb29NYW55UmVzdWx0cygpO1xyXG4gICAgICAgIHRoaXMuc2hvd3RleHRub3Jlc3VsdHMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoVGV4dENoYW5nZWQgPSBuZXcgUnguU3ViamVjdCgpO1xyXG4gICAgICAgIHZhciBvblNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMub25TZWFyY2hUZXh0Q2hhbmdlZC5kZWJvdW5jZVRpbWUoNDAwKS5zdWJzY3JpYmUoeyBuZXh0OiBzZWFyY2hTdHJpbmcgPT4gdGhpcy5TZWFyY2goc2VhcmNoU3RyaW5nKSB9KTtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2goKCkgPT4gb25TZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKCgpID0+IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uub25Sb2xlQ2hhbmdlZChfID0+IHRoaXMuaW5pdCgpKS51bnN1YnNjcmliZSgpKTtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2godGhpcy5hcHBsaWNhdGlvbi5hZGRPbkFjY291bnRzQ2hhbmdlZChzID0+IHRoaXMuc2VsZWN0ZWRBY2NvdW50c0NoYW5nZWQocykpKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5oaW50ID0gdGhpcy5zZWFyY2hoaW50O1xyXG4gICAgICAgIHZhciBfbW9kZSA9IHRoaXMuYXBwbGljYXRpb24ucHJvamVjdFNlYXJjaE1vZGU7XHJcbiAgICAgICAgdmFyIHNlYXJjaFBocmFzZSA9IHRoaXMuYXBwbGljYXRpb24ucHJvamVjdFNlYXJjaFN0cmluZztcclxuICAgICAgICBzd2l0Y2ggKF9tb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2VDYXNlUHJvamVjdFNlcnZpY2UuQ3VycmVudFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlYXJjaE1vZGUgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJjaENhc2VOdW1iZXIgPSBzZWFyY2hQaHJhc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0cyhzZWFyY2hQaHJhc2UsIHRoaXMuc2VydmljZUNhc2VQcm9qZWN0U2VydmljZS5DdXJyZW50UmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaFZhbHVlQ2hhbmdlZChzZWFyY2hQaHJhc2UgfHwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgICRvbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5wcm9qZWN0U2VhcmNoTW9kZSA9IHRoaXMuU2VhcmNoUmVzdWx0ICYmIHRoaXMuU2VhcmNoUmVzdWx0Q291bnQgPiAwID8gdGhpcy5sYXN0U2VhcmNoTW9kZSA6IDA7XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5wcm9qZWN0U2VhcmNoU3RyaW5nID0gdGhpcy5fc2VhcmNoQ2FzZU51bWJlcjtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IGQoKSB9IGNhdGNoIChlKSB7IHRoaXMubG9nU2VydmljZS53YXJuaW5nKCdQcm9qZWN0U2VhcmNoJywgJ0Vycm9yIGRpc3Bvc2luZycsIGUpOyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhY2hlU2VydmljZS5zZXRWYWx1ZShcInByb2plY3RzZWFyY2gucHJvamVjdHRyZWVcIiwgdGhpcy5fcHJvamVjdHRyZWUpO1xyXG4gICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldFZhbHVlPG51bWJlcj4oXCJwcm9qZWN0c2VhcmNoLnJlc3VsdHNQYWdlQ291bnRcIiwgKHRoaXMuc2VhcmNoUmVzdWx0UGFnZUNvdW50KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VhcmNoVmFsdWVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hDYXNlTnVtYmVyID0gdmFsdWUudHJpbSgpO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZWFyY2hDYXNlTnVtYmVyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5oaW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hUZXh0Q2hhbmdlZC5uZXh0KHRoaXMuX3NlYXJjaENhc2VOdW1iZXIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGludCkge1xyXG4gICAgICAgICAgICB0aGlzLmhpbnQgPSB0aGlzLnNlYXJjaGhpbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGFzdFNlYXJjaE1vZGUgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb246IFJ4LlN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgZ2V0IGN1cnJlbnRTZWFyY2goKTogUnguU3Vic2NyaXB0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNlYXJjaFN1YnNjcmlwdGlvbjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2V0IGN1cnJlbnRTZWFyY2goc3Vic2NyaXB0aW9uOiBSeC5TdWJzY3JpcHRpb24pIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFNlYXJjaFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJvamVjdHRyZWU6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGdldCBwcm9qZWN0dHJlZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvamVjdHRyZWU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGNoYW5nZXByb2plY3R0cmVlKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3Byb2plY3R0cmVlID0gdmFsO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZWFyY2hDYXNlTnVtYmVyKVxyXG4gICAgICAgICAgICB0aGlzLlNlYXJjaCh0aGlzLl9zZWFyY2hDYXNlTnVtYmVyKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhc3luYyBTZWFyY2goY2FzZU51bWJlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjYXNlTnVtYmVyIHx8IGNhc2VOdW1iZXIudHJpbSgpLmxlbmd0aCA8IDUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3d0ZXh0bm9yZXN1bHRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgdmFyIHN1YiA9IHRoaXMuc2VydmljZUNhc2VQcm9qZWN0U2VydmljZS5TZWFyY2goY2FzZU51bWJlciwgdGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycy5tYXAodiA9PiB2LmtleSksIDEwMCwgMCwgdGhpcy5fcHJvamVjdHRyZWUpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogcmVzdWx0ID0+IHRoaXMucHJvY2Vzc1Jlc3VsdHMoY2FzZU51bWJlciwgcmVzdWx0KSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1Byb2plY3RTZWFyY2gnLCAnRXJyb3Igd2hpbGUgc2VhcmNoaW5nJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3JEaWFsb2coJ2Vycm9yJywgJ0VSUk9SJywgJ1NJTVBMRV9TRUFSQ0hfRVJST1InLCB7IHRyYW5zbGF0ZTogdHJ1ZSwgZXJyb3JSZXN1bHQ6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzdWIuYWRkKCgpID0+IHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2ggPSBzdWI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByYXdTZWFyY2hSZXN1bHQ6IENvbXBhY3RTZXJ2aWNlQ2FzZVtdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzUmVzdWx0cyhzZWFyY2hTdHJpbmc6IHN0cmluZywgcmVzdWx0OiBDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT4pIHtcclxuICAgICAgICB2YXIgaXRlbXMgPSByZXN1bHQuaXRlbXM7XHJcbiAgICAgICAgdGhpcy5jaGVja1Jlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMucmF3U2VhcmNoUmVzdWx0ID0gaXRlbXM7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJBY2NvdW50cyh0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzKTtcclxuICAgICAgICB0aGlzLnNob3d0ZXh0bm9yZXN1bHRzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvbXVjaCA9IHJlc3VsdC5jb3VudCA+IDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrUmVzdWx0KHJlc3VsdCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0UGFnZUNvdW50ID0gcmVzdWx0LnBhZ2VDb3VudDtcclxuICAgICAgICB0aGlzLnRvbXVjaCA9IHRoaXMuY2hlY2tUb29NYW55UmVzdWx0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tUb29NYW55UmVzdWx0cygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCAmJiB0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCA+IDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJBY2NvdW50cyhzZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuU2VhcmNoUmVzdWx0ID0gdGhpcy5yYXdTZWFyY2hSZXN1bHQuZmlsdGVyKHggPT4gc2VsZWN0ZWQuc29tZSh5ID0+IHkua2V5ID09IHguY3VzdG9tZXIuaHJlZi5yZXBsYWNlKCdjdXN0b21lci8nLCAnJykpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlbGVjdGVkQWNjb3VudHNDaGFuZ2VkKHNlbGVjdGVkOiB7IGtleTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfVtdKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJBY2NvdW50cyhzZWxlY3RlZCk7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmxhc3RTZWFyY2hNb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWFyY2hDYXNlTnVtYmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU2VhcmNoKHRoaXMuX3NlYXJjaENhc2VOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlWGxzeCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycyAmJiB0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGN1c3RzID0gdGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycy5tYXAodiA9PiB2LmtleSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxhc3RTZWFyY2hNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWR2YW5jZWRFeHBvcnQodGhpcy5fcHJvamVjdHRyZWUgPyB7IHByb2plY3RUcmVlT2ZOdW1iZXI6IHRoaXMuX3NlYXJjaENhc2VOdW1iZXIgfSA6IHsgY2FzZU51bWJlcjogdGhpcy5fc2VhcmNoQ2FzZU51bWJlciwgaW5jbHVkZU5laWdoYm91cjogdHJ1ZSB9LCBjdXN0cylcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJJbnZhbGlkbW9kZVwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0cyh0aGlzLl9zZWFyY2hDYXNlTnVtYmVyLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnNhdmVFeGNlbEZyb21Kc29uKHRoaXMuU2VhcmNoUmVzdWx0LCBudWxsKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlYXJjaCcsICdFcnJvciB3aGlsZSBzZWFyY2hpbmcnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yRGlhbG9nKCdlcnJvcicsICdFUlJPUicsICdTRUFSQ0hfRVJST1InLCB7IGVycm9yUmVzdWx0OiBlcnJvciwgdHJhbnNsYXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93dGV4dG5vcmVzdWx0cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xyXG5pbXBvcnQgeyBIb21lIH0gZnJvbSBcIi4uL2hvbWVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogUHJvamVjdFRhYi5zZWxlY3RvcixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZpZXdzL3Byb2plY3RUYWIuaHRtbFwiLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiBcIl5hcHBsaWNhdGlvblwiLFxyXG4gICAgICAgIGhvbWU6XCJeaG9tZVwiXHJcbiAgICB9XHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgUHJvamVjdFRhYiB7XHJcbiAgICBwcml2YXRlIGhvbWU6SG9tZTtcclxuICAgIHByaXZhdGUgYXBwbGljYXRpb246QXBwbGljYXRpb247XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yID0gXCJwcm9qZWN0VGFiXCI7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG5cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZnVsbE1lbnUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5ob21lLmZ1bGxNZW51O1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEluamVjdCwgSUNvbXBvbmVudCwgQ29tcG9uZW50IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIjtcclxuaW1wb3J0IHsgU2VydmljZUNhc2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ29sbGVjdGlvblJlc3VsdCwgSVJlc291cmNlTGluayB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2lGcXNcIjtcclxuaW1wb3J0IHsgQ29tcGFjdFNlcnZpY2VDYXNlLCBTZWFyY2hJbmZvLCBTZWFyY2hEYXRhLCBTZXZlcml0eSwgU3RhdHVzLCBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmljZUNhc2VcIjtcclxuaW1wb3J0IHsgQ29udHJvbEJhc2UgfSBmcm9tIFwiLi4vZ2VuZXJhbC9jb250cm9sQmFzZVwiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvY2FjaGVcIjtcclxuaW1wb3J0IHsgU2F2ZURpYWxvZyB9IGZyb20gXCIuLi9nZW5lcmFsL3NhdmVkaWFsb2dcIjtcclxuaW1wb3J0IHsgS2V5Q29kZXMsIEtleWJvYXJkRXZlbnRDb2RlIH0gZnJvbSBcIkBmaXFhcy91dGlsc1wiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RpYWxvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENhc2VUeXBlLCBQcmlvcml0eSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmljZUNhc2VcIjtcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gXCIuLi8uLi9tb2RlbHMvdXNlclwiO1xyXG5pbXBvcnQgeyBQZXJzb24sIENvbXBhY3RQZXJzb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BlcnNvblwiO1xyXG5pbXBvcnQgeyBXZWJMaW5rIH0gZnJvbSBcIi4uLy4uL21vZGVscy9iYXNlXCI7XHJcbmltcG9ydCB7IEhvbWUgfSBmcm9tIFwiLi4vaG9tZVwiO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gXCJ4bHN4XCI7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZXhwb3J0VG9FeGNlbFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSWRlbnRpdHlMaW5rIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2Zxc1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NlcnZpY2VCYXNlXCI7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFwic2VhcmNoXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9zZWFyY2guaHRtbFwiLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiBcIl5hcHBsaWNhdGlvblwiLFxyXG4gICAgICAgIGhvbWU6IFwiXmhvbWVcIlxyXG4gICAgfVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlYXJjaCBleHRlbmRzIENvbnRyb2xCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFJvdXRlcicpIHJvb3RSb3V0ZXI6IGFuZ3VsYXIuUm91dGVyLFxyXG4gICAgICAgIEBJbmplY3QoKSBzYXZlRGlhbG9nOiBTYXZlRGlhbG9nLFxyXG4gICAgICAgIEBJbmplY3QoKSBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHdpbmRvdycpIHByaXZhdGUgJHdpbmRvdzogbmcuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcm90ZWN0ZWQgJGVsZW1lbnQ6IG5nLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHJvb3RTY29wZScpIHByaXZhdGUgJHJvb3RTY29wZTogYW5ndWxhci5JUm9vdFNjb3BlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBpc1Byb2Nlc3NpbmdTZXJ2aWNlOiBJc1Byb2Nlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHNlcnZpY2VDYXNlU2VydmljZTogU2VydmljZUNhc2VTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihzYXZlRGlhbG9nLCByb290Um91dGVyLCAkdGltZW91dCwgYXV0aG9yaXphdGlvblNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25BY3RpdmF0ZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyAkcm91dGVyT25SZXVzZShuZXh0PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbiwgcHJldj86IGFuZ3VsYXIuQ29tcG9uZW50SW5zdHJ1Y3Rpb24pIHtcclxuICAgICAgICAgYXdhaXQgdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5yb2xlTG9hZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaG9tZTogSG9tZTtcclxuICAgIHByaXZhdGUgU2VydmljZUNhc2VzOiBDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT47XHJcbiAgICBwcml2YXRlIHNlYXJjaFBocmFzZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBzZWFyY2hEYXRhOiBTZWFyY2hEYXRhID0ge307XHJcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbjtcclxuICAgIHByaXZhdGUgdG9tdWNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHNlYXJjaEluZm86IFNlYXJjaEluZm8gPSBudWxsO1xyXG4gICAgcHVibGljIFNlYXJjaFJlc3VsdDogQ29tcGFjdFNlcnZpY2VDYXNlW107XHJcbiAgICBwdWJsaWMgU2VhcmNoUmVzdWx0Q291bnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgc2VhcmNoUmVzdWx0UGFnZUNvdW50OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2hvd3RleHRub3Jlc3VsdHM6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGN1c3RvbWVyczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgbm93ZGF0ZTogRGF0ZTtcclxuXHJcbiAgICBhc3luYyAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGwoKTtcclxuICAgICAgICB0aGlzLnNob3d0ZXh0bm9yZXN1bHRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub3dkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0aGlzLm5vd2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5ob21lLmZ1bGxNZW51ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5mbyA9IGF3YWl0IHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLlNlYXJjaEluZm8odGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycy5tYXAoeCA9PiA8YW55Pih4LmtleSkpKTtcclxuICAgICAgICB0aGlzLnNlYXJjaERhdGEgPSB0aGlzLmNhY2hlU2VydmljZS5nZXRWYWx1ZTxTZWFyY2hEYXRhPihcInNlYXJjaC5leHRlbmRlZC5jcml0ZXJpYVwiKSB8fCB7fTtcclxuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldFZhbHVlPG51bWJlcj4oXCJzZWFyY2guZXh0ZW5kZWQucmVzdWx0c1BhZ2VDb3VudFwiKSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMudG9tdWNoID0gdGhpcy5jaGVja1Rvb01hbnlSZXN1bHRzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNzdWVkVG9EYXRlID0gdGhpcy5zZWFyY2hEYXRhLmNyZWF0ZWRCZWZvcmUgPyBuZXcgRGF0ZSh0aGlzLnNlYXJjaERhdGEuY3JlYXRlZEJlZm9yZSkuYWRkRGF5cygtMSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5pc3N1ZWRGcm9tRGF0ZSA9IHRoaXMuc2VhcmNoRGF0YS5jcmVhdGVkT25PckFmdGVyID8gbmV3IERhdGUodGhpcy5zZWFyY2hEYXRhLmNyZWF0ZWRPbk9yQWZ0ZXIpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGlmaWVkVG9EYXRlID0gdGhpcy5zZWFyY2hEYXRhLm1vZGlmaWVkQmVmb3JlID8gbmV3IERhdGUodGhpcy5zZWFyY2hEYXRhLm1vZGlmaWVkQmVmb3JlKS5hZGREYXlzKC0xKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLm1vZGlmaWVkRnJvbURhdGUgPSB0aGlzLnNlYXJjaERhdGEubW9kaWZpZWRPbk9yQWZ0ZXIgPyBuZXcgRGF0ZSh0aGlzLnNlYXJjaERhdGEubW9kaWZpZWRPbk9yQWZ0ZXIpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICB0aGlzLmRlYWRsaW5lVG9EYXRlID0gdGhpcy5zZWFyY2hEYXRhLmRlYWRsaW5lQmVmb3JlID8gbmV3IERhdGUodGhpcy5zZWFyY2hEYXRhLmRlYWRsaW5lQmVmb3JlKS5hZGREYXlzKC0xKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmRlYWRsaW5lRnJvbURhdGUgPSB0aGlzLnNlYXJjaERhdGEuZGVhZGxpbmVPbk9yQWZ0ZXIgPyBuZXcgRGF0ZSh0aGlzLnNlYXJjaERhdGEuZGVhZGxpbmVPbk9yQWZ0ZXIpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICB0aGlzLnJlbWVtYmVyVG9EYXRlID0gdGhpcy5zZWFyY2hEYXRhLnJlbWVtYmVyQmVmb3JlID8gbmV3IERhdGUodGhpcy5zZWFyY2hEYXRhLnJlbWVtYmVyQmVmb3JlKS5hZGREYXlzKC0xKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnJlbWVtYmVyRnJvbURhdGUgPSB0aGlzLnNlYXJjaERhdGEucmVtZW1iZXJPbk9yQWZ0ZXIgPyBuZXcgRGF0ZSh0aGlzLnNlYXJjaERhdGEucmVtZW1iZXJPbk9yQWZ0ZXIpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICB0aGlzLmZvbGxvd2VkQnkgPSB0aGlzLnNlYXJjaERhdGEud2F0Y2hlZEJ5SWQgPyBJZGVudGl0eUxpbmsuZnJvbUxpbmsodGhpcy5zZWFyY2hEYXRhLndhdGNoZWRCeUlkKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnJlcG9ydGVkQnkgPSB0aGlzLnNlYXJjaERhdGEuY3JlYXRlZEJ5SWQgPyBJZGVudGl0eUxpbmsuZnJvbUxpbmsodGhpcy5zZWFyY2hEYXRhLmNyZWF0ZWRCeUlkKSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRNZW51SXRlbSA9ICdob21lJztcclxuICAgICAgICB0aGlzLnNlYXJjaFBocmFzZSA9IHRoaXMuYXBwbGljYXRpb24uc2ltcGxlU2VhcmNoU3RyaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFBocmFzZSAmJiB0aGlzLnNlYXJjaFBocmFzZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihOdW1iZXIodGhpcy5zZWFyY2hQaHJhc2UpKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS50aXRsZSA9IHRoaXMuc2VhcmNoUGhyYXNlO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaERhdGEuY2FzZU51bWJlciA9IHRoaXMuc2VhcmNoUGhyYXNlO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNpbXBsZVNlYXJjaFN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhc2VTdGF0dXNlcyA9IHRoaXMuc2VhcmNoRGF0YS5jYXNlU3RhdHVzZXMgPyB0aGlzLnNlYXJjaERhdGEuY2FzZVN0YXR1c2VzLm1hcChrZXkgPT4geyByZXR1cm4geyBrZXk6IGtleSwgdGV4dDogXCJcIiB9OyB9KSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmNhc2VFbnZpcm9ubWVudHMgPSB0aGlzLnNlYXJjaERhdGEuZW52aXJvbm1lbnRzID8gdGhpcy5zZWFyY2hEYXRhLmVudmlyb25tZW50cy5tYXAoa2V5ID0+IHsgcmV0dXJuIHsga2V5OiBrZXksIHRleHQ6IFwiXCIgfTsgfSkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGxldCBhcHBsaWNhdGlvbkN1c3RvbWVycyA9IHRoaXMuYXBwbGljYXRpb24uc2VsZWN0ZWRDdXN0b21lcnM7XHJcbiAgICAgICAgaWYgKGFwcGxpY2F0aW9uQ3VzdG9tZXJzLmxlbmd0aCAhPSAxKSB7XHJcbiAgICAgICAgICAgIGxldCBjYWNoZWRDdXN0b21lcnMgPSB0aGlzLmNhY2hlU2VydmljZS5nZXRWYWx1ZTxhbnk+KFwic2VhcmNoLmV4dGVuZGVkLmN1c3RvbWVyc1wiKSB8fCBbXTtcclxuICAgICAgICAgICAgbGV0IGN1c3RzID0gYXBwbGljYXRpb25DdXN0b21lcnMubGVuZ3RoID4gMCA/IGNhY2hlZEN1c3RvbWVycy5maWx0ZXIoY2MgPT4gYXBwbGljYXRpb25DdXN0b21lcnMuc29tZShhYyA9PiBhYy5rZXkgPT0gY2MpKSA6IGNhY2hlZEN1c3RvbWVycztcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21lcnMgPSBjdXN0cztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbWVycyA9IGFwcGxpY2F0aW9uQ3VzdG9tZXJzLm1hcChjID0+IGMua2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodE1lbnVJdGVtID0gJyc7XHJcbiAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0VmFsdWU8U2VhcmNoRGF0YT4oXCJzZWFyY2guZXh0ZW5kZWQuY3JpdGVyaWFcIiwgdGhpcy5zZWFyY2hEYXRhKTtcclxuICAgICAgICB0aGlzLmNhY2hlU2VydmljZS5zZXRWYWx1ZTxhbnk+KFwic2VhcmNoLmV4dGVuZGVkLmN1c3RvbWVyc1wiLCB0aGlzLmN1c3RvbWVycyk7XHJcbiAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0VmFsdWU8Ym9vbGVhbj4oXCJzZWFyY2guZXh0ZW5kZWQuaGFzcmVzdWx0c1wiLCAodGhpcy5TZWFyY2hSZXN1bHQgJiYgdGhpcy5TZWFyY2hSZXN1bHQubGVuZ3RoID4gMCkpO1xyXG4gICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldFZhbHVlPG51bWJlcj4oXCJzZWFyY2guZXh0ZW5kZWQucmVzdWx0c1BhZ2VDb3VudFwiLCAodGhpcy5zZWFyY2hSZXN1bHRQYWdlQ291bnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJBbGwoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWFyY2hEYXRhID0ge1xyXG4gICAgICAgICAgICBzZXZlcml0aWVzOiBbXSxcclxuICAgICAgICAgICAgY2FzZVN0YXR1c2VzOiBbXSxcclxuICAgICAgICAgICAgY2FzZVR5cGVzOiBbXSxcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRzOiBbXSxcclxuICAgICAgICAgICAgcHJpb3JpdGllczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY2FzZUVudmlyb25tZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2FzZVNldmVyaXRpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmNhc2VQcmlvcml0aWVzID0gW107XHJcbiAgICAgICAgdGhpcy5jYXNlU3RhdHVzZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmlzc3VlZFRvRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc3N1ZWRGcm9tRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllZFRvRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllZEZyb21EYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRlYWRsaW5lVG9EYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRlYWRsaW5lRnJvbURhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVtZW1iZXJUb0RhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVtZW1iZXJGcm9tRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRlZEJ5ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZvbGxvd2VkQnkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJjaGFuZ2VkKFtdKTtcclxuICAgICAgICB0aGlzLmNhc2V0eXBlc2NoYW5nZWQoW10pO1xyXG4gICAgICAgIHRoaXMubXlTZXJ2aWNlQ2FzZXNDaGFuZ2VkKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmNvbGxhcHNlU2VhcmNoRmllbGQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRlbWl0KCdldmVudENsZWFyZWQnKTtcclxuXHJcbiAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzRWxlbWVudHMgPSB0aGlzLiRlbGVtZW50WzBdXHJcbiAgICAgICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZm9jdXMnKS5pdGVtKDApXHJcbiAgICAgICAgICAgICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbnVtYmVyZWRpdGJveCcpLml0ZW0oMCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZm9jdXNFbGVtZW50cykge1xyXG4gICAgICAgICAgICAgICAgZm9jdXNFbGVtZW50cy5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjYW5TZWFyY2hPblJlbWVtYmVyTWUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJTRFwiLCBcIkZRU1wiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLiR0aW1lb3V0KCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy4kdGltZW91dCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuICAgICAgICB0aGlzLnNob3d0ZXh0bm9yZXN1bHRzID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGN1c3RzID0gdGhpcy5jdXN0b21lcnMubGVuZ3RoID4gMCA/IHRoaXMuY3VzdG9tZXJzIDogdGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycy5tYXAodiA9PiB2LmtleSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWR2YW5jZWRTZWFyY2godGhpcy5zZWFyY2hEYXRhLCBjdXN0cywgMTAwLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0cyhyZXN1bHQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlU2VhcmNoRmllbGQgPSB0cnVlO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignU2VhcmNoJywgJ0Vycm9yIHdoaWxlIHNlYXJjaGluZycsIGVycm9yKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnU0VBUkNIX0VSUk9SJywgeyBlcnJvclJlc3VsdDogZXJyb3IsIHRyYW5zbGF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3d0ZXh0bm9yZXN1bHRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmF3U2VhcmNoUmVzdWx0OiBDb21wYWN0U2VydmljZUNhc2VbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgdXNlcjogVXNlcjtcclxuICAgIHB1YmxpYyBnZXQgbXlzZXJ2aWNlY2FzZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24udXNlci50aGVuKHVzZXIgPT4gdGhpcy51c2VyID0gdXNlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXIgJiYgdGhpcy5zZWFyY2hEYXRhICYmIHRoaXMuc2VhcmNoRGF0YS5jcmVhdGVkQnkgJiYgdGhpcy5zZWFyY2hEYXRhLmNyZWF0ZWRCeSA9PSB0aGlzLnVzZXIucGVyc29uSWQucmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb2xsb3dlZEJ5OiBJZGVudGl0eUxpbms7XHJcbiAgICBwdWJsaWMgZm9sbG93ZWRCeUNoYW5nZWQocGVyc29uOiBDb21wYWN0UGVyc29uKSB7XHJcbiAgICAgICAgaWYgKHBlcnNvbikge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGEud2F0Y2hlZEJ5SWQgPSBwZXJzb24uaWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hEYXRhLndhdGNoZWRCeUlkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgaGlkZUZvbGxvd2VkQnlGaXFhcygpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMudXNlciB8fCAhdGhpcy51c2VyLmlzRmlxYXNFbXBsb3llZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVwb3J0ZWRCeTogSWRlbnRpdHlMaW5rO1xyXG4gICAgcHVibGljIHJlcG9ydGVkQnlDaGFuZ2VkKHBlcnNvbjogQ29tcGFjdFBlcnNvbikge1xyXG4gICAgICAgIGlmIChwZXJzb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hEYXRhLmNyZWF0ZWRCeUlkID0gcGVyc29uLmlkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS5jcmVhdGVkQnlJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIG15U2VydmljZUNhc2VzQ2hhbmdlZChhY3RpdmU6IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgdXNlciA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24udXNlcjtcclxuICAgICAgICB0aGlzLnNlYXJjaERhdGEuY3JlYXRlZEJ5SWQgPSBhY3RpdmUgPyB1c2VyLnBlcnNvbklkIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc1Jlc3VsdHMocmVzdWx0OiBDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT4pIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCA9IHJlc3VsdC5wYWdlQ291bnQ7XHJcbiAgICAgICAgdGhpcy50b211Y2ggPSB0aGlzLmNoZWNrVG9vTWFueVJlc3VsdHMoKTtcclxuICAgICAgICB0aGlzLnJhd1NlYXJjaFJlc3VsdCA9IHJlc3VsdC5pdGVtcztcclxuICAgICAgICB0aGlzLmZpbHRlckFjY291bnRzKHRoaXMuYXBwbGljYXRpb24uc2VsZWN0ZWRDdXN0b21lcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tUb29NYW55UmVzdWx0cygpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCAmJiB0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCA+IDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJBY2NvdW50cyhzZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuU2VhcmNoUmVzdWx0ID0gdGhpcy5yYXdTZWFyY2hSZXN1bHQuZmlsdGVyKHggPT4gc2VsZWN0ZWQuc29tZSh5ID0+IHkua2V5ID09IHguY3VzdG9tZXIuaHJlZi5yZXBsYWNlKCdjdXN0b21lci8nLCAnJykpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYmFjaygpIHtcclxuICAgICAgICB0aGlzLiR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhc2VpZGNoYW5nZWQodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaERhdGEuY2FzZU51bWJlciA9IHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGl0bGVjaGFuZ2VkKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hEYXRhLnRpdGxlID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXNjcmlwdGlvbmNoYW5nZWQodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaERhdGEuZGVzY3JpcHRpb24gPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGN1c3RyZWZjaGFuZ2VkKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hEYXRhLmN1c3RvbWVyUmVmID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3JyZXNwb25kZW5jZWNoYW5nZWQodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaERhdGEuY29ycmVzcG9uZGVuY2VDb250ZW50ID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjdXN0b21lcmNoYW5nZWQoY3VzdG9tZXJLZXlzOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChjdXN0b21lcktleXMgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJzID0gY3VzdG9tZXJLZXlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmlvcml0eWNoYW5nZWQocHJpb3JpdGllczogeyBrZXk6IFByaW9yaXR5LCB0ZXh0OiBzdHJpbmcgfVtdKSB7XHJcbiAgICAgICAgaWYgKHByaW9yaXRpZXMgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FzZVByaW9yaXRpZXMgPSBwcmlvcml0aWVzO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoRGF0YS5wcmlvcml0aWVzID0gcHJpb3JpdGllcy5tYXAoIGsgPT4gay5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXNlUHJpb3JpdGllczogeyBrZXk6IFByaW9yaXR5LCB0ZXh0OiBzdHJpbmcgfVtdO1xyXG5cclxuICAgIHB1YmxpYyBlbnZpcm9ubWVudGNoYW5nZWQoZW52aXJvbm1lbnRzOiB7IGtleTogRW52aXJvbm1lbnQsIHRleHQ6IHN0cmluZyB9W10pIHtcclxuICAgICAgICBpZiAoZW52aXJvbm1lbnRzID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhc2VFbnZpcm9ubWVudHMgPSBlbnZpcm9ubWVudHM7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hEYXRhLmVudmlyb25tZW50cyA9IGVudmlyb25tZW50cy5tYXAoIGsgPT4gay5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXNlRW52aXJvbm1lbnRzOiB7IGtleTogRW52aXJvbm1lbnQsIHRleHQ6IHN0cmluZyB9W107XHJcblxyXG4gICAgcHVibGljIHN0YXR1c2VzY2hhbmdlZChzdGF0dXNlczogeyBrZXk6IFN0YXR1cywgdGV4dDogc3RyaW5nIH1bXSkge1xyXG4gICAgICAgIGlmIChzdGF0dXNlcyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYXNlU3RhdHVzZXMgPSBzdGF0dXNlcztcclxuICAgICAgICB0aGlzLnNlYXJjaERhdGEuY2FzZVN0YXR1c2VzID0gc3RhdHVzZXMubWFwKGsgPT4gay5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXNlU3RhdHVzZXM6IHsga2V5OiBTdGF0dXMsIHRleHQ6IHN0cmluZyB9W107XHJcblxyXG4gICAgcHVibGljIGNhc2V0eXBlc2NoYW5nZWQoY2FzZXR5cGVzOiBDYXNlVHlwZVtdKSB7XHJcbiAgICAgICAgaWYgKGNhc2V0eXBlcyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWFyY2hEYXRhLmNhc2VUeXBlcyA9IGNhc2V0eXBlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V2ZXJpdHljaGFuZ2VkKHNldmVyaXRpZXM6IHsga2V5OiBTZXZlcml0eSwgdGV4dDogc3RyaW5nIH1bXSkge1xyXG4gICAgICAgIGlmIChzZXZlcml0aWVzID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhc2VTZXZlcml0aWVzID0gc2V2ZXJpdGllcztcclxuICAgICAgICB0aGlzLnNlYXJjaERhdGEuc2V2ZXJpdGllcyA9IHNldmVyaXRpZXMubWFwKGsgPT4gay5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXNlU2V2ZXJpdGllczogeyBrZXk6IFNldmVyaXR5LCB0ZXh0OiBzdHJpbmcgfVtdO1xyXG5cclxuICAgIHByaXZhdGUgaXNzdWVkRnJvbURhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgaXNzdWVkZnJvbWRhdGVjaGFuZ2VkKGRhdGU6IERhdGUpIHtcclxuICAgICAgICB0aGlzLmlzc3VlZEZyb21EYXRlID0gZGF0ZTtcclxuICAgICAgICBpZiAoZGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBuZGF0ZSA9IGRhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hEYXRhLmNyZWF0ZWRPbk9yQWZ0ZXIgPSBuZGF0ZS50b0lTT0RhdGVTdHJpbmcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGEuY3JlYXRlZE9uT3JBZnRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc3N1ZWRUb0RhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgaXNzdWVkdG9kYXRlY2hhbmdlZChkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5pc3N1ZWRUb0RhdGUgPSBkYXRlO1xyXG4gICAgICAgIGlmIChkYXRlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIG5kYXRlID0gZGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICBuZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICAgICAgbmRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGEuY3JlYXRlZEJlZm9yZSA9IG5kYXRlLnRvSVNPRGF0ZVN0cmluZygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS5jcmVhdGVkQmVmb3JlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBpc3N1ZWRNYXhEYXRlKCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzc3VlZFRvRGF0ZSA/IHRoaXMuaXNzdWVkVG9EYXRlIDogdGhpcy5ub3dkYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbW9kaWZpZWRGcm9tRGF0ZTogRGF0ZTtcclxuICAgIHB1YmxpYyBtb2RpZmllZGZyb21kYXRlY2hhbmdlZChkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllZEZyb21EYXRlID0gZGF0ZTtcclxuICAgICAgICBpZiAoZGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBuZGF0ZSA9IGRhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hEYXRhLm1vZGlmaWVkT25PckFmdGVyID0gbmRhdGUudG9JU09EYXRlU3RyaW5nKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hEYXRhLm1vZGlmaWVkT25PckFmdGVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1vZGlmaWVkVG9EYXRlOiBEYXRlO1xyXG4gICAgcHVibGljIG1vZGlmaWVkdG9kYXRlY2hhbmdlZChkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5tb2RpZmllZFRvRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgaWYgKGRhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgbmRhdGUgPSBkYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIG5kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICBuZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS5tb2RpZmllZEJlZm9yZSA9IG5kYXRlLnRvSVNPRGF0ZVN0cmluZygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS5tb2RpZmllZEJlZm9yZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgbW9kaWZpZWRNYXhEYXRlKCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGlmaWVkVG9EYXRlID8gdGhpcy5tb2RpZmllZFRvRGF0ZSA6IHRoaXMubm93ZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlYWRsaW5lRnJvbURhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgZGVhZGxpbmVmcm9tZGF0ZWNoYW5nZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZGVhZGxpbmVGcm9tRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgaWYgKGRhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgbmRhdGUgPSBkYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS5kZWFkbGluZU9uT3JBZnRlciA9IG5kYXRlLnRvSVNPRGF0ZVN0cmluZygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS5kZWFkbGluZU9uT3JBZnRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWFkbGluZVRvRGF0ZTogRGF0ZTtcclxuICAgIHB1YmxpYyBkZWFkbGluZXRvZGF0ZWNoYW5nZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZGVhZGxpbmVUb0RhdGUgPSBkYXRlO1xyXG4gICAgICAgIGlmIChkYXRlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIG5kYXRlID0gZGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICBuZGF0ZS5hZGREYXlzKDEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGEuZGVhZGxpbmVCZWZvcmUgPSBuZGF0ZS50b0lTT0RhdGVTdHJpbmcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGEuZGVhZGxpbmVCZWZvcmUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IGRlYWRsaW5lTWF4RGF0ZSgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWFkbGluZVRvRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbWVtYmVyRnJvbURhdGU6IERhdGU7XHJcbiAgICBwdWJsaWMgcmVtZW1iZXJmcm9tZGF0ZWNoYW5nZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIHRoaXMucmVtZW1iZXJGcm9tRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgaWYgKGRhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgbmRhdGUgPSBkYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS5yZW1lbWJlck9uT3JBZnRlciA9IG5kYXRlLnRvSVNPRGF0ZVN0cmluZygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGF0YS5yZW1lbWJlck9uT3JBZnRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1lbWJlclRvRGF0ZTogRGF0ZTtcclxuICAgIHB1YmxpYyByZW1lbWJlcnRvZGF0ZWNoYW5nZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIHRoaXMucmVtZW1iZXJUb0RhdGUgPSBkYXRlO1xyXG4gICAgICAgIGlmIChkYXRlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIG5kYXRlID0gZGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICBuZGF0ZS5hZGREYXlzKDEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGEucmVtZW1iZXJCZWZvcmUgPSBuZGF0ZS50b0lTT0RhdGVTdHJpbmcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERhdGEucmVtZW1iZXJCZWZvcmUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IHJlbWVtYmVyTWF4RGF0ZSgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1lbWJlclRvRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMga2V5cHJlc3MoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCRldmVudC5rZXlDb2RlID09IEtleUNvZGVzLmVudGVyIHx8ICRldmVudC5jb2RlID09IEtleWJvYXJkRXZlbnRDb2RlLmVudGVyKSB7XHJcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaCgpO1xyXG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NvbGxhcHNlU2VhcmNoRmllbGQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZ2V0IGNvbGxhcHNlU2VhcmNoRmllbGQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNlU2VhcmNoRmllbGQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbGxhcHNlU2VhcmNoRmllbGQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fY29sbGFwc2VTZWFyY2hGaWVsZCA9IHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29sbGFwc2VmaWVsZHNrZXlkb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmICgkZXZlbnQua2V5Q29kZSA9PT0gMCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKCRldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLnNwYWNlOlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoJGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuc3BhY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbGxhcHNlZmllbGRza2V5dXAoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCRldmVudC5rZXlDb2RlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoJGV2ZW50LmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUuc3BhY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZVNlYXJjaEZpZWxkID0gIXRoaXMuY29sbGFwc2VTZWFyY2hGaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5sZWZ0QXJyb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZVNlYXJjaEZpZWxkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLnJpZ2h0QXJyb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZVNlYXJjaEZpZWxkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoICgkZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy5zcGFjZTpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlU2VhcmNoRmllbGQgPSAhdGhpcy5jb2xsYXBzZVNlYXJjaEZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmxlZnRBcnJvdzpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlU2VhcmNoRmllbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMucmlnaHRBcnJvdzpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlU2VhcmNoRmllbGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZVhsc3goKSB7XHJcbiAgICAgICAgdmFyIGN1c3RzID0gdGhpcy5jdXN0b21lcnMubGVuZ3RoID4gMCA/IHRoaXMuY3VzdG9tZXJzIDogdGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycy5tYXAodiA9PiB2LmtleSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWR2YW5jZWRFeHBvcnQodGhpcy5zZWFyY2hEYXRhLCBjdXN0cyk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdHMocmVzdWx0KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoU2VydmljZVV0aWxzLklzVW5hdXRob3JpemVkUmVzcG9uc2UoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5zZXRTZXFVcmwoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlYXJjaCcsICdFcnJvciB3aGlsZSBzZWFyY2hpbmcnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3JEaWFsb2coJ2Vycm9yJywgJ0VSUk9SJywgJ1NFQVJDSF9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93dGV4dG5vcmVzdWx0cyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2Uuc2F2ZUV4Y2VsRnJvbUpzb24odGhpcy5TZWFyY2hSZXN1bHQsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCI7XHJcbmltcG9ydCB7IEhvbWUgfSBmcm9tIFwiLi4vaG9tZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBTZWFyY2hUYWIuc2VsZWN0b3IsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9zZWFyY2h0YWIuaHRtbFwiLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uOiBcIl5hcHBsaWNhdGlvblwiLFxyXG4gICAgICAgIGhvbWU6XCJeaG9tZVwiXHJcbiAgICB9XHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU2VhcmNoVGFiIHtcclxuICAgIHByaXZhdGUgaG9tZTpIb21lO1xyXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbjtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcInNlYXJjaFRhYlwiO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGZ1bGxNZW51KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9tZS5mdWxsTWVudTtcclxuICAgIH1cclxufSIsIu+7v2ltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgKiBhcyBSeCBmcm9tIFwicnhqcy9SeFwiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IElEaXNwb3NhYmxlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvZ2VuZXJhbFwiO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzdWx0IH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvaUZxc1wiO1xyXG5pbXBvcnQgeyBDb21wYWN0U2VydmljZUNhc2UgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3VzZXJcIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NhY2hlXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2V4cG9ydFRvRXhjZWxTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VDYXNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9maXFhc3Npc3RBcGkvc2VydmljZUNhc2VTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IElzUHJvY2Vzc2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvaXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NlcnZpY2VCYXNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VDYXNlU2VhcmNoU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXJ2aWNlQ2FzZVNlYXJjaFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xyXG5pbXBvcnQgeyBDb250cm9sQmFzZSB9IGZyb20gXCIuLi9nZW5lcmFsL2NvbnRyb2xCYXNlXCI7XHJcbmltcG9ydCB7IFNhdmVEaWFsb2cgfSBmcm9tIFwiLi4vZ2VuZXJhbC9zYXZlZGlhbG9nXCI7XHJcbmltcG9ydCB7IFNlYXJjaFRhYiB9IGZyb20gXCIuL3NlYXJjaHRhYlwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcInNpbXBsZVNlYXJjaFwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmlld3Mvc2ltcGxlU2VhcmNoLmh0bWxcIixcclxuICAgIHJlcXVpcmU6IHtcclxuICAgICAgICBcImFwcGxpY2F0aW9uXCI6IFwiXmFwcGxpY2F0aW9uXCIsXHJcbiAgICAgICAgXCJzZWFyY2hUYWJcIjogXCJec2VhcmNoVGFiXCJcclxuICAgIH1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVNlYXJjaCBleHRlbmRzIENvbnRyb2xCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFJvdXRlcicpIHJvb3RSb3V0ZXI6IGFuZ3VsYXIuUm91dGVyLFxyXG4gICAgICAgIEBJbmplY3QoKSBzYXZlRGlhbG9nOiBTYXZlRGlhbG9nLFxyXG4gICAgICAgIEBJbmplY3QoKSBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgc2VydmljZUNhc2VTZXJ2aWNlOiBTZXJ2aWNlQ2FzZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgaXNQcm9jZXNzaW5nU2VydmljZTogSXNQcm9jZXNzaW5nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBzZXJ2aWNlQ2FzZVNlYXJjaFNlcnZpY2U6IFNlcnZpY2VDYXNlU2VhcmNoU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHNhdmVEaWFsb2csIHJvb3RSb3V0ZXIsICR0aW1lb3V0LCBhdXRob3JpemF0aW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoUGhyYXNlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jICRyb3V0ZXJPbkFjdGl2YXRlKG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICBhd2FpdCB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLnJvbGVMb2FkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jICRyb3V0ZXJPblJldXNlKG5leHQ/OiBhbmd1bGFyLkNvbXBvbmVudEluc3RydWN0aW9uLCBwcmV2PzogYW5ndWxhci5Db21wb25lbnRJbnN0cnVjdGlvbikge1xyXG4gICAgICAgICBhd2FpdCB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLnJvbGVMb2FkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGxpY2F0aW9uOiBBcHBsaWNhdGlvbjtcclxuICAgIHByaXZhdGUgX3NlYXJjaFBocmFzZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBoaW50OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGRpc3Bvc2FibGVzOiBJRGlzcG9zYWJsZVtdID0gW107XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHJlcXVpcmVzYWN0aW9ubGFiZWw6IHN0cmluZztcclxuICAgIHByaXZhdGUgYWN0aW9uUmVxdWlyZWRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGFjdGlvblJlcXVpcmVkTGV2ZWw6IHN0cmluZztcclxuICAgIHByaXZhdGUgYWN0aW9uUmVxdWlyZWRDb3VudDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSByZXF1aXJlc2FjdGlvbmhpbnQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIG5lZWRzZmVlZGJhY2tsYWJlbDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBhd2FpdGluZ0ZlZWRiYWNrTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBhd2FpdGluZ0ZlZWRiYWNrTGV2ZWw6IHN0cmluZztcclxuICAgIHByaXZhdGUgYXdhaXRpbmdGZWVkYmFja0NvdW50OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIG5lZWRzZmVlZGJhY2toaW50OiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3RpdmVjYXNlc2xhYmVsbXVsdGk6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3RpdmVjYXNlc2xhYmVsc2luZ2xlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZWNhc2VzbGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuYWN0aXZlQ2FzZXNDb3VudCA9PSAxKSA/IHRoaXMuYWN0aXZlY2FzZXNsYWJlbHNpbmdsZSA6IHRoaXMuYWN0aXZlY2FzZXNsYWJlbG11bHRpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhY3RpdmVDYXNlc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYWN0aXZlQ2FzZXNDb3VudDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBhY3RpdmVjYXNlc2hpbnQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBvblNlYXJjaFRleHRDaGFuZ2VkOiBSeC5TdWJqZWN0PHN0cmluZz47XHJcbiAgICBwcml2YXRlIF9jb2xsYXBzZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgY29sbGFwc2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsYXBzZWQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGNvbGxhcHNlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaGhpbnQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgbG9nZWRJblVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2hvd3RleHRub3Jlc3VsdHM6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHRvbXVjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBzZWFyY2hUYWI6IFNlYXJjaFRhYjtcclxuICAgIHByaXZhdGUgbGFzdFNlYXJjaE1vZGUgPSAwO1xyXG4gICAgcHVibGljIFNlYXJjaFJlc3VsdDogQ29tcGFjdFNlcnZpY2VDYXNlW107XHJcbiAgICBwdWJsaWMgU2VhcmNoUmVzdWx0Q291bnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgc2VhcmNoUmVzdWx0UGFnZUNvdW50OiBudW1iZXI7XHJcblxyXG4gICAgJG9uSW5pdCgpIHtcclxuICAgICAgICB2YXIgZnNzID0gdGhpcy5hcHBsaWNhdGlvbi5vbkZhc3RTZWFyY2guc3Vic2NyaWJlKChbcGhyYXNlLCByZXN1bHRdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaFBocmFzZSA9IHBocmFzZTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0cyhwaHJhc2UsIHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi51c2VyLnRoZW4oeCA9PiB7IHgucGVyc29uSWQudmFsdWUudGhlbih5ID0+IHRoaXMubG9nZWRJblVzZXJuYW1lID0geS5uYW1lKSB9KVxyXG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZXMucHVzaCgoKSA9PiBmc3MudW5zdWJzY3JpYmUoKSk7XHJcbiAgICAgICAgdGhpcy5fbXlzZXJ2aWNlY2FzZXMgPSB0aGlzLmNhY2hlU2VydmljZS5nZXRWYWx1ZTxib29sZWFuPihcInNpbXBsZXNlYXJjaC5teXNlcnZpY2VjYXNlc1wiKSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldFZhbHVlPG51bWJlcj4oXCJzaW1wbGVzZWFyY2gucmVzdWx0c1BhZ2VDb3VudFwiKSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMudG9tdWNoID0gdGhpcy5jaGVja1Rvb01hbnlSZXN1bHRzKCk7XHJcbiAgICAgICAgdGhpcy5zaG93dGV4dG5vcmVzdWx0cyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25TZWFyY2hUZXh0Q2hhbmdlZCA9IG5ldyBSeC5TdWJqZWN0KCk7XHJcbiAgICAgICAgdmFyIG9uU2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5vblNlYXJjaFRleHRDaGFuZ2VkLmRlYm91bmNlVGltZSg0MDApLnN1YnNjcmliZSh7IG5leHQ6IHNlYXJjaFN0cmluZyA9PiB0aGlzLlNlYXJjaChzZWFyY2hTdHJpbmcpIH0pO1xyXG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZXMucHVzaCgoKSA9PiBvblNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2goKCkgPT4gdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5vblJvbGVDaGFuZ2VkKF8gPT4gdGhpcy5pbml0KCkpLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZXMucHVzaCh0aGlzLmFwcGxpY2F0aW9uLmFkZE9uQWNjb3VudHNDaGFuZ2VkKHMgPT4gdGhpcy5zZWxlY3RlZEFjY291bnRzQ2hhbmdlZChzKSkpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmdldENvdW50ZXJzKCk7XHJcbiAgICAgICAgdGhpcy5oaW50ID0gdGhpcy5zZWFyY2hoaW50O1xyXG4gICAgICAgIHZhciBfbW9kZSA9IHRoaXMuYXBwbGljYXRpb24uc2ltcGxlU2VhcmNoTW9kZTtcclxuICAgICAgICB2YXIgc2VhcmNoUGhyYXNlID0gdGhpcy5hcHBsaWNhdGlvbi5zaW1wbGVTZWFyY2hTdHJpbmc7XHJcbiAgICAgICAgc3dpdGNoIChfbW9kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoVmFsdWVDaGFuZ2VkKHNlYXJjaFBocmFzZSB8fCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlQ2FzZVNlYXJjaFNlcnZpY2UuQ3VycmVudFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlYXJjaE1vZGUgPSA1O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJjaFBocmFzZSA9IHNlYXJjaFBocmFzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NSZXN1bHRzKHNlYXJjaFBocmFzZSwgdGhpcy5zZXJ2aWNlQ2FzZVNlYXJjaFNlcnZpY2UuQ3VycmVudFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkFjdGlvblJlcXVpcmVkQ2xpY2tlZCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Bd2FpdGluZ0ZlZWRiYWNrQ2xpY2tlZCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIHRoaXMub25BY3RpdmVDYXNlc0NsaWNrZWQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNpbXBsZVNlYXJjaE1vZGUgPSB0aGlzLlNlYXJjaFJlc3VsdCAmJiB0aGlzLlNlYXJjaFJlc3VsdENvdW50ID4gMCA/IHRoaXMubGFzdFNlYXJjaE1vZGUgOiAwO1xyXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2ltcGxlU2VhcmNoU3RyaW5nID0gdGhpcy5fc2VhcmNoUGhyYXNlO1xyXG4gICAgICAgIHRoaXMuZGlzcG9zYWJsZXMuZm9yRWFjaChkID0+IHtcclxuICAgICAgICAgICAgdHJ5IHsgZCgpIH0gY2F0Y2ggKGUpIHsgdGhpcy5sb2dTZXJ2aWNlLndhcm5pbmcoJ1NpbXBsZVNlYXJjaCcsICdFcnJvciBkaXNwb3NpbmcnLCBlKTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0VmFsdWUoXCJzaW1wbGVzZWFyY2gubXlzZXJ2aWNlY2FzZXNcIiwgdGhpcy5fbXlzZXJ2aWNlY2FzZXMpO1xyXG4gICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldFZhbHVlPG51bWJlcj4oXCJzaW1wbGVzZWFyY2gucmVzdWx0c1BhZ2VDb3VudFwiLCAodGhpcy5zZWFyY2hSZXN1bHRQYWdlQ291bnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGxvYWRBd2FpdGluZ0ZlZWRiYWNrQ291bnRlcihjdXN0SWRzOiBudW1iZXJbXSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQXdhaXRpbmdGZWVkYmFja0NvdW50KGN1c3RJZHMsIHRoaXMuX215c2VydmljZWNhc2VzKTtcclxuICAgICAgICAgICAgY29uc3QgbGV2ZWwgPSBjb3VudCA+IDAgPyAoY291bnQgPiA1ID8gJ2hpZ2gnIDogJ21lZGl1bScpIDogJ2xvdyc7XHJcbiAgICAgICAgICAgIGNvbnN0IGhpbnQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGVBc3luYyhcclxuICAgICAgICAgICAgICAgIGNvdW50ID09IDAgPyBcIk5PX0NBU0VTX1JFUVVJUkVfRkVFREJBQ0tcIiA6XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPT0gMSA/IFwiT05FX0NBU0VfUkVRVUlSRVNfRkVFREJBQ0tcIiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiWFhYX0NBU0VTX1JFUVVJUkVfRkVFREJBQ0tcIikudGhlbih0ID0+IHQucmVwbGFjZShcIlhYWFwiLCBjb3VudC50b1N0cmluZygpKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geyBjb3VudCwgbGV2ZWwsIGhpbnQgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgY291bnQ6IDAsIGxldmVsOiAnaGlnaCcsIGhpbnQ6ICcnIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkQWN0aW9uUmVxdWlyZWRDb3VudGVyKGN1c3RJZHM6IG51bWJlcltdKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5BY3Rpb25SZXF1aXJlZENvdW50KGN1c3RJZHMsIHRoaXMuX215c2VydmljZWNhc2VzKTtcclxuICAgICAgICAgICAgY29uc3QgbGV2ZWwgPSBjb3VudCA+IDAgPyAoY291bnQgPiA1ID8gJ2hpZ2gnIDogJ21lZGl1bScpIDogJ2xvdyc7XHJcbiAgICAgICAgICAgIGNvbnN0IGhpbnQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGVBc3luYyhcclxuICAgICAgICAgICAgICAgIGNvdW50ID09IDAgPyBcIk5PX0NBU0VTX1JFUVVJUkVfQUNUSU9OXCIgOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID09IDEgPyBcIk9ORV9DQVNFX1JFUVVJUkVTX0FDVElPTlwiIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJYWFhfQ0FTRVNfUkVRVUlSRV9BQ1RJT05cIikudGhlbih0ID0+IHQucmVwbGFjZShcIlhYWFwiLCBjb3VudC50b1N0cmluZygpKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geyBjb3VudCwgbGV2ZWwsIGhpbnQgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgY291bnQ6IDAsIGxldmVsOiAnaGlnaCcsIGhpbnQ6ICcnIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkQWN0aXZlQ2FzZXNDb3VudGVyKGN1c3RJZHM6IG51bWJlcltdKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5BY3RpdmVDYXNlc0NvdW50KGN1c3RJZHMsIHRoaXMuX215c2VydmljZWNhc2VzKTtcclxuICAgICAgICAgICAgY29uc3QgaGludCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZUFzeW5jKFxyXG4gICAgICAgICAgICAgICAgY291bnQgPT0gMCA/IFwiTk9fQUNUSVZFX0NBU0VTXCIgOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID09IDEgPyBcIk9ORV9BQ1RJVkVfQ0FTRVwiIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJYWFhfQUNUSVZFX0NBU0VTXCIpLnRoZW4odCA9PiB0LnJlcGxhY2UoXCJYWFhcIiwgY291bnQudG9TdHJpbmcoKSkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHsgY291bnQsIGhpbnQgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgY291bnQ6IDAsIGhpbnQ6ICcnIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb3VudGVyc1JlcXVlc3RJZDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgZ2V0Q291bnRlcnMoKSB7XHJcbiAgICAgICAgY29uc3QgbG9hZElkID0gKyt0aGlzLmNvdW50ZXJzUmVxdWVzdElkO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBjdXN0SWRzID0gdGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycy5tYXAoeCA9PiB4LmtleSk7XHJcbiAgICAgICAgICAgIGlmIChjdXN0SWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUmVxdWlyZWRMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEFjdGlvblJlcXVpcmVkQ291bnRlcihjdXN0SWRzKS50aGVuKHN0YXRzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZElkICE9PSB0aGlzLmNvdW50ZXJzUmVxdWVzdElkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUmVxdWlyZWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25SZXF1aXJlZENvdW50ID0gc3RhdHMuY291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25SZXF1aXJlZExldmVsID0gc3RhdHMubGV2ZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlc2FjdGlvbmhpbnQgPSBzdGF0cy5oaW50O1xyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hd2FpdGluZ0ZlZWRiYWNrTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBd2FpdGluZ0ZlZWRiYWNrQ291bnRlcihjdXN0SWRzKS50aGVuKHN0YXRzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZElkICE9PSB0aGlzLmNvdW50ZXJzUmVxdWVzdElkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXdhaXRpbmdGZWVkYmFja0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF3YWl0aW5nRmVlZGJhY2tDb3VudCA9IHN0YXRzLmNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXdhaXRpbmdGZWVkYmFja0xldmVsID0gc3RhdHMubGV2ZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZWVkc2ZlZWRiYWNraGludCA9IHN0YXRzLmhpbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhc2VzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBY3RpdmVDYXNlc0NvdW50ZXIoY3VzdElkcykudGhlbihzdGF0cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRJZCAhPT0gdGhpcy5jb3VudGVyc1JlcXVlc3RJZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhc2VzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FzZXNDb3VudCA9IHN0YXRzLmNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlY2FzZXNoaW50ID0gc3RhdHMuaGludDtcclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FzZXNDb3VudCA9IHRoaXMuYWN0aW9uUmVxdWlyZWRDb3VudCA9IHRoaXMuYXdhaXRpbmdGZWVkYmFja0NvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUmVxdWlyZWRMZXZlbCA9IHRoaXMuYXdhaXRpbmdGZWVkYmFja0xldmVsID0gJ2xvdyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGVBc3luYyhcIk5PX0NBU0VTX1JFUVVJUkVfRkVFREJBQ0tcIikudGhlbih0ID0+IHRoaXMubmVlZHNmZWVkYmFja2hpbnQgPSB0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZUFzeW5jKFwiTk9fQ0FTRVNfUkVRVUlSRV9BQ1RJT05cIikudGhlbih0ID0+IHRoaXMucmVxdWlyZXNhY3Rpb25oaW50ID0gdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGVBc3luYyhcIk5PX0FDVElWRV9DQVNFU1wiKS50aGVuKHQgPT4gdGhpcy5hY3RpdmVjYXNlc2hpbnQgPSB0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZmluYWxseSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWFyY2hWYWx1ZUNoYW5nZWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaFBocmFzZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZWFyY2hQaHJhc2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmhpbnQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5vblNlYXJjaFRleHRDaGFuZ2VkLm5leHQodGhpcy5fc2VhcmNoUGhyYXNlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmhpbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5oaW50ID0gdGhpcy5zZWFyY2hoaW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RTZWFyY2hNb2RlID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jdXJyZW50U2VhcmNoU3Vic2NyaXB0aW9uOiBSeC5TdWJzY3JpcHRpb247XHJcbiAgICBwcml2YXRlIGdldCBjdXJyZW50U2VhcmNoKCk6IFJ4LlN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb247XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldCBjdXJyZW50U2VhcmNoKHN1YnNjcmlwdGlvbjogUnguU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoU3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX215c2VydmljZWNhc2VzOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBnZXQgbXlzZXJ2aWNlY2FzZXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX215c2VydmljZWNhc2VzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VteXNlcnZpY2VjYXNlcyh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9teXNlcnZpY2VjYXNlcyA9IHZhbDtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMubGFzdFNlYXJjaE1vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFBocmFzZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaCh0aGlzLl9zZWFyY2hQaHJhc2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25BY3Rpb25SZXF1aXJlZENsaWNrZWQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXdhaXRpbmdGZWVkYmFja0NsaWNrZWQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQWN0aXZlQ2FzZXNDbGlja2VkKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXRDb3VudGVycygpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyO1xyXG4gICAgcHVibGljIGFzeW5jIFNlYXJjaChzZWFyY2hTdHJpbmc6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbi51c2VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycyAmJiB0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93dGV4dG5vcmVzdWx0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2ggPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIHZhciBzdWIgPSB0aGlzLnNlcnZpY2VDYXNlU2VhcmNoU2VydmljZS5TZWFyY2goc2VhcmNoU3RyaW5nLCB0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLm1hcCh2ID0+IHYua2V5KSwgMTAwLCAwLCAodGhpcy5fbXlzZXJ2aWNlY2FzZXMpID8gdGhpcy51c2VyIDogdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzdWx0ID0+IHRoaXMucHJvY2Vzc1Jlc3VsdHMoc2VhcmNoU3RyaW5nLCByZXN1bHQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uLnNldFNlcVVybChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignU2ltcGxlU2VhcmNoJywgJ0Vycm9yIHdoaWxlIHNlYXJjaGluZycsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvckRpYWxvZygnZXJyb3InLCAnRVJST1InLCAnU0lNUExFX1NFQVJDSF9FUlJPUicsIHsgdHJhbnNsYXRlOiB0cnVlLCBlcnJvclJlc3VsdDogZXJyb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzdWIuYWRkKCgpID0+IHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoID0gc3ViO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJhd1NlYXJjaFJlc3VsdDogQ29tcGFjdFNlcnZpY2VDYXNlW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NSZXN1bHRzKHNlYXJjaFN0cmluZzogc3RyaW5nLCByZXN1bHQ6IENvbGxlY3Rpb25SZXN1bHQ8Q29tcGFjdFNlcnZpY2VDYXNlPikge1xyXG4gICAgICAgIHZhciBpdGVtcyA9IHJlc3VsdC5pdGVtcztcclxuICAgICAgICBpZiAocmVzdWx0LmNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5teXNlcnZpY2VjYXNlcykge1xyXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIociA9PiBbXCJjbG9zZWRcIiwgXCJjYW5jZWxsZWRcIl0uaW5kZXhPZihyLnN0YXR1cykgPT0gLTEgJiYgci5jcmVhdGVkQnkgPT0gdGhpcy5sb2dlZEluVXNlcm5hbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIociA9PiBbXCJjbG9zZWRcIiwgXCJjYW5jZWxsZWRcIl0uaW5kZXhPZihyLnN0YXR1cykgPT0gLTEpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGVja1Jlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMucmF3U2VhcmNoUmVzdWx0ID0gaXRlbXM7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJBY2NvdW50cyh0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzKTtcclxuICAgICAgICB0aGlzLnNob3d0ZXh0bm9yZXN1bHRzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvbXVjaCA9IHJlc3VsdC5jb3VudCA+IDEwMDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1Jlc3VsdChyZXN1bHQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdFBhZ2VDb3VudCA9IHJlc3VsdC5wYWdlQ291bnQ7XHJcbiAgICAgICAgdGhpcy50b211Y2ggPSB0aGlzLmNoZWNrVG9vTWFueVJlc3VsdHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrVG9vTWFueVJlc3VsdHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWFyY2hSZXN1bHRQYWdlQ291bnQgJiYgdGhpcy5zZWFyY2hSZXN1bHRQYWdlQ291bnQgPiAxO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsdGVyQWNjb3VudHMoc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLlNlYXJjaFJlc3VsdCA9IHRoaXMucmF3U2VhcmNoUmVzdWx0LmZpbHRlcih4ID0+IHNlbGVjdGVkLnNvbWUoeSA9PiB5LmtleSA9PSB4LmN1c3RvbWVyLmhyZWYucmVwbGFjZSgnY3VzdG9tZXIvJywgJycpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZWxlY3RlZEFjY291bnRzQ2hhbmdlZChzZWxlY3RlZDogeyBrZXk6IHN0cmluZywgdGV4dDogc3RyaW5nIH1bXSkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQWNjb3VudHMoc2VsZWN0ZWQpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q291bnRlcnMoKTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMubGFzdFNlYXJjaE1vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFBocmFzZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaCh0aGlzLl9zZWFyY2hQaHJhc2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHRoaXMub25BY3Rpb25SZXF1aXJlZENsaWNrZWQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXdhaXRpbmdGZWVkYmFja0NsaWNrZWQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQWN0aXZlQ2FzZXNDbGlja2VkKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQXdhaXRpbmdGZWVkYmFja0NsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oaW50ID0gdGhpcy5uZWVkc2ZlZWRiYWNrbGFiZWw7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoUGhyYXNlID0gJyc7XHJcbiAgICAgICAgdGhpcy5sYXN0U2VhcmNoTW9kZSA9IDM7XHJcbiAgICAgICAgdmFyIGN1c3RJZHMgPSB0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLm1hcCh4ID0+IHgua2V5KTtcclxuICAgICAgICBpZiAoY3VzdElkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgdmFyIHN1YiA9IFJ4Lk9ic2VydmFibGUuZnJvbVByb21pc2UoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5Bd2FpdGluZ0ZlZWRiYWNrKGN1c3RJZHMsIDEwMCwgdGhpcy5fbXlzZXJ2aWNlY2FzZXMpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gcmVzdWx0Lml0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaFJlc3VsdCA9IGl0ZW1zLm1hcCh5ID0+IHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUmVzdWx0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VydmljZVV0aWxzLklzVW5hdXRob3JpemVkUmVzcG9uc2UoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgc3ViLmFkZCgoKSA9PiB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RvcFByb2Nlc3NpbmcoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNlYXJjaCA9IHN1YjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLlNlYXJjaFJlc3VsdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25BY3Rpb25SZXF1aXJlZENsaWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5oaW50ID0gdGhpcy5yZXF1aXJlc2FjdGlvbmxhYmVsO1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaFBocmFzZSA9ICcnO1xyXG4gICAgICAgIHRoaXMubGFzdFNlYXJjaE1vZGUgPSAyO1xyXG4gICAgICAgIHZhciBjdXN0SWRzID0gdGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycy5tYXAoeCA9PiB4LmtleSk7XHJcbiAgICAgICAgaWYgKGN1c3RJZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZ1NlcnZpY2UuU3RhcnRQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIHZhciBzdWIgPSBSeC5PYnNlcnZhYmxlLmZyb21Qcm9taXNlKHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLkFjdGlvblJlcXVpcmVkKGN1c3RJZHMsIDEwMCwgdGhpcy5fbXlzZXJ2aWNlY2FzZXMpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TZWFyY2hSZXN1bHQgPSByZXN1bHQuaXRlbXMubWFwKHkgPT4geSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1Jlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHN1Yi5hZGQoKCkgPT4gdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0b3BQcm9jZXNzaW5nKCkpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2ggPSBzdWI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5TZWFyY2hSZXN1bHQgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQWN0aXZlQ2FzZXNDbGlja2VkKCkge1xyXG4gICAgICAgIHRoaXMuaGludCA9IHRoaXMuYWN0aXZlY2FzZXNsYWJlbDtcclxuICAgICAgICB0aGlzLl9zZWFyY2hQaHJhc2UgPSAnJztcclxuICAgICAgICB0aGlzLmxhc3RTZWFyY2hNb2RlID0gNDtcclxuICAgICAgICB2YXIgY3VzdElkcyA9IHRoaXMuYXBwbGljYXRpb24uc2VsZWN0ZWRDdXN0b21lcnMubWFwKHggPT4geC5rZXkpO1xyXG4gICAgICAgIGlmIChjdXN0SWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICB2YXIgc3ViID0gUnguT2JzZXJ2YWJsZS5mcm9tUHJvbWlzZSh0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5BY3RpdmVDYXNlcyhjdXN0SWRzLCAxMDAsIHRoaXMuX215c2VydmljZWNhc2VzKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU2VhcmNoUmVzdWx0ID0gcmVzdWx0Lml0ZW1zLm1hcCh5ID0+IHkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tSZXN1bHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZXJ2aWNlVXRpbHMuSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBzdWIuYWRkKCgpID0+IHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoID0gc3ViO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VhcmNoUmVzdWx0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlWGxzeCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycyAmJiB0aGlzLmFwcGxpY2F0aW9uLnNlbGVjdGVkQ3VzdG9tZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGN1c3RzID0gdGhpcy5hcHBsaWNhdGlvbi5zZWxlY3RlZEN1c3RvbWVycy5tYXAodiA9PiB2LmtleSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLlN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxhc3RTZWFyY2hNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuc2VydmljZUNhc2VTZXJ2aWNlLkZpbHRlcmVkRXhwb3J0KHRoaXMuX3NlYXJjaFBocmFzZSwgY3VzdHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWN0aW9uUmVxdWlyZWRFeHBvcnQoY3VzdHMsIHRoaXMuX215c2VydmljZWNhc2VzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5Bd2FpdGluZ0ZlZWRiYWNrRXhwb3J0KGN1c3RzLCB0aGlzLl9teXNlcnZpY2VjYXNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWN0aXZlQ2FzZXNFeHBvcnQoY3VzdHMsIHRoaXMuX215c2VydmljZWNhc2VzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJJbnZhbGlkbW9kZVwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVzdWx0cyh0aGlzLl9zZWFyY2hQaHJhc2UsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2Uuc2F2ZUV4Y2VsRnJvbUpzb24odGhpcy5TZWFyY2hSZXN1bHQsIG51bGwpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFNlcnZpY2VVdGlscy5Jc1VuYXV0aG9yaXplZFJlc3BvbnNlKGVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24uc2V0U2VxVXJsKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignU2VhcmNoJywgJ0Vycm9yIHdoaWxlIHNlYXJjaGluZycsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3JEaWFsb2coJ2Vycm9yJywgJ0VSUk9SJywgJ1NFQVJDSF9FUlJPUicsIHsgZXJyb3JSZXN1bHQ6IGVycm9yLCB0cmFuc2xhdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3d0ZXh0bm9yZXN1bHRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5TdG9wUHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEZJUUFzc2lzdCAgfSBmcm9tIFwiLi9hcHBcIjtcclxuaW1wb3J0IHsgQ29uZmlnLCBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IFwiQGZpcWFzL25nY29tcG9uZW50cm91dGVyXCI7XHJcblxyXG5AQ29uZmlnKHsgbW9kdWxlOiBGSVFBc3Npc3QgfSlcclxuY2xhc3MgQ29uZmlndXJhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckbG9jYXRpb25Qcm92aWRlcicpICRsb2NhdGlvblByb3ZpZGVyOiBhbmd1bGFyLklMb2NhdGlvblByb3ZpZGVyLFxyXG4gICAgICAgIEBJbmplY3QoJyRodHRwUHJvdmlkZXInKSAkaHR0cFByb3ZpZGVyOiBhbmd1bGFyLklIdHRwUHJvdmlkZXIsXHJcblx0XHRASW5qZWN0KCdob3RrZXlzUHJvdmlkZXInKSBob3RrZXlzUHJvdmlkZXIsXHJcblx0XHRASW5qZWN0KCdhZ2NMaWJyYXJ5TG9hZGVyUHJvdmlkZXInKSBhZ2NMaWJyYXJ5TG9hZGVyUHJvdmlkZXIsXHJcblx0XHRASW5qZWN0KCdhZ2NHc3RhdGljTG9hZGVyUHJvdmlkZXInKSBhZ2NHc3RhdGljTG9hZGVyUHJvdmlkZXJcclxuICAgICkge1xyXG4gICAgICAgIGhvdGtleXNQcm92aWRlci51c2VOZ1JvdXRlID0gZmFsc2U7XHJcbiAgICAgICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpO1xyXG5cdFx0JGh0dHBQcm92aWRlci51c2VBcHBseUFzeW5jKHRydWUpO1xyXG5cdFx0YWdjTGlicmFyeUxvYWRlclByb3ZpZGVyLnNldExvYWRlcignZ3N0YXRpYycpO1xyXG5cdFx0YWdjR3N0YXRpY0xvYWRlclByb3ZpZGVyLnNldFZlcnNpb24oJzQxJyk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/ZXhwb3J0IHR5cGUgRmlxYXNzaXN0QXBpVVJMID0gc3RyaW5nO1xyXG5leHBvcnQgdHlwZSBBdXRoZW50aWNhdGlvbkFwaVVSTCA9IHN0cmluZztcclxuZXhwb3J0IHR5cGUgRmlxYXNzaXN0VmVyc2lvbiA9IHN0cmluZztcclxuZXhwb3J0IHR5cGUgU2VxVVJMID0gc3RyaW5nO1xyXG5leHBvcnQgY2xhc3MgQ29udmVyc2F0aW9uU2V0dGluZ3Mge1xyXG4gICAgUGVyaW9kaWNseUNoZWNrRm9yQ2hhbmdlczogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBQZXJpb2RzV2l0aE5vQ2hhbmdlczogbnVtYmVyID0gNjtcclxuICAgIFNob3J0UGVyaW9kSW5TZWNvbmRzOiBudW1iZXIgPSA1O1xyXG4gICAgTG9uZ1BlcmlvZEluU2Vjb25kczogbnVtYmVyID0gMzA7XHJcbn07XHJcbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRMaW1pdCA9IG51bWJlcjtcclxuXHJcbmV4cG9ydCB2YXIgTG9va3VwRGF0YToge1xyXG4gICAgICAgIFByaW9yaXR5OiBbXCJoaWdoXCIsIFwibWVkaXVtXCIsIFwibG93XCIsIFwidWx0cmFIaWdoXCJdLFxyXG4gICAgICAgIFN0YXR1czogW1wib3BlblwiLCBcImNsb3NlZFwiLCBcImluUHJvZ3Jlc3NcIiwgXCJyZXdvcmtcIiwgXCJ3YWl0aW5nRm9yVWF0XCIsIFwicmVhZHlGb3JVYXRcIiwgXCJmaW5pc2hlZFwiXSxcclxuICAgICAgICBDYXNlVHlwZTogW1wiYnVnXCIsIFwicmVxdWVzdFwiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgU2V2ZXJpdHk6IFtcImxldmVsMVwiLCBcImxldmVsMlwiLCBcImxldmVsM1wiLCBcImxldmVsNFwiXSxcclxuICAgICAgICBJbXBhY3Q6IFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0sXHJcbiAgICAgICAgRW52aXJvbm1lbnQ6IFtcImRldlwiLCBcInRlc3RcIiwgXCJ1YXRcIiwgXCJwcm9kXCJdXHJcbn1cclxuXHJcbiIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgSVBhcmVudCwgSUNoaWxkLCBJTWVkaWF0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9JUGFyZW50Q2hpbGRcIjtcclxuaW1wb3J0IHsgVG9nZ2xlc3dpdGNoIH0gZnJvbSBcIi4vdG9nZ2xlc3dpdGNoXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgSW5qZWN0LCBBdHRyaWJ1dGUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogJ2NoZWNrbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJjaGVja2xpc3QgbmctY2xhc3M6e3JlYWRvbmx5OiRjdHJsLnJlYWRPbmx5fVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nLWNsYXNzPVwie2hvdmVyZWQ6JGN0cmwuYWxsSG92ZXJlZH1cIiBjbGFzcz1cImNoZWNraXRlbWFsbFwiIG5nLXNob3c9XCIkY3RybC5zaG93QWxsT3B0aW9uXCIgbmctbW91c2Vkb3duPVwiJGN0cmwuaXRlbWFsbGNsaWNrKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRvZ2dsZXN3aXRjaCBpZ25vcmUta2V5cz1cInRydWVcIiByZWFkLW9ubHk9XCJ0cnVlXCIga2V5PVwiXCIgdGFiLWluZGV4PVwiLTFcIiBhY3RpdmU9XCIkY3RybC5hbGxjbGlja2VkXCIgYWN0aXZlY2hhbmdlZD1cIiRjdHJsLml0ZW1hbGxjaGFuZ2VkKHNvdXJjZSwgYWN0aXZlKVwiPjwvdG9nZ2xlc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJGN0cmwuYWxsVGV4dCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0aXRlbXNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmctY2xhc3M9XCJ7aG92ZXJlZDppdGVtLmhvdmVyZWR9XCIgY2xhc3M9XCJjaGVja2l0ZW1cIiBuZy1yZXBlYXQ9XCJpdGVtIGluICRjdHJsLl9pdGVtc1wiIG5nLW1vdXNlZG93bj1cIiRjdHJsLml0ZW1jbGljaygkZXZlbnQsIGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dG9nZ2xlc3dpdGNoIGlnbm9yZS1rZXlzPVwidHJ1ZVwiIHJlYWQtb25seT1cInRydWVcIiB0YWItaW5kZXg9XCItMVwiIGtleT1cIml0ZW0ua2V5XCIgcGFyZW50PVwiJGN0cmxcIiBtZWRpYXRvcj1cIml0ZW1cIiBhY3RpdmU9XCJpdGVtLmNoZWNrZWRcIj48L3RvZ2dsZXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBuZy1hdHRyLXRpdGxlPVwie3tpdGVtLnRleHR9fVwiPnt7aXRlbS50ZXh0fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgIDwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrbGlzdCBpbXBsZW1lbnRzIElQYXJlbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyRlbGVtZW50JykgcHJpdmF0ZSAkZWxlbWVudDogYW5ndWxhci5JUm9vdEVsZW1lbnRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBfdG9nZ2xlczogVG9nZ2xlc3dpdGNoW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgYWRkQ2hpbGQoY2hpbGQ6IElDaGlsZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl90b2dnbGVzLmZpbHRlcihvID0+IG8gPT0gY2hpbGQpLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICB0aGlzLl90b2dnbGVzLnB1c2goPFRvZ2dsZXN3aXRjaD5jaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUNoaWxkKGNoaWxkOiBJQ2hpbGQpIHtcclxuICAgICAgICB0aGlzLl90b2dnbGVzID0gdGhpcy5fdG9nZ2xlcy5maWx0ZXIoeCA9PiB4ICE9IDxUb2dnbGVzd2l0Y2g+Y2hpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb2N1c0NoaWxkKGNoaWxkOiBJQ2hpbGQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pdGVtcy5mb3JFYWNoKHggPT4geC5ob3ZlcmVkID0geC5jaGlsZCA9PT0gY2hpbGQpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBvc2l0aW9uT2ZGb2N1cyhvZmZzZXRUb3A6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHZhciBoYWxmd2F5ID0gKDxIVE1MRWxlbWVudD50aGlzLiRlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NoZWNrbGlzdGl0ZW1zJykuaXRlbSgwKSkuY2xpZW50SGVpZ2h0IC8gMjtcclxuICAgICAgICAoPEhUTUxFbGVtZW50PnRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2hlY2tsaXN0aXRlbXMnKS5pdGVtKDApKS5zY3JvbGxUb3AgPSBvZmZzZXRUb3AgLSBoYWxmd2F5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGlsZHJlbigpOiBJQ2hpbGRbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvZ2dsZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5faXRlbXMuZmlsdGVyKG8gPT4gby5jaGVja2VkKS5tYXAoaSA9PiB7IHJldHVybiB7IGtleTogaS5rZXksIHRleHQ6IGkudGV4dCB9OyB9KTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCh7IHNlbGVjdGVkOiByZXMgfSk7XHJcbiAgICAgICAgdGhpcy5hbGxUZXh0ID0gdGhpcy5hbGxUZXh0IHx8IFwiU0VMRUNUX0FMTF9DVVNUT01FUlNcIjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IGl0ZW1zKCk6IGNoZWNrbGlzdGl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogY2hlY2tsaXN0aXRlbVtdKSB7XHJcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goeCA9PiB4LmhvdmVyZWQgPSBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2hvd2FsbCA9IGZhbHNlO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgc2hvd0FsbE9wdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd2FsbDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd0FsbE9wdGlvbih2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zaG93YWxsID0gdmFsID09PSBcInRydWVcIiB8fCB2YWwgPT09IHRydWU7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsSG92ZXJlZDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsU3Vic2V0OiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxUZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbnNlbGVjdGlvbmNoYW5nZWQ6IChhcmdzOiB7IHNlbGVjdGVkOiB7IGtleTogYW55LCB0ZXh0OiBzdHJpbmcgfVtdIH0pID0+IHZvaWQ7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbml0ZW1zZWxlY3RlZDogKGFyZ3M6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9KSA9PiB2b2lkO1xyXG5cclxuICAgIHByaXZhdGUgb25TZWxlY3Rpb25DaGFuZ2VkKGFyZ3M6IHsgc2VsZWN0ZWQ6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10gfSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5vbnNlbGVjdGlvbmNoYW5nZWQoYXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaXRlbXM6IGNoZWNrbGlzdGl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgc3Vic2V0RmlsdGVyID0gaSA9PiAhdGhpcy5hbGxTdWJzZXQgfHwgdGhpcy5hbGxTdWJzZXQubGVuZ3RoID09IDAgfHwgdGhpcy5hbGxTdWJzZXQuc29tZShlID0+IGUgPT0gaS5rZXkpO1xyXG5cclxuICAgIHB1YmxpYyBpdGVtY2xpY2soJGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCwgaXRlbTogY2hlY2tsaXN0aXRlbSkge1xyXG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHRvZ2dsZSA9IHRoaXMuX3RvZ2dsZXMuZmlsdGVyKHQgPT4gdC5rZXkgPT0gaXRlbS5rZXkpLnNoaWZ0KCk7XHJcbiAgICAgICAgdG9nZ2xlLmFjdGl2ZSA9ICF0b2dnbGUuYWN0aXZlO1xyXG4gICAgICAgIHRvZ2dsZS5oYXNmb2N1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pdGVtdG9nZ2xlKGl0ZW0sIHRvZ2dsZS5hY3RpdmUpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQ2hhbmdlZCgpO1xyXG4gICAgICAgIHRoaXMub25pdGVtc2VsZWN0ZWQoeyBrZXk6IGl0ZW0ua2V5LCB0ZXh0OiBpdGVtLnRleHQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGl0ZW1hbGxjbGljayhldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuJGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcignLnRvZ2dsZXN3aXRjaCcpLmZvY3VzKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFsbGNsaWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlcy5mb3JFYWNoKHQgPT4gdC5hY3RpdmUgPSBmYWxzZSlcclxuICAgICAgICAgICAgdGhpcy5faXRlbXMuZm9yRWFjaCh0ID0+IHQuY2hlY2tlZCA9IGZhbHNlKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZXMuZm9yRWFjaCh0ID0+IHQuYWN0aXZlID0gdGhpcy5zdWJzZXRGaWx0ZXIodCkpO1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtcy5mb3JFYWNoKHQgPT4gdC5jaGVja2VkID0gdGhpcy5zdWJzZXRGaWx0ZXIodCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkNoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLm9uaXRlbXNlbGVjdGVkKHsga2V5OiBcImFsbHNlbGVjdGVkXCIsIHRleHQ6ICcnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgYWxsY2xpY2tlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9nZ2xlcy5sZW5ndGggPiAwICYmICF0aGlzLl90b2dnbGVzLmZpbHRlcih0aGlzLnN1YnNldEZpbHRlcikuc29tZSh4ID0+ICF4LmFjdGl2ZSkgJiYgIXRoaXMuX3RvZ2dsZXMuZmlsdGVyKGkgPT4gIXRoaXMuc3Vic2V0RmlsdGVyKGkpKS5zb21lKHggPT4geC5hY3RpdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaXRlbWFsbGNoYW5nZWQoc291cmNlOiBUb2dnbGVzd2l0Y2gsIHNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbFN1YnNldCAmJiB0aGlzLmFsbFN1YnNldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVzLmZvckVhY2goeCA9PiB4LmFjdGl2ZSA9IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zLmZvckVhY2goeCA9PiB4LmNoZWNrZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIH0gIGVsc2UgaWYgKCF0aGlzLl90b2dnbGVzLmZpbHRlcih0aGlzLnN1YnNldEZpbHRlcikuc29tZSh4ID0+ICF4LmFjdGl2ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZXMuZmlsdGVyKHRoaXMuc3Vic2V0RmlsdGVyKS5mb3JFYWNoKHggPT4geC5hY3RpdmUgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcy5maWx0ZXIodGhpcy5zdWJzZXRGaWx0ZXIpLmZvckVhY2goeCA9PiB4LmNoZWNrZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlcy5maWx0ZXIodGhpcy5zdWJzZXRGaWx0ZXIpLmZvckVhY2goeCA9PiB4LmFjdGl2ZSA9IHNlbGVjdGVkKTtcclxuICAgICAgICAgICAgdGhpcy5faXRlbXMuZmlsdGVyKHRoaXMuc3Vic2V0RmlsdGVyKS5mb3JFYWNoKHggPT4geC5jaGVja2VkID0gdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkNoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHB1YmxpYyBpdGVtdG9nZ2xlKHNvdXJjZTogY2hlY2tsaXN0aXRlbSwgYWN0aXZlOiBib29sZWFuKSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWQgPSBhY3RpdmU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25DaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGltYWdlUGljdHVyZShjaGVja2VkOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gY2hlY2tlZCA/IFwiY3NzL2ltYWdlcy9jaGVja2xpc3Rvbi5wbmdcIiA6IFwiY3NzL2ltYWdlcy9jaGVja2xpc3RvZmYucG5nXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbGRTZWw6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10gPSBudWxsO1xyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5tYWtlU2VsZWN0aW9uU2V0KCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5hcmVFcXVhbCh0aGlzLm9sZFNlbCwgY3VycmVudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkKHsgc2VsZWN0ZWQ6IHRoaXMubWFrZVNlbGVjdGlvblNldCgpIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbGRTZWwgPSBjdXJyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFrZVNlbGVjdGlvblNldCgpOiB7IGtleTogYW55LCB0ZXh0OiBzdHJpbmcgfVtdIHtcclxuICAgICAgICB2YXIgcmVzID0gdGhpcy5fdG9nZ2xlcy5maWx0ZXIobyA9PiBvLmFjdGl2ZSlcclxuICAgICAgICAgICAgLm1hcChpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGtleTogaS5rZXksIHRleHQ6IHRoaXMuZ2V0VGV4dChpLmtleSkgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRleHQoa2V5OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBzID0gdGhpcy5faXRlbXMuZmlsdGVyKHAgPT4gcC5rZXkgPT0ga2V5KTtcclxuICAgICAgICBpZiAocy5sZW5ndGggPiAwKSByZXR1cm4gc1swXS50ZXh0O1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFyZUVxdWFsKG9sZDogeyBrZXk6IGFueSwgdGV4dDogc3RyaW5nIH1bXSwgY3VycmVudDogeyBrZXk6IGFueSwgdGV4dDogc3RyaW5nIH1bXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChvbGQgPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAob2xkLmxlbmd0aCAhPSBjdXJyZW50Lmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gb2xkLmV2ZXJ5KHggPT4gY3VycmVudC5zb21lKHkgPT4geC5rZXkgPT0geS5rZXkpKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIGNoZWNrbGlzdGl0ZW0gaW1wbGVtZW50cyBJTWVkaWF0b3Ige1xyXG4gICAgcHVibGljIGNoZWNrZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMga2V5OiBhbnk7XHJcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nO1xyXG4gICAgcHVibGljIGhvdmVyZWQ/OiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBwYXJlbnQ6IElQYXJlbnQ7XHJcbiAgICBwdWJsaWMgY2hpbGQ6IElDaGlsZDtcclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IGNoZWNrbGlzdGl0ZW0gfSBmcm9tIFwiLi9jaGVja2xpc3RcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBJbmplY3QsIEF0dHJpYnV0ZSwgT3V0cHV0QXJncyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvVHJhbnNsYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7bG9nfSBmcm9tIFwidXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAnY2hlY2tsaXN0Y29tYm8nLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0Y29tYm8gbmctY2xhc3M6e2lzZm9jdXM6JGN0cmwuaXNmb2N1cywgcmVhZG9ubHk6JGN0cmwucmVhZE9ubHksICdoYXMtdmFsdWUnOiRjdHJsLmNoZWNrZWQubGVuZ3RoIH1cIiBpZD1cInt7J2NoZWNrbGlzdGNvbWJvXycrJGlkfX1cIiBjbGljay1vdXRzaWRlPVwiJGN0cmwuY2xvc2UoKVwiIG5nLWtleWRvd249XCIkY3RybC5vbktleSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgdGFiaW5kZXg9XCJ7eyRjdHJsLmlzRWRpdGFibGU/MDotMX19XCIgY2xhc3M9XCJzZWxlY3RvciB7eyRjdHJsLm9wZW5lZCA/ICdzZWxlY3RvcGVuJzonc2VsZWN0Y2xvc2UnfX1cIiBuZy1jbGljaz1cIiRjdHJsLm9wZW4oJGV2ZW50KVwiIG5nLWZvY3VzPVwiJGN0cmwub25Gb2N1cygkZXZlbnQpXCIgbmctYmx1cj1cIiRjdHJsLm9uQmx1cigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49XCIyXCIgY2xhc3M9XCJpY29uXCIgdG9vbHRpcC1hcHBlbmQtdG8tYm9keT1cInRydWVcIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCIgdG9vbHRpcC1wb3B1cC1kZWxheT1cIjUwMFwiIHVpYi10b29sdGlwPVwie3skY3RybC5pY29uVG9vbHRpcH19XCIgbmctc2hvdz1cIiRjdHJsLmlzRWRpdGFibGUgJiYgJGN0cmwuaGFuZGxlTG9jYXRpb24gPT0gJ2xlZnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3skY3RybC5vcGVuZWQgPyAnaWNvbi1kcm9wVVAnOidpY29uLWRyb3Bkb3duJ319XCI+PHNwYW4gY2xhc3M9XCJwYXRoMVwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInBhdGgyXCI+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNlbGVjdFRleHRcIiBwbGFjZWhvbGRlcj1cInt7JGN0cmwuaGludH19XCIgdGl0bGU9XCJ7eyRjdHJsLnNlbGVjdFRleHQubGVuZ3RoID4gMCA/ICRjdHJsLnNlbGVjdFRleHQgOiAnJ319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7JGN0cmwuc2VsZWN0VGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tY2xlYXJGaWVsZFwiIG5nLXNob3c9XCIkY3RybC5zaG93Q2xlYXJcIiBuZy1jbGljaz1cIiRjdHJsLkNsZWFyRmllbGQoJGV2ZW50KVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPVwiMlwiIGNsYXNzPVwiaWNvblwiIG5nLXNob3c9XCIkY3RybC5pc0VkaXRhYmxlICYmICRjdHJsLmhhbmRsZUxvY2F0aW9uICE9ICdsZWZ0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7JGN0cmwub3BlbmVkID8gJ2ljb24tZHJvcFVQJzonaWNvbi1kcm9wZG93bid9fVwiPjxzcGFuIGNsYXNzPVwicGF0aDFcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJwYXRoMlwiPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgPGNoZWNrbGlzdCByZWFkLW9ubHk9XCIkY3RybC5yZWFkT25seVwiIGFsbC1ob3ZlcmVkPVwiJGN0cmwuX2FsbGhvdmVyZWRcIiBjbGFzcz1cImNoZWNrbGlzdGZyYW1lXCIgbmctaWY9XCIkY3RybC5vcGVuZWRcIiBpdGVtcz1cIiRjdHJsLml0ZW1zXCIgYWxsLXRleHQ9XCIkY3RybC5hbGxJdGVtVGV4dFwiIGFsbC1zdWJzZXQ9XCIkY3RybC5hbGxTdWJzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNob3ctYWxsLW9wdGlvbj1cInt7JGN0cmwuc2hvd2FsbG9wdGlvbn19XCIgb25pdGVtc2VsZWN0ZWQ9XCIkY3RybC5vbml0ZW1zZWxlY3RlZChrZXksIHRleHQpXCIgb25zZWxlY3Rpb25jaGFuZ2VkPVwiJGN0cmwub25pdGVtc2NoYW5nZWQoc2VsZWN0ZWQpXCI+PC9jaGVja2xpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrbGlzdENvbWJvIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgcHJpdmF0ZSAkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290U2NvcGUnKSBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG9sZFNlbDogeyBrZXk6IGFueSwgdGV4dDogc3RyaW5nIH1bXSA9IG51bGw7XHJcbiAgICBwcml2YXRlIGhvdmVyZWRJdGVtOiBjaGVja2xpc3RpdGVtO1xyXG4gICAgcHJpdmF0ZSBfYWxsaG92ZXJlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpc2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvblRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IGl0ZW1zKCk6IGNoZWNrbGlzdGl0ZW1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogY2hlY2tsaXN0aXRlbVtdKSB7XHJcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZSB8fCBbXTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uVGV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgY2hlY2tlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcyA/IHRoaXMuaXRlbXMuZmlsdGVyKGkgPT4gaS5jaGVja2VkKS5tYXAoaSA9PiBpLmtleSkgOiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaG93Q2xlYXI7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGdldCBzaG93Q2xlYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dDbGVhcjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd0NsZWFyKHZhbDogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Nob3dDbGVhciA9IHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IFwidHJ1ZVwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBDbGVhckZpZWxkKCRldmVudDogQmFzZUpRdWVyeUV2ZW50T2JqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGkgPT4gaS5jaGVja2VkID0gZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25UZXh0KCk7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjaGVja2VkKHZhbDogeyBrZXk6IGFueSB9W10pIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpID0+IGkuY2hlY2tlZCA9IHZhbCAmJiB2YWwuc29tZSh2ID0+IHYua2V5ID09IGkua2V5KSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uVGV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGhhbmRsZUxvY2F0aW9uOiBcImxlZnRcIiB8IFwicmlnaHRcIjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxTdWJzZXQ6IHN0cmluZ1tdO1xyXG4gICAgQElucHV0KCkgcHVibGljIGFsbEl0ZW1UZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGFsbFNlbGVjdGVkVGV4dDogc3RyaW5nID0gXCJBTExfU0VMRUNURURcIjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzdWJzZXRTZWxlY3RlZFRleHQ6IHN0cmluZyA9IFwiU1VCU0VUX1NFTEVDVEVEXCI7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3RlZFRleHQ6IHN0cmluZyA9IFwiTVVMVElQTEVfU0VMRUNURURcIjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBub25lU2VsZWN0ZWRUZXh0OiBzdHJpbmcgPSBcIk5PTkVfU0VMRUNURURcIjtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd2FsbG9wdGlvbjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX2FsbG93Tm9uZVNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IGFsbG93Tm9uZVNlbGVjdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hbGxvd05vbmVTZWxlY3RlZDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgYWxsb3dOb25lU2VsZWN0ZWQodmFsdWU6IHN0cmluZyB8IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuX2FsbG93Tm9uZVNlbGVjdGVkID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IFwidHJ1ZVwiO1xyXG4gICAgfVxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbmxpdmVzZWxlY3Rpb25jaGFuZ2VkOiBPdXRwdXRBcmdzPHsgc2VsZWN0ZWQ6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10gfT47XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uc2VsZWN0aW9uY2hhbmdlZDogT3V0cHV0QXJnczx7IHNlbGVjdGVkOiB7IGtleTogYW55LCB0ZXh0OiBzdHJpbmcgfVtdIH0+O1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RUZXh0OiBzdHJpbmcgPSAnJztcclxuICAgIHB1YmxpYyBvcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF9pdGVtczogY2hlY2tsaXN0aXRlbVtdID0gW107XHJcbiAgICBwcml2YXRlIHN1YnNldEZpbHRlciA9IGkgPT4gIXRoaXMuYWxsU3Vic2V0IHx8IHRoaXMuYWxsU3Vic2V0Lmxlbmd0aCA9PSAwIHx8IHRoaXMuYWxsU3Vic2V0LnNvbWUoZSA9PiBlID09IGkua2V5KTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IGljb25Ub29sdGlwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5lZCA/XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShcIkNPTExBUFNFX1RPT0xUSVBcIikgOlxyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoXCJFWFBBTkRfVE9PTFRJUFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlbihldmVudCkge1xyXG4gICAgICAgIC8vZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZCA9ICF0aGlzLm9wZW5lZDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaG92ZXJlZEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbS5ob3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbS5jaGlsZC5oYXNmb2N1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbml0ZW1zY2hhbmdlZChzZWxlY3RlZDogeyBrZXk6IGFueSwgdGV4dDogc3RyaW5nIH1bXSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25UZXh0KCk7XHJcbiAgICAgICAgICAgIHRoaXMub25saXZlc2VsZWN0aW9uY2hhbmdlZCh7IHNlbGVjdGVkOiBzZWxlY3RlZCB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIHZhbHVlU3VtYml0OiBPdXRwdXRBcmdzPHsgc2VsZWN0ZWQ6IHsga2V5OiBhbnksIHRleHQ6IHN0cmluZyB9W10gfT47XHJcbiAgICBwdWJsaWMgc3VibWl0VmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLnZhbHVlU3VtYml0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVTdW1iaXQoeyBzZWxlY3RlZDogdGhpcy5faXRlbXMuZmlsdGVyKHggPT4geC5jaGVja2VkKS5tYXAoaXRlbSA9PiB7IHJldHVybiB7IGtleTogaXRlbS5rZXksIHRleHQ6IGl0ZW0udGV4dCB9OyB9KSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uaXRlbXNlbGVjdGVkKGtleSwgdGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgLy8gc2V0IGhvdmVyZWQtaXRlbVxyXG4gICAgICAgICAgICBpZiAodGhpcy5ob3ZlcmVkSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLmhvdmVyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uY2hpbGQuaGFzZm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtID0gdGhpcy5pdGVtcy5maWx0ZXIoeCA9PiB4LmtleSA9PT0ga2V5KVswXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaG92ZXJlZEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uaG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLmNoaWxkLmhhc2ZvY3VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvblRleHQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zLmxlbmd0aCA+IDEgJiYgdGhpcy5faXRlbXMuZmlsdGVyKG8gPT4gIW8uY2hlY2tlZCkubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFRleHQgPSB0aGlzLmFsbFNlbGVjdGVkVGV4dDtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLmFsbFN1YnNldCAmJiB0aGlzLmFsbFN1YnNldC5sZW5ndGggPiAwICYmIHRoaXMuX2l0ZW1zLmxlbmd0aCA+IDAgJiYgIXRoaXMuX2l0ZW1zLmZpbHRlcih0aGlzLnN1YnNldEZpbHRlcikuc29tZShvID0+ICFvLmNoZWNrZWQpICYmICF0aGlzLl9pdGVtcy5maWx0ZXIoaSA9PiAhdGhpcy5zdWJzZXRGaWx0ZXIoaSkpLnNvbWUobyA9PiBvLmNoZWNrZWQpKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFRleHQgPSB0aGlzLnN1YnNldFNlbGVjdGVkVGV4dDtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9pdGVtcy5maWx0ZXIobyA9PiBvLmNoZWNrZWQpLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VGV4dCA9IHRoaXMubXVsdGlwbGVTZWxlY3RlZFRleHQ7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5faXRlbXMuZmlsdGVyKG8gPT4gby5jaGVja2VkKS5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VGV4dCA9IHRoaXMuX2l0ZW1zLmZpbHRlcihvID0+IG8uY2hlY2tlZClbMF0udGV4dDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VGV4dCA9IHRoaXMubm9uZVNlbGVjdGVkVGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkICYmICF0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd05vbmVTZWxlY3RlZCAmJiAhdGhpcy5faXRlbXMuc29tZShvID0+IG8uY2hlY2tlZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zLmZvckVhY2goaSA9PiBpLmNoZWNrZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uVGV4dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJyb2FkY2FzdFNlbGVjdGlvbigpIHtcclxuICAgICAgICB2YXIgc2VsID0gdGhpcy5faXRlbXMuZmlsdGVyKG8gPT4gby5jaGVja2VkKS5tYXAoaSA9PiB7IHJldHVybiB7IGtleTogaS5rZXksIHRleHQ6IGkudGV4dCB9OyB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuYXJlRXF1YWwodGhpcy5vbGRTZWwsIHNlbCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25UZXh0KCk7XHJcbiAgICAgICAgICAgIHRoaXMub25zZWxlY3Rpb25jaGFuZ2VkKHsgc2VsZWN0ZWQ6IHNlbCB9KTtcclxuICAgICAgICAgICAgdGhpcy5vbGRTZWwgPSBzZWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXJlRXF1YWwob2xkOiB7IGtleTogYW55LCB0ZXh0OiBzdHJpbmcgfVtdLCBjdXJyZW50OiB7IGtleTogYW55LCB0ZXh0OiBzdHJpbmcgfVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKG9sZCA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKG9sZC5sZW5ndGggIT0gY3VycmVudC5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gb2xkLmV2ZXJ5KHggPT4gY3VycmVudC5maWx0ZXIoeSA9PiB4LmtleSA9PSB5LmtleSAmJiB4LnRleHQgPT0geS50ZXh0KS5sZW5ndGggPT0gMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpc0VkaXRhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5yZWFkT25seSAmJiB0aGlzLl9pdGVtcy5sZW5ndGggPiAxO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Gb2N1cyhldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNmb2N1cyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkJsdXIoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmlzZm9jdXMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGFsbGNsaWNrZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJiAhdGhpcy5pdGVtcy5maWx0ZXIodGhpcy5zdWJzZXRGaWx0ZXIpLnNvbWUoeCA9PiAheC5jaGVja2VkKSAmJiAhdGhpcy5pdGVtcy5maWx0ZXIoaSA9PiAhdGhpcy5zdWJzZXRGaWx0ZXIoaSkpLnNvbWUoeCA9PiB4LmNoZWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25LZXkoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoICgkZXZlbnQua2V5Q29kZSkge1xyXG5cclxuICAgICAgICAgICAgY2FzZSA5OlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCcuY2hlY2tsaXN0Y29tYm8gLnNlbGVjdG9yJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAodGhpcy5ob3ZlcmVkSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuaG92ZXJlZEl0ZW0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICh0aGlzLl9hbGxob3ZlcmVkKVxyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goeCA9PiB4LmNoZWNrZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIC8vdGhpcy5icm9hZGNhc3RTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdWJtaXRWYWx1ZSkgdGhpcy5zdWJtaXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDI3OlxyXG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCcuY2hlY2tsaXN0Y29tYm8gLnNlbGVjdG9yJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCAmJiB0aGlzLmlzRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvdmVyZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uY2hlY2tlZCA9ICF0aGlzLmhvdmVyZWRJdGVtLmNoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsY2xpY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKHggPT4geC5jaGVja2VkID0gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKHggPT4geC5jaGVja2VkID0gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIodGhpcy5zdWJzZXRGaWx0ZXIpLmZvckVhY2goeCA9PiB4LmNoZWNrZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5vcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAzODpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZSgtMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgNDA6XHJcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcGVuZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4obnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FsbGhvdmVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubW92ZSgxKSwwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZSgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAzNzpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvdmVyZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goeCA9PiB4LmNoZWNrZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25UZXh0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMzk6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ob3ZlcmVkSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5pdGVtcy5mb3JFYWNoKHggPT4geC5jaGVja2VkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCh4ID0+IHguY2hlY2tlZCA9IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIodGhpcy5zdWJzZXRGaWx0ZXIpLmZvckVhY2goeCA9PiB4LmNoZWNrZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvblRleHQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdWNDaGFyID0gJGV2ZW50LmtleUNvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVjQ2hhciA+PSA2NSAmJiB1Y0NoYXIgPD0gOTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuaXRlbXMuZmlsdGVyKHggPT4geC50ZXh0ICYmIHgudGV4dC5sZW5ndGggPiAwICYmIHgudGV4dC5jaGFyQ29kZUF0KDApID09IHVjQ2hhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID49IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxob3ZlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ob3ZlcmVkSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbS5ob3ZlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbS5jaGlsZC5oYXNmb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbSA9IHNlbGVjdGlvblswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uaG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLmNoaWxkLmhhc2ZvY3VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9WaWV3QXN5bmMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb3ZlKGRpcmVjdGlvbjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhvdmVyZWRJdGVtICYmICF0aGlzLl9hbGxob3ZlcmVkKVxyXG4gICAgICAgICAgICB0aGlzLl9hbGxob3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdpbmRleCA9IE1hdGgubWF4KC0xLCBNYXRoLm1pbih0aGlzLl9pdGVtcy5sZW5ndGggLSAxLCB0aGlzLl9pdGVtcy5pbmRleE9mKHRoaXMuaG92ZXJlZEl0ZW0pICsgZGlyZWN0aW9uKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhvdmVyZWRJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uaG92ZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbS5jaGlsZC5oYXNmb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXdpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hbGxob3ZlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtID0gdGhpcy5faXRlbXNbbmV3aW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbS5ob3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uY2hpbGQuaGFzZm9jdXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWxsaG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjcm9sbFRvVmlld0FzeW5jKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCh4ID0+IHguaG92ZXJlZCA9IGZhbHNlKTtcclxuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9hbGxob3ZlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMuZXZlcnkoeCA9PiB4LmNoZWNrZWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FsbGhvdmVyZWQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0gPSB0aGlzLml0ZW1zLmZpbHRlcih4ID0+IHguY2hlY2tlZClbMF07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhvdmVyZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLmhvdmVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9WaWV3QXN5bmMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNjcm9sbFRvVmlld0FzeW5jKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcclxuICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2hlY2tsaXN0JykuaXRlbSgwKTtcclxuICAgICAgICAgICAgdmFyIGUgPSA8YW55PihwYXJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaG92ZXJlZCcpLml0ZW0oMCkpO1xyXG4gICAgICAgICAgICBpZiAoZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50LnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIGUub2Zmc2V0VG9wIC0gKChwYXJlbnQuY2xpZW50SGVpZ2h0IC0gZS5jbGllbnRIZWlnaHQpIC8gMikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgS2V5Q29kZXMsIEtleWJvYXJkRXZlbnRDb2RlIH0gZnJvbSBcIkBmaXFhcy91dGlsc1wiXHJcbmltcG9ydCB7IElDb21wb25lbnQsIENvbXBvbmVudCwgQXR0cmlidXRlLCBJbnB1dCwgT3V0cHV0LCBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogJ2RhdGF0YWJsZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2aWV3cy9kYXRhdGFibGUuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGUgaW1wbGVtZW50cyBJQ29tcG9uZW50IHtcclxuICAgIHByaXZhdGUgX2NvbHVtbnM6IFRhYmxlQ29sdW1uW107XHJcbiAgICBwcml2YXRlIF9kYXRhOiBUYWJsZVJvd1tdO1xyXG4gICAgcHJpdmF0ZSBob3ZlcmVkOiBUYWJsZVJvdztcclxuICAgIHByaXZhdGUgaGVhZGVySG92ZXJlZDogVGFibGVDb2x1bW47XHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9jb250ZW50c2Nyb2xsZXI6IEVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHNjZScpIHByaXZhdGUgJHNjZTogbmcuSVNDRVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBhbmd1bGFyLklUaW1lb3V0U2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuVXBkYXRlQ29sdW1uRGlzcGxheSgpO1xyXG4gICAgICAgIHRoaXMuX2NvbnRlbnRzY3JvbGxlciA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZGF0YVRhYmxlQ29udGVudCcpLml0ZW0oMCk7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljICRvbkRlc3Ryb3koKSB7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIG5vcmVzdWx0VGV4dDtcclxuXHJcbiAgICBwcml2YXRlIF9zb3J0Y29sdW1uOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNvcnRjb2x1bW4oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc29ydGNvbHVtbjtcclxuICAgIH1cclxuICAgIHNldCBzb3J0Y29sdW1uKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc29ydGNvbHVtbiA9IHZhbDtcclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCAmJiB2YWwgIT0gdGhpcy5fc29ydGNvbHVtbikge1xyXG4gICAgICAgICAgICB0aGlzLlVwZGF0ZUNvbHVtbkRpc3BsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc29ydGRlc2NlbmRpbmc6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNvcnRkZXNjZW5kaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0ZGVzY2VuZGluZztcclxuICAgIH1cclxuICAgIHNldCBzb3J0ZGVzY2VuZGluZyh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zb3J0ZGVzY2VuZGluZyA9IHZhbDtcclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCAmJiB2YWwgIT0gdGhpcy5fc29ydGRlc2NlbmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5VcGRhdGVDb2x1bW5EaXNwbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzdG9yZWlkOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10geyByZXR1cm4gdGhpcy5fY29sdW1uczsgfVxyXG4gICAgc2V0IGNvbHVtbnMoY29sczogVGFibGVDb2x1bW5bXSkge1xyXG4gICAgICAgIHRoaXMuX2NvbHVtbnMgPSBjb2xzO1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIGNvbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5VcGRhdGVDb2x1bW5EaXNwbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGF0YSgpOiBUYWJsZVJvd1tdIHsgcmV0dXJuIHRoaXMuX2RhdGEgfVxyXG4gICAgc2V0IGRhdGEoZGF0YTogVGFibGVSb3dbXSkge1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5vbmRhdGFyZXNpemUoeyBjb3VudDogZGF0YS5sZW5ndGggfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWxsYWN0aW9uVGV4dDogc3RyaW5nO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBmaWxsYWN0aW9uOiAoYXJnczoge30pID0+IHZvaWQ7XHJcbiAgICBwdWJsaWMgZmlsbGFjdGlvblBhc3MoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsbGFjdGlvbiAmJiB0aGlzLmZpbGxhY3Rpb25UZXh0KSB0aGlzLmZpbGxhY3Rpb24oe30pO1xyXG4gICAgfTtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25jb2x1bW5jbGlja2VkOiAoYXJnczogeyBzb3VyY2U6IFRhYmxlQ29sdW1uLCBjb2x1bW46IG51bWJlciwgZGVzY2VuZGluZzogYm9vbGVhbiB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbnJvd2NsaWNrZWQ6IChhcmdzOiB7IHNvdXJjZTogVGFibGVSb3csIHJvd2lkOiBhbnksIGN0cmxrZXk6IGJvb2xlYW4gfSkgPT4gdm9pZDtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25yb3dkb3VibGVjbGlja2VkOiAoYXJnczogeyBzb3VyY2U6IFRhYmxlUm93LCByb3dpZDogYW55IH0pID0+IHZvaWQ7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uY2VsbGNsaWNrZWQ6IChhcmdzOiB7IHNvdXJjZTogVGFibGVDZWxsLCByb3dpZDogYW55LCBjb2x1bW46IG51bWJlciB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbnNvcnRkYXRhOiAoYXJnczogeyBzb3VyY2U6IFRhYmxlQ29sdW1uLCBjb2x1bW46IG51bWJlciwgZGVzY2VuZGluZzogYm9vbGVhbiB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbnJvd3NkZWxldGU6IChhcmdzOiB7IHNvdXJjZXM6IFRhYmxlUm93W10gfSkgPT4gdm9pZDtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25kYXRhcmVzaXplOiAoYXJnczogeyBjb3VudDogbnVtYmVyIH0pID0+IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogVGFibGVSb3csIGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAwKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZmlsdGVyKHIgPT4gciAhPSByb3cpLmZvckVhY2goeCA9PiB4LnNlbGVjdGVkID0gZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFyb3cuc2VsZWN0ZWQgJiYgZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IHRoaXMuZGF0YS5maWx0ZXIociA9PiByLnNlbGVjdGVkKS5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpID0gdGhpcy5kYXRhLmluZGV4T2YoZmlyc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaSA9IHRoaXMuZGF0YS5pbmRleE9mKHJvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHIsIGkpID0+IHIuc2VsZWN0ZWQgPSBmaSA8IGNpID8gaSA+PSBmaSAmJiBpIDw9IGNpIDogaSA+PSBjaSAmJiBpIDw9IGZpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvdy5zZWxlY3RlZCA9ICFyb3cuc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vbnJvd2NsaWNrZWQoeyBzb3VyY2U6IHJvdywgcm93aWQ6IHJvdy5pZCwgY3RybGtleTogZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNvcnRpbmdkb25lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93dGV4dG5vcmVzdWx0czogYm9vbGVhbjtcclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxTb3J0KCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Sb3dEb3VibGVDbGljayhldmVudDogRXZlbnQsIHJvdzogVGFibGVSb3csIGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgcm93LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBhbmd1bGFyLmVsZW1lbnQoPGFueT5ldmVudC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcclxuICAgICAgICB0aGlzLm9ucm93ZG91YmxlY2xpY2tlZCh7IHNvdXJjZTogcm93LCByb3dpZDogcm93LmlkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNlbGxDbGljayhldmVudDogTW91c2VFdmVudCwgY2VsbDogVGFibGVDZWxsLCByb3c6IFRhYmxlUm93LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5vbmNlbGxjbGlja2VkKHsgc291cmNlOiBjZWxsLCByb3dpZDogcm93LmlkLCBjb2x1bW46IGluZGV4IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb1NvcnQoY29sdW1uOiBUYWJsZUNvbHVtbiwgaW5kZXg6IG51bWJlciwgZGVzY2VuZGluZzogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChjb2x1bW4uaXNTb3J0YWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCh4ID0+IHsgeC5pc1NvcnRlZEFzY2VuZGluZyA9IHguaXNTb3J0ZWREZXNjZW5kaW5nID0gZmFsc2U7IH0pO1xyXG4gICAgICAgICAgICBpZiAoZGVzY2VuZGluZylcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5pc1NvcnRlZERlc2NlbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uaXNTb3J0ZWRBc2NlbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmhvdmVyZWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm9uc29ydGRhdGEoeyBzb3VyY2U6IGNvbHVtbiwgY29sdW1uOiBpbmRleCwgZGVzY2VuZGluZzogZGVzY2VuZGluZyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBVcGRhdGVDb2x1bW5EaXNwbGF5KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW5zICYmIHRoaXMuX3NvcnRjb2x1bW4gJiYgdGhpcy5fc29ydGRlc2NlbmRpbmcgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+IHgua2V5ID09IHRoaXMuX3NvcnRjb2x1bW4pLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmlzU29ydGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVySG92ZXJlZCA9IGNvbHVtbjtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5pc2hvdmVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goeCA9PiB7IHguaXNTb3J0ZWRBc2NlbmRpbmcgPSB4LmlzU29ydGVkRGVzY2VuZGluZyA9IGZhbHNlOyB9KTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0ZGVzY2VuZGluZylcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaXNTb3J0ZWREZXNjZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaXNTb3J0ZWRBc2NlbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNvbHVtbkNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uOiBUYWJsZUNvbHVtbiwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVySG92ZXJlZClcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXJIb3ZlcmVkLmlzaG92ZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmhlYWRlckhvdmVyZWQgIT0gY29sdW1uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKHggPT4geC5pc1NvcnRlZEFzY2VuZGluZyA9IHguaXNTb3J0ZWREZXNjZW5kaW5nID0gZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlckhvdmVyZWQgPSBjb2x1bW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGVhZGVySG92ZXJlZC5pc2hvdmVyZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29sdW1uQWN0aW9uKGNvbHVtbiwgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbHVtbkFjdGlvbihjb2x1bW46IFRhYmxlQ29sdW1uLCBpbmRleCwgZGVzY2VuZGluZzogYm9vbGVhbiA9IG51bGwpIHtcclxuICAgICAgICBpZiAoY29sdW1uLmlzU29ydGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc29ydGRlc2NlbmRpbmcgPSAoZGVzY2VuZGluZyAhPT0gbnVsbCkgPyBkZXNjZW5kaW5nIDogdGhpcy5jb2x1bW5zLnNvbWUoeCA9PiB4LmlzU29ydGVkQXNjZW5kaW5nKTtcclxuICAgICAgICAgICAgdGhpcy5kb1NvcnQoY29sdW1uLCBpbmRleCwgdGhpcy5fc29ydGRlc2NlbmRpbmcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25jb2x1bW5jbGlja2VkKHsgc291cmNlOiBjb2x1bW4sIGNvbHVtbjogaW5kZXgsIGRlc2NlbmRpbmc6IGRlc2NlbmRpbmcgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udGVudEZvY3VzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIG9uRm9jdXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhIHx8IHRoaXMuX2RhdGEubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmhvdmVyZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkID0gdGhpcy5fZGF0YVswXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb250ZW50Rm9jdXNlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ob3ZlcmVkLmlzaG92ZXJlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZW50Rm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmhvdmVyZWQgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkLmlzaG92ZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGVhZGVyRm9jdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgb25IZWFkZXJGb2N1cygpIHtcclxuICAgICAgICB0aGlzLmhlYWRlckZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25IZWFkZXJCbHVyKCkge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25IZWFkZXJLZXkoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCRldmVudC5rZXlDb2RlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoJGV2ZW50LmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUubGVmdEFycm93OlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyTW92ZSgtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5yaWdodEFycm93OlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyTW92ZSgxKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUudXBBcnJvdzpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlclNvcnQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5kb3duQXJyb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJTb3J0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmVudGVyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5zcGFjZTpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlclNlbGVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoJGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubGVmdEFycm93OlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyTW92ZSgtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy5yaWdodEFycm93OlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyTW92ZSgxKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLnVwQXJyb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJTb3J0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZG93bkFycm93OlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyU29ydChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy5lbnRlcjpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuc3BhY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJTZWxlY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbktleSgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAoJGV2ZW50LmtleUNvZGUgPT09IDApIHtcclxuICAgICAgICAgICAgc3dpdGNoICgkZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS51cEFycm93OlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZSgtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5kb3duQXJyb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUuZW50ZXI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLnNwYWNlOlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCRldmVudC5jdHJsS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmRlbGV0ZTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5hOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQuY3RybEtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2gociA9PiByLnNlbGVjdGVkID09IHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKCRldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLnVwQXJyb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlKC0xKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmRvd25BcnJvdzpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmUoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy5lbnRlcjpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuc3BhY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJGV2ZW50LmN0cmxLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZGVsZXRlOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmE6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChyID0+IHIuc2VsZWN0ZWQgPT0gdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGVhZGVyTW92ZShkaXJlY3Rpb246IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb2x1bW5zICYmIHRoaXMuaGVhZGVySG92ZXJlZCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbHVtbnMubWFwKHggPT4geC50ZXh0KS5pbmRleE9mKHRoaXMuaGVhZGVySG92ZXJlZC50ZXh0KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld2luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5fY29sdW1ucy5sZW5ndGggLSAxLCBpbmRleCArIGRpcmVjdGlvbikpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGVhZGVySG92ZXJlZCAhPSBudWxsKSB0aGlzLmhlYWRlckhvdmVyZWQuaXNob3ZlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckhvdmVyZWQgPSB0aGlzLl9jb2x1bW5zW25ld2luZGV4XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVySG92ZXJlZC5pc2hvdmVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBtb3ZlKGRpcmVjdGlvbjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgbmV3aW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLl9kYXRhLmxlbmd0aCAtIDEsIHRoaXMuX2RhdGEuaW5kZXhPZih0aGlzLmhvdmVyZWQpICsgZGlyZWN0aW9uKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhvdmVyZWQgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZC5pc2hvdmVyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkID0gdGhpcy5fZGF0YVtuZXdpbmRleF07XHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZC5pc2hvdmVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvVmlld0FzeW5jKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGVhZGVyU29ydChkZXNjZW5kaW5nOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVySG92ZXJlZCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbHVtbnMubWFwKHggPT4geC50ZXh0KS5pbmRleE9mKHRoaXMuaGVhZGVySG92ZXJlZC50ZXh0KTtcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb24odGhpcy5oZWFkZXJIb3ZlcmVkLCBpbmRleCwgZGVzY2VuZGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGVhZGVyU2VsZWN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhlYWRlckhvdmVyZWQpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jb2x1bW5zLm1hcCh4ID0+IHgudGV4dCkuaW5kZXhPZih0aGlzLmhlYWRlckhvdmVyZWQudGV4dCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uQWN0aW9uKHRoaXMuaGVhZGVySG92ZXJlZCwgaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlbGVjdCh3aXRoQ3RybDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLmhvdmVyZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkLnNlbGVjdGVkID0gIXRoaXMuaG92ZXJlZC5zZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy5vbnJvd2NsaWNrZWQoeyBzb3VyY2U6IHRoaXMuaG92ZXJlZCwgcm93aWQ6IHRoaXMuaG92ZXJlZC5pZCwgY3RybGtleTogd2l0aEN0cmwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRlbGV0ZSBrZXkgYXBwbGllcyB0byBhbGwgc2VsZWN0ZWQgcm93cy5cclxuICAgIHByaXZhdGUgZGVsZXRlKCkge1xyXG4gICAgICAgIHRoaXMub25yb3dzZGVsZXRlKHsgc291cmNlczogdGhpcy5fZGF0YS5maWx0ZXIoeCA9PiB4LnNlbGVjdGVkKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNjcm9sbFRvVmlld0FzeW5jKCkge1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLl9jb250ZW50c2Nyb2xsZXI7XHJcbiAgICAgICAgYXdhaXQgdGhpcy4kdGltZW91dCgpXHJcbiAgICAgICAgdmFyIHM6IGFueSA9IHBhcmVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdob3ZlcmVkJykuaXRlbSgwKTtcclxuICAgICAgICBpZiAocylcclxuICAgICAgICAgICAgcGFyZW50LnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHMub2Zmc2V0VG9wIC0gKChwYXJlbnQuY2xpZW50SGVpZ2h0IC0gcy5jbGllbnRIZWlnaHQpIC8gMikpO1xyXG5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBrZXk6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgdGV4dDogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBpc1NvcnRhYmxlOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgcHVibGljIHRyYW5zbGF0ZTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgIHB1YmxpYyBpc1NvcnRlZEFzY2VuZGluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgIHB1YmxpYyBpc1NvcnRlZERlc2NlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaXNob3ZlcmVkOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVSb3cge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkOiBhbnksXHJcbiAgICAgICAgcHVibGljIGNlbGxzOiBUYWJsZUNlbGxbXVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNob3ZlcmVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNob3ZlcmVkOiBib29sZWFuO1xyXG4gICAgcHVibGljIGxpbms/OiBhbnlbXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgY29udGVudDogYW55LFxyXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICAgICBwdWJsaWMgc3R5bGUgPSAoKSA9PiBcIlwiXHJcbiAgICApIHtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCBcIkBmaXFhcy91dGlsc1wiXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgSW5qZWN0LCBBdHRyaWJ1dGUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgS2V5Q29kZXMsIEtleWJvYXJkRXZlbnRDb2RlIH0gZnJvbSBcIkBmaXFhcy91dGlsc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAnZGF0ZXRpbWVib3gnLFxyXG4gICAgdGVtcGxhdGU6IGA8dGFibGUgY2xhc3M9XCJkYXRldGltZWJveCB7eyRjdHJsLmNoaWxkQ2xhc3Nlc319IG5nLWNsYXNzOnsnaGFzLXZhbHVlJzokY3RybC5oYXNWYWx1ZX1cIiBpZD1cInt7J2RhdGV0aW1lXycrJGlkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHVpYi10b29sdGlwPVwie3skY3RybC50b29sdGlwVGV4dH19XCIgdG9vbHRpcC1pcy1vcGVuPVwiJGN0cmwudG9vbHRpcFNob3dcIiB0b29sdGlwLXBsYWNlbWVudD1cImJvdHRvbVwiIHRvb2x0aXAtY2xhc3M9XCJjdXN0b21Ub29sdGlwVEJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJlbnRyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdGFiaW5kZXg9XCIwXCIgdHlwZT1cInRleHRcIiBtaW4tZGF0ZT1cIiRjdHJsLm1pbkRhdGVcIiBtYXgtZGF0ZT1cIiRjdHJsLm1heERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB1aWItZGF0ZXBpY2tlci1wb3B1cD1cInt7JGN0cmwuZm9ybWF0fX1cIiBpcy1vcGVuPVwiJGN0cmwub3BlbmVkXCIgZGF0ZXBpY2tlci1vcHRpb25zPVwiJGN0cmwuZGF0ZXBpY2tlcm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdy1idXR0b24tYmFyPVwiZmFsc2VcIiBkYXRlcGlja2VyLWFwcGVuZC10by1ib2R5PVwiZmFsc2VcIiBwb3B1cC1wbGFjZW1lbnQ9XCJ7eyRjdHJsLnBvcHVwUGxhY2VtZW50fX1cIiBjbG9zZS10ZXh0PVwie3snQ2xvc2UnIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmctZm9jdXM9XCIkY3RybC5vbkZvY3VzKCRldmVudClcIiBuZy1ibHVyPVwiJGN0cmwub25CbHVyKCRldmVudClcIiBuZy1rZXlkb3duPVwiJGN0cmwub25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmctcmVhZG9ubHk9XCIkY3RybC5yZWFkT25seVwiIHZhbGlkYXRlLW1pbi1kYXRlPVwiJGN0cmwubWluRGF0ZVwiIHZhbGlkYXRlLW1heC1kYXRlPVwiJGN0cmwubWF4RGF0ZVwiIGRhdGVwaWNrZXItYXBwZW5kLXRvLWJvZHk9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nLW1vZGVsPVwiJGN0cmwuaW50ZXJuYWxEYXRlXCIgbmctbWF4bGVuZ3RoPVwiJGN0cmwuZm9ybWF0Lmxlbmd0aFwiIGRhdGVwaWNrZXItcG9wdXAtdGVtcGxhdGUtdXJsPVwidmlld3MvZGF0ZXBpY2tlci5wb3B1cC5odG1sXCIgZGF0ZXBpY2tlci10ZW1wbGF0ZS11cmw9XCJ2aWV3cy9kYXRlcGlja2VyLmh0bWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hbmRhdG9yeS1kb3QgbmctY2xhc3M6eydoYXMtdmFsdWUnOiRjdHJsLmhhc1ZhbHVlfVwiIG5nLWlmPVwiJGN0cmwubWFuZGF0b3J5XCIgdWliLXRvb2x0aXA9XCJ7eydGSUVMRF9SRVFVSVJFRF9UT09MVElQJyB8IHRyYW5zbGF0ZX19XCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tY2xlYXJGaWVsZCBuZy1jbGFzczp7J2hhcy12YWx1ZSc6JGN0cmwuX2RhdGV9XCIgbmctc2hvdz1cIiRjdHJsLnNob3dDbGVhclwiIG5nLWNsaWNrPVwiJGN0cmwuQ2xlYXJGaWVsZCgkZXZlbnQpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaWNvbiBuZy1jbGFzczp7J3JlYWRvbmx5JzokY3RybC5yZWFkT25seX1cIj48c3BhbiBuZy1jbGljaz1cIiRjdHJsLm9wZW4oJGV2ZW50KVwiIGNsYXNzPVwiaWNvbi1jYWxlbmRhclwiPjxzcGFuIGNsYXNzPVwicGF0aDFcIj48c3BhbiBjbGFzcz1cInBhdGgyXCI+PHNwYW4gY2xhc3M9XCJwYXRoM1wiPjxzcGFuIGNsYXNzPVwicGF0aDRcIj48c3BhbiBjbGFzcz1cInBhdGg1XCI+PHNwYW4gY2xhc3M9XCJwYXRoNlwiPjxzcGFuIGNsYXNzPVwicGF0aDdcIj48c3BhbiBjbGFzcz1cInBhdGg4XCI+PHNwYW4gY2xhc3M9XCJwYXRoOVwiPjxzcGFuIGNsYXNzPVwicGF0aDEwXCI+PHNwYW4gY2xhc3M9XCJwYXRoMTFcIj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90YWJsZT5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlVGltZUJveCB7XHJcbiAgICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2RhdGU6IERhdGU7XHJcbiAgICBwcml2YXRlIGZvcm1hdDogc3RyaW5nID0gXCJkZC1NTS15eXl5XCI7XHJcbiAgICBwcml2YXRlIGZvcm1hdHM6IHN0cmluZ1tdID0gWydkZC1NTS15eXl5JywgJ3l5eXkvTU0vZGQnLCAnZGQuTU0ueXl5eScsICdzaG9ydERhdGUnXTtcclxuICAgIHByaXZhdGUgYWx0SW5wdXRGb3JtYXRzOiBzdHJpbmdbXSA9IFsnTSEvZCEveXl5eSddO1xyXG4gICAgcHJpdmF0ZSBpc0ZvY3VzOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSB3YXNGb2N1c2VkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGRhdGVwaWNrZXJvcHRpb25zO1xyXG4gICAgcHJpdmF0ZSB0b29sdGlwU2hvdzogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF5c09mV2Vla0Rpc2FibGVkTWVzc2FnZTtcclxuICAgIHByaXZhdGUgZ2V0IHRvb2x0aXBUZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXBTaG93ID8gdGhpcy5kYXlzT2ZXZWVrRGlzYWJsZWRNZXNzYWdlIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wb3B1cFBsYWNlbWVudDogc3RyaW5nID0gXCJib3R0b21cIjtcclxuICAgIEBBdHRyaWJ1dGUoKVxyXG4gICAgcHVibGljIGdldCBwb3B1cFBsYWNlbWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBQbGFjZW1lbnQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHBvcHVwUGxhY2VtZW50KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cFBsYWNlbWVudCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckcm9vdFNjb3BlJykgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoXCIkc2NvcGVcIikgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgIEBJbmplY3QoJ3VpYkRhdGVQYXJzZXInKSBwcml2YXRlIGRhdGVQYXJzZXI6IGFueSxcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBoYXNWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZSAhPT0gbnVsbCAmJiB0aGlzLl9kYXRlICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBzaG93RXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuZGF0b3J5ICYmICgoIXRoaXMuaXNGb2N1cyAmJiB0aGlzLndhc0ZvY3VzZWQgJiYgIXRoaXMuaGFzVmFsdWUpIHx8ICghdGhpcy5pc0ZvY3VzICYmIHRoaXMuaXNlcnJvcikpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NoaWxkQ2xhc3NlcztcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IGNoaWxkQ2xhc3NlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDbGFzc2VzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBjaGlsZENsYXNzZXModmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9jaGlsZENsYXNzZXMgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbWFuZGF0b3J5O1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgbWFuZGF0b3J5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYW5kYXRvcnk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IG1hbmRhdG9yeSh2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tYW5kYXRvcnkgPSB2YWwgPT09IHRydWUgfHwgdmFsID09PSBcInRydWVcIjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3Nob3dDbGVhcjtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IHNob3dDbGVhcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0NsZWFyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzaG93Q2xlYXIodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd0NsZWFyID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIENsZWFyRmllbGQoJGV2ZW50OiBCYXNlSlF1ZXJ5RXZlbnRPYmplY3QpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXQgZGF0ZVN0cmluZygpOiBJU09EYXRlVGltZVN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZS50b0lTT0RhdGVUaW1lU3RyaW5nKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXQgZGF0ZVN0cmluZyh2YWw6IElTT0RhdGVUaW1lU3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kYXRlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBkID0gdGhpcy5kYXRlUGFyc2VyLnBhcnNlKHZhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZSA9IGQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvL25vdCBhIHZhbGlkIGRhdGVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGhpbnQ6IGFueSA9IG51bGw7XHJcblxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRhdGVwaWNrZXJvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBmb3JtYXRZZWFyOiAneXl5eScsXHJcbiAgICAgICAgICAgIHN0YXJ0aW5nRGF5OiAxLFxyXG4gICAgICAgICAgICBzaG93V2Vla3M6IGZhbHNlLFxyXG4gICAgICAgICAgICBtaW5EYXRlOiB0aGlzLm1pbkRhdGUsXHJcbiAgICAgICAgICAgIG1heERhdGU6IHRoaXMubWF4RGF0ZSxcclxuICAgICAgICAgICAgcGxhY2VtZW50OiB0aGlzLnBvcHVwUGxhY2VtZW50LFxyXG4gICAgICAgICAgICBkYXRlRGlzYWJsZWQ6IChkYXRlKSA9PiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSxcclxuICAgICAgICAgICAgZGF0ZXBpY2tlck1vZGU6IFwiZGF5XCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2RheXNPZldlZWtEaXNhYmxlZDogbnVtYmVyW107XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkYXlzT2ZXZWVrRGlzYWJsZWQoKTogbnVtYmVyW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGRheXNPZldlZWtEaXNhYmxlZCh2YWx1ZTogbnVtYmVyW10pIHtcclxuICAgICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RheXNPZldlZWtEaXNhYmxlZCA9IFtdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICB0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZGlzYWJsZWREYXRlKGRhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YS5tb2RlICE9PSAnZGF5JyB8fCB0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQuc29tZSh2ID0+IHYgPT09IGRhdGEuZGF0ZS5nZXREYXkoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogRGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IG1pbkRhdGUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICB0aGlzLl9taW5EYXRlID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlcm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRlcGlja2Vyb3B0aW9ucy5taW5EYXRlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBtYXhEYXRlKHZhbHVlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlcm9wdGlvbnMubWF4RGF0YSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX21heERhdGU6IERhdGU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgZGF0ZSgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5pbnRlcm5hbERhdGUgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IGlzVmFsaWQoKSB7XHJcbiAgICAgICAgdmFyIHZhbCA9IHRoaXMuaW50ZXJuYWxEYXRlO1xyXG4gICAgICAgIGlmICh2YWwgIT0gbnVsbCAmJiB0aGlzLm1pbkRhdGUgJiYgdGhpcy5taW5EYXRlLmdldFRpbWUoKSA+IHZhbC5nZXRUaW1lKCkgJiYgKCF0aGlzLnJlbWVtYmVySW5pdGlhbFZhbHVlIHx8ICF0aGlzLmluaXRpYWxWYWx1ZSB8fCB2YWwuZ2V0VGltZSgpICE9IHRoaXMuaW5pdGlhbFZhbHVlLmdldFRpbWUoKSkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodmFsICE9IG51bGwgJiYgdGhpcy5tYXhEYXRlICYmIHRoaXMubWF4RGF0ZS5nZXRUaW1lKCkgPCB2YWwuZ2V0VGltZSgpICYmICghdGhpcy5yZW1lbWJlckluaXRpYWxWYWx1ZSB8fCAhdGhpcy5pbml0aWFsVmFsdWUgfHwgdmFsLmdldFRpbWUoKSAhPSB0aGlzLmluaXRpYWxWYWx1ZS5nZXRUaW1lKCkpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBkYXRlKHZhbDogRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuX2RhdGUgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgaW50ZXJuYWxEYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0IGludGVybmFsRGF0ZSh2YWw6IERhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQgJiYgdGhpcy5yZW1lbWJlckluaXRpYWxWYWx1ZSlcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSB2YWwgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHZhbCAmJiB0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQuaW5kZXhPZih2YWwuZ2V0RGF5KCkpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcFNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB0aGlzLnRvb2x0aXBTaG93ID0gZmFsc2UsIDQwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLl9kYXlzT2ZXZWVrRGlzYWJsZWQuc29tZSh2ID0+IHYgPT09IHZhbC5nZXREYXkoKSkpIHtcclxuICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5hZGREYXlzKDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgb2xkZGF0ZSA9IHRoaXMuaW50ZXJuYWxEYXRlO1xyXG4gICAgICAgIHRoaXMuX2RhdGUgPSB2YWw7XHJcbiAgICAgICAgdmFyIG5ld2RhdGUgPSB0aGlzLmRhdGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5pc1ZhbGlkICYmIChcclxuICAgICAgICAgICAgKCFuZXdkYXRlICYmIG9sZGRhdGUpIHx8XHJcbiAgICAgICAgICAgIChuZXdkYXRlICYmICFvbGRkYXRlKSB8fFxyXG4gICAgICAgICAgICAob2xkZGF0ZSAmJiBuZXdkYXRlICYmIG9sZGRhdGUuZ2V0VGltZSgpICE9IG5ld2RhdGUuZ2V0VGltZSgpKVxyXG4gICAgICAgICkpXHJcbiAgICAgICAgICAgIHRoaXMub25kYXRlY2hhbmdlZCh7IGRhdGU6IG5ld2RhdGUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbnB1dFZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGV2YWx1YXRlSW5wdXQodmFsKSB7XHJcbiAgICAgICAgaWYgKCF2YWwgJiYgdmFsICE9PSBudWxsIHx8IHRoaXMucmVhZE9ubHkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAodmFsID09PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLmludGVybmFsRGF0ZSA9IHZhbDtcclxuICAgICAgICB2YXIgbm93ID0gRGF0ZS50b2RheSgpO1xyXG4gICAgICAgIHZhciBkOiBhbnlbXSA9IHZhbC5zcGxpdChcIi1cIik7XHJcbiAgICAgICAgZFsxXSA9IGRbMV0gfHwgKG5vdy5nZXRNb250aCgpICsgMSk7XHJcbiAgICAgICAgZFsyXSA9ICFkWzJdID8gbm93LmdldEZ1bGxZZWFyKCkgOiBkWzJdLmxlbmd0aCA9PSAxID8gXCIyMDBcIiArIGRbMl0gOiBkWzJdLmxlbmd0aCA9PSAyID8gXCIyMFwiICsgZFsyXSA6IGRbMl07XHJcbiAgICAgICAgdmFyIGRhdGU6IERhdGUgPSB0aGlzLmRhdGVQYXJzZXIucGFyc2UoZC5qb2luKFwiLVwiKSwgXCJkIS1NIS15eXl5XCIsIG5vdyk7XHJcbiAgICAgICAgaWYgKGRhdGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbERhdGUgfHwgdGhpcy5pbnRlcm5hbERhdGUuZ2V0VGltZSgpICE9IGRhdGUuZ2V0VGltZSgpKVxyXG4gICAgICAgICAgICB0aGlzLmludGVybmFsRGF0ZSA9IGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGlzZXJyb3I6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVtZW1iZXJJbml0aWFsVmFsdWU6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGluaXRpYWxWYWx1ZTogRGF0ZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uZGF0ZWNoYW5nZWQ6IChhcmdzOiB7IGRhdGU6IERhdGUgfSkgPT4gdm9pZDtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgYm94b3BlbjogKGFyZ3M6IHt9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBib3hjbG9zZTogKGFyZ3M6IHt9KSA9PiB2b2lkO1xyXG5cclxuICAgIHByaXZhdGUgX29wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcGVuZWQ7IH1cclxuICAgIHB1YmxpYyBzZXQgb3BlbmVkKHZhbDogYm9vbGVhbikgeyB0aGlzLl9vcGVuZWQgPSB2YWw7IHZhbCA/IHRoaXMuYm94b3Blbih7fSkgOiB0aGlzLmJveGNsb3NlKHt9KTsgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuKGV2ZW50KSB7XHJcbiAgICAgICAgLy9ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkID0gIXRoaXMub3BlbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZvY3VzKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy53YXNGb2N1c2VkID0gdGhpcy5pc0ZvY3VzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CbHVyKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc0ZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ldmFsdWF0ZUlucHV0KGV2ZW50LnRhcmdldCA/IGV2ZW50LnRhcmdldC52YWx1ZSA6IFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2RheSgpIHtcclxuICAgICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxEYXRlID0gdG9kYXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpc0VkaXRhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5yZWFkT25seTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDApIHtcclxuICAgICAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmJhY2tzcGFjZTpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUubGVmdEFycm93OlxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5yaWdodEFycm93OlxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5kZWxldGU6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm4wOiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDA6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm4xOiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDE6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm4yOiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm4zOiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm40OiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm41OiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDU6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm42OiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDY6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm43OiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDc6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm44OiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDg6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm45OiBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLm51bXBhZDk6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmRhc2g6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmZvcndhcmRTbGFzaDpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUuc3VidHJhY3Q6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmVuZDpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUuaG9tZTpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmE6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLnY6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLng6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUudGFiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRm9jdXMgJiYgdGhpcy5vcGVuZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5lbnRlcjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlSW5wdXQoZXZlbnQudGFyZ2V0ID8gZXZlbnQudGFyZ2V0Wyd2YWx1ZSddIDogXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5zcGFjZTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRlSW5wdXQoZXZlbnQudGFyZ2V0ID8gZXZlbnQudGFyZ2V0Wyd2YWx1ZSddIDogXCJcIik7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuYmFja3NwYWNlOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy5sZWZ0QXJyb3c6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLnJpZ2h0QXJyb3c6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmRlbGV0ZTpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjA6IGNhc2UgS2V5Q29kZXMubnVtcGFkMDpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjE6IGNhc2UgS2V5Q29kZXMubnVtcGFkMTpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjI6IGNhc2UgS2V5Q29kZXMubnVtcGFkMjpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjM6IGNhc2UgS2V5Q29kZXMubnVtcGFkMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjQ6IGNhc2UgS2V5Q29kZXMubnVtcGFkNDpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjU6IGNhc2UgS2V5Q29kZXMubnVtcGFkNTpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjY6IGNhc2UgS2V5Q29kZXMubnVtcGFkNjpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjc6IGNhc2UgS2V5Q29kZXMubnVtcGFkNzpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjg6IGNhc2UgS2V5Q29kZXMubnVtcGFkODpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMubjk6IGNhc2UgS2V5Q29kZXMubnVtcGFkOTpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZGFzaDpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZm9yd2FyZFNsYXNoOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy5zdWJ0cmFjdDpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZW5kOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy5ob21lOlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuYTpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuYzpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMudjpcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMueDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy50YWI6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGb2N1cyAmJiB0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmVudGVyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVJbnB1dChldmVudC50YXJnZXQgPyBldmVudC50YXJnZXRbJ3ZhbHVlJ10gOiBcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLnNwYWNlOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVJbnB1dChldmVudC50YXJnZXQgPyBldmVudC50YXJnZXRbJ3ZhbHVlJ10gOiBcIlwiKTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcGVuZWQgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBJbmplY3QsIEF0dHJpYnV0ZSwgT3V0cHV0QXJncyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBLZXlDb2RlcywgS2V5Ym9hcmRFdmVudENvZGUgfSBmcm9tIFwiQGZpcWFzL3V0aWxzXCJcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBJRGlzcG9zYWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2dlbmVyYWxcIjtcclxuaW1wb3J0ICogYXMgUnggZnJvbSBcInJ4anMvUnhcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9sb2dTZXJ2aWNlXCI7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bkVudHJ5PFQ+IHtcclxuICAgIGtleTogVDtcclxuICAgIHRleHQ6IHN0cmluZztcclxufVxyXG5cclxuY2xhc3MgRHJvcGRvd25JdGVtPFQ+IGltcGxlbWVudHMgRHJvcGRvd25FbnRyeTxUPiB7XHJcbiAgICBrZXk6IFQ7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIGhvdmVyZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogJ2Ryb3Bkb3duYm94JyxcclxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImRyb3Bkb3duYm94IHt7JGN0cmwuY2hpbGRDbGFzc2VzfX0gbmctY2xhc3M6e211bHRpc2VsZWN0OiRjdHJsLm11bHRpc2VsZWN0LCAnaGFzLXZhbHVlJzogJGN0cmwuaGFzVmFsdWUsIGVycm9yOiAkY3RybC5zaG93RXJyb3IsIHJlYWRvbmx5OiRjdHJsLnJlYWRPbmx5fVwiIGlkPVwie3snZHJvcGRvd25fJyskaWR9fVwiIGNsaWNrLW91dHNpZGU9XCIkY3RybC5jbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBuZy1rZXlkb3duPVwiJGN0cmwub25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nLWNsYXNzPVwiJGN0cmwuY2hpbGRDbGFzc2VzXCJcclxuICAgICAgICAgICAgICAgICAgICBuZy1rZXl1cD1cIiRjdHJsLm9uS2V5VXAoJGV2ZW50KVwiID5cclxuICAgICAgICAgICAgICAgIDx0YWJsZVxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCIgdG9vbHRpcC1hcHBlbmQtdG8tYm9keT1cInRydWVcIiB0b29sdGlwLXBsYWNlbWVudD1cImJvdHRvbVwiIHRvb2x0aXAtZW5hYmxlPVwiISRjdHJsLm9wZW5lZFwiIHVpYi10b29sdGlwPVwie3skY3RybC50b29sdGl0bGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwic2VsZWN0b3Ige3skY3RybC5vcGVuZWQgPyAnc2VsZWN0b3Blbic6J3NlbGVjdGNsb3NlJ319XCIgbmctY2xpY2s9XCIkY3RybC5vcGVuKCRldmVudClcIiBuZy1mb2N1cz1cIiRjdHJsLm9uRm9jdXMoJGV2ZW50KVwiIG5nLWJsdXI9XCIkY3RybC5vbkJsdXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNlbGVjdFRleHQgbmctY2xhc3M6eydoYXMtY2xlYXInOiRjdHJsLnNob3dDbGVhcn1cIiBwbGFjZWhvbGRlcj1cInt7JGN0cmwuaGludH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7JGN0cmwuc2VsZWN0VGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tY2xlYXJGaWVsZFwiIG5nLXNob3c9XCIkY3RybC5zaG93Q2xlYXJcIiBuZy1jbGljaz1cIiRjdHJsLkNsZWFyRmllbGQoJGV2ZW50KVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYW5kYXRvcnktZG90XCIgbmctaWY9XCIkY3RybC5tYW5kYXRvcnlcIiB1aWItdG9vbHRpcD1cInt7J0ZJRUxEX1JFUVVJUkVEX1RPT0xUSVAnIHwgdHJhbnNsYXRlfX1cIiB0b29sdGlwLXBsYWNlbWVudD1cImJvdHRvbVwiIHRvb2x0aXAtY2xhc3M9XCJjdXN0b21Ub29sdGlwVEJcIiB0b29sdGlwLWFwcGVuZC10by1ib2R5PVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPVwiMlwiIGNsYXNzPVwiaWNvblwiIG5nLXNob3c9XCIkY3RybC5pc0VkaXRhYmxlXCI+PHNwYW4gY2xhc3M9XCJ7eyRjdHJsLm9wZW5lZCA/ICdpY29uLWRyb3BVUCc6J2ljb24tZHJvcGRvd24nfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYXRoMVwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInBhdGgyXCI+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXJcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGxpc3RcIiBuZy1zaG93PVwiJGN0cmwub3BlbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BsaXN0aXRlbVwiIG5nLWNsYXNzPVwiW3tzZWxlY3RlZDppdGVtLnNlbGVjdGVkfSx7aG92ZXJlZDppdGVtLmhvdmVyZWR9XVwiIG5nLXJlcGVhdD1cIml0ZW0gaW4gJGN0cmwuX2l0ZW1zXCIgbmctbW91c2Vkb3duPVwiJGN0cmwuaXRlbWNsaWNrKCRldmVudCwgaXRlbS5rZXkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+YFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQm94PFQ+IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgcHJpdmF0ZSAkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRyb290U2NvcGUnKSBwcml2YXRlICRyb290U2NvcGU6IGFuZ3VsYXIuSVJvb3RTY29wZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHNjb3BlJykgcHJpdmF0ZSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfaXRlbXM6IERyb3Bkb3duSXRlbTxUPltdO1xyXG4gICAgcHJpdmF0ZSBob3ZlcmVkSXRlbTogRHJvcGRvd25JdGVtPFQ+ID0gbnVsbDtcclxuICAgIHByaXZhdGUgX3ByZXZzZWxlY3RlZDogYW55O1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IFRbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfcGFyZW50OiBFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBkaXNwb3NhYmxlczogSURpc3Bvc2FibGVbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSB3YXNGb2N1c2VkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhc0ZvY3VzID0gZmFsc2U7XHJcblxyXG4gICAgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IGQoKSB9IGNhdGNoIChlKSB7IHRoaXMubG9nU2VydmljZS53YXJuaW5nKCdEcm9wRG93bkJveCcsICdFcnJvciBkaXNwb3NpbmcnLCBlKTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoaW50OiBhbnkgPSBudWxsO1xyXG5cclxuICAgIHByaXZhdGUgX21hbmRhdG9yeTtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IG1hbmRhdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWFuZGF0b3J5O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBtYW5kYXRvcnkodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbWFuZGF0b3J5ID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2hpbGRDbGFzc2VzO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgY2hpbGRDbGFzc2VzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZENsYXNzZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGNoaWxkQ2xhc3Nlcyh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2NoaWxkQ2xhc3NlcyA9IHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaG93Q2xlYXI7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGdldCBzaG93Q2xlYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dDbGVhcjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgc2hvd0NsZWFyKHZhbDogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Nob3dDbGVhciA9IHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IFwidHJ1ZVwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfdG9vbHRpdGxlO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgdG9vbHRpdGxlKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5vcGVuZWQpID8gXCJcIiA6IHRoaXMuX3Rvb2x0aXRsZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdG9vbHRpdGxlKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdG9vbHRpdGxlID0gdmFsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXQgaGFzVmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkICYmIHRoaXMuX3NlbGVjdGVkLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBzaG93RXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuZGF0b3J5ICYmICgoIXRoaXMuaGFzRm9jdXMgJiYgdGhpcy53YXNGb2N1c2VkICYmICF0aGlzLmhhc1ZhbHVlKSB8fCAoIXRoaXMuaGFzRm9jdXMgJiYgdGhpcy5pc2Vycm9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBDbGVhckZpZWxkKCRldmVudDogQmFzZUpRdWVyeUV2ZW50T2JqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xyXG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2VhcmNoOiBSeC5TdWJqZWN0PHN0cmluZz47XHJcblxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcblxyXG4gICAgICAgIHRoaXMub25TZWFyY2ggPSBuZXcgUnguU3ViamVjdCgpO1xyXG4gICAgICAgIHZhciBzZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIHZhciBvblNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMub25TZWFyY2hcclxuICAgICAgICAgICAgLm1hcCh4ID0+IHNlYXJjaFN0cmluZyArPSB4KVxyXG4gICAgICAgICAgICAuZGVib3VuY2VUaW1lKDQwMClcclxuICAgICAgICAgICAgLm1hcCh4ID0+IHsgc2VhcmNoU3RyaW5nID0gXCJcIjsgcmV0dXJuIHg7IH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNjb3BlLiRhcHBseSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2goKCkgPT4gb25TZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA+IDAgJiYgdGhpcy50cmFuc2xhdGUpXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBzdWIgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGVPYnNlcnZhYmxlKGl0ZW0udGV4dCkuc3Vic2NyaWJlKHQgPT4gaXRlbS50ZXh0ID0gdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2goKCkgPT4gc3ViLnVuc3Vic2NyaWJlKCkpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZUFzeW5jKHRoaXMubXVsdGlzZWxlY3R0ZXh0IHx8IFwiTVVMVElQTEVfSVRFTVNfU0VMRUNURURcIikudGhlbih0ID0+IHRoaXMubXVsdGlzZWxlY3R0ZXh0ID0gdCk7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlQXN5bmModGhpcy5ub25zZWxlY3R0ZXh0IHx8IFwiXCIpLnRoZW4odCA9PiB0aGlzLm5vbnNlbGVjdHRleHQgPSB0KTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IGl0ZW1zKCk6IERyb3Bkb3duRW50cnk8VD5bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogRHJvcGRvd25FbnRyeTxUPltdKSB7XHJcbiAgICAgICAgdGhpcy5faXRlbXMgPSBbXTtcclxuICAgICAgICB2YWx1ZS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHsga2V5OiB4LmtleSwgdGV4dDogeC50ZXh0LCBob3ZlcmVkOiBmYWxzZSwgc2VsZWN0ZWQ6IGZhbHNlIH07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy50cmFuc2xhdGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdWIgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGVPYnNlcnZhYmxlKGl0ZW0udGV4dCkuc3Vic2NyaWJlKHQgPT4gaXRlbS50ZXh0ID0gdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2goKCkgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zICE9PSB1bmRlZmluZWQgJiYgdGhpcy5faXRlbXMubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5faXRlbXMubWFwKHggPT4geC5rZXkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogVFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWx1ZTogVFtdKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNlcnJvcjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXNlbGVjdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXNlbGVjdHRleHQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBub25zZWxlY3R0ZXh0OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZm9jdXNpbnB1dDogYm9vbGVhbjtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgdHJhbnNsYXRlOiBib29sZWFuO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbnNlbGVjdGlvbmNoYW5nZWQ6IE91dHB1dEFyZ3M8eyBzZWxlY3RlZDogVFtdIH0+O1xyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIGdldCBzZWxlY3RUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5faXRlbXMuZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIHZhciBzZWwgPSB0aGlzLl9pdGVtcy5maWx0ZXIoeCA9PiB0aGlzLl9zZWxlY3RlZC5zb21lKHkgPT4geSA9PT0geC5rZXkpKTtcclxuICAgICAgICAgICAgc2VsLmZvckVhY2goeCA9PiB4LnNlbGVjdGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWwubGVuZ3RoID09IDAgPyB0aGlzLm5vbnNlbGVjdHRleHQgOiBzZWwubGVuZ3RoID09IDEgPyBzZWxbMF0udGV4dCA6IHRoaXMubXVsdGlzZWxlY3R0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBvcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgb3BlbihldmVudCkge1xyXG4gICAgICAgIC8vZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZCA9ICF0aGlzLm9wZW5lZDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVmlld0FzeW5jKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkZvY3VzKCRldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgICAgIHRoaXMuaGFzRm9jdXMgPSB0aGlzLndhc0ZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2l0ZW1zLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSBmYWxzZTsgeC5ob3ZlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWwgPSB0aGlzLl9pdGVtcy5maWx0ZXIoeCA9PiB0aGlzLl9zZWxlY3RlZC5zb21lKHkgPT4geSA9PT0geC5rZXkpKTtcclxuICAgICAgICAgICAgc2VsLmZvckVhY2goeCA9PiB4LnNlbGVjdGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChzZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbSA9IHNlbFswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uaG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9WaWV3QXN5bmMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyAkcG9zdExpbmsoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNpbnB1dCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLiR0aW1lb3V0KDI1KTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0ZpZWxkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9jdXNGaWVsZCgpIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XHJcbiAgICAgICAgdmFyIGZpZWxkID0gKDxhbnk+ZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzZWxlY3RvcicpLml0ZW0oMCkpO1xyXG4gICAgICAgIGlmIChmaWVsZCkge1xyXG4gICAgICAgICAgICBmaWVsZC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBvbkJsdXIoJGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgdmFsdWVTdWJtaXQ6IChhcmdzOiB7IHNlbGVjdGVkOiBUW10gfSkgPT4gdm9pZDtcclxuICAgIHByaXZhdGUgb25LZXlVcCgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAoJGV2ZW50LmtleUNvZGUgPT09IDApIHtcclxuICAgICAgICAgICAgc3dpdGNoICgkZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS51cEFycm93OlxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5kb3duQXJyb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmVudGVyOlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlU3VibWl0KHsgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmVzY2FwZTpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duYm94IC5zZWxlY3RvcicpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVjQ2hhciA9ICRldmVudC5rZXlDb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWNDaGFyID49IDY1ICYmIHVjQ2hhciA8PSA5MCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZSh1Y0NoYXIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKCRldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLnVwQXJyb3c6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmRvd25BcnJvdzpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZW50ZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVTdWJtaXQoeyBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZXNjYXBlOlxyXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd25ib3ggLnNlbGVjdG9yJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWNDaGFyID0gJGV2ZW50LmtleUNvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1Y0NoYXIgPj0gNjUgJiYgdWNDaGFyIDw9IDkwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2gubmV4dChTdHJpbmcuZnJvbUNoYXJDb2RlKHVjQ2hhcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbktleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCRldmVudC5rZXlDb2RlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoJGV2ZW50LmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRFdmVudENvZGUudXBBcnJvdzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZSgtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5kb3duQXJyb3c6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5tb3ZlKDEpLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZSgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLnNwYWNlOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLnRhYjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5jOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghJGV2ZW50LmN0cmxLZXkgJiYgISRldmVudC5tZXRhS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmVudGVyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5zcGFjZTpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoICgkZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlDb2Rlcy51cEFycm93OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlKC0xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmRvd25BcnJvdzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3BlbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4obnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm1vdmUoMSksIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuc3BhY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMudGFiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmM6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEkZXZlbnQuY3RybEtleSAmJiAhJGV2ZW50Lm1ldGFLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZW50ZXI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLnNwYWNlOlxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIFNlYXJjaChzZWFyY2hTdHJpbmc6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubG9nU2VydmljZS5kZWJ1ZygnRHJvcERvd25Cb3gnLCBgU2VhcmNoOiAke3NlYXJjaFN0cmluZ31gKTtcclxuICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5faXRlbXMuZmlsdGVyKHggPT4geC50ZXh0ICYmIHgudGV4dC50b1VwcGVyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoU3RyaW5nLnRvVXBwZXJDYXNlKCkpID09PSAwKTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uLmxlbmd0aCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhvdmVyZWRJdGVtICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLmhvdmVyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbSA9IHNlbGVjdGlvblswXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaG92ZXJlZEl0ZW0gIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uaG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1ZpZXdBc3luYygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbW92ZShkaXJlY3Rpb246IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJJbmRleCA9IHRoaXMuaG92ZXJlZEl0ZW0gPyB0aGlzLl9pdGVtcy5pbmRleE9mKHRoaXMuaG92ZXJlZEl0ZW0pIDogLTE7XHJcbiAgICAgICAgICAgIHZhciBuZXdpbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDEsIGN1ckluZGV4ICsgZGlyZWN0aW9uKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhvdmVyZWRJdGVtICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLmhvdmVyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbSA9IHRoaXMuX2l0ZW1zW25ld2luZGV4XTtcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbS5ob3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1ZpZXdBc3luYygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNlbGVjdChrZWVwT3BlbjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLmhvdmVyZWRJdGVtKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0ICYmIHRoaXMub3BlbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob3ZlcmVkSXRlbSAmJiB0aGlzLnNlbGVjdGVkLnNvbWUoeCA9PiB4ID09PSB0aGlzLmhvdmVyZWRJdGVtLmtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4ICE9IHRoaXMuaG92ZXJlZEl0ZW0ua2V5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHRoaXMuaG92ZXJlZEl0ZW0ua2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgha2VlcE9wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duYm94IC5zZWxlY3RvcicpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gW3RoaXMuaG92ZXJlZEl0ZW0ua2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICgha2VlcE9wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duYm94IC5zZWxlY3RvcicpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3Rpb24od2l0aEV2ZW50OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXJyYXlzRXF1YWwodGhpcy5fc2VsZWN0ZWQsIHRoaXMuX3ByZXZzZWxlY3RlZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZzZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkLmZpbHRlcih4ID0+IHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhFdmVudCAmJiAhdGhpcy5yZWFkT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25zZWxlY3Rpb25jaGFuZ2VkKHsgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFycmF5c0VxdWFsKGE6IGFueVtdLCBiOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChhICYmIGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KHggPT4gYi5zb21lKHkgPT4geSA9PT0geCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNFZGl0YWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMucmVhZE9ubHkgJiYgdGhpcy5faXRlbXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9pdGVtcy5sZW5ndGggPiAxO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpdGVtY2xpY2soZXZlbnQ6IEpRdWVyeUV2ZW50T2JqZWN0LCBrZXk6IGFueSkge1xyXG4gICAgICAgIGlmIChldmVudC5idXR0b24gPT09IDApIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhvdmVyZWRJdGVtICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRJdGVtLmhvdmVyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbSA9IHRoaXMuX2l0ZW1zLmZpbHRlcih4ID0+IHgua2V5ID09PSBrZXkpLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZEl0ZW0uaG92ZXJlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCAmJiBldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZC5zb21lKHggPT4geCA9PT0ga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLmZpbHRlcih4ID0+IHggIT0ga2V5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQuY29uY2F0KFtrZXldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZCA9IHRoaXMubXVsdGlzZWxlY3QgJiYgZXZlbnQuY3RybEtleTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGltYWdlUGljdHVyZShjaGVja2VkOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gY2hlY2tlZCA/IFwiY3NzL2ltYWdlcy9jaGVja2xpc3Rvbi5wbmdcIiA6IFwiY3NzL2ltYWdlcy9jaGVja2xpc3RvZmYucG5nXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzY3JvbGxUb1ZpZXdBc3luYygpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLiR0aW1lb3V0KCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb1ZpZXcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNjcm9sbFRvVmlldygpIHtcclxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcclxuICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZHJvcGxpc3QnKS5pdGVtKDApO1xyXG4gICAgICAgICAgICB2YXIgcyA9IDxhbnk+KHBhcmVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdob3ZlcmVkJykuaXRlbSgwKSk7XHJcbiAgICAgICAgICAgIGlmIChzKVxyXG4gICAgICAgICAgICAgICAgcGFyZW50LnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHMub2Zmc2V0VG9wIC0gKChwYXJlbnQuY2xpZW50SGVpZ2h0IC0gcy5jbGllbnRIZWlnaHQpIC8gMikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgSW5qZWN0LCBBdHRyaWJ1dGUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogJ2Ryb3Bkb3dubGlzdCcsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJkcm9wZG93bmxpc3QgbmctY2xhc3M6e3JlYWRvbmx5OiRjdHJsLnJlYWRPbmx5fVwiIGlkPVwie3snZHJvcGRvd25saXN0XycrJGlkfX1cIiBjbGljay1vdXRzaWRlPVwiJGN0cmwuY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInNlbGVjdG9yIHt7JGN0cmwub3BlbmVkID8gJ3NlbGVjdG9wZW4nOidzZWxlY3RjbG9zZSd9fVwiICBuZy1jbGljaz1cIiRjdHJsLm9wZW4oJGV2ZW50KVwiPjx0cj5cclxuXHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsaXN0VGl0bGVcIiA+e3skY3RybC5sYWJlbH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImljb25cIj48c3BhbiAgY2xhc3M9XCJ7eyRjdHJsLm9wZW5lZCA/ICdpY29uLWRyb3BVUCc6J2ljb24tZHJvcGRvd24nfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhdGgxXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwicGF0aDJcIj48L3NwYW4+PC9zcGFuPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPjwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGxpc3RcIiBuZy1pZj1cIiRjdHJsLm9wZW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wbGlzdGl0ZW1cIiBuZy1yZXBlYXQ9XCJpdGVtIGluICRjdHJsLl9pdGVtc1wiIG5nLWNsaWNrPVwiJGN0cmwuaXRlbWNsaWNrKCRldmVudCwgaXRlbS5rZXkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIG5nLWtleXByZXNzPVwiJWN0cmwub25rZXkoJGV2ZW50LGl0ZW0ua2V5KVwiIGNsYXNzPVwibGFiZWxcIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCIgdG9vbHRpcC1hcHBlbmQtdG8tYm9keT1cInRydWVcIiB0b29sdGlwLXBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHVpYi10b29sdGlwPVwie3tpdGVtLnRleHR9fVwiPnt7aXRlbS50ZXh0fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgIDwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duTGlzdCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckcm9vdFNjb3BlJykgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHJlYWRPbmx5OmJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9pdGVtczogRHJvcGRvd25saXN0aXRlbVtdO1xyXG5cclxuICAgIHB1YmxpYyAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGdldCBpdGVtcygpOiBEcm9wZG93bmxpc3RpdGVtW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgaXRlbXModmFsdWU6IERyb3Bkb3dubGlzdGl0ZW1bXSkge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBsYWJlbCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uaXRlbWNsaWNrZWQ6IChhcmdzOiB7IHNlbGVjdGVkOiBhbnkgfSkgPT4gdm9pZDtcclxuXHJcbiAgICBwdWJsaWMgb3BlbmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIG9wZW4oZXZlbnQpIHtcclxuICAgICAgICBpZighdGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgdGhpcy5vcGVuZWQgPSAhdGhpcy5vcGVuZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXRlbWNsaWNrKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCwga2V5OiBhbnkpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbml0ZW1jbGlja2VkKHsgc2VsZWN0ZWQ6IGtleX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbWFnZVBpY3R1cmUoY2hlY2tlZDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGNoZWNrZWQgPyBcImNzcy9pbWFnZXMvY2hlY2tsaXN0b24ucG5nXCIgOiBcImNzcy9pbWFnZXMvY2hlY2tsaXN0b2ZmLnBuZ1wiO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25saXN0aXRlbSB7XHJcbiAgICBwdWJsaWMga2V5OiBhbnk7XHJcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nO1xyXG4gICAgcHVibGljIGljb246IHN0cmluZztcclxuICAgIHB1YmxpYyBzZWxlY3RlZD86IGJvb2xlYW47XHJcbn1cclxuIiwiaW1wb3J0IFwidGlueW1jZVwiO1xyXG5kZWNsYXJlIHZhciB0aW55bWNlOiBhbnk7XHJcbi8qKlxyXG4gKiBwbHVnaW4uanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuLypnbG9iYWwgdGlueW1jZTp0cnVlICovXHJcblxyXG50aW55bWNlLlBsdWdpbk1hbmFnZXIuYWRkKCdpbWFnZScsXHJcblx0ZnVuY3Rpb24gKGVkaXRvcikge1xyXG5cdFx0ZnVuY3Rpb24gZ2V0SW1hZ2VTaXplKHVybCwgY2FsbGJhY2spIHtcclxuXHRcdFx0dmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gZG9uZSh3aWR0aD8sIGhlaWdodD8pIHtcclxuXHRcdFx0XHRpZiAoaW1nLnBhcmVudE5vZGUpIHtcclxuXHRcdFx0XHRcdGltZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGltZyk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjYWxsYmFjayh7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0ZG9uZShNYXRoLm1heChpbWcud2lkdGgsIGltZy5jbGllbnRXaWR0aCksIE1hdGgubWF4KGltZy5oZWlnaHQsIGltZy5jbGllbnRIZWlnaHQpKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGltZy5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdGRvbmUoKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHZhciBzdHlsZSA9IGltZy5zdHlsZTtcclxuXHRcdFx0c3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0XHRzdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcblx0XHRcdHN0eWxlLmJvdHRvbSA9IHN0eWxlLmxlZnQgPSBcIjBweFwiO1xyXG5cdFx0XHRzdHlsZS53aWR0aCA9IHN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuXHJcblx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTtcclxuXHRcdFx0aW1nLnNyYyA9IHVybDtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBidWlsZExpc3RJdGVtcyhpbnB1dExpc3QsIGl0ZW1DYWxsYmFjaz8sIHN0YXJ0SXRlbXM/KSB7XHJcblx0XHRcdGZ1bmN0aW9uIGFwcGVuZEl0ZW1zKHZhbHVlcywgb3V0cHV0Pykge1xyXG5cdFx0XHRcdG91dHB1dCA9IG91dHB1dCB8fCBbXTtcclxuXHJcblx0XHRcdFx0dGlueW1jZS5lYWNoKHZhbHVlcywgZnVuY3Rpb24gKGl0ZW0pIHtcclxuXHRcdFx0XHRcdHZhciBtZW51SXRlbTogYW55ID0geyB0ZXh0OiBpdGVtLnRleHQgfHwgaXRlbS50aXRsZSB9O1xyXG5cclxuXHRcdFx0XHRcdGlmIChpdGVtLm1lbnUpIHtcclxuXHRcdFx0XHRcdFx0bWVudUl0ZW0ubWVudSA9IGFwcGVuZEl0ZW1zKGl0ZW0ubWVudSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRtZW51SXRlbS52YWx1ZSA9IGl0ZW0udmFsdWU7XHJcblx0XHRcdFx0XHRcdGl0ZW1DYWxsYmFjayhtZW51SXRlbSk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2gobWVudUl0ZW0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gb3V0cHV0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gYXBwZW5kSXRlbXMoaW5wdXRMaXN0LCBzdGFydEl0ZW1zIHx8IFtdKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBjcmVhdGVJbWFnZUxpc3QoY2FsbGJhY2spIHtcclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHR2YXIgaW1hZ2VMaXN0ID0gZWRpdG9yLnNldHRpbmdzLmltYWdlX2xpc3Q7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiBpbWFnZUxpc3QgPT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRcdFx0dGlueW1jZS51dGlsLlhIUi5zZW5kKHtcclxuXHRcdFx0XHRcdFx0dXJsOiBpbWFnZUxpc3QsXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sodGlueW1jZS51dGlsLkpTT04ucGFyc2UodGV4dCkpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBpbWFnZUxpc3QgPT0gXCJmdW5jdGlvblwiKSB7XHJcblx0XHRcdFx0XHRpbWFnZUxpc3QoY2FsbGJhY2spO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjayhpbWFnZUxpc3QpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBzaG93RGlhbG9nKGltYWdlTGlzdCkge1xyXG5cdFx0XHRpZihlZGl0b3IuZ2V0Qm9keSgpLmNvbnRlbnRFZGl0YWJsZSAhPT0gXCJ0cnVlXCIgJiYgZWRpdG9yLmdldEJvZHkoKS5jb250ZW50RWRpdGFibGUgIT09IHRydWUpXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0dmFyIHdpbiwgZGF0YTogYW55ID0ge30sIGRvbSA9IGVkaXRvci5kb20sIGltZ0VsbSwgZmlndXJlRWxtO1xyXG5cdFx0XHR2YXIgd2lkdGgsIGhlaWdodCwgaW1hZ2VMaXN0Q3RybCwgY2xhc3NMaXN0Q3RybCwgaW1hZ2VEaW1lbnNpb25zID0gZWRpdG9yLnNldHRpbmdzLmltYWdlX2RpbWVuc2lvbnMgIT09IGZhbHNlO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gcmVjYWxjU2l6ZSgpIHtcclxuXHRcdFx0XHR2YXIgd2lkdGhDdHJsLCBoZWlnaHRDdHJsLCBuZXdXaWR0aCwgbmV3SGVpZ2h0O1xyXG5cclxuXHRcdFx0XHR3aWR0aEN0cmwgPSB3aW4uZmluZCgnI3dpZHRoJylbMF07XHJcblx0XHRcdFx0aGVpZ2h0Q3RybCA9IHdpbi5maW5kKCcjaGVpZ2h0JylbMF07XHJcblxyXG5cdFx0XHRcdGlmICghd2lkdGhDdHJsIHx8ICFoZWlnaHRDdHJsKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRuZXdXaWR0aCA9IHdpZHRoQ3RybC52YWx1ZSgpO1xyXG5cdFx0XHRcdG5ld0hlaWdodCA9IGhlaWdodEN0cmwudmFsdWUoKTtcclxuXHJcblx0XHRcdFx0aWYgKHdpbi5maW5kKCcjY29uc3RyYWluJylbMF0uY2hlY2tlZCgpICYmIHdpZHRoICYmIGhlaWdodCAmJiBuZXdXaWR0aCAmJiBuZXdIZWlnaHQpIHtcclxuXHRcdFx0XHRcdGlmICh3aWR0aCAhPSBuZXdXaWR0aCkge1xyXG5cdFx0XHRcdFx0XHRuZXdIZWlnaHQgPSBNYXRoLnJvdW5kKChuZXdXaWR0aCAvIHdpZHRoKSAqIG5ld0hlaWdodCk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIWlzTmFOKG5ld0hlaWdodCkpIHtcclxuXHRcdFx0XHRcdFx0XHRoZWlnaHRDdHJsLnZhbHVlKG5ld0hlaWdodCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5ld1dpZHRoID0gTWF0aC5yb3VuZCgobmV3SGVpZ2h0IC8gaGVpZ2h0KSAqIG5ld1dpZHRoKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICghaXNOYU4obmV3V2lkdGgpKSB7XHJcblx0XHRcdFx0XHRcdFx0d2lkdGhDdHJsLnZhbHVlKG5ld1dpZHRoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0d2lkdGggPSBuZXdXaWR0aDtcclxuXHRcdFx0XHRoZWlnaHQgPSBuZXdIZWlnaHQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIG9uU3VibWl0Rm9ybSgpIHtcclxuXHRcdFx0XHR2YXIgZmlndXJlRWxtLCBvbGRJbWc7XHJcblxyXG5cdFx0XHRcdGZ1bmN0aW9uIHdhaXRMb2FkKGltZ0VsbSkge1xyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gc2VsZWN0SW1hZ2UoKSB7XHJcblx0XHRcdFx0XHRcdGltZ0VsbS5vbmxvYWQgPSBpbWdFbG0ub25lcnJvciA9IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoZWRpdG9yLnNlbGVjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KGltZ0VsbSk7XHJcblx0XHRcdFx0XHRcdFx0ZWRpdG9yLm5vZGVDaGFuZ2VkKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpbWdFbG0ub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIWRhdGEud2lkdGggJiYgIWRhdGEuaGVpZ2h0ICYmIGltYWdlRGltZW5zaW9ucykge1xyXG5cdFx0XHRcdFx0XHRcdGRvbS5zZXRBdHRyaWJzKGltZ0VsbSwge1xyXG5cdFx0XHRcdFx0XHRcdFx0d2lkdGg6IGltZ0VsbS5jbGllbnRXaWR0aCxcclxuXHRcdFx0XHRcdFx0XHRcdGhlaWdodDogaW1nRWxtLmNsaWVudEhlaWdodFxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRzZWxlY3RJbWFnZSgpO1xyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRpbWdFbG0ub25lcnJvciA9IHNlbGVjdEltYWdlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dXBkYXRlU3R5bGUoKTtcclxuXHRcdFx0XHRyZWNhbGNTaXplKCk7XHJcblxyXG5cdFx0XHRcdGRhdGEgPSB0aW55bWNlLmV4dGVuZChkYXRhLCB3aW4udG9KU09OKCkpO1xyXG5cclxuXHRcdFx0XHRpZiAoIWRhdGEuYWx0KSB7XHJcblx0XHRcdFx0XHRkYXRhLmFsdCA9ICcnO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCFkYXRhLnRpdGxlKSB7XHJcblx0XHRcdFx0XHRkYXRhLnRpdGxlID0gJyc7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoZGF0YS53aWR0aCA9PT0gJycpIHtcclxuXHRcdFx0XHRcdGRhdGEud2lkdGggPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGRhdGEuaGVpZ2h0ID09PSAnJykge1xyXG5cdFx0XHRcdFx0ZGF0YS5oZWlnaHQgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCFkYXRhLnN0eWxlKSB7XHJcblx0XHRcdFx0XHRkYXRhLnN0eWxlID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFNldHVwIG5ldyBkYXRhIGV4Y2x1ZGluZyBzdHlsZSBwcm9wZXJ0aWVzXHJcblx0XHRcdFx0Lyplc2xpbnQgZG90LW5vdGF0aW9uOiAwKi9cclxuXHRcdFx0XHRkYXRhID0ge1xyXG5cdFx0XHRcdFx0c3JjOiBkYXRhLnNyYyxcclxuXHRcdFx0XHRcdGFsdDogZGF0YS5hbHQsXHJcblx0XHRcdFx0XHR0aXRsZTogZGF0YS50aXRsZSxcclxuXHRcdFx0XHRcdHdpZHRoOiBkYXRhLndpZHRoLFxyXG5cdFx0XHRcdFx0aGVpZ2h0OiBkYXRhLmhlaWdodCxcclxuXHRcdFx0XHRcdHN0eWxlOiBkYXRhLnN0eWxlLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogZGF0YS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XCJjbGFzc1wiOiBkYXRhW1wiY2xhc3NcIl1cclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0aWYgKCFkYXRhLnNyYykge1xyXG5cdFx0XHRcdFx0XHRpZiAoaW1nRWxtKSB7XHJcblx0XHRcdFx0XHRcdFx0ZG9tLnJlbW92ZShpbWdFbG0pO1xyXG5cdFx0XHRcdFx0XHRcdGVkaXRvci5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHRcdGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKGRhdGEudGl0bGUgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YS50aXRsZSA9IG51bGw7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKCFpbWdFbG0pIHtcclxuXHRcdFx0XHRcdFx0ZGF0YS5pZCA9ICdfX21jZW5ldyc7XHJcblx0XHRcdFx0XHRcdGVkaXRvci5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNldENvbnRlbnQoZG9tLmNyZWF0ZUhUTUwoJ2ltZycsIGRhdGEpKTtcclxuXHRcdFx0XHRcdFx0aW1nRWxtID0gZG9tLmdldCgnX19tY2VuZXcnKTtcclxuXHRcdFx0XHRcdFx0ZG9tLnNldEF0dHJpYihpbWdFbG0sICdpZCcsIG51bGwpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0ZG9tLnNldEF0dHJpYnMoaW1nRWxtLCBkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRlZGl0b3IuZWRpdG9yVXBsb2FkLnVwbG9hZEltYWdlc0F1dG8oKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZGF0YS5jYXB0aW9uID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZG9tLmlzKGltZ0VsbS5wYXJlbnROb2RlLCAnZmlndXJlLmltYWdlJykpIHtcclxuXHRcdFx0XHRcdFx0XHRmaWd1cmVFbG0gPSBpbWdFbG0ucGFyZW50Tm9kZTtcclxuXHRcdFx0XHRcdFx0XHRkb20uaW5zZXJ0QWZ0ZXIoaW1nRWxtLCBmaWd1cmVFbG0pO1xyXG5cdFx0XHRcdFx0XHRcdGRvbS5yZW1vdmUoZmlndXJlRWxtKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGZ1bmN0aW9uIGlzVGV4dEJsb2NrKG5vZGUpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVkaXRvci5zY2hlbWEuZ2V0VGV4dEJsb2NrRWxlbWVudHMoKVtub2RlLm5vZGVOYW1lXTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoZGF0YS5jYXB0aW9uID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdGlmICghZG9tLmlzKGltZ0VsbS5wYXJlbnROb2RlLCAnZmlndXJlLmltYWdlJykpIHtcclxuXHRcdFx0XHRcdFx0XHRvbGRJbWcgPSBpbWdFbG07XHJcblx0XHRcdFx0XHRcdFx0aW1nRWxtID0gaW1nRWxtLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdFx0XHRcdFx0XHRmaWd1cmVFbG0gPSBkb20uY3JlYXRlKCdmaWd1cmUnLCB7ICdjbGFzcyc6ICdpbWFnZScgfSk7XHJcblx0XHRcdFx0XHRcdFx0ZmlndXJlRWxtLmFwcGVuZENoaWxkKGltZ0VsbSk7XHJcblx0XHRcdFx0XHRcdFx0ZmlndXJlRWxtLmFwcGVuZENoaWxkKGRvbS5jcmVhdGUoJ2ZpZ2NhcHRpb24nLCB7IGNvbnRlbnRFZGl0YWJsZTogdHJ1ZSB9LCAnQ2FwdGlvbicpKTtcclxuXHRcdFx0XHRcdFx0XHRmaWd1cmVFbG0uY29udGVudEVkaXRhYmxlID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciB0ZXh0QmxvY2sgPSBkb20uZ2V0UGFyZW50KG9sZEltZywgaXNUZXh0QmxvY2spO1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0ZXh0QmxvY2spIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRvbS5zcGxpdCh0ZXh0QmxvY2ssIG9sZEltZywgZmlndXJlRWxtKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZG9tLnJlcGxhY2UoZmlndXJlRWxtLCBvbGRJbWcpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3QoZmlndXJlRWxtKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHdhaXRMb2FkKGltZ0VsbSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIHJlbW92ZVBpeGVsU3VmZml4KHZhbHVlKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL3B4JC8sICcnKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gc3JjQ2hhbmdlKGUpIHtcclxuXHRcdFx0XHR2YXIgc3JjVVJMLCBwcmVwZW5kVVJMLCBhYnNvbHV0ZVVSTFBhdHRlcm4sIG1ldGEgPSBlLm1ldGEgfHwge307XHJcblxyXG5cdFx0XHRcdGlmIChpbWFnZUxpc3RDdHJsKSB7XHJcblx0XHRcdFx0XHRpbWFnZUxpc3RDdHJsLnZhbHVlKGVkaXRvci5jb252ZXJ0VVJMKHRoaXMudmFsdWUoKSwgJ3NyYycpKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRpbnltY2UuZWFjaChtZXRhLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xyXG5cdFx0XHRcdFx0d2luLmZpbmQoJyMnICsga2V5KS52YWx1ZSh2YWx1ZSk7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGlmICghbWV0YS53aWR0aCAmJiAhbWV0YS5oZWlnaHQpIHtcclxuXHRcdFx0XHRcdHNyY1VSTCA9IGVkaXRvci5jb252ZXJ0VVJMKHRoaXMudmFsdWUoKSwgJ3NyYycpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFBhdHRlcm4gdGVzdCB0aGUgc3JjIHVybCBhbmQgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHVybFxyXG5cdFx0XHRcdFx0cHJlcGVuZFVSTCA9IGVkaXRvci5zZXR0aW5ncy5pbWFnZV9wcmVwZW5kX3VybDtcclxuXHRcdFx0XHRcdGFic29sdXRlVVJMUGF0dGVybiA9IG5ldyBSZWdFeHAoJ14oPzpbYS16XSs6KT8vLycsICdpJyk7XHJcblx0XHRcdFx0XHRpZiAocHJlcGVuZFVSTCAmJiAhYWJzb2x1dGVVUkxQYXR0ZXJuLnRlc3Qoc3JjVVJMKSAmJiBzcmNVUkwuc3Vic3RyaW5nKDAsIHByZXBlbmRVUkwubGVuZ3RoKSAhPT0gcHJlcGVuZFVSTCkge1xyXG5cdFx0XHRcdFx0XHRzcmNVUkwgPSBwcmVwZW5kVVJMICsgc3JjVVJMO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRoaXMudmFsdWUoc3JjVVJMKTtcclxuXHJcblx0XHRcdFx0XHRnZXRJbWFnZVNpemUoZWRpdG9yLmRvY3VtZW50QmFzZVVSSS50b0Fic29sdXRlKHRoaXMudmFsdWUoKSksIGZ1bmN0aW9uIChkYXRhKSB7XHJcblx0XHRcdFx0XHRcdGlmIChkYXRhLndpZHRoICYmIGRhdGEuaGVpZ2h0ICYmIGltYWdlRGltZW5zaW9ucykge1xyXG5cdFx0XHRcdFx0XHRcdHdpZHRoID0gZGF0YS53aWR0aDtcclxuXHRcdFx0XHRcdFx0XHRoZWlnaHQgPSBkYXRhLmhlaWdodDtcclxuXHJcblx0XHRcdFx0XHRcdFx0d2luLmZpbmQoJyN3aWR0aCcpLnZhbHVlKHdpZHRoKTtcclxuXHRcdFx0XHRcdFx0XHR3aW4uZmluZCgnI2hlaWdodCcpLnZhbHVlKGhlaWdodCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gb25CZWZvcmVDYWxsKGUpIHtcclxuXHRcdFx0XHRlLm1ldGEgPSB3aW4udG9KU09OKCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGltZ0VsbSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xyXG5cdFx0XHRmaWd1cmVFbG0gPSBkb20uZ2V0UGFyZW50KGltZ0VsbSwgJ2ZpZ3VyZS5pbWFnZScpO1xyXG5cdFx0XHRpZiAoZmlndXJlRWxtKSB7XHJcblx0XHRcdFx0aW1nRWxtID0gZG9tLnNlbGVjdCgnaW1nJywgZmlndXJlRWxtKVswXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGltZ0VsbSAmJiAoaW1nRWxtLm5vZGVOYW1lICE9ICdJTUcnIHx8IGltZ0VsbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLW9iamVjdCcpIHx8IGltZ0VsbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWNlLXBsYWNlaG9sZGVyJykpKSB7XHJcblx0XHRcdFx0aW1nRWxtID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGltZ0VsbSkge1xyXG5cdFx0XHRcdHdpZHRoID0gZG9tLmdldEF0dHJpYihpbWdFbG0sICd3aWR0aCcpO1xyXG5cdFx0XHRcdGhlaWdodCA9IGRvbS5nZXRBdHRyaWIoaW1nRWxtLCAnaGVpZ2h0Jyk7XHJcblxyXG5cdFx0XHRcdGRhdGEgPSB7XHJcblx0XHRcdFx0XHRzcmM6IGRvbS5nZXRBdHRyaWIoaW1nRWxtLCAnc3JjJyksXHJcblx0XHRcdFx0XHRhbHQ6IGRvbS5nZXRBdHRyaWIoaW1nRWxtLCAnYWx0JyksXHJcblx0XHRcdFx0XHR0aXRsZTogZG9tLmdldEF0dHJpYihpbWdFbG0sICd0aXRsZScpLFxyXG5cdFx0XHRcdFx0XCJjbGFzc1wiOiBkb20uZ2V0QXR0cmliKGltZ0VsbSwgJ2NsYXNzJyksXHJcblx0XHRcdFx0XHR3aWR0aDogd2lkdGgsXHJcblx0XHRcdFx0XHRoZWlnaHQ6IGhlaWdodCxcclxuXHRcdFx0XHRcdGNhcHRpb246ICEhZmlndXJlRWxtXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGltYWdlTGlzdCkge1xyXG5cdFx0XHRcdGltYWdlTGlzdEN0cmwgPSB7XHJcblx0XHRcdFx0XHR0eXBlOiAnbGlzdGJveCcsXHJcblx0XHRcdFx0XHRsYWJlbDogJ0ltYWdlIGxpc3QnLFxyXG5cdFx0XHRcdFx0dmFsdWVzOiBidWlsZExpc3RJdGVtcyhcclxuXHRcdFx0XHRcdFx0aW1hZ2VMaXN0LFxyXG5cdFx0XHRcdFx0XHRmdW5jdGlvbiAoaXRlbSkge1xyXG5cdFx0XHRcdFx0XHRcdGl0ZW0udmFsdWUgPSBlZGl0b3IuY29udmVydFVSTChpdGVtLnZhbHVlIHx8IGl0ZW0udXJsLCAnc3JjJyk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFt7IHRleHQ6ICdOb25lJywgdmFsdWU6ICcnIH1dXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0dmFsdWU6IGRhdGEuc3JjICYmIGVkaXRvci5jb252ZXJ0VVJMKGRhdGEuc3JjLCAnc3JjJyksXHJcblx0XHRcdFx0XHRvbnNlbGVjdDogZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGFsdEN0cmwgPSB3aW4uZmluZCgnI2FsdCcpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCFhbHRDdHJsLnZhbHVlKCkgfHwgKGUubGFzdENvbnRyb2wgJiYgYWx0Q3RybC52YWx1ZSgpID09IGUubGFzdENvbnRyb2wudGV4dCgpKSkge1xyXG5cdFx0XHRcdFx0XHRcdGFsdEN0cmwudmFsdWUoZS5jb250cm9sLnRleHQoKSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHdpbi5maW5kKCcjc3JjJykudmFsdWUoZS5jb250cm9sLnZhbHVlKCkpLmZpcmUoJ2NoYW5nZScpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG9uUG9zdFJlbmRlcjogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHQvKmVzbGludCBjb25zaXN0ZW50LXRoaXM6IDAqL1xyXG5cdFx0XHRcdFx0XHRpbWFnZUxpc3RDdHJsID0gdGhpcztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLmltYWdlX2NsYXNzX2xpc3QpIHtcclxuXHRcdFx0XHRjbGFzc0xpc3RDdHJsID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogJ2NsYXNzJyxcclxuXHRcdFx0XHRcdHR5cGU6ICdsaXN0Ym94JyxcclxuXHRcdFx0XHRcdGxhYmVsOiAnQ2xhc3MnLFxyXG5cdFx0XHRcdFx0dmFsdWVzOiBidWlsZExpc3RJdGVtcyhcclxuXHRcdFx0XHRcdFx0ZWRpdG9yLnNldHRpbmdzLmltYWdlX2NsYXNzX2xpc3QsXHJcblx0XHRcdFx0XHRcdGZ1bmN0aW9uIChpdGVtKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0udmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW0udGV4dFN0eWxlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWRpdG9yLmZvcm1hdHRlci5nZXRDc3NUZXh0KHsgaW5saW5lOiAnaW1nJywgY2xhc3NlczogW2l0ZW0udmFsdWVdIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBHZW5lcmFsIHNldHRpbmdzIHNoYXJlZCBiZXR3ZWVuIHNpbXBsZSBhbmQgYWR2YW5jZWQgZGlhbG9nc1xyXG5cdFx0XHR2YXIgZ2VuZXJhbEZvcm1JdGVtcyA9IFtcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRuYW1lOiAnc3JjJyxcclxuXHRcdFx0XHRcdHR5cGU6ICdmaWxlcGlja2VyJyxcclxuXHRcdFx0XHRcdGZpbGV0eXBlOiAnaW1hZ2UnLFxyXG5cdFx0XHRcdFx0bGFiZWw6ICdTb3VyY2UnLFxyXG5cdFx0XHRcdFx0YXV0b2ZvY3VzOiB0cnVlLFxyXG5cdFx0XHRcdFx0b25jaGFuZ2U6IHNyY0NoYW5nZSxcclxuXHRcdFx0XHRcdG9uYmVmb3JlY2FsbDogb25CZWZvcmVDYWxsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpbWFnZUxpc3RDdHJsXHJcblx0XHRcdF07XHJcblxyXG5cdFx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLmltYWdlX2Rlc2NyaXB0aW9uICE9PSBmYWxzZSkge1xyXG5cdFx0XHRcdGdlbmVyYWxGb3JtSXRlbXMucHVzaCh7IG5hbWU6ICdhbHQnLCB0eXBlOiAndGV4dGJveCcsIGxhYmVsOiAnSW1hZ2UgZGVzY3JpcHRpb24nIH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLmltYWdlX3RpdGxlKSB7XHJcblx0XHRcdFx0Z2VuZXJhbEZvcm1JdGVtcy5wdXNoKHsgbmFtZTogJ3RpdGxlJywgdHlwZTogJ3RleHRib3gnLCBsYWJlbDogJ0ltYWdlIFRpdGxlJyB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGltYWdlRGltZW5zaW9ucykge1xyXG5cdFx0XHRcdGdlbmVyYWxGb3JtSXRlbXMucHVzaCh7XHJcblx0XHRcdFx0XHR0eXBlOiAnY29udGFpbmVyJyxcclxuXHRcdFx0XHRcdGxhYmVsOiAnRGltZW5zaW9ucycsXHJcblx0XHRcdFx0XHRsYXlvdXQ6ICdmbGV4JyxcclxuXHRcdFx0XHRcdGRpcmVjdGlvbjogJ3JvdycsXHJcblx0XHRcdFx0XHRhbGlnbjogJ2NlbnRlcicsXHJcblx0XHRcdFx0XHRzcGFjaW5nOiA1LFxyXG5cdFx0XHRcdFx0aXRlbXM6IFtcclxuXHRcdFx0XHRcdFx0eyBuYW1lOiAnd2lkdGgnLCB0eXBlOiAndGV4dGJveCcsIG1heExlbmd0aDogNSwgc2l6ZTogMywgb25jaGFuZ2U6IHJlY2FsY1NpemUsIGFyaWFMYWJlbDogJ1dpZHRoJyB9LFxyXG5cdFx0XHRcdFx0XHR7IHR5cGU6ICdsYWJlbCcsIHRleHQ6ICd4JyB9LFxyXG5cdFx0XHRcdFx0XHR7IG5hbWU6ICdoZWlnaHQnLCB0eXBlOiAndGV4dGJveCcsIG1heExlbmd0aDogNSwgc2l6ZTogMywgb25jaGFuZ2U6IHJlY2FsY1NpemUsIGFyaWFMYWJlbDogJ0hlaWdodCcgfSxcclxuXHRcdFx0XHRcdFx0eyBuYW1lOiAnY29uc3RyYWluJywgdHlwZTogJ2NoZWNrYm94JywgY2hlY2tlZDogdHJ1ZSwgdGV4dDogJ0NvbnN0cmFpbiBwcm9wb3J0aW9ucycgfVxyXG5cdFx0XHRcdFx0XVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRnZW5lcmFsRm9ybUl0ZW1zLnB1c2goY2xhc3NMaXN0Q3RybCk7XHJcblxyXG5cdFx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLmltYWdlX2NhcHRpb24gJiYgdGlueW1jZS5FbnYuY2VGYWxzZSkge1xyXG5cdFx0XHRcdGdlbmVyYWxGb3JtSXRlbXMucHVzaCh7IG5hbWU6ICdjYXB0aW9uJywgdHlwZTogJ2NoZWNrYm94JywgbGFiZWw6ICdDYXB0aW9uJyB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gbWVyZ2VNYXJnaW5zKGNzcykge1xyXG5cdFx0XHRcdGlmIChjc3MubWFyZ2luKSB7XHJcblxyXG5cdFx0XHRcdFx0dmFyIHNwbGl0TWFyZ2luID0gY3NzLm1hcmdpbi5zcGxpdChcIiBcIik7XHJcblxyXG5cdFx0XHRcdFx0c3dpdGNoIChzcGxpdE1hcmdpbi5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0Y2FzZSAxOiAvL21hcmdpbjogdG9wcmlnaHRib3R0b21sZWZ0O1xyXG5cdFx0XHRcdFx0XHRcdGNzc1snbWFyZ2luLXRvcCddID0gY3NzWydtYXJnaW4tdG9wJ10gfHwgc3BsaXRNYXJnaW5bMF07XHJcblx0XHRcdFx0XHRcdFx0Y3NzWydtYXJnaW4tcmlnaHQnXSA9IGNzc1snbWFyZ2luLXJpZ2h0J10gfHwgc3BsaXRNYXJnaW5bMF07XHJcblx0XHRcdFx0XHRcdFx0Y3NzWydtYXJnaW4tYm90dG9tJ10gPSBjc3NbJ21hcmdpbi1ib3R0b20nXSB8fCBzcGxpdE1hcmdpblswXTtcclxuXHRcdFx0XHRcdFx0XHRjc3NbJ21hcmdpbi1sZWZ0J10gPSBjc3NbJ21hcmdpbi1sZWZ0J10gfHwgc3BsaXRNYXJnaW5bMF07XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgMjogLy9tYXJnaW46IHRvcGJvdHRvbSByaWdodGxlZnQ7XHJcblx0XHRcdFx0XHRcdFx0Y3NzWydtYXJnaW4tdG9wJ10gPSBjc3NbJ21hcmdpbi10b3AnXSB8fCBzcGxpdE1hcmdpblswXTtcclxuXHRcdFx0XHRcdFx0XHRjc3NbJ21hcmdpbi1yaWdodCddID0gY3NzWydtYXJnaW4tcmlnaHQnXSB8fCBzcGxpdE1hcmdpblsxXTtcclxuXHRcdFx0XHRcdFx0XHRjc3NbJ21hcmdpbi1ib3R0b20nXSA9IGNzc1snbWFyZ2luLWJvdHRvbSddIHx8IHNwbGl0TWFyZ2luWzBdO1xyXG5cdFx0XHRcdFx0XHRcdGNzc1snbWFyZ2luLWxlZnQnXSA9IGNzc1snbWFyZ2luLWxlZnQnXSB8fCBzcGxpdE1hcmdpblsxXTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAzOiAvL21hcmdpbjogdG9wIHJpZ2h0bGVmdCBib3R0b207XHJcblx0XHRcdFx0XHRcdFx0Y3NzWydtYXJnaW4tdG9wJ10gPSBjc3NbJ21hcmdpbi10b3AnXSB8fCBzcGxpdE1hcmdpblswXTtcclxuXHRcdFx0XHRcdFx0XHRjc3NbJ21hcmdpbi1yaWdodCddID0gY3NzWydtYXJnaW4tcmlnaHQnXSB8fCBzcGxpdE1hcmdpblsxXTtcclxuXHRcdFx0XHRcdFx0XHRjc3NbJ21hcmdpbi1ib3R0b20nXSA9IGNzc1snbWFyZ2luLWJvdHRvbSddIHx8IHNwbGl0TWFyZ2luWzJdO1xyXG5cdFx0XHRcdFx0XHRcdGNzc1snbWFyZ2luLWxlZnQnXSA9IGNzc1snbWFyZ2luLWxlZnQnXSB8fCBzcGxpdE1hcmdpblsxXTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSA0OiAvL21hcmdpbjogdG9wIHJpZ2h0IGJvdHRvbSBsZWZ0O1xyXG5cdFx0XHRcdFx0XHRcdGNzc1snbWFyZ2luLXRvcCddID0gY3NzWydtYXJnaW4tdG9wJ10gfHwgc3BsaXRNYXJnaW5bMF07XHJcblx0XHRcdFx0XHRcdFx0Y3NzWydtYXJnaW4tcmlnaHQnXSA9IGNzc1snbWFyZ2luLXJpZ2h0J10gfHwgc3BsaXRNYXJnaW5bMV07XHJcblx0XHRcdFx0XHRcdFx0Y3NzWydtYXJnaW4tYm90dG9tJ10gPSBjc3NbJ21hcmdpbi1ib3R0b20nXSB8fCBzcGxpdE1hcmdpblsyXTtcclxuXHRcdFx0XHRcdFx0XHRjc3NbJ21hcmdpbi1sZWZ0J10gPSBjc3NbJ21hcmdpbi1sZWZ0J10gfHwgc3BsaXRNYXJnaW5bM107XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRkZWxldGUgY3NzLm1hcmdpbjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGNzcztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gdXBkYXRlU3R5bGUoKSB7XHJcblx0XHRcdFx0ZnVuY3Rpb24gYWRkUGl4ZWxTdWZmaXgodmFsdWUpIHtcclxuXHRcdFx0XHRcdGlmICh2YWx1ZS5sZW5ndGggPiAwICYmIC9eWzAtOV0rJC8udGVzdCh2YWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0dmFsdWUgKz0gJ3B4JztcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIWVkaXRvci5zZXR0aW5ncy5pbWFnZV9hZHZ0YWIpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHZhciBkYXRhID0gd2luLnRvSlNPTigpLFxyXG5cdFx0XHRcdFx0Y3NzID0gZG9tLnBhcnNlU3R5bGUoZGF0YS5zdHlsZSk7XHJcblxyXG5cdFx0XHRcdGNzcyA9IG1lcmdlTWFyZ2lucyhjc3MpO1xyXG5cclxuXHRcdFx0XHRpZiAoZGF0YS52c3BhY2UpIHtcclxuXHRcdFx0XHRcdGNzc1snbWFyZ2luLXRvcCddID0gY3NzWydtYXJnaW4tYm90dG9tJ10gPSBhZGRQaXhlbFN1ZmZpeChkYXRhLnZzcGFjZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChkYXRhLmhzcGFjZSkge1xyXG5cdFx0XHRcdFx0Y3NzWydtYXJnaW4tbGVmdCddID0gY3NzWydtYXJnaW4tcmlnaHQnXSA9IGFkZFBpeGVsU3VmZml4KGRhdGEuaHNwYWNlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRhdGEuYm9yZGVyKSB7XHJcblx0XHRcdFx0XHRjc3NbJ2JvcmRlci13aWR0aCddID0gYWRkUGl4ZWxTdWZmaXgoZGF0YS5ib3JkZXIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0d2luLmZpbmQoJyNzdHlsZScpLnZhbHVlKGRvbS5zZXJpYWxpemVTdHlsZShkb20ucGFyc2VTdHlsZShkb20uc2VyaWFsaXplU3R5bGUoY3NzKSkpKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gdXBkYXRlVlNwYWNlSFNwYWNlQm9yZGVyKCkge1xyXG5cdFx0XHRcdGlmICghZWRpdG9yLnNldHRpbmdzLmltYWdlX2FkdnRhYikge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dmFyIGRhdGEgPSB3aW4udG9KU09OKCksXHJcblx0XHRcdFx0XHRjc3MgPSBkb20ucGFyc2VTdHlsZShkYXRhLnN0eWxlKTtcclxuXHJcblx0XHRcdFx0d2luLmZpbmQoJyN2c3BhY2UnKS52YWx1ZShcIlwiKTtcclxuXHRcdFx0XHR3aW4uZmluZCgnI2hzcGFjZScpLnZhbHVlKFwiXCIpO1xyXG5cclxuXHRcdFx0XHRjc3MgPSBtZXJnZU1hcmdpbnMoY3NzKTtcclxuXHJcblx0XHRcdFx0Ly9Nb3ZlIG9wcG9zaXRlIGVxdWFsIG1hcmdpbnMgdG8gdnNwYWNlL2hzcGFjZSBmaWVsZFxyXG5cdFx0XHRcdGlmICgoY3NzWydtYXJnaW4tdG9wJ10gJiYgY3NzWydtYXJnaW4tYm90dG9tJ10pIHx8IChjc3NbJ21hcmdpbi1yaWdodCddICYmIGNzc1snbWFyZ2luLWxlZnQnXSkpIHtcclxuXHRcdFx0XHRcdGlmIChjc3NbJ21hcmdpbi10b3AnXSA9PT0gY3NzWydtYXJnaW4tYm90dG9tJ10pIHtcclxuXHRcdFx0XHRcdFx0d2luLmZpbmQoJyN2c3BhY2UnKS52YWx1ZShyZW1vdmVQaXhlbFN1ZmZpeChjc3NbJ21hcmdpbi10b3AnXSkpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0d2luLmZpbmQoJyN2c3BhY2UnKS52YWx1ZSgnJyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoY3NzWydtYXJnaW4tcmlnaHQnXSA9PT0gY3NzWydtYXJnaW4tbGVmdCddKSB7XHJcblx0XHRcdFx0XHRcdHdpbi5maW5kKCcjaHNwYWNlJykudmFsdWUocmVtb3ZlUGl4ZWxTdWZmaXgoY3NzWydtYXJnaW4tcmlnaHQnXSkpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0d2luLmZpbmQoJyNoc3BhY2UnKS52YWx1ZSgnJyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvL01vdmUgYm9yZGVyLXdpZHRoXHJcblx0XHRcdFx0aWYgKGNzc1snYm9yZGVyLXdpZHRoJ10pIHtcclxuXHRcdFx0XHRcdHdpbi5maW5kKCcjYm9yZGVyJykudmFsdWUocmVtb3ZlUGl4ZWxTdWZmaXgoY3NzWydib3JkZXItd2lkdGgnXSkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0d2luLmZpbmQoJyNzdHlsZScpLnZhbHVlKGRvbS5zZXJpYWxpemVTdHlsZShkb20ucGFyc2VTdHlsZShkb20uc2VyaWFsaXplU3R5bGUoY3NzKSkpKTtcclxuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChlZGl0b3Iuc2V0dGluZ3MuaW1hZ2VfYWR2dGFiKSB7XHJcblx0XHRcdFx0Ly8gUGFyc2Ugc3R5bGVzIGZyb20gaW1nXHJcblx0XHRcdFx0aWYgKGltZ0VsbSkge1xyXG5cdFx0XHRcdFx0aWYgKGltZ0VsbS5zdHlsZS5tYXJnaW5MZWZ0ICYmIGltZ0VsbS5zdHlsZS5tYXJnaW5SaWdodCAmJiBpbWdFbG0uc3R5bGUubWFyZ2luTGVmdCA9PT0gaW1nRWxtLnN0eWxlLm1hcmdpblJpZ2h0KSB7XHJcblx0XHRcdFx0XHRcdGRhdGEuaHNwYWNlID0gcmVtb3ZlUGl4ZWxTdWZmaXgoaW1nRWxtLnN0eWxlLm1hcmdpbkxlZnQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKGltZ0VsbS5zdHlsZS5tYXJnaW5Ub3AgJiYgaW1nRWxtLnN0eWxlLm1hcmdpbkJvdHRvbSAmJiBpbWdFbG0uc3R5bGUubWFyZ2luVG9wID09PSBpbWdFbG0uc3R5bGUubWFyZ2luQm90dG9tKSB7XHJcblx0XHRcdFx0XHRcdGRhdGEudnNwYWNlID0gcmVtb3ZlUGl4ZWxTdWZmaXgoaW1nRWxtLnN0eWxlLm1hcmdpblRvcCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoaW1nRWxtLnN0eWxlLmJvcmRlcldpZHRoKSB7XHJcblx0XHRcdFx0XHRcdGRhdGEuYm9yZGVyID0gcmVtb3ZlUGl4ZWxTdWZmaXgoaW1nRWxtLnN0eWxlLmJvcmRlcldpZHRoKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRkYXRhLnN0eWxlID0gZWRpdG9yLmRvbS5zZXJpYWxpemVTdHlsZShlZGl0b3IuZG9tLnBhcnNlU3R5bGUoZWRpdG9yLmRvbS5nZXRBdHRyaWIoaW1nRWxtLCAnc3R5bGUnKSkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQWR2YW5jZWQgZGlhbG9nIHNob3dzIGdlbmVyYWwrYWR2YW5jZWQgdGFic1xyXG5cdFx0XHRcdHdpbiA9IGVkaXRvci53aW5kb3dNYW5hZ2VyLm9wZW4oe1xyXG5cdFx0XHRcdFx0dGl0bGU6ICdJbnNlcnQvZWRpdCBpbWFnZScsXHJcblx0XHRcdFx0XHRkYXRhOiBkYXRhLFxyXG5cdFx0XHRcdFx0Ym9keVR5cGU6ICd0YWJwYW5lbCcsXHJcblx0XHRcdFx0XHRib2R5OiBbXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ0dlbmVyYWwnLFxyXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdmb3JtJyxcclxuXHRcdFx0XHRcdFx0XHRpdGVtczogZ2VuZXJhbEZvcm1JdGVtc1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiAnQWR2YW5jZWQnLFxyXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICdmb3JtJyxcclxuXHRcdFx0XHRcdFx0XHRwYWNrOiAnc3RhcnQnLFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1zOiBbXHJcblx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnU3R5bGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiAnc3R5bGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAndGV4dGJveCcsXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9uY2hhbmdlOiB1cGRhdGVWU3BhY2VIU3BhY2VCb3JkZXJcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdmb3JtJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGF5b3V0OiAnZ3JpZCcsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBhY2tWOiAnc3RhcnQnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiAyLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwYWRkaW5nOiAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGlnbkg6IFsnbGVmdCcsICdyaWdodCddLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0czoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICd0ZXh0Ym94JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhXaWR0aDogNTAsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25jaGFuZ2U6IHVwZGF0ZVN0eWxlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogJ1ZlcnRpY2FsIHNwYWNlJywgbmFtZTogJ3ZzcGFjZScgfSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiAnSG9yaXpvbnRhbCBzcGFjZScsIG5hbWU6ICdoc3BhY2UnIH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogJ0JvcmRlcicsIG5hbWU6ICdib3JkZXInIH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdG9uU3VibWl0OiBvblN1Ym1pdEZvcm1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBTaW1wbGUgZGVmYXVsdCBkaWFsb2dcclxuXHRcdFx0XHR3aW4gPSBlZGl0b3Iud2luZG93TWFuYWdlci5vcGVuKHtcclxuXHRcdFx0XHRcdHRpdGxlOiAnSW5zZXJ0L2VkaXQgaW1hZ2UnLFxyXG5cdFx0XHRcdFx0ZGF0YTogZGF0YSxcclxuXHRcdFx0XHRcdGJvZHk6IGdlbmVyYWxGb3JtSXRlbXMsXHJcblx0XHRcdFx0XHRvblN1Ym1pdDogb25TdWJtaXRGb3JtXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRlZGl0b3Iub24oJ3ByZUluaXQnLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGZ1bmN0aW9uIGhhc0ltYWdlQ2xhc3Mobm9kZSkge1xyXG5cdFx0XHRcdHZhciBjbGFzc05hbWUgPSBub2RlLmF0dHIoJ2NsYXNzJyk7XHJcblx0XHRcdFx0cmV0dXJuIGNsYXNzTmFtZSAmJiAvXFxiaW1hZ2VcXGIvLnRlc3QoY2xhc3NOYW1lKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gdG9nZ2xlQ29udGVudEVkaXRhYmxlU3RhdGUoc3RhdGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKG5vZGVzKSB7XHJcblx0XHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcclxuXHJcblx0XHRcdFx0XHRmdW5jdGlvbiB0b2dnbGVDb250ZW50RWRpdGFibGUobm9kZSkge1xyXG5cdFx0XHRcdFx0XHRub2RlLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScsIHN0YXRlID8gJ3RydWUnIDogbnVsbCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0d2hpbGUgKGktLSkge1xyXG5cdFx0XHRcdFx0XHRub2RlID0gbm9kZXNbaV07XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoaGFzSW1hZ2VDbGFzcyhub2RlKSkge1xyXG5cdFx0XHRcdFx0XHRcdG5vZGUuYXR0cignY29udGVudGVkaXRhYmxlJywgc3RhdGUgPyAnZmFsc2UnIDogbnVsbCk7XHJcblx0XHRcdFx0XHRcdFx0dGlueW1jZS5lYWNoKG5vZGUuZ2V0QWxsKCdmaWdjYXB0aW9uJyksIHRvZ2dsZUNvbnRlbnRFZGl0YWJsZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlZGl0b3IucGFyc2VyLmFkZE5vZGVGaWx0ZXIoJ2ZpZ3VyZScsIHRvZ2dsZUNvbnRlbnRFZGl0YWJsZVN0YXRlKHRydWUpKTtcclxuXHRcdFx0ZWRpdG9yLnNlcmlhbGl6ZXIuYWRkTm9kZUZpbHRlcignZmlndXJlJywgdG9nZ2xlQ29udGVudEVkaXRhYmxlU3RhdGUoZmFsc2UpKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ2ltYWdlJywge1xyXG5cdFx0XHRpY29uOiAnaW1hZ2UnLFxyXG5cdFx0XHR0b29sdGlwOiAnSW5zZXJ0L2VkaXQgaW1hZ2UnLFxyXG5cdFx0XHRvbmNsaWNrOiBjcmVhdGVJbWFnZUxpc3Qoc2hvd0RpYWxvZyksXHJcblx0XHRcdHN0YXRlU2VsZWN0b3I6ICdpbWc6bm90KFtkYXRhLW1jZS1vYmplY3RdLFtkYXRhLW1jZS1wbGFjZWhvbGRlcl0pLGZpZ3VyZS5pbWFnZSdcclxuXHRcdH0pO1xyXG5cclxuXHRcdGVkaXRvci5hZGRNZW51SXRlbSgnaW1hZ2UnLCB7XHJcblx0XHRcdGljb246ICdpbWFnZScsXHJcblx0XHRcdHRleHQ6ICdJbWFnZScsXHJcblx0XHRcdG9uY2xpY2s6IGNyZWF0ZUltYWdlTGlzdChzaG93RGlhbG9nKSxcclxuXHRcdFx0Y29udGV4dDogJ2luc2VydCcsXHJcblx0XHRcdHByZXBlbmRUb0NvbnRleHQ6IHRydWVcclxuXHRcdH0pO1xyXG5cclxuXHRcdGVkaXRvci5hZGRDb21tYW5kKCdtY2VJbWFnZScsIGNyZWF0ZUltYWdlTGlzdChzaG93RGlhbG9nKSk7XHJcblx0fSk7XHJcbiIsImltcG9ydCBcInRpbnltY2VcIjtcclxuLyoqXHJcbiAqIENvbXBpbGVkIGlubGluZSB2ZXJzaW9uLiAoTGlicmFyeSBtb2RlKVxyXG4gKi9cclxuXHJcbi8qanNoaW50IHNtYXJ0dGFiczp0cnVlLCB1bmRlZjp0cnVlLCBsYXRlZGVmOnRydWUsIGN1cmx5OnRydWUsIGJpdHdpc2U6dHJ1ZSwgY2FtZWxjYXNlOnRydWUgKi9cclxuLypnbG9iYWxzICRjb2RlICovXHJcblxyXG4oZnVuY3Rpb24oZXhwb3J0czphbnksIHVuZGVmaW5lZCkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cclxuXHR2YXIgbW9kdWxlcyA9IHt9O1xyXG5cclxuXHRmdW5jdGlvbiByZXF1aXJlKGlkcywgY2FsbGJhY2spIHtcclxuXHRcdHZhciBtb2R1bGUsIGRlZnMgPSBbXTtcclxuXHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkge1xyXG5cdFx0XHRtb2R1bGUgPSBtb2R1bGVzW2lkc1tpXV0gfHwgcmVzb2x2ZShpZHNbaV0pO1xyXG5cdFx0XHRpZiAoIW1vZHVsZSkge1xyXG5cdFx0XHRcdHRocm93ICdtb2R1bGUgZGVmaW5pdGlvbiBkZXBlbmRlY3kgbm90IGZvdW5kOiAnICsgaWRzW2ldO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkZWZzLnB1c2gobW9kdWxlKTtcclxuXHRcdH1cclxuXHJcblx0XHRjYWxsYmFjay5hcHBseShudWxsLCBkZWZzKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGRlZmluZShpZCwgZGVwZW5kZW5jaWVzLCBkZWZpbml0aW9uKSB7XHJcblx0XHRpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJykge1xyXG5cdFx0XHR0aHJvdyAnaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgbW9kdWxlIGlkIG11c3QgYmUgZGVmaW5lZCBhbmQgYmUgYSBzdHJpbmcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChkZXBlbmRlbmNpZXMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aHJvdyAnaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzIG11c3QgYmUgc3BlY2lmaWVkJztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRocm93ICdpbnZhbGlkIG1vZHVsZSBkZWZpbml0aW9uLCBkZWZpbml0aW9uIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJztcclxuXHRcdH1cclxuXHJcblx0XHRyZXF1aXJlKGRlcGVuZGVuY2llcywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdG1vZHVsZXNbaWRdID0gZGVmaW5pdGlvbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBkZWZpbmVkKGlkKSB7XHJcblx0XHRyZXR1cm4gISFtb2R1bGVzW2lkXTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHJlc29sdmUoaWQpIHtcclxuXHRcdHZhciB0YXJnZXQgPSBleHBvcnRzO1xyXG5cdFx0dmFyIGZyYWdtZW50cyA9IGlkLnNwbGl0KC9bLlxcL10vKTtcclxuXHJcblx0XHRmb3IgKHZhciBmaSA9IDA7IGZpIDwgZnJhZ21lbnRzLmxlbmd0aDsgKytmaSkge1xyXG5cdFx0XHRpZiAoIXRhcmdldFtmcmFnbWVudHNbZmldXSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGFyZ2V0ID0gdGFyZ2V0W2ZyYWdtZW50c1tmaV1dO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0YXJnZXQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBleHBvc2UoaWRzKSB7XHJcblx0XHR2YXIgaSwgdGFyZ2V0LCBpZCwgZnJhZ21lbnRzLCBwcml2YXRlTW9kdWxlcztcclxuXHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHRhcmdldCA9IGV4cG9ydHM7XHJcblx0XHRcdGlkID0gaWRzW2ldO1xyXG5cdFx0XHRmcmFnbWVudHMgPSBpZC5zcGxpdCgvWy5cXC9dLyk7XHJcblxyXG5cdFx0XHRmb3IgKHZhciBmaSA9IDA7IGZpIDwgZnJhZ21lbnRzLmxlbmd0aCAtIDE7ICsrZmkpIHtcclxuXHRcdFx0XHRpZiAodGFyZ2V0W2ZyYWdtZW50c1tmaV1dID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHRhcmdldFtmcmFnbWVudHNbZmldXSA9IHt9O1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGFyZ2V0ID0gdGFyZ2V0W2ZyYWdtZW50c1tmaV1dO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0YXJnZXRbZnJhZ21lbnRzW2ZyYWdtZW50cy5sZW5ndGggLSAxXV0gPSBtb2R1bGVzW2lkXTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBFeHBvc2UgcHJpdmF0ZSBtb2R1bGVzIGZvciB1bml0IHRlc3RzXHJcblx0XHRpZiAoZXhwb3J0cy5BTURMQ19URVNUUykge1xyXG5cdFx0XHRwcml2YXRlTW9kdWxlcyA9IGV4cG9ydHMucHJpdmF0ZU1vZHVsZXMgfHwge307XHJcblxyXG5cdFx0XHRmb3IgKGlkIGluIG1vZHVsZXMpIHtcclxuXHRcdFx0XHRwcml2YXRlTW9kdWxlc1tpZF0gPSBtb2R1bGVzW2lkXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGRlbGV0ZSBwcml2YXRlTW9kdWxlc1tpZHNbaV1dO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRleHBvcnRzLnByaXZhdGVNb2R1bGVzID0gcHJpdmF0ZU1vZHVsZXM7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9wbHVnaW5zL3Bhc3RlL2NsYXNzZXMvVXRpbHMuanNcclxuXHJcbi8qKlxyXG4gKiBVdGlscy5qc1xyXG4gKlxyXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXHJcbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE1IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcclxuICpcclxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXHJcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcclxuICovXHJcblxyXG4vKipcclxuICogVGhpcyBjbGFzcyBjb250YWlscyB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgcGFzdGUgcGx1Z2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgdGlueW1jZS5wYXN0ZXBsdWdpbi5VdGlsc1xyXG4gKi9cclxuZGVmaW5lKFwidGlueW1jZS9wYXN0ZXBsdWdpbi9VdGlsc1wiLCBbXHJcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIixcclxuXHRcInRpbnltY2UvaHRtbC9Eb21QYXJzZXJcIixcclxuXHRcInRpbnltY2UvaHRtbC9TY2hlbWFcIlxyXG5dLCBmdW5jdGlvbihUb29scywgRG9tUGFyc2VyLCBTY2hlbWEpIHtcclxuXHRmdW5jdGlvbiBmaWx0ZXIoY29udGVudCwgaXRlbXMpIHtcclxuXHRcdFRvb2xzLmVhY2goaXRlbXMsIGZ1bmN0aW9uKHYpIHtcclxuXHRcdFx0aWYgKHYuY29uc3RydWN0b3IgPT0gUmVnRXhwKSB7XHJcblx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh2LCAnJyk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh2WzBdLCB2WzFdKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnRlbnQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIHRoZSBpbm5lclRleHQgb2YgdGhlIHNwZWNpZmllZCBlbGVtZW50LiBJdCB3aWxsIGhhbmRsZSBlZGdlIGNhc2VzXHJcblx0ICogYW5kIHdvcmtzIGJldHRlciB0aGFuIHRleHRDb250ZW50IG9uIEdlY2tvLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgSFRNTCBzdHJpbmcgdG8gZ2V0IHRleHQgZnJvbS5cclxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9IFN0cmluZyBvZiB0ZXh0IHdpdGggbGluZSBmZWVkcy5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiBpbm5lclRleHQoaHRtbCkge1xyXG5cdFx0dmFyIHNjaGVtYSA9IG5ldyBTY2hlbWEoKSwgZG9tUGFyc2VyID0gbmV3IERvbVBhcnNlcih7fSwgc2NoZW1hKSwgdGV4dCA9ICcnO1xyXG5cdFx0dmFyIHNob3J0RW5kZWRFbGVtZW50cyA9IHNjaGVtYS5nZXRTaG9ydEVuZGVkRWxlbWVudHMoKTtcclxuXHRcdHZhciBpZ25vcmVFbGVtZW50cyA9IFRvb2xzLm1ha2VNYXAoJ3NjcmlwdCBub3NjcmlwdCBzdHlsZSB0ZXh0YXJlYSB2aWRlbyBhdWRpbyBpZnJhbWUgb2JqZWN0JywgJyAnKTtcclxuXHRcdHZhciBibG9ja0VsZW1lbnRzID0gc2NoZW1hLmdldEJsb2NrRWxlbWVudHMoKTtcclxuXHJcblx0XHRmdW5jdGlvbiB3YWxrKG5vZGUpIHtcclxuXHRcdFx0dmFyIG5hbWUgPSBub2RlLm5hbWUsIGN1cnJlbnROb2RlID0gbm9kZTtcclxuXHJcblx0XHRcdGlmIChuYW1lID09PSAnYnInKSB7XHJcblx0XHRcdFx0dGV4dCArPSAnXFxuJztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGltZy9pbnB1dC9oclxyXG5cdFx0XHRpZiAoc2hvcnRFbmRlZEVsZW1lbnRzW25hbWVdKSB7XHJcblx0XHRcdFx0dGV4dCArPSAnICc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEluZ29yZSBzY3JpcHQsIHZpZGVvIGNvbnRlbnRzXHJcblx0XHRcdGlmIChpZ25vcmVFbGVtZW50c1tuYW1lXSkge1xyXG5cdFx0XHRcdHRleHQgKz0gJyAnO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG5vZGUudHlwZSA9PSAzKSB7XHJcblx0XHRcdFx0dGV4dCArPSBub2RlLnZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBXYWxrIGFsbCBjaGlsZHJlblxyXG5cdFx0XHRpZiAoIW5vZGUuc2hvcnRFbmRlZCkge1xyXG5cdFx0XHRcdGlmICgobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkpIHtcclxuXHRcdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdFx0d2Fsayhub2RlKTtcclxuXHRcdFx0XHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5uZXh0KSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBZGQgXFxuIG9yIFxcblxcbiBmb3IgYmxvY2tzIG9yIFBcclxuXHRcdFx0aWYgKGJsb2NrRWxlbWVudHNbbmFtZV0gJiYgY3VycmVudE5vZGUubmV4dCkge1xyXG5cdFx0XHRcdHRleHQgKz0gJ1xcbic7XHJcblxyXG5cdFx0XHRcdGlmIChuYW1lID09ICdwJykge1xyXG5cdFx0XHRcdFx0dGV4dCArPSAnXFxuJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRodG1sID0gZmlsdGVyKGh0bWwsIFtcclxuXHRcdFx0LzwhXFxbW15cXF1dK1xcXT4vZyAvLyBDb25kaXRpb25hbCBjb21tZW50c1xyXG5cdFx0XSk7XHJcblxyXG5cdFx0d2Fsayhkb21QYXJzZXIucGFyc2UoaHRtbCkpO1xyXG5cclxuXHRcdHJldHVybiB0ZXh0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVHJpbXMgdGhlIHNwZWNpZmllZCBIVE1MIGJ5IHJlbW92aW5nIGFsbCBXZWJLaXQgZnJhZ21lbnRzLCBhbGwgZWxlbWVudHMgd3JhcHBpbmcgdGhlIGJvZHkgdHJhaWxpbmcgQlIgZWxlbWVudHMgZXRjLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgSHRtbCBzdHJpbmcgdG8gdHJpbSBjb250ZW50cyBvbi5cclxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9IEh0bWwgY29udGVudHMgdGhhdCBnb3QgdHJpbW1lZC5cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB0cmltSHRtbChodG1sKSB7XHJcblx0XHRmdW5jdGlvbiB0cmltU3BhY2VzKGFsbCwgczEsIHMyKSB7XHJcblx0XHRcdC8vIFdlYktpdCAmbmJzcDsgbWVhbnQgdG8gcHJlc2VydmUgbXVsdGlwbGUgc3BhY2VzIGJ1dCBpbnN0ZWFkIGluc2VydGVkIGFyb3VuZCBhbGwgaW5saW5lIHRhZ3MsXHJcblx0XHRcdC8vIGluY2x1ZGluZyB0aGUgc3BhbnMgd2l0aCBpbmxpbmUgc3R5bGVzIGNyZWF0ZWQgb24gcGFzdGVcclxuXHRcdFx0aWYgKCFzMSAmJiAhczIpIHtcclxuXHRcdFx0XHRyZXR1cm4gJyAnO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gJ1xcdTAwYTAnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGh0bWwgPSBmaWx0ZXIoaHRtbCwgW1xyXG5cdFx0XHQvXltcXHNcXFNdKjxib2R5W14+XSo+XFxzKnxcXHMqPFxcL2JvZHlbXj5dKj5bXFxzXFxTXSokL2csIC8vIFJlbW92ZSBhbnl0aGluZyBidXQgdGhlIGNvbnRlbnRzIHdpdGhpbiB0aGUgQk9EWSBlbGVtZW50XHJcblx0XHRcdC88IS0tU3RhcnRGcmFnbWVudC0tPnw8IS0tRW5kRnJhZ21lbnQtLT4vZywgLy8gSW5uZXIgZnJhZ21lbnRzICh0YWJsZXMgZnJvbSBleGNlbCBvbiBtYWMpXHJcblx0XHRcdFsvKCA/KTxzcGFuIGNsYXNzPVwiQXBwbGUtY29udmVydGVkLXNwYWNlXCI+XFx1MDBhMDxcXC9zcGFuPiggPykvZywgdHJpbVNwYWNlc10sXHJcblx0XHRcdC88YnIgY2xhc3M9XCJBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lXCI+L2csXHJcblx0XHRcdC88YnI+JC9pIC8vIFRyYWlsaW5nIEJSIGVsZW1lbnRzXHJcblx0XHRdKTtcclxuXHJcblx0XHRyZXR1cm4gaHRtbDtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IFNob3VsZCBiZSBpbiBzb21lIGdsb2JhbCBjbGFzc1xyXG5cdGZ1bmN0aW9uIGNyZWF0ZUlkR2VuZXJhdG9yKHByZWZpeCkge1xyXG5cdFx0dmFyIGNvdW50ID0gMDtcclxuXHJcblx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiBwcmVmaXggKyAoY291bnQrKyk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGZpbHRlcjogZmlsdGVyLFxyXG5cdFx0aW5uZXJUZXh0OiBpbm5lclRleHQsXHJcblx0XHR0cmltSHRtbDogdHJpbUh0bWwsXHJcblx0XHRjcmVhdGVJZEdlbmVyYXRvcjogY3JlYXRlSWRHZW5lcmF0b3JcclxuXHR9O1xyXG59KTtcclxuXHJcbi8vIEluY2x1ZGVkIGZyb206IGpzL3RpbnltY2UvcGx1Z2lucy9wYXN0ZS9jbGFzc2VzL1NtYXJ0UGFzdGUuanNcclxuXHJcbi8qKlxyXG4gKiBTbWFydFBhc3RlLmpzXHJcbiAqXHJcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cclxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTYgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxyXG4gKlxyXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcclxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUcmllcyB0byBiZSBzbWFydCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgdXNlciBwYXN0ZXMgaWYgaXQgbG9va3MgbGlrZSBhbiB1cmxcclxuICogaXQgd2lsbCBtYWtlIGEgbGluayBvdXQgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiBJZiBpdCdzIGFuIGltYWdlIHVybCB0aGF0IGxvb2tzXHJcbiAqIGxpa2UgYW4gaW1hZ2UgaXQgd2lsbCBjaGVjayBpZiBpdCdzIGFuIGltYWdlIGFuZCBpbnNlcnQgaXQgYXMgYW4gaW1hZ2UuXHJcbiAqXHJcbiAqIEBjbGFzcyB0aW55bWNlLnBhc3RlcGx1Z2luLlNtYXJ0UGFzdGVcclxuICogQHByaXZhdGVcclxuICovXHJcbmRlZmluZShcInRpbnltY2UvcGFzdGVwbHVnaW4vU21hcnRQYXN0ZVwiLCBbXHJcblx0XCJ0aW55bWNlL3V0aWwvVG9vbHNcIlxyXG5dLCBmdW5jdGlvbiAoVG9vbHMpIHtcclxuXHR2YXIgaXNBYnNvbHV0ZVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcclxuXHRcdHJldHVybiAvXmh0dHBzPzpcXC9cXC9bXFx3XFw/XFwtXFwvKz0uJiVAfiNdKyQvaS50ZXN0KHVybCk7XHJcblx0fTtcclxuXHJcblx0dmFyIGlzSW1hZ2VVcmwgPSBmdW5jdGlvbiAodXJsKSB7XHJcblx0XHRyZXR1cm4gaXNBYnNvbHV0ZVVybCh1cmwpICYmIC8uKGdpZnxqcGU/Z3xwbmcpJC8udGVzdCh1cmwpO1xyXG5cdH07XHJcblxyXG5cdHZhciBjcmVhdGVJbWFnZSA9IGZ1bmN0aW9uIChlZGl0b3IsIHVybCwgcGFzdGVIdG1sKSB7XHJcblx0XHRlZGl0b3IudW5kb01hbmFnZXIuZXh0cmEoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRwYXN0ZUh0bWwoZWRpdG9yLCB1cmwpO1xyXG5cdFx0fSwgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRlZGl0b3IuaW5zZXJ0Q29udGVudCgnPGltZyBzcmM9XCInICsgdXJsICsgJ1wiPicpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fTtcclxuXHJcblx0dmFyIGNyZWF0ZUxpbmsgPSBmdW5jdGlvbiAoZWRpdG9yLCB1cmwsIHBhc3RlSHRtbCkge1xyXG5cdFx0ZWRpdG9yLnVuZG9NYW5hZ2VyLmV4dHJhKGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0cGFzdGVIdG1sKGVkaXRvciwgdXJsKTtcclxuXHRcdH0sIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0ZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRMaW5rJywgZmFsc2UsIHVybCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9O1xyXG5cclxuXHR2YXIgbGlua1NlbGVjdGlvbiA9IGZ1bmN0aW9uIChlZGl0b3IsIGh0bWwsIHBhc3RlSHRtbCkge1xyXG5cdFx0cmV0dXJuIGVkaXRvci5zZWxlY3Rpb24uaXNDb2xsYXBzZWQoKSA9PT0gZmFsc2UgJiYgaXNBYnNvbHV0ZVVybChodG1sKSA/IGNyZWF0ZUxpbmsoZWRpdG9yLCBodG1sLCBwYXN0ZUh0bWwpIDogZmFsc2U7XHJcblx0fTtcclxuXHJcblx0dmFyIGluc2VydEltYWdlID0gZnVuY3Rpb24gKGVkaXRvciwgaHRtbCwgcGFzdGVIdG1sKSB7XHJcblx0XHRyZXR1cm4gaXNJbWFnZVVybChodG1sKSA/IGNyZWF0ZUltYWdlKGVkaXRvciwgaHRtbCwgcGFzdGVIdG1sKSA6IGZhbHNlO1xyXG5cdH07XHJcblxyXG5cdHZhciBwYXN0ZUh0bWwgPSBmdW5jdGlvbiAoZWRpdG9yLCBodG1sKSB7XHJcblx0XHRlZGl0b3IuaW5zZXJ0Q29udGVudChodG1sLCB7XHJcblx0XHRcdG1lcmdlOiBlZGl0b3Iuc2V0dGluZ3MucGFzdGVfbWVyZ2VfZm9ybWF0cyAhPT0gZmFsc2UsXHJcblx0XHRcdHBhc3RlOiB0cnVlXHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9O1xyXG5cclxuXHR2YXIgc21hcnRJbnNlcnRDb250ZW50ID0gZnVuY3Rpb24gKGVkaXRvciwgaHRtbCkge1xyXG5cdFx0VG9vbHMuZWFjaChbXHJcblx0XHRcdGxpbmtTZWxlY3Rpb24sXHJcblx0XHRcdGluc2VydEltYWdlLFxyXG5cdFx0XHRwYXN0ZUh0bWxcclxuXHRcdF0sIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuXHRcdFx0cmV0dXJuIGFjdGlvbihlZGl0b3IsIGh0bWwsIHBhc3RlSHRtbCkgIT09IHRydWU7XHJcblx0XHR9KTtcclxuXHR9O1xyXG5cclxuXHR2YXIgaW5zZXJ0Q29udGVudCA9IGZ1bmN0aW9uIChlZGl0b3IsIGh0bWwpIHtcclxuXHRcdGlmIChlZGl0b3Iuc2V0dGluZ3Muc21hcnRfcGFzdGUgPT09IGZhbHNlKSB7XHJcblx0XHRcdHBhc3RlSHRtbChlZGl0b3IsIGh0bWwpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c21hcnRJbnNlcnRDb250ZW50KGVkaXRvciwgaHRtbCk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGlzSW1hZ2VVcmw6IGlzSW1hZ2VVcmwsXHJcblx0XHRpc0Fic29sdXRlVXJsOiBpc0Fic29sdXRlVXJsLFxyXG5cdFx0aW5zZXJ0Q29udGVudDogaW5zZXJ0Q29udGVudFxyXG5cdH07XHJcbn0pO1xyXG5cclxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9wbHVnaW5zL3Bhc3RlL2NsYXNzZXMvQ2xpcGJvYXJkLmpzXHJcblxyXG4vKipcclxuICogQ2xpcGJvYXJkLmpzXHJcbiAqXHJcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cclxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTUgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxyXG4gKlxyXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcclxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGxvZ2ljIGZvciBnZXR0aW5nIEhUTUwgY29udGVudHMgb3V0IG9mIHRoZSBjbGlwYm9hcmQuXHJcbiAqXHJcbiAqIFdlIG5lZWQgdG8gbWFrZSBhIGxvdCBvZiB1Z2x5IGhhY2tzIHRvIGdldCB0aGUgY29udGVudHMgb3V0IG9mIHRoZSBjbGlwYm9hcmQgc2luY2VcclxuICogdGhlIFczQyBDbGlwYm9hcmQgQVBJIGlzIGJyb2tlbiBpbiBhbGwgYnJvd3NlcnMgdGhhdCBoYXZlIGl0OiBHZWNrby9XZWJLaXQvQmxpbmsuXHJcbiAqIFdlIG1pZ2h0IHJld3JpdGUgdGhpcyB0aGUgd2F5IHRob3NlIEFQSTpzIHN0YWJpbGl6ZS4gQnJvd3NlcnMgZG9lc24ndCBoYW5kbGUgcGFzdGluZ1xyXG4gKiBmcm9tIGFwcGxpY2F0aW9ucyBsaWtlIFdvcmQgdGhlIHNhbWUgd2F5IGFzIGl0IGRvZXMgd2hlbiBwYXN0aW5nIGludG8gYSBjb250ZW50RWRpdGFibGUgYXJlYVxyXG4gKiBzbyB3ZSBuZWVkIHRvIGRvIGxvdHMgb2YgZXh0cmEgd29yayB0byB0cnkgdG8gZ2V0IHRvIHRoaXMgY2xpcGJvYXJkIGRhdGEuXHJcbiAqXHJcbiAqIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gc3RlcHM6XHJcbiAqICAxLiBPbiBrZXlkb3duIHdpdGggcGFzdGUga2V5cyBDdHJsK1Ygb3IgU2hpZnQrSW5zZXJ0IGNyZWF0ZVxyXG4gKiAgICAgYSBwYXN0ZSBiaW4gZWxlbWVudCBhbmQgbW92ZSBmb2N1cyB0byB0aGF0IGVsZW1lbnQuXHJcbiAqICAyLiBXYWl0IGZvciB0aGUgYnJvd3NlciB0byBmaXJlIGEgXCJwYXN0ZVwiIGV2ZW50IGFuZCBnZXQgdGhlIGNvbnRlbnRzIG91dCBvZiB0aGUgcGFzdGUgYmluLlxyXG4gKiAgMy4gQ2hlY2sgaWYgdGhlIHBhc3RlIHdhcyBzdWNjZXNzZnVsIGlmIHRydWUsIHByb2Nlc3MgdGhlIEhUTUwuXHJcbiAqICAoNCkuIElmIHRoZSBwYXN0ZSB3YXMgdW5zdWNjZXNzZnVsIHVzZSBJRSBleGVjQ29tbWFuZCwgQ2xpcGJvYXJkIEFQSSwgZG9jdW1lbnQuZGF0YVRyYW5zZmVyIG9sZCBXZWJLaXQgQVBJIGV0Yy5cclxuICpcclxuICogQGNsYXNzIHRpbnltY2UucGFzdGVwbHVnaW4uQ2xpcGJvYXJkXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5kZWZpbmUoXCJ0aW55bWNlL3Bhc3RlcGx1Z2luL0NsaXBib2FyZFwiLCBbXHJcblx0XCJ0aW55bWNlL0VudlwiLFxyXG5cdFwidGlueW1jZS9kb20vUmFuZ2VVdGlsc1wiLFxyXG5cdFwidGlueW1jZS91dGlsL1ZLXCIsXHJcblx0XCJ0aW55bWNlL3Bhc3RlcGx1Z2luL1V0aWxzXCIsXHJcblx0XCJ0aW55bWNlL3Bhc3RlcGx1Z2luL1NtYXJ0UGFzdGVcIixcclxuXHRcInRpbnltY2UvdXRpbC9EZWxheVwiXHJcbl0sIGZ1bmN0aW9uKEVudiwgUmFuZ2VVdGlscywgVkssIFV0aWxzLCBTbWFydFBhc3RlLCBEZWxheSkge1xyXG5cdHJldHVybiBmdW5jdGlvbihlZGl0b3IpIHtcclxuXHRcdHZhciBzZWxmID0gdGhpcywgcGFzdGVCaW5FbG0sIGxhc3RSbmcsIGtleWJvYXJkUGFzdGVUaW1lU3RhbXAgPSAwLCBkcmFnZ2luZ0ludGVybmFsbHkgPSBmYWxzZTtcclxuXHRcdHZhciBwYXN0ZUJpbkRlZmF1bHRDb250ZW50ID0gJyVNQ0VQQVNURUJJTiUnLCBrZXlib2FyZFBhc3RlUGxhaW5UZXh0U3RhdGU7XHJcblx0XHR2YXIgbWNlSW50ZXJuYWxVcmxQcmVmaXggPSAnZGF0YTp0ZXh0L21jZS1pbnRlcm5hbCwnO1xyXG5cdFx0dmFyIHVuaXF1ZUlkID0gVXRpbHMuY3JlYXRlSWRHZW5lcmF0b3IoXCJtY2VjbGlwXCIpO1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUGFzdGVzIHRoZSBzcGVjaWZpZWQgSFRNTC4gVGhpcyBtZWFucyB0aGF0IHRoZSBIVE1MIGlzIGZpbHRlcmVkIGFuZCB0aGVuXHJcblx0XHQgKiBpbnNlcnRlZCBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvci4gSXQgd2lsbCBhbHNvIGZpcmUgcGFzdGUgZXZlbnRzXHJcblx0XHQgKiBmb3IgY3VzdG9tIHVzZXIgZmlsdGVyaW5nLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIEhUTUwgY29kZSB0byBwYXN0ZSBpbnRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gcGFzdGVIdG1sKGh0bWwpIHtcclxuXHRcdFx0dmFyIGFyZ3MsIGRvbSA9IGVkaXRvci5kb207XHJcblxyXG5cdFx0XHRhcmdzID0gZWRpdG9yLmZpcmUoJ0JlZm9yZVBhc3RlUHJlUHJvY2VzcycsIHtjb250ZW50OiBodG1sfSk7IC8vIEludGVybmFsIGV2ZW50IHVzZWQgYnkgUXVpcmtzXHJcblx0XHRcdGFyZ3MgPSBlZGl0b3IuZmlyZSgnUGFzdGVQcmVQcm9jZXNzJywgYXJncyk7XHJcblx0XHRcdGh0bWwgPSBhcmdzLmNvbnRlbnQ7XHJcblxyXG5cdFx0XHRpZiAoIWFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcclxuXHRcdFx0XHQvLyBVc2VyIGhhcyBib3VuZCBQYXN0ZVBvc3RQcm9jZXNzIGV2ZW50cyB0aGVuIHdlIG5lZWQgdG8gcGFzcyBpdCB0aHJvdWdoIGEgRE9NIG5vZGVcclxuXHRcdFx0XHQvLyBUaGlzIGlzIG5vdCBpZGVhbCBidXQgd2UgZG9uJ3Qgd2FudCB0byBsZXQgdGhlIGJyb3dzZXIgbWVzcyB1cCB0aGUgSFRNTCBmb3IgZXhhbXBsZVxyXG5cdFx0XHRcdC8vIHNvbWUgYnJvd3NlcnMgYWRkICZuYnNwOyB0byBQIHRhZ3MgZXRjXHJcblx0XHRcdFx0aWYgKGVkaXRvci5oYXNFdmVudExpc3RlbmVycygnUGFzdGVQb3N0UHJvY2VzcycpICYmICFhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XHJcblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGF0dGFjaCB0aGUgZWxlbWVudCB0byB0aGUgRE9NIHNvIFNpenpsZSBzZWxlY3RvcnMgd29yayBvbiB0aGUgY29udGVudHNcclxuXHRcdFx0XHRcdHZhciB0ZW1wQm9keSA9IGRvbS5hZGQoZWRpdG9yLmdldEJvZHkoKSwgJ2RpdicsIHtzdHlsZTogJ2Rpc3BsYXk6bm9uZSd9LCBodG1sKTtcclxuXHRcdFx0XHRcdGFyZ3MgPSBlZGl0b3IuZmlyZSgnUGFzdGVQb3N0UHJvY2VzcycsIHtub2RlOiB0ZW1wQm9keX0pO1xyXG5cdFx0XHRcdFx0ZG9tLnJlbW92ZSh0ZW1wQm9keSk7XHJcblx0XHRcdFx0XHRodG1sID0gYXJncy5ub2RlLmlubmVySFRNTDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xyXG5cdFx0XHRcdFx0U21hcnRQYXN0ZS5pbnNlcnRDb250ZW50KGVkaXRvciwgaHRtbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBQYXN0ZXMgdGhlIHNwZWNpZmllZCB0ZXh0LiBUaGlzIG1lYW5zIHRoYXQgdGhlIHBsYWluIHRleHQgaXMgcHJvY2Vzc2VkXHJcblx0XHQgKiBhbmQgY29udmVydGVkIGludG8gQlIgYW5kIFAgZWxlbWVudHMuIEl0IHdpbGwgZmlyZSBwYXN0ZSBldmVudHMgZm9yIGN1c3RvbSBmaWx0ZXJpbmcuXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHRleHQgVGV4dCB0byBwYXN0ZSBhcyB0aGUgY3VycmVudCBzZWxlY3Rpb24gbG9jYXRpb24uXHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIHBhc3RlVGV4dCh0ZXh0KSB7XHJcblx0XHRcdHRleHQgPSBlZGl0b3IuZG9tLmVuY29kZSh0ZXh0KS5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpO1xyXG5cclxuXHRcdFx0dmFyIHN0YXJ0QmxvY2sgPSBlZGl0b3IuZG9tLmdldFBhcmVudChlZGl0b3Iuc2VsZWN0aW9uLmdldFN0YXJ0KCksIGVkaXRvci5kb20uaXNCbG9jayk7XHJcblxyXG5cdFx0XHQvLyBDcmVhdGUgc3RhcnQgYmxvY2sgaHRtbCBmb3IgZXhhbXBsZSA8cCBhdHRyPVwidmFsdWVcIj5cclxuXHRcdFx0dmFyIGZvcmNlZFJvb3RCbG9ja05hbWUgPSBlZGl0b3Iuc2V0dGluZ3MuZm9yY2VkX3Jvb3RfYmxvY2s7XHJcblx0XHRcdHZhciBmb3JjZWRSb290QmxvY2tTdGFydEh0bWw7XHJcblx0XHRcdGlmIChmb3JjZWRSb290QmxvY2tOYW1lKSB7XHJcblx0XHRcdFx0Zm9yY2VkUm9vdEJsb2NrU3RhcnRIdG1sID0gZWRpdG9yLmRvbS5jcmVhdGVIVE1MKGZvcmNlZFJvb3RCbG9ja05hbWUsIGVkaXRvci5zZXR0aW5ncy5mb3JjZWRfcm9vdF9ibG9ja19hdHRycyk7XHJcblx0XHRcdFx0Zm9yY2VkUm9vdEJsb2NrU3RhcnRIdG1sID0gZm9yY2VkUm9vdEJsb2NrU3RhcnRIdG1sLnN1YnN0cigwLCBmb3JjZWRSb290QmxvY2tTdGFydEh0bWwubGVuZ3RoIC0gMykgKyAnPic7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICgoc3RhcnRCbG9jayAmJiAvXihQUkV8RElWKSQvLnRlc3Qoc3RhcnRCbG9jay5ub2RlTmFtZSkpIHx8ICFmb3JjZWRSb290QmxvY2tOYW1lKSB7XHJcblx0XHRcdFx0dGV4dCA9IFV0aWxzLmZpbHRlcih0ZXh0LCBbXHJcblx0XHRcdFx0XHRbL1xcbi9nLCBcIjxicj5cIl1cclxuXHRcdFx0XHRdKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0ZXh0ID0gVXRpbHMuZmlsdGVyKHRleHQsIFtcclxuXHRcdFx0XHRcdFsvXFxuXFxuL2csIFwiPC9wPlwiICsgZm9yY2VkUm9vdEJsb2NrU3RhcnRIdG1sXSxcclxuXHRcdFx0XHRcdFsvXiguKjxcXC9wPikoPHA+KSQvLCBmb3JjZWRSb290QmxvY2tTdGFydEh0bWwgKyAnJDEnXSxcclxuXHRcdFx0XHRcdFsvXFxuL2csIFwiPGJyIC8+XCJdXHJcblx0XHRcdFx0XSk7XHJcblxyXG5cdFx0XHRcdGlmICh0ZXh0LmluZGV4T2YoJzxwPicpICE9IC0xKSB7XHJcblx0XHRcdFx0XHR0ZXh0ID0gZm9yY2VkUm9vdEJsb2NrU3RhcnRIdG1sICsgdGV4dDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHBhc3RlSHRtbCh0ZXh0KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZXMgYSBwYXN0ZSBiaW4gZWxlbWVudCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgY3VycmVudCBjYXJldCBsb2NhdGlvbiBhbmQgcGxhY2VzIHRoZSBmb2N1cyBpbnNpZGUgdGhhdCBlbGVtZW50XHJcblx0XHQgKiBzbyB0aGF0IHdoZW4gdGhlIHJlYWwgcGFzdGUgZXZlbnQgb2NjdXJzIHRoZSBjb250ZW50cyBnZXRzIGluc2VydGVkIGludG8gdGhpcyBlbGVtZW50XHJcblx0XHQgKiBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IGVkaXRvciBzZWxlY3Rpb24gZWxlbWVudC5cclxuXHRcdCAqL1xyXG5cdFx0ZnVuY3Rpb24gY3JlYXRlUGFzdGVCaW4oKSB7XHJcblx0XHRcdHZhciBkb20gPSBlZGl0b3IuZG9tLCBib2R5ID0gZWRpdG9yLmdldEJvZHkoKTtcclxuXHRcdFx0dmFyIHZpZXdwb3J0ID0gZWRpdG9yLmRvbS5nZXRWaWV3UG9ydChlZGl0b3IuZ2V0V2luKCkpLCBzY3JvbGxUb3AgPSB2aWV3cG9ydC55LCB0b3AgPSAyMDtcclxuXHRcdFx0dmFyIHNjcm9sbENvbnRhaW5lcjtcclxuXHJcblx0XHRcdGxhc3RSbmcgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJuZygpO1xyXG5cclxuXHRcdFx0aWYgKGVkaXRvci5pbmxpbmUpIHtcclxuXHRcdFx0XHRzY3JvbGxDb250YWluZXIgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNjcm9sbENvbnRhaW5lcigpO1xyXG5cclxuXHRcdFx0XHQvLyBDYW4ndCBhbHdheXMgcmVseSBvbiBzY3JvbGxUb3AgcmV0dXJuaW5nIGEgdXNlZnVsIHZhbHVlLlxyXG5cdFx0XHRcdC8vIEl0IHJldHVybnMgMCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgc2Nyb2xsVG9wIGZvciB0aGUgZWxlbWVudCBvciBpcyBub24tc2Nyb2xsYWJsZVxyXG5cdFx0XHRcdGlmIChzY3JvbGxDb250YWluZXIgJiYgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA+IDApIHtcclxuXHRcdFx0XHRcdHNjcm9sbFRvcCA9IHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3A7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogUmV0dXJucyB0aGUgcmVjdCBvZiB0aGUgY3VycmVudCBjYXJldCBpZiB0aGUgY2FyZXQgaXMgaW4gYW4gZW1wdHkgYmxvY2sgYmVmb3JlIGFcclxuXHRcdFx0ICogQlIgd2UgaW5zZXJ0IGEgdGVtcG9yYXJ5IGludmlzaWJsZSBjaGFyYWN0ZXIgdGhhdCB3ZSBnZXQgdGhlIHJlY3QgdGhpcyB3YXkgd2UgYWx3YXlzIGdldCBhIHByb3BlciByZWN0LlxyXG5cdFx0XHQgKlxyXG5cdFx0XHQgKiBUT0RPOiBUaGlzIG1pZ2h0IGJlIHVzZWZ1bCBpbiBjb3JlLlxyXG5cdFx0XHQgKi9cclxuXHRcdFx0ZnVuY3Rpb24gZ2V0Q2FyZXRSZWN0KHJuZykge1xyXG5cdFx0XHRcdHZhciByZWN0cywgdGV4dE5vZGUsIG5vZGUsIGNvbnRhaW5lciA9IHJuZy5zdGFydENvbnRhaW5lcjtcclxuXHJcblx0XHRcdFx0cmVjdHMgPSBybmcuZ2V0Q2xpZW50UmVjdHMoKTtcclxuXHRcdFx0XHRpZiAocmVjdHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmVjdHNbMF07XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIXJuZy5jb2xsYXBzZWQgfHwgY29udGFpbmVyLm5vZGVUeXBlICE9IDEpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdG5vZGUgPSBjb250YWluZXIuY2hpbGROb2Rlc1tsYXN0Um5nLnN0YXJ0T2Zmc2V0XTtcclxuXHJcblx0XHRcdFx0Ly8gU2tpcCBlbXB0eSB3aGl0ZXNwYWNlIG5vZGVzXHJcblx0XHRcdFx0d2hpbGUgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PSAzICYmICFub2RlLmRhdGEubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRub2RlID0gbm9kZS5uZXh0U2libGluZztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICghbm9kZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxvY2F0aW9uIGlzIHw8YnI+XHJcblx0XHRcdFx0Ly8gVE9ETzogTWlnaHQgbmVlZCB0byBleHBhbmQgdGhpcyB0byBzYXkgfDx0YWJsZT5cclxuXHRcdFx0XHRpZiAobm9kZS50YWdOYW1lID09ICdCUicpIHtcclxuXHRcdFx0XHRcdHRleHROb2RlID0gZG9tLmRvYy5jcmVhdGVUZXh0Tm9kZSgnXFx1RkVGRicpO1xyXG5cdFx0XHRcdFx0bm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0Tm9kZSwgbm9kZSk7XHJcblxyXG5cdFx0XHRcdFx0cm5nID0gZG9tLmNyZWF0ZVJuZygpO1xyXG5cdFx0XHRcdFx0cm5nLnNldFN0YXJ0QmVmb3JlKHRleHROb2RlKTtcclxuXHRcdFx0XHRcdHJuZy5zZXRFbmRBZnRlcih0ZXh0Tm9kZSk7XHJcblxyXG5cdFx0XHRcdFx0cmVjdHMgPSBybmcuZ2V0Q2xpZW50UmVjdHMoKTtcclxuXHRcdFx0XHRcdGRvbS5yZW1vdmUodGV4dE5vZGUpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHJlY3RzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlY3RzWzBdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRvcCBjb3JkaW5hdGUgdGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgc2Nyb2xsaW5nIHRvIHRvcCBvZiBkb2N1bWVudFxyXG5cdFx0XHQvLyBXZSB3YW50IHRoZSBwYXN0ZSBiaW4gdG8gYmUgYXMgY2xvc2UgdG8gdGhlIGNhcmV0IGFzIHBvc3NpYmxlIHRvIGF2b2lkIHNjcm9sbGluZ1xyXG5cdFx0XHRpZiAobGFzdFJuZy5nZXRDbGllbnRSZWN0cykge1xyXG5cdFx0XHRcdHZhciByZWN0ID0gZ2V0Q2FyZXRSZWN0KGxhc3RSbmcpO1xyXG5cclxuXHRcdFx0XHRpZiAocmVjdCkge1xyXG5cdFx0XHRcdFx0Ly8gQ2xpZW50IHJlY3RzIGdldHMgdXMgY2xvc2VzIHRvIHRoZSBhY3R1YWxcclxuXHRcdFx0XHRcdC8vIGNhcmV0IGxvY2F0aW9uIGluIGZvciBleGFtcGxlIGEgd3JhcHBlZCBwYXJhZ3JhcGggYmxvY2tcclxuXHRcdFx0XHRcdHRvcCA9IHNjcm9sbFRvcCArIChyZWN0LnRvcCAtIGRvbS5nZXRQb3MoYm9keSkueSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRvcCA9IHNjcm9sbFRvcDtcclxuXHJcblx0XHRcdFx0XHQvLyBDaGVjayBpZiB3ZSBjYW4gZmluZCBhIGNsb3NlciBsb2NhdGlvbiBieSBjaGVja2luZyB0aGUgcmFuZ2UgZWxlbWVudFxyXG5cdFx0XHRcdFx0dmFyIGNvbnRhaW5lciA9IGxhc3RSbmcuc3RhcnRDb250YWluZXI7XHJcblx0XHRcdFx0XHRpZiAoY29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMyAmJiBjb250YWluZXIucGFyZW50Tm9kZSAhPSBib2R5KSB7XHJcblx0XHRcdFx0XHRcdFx0Y29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChjb250YWluZXIubm9kZVR5cGUgPT0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdHRvcCA9IGRvbS5nZXRQb3MoY29udGFpbmVyLCBzY3JvbGxDb250YWluZXIgfHwgYm9keSkueTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ3JlYXRlIGEgcGFzdGViaW5cclxuXHRcdFx0cGFzdGVCaW5FbG0gPSBkb20uYWRkKGVkaXRvci5nZXRCb2R5KCksICdkaXYnLCB7XHJcblx0XHRcdFx0aWQ6IFwibWNlcGFzdGViaW5cIixcclxuXHRcdFx0XHRjb250ZW50RWRpdGFibGU6IHRydWUsXHJcblx0XHRcdFx0XCJkYXRhLW1jZS1ib2d1c1wiOiBcImFsbFwiLFxyXG5cdFx0XHRcdHN0eWxlOiAncG9zaXRpb246IGFic29sdXRlOyB0b3A6ICcgKyB0b3AgKyAncHg7JyArXHJcblx0XHRcdFx0XHQnd2lkdGg6IDEwcHg7IGhlaWdodDogMTBweDsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogMCdcclxuXHRcdFx0fSwgcGFzdGVCaW5EZWZhdWx0Q29udGVudCk7XHJcblxyXG5cdFx0XHQvLyBNb3ZlIHBhc3RlIGJpbiBvdXQgb2Ygc2lnaHQgc2luY2UgdGhlIGNvbnRyb2xTZWxlY3Rpb24gcmVjdCBnZXRzIGRpc3BsYXllZCBvdGhlcndpc2Ugb24gSUUgYW5kIEdlY2tvXHJcblx0XHRcdGlmIChFbnYuaWUgfHwgRW52LmdlY2tvKSB7XHJcblx0XHRcdFx0ZG9tLnNldFN0eWxlKHBhc3RlQmluRWxtLCAnbGVmdCcsIGRvbS5nZXRTdHlsZShib2R5LCAnZGlyZWN0aW9uJywgdHJ1ZSkgPT0gJ3J0bCcgPyAweEZGRkYgOiAtMHhGRkZGKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUHJldmVudCBmb2N1cyBldmVudHMgZnJvbSBidWJiZWxpbmcgZml4ZWQgRm9jdXNNYW5hZ2VyIGlzc3Vlc1xyXG5cdFx0XHRkb20uYmluZChwYXN0ZUJpbkVsbSwgJ2JlZm9yZWRlYWN0aXZhdGUgZm9jdXNpbiBmb2N1c291dCcsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHBhc3RlQmluRWxtLmZvY3VzKCk7XHJcblx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0KHBhc3RlQmluRWxtLCB0cnVlKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJlbW92ZXMgdGhlIHBhc3RlIGJpbiBpZiBpdCBleGlzdHMuXHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIHJlbW92ZVBhc3RlQmluKCkge1xyXG5cdFx0XHRpZiAocGFzdGVCaW5FbG0pIHtcclxuXHRcdFx0XHR2YXIgcGFzdGVCaW5DbG9uZTtcclxuXHJcblx0XHRcdFx0Ly8gV2ViS2l0L0JsaW5rIG1pZ2h0IGNsb25lIHRoZSBkaXYgc29cclxuXHRcdFx0XHQvLyBsZXRzIG1ha2Ugc3VyZSB3ZSByZW1vdmUgYWxsIGNsb25lc1xyXG5cdFx0XHRcdC8vIFRPRE86IE1hbiBvIG1hbiBpcyB0aGlzIHVnbHkuIFdlYktpdCBpcyB0aGUgbmV3IElFISBSZW1vdmUgdGhpcyBpZiB0aGV5IGV2ZXIgZml4IGl0IVxyXG5cdFx0XHRcdHdoaWxlICgocGFzdGVCaW5DbG9uZSA9IGVkaXRvci5kb20uZ2V0KCdtY2VwYXN0ZWJpbicpKSkge1xyXG5cdFx0XHRcdFx0ZWRpdG9yLmRvbS5yZW1vdmUocGFzdGVCaW5DbG9uZSk7XHJcblx0XHRcdFx0XHRlZGl0b3IuZG9tLnVuYmluZChwYXN0ZUJpbkNsb25lKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChsYXN0Um5nKSB7XHJcblx0XHRcdFx0XHRlZGl0b3Iuc2VsZWN0aW9uLnNldFJuZyhsYXN0Um5nKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHBhc3RlQmluRWxtID0gbGFzdFJuZyA9IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgcGFzdGUgYmluIGFzIGEgSFRNTCBzdHJpbmcuXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYXN0ZSBiaW4uXHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGdldFBhc3RlQmluSHRtbCgpIHtcclxuXHRcdFx0dmFyIGh0bWwgPSAnJywgcGFzdGVCaW5DbG9uZXMsIGksIGNsb25lLCBjbG9uZUh0bWw7XHJcblxyXG5cdFx0XHQvLyBTaW5jZSBXZWJLaXQvQ2hyb21lIG1pZ2h0IGNsb25lIHRoZSBwYXN0ZSBiaW4gd2hlbiBwYXN0aW5nXHJcblx0XHRcdC8vIGZvciBleGFtcGxlOiA8aW1nIHN0eWxlPVwiZmxvYXQ6IHJpZ2h0XCI+IHdlIG5lZWQgdG8gY2hlY2sgaWYgYW55IG9mIHRoZW0gY29udGFpbnMgc29tZSB1c2VmdWwgaHRtbC5cclxuXHRcdFx0Ly8gVE9ETzogTWFuIG8gbWFuIGlzIHRoaXMgdWdseS4gV2ViS2l0IGlzIHRoZSBuZXcgSUUhIFJlbW92ZSB0aGlzIGlmIHRoZXkgZXZlciBmaXggaXQhXHJcblx0XHRcdHBhc3RlQmluQ2xvbmVzID0gZWRpdG9yLmRvbS5zZWxlY3QoJ2RpdltpZD1tY2VwYXN0ZWJpbl0nKTtcclxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHBhc3RlQmluQ2xvbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y2xvbmUgPSBwYXN0ZUJpbkNsb25lc1tpXTtcclxuXHJcblx0XHRcdFx0Ly8gUGFzdGluZyBwbGFpbiB0ZXh0IHByb2R1Y2VzIHBhc3RlYmlucyBpbiBwYXN0ZWJpbmRzIG1ha2VzIHNlbmNlIHJpZ2h0IT9cclxuXHRcdFx0XHRpZiAoY2xvbmUuZmlyc3RDaGlsZCAmJiBjbG9uZS5maXJzdENoaWxkLmlkID09ICdtY2VwYXN0ZWJpbicpIHtcclxuXHRcdFx0XHRcdGNsb25lID0gY2xvbmUuZmlyc3RDaGlsZDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNsb25lSHRtbCA9IGNsb25lLmlubmVySFRNTDtcclxuXHRcdFx0XHRpZiAoaHRtbCAhPSBwYXN0ZUJpbkRlZmF1bHRDb250ZW50KSB7XHJcblx0XHRcdFx0XHRodG1sICs9IGNsb25lSHRtbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBodG1sO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0cyB2YXJpb3VzIGNvbnRlbnQgdHlwZXMgb3V0IG9mIGEgZGF0YXRyYW5zZmVyIG9iamVjdC5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0RhdGFUcmFuc2Zlcn0gZGF0YVRyYW5zZmVyIEV2ZW50IGZpcmVkIG9uIHBhc3RlLlxyXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBPYmplY3Qgd2l0aCBtaW1lIHR5cGVzIGFuZCBkYXRhIGZvciB0aG9zZSBtaW1lIHR5cGVzLlxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBnZXREYXRhVHJhbnNmZXJJdGVtcyhkYXRhVHJhbnNmZXIpIHtcclxuXHRcdFx0dmFyIGl0ZW1zID0ge307XHJcblxyXG5cdFx0XHRpZiAoZGF0YVRyYW5zZmVyKSB7XHJcblx0XHRcdFx0Ly8gVXNlIG9sZCBXZWJLaXQvSUUgQVBJXHJcblx0XHRcdFx0aWYgKGRhdGFUcmFuc2Zlci5nZXREYXRhKSB7XHJcblx0XHRcdFx0XHR2YXIgbGVnYWN5VGV4dCA9IGRhdGFUcmFuc2Zlci5nZXREYXRhKCdUZXh0Jyk7XHJcblx0XHRcdFx0XHRpZiAobGVnYWN5VGV4dCAmJiBsZWdhY3lUZXh0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0aWYgKGxlZ2FjeVRleHQuaW5kZXhPZihtY2VJbnRlcm5hbFVybFByZWZpeCkgPT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0XHRpdGVtc1sndGV4dC9wbGFpbiddID0gbGVnYWN5VGV4dDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGRhdGFUcmFuc2Zlci50eXBlcykge1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhVHJhbnNmZXIudHlwZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0dmFyIGNvbnRlbnRUeXBlID0gZGF0YVRyYW5zZmVyLnR5cGVzW2ldO1xyXG5cdFx0XHRcdFx0XHQvL2l0ZW1zW2NvbnRlbnRUeXBlXSA9IGRhdGFUcmFuc2Zlci5nZXREYXRhKGNvbnRlbnRUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbY29udGVudFR5cGVdID0gZGF0YVRyYW5zZmVyW2NvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCldIHx8IGRhdGFUcmFuc2Zlci5nZXREYXRhKGNvbnRlbnRUeXBlKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGl0ZW1zO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0cyB2YXJpb3VzIGNvbnRlbnQgdHlwZXMgb3V0IG9mIHRoZSBDbGlwYm9hcmQgQVBJLiBJdCB3aWxsIGFsc28gZ2V0IHRoZVxyXG5cdFx0ICogcGxhaW4gdGV4dCB1c2luZyBvbGRlciBJRSBhbmQgV2ViS2l0IEFQSTpzLlxyXG5cdFx0ICpcclxuXHRcdCAqIEBwYXJhbSB7Q2xpcGJvYXJkRXZlbnR9IGNsaXBib2FyZEV2ZW50IEV2ZW50IGZpcmVkIG9uIHBhc3RlLlxyXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBPYmplY3Qgd2l0aCBtaW1lIHR5cGVzIGFuZCBkYXRhIGZvciB0aG9zZSBtaW1lIHR5cGVzLlxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiBnZXRDbGlwYm9hcmRDb250ZW50KGNsaXBib2FyZEV2ZW50KSB7XHJcblx0XHRcdHJldHVybiBnZXREYXRhVHJhbnNmZXJJdGVtcyhjbGlwYm9hcmRFdmVudC5jbGlwYm9hcmREYXRhIHx8IGVkaXRvci5nZXREb2MoKS5kYXRhVHJhbnNmZXIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIGhhc0h0bWxPclRleHQoY29udGVudCkge1xyXG5cdFx0XHRyZXR1cm4gaGFzQ29udGVudFR5cGUoY29udGVudCwgJ3RleHQvaHRtbCcpIHx8IGhhc0NvbnRlbnRUeXBlKGNvbnRlbnQsICd0ZXh0L3BsYWluJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gZ2V0QmFzZTY0RnJvbVVyaSh1cmkpIHtcclxuXHRcdFx0dmFyIGlkeDtcclxuXHJcblx0XHRcdGlkeCA9IHVyaS5pbmRleE9mKCcsJyk7XHJcblx0XHRcdGlmIChpZHggIT09IC0xKSB7XHJcblx0XHRcdFx0cmV0dXJuIHVyaS5zdWJzdHIoaWR4ICsgMSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIGlzVmFsaWREYXRhVXJpSW1hZ2Uoc2V0dGluZ3MsIGltZ0VsbSkge1xyXG5cdFx0XHRyZXR1cm4gc2V0dGluZ3MuaW1hZ2VzX2RhdGFpbWdfZmlsdGVyID8gc2V0dGluZ3MuaW1hZ2VzX2RhdGFpbWdfZmlsdGVyKGltZ0VsbSkgOiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIHBhc3RlSW1hZ2Uocm5nLCByZWFkZXIsIGJsb2IpIHtcclxuXHRcdFx0aWYgKHJuZykge1xyXG5cdFx0XHRcdGVkaXRvci5zZWxlY3Rpb24uc2V0Um5nKHJuZyk7XHJcblx0XHRcdFx0cm5nID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGRhdGFVcmkgPSByZWFkZXIucmVzdWx0O1xyXG5cdFx0XHR2YXIgYmFzZTY0ID0gZ2V0QmFzZTY0RnJvbVVyaShkYXRhVXJpKTtcclxuXHJcblx0XHRcdHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHRcdFx0aW1nLnNyYyA9IGRhdGFVcmk7XHJcblxyXG5cdFx0XHQvLyBUT0RPOiBNb3ZlIHRoZSBidWxrIG9mIHRoZSBjYWNoZSBsb2dpYyB0byBFZGl0b3JVcGxvYWRcclxuXHRcdFx0aWYgKGlzVmFsaWREYXRhVXJpSW1hZ2UoZWRpdG9yLnNldHRpbmdzLCBpbWcpKSB7XHJcblx0XHRcdFx0dmFyIGJsb2JDYWNoZSA9IGVkaXRvci5lZGl0b3JVcGxvYWQuYmxvYkNhY2hlO1xyXG5cdFx0XHRcdHZhciBibG9iSW5mbywgZXhpc3RpbmdCbG9iSW5mbztcclxuXHJcblx0XHRcdFx0ZXhpc3RpbmdCbG9iSW5mbyA9IGJsb2JDYWNoZS5maW5kRmlyc3QoZnVuY3Rpb24oY2FjaGVkQmxvYkluZm8pIHtcclxuXHRcdFx0XHRcdHJldHVybiBjYWNoZWRCbG9iSW5mby5iYXNlNjQoKSA9PT0gYmFzZTY0O1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAoIWV4aXN0aW5nQmxvYkluZm8pIHtcclxuXHRcdFx0XHRcdGJsb2JJbmZvID0gYmxvYkNhY2hlLmNyZWF0ZSh1bmlxdWVJZCgpLCBibG9iLCBiYXNlNjQpO1xyXG5cdFx0XHRcdFx0YmxvYkNhY2hlLmFkZChibG9iSW5mbyk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGJsb2JJbmZvID0gZXhpc3RpbmdCbG9iSW5mbztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHBhc3RlSHRtbCgnPGltZyBzcmM9XCInICsgYmxvYkluZm8uYmxvYlVyaSgpICsgJ1wiPicpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHBhc3RlSHRtbCgnPGltZyBzcmM9XCInICsgZGF0YVVyaSArICdcIj4nKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hlY2tzIGlmIHRoZSBjbGlwYm9hcmQgY29udGFpbnMgaW1hZ2UgZGF0YSBpZiBpdCBkb2VzIGl0IHdpbGwgdGFrZSB0aGF0IGRhdGFcclxuXHRcdCAqIGFuZCBjb252ZXJ0IGl0IGludG8gYSBkYXRhIHVybCBpbWFnZSBhbmQgcGFzdGUgdGhhdCBpbWFnZSBhdCB0aGUgY2FyZXQgbG9jYXRpb24uXHJcblx0XHQgKlxyXG5cdFx0ICogQHBhcmFtICB7Q2xpcGJvYXJkRXZlbnR9IGUgUGFzdGUvZHJvcCBldmVudCBvYmplY3QuXHJcblx0XHQgKiBAcGFyYW0gIHtET01SYW5nZX0gcm5nIFJuZyBvYmplY3QgdG8gbW92ZSBzZWxlY3Rpb24gdG8uXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlL2ZhbHNlIGlmIHRoZSBpbWFnZSBkYXRhIHdhcyBmb3VuZCBvciBub3QuXHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIHBhc3RlSW1hZ2VEYXRhKGUsIHJuZykge1xyXG5cdFx0XHR2YXIgZGF0YVRyYW5zZmVyID0gZS5jbGlwYm9hcmREYXRhIHx8IGUuZGF0YVRyYW5zZmVyO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gcHJvY2Vzc0l0ZW1zKGl0ZW1zKSB7XHJcblx0XHRcdFx0dmFyIGksIGl0ZW0sIHJlYWRlciwgaGFkSW1hZ2UgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0aWYgKGl0ZW1zKSB7XHJcblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0aXRlbSA9IGl0ZW1zW2ldO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKC9eaW1hZ2VcXC8oanBlZ3xwbmd8Z2lmfGJtcCkkLy50ZXN0KGl0ZW0udHlwZSkpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgYmxvYiA9IGl0ZW0uZ2V0QXNGaWxlID8gaXRlbS5nZXRBc0ZpbGUoKSA6IGl0ZW07XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblx0XHRcdFx0XHRcdFx0cmVhZGVyLm9ubG9hZCA9IHBhc3RlSW1hZ2UuYmluZChudWxsLCBybmcsIHJlYWRlciwgYmxvYik7XHJcblx0XHRcdFx0XHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRoYWRJbWFnZSA9IHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBoYWRJbWFnZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGVkaXRvci5zZXR0aW5ncy5wYXN0ZV9kYXRhX2ltYWdlcyAmJiBkYXRhVHJhbnNmZXIpIHtcclxuXHRcdFx0XHRyZXR1cm4gcHJvY2Vzc0l0ZW1zKGRhdGFUcmFuc2Zlci5pdGVtcykgfHwgcHJvY2Vzc0l0ZW1zKGRhdGFUcmFuc2Zlci5maWxlcyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENocm9tZSBvbiBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCBwcm9wZXIgY2xpcGJvYXJkIGFjY2VzcyBzbyB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gYWxsb3cgdGhlIGJyb3dzZXIgZGVmYXVsdCBiZWhhdmlvci5cclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge0V2ZW50fSBlIFBhc3RlIGV2ZW50IG9iamVjdCB0byBjaGVjayBpZiBpdCBjb250YWlucyBhbnkgZGF0YS5cclxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUvZmFsc2UgaWYgdGhlIGNsaXBib2FyZCBpcyBlbXB0eSBvciBub3QuXHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIGlzQnJva2VuQW5kcm9pZENsaXBib2FyZEV2ZW50KGUpIHtcclxuXHRcdFx0dmFyIGNsaXBib2FyZERhdGEgPSBlLmNsaXBib2FyZERhdGE7XHJcblxyXG5cdFx0XHRyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdBbmRyb2lkJykgIT0gLTEgJiYgY2xpcGJvYXJkRGF0YSAmJiBjbGlwYm9hcmREYXRhLml0ZW1zICYmIGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoID09PSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIGdldENhcmV0UmFuZ2VGcm9tRXZlbnQoZSkge1xyXG5cdFx0XHRyZXR1cm4gUmFuZ2VVdGlscy5nZXRDYXJldFJhbmdlRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZLCBlZGl0b3IuZ2V0RG9jKCkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIGhhc0NvbnRlbnRUeXBlKGNsaXBib2FyZENvbnRlbnQsIG1pbWVUeXBlKSB7XHJcblx0XHRcdHJldHVybiBtaW1lVHlwZSBpbiBjbGlwYm9hcmRDb250ZW50ICYmIGNsaXBib2FyZENvbnRlbnRbbWltZVR5cGVdLmxlbmd0aCA+IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gaXNLZXlib2FyZFBhc3RlRXZlbnQoZSkge1xyXG5cdFx0XHRyZXR1cm4gKFZLLm1ldGFLZXlQcmVzc2VkKGUpICYmIGUua2V5Q29kZSA9PSA4NikgfHwgKGUuc2hpZnRLZXkgJiYgZS5rZXlDb2RlID09IDQ1KTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiByZWdpc3RlckV2ZW50SGFuZGxlcnMoKSB7XHJcblx0XHRcdGVkaXRvci5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRmdW5jdGlvbiByZW1vdmVQYXN0ZUJpbk9uS2V5VXAoZSkge1xyXG5cdFx0XHRcdFx0Ly8gQ3RybCtWIG9yIFNoaWZ0K0luc2VydFxyXG5cdFx0XHRcdFx0aWYgKGlzS2V5Ym9hcmRQYXN0ZUV2ZW50KGUpICYmICFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XHJcblx0XHRcdFx0XHRcdHJlbW92ZVBhc3RlQmluKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBDdHJsK1Ygb3IgU2hpZnQrSW5zZXJ0XHJcblx0XHRcdFx0aWYgKGlzS2V5Ym9hcmRQYXN0ZUV2ZW50KGUpICYmICFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XHJcblx0XHRcdFx0XHRrZXlib2FyZFBhc3RlUGxhaW5UZXh0U3RhdGUgPSBlLnNoaWZ0S2V5ICYmIGUua2V5Q29kZSA9PSA4NjtcclxuXHJcblx0XHRcdFx0XHQvLyBFZGdlIGNhc2Ugb24gU2FmYXJpIG9uIE1hYyB3aGVyZSBpdCBkb2Vzbid0IGhhbmRsZSBDbWQrU2hpZnQrViBjb3JyZWN0bHlcclxuXHRcdFx0XHRcdC8vIGl0IGZpcmVzIHRoZSBrZXlkb3duIGJ1dCBubyBwYXN0ZSBvciBrZXl1cCBzbyB3ZSBhcmUgbGVmdCB3aXRoIGEgcGFzdGUgYmluXHJcblx0XHRcdFx0XHRpZiAoa2V5Ym9hcmRQYXN0ZVBsYWluVGV4dFN0YXRlICYmIEVudi53ZWJraXQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdWZXJzaW9uLycpICE9IC0xKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBQcmV2ZW50IHVuZG9NYW5hZ2VyIGtleWRvd24gaGFuZGxlciBmcm9tIG1ha2luZyBhbiB1bmRvIGxldmVsIHdpdGggdGhlIHBhc3RlYmluIGluIGl0XHJcblx0XHRcdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cclxuXHRcdFx0XHRcdGtleWJvYXJkUGFzdGVUaW1lU3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcblx0XHRcdFx0XHQvLyBJRSBkb2Vzbid0IHN1cHBvcnQgQ3RybCtTaGlmdCtWIGFuZCBpdCBkb2Vzbid0IGV2ZW4gcHJvZHVjZSBhIHBhc3RlIGV2ZW50XHJcblx0XHRcdFx0XHQvLyBzbyBsZXRzIGZha2UgYSBwYXN0ZSBldmVudCBhbmQgbGV0IElFIHVzZSB0aGUgZXhlY0NvbW1hbmQvZGF0YVRyYW5zZmVyIG1ldGhvZHNcclxuXHRcdFx0XHRcdGlmIChFbnYuaWUgJiYga2V5Ym9hcmRQYXN0ZVBsYWluVGV4dFN0YXRlKSB7XHJcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0ZWRpdG9yLmZpcmUoJ3Bhc3RlJywge2llRmFrZTogdHJ1ZX0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmVtb3ZlUGFzdGVCaW4oKTtcclxuXHRcdFx0XHRcdGNyZWF0ZVBhc3RlQmluKCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHBhc3RlYmluIGlmIHdlIGdldCBhIGtleXVwIGFuZCBubyBwYXN0ZSBldmVudFxyXG5cdFx0XHRcdFx0Ly8gRm9yIGV4YW1wbGUgcGFzdGluZyBhIGZpbGUgaW4gSUUgMTEgd2lsbCBub3QgcHJvZHVjZSBhIHBhc3RlIGV2ZW50XHJcblx0XHRcdFx0XHRlZGl0b3Iub25jZSgna2V5dXAnLCByZW1vdmVQYXN0ZUJpbk9uS2V5VXApO1xyXG5cdFx0XHRcdFx0ZWRpdG9yLm9uY2UoJ3Bhc3RlJywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdGVkaXRvci5vZmYoJ2tleXVwJywgcmVtb3ZlUGFzdGVCaW5PbktleVVwKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBpbnNlcnRDbGlwYm9hcmRDb250ZW50KGNsaXBib2FyZENvbnRlbnQsIGlzS2V5Qm9hcmRQYXN0ZSwgcGxhaW5UZXh0TW9kZSkge1xyXG5cdFx0XHRcdHZhciBjb250ZW50O1xyXG5cclxuXHRcdFx0XHQvLyBHcmFiIEhUTUwgZnJvbSBDbGlwYm9hcmQgQVBJIG9yIHBhc3RlIGJpbiBhcyBhIGZhbGxiYWNrXHJcblx0XHRcdFx0aWYgKGhhc0NvbnRlbnRUeXBlKGNsaXBib2FyZENvbnRlbnQsICd0ZXh0L2h0bWwnKSkge1xyXG5cdFx0XHRcdFx0Y29udGVudCA9IGNsaXBib2FyZENvbnRlbnRbJ3RleHQvaHRtbCddO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb250ZW50ID0gZ2V0UGFzdGVCaW5IdG1sKCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgcGFzdGUgYmluIGlzIGVtcHR5IHRyeSB1c2luZyBwbGFpbiB0ZXh0IG1vZGVcclxuXHRcdFx0XHRcdC8vIHNpbmNlIHRoYXQgaXMgYmV0dGVyIHRoYW4gbm90aGluZyByaWdodFxyXG5cdFx0XHRcdFx0aWYgKGNvbnRlbnQgPT0gcGFzdGVCaW5EZWZhdWx0Q29udGVudCkge1xyXG5cdFx0XHRcdFx0XHRwbGFpblRleHRNb2RlID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnRlbnQgPSBVdGlscy50cmltSHRtbChjb250ZW50KTtcclxuXHJcblx0XHRcdFx0Ly8gV2ViS2l0IGhhcyBhIG5pY2UgYnVnIHdoZXJlIGl0IGNsb25lcyB0aGUgcGFzdGUgYmluIGlmIHlvdSBwYXN0ZSBmcm9tIGZvciBleGFtcGxlIG5vdGVwYWRcclxuXHRcdFx0XHQvLyBzbyB3ZSBuZWVkIHRvIGZvcmNlIHBsYWluIHRleHQgbW9kZSBpbiB0aGlzIGNhc2VcclxuXHRcdFx0XHRpZiAocGFzdGVCaW5FbG0gJiYgcGFzdGVCaW5FbG0uZmlyc3RDaGlsZCAmJiBwYXN0ZUJpbkVsbS5maXJzdENoaWxkLmlkID09PSAnbWNlcGFzdGViaW4nKSB7XHJcblx0XHRcdFx0XHRwbGFpblRleHRNb2RlID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJlbW92ZVBhc3RlQmluKCk7XHJcblxyXG5cdFx0XHRcdC8vIElmIHdlIGdvdCBub3RoaW5nIGZyb20gY2xpcGJvYXJkIEFQSSBhbmQgcGFzdGViaW4gdGhlbiB3ZSBjb3VsZCB0cnkgdGhlIGxhc3QgcmVzb3J0OiBwbGFpbi90ZXh0XHJcblx0XHRcdFx0aWYgKCFjb250ZW50Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0cGxhaW5UZXh0TW9kZSA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBHcmFiIHBsYWluIHRleHQgZnJvbSBDbGlwYm9hcmQgQVBJIG9yIGNvbnZlcnQgZXhpc3RpbmcgSFRNTCB0byBwbGFpbiB0ZXh0XHJcblx0XHRcdFx0aWYgKHBsYWluVGV4dE1vZGUpIHtcclxuXHRcdFx0XHRcdC8vIFVzZSBwbGFpbiB0ZXh0IGNvbnRlbnRzIGZyb20gQ2xpcGJvYXJkIEFQSSB1bmxlc3MgdGhlIEhUTUwgY29udGFpbnMgcGFyYWdyYXBocyB0aGVuXHJcblx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgY29udmVydCB0aGUgSFRNTCB0byBwbGFpbiB0ZXh0IHNpbmNlIHdvcmtzIGJldHRlciB3aGVuIHBhc3RpbmcgSFRNTC9Xb3JkIGNvbnRlbnRzIGFzIHBsYWluIHRleHRcclxuXHRcdFx0XHRcdGlmIChoYXNDb250ZW50VHlwZShjbGlwYm9hcmRDb250ZW50LCAndGV4dC9wbGFpbicpICYmIGNvbnRlbnQuaW5kZXhPZignPC9wPicpID09IC0xKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRlbnQgPSBjbGlwYm9hcmRDb250ZW50Wyd0ZXh0L3BsYWluJ107XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb250ZW50ID0gVXRpbHMuaW5uZXJUZXh0KGNvbnRlbnQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gSWYgdGhlIGNvbnRlbnQgaXMgdGhlIHBhc3RlIGJpbiBkZWZhdWx0IEhUTUwgdGhlbiBpdCB3YXNcclxuXHRcdFx0XHQvLyBpbXBvc3NpYmxlIHRvIGdldCB0aGUgY2xpYm9hcmQgZGF0YSBvdXQuXHJcblx0XHRcdFx0aWYgKGNvbnRlbnQgPT0gcGFzdGVCaW5EZWZhdWx0Q29udGVudCkge1xyXG5cdFx0XHRcdFx0aWYgKCFpc0tleUJvYXJkUGFzdGUpIHtcclxuXHRcdFx0XHRcdFx0ZWRpdG9yLndpbmRvd01hbmFnZXIuYWxlcnQoJ1BsZWFzZSB1c2UgQ3RybCtWL0NtZCtWIGtleWJvYXJkIHNob3J0Y3V0cyB0byBwYXN0ZSBjb250ZW50cy4nKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAocGxhaW5UZXh0TW9kZSkge1xyXG5cdFx0XHRcdFx0cGFzdGVUZXh0KGNvbnRlbnQpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRwYXN0ZUh0bWwoY29udGVudCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgZ2V0TGFzdFJuZyA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBsYXN0Um5nIHx8IGVkaXRvci5zZWxlY3Rpb24uZ2V0Um5nKCk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRlZGl0b3Iub24oJ3Bhc3RlJywgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdC8vIEdldHRpbmcgY29udGVudCBmcm9tIHRoZSBDbGlwYm9hcmQgY2FuIHRha2Ugc29tZSB0aW1lXHJcblx0XHRcdFx0dmFyIGNsaXBib2FyZFRpbWVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblx0XHRcdFx0dmFyIGNsaXBib2FyZENvbnRlbnQgPSBnZXRDbGlwYm9hcmRDb250ZW50KGUpO1xyXG5cdFx0XHRcdHZhciBjbGlwYm9hcmREZWxheSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gY2xpcGJvYXJkVGltZXI7XHJcblxyXG5cdFx0XHRcdHZhciBpc0tleUJvYXJkUGFzdGUgPSAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBrZXlib2FyZFBhc3RlVGltZVN0YW1wIC0gY2xpcGJvYXJkRGVsYXkpIDwgMTAwMDtcclxuXHRcdFx0XHR2YXIgcGxhaW5UZXh0TW9kZSA9IHNlbGYucGFzdGVGb3JtYXQgPT0gXCJ0ZXh0XCIgfHwga2V5Ym9hcmRQYXN0ZVBsYWluVGV4dFN0YXRlO1xyXG5cclxuXHRcdFx0XHRrZXlib2FyZFBhc3RlUGxhaW5UZXh0U3RhdGUgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0aWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaXNCcm9rZW5BbmRyb2lkQ2xpcGJvYXJkRXZlbnQoZSkpIHtcclxuXHRcdFx0XHRcdHJlbW92ZVBhc3RlQmluKCk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIWhhc0h0bWxPclRleHQoY2xpcGJvYXJkQ29udGVudCkgJiYgcGFzdGVJbWFnZURhdGEoZSwgZ2V0TGFzdFJuZygpKSkge1xyXG5cdFx0XHRcdFx0cmVtb3ZlUGFzdGVCaW4oKTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIE5vdCBhIGtleWJvYXJkIHBhc3RlIHByZXZlbnQgZGVmYXVsdCBwYXN0ZSBhbmQgdHJ5IHRvIGdyYWIgdGhlIGNsaXBib2FyZCBjb250ZW50cyB1c2luZyBkaWZmZXJlbnQgQVBJc1xyXG5cdFx0XHRcdGlmICghaXNLZXlCb2FyZFBhc3RlKSB7XHJcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBUcnkgSUUgb25seSBtZXRob2QgaWYgcGFzdGUgaXNuJ3QgYSBrZXlib2FyZCBwYXN0ZVxyXG5cdFx0XHRcdGlmIChFbnYuaWUgJiYgKCFpc0tleUJvYXJkUGFzdGUgfHwgZS5pZUZha2UpKSB7XHJcblx0XHRcdFx0XHRjcmVhdGVQYXN0ZUJpbigpO1xyXG5cclxuXHRcdFx0XHRcdGVkaXRvci5kb20uYmluZChwYXN0ZUJpbkVsbSwgJ3Bhc3RlJywgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0ZWRpdG9yLmdldERvYygpLmV4ZWNDb21tYW5kKCdQYXN0ZScsIGZhbHNlLCBudWxsKTtcclxuXHRcdFx0XHRcdGNsaXBib2FyZENvbnRlbnRbXCJ0ZXh0L2h0bWxcIl0gPSBnZXRQYXN0ZUJpbkh0bWwoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIElmIGNsaXBib2FyZCBBUEkgaGFzIEhUTUwgdGhlbiB1c2UgdGhhdCBkaXJlY3RseVxyXG5cdFx0XHRcdGlmIChoYXNDb250ZW50VHlwZShjbGlwYm9hcmRDb250ZW50LCAndGV4dC9odG1sJykpIHtcclxuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdGluc2VydENsaXBib2FyZENvbnRlbnQoY2xpcGJvYXJkQ29udGVudCwgaXNLZXlCb2FyZFBhc3RlLCBwbGFpblRleHRNb2RlKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0RGVsYXkuc2V0RWRpdG9yVGltZW91dChlZGl0b3IsIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRpbnNlcnRDbGlwYm9hcmRDb250ZW50KGNsaXBib2FyZENvbnRlbnQsIGlzS2V5Qm9hcmRQYXN0ZSwgcGxhaW5UZXh0TW9kZSk7XHJcblx0XHRcdFx0XHR9LCAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZWRpdG9yLm9uKCdkcmFnc3RhcnQgZHJhZ2VuZCcsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRkcmFnZ2luZ0ludGVybmFsbHkgPSBlLnR5cGUgPT0gJ2RyYWdzdGFydCc7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gaXNQbGFpblRleHRGaWxlVXJsKGNvbnRlbnQpIHtcclxuXHRcdFx0XHR2YXIgcGxhaW5UZXh0Q29udGVudCA9IGNvbnRlbnRbJ3RleHQvcGxhaW4nXTtcclxuXHRcdFx0XHRyZXR1cm4gcGxhaW5UZXh0Q29udGVudCA/IHBsYWluVGV4dENvbnRlbnQuaW5kZXhPZignZmlsZTovLycpID09PSAwIDogZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGVkaXRvci5vbignZHJvcCcsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHR2YXIgZHJvcENvbnRlbnQsIHJuZztcclxuXHJcblx0XHRcdFx0cm5nID0gZ2V0Q2FyZXRSYW5nZUZyb21FdmVudChlKTtcclxuXHJcblx0XHRcdFx0aWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgZHJhZ2dpbmdJbnRlcm5hbGx5KSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRkcm9wQ29udGVudCA9IGdldERhdGFUcmFuc2Zlckl0ZW1zKGUuZGF0YVRyYW5zZmVyKTtcclxuXHJcblx0XHRcdFx0aWYgKCghaGFzSHRtbE9yVGV4dChkcm9wQ29udGVudCkgfHwgaXNQbGFpblRleHRGaWxlVXJsKGRyb3BDb250ZW50KSkgJiYgcGFzdGVJbWFnZURhdGEoZSwgcm5nKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHJuZyAmJiBlZGl0b3Iuc2V0dGluZ3MucGFzdGVfZmlsdGVyX2Ryb3AgIT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHR2YXIgY29udGVudCA9IGRyb3BDb250ZW50WydtY2UtaW50ZXJuYWwnXSB8fCBkcm9wQ29udGVudFsndGV4dC9odG1sJ10gfHwgZHJvcENvbnRlbnRbJ3RleHQvcGxhaW4nXTtcclxuXHJcblx0XHRcdFx0XHRpZiAoY29udGVudCkge1xyXG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBGRiA0NSBkb2Vzbid0IHBhaW50IGEgY2FyZXQgd2hlbiBkcmFnZ2luZyBpbiB0ZXh0IGluIGR1ZSB0byBmb2N1cyBjYWxsIGJ5IGV4ZWNDb21tYW5kXHJcblx0XHRcdFx0XHRcdERlbGF5LnNldEVkaXRvclRpbWVvdXQoZWRpdG9yLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRlZGl0b3IudW5kb01hbmFnZXIudHJhbnNhY3QoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZHJvcENvbnRlbnRbJ21jZS1pbnRlcm5hbCddKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVkaXRvci5leGVjQ29tbWFuZCgnRGVsZXRlJyk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0ZWRpdG9yLnNlbGVjdGlvbi5zZXRSbmcocm5nKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50ID0gVXRpbHMudHJpbUh0bWwoY29udGVudCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFkcm9wQ29udGVudFsndGV4dC9odG1sJ10pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGFzdGVUZXh0KGNvbnRlbnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGFzdGVIdG1sKGNvbnRlbnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZWRpdG9yLm9uKCdkcmFnb3ZlciBkcmFnZW5kJywgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdGlmIChlZGl0b3Iuc2V0dGluZ3MucGFzdGVfZGF0YV9pbWFnZXMpIHtcclxuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHNlbGYucGFzdGVIdG1sID0gcGFzdGVIdG1sO1xyXG5cdFx0c2VsZi5wYXN0ZVRleHQgPSBwYXN0ZVRleHQ7XHJcblx0XHRzZWxmLnBhc3RlSW1hZ2VEYXRhID0gcGFzdGVJbWFnZURhdGE7XHJcblxyXG5cdFx0ZWRpdG9yLm9uKCdwcmVJbml0JywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVycygpO1xyXG5cclxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBkYXRhIGltYWdlcyBmcm9tIHBhc3RlIGZvciBleGFtcGxlIGZyb20gR2Vja29cclxuXHRcdFx0Ly8gZXhjZXB0IGludGVybmFsIGltYWdlcyBsaWtlIHZpZGVvIGVsZW1lbnRzXHJcblx0XHRcdGVkaXRvci5wYXJzZXIuYWRkTm9kZUZpbHRlcignaW1nJywgZnVuY3Rpb24obm9kZXMsIG5hbWUsIGFyZ3MpIHtcclxuXHRcdFx0XHRmdW5jdGlvbiBpc1Bhc3RlSW5zZXJ0KGFyZ3MpIHtcclxuXHRcdFx0XHRcdHJldHVybiBhcmdzLmRhdGEgJiYgYXJncy5kYXRhLnBhc3RlID09PSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gcmVtb3ZlKG5vZGUpIHtcclxuXHRcdFx0XHRcdGlmICghbm9kZS5hdHRyKCdkYXRhLW1jZS1vYmplY3QnKSAmJiBzcmMgIT09IEVudi50cmFuc3BhcmVudFNyYykge1xyXG5cdFx0XHRcdFx0XHRub2RlLnJlbW92ZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gaXNXZWJLaXRGYWtlVXJsKHNyYykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHNyYy5pbmRleE9mKFwid2Via2l0LWZha2UtdXJsXCIpID09PSAwO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gaXNEYXRhVXJpKHNyYykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHNyYy5pbmRleE9mKFwiZGF0YTpcIikgPT09IDA7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIWVkaXRvci5zZXR0aW5ncy5wYXN0ZV9kYXRhX2ltYWdlcyAmJiBpc1Bhc3RlSW5zZXJ0KGFyZ3MpKSB7XHJcblx0XHRcdFx0XHR2YXIgaSA9IG5vZGVzLmxlbmd0aDtcclxuXHJcblx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XHJcblx0XHRcdFx0XHRcdHZhciBzcmMgPSBub2Rlc1tpXS5hdHRyaWJ1dGVzLm1hcC5zcmM7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIXNyYykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBTYWZhcmkgb24gTWFjIHByb2R1Y2VzIHdlYmtpdC1mYWtlLXVybCBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE0MVxyXG5cdFx0XHRcdFx0XHRpZiAoaXNXZWJLaXRGYWtlVXJsKHNyYykpIHtcclxuXHRcdFx0XHRcdFx0XHRyZW1vdmUobm9kZXNbaV0pO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCFlZGl0b3Iuc2V0dGluZ3MuYWxsb3dfaHRtbF9kYXRhX3VybHMgJiYgaXNEYXRhVXJpKHNyYykpIHtcclxuXHRcdFx0XHRcdFx0XHRyZW1vdmUobm9kZXNbaV0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH07XHJcbn0pO1xyXG5cclxuLy8gSW5jbHVkZWQgZnJvbToganMvdGlueW1jZS9wbHVnaW5zL3Bhc3RlL2NsYXNzZXMvV29yZEZpbHRlci5qc1xyXG5cclxuLyoqXHJcbiAqIFdvcmRGaWx0ZXIuanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgcGFyc2VzIHdvcmQgSFRNTCBpbnRvIHByb3BlciBUaW55TUNFIG1hcmt1cC5cclxuICpcclxuICogQGNsYXNzIHRpbnltY2UucGFzdGVwbHVnaW4uV29yZEZpbHRlclxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZGVmaW5lKFwidGlueW1jZS9wYXN0ZXBsdWdpbi9Xb3JkRmlsdGVyXCIsIFtcclxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxyXG5cdFwidGlueW1jZS9odG1sL0RvbVBhcnNlclwiLFxyXG5cdFwidGlueW1jZS9odG1sL1NjaGVtYVwiLFxyXG5cdFwidGlueW1jZS9odG1sL1NlcmlhbGl6ZXJcIixcclxuXHRcInRpbnltY2UvaHRtbC9Ob2RlXCIsXHJcblx0XCJ0aW55bWNlL3Bhc3RlcGx1Z2luL1V0aWxzXCJcclxuXSwgZnVuY3Rpb24oVG9vbHMsIERvbVBhcnNlciwgU2NoZW1hLCBTZXJpYWxpemVyLCBOb2RlLCBVdGlscykge1xyXG5cdC8qKlxyXG5cdCAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgaXMgZnJvbSBhbnkgb2YgdGhlIGZvbGxvd2luZyBzb3VyY2VzOiBNUyBXb3JkL09mZmljZSAzNjUvR29vZ2xlIGRvY3MuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gaXNXb3JkQ29udGVudChjb250ZW50KSB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHQoLzxmb250IGZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cInxjbGFzcz1cIj9Nc298c3R5bGU9XCJbXlwiXSpcXGJtc28tfHN0eWxlPSdbXicnXSpcXGJtc28tfHc6V29yZERvY3VtZW50L2kpLnRlc3QoY29udGVudCkgfHxcclxuXHRcdFx0KC9jbGFzcz1cIk91dGxpbmVFbGVtZW50LykudGVzdChjb250ZW50KSB8fFxyXG5cdFx0XHQoL2lkPVwiP2RvY3NcXC1pbnRlcm5hbFxcLWd1aWRcXC0vLnRlc3QoY29udGVudCkpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgdGV4dCBzdGFydHMgd2l0aCBcIjEuIFwiIG9yIFwiYS4gXCIgZXRjLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGlzTnVtZXJpY0xpc3QodGV4dCkge1xyXG5cdFx0dmFyIGZvdW5kLCBwYXR0ZXJucztcclxuXHJcblx0XHRwYXR0ZXJucyA9IFtcclxuXHRcdFx0L15bSVZYTE1DRF17MSwyfVxcLlsgXFx1MDBhMF0vLCAgLy8gUm9tYW4gdXBwZXIgY2FzZVxyXG5cdFx0XHQvXltpdnhsbWNkXXsxLDJ9XFwuWyBcXHUwMGEwXS8sICAvLyBSb21hbiBsb3dlciBjYXNlXHJcblx0XHRcdC9eW2Etel17MSwyfVtcXC5cXCldWyBcXHUwMGEwXS8sICAvLyBBbHBoYWJldGljYWwgYS16XHJcblx0XHRcdC9eW0EtWl17MSwyfVtcXC5cXCldWyBcXHUwMGEwXS8sICAvLyBBbHBoYWJldGljYWwgQS1aXHJcblx0XHRcdC9eWzAtOV0rXFwuWyBcXHUwMGEwXS8sICAgICAgICAgIC8vIE51bWVyaWMgbGlzdHNcclxuXHRcdFx0L15bXFx1MzAwN1xcdTRlMDBcXHU0ZThjXFx1NGUwOVxcdTU2ZGJcXHU0ZTk0XFx1NTE2ZFxcdTRlMDNcXHU1MTZiXFx1NGU1ZF0rXFwuWyBcXHUwMGEwXS8sIC8vIEphcGFuZXNlXHJcblx0XHRcdC9eW1xcdTU4ZjFcXHU1ZjEwXFx1NTNjMlxcdTU2ZGJcXHU0ZjBkXFx1NTE2ZFxcdTRlMDNcXHU1MTZiXFx1NGU1ZFxcdTYyZmVdK1xcLlsgXFx1MDBhMF0vICAvLyBDaGluZXNlXHJcblx0XHRdO1xyXG5cclxuXHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoL15bXFx1MDBhMCBdKy8sICcnKTtcclxuXHJcblx0XHRUb29scy5lYWNoKHBhdHRlcm5zLCBmdW5jdGlvbihwYXR0ZXJuKSB7XHJcblx0XHRcdGlmIChwYXR0ZXJuLnRlc3QodGV4dCkpIHtcclxuXHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gZm91bmQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBpc0J1bGxldExpc3QodGV4dCkge1xyXG5cdFx0cmV0dXJuIC9eW1xcc1xcdTAwYTBdKltcXHUyMDIyXFx1MDBiN1xcdTAwYTdcXHUyNUNGXVxccyovLnRlc3QodGV4dCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBXb3JkRmlsdGVyKGVkaXRvcikge1xyXG5cdFx0dmFyIHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzO1xyXG5cclxuXHRcdGVkaXRvci5vbignQmVmb3JlUGFzdGVQcmVQcm9jZXNzJywgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHR2YXIgY29udGVudCA9IGUuY29udGVudCwgcmV0YWluU3R5bGVQcm9wZXJ0aWVzLCB2YWxpZFN0eWxlcztcclxuXHJcblx0XHRcdC8vIFJlbW92ZSBnb29nbGUgZG9jcyBpbnRlcm5hbCBndWlkIG1hcmtlcnNcclxuXHRcdFx0Y29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvPGJbXj5dK2lkPVwiP2RvY3MtaW50ZXJuYWwtW14+XSo+L2dpLCAnJyk7XHJcblx0XHRcdGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoLzxiciBjbGFzcz1cIj9BcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lXCI/Pi9naSwgJycpO1xyXG5cclxuXHRcdFx0cmV0YWluU3R5bGVQcm9wZXJ0aWVzID0gc2V0dGluZ3MucGFzdGVfcmV0YWluX3N0eWxlX3Byb3BlcnRpZXM7XHJcblx0XHRcdGlmIChyZXRhaW5TdHlsZVByb3BlcnRpZXMpIHtcclxuXHRcdFx0XHR2YWxpZFN0eWxlcyA9IFRvb2xzLm1ha2VNYXAocmV0YWluU3R5bGVQcm9wZXJ0aWVzLnNwbGl0KC9bLCBdLykpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogQ29udmVydHMgZmFrZSBidWxsZXQgYW5kIG51bWJlcmVkIGxpc3RzIHRvIHJlYWwgc2VtYW50aWMgT0wvVUwuXHJcblx0XHRcdCAqXHJcblx0XHRcdCAqIEBwYXJhbSB7dGlueW1jZS5odG1sLk5vZGV9IG5vZGUgUm9vdCBub2RlIHRvIGNvbnZlcnQgY2hpbGRyZW4gb2YuXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRmdW5jdGlvbiBjb252ZXJ0RmFrZUxpc3RzVG9Qcm9wZXJMaXN0cyhub2RlKSB7XHJcblx0XHRcdFx0dmFyIGN1cnJlbnRMaXN0Tm9kZSwgcHJldkxpc3ROb2RlLCBsYXN0TGV2ZWwgPSAxO1xyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBnZXRUZXh0KG5vZGUpIHtcclxuXHRcdFx0XHRcdHZhciB0eHQgPSAnJztcclxuXHJcblx0XHRcdFx0XHRpZiAobm9kZS50eXBlID09PSAzKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBub2RlLnZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICgobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkpIHtcclxuXHRcdFx0XHRcdFx0ZG8ge1xyXG5cdFx0XHRcdFx0XHRcdHR4dCArPSBnZXRUZXh0KG5vZGUpO1xyXG5cdFx0XHRcdFx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiB0eHQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiB0cmltTGlzdFN0YXJ0KG5vZGUsIHJlZ0V4cCkge1xyXG5cdFx0XHRcdFx0aWYgKG5vZGUudHlwZSA9PT0gMykge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVnRXhwLnRlc3Qobm9kZS52YWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRub2RlLnZhbHVlID0gbm9kZS52YWx1ZS5yZXBsYWNlKHJlZ0V4cCwgJycpO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICgobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCkpIHtcclxuXHRcdFx0XHRcdFx0ZG8ge1xyXG5cdFx0XHRcdFx0XHRcdGlmICghdHJpbUxpc3RTdGFydChub2RlLCByZWdFeHApKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IHdoaWxlICgobm9kZSA9IG5vZGUubmV4dCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24gcmVtb3ZlSWdub3JlZE5vZGVzKG5vZGUpIHtcclxuXHRcdFx0XHRcdGlmIChub2RlLl9saXN0SWdub3JlKSB7XHJcblx0XHRcdFx0XHRcdG5vZGUucmVtb3ZlKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpKSB7XHJcblx0XHRcdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdFx0XHRyZW1vdmVJZ25vcmVkTm9kZXMobm9kZSk7XHJcblx0XHRcdFx0XHRcdH0gd2hpbGUgKChub2RlID0gbm9kZS5uZXh0KSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiBjb252ZXJ0UGFyYWdyYXBoVG9MaShwYXJhZ3JhcGhOb2RlLCBsaXN0TmFtZSwgc3RhcnQ/KSB7XHJcblx0XHRcdFx0XHR2YXIgbGV2ZWwgPSBwYXJhZ3JhcGhOb2RlLl9saXN0TGV2ZWwgfHwgbGFzdExldmVsO1xyXG5cclxuXHRcdFx0XHRcdC8vIEhhbmRsZSBsaXN0IG5lc3RpbmdcclxuXHRcdFx0XHRcdGlmIChsZXZlbCAhPSBsYXN0TGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGxldmVsIDwgbGFzdExldmVsKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gTW92ZSB0byBwYXJlbnQgbGlzdFxyXG5cdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50TGlzdE5vZGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRMaXN0Tm9kZSA9IGN1cnJlbnRMaXN0Tm9kZS5wYXJlbnQucGFyZW50O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBDcmVhdGUgbmV3IGxpc3RcclxuXHRcdFx0XHRcdFx0XHRwcmV2TGlzdE5vZGUgPSBjdXJyZW50TGlzdE5vZGU7XHJcblx0XHRcdFx0XHRcdFx0Y3VycmVudExpc3ROb2RlID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICghY3VycmVudExpc3ROb2RlIHx8IGN1cnJlbnRMaXN0Tm9kZS5uYW1lICE9IGxpc3ROYW1lKSB7XHJcblx0XHRcdFx0XHRcdHByZXZMaXN0Tm9kZSA9IHByZXZMaXN0Tm9kZSB8fCBjdXJyZW50TGlzdE5vZGU7XHJcblx0XHRcdFx0XHRcdGN1cnJlbnRMaXN0Tm9kZSA9IG5ldyBOb2RlKGxpc3ROYW1lLCAxKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChzdGFydCA+IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRjdXJyZW50TGlzdE5vZGUuYXR0cignc3RhcnQnLCAnJyArIHN0YXJ0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cGFyYWdyYXBoTm9kZS53cmFwKGN1cnJlbnRMaXN0Tm9kZSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjdXJyZW50TGlzdE5vZGUuYXBwZW5kKHBhcmFncmFwaE5vZGUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHBhcmFncmFwaE5vZGUubmFtZSA9ICdsaSc7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQXBwZW5kIGxpc3QgdG8gcHJldmlvdXMgbGlzdCBpZiBpdCBleGlzdHNcclxuXHRcdFx0XHRcdGlmIChsZXZlbCA+IGxhc3RMZXZlbCAmJiBwcmV2TGlzdE5vZGUpIHtcclxuXHRcdFx0XHRcdFx0cHJldkxpc3ROb2RlLmxhc3RDaGlsZC5hcHBlbmQoY3VycmVudExpc3ROb2RlKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRsYXN0TGV2ZWwgPSBsZXZlbDtcclxuXHJcblx0XHRcdFx0XHQvLyBSZW1vdmUgc3RhcnQgb2YgbGlzdCBpdGVtIFwiMS4gXCIgb3IgXCImbWlkZG90OyBcIiBldGNcclxuXHRcdFx0XHRcdHJlbW92ZUlnbm9yZWROb2RlcyhwYXJhZ3JhcGhOb2RlKTtcclxuXHRcdFx0XHRcdHRyaW1MaXN0U3RhcnQocGFyYWdyYXBoTm9kZSwgL15cXHUwMGEwKy8pO1xyXG5cdFx0XHRcdFx0dHJpbUxpc3RTdGFydChwYXJhZ3JhcGhOb2RlLCAvXlxccyooW1xcdTIwMjJcXHUwMGI3XFx1MDBhN1xcdTI1Q0ZdfFxcdytcXC4pLyk7XHJcblx0XHRcdFx0XHR0cmltTGlzdFN0YXJ0KHBhcmFncmFwaE5vZGUsIC9eXFx1MDBhMCsvKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEJ1aWxkIGEgbGlzdCBvZiBhbGwgcm9vdCBsZXZlbCBlbGVtZW50cyBiZWZvcmUgd2Ugc3RhcnRcclxuXHRcdFx0XHQvLyBhbHRlcmluZyB0aGVtIGluIHRoZSBsb29wIGJlbG93LlxyXG5cdFx0XHRcdHZhciBlbGVtZW50cyA9IFtdLCBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcclxuXHRcdFx0XHR3aGlsZSAodHlwZW9mIGNoaWxkICE9PSAndW5kZWZpbmVkJyAmJiBjaGlsZCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0ZWxlbWVudHMucHVzaChjaGlsZCk7XHJcblxyXG5cdFx0XHRcdFx0Y2hpbGQgPSBjaGlsZC53YWxrKCk7XHJcblx0XHRcdFx0XHRpZiAoY2hpbGQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0d2hpbGUgKHR5cGVvZiBjaGlsZCAhPT0gJ3VuZGVmaW5lZCcgJiYgY2hpbGQucGFyZW50ICE9PSBub2RlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2hpbGQgPSBjaGlsZC53YWxrKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtZW50c1tpXTtcclxuXHJcblx0XHRcdFx0XHRpZiAobm9kZS5uYW1lID09ICdwJyAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcclxuXHRcdFx0XHRcdFx0Ly8gRmluZCBmaXJzdCB0ZXh0IG5vZGUgaW4gcGFyYWdyYXBoXHJcblx0XHRcdFx0XHRcdHZhciBub2RlVGV4dCA9IGdldFRleHQobm9kZSk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBEZXRlY3QgdW5vcmRlcmVkIGxpc3RzIGxvb2sgZm9yIGJ1bGxldHNcclxuXHRcdFx0XHRcdFx0aWYgKGlzQnVsbGV0TGlzdChub2RlVGV4dCkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0UGFyYWdyYXBoVG9MaShub2RlLCAndWwnKTtcclxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gRGV0ZWN0IG9yZGVyZWQgbGlzdHMgMS4sIGEuIG9yIGl4di5cclxuXHRcdFx0XHRcdFx0aWYgKGlzTnVtZXJpY0xpc3Qobm9kZVRleHQpKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gUGFyc2UgT0wgc3RhcnQgbnVtYmVyXHJcblx0XHRcdFx0XHRcdFx0dmFyIG1hdGNoZXMgPSAvKFswLTldKylcXC4vLmV4ZWMobm9kZVRleHQpO1xyXG5cdFx0XHRcdFx0XHRcdHZhciBzdGFydCA9IDE7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG1hdGNoZXMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0Y29udmVydFBhcmFncmFwaFRvTGkobm9kZSwgJ29sJywgc3RhcnQpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBDb252ZXJ0IHBhcmFncmFwaHMgbWFya2VkIGFzIGxpc3RzIGJ1dCBkb2Vzbid0IGxvb2sgbGlrZSBhbnl0aGluZ1xyXG5cdFx0XHRcdFx0XHRpZiAobm9kZS5fbGlzdExldmVsKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29udmVydFBhcmFncmFwaFRvTGkobm9kZSwgJ3VsJywgMSk7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGN1cnJlbnRMaXN0Tm9kZSA9IG51bGw7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgcm9vdCBsZXZlbCBlbGVtZW50IGlzbid0IGEgcCB0YWcgd2hpY2ggY2FuIGJlXHJcblx0XHRcdFx0XHRcdC8vIHByb2Nlc3NlZCBieSBjb252ZXJ0UGFyYWdyYXBoVG9MaSwgaXQgaW50ZXJydXB0cyB0aGVcclxuXHRcdFx0XHRcdFx0Ly8gbGlzdHMsIGNhdXNpbmcgYSBuZXcgbGlzdCB0byBzdGFydCBpbnN0ZWFkIG9mIGhhdmluZ1xyXG5cdFx0XHRcdFx0XHQvLyBlbGVtZW50cyBmcm9tIHRoZSBuZXh0IGxpc3QgaW5zZXJ0ZWQgYWJvdmUgdGhpcyB0YWcuXHJcblx0XHRcdFx0XHRcdHByZXZMaXN0Tm9kZSA9IGN1cnJlbnRMaXN0Tm9kZTtcclxuXHRcdFx0XHRcdFx0Y3VycmVudExpc3ROb2RlID0gbnVsbDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGZpbHRlclN0eWxlcyhub2RlLCBzdHlsZVZhbHVlKSB7XHJcblx0XHRcdFx0dmFyIG91dHB1dFN0eWxlcyA9IHt9LCBtYXRjaGVzLCBzdHlsZXMgPSBlZGl0b3IuZG9tLnBhcnNlU3R5bGUoc3R5bGVWYWx1ZSk7XHJcblxyXG5cdFx0XHRcdFRvb2xzLmVhY2goc3R5bGVzLCBmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xyXG5cdFx0XHRcdFx0Ly8gQ29udmVydCB2YXJpb3VzIE1TIHN0eWxlcyB0byBXM0Mgc3R5bGVzXHJcblx0XHRcdFx0XHRzd2l0Y2ggKG5hbWUpIHtcclxuXHRcdFx0XHRcdFx0Y2FzZSAnbXNvLWxpc3QnOlxyXG5cdFx0XHRcdFx0XHRcdC8vIFBhcnNlIG91dCBsaXN0IGluZGVudCBsZXZlbCBmb3IgbGlzdHNcclxuXHRcdFx0XHRcdFx0XHRtYXRjaGVzID0gL1xcdysgXFx3KyhbMC05XSspL2kuZXhlYyhzdHlsZVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAobWF0Y2hlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0bm9kZS5fbGlzdExldmVsID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIHRoZXNlIG5vZGVzIDxzcGFuIHN0eWxlPVwibXNvLWxpc3Q6SWdub3JlXCI+bzwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQvLyBTaW5jZSB0aGUgc3BhbiBnZXRzIHJlbW92ZWQgd2UgbWFyayB0aGUgdGV4dCBub2RlIGFuZCB0aGUgc3BhblxyXG5cdFx0XHRcdFx0XHRcdGlmICgvSWdub3JlL2kudGVzdCh2YWx1ZSkgJiYgbm9kZS5maXJzdENoaWxkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRub2RlLl9saXN0SWdub3JlID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdG5vZGUuZmlyc3RDaGlsZC5fbGlzdElnbm9yZSA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdGNhc2UgXCJob3Jpei1hbGlnblwiOlxyXG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBcInRleHQtYWxpZ25cIjtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdGNhc2UgXCJ2ZXJ0LWFsaWduXCI6XHJcblx0XHRcdFx0XHRcdFx0bmFtZSA9IFwidmVydGljYWwtYWxpZ25cIjtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdGNhc2UgXCJmb250LWNvbG9yXCI6XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJtc28tZm9yZWdyb3VuZFwiOlxyXG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBcImNvbG9yXCI7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRjYXNlIFwibXNvLWJhY2tncm91bmRcIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcIm1zby1oaWdobGlnaHRcIjpcclxuXHRcdFx0XHRcdFx0XHRuYW1lID0gXCJiYWNrZ3JvdW5kXCI7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRjYXNlIFwiZm9udC13ZWlnaHRcIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImZvbnQtc3R5bGVcIjpcclxuXHRcdFx0XHRcdFx0XHRpZiAodmFsdWUgIT0gXCJub3JtYWxcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0b3V0cHV0U3R5bGVzW25hbWVdID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0XHRcdGNhc2UgXCJtc28tZWxlbWVudFwiOlxyXG5cdFx0XHRcdFx0XHRcdC8vIFJlbW92ZSB0cmFjayBjaGFuZ2VzIGNvZGVcclxuXHRcdFx0XHRcdFx0XHRpZiAoL14oY29tbWVudHxjb21tZW50LWxpc3QpJC9pLnRlc3QodmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRub2RlLnJlbW92ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKG5hbWUuaW5kZXhPZignbXNvLWNvbW1lbnQnKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRub2RlLnJlbW92ZSgpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgYWxsb3cgbXNvLSBwcmVmaXhlZCBuYW1lc1xyXG5cdFx0XHRcdFx0aWYgKG5hbWUuaW5kZXhPZignbXNvLScpID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBPdXRwdXQgb25seSB2YWxpZCBzdHlsZXNcclxuXHRcdFx0XHRcdGlmIChyZXRhaW5TdHlsZVByb3BlcnRpZXMgPT0gXCJhbGxcIiB8fCAodmFsaWRTdHlsZXMgJiYgdmFsaWRTdHlsZXNbbmFtZV0pKSB7XHJcblx0XHRcdFx0XHRcdG91dHB1dFN0eWxlc1tuYW1lXSA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQvLyBDb252ZXJ0IGJvbGQgc3R5bGUgdG8gXCJiXCIgZWxlbWVudFxyXG5cdFx0XHRcdGlmICgvKGJvbGQpL2kudGVzdChvdXRwdXRTdHlsZXNbXCJmb250LXdlaWdodFwiXSkpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBvdXRwdXRTdHlsZXNbXCJmb250LXdlaWdodFwiXTtcclxuXHRcdFx0XHRcdG5vZGUud3JhcChuZXcgTm9kZShcImJcIiwgMSkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQ29udmVydCBpdGFsaWMgc3R5bGUgdG8gXCJpXCIgZWxlbWVudFxyXG5cdFx0XHRcdGlmICgvKGl0YWxpYykvaS50ZXN0KG91dHB1dFN0eWxlc1tcImZvbnQtc3R5bGVcIl0pKSB7XHJcblx0XHRcdFx0XHRkZWxldGUgb3V0cHV0U3R5bGVzW1wiZm9udC1zdHlsZVwiXTtcclxuXHRcdFx0XHRcdG5vZGUud3JhcChuZXcgTm9kZShcImlcIiwgMSkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gU2VyaWFsaXplIHRoZSBzdHlsZXMgYW5kIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgbGVmdCB0byBrZWVwXHJcblx0XHRcdFx0b3V0cHV0U3R5bGVzID0gZWRpdG9yLmRvbS5zZXJpYWxpemVTdHlsZShvdXRwdXRTdHlsZXMsIG5vZGUubmFtZSk7XHJcblx0XHRcdFx0aWYgKG91dHB1dFN0eWxlcykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG91dHB1dFN0eWxlcztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoc2V0dGluZ3MucGFzdGVfZW5hYmxlX2RlZmF1bHRfZmlsdGVycyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIERldGVjdCBpcyB0aGUgY29udGVudHMgaXMgV29yZCBqdW5rIEhUTUxcclxuXHRcdFx0aWYgKGlzV29yZENvbnRlbnQoZS5jb250ZW50KSkge1xyXG5cdFx0XHRcdGUud29yZENvbnRlbnQgPSB0cnVlOyAvLyBNYXJrIGl0IGZvciBvdGhlciBwcm9jZXNzb3JzXHJcblxyXG5cdFx0XHRcdC8vIFJlbW92ZSBiYXNpYyBXb3JkIGp1bmtcclxuXHRcdFx0XHRjb250ZW50ID0gVXRpbHMuZmlsdGVyKGNvbnRlbnQsIFtcclxuXHRcdFx0XHRcdC8vIFdvcmQgY29tbWVudHMgbGlrZSBjb25kaXRpb25hbCBjb21tZW50cyBldGNcclxuXHRcdFx0XHRcdC88IS0tW1xcc1xcU10rPy0tPi9naSxcclxuXHJcblx0XHRcdFx0XHQvLyBSZW1vdmUgY29tbWVudHMsIHNjcmlwdHMgKGUuZy4sIG1zb1Nob3dDb21tZW50KSwgWE1MIHRhZywgVk1MIGNvbnRlbnQsXHJcblx0XHRcdFx0XHQvLyBNUyBPZmZpY2UgbmFtZXNwYWNlZCB0YWdzLCBhbmQgYSBmZXcgb3RoZXIgdGFnc1xyXG5cdFx0XHRcdFx0LzwoIXxzY3JpcHRbXj5dKj4uKj88XFwvc2NyaXB0KD89Wz5cXHNdKXxcXC8/KFxcP3htbCg6XFx3Kyk/fGltZ3xtZXRhfGxpbmt8c3R5bGV8XFx3OlxcdyspKD89W1xcc1xcLz5dKSlbXj5dKj4vZ2ksXHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29udmVydCA8cz4gaW50byA8c3RyaWtlPiBmb3IgbGluZS10aG91Z2hcclxuXHRcdFx0XHRcdFsvPChcXC8/KXM+L2dpLCBcIjwkMXN0cmlrZT5cIl0sXHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVwbGFjZSBuc2JwIGVudGl0ZXMgdG8gY2hhciBzaW5jZSBpdCdzIGVhc2llciB0byBoYW5kbGVcclxuXHRcdFx0XHRcdFsvJm5ic3A7L2dpLCBcIlxcdTAwYTBcIl0sXHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29udmVydCA8c3BhbiBzdHlsZT1cIm1zby1zcGFjZXJ1bjp5ZXNcIj5fX188L3NwYW4+IHRvIHN0cmluZyBvZiBhbHRlcm5hdGluZ1xyXG5cdFx0XHRcdFx0Ly8gYnJlYWtpbmcvbm9uLWJyZWFraW5nIHNwYWNlcyBvZiBzYW1lIGxlbmd0aFxyXG5cdFx0XHRcdFx0Wy88c3BhblxccytzdHlsZVxccyo9XFxzKlwiXFxzKm1zby1zcGFjZXJ1blxccyo6XFxzKnllc1xccyo7P1xccypcIlxccyo+KFtcXHNcXHUwMGEwXSopPFxcL3NwYW4+L2dpLFxyXG5cdFx0XHRcdFx0XHRmdW5jdGlvbihzdHIsIHNwYWNlcykge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoc3BhY2VzLmxlbmd0aCA+IDApID9cclxuXHRcdFx0XHRcdFx0XHRcdHNwYWNlcy5yZXBsYWNlKC8uLywgXCIgXCIpLnNsaWNlKE1hdGguZmxvb3Ioc3BhY2VzLmxlbmd0aCAvIDIpKS5zcGxpdChcIlwiKS5qb2luKFwiXFx1MDBhMFwiKSA6IFwiXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHRdKTtcclxuXHJcblx0XHRcdFx0dmFyIHZhbGlkRWxlbWVudHMgPSBzZXR0aW5ncy5wYXN0ZV93b3JkX3ZhbGlkX2VsZW1lbnRzO1xyXG5cdFx0XHRcdGlmICghdmFsaWRFbGVtZW50cykge1xyXG5cdFx0XHRcdFx0dmFsaWRFbGVtZW50cyA9IChcclxuXHRcdFx0XHRcdFx0Jy1zdHJvbmcvYiwtZW0vaSwtdSwtc3BhbiwtcCwtb2wsLXVsLC1saSwtaDEsLWgyLC1oMywtaDQsLWg1LC1oNiwnICtcclxuXHRcdFx0XHRcdFx0Jy1wL2RpdiwtYVtocmVmfG5hbWVdLHN1YixzdXAsc3RyaWtlLGJyLGRlbCx0YWJsZVt3aWR0aF0sdHIsJyArXHJcblx0XHRcdFx0XHRcdCd0ZFtjb2xzcGFufHJvd3NwYW58d2lkdGhdLHRoW2NvbHNwYW58cm93c3Bhbnx3aWR0aF0sdGhlYWQsdGZvb3QsdGJvZHknXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gU2V0dXAgc3RyaWN0IHNjaGVtYVxyXG5cdFx0XHRcdHZhciBzY2hlbWEgPSBuZXcgU2NoZW1hKHtcclxuXHRcdFx0XHRcdHZhbGlkX2VsZW1lbnRzOiB2YWxpZEVsZW1lbnRzLFxyXG5cdFx0XHRcdFx0dmFsaWRfY2hpbGRyZW46ICctbGlbcF0nXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8vIEFkZCBzdHlsZS9jbGFzcyBhdHRyaWJ1dGUgdG8gYWxsIGVsZW1lbnQgcnVsZXMgc2luY2UgdGhlIHVzZXIgbWlnaHQgaGF2ZSByZW1vdmVkIHRoZW0gZnJvbVxyXG5cdFx0XHRcdC8vIHBhc3RlX3dvcmRfdmFsaWRfZWxlbWVudHMgY29uZmlnIG9wdGlvbiBhbmQgd2UgbmVlZCB0byBjaGVjayB0aGVtIGZvciBwcm9wZXJ0aWVzXHJcblx0XHRcdFx0VG9vbHMuZWFjaChzY2hlbWEuZWxlbWVudHMsIGZ1bmN0aW9uKHJ1bGUpIHtcclxuXHRcdFx0XHRcdC8qZXNsaW50IGRvdC1ub3RhdGlvbjowKi9cclxuXHRcdFx0XHRcdGlmICghcnVsZS5hdHRyaWJ1dGVzW1wiY2xhc3NcIl0pIHtcclxuXHRcdFx0XHRcdFx0cnVsZS5hdHRyaWJ1dGVzW1wiY2xhc3NcIl0gPSB7fTtcclxuXHRcdFx0XHRcdFx0cnVsZS5hdHRyaWJ1dGVzT3JkZXIucHVzaChcImNsYXNzXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICghcnVsZS5hdHRyaWJ1dGVzLnN0eWxlKSB7XHJcblx0XHRcdFx0XHRcdHJ1bGUuYXR0cmlidXRlcy5zdHlsZSA9IHt9O1xyXG5cdFx0XHRcdFx0XHRydWxlLmF0dHJpYnV0ZXNPcmRlci5wdXNoKFwic3R5bGVcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8vIFBhcnNlIEhUTUwgaW50byBET00gc3RydWN0dXJlXHJcblx0XHRcdFx0dmFyIGRvbVBhcnNlciA9IG5ldyBEb21QYXJzZXIoe30sIHNjaGVtYSk7XHJcblxyXG5cdFx0XHRcdC8vIEZpbHRlciBzdHlsZXMgdG8gcmVtb3ZlIFwibXNvXCIgc3BlY2lmaWMgc3R5bGVzIGFuZCBjb252ZXJ0IHNvbWUgb2YgdGhlbVxyXG5cdFx0XHRcdGRvbVBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ3N0eWxlJywgZnVuY3Rpb24obm9kZXMpIHtcclxuXHRcdFx0XHRcdHZhciBpID0gbm9kZXMubGVuZ3RoLCBub2RlO1xyXG5cclxuXHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcclxuXHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldO1xyXG5cdFx0XHRcdFx0XHRub2RlLmF0dHIoJ3N0eWxlJywgZmlsdGVyU3R5bGVzKG5vZGUsIG5vZGUuYXR0cignc3R5bGUnKSkpO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIHBvaW50ZXNzIHNwYW5zXHJcblx0XHRcdFx0XHRcdGlmIChub2RlLm5hbWUgPT0gJ3NwYW4nICYmIG5vZGUucGFyZW50ICYmICFub2RlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0bm9kZS51bndyYXAoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQvLyBDaGVjayB0aGUgY2xhc3MgYXR0cmlidXRlIGZvciBjb21tZW50cyBvciBkZWwgaXRlbXMgYW5kIHJlbW92ZSB0aG9zZVxyXG5cdFx0XHRcdGRvbVBhcnNlci5hZGRBdHRyaWJ1dGVGaWx0ZXIoJ2NsYXNzJywgZnVuY3Rpb24obm9kZXMpIHtcclxuXHRcdFx0XHRcdHZhciBpID0gbm9kZXMubGVuZ3RoLCBub2RlLCBjbGFzc05hbWU7XHJcblxyXG5cdFx0XHRcdFx0d2hpbGUgKGktLSkge1xyXG5cdFx0XHRcdFx0XHRub2RlID0gbm9kZXNbaV07XHJcblxyXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBub2RlLmF0dHIoJ2NsYXNzJyk7XHJcblx0XHRcdFx0XHRcdGlmICgvXihNc29Db21tZW50UmVmZXJlbmNlfE1zb0NvbW1lbnRUZXh0fG1zb0RlbCkkL2kudGVzdChjbGFzc05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0bm9kZS5yZW1vdmUoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0bm9kZS5hdHRyKCdjbGFzcycsIG51bGwpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQvLyBSZW1vdmUgYWxsIGRlbCBlbGVtZW50cyBzaW5jZSB3ZSBkb24ndCB3YW50IHRoZSB0cmFjayBjaGFuZ2VzIGNvZGUgaW4gdGhlIGVkaXRvclxyXG5cdFx0XHRcdGRvbVBhcnNlci5hZGROb2RlRmlsdGVyKCdkZWwnLCBmdW5jdGlvbihub2Rlcykge1xyXG5cdFx0XHRcdFx0dmFyIGkgPSBub2Rlcy5sZW5ndGg7XHJcblxyXG5cdFx0XHRcdFx0d2hpbGUgKGktLSkge1xyXG5cdFx0XHRcdFx0XHRub2Rlc1tpXS5yZW1vdmUoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0Ly8gS2VlcCBzb21lIG9mIHRoZSBsaW5rcyBhbmQgYW5jaG9yc1xyXG5cdFx0XHRcdGRvbVBhcnNlci5hZGROb2RlRmlsdGVyKCdhJywgZnVuY3Rpb24obm9kZXMpIHtcclxuXHRcdFx0XHRcdHZhciBpID0gbm9kZXMubGVuZ3RoLCBub2RlLCBocmVmLCBuYW1lO1xyXG5cclxuXHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcclxuXHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVzW2ldO1xyXG5cdFx0XHRcdFx0XHRocmVmID0gbm9kZS5hdHRyKCdocmVmJyk7XHJcblx0XHRcdFx0XHRcdG5hbWUgPSBub2RlLmF0dHIoJ25hbWUnKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChocmVmICYmIGhyZWYuaW5kZXhPZignI19tc29jb21fJykgIT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0XHRub2RlLnJlbW92ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoaHJlZiAmJiBocmVmLmluZGV4T2YoJ2ZpbGU6Ly8nKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGhyZWYgPSBocmVmLnNwbGl0KCcjJylbMV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKGhyZWYpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGhyZWYgPSAnIycgKyBocmVmO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCFocmVmICYmICFuYW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0bm9kZS51bndyYXAoKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgYWxsIG5hbWVkIGFuY2hvcnMgdGhhdCBhcmVuJ3Qgc3BlY2lmaWMgdG8gVE9DLCBGb290bm90ZXMgb3IgRW5kbm90ZXNcclxuXHRcdFx0XHRcdFx0XHRpZiAobmFtZSAmJiAhL15fPyg/OnRvY3xlZG58ZnRuKS9pLnRlc3QobmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG5vZGUudW53cmFwKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdG5vZGUuYXR0cih7XHJcblx0XHRcdFx0XHRcdFx0XHRocmVmOiBocmVmLFxyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8vIFBhcnNlIGludG8gRE9NIHN0cnVjdHVyZVxyXG5cdFx0XHRcdHZhciByb290Tm9kZSA9IGRvbVBhcnNlci5wYXJzZShjb250ZW50KTtcclxuXHJcblx0XHRcdFx0Ly8gUHJvY2VzcyBET01cclxuXHRcdFx0XHRpZiAoc2V0dGluZ3MucGFzdGVfY29udmVydF93b3JkX2Zha2VfbGlzdHMgIT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRjb252ZXJ0RmFrZUxpc3RzVG9Qcm9wZXJMaXN0cyhyb290Tm9kZSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBTZXJpYWxpemUgRE9NIGJhY2sgdG8gSFRNTFxyXG5cdFx0XHRcdGUuY29udGVudCA9IG5ldyBTZXJpYWxpemVyKHtcclxuXHRcdFx0XHRcdHZhbGlkYXRlOiBzZXR0aW5ncy52YWxpZGF0ZVxyXG5cdFx0XHRcdH0sIHNjaGVtYSkuc2VyaWFsaXplKHJvb3ROb2RlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRXb3JkRmlsdGVyWydpc1dvcmRDb250ZW50J10gPSBpc1dvcmRDb250ZW50O1xyXG5cclxuXHRyZXR1cm4gV29yZEZpbHRlcjtcclxufSk7XHJcblxyXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL3BsdWdpbnMvcGFzdGUvY2xhc3Nlcy9RdWlya3MuanNcclxuXHJcbi8qKlxyXG4gKiBRdWlya3MuanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNyBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgY29udGFpbnMgdmFyaW91cyBmaXhlcyBmb3IgYnJvd3NlcnMuIFRoZXNlIGlzc3VlcyBjYW4gbm90IGJlIGZlYXR1cmVcclxuICogZGV0ZWN0ZWQgc2luY2Ugd2UgaGF2ZSBubyBkaXJlY3QgY29udHJvbCBvdmVyIHRoZSBjbGlwYm9hcmQuIEhvd2V2ZXIgd2UgbWlnaHQgYmUgYWJsZVxyXG4gKiB0byByZW1vdmUgc29tZSBvZiB0aGVzZSBmaXhlcyBvbmNlIHRoZSBicm93c2VycyBnZXRzIHVwZGF0ZWQvZml4ZWQuXHJcbiAqXHJcbiAqIEBjbGFzcyB0aW55bWNlLnBhc3RlcGx1Z2luLlF1aXJrc1xyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuZGVmaW5lKFwidGlueW1jZS9wYXN0ZXBsdWdpbi9RdWlya3NcIiwgW1xyXG5cdFwidGlueW1jZS9FbnZcIixcclxuXHRcInRpbnltY2UvdXRpbC9Ub29sc1wiLFxyXG5cdFwidGlueW1jZS9wYXN0ZXBsdWdpbi9Xb3JkRmlsdGVyXCIsXHJcblx0XCJ0aW55bWNlL3Bhc3RlcGx1Z2luL1V0aWxzXCJcclxuXSwgZnVuY3Rpb24oRW52LCBUb29scywgV29yZEZpbHRlciwgVXRpbHMpIHtcclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHJcblx0cmV0dXJuIGZ1bmN0aW9uKGVkaXRvcikge1xyXG5cdFx0ZnVuY3Rpb24gYWRkUHJlUHJvY2Vzc0ZpbHRlcihmaWx0ZXJGdW5jKSB7XHJcblx0XHRcdGVkaXRvci5vbignQmVmb3JlUGFzdGVQcmVQcm9jZXNzJywgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdGUuY29udGVudCA9IGZpbHRlckZ1bmMoZS5jb250ZW50KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gYWRkUG9zdFByb2Nlc3NGaWx0ZXIoZmlsdGVyRnVuYykge1xyXG5cdFx0XHRlZGl0b3Iub24oJ1Bhc3RlUG9zdFByb2Nlc3MnLCBmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0ZmlsdGVyRnVuYyhlLm5vZGUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFJlbW92ZXMgQlIgZWxlbWVudHMgYWZ0ZXIgYmxvY2sgZWxlbWVudHMuIElFOSBoYXMgYSBuYXN0eSBidWcgd2hlcmUgaXQgcHV0cyBhIEJSIGVsZW1lbnQgYWZ0ZXIgZWFjaFxyXG5cdFx0ICogYmxvY2sgZWxlbWVudCB3aGVuIHBhc3RpbmcgZnJvbSB3b3JkLiBUaGlzIHJlbW92ZXMgdGhvc2UgZWxlbWVudHMuXHJcblx0XHQgKlxyXG5cdFx0ICogVGhpczpcclxuXHRcdCAqICA8cD5hPC9wPjxicj48cD5iPC9wPlxyXG5cdFx0ICpcclxuXHRcdCAqIEJlY29tZXM6XHJcblx0XHQgKiAgPHA+YTwvcD48cD5iPC9wPlxyXG5cdFx0ICovXHJcblx0XHRmdW5jdGlvbiByZW1vdmVFeHBsb3JlckJyRWxlbWVudHNBZnRlckJsb2NrcyhodG1sKSB7XHJcblx0XHRcdC8vIE9ubHkgZmlsdGVyIHdvcmQgc3BlY2lmaWMgY29udGVudFxyXG5cdFx0XHRpZiAoIVdvcmRGaWx0ZXIuaXNXb3JkQ29udGVudChodG1sKSkge1xyXG5cdFx0XHRcdHJldHVybiBodG1sO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBQcm9kdWNlIGJsb2NrIHJlZ2V4cCBiYXNlZCBvbiB0aGUgYmxvY2sgZWxlbWVudHMgaW4gc2NoZW1hXHJcblx0XHRcdHZhciBibG9ja0VsZW1lbnRzID0gW107XHJcblxyXG5cdFx0XHRUb29scy5lYWNoKGVkaXRvci5zY2hlbWEuZ2V0QmxvY2tFbGVtZW50cygpLCBmdW5jdGlvbihibG9jaywgYmxvY2tOYW1lKSB7XHJcblx0XHRcdFx0YmxvY2tFbGVtZW50cy5wdXNoKGJsb2NrTmFtZSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0dmFyIGV4cGxvcmVyQmxvY2tzUmVnRXhwID0gbmV3IFJlZ0V4cChcclxuXHRcdFx0XHQnKD86PGJyPiZuYnNwO1tcXFxcc1xcXFxyXFxcXG5dK3w8YnI+KSooPFxcXFwvPygnICsgYmxvY2tFbGVtZW50cy5qb2luKCd8JykgKyAnKVtePl0qPikoPzo8YnI+Jm5ic3A7W1xcXFxzXFxcXHJcXFxcbl0rfDxicj4pKicsXHJcblx0XHRcdFx0J2cnXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgQlI6cyBmcm9tOiA8QkxPQ0s+WDwvQkxPQ0s+PEJSPlxyXG5cdFx0XHRodG1sID0gVXRpbHMuZmlsdGVyKGh0bWwsIFtcclxuXHRcdFx0XHRbZXhwbG9yZXJCbG9ja3NSZWdFeHAsICckMSddXHJcblx0XHRcdF0pO1xyXG5cclxuXHRcdFx0Ly8gSUU5IGFsc28gYWRkcyBhbiBleHRyYSBCUiBlbGVtZW50IGZvciBlYWNoIHNvZnQtbGluZWZlZWQgYW5kIGl0IGFsc28gYWRkcyBhIEJSIGZvciBlYWNoIHdvcmQgd3JhcCBicmVha1xyXG5cdFx0XHRodG1sID0gVXRpbHMuZmlsdGVyKGh0bWwsIFtcclxuXHRcdFx0XHRbLzxicj48YnI+L2csICc8QlI+PEJSPiddLCAvLyBSZXBsYWNlIG11bHRpcGxlIEJSIGVsZW1lbnRzIHdpdGggdXBwZXJjYXNlIEJSIHRvIGtlZXAgdGhlbSBpbnRhY3RcclxuXHRcdFx0XHRbLzxicj4vZywgJyAnXSwgICAgICAgICAgICAvLyBSZXBsYWNlIHNpbmdsZSBiciBlbGVtZW50cyB3aXRoIHNwYWNlIHNpbmNlIHRoZXkgYXJlIHdvcmQgd3JhcCBCUjpzXHJcblx0XHRcdFx0Wy88QlI+PEJSPi9nLCAnPGJyPiddICAgICAgLy8gUmVwbGFjZSBiYWNrIHRoZSBkb3VibGUgYnJzIGJ1dCBpbnRvIGEgc2luZ2xlIEJSXHJcblx0XHRcdF0pO1xyXG5cclxuXHRcdFx0cmV0dXJuIGh0bWw7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBXZWJLaXQgaGFzIGEgbmFzdHkgYnVnIHdoZXJlIHRoZSBhbGwgY29tcHV0ZWQgc3R5bGVzIGdldHMgYWRkZWQgdG8gc3R5bGUgYXR0cmlidXRlcyB3aGVuIGNvcHkvcGFzdGluZyBjb250ZW50cy5cclxuXHRcdCAqIFRoaXMgZml4IHNvbHZlcyB0aGF0IGJ5IHNpbXBseSByZW1vdmluZyB0aGUgd2hvbGUgc3R5bGUgYXR0cmlidXRlLlxyXG5cdFx0ICpcclxuXHRcdCAqIFRoZSBwYXN0ZV93ZWJraXRfc3R5bGVzIG9wdGlvbiBjYW4gYmUgc2V0IHRvIHNwZWNpZnkgd2hhdCB0byBrZWVwOlxyXG5cdFx0ICogIHBhc3RlX3dlYmtpdF9zdHlsZXM6IFwibm9uZVwiIC8vIEtlZXAgbm8gc3R5bGVzXHJcblx0XHQgKiAgcGFzdGVfd2Via2l0X3N0eWxlczogXCJhbGxcIiwgLy8gS2VlcCBhbGwgb2YgdGhlbVxyXG5cdFx0ICogIHBhc3RlX3dlYmtpdF9zdHlsZXM6IFwiZm9udC13ZWlnaHQgY29sb3JcIiAvLyBLZWVwIHNwZWNpZmljIG9uZXNcclxuXHRcdCAqXHJcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudCBDb250ZW50IHRoYXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkLlxyXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSBQcm9jZXNzZWQgY29udGVudHMuXHJcblx0XHQgKi9cclxuXHRcdGZ1bmN0aW9uIHJlbW92ZVdlYktpdFN0eWxlcyhjb250ZW50KSB7XHJcblx0XHRcdC8vIFBhc3N0aHJvdWdoIGFsbCBzdHlsZXMgZnJvbSBXb3JkIGFuZCBsZXQgdGhlIFdvcmRGaWx0ZXIgaGFuZGxlIHRoYXQganVua1xyXG5cdFx0XHRpZiAoV29yZEZpbHRlci5pc1dvcmRDb250ZW50KGNvbnRlbnQpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEZpbHRlciBhd2F5IHN0eWxlcyB0aGF0IGlzbid0IG1hdGNoaW5nIHRoZSB0YXJnZXQgbm9kZVxyXG5cdFx0XHR2YXIgd2ViS2l0U3R5bGVzID0gZWRpdG9yLnNldHRpbmdzLnBhc3RlX3dlYmtpdF9zdHlsZXM7XHJcblxyXG5cdFx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLnBhc3RlX3JlbW92ZV9zdHlsZXNfaWZfd2Via2l0ID09PSBmYWxzZSB8fCB3ZWJLaXRTdHlsZXMgPT0gXCJhbGxcIikge1xyXG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAod2ViS2l0U3R5bGVzKSB7XHJcblx0XHRcdFx0d2ViS2l0U3R5bGVzID0gd2ViS2l0U3R5bGVzLnNwbGl0KC9bLCBdLyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEtlZXAgc3BlY2lmaWMgc3R5bGVzIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBub2RlIGNvbXB1dGVkIHN0eWxlXHJcblx0XHRcdGlmICh3ZWJLaXRTdHlsZXMpIHtcclxuXHRcdFx0XHR2YXIgZG9tID0gZWRpdG9yLmRvbSwgbm9kZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Tm9kZSgpO1xyXG5cclxuXHRcdFx0XHRjb250ZW50ID0gY29udGVudC5yZXBsYWNlKC8oPFtePl0rKSBzdHlsZT1cIihbXlwiXSopXCIoW14+XSo+KS9naSwgZnVuY3Rpb24oYWxsLCBiZWZvcmUsIHZhbHVlLCBhZnRlcikge1xyXG5cdFx0XHRcdFx0dmFyIGlucHV0U3R5bGVzID0gZG9tLnBhcnNlU3R5bGUodmFsdWUsICdzcGFuJyksIG91dHB1dFN0eWxlcyA9IHt9O1xyXG5cclxuXHRcdFx0XHRcdGlmICh3ZWJLaXRTdHlsZXMgPT09IFwibm9uZVwiKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBiZWZvcmUgKyBhZnRlcjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHdlYktpdFN0eWxlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR2YXIgaW5wdXRWYWx1ZSA9IGlucHV0U3R5bGVzW3dlYktpdFN0eWxlc1tpXV0sIGN1cnJlbnRWYWx1ZSA9IGRvbS5nZXRTdHlsZShub2RlLCB3ZWJLaXRTdHlsZXNbaV0sIHRydWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKC9jb2xvci8udGVzdCh3ZWJLaXRTdHlsZXNbaV0pKSB7XHJcblx0XHRcdFx0XHRcdFx0aW5wdXRWYWx1ZSA9IGRvbS50b0hleChpbnB1dFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgPSBkb20udG9IZXgoY3VycmVudFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSAhPSBpbnB1dFZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0b3V0cHV0U3R5bGVzW3dlYktpdFN0eWxlc1tpXV0gPSBpbnB1dFZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0b3V0cHV0U3R5bGVzID0gZG9tLnNlcmlhbGl6ZVN0eWxlKG91dHB1dFN0eWxlcywgJ3NwYW4nKTtcclxuXHRcdFx0XHRcdGlmIChvdXRwdXRTdHlsZXMpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGJlZm9yZSArICcgc3R5bGU9XCInICsgb3V0cHV0U3R5bGVzICsgJ1wiJyArIGFmdGVyO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiBiZWZvcmUgKyBhZnRlcjtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBSZW1vdmUgYWxsIGV4dGVybmFsIHN0eWxlc1xyXG5cdFx0XHRcdGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoLyg8W14+XSspIHN0eWxlPVwiKFteXCJdKilcIihbXj5dKj4pL2dpLCAnJDEkMycpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBLZWVwIGludGVybmFsIHN0eWxlc1xyXG5cdFx0XHRjb250ZW50ID0gY29udGVudC5yZXBsYWNlKC8oPFtePl0rKSBkYXRhLW1jZS1zdHlsZT1cIihbXlwiXSspXCIoW14+XSo+KS9naSwgZnVuY3Rpb24oYWxsLCBiZWZvcmUsIHZhbHVlLCBhZnRlcikge1xyXG5cdFx0XHRcdHJldHVybiBiZWZvcmUgKyAnIHN0eWxlPVwiJyArIHZhbHVlICsgJ1wiJyArIGFmdGVyO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHJldHVybiBjb250ZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIHJlbW92ZVVuZGVybGluZUFuZEZvbnRJbkFuY2hvcihyb290KSB7XHJcblx0XHRcdGVkaXRvci4kKCdhJywgcm9vdCkuZmluZCgnZm9udCx1JykuZWFjaChmdW5jdGlvbihpLCBub2RlKSB7XHJcblx0XHRcdFx0ZWRpdG9yLmRvbS5yZW1vdmUobm9kZSwgdHJ1ZSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNuaWZmIGJyb3dzZXJzIGFuZCBhcHBseSBmaXhlcyBzaW5jZSB3ZSBjYW4ndCBmZWF0dXJlIGRldGVjdFxyXG5cdFx0aWYgKEVudi53ZWJraXQpIHtcclxuXHRcdFx0YWRkUHJlUHJvY2Vzc0ZpbHRlcihyZW1vdmVXZWJLaXRTdHlsZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChFbnYuaWUpIHtcclxuXHRcdFx0YWRkUHJlUHJvY2Vzc0ZpbHRlcihyZW1vdmVFeHBsb3JlckJyRWxlbWVudHNBZnRlckJsb2Nrcyk7XHJcblx0XHRcdGFkZFBvc3RQcm9jZXNzRmlsdGVyKHJlbW92ZVVuZGVybGluZUFuZEZvbnRJbkFuY2hvcik7XHJcblx0XHR9XHJcblx0fTtcclxufSk7XHJcblxyXG4vLyBJbmNsdWRlZCBmcm9tOiBqcy90aW55bWNlL3BsdWdpbnMvcGFzdGUvY2xhc3Nlcy9QbHVnaW4uanNcclxuXHJcbi8qKlxyXG4gKiBQbHVnaW4uanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNSBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIHRpbnltY2UgcGx1Z2luIGxvZ2ljIGZvciB0aGUgcGFzdGUgcGx1Z2luLlxyXG4gKlxyXG4gKiBAY2xhc3MgdGlueW1jZS5wYXN0ZXBsdWdpbi5QbHVnaW5cclxuICogQHByaXZhdGVcclxuICovXHJcbmRlZmluZShcInRpbnltY2UvcGFzdGVwbHVnaW4vUGx1Z2luXCIsIFtcclxuXHRcInRpbnltY2UvUGx1Z2luTWFuYWdlclwiLFxyXG5cdFwidGlueW1jZS9wYXN0ZXBsdWdpbi9DbGlwYm9hcmRcIixcclxuXHRcInRpbnltY2UvcGFzdGVwbHVnaW4vV29yZEZpbHRlclwiLFxyXG5cdFwidGlueW1jZS9wYXN0ZXBsdWdpbi9RdWlya3NcIlxyXG5dLCBmdW5jdGlvbihQbHVnaW5NYW5hZ2VyLCBDbGlwYm9hcmQsIFdvcmRGaWx0ZXIsIFF1aXJrcykge1xyXG5cdHZhciB1c2VySXNJbmZvcm1lZDtcclxuXHJcblx0UGx1Z2luTWFuYWdlci5hZGQoJ3Bhc3RlJywgZnVuY3Rpb24oZWRpdG9yKSB7XHJcblx0XHR2YXIgc2VsZiA9IHRoaXMsIGNsaXBib2FyZCwgc2V0dGluZ3MgPSBlZGl0b3Iuc2V0dGluZ3M7XHJcblxyXG5cdFx0ZnVuY3Rpb24gaXNVc2VySW5mb3JtZWRBYm91dFBsYWluVGV4dCgpIHtcclxuXHRcdFx0cmV0dXJuIHVzZXJJc0luZm9ybWVkIHx8IGVkaXRvci5zZXR0aW5ncy5wYXN0ZV9wbGFpbnRleHRfaW5mb3JtID09PSBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiB0b2dnbGVQbGFpblRleHRQYXN0ZSgpIHtcclxuXHRcdFx0aWYgKGNsaXBib2FyZC5wYXN0ZUZvcm1hdCA9PSBcInRleHRcIikge1xyXG5cdFx0XHRcdGNsaXBib2FyZC5wYXN0ZUZvcm1hdCA9IFwiaHRtbFwiO1xyXG5cdFx0XHRcdGVkaXRvci5maXJlKCdQYXN0ZVBsYWluVGV4dFRvZ2dsZScsIHtzdGF0ZTogZmFsc2V9KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjbGlwYm9hcmQucGFzdGVGb3JtYXQgPSBcInRleHRcIjtcclxuXHRcdFx0XHRlZGl0b3IuZmlyZSgnUGFzdGVQbGFpblRleHRUb2dnbGUnLCB7c3RhdGU6IHRydWV9KTtcclxuXHJcblx0XHRcdFx0aWYgKCFpc1VzZXJJbmZvcm1lZEFib3V0UGxhaW5UZXh0KCkpIHtcclxuXHRcdFx0XHRcdHZhciBtZXNzYWdlID0gZWRpdG9yLnRyYW5zbGF0ZSgnUGFzdGUgaXMgbm93IGluIHBsYWluIHRleHQgbW9kZS4gQ29udGVudHMgd2lsbCBub3cgJyArXHJcblx0XHRcdFx0XHQnYmUgcGFzdGVkIGFzIHBsYWluIHRleHQgdW50aWwgeW91IHRvZ2dsZSB0aGlzIG9wdGlvbiBvZmYuJyk7XHJcblxyXG5cdFx0XHRcdFx0ZWRpdG9yLm5vdGlmaWNhdGlvbk1hbmFnZXIub3Blbih7XHJcblx0XHRcdFx0XHRcdHRleHQ6IG1lc3NhZ2UsXHJcblx0XHRcdFx0XHRcdHR5cGU6ICdpbmZvJ1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0dXNlcklzSW5mb3JtZWQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZWRpdG9yLmZvY3VzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gc3RhdGVDaGFuZ2UoKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHJcblx0XHRcdHNlbGYuYWN0aXZlKGNsaXBib2FyZC5wYXN0ZUZvcm1hdCA9PT0gJ3RleHQnKTtcclxuXHJcblx0XHRcdGVkaXRvci5vbignUGFzdGVQbGFpblRleHRUb2dnbGUnLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdHNlbGYuYWN0aXZlKGUuc3RhdGUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBkcmF3IGJhY2sgaWYgcG93ZXIgdmVyc2lvbiBpcyByZXF1ZXN0ZWQgYW5kIHJlZ2lzdGVyZWRcclxuXHRcdGlmICgvKF58WyAsXSlwb3dlcnBhc3RlKFssIF18JCkvLnRlc3Qoc2V0dGluZ3MucGx1Z2lucykgJiYgUGx1Z2luTWFuYWdlci5nZXQoJ3Bvd2VycGFzdGUnKSkge1xyXG5cdFx0XHQvKmVzbGludCBuby1jb25zb2xlOjAgKi9cclxuXHRcdFx0aWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUubG9nKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCJQb3dlclBhc3RlIGlzIGluY29tcGF0aWJsZSB3aXRoIFBhc3RlIHBsdWdpbiEgUmVtb3ZlICdwYXN0ZScgZnJvbSB0aGUgJ3BsdWdpbnMnIG9wdGlvbi5cIik7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHNlbGYuY2xpcGJvYXJkID0gY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZChlZGl0b3IpO1xyXG5cdFx0c2VsZi5xdWlya3MgPSBuZXcgUXVpcmtzKGVkaXRvcik7XHJcblx0XHRzZWxmLndvcmRGaWx0ZXIgPSBuZXcgV29yZEZpbHRlcihlZGl0b3IpO1xyXG5cclxuXHRcdGlmIChlZGl0b3Iuc2V0dGluZ3MucGFzdGVfYXNfdGV4dCkge1xyXG5cdFx0XHRzZWxmLmNsaXBib2FyZC5wYXN0ZUZvcm1hdCA9IFwidGV4dFwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChzZXR0aW5ncy5wYXN0ZV9wcmVwcm9jZXNzKSB7XHJcblx0XHRcdGVkaXRvci5vbignUGFzdGVQcmVQcm9jZXNzJywgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdHNldHRpbmdzLnBhc3RlX3ByZXByb2Nlc3MuY2FsbChzZWxmLCBzZWxmLCBlKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHNldHRpbmdzLnBhc3RlX3Bvc3Rwcm9jZXNzKSB7XHJcblx0XHRcdGVkaXRvci5vbignUGFzdGVQb3N0UHJvY2VzcycsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRzZXR0aW5ncy5wYXN0ZV9wb3N0cHJvY2Vzcy5jYWxsKHNlbGYsIHNlbGYsIGUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRlZGl0b3IuYWRkQ29tbWFuZCgnbWNlSW5zZXJ0Q2xpcGJvYXJkQ29udGVudCcsIGZ1bmN0aW9uKHVpLCB2YWx1ZSkge1xyXG5cdFx0XHRpZiAodmFsdWUuY29udGVudCkge1xyXG5cdFx0XHRcdHNlbGYuY2xpcGJvYXJkLnBhc3RlSHRtbCh2YWx1ZS5jb250ZW50KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHZhbHVlLnRleHQpIHtcclxuXHRcdFx0XHRzZWxmLmNsaXBib2FyZC5wYXN0ZVRleHQodmFsdWUudGV4dCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIEJsb2NrIGFsbCBkcmFnL2Ryb3AgZXZlbnRzXHJcblx0XHRpZiAoZWRpdG9yLnNldHRpbmdzLnBhc3RlX2Jsb2NrX2Ryb3ApIHtcclxuXHRcdFx0ZWRpdG9yLm9uKCdkcmFnZW5kIGRyYWdvdmVyIGRyYWdnZXN0dXJlIGRyYWdkcm9wIGRyb3AgZHJhZycsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUHJldmVudCB1c2VycyBmcm9tIGRyb3BwaW5nIGRhdGEgaW1hZ2VzIG9uIEdlY2tvXHJcblx0XHRpZiAoIWVkaXRvci5zZXR0aW5ncy5wYXN0ZV9kYXRhX2ltYWdlcykge1xyXG5cdFx0XHRlZGl0b3Iub24oJ2Ryb3AnLCBmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0dmFyIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xyXG5cclxuXHRcdFx0XHRpZiAoZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcyAmJiBkYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZWRpdG9yLmFkZENvbW1hbmQoJ21jZVRvZ2dsZVBsYWluVGV4dFBhc3RlJywgdG9nZ2xlUGxhaW5UZXh0UGFzdGUpO1xyXG5cclxuXHRcdGVkaXRvci5hZGRCdXR0b24oJ3Bhc3RldGV4dCcsIHtcclxuXHRcdFx0aWNvbjogJ3Bhc3RldGV4dCcsXHJcblx0XHRcdHRvb2x0aXA6ICdQYXN0ZSBhcyB0ZXh0JyxcclxuXHRcdFx0b25jbGljazogdG9nZ2xlUGxhaW5UZXh0UGFzdGUsXHJcblx0XHRcdG9uUG9zdFJlbmRlcjogc3RhdGVDaGFuZ2VcclxuXHRcdH0pO1xyXG5cclxuXHRcdGVkaXRvci5hZGRNZW51SXRlbSgncGFzdGV0ZXh0Jywge1xyXG5cdFx0XHR0ZXh0OiAnUGFzdGUgYXMgdGV4dCcsXHJcblx0XHRcdHNlbGVjdGFibGU6IHRydWUsXHJcblx0XHRcdGFjdGl2ZTogY2xpcGJvYXJkLnBhc3RlRm9ybWF0LFxyXG5cdFx0XHRvbmNsaWNrOiB0b2dnbGVQbGFpblRleHRQYXN0ZSxcclxuXHRcdFx0b25Qb3N0UmVuZGVyOiBzdGF0ZUNoYW5nZVxyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn0pO1xyXG5cclxuZXhwb3NlKFtcInRpbnltY2UvcGFzdGVwbHVnaW4vVXRpbHNcIl0pO1xyXG59KSh3aW5kb3cpO1xyXG4iLCJpbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCBcIkBmaXFhcy91dGlsc1wiO1xyXG5pbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBBdHRyaWJ1dGUsIE91dHB1dEFyZ3N9IGZyb20gJ0BmaXFhcy9hbmd1bGFyLXV0aWxzJztcclxuaW1wb3J0IFwidGlueW1jZVwiXHJcbmltcG9ydCB7IHRpbnltY2UgYXMgdGlueU1DRSB9IGZyb20gXCJ0aW55bWNlXCJcclxuaW1wb3J0IFwiYW5ndWxhci11aS10aW55bWNlXCJcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tIFwiQGZpcWFzL3V0aWxzXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZGlhbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBDYXNlRmlsZURhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsZSc7XHJcbmltcG9ydCB7IEZpbGVSZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZVJlYWRlclNlcnZpY2UnO1xyXG5pbXBvcnQgeyByZXRyeSB9IGZyb20gXCJyeGpzL29wZXJhdG9yL3JldHJ5XCI7XHJcblxyXG5pbnRlcmZhY2UgaW1hZ2VEYXRhIHsgYmxvYjogKCkgPT4gQmxvYiwgYmFzZTY0OiAoKSA9PiBzdHJpbmcsIGZpbGVuYW1lOiAoKSA9PiBzdHJpbmcsIGlkOiAoKSA9PiBzdHJpbmcgfTtcclxuaW50ZXJmYWNlIGltYWdlTWV0YSB7IGFsdD86IHN0cmluZywgY29uc3RyYWluPzogYm9vbGVhbiwgZmlsZVR5ZT86IHN0cmluZywgaGVpZ2h0Pzogc3RyaW5nLCB3aWR0aD86IHN0cmluZywgc3JjPzogc3RyaW5nIH07XHJcbmV4cG9ydCB0eXBlIGltYWdlVHlwZSA9IFwianBlZ1wiIHwgXCJwbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0RWRpdG9yQ29tbWFuZHMge1xyXG4gICAgcHVibGljIHN0YXRpYyBDdXJzb3JBdEVuZCA9IFwiQ3Vyc29yQXRFbmRcIjtcclxufVxyXG5cclxuY2xhc3MgRWRpdG9yQnV0dG9uIHtcclxuICAgIHRleHQ/OiBzdHJpbmc7XHJcbiAgICB0eXBlPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICB0b29sdGlwPzogc3RyaW5nO1xyXG4gICAgaWNvbj86IHN0cmluZztcclxuICAgIHZhbHVlcz86IGFueTtcclxuICAgIGZpeGVkV2lkdGg/OiBib29sZWFuO1xyXG4gICAgY21kPzogc3RyaW5nO1xyXG4gICAgb25Qb3N0UmVuZGVyPzogKCkgPT4gdm9pZDtcclxuICAgIG9uY2xpY2s/OiAoZXZlbnQ6IHRpbnlNQ0UuRXZlbnRzLkV2ZW50ICYgeyBjb250cm9sOiB0aW55TUNFLnVpLkNvbnRyb2wgfSkgPT4gdm9pZDtcclxuICAgIG9uc2VsZWN0PzogKGV2ZW50OiB0aW55TUNFLkV2ZW50cy5FdmVudCAmIHsgY29udHJvbDogdGlueU1DRS51aS5Db250cm9sIH0pID0+IHZvaWQ7XHJcbiAgICBpbnN0YW5jZT86IHRpbnlNQ0UudWkuQ29udHJvbFxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFRleHRFZGl0b3Iuc2VsZWN0b3IsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlXCIgY2xhc3M9XCJlZGl0b3Jjb250YWluZXIgbmctY2xhc3M6e2lzZm9jdXM6JGN0cmwuaXNGb2N1cywgJ2hhcy12YWx1ZSc6JGN0cmwuaGFzVmFsdWUsIGVycm9yOiRjdHJsLnNob3dFcnJvciwgcmVhZG9ubHk6ISRjdHJsLmVkaXRhYmxlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJlZGl0b3JUb29sYmFyLXt7JGlkfX1cIiBjbGFzcz1cImVkaXRvclRvb2xiYXJcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhpbnRcIiBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6MHB4O3RvcDo0MHB4XCIgbmctaGlkZT1cIiRjdHJsLmhhc1ZhbHVlXCI+e3s6OiRjdHJsLmhpbnR9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdWktdGlueW1jZT1cIiRjdHJsLm9wdGlvbnNcIiBjbGFzcz1cImVkaXRvclwiIG5nLW1vZGVsPVwiJGN0cmwuaW50ZXJuYWxWYWx1ZVwiIG5nLWZvY3VzPVwiJGN0cmwub25Gb2N1cygkZXZlbnQpXCIgbmctYmx1cj1cIiRjdHJsLm9uQmx1cigkZXZlbnQpXCIgc3R5bGU9XCJvdmVyZmxvdzogYXV0bztvdmVyZmxvdy15OnNjcm9sbDtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA0MHB4O2xlZnQ6IDBweDtyaWdodDogMHB4O2JvdHRvbTogMHB4O1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFuZGF0b3J5LWRvdFwiIG5nLWlmPVwiJGN0cmwubWFuZGF0b3J5XCIgdWliLXRvb2x0aXA9XCJ7eydGSUVMRF9SRVFVSVJFRF9UT09MVElQJyB8IHRyYW5zbGF0ZX19XCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXh0RWRpdG9yIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcInRleHRFZGl0b3JcIjtcclxuICAgIHByaXZhdGUgZWRpdG9yOiB0aW55TUNFLkVkaXRvcjtcclxuICAgIHByaXZhdGUgaXNGb2N1czogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgd2FzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxWYWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfZWRpdGFibGU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgZWRpdGFibGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlICYmICF0aGlzLl9yZWFkT25seTtcclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHByaXZhdGUgbWF4SW1hZ2VXaWR0aDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgcHJpdmF0ZSBtYXhJbWFnZUhlaWdodDogbnVtYmVyO1xyXG5cclxuXHJcbiAgICBwcml2YXRlIGdldCBpbnRlcm5hbFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkID0gdGhpcy5faW50ZXJuYWxWYWx1ZTtcclxuICAgICAgICB0aGlzLl9pbnRlcm5hbFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKG9sZCAhPT0gdGhpcy5faW50ZXJuYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkKHsgdmFsdWU6IHRoaXMuX2ludGVybmFsVmFsdWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uVmFsdWVDaGFuZ2VkOiAoKHBhcmFtczogeyB2YWx1ZTogc3RyaW5nIH0pID0+IHZvaWQpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbmZpbGVhZGRlZDogT3V0cHV0QXJnczx7IGZpbGU6IENhc2VGaWxlRGF0YSB9PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckc2NvcGUnKSAkc2NvcGU6IGFuZ3VsYXIuSVNjb3BlLFxyXG4gICAgICAgIEBJbmplY3QoJyR3aW5kb3cnKSBwcml2YXRlICR3aW5kb3c6IGFuZ3VsYXIuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJykgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ0F0dGFjaG1lbnRMaW1pdCcpIHByaXZhdGUgYXR0YWNobWVudExpbWl0OiBudW1iZXIsXHJcbiAgICAgICAgQEluamVjdCgnZmlsZVJlYWRlclNlcnZpY2UnKSBwcml2YXRlIGZpbGVSZWFkZXJTZXJ2aWNlOiBGaWxlUmVhZGVyU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25TZXR1cCA9IHRoaXMub25TZXR1cC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25JbWFnZSA9IHRoaXMub25JbWFnZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25GaWxlUGlja2VyID0gdGhpcy5vbkZpbGVQaWNrZXIuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHBsdWdpbnM6IFwiaW1hZ2UgcGFzdGVcIixcclxuICAgICAgICAgICAgc2tpbl91cmw6IFwiL3RpbnltY2UvbGlnaHRncmF5XCIsXHJcbiAgICAgICAgICAgIHNldHVwOiB0aGlzLm9uU2V0dXAsXHJcbiAgICAgICAgICAgIHN0YXR1c2JhcjogZmFsc2UsXHJcbiAgICAgICAgICAgIGJyb3dzZXJfc3BlbGxjaGVjazogdHJ1ZSxcclxuICAgICAgICAgICAgY29udmVydF91cmxzOiBmYWxzZSxcclxuICAgICAgICAgICAgZWxlbWVudF9mb3JtYXQ6IFwiaHRtbFwiLFxyXG4gICAgICAgICAgICBpbmxpbmU6IHRydWUsXHJcbiAgICAgICAgICAgIGluc2VydF90b29sYmFyOiAncXVpY2tpbWFnZScsXHJcbiAgICAgICAgICAgIGZpeGVkX3Rvb2xiYXJfY29udGFpbmVyOiBcIiNlZGl0b3JUb29sYmFyLVwiICsgJHNjb3BlLiRpZCxcclxuICAgICAgICAgICAgaW1hZ2VzX3VwbG9hZF9oYW5kbGVyOiB0aGlzLm9uSW1hZ2UsXHJcbiAgICAgICAgICAgIG1lbnViYXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB0b29sYmFyOiBgdW5kbyByZWRvIHwgYnRuLWJvbGQgYnRuLWl0YWxpYyBidG4tdW5kZXJsaW5lIGJ0bi1zdHJpa2V0aHJvdWdoIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bi1hbGlnbmxlZnQgYnRuLWFsaWduY2VudGVyIGJ0bi1hbGlnbnJpZ2h0IHwgYnRuLW91dGRlbnQgYnRuLWluZGVudCB8IGJ0bi1yZW1vdmVmb3JtYXQgfCBidG4tZm9udHNlbGVjdCBidG4tZm9udHNpemVzZWxlY3QgfCBidG4taW1hZ2VgLFxyXG4gICAgICAgICAgICBmaWxlX3BpY2tlcl90eXBlczogXCJpbWFnZVwiLFxyXG4gICAgICAgICAgICBmaWxlX3BpY2tlcl9jYWxsYmFjazogdGhpcy5vbkZpbGVQaWNrZXJcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub3B0aW9uc1sncGFzdGVfZGF0YV9pbWFnZXMnXSA9IHRydWU7XHJcbiAgICAgICAgJHNjb3BlLiRvbihUZXh0RWRpdG9yQ29tbWFuZHMuQ3Vyc29yQXRFbmQsICgpID0+IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jdXJzb3JBdEVuZCgpLCAyNTApKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFN0YXRlSGFuZGxlcihuYW1lOiBzdHJpbmcsIGJ1dHRvbjogRWRpdG9yQnV0dG9uKSB7XHJcbiAgICAgICAgdmFyIGVkaXRvcjogYW55ID0gdGhpcy5lZGl0b3I7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiB0aW55TUNFLnVpLkNvbnRyb2wpIHtcclxuICAgICAgICAgICAgdmFyIGJ0biA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmIChlZGl0b3IuZm9ybWF0dGVyKSB7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3IuZm9ybWF0dGVyLmZvcm1hdENoYW5nZWQobmFtZSwgKHN0YXRlKSA9PiBidG4uYWN0aXZlKHN0YXRlKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3Iub24oJ2luaXQnLCAoKSA9PiBlZGl0b3IuZm9ybWF0dGVyLmZvcm1hdENoYW5nZWQobmFtZSwgKHN0YXRlKSA9PiBidG4uYWN0aXZlKHN0YXRlKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRlQnV0dG9uczogeyBbbmFtZTogc3RyaW5nXTogRWRpdG9yQnV0dG9uIH0gPSB7XHJcbiAgICAgICAgJ2JvbGQnOiB7XHJcbiAgICAgICAgICAgIHRvb2x0aXA6IFwiQm9sZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImJvbGRcIixcclxuICAgICAgICAgICAgY21kOiBcIkJvbGRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ2l0YWxpYyc6IHtcclxuICAgICAgICAgICAgdG9vbHRpcDogXCJJdGFsaWNcIixcclxuICAgICAgICAgICAgaWNvbjogXCJpdGFsaWNcIixcclxuICAgICAgICAgICAgY21kOiBcIkl0YWxpY1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICAndW5kZXJsaW5lJzoge1xyXG4gICAgICAgICAgICB0b29sdGlwOiBcIlVuZGVybGluZVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcInVuZGVybGluZVwiLFxyXG4gICAgICAgICAgICBjbWQ6IFwiVW5kZXJsaW5lXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgICdzdHJpa2V0aHJvdWdoJzoge1xyXG4gICAgICAgICAgICB0b29sdGlwOiBcIlN0cmlrZXRocm91Z2hcIixcclxuICAgICAgICAgICAgaWNvbjogXCJzdHJpa2V0aHJvdWdoXCIsXHJcbiAgICAgICAgICAgIGNtZDogXCJTdHJpa2V0aHJvdWdoXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgICdhbGlnbmxlZnQnOiB7XHJcbiAgICAgICAgICAgIHRvb2x0aXA6IFwiQWxpZ24gbGVmdFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFsaWdubGVmdFwiLFxyXG4gICAgICAgICAgICBjbWQ6IFwiSnVzdGlmeUxlZnRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ2FsaWduY2VudGVyJzoge1xyXG4gICAgICAgICAgICB0b29sdGlwOiBcIkFsaWduIGNlbnRlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFsaWduY2VudGVyXCIsXHJcbiAgICAgICAgICAgIGNtZDogXCJKdXN0aWZ5Q2VudGVyXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgICdhbGlnbnJpZ2h0Jzoge1xyXG4gICAgICAgICAgICB0b29sdGlwOiBcIkFsaWduIHJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYWxpZ25yaWdodFwiLFxyXG4gICAgICAgICAgICBjbWQ6IFwiSnVzdGlmeVJpZ2h0XCJcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgY29tbWFuZEJ1dHRvbnM6IHsgW25hbWU6IHN0cmluZ106IEVkaXRvckJ1dHRvbiB9ID0ge1xyXG4gICAgICAgICdvdXRkZW50Jzoge1xyXG4gICAgICAgICAgICB0b29sdGlwOiBcIkRlY3JlYXNlIGluZGVudFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcIm91dGRlbnRcIixcclxuICAgICAgICAgICAgY21kOiBcIk91dGRlbnRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ2luZGVudCc6IHtcclxuICAgICAgICAgICAgdG9vbHRpcDogXCJJbmNyZWFzZSBpbmRlbnRcIixcclxuICAgICAgICAgICAgaWNvbjogXCJpbmRlbnRcIixcclxuICAgICAgICAgICAgY21kOiBcIkluZGVudFwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICAncmVtb3ZlZm9ybWF0Jzoge1xyXG4gICAgICAgICAgICB0b29sdGlwOiBcIlJlbW92ZSBmb3JtYXR0aW5nXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVtb3ZlZm9ybWF0XCIsXHJcbiAgICAgICAgICAgIGNtZDogXCJSZW1vdmVGb3JtYXRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ2ltYWdlJzoge1xyXG4gICAgICAgICAgICB0b29sdGlwOiBcIkluc2VydC9FZGl0IGltYWdlXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiaW1hZ2VcIixcclxuICAgICAgICAgICAgY21kOiBcIm1jZUltYWdlXCJcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgYnV0dG9uczogeyBbbmFtZTogc3RyaW5nXTogRWRpdG9yQnV0dG9uIH0gPSB7fTtcclxuXHJcbiAgICBwcml2YXRlIG9uU2V0dXAoZWRpdG9yOiB0aW55TUNFLkVkaXRvcikge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xyXG4gICAgICAgIFV0aWxzLmZvckVhY2hQcm9wZXJ0eTxFZGl0b3JCdXR0b24+KHRoaXMuc3RhdGVCdXR0b25zLCAocCwgaykgPT4ge1xyXG4gICAgICAgICAgICBwLm9uUG9zdFJlbmRlciA9IHRoaXMuc2V0U3RhdGVIYW5kbGVyKGssIHApO1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnNba10gPSBwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFV0aWxzLmZvckVhY2hQcm9wZXJ0eTxFZGl0b3JCdXR0b24+KHRoaXMuY29tbWFuZEJ1dHRvbnMsIChwLCBrKSA9PiB0aGlzLmJ1dHRvbnNba10gPSBwKTtcclxuXHJcbiAgICAgICAgdmFyIHsga2V5LCBidXR0b24gfSA9IGNyZWF0ZUZvbnRTZWxlY3RCdXR0b24oZWRpdG9yKTtcclxuICAgICAgICB0aGlzLmJ1dHRvbnNba2V5XSA9IGJ1dHRvbjtcclxuXHJcbiAgICAgICAgdmFyIHsga2V5LCBidXR0b24gfSA9IGNyZWF0ZUZvbnRTaXplQnV0dG9uKGVkaXRvcik7XHJcbiAgICAgICAgdGhpcy5idXR0b25zW2tleV0gPSBidXR0b247XHJcblxyXG4gICAgICAgIGxldCBidXR0b25zID0gdGhpcy5idXR0b25zO1xyXG4gICAgICAgIGNvbnN0IHQgPSB0aGlzO1xyXG4gICAgICAgIFV0aWxzLmZvckVhY2hQcm9wZXJ0eTxFZGl0b3JCdXR0b24+KHRoaXMuYnV0dG9ucyxcclxuICAgICAgICAgICAgKHAsIGspID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBwciA9IHAub25Qb3N0UmVuZGVyO1xyXG4gICAgICAgICAgICAgICAgcC5vblBvc3RSZW5kZXIgPSBmdW5jdGlvbiAodGhpczogdGlueU1DRS51aS5Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uc1trXS5pbnN0YW5jZSA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCh0LmVkaXRhYmxlICE9PSB1bmRlZmluZWQgJiYgIXQuZWRpdGFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwci5hcHBseSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLmFkZEJ1dHRvbignYnRuLScgKyBrLCBwKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdGFibGUgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5lZGl0YWJsZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5zZXRNb2RlKCdyZWFkb25seScpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNldE1vZGUoJ2Rlc2lnbicpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMgc29tZXRpbWVzIGZhaWxzLCBidXQgdGhhdCdzIG9rLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJzb3JBdEVuZCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvci5mb2N1cyhmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLmVkaXRvci5nZXRCb2R5KCksIHRydWUpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5jb2xsYXBzZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoJ21jZUluc2VydENvbnRlbnQnLCBmYWxzZSwgXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvcHRpb25zOiB0aW55TUNFLlNldHRpbmdzO1xyXG5cclxuICAgIHByaXZhdGUgc3RyaXBSaWNoVGV4dFJlZ2V4OiBhbnkgPSAvKD8hLmltZy4qc3JjLispKDwoW14+XSspPil8Jm5ic3A7fFxccy9pZztcclxuICAgIHByaXZhdGUgZ2V0IGhhc1ZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhbHVlLnJlcGxhY2UodGhpcy5zdHJpcFJpY2hUZXh0UmVnZXgsIFwiXCIpICE9PSBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXQgc2hvd0Vycm9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hbmRhdG9yeSAmJiAhdGhpcy5pc0ZvY3VzICYmIHRoaXMud2FzRm9jdXNlZCAmJiAhdGhpcy5oYXNWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tYW5kYXRvcnk7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGdldCBtYW5kYXRvcnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hbmRhdG9yeTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgbWFuZGF0b3J5KHZhbDogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX21hbmRhdG9yeSA9IHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IFwidHJ1ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2hpbnQ6IHN0cmluZztcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IGhpbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpbnQgfHwgXCJcIjtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHNldCBoaW50KHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5faGludCA9IHZhbCB8fCBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZvY3VzKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy53YXNGb2N1c2VkID0gdGhpcy5pc0ZvY3VzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CbHVyKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc0ZvY3VzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsZVBpY2tlcihjYWxsYmFjazogKHVyaTogc3RyaW5nLCBtZXRhOiBpbWFnZU1ldGEpID0+IHt9LCB2YWx1ZSwgbWV0YTogaW1hZ2VNZXRhKSB7XHJcbiAgICAgICAgbGV0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnZmlsZScpO1xyXG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgJ2ltYWdlLyonKTtcclxuICAgICAgICBpbnB1dC5vbmNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzWzBdO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZmlsZVNpemVBbGxvd2VkKGZpbGUuc2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZVNpemVUb29MYXJnZShmaWxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGV2OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gJ2Jsb2JpZCcgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGV2LnRhcmdldFsncmVzdWx0J107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmltYWdlRGltZW5zaW9uc0FsbG93ZWQoaW1nLCB0aGlzLm1heEltYWdlV2lkdGgsIHRoaXMubWF4SW1hZ2VIZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlVG9vTGFyZ2UoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzaXplSW1hZ2UoaW1nLCB0aGlzLm1heEltYWdlV2lkdGgsIHRoaXMubWF4SW1hZ2VIZWlnaHQsIFwicG5nXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYkNhY2hlID0gdGhpcy5lZGl0b3JbJ2VkaXRvclVwbG9hZCddLmJsb2JDYWNoZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJJbmZvID0gYkNhY2hlLmNyZWF0ZShpZCwgZGF0YVVSSXRvQmxvYihkYXRhLmltZ3JlcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYkNhY2hlLmFkZChiSW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmkgPSBiSW5mby5ibG9iVXJpKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh1cmksIHsgYWx0OiBmaWxlLm5hbWUsIHNyYzogdXJpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gcmVzO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuJHdpbmRvdy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucHV0KTtcclxuICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xvc2VUaW55bWNlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aW55bWNlICYmIHRpbnltY2UuYWN0aXZlRWRpdG9yICYmIHRpbnltY2UuYWN0aXZlRWRpdG9yLndpbmRvd01hbmFnZXIpIHtcclxuICAgICAgICAgICAgdGlueW1jZS5hY3RpdmVFZGl0b3Iud2luZG93TWFuYWdlci5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGVTaXplVG9vTGFyZ2UoZmlsZTogRmlsZSkgOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IChmaWxlLm5hbWUpID8gZmlsZS5uYW1lIDogJ2ltYWdlLnBuZyc7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2VUaW55bWNlRGlhbG9nKCk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvckRpYWxvZyhcIndhcm5pbmdcIiwgJ0VSUk9SJywgJ0ZJTEVTX0VYQ0VFRFNfTElNSVQnLCB7XHJcbiAgICAgICAgbWVzc2FnZUFyZ3M6IFt0aGlzLmF0dGFjaG1lbnRMaW1pdC50b0ZpeGVkKDIpLCBmaWxlbmFtZV0sXHJcbiAgICAgICAgdHJhbnNsYXRlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbWFnZVRvb0xhcmdlKGZpbGU6IEZpbGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpbWFnZVNpemVNZXNzYWdlID0gKGZpbGUubmFtZSkgPyAnSU1BR0VfVE9fTEFSR0UnIDogJ0lNQUdFX1RPX0xBUkdFX05PX0ZJTEVfTkFNRSc7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAoZmlsZS5uYW1lKSA/IGZpbGUubmFtZSA6ICdpbWFnZS5wbmcnO1xyXG4gICAgICAgIGNvbnN0IGZpbGVEZXNjcmlwdGlvbiA9IChmaWxlLm5hbWUpID8gZmlsZS5uYW1lIDogJ2ltYWdlLnBuZyc7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2VUaW55bWNlRGlhbG9nKCk7XHJcbiAgICAgICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbkFyZ3MgPSB0aGlzLm1heEltYWdlV2lkdGggKyAnIHggJyArIHRoaXMubWF4SW1hZ2VIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtYXRpb25EaWFsb2coXCJ3YXJuaW5nXCIsIFwiSU1BR0VfVE9fTEFSR0VfVElUTEVcIiwgaW1hZ2VTaXplTWVzc2FnZSwgXCJBRERfQVRUQUNITUVOVF9CVVRUT05cIiwgbnVsbCxcclxuICAgICAgICAgICAge21lc3NhZ2VBcmdzOiBbZmlsZS5uYW1lLCBkaW1lbnNpb25BcmdzXSwgdHJhbnNsYXRlOiB0cnVlfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVTaXplQWxsb3dlZChmaWxlLnNpemUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dFcnJvckRpYWxvZyhcIndhcm5pbmdcIiwgJ0VSUk9SJywgJ0ZJTEVTX0VYQ0VFRFNfTElNSVQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VBcmdzOiBbdGhpcy5hdHRhY2htZW50TGltaXQudG9GaXhlZCgyKSwgZmlsZU5hbWVdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlUmVhZGVyU2VydmljZS5SZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSkudGhlbih5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNhc2VGaWxlOiBDYXNlRmlsZURhdGEgPSA8Q2FzZUZpbGVEYXRhPntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmaWxlRGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBidG9hKDxzdHJpbmc+eSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdBdHRhY2htZW50KGNhc2VGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoYXQucmVtb3ZlRW1wdHlJbWFnZVRhZ3MoKTtcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5yZW1vdmVFbXB0eUltYWdlVGFncygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZUVtcHR5SW1hZ2VUYWdzKCkge1xyXG4gICAgICAgIGxldCBpbWdSZWdleDogYW55ID0gLzxpbWc+L2lnO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUuaW5kZXhPZignPGltZz4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnJlcGxhY2UoaW1nUmVnZXgsIFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5lZGl0b3JbJ3RhcmdldEVsbSddICYmIHRoaXMuZWRpdG9yWyd0YXJnZXRFbG0nXS5pbm5lckhUTUwgJiZcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3JbJ3RhcmdldEVsbSddLmlubmVySFRNTC5pbmRleE9mKCc8aW1nPicpID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3JbJ3RhcmdldEVsbSddLmlubmVySFRNTCA9IHRoaXMuZWRpdG9yWyd0YXJnZXRFbG0nXS5pbm5lckhUTUwucmVwbGFjZShpbWdSZWdleCwgXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25JbWFnZShmaWxlRHJvcHBlZDogYW55LCBjYWxsYmFjazogKHVybDogc3RyaW5nKSA9PiB7fSwgZXJyb3I6IChlcnJvcjogc3RyaW5nKSA9PiB7fSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlRHJvcHBlZC5ibG9iKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbGVTaXplQWxsb3dlZChmaWxlLnNpemUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZVNpemVUb29MYXJnZShmaWxlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGV2OiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gZXYudGFyZ2V0W1wicmVzdWx0XCJdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbWFnZURpbWVuc2lvbnNBbGxvd2VkKGltZywgdGhpcy5tYXhJbWFnZVdpZHRoLCB0aGlzLm1heEltYWdlSGVpZ2h0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlVG9vTGFyZ2UoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGltZy5zcmMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpbWcuc3JjID0gcmVzO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5ld0F0dGFjaG1lbnQoZmlsZURhdGE6IENhc2VGaWxlRGF0YSkge1xyXG4gICAgICAgIHRoaXMub25maWxlYWRkZWQoeyBmaWxlOiBmaWxlRGF0YSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGltYWdlRGltZW5zaW9uc0FsbG93ZWQoaW1nOiBIVE1MSW1hZ2VFbGVtZW50LCBtYXhXaWR0aDogbnVtYmVyLCBtYXhIZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoaW1nLndpZHRoIDw9IG1heFdpZHRoICYmIGltZy5oZWlnaHQgPD0gbWF4SGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbGVTaXplQWxsb3dlZChpbWdTaXplOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKGltZ1NpemUgPD0gdGhpcy5hdHRhY2htZW50TGltaXQgKiAxMDI0ICogMTAyNCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9lZGl0YWJsZSB9XHJcbiAgICBwdWJsaWMgc2V0IHJlYWRPbmx5KHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwgIT0gdGhpcy5fcmVhZE9ubHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkgPSB2YWw7XHJcbiAgICAgICAgICAgIGlmICh2YWwgJiYgdGhpcy5lZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNldE1vZGUoJ3JlYWRvbmx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBlZGl0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0YWJsZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNldE1vZGUoJ3JlYWRvbmx5Jyk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNldE1vZGUoJ2Rlc2lnbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBVdGlscy5mb3JFYWNoUHJvcGVydHk8RWRpdG9yQnV0dG9uPih0aGlzLmJ1dHRvbnMsIChiLCBrKSA9PiBiLmluc3RhbmNlLmRpc2FibGVkKCF2YWx1ZSksIChiLCBrKSA9PiBiLmluc3RhbmNlICE9IHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUZvbnRTaXplQnV0dG9uKGVkaXRvcjogdGlueU1DRS5FZGl0b3IpOiB7IGtleTogc3RyaW5nLCBidXR0b246IEVkaXRvckJ1dHRvbiB9IHtcclxuICAgIHZhciBmb250c2l6ZUZvcm1hdHMgPSBlZGl0b3Iuc2V0dGluZ3NbJ2ZvbnRzaXplRm9ybWF0cyddIHx8ICc4cHQgMTBwdCAxMnB0IDE0cHQgMThwdCAyNHB0IDM2cHQnO1xyXG4gICAgdmFyIGl0ZW1zID0gZm9udHNpemVGb3JtYXRzLnNwbGl0KCcgJykubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIHZhciB0ZXh0ID0gaXRlbSwgdmFsdWUgPSBpdGVtO1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBpdGVtLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHRleHQgPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzWzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCB2YWx1ZTogdmFsdWUgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAga2V5OiAnZm9udHNpemVzZWxlY3QnLFxyXG4gICAgICAgIGJ1dHRvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnbGlzdGJveCcsXHJcbiAgICAgICAgICAgIHRleHQ6ICdGb250IFNpemVzJyxcclxuICAgICAgICAgICAgdG9vbHRpcDogJ0ZvbnQgU2l6ZXMnLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGl0ZW1zLFxyXG4gICAgICAgICAgICBmaXhlZFdpZHRoOiB0cnVlLFxyXG4gICAgICAgICAgICBvblBvc3RSZW5kZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidG4gPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLm9uKCdub2RlQ2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHggPSBGb250SW5mby5nZXRGb250U2l6ZShlZGl0b3IuZ2V0Qm9keSgpLCBlLmVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwdCA9IEZvbnRJbmZvLnRvUHQocHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gcHggfHwgaXRlbS52YWx1ZSA9PT0gcHQpLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY3VycmVudCA/IGN1cnJlbnQudmFsdWUgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ0bi52YWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnRuLnRleHQocHQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uY2xpY2s6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jb250cm9sLnNldHRpbmdzWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdGb250U2l6ZScsIGZhbHNlLCBlLmNvbnRyb2wuc2V0dGluZ3NbJ3ZhbHVlJ10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGb250U2VsZWN0QnV0dG9uKGVkaXRvcjogdGlueU1DRS5FZGl0b3IpOiB7IGtleTogc3RyaW5nLCBidXR0b246IEVkaXRvckJ1dHRvbiB9IHtcclxuICAgIGNvbnN0IGRlZmF1bHRGb250c0Zvcm1hdHMgPSBbXHJcbiAgICAgICAgeyB0ZXh0OiAnQW5kYWxlIE1vbm8nLCB2YWx1ZTogJ2FuZGFsZSBtb25vLG1vbm9zcGFjZScgfSxcclxuICAgICAgICB7IHRleHQ6ICdBcmlhbCcsIHZhbHVlOiAnYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYnIH0sXHJcbiAgICAgICAgeyB0ZXh0OiAnQXJpYWwgQmxhY2snLCB2YWx1ZTogJ2FyaWFsIGJsYWNrLHNhbnMtc2VyaWYnIH0sXHJcbiAgICAgICAgeyB0ZXh0OiAnQm9vayBBbnRpcXVhJywgdmFsdWU6ICdib29rIGFudGlxdWEscGFsYXRpbm8sc2VyaWYnIH0sXHJcbiAgICAgICAgeyB0ZXh0OiAnQ29taWMgU2FucyBNUycsIHZhbHVlOiAnY29taWMgc2FucyBtcyxzYW5zLXNlcmlmJyB9LFxyXG4gICAgICAgIHsgdGV4dDogJ0NvdXJpZXIgTmV3JywgdmFsdWU6ICdjb3VyaWVyIG5ldyxjb3VyaWVyLG1vbm9zcGFjZScgfSxcclxuICAgICAgICB7IHRleHQ6ICdHZW9yZ2lhJywgdmFsdWU6ICdnZW9yZ2lhLHBhbGF0aW5vLHNlcmlmJyB9LFxyXG4gICAgICAgIHsgdGV4dDogJ0hlbHZldGljYScsIHZhbHVlOiAnaGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWYnIH0sXHJcbiAgICAgICAgeyB0ZXh0OiAnSW1wYWN0JywgdmFsdWU6ICdpbXBhY3Qsc2Fucy1zZXJpZicgfSxcclxuICAgICAgICB7IHRleHQ6ICdTeW1ib2wnLCB2YWx1ZTogJ3N5bWJvbCcgfSxcclxuICAgICAgICB7IHRleHQ6ICdUYWhvbWEnLCB2YWx1ZTogJ3RhaG9tYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZicgfSxcclxuICAgICAgICB7IHRleHQ6ICdUZXJtaW5hbCcsIHZhbHVlOiAndGVybWluYWwsbW9uYWNvLG1vbm9zcGFjZScgfSxcclxuICAgICAgICB7IHRleHQ6ICdUaW1lcyBOZXcgUm9tYW4nLCB2YWx1ZTogJ3RpbWVzIG5ldyByb21hbix0aW1lcyxzZXJpZicgfSxcclxuICAgICAgICB7IHRleHQ6ICdUcmVidWNoZXQgTVMnLCB2YWx1ZTogJ3RyZWJ1Y2hldCBtcyxnZW5ldmEsc2Fucy1zZXJpZicgfSxcclxuICAgICAgICB7IHRleHQ6ICdWZXJkYW5hJywgdmFsdWU6ICd2ZXJkYW5hLGdlbmV2YSxzYW5zLXNlcmlmJyB9LFxyXG4gICAgICAgIHsgdGV4dDogJ1dlYmRpbmdzJywgdmFsdWU6ICd3ZWJkaW5ncycgfSxcclxuICAgICAgICB7IHRleHQ6ICdXaW5nZGluZ3MnLCB2YWx1ZTogJ3dpbmdkaW5ncyx6YXBmIGRpbmdiYXRzJyB9XHJcbiAgICBdO1xyXG4gICAgdmFyIGZvbnRzID0gZWRpdG9yLnNldHRpbmdzLmZvbnRfZm9ybWF0cyA/XHJcbiAgICAgICAgZWRpdG9yLnNldHRpbmdzLmZvbnRfZm9ybWF0cy5yZXBsYWNlKC87JC8sICcnKS5zcGxpdCgnOycpLm1hcCgodiwgaSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgZiA9IHYuc3BsaXQoXCI9XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4geyB0ZXh0OiBmWzBdLCB2YWx1ZTogZlsxXSB9XHJcbiAgICAgICAgfSkgOiBkZWZhdWx0Rm9udHNGb3JtYXRzO1xyXG5cclxuICAgIGZvbnRzLmZvckVhY2goZiA9PiBmWyd0ZXh0U3R5bGUnXSA9IGYudmFsdWUuaW5kZXhPZignZGluZ3MnKSA9PSAtMSA/IGBmb250LWZhbWlseToke2YudmFsdWV9YCA6ICcnKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGtleTogJ2ZvbnRzZWxlY3QnLFxyXG4gICAgICAgIGJ1dHRvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnbGlzdGJveCcsXHJcbiAgICAgICAgICAgIHRleHQ6ICdGb250IEZhbWlseScsXHJcbiAgICAgICAgICAgIHRvb2x0aXA6ICdGb250IEZhbWlseScsXHJcbiAgICAgICAgICAgIHZhbHVlczogZm9udHMsXHJcbiAgICAgICAgICAgIGZpeGVkV2lkdGg6IHRydWUsXHJcbiAgICAgICAgICAgIG9uUG9zdFJlbmRlcjogZnVuY3Rpb24gKHRoaXM6IHRpbnlNQ0UudWkuQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ0bjogYW55ID0gdGhpc1xyXG4gICAgICAgICAgICAgICAgdmFyIGdldEZpcnN0Rm9udCA9IChmb250RmFtaWx5KSA9PiBmb250RmFtaWx5ID8gZm9udEZhbWlseS5zcGxpdCgnLCcpWzBdIDogJyc7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3Iub24oJ25vZGVDaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb250RmFtaWx5LCB2YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSA9IEZvbnRJbmZvLmdldEZvbnRGYW1pbHkoZWRpdG9yLmdldEJvZHkoKSwgZS5lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IGZvbnRzLmZpbHRlcihmb250ID0+IGZvbnQudmFsdWUudG9Mb3dlckNhc2UoKSA9PSBmb250RmFtaWx5LnRvTG93ZXJDYXNlKCkpLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY3VycmVudC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmb250cy5maWx0ZXIoZm9udCA9PiBnZXRGaXJzdEZvbnQoZm9udC52YWx1ZSkudG9Mb3dlckNhc2UoKSA9PSBnZXRGaXJzdEZvbnQoZm9udEZhbWlseSkudG9Mb3dlckNhc2UoKSkuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjdXJyZW50LnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidG4udmFsdWUodmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlICYmIGZvbnRGYW1pbHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnRuLnRleHQoZ2V0Rmlyc3RGb250KGZvbnRGYW1pbHkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25zZWxlY3Q6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jb250cm9sLnNldHRpbmdzWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKCdGb250TmFtZScsIGZhbHNlLCBlLmNvbnRyb2wuc2V0dGluZ3NbJ3ZhbHVlJ10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGF0YVVSSXRvQmxvYihkYXRhVVJJKSB7XHJcbiAgICAvLyBjb252ZXJ0IGJhc2U2NCB0byByYXcgYmluYXJ5IGRhdGEgaGVsZCBpbiBhIHN0cmluZ1xyXG4gICAgLy8gZG9lc24ndCBoYW5kbGUgVVJMRW5jb2RlZCBEYXRhVVJJcyAtIHNlZSBTTyBhbnN3ZXIgIzY4NTAyNzYgZm9yIGNvZGUgdGhhdCBkb2VzIHRoaXNcclxuICAgIHZhciBieXRlU3RyaW5nID0gYXRvYihkYXRhVVJJLnNwbGl0KCcsJylbMV0pO1xyXG5cclxuICAgIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcclxuICAgIHZhciBtaW1lU3RyaW5nID0gZGF0YVVSSS5zcGxpdCgnLCcpWzBdLnNwbGl0KCc6JylbMV0uc3BsaXQoJzsnKVswXVxyXG5cclxuICAgIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXHJcbiAgICB2YXIgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xyXG4gICAgdmFyIGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd3JpdGUgdGhlIEFycmF5QnVmZmVyIHRvIGEgYmxvYiwgYW5kIHlvdSdyZSBkb25lXHJcbiAgICB2YXIgYmIgPSBuZXcgQmxvYihbYWJdLCB7IHR5cGU6IG1pbWVTdHJpbmcgfSk7XHJcbiAgICByZXR1cm4gYmI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc2l6ZUltYWdlKGltZzogSFRNTEltYWdlRWxlbWVudCwgbWF4V2lkdGg6IG51bWJlciwgbWF4SGVpZ2h0OiBudW1iZXIsIGltYWdlVHlwZTogaW1hZ2VUeXBlKSB7XHJcbiAgICB2YXIgcmVzaXplZCA9IGZhbHNlO1xyXG4gICAgdmFyIHdpZHRoID0gbWF4V2lkdGggPSBtYXhXaWR0aCB8fCBpbWcud2lkdGg7XHJcbiAgICB2YXIgaGVpZ2h0ID0gbWF4SGVpZ2h0ID0gbWF4SGVpZ2h0IHx8IGltZy5oZWlnaHQ7XHJcbiAgICBpZiAoaW1nLndpZHRoID4gbWF4V2lkdGggfHwgaW1nLmhlaWdodCA+IG1heEhlaWdodCkge1xyXG4gICAgICAgIHZhciB3cmF0aW8gPSBtYXhXaWR0aCAvIGltZy53aWR0aDtcclxuICAgICAgICB2YXIgaHJhdGlvID0gbWF4SGVpZ2h0IC8gaW1nLmhlaWdodDtcclxuICAgICAgICBpZiAoaHJhdGlvIDwgd3JhdGlvKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gaW1nLndpZHRoICogaHJhdGlvO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBpbWcuaGVpZ2h0ICogaHJhdGlvO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gaW1nLndpZHRoICogd3JhdGlvO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBpbWcuaGVpZ2h0ICogd3JhdGlvO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNpemVkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgd2lkdGggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgaGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKVxyXG4gICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcblxyXG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG5cclxuICAgIGlmIChpbWcud2lkdGggPiBtYXhXaWR0aCB8fCBpbWcuaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgdmFyIG9jID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcclxuICAgICAgICB2YXIgb2N0eCA9IG9jLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgIG9jLndpZHRoID0gTWF0aC5yb3VuZChpbWcud2lkdGggLSAod2lkdGggLyAyKSk7XHJcbiAgICAgICAgb2MuaGVpZ2h0ID0gTWF0aC5yb3VuZChpbWcuaGVpZ2h0IC0gKGhlaWdodCAvIDIpKTtcclxuICAgICAgICBvY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIG9jLndpZHRoLCBvYy5oZWlnaHQpO1xyXG4gICAgICAgIG9jdHguZHJhd0ltYWdlKG9jLCAwLCAwLCBvYy53aWR0aCAqIDAuNSwgb2MuaGVpZ2h0ICogMC41KTtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKG9jLCAwLCAwLCBvYy53aWR0aCAqIDAuNSwgb2MuaGVpZ2h0ICogMC41LCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBpbWdyZXM6IGNhbnZhcy50b0RhdGFVUkwoYGltYWdlLyR7aW1hZ2VUeXBlfWApLCByZXNpemVkOiByZXNpemVkIH07XHJcbn1cclxuXHJcbmRlY2xhcmUgdmFyIHRpbnltY2U7XHJcbnZhciBET006IHRpbnlNQ0UuZG9tLkRPTVV0aWxzID0gdGlueW1jZS5ET007XHJcbmNsYXNzIEZvbnRJbmZvIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGdldFNwZWNpZmllZEZvbnRQcm9wID0gZnVuY3Rpb24gKHByb3BOYW1lLCByb290RWxtLCBlbG0pIHtcclxuICAgICAgICB3aGlsZSAoZWxtICE9PSByb290RWxtKSB7XHJcbiAgICAgICAgICAgIGlmIChlbG0uc3R5bGVbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxtLnN0eWxlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbG0gPSBlbG0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDb21wdXRlZEZvbnRQcm9wID0gKHByb3BOYW1lLCBlbG0pID0+IERPTS5nZXRTdHlsZShlbG0sIHByb3BOYW1lLCB0cnVlKTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHRvUHQgPSAoZm9udFNpemUpID0+IC9bMC05Ll0rcHgkLy50ZXN0KGZvbnRTaXplKSA/IE1hdGgucm91bmQocGFyc2VJbnQoZm9udFNpemUsIDEwKSAqIDcyIC8gOTYpICsgJ3B0JyA6IGZvbnRTaXplO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Rm9udFNpemUgPSBmdW5jdGlvbiAocm9vdEVsbSwgZWxtKSB7XHJcbiAgICAgICAgdmFyIHNwZWNpZmllZEZvbnRTaXplID0gRm9udEluZm8uZ2V0U3BlY2lmaWVkRm9udFByb3AoJ2ZvbnRTaXplJywgcm9vdEVsbSwgZWxtKTtcclxuICAgICAgICByZXR1cm4gc3BlY2lmaWVkRm9udFNpemUgIT09ICcnID8gc3BlY2lmaWVkRm9udFNpemUgOiBGb250SW5mby5nZXRDb21wdXRlZEZvbnRQcm9wKCdmb250U2l6ZScsIGVsbSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Rm9udEZhbWlseSA9IGZ1bmN0aW9uIChyb290RWxtLCBlbG0pIHtcclxuICAgICAgICB2YXIgc3BlY2lmaWVkRm9udFNpemUgPSBGb250SW5mby5nZXRTcGVjaWZpZWRGb250UHJvcCgnZm9udEZhbWlseScsIHJvb3RFbG0sIGVsbSk7XHJcbiAgICAgICAgdmFyIGZvbnRWYWx1ZSA9IHNwZWNpZmllZEZvbnRTaXplICE9PSAnJyA/IHNwZWNpZmllZEZvbnRTaXplIDogRm9udEluZm8uZ2V0Q29tcHV0ZWRGb250UHJvcCgnZm9udEZhbWlseScsIGVsbSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmb250VmFsdWUgIT09IHVuZGVmaW5lZCA/IGZvbnRWYWx1ZS5yZXBsYWNlKC9bXFwnXFxcIl0vZywgJycpLnJlcGxhY2UoLyxcXHMrL2csICcsJykgOiAnJztcclxuICAgIH07XHJcbn1cclxuIiwiaW1wb3J0IFwidGlueW1jZVwiO1xyXG5kZWNsYXJlIHZhciB0aW55bWNlOmFueTtcclxuKGZ1bmN0aW9uICgpIHtcclxuXHJcbnZhciBkZWZzID0ge307IC8vIGlkIC0+IHtkZXBlbmRlbmNpZXMsIGRlZmluaXRpb24sIGluc3RhbmNlIChwb3NzaWJseSB1bmRlZmluZWQpfVxyXG5cclxuLy8gVXNlZCB3aGVuIHRoZXJlIGlzIG5vICdtYWluJyBtb2R1bGUuXHJcbi8vIFRoZSBuYW1lIGlzIHByb2JhYmx5IChob3BlZnVsbHkpIHVuaXF1ZSBzbyBtaW5pZmljYXRpb24gcmVtb3ZlcyBmb3IgcmVsZWFzZXMuXHJcbnZhciByZWdpc3Rlcl8zNzk1ID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgdmFyIG1vZHVsZSA9IGRlbShpZCk7XHJcbiAgdmFyIGZyYWdtZW50cyA9IGlkLnNwbGl0KCcuJyk7XHJcbiAgdmFyIHRhcmdldCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpczsnKSgpO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhZ21lbnRzLmxlbmd0aCAtIDE7ICsraSkge1xyXG4gICAgaWYgKHRhcmdldFtmcmFnbWVudHNbaV1dID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRhcmdldFtmcmFnbWVudHNbaV1dID0ge307XHJcbiAgICB0YXJnZXQgPSB0YXJnZXRbZnJhZ21lbnRzW2ldXTtcclxuICB9XHJcbiAgdGFyZ2V0W2ZyYWdtZW50c1tmcmFnbWVudHMubGVuZ3RoIC0gMV1dID0gbW9kdWxlO1xyXG59O1xyXG5cclxudmFyIGluc3RhbnRpYXRlID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgdmFyIGFjdHVhbCA9IGRlZnNbaWRdO1xyXG4gIHZhciBkZXBlbmRlbmNpZXMgPSBhY3R1YWwuZGVwcztcclxuICB2YXIgZGVmaW5pdGlvbiA9IGFjdHVhbC5kZWZuO1xyXG4gIHZhciBsZW4gPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xyXG4gIHZhciBpbnN0YW5jZXMgPSBuZXcgQXJyYXkobGVuKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxyXG4gICAgaW5zdGFuY2VzW2ldID0gZGVtKGRlcGVuZGVuY2llc1tpXSk7XHJcbiAgdmFyIGRlZlJlc3VsdCA9IGRlZmluaXRpb24uYXBwbHkobnVsbCwgaW5zdGFuY2VzKTtcclxuICBpZiAoZGVmUmVzdWx0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgdGhyb3cgJ21vZHVsZSBbJyArIGlkICsgJ10gcmV0dXJuZWQgdW5kZWZpbmVkJztcclxuICBhY3R1YWwuaW5zdGFuY2UgPSBkZWZSZXN1bHQ7XHJcbn07XHJcblxyXG52YXIgZGVmID0gZnVuY3Rpb24gKGlkLCBkZXBlbmRlbmNpZXMsIGRlZmluaXRpb24pIHtcclxuICBpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJylcclxuICAgIHRocm93ICdtb2R1bGUgaWQgbXVzdCBiZSBhIHN0cmluZyc7XHJcbiAgZWxzZSBpZiAoZGVwZW5kZW5jaWVzID09PSB1bmRlZmluZWQpXHJcbiAgICB0aHJvdyAnbm8gZGVwZW5kZW5jaWVzIGZvciAnICsgaWQ7XHJcbiAgZWxzZSBpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKVxyXG4gICAgdGhyb3cgJ25vIGRlZmluaXRpb24gZnVuY3Rpb24gZm9yICcgKyBpZDtcclxuICBkZWZzW2lkXSA9IHtcclxuICAgIGRlcHM6IGRlcGVuZGVuY2llcyxcclxuICAgIGRlZm46IGRlZmluaXRpb24sXHJcbiAgICBpbnN0YW5jZTogdW5kZWZpbmVkXHJcbiAgfTtcclxufTtcclxuXHJcbnZhciBkZW0gPSBmdW5jdGlvbiAoaWQpIHtcclxuICB2YXIgYWN0dWFsID0gZGVmc1tpZF07XHJcbiAgaWYgKGFjdHVhbCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgdGhyb3cgJ21vZHVsZSBbJyArIGlkICsgJ10gd2FzIHVuZGVmaW5lZCc7XHJcbiAgZWxzZSBpZiAoYWN0dWFsLmluc3RhbmNlID09PSB1bmRlZmluZWQpXHJcbiAgICBpbnN0YW50aWF0ZShpZCk7XHJcbiAgcmV0dXJuIGFjdHVhbC5pbnN0YW5jZTtcclxufTtcclxuXHJcbnZhciByZXEgPSBmdW5jdGlvbiAoaWRzLCBjYWxsYmFjaykge1xyXG4gIHZhciBsZW4gPSBpZHMubGVuZ3RoO1xyXG4gIHZhciBpbnN0YW5jZXMgPSBuZXcgQXJyYXkobGVuKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxyXG4gICAgaW5zdGFuY2VzLnB1c2goZGVtKGlkc1tpXSkpO1xyXG4gIGNhbGxiYWNrLmFwcGx5KG51bGwsIGNhbGxiYWNrKTtcclxufTtcclxuXHJcbnZhciBlcGhveDphbnkgPSB7fTtcclxuXHJcbmVwaG94LmJvbHQgPSB7XHJcbiAgbW9kdWxlOiB7XHJcbiAgICBhcGk6IHtcclxuICAgICAgZGVmaW5lOiBkZWYsXHJcbiAgICAgIHJlcXVpcmU6IHJlcSxcclxuICAgICAgZGVtYW5kOiBkZW1cclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG52YXIgZGVmaW5lID0gZGVmO1xyXG52YXIgcmVxdWlyZSA9IHJlcTtcclxudmFyIGRlbWFuZCA9IGRlbTtcclxuLy8gdGhpcyBoZWxwcyB3aXRoIG1pbmlmaWNpYXRpb24gd2hlbiB1c2luZyBhIGxvdCBvZiBnbG9iYWwgcmVmZXJlbmNlc1xyXG52YXIgZGVmaW5lR2xvYmFsID0gZnVuY3Rpb24gKGlkLCByZWYpIHtcclxuICBkZWZpbmUoaWQsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWY7IH0pO1xyXG59O1xyXG4vKmpzY1xyXG5bXCJ0aW55bWNlLm1vZGVybi5UaGVtZVwiLFwiZ2xvYmFsIXRpbnltY2UuRW52XCIsXCJnbG9iYWwhdGlueW1jZS5FZGl0b3JNYW5hZ2VyXCIsXCJnbG9iYWwhdGlueW1jZS5UaGVtZU1hbmFnZXJcIixcInRpbnltY2UubW9kZXJuLm1vZGVzLklmcmFtZVwiLFwidGlueW1jZS5tb2Rlcm4ubW9kZXMuSW5saW5lXCIsXCJ0aW55bWNlLm1vZGVybi51aS5SZXNpemVcIixcInRpbnltY2UubW9kZXJuLnVpLlByb2dyZXNzU3RhdGVcIixcImdsb2JhbCF0aW55bWNlLnV0aWwuVG9vbHNcIixcImdsb2JhbCF0aW55bWNlLnVpLkZhY3RvcnlcIixcImdsb2JhbCF0aW55bWNlLkRPTVwiLFwidGlueW1jZS5tb2Rlcm4udWkuVG9vbGJhclwiLFwidGlueW1jZS5tb2Rlcm4udWkuTWVudWJhclwiLFwidGlueW1jZS5tb2Rlcm4udWkuQ29udGV4dFRvb2xiYXJzXCIsXCJ0aW55bWNlLm1vZGVybi51aS5BMTF5XCIsXCJ0aW55bWNlLm1vZGVybi51aS5TaWRlYmFyXCIsXCJ0aW55bWNlLm1vZGVybi51aS5Ta2luTG9hZGVkXCIsXCJnbG9iYWwhdGlueW1jZS51aS5GbG9hdFBhbmVsXCIsXCJnbG9iYWwhdGlueW1jZS51aS5UaHJvYmJlclwiLFwiZ2xvYmFsIXRpbnltY2UudXRpbC5EZWxheVwiLFwiZ2xvYmFsIXRpbnltY2UuZ2VvbS5SZWN0XCJdXHJcbmpzYyovXHJcbmRlZmluZUdsb2JhbChcImdsb2JhbCF0aW55bWNlLkVudlwiLCB0aW55bWNlLkVudik7XHJcbmRlZmluZUdsb2JhbChcImdsb2JhbCF0aW55bWNlLkVkaXRvck1hbmFnZXJcIiwgdGlueW1jZS5FZGl0b3JNYW5hZ2VyKTtcclxuZGVmaW5lR2xvYmFsKFwiZ2xvYmFsIXRpbnltY2UuVGhlbWVNYW5hZ2VyXCIsIHRpbnltY2UuVGhlbWVNYW5hZ2VyKTtcclxuZGVmaW5lR2xvYmFsKFwiZ2xvYmFsIXRpbnltY2UudXRpbC5Ub29sc1wiLCB0aW55bWNlLnV0aWwuVG9vbHMpO1xyXG5kZWZpbmVHbG9iYWwoXCJnbG9iYWwhdGlueW1jZS51aS5GYWN0b3J5XCIsIHRpbnltY2UudWkuRmFjdG9yeSk7XHJcbmRlZmluZUdsb2JhbChcImdsb2JhbCF0aW55bWNlLkRPTVwiLCB0aW55bWNlLkRPTSk7XHJcbi8qKlxyXG4gKiBUb29sYmFyLmpzXHJcbiAqXHJcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cclxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTYgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxyXG4gKlxyXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcclxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xyXG4gKi9cclxuXHJcbmRlZmluZSgndGlueW1jZS5tb2Rlcm4udWkuVG9vbGJhcicsIFtcclxuXHQnZ2xvYmFsIXRpbnltY2UudXRpbC5Ub29scycsXHJcblx0J2dsb2JhbCF0aW55bWNlLnVpLkZhY3RvcnknXHJcbl0sIGZ1bmN0aW9uIChUb29scywgRmFjdG9yeSkge1xyXG5cdHZhciBkZWZhdWx0VG9vbGJhciA9IFwidW5kbyByZWRvIHwgc3R5bGVzZWxlY3QgfCBib2xkIGl0YWxpYyB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IGFsaWduanVzdGlmeSB8IFwiICtcclxuXHRcdFwiYnVsbGlzdCBudW1saXN0IG91dGRlbnQgaW5kZW50IHwgbGluayBpbWFnZVwiO1xyXG5cclxuXHR2YXIgY3JlYXRlVG9vbGJhciA9IGZ1bmN0aW9uIChlZGl0b3IsIGl0ZW1zLCBzaXplKSB7XHJcblx0XHR2YXIgdG9vbGJhckl0ZW1zID0gW10sIGJ1dHRvbkdyb3VwO1xyXG5cclxuXHRcdGlmICghaXRlbXMpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdFRvb2xzLmVhY2goaXRlbXMuc3BsaXQoL1sgLF0vKSwgZnVuY3Rpb24oaXRlbSkge1xyXG5cdFx0XHR2YXIgaXRlbU5hbWU7XHJcblxyXG5cdFx0XHR2YXIgYmluZFNlbGVjdG9yQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHR2YXIgc2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbjtcclxuXHJcblx0XHRcdFx0aWYgKGl0ZW0uc2V0dGluZ3Muc3RhdGVTZWxlY3Rvcikge1xyXG5cdFx0XHRcdFx0c2VsZWN0aW9uLnNlbGVjdG9yQ2hhbmdlZChpdGVtLnNldHRpbmdzLnN0YXRlU2VsZWN0b3IsIGZ1bmN0aW9uKHN0YXRlKSB7XHJcblx0XHRcdFx0XHRcdGl0ZW0uYWN0aXZlKHN0YXRlKTtcclxuXHRcdFx0XHRcdH0sIHRydWUpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGl0ZW0uc2V0dGluZ3MuZGlzYWJsZWRTdGF0ZVNlbGVjdG9yKSB7XHJcblx0XHRcdFx0XHRzZWxlY3Rpb24uc2VsZWN0b3JDaGFuZ2VkKGl0ZW0uc2V0dGluZ3MuZGlzYWJsZWRTdGF0ZVNlbGVjdG9yLCBmdW5jdGlvbihzdGF0ZSkge1xyXG5cdFx0XHRcdFx0XHRpdGVtLmRpc2FibGVkKHN0YXRlKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGlmIChpdGVtID09IFwifFwiKSB7XHJcblx0XHRcdFx0YnV0dG9uR3JvdXAgPSBudWxsO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChGYWN0b3J5LmhhcyhpdGVtKSkge1xyXG5cdFx0XHRcdFx0aXRlbSA9IHt0eXBlOiBpdGVtLCBzaXplOiBzaXplfTtcclxuXHRcdFx0XHRcdHRvb2xiYXJJdGVtcy5wdXNoKGl0ZW0pO1xyXG5cdFx0XHRcdFx0YnV0dG9uR3JvdXAgPSBudWxsO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAoIWJ1dHRvbkdyb3VwKSB7XHJcblx0XHRcdFx0XHRcdGJ1dHRvbkdyb3VwID0ge3R5cGU6ICdidXR0b25ncm91cCcsIGl0ZW1zOiBbXX07XHJcblx0XHRcdFx0XHRcdHRvb2xiYXJJdGVtcy5wdXNoKGJ1dHRvbkdyb3VwKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRpZiAoZWRpdG9yLmJ1dHRvbnNbaXRlbV0pIHtcclxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogTW92ZSBjb250cm9sIGNyZWF0aW9uIHRvIHNvbWUgVUkgY2xhc3NcclxuXHRcdFx0XHRcdFx0aXRlbU5hbWUgPSBpdGVtO1xyXG5cdFx0XHRcdFx0XHRpdGVtID0gZWRpdG9yLmJ1dHRvbnNbaXRlbU5hbWVdO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBpdGVtID09IFwiZnVuY3Rpb25cIikge1xyXG5cdFx0XHRcdFx0XHRcdGl0ZW0gPSBpdGVtKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGl0ZW0udHlwZSA9IGl0ZW0udHlwZSB8fCAnYnV0dG9uJztcclxuXHRcdFx0XHRcdFx0aXRlbS5zaXplID0gc2l6ZTtcclxuXHJcblx0XHRcdFx0XHRcdGl0ZW0gPSBGYWN0b3J5LmNyZWF0ZShpdGVtKTtcclxuXHRcdFx0XHRcdFx0YnV0dG9uR3JvdXAuaXRlbXMucHVzaChpdGVtKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChlZGl0b3IuaW5pdGlhbGl6ZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRiaW5kU2VsZWN0b3JDaGFuZ2VkKCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0ZWRpdG9yLm9uKCdpbml0JywgYmluZFNlbGVjdG9yQ2hhbmdlZCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHR5cGU6ICd0b29sYmFyJyxcclxuXHRcdFx0bGF5b3V0OiAnZmxvdycsXHJcblx0XHRcdGl0ZW1zOiB0b29sYmFySXRlbXNcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyB0aGUgdG9vbGJhcnMgZnJvbSBjb25maWcgYW5kIHJldHVybnMgYSB0b29sYmFyIGFycmF5LlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtTdHJpbmd9IHNpemUgT3B0aW9uYWwgdG9vbGJhciBpdGVtIHNpemUuXHJcblx0ICogQHJldHVybiB7QXJyYXl9IEFycmF5IHdpdGggdG9vbGJhcnMuXHJcblx0ICovXHJcblx0dmFyIGNyZWF0ZVRvb2xiYXJzID0gZnVuY3Rpb24gKGVkaXRvciwgc2l6ZSkge1xyXG5cdFx0dmFyIHRvb2xiYXJzID0gW10sIHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzO1xyXG5cclxuXHRcdHZhciBhZGRUb29sYmFyID0gZnVuY3Rpb24gKGl0ZW1zKSB7XHJcblx0XHRcdGlmIChpdGVtcykge1xyXG5cdFx0XHRcdHRvb2xiYXJzLnB1c2goY3JlYXRlVG9vbGJhcihlZGl0b3IsIGl0ZW1zLCBzaXplKSk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gQ29udmVydCB0b29sYmFyIGFycmF5IHRvIG11bHRpcGxlIG9wdGlvbnNcclxuXHRcdGlmIChUb29scy5pc0FycmF5KHNldHRpbmdzLnRvb2xiYXIpKSB7XHJcblx0XHRcdC8vIEVtcHR5IHRvb2xiYXIgYXJyYXkgaXMgdGhlIHNhbWUgYXMgYSBkaXNhYmxlZCB0b29sYmFyXHJcblx0XHRcdGlmIChzZXR0aW5ncy50b29sYmFyLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0VG9vbHMuZWFjaChzZXR0aW5ncy50b29sYmFyLCBmdW5jdGlvbih0b29sYmFyLCBpKSB7XHJcblx0XHRcdFx0c2V0dGluZ3NbXCJ0b29sYmFyXCIgKyAoaSArIDEpXSA9IHRvb2xiYXI7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGVsZXRlIHNldHRpbmdzLnRvb2xiYXI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gR2VuZXJhdGUgdG9vbGJhcjxuPlxyXG5cdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCAxMDsgaSsrKSB7XHJcblx0XHRcdGlmICghYWRkVG9vbGJhcihzZXR0aW5nc1tcInRvb2xiYXJcIiArIGldKSkge1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gR2VuZXJhdGUgdG9vbGJhciBvciBkZWZhdWx0IHRvb2xiYXIgdW5sZXNzIGl0J3MgZGlzYWJsZWRcclxuXHRcdGlmICghdG9vbGJhcnMubGVuZ3RoICYmIHNldHRpbmdzLnRvb2xiYXIgIT09IGZhbHNlKSB7XHJcblx0XHRcdGFkZFRvb2xiYXIoc2V0dGluZ3MudG9vbGJhciB8fCBkZWZhdWx0VG9vbGJhcik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRvb2xiYXJzLmxlbmd0aCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6ICdwYW5lbCcsXHJcblx0XHRcdFx0bGF5b3V0OiAnc3RhY2snLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFwidG9vbGJhci1ncnBcIixcclxuXHRcdFx0XHRhcmlhUm9vdDogdHJ1ZSxcclxuXHRcdFx0XHRhcmlhUmVtZW1iZXI6IHRydWUsXHJcblx0XHRcdFx0aXRlbXM6IHRvb2xiYXJzXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGNyZWF0ZVRvb2xiYXI6IGNyZWF0ZVRvb2xiYXIsXHJcblx0XHRjcmVhdGVUb29sYmFyczogY3JlYXRlVG9vbGJhcnNcclxuXHR9O1xyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBNZW51YmFyLmpzXHJcbiAqXHJcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cclxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTYgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxyXG4gKlxyXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcclxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xyXG4gKi9cclxuXHJcbmRlZmluZSgndGlueW1jZS5tb2Rlcm4udWkuTWVudWJhcicsIFtcclxuXHQnZ2xvYmFsIXRpbnltY2UudXRpbC5Ub29scydcclxuXSwgZnVuY3Rpb24gKFRvb2xzKSB7XHJcblx0dmFyIGRlZmF1bHRNZW51cyA9IHtcclxuXHRcdGZpbGU6IHt0aXRsZTogJ0ZpbGUnLCBpdGVtczogJ25ld2RvY3VtZW50J30sXHJcblx0XHRlZGl0OiB7dGl0bGU6ICdFZGl0JywgaXRlbXM6ICd1bmRvIHJlZG8gfCBjdXQgY29weSBwYXN0ZSBwYXN0ZXRleHQgfCBzZWxlY3RhbGwnfSxcclxuXHRcdGluc2VydDoge3RpdGxlOiAnSW5zZXJ0JywgaXRlbXM6ICd8J30sXHJcblx0XHR2aWV3OiB7dGl0bGU6ICdWaWV3JywgaXRlbXM6ICd2aXN1YWxhaWQgfCd9LFxyXG5cdFx0Zm9ybWF0OiB7dGl0bGU6ICdGb3JtYXQnLCBpdGVtczogJ2JvbGQgaXRhbGljIHVuZGVybGluZSBzdHJpa2V0aHJvdWdoIHN1cGVyc2NyaXB0IHN1YnNjcmlwdCB8IGZvcm1hdHMgfCByZW1vdmVmb3JtYXQnfSxcclxuXHRcdHRhYmxlOiB7dGl0bGU6ICdUYWJsZSd9LFxyXG5cdFx0dG9vbHM6IHt0aXRsZTogJ1Rvb2xzJ31cclxuXHR9O1xyXG5cclxuXHR2YXIgY3JlYXRlTWVudUl0ZW0gPSBmdW5jdGlvbiAobWVudUl0ZW1zLCBuYW1lKSB7XHJcblx0XHR2YXIgbWVudUl0ZW07XHJcblxyXG5cdFx0aWYgKG5hbWUgPT0gJ3wnKSB7XHJcblx0XHRcdHJldHVybiB7dGV4dDogJ3wnfTtcclxuXHRcdH1cclxuXHJcblx0XHRtZW51SXRlbSA9IG1lbnVJdGVtc1tuYW1lXTtcclxuXHJcblx0XHRyZXR1cm4gbWVudUl0ZW07XHJcblx0fTtcclxuXHJcblx0dmFyIGNyZWF0ZU1lbnUgPSBmdW5jdGlvbiAoZWRpdG9yTWVudUl0ZW1zLCBzZXR0aW5ncywgY29udGV4dCkge1xyXG5cdFx0dmFyIG1lbnVCdXR0b24sIG1lbnUsIG1lbnVJdGVtcywgaXNVc2VyRGVmaW5lZCwgcmVtb3ZlZE1lbnVJdGVtcztcclxuXHJcblx0XHRyZW1vdmVkTWVudUl0ZW1zID0gVG9vbHMubWFrZU1hcCgoc2V0dGluZ3MucmVtb3ZlZF9tZW51aXRlbXMgfHwgJycpLnNwbGl0KC9bICxdLykpO1xyXG5cclxuXHRcdC8vIFVzZXIgZGVmaW5lZCBtZW51XHJcblx0XHRpZiAoc2V0dGluZ3MubWVudSkge1xyXG5cdFx0XHRtZW51ID0gc2V0dGluZ3MubWVudVtjb250ZXh0XTtcclxuXHRcdFx0aXNVc2VyRGVmaW5lZCA9IHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtZW51ID0gZGVmYXVsdE1lbnVzW2NvbnRleHRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChtZW51KSB7XHJcblx0XHRcdG1lbnVCdXR0b24gPSB7dGV4dDogbWVudS50aXRsZX07XHJcblx0XHRcdG1lbnVJdGVtcyA9IFtdO1xyXG5cclxuXHRcdFx0Ly8gRGVmYXVsdC91c2VyIGRlZmluZWQgaXRlbXNcclxuXHRcdFx0VG9vbHMuZWFjaCgobWVudS5pdGVtcyB8fCAnJykuc3BsaXQoL1sgLF0vKSwgZnVuY3Rpb24oaXRlbSkge1xyXG5cdFx0XHRcdHZhciBtZW51SXRlbSA9IGNyZWF0ZU1lbnVJdGVtKGVkaXRvck1lbnVJdGVtcywgaXRlbSk7XHJcblxyXG5cdFx0XHRcdGlmIChtZW51SXRlbSAmJiAhcmVtb3ZlZE1lbnVJdGVtc1tpdGVtXSkge1xyXG5cdFx0XHRcdFx0bWVudUl0ZW1zLnB1c2goY3JlYXRlTWVudUl0ZW0oZWRpdG9yTWVudUl0ZW1zLCBpdGVtKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8vIEFkZGVkIHRob3VnaCBjb250ZXh0XHJcblx0XHRcdGlmICghaXNVc2VyRGVmaW5lZCkge1xyXG5cdFx0XHRcdFRvb2xzLmVhY2goZWRpdG9yTWVudUl0ZW1zLCBmdW5jdGlvbihtZW51SXRlbSkge1xyXG5cdFx0XHRcdFx0aWYgKG1lbnVJdGVtLmNvbnRleHQgPT0gY29udGV4dCkge1xyXG5cdFx0XHRcdFx0XHRpZiAobWVudUl0ZW0uc2VwYXJhdG9yID09ICdiZWZvcmUnKSB7XHJcblx0XHRcdFx0XHRcdFx0bWVudUl0ZW1zLnB1c2goe3RleHQ6ICd8J30pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAobWVudUl0ZW0ucHJlcGVuZFRvQ29udGV4dCkge1xyXG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtcy51bnNoaWZ0KG1lbnVJdGVtKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRtZW51SXRlbXMucHVzaChtZW51SXRlbSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChtZW51SXRlbS5zZXBhcmF0b3IgPT0gJ2FmdGVyJykge1xyXG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtcy5wdXNoKHt0ZXh0OiAnfCd9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChtZW51SXRlbXNbaV0udGV4dCA9PSAnfCcpIHtcclxuXHRcdFx0XHRcdGlmIChpID09PSAwIHx8IGkgPT0gbWVudUl0ZW1zLmxlbmd0aCAtIDEpIHtcclxuXHRcdFx0XHRcdFx0bWVudUl0ZW1zLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG1lbnVCdXR0b24ubWVudSA9IG1lbnVJdGVtcztcclxuXHJcblx0XHRcdGlmICghbWVudUJ1dHRvbi5tZW51Lmxlbmd0aCkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG1lbnVCdXR0b247XHJcblx0fTtcclxuXHJcblx0dmFyIGNyZWF0ZU1lbnVCdXR0b25zID0gZnVuY3Rpb24gKGVkaXRvcikge1xyXG5cdFx0dmFyIG5hbWUsIG1lbnVCdXR0b25zID0gW10sIHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzO1xyXG5cclxuXHRcdHZhciBkZWZhdWx0TWVudUJhciA9IFtdO1xyXG5cdFx0aWYgKHNldHRpbmdzLm1lbnUpIHtcclxuXHRcdFx0Zm9yIChuYW1lIGluIHNldHRpbmdzLm1lbnUpIHtcclxuXHRcdFx0XHRkZWZhdWx0TWVudUJhci5wdXNoKG5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKG5hbWUgaW4gZGVmYXVsdE1lbnVzKSB7XHJcblx0XHRcdFx0ZGVmYXVsdE1lbnVCYXIucHVzaChuYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBlbmFibGVkTWVudU5hbWVzID0gdHlwZW9mIHNldHRpbmdzLm1lbnViYXIgPT0gXCJzdHJpbmdcIiA/IHNldHRpbmdzLm1lbnViYXIuc3BsaXQoL1sgLF0vKSA6IGRlZmF1bHRNZW51QmFyO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkTWVudU5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBtZW51ID0gZW5hYmxlZE1lbnVOYW1lc1tpXTtcclxuXHRcdFx0bWVudSA9IGNyZWF0ZU1lbnUoZWRpdG9yLm1lbnVJdGVtcywgZWRpdG9yLnNldHRpbmdzLCBtZW51KTtcclxuXHJcblx0XHRcdGlmIChtZW51KSB7XHJcblx0XHRcdFx0bWVudUJ1dHRvbnMucHVzaChtZW51KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBtZW51QnV0dG9ucztcclxuXHR9O1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0Y3JlYXRlTWVudUJ1dHRvbnM6IGNyZWF0ZU1lbnVCdXR0b25zXHJcblx0fTtcclxufSk7XHJcblxyXG5kZWZpbmVHbG9iYWwoXCJnbG9iYWwhdGlueW1jZS51dGlsLkRlbGF5XCIsIHRpbnltY2UudXRpbC5EZWxheSk7XHJcbmRlZmluZUdsb2JhbChcImdsb2JhbCF0aW55bWNlLmdlb20uUmVjdFwiLCB0aW55bWNlLmdlb20uUmVjdCk7XHJcbi8qKlxyXG4gKiBDb250ZXh0VG9vbGJhcnMuanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuZGVmaW5lKCd0aW55bWNlLm1vZGVybi51aS5Db250ZXh0VG9vbGJhcnMnLCBbXHJcblx0J2dsb2JhbCF0aW55bWNlLkRPTScsXHJcblx0J2dsb2JhbCF0aW55bWNlLnV0aWwuVG9vbHMnLFxyXG5cdCdnbG9iYWwhdGlueW1jZS51dGlsLkRlbGF5JyxcclxuXHQndGlueW1jZS5tb2Rlcm4udWkuVG9vbGJhcicsXHJcblx0J2dsb2JhbCF0aW55bWNlLnVpLkZhY3RvcnknLFxyXG5cdCdnbG9iYWwhdGlueW1jZS5nZW9tLlJlY3QnXHJcbl0sIGZ1bmN0aW9uIChET00sIFRvb2xzLCBEZWxheSwgVG9vbGJhciwgRmFjdG9yeSwgUmVjdCkge1xyXG5cdHZhciB0b0NsaWVudFJlY3QgPSBmdW5jdGlvbiAoZ2VvbVJlY3QpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGxlZnQ6IGdlb21SZWN0LngsXHJcblx0XHRcdHRvcDogZ2VvbVJlY3QueSxcclxuXHRcdFx0d2lkdGg6IGdlb21SZWN0LncsXHJcblx0XHRcdGhlaWdodDogZ2VvbVJlY3QuaCxcclxuXHRcdFx0cmlnaHQ6IGdlb21SZWN0LnggKyBnZW9tUmVjdC53LFxyXG5cdFx0XHRib3R0b206IGdlb21SZWN0LnkgKyBnZW9tUmVjdC5oXHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHZhciBoaWRlQWxsRmxvYXRpbmdQYW5lbHMgPSBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcblx0XHRUb29scy5lYWNoKGVkaXRvci5jb250ZXh0VG9vbGJhcnMsIGZ1bmN0aW9uKHRvb2xiYXIpIHtcclxuXHRcdFx0aWYgKHRvb2xiYXIucGFuZWwpIHtcclxuXHRcdFx0XHR0b29sYmFyLnBhbmVsLmhpZGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fTtcclxuXHJcblx0dmFyIG1vdmVQYW5lbFRvID0gZnVuY3Rpb24gKHBhbmVsLCBwb3MpIHtcclxuXHRcdHBhbmVsLm1vdmVUbyhwb3MubGVmdCwgcG9zLnRvcCk7XHJcblx0fTtcclxuXHJcblx0dmFyIHRvZ2dsZVBvc2l0aW9uQ2xhc3MgPSBmdW5jdGlvbiAocGFuZWwsIHJlbFBvcywgcHJlZGljYXRlKSB7XHJcblx0XHRyZWxQb3MgPSByZWxQb3MgPyByZWxQb3Muc3Vic3RyKDAsIDIpIDogJyc7XHJcblxyXG5cdFx0VG9vbHMuZWFjaCh7XHJcblx0XHRcdHQ6ICdkb3duJyxcclxuXHRcdFx0YjogJ3VwJ1xyXG5cdFx0fSwgZnVuY3Rpb24oY2xzLCBwb3MpIHtcclxuXHRcdFx0cGFuZWwuY2xhc3Nlcy50b2dnbGUoJ2Fycm93LScgKyBjbHMsIHByZWRpY2F0ZShwb3MsIHJlbFBvcy5zdWJzdHIoMCwgMSkpKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdFRvb2xzLmVhY2goe1xyXG5cdFx0XHRsOiAnbGVmdCcsXHJcblx0XHRcdHI6ICdyaWdodCdcclxuXHRcdH0sIGZ1bmN0aW9uKGNscywgcG9zKSB7XHJcblx0XHRcdHBhbmVsLmNsYXNzZXMudG9nZ2xlKCdhcnJvdy0nICsgY2xzLCBwcmVkaWNhdGUocG9zLCByZWxQb3Muc3Vic3RyKDEsIDEpKSk7XHJcblx0XHR9KTtcclxuXHR9O1xyXG5cclxuXHR2YXIgdXNlckNvbnN0cmFpbiA9IGZ1bmN0aW9uIChoYW5kbGVyLCB4LCB5LCBlbGVtZW50UmVjdCwgY29udGVudEFyZWFSZWN0LCBwYW5lbFJlY3QpIHtcclxuXHRcdHBhbmVsUmVjdCA9IHRvQ2xpZW50UmVjdCh7eDogeCwgeTogeSwgdzogcGFuZWxSZWN0LncsIGg6IHBhbmVsUmVjdC5ofSk7XHJcblxyXG5cdFx0aWYgKGhhbmRsZXIpIHtcclxuXHRcdFx0cGFuZWxSZWN0ID0gaGFuZGxlcih7XHJcblx0XHRcdFx0ZWxlbWVudFJlY3Q6IHRvQ2xpZW50UmVjdChlbGVtZW50UmVjdCksXHJcblx0XHRcdFx0Y29udGVudEFyZWFSZWN0OiB0b0NsaWVudFJlY3QoY29udGVudEFyZWFSZWN0KSxcclxuXHRcdFx0XHRwYW5lbFJlY3Q6IHBhbmVsUmVjdFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcGFuZWxSZWN0O1xyXG5cdH07XHJcblxyXG5cdHZhciBhZGRDb250ZXh0dWFsVG9vbGJhcnMgPSBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcblx0XHR2YXIgc2Nyb2xsQ29udGFpbmVyLCBzZXR0aW5ncyA9IGVkaXRvci5zZXR0aW5ncztcclxuXHJcblx0XHR2YXIgZ2V0Q29udGV4dFRvb2xiYXJzID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRyZXR1cm4gZWRpdG9yLmNvbnRleHRUb29sYmFycyB8fCBbXTtcclxuXHRcdH07XHJcblxyXG5cdFx0dmFyIGdldEVsZW1lbnRSZWN0ID0gZnVuY3Rpb24gKGVsbSkge1xyXG5cdFx0XHR2YXIgcG9zLCB0YXJnZXRSZWN0LCByb290O1xyXG5cclxuXHRcdFx0cG9zID0gRE9NLmdldFBvcyhlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSk7XHJcblx0XHRcdHRhcmdldFJlY3QgPSBlZGl0b3IuZG9tLmdldFJlY3QoZWxtKTtcclxuXHRcdFx0cm9vdCA9IGVkaXRvci5kb20uZ2V0Um9vdCgpO1xyXG5cclxuXHRcdFx0Ly8gQWRqdXN0IHRhcmdldFBvcyBmb3Igc2Nyb2xsaW5nIGluIHRoZSBlZGl0b3JcclxuXHRcdFx0aWYgKHJvb3Qubm9kZU5hbWUgPT09ICdCT0RZJykge1xyXG5cdFx0XHRcdHRhcmdldFJlY3QueCAtPSByb290Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgcm9vdC5zY3JvbGxMZWZ0O1xyXG5cdFx0XHRcdHRhcmdldFJlY3QueSAtPSByb290Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCByb290LnNjcm9sbFRvcDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGFyZ2V0UmVjdC54ICs9IHBvcy54O1xyXG5cdFx0XHR0YXJnZXRSZWN0LnkgKz0gcG9zLnk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGFyZ2V0UmVjdDtcclxuXHRcdH07XHJcblxyXG5cdFx0dmFyIHJlcG9zaXRpb24gPSBmdW5jdGlvbiAobWF0Y2gsIHNob3VsZFNob3c/KSB7XHJcblx0XHRcdHZhciByZWxQb3MsIHBhbmVsUmVjdCwgZWxlbWVudFJlY3QsIGNvbnRlbnRBcmVhUmVjdCwgcGFuZWwsIHJlbFJlY3QsIHRlc3RQb3NpdGlvbnMsIHNtYWxsRWxlbWVudFdpZHRoVGhyZXNob2xkO1xyXG5cdFx0XHR2YXIgaGFuZGxlciA9IHNldHRpbmdzLmlubGluZV90b29sYmFyX3Bvc2l0aW9uX2hhbmRsZXI7XHJcblxyXG5cdFx0XHRpZiAoZWRpdG9yLnJlbW92ZWQpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghbWF0Y2ggfHwgIW1hdGNoLnRvb2xiYXIucGFuZWwpIHtcclxuXHRcdFx0XHRoaWRlQWxsRmxvYXRpbmdQYW5lbHMoZWRpdG9yKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRlc3RQb3NpdGlvbnMgPSBbXHJcblx0XHRcdFx0J2JjLXRjJywgJ3RjLWJjJyxcclxuXHRcdFx0XHQndGwtYmwnLCAnYmwtdGwnLFxyXG5cdFx0XHRcdCd0ci1icicsICdici10cidcclxuXHRcdFx0XTtcclxuXHJcblx0XHRcdHBhbmVsID0gbWF0Y2gudG9vbGJhci5wYW5lbDtcclxuXHJcblx0XHRcdC8vIE9ubHkgc2hvdyB0aGUgcGFuZWwgb24gc29tZSBldmVudHMgbm90IGZvciBleGFtcGxlIG5vZGVDaGFuZ2Ugc2luY2UgdGhhdCBmaXJlcyB3aGVuIGNvbnRleHQgbWVudSBpcyBvcGVuZWRcclxuXHRcdFx0aWYgKHNob3VsZFNob3cpIHtcclxuXHRcdFx0XHRwYW5lbC5zaG93KCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGVsZW1lbnRSZWN0ID0gZ2V0RWxlbWVudFJlY3QobWF0Y2guZWxlbWVudCk7XHJcblx0XHRcdHBhbmVsUmVjdCA9IERPTS5nZXRSZWN0KHBhbmVsLmdldEVsKCkpO1xyXG5cdFx0XHRjb250ZW50QXJlYVJlY3QgPSBET00uZ2V0UmVjdChlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKSB8fCBlZGl0b3IuZ2V0Qm9keSgpKTtcclxuXHRcdFx0c21hbGxFbGVtZW50V2lkdGhUaHJlc2hvbGQgPSAyNTtcclxuXHJcblx0XHRcdGlmIChET00uZ2V0U3R5bGUobWF0Y2guZWxlbWVudCwgJ2Rpc3BsYXknLCB0cnVlKSAhPT0gJ2lubGluZScpIHtcclxuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIHVzZSB0aGVzZSBpbnN0ZWFkIG9mIHRoZSByZWN0IHZhbHVlcyBzaW5jZSB0aGUgc3R5bGVcclxuXHRcdFx0XHQvLyBzaXplIHByb3Blcml0ZXMgbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSByZWFsIHNpemUgZm9yIGEgdGFibGVcclxuXHRcdFx0XHRlbGVtZW50UmVjdC53ID0gbWF0Y2guZWxlbWVudC5jbGllbnRXaWR0aDtcclxuXHRcdFx0XHRlbGVtZW50UmVjdC5oID0gbWF0Y2guZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghZWRpdG9yLmlubGluZSkge1xyXG5cdFx0XHRcdGNvbnRlbnRBcmVhUmVjdC53ID0gZWRpdG9yLmdldERvYygpLmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSW5mbGF0ZSB0aGUgZWxlbWVudFJlY3Qgc28gaXQgZG9lc24ndCBnZXQgcGxhY2VkIGFib3ZlIHJlc2l6ZSBoYW5kbGVzXHJcblx0XHRcdGlmIChlZGl0b3Iuc2VsZWN0aW9uLmNvbnRyb2xTZWxlY3Rpb24uaXNSZXNpemFibGUobWF0Y2guZWxlbWVudCkgJiYgZWxlbWVudFJlY3QudyA8IHNtYWxsRWxlbWVudFdpZHRoVGhyZXNob2xkKSB7XHJcblx0XHRcdFx0ZWxlbWVudFJlY3QgPSBSZWN0LmluZmxhdGUoZWxlbWVudFJlY3QsIDAsIDgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZWxQb3MgPSBSZWN0LmZpbmRCZXN0UmVsYXRpdmVQb3NpdGlvbihwYW5lbFJlY3QsIGVsZW1lbnRSZWN0LCBjb250ZW50QXJlYVJlY3QsIHRlc3RQb3NpdGlvbnMpO1xyXG5cdFx0XHRlbGVtZW50UmVjdCA9IFJlY3QuY2xhbXAoZWxlbWVudFJlY3QsIGNvbnRlbnRBcmVhUmVjdCk7XHJcblxyXG5cdFx0XHRpZiAocmVsUG9zKSB7XHJcblx0XHRcdFx0cmVsUmVjdCA9IFJlY3QucmVsYXRpdmVQb3NpdGlvbihwYW5lbFJlY3QsIGVsZW1lbnRSZWN0LCByZWxQb3MpO1xyXG5cdFx0XHRcdG1vdmVQYW5lbFRvKHBhbmVsLCB1c2VyQ29uc3RyYWluKGhhbmRsZXIsIHJlbFJlY3QueCwgcmVsUmVjdC55LCBlbGVtZW50UmVjdCwgY29udGVudEFyZWFSZWN0LCBwYW5lbFJlY3QpKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBBbGxvdyBvdmVyZmxvdyBiZWxvdyB0aGUgZWRpdG9yIHRvIGF2b2lkIHBsYWNpbmcgdG9vbGJhcnMgb250b3Agb2YgdGFibGVzXHJcblx0XHRcdFx0Y29udGVudEFyZWFSZWN0LmggKz0gcGFuZWxSZWN0Lmg7XHJcblxyXG5cdFx0XHRcdGVsZW1lbnRSZWN0ID0gUmVjdC5pbnRlcnNlY3QoY29udGVudEFyZWFSZWN0LCBlbGVtZW50UmVjdCk7XHJcblx0XHRcdFx0aWYgKGVsZW1lbnRSZWN0KSB7XHJcblx0XHRcdFx0XHRyZWxQb3MgPSBSZWN0LmZpbmRCZXN0UmVsYXRpdmVQb3NpdGlvbihwYW5lbFJlY3QsIGVsZW1lbnRSZWN0LCBjb250ZW50QXJlYVJlY3QsIFtcclxuXHRcdFx0XHRcdFx0J2JjLXRjJywgJ2JsLXRsJywgJ2JyLXRyJ1xyXG5cdFx0XHRcdFx0XSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJlbFBvcykge1xyXG5cdFx0XHRcdFx0XHRyZWxSZWN0ID0gUmVjdC5yZWxhdGl2ZVBvc2l0aW9uKHBhbmVsUmVjdCwgZWxlbWVudFJlY3QsIHJlbFBvcyk7XHJcblx0XHRcdFx0XHRcdG1vdmVQYW5lbFRvKHBhbmVsLCB1c2VyQ29uc3RyYWluKGhhbmRsZXIsIHJlbFJlY3QueCwgcmVsUmVjdC55LCBlbGVtZW50UmVjdCwgY29udGVudEFyZWFSZWN0LCBwYW5lbFJlY3QpKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG1vdmVQYW5lbFRvKHBhbmVsLCB1c2VyQ29uc3RyYWluKGhhbmRsZXIsIGVsZW1lbnRSZWN0LngsIGVsZW1lbnRSZWN0LnksIGVsZW1lbnRSZWN0LCBjb250ZW50QXJlYVJlY3QsIHBhbmVsUmVjdCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRwYW5lbC5oaWRlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0b2dnbGVQb3NpdGlvbkNsYXNzKHBhbmVsLCByZWxQb3MsIGZ1bmN0aW9uKHBvczEsIHBvczIpIHtcclxuXHRcdFx0XHRyZXR1cm4gcG9zMSA9PT0gcG9zMjtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvL2RyYXdSZWN0KGNvbnRlbnRBcmVhUmVjdCwgJ2JsdWUnKTtcclxuXHRcdFx0Ly9kcmF3UmVjdChlbGVtZW50UmVjdCwgJ3JlZCcpO1xyXG5cdFx0XHQvL2RyYXdSZWN0KHBhbmVsUmVjdCwgJ2dyZWVuJyk7XHJcblx0XHR9O1xyXG5cclxuXHRcdHZhciByZXBvc2l0aW9uSGFuZGxlciA9IGZ1bmN0aW9uIChzaG93KSB7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0dmFyIGV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRpZiAoZWRpdG9yLnNlbGVjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRyZXBvc2l0aW9uKGZpbmRGcm9udE1vc3RNYXRjaChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSksIHNob3cpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdERlbGF5LnJlcXVlc3RBbmltYXRpb25GcmFtZShleGVjdXRlKTtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblxyXG5cdFx0dmFyIGJpbmRTY3JvbGxFdmVudCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0aWYgKCFzY3JvbGxDb250YWluZXIpIHtcclxuXHRcdFx0XHRzY3JvbGxDb250YWluZXIgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFNjcm9sbENvbnRhaW5lcigpIHx8IGVkaXRvci5nZXRXaW4oKTtcclxuXHRcdFx0XHRET00uYmluZChzY3JvbGxDb250YWluZXIsICdzY3JvbGwnLCByZXBvc2l0aW9uSGFuZGxlcih0cnVlKSk7XHJcblxyXG5cdFx0XHRcdGVkaXRvci5vbigncmVtb3ZlJywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRET00udW5iaW5kKHNjcm9sbENvbnRhaW5lciwgJ3Njcm9sbCcpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdHZhciBzaG93Q29udGV4dFRvb2xiYXIgPSBmdW5jdGlvbiAobWF0Y2gpIHtcclxuXHRcdFx0dmFyIHBhbmVsO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoLnRvb2xiYXIucGFuZWwpIHtcclxuXHRcdFx0XHRtYXRjaC50b29sYmFyLnBhbmVsLnNob3coKTtcclxuXHRcdFx0XHRyZXBvc2l0aW9uKG1hdGNoKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGJpbmRTY3JvbGxFdmVudCgpO1xyXG5cclxuXHRcdFx0cGFuZWwgPSBGYWN0b3J5LmNyZWF0ZSh7XHJcblx0XHRcdFx0dHlwZTogJ2Zsb2F0cGFuZWwnLFxyXG5cdFx0XHRcdHJvbGU6ICdkaWFsb2cnLFxyXG5cdFx0XHRcdGNsYXNzZXM6ICd0aW55bWNlIHRpbnltY2UtaW5saW5lIGFycm93JyxcclxuXHRcdFx0XHRhcmlhTGFiZWw6ICdJbmxpbmUgdG9vbGJhcicsXHJcblx0XHRcdFx0bGF5b3V0OiAnZmxleCcsXHJcblx0XHRcdFx0ZGlyZWN0aW9uOiAnY29sdW1uJyxcclxuXHRcdFx0XHRhbGlnbjogJ3N0cmV0Y2gnLFxyXG5cdFx0XHRcdGF1dG9oaWRlOiBmYWxzZSxcclxuXHRcdFx0XHRhdXRvZml4OiB0cnVlLFxyXG5cdFx0XHRcdGZpeGVkOiB0cnVlLFxyXG5cdFx0XHRcdGJvcmRlcjogMSxcclxuXHRcdFx0XHRpdGVtczogVG9vbGJhci5jcmVhdGVUb29sYmFyKGVkaXRvciwgbWF0Y2gudG9vbGJhci5pdGVtcyksXHJcblx0XHRcdFx0b25jYW5jZWw6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0ZWRpdG9yLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG1hdGNoLnRvb2xiYXIucGFuZWwgPSBwYW5lbDtcclxuXHRcdFx0cGFuZWwucmVuZGVyVG8oZG9jdW1lbnQuYm9keSkucmVmbG93KCk7XHJcblx0XHRcdHJlcG9zaXRpb24obWF0Y2gpO1xyXG5cdFx0fTtcclxuXHJcblx0XHR2YXIgaGlkZUFsbENvbnRleHRUb29sYmFycyA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0VG9vbHMuZWFjaChnZXRDb250ZXh0VG9vbGJhcnMoKSwgZnVuY3Rpb24odG9vbGJhcikge1xyXG5cdFx0XHRcdGlmICh0b29sYmFyLnBhbmVsKSB7XHJcblx0XHRcdFx0XHR0b29sYmFyLnBhbmVsLmhpZGUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fTtcclxuXHJcblx0XHR2YXIgZmluZEZyb250TW9zdE1hdGNoID0gZnVuY3Rpb24gKHRhcmdldEVsbSkge1xyXG5cdFx0XHR2YXIgaSwgeSwgcGFyZW50c0FuZFNlbGYsIHRvb2xiYXJzID0gZ2V0Q29udGV4dFRvb2xiYXJzKCk7XHJcblxyXG5cdFx0XHRwYXJlbnRzQW5kU2VsZiA9IGVkaXRvci4kKHRhcmdldEVsbSkucGFyZW50cygpLmFkZCh0YXJnZXRFbG0pO1xyXG5cdFx0XHRmb3IgKGkgPSBwYXJlbnRzQW5kU2VsZi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdGZvciAoeSA9IHRvb2xiYXJzLmxlbmd0aCAtIDE7IHkgPj0gMDsgeS0tKSB7XHJcblx0XHRcdFx0XHRpZiAodG9vbGJhcnNbeV0ucHJlZGljYXRlKHBhcmVudHNBbmRTZWxmW2ldKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdHRvb2xiYXI6IHRvb2xiYXJzW3ldLFxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQ6IHBhcmVudHNBbmRTZWxmW2ldXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH07XHJcblxyXG5cdFx0ZWRpdG9yLm9uKCdjbGljayBrZXl1cCBzZXRDb250ZW50IE9iamVjdFJlc2l6ZWQnLCBmdW5jdGlvbihlKSB7XHJcblx0XHRcdC8vIE9ubHkgYWN0IG9uIHBhcnRpYWwgaW5zZXJ0c1xyXG5cdFx0XHRpZiAoZS50eXBlID09PSAnc2V0Y29udGVudCcgJiYgIWUuc2VsZWN0aW9uKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBOZWVkcyB0byBiZSBkZWxheWVkIHRvIGF2b2lkIENocm9tZSBpbWcgZm9jdXMgb3V0IGJ1Z1xyXG5cdFx0XHREZWxheS5zZXRFZGl0b3JUaW1lb3V0KGVkaXRvciwgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0dmFyIG1hdGNoO1xyXG5cclxuXHRcdFx0XHRtYXRjaCA9IGZpbmRGcm9udE1vc3RNYXRjaChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSk7XHJcblx0XHRcdFx0aWYgKG1hdGNoKSB7XHJcblx0XHRcdFx0XHRoaWRlQWxsQ29udGV4dFRvb2xiYXJzKCk7XHJcblx0XHRcdFx0XHRzaG93Q29udGV4dFRvb2xiYXIobWF0Y2gpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRoaWRlQWxsQ29udGV4dFRvb2xiYXJzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGVkaXRvci5vbignYmx1ciBoaWRlIGNvbnRleHRtZW51JywgaGlkZUFsbENvbnRleHRUb29sYmFycyk7XHJcblxyXG5cdFx0ZWRpdG9yLm9uKCdPYmplY3RSZXNpemVTdGFydCcsIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgbWF0Y2ggPSBmaW5kRnJvbnRNb3N0TWF0Y2goZWRpdG9yLnNlbGVjdGlvbi5nZXROb2RlKCkpO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoICYmIG1hdGNoLnRvb2xiYXIucGFuZWwpIHtcclxuXHRcdFx0XHRtYXRjaC50b29sYmFyLnBhbmVsLmhpZGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZWRpdG9yLm9uKCdSZXNpemVFZGl0b3IgUmVzaXplV2luZG93JywgcmVwb3NpdGlvbkhhbmRsZXIodHJ1ZSkpO1xyXG5cdFx0ZWRpdG9yLm9uKCdub2RlQ2hhbmdlJywgcmVwb3NpdGlvbkhhbmRsZXIoZmFsc2UpKTtcclxuXHJcblx0XHRlZGl0b3Iub24oJ3JlbW92ZScsIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRUb29scy5lYWNoKGdldENvbnRleHRUb29sYmFycygpLCBmdW5jdGlvbih0b29sYmFyKSB7XHJcblx0XHRcdFx0aWYgKHRvb2xiYXIucGFuZWwpIHtcclxuXHRcdFx0XHRcdHRvb2xiYXIucGFuZWwucmVtb3ZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGVkaXRvci5jb250ZXh0VG9vbGJhcnMgPSB7fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGVkaXRvci5zaG9ydGN1dHMuYWRkKCdjdHJsK3NoaWZ0K2UgPiBjdHJsK3NoaWZ0K3AnLCAnJywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBtYXRjaCA9IGZpbmRGcm9udE1vc3RNYXRjaChlZGl0b3Iuc2VsZWN0aW9uLmdldE5vZGUoKSk7XHJcblx0XHRcdGlmIChtYXRjaCAmJiBtYXRjaC50b29sYmFyLnBhbmVsKSB7XHJcblx0XHRcdFx0bWF0Y2gudG9vbGJhci5wYW5lbC5pdGVtcygpWzBdLmZvY3VzKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH07XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRhZGRDb250ZXh0dWFsVG9vbGJhcnM6IGFkZENvbnRleHR1YWxUb29sYmFyc1xyXG5cdH07XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEExMXkuanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuZGVmaW5lKCd0aW55bWNlLm1vZGVybi51aS5BMTF5JywgW1xyXG5dLCBmdW5jdGlvbiAoKSB7XHJcblx0dmFyIGZvY3VzID0gZnVuY3Rpb24gKHBhbmVsLCB0eXBlKSB7XHJcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgaXRlbSA9IHBhbmVsLmZpbmQodHlwZSlbMF07XHJcblxyXG5cdFx0XHRpZiAoaXRlbSkge1xyXG5cdFx0XHRcdGl0ZW0uZm9jdXModHJ1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0dmFyIGFkZEtleXMgPSBmdW5jdGlvbiAoZWRpdG9yLCBwYW5lbCkge1xyXG5cdFx0ZWRpdG9yLnNob3J0Y3V0cy5hZGQoJ0FsdCtGOScsICcnLCBmb2N1cyhwYW5lbCwgJ21lbnViYXInKSk7XHJcblx0XHRlZGl0b3Iuc2hvcnRjdXRzLmFkZCgnQWx0K0YxMCxGMTAnLCAnJywgZm9jdXMocGFuZWwsICd0b29sYmFyJykpO1xyXG5cdFx0ZWRpdG9yLnNob3J0Y3V0cy5hZGQoJ0FsdCtGMTEnLCAnJywgZm9jdXMocGFuZWwsICdlbGVtZW50cGF0aCcpKTtcclxuXHRcdHBhbmVsLm9uKCdjYW5jZWwnLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0ZWRpdG9yLmZvY3VzKCk7XHJcblx0XHR9KTtcclxuXHR9O1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0YWRkS2V5czogYWRkS2V5c1xyXG5cdH07XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIFNpZGViYXIuanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuZGVmaW5lKCd0aW55bWNlLm1vZGVybi51aS5TaWRlYmFyJywgW1xyXG5cdCdnbG9iYWwhdGlueW1jZS51dGlsLlRvb2xzJyxcclxuXHQnZ2xvYmFsIXRpbnltY2UudWkuRmFjdG9yeScsXHJcblx0J2dsb2JhbCF0aW55bWNlLkVudidcclxuXSwgZnVuY3Rpb24gKFRvb2xzLCBGYWN0b3J5LCBFbnYpIHtcclxuXHR2YXIgYXBpID0gZnVuY3Rpb24gKGVsbSkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0ZWxlbWVudDogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHJldHVybiBlbG07XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0dmFyIHRyaWdnZXIgPSBmdW5jdGlvbiAoc2lkZWJhciwgcGFuZWwsIGNhbGxiYWNrTmFtZSkge1xyXG5cdFx0dmFyIGNhbGxiYWNrID0gc2lkZWJhci5zZXR0aW5nc1tjYWxsYmFja05hbWVdO1xyXG5cdFx0aWYgKGNhbGxiYWNrKSB7XHJcblx0XHRcdGNhbGxiYWNrKGFwaShwYW5lbC5nZXRFbCgnYm9keScpKSk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0dmFyIGhpZGVQYW5lbHMgPSBmdW5jdGlvbiAobmFtZSwgY29udGFpbmVyLCBzaWRlYmFycykge1xyXG5cdFx0VG9vbHMuZWFjaChzaWRlYmFycywgZnVuY3Rpb24gKHNpZGViYXIpIHtcclxuXHRcdFx0dmFyIHBhbmVsID0gY29udGFpbmVyLml0ZW1zKCkuZmlsdGVyKCcjJyArIHNpZGViYXIubmFtZSlbMF07XHJcblxyXG5cdFx0XHRpZiAocGFuZWwgJiYgcGFuZWwudmlzaWJsZSgpICYmIHNpZGViYXIubmFtZSAhPT0gbmFtZSkge1xyXG5cdFx0XHRcdHRyaWdnZXIoc2lkZWJhciwgcGFuZWwsICdvbmhpZGUnKTtcclxuXHRcdFx0XHRwYW5lbC52aXNpYmxlKGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fTtcclxuXHJcblx0dmFyIGRlYWN0aXZhdGVCdXR0b25zID0gZnVuY3Rpb24gKHRvb2xiYXIpIHtcclxuXHRcdHRvb2xiYXIuaXRlbXMoKS5lYWNoKGZ1bmN0aW9uIChjdHJsKSB7XHJcblx0XHRcdGN0cmwuYWN0aXZlKGZhbHNlKTtcclxuXHRcdH0pO1xyXG5cdH07XHJcblxyXG5cdHZhciBmaW5kU2lkZWJhciA9IGZ1bmN0aW9uIChzaWRlYmFycywgbmFtZSkge1xyXG5cdFx0cmV0dXJuIFRvb2xzLmdyZXAoc2lkZWJhcnMsIGZ1bmN0aW9uIChzaWRlYmFyKSB7XHJcblx0XHRcdHJldHVybiBzaWRlYmFyLm5hbWUgPT09IG5hbWU7XHJcblx0XHR9KVswXTtcclxuXHR9O1xyXG5cclxuXHR2YXIgc2hvd1BhbmVsID0gZnVuY3Rpb24gKGVkaXRvciwgbmFtZSwgc2lkZWJhcnMpIHtcclxuXHRcdHJldHVybiBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHR2YXIgYnRuQ3RybCA9IGUuY29udHJvbDtcclxuXHRcdFx0dmFyIGNvbnRhaW5lciA9IGJ0bkN0cmwucGFyZW50cygpLmZpbHRlcigncGFuZWwnKVswXTtcclxuXHRcdFx0dmFyIHBhbmVsID0gY29udGFpbmVyLmZpbmQoJyMnICsgbmFtZSlbMF07XHJcblx0XHRcdHZhciBzaWRlYmFyID0gZmluZFNpZGViYXIoc2lkZWJhcnMsIG5hbWUpO1xyXG5cclxuXHRcdFx0aGlkZVBhbmVscyhuYW1lLCBjb250YWluZXIsIHNpZGViYXJzKTtcclxuXHRcdFx0ZGVhY3RpdmF0ZUJ1dHRvbnMoYnRuQ3RybC5wYXJlbnQoKSk7XHJcblxyXG5cdFx0XHRpZiAocGFuZWwgJiYgcGFuZWwudmlzaWJsZSgpKSB7XHJcblx0XHRcdFx0dHJpZ2dlcihzaWRlYmFyLCBwYW5lbCwgJ29uaGlkZScpO1xyXG5cdFx0XHRcdHBhbmVsLmhpZGUoKTtcclxuXHRcdFx0XHRidG5DdHJsLmFjdGl2ZShmYWxzZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKHBhbmVsKSB7XHJcblx0XHRcdFx0XHRwYW5lbC5zaG93KCk7XHJcblx0XHRcdFx0XHR0cmlnZ2VyKHNpZGViYXIsIHBhbmVsLCAnb25zaG93Jyk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHBhbmVsID0gRmFjdG9yeS5jcmVhdGUoe1xyXG5cdFx0XHRcdFx0XHR0eXBlOiAnY29udGFpbmVyJyxcclxuXHRcdFx0XHRcdFx0bmFtZTogbmFtZSxcclxuXHRcdFx0XHRcdFx0bGF5b3V0OiAnc3RhY2snLFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiAnc2lkZWJhci1wYW5lbCcsXHJcblx0XHRcdFx0XHRcdGh0bWw6ICcnXHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRjb250YWluZXIucHJlcGVuZChwYW5lbCk7XHJcblx0XHRcdFx0XHR0cmlnZ2VyKHNpZGViYXIsIHBhbmVsLCAnb25yZW5kZXInKTtcclxuXHRcdFx0XHRcdHRyaWdnZXIoc2lkZWJhciwgcGFuZWwsICdvbnNob3cnKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJ0bkN0cmwuYWN0aXZlKHRydWUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlZGl0b3IuZmlyZSgnUmVzaXplRWRpdG9yJyk7XHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHZhciBpc01vZGVybkJyb3dzZXIgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gIUVudi5pZSB8fCBFbnYuaWUgPj0gMTE7XHJcblx0fTtcclxuXHJcblx0dmFyIGhhc1NpZGViYXIgPSBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcblx0XHRyZXR1cm4gaXNNb2Rlcm5Ccm93c2VyKCkgJiYgZWRpdG9yLnNpZGViYXJzID8gZWRpdG9yLnNpZGViYXJzLmxlbmd0aCA+IDAgOiBmYWxzZTtcclxuXHR9O1xyXG5cclxuXHR2YXIgY3JlYXRlU2lkZWJhciA9IGZ1bmN0aW9uIChlZGl0b3IpIHtcclxuXHRcdHZhciBidXR0b25zID0gVG9vbHMubWFwKGVkaXRvci5zaWRlYmFycywgZnVuY3Rpb24gKHNpZGViYXIpIHtcclxuXHRcdFx0dmFyIHNldHRpbmdzID0gc2lkZWJhci5zZXR0aW5ncztcclxuXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0dHlwZTogJ2J1dHRvbicsXHJcblx0XHRcdFx0aWNvbjogc2V0dGluZ3MuaWNvbixcclxuXHRcdFx0XHRpbWFnZTogc2V0dGluZ3MuaW1hZ2UsXHJcblx0XHRcdFx0dG9vbHRpcDogc2V0dGluZ3MudG9vbHRpcCxcclxuXHRcdFx0XHRvbmNsaWNrOiBzaG93UGFuZWwoZWRpdG9yLCBzaWRlYmFyLm5hbWUsIGVkaXRvci5zaWRlYmFycylcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHR5cGU6ICdwYW5lbCcsXHJcblx0XHRcdG5hbWU6ICdzaWRlYmFyJyxcclxuXHRcdFx0bGF5b3V0OiAnc3RhY2snLFxyXG5cdFx0XHRjbGFzc2VzOiAnc2lkZWJhcicsXHJcblx0XHRcdGl0ZW1zOiBbXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0dHlwZTogJ3Rvb2xiYXInLFxyXG5cdFx0XHRcdFx0bGF5b3V0OiAnc3RhY2snLFxyXG5cdFx0XHRcdFx0Y2xhc3NlczogJ3NpZGViYXItdG9vbGJhcicsXHJcblx0XHRcdFx0XHRpdGVtczogYnV0dG9uc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XVxyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0aGFzU2lkZWJhcjogaGFzU2lkZWJhcixcclxuXHRcdGNyZWF0ZVNpZGViYXI6IGNyZWF0ZVNpZGViYXJcclxuXHR9O1xyXG59KTtcclxuLyoqXHJcbiAqIFNraW5Mb2FkZWQuanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuZGVmaW5lKCd0aW55bWNlLm1vZGVybi51aS5Ta2luTG9hZGVkJywgW1xyXG5dLCBmdW5jdGlvbiAoKSB7XHJcblx0dmFyIGZpcmVTa2luTG9hZGVkID0gZnVuY3Rpb24gKGVkaXRvcikge1xyXG5cdFx0dmFyIGRvbmUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGVkaXRvci5fc2tpbkxvYWRlZCA9IHRydWU7XHJcblx0XHRcdGVkaXRvci5maXJlKCdTa2luTG9hZGVkJyk7XHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKGVkaXRvci5pbml0aWFsaXplZCkge1xyXG5cdFx0XHRcdGRvbmUoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlZGl0b3Iub24oJ2luaXQnLCBkb25lKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0ZmlyZVNraW5Mb2FkZWQ6IGZpcmVTa2luTG9hZGVkXHJcblx0fTtcclxufSk7XHJcblxyXG4vKipcclxuICogUmVzaXplLmpzXHJcbiAqXHJcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cclxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTYgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxyXG4gKlxyXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcclxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xyXG4gKi9cclxuXHJcbmRlZmluZSgndGlueW1jZS5tb2Rlcm4udWkuUmVzaXplJywgW1xyXG5cdCdnbG9iYWwhdGlueW1jZS5ET00nXHJcbl0sIGZ1bmN0aW9uIChET00pIHtcclxuXHR2YXIgZ2V0U2l6ZSA9IGZ1bmN0aW9uIChlbG0pIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHdpZHRoOiBlbG0uY2xpZW50V2lkdGgsXHJcblx0XHRcdGhlaWdodDogZWxtLmNsaWVudEhlaWdodFxyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHR2YXIgcmVzaXplVG8gPSBmdW5jdGlvbiAoZWRpdG9yLCB3aWR0aCwgaGVpZ2h0KSB7XHJcblx0XHR2YXIgY29udGFpbmVyRWxtLCBpZnJhbWVFbG0sIGNvbnRhaW5lclNpemUsIGlmcmFtZVNpemUsIHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzO1xyXG5cclxuXHRcdGNvbnRhaW5lckVsbSA9IGVkaXRvci5nZXRDb250YWluZXIoKTtcclxuXHRcdGlmcmFtZUVsbSA9IGVkaXRvci5nZXRDb250ZW50QXJlYUNvbnRhaW5lcigpLmZpcnN0Q2hpbGQ7XHJcblx0XHRjb250YWluZXJTaXplID0gZ2V0U2l6ZShjb250YWluZXJFbG0pO1xyXG5cdFx0aWZyYW1lU2l6ZSA9IGdldFNpemUoaWZyYW1lRWxtKTtcclxuXHJcblx0XHRpZiAod2lkdGggIT09IG51bGwpIHtcclxuXHRcdFx0d2lkdGggPSBNYXRoLm1heChzZXR0aW5ncy5taW5fd2lkdGggfHwgMTAwLCB3aWR0aCk7XHJcblx0XHRcdHdpZHRoID0gTWF0aC5taW4oc2V0dGluZ3MubWF4X3dpZHRoIHx8IDB4RkZGRiwgd2lkdGgpO1xyXG5cclxuXHRcdFx0RE9NLnNldFN0eWxlKGNvbnRhaW5lckVsbSwgJ3dpZHRoJywgd2lkdGggKyAoY29udGFpbmVyU2l6ZS53aWR0aCAtIGlmcmFtZVNpemUud2lkdGgpKTtcclxuXHRcdFx0RE9NLnNldFN0eWxlKGlmcmFtZUVsbSwgJ3dpZHRoJywgd2lkdGgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGhlaWdodCA9IE1hdGgubWF4KHNldHRpbmdzLm1pbl9oZWlnaHQgfHwgMTAwLCBoZWlnaHQpO1xyXG5cdFx0aGVpZ2h0ID0gTWF0aC5taW4oc2V0dGluZ3MubWF4X2hlaWdodCB8fCAweEZGRkYsIGhlaWdodCk7XHJcblx0XHRET00uc2V0U3R5bGUoaWZyYW1lRWxtLCAnaGVpZ2h0JywgaGVpZ2h0KTtcclxuXHJcblx0XHRlZGl0b3IuZmlyZSgnUmVzaXplRWRpdG9yJyk7XHJcblx0fTtcclxuXHJcblx0dmFyIHJlc2l6ZUJ5ID0gZnVuY3Rpb24gKGVkaXRvciwgZHcsIGRoKSB7XHJcblx0XHR2YXIgZWxtID0gZWRpdG9yLmdldENvbnRlbnRBcmVhQ29udGFpbmVyKCk7XHJcblx0XHRyZXNpemVUbyhlZGl0b3IsIGVsbS5jbGllbnRXaWR0aCArIGR3LCBlbG0uY2xpZW50SGVpZ2h0ICsgZGgpO1xyXG5cdH07XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRyZXNpemVUbzogcmVzaXplVG8sXHJcblx0XHRyZXNpemVCeTogcmVzaXplQnlcclxuXHR9O1xyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBJZnJhbWUuanNcclxuICpcclxuICogUmVsZWFzZWQgdW5kZXIgTEdQTCBMaWNlbnNlLlxyXG4gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxNiBFcGhveCBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkXHJcbiAqXHJcbiAqIExpY2Vuc2U6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vbGljZW5zZVxyXG4gKiBDb250cmlidXRpbmc6IGh0dHA6Ly93d3cudGlueW1jZS5jb20vY29udHJpYnV0aW5nXHJcbiAqL1xyXG5cclxuZGVmaW5lKCd0aW55bWNlLm1vZGVybi5tb2Rlcy5JZnJhbWUnLCBbXHJcblx0J2dsb2JhbCF0aW55bWNlLnV0aWwuVG9vbHMnLFxyXG5cdCdnbG9iYWwhdGlueW1jZS51aS5GYWN0b3J5JyxcclxuXHQnZ2xvYmFsIXRpbnltY2UuRE9NJyxcclxuXHQndGlueW1jZS5tb2Rlcm4udWkuVG9vbGJhcicsXHJcblx0J3RpbnltY2UubW9kZXJuLnVpLk1lbnViYXInLFxyXG5cdCd0aW55bWNlLm1vZGVybi51aS5Db250ZXh0VG9vbGJhcnMnLFxyXG5cdCd0aW55bWNlLm1vZGVybi51aS5BMTF5JyxcclxuXHQndGlueW1jZS5tb2Rlcm4udWkuU2lkZWJhcicsXHJcblx0J3RpbnltY2UubW9kZXJuLnVpLlNraW5Mb2FkZWQnLFxyXG5cdCd0aW55bWNlLm1vZGVybi51aS5SZXNpemUnXHJcbl0sIGZ1bmN0aW9uIChUb29scywgRmFjdG9yeSwgRE9NLCBUb29sYmFyLCBNZW51YmFyLCBDb250ZXh0VG9vbGJhcnMsIEExMXksIFNpZGViYXIsIFNraW5Mb2FkZWQsIFJlc2l6ZSkge1xyXG5cdHZhciBzd2l0Y2hNb2RlID0gZnVuY3Rpb24gKHBhbmVsKSB7XHJcblx0XHRyZXR1cm4gZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRwYW5lbC5maW5kKCcqJykuZGlzYWJsZWQoZS5tb2RlID09PSAncmVhZG9ubHknKTtcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0dmFyIGVkaXRBcmVhID0gZnVuY3Rpb24gKGJvcmRlcikge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0dHlwZTogJ3BhbmVsJyxcclxuXHRcdFx0bmFtZTogJ2lmcmFtZScsXHJcblx0XHRcdGxheW91dDogJ3N0YWNrJyxcclxuXHRcdFx0Y2xhc3NlczogJ2VkaXQtYXJlYScsXHJcblx0XHRcdGJvcmRlcjogYm9yZGVyLFxyXG5cdFx0XHRodG1sOiAnJ1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHR2YXIgZWRpdEFyZWFDb250YWluZXIgPSBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR0eXBlOiAncGFuZWwnLFxyXG5cdFx0XHRsYXlvdXQ6ICdzdGFjaycsXHJcblx0XHRcdGNsYXNzZXM6ICdlZGl0LWFyaWEtY29udGFpbmVyJyxcclxuXHRcdFx0Ym9yZGVyOiAnMSAwIDAgMCcsXHJcblx0XHRcdGl0ZW1zOiBbXHJcblx0XHRcdFx0ZWRpdEFyZWEoJzAnKSxcclxuXHRcdFx0XHRTaWRlYmFyLmNyZWF0ZVNpZGViYXIoZWRpdG9yKVxyXG5cdFx0XHRdXHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHZhciByZW5kZXIgPSBmdW5jdGlvbiAoZWRpdG9yLCB0aGVtZSwgYXJncykge1xyXG5cdFx0dmFyIHBhbmVsLCByZXNpemVIYW5kbGVDdHJsLCBzdGFydFNpemUsIHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzO1xyXG5cclxuXHRcdGlmIChhcmdzLnNraW5VaUNzcykge1xyXG5cdFx0XHRET00uc3R5bGVTaGVldExvYWRlci5sb2FkKGFyZ3Muc2tpblVpQ3NzLCBTa2luTG9hZGVkLmZpcmVTa2luTG9hZGVkKGVkaXRvcikpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHBhbmVsID0gdGhlbWUucGFuZWwgPSBGYWN0b3J5LmNyZWF0ZSh7XHJcblx0XHRcdHR5cGU6ICdwYW5lbCcsXHJcblx0XHRcdHJvbGU6ICdhcHBsaWNhdGlvbicsXHJcblx0XHRcdGNsYXNzZXM6ICd0aW55bWNlJyxcclxuXHRcdFx0c3R5bGU6ICd2aXNpYmlsaXR5OiBoaWRkZW4nLFxyXG5cdFx0XHRsYXlvdXQ6ICdzdGFjaycsXHJcblx0XHRcdGJvcmRlcjogMSxcclxuXHRcdFx0aXRlbXM6IFtcclxuXHRcdFx0XHRzZXR0aW5ncy5tZW51YmFyID09PSBmYWxzZSA/IG51bGwgOiB7dHlwZTogJ21lbnViYXInLCBib3JkZXI6ICcwIDAgMSAwJywgaXRlbXM6IE1lbnViYXIuY3JlYXRlTWVudUJ1dHRvbnMoZWRpdG9yKX0sXHJcblx0XHRcdFx0VG9vbGJhci5jcmVhdGVUb29sYmFycyhlZGl0b3IsIHNldHRpbmdzLnRvb2xiYXJfaXRlbXNfc2l6ZSksXHJcblx0XHRcdFx0U2lkZWJhci5oYXNTaWRlYmFyKGVkaXRvcikgPyBlZGl0QXJlYUNvbnRhaW5lcihlZGl0b3IpIDogZWRpdEFyZWEoJzEgMCAwIDAnKVxyXG5cdFx0XHRdXHJcblx0XHR9KTtcclxuXHJcblx0XHRpZiAoc2V0dGluZ3MucmVzaXplICE9PSBmYWxzZSkge1xyXG5cdFx0XHRyZXNpemVIYW5kbGVDdHJsID0ge1xyXG5cdFx0XHRcdHR5cGU6ICdyZXNpemVoYW5kbGUnLFxyXG5cdFx0XHRcdGRpcmVjdGlvbjogc2V0dGluZ3MucmVzaXplLFxyXG5cclxuXHRcdFx0XHRvblJlc2l6ZVN0YXJ0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBlbG0gPSBlZGl0b3IuZ2V0Q29udGVudEFyZWFDb250YWluZXIoKS5maXJzdENoaWxkO1xyXG5cclxuXHRcdFx0XHRcdHN0YXJ0U2l6ZSA9IHtcclxuXHRcdFx0XHRcdFx0d2lkdGg6IGVsbS5jbGllbnRXaWR0aCxcclxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBlbG0uY2xpZW50SGVpZ2h0XHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdG9uUmVzaXplOiBmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0XHRpZiAoc2V0dGluZ3MucmVzaXplID09PSAnYm90aCcpIHtcclxuXHRcdFx0XHRcdFx0UmVzaXplLnJlc2l6ZVRvKGVkaXRvciwgc3RhcnRTaXplLndpZHRoICsgZS5kZWx0YVgsIHN0YXJ0U2l6ZS5oZWlnaHQgKyBlLmRlbHRhWSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRSZXNpemUucmVzaXplVG8oZWRpdG9yLCBudWxsLCBzdGFydFNpemUuaGVpZ2h0ICsgZS5kZWx0YVkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBZGQgc3RhdHVzYmFyIGlmIG5lZWRlZFxyXG5cdFx0aWYgKHNldHRpbmdzLnN0YXR1c2JhciAhPT0gZmFsc2UpIHtcclxuXHRcdFx0cGFuZWwuYWRkKHt0eXBlOiAncGFuZWwnLCBuYW1lOiAnc3RhdHVzYmFyJywgY2xhc3NlczogJ3N0YXR1c2JhcicsIGxheW91dDogJ2Zsb3cnLCBib3JkZXI6ICcxIDAgMCAwJywgYXJpYVJvb3Q6IHRydWUsIGl0ZW1zOiBbXHJcblx0XHRcdFx0e3R5cGU6ICdlbGVtZW50cGF0aCcsIGVkaXRvcjogZWRpdG9yfSxcclxuXHRcdFx0XHRyZXNpemVIYW5kbGVDdHJsXHJcblx0XHRcdF19KTtcclxuXHRcdH1cclxuXHJcblx0XHRlZGl0b3IuZmlyZSgnQmVmb3JlUmVuZGVyVUknKTtcclxuXHRcdGVkaXRvci5vbignU3dpdGNoTW9kZScsIHN3aXRjaE1vZGUocGFuZWwpKTtcclxuXHRcdHBhbmVsLnJlbmRlckJlZm9yZShhcmdzLnRhcmdldE5vZGUpLnJlZmxvdygpO1xyXG5cclxuXHRcdGlmIChzZXR0aW5ncy5yZWFkb25seSkge1xyXG5cdFx0XHRlZGl0b3Iuc2V0TW9kZSgncmVhZG9ubHknKTtcclxuXHRcdH1cclxuXHRcdGlmIChzZXR0aW5ncy5yZWFkT25seSkge1xyXG5cdFx0XHRlZGl0b3Iuc2V0TW9kZSgncmVhZG9ubHknKTtcclxuICAgICAgICB9XHJcblxyXG5cdFx0aWYgKHNldHRpbmdzLndpZHRoKSB7XHJcblx0XHRcdERPTS5zZXRTdHlsZShwYW5lbC5nZXRFbCgpLCAnd2lkdGgnLCBzZXR0aW5ncy53aWR0aCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIHRoZSBwYW5lbCB3aGVuIHRoZSBlZGl0b3IgaXMgcmVtb3ZlZFxyXG5cdFx0ZWRpdG9yLm9uKCdyZW1vdmUnLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0cGFuZWwucmVtb3ZlKCk7XHJcblx0XHRcdHBhbmVsID0gbnVsbDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIEFkZCBhY2Nlc2liaWxpdHkgc2hvcnRjdXRzXHJcblx0XHRBMTF5LmFkZEtleXMoZWRpdG9yLCBwYW5lbCk7XHJcblx0XHRDb250ZXh0VG9vbGJhcnMuYWRkQ29udGV4dHVhbFRvb2xiYXJzKGVkaXRvcik7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aWZyYW1lQ29udGFpbmVyOiBwYW5lbC5maW5kKCcjaWZyYW1lJylbMF0uZ2V0RWwoKSxcclxuXHRcdFx0ZWRpdG9yQ29udGFpbmVyOiBwYW5lbC5nZXRFbCgpXHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRyZW5kZXI6IHJlbmRlclxyXG5cdH07XHJcbn0pO1xyXG5cclxuZGVmaW5lR2xvYmFsKFwiZ2xvYmFsIXRpbnltY2UudWkuRmxvYXRQYW5lbFwiLCB0aW55bWNlLnVpLkZsb2F0UGFuZWwpO1xyXG4vKipcclxuICogSW5saW5lLmpzXHJcbiAqXHJcbiAqIFJlbGVhc2VkIHVuZGVyIExHUEwgTGljZW5zZS5cclxuICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTYgRXBob3ggQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZFxyXG4gKlxyXG4gKiBMaWNlbnNlOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2xpY2Vuc2VcclxuICogQ29udHJpYnV0aW5nOiBodHRwOi8vd3d3LnRpbnltY2UuY29tL2NvbnRyaWJ1dGluZ1xyXG4gKi9cclxuXHJcbmRlZmluZSgndGlueW1jZS5tb2Rlcm4ubW9kZXMuSW5saW5lJywgW1xyXG5cdCdnbG9iYWwhdGlueW1jZS51dGlsLlRvb2xzJyxcclxuXHQnZ2xvYmFsIXRpbnltY2UudWkuRmFjdG9yeScsXHJcblx0J2dsb2JhbCF0aW55bWNlLkRPTScsXHJcblx0J2dsb2JhbCF0aW55bWNlLnVpLkZsb2F0UGFuZWwnLFxyXG5cdCd0aW55bWNlLm1vZGVybi51aS5Ub29sYmFyJyxcclxuXHQndGlueW1jZS5tb2Rlcm4udWkuTWVudWJhcicsXHJcblx0J3RpbnltY2UubW9kZXJuLnVpLkNvbnRleHRUb29sYmFycycsXHJcblx0J3RpbnltY2UubW9kZXJuLnVpLkExMXknLFxyXG5cdCd0aW55bWNlLm1vZGVybi51aS5Ta2luTG9hZGVkJ1xyXG5dLCBmdW5jdGlvbiAoVG9vbHMsIEZhY3RvcnksIERPTSwgRmxvYXRQYW5lbCwgVG9vbGJhciwgTWVudWJhciwgQ29udGV4dFRvb2xiYXJzLCBBMTF5LCBTa2luTG9hZGVkKSB7XHJcblx0dmFyIHJlbmRlciA9IGZ1bmN0aW9uIChlZGl0b3IsIHRoZW1lLCBhcmdzKSB7XHJcblx0XHR2YXIgcGFuZWwsIGlubGluZVRvb2xiYXJDb250YWluZXIsIHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzO1xyXG5cclxuXHRcdGlmIChzZXR0aW5ncy5maXhlZF90b29sYmFyX2NvbnRhaW5lcikge1xyXG5cdFx0XHRpbmxpbmVUb29sYmFyQ29udGFpbmVyID0gRE9NLnNlbGVjdChzZXR0aW5ncy5maXhlZF90b29sYmFyX2NvbnRhaW5lcilbMF07XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIHJlcG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGlmIChwYW5lbCAmJiBwYW5lbC5tb3ZlUmVsICYmIHBhbmVsLnZpc2libGUoKSAmJiAhcGFuZWwuX2ZpeGVkKSB7XHJcblx0XHRcdFx0Ly8gVE9ETzogVGhpcyBpcyBraW5kIG9mIHVnbHkgYW5kIGRvZXNuJ3QgaGFuZGxlIG11bHRpcGxlIHNjcm9sbGFibGUgZWxlbWVudHNcclxuXHRcdFx0XHR2YXIgc2Nyb2xsQ29udGFpbmVyID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTY3JvbGxDb250YWluZXIoKSwgYm9keSA9IGVkaXRvci5nZXRCb2R5KCk7XHJcblx0XHRcdFx0dmFyIGRlbHRhWCA9IDAsIGRlbHRhWSA9IDA7XHJcblxyXG5cdFx0XHRcdGlmIChzY3JvbGxDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdHZhciBib2R5UG9zID0gRE9NLmdldFBvcyhib2R5KSwgc2Nyb2xsQ29udGFpbmVyUG9zID0gRE9NLmdldFBvcyhzY3JvbGxDb250YWluZXIpO1xyXG5cclxuXHRcdFx0XHRcdGRlbHRhWCA9IE1hdGgubWF4KDAsIHNjcm9sbENvbnRhaW5lclBvcy54IC0gYm9keVBvcy54KTtcclxuXHRcdFx0XHRcdGRlbHRhWSA9IE1hdGgubWF4KDAsIHNjcm9sbENvbnRhaW5lclBvcy55IC0gYm9keVBvcy55KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHBhbmVsLmZpeGVkKGZhbHNlKS5tb3ZlUmVsKGJvZHksIGVkaXRvci5ydGwgPyBbJ3RyLWJyJywgJ2JyLXRyJ10gOiBbJ3RsLWJsJywgJ2JsLXRsJywgJ3RyLWJyJ10pLm1vdmVCeShkZWx0YVgsIGRlbHRhWSk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0dmFyIHNob3cgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGlmIChwYW5lbCkge1xyXG5cdFx0XHRcdHBhbmVsLnNob3coKTtcclxuXHRcdFx0XHRyZXBvc2l0aW9uKCk7XHJcblx0XHRcdFx0RE9NLmFkZENsYXNzKGVkaXRvci5nZXRCb2R5KCksICdtY2UtZWRpdC1mb2N1cycpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdHZhciBoaWRlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZiAocGFuZWwpIHtcclxuXHRcdFx0XHQvLyBXZSByZXF1aXJlIHR3byBldmVudHMgYXMgdGhlIGlubGluZSBmbG9hdCBwYW5lbCBiYXNlZCB0b29sYmFyIGRvZXMgbm90IGhhdmUgYXV0b2hpZGU9dHJ1ZVxyXG5cdFx0XHRcdC8vcGFuZWwuaGlkZSgpO1xyXG5cclxuXHRcdFx0XHQvLyBBbGwgb3RoZXIgYXV0b2hpZGRlbiBmbG9hdCBwYW5lbHMgd2lsbCBiZSBjbG9zZWQgYmVsb3cuXHJcblx0XHRcdFx0Ly9GbG9hdFBhbmVsLmhpZGVBbGwoKTtcclxuXHJcblx0XHRcdFx0RE9NLnJlbW92ZUNsYXNzKGVkaXRvci5nZXRCb2R5KCksICdtY2UtZWRpdC1mb2N1cycpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdHZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGlmIChwYW5lbCkge1xyXG5cdFx0XHRcdGlmICghcGFuZWwudmlzaWJsZSgpKSB7XHJcblx0XHRcdFx0XHRzaG93KCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFJlbmRlciBhIHBsYWluIHBhbmVsIGluc2lkZSB0aGUgaW5saW5lVG9vbGJhckNvbnRhaW5lciBpZiBpdCdzIGRlZmluZWRcclxuXHRcdFx0cGFuZWwgPSB0aGVtZS5wYW5lbCA9IEZhY3RvcnkuY3JlYXRlKHtcclxuXHRcdFx0XHR0eXBlOiBpbmxpbmVUb29sYmFyQ29udGFpbmVyID8gJ3BhbmVsJyA6ICdmbG9hdHBhbmVsJyxcclxuXHRcdFx0XHRyb2xlOiAnYXBwbGljYXRpb24nLFxyXG5cdFx0XHRcdGNsYXNzZXM6ICd0aW55bWNlIHRpbnltY2UtaW5saW5lJyxcclxuXHRcdFx0XHRsYXlvdXQ6ICdmbGV4JyxcclxuXHRcdFx0XHRkaXJlY3Rpb246ICdjb2x1bW4nLFxyXG5cdFx0XHRcdGFsaWduOiAnc3RyZXRjaCcsXHJcblx0XHRcdFx0YXV0b2hpZGU6IGZhbHNlLFxyXG5cdFx0XHRcdGF1dG9maXg6IHRydWUsXHJcblx0XHRcdFx0Zml4ZWQ6ICEhaW5saW5lVG9vbGJhckNvbnRhaW5lcixcclxuXHRcdFx0XHRib3JkZXI6IDEsXHJcblx0XHRcdFx0aXRlbXM6IFtcclxuXHRcdFx0XHRcdHNldHRpbmdzLm1lbnViYXIgPT09IGZhbHNlID8gbnVsbCA6IHt0eXBlOiAnbWVudWJhcicsIGJvcmRlcjogJzAgMCAxIDAnLCBpdGVtczogTWVudWJhci5jcmVhdGVNZW51QnV0dG9ucyhlZGl0b3IpfSxcclxuXHRcdFx0XHRcdFRvb2xiYXIuY3JlYXRlVG9vbGJhcnMoZWRpdG9yLCBzZXR0aW5ncy50b29sYmFyX2l0ZW1zX3NpemUpXHJcblx0XHRcdFx0XVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8vIEFkZCBzdGF0dXNiYXJcclxuXHRcdFx0LyppZiAoc2V0dGluZ3Muc3RhdHVzYmFyICE9PSBmYWxzZSkge1xyXG5cdFx0XHRcdHBhbmVsLmFkZCh7dHlwZTogJ3BhbmVsJywgY2xhc3NlczogJ3N0YXR1c2JhcicsIGxheW91dDogJ2Zsb3cnLCBib3JkZXI6ICcxIDAgMCAwJywgaXRlbXM6IFtcclxuXHRcdFx0XHRcdHt0eXBlOiAnZWxlbWVudHBhdGgnfVxyXG5cdFx0XHRcdF19KTtcclxuXHRcdFx0fSovXHJcblxyXG5cdFx0XHRlZGl0b3IuZmlyZSgnQmVmb3JlUmVuZGVyVUknKTtcclxuXHRcdFx0cGFuZWwucmVuZGVyVG8oaW5saW5lVG9vbGJhckNvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5KS5yZWZsb3coKTtcclxuXHJcblx0XHRcdEExMXkuYWRkS2V5cyhlZGl0b3IsIHBhbmVsKTtcclxuXHRcdFx0c2hvdygpO1xyXG5cdFx0XHRDb250ZXh0VG9vbGJhcnMuYWRkQ29udGV4dHVhbFRvb2xiYXJzKGVkaXRvcik7XHJcblxyXG5cdFx0XHRlZGl0b3Iub24oJ25vZGVDaGFuZ2UnLCByZXBvc2l0aW9uKTtcclxuXHRcdFx0ZWRpdG9yLm9uKCdhY3RpdmF0ZScsIHNob3cpO1xyXG5cdFx0XHRlZGl0b3Iub24oJ2RlYWN0aXZhdGUnLCBoaWRlKTtcclxuXHJcblx0XHRcdGVkaXRvci5ub2RlQ2hhbmdlZCgpO1xyXG5cdFx0fTtcclxuXHJcblx0XHRzZXR0aW5ncy5jb250ZW50X2VkaXRhYmxlID0gdHJ1ZTtcclxuXHJcblx0XHRlZGl0b3Iub24oJ2luaXQnLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0Ly8gUmVuZGVyIG9ubHkgd2hlbiB0aGUgQ1NTIGZpbGUgaGFzIGJlZW4gbG9hZGVkXHJcblx0XHRcdGlmIChhcmdzLnNraW5VaUNzcykge1xyXG5cdFx0XHRcdERPTS5zdHlsZVNoZWV0TG9hZGVyLmxvYWQoYXJncy5za2luVWlDc3MsIHJlbmRlciwgcmVuZGVyKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZW5kZXIoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZWRpdG9yLm9uKCdibHVyIGhpZGUnLCBoaWRlKTtcclxuXHJcblx0XHQvLyBSZW1vdmUgdGhlIHBhbmVsIHdoZW4gdGhlIGVkaXRvciBpcyByZW1vdmVkXHJcblx0XHRlZGl0b3Iub24oJ3JlbW92ZScsIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRpZiAocGFuZWwpIHtcclxuXHRcdFx0XHRwYW5lbC5yZW1vdmUoKTtcclxuXHRcdFx0XHRwYW5lbCA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFByZWxvYWQgc2tpbiBjc3NcclxuXHRcdGlmIChhcmdzLnNraW5VaUNzcykge1xyXG5cdFx0XHRET00uc3R5bGVTaGVldExvYWRlci5sb2FkKGFyZ3Muc2tpblVpQ3NzLCBTa2luTG9hZGVkLmZpcmVTa2luTG9hZGVkKGVkaXRvcikpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7fTtcclxuXHR9O1xyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0cmVuZGVyOiByZW5kZXJcclxuXHR9O1xyXG59KTtcclxuXHJcbmRlZmluZUdsb2JhbChcImdsb2JhbCF0aW55bWNlLnVpLlRocm9iYmVyXCIsIHRpbnltY2UudWkuVGhyb2JiZXIpO1xyXG4vKipcclxuICogUHJvZ3Jlc3NTdGF0ZS5qc1xyXG4gKlxyXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXHJcbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE2IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcclxuICpcclxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXHJcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcclxuICovXHJcblxyXG5kZWZpbmUoJ3RpbnltY2UubW9kZXJuLnVpLlByb2dyZXNzU3RhdGUnLCBbXHJcblx0J2dsb2JhbCF0aW55bWNlLnVpLlRocm9iYmVyJ1xyXG5dLCBmdW5jdGlvbiAoVGhyb2JiZXIpIHtcclxuXHR2YXIgc2V0dXAgPSBmdW5jdGlvbiAoZWRpdG9yLCB0aGVtZSkge1xyXG5cdFx0dmFyIHRocm9iYmVyO1xyXG5cclxuXHRcdGVkaXRvci5vbignUHJvZ3Jlc3NTdGF0ZScsIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0dGhyb2JiZXIgPSB0aHJvYmJlciB8fCBuZXcgVGhyb2JiZXIodGhlbWUucGFuZWwuZ2V0RWwoJ2JvZHknKSk7XHJcblxyXG5cdFx0XHRpZiAoZS5zdGF0ZSkge1xyXG5cdFx0XHRcdHRocm9iYmVyLnNob3coZS50aW1lKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aHJvYmJlci5oaWRlKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH07XHJcblxyXG5cdHJldHVybiB7XHJcblx0XHRzZXR1cDogc2V0dXBcclxuXHR9O1xyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBUaGVtZS5qc1xyXG4gKlxyXG4gKiBSZWxlYXNlZCB1bmRlciBMR1BMIExpY2Vuc2UuXHJcbiAqIENvcHlyaWdodCAoYykgMTk5OS0yMDE2IEVwaG94IENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWRcclxuICpcclxuICogTGljZW5zZTogaHR0cDovL3d3dy50aW55bWNlLmNvbS9saWNlbnNlXHJcbiAqIENvbnRyaWJ1dGluZzogaHR0cDovL3d3dy50aW55bWNlLmNvbS9jb250cmlidXRpbmdcclxuICovXHJcblxyXG5kZWZpbmUoJ3RpbnltY2UubW9kZXJuLlRoZW1lJywgW1xyXG5cdCdnbG9iYWwhdGlueW1jZS5FbnYnLFxyXG5cdCdnbG9iYWwhdGlueW1jZS5FZGl0b3JNYW5hZ2VyJyxcclxuXHQnZ2xvYmFsIXRpbnltY2UuVGhlbWVNYW5hZ2VyJyxcclxuXHQndGlueW1jZS5tb2Rlcm4ubW9kZXMuSWZyYW1lJyxcclxuXHQndGlueW1jZS5tb2Rlcm4ubW9kZXMuSW5saW5lJyxcclxuXHQndGlueW1jZS5tb2Rlcm4udWkuUmVzaXplJyxcclxuXHQndGlueW1jZS5tb2Rlcm4udWkuUHJvZ3Jlc3NTdGF0ZSdcclxuXSwgZnVuY3Rpb24gKEVudiwgRWRpdG9yTWFuYWdlciwgVGhlbWVNYW5hZ2VyLCBJZnJhbWUsIElubGluZSwgUmVzaXplLCBQcm9ncmVzc1N0YXRlKSB7XHJcblx0dmFyIHJlbmRlclVJID0gZnVuY3Rpb24oZWRpdG9yLCB0aGVtZSwgYXJncykge1xyXG5cdFx0dmFyIHNldHRpbmdzID0gZWRpdG9yLnNldHRpbmdzO1xyXG5cdFx0dmFyIHNraW4gPSBzZXR0aW5ncy5za2luICE9PSBmYWxzZSA/IHNldHRpbmdzLnNraW4gfHwgJ2xpZ2h0Z3JheScgOiBmYWxzZTtcclxuXHJcblx0XHRpZiAoc2tpbikge1xyXG5cdFx0XHR2YXIgc2tpblVybCA9IHNldHRpbmdzLnNraW5fdXJsO1xyXG5cclxuXHRcdFx0aWYgKHNraW5VcmwpIHtcclxuXHRcdFx0XHRza2luVXJsID0gZWRpdG9yLmRvY3VtZW50QmFzZVVSSS50b0Fic29sdXRlKHNraW5VcmwpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHNraW5VcmwgPSBFZGl0b3JNYW5hZ2VyLmJhc2VVUkwgKyAnL3NraW5zLycgKyBza2luO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBMb2FkIHNwZWNpYWwgc2tpbiBmb3IgSUU3XHJcblx0XHRcdC8vIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gd2UgZHJvcCBJRTcgc3VwcG9ydFxyXG5cdFx0XHRpZiAoRW52LmRvY3VtZW50TW9kZSA8PSA3KSB7XHJcblx0XHRcdFx0YXJncy5za2luVWlDc3MgPSBza2luVXJsICsgJy9za2luLmllNy5taW4uY3NzJztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnNraW5VaUNzcyA9IHNraW5VcmwgKyAnL3NraW4ubWluLmNzcyc7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIExvYWQgY29udGVudC5taW4uY3NzIG9yIGNvbnRlbnQuaW5saW5lLm1pbi5jc3NcclxuXHRcdFx0ZWRpdG9yLmNvbnRlbnRDU1MucHVzaChza2luVXJsICsgJy9jb250ZW50JyArIChlZGl0b3IuaW5saW5lID8gJy5pbmxpbmUnIDogJycpICsgJy5taW4uY3NzJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0UHJvZ3Jlc3NTdGF0ZS5zZXR1cChlZGl0b3IsIHRoZW1lKTtcclxuXHJcblx0XHRpZiAoc2V0dGluZ3MuaW5saW5lKSB7XHJcblx0XHRcdHJldHVybiBJbmxpbmUucmVuZGVyKGVkaXRvciwgdGhlbWUsIGFyZ3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBJZnJhbWUucmVuZGVyKGVkaXRvciwgdGhlbWUsIGFyZ3MpO1xyXG5cdH07XHJcblxyXG5cdFRoZW1lTWFuYWdlci5hZGQoJ21vZGVybicsIGZ1bmN0aW9uIChlZGl0b3IpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlbmRlclVJOiBmdW5jdGlvbiAoYXJncykge1xyXG5cdFx0XHRcdHJldHVybiByZW5kZXJVSShlZGl0b3IsIHRoaXMsIGFyZ3MpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZXNpemVUbzogZnVuY3Rpb24gKHcsIGgpIHtcclxuXHRcdFx0XHRyZXR1cm4gUmVzaXplLnJlc2l6ZVRvKGVkaXRvciwgdywgaCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHJlc2l6ZUJ5OiBmdW5jdGlvbiAoZHcsIGRoKSB7XHJcblx0XHRcdFx0cmV0dXJuIFJlc2l6ZS5yZXNpemVCeShlZGl0b3IsIGR3LCBkaCk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fSk7XHJcblxyXG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XHJcblx0fTtcclxufSk7XHJcblxyXG5kZW0oJ3RpbnltY2UubW9kZXJuLlRoZW1lJykoKTtcclxufSkoKTtcclxuIiwi77u/aW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEluamVjdCwgQXR0cmlidXRlIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdmcWF1dG9zaXpldGV4dGFyZWEnLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZnFhdXRvc2l6ZXRleHRhcmVhIGZpeGNoaWxkIG5nLWNsYXNzOntoYXNmb2N1czokY3RybC5oYXNmb2N1cywnaGFzLXZhbHVlJzogJGN0cmwuaGFzVmFsdWUsIGVycm9yOiAkY3RybC5zaG93RXJyb3IsIHJlYWRvbmx5OiRjdHJsLnJlYWRPbmx5fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXItdGV4dCB1bnNlbGVjdGFibGVcIiBuZy1oaWRlPVwiJGN0cmwuaGFzVmFsdWVcIiBuZy1jbGljaz1cIiRjdHJsLmZvY3VzVGV4dGFyZWEoKVwiPnt7JGN0cmwuaGludCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmctcmVhZG9ubHk9XCIkY3RybC5yZWFkT25seVwiIGNsYXNzPVwicHJpbWFyeVwiIHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCIkY3RybC52YWx1ZVwiIG5nLWZvY3VzPVwiJGN0cmwub25Gb2N1cygpXCIgbmctYmx1cj1cIiRjdHJsLm9uQmx1cigpXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiaGlkZGVuLWFyZWFcIiBuZy1yZWFkb25seT1cIiRjdHJsLnJlYWRPbmx5XCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDogLTIwMDBweDsgdG9wOi0yMDAwcHg7XCIgdGFiaW5kZXg9XCItMVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFuZGF0b3J5LWRvdFwiIG5nLWlmPVwiJGN0cmwubWFuZGF0b3J5XCIgdWliLXRvb2x0aXA9XCJ7eydGSUVMRF9SRVFVSVJFRF9UT09MVElQJyB8IHRyYW5zbGF0ZX19XCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvc2l6ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckc2NvcGUnKSBwcml2YXRlICRzY29wZTogYW5ndWxhci5JU2NvcGVcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2tleXVwJywgdGhpcy5hZGp1c3QuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBfbWFuZGF0b3J5O1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgbWFuZGF0b3J5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYW5kYXRvcnk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IG1hbmRhdG9yeSh2YWw6IGJvb2xlYW4gfCBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tYW5kYXRvcnkgPSB2YWwgPT09IHRydWUgfHwgdmFsID09PSBcInRydWVcIjtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0IGhhc1ZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3ZhbHVlICE9PSBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXQgc2hvd0Vycm9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hbmRhdG9yeSAmJiAoKCF0aGlzLmhhc2ZvY3VzICYmIHRoaXMud2FzRm9jdXNlZCAmJiAhdGhpcy5oYXNWYWx1ZSkgfHwgKCF0aGlzLmhhc2ZvY3VzICYmIHRoaXMuaXNlcnJvcikpO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgJG9uSW5pdCgpIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNpbnB1dCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLiR0aW1lb3V0KCk7XHJcbiAgICAgICAgICAgICg8YW55PihlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ByaW1hcnknKS5pdGVtKDApKSkuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHBvc3RMaW5rKCl7XHJcbiAgICAgICAgdGhpcy5hZGp1c3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGp1c3QoKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xyXG4gICAgICAgIHZhciB0YTEgPSAoPGFueT5lbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3ByaW1hcnknKS5pdGVtKDApKTtcclxuICAgICAgICB2YXIgdGEyID0gKDxhbnk+ZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWRkZW4tYXJlYScpLml0ZW0oMCkpO1xyXG4gICAgICAgICh0YTIgYXMgYW55KS52YWx1ZSA9ICh0YTEgYXMgYW55KS52YWx1ZTtcclxuICAgICAgICB0YTIuc3R5bGUud2lkdGggPSB0YTEuY2xpZW50V2lkdGggKyBcInB4XCI7XHJcbiAgICAgICAgdGExLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgdGEyLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgdGEyLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICB0YTEuc3R5bGUuaGVpZ2h0ID0gKHRhMi5zY3JvbGxIZWlnaHQgKyB0aGlzLl9oZWlnaHRDb3JyZWN0KSArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvY3VzVGV4dGFyZWEoKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xyXG4gICAgICAgICg8YW55PmVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncHJpbWFyeScpLml0ZW0oMCkpLmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaGVpZ2h0Q29ycmVjdDpudW1iZXIgPSAwO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgaGVpZ2h0Q29ycmVjdCgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHRDb3JyZWN0LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGhlaWdodENvcnJlY3QodmFsOnN0cmluZyl7XHJcbiAgICAgICAgdmFyIGggPSBwYXJzZUludCh2YWwsMTApO1xyXG4gICAgICAgIGlmKCFpc05hTihoKSlcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0Q29ycmVjdCA9IGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWwgIT0gdGhpcy5fdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICAgICAgICAgIHRoaXMub252YWx1ZWNoYW5nZWQoeyB2YWx1ZTogdmFsIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoaW50OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNlcnJvcjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBmb2N1c2lucHV0OiBib29sZWFuO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbnZhbHVlY2hhbmdlZDogKGFyZ3M6IHsgdmFsdWU6IHN0cmluZyB9KSA9PiB2b2lkO1xyXG5cclxuICAgIHByaXZhdGUgaGFzZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgd2FzRm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBvbkZvY3VzKCkge1xyXG4gICAgICAgIHRoaXMuaGFzZm9jdXMgPSB0aGlzLndhc0ZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25CbHVyKCkge1xyXG4gICAgICAgIHRoaXMuaGFzZm9jdXMgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdmcWZpbGVkcm9wJyxcclxuICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cImRyb3BhcmVhIG5nLWNsYXNzOntyZWFkb25seTokY3RybC5yZWFkT25seSxkcm9wcGluZzokY3RybC5pc2Ryb3BwaW5nfVwiPjwvZGl2PicsXHJcbiAgICB0cmFuc2NsdWRlOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlRHJvcCB7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uZmlsZW92ZXI6IChhcmdzOiB7IHN0YXR1czogYm9vbGVhbiB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbmZpbGVkcm9wOiAoYXJnczogeyBmaWxlbGlzdDogRmlsZUxpc3QgfSkgPT4gdm9pZDtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZWFkT25seTpib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBpc2Ryb3BwaW5nOmJvb2xlYW47XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdHJhbnNjbHVkZScpIHByaXZhdGUgJHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbixcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IGFuZ3VsYXIuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRzY29wZScpIHByaXZhdGUgJHNjb3BlOiBhbmd1bGFyLklTY29wZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5pbml0VHJhbnNjbHVkZSh0aGlzLiR0cmFuc2NsdWRlLCB0aGlzLiRlbGVtZW50KTtcclxuICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKCdkcm9wJywgdGhpcy5vbkRyb3AuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbignZHJhZ292ZXInLCB0aGlzLm9uRHJhZ092ZXIuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbignZHJhZ2xlYXZlJywgdGhpcy5vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0VHJhbnNjbHVkZSh0cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb24sIGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSkge1xyXG4gICAgICAgIHRyYW5zY2x1ZGUoKGUsIHMpID0+XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4oKS5hcHBlbmQoZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGxldCB0cmFuc2ZlciA9IHRoaXMuX2dldFRyYW5zZmVyKGV2ZW50KTtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSB8fCAhdHJhbnNmZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wcmV2ZW50QW5kU3RvcChldmVudCk7XHJcbiAgICAgICAgdGhpcy5vbmZpbGVvdmVyKHsgc3RhdHVzOiBmYWxzZSB9KTtcclxuICAgICAgICB0aGlzLmlzZHJvcHBpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uZmlsZWRyb3AoeyBmaWxlbGlzdDogdHJhbnNmZXIuZmlsZXMgfSk7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB0aGlzLiRzY29wZS4kZGlnZXN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkRyYWdPdmVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBsZXQgdHJhbnNmZXIgPSB0aGlzLl9nZXRUcmFuc2ZlcihldmVudCk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkgfHwgIXRoaXMuX2hhdmVGaWxlcyh0cmFuc2Zlci50eXBlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzZHJvcHBpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XHJcbiAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZlbnQpO1xyXG4gICAgICAgIHRoaXMub25maWxlb3Zlcih7IHN0YXR1czogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25EcmFnTGVhdmUoZXZlbnQ6IEV2ZW50KTogYW55IHtcclxuICAgICAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCA9PT0gdGhpcy4kZWxlbWVudFswXSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uZmlsZW92ZXIoeyBzdGF0dXM6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmlzZHJvcHBpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wcmV2ZW50QW5kU3RvcChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0VHJhbnNmZXIoZXZlbnQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2ZlciA6IGV2ZW50Lm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyOyAvLyBqUXVlcnkgZml4O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZXZlbnRBbmRTdG9wKGV2ZW50OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaGF2ZUZpbGVzKHR5cGVzOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghdHlwZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT09IC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZXMuY29udGFpbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVzLmNvbnRhaW5zKCdGaWxlcycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICBfYWRkT3ZlckNsYXNzKGl0ZW06YW55KTphbnkge1xyXG4gICAgICAgIGl0ZW0uYWRkT3ZlckNsYXNzKCk7XHJcbiAgICAgIH1cclxuICAgIFxyXG4gICAgICBfcmVtb3ZlT3ZlckNsYXNzKGl0ZW06YW55KTphbnkge1xyXG4gICAgICAgIGl0ZW0ucmVtb3ZlT3ZlckNsYXNzKCk7XHJcbiAgICAgIH0qL1xyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBJbmplY3QsIEF0dHJpYnV0ZSwgT3V0cHV0QXJncyB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAnZnF0ZXh0YXJlYScsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJmcXRleHRhcmVhIGZpeGNoaWxkIG5nLWNsYXNzOntoYXNmb2N1czokY3RybC5oYXNmb2N1cywnaGFzLXZhbHVlJzogJGN0cmwuaGFzVmFsdWUsIGVycm9yOiAkY3RybC5zaG93RXJyb3IsIHJlYWRvbmx5OiRjdHJsLnJlYWRPbmx5fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXItdGV4dCB1bnNlbGVjdGFibGVcIiBuZy1oaWRlPVwiJGN0cmwuaGFzVmFsdWVcIiBuZy1jbGljaz1cIiRjdHJsLmZvY3VzVGV4dGFyZWEoKVwiPnt7JGN0cmwuaGludCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjFcIiBuZy1yZWFkb25seT1cIiRjdHJsLnJlYWRPbmx5XCIgY2xhc3M9XCJ0ZXh0YXJlYVwiIHR5cGU9XCJ0ZXh0XCIgbmctY2hhbmdlPVwiJGN0cmwub25DaGFuZ2UoJGV2ZW50KVwiIG5nLW1vZGVsPVwiJGN0cmwudmFsdWVcIiBuZy1mb2N1cz1cIiRjdHJsLm9uRm9jdXMoKVwiIG5nLWJsdXI9XCIkY3RybC5vbkJsdXIoKVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFuZGF0b3J5LWRvdFwiIG5nLWlmPVwiJGN0cmwubWFuZGF0b3J5XCIgdWliLXRvb2x0aXA9XCJ7eydGSUVMRF9SRVFVSVJFRF9UT09MVElQJyB8IHRyYW5zbGF0ZX19XCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJ7eyRjdHJsLnRvb2x0aXBQbGFjZW1lbnQgPyAkY3RybC50b29sdGlwUGxhY2VtZW50IDogJ2JvdHRvbSdcIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZy1zaG93PVwiJGN0cmwuY2FuZGVsZXRlXCIgbmctY2xpY2s9XCIkY3RybC5DbGVhckZpZWxkKClcIiBjbGFzcz1cImNsZWFyZmllbGQtaWNvblwiIHVpYi10b29sdGlwPVwie3snREVMRVRFX0NIQVRfVE9PTFRJUCcgfCB0cmFuc2xhdGV9fVwiIHRvb2x0aXAtcGxhY2VtZW50PVwie3skY3RybC50b29sdGlwUGxhY2VtZW50ID8gJGN0cmwudG9vbHRpcFBsYWNlbWVudCA6ICdib3R0b20nXCIgdG9vbHRpcC1jbGFzcz1cImN1c3RvbVRvb2x0aXBUQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWNsZWFyRmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0b3NpemUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHdpbmRvdycpIHByaXZhdGUgJHdpbmRvdzogYW5ndWxhci5JV2luZG93U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckc2NvcGUnKSBwcml2YXRlICRzY29wZTogYW5ndWxhci5JU2NvcGUsXHJcbiAgICAgICAgQEluamVjdCgnaG90a2V5cycpIHByaXZhdGUgaG90a2V5czogbmcuaG90a2V5cy5Ib3RrZXlzUHJvdmlkZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2tleXByZXNzJywgKCkgPT4gdGhpcy5hanVzdER5bmFtaWNIVE1MTGF5b3V0KCkpO1xyXG5cclxuICAgICAgICBob3RrZXlzLmJpbmRUbygkc2NvcGUpO1xyXG4gICAgICAgIHRoaXMuaG90a2V5ID0gW3RoaXMudW5kb0hvdGtleXMgPSB7XHJcbiAgICAgICAgICAgIGNvbWJvOiBbJ2N0cmwreiddLFxyXG4gICAgICAgICAgICBhbGxvd0luOiBbJ0lOUFVUJywgJ1NFTEVDVCcsICdURVhUQVJFQSddLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRWYWx1ZShlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1dO1xyXG5cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB0b29sdGlwUGxhY2VtZW50OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FuZGVsZXRlOiBib29sZWFuO1xyXG5cclxuICAgICRwb3N0TGluaygpIHtcclxuICAgICAgICB0aGlzLmFqdXN0RHluYW1pY0hUTUxMYXlvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uTGF5b3V0UmVzZXQ7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uTGF5b3V0QWp1c3Q6IE91dHB1dEFyZ3M8eyBoZWlnaHQ6IG51bWJlciB9PjtcclxuICAgIHB1YmxpYyBhc3luYyBhanVzdER5bmFtaWNIVE1MTGF5b3V0KCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XHJcbiAgICAgICAgdmFyIHRhMSA9ICg8YW55PmVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGV4dGFyZWEnKS5pdGVtKDApKTtcclxuICAgICAgICB2YXIgb2xkSGllZ2h0OiBudW1iZXIgPSB0YTEuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIHRhMS5zdHlsZS5oZWlnaHQgPSB0aGlzLm1pbkhlaWdodFxyXG4gICAgICAgIHRhMS5zdHlsZS5oZWlnaHQgPSBgJHsodGExLnNjcm9sbEhlaWdodCA8PSB0aGlzLl9taW5IZWlnaHROdW1lcmljKSA/IHRoaXMuX21pbkhlaWdodE51bWVyaWMgOiAodGExLnNjcm9sbEhlaWdodCA+PSB0aGlzLl9tYXhIZWlnaHROdW1lcmljKSA/IHRoaXMuX21heEhlaWdodE51bWVyaWMgOiB0YTEuc2Nyb2xsSGVpZ2h0fXB4YDtcclxuICAgICAgICBpZiAodGExLnNjcm9sbEhlaWdodCA+IHRhMS5jbGllbnRIZWlnaHQgJiYgKCF0YTEuc3R5bGUub3ZlcmZsb3dZIHx8IHRhMS5zdHlsZS5vdmVyZmxvd1kgIT0gXCJzY3JvbGxcIikpIHtcclxuICAgICAgICAgICAgdGExLnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YTEuc2Nyb2xsSGVpZ2h0IDw9IHRoaXMuX21heEhlaWdodE51bWVyaWMgJiYgKCF0YTEuc3R5bGUub3ZlcmZsb3dZIHx8IHRhMS5zdHlsZS5vdmVyZmxvd1kgIT0gXCJoaWRkZW5cIikpIHtcclxuICAgICAgICAgICAgdGExLnN0eWxlLm92ZXJmbG93WSA9IFwiaGlkZGVuXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub25MYXlvdXRBanVzdCAmJiBvbGRIaWVnaHQgPT09IHRhMS5jbGllbnRIZWlnaHQpIHRoaXMub25MYXlvdXRBanVzdCh7IGhlaWdodDogdGExLmNsaWVudEhlaWdodCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhvdGtleTogbmcuaG90a2V5cy5Ib3RrZXlbXTtcclxuICAgIHByaXZhdGUgdW5kb0hvdGtleXM6IG5nLmhvdGtleXMuSG90a2V5O1xyXG5cclxuICAgIHByaXZhdGUgX3ByZXZpb3VzVmFsdWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3RleHRhcmVhQ2xlYXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfbWluSGVpZ2h0OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF9taW5IZWlnaHROdW1lcmljOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGdldCBtaW5IZWlnaHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWluSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXQgbWluSGVpZ2h0KHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbWluSGVpZ2h0ID0gdmFsO1xyXG4gICAgICAgIHRoaXMuX21pbkhlaWdodE51bWVyaWMgPSBOdW1iZXIodmFsLnJlcGxhY2UoL1teXFxkXS9nLCBcIlwiKSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9tYXhIZWlnaHQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgX21heEhlaWdodE51bWVyaWM6IG51bWJlcjtcclxuICAgIHByaXZhdGUgZ2V0IG1heEhlaWdodCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldCBtYXhIZWlnaHQodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tYXhIZWlnaHQgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5fbWF4SGVpZ2h0TnVtZXJpYyA9IE51bWJlcih2YWwucmVwbGFjZSgvW15cXGRdL2csIFwiXCIpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX21hbmRhdG9yeTtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IG1hbmRhdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWFuZGF0b3J5O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBtYW5kYXRvcnkodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbWFuZGF0b3J5ID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldCBoYXNWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgIT09IG51bGwgJiYgdGhpcy5fdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl92YWx1ZSAhPT0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBzaG93RXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuZGF0b3J5ICYmICgoIXRoaXMuaGFzZm9jdXMgJiYgdGhpcy53YXNGb2N1c2VkICYmICF0aGlzLmhhc1ZhbHVlKSB8fCAoIXRoaXMuaGFzZm9jdXMgJiYgdGhpcy5pc2Vycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyAkb25Jbml0KCkge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcclxuICAgICAgICBpZiAodGhpcy5mb2N1c2lucHV0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoKTtcclxuICAgICAgICAgICAgKDxhbnk+KGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGV4dGFyZWEnKS5pdGVtKDApKSkuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRhMSA9ICg8YW55PmVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGV4dGFyZWEnKS5pdGVtKDApKTtcclxuICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHRoaXMuJHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhMSkubWluSGVpZ2h0IHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy4kd2luZG93LmdldENvbXB1dGVkU3R5bGUodGExKS5tYXhIZWlnaHQgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgdGExLnN0eWxlLm1pbkhlaWdodCA9IHRoaXMuX21pbkhlaWdodDtcclxuICAgICAgICB0YTEuc3R5bGUubWF4SGVpZ2h0ID0gdGhpcy5fbWF4SGVpZ2h0O1xyXG4gICAgICAgIHRhMS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcblxyXG4gICAgICAgIHRoaXMuaG90a2V5LmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ob3RrZXlzLmFkZChrZXkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAkb25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuaG90a2V5LmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ob3RrZXlzLmRlbChrZXkuY29tYm8pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VGV4dGFyZWEoKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuICg8YW55PmVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGV4dGFyZWEnKS5pdGVtKDApKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvY3VzVGV4dGFyZWEoKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLmdldFRleHRhcmVhKCk7XHJcbiAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTtcclxuICAgICAgICByZXR1cm4gdGV4dGFyZWE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWwgIT09IHRoaXMuX3ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICB0aGlzLm9udmFsdWVjaGFuZ2VkKHsgdmFsdWU6IHZhbCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hanVzdER5bmFtaWNIVE1MTGF5b3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGhpbnQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc2Vycm9yOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzaW5wdXQ6IGJvb2xlYW47XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9udmFsdWVjaGFuZ2VkOiAoYXJnczogeyB2YWx1ZTogc3RyaW5nIH0pID0+IHZvaWQ7XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNmb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB3YXNGb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG9uRm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy5oYXNmb2N1cyA9IHRoaXMud2FzRm9jdXNlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hanVzdER5bmFtaWNIVE1MTGF5b3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fdGV4dGFyZWFDbGVhcmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRhcmVhID0gdGhpcy5nZXRUZXh0YXJlYSgpO1xyXG4gICAgICAgICAgICBpZiAodGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgIT09IHRleHRhcmVhLnNlbGVjdGlvbkVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gKHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgPSBsZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25FbmQgPSBsZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5oYXNmb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLm9uTGF5b3V0UmVzZXQpIHRoaXMub25MYXlvdXRSZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBDbGVhckZpZWxkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5IHx8ICF0aGlzLmNhbmRlbGV0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLl9wcmV2aW91c1ZhbHVlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgbm90IGNvcnJlY3RseSBzaXBwb3J0ZWQgYnkgRmlyZWZveCwgc28gd2UgZmFrZSBhIHVuZG8uXHJcbiAgICAgICAgLy8gY29uc3QgdGV4dGFyZWEgPSB0aGlzLmZvY3VzVGV4dGFyZWEoKTtcclxuICAgICAgICAvLyB0ZXh0YXJlYS5zZWxlY3QoKTtcclxuICAgICAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnZGVsZXRlJyk7XHJcbiAgICAgICAgdGhpcy5fdGV4dGFyZWFDbGVhcmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgdGhpcy5vbnZhbHVlY2hhbmdlZCh7IHZhbHVlOiB0aGlzLl92YWx1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0VmFsdWUoZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fcHJldmlvdXNWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNWYWx1ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgQmluZGluZywgQXR0cmlidXRlLCBJbmplY3QsIE91dHB1dEFyZ3MgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgS2V5Q29kZXMsIEtleWJvYXJkRXZlbnRDb2RlIH0gZnJvbSBcIkBmaXFhcy91dGlsc1wiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9UcmFuc2xhdGlvblNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAnaW5saW5lVGV4dEVkaXRvcicsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJkaXNwbGF5IG5nLWNsYXNzOntlbXB0eTokY3RybC5lbXB0eSwgcG9pbnRlcjohJGN0cmwucmVhZE9ubHl9XCIgbmctaWY9XCIhJGN0cmwuZWRpdE1vZGVcIiBuZy1jbGljaz1cIiRjdHJsLmVkaXRNb2RlPSEkY3RybC5yZWFkT25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1lbmFibGU9XCIhJGN0cmwucmVhZE9ubHkgfHwgJGN0cmwuZ2V0VGl0bGVPdmVyZmxvd1wiIHRvb2x0aXAtYXBlbmQtdG8tYm9keT1cImZhbHNlXCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJib3R0b21cIiB0b29sdGlwLWNsYXNzPVwie3skY3RybC5nZXRUb29sdGlwQ2xhc3N9fVwiIHRvb2x0aXAtcG9wdXAtZGVsYXk9XCIzMDBcIiB1aWItdG9vbHRpcD1cInt7JGN0cmwuZ2V0VG9vbHRpcFRleHR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7JGN0cmwudmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiBzdHlsZT1cImhlaWdodDogMTAwJTsgY3Vyc29yOiBwb2ludGVyO1wiIG5nLWlmPVwiISRjdHJsLmVkaXRNb2RlICYmICEkY3RybC5yZWFkT25seVwiIG5nLWNsaWNrPVwiJGN0cmwuZWRpdE1vZGU9dHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1hcHBlbmQtdG8tYm9keT1cInRydWVcIiB0b29sdGlwLXBsYWNlbWVudD1cImJvdHRvbVwiIHRvb2x0aXAtY2xhc3M9XCJjdXN0b21Ub29sdGlwVEJcIiB1aWItdG9vbHRpcD1cInt7JGN0cmwucmVhZE9ubHkgPyAkY3RybC52YWx1ZSA6ICgnQ0xJQ0tfVE9fRURJVCcgfCB0cmFuc2xhdGUpfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbiBpY29uLWVkaXRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlZGl0b3IgbmctY2xhc3M6e2VtcHR5OiRjdHJsLmVtcHR5fVwiIG5nLWlmPVwiJGN0cmwuZWRpdE1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhpbnQgdW5zZWxlY3RhYmxlXCIgbmctc2hvdz1cIiRjdHJsLmVtcHR5RWRpdFwiPnt7JGN0cmwuaGludH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuZy1rZXlkb3duPVwiJGN0cmwub25LZXkoJGV2ZW50KVwiIG5nLWtleXVwPVwiJGN0cmwub25LZXlVcCgkZXZlbnQpXCIgY2xhc3M9XCJpbnB1dEVkaXQgbmctY2xhc3M6e2VtcHR5OiRjdHJsLmVtcHR5RWRpdH1cIiBzaXplPVwie3soJGN0cmwudmFsdWUubGVuZ3RoIDwgMTApID8gMTAgOiAkY3RybC52YWx1ZS5sZW5ndGh9fVwiIG5nLW1vZGVsPVwiJGN0cmwuZWRpdHZhbHVlXCIgbmctZm9jdXM9XCIkY3RybC5hZGp1c3QoKVwiIG5nLWNoYW5nZT1cIiRjdHJsLmFkanVzdCgpXCIgbmctYmx1cj1cIiRjdHJsLm9uQmx1cigkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaWNvbi1TQVZFLUNIRUNLIG5nLWNsYXNzOnsndW5zZWxlY3RhYmxlJzokY3RybC5lbXB0eUVkaXR9XCIgbmctbW91c2Vkb3duPVwiJGN0cmwuYWN0aW9uQ2xpY2sgPSB0cnVlXCIgbmctY2xpY2s9XCIkY3RybC5jb21taXRFZGl0KClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGljb24tQ2xlYXItRWRpdFwiIG5nLW1vdXNlZG93bj1cIiRjdHJsLmFjdGlvbkNsaWNrID0gdHJ1ZVwiIG5nLWNsaWNrPVwiJGN0cmwuY2FuY2VsRWRpdCgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPmBcclxufSlcclxuZXhwb3J0IGNsYXNzIElubGluZVRleHRFZGl0b3Ige1xyXG5cclxuICAgIHByaXZhdGUgYWN0aW9uQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUga2V5ZG93bjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZWRpdHZhbHVlID0gJyc7XHJcbiAgICBwcml2YXRlIF9lZGl0TW9kZTogYm9vbGVhbjtcclxuXHJcbiAgICBwcml2YXRlIGNsaWNrVG9FZGl0VGV4dDogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpdGxlT3ZlcmZsb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyB0aXRsZVRvb2xUaXBUZXh0OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdGl0bGVUb29sVGlwQ2xhc3M6IHN0cmluZyA9ICdjdXN0b21Ub29sdGlwVEInO1xyXG5cclxuICAgIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGhpbnQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZWRpdHZhbHVlID0gdGhpcy5fdmFsdWUgPSB2YWw7XHJcbiAgICAgICAgLy90aGlzLnVwZGF0ZVRvb2x0aXBWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZVN1Ym1pdDogKGFyZ3M6IHsgdmFsdWU6IHN0cmluZyB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblZhbHVlQ2hhbmdlZDogT3V0cHV0QXJnczx7IHZhbHVlOiBzdHJpbmcgfT47XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIGVkaXRNb2RlQ2hhbmdlZDogT3V0cHV0QXJnczx7IHZhbHVlOiBib29sZWFuIH0+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoXCIkZWxlbWVudFwiKSBwcml2YXRlICRlbGVtZW50OiBuZy5JUm9vdEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoXCIkdGltZW91dFwiKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgVHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHNjb3BlJykgcHJpdmF0ZSAkc2NvcGU6IG5nLklTY29wZVxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jbGlja1RvRWRpdFRleHQgPSB0aGlzLlRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoJ0NMSUNLX1RPX0VESVQnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25CbHVyKCRldmVudDogSlF1ZXJ5RXZlbnRPYmplY3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYWN0aW9uQ2xpY2sgJiYgIXRoaXMuZW1wdHlFZGl0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5lbXB0eUVkaXQpIHtcclxuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuJHRpbWVvdXQoKCkgPT4gdGhpcy4kZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnB1dEVkaXQnKVswXS5mb2N1cygpLCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbW1pdEVkaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lZGl0TW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gdGhpcy5lZGl0dmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmVkaXR2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoeyB2YWx1ZTogdGhpcy5lZGl0dmFsdWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbmNlbEVkaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25DbGljayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdE1vZGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZW1wdHlFZGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5rZXlkb3duICYmICghdGhpcy5lZGl0dmFsdWUgfHwgdGhpcy5lZGl0dmFsdWUubGVuZ3RoID09IDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgZWRpdE1vZGUodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuX2VkaXRNb2RlO1xyXG4gICAgICAgIGlmICh2YWwgJiYgIXRoaXMuX2VkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy4kdGltZW91dCgoKSA9PiB0aGlzLiRlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lucHV0RWRpdCcpWzBdLmZvY3VzKCksIDI1KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZWRpdE1vZGUgPSB2YWw7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRNb2RlQ2hhbmdlZCh7IHZhbHVlOiB2YWwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZWRpdE1vZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRNb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgYWRqdXN0KCkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGVkaXRvcjogSFRNTElucHV0RWxlbWVudCA9ICg8YW55PmVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5wdXRFZGl0JykuaXRlbSgwKSk7XHJcbiAgICAgICAgZWRpdG9yLnNpemUgPSAoZWRpdG9yLnZhbHVlLmxlbmd0aCA8IDEwKSA/IDEwIDogZWRpdG9yLnZhbHVlLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uS2V5KCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHRoaXMua2V5ZG93biA9IHRydWU7XHJcbiAgICAgICAgaWYgKCRldmVudC5rZXlDb2RlID09PSAwKSB7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKCRldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkRXZlbnRDb2RlLmVudGVyOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdmFsdWUgfHwgdGhpcy5fdmFsdWUubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlU3VibWl0ICYmICF0aGlzLnZhbHVlU3VibWl0KHsgdmFsdWU6IHRoaXMuX3ZhbHVlIH0pIHx8ICF0aGlzLnZhbHVlU3VibWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWl0RWRpdCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEV2ZW50Q29kZS5lc2NhcGU6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKCRldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleUNvZGVzLmVudGVyOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdmFsdWUgfHwgdGhpcy5fdmFsdWUubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlU3VibWl0ICYmICF0aGlzLnZhbHVlU3VibWl0KHsgdmFsdWU6IHRoaXMuX3ZhbHVlIH0pIHx8ICF0aGlzLnZhbHVlU3VibWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWl0RWRpdCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Q29kZXMuZXNjYXBlOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25LZXlVcCgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICB0aGlzLmtleWRvd24gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVGl0bGVPdmVyZmxvdyhlbDogYW55LCB0aXRsZVRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGN1ck92ZXJmbG93ID0gZWwuc3R5bGUub3ZlcmZsb3c7XHJcblxyXG4gICAgICAgIGVsLmlubmVySFRNTCA9IHRpdGxlVGV4dDtcclxuXHJcbiAgICAgICAgaWYgKCFjdXJPdmVyZmxvdyB8fCBjdXJPdmVyZmxvdyA9PT0gXCJ2aXNpYmxlXCIpIHtcclxuICAgICAgICAgICAgZWwuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGl0bGVPdmVyZmxvdyA9IGVsLmNsaWVudFdpZHRoIDwgZWwuc2Nyb2xsV2lkdGhcclxuICAgICAgICAgICAgfHwgZWwuY2xpZW50SGVpZ2h0IDwgZWwuc2Nyb2xsSGVpZ2h0O1xyXG5cclxuICAgICAgICBlbC5zdHlsZS5vdmVyZmxvdyA9IGN1ck92ZXJmbG93O1xyXG4gICAgICAgIHJldHVybiB0aXRsZU92ZXJmbG93O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZ2V0VGl0bGVPdmVyZmxvdygpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLnRpdGxlT3ZlcmZsb3cgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBkaXNwbGF5RWxlbWVudCA9IHRoaXMuJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZGlzcGxheScpLml0ZW0oMCk7XHJcblxyXG4gICAgICAgIGlmIChkaXNwbGF5RWxlbWVudCAmJiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGl0bGVPdmVyZmxvdyA9IHRoaXMuaXNUaXRsZU92ZXJmbG93KGRpc3BsYXlFbGVtZW50LCB0aGlzLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGVPdmVyZmxvdztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGdldFRvb2x0aXBUZXh0KCkge1xyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlFbGVtZW50ID0gdGhpcy4kZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdkaXNwbGF5JykuaXRlbSgwKTtcclxuXHJcbiAgICAgICAgaWYgKGRpc3BsYXlFbGVtZW50ICYmIHRoaXMudmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGl0bGVPdmVyZmxvdyhkaXNwbGF5RWxlbWVudCwgdGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGl0bGVUb29sVGlwVGV4dCA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy50aXRsZVRvb2xUaXBUZXh0fVxcclxcbigke3RoaXMuY2xpY2tUb0VkaXRUZXh0fSlgO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aXRsZVRvb2xUaXBUZXh0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xpY2tUb0VkaXRUZXh0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZ2V0VG9vbHRpcENsYXNzKCkge1xyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlFbGVtZW50ID0gdGhpcy4kZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdkaXNwbGF5JykuaXRlbSgwKTtcclxuXHJcbiAgICAgICAgdGhpcy50aXRsZVRvb2xUaXBDbGFzcyA9ICdjdXN0b21Ub29sdGlwVEInO1xyXG4gICAgICAgIGlmIChkaXNwbGF5RWxlbWVudCAmJiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGl0bGVPdmVyZmxvdyhkaXNwbGF5RWxlbWVudCwgdGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGl0bGVUb29sVGlwQ2xhc3MgPSAnY3VzdG9tVG9vbHRpcERlc2MnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZVRvb2xUaXBDbGFzcyA9ICdjdXN0b21Ub29sdGlwVEInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRpdGxlVG9vbFRpcENsYXNzO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBCaW5kaW5nLCBBdHRyaWJ1dGUsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBLZXlDb2RlcywgS2V5Ym9hcmRFdmVudENvZGUgfSBmcm9tIFwiQGZpcWFzL3V0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdudW1iZXJlZGl0Ym94JyxcclxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIm51bWJlcmVkaXRib3hmcmFtZSB7eyRjdHJsLmNoaWxkQ2xhc3Nlc319IG5nLWNsYXNzOntjYW5kZWxldGU6JGN0cmwuY2FuZGVsZXRlLCBoYXNmb2N1czokY3RybC5faGFzRm9jdXMsICdoYXMtdmFsdWUnOiAkY3RybC5oYXNWYWx1ZSwgZXJyb3I6ICRjdHJsLnNob3dFcnJvciwgcmVhZG9ubHk6JGN0cmwucmVhZE9ubHkgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXItbnVtYmVyIHVuc2VsZWN0YWJsZVwiIG5nLWhpZGU9XCIkY3RybC5oYXNWYWx1ZVwiPnt7JGN0cmwuX2Rpc3BsYXllZEhpbnQgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG5nLWtleWRvd249XCIkY3RybC5vbktleSgkZXZlbnQpXCIgbmctcmVhZG9ubHk9XCIkY3RybC5yZWFkT25seVwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuZy1jaGFuZ2U9XCIkY3RybC5vbkNoYW5nZSgpXCIgbmctZm9jdXM9XCIkY3RybC5vbkZvY3VzKCk7XCIgbmctYmx1cj1cIiRjdHJsLm9uQmx1cigpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm51bWJlcmVkaXRib3hcIiBuZy1tb2RlbD1cIiRjdHJsLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBuZy1tb2RlbC1vcHRpb25zPVwieyBkZWJvdW5jZTogeyAnZGVmYXVsdCc6ICRjdHJsLmRlYm91bmNlLCAnYmx1cic6MCB9fVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFuZGF0b3J5LWRvdFwiIG5nLWlmPVwiJGN0cmwubWFuZGF0b3J5XCIgdWliLXRvb2x0aXA9XCJ7eydGSUVMRF9SRVFVSVJFRF9UT09MVElQJyB8IHRyYW5zbGF0ZX19XCIgdG9vbHRpcC1wbGFjZW1lbnQ9XCJ0b3BcIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZy1jbGljaz1cIiRjdHJsLkNsZWFyRmllbGQoKVwiIGNsYXNzPVwiY2xlYXJmaWVsZC1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWNsZWFyRmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnVtYmVyRWRpdEJveCB7XHJcbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfaGludDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfZGlzcGxheWVkSGludDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfaGFzRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgd2FzRm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRpbWVvdXQnKSBwcml2YXRlICR0aW1lb3V0OiBuZy5JVGltZW91dFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBoYXNWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgIT09IG51bGwgJiYgdGhpcy5fdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl92YWx1ZSAhPT0gXCJcIiAmJiB0aGlzLl92YWx1ZSAhPT0gXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgc2hvd0Vycm9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hbmRhdG9yeSAmJiAoKCF0aGlzLl9oYXNGb2N1cyAmJiB0aGlzLndhc0ZvY3VzZWQgJiYgIXRoaXMuaGFzVmFsdWUpIHx8ICghdGhpcy5faGFzRm9jdXMgJiYgdGhpcy5pc2Vycm9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2hpbGRDbGFzc2VzO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBnZXQgY2hpbGRDbGFzc2VzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZENsYXNzZXM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGNoaWxkQ2xhc3Nlcyh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2NoaWxkQ2xhc3NlcyA9IHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tYW5kYXRvcnk7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGdldCBtYW5kYXRvcnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hbmRhdG9yeTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgbWFuZGF0b3J5KHZhbDogYm9vbGVhbiB8IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX21hbmRhdG9yeSA9IHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IFwidHJ1ZVwiO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgcHVibGljIGFjdGl2ZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIHZhbCA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnJlcGxhY2UoL1teLTAtOV0rL2csICcnKSA6IHZhbDtcclxuICAgICAgICBpZiAodmFsICE9IHRoaXMuX3ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hhbmdlb25ibHVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCh7IHZhbHVlOiB0aGlzLl92YWx1ZSB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBoaW50KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpbnQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGhpbnQodGhlSGludDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5faGludCA9IHRoZUhpbnQ7XHJcbiAgICAgICAgdGhpcy5fZGlzcGxheWVkSGludCA9IHRoaXMuX2hhc0ZvY3VzID8gJycgOiB0aGlzLl9oaW50O1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBmb2N1c2lucHV0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNhbmRlbGV0ZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc2Vycm9yOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNoYW5nZW9uYmx1cjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkZWJvdW5jZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIHZhbHVlQ2hhbmdlZDogKGFyZ3M6IHsgdmFsdWU6IHN0cmluZyB9KSA9PiB2b2lkO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZVN1Ym1pdDogKGFyZ3M6IHsgdmFsdWU6IHN0cmluZyB9KSA9PiB2b2lkO1xyXG5cclxuICAgIHByaXZhdGUgb25LZXkoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzAnLCAnLSddLmluZGV4T2YoJGV2ZW50LmtleSkgPiAtMVxyXG4gICAgICAgICAgICB8fCAkZXZlbnQud2hpY2ggPj0gNDggJiYgJGV2ZW50LndoaWNoIDw9IDU3XHJcbiAgICAgICAgICAgIHx8ICRldmVudC53aGljaCA9PT0gMCAmJiAkZXZlbnQuY2hhckNvZGUgPT09IDBcclxuICAgICAgICAgICAgfHwgJGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGVzLmJhY2tzcGFjZVxyXG4gICAgICAgICAgICB8fCAkZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMudGFiXHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5ob21lXHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5lbmRcclxuICAgICAgICAgICAgfHwgJGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGVzLmxlZnRBcnJvd1xyXG4gICAgICAgICAgICB8fCAkZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMucmlnaHRBcnJvd1xyXG4gICAgICAgICAgICB8fCAkZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMudXBBcnJvd1xyXG4gICAgICAgICAgICB8fCAkZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMuZG93bkFycm93XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5kZWxldGVcclxuICAgICAgICAgICAgfHwgJGV2ZW50LmNvZGUgPT09IEtleWJvYXJkRXZlbnRDb2RlLmJhY2tzcGFjZVxyXG4gICAgICAgICAgICB8fCAkZXZlbnQuY29kZSA9PT0gS2V5Ym9hcmRFdmVudENvZGUudGFiXHJcbiAgICAgICAgICAgIHx8ICRldmVudC5jb2RlID09PSBLZXlib2FyZEV2ZW50Q29kZS5ob21lXHJcbiAgICAgICAgICAgIHx8ICRldmVudC5jb2RlID09PSBLZXlib2FyZEV2ZW50Q29kZS5lbmRcclxuICAgICAgICAgICAgfHwgJGV2ZW50LmNvZGUgPT09IEtleWJvYXJkRXZlbnRDb2RlLmxlZnRBcnJvd1xyXG4gICAgICAgICAgICB8fCAkZXZlbnQuY29kZSA9PT0gS2V5Ym9hcmRFdmVudENvZGUucmlnaHRBcnJvd1xyXG4gICAgICAgICAgICB8fCAkZXZlbnQuY29kZSA9PT0gS2V5Ym9hcmRFdmVudENvZGUudXBBcnJvd1xyXG4gICAgICAgICAgICB8fCAkZXZlbnQuY29kZSA9PT0gS2V5Ym9hcmRFdmVudENvZGUuZG93bkFycm93XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5jb2RlID09PSBLZXlib2FyZEV2ZW50Q29kZS5kZWxldGVcclxuICAgICAgICAgICAgfHwgJGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGVzLnN1YnRyYWN0XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5kYXNoXHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQxXHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQyXHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQzXHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQ0XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQ1XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQ2XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQ3XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQ4XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQ5XHJcbiAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5udW1wYWQwXHJcbiAgICAgICAgICAgIHx8IChcclxuICAgICAgICAgICAgICAgIFsneicsICd4JywgJ2MnLCAndicsICdhJ10uaW5kZXhPZigkZXZlbnQua2V5KSA+IC0xXHJcbiAgICAgICAgICAgICAgICB8fCAkZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMuYVxyXG4gICAgICAgICAgICAgICAgfHwgJGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGVzLnZcclxuICAgICAgICAgICAgICAgIHx8ICRldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5jXHJcbiAgICAgICAgICAgICAgICB8fCAkZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMueFxyXG4gICAgICAgICAgICAgICAgfHwgJGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGVzLnpcclxuICAgICAgICAgICAgKSAmJiAoJGV2ZW50LmN0cmxLZXkgfHwgJGV2ZW50Lm1ldGFLZXkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHRvIGFsbG93IG51bWJlcnNcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICgkZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMuZW50ZXIpIHtcclxuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVTdWJtaXQoeyB2YWx1ZTogdGhpcy5fdmFsdWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB0byBzdG9wIG90aGVyc1xyXG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uRm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy5faGFzRm9jdXMgPSB0aGlzLndhc0ZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25CbHVyKCkge1xyXG4gICAgICAgIHRoaXMuX2hhc0ZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKVxyXG4gICAgICAgICAgICB0aGlzLl9kaXNwbGF5ZWRIaW50ID0gdGhpcy5faGludDtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZW9uYmx1ciAmJiB0aGlzLl9kaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCh7IHZhbHVlOiB0aGlzLl92YWx1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5jaGFuZ2VvbmJsdXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKHsgdmFsdWU6IHRoaXMuX3ZhbHVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyAkcG9zdExpbmsoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNpbnB1dCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLiR0aW1lb3V0KDI1KTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0ZpZWxkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9jdXNGaWVsZCgpIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XHJcbiAgICAgICAgdmFyIGZpZWxkID0gKDxhbnk+ZWxlbWVudFswXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdudW1iZXJlZGl0YXJlYScpLml0ZW0oMCkpO1xyXG4gICAgICAgIGlmIChmaWVsZClcclxuICAgICAgICAgICAgZmllbGQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgQ2xlYXJGaWVsZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSB8fCAhdGhpcy5jYW5kZWxldGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5mb2N1c0ZpZWxkKCk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSAnJztcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCh7IHZhbHVlOiB0aGlzLl92YWx1ZSB9KTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgIH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogJ3Byb2Nlc3NpbmdpbmRpY2F0b3InLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicHJvY2Vzc2luZ2luZGljYXRvciBjc3Nsb2FkLWNvbnRhaW5lclwiIG5nLWNsYXNzPVwie2lzcHJvY2Vzc2luZzokY3RybC5pc3Byb2Nlc3Npbmd9XCI+XHJcblx0PGRpdiBjbGFzcz1cImNzc2xvYWQtbG9hZGluZ1wiPjxpPjwvaT48aT48L2k+PGk+PC9pPjxpPjwvaT48L2Rpdj5cclxuPC9kaXY+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvY2Vzc2luZ0luZGljYXRvciB7XHJcblxyXG4gICAgcHVibGljIGlzcHJvY2Vzc2luZzogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgdW5kb1dhdGNoOiBhbnkgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyRzY29wZScpIHByaXZhdGUgJHNjb3BlIDogbmcuSVNjb3BlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGlzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnVuZG9XYXRjaCA9IHRoaXMuaXNQcm9jZXNzaW5nU2VydmljZS5hZGRMaXN0ZW5lcigoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNwcm9jZXNzaW5nID0gc3RhdHVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNwcm9jZXNzaW5nID0gdGhpcy5pc1Byb2Nlc3NpbmdTZXJ2aWNlLklzUHJvY2Vzc2luZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLnVuZG9XYXRjaCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7Q29tcG9uZW50LCBBdHRyaWJ1dGUsIElucHV0LCBPdXRwdXQsIEluamVjdH0gZnJvbSAnQGZpcWFzL2FuZ3VsYXItdXRpbHMnO1xyXG5pbXBvcnQgeyBLZXlDb2RlcywgS2V5Ym9hcmRFdmVudENvZGUgfSBmcm9tIFwiQGZpcWFzL3V0aWxzXCJcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogJ3B1c2hidXR0b24nLFxyXG4gICAgdHJhbnNjbHVkZTogdHJ1ZSxcclxuICAgIHRlbXBsYXRlOiBgPGRpdiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInB1c2hidXR0b25cIiBuZy1jbGFzcz1cIntpc2Rpc2FibGVkOiRjdHJsLmlzZGlzYWJsZWR9XCIgbmctY2xpY2s9XCIkY3RybC5vbkNsaWNrKCRldmVudClcIiBuZy1rZXlkb3duPVwiJGN0cmwub25LZXkoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZW50ZXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIG5nLXNob3c9XCIkY3RybC5hcnJvdyA9PSdsZWZ0J1wiIGNsYXNzPVwiaWNvbi1BcnJvd0xlZnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gbmctc2hvdz1cIiRjdHJsLmluZGljYXRvckNvbG9yXCIgbmctc3R5bGU9XCIkY3RybC5pbmRpY2F0b3JTdHlsZVwiIGNsYXNzPVwiaW5kaWNhdG9yLXNwaGVyZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbnRleHQge3skY3RybC5hcnJvd319XCI+e3skY3RybC5idXR0b250ZXh0fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gbmctc2hvdz1cIiRjdHJsLmFycm93ID09J3JpZ2h0J1wiIGNsYXNzPVwiaWNvbi1BcnJvd1JpZ2h0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIG5nLXRyYW5zY2x1ZGU+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIFB1c2hidXR0b24ge1xyXG4gICAgQElucHV0KCkgcHVibGljIGlzZGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBpbmRpY2F0b3JDb2xvcjogc3RyaW5nO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBidXR0b250ZXh0OiBzdHJpbmc7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGxpbms6IHN0cmluZztcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgYXJyb3c6ICdub25lJyB8ICdsZWZ0JyB8ICdyaWdodCc7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgb25jbGlja2VkOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgaW5kaWNhdG9yU3R5bGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kaWNhdG9yQ29sb3IgPyB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogdGhpcy5pbmRpY2F0b3JDb2xvciB9IDoge307XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHRyYW5zY2x1ZGUnKSAkdHJhbnNjbHVkZTogYW5ndWxhci5JVHJhbnNjbHVkZUZ1bmN0aW9uXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNkaXNhYmxlZCAhPT0gdHJ1ZSlcclxuICAgICAgICAgICAgdGhpcy5vbmNsaWNrZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleUNvZGUgPT0gS2V5Q29kZXMuZW50ZXIgfHwgZXZlbnQuY29kZSA9PSBLZXlib2FyZEV2ZW50Q29kZS5lbnRlcikgJiYgIXRoaXMuaXNkaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLm9uY2xpY2tlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgQXR0cmlidXRlLCBPdXRwdXQsIElucHV0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdwdXNoaWNvbicsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwdXNoaWNvbiBuZy1jbGFzczp7aXNmb2N1czokY3RybC5pc2ZvY3VzLCBlbmFibGVkOiRjdHJsLmVuYWJsZWR9XCIgdGFiaW5kZXg9XCIwXCIgbmctY2xpY2s9XCIkY3RybC5vbkNsaWNrKCRldmVudClcIiBuZy1rZXlkb3duPVwiJGN0cmwub25LZXkoJGV2ZW50KVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIG5nLWZvY3VzPVwiJGN0cmwub25Gb2N1cygpXCIgbmctYmx1cj1cIiRjdHJsLm9uQmx1cigpXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gbmctY2xhc3M6JGN0cmwuaWNvblwiPjxzcGFuIGNsYXNzPVwicGF0aDFcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJwYXRoMlwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInBhdGgzXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwicGF0aDRcIj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdXNoaWNvbiB7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGljb246IHN0cmluZztcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgbGluazogc3RyaW5nO1xyXG4gICAgQEF0dHJpYnV0ZSgpIHB1YmxpYyBhcnJvdzogJ25vbmUnIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbiAgICBASW5wdXQoKSBlbmFibGVkOiBib29sZWFuO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIG9uY2xpY2tlZDogKCkgPT4gdm9pZDtcclxuXHJcbiAgICBwdWJsaWMgJG9uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVkID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVkKVxyXG4gICAgICAgICAgICB0aGlzLm9uY2xpY2tlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbktleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDMyIHx8IGV2ZW50LmtleUNvZGUgPT0gMTMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlZClcclxuICAgICAgICAgICAgICAgIHRoaXMub25jbGlja2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNmb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBvbkZvY3VzKCkge1xyXG4gICAgICAgIHRoaXMuaXNmb2N1cyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQmx1cigpIHtcclxuICAgICAgICB0aGlzLmlzZm9jdXMgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgIH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEF0dHJpYnV0ZSwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdyYWRpb2JhcicsXHJcbiAgICB0cmFuc2NsdWRlOiB0cnVlLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicmFkaW9iYXJmcmFtZSBuZy1jbGFzczp7cmVhZG9ubHk6JGN0cmwucmVhZE9ubHl9XCIgdGFiaW5kZXg9XCIwXCIgbmcta2V5ZG93bj1cIiRjdHJsLm9uS2V5KCRldmVudClcIj48ZGl2IGNsYXNzPVwicmFkaW9iYXJcIj48L2Rpdj48L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYWRpb0JhciB7XHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2U7XHJcbiAgICBwcml2YXRlIF90cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb247XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVhZE9ubHk6Ym9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgcmVhZE9ubHkoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHJlYWRPbmx5KHJlYWRPbmx5OmJvb2xlYW4pe1xyXG4gICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHk7XHJcbiAgICAgICAgaWYodGhpcy5fb3B0aW9ucylcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2gobz0+by5yZWFkT25seSA9IHRoaXMucmVhZE9ubHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyRlbGVtZW50JykgcHJpdmF0ZSAkZWxlbWVudDogYW5ndWxhci5JUm9vdEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR0cmFuc2NsdWRlJykgJHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvblxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9ICRlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuX3RyYW5zY2x1ZGUgPSAkdHJhbnNjbHVkZTtcclxuICAgICAgICB0aGlzLmluaXRUcmFuc2NsdWRlKHRoaXMuX3RyYW5zY2x1ZGUsIHRoaXMuX2VsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRUcmFuc2NsdWRlKHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbiwgZWxlbWVudDogYW5ndWxhci5JUm9vdEVsZW1lbnRTZXJ2aWNlKSB7XHJcbiAgICAgICAgdHJhbnNjbHVkZSgoZSwgcykgPT5cclxuICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbigpLmNoaWxkcmVuKCkuYXBwZW5kKGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkT3B0aW9uKG9wdGlvbjogQmFyT3B0aW9uKTogKHNlbmRlcjogQmFyT3B0aW9uLCB2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLmNvbmNhdChvcHRpb24pO1xyXG4gICAgICAgIG9wdGlvbi5yZWFkT25seSA9IHRoaXMucmVhZE9ubHk7XHJcbiAgICAgICAgcmV0dXJuIChzLCB2KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyKG8gPT4gbyAhPSBzKS5mb3JFYWNoKG8gPT4gby5hY3RpdmUgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQWN0aXZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25vcHRpb25jaGFuZ2VkOiAoYXJnczogeyB2YWx1ZTogYW55LCB0ZXh0OiBzdHJpbmcgfSkgPT4gdm9pZDtcclxuXHJcblxyXG4gICAgcHVibGljIGdldCBvcHRpb25zKCk6IEJhck9wdGlvbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IEJhck9wdGlvbltdKSB7XHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlLmZpbHRlcihvID0+IG8uYWN0aXZlKS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHZhbHVlLmZpbHRlcihvID0+IG8uYWN0aXZlKS5zbGljZSgxKS5mb3JFYWNoKG8gPT4gby5hY3RpdmUgPSBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tBY3RpdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlT3B0aW9uID8gdGhpcy5fYWN0aXZlT3B0aW9uLnZhbHVlIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWwpIHtcclxuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFyIG8gPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wID0+IG9wLnZhbHVlID09IHZhbCk7XHJcbiAgICAgICAgICAgIGlmIChvLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgb1swXS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZU9wdGlvbiAhPT0gb1swXSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVPcHRpb24gPSBvWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX29wdGlvbnM7XHJcblxyXG4gICAgcHJpdmF0ZSBfYWN0aXZlT3B0aW9uOiBCYXJPcHRpb247XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0FjdGl2ZSgpIHtcclxuICAgICAgICB2YXIgYSA9IHRoaXMub3B0aW9ucy5maWx0ZXIodiA9PiB2LmFjdGl2ZSkucG9wKCk7XHJcbiAgICAgICAgaWYgKGEgIT09IHRoaXMuX2FjdGl2ZU9wdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVPcHRpb24gPSBhO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBhID8gYS52YWx1ZSA6IG51bGw7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0ID0gYSA/IGEudGV4dCA6IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMub25vcHRpb25jaGFuZ2VkKHsgdmFsdWU6IHZhbHVlLCB0ZXh0OiB0ZXh0IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uS2V5KCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmKHRoaXMucmVhZE9ubHkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgc3dpdGNoICgkZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDM3OlxyXG4gICAgICAgICAgICBjYXNlIDM4OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlKC0xKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAzOTpcclxuICAgICAgICAgICAgY2FzZSA0MDpcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZSgxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1vdmUoZGlyZWN0aW9uOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG5ld2luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5vcHRpb25zLmxlbmd0aCAtIDEsIHRoaXMub3B0aW9ucy5pbmRleE9mKHRoaXMuX2FjdGl2ZU9wdGlvbikgKyBkaXJlY3Rpb24pKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnNbbmV3aW5kZXhdLm5vdGFsbG93ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wdGlvbnNbbmV3aW5kZXhdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbm9wdGlvbmNoYW5nZWQoeyB2YWx1ZTogdGhpcy52YWx1ZSwgdGV4dDogdGhpcy5vcHRpb25zW25ld2luZGV4XS50ZXh0IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBcInJhZGlvYmFyb3B0aW9uXCIsXHJcbiAgICBjb250cm9sbGVyQXM6IFwiYmFyb3B0aW9uXCIsXHJcbiAgICByZXF1aXJlOiB7XHJcbiAgICAgICAgcmFkaW9CYXI6IFwiXnJhZGlvYmFyXCJcclxuICAgIH0sXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJyYWRpb2Jhcm9wdGlvbiB7e2Jhcm9wdGlvbi52YWx1ZX19IG5nLWNsYXNzOntyZWFkb25seTpiYXJvcHRpb24ucmVhZE9ubHksIG5vdGFsbG93ZWQ6YmFyb3B0aW9uLm5vdGFsbG93ZWR9XCIgbmctY2xpY2s9XCJiYXJvcHRpb24uY2xpY2soKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0cGFydFwiPnt7YmFyb3B0aW9uLnRleHR9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWdwYXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWRpdlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwLXBvcHVwLWRlbGF5PVwiMjAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpYi10b29sdGlwPVwie3tiYXJvcHRpb24uaGludH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtY2xhc3M9XCJjdXN0b21Ub29sdGlwVEJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1wb3B1cC1jbG9zZS1kZWxheT1cIjUwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZy1oaWRlPVwiYmFyb3B0aW9uLm5vdGFsbG93ZWRcIiBjbGFzcz1cImtub2Ige3tiYXJvcHRpb24uYWN0aXZlY29sb3J9fSBuZy1jbGFzczp7YWN0aXZlOmJhcm9wdGlvbi5hY3RpdmV9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+YFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhck9wdGlvbiB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6Ym9vbGVhbjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyRzY29wZScpICRzY29wZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlY29sb3IgPSB0aGlzLmFjdGl2ZWNvbG9yIHx8IFwiZ3JleVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xpY2soKXtcclxuICAgICAgICBpZighdGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlICYmICF0aGlzLm5vdGFsbG93ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmFkaW9CYXI6IFJhZGlvQmFyO1xyXG4gICAgcHVibGljIGdldCByYWRpb0JhcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmFkaW9CYXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCByYWRpb0JhcihiOiBSYWRpb0Jhcikge1xyXG4gICAgICAgIHRoaXMuX3JhZGlvQmFyID0gYjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJG9uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmFkaW9CYXIpXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlZCA9IHRoaXMuX3JhZGlvQmFyLmFkZE9wdGlvbih0aGlzKTtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuaGludClcclxuICAgICAgICAgICAgdGhpcy5oaW50ID0gJyc7IC8vIHRoaXMudGV4dFxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWN0aXZlQ2hhbmdlZDogKHNlbmRlcjogQmFyT3B0aW9uLCB2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcclxuICAgIHByaXZhdGUgb25BY3RpdmVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUNoYW5nZWQpXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlZCh0aGlzLCB0aGlzLmFjdGl2ZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9hY3RpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgYWN0aXZlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFyIGEgPSB0aGlzLmFjdGl2ZTtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gKDxhbnk+dmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogISF2YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSAhPT0gYSlcclxuICAgICAgICAgICAgICAgIHRoaXMub25BY3RpdmVDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYW55O1xyXG4gICAgQElucHV0KCkgcHVibGljIHRleHQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoaW50OiBzdHJpbmc7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGxhYmVsYmVoaW5kOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIG5vdGFsbG93ZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aXZlY29sb3I6IHN0cmluZztcclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgQXR0cmlidXRlLCBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogJ3JhZGlvYnV0dG9ucycsXHJcbiAgICB0cmFuc2NsdWRlOiB0cnVlLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IHRhYmluZGV4PVwiMFwiIGNsYXNzPVwicmFkaW9idXR0b25zIG5nLWNsYXNzOntyZWFkb25seTokY3RybC5yZWFkT25seX1cIiBuZy1rZXlkb3duPVwiJGN0cmwub25LZXkoJGV2ZW50KVwiID48L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYWRpb0J1dHRvbnMge1xyXG5cclxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZTtcclxuICAgIHByaXZhdGUgX3RyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbjtcclxuICAgIHByaXZhdGUgX2luaXRpYWxpemVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwcml2YXRlIF9yZWFkT25seTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXQgcmVhZE9ubHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCByZWFkT25seShyZWFkT25seTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHk7XHJcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKG8gPT4gby5yZWFkT25seSA9IHRoaXMucmVhZE9ubHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyRlbGVtZW50JykgcHJpdmF0ZSAkZWxlbWVudDogYW5ndWxhci5JUm9vdEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR0cmFuc2NsdWRlJykgJHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvblxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9ICRlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuX3RyYW5zY2x1ZGUgPSAkdHJhbnNjbHVkZTtcclxuICAgICAgICB0aGlzLmluaXRUcmFuc2NsdWRlKHRoaXMuX3RyYW5zY2x1ZGUsIHRoaXMuX2VsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRUcmFuc2NsdWRlKHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbiwgZWxlbWVudDogYW5ndWxhci5JUm9vdEVsZW1lbnRTZXJ2aWNlKSB7XHJcbiAgICAgICAgdHJhbnNjbHVkZSgoZSwgcykgPT5cclxuICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbigpLmFwcGVuZChlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRPcHRpb24ob3B0aW9uOiBPcHRpb24pOiAoc2VuZGVyOiBPcHRpb24sIHZhbHVlOiBib29sZWFuKSA9PiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuY29uY2F0KG9wdGlvbik7XHJcbiAgICAgICAgb3B0aW9uLnJlYWRPbmx5ID0gdGhpcy5yZWFkT25seTtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb25WYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi52YWx1ZSA9PSB0aGlzLmFjdGl2ZU9wdGlvblZhbHVlKVxyXG4gICAgICAgICAgICBvcHRpb24uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gKHMsIHYpID0+IHtcclxuICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIobyA9PiBvICE9IHMpLmZvckVhY2gobyA9PiBvLmFjdGl2ZSA9IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uVmFsdWUgPSBzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0FjdGl2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9ub3B0aW9uY2hhbmdlZDogKGFyZ3M6IHsgZ3JvdXA6IHN0cmluZywgdmFsdWU6IGFueSwgdGV4dDogc3RyaW5nIH0pID0+IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGdldCBvcHRpb25zKCk6IE9wdGlvbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IE9wdGlvbltdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUuZmlsdGVyKG8gPT4gby5hY3RpdmUpLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlLmZpbHRlcihvID0+IG8uYWN0aXZlKS5zbGljZSgxKS5mb3JFYWNoKG8gPT4gby5hY3RpdmUgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGVja0FjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlT3B0aW9uID8gdGhpcy5fYWN0aXZlT3B0aW9uLnZhbHVlIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkICYmIHZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBvID0gdGhpcy5vcHRpb25zLmZpbHRlcihvcCA9PiBvcC52YWx1ZSA9PSB2YWwpO1xyXG4gICAgICAgICAgICBpZiAoby5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIob3AgPT4gb3AudmFsdWUgIT0gdmFsKS5mb3JFYWNoKG8gPT4gby5hY3RpdmUgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBvWzBdLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlT3B0aW9uICE9PSBvWzBdKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZU9wdGlvbiA9IG9bMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblZhbHVlID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uS2V5KCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc3dpdGNoICgkZXZlbnQua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDM3OlxyXG4gICAgICAgICAgICBjYXNlIDM4OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlKC0xKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAzOTpcclxuICAgICAgICAgICAgY2FzZSA0MDpcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZSgxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1vdmUoZGlyZWN0aW9uOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG5ld2luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5vcHRpb25zLmxlbmd0aCAtIDEsIHRoaXMub3B0aW9ucy5pbmRleE9mKHRoaXMuX2FjdGl2ZU9wdGlvbikgKyBkaXJlY3Rpb24pKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMub3B0aW9uc1tuZXdpbmRleF0udmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub25vcHRpb25jaGFuZ2VkKHsgZ3JvdXA6IHRoaXMuZ3JvdXAsIHZhbHVlOiB0aGlzLnZhbHVlLCB0ZXh0OiB0aGlzLm9wdGlvbnNbbmV3aW5kZXhdLnRleHQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ3JvdXA6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9vcHRpb25zO1xyXG5cclxuICAgIHByaXZhdGUgYWN0aXZlT3B0aW9uVmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgX2FjdGl2ZU9wdGlvbjogT3B0aW9uO1xyXG5cclxuICAgIHByaXZhdGUgY2hlY2tBY3RpdmUoKSB7XHJcbiAgICAgICAgdmFyIGEgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKHYgPT4gdi5hY3RpdmUpLnBvcCgpO1xyXG4gICAgICAgIGlmIChhICE9PSB0aGlzLl9hY3RpdmVPcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlT3B0aW9uID0gYTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gYSA/IGEudmFsdWUgOiBudWxsO1xyXG4gICAgICAgICAgICB2YXIgdGV4dCA9IGEgPyBhLnRleHQgOiBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm9ub3B0aW9uY2hhbmdlZCh7IGdyb3VwOiB0aGlzLmdyb3VwLCB2YWx1ZTogdmFsdWUsIHRleHQ6IHRleHQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogXCJyYWRpb29wdGlvblwiLFxyXG4gICAgY29udHJvbGxlckFzOiBcIm9wdGlvblwiLFxyXG4gICAgcmVxdWlyZToge1xyXG4gICAgICAgIHJhZGlvQnV0dG9uczogXCJecmFkaW9idXR0b25zXCJcclxuICAgIH0sXHJcbiAgICB0ZW1wbGF0ZTogYDxzcGFuIGNsYXNzPVwib3B0aW9uIG5nLWNsYXNzOntyZWFkb25seTpvcHRpb24ucmVhZE9ubHl9XCIgbmctY2xpY2s9XCJvcHRpb24uY2xpY2tBY3RpdmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57e29wdGlvbi5sYWJlbGJlaGluZCA/ICcnIDogb3B0aW9uLnRleHR9fTwvc3Bhbj4gICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nLWNsYXNzPVwie2FjdGl2ZTpvcHRpb24uYWN0aXZlLCBub3RhbGxvd2VkOiBvcHRpb24ubm90YWxsb3dlZH1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3tvcHRpb24ubGFiZWxiZWhpbmQgPyBvcHRpb24udGV4dCA6ICcnIH19PC9zcGFuPiAgIFxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPmBcclxufSlcclxuZXhwb3J0IGNsYXNzIE9wdGlvbiB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIF9yYWRpb0J1dHRvbnM6IFJhZGlvQnV0dG9ucztcclxuICAgIHByaXZhdGUgX2luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2V0IHJhZGlvQnV0dG9ucygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmFkaW9CdXR0b25zO1xyXG4gICAgfTtcclxuICAgIHB1YmxpYyBzZXQgcmFkaW9CdXR0b25zKGI6IFJhZGlvQnV0dG9ucykge1xyXG4gICAgICAgIHRoaXMuX3JhZGlvQnV0dG9ucyA9IGI7XHJcbiAgICB9O1xyXG4gICAgY29uc3RydWN0b3IoIEBJbmplY3QoJyRzY29wZScpICRzY29wZSkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKVxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNoYW5nZWQgPSB0aGlzLnJhZGlvQnV0dG9ucy5hZGRPcHRpb24odGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhY3RpdmVDaGFuZ2VkOiAoc2VuZGVyOiBPcHRpb24sIHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xyXG4gICAgcHJpdmF0ZSBvbkFjdGl2ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2hhbmdlZClcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2VkKHRoaXMsIHRoaXMuYWN0aXZlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2FjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gKHZhbHVlID09PSBmYWxzZSA/IGZhbHNlIDogISF2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGlja0FjdGl2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHZhciBhID0gdGhpcy5fYWN0aXZlO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlICE9PSBhKVxyXG4gICAgICAgICAgICB0aGlzLm9uQWN0aXZlQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYW55O1xyXG4gICAgQElucHV0KCkgcHVibGljIHRleHQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbGJlaGluZDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBub3RhbGxvd2VkOiBib29sZWFuO1xyXG59Iiwi77u/aW1wb3J0IHsgRklRQXNzaXN0ICB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBBdHRyaWJ1dGUsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAncm9vbWRpdmlkZXInLFxyXG4gICAgdHJhbnNjbHVkZTogdHJ1ZSxcclxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInJvb21kaXZpZGVyXCI+XHJcbiAgICAgICAgICAgICAgIDwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvb21EaXZpZGVyIHtcclxuXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2U7XHJcbiAgICBwcml2YXRlIF90cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIF9pbml0aWFsaXplZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJGVsZW1lbnQnKSBwcml2YXRlICRlbGVtZW50OiBhbmd1bGFyLklSb290RWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHRyYW5zY2x1ZGUnKSAkdHJhbnNjbHVkZTogYW5ndWxhci5JVHJhbnNjbHVkZUZ1bmN0aW9uXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLl9lbGVtZW50ID0gJGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNjbHVkZSA9ICR0cmFuc2NsdWRlO1xyXG4gICAgICAgIHRoaXMuaW5pdFRyYW5zY2x1ZGUodGhpcy5fdHJhbnNjbHVkZSwgdGhpcy5fZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgbWF4cGVyY3RvcDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgbWF4cGVyY2JvdHRvbTogbnVtYmVyO1xyXG5cclxuICAgIGluaXRUcmFuc2NsdWRlKHRyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbiwgZWxlbWVudDogYW5ndWxhci5JUm9vdEVsZW1lbnRTZXJ2aWNlKSB7XHJcbiAgICAgICAgdmFyIGluZGV4ID0gMTtcclxuICAgICAgICB0cmFuc2NsdWRlKChlLCBzKSA9PiB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChlLCB4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpdkVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBkaXZFbC5jbGFzc0xpc3QuYWRkKFwiZGl2aXNpb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZGl2RWwuY2xhc3NMaXN0LmFkZChcImRpdmlzaW9uLVwiICsgaW5kZXgrKyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KGRpdkVsKS5hcHBlbmQoeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbigpLmFwcGVuZChkaXZFbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyAkb25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbi8vICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2l6ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5tYXhwZXJjdG9wICYmIHRoaXMubWF4cGVyY2JvdHRvbSkge1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbigpWzBdO1xyXG4gICAgICAgICAgICB2YXIgdG90YWwgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICB2YXIgbWF4aGVpZ2h0MSA9IHRoaXMubWF4cGVyY3RvcCAqIHRvdGFsIC8gMTAwO1xyXG4gICAgICAgICAgICB2YXIgbWF4aGVpZ2h0MiA9IHRoaXMubWF4cGVyY2JvdHRvbSAqIHRvdGFsIC8gMTAwO1xyXG5cclxuICAgICAgICAgICAgdmFyIGVsMSA9IHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oKS5jaGlsZHJlbigpWzBdO1xyXG4gICAgICAgICAgICB2YXIgZWwyID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbigpLmNoaWxkcmVuKClbMV07XHJcblxyXG4gICAgICAgICAgICBlbDEuc3R5bGUubWF4SGVpZ2h0ID0gbWF4aGVpZ2h0MSArIFwicHhcIjtcclxuICAgICAgICAgICAgZWwyLnN0eWxlLm1heEhlaWdodCA9IG1heGhlaWdodDIgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgQXR0cmlidXRlLCBJbnB1dCwgT3V0cHV0LCBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2NhY2hlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdzY29yZWJveCcsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgdGFiaW5kZXg9XCIwXCIgbmcta2V5ZG93bj1cIiRjdHJsLm9uS2V5KCRldmVudClcIiBjbGFzcz1cInNjb3JlYm94IGxldmVsLXt7JGN0cmwubGV2ZWx9fSBuZy1jbGFzczp7J2xvYWRpbmcnOiRjdHJsLmxvYWRpbmd9XCIgbmctY2xpY2s9XCIkY3RybC5jbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIHRvb2x0aXAtcG9wdXAtZGVsYXk9XCI1MDBcIiB0b29sdGlwLXBsYWNlbWVudD1cImJvdHRvbVwiIHVpYi10b29sdGlwPVwie3skY3RybC5oaW50fX1cIiB0b29sdGlwLWNsYXNzPVwiY3VzdG9tVG9vbHRpcFRCXCIgdG9vbHRpcC1wb3B1cC1jbG9zZS1kZWxheT0nNTAwJz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjb3JlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIG5nLWlmPVwiISRjdHJsLmxvYWRpbmdcIj57eyRjdHJsLl9zY29yZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBuZy1pZj1cIiRjdHJsLmxvYWRpbmdcIiBjbGFzcz1cInNwaW5uZXJGb3JTY29yZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gbmctaGlkZT1cIiRjdHJsLmNvbXBhY3RcIiBjbGFzcz1cImZlYXR1cmVcIj57eyRjdHJsLmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YXJnZXQgaWNvbi1zZWFyY2hcIj48c3BhbiBjbGFzcz1cInBhdGgxXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwicGF0aDJcIj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTY29yZUJveCB7XHJcbiAgICBwcml2YXRlIF9zY29yZTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBfbGV2ZWw6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgc2NvcmUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcmU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNjb3JlKHZhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQgJiYgdmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRoaXMuX3Njb3JlID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IGxldmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xldmVsO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBsZXZlbCh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIHZhbClcclxuICAgICAgICAgICAgdGhpcy5fbGV2ZWwgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoaW50OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY29tcGFjdDogYm9vbGVhbjtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgc3RvcmVpZDogc3RyaW5nO1xyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25jbGlja2VkOiAoYXJnczogeyBzb3VyY2U6IFNjb3JlQm94IH0pID0+IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGNsaWNrKGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCkge1xyXG4gICAgICAgIHRoaXMub25jbGlja2VkKHsgc291cmNlOiB0aGlzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RvcmVpZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zY29yZSA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldFZhbHVlPG51bWJlcj4oXCJzY29yZWJveC5cIiArIHRoaXMuc3RvcmVpZCArIFwiLnNjb3JlXCIpIHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMuX2xldmVsID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0VmFsdWU8c3RyaW5nPihcInNjb3JlYm94LlwiICsgdGhpcy5zdG9yZWlkICsgXCIubGV2ZWxcIikgfHwgXCJub25lXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zY29yZSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuX2xldmVsID0gJ25vbmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJG9uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdG9yZWlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldFZhbHVlPG51bWJlcj4oXCJzY29yZWJveC5cIiArIHRoaXMuc3RvcmVpZCArIFwiLnNjb3JlXCIsIHRoaXMuc2NvcmUpO1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlU2VydmljZS5zZXRWYWx1ZTxzdHJpbmc+KFwic2NvcmVib3guXCIgKyB0aGlzLnN0b3JlaWQgKyBcIi5sZXZlbFwiLCB0aGlzLmxldmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbktleSgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKCRldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgIGNhc2UgMzI6XHJcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25jbGlja2VkKHsgc291cmNlOiB0aGlzIH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgIH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEF0dHJpYnV0ZSwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICdzZWN0aW9uJyxcclxuICAgIHRyYW5zY2x1ZGU6IGZhbHNlLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgIDxkaXY+VGhpcyBpcyB0aGUgaGVhZGVyIHdob3NlIGhlaWdodCBpcyB1bmtub3duPC9kaXY+XHJcbiAgICAgICAgPHRleHRhcmVhPjwvdGV4dGFyZWE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm91dGVyLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubmVyLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlRoaXMgaXMgdGhlIHNjcm9sbGFibGUgY29udGVudCB3aG9zZSBoZWlnaHQgaXMgdW5rbm93bjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+VGhpcyBpcyB0aGUgc2Nyb2xsYWJsZSBjb250ZW50IHdob3NlIGhlaWdodCBpcyB1bmtub3duPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5UaGlzIGlzIHRoZSBzY3JvbGxhYmxlIGNvbnRlbnQgd2hvc2UgaGVpZ2h0IGlzIHVua25vd248L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlRoaXMgaXMgdGhlIHNjcm9sbGFibGUgY29udGVudCB3aG9zZSBoZWlnaHQgaXMgdW5rbm93bjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93IGhlYWRlclwiPlxyXG4gICAgICAgICA8ZGl2PlRoaXMgaXMgdGhlIGhlYWRlciB3aG9zZSBoZWlnaHQgaXMgdW5rbm93bjwvZGl2PlxyXG4gICAgICAgIDx0ZXh0YXJlYT48L3RleHRhcmVhPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlY3Rpb24ge1xyXG5cclxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZTtcclxuICAgIHByaXZhdGUgX3RyYW5zY2x1ZGU6IGFuZ3VsYXIuSVRyYW5zY2x1ZGVGdW5jdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckdHJhbnNjbHVkZScpICR0cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb25cclxuICAgICkge1xyXG4gICAgICAgIC8vdGhpcy5fZWxlbWVudCA9ICRlbGVtZW50O1xyXG4gICAgICAgIC8vdGhpcy5fdHJhbnNjbHVkZSA9ICR0cmFuc2NsdWRlO1xyXG4gICAgICAgIC8vdGhpcy5pbml0VHJhbnNjbHVkZSh0aGlzLl90cmFuc2NsdWRlLCB0aGlzLl9lbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0VHJhbnNjbHVkZSh0cmFuc2NsdWRlOiBhbmd1bGFyLklUcmFuc2NsdWRlRnVuY3Rpb24sIGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSkge1xyXG4gICAgICAgIHRyYW5zY2x1ZGUoKGUsIHMpID0+XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4oKS5hcHBlbmQoZSkpO1xyXG4gICAgfVxyXG5cclxufSIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBCaW5kaW5nLCBBdHRyaWJ1dGUsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBLZXlDb2RlcywgS2V5Ym9hcmRFdmVudENvZGUgfSBmcm9tIFwiQGZpcWFzL3V0aWxzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6ICd0ZXh0ZWRpdGJveCcsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJ0ZXh0ZWRpdGJveGZyYW1lIHt7JGN0cmwuY2hpbGRDbGFzc2VzfX0gbmctY2xhc3M6e2NhbmRlbGV0ZTokY3RybC5jYW5kZWxldGUsIGhhc2ZvY3VzOiRjdHJsLl9oYXNGb2N1cywgJ2hhcy12YWx1ZSc6ICRjdHJsLmhhc1ZhbHVlLCBlcnJvcjogJGN0cmwuc2hvd0Vycm9yLCByZWFkb25seTokY3RybC5yZWFkT25seSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlci10ZXh0IHVuc2VsZWN0YWJsZVwiIG5nLWhpZGU9XCIkY3RybC5oYXNWYWx1ZVwiPnt7JGN0cmwuX2Rpc3BsYXllZEhpbnQgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG5nLWtleWRvd249XCIkY3RybC5vbktleSgkZXZlbnQpXCIgbmctcmVhZG9ubHk9XCIkY3RybC5yZWFkT25seVwiIHR5cGU9XCJ7eyRjdHJsLmlzcGFzc3dvcmQ/J3Bhc3N3b3JkJzondGV4dCd9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmctY2hhbmdlPVwiJGN0cmwub25DaGFuZ2UoKVwiIG5nLWZvY3VzPVwiJGN0cmwub25Gb2N1cygpO1wiIG5nLWJsdXI9XCIkY3RybC5vbkJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmctaWY9XCIhJGN0cmwubXVsdGlsaW5lXCIgY2xhc3M9XCJ0ZXh0ZWRpdGJveFwiIG5nLW1vZGVsPVwiJGN0cmwudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nLW1vZGVsLW9wdGlvbnM9XCJ7IGRlYm91bmNlOiB7ICdkZWZhdWx0JzogJGN0cmwuZGVib3VuY2UsICdibHVyJzowIH19XCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIG5nLXJlYWRvbmx5PVwiJGN0cmwucmVhZE9ubHlcIiBuZy1jaGFuZ2U9XCIkY3RybC5vbkNoYW5nZSgpXCIgbmctZm9jdXM9XCIkY3RybC5vbkZvY3VzKCk7XCIgbmctYmx1cj1cIiRjdHJsLm9uQmx1cigpXCJcclxuICAgICAgICAgICAgICAgICAgICBuZy1pZj1cIiRjdHJsLm11bHRpbGluZVwiIGNsYXNzPVwidGV4dGVkaXRhcmVhXCIgcGxhY2Vob2xkZXI9XCJ7eyRjdHJsLl9kaXNwbGF5ZWRIaW50IHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nLW1vZGVsPVwiJGN0cmwudmFsdWVcIiBuZy1tb2RlbC1vcHRpb25zPVwieyBkZWJvdW5jZTogeyAnZGVmYXVsdCc6ICRjdHJsLmRlYm91bmNlLCAnYmx1cic6MCB9fVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hbmRhdG9yeS1kb3RcIiBuZy1pZj1cIiRjdHJsLm1hbmRhdG9yeVwiIHVpYi10b29sdGlwPVwie3snRklFTERfUkVRVUlSRURfVE9PTFRJUCcgfCB0cmFuc2xhdGV9fVwiIHRvb2x0aXAtcGxhY2VtZW50PVwidG9wXCIgdG9vbHRpcC1jbGFzcz1cImN1c3RvbVRvb2x0aXBUQlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmctY2xpY2s9XCIkY3RybC5DbGVhckZpZWxkKClcIiBjbGFzcz1cImNsZWFyZmllbGQtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1jbGVhckZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRFZGl0Qm94IHtcclxuICAgIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF9oaW50OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF9kaXNwbGF5ZWRIaW50OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF9oYXNGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB3YXNGb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9kaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdGltZW91dCcpIHByaXZhdGUgJHRpbWVvdXQ6IG5nLklUaW1lb3V0U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IGhhc1ZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZSAhPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3ZhbHVlICE9PSBcIlwiICYmIHRoaXMuX3ZhbHVlICE9PSBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBzaG93RXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFuZGF0b3J5ICYmICgoIXRoaXMuX2hhc0ZvY3VzICYmIHRoaXMud2FzRm9jdXNlZCAmJiAhdGhpcy5oYXNWYWx1ZSkgfHwgKCF0aGlzLl9oYXNGb2N1cyAmJiB0aGlzLmlzZXJyb3IpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGlsZENsYXNzZXM7XHJcbiAgICBAQXR0cmlidXRlKCkgcHVibGljIGdldCBjaGlsZENsYXNzZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkQ2xhc3NlcztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgY2hpbGRDbGFzc2VzKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRDbGFzc2VzID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX21hbmRhdG9yeTtcclxuICAgIEBBdHRyaWJ1dGUoKSBwdWJsaWMgZ2V0IG1hbmRhdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWFuZGF0b3J5O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBtYW5kYXRvcnkodmFsOiBib29sZWFuIHwgc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbWFuZGF0b3J5ID0gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gXCJ0cnVlXCI7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aXZlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbCAhPSB0aGlzLl92YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoYW5nZW9uYmx1cikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoeyB2YWx1ZTogdGhpcy5fdmFsdWUgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgaGludCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oaW50O1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBoaW50KHRoZUhpbnQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2hpbnQgPSB0aGVIaW50O1xyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXllZEhpbnQgPSB0aGlzLl9oYXNGb2N1cyA/ICcnIDogdGhpcy5faGludDtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlsaW5lOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzaW5wdXQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FuZGVsZXRlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGlzcGFzc3dvcmQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNlcnJvcjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjaGFuZ2VvbmJsdXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZGVib3VuY2U6IG51bWJlciA9IDA7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZUNoYW5nZWQ6IChhcmdzOiB7IHZhbHVlOiBzdHJpbmcgfSkgPT4gdm9pZDtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgdmFsdWVTdWJtaXQ6IChhcmdzOiB7IHZhbHVlOiBzdHJpbmcgfSkgPT4gdm9pZDtcclxuXHJcbiAgICBwcml2YXRlIG9uS2V5KCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIC8vIFRvRG8gKEJaKTogYmUgYXdhcmUgdGhlcmUgYXJlIG11bHRpcGxlIHdheXMgaG93IGNoYW5nZXMgYXJlIGRldGVjdGVkIGFuZCAnYnJvYWRjYXN0ZWQnLlxyXG4gICAgICAgIC8vIFRoZSB0ZXN0IGZvciB0aGlzLnZhbHVlU3VibWl0IGlzIGFsd2F5cyB0cnVlLlxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlU3VibWl0ICYmICgkZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMuZW50ZXIgfHwgJGV2ZW50LmNvZGUgPT09IEtleWJvYXJkRXZlbnRDb2RlLmVudGVyKSkge1xyXG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVN1Ym1pdCh7dmFsdWU6IHRoaXMuX3ZhbHVlfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Gb2N1cygpIHtcclxuICAgICAgICB0aGlzLl9oYXNGb2N1cyA9IHRoaXMud2FzRm9jdXNlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5faGFzRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzVmFsdWUpXHJcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEhpbnQgPSB0aGlzLl9oaW50O1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlb25ibHVyICYmIHRoaXMuX2RpcnR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKHsgdmFsdWU6IHRoaXMuX3ZhbHVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZW9uYmx1cikge1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoeyB2YWx1ZTogdGhpcy5fdmFsdWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jICRwb3N0TGluaygpIHtcclxuICAgICAgICBpZiAodGhpcy5mb2N1c2lucHV0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuJHRpbWVvdXQoMjUpO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzRmllbGQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb2N1c0ZpZWxkKCkge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcclxuICAgICAgICB2YXIgZmllbGQgPSAoPGFueT5lbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5tdWx0aWxpbmUgPyAndGV4dGVkaXRhcmVhJyA6ICd0ZXh0ZWRpdGJveCcpLml0ZW0oMCkpO1xyXG4gICAgICAgIGlmIChmaWVsZClcclxuICAgICAgICAgICAgZmllbGQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgQ2xlYXJGaWVsZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSB8fCAhdGhpcy5jYW5kZWxldGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5mb2N1c0ZpZWxkKCk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSAnJztcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCh7IHZhbHVlOiB0aGlzLl92YWx1ZSB9KTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IElQYXJlbnQsIElNZWRpYXRvciwgSU1lZGlhdGVkQ2hpbGQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9JUGFyZW50Q2hpbGRcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBBdHRyaWJ1dGUsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiAndG9nZ2xlc3dpdGNoJyxcclxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInRvZ2dsZXN3aXRjaCBuZy1jbGFzczp7aGFzZm9jdXM6JGN0cmwuaGFzZm9jdXMsIHJlYWRvbmx5OiRjdHJsLnJlYWRPbmx5fVwiIHRhYmluZGV4PVwie3skY3RybC50YWJJbmRleCB8fCAwfX1cIlxyXG4gICAgICAgICAgICAgICAgbmcta2V5ZG93bj1cIiRjdHJsLm9uS2V5ZG93bigkZXZlbnQpXCIgbmctbW91c2Vkb3duPVwiJGN0cmwudG9nZ2xlKCRldmVudClcIiBuZy1mb2N1cz1cIiRjdHJsLm9uRm9jdXMoKVwiIG5nLWJsdXI9XCIkY3RybC5vbkJsdXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3skY3RybC5zd2l0Y2hDbGFzc319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGF0aDFcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJwYXRoMlwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInBhdGgzXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwicGF0aDRcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJwYXRoNVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2dnbGVzd2l0Y2ggaW1wbGVtZW50cyBJTWVkaWF0ZWRDaGlsZCB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaWdub3JlS2V5czogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckZWxlbWVudCcpIHByaXZhdGUgJGVsZW1lbnQ6IGFuZ3VsYXIuSVJvb3RFbGVtZW50U2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckcm9vdFNjb3BlJykgcHJpdmF0ZSAkcm9vdFNjb3BlOiBhbmd1bGFyLklSb290U2NvcGVTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJG9uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy4kcm9vdFNjb3BlLiRvbignZXZlbnRDbGVhcmVkJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiRlbGVtZW50WzBdLmNsYXNzTGlzdC5jb250YWlucygnbXktc2VydmljZS1jYXNlcycpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgdGFiSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIF9wYXJlbnQ6IElQYXJlbnQgPSBudWxsO1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgcGFyZW50KHZhbHVlOiBJUGFyZW50KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdGhpcy5wYXJlbnQgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5hZGRDaGlsZCh0aGlzKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX21lZGlhdG9yKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVkaWF0b3IucGFyZW50ID0gdGhpcy5fcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgcGFyZW50KCk6IElQYXJlbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbWVkaWF0b3I6IElNZWRpYXRvciA9IG51bGw7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBtZWRpYXRvcih2YWx1ZTogSU1lZGlhdG9yKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdGhpcy5fbWVkaWF0b3IgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lZGlhdG9yID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX21lZGlhdG9yLmNoaWxkID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudClcclxuICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhdG9yLnBhcmVudCA9IHRoaXMuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IG1lZGlhdG9yKCk6IElNZWRpYXRvciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc3dpdGNoQ2xhc3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIGBpY29uLWNoZWNrYm94JHt0aGlzLmFjdGl2ZSA/ICdPTicgOiB0aGlzLnJlYWRPbmx5ID8gJ0RJUycgOiAnT0ZGJ30ke3RoaXMuaGFzZm9jdXMgJiYgIXRoaXMucmVhZE9ubHkgPyAnLUZvY3VzJyA6ICcnfWA7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGtleTogYW55O1xyXG5cclxuICAgIHByaXZhdGUgX2FjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ2V0IGFjdGl2ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBhY3RpdmUodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLl9hY3RpdmU7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gISF2YWw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkICYmIHYgIT09IHZhbClcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVjaGFuZ2VkKHsgc291cmNlOiB0aGlzLCBhY3RpdmU6IHZhbCB9KTtcclxuICAgIH1cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgYWN0aXZlY2hhbmdlZDogKGFyZ3M6IHsgc291cmNlOiBUb2dnbGVzd2l0Y2gsIGFjdGl2ZTogYm9vbGVhbiB9KSA9PiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyB0b2dnbGUoJGV2ZW50OiBKUXVlcnlFdmVudE9iamVjdCB8IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzZm9jdXMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNmb2N1cyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9ICF0aGlzLmFjdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uS2V5ZG93bigkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seSB8fCB0aGlzLmlnbm9yZUtleXMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzd2l0Y2ggKCRldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCRldmVudCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMzc6XHJcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMzk6XHJcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBnZXQgaGFzZm9jdXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvY3VzO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBoYXNmb2N1cyh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5fZm9jdXMgIT09IHZhbCkge1xyXG4gICAgICAgICAgICBpZiAodmFsICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHRoaXMuJGVsZW1lbnRbMF0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcignLnRvZ2dsZXN3aXRjaCcpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZm9jdXMgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkZvY3VzKCkge1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBvbkJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5oYXNmb2N1cyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG4iLCJpbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCJcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tIFwiQGZpcWFzL3V0aWxzXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvYXBwbGljYXRpb25cIjtcclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogQXBwbGljYXRpb25TZXR0aW5nLnNlbGVjdG9yLFxyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3RcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uU2V0dGluZyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yID0gXCJhcHBsaWNhdGlvblNldHRpbmdcIjtcclxuICAgIHB1YmxpYyByZXF1aXJlID0gXCJeYXBwbGljYXRpb25cIlxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgfVxyXG4gICAgcHVibGljIGxpbmsoc2NvcGU6IG5nLklTY29wZSwgZWxlbWVudDogbmcuSUF1Z21lbnRlZEpRdWVyeSwgYXR0cnM6IG5nLklBdHRyaWJ1dGVzLCBhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbik6IHZvaWQge1xyXG4gICAgICAgIFV0aWxzLmZvckVhY2hQcm9wZXJ0eShhdHRycywgKHAsIGspID0+IGFwcGxpY2F0aW9uLlNldHRpbmdzW2tdID0gcCwgKHAsIGspID0+IGsuaW5kZXhPZihcIiRcIikgIT09IDApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiBCcm9hZGNhc3RTaXplLnNlbGVjdG9yLFxyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3RcclxufSlcclxuZXhwb3J0IGNsYXNzIEJyb2FkY2FzdFNpemUge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwiYnJvYWRjYXN0U2l6ZVwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBTaXplRXZlbnROYW1lID0gXCJzaXplRXZlbnROYW1lXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNpemVFdmVudFdhdGNoID0gXCJzaXplRXZlbnRXYXRjaFwiO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHdpbmRvdycpIHByaXZhdGUgJHdpbmRvdzogbmcuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsaW5rKHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IG5nLklBdWdtZW50ZWRKUXVlcnksIGF0dHJzOiBuZy5JQXR0cmlidXRlcyk6IHZvaWQge1xyXG4gICAgICAgIHZhciBzaXplRXZlbnROYW1lOiBzdHJpbmcgPSBhdHRyc1tCcm9hZGNhc3RTaXplLlNpemVFdmVudE5hbWVdO1xyXG4gICAgICAgIHZhciBzaXplRXZlbnROYW1lQXJnczogeyBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlciB9ID0geyBoZWlnaHQ6IC0xLCB3aWR0aDogLTEgfTtcclxuICAgICAgICBzaXplRXZlbnROYW1lQXJncy5oZWlnaHQgPSBlbGVtZW50WzBdLm9mZnNldEhlaWdodDtcclxuICAgICAgICBzaXplRXZlbnROYW1lQXJncy53aWR0aCA9IGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0VmFsdWUoYHNpemU6JHtzaXplRXZlbnROYW1lfWAsIHNpemVFdmVudE5hbWVBcmdzKTtcclxuICAgICAgICB2YXIgYWN0aW9uID0gZGlmZmVyZW5kQXJndW1lbnRzTm90VXNlZCA9PiB7XHJcbiAgICAgICAgICAgIGlmICgoc2l6ZUV2ZW50TmFtZUFyZ3MuaGVpZ2h0ICE9IGVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0IHx8IHNpemVFdmVudE5hbWVBcmdzLndpZHRoICE9IGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgpICYmICEhc2NvcGUgJiYgISFzY29wZS4kcm9vdCAmJiAhIXNjb3BlLiRyb290LiRicm9hZGNhc3QpIHtcclxuICAgICAgICAgICAgICAgIHNpemVFdmVudE5hbWVBcmdzLmhlaWdodCA9IGVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgc2l6ZUV2ZW50TmFtZUFyZ3Mud2lkdGggPSBlbGVtZW50WzBdLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgc2NvcGUuJHJvb3QuJGJyb2FkY2FzdChgc2l6ZToke3NpemVFdmVudE5hbWV9YCwgc2l6ZUV2ZW50TmFtZUFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFdBUk5JTkcgYWN0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgbmV3VmFsdWVgLCBgb2xkVmFsdWVgIGFuZCBgc2NvcGVgIGFyZ3VtZW50c1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaDxzdHJpbmc+KGF0dHJzW0Jyb2FkY2FzdFNpemUuU2l6ZUV2ZW50V2F0Y2hdLCBhY3Rpb24pO1xyXG4gICAgICAgIC8vIFdBUk5JTkcgYWN0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgd2luZG93YCwgYHZpZXdgIGFyZ3VtZW50c1xyXG4gICAgICAgIHRoaXMuJHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBhY3Rpb24pO1xyXG4gICAgICAgIGFjdGlvbihudWxsKTtcclxuICAgIH1cclxufSIsIu+7v2ltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFZhbGlkYXRlTWF4RGF0ZS5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVNYXhEYXRlIGltcGxlbWVudHMgbmcuSURpcmVjdGl2ZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yID0gXCJ2YWxpZGF0ZU1heERhdGVcIjtcclxuICAgIHB1YmxpYyByZXF1aXJlID0gXCJuZ01vZGVsXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsaW5rKHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IG5nLklBdWdtZW50ZWRKUXVlcnksIGF0dHJzOiBuZy5JQXR0cmlidXRlcywgY3RybDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIG1heERhdGU6IERhdGUgPSBudWxsO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaDxEYXRlPihhdHRyc1tWYWxpZGF0ZU1heERhdGUuc2VsZWN0b3JdLCB2YWwgPT4ge1xyXG4gICAgICAgICAgICBtYXhEYXRlID0gdmFsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGN0cmwuJHZhbGlkYXRvcnNbXCJtYXhEYXRlXCJdID0gKG1vZGVsVmFsdWU6IERhdGUsIHZpZXdWYWx1ZTogRGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIW1heERhdGUgfHwgY3RybC4kaXNFbXB0eShtb2RlbFZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZhbGlkID0gbW9kZWxWYWx1ZS5nZXRUaW1lKCkgPD0gbWF4RGF0ZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogVmFsaWRhdGVNaW5EYXRlLnNlbGVjdG9yLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVNaW5EYXRlIGltcGxlbWVudHMgbmcuSURpcmVjdGl2ZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yID0gXCJ2YWxpZGF0ZU1pbkRhdGVcIjtcclxuICAgIHB1YmxpYyByZXF1aXJlID0gXCJuZ01vZGVsXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsaW5rKHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IG5nLklBdWdtZW50ZWRKUXVlcnksIGF0dHJzOiBuZy5JQXR0cmlidXRlcywgY3RybDogbmcuSU5nTW9kZWxDb250cm9sbGVyKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIG1pbkRhdGU6IERhdGUgPSBudWxsO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaDxEYXRlPihhdHRyc1tWYWxpZGF0ZU1pbkRhdGUuc2VsZWN0b3JdLCB2YWwgPT4ge1xyXG4gICAgICAgICAgICBtaW5EYXRlID0gdmFsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGN0cmwuJHZhbGlkYXRvcnNbXCJtaW5EYXRlXCJdID0gKG1vZGVsVmFsdWU6IERhdGUsIHZpZXdWYWx1ZTogRGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIW1pbkRhdGUgfHwgY3RybC4kaXNFbXB0eShtb2RlbFZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZhbGlkID0gbWluRGF0ZS5nZXRUaW1lKCkgPD0gbW9kZWxWYWx1ZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59ICIsImltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIlxyXG5pbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgS2V5Q29kZXMsIEtleWJvYXJkRXZlbnRDb2RlIH0gZnJvbSBcIkBmaXFhcy91dGlsc1wiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ29ubHlOdW1lcmljJyxcclxuICAgIG1vZHVsZTogRklRQXNzaXN0XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPbmx5TnVtZXJpYyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIHB1YmxpYyBsaW5rKHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IG5nLklBdWdtZW50ZWRKUXVlcnksIGF0dHJzOiBuZy5JQXR0cmlidXRlcyk6IHZvaWQge1xyXG5cclxuICAgICAgICBlbGVtZW50Lm9uKCdrZXlwcmVzcycsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC53aGljaCA+PSA0OCAmJiBldmVudC53aGljaCA8PSA1N1xyXG4gICAgICAgICAgICAgICAgfHwgZXZlbnQud2hpY2ggPT09IDAgJiYgZXZlbnQuY2hhckNvZGUgPT09IDBcclxuICAgICAgICAgICAgICAgIHx8IGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGVzLmJhY2tzcGFjZVxyXG4gICAgICAgICAgICAgICAgfHwgZXZlbnQua2V5Q29kZSA9PT0gS2V5Q29kZXMuZGVsZXRlXHJcbiAgICAgICAgICAgICAgICB8fCBldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5kYXNoXHJcbiAgICAgICAgICAgICAgICB8fCBldmVudC5rZXlDb2RlID09PSBLZXlDb2Rlcy5zdWJ0cmFjdFxyXG4gICAgICAgICAgICAgICAgfHwgZXZlbnQuY29kZSA9PT0gS2V5Ym9hcmRFdmVudENvZGUuYmFja3NwYWNlXHJcbiAgICAgICAgICAgICAgICB8fCBldmVudC5jb2RlID09PSBLZXlib2FyZEV2ZW50Q29kZS5kZWxldGVcclxuICAgICAgICAgICAgICAgIHx8IGV2ZW50LmNvZGUgPT09IEtleWJvYXJkRXZlbnRDb2RlLmRhc2hcclxuICAgICAgICAgICAgICAgIHx8IGV2ZW50LmNvZGUgPT09IEtleWJvYXJkRXZlbnRDb2RlLnN1YnRyYWN0XHJcbiAgICAgICAgICAgICAgICB8fCBldmVudC5rZXkgPT09ICctJ1xyXG4gICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvIGFsbG93IG51bWJlcnNcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gdG8gc3RvcCBvdGhlcnNcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCJcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3QsIE5nVXRpbHMgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2NhY2hlXCI7XHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6IFdhdGNoU2l6ZS5TZWxlY3RvcixcclxuICAgIG1vZHVsZTogRklRQXNzaXN0XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXYXRjaFNpemUge1xyXG4gICAgcHVibGljIHN0YXRpYyBTZWxlY3RvciA9IFwid2F0Y2hTaXplXCI7XHJcbiAgICBwdWJsaWMgc3RhdGljIFNpemVFdmVudE5hbWUgPSBcInNpemVFdmVudE5hbWVcIjtcclxuICAgIHB1YmxpYyBzdGF0aWMgU2l6ZUV2ZW50SGFuZGxlciA9IFwic2l6ZUV2ZW50SGFuZGxlclwiO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHdpbmRvdycpIHByaXZhdGUgJHdpbmRvdzogbmcuSVdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJHBhcnNlJykgcHJpdmF0ZSAkcGFyc2U6IG5nLklQYXJzZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsaW5rKHNjb3BlOiBuZy5JU2NvcGUsIGVsZW1lbnQ6IG5nLklBdWdtZW50ZWRKUXVlcnksIGF0dHJzOiBuZy5JQXR0cmlidXRlcyk6IHZvaWQge1xyXG4gICAgICAgIHZhciBzaXplRXZlbnROYW1lOiBzdHJpbmcgPSBhdHRyc1tXYXRjaFNpemUuU2l6ZUV2ZW50TmFtZV07XHJcbiAgICAgICAgLy8gdmFyIHNpemVFdmVudEhhbmRsZXIgPSB0aGlzLiRwYXJzZShhdHRyc1tXYXRjaFNpemUuU2l6ZUV2ZW50SGFuZGxlcl0pO1xyXG4gICAgICAgIHZhciBzaXplRXZlbnRBcmdzOiB7IGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyIH0gPSB0aGlzLmNhY2hlU2VydmljZS5nZXRWYWx1ZTx7IGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyIH0+KGBzaXplOiR7c2l6ZUV2ZW50TmFtZX1gKTtcclxuICAgICAgICB2YXIgc2l6ZUhlYWRlckV2ZW50QXJnczogeyBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlciB9ID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0VmFsdWU8eyBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlciB9Pihgc2l6ZTpIZWFkZXJgKTtcclxuICAgICAgICB2YXIgYWN0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZUhlYWRlckV2ZW50QXJncyAmJiBzaXplRXZlbnRBcmdzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmlnaHRzcGFjZSA9IChzaXplSGVhZGVyRXZlbnRBcmdzLndpZHRoIC0gMTIwMCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNpemVFdmVudEFyZ3Mud2lkdGggPCByaWdodHNwYWNlKSBlbGVtZW50LmNzcygnbWF4LXdpZHRoJywgYDEwMCVgKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZWxlbWVudC5jc3MoJ21heC13aWR0aCcsIGBjYWxjKDEwMCUgLSAke3NpemVFdmVudEFyZ3Mud2lkdGggLSByaWdodHNwYWNlfXB4KWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjb3BlLiRyb290LiRvbihgc2l6ZToke3NpemVFdmVudE5hbWV9YCwgKGV2ZW50LCBhcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHNpemVFdmVudEFyZ3MgPSBhcmdzO1xyXG4gICAgICAgICAgICBhY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzY29wZS4kcm9vdC4kb24oYHNpemU6SGVhZGVyYCwgKGV2ZW50LCBhcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHNpemVIZWFkZXJFdmVudEFyZ3MgPSBhcmdzO1xyXG4gICAgICAgICAgICBhY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBhY3Rpb24oKTtcclxuICAgIH1cclxufSIsIu+7v2ltcG9ydCB7IEluamVjdCwgUGlwZSwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiXHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1RyYW5zbGF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25EYXRhIH0gZnJvbSBcIi4uL21vZGVscy9sb2NhbGl6YXRpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkZpbHRlciB7XHJcblxyXG4gICAgQFBpcGUoe1xyXG4gICAgICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgICAgIHNlbGVjdG9yOiAndHJhbnNsYXRlJyxcclxuICAgICAgICBwdXJlOiBmYWxzZVxyXG4gICAgfSlcclxuICAgIHB1YmxpYyBzdGF0aWMgVHJhbnNsYXRpb25GaWx0ZXIoIEBJbmplY3QoJ1RyYW5zbGF0aW9uU2VydmljZScpIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlKSB7XHJcblxyXG4gICAgICAgIHJldHVybiAoa2V5OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShrZXkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgQFBpcGUoe1xyXG4gICAgICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgICAgIHNlbGVjdG9yOiAndHJhbnNsYXRlQXZhaWxhYmxlJyxcclxuICAgICAgICBwdXJlOiBmYWxzZVxyXG4gICAgfSlcclxuICAgIHB1YmxpYyBzdGF0aWMgVHJhbnNsYXRpb25BdmFpbGFiaWxlRmlsdGVyKCBASW5qZWN0KCdUcmFuc2xhdGlvblNlcnZpY2UnKSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSkge1xyXG5cclxuICAgICAgICByZXR1cm4gKGtleTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoa2V5LCB0cnVlKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEluamVjdCwgUGlwZSwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiXHJcbmltcG9ydCB7IEZJUUFzc2lzdCAgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9UcmFuc2xhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uRGF0YSB9IGZyb20gXCIuLi9tb2RlbHMvbG9jYWxpemF0aW9uXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRmlyc3RDYXBpdGFsRmlsdGVyIHtcclxuXHJcbiAgICBAUGlwZSh7XHJcbiAgICAgICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICAgICAgc2VsZWN0b3I6ICdmaXJzdGNhcGl0YWwnLFxyXG4gICAgICAgIHB1cmU6IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgcHVibGljIHN0YXRpYyBGaXJzdENhcGl0YWxGaWx0ZXIoKSB7XHJcblxyXG4gICAgICAgIHJldHVybiAoa2V5OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKGtleS5zdWJzdHIoMCwgMSkgfHwnJykudG9VcHBlckNhc2UoKSArIChrZXkuc3Vic3RyKDEpfHwnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEluamVjdCwgUGlwZSwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiXHJcbmltcG9ydCB7IEZJUUFzc2lzdCAgfSBmcm9tIFwiLi4vYXBwXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSHRtbFRydXN0ZWQge1xyXG4gICAgICAgIEBQaXBlKHtcclxuICAgICAgICAgICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaHRtbHRydXN0ZWQnLFxyXG4gICAgICAgICAgICBwdXJlOnRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgSHRtbFRydXN0ZWQoIEBJbmplY3QgKCckc2NlJykgJHNjZTogbmcuSVNDRVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChodG1sOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoaHRtbCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICRzY2UudHJ1c3RBc0h0bWwoaHRtbCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSIsIu+7v2ltcG9ydCB7IEluamVjdCwgUGlwZSwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiXHJcbmltcG9ydCB7IEZJUUFzc2lzdCAgfSBmcm9tIFwiLi4vYXBwXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSXNvRGF0ZUZpbHRlciB7XHJcbiAgICAgICAgQFBpcGUoe1xyXG4gICAgICAgICAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgICAgICAgICAgc2VsZWN0b3I6ICdpc290b2RhdGUnLFxyXG4gICAgICAgICAgICBwdXJlOnRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgSXNvVG9EYXRlKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKGRhdGVTdHJpbmc6IHN0cmluZyk6RGF0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRlU3RyaW5nID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0ZS5wYXJzZU9yTnVsbChkYXRlU3RyaW5nKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9Iiwi77u/aW1wb3J0IHsgSW5qZWN0LCBQaXBlLCBJbmplY3RhYmxlIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCJcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvVHJhbnNsYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbkRhdGEgfSBmcm9tIFwiLi4vbW9kZWxzL2xvY2FsaXphdGlvblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIExpbmVmZWVkVG9CcmVha0ZpbHRlciB7XHJcblxyXG4gICAgQFBpcGUoe1xyXG4gICAgICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgICAgIHNlbGVjdG9yOiAnbGluZWZlZWR0b2JyZWFrJyxcclxuICAgICAgICBwdXJlOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgcHVibGljIHN0YXRpYyBMaW5lZmVlZFRvQnJlYWtGaWx0ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4gdGV4dCA/IHRleHQucmVwbGFjZSgvKD86XFxyXFxufFxccnxcXG4pL2csICc8YnIvPicpIDogXCJcIjtcclxuICAgIH1cclxufVxyXG4iLCLvu79leHBvcnQgaW50ZXJmYWNlIElMaXRlRXZlbnQ8VD4ge1xyXG4gICAgb24oaGFuZGxlcjogeyAoZGF0YT86IFQpOiB2b2lkIH0pOiB2b2lkO1xyXG4gICAgb2ZmKGhhbmRsZXI6IHsgKGRhdGE/OiBUKTogdm9pZCB9KTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpdGVFdmVudDxUPiBpbXBsZW1lbnRzIElMaXRlRXZlbnQ8VD4ge1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVyczogeyAoZGF0YT86IFQpOiB2b2lkOyB9W10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgb24oaGFuZGxlcjogeyAoZGF0YT86IFQpOiB2b2lkIH0pIHtcclxuICAgICAgICB0aGlzLmhhbmRsZXJzLnB1c2goaGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9mZihoYW5kbGVyOiB7IChkYXRhPzogVCk6IHZvaWQgfSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzLmZpbHRlcihoID0+IGggIT09IGhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0cmlnZ2VyKGRhdGE/OiBUKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVycy5zbGljZSgwKS5mb3JFYWNoKGggPT4gaChkYXRhKSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgV2ViTGluaywgSFRUUE1ldGhvZCB9IGZyb20gXCIuLi9tb2RlbHMvYmFzZVwiXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGcXNSZXN1bHQge1xyXG4gICAgX2VtYmVkZGVkOiBJSWRlbnRpZmlhYmxlW107XHJcbiAgICBfYWN0aW9ucz86IHsgW2dyb3VwbmFtZTogc3RyaW5nXTogeyBbbmFtZTogc3RyaW5nXTogeyBocmVmOiBzdHJpbmcsIG1ldGhvZD86IEhUVFBNZXRob2QgfSB9IH07XHJcbiAgICBfY3VyaWVzOiB7IG5hbWU6IHN0cmluZywgaHJlZjogc3RyaW5nIH1bXTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uTGlua0FjdGlvbjxULCBELCBQPiA9IChkYXRhPzogRCwgdXJscGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBQIH0pID0+IG5nLklQcm9taXNlPFQ+O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSWRlbnRpdHlMaW5rIGV4dGVuZHMgV2ViTGluayB7XHJcbiAgICBmdWxsSHJlZjogc3RyaW5nO1xyXG4gICAgZXF1YWxzKGxpbms6IFdlYkxpbmspOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZXNvdXJjZUxpbmsgZXh0ZW5kcyBJSWRlbnRpdHlMaW5rIHtcclxuICAgIHJlZjogc3RyaW5nO1xyXG4gICAgX3JlZjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElJZGVudGlmaWFibGUge1xyXG4gICAgaWQ6IElJZGVudGl0eUxpbms7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJUmVzb3VyY2UgZXh0ZW5kcyBJSWRlbnRpZmlhYmxlIHtcclxuICAgIGlkOiBJUmVzb3VyY2VMaW5rO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElJZGVudGl0eVJlc29sdmVyPFQ+IGV4dGVuZHMgSUlkZW50aXR5TGluayB7XHJcbiAgICB2YWx1ZTogYW5ndWxhci5JUHJvbWlzZTxUICYgSUlkZW50aWZpYWJsZT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlc291cmNlUmVzb2x2ZXI8VD4gZXh0ZW5kcyBJSWRlbnRpdHlSZXNvbHZlcjxUPiwgSVJlc291cmNlTGluayB7XHJcbiAgICB2YWx1ZTogYW5ndWxhci5JUHJvbWlzZTxUICYgSVJlc291cmNlPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSWRlbnRpZmlhYmxlT2Y8VD4gZXh0ZW5kcyBJSWRlbnRpZmlhYmxlIHtcclxuICAgIGlkOiBJSWRlbnRpdHlSZXNvbHZlcjxUPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVzb3VyY2VPZjxUPiBleHRlbmRzIElJZGVudGlmaWFibGVPZjxUPiwgSVJlc291cmNlIHtcclxuICAgIGlkOiBJUmVzb3VyY2VSZXNvbHZlcjxUPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvbiBleHRlbmRzIElJZGVudGlmaWFibGUge1xyXG4gICAgaXRlbXM6IGFueVtdXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUlkZW50aWZpYWJsZUNvbGxlY3Rpb25PZjxUPiBleHRlbmRzIElJZGVudGlmaWFibGVDb2xsZWN0aW9uIHtcclxuICAgIGl0ZW1zOiBUW11cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uIGV4dGVuZHMgSUlkZW50aWZpYWJsZUNvbGxlY3Rpb24ge1xyXG4gICAgcGFnZTogbnVtYmVyXHJcbiAgICBwYWdlQ291bnQ/OiBudW1iZXJcclxuICAgIHByZXY/OiBJSWRlbnRpdHlMaW5rXHJcbiAgICBuZXh0PzogSUlkZW50aXR5TGlua1xyXG4gICAgZmlyc3Q/OiBJSWRlbnRpdHlMaW5rXHJcbiAgICBsYXN0PzogSUlkZW50aXR5TGlua1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb25PZjxUPiBleHRlbmRzIElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2Y8VD4sIElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb24ge1xyXG4gICAgaXRlbXM6IFRbXVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25SZXN1bHQ8VD4gZXh0ZW5kcyBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvbk9mPFQ+IHtcclxuICAgIHBhZ2U6IG51bWJlcjtcclxuICAgIHBhZ2VDb3VudDogbnVtYmVyO1xyXG4gICAgY291bnQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSUlkZW50aWZpYWJsZUNvbGxlY3Rpb25Qcm9wZXJ0eSA9IElJZGVudGlmaWFibGVDb2xsZWN0aW9uIHwgSUlkZW50aXR5UmVzb2x2ZXI8SUlkZW50aWZpYWJsZUNvbGxlY3Rpb24+XHJcblxyXG5leHBvcnQgdHlwZSBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvblByb3BlcnR5T2Y8VD4gPSBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvbk9mPFQ+IHwgSUlkZW50aXR5UmVzb2x2ZXI8SUlkZW50aWZpYWJsZUNvbGxlY3Rpb25PZjxUPj5cclxuXHJcbmV4cG9ydCB0eXBlIElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb25Qcm9wZXJ0eSA9IElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb24gfCBJSWRlbnRpdHlSZXNvbHZlcjxJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgSUlkZW50aWZpYWJsZVBhZ2VkQ29sbGVjdGlvblByb3BlcnR5T2Y8VD4gPSBJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uT2Y8VD4gfCBJSWRlbnRpdHlSZXNvbHZlcjxJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uT2Y8VD4+XHJcblxyXG4iLCLvu79leHBvcnQgaW50ZXJmYWNlIElMaXRlRXZlbnQ8VD4ge1xyXG4gICAgb24oaGFuZGxlcjogeyAoZGF0YT86IFQpOiB2b2lkIH0pOiB2b2lkO1xyXG4gICAgb2ZmKGhhbmRsZXI6IHsgKGRhdGE/OiBUKTogdm9pZCB9KTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpdGVFdmVudDxUPiBpbXBsZW1lbnRzIElMaXRlRXZlbnQ8VD4ge1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVyczogeyAoZGF0YT86IFQpOiB2b2lkOyB9W10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgb24oaGFuZGxlcjogeyAoZGF0YT86IFQpOiB2b2lkIH0pIHtcclxuICAgICAgICB0aGlzLmhhbmRsZXJzLnB1c2goaGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9mZihoYW5kbGVyOiB7IChkYXRhPzogVCk6IHZvaWQgfSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzLmZpbHRlcihoID0+IGggIT09IGhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0cmlnZ2VyKGRhdGE/OiBUKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVycy5zbGljZSgwKS5mb3JFYWNoKGggPT4gaChkYXRhKSk7XHJcbiAgICB9XHJcbn0iLCLvu79pbXBvcnQgXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgSVJlc291cmNlT2YgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pRnFzXCJcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxhaW50IGV4dGVuZHMgSVJlc291cmNlT2Y8Q29tcGxhaW50PiwgQ29tcGxhaW50RGF0YSB7IH1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxhaW50RGF0YSB7XHJcbiAgICBDb250ZW50OiBzdHJpbmc7XHJcbn0iLCLvu79pbXBvcnQgXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgSVJlc291cmNlT2YgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pRnFzXCJcclxuZXhwb3J0IGludGVyZmFjZSBDb21wbGltZW50IGV4dGVuZHMgSVJlc291cmNlT2Y8Q29tcGxpbWVudD4sIENvbXBsaW1lbnREYXRhIHsgfVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wbGltZW50RGF0YSB7XHJcbiAgICBDb250ZW50OiBzdHJpbmc7XHJcbn0iLCLvu79pbXBvcnQgXCJAZmlxYXMvdXRpbHNcIlxyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IElSZXNvdXJjZU9mIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvaUZxc1wiXHJcbmltcG9ydCB7IFdlYkxpbmsgfSBmcm9tIFwiLi9iYXNlXCJcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FzZUZpbGVEYXRhIHtcclxuICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xyXG4gICAgY3JlYXRlZE9uOiBJU09EYXRlVGltZVN0cmluZztcclxuICAgIG1vZGlmaWVkQnk6IHN0cmluZztcclxuICAgIG1vZGlmaWVkT246IElTT0RhdGVUaW1lU3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGZpbGVuYW1lOiBzdHJpbmc7XHJcbiAgICBjb250ZW50OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FzZUZpbGUgZXh0ZW5kcyBJUmVzb3VyY2VPZjxDYXNlRmlsZURhdGE+LCBDYXNlRmlsZURhdGEgeyB9Iiwi77u/aW1wb3J0IFwiLi4vYXBwXCI7XHJcbmltcG9ydCBcIkBmaXFhcy91dGlsc1wiXHJcbmltcG9ydCB7IElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2YsIElSZXNvdXJjZU9mIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvaUZxc1wiXHJcbmltcG9ydCB7IFdlYkxpbmsgfSBmcm9tIFwiLi9iYXNlXCJcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR2V0UGVyc29uc1Jlc3VsdCBleHRlbmRzIElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2Y8Q29tcGFjdFBlcnNvbj4geyB9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhY3RQZXJzb24gZXh0ZW5kcyBJUmVzb3VyY2VPZjxQZXJzb24+IHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGlzRmlxYXNFbXBsb3llZTogYm9vbGVhbjtcclxuICAgIGlzRm9ybWVyRW1wbG95ZWU6IGJvb2xlYW47XHJcbiAgICBoYXNMb2dpbjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQZXJzb24gZXh0ZW5kcyBJUmVzb3VyY2VPZjxQZXJzb24+LCBQZXJzb25EYXRhIHsgfVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQZXJzb25EYXRhIHtcclxuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xyXG4gICAgbWlkZGxlTmFtZTogc3RyaW5nO1xyXG4gICAgbGFzdE5hbWU6IHN0cmluZztcclxuICAgIGluaXRpYWxzOiBzdHJpbmc7XHJcbiAgICBlbWFpbDogc3RyaW5nO1xyXG4gICAgcGhvbmU6IHN0cmluZ1tdO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpcWFzRW1wbG95ZWUgZXh0ZW5kcyBQZXJzb24geyB9XHJcbiIsIu+7v2ltcG9ydCBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgXCJAZmlxYXMvdXRpbHNcIlxyXG5pbXBvcnQgeyBJUmVzb3VyY2VPZiwgSVJlc291cmNlUmVzb2x2ZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pRnFzXCJcclxuaW1wb3J0IHsgUGVyc29uIH0gZnJvbSBcIi4vcGVyc29uXCJcclxuXHJcbmV4cG9ydCB0eXBlIFJlY29yZEhpc3RvcnlUeXBlID0gXCJkb2N1bWVudFwiIHwgXCJkZXNjcmlwdGlvblwiIHwgXCJwcm9wZXJ0eVwiIHwgXCJmZWVkYmFja1N0YXR1c1wiIHwgXCJ3YXRjaFwiIHwgXCJ0aXRsZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRIaXN0b3J5IGV4dGVuZHMgSVJlc291cmNlT2Y8UmVjb3JkSGlzdG9yeT4ge1xyXG4gICAgbW9kaWZpZWRCeTogc3RyaW5nO1xyXG4gICAgbW9kaWZpZWRCeUlkOiBJUmVzb3VyY2VSZXNvbHZlcjxQZXJzb24+O1xyXG4gICAgbW9kaWZpZWRPbjogSVNPRGF0ZVRpbWVTdHJpbmc7XHJcbiAgICBvbGRDb250ZW50OiBzdHJpbmdcclxuICAgIG5ld0NvbnRlbnQ6IHN0cmluZztcclxuICAgIGl0ZW1OYW1lOiBzdHJpbmc7XHJcbiAgICBpdGVtRGVzYzogc3RyaW5nO1xyXG4gICAgaXRlbVR5cGU6IFJlY29yZEhpc3RvcnlUeXBlO1xyXG59XHJcbiIsIu+7v2ltcG9ydCBcIkBmaXFhcy91dGlsc1wiXHJcbmltcG9ydCB7IElJZGVudGl0eUxpbmsgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pRnFzXCI7XHJcbmltcG9ydCB7IENhc2VUeXBlIH0gZnJvbSBcIi4vc2VydmljZUNhc2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29sbGVjdGlvbiB7XHJcbiAgICBpZDogSUlkZW50aXR5TGluayxcclxuICAgIGRlc2M6IHN0cmluZyxcclxuICAgIHZhbHVlOiBhbnksXHJcbiAgICBpdGVtczogUmVwb3J0Q29sbGVjdGlvbkl0ZW1bXSxcclxuICAgIHJlY29yZHM6IElJZGVudGl0eUxpbmssXHJcbiAgICBfY3VyaWVzOiB7IG5hbWU6IHN0cmluZywgaHJlZjogc3RyaW5nIH1bXSxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb2xsZWN0aW9uSXRlbSB7XHJcbiAgICBkZXNjOiBzdHJpbmcsXHJcbiAgICB2YWx1ZTogYW55LFxyXG4gICAgaXRlbXM/OiBSZXBvcnRDb2xsZWN0aW9uSXRlbVtdLFxyXG4gICAgcmVjb3Jkcz86IElJZGVudGl0eUxpbmssXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlcG9ydEFuZ2xlID0gc3RyaW5nO1xyXG5leHBvcnQgdHlwZSBSZXBvcnRUeXBlID0gXCJhY3RpdmVcIiB8IFwicHJvamVjdFwiIHwgXCJoaXN0b3JpY1wiIHwgXCJiYWxhbmNlXCI7XHJcbmV4cG9ydCB0eXBlIFJlcG9ydFBlcmlvZCA9IFwieWVhclwiIHwgXCJtb250aFwiIHwgXCJ3ZWVrXCIgfCBcImRheVwiO1xyXG5leHBvcnQgdHlwZSBDYXNlU3RhdGUgPSBcIm5ld1wiIHwgXCJjbG9zZWRcIiB8IFwiYWxsXCI7XHJcbmV4cG9ydCB0eXBlIEJhbGFuY2VDYXNlVHlwZSA9IFwicmVxdWVzdFwiIHwgXCJidWdcIiB8IFwiYWxsXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBhcmFtZXRlcnMge1xyXG4gICAgcmVwb3J0VHlwZT86IFJlcG9ydFR5cGU7XHJcbiAgICBhbmdsZTogUmVwb3J0QW5nbGU7XHJcbiAgICBwcm9qZWN0VHJlZU9mTnVtYmVyOiBzdHJpbmc7XHJcbiAgICBmcm9tPzogSVNPRGF0ZVN0cmluZztcclxuICAgIHVudGlsPzogSVNPRGF0ZVN0cmluZztcclxuICAgIGNpZDogbnVtYmVyW107XHJcbiAgICBjYXNlVHlwZTogQ2FzZVR5cGVbXTtcclxuICAgIGFjdGl2ZUNhc2VzT25seTogYm9vbGVhbjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEJhbGFuY2VSZXBvcnRQYXJhbWV0ZXJzIHtcclxuICAgIGZyb20/OiBJU09EYXRlU3RyaW5nO1xyXG4gICAgdW50aWw/OiBJU09EYXRlU3RyaW5nO1xyXG4gICAgY2FzZVR5cGU6IEJhbGFuY2VDYXNlVHlwZTtcclxuICAgIHBlcmlvZDogUmVwb3J0UGVyaW9kO1xyXG4gICAgY2FzZVN0YXRlOiBDYXNlU3RhdGU7XHJcbiAgICBjaWQ6IG51bWJlcltdO1xyXG59XHJcbiIsIu+7v2ltcG9ydCBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgXCJAZmlxYXMvdXRpbHNcIlxyXG5pbXBvcnQgeyBJUmVzb3VyY2VPZiwgSVJlc291cmNlUmVzb2x2ZXIsIElSZXNvdXJjZUxpbmssIElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZiwgSUlkZW50aWZpYWJsZVBhZ2VkQ29sbGVjdGlvblByb3BlcnR5T2YsIEFjdGlvbkxpbmtBY3Rpb24gfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pRnFzXCJcclxuaW1wb3J0IHsgUGVyc29uLCBGaXFhc0VtcGxveWVlLCBHZXRQZXJzb25zUmVzdWx0IH0gZnJvbSBcIi4vcGVyc29uXCJcclxuaW1wb3J0IHsgQ3VzdG9tZXIgfSBmcm9tIFwiLi9jdXN0b21lclwiXHJcbmltcG9ydCB7IFdlYkxpbmsgfSBmcm9tIFwiLi9iYXNlXCJcclxuaW1wb3J0IHsgQ2FzZUZpbGUgfSBmcm9tIFwiLi9maWxlXCJcclxuaW1wb3J0IHsgUmVjb3JkSGlzdG9yeSB9IGZyb20gXCIuL3JlY29yZEhpc3RvcnlcIlxyXG5cclxuZXhwb3J0IHR5cGUgUHJpb3JpdHkgPSBcImhpZ2hcIiB8IFwibWVkaXVtXCIgfCBcImxvd1wiIHwgXCJfdW5zdXBwb3J0ZWRcIjtcclxuZXhwb3J0IHR5cGUgU3RhdHVzID0gXCJ3YWl0aW5nRm9yUmVsZWFzZVwiIHwgXCJhcHByb3ZlZFwiIHwgXCJhbmFseXNpc1wiIHwgXCJ3YWl0aW5nRm9yVWF0XCIgfCBcInJlYWR5Rm9yVWF0XCIgfCBcImRlbGl2ZXJlZFwiIHwgXCJyZXdvcmtcIiB8IFwiaW5Qcm9ncmVzc1wiIHwgXCJjbG9zZWRcIiB8IFwib3BlblwiIHwgXCJwYXJrZWRcIiB8IFwiY2FuY2VsbGVkXCIgfCBcImV4cGxhaW5lZFwiIHwgXCJfdW5zdXBwb3J0ZWRcIjtcclxuZXhwb3J0IHR5cGUgQ2FzZVR5cGUgPSBcImJ1Z1wiIHwgXCJyZXF1ZXN0XCIgfCBcInN1cHBvcnRcIjtcclxuZXhwb3J0IHR5cGUgU2V2ZXJpdHkgPSBcImxldmVsMVwiIHwgXCJsZXZlbDJcIiB8IFwibGV2ZWwzXCIgfCBcImxldmVsNFwiIHwgXCJsZXZlbDk5XCIgfCBcIl91bnN1cHBvcnRlZFwiO1xyXG5leHBvcnQgdHlwZSBJbXBhY3QgPSBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiIHwgXCJfdW5zdXBwb3J0ZWRcIjtcclxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSBcImRldlwiIHwgXCJ0ZXN0XCIgfCBcInVhdFwiIHwgXCJwcm9kXCIgfCBcIm5hXCI7XHJcbmV4cG9ydCB0eXBlIEZlZWRiYWNrU3RhdHVzID0gJ3Byb3ZpZGVkJyB8ICdyZXF1ZXN0ZWQnIHwgJ25vdFJlcXVpcmVkJyB8ICdfdW5zdXBwb3J0ZWQnO1xyXG5leHBvcnQgdHlwZSBDb3JyZXNwb25kZW5jZVR5cGUgPSAnZW1haWwnIHwgJ2ZlZWRiYWNrRnJvbUN1c3RvbWVyJyB8ICd0YXNrRGVzY3JpcHRpb25IdG1sJyB8ICd0YXNrRGVzY3JpcHRpb24nIHwgJ2dlbmVyYWxOb3RlJyB8ICdmZWVkYmFja1JlcXVlc3QnIHwgJ2ZlZWRiYWNrUmVwbHknIHwgJ2ludGVybmFsJyB8ICdfdW5zdXBwb3J0ZWQnO1xyXG5leHBvcnQgdHlwZSBDYXNlT3duZXJzaGlwID0gXCJzZXJ2aWNlRGVza1wiIHwgXCJiaWxsaW5nQnVyZWF1XCIgfCBcInByb2plY3RNYW5hZ2VtZW50XCIgfCBcInNhbGVzXCIgfCBcIl91bnN1cHBvcnRlZFwiO1xyXG5leHBvcnQgdHlwZSBDYXNlQ2F1c2UgPSBcInVhdFwiIHwgXCJiaWxsYWJsZVN1cHBvcnRcIiB8IFwiY29uZmlnQnVnXCIgfCBcInRvQmVEZXRlcm1pbmVkXCIgfCBcImN1c3RLbm93bGVnZGVJc3N1ZVwiIHwgXCJjdXN0RGF0YVwiIHwgXCJjdXN0Q29uZmlnXCIgfCBcImN1c3RWZXJzaW9uQ29udHJvbElzc3VlXCIgfCBcImN1c3RSZXF1ZXN0XCIgfCBcImluY29ycmVjdFJlcXVpcmVtZW50c1wiIHwgXCJjaGFuZ2VkUmVxdWlyZW1lbnRzXCIgfCBcInNvZnR3YXJlQnVnXCIgfCBcImRhdGFiYXNlSXNzdWVcIiB8IFwidmVyc2lvbkNvbnRyb2xJc3N1ZVwiIHwgXCJvdGhlclwiIHwgXCJ1c2FiaWxpdHlJbXByb3ZlbWVudFwiIHwgXCJwYXltZW50UHJvY2Vzc2luZ1wiIHwgXCJ1c2VyTWFpbnRlbmFuY2VcIiB8IFwiZEJBQWN0aXZpdGljZVwiIHwgXCJuZXR3b3JrXCIgfCBcInRoaXJkUGFydHlcIiB8IFwiX3Vuc3VwcG9ydGVkXCI7XHJcbmV4cG9ydCB0eXBlIFJlc3BvbnNpYmxlU0RFbXBsb3llZSA9IFwic3RlZmFuXCIgfCBcImRhdmVcIiB8IFwiaWxzZTAxXCIgfCBcImluZ2Vib3JnXCIgfCBcInRiZFwiIHwgXCJmaW50ZXJuXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VudFNlcnZpY2VDYXNlc1Jlc3VsdCBleHRlbmRzIElSZXNvdXJjZU9mPFJlY2VudFNlcnZpY2VDYXNlc1Jlc3VsdD4ge1xyXG4gICAgaXRlbXM6IENvbXBhY3RSZWNlbnRTZXJ2aWNlQ2FzZVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDYXNlUmVmIHtcclxuICAgIG51bWJlcjogc3RyaW5nLFxyXG4gICAgaWQ6IElSZXNvdXJjZUxpbmssXHJcbiAgICB0eXBlOiBDYXNlVHlwZVxyXG4gICAgdGl0bGU/OiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wYWN0U2VydmljZUNhc2UgZXh0ZW5kcyBJUmVzb3VyY2VPZjxDb21wYWN0U2VydmljZUNhc2U+IHtcclxuICAgIGN1c3RvbWVyOiBJUmVzb3VyY2VSZXNvbHZlcjxDdXN0b21lcj47XHJcbiAgICBjb250YWN0UGVyc29uOiBJUmVzb3VyY2VSZXNvbHZlcjxQZXJzb24+O1xyXG4gICAgc3RhcnQ6IElTT0RhdGVUaW1lU3RyaW5nO1xyXG4gICAgbW9kaWZpZWRPbjogSVNPRGF0ZVRpbWVTdHJpbmc7XHJcbiAgICBtb2RpZmllZEJ5OiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgY2FzZU51bWJlcjogc3RyaW5nO1xyXG4gICAgcGFyZW50Q2FzZU51bWJlcjogc3RyaW5nO1xyXG4gICAgY2hpbGRDYXNlTnVtYmVyczogQXJyYXk8c3RyaW5nPjtcclxuICAgIGN1c3RvbWVyRGVzYzogc3RyaW5nO1xyXG4gICAgY3VzdG9tZXJSZWZlcmVuY2U6IHN0cmluZztcclxuICAgIGNyZWF0ZWRCeTogc3RyaW5nO1xyXG4gICAgc3RhdHVzRGVzYzogc3RyaW5nO1xyXG4gICAgc3RhdHVzOiBTdGF0dXM7XHJcbiAgICB0eXBlOiBDYXNlVHlwZTtcclxuICAgIHNldmVyaXR5OiBTZXZlcml0eTtcclxuICAgIHByaW9yaXR5OiBQcmlvcml0eTtcclxuICAgIGZlZWRiYWNrU3RhdHVzOiBGZWVkYmFja1N0YXR1cztcclxuICAgIGFjdGlvblJlcXVpcmVkOiBib29sZWFuO1xyXG4gICAgcmVxdWVzdGVkRGVhZGxpbmU/OiBJU09EYXRlU3RyaW5nO1xyXG4gICAgcmVtZW1iZXJNZURhdGU/OiBJU09EYXRlU3RyaW5nO1xyXG4gICAgcmVtZW1iZXJNZVJlYXNvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhY3RSZWNlbnRTZXJ2aWNlQ2FzZSBleHRlbmRzIENvbXBhY3RTZXJ2aWNlQ2FzZSB7XHJcbiAgICBsYXN0T3BlbmVkOiBJU09EYXRlVGltZVN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wYWN0U2VhcmNoU2VydmljZUNhc2UgZXh0ZW5kcyBDb21wYWN0U2VydmljZUNhc2Uge1xyXG4gICAgbW9kaWZpZWRPbjogSVNPRGF0ZVRpbWVTdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhbExpbms8VCwgRCwgUD4ge1xyXG4gICAgYWN0aW9uOiBBY3Rpb25MaW5rQWN0aW9uPFQsIEQsIFA+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c0xpbmsge1xyXG4gICAgYWN0aW9uOiBBY3Rpb25MaW5rQWN0aW9uPHZvaWQsIHZvaWQsIHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrTGluayB7XHJcbiAgICBhY3Rpb246IEFjdGlvbkxpbmtBY3Rpb248eyBjb3JyZXNwb25kZW5jZTogQ29ycmVzcG9uZGVuY2VEYXRhIH0sIHZvaWQsIHZvaWQ+O1xyXG59XHJcblxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uTGlua3Mge1xyXG4gICAgW2FjdGlvbmdyb3VwOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IEdlbmVyYWxMaW5rPGFueSwgYW55LCBhbnk+IH1cclxuICAgIHN0YXR1c0xpbmtzPzogeyBba2V5OiBzdHJpbmddOiBTdGF0dXNMaW5rIH1cclxuICAgIGZlZWRiYWNrU3RhdHVzTGlua3M/OiB7IFtrZXk6IHN0cmluZ106IEZlZWRiYWNrTGluayB9XHJcbiAgICBnZW5lcmFsTGlua3M/OiB7XHJcbiAgICAgICAgaGFzQ2hhbmdlZD86IEdlbmVyYWxMaW5rPGJvb2xlYW4sIHZvaWQsIHZvaWQ+XHJcbiAgICAgICAgd2F0Y2g/OiBHZW5lcmFsTGluazx2b2lkLCB2b2lkLCB2b2lkPlxyXG4gICAgICAgIHVud2F0Y2g/OiBHZW5lcmFsTGluazx2b2lkLCB2b2lkLCB2b2lkPlxyXG4gICAgICAgIGFkZFdhdGNoZXJzOiBHZW5lcmFsTGluazx2b2lkLCB2b2lkLCBzdHJpbmcgfCBzdHJpbmdbXT5cclxuICAgICAgICBnZXRXYXRjaGVyczogR2VuZXJhbExpbms8R2V0UGVyc29uc1Jlc3VsdCwgdm9pZCwgdm9pZD5cclxuICAgICAgICByZW1vdmVXYXRjaGVyczogR2VuZXJhbExpbms8dm9pZCwgdm9pZCwgc3RyaW5nIHwgc3RyaW5nW10+XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGFzQWN0aW9ucyB7XHJcbiAgICBhY3Rpb25MaW5rczogQWN0aW9uTGlua3NcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ2FzZSBleHRlbmRzIElSZXNvdXJjZU9mPFNlcnZpY2VDYXNlPiwgU2VydmljZUNhc2VEYXRhLCBIYXNBY3Rpb25zIHtcclxuICAgIGN1c3RvbWVyOiBJUmVzb3VyY2VSZXNvbHZlcjxDdXN0b21lcj5cclxuICAgIGZpcWFzT3duZXJzaGlwOiBJUmVzb3VyY2VSZXNvbHZlcjxGaXFhc0VtcGxveWVlPlxyXG4gICAgY29udGFjdFBlcnNvbjogSVJlc291cmNlUmVzb2x2ZXI8UGVyc29uPlxyXG4gICAgZmlsZXM6IElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZjxDYXNlRmlsZT5cclxuICAgIGNvcnJlc3BvbmRlbmNlOiBJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uUHJvcGVydHlPZjxDb3JyZXNwb25kZW5jZT4gJiB7IGdlbmVyYWxMaW5rcz86IEdlbmVyYWxMaW5rPGFueSwgYW55LCBhbnk+W10gfVxyXG4gICAgaGlzdG9yeTogSUlkZW50aWZpYWJsZUNvbGxlY3Rpb25Qcm9wZXJ0eU9mPFJlY29yZEhpc3Rvcnk+XHJcbiAgICB3YXRjaGVyQ291bnQ6IE51bWJlclxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDYXNlRGF0YSB7XHJcbiAgICBzdGFydDogSVNPRGF0ZVRpbWVTdHJpbmcsXHJcbiAgICBlbmQ/OiBJU09EYXRlVGltZVN0cmluZyxcclxuICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxyXG4gICAgY3VzdG9tZXI6IElSZXNvdXJjZUxpbmssXHJcbiAgICBmaXFhc093bmVyc2hpcDogSVJlc291cmNlTGluayxcclxuICAgIGNvbnRhY3RQZXJzb246IFdlYkxpbmssXHJcbiAgICBzdGF0dXM6IFN0YXR1cyxcclxuICAgIHR5cGU/OiBDYXNlVHlwZSxcclxuICAgIHByaW9yaXR5OiBQcmlvcml0eSxcclxuICAgIGludGVybmFsVGFza0xpbms6IHN0cmluZyxcclxuICAgIGNhc2VOdW1iZXI6IHN0cmluZyxcclxuICAgIGZlZWRiYWNrU3RhdHVzPzogRmVlZGJhY2tTdGF0dXMsXHJcbiAgICBwYXJlbnRDYXNlTnVtYmVyOiBzdHJpbmcsXHJcbiAgICBpbmNyZWFzZWRQcmlvcml0eTogYm9vbGVhbixcclxuICAgIHJlcXVlc3RlZERlYWRsaW5lPzogSVNPRGF0ZVN0cmluZyxcclxuICAgIGN1c3RvbWVyUmVmZXJlbmNlOiBzdHJpbmcsXHJcbiAgICBhY3Rpb25SZXF1aXJlZD86IGJvb2xlYW4sXHJcbiAgICBkdXJhdGlvbj86IG51bWJlcixcclxuICAgIGNyZWF0ZWRPbjogSVNPRGF0ZVRpbWVTdHJpbmcsXHJcbiAgICBjcmVhdGVkQnk6IHN0cmluZyxcclxuICAgIGNhc2VDYXVzZT86IENhc2VDYXVzZSxcclxuICAgIGNhc2VPd25lcnNoaXA/OiBDYXNlT3duZXJzaGlwLFxyXG4gICAgcmVzcG9uc2libGVTREVtcGxveWVlPzogUmVzcG9uc2libGVTREVtcGxveWVlXHJcbiAgICBidWRnZXRJbmRpY2F0aW9uPzogbnVtYmVyLFxyXG4gICAgYXBwcm92ZWRIb3Vyc01pbj86IG51bWJlcixcclxuICAgIGFwcHJvdmVkSG91cnNNYXg/OiBudW1iZXIsXHJcbiAgICBhY3R1YWxIb3Vyc1NwZW50OiBudW1iZXI7XHJcbiAgICBhcHByb3ZlZEhvdXJzQ29tbWVudEJ5U0Q6IHN0cmluZyxcclxuICAgIHNwVHNUYXNrOiBzdHJpbmcsXHJcbiAgICByZW1lbWJlck1lRGF0ZT86IElTT0RhdGVTdHJpbmcsXHJcbiAgICByZW1lbWJlck1lUmVhc29uOiBzdHJpbmcsXHJcbiAgICBpZ25vcmVDaGF0TWVtb1NlcXVlbmNlOiBzdHJpbmc7XHJcbiAgICBpZ25vcmVNYWlsaW5nPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9ibGVtIGV4dGVuZHMgU2VydmljZUNhc2UsIElSZXNvdXJjZU9mPFByb2JsZW0+LCBQcm9ibGVtRGF0YSwgSGFzQWN0aW9ucyB7XHJcbiAgICBpZDogSVJlc291cmNlUmVzb2x2ZXI8UHJvYmxlbT47XHJcbiAgICBjdXN0b21lcjogSVJlc291cmNlUmVzb2x2ZXI8Q3VzdG9tZXI+LFxyXG4gICAgY29udGFjdFBlcnNvbjogSVJlc291cmNlUmVzb2x2ZXI8UGVyc29uPixcclxuICAgIGZpcWFzT3duZXJzaGlwOiBJUmVzb3VyY2VSZXNvbHZlcjxGaXFhc0VtcGxveWVlPlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb2JsZW1EYXRhIGV4dGVuZHMgU2VydmljZUNhc2VEYXRhIHtcclxuICAgIHNldmVyaXR5OiBTZXZlcml0eSxcclxuICAgIGVudmlyb25tZW50PzogRW52aXJvbm1lbnQsXHJcbiAgICBzeXN0ZW1Eb3duPzogYm9vbGVhbixcclxuICAgIGltcGFjdENhdGVnb3J5PzogSW1wYWN0LFxyXG4gICAgd29ya2Fyb3VuZEF2YWlsYWJsZTogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3QgZXh0ZW5kcyBTZXJ2aWNlQ2FzZSwgSVJlc291cmNlT2Y8UmVxdWVzdD4sIFJlcXVlc3REYXRhLCBIYXNBY3Rpb25zIHtcclxuICAgIGlkOiBJUmVzb3VyY2VSZXNvbHZlcjxSZXF1ZXN0PjtcclxuICAgIGN1c3RvbWVyOiBJUmVzb3VyY2VSZXNvbHZlcjxDdXN0b21lcj4sXHJcbiAgICBjb250YWN0UGVyc29uOiBJUmVzb3VyY2VSZXNvbHZlcjxQZXJzb24+LFxyXG4gICAgZmlxYXNPd25lcnNoaXA6IElSZXNvdXJjZVJlc29sdmVyPEZpcWFzRW1wbG95ZWU+XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdERhdGEgZXh0ZW5kcyBTZXJ2aWNlQ2FzZURhdGEgeyB9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvcnJlc3BvbmRlbmNlIGV4dGVuZHMgSVJlc291cmNlT2Y8Q29ycmVzcG9uZGVuY2U+LCBDb3JyZXNwb25kZW5jZURhdGEge1xyXG4gICAgY3JlYXRlZEJ5SWQ6IElSZXNvdXJjZVJlc29sdmVyPFBlcnNvbj5cclxuICAgIGNvcnJlc3BvbmRlbmNlVHlwZTogQ29ycmVzcG9uZGVuY2VUeXBlLFxyXG4gICAgb3JpZ2luYWxDb250ZW50OiBzdHJpbmcsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ycmVzcG9uZGVuY2VEYXRhIHtcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIGNyZWF0ZWRPbjogSVNPRGF0ZVRpbWVTdHJpbmcsXHJcbiAgICBjcmVhdGVkQnk6IHN0cmluZyxcclxuICAgIGJ5U3VwcG9ydEVtcGxveWVlOiBib29sZWFuLFxyXG4gICAgYnlJbnRlcm5hbEN1c3RvbWVyOiBib29sZWFuLFxyXG4gICAgYnlDdXN0b21lcjogYm9vbGVhbixcclxuICAgIGNvcnJlc3BvbmRlbmNlVHlwZT86IENvcnJlc3BvbmRlbmNlVHlwZVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEluZm8geyB9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaERhdGEge1xyXG4gICAgY2FzZVN0YXR1c2VzPzogU3RhdHVzW107XHJcbiAgICBmZWVkYmFja1N0YXR1c2VzPzogRmVlZGJhY2tTdGF0dXNbXTtcclxuICAgIGNyZWF0ZWRPbk9yQWZ0ZXI/OiBJU09EYXRlU3RyaW5nO1xyXG4gICAgY3JlYXRlZEJlZm9yZT86IElTT0RhdGVTdHJpbmc7XHJcbiAgICBtb2RpZmllZE9uT3JBZnRlcj86IElTT0RhdGVTdHJpbmc7XHJcbiAgICBtb2RpZmllZEJlZm9yZT86IElTT0RhdGVTdHJpbmc7XHJcbiAgICBkZWFkbGluZU9uT3JBZnRlcj86IElTT0RhdGVTdHJpbmc7XHJcbiAgICBkZWFkbGluZUJlZm9yZT86IElTT0RhdGVTdHJpbmc7XHJcbiAgICByZW1lbWJlck9uT3JBZnRlcj86IElTT0RhdGVTdHJpbmc7XHJcbiAgICByZW1lbWJlckJlZm9yZT86IElTT0RhdGVTdHJpbmc7XHJcbiAgICBjYXNlVHlwZXM/OiBDYXNlVHlwZVtdO1xyXG4gICAgY29ycmVzcG9uZGVuY2VDb250ZW50Pzogc3RyaW5nO1xyXG4gICAgc2V2ZXJpdGllcz86IFNldmVyaXR5W107XHJcbiAgICBwcmlvcml0aWVzPzogUHJpb3JpdHlbXTtcclxuICAgIGVudmlyb25tZW50cz86IEVudmlyb25tZW50W107XHJcbiAgICBjcmVhdGVkQnk/OiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkQnlJZD86IFdlYkxpbms7XHJcbiAgICB3YXRjaGVkQnlJZD86IFdlYkxpbms7XHJcbiAgICBjb250YWN0UGVyc29uSWQ/OiBXZWJMaW5rO1xyXG4gICAgY29udGFjdFBlcnNvbj86IHN0cmluZztcclxuICAgIGNhc2VOdW1iZXI/OiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgY3VzdG9tZXJSZWY/OiBzdHJpbmc7XHJcbiAgICBvcGVuQ2FzZXNPbmx5PzogYm9vbGVhbjtcclxuICAgIHByb2plY3RUcmVlT2ZOdW1iZXI/OiBzdHJpbmc7XHJcbiAgICBpbmNsdWRlTmVpZ2hib3VyPzogYm9vbGVhbjtcclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBMaXRlRXZlbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pTGl0ZUV2ZW50XCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBJc1Byb2Nlc3NpbmdTZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbi8qKlxyXG4gKiBTZXNzaW9uIGNsYXNzLCBzdG9yZXMgdmFsdWVzIGFzIEpTT04gaW4gbG9jYWwgYnJvd3NlciBzdG9yYWdlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIElzUHJvY2Vzc2luZ1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwiSXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5cclxuICAgIHB1YmxpYyBJc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYnVzeUNvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBwdWJsaXNoZXI6IExpdGVFdmVudDxib29sZWFuPjtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucHVibGlzaGVyID0gbmV3IExpdGVFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBTdGFydFByb2Nlc3NpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5idXN5Q291bnQrKztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLklzUHJvY2Vzc2luZykge1xyXG4gICAgICAgICAgICB0aGlzLklzUHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucHVibGlzaGVyLnRyaWdnZXIodGhpcy5Jc1Byb2Nlc3NpbmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBTdG9wUHJvY2Vzc2luZygpIHtcclxuICAgICAgICBpZiAodGhpcy5idXN5Q291bnQgPiAwKVxyXG4gICAgICAgICAgICB0aGlzLmJ1c3lDb3VudC0tO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5idXN5Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLklzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnB1Ymxpc2hlci50cmlnZ2VyKHRoaXMuSXNQcm9jZXNzaW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZExpc3RlbmVyKGxpc3RlbmVyOiAoYm9vbGVhbikgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHVibGlzaGVyLm9uKGxpc3RlbmVyKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4geyB0aGlzLnB1Ymxpc2hlci5vZmYobGlzdGVuZXIpOyB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldCgpIHtcclxuICAgICAgICB0aGlzLklzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYnVzeUNvdW50ID0gMDtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hlci50cmlnZ2VyKHRoaXMuSXNQcm9jZXNzaW5nKTtcclxuICAgIH1cclxufSIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IE1lbW9pemUsIExvY2FsU3RvcmFnZSB9IGZyb20gXCJAZmlxYXMvdXRpbHNcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uRGF0YSB9IGZyb20gXCIuLi9tb2RlbHMvbG9jYWxpemF0aW9uXCI7XHJcbmltcG9ydCAqIGFzIFJ4IGZyb20gXCJyeGpzXCJcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFRyYW5zbGF0aW9uU2VydmljZS5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25TZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcIlRyYW5zbGF0aW9uU2VydmljZVwiXHJcbiAgICBwcml2YXRlIGxvYWRlZDtcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uVGFibGU6IHsgW2tleTogc3RyaW5nXTogTG9jYWxpemF0aW9uRGF0YSB9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyRodHRwJykgcHJpdmF0ZSAkaHR0cDogbmcuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgcHJpdmF0ZSAkdGltZW91dDogbmcuSVRpbWVvdXRTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRxJykgcHJpdmF0ZSAkcTogbmcuSVFTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICAkdGltZW91dCgpLnRoZW4oKCkgPT4geyB2YXIgXyA9IHRoaXMudHJhbnNsYXRpb25EYXRhOyB9KVxyXG4gICAgICAgIHRoaXMub25Mb2FkZWQgPSAkcTx2b2lkPihyZXNvbHZlciA9PiB0aGlzLl9vbkxvYWRlZCA9IHJlc29sdmVyKTtcclxuICAgICAgICB0aGlzLm9uTG9hZGVkTG9jYWwgPSAkcTx2b2lkPihyZXNvbHZlciA9PiB0aGlzLl9vbkxvYWRlZExvY2FsID0gcmVzb2x2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX29uTG9hZGVkTG9jYWw6IG5nLklRUmVzb2x2ZVJlamVjdDx2b2lkPjtcclxuICAgIHByaXZhdGUgX29uTG9hZGVkOiBuZy5JUVJlc29sdmVSZWplY3Q8dm9pZD47XHJcbiAgICBwdWJsaWMgb25Mb2FkZWRMb2NhbDogYW5ndWxhci5JUHJvbWlzZTx2b2lkPjtcclxuICAgIHB1YmxpYyBvbkxvYWRlZDogYW5ndWxhci5JUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgICBwcml2YXRlIGdldCB0cmFuc2xhdGlvblRhYmxlKCk6IHsgW2tleTogc3RyaW5nXTogTG9jYWxpemF0aW9uRGF0YSB9IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3RyYW5zbGF0aW9uVGFibGUpIHtcclxuICAgICAgICAgICAgdmFyIGNhY2hlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfdHJhbnNsYXRpb25EYXRhJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0aW9uVGFibGUgPSBjYWNoZWQgPyBKU09OLnBhcnNlKGNhY2hlZCkgOiB7fTtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWwgPSAoZGF0YS5sZW5ndGggPT0gMikgPyBgJHtkYXRhfS0ke2RhdGEudG9VcHBlckNhc2UoKX1gIDogZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uTG9hZGVkTG9jYWwoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25EYXRhLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBkIG9mIGRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRpb25UYWJsZVtkLm5hbWVdID0gZDtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZVsnX3RyYW5zbGF0aW9uRGF0YSddID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fdHJhbnNsYXRpb25UYWJsZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkxvYWRlZCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0aW9uVGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgQE1lbW9pemUoKVxyXG4gICAgcHJpdmF0ZSBnZXQgdHJhbnNsYXRpb25EYXRhKCkge1xyXG4gICAgICAgIHZhciBwID0gdGhpcy5nZXRBbGxUcmFuc2xhdGlvbnMoXCJHbG9iYWxcIik7XHJcbiAgICAgICAgcC5jYXRjaCgoKSA9PiB0aGlzLnRyYW5zbGF0aW9uRGF0YSA9IG51bGwpO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXQgdHJhbnNsYXRpb25EYXRhKF8pIHsgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0QWxsVHJhbnNsYXRpb25zKGZpbGVuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgdXJsID0gYGFwaS90cmFuc2xhdGlvbi8ke2ZpbGVuYW1lfWA7XHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgdGhpcy4kaHR0cC5nZXQ8TG9jYWxpemF0aW9uRGF0YVtdPih1cmwpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2xvY2FsOiBzdHJpbmc7XHJcbiAgICBATWVtb2l6ZSgpXHJcbiAgICBwcml2YXRlIGdldCBsb2NhbCgpIHtcclxuICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLmdldExvY2FsTmFtZSgpO1xyXG4gICAgICAgIGxvY2FsLmNhdGNoKCgpID0+IHRoaXMuX2xvY2FsID0gJ25sLU5MJylcclxuICAgICAgICByZXR1cm4gbG9jYWw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldCBsb2NhbChfbG9jYWwpIHsgfVxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRMb2NhbE5hbWUoKSB7XHJcbiAgICAgICAgdmFyIHVybCA9IGBhcGkvdHJhbnNsYXRpb24vbG9jYWxgO1xyXG4gICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IHRoaXMuJGh0dHAuZ2V0PHN0cmluZz4odXJsKTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRMb2NhbCgpIHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4gKGF3YWl0IHRoaXMub25Mb2FkZWRMb2NhbCkpKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBUcmFuc2xhdGVPYnNlcnZhYmxlKGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgUnguU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICAgICAgdGhpcy4kdGltZW91dCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGVkKVxyXG4gICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KFwibG9hZGluZy4uLlwiKTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbkRhdGEudGhlbihfID0+IHtcclxuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCh0aGlzLlRyYW5zbGF0ZShrZXkpKTtcclxuICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgVHJhbnNsYXRlQXN5bmMoa2V5OiBzdHJpbmcsIHJldHVybnVuZGVmaW5lZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIF8gPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uRGF0YTtcclxuICAgICAgICB2YXIgaXRlbSA9IHRoaXMudHJhbnNsYXRpb25UYWJsZVtrZXkudG9VcHBlckNhc2UoKV07XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnZhbHVlIDogKHJldHVybnVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiBrZXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIEZvcm1hdEFzeW5jKGtleTogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgcmV0dXJudW5kZWZpbmVkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgXyA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25EYXRhO1xyXG4gICAgICAgIHZhciBpdGVtID0gdGhpcy50cmFuc2xhdGlvblRhYmxlW2tleS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICByZXR1cm4gaXRlbSA/IGl0ZW0udmFsdWUucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmdzW251bWJlcl0gIT0gJ3VuZGVmaW5lZCcgPyBhcmdzW251bWJlcl0gOiBtYXRjaDtcclxuICAgICAgICB9KSA6IChyZXR1cm51bmRlZmluZWQpID8gdW5kZWZpbmVkIDoga2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBUcmFuc2xhdGUoa2V5OiBzdHJpbmcsIHJldHVybnVuZGVmaW5lZDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciB0ID0gdGhpcy50cmFuc2xhdGlvblRhYmxlW2tleS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPyB0LnZhbHVlIDogIXRoaXMubG9hZGVkID8gJ2xvYWRpbmcuLi4nIDogKHJldHVybnVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBrZXk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEZvcm1hdChrZXk6IHN0cmluZywgYXJnczogc3RyaW5nW10sIHJldHVybnVuZGVmaW5lZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICB2YXIgdCA9IHRoaXMudHJhbnNsYXRpb25UYWJsZVtrZXkudG9VcHBlckNhc2UoKV07XHJcbiAgICAgICAgICAgIHJldHVybiB0ID8gdC52YWx1ZS5yZXBsYWNlKC97KFxcZCspfS9nLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmdzW251bWJlcl0gIT0gJ3VuZGVmaW5lZCcgPyBhcmdzW251bWJlcl0gOiBtYXRjaDtcclxuICAgICAgICAgICAgfSkgOiAhdGhpcy5sb2FkZWQgPyAnbG9hZGluZy4uLicgOiAocmV0dXJudW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IGtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGtleTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uQXBpVVJMIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiXHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSBcIkBmaXFhcy91dGlsc1wiXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogQXV0aGVudGljYXRpb25BcGlTZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvbkFwaVNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwiQXV0aGVudGljYXRpb25BcGlTZXJ2aWNlXCJcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyRodHRwJykgcHJpdmF0ZSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnQXV0aGVudGljYXRpb25BcGlVUkwnKSBwcml2YXRlIEF1dGhlbnRpY2F0aW9uQXBpVVJMOiBBdXRoZW50aWNhdGlvbkFwaVVSTFxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBBdXRoZW50aWNhdGUoe3VzZXJuYW1lLCBwYXNzd29yZH06IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9KTogbmcuSUh0dHBQcm9taXNlPEFjY2Vzc1Rva2VuUmVzcG9uc2U+IHtcclxuICAgICAgICB2YXIgcmVxdWVzdDogQWNjZXNzVG9rZW5SZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBncmFudF90eXBlOiBcInBhc3N3b3JkXCIsXHJcbiAgICAgICAgICAgIGNsaWVudF9pZDogXCJGaXFhc3Npc3QuYXBpXCIsXHJcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcclxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0VG9rZW4ocmVxdWVzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFN5bmNocm9ub3VzUmVmcmVzaFRva2VuKHRva2VuOiBzdHJpbmcpOiBBY2Nlc3NUb2tlblJlc3BvbnNlIHtcclxuICAgICAgICB2YXIgcmVxdWVzdDogQWNjZXNzVG9rZW5SZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBncmFudF90eXBlOiBcInJlZnJlc2hfdG9rZW5cIixcclxuICAgICAgICAgICAgY2xpZW50X2lkOiBcIkZpcWFzc2lzdC5hcGlcIixcclxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdG9rZW5cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RTeW5jaHJvbm91c09wZXJhdGlvbihgdG9rZW5gLCByZXF1ZXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgUmVmcmVzaFRva2VuKHRva2VuOiBzdHJpbmcpOiBuZy5JSHR0cFByb21pc2U8QWNjZXNzVG9rZW5SZXNwb25zZT4ge1xyXG4gICAgICAgIHZhciByZXF1ZXN0OiBBY2Nlc3NUb2tlblJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIGdyYW50X3R5cGU6IFwicmVmcmVzaF90b2tlblwiLFxyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IFwiRmlxYXNzaXN0LmFwaVwiLFxyXG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0b2tlblxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdFRva2VuKHJlcXVlc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVxdWVzdFRva2VuKHJlcXVlc3Q6IEFjY2Vzc1Rva2VuUmVxdWVzdCk6IG5nLklIdHRwUHJvbWlzZTxBY2Nlc3NUb2tlblJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdE9wZXJhdGlvbihgdG9rZW5gLCByZXF1ZXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlUGFzc3dvcmQodXNlck5hbWU6IHN0cmluZywgb2xkUGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZywgY3VsdHVyZTogc3RyaW5nKTogbmcuSUh0dHBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICB1c2VyTmFtZTogdXNlck5hbWUsXHJcbiAgICAgICAgICAgIG9sZFBhc3N3b3JkOiBvbGRQYXNzd29yZCxcclxuICAgICAgICAgICAgbmV3UGFzc3dvcmQ6IG5ld1Bhc3N3b3JkLFxyXG4gICAgICAgICAgICBjdWx0dXJlOiBjdWx0dXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0T3BlcmF0aW9uKCdwYXNzd29yZC9jaGFuZ2UnLCByZXF1ZXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlUGFzc3dvcmRXaXRoVG9rZW4odXNlck5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgcmVzZXRUb2tlbjogc3RyaW5nLCBjdWx0dXJlOiBzdHJpbmcpOiBuZy5JSHR0cFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyTmFtZSxcclxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgICByZXNldFRva2VuOiByZXNldFRva2VuLFxyXG4gICAgICAgICAgICBjdWx0dXJlOiBjdWx0dXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0T3BlcmF0aW9uKCdwYXNzd29yZC9jaGFuZ2V3aXRodG9rZW4nLCByZXF1ZXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRQYXNzd29yZChlbWFpbDogc3RyaW5nLCByZXNldExpbms6IHN0cmluZywgY3VsdHVyZTogc3RyaW5nKTogbmcuSUh0dHBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBlbWFpbDogZW1haWwsXHJcbiAgICAgICAgICAgIHJlc2V0TGluazogcmVzZXRMaW5rLFxyXG4gICAgICAgICAgICBjdWx0dXJlOiBjdWx0dXJlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0T3BlcmF0aW9uKCdwYXNzd29yZC9yZXNldCcsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVxdWVzdE9wZXJhdGlvbjxELCBSPihvcGVyYXRpb246IHN0cmluZywgZGF0YTogRCk6IG5nLklIdHRwUHJvbWlzZTxSPiB7XHJcbiAgICAgICAgdmFyIGNvbmZpZzogbmcuSVJlcXVlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiB9LFxyXG4gICAgICAgICAgICB1cmw6IGAke3RoaXMuQXV0aGVudGljYXRpb25BcGlVUkx9LyR7b3BlcmF0aW9ufWAsXHJcbiAgICAgICAgICAgIGRhdGE6IFV0aWxzLlRyYW5zZm9ybUpzb25Ub0Zvcm1EYXRhKGRhdGEgYXMgYW55KVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHA8Uj4oY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlcXVlc3RTeW5jaHJvbm91c09wZXJhdGlvbjxEPihvcGVyYXRpb246IHN0cmluZywgZGF0YTogRCk6IGFueSB7XHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICByZXF1ZXN0Lm9wZW4oJ1BPU1QnLCBgJHt0aGlzLkF1dGhlbnRpY2F0aW9uQXBpVVJMfS8ke29wZXJhdGlvbn1gLCBmYWxzZSk7ICAvLyBgZmFsc2VgIG1ha2VzIHRoZSByZXF1ZXN0IHN5bmNocm9ub3VzXHJcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgIHJlcXVlc3Quc2VuZChVdGlscy5UcmFuc2Zvcm1Kc29uVG9Gb3JtRGF0YShkYXRhIGFzIGFueSkpO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG59XHJcbmRlY2xhcmUgaW50ZXJmYWNlIEFjY2Vzc1Rva2VuUmVxdWVzdCB7XHJcbiAgICBncmFudF90eXBlOiBzdHJpbmc7XHJcbiAgICBjbGllbnRfaWQ6IHN0cmluZztcclxuXHJcbiAgICBzY29wZT86IHN0cmluZztcclxuICAgIGNvZGU/OiBzdHJpbmc7XHJcbiAgICByZWRpcmVjdF91cmk/OiBzdHJpbmc7XHJcbiAgICB1c2VybmFtZT86IHN0cmluZztcclxuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xyXG4gICAgcmVmcmVzaF90b2tlbj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlblJlc3BvbnNlIHtcclxuICAgIGFjY2Vzc190b2tlbjogc3RyaW5nO1xyXG4gICAgdG9rZW5fdHlwZTogc3RyaW5nO1xyXG4gICAgZXhwaXJlc19pbjogbnVtYmVyO1xyXG4gICAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xyXG59XHJcbiIsIu+7v2ltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4vc2Vzc2lvblwiO1xyXG5pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IFV0aWxzLCBEYXRlVGltZSB9IGZyb20gXCJAZmlxYXMvdXRpbHNcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uQXBpU2VydmljZSwgQWNjZXNzVG9rZW5SZXNwb25zZSB9IGZyb20gXCIuL2F1dGhlbnRpY2F0aW9uQXBpU2VydmljZVwiO1xyXG5pbXBvcnQgeyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIH0gZnJvbSBcIi4vaXNQcm9jZXNzaW5nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBGaXFhc3Npc3RSb2xlIH0gZnJvbSBcIi4uL21vZGVscy91c2VyXCI7XHJcblxyXG5jb25zdCBDUkVERU5USUFMU0tFWSA9IFwiY3JlZGVudGlhbHNcIjtcclxuY29uc3QgVE9LRU5VU0VSID0gXCJ0b2tlblVzZXJcIjtcclxuY29uc3QgVE9LRU5LRVkgPSBcInRva2VuXCI7XHJcbmNvbnN0IFRPS0VORVhQSVJFID0gXCJ0b2tlbkV4cGlyZVwiO1xyXG5jb25zdCBSRUZSRVNIS0VZID0gXCJyZWZyZXNoXCI7XHJcbmNvbnN0IFJFRlJFU0hfTUFSR0lOID0gMzAwMDAwOyAvL21zO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogQXV0aGVudGljYXRpb25TZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvblNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwiQXV0aGVudGljYXRpb25TZXJ2aWNlXCJcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckcScpIHByaXZhdGUgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGFwaTogQXV0aGVudGljYXRpb25BcGlTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHNlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyR0aW1lb3V0JykgcHJpdmF0ZSAkdGltZW91dDogYW5ndWxhci5JVGltZW91dFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG4gICAgcHVibGljIGFzeW5jIGF1dGhlbnRpY2F0ZShjcmVkZW50aWFsczogeyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0sIHBlcnNpc3RlbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5BdXRoZW50aWNhdGUoY3JlZGVudGlhbHMpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRva2VuUmVzcG9uc2UoY3JlZGVudGlhbHMudXNlcm5hbWUsIHJlc3BvbnNlLmRhdGEsIHBlcnNpc3RlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9naW4oY3JlZGVudGlhbHMudXNlcm5hbWUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKHJlYXNvbikge1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoQ1JFREVOVElBTFNLRVkpO1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoVE9LRU5VU0VSKTtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFRPS0VOS0VZKTtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFRPS0VORVhQSVJFKTtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFJFRlJFU0hLRVkpO1xyXG4gICAgICAgICAgICB0aHJvdyByZWFzb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9nb3V0SGFuZGxlcnM6ICgoc2VuZGVyOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpID0+IGJvb2xlYW4gfCB2b2lkKVtdID0gW107XHJcblxyXG4gICAgcHVibGljIGFkZExvZ291dEhhbmRsZXIoaGFuZGxlcjogKHNlbmRlcjogQXV0aGVudGljYXRpb25TZXJ2aWNlKSA9PiBib29sZWFuIHwgdm9pZCkge1xyXG4gICAgICAgIGlmICghdGhpcy5sb2dvdXRIYW5kbGVycy5zb21lKGggPT4gaCA9PT0gaGFuZGxlcikpXHJcbiAgICAgICAgICAgIHRoaXMubG9nb3V0SGFuZGxlcnMucHVzaChoYW5kbGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlTG9nb3V0SGFuZGxlcihoYW5kbGVyOiAoc2VuZGVyOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpID0+IGJvb2xlYW4gfCB2b2lkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dvdXRIYW5kbGVycyA9IHRoaXMubG9nb3V0SGFuZGxlcnMuZmlsdGVyKGggPT4gaCAhPT0gaGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkxvZ291dCgpIHtcclxuICAgICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIGhhbmRsZXIgb2YgdGhpcy5sb2dvdXRIYW5kbGVycylcclxuICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZXIodGhpcykgPT09IHRydWUgfHwgaGFuZGxlZDtcclxuICAgICAgICByZXR1cm4gIWhhbmRsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2dpbkhhbmRsZXJzOiAoKHNlbmRlcjogQXV0aGVudGljYXRpb25TZXJ2aWNlLCB1c2VybmFtZTogc3RyaW5nKSA9PiBib29sZWFuIHwgdm9pZClbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBhZGRMb2dpbkhhbmRsZXIoaGFuZGxlcjogKHNlbmRlcjogQXV0aGVudGljYXRpb25TZXJ2aWNlLCB1c2VybmFtZTogc3RyaW5nKSA9PiBib29sZWFuIHwgdm9pZCkge1xyXG4gICAgICAgIGlmICghdGhpcy5sb2dpbkhhbmRsZXJzLnNvbWUoaCA9PiBoID09PSBoYW5kbGVyKSlcclxuICAgICAgICAgICAgdGhpcy5sb2dpbkhhbmRsZXJzLnB1c2goaGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUxvZ2luSGFuZGxlcihoYW5kbGVyOiAoc2VuZGVyOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpID0+IGJvb2xlYW4gfCB2b2lkKSB7XHJcbiAgICAgICAgdGhpcy5sb2dpbkhhbmRsZXJzID0gdGhpcy5sb2dpbkhhbmRsZXJzLmZpbHRlcihoID0+IGggIT09IGhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Mb2dpbih1c2VybmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBoYW5kbGVyIG9mIHRoaXMubG9naW5IYW5kbGVycykge1xyXG4gICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlcih0aGlzLCB1c2VybmFtZSkgPT09IHRydWUgfHwgaGFuZGxlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICFoYW5kbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBsb2dvdXQoZGVsYXlFdmVudDogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5jbGVhcihDUkVERU5USUFMU0tFWSk7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFRPS0VOVVNFUik7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFRPS0VOS0VZKTtcclxuICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoVE9LRU5FWFBJUkUpO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5jbGVhcihSRUZSRVNIS0VZKTtcclxuICAgICAgICBpZiAoZGVsYXlFdmVudClcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy4kdGltZW91dChkZWxheUV2ZW50KTtcclxuICAgICAgICB0aGlzLm9uTG9nb3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB1c2VybmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBjID0gdGhpcy5jcmVkZW50aWFscztcclxuICAgICAgICByZXR1cm4gYyA/IGMudXNlcm5hbWUgOiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdG9rZW4oKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgYyA9IHRoaXMuY3JlZGVudGlhbHM7XHJcbiAgICAgICAgcmV0dXJuIGMgJiYgYy50b2tlbiA/IGMudG9rZW4uYWNjZXNzX3Rva2VuIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExvb2tzdXAgdGhlIGNyZWRlbnRpYWxzIGluIGxvY2FsU3RvcmFnZSBvciBzZXNzaW9uU3RvcmFnZVxyXG4gICAgICpcclxuICAgICAqIHJldHVybnMgY3JlZGVudGlhbCBtZXRhIGRhdGFcclxuICAgICAqICAgICAgd2l0aCByZWZyZXNoIGtleVxyXG4gICAgICogICAgICBvcHRpb25hbHkgaWYgbm90IGV4cGlyZWQgd2l0aCB0b2tlbiBrZXlcclxuICAgICAqXHJcbiAgICAgKiByZXR1cm5zIHVuZGVmaW5lZCwgd2hlbiBubyBjcmVkZW50aWFscyBhcmUgZm91bmRcclxuICAgICAqXHJcbiAgICAgKiBAcmVhZG9ubHlcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAdHlwZSB7Q3JlZGVudGlhbHN9XHJcbiAgICAgKiBAbWVtYmVyb2YgQXV0aGVudGljYXRpb25TZXJ2aWNlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0IGNyZWRlbnRpYWxzKCk6IENyZWRlbnRpYWxzIHtcclxuICAgICAgICBsZXQgY3JlZCA9IHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZTxDcmVkZW50aWFscz4oQ1JFREVOVElBTFNLRVkpO1xyXG4gICAgICAgIGxldCB1c2VybmFtZSA9ICB0aGlzLnNlc3Npb24uZ2V0VmFsdWU8c3RyaW5nPihUT0tFTlVTRVIpO1xyXG4gICAgICAgIGlmIChjcmVkKSB7XHJcbiAgICAgICAgICAgIGxldCBleHBpcmU6IG51bWJlciA9IHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZTxudW1iZXI+KFRPS0VORVhQSVJFKTtcclxuICAgICAgICAgICAgaWYgKGNyZWQudXNlcm5hbWUgJiYgZXhwaXJlICE9PSB1bmRlZmluZWQgJiYgbmV3IERhdGUoZXhwaXJlKSA+IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgUkVGUkVTSF9NQVJHSU4pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcm5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRWYWx1ZTxzdHJpbmc+KFRPS0VOVVNFUiwgY3JlZC51c2VybmFtZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjcmVkLnRva2VuLmFjY2Vzc190b2tlbiA9IHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZTxzdHJpbmc+KFRPS0VOS0VZKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3JlZC51c2VybmFtZSA9PT0gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjcmVkLnRva2VuLmFjY2Vzc190b2tlbiA9IHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZTxzdHJpbmc+KFRPS0VOS0VZKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFRPS0VOS0VZKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoVE9LRU5FWFBJUkUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFRPS0VOS0VZKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jbGVhcihUT0tFTlVTRVIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFRPS0VORVhQSVJFKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcmVkLnRva2VuLnJlZnJlc2hfdG9rZW4gPSB0aGlzLnNlc3Npb24uZ2V0VmFsdWU8c3RyaW5nPihSRUZSRVNIS0VZKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVUb2tlblJlc3BvbnNlKHVzZXI6IHN0cmluZywgcmVzcG9uc2U6IEFjY2Vzc1Rva2VuUmVzcG9uc2UsIHBlcnNpc3RlbnQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIShyZXNwb25zZSAmJiByZXNwb25zZS5hY2Nlc3NfdG9rZW4gJiYgcmVzcG9uc2UucmVmcmVzaF90b2tlbiAmJiByZXNwb25zZS5leHBpcmVzX2luKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoVE9LRU5LRVkpO1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoVE9LRU5FWFBJUkUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoUkVGUkVTSEtFWSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jbGVhcihDUkVERU5USUFMU0tFWSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGV4cGlyZXMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIChyZXNwb25zZS5leHBpcmVzX2luICogMTAwMCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRWYWx1ZTxzdHJpbmc+KFRPS0VOS0VZLCByZXNwb25zZS5hY2Nlc3NfdG9rZW4sIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFZhbHVlPG51bWJlcj4oVE9LRU5FWFBJUkUsIGV4cGlyZXMsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFZhbHVlPHN0cmluZz4oUkVGUkVTSEtFWSwgcmVzcG9uc2UucmVmcmVzaF90b2tlbiwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRWYWx1ZTxDcmVkZW50aWFscz4oQ1JFREVOVElBTFNLRVksIHtcclxuICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXIsXHJcbiAgICAgICAgICAgIHRva2VuOiB7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBlcnNpc3RlbnQ6IHBlcnNpc3RlbnRcclxuICAgICAgICB9LCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRUb2tlbkhlYWRlcihjb25maWc6IG5nLklSZXF1ZXN0Q29uZmlnKTogbmcuSVJlcXVlc3RDb25maWcge1xyXG4gICAgICAgIHZhciB0b2tlbmRhdGEgPSB0aGlzLmNyZWRlbnRpYWxzICE9IG51bGwgPyB0aGlzLmNyZWRlbnRpYWxzLnRva2VuIDogbnVsbDtcclxuICAgICAgICBpZiAoISF0b2tlbmRhdGEgJiYgISF0b2tlbmRhdGEuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlbmRhdGEuYWNjZXNzX3Rva2VufWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2hlY2sgY3JlZGVudGlhbHMgbGlmZXRpbWUgYmVmb3JlIGFwaSBjYWxsc1xyXG4gICAgcHVibGljIEF1dGhlbnRpY2F0aW9uU2V0dGVyKGNvbmZpZzogbmcuSVJlcXVlc3RDb25maWcpOiBuZy5JUHJvbWlzZTxuZy5JUmVxdWVzdENvbmZpZz4ge1xyXG4gICAgICAgIHRoaXMuaXNBbGl2ZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRxPG5nLklSZXF1ZXN0Q29uZmlnPihyZXNvbHZlciA9PiByZXNvbHZlcih0aGlzLnNldFRva2VuSGVhZGVyKGNvbmZpZykpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBjcmVkZW50aWFscyBsaWZldGltZSAoYmVmb3JlIGFuZ3VsYXIgY29tcG9uZW50IGFjdGl2YXRpb24sICRjYW5BY3RpdmF0ZSlcclxuICAgIHB1YmxpYyBpc0FsaXZlKCkge1xyXG4gICAgICAgIHZhciB0b2tlbmRhdGEgPSB0aGlzLmNyZWRlbnRpYWxzICE9IG51bGwgPyB0aGlzLmNyZWRlbnRpYWxzLnRva2VuIDogbnVsbDtcclxuICAgICAgICBpZiAodG9rZW5kYXRhID09IG51bGwgfHwgdG9rZW5kYXRhLnJlZnJlc2hfdG9rZW4gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0b2tlbmRhdGEuYWNjZXNzX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHRoaXMuYXBpLlN5bmNocm9ub3VzUmVmcmVzaFRva2VuKHRva2VuZGF0YS5yZWZyZXNoX3Rva2VuKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVG9rZW5SZXNwb25zZSh0aGlzLnVzZXJuYW1lLCByZXNwb25zZSwgdGhpcy5jcmVkZW50aWFscy5wZXJzaXN0ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZVBhc3N3b3JkKHVzZXJOYW1lOiBzdHJpbmcsIG9sZFBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGN1bHR1cmU6IHN0cmluZyk6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5jaGFuZ2VQYXNzd29yZCh1c2VyTmFtZSwgb2xkUGFzc3dvcmQsIG5ld1Bhc3N3b3JkLCBjdWx0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlUGFzc3dvcmRXaXRoUmVzZXRUb2tlbih1c2VyTmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCByZXNldFRva2VuOiBzdHJpbmcsIGN1bHR1cmU6IHN0cmluZyk6IG5nLklQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5jaGFuZ2VQYXNzd29yZFdpdGhUb2tlbih1c2VyTmFtZSwgcGFzc3dvcmQsIHJlc2V0VG9rZW4sIGN1bHR1cmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFBhc3N3b3JkKGVtYWlsQWRkcmVzczogc3RyaW5nLCByZXNldExpbms6IHN0cmluZywgY3VsdHVyZTogc3RyaW5nKTogbmcuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc2V0UGFzc3dvcmQoZW1haWxBZGRyZXNzLCByZXNldExpbmssIGN1bHR1cmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQXV0aGVudGljYXRpb25DaGVjayA9IGZ1bmN0aW9uIEF1dGhlbnRpY2F0aW9uQ2hlY2soQXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsICRyb290Um91dGVyOiBhbmd1bGFyLlJvdXRlciwgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsIElzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UpIHtcclxuICAgICAgICB2YXIgaXNBbGl2ZSA9IEF1dGhlbnRpY2F0aW9uU2VydmljZS5pc0FsaXZlKCk7XHJcbiAgICAgICAgaWYgKCFpc0FsaXZlKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gJGxvY2F0aW9uLnVybCgpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudC5pbmRleE9mKFwiL25ld3Bhc3N3b3JkXCIpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IGN1cnJlbnQuaW5kZXhPZihcIi9mb3Jnb3RwYXNzd29yZFwiKSA+PSAwXHJcbiAgICAgICAgICAgICAgICB8fCBjdXJyZW50LmluZGV4T2YoXCIvbG9naW5cIikgPj0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQ6IGFueVtdID0gWydMb2dpbiddO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudC5pbmRleE9mKFwiL2xvZ2luXCIpID09IC0xICYmIGN1cnJlbnQubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5jb25jYXQoeyBzb3VyY2U6IGVuY29kZVVSSUNvbXBvbmVudCgkbG9jYXRpb24udXJsKCkpIH0pXHJcblxyXG4gICAgICAgICAgICB2YXIgaW5zdHVjdGlvbiA9ICRyb290Um91dGVyLmdlbmVyYXRlKHRhcmdldCk7XHJcbiAgICAgICAgICAgIElzUHJvY2Vzc2luZ1NlcnZpY2UucmVzZXQoKTtcclxuICAgICAgICAgICAgJHJvb3RSb3V0ZXIubmF2aWdhdGVCeUluc3RydWN0aW9uKGluc3R1Y3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBbGl2ZTtcclxuICAgIH1cclxufVxyXG5BdXRoZW50aWNhdGlvblNlcnZpY2UuQXV0aGVudGljYXRpb25DaGVjay4kaW5qZWN0ID0gWydBdXRoZW50aWNhdGlvblNlcnZpY2UnLCAnJHJvb3RSb3V0ZXInLCAnJGxvY2F0aW9uJywgJ0lzUHJvY2Vzc2luZ1NlcnZpY2UnXVxyXG5cclxuXHJcbmRlY2xhcmUgaW50ZXJmYWNlIENyZWRlbnRpYWxzIHtcclxuICAgIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgICB0b2tlbjoge1xyXG4gICAgICAgIGFjY2Vzc190b2tlbj86IHN0cmluZztcclxuICAgICAgICByZWZyZXNoX3Rva2VuPzogc3RyaW5nO1xyXG4gICAgfSxcclxuICAgIHBlcnNpc3RlbnQ6IGJvb2xlYW5cclxufVxyXG4iLCLvu79pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuL3Nlc3Npb25cIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBVdGlscywgRGF0ZVRpbWUgfSBmcm9tIFwiQGZpcWFzL3V0aWxzXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkFwaVNlcnZpY2UsIEFjY2Vzc1Rva2VuUmVzcG9uc2UgfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbkFwaVNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSXNQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gXCIuL2lzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgRmlxYXNzaXN0Um9sZSwgVXNlciB9IGZyb20gXCIuLi9tb2RlbHMvdXNlclwiO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RhcnRSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWxzL2hvbWVcIjtcclxuaW1wb3J0IHsgRnFzU2VydmljZSB9IGZyb20gXCIuL2Zxc1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgRmlxYXNzaXN0QXBpVVJMIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBQYXJzZWRSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWxzL2Jhc2VcIjtcclxuaW1wb3J0ICogYXMgUnggZnJvbSBcInJ4anMvUnhcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzL09ic2VydmFibGVcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anMvU3Vic2NyaXB0aW9uXCI7XHJcbmltcG9ydCB7IFNhdmVEaWFsb2cgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9nZW5lcmFsL3NhdmVkaWFsb2dcIjtcclxuXHJcbmNvbnN0IFJPTEVLRVk6IHN0cmluZyA9IFwiQXV0aG9yaXphdGlvbkN1cnJlbnRSb2xlS2V5XCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBBdXRob3JpemF0aW9uU2VydmljZS5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aG9yaXphdGlvblNlcnZpY2UgZXh0ZW5kcyBGcXNTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcIkF1dGhvcml6YXRpb25TZXJ2aWNlXCJcclxuICAgIHByaXZhdGUgcm9sZUNoYW5nZWRTdWJqZWN0OiBSeC5TdWJqZWN0PHsgbmV3Um9sZTogRmlxYXNzaXN0Um9sZSwgb2xkUm9sZTogRmlxYXNzaXN0Um9sZSB9PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBzYXZlRGlhbG9nOiBTYXZlRGlhbG9nLFxyXG4gICAgICAgIEBJbmplY3QoJyRxJykgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRodHRwJykgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHNlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ0ZpcWFzc2lzdEFwaVVSTCcpIHByaXZhdGUgRmlxYXNzaXN0QXBpVVJMOiBGaXFhc3Npc3RBcGlVUkwsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigkcSwgJGh0dHApO1xyXG4gICAgICAgIHRoaXMuZG9TZXRCZWFyZXIoYyA9PiB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5BdXRoZW50aWNhdGlvblNldHRlcihjKSlcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5hZGRMb2dpbkhhbmRsZXIoKHNlbmRlciwgdXNlcm5hbWU6IHN0cmluZykgPT4gdGhpcy5pbml0KHVzZXJuYW1lKSk7XHJcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuYWRkTG9nb3V0SGFuZGxlcigoKSA9PiB7O1xyXG4gICAgICAgICAgICB0aGlzLl9sb3dyb2xlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFJPTEVLRVkpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaWdocm9sZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3JvbGVzID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJvbGVDaGFuZ2VkU3ViamVjdCA9IG5ldyBSeC5TdWJqZWN0PHsgbmV3Um9sZTogRmlxYXNzaXN0Um9sZSwgb2xkUm9sZTogRmlxYXNzaXN0Um9sZSB9PigpO1xyXG4gICAgICAgIHRoaXMuaW5pdCh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS51c2VybmFtZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGxvYWRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Um9sZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5yb2xlcyAhPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGluaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfb25Mb2FkZWQ6IG5nLklRUmVzb2x2ZVJlamVjdDx2b2lkPjtcclxuICAgIHB1YmxpYyByb2xlTG9hZGVkOiBhbmd1bGFyLklQcm9taXNlPHZvaWQ+O1xyXG4gICAgcHJpdmF0ZSBpbml0KHVzZXJuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25Mb2FkZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6aW5nIHx8IHRoaXMubG9hZGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb2xlTG9hZGVkID0gdGhpcy4kcTx2b2lkPihyZXNvbHZlciA9PiB0aGlzLl9vbkxvYWRlZCA9IHJlc29sdmVyKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnQodXNlcm5hbWUpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICAodXNlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByb2xlcyA9IHVzZXIuYXV0aG9yaXplZEZpcWFzc2lzdFJvbGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyb2xlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb2xlcyA9IHJvbGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcm9sZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvd3JvbGUgPSByb2xlc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hyb2xlID0gcm9sZXNbcm9sZXMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFJvbGUgPT0gbnVsbCB8fCByb2xlcy5pbmRleE9mKHRoaXMuY3VycmVudFJvbGUpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFZhbHVlKFJPTEVLRVksIHJvbGVzLmZpbHRlcihyb2xlID0+IHJvbGUudG9VcHBlckNhc2UoKSA9PT0gdXNlci5maXFhc3Npc3RSb2xlLnRvVXBwZXJDYXNlKCkpWzBdLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZUNoYW5nZWRTdWJqZWN0Lm5leHQoeyBuZXdSb2xlOiB0aGlzLmN1cnJlbnRSb2xlLCBvbGRSb2xlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb3dyb2xlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jbGVhcihST0xFS0VZKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hyb2xlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvd3JvbGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoUk9MRUtFWSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hyb2xlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9sZXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkxvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9sb3dyb2xlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmNsZWFyKFJPTEVLRVkpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaWdocm9sZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3JvbGVzID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fb25Mb2FkZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBSb2xlQ2hlY2sgPSBmdW5jdGlvbiBSb2xlQ2hlY2soYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsICRyb290Um91dGVyOiBhbmd1bGFyLlJvdXRlciwgJGxvY2F0aW9uOiBhbmd1bGFyLklMb2NhdGlvblNlcnZpY2UsIElzUHJvY2Vzc2luZ1NlcnZpY2U6IElzUHJvY2Vzc2luZ1NlcnZpY2UsIEF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSkge1xyXG4gICAgICAgIHJldHVybiBBdXRoZW50aWNhdGlvblNlcnZpY2UuQXV0aGVudGljYXRpb25DaGVjayhhdXRoZW50aWNhdGlvblNlcnZpY2UsICRyb290Um91dGVyLCAkbG9jYXRpb24sIElzUHJvY2Vzc2luZ1NlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNoZWNrIGNyZWRlbnRpYWxzIGxpZmV0aW1lIGJlZm9yZSBhcGkgY2FsbHNcclxuICAgIHB1YmxpYyBSb2xlSGVhZGVyU2V0dGVyKGNvbmZpZzogbmcuSVJlcXVlc3RDb25maWcpOiBuZy5JUHJvbWlzZTxuZy5JUmVxdWVzdENvbmZpZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRxPG5nLklSZXF1ZXN0Q29uZmlnPihyZXNvbHZlciA9PiByZXNvbHZlcih0aGlzLnNldFJvbGVIZWFkZXIoY29uZmlnKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0Um9sZUhlYWRlcihjb25maWc6IG5nLklSZXF1ZXN0Q29uZmlnKTogbmcuSVJlcXVlc3RDb25maWcge1xyXG4gICAgICAgIGlmICghIXRoaXMuY3VycmVudFJvbGUpIHtcclxuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbXCJGaXFhc3Npc3QtUm9sZVwiXSA9IGAke3RoaXMuY3VycmVudFJvbGV9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3VycmVudFJvbGVJbihyb2xlczogRmlxYXNzaXN0Um9sZVtdKSB7XHJcbiAgICAgICAgcmV0dXJuIHJvbGVzLnNvbWUociA9PiByID09IHRoaXMuY3VycmVudFJvbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFJvbGUoKTogRmlxYXNzaXN0Um9sZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZShST0xFS0VZKSBhcyBGaXFhc3Npc3RSb2xlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfbG93cm9sZTogRmlxYXNzaXN0Um9sZTtcclxuICAgIHB1YmxpYyBnZXQgbG93Um9sZSgpOiBGaXFhc3Npc3RSb2xlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG93cm9sZTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2hpZ2hyb2xlOiBGaXFhc3Npc3RSb2xlO1xyXG4gICAgcHVibGljIGdldCBoaWdoUm9sZSgpOiBGaXFhc3Npc3RSb2xlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGlnaHJvbGU7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9yb2xlczogRmlxYXNzaXN0Um9sZVtdO1xyXG4gICAgcHVibGljIGdldCByb2xlcygpOiBGaXFhc3Npc3RSb2xlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb2xlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzd2l0Y2hSb2xlKHJvbGU6IEZpcWFzc2lzdFJvbGUgfCBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURpYWxvZy5TYXZlKCkudGhlbihcclxuICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09PSBTYXZlRGlhbG9nLkRpc2NhcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoUm9sZShyb2xlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGV2YXRlZCA9ICB0aGlzLl9oaWdocm9sZSA9PT0gdGhpcy5jdXJyZW50Um9sZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWxldmF0ZWQgPSBudWxsOyAvLyB0cmlnZ2VyIGdldCBiaW5kZXJzXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvbGQgPSB0aGlzLmN1cnJlbnRSb2xlO1xyXG4gICAgICAgIGlmIChyb2xlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Um9sZSAhPT0gdGhpcy5fbG93cm9sZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFZhbHVlKFJPTEVLRVksIHRoaXMuX2xvd3JvbGUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvbGVDaGFuZ2VkU3ViamVjdC5uZXh0KHsgbmV3Um9sZTogdGhpcy5jdXJyZW50Um9sZSwgb2xkUm9sZTogb2xkIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRSb2xlICE9PSB0aGlzLl9oaWdocm9sZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFZhbHVlKFJPTEVLRVksIHRoaXMuX2hpZ2hyb2xlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlQ2hhbmdlZFN1YmplY3QubmV4dCh7IG5ld1JvbGU6IHRoaXMuY3VycmVudFJvbGUsIG9sZFJvbGU6IG9sZCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcm9sZXMgJiYgdGhpcy5fcm9sZXMubGVuZ3RoID4gMCAmJiB0aGlzLl9yb2xlcy5pbmRleE9mKHJvbGUpID49IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFJvbGUgIT09IHJvbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRWYWx1ZShST0xFS0VZLCByb2xlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlQ2hhbmdlZFN1YmplY3QubmV4dCh7IG5ld1JvbGU6IHRoaXMuY3VycmVudFJvbGUsIG9sZFJvbGU6IG9sZCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJvbGUgbm90IGZvdW5kXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9lbGV2YXRlZCA9ICB0aGlzLl9oaWdocm9sZSA9PT0gdGhpcy5jdXJyZW50Um9sZTtcclxuICAgICAgICB0aGlzLmVsZXZhdGVkID0gbnVsbDsgLy8gdHJpZ2dlciBnZXQgYmluZGVyc1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfZWxldmF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBnZXQgZWxldmF0ZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9lbGV2YXRlZDsgfVxyXG4gICAgcHVibGljIHNldCBlbGV2YXRlZCh2YWw6IGJvb2xlYW4pIHsgfVxyXG5cclxuICAgIHB1YmxpYyBvblJvbGVDaGFuZ2VkKG9uTmV4dDogKG5leHQ6IHsgbmV3Um9sZTogRmlxYXNzaXN0Um9sZSwgb2xkUm9sZTogRmlxYXNzaXN0Um9sZSB9KSA9PiB2b2lkKTogU3Vic2NyaXB0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb2xlQ2hhbmdlZFN1YmplY3Quc3Vic2NyaWJlKG9uTmV4dCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhcnQodXNlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8dm9pZCwgVXNlcj4oXCJHRVRcIiwgYCR7dGhpcy5GaXFhc3Npc3RBcGlVUkx9L3VzZXIvJHt1c2VyfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNGaXFhc0VtcGxveWVlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRSb2xlSW4oW1wiU0RcIiwgXCJGUVNcIl0pO1xyXG4gICAgfVxyXG59XHJcbkF1dGhvcml6YXRpb25TZXJ2aWNlLlJvbGVDaGVjay4kaW5qZWN0ID0gWydBdXRoZW50aWNhdGlvblNlcnZpY2UnLCAnJHJvb3RSb3V0ZXInLCAnJGxvY2F0aW9uJywgJ0lzUHJvY2Vzc2luZ1NlcnZpY2UnLCAnQXV0aG9yaXphdGlvblNlcnZpY2UnXTtcclxuIiwi77u/aW1wb3J0IHsgRklRQXNzaXN0ICB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBDYWNoZVNlcnZpY2Uuc2VsZWN0b3JcclxufSlcclxuLyoqXHJcbiAqIENhY2hlIGNsYXNzLCBzdG9yZXMgdmFsdWVzIGFzIEpTT04gaW4gbWVtb3J5LlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENhY2hlU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yID0gXCJDYWNoZVwiIFxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgY2FjaGVkaXRlbXM6IENhY2hlSXRlbVtdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogR2V0IGEgdmFsdWUgYnkga2V5LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cclxuICAgICAqIEByZXR1cm5zIFQgSXRlbSBmcm9tIHNlc3Npb24gb3IgbnVsbCBpZiBub3QgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRWYWx1ZTxUPihrZXk6IHN0cmluZyk6IFQge1xyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gQ2FjaGVTZXJ2aWNlLmNhY2hlZGl0ZW1zLmZpbHRlcih4ID0+IHgua2V5ID09IGtleSkuc2hpZnQoKTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxUPmVudHJ5LnZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogU3RvcmUgYSB2YWx1ZSBpbiB0aGUgc2Vzc2lvbi5cclxuICAgICogQHBhcmFtICB7c3RyaW5nfSBrZXkgVGhlIGtleSB0byBzdG9yZSB0aGUgdmFsdWUgd2l0aC5cclxuICAgICogQHBhcmFtICB7VH0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0b3JlLlxyXG4gICAgKi9cclxuICAgIHB1YmxpYyBzZXRWYWx1ZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQpIHtcclxuICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IENhY2hlU2VydmljZS5jYWNoZWRpdGVtcy5maWx0ZXIoeCA9PiB4LmtleSA9PSBrZXkpLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xyXG4gICAgICAgICAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBDYWNoZVNlcnZpY2UuY2FjaGVkaXRlbXMucHVzaCg8Q2FjaGVJdGVtPnsga2V5OiBrZXksIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENsZWFyIGEgdmFsdWUgYnkga2V5LCBvciBhbGwgdmFsdWVzIGlmIGtleSBpcyBvbWl0dGVkLlxyXG4gICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IE9wdGlvbmFsIGtleSBvZiB2YWx1ZSB0byByZW1vdmUuXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGNsZWFyKGtleT86IHN0cmluZykge1xyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gQ2FjaGVTZXJ2aWNlLmNhY2hlZGl0ZW1zLmZpbHRlcih4ID0+IHgua2V5ID09IGtleSkuc2hpZnQoKTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIENhY2hlU2VydmljZS5jYWNoZWRpdGVtcyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIENhY2hlSXRlbSB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIHZhbHVlOiBhbnk7XHJcbn0iLCLvu79pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4vbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9UcmFuc2xhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ1NoYXJwRXhjZXB0aW9uLCBQYXJzZWRSZXN1bHQsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWxzL2Jhc2VcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwiLi4vY29tcG9uZW50cy9hcHBsaWNhdGlvblwiO1xyXG5pbXBvcnQgeyBTdGFydFZlcnNpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3ZlcnNpb25cIjtcclxuXHJcbmV4cG9ydCB0eXBlIGRpYWxvZ1R5cGUgPSAnaW5mbycgfCAnd2FybmluZycgfCAnZXJyb3InO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogRGlhbG9nU2VydmljZS5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yOiBzdHJpbmcgPSAnZGlhbG9nTWFuYWdlcic7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHVpYk1vZGFsJykgcHJpdmF0ZSAkbW9kYWw6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgbG9nU2VydmljZTogTG9nU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNob3dNZXNzYWdlRGlhbG9nKHR5cGU6IGRpYWxvZ1R5cGUsIHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZ1xyXG4gICAgICAgICwgeyB0aXRsZUFyZ3MsIG1lc3NhZ2VBcmdzLCB0cmFuc2xhdGUsIG9uY2xvc2UgfVxyXG4gICAgICAgICAgICA6IHsgdGl0bGVBcmdzPzogc3RyaW5nW10sIG1lc3NhZ2VBcmdzPzogc3RyaW5nW10sIHRyYW5zbGF0ZT86IGJvb2xlYW4sIGVycm9yUmVzdWx0PzogUGFyc2VkUmVzdWx0LCBvbmNsb3NlPzogKCkgPT4gdm9pZCB9XHJcbiAgICAgICAgICAgID0geyB0cmFuc2xhdGU6IHRydWUgfSkge1xyXG4gICAgICAgIGlmICh0cmFuc2xhdGUpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSB0aXRsZUFyZ3MgPyB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5Gb3JtYXQodGl0bGUsIHRpdGxlQXJncykgOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUodGl0bGUpO1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZUFyZ3MgPyB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5Gb3JtYXQobWVzc2FnZSwgbWVzc2FnZUFyZ3MpIDogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4kbW9kYWwub3Blbih7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAnbWVzc2FnZURpYWxvZy5odG1sJyxcclxuICAgICAgICAgICAgY29udHJvbGxlckFzOiBcIiRtZXNzYWdlTW9kYWxcIixcclxuICAgICAgICAgICAgY29udHJvbGxlcjogTWVzc2FnZUJveCxcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmNsb3NlOiAob25jbG9zZSkgPyBvbmNsb3NlIDogKCkgPT4ge31cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc2hvd0NvbmZpcm1hdGlvbkRpYWxvZyh0eXBlOiBkaWFsb2dUeXBlLCB0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbk9rPzogc3RyaW5nLCBidXR0b25DYW5jZWw/OiBzdHJpbmdcclxuICAgICAgICAsIHsgdGl0bGVBcmdzLCBtZXNzYWdlQXJncywgdHJhbnNsYXRlLCBvbmNsb3NlLCBvbmRpc21pc3MgfVxyXG4gICAgICAgICAgICAgICAgOiB7IHRpdGxlQXJncz86IHN0cmluZ1tdLCBtZXNzYWdlQXJncz86IHN0cmluZ1tdLCB0cmFuc2xhdGU/OiBib29sZWFuLCBlcnJvclJlc3VsdD86IFBhcnNlZFJlc3VsdCwgb25jbG9zZT86ICgpID0+IHZvaWQsIG9uZGlzbWlzcz86ICgpID0+IHZvaWQgfVxyXG4gICAgICAgICAgICAgICAgPSB7IHRyYW5zbGF0ZTogdHJ1ZSB9KSB7XHJcbiAgICAgICAgaWYgKHRyYW5zbGF0ZSkge1xyXG4gICAgICAgICAgICB0aXRsZSA9IHRpdGxlQXJncyA/IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLkZvcm1hdCh0aXRsZSwgdGl0bGVBcmdzKSA6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZSh0aXRsZSk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlQXJncyA/IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLkZvcm1hdChtZXNzYWdlLCBtZXNzYWdlQXJncykgOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGJ1dHRvbk9rID0gYnV0dG9uT2sgPyB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoYnV0dG9uT2spOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoJ0RJQUxPR19DT05GSVJNX09LJyk7XHJcbiAgICAgICAgICAgIGJ1dHRvbkNhbmNlbCA9IGJ1dHRvbkNhbmNlbCA/IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShidXR0b25DYW5jZWwpOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoJ0RJQUxPR19DT05GSVJNX0NBTkNFTCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJG1vZGFsLm9wZW4oe1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZVVybDogJ2NvbmZpcm1hdGlvbkRpYWxvZy5odG1sJyxcclxuICAgICAgICAgICAgY29udHJvbGxlckFzOiBcIiRjb25maXJtYXRpb25Nb2RhbFwiLFxyXG4gICAgICAgICAgICBjb250cm9sbGVyOiBDb25maXJtYXRpb25Cb3gsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uT2s6IGJ1dHRvbk9rLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25DYW5jZWw6IGJ1dHRvbkNhbmNlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25jbG9zZTogKG9uY2xvc2UpID8gb25jbG9zZSA6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmRpc21pc3M6IChvbmRpc21pc3MpID8gb25kaXNtaXNzIDogKCkgPT4ge31cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5yZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNob3dFcnJvckRpYWxvZyh0eXBlOiBkaWFsb2dUeXBlLCB0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmdcclxuICAgICAgICAsIHsgaW5mb3JtYXRpb24sIHRpdGxlQXJncywgbWVzc2FnZUFyZ3MsIGluZm9ybWF0aW9uQXJncywgdHJhbnNsYXRlLCBlcnJvclJlc3VsdCB9XHJcbiAgICAgICAgICAgIDogeyBpbmZvcm1hdGlvbj86IHN0cmluZywgdGl0bGVBcmdzPzogc3RyaW5nW10sIG1lc3NhZ2VBcmdzPzogc3RyaW5nW10sIGluZm9ybWF0aW9uQXJncz86IHN0cmluZ1tdLCB0cmFuc2xhdGU/OiBib29sZWFuLCBlcnJvclJlc3VsdD86IFBhcnNlZFJlc3VsdCB9XHJcbiAgICAgICAgICAgID0geyB0cmFuc2xhdGU6IHRydWUgfSkge1xyXG5cclxuICAgICAgICBpZiAodHJhbnNsYXRlKSB7XHJcbiAgICAgICAgICAgIHRpdGxlID0gdGl0bGVBcmdzID8gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuRm9ybWF0KHRpdGxlLCB0aXRsZUFyZ3MpIDogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VBcmdzID8gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuRm9ybWF0KG1lc3NhZ2UsIG1lc3NhZ2VBcmdzKSA6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLlRyYW5zbGF0ZShtZXNzYWdlKTtcclxuICAgICAgICAgICAgaW5mb3JtYXRpb24gPSBpbmZvcm1hdGlvbkFyZ3MgPyB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5Gb3JtYXQoaW5mb3JtYXRpb24sIGluZm9ybWF0aW9uQXJncykgOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoaW5mb3JtYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4kbW9kYWwub3Blbih7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsOiAnZXJyb3JEaWFsb2cuaHRtbCcsXHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXJBczogXCIkZXJyb3JNb2RhbFwiLFxyXG4gICAgICAgICAgICBjb250cm9sbGVyOiBFcnJvckJveCxcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb246IChlcnJvclJlc3VsdCAmJiBlcnJvclJlc3VsdC5leGNlcHRpb24pID8gZXJyb3JSZXN1bHQuZXhjZXB0aW9uIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogKGVycm9yUmVzdWx0ICYmIGVycm9yUmVzdWx0LnZhbGlkYXRpb24pID8gZXJyb3JSZXN1bHQudmFsaWRhdGlvbiA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcXJlcXVlc3RpZDogKGVycm9yUmVzdWx0ICYmIGVycm9yUmVzdWx0LnNlcXJlcXVlc3RpZCkgPyBlcnJvclJlc3VsdC5zZXFyZXF1ZXN0aWQgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXF1cmw6IChlcnJvclJlc3VsdCAmJiBlcnJvclJlc3VsdC5zZXF1cmwpID8gZXJyb3JSZXN1bHQuc2VxdXJsIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzaG93QWJvdXQoYXBwbGljYXRpb246IEFwcGxpY2F0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJG1vZGFsLm9wZW4oe1xyXG4gICAgICAgICAgICBhbmltYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVVybDogJ2Fib3V0RGlhbG9nLmh0bWwnLFxyXG4gICAgICAgICAgICBjb250cm9sbGVyOiBBYm91dENvbXBvbmVudCxcclxuICAgICAgICAgICAgY29udHJvbGxlckFzOiAnJG1vZGFsJyxcclxuICAgICAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogKCkgPT4gYXBwbGljYXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJveCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdWliTW9kYWxJbnN0YW5jZScpIHByaXZhdGUgJG1vZGFsSW5zdGFuY2U6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2VJbnN0YW5jZSxcclxuICAgICAgICBASW5qZWN0KCdkYXRhJykgcHVibGljIGRhdGE6IHsgdHlwZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIG9uY2xvc2U6ICgpID0+IHZvaWQgfVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIE9rKCkge1xyXG4gICAgICAgIHRoaXMuJG1vZGFsSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmRhdGEub25jbG9zZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uZmlybWF0aW9uQm94IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbEluc3RhbmNlJykgcHJpdmF0ZSAkbW9kYWxJbnN0YW5jZTogYW5ndWxhci51aS5ib290c3RyYXAuSU1vZGFsU2VydmljZUluc3RhbmNlLFxyXG4gICAgICAgIEBJbmplY3QoJ2RhdGEnKSBwdWJsaWMgZGF0YTogeyB0eXBlOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgYnV0dG9uT2s6IHN0cmluZywgYnV0dG9uQ2FuY2VsOiBzdHJpbmcsIG9uY2xvc2U6ICgpID0+IHZvaWQgfSxcclxuICAgICAgICBASW5qZWN0KCckd2luZG93JykgcHJpdmF0ZSAkd2luZG93OiBuZy5JV2luZG93U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgLy8gbWFudWFsbHkgcmVtb3ZlIHRoZSAnbW9kYWwtb3BlbicgY2xhc3MsIGFzIHRoZSAkdWliTW9kYWwgZG9lcyBub3QgZG8gdGhpcyBjb3JyZWN0bHkgd2hlbiB0aGUgdGhlIGJpZyBlZGl0b3JzY3JlZW4gaXMgb3BlbiB0b28uXHJcbiAgICAgICAgdGhpcy4kbW9kYWxJbnN0YW5jZS5jbG9zZWQudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiR3aW5kb3cuZG9jdW1lbnQuYm9keSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kd2luZG93LmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbW9kYWwtb3BlbicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIE9rKCkge1xyXG4gICAgICAgIHRoaXMuJG1vZGFsSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmRhdGEub25jbG9zZSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIENhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLiRtb2RhbEluc3RhbmNlLmRpc21pc3MoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVycm9yQm94IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyR1aWJNb2RhbEluc3RhbmNlJykgcHJpdmF0ZSAkbW9kYWxJbnN0YW5jZTogYW5ndWxhci51aS5ib290c3RyYXAuSU1vZGFsU2VydmljZUluc3RhbmNlLFxyXG4gICAgICAgIEBJbmplY3QoJ2RhdGEnKSBwdWJsaWMgZGF0YTogeyBlcnJvcjogRXJyb3IsIHZhbGlkYXRpb246IFZhbGlkYXRpb25SZXN1bHQsIGV4Y2VwdGlvbjogQ1NoYXJwRXhjZXB0aW9uLCBzZXFyZXF1ZXN0aWQ6IHN0cmluZywgc2VxdXJsOiBzdHJpbmcgfSxcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93SW5mb3JtYXRpb246IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIE9rKCkge1xyXG4gICAgICAgIHRoaXMuJG1vZGFsSW5zdGFuY2UuY2xvc2UoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFib3V0Q29tcG9uZW50IHtcclxuICAgIHN0YXRpYyBjb250cm9sbGVySWQgPSAnQWJvdXRDb21wb25lbnQnO1xyXG4gICAgcHVibGljIGFwaVZlcnNpb246IFN0YXJ0VmVyc2lvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckdWliTW9kYWxJbnN0YW5jZScpIHByaXZhdGUgJG1vZGFsSW5zdGFuY2U6IGFuZ3VsYXIudWkuYm9vdHN0cmFwLklNb2RhbFNlcnZpY2VJbnN0YW5jZSxcclxuICAgICAgICBASW5qZWN0KCdwYWdlJykgcHVibGljIHBhZ2U6IEFwcGxpY2F0aW9uXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmFwaVZlcnNpb24gPSBwYWdlLmFwaVZlcnNpb25cclxuICAgICAgICBpZiAoIXRoaXMuYXBpVmVyc2lvbikge1xyXG4gICAgICAgICAgICBwYWdlLnJlY2lldmVBcGlWZXJzaW9uKCh2YWx1ZTogU3RhcnRWZXJzaW9uKSA9PiB0aGlzLmFwaVZlcnNpb24gPSB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBDbG9zZSgpIHtcclxuICAgICAgICB0aGlzLiRtb2RhbEluc3RhbmNlLmNsb3NlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcidcclxuaW1wb3J0IHsgQ29tcGFjdFNlcnZpY2VDYXNlIH0gZnJvbSBcIi4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9UcmFuc2xhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tICcuL2F1dGhvcml6YXRpb25TZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IEV4cG9ydFNlcnZpY2Uuc2VsZWN0b3JcclxufSlcclxuZXhwb3J0IGNsYXNzIEV4cG9ydFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwiRXhwb3J0U2VydmljZVwiXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByaXZhdGUgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlRXhjZWxGcm9tSnNvbihjb250ZW50OiBDb21wYWN0U2VydmljZUNhc2VbXSwgcGFyYW1zOiBhbnkpIHtcclxuICAgICAgICBsZXQgZmlsZU5hbWVQcmVzZW50ID0gcGFyYW1zICYmIHBhcmFtcy5maWxlTmFtZSAmJiBwYXJhbXMuZmlsZU5hbWUubGVuZ3RoICE9PSAwO1xyXG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBsZXQgZm9ybWF0dGVkRGF0ZSA9IFtkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCksIGRhdGUuZ2V0VVRDSG91cnMoKSwgZGF0ZS5nZXRVVENNaW51dGVzKCksIGRhdGUuZ2V0VVRDU2Vjb25kcygpXS5qb2luKCcnKTtcclxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBmaWxlTmFtZVByZXNlbnQgPyBwYXJhbXMuZmlsZU5hbWUgOiBgRklRQXNzaXN0UmVzdWx0c0V4cG9ydCR7Zm9ybWF0dGVkRGF0ZX1gO1xyXG5cclxuICAgICAgICBsZXQgd29ya2Jvb2tzaGVldCA9IHRoaXMuY2FzZXNfdG9fc2hlZXQoY29udGVudCk7XHJcbiAgICAgICAgdmFyIHdvcmtib29rOiBYTFNYLldvcmtCb29rID0geyBTaGVldE5hbWVzOiBbXCJTaGVldEpTXCJdLCBTaGVldHM6IHsgU2hlZXRKUzogd29ya2Jvb2tzaGVldCB9IH07XHJcbiAgICAgICAgbGV0IHdib3V0ID0gWExTWC53cml0ZSh3b3JrYm9vaywgeyBib29rVHlwZTogJ3hsc3gnLCB0eXBlOiAnYmluYXJ5JywgY2VsbERhdGVzOiB0cnVlIH0pO1xyXG4gICAgICAgIHNhdmVBcyhuZXcgQmxvYihbdGhpcy5zMmFiKHdib3V0KV0sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIiB9KSwgZmlsZU5hbWUgKyBcIi54bHN4XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHMyYWIocykge1xyXG4gICAgICAgIGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIocy5sZW5ndGgpO1xyXG4gICAgICAgIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBzLmxlbmd0aDsgKytpKSB2aWV3W2ldID0gcy5jaGFyQ29kZUF0KGkpICYgMHhGRjtcclxuICAgICAgICByZXR1cm4gYnVmO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYXNlc190b19zaGVldChjYXNlczogQ29tcGFjdFNlcnZpY2VDYXNlW10sIG9wdHM/KTogWExTWC5TaGVldCB7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBvcHRzIHx8IHt9O1xyXG4gICAgICAgIHZhciB3b3Jrc2hlZXQgPSAoe30pO1xyXG4gICAgICAgIGxldCBjZWxsID0ge307XHJcbiAgICAgICAgdmFyIHJhbmdlOiBYTFNYLlJhbmdlID0gKHsgczogeyBjOiAwLCByOiAwIH0sIGU6IHsgYzogMCwgcjogY2FzZXMubGVuZ3RoIH0gfSk7XHJcbiAgICAgICAgdmFyIGhlYWRlcnMgPSB0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlLmN1cnJlbnRSb2xlSW4oW1wiRlFTXCIsIFwiU0RcIl0pID8gW1xyXG4gICAgICAgICAgICBcImNhc2VOdW1iZXJcIixcclxuICAgICAgICAgICAgXCJwYXJlbnRDYXNlTnVtYmVyXCIsXHJcbiAgICAgICAgICAgIFwiZmlxYXNPd25lcnNoaXBEZXNjXCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIFwiY2FzZU93bmVyc2hpcFwiLCAvLyBbXCJGUVNcIiwgXCJTRFwiXVxyXG4gICAgICAgICAgICBcInN0YXJ0XCIsXHJcbiAgICAgICAgICAgIFwibW9kaWZpZWRPblwiLCAvLyBbXCJGUVNcIiwgXCJTRFwiXVxyXG4gICAgICAgICAgICBcInRpdGxlXCIsXHJcbiAgICAgICAgICAgIFwiY2FzZUNhdXNlXCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIFwic3BUc1Rhc2tcIiwgLy8gW1wiRlFTXCIsIFwiU0RcIl1cclxuICAgICAgICAgICAgXCJjdXN0b21lckRlc2NcIixcclxuICAgICAgICAgICAgXCJjdXN0b21lclJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImNvbnRhY3RQZXJzb25EZXNjXCIsXHJcbiAgICAgICAgICAgIFwiY3JlYXRlZEJ5XCIsXHJcbiAgICAgICAgICAgIFwic3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwidHlwZVwiLFxyXG4gICAgICAgICAgICBcInNldmVyaXR5XCIsXHJcbiAgICAgICAgICAgIFwicHJpb3JpdHlcIixcclxuICAgICAgICAgICAgXCJidWRnZXRJbmRpY2F0aW9uXCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIFwiYXBwcm92ZWRIb3Vyc01pblwiLCAvLyBbXCJGUVNcIiwgXCJTRFwiXVxyXG4gICAgICAgICAgICBcImFwcHJvdmVkSG91cnNNYXhcIiwgLy8gW1wiRlFTXCIsIFwiU0RcIl1cclxuICAgICAgICAgICAgXCJhY3R1YWxIb3Vyc1NwZW50XCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIFwiYXBwcm92ZWRIb3Vyc0NvbW1lbnRCeVNEXCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIFwiZmVlZGJhY2tTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJhY3Rpb25SZXF1aXJlZFwiLFxyXG4gICAgICAgICAgICBcInJlcXVlc3RlZERlYWRsaW5lXCIsXHJcbiAgICAgICAgICAgIFwicmVtZW1iZXJNZURhdGVcIiwgLy8gW1wiRlFTXCIsIFwiU0RcIl1cclxuICAgICAgICAgICAgXCJyZW1lbWJlck1lUmVhc29uXCIgLy8gW1wiRlFTXCIsIFwiU0RcIl1cclxuICAgICAgICBdIDogW1xyXG4gICAgICAgICAgICBcImNhc2VOdW1iZXJcIixcclxuICAgICAgICAgICAgXCJwYXJlbnRDYXNlTnVtYmVyXCIsXHJcbiAgICAgICAgICAgIFwic3RhcnRcIixcclxuICAgICAgICAgICAgXCJ0aXRsZVwiLFxyXG4gICAgICAgICAgICBcImN1c3RvbWVyRGVzY1wiLFxyXG4gICAgICAgICAgICBcImN1c3RvbWVyUmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiY29udGFjdFBlcnNvbkRlc2NcIixcclxuICAgICAgICAgICAgXCJjcmVhdGVkQnlcIixcclxuICAgICAgICAgICAgXCJzdGF0dXNcIixcclxuICAgICAgICAgICAgXCJ0eXBlXCIsXHJcbiAgICAgICAgICAgIFwic2V2ZXJpdHlcIixcclxuICAgICAgICAgICAgXCJwcmlvcml0eVwiLFxyXG4gICAgICAgICAgICBcImZlZWRiYWNrU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiYWN0aW9uUmVxdWlyZWRcIixcclxuICAgICAgICAgICAgXCJyZXF1ZXN0ZWREZWFkbGluZVwiXHJcbiAgICAgICAgXTtcclxuICAgICAgICBjYXNlcy5mb3JFYWNoKCh2YWx1ZTogQ29tcGFjdFNlcnZpY2VDYXNlLCBjYXNlSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goKGNvbHVtbk5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJzLmluZGV4T2YoY29sdW1uTmFtZSkgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSB2YWx1ZVtjb2x1bW5OYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0ID0gJ3onOyAvLyBlbXRweSBjZWxsXHJcbiAgICAgICAgICAgICAgICB2YXIgejtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdGFydFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtb2RpZmllZE9uXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAnZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHogPSAnZGQvbW0veXl5eSBoaDpNTSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyZXF1ZXN0ZWREZWFkbGluZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyZW1lbWJlck1lRGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gJ2QnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB6ID0gJ2RkL21tL3l5eXknO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2FzZU51bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gJ24nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGhhcyBubyBwYXJlbnRDYXNlTnVtYmVyIGJ1dCBoYXMgY2hpbGQgcmVsYXRlIGNhc2VzIG91dHB1dCBpdCBvd24gaWQgZm9yIGVhc3kgcHJvamVjdCBzb3J0aW5nL2dyb3VwaW5nIGluIGV4Y2VsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbJ3BhcmVudENhc2VOdW1iZXInXSA9PSB1bmRlZmluZWQgJiYgdmFsdWVbJ2NoaWxkQ2FzZU51bWJlcnMnXSAhPSBudWxsICYmIHZhbHVlWydjaGlsZENhc2VOdW1iZXJzJ10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NoZWV0W1hMU1gudXRpbHMuZW5jb2RlX2NlbGwoeyBjOiBoZWFkZXJzLmluZGV4T2YoJ3BhcmVudENhc2VOdW1iZXInKSwgcjogY2FzZUluZGV4ICsgMSB9KV0gPSBjZWxsID0gKCh6KSA/IHsgdDogdCwgdjogdiwgejogeiB9IDogeyB0OiB0LCB2OiB2IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJwYXJlbnRDYXNlTnVtYmVyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFwcHJvdmVkSG91cnNNaW5cIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYXBwcm92ZWRIb3Vyc01heFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhY3R1YWxIb3Vyc1NwZW50XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAnbic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjYXNlT3duZXJzaGlwXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFjdGlvblJlcXVpcmVkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZlZWRiYWNrU3RhdHVzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNldmVyaXR5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInByaW9yaXR5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNhc2VDYXVzZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0eXBlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAncyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoYFhMU18ke2NvbHVtbk5hbWV9XyR7dn1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0YXR1c1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gJ3MnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuVHJhbnNsYXRlKHYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gJ3MnO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd29ya3NoZWV0W1hMU1gudXRpbHMuZW5jb2RlX2NlbGwoeyBjOiBoZWFkZXJzLmluZGV4T2YoY29sdW1uTmFtZSksIHI6IGNhc2VJbmRleCArIDEgfSldID0gY2VsbCA9ICgoeikgPyB7IHQ6IHQsIHY6IHYsIHo6IHogfSA6IHsgdDogdCwgdjogdiB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgICByYW5nZS5lLmMgPSBoZWFkZXJzLmxlbmd0aDtcclxuICAgICAgICBoZWFkZXJzLm1hcCgodmFsdWUsIGluZGV4KSA9PiB3b3Jrc2hlZXRbWExTWC51dGlscy5lbmNvZGVfY29sKGluZGV4KSArIFwiMVwiXSA9IHsgdDogJ3MnLCB2OiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5UcmFuc2xhdGUoYFhMU18ke3ZhbHVlfWApLCBib2xkOiB0cnVlIH0pO1xyXG4gICAgICAgIHdvcmtzaGVldFsnIXJlZiddID0gWExTWC51dGlscy5lbmNvZGVfcmFuZ2UocmFuZ2UpO1xyXG4gICAgICAgIHdvcmtzaGVldFsnIWNvbHMnXSA9IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2UuY3VycmVudFJvbGVJbihbXCJGUVNcIiwgXCJTRFwiXSkgPyBbXHJcbiAgICAgICAgICAgIHsgd2NoOiA4IH0sIC8vIFwiY2FzZU51bWJlclwiLFxyXG4gICAgICAgICAgICB7IHdjaDogOCB9LCAvLyBcInBhcmVudENhc2VOdW1iZXJcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDIwIH0sIC8vIFwiZmlxYXNPd25lcnNoaXBEZXNjXCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIHsgd2NoOiAyMCB9LCAvLyBcImNhc2VPd25lcnNoaXBcIiwgLy8gW1wiRlFTXCIsIFwiU0RcIl1cclxuICAgICAgICAgICAgeyB3Y2g6IDE2IH0sIC8vIFwic3RhcnRcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDE2IH0sIC8vIFwibW9kaWZpZWRPblwiLCAvLyBbXCJGUVNcIiwgXCJTRFwiXVxyXG4gICAgICAgICAgICB7IHdjaDogMzIgfSwgLy8gXCJ0aXRsZVwiLFxyXG4gICAgICAgICAgICB7IHdjaDogOCB9LCAvLyBcImNhc2VDYXVzZVwiLCAvLyBbXCJGUVNcIiwgXCJTRFwiXVxyXG4gICAgICAgICAgICB7IHdjaDogOCB9LCAvLyBcInNwVHNUYXNrXCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIHsgd2NoOiAyMCB9LCAvLyBcImN1c3RvbWVyRGVzY1wiLFxyXG4gICAgICAgICAgICB7IHdjaDogMjAgfSwgLy8gXCJjdXN0b21lclJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICB7IHdjaDogMjAgfSwgLy8gXCJjb250YWN0UGVyc29uRGVzY1wiLFxyXG4gICAgICAgICAgICB7IHdjaDogMjAgfSwgLy8gXCJjcmVhdGVkQnlcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDE2IH0sIC8vIFwic3RhdHVzXCIsXHJcbiAgICAgICAgICAgIHsgd2NoOiA4IH0sIC8vIFwidHlwZVwiLFxyXG4gICAgICAgICAgICB7IHdjaDogOCB9LCAvLyBcInNldmVyaXR5XCIsXHJcbiAgICAgICAgICAgIHsgd2NoOiA4IH0sIC8vIFwicHJpb3JpdHlcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDggfSwgLy8gXCJidWRnZXRJbmRpY2F0aW9uXCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIHsgd2NoOiA4IH0sIC8vIFwiYXBwcm92ZWRIb3Vyc01pblwiLCAvLyBbXCJGUVNcIiwgXCJTRFwiXVxyXG4gICAgICAgICAgICB7IHdjaDogOCB9LCAvLyBcImFwcHJvdmVkSG91cnNNYXhcIiwgLy8gW1wiRlFTXCIsIFwiU0RcIl1cclxuICAgICAgICAgICAgeyB3Y2g6IDggfSwgLy8gXCJhY3R1YWxIb3Vyc1NwZW50XCIsIC8vIFtcIkZRU1wiLCBcIlNEXCJdXHJcbiAgICAgICAgICAgIHsgd2NoOiAzMiB9LCAvLyBcImFwcHJvdmVkSG91cnNDb21tZW50QnlTRFwiLCAvLyBbXCJGUVNcIiwgXCJTRFwiXVxyXG4gICAgICAgICAgICB7IHdjaDogMTYgfSwgLy8gXCJmZWVkYmFja1N0YXR1c1wiLFxyXG4gICAgICAgICAgICB7IHdjaDogOCB9LCAvLyBcImFjdGlvblJlcXVpcmVkXCIsXHJcbiAgICAgICAgICAgIHsgd2NoOiA5IH0sIC8vIFwicmVxdWVzdGVkRGVhZGxpbmVcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDkgfSwgLy8gXCJyZW1lbWJlck1lRGF0ZVwiLCAvLyBbXCJGUVNcIiwgXCJTRFwiXVxyXG4gICAgICAgICAgICB7IHdjaDogMjAgfSwgLy8gXCJyZW1lbWJlck1lUmVhc29uXCIgLy8gW1wiRlFTXCIsIFwiU0RcIl1cclxuICAgICAgICBdIDogW1xyXG4gICAgICAgICAgICB7IHdjaDogOCB9LCAvLyBcImNhc2VOdW1iZXJcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDggfSwgLy8gXCJwYXJlbnRDYXNlTnVtYmVyXCIsXHJcbiAgICAgICAgICAgIHsgd2NoOiAxNiB9LCAvLyBcInN0YXJ0XCIsXHJcbiAgICAgICAgICAgIHsgd2NoOiAzMiB9LCAvLyBcInRpdGxlXCIsXHJcbiAgICAgICAgICAgIHsgd2NoOiAyMCB9LCAvLyBcImN1c3RvbWVyRGVzY1wiLFxyXG4gICAgICAgICAgICB7IHdjaDogMjAgfSwgLy8gXCJjdXN0b21lclJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICB7IHdjaDogMjAgfSwgLy8gXCJjb250YWN0UGVyc29uRGVzY1wiLFxyXG4gICAgICAgICAgICB7IHdjaDogMjAgfSwgLy8gXCJjcmVhdGVkQnlcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDE2IH0sIC8vIFwic3RhdHVzXCIsXHJcbiAgICAgICAgICAgIHsgd2NoOiA4IH0sIC8vIFwidHlwZVwiLFxyXG4gICAgICAgICAgICB7IHdjaDogOCB9LCAvLyBcInNldmVyaXR5XCIsXHJcbiAgICAgICAgICAgIHsgd2NoOiA4IH0sIC8vIFwicHJpb3JpdHlcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDE2IH0sIC8vIFwiZmVlZGJhY2tTdGF0dXNcIixcclxuICAgICAgICAgICAgeyB3Y2g6IDggfSwgLy8gXCJhY3Rpb25SZXF1aXJlZFwiLFxyXG4gICAgICAgICAgICB7IHdjaDogOSB9IC8vIFwicmVxdWVzdGVkRGVhZGxpbmVcIixcclxuICAgICAgICBdO1xyXG4gICAgICAgIHJldHVybiB3b3Jrc2hlZXQ7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IEZpbGVSZWFkZXJTZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbi8qKlxyXG4gKiBTZXNzaW9uIGNsYXNzLCBzdG9yZXMgdmFsdWVzIGFzIEpTT04gaW4gbG9jYWwgYnJvd3NlciBzdG9yYWdlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZpbGVSZWFkZXJTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcImZpbGVSZWFkZXJTZXJ2aWNlXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHEnKSBwcml2YXRlICRxOiBuZy5JUVNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJlYWRlcihkZWZlcnJlZCk6IEZpbGVSZWFkZXIge1xyXG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QocmVhZGVyLmVycm9yKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVhZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBSZWFkQXNEYXRhVXJsKGZpbGU6IEZpbGUpIHtcclxuICAgICAgICB2YXIgZGVmZXJyZWQgPSB0aGlzLiRxLmRlZmVyKCksXHJcbiAgICAgICAgICAgIHJlYWRlciA9IHRoaXMuZ2V0UmVhZGVyKGRlZmVycmVkKTtcclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgUmVhZEFzVGV4dChmaWxlOiBGaWxlKTogbmcuSVByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIGRlZmVycmVkID0gdGhpcy4kcS5kZWZlcigpLFxyXG4gICAgICAgICAgICByZWFkZXIgPSB0aGlzLmdldFJlYWRlcihkZWZlcnJlZCk7XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XHJcbiAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFJlYWRBc0FycmF5QnVmZmVyKGZpbGU6IEZpbGUpOiBuZy5JUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xyXG4gICAgICAgIHZhciBkZWZlcnJlZCA9IHRoaXMuJHEuZGVmZXIoKSxcclxuICAgICAgICAgICAgcmVhZGVyID0gdGhpcy5nZXRSZWFkZXIoZGVmZXJyZWQpO1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgUmVhZEFzQmluYXJ5U3RyaW5nKGZpbGU6IEZpbGUpOiBuZy5JUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBpZiAoRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZEFzQmluYXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9IHRoaXMuJHEuZGVmZXIoKSxcclxuICAgICAgICAgICAgICAgIHJlYWRlciA9IHRoaXMuZ2V0UmVhZGVyKGRlZmVycmVkKTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhmaWxlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLlJlYWRBc0FycmF5QnVmZmVyKGZpbGUpLnRoZW48c3RyaW5nPih4ID0+IHtcclxuICAgICAgICAgICAgdmFyIHU4QXJyYXkgPSBuZXcgVWludDhBcnJheSh4KTtcclxuICAgICAgICAgICAgdmFyIGksIGxlbiA9IHU4QXJyYXkubGVuZ3RoLCBiX3N0ciA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYl9zdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1OEFycmF5W2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYl9zdHI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0ICogYXMgYmFzZTY0anMgZnJvbSAnYmFzZTY0LWpzJztcclxuaW1wb3J0ICogYXMgbWltZSBmcm9tICdtaW1lLXR5cGVzJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgRmlxYXNzaXN0QXBpRmlsZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2ZpbGV0eXBlXCI7XHJcbmltcG9ydCB7IElJZGVudGl0eUxpbmsgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9pRnFzXCI7XHJcbmltcG9ydCB7IEZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlIH0gZnJvbSBcIi4vZmlxYXNzaXN0QXBpU2VydmljZUJhc2VcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogRmlsZVNlcnZpY2Uuc2VsZWN0b3JcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVTZXJ2aWNlIGV4dGVuZHMgRmlxYXNzaXN0QXBpU2VydmljZUJhc2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwiRmlsZVNlcnZpY2VcIlxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJyRxJykgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRodHRwJykgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoJHEsICRodHRwLCBhdXRoZW50aWNhdGlvblNlcnZpY2UsIGF1dGhvcml6YXRpb25TZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0RmlsZShpZDogSUlkZW50aXR5TGluaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdldEZpbGVGcm9tVXJsKGlkLmZ1bGxIcmVmKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0RmlsZUZyb21VcmwodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBGaXFhc3Npc3RBcGlGaWxlPihcIkdFVFwiLCB1cmwsIG51bGwsIG51bGwsIG51bGwsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZW5lcmF0ZUltYWdlU291cmNlKGZpbGU6IEZpcWFzc2lzdEFwaUZpbGUpIHtcclxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBmaWxlLmZpbGVuYW1lIHx8IGZpbGUuZGVzY3JpcHRpb247XHJcbiAgICAgICAgcmV0dXJuIGBkYXRhOiAke21pbWUubG9va3VwKGZpbGVOYW1lKX07YmFzZTY0LCR7ZmlsZS5jb250ZW50fWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEltYWdlTm90Rm91bmRTb3VyY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIGBkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQTRRQUFBSWNDQVlBQUFDdURHQ2hBQUFLUTJsRFExQkpRME1nY0hKdlptbHNaUUFBZU5xZFUzZFlrL2NXUHQvM1pROVdRdGp3c1pkc2dRQWlJNndJeUJCWm9oQ1NBR0dFRUJKQXhZV0lDbFlVRlJHY1NGWEVndFVLU0oySTRxQW91R2RCaW9oYWkxVmNPTzRmM0tlMWZYcnY3ZTM3MS91ODU1em4vTTU1encrQUVSSW1rZWFpYWdBNVVvVThPdGdmajA5SXhNbTlnQUlWU09BRUlCRG15OEpuQmNVQUFQQURlWGgrZExBLy9BR3Zid0FDQUhEVkxpUVN4K0gvZzdwUUpsY0FJSkVBNENJUzV3c0JrRklBeUM1VXlCUUF5QmdBc0ZPelpBb0FsQUFBYkhsOFFpSUFxZzBBN1BSSlBnVUEyS21UM0JjQTJLSWNxUWdBalFFQW1TaEhKQUpBdXdCZ1ZZRlNMQUxBd2dDZ3JFQWlMZ1RBcmdHQVdiWXlSd0tBdlFVQWRvNVlrQTlBWUFDQW1VSXN6QUFnT0FJQVF4NFR6UU1nVEFPZ01OSy80S2xmY0lXNFNBRUF3TXVWelpkTDBqTVV1SlhRR25meThPRGlJZUxDYkxGQ1lSY3BFR1lKNUNLY2w1c2pFMGpuQTB6T0RBQUFHdm5Sd2Y0NFA1RG41dVRoNW1ibmJPLzB4YUwrYS9CdklqNGg4ZC8rdkl3Q0JBQVFUcy92MmwvbDVkWURjTWNCc0hXL2E2bGJBTnBXQUdqZitWMHoyd21nV2dyUWV2bUxlVGo4UUI2ZW9WRElQQjBjQ2dzTDdTVmlvYjB3NDRzKy96UGhiK0NMZnZiOFFCNysyM3J3QUhHYVFKbXR3S09EL1hGaGJuYXVVbzdueXdSQ01XNzM1eVAreDRWLy9ZNHAwZUkwc1Z3c0ZZcnhXSW00VUNKTngzbTVVcEZFSWNtVjRoTHBmekx4SDViOUNaTjNEUUNzaGsvQVRyWUh0Y3Rzd0g3dUFRS0xEbGpTZGdCQWZ2TXRqQm9Ma1FBUVp6UXllZmNBQUpPLytZOUFLd0VBelplazR3QUF2T2dZWEtpVUYwekdDQUFBUktDQktyQkJCd3pCRkt6QURwekJIYnpBRndKaEJrUkFEQ1RBUEJCQ0J1U0FIQXFoR0paQkdWVEFPdGdFdGJBREdxQVJtdUVRdE1FeE9BM240QkpjZ2V0d0Z3WmdHSjdDR0x5R0NRUkJ5QWdUWVNFNmlCRmlqdGdpemdnWG1ZNEVJbUZJTkpLQXBDRHBpQlJSSXNYSWNxUUNxVUpxa1YxSUkvSXRjaFE1alZ4QStwRGJ5Q0F5aXZ5S3ZFY3hsSUd5VVFQVUFuVkF1YWdmR29yR29IUFJkRFFQWFlDV29tdlJHclFlUFlDMm9xZlJTK2gxZEFCOWlvNWpnTkV4RG1hTTJXRmNqSWRGWUlsWUdpYkhGbVBsV0RWV2p6VmpIVmczZGhVYndKNWg3d2drQW91QUUrd0lYb1FRd215Q2tKQkhXRXhZUTZnbDdDTzBFcm9JVndtRGhESENKeUtUcUUrMEpYb1MrY1I0WWpxeGtGaEdyQ2J1SVI0aG5pVmVKdzRUWDVOSUpBN0prdVJPQ2lFbGtESkpDMGxyU050SUxhUlRwRDdTRUdtY1RDYnJrRzNKM3VRSXNvQ3NJSmVSdDVBUGtFK1MrOG5ENUxjVU9zV0k0a3dKb2lSU3BKUVNTalZsUCtVRXBaOHlRcG1ncWxITnFaN1VDS3FJT3A5YVNXMmdkbEF2VTRlcEV6UjFtaVhObXhaRHk2UXRvOVhRbW1sbmFmZG9MK2wwdWduZGd4NUZsOUNYMG12b0Irbm42WVAwZHd3TmhnMkR4MGhpS0JsckdYc1pweGkzR1MrWlRLWUYwNWVaeUZRdzF6SWJtV2VZRDVodlZWZ3E5aXA4RlpIS0VwVTZsVmFWZnBYbnFsUlZjMVUvMVhtcUMxU3JWUStyWGxaOXBrWlZzMURqcVFuVUZxdlZxUjFWdTZrMnJzNVNkMUtQVU05Ulg2TytYLzJDK21NTnNvYUZScUNHU0tOVVk3ZkdHWTBoRnNZeVpmRllRdFp5VmdQckxHdVlUV0pic3Zuc1RIWUYreHQyTDN0TVUwTnpxbWFzWnBGbW5lWnh6UUVPeHJIZzhEblpuRXJPSWM0Tnpuc3RBeTAvTGJIV2FxMW1yWDZ0TjlwNjJyN2FZdTF5N1JidDY5cnZkWENkUUowc25mVTZiVHIzZFFtNk5ycFJ1b1c2MjNYUDZqN1RZK3Q1NlFuMXl2VU82ZDNSUi9WdDlLUDFGK3J2MXUvUkh6Y3dOQWcya0Jsc01UaGo4TXlRWStocm1HbTQwZkNFNGFnUnkyaTZrY1JvbzlGSm95ZTRKdTZIWitNMWVCYytacXh2SEdLc05ONWwzR3M4WVdKcE10dWt4S1RGNUw0cHpaUnJtbWE2MGJUVGRNek15Q3pjck5pc3lleU9PZFdjYTU1aHZ0bTgyL3lOaGFWRm5NVktpemFMeDViYWxuekxCWlpObHZlc21GWStWbmxXOVZiWHJFbldYT3NzNjIzV1YyeFFHMWViREpzNm04dTJxSzJicmNSMm0yM2ZGT0lVanluU0tmVlRidG94N1B6c0N1eWE3QWJ0T2ZaaDlpWDJiZmJQSGN3Y0VoM1dPM1E3ZkhKMGRjeDJiSEM4NjZUaE5NT3B4S25ENlZkbkcyZWhjNTN6TlJlbVM1RExFcGQybHhkVGJhZUtwMjZmZXN1VjVScnV1dEsxMC9Xam03dWIzSzNaYmRUZHpEM0ZmYXY3VFM2Ykc4bGR3ejN2UWZUdzkxamljY3pqbmFlYnA4THprT2N2WG5aZVdWNzd2UjVQczV3bW50WXdiY2pieEZ2Z3ZjdDdZRG8rUFdYNnp1a0RQc1krQXA5Nm40ZStwcjRpM3oyK0kzN1dmcGwrQi95ZSt6djZ5LzJQK0wvaGVmSVc4VTRGWUFIQkFlVUJ2WUVhZ2JNRGF3TWZCSmtFcFFjMUJZMEZ1d1l2REQ0VlFnd0pEVmtmY3BOdndCZnlHL2xqTTl4bkxKclJGY29JblJWYUcvb3d6Q1pNSHRZUmpvYlBDTjhRZm0rbStVenB6TFlJaU9CSGJJaTRIMmtabVJmNWZSUXBLaktxTHVwUnRGTjBjWFQzTE5hczVGbjdaNzJPOFkrcGpMazcyMnEyY25abnJHcHNVbXhqN0p1NGdMaXF1SUY0aC9oRjhaY1NkQk1rQ2UySjVNVFl4RDJKNDNNQzUyeWFNNXprbWxTV2RHT3U1ZHlpdVJmbTZjN0xubmM4V1RWWmtIdzRoWmdTbDdJLzVZTWdRbEF2R0UvbHAyNU5IUlB5aEp1RlQwVytvbzJpVWJHM3VFbzhrdWFkVnBYMk9OMDdmVVA2YUlaUFJuWEdNd2xQVWl0NWtSbVN1U1B6VFZaRTF0NnN6OWx4MlMwNWxKeVVuS05TRFdtV3RDdlhNTGNvdDA5bUt5dVREZVI1NW0zS0c1T0h5dmZrSS9sejg5c1ZiSVZNMGFPMFVxNVFEaFpNTDZncmVGc1lXM2k0U0wxSVd0UXozMmIrNnZrakM0SVdmTDJRc0ZDNHNMUFl1SGhaOGVBaXYwVzdGaU9MVXhkM0xqRmRVcnBrZUdudzBuM0xhTXV5bHYxUTRsaFNWZkpxZWR6eWpsS0QwcVdsUXl1Q1Z6U1ZxWlRKeTI2dTlGcTVZeFZobFdSVjcycVgxVnRXZnlvWGxWK3NjS3lvcnZpd1Jyam00bGRPWDlWODlYbHQydHJlU3JmSzdldEk2NlRyYnF6M1diK3ZTcjFxUWRYUWh2QU5yUnZ4amVVYlgyMUszblNoZW1yMWpzMjB6Y3JOQXpWaE5lMWJ6TGFzMi9LaE5xUDJlcDEvWGN0Vy9hMnJ0NzdaSnRyV3Y5MTNlL01PZ3gwVk85N3ZsT3k4dFN0NFYydTlSWDMxYnRMdWd0MlBHbUlidXIvbWZ0MjRSM2RQeFo2UGU2VjdCL1pGNyt0cWRHOXMzSysvdjdJSmJWSTJqUjVJT25EbG00QnYycHZ0bW5lMWNGb3FEc0pCNWNFbjM2WjhlK05RNktIT3c5ekR6ZCtaZjdmMUNPdEllU3ZTT3I5MXJDMmpiYUE5b2IzdjZJeWpuUjFlSFVlK3QvOSs3ekhqWTNYSE5ZOVhucUNkS0QzeCtlU0NrK09uWktlZW5VNC9QZFNaM0huM1RQeVphMTFSWGIxblE4K2VQeGQwN2t5M1gvZko4OTduajEzd3ZIRDBJdmRpMnlXM1M2MDlyajFIZm5EOTRVaXZXMi9yWmZmTDdWYzhyblQwVGVzNzBlL1RmL3Bxd05WejEvalhMbDJmZWIzdnh1d2J0MjRtM1J5NEpicjErSGIyN1JkM0N1NU0zRjE2ajNpdi9MN2EvZW9IK2cvcWY3VCtzV1hBYmVENFlNQmd6OE5aRCs4T0NZZWUvcFQvMDRmaDBrZk1SOVVqUmlPTmo1MGZIeHNOR3IzeVpNNlQ0YWV5cHhQUHluNVcvM25yYzZ2bjMvM2krMHZQV1B6WThBdjVpOCsvcm5tcDgzTHZxNm12T3Njanh4Kzh6bms5OGFiOHJjN2JmZSs0NzdyZng3MGZtU2o4UVA1UTg5SDZZOGVuMEUvM1B1ZDgvdnd2OTRUeis0QTVKUkVBQUFBWmRFVllkRk52Wm5SM1lYSmxBRUZrYjJKbElFbHRZV2RsVW1WaFpIbHh5V1U4QUFBREtHbFVXSFJZVFV3NlkyOXRMbUZrYjJKbExuaHRjQUFBQUFBQVBEOTRjR0ZqYTJWMElHSmxaMmx1UFNMdnU3OGlJR2xrUFNKWE5VMHdUWEJEWldocFNIcHlaVk42VGxSamVtdGpPV1FpUHo0Z1BIZzZlRzF3YldWMFlTQjRiV3h1Y3pwNFBTSmhaRzlpWlRwdWN6cHRaWFJoTHlJZ2VEcDRiWEIwYXowaVFXUnZZbVVnV0UxUUlFTnZjbVVnTlM0MkxXTXhNemdnTnprdU1UVTVPREkwTENBeU1ERTJMekE1THpFMExUQXhPakE1T2pBeElDQWdJQ0FnSUNBaVBpQThjbVJtT2xKRVJpQjRiV3h1Y3pweVpHWTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1Rrdk1ESXZNakl0Y21SbUxYTjViblJoZUMxdWN5TWlQaUE4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWlCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlJSGh0Ykc1ek9uaHRjRTFOUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmJXMHZJaUI0Yld4dWN6cHpkRkpsWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wzTlVlWEJsTDFKbGMyOTFjbU5sVW1WbUl5SWdlRzF3T2tOeVpXRjBiM0pVYjI5c1BTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ1EwTWdNakF4TnlBb1RXRmphVzUwYjNOb0tTSWdlRzF3VFUwNlNXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEbzFNMEZCTlVaRlJrUTFRMFl4TVVVMlFVUkRRa00wTjBOR1FUUTBOakF6UkNJZ2VHMXdUVTA2Ukc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRvMU0wRkJOVVpHTUVRMVEwWXhNVVUyUVVSRFFrTTBOME5HUVRRME5qQXpSQ0krSUR4NGJYQk5UVHBFWlhKcGRtVmtSbkp2YlNCemRGSmxaanBwYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2pVelFVRTFSa1ZFUkRWRFJqRXhSVFpCUkVOQ1F6UTNRMFpCTkRRMk1ETkVJaUJ6ZEZKbFpqcGtiMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPalV6UVVFMVJrVkZSRFZEUmpFeFJUWkJSRU5DUXpRM1EwWkJORFEyTURORUlpOCtJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQaUE4TDNKa1pqcFNSRVkrSUR3dmVEcDRiWEJ0WlhSaFBpQThQM2h3WVdOclpYUWdaVzVrUFNKeUlqOCtTcGtzWmdBQVFXeEpSRUZVZU5yczNRbThIRldkTC9BVGtVWEFKYWlJRzJKQUJOblU0TDQ5bmVBd3VDL0JCV2VlODlURTNSbnh2Y1JsUmx3bkdVVkhYSkM0em9nYlYzQWRseUU2T3U1S1ZFQlFFUzRvS2loS1VQWTE3MytvYW5NVDcrMnE2dHQ5dTdyNysvMTgvcDhvVmJlNytuUlZkLzI2VHAyemFOT21UUWtBQUlESmN4Tk5BQUFBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBSUJBQ0FBQWdFQUlBQUJBZHpmVkJBRDljZFRSYjlFSXNOREgzWkV2MVFnQUFpRUFZMkszcU1PaUhoaDFqNmk3UnQwaWFzZW9qVkcvanpvbjZwU29yNVYxcldZREFJRVFnTkg5TG5waTFIT2pIcGJtdnAxaGNWbDNpem8wNmxWbFNEdys2aDFSWjJsS0FHakdQWVFBRE5Oam8wNkwrbmpVdzN2NFhzb0I4VVZSWjBaOUlCVlhHQUVBZ1JDQUZzdEI3b1NvVDBmdDI0ZkgyeWJxbVZFL2lmcGJ6UXNBQWlFQTdiUi8xSWFvNVFONDdGdEYvVWZVdThxUUNBQUloQUMweEgxU01SRE1YUWY4UE0rTG1vcmFUcE1EZ0VBSXdQRHRGL1dmVWJzczBQTTlJZXI5VVlzMFBRQUloQUFNVDU0NjRxU28yemI4dTAxUnY0MDZOK3J5SHA3M2lLaVhhMzRBRUFnQkdKNWpvdmF1dVc2ZVN1SXRVWStNMmlrVkk0Y3VpZG81Nm81UlQ0LzZYTlFOTlIvdnRWRUhld3NBUUNBRVlPRTlJdXJ2YXF4M1ZTcm1GcnhMMUpGUkowZGR1ZFU2djRuNmFOUmpvdTRaOVowYWo1c0hsMW5uT3c4QUJFSUFGbGErZjI5TnFyNlA3L3lvKzBXOUllclNtbzk5ZXRSRG9sNWZZOTE3cGFMN0tBQWdFQUt3UVBMVndmdFVyUE9ycUFlbllvTDZwcTZMK3FkVTd6N0JsM2s3QUVBZ0JHRGhQTGRHb012ekVmNXlucytUcjBLZVdMSE9nVkVQOUpZQWdFQUl3T0RsQVdFZVZiSE9PMUs5K3dEcmVFN1VKUlhyUE5uYkFnQUNJUUNEOTlDb20zVlpmblhVdi9ieCtmTG9wTWRVckhPWXR3VUFCRUlBQnUvK0ZjdHpGODhMK3Z5Y3g2YnUwMUhjUGVwVzNob0FFQWdCR0t5N1Z5ei93Z0NlODhLb0gxV3NzNCszQmdBRVFnQUc2ODRWeTM4MG9PYzlZNTdiQlFBQ0lRRE0wODBybGw4NG9PZTlhSjdiQlFBQ0lRQU0yRTBIOUxnMytPNERBSUVRZ09HNnZHTDViZ042M3R0VUxML1VXd01BQWlFQWcxVTEyZnlnQm5jNXFHTDUrZDRhQUJBSUFSaXNzeXFXUDNJQXo3bHIxRDNudVYwQUlCQUN3RHg5czJMNTh0VC9BVjZlRWJXb3kvS3pvMzd2clFFQWdSQ0F3ZnBXMURWZGx1OGM5ZEkrUGw4T2x5K3JXT2VMM2hZQUVBZ0JHTHcvUmYxWHhUcXJvL2JyMC9POUxlcjJGZXZzNUcwQkFJRVFnSVh4bm9ybE8wUjlLdXFPODN5ZVowZjlmWTMxOGpvdjhMWUFnRUFJd09COUx1cU1pblgyaXZwcTFKSWVIai9mTC9nUFVlOXU4RGY1U3VJaDNob0FFQWdCR0t3OFNmeXFHdXZsVUxnaDZqbXAvb1QxZDRuNlROUmJvN1pwc0UxNTNhbW9mYjA5QUFpRUFEQlkveG4xMlJycjNTcHFYZFNaVVVkRzNYMldkWGFNV2hiMUgxRS9qM3Awajl0MHl6Sk0zdGJiQThBa3U2a21BS0JsM3pkM2kzcHpXWmRFL2FMODd6bTg3ZHJINzY1OFZmTGpVWWVtN3FPaEFvQXZhQURvMGUxUzcvZnMzYXFzUVhsNDFMdFNNU2dOQUV3Y1hVWUJHTFNucHVIOEFQbVZxTy9YV085WnFYcitRZ0FRQ0FHZ0IzODdoT2M4SWVwUlVVK00rbFdOOWRkRVBkWmJCWUJBQ0FEOWM0K29wUXY0ZkZkRnZUUVZWeVd2S3NQZ0U2S3VxUGk3UFBMb2g2SU84SllCSUJBQ1FIODhvMkw1YjZNdTZOTnpmU0hxb0ZSTVE3RnB4bjgvSmVydnR2cHZzN2xGS3VaTk5QSW9BQUloQVBUaE8rYnBGZXU4TnhXamZiNHc2dFFlbnVQcVZIUVBmVURVWVZGbnpiSGVpVkd2cXZGNHU2ZGlpb3p0dkgwQVRBS2pqQUl3S0E5SnhlVHgzZVJ1bXJrNzV6dkx5bk1QNWk2ZUQ0cmFQMnEzcUIxbXJMOHhham9WZzhWOExlcUxxWmlhb281L1NVVVgxaU1xMXJ0ZjFQdFRjZS9qSm04akFBSWhBRFJYTlpqTTk2Sit0dFYveS85L3pWYi9MUWZDbTVYQjhlcDViRThPZDNsRTBiM0swTmRORG8xbmxDRVNBTWFXTHFNQURFSU9jY3NyMWptKzVtUGx3V0UyempNTWR1VEhlRXpVK1RYV2ZVTXFSaWtGQUlFUUFCcklVempjb3N2eWE2TStQcVJ0dXlnVlUxSmNXckhlb2xSMGFWM3E3UVJBSUFTQStxcEdGLzFTMU8rR3VIMm5sOXQ0ZmNWNk8wWjlLdXBPM2xJQUJFSUFxSmFuYlRpMFlwM2pXN0NkbjRsNlJZMzFjaGc4c1F5SEFDQVFBa0FYVDRuYXRzdnlQNVZockEzK05lb0ROZGE3YjlRSFU5R05GQUFFUWdDWVE5WG9vcCtJdXJKRjIvdmNWRXhoVVNVUGt2TmFieThBQWlFQXpHN3ZWRnhONitaRExkdm1hOHF3ZDNhTmRWK1pxdWN4QkFDQkVJQ0pWSFYxTUUvMzhEOHQzTzQ4OHVqam8vNVlzVjd1TXZxZVZEMlBJUUFJaEFCTWxCeVdxcTZlZlRqcWhwWnVmNTZJUHQvL1dEWHk2TTFTY1Era2tVY0JFQWdCb1BTZ3FMdFdyUE9obHIrR1BCM0dQOVJZYjllb3owZnQ1RzBIUUNBRWdPcnVvaitJT25NRVhzYzdvbzZ0c2Q0QlVSK0oyc1piRDRCQUNNQWsyejRWQTdOMGMvd0l2WjRYUjMybHhucVBqWHFEdHg4QWdSQ0FTZmJvcU1WZGxsOFg5ZEVSZWoxNWU1OFk5Zk1hNjY2S2VxWmRBQUNCRUlCSjlZeUs1ZXVqTGh5eDE1UkhIRDBzNnVJYTZ4NFg5VkM3QVFBQ0lRQ1RacGN5T0hYem9SRjliWGx1d3R3VjlwcUs5YmFMK2tUVVhuWUhBQVJDQUNiSlU4cEFOSmRMb3o0OXdxOHYzMHY0NGhycjNUYnFrMUczdEVzQUlCQUNNQ21xUmhmTkllbnlFWCtOdVV2b3Y5VlliLytvanlVamp3SWdFQUl3QWZhTXVuL0ZPaDhhazlmNnNxai9yTEhlb1ZGdnRXc0FJQkFDTU83eVlES0x1aXovVGFvM2ZjTW91RDdxaUtqVGE2ejdvcWpuMlQwQUVBZ0JHRmVMVXZYb29oK091bUdNWG5NZWVmVHhVUmZWV1BkdFVZK3dtd0FnRUFJd2puSlgwYXBSTlk4Znc5YzlIZldFVkQzeTZMWlJKeVVqandJZ0VBSXdocW9Ha3prMTZyUXhmZTNmakhwMmpmWHlpS05maUZwc2R3R2dqVzZxQ1FEb1FaNW00dkNLZFk0Zjh6YklnK1hjSTJwMXhYcjVDbUdlby9CdlV2VlZ4WVd3YTlUT1VUY3Z6d00yUmwwWjlmdW9hKzNhQUFJaEFGVEo0ZWJXWFpibit3WS9NZ0h0OElveUZENjJZcjE4TDJHK3AzQ2hCcHJKMys5N3AySWFqQVBLZis4V3RTVHFabDNlczE5Ri9UVHF1MlY5SXhYM1RRSWdFQUxBbjFWMUYvMXlLa1lZSFhlYm9wNFc5YTJvZ3lyV2ZXNFp0dDdXNTIyNDgxYkI3NEF5cEc3WDhISHliU1M3bC9YSThyL2xLNXA1bE5nVG82YUVRd0NCRUFCdUZmWG9pblUrTkVIdGNVWFpIdCtMdW4zRnVrZEgvVHpxOHoyMisvNWxIUmkxWC9udnJRYjQybktvUExTc1kxTFJEVGpQc2ZnVGh3R0FRQWpBWk1yM0RtN2ZaZm5sVVorY3NEYkpYUzN6eUtQNWF0cU9YZGJiSmhWZGFSK1M1cDdQTUlld2ZkUG1xMzBIbE9IdkxrTitqYm1yNlhPaW5oWDEwYWgvaWpyWDRRQWdFQUl3V2FybUh2eFUxR1VUMkM3NW5yczg4bWllZTNGUmwvVnVXUWJtQjBidE5DUDRIVmorNzN6djM3WXRmcDI1YStrUlVVK01lbDNVbTVQQmFBQUVRZ0Ftd2wyakhseXh6dkVUM0Q3NXl0bmRvMTVkc2Q2ZXFiakhjcHNSZnEzNWl1RWJvNTRhOVpSVTNCOEp3SWd4RHlFQVRUdzlkYi82ZFdIVXlSUGNQanRFZlM0Vjl3bFcyV1pNWG5PK3N2bjlWRncxQkdERXVFSUlRQk5WbzR2bSsrT3VuNEIyeUQrb0xpbkQwTXpSUGZkcWVkREw4dzFPUjEyUWltNjkxNlZpVUpyRjVldFozT1BqNW5rTmp5L2JJVS9Gc2NtaEFpQVFBakJlN3B1SzdwRGRqR04zMGR1bHpZTzdkQ3BQNjdCamk3YzUzOU9YdTNDZVh0YVB5enF2NHU5MmkzcEExTEpVeksxNHA0YlB1enJxTmxFcmhFSUFnUkNBOFZKMWRmQ01xQitPOE92YnVReDZuY0ZkT2dPOTNLYmwyMzNlak1CM2F2aysvRFQxTnRCTDd2TDd5YkplR1BXSXFPZEhQVDdWdjgwa0Q2eVQ1eTk4Z1VNR1FDQUVZRHprVVM4UHIxaG5WT1llek45OWU2Y3RKM1BQd1M4UG1MT294ZHQ5Y2RwOHRTLy9lMW9aL3Y0MG9PZkxWL2krWEZadW85ZEhQYTdtMytZUStmdFVQYmdPQUFJaEFDUGdyNk4yN2JMOGhsVGNQOWcyZDBxYnUzbDJKblhQVndHM2IzRmJYeFYxWnRwODFlKzBNZ0QrWm9qYmxMY2pYeVY4VE5TN28rNVE0Mi95UElYNWl1VkpEaDhBZ1JDQTBWWTE5K0RYb3M0ZjR2YmRNbTNaelhPLzhuOHZibkdiNWhCOWJ0cmN6Yk56djkvWnFSanNwWTArRy9XZFZOd3Irc2lLZGZQVjF2ZVhZZklzaHhDQVFBakFhTHBGcXU0cXVGRGRSYmVMMm1lVzhIZVhscmZoNzlLV2c3dmtFSml2QWw0K2d2dkRSVkdIUlIyVGlxNmhWVUg5QTFFUEtRTXdBQUloQUNQbXlhbVlYMjh1VjBTZDJPZm56RmVYOWtpYnUzbDJwbmZJOS81dDIrSzJ5bTJSci9aMTd1L3JYUFg3N1pqdEUzbHFrUmVVZ2ZiL1Zxejd3RlFNVUhPTVF3bEFJQVJnOUZTTkxwcTdFYzVuWUpOZG9nNUttN3Q1ZHU3M3UzbkxBOUhaYWN2QlhmSy9lWTYvU2JvUzl2OVNNVHJyOHlyV2UxM1V4OGN3R0FNSWhBQ010ZDJqSGxxeFR0M3VvdmtxWTJkYWgvM1M1dWtkN3REeU5zaUR1Y3djM0NYLzc5emQ4eXE3eDQxZVhMNmYzZmFUM08zNFZWRXYwbHdBQWlFQW8rT0kxSDMrdVh4djNKZTIrbTk1L1NWcGN6ZlB6djErZTBWdDArTFhtcTl5enV6bTJRbUJGOXNOdXNvRDREeWxiTHRkdXF6M25LZzNSbDJneVFBRVFnQkdROVhvb2lkSC9hKzA1WHgrK1NyZ2ppMStUWG5DOXAvTkNIeWRnVjdPOVhiM0xFOW8vNDlSLzk1bG5UelZ4N05TTVo4aEFBSWhBQzEzN3pMY2RYTkVXVzMxaTdSNUl2Zk9WYitmUmwzajdlMjczSFU0MzB0NC95N3I1RkZKMTVhaEhBQ0JFSUNXeVYwNmM5Zk9mTVh2LzR6UWRtOHNBMS91dG5ocTJuelY3NC9lMGdXektXcDExRmU3ckhQN1ZGeFJQbGx6QVFpRUFBeFhIc3lsMDgyek04aEx2aUs0UTR1MytlcFVET2pTQ1h5ZExwKy84bmEyd3RlaWZoaDFyeTdyUEVrZ0JCQUlBVmc0TjArYkIzWTVZRWI0dTNXTHR6bGZiY3BUT0hTNmVYYitQU3NWZzVqUVh1K0llbCtYNVkrSmVxNW1BaEFJQWVpdlBHSDczbVg0T3lodG50UjlqMVJNOU41V3YwOWJUdW1RLzNlK0NuaVp0M1FrZlRMcTNlWCtPSnQ4WlhyZnFKOW9LZ0NCRUlEZTNDVnRuc2k5TTUvZlBsSGJ0WGlicnlpRDN1bGJsY25LeDB1K24vUHJVWS9vc3M3OUJFSUFnUkNBK3AvVkQ0cDZXTlFEVWpHSzQ2MWF2TDNYUjUyZE5sL3h5NVVIZXNsZFFHL3dkazZFLzZrSWhQa2V3dzlxSmdDQkVJQzU1ZkQzN0tnblJDMXU2VFplVUFhLzNNMnpNNmw3L3ZjcWI5OUUrM2JGOG9NMEVZQkFDTUJmdWtrcUpvTi9TU3JtQVd5TFM4dWdkOXFNMEpmLzl4KzhaY3ppdElybEIyZ2lBSUVRZ0MwOVB1b05xWG95K0VIS0kzaitMRzBlM0tWejFlL2NWSXo4Q1hWY0dIVlIxRzNuV0w1TDFCMmpmcTJwQUFSQ2dFbDNwMVNNeXZpb0JYN2U4OU9XZzd2azhKY0hmYm5HVzBJZjVIMnEyMzJFQndpRUFBSWh3S1I3V2hrR2J6SEE1N2drYlRtNFMrZC9YNkw1R1hJZy9LSm1BaEFJQVNaUm5xUHQ2S2dYOWZFeDg1VzlmSVd2MDgzenRETDRuYSs1R1ZJZ1RCV0JFQUNCRUdEaTdCaDFZdFNoODNpTVgwVnRTRnNPOUhKV0t1NEJCSUVRQUlFUW9JVnVHZlg1cUFjMi9Mc3JVOUc5N3BOUlgwbnV2YUw5OG84VmVkN0ptOHl4Zk4veVBNU1BHQUFDSWNCRXVGblVTUTNEWUo3bjc2MVI3MCttZUdDMFhCNDFIYlhYSE11M2o5bzdGZDJjQVJpU20yZ0NnQVd4VGRUSFV2ZEJObWE2TEdwMTFKNVJieElHR1ZHNmpRSUloQUNFVjBjOXR1YTY2OHNUNWJXcDZDb0tBaUVBQWlIQWlQcXJxRmZXV0M5UC9QNjZWQXcyYzU1bVF5QUVZTkRjUXdnd1dEdEh2UzlWL3dDWEI5WjRWdFIvYURMR3lHa0NJVUM3dVVJSU1GajVpdDlkS3RhNVB1cXB3aUJqNk94VURDNHpsejJpYnE2WkFBUkNnSEcwVDlRTGE2eVhKNmMvVVhNeGh2SzBFMmQwV2I0b2FuL05CQ0FRQW95ajE2VHFydm01TytteG1vb3g1ajVDQUlFUVlPTGNJMnA1eFRwblJiMVlVekhoZ2ZCQVRRUWdFQUtNbTl4VmRGR1g1WGxFMGVkRVhhR3BtUEJBZUpBbUFoQUlBY2JKTGFMK3RtS2RmTS9nLzJncUJFSmRSZ0VFUW9EeDhvUlVURGN4bHp6UXhqOXBKaWJFUlZFWGRsbCt5NmpkTlJPQVFBZ3dMaDVmc2Z4TFVUL1ZURXdRVndrQkJFS0FpYkJ0MUxLS2RZd3Fpa0FvRUFJSWhBQmphR25xM2wzMFQxSC9wWmtRQ0FWQ2dEYTRxU1lBNkt2N1ZTeGZIM1cxWmxwd2QwN0ZWQ0I3cE9KK3RWejUzcldicFdJUW9HMmlyaWtEKzhWUjUwZWRFelVkOWZPb1gyaENnUkJBSUFTZ3lqNFZ5NytoaVFZdVQvZHh6MVIwM1gxSTFBT2piajNQeDh5RG9udzc2cHRSWDRuNlVTcW1EcUdlTTZPdUw0UDNYTWRON201OXJhWUNFQWdCUnRtU2l1WGYxMFFEYzkrb0k2S2VHSFduUGovMmJxa1lQZllKNWYvL1ZkUkpVUitKK3E2bXIzUmwxTmxSZDU5aitiWmxLRHhkVXdFc0xQY1FBaXhzSUp6V1JIMlY3OWQ4ZHRTR01waTllQUJoY0RaM0twL3JPK1Z6UHlzVjNVK1ptMjZqQUFJaHdOanIxalV4enovNEcwM1V0eUQ0cXFoZlJyMG42dDVEM0piODNPOU54WDJIcjB6ZEJ4VVNDQVZDQUlFUVlJemRzc3V5U3pYUHZHMFg5YktvYzZOZUY3VzRaVDhHdkQ0Vmc5RzhwTnhXQkVJQWdSREE1K3FOREpneFAzbUFtRk9qM2hSMW14WnY1NjVSL3hiMXcxUU1hRVBoTklFUVFDQUVHSGZkcHBSd2oxbHY4clFRNjZLK2xxcEhjVzJUUE0zRjE2UGVFWFZ6YitPTjk4OTJ1MHJlbVFvRWdBVmtsRkdBL3ZwaktxNFF6V2FucU8yVGVRaWJPRERxRTFGM20rZmpYQkoxU2lvR2dNbkJKTjk3K091b3k2TXVTOFhWMjUzTDhKbEhGTjB6RlFNRTVWQjNuL0svOVNMLzhQcUNxRWRHUGExOC9rbVZwK240Y2RRRHVxeVRyeEthbWdWQUlBUVlXUmQwQ1lTcERCay8wVXkxUERQcW5WRTc5dkMzZWM2N2ZIWHVQOHY2YWFxZU4zQmorZThaVVYvZWFsbWVMdUdRcU1kRlBUek5QWi9lWE81V0JwM25SWDF3Z3QvVDB3VkNnSGJSWlJTZ3Y4NnBFUXlvL201NmM5UUhlZ2lEdWYzelNKKzdsOEh0eldVQW4rOGs4ajlMUmRmUEhBcnZFUFh5cUY4MGZJd2R5dGVVQjU1Wk5NR0JzSnQ3MnYwQkJFS0FjUTZFQnM3b0x2ZGNPVDdxeUI2Q3hsT2k5bzU2WXhyczlCNi9pMXFUaW02bFQwckY0REZONU1ENjd0VDhLdU1rQkVMSEI0QkFDRERTem5UQzI3TnRvejZlaW52dDZzckI3K21wdUxKMFFpcm1lbHdvdVZ2cVNWRkx5MjA0djhIZnJvajYyQVNHd3FwQXVIK2EzS3VuQUFJaHdBU2M4QXFFczh2QjZFTlJUNnk1Zmc1K2IwM0Z2WDBmWGVBZ3VMVk41VGJrQVdqZTNtQmJuaHoxbmdrTFFCZW5ZakNmdWVUUldQZHdPQUFJaEFDaktsOGh2TDdMOHR5bGNYdk45QmR5a0hwS3pYVnpvRmdXOWRKVWpCRGFGbmxiWHB5SytSSi9YZk52L2o0VlhWd25pUjlOQUFSQ2dMRjFaZFRaWFpibmUrVDIxVXhieU5NeVBLL211aWRISFJUMTN5MStQZCtLdWxmVWY5VmNmM1VxdXBBS2hBSWhnRUFJNElSM29qdzQ2aTAxMTgwRHNmeE4xQjlHNEhWZEZIVll1YzExSEpPS2V4RWRINDRQQUlFUXdBbnZSTGgxS3U2OTI2N0d1bmxVejN3Vjhmb1JlbjNYbDl2ODJocnI1bTdFbjRqYXhmSGgrQUFRQ0FHYzhFNkNkMFhkcWNaNmExTXg3OStvZW5YVVVUWFcyeU1WOTFLT3V6d3Y1SFZkbHJ2UEZrQWdCQkFJeDF5ZXYrL3dHdXZsRVR3dlRhTS9QY05yb282dHNWNmV2dUt3TVgvdnI0NDZxOHR5OTlrQ0NJUUFJMjA2NnZJdXkrK1lKcU5yNEZ4dUVmVzJtdXZtS1JsZUgvV1ZxTjFIL0hYbndYTStXMk85SEJ4M0h2Tjl3SThtQUFJaHdOaks4OUNkNFlSM1RpOHZRM0VURDQwNk5kVzdxdGhXK1dybjM1VS9HSFNUZys5cWdSQUFnUkRBQ2UrNHlmY00va09QZjN1cnFJOUh2VCtON2hXMFMxSXhJZjAxRmV1OUpHcFh4d2NBQWlIQWFEclZDZStzWGhHMXd6d2ZJMC9tL3NPbys0eG9HK1J0ZjBQRk9qbnd2bnlNOTRQVEhCOEFBaUhBT0hQQys1ZHVIL1dzUGozV1hsSGZURVhYeWxIOExzdlRhUHkwWXAzbmxtMDJqczZMK21PWDVaTitueTJBUUFndzRxcTZ4TzAvZ1ovQnowL1ZjdzUrdGNIamJSdjFMMUhyVTczcEs5b2tkeG45eDRwMWRpamJiRktQRVZjSkFRUkNnSkYxY2RTdnV5eS9lZFNTQ1dxUEhONmVYYkhPZDZJZUh2WFVWTnhyVjFmK205eEY5NGtqMWlaZnJCR0FjNXZkVkNBRVFDQUVjTUk3eWg0VnRWdkZPcThwLzgwRHh4d1U5WTBHajUrN0Y1NFk5WjZvblVhb1hWNVhzVHkzMldFVGVuemMwMGNJZ0VBSUlCQ09oeU1xbHA4WjlhVVovLytYVWY4cjZwK2pybXZ3UFBtSzJvYW9lNDlJdStUNUZYOWNzYzZUSFI4QUNJUUFUbmhIMWMxU2NZV3dtN2VuWXA2K21hNVB4UlcwUEFmaGRJUG51M3ZVdDZOZU5pTGZjKyt1V0o3YmJ0c0pQRDcyYzU0Q0lCQUNDSVNqN3hGbEtKekxWVkVmNjdJOGg3dDdSUjNmNERuejREVnZTc1ZWeHp1MHZIMCtGSFZsbCtXNU8reUR4M0MveUtPTS9yTEw4dHoxZDBrQ1FDQUVHRkUvU2QyN08rNVZFWlRHeFY5WExQOThxaDVFNWs5UmZ4djFqUEovMTdVc0ZRUE9QSzdGN1pOZno1Y3Ixbm5NbU80YmZqUUJFQWdCeHRiVlVXZDFXYjVOMUQwbW9CMGVWckg4TXcwZTY4T3BHR3prV3czKzVqWlJuNG82Tm1ySGxyYlJweXVXUDBRZ0JFQWdCSERDTzJwMlRzVzlZTjE4c2VGam5sdUd6TmVtNGo3RHV2SkU3OTlQeFFpbWJmUDVpdVU1Qk4vTThRR0FRQWpnaEhlVUhKaUtLNkZ6K1huVWIzdDQzTndWOTlWbE1QeEZnNy9MVjJTL200cEo0UmUxcUoxK2s3cmZUNWZuSXR6ZjhRR0FRQWpnaEhlVTNLMWkrWGZtK2ZqZlRNVVZ2NDgxK0p2dG85NFM5WVZVUFRmaVF2cGV4Zkw5eG5ELytHblV0VjJXVDhwOXRnQUNJWUJBT0piMnFsaCtSaCtlSTQ5VytiU29aMFpkMnVEdjhtQTNwMFU5dWlWdDljT0s1WHVQNGY1eGJSa0s1eklwOTlrQ0NJUUFZK3E4aXBDU3IxRGRkb3hmZjlXMEFXZjI4Ym4rUFJYVFUzeXZ3ZC9rdHMrRDJ1UjVFSGNZY2x0VnpiVjQ1ekhkUjNRYkJSQUlBY1pXbm16OXh4Tjh3bHMxQitCdit2eDg1MFE5S09xTnFmNkFNL2xld2hlbVlzQ1pZYjRYNTgyekxRVkNBQVJDZ0JZNmRZSlBlSGVxV1A3ckFUeG5IbkRtbFZGL0ZYVitnNy9MZzdia3E0c3ZTc01aY09iQ2ViYWxRQWlBUUFqUVFxY0poSE82Y29EUC9iVlVERGp6aVFaL2s3dU5IaFAxdWFoZEY3aXRMcTlZdnFQakF3Q0JFR0QwVFBJVmtKMHJsbDgyNE9mZkdMVTg2dGtObit1d01xZ2N1b0J0VlJXT2J6R20rMGkraW50eGwrWGpmcDh0Z0VBSUlCQjJuYXVQK1h0ZjFOS29VeHI4emUxU01XSDh2NlZpcW9wQnErcW1ldjJFSHlNQUNJUUFJeWxQaTlCdDB2RTh6OXBlWS9yYS8xU3hmT2NGM0phem9oNFl0VGJxaGdZaDdTV3B1TGR3ME5NZlZQMG9jUGtZSHlOVmdmQkFIeU1BQWlIQU9KL3dqdXNWa0twdWtJc1hlSHZ5dkhlcm94NlptZzFva3dOSnZycjR2RFM0QVdkdVhlT0hoVWs5UGc3eUVRSWdFQUlJaEtPbjZncmhIWWUwWFY4dVE4WW5HL3hOdnBMN3JxaFBwY0hjMDdaYnhmTExIUjhBQ0lRQVRuaEhTZFZWdUxzTWNkditFUFhFcUpWUlZ6VDR1OGVtWWlxUlEvcThQYnRYTFAvbEdCOGZlYTdPVFYyVzUrNjY3ck1GRUFnQkJNSVI4NHVLNVhkcndUYXVTOFdBTXo5czhEZTNqL3BTMUp0Uy93YWNxYnBIY1hxTWo0OUxvODdyc255Yzc3TUZFQWdCSnNCUFUzSC8ybHlXcFBHY2VQeXNpdVZMVy9UK1BDRHE2TlQ5U3RWTStWN0NsMFY5SzJxZlBtekQvaE1jQ0RQZFJnRUVRb0N4ZFcwWk9ycDlIdTgzZ1NmNTkydlJ0bDVkQnJ5L2pycWd3ZC9kTzJwRDFJcDVQditES3BiL1RDQUVRQ0FFY01JN1NzNk11cXJMOGwxVCs3b0NucHlLQVdjKzArQnZkb3c2THVxa1ZEMWE2R3oyVGQwSHFzbWp0WjdoK0FCQUlBUnd3anRLOHBYUjcxZXM4NWdXYnZkRlVZK1BlbjZxbmpwanBpZWtZc0NaUnpSOHZzTXFsdWMydk03eEFZQkFDT0NFZDlUODl3Z0d3aXpmUzNoczFIMmlUbXZ3ZDNrcWpYeVZjVTNVdGpYLzVyRVZ5Nzg2QWNkSHZ0LzA2aTdMeC9VK1d3Q0JFRUFnSE90QStObUs1UTlOUmRmUnRzcGROZk85am05TDlRZWN5ZCt2cTFJeDRNemVGZXZ1RWZXUWluVk9ub0RqSTE4Qi9VbEZtKzZYQUJBSUFVWlVua2Z1ajEyVzUzdklkaHZEMTUwSFhPazJIMkdlWCs3dld2NGE4bjJRLzVDS3JwMi9iZkIzQjVldi8xbGQxdm5mcVJpeGRDNi9LNFBsSk5CdEZFQWdCQmhycDA3Z0NXKytxbFkxUU12S0VmbE8rbUxVZ1ZGZmFQQTNPMGU5TjJvcWF2Rld5N1lyWDNzM0owYmRJQkFLaEFBQ0ljRG9xN29YYlZ4UGVEOWFzVHlQTkxwOFJGNUx2bUwzcUtpWHBPNGpxRzd0eVZFL2lucllqUC8yakZSTWN0L05oeWZvK0JBSUFRUkNBQ2U4WStnYnFYcVMrbGVsb3Z2b0tNaFhQWStKdW05cU5oM0U3bEZmam5wREtnWkkrZWVLOWZOamYzT0NqbzlKL2NFRVFDQUVFQWh2ZE04eGZkMDVRTDJqWXAzOVUvdnZKWnp0L2N6M0NiNHoxUjl3Sm9mZVYwVDlQT291RmVzZU4ySEh4MjlTTWVYSFhNYjFQbHNBZ1JCZ1F2eTRJamprQ2Nwdk9xYXYvUU5SRjFlczh5OVJ0eHF4MTVXN2piNHdGVk5IWE5UZzc2cTZpdjQrNm4wVGVJem9OZ29nRUFLTXJVdWp6dXV5ZlB0VVBVM0JxTG9zYW0zRk9yZUxldk9JdnI3UHBXTEFtZi9xMCtPOU5lb0tnZkF2SE9oakJFQWdCQmpuRTk1eHZnS1N1NDFlV0xITy80bDYzSWkrdnZ6YURvMDZNbldmWkwxS0hyam03WTZQV1Iza0l3UkFJQVFRQ0VkVHZ1TDErb3AxOHB4OC94NjE1NGkreHR3bCtDMVI5MC9kSjFydkpnODJjNm5qWStLT0R3Q0JFTUFKNzlpZjhPYUJVcXBHazd4bDFDZWlkaHpoMTVtbm1NZ0R6cnk3NGQvOUlCWHpGazZxUExKcXQza1h4L2srV3dDQkVFQWdIUHRBZUYzVWM2T3VyMWd2ajdqNjZWUk0zajZxOGhYUjUwVTlOZFViaFRTM3pjb2FiVFBPTG8rYTdySjhuTyt6QlJBSUFTWkFubyt2Mi8xbGUwVGRmTXpiNE51cDZGWlpaVmtxUmlmZFpvUmZhdzYwUjZTaUsyeVZOVkduT0VSMEd3VVFDQUhHVjc0SzFPM2VzaHdjOXArQWRzZ1QwZit3eG5wUGo1cUsybUVFWCtQTm9rNk1la3lOZGI4YjlUcUhoMEFJSUJBQ09PR2RoQlBlYTZLV1IyMnNzZTRUb3I2WVJtdU93dHRFclk5NmRJMTE4L3lGVHkzYkJNY0hnRUFJNElSM0lweFRCcUU2OTh3OUxCVURydHh6QkY1WEhrem0rMUVQckJtTWN4dWM1N0J3ZkFBSWhBQk9lQ2Z0aERkUDVQNmltdXZlTlJYM0h6NC8xYnNuYjZIbGJYcFoxRGRUY1M5b2xUelFUSjUzOFNzT2lTMmNIWFZsbCtXNWJXK3VtUUFFUWdDQmNEd2NHL1hLbXV2bWV3bmZHZlcxcUx1MzZEWGsrejYvR3ZXbVZIOWsxRlZSSDNZNC9JVjh4ZmpNaXVDOXYyWUNFQWdCUnRXdm8zN2ZaZmt1VVhlY3NEWjVZOVNyRzZ6L2tGVE05WmRISzczTkVMZjd0bEZIcDJLQW5JYzIrTHQvS3NNanMvT2pDWUJBQ0REV3FpWm5uOFFUM3RlbW9zdmxwcHJyNTZ1Ri94aDFidFFiRmpoRTM3NE1kUG01WDVycVQ1YStxZHptMXpzRTVoVUk5OVZFQUFJaHdEaWY4RTdxRlpCOHRTM1AyM2RWZzcvWk9lb1ZxUmlZSlU5UmNXZ2F6SVQyT2ZRZEZ2WEpxRitVNFhXbkJuK2ZYMU1lUU9iZjdQNlZmbHl4ZklrbUF1alBGeHNBN1F5RUIwMXcyM3cwRlNPUW5wU2FYZlhMMzJ0UEx1dVNxTStsWXJxS2ZML2hyM3JZam55djJsNnBHQzMwYjhxZ2Vjc2VYOU81NVhiOXdLNWZ5OWtDSVlCQUNEREpnZkRBQ1crZjcwWGRLK3FEcWJncTExU2VzL0FaWldVWHBHS2draHcwcDZNdWpMb3M2bytwNkhxYUo1SFBJMWZlSWVvdXFSalJkR25xejl5SG40cjYrektrVXM4dks1YnZxb2tBQkVLQVVYWkcxQTFwN3U3NyswUnRHM1h0QkxkUm5yRDkwV1dZZW5QVTRuazgxdTNMK3FzRjNQNk5VZjh2Nm4ycC9uMlJGSzRyQS92T2N5emZVUk1Ceko5N0NBR0c1L0pVWEttYXk3WmxLSngwT1VpOVArb2VVU2VNMEhaL1BCVURuN3hYR096WjlWMlc3YXg1QUFSQ2dGRm5ZSm42Y2hmUHAwUTlQR3BEaTdmejY2bVlmaUlQSHZOYmI5dThiTk5sMldXYUIwQWdCQkFJSjg5WG8rNFQ5ZGd5ZkxYRk42TWVXWWJCcjN1YjVpM2YxdEx0S3VBVm1naEFJQVFRQ0NkVDdvTDUyVEo4NVlGbjNqdWtnSEJwMUx1ajdobjE0S2lUdlRWOXMzdkY4dDlwSWdDQkVFQWc1RWRSejRuYUxSWGRORThvZzlxZzVLNktlUjdDUEhwcEhwSDBlVkduZWh2NmJ1K0s1ZE9hQ0dEK2pESUtNRng1cnJVclV6SGx3V3p5VlpJODc5MGZOVldsSEFJL1hsYWVSdUwrVVErS2VrRFUvYUp1MCtQajVuc1hmeGoxblZSMEJjMWRRNi9SM0FOMzM0cmw1MmdpQUlFUVlOVGxVUlR6M0hoTHU2eVRyeEorUTFNMWNsVXE3alg4Nm96L2R0dW91NWNoTzE5TnpGTlk1S2tMT3ZlcDVTdC9lZVRYUDZSaURyeGZsUFVIelRrVUQ2dFkvaU5OQkNBUUFveUQwd1hDQlhGUldiUmZEdXNQcVZqblc1b0pZUDdjUXdqUWprQ1lLZ0loVEpJbnBXSWV6cmxja0lydTFnQUloQUFDSVl5WjUxY3MvNHdtQWhBSUFjYkZhUUloL05ralVqR1ZTRGNuYVNZQWdSQmdYUHcyRlNOWnppV1BNcnE3Wm1JQ0xJcDZZOFU2djQ3NmlxWUNFQWdCeG9sdW81RFNNMU14UlVnMzc0NjZUbE1CQ0lRQWt4UUk3Nm1KR0hOM2lIcHp4VHA1enM3M2FTb0FnUkJnMGdLaEs0U01zendOMXNlaWRxbFk3NTJwR0dFVUFJRVFRQ0NFTVhGTXFwNTM4RTlSYXpVVmdFQUlNSTdPakxxK3kvSzlvN2JYVEl5aE5WSFBxN0hlSzZKK3I3a0FCRUtBY1pUdmplbzIwWGJ1VXJldlptTE16a0hlSHJXcXhycmZpanBXa3dFSWhBRGpUTGRSSnNXdG96NGI5Y0lhNi80eEZhT1AzcURaQUFSQ0FJRVFSdHZmUlAwZzZyQWE2MjZLZWxiVXp6VWJnRUFJSUJEQzZOb242aE5SbjQvYXZlYmZ2RDdxUkUwSE1EZzMxUVFBQWlFTXlLS29CMFc5SU9ySkRjODc4ajJELzZ3SkFRUkNnRWt4SFhWNTFFNXpMTDlqS3VacHUxaFQwV0s3UmQwLzZoRlJqMHYxcndiT3RDN3FSWm9TUUNBRW1DUjUwSXd6b3U3YlpaMThsZkJybW9vVzJDSHFIdVUrdVgvVWdlVy9kNWpuNC81TDFDdFRjZjhnQUFJaHdFUTVYU0NrWmZKNEEwdG1CTDREeXRvcmFwcytQczhWVWMrTitwQW1CeEFJQVNZNUVLYUtRQWlEY3JzWmdXKy9xSU5TY1JWd3h3WFk3NThSZFpxM0FFQWdCSmhrVlNmRUFpSDlzRk1aK0RwWC9UcGRQbSs3d050eFRkUWJvdGFVL3hzQWdSQmdvcDFhc1R5ZnVPZVJHOTFmUmQzditiM0tzTmU1MXkvL2U5YzAzS21uOHYyeUg0bDZkU29HVXdKQUlBUWdGU09JL2pvVkk0ck81dVpSZTBTZHE2bll5cDNTNXF0K25mQ1h1M3R1MzZKdHZMd01nc2RFL2RoYkJpQVFBdkNYVHU4U0NMTjdDWVFUN1pacGN6ZlBBMmJVNHBadTc3VlIveDMxeWFpUFJWM2lMUVFRQ0FIb0hnZ1A3Ykk4VC9SOWttWWFlOXRHN1RzaitIVkM0QjR0Mys2TG9uNFU5YjJvYjBkOUkrcVAzazRBZ1JDQWVuNVlzZnlobW1qczdERWorT1V1bjducjV6NWxLR3lyUEUzRW1ha1lDQ2wzL3p5OXJOOTZPd0VFUWdCNjkrMks1VXVqZG8vNnBhWWFPYnVrTFNkeTcwenZjSXNXYi9QMVVXZlBDSHcvTGtOZ0hnem1CbThwZ0VBSVFIK2RWNTZBN3pYSDhqeks2Rk9qL2xWVHRkWU9xUmpRWmYrdHd0OGRXcjdkdjVrUitNNG8vODFYQWEveWxnSUloQUFzbkR3QXgvL3RzdndGVVc5T3J0QU1XNTY2SVUvaGtDZHczeTl0SHVEbGJsSGJ0SGk3TDAxYmR2UE00UzlQZVhLeHR4UkFJQVJnK0U2cUNJUzV5MmkrU3ZnUlRiVmdkazFiM3VPWC84MVhBWGRxOFRibkVUN1BLc1BmcWVXL3VjNUw1cklFUUNBRWFLM3ZwcUtyM2oyNnJQTzZxQk9qcnRaY2ZiVlQyZTQ1OE0yYzJtSFhsbS8zTDFKeHBTOWY4ZXNNOVBMVHFHdThwUUFJaEFDakpWKzlPVGJxN1YzV1dSSzFPdW8xbXF2bjc4QzlaZ1MrenIxK3VRdm9UVnE4M1pla0xlL3g2M1Q5TkxVREFBSWh3Qmo1WUJuMmR1bXl6aXVpUHAyS2VkK1kyeDFuQkw3T1FDLzVLdUFPTGQ3bWZHWHZ6TFI1Wk0vT3YrZDdPd0VRQ0FIRzMyVlJhMUwzMFVTM1MwVzMwWU9qTm1xeUc2ZHY2TnpmMTducWQwQkZxQjYyZkRYNDNMVGxsQTc1MzN6djMzWGVVZ0FFUW9ESjlZNm9GMFhkdWNzNnVldm9KNkllSFhYbGhMUkxuckI5bnpMOEhaUTJYL1hibytYYi9mc1pnVy9tOUE2WDJkVUJFQWdCMkZvT2VDOUp4YWlqM1R3aWFpcnF5V244NW96YlkwYmc2OXp2dDA4WkN0djh2blVHZUprNXZjT0ZkbWtBQkVJQW1zaHpFcDRRZFhqRmVvK0srbExVNDlOb2RoOWRuTFljMmJQejd5MWF2TTNYUjAybjRrcmZ6QzZmMCtVeUFCQUlBWmkzUEJIOS9WTXgvMkEzRDQzYVVJYkhVMXI2V3JaUHhZQXVNMGYyekYwLzc5VHk5K0NDdE9YVnZseDUwSmNyN1o0QUNJUUFERksrOSt4SlVWOVAxU05qNW1rVHZobTFOdXFOYVhoZFNHOVNic3ZNNEpmLzkxNHQvLzY1TEcwNXFtZG5VdmMvMkEwQkVBZ0JHSlo4eGUvWlVmOGV0VTNGdW5uMDBYK0tPaUlWVTFjY0gzWERBTGR0MXhuQkwxY2U2Q1ZmQmR5cHhlMlpSL0E4SzIyZXlMMXp6MThlOFhPVDNRMEFnUkNBdHZsd0t1NnBlMWZOOVplVUFUS0h3blZSSDRyNjFUeWVmOGUwZVZxSC9kTG1RVjV1MS9KMnkzUDMvWGlyOEplN2UxNWpsd0pBSUFSZ2xCeGIvdnYyVkgybHNHT1BWSFFmZlVQVTk2TytIUFdkTWhqOU11cmFXWUpmRHBQN3pBaC9CNWIvN1NZdGJwdEwwcFpUT25SQzRDVjJHd0FRQ0FIR0tSUmVsSXF1b05zMytMdEZVZmN0cXlOM25idzA2ay9sOTBMdTVubXJsci8rZkdYdkoybkxRVjUrWElaYkFFQWdCQmg3ZVRMNjgxSXhKY1ZkNS9sZHNMaXN0dGxVdnNhWjNUM3ovODczL2wxckZ3QUFnUkJna3VXQlp1NmRpbnNLbnpiaXIrVVBhZlA5ZloxNS9mTC92dFRiREFBQ0lRQ3p5L2ZIUFQzcVA4cGdlTmVXYis5VmFmT0lualBEM3dYZVNnQVFDQUhvelJkVE1Rak1jNk5lSHJYYmtMY25UM014bllvNS9Eb0R2ZVRnZDNiVTlkNHVBQkFJQWVpdlBOaktNVkh2VGNWVnd4ZEUzWE1CbnZlM2FmUGdMcDNLMHpwYzRTMEJBSUVRZ0lWMVJSa0tjK1Y3REo4VTlmaFVUQlkvSDVlVlFhOHp1RXV1ZkFYdzk1b2NBQVJDQU5ybkIyVzlNaFhkU0I4UWRYRFUzVkl4citEdG8yNldpcWttOHNpZGw2ZGlDb284aGNPNXFSalJzM1BQWCs0Q3VrbVRBb0JBQ01Eb3VURHFrMlVCQUJOdTBhWk5mdWdGQUFDWVJEZlJCQUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQWdFQUlBQUNBUUFnQUFNRGx1cWdrWVpZc1dMZElJQU16THE5OTg5Skw0WjNuVTBxaU5VZE5SNjE3enNpTTNhaDFtczJuVEpvM0ErSnhQMjZFUkNBR1k0REM0S3Y1Wk04dWlIQVpYUmlpYzBrb0loQWlFSUJBQ01EbGhjS1pESWhTdXIzaWNGZkhQNG9ySDJWRDFPQzFvajg2VjBpcFQ4VnFtaDdCOXJXbG41OCtNRTExR0FZQkpESU5MYW9UQjdMaW9QU3ZXeVNGcVdjVTZxNlBXdDd4WjZyYkpobFIwcTExbzQ5TE9JQkJDVTBjZC9aWlpmeFdNTC9UWlZ1LzVsOHNHdjQ1dWpPZFlONkVuVU5vSGVqK0dWalg4azlaZlZScGh5MnV1dHlUZXQyWGVCMEFnaE9GL2NTK3J1VzRPTFN0N2ZKNjZ2NDdtRTROSkREemFCM29QZzh0ckhqOWJCTUtvZzdWZUt6NzdBTWFTYVNjWVJ5dnlyN21hQVdpWlhqNlhscFpYNWhrdW80MENBaUdNbUZXYUFHaVo1VDMrM1FwTk54Qk5iaTNZb0xrQWdSQkd5N0t5ZXhiQTBKV2ZSNHQ3L0hPZlpRTlFUaWRSSnhRT1pVUk5BSUVRNW0rTkpnQmFZajdkMlBPZ0prczE0VUFjbnJwM0I4MVhCbGRxSmtBZ2hORzBwSWNSL1FBR1lmbVEvNTVadk9abFIrYkFkMGlhZlpxQ1BEQldub1BRL1lPQVFBZ2piRldFd3NXYUFSaVdtdDFGcTBLSFFEakFVQmlWUStHZVpUak10VXY4dDVYQ0lEQUpURHZCdU1zbllma3E0V3BOQVF4Sm5lNmlHeXJXdTdIYmFIbEZpOEVFdzN5Zm9Ic0ZnWW5qQ2lHVFlKVmgyNEVocXJxNnR6N04zbVd4NmVNQVFHT3VFRElwamt0Rk42RFdLa1Byek9BNmJXUzc4VlVPRWpKYk44S05yZ0tOMWZ0Y3A3dm9obFJ2V29QOFdLc2RJNU43akdnVFFDQ0UzdVZwS0piRkYrYjZ0bXhRZWFLWXY5eVhsZi9PdGs3blpERnY5NFp5bVBSeE9yR3BNeExzNnExUGRPSnZWOHhvdDVraGVtUGFmTFZscXVyK24vTCswdVZ6UE5aMHArM2pjZGJOODdVdTIrcTlYbHl4ZnVmNTE1ZmJNTlh2ZTVuSzlwKzVEMjRkVU5hWHIzMTlQOTZ6SG8rTjJiWXRsZHMyWFc1ZjI0K0pXdDFGY3p1WDczczNqYnVObGdOckxSdlVlMVllaTNXdVhLN3M5Z1BYc0k2UmVKdzFjMzMrempBMTM4K0FjZm5jcUhIY0xpdHI2MTQ1MHpNK1Y2YmFmbTltbmMrZ280NSt5NDF0ZmRTUkx4MmI3MlVFUXBnRStZdi80Qlo4MGVRVHFGV3pmR0hPcGZPbGxQODJmd0d0SGNiSnlRQXNybm1pdW5pckwrbmp1cHdZZFFKZXJqV3gvc3E1QWtONW9yeXF5Mk4xcnRndUw5ZGQzU1I4bEdGelJWbTlkRmxla2paUFNKNWZ5OXI0ZDkxOFQ2VEtrOHlxa05EWjUzSjM2L1V6VHVZYnYyY0RhcS9PTnF5SXY4dnQwWmUyR2NDeHZqalZtRlIreG42MXZrYjdMay9OSmtsZlh6UEVOMzNjamhVMUF0V0cyY0pnUzQ2UnBUWGFmUDBROXBsV2ZXN1UrSEhwdUlyOTRNK2Zwd3UxWFF2MUdSVEI4TStmUVJFT0RVTEVTSElQSWVPazZtUm1hUm5HaHZWbGszL2RQNlg4NHV6MW5zYjhkOGZseDVtMCt5TGo5ZVoyTzZGQjJNanJuYkQxZTU2LzlLTk9MaytTRnpkbzl4UEtxd2xOVGpUWHpPTzkzdnExNU1jNlpUN3owWlhiZjNKcU5pZmVzdmsrYjgyUWVrcVA3ZFZwbTNQS0h3emFwTTcyckc4WVBCcTl4dktxMzNTL0g3ZnptVllqREdaVG8zS010TUJJdFVuNStYcEt6ZjJndGU5VnZ6NkRJaHk2enhlQkVJYXN6a25QbW1GTVExRis2VFg5MHF3NmFUaGxVaWFyTHEvUTlScm1qOXNxS0RRTlJET3RHdkxjbHZsRTVlUmUzdmN5VVBlNjdZdkxkbHN5Z1BkMlJaOGVlOVlmQUlhc3puN1dOQkQyTWtuOXVnRTk3dkkrUHYvUWo1RXhOcEEyS1krMTQrYTVYYWNNKzVqdDkyZFFoTUlWZGprRVFoaWVPZ016MU9yQ05ZQXdlSExxb1J0ZG5aUDBDVGp4cVh2Zld0Y2ZBbVlFeS9tMjE1b2hYNTFkM1BRa3JBeURLL3J3dkd2NmZHeXNtdWNKNVZ3L0FBejloR3pHL2FtMUEyRjVOYTlPbDdPbVZ5SHFkblZ1K2tOSm5mV0hjYi9ZNGdIc1Y2T3UzMjJ5dEkrUGQ5eXdydTRQNmpOSUtFUWdoT0hKSnlkMWZvbGVzR2tveXVjWlJCaWMrU1Yvd2pDdWVpNmdmbHlSV3pMam5zRzJiTk84VHNicWhwNXl2UlY5M04vNmRXeXM2SGZBYkZGb3J4dmFaaHNaY2hEZFJxZjcvYmpsWjA2dFFOajJZMlNDOUxOTit2MFplTnhDSDdPRC9neUtVR2k2S3dSQ0dKSjg4bEgxYS9UaUJUeWhiM0xQVzg5aEo0MzNyK0g5YXI4MWZYeXNGUzBJNFpYN2NMbU5hOXIyaHBZbmZtc0d2TThNKzVqb05Td05xdHRvbldDMnRNRitYVGZ3VHJYNUdKbEFxL3A0akkzc01Uc2huMEVnRURLUkZwZGRrOWJXUEtGZk5zaU5hZGc5TWYrQ24rY1hPNlNzdzFOeHRiTnVWNnZsZzM0OUxiS2hmSS9YcFhyM2pWYTErN3J5OFpxT3NMaDhIczg1VmI3Zk02dnBOdFFKQmIyRTRNN1VIWVBzNW5kY2crMWFOK080eUxXeTV2dStiRmhYQ1J0MEY5M1FZeURzWmYrYjZ2UGpMcXY1M3JYOUdCa1ZvOUltNjJkVTR4OVJGdkI3YkVFK2cxd2xaRlNZZG9KeHNuVEdoL2VxR2gvMnE5S0FoaE12VHdqci9oS2J0M2YxTFBmWlRNWGpyRXZWdzNrUC9QVzBLQWl1bkdWT3dsN3VqOXRZdHZtNnJSNnJ5U0FKVGI3b084RnpxdHRjYk9VMjVCT2l1bGVXbDgxMU10Z2dsTXdNREt0bmJsOFpxSmFuUHY2U1hyNitaVFhmbzBObW14c3ZIaU52NjhrMWpvc1ZhVGdUdWRkdDk3ODRYblA3bDlQTExLbnhITFZmVy81OEtUOVBWdFRZcDliMUtmQk90ZmtZR1pFUU9BcHRNdWZVTHpPNlpkWU5Yd1AvSHB1UXp5Qm94QlZDeGs2RHE0VExCbmdqKy9LYVg0QjVmcTZWY3cyNlVINFJyYXo1bk12R2VDcUtEWE45TWVmMmEzZ0MwZm1TWHpmTFk2MXI4T1ZkSjZSUGx5RjJ6NmkxVlNkMTVUYXM3OU1KUk4xOU1KWGJlUGpXMjVmL2Y5N3UxTi81TzVjM2VJODJkRG5HRCs5ak1PdTN1cFBSVDg4alNQVnlwYWRmOXhIV2ZYMGJXbjZNdERrSWprcWI1UGY0NEhJN044N3htWHB3Z3dDNkVOOWprL0FaQkFJaHBQcmRMUWQxRDBIZEsxYVZYK0RsRjlMYW1vODNybDgrcXl0R0ttelNOVzF0eFlscXY0Ykk3NXdvOWZKNC9SZ1ZzbTdYcTZtcWJTemJxMThubTh2NzhCNTFCa3FwYXFjbFF4aW9vdkhvb25Qc08zMC8zc3Y3K2FacnZJYmw4OWp2bXV6RHd6NUcybWlVMnFRVG1xWnJIS3NyVTROYklGb1FDQ3MvZzQ0NjhxVzFQb04wRzBVZ2hDRnBjSlZ3eVZhanJzMzd2cW55aExEVzFhUHlWOTFKUHZtcGRZSlUxVTROQjY2WXFySHZyTy9IUHRqcmNQdDlHcWEvN3I1UTk4ZUdkZk05UHNxdVdsVlhMVGMyQ09WMWd0TkNuNHoxM0YyMGgvMjVseFBucVQ3c084dHI3aTl0UDBaYStkMDFRbTJ5dXU1ek52eGhjMkQzT0U3SVp4QUloTkREQ2V5cXJiNjBGdXBFdkhhSUtiZHJ1by9QUFVycWhyTTY3L1YwbmU1WGFYVHZPZXFjOUN4Sjlic3NiNmk1RDI1TTg1OUNvTTZKM3ZvR0o3WWIrdlNjL1ZUcjNxUWFQd1lOcXR2b3ZBSmhlZld3YXQrYUd0ZkF4aGFmcFUydllxN3I0K2VFenlEb0k0UEtNTGJLUVJSeU43ZXFRVUp1dkVyWVl4ZWRXUit2ajE4a1czd0IxM25zSEFacWhwNVIwZVNMZVZtTk51em5jL1lqdUEzaTErTkI3b01EZjc4YmpEVFlxaE90UGcrMnNyN21ZeTF2OGo3bUh3QmlPemRVdE4yTlFYT09Id3VXOXVuMURmc1lHVmt0YVpQR3ZTaks3K1QxTlQ2bmgvM2FhbjBHSFhYMFc0UTlCRUlZa1ZDNHJ1d1NXdldobmE4U0xuUWdiQm82NmdTZXp2T1BVeURjME5MSDZ1VWtibm01THk0ZDhFbFAzY0ZrcGhlNC9lcnN2eXRTODFGajIySjVIOXV4eWZRVFRlL3ZuS3J4bVRqWFNKUlZyN0hudVFjWCtCZ1pwZkRYeGpicDlUdW1UaUM4OGNlVkFWMWxIdmZQSU9pSkxxT00yNWZuYkIvMmRVNld0cjZYY09DQnNNSDlnNzBHU0ZyUWh2bUVMaW9QQjM5T0tnWXhXcjRBSjNXdXFBeEgzN3FMbDFmNWE5MmYxRU8zMFRvL2ZpMmZaVit1RTBpbVJ1UVlhWDBRYkhtYkRQckhOVmZlWUFHNVFzall5OEdyNXZ4YnkxUC9yaEpDUHFsYmxRWTNraTN0ZXErYnpQdDRjYXpmejZkdjJtMTBZem1QV3JmdFhUckxWWnErRENiakdORW1RTHU0UXNpa3lLT2JWVjBkV2xaZVlkeWd1ZWpEU2QwYUozV3RzRkJYaFljNTVVc3Z6OTNMbklTVjkrZzJHWmpMTWFKTnV1MUxQb05BSUlTK0tydGYxUm55ZW5sYXVBRkZkSWtaMzVPNnZCK3RHdUltRE9wSGpjWHovUHRobkJndDFJbmxNRWY0YmR4dHRCeEVxK3I5V0Rwam4xNlNxcnZ4clJ1aFk4VG54dndNOVB0cmdBT2pqZk5uRVBSTWwxRW1TYWZiYUxmN01GYjA0V1M2N3VBdlRVK3U2MzRCKy9JWnZpYS84RzhzOTVrTlc1MnNMTVJWZ3J5ZnJoM0FQdGp0MkZqb0sya0RQd0ZzMkYxMFVCcDFHeTFOcGU1ZDZmTmpybXdRZUtmRzhCanh1VEhIanhEeitNd1pwckg4REFLQkVHb3E3NXZKSjc5VjAxQXMxRldRZkhMZFpHQ1p1b1BWQ0lSRFZQN0tYL2RrS1E5NHRHNjIwZlRLcm1Qek9lbXBkWExXY0RTLzVRdHdiT1IxRHUvamNiOFFYY0NYdDJEWDYyVzAwYXA3cXhmUG1INmk2c2VBcWJxZlBTMDVSbnh1ek0reUhsN2o0bFJ6SHNBaGg3TytmZ1lkZGVSTDNZYUNRQWd0QzRYcnlpL2VaZk1OWG4wNEdhOTl0YVZtZDYxQmY1SFMzL2QxYmV5UGF3ZTBuK2NmUDZacjdzczVFS3l0c1ErdTZzT3hVV2YvWEZ5K2hsSGFsNWUxWUJ1NnpSMDRaMWl1c1o5MDdxdGUxb2YzdGpYSGlNK052dXh2VGVmdlhaN3EvZUE2eUFEVnQ4K2dUWnMyK2JaamJMaUhrRW0wZXNDUFgvZkxiSGtaOU9wK2tmYnJ5NDUybk5nTmVrVGJ1dnZDcXFyN3o4cmw4NzYzcWJ5Q1ZPY3EwbkhsMVlUV2EwbDMwYWFmRTAzMnd5VTFKa0xmMkRBWXRPVVk4Ymt4UDZ2cUhxZmxlbld2WGc0c0VJN2paeEFJaE5EYkY4S0dRWDZwbHQxNDZ0NUxVM21TWFg0cDFaMGpVU0FjbmYxd3VzdDczby81eHVydUMzbi9Pbm1PT1R4VE9UL255V24rWGFtYm5OQXVLYmVwcCtmTWYxZjJCR2hyQ0d2VHRsUjlWaTJyRVZhbVJ2UVk4Ymt4UC9uNWpxdHpQRGI0RE1rL0xrd05lTHNIL2hsMDFORnZXUnkxUE1HSTBHV1VTYlU2MWUrKzB1dkplSjB2Z3hYeGhiT2g0dGYxTmFsZVY3MzFDM1MvRkgyUUEwdVhFNTk1bjBqa3gyN1FiYlFUQ3FmTGZYZTZEQUZMVS84bnc1NUs5YTRVNU9jK0piWnBaZDN1b3pOK1BNay90Q3hVdDdxNjNVVlhOcnlLdHZXSi9qbDFUbUo3NkRZNkhYK3p2c3ZyNk92b29tMDZSbnh1OU9kSGlOaW1VK0xmdzJjTHErVVBUV3RTL1N1Z1V3dXd6UVA3RE1wQmNBaWZRU0FRUW84bnk1MEJadFlNNlBIWE5iam5xdE0xWll0QkFzcVR3RFVOdnVSOStiUkQzVkZtYzNlcjlWc1BERkdlUVBWcjZQbjh3OGNKRGRaZmt1cGZqZTcxMkpndWo3MVZOYmZuNURLd3JKL3RSNCt5TzJ1bkJ2a2p6MXdCZE9EZHVjczJxeHZ1ZXgxdHROcysyKzI5bXU3aGg2ZzJIU00rTitZdkgzdm56RGhPVTNrYzFybTZ2T0RmWS8zK0RJb1FPTFRQSUJBSVlmNWZDbXZMN25DRDZtYlQ1R1Q4eHNtSTg5WENWSXh3dHFUaGRxMGZzVUU0eGxuZFVWNDdKMUV6NTROYm12cjRLMzk1bFhBcXRlOXF5dG95ZU5ZOWNWcldPVm1PMTlPbTExRzNYVGYwWWZUZnFab25zTDJNTnBvZis3Z2V0MnZkS0I4alBqZjZhbG1hM3dCTGF4ZHdsT3g1ZndaRkVQUnR4OWh3RHlHVGJtQUR6SlRkZXBwMmYxbGFmdWswQ1lQNXBHQ2x0N0kxcGxMOXFVY1dseWY1YTFLenE4Rk41SDJqWDEySk4vYnAyT2pyc081RFBnR3V1MC9NVjkwZmZIcVpwSDVqNnIzYjU5UVlIQ00rTjRadlkxckFYaTVqOUJrRUFpSDBLYlFOOHNwYVAwL0c1M0s0dVFkYnRVOHQ2SWxOemUwNXBBLzdZVjlmVjNsRmUyUi95RmlvN3FKYnRkY2c1NHZzWlJ2WDkvTFowN1pqeE9kR1QvcTlyWWMzbUEvVlp4QUloRENRME5iMmsvRTV0MTFYMFZaYTE0ZjNmUDBBOXNOZXJ3SU5aRDh1QjFrWjFST3l1cUZydW8rRFBVMzFlZHRtdmhmNXNhY0h0RDJ0UDBaOGJ2VDBQUDBhVEdobzMyTWovaGtFQWlIMDhRc2hud1N0SGVEamQwNm0rL21GZCtOajlqcHFJUVBmcHpyZGVIdjl4WHR0djAvczhqWkZyZXhoWDh6NzJKNkRHc0cyM0ljUDdpR01ERnZkN3FMOWZCL3J2Z2VOdTQzMkVQQTJwbmtFd2pZZUl6NDNHbS92eWo2RXdwWEQvaDRiNGM4Z0VBaWh6OWFtUHQwZjFlVmsvSkR5eTM2K1h6cWRFM1JYQnR0OWNwZFAzdmZzNFFSdGRmenRJTzl0WFYvdWkzbmJWcGNuOVRPN0kyNG8vLy9xY2o5YjJVTlhydWtlMnVyZzhqbjdjUnl1SCtTSjhVSjNGKzB4c0ExaWt2b3R0bVcrWGZ6YWVvejQzR2djQ2xmM2VJd2UzSllmTlVmdE13ajZ6U2lqa0FZL0RjV001OGxmZnV2SzBVMlhOVGhwMjFDZURFNjVYM0MwOXF2NDU1QnlTUGpsYWU0aHlhZkw5M2ZkUXIyL1BWNFpYOXJnc1h0cHE3dzlhMmNjSDh0U3pjbXN5NU92RFF0MGpEUUpXMzN0K2x1T1JMeTA1amF1YnJwUE5IajhxWEUvUm54dTFON2V0ZVZveGl0UzljaWRuZTFkMzlKMjc4dG4wRkZIdnRUM05DTmwwYVpObTdRQ283c0RMMW8wOHEraC9OTFBYemhMNWdpQ0d4YjZabnNXNUQzdm5JU3NIL0J6TGUxWGQ4OXlBdXFxc0pDdmh1L1N4KzFmM08wNVhTbDNqR2lUMW0zbjB2STdiZW1NNzdHTmcrcDJ2Z0N2cCt0blVJUS8reWNDSVFpRTBPcVRtVHc4ZlQ2UlhEbWZxd2p4T1BrcVJaMTVOZk1WT3NPNUEyUE4rVFBqeEQyRUFPTXZCOEk4bWZWeFVVdWEvbkY1WmFMdXhPVWJORGNBakE3M0VBSk1qaHZ2OFNudkU4djM4bXpvMXZXc3ZDcTRyUHk3dXFZME13QUloQUMwMTlLeWN1anIvTGYxV3kxZjNNUGpyalBvRVFBSWhBQ01ubVY5ZUl5MW1oRUFSb3Q3Q0FIb2g5V3VEZ0tBUUFqQTVNbGRSVjBkQkFDQkVJQUpESU1yTlFNQUNJUUFUSTZOcWVnbUtnd0N3QWd6cUF6QWVNdlRRT1M1Qi9NVUVvdjc5Smpyb3RhNlp4QUFSdCtpVFpzMmFRVkdkd2RldEVnalFFMHo1aFZjVm9iRUpxYkxjR2xxQ1dEaU9YOUdJQVNCRUVZOUhPYXJoWCtlajdEVStXKzVPK2lHR1VGd2d4QUlJQkFpRUFJQUFEQkdEQ29EQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBSUJBQ0FBQWdFQUlBQUNBUUFnQUFJQkFDQUFBZ0VBSUFBQ0FRQWdBQUlCQUNBQUFnRUFJQUFDQVFBZ0FBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQWlFQUFBQUNJUUFBQUFJaEFBQUFBaUVBQUFBQ0lRQUFBQUloQUFBQUFpRUFBQUFDSVFBQUFBSWhBQUFBQUtoSmdBQUFCQUlBUUFBRUFnQkFBQVFDQUVBQUJBSUFRQUFFQWdCQUFBUUNBRUFBQkFJQVFBQUVBZ0JBQUFRQ0FFQUFCQUlBUUFBRUFnQkFBQVFDQUVBQUJBSUFRQUFFQWdCQUFBUUNBRUFBQkFJQVFBQUVBZ0JBQUFRQ0FFQUFCQUlBUUFBRUFnQkFBQVFDQUVBQUJBSUFRQUFFQWdCQUFBRVFnQUFBQVJDQUFBQUJFSUFBQUFFUWdBQUFBUkNBQUFBQkVJQUFBQUVRZ0FBQUFSQ0FBQUFCRUlBQUFBRVFnQUFBQVJDQUFBQUJFSUFBQUFFUWdBQUFBUkNBQUFBQkVJQUFBQUVRZ0FBQUFSQ0FBQUFCRUlBQUFBRVFnQUFBT3I3L3dJTUFFUG1lMTBMeHlBV0FBQUFBRWxGVGtTdVFtQ0NgO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgRmlsZVNhdmVBcyhmaWxlOiBGaXFhc3Npc3RBcGlGaWxlKSB7XHJcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gZmlsZS5maWxlbmFtZSB8fCBmaWxlLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIGxldCBmaWxlQnl0ZUFycmF5ID0gYmFzZTY0anMudG9CeXRlQXJyYXkoZmlsZS5jb250ZW50KTtcclxuICAgICAgICBzYXZlQXMobmV3IEJsb2IoW2ZpbGVCeXRlQXJyYXldLCB7IHR5cGU6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiIH0pLCBmaWxlTmFtZSk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IFwiLi4vZnFzU2VydmljZVwiO1xyXG5pbXBvcnQgXCIuLi9hdXRoZW50aWNhdGlvblNlcnZpY2VcIlxyXG5pbXBvcnQgeyBJbmplY3QgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiXHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL2F1dGhvcml6YXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZxc1NlcnZpY2UgfSBmcm9tIFwiLi4vZnFzU2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgSUlkZW50aXR5TGluaywgSUlkZW50aWZpYWJsZUNvbGxlY3Rpb25Qcm9wZXJ0eSwgSUlkZW50aWZpYWJsZUNvbGxlY3Rpb25Qcm9wZXJ0eU9mLCBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvbk9mLFxyXG4gICAgSUlkZW50aWZpYWJsZVBhZ2VkQ29sbGVjdGlvblByb3BlcnR5T2YsIElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb25PZlxyXG59IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2lGcXNcIlxyXG5pbXBvcnQgeyBDU2hhcnBFeGNlcHRpb24sIFZhbGlkYXRpb25SZXN1bHQsIFBhcnNlZFJlc3VsdCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvYmFzZVwiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlIGV4dGVuZHMgRnFzU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigkcSwgJGh0dHApO1xyXG4gICAgICAgIHRoaXMuYWRkSHR0cEVycm9ySW50ZXJjZXB0b3IoKGUsIGV4KSA9PiB0aGlzLm9uQXV0aG9yaXplZEludGVyY2VwdG9yKGUsIGV4KSwgMCk7XHJcbiAgICAgICAgdGhpcy5hZGRIdHRwRXJyb3JJbnRlcmNlcHRvcigoZSwgZXgpID0+IHRoaXMuc2VxSW50ZXJjZXB0b3IoZSwgZXgpLCAxMCk7XHJcbiAgICAgICAgdGhpcy5hZGRIdHRwRXJyb3JJbnRlcmNlcHRvcigoZSwgZXgpID0+IHRoaXMudmFsaWRhdGlvbkVycm9ySW50ZXJjZXB0b3IoZSwgZXgpLCAyMCk7XHJcbiAgICAgICAgdGhpcy5hZGRIdHRwRXJyb3JJbnRlcmNlcHRvcigoZSwgZXgpID0+IHRoaXMuY3NTaGFycEludGVyY2VwdG9yKGUsIGV4KSwgMzApO1xyXG4gICAgICAgIHRoaXMuZG9TZXRCZWFyZXIoYyA9PiB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5BdXRoZW50aWNhdGlvblNldHRlcihjKSk7XHJcbiAgICAgICAgdGhpcy5kb1NldFJvbGVzKGMgPT4gdGhpcy5hdXRob3JpemF0aW9uU2VydmljZS5Sb2xlSGVhZGVyU2V0dGVyKGMpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuYXV0aG9yaXplZEhhbmRsZXJzOiAoKHNlbmRlcjogRmlxYXNzaXN0QXBpU2VydmljZUJhc2UsIHVybDogc3RyaW5nKSA9PiBib29sZWFuIHwgdm9pZClbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBhZGRVbmF1dGhvcml6ZWRIYW5kbGVyKGhhbmRsZXI6IChzZW5kZXI6IEZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlLCB1cmw6IHN0cmluZykgPT4gYm9vbGVhbiB8IHZvaWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMudW5hdXRob3JpemVkSGFuZGxlcnMuc29tZShoID0+IGggPT09IGhhbmRsZXIpKVxyXG4gICAgICAgICAgICB0aGlzLnVuYXV0aG9yaXplZEhhbmRsZXJzLnB1c2goaGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVVuYXV0aG9yaXplZEhhbmRsZXIoaGFuZGxlcjogKHNlbmRlcjogRmlxYXNzaXN0QXBpU2VydmljZUJhc2UsIHVybDogc3RyaW5nKSA9PiBib29sZWFuIHwgdm9pZCkge1xyXG4gICAgICAgIHRoaXMudW5hdXRob3JpemVkSGFuZGxlcnMgPSB0aGlzLnVuYXV0aG9yaXplZEhhbmRsZXJzLmZpbHRlcihoID0+IGggIT09IGhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25BdXRob3JpemVkSW50ZXJjZXB0b3IocmVzcG9uc2U6IG5nLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4sIHJlc3VsdDogUGFyc2VkUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gNDAxKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm9uVW5hdXRob3JpemVkKHJlc3BvbnNlLmNvbmZpZy51cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjc1NoYXJwSW50ZXJjZXB0b3IocmVzcG9uc2U6IG5nLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4sIHJlc3VsdDogUGFyc2VkUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gNTAwIHx8ICFyZXNwb25zZS5kYXRhLkV4Y2VwdGlvbiB8fCAhcmVzdWx0KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBleGNlcHRpb246IENTaGFycEV4Y2VwdGlvbiA9IHJlc3BvbnNlLmRhdGEuRXhjZXB0aW9uO1xyXG4gICAgICAgIGlmICghZXhjZXB0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHJlc3VsdC5leGNlcHRpb24gPSBleGNlcHRpb247XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGlvbkVycm9ySW50ZXJjZXB0b3IocmVzcG9uc2U6IG5nLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4sIHJlc3VsdDogUGFyc2VkUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gNDAwIHx8ICFyZXNwb25zZS5kYXRhIHx8ICFyZXN1bHQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIHZhbGlkYXRpb25SZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICByZXN1bHQudmFsaWRhdGlvbiA9IHZhbGlkYXRpb25SZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgdGhpcyBhcyBmaXN0IGludGVyY2VwdG9yXHJcbiAgICBwdWJsaWMgc2VxSW50ZXJjZXB0b3IocmVzcG9uc2U6IG5nLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4sIHJlc3VsdDogUGFyc2VkUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5oZWFkZXJzKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBzZXFSZXF1ZXN0SWQ6IHN0cmluZyA9IHJlc3BvbnNlLmhlYWRlcnMoXCJYLUNvcnJlbGF0aW9uLUlEXCIpO1xyXG4gICAgICAgIGlmIChzZXFSZXF1ZXN0SWQpXHJcbiAgICAgICAgICAgIHJlc3VsdC5zZXFyZXF1ZXN0aWQgPSBzZXFSZXF1ZXN0SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblVuYXV0aG9yaXplZCh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBoYW5kbGVkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgaGFuZGxlciBvZiB0aGlzLnVuYXV0aG9yaXplZEhhbmRsZXJzKVxyXG4gICAgICAgICAgICBoYW5kbGVkID0gaGFuZGxlcih0aGlzLCB1cmwpID09PSB0cnVlIHx8IGhhbmRsZWQ7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb25Qcm9wZXJ0eU9mPFQ+KHByb3BlcnR5OiBJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uUHJvcGVydHlPZjxUPiwgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IG5nLklQcm9taXNlPElJZGVudGlmaWFibGVQYWdlZENvbGxlY3Rpb25PZjxUPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkdldElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZihwcm9wZXJ0eSwgZm9yY2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlIH0gZnJvbSBcIi4vZmlxYXNzaXN0QXBpU2VydmljZUJhc2VcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiXHJcbmltcG9ydCB7IEZxc1NlcnZpY2UgIH0gZnJvbSBcIi4uL2Zxc1NlcnZpY2VcIlxyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogRmlxYXNzaXN0U2VydmljZS5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlxYXNzaXN0U2VydmljZSBleHRlbmRzIEZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcIkZpcWFzc2lzdFNlcnZpY2VcIlxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHEnKSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGh0dHAnKSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigkcSwgJGh0dHAsIGF1dGhlbnRpY2F0aW9uU2VydmljZSwgYXV0aG9yaXphdGlvblNlcnZpY2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7v2ltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi8uLi9hcHBcIjtcclxuaW1wb3J0IHsgTWVtb2l6ZSB9IGZyb20gXCJAZmlxYXMvdXRpbHNcIjtcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlIH0gZnJvbSBcIi4vZmlxYXNzaXN0QXBpU2VydmljZUJhc2VcIjtcclxuaW1wb3J0IHsgU3RhcnRSZXN1bHQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2hvbWVcIjtcclxuaW1wb3J0IHsgRmlxYXNzaXN0QXBpVVJMLCBGaXFhc3Npc3RWZXJzaW9uIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vYXV0aGVudGljYXRpb25TZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZxc1NlcnZpY2UgfSBmcm9tIFwiLi4vZnFzU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGFydFZlcnNpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3ZlcnNpb25cIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi9sb2dTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3VzZXJcIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuXHJcbmNvbnN0IEFwaU5vdEF2YWlsaWJsZTogU3RhcnRWZXJzaW9uID0geyBhcGlWZXJzaW9uOiBcIk5vdCBhdmFpbGlibGVcIiwgZG9tYWluVmVyc2lvbjogXCJOb3QgYXZhaWxpYmxlXCIsIHZlcnNpb246IFwiTm90IGF2YWlsaWJsZVwiIH07XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBIb21lU2VydmljZS5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9tZVNlcnZpY2UgZXh0ZW5kcyBGaXFhc3Npc3RBcGlTZXJ2aWNlQmFzZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yID0gXCJIb21lU2VydmljZVwiXHJcbiAgICBwdWJsaWMgc3RhdGljIEFwaU5vdEF2YWlsaWJsZTogU3RhcnRWZXJzaW9uID0gQXBpTm90QXZhaWxpYmxlO1xyXG4gICAgcHVibGljIGZpcWFzc2lzdEFwaVZlcnNpb246IFN0YXJ0VmVyc2lvbiA9IEhvbWVTZXJ2aWNlLkFwaU5vdEF2YWlsaWJsZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckcScpICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckaHR0cCcpICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCdGaXFhc3Npc3RBcGlVUkwnKSBwcml2YXRlIEZpcWFzc2lzdEFwaVVSTDogRmlxYXNzaXN0QXBpVVJMLFxyXG4gICAgICAgIEBJbmplY3QoJ0ZpcWFzc2lzdFZlcnNpb24nKSBwdWJsaWMgZmlxYXNzaXN0Q2xpZW50VmVyc2lvbjogRmlxYXNzaXN0VmVyc2lvbixcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoJHEsICRodHRwLCBhdXRoZW50aWNhdGlvblNlcnZpY2UsIGF1dGhvcml6YXRpb25TZXJ2aWNlKTtcclxuICAgICAgICBhdXRoZW50aWNhdGlvblNlcnZpY2UuYWRkTG9naW5IYW5kbGVyKCgpID0+IHRoaXMucmVzZXRNZW1vaXplZFByb3BlcnRpZXMoKSk7XHJcbiAgICAgICAgYXV0aGVudGljYXRpb25TZXJ2aWNlLmFkZExvZ291dEhhbmRsZXIoKCkgPT4gdGhpcy5yZXNldE1lbW9pemVkUHJvcGVydGllcygpKTtcclxuICAgICAgICBhdXRob3JpemF0aW9uU2VydmljZS5vblJvbGVDaGFuZ2VkKCgpID0+IHRoaXMucmVzZXRNZW1vaXplZFByb3BlcnRpZXMoKSk7XHJcbiAgICAgICAgdGhpcy5yZWNpZXZlQVBJVmVyc2lvbigoYXBpVmVyc2lvbjogU3RhcnRWZXJzaW9uKSA9PiB0aGlzLmZpcWFzc2lzdEFwaVZlcnNpb24gPSBhcGlWZXJzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVjaWV2ZUFQSVZlcnNpb24oYWN0aW9uOiAoYXBpVmVyc2lvbjogU3RhcnRWZXJzaW9uKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBTdGFydFZlcnNpb24+KFwiR0VUXCIsIGAke3RoaXMuRmlxYXNzaXN0QXBpVVJMfS9Ib21lL1ZlcnNpb25gKVxyXG4gICAgICAgICAgICAudGhlbihcclxuICAgICAgICAgICAgICAgIHN1Y2NlcyA9PiB7IHRoaXMuZmlxYXNzaXN0QXBpVmVyc2lvbiA9IHN1Y2NlczsgfSxcclxuICAgICAgICAgICAgICAgIGZhaWx1cmUgPT4geyB0aGlzLmZpcWFzc2lzdEFwaVZlcnNpb24gPSBIb21lU2VydmljZS5BcGlOb3RBdmFpbGlibGUgfVxyXG4gICAgICAgICAgICApLmZpbmFsbHkoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7IGlmIChhY3Rpb24pIGFjdGlvbih0aGlzLmZpcWFzc2lzdEFwaVZlcnNpb24pOyB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldE1lbW9pemVkUHJvcGVydGllcygpIHtcclxuICAgICAgICB0aGlzLlN0YXJ0UmVzdWx0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBATWVtb2l6ZSgpXHJcbiAgICBwdWJsaWMgZ2V0IFN0YXJ0UmVzdWx0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dGhvcml6YXRpb25TZXJ2aWNlICYmIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlICYmIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLnVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5zdGFydCh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS51c2VybmFtZSk7XHJcbiAgICAgICAgICAgIHAuY2F0Y2goKCkgPT4gdGhpcy5TdGFydFJlc3VsdCA9IG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm4gPGFueT5wO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYXN5bmMgc3RhcnQodXNlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgIGF3YWl0IHRoaXMuYXV0aG9yaXphdGlvblNlcnZpY2Uucm9sZUxvYWRlZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBTdGFydFJlc3VsdD4oXCJHRVRcIiwgYCR7dGhpcy5GaXFhc3Npc3RBcGlVUkx9L0hvbWUvJHt1c2VyfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgU3RhcnRSZXN1bHQodmFsdWU6IGFuZ3VsYXIuSVByb21pc2U8U3RhcnRSZXN1bHQ+KSB7IH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGaXFhc3Npc3RBcGlTZXJ2aWNlQmFzZSB9IGZyb20gXCIuL2ZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlXCI7XHJcbmltcG9ydCB7IFdlYkxpbmsgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2Jhc2VcIjtcclxuaW1wb3J0IHsgSUlkZW50aXR5TGluaywgSUlkZW50aXR5UmVzb2x2ZXIsIENvbGxlY3Rpb25SZXN1bHQgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9pRnFzXCJcclxuaW1wb3J0IHsgUGVyc29uLCBQZXJzb25EYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wZXJzb25cIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL2F1dGhlbnRpY2F0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBGcXNTZXJ2aWNlIH0gZnJvbSBcIi4uL2Zxc1NlcnZpY2VcIjtcclxuaW1wb3J0IHsgSG9tZVNlcnZpY2UgfSBmcm9tIFwiLi9ob21lU2VydmljZVwiO1xyXG5pbXBvcnQgeyBSZXBvcnRQYXJhbWV0ZXJzLCBSZXBvcnRDb2xsZWN0aW9uLCBCYWxhbmNlUmVwb3J0UGFyYW1ldGVycyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcmVjb3JkUmVwb3J0XCI7XHJcbmltcG9ydCB7IENvbXBhY3RTZXJ2aWNlQ2FzZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2VydmljZUNhc2VcIjtcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vYXV0aG9yaXphdGlvblNlcnZpY2VcIjtcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBSZXBvcnRTZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBvcnRTZXJ2aWNlIGV4dGVuZHMgRmlxYXNzaXN0QXBpU2VydmljZUJhc2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwiUmVwb3J0U2VydmljZVwiXHJcblxyXG4gICAgcHJpdmF0ZSBhcGlVcmw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHEnKSAkcTogYW5ndWxhci5JUVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgnJGh0dHAnKSAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCRxLCAkaHR0cCwgYXV0aGVudGljYXRpb25TZXJ2aWNlLCBhdXRob3JpemF0aW9uU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIEdldFJlcG9ydCh1cmw6IHN0cmluZywgcGFyYW1ldGVyczogUmVwb3J0UGFyYW1ldGVycyB8IEJhbGFuY2VSZXBvcnRQYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8dm9pZCwgUmVwb3J0Q29sbGVjdGlvbj4oXCJHRVRcIiwgdXJsLCBwYXJhbWV0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgR2V0UmVwb3J0Q2FzZXModXJsOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT4+KFwiR0VUXCIsIHVybCk7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uLy4uL2FwcFwiO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgRmlxYXNzaXN0QXBpU2VydmljZUJhc2UgfSBmcm9tIFwiLi9maXFhc3Npc3RBcGlTZXJ2aWNlQmFzZVwiO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSBcIi4uLy4uL21vZGVscy9iYXNlXCI7XHJcbmltcG9ydCB7IElJZGVudGl0eUxpbmssIElJZGVudGl0eVJlc29sdmVyLCBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvblByb3BlcnR5T2YsIENvbGxlY3Rpb25SZXN1bHQgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9pRnFzXCJcclxuaW1wb3J0IHsgU2VhcmNoSW5mbywgU2VhcmNoRGF0YSwgUHJvYmxlbURhdGEsIENvbXBhY3RTZXJ2aWNlQ2FzZSwgU2VydmljZUNhc2UsIFNlcnZpY2VDYXNlRGF0YSwgUmVxdWVzdERhdGEsIENvcnJlc3BvbmRlbmNlRGF0YSwgQ29ycmVzcG9uZGVuY2UsIENhc2VUeXBlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlQ2FzZVwiO1xyXG5pbXBvcnQgeyBDb21wbGFpbnREYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21wbGFpbnRcIjtcclxuaW1wb3J0IHsgQ29tcGxpbWVudERhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbXBsaW1lbnRcIjtcclxuaW1wb3J0IHsgQ2FzZUZpbGVEYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9maWxlXCI7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9hdXRoZW50aWNhdGlvblNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSG9tZVNlcnZpY2UgfSBmcm9tIFwiLi9ob21lU2VydmljZVwiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBGaWxlU2VydmljZSB9IGZyb20gXCIuL0ZpbGVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vbG9nU2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogU2VydmljZUNhc2VTZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQ2FzZVNlcnZpY2UgZXh0ZW5kcyBGaXFhc3Npc3RBcGlTZXJ2aWNlQmFzZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHNlbGVjdG9yID0gXCJTZXJ2aWNlQ2FzZVNlcnZpY2VcIlxyXG5cclxuICAgIHByaXZhdGUgbWF4TGltaXQ6IG51bWJlciA9IDEwMDtcclxuICAgIHByaXZhdGUgZXhwb3J0TGltaXQ6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCckcScpICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCckaHR0cCcpICRodHRwOiBhbmd1bGFyLklIdHRwU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBob21lU2VydmljZTogSG9tZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByb3RlY3RlZCBmaWxlU2VydmljZTogRmlsZVNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdCgpIHByb3RlY3RlZCBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigkcSwgJGh0dHAsIGF1dGhlbnRpY2F0aW9uU2VydmljZSwgYXV0aG9yaXphdGlvblNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBTZWFyY2hJbmZvKGN1c3RvbWVyczogbnVtYmVyW10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5QcmVmb3JtU2VhcmNoKHsgY2lkOiBjdXN0b21lcnMgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYXN5bmMgQWR2YW5jZWRTZWFyY2goZGF0YTogU2VhcmNoRGF0YSwgY3VzdG9tZXJzOiBudW1iZXJbXSwgbGltaXQ6IG51bWJlciA9IG51bGwsIHNraXA6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5QcmVmb3JtU2VhcmNoKHsgY2lkOiBjdXN0b21lcnMsIGxpbWl0OiAobGltaXQgPiB0aGlzLm1heExpbWl0KSA/IHRoaXMubWF4TGltaXQgOiBsaW1pdCwgc2tpcDogc2tpcCB9LCBkYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhc3luYyBGaWx0ZXJlZFNlYXJjaChzZWFyY2g6IHN0cmluZywgY3VzdG9tZXJzOiBudW1iZXJbXSwgbGltaXQ6IG51bWJlciA9IG51bGwsIHNraXA6IG51bWJlciA9IG51bGwsIGRhdGE6IFNlYXJjaERhdGEgPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuUHJlZm9ybVNlYXJjaCh7IHE6IHNlYXJjaCwgY2lkOiBjdXN0b21lcnMsIGxpbWl0OiAobGltaXQgPiB0aGlzLm1heExpbWl0KSA/IHRoaXMubWF4TGltaXQgOiBsaW1pdCwgc2tpcDogc2tpcCB9LCBkYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBhc3luYyBBZHZhbmNlZEV4cG9ydChkYXRhOiBTZWFyY2hEYXRhID0gbnVsbCwgY3VzdG9tZXJzOiBudW1iZXJbXSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLlByZWZvcm1TZWFyY2goeyBjaWQ6IGN1c3RvbWVycywgbGltaXQ6IHRoaXMuZXhwb3J0TGltaXQsIHNraXA6IDAgfSwgZGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYXN5bmMgRmlsdGVyZWRFeHBvcnQoc2VhcmNoOiBzdHJpbmcsIGN1c3RvbWVyczogbnVtYmVyW10sIGRhdGE6IFNlYXJjaERhdGEgPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuUHJlZm9ybVNlYXJjaCh7IHE6IHNlYXJjaCwgY2lkOiBjdXN0b21lcnMsIGxpbWl0OiB0aGlzLmV4cG9ydExpbWl0LCBza2lwOiAwIH0sIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhc3luYyBQcmVmb3JtU2VhcmNoKHBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogYW55O30sIGJvZHk/OiBTZWFyY2hEYXRhKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8U2VhcmNoRGF0YSwgQ29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+PihcIlBPU1RcIiwgcmVzLnNlYXJjaENhc2VzLmZ1bGxIcmVmLnJlcGxhY2UoL3suKn0vLCBcIlwiKSwgcGFyYW1zLCBib2R5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgTmV3UHJvYmxlbShwcm9ibGVtOiBQcm9ibGVtRGF0YSkge1xyXG4gICAgICAgIHZhciByZXMgPSBhd2FpdCB0aGlzLmhvbWVTZXJ2aWNlLlN0YXJ0UmVzdWx0O1xyXG4gICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IHRoaXMucGVyZm9ybVJlcXVlc3RXaXRoRnVsbFJlc3BvbnNlPFByb2JsZW1EYXRhLCBWYWxpZGF0aW9uUmVzdWx0PihcIlBPU1RcIiwgcmVzLm5ld1Byb2JsZW0uZnVsbEhyZWYsIHt9LCBwcm9ibGVtLCB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiIH0pO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT0gMjAxKVxyXG4gICAgICAgICAgICB0aHJvdyBgU2VydmljZUNhc2VTZXJ2aWNlLk5ld1Byb2JsZW0oKSBFeHBlY3RlZCAyMDEsIHJlY2VpdmVkICR7cmVzcG9uc2Uuc3RhdHVzfWA7XHJcblxyXG4gICAgICAgIHZhciBuZXdJZCA9IHJlc3BvbnNlLmhlYWRlcnMoXCJMb2NhdGlvblwiKTtcclxuICAgICAgICByZXR1cm4gPElJZGVudGl0eVJlc29sdmVyPFByb2JsZW1EYXRhPj50aGlzLmNyZWF0ZUlkZW50aXR5TGluayh7IGhyZWY6IG5ld0lkIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgVXBkYXRlUHJvYmxlbShpZDogSUlkZW50aXR5TGluaywgcHJvYmxlbTogUHJvYmxlbURhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5VcGRhdGVDYXNlPFByb2JsZW1EYXRhPihpZCwgcHJvYmxlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZUNhc2U8QyBleHRlbmRzIFNlcnZpY2VDYXNlRGF0YT4oaWQ6IElJZGVudGl0eUxpbmssIGRhdGE6IEMpIHtcclxuICAgICAgICBsZXQgZnVsbEhyZWYgPSBpZC5mdWxsSHJlZjtcclxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBcImJ1Z1wiKSB7XHJcbiAgICAgICAgICAgIGZ1bGxIcmVmID0gZnVsbEhyZWYucmVwbGFjZSgncmVxdWVzdCcsICdwcm9ibGVtJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09IFwicmVxdWVzdFwiKSB7XHJcbiAgICAgICAgICAgIGZ1bGxIcmVmID0gZnVsbEhyZWYucmVwbGFjZSgncHJvYmxlbScsICdyZXF1ZXN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IHRoaXMucGVyZm9ybVJlcXVlc3RXaXRoRnVsbFJlc3BvbnNlPEMsIFZhbGlkYXRpb25SZXN1bHQ+KFwiUFVUXCIsIGZ1bGxIcmVmLCB7fSwgdGhpcy5zYW5pdGl6ZUNhc2UoZGF0YSksIHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIgfSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPSAyMDQpXHJcbiAgICAgICAgICAgIHRocm93IGBTZXJ2aWNlQ2FzZVNlcnZpY2UuVXBkYXRlQ2FzZSgpIEV4cGVjdGVkIDIwNCwgcmVjZWl2ZWQgJHtyZXNwb25zZS5zdGF0dXN9YDtcclxuICAgIH1cclxuICAgIC8vIHJlbW92ZSBpbWFnZSBzcmMgaWYgaXQgd2FzIGFkZGVkIGJ5IEZFLlxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZUNhc2U8QyBleHRlbmRzIFNlcnZpY2VDYXNlRGF0YT4oc2VydmljZUNhc2U6IEMpIHtcclxuICAgICAgICAvLyBTcHJlYWQgd29yayBhb3VuZGVkLiBTcHJlYWRpbmcgb2YgZ2VuZXJpYyBpcyBmaXhlZCBpbiBUeXBlU2NyaXB0IFZlcnNpb24gMy4yLlxyXG4gICAgICAgIGxldCBzYW5hdGl6ZVNlcnZpY2VDYXNlID0geyAuLi4oc2VydmljZUNhc2UgYXMgb2JqZWN0KSB9IGFzIEM7XHJcbiAgICAgICAgLy8gZmluZCBhbGwgaW1hZ2VzXHJcbiAgICAgICAgbGV0IGltYWdlcyA9IHNhbmF0aXplU2VydmljZUNhc2UuZGVzY3JpcHRpb24ubWF0Y2goLzxpbWcgW148Pl0qPi9nKSB8fCBbXTtcclxuICAgICAgICBpbWFnZXMuZm9yRWFjaChmcXNJbWdXaXRoU3JjID0+IHtcclxuICAgICAgICAgICAgLy8gZmluZCB0aGUgMiByZXF1aXJlZCBhdHRyaWJ1dGVzIGFuZCBzcmMsIHRoYXQgbWFrZXMgMyAoc3JjIHNob3VsZG4ndCBiZSBmaWxsZWQgZm9yIHN0b3JhZ2UsIGV4Y2VwdCBuZXdseSBhZGRlZCBpbWFnZXMsIHdoaWNoIHdvbid0IGhhdmUgYW4gZGF0YS1maWxlaWQpXHJcbiAgICAgICAgICAgIGxldCBhdHRycyA9IGZxc0ltZ1dpdGhTcmMubWF0Y2goLygoc3JjfGRhdGEtZmlsZWlkfGRhdGEtZmlsZW5hbWUpPVwiW148PlwiXSpcIikvZykgfHwgW107XHJcbiAgICAgICAgICAgIC8vIGxldCBhc3N1bWUgdGhlIGltYWdlIGF0dHJpYnV0ZXMgYXJlIGFsd2F5IHVuaXF1ZWx5IG5hbWVkIGZvciBlYXNlIGFuZCBwcmVmb3JtYW5jZS5cclxuICAgICAgICAgICAgaWYgKGF0dHJzLmxlbmd0aCA9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2FudGl6ZWRGcXNJbWcgPSBmcXNJbWdXaXRoU3JjLnJlcGxhY2UoL1xcIHNyYz1cIltePD5cIl0qXCIvZywgXCJcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdG9yZWRCZVNyY0Zxc0ltZyA9IHNhbnRpemVkRnFzSW1nLnJlcGxhY2UoL1xcIHNyY0Zyb21CZT1cIihbXjw+XCJdKilcIi9nLCBcIiBzcmM9XFxcIiQxXFxcIlwiKTtcclxuICAgICAgICAgICAgICAgIC8vIG9ubHkgY2hhbmdlIHRoZSBmb3VuZCBpbWFnZSBzbyBubyBvdGhlciBjaGFuZ2VzIHdpbGwgYmUgbWFkZSB0byBkZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgc2FuYXRpemVTZXJ2aWNlQ2FzZS5kZXNjcmlwdGlvbiA9IHNhbmF0aXplU2VydmljZUNhc2UuZGVzY3JpcHRpb24ucmVwbGFjZShmcXNJbWdXaXRoU3JjLCByZXN0b3JlZEJlU3JjRnFzSW1nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzYW5hdGl6ZVNlcnZpY2VDYXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBOZXdSZXF1ZXN0KHJlcXVlc3Q6IFJlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wZXJmb3JtUmVxdWVzdFdpdGhGdWxsUmVzcG9uc2U8UmVxdWVzdERhdGEsIFZhbGlkYXRpb25SZXN1bHQ+KFwiUE9TVFwiLCByZXMubmV3UmVxdWVzdC5mdWxsSHJlZiwge30sIHJlcXVlc3QsIHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIgfSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPSAyMDEpXHJcbiAgICAgICAgICAgIHRocm93IGBTZXJ2aWNlQ2FzZVNlcnZpY2UuTmV3UHJvYmxlbSgpIEV4cGVjdGVkIDIwMSwgcmVjZWl2ZWQgJHtyZXNwb25zZS5zdGF0dXN9YDtcclxuXHJcbiAgICAgICAgdmFyIG5ld0lkID0gcmVzcG9uc2UuaGVhZGVycyhcIkxvY2F0aW9uXCIpO1xyXG4gICAgICAgIHJldHVybiA8SUlkZW50aXR5UmVzb2x2ZXI8UmVxdWVzdERhdGE+PnRoaXMuY3JlYXRlSWRlbnRpdHlMaW5rKHsgaHJlZjogbmV3SWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZVJlcXVlc3QoaWQ6IElJZGVudGl0eUxpbmssIHJlcXVlc3Q6IFJlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVXBkYXRlQ2FzZTxSZXF1ZXN0RGF0YT4oaWQsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBOZXdDb21wbGFpbnQoY2lkOiBzdHJpbmcsIGNvbXBsYWludDogQ29tcGxhaW50RGF0YSkge1xyXG4gICAgICAgIHZhciByZXMgPSBhd2FpdCB0aGlzLmhvbWVTZXJ2aWNlLlN0YXJ0UmVzdWx0O1xyXG4gICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IHRoaXMucGVyZm9ybVJlcXVlc3RXaXRoRnVsbFJlc3BvbnNlPENvbXBsYWludERhdGEsIFZhbGlkYXRpb25SZXN1bHQ+KFwiUE9TVFwiLCByZXMuYWRkQ29tcGxhaW50LmZ1bGxIcmVmLnJlcGxhY2UoL1xce2NpZFxcfS8sIGNpZCksIHt9LCBjb21wbGFpbnQsIHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIgfSlcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9IDIwNClcclxuICAgICAgICAgICAgdGhyb3cgYFNlcnZpY2VDYXNlU2VydmljZS5OZXdDb21wbGFpbnQoKSBFeHBlY3RlZCAyMDQsIHJlY2VpdmVkICR7cmVzcG9uc2Uuc3RhdHVzfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIE5ld0NvbXBsaW1lbnQoY2lkOiBzdHJpbmcsIGNvbXBsaW1lbnQ6IENvbXBsaW1lbnREYXRhKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wZXJmb3JtUmVxdWVzdFdpdGhGdWxsUmVzcG9uc2U8Q29tcGxpbWVudERhdGEsIFZhbGlkYXRpb25SZXN1bHQ+KFwiUE9TVFwiLCByZXMuYWRkQ29tcGxpbWVudC5mdWxsSHJlZi5yZXBsYWNlKC9cXHtjaWRcXH0vLCBjaWQpLCB7fSwgY29tcGxpbWVudCwgeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIiB9KTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9IDIwNClcclxuICAgICAgICAgICAgdGhyb3cgYFNlcnZpY2VDYXNlU2VydmljZS5OZXdDb21wbGltZW50KCkgRXhwZWN0ZWQgMjA0LCByZWNlaXZlZCAke3Jlc3BvbnNlLnN0YXR1c31gO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXRCeUlkPFQgZXh0ZW5kcyBTZXJ2aWNlQ2FzZURhdGE+KGlkOiBJSWRlbnRpdHlMaW5rLCByZXNvbHZlT25SZWplY3Q6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1SZXF1ZXN0PHZvaWQsIFQ+KFwiR0VUXCIsIGlkLmZ1bGxIcmVmLCBudWxsLCBudWxsLCBudWxsLCByZXNvbHZlT25SZWplY3QpLnRoZW4oc2MgPT4geyByZXR1cm4gdGhpcy5maWxsSW1hZ2VTb3VyY2VzKHNjKTsgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYXN5bmMgR2V0QnlOdW1iZXIoY2lkOiBudW1iZXIsIHJlc29sdmVPblJlamVjdDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgdmFyIGlkID0gcmVzLmNhc2VCeU51bWJlci5mdWxsSHJlZi5yZXBsYWNlKFwie251bWJlcn1cIiwgY2lkICsgXCJcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8dm9pZCwgU2VydmljZUNhc2U+KFwiR0VUXCIsIGlkLCBudWxsLCBudWxsLCBudWxsLCByZXNvbHZlT25SZWplY3QpLnRoZW4oc2MgPT4geyByZXR1cm4gdGhpcy5maWxsSW1hZ2VTb3VyY2VzKHNjKTsgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBsb2FkIGltYWdlcyBhbmQgYXBwbHkgYXMgYmFzZTY0IGRhdGEuXHJcbiAgICBwdWJsaWMgZmlsbEltYWdlU291cmNlczxUIGV4dGVuZHMgU2VydmljZUNhc2VEYXRhPihzZXJ2aWNlQ2FzZTogVCkge1xyXG4gICAgICAgIGxldCBpbWFnZUZpbGVQcm9taXNlczogbmcuSVByb21pc2U8dm9pZD5bXSA9IFtdO1xyXG4gICAgICAgIGxldCBpbWFnZURhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuXHJcbiAgICAgICAgLy8gZmluZCBhbGwgaW1hZ2VzXHJcbiAgICAgICAgbGV0IGltYWdlcyA9IHNlcnZpY2VDYXNlLmRlc2NyaXB0aW9uLm1hdGNoKC88aW1nIFtePD5dKj4vZykgfHwgW107XHJcbiAgICAgICAgaW1hZ2VzLmZvckVhY2goZnFzSW1nV2l0aFNyYyA9PiB7XHJcbiAgICAgICAgICAgIC8vIGZpbmQgdGhlIDIgcmVxdWlyZWQgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBsZXQgYXR0cnMgPSBmcXNJbWdXaXRoU3JjLm1hdGNoKC8oZGF0YS1maWxlaWR8ZGF0YS1maWxlbmFtZSk9XCIoW148PlwiXSopXCIvZykgfHwgW107XHJcbiAgICAgICAgICAgIC8vIGxldCBhc3N1bWUgdGhlIGltYWdlIGF0dHJpYnV0ZXMgYXJlIGFsd2F5IHVuaXF1ZWx5IG5hbWVkIGZvciBlYXNlIGFuZCBwcmVmb3JtYW5jZS5cclxuICAgICAgICAgICAgaWYgKGF0dHJzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJvYmFsbHkgdW5uZWVkZWQgYXMgaXQgc2hvdWxkIG5vdCBiZSB0aGVyZSwgYnV0IHJlbW92ZSBzcmMgZnJvbSBpbWcgYW55IHdheXMgaWYgYnJvd3NlciBkZXNpZGUgdG8gYWRkIHNyYyB0aGVtc2VsZlxyXG4gICAgICAgICAgICAgICAgbGV0IHNhbnRpemVkRnFzSW1nID0gZnFzSW1nV2l0aFNyYy5yZXBsYWNlKC9cXCBzcmM9XCIoW148PlwiXSopXCIvZywgXCIgc3JjRnJvbUJlPVxcXCIkMVxcXCJcIik7XHJcbiAgICAgICAgICAgICAgICAvLyBvbmx5IGNoYW5nZSB0aGUgZm91bmQgaW1hZ2Ugc28gbm8gb3RoZXIgY2hhbmdlcyB3aWxsIGJlIG1hZGUgdG8gZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDYXNlLmRlc2NyaXB0aW9uID0gc2VydmljZUNhc2UuZGVzY3JpcHRpb24ucmVwbGFjZShmcXNJbWdXaXRoU3JjLCBzYW50aXplZEZxc0ltZyk7XHJcbiAgICAgICAgICAgICAgICAvLyBmaW5kIGZpbGUgaWQgJiBuYW1lXHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YUZpbGVJZE1hdGNoID0gZnFzSW1nV2l0aFNyYy5tYXRjaCgvXFwgZGF0YS1maWxlaWQ9XCIoW148PlwiXSopXCIvaSkgfHwgW107XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YUZpbGVOYW1lTWF0Y2ggPSBmcXNJbWdXaXRoU3JjLm1hdGNoKC9cXCBkYXRhLWZpbGVuYW1lPVwiKFtePD5cIl0qKVwiL2kpIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFGaWxlSWRNYXRjaC5sZW5ndGggPT09IDIgJiYgZGF0YUZpbGVOYW1lTWF0Y2gubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFGaWxlaWQgPSBkYXRhRmlsZUlkTWF0Y2hbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFGaWxlTmFtZSA9IGRhdGFGaWxlTmFtZU1hdGNoWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBwcm9taXNlKHMpIGZyb20gaWQgYW5kIHB1dCBpdCBpbiBpbWFnZURhdGE7IGZpbGVuYW1lIGtleWVkLlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdGhpcy5maWxlU2VydmljZS5HZXRGaWxlRnJvbVVybChkYXRhRmlsZWlkKS50aGVuKGZpbGUgPT4geyBpbWFnZURhdGFbZGF0YUZpbGVOYW1lXSA9IHRoaXMuZmlsZVNlcnZpY2UuR2VuZXJhdGVJbWFnZVNvdXJjZShmaWxlKTsgfSwgZXJyb3IgPT4geyBpbWFnZURhdGFbZGF0YUZpbGVOYW1lXSA9IHRoaXMuZmlsZVNlcnZpY2UuSW1hZ2VOb3RGb3VuZFNvdXJjZSgpOyB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoYGZpbGxJbWFnZVNvdXJjZXNgLCBgaW1hZ2UgcHJvbWlzZSBmYWlsZWRgLCBlcnJvcik7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VGaWxlUHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRxLmFsbChpbWFnZUZpbGVQcm9taXNlcykudGhlbihfID0+IHtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoaW1hZ2VEYXRhKS5mb3JFYWNoKGRhdGFGaWxlTmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBhcHBseSBpbWFnZXMgYmFzZWQgb24gZmlsZW5hbWUuXHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ2FzZS5kZXNjcmlwdGlvbiA9IHNlcnZpY2VDYXNlLmRlc2NyaXB0aW9uLnJlcGxhY2UoYCBkYXRhLWZpbGVuYW1lPVwiJHtkYXRhRmlsZU5hbWV9XCJgLCBgIGRhdGEtZmlsZW5hbWU9XCIke2RhdGFGaWxlTmFtZX1cIiBzcmM9XCIke2ltYWdlRGF0YVtkYXRhRmlsZU5hbWVdfVwiYCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gc2VydmljZUNhc2U7XHJcbiAgICAgICAgfSkgYXMgYW5ndWxhci5JUHJvbWlzZTxUPjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGFzeW5jIEFkZENvcnJlc3BvbmRlbmNlKHByb3BlcnR5OiBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvblByb3BlcnR5T2Y8Q29ycmVzcG9uZGVuY2VEYXRhPiwgY29ycmVzcG9uZGVuY2U6IENvcnJlc3BvbmRlbmNlRGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFkZElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZjxDb3JyZXNwb25kZW5jZURhdGE+KHByb3BlcnR5LCBjb3JyZXNwb25kZW5jZSwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIFVwZGF0ZUNvcnJlc3BvbmRlbmNlKGNvcnJlc3BvbmRlbmNlOiBDb3JyZXNwb25kZW5jZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1SZXF1ZXN0PENvcnJlc3BvbmRlbmNlRGF0YSwgdm9pZD4oXCJQVVRcIiwgY29ycmVzcG9uZGVuY2UuaWQuZnVsbEhyZWYsIG51bGwsIGNvcnJlc3BvbmRlbmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgQWN0aXZlQ2FzZXMoY3VzdG9tZXJzOiBudW1iZXJbXSwgbGltaXQ6IG51bWJlciwgbXljYXNlcz86IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgcmVzID0gYXdhaXQgdGhpcy5ob21lU2VydmljZS5TdGFydFJlc3VsdDtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT4+KFwiR0VUXCIsIHJlcy5hY3RpdmVDYXNlcy5mdWxsSHJlZi5yZXBsYWNlKC97Lip9LywgXCJcIiksIHsgY2lkOiBjdXN0b21lcnMsIGxpbWl0OiAobGltaXQgPiB0aGlzLm1heExpbWl0KSA/IHRoaXMubWF4TGltaXQgOiBsaW1pdCwgZm9yQWN0aXZlVXNlcjogISFteWNhc2VzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBBY3RpdmVDYXNlc0V4cG9ydChjdXN0b21lcnM6IG51bWJlcltdLCBteWNhc2VzPzogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciByZXMgPSBhd2FpdCB0aGlzLmhvbWVTZXJ2aWNlLlN0YXJ0UmVzdWx0O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1SZXF1ZXN0PHZvaWQsIG51bWJlcj4oXCJHRVRcIiwgcmVzLmFjdGl2ZUNhc2VzLmZ1bGxIcmVmLnJlcGxhY2UoL3suKn0vLCBcIlwiKSwgeyBjaWQ6IGN1c3RvbWVycywgbGltaXQ6IHRoaXMuZXhwb3J0TGltaXQsIHNraXA6IDAsIGZvckFjdGl2ZVVzZXI6ICEhbXljYXNlcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgQWN0aXZlQ2FzZXNDb3VudChjdXN0b21lcnM6IG51bWJlcltdLCBteWNhc2VzPzogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciByZXMgPSBhd2FpdCB0aGlzLmhvbWVTZXJ2aWNlLlN0YXJ0UmVzdWx0O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1SZXF1ZXN0PHZvaWQsIG51bWJlcj4oXCJHRVRcIiwgcmVzLmFjdGl2ZUNhc2VzQ291bnQuZnVsbEhyZWYucmVwbGFjZSgvey4qfS8sIFwiXCIpLCB7IGNpZDogY3VzdG9tZXJzLCBmb3JBY3RpdmVVc2VyOiAhIW15Y2FzZXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIEFjdGlvblJlcXVpcmVkKGN1c3RvbWVyczogbnVtYmVyW10sIGxpbWl0OiBudW1iZXIsIG15Y2FzZXM/OiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8dm9pZCwgQ29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+PihcIkdFVFwiLCByZXMuYWN0aW9uUmVxdWlyZWRDYXNlcy5mdWxsSHJlZi5yZXBsYWNlKC97Lip9LywgXCJcIiksIHsgY2lkOiBjdXN0b21lcnMsIGxpbWl0OiAobGltaXQgPiB0aGlzLm1heExpbWl0KSA/IHRoaXMubWF4TGltaXQgOiBsaW1pdCwgZm9yQWN0aXZlVXNlcjogISFteWNhc2VzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBBY3Rpb25SZXF1aXJlZEV4cG9ydChjdXN0b21lcnM6IG51bWJlcltdLCBteWNhc2VzPzogYm9vbGVhbikge1xyXG4gICAgICAgIHZhciByZXMgPSBhd2FpdCB0aGlzLmhvbWVTZXJ2aWNlLlN0YXJ0UmVzdWx0O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1SZXF1ZXN0PHZvaWQsIG51bWJlcj4oXCJHRVRcIiwgcmVzLmFjdGlvblJlcXVpcmVkQ2FzZXMuZnVsbEhyZWYucmVwbGFjZSgvey4qfS8sIFwiXCIpLCB7IGNpZDogY3VzdG9tZXJzLCBsaW1pdDogdGhpcy5leHBvcnRMaW1pdCwgc2tpcDogMCwgZm9yQWN0aXZlVXNlcjogISFteWNhc2VzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBBY3Rpb25SZXF1aXJlZENvdW50KGN1c3RvbWVyczogbnVtYmVyW10sIG15Y2FzZXM/OiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8dm9pZCwgbnVtYmVyPihcIkdFVFwiLCByZXMuYWN0aW9uUmVxdWlyZWRDYXNlc0NvdW50LmZ1bGxIcmVmLnJlcGxhY2UoL3suKn0vLCBcIlwiKSwgeyBjaWQ6IGN1c3RvbWVycywgZm9yQWN0aXZlVXNlcjogISFteWNhc2VzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBBd2FpdGluZ0ZlZWRiYWNrKGN1c3RvbWVyczogbnVtYmVyW10sIGxpbWl0OiBudW1iZXIsIG15Y2FzZXM/OiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIHJlcyA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8dm9pZCwgQ29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+PihcIkdFVFwiLCByZXMuYXdhaXRpbmdGZWVkYmFja0Nhc2VzLmZ1bGxIcmVmLnJlcGxhY2UoL3suKn0vLCBcIlwiKSwgeyBjaWQ6IGN1c3RvbWVycywgbGltaXQ6IChsaW1pdCA+IHRoaXMubWF4TGltaXQpID8gdGhpcy5tYXhMaW1pdCA6IGxpbWl0LCBmb3JBY3RpdmVVc2VyOiAhIW15Y2FzZXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIEF3YWl0aW5nRmVlZGJhY2tFeHBvcnQoY3VzdG9tZXJzOiBudW1iZXJbXSwgbXljYXNlcz86IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgcmVzID0gYXdhaXQgdGhpcy5ob21lU2VydmljZS5TdGFydFJlc3VsdDtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBudW1iZXI+KFwiR0VUXCIsIHJlcy5hd2FpdGluZ0ZlZWRiYWNrQ2FzZXMuZnVsbEhyZWYucmVwbGFjZSgvey4qfS8sIFwiXCIpLCB7IGNpZDogY3VzdG9tZXJzLCBsaW1pdDogdGhpcy5leHBvcnRMaW1pdCwgc2tpcDogMCwgZm9yQWN0aXZlVXNlcjogISFteWNhc2VzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBBd2FpdGluZ0ZlZWRiYWNrQ291bnQoY3VzdG9tZXJzOiBudW1iZXJbXSwgbXljYXNlcz86IGJvb2xlYW4pIHtcclxuICAgICAgICB2YXIgcmVzID0gYXdhaXQgdGhpcy5ob21lU2VydmljZS5TdGFydFJlc3VsdDtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBudW1iZXI+KFwiR0VUXCIsIHJlcy5hd2FpdGluZ0ZlZWRiYWNrQ2FzZXNDb3VudC5mdWxsSHJlZi5yZXBsYWNlKC97Lip9LywgXCJcIiksIHsgY2lkOiBjdXN0b21lcnMsIGZvckFjdGl2ZVVzZXI6ICEhbXljYXNlcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgQWRkRmlsZShwcm9wZXJ0eTogSUlkZW50aWZpYWJsZUNvbGxlY3Rpb25Qcm9wZXJ0eU9mPENhc2VGaWxlRGF0YT4sIGZpbGU6IENhc2VGaWxlRGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFkZElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZjxDYXNlRmlsZURhdGE+KHByb3BlcnR5LCBmaWxlLCBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlRmlsZShpZDogSUlkZW50aXR5TGluaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1SZXF1ZXN0PHZvaWQsIHZvaWQ+KFwiREVMRVRFXCIsIGlkLmZ1bGxIcmVmKTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vLi4vYXBwXCI7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBGaXFhc3Npc3RBcGlTZXJ2aWNlQmFzZSB9IGZyb20gXCIuL2ZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlXCI7XHJcbmltcG9ydCB7IEdldEN1c3RvbWVyc1Jlc3VsdCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY3VzdG9tZXJcIjtcclxuaW1wb3J0IHsgVXNlciwgRmlxYXNzaXN0Um9sZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvdXNlclwiO1xyXG5pbXBvcnQgeyBTdGFydFJlc3VsdCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvaG9tZVwiXHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9hdXRoZW50aWNhdGlvblNlcnZpY2VcIlxyXG5pbXBvcnQgeyBJSWRlbnRpdHlMaW5rIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvaUZxc1wiO1xyXG5pbXBvcnQgeyBIb21lU2VydmljZSB9IGZyb20gXCIuL2hvbWVTZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZxc1NlcnZpY2UgfSBmcm9tIFwiLi4vZnFzU2VydmljZVwiO1xyXG5pbXBvcnQgeyBSZWNlbnRTZXJ2aWNlQ2FzZXNSZXN1bHQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IE1lbW9pemUgfSBmcm9tIFwiQGZpcWFzL3V0aWxzXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBHZXRQZXJzb25zUmVzdWx0IH0gZnJvbSBcIi4uLy4uL21vZGVscy9wZXJzb25cIjtcclxuaW1wb3J0IHsgcmV0cnkgfSBmcm9tIFwicnhqcy9vcGVyYXRvci9yZXRyeVwiO1xyXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9hdXRob3JpemF0aW9uU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqcy9TdWJzY3JpcHRpb25cIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFVzZXJTZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSBleHRlbmRzIEZpcWFzc2lzdEFwaVNlcnZpY2VCYXNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcIlVzZXJTZXJ2aWNlXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJHEnKSAkcTogbmcuSVFTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJyRodHRwJykgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGhvbWVTZXJ2aWNlOiBIb21lU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigkcSwgJGh0dHAsIGF1dGhlbnRpY2F0aW9uU2VydmljZSwgYXV0aG9yaXphdGlvblNlcnZpY2UpO1xyXG5cclxuICAgICAgICBhdXRoZW50aWNhdGlvblNlcnZpY2UuYWRkTG9naW5IYW5kbGVyKCgpID0+IHRoaXMucmVzZXRNZW1vaXplZFByb3BlcnRpZXMoKSk7XHJcbiAgICAgICAgYXV0aGVudGljYXRpb25TZXJ2aWNlLmFkZExvZ291dEhhbmRsZXIoKCkgPT4gdGhpcy5yZXNldE1lbW9pemVkUHJvcGVydGllcygpKTtcclxuICAgICAgICBhdXRob3JpemF0aW9uU2VydmljZS5vblJvbGVDaGFuZ2VkKCgpID0+IHRoaXMucmVzZXRNZW1vaXplZFByb3BlcnRpZXMoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldE1lbW9pemVkUHJvcGVydGllcygpIHtcclxuICAgICAgICB0aGlzLkN1c3RvbWVycyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRDdXN0b21lcnMoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gYXdhaXQgdGhpcy5ob21lU2VydmljZS5TdGFydFJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0UmVzdWx0ID09PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmVzdWx0LmN1c3RvbWVycy52YWx1ZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignVXNlclNlcnZpY2UnLCAnRXJyb3IgcmV0cmlldmluZyBjdXN0b21lcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBATWVtb2l6ZSgpXHJcbiAgICBwdWJsaWMgZ2V0IEN1c3RvbWVycygpIHtcclxuICAgICAgICB2YXIgcCA9IHRoaXMuZ2V0Q3VzdG9tZXJzKCk7XHJcbiAgICAgICAgcC5jYXRjaCgoKSA9PiB0aGlzLkN1c3RvbWVycyA9IG51bGwpO1xyXG4gICAgICAgIHJldHVybiBwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBDdXN0b21lcnMoXykgeyB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldEZpcWFzRW1wbG95ZWVzKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBzdGFydFJlc3VsdCA9IGF3YWl0IHRoaXMuaG9tZVNlcnZpY2UuU3RhcnRSZXN1bHQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydFJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHZhciBwZXJzID0gc3RhcnRSZXN1bHQucGVyc29ucztcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8dm9pZCwgR2V0UGVyc29uc1Jlc3VsdD4oXCJHRVRcIiwgcGVycy5mdWxsSHJlZiwge30pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdVc2VyU2VydmljZScsICdFcnJvciByZXRyaWV2aW5nIGZpcWFzIGVtcGxveWVlcycsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGVyc29ucyhjdXN0b21lcklkczogc3RyaW5nW10gPSBudWxsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gYXdhaXQgdGhpcy5ob21lU2VydmljZS5TdGFydFJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0UmVzdWx0ID09PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgdmFyIGN1c3RvbWVycyA9IGF3YWl0IHRoaXMuQ3VzdG9tZXJzO1xyXG4gICAgICAgICAgICB2YXIgcGVycyA9IHN0YXJ0UmVzdWx0LnBlcnNvbnM7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1SZXF1ZXN0PHZvaWQsIEdldFBlcnNvbnNSZXN1bHQ+KFwiR0VUXCIsIHBlcnMuZnVsbEhyZWYsIHsgY2lkOiBjdXN0b21lcklkcyB8fCBjdXN0b21lcnMuaXRlbXMubWFwKGMgPT4gYy5pZC5yZWYpIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKCdVc2VyU2VydmljZScsICdFcnJvciByZXRyaWV2aW5nIHBlcnNvbnMnLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIFJlY2VudFNlcnZpY2VDYXNlcyhjdXN0b21lcnM6IG51bWJlcltdLCBtYXhJdGVtczogbnVtYmVyKTogUHJvbWlzZTxSZWNlbnRTZXJ2aWNlQ2FzZXNSZXN1bHQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBhd2FpdCB0aGlzLmhvbWVTZXJ2aWNlLlN0YXJ0UmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAoc3RhcnRSZXN1bHQgPT09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBSZWNlbnRTZXJ2aWNlQ2FzZXNSZXN1bHQ+KFwiR0VUXCIsIHN0YXJ0UmVzdWx0LnJlY2VudENhc2VzLmZ1bGxIcmVmLCB7IGNpZDogY3VzdG9tZXJzLCBsaW1pdDogbWF4SXRlbXMgfSlcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignVXNlclNlcnZpY2UnLCAnRXJyb3IgcmV0cmlldmluZyByZWNlbnRzZXJ2aWNlY2FzZXMnLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gXCJAZmlxYXMvdXRpbHNcIjtcclxuaW1wb3J0IHsgU2VydmljZUJhc2UgfSBmcm9tIFwiLi9zZXJ2aWNlQmFzZVwiXHJcbmltcG9ydCB7IFdlYkxpbmssIFZhbGlkYXRpb25SZXN1bHQsIEhUVFBNZXRob2QgfSBmcm9tIFwiLi4vbW9kZWxzL2Jhc2VcIjtcclxuaW1wb3J0IHtcclxuICAgIElGcXNSZXN1bHQsIElJZGVudGlmaWFibGUsIElJZGVudGl0eUxpbmssIElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHksXHJcbiAgICBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvblByb3BlcnR5T2YsIElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2YsXHJcbiAgICBJSWRlbnRpZmlhYmxlUGFnZWRDb2xsZWN0aW9uT2YsIElJZGVudGl0eVJlc29sdmVyLCBJUmVzb3VyY2VMaW5rLCBJUmVzb3VyY2VSZXNvbHZlciwgSVJlc291cmNlXHJcbn0gZnJvbSBcIi4uL2ludGVyZmFjZXMvaUZxc1wiXHJcblxyXG5jbGFzcyBBY3Rpb25EaWN0aW9uYXJ5IHtcclxuICAgIFtrZXk6IHN0cmluZ106IHtcclxuICAgICAgICBhY3Rpb246IDxULCBEPihkYXRhPzogRCwgdXJscGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gbmcuSVByb21pc2U8VD5cclxuICAgIH1cclxuICAgIHdhdGNoOiBhbnk7XHJcbiAgICB1bndhdGNoOiBhbnk7XHJcbn1cclxuQWN0aW9uRGljdGlvbmFyeS5wcm90b3R5cGUud2F0Y2ggPSB1bmRlZmluZWQ7XHJcbkFjdGlvbkRpY3Rpb25hcnkucHJvdG90eXBlLnVud2F0Y2ggPSB1bmRlZmluZWQ7XHJcbmNsYXNzIEFjdGlvbkdyb3VwIGV4dGVuZHMgQWN0aW9uRGljdGlvbmFyeSB7XHJcblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRnFzU2VydmljZSBleHRlbmRzIFNlcnZpY2VCYXNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcImZxc1NlcnZpY2VcIlxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgICRxOiBhbmd1bGFyLklRU2VydmljZSxcclxuICAgICAgICAkaHR0cDogYW5ndWxhci5JSHR0cFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCRxLCAkaHR0cCk7XHJcbiAgICAgICAgdGhpcy5hZGRSZXNwb25zZVRyYW5zZm9ybWVyKChkLCBoLCBzKSA9PiB0aGlzLmRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyKGQsIGgsIHMpLCAwKTtcclxuICAgICAgICB0aGlzLmFkZFJlcXVlc3RUcmFuc2Zvcm1lcnMoKGQsIGgpID0+IHRoaXMuanNvblJlcXVlc3RUcmFuc2Zvcm1lcihkLCBoKSwgMTAwKTtcclxuICAgICAgICB0aGlzLmFkZEhlYWRlclNldHRlcih0aGlzLmRlZmF1bHRIZWFkZXJTZXR0ZXIpO1xyXG4gICAgfVxyXG4gICAgcHVibGljICRvbkluaXQoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVmYXVsdEhlYWRlclNldHRlcihoOiBuZy5JSHR0cFJlcXVlc3RDb25maWdIZWFkZXJzKSB7XHJcbiAgICAgICAgaFtcIkFjY2VwdFwiXSA9IFwiYXBwbGljYXRpb24vZnFzK2pzb24sYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xyXG4gICAgICAgIHJldHVybiBoO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXIoZGF0YTogYW55LCBoZWFkZXJzR2V0dGVyOiBuZy5JSHR0cEhlYWRlcnNHZXR0ZXIsIHN0YXR1czogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gaGVhZGVyc0dldHRlcihcIkNvbnRlbnQtVHlwZVwiKSB8fCBcIlwiO1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKFwiYXBwbGljYXRpb24vZnFzK2pzb25cIikgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFuZ3VsYXIuaXNBcnJheShkYXRhKSlcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5wYXJzZUZxc1Jlc3VsdChkYXRhKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VHlwZS5pbmRleE9mKFwiYXBwbGljYXRpb24vanNvblwiKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VHlwZS5pbmRleE9mKFwidGV4dC9wbGFpblwiKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBkYXRhOiBkYXRhLCBjb250aW51ZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUganNvblJlcXVlc3RUcmFuc2Zvcm1lcihkYXRhOiBhbnksIGhlYWRlcnNHZXR0ZXI6IG5nLklIdHRwSGVhZGVyc0dldHRlcikge1xyXG4gICAgICAgIHJldHVybiB7IGRhdGE6IGRhdGEgPyBKU09OLnN0cmluZ2lmeShkYXRhKSA6IGRhdGEsIGNvbnRpbnVlOiB0cnVlIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVSZXF1ZXN0KGVsZW1lbnQ6IGFueSwgb3BlcmF0aW9uOiBzdHJpbmcsIHdoYXQ6IHN0cmluZywgdXJsOiBzdHJpbmcpIHtcclxuICAgICAgICBVdGlscy5mb3JFYWNoUHJvcGVydHk8UmVzb3VyY2VMaW5rPihlbGVtZW50LCAocCwgaykgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50W2tdID0geyBocmVmOiBwLmZ1bGxIcmVmIH1cclxuICAgICAgICB9LCBwID0+IHAuaHJlZiAhPT0gdW5kZWZpbmVkICYmIHAuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuYWN0aW9uTGlua3MgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQuYWN0aW9uTGlua3M7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVGcXNSZXNwb25zZShkYXRhOiBhbnksIG9wZXJhdGlvbjogc3RyaW5nLCB3aGF0OiBzdHJpbmcsIHVybDogc3RyaW5nLCByZXNwb25zZTogYW55LCBkZWZlcnJlZDogbmcuSURlZmVycmVkPGFueT4pIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuaGVhZGVycygnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vZnFzK2pzb24nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZxc1Jlc3VsdChkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBhcnNlRnFzUmVzdWx0PFI+KHJlc3VsdDogSUZxc1Jlc3VsdCAmIFIpOiBSIHtcclxuICAgICAgICB2YXIgY3VyaWVzOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgICAgICAocmVzdWx0Ll9jdXJpZXMgfHwgW10pLmZvckVhY2goYyA9PiBjdXJpZXNbYy5uYW1lXSA9IGMuaHJlZik7XHJcbiAgICAgICAgdmFyIGN1cmllR2V0dGVyID0gayA9PiBjdXJpZXNba107XHJcblxyXG4gICAgICAgIHZhciBlbWJlZGRlZDogeyBbaWQ6IHN0cmluZ106IElJZGVudGlmaWFibGUgfSA9IHt9O1xyXG4gICAgICAgIChyZXN1bHQuX2VtYmVkZGVkIHx8IFtdKS5maWx0ZXIocCA9PiBwLmlkLmhyZWYgIT09IHVuZGVmaW5lZCkuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgdmFyIGhyZWYgPSBSZXNvdXJjZUxpbmsucGFyc2VMaW5rKHAuaWQuaHJlZilbMF07XHJcbiAgICAgICAgICAgIGVtYmVkZGVkW2hyZWZdID0gcDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgVXRpbHMuZm9yRWFjaFByb3BlcnR5PElJZGVudGlmaWFibGU+KGVtYmVkZGVkLFxyXG4gICAgICAgICAgICAocCwgaykgPT4gZW1iZWRkZWRba10gPSB0aGlzLnByb21pc2lmeUlkZW50aXR5UHJvcGVydGllczxJSWRlbnRpZmlhYmxlPihwLCBlbWJlZGRlZCwgY3VyaWVHZXR0ZXIpLFxyXG4gICAgICAgICAgICAocCwgaykgPT4gKDxPYmplY3Q+ZW1iZWRkZWQpLmhhc093blByb3BlcnR5KGspKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5fYWN0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uTGlua3M6IHsgW2dyb3Vwa2V5OiBzdHJpbmddOiBBY3Rpb25EaWN0aW9uYXJ5IH0gPSB7fTtcclxuICAgICAgICAgICAgVXRpbHMuZm9yRWFjaEtleShyZXN1bHQuX2FjdGlvbnMsIChncm91cHMsIGdyb3Vwa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25MaW5rc1tncm91cGtleV0gPSBuZXcgQWN0aW9uR3JvdXAoKTtcclxuICAgICAgICAgICAgICAgIFV0aWxzLmZvckVhY2hLZXkoZ3JvdXBzLCAoYWN0aW9uLCBhY3Rpb25rZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25MaW5rc1tncm91cGtleV1bYWN0aW9ua2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiA8VCwgRD4oZGF0YTogRCA9IG51bGwsIHVybHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IG51bGwpID0+IHRoaXMucGVyZm9ybUFjdGlvbkxpbmtSZXF1ZXN0PEQsIFQ+KGFjdGlvbiwgY3VyaWVHZXR0ZXIsIHVybHBhcmFtcywgZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICByZXN1bHRbJ2FjdGlvbkxpbmtzJ10gPSBhY3Rpb25MaW5rcztcclxuICAgICAgICAgICAgZGVsZXRlIHJlc3VsdC5fYWN0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5fZW1iZWRkZWQ7XHJcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5fY3VyaWVzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNpZnlJZGVudGl0eVByb3BlcnRpZXM8Uj4oPFI+cmVzdWx0LCBlbWJlZGRlZCwgY3VyaWVHZXR0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGVyZm9ybUFjdGlvbkxpbmtSZXF1ZXN0PEQsIFQ+KGFjdGlvbjogeyBocmVmOiBzdHJpbmcsIG1ldGhvZD86IEhUVFBNZXRob2QgfSwgY3VyaWVHZXR0ZXI6IChrOiBhbnkpID0+IHN0cmluZywgdXJscGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBkYXRhOiBEKSB7XHJcbiAgICAgICAgdmFyIG1ldGhvZCA9IDxIVFRQTWV0aG9kPihhY3Rpb24ubWV0aG9kIHx8IFwiR0VUXCIpLnRvVXBwZXJDYXNlKClcclxuICAgICAgICB2YXIgbGluayA9IG5ldyBJZGVudGl0eUxpbmsoYWN0aW9uLmhyZWYsIGN1cmllR2V0dGVyLCBudWxsKTtcclxuICAgICAgICB2YXIgbWF0Y2ggPSBSZWdFeHAoL3tcXD8oW1xcdyxdKil9LykuZXhlYyhsaW5rLmZ1bGxIcmVmKTtcclxuICAgICAgICB2YXIga2V5cyA9IG1hdGNoICYmIG1hdGNoWzFdID8gbWF0Y2hbMV0uc3BsaXQoJywnKS5tYXAobSA9PiB7IHJldHVybiB7IGtleTogbSwgdmFsdWU6IG51bGwgfSB9KSA6IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGsgb2Yga2V5cykge1xyXG4gICAgICAgICAgICBrLnZhbHVlID0gdXJscGFyYW1zID8gdXJscGFyYW1zW2sua2V5XSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBhcmFtc3RyaW5nID0ga2V5cy5maWx0ZXIoayA9PiBrLnZhbHVlKS5tYXAoayA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrLnZhbHVlICYmIGsudmFsdWUubGVuZ3RoICE9PSB1bmRlZmluZWQgP1xyXG4gICAgICAgICAgICAgICAgKDxhbnlbXT5rLnZhbHVlKS5tYXAodiA9PiBgJHtrLmtleX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YCkuam9pbihcIiZcIikgOlxyXG4gICAgICAgICAgICAgICAgYCR7ay5rZXl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGsudmFsdWUpfWBcclxuICAgICAgICB9KS5qb2luKFwiJlwiKTtcclxuICAgICAgICBpZiAocGFyYW1zdHJpbmcpXHJcbiAgICAgICAgICAgIHBhcmFtc3RyaW5nID0gXCI/XCIgKyBwYXJhbXN0cmluZztcclxuICAgICAgICB2YXIgdXJsID0gbGluay5mdWxsSHJlZi5yZXBsYWNlKC97Lip9LywgcGFyYW1zdHJpbmcpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDxELCBUPihtZXRob2QsIHVybCwgbnVsbCwgZGF0YSA/IGRhdGEgOiBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb21pc2lmeUlkZW50aXR5UHJvcGVydGllczxUPihpdGVtOiBUICYgT2JqZWN0LCByZXNvdXJjZXM6IHsgW2lkOiBzdHJpbmddOiBJSWRlbnRpZmlhYmxlIH0sIGdldEN1cmllOiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyk6IFQge1xyXG4gICAgICAgIHZhciBoYW5kbGVWYWx1ZSA9IChwbywgaykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocG8uaHJlZiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoayA9PT0gXCJpZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlczogeyBbaWQ6IHN0cmluZ106IElJZGVudGlmaWFibGUgfSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBocmVmID0gUmVzb3VyY2VMaW5rLnBhcnNlTGluayhwby5ocmVmKVswXTtcclxuICAgICAgICAgICAgICAgICAgICByZXNbaHJlZl0gPSA8YW55Pml0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNpZnlJZGVudGl0eUxpbmsocG8sIHJlcyB8fCByZXNvdXJjZXMsIGdldEN1cmllKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwby5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNpZnlJZGVudGl0eVByb3BlcnRpZXMocG8sIHJlc291cmNlcywgZ2V0Q3VyaWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwbztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBVdGlscy5mb3JFYWNoUHJvcGVydHk8SUlkZW50aXR5TGluayB8IElJZGVudGl0eUxpbmtbXT4oaXRlbSwgKHAsIGspID0+IHtcclxuICAgICAgICAgICAgaWYgKHAuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtW2tdID0gKDxJSWRlbnRpdHlMaW5rW10+cCkubWFwKGhhbmRsZVZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1ba10gPSBoYW5kbGVWYWx1ZShwLCBrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIChwLCBrKSA9PiBrLmluZGV4T2YoJ18nKSAhPT0gMCAmJiAhIXAgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eShrKSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9taXNpZnlJZGVudGl0eUxpbms8VD4obGluazogSUlkZW50aXR5TGluayB8IElSZXNvdXJjZUxpbmssIHJlc291cmNlczogeyBbaWQ6IHN0cmluZ106IElJZGVudGlmaWFibGUgfSwgZ2V0Q3VyaWU6IChrZXk6IHN0cmluZykgPT4gc3RyaW5nKTogSUlkZW50aXR5TGluayB7XHJcbiAgICAgICAgdmFyIHJlc291cmNlO1xyXG4gICAgICAgIHZhciBnZXR0ZXIgPSAobDogSUlkZW50aXR5TGluaykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc291cmNlKVxyXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKGwsIHJlc291cmNlcyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBsaW5rWydyZWYnXSA/IG5ldyBSZXNvdXJjZUxpbmsobGluay5ocmVmLCAoPElSZXNvdXJjZUxpbms+bGluaykucmVmLCBnZXRDdXJpZSwgZ2V0dGVyKSA6IG5ldyBJZGVudGl0eUxpbmsobGluay5ocmVmLCBnZXRDdXJpZSwgZ2V0dGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJlc291cmNlKGxpbms6IElJZGVudGl0eUxpbmssIHJlc291cmNlczogeyBbaWQ6IHN0cmluZ106IElJZGVudGlmaWFibGUgfSk6IG5nLklQcm9taXNlPElJZGVudGlmaWFibGU+IHtcclxuICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXNvdXJjZXNbbGluay5ocmVmXTtcclxuICAgICAgICBpZiAocmVzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4kcShyZXNvbHZlID0+IHJlc29sdmUocmVzb3VyY2UpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDxJSWRlbnRpZmlhYmxlLCBhbnk+KFwiR0VUXCIsIGxpbmsuZnVsbEhyZWYpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlSWRlbnRpdHlMaW5rKGxpbms6IFdlYkxpbmspIHtcclxuICAgICAgICByZXR1cm4gbmV3IElkZW50aXR5TGluayhsaW5rLmhyZWYsIF8gPT4gXywgKGxpbms6IFJlc291cmNlTGluaykgPT4gdGhpcy5nZXRSZXNvdXJjZShsaW5rLCB7fSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXRJSWRlbnRpZmlhYmxlQ29sbGVjdGlvblByb3BlcnR5T2Y8VD4ocHJvcGVydHk6IElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZjxUPiwgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IG5nLklQcm9taXNlPElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2Y8VD4+IHtcclxuICAgICAgICBpZiAoKDxJSWRlbnRpZmlhYmxlQ29sbGVjdGlvbk9mPFQ+PnByb3BlcnR5KS5pZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JjZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3Q8dm9pZCwgSUlkZW50aWZpYWJsZUNvbGxlY3Rpb25PZjxUPj4oXCJHRVRcIiwgKDxJSWRlbnRpZmlhYmxlQ29sbGVjdGlvbk9mPFQ+PnByb3BlcnR5KS5pZC5mdWxsSHJlZik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcShyZXNvbHZlID0+IHJlc29sdmUoPElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2Y8VD4+cHJvcGVydHkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtUmVxdWVzdDx2b2lkLCBJSWRlbnRpZmlhYmxlQ29sbGVjdGlvbk9mPFQ+PihcIkdFVFwiLCAoPElJZGVudGl0eVJlc29sdmVyPElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2Y8VD4+PnByb3BlcnR5KS5mdWxsSHJlZik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEFkZElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZjxUPihwcm9wZXJ0eTogSUlkZW50aWZpYWJsZUNvbGxlY3Rpb25Qcm9wZXJ0eU9mPFQ+LCBpdGVtOiBULCBwYXJhbXM6IGFueSk6IG5nLklQcm9taXNlPElJZGVudGl0eVJlc29sdmVyPFQ+PiB7XHJcbiAgICAgICAgdmFyIGZ1bGxSZWYgPSAnJztcclxuICAgICAgICBpZiAoKDxJSWRlbnRpZmlhYmxlQ29sbGVjdGlvbk9mPFQ+PnByb3BlcnR5KS5pZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZ1bGxSZWYgPSAoPElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2Y8VD4+cHJvcGVydHkpLmlkLmZ1bGxIcmVmO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZ1bGxSZWYgPSAoPElJZGVudGl0eVJlc29sdmVyPElJZGVudGlmaWFibGVDb2xsZWN0aW9uT2Y8VD4+PnByb3BlcnR5KS5mdWxsSHJlZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVJlcXVlc3RXaXRoRnVsbFJlc3BvbnNlPFQsIFZhbGlkYXRpb25SZXN1bHQ+KFwiUE9TVFwiLCBmdWxsUmVmLCBwYXJhbXMsIGl0ZW0sIHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHE8V2ViTGluaz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT0gMjAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYEFkZElJZGVudGlmaWFibGVDb2xsZWN0aW9uUHJvcGVydHlPZjxUPiBFeHBlY3RlZCAyMDEsIHJlY2VpdmVkICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdJZCA9IHJlc3BvbnNlLmhlYWRlcnMoXCJMb2NhdGlvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuY3JlYXRlSWRlbnRpdHlMaW5rKHsgaHJlZjogbmV3SWQgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxufVxyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIElkZW50aXR5TGluayBpbXBsZW1lbnRzIElJZGVudGl0eUxpbmssIElJZGVudGl0eVJlc29sdmVyPElJZGVudGlmaWFibGU+IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHJhd3ZhbHVlOiBzdHJpbmcsXHJcbiAgICAgICAgcHJvdGVjdGVkIGN1cmllR2V0dGVyOiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcsXHJcbiAgICAgICAgcHJvdGVjdGVkIG9iamVjdEdldHRlcjogKGxpbms6IElkZW50aXR5TGluaykgPT4gbmcuSVByb21pc2U8SUlkZW50aWZpYWJsZT4pIHtcclxuICAgICAgICB0aGlzLmxpbmsgPSBJZGVudGl0eUxpbmsucGFyc2VMaW5rKHJhd3ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21MaW5rPFQgZXh0ZW5kcyBXZWJMaW5rPihzb3VyY2U6IFQpOiBJZGVudGl0eUxpbmsge1xyXG4gICAgICAgIGlmIChzb3VyY2VbJ2Z1bGxIcmVmJ10pIHtcclxuICAgICAgICAgICAgaWYgKHNvdXJjZVsncmVmJ10pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKDxSZXNvdXJjZUxpbms+KDxhbnk+c291cmNlKSkudG9JZGVudGl0eUxpbmsoKTtcclxuICAgICAgICAgICAgcmV0dXJuICg8UmVzb3VyY2VMaW5rPig8YW55PnNvdXJjZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IElkZW50aXR5TGluayhzb3VyY2UuaHJlZiwgXyA9PiBfLCBfID0+IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlcXVhbHMobGluazogV2ViTGluaykge1xyXG4gICAgICAgIHJldHVybiAobGlua1snZnVsbEhyZWYnXSB8fCBsaW5rLmhyZWYpID09IHRoaXMuZnVsbEhyZWY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsaW5rOiBbc3RyaW5nLCBzdHJpbmddID0gW1wiXCIsIFwiXCJdO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcGFyc2VMaW5rKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmVzdWx0OiBbc3RyaW5nLCBzdHJpbmddID0gW1wiXCIsIFwiXCJdO1xyXG4gICAgICAgIGlmICh2YWx1ZVswXSA9PT0gJ1snICYmIHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdID09PSAnXScpIHtcclxuICAgICAgICAgICAgdmFyIGwgPSB2YWx1ZS5zdWJzdHIoMSwgdmFsdWUubGVuZ3RoIC0gMikuc3BsaXQoJzonKS5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdFswXSA9IGxbMF07XHJcbiAgICAgICAgICAgIHJlc3VsdFsxXSA9IGxbMV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0WzBdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGhyZWYoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5saW5rWzBdXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGhyZWYodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubGluayA9IElkZW50aXR5TGluay5wYXJzZUxpbmsodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBmdWxsSHJlZigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJpZUdldHRlcih0aGlzLmxpbmtbMV0pICsgdGhpcy5saW5rWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b1N0cmluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mdWxsSHJlZjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGJhc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlua1sxXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0R2V0dGVyKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHRvSlNPTigpOiBzdHJpbmcgfCBXZWJMaW5rIHtcclxuICAgICAgICByZXR1cm4geyBocmVmOiB0aGlzLmZ1bGxIcmVmIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUxpbmsgZXh0ZW5kcyBJZGVudGl0eUxpbmsgaW1wbGVtZW50cyBJUmVzb3VyY2VSZXNvbHZlcjxJUmVzb3VyY2U+IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmF3dmFsdWU6IHN0cmluZyxcclxuICAgICAgICByZWY6IHN0cmluZyxcclxuICAgICAgICBjdXJpZUdldHRlcjogKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nLFxyXG4gICAgICAgIHJlc291cmNlR2V0dGVyOiAobGluazogUmVzb3VyY2VMaW5rKSA9PiBuZy5JUHJvbWlzZTxJSWRlbnRpZmlhYmxlPikge1xyXG4gICAgICAgIHN1cGVyKHJhd3ZhbHVlLCBjdXJpZUdldHRlciwgcmVzb3VyY2VHZXR0ZXIpO1xyXG4gICAgICAgIHRoaXMuX3JlZiA9IHJlZjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBfcmVmOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGdldCByZWYoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZjtcclxuICAgIH1cclxuICAgIHB1YmxpYyB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZjtcclxuICAgIH1cclxuICAgIHB1YmxpYyB0b0lkZW50aXR5TGluaygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IElkZW50aXR5TGluayh0aGlzLnJhd3ZhbHVlLCB0aGlzLmN1cmllR2V0dGVyLCB0aGlzLm9iamVjdEdldHRlcik7XHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgRklRQXNzaXN0IH0gZnJvbSBcIi4uL2FwcFwiO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGZpcWFzL2FuZ3VsYXItdXRpbHNcIjtcclxuaW1wb3J0IHsgTGl0ZUV2ZW50IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvaUxpdGVFdmVudFwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogSXNQcm9jZXNzaW5nU2VydmljZS5zZWxlY3RvclxyXG59KVxyXG4vKipcclxuICogU2Vzc2lvbiBjbGFzcywgc3RvcmVzIHZhbHVlcyBhcyBKU09OIGluIGxvY2FsIGJyb3dzZXIgc3RvcmFnZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBJc1Byb2Nlc3NpbmdTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcIklzUHJvY2Vzc2luZ1NlcnZpY2VcIjtcclxuXHJcbiAgICBwdWJsaWMgSXNQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGJ1c3lDb3VudDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgcHVibGlzaGVyOiBMaXRlRXZlbnQ8Ym9vbGVhbj47XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hlciA9IG5ldyBMaXRlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgU3RhcnRQcm9jZXNzaW5nKCkge1xyXG4gICAgICAgIHRoaXMuYnVzeUNvdW50Kys7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5Jc1Byb2Nlc3NpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5Jc1Byb2Nlc3NpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnB1Ymxpc2hlci50cmlnZ2VyKHRoaXMuSXNQcm9jZXNzaW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgU3RvcFByb2Nlc3NpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYnVzeUNvdW50ID4gMClcclxuICAgICAgICAgICAgdGhpcy5idXN5Q291bnQtLTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYnVzeUNvdW50ID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5Jc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wdWJsaXNoZXIudHJpZ2dlcih0aGlzLklzUHJvY2Vzc2luZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRMaXN0ZW5lcihsaXN0ZW5lcjogKGJvb2xlYW4pID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hlci5vbihsaXN0ZW5lcik7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHsgdGhpcy5wdWJsaXNoZXIub2ZmKGxpc3RlbmVyKTsgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5Jc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJ1c3lDb3VudCA9IDA7XHJcbiAgICAgICAgdGhpcy5wdWJsaXNoZXIudHJpZ2dlcih0aGlzLklzUHJvY2Vzc2luZyk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgSURpc3Bvc2FibGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9nZW5lcmFsXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWxzL2Jhc2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9nTGlzdGVuZXIge1xyXG4gICAgb25EZWJ1ZyhtZXNzYWdlOiBMb2dNZXNzYWdlKTogdm9pZDtcclxuICAgIG9uSW5mbyhtZXNzYWdlOiBMb2dNZXNzYWdlKTogdm9pZDtcclxuICAgIG9uV2FybmluZyhtZXNzYWdlOiBMb2dNZXNzYWdlKTogdm9pZDtcclxuICAgIG9uRXJyb3IobWVzc2FnZTogTG9nTWVzc2FnZSk6IHZvaWQ7XHJcbiAgICBvbkFueShtZXNzYWdlOiBMb2dNZXNzYWdlKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb2dNZXNzYWdlIHtcclxuICAgIHNvdXJjZTogc3RyaW5nO1xyXG4gICAgZXJyb3I/OiBFcnJvciB8IFZhbGlkYXRpb25SZXN1bHQ7XHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBsZXZlbDogbG9nTGV2ZWw7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIGxvZ0xldmVsID0gJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuaW5nJyB8ICdlcnJvcic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBMb2dTZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcImxvZ1NlcnZpY2VcIjtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxpc3RlbmVyczogTG9nTGlzdGVuZXJbXSA9IFtdO1xyXG4gICAgcHVibGljIHJlZ2lzdGVyTGlzdG5lcihsaXN0bmVyOiBMb2dMaXN0ZW5lcik6IElEaXNwb3NhYmxlIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RuZXIpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB0aGlzLmxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzLmZpbHRlcihsID0+IGwgIT0gbGlzdG5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYnVnKHNvdXJjZTpzdHJpbmcsIG1lc3NhZ2U6c3RyaW5nLCBlcnJvcj86RXJyb3IpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGw9PntcclxuICAgICAgICAgICAgdmFyIG1zZzpMb2dNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAgICAgc291cmNlOnNvdXJjZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6bWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGVycm9yOmVycm9yLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6J2RlYnVnJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGwub25EZWJ1Zyhtc2cpO1xyXG4gICAgICAgICAgICBsLm9uQW55KG1zZyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5mbyhzb3VyY2U6c3RyaW5nLCBtZXNzYWdlOnN0cmluZywgZXJyb3I/OkVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChsPT57XHJcbiAgICAgICAgICAgIHZhciBtc2c6TG9nTWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZTpzb3VyY2UsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBlcnJvcjplcnJvcixcclxuICAgICAgICAgICAgICAgIGxldmVsOidpbmZvJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGwub25JbmZvKG1zZyk7XHJcbiAgICAgICAgICAgIGwub25BbnkobXNnKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3YXJuaW5nKHNvdXJjZTpzdHJpbmcsIG1lc3NhZ2U6c3RyaW5nLCBlcnJvcj86RXJyb3IpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGw9PntcclxuICAgICAgICAgICAgdmFyIG1zZzpMb2dNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAgICAgc291cmNlOnNvdXJjZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6bWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGVycm9yOmVycm9yLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6J3dhcm5pbmcnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbC5vbldhcm5pbmcobXNnKTtcclxuICAgICAgICAgICAgbC5vbkFueShtc2cpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVycm9yKHNvdXJjZTpzdHJpbmcsIG1lc3NhZ2U6c3RyaW5nLCBlcnJvcj86RXJyb3IpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGw9PntcclxuICAgICAgICAgICAgdmFyIG1zZzpMb2dNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAgICAgc291cmNlOnNvdXJjZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6bWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGVycm9yOmVycm9yLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6J2Vycm9yJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGwub25FcnJvcihtc2cpO1xyXG4gICAgICAgICAgICBsLm9uQW55KG1zZyk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCJcclxuaW1wb3J0IHsgTG9nTGlzdGVuZXIsIExvZ01lc3NhZ2UgfSBmcm9tIFwiLi9sb2dTZXJ2aWNlXCJcclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogTmdMb2dMaXN0ZW5lci5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdMb2dMaXN0ZW5lciBpbXBsZW1lbnRzIExvZ0xpc3RlbmVyIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3I6IHN0cmluZyA9IFwibmdMb2dMaXN0ZW5lclwiO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnJGxvZycpIHByaXZhdGUgbmdMb2dTZXJ2aWNlOiBuZy5JTG9nU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG4gICAgcHVibGljIG9uRGVidWcobWVzc2FnZTogTG9nTWVzc2FnZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdMb2dTZXJ2aWNlLmRlYnVnKGAke21lc3NhZ2Uuc291cmNlfToke21lc3NhZ2UubWVzc2FnZX0keyhtZXNzYWdlLmVycm9yID8gYCBlcnJvcjoke0pTT04uc3RyaW5naWZ5KG1lc3NhZ2UuZXJyb3IpfWAgOiBcIlwiKX1gKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBvbkluZm8obWVzc2FnZTogTG9nTWVzc2FnZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdMb2dTZXJ2aWNlLmluZm8oYCR7bWVzc2FnZS5zb3VyY2V9OiR7bWVzc2FnZS5tZXNzYWdlfSR7KG1lc3NhZ2UuZXJyb3IgPyBgIGVycm9yOiR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZS5lcnJvcil9YCA6IFwiXCIpfWApO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uV2FybmluZyhtZXNzYWdlOiBMb2dNZXNzYWdlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ0xvZ1NlcnZpY2Uud2FybihgJHttZXNzYWdlLnNvdXJjZX06JHttZXNzYWdlLm1lc3NhZ2V9JHsobWVzc2FnZS5lcnJvciA/IGAgZXJyb3I6JHtKU09OLnN0cmluZ2lmeShtZXNzYWdlLmVycm9yKX1gIDogXCJcIil9YCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgb25FcnJvcihtZXNzYWdlOiBMb2dNZXNzYWdlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ0xvZ1NlcnZpY2UuZXJyb3IoYCR7bWVzc2FnZS5zb3VyY2V9OiR7bWVzc2FnZS5tZXNzYWdlfSR7KG1lc3NhZ2UuZXJyb3IgPyBgIGVycm9yOiR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZS5lcnJvcil9YCA6IFwiXCIpfWApO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG9uQW55KG1lc3NhZ2U6IExvZ01lc3NhZ2UpOiB2b2lkIHtcclxuXHJcbiAgICB9XHJcbn1cclxuIiwi77u/aW1wb3J0IHsgSFRUUE1ldGhvZCwgUGFyc2VkUmVzdWx0IH0gZnJvbSBcIi4uL21vZGVscy9iYXNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VydmljZVV0aWxzIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgSXNVbmF1dGhvcml6ZWRSZXNwb25zZShlcnJvcjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PSA0MDE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZXJ2aWNlQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgJHE6IGFuZ3VsYXIuSVFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgJGh0dHA6IGFuZ3VsYXIuSUh0dHBTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmRvbnRTZXRCZWFyZXIoKTtcclxuICAgICAgICB0aGlzLmRvbnRTZXRSb2xlcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRvU2V0Um9sZXMoaGVhZGVyU2V0dGVyOiAoY29uZmlnOiBuZy5JUmVxdWVzdENvbmZpZykgPT4gYW5ndWxhci5JUHJvbWlzZTxuZy5JUmVxdWVzdENvbmZpZz4pIHtcclxuICAgICAgICB0aGlzLlJvbGVTZXR0ZXIgPSBoZWFkZXJTZXR0ZXI7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZG9udFNldFJvbGVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuUm9sZVNldHRlciA9IGNvbmZpZyA9PiB0aGlzLiRxPG5nLklSZXF1ZXN0Q29uZmlnPihyZXNvbHZlID0+IHJlc29sdmUoY29uZmlnKSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZG9TZXRCZWFyZXIoaGVhZGVyU2V0dGVyOiAoY29uZmlnOiBuZy5JUmVxdWVzdENvbmZpZykgPT4gYW5ndWxhci5JUHJvbWlzZTxuZy5JUmVxdWVzdENvbmZpZz4pIHtcclxuICAgICAgICB0aGlzLkF1dGhlbnRpY2F0aW9uU2V0dGVyID0gaGVhZGVyU2V0dGVyO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGRvbnRTZXRCZWFyZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5BdXRoZW50aWNhdGlvblNldHRlciA9IGNvbmZpZyA9PiB0aGlzLiRxPG5nLklSZXF1ZXN0Q29uZmlnPihyZXNvbHZlID0+IHJlc29sdmUoY29uZmlnKSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgcGVyZm9ybVJlcXVlc3Q8UmVxdWVzdFR5cGUsIFJlc3BvbnNlVHlwZT4obWV0aG9kOiBIVFRQTWV0aG9kLCB1cmw6IHN0cmluZywgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0gbnVsbCwgZGF0YTogUmVxdWVzdFR5cGUgPSBudWxsLCBoZWFkZXJzOiBhbnkgPSBudWxsLCByZXNvbHZlT25SZWplY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IG5nLklQcm9taXNlPFJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsUGVyZm9ybVJlcXVlc3Q8UmVxdWVzdFR5cGUsIFJlc3BvbnNlVHlwZSwgUmVzcG9uc2VUeXBlPihtZXRob2QsIHVybCwgcGFyYW1zLCBkYXRhLCBoZWFkZXJzLCBmYWxzZSwgcmVzb2x2ZU9uUmVqZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcGVyZm9ybVJlcXVlc3RXaXRoRnVsbFJlc3BvbnNlPFJlcXVlc3RUeXBlLCBSZXNwb25zZVR5cGU+KG1ldGhvZDogSFRUUE1ldGhvZCwgdXJsOiBzdHJpbmcsIHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IG51bGwsIGRhdGE6IFJlcXVlc3RUeXBlID0gbnVsbCwgaGVhZGVyczogYW55ID0gbnVsbCwgcmVzb2x2ZU9uUmVqZWN0OiBib29sZWFuID0gZmFsc2UpOiBuZy5JUHJvbWlzZTxuZy5JSHR0cFByb21pc2VDYWxsYmFja0FyZzxSZXNwb25zZVR5cGU+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxQZXJmb3JtUmVxdWVzdDxSZXF1ZXN0VHlwZSwgUmVzcG9uc2VUeXBlLCBuZy5JSHR0cFByb21pc2VDYWxsYmFja0FyZzxSZXNwb25zZVR5cGU+PihtZXRob2QsIHVybCwgcGFyYW1zLCBkYXRhLCBoZWFkZXJzLCB0cnVlLCByZXNvbHZlT25SZWplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW50ZXJuYWxQZXJmb3JtUmVxdWVzdDxSZXF1ZXN0VHlwZSwgUmVzcG9uc2VUeXBlLCBSZXN1bHRUeXBlPihtZXRob2Q6IEhUVFBNZXRob2QsIHVybDogc3RyaW5nLCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGRhdGE6IFJlcXVlc3RUeXBlLCBoZWFkZXJzOiBhbnksIGZ1bGxSZXNwb25zZTogYm9vbGVhbiwgcmVzb2x2ZU9uUmVqZWN0OiBib29sZWFuKTogbmcuSVByb21pc2U8UmVzdWx0VHlwZT4ge1xyXG4gICAgICAgIHZhciBjb25maWc6IGFuZ3VsYXIuSVJlcXVlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuc2V0SGVhZGVycyhoZWFkZXJzKSxcclxuICAgICAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IHRoaXMudHJhbnNmb3JtUmVzcG9uc2UuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdDogdGhpcy50cmFuc2Zvcm1SZXF1ZXN0LmJpbmQodGhpcylcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRxKChyZXNvbHZlOiBuZy5JUVJlc29sdmVSZWplY3Q8UmVzdWx0VHlwZT4sIHJlamVjdDogbmcuSVFSZXNvbHZlUmVqZWN0PGFueT4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5BdXRoZW50aWNhdGlvblNldHRlcihjb25maWcpLnRoZW4oYyA9PiB0aGlzLlJvbGVTZXR0ZXIoYykudGhlbihhYyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRodHRwPFJlc3BvbnNlVHlwZT4oYWMpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcCA9PiByZXNvbHZlKHRoaXMuaGFuZGxlUmVzcG9uc2U8UmVzdWx0VHlwZSwgUmVzcG9uc2VUeXBlPihyZXNwLCBmdWxsUmVzcG9uc2UpKSxcclxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZWQgPSB0aGlzLmhhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZCAhPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChoYW5kbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzb2x2ZU9uUmVqZWN0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSg8YW55Pnt9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZWQgPSB0aGlzLmhhbmRsZUVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZCAhPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChoYW5kbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzb2x2ZU9uUmVqZWN0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSg8YW55Pnt9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBBdXRoZW50aWNhdGlvblNldHRlcjogKGNvbmZpZzogbmcuSVJlcXVlc3RDb25maWcpID0+IGFuZ3VsYXIuSVByb21pc2U8bmcuSVJlcXVlc3RDb25maWc+XHJcbiAgICBwcml2YXRlIFJvbGVTZXR0ZXI6IChjb25maWc6IG5nLklSZXF1ZXN0Q29uZmlnKSA9PiBhbmd1bGFyLklQcm9taXNlPG5nLklSZXF1ZXN0Q29uZmlnPlxyXG5cclxuICAgIHByaXZhdGUgaHR0cEVycm9ySW50ZXJjZXB0b3JzOiAoW251bWJlciwgKChhcmdzOiBuZy5JSHR0cFByb21pc2VDYWxsYmFja0FyZzxhbnk+LCByZXN1bHQ6IFBhcnNlZFJlc3VsdCkgPT4gYm9vbGVhbiB8IGFueSldKVtdID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIGFkZEh0dHBFcnJvckludGVyY2VwdG9yKGludGVyY2VwdG9yOiAoYXJnczogbmcuSUh0dHBQcm9taXNlQ2FsbGJhY2tBcmc8YW55PiwgcmVzdWx0OiBQYXJzZWRSZXN1bHQpID0+IGJvb2xlYW4gfCBhbnksIGNoYWluUG9zaXRpb246IG51bWJlciA9IDEwMCkge1xyXG4gICAgICAgIGlmICh0aGlzLmh0dHBFcnJvckludGVyY2VwdG9ycy5zb21lKHggPT4geFswXSA9PSBjaGFpblBvc2l0aW9uKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNoYWluUG9zaXRpb24gaW4gaHR0cEVycm9ySW50ZXJjZXB0b3JzIHRha2VuIVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmh0dHBFcnJvckludGVyY2VwdG9ycy5wdXNoKFtjaGFpblBvc2l0aW9uLCBpbnRlcmNlcHRvcl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IG5nLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4pIHtcclxuICAgICAgICB2YXIgcmVzdWx0OiBQYXJzZWRSZXN1bHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBpbnRlcmNlcHRvciBvZiB0aGlzLmh0dHBFcnJvckludGVyY2VwdG9ycy5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKGkgPT4gaVsxXSkpIHtcclxuICAgICAgICAgICAgdmFyIGhhbmRsZWQgPSBpbnRlcmNlcHRvcihlcnJvciwgcmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKGhhbmRsZWQgPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaGFuZGxlZCAhPT0gZmFsc2UgJiYgaGFuZGxlZCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5yZXNwb25zZSA9IGVycm9yO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBodHRwUmVzcG9uc2VJbnRlcmNlcHRvcnM6IChbbnVtYmVyLCAoKGFyZ3M6IG5nLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4pID0+IGJvb2xlYW4pXSlbXSA9IFtdO1xyXG5cclxuICAgIHByb3RlY3RlZCBhZGRIdHRwUmVzcG9uc2VJbnRlcmNlcHRvcihpbnRlcmNlcHRvcjogKGFyZ3M6IG5nLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPGFueT4pID0+IGJvb2xlYW4sIHByaW9yaXR5OiBudW1iZXIgPSAxMDApIHtcclxuICAgICAgICB0aGlzLmh0dHBSZXNwb25zZUludGVyY2VwdG9ycy5wdXNoKFtwcmlvcml0eSwgaW50ZXJjZXB0b3JdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZVJlc3BvbnNlPFJlc3VsdFR5cGUsIFJlc3BvbnNlVHlwZT4ocmVzcG9uc2U6IG5nLklIdHRwUHJvbWlzZUNhbGxiYWNrQXJnPFJlc3BvbnNlVHlwZT4sIGZ1bGxSZXNwb25zZTogYm9vbGVhbiA9IGZhbHNlKTogUmVzdWx0VHlwZSB7XHJcbiAgICAgICAgZm9yICh2YXIgaW50ZXJjZXB0b3Igb2YgdGhpcy5odHRwUmVzcG9uc2VJbnRlcmNlcHRvcnMuc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcmNlcHRvclsxXShyZXNwb25zZSkgPT09IHRydWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdWxsUmVzcG9uc2UgPyA8YW55PnJlc3BvbnNlIDogcmVzcG9uc2UuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhlYWRlclNldHRlcnM6IChbbnVtYmVyLCAoaGVhZGVyczogbmcuSUh0dHBSZXF1ZXN0Q29uZmlnSGVhZGVycykgPT4gbmcuSUh0dHBSZXF1ZXN0Q29uZmlnSGVhZGVyc10pW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgYWRkSGVhZGVyU2V0dGVyKGhlYWRlclNldHRlcjogKGhlYWRlcnM6IG5nLklIdHRwUmVxdWVzdENvbmZpZ0hlYWRlcnMpID0+IG5nLklIdHRwUmVxdWVzdENvbmZpZ0hlYWRlcnMsIHByaW9yaXR5OiBudW1iZXIgPSAxMDApIHtcclxuICAgICAgICB0aGlzLmhlYWRlclNldHRlcnMucHVzaChbcHJpb3JpdHksIGhlYWRlclNldHRlcl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVIZWFkZXJTZXR0ZXIocHJpb3JpdHk6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyU2V0dGVycyA9IHRoaXMuaGVhZGVyU2V0dGVycy5maWx0ZXIoaHMgPT4gaHNbMF0gIT0gcHJpb3JpdHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0SGVhZGVycyhoZWFkZXJzOiBuZy5JSHR0cFJlcXVlc3RDb25maWdIZWFkZXJzKTogbmcuSUh0dHBSZXF1ZXN0Q29uZmlnSGVhZGVycyB7XHJcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMgfHwge307XHJcbiAgICAgICAgdGhpcy5oZWFkZXJTZXR0ZXJzLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5mb3JFYWNoKGhzID0+IGhlYWRlcnMgPSBoc1sxXShoZWFkZXJzKSk7XHJcbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXF1ZXN0VHJhbnNmb3JtZXJzOiAoW251bWJlciwgKGRhdGE6IGFueSwgaGVhZGVyc0dldHRlcjogbmcuSUh0dHBIZWFkZXJzR2V0dGVyKSA9PiB7IGRhdGE6IGFueSwgY29udGludWU6IGJvb2xlYW4gfV0pW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgYWRkUmVxdWVzdFRyYW5zZm9ybWVycyhyZXF1ZXN0VHJhbnNmb3JtZXI6IChkYXRhOiBhbnksIGhlYWRlcnNHZXR0ZXI6IG5nLklIdHRwSGVhZGVyc0dldHRlcikgPT4geyBkYXRhOiBhbnksIGNvbnRpbnVlOiBib29sZWFuIH0sIHByaW9yaXR5OiBudW1iZXIgPSAxMDApIHtcclxuICAgICAgICB0aGlzLnJlcXVlc3RUcmFuc2Zvcm1lcnMucHVzaChbcHJpb3JpdHksIHJlcXVlc3RUcmFuc2Zvcm1lcl0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdHJhbnNmb3JtUmVxdWVzdChkYXRhOiBhbnksIGhlYWRlcnNHZXR0ZXI6IG5nLklIdHRwSGVhZGVyc0dldHRlcik6IGFueSB7XHJcbiAgICAgICAgZm9yICh2YXIgdHJhbnNmb3JtZXIgb2YgdGhpcy5yZXF1ZXN0VHJhbnNmb3JtZXJzLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzID0gdHJhbnNmb3JtZXJbMV0oZGF0YSwgaGVhZGVyc0dldHRlcik7XHJcbiAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgaWYgKCFyZXMuY29udGludWUpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlc3BvbnNlVHJhbnNmb3JtZXJzOiAoW251bWJlciwgKGRhdGE6IGFueSwgaGVhZGVyc0dldHRlcjogbmcuSUh0dHBIZWFkZXJzR2V0dGVyLCBzdGF0dXM6IG51bWJlcikgPT4geyBkYXRhOiBhbnksIGNvbnRpbnVlOiBib29sZWFuIH1dKVtdID0gW107XHJcblxyXG4gICAgcHVibGljIGFkZFJlc3BvbnNlVHJhbnNmb3JtZXIocmVzcG9uc2VUcmFuc2Zvcm1lcjogKGRhdGE6IGFueSwgaGVhZGVyc0dldHRlcjogbmcuSUh0dHBIZWFkZXJzR2V0dGVyLCBzdGF0dXM6IG51bWJlcikgPT4geyBkYXRhOiBhbnksIGNvbnRpbnVlOiBib29sZWFuIH0sIHByaW9yaXR5OiBudW1iZXIgPSAxMDApIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlVHJhbnNmb3JtZXJzLnB1c2goW3ByaW9yaXR5LCByZXNwb25zZVRyYW5zZm9ybWVyXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1SZXNwb25zZShkYXRhOiBhbnksIGhlYWRlcnNHZXR0ZXI6IG5nLklIdHRwSGVhZGVyc0dldHRlciwgc3RhdHVzOiBudW1iZXIpOiBhbnkge1xyXG4gICAgICAgIGZvciAodmFyIHRyYW5zZm9ybWVyIG9mIHRoaXMucmVzcG9uc2VUcmFuc2Zvcm1lcnMuc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXMgPSB0cmFuc2Zvcm1lclsxXShkYXRhLCBoZWFkZXJzR2V0dGVyLCBzdGF0dXMpO1xyXG4gICAgICAgICAgICBkYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGlmICghcmVzLmNvbnRpbnVlKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VDYXNlU2VydmljZSB9IGZyb20gXCIuL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIjtcclxuaW1wb3J0ICogYXMgUnggZnJvbSBcInJ4anNcIlxyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4vbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZWFyY2hEYXRhLCBDb21wYWN0U2VydmljZUNhc2UgfSBmcm9tIFwiLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXN1bHQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pRnFzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBtb2R1bGU6IEZJUUFzc2lzdCxcclxuICAgIHNlbGVjdG9yOiBTZXJ2aWNlQ2FzZVByb2plY3RTZXJ2aWNlLnNlbGVjdG9yXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQ2FzZVByb2plY3RTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcInNlcnZpY2VDYXNlUHJvamVjdFNlcnZpY2VcIjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBzZXJ2aWNlQ2FzZVNlcnZpY2U6IFNlcnZpY2VDYXNlU2VydmljZSxcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfY3VycmVudFNlYXJjaFN1YnNjcmlwdGlvbjogUnguU3Vic2NyaXB0aW9uO1xyXG4gICAgcHJpdmF0ZSBnZXQgY3VycmVudFNlYXJjaCgpOiBSeC5TdWJzY3JpcHRpb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U2VhcmNoU3Vic2NyaXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZXQgY3VycmVudFNlYXJjaChzdWJzY3JpcHRpb246IFJ4LlN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2VhcmNoU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jdXJyZW50U3ViamVjdDogUnguU3ViamVjdDxDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT4+O1xyXG4gICAgcHJpdmF0ZSBnZXQgY3VycmVudFN1YmplY3QoKTogUnguU3ViamVjdDxDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN1YmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXQgY3VycmVudFN1YmplY3Qoc3ViamVjdDogUnguU3ViamVjdDxDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT4+KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdWJqZWN0ID0gc3ViamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jdXJyZW50UmVzdWx0OiBDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT47XHJcbiAgICBwdWJsaWMgZ2V0IEN1cnJlbnRSZXN1bHQoKTogQ29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IENhc2VOdW1iZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoaW5nO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZWFyY2hpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgU2VhcmNoKGNhc2VOdW1iZXI6IHN0cmluZywgY3VzdG9tZXJzOiBhbnlbXSwgbGltaXQ6IG51bWJlciA9IDEwMCwgc2tpcDogbnVtYmVyID0gMCwgZnVsbFRyZWUgPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRSZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IFJ4LlN1YmplY3Q8Q29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+PigpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gUnguT2JzZXJ2YWJsZS5mcm9tUHJvbWlzZShcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuQWR2YW5jZWRTZWFyY2goKGZ1bGxUcmVlID8geyBpbmNsdWRlUHJvamVjdFRyZWU6IHRydWUsIGNhc2VOdW1iZXI6IGNhc2VOdW1iZXIgfSA6IHsgaW5jbHVkZU5laWdoYm91cjogdHJ1ZSwgY2FzZU51bWJlcjogY2FzZU51bWJlciB9KSBhcyBTZWFyY2hEYXRhLCBjdXN0b21lcnMsIGxpbWl0LCBza2lwKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQodGhpcy5fY3VycmVudFJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlcnZpY2VDYXNlUHJvamVjdFNlcnZpY2UnLCAnRXJyb3Igd2hpbGUgc2VhcmNoaW5nJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoID0gc3Vic2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN1YmplY3QgPSBzdWJqZWN0O1xyXG4gICAgICAgIHJldHVybiBzdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEZJUUFzc2lzdCB9IGZyb20gXCIuLi9hcHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBmaXFhcy9hbmd1bGFyLXV0aWxzXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VDYXNlU2VydmljZSB9IGZyb20gXCIuL2ZpcWFzc2lzdEFwaS9zZXJ2aWNlQ2FzZVNlcnZpY2VcIjtcclxuaW1wb3J0ICogYXMgUnggZnJvbSBcInJ4anNcIlxyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4vbG9nU2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb21wYWN0U2VydmljZUNhc2UgfSBmcm9tIFwiLi4vbW9kZWxzL3NlcnZpY2VDYXNlXCI7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tIFwiLi4vbW9kZWxzL3VzZXJcIjtcclxuaW1wb3J0IHsgQ29sbGVjdGlvblJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2lGcXNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIG1vZHVsZTogRklRQXNzaXN0LFxyXG4gICAgc2VsZWN0b3I6IFNlcnZpY2VDYXNlU2VhcmNoU2VydmljZS5zZWxlY3RvclxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VydmljZUNhc2VTZWFyY2hTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2VsZWN0b3IgPSBcInNlcnZpY2VDYXNlU2VhcmNoU2VydmljZVwiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIHNlcnZpY2VDYXNlU2VydmljZTogU2VydmljZUNhc2VTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoKSBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9jdXJyZW50U2VhcmNoU3Vic2NyaXB0aW9uOiBSeC5TdWJzY3JpcHRpb247XHJcbiAgICBwcml2YXRlIGdldCBjdXJyZW50U2VhcmNoKCk6IFJ4LlN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb247XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNldCBjdXJyZW50U2VhcmNoKHN1YnNjcmlwdGlvbjogUnguU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWFyY2hTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoU3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2N1cnJlbnRTdWJqZWN0OiBSeC5TdWJqZWN0PENvbGxlY3Rpb25SZXN1bHQ8Q29tcGFjdFNlcnZpY2VDYXNlPj47XHJcbiAgICBwcml2YXRlIGdldCBjdXJyZW50U3ViamVjdCgpOiBSeC5TdWJqZWN0PENvbGxlY3Rpb25SZXN1bHQ8Q29tcGFjdFNlcnZpY2VDYXNlPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3ViamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldCBjdXJyZW50U3ViamVjdChzdWJqZWN0OiBSeC5TdWJqZWN0PENvbGxlY3Rpb25SZXN1bHQ8Q29tcGFjdFNlcnZpY2VDYXNlPj4pIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN1YmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFN1YmplY3QuY29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN1YmplY3QgPSBzdWJqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2N1cnJlbnRSZXN1bHQ6IENvbGxlY3Rpb25SZXN1bHQ8Q29tcGFjdFNlcnZpY2VDYXNlPjtcclxuICAgIHB1YmxpYyBnZXQgQ3VycmVudFJlc3VsdCgpOiBDb2xsZWN0aW9uUmVzdWx0PENvbXBhY3RTZXJ2aWNlQ2FzZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgU2VhcmNoaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaGluZztcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2VhcmNoaW5nID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIFNlYXJjaChzZWFyY2hTdHJpbmc6IHN0cmluZywgY3VzdG9tZXJzOiBhbnlbXSwgbGltaXQ6IG51bWJlciwgc2tpcDogbnVtYmVyLCB1c2VyOiBVc2VyID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRSZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IFJ4LlN1YmplY3Q8Q29sbGVjdGlvblJlc3VsdDxDb21wYWN0U2VydmljZUNhc2U+PigpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gUnguT2JzZXJ2YWJsZS5mcm9tUHJvbWlzZShcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ2FzZVNlcnZpY2UuRmlsdGVyZWRTZWFyY2goc2VhcmNoU3RyaW5nLCBjdXN0b21lcnMsIDEwMCwgMCwgdXNlciA/IHsgY3JlYXRlZEJ5SWQ6IHVzZXIucGVyc29uSWQgfSA6IHVuZGVmaW5lZClcclxuICAgICAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50UmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBSeC5PYnNlcnZhYmxlLmZyb21Qcm9taXNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VDYXNlU2VydmljZS5GaWx0ZXJlZFNlYXJjaChzZWFyY2hTdHJpbmcsIGN1c3RvbWVycywgMiwgMCwgdXNlciA/IHsgY3JlYXRlZEJ5SWQ6IHVzZXIucGVyc29uSWQsIGNhc2VTdGF0dXNlczogWydjYW5jZWxsZWQnLCAnY2xvc2VkJ10gfSA6IHsgY2FzZVN0YXR1c2VzOiBbJ2NhbmNlbGxlZCcsICdjbG9zZWQnXSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291bnQgPD0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQodGhpcy5fY3VycmVudFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ1NlcnZpY2VDYXNlU2VhcmNoU2VydmljZScsICdFcnJvciB3aGlsZSBzZWFyY2hpbmcnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2ggPSBzdWJzY3JpcHRpb247XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCh0aGlzLl9jdXJyZW50UmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcignU2VydmljZUNhc2VTZWFyY2hTZXJ2aWNlJywgJ0Vycm9yIHdoaWxlIHNlYXJjaGluZycsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHN1YmplY3QuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaCA9IHN1YnNjcmlwdGlvbjtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdWJqZWN0ID0gc3ViamVjdDtcclxuICAgICAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxufVxyXG4iLCLvu79pbXBvcnQgeyBGSVFBc3Npc3QgfSBmcm9tIFwiLi4vYXBwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gXCJAZmlxYXMvYW5ndWxhci11dGlsc1wiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4vbG9nU2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgbW9kdWxlOiBGSVFBc3Npc3QsXHJcbiAgICBzZWxlY3RvcjogU2Vzc2lvblNlcnZpY2Uuc2VsZWN0b3JcclxufSlcclxuLyoqXHJcbiAqIFNlc3Npb24gY2xhc3MsIHN0b3JlcyB2YWx1ZXMgYXMgSlNPTiBpbiBsb2NhbCBicm93c2VyIHN0b3JhZ2UuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2Vzc2lvblNlcnZpY2Uge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3RvciA9IFwiU2Vzc2lvblwiXHJcblxyXG4gICAgcHJpdmF0ZSBzZXNzaW9ucHJlZml4OiBzdHJpbmcgPSBcIkZpcWFzc2lzdC5TZXNzaW9uXCI7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCkgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSB2YWx1ZSBieSBrZXkuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IEtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxyXG4gICAgICogQHJldHVybnMgVCBJdGVtIGZyb20gc2Vzc2lvbiBvciBudWxsIGlmIG5vdCBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFZhbHVlPFQ+KGtleTogc3RyaW5nKTogVCB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnJldHJpZXZlPFQ+KGtleSk7XHJcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XHJcblxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXRyaWV2ZTxUPihrZXkpOiBJdGVtPFQ+IHtcclxuICAgICAgICB2YXIgaXRlbSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5zZXNzaW9ucHJlZml4fS4ke2tleX1gKTtcclxuICAgICAgICBpZiAoaXRlbSAhPSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gPEl0ZW08VD4+SlNPTi5wYXJzZShpdGVtKTtcclxuXHJcbiAgICAgICAgaXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMuc2Vzc2lvbnByZWZpeH0uJHtrZXl9YCk7XHJcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIDxJdGVtPFQ+PkpTT04ucGFyc2UoaXRlbSk7XHJcblxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdG9yZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIHJlYWRvbmx5OiBib29sZWFuLCBwZXJzaXN0ZW50OiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGl0ZW06IEl0ZW08VD4gPSB7IHZhbHVlOiB2YWx1ZSwgcmVhZG9ubHk6IHJlYWRvbmx5IH07XHJcbiAgICAgICAgICAgIHZhciBzdG9yYWdlID0gcGVyc2lzdGVudCA/IGxvY2FsU3RvcmFnZSA6IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgICAgICBzdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5zZXNzaW9ucHJlZml4fS4ke2tleX1gLCBKU09OLnN0cmluZ2lmeShpdGVtKSk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5pbmZvKCdTZXNzaW9uJywgYGl0ZW0gY2Fubm90IGJlIHNldCBmb3Iga2V5ICR7a2V5fSwgJHtleH1gLCBleCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFN0b3JlIGEgdmFsdWUgaW4gdGhlIHNlc3Npb24uXHJcbiAgICAqIEBwYXJhbSAge3N0cmluZ30ga2V5IFRoZSBrZXkgdG8gc3RvcmUgdGhlIHZhbHVlIHdpdGguXHJcbiAgICAqIEBwYXJhbSAge1R9IHZhbHVlIFRoZSB2YWx1ZSB0byBzdG9yZS5cclxuICAgICogQHBhcmFtICB7Ym9vbGVhbj1mYWxzZX0gcmVhZG9ubHkgU2V0IHZhbHVlIGFzIHJlYWRvbmx5LlxyXG4gICAgKiBAcmV0dXJucyBib29sZWFuIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB2YWx1ZSB3YXMgc3RvcmVkIHN1Y2Nlc3NmdWxseS5cclxuICAgICovXHJcbiAgICBwdWJsaWMgc2V0VmFsdWU8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBULCByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlLCBwZXJzaXN0ZW50OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5yZXRyaWV2ZTxUPihrZXkpO1xyXG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0ucmVhZG9ubHkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtrZXl9IGlzIHJlYWRvbmx5IGFuZCBjYW5ub3QgYmUgc2V0YCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlKGtleSwgdmFsdWUsIHJlYWRvbmx5LCBwZXJzaXN0ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFyIGEgdmFsdWUgYnkga2V5LCBvciBhbGwgdmFsdWVzIGlmIGtleSBpcyBvbWl0dGVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBPcHRpb25hbCBrZXkgb2YgdmFsdWUgdG8gcmVtb3ZlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXIoa2V5Pzogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnNlc3Npb25wcmVmaXh9LiR7a2V5fWApO1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMuc2Vzc2lvbnByZWZpeH0uJHtrZXl9YCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jYWxTdG9yYWdlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgayA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoay5pbmRleE9mKHRoaXMuc2Vzc2lvbnByZWZpeCkgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGspXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGl0ZW0pKTtcclxuXHJcbiAgICAgICAgICAgIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vzc2lvblN0b3JhZ2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBrID0gc2Vzc2lvblN0b3JhZ2Uua2V5KGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGsuaW5kZXhPZih0aGlzLnNlc3Npb25wcmVmaXgpID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChrKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGl0ZW0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBJdGVtPFQ+IHtcclxuICAgIHJlYWRvbmx5OiBib29sZWFuO1xyXG4gICAgdmFsdWU6IFQ7XHJcbn0iXX0="}